ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGM5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCkBAIC0wLDAgKzEsMjk0IEBACisKK1RoaXMgaXMgYSBicmllZiBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgaW4gLi9saW51eC9Eb2N1bWVudGF0aW9uIGFuZCB3aGF0Cit0aGV5IGNvbnRhaW4uIElmIHlvdSBhZGQgYSBkb2N1bWVudGF0aW9uIGZpbGUsIHBsZWFzZSBsaXN0IGl0IGhlcmUgaW4KK2FscGhhYmV0aWNhbCBvcmRlciBhcyB3ZWxsLCBvciByaXNrIGJlaW5nIGh1bnRlZCBkb3duIGxpa2UgYSByYWJpZCBkb2cuCitQbGVhc2UgdHJ5IGFuZCBrZWVwIHRoZSBkZXNjcmlwdGlvbnMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBvbmUgbGluZS4KKwkJCQkJCQkgVGhhbmtzIC0tIFBhdWwgRy4KKworRm9sbG93aW5nIHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBXV1c6CisKKyAgIC0gSmFwYW5lc2UsIG1haW50YWluZWQgYnkgdGhlIEpGIFByb2plY3QgKEpGQGxpbnV4Lm9yLmpwKSwgYXQKKyAgICAgaHR0cDovL3d3dy5saW51eC5vci5qcC9KRi8KKworMDAtSU5ERVgKKwktIHRoaXMgZmlsZS4KK0JLLXVzYWdlLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiBCaXRLZWVwZXIuCitCVUctSFVOVElORworCS0gYnJ1dGUgZm9yY2UgbWV0aG9kIG9mIGRvaW5nIGJpbmFyeSBzZWFyY2ggb2YgcGF0Y2hlcyB0byBmaW5kIGJ1Zy4KK0NoYW5nZXMKKwktIGxpc3Qgb2YgY2hhbmdlcyB0aGF0IGJyZWFrIG9sZGVyIHNvZnR3YXJlIHBhY2thZ2VzLgorQ29kaW5nU3R5bGUKKwktIGhvdyB0aGUgYm9zcyBsaWtlcyB0aGUgQyBjb2RlIGluIHRoZSBrZXJuZWwgdG8gbG9vay4KK0RNQS1BUEkudHh0CisJLSBETUEgQVBJLCBwY2lfIEFQSSAmIGV4dGVuc2lvbnMgZm9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4KK0RNQS1tYXBwaW5nLnR4dAorCS0gaW5mbyBmb3IgUENJIGRyaXZlcnMgdXNpbmcgRE1BIHBvcnRhYmx5IGFjcm9zcyBhbGwgcGxhdGZvcm1zLgorRG9jQm9vay8KKwktIGRpcmVjdG9yeSB3aXRoIERvY0Jvb2sgdGVtcGxhdGVzIGV0Yy4gZm9yIGtlcm5lbCBkb2N1bWVudGF0aW9uLgorSU8tbWFwcGluZy50eHQKKwktIGhvdyB0byBhY2Nlc3MgSS9PIG1hcHBlZCBtZW1vcnkgZnJvbSB3aXRoaW4gZGV2aWNlIGRyaXZlcnMuCitJUE1JLnR4dAorCS0gaW5mbyBvbiBMaW51eCBJbnRlbGxpZ2VudCBQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVyZmFjZSAoSVBNSSkgRHJpdmVyLgorSVJRLWFmZmluaXR5LnR4dAorCS0gaG93IHRvIHNlbGVjdCB3aGljaCBDUFUocykgaGFuZGxlIHdoaWNoIGludGVycnVwdCBldmVudHMgb24gU01QLgorTWFuYWdlbWVudFN0eWxlCisJLSBob3cgdG8gKGF0dGVtcHQgdG8pIG1hbmFnZSBrZXJuZWwgaGFja2Vycy4KK01TSS1IT1dUTy50eHQKKwktIHRoZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSkgRHJpdmVyIEd1aWRlIEhPV1RPIGFuZCBGQVEuCitSQ1UvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIFJDVSAocmVhZC1jb3B5IHVwZGF0ZSkuCitSRUFETUUuREFDOTYwCisJLSBpbmZvIG9uIE15bGV4IERBQzk2MC9EQUMxMTAwIFBDSSBSQUlEIENvbnRyb2xsZXIgRHJpdmVyIGZvciBMaW51eC4KK1NBSy50eHQKKwktIGluZm8gb24gU2VjdXJlIEF0dGVudGlvbiBLZXlzLgorU3VibWl0dGluZ0RyaXZlcnMKKwktIHByb2NlZHVyZSB0byBnZXQgYSBuZXcgZHJpdmVyIHNvdXJjZSBpbmNsdWRlZCBpbnRvIHRoZSBrZXJuZWwgdHJlZS4KK1N1Ym1pdHRpbmdQYXRjaGVzCisJLSBwcm9jZWR1cmUgdG8gZ2V0IGEgc291cmNlIHBhdGNoIGluY2x1ZGVkIGludG8gdGhlIGtlcm5lbCB0cmVlLgorVkdBLXNvZnRjdXJzb3IudHh0CisJLSBob3cgdG8gY2hhbmdlIHlvdXIgVkdBIGN1cnNvciBmcm9tIGEgYmxpbmtpbmcgdW5kZXJzY29yZS4KK2FybS8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gYWJvdXQgTGludXggb24gdGhlIEFSTSBhcmNoaXRlY3R1cmUuCitiYXNpY19wcm9maWxpbmcudHh0CisJLSBiYXNpYyBpbnN0cnVjdGlvbnMgZm9yIHRob3NlIHdobyB3YW50cyB0byBwcm9maWxlIExpbnV4IGtlcm5lbC4KK2JpbmZtdF9taXNjLnR4dAorCS0gaW5mbyBvbiB0aGUga2VybmVsIHN1cHBvcnQgZm9yIGV4dHJhIGJpbmFyeSBmb3JtYXRzLgorYmxvY2svCisJLSBpbmZvIG9uIHRoZSBCbG9jayBJL08gKEJJTykgbGF5ZXIuCitjYWNoZXRsYi50eHQKKwktIGRlc2NyaWJlcyB0aGUgY2FjaGUvVExCIGZsdXNoaW5nIGludGVyZmFjZXMgTGludXggdXNlcy4KK2NjaXNzLnR4dAorCS0gaW5mbywgbWFqb3IvbWlub3IgIydzIGZvciBDb21wYXEncyBTTUFSVCBBcnJheSBDb250cm9sbGVycy4KK2Nkcm9tLworCS0gZGlyZWN0b3J5IHdpdGggaW5mb3JtYXRpb24gb24gdGhlIENELVJPTSBkcml2ZXJzIHRoYXQgTGludXggaGFzLgorY2xpLXN0aS1yZW1vdmFsLnR4dAorCS0gY2xpKCkvc3RpKCkgcmVtb3ZhbCBndWlkZS4KK2NvbXB1dG9uZS50eHQKKwktIGluZm8gb24gQ29tcHV0b25lIEludGVsbGlwb3J0IElJL1BsdXMgTXVsdGlwb3J0IFNlcmlhbCBEcml2ZXIuCitjcHFhcnJheS50eHQKKwktIGluZm8gb24gdXNpbmcgQ29tcGFxJ3MgU01BUlQyIEludGVsbGlnZW50IERpc2sgQXJyYXkgQ29udHJvbGxlcnMuCitjcHUtZnJlcS8KKwktIGluZm8gb24gQ1BVIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nLgorY3Jpcy8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gYWJvdXQgTGludXggb24gQ1JJUyBhcmNoaXRlY3R1cmUuCitjcnlwdG8vCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHRoZSBDcnlwdG8gQVBJLgorZGVidWdnaW5nLW1vZHVsZXMudHh0CisJLSBzb21lIG5vdGVzIG9uIGRlYnVnZ2luZyBtb2R1bGVzIGFmdGVyIExpbnV4IDIuNi4zLgorZGV2aWNlLW1hcHBlci8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gRGV2aWNlIE1hcHBlci4KK2RldmljZXMudHh0CisJLSBwbGFpbiBBU0NJSSBsaXN0aW5nIG9mIGFsbCB0aGUgbm9kZXMgaW4gL2Rldi8gd2l0aCBtYWpvciBtaW5vciAjJ3MuCitkaWdpZXBjYS50eHQKKwktIGluZm8gb24gRGlnaSBJbnRsLiB7UEMsUENJLEVJU0F9WHggYW5kIFhlbSBzZXJpZXMgY2FyZHMuCitkbm90aWZ5LnR4dAorCS0gaW5mbyBhYm91dCBkaXJlY3Rvcnkgbm90aWZpY2F0aW9uIGluIExpbnV4LgorZHJpdmVyLW1vZGVsLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBkcml2ZXIgbW9kZWwuCitkdmIvCisJLSBpbmZvIG9uIExpbnV4IERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0IChEVkIpIHN1YnN5c3RlbS4KK2Vhcmx5LXVzZXJzcGFjZS8KKwktIGluZm8gYWJvdXQgaW5pdHJhbWZzLCBrbGliYywgYW5kIHVzZXJzcGFjZSBlYXJseSBkdXJpbmcgYm9vdC4KK2Vpc2EudHh0CisJLSBpbmZvIG9uIEVJU0EgYnVzIHN1cHBvcnQuCitleGNlcHRpb24udHh0CisJLSBob3cgTGludXggdjIuMiBoYW5kbGVzIGV4Y2VwdGlvbnMgd2l0aG91dCB2ZXJpZnlfYXJlYSBldGMuCitmYi8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIGZyYW1lIGJ1ZmZlciBncmFwaGljcyBhYnN0cmFjdGlvbiBsYXllci4KK2ZpbGVzeXN0ZW1zLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB0aGUgdmFyaW91cyBmaWxlc3lzdGVtcyB0aGF0IExpbnV4IHN1cHBvcnRzLgorZmlybXdhcmVfY2xhc3MvCisJLSByZXF1ZXN0X2Zpcm13YXJlKCkgaG90cGx1ZyBpbnRlcmZhY2UgaW5mby4KK2Zsb3BweS50eHQKKwktIG5vdGVzIGFuZCBkcml2ZXIgb3B0aW9ucyBmb3IgdGhlIGZsb3BweSBkaXNrIGRyaXZlci4KK2Z0YXBlLnR4dAorCS0gbm90ZXMgYWJvdXQgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIuCitoYXllcy1lc3AudHh0CisJLSBpbmZvIG9uIHVzaW5nIHRoZSBIYXllcyBFU1Agc2VyaWFsIGRyaXZlci4KK2hpZ2h1aWQudHh0CisJLSBub3RlcyBvbiB0aGUgY2hhbmdlIGZyb20gMTYgYml0IHRvIDMyIGJpdCB1c2VyL2dyb3VwIElEcy4KK2hwZXQudHh0CisJLSBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciBEcml2ZXIgZm9yIExpbnV4LgoraHdfcmFuZG9tLnR4dAorCS0gaW5mbyBvbiBMaW51eCBzdXBwb3J0IGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBpbiBpOHh4IGNoaXBzZXRzLgoraTJjLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCB0aGUgSTJDIGJ1cy9wcm90b2NvbCAoMiB3aXJlLCBrSHogc3BlZWQpLgoraTJvLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCB0aGUgTGludXggSTJPIHN1YnN5c3RlbS4KK2kzODYvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIGFib3V0IExpbnV4IG9uIEludGVsIDMyIGJpdCBhcmNoaXRlY3R1cmUuCitpYTY0LworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBJbnRlbCA2NCBiaXQgYXJjaGl0ZWN0dXJlLgoraWRlLnR4dAorCS0gaW1wb3J0YW50IGluZm8gZm9yIHVzZXJzIG9mIEFUQSBkZXZpY2VzIChJREUvRUlERSBkaXNrcyBhbmQgQ0QtUk9NUykuCitpbml0cmQudHh0CisJLSBob3cgdG8gdXNlIHRoZSBSQU0gZGlzayBhcyBhbiBpbml0aWFsL3RlbXBvcmFyeSByb290IGZpbGVzeXN0ZW0uCitpbnB1dC8KKwktIGluZm8gb24gTGludXggaW5wdXQgZGV2aWNlIHN1cHBvcnQuCitpb19vcmRlcmluZy50eHQKKwktIGluZm8gb24gb3JkZXJpbmcgSS9PIHdyaXRlcyB0byBtZW1vcnktbWFwcGVkIGFkZHJlc3Nlcy4KK2lvY3RsLW51bWJlci50eHQKKwktIGhvdyB0byBpbXBsZW1lbnQgYW5kIHJlZ2lzdGVyIGRldmljZS9kcml2ZXIgaW9jdGwgY2FsbHMuCitpb3N0YXRzLnR4dAorCS0gaW5mbyBvbiBJL08gc3RhdGlzdGljcyBMaW51eCBrZXJuZWwgcHJvdmlkZXMuCitpc2FwbnAudHh0CisJLSBpbmZvIG9uIExpbnV4IElTQSBQbHVnICYgUGxheSBzdXBwb3J0LgoraXNkbi8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIExpbnV4IElTRE4gc3VwcG9ydCwgYW5kIHN1cHBvcnRlZCBjYXJkcy4KK2phdmEudHh0CisJLSBpbmZvIG9uIHRoZSBpbi1rZXJuZWwgYmluYXJ5IHN1cHBvcnQgZm9yIEphdmEodG0pLgora2J1aWxkLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuCitrZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0CisJLSBtaW5pIEhvd1RvIG9uIGdlbmVyYXRpb24gYW5kIGxvY2F0aW9uIG9mIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZpbGVzLgora2VybmVsLWRvY3MudHh0CisJLSBsaXN0aW5nIG9mIHZhcmlvdXMgV1dXICsgYm9va3MgdGhhdCBkb2N1bWVudCBrZXJuZWwgaW50ZXJuYWxzLgora2VybmVsLXBhcmFtZXRlcnMudHh0CisJLSBzdW1tYXJ5IGxpc3Rpbmcgb2YgY29tbWFuZCBsaW5lIC8gYm9vdCBwcm9tcHQgYXJncyBmb3IgdGhlIGtlcm5lbC4KK2tvYmplY3QudHh0CisJLSBpbmZvIG9mIHRoZSBrb2JqZWN0IGluZnJhc3RydWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwuCitsYXB0b3AtbW9kZS50eHQKKwktIEhvdyB0byBjb25zZXJ2ZSBiYXR0ZXJ5IHBvd2VyIHVzaW5nIGxhcHRvcC1tb2RlLgorbGRtLnR4dAorCS0gYSBicmllZiBkZXNjcmlwdGlvbiBvZiBMRE0gKFdpbmRvd3MgRHluYW1pYyBEaXNrcykuCitsb2Nrcy50eHQKKwktIGluZm8gb24gZmlsZSBsb2NraW5nIGltcGxlbWVudGF0aW9ucywgZmxvY2soKSB2cy4gZmNudGwoKSwgZXRjLgorbG9nby5naWYKKwktIEZ1bGwgY29sb3VyIEdJRiBpbWFnZSBvZiBMaW51eCBsb2dvIChwZW5ndWluKS4KK2xvZ28udHh0CisJLSBJbmZvIG9uIGNyZWF0b3Igb2YgYWJvdmUgbG9nbyAmIHNpdGUgdG8gZ2V0IGFkZGl0aW9uYWwgaW1hZ2VzIGZyb20uCittNjhrLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBNb3Rvcm9sYSA2OGsgYXJjaGl0ZWN0dXJlLgorbWFnaWMtbnVtYmVyLnR4dAorCS0gbGlzdCBvZiBtYWdpYyBudW1iZXJzIHVzZWQgdG8gbWFyay9wcm90ZWN0IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCittYW5kYXRvcnkudHh0CisJLSBpbmZvIG9uIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiBTeXMgViBtYW5kYXRvcnkgZmlsZSBsb2NraW5nLgorbWNhLnR4dAorCS0gaW5mbyBvbiBzdXBwb3J0aW5nIE1pY3JvIENoYW5uZWwgQXJjaGl0ZWN0dXJlIChlLmcuIFBTLzIpIHN5c3RlbXMuCittZC50eHQKKwktIGluZm8gb24gYm9vdCBhcmd1bWVudHMgZm9yIHRoZSBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlci4KK21lbW9yeS50eHQKKwktIGluZm8gb24gdHlwaWNhbCBMaW51eCBtZW1vcnkgcHJvYmxlbXMuCittaXBzLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBNSVBTIGFyY2hpdGVjdHVyZS4KK21vbm8udHh0CisJLSBob3cgdG8gZXhlY3V0ZSBNb25vLWJhc2VkIC5ORVQgYmluYXJpZXMgd2l0aCB0aGUgaGVscCBvZiBCSU5GTVRfTUlTQy4KK21veGEtc21hcnRpbworCS0gaW5mbyBvbiBpbnN0YWxsaW5nL3VzaW5nIE1veGEgbXVsdGlwb3J0IHNlcmlhbCBkcml2ZXIuCittdHJyLnR4dAorCS0gaG93IHRvIHVzZSBQUHJvIE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVycyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4KK25iZC50eHQKKwktIGluZm8gb24gYSBUQ1AgaW1wbGVtZW50YXRpb24gb2YgYSBuZXR3b3JrIGJsb2NrIGRldmljZS4KK25ldHdvcmtpbmcvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHZhcmlvdXMgYXNwZWN0cyBvZiBuZXR3b3JraW5nIHdpdGggTGludXguCituZnNyb290LnR4dAorCS0gc2hvcnQgZ3VpZGUgb24gc2V0dGluZyB1cCBhIGRpc2tsZXNzIGJveCB3aXRoIE5GUyByb290IGZpbGVzeXN0ZW0uCitubWlfd2F0Y2hkb2cudHh0CisJLSBpbmZvIG9uIE5NSSB3YXRjaGRvZyBmb3IgU01QIHN5c3RlbXMuCitudW1hc3RhdC50eHQKKwktIGluZm8gb24gaG93IHRvIHJlYWQgTnVtYSBwb2xpY3kgaGl0L21pc3Mgc3RhdGlzdGljcyBpbiBzeXNmcy4KK29vcHMtdHJhY2luZy50eHQKKwktIGhvdyB0byBkZWNvZGUgdGhvc2UgbmFzdHkgaW50ZXJuYWwga2VybmVsIGVycm9yIGR1bXAgbWVzc2FnZXMuCitwYXJpZGUudHh0CisJLSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYWxsZWwgcG9ydCBJREUgc3Vic3lzdGVtLgorcGFyaXNjLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB1c2luZyBMaW51eCBvbiBQQS1SSVNDIGFyY2hpdGVjdHVyZS4KK3BhcnBvcnQudHh0CisJLSBob3cgdG8gdXNlIHRoZSBwYXJhbGxlbC1wb3J0IGRyaXZlci4KK3BhcnBvcnQtbG93bGV2ZWwudHh0CisJLSBkZXNjcmlwdGlvbiBhbmQgdXNhZ2Ugb2YgdGhlIGxvdyBsZXZlbCBwYXJhbGxlbCBwb3J0IGZ1bmN0aW9ucy4KK3BjaS50eHQKKwktIGluZm8gb24gdGhlIFBDSSBzdWJzeXN0ZW0gZm9yIGRldmljZSBkcml2ZXIgYXV0aG9ycy4KK3BtLnR4dAorCS0gaW5mbyBvbiBMaW51eCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCitwbnAudHh0CisJLSBMaW51eCBQbHVnIGFuZCBQbGF5IGRvY3VtZW50YXRpb24uCitwb3dlci8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gTGludXggUENJIHBvd2VyIG1hbmFnZW1lbnQuCitwb3dlcnBjLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB1c2luZyBMaW51eCB3aXRoIHRoZSBQb3dlclBDLgorcHJlZW1wdC1sb2NraW5nLnR4dAorCS0gaW5mbyBvbiBsb2NraW5nIHVuZGVyIGEgcHJlZW1wdGl2ZSBrZXJuZWwuCityYW1kaXNrLnR4dAorCS0gc2hvcnQgZ3VpZGUgb24gaG93IHRvIHNldCB1cCBhbmQgdXNlIHRoZSBSQU0gZGlzay4KK3Jpc2NvbTgudHh0CisJLSBub3RlcyBvbiB1c2luZyB0aGUgUklTQ29tLzggbXVsdGktcG9ydCBzZXJpYWwgZHJpdmVyLgorcm9ja2V0LnR4dAorCS0gaW5mbyBvbiB0aGUgQ29tdHJvbCBSb2NrZXRQb3J0IG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyLgorcnBjLWNhY2hlLnR4dAorCS0gaW50cm9kdWN0aW9uIHRvIHRoZSBjYWNoaW5nIG1lY2hhbmlzbXMgaW4gdGhlIHN1bnJwYyBsYXllci4KK3J0Yy50eHQKKwktIG5vdGVzIG9uIGhvdyB0byB1c2UgdGhlIFJlYWwgVGltZSBDbG9jayAoYWthIENNT1MgY2xvY2spIGRyaXZlci4KK3MzOTAvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHVzaW5nIExpbnV4IG9uIHRoZSBJQk0gUzM5MC4KK3NjaGVkLWNvZGluZy50eHQKKwktIHJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlci4KK3NjaGVkLWRlc2lnbi50eHQKKwktIGdvYWxzLCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMaW51eCBPKDEpIHNjaGVkdWxlci4KK3NjaGVkLWRvbWFpbnMudHh0CisJLSBpbmZvcm1hdGlvbiBvbiBzY2hlZHVsaW5nIGRvbWFpbnMuCitzY2hlZC1zdGF0cy50eHQKKwktIGluZm9ybWF0aW9uIG9uIHNjaGVkc3RhdHMgKExpbnV4IFNjaGVkdWxlciBTdGF0aXN0aWNzKS4KK3Njc2kvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIExpbnV4IHNjc2kgc3VwcG9ydC4KK3NlcmlhbC8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIGxvdyBsZXZlbCBzZXJpYWwgQVBJLgorc2VyaWFsLWNvbnNvbGUudHh0CisJLSBob3cgdG8gc2V0IHVwIExpbnV4IHdpdGggYSBzZXJpYWwgbGluZSBjb25zb2xlIGFzIHRoZSBkZWZhdWx0Lgorc2dpLXZpc3dzLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gdGhlIFNHSSBWaXN1YWwgV29ya3N0YXRpb25zLgorc2gvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHBvcnRpbmcgTGludXggdG8gYSBuZXcgYXJjaGl0ZWN0dXJlLgorc21hcnQtY29uZmlnLnR4dAorCS0gZGVzY3JpcHRpb24gb2YgdGhlIFNtYXJ0IENvbmZpZyBtYWtlZmlsZSBmZWF0dXJlLgorc21wLnR4dAorCS0gYSBmZXcgbm90ZXMgb24gc3ltbWV0cmljIG11bHRpLXByb2Nlc3NpbmcuCitzb255cGkudHh0CisJLSBpbmZvIG9uIExpbnV4IFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBEZXZpY2Ugc3VwcG9ydC4KK3NvdW5kLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiBzb3VuZCBjYXJkIHN1cHBvcnQuCitzcGFyYy8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdXNpbmcgTGludXggb24gU3BhcmMgYXJjaGl0ZWN0dXJlLgorc3BlY2lhbGl4LnR4dAorCS0gaW5mbyBvbiBoYXJkd2FyZS9kcml2ZXIgZm9yIHNwZWNpYWxpeCBJTzgrIG11bHRpcG9ydCBzZXJpYWwgY2FyZC4KK3NwaW5sb2Nrcy50eHQKKwktIGluZm8gb24gdXNpbmcgc3BpbmxvY2tzIHRvIHByb3ZpZGUgZXhjbHVzaXZlIGFjY2VzcyBpbiBrZXJuZWwuCitzdGFsbGlvbi50eHQKKwktIGluZm8gb24gdXNpbmcgdGhlIFN0YWxsaW9uIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyLgorc3ZnYS50eHQKKwktIHNob3J0IGd1aWRlIG9uIHNlbGVjdGluZyB2aWRlbyBtb2RlcyBhdCBib290IHZpYSBWR0EgQklPUy4KK3N4LnR4dAorCS0gaW5mbyBvbiB0aGUgU3BlY2lhbGl4IFNYL1NJIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyLgorc3lzY3RsLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBvbiB0aGUgL3Byb2Mvc3lzLyogZmlsZXMuCitzeXNycS50eHQKKwktIGluZm8gb24gdGhlIG1hZ2ljIFN5c1JxIGtleS4KK3RlbGVwaG9ueS8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGVsZXBob255IChlLmcuIHZvaWNlIG92ZXIgSVApIHN1cHBvcnQuCit0aW1lX2ludGVycG9sYXRvcnMudHh0CisJLSBpbmZvIG9uIHRpbWUgaW50ZXJwb2xhdG9ycy4KK3RpcGFyLnR4dAorCS0gaW5mb3JtYXRpb24gYWJvdXQgUGFyYWxsZWwgbGluayBjYWJsZSBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgaGFuZGhlbGRzLgordHR5LnR4dAorCS0gZ3VpZGUgdG8gdGhlIGxvY2tpbmcgcG9saWNpZXMgb2YgdGhlIHR0eSBsYXllci4KK3VuaWNvZGUudHh0CisJLSBpbmZvIG9uIHRoZSBVbmljb2RlIGNoYXJhY3Rlci9mb250IG1hcHBpbmcgdXNlZCBpbiBMaW51eC4KK3VtbC8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm9tYXRpb24gYWJvdXQgVXNlciBNb2RlIExpbnV4LgordXNiLworCS0gZGlyZWN0b3J5IHdpdGggaW5mbyByZWdhcmRpbmcgdGhlIFVuaXZlcnNhbCBTZXJpYWwgQnVzLgordmlkZW80bGludXgvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIHJlZ2FyZGluZyB2aWRlby9UVi9yYWRpbyBjYXJkcyBhbmQgbGludXguCit2bS8KKwktIGRpcmVjdG9yeSB3aXRoIGluZm8gb24gdGhlIExpbnV4IHZtIGNvZGUuCit2b3lhZ2VyLnR4dAorCS0gZ3VpZGUgdG8gcnVubmluZyBMaW51eCBvbiB0aGUgVm95YWdlciBhcmNoaXRlY3R1cmUuCit3YXRjaGRvZy8KKwktIGhvdyB0byBhdXRvLXJlYm9vdCBMaW51eCBpZiBpdCBoYXMgImZhbGxlbiBhbmQgY2FuJ3QgZ2V0IHVwIi4gOy0pCit4ODZfNjQvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIExpbnV4IHN1cHBvcnQgZm9yIEFNRCB4ODYtNjQgKEhhbW1lcikgbWFjaGluZXMuCit4dGVybS1saW51eC54cG0KKwktIFhQTSBpbWFnZSBvZiBwZW5ndWluIGxvZ28gKHNlZSBsb2dvLnR4dCkgc2l0dGluZyBvbiBhbiB4dGVybS4KK3pvcnJvLnR4dAorCS0gaW5mbyBvbiB3cml0aW5nIGRyaXZlcnMgZm9yIFpvcnJvIGJ1cyBkZXZpY2VzIGZvdW5kIG9uIEFtaWdhcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzY4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlLzAwLUlOREVYCkBAIC0wLDAgKzEsNTEgQEAKK2JrLWtlcm5lbC1ob3d0by50eHQ6IERlc2NyaXB0aW9uIG9mIGtlcm5lbCB3b3JrZmxvdyB1bmRlciBCaXRLZWVwZXIKKworYmstbWFrZS1zdW06IENyZWF0ZSBzdW1tYXJ5IG9mIGNoYW5nZXNldHMgaW4gb25lIHJlcG9zaXRvcnkgYW5kIG5vdAorYW5vdGhlciwgdHlwaWNhbGx5IGluIHByZXBhcmF0aW9uIHRvIGJlIHNlbnQgdG8gYW4gdXBzdHJlYW0gbWFpbnRhaW5lci4KK1R5cGljYWwgdXNhZ2U6CisJY2QgbXktdXBkYXRlZC1yZXBvCisJYmstbWFrZS1zdW0gfi9yZXBvL29yaWdpbmFsLXJlcG8KKwltdiAvdG1wL2xpbnVzLnR4dCAuLi9vcmlnaW5hbC1yZXBvLnR4dAorCitia3NlbmQ6IENyZWF0ZSByZWFkYWJsZSB0ZXh0IG91dHB1dCBjb250YWluaW5nIHN1bW1hcnkgb2YgY2hhbmdlcywgR05VCitwYXRjaCBvZiB0aGUgY2hhbmdlcywgYW5kIEJLIG1ldGFkYXRhIG9mIGNoYW5nZXMgKGFzIG5lZWRlZCBmb3IgcHJvcGVyCitpbXBvcnRpbmcgaW50byBCaXRLZWVwZXIgYnkgYW4gdXBzdHJlYW0gbWFpbnRhaW5lcikuICBUaGlzIG91dHB1dCBpcworc3VpdGFibGUgZm9yIGVtYWlsaW5nIEJpdEtlZXBlciBjaGFuZ2VzLiAgVGhlIHJlY2lwaWVudCBvZiB0aGlzIG91dHB1dAorbWF5IHBpcGUgaXQgZGlyZWN0bHkgdG8gJ2JrIHJlY2VpdmUnLgorCitiejY0d3JhcDogaGVscGVyIHNjcmlwdC4gVW5jb21wcmVzc2VkIGlucHV0IGlzIHBpcGVkIHRvIHRoaXMgc2NyaXB0LAord2hpY2ggY29tcHJlc3NlcyBpdHMgaW5wdXQsIGFuZCB0aGVuIG91dHB1dHMgdGhlIHV1LS9iYXNlNjQtZW5jb2RlZAordmVyc2lvbiBvZiB0aGUgY29tcHJlc3NlZCBpbnB1dC4KKworY3Bjc2V0OiBDb3B5IGNoYW5nZXNldCBiZXR3ZWVuIHVucmVsYXRlZCByZXBvc2l0b3JpZXMuCitBdHRlbXB0cyB0byBwcmVzZXJ2ZSBjaGFuZ2VzZXQgdXNlciwgdXNlciBhZGRyZXNzLCBkZXNjcmlwdGlvbiwgaW4KK2FkZGl0aW9uIHRvIHRoZSBjaGFuZ2VzZXQgKHRoZSBwYXRjaCkgaXRzZWxmLgorVHlwaWNhbCB1c2FnZToKKwljZCBteS11cGRhdGVkLXJlcG8KKwliayBjaGFuZ2VzCSMgbG9va2luZyBmb3IgYSBjaGFuZ2VzZXQuLi4KKwljcGNzZXQgMS4xNTExIC4gLi4vYW5vdGhlci1yZXBvCisKK2NzZXRzLXRvLXBhdGNoZXM6IFByb2R1Y2VzIGEgZGVsdGEgb2YgdHdvIEJLIHJlcG9zaXRvcmllcywgaW4gdGhlIGZvcm0KK29mIGluZGl2aWR1YWwgZmlsZXMsIGVhY2ggY29udGFpbmluZyBhIHNpbmdsZSBjc2V0IGFzIGEgR05VIHBhdGNoLgorT3V0cHV0IGlzIHNldmVyYWwgZmlsZXMsIGVhY2ggd2l0aCB0aGUgZmlsZW5hbWUgIi90bXAvcmV2LSRSRVYucGF0Y2giCitUeXBpY2FsIHVzYWdlOgorCWNkIG15LXVwZGF0ZWQtcmVwbworCWJrIGNoYW5nZXMgLUwgfi9yZXBvL29yaWdpbmFsLXJlcG8gMj4mMSB8IFwKKwkJcGVybCBjc2V0cy10by1wYXRjaGVzCisKK2NzZXQtdG8tbGludXM6IFByb2R1Y2VzIGEgZGVsdGEgb2YgdHdvIEJLIHJlcG9zaXRvcmllcywgaW4gdGhlIGZvcm0gb2YKK2NoYW5nZXNldCBkZXNjcmlwdGlvbnMsIHdpdGggJ2RpZmZzdGF0JyBvdXRwdXQgY3JlYXRlZCBmb3IgZWFjaAoraW5kaXZpZHVhbCBjaGFuZ3NldC4KK1R5cGljYWwgdXNhZ2U6CisJY2QgbXktdXBkYXRlZC1yZXBvCisJYmsgY2hhbmdlcyAtTCB+L3JlcG8vb3JpZ2luYWwtcmVwbyAyPiYxIHwgXAorCQlwZXJsIGNzZXQtdG8tbGludXMgPiBzdW1tYXJ5LnR4dAorCitnY2FwYXRjaDogIEdlbmVyYXRlcyBwYXRjaCBjb250YWluaW5nIGNoYW5nZXMgaW4gbG9jYWwgcmVwb3NpdG9yeS4KK1R5cGljYWwgdXNhZ2U6CisJY2QgbXktdXBkYXRlZC1yZXBvCisJZ2NhcGF0Y2ggPiBmb28ucGF0Y2gKKwordW5iejY0d3JhcDogUmV2ZXJzZSBhbiBlbmNvZGVkLCBjb21wcmVzc2VkIGRhdGEgc3RyZWFtIGNyZWF0ZWQgYnkKK2J6NjR3cmFwIGludG8gYW4gdW5jb21wcmVzc2VkLCB0eXBpY2FsbHkgdGV4dC9wbGFpbiBvdXRwdXQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmsta2VybmVsLWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmsta2VybmVsLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I5MDc1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iay1rZXJuZWwtaG93dG8udHh0CkBAIC0wLDAgKzEsMjgzIEBACisKKwkJICAgRG9pbmcgdGhlIEJLIFRoaW5nLCBQZW5ndWluLVN0eWxlCisKKworCisKK1RoaXMgc2V0IG9mIG5vdGVzIGlzIGludGVuZGVkIG1haW5seSBmb3Iga2VybmVsIGRldmVsb3BlcnMsIG9jY2FzaW9uYWwKK29yIGZ1bGwtdGltZSwgYnV0IHN5c2FkbWlucyBhbmQgcG93ZXIgdXNlcnMgbWF5IGZpbmQgcGFydHMgb2YgaXQgdXNlZnVsCithcyB3ZWxsLiAgSXQgYXNzdW1lcyBhdCBsZWFzdCBhIGJhc2ljIGZhbWlsaWFyaXR5IHdpdGggQ1ZTLCBib3RoIGF0IGEKK3VzZXIgbGV2ZWwgKHVzZSBvbiB0aGUgY21kIGxpbmUpIGFuZCBhdCBhIGhpZ2hlciBsZXZlbCAoY2xpZW50LXNlcnZlciBtb2RlbCkuCitEdWUgdG8gdGhlIGF1dGhvcidzIGJhY2tncm91bmQsIGFuIG9wZXJhdGlvbiBtYXkgYmUgZGVzY3JpYmVkIGluIHRlcm1zCitvZiBDVlMsIG9yIGluIHRlcm1zIG9mIGhvdyB0aGF0IG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gQ1ZTLgorCitUaGlzIGlzIC1ub3QtIGludGVuZGVkIHRvIGJlIEJpdEtlZXBlciBkb2N1bWVudGF0aW9uLiAgQWx3YXlzIHJ1bgorImJrIGhlbHAgPGNvbW1hbmQ+IiBvciBpbiBYICJiayBoZWxwdG9vbCA8Y29tbWFuZD4iIGZvciByZWZlcmVuY2UKK2RvY3VtZW50YXRpb24uCisKKworQml0S2VlcGVyIENvbmNlcHRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIHRydWUgbmF0dXJlIG9mIHRoZSBJbnRlcm5ldCBpdHNlbGYsIEJpdEtlZXBlciBpcyBhIGRpc3RyaWJ1dGVkCitzeXN0ZW0uICBXaGVuIGFwcGxpZWQgdG8gcmV2aXNpb24gY29udHJvbCwgdGhpcyBtZWFucyBkb2luZyBhd2F5IHdpdGgKK2NsaWVudC1zZXJ2ZXIsIGFuZCBjaGFuZ2luZyB0byBhIHBhcmVudC1jaGlsZCBtb2RlbC4uLiBlc3NlbnRpYWxseQorcGVlci10by1wZWVyLiAgT24gdGhlIGRldmVsb3BlcidzIGVuZCwgdGhpcyBhbHNvIHJlcHJlc2VudHMgYQorZnVuZGFtZW50YWwgZGlzcnVwdGlvbiBpbiB0aGUgc3RhbmRhcmQgd29ya2Zsb3cgb2YgY2hhbmdlcywgY29tbWl0cywKK2FuZCBtZXJnZXMuICBZb3Ugd2lsbCBuZWVkIHRvIHRha2UgYSBmZXcgbWludXRlcyB0byB0aGluayBhYm91dAoraG93IHRvIGJlc3Qgd29yayB1bmRlciBCaXRLZWVwZXIsIGFuZCByZS1vcHRpbWl6ZSB0aGluZ3MgYSBiaXQuCitJbiBzb21lIHNlbnNlIGl0IGlzIGEgYml0IHJhZGljYWwsIGJlY2F1c2UgaXQgbWlnaHQgZGVzY3JpYmVkIGFzCit0b3NzaW5nIGNoYW5nZXMgb3V0IGludG8gYSBtYWVsc3Ryb20gYW5kIGhhdmluZyB0aGVtIG1hZ2ljYWxseQorbGFuZCBhdCB0aGUgcmlnaHQgZGVzdGluYXRpb24uLi4gYnV0IEknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4KKworTGV0J3Mgc3RhcnQgd2l0aCB0aGlzIHByb2dyZXNzaW9uOgorRWFjaCBCaXRLZWVwZXIgc291cmNlIHRyZWUgb24gZGlzayBpcyBhIHJlcG9zaXRvcnkgdW50byBpdHNlbGYuCitFYWNoIHJlcG9zaXRvcnkgaGFzIGEgcGFyZW50IChleGNlcHQgdGhlIHJvb3Qvb3JpZ2luYWwsIG9mIGNvdXJzZSkuCitFYWNoIHJlcG9zaXRvcnkgY29udGFpbnMgYSBzZXQgb2YgYSBjaGFuZ2VzZXRzICgiY3NldHMiKS4KK0VhY2ggY3NldCBpcyBvbmUgb3IgbW9yZSBjaGFuZ2VkIGZpbGVzLCBidW5kbGVkIHRvZ2V0aGVyLgorCitFYWNoIHRyZWUgaXMgYSByZXBvc2l0b3J5LCBzbyBhbGwgY2hhbmdlcyBhcmUgY2hlY2tlZCBpbnRvIHRoZSBsb2NhbAordHJlZS4gIFdoZW4gYSBjaGFuZ2UgaXMgY2hlY2tlZCBpbiwgYWxsIG1vZGlmaWVkIGZpbGVzIGFyZSBncm91cGVkCitpbnRvIGEgbG9naWNhbCB1bml0LCB0aGUgY2hhbmdlc2V0LiAgSW50ZXJuYWxseSwgQksgbGlua3MgdGhlc2UKK2NoYW5nZXNldHMgaW4gYSB0cmVlLCByZXByZXNlbnRpbmcgdmFyaW91cyBjb252ZXJnaW5nIGFuZCBkaXZlcmdpbmcKK2xpbmVzIG9mIGRldmVsb3BtZW50LiAgVGhlc2UgY2hhbmdlc2V0cyBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YKK3RoZSBCSyBzeXN0ZW0uCisKK0FmdGVyIHRoZSBjb25jZXB0IG9mIGNoYW5nZXNldHMsIHRoZSBuZXh0IHRoaW5nIHlvdSBuZWVkIHRvIGdldCB1c2VkCit0byBpcyBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIHNvdXJjZSB0cmVlcyBseWluZyBhcm91bmQuICBUaGlzIC1yZWFsbHktCit0YWtlcyBzb21lIGdldHRpbmcgdXNlZCB0bywgZm9yIHNvbWUgcGVvcGxlLiAgU2VwYXJhdGUgc291cmNlIHRyZWVzCithcmUgdGhlIG1lYW5zIGluIEJpdEtlZXBlciBieSB3aGljaCB5b3UgZGVsaW5lYXRlIHBhcmFsbGVsIGxpbmVzCitvZiBkZXZlbG9wbWVudCwgYm90aCBtaW5vciBhbmQgbWFqb3IuICBXaGF0IHdvdWxkIGJlIGJyYW5jaGVzIGluCitDVlMgYmVjb21lIHNlcGFyYXRlIHNvdXJjZSB0cmVlcywgb3IgImNsb25lcyIgaW4gQml0S2VlcGVyIFtoZWgsCitvciBTdGFyIFdhcnNdIHRlcm1pbm9sb2d5LgorCitDbG9uZXMgYW5kIGNoYW5nZXNldHMgYXJlIHRoZSB0b29scyBmcm9tIHdoaWNoIG1vc3Qgb2YgdGhlIHBvd2VyIG9mCitCaXRLZWVwZXIgaXMgZGVyaXZlZC4gIEFzIG1lbnRpb25lZCBlYXJsaWVyLCBlYWNoIGNsb25lIGhhcyBhIHBhcmVudCwKK3RoZSB0cmVlIHVzZWQgYXMgdGhlIHNvdXJjZSB3aGVuIHRoZSBuZXcgY2xvbmUgd2FzIGNyZWF0ZWQuICBJbiBhCitDVlMtbGlrZSBzZXR1cCwgdGhlIHBhcmVudCB3b3VsZCBiZSBhIHJlbW90ZSBzZXJ2ZXIgb24gdGhlIEludGVybmV0LAorYW5kIHRoZSBjaGlsZCBpcyB5b3VyIGxvY2FsIGNsb25lIG9mIHRoYXQgdHJlZS4KKworT25jZSB5b3UgaGF2ZSBlc3RhYmxpc2hlZCBhIGNvbW1vbiBiYXNlbGluZSBiZXR3ZWVuIHR3byBzb3VyY2UgdHJlZXMgLS0KK2EgY29tbW9uIHBhcmVudCAtLSB0aGVuIHlvdSBjYW4gbWVyZ2UgY2hhbmdlc2V0cyBiZXR3ZWVuIHRob3NlIHR3bwordHJlZXMgd2l0aCBlYXNlLiAgTWVyZ2luZyBjaGFuZ2VzIGludG8gYSB0cmVlIGlzIGNhbGxlZCBhICJwdWxsIiwgYW5kCitpcyBhbmFsYWdvdXMgdG8gJ2N2cyB1cGRhdGUnLiAgQSBwdWxsIGRvd25sb2FkcyBhbGwgdGhlIGNoYW5nZXNldHMgaW4KK3RoZSByZW1vdGUgdHJlZSB5b3UgZG8gbm90IGhhdmUsIGFuZCBtZXJnZXMgdGhlbS4gIFNlbmRpbmcgY2hhbmdlcyBpbgorb25lIHRyZWUgdG8gYW5vdGhlciB0cmVlIGlzIGNhbGxlZCBhICJwdXNoIi4gIFB1c2ggc2VuZHMgYWxsIGNoYW5nZXMKK2luIHRoZSBsb2NhbCB0cmVlIHRoZSByZW1vdGUgZG9lcyBub3QgeWV0IGhhdmUsIGFuZCBtZXJnZXMgdGhlbS4KKworRnJvbSB0aGVzZSBjb25jZXB0cyBjb21lIHNvbWUgaW5pdGlhbCBjb21tYW5kIGV4YW1wbGVzOgorCisxKSBiayBjbG9uZSAtcSBodHRwOi8vbGludXguYmtiaXRzLm5ldC9saW51eC0yLjUgbGludXMtMi41CitEb3dubG9hZCBhIDIuNSBzdG9jayBrZXJuZWwgdHJlZSwgbmFtaW5nIGl0ICJsaW51cy0yLjUiIGluIHRoZSBsb2NhbCBkaXIuCitUaGUgIi1xIiBkaXNhYmxlcyBsaXN0aW5nIGV2ZXJ5IHNpbmdsZSBmaWxlIGFzIGl0IGlzIGRvd25sb2FkZWQuCisKKzIpIGJrIGNsb25lIC1xbCBsaW51cy0yLjUgYWxwaGEtMi41CitDcmVhdGUgYSBzZXBhcmF0ZSBzb3VyY2UgdHJlZSBmb3IgdGhlIEFscGhhIEFYUCBhcmNoaXRlY3R1cmUuCitUaGUgIi1sIiB1c2VzIGhhcmQgbGlua3MgaW5zdGVhZCBvZiBjb3B5aW5nIGRhdGEsIHNpbmNlIGJvdGggdHJlZXMgYXJlCitvbiB0aGUgbG9jYWwgZGlzay4gIFlvdSBjYW4gYWxzbyByZXBsYWNlIHRoZSBhYm92ZSB3aXRoICJiayBsY2xvbmUgLXEgLi4uIgorCitZb3Ugb25seSBjbG9uZSBhIHRyZWUgLW9uY2UtLiAgQWZ0ZXIgY2xvbmluZyB0aGUgdHJlZSBsaXZlcyBhIGxvbmcgdGltZQorb24gZGlzaywgYmVpbmcgdXBkYXRpbmcgYnkgcHVzaGVzIGFuZCBwdWxscy4KKworMykgY2QgYWxwaGEtMi41IDsgYmsgcHVsbCBodHRwOi8vZ2tlcm5lbC5ia2JpdHMubmV0L2FscGhhLTIuNQorRG93bmxvYWQgY2hhbmdlcyBpbiAiYWxwaGEtMi41IiByZXBvc2l0b3J5IHdoaWNoIGFyZSBub3QgcHJlc2VudAoraW4gdGhlIGxvY2FsIHJlcG9zaXRvcnksIGFuZCBtZXJnZSB0aGVtIGludG8gdGhlIHNvdXJjZSB0cmVlLgorCis0KSBiayAtciBjbyAtcQorQmVjYXVzZSBldmVyeSB0cmVlIGlzIGEgcmVwb3NpdG9yeSwgZmlsZXMgbXVzdCBiZSBjaGVja2VkIG91dCBiZWZvcmUKK3RoZXkgd2lsbCBiZSBpbiB0aGVpciBzdGFuZGFyZCBwbGFjZXMgaW4gdGhlIHNvdXJjZSB0cmVlLgorCis1KQliayB2aSBmcy9pbm9kZS5jCQkJCSMgZXhhbXBsZSBjaGFuZ2UuLi4KKwliayBjaXRvb2wJCQkJCSMgY2hlY2tpbiwgdXNpbmcgWCB0b29sCisJYmsgcHVzaCBiazovL2drZXJuZWxAYmtiaXRzLm5ldC9hbHBoYS0yLjUJIyB1cGxvYWQgY2hhbmdlCitUeXBpY2FsIGV4YW1wbGUgb2YgYSBCSyBzZXF1ZW5jZSB0aGF0IHdvdWxkIHJlcGxhY2UgdGhlIGFuYWxhZ291cyBDVlMKK3NpdHVhdGlvbiwKKwl2aSBmcy9pbm9kZS5jCisJY3ZzIGNvbW1pdAorCitBcyB0aGlzIGlzIGp1c3Qgc3VwcG9zZWQgdG8gYmUgYSBxdWljayBCSyBpbnRybywgZm9yIG1vcmUgaW4tZGVwdGgKK3R1dG9yaWFscywgbGl2ZSB3b3JraW5nIGRlbW9zLCBhbmQgZG9jcywgc2VlIGh0dHA6Ly93d3cuYml0a2VlcGVyLmNvbS8KKworCisKK0JLIGFuZCBLZXJuZWwgRGV2ZWxvcG1lbnQgV29ya2Zsb3cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0N1cnJlbnRseSB0aGUgbGF0ZXN0IDIuNSB0cmVlIGlzIGF2YWlsYWJsZSB2aWEgImJrIGNsb25lICRVUkwiCithbmQgImJrIHB1bGwgJFVSTCIgYXQgaHR0cDovL2xpbnV4LmJrYml0cy5uZXQvbGludXgtMi41CitUaGlzIHNob3VsZCBjaGFuZ2UgaW4gYSBmZXcgd2Vla3MgdG8gYSBrZXJuZWwub3JnIFVSTC4KKworCitBIGJpZyBwYXJ0IG9mIHVzaW5nIEJpdEtlZXBlciBpcyBvcmdhbml6aW5nIHRoZSB2YXJpb3VzIHRyZWVzIHlvdSBoYXZlCitvbiB5b3VyIGxvY2FsIGRpc2ssIGFuZCBvcmdhbml6aW5nIHRoZSBmbG93IG9mIGNoYW5nZXMgYW1vbmcgdGhvc2UKK3RyZWVzLCBhbmQgcmVtb3RlIHRyZWVzLiAgSWYgb25lIHdlcmUgdG8gZ3JhcGggdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbgorYSBkZXNpcmVkIEJLIHNldHVwLCB5b3UgYXJlIGxpa2VseSB0byBzZWUgYSBmZXctbWFueS1mZXcgZ3JhcGgsIGxpa2UKK3RoaXM6CisKKwkJICAgIGxpbnV4LTIuNQorCQkgICAgICAgIHwKKwkgICAgICAgbWVyZ2UtdG8tbGludXMtMi41CisJCSAvICAgIHwgICAgICB8CisJICAgICAgICAvICAgICB8ICAgICAgfAorCXZtLWhhY2tzICBidWdmaXhlcyAgZmlsZXN5cyAgIHBlcnNvbmFsLWhhY2tzCisJICAgICAgXAkgICAgICB8CSAgICAgfAkJLworCSAgICAgICBcICAgICAgfCAgICAgIHwgICAgICAgICAvCisJCVwgICAgIHwgICAgICB8ICAgICAgICAvCisJICAgICAgICAgdGVzdGluZy1hbmQtdmFsaWRhdGlvbgorCitTaW5jZSBhICJiayBwdXNoIiBzZW5kcyBhbGwgY2hhbmdlcyBub3QgaW4gdGhlIHRhcmdldCB0cmVlLCBhbmQKK3NpbmNlIGEgImJrIHB1bGwiIHJlY2VpdmVzIGFsbCBjaGFuZ2VzIG5vdCBpbiB0aGUgc291cmNlIHRyZWUsIHlvdSB3YW50Cit0byBtYWtlIHN1cmUgeW91IGFyZSBvbmx5IHB1c2hpbmcgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUgZGVzaXJlZCB0cmVlLAorbm90IGFsbCBjaGFuZ2VzIGZyb20gInBlZXIgcGFyZW50IiB0cmVlcy4gIEZvciBleGFtcGxlLCBwdXNoaW5nIGEgY2hhbmdlCitmcm9tIHRoZSB0ZXN0aW5nLWFuZC12YWxpZGF0aW9uIHRyZWUgd291bGQgcHJvYmFibHkgYmUgYSBiYWQgaWRlYSwKK2JlY2F1c2UgaXQgd2lsbCBwdXNoIGFsbCBjaGFuZ2VzIGZyb20gdm0taGFja3MsIGJ1Z2ZpeGVzLCBmaWxlc3lzLCBhbmQKK3BlcnNvbmFsLWhhY2tzIHRyZWVzIGludG8gdGhlIHRhcmdldCB0cmVlLgorCitPbmUgd291bGQgdHlwaWNhbGx5IHdvcmsgb24gb25seSBvbmUgInRoZW1lIiBhdCBhIHRpbWUsIGVpdGhlcgordm0taGFja3Mgb3IgYnVnZml4ZXMgb3IgZmlsZXN5cywga2VlcGluZyB0aG9zZSBjaGFuZ2VzIGlzb2xhdGVkIGluCit0aGVpciBvd24gdHJlZSBkdXJpbmcgZGV2ZWxvcG1lbnQsIGFuZCBvbmx5IG1lcmdlIHRoZSBpc29sYXRlZCB3aXRoCitvdGhlciBjaGFuZ2VzIHdoZW4gZ29pbmcgdXBzdHJlYW0gKHRvIExpbnVzIG9yIG90aGVyIG1haW50YWluZXJzKSBvcgorZG93bnN0cmVhbSAodG8geW91ciAidW5pb24iIHRyZWVzLCBsaWtlIHRlc3RpbmctYW5kLXZhbGlkYXRpb24gYWJvdmUpLgorCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBzb21lIG9mIHRoaXMgc2VwYXJhdGlvbiBpcyBub3QganVzdCByZWNvbW1lbmRlZAorcHJhY3RpY2UsIGl0J3MgYWN0dWFsbHkgW2ZvciBub3ddIC1lbmZvcmNlZC0gYnkgQml0S2VlcGVyLiAgQml0S2VlcGVyCityZXF1aXJlcyB0aGF0IGNoYW5nZXNldHMgbWFpbnRhaW4gYSBjZXJ0YWluIG9yZGVyLCB3aGljaCBpcyB0aGUgcmVhc29uCit0aGF0ICJiayBwdXNoIiBzZW5kcyBhbGwgbG9jYWwgY2hhbmdlc2V0cyB0aGUgcmVtb3RlIGRvZXNuJ3QgaGF2ZS4gIFRoaXMKK3NlcGFyYXRpb24gbWF5IGxvb2sgbGlrZSBhIGxvdCBvZiB3YXN0ZWQgZGlzayBzcGFjZSBhdCBmaXJzdCwgYnV0IGl0CitoZWxwcyB3aGVuIHR3byB1bnJlbGF0ZWQgY2hhbmdlcyBtYXkgInBvbGx1dGUiIHRoZSBzYW1lIGFyZWEgb2YgY29kZSwgb3IKK2Rvbid0IGZvbGxvdyB0aGUgc2FtZSBwYWNlIG9mIGRldmVsb3BtZW50LCBvciBhbnkgb3RoZXIgb2YgdGhlIHN0YW5kYXJkCityZWFzb25zIHdoeSBvbmUgY3JlYXRlcyBhIGRldmVsb3BtZW50IGJyYW5jaC4KKworU21hbGwgZGV2ZWxvcG1lbnQgYnJhbmNoZXMgKGNsb25lcykgd2lsbCBhcHBlYXIgYW5kIGRpc2FwcGVhcjoKKworCS0tLS0tLS0tIEEgLS0tLS0tLS0tIEIgLS0tLS0tLS0tIEMgLS0tLS0tLS0tIEQgLS0tLS0tLQorCSAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworCQkgICAtLS0tLXNob3J0LXRlcm0gZGV2ZWwgYnJhbmNoLS0tLS0KKworV2hpbGUgbG9uZy10ZXJtIGJyYW5jaGVzIHdpbGwgcGFyYWxsZWwgYSB0cmVlIChvciB0cmVlcyksIHdpdGggcGVyaW9kCittZXJnZSBwb2ludHMuICBJbiB0aGlzIGZpcnN0IGV4YW1wbGUsIHdlIHB1bGwgZnJvbSBhIHRyZWUgKHB1bGxzLAorIlwiKSBwZXJpb2RpY2FsbHksIHN1Y2ggYXMgd2hhdCBvY2N1cnMgd2hlbiB0cmFja2luZyBjaGFuZ2VzIGluIGEKK3ZlbmRvciB0cmVlLCBuZXZlciBwdXNoaW5nIGNoYW5nZXMgYmFjayB1cCB0aGUgbGluZToKKworCS0tLS0tLS0tIEEgLS0tLS0tLS0tIEIgLS0tLS0tLS0tIEMgLS0tLS0tLS0tIEQgLS0tLS0tLQorCSAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICBcICAgICAgICAgICBcCisJICAgICAgICAgICAtLS0tbG9uZy10ZXJtIGRldmVsIGJyYW5jaC0tLS0tLS0tLS0tLS0tLS0tCisKK0FuZCB0aGVuIGEgbW9yZSBjb21tb24gY2FzZSBpbiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGEgbG9uZyB0ZXJtCiticmFuY2ggd2l0aCBwZXJpb2RpYyBtZXJnZXMgYmFjayBpbnRvIHRoZSB0cmVlIChwdXNoZXMsICIvIik6CisKKwktLS0tLS0tLSBBIC0tLS0tLS0tLSBCIC0tLS0tLS0tLSBDIC0tLS0tLS0tLSBEIC0tLS0tLS0KKwkgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgIC8gXAorCSAgICAgICAgICAgLS0tLWxvbmctdGVybSBkZXZlbCBicmFuY2gtLS0tLS0tLS0tLS0tLS0tLQorCisKKworCisKK1N1Ym1pdHRpbmcgQ2hhbmdlcyB0byBMaW51cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSdzIGEgYml0IG9mIGFuIGFydCwgb3Igc3R5bGUsIG9mIHN1Ym1pdHRpbmcgY2hhbmdlcyB0byBMaW51cy4KK1NpbmNlIExpbnVzJ3MgdHJlZSBpcyBub3cgKHlvdSBtaWdodCBzYXkpIGZ1bGx5IGludGVncmF0ZWQgaW50byB0aGUKK2Rpc3RyaWJ1dGVkIEJpdEtlZXBlciBzeXN0ZW0sIHRoZXJlIGFyZSBzZXZlcmFsIHByZXJlcXVpc2l0ZXMgdG8KK3Byb3Blcmx5IHN1Ym1pdHRpbmcgYSBCaXRLZWVwZXIgY2hhbmdlLiAgQWxsIHRoZXNlIHByZXJlcSdzIGFyZSBqdXN0CitnZW5lcmFsIGNsZWFubGluZXNzIG9mIEJLIHVzYWdlLCBzbyBhcyBwZW9wbGUgYmVjb21lIGV4cGVydHMgYXQgQkssIGZlZWwKK2ZyZWUgdG8gb3B0aW1pemUgdGhpcyBwcm9jZXNzIGZ1cnRoZXIgKGFzc3VtaW5nIExpbnVzIGFncmVlcywgb2YKK2NvdXJzZSkuCisKKworCiswKSBNYWtlIHN1cmUgeW91ciB0cmVlIHdhcyBvcmlnaW5hbGx5IGNsb25lZCBmcm9tIHRoZSBsaW51eC0yLjUgdHJlZQorY3JlYXRlZCBieSBMaW51cy4gIElmIHlvdXIgdHJlZSBkb2VzIG5vdCBoYXZlIHRoaXMgYXMgaXRzIGFuY2VzdG9yLCBpdAoraXMgaW1wb3NzaWJsZSB0byByZWxpYWJseSBleGNoYW5nZSBjaGFuZ2VzZXRzLgorCisKKworMSkgUGF5IGF0dGVudGlvbiB0byB5b3VyIGNvbW1pdCB0ZXh0LiAgVGhlIGNvbW1pdCBtZXNzYWdlIHRoYXQKK2FjY29tcGFuaWVzIGVhY2ggY2hhbmdlc2V0IHlvdSBzdWJtaXQgd2lsbCBsaXZlIG9uIGZvcmV2ZXIgaW4gaGlzdG9yeSwKK2FuZCBpcyB1c2VkIGJ5IExpbnVzIHRvIGFjY3VyYXRlbHkgc3VtbWFyaXplIHRoZSBjaGFuZ2VzIGluIGVhY2gKK3ByZS1wYXRjaC4gIFJlbWVtYmVyIHRoYXQgdGhlcmUgaXMgbm8gY29udGV4dCwgc28KKwkiZml4IGZvciBuZXcgc2NoZWR1bGVyIGNoYW5nZXMiCit3b3VsZCBiZSB0b28gdmFndWUsIGJ1dAorCSJmaXggbWlwczY0IGFyY2ggZm9yIG5ldyBzY2hlZHVsZXIgc3dpdGNoX3RvKCksIFRJRl94eHggc2VtYW50aWNzIgord291bGQgYmUgbXVjaCBiZXR0ZXIuCisKK1lvdSBjYW4gYW5kIHNob3VsZCB1c2UgdGhlIGNvbW1hbmQgImJrIGNvbW1lbnQgLUM8cmV2PiIgdG8gdXBkYXRlIHRoZQorY29tbWl0IHRleHQsIGFuZCBpbXByb3ZlIGl0IGFmdGVyIHRoZSBmYWN0LiAgVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IKK2RldmVsb3BtZW50OiBwb29yLCBxdWljayBkZXNjcmlwdGlvbnMgZHVyaW5nIGRldmVsb3BtZW50LCB3aGljaCBnZXQKK2NsZWFuZWQgdXAgdXNpbmcgImJrIGNvbW1lbnQiIGJlZm9yZSBpc3N1aW5nIHRoZSAiYmsgcHVzaCIgdG8gc3VibWl0IHRoZQorY2hhbmdlcy4KKworCisKKzIpIEluY2x1ZGUgYW4gSW50ZXJuZXQtYXZhaWxhYmxlIFVSTCBmb3IgTGludXMgdG8gcHVsbCBmcm9tLCBzdWNoIGFzCisKKwlQdWxsIGZyb206ICBodHRwOi8vZ2tlcm5lbC5ia2JpdHMubmV0L25ldC1kcml2ZXJzLTIuNQorCisKKworMykgSW5jbHVkZSBhIHN1bW1hcnkgYW5kICJkaWZmc3RhdCAtcDEiIG9mIGVhY2ggY2hhbmdlc2V0IHRoYXQgd2lsbCBiZQorZG93bmxvYWRlZCwgd2hlbiBMaW51cyBpc3N1ZXMgYSAiYmsgcHVsbCIuICBUaGUgYXV0aG9yIGF1dG8tZ2VuZXJhdGVzCit0aGVzZSBzdW1tYXJpZXMgdXNpbmcgImJrIGNoYW5nZXMgLUwgPHBhcmVudD4iLCB0byBvYnRhaW4gYSBsaXN0aW5nCitvZiBhbGwgdGhlIHBlbmRpbmctdG8tc2VuZCBjaGFuZ2VzZXRzLCBhbmQgdGhlaXIgY29tbWl0IG1lc3NhZ2VzLgorCitJdCBpcyBpbXBvcnRhbnQgdG8gc2hvdyBMaW51cyB3aGF0IGhlIHdpbGwgYmUgZG93bmxvYWRpbmcgd2hlbiBoZSBpc3N1ZXMKK2EgImJrIHB1bGwiLCB0byByZWR1Y2UgdGhlIHRpbWUgcmVxdWlyZWQgdG8gc2lmdCB0aGUgY2hhbmdlcyBvbmNlIHRoZXkKK2FyZSBkb3dubG9hZGVkIHRvIExpbnVzJ3MgbG9jYWwgbWFjaGluZS4KKworSU1QT1JUQU5UIE5PVEU6ICBPbmUgb2YgdGhlIGZlYXR1cmVzIG9mIEJLIGlzIHRoYXQgeW91ciByZXBvc2l0b3J5IGRvZXMKK25vdCBoYXZlIHRvIGJlIHVwIHRvIGRhdGUsIGluIG9yZGVyIGZvciBMaW51cyB0byByZWNlaXZlIHlvdXIgY2hhbmdlcy4KK0l0IGlzIGNvbnNpZGVyZWQgYSBjb3VydGVzeSB0byBrZWVwIHlvdXIgcmVwb3NpdG9yeSBmYWlybHkgcmVjZW50LCB0bworbGVzc2VuIGFueSBwb3RlbnRpYWwgbWVyZ2Ugd29yayBMaW51cyBtYXkgbmVlZCB0byBkby4KKworCis0KSBTcGxpdCB1cCB5b3VyIGNoYW5nZXMuICBFYWNoIG1haW50YWluZXI8LT5MaW51cyBzaXR1YXRpb24gaXMgbGlrZWx5Cit0byBiZSBzbGlnaHRseSBkaWZmZXJlbnQgaGVyZSwgc28gdGFrZSB0aGlzIGp1c3QgYXMgZ2VuZXJhbCBhZHZpY2UuICBUaGUKK2F1dGhvciBzcGxpdHMgdXAgY2hhbmdlcyBhY2NvcmRpbmcgdG8gInRoZW1lcyIgd2hlbiBtZXJnaW5nIHdpdGggTGludXMuCitTaW11bHRhbmVvdXMgcHVzaGVzIGZyb20gbG9jYWwgZGV2ZWxvcG1lbnQgZ28gdG8gc3BlY2lhbCB0cmVlcyB3aGljaAorZXhpc3Qgc29sZWx5IHRvIGhvdXNlIGNoYW5nZXMgInF1ZXVlZCIgZm9yIExpbnVzLiAgRXhhbXBsZSBvZiB0aGUgdHJlZXM6CisKKwluZXQtZHJpdmVycy0yLjUgLS0gb24tZ29pbmcgbmV0IGRyaXZlciBtYWludGVuYW5jZQorCXZtLTIuNSAtLSBWTS1yZWxhdGVkIGNoYW5nZXMKKwlmcy0yLjUgLS0gZmlsZXN5c3RlbS1yZWxhdGVkIGNoYW5nZXMKKworTGludXMgdGhlbiBoYXMgbXVjaCBtb3JlIGZyZWVkb20gZm9yIHB1bGxpbmcgY2hhbmdlcy4gIEhlIGNvdWxkIChmb3IKK2V4YW1wbGUpIGlzc3VlIGEgImJrIHB1bGwiIG9uIHZtLTIuNSBhbmQgZnMtMi41IHRyZWVzLCB0byBtZXJnZSB0aGVpcgorY2hhbmdlcywgYnV0IGhvbGQgb2ZmIG5ldC1kcml2ZXJzLTIuNSBiZWNhdXNlIG9mIGEgY2hhbmdlIHRoYXQgbmVlZHMKK21vcmUgZGlzY3Vzc2lvbi4KKworT3RoZXIgbWFpbnRhaW5lcnMgbWF5IGZpbmQgdGhhdCBhIHNpbmdsZSBsaW51cy1wdWxsLWZyb20gdHJlZSBpcworYWRlcXVhdGUgZm9yIHBhc3NpbmcgQksgY2hhbmdlc2V0cyB0byBoaW0uCisKKworCitGcmVxdWVudGx5IEFuc3dlcmVkIFF1ZXN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIEhvdyBkbyBJIGNoYW5nZSB0aGUgZS1tYWlsIGFkZHJlc3Mgc2hvd24gaW4gdGhlIGNoYW5nZWxvZz8KK0EuIFdoZW4geW91IHJ1biAiYmsgY2l0b29sIiBvciAiYmsgY29tbWl0Iiwgc2V0IGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgQktfVVNFUiBhbmQgQktfSE9TVCB0byB0aGUgZGVzaXJlZCB1c2VybmFtZQorICAgYW5kIGhvc3QvZG9tYWluIG5hbWUuCisKKworMikgSG93IGRvIEkgdXNlIHRhZ3MgLyBnZXQgYSBkaWZmIGJldHdlZW4gdHdvIGtlcm5lbCB2ZXJzaW9ucz8KK0EuIFBhc3MgdGhlIHRhZ3MgTGludXMgdXNlcyB0byAnYmsgZXhwb3J0Jy4KKworQ2hhbmdlU2V0cyBhcmUgaW4gYSBmb3J3YXJkLXByb2dyZXNzaW5nIG9yZGVyLCBzbyBpdCdzIHByZXR0eSBlYXN5Cit0byBnZXQgYSBzbmFwc2hvdCBzdGFydGluZyBhbmQgZW5kaW5nIGF0IGFueSB0d28gcG9pbnRzIGluIHRpbWUuCitMaW51cyBwdXRzIHRhZ3Mgb24gZWFjaCByZWxlYXNlIGFuZCBwcmUtcmVsZWFzZSwgc28geW91IGNvdWxkIHVzZQordGhlc2UgdHdvIGV4YW1wbGVzOgorCisgICAgYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcnYyLjUuNCx2Mi41LjUgfCBsZXNzCisgICAgICAgICMgY3JlYXRlcyBwYXRjaC0yLjUuNSBlc3NlbnRpYWxseQorICAgIGJrIGV4cG9ydCAtdHBhdGNoIC1kdSAtcnYyLjUuNS1wcmUxLHYyLjUuNSB8IGxlc3MKKyAgICAgICAgIyBjaGFuZ2VzIGZyb20gcHJlMSB0byBmaW5hbAorCitBIHRhZyBpcyBqdXN0IGFuIGFsaWFzIGZvciBhIHNwZWNpZmljIGNoYW5nZXNldC4uLiBhbmQgc2luY2UgY2hhbmdlc2V0cworYXJlIG9yZGVyZWQsIGEgdGFnIGlzIHRodXMgYSBtYXJrZXIgZm9yIGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZSAob3IKK3NwZWNpZmljIHN0YXRlIG9mIHRoZSB0cmVlKS4KKworCiszKSBJcyB0aGVyZSBhbiBlYXN5IHdheSB0byBnZW5lcmF0ZSBPbmUgQmlnIFBhdGNoIHZlcnN1cyBtYWlubGluZSwKKyAgIGZvciBteSBsb25nLWxpdmVkIGtlcm5lbCBicmFuY2g/CitBLiBZZXMuICBUaGlzIHJlcXVpcmVzIEJLIDMueCwgdGhvdWdoLgorCisJYmsgZXhwb3J0IC10cGF0Y2ggLXJgYmsgcmVwb2djYSBiazovL2xpbnV4LmJrYml0cy5uZXQvbGludXgtMi41YCwrCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmstbWFrZS1zdW0gYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2JrLW1ha2Utc3VtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4Y2E0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2JrLW1ha2Utc3VtCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaCAtZQorIyBESVI9JEhPTUUvQksvYXhwLTIuNQorIyBjZCAkRElSCisKK0xJTlVTX1JFUE89JDEKK0RJUkJBU0U9YGJhc2VuYW1lICRQV0RgCisKK3sKK2NhdCA8PEVPVAorUGxlYXNlIGRvIGEKKworCWJrIHB1bGwgYms6Ly9na2VybmVsLmJrYml0cy5uZXQvJERJUkJBU0UKKworVGhpcyB3aWxsIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgorCitFT1QKKworYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcmBiayByZXBvZ2NhICRMSU5VU19SRVBPYCwrIHwgZGlmZnN0YXQgLXAxIDI+L2Rldi9udWxsCisKK2NhdCA8PEVPVAorCit0aHJvdWdoIHRoZXNlIENoYW5nZVNldHM6CisKK0VPVAorCitiayBjaGFuZ2VzIC1MIC1kJyR1bmxlc3MoOk1FUkdFOil7Q2hhbmdlU2V0fDpDU0VUUkVWOlxufScgJExJTlVTX1JFUE8gfAorYmsgLVIgcHJzIC1oIC1kJyR1bmxlc3MoOk1FUkdFOil7PDpQOkA6SE9TVDo+ICg6RDogOkk6KVxuJGVhY2goOkM6KXsgICAoOkM6KVxufVxufScgLQorCit9ID4gL3RtcC9saW51cy50eHQKKworY2F0IDw8RU9UCitNYWlsIHRleHQgaW4gL3RtcC9saW51cy50eHQ7IHBsZWFzZSBjaGVjayBhbmQgc2VuZCB1c2luZyB5b3VyIGZhdm91cml0ZQorbWFpbGVyLgorRU9UCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2Jrc2VuZCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYmtzZW5kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzNmNhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2Jrc2VuZApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKyMgQSBzY3JpcHQgdG8gZm9ybWF0IEJLIGNoYW5nZXNldCBvdXRwdXQgaW4gYSBtYW5uZXIgdGhhdCBpcyBlYXN5IHRvIHJlYWQuCisjIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHR1cmJvbGFicy5jb20+ICAxMy8wMi8yMDAyCisjCisjIEFkZCBkaWZmc3RhdCBvdXRwdXQgYWZ0ZXIgQ2hhbmdlbG9nIDxhZGlsZ2VyQHR1cmJvbGFicy5jb20+ICAgMjEvMDIvMjAwMgorCitQUk9HPWJrc2VuZAorCit1c2FnZSgpIHsKKwllY2hvICJ1c2FnZTogJFBST0cgLXI8cmV2PiIKKwllY2hvIC1lICJcdHdoZXJlIDxyZXY+IGlzIG9mIHRoZSBmb3JtICcxLjIzJywgJzEuMjMuLicsICcxLjIzLi4xLjI3JywiCisJZWNobyAtZSAiXHRvciAnKycgdG8gaW5kaWNhdGUgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIgorCisJZXhpdCAxCit9CisKK2Nhc2UgJDEgaW4KKy1yKSBSRVY9JDI7IHNoaWZ0IDs7CistciopIFJFVj1gZWNobyAkMSB8IHNlZCAncy9eLXIvLydgIDs7CisqKSBlY2hvICIkUFJPRzogbm8gcmV2aXNpb24gZ2l2ZW4sIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRoYXQiOzsKK2VzYWMKKworWyAteiAiJFJFViIgXSAmJiB1c2FnZQorCitlY2hvICJZb3UgY2FuIGltcG9ydCB0aGlzIGNoYW5nZXNldCBpbnRvIEJLIGJ5IHBpcGluZyB0aGlzIHdob2xlIG1lc3NhZ2UgdG86IgorZWNobyAiJ3wgYmsgcmVjZWl2ZSBbcGF0aCB0byByZXBvc2l0b3J5XScgb3IgYXBwbHkgdGhlIHBhdGNoIGFzIHVzdWFsLiIKKworU0VQPSJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIgorZWNobyAtZSAkU0VQCitlbnYgUEFHRVI9L2Jpbi9jYXQgYmsgY2hhbmdlcyAtciRSRVYKK2VjaG8KK2JrIGV4cG9ydCAtdHBhdGNoIC1kdSAtaCAtciRSRVYgfCBkaWZmc3RhdAorZWNobzsgZWNobworYmsgZXhwb3J0IC10cGF0Y2ggLWR1IC1oIC1yJFJFVgorZWNobyAtZSAkU0VQCitiayBzZW5kIC13Z3ppcF91dSAtciRSRVYgLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9iejY0d3JhcCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYno2NHdyYXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmU3ODA4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvYno2NHdyYXAKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisKKyMgYno2NHdyYXAgLSB0aGUgc2VuZGluZyBzaWRlIG9mIGEgYnppcDIgfCBiYXNlNjQgc3RyZWFtCisjIEFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQGNsdXN0ZXJmcy5jb20+ICAgSmFuIDIwMDIKKworCitQQVRIPSRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluOi91c3IvZnJlZXdhcmUvYmluCisKKyMgQSBwcm9ncmFtIHRvIGdlbmVyYXRlIGJhc2U2NCBlbmNvZGluZyBvbiBzdGRvdXQKK0JBU0U2NF9FTkNPREU9InV1ZW5jb2RlIC1tIC9kZXYvc3Rkb3V0IgorQkFTRTY0X0JFR0lOPQorQkFTRTY0X0VORD0KKworQlpJUD1OTworQkFTRTY0PU5PCisKKyMgVGVzdCBpZiB3ZSBoYXZlIHRoZSBiemlwIHByb2dyYW0gaW5zdGFsbGVkCitiemlwMiAtYyAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSAmJiBCWklQPVlFUworCisjIFRlc3QgaWYgdXVlbmNvZGUgY2FuIGhhbmRsZSB0aGUgLW0gKE1JTUUpIGVuY29kaW5nIG9wdGlvbgorJEJBU0U2NF9FTkNPREUgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSAmJiBCQVNFNjQ9WUVTCisKK2lmIFsgJEJBU0U2NCA9IE5PIF07IHRoZW4KKwlCQVNFNjRfRU5DT0RFPW1pbWVuY29kZQorCUJBU0U2NF9CRUdJTj0iYmVnaW4tYmFzZTY0IDY0NCAtIgorCUJBU0U2NF9FTkQ9Ij09PT0iCisKKwkkQkFTRTY0X0VOQ09ERSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxICYmIEJBU0U2ND1ZRVMKK2ZpCisKK2lmIFsgJEJaSVAgPSBOTyAtbyAkQkFTRTY0ID0gTk8gXTsgdGhlbgorCWVjaG8gIiQwOiBjYW4ndCB1c2UgYno2NCBlbmNvZGluZzogYnppcDI9JEJaSVAsICRCQVNFNjRfRU5DT0RFPSRCQVNFNjQiCisJZXhpdCAxCitmaQorCisjIFNhZGx5LCBtaW1lbmNvZGUgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgZ29vZCAiYmVnaW4iIGFuZCAiZW5kIiBtYXJrZXJzCisjIGxpa2UgdXVlbmNvZGUgZG9lcywgYW5kIGl0IGlzIHBpY2t5IGFib3V0IGdldHRpbmcgdGhlIHJpZ2h0IHN0YXJ0L2VuZCBvZgorIyB0aGUgYmFzZTY0IHN0cmVhbSwgc28gd2UgaGFuZGxlIHRoaXMgaW50ZXJuYWxseS4KK2VjaG8gIiRCQVNFNjRfQkVHSU4iCitiemlwMiAtOSB8ICRCQVNFNjRfRU5DT0RFCitlY2hvICIkQkFTRTY0X0VORCIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3Bjc2V0IGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jcGNzZXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjhmYWNhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3Bjc2V0CkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorIworIyBQdXJwb3NlOiBDb3B5IGNoYW5nZXNldCBwYXRjaCBhbmQgZGVzY3JpcHRpb24gZnJvbSBvbmUKKyMJICAgcmVwb3NpdG9yeSB0byBhbm90aGVyLCB1bnJlbGF0ZWQgb25lLgorIworIyB1c2FnZTogIGNwY3NldCBbcmV2aXNpb25dIFtmcm9tLXJlcG9zaXRvcnldIFt0by1yZXBvc2l0b3J5XQorIworCitSRVY9JDEKK0ZST009JDIKK1RPPSQzCitUTVBGPS90bXAvY3Bjc2V0LiQkCisKK3JtIC1mICRUTVBGKgorCitDV0RfU0FWRT1gcHdkYAorY2QgJEZST00KK2JrIGNoYW5nZXMgLXIkUkVWCQkJfAlcCisJZ3JlcCAtdiAnXkNoYW5nZVNldCcJCXwJXAorCXNlZCAtZSAncy9eICAvL2cnID4gJFRNUEYubG9nCisKK1VTRVJIT1NUPWBiayBjaGFuZ2VzIC1yJFJFViB8IGdyZXAgJ15DaGFuZ2VTZXQnIHwgYXdrICd7cHJpbnQgJDR9J2AKK2V4cG9ydCBCS19VU0VSPWBlY2hvICRVU0VSSE9TVCB8IGF3ayAnLUZAJyAne3ByaW50ICQxfSdgCitleHBvcnQgQktfSE9TVD1gZWNobyAkVVNFUkhPU1QgfCBhd2sgJy1GQCcgJ3twcmludCAkMn0nYAorCitiayBleHBvcnQgLXRwYXRjaCAtaGR1IC1yJFJFViA+ICRUTVBGLnBhdGNoICYmIFwKK2NkICRDV0RfU0FWRSAmJiBcCitjZCAkVE8gJiYgXAorYmsgaW1wb3J0IC10cGF0Y2ggLUNGUiAteSJgY2F0ICRUTVBGLmxvZ2AiICRUTVBGLnBhdGNoIC4gJiYgXAorYmsgY29tbWl0IC15ImBjYXQgJFRNUEYubG9nYCIKKworcm0gLWYgJFRNUEYqCisKK2VjaG8gY2hhbmdlc2V0ICRSRVYgY29waWVkLgorZWNobyAiIgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXQtdG8tbGludXMgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXQtdG8tbGludXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI4YTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvY3NldC10by1saW51cwpAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIHN0cmljdDsKKworbXkgKCRsaHMsICRyZXYsICR0bXAsICRyaHMsICRzKTsKK215IEBjc2V0X3RleHQgPSAoKTsKK215IEBwaXBlX3RleHQgPSAoKTsKK215ICRoYXZlX2NzZXQgPSAwOworCit3aGlsZSAoPD4pIHsKKwluZXh0IGlmIC9eLS0tLzsKKworCWlmICgoJGxocywgJHRtcCwgJHJocykgPSAoL14oQ2hhbmdlU2V0XEApKFteLF0rKSgsIC4qKSQvKSkgeworCQkmY3NldF9yZXYgaWYgKCRoYXZlX2NzZXQpOworCisJCSRyZXYgPSAkdG1wOworCQkkaGF2ZV9jc2V0ID0gMTsKKworCQlwdXNoKEBjc2V0X3RleHQsICRfKTsKKwl9CisKKwllbHNpZiAoJGhhdmVfY3NldCkgeworCQlwdXNoKEBjc2V0X3RleHQsICRfKTsKKwl9Cit9CismY3NldF9yZXYgaWYgKCRoYXZlX2NzZXQpOworZXhpdCgwKTsKKworCitzdWIgY3NldF9yZXYgeworCW15ICRlbXB0eV9jc2V0ID0gMDsKKworCW9wZW4gUElQRSwgImJrIGV4cG9ydCAtdHBhdGNoIC1oZHUgLXIgJHJldiB8IGRpZmZzdGF0IC1wMSAyPi9kZXYvbnVsbCB8IiBvciBkaWU7CisJd2hpbGUgKCRzID0gPFBJUEU+KSB7CisJCSRlbXB0eV9jc2V0ID0gMSBpZiAoJHMgPX4gLzAgZmlsZXMgY2hhbmdlZC8pOworCQlwdXNoKEBwaXBlX3RleHQsICRzKTsKKwl9CisJY2xvc2UoUElQRSk7CisKKwlpZiAoISAkZW1wdHlfY3NldCkgeworCQlwcmludCBAY3NldF90ZXh0OworCQlwcmludCBAcGlwZV90ZXh0OworCQlwcmludCAiXG5cbiI7CisJfQorCisJQHBpcGVfdGV4dCA9ICgpOworCUBjc2V0X3RleHQgPSAoKTsKK30KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jc2V0cy10by1wYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS9jc2V0cy10by1wYXRjaGVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyYjgxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2NzZXRzLXRvLXBhdGNoZXMKQEAgLTAsMCArMSw0NCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7CisKK215ICgkbGhzLCAkcmV2LCAkdG1wLCAkcmhzLCAkcyk7CitteSBAY3NldF90ZXh0ID0gKCk7CitteSBAcGlwZV90ZXh0ID0gKCk7CitteSAkaGF2ZV9jc2V0ID0gMDsKKword2hpbGUgKDw+KSB7CisJbmV4dCBpZiAvXi0tLS87CisKKwlpZiAoKCRsaHMsICR0bXAsICRyaHMpID0gKC9eKENoYW5nZVNldFxAKShbXixdKykoLCAuKikkLykpIHsKKwkJJmNzZXRfcmV2IGlmICgkaGF2ZV9jc2V0KTsKKworCQkkcmV2ID0gJHRtcDsKKwkJJGhhdmVfY3NldCA9IDE7CisKKwkJcHVzaChAY3NldF90ZXh0LCAkXyk7CisJfQorCisJZWxzaWYgKCRoYXZlX2NzZXQpIHsKKwkJcHVzaChAY3NldF90ZXh0LCAkXyk7CisJfQorfQorJmNzZXRfcmV2IGlmICgkaGF2ZV9jc2V0KTsKK2V4aXQoMCk7CisKKworc3ViIGNzZXRfcmV2IHsKKwlteSAkZW1wdHlfY3NldCA9IDA7CisKKwlzeXN0ZW0oImJrIGV4cG9ydCAtdHBhdGNoIC1kdSAtciAkcmV2ID4gL3RtcC9yZXYtJHJldi5wYXRjaCIpOworCisJaWYgKCEgJGVtcHR5X2NzZXQpIHsKKwkJcHJpbnQgQGNzZXRfdGV4dDsKKwkJcHJpbnQgQHBpcGVfdGV4dDsKKwkJcHJpbnQgIlxuXG4iOworCX0KKworCUBwaXBlX3RleHQgPSAoKTsKKwlAY3NldF90ZXh0ID0gKCk7Cit9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvZ2NhcGF0Y2ggYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2djYXBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhZWIxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0JLLXVzYWdlL2djYXBhdGNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisjCisjIFB1cnBvc2U6IEdlbmVyYXRlIEdOVSBkaWZmIG9mIGxvY2FsIGNoYW5nZXMgdmVyc3VzIGNhbm9uaWNhbCB0b3Atb2YtdHJlZQorIworIyBVc2FnZTogZ2NhcGF0Y2ggPiBmb28ucGF0Y2gKKyMKKworYmsgZXhwb3J0IC10cGF0Y2ggLWhkdSAtcmBiayByZXBvZ2NhIGJrOi8vbGludXguYmtiaXRzLm5ldC9saW51eC0yLjVgLCsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvdW5iejY0d3JhcCBiL0RvY3VtZW50YXRpb24vQkstdXNhZ2UvdW5iejY0d3JhcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZmMzZTczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9CSy11c2FnZS91bmJ6NjR3cmFwCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisjIHVuYno2NHdyYXAgLSB0aGUgcmVjZWl2aW5nIHNpZGUgb2YgYSBiemlwMiB8IGJhc2U2NCBzdHJlYW0KKyMgQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAY2x1c3RlcmZzLmNvbT4gICBKYW4gMjAwMgorCisjIFNhZGx5LCBtaW1lbmNvZGUgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgZ29vZCAiYmVnaW4iIGFuZCAiZW5kIiBtYXJrZXJzCisjIGxpa2UgdXVlbmNvZGUgZG9lcywgYW5kIGl0IGlzIHBpY2t5IGFib3V0IGdldHRpbmcgdGhlIHJpZ2h0IHN0YXJ0L2VuZCBvZgorIyB0aGUgYmFzZTY0IHN0cmVhbSwgc28gd2UgaGFuZGxlIHRoaXMgZXhwbGljaXRseSBoZXJlLgorCitQQVRIPSRQQVRIOi91c3IvYmluOi91c3IvbG9jYWwvYmluOi91c3IvZnJlZXdhcmUvYmluCisKK2lmIG1pbWVuY29kZSAtdSA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVNIT1c9CisJd2hpbGUgcmVhZCBMSU5FOyBkbworCQljYXNlICRMSU5FIGluCisJCWJlZ2luLWJhc2U2NCopIFNIT1c9WUVTIDs7CisJCT09PT0pIFNIT1c9IDs7CisJCSopIFsgIiRTSE9XIiBdICYmIGVjaG8gIiRMSU5FIiA7OworCQllc2FjCisJZG9uZSB8IG1pbWVuY29kZSAtdSB8IGJ1bnppcDIKKwlleGl0ICQ/CitlbHNlCisJY2F0IC0gfCB1dWRlY29kZSAtbyAvZGV2L3N0ZG91dCB8IGJ1bnppcDIKKwlleGl0ICQ/CitmaQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9CVUctSFVOVElORyBiL0RvY3VtZW50YXRpb24vQlVHLUhVTlRJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyOTI0MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQlVHLUhVTlRJTkcKQEAgLTAsMCArMSw5MiBAQAorW1NhdCBNYXIgIDIgMTA6MzI6MzMgUFNUIDE5OTYgS0VSTkVMX0JVRy1IT1dUTyBsbUBzZ2kuY29tIChMYXJyeSBNY1ZveSldCisKK1RoaXMgaXMgaG93IHRvIHRyYWNrIGRvd24gYSBidWcgaWYgeW91IGtub3cgbm90aGluZyBhYm91dCBrZXJuZWwgaGFja2luZy4gIAorSXQncyBhIGJydXRlIGZvcmNlIGFwcHJvYWNoIGJ1dCBpdCB3b3JrcyBwcmV0dHkgd2VsbC4KKworWW91IG5lZWQ6CisKKyAgICAgICAgLiBBIHJlcHJvZHVjaWJsZSBidWcgLSBpdCBoYXMgdG8gaGFwcGVuIHByZWRpY3RhYmx5IChzb3JyeSkKKyAgICAgICAgLiBBbGwgdGhlIGtlcm5lbCB0YXIgZmlsZXMgZnJvbSBhIHJldmlzaW9uIHRoYXQgd29ya2VkIHRvIHRoZQorICAgICAgICAgIHJldmlzaW9uIHRoYXQgZG9lc24ndAorCitZb3Ugd2lsbCB0aGVuIGRvOgorCisgICAgICAgIC4gUmVidWlsZCBhIHJldmlzaW9uIHRoYXQgeW91IGJlbGlldmUgd29ya3MsIGluc3RhbGwsIGFuZCB2ZXJpZnkgdGhhdC4KKyAgICAgICAgLiBEbyBhIGJpbmFyeSBzZWFyY2ggb3ZlciB0aGUga2VybmVscyB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZQorICAgICAgICAgIGludHJvZHVjZWQgdGhlIGJ1Zy4gIEkuZS4sIHN1cHBvc2UgMS4zLjI4IGRpZG4ndCBoYXZlIHRoZSBidWcsIGJ1dCAKKyAgICAgICAgICB5b3Uga25vdyB0aGF0IDEuMy42OSBkb2VzLiAgUGljayBhIGtlcm5lbCBpbiB0aGUgbWlkZGxlIGFuZCBidWlsZAorICAgICAgICAgIHRoYXQsIGxpa2UgMS4zLjUwLiAgQnVpbGQgJiB0ZXN0OyBpZiBpdCB3b3JrcywgcGljayB0aGUgbWlkIHBvaW50CisgICAgICAgICAgYmV0d2VlbiAuNTAgYW5kIC42OSwgZWxzZSB0aGUgbWlkIHBvaW50IGJldHdlZW4gLjI4IGFuZCAuNTAuCisgICAgICAgIC4gWW91J2xsIG5hcnJvdyBpdCBkb3duIHRvIHRoZSBrZXJuZWwgdGhhdCBpbnRyb2R1Y2VkIHRoZSBidWcuICBZb3UKKyAgICAgICAgICBjYW4gcHJvYmFibHkgZG8gYmV0dGVyIHRoYW4gdGhpcyBidXQgaXQgZ2V0cyB0cmlja3kuICAKKworICAgICAgICAuIE5hcnJvdyBpdCBkb3duIHRvIGEgc3ViZGlyZWN0b3J5CisKKyAgICAgICAgICAtIENvcHkga2VybmVsIHRoYXQgd29ya3MgaW50byAidGVzdCIuICBMZXQncyBzYXkgdGhhdCAzLjYyIHdvcmtzLAorICAgICAgICAgICAgYnV0IDMuNjMgZG9lc24ndC4gIFNvIHlvdSBkaWZmIC1yIHRob3NlIHR3byBrZXJuZWxzIGFuZCBjb21lCisgICAgICAgICAgICB1cCB3aXRoIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0IGNoYW5nZWQuICBGb3IgZWFjaCBvZiB0aG9zZQorICAgICAgICAgICAgZGlyZWN0b3JpZXM6CisKKyAgICAgICAgICAgICAgICBDb3B5IHRoZSBub24td29ya2luZyBkaXJlY3RvcnkgbmV4dCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhcyAiZGlyLjYzIi4gIAorICAgICAgICAgICAgICAgIE9uZSBkaXJlY3RvcnkgYXQgdGltZSwgdHJ5IG1vdmluZyB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8KKyAgICAgICAgICAgICAgICAiZGlyLjYyIiBhbmQgbXYgZGlyLjYzIGRpciJ0aW1lLCB0cnkgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG12IGRpciBkaXIuNjIKKyAgICAgICAgICAgICAgICAgICAgICAgIG12IGRpci42MyBkaXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgZGlyIC1uYW1lICcqLltvYV0nIC1wcmludCB8IHhhcmdzIHJtIC1mCisKKyAgICAgICAgICAgICAgICBBbmQgdGhlbiByZWJ1aWxkIGFuZCByZXRlc3QuICBBc3N1bWluZyB0aGF0IGFsbCByZWxhdGVkCisgICAgICAgICAgICAgICAgY2hhbmdlcyB3ZXJlIGNvbnRhaW5lZCBpbiB0aGUgc3ViIGRpcmVjdG9yeSwgdGhpcyBzaG91bGQgCisgICAgICAgICAgICAgICAgaXNvbGF0ZSB0aGUgY2hhbmdlIHRvIGEgZGlyZWN0b3J5LiAgCisKKyAgICAgICAgICAgICAgICBQcm9ibGVtczogY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMgbWF5IGhhdmUgb2NjdXJyZWQ7IEkndmUKKyAgICAgICAgICAgICAgICBmb3VuZCBpbiBteSBjYXNlIHRoYXQgdGhleSB3ZXJlIHNlbGYgZXhwbGFuYXRvcnkgLSB5b3UgbWF5IAorICAgICAgICAgICAgICAgIG9yIG1heSBub3Qgd2FudCB0byBnaXZlIHVwIHdoZW4gdGhhdCBoYXBwZW5zLgorCisgICAgICAgIC4gTmFycm93IGl0IGRvd24gdG8gYSBmaWxlCisKKyAgICAgICAgICAtIFlvdSBjYW4gYXBwbHkgdGhlIHNhbWUgdGVjaG5pcXVlIHRvIGVhY2ggZmlsZSBpbiB0aGUgZGlyZWN0b3J5LAorICAgICAgICAgICAgaG9waW5nIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhhdCBmaWxlIGFyZSBzZWxmIGNvbnRhaW5lZC4gIAorICAgICAgICAgICAgCisgICAgICAgIC4gTmFycm93IGl0IGRvd24gdG8gYSByb3V0aW5lCisKKyAgICAgICAgICAtIFlvdSBjYW4gdGFrZSB0aGUgb2xkIGZpbGUgYW5kIHRoZSBuZXcgZmlsZSBhbmQgbWFudWFsbHkgY3JlYXRlCisgICAgICAgICAgICBhIG1lcmdlZCBmaWxlIHRoYXQgaGFzCisKKyAgICAgICAgICAgICAgICAjaWZkZWYgVkVSNjIKKyAgICAgICAgICAgICAgICByb3V0aW5lKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICByb3V0aW5lKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIEFuZCB0aGVuIHdhbGsgdGhyb3VnaCB0aGF0IGZpbGUsIG9uZSByb3V0aW5lIGF0IGEgdGltZSBhbmQKKyAgICAgICAgICAgIHByZWZpeCBpdCB3aXRoCisKKyAgICAgICAgICAgICAgICAjZGVmaW5lIFZFUjYyCisgICAgICAgICAgICAgICAgLyogYm90aCByb3V0aW5lcyBoZXJlICovCisgICAgICAgICAgICAgICAgI3VuZGVmIFZFUjYyCisKKyAgICAgICAgICAgIFRoZW4gcmVjb21waWxlLCByZXRlc3QsIG1vdmUgdGhlIGlmZGVmcyB1bnRpbCB5b3UgZmluZCB0aGUgb25lCisgICAgICAgICAgICB0aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlLgorCitGaW5hbGx5LCB5b3UgdGFrZSBhbGwgdGhlIGluZm8gdGhhdCB5b3UgaGF2ZSwga2VybmVsIHJldmlzaW9ucywgYnVnCitkZXNjcmlwdGlvbiwgdGhlIGV4dGVudCB0byB3aGljaCB5b3UgaGF2ZSBuYXJyb3dlZCBpdCBkb3duLCBhbmQgcGFzcyAKK3RoYXQgb2ZmIHRvIHdob21ldmVyIHlvdSBiZWxpZXZlIGlzIHRoZSBtYWludGFpbmVyIG9mIHRoYXQgc2VjdGlvbi4KK0EgcG9zdCB0byBsaW51eC5kZXYua2VybmVsIGlzbid0IHN1Y2ggYSBiYWQgaWRlYSBpZiB5b3UndmUgZG9uZSBzb21lCit3b3JrIHRvIG5hcnJvdyBpdCBkb3duLgorCitJZiB5b3UgZ2V0IGl0IGRvd24gdG8gYSByb3V0aW5lLCB5b3UnbGwgcHJvYmFibHkgZ2V0IGEgZml4IGluIDI0IGhvdXJzLgorCitNeSBhcG9sb2dpZXMgdG8gTGludXMgYW5kIHRoZSBvdGhlciBrZXJuZWwgaGFja2VycyBmb3IgZGVzY3JpYmluZyB0aGlzCiticnV0ZSBmb3JjZSBhcHByb2FjaCwgaXQncyBoYXJkbHkgd2hhdCBhIGtlcm5lbCBoYWNrZXIgd291bGQgZG8uICBIb3dldmVyLAoraXQgZG9lcyB3b3JrIGFuZCBpdCBsZXRzIG5vbi1oYWNrZXJzIGhlbHAgZml4IGJ1Z3MuICBBbmQgaXQgaXMgY29vbAorYmVjYXVzZSBMaW51eCBzbmFwc2hvdHMgd2lsbCBsZXQgeW91IGRvIHRoaXMgLSBzb21ldGhpbmcgdGhhdCB5b3UgY2FuJ3QKK2RvIHdpdGggdmVuZG9yIHN1cHBsaWVkIHJlbGVhc2VzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMgYi9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNmE1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwpAQCAtMCwwICsxLDQxMCBAQAorSW50cm8KKz09PT09CisKK1RoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgdGhlIG1pbmltdW0gbGV2ZWxzIG9mCitzb2Z0d2FyZSBuZWNlc3NhcnkgdG8gcnVuIHRoZSAyLjYga2VybmVscywgYXMgd2VsbCBhcyBwcm92aWRlIGJyaWVmCitpbnN0cnVjdGlvbnMgcmVnYXJkaW5nIGFueSBvdGhlciAiR290Y2hhcyIgdXNlcnMgbWF5IGVuY291bnRlciB3aGVuCit0cnlpbmcgbGlmZSBvbiB0aGUgQmxlZWRpbmcgRWRnZS4gIElmIHVwZ3JhZGluZyBmcm9tIGEgcHJlLTIuNC54CitrZXJuZWwsIHBsZWFzZSBjb25zdWx0IHRoZSBDaGFuZ2VzIGZpbGUgaW5jbHVkZWQgd2l0aCAyLjQueCBrZXJuZWxzIGZvcgorYWRkaXRpb25hbCBpbmZvcm1hdGlvbjsgbW9zdCBvZiB0aGF0IGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHJlcGVhdGVkCitoZXJlLiAgQmFzaWNhbGx5LCB0aGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCB5b3VyIHN5c3RlbSBpcyBhbHJlYWR5CitmdW5jdGlvbmFsIGFuZCBydW5uaW5nIGF0IGxlYXN0IDIuNC54IGtlcm5lbHMuCisKK1RoaXMgZG9jdW1lbnQgaXMgb3JpZ2luYWxseSBiYXNlZCBvbiBteSAiQ2hhbmdlcyIgZmlsZSBmb3IgMi4wLngga2VybmVscworYW5kIHRoZXJlZm9yZSBvd2VzIGNyZWRpdCB0byB0aGUgc2FtZSBwZW9wbGUgYXMgdGhhdCBmaWxlIChKYXJlZCBNYXVjaCwKK0F4ZWwgQm9sZHQsIEFsZXNzYW5kcm8gU2lnYWxhLCBhbmQgY291bnRsZXNzIG90aGVyIHVzZXJzIGFsbCBvdmVyIHRoZQorJ25ldCkuCisKK1RoZSBsYXRlc3QgcmV2aXNpb24gb2YgdGhpcyBkb2N1bWVudCwgaW4gdmFyaW91cyBmb3JtYXRzLCBjYW4gYWx3YXlzCitiZSBmb3VuZCBhdCA8aHR0cDovL2N5YmVyYnV6ei5nYXRlY2guZWR1L2thYm9vbS9saW51eC9DaGFuZ2VzLTIuNC8+LgorCitGZWVsIGZyZWUgdG8gdHJhbnNsYXRlIHRoaXMgZG9jdW1lbnQuICBJZiB5b3UgZG8gc28sIHBsZWFzZSBzZW5kIG1lIGEKK1VSTCB0byB5b3VyIHRyYW5zbGF0aW9uIGZvciBpbmNsdXNpb24gaW4gZnV0dXJlIHJldmlzaW9ucyBvZiB0aGlzCitkb2N1bWVudC4KKworU21vdHJpdGUgZmlsZSA8aHR0cDovL29ibG9tLnJuYy5ydS9saW51eC9rZXJuZWwvQ2hhbmdlcy5ydT4sIHlhdmx5YXVzaGlzeWEKK3J1c3NraW0gcGVyZXZvZG9tIGRhbm5vZ28gZG9jdW1lbnRhLgorCitWaXNpdGUgPGh0dHA6Ly93d3cyLmFkaS51YW0uZXMvfmVuZGVyL3RlY25pY28vPiBwYXJhIG9idGVuZXIgbGEgdHJhZHVjY2nzbgorYWwgZXNwYfFvbCBkZSBlc3RlIGRvY3VtZW50byBlbiB2YXJpb3MgZm9ybWF0b3MuCisKK0VpbmUgZGV1dHNjaGUgVmVyc2lvbiBkaWVzZXIgRGF0ZWkgZmluZGVuIFNpZSB1bnRlcgorPGh0dHA6Ly93d3cuc3RlZmFuLXdpbnRlci5kZS9DaGFuZ2VzLTIuNC4wLnR4dD4uCisKK0xhc3QgdXBkYXRlZDogT2N0b2JlciAyOXRoLCAyMDAyCisKK0NocmlzIFJpY2tlciAoa2Fib29tQGdhdGVjaC5lZHUgb3IgY2hyaXMucmlja2VyQGdlbmV0aWNzLnV0YWguZWR1KS4KKworQ3VycmVudCBNaW5pbWFsIFJlcXVpcmVtZW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGdyYWRlIHRvIGF0ICpsZWFzdCogdGhlc2Ugc29mdHdhcmUgcmV2aXNpb25zIGJlZm9yZSB0aGlua2luZyB5b3UndmUKK2VuY291bnRlcmVkIGEgYnVnISAgSWYgeW91J3JlIHVuc3VyZSB3aGF0IHZlcnNpb24geW91J3JlIGN1cnJlbnRseQorcnVubmluZywgdGhlIHN1Z2dlc3RlZCBjb21tYW5kIHNob3VsZCB0ZWxsIHlvdS4KKworQWdhaW4sIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgbGlzdCBhc3N1bWVzIHlvdSBhcmUgYWxyZWFkeQorZnVuY3Rpb25hbGx5IHJ1bm5pbmcgYSBMaW51eCAyLjQga2VybmVsLiAgQWxzbywgbm90IGFsbCB0b29scyBhcmUKK25lY2Vzc2FyeSBvbiBhbGwgc3lzdGVtczsgb2J2aW91c2x5LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgUENNQ0lBIChQQworQ2FyZCkgaGFyZHdhcmUsIGZvciBleGFtcGxlLCB5b3UgcHJvYmFibHkgbmVlZG4ndCBjb25jZXJuIHlvdXJzZWxmCit3aXRoIHBjbWNpYS1jcy4KKworbyAgR251IEMgICAgICAgICAgICAgICAgICAyLjk1LjMgICAgICAgICAgICAgICAgICAjIGdjYyAtLXZlcnNpb24KK28gIEdudSBtYWtlICAgICAgICAgICAgICAgMy43OS4xICAgICAgICAgICAgICAgICAgIyBtYWtlIC0tdmVyc2lvbgorbyAgYmludXRpbHMgICAgICAgICAgICAgICAyLjEyICAgICAgICAgICAgICAgICAgICAjIGxkIC12CitvICB1dGlsLWxpbnV4ICAgICAgICAgICAgIDIuMTBvICAgICAgICAgICAgICAgICAgICMgZmRmb3JtYXQgLS12ZXJzaW9uCitvICBtb2R1bGUtaW5pdC10b29scyAgICAgIDAuOS4xMCAgICAgICAgICAgICAgICAgICMgZGVwbW9kIC1WCitvICBlMmZzcHJvZ3MgICAgICAgICAgICAgIDEuMjkgICAgICAgICAgICAgICAgICAgICMgdHVuZTJmcworbyAgamZzdXRpbHMgICAgICAgICAgICAgICAxLjEuMyAgICAgICAgICAgICAgICAgICAjIGZzY2suamZzIC1WCitvICByZWlzZXJmc3Byb2dzICAgICAgICAgIDMuNi4zICAgICAgICAgICAgICAgICAgICMgcmVpc2VyZnNjayAtViAyPiYxfGdyZXAgcmVpc2VyZnNwcm9ncworbyAgeGZzcHJvZ3MgICAgICAgICAgICAgICAyLjYuMCAgICAgICAgICAgICAgICAgICAjIHhmc19kYiAtVgorbyAgcGNtY2lhLWNzICAgICAgICAgICAgICAzLjEuMjEgICAgICAgICAgICAgICAgICAjIGNhcmRtZ3IgLVYKK28gIHF1b3RhLXRvb2xzICAgICAgICAgICAgMy4wOSAgICAgICAgICAgICAgICAgICAgIyBxdW90YSAtVgorbyAgUFBQICAgICAgICAgICAgICAgICAgICAyLjQuMCAgICAgICAgICAgICAgICAgICAjIHBwcGQgLS12ZXJzaW9uCitvICBpc2RuNGstdXRpbHMgICAgICAgICAgIDMuMXByZTEgICAgICAgICAgICAgICAgICMgaXNkbmN0cmwgMj4mMXxncmVwIHZlcnNpb24KK28gIG5mcy11dGlscyAgICAgICAgICAgICAgMS4wLjUgICAgICAgICAgICAgICAgICAgIyBzaG93bW91bnQgLS12ZXJzaW9uCitvICBwcm9jcHMgICAgICAgICAgICAgICAgIDMuMi4wICAgICAgICAgICAgICAgICAgICMgcHMgLS12ZXJzaW9uCitvICBvcHJvZmlsZSAgICAgICAgICAgICAgIDAuNS4zICAgICAgICAgICAgICAgICAgICMgb3Byb2ZpbGVkIC0tdmVyc2lvbgorCitLZXJuZWwgY29tcGlsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCitHQ0MKKy0tLQorCitUaGUgZ2NjIHZlcnNpb24gcmVxdWlyZW1lbnRzIG1heSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBDUFUgaW4geW91cgorY29tcHV0ZXIuIFRoZSBuZXh0IHBhcmFncmFwaCBhcHBsaWVzIHRvIHVzZXJzIG9mIHg4NiBDUFVzLCBidXQgbm90CituZWNlc3NhcmlseSB0byB1c2VycyBvZiBvdGhlciBDUFVzLiBVc2VycyBvZiBvdGhlciBDUFVzIHNob3VsZCBvYnRhaW4KK2luZm9ybWF0aW9uIGFib3V0IHRoZWlyIGdjYyB2ZXJzaW9uIHJlcXVpcmVtZW50cyBmcm9tIGFub3RoZXIgc291cmNlLgorCitUaGUgcmVjb21tZW5kZWQgY29tcGlsZXIgZm9yIHRoZSBrZXJuZWwgaXMgZ2NjIDIuOTUueCAoeCA+PSAzKSwgYW5kIGl0CitzaG91bGQgYmUgdXNlZCB3aGVuIHlvdSBuZWVkIGFic29sdXRlIHN0YWJpbGl0eS4gWW91IG1heSB1c2UgZ2NjIDMuMC54CitpbnN0ZWFkIGlmIHlvdSB3aXNoLCBhbHRob3VnaCBpdCBtYXkgY2F1c2UgcHJvYmxlbXMuIExhdGVyIHZlcnNpb25zIG9mIGdjYyAKK2hhdmUgbm90IHJlY2VpdmVkIG11Y2ggdGVzdGluZyBmb3IgTGludXgga2VybmVsIGNvbXBpbGF0aW9uLCBhbmQgdGhlcmUgYXJlIAorYWxtb3N0IGNlcnRhaW5seSBidWdzIChtYWlubHksIGJ1dCBub3QgZXhjbHVzaXZlbHksIGluIHRoZSBrZXJuZWwpIHRoYXQKK3dpbGwgbmVlZCB0byBiZSBmaXhlZCBpbiBvcmRlciB0byB1c2UgdGhlc2UgY29tcGlsZXJzLiBJbiBhbnkgY2FzZSwgdXNpbmcKK3BnY2MgaW5zdGVhZCBvZiBwbGFpbiBnY2MgaXMganVzdCBhc2tpbmcgZm9yIHRyb3VibGUuCisKK1RoZSBSZWQgSGF0IGdjYyAyLjk2IGNvbXBpbGVyIHN1YnRyZWUgY2FuIGFsc28gYmUgdXNlZCB0byBidWlsZCB0aGlzIHRyZWUuCitZb3Ugc2hvdWxkIGVuc3VyZSB5b3UgdXNlIGdjYy0yLjk2LTc0IG9yIGxhdGVyLiBnY2MtMi45Ni01NCB3aWxsIG5vdCBidWlsZAordGhlIGtlcm5lbCBjb3JyZWN0bHkuCisKK0luIGFkZGl0aW9uLCBwbGVhc2UgcGF5IGF0dGVudGlvbiB0byBjb21waWxlciBvcHRpbWl6YXRpb24uICBBbnl0aGluZworZ3JlYXRlciB0aGFuIC1PMiBtYXkgbm90IGJlIHdpc2UuICBTaW1pbGFybHksIGlmIHlvdSBjaG9vc2UgdG8gdXNlIGdjYy0yLjk1LngKK29yIGRlcml2YXRpdmVzLCBiZSBzdXJlIG5vdCB0byB1c2UgLWZzdHJpY3QtYWxpYXNpbmcgKHdoaWNoLCBkZXBlbmRpbmcgb24KK3lvdXIgdmVyc2lvbiBvZiBnY2MgMi45NS54LCBtYXkgbmVjZXNzaXRhdGUgdXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcpLgorCitNYWtlCistLS0tCisKK1lvdSB3aWxsIG5lZWQgR251IG1ha2UgMy43OS4xIG9yIGxhdGVyIHRvIGJ1aWxkIHRoZSBrZXJuZWwuCisKK0JpbnV0aWxzCistLS0tLS0tLQorCitMaW51eCBvbiBJQS0zMiBoYXMgcmVjZW50bHkgc3dpdGNoZWQgZnJvbSB1c2luZyBhczg2IHRvIHVzaW5nIGdhcyBmb3IKK2Fzc2VtYmxpbmcgdGhlIDE2LWJpdCBib290IGNvZGUsIHJlbW92aW5nIHRoZSBuZWVkIGZvciBhczg2IHRvIGNvbXBpbGUKK3lvdXIga2VybmVsLiAgVGhpcyBjaGFuZ2UgZG9lcywgaG93ZXZlciwgbWVhbiB0aGF0IHlvdSBuZWVkIGEgcmVjZW50CityZWxlYXNlIG9mIGJpbnV0aWxzLgorCitTeXN0ZW0gdXRpbGl0aWVzCis9PT09PT09PT09PT09PT09CisKK0FyY2hpdGVjdHVyYWwgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RldkZTIGhhcyBiZWVuIG9ic29sZXRlZCBpbiBmYXZvdXIgb2YgdWRldgorKGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvKQorCiszMi1iaXQgVUlEIHN1cHBvcnQgaXMgbm93IGluIHBsYWNlLiAgSGF2ZSBmdW4hCisKK0xpbnV4IGRvY3VtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyBpcyB0cmFuc2l0aW9uaW5nIHRvIGlubGluZQorZG9jdW1lbnRhdGlvbiB2aWEgc3BlY2lhbGx5LWZvcm1hdHRlZCBjb21tZW50cyBuZWFyIHRoZWlyCitkZWZpbml0aW9ucyBpbiB0aGUgc291cmNlLiAgVGhlc2UgY29tbWVudHMgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlCitTR01MIHRlbXBsYXRlcyBpbiB0aGUgRG9jdW1lbnRhdGlvbi9Eb2NCb29rIGRpcmVjdG9yeSB0byBtYWtlIERvY0Jvb2sKK2ZpbGVzLCB3aGljaCBjYW4gdGhlbiBiZSBjb252ZXJ0ZWQgYnkgRG9jQm9vayBzdHlsZXNoZWV0cyB0byBQb3N0U2NyaXB0LAorSFRNTCwgUERGIGZpbGVzLCBhbmQgc2V2ZXJhbCBvdGhlciBmb3JtYXRzLiAgSW4gb3JkZXIgdG8gY29udmVydCBmcm9tCitEb2NCb29rIGZvcm1hdCB0byBhIGZvcm1hdCBvZiB5b3VyIGNob2ljZSwgeW91J2xsIG5lZWQgdG8gaW5zdGFsbCBKYWRlIGFzCit3ZWxsIGFzIHRoZSBkZXNpcmVkIERvY0Jvb2sgc3R5bGVzaGVldHMuCisKK1V0aWwtbGludXgKKy0tLS0tLS0tLS0KKworTmV3IHZlcnNpb25zIG9mIHV0aWwtbGludXggcHJvdmlkZSAqZmRpc2sgc3VwcG9ydCBmb3IgbGFyZ2VyIGRpc2tzLAorc3VwcG9ydCBuZXcgb3B0aW9ucyB0byBtb3VudCwgcmVjb2duaXplIG1vcmUgc3VwcG9ydGVkIHBhcnRpdGlvbgordHlwZXMsIGhhdmUgYSBmZGZvcm1hdCB3aGljaCB3b3JrcyB3aXRoIDIuNCBrZXJuZWxzLCBhbmQgc2ltaWxhciBnb29kaWVzLgorWW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXBncmFkZS4KKworS3N5bW9vcHMKKy0tLS0tLS0tCisKK0lmIHRoZSB1bnRoaW5rYWJsZSBoYXBwZW5zIGFuZCB5b3VyIGtlcm5lbCBvb3BzZXMsIHlvdSdsbCBuZWVkIGEgMi40Cit2ZXJzaW9uIG9mIGtzeW1vb3BzIHRvIGRlY29kZSB0aGUgcmVwb3J0OyBzZWUgUkVQT1JUSU5HLUJVR1MgaW4gdGhlCityb290IG9mIHRoZSBMaW51eCBzb3VyY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK01vZHVsZS1Jbml0LVRvb2xzCistLS0tLS0tLS0tLS0tLS0tLQorCitBIG5ldyBtb2R1bGUgbG9hZGVyIGlzIG5vdyBpbiB0aGUga2VybmVsIHRoYXQgcmVxdWlyZXMgbW9kdWxlLWluaXQtdG9vbHMKK3RvIHVzZS4gIEl0IGlzIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCB0aGUgMi40Lnggc2VyaWVzIGtlcm5lbHMuCisKK01raW5pdHJkCistLS0tLS0tLQorCitUaGVzZSBjaGFuZ2VzIHRvIHRoZSAvbGliL21vZHVsZXMgZmlsZSB0cmVlIGxheW91dCBhbHNvIHJlcXVpcmUgdGhhdAorbWtpbml0cmQgYmUgdXBncmFkZWQuCisKK0UyZnNwcm9ncworLS0tLS0tLS0tCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiBlMmZzcHJvZ3MgZml4ZXMgc2V2ZXJhbCBidWdzIGluIGZzY2sgYW5kCitkZWJ1Z2ZzLiAgT2J2aW91c2x5LCBpdCdzIGEgZ29vZCBpZGVhIHRvIHVwZ3JhZGUuCisKK0pGU3V0aWxzCistLS0tLS0tLQorCitUaGUgamZzdXRpbHMgcGFja2FnZSBjb250YWlucyB0aGUgdXRpbGl0aWVzIGZvciB0aGUgZmlsZSBzeXN0ZW0uCitUaGUgZm9sbG93aW5nIHV0aWxpdGllcyBhcmUgYXZhaWxhYmxlOgorbyBmc2NrLmpmcyAtIGluaXRpYXRlIHJlcGxheSBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCBhbmQgY2hlY2sKKyAgYW5kIHJlcGFpciBhIEpGUyBmb3JtYXR0ZWQgcGFydGl0aW9uLgorbyBta2ZzLmpmcyAtIGNyZWF0ZSBhIEpGUyBmb3JtYXR0ZWQgcGFydGl0aW9uLgorbyBvdGhlciBmaWxlIHN5c3RlbSB1dGlsaXRpZXMgYXJlIGFsc28gYXZhaWxhYmxlIGluIHRoaXMgcGFja2FnZS4KKworUmVpc2VyZnNwcm9ncworLS0tLS0tLS0tLS0tLQorCitUaGUgcmVpc2VyZnNwcm9ncyBwYWNrYWdlIHNob3VsZCBiZSB1c2VkIGZvciByZWlzZXJmcy0zLjYueAorKExpbnV4IGtlcm5lbHMgMi40LngpLiBJdCBpcyBhIGNvbWJpbmVkIHBhY2thZ2UgYW5kIGNvbnRhaW5zIHdvcmtpbmcKK3ZlcnNpb25zIG9mIG1rcmVpc2VyZnMsIHJlc2l6ZV9yZWlzZXJmcywgZGVidWdyZWlzZXJmcyBhbmQKK3JlaXNlcmZzY2suIFRoZXNlIHV0aWxzIHdvcmsgb24gYm90aCBpMzg2IGFuZCBhbHBoYSBwbGF0Zm9ybXMuCisKK1hmc3Byb2dzCistLS0tLS0tLQorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgeGZzcHJvZ3MgY29udGFpbnMgbWtmcy54ZnMsIHhmc19kYiwgYW5kIHRoZQoreGZzX3JlcGFpciB1dGlsaXRpZXMsIGFtb25nIG90aGVycywgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gIEl0IGlzCithcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgYW5kIGFueSB2ZXJzaW9uIGZyb20gMi4wLjAgb253YXJkIHNob3VsZAord29yayBjb3JyZWN0bHkgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlIFhGUyBrZXJuZWwgY29kZSAoMi42LjAgb3IKK2xhdGVyIGlzIHJlY29tbWVuZGVkLCBkdWUgdG8gc29tZSBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMpLgorCisKK1BjbWNpYS1jcworLS0tLS0tLS0tCisKK1BDTUNJQSAoUEMgQ2FyZCkgc3VwcG9ydCBpcyBub3cgcGFydGlhbGx5IGltcGxlbWVudGVkIGluIHRoZSBtYWluCitrZXJuZWwgc291cmNlLiAgUGF5IGF0dGVudGlvbiB3aGVuIHlvdSByZWNvbXBpbGUgeW91ciBrZXJuZWwgOy0pLgorQWxzbywgYmUgc3VyZSB0byB1cGdyYWRlIHRvIHRoZSBsYXRlc3QgcGNtY2lhLWNzIHJlbGVhc2UuCisKK1F1b3RhLXRvb2xzCistLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciAzMiBiaXQgdWlkJ3MgYW5kIGdpZCdzIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHVzZQordGhlIG5ld2VyIHZlcnNpb24gMiBxdW90YSBmb3JtYXQuICBRdW90YS10b29scyB2ZXJzaW9uIDMuMDcgYW5kCituZXdlciBoYXMgdGhpcyBzdXBwb3J0LiAgVXNlIHRoZSByZWNvbW1lbmRlZCB2ZXJzaW9uIG9yIG5ld2VyCitmcm9tIHRoZSB0YWJsZSBhYm92ZS4KKworSW50ZWwgSUEzMiBtaWNyb2NvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZHJpdmVyIGhhcyBiZWVuIGFkZGVkIHRvIGFsbG93IHVwZGF0aW5nIG9mIEludGVsIElBMzIgbWljcm9jb2RlLAorYWNjZXNzaWJsZSBhcyBib3RoIGEgZGV2ZnMgcmVndWxhciBmaWxlIGFuZCBhcyBhIG5vcm1hbCAobWlzYykKK2NoYXJhY3RlciBkZXZpY2UuICBJZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmcyB5b3UgbWF5IG5lZWQgdG86CisKK21rZGlyIC9kZXYvY3B1Citta25vZCAvZGV2L2NwdS9taWNyb2NvZGUgYyAxMCAxODQKK2NobW9kIDA2NDQgL2Rldi9jcHUvbWljcm9jb2RlCisKK2FzIHJvb3QgYmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMuICBZb3UnbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvCitnZXQgdGhlIHVzZXItc3BhY2UgbWljcm9jb2RlX2N0bCB1dGlsaXR5IHRvIHVzZSB3aXRoIHRoaXMuCisKK1Bvd2VydHdlYWsKKy0tLS0tLS0tLS0KKworSWYgeW91IGFyZSBydW5uaW5nIHYwLjEuMTcgb3IgZWFybGllciwgeW91IHNob3VsZCB1cGdyYWRlIHRvCit2ZXJzaW9uIHYwLjk5LjAgb3IgaGlnaGVyLiBSdW5uaW5nIG9sZCB2ZXJzaW9ucyBtYXkgY2F1c2UgcHJvYmxlbXMKK3dpdGggcHJvZ3JhbXMgdXNpbmcgc2hhcmVkIG1lbW9yeS4KKwordWRldgorLS0tLQordWRldiBpcyBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBmb3IgcG9wdWxhdGluZyAvZGV2IGR5bmFtaWNhbGx5IHdpdGgKK29ubHkgZW50cmllcyBmb3IgZGV2aWNlcyBhY3R1YWxseSBwcmVzZW50LiB1ZGV2IHJlcGxhY2VzIGRldmZzLgorCitOZXR3b3JraW5nCis9PT09PT09PT09CisKK0dlbmVyYWwgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIGFkdmFuY2VkIG5ldHdvcmsgY29uZmlndXJhdGlvbiBuZWVkcywgeW91IHNob3VsZCBwcm9iYWJseQorY29uc2lkZXIgdXNpbmcgdGhlIG5ldHdvcmsgdG9vbHMgZnJvbSBpcC1yb3V0ZTIuCisKK1BhY2tldCBGaWx0ZXIgLyBOQVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBwYWNrZXQgZmlsdGVyaW5nIGFuZCBOQVQgY29kZSB1c2VzIHRoZSBzYW1lIHRvb2xzIGxpa2UgdGhlIHByZXZpb3VzIDIuNC54CitrZXJuZWwgc2VyaWVzIChpcHRhYmxlcykuICBJdCBzdGlsbCBpbmNsdWRlcyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBtb2R1bGVzCitmb3IgMi4yLngtc3R5bGUgaXBjaGFpbnMgYW5kIDIuMC54LXN0eWxlIGlwZndhZG0uCisKK1BQUAorLS0tCisKK1RoZSBQUFAgZHJpdmVyIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBzdXBwb3J0IG11bHRpbGluayBhbmQgdG8KK2VuYWJsZSBpdCB0byBvcGVyYXRlIG92ZXIgZGl2ZXJzZSBtZWRpYSBsYXllcnMuICBJZiB5b3UgdXNlIFBQUCwKK3VwZ3JhZGUgcHBwZCB0byBhdCBsZWFzdCAyLjQuMC4KKworSWYgeW91IGFyZSBub3QgdXNpbmcgZGV2ZnMsIHlvdSBtdXN0IGhhdmUgdGhlIGRldmljZSBmaWxlIC9kZXYvcHBwCit3aGljaCBjYW4gYmUgbWFkZSBieToKKworbWtub2QgL2Rldi9wcHAgYyAxMDggMAorCithcyByb290LgorCitJZiB5b3UgdXNlIGRldmZzZCBhbmQgYnVpbGQgcHBwIHN1cHBvcnQgYXMgbW9kdWxlcywgeW91IHdpbGwgbmVlZAordGhlIGZvbGxvd2luZyBpbiB5b3VyIC9ldGMvZGV2ZnNkLmNvbmYgZmlsZToKKworTE9PS1VQCVBQUAlNT0RMT0FECisKK0lzZG40ay11dGlscworLS0tLS0tLS0tLS0tCisKK0R1ZSB0byBjaGFuZ2VzIGluIHRoZSBsZW5ndGggb2YgdGhlIHBob25lIG51bWJlciBmaWVsZCwgaXNkbjRrLXV0aWxzCituZWVkcyB0byBiZSByZWNvbXBpbGVkIG9yIChwcmVmZXJhYmx5KSB1cGdyYWRlZC4KKworTkZTLXV0aWxzCistLS0tLS0tLS0KKworSW4gMi40IGFuZCBlYXJsaWVyIGtlcm5lbHMsIHRoZSBuZnMgc2VydmVyIG5lZWRlZCB0byBrbm93IGFib3V0IGFueQorY2xpZW50IHRoYXQgZXhwZWN0ZWQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgZmlsZXMgdmlhIE5GUy4gIFRoaXMKK2luZm9ybWF0aW9uIHdvdWxkIGJlIGdpdmVuIHRvIHRoZSBrZXJuZWwgYnkgIm1vdW50ZCIgd2hlbiB0aGUgY2xpZW50Cittb3VudGVkIHRoZSBmaWxlc3lzdGVtLCBvciBieSAiZXhwb3J0ZnMiIGF0IHN5c3RlbSBzdGFydHVwLiAgZXhwb3J0ZnMKK3dvdWxkIHRha2UgaW5mb3JtYXRpb24gYWJvdXQgYWN0aXZlIGNsaWVudHMgZnJvbSAvdmFyL2xpYi9uZnMvcm10YWIuCisKK1RoaXMgYXBwcm9hY2ggaXMgcXVpdGUgZnJhZ2lsZSBhcyBpdCBkZXBlbmRzIG9uIHJtdGFiIGJlaW5nIGNvcnJlY3QKK3doaWNoIGlzIG5vdCBhbHdheXMgZWFzeSwgcGFydGljdWxhcmx5IHdoZW4gdHJ5aW5nIHRvIGltcGxlbWVudAorZmFpbC1vdmVyLiAgRXZlbiB3aGVuIHRoZSBzeXN0ZW0gaXMgd29ya2luZyB3ZWxsLCBybXRhYiBzdWZmZXJzIGZyb20KK2dldHRpbmcgbG90cyBvZiBvbGQgZW50cmllcyB0aGF0IG5ldmVyIGdldCByZW1vdmVkLgorCitXaXRoIDIuNiB3ZSBoYXZlIHRoZSBvcHRpb24gb2YgaGF2aW5nIHRoZSBrZXJuZWwgdGVsbCBtb3VudGQgd2hlbiBpdAorZ2V0cyBhIHJlcXVlc3QgZnJvbSBhbiB1bmtub3duIGhvc3QsIGFuZCBtb3VudGQgY2FuIGdpdmUgYXBwcm9wcmlhdGUKK2V4cG9ydCBpbmZvcm1hdGlvbiB0byB0aGUga2VybmVsLiAgVGhpcyByZW1vdmVzIHRoZSBkZXBlbmRlbmN5IG9uCitybXRhYiBhbmQgbWVhbnMgdGhhdCB0aGUga2VybmVsIG9ubHkgbmVlZHMgdG8ga25vdyBhYm91dCBjdXJyZW50bHkKK2FjdGl2ZSBjbGllbnRzLgorCitUbyBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgeW91IG5lZWQgdG86CisKKyAgbW91bnQgLXQgbmZzZCBuZnNkIC9wcm9jL2ZzL25mcworCitiZWZvcmUgcnVubmluZyBleHBvcnRmcyBvciBtb3VudGQuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCBORlMKK3NlcnZpY2VzIGJlIHByb3RlY3RlZCBmcm9tIHRoZSBpbnRlcm5ldC1hdC1sYXJnZSBieSBhIGZpcmV3YWxsIHdoZXJlCit0aGF0IGlzIHBvc3NpYmxlLgorCitHZXR0aW5nIHVwZGF0ZWQgc29mdHdhcmUKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitLZXJuZWwgY29tcGlsYXRpb24KKyoqKioqKioqKioqKioqKioqKgorCitnY2MgMi45NS4zCistLS0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLmdudS5vcmcvZ251L2djYy9nY2MtMi45NS4zLnRhci5nej4KKworTWFrZQorLS0tLQorbyAgPGZ0cDovL2Z0cC5nbnUub3JnL2dudS9tYWtlLz4KKworQmludXRpbHMKKy0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RldmVsL2JpbnV0aWxzLz4KKworU3lzdGVtIHV0aWxpdGllcworKioqKioqKioqKioqKioqKgorCitVdGlsLWxpbnV4CistLS0tLS0tLS0tCitvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3V0aWwtbGludXgvPgorCitLc3ltb29wcworLS0tLS0tLS0KK28gIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2tzeW1vb3BzL3YyLjQvPgorCitNb2R1bGUtSW5pdC1Ub29scworLS0tLS0tLS0tLS0tLS0tLS0KK28gIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ydXN0eS9tb2R1bGVzLz4KKworTWtpbml0cmQKKy0tLS0tLS0tCitvICA8ZnRwOi8vcmF3aGlkZS5yZWRoYXQuY29tL3B1Yi9yYXdoaWRlL1NSUE1TL1NSUE1TLz4KKworRTJmc3Byb2dzCistLS0tLS0tLS0KK28gIDxodHRwOi8vcHJkb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L2UyZnNwcm9ncy9lMmZzcHJvZ3MtMS4yOS50YXIuZ3o+CisKK0pGU3V0aWxzCistLS0tLS0tLQorbyAgPGh0dHA6Ly9qZnMuc291cmNlZm9yZ2UubmV0Lz4KKworUmVpc2VyZnNwcm9ncworLS0tLS0tLS0tLS0tLQorbyAgPGh0dHA6Ly93d3cubmFtZXN5cy5jb20vcHViL3JlaXNlcmZzcHJvZ3MvcmVpc2VyZnNwcm9ncy0zLjYuMy50YXIuZ3o+CisKK1hmc3Byb2dzCistLS0tLS0tLQorbyAgPGZ0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy9kb3dubG9hZC8+CisKK1BjbWNpYS1jcworLS0tLS0tLS0tCitvICA8ZnRwOi8vcGNtY2lhLWNzLnNvdXJjZWZvcmdlLm5ldC9wdWIvcGNtY2lhLWNzL3BjbWNpYS1jcy0zLjEuMjEudGFyLmd6PgorCitRdW90YS10b29scworLS0tLS0tLS0tLQorbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS8+CisKK0phZGUKKy0tLS0KK28gIDxmdHA6Ly9mdHAuamNsYXJrLmNvbS9wdWIvamFkZS9qYWRlLTEuMi4xLnRhci5nej4KKworRG9jQm9vayBTdHlsZXNoZWV0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorbyAgPGh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2svZHNzc2wvPgorCitJbnRlbCBQNiBtaWNyb2NvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLQorbyAgPGh0dHA6Ly93d3cudXJiYW5teXRoLm9yZy9taWNyb2NvZGUvPgorCitQb3dlcnR3ZWFrCistLS0tLS0tLS0tCitvICA8aHR0cDovL3Bvd2VydHdlYWsuc291cmNlZm9yZ2UubmV0Lz4KKwordWRldgorLS0tLQorbyA8aHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy91ZGV2Lmh0bWw+CisKK05ldHdvcmtpbmcKKyoqKioqKioqKioKKworUFBQCistLS0KK28gIDxmdHA6Ly9mdHAuc2FtYmEub3JnL3B1Yi9wcHAvcHBwLTIuNC4wLnRhci5nej4KKworSXNkbjRrLXV0aWxzCistLS0tLS0tLS0tLS0KK28gIDxmdHA6Ly9mdHAuaXNkbjRsaW51eC5kZS9wdWIvaXNkbjRsaW51eC91dGlscy9pc2RuNGstdXRpbHMudjMuMXByZTEudGFyLmd6PgorCitORlMtdXRpbHMKKy0tLS0tLS0tLQorbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE0PgorCitJcHRhYmxlcworLS0tLS0tLS0KK28gIDxodHRwOi8vd3d3LmlwdGFibGVzLm9yZy9kb3dubG9hZHMuaHRtbD4KKworSXAtcm91dGUyCistLS0tLS0tLS0KK28gIDxmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvbmV0L2lwLXJvdXRpbmcvaXByb3V0ZTItMi4yLjQtbm93LXNzOTkxMDIzLnRhci5nej4KKworT1Byb2ZpbGUKKy0tLS0tLS0tCitvICA8aHR0cDovL29wcm9maWxlLnNmLm5ldC9kb3dubG9hZC8+CisKK05GUy1VdGlscworLS0tLS0tLS0tCitvICA8aHR0cDovL25mcy5zb3VyY2Vmb3JnZS5uZXQvPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjViMzk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpAQCAtMCwwICsxLDQzMSBAQAorCisJCUxpbnV4IGtlcm5lbCBjb2Rpbmcgc3R5bGUKKworVGhpcyBpcyBhIHNob3J0IGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlIHByZWZlcnJlZCBjb2Rpbmcgc3R5bGUgZm9yIHRoZQorbGludXgga2VybmVsLiAgQ29kaW5nIHN0eWxlIGlzIHZlcnkgcGVyc29uYWwsIGFuZCBJIHdvbid0IF9mb3JjZV8gbXkKK3ZpZXdzIG9uIGFueWJvZHksIGJ1dCB0aGlzIGlzIHdoYXQgZ29lcyBmb3IgYW55dGhpbmcgdGhhdCBJIGhhdmUgdG8gYmUKK2FibGUgdG8gbWFpbnRhaW4sIGFuZCBJJ2QgcHJlZmVyIGl0IGZvciBtb3N0IG90aGVyIHRoaW5ncyB0b28uICBQbGVhc2UKK2F0IGxlYXN0IGNvbnNpZGVyIHRoZSBwb2ludHMgbWFkZSBoZXJlLgorCitGaXJzdCBvZmYsIEknZCBzdWdnZXN0IHByaW50aW5nIG91dCBhIGNvcHkgb2YgdGhlIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLAorYW5kIE5PVCByZWFkIGl0LiAgQnVybiB0aGVtLCBpdCdzIGEgZ3JlYXQgc3ltYm9saWMgZ2VzdHVyZS4KKworQW55d2F5LCBoZXJlIGdvZXM6CisKKworCSAJQ2hhcHRlciAxOiBJbmRlbnRhdGlvbgorCitUYWJzIGFyZSA4IGNoYXJhY3RlcnMsIGFuZCB0aHVzIGluZGVudGF0aW9ucyBhcmUgYWxzbyA4IGNoYXJhY3RlcnMuCitUaGVyZSBhcmUgaGVyZXRpYyBtb3ZlbWVudHMgdGhhdCB0cnkgdG8gbWFrZSBpbmRlbnRhdGlvbnMgNCAob3IgZXZlbiAyISkKK2NoYXJhY3RlcnMgZGVlcCwgYW5kIHRoYXQgaXMgYWtpbiB0byB0cnlpbmcgdG8gZGVmaW5lIHRoZSB2YWx1ZSBvZiBQSSB0bworYmUgMy4KKworUmF0aW9uYWxlOiBUaGUgd2hvbGUgaWRlYSBiZWhpbmQgaW5kZW50YXRpb24gaXMgdG8gY2xlYXJseSBkZWZpbmUgd2hlcmUKK2EgYmxvY2sgb2YgY29udHJvbCBzdGFydHMgYW5kIGVuZHMuICBFc3BlY2lhbGx5IHdoZW4geW91J3ZlIGJlZW4gbG9va2luZworYXQgeW91ciBzY3JlZW4gZm9yIDIwIHN0cmFpZ2h0IGhvdXJzLCB5b3UnbGwgZmluZCBpdCBhIGxvdCBlYXNpZXIgdG8gc2VlCitob3cgdGhlIGluZGVudGF0aW9uIHdvcmtzIGlmIHlvdSBoYXZlIGxhcmdlIGluZGVudGF0aW9ucy4KKworTm93LCBzb21lIHBlb3BsZSB3aWxsIGNsYWltIHRoYXQgaGF2aW5nIDgtY2hhcmFjdGVyIGluZGVudGF0aW9ucyBtYWtlcwordGhlIGNvZGUgbW92ZSB0b28gZmFyIHRvIHRoZSByaWdodCwgYW5kIG1ha2VzIGl0IGhhcmQgdG8gcmVhZCBvbiBhCis4MC1jaGFyYWN0ZXIgdGVybWluYWwgc2NyZWVuLiAgVGhlIGFuc3dlciB0byB0aGF0IGlzIHRoYXQgaWYgeW91IG5lZWQKK21vcmUgdGhhbiAzIGxldmVscyBvZiBpbmRlbnRhdGlvbiwgeW91J3JlIHNjcmV3ZWQgYW55d2F5LCBhbmQgc2hvdWxkIGZpeAoreW91ciBwcm9ncmFtLgorCitJbiBzaG9ydCwgOC1jaGFyIGluZGVudHMgbWFrZSB0aGluZ3MgZWFzaWVyIHRvIHJlYWQsIGFuZCBoYXZlIHRoZSBhZGRlZAorYmVuZWZpdCBvZiB3YXJuaW5nIHlvdSB3aGVuIHlvdSdyZSBuZXN0aW5nIHlvdXIgZnVuY3Rpb25zIHRvbyBkZWVwLgorSGVlZCB0aGF0IHdhcm5pbmcuCisKK0Rvbid0IHB1dCBtdWx0aXBsZSBzdGF0ZW1lbnRzIG9uIGEgc2luZ2xlIGxpbmUgdW5sZXNzIHlvdSBoYXZlCitzb21ldGhpbmcgdG8gaGlkZToKKworCWlmIChjb25kaXRpb24pIGRvX3RoaXM7CisJICBkb19zb21ldGhpbmdfZXZlcnl0aW1lOworCitPdXRzaWRlIG9mIGNvbW1lbnRzLCBkb2N1bWVudGF0aW9uIGFuZCBleGNlcHQgaW4gS2NvbmZpZywgc3BhY2VzIGFyZSBuZXZlcgordXNlZCBmb3IgaW5kZW50YXRpb24sIGFuZCB0aGUgYWJvdmUgZXhhbXBsZSBpcyBkZWxpYmVyYXRlbHkgYnJva2VuLgorCitHZXQgYSBkZWNlbnQgZWRpdG9yIGFuZCBkb24ndCBsZWF2ZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgbGluZXMuCisKKworCQlDaGFwdGVyIDI6IEJyZWFraW5nIGxvbmcgbGluZXMgYW5kIHN0cmluZ3MKKworQ29kaW5nIHN0eWxlIGlzIGFsbCBhYm91dCByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IHVzaW5nIGNvbW1vbmx5CithdmFpbGFibGUgdG9vbHMuCisKK1RoZSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIGxpbmVzIGlzIDgwIGNvbHVtbnMgYW5kIHRoaXMgaXMgYSBoYXJkIGxpbWl0LgorCitTdGF0ZW1lbnRzIGxvbmdlciB0aGFuIDgwIGNvbHVtbnMgd2lsbCBiZSBicm9rZW4gaW50byBzZW5zaWJsZSBjaHVua3MuCitEZXNjZW5kYW50cyBhcmUgYWx3YXlzIHN1YnN0YW50aWFsbHkgc2hvcnRlciB0aGFuIHRoZSBwYXJlbnQgYW5kIGFyZSBwbGFjZWQKK3N1YnN0YW50aWFsbHkgdG8gdGhlIHJpZ2h0LiBUaGUgc2FtZSBhcHBsaWVzIHRvIGZ1bmN0aW9uIGhlYWRlcnMgd2l0aCBhIGxvbmcKK2FyZ3VtZW50IGxpc3QuIExvbmcgc3RyaW5ncyBhcmUgYXMgd2VsbCBicm9rZW4gaW50byBzaG9ydGVyIHN0cmluZ3MuCisKK3ZvaWQgZnVuKGludCBhLCBpbnQgYiwgaW50IGMpCit7CisJaWYgKGNvbmRpdGlvbikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyB0aGlzIGlzIGEgbG9uZyBwcmludGsgd2l0aCAiCisJCQkJCQkiMyBwYXJhbWV0ZXJzIGE6ICV1IGI6ICV1ICIKKwkJCQkJCSJjOiAldSBcbiIsIGEsIGIsIGMpOworCWVsc2UKKwkJbmV4dF9zdGF0ZW1lbnQ7Cit9CisKKwkJQ2hhcHRlciAzOiBQbGFjaW5nIEJyYWNlcworCitUaGUgb3RoZXIgaXNzdWUgdGhhdCBhbHdheXMgY29tZXMgdXAgaW4gQyBzdHlsaW5nIGlzIHRoZSBwbGFjZW1lbnQgb2YKK2JyYWNlcy4gIFVubGlrZSB0aGUgaW5kZW50IHNpemUsIHRoZXJlIGFyZSBmZXcgdGVjaG5pY2FsIHJlYXNvbnMgdG8KK2Nob29zZSBvbmUgcGxhY2VtZW50IHN0cmF0ZWd5IG92ZXIgdGhlIG90aGVyLCBidXQgdGhlIHByZWZlcnJlZCB3YXksIGFzCitzaG93biB0byB1cyBieSB0aGUgcHJvcGhldHMgS2VybmlnaGFuIGFuZCBSaXRjaGllLCBpcyB0byBwdXQgdGhlIG9wZW5pbmcKK2JyYWNlIGxhc3Qgb24gdGhlIGxpbmUsIGFuZCBwdXQgdGhlIGNsb3NpbmcgYnJhY2UgZmlyc3QsIHRodXNseToKKworCWlmICh4IGlzIHRydWUpIHsKKwkJd2UgZG8geQorCX0KKworSG93ZXZlciwgdGhlcmUgaXMgb25lIHNwZWNpYWwgY2FzZSwgbmFtZWx5IGZ1bmN0aW9uczogdGhleSBoYXZlIHRoZQorb3BlbmluZyBicmFjZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUsIHRodXM6CisKKwlpbnQgZnVuY3Rpb24oaW50IHgpCisJeworCQlib2R5IG9mIGZ1bmN0aW9uCisJfQorCitIZXJldGljIHBlb3BsZSBhbGwgb3ZlciB0aGUgd29ybGQgaGF2ZSBjbGFpbWVkIHRoYXQgdGhpcyBpbmNvbnNpc3RlbmN5CitpcyAuLi4gIHdlbGwgLi4uICBpbmNvbnNpc3RlbnQsIGJ1dCBhbGwgcmlnaHQtdGhpbmtpbmcgcGVvcGxlIGtub3cgdGhhdAorKGEpIEsmUiBhcmUgX3JpZ2h0XyBhbmQgKGIpIEsmUiBhcmUgcmlnaHQuICBCZXNpZGVzLCBmdW5jdGlvbnMgYXJlCitzcGVjaWFsIGFueXdheSAoeW91IGNhbid0IG5lc3QgdGhlbSBpbiBDKS4KKworTm90ZSB0aGF0IHRoZSBjbG9zaW5nIGJyYWNlIGlzIGVtcHR5IG9uIGEgbGluZSBvZiBpdHMgb3duLCBfZXhjZXB0XyBpbgordGhlIGNhc2VzIHdoZXJlIGl0IGlzIGZvbGxvd2VkIGJ5IGEgY29udGludWF0aW9uIG9mIHRoZSBzYW1lIHN0YXRlbWVudCwKK2llIGEgIndoaWxlIiBpbiBhIGRvLXN0YXRlbWVudCBvciBhbiAiZWxzZSIgaW4gYW4gaWYtc3RhdGVtZW50LCBsaWtlCit0aGlzOgorCisJZG8geworCQlib2R5IG9mIGRvLWxvb3AKKwl9IHdoaWxlIChjb25kaXRpb24pOworCithbmQKKworCWlmICh4ID09IHkpIHsKKwkJLi4KKwl9IGVsc2UgaWYgKHggPiB5KSB7CisJCS4uLgorCX0gZWxzZSB7CisJCS4uLi4KKwl9CisKK1JhdGlvbmFsZTogSyZSLgorCitBbHNvLCBub3RlIHRoYXQgdGhpcyBicmFjZS1wbGFjZW1lbnQgYWxzbyBtaW5pbWl6ZXMgdGhlIG51bWJlciBvZiBlbXB0eQorKG9yIGFsbW9zdCBlbXB0eSkgbGluZXMsIHdpdGhvdXQgYW55IGxvc3Mgb2YgcmVhZGFiaWxpdHkuICBUaHVzLCBhcyB0aGUKK3N1cHBseSBvZiBuZXctbGluZXMgb24geW91ciBzY3JlZW4gaXMgbm90IGEgcmVuZXdhYmxlIHJlc291cmNlICh0aGluaworMjUtbGluZSB0ZXJtaW5hbCBzY3JlZW5zIGhlcmUpLCB5b3UgaGF2ZSBtb3JlIGVtcHR5IGxpbmVzIHRvIHB1dAorY29tbWVudHMgb24uCisKKworCQlDaGFwdGVyIDQ6IE5hbWluZworCitDIGlzIGEgU3BhcnRhbiBsYW5ndWFnZSwgYW5kIHNvIHNob3VsZCB5b3VyIG5hbWluZyBiZS4gIFVubGlrZSBNb2R1bGEtMgorYW5kIFBhc2NhbCBwcm9ncmFtbWVycywgQyBwcm9ncmFtbWVycyBkbyBub3QgdXNlIGN1dGUgbmFtZXMgbGlrZQorVGhpc1ZhcmlhYmxlSXNBVGVtcG9yYXJ5Q291bnRlci4gIEEgQyBwcm9ncmFtbWVyIHdvdWxkIGNhbGwgdGhhdAordmFyaWFibGUgInRtcCIsIHdoaWNoIGlzIG11Y2ggZWFzaWVyIHRvIHdyaXRlLCBhbmQgbm90IHRoZSBsZWFzdCBtb3JlCitkaWZmaWN1bHQgdG8gdW5kZXJzdGFuZC4KKworSE9XRVZFUiwgd2hpbGUgbWl4ZWQtY2FzZSBuYW1lcyBhcmUgZnJvd25lZCB1cG9uLCBkZXNjcmlwdGl2ZSBuYW1lcyBmb3IKK2dsb2JhbCB2YXJpYWJsZXMgYXJlIGEgbXVzdC4gIFRvIGNhbGwgYSBnbG9iYWwgZnVuY3Rpb24gImZvbyIgaXMgYQorc2hvb3Rpbmcgb2ZmZW5zZS4KKworR0xPQkFMIHZhcmlhYmxlcyAodG8gYmUgdXNlZCBvbmx5IGlmIHlvdSBfcmVhbGx5XyBuZWVkIHRoZW0pIG5lZWQgdG8KK2hhdmUgZGVzY3JpcHRpdmUgbmFtZXMsIGFzIGRvIGdsb2JhbCBmdW5jdGlvbnMuICBJZiB5b3UgaGF2ZSBhIGZ1bmN0aW9uCit0aGF0IGNvdW50cyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB1c2VycywgeW91IHNob3VsZCBjYWxsIHRoYXQKKyJjb3VudF9hY3RpdmVfdXNlcnMoKSIgb3Igc2ltaWxhciwgeW91IHNob3VsZCBfbm90XyBjYWxsIGl0ICJjbnR1c3IoKSIuCisKK0VuY29kaW5nIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gaW50byB0aGUgbmFtZSAoc28tY2FsbGVkIEh1bmdhcmlhbgorbm90YXRpb24pIGlzIGJyYWluIGRhbWFnZWQgLSB0aGUgY29tcGlsZXIga25vd3MgdGhlIHR5cGVzIGFueXdheSBhbmQgY2FuCitjaGVjayB0aG9zZSwgYW5kIGl0IG9ubHkgY29uZnVzZXMgdGhlIHByb2dyYW1tZXIuICBObyB3b25kZXIgTWljcm9Tb2Z0CittYWtlcyBidWdneSBwcm9ncmFtcy4KKworTE9DQUwgdmFyaWFibGUgbmFtZXMgc2hvdWxkIGJlIHNob3J0LCBhbmQgdG8gdGhlIHBvaW50LiAgSWYgeW91IGhhdmUKK3NvbWUgcmFuZG9tIGludGVnZXIgbG9vcCBjb3VudGVyLCBpdCBzaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkICJpIi4KK0NhbGxpbmcgaXQgImxvb3BfY291bnRlciIgaXMgbm9uLXByb2R1Y3RpdmUsIGlmIHRoZXJlIGlzIG5vIGNoYW5jZSBvZiBpdAorYmVpbmcgbWlzLXVuZGVyc3Rvb2QuICBTaW1pbGFybHksICJ0bXAiIGNhbiBiZSBqdXN0IGFib3V0IGFueSB0eXBlIG9mCit2YXJpYWJsZSB0aGF0IGlzIHVzZWQgdG8gaG9sZCBhIHRlbXBvcmFyeSB2YWx1ZS4KKworSWYgeW91IGFyZSBhZnJhaWQgdG8gbWl4IHVwIHlvdXIgbG9jYWwgdmFyaWFibGUgbmFtZXMsIHlvdSBoYXZlIGFub3RoZXIKK3Byb2JsZW0sIHdoaWNoIGlzIGNhbGxlZCB0aGUgZnVuY3Rpb24tZ3Jvd3RoLWhvcm1vbmUtaW1iYWxhbmNlIHN5bmRyb21lLgorU2VlIG5leHQgY2hhcHRlci4KKworCisJCUNoYXB0ZXIgNTogRnVuY3Rpb25zCisKK0Z1bmN0aW9ucyBzaG91bGQgYmUgc2hvcnQgYW5kIHN3ZWV0LCBhbmQgZG8ganVzdCBvbmUgdGhpbmcuICBUaGV5IHNob3VsZAorZml0IG9uIG9uZSBvciB0d28gc2NyZWVuZnVscyBvZiB0ZXh0ICh0aGUgSVNPL0FOU0kgc2NyZWVuIHNpemUgaXMgODB4MjQsCithcyB3ZSBhbGwga25vdyksIGFuZCBkbyBvbmUgdGhpbmcgYW5kIGRvIHRoYXQgd2VsbC4KKworVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgZnVuY3Rpb24gaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUKK2NvbXBsZXhpdHkgYW5kIGluZGVudGF0aW9uIGxldmVsIG9mIHRoYXQgZnVuY3Rpb24uICBTbywgaWYgeW91IGhhdmUgYQorY29uY2VwdHVhbGx5IHNpbXBsZSBmdW5jdGlvbiB0aGF0IGlzIGp1c3Qgb25lIGxvbmcgKGJ1dCBzaW1wbGUpCitjYXNlLXN0YXRlbWVudCwgd2hlcmUgeW91IGhhdmUgdG8gZG8gbG90cyBvZiBzbWFsbCB0aGluZ3MgZm9yIGEgbG90IG9mCitkaWZmZXJlbnQgY2FzZXMsIGl0J3MgT0sgdG8gaGF2ZSBhIGxvbmdlciBmdW5jdGlvbi4KKworSG93ZXZlciwgaWYgeW91IGhhdmUgYSBjb21wbGV4IGZ1bmN0aW9uLCBhbmQgeW91IHN1c3BlY3QgdGhhdCBhCitsZXNzLXRoYW4tZ2lmdGVkIGZpcnN0LXllYXIgaGlnaC1zY2hvb2wgc3R1ZGVudCBtaWdodCBub3QgZXZlbgordW5kZXJzdGFuZCB3aGF0IHRoZSBmdW5jdGlvbiBpcyBhbGwgYWJvdXQsIHlvdSBzaG91bGQgYWRoZXJlIHRvIHRoZQorbWF4aW11bSBsaW1pdHMgYWxsIHRoZSBtb3JlIGNsb3NlbHkuICBVc2UgaGVscGVyIGZ1bmN0aW9ucyB3aXRoCitkZXNjcmlwdGl2ZSBuYW1lcyAoeW91IGNhbiBhc2sgdGhlIGNvbXBpbGVyIHRvIGluLWxpbmUgdGhlbSBpZiB5b3UgdGhpbmsKK2l0J3MgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCBpdCB3aWxsIHByb2JhYmx5IGRvIGEgYmV0dGVyIGpvYiBvZiBpdAordGhhbiB5b3Ugd291bGQgaGF2ZSBkb25lKS4KKworQW5vdGhlciBtZWFzdXJlIG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIGxvY2FsIHZhcmlhYmxlcy4gIFRoZXkKK3Nob3VsZG4ndCBleGNlZWQgNS0xMCwgb3IgeW91J3JlIGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gIFJlLXRoaW5rIHRoZQorZnVuY3Rpb24sIGFuZCBzcGxpdCBpdCBpbnRvIHNtYWxsZXIgcGllY2VzLiAgQSBodW1hbiBicmFpbiBjYW4KK2dlbmVyYWxseSBlYXNpbHkga2VlcCB0cmFjayBvZiBhYm91dCA3IGRpZmZlcmVudCB0aGluZ3MsIGFueXRoaW5nIG1vcmUKK2FuZCBpdCBnZXRzIGNvbmZ1c2VkLiAgWW91IGtub3cgeW91J3JlIGJyaWxsaWFudCwgYnV0IG1heWJlIHlvdSdkIGxpa2UKK3RvIHVuZGVyc3RhbmQgd2hhdCB5b3UgZGlkIDIgd2Vla3MgZnJvbSBub3cuCisKKworCQlDaGFwdGVyIDY6IENlbnRyYWxpemVkIGV4aXRpbmcgb2YgZnVuY3Rpb25zCisKK0FsYmVpdCBkZXByZWNhdGVkIGJ5IHNvbWUgcGVvcGxlLCB0aGUgZXF1aXZhbGVudCBvZiB0aGUgZ290byBzdGF0ZW1lbnQgaXMKK3VzZWQgZnJlcXVlbnRseSBieSBjb21waWxlcnMgaW4gZm9ybSBvZiB0aGUgdW5jb25kaXRpb25hbCBqdW1wIGluc3RydWN0aW9uLgorCitUaGUgZ290byBzdGF0ZW1lbnQgY29tZXMgaW4gaGFuZHkgd2hlbiBhIGZ1bmN0aW9uIGV4aXRzIGZyb20gbXVsdGlwbGUKK2xvY2F0aW9ucyBhbmQgc29tZSBjb21tb24gd29yayBzdWNoIGFzIGNsZWFudXAgaGFzIHRvIGJlIGRvbmUuCisKK1RoZSByYXRpb25hbGUgaXM6CisKKy0gdW5jb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFyZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgZm9sbG93CistIG5lc3RpbmcgaXMgcmVkdWNlZAorLSBlcnJvcnMgYnkgbm90IHVwZGF0aW5nIGluZGl2aWR1YWwgZXhpdCBwb2ludHMgd2hlbiBtYWtpbmcKKyAgICBtb2RpZmljYXRpb25zIGFyZSBwcmV2ZW50ZWQKKy0gc2F2ZXMgdGhlIGNvbXBpbGVyIHdvcmsgdG8gb3B0aW1pemUgcmVkdW5kYW50IGNvZGUgYXdheSA7KQorCitpbnQgZnVuKGludCApCit7CisJaW50IHJlc3VsdCA9IDA7CisJY2hhciAqYnVmZmVyID0ga21hbGxvYyhTSVpFKTsKKworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29uZGl0aW9uMSkgeworCQl3aGlsZSAobG9vcDEpIHsKKwkJCS4uLgorCQl9CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gb3V0OworCX0KKwkuLi4KK291dDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKwkJQ2hhcHRlciA3OiBDb21tZW50aW5nCisKK0NvbW1lbnRzIGFyZSBnb29kLCBidXQgdGhlcmUgaXMgYWxzbyBhIGRhbmdlciBvZiBvdmVyLWNvbW1lbnRpbmcuICBORVZFUgordHJ5IHRvIGV4cGxhaW4gSE9XIHlvdXIgY29kZSB3b3JrcyBpbiBhIGNvbW1lbnQ6IGl0J3MgbXVjaCBiZXR0ZXIgdG8KK3dyaXRlIHRoZSBjb2RlIHNvIHRoYXQgdGhlIF93b3JraW5nXyBpcyBvYnZpb3VzLCBhbmQgaXQncyBhIHdhc3RlIG9mCit0aW1lIHRvIGV4cGxhaW4gYmFkbHkgd3JpdHRlbiBjb2RlLgorCitHZW5lcmFsbHksIHlvdSB3YW50IHlvdXIgY29tbWVudHMgdG8gdGVsbCBXSEFUIHlvdXIgY29kZSBkb2VzLCBub3QgSE9XLgorQWxzbywgdHJ5IHRvIGF2b2lkIHB1dHRpbmcgY29tbWVudHMgaW5zaWRlIGEgZnVuY3Rpb24gYm9keTogaWYgdGhlCitmdW5jdGlvbiBpcyBzbyBjb21wbGV4IHRoYXQgeW91IG5lZWQgdG8gc2VwYXJhdGVseSBjb21tZW50IHBhcnRzIG9mIGl0LAoreW91IHNob3VsZCBwcm9iYWJseSBnbyBiYWNrIHRvIGNoYXB0ZXIgNSBmb3IgYSB3aGlsZS4gIFlvdSBjYW4gbWFrZQorc21hbGwgY29tbWVudHMgdG8gbm90ZSBvciB3YXJuIGFib3V0IHNvbWV0aGluZyBwYXJ0aWN1bGFybHkgY2xldmVyIChvcgordWdseSksIGJ1dCB0cnkgdG8gYXZvaWQgZXhjZXNzLiAgSW5zdGVhZCwgcHV0IHRoZSBjb21tZW50cyBhdCB0aGUgaGVhZAorb2YgdGhlIGZ1bmN0aW9uLCB0ZWxsaW5nIHBlb3BsZSB3aGF0IGl0IGRvZXMsIGFuZCBwb3NzaWJseSBXSFkgaXQgZG9lcworaXQuCisKKworCQlDaGFwdGVyIDg6IFlvdSd2ZSBtYWRlIGEgbWVzcyBvZiBpdAorCitUaGF0J3MgT0ssIHdlIGFsbCBkby4gIFlvdSd2ZSBwcm9iYWJseSBiZWVuIHRvbGQgYnkgeW91ciBsb25nLXRpbWUgVW5peAordXNlciBoZWxwZXIgdGhhdCAiR05VIGVtYWNzIiBhdXRvbWF0aWNhbGx5IGZvcm1hdHMgdGhlIEMgc291cmNlcyBmb3IKK3lvdSwgYW5kIHlvdSd2ZSBub3RpY2VkIHRoYXQgeWVzLCBpdCBkb2VzIGRvIHRoYXQsIGJ1dCB0aGUgZGVmYXVsdHMgaXQKK3VzZXMgYXJlIGxlc3MgdGhhbiBkZXNpcmFibGUgKGluIGZhY3QsIHRoZXkgYXJlIHdvcnNlIHRoYW4gcmFuZG9tCit0eXBpbmcgLSBhbiBpbmZpbml0ZSBudW1iZXIgb2YgbW9ua2V5cyB0eXBpbmcgaW50byBHTlUgZW1hY3Mgd291bGQgbmV2ZXIKK21ha2UgYSBnb29kIHByb2dyYW0pLgorCitTbywgeW91IGNhbiBlaXRoZXIgZ2V0IHJpZCBvZiBHTlUgZW1hY3MsIG9yIGNoYW5nZSBpdCB0byB1c2Ugc2FuZXIKK3ZhbHVlcy4gIFRvIGRvIHRoZSBsYXR0ZXIsIHlvdSBjYW4gc3RpY2sgdGhlIGZvbGxvd2luZyBpbiB5b3VyIC5lbWFjcyBmaWxlOgorCisoZGVmdW4gbGludXgtYy1tb2RlICgpCisgICJDIG1vZGUgd2l0aCBhZGp1c3RlZCBkZWZhdWx0cyBmb3IgdXNlIHdpdGggdGhlIExpbnV4IGtlcm5lbC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGMtbW9kZSkKKyAgKGMtc2V0LXN0eWxlICJLJlIiKQorICAoc2V0cSB0YWItd2lkdGggOCkKKyAgKHNldHEgaW5kZW50LXRhYnMtbW9kZSB0KQorICAoc2V0cSBjLWJhc2ljLW9mZnNldCA4KSkKKworVGhpcyB3aWxsIGRlZmluZSB0aGUgTS14IGxpbnV4LWMtbW9kZSBjb21tYW5kLiAgV2hlbiBoYWNraW5nIG9uIGEKK21vZHVsZSwgaWYgeW91IHB1dCB0aGUgc3RyaW5nIC0qLSBsaW51eC1jIC0qLSBzb21ld2hlcmUgb24gdGhlIGZpcnN0Cit0d28gbGluZXMsIHRoaXMgbW9kZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW52b2tlZC4gQWxzbywgeW91IG1heSB3YW50Cit0byBhZGQKKworKHNldHEgYXV0by1tb2RlLWFsaXN0IChjb25zICcoIi91c3Ivc3JjL2xpbnV4LiovLipcXC5bY2hdJCIgLiBsaW51eC1jLW1vZGUpCisJCQlhdXRvLW1vZGUtYWxpc3QpKQorCit0byB5b3VyIC5lbWFjcyBmaWxlIGlmIHlvdSB3YW50IHRvIGhhdmUgbGludXgtYy1tb2RlIHN3aXRjaGVkIG9uCithdXRvbWFnaWNhbGx5IHdoZW4geW91IGVkaXQgc291cmNlIGZpbGVzIHVuZGVyIC91c3Ivc3JjL2xpbnV4LgorCitCdXQgZXZlbiBpZiB5b3UgZmFpbCBpbiBnZXR0aW5nIGVtYWNzIHRvIGRvIHNhbmUgZm9ybWF0dGluZywgbm90CitldmVyeXRoaW5nIGlzIGxvc3Q6IHVzZSAiaW5kZW50Ii4KKworTm93LCBhZ2FpbiwgR05VIGluZGVudCBoYXMgdGhlIHNhbWUgYnJhaW4tZGVhZCBzZXR0aW5ncyB0aGF0IEdOVSBlbWFjcworaGFzLCB3aGljaCBpcyB3aHkgeW91IG5lZWQgdG8gZ2l2ZSBpdCBhIGZldyBjb21tYW5kIGxpbmUgb3B0aW9ucy4KK0hvd2V2ZXIsIHRoYXQncyBub3QgdG9vIGJhZCwgYmVjYXVzZSBldmVuIHRoZSBtYWtlcnMgb2YgR05VIGluZGVudAorcmVjb2duaXplIHRoZSBhdXRob3JpdHkgb2YgSyZSICh0aGUgR05VIHBlb3BsZSBhcmVuJ3QgZXZpbCwgdGhleSBhcmUKK2p1c3Qgc2V2ZXJlbHkgbWlzZ3VpZGVkIGluIHRoaXMgbWF0dGVyKSwgc28geW91IGp1c3QgZ2l2ZSBpbmRlbnQgdGhlCitvcHRpb25zICIta3IgLWk4IiAoc3RhbmRzIGZvciAiSyZSLCA4IGNoYXJhY3RlciBpbmRlbnRzIiksIG9yIHVzZQorInNjcmlwdHMvTGluZGVudCIsIHdoaWNoIGluZGVudHMgaW4gdGhlIGxhdGVzdCBzdHlsZS4KKworImluZGVudCIgaGFzIGEgbG90IG9mIG9wdGlvbnMsIGFuZCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gY29tbWVudAorcmUtZm9ybWF0dGluZyB5b3UgbWF5IHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG1hbiBwYWdlLiAgQnV0CityZW1lbWJlcjogImluZGVudCIgaXMgbm90IGEgZml4IGZvciBiYWQgcHJvZ3JhbW1pbmcuCisKKworCQlDaGFwdGVyIDk6IENvbmZpZ3VyYXRpb24tZmlsZXMKKworRm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYXJjaC94eHgvS2NvbmZpZywgYW5kIGFsbCB0aGUgS2NvbmZpZyBmaWxlcyksCitzb21ld2hhdCBkaWZmZXJlbnQgaW5kZW50YXRpb24gaXMgdXNlZC4KKworSGVscCB0ZXh0IGlzIGluZGVudGVkIHdpdGggMiBzcGFjZXMuCisKK2lmIENPTkZJR19FWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSBDT05GSUdfQk9PTQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIEFwcGx5IG5pdHJvZ2x5Y2VyaW5lIGluc2lkZSB0aGUga2V5Ym9hcmQgKERBTkdFUk9VUykKKwlib29sIENPTkZJR19DSEVFUgorCWRlcGVuZHMgb24gQ09ORklHX0JPT00KKwlkZWZhdWx0IHkKKwloZWxwCisJICBPdXRwdXQgbmljZSBtZXNzYWdlcyB3aGVuIHlvdSBleHBsb2RlCitlbmRpZgorCitHZW5lcmFsbHksIENPTkZJR19FWFBFUklNRU5UQUwgc2hvdWxkIHN1cnJvdW5kIGFsbCBvcHRpb25zIG5vdCBjb25zaWRlcmVkCitzdGFibGUuIEFsbCBvcHRpb25zIHRoYXQgYXJlIGtub3duIHRvIHRyYXNoIGRhdGEgKGV4cGVyaW1lbnRhbCB3cml0ZS0KK3N1cHBvcnQgZm9yIGZpbGUtc3lzdGVtcywgZm9yIGluc3RhbmNlKSBzaG91bGQgYmUgZGVub3RlZCAoREFOR0VST1VTKSwgb3RoZXIKK2V4cGVyaW1lbnRhbCBvcHRpb25zIHNob3VsZCBiZSBkZW5vdGVkIChFWFBFUklNRU5UQUwpLgorCisKKwkJQ2hhcHRlciAxMDogRGF0YSBzdHJ1Y3R1cmVzCisKK0RhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgdmlzaWJpbGl0eSBvdXRzaWRlIHRoZSBzaW5nbGUtdGhyZWFkZWQKK2Vudmlyb25tZW50IHRoZXkgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBpbiBzaG91bGQgYWx3YXlzIGhhdmUKK3JlZmVyZW5jZSBjb3VudHMuICBJbiB0aGUga2VybmVsLCBnYXJiYWdlIGNvbGxlY3Rpb24gZG9lc24ndCBleGlzdCAoYW5kCitvdXRzaWRlIHRoZSBrZXJuZWwgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIHNsb3cgYW5kIGluZWZmaWNpZW50KSwgd2hpY2gKK21lYW5zIHRoYXQgeW91IGFic29sdXRlbHkgX2hhdmVfIHRvIHJlZmVyZW5jZSBjb3VudCBhbGwgeW91ciB1c2VzLgorCitSZWZlcmVuY2UgY291bnRpbmcgbWVhbnMgdGhhdCB5b3UgY2FuIGF2b2lkIGxvY2tpbmcsIGFuZCBhbGxvd3MgbXVsdGlwbGUKK3VzZXJzIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiBwYXJhbGxlbCAtIGFuZCBub3QgaGF2aW5nCit0byB3b3JyeSBhYm91dCB0aGUgc3RydWN0dXJlIHN1ZGRlbmx5IGdvaW5nIGF3YXkgZnJvbSB1bmRlciB0aGVtIGp1c3QKK2JlY2F1c2UgdGhleSBzbGVwdCBvciBkaWQgc29tZXRoaW5nIGVsc2UgZm9yIGEgd2hpbGUuCisKK05vdGUgdGhhdCBsb2NraW5nIGlzIF9ub3RfIGEgcmVwbGFjZW1lbnQgZm9yIHJlZmVyZW5jZSBjb3VudGluZy4KK0xvY2tpbmcgaXMgdXNlZCB0byBrZWVwIGRhdGEgc3RydWN0dXJlcyBjb2hlcmVudCwgd2hpbGUgcmVmZXJlbmNlCitjb3VudGluZyBpcyBhIG1lbW9yeSBtYW5hZ2VtZW50IHRlY2huaXF1ZS4gIFVzdWFsbHkgYm90aCBhcmUgbmVlZGVkLCBhbmQKK3RoZXkgYXJlIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGVhY2ggb3RoZXIuCisKK01hbnkgZGF0YSBzdHJ1Y3R1cmVzIGNhbiBpbmRlZWQgaGF2ZSB0d28gbGV2ZWxzIG9mIHJlZmVyZW5jZSBjb3VudGluZywKK3doZW4gdGhlcmUgYXJlIHVzZXJzIG9mIGRpZmZlcmVudCAiY2xhc3NlcyIuICBUaGUgc3ViY2xhc3MgY291bnQgY291bnRzCit0aGUgbnVtYmVyIG9mIHN1YmNsYXNzIHVzZXJzLCBhbmQgZGVjcmVtZW50cyB0aGUgZ2xvYmFsIGNvdW50IGp1c3Qgb25jZQord2hlbiB0aGUgc3ViY2xhc3MgY291bnQgZ29lcyB0byB6ZXJvLgorCitFeGFtcGxlcyBvZiB0aGlzIGtpbmQgb2YgIm11bHRpLWxldmVsLXJlZmVyZW5jZS1jb3VudGluZyIgY2FuIGJlIGZvdW5kIGluCittZW1vcnkgbWFuYWdlbWVudCAoInN0cnVjdCBtbV9zdHJ1Y3QiOiBtbV91c2VycyBhbmQgbW1fY291bnQpLCBhbmQgaW4KK2ZpbGVzeXN0ZW0gY29kZSAoInN0cnVjdCBzdXBlcl9ibG9jayI6IHNfY291bnQgYW5kIHNfYWN0aXZlKS4KKworUmVtZW1iZXI6IGlmIGFub3RoZXIgdGhyZWFkIGNhbiBmaW5kIHlvdXIgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB5b3UgZG9uJ3QKK2hhdmUgYSByZWZlcmVuY2UgY291bnQgb24gaXQsIHlvdSBhbG1vc3QgY2VydGFpbmx5IGhhdmUgYSBidWcuCisKKworCQlDaGFwdGVyIDExOiBNYWNyb3MsIEVudW1zLCBJbmxpbmUgZnVuY3Rpb25zIGFuZCBSVEwKKworTmFtZXMgb2YgbWFjcm9zIGRlZmluaW5nIGNvbnN0YW50cyBhbmQgbGFiZWxzIGluIGVudW1zIGFyZSBjYXBpdGFsaXplZC4KKworI2RlZmluZSBDT05TVEFOVCAweDEyMzQ1CisKK0VudW1zIGFyZSBwcmVmZXJyZWQgd2hlbiBkZWZpbmluZyBzZXZlcmFsIHJlbGF0ZWQgY29uc3RhbnRzLgorCitDQVBJVEFMSVpFRCBtYWNybyBuYW1lcyBhcmUgYXBwcmVjaWF0ZWQgYnV0IG1hY3JvcyByZXNlbWJsaW5nIGZ1bmN0aW9ucworbWF5IGJlIG5hbWVkIGluIGxvd2VyIGNhc2UuCisKK0dlbmVyYWxseSwgaW5saW5lIGZ1bmN0aW9ucyBhcmUgcHJlZmVyYWJsZSB0byBtYWNyb3MgcmVzZW1ibGluZyBmdW5jdGlvbnMuCisKK01hY3JvcyB3aXRoIG11bHRpcGxlIHN0YXRlbWVudHMgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGEgZG8gLSB3aGlsZSBibG9jazoKKworI2RlZmluZSBtYWNyb2Z1bihhLCBiLCBjKSAJCQlcCisJZG8gewkJCQkJXAorCQlpZiAoYSA9PSA1KQkJCVwKKwkJCWRvX3RoaXMoYiwgYyk7CQlcCisJfSB3aGlsZSAoMCkKKworVGhpbmdzIHRvIGF2b2lkIHdoZW4gdXNpbmcgbWFjcm9zOgorCisxKSBtYWNyb3MgdGhhdCBhZmZlY3QgY29udHJvbCBmbG93OgorCisjZGVmaW5lIEZPTyh4KQkJCQkJXAorCWRvIHsJCQkJCVwKKwkJaWYgKGJsYWgoeCkgPCAwKQkJXAorCQkJcmV0dXJuIC1FQlVHR0VSRUQ7CVwKKwl9IHdoaWxlKDApCisKK2lzIGEgX3ZlcnlfIGJhZCBpZGVhLiAgSXQgbG9va3MgbGlrZSBhIGZ1bmN0aW9uIGNhbGwgYnV0IGV4aXRzIHRoZSAiY2FsbGluZyIKK2Z1bmN0aW9uOyBkb24ndCBicmVhayB0aGUgaW50ZXJuYWwgcGFyc2VycyBvZiB0aG9zZSB3aG8gd2lsbCByZWFkIHRoZSBjb2RlLgorCisyKSBtYWNyb3MgdGhhdCBkZXBlbmQgb24gaGF2aW5nIGEgbG9jYWwgdmFyaWFibGUgd2l0aCBhIG1hZ2ljIG5hbWU6CisKKyNkZWZpbmUgRk9PKHZhbCkgYmFyKGluZGV4LCB2YWwpCisKK21pZ2h0IGxvb2sgbGlrZSBhIGdvb2QgdGhpbmcsIGJ1dCBpdCdzIGNvbmZ1c2luZyBhcyBoZWxsIHdoZW4gb25lIHJlYWRzIHRoZQorY29kZSBhbmQgaXQncyBwcm9uZSB0byBicmVha2FnZSBmcm9tIHNlZW1pbmdseSBpbm5vY2VudCBjaGFuZ2VzLgorCiszKSBtYWNyb3Mgd2l0aCBhcmd1bWVudHMgdGhhdCBhcmUgdXNlZCBhcyBsLXZhbHVlczogRk9PKHgpID0geTsgd2lsbAorYml0ZSB5b3UgaWYgc29tZWJvZHkgZS5nLiB0dXJucyBGT08gaW50byBhbiBpbmxpbmUgZnVuY3Rpb24uCisKKzQpIGZvcmdldHRpbmcgYWJvdXQgcHJlY2VkZW5jZTogbWFjcm9zIGRlZmluaW5nIGNvbnN0YW50cyB1c2luZyBleHByZXNzaW9ucworbXVzdCBlbmNsb3NlIHRoZSBleHByZXNzaW9uIGluIHBhcmVudGhlc2VzLiBCZXdhcmUgb2Ygc2ltaWxhciBpc3N1ZXMgd2l0aAorbWFjcm9zIHVzaW5nIHBhcmFtZXRlcnMuCisKKyNkZWZpbmUgQ09OU1RBTlQgMHg0MDAwCisjZGVmaW5lIENPTlNURVhQIChDT05TVEFOVCB8IDMpCisKK1RoZSBjcHAgbWFudWFsIGRlYWxzIHdpdGggbWFjcm9zIGV4aGF1c3RpdmVseS4gVGhlIGdjYyBpbnRlcm5hbHMgbWFudWFsIGFsc28KK2NvdmVycyBSVEwgd2hpY2ggaXMgdXNlZCBmcmVxdWVudGx5IHdpdGggYXNzZW1ibHkgbGFuZ3VhZ2UgaW4gdGhlIGtlcm5lbC4KKworCisJCUNoYXB0ZXIgMTI6IFByaW50aW5nIGtlcm5lbCBtZXNzYWdlcworCitLZXJuZWwgZGV2ZWxvcGVycyBsaWtlIHRvIGJlIHNlZW4gYXMgbGl0ZXJhdGUuIERvIG1pbmQgdGhlIHNwZWxsaW5nCitvZiBrZXJuZWwgbWVzc2FnZXMgdG8gbWFrZSBhIGdvb2QgaW1wcmVzc2lvbi4gRG8gbm90IHVzZSBjcmlwcGxlZAord29yZHMgbGlrZSAiZG9udCIgYW5kIHVzZSAiZG8gbm90IiBvciAiZG9uJ3QiIGluc3RlYWQuCisKK0tlcm5lbCBtZXNzYWdlcyBkbyBub3QgaGF2ZSB0byBiZSB0ZXJtaW5hdGVkIHdpdGggYSBwZXJpb2QuCisKK1ByaW50aW5nIG51bWJlcnMgaW4gcGFyZW50aGVzZXMgKCVkKSBhZGRzIG5vIHZhbHVlIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4KKworCisJCUNoYXB0ZXIgMTM6IFJlZmVyZW5jZXMKKworVGhlIEMgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UsIFNlY29uZCBFZGl0aW9uCitieSBCcmlhbiBXLiBLZXJuaWdoYW4gYW5kIERlbm5pcyBNLiBSaXRjaGllLgorUHJlbnRpY2UgSGFsbCwgSW5jLiwgMTk4OC4KK0lTQk4gMC0xMy0xMTAzNjItOCAocGFwZXJiYWNrKSwgMC0xMy0xMTAzNzAtOSAoaGFyZGJhY2spLgorVVJMOiBodHRwOi8vY20uYmVsbC1sYWJzLmNvbS9jbS9jcy9jYm9vay8KKworVGhlIFByYWN0aWNlIG9mIFByb2dyYW1taW5nCitieSBCcmlhbiBXLiBLZXJuaWdoYW4gYW5kIFJvYiBQaWtlLgorQWRkaXNvbi1XZXNsZXksIEluYy4sIDE5OTkuCitJU0JOIDAtMjAxLTYxNTg2LVguCitVUkw6IGh0dHA6Ly9jbS5iZWxsLWxhYnMuY29tL2NtL2NzL3Rwb3AvCisKK0dOVSBtYW51YWxzIC0gd2hlcmUgaW4gY29tcGxpYW5jZSB3aXRoIEsmUiBhbmQgdGhpcyB0ZXh0IC0gZm9yIGNwcCwgZ2NjLAorZ2NjIGludGVybmFscyBhbmQgaW5kZW50LCBhbGwgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5nbnUub3JnCisKK1dHMTQgaXMgdGhlIGludGVybmF0aW9uYWwgc3RhbmRhcmRpemF0aW9uIHdvcmtpbmcgZ3JvdXAgZm9yIHRoZSBwcm9ncmFtbWluZworbGFuZ3VhZ2UgQywgVVJMOiBodHRwOi8vc3RkLmRrdXVnLmRrL0pUQzEvU0MyMi9XRzE0LworCistLQorTGFzdCB1cGRhdGVkIG9uIDE2IEZlYnJ1YXJ5IDIwMDQgYnkgYSBjb21tdW5pdHkgZWZmb3J0IG9uIExLTUwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWUzY2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dApAQCAtMCwwICsxLDUyNiBAQAorICAgICAgICAgICAgICAgRHluYW1pYyBETUEgbWFwcGluZyB1c2luZyB0aGUgZ2VuZXJpYyBkZXZpY2UKKyAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgSmFtZXMgRS5KLiBCb3R0b21sZXkgPEphbWVzLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20+CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBETUEgQVBJLiAgRm9yIGEgbW9yZSBnZW50bGUgaW50cm9kdWN0aW9uCitwaHJhc2VkIGluIHRlcm1zIG9mIHRoZSBwY2lfIGVxdWl2YWxlbnRzIChhbmQgYWN0dWFsIGV4YW1wbGVzKSBzZWUKK0RNQS1tYXBwaW5nLnR4dAorCitUaGlzIEFQSSBpcyBzcGxpdCBpbnRvIHR3byBwaWVjZXMuICBQYXJ0IEkgZGVzY3JpYmVzIHRoZSBBUEkgYW5kIHRoZQorY29ycmVzcG9uZGluZyBwY2lfIEFQSS4gIFBhcnQgSUkgZGVzY3JpYmVzIHRoZSBleHRlbnNpb25zIHRvIHRoZSBBUEkKK2ZvciBzdXBwb3J0aW5nIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4gIFVubGVzcyB5b3Uga25vdyB0aGF0Cit5b3VyIGRyaXZlciBhYnNvbHV0ZWx5IGhhcyB0byBzdXBwb3J0IG5vbi1jb25zaXN0ZW50IHBsYXRmb3JtcyAodGhpcworaXMgdXN1YWxseSBvbmx5IGxlZ2FjeSBwbGF0Zm9ybXMpIHlvdSBzaG91bGQgb25seSB1c2UgdGhlIEFQSQorZGVzY3JpYmVkIGluIHBhcnQgSS4KKworUGFydCBJIC0gcGNpXyBhbmQgZG1hXyBFcXVpdmFsZW50IEFQSSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gZ2V0IHRoZSBwY2lfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorVG8gZ2V0IHRoZSBkbWFfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKworUGFydCBJYSAtIFVzaW5nIGxhcmdlIGRtYS1jb2hlcmVudCBidWZmZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCAqCitkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGZsYWcpCit2b2lkICoKK3BjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKQorCitDb25zaXN0ZW50IG1lbW9yeSBpcyBtZW1vcnkgZm9yIHdoaWNoIGEgd3JpdGUgYnkgZWl0aGVyIHRoZSBkZXZpY2Ugb3IKK3RoZSBwcm9jZXNzb3IgY2FuIGltbWVkaWF0ZWx5IGJlIHJlYWQgYnkgdGhlIHByb2Nlc3NvciBvciBkZXZpY2UKK3dpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGNhY2hpbmcgZWZmZWN0cy4KKworVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBhIHJlZ2lvbiBvZiA8c2l6ZT4gYnl0ZXMgb2YgY29uc2lzdGVudCBtZW1vcnkuCitpdCBhbHNvIHJldHVybnMgYSA8ZG1hX2hhbmRsZT4gd2hpY2ggbWF5IGJlIGNhc3QgdG8gYW4gdW5zaWduZWQKK2ludGVnZXIgdGhlIHNhbWUgd2lkdGggYXMgdGhlIGJ1cyBhbmQgdXNlZCBhcyB0aGUgcGh5c2ljYWwgYWRkcmVzcworYmFzZSBvZiB0aGUgcmVnaW9uLgorCitSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCByZWdpb24gKGluIHRoZSBwcm9jZXNzb3IncyB2aXJ0dWFsCithZGRyZXNzIHNwYWNlKSBvciBOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KKworTm90ZTogY29uc2lzdGVudCBtZW1vcnkgY2FuIGJlIGV4cGVuc2l2ZSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIHRoZQorbWluaW11bSBhbGxvY2F0aW9uIGxlbmd0aCBtYXkgYmUgYXMgYmlnIGFzIGEgcGFnZSwgc28geW91IHNob3VsZAorY29uc29saWRhdGUgeW91ciByZXF1ZXN0cyBmb3IgY29uc2lzdGVudCBtZW1vcnkgYXMgbXVjaCBhcyBwb3NzaWJsZS4KK1RoZSBzaW1wbGVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byB1c2UgdGhlIGRtYV9wb29sIGNhbGxzIChzZWUgYmVsb3cpLgorCitUaGUgZmxhZyBwYXJhbWV0ZXIgKGRtYV9hbGxvY19jb2hlcmVudCBvbmx5KSBhbGxvd3MgdGhlIGNhbGxlciB0bworc3BlY2lmeSB0aGUgR0ZQXyBmbGFncyAoc2VlIGttYWxsb2MpIGZvciB0aGUgYWxsb2NhdGlvbiAodGhlCitpbXBsZW1lbnRhdGlvbiBtYXkgY2hvc2UgdG8gaWdub3JlIGZsYWdzIHRoYXQgYWZmZWN0IHRoZSBsb2NhdGlvbiBvZgordGhlIHJldHVybmVkIG1lbW9yeSwgbGlrZSBHRlBfRE1BKS4gIEZvciBwY2lfYWxsb2NfY29uc2lzdGVudCwgeW91CittdXN0IGFzc3VtZSBHRlBfQVRPTUlDIGJlaGF2aW91ci4KKwordm9pZAorZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIKKwkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3ZvaWQKK3BjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyCisJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCisKK0ZyZWUgdGhlIHJlZ2lvbiBvZiBjb25zaXN0ZW50IG1lbW9yeSB5b3UgcHJldmlvdXNseSBhbGxvY2F0ZWQuICBkZXYsCitzaXplIGFuZCBkbWFfaGFuZGxlIG11c3QgYWxsIGJlIHRoZSBzYW1lIGFzIHRob3NlIHBhc3NlZCBpbnRvIHRoZQorY29uc2lzdGVudCBhbGxvY2F0ZS4gIGNwdV9hZGRyIG11c3QgYmUgdGhlIHZpcnR1YWwgYWRkcmVzcyByZXR1cm5lZCBieQordGhlIGNvbnNpc3RlbnQgYWxsb2NhdGUKKworCitQYXJ0IEliIC0gVXNpbmcgc21hbGwgZG1hLWNvaGVyZW50IGJ1ZmZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgdGhpcyBwYXJ0IG9mIHRoZSBkbWFfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworTWFueSBkcml2ZXJzIG5lZWQgbG90cyBvZiBzbWFsbCBkbWEtY29oZXJlbnQgbWVtb3J5IHJlZ2lvbnMgZm9yIERNQQorZGVzY3JpcHRvcnMgb3IgSS9PIGJ1ZmZlcnMuICBSYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGluIHVuaXRzIG9mIGEgcGFnZQorb3IgbW9yZSB1c2luZyBkbWFfYWxsb2NfY29oZXJlbnQoKSwgeW91IGNhbiB1c2UgRE1BIHBvb2xzLiAgVGhlc2Ugd29yaworbXVjaCBsaWtlIGEga21lbV9jYWNoZV90LCBleGNlcHQgdGhhdCB0aGV5IHVzZSB0aGUgZG1hLWNvaGVyZW50IGFsbG9jYXRvcgorbm90IF9fZ2V0X2ZyZWVfcGFnZXMoKS4gIEFsc28sIHRoZXkgdW5kZXJzdGFuZCBjb21tb24gaGFyZHdhcmUgY29uc3RyYWludHMKK2ZvciBhbGlnbm1lbnQsIGxpa2UgcXVldWUgaGVhZHMgbmVlZGluZyB0byBiZSBhbGlnbmVkIG9uIE4gYnl0ZSBib3VuZGFyaWVzLgorCisKKwlzdHJ1Y3QgZG1hX3Bvb2wgKgorCWRtYV9wb29sX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXplX3QgYWxsb2MpOworCisJc3RydWN0IHBjaV9wb29sICoKKwlwY2lfcG9vbF9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHBjaV9kZXZpY2UgKmRldiwKKwkJCXNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIHNpemVfdCBhbGxvYyk7CisKK1RoZSBwb29sIGNyZWF0ZSgpIHJvdXRpbmVzIGluaXRpYWxpemUgYSBwb29sIG9mIGRtYS1jb2hlcmVudCBidWZmZXJzCitmb3IgdXNlIHdpdGggYSBnaXZlbiBkZXZpY2UuICBJdCBtdXN0IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hpY2gKK2NhbiBzbGVlcC4KKworVGhlICJuYW1lIiBpcyBmb3IgZGlhZ25vc3RpY3MgKGxpa2UgYSBrbWVtX2NhY2hlX3QgbmFtZSk7IGRldiBhbmQgc2l6ZQorYXJlIGxpa2Ugd2hhdCB5b3UnZCBwYXNzIHRvIGRtYV9hbGxvY19jb2hlcmVudCgpLiAgVGhlIGRldmljZSdzIGhhcmR3YXJlCithbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIHRoaXMgdHlwZSBvZiBkYXRhIGlzICJhbGlnbiIgKHdoaWNoIGlzIGV4cHJlc3NlZAoraW4gYnl0ZXMsIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvKS4gIElmIHlvdXIgZGV2aWNlIGhhcyBubyBib3VuZGFyeQorY3Jvc3NpbmcgcmVzdHJpY3Rpb25zLCBwYXNzIDAgZm9yIGFsbG9jOyBwYXNzaW5nIDQwOTYgc2F5cyBtZW1vcnkgYWxsb2NhdGVkCitmcm9tIHRoaXMgcG9vbCBtdXN0IG5vdCBjcm9zcyA0S0J5dGUgYm91bmRhcmllcy4KKworCisJdm9pZCAqZG1hX3Bvb2xfYWxsb2Moc3RydWN0IGRtYV9wb29sICpwb29sLCBpbnQgZ2ZwX2ZsYWdzLAorCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CisKKwl2b2lkICpwY2lfcG9vbF9hbGxvYyhzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2wsIGludCBnZnBfZmxhZ3MsCisJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKKworVGhpcyBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIHBvb2w7IHRoZSByZXR1cm5lZCBtZW1vcnkgd2lsbCBtZWV0IHRoZSBzaXplCithbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYXQgY3JlYXRpb24gdGltZS4gIFBhc3MgR0ZQX0FUT01JQyB0bworcHJldmVudCBibG9ja2luZywgb3IgaWYgaXQncyBwZXJtaXR0ZWQgKG5vdCBpbl9pbnRlcnJ1cHQsIG5vdCBob2xkaW5nIFNNUCBsb2NrcykKK3Bhc3MgR0ZQX0tFUk5FTCB0byBhbGxvdyBibG9ja2luZy4gIExpa2UgZG1hX2FsbG9jX2NvaGVyZW50KCksIHRoaXMgcmV0dXJucwordHdvIHZhbHVlczogIGFuIGFkZHJlc3MgdXNhYmxlIGJ5IHRoZSBjcHUsIGFuZCB0aGUgZG1hIGFkZHJlc3MgdXNhYmxlIGJ5IHRoZQorcG9vbCdzIGRldmljZS4KKworCisJdm9pZCBkbWFfcG9vbF9mcmVlKHN0cnVjdCBkbWFfcG9vbCAqcG9vbCwgdm9pZCAqdmFkZHIsCisJCQlkbWFfYWRkcl90IGFkZHIpOworCisJdm9pZCBwY2lfcG9vbF9mcmVlKHN0cnVjdCBwY2lfcG9vbCAqcG9vbCwgdm9pZCAqdmFkZHIsCisJCQlkbWFfYWRkcl90IGFkZHIpOworCitUaGlzIHB1dHMgbWVtb3J5IGJhY2sgaW50byB0aGUgcG9vbC4gIFRoZSBwb29sIGlzIHdoYXQgd2FzIHBhc3NlZCB0bwordGhlIHRoZSBwb29sIGFsbG9jYXRpb24gcm91dGluZTsgdGhlIGNwdSBhbmQgZG1hIGFkZHJlc3NlcyBhcmUgd2hhdAord2VyZSByZXR1cm5lZCB3aGVuIHRoYXQgcm91dGluZSBhbGxvY2F0ZWQgdGhlIG1lbW9yeSBiZWluZyBmcmVlZC4KKworCisJdm9pZCBkbWFfcG9vbF9kZXN0cm95KHN0cnVjdCBkbWFfcG9vbCAqcG9vbCk7CisKKwl2b2lkIHBjaV9wb29sX2Rlc3Ryb3koc3RydWN0IHBjaV9wb29sICpwb29sKTsKKworVGhlIHBvb2wgZGVzdHJveSgpIHJvdXRpbmVzIGZyZWUgdGhlIHJlc291cmNlcyBvZiB0aGUgcG9vbC4gIFRoZXkgbXVzdCBiZQorY2FsbGVkIGluIGEgY29udGV4dCB3aGljaCBjYW4gc2xlZXAuICBNYWtlIHN1cmUgeW91J3ZlIGZyZWVkIGFsbCBhbGxvY2F0ZWQKK21lbW9yeSBiYWNrIHRvIHRoZSBwb29sIGJlZm9yZSB5b3UgZGVzdHJveSBpdC4KKworCitQYXJ0IEljIC0gRE1BIGFkZHJlc3NpbmcgbGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbnQKK2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK2ludAorcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKKworQ2hlY2tzIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGNhbiBzdXBwb3J0IERNQSB0byB0aGUgbWVtb3J5IGRlc2NyaWJlZCBieQorbWFzay4KKworUmV0dXJuczogMSBpZiBpdCBjYW4gYW5kIDAgaWYgaXQgY2FuJ3QuCisKK05vdGVzOiBUaGlzIHJvdXRpbmUgbWVyZWx5IHRlc3RzIHRvIHNlZSBpZiB0aGUgbWFzayBpcyBwb3NzaWJsZS4gIEl0Cit3b24ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgbWFzayBzZXR0aW5ncy4gIEl0IGlzIG1vcmUgaW50ZW5kZWQgYXMgYW4KK2ludGVybmFsIEFQSSBmb3IgdXNlIGJ5IHRoZSBwbGF0Zm9ybSB0aGFuIGFuIGV4dGVybmFsIEFQSSBmb3IgdXNlIGJ5Citkcml2ZXIgd3JpdGVycy4KKworaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK2ludAorcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldmljZSAqZGV2LCB1NjQgbWFzaykKKworQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWFzayBpcyBwb3NzaWJsZSBhbmQgdXBkYXRlcyB0aGUgZGV2aWNlCitwYXJhbWV0ZXJzIGlmIGl0IGlzLgorCitSZXR1cm5zOiAwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgaWYgbm90LgorCit1NjQKK2RtYV9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpCisKK0FmdGVyIHNldHRpbmcgdGhlIG1hc2sgd2l0aCBkbWFfc2V0X21hc2soKSwgdGhpcyBBUEkgcmV0dXJucyB0aGUKK2FjdHVhbCBtYXNrICh3aXRoaW4gdGhhdCBhbHJlYWR5IHNldCkgdGhhdCB0aGUgcGxhdGZvcm0gYWN0dWFsbHkKK3JlcXVpcmVzIHRvIG9wZXJhdGUgZWZmaWNpZW50bHkuICBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIHJldHVybmVkIG1hc2sKK2lzIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGNvdmVyIGFsbCBvZiBtZW1vcnkuICBFeGFtaW5pbmcgdGhlCityZXF1aXJlZCBtYXNrIGdpdmVzIGRyaXZlcnMgd2l0aCB2YXJpYWJsZSBkZXNjcmlwdG9yIHNpemVzIHRoZQorb3Bwb3J0dW5pdHkgdG8gdXNlIHNtYWxsZXIgZGVzY3JpcHRvcnMgYXMgbmVjZXNzYXJ5LgorCitSZXF1ZXN0aW5nIHRoZSByZXF1aXJlZCBtYXNrIGRvZXMgbm90IGFsdGVyIHRoZSBjdXJyZW50IG1hc2suICBJZiB5b3UKK3dpc2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQsIHlvdSBzaG91bGQgaXNzdWUgYW5vdGhlciBkbWFfc2V0X21hc2soKQorY2FsbCB0byBsb3dlciB0aGUgbWFzayBhZ2Fpbi4KKworCitQYXJ0IElkIC0gU3RyZWFtaW5nIERNQSBtYXBwaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZG1hX2FkZHJfdAorZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsCisJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK2RtYV9hZGRyX3QKK3BjaV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAorCQkgICAgICBpbnQgZGlyZWN0aW9uKQorCitNYXBzIGEgcGllY2Ugb2YgcHJvY2Vzc29yIHZpcnR1YWwgbWVtb3J5IHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBieSB0aGUKK2RldmljZSBhbmQgcmV0dXJucyB0aGUgcGh5c2ljYWwgaGFuZGxlIG9mIHRoZSBtZW1vcnkuCisKK1RoZSBkaXJlY3Rpb24gZm9yIGJvdGggYXBpJ3MgbWF5IGJlIGNvbnZlcnRlZCBmcmVlbHkgYnkgY2FzdGluZy4KK0hvd2V2ZXIgdGhlIGRtYV8gQVBJIHVzZXMgYSBzdHJvbmdseSB0eXBlZCBlbnVtZXJhdG9yIGZvciBpdHMKK2RpcmVjdGlvbjoKKworRE1BX05PTkUJCT0gUENJX0RNQV9OT05FCQlubyBkaXJlY3Rpb24gKHVzZWQgZm9yCisJCQkJCQlkZWJ1Z2dpbmcpCitETUFfVE9fREVWSUNFCQk9IFBDSV9ETUFfVE9ERVZJQ0UJZGF0YSBpcyBnb2luZyBmcm9tIHRoZQorCQkJCQkJbWVtb3J5IHRvIHRoZSBkZXZpY2UKK0RNQV9GUk9NX0RFVklDRQkJPSBQQ0lfRE1BX0ZST01ERVZJQ0UJZGF0YSBpcyBjb21pbmcgZnJvbQorCQkJCQkJdGhlIGRldmljZSB0byB0aGUKKwkJCQkJCW1lbW9yeQorRE1BX0JJRElSRUNUSU9OQUwJPSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwJZGlyZWN0aW9uIGlzbid0IGtub3duCisKK05vdGVzOiAgTm90IGFsbCBtZW1vcnkgcmVnaW9ucyBpbiBhIG1hY2hpbmUgY2FuIGJlIG1hcHBlZCBieSB0aGlzCitBUEkuICBGdXJ0aGVyLCByZWdpb25zIHRoYXQgYXBwZWFyIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cyBpbgora2VybmVsIHZpcnR1YWwgc3BhY2UgbWF5IG5vdCBiZSBjb250aWd1b3VzIGFzIHBoeXNpY2FsIG1lbW9yeS4gIFNpbmNlCit0aGlzIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFueSBzY2F0dGVyL2dhdGhlciBjYXBhYmlsaXR5LCBpdCB3aWxsIGZhaWwKK2lmIHRoZSB1c2VyIHRyaWVzIHRvIG1hcCBhIG5vbiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGllY2Ugb2YgbWVtb3J5LgorRm9yIHRoaXMgcmVhc29uLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IG1lbW9yeSBtYXBwZWQgYnkgdGhpcyBBUEkgYmUKK29idGFpbmVkIG9ubHkgZnJvbSBzb3VyY2VzIHdoaWNoIGd1YXJhbnRlZSB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKKyhsaWtlIGttYWxsb2MpLgorCitGdXJ0aGVyLCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IG11c3QgYmUgd2l0aGluIHRoZQorZG1hX21hc2sgb2YgdGhlIGRldmljZSAodGhlIGRtYV9tYXNrIHJlcHJlc2VudHMgYSBiaXQgbWFzayBvZiB0aGUKK2FkZHJlc3NhYmxlIHJlZ2lvbiBmb3IgdGhlIGRldmljZS4gIGkuZS4gaWYgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YKK3RoZSBtZW1vcnkgYW5kZWQgd2l0aCB0aGUgZG1hX21hc2sgaXMgc3RpbGwgZXF1YWwgdG8gdGhlIHBoeXNpY2FsCithZGRyZXNzLCB0aGVuIHRoZSBkZXZpY2UgY2FuIHBlcmZvcm0gRE1BIHRvIHRoZSBtZW1vcnkpLiAgSW4gb3JkZXIgdG8KK2Vuc3VyZSB0aGF0IHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGttYWxsb2MgaXMgd2l0aGluIHRoZSBkbWFfbWFzaywKK3RoZSBkcml2ZXIgbWF5IHNwZWNpZnkgdmFyaW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgZmxhZ3MgdG8gcmVzdHJpY3QKK3RoZSBwaHlzaWNhbCBtZW1vcnkgcmFuZ2Ugb2YgdGhlIGFsbG9jYXRpb24gKGUuZy4gb24geDg2LCBHRlBfRE1BCitndWFyYW50ZWVzIHRvIGJlIHdpdGhpbiB0aGUgZmlyc3QgMTZNYiBvZiBhdmFpbGFibGUgcGh5c2ljYWwgbWVtb3J5LAorYXMgcmVxdWlyZWQgYnkgSVNBIGRldmljZXMpLgorCitOb3RlIGFsc28gdGhhdCB0aGUgYWJvdmUgY29uc3RyYWludHMgb24gcGh5c2ljYWwgY29udGlndWl0eSBhbmQKK2RtYV9tYXNrIG1heSBub3QgYXBwbHkgaWYgdGhlIHBsYXRmb3JtIGhhcyBhbiBJT01NVSAoYSBkZXZpY2Ugd2hpY2gKK3N1cHBsaWVzIGEgcGh5c2ljYWwgdG8gdmlydHVhbCBtYXBwaW5nIGJldHdlZW4gdGhlIEkvTyBtZW1vcnkgYnVzIGFuZAordGhlIGRldmljZSkuICBIb3dldmVyLCB0byBiZSBwb3J0YWJsZSwgZGV2aWNlIGRyaXZlciB3cml0ZXJzIG1heSAqbm90KgorYXNzdW1lIHRoYXQgc3VjaCBhbiBJT01NVSBleGlzdHMuCisKK1dhcm5pbmdzOiAgTWVtb3J5IGNvaGVyZW5jeSBvcGVyYXRlcyBhdCBhIGdyYW51bGFyaXR5IGNhbGxlZCB0aGUgY2FjaGUKK2xpbmUgd2lkdGguICBJbiBvcmRlciBmb3IgbWVtb3J5IG1hcHBlZCBieSB0aGlzIEFQSSB0byBvcGVyYXRlCitjb3JyZWN0bHksIHRoZSBtYXBwZWQgcmVnaW9uIG11c3QgYmVnaW4gZXhhY3RseSBvbiBhIGNhY2hlIGxpbmUKK2JvdW5kYXJ5IGFuZCBlbmQgZXhhY3RseSBvbiBvbmUgKHRvIHByZXZlbnQgdHdvIHNlcGFyYXRlbHkgbWFwcGVkCityZWdpb25zIGZyb20gc2hhcmluZyBhIHNpbmdsZSBjYWNoZSBsaW5lKS4gIFNpbmNlIHRoZSBjYWNoZSBsaW5lIHNpemUKK21heSBub3QgYmUga25vd24gYXQgY29tcGlsZSB0aW1lLCB0aGUgQVBJIHdpbGwgbm90IGVuZm9yY2UgdGhpcworcmVxdWlyZW1lbnQuICBUaGVyZWZvcmUsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgZHJpdmVyIHdyaXRlcnMgd2hvCitkb24ndCB0YWtlIHNwZWNpYWwgY2FyZSB0byBkZXRlcm1pbmUgdGhlIGNhY2hlIGxpbmUgc2l6ZSBhdCBydW4gdGltZQorb25seSBtYXAgdmlydHVhbCByZWdpb25zIHRoYXQgYmVnaW4gYW5kIGVuZCBvbiBwYWdlIGJvdW5kYXJpZXMgKHdoaWNoCithcmUgZ3VhcmFudGVlZCBhbHNvIHRvIGJlIGNhY2hlIGxpbmUgYm91bmRhcmllcykuCisKK0RNQV9UT19ERVZJQ0Ugc3luY2hyb25pc2F0aW9uIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgbGFzdCBtb2RpZmljYXRpb24KK29mIHRoZSBtZW1vcnkgcmVnaW9uIGJ5IHRoZSBzb2Z0d2FyZSBhbmQgYmVmb3JlIGl0IGlzIGhhbmRlZCBvZmYgdG8KK3RoZSBkcml2ZXIuICBPbmNlIHRoaXMgcHJpbWl0aXZlIGlzIHVzZWQuICBNZW1vcnkgY292ZXJlZCBieSB0aGlzCitwcmltaXRpdmUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcmVhZCBvbmx5IGJ5IHRoZSBkZXZpY2UuICBJZiB0aGUgZGV2aWNlCittYXkgd3JpdGUgdG8gaXQgYXQgYW55IHBvaW50LCBpdCBzaG91bGQgYmUgRE1BX0JJRElSRUNUSU9OQUwgKHNlZQorYmVsb3cpLgorCitETUFfRlJPTV9ERVZJQ0Ugc3luY2hyb25pc2F0aW9uIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGRyaXZlcgorYWNjZXNzZXMgZGF0YSB0aGF0IG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBkZXZpY2UuICBUaGlzIG1lbW9yeSBzaG91bGQKK2JlIHRyZWF0ZWQgYXMgcmVhZCBvbmx5IGJ5IHRoZSBkcml2ZXIuICBJZiB0aGUgZHJpdmVyIG5lZWRzIHRvIHdyaXRlCit0byBpdCBhdCBhbnkgcG9pbnQsIGl0IHNob3VsZCBiZSBETUFfQklESVJFQ1RJT05BTCAoc2VlIGJlbG93KS4KKworRE1BX0JJRElSRUNUSU9OQUwgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZzogaXQgbWVhbnMgdGhhdCB0aGUgZHJpdmVyCitpc24ndCBzdXJlIGlmIHRoZSBtZW1vcnkgd2FzIG1vZGlmaWVkIGJlZm9yZSBiZWluZyBoYW5kZWQgb2ZmIHRvIHRoZQorZGV2aWNlIGFuZCBhbHNvIGlzbid0IHN1cmUgaWYgdGhlIGRldmljZSB3aWxsIGFsc28gbW9kaWZ5IGl0LiAgVGh1cywKK3lvdSBtdXN0IGFsd2F5cyBzeW5jIGJpZGlyZWN0aW9uYWwgbWVtb3J5IHR3aWNlOiBvbmNlIGJlZm9yZSB0aGUKK21lbW9yeSBpcyBoYW5kZWQgb2ZmIHRvIHRoZSBkZXZpY2UgKHRvIG1ha2Ugc3VyZSBhbGwgbWVtb3J5IGNoYW5nZXMKK2FyZSBmbHVzaGVkIGZyb20gdGhlIHByb2Nlc3NvcikgYW5kIG9uY2UgYmVmb3JlIHRoZSBkYXRhIG1heSBiZQorYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgdXNlZCBieSB0aGUgZGV2aWNlICh0byBtYWtlIHN1cmUgYW55IHByb2Nlc3NvcgorY2FjaGUgbGluZXMgYXJlIHVwZGF0ZWQgd2l0aCBkYXRhIHRoYXQgdGhlIGRldmljZSBtYXkgaGF2ZSBjaGFuZ2VkLgorCit2b2lkCitkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkCitwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorCitVbm1hcHMgdGhlIHJlZ2lvbiBwcmV2aW91c2x5IG1hcHBlZC4gIEFsbCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4KK211c3QgYmUgaWRlbnRpY2FsIHRvIHRob3NlIHBhc3NlZCBpbiAoYW5kIHJldHVybmVkKSBieSB0aGUgbWFwcGluZworQVBJLgorCitkbWFfYWRkcl90CitkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK2RtYV9hZGRyX3QKK3BjaV9tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQordm9pZAorZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZAorcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKKworQVBJIGZvciBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgZm9yIHBhZ2VzLiAgQWxsIHRoZSBub3RlcyBhbmQgd2FybmluZ3MKK2ZvciB0aGUgb3RoZXIgbWFwcGluZyBBUElzIGFwcGx5IGhlcmUuICBBbHNvLCBhbHRob3VnaCB0aGUgPG9mZnNldD4KK2FuZCA8c2l6ZT4gcGFyYW1ldGVycyBhcmUgcHJvdmlkZWQgdG8gZG8gcGFydGlhbCBwYWdlIG1hcHBpbmcsIGl0IGlzCityZWNvbW1lbmRlZCB0aGF0IHlvdSBuZXZlciB1c2UgdGhlc2UgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHRoZQorY2FjaGUgd2lkdGggaXMuCisKK2ludAorZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKKworaW50CitwY2lfZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKKworSW4gc29tZSBjaXJjdW1zdGFuY2VzIGRtYV9tYXBfc2luZ2xlIGFuZCBkbWFfbWFwX3BhZ2Ugd2lsbCBmYWlsIHRvIGNyZWF0ZQorYSBtYXBwaW5nLiBBIGRyaXZlciBjYW4gY2hlY2sgZm9yIHRoZXNlIGVycm9ycyBieSB0ZXN0aW5nIHRoZSByZXR1cm5lZAorZG1hIGFkZHJlc3Mgd2l0aCBkbWFfbWFwcGluZ19lcnJvcigpLiBBIG5vbiB6ZXJvIHJldHVybiB2YWx1ZSBtZWFucyB0aGUgbWFwcGluZworY291bGQgbm90IGJlIGNyZWF0ZWQgYW5kIHRoZSBkcml2ZXIgc2hvdWxkIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIChlZworcmVkdWNlIGN1cnJlbnQgRE1BIG1hcHBpbmcgdXNhZ2Ugb3IgZGVsYXkgYW5kIHRyeSBhZ2FpbiBsYXRlcikuCisKK2ludAorZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCitpbnQKK3BjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKKworTWFwcyBhIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgZnJvbSB0aGUgYmxvY2sgbGF5ZXIuCisKK1JldHVybnM6IHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgc2VnbWVudHMgbWFwcGVkICh0aGlzIG1heSBiZSBzaG9ydGVkCit0aGFuIDxuZW50cz4gcGFzc2VkIGluIGlmIHRoZSBibG9jayBsYXllciBkZXRlcm1pbmVzIHRoYXQgc29tZQorZWxlbWVudHMgb2YgdGhlIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgYXJlIHBoeXNpY2FsbHkgYWRqYWNlbnQgYW5kIHRodXMKK21heSBiZSBtYXBwZWQgd2l0aCBhIHNpbmdsZSBlbnRyeSkuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIHNnIGNhbm5vdCBiZSBtYXBwZWQgYWdhaW4gaWYgaXQgaGFzIGJlZW4gbWFwcGVkIG9uY2UuCitUaGUgbWFwcGluZyBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gZGVzdHJveSBpbmZvcm1hdGlvbiBpbiB0aGUgc2cuCisKK0FzIHdpdGggdGhlIG90aGVyIG1hcHBpbmcgaW50ZXJmYWNlcywgZG1hX21hcF9zZyBjYW4gZmFpbC4gV2hlbiBpdAorZG9lcywgMCBpcyByZXR1cm5lZCBhbmQgYSBkcml2ZXIgbXVzdCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4gSXQgaXMKK2NyaXRpY2FsIHRoYXQgdGhlIGRyaXZlciBkbyBzb21ldGhpbmcsIGluIHRoZSBjYXNlIG9mIGEgYmxvY2sgZHJpdmVyCithYm9ydGluZyB0aGUgcmVxdWVzdCBvciBldmVuIG9vcHNpbmcgaXMgYmV0dGVyIHRoYW4gZG9pbmcgbm90aGluZyBhbmQKK2NvcnJ1cHRpbmcgdGhlIGZpbGVzeXN0ZW0uCisKK3ZvaWQKK2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZAorcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKKwordW5tYXAgdGhlIHByZXZpb3VzbHkgbWFwcGVkIHNjYXR0ZXIvZ2F0aGVyIGxpc3QuICBBbGwgdGhlIHBhcmFtZXRlcnMKK211c3QgYmUgdGhlIHNhbWUgYXMgdGhvc2UgYW5kIHBhc3NlZCBpbiB0byB0aGUgc2NhdHRlci9nYXRoZXIgbWFwcGluZworQVBJLgorCitOb3RlOiA8bmVudHM+IG11c3QgYmUgdGhlIG51bWJlciB5b3UgcGFzc2VkIGluLCAqbm90KiB0aGUgbnVtYmVyIG9mCitwaHlzaWNhbCBlbnRyaWVzIHJldHVybmVkLgorCit2b2lkCitkbWFfc3luY19zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkCitwY2lfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit2b2lkCitkbWFfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQKK3BjaV9kbWFfc3luY19zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorCitzeW5jaHJvbmlzZSBhIHNpbmdsZSBjb250aWd1b3VzIG9yIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcuICBBbGwgdGhlCitwYXJhbWV0ZXJzIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhvc2UgcGFzc2VkIGludG8gdGhlIHNpbmdsZSBtYXBwaW5nCitBUEkuCisKK05vdGVzOiAgWW91IG11c3QgZG8gdGhpczoKKworLSBCZWZvcmUgcmVhZGluZyB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiBieSBETUEgZnJvbSB0aGUgZGV2aWNlCisgICh1c2UgdGhlIERNQV9GUk9NX0RFVklDRSBkaXJlY3Rpb24pCistIEFmdGVyIHdyaXRpbmcgdmFsdWVzIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBkZXZpY2UgdXNpbmcgRE1BCisgICh1c2UgdGhlIERNQV9UT19ERVZJQ0UpIGRpcmVjdGlvbgorLSBiZWZvcmUgKmFuZCogYWZ0ZXIgaGFuZGluZyBtZW1vcnkgdG8gdGhlIGRldmljZSBpZiB0aGUgbWVtb3J5IGlzCisgIERNQV9CSURJUkVDVElPTkFMCisKK1NlZSBhbHNvIGRtYV9tYXBfc2luZ2xlKCkuCisKKworUGFydCBJSSAtIEFkdmFuY2VkIGRtYV8gdXNhZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dhcm5pbmc6IFRoZXNlIHBpZWNlcyBvZiB0aGUgRE1BIEFQSSBoYXZlIG5vIFBDSSBlcXVpdmFsZW50LiAgVGhleQorc2hvdWxkIGFsc28gbm90IGJlIHVzZWQgaW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzLCBzaW5jZSB0aGV5IGNhdGVyIGZvcgordW5saWtlbHkgY29ybmVyIGNhc2VzIHRoYXQgZG9uJ3QgYmVsb25nIGluIHVzdWFsIGRyaXZlcnMuCisKK0lmIHlvdSBkb24ndCB1bmRlcnN0YW5kIGhvdyBjYWNoZSBsaW5lIGNvaGVyZW5jeSB3b3JrcyBiZXR3ZWVuIGEKK3Byb2Nlc3NvciBhbmQgYW4gSS9PIGRldmljZSwgeW91IHNob3VsZCBub3QgYmUgdXNpbmcgdGhpcyBwYXJ0IG9mIHRoZQorQVBJIGF0IGFsbC4KKwordm9pZCAqCitkbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBpbnQgZmxhZykKKworSWRlbnRpY2FsIHRvIGRtYV9hbGxvY19jb2hlcmVudCgpIGV4Y2VwdCB0aGF0IHRoZSBwbGF0Zm9ybSB3aWxsCitjaG9vc2UgdG8gcmV0dXJuIGVpdGhlciBjb25zaXN0ZW50IG9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBhcyBpdCBzZWVzCitmaXQuICBCeSB1c2luZyB0aGlzIEFQSSwgeW91IGFyZSBndWFyYW50ZWVpbmcgdG8gdGhlIHBsYXRmb3JtIHRoYXQgeW91CitoYXZlIGFsbCB0aGUgY29ycmVjdCBhbmQgbmVjZXNzYXJ5IHN5bmMgcG9pbnRzIGZvciB0aGlzIG1lbW9yeSBpbiB0aGUKK2RyaXZlciBzaG91bGQgaXQgY2hvb3NlIHRvIHJldHVybiBub24tY29uc2lzdGVudCBtZW1vcnkuCisKK05vdGU6IHdoZXJlIHRoZSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGNvbnNpc3RlbnQgbWVtb3J5LCBpdCB3aWxsCitndWFyYW50ZWUgdGhhdCB0aGUgc3luYyBwb2ludHMgYmVjb21lIG5vcHMuCisKK1dhcm5pbmc6ICBIYW5kbGluZyBub24tY29uc2lzdGVudCBtZW1vcnkgaXMgYSByZWFsIHBhaW4uICBZb3Ugc2hvdWxkCitvbmx5IGV2ZXIgdXNlIHRoaXMgQVBJIGlmIHlvdSBwb3NpdGl2ZWx5IGtub3cgeW91ciBkcml2ZXIgd2lsbCBiZQorcmVxdWlyZWQgdG8gd29yayBvbiBvbmUgb2YgdGhlIHJhcmUgKHVzdWFsbHkgbm9uLVBDSSkgYXJjaGl0ZWN0dXJlcwordGhhdCBzaW1wbHkgY2Fubm90IG1ha2UgY29uc2lzdGVudCBtZW1vcnkuCisKK3ZvaWQKK2RtYV9mcmVlX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAorCQkJICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorCitmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIG5vbmNvbnNpc3RlbnQgQVBJLiAgQWxsIHBhcmFtZXRlcnMgbXVzdAorYmUgaWRlbnRpY2FsIHRvIHRob3NlIHBhc3NlZCBpbiAoYW5kIHJldHVybmVkIGJ5CitkbWFfYWxsb2Nfbm9uY29oZXJlbnQoKSkuCisKK2ludAorZG1hX2lzX2NvbnNpc3RlbnQoZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorCityZXR1cm5zIHRydWUgaWYgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHRoZSBkbWFfaGFuZGxlIGlzIGFjdHVhbGx5Citjb25zaXN0ZW50LgorCitpbnQKK2RtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCisKK3JldHVybnMgdGhlIHByb2Nlc3NvciBjYWNoZSBhbGlnbm1lbnQuICBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBtaW5pbXVtCithbGlnbm1lbnQgKmFuZCogd2lkdGggdGhhdCB5b3UgbXVzdCBvYnNlcnZlIHdoZW4gZWl0aGVyIG1hcHBpbmcKK21lbW9yeSBvciBkb2luZyBwYXJ0aWFsIGZsdXNoZXMuCisKK05vdGVzOiBUaGlzIEFQSSBtYXkgcmV0dXJuIGEgbnVtYmVyICpsYXJnZXIqIHRoYW4gdGhlIGFjdHVhbCBjYWNoZQorbGluZSwgYnV0IGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQgb25lIG9yIG1vcmUgY2FjaGUgbGluZXMgZml0IGV4YWN0bHkKK2ludG8gdGhlIHdpZHRoIHJldHVybmVkIGJ5IHRoaXMgY2FsbC4gIEl0IHdpbGwgYWxzbyBhbHdheXMgYmUgYSBwb3dlcgorb2YgdHdvIGZvciBlYXN5IGFsaWdubWVudAorCit2b2lkCitkbWFfc3luY19zaW5nbGVfcmFuZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCitkb2VzIGEgcGFydGlhbCBzeW5jLiAgc3RhcnRpbmcgYXQgb2Zmc2V0IGFuZCBjb250aW51aW5nIGZvciBzaXplLiAgWW91CittdXN0IGJlIGNhcmVmdWwgdG8gb2JzZXJ2ZSB0aGUgY2FjaGUgYWxpZ25tZW50IGFuZCB3aWR0aCB3aGVuIGRvaW5nCithbnl0aGluZyBsaWtlIHRoaXMuICBZb3UgbXVzdCBhbHNvIGJlIGV4dHJhIGNhcmVmdWwgYWJvdXQgYWNjZXNzaW5nCittZW1vcnkgeW91IGludGVuZCB0byBzeW5jIHBhcnRpYWxseS4KKwordm9pZAorZG1hX2NhY2hlX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAorCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisKK0RvIGEgcGFydGlhbCBzeW5jIG9mIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgYnkKK2RtYV9hbGxvY19ub25jb2hlcmVudCgpLCBzdGFydGluZyBhdCB2aXJ0dWFsIGFkZHJlc3MgdmFkZHIgYW5kCitjb250aW51aW5nIG9uIGZvciBzaXplLiAgQWdhaW4sIHlvdSAqbXVzdCogb2JzZXJ2ZSB0aGUgY2FjaGUgbGluZQorYm91bmRhcmllcyB3aGVuIGRvaW5nIHRoaXMuCisKK2ludAorZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwKKwkJCSAgICBkbWFfYWRkcl90IGRldmljZV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50CisJCQkgICAgZmxhZ3MpCisKKworRGVjbGFyZSByZWdpb24gb2YgbWVtb3J5IHRvIGJlIGhhbmRlZCBvdXQgYnkgZG1hX2FsbG9jX2NvaGVyZW50IHdoZW4KK2l0J3MgYXNrZWQgZm9yIGNvaGVyZW50IG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UuCisKK2J1c19hZGRyIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRvIHdoaWNoIHRoZSBtZW1vcnkgaXMgY3VycmVudGx5Cithc3NpZ25lZCBpbiB0aGUgYnVzIHJlc3BvbmRpbmcgcmVnaW9uICh0aGlzIHdpbGwgYmUgdXNlZCBieSB0aGUKK3BsYXRmb3JtIHRvIHBlcmZvcm0gdGhlIG1hcHBpbmcpCisKK2RldmljZV9hZGRyIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZAord2l0aCBhY3R1YWxseSB0byBhZGRyZXNzIHRoaXMgbWVtb3J5ICh0aGlzIHdpbGwgYmUgaGFuZGVkIG91dCBhcyB0aGUKK2RtYV9hZGRyX3QgaW4gZG1hX2FsbG9jX2NvaGVyZW50KCkpCisKK3NpemUgaXMgdGhlIHNpemUgb2YgdGhlIGFyZWEgKG11c3QgYmUgbXVsdGlwbGVzIG9mIFBBR0VfU0laRSkuCisKK2ZsYWdzIGNhbiBiZSBvcidkIHRvZ2V0aGVyIGFuZCBhcmUKKworRE1BX01FTU9SWV9NQVAgLSByZXF1ZXN0IHRoYXQgdGhlIG1lbW9yeSByZXR1cm5lZCBmcm9tCitkbWFfYWxsb2NfY29oZXJlbnQoKSBiZSBkaXJlY3RseSB3cml0ZWFibGUuCisKK0RNQV9NRU1PUllfSU8gLSByZXF1ZXN0IHRoYXQgdGhlIG1lbW9yeSByZXR1cm5lZCBmcm9tCitkbWFfYWxsb2NfY29oZXJlbnQoKSBiZSBhZGRyZXNzYWJsZSB1c2luZyByZWFkL3dyaXRlL21lbWNweV90b2lvIGV0Yy4KKworT25lIG9yIGJvdGggb2YgdGhlc2UgZmxhZ3MgbXVzdCBiZSBwcmVzZW50CisKK0RNQV9NRU1PUllfSU5DTFVERVNfQ0hJTERSRU4gLSBtYWtlIHRoZSBkZWNsYXJlZCBtZW1vcnkgYmUgYWxsb2NhdGVkIGJ5CitkbWFfYWxsb2NfY29oZXJlbnQgb2YgYW55IGNoaWxkIGRldmljZXMgb2YgdGhpcyBvbmUgKGZvciBtZW1vcnkgcmVzaWRpbmcKK29uIGEgYnJpZGdlKS4KKworRE1BX01FTU9SWV9FWENMVVNJVkUgLSBvbmx5IGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoZSBkZWNsYXJlZCByZWdpb25zLiAKK0RvIG5vdCBhbGxvdyBkbWFfYWxsb2NfY29oZXJlbnQoKSB0byBmYWxsIGJhY2sgdG8gc3lzdGVtIG1lbW9yeSB3aGVuCitpdCdzIG91dCBvZiBtZW1vcnkgaW4gdGhlIGRlY2xhcmVkIHJlZ2lvbi4KKworVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVpdGhlciBETUFfTUVNT1JZX01BUCBvciBETUFfTUVNT1JZX0lPIGFuZAorbXVzdCBjb3JyZXNwb25kIHRvIGEgcGFzc2VkIGluIGZsYWcgKGkuZS4gbm8gcmV0dXJuaW5nIERNQV9NRU1PUllfSU8KK2lmIG9ubHkgRE1BX01FTU9SWV9NQVAgd2VyZSBwYXNzZWQgaW4pIGZvciBzdWNjZXNzIG9yIHplcm8gZm9yCitmYWlsdXJlLgorCitOb3RlLCBmb3IgRE1BX01FTU9SWV9JTyByZXR1cm5zLCBhbGwgc3Vic2VxdWVudCBtZW1vcnkgcmV0dXJuZWQgYnkKK2RtYV9hbGxvY19jb2hlcmVudCgpIG1heSBubyBsb25nZXIgYmUgYWNjZXNzZWQgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkCittdXN0IGJlIGFjY2Vzc2VkIHVzaW5nIHRoZSBjb3JyZWN0IGJ1cyBmdW5jdGlvbnMuICBJZiB5b3VyIGRyaXZlcgoraXNuJ3QgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMgY29udGluZ2VuY3ksIGl0IHNob3VsZCBub3Qgc3BlY2lmeQorRE1BX01FTU9SWV9JTyBpbiB0aGUgaW5wdXQgZmxhZ3MuCisKK0FzIGEgc2ltcGxpZmljYXRpb24gZm9yIHRoZSBwbGF0Zm9ybXMsIG9ubHkgKm9uZSogc3VjaCByZWdpb24gb2YKK21lbW9yeSBtYXkgYmUgZGVjbGFyZWQgcGVyIGRldmljZS4KKworRm9yIHJlYXNvbnMgb2YgZWZmaWNpZW5jeSwgbW9zdCBwbGF0Zm9ybXMgY2hvb3NlIHRvIHRyYWNrIHRoZSBkZWNsYXJlZAorcmVnaW9uIG9ubHkgYXQgdGhlIGdyYW51bGFyaXR5IG9mIGEgcGFnZS4gIEZvciBzbWFsbGVyIGFsbG9jYXRpb25zLAoreW91IHNob3VsZCB1c2UgdGhlIGRtYV9wb29sKCkgQVBJLgorCit2b2lkCitkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2KQorCitSZW1vdmUgdGhlIG1lbW9yeSByZWdpb24gcHJldmlvdXNseSBkZWNsYXJlZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGlzCitBUEkgcGVyZm9ybXMgKm5vKiBpbi11c2UgY2hlY2tpbmcgZm9yIHRoaXMgcmVnaW9uIGFuZCB3aWxsIHJldHVybgordW5jb25kaXRpb25hbGx5IGhhdmluZyByZW1vdmVkIGFsbCB0aGUgcmVxdWlyZWQgc3RydWN0dXJlcy4gIEl0IGlzIHRoZQorZHJpdmVycyBqb2IgdG8gZW5zdXJlIHRoYXQgbm8gcGFydHMgb2YgdGhpcyBtZW1vcnkgcmVnaW9uIGFyZQorY3VycmVudGx5IGluIHVzZS4KKwordm9pZCAqCitkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUpCisKK1RoaXMgaXMgdXNlZCB0byBvY2N1cHkgc3BlY2lmaWMgcmVnaW9ucyBvZiB0aGUgZGVjbGFyZWQgc3BhY2UKKyhkbWFfYWxsb2NfY29oZXJlbnQoKSB3aWxsIGhhbmQgb3V0IHRoZSBmaXJzdCBmcmVlIHJlZ2lvbiBpdCBmaW5kcykuCisKK2RldmljZV9hZGRyIGlzIHRoZSAqZGV2aWNlKiBhZGRyZXNzIG9mIHRoZSByZWdpb24gcmVxdWVzdGVkCisKK3NpemUgaXMgdGhlIHNpemUgKGFuZCBzaG91bGQgYmUgYSBwYWdlIHNpemVkIG11bHRpcGxlKS4KKworVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIHByb2Nlc3NvciB2aXJ0dWFsCithZGRyZXNzIG9mIHRoZSBtZW1vcnksIG9yIGFuIGVycm9yICh2aWEgUFRSX0VSUigpKSBpZiBhbnkgcGFydCBvZiB0aGUKK3JlZ2lvbiBpcyBvY2N1cGllZC4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YWMzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dApAQCAtMCwwICsxLDg4MSBAQAorCQkJRHluYW1pYyBETUEgbWFwcGluZworCQkJPT09PT09PT09PT09PT09PT09PQorCisJCSBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+CisJCSBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQGN5Z251cy5jb20+CisJCSAgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIERNQSBtYXBwaW5nIHN5c3RlbSBpbiB0ZXJtcyBvZiB0aGUgcGNpXworQVBJLiAgRm9yIGEgc2ltaWxhciBBUEkgdGhhdCB3b3JrcyBmb3IgZ2VuZXJpYyBkZXZpY2VzLCBzZWUKK0RNQS1BUEkudHh0LgorCitNb3N0IG9mIHRoZSA2NGJpdCBwbGF0Zm9ybXMgaGF2ZSBzcGVjaWFsIGhhcmR3YXJlIHRoYXQgdHJhbnNsYXRlcyBidXMKK2FkZHJlc3NlcyAoRE1BIGFkZHJlc3NlcykgaW50byBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8KK2hvdyBwYWdlIHRhYmxlcyBhbmQvb3IgYSBUTEIgdHJhbnNsYXRlcyB2aXJ0dWFsIGFkZHJlc3NlcyB0byBwaHlzaWNhbAorYWRkcmVzc2VzIG9uIGEgQ1BVLiAgVGhpcyBpcyBuZWVkZWQgc28gdGhhdCBlLmcuIFBDSSBkZXZpY2VzIGNhbgorYWNjZXNzIHdpdGggYSBTaW5nbGUgQWRkcmVzcyBDeWNsZSAoMzJiaXQgRE1BIGFkZHJlc3MpIGFueSBwYWdlIGluIHRoZQorNjRiaXQgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gIFByZXZpb3VzbHkgaW4gTGludXggdGhvc2UgNjRiaXQKK3BsYXRmb3JtcyBoYWQgdG8gc2V0IGFydGlmaWNpYWwgbGltaXRzIG9uIHRoZSBtYXhpbXVtIFJBTSBzaXplIGluIHRoZQorc3lzdGVtLCBzbyB0aGF0IHRoZSB2aXJ0X3RvX2J1cygpIHN0YXRpYyBzY2hlbWUgd29ya3MgKHRoZSBETUEgYWRkcmVzcwordHJhbnNsYXRpb24gdGFibGVzIHdlcmUgc2ltcGx5IGZpbGxlZCBvbiBib290dXAgdG8gbWFwIGVhY2ggYnVzCithZGRyZXNzIHRvIHRoZSBwaHlzaWNhbCBwYWdlIF9fcGEoYnVzX3RvX3ZpcnQoKSkpLgorCitTbyB0aGF0IExpbnV4IGNhbiB1c2UgdGhlIGR5bmFtaWMgRE1BIG1hcHBpbmcsIGl0IG5lZWRzIHNvbWUgaGVscCBmcm9tIHRoZQorZHJpdmVycywgbmFtZWx5IGl0IGhhcyB0byB0YWtlIGludG8gYWNjb3VudCB0aGF0IERNQSBhZGRyZXNzZXMgc2hvdWxkIGJlCittYXBwZWQgb25seSBmb3IgdGhlIHRpbWUgdGhleSBhcmUgYWN0dWFsbHkgdXNlZCBhbmQgdW5tYXBwZWQgYWZ0ZXIgdGhlIERNQQordHJhbnNmZXIuCisKK1RoZSBmb2xsb3dpbmcgQVBJIHdpbGwgd29yayBvZiBjb3Vyc2UgZXZlbiBvbiBwbGF0Zm9ybXMgd2hlcmUgbm8gc3VjaAoraGFyZHdhcmUgZXhpc3RzLCBzZWUgZS5nLiBpbmNsdWRlL2FzbS1pMzg2L3BjaS5oIGZvciBob3cgaXQgaXMgaW1wbGVtZW50ZWQgb24KK3RvcCBvZiB0aGUgdmlydF90b19idXMgaW50ZXJmYWNlLgorCitGaXJzdCBvZiBhbGwsIHlvdSBzaG91bGQgbWFrZSBzdXJlCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworaXMgaW4geW91ciBkcml2ZXIuIFRoaXMgZmlsZSB3aWxsIG9idGFpbiBmb3IgeW91IHRoZSBkZWZpbml0aW9uIG9mIHRoZQorZG1hX2FkZHJfdCAod2hpY2ggY2FuIGhvbGQgYW55IHZhbGlkIERNQSBhZGRyZXNzIGZvciB0aGUgcGxhdGZvcm0pCit0eXBlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGV2ZXJ5d2hlcmUgeW91IGhvbGQgYSBETUEgKGJ1cykgYWRkcmVzcworcmV0dXJuZWQgZnJvbSB0aGUgRE1BIG1hcHBpbmcgZnVuY3Rpb25zLgorCisJCQkgV2hhdCBtZW1vcnkgaXMgRE1BJ2FibGU/CisKK1RoZSBmaXJzdCBwaWVjZSBvZiBpbmZvcm1hdGlvbiB5b3UgbXVzdCBrbm93IGlzIHdoYXQga2VybmVsIG1lbW9yeSBjYW4KK2JlIHVzZWQgd2l0aCB0aGUgRE1BIG1hcHBpbmcgZmFjaWxpdGllcy4gIFRoZXJlIGhhcyBiZWVuIGFuIHVud3JpdHRlbgorc2V0IG9mIHJ1bGVzIHJlZ2FyZGluZyB0aGlzLCBhbmQgdGhpcyB0ZXh0IGlzIGFuIGF0dGVtcHQgdG8gZmluYWxseQord3JpdGUgdGhlbSBkb3duLgorCitJZiB5b3UgYWNxdWlyZWQgeW91ciBtZW1vcnkgdmlhIHRoZSBwYWdlIGFsbG9jYXRvcgorKGkuZS4gX19nZXRfZnJlZV9wYWdlKigpKSBvciB0aGUgZ2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9ycworKGkuZS4ga21hbGxvYygpIG9yIGttZW1fY2FjaGVfYWxsb2MoKSkgdGhlbiB5b3UgbWF5IERNQSB0by9mcm9tCit0aGF0IG1lbW9yeSB1c2luZyB0aGUgYWRkcmVzc2VzIHJldHVybmVkIGZyb20gdGhvc2Ugcm91dGluZXMuCisKK1RoaXMgbWVhbnMgc3BlY2lmaWNhbGx5IHRoYXQgeW91IG1heSBfbm90XyB1c2UgdGhlIG1lbW9yeS9hZGRyZXNzZXMKK3JldHVybmVkIGZyb20gdm1hbGxvYygpIGZvciBETUEuICBJdCBpcyBwb3NzaWJsZSB0byBETUEgdG8gdGhlCitfdW5kZXJseWluZ18gbWVtb3J5IG1hcHBlZCBpbnRvIGEgdm1hbGxvYygpIGFyZWEsIGJ1dCB0aGlzIHJlcXVpcmVzCit3YWxraW5nIHBhZ2UgdGFibGVzIHRvIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzLCBhbmQgdGhlbgordHJhbnNsYXRpbmcgZWFjaCBvZiB0aG9zZSBwYWdlcyBiYWNrIHRvIGEga2VybmVsIGFkZHJlc3MgdXNpbmcKK3NvbWV0aGluZyBsaWtlIF9fdmEoKS4gIFsgRURJVDogVXBkYXRlIHRoaXMgd2hlbiB3ZSBpbnRlZ3JhdGUKK0dlcmQgS25vcnIncyBnZW5lcmljIGNvZGUgd2hpY2ggZG9lcyB0aGlzLiBdCisKK1RoaXMgcnVsZSBhbHNvIG1lYW5zIHRoYXQgeW91IG1heSBub3QgdXNlIGtlcm5lbCBpbWFnZSBhZGRyZXNzZXMKKyhpZS4gaXRlbXMgaW4gdGhlIGtlcm5lbCdzIGRhdGEvdGV4dC9ic3Mgc2VnbWVudCwgb3IgeW91ciBkcml2ZXIncykKK25vciBtYXkgeW91IHVzZSBrZXJuZWwgc3RhY2sgYWRkcmVzc2VzIGZvciBETUEuICBCb3RoIG9mIHRoZXNlIGl0ZW1zCittaWdodCBiZSBtYXBwZWQgc29tZXdoZXJlIGVudGlyZWx5IGRpZmZlcmVudCB0aGFuIHRoZSByZXN0IG9mIHBoeXNpY2FsCittZW1vcnkuCisKK0Fsc28sIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90IHRha2UgdGhlIHJldHVybiBvZiBhIGttYXAoKQorY2FsbCBhbmQgRE1BIHRvL2Zyb20gdGhhdC4gIFRoaXMgaXMgc2ltaWxhciB0byB2bWFsbG9jKCkuCisKK1doYXQgYWJvdXQgYmxvY2sgSS9PIGFuZCBuZXR3b3JraW5nIGJ1ZmZlcnM/ICBUaGUgYmxvY2sgSS9PIGFuZAorbmV0d29ya2luZyBzdWJzeXN0ZW1zIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWZmZXJzIHRoZXkgdXNlIGFyZSB2YWxpZAorZm9yIHlvdSB0byBETUEgZnJvbS90by4KKworCQkJRE1BIGFkZHJlc3NpbmcgbGltaXRhdGlvbnMKKworRG9lcyB5b3VyIGRldmljZSBoYXZlIGFueSBETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9ucz8gIEZvciBleGFtcGxlLCBpcworeW91ciBkZXZpY2Ugb25seSBjYXBhYmxlIG9mIGRyaXZpbmcgdGhlIGxvdyBvcmRlciAyNC1iaXRzIG9mIGFkZHJlc3MKK29uIHRoZSBQQ0kgYnVzIGZvciBTQUMgRE1BIHRyYW5zZmVycz8gIElmIHNvLCB5b3UgbmVlZCB0byBpbmZvcm0gdGhlCitQQ0kgbGF5ZXIgb2YgdGhpcyBmYWN0LgorCitCeSBkZWZhdWx0LCB0aGUga2VybmVsIGFzc3VtZXMgdGhhdCB5b3VyIGRldmljZSBjYW4gYWRkcmVzcyB0aGUgZnVsbAorMzItYml0cyBpbiBhIFNBQyBjeWNsZS4gIEZvciBhIDY0LWJpdCBEQUMgY2FwYWJsZSBkZXZpY2UsIHRoaXMgbmVlZHMKK3RvIGJlIGluY3JlYXNlZC4gIEFuZCBmb3IgYSBkZXZpY2Ugd2l0aCBsaW1pdGF0aW9ucywgYXMgZGlzY3Vzc2VkIGluCit0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBpdCBuZWVkcyB0byBiZSBkZWNyZWFzZWQuCisKK3BjaV9hbGxvY19jb25zaXN0ZW50KCkgYnkgZGVmYXVsdCB3aWxsIHJldHVybiAzMi1iaXQgRE1BIGFkZHJlc3Nlcy4KK1BDSS1YIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgUENJLVggZGV2aWNlcyB0byBzdXBwb3J0IDY0LWJpdAorYWRkcmVzc2luZyAoREFDKSBmb3IgYWxsIHRyYW5zYWN0aW9ucy4gQW5kIGF0IGxlYXN0IG9uZSBwbGF0Zm9ybSAoU0dJCitTTjIpIHJlcXVpcmVzIDY0LWJpdCBjb25zaXN0ZW50IGFsbG9jYXRpb25zIHRvIG9wZXJhdGUgY29ycmVjdGx5IHdoZW4KK3RoZSBJTyBidXMgaXMgaW4gUENJLVggbW9kZS4gVGhlcmVmb3JlLCBsaWtlIHdpdGggcGNpX3NldF9kbWFfbWFzaygpLAoraXQncyBnb29kIHByYWN0aWNlIHRvIGNhbGwgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCkgdG8gc2V0IHRoZQorYXBwcm9wcmlhdGUgbWFzayBldmVuIGlmIHlvdXIgZGV2aWNlIG9ubHkgc3VwcG9ydHMgMzItYml0IERNQQorKGRlZmF1bHQpIGFuZCBlc3BlY2lhbGx5IGlmIGl0J3MgYSBQQ0ktWCBkZXZpY2UuCisKK0ZvciBjb3JyZWN0IG9wZXJhdGlvbiwgeW91IG11c3QgaW50ZXJyb2dhdGUgdGhlIFBDSSBsYXllciBpbiB5b3VyCitkZXZpY2UgcHJvYmUgcm91dGluZSB0byBzZWUgaWYgdGhlIFBDSSBjb250cm9sbGVyIG9uIHRoZSBtYWNoaW5lIGNhbgorcHJvcGVybHkgc3VwcG9ydCB0aGUgRE1BIGFkZHJlc3NpbmcgbGltaXRhdGlvbiB5b3VyIGRldmljZSBoYXMuICBJdCBpcworZ29vZCBzdHlsZSB0byBkbyB0aGlzIGV2ZW4gaWYgeW91ciBkZXZpY2UgaG9sZHMgdGhlIGRlZmF1bHQgc2V0dGluZywKK2JlY2F1c2UgdGhpcyBzaG93cyB0aGF0IHlvdSBkaWQgdGhpbmsgYWJvdXQgdGhlc2UgaXNzdWVzIHdydC4geW91cgorZGV2aWNlLgorCitUaGUgcXVlcnkgaXMgcGVyZm9ybWVkIHZpYSBhIGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpOgorCisJaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBkZXZpY2VfbWFzayk7CisKK1RoZSBxdWVyeSBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9ucyBpcyBwZXJmb3JtZWQgdmlhIGEgYSBjYWxsIHRvCitwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soKToKKworCWludCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBkZXZpY2VfbWFzayk7CisKK0hlcmUsIHBkZXYgaXMgYSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIHN0cnVjdCBvZiB5b3VyIGRldmljZSwgYW5kCitkZXZpY2VfbWFzayBpcyBhIGJpdCBtYXNrIGRlc2NyaWJpbmcgd2hpY2ggYml0cyBvZiBhIFBDSSBhZGRyZXNzIHlvdXIKK2RldmljZSBzdXBwb3J0cy4gIEl0IHJldHVybnMgemVybyBpZiB5b3VyIGNhcmQgY2FuIHBlcmZvcm0gRE1BCitwcm9wZXJseSBvbiB0aGUgbWFjaGluZSBnaXZlbiB0aGUgYWRkcmVzcyBtYXNrIHlvdSBwcm92aWRlZC4KKworSWYgaXQgcmV0dXJucyBub24temVybywgeW91ciBkZXZpY2UgY2FuIG5vdCBwZXJmb3JtIERNQSBwcm9wZXJseSBvbgordGhpcyBwbGF0Zm9ybSwgYW5kIGF0dGVtcHRpbmcgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkCitiZWhhdmlvci4gIFlvdSBtdXN0IGVpdGhlciB1c2UgYSBkaWZmZXJlbnQgbWFzaywgb3Igbm90IHVzZSBETUEuCisKK1RoaXMgbWVhbnMgdGhhdCBpbiB0aGUgZmFpbHVyZSBjYXNlLCB5b3UgaGF2ZSB0aHJlZSBvcHRpb25zOgorCisxKSBVc2UgYW5vdGhlciBETUEgbWFzaywgaWYgcG9zc2libGUgKHNlZSBiZWxvdykuCisyKSBVc2Ugc29tZSBub24tRE1BIG1vZGUgZm9yIGRhdGEgdHJhbnNmZXIsIGlmIHBvc3NpYmxlLgorMykgSWdub3JlIHRoaXMgZGV2aWNlIGFuZCBkbyBub3QgaW5pdGlhbGl6ZSBpdC4KKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3VyIGRyaXZlciBwcmludCBhIGtlcm5lbCBLRVJOX1dBUk5JTkcgbWVzc2FnZQord2hlbiB5b3UgZW5kIHVwIHBlcmZvcm1pbmcgZWl0aGVyICMyIG9yICMzLiAgSW4gdGhpcyBtYW5uZXIsIGlmIGEgdXNlcgorb2YgeW91ciBkcml2ZXIgcmVwb3J0cyB0aGF0IHBlcmZvcm1hbmNlIGlzIGJhZCBvciB0aGF0IHRoZSBkZXZpY2UgaXMgbm90CitldmVuIGRldGVjdGVkLCB5b3UgY2FuIGFzayB0aGVtIGZvciB0aGUga2VybmVsIG1lc3NhZ2VzIHRvIGZpbmQgb3V0CitleGFjdGx5IHdoeS4KKworVGhlIHN0YW5kYXJkIDMyLWJpdCBhZGRyZXNzaW5nIFBDSSBkZXZpY2Ugd291bGQgZG8gc29tZXRoaW5nIGxpa2UKK3RoaXM6CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CisJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOworCX0KKworQW5vdGhlciBjb21tb24gc2NlbmFyaW8gaXMgYSA2NC1iaXQgY2FwYWJsZSBkZXZpY2UuICBUaGUgYXBwcm9hY2gKK2hlcmUgaXMgdG8gdHJ5IGZvciA2NC1iaXQgREFDIGFkZHJlc3NpbmcsIGJ1dCBiYWNrIGRvd24gdG8gYQorMzItYml0IG1hc2sgc2hvdWxkIHRoYXQgZmFpbC4gIFRoZSBQQ0kgcGxhdGZvcm0gY29kZSBtYXkgZmFpbCB0aGUKKzY0LWJpdCBtYXNrIG5vdCBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBpcyBub3QgY2FwYWJsZSBvZiA2NC1iaXQKK2FkZHJlc3NpbmcuICBSYXRoZXIsIGl0IG1heSBmYWlsIGluIHRoaXMgY2FzZSBzaW1wbHkgYmVjYXVzZQorMzItYml0IFNBQyBhZGRyZXNzaW5nIGlzIGRvbmUgbW9yZSBlZmZpY2llbnRseSB0aGFuIERBQyBhZGRyZXNzaW5nLgorU3BhcmM2NCBpcyBvbmUgcGxhdGZvcm0gd2hpY2ggYmVoYXZlcyBpbiB0aGlzIHdheS4KKworSGVyZSBpcyBob3cgeW91IHdvdWxkIGhhbmRsZSBhIDY0LWJpdCBjYXBhYmxlIGRldmljZSB3aGljaCBjYW4gZHJpdmUKK2FsbCA2NC1iaXRzIHdoZW4gYWNjZXNzaW5nIHN0cmVhbWluZyBETUE6CisKKwlpbnQgdXNpbmdfZGFjOworCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkgeworCQl1c2luZ19kYWMgPSAxOworCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCXVzaW5nX2RhYyA9IDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CisJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOworCX0KKworSWYgYSBjYXJkIGlzIGNhcGFibGUgb2YgdXNpbmcgNjQtYml0IGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMgYXMgd2VsbCwKK3RoZSBjYXNlIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisJaW50IHVzaW5nX2RhYywgY29uc2lzdGVudF91c2luZ19kYWM7CisKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7CisJCXVzaW5nX2RhYyA9IDE7CisJICAgCWNvbnNpc3RlbnRfdXNpbmdfZGFjID0gMTsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgeworCQl1c2luZ19kYWMgPSAwOworCQljb25zaXN0ZW50X3VzaW5nX2RhYyA9IDA7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CisJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOworCX0KKworcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCkgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBzZXQgdGhlIHNhbWUgb3IgYQorc21hbGxlciBtYXNrIGFzIHBjaV9zZXRfZG1hX21hc2soKS4gSG93ZXZlciBmb3IgdGhlIHJhcmUgY2FzZSB0aGF0IGEKK2RldmljZSBkcml2ZXIgb25seSB1c2VzIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMsIG9uZSB3b3VsZCBoYXZlIHRvCitjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCkuCisKK0lmIHlvdXIgNjQtYml0IGRldmljZSBpcyBnb2luZyB0byBiZSBhbiBlbm9ybW91cyBjb25zdW1lciBvZiBETUEKK21hcHBpbmdzLCB0aGlzIGNhbiBiZSBwcm9ibGVtYXRpYyBzaW5jZSB0aGUgRE1BIG1hcHBpbmdzIGFyZSBhCitmaW5pdGUgcmVzb3VyY2Ugb24gbWFueSBwbGF0Zm9ybXMuICBQbGVhc2Ugc2VlIHRoZSAiREFDIEFkZHJlc3NpbmcKK2ZvciBBZGRyZXNzIFNwYWNlIEh1bmdyeSBEZXZpY2VzIiBzZWN0aW9uIG5lYXIgdGhlIGVuZCBvZiB0aGlzCitkb2N1bWVudCBmb3IgaG93IHRvIGhhbmRsZSB0aGlzIGNhc2UuCisKK0ZpbmFsbHksIGlmIHlvdXIgZGV2aWNlIGNhbiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBvZgorYWRkcmVzcyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcgeW91IG1pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgorCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgMHgwMGZmZmZmZikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm15ZGV2OiAyNC1iaXQgRE1BIGFkZHJlc3Npbmcgbm90IGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGlnbm9yZV90aGlzX2RldmljZTsKKwl9CisKK1doZW4gcGNpX3NldF9kbWFfbWFzaygpIGlzIHN1Y2Nlc3NmdWwsIGFuZCByZXR1cm5zIHplcm8sIHRoZSBQQ0kgbGF5ZXIKK3NhdmVzIGF3YXkgdGhpcyBtYXNrIHlvdSBoYXZlIHByb3ZpZGVkLiAgVGhlIFBDSSBsYXllciB3aWxsIHVzZSB0aGlzCitpbmZvcm1hdGlvbiBsYXRlciB3aGVuIHlvdSBtYWtlIERNQSBtYXBwaW5ncy4KKworVGhlcmUgaXMgYSBjYXNlIHdoaWNoIHdlIGFyZSBhd2FyZSBvZiBhdCB0aGlzIHRpbWUsIHdoaWNoIGlzIHdvcnRoCittZW50aW9uaW5nIGluIHRoaXMgZG9jdW1lbnRhdGlvbi4gIElmIHlvdXIgZGV2aWNlIHN1cHBvcnRzIG11bHRpcGxlCitmdW5jdGlvbnMgKGZvciBleGFtcGxlIGEgc291bmQgY2FyZCBwcm92aWRlcyBwbGF5YmFjayBhbmQgcmVjb3JkCitmdW5jdGlvbnMpIGFuZCB0aGUgdmFyaW91cyBkaWZmZXJlbnQgZnVuY3Rpb25zIGhhdmUgX2RpZmZlcmVudF8KK0RNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zLCB5b3UgbWF5IHdpc2ggdG8gcHJvYmUgZWFjaCBtYXNrIGFuZAorb25seSBwcm92aWRlIHRoZSBmdW5jdGlvbmFsaXR5IHdoaWNoIHRoZSBtYWNoaW5lIGNhbiBoYW5kbGUuICBJdAoraXMgaW1wb3J0YW50IHRoYXQgdGhlIGxhc3QgY2FsbCB0byBwY2lfc2V0X2RtYV9tYXNrKCkgYmUgZm9yIHRoZSAKK21vc3Qgc3BlY2lmaWMgbWFzay4KKworSGVyZSBpcyBwc2V1ZG8tY29kZSBzaG93aW5nIGhvdyB0aGlzIG1pZ2h0IGJlIGRvbmU6CisKKwkjZGVmaW5lIFBMQVlCQUNLX0FERFJFU1NfQklUUwlETUFfMzJCSVRfTUFTSworCSNkZWZpbmUgUkVDT1JEX0FERFJFU1NfQklUUwkweDAwZmZmZmZmCisKKwlzdHJ1Y3QgbXlfc291bmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCS4uLgorCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBQTEFZQkFDS19BRERSRVNTX0JJVFMpKSB7CisJCWNhcmQtPnBsYXliYWNrX2VuYWJsZWQgPSAxOworCX0gZWxzZSB7CisJCWNhcmQtPnBsYXliYWNrX2VuYWJsZWQgPSAwOworCQlwcmludGsoS0VSTl9XQVJOICIlczogUGxheWJhY2sgZGlzYWJsZWQgZHVlIHRvIERNQSBsaW1pdGF0aW9ucy5cbiIsCisJCSAgICAgICBjYXJkLT5uYW1lKTsKKwl9CisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIFJFQ09SRF9BRERSRVNTX0JJVFMpKSB7CisJCWNhcmQtPnJlY29yZF9lbmFibGVkID0gMTsKKwl9IGVsc2UgeworCQljYXJkLT5yZWNvcmRfZW5hYmxlZCA9IDA7CisJCXByaW50ayhLRVJOX1dBUk4gIiVzOiBSZWNvcmQgZGlzYWJsZWQgZHVlIHRvIERNQSBsaW1pdGF0aW9ucy5cbiIsCisJCSAgICAgICBjYXJkLT5uYW1lKTsKKwl9CisKK0Egc291bmQgY2FyZCB3YXMgdXNlZCBhcyBhbiBleGFtcGxlIGhlcmUgYmVjYXVzZSB0aGlzIGdlbnJlIG9mIFBDSQorZGV2aWNlcyBzZWVtcyB0byBiZSBsaXR0ZXJlZCB3aXRoIElTQSBjaGlwcyBnaXZlbiBhIFBDSSBmcm9udCBlbmQsCithbmQgdGh1cyByZXRhaW5pbmcgdGhlIDE2TUIgRE1BIGFkZHJlc3NpbmcgbGltaXRhdGlvbnMgb2YgSVNBLgorCisJCQlUeXBlcyBvZiBETUEgbWFwcGluZ3MKKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBETUEgbWFwcGluZ3M6CisKKy0gQ29uc2lzdGVudCBETUEgbWFwcGluZ3Mgd2hpY2ggYXJlIHVzdWFsbHkgbWFwcGVkIGF0IGRyaXZlcgorICBpbml0aWFsaXphdGlvbiwgdW5tYXBwZWQgYXQgdGhlIGVuZCBhbmQgZm9yIHdoaWNoIHRoZSBoYXJkd2FyZSBzaG91bGQKKyAgZ3VhcmFudGVlIHRoYXQgdGhlIGRldmljZSBhbmQgdGhlIENQVSBjYW4gYWNjZXNzIHRoZSBkYXRhCisgIGluIHBhcmFsbGVsIGFuZCB3aWxsIHNlZSB1cGRhdGVzIG1hZGUgYnkgZWFjaCBvdGhlciB3aXRob3V0IGFueQorICBleHBsaWNpdCBzb2Z0d2FyZSBmbHVzaGluZy4KKworICBUaGluayBvZiAiY29uc2lzdGVudCIgYXMgInN5bmNocm9ub3VzIiBvciAiY29oZXJlbnQiLgorCisgIFRoZSBjdXJyZW50IGRlZmF1bHQgaXMgdG8gcmV0dXJuIGNvbnNpc3RlbnQgbWVtb3J5IGluIHRoZSBsb3cgMzIKKyAgYml0cyBvZiB0aGUgUENJIGJ1cyBzcGFjZS4gIEhvd2V2ZXIsIGZvciBmdXR1cmUgY29tcGF0aWJpbGl0eSB5b3UKKyAgc2hvdWxkIHNldCB0aGUgY29uc2lzdGVudCBtYXNrIGV2ZW4gaWYgdGhpcyBkZWZhdWx0IGlzIGZpbmUgZm9yIHlvdXIKKyAgZHJpdmVyLgorCisgIEdvb2QgZXhhbXBsZXMgb2Ygd2hhdCB0byB1c2UgY29uc2lzdGVudCBtYXBwaW5ncyBmb3IgYXJlOgorCisJLSBOZXR3b3JrIGNhcmQgRE1BIHJpbmcgZGVzY3JpcHRvcnMuCisJLSBTQ1NJIGFkYXB0ZXIgbWFpbGJveCBjb21tYW5kIGRhdGEgc3RydWN0dXJlcy4KKwktIERldmljZSBmaXJtd2FyZSBtaWNyb2NvZGUgZXhlY3V0ZWQgb3V0IG9mCisJICBtYWluIG1lbW9yeS4KKworICBUaGUgaW52YXJpYW50IHRoZXNlIGV4YW1wbGVzIGFsbCByZXF1aXJlIGlzIHRoYXQgYW55IENQVSBzdG9yZQorICB0byBtZW1vcnkgaXMgaW1tZWRpYXRlbHkgdmlzaWJsZSB0byB0aGUgZGV2aWNlLCBhbmQgdmljZQorICB2ZXJzYS4gIENvbnNpc3RlbnQgbWFwcGluZ3MgZ3VhcmFudGVlIHRoaXMuCisKKyAgSU1QT1JUQU5UOiBDb25zaXN0ZW50IERNQSBtZW1vcnkgZG9lcyBub3QgcHJlY2x1ZGUgdGhlIHVzYWdlIG9mCisgICAgICAgICAgICAgcHJvcGVyIG1lbW9yeSBiYXJyaWVycy4gIFRoZSBDUFUgbWF5IHJlb3JkZXIgc3RvcmVzIHRvCisJICAgICBjb25zaXN0ZW50IG1lbW9yeSBqdXN0IGFzIGl0IG1heSBub3JtYWwgbWVtb3J5LiAgRXhhbXBsZToKKwkgICAgIGlmIGl0IGlzIGltcG9ydGFudCBmb3IgdGhlIGRldmljZSB0byBzZWUgdGhlIGZpcnN0IHdvcmQKKwkgICAgIG9mIGEgZGVzY3JpcHRvciB1cGRhdGVkIGJlZm9yZSB0aGUgc2Vjb25kLCB5b3UgbXVzdCBkbworCSAgICAgc29tZXRoaW5nIGxpa2U6CisKKwkJZGVzYy0+d29yZDAgPSBhZGRyZXNzOworCQl3bWIoKTsKKwkJZGVzYy0+d29yZDEgPSBERVNDX1ZBTElEOworCisgICAgICAgICAgICAgaW4gb3JkZXIgdG8gZ2V0IGNvcnJlY3QgYmVoYXZpb3Igb24gYWxsIHBsYXRmb3Jtcy4KKworLSBTdHJlYW1pbmcgRE1BIG1hcHBpbmdzIHdoaWNoIGFyZSB1c3VhbGx5IG1hcHBlZCBmb3Igb25lIERNQSB0cmFuc2ZlciwKKyAgdW5tYXBwZWQgcmlnaHQgYWZ0ZXIgaXQgKHVubGVzcyB5b3UgdXNlIHBjaV9kbWFfc3luY18qIGJlbG93KSBhbmQgZm9yIHdoaWNoCisgIGhhcmR3YXJlIGNhbiBvcHRpbWl6ZSBmb3Igc2VxdWVudGlhbCBhY2Nlc3Nlcy4KKworICBUaGlzIG9mICJzdHJlYW1pbmciIGFzICJhc3luY2hyb25vdXMiIG9yICJvdXRzaWRlIHRoZSBjb2hlcmVuY3kKKyAgZG9tYWluIi4KKworICBHb29kIGV4YW1wbGVzIG9mIHdoYXQgdG8gdXNlIHN0cmVhbWluZyBtYXBwaW5ncyBmb3IgYXJlOgorCisJLSBOZXR3b3JraW5nIGJ1ZmZlcnMgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgYnkgYSBkZXZpY2UuCisJLSBGaWxlc3lzdGVtIGJ1ZmZlcnMgd3JpdHRlbi9yZWFkIGJ5IGEgU0NTSSBkZXZpY2UuCisKKyAgVGhlIGludGVyZmFjZXMgZm9yIHVzaW5nIHRoaXMgdHlwZSBvZiBtYXBwaW5nIHdlcmUgZGVzaWduZWQgaW4KKyAgc3VjaCBhIHdheSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNhbiBtYWtlIHdoYXRldmVyIHBlcmZvcm1hbmNlCisgIG9wdGltaXphdGlvbnMgdGhlIGhhcmR3YXJlIGFsbG93cy4gIFRvIHRoaXMgZW5kLCB3aGVuIHVzaW5nCisgIHN1Y2ggbWFwcGluZ3MgeW91IG11c3QgYmUgZXhwbGljaXQgYWJvdXQgd2hhdCB5b3Ugd2FudCB0byBoYXBwZW4uCisKK05laXRoZXIgdHlwZSBvZiBETUEgbWFwcGluZyBoYXMgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyB0aGF0IGNvbWUKK2Zyb20gUENJLCBhbHRob3VnaCBzb21lIGRldmljZXMgbWF5IGhhdmUgc3VjaCByZXN0cmljdGlvbnMuCisKKwkJIFVzaW5nIENvbnNpc3RlbnQgRE1BIG1hcHBpbmdzLgorCitUbyBhbGxvY2F0ZSBhbmQgbWFwIGxhcmdlIChQQUdFX1NJWkUgb3Igc28pIGNvbnNpc3RlbnQgRE1BIHJlZ2lvbnMsCit5b3Ugc2hvdWxkIGRvOgorCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCisJY3B1X2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIHNpemUsICZkbWFfaGFuZGxlKTsKKword2hlcmUgZGV2IGlzIGEgc3RydWN0IHBjaV9kZXYgKi4gWW91IHNob3VsZCBwYXNzIE5VTEwgZm9yIFBDSSBsaWtlIGJ1c2VzCit3aGVyZSBkZXZpY2VzIGRvbid0IGhhdmUgc3RydWN0IHBjaV9kZXYgKGxpa2UgSVNBLCBFSVNBKS4gIFRoaXMgbWF5IGJlCitjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuIAorCitUaGlzIGFyZ3VtZW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBETUEgdHJhbnNsYXRpb25zIG1heSBiZSBidXMKK3NwZWNpZmljIChhbmQgb2Z0ZW4gaXMgcHJpdmF0ZSB0byB0aGUgYnVzIHdoaWNoIHRoZSBkZXZpY2UgaXMgYXR0YWNoZWQKK3RvKS4KKworU2l6ZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSByZWdpb24geW91IHdhbnQgdG8gYWxsb2NhdGUsIGluIGJ5dGVzLgorCitUaGlzIHJvdXRpbmUgd2lsbCBhbGxvY2F0ZSBSQU0gZm9yIHRoYXQgcmVnaW9uLCBzbyBpdCBhY3RzIHNpbWlsYXJseSB0bworX19nZXRfZnJlZV9wYWdlcyAoYnV0IHRha2VzIHNpemUgaW5zdGVhZCBvZiBhIHBhZ2Ugb3JkZXIpLiAgSWYgeW91cgorZHJpdmVyIG5lZWRzIHJlZ2lvbnMgc2l6ZWQgc21hbGxlciB0aGFuIGEgcGFnZSwgeW91IG1heSBwcmVmZXIgdXNpbmcKK3RoZSBwY2lfcG9vbCBpbnRlcmZhY2UsIGRlc2NyaWJlZCBiZWxvdy4KKworVGhlIGNvbnNpc3RlbnQgRE1BIG1hcHBpbmcgaW50ZXJmYWNlcywgZm9yIG5vbi1OVUxMIGRldiwgd2lsbCBieQorZGVmYXVsdCByZXR1cm4gYSBETUEgYWRkcmVzcyB3aGljaCBpcyBTQUMgKFNpbmdsZSBBZGRyZXNzIEN5Y2xlKQorYWRkcmVzc2FibGUuICBFdmVuIGlmIHRoZSBkZXZpY2UgaW5kaWNhdGVzICh2aWEgUENJIGRtYSBtYXNrKSB0aGF0IGl0CittYXkgYWRkcmVzcyB0aGUgdXBwZXIgMzItYml0cyBhbmQgdGh1cyBwZXJmb3JtIERBQyBjeWNsZXMsIGNvbnNpc3RlbnQKK2FsbG9jYXRpb24gd2lsbCBvbmx5IHJldHVybiA+IDMyLWJpdCBQQ0kgYWRkcmVzc2VzIGZvciBETUEgaWYgdGhlCitjb25zaXN0ZW50IGRtYSBtYXNrIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hhbmdlZCB2aWEKK3BjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpLiAgVGhpcyBpcyB0cnVlIG9mIHRoZSBwY2lfcG9vbCBpbnRlcmZhY2UKK2FzIHdlbGwuCisKK3BjaV9hbGxvY19jb25zaXN0ZW50IHJldHVybnMgdHdvIHZhbHVlczogdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGljaCB5b3UKK2NhbiB1c2UgdG8gYWNjZXNzIGl0IGZyb20gdGhlIENQVSBhbmQgZG1hX2hhbmRsZSB3aGljaCB5b3UgcGFzcyB0byB0aGUKK2NhcmQuCisKK1RoZSBjcHUgcmV0dXJuIGFkZHJlc3MgYW5kIHRoZSBETUEgYnVzIG1hc3RlciBhZGRyZXNzIGFyZSBib3RoCitndWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgdG8gdGhlIHNtYWxsZXN0IFBBR0VfU0laRSBvcmRlciB3aGljaAoraXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gIFRoaXMgaW52YXJpYW50CitleGlzdHMgKGZvciBleGFtcGxlKSB0byBndWFyYW50ZWUgdGhhdCBpZiB5b3UgYWxsb2NhdGUgYSBjaHVuaword2hpY2ggaXMgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIDY0IGtpbG9ieXRlcywgdGhlIGV4dGVudCBvZiB0aGUKK2J1ZmZlciB5b3UgcmVjZWl2ZSB3aWxsIG5vdCBjcm9zcyBhIDY0SyBib3VuZGFyeS4KKworVG8gdW5tYXAgYW5kIGZyZWUgc3VjaCBhIERNQSByZWdpb24sIHlvdSBjYWxsOgorCisJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKKword2hlcmUgZGV2LCBzaXplIGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUgYWJvdmUgY2FsbCBhbmQgY3B1X2FkZHIgYW5kCitkbWFfaGFuZGxlIGFyZSB0aGUgdmFsdWVzIHBjaV9hbGxvY19jb25zaXN0ZW50IHJldHVybmVkIHRvIHlvdS4KK1RoaXMgZnVuY3Rpb24gbWF5IG5vdCBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisKK0lmIHlvdXIgZHJpdmVyIG5lZWRzIGxvdHMgb2Ygc21hbGxlciBtZW1vcnkgcmVnaW9ucywgeW91IGNhbiB3cml0ZQorY3VzdG9tIGNvZGUgdG8gc3ViZGl2aWRlIHBhZ2VzIHJldHVybmVkIGJ5IHBjaV9hbGxvY19jb25zaXN0ZW50LAorb3IgeW91IGNhbiB1c2UgdGhlIHBjaV9wb29sIEFQSSB0byBkbyB0aGF0LiAgQSBwY2lfcG9vbCBpcyBsaWtlCithIGttZW1fY2FjaGUsIGJ1dCBpdCB1c2VzIHBjaV9hbGxvY19jb25zaXN0ZW50IG5vdCBfX2dldF9mcmVlX3BhZ2VzLgorQWxzbywgaXQgdW5kZXJzdGFuZHMgY29tbW9uIGhhcmR3YXJlIGNvbnN0cmFpbnRzIGZvciBhbGlnbm1lbnQsCitsaWtlIHF1ZXVlIGhlYWRzIG5lZWRpbmcgdG8gYmUgYWxpZ25lZCBvbiBOIGJ5dGUgYm91bmRhcmllcy4KKworQ3JlYXRlIGEgcGNpX3Bvb2wgbGlrZSB0aGlzOgorCisJc3RydWN0IHBjaV9wb29sICpwb29sOworCisJcG9vbCA9IHBjaV9wb29sX2NyZWF0ZShuYW1lLCBkZXYsIHNpemUsIGFsaWduLCBhbGxvYyk7CisKK1RoZSAibmFtZSIgaXMgZm9yIGRpYWdub3N0aWNzIChsaWtlIGEga21lbV9jYWNoZSBuYW1lKTsgZGV2IGFuZCBzaXplCithcmUgYXMgYWJvdmUuICBUaGUgZGV2aWNlJ3MgaGFyZHdhcmUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciB0aGlzCit0eXBlIG9mIGRhdGEgaXMgImFsaWduIiAod2hpY2ggaXMgZXhwcmVzc2VkIGluIGJ5dGVzLCBhbmQgbXVzdCBiZSBhCitwb3dlciBvZiB0d28pLiAgSWYgeW91ciBkZXZpY2UgaGFzIG5vIGJvdW5kYXJ5IGNyb3NzaW5nIHJlc3RyaWN0aW9ucywKK3Bhc3MgMCBmb3IgYWxsb2M7IHBhc3NpbmcgNDA5NiBzYXlzIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSB0aGlzIHBvb2wKK211c3Qgbm90IGNyb3NzIDRLQnl0ZSBib3VuZGFyaWVzIChidXQgYXQgdGhhdCB0aW1lIGl0IG1heSBiZSBiZXR0ZXIgdG8KK2dvIGZvciBwY2lfYWxsb2NfY29uc2lzdGVudCBkaXJlY3RseSBpbnN0ZWFkKS4KKworQWxsb2NhdGUgbWVtb3J5IGZyb20gYSBwY2kgcG9vbCBsaWtlIHRoaXM6CisKKwljcHVfYWRkciA9IHBjaV9wb29sX2FsbG9jKHBvb2wsIGZsYWdzLCAmZG1hX2hhbmRsZSk7CisKK2ZsYWdzIGFyZSBTTEFCX0tFUk5FTCBpZiBibG9ja2luZyBpcyBwZXJtaXR0ZWQgKG5vdCBpbl9pbnRlcnJ1cHQgbm9yCitob2xkaW5nIFNNUCBsb2NrcyksIFNMQUJfQVRPTUlDIG90aGVyd2lzZS4gIExpa2UgcGNpX2FsbG9jX2NvbnNpc3RlbnQsCit0aGlzIHJldHVybnMgdHdvIHZhbHVlcywgY3B1X2FkZHIgYW5kIGRtYV9oYW5kbGUuCisKK0ZyZWUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBmcm9tIGEgcGNpX3Bvb2wgbGlrZSB0aGlzOgorCisJcGNpX3Bvb2xfZnJlZShwb29sLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CisKK3doZXJlIHBvb2wgaXMgd2hhdCB5b3UgcGFzc2VkIHRvIHBjaV9wb29sX2FsbG9jLCBhbmQgY3B1X2FkZHIgYW5kCitkbWFfaGFuZGxlIGFyZSB0aGUgdmFsdWVzIHBjaV9wb29sX2FsbG9jIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uCittYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorCitEZXN0cm95IGEgcGNpX3Bvb2wgYnkgY2FsbGluZzoKKworCXBjaV9wb29sX2Rlc3Ryb3kocG9vbCk7CisKK01ha2Ugc3VyZSB5b3UndmUgY2FsbGVkIHBjaV9wb29sX2ZyZWUgZm9yIGFsbCBtZW1vcnkgYWxsb2NhdGVkCitmcm9tIGEgcG9vbCBiZWZvcmUgeW91IGRlc3Ryb3kgdGhlIHBvb2wuIFRoaXMgZnVuY3Rpb24gbWF5IG5vdAorYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgorCisJCQlETUEgRGlyZWN0aW9uCisKK1RoZSBpbnRlcmZhY2VzIGRlc2NyaWJlZCBpbiBzdWJzZXF1ZW50IHBvcnRpb25zIG9mIHRoaXMgZG9jdW1lbnQKK3Rha2UgYSBETUEgZGlyZWN0aW9uIGFyZ3VtZW50LCB3aGljaCBpcyBhbiBpbnRlZ2VyIGFuZCB0YWtlcyBvbgorb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgUENJX0RNQV9CSURJUkVDVElPTkFMCisgUENJX0RNQV9UT0RFVklDRQorIFBDSV9ETUFfRlJPTURFVklDRQorIFBDSV9ETUFfTk9ORQorCitPbmUgc2hvdWxkIHByb3ZpZGUgdGhlIGV4YWN0IERNQSBkaXJlY3Rpb24gaWYgeW91IGtub3cgaXQuCisKK1BDSV9ETUFfVE9ERVZJQ0UgbWVhbnMgImZyb20gbWFpbiBtZW1vcnkgdG8gdGhlIFBDSSBkZXZpY2UiCitQQ0lfRE1BX0ZST01ERVZJQ0UgbWVhbnMgImZyb20gdGhlIFBDSSBkZXZpY2UgdG8gbWFpbiBtZW1vcnkiCitJdCBpcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBkYXRhIG1vdmVzIGR1cmluZyB0aGUgRE1BCit0cmFuc2Zlci4KKworWW91IGFyZSBfc3Ryb25nbHlfIGVuY291cmFnZWQgdG8gc3BlY2lmeSB0aGlzIGFzIHByZWNpc2VseQorYXMgeW91IHBvc3NpYmx5IGNhbi4KKworSWYgeW91IGFic29sdXRlbHkgY2Fubm90IGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0aGUgRE1BIHRyYW5zZmVyLAorc3BlY2lmeSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwuICBJdCBtZWFucyB0aGF0IHRoZSBETUEgY2FuIGdvIGluCitlaXRoZXIgZGlyZWN0aW9uLiAgVGhlIHBsYXRmb3JtIGd1YXJhbnRlZXMgdGhhdCB5b3UgbWF5IGxlZ2FsbHkKK3NwZWNpZnkgdGhpcywgYW5kIHRoYXQgaXQgd2lsbCB3b3JrLCBidXQgdGhpcyBtYXkgYmUgYXQgdGhlCitjb3N0IG9mIHBlcmZvcm1hbmNlIGZvciBleGFtcGxlLgorCitUaGUgdmFsdWUgUENJX0RNQV9OT05FIGlzIHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4gIE9uZSBjYW4KK2hvbGQgdGhpcyBpbiBhIGRhdGEgc3RydWN0dXJlIGJlZm9yZSB5b3UgY29tZSB0byBrbm93IHRoZQorcHJlY2lzZSBkaXJlY3Rpb24sIGFuZCB0aGlzIHdpbGwgaGVscCBjYXRjaCBjYXNlcyB3aGVyZSB5b3VyCitkaXJlY3Rpb24gdHJhY2tpbmcgbG9naWMgaGFzIGZhaWxlZCB0byBzZXQgdGhpbmdzIHVwIHByb3Blcmx5LgorCitBbm90aGVyIGFkdmFudGFnZSBvZiBzcGVjaWZ5aW5nIHRoaXMgdmFsdWUgcHJlY2lzZWx5IChvdXRzaWRlIG9mCitwb3RlbnRpYWwgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvZiBzdWNoKSBpcyBmb3IgZGVidWdnaW5nLgorU29tZSBwbGF0Zm9ybXMgYWN0dWFsbHkgaGF2ZSBhIHdyaXRlIHBlcm1pc3Npb24gYm9vbGVhbiB3aGljaCBETUEKK21hcHBpbmdzIGNhbiBiZSBtYXJrZWQgd2l0aCwgbXVjaCBsaWtlIHBhZ2UgcHJvdGVjdGlvbnMgaW4gdGhlIHVzZXIKK3Byb2dyYW0gYWRkcmVzcyBzcGFjZS4gIFN1Y2ggcGxhdGZvcm1zIGNhbiBhbmQgZG8gcmVwb3J0IGVycm9ycyBpbiB0aGUKK2tlcm5lbCBsb2dzIHdoZW4gdGhlIFBDSSBjb250cm9sbGVyIGhhcmR3YXJlIGRldGVjdHMgdmlvbGF0aW9uIG9mIHRoZQorcGVybWlzc2lvbiBzZXR0aW5nLgorCitPbmx5IHN0cmVhbWluZyBtYXBwaW5ncyBzcGVjaWZ5IGEgZGlyZWN0aW9uLCBjb25zaXN0ZW50IG1hcHBpbmdzCitpbXBsaWNpdGx5IGhhdmUgYSBkaXJlY3Rpb24gYXR0cmlidXRlIHNldHRpbmcgb2YKK1BDSV9ETUFfQklESVJFQ1RJT05BTC4KKworVGhlIFNDU0kgc3Vic3lzdGVtIHByb3ZpZGVzIG1lY2hhbmlzbXMgZm9yIHlvdSB0byBlYXNpbHkgb2J0YWluCit0aGUgZGlyZWN0aW9uIHRvIHVzZSwgaW4gdGhlIFNDU0kgY29tbWFuZDoKKworCXNjc2lfdG9fcGNpX2RtYV9kaXIoU0NTSV9ESVJFQ1RJT04pCisKK1doZXJlIFNDU0lfRElSRUNUSU9OIGlzIG9idGFpbmVkIGZyb20gdGhlICdzY19kYXRhX2RpcmVjdGlvbicKK21lbWJlciBvZiB0aGUgU0NTSSBjb21tYW5kIHlvdXIgZHJpdmVyIGlzIHdvcmtpbmcgb24uICBUaGUKK21lbnRpb25lZCBpbnRlcmZhY2UgYWJvdmUgcmV0dXJucyBhIHZhbHVlIHN1aXRhYmxlIGZvciBwYXNzaW5nCitpbnRvIHRoZSBzdHJlYW1pbmcgRE1BIG1hcHBpbmcgaW50ZXJmYWNlcyBiZWxvdy4KKworRm9yIE5ldHdvcmtpbmcgZHJpdmVycywgaXQncyBhIHJhdGhlciBzaW1wbGUgYWZmYWlyLiAgRm9yIHRyYW5zbWl0CitwYWNrZXRzLCBtYXAvdW5tYXAgdGhlbSB3aXRoIHRoZSBQQ0lfRE1BX1RPREVWSUNFIGRpcmVjdGlvbgorc3BlY2lmaWVyLiAgRm9yIHJlY2VpdmUgcGFja2V0cywganVzdCB0aGUgb3Bwb3NpdGUsIG1hcC91bm1hcCB0aGVtCit3aXRoIHRoZSBQQ0lfRE1BX0ZST01ERVZJQ0UgZGlyZWN0aW9uIHNwZWNpZmllci4KKworCQkgIFVzaW5nIFN0cmVhbWluZyBETUEgbWFwcGluZ3MKKworVGhlIHN0cmVhbWluZyBETUEgbWFwcGluZyByb3V0aW5lcyBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0Citjb250ZXh0LiAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiBlYWNoIG1hcC91bm1hcCwgb25lIHdoaWNoIHdpbGwKK21hcC91bm1hcCBhIHNpbmdsZSBtZW1vcnkgcmVnaW9uLCBhbmQgb25lIHdoaWNoIHdpbGwgbWFwL3VubWFwIGEKK3NjYXR0ZXJsaXN0LgorCitUbyBtYXAgYSBzaW5nbGUgcmVnaW9uLCB5b3UgZG86CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG15ZGV2LT5wZGV2OworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwl2b2lkICphZGRyID0gYnVmZmVyLT5wdHI7CisJc2l6ZV90IHNpemUgPSBidWZmZXItPmxlbjsKKworCWRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShkZXYsIGFkZHIsIHNpemUsIGRpcmVjdGlvbik7CisKK2FuZCB0byB1bm1hcCBpdDoKKworCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOworCitZb3Ugc2hvdWxkIGNhbGwgcGNpX3VubWFwX3NpbmdsZSB3aGVuIHRoZSBETUEgYWN0aXZpdHkgaXMgZmluaXNoZWQsIGUuZy4KK2Zyb20gdGhlIGludGVycnVwdCB3aGljaCB0b2xkIHlvdSB0aGF0IHRoZSBETUEgdHJhbnNmZXIgaXMgZG9uZS4KKworVXNpbmcgY3B1IHBvaW50ZXJzIGxpa2UgdGhpcyBmb3Igc2luZ2xlIG1hcHBpbmdzIGhhcyBhIGRpc2FkdmFudGFnZSwKK3lvdSBjYW5ub3QgcmVmZXJlbmNlIEhJR0hNRU0gbWVtb3J5IGluIHRoaXMgd2F5LiAgVGh1cywgdGhlcmUgaXMgYQorbWFwL3VubWFwIGludGVyZmFjZSBwYWlyIGFraW4gdG8gcGNpX3ttYXAsdW5tYXB9X3NpbmdsZS4gIFRoZXNlCitpbnRlcmZhY2VzIGRlYWwgd2l0aCBwYWdlL29mZnNldCBwYWlycyBpbnN0ZWFkIG9mIGNwdSBwb2ludGVycy4KK1NwZWNpZmljYWxseToKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbXlkZXYtPnBkZXY7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCXN0cnVjdCBwYWdlICpwYWdlID0gYnVmZmVyLT5wYWdlOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYnVmZmVyLT5vZmZzZXQ7CisJc2l6ZV90IHNpemUgPSBidWZmZXItPmxlbjsKKworCWRtYV9oYW5kbGUgPSBwY2lfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7CisKKwkuLi4KKworCXBjaV91bm1hcF9wYWdlKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKworSGVyZSwgIm9mZnNldCIgbWVhbnMgYnl0ZSBvZmZzZXQgd2l0aGluIHRoZSBnaXZlbiBwYWdlLgorCitXaXRoIHNjYXR0ZXJsaXN0cywgeW91IG1hcCBhIHJlZ2lvbiBnYXRoZXJlZCBmcm9tIHNldmVyYWwgcmVnaW9ucyBieToKKworCWludCBpLCBjb3VudCA9IHBjaV9tYXBfc2coZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXJlY3Rpb24pOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwlmb3IgKGkgPSAwLCBzZyA9IHNnbGlzdDsgaSA8IGNvdW50OyBpKyssIHNnKyspIHsKKwkJaHdfYWRkcmVzc1tpXSA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJaHdfbGVuW2ldID0gc2dfZG1hX2xlbihzZyk7CisJfQorCit3aGVyZSBuZW50cyBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNnbGlzdC4KKworVGhlIGltcGxlbWVudGF0aW9uIGlzIGZyZWUgdG8gbWVyZ2Ugc2V2ZXJhbCBjb25zZWN1dGl2ZSBzZ2xpc3QgZW50cmllcworaW50byBvbmUgKGUuZy4gaWYgRE1BIG1hcHBpbmcgaXMgZG9uZSB3aXRoIFBBR0VfU0laRSBncmFudWxhcml0eSwgYW55Citjb25zZWN1dGl2ZSBzZ2xpc3QgZW50cmllcyBjYW4gYmUgbWVyZ2VkIGludG8gb25lIHByb3ZpZGVkIHRoZSBmaXJzdCBvbmUKK2VuZHMgYW5kIHRoZSBzZWNvbmQgb25lIHN0YXJ0cyBvbiBhIHBhZ2UgYm91bmRhcnkgLSBpbiBmYWN0IHRoaXMgaXMgYSBodWdlCithZHZhbnRhZ2UgZm9yIGNhcmRzIHdoaWNoIGVpdGhlciBjYW5ub3QgZG8gc2NhdHRlci1nYXRoZXIgb3IgaGF2ZSB2ZXJ5CitsaW1pdGVkIG51bWJlciBvZiBzY2F0dGVyLWdhdGhlciBlbnRyaWVzKSBhbmQgcmV0dXJucyB0aGUgYWN0dWFsIG51bWJlcgorb2Ygc2cgZW50cmllcyBpdCBtYXBwZWQgdGhlbSB0by4gT24gZmFpbHVyZSAwIGlzIHJldHVybmVkLgorCitUaGVuIHlvdSBzaG91bGQgbG9vcCBjb3VudCB0aW1lcyAobm90ZTogdGhpcyBjYW4gYmUgbGVzcyB0aGFuIG5lbnRzIHRpbWVzKQorYW5kIHVzZSBzZ19kbWFfYWRkcmVzcygpIGFuZCBzZ19kbWFfbGVuKCkgbWFjcm9zIHdoZXJlIHlvdSBwcmV2aW91c2x5CithY2Nlc3NlZCBzZy0+YWRkcmVzcyBhbmQgc2ctPmxlbmd0aCBhcyBzaG93biBhYm92ZS4KKworVG8gdW5tYXAgYSBzY2F0dGVybGlzdCwganVzdCBjYWxsOgorCisJcGNpX3VubWFwX3NnKGRldiwgc2dsaXN0LCBuZW50cywgZGlyZWN0aW9uKTsKKworQWdhaW4sIG1ha2Ugc3VyZSBETUEgYWN0aXZpdHkgaGFzIGFscmVhZHkgZmluaXNoZWQuCisKK1BMRUFTRSBOT1RFOiAgVGhlICduZW50cycgYXJndW1lbnQgdG8gdGhlIHBjaV91bm1hcF9zZyBjYWxsIG11c3QgYmUKKyAgICAgICAgICAgICAgdGhlIF9zYW1lXyBvbmUgeW91IHBhc3NlZCBpbnRvIHRoZSBwY2lfbWFwX3NnIGNhbGwsCisJICAgICAgaXQgc2hvdWxkIF9OT1RfIGJlIHRoZSAnY291bnQnIHZhbHVlIF9yZXR1cm5lZF8gZnJvbSB0aGUKKyAgICAgICAgICAgICAgcGNpX21hcF9zZyBjYWxsLgorCitFdmVyeSBwY2lfbWFwX3tzaW5nbGUsc2d9IGNhbGwgc2hvdWxkIGhhdmUgaXRzIHBjaV91bm1hcF97c2luZ2xlLHNnfQorY291bnRlcnBhcnQsIGJlY2F1c2UgdGhlIGJ1cyBhZGRyZXNzIHNwYWNlIGlzIGEgc2hhcmVkIHJlc291cmNlIChhbHRob3VnaAoraW4gc29tZSBwb3J0cyB0aGUgbWFwcGluZyBpcyBwZXIgZWFjaCBCVVMgc28gbGVzcyBkZXZpY2VzIGNvbnRlbmQgZm9yIHRoZQorc2FtZSBidXMgYWRkcmVzcyBzcGFjZSkgYW5kIHlvdSBjb3VsZCByZW5kZXIgdGhlIG1hY2hpbmUgdW51c2FibGUgYnkgZWF0aW5nCithbGwgYnVzIGFkZHJlc3Nlcy4KKworSWYgeW91IG5lZWQgdG8gdXNlIHRoZSBzYW1lIHN0cmVhbWluZyBETUEgcmVnaW9uIG11bHRpcGxlIHRpbWVzIGFuZCB0b3VjaAordGhlIGRhdGEgaW4gYmV0d2VlbiB0aGUgRE1BIHRyYW5zZmVycywgdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSBzeW5jZWQKK3Byb3Blcmx5IGluIG9yZGVyIGZvciB0aGUgY3B1IGFuZCBkZXZpY2UgdG8gc2VlIHRoZSBtb3N0IHVwdG9kYXRlIGFuZAorY29ycmVjdCBjb3B5IG9mIHRoZSBETUEgYnVmZmVyLgorCitTbywgZmlyc3RseSwganVzdCBtYXAgaXQgd2l0aCBwY2lfbWFwX3tzaW5nbGUsc2d9LCBhbmQgYWZ0ZXIgZWFjaCBETUEKK3RyYW5zZmVyIGNhbGwgZWl0aGVyOgorCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKworb3I6CisKKwlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisKK2FzIGFwcHJvcHJpYXRlLgorCitUaGVuLCBpZiB5b3Ugd2lzaCB0byBsZXQgdGhlIGRldmljZSBnZXQgYXQgdGhlIERNQSBhcmVhIGFnYWluLAorZmluaXNoIGFjY2Vzc2luZyB0aGUgZGF0YSB3aXRoIHRoZSBjcHUsIGFuZCB0aGVuIGJlZm9yZSBhY3R1YWxseQorZ2l2aW5nIHRoZSBidWZmZXIgdG8gdGhlIGhhcmR3YXJlIGNhbGwgZWl0aGVyOgorCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKworb3I6CisKKwlwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisKK2FzIGFwcHJvcHJpYXRlLgorCitBZnRlciB0aGUgbGFzdCBETUEgdHJhbnNmZXIgY2FsbCBvbmUgb2YgdGhlIERNQSB1bm1hcCByb3V0aW5lcworcGNpX3VubWFwX3tzaW5nbGUsc2d9LiBJZiB5b3UgZG9uJ3QgdG91Y2ggdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGNpX21hcF8qCitjYWxsIHRpbGwgcGNpX3VubWFwXyosIHRoZW4geW91IGRvbid0IGhhdmUgdG8gY2FsbCB0aGUgcGNpX2RtYV9zeW5jXyoKK3JvdXRpbmVzIGF0IGFsbC4KKworSGVyZSBpcyBwc2V1ZG8gY29kZSB3aGljaCBzaG93cyBhIHNpdHVhdGlvbiBpbiB3aGljaCB5b3Ugd291bGQgbmVlZAordG8gdXNlIHRoZSBwY2lfZG1hX3N5bmNfKigpIGludGVyZmFjZXMuCisKKwlteV9jYXJkX3NldHVwX3JlY2VpdmVfYnVmZmVyKHN0cnVjdCBteV9jYXJkICpjcCwgY2hhciAqYnVmZmVyLCBpbnQgbGVuKQorCXsKKwkJZG1hX2FkZHJfdCBtYXBwaW5nOworCisJCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShjcC0+cGRldiwgYnVmZmVyLCBsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJY3AtPnJ4X2J1ZiA9IGJ1ZmZlcjsKKwkJY3AtPnJ4X2xlbiA9IGxlbjsKKwkJY3AtPnJ4X2RtYSA9IG1hcHBpbmc7CisKKwkJZ2l2ZV9yeF9idWZfdG9fY2FyZChjcCk7CisJfQorCisJLi4uCisKKwlteV9jYXJkX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKwl7CisJCXN0cnVjdCBteV9jYXJkICpjcCA9IGRldmlkOworCisJCS4uLgorCQlpZiAocmVhZF9jYXJkX3N0YXR1cyhjcCkgPT0gUlhfQlVGX1RSQU5TRkVSUkVEKSB7CisJCQlzdHJ1Y3QgbXlfY2FyZF9oZWFkZXIgKmhwOworCisJCQkvKiBFeGFtaW5lIHRoZSBoZWFkZXIgdG8gc2VlIGlmIHdlIHdpc2gKKwkJCSAqIHRvIGFjY2VwdCB0aGUgZGF0YS4gIEJ1dCBzeW5jaHJvbml6ZQorCQkJICogdGhlIERNQSB0cmFuc2ZlciB3aXRoIHRoZSBDUFUgZmlyc3QKKwkJCSAqIHNvIHRoYXQgd2Ugc2VlIHVwZGF0ZWQgY29udGVudHMuCisJCQkgKi8KKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjcC0+cGRldiwgY3AtPnJ4X2RtYSwKKwkJCQkJCSAgICBjcC0+cnhfbGVuLAorCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCS8qIE5vdyBpdCBpcyBzYWZlIHRvIGV4YW1pbmUgdGhlIGJ1ZmZlci4gKi8KKwkJCWhwID0gKHN0cnVjdCBteV9jYXJkX2hlYWRlciAqKSBjcC0+cnhfYnVmOworCQkJaWYgKGhlYWRlcl9pc19vayhocCkpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBjcC0+cnhfZG1hLCBjcC0+cnhfbGVuLAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcGFzc190b191cHBlcl9sYXllcnMoY3AtPnJ4X2J1Zik7CisJCQkJbWFrZV9hbmRfc2V0dXBfbmV3X3J4X2J1ZihjcCk7CisJCQl9IGVsc2UgeworCQkJCS8qIEp1c3Qgc3luYyB0aGUgYnVmZmVyIGFuZCBnaXZlIGl0IGJhY2sKKwkJCQkgKiB0byB0aGUgY2FyZC4KKwkJCQkgKi8KKwkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoY3AtPnBkZXYsCisJCQkJCQkJICAgICAgIGNwLT5yeF9kbWEsCisJCQkJCQkJICAgICAgIGNwLT5yeF9sZW4sCisJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZ2l2ZV9yeF9idWZfdG9fY2FyZChjcCk7CisJCQl9CisJCX0KKwl9CisKK0RyaXZlcnMgY29udmVydGVkIGZ1bGx5IHRvIHRoaXMgaW50ZXJmYWNlIHNob3VsZCBub3QgdXNlIHZpcnRfdG9fYnVzIGFueQorbG9uZ2VyLCBub3Igc2hvdWxkIHRoZXkgdXNlIGJ1c190b192aXJ0LiBTb21lIGRyaXZlcnMgaGF2ZSB0byBiZSBjaGFuZ2VkIGEKK2xpdHRsZSBiaXQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbG9uZ2VyIGFuIGVxdWl2YWxlbnQgdG8gYnVzX3RvX3ZpcnQgaW4gdGhlCitkeW5hbWljIERNQSBtYXBwaW5nIHNjaGVtZSAtIHlvdSBoYXZlIHRvIGFsd2F5cyBzdG9yZSB0aGUgRE1BIGFkZHJlc3NlcworcmV0dXJuZWQgYnkgdGhlIHBjaV9hbGxvY19jb25zaXN0ZW50LCBwY2lfcG9vbF9hbGxvYywgYW5kIHBjaV9tYXBfc2luZ2xlCitjYWxscyAocGNpX21hcF9zZyBzdG9yZXMgdGhlbSBpbiB0aGUgc2NhdHRlcmxpc3QgaXRzZWxmIGlmIHRoZSBwbGF0Zm9ybQorc3VwcG9ydHMgZHluYW1pYyBETUEgbWFwcGluZyBpbiBoYXJkd2FyZSkgaW4geW91ciBkcml2ZXIgc3RydWN0dXJlcyBhbmQvb3IKK2luIHRoZSBjYXJkIHJlZ2lzdGVycy4KKworQWxsIFBDSSBkcml2ZXJzIHNob3VsZCBiZSB1c2luZyB0aGVzZSBpbnRlcmZhY2VzIHdpdGggbm8gZXhjZXB0aW9ucy4KK0l0IGlzIHBsYW5uZWQgdG8gY29tcGxldGVseSByZW1vdmUgdmlydF90b19idXMoKSBhbmQgYnVzX3RvX3ZpcnQoKSBhcwordGhleSBhcmUgZW50aXJlbHkgZGVwcmVjYXRlZC4gIFNvbWUgcG9ydHMgYWxyZWFkeSBkbyBub3QgcHJvdmlkZSB0aGVzZQorYXMgaXQgaXMgaW1wb3NzaWJsZSB0byBjb3JyZWN0bHkgc3VwcG9ydCB0aGVtLgorCisJCTY0LWJpdCBETUEgYW5kIERBQyBjeWNsZSBzdXBwb3J0CisKK0RvIHlvdSB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgdGV4dCBhYm92ZT8gIEdyZWF0LCB0aGVuIHlvdSBhbHJlYWR5Citrbm93IGhvdyB0byB1c2UgNjQtYml0IERNQSBhZGRyZXNzaW5nIHVuZGVyIExpbnV4LiAgU2ltcGx5IG1ha2UKK3RoZSBhcHByb3ByaWF0ZSBwY2lfc2V0X2RtYV9tYXNrKCkgY2FsbHMgYmFzZWQgdXBvbiB5b3VyIGNhcmRzCitjYXBhYmlsaXRpZXMsIHRoZW4gdXNlIHRoZSBtYXBwaW5nIEFQSXMgYWJvdmUuCisKK0l0IGlzIHRoYXQgc2ltcGxlLgorCitXZWxsLCBub3QgZm9yIHNvbWUgb2RkIGRldmljZXMuICBTZWUgdGhlIG5leHQgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24KK2Fib3V0IHRoYXQuCisKKwlEQUMgQWRkcmVzc2luZyBmb3IgQWRkcmVzcyBTcGFjZSBIdW5ncnkgRGV2aWNlcworCitUaGVyZSBleGlzdHMgYSBjbGFzcyBvZiBkZXZpY2VzIHdoaWNoIGRvIG5vdCBtZXNoIHdlbGwgd2l0aCB0aGUgUENJCitETUEgbWFwcGluZyBBUEkuICBCeSBkZWZpbml0aW9uIHRoZXNlICJtYXBwaW5ncyIgYXJlIGEgZmluaXRlCityZXNvdXJjZS4gIFRoZSBudW1iZXIgb2YgdG90YWwgYXZhaWxhYmxlIG1hcHBpbmdzIHBlciBidXMgaXMgcGxhdGZvcm0KK3NwZWNpZmljLCBidXQgdGhlcmUgd2lsbCBhbHdheXMgYmUgYSByZWFzb25hYmxlIGFtb3VudC4KKworV2hhdCBpcyAicmVhc29uYWJsZSI/ICBSZWFzb25hYmxlIG1lYW5zIHRoYXQgbmV0d29ya2luZyBhbmQgYmxvY2sgSS9PCitkZXZpY2VzIG5lZWQgbm90IHdvcnJ5IGFib3V0IHVzaW5nIHRvbyBtYW55IG1hcHBpbmdzLgorCitBcyBhbiBleGFtcGxlIG9mIGEgcHJvYmxlbWF0aWMgZGV2aWNlLCBjb25zaWRlciBjb21wdXRlIGNsdXN0ZXIgY2FyZHMuCitUaGV5IGNhbiBwb3RlbnRpYWxseSBuZWVkIHRvIGFjY2VzcyBnaWdhYnl0ZXMgb2YgbWVtb3J5IGF0IG9uY2UgdmlhCitETUEuICBEeW5hbWljIG1hcHBpbmdzIGFyZSB1bnN1aXRhYmxlIGZvciB0aGlzIGtpbmQgb2YgYWNjZXNzIHBhdHRlcm4uCisKK1RvIHRoaXMgZW5kIHdlJ3ZlIHByb3ZpZGVkIGEgc21hbGwgQVBJIGJ5IHdoaWNoIGEgZGV2aWNlIGRyaXZlcgorbWF5IHVzZSBEQUMgY3ljbGVzIHRvIGRpcmVjdGx5IGFkZHJlc3MgYWxsIG9mIHBoeXNpY2FsIG1lbW9yeS4KK05vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgdGhpcywgYnV0IG1vc3QgZG8uICBJdCBpcyBlYXN5IHRvIGRldGVybWluZQord2hldGhlciB0aGUgcGxhdGZvcm0gd2lsbCB3b3JrIHByb3Blcmx5IGF0IHByb2JlIHRpbWUuCisKK0ZpcnN0LCB1bmRlcnN0YW5kIHRoYXQgdGhlcmUgbWF5IGJlIGEgU0VWRVJFIHBlcmZvcm1hbmNlIHBlbmFsdHkgZm9yCit1c2luZyB0aGVzZSBpbnRlcmZhY2VzIG9uIHNvbWUgcGxhdGZvcm1zLiAgVGhlcmVmb3JlLCB5b3UgTVVTVCBvbmx5Cit1c2UgdGhlc2UgaW50ZXJmYWNlcyBpZiBpdCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkLiAgJTk5IG9mIGRldmljZXMgY2FuCit1c2UgdGhlIG5vcm1hbCBBUElzIHdpdGhvdXQgYW55IHByb2JsZW1zLgorCitOb3RlIHRoYXQgZm9yIHN0cmVhbWluZyB0eXBlIG1hcHBpbmdzIHlvdSBtdXN0IGVpdGhlciB1c2UgdGhlc2UKK2ludGVyZmFjZXMsIG9yIHRoZSBkeW5hbWljIG1hcHBpbmcgaW50ZXJmYWNlcyBhYm92ZS4gIFlvdSBtYXkgbm90IG1peAordXNhZ2Ugb2YgYm90aCBmb3IgdGhlIHNhbWUgZGV2aWNlLiAgU3VjaCBhbiBhY3QgaXMgaWxsZWdhbCBhbmQgaXMKK2d1YXJhbnRlZWQgdG8gcHV0IGEgYmFuYW5hIGluIHlvdXIgdGFpbHBpcGUuCisKK0hvd2V2ZXIsIGNvbnNpc3RlbnQgbWFwcGluZ3MgbWF5IGluIGZhY3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCit0aGVzZSBpbnRlcmZhY2VzLiAgUmVtZW1iZXIgdGhhdCwgYXMgZGVmaW5lZCwgY29uc2lzdGVudCBtYXBwaW5ncyBhcmUKK2Fsd2F5cyBnb2luZyB0byBiZSBTQUMgYWRkcmVzc2FibGUuCisKK1RoZSBmaXJzdCB0aGluZyB5b3VyIGRyaXZlciBuZWVkcyB0byBkbyBpcyBxdWVyeSB0aGUgUENJIHBsYXRmb3JtCitsYXllciB3aXRoIHlvdXIgZGV2aWNlcyBEQUMgYWRkcmVzc2luZyBjYXBhYmlsaXRpZXM6CisKKwlpbnQgcGNpX2RhY19zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBtYXNrKTsKKworVGhpcyByb3V0aW5lIGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gcGNpX3NldF9kbWFfbWFzay4gIFlvdSBtYXkgbm90Cit1c2UgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2VzIGlmIHRoaXMgcm91dGluZSBmYWlscy4KKworTmV4dCwgRE1BIGFkZHJlc3NlcyB1c2luZyB0aGlzIEFQSSBhcmUga2VwdCB0cmFjayBvZiB1c2luZyB0aGUKK2RtYTY0X2FkZHJfdCB0eXBlLiAgSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYW55CitEQUMgYWRkcmVzcyB0aGUgcGxhdGZvcm0gbGF5ZXIgd2lsbCBnaXZlIHRvIHlvdSBmcm9tIHRoZSBmb2xsb3dpbmcKK3JvdXRpbmVzLiAgSWYgeW91IGhhdmUgY29uc2lzdGVudCBtYXBwaW5ncyBhcyB3ZWxsLCB5b3Ugc3RpbGwKK3VzZSBwbGFpbiBkbWFfYWRkcl90IHRvIGtlZXAgdHJhY2sgb2YgdGhvc2UuCisKK0FsbCBtYXBwaW5ncyBvYnRhaW5lZCBoZXJlIHdpbGwgYmUgZGlyZWN0LiAgVGhlIG1hcHBpbmdzIGFyZSBub3QKK3RyYW5zbGF0ZWQsIGFuZCB0aGlzIGlzIHRoZSBwdXJwb3NlIG9mIHRoaXMgZGlhbGVjdCBvZiB0aGUgRE1BIEFQSS4KKworQWxsIHJvdXRpbmVzIHdvcmsgd2l0aCBwYWdlL29mZnNldCBwYWlycy4gIFRoaXMgaXMgdGhlIF9PTkxZXyB3YXkgdG8gCitwb3J0YWJseSByZWZlciB0byBhbnkgcGllY2Ugb2YgbWVtb3J5LiAgSWYgeW91IGhhdmUgYSBjcHUgcG9pbnRlcgorKHdoaWNoIG1heSBiZSB2YWxpZGx5IERNQSdkIHRvbykgeW91IG1heSBlYXNpbHkgb2J0YWluIHRoZSBwYWdlCithbmQgb2Zmc2V0IHVzaW5nIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShwdHIpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocHRyKTsKKworSGVyZSBhcmUgdGhlIGludGVyZmFjZXM6CisKKwlkbWE2NF9hZGRyX3QgcGNpX2RhY19wYWdlX3RvX2RtYShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSBpbnQgZGlyZWN0aW9uKTsKKworVGhlIERBQyBhZGRyZXNzIGZvciB0aGUgdHVwbGUgUEFHRS9PRkZTRVQgYXJlIHJldHVybmVkLiAgVGhlIGRpcmVjdGlvbgorYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgZm9yIHBjaV97bWFwLHVubWFwfV9zaW5nbGUoKS4gIFRoZSBzYW1lIHJ1bGVzCitmb3IgY3B1L2RldmljZSBhY2Nlc3MgYXBwbHkgaGVyZSBhcyBmb3IgdGhlIHN0cmVhbWluZyBtYXBwaW5nCitpbnRlcmZhY2VzLiAgVG8gcmVpdGVyYXRlOgorCisJVGhlIGNwdSBtYXkgdG91Y2ggdGhlIGJ1ZmZlciBiZWZvcmUgcGNpX2RhY19wYWdlX3RvX2RtYS4KKwlUaGUgZGV2aWNlIG1heSB0b3VjaCB0aGUgYnVmZmVyIGFmdGVyIHBjaV9kYWNfcGFnZV90b19kbWEKKwlpcyBtYWRlLCBidXQgdGhlIGNwdSBtYXkgTk9ULgorCitXaGVuIHRoZSBETUEgdHJhbnNmZXIgaXMgY29tcGxldGUsIGludm9rZToKKworCXZvaWQgcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgICBkbWE2NF9hZGRyX3QgZG1hX2FkZHIsCisJCQkJCSAgICAgc2l6ZV90IGxlbiwgaW50IGRpcmVjdGlvbik7CisKK1RoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgQ1BVIGxvb2tzIGF0IHRoZSBidWZmZXIgYWdhaW4uCitUaGlzIGludGVyZmFjZSBiZWhhdmVzIGlkZW50aWNhbGx5IHRvIHBjaV9kbWFfc3luY197c2luZ2xlLHNnfV9mb3JfY3B1KCkuCisKK0FuZCBsaWtld2lzZSwgaWYgeW91IHdpc2ggdG8gbGV0IHRoZSBkZXZpY2UgZ2V0IGJhY2sgYXQgdGhlIGJ1ZmZlciBhZnRlcgordGhlIGNwdSBoYXMgcmVhZC93cml0dGVuIGl0LCBpbnZva2U6CisKKwl2b2lkIHBjaV9kYWNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCQlkbWE2NF9hZGRyX3QgZG1hX2FkZHIsCisJCQkJCQlzaXplX3QgbGVuLCBpbnQgZGlyZWN0aW9uKTsKKworYmVmb3JlIGxldHRpbmcgdGhlIGRldmljZSBhY2Nlc3MgdGhlIERNQSBhcmVhIGFnYWluLgorCitJZiB5b3UgbmVlZCB0byBnZXQgYmFjayB0byB0aGUgUEFHRS9PRkZTRVQgdHVwbGUgZnJvbSBhIGRtYTY0X2FkZHJfdAordGhlIGZvbGxvd2luZyBpbnRlcmZhY2VzIGFyZSBwcm92aWRlZDoKKworCXN0cnVjdCBwYWdlICpwY2lfZGFjX2RtYV90b19wYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgZG1hNjRfYWRkcl90IGRtYV9hZGRyKTsKKwl1bnNpZ25lZCBsb25nIHBjaV9kYWNfZG1hX3RvX29mZnNldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgIGRtYTY0X2FkZHJfdCBkbWFfYWRkcik7CisKK1RoaXMgaXMgcG9zc2libGUgd2l0aCB0aGUgREFDIGludGVyZmFjZXMgcHVyZWx5IGJlY2F1c2UgdGhleSBhcmUKK25vdCB0cmFuc2xhdGVkIGluIGFueSB3YXkuCisKKwkJT3B0aW1pemluZyBVbm1hcCBTdGF0ZSBTcGFjZSBDb25zdW1wdGlvbgorCitPbiBtYW55IHBsYXRmb3JtcywgcGNpX3VubWFwX3tzaW5nbGUscGFnZX0oKSBpcyBzaW1wbHkgYSBub3AuCitUaGVyZWZvcmUsIGtlZXBpbmcgdHJhY2sgb2YgdGhlIG1hcHBpbmcgYWRkcmVzcyBhbmQgbGVuZ3RoIGlzIGEgd2FzdGUKK29mIHNwYWNlLiAgSW5zdGVhZCBvZiBmaWxsaW5nIHlvdXIgZHJpdmVycyB1cCB3aXRoIGlmZGVmcyBhbmQgdGhlIGxpa2UKK3RvICJ3b3JrIGFyb3VuZCIgdGhpcyAod2hpY2ggd291bGQgZGVmZWF0IHRoZSB3aG9sZSBwdXJwb3NlIG9mIGEKK3BvcnRhYmxlIEFQSSkgdGhlIGZvbGxvd2luZyBmYWNpbGl0aWVzIGFyZSBwcm92aWRlZC4KKworQWN0dWFsbHksIGluc3RlYWQgb2YgZGVzY3JpYmluZyB0aGUgbWFjcm9zIG9uZSBieSBvbmUsIHdlJ2xsCit0cmFuc2Zvcm0gc29tZSBleGFtcGxlIGNvZGUuCisKKzEpIFVzZSBERUNMQVJFX1BDSV9VTk1BUF97QUREUixMRU59IGluIHN0YXRlIHNhdmluZyBzdHJ1Y3R1cmVzLgorICAgRXhhbXBsZSwgYmVmb3JlOgorCisJc3RydWN0IHJpbmdfc3RhdGUgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlkbWFfYWRkcl90IG1hcHBpbmc7CisJCV9fdTMyIGxlbjsKKwl9OworCisgICBhZnRlcjoKKworCXN0cnVjdCByaW5nX3N0YXRlIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQorCQlERUNMQVJFX1BDSV9VTk1BUF9MRU4obGVuKQorCX07CisKKyAgIE5PVEU6IERPIE5PVCBwdXQgYSBzZW1pY29sb24gYXQgdGhlIGVuZCBvZiB0aGUgREVDTEFSRV8qKCkKKyAgICAgICAgIG1hY3JvLgorCisyKSBVc2UgcGNpX3VubWFwX3thZGRyLGxlbn1fc2V0IHRvIHNldCB0aGVzZSB2YWx1ZXMuCisgICBFeGFtcGxlLCBiZWZvcmU6CisKKwlyaW5ncC0+bWFwcGluZyA9IEZPTzsKKwlyaW5ncC0+bGVuID0gQkFSOworCisgICBhZnRlcjoKKworCXBjaV91bm1hcF9hZGRyX3NldChyaW5ncCwgbWFwcGluZywgRk9PKTsKKwlwY2lfdW5tYXBfbGVuX3NldChyaW5ncCwgbGVuLCBCQVIpOworCiszKSBVc2UgcGNpX3VubWFwX3thZGRyLGxlbn0gdG8gYWNjZXNzIHRoZXNlIHZhbHVlcy4KKyAgIEV4YW1wbGUsIGJlZm9yZToKKworCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcmluZ3AtPm1hcHBpbmcsIHJpbmdwLT5sZW4sCisJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworICAgYWZ0ZXI6CisKKwlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCisJCQkgcGNpX3VubWFwX2FkZHIocmluZ3AsIG1hcHBpbmcpLAorCQkJIHBjaV91bm1hcF9sZW4ocmluZ3AsIGxlbiksCisJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworSXQgcmVhbGx5IHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LiAgV2UgdHJlYXQgdGhlIEFERFIgYW5kIExFTgorc2VwYXJhdGVseSwgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSBmb3IgYW4gaW1wbGVtZW50YXRpb24gdG8gb25seQorbmVlZCB0aGUgYWRkcmVzcyBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSB1bm1hcCBvcGVyYXRpb24uCisKKwkJCVBsYXRmb3JtIElzc3VlcworCitJZiB5b3UgYXJlIGp1c3Qgd3JpdGluZyBkcml2ZXJzIGZvciBMaW51eCBhbmQgZG8gbm90IG1haW50YWluCithbiBhcmNoaXRlY3R1cmUgcG9ydCBmb3IgdGhlIGtlcm5lbCwgeW91IGNhbiBzYWZlbHkgc2tpcCBkb3duCit0byAiQ2xvc2luZyIuCisKKzEpIFN0cnVjdCBzY2F0dGVybGlzdCByZXF1aXJlbWVudHMuCisKKyAgIFN0cnVjdCBzY2F0dGVybGlzdCBtdXN0IGNvbnRhaW4sIGF0IGEgbWluaW11bSwgdGhlIGZvbGxvd2luZworICAgbWVtYmVyczoKKworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKKworICAgVGhlIGJhc2UgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYnkgYSAicGFnZStvZmZzZXQiIHBhaXIuCisKKyAgIFByZXZpb3VzIHZlcnNpb25zIG9mIHN0cnVjdCBzY2F0dGVybGlzdCBjb250YWluZWQgYSAidm9pZCAqYWRkcmVzcyIKKyAgIGZpZWxkIHRoYXQgd2FzIHNvbWV0aW1lcyB1c2VkIGluc3RlYWQgb2YgcGFnZStvZmZzZXQuICBBcyBvZiBMaW51eAorICAgMi41LiwgcGFnZStvZmZzZXQgaXMgYWx3YXlzIHVzZWQsIGFuZCB0aGUgImFkZHJlc3MiIGZpZWxkIGhhcyBiZWVuCisgICBkZWxldGVkLgorCisyKSBNb3JlIHRvIGNvbWUuLi4KKworCQkJSGFuZGxpbmcgRXJyb3JzCisKK0RNQSBhZGRyZXNzIHNwYWNlIGlzIGxpbWl0ZWQgb24gc29tZSBhcmNoaXRlY3R1cmVzIGFuZCBhbiBhbGxvY2F0aW9uCitmYWlsdXJlIGNhbiBiZSBkZXRlcm1pbmVkIGJ5OgorCistIGNoZWNraW5nIGlmIHBjaV9hbGxvY19jb25zaXN0ZW50IHJldHVybnMgTlVMTCBvciBwY2lfbWFwX3NnIHJldHVybnMgMAorCistIGNoZWNraW5nIHRoZSByZXR1cm5lZCBkbWFfYWRkcl90IG9mIHBjaV9tYXBfc2luZ2xlIGFuZCBwY2lfbWFwX3BhZ2UKKyAgYnkgdXNpbmcgcGNpX2RtYV9tYXBwaW5nX2Vycm9yKCk6CisKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisKKwlkbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoZG1hX2hhbmRsZSkpIHsKKwkJLyoKKwkJICogcmVkdWNlIGN1cnJlbnQgRE1BIG1hcHBpbmcgdXNhZ2UsCisJCSAqIGRlbGF5IGFuZCB0cnkgYWdhaW4gbGF0ZXIgb3IKKwkJICogcmVzZXQgZHJpdmVyLgorCQkgKi8KKwl9CisKKwkJCSAgIENsb3NpbmcKKworVGhpcyBkb2N1bWVudCwgYW5kIHRoZSBBUEkgaXRzZWxmLCB3b3VsZCBub3QgYmUgaW4gaXQncyBjdXJyZW50Citmb3JtIHdpdGhvdXQgdGhlIGZlZWRiYWNrIGFuZCBzdWdnZXN0aW9ucyBmcm9tIG51bWVyb3VzIGluZGl2aWR1YWxzLgorV2Ugd291bGQgbGlrZSB0byBzcGVjaWZpY2FsbHkgbWVudGlvbiwgaW4gbm8gcGFydGljdWxhciBvcmRlciwgdGhlCitmb2xsb3dpbmcgcGVvcGxlOgorCisJUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KKwlMZW8gRGFndW0gPGRhZ3VtQGJhcnJlbC5lbmdyLnNnaS5jb20+CisJUmFsZiBCYWVjaGxlIDxyYWxmQG9zcy5zZ2kuY29tPgorCUdyYW50IEdydW5kbGVyIDxncnVuZGxlckBjdXAuaHAuY29tPgorCUpheSBFc3RhYnJvb2sgPEpheS5Fc3RhYnJvb2tAY29tcGFxLmNvbT4KKwlUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisJQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVhQHN1c2UuZGU+CisJSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKwlEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMTAzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMCwwICsxLDE5NSBAQAorIyMjCisjIFRoaXMgbWFrZWZpbGUgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUga2VybmVsIGRvY3VtZW50YXRpb24sCisjIHByaW1hcmlseSBiYXNlZCBvbiBpbi1saW5lIGNvbW1lbnRzIGluIHZhcmlvdXMgc291cmNlIGZpbGVzLgorIyBTZWUgRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0IGZvciBpbnN0cnVjdGlvbiBpbiBob3cKKyMgdG8gZHVjdW1lbnQgdGhlIFNSQyAtIGFuZCBob3cgdG8gcmVhZCBpdC4KKyMgVG8gYWRkIGEgbmV3IGJvb2sgdGhlIG9ubHkgc3RlcCByZXF1aXJlZCBpcyB0byBhZGQgdGhlIGJvb2sgdG8gdGhlCisjIGxpc3Qgb2YgRE9DQk9PS1MuCisKK0RPQ0JPT0tTIDo9IHdhbmJvb2sueG1sIHo4NTMwYm9vay54bWwgbWNhYm9vay54bWwgdmlkZW9ib29rLnhtbCBcCisJICAgIGtlcm5lbC1oYWNraW5nLnhtbCBrZXJuZWwtbG9ja2luZy54bWwgdmlhLWF1ZGlvLnhtbCBcCisJICAgIGRldmljZWlvYm9vay54bWwgcHJvY2ZzLWd1aWRlLnhtbCB0dWxpcC11c2VyLnhtbCBcCisJICAgIHdyaXRpbmdfdXNiX2RyaXZlci54bWwgc2NzaWRyaXZlcnMueG1sIHNpczkwMC54bWwgXAorCSAgICBrZXJuZWwtYXBpLnhtbCBqb3VybmFsLWFwaS54bWwgbHNtLnhtbCB1c2IueG1sIFwKKwkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbAorCisjIyMKKyMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CisjICAgICAgICAgICAgICAoeG1sZG9jcykKKyMgZmlsZS50bXBsIC0tPiBmaWxlLnhtbCArLS0+IGZpbGUucHMgICAocHNkb2NzKQorIyAgICAgICAgICAgICAgICAgICAgICAgICstLT4gZmlsZS5wZGYgIChwZGZkb2NzKQorIyAgICAgICAgICAgICAgICAgICAgICAgICstLT4gRElSPWZpbGUgIChodG1sZG9jcykKKyMgICAgICAgICAgICAgICAgICAgICAgICArLS0+IG1hbi8gICAgICAobWFuZG9jcykKKworIyMjCisjIFRoZSB0YXJnZXRzIHRoYXQgbWF5IGJlIHVzZWQuCisuUEhPTlk6CXhtbGRvY3Mgc2dtbGRvY3MgcHNkb2NzIHBkZmRvY3MgaHRtbGRvY3MgbWFuZG9jcyBpbnN0YWxsbWFuZG9jcworCitCT09LUyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoRE9DQk9PS1MpKQoreG1sZG9jczogJChCT09LUykKK3NnbWxkb2NzOiB4bWxkb2NzCisKK1BTIDo9ICQocGF0c3Vic3QgJS54bWwsICUucHMsICQoQk9PS1MpKQorcHNkb2NzOiAkKFBTKQorCitQREYgOj0gJChwYXRzdWJzdCAlLnhtbCwgJS5wZGYsICQoQk9PS1MpKQorcGRmZG9jczogJChQREYpCisKK0hUTUwgOj0gJChwYXRzdWJzdCAlLnhtbCwgJS5odG1sLCAkKEJPT0tTKSkKK2h0bWxkb2NzOiAkKEhUTUwpCisKK01BTiA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLjksICQoQk9PS1MpKQorbWFuZG9jczogJChNQU4pCisKK2luc3RhbGxtYW5kb2NzOiBtYW5kb2NzCisJJChNQUtFTUFOKSBpbnN0YWxsIERvY3VtZW50YXRpb24vRG9jQm9vay9tYW4KKworIyMjCisjRXh0ZXJuYWwgcHJvZ3JhbXMgdXNlZAorS0VSTkVMRE9DID0gc2NyaXB0cy9rZXJuZWwtZG9jCitET0NQUk9DICAgPSBzY3JpcHRzL2Jhc2ljL2RvY3Byb2MKK1NQTElUTUFOICA9ICQoUEVSTCkgJChzcmN0cmVlKS9zY3JpcHRzL3NwbGl0LW1hbgorTUFLRU1BTiAgID0gJChQRVJMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbWFrZW1hbgorCisjIyMKKyMgRE9DUFJPQyBpcyB1c2VkIGZvciB0d28gcHVycG9zZXM6CisjIDEpIFRvIGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBsaXN0IGZvciBhIC50bXBsIGZpbGUKKyMgMikgVG8gcHJlcHJvY2VzcyBhIC50bXBsIGZpbGUgYW5kIGNhbGwga2VybmVsLWRvYyB3aXRoCisjICAgICBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzLgorIyBUaGUgZm9sbG93aW5nIHJ1bGVzIGFyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSAueG1sIGRvY3VtZW50YXRpb24KKyMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIHRhcmdldHMuIChwcywgcGRmLCBodG1sKS4KK3F1aWV0X2NtZF9kb2Nwcm9jID0gRE9DUFJPQyAkQAorICAgICAgY21kX2RvY3Byb2MgPSBTUkNUUkVFPSQoc3JjdHJlZSkvICQoRE9DUFJPQykgZG9jICQ8ID4kQAorZGVmaW5lIHJ1bGVfZG9jcHJvYworCXNldCAtZTsJCQkJCQkJCVwKKyAgICAgICAgJChpZiAkKCQocXVpZXQpY21kXyQoMSkpLGVjaG8gJyAgJCgkKHF1aWV0KWNtZF8kKDEpKSc7KSAJXAorICAgICAgICAkKGNtZF8kKDEpKTsgCQkJCQkJCVwKKyAgICAgICAgKCAJCQkJCQkJCVwKKyAgICAgICAgICBlY2hvICdjbWRfJEAgOj0gJChjbWRfJCgxKSknOyAJCQkJXAorICAgICAgICAgIGVjaG8gJEA6IGBTUkNUUkVFPSQoc3JjdHJlZSkgJChET0NQUk9DKSBkZXBlbmQgJDxgOyAJCVwKKyAgICAgICAgKSA+ICQoZGlyICRAKS4kKG5vdGRpciAkQCkuY21kCitlbmRlZgorCislLnhtbDogJS50bXBsIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfcnVsZSxkb2Nwcm9jKQorCisjIyMKKyNSZWFkIGluIGFsbCBzYXZlZCBkZXBlbmRlbmN5IGZpbGVzIAorY21kX2ZpbGVzIDo9ICQod2lsZGNhcmQgJChmb3JlYWNoIGYsJChCT09LUyksJChkaXIgJChmKSkuJChub3RkaXIgJChmKSkuY21kKSkKKworaWZuZXEgKCQoY21kX2ZpbGVzKSwpCisgIGluY2x1ZGUgJChjbWRfZmlsZXMpCitlbmRpZgorCisjIyMKKyMgQ2hhbmdlcyBpbiBrZXJuZWwtZG9jIGZvcmNlIGEgcmVidWlsZCBvZiBhbGwgZG9jdW1lbnRhdGlvbgorJChCT09LUyk6ICQoS0VSTkVMRE9DKQorCisjIyMKKyMgcHJvY2ZzIGd1aWRlIHVzZXMgYSAuYyBmaWxlIGFzIGV4YW1wbGUgY29kZS4KKyMgVGhpcyByZXF1aXJlcyBhbiBleHBsaWNpdCBkZXBlbmRlbmN5CitDLXByb2Nmcy1leGFtcGxlID0gcHJvY2ZzX2V4YW1wbGUueG1sCitDLXByb2Nmcy1leGFtcGxlMiA9ICQoYWRkcHJlZml4ICQob2JqKS8sJChDLXByb2Nmcy1leGFtcGxlKSkKKyQob2JqKS9wcm9jZnMtZ3VpZGUueG1sOiAkKEMtcHJvY2ZzLWV4YW1wbGUyKQorCisjIyMKKyMgUnVsZXMgdG8gZ2VuZXJhdGUgcG9zdHNjcmlwdCwgUERGIGFuZCBIVE1MCisjIGRiMmh0bWwgY3JlYXRlcyBhIGRpcmVjdG9yeS4gR2VuZXJhdGUgYSBodG1sIGZpbGUgdXNlZCBmb3IgdGltZXN0YW1wCisKK3F1aWV0X2NtZF9kYjJwcyA9IERCMlBTICAgJEAKKyAgICAgIGNtZF9kYjJwcyA9IGRiMnBzIC1vICQoZGlyICRAKSAkPAorJS5wcyA6ICUueG1sCisJQCh3aGljaCBkYjJwcyA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCBEb2NCb29rIHN0eWxlc2hlZXRzICoqKiI7IFwKKwkgIGV4aXQgMSkKKwkkKGNhbGwgY21kLGRiMnBzKQorCitxdWlldF9jbWRfZGIycGRmID0gREIyUERGICAkQAorICAgICAgY21kX2RiMnBkZiA9IGRiMnBkZiAtbyAkKGRpciAkQCkgJDwKKyUucGRmIDogJS54bWwKKwlAKHdoaWNoIGRiMnBkZiA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCBEb2NCb29rIHN0eWxlc2hlZXRzICoqKiI7IFwKKwkgIGV4aXQgMSkKKwkkKGNhbGwgY21kLGRiMnBkZikKKworcXVpZXRfY21kX2RiMmh0bWwgPSBEQjJIVE1MICRACisgICAgICBjbWRfZGIyaHRtbCA9IGRiMmh0bWwgLW8gJChwYXRzdWJzdCAlLmh0bWwsJSwkQCkgJDwgJiYJCSAgICAgIFwKKwkJZWNobyAnPGEgSFJFRj0iJChwYXRzdWJzdCAlLmh0bWwsJSwkKG5vdGRpciAkQCkpL2Jvb2sxLmh0bWwiPiBcCisgICAgICAgICBHb3RvICQocGF0c3Vic3QgJS5odG1sLCUsJChub3RkaXIgJEApKTwvYT48cD4nID4gJEAKKworJS5odG1sOgklLnhtbAorCUAod2hpY2ggZGIyaHRtbCA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCBEb2NCb29rIHN0eWxlc2hlZXRzICoqKiI7IFwKKwkgIGV4aXQgMSkKKwlAcm0gLXJmICRAICQocGF0c3Vic3QgJS5odG1sLCUsJEApCisJJChjYWxsIGNtZCxkYjJodG1sKQorCUBpZiBbICEgLXogIiQoUE5HLSQoYmFzZW5hbWUgJChub3RkaXIgJEApKSkiIF07IHRoZW4gXAorICAgICAgICAgICAgY3AgJChQTkctJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpKSAkKHBhdHN1YnN0ICUuaHRtbCwlLCRAKTsgZmkKKworIyMjCisjIFJ1bGUgdG8gZ2VuZXJhdGUgbWFuIGZpbGVzIC0gb3V0cHV0IGlzIHBsYWNlZCBpbiB0aGUgbWFuIHN1YmRpcmVjdG9yeQorCislLjk6CSUueG1sCitpZm5lcSAoJChLQlVJTERfU1JDKSwpCisJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbgorZW5kaWYKKwkkKFNQTElUTUFOKSAkPCAkKG9ianRyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYW4gIiQoVkVSU0lPTikuJChQQVRDSExFVkVMKS4kKFNVQkxFVkVMKSIKKwkkKE1BS0VNQU4pIGNvbnZlcnQgJChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuICQ8CisKKyMjIworIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0cyBhbmQgUE5HIGltZ2FnZXMgZnJvbSAuZmlnIGZvcm1hdCBmaWxlcworcXVpZXRfY21kX2ZpZzJlcHMgPSBGSUcyRVBTICRACisgICAgICBjbWRfZmlnMmVwcyA9IGZpZzJkZXYgLUxlcHMgJDwgJEAKKworJS5lcHM6ICUuZmlnCisJQCh3aGljaCBmaWcyZGV2ID4gL2Rldi9udWxsIDI+JjEpIHx8IFwKKwkgKGVjaG8gIioqKiBZb3UgbmVlZCB0byBpbnN0YWxsIHRyYW5zZmlnICoqKiI7IFwKKwkgIGV4aXQgMSkKKwkkKGNhbGwgY21kLGZpZzJlcHMpCisKK3F1aWV0X2NtZF9maWcycG5nID0gRklHMlBORyAkQAorICAgICAgY21kX2ZpZzJwbmcgPSBmaWcyZGV2IC1McG5nICQ8ICRACisKKyUucG5nOiAlLmZpZworCUAod2hpY2ggZmlnMmRldiA+IC9kZXYvbnVsbCAyPiYxKSB8fCBcCisJIChlY2hvICIqKiogWW91IG5lZWQgdG8gaW5zdGFsbCB0cmFuc2ZpZyAqKioiOyBcCisJICBleGl0IDEpCisJJChjYWxsIGNtZCxmaWcycG5nKQorCisjIyMKKyMgUnVsZSB0byBjb252ZXJ0IGEgLmMgZmlsZSB0byBpbmxpbmUgWE1MIGRvY3VtZW50YXRpb24KKyUueG1sOiAlLmMKKwlAZWNobyAnICBHRU4gICAgICRAJworCUAoICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICBlY2hvICI8cHJvZ3JhbWxpc3Rpbmc+IjsgICBcCisJICAgZXhwYW5kIC0tdGFicz04IDwgJDwgfCAgICAgXAorCSAgIHNlZCAtZSAicy8mL1xcJmFtcDsvZyIgICAgIFwKKwkgICAgICAgLWUgInMvPC9cXCZsdDsvZyIgICAgICBcCisJICAgICAgIC1lICJzLz4vXFwmZ3Q7L2ciOyAgICAgXAorCSAgIGVjaG8gIjwvcHJvZ3JhbWxpc3Rpbmc+IikgID4gJEAKKworIyMjCisjIEhlbHAgdGFyZ2V0cyBhcyB1c2VkIGJ5IHRoZSB0b3AtbGV2ZWwgbWFrZWZpbGUKK2RvY2hlbHA6CisJQGVjaG8gICcgIExpbnV4IGtlcm5lbCBpbnRlcm5hbCBkb2N1bWVudGF0aW9uIGluIGRpZmZlcmVudCBmb3JtYXRzOicKKwlAZWNobyAgJyAgeG1sZG9jcyAoWE1MIERvY0Jvb2spLCBwc2RvY3MgKFBvc3RzY3JpcHQpLCBwZGZkb2NzIChQREYpJworCUBlY2hvICAnICBodG1sZG9jcyAoSFRNTCksIG1hbmRvY3MgKG1hbiBwYWdlcywgdXNlIGluc3RhbGxtYW5kb2NzIHRvIGluc3RhbGwpJworCisjIyMKKyMgVGVtcG9yYXJ5IGZpbGVzIGxlZnQgYnkgdmFyaW91cyB0b29scworY2xlYW4tZmlsZXMgOj0gJChET0NCT09LUykgXAorCSQocGF0c3Vic3QgJS54bWwsICUuZHZpLCAgJChET0NCT09LUykpIFwKKwkkKHBhdHN1YnN0ICUueG1sLCAlLmF1eCwgICQoRE9DQk9PS1MpKSBcCisJJChwYXRzdWJzdCAlLnhtbCwgJS50ZXgsICAkKERPQ0JPT0tTKSkgXAorCSQocGF0c3Vic3QgJS54bWwsICUubG9nLCAgJChET0NCT09LUykpIFwKKwkkKHBhdHN1YnN0ICUueG1sLCAlLm91dCwgICQoRE9DQk9PS1MpKSBcCisJJChwYXRzdWJzdCAlLnhtbCwgJS5wcywgICAkKERPQ0JPT0tTKSkgXAorCSQocGF0c3Vic3QgJS54bWwsICUucGRmLCAgJChET0NCT09LUykpIFwKKwkkKHBhdHN1YnN0ICUueG1sLCAlLmh0bWwsICQoRE9DQk9PS1MpKSBcCisJJChwYXRzdWJzdCAlLnhtbCwgJS45LCAgICAkKERPQ0JPT0tTKSkgXAorCSQoQy1wcm9jZnMtZXhhbXBsZSkKKworY2xlYW4tZGlycyA6PSAkKHBhdHN1YnN0ICUueG1sLCUsJChET0NCT09LUykpCisKKyNtYW4gcHV0IGZpbGVzIGluIG1hbiBzdWJkaXIgLSB0cmF2ZXJzZSBkb3duCitzdWJkaXItIDo9IG1hbi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQxZjJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZWlvYm9vay50bXBsCkBAIC0wLDAgKzEsMzQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IkRvaW5nSU8iPgorIDxib29raW5mbz4KKyAgPHRpdGxlPkJ1cy1JbmRlcGVuZGVudCBEZXZpY2UgQWNjZXNzZXM8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPk1hdHRoZXc8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5XaWxjb3g8L3N1cm5hbWU+CisgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD5tYXR0aGV3QHdpbC5jeDwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPkFsYW48L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5Db3g8L3N1cm5hbWU+CisgICAgPGFmZmlsaWF0aW9uPgorICAgICA8YWRkcmVzcz4KKyAgICAgIDxlbWFpbD5hbGFuQHJlZGhhdC5jb208L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAxPC95ZWFyPgorICAgPGhvbGRlcj5NYXR0aGV3IFdpbGNveDwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICA8cGFyYT4KKwlMaW51eCBwcm92aWRlcyBhbiBBUEkgd2hpY2ggYWJzdHJhY3RzIHBlcmZvcm1pbmcgSU8gYWNyb3NzIGFsbCBidXNzZXMKKwlhbmQgZGV2aWNlcywgYWxsb3dpbmcgZGV2aWNlIGRyaXZlcnMgdG8gYmUgd3JpdHRlbiBpbmRlcGVuZGVudGx5IG9mCisJYnVzIHR5cGUuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJidWdzIj4KKyAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KKyAgPHBhcmE+CisJTm9uZS4JCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJtbWlvIj4KKyAgICA8dGl0bGU+TWVtb3J5IE1hcHBlZCBJTzwvdGl0bGU+CisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPkdldHRpbmcgQWNjZXNzIHRvIHRoZSBEZXZpY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisJVGhlIG1vc3Qgd2lkZWx5IHN1cHBvcnRlZCBmb3JtIG9mIElPIGlzIG1lbW9yeSBtYXBwZWQgSU8uCisJVGhhdCBpcywgYSBwYXJ0IG9mIHRoZSBDUFUncyBhZGRyZXNzIHNwYWNlIGlzIGludGVycHJldGVkCisJbm90IGFzIGFjY2Vzc2VzIHRvIG1lbW9yeSwgYnV0IGFzIGFjY2Vzc2VzIHRvIGEgZGV2aWNlLiAgU29tZQorCWFyY2hpdGVjdHVyZXMgZGVmaW5lIGRldmljZXMgdG8gYmUgYXQgYSBmaXhlZCBhZGRyZXNzLCBidXQgbW9zdAorCWhhdmUgc29tZSBtZXRob2Qgb2YgZGlzY292ZXJpbmcgZGV2aWNlcy4gIFRoZSBQQ0kgYnVzIHdhbGsgaXMgYQorCWdvb2QgZXhhbXBsZSBvZiBzdWNoIGEgc2NoZW1lLglUaGlzIGRvY3VtZW50IGRvZXMgbm90IGNvdmVyIGhvdworCXRvIHJlY2VpdmUgc3VjaCBhbiBhZGRyZXNzLCBidXQgYXNzdW1lcyB5b3UgYXJlIHN0YXJ0aW5nIHdpdGggb25lLgorCVBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgb2YgdHlwZSB1bnNpZ25lZCBsb25nLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJVGhpcyBhZGRyZXNzIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gIEluc3RlYWQsIHRvIGdldCBhbgorCWFkZHJlc3Mgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBkZXNjcmliZWQKKwliZWxvdywgeW91IHNob3VsZCBjYWxsIDxmdW5jdGlvbj5pb3JlbWFwPC9mdW5jdGlvbj4uCisJQW4gYWRkcmVzcyBzdWl0YWJsZSBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2lsbCBiZSByZXR1cm5lZCB0byB5b3UuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCUFmdGVyIHlvdSd2ZSBmaW5pc2hlZCB1c2luZyB0aGUgZGV2aWNlIChzYXksIGluIHlvdXIgbW9kdWxlJ3MKKwlleGl0IHJvdXRpbmUpLCBjYWxsIDxmdW5jdGlvbj5pb3VubWFwPC9mdW5jdGlvbj4gaW4gb3JkZXIgdG8gcmV0dXJuCisJdGhlIGFkZHJlc3Mgc3BhY2UgdG8gdGhlIGtlcm5lbC4gIE1vc3QgYXJjaGl0ZWN0dXJlcyBhbGxvY2F0ZSBuZXcKKwlhZGRyZXNzIHNwYWNlIGVhY2ggdGltZSB5b3UgY2FsbCA8ZnVuY3Rpb24+aW9yZW1hcDwvZnVuY3Rpb24+LCBhbmQKKwl0aGV5IGNhbiBydW4gb3V0IHVubGVzcyB5b3UgY2FsbCA8ZnVuY3Rpb24+aW91bm1hcDwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+CisgICAgICA8dGl0bGU+QWNjZXNzaW5nIHRoZSBkZXZpY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisJVGhlIHBhcnQgb2YgdGhlIGludGVyZmFjZSBtb3N0IHVzZWQgYnkgZHJpdmVycyBpcyByZWFkaW5nIGFuZAorCXdyaXRpbmcgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgb24gdGhlIGRldmljZS4JTGludXggcHJvdmlkZXMKKwlpbnRlcmZhY2VzIHRvIHJlYWQgYW5kIHdyaXRlIDgtYml0LCAxNi1iaXQsIDMyLWJpdCBhbmQgNjQtYml0CisJcXVhbnRpdGllcy4gIER1ZSB0byBhIGhpc3RvcmljYWwgYWNjaWRlbnQsIHRoZXNlIGFyZSBuYW1lZCBieXRlLAorCXdvcmQsIGxvbmcgYW5kIHF1YWQgYWNjZXNzZXMuICBCb3RoIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIGFyZQorCXN1cHBvcnRlZDsgdGhlcmUgaXMgbm8gcHJlZmV0Y2ggc3VwcG9ydCBhdCB0aGlzIHRpbWUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVRoZSBmdW5jdGlvbnMgYXJlIG5hbWVkIDxmdW5jdGlvbj5yZWFkYjwvZnVuY3Rpb24+LAorCTxmdW5jdGlvbj5yZWFkdzwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+cmVhZGw8L2Z1bmN0aW9uPiwKKwk8ZnVuY3Rpb24+cmVhZHE8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPnJlYWRiX3JlbGF4ZWQ8L2Z1bmN0aW9uPiwKKwk8ZnVuY3Rpb24+cmVhZHdfcmVsYXhlZDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+cmVhZGxfcmVsYXhlZDwvZnVuY3Rpb24+LAorCTxmdW5jdGlvbj5yZWFkcV9yZWxheGVkPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj53cml0ZWI8L2Z1bmN0aW9uPiwKKwk8ZnVuY3Rpb24+d3JpdGV3PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj53cml0ZWw8L2Z1bmN0aW9uPiBhbmQKKwk8ZnVuY3Rpb24+d3JpdGVxPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVNvbWUgZGV2aWNlcyAoc3VjaCBhcyBmcmFtZWJ1ZmZlcnMpIHdvdWxkIGxpa2UgdG8gdXNlIGxhcmdlcgorCXRyYW5zZmVycyB0aGFuIDggYnl0ZXMgYXQgYSB0aW1lLiAgRm9yIHRoZXNlIGRldmljZXMsIHRoZQorCTxmdW5jdGlvbj5tZW1jcHlfdG9pbzwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+bWVtY3B5X2Zyb21pbzwvZnVuY3Rpb24+CisJYW5kIDxmdW5jdGlvbj5tZW1zZXRfaW88L2Z1bmN0aW9uPiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkLgorCURvIG5vdCB1c2UgbWVtc2V0IG9yIG1lbWNweSBvbiBJTyBhZGRyZXNzZXM7IHRoZXkKKwlhcmUgbm90IGd1YXJhbnRlZWQgdG8gY29weSBkYXRhIGluIG9yZGVyLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGUgcmVhZCBhbmQgd3JpdGUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHRvIGJlIG9yZGVyZWQuIFRoYXQgaXMgdGhlCisJY29tcGlsZXIgaXMgbm90IHBlcm1pdHRlZCB0byByZW9yZGVyIHRoZSBJL08gc2VxdWVuY2UuIFdoZW4gdGhlIAorCW9yZGVyaW5nIGNhbiBiZSBjb21waWxlciBvcHRpbWlzZWQsIHlvdSBjYW4gdXNlIDxmdW5jdGlvbj4KKwlfX3JlYWRiPC9mdW5jdGlvbj4gYW5kIGZyaWVuZHMgdG8gaW5kaWNhdGUgdGhlIHJlbGF4ZWQgb3JkZXJpbmcuIFVzZSAKKwl0aGlzIHdpdGggY2FyZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJV2hpbGUgdGhlIGJhc2ljIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCB0byBiZSBzeW5jaHJvbm91cyB3aXRoIHJlc3BlY3QKKwl0byBlYWNoIG90aGVyIGFuZCBvcmRlcmVkIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyIHRoZSBidXNzZXMgdGhlCisJZGV2aWNlcyBzaXQgb24gbWF5IHRoZW1zZWx2ZXMgaGF2ZSBhc3luY2hyb25pY2l0eS4gSW4gcGFydGljdWxhciBtYW55CisJYXV0aG9ycyBhcmUgYnVybmVkIGJ5IHRoZSBmYWN0IHRoYXQgUENJIGJ1cyB3cml0ZXMgYXJlIHBvc3RlZAorCWFzeW5jaHJvbm91c2x5LiBBIGRyaXZlciBhdXRob3IgbXVzdCBpc3N1ZSBhIHJlYWQgZnJvbSB0aGUgc2FtZQorCWRldmljZSB0byBlbnN1cmUgdGhhdCB3cml0ZXMgaGF2ZSBvY2N1cnJlZCBpbiB0aGUgc3BlY2lmaWMgY2FzZXMgdGhlCisJYXV0aG9yIGNhcmVzLiBUaGlzIGtpbmQgb2YgcHJvcGVydHkgY2Fubm90IGJlIGhpZGRlbiBmcm9tIGRyaXZlcgorCXdyaXRlcnMgaW4gdGhlIEFQSS4gIEluIHNvbWUgY2FzZXMsIHRoZSByZWFkIHVzZWQgdG8gZmx1c2ggdGhlIGRldmljZQorCW1heSBiZSBleHBlY3RlZCB0byBmYWlsIChpZiB0aGUgY2FyZCBpcyByZXNldHRpbmcsIGZvciBleGFtcGxlKS4gIEluCisJdGhhdCBjYXNlLCB0aGUgcmVhZCBzaG91bGQgYmUgZG9uZSBmcm9tIGNvbmZpZyBzcGFjZSwgd2hpY2ggaXMKKwlndWFyYW50ZWVkIHRvIHNvZnQtZmFpbCBpZiB0aGUgY2FyZCBkb2Vzbid0IHJlc3BvbmQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBmbHVzaGluZyBhIHdyaXRlIHRvIGEgZGV2aWNlIHdoZW4KKwl0aGUgZHJpdmVyIHdvdWxkIGxpa2UgdG8gZW5zdXJlIHRoZSB3cml0ZSdzIGVmZmVjdHMgYXJlIHZpc2libGUgcHJpb3IKKwl0byBjb250aW51aW5nIGV4ZWN1dGlvbi4KKyAgICAgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorc3RhdGljIGlubGluZSB2b2lkCitxbGExMjgwX2Rpc2FibGVfaW50cnMoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQoreworCXN0cnVjdCBkZXZpY2VfcmVnICpyZWc7CisKKwlyZWcgPSBoYS0+aW9iYXNlOworCS8qIGRpc2FibGUgcmlzYyBhbmQgaG9zdCBpbnRlcnJ1cHRzICovCisJV1JUX1JFR19XT1JEKCZhbXA7cmVnLT5pY3RybCwgMCk7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHJlYWQgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYWJvdmUgd3JpdGUKKwkgKiBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSB3ZSByZXR1cm4gZnJvbSB0aGlzCisJICogZnVuY3Rpb24uCisJICovCisJUkRfUkVHX1dPUkQoJmFtcDtyZWctPmljdHJsKTsKKwloYS0+ZmxhZ3MuaW50c19lbmFibGVkID0gMDsKK30KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgIDxwYXJhPgorCUluIGFkZGl0aW9uIHRvIHdyaXRlIHBvc3RpbmcsIG9uIHNvbWUgbGFyZ2UgbXVsdGlwcm9jZXNzaW5nIHN5c3RlbXMKKwkoZS5nLiBTR0kgQ2hhbGxlbmdlLCBPcmlnaW4gYW5kIEFsdGl4IG1hY2hpbmVzKSBwb3N0ZWQgd3JpdGVzIHdvbid0CisJYmUgc3Ryb25nbHkgb3JkZXJlZCBjb21pbmcgZnJvbSBkaWZmZXJlbnQgQ1BVcy4gIFRodXMgaXQncyBpbXBvcnRhbnQKKwl0byBwcm9wZXJseSBwcm90ZWN0IHBhcnRzIG9mIHlvdXIgZHJpdmVyIHRoYXQgZG8gbWVtb3J5LW1hcHBlZCB3cml0ZXMKKwl3aXRoIGxvY2tzIGFuZCB1c2UgdGhlIDxmdW5jdGlvbj5tbWlvd2I8L2Z1bmN0aW9uPiB0byBtYWtlIHN1cmUgdGhleQorCWFycml2ZSBpbiB0aGUgb3JkZXIgaW50ZW5kZWQuICBJc3N1aW5nIGEgcmVndWxhciA8ZnVuY3Rpb24+cmVhZFgKKwk8L2Z1bmN0aW9uPiB3aWxsIGFsc28gZW5zdXJlIHdyaXRlIG9yZGVyaW5nLCBidXQgc2hvdWxkIG9ubHkgYmUgdXNlZAorCXdoZW4gdGhlIGRyaXZlciBoYXMgdG8gYmUgc3VyZSB0aGF0IHRoZSB3cml0ZSBoYXMgYWN0dWFsbHkgYXJyaXZlZAorCWF0IHRoZSBkZXZpY2UgKG5vdCB0aGF0IGl0J3Mgc2ltcGx5IG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIG90aGVyCisJd3JpdGVzKSwgc2luY2UgYSBmdWxsIDxmdW5jdGlvbj5yZWFkWDwvZnVuY3Rpb24+IGlzIGEgcmVsYXRpdmVseQorCWV4cGVuc2l2ZSBvcGVyYXRpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCUdlbmVyYWxseSwgb25lIHNob3VsZCB1c2UgPGZ1bmN0aW9uPm1taW93YjwvZnVuY3Rpb24+IHByaW9yIHRvCisJcmVsZWFzaW5nIGEgc3BpbmxvY2sgdGhhdCBwcm90ZWN0cyByZWdpb25zIHVzaW5nIDxmdW5jdGlvbj53cml0ZWIKKwk8L2Z1bmN0aW9uPiBvciBzaW1pbGFyIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBzdXJyb3VuZGVkIGJ5IDxmdW5jdGlvbj4KKwlyZWFkYjwvZnVuY3Rpb24+IGNhbGxzLCB3aGljaCB3aWxsIGVuc3VyZSBvcmRlcmluZyBhbmQgZmx1c2hpbmcuICBUaGUKKwlmb2xsb3dpbmcgcHNldWRvY29kZSBpbGx1c3RyYXRlcyB3aGF0IG1pZ2h0IG9jY3VyIGlmIHdyaXRlIG9yZGVyaW5nCisJaXNuJ3QgZ3VhcmFudGVlZCB2aWEgPGZ1bmN0aW9uPm1taW93YjwvZnVuY3Rpb24+IG9yIG9uZSBvZiB0aGUKKwk8ZnVuY3Rpb24+cmVhZFg8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuCisgICAgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KK0NQVSBBOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCitDUFUgQTogIC4uLgorQ1BVIEE6ICB3cml0ZWwobmV3dmFsLCByaW5nX3B0cik7CitDUFUgQTogIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCisgICAgICAgIC4uLgorQ1BVIEI6ICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldl9sb2NrLCBmbGFncykKK0NQVSBCOiAgd3JpdGVsKG5ld3ZhbDIsIHJpbmdfcHRyKTsKK0NQVSBCOiAgLi4uCitDUFUgQjogIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCis8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKwlJbiB0aGUgY2FzZSBhYm92ZSwgbmV3dmFsMiBjb3VsZCBiZSB3cml0dGVuIHRvIHJpbmdfcHRyIGJlZm9yZQorCW5ld3ZhbC4gIEZpeGluZyBpdCBpcyBlYXN5IHRob3VnaDoKKyAgICAgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorQ1BVIEE6ICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldl9sb2NrLCBmbGFncykKK0NQVSBBOiAgLi4uCitDUFUgQTogIHdyaXRlbChuZXd2YWwsIHJpbmdfcHRyKTsKK0NQVSBBOiAgbW1pb3diKCk7IC8qIGVuc3VyZSBubyBvdGhlciB3cml0ZXMgYmVhdCB1cyB0byB0aGUgZGV2aWNlICovCitDUFUgQTogIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXZfbG9jaywgZmxhZ3MpCisgICAgICAgIC4uLgorQ1BVIEI6ICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldl9sb2NrLCBmbGFncykKK0NQVSBCOiAgd3JpdGVsKG5ld3ZhbDIsIHJpbmdfcHRyKTsKK0NQVSBCOiAgLi4uCitDUFUgQjogIG1taW93YigpOworQ1BVIEI6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2X2xvY2ssIGZsYWdzKQorPC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBhcmE+CisJU2VlIHRnMy5jIGZvciBhIHJlYWwgd29ybGQgZXhhbXBsZSBvZiBob3cgdG8gdXNlIDxmdW5jdGlvbj5tbWlvd2IKKwk8L2Z1bmN0aW9uPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlQQ0kgb3JkZXJpbmcgcnVsZXMgYWxzbyBndWFyYW50ZWUgdGhhdCBQSU8gcmVhZCByZXNwb25zZXMgYXJyaXZlCisJYWZ0ZXIgYW55IG91dHN0YW5kaW5nIERNQSB3cml0ZXMgZnJvbSB0aGF0IGJ1cywgc2luY2UgZm9yIHNvbWUgZGV2aWNlcworCXRoZSByZXN1bHQgb2YgYSA8ZnVuY3Rpb24+cmVhZGI8L2Z1bmN0aW9uPiBjYWxsIG1heSBzaWduYWwgdG8gdGhlCisJZHJpdmVyIHRoYXQgYSBETUEgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUuICBJbiBtYW55IGNhc2VzLCBob3dldmVyLAorCXRoZSBkcml2ZXIgbWF5IHdhbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbmV4dAorCTxmdW5jdGlvbj5yZWFkYjwvZnVuY3Rpb24+IGNhbGwgaGFzIG5vIHJlbGF0aW9uIHRvIGFueSBwcmV2aW91cyBETUEKKwl3cml0ZXMgcGVyZm9ybWVkIGJ5IHRoZSBkZXZpY2UuICBUaGUgZHJpdmVyIGNhbiB1c2UKKwk8ZnVuY3Rpb24+cmVhZGJfcmVsYXhlZDwvZnVuY3Rpb24+IGZvciB0aGVzZSBjYXNlcywgYWx0aG91Z2ggb25seQorCXNvbWUgcGxhdGZvcm1zIHdpbGwgaG9ub3IgdGhlIHJlbGF4ZWQgc2VtYW50aWNzLiAgVXNpbmcgdGhlIHJlbGF4ZWQKKwlyZWFkIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYmVuZWZpdHMgb24KKwlwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0LiAgVGhlIHFsYTJ4eHggZHJpdmVyIHByb3ZpZGVzIGV4YW1wbGVzCisJb2YgaG93IHRvIHVzZSA8ZnVuY3Rpb24+cmVhZFhfcmVsYXhlZDwvZnVuY3Rpb24+LiAgSW4gbWFueSBjYXNlcywKKwlhIG1ham9yaXR5IG9mIHRoZSBkcml2ZXIncyA8ZnVuY3Rpb24+cmVhZFg8L2Z1bmN0aW9uPiBjYWxscyBjYW4KKwlzYWZlbHkgYmUgY29udmVydGVkIHRvIDxmdW5jdGlvbj5yZWFkWF9yZWxheGVkPC9mdW5jdGlvbj4gY2FsbHMsIHNpbmNlCisJb25seSBhIGZldyB3aWxsIGluZGljYXRlIG9yIGRlcGVuZCBvbiBETUEgY29tcGxldGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPklTQSBsZWdhY3kgZnVuY3Rpb25zPC90aXRsZT4KKyAgICAgIDxwYXJhPgorCU9uIG9sZGVyIGtlcm5lbHMgKDIuMiBhbmQgZWFybGllcikgdGhlIElTQSBidXMgY291bGQgYmUgcmVhZCBvcgorCXdyaXR0ZW4gd2l0aCB0aGVzZSBmdW5jdGlvbnMgYW5kIHdpdGhvdXQgaW9yZW1hcCBiZWluZyB1c2VkLiBUaGlzIGlzCisJbm8gbG9uZ2VyIHRydWUgaW4gTGludXggMi40LiBBIHNldCBvZiBlcXVpdmFsZW50IGZ1bmN0aW9ucyBleGlzdCBmb3IKKwllYXN5IGxlZ2FjeSBkcml2ZXIgcG9ydGluZy4gVGhlIGZ1bmN0aW9ucyBhdmFpbGFibGUgYXJlIHByZWZpeGVkCisJd2l0aCAnaXNhXycgYW5kIGFyZSA8ZnVuY3Rpb24+aXNhX3JlYWRiPC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPmlzYV93cml0ZWI8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmlzYV9yZWFkdzwvZnVuY3Rpb24+LCAKKwk8ZnVuY3Rpb24+aXNhX3dyaXRldzwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+aXNhX3JlYWRsPC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPmlzYV93cml0ZWw8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmlzYV9tZW1jcHlfZnJvbWlvPC9mdW5jdGlvbj4KKwlhbmQgPGZ1bmN0aW9uPmlzYV9tZW1jcHlfdG9pbzwvZnVuY3Rpb24+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBkcml2ZXJzLCBhbmQgd2lsbAorCWV2ZW50dWFsbHkgYmUgZ29pbmcgYXdheS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlcj4KKyAgICA8dGl0bGU+UG9ydCBTcGFjZSBBY2Nlc3NlczwvdGl0bGU+CisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPlBvcnQgU3BhY2UgRXhwbGFpbmVkPC90aXRsZT4KKworICAgICAgPHBhcmE+CisJQW5vdGhlciBmb3JtIG9mIElPIGNvbW1vbmx5IHN1cHBvcnRlZCBpcyBQb3J0IFNwYWNlLiAgVGhpcyBpcyBhCisJcmFuZ2Ugb2YgYWRkcmVzc2VzIHNlcGFyYXRlIHRvIHRoZSBub3JtYWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UuCisJQWNjZXNzIHRvIHRoZXNlIGFkZHJlc3NlcyBpcyBnZW5lcmFsbHkgbm90IGFzIGZhc3QgYXMgYWNjZXNzZXMKKwl0byB0aGUgbWVtb3J5IG1hcHBlZCBhZGRyZXNzZXMsIGFuZCBpdCBhbHNvIGhhcyBhIHBvdGVudGlhbGx5CisJc21hbGxlciBhZGRyZXNzIHNwYWNlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlVbmxpa2UgbWVtb3J5IG1hcHBlZCBJTywgbm8gcHJlcGFyYXRpb24gaXMgcmVxdWlyZWQKKwl0byBhY2Nlc3MgcG9ydCBzcGFjZS4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdDE+CisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPkFjY2Vzc2luZyBQb3J0IFNwYWNlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorCUFjY2Vzc2VzIHRvIHRoaXMgc3BhY2UgYXJlIHByb3ZpZGVkIHRocm91Z2ggYSBzZXQgb2YgZnVuY3Rpb25zCisJd2hpY2ggYWxsb3cgOC1iaXQsIDE2LWJpdCBhbmQgMzItYml0IGFjY2Vzc2VzOyBhbHNvCisJa25vd24gYXMgYnl0ZSwgd29yZCBhbmQgbG9uZy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKwk8ZnVuY3Rpb24+aW5iPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5pbnc8L2Z1bmN0aW9uPiwKKwk8ZnVuY3Rpb24+aW5sPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5vdXRiPC9mdW5jdGlvbj4sCisJPGZ1bmN0aW9uPm91dHc8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPm91dGw8L2Z1bmN0aW9uPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJU29tZSB2YXJpYW50cyBhcmUgcHJvdmlkZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gIFNvbWUgZGV2aWNlcworCXJlcXVpcmUgdGhhdCBhY2Nlc3NlcyB0byB0aGVpciBwb3J0cyBhcmUgc2xvd2VkIGRvd24uICBUaGlzCisJZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSBhcHBlbmRpbmcgYSA8ZnVuY3Rpb24+X3A8L2Z1bmN0aW9uPgorCXRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLiAgVGhlcmUgYXJlIGFsc28gZXF1aXZhbGVudHMgdG8gbWVtY3B5LgorCVRoZSA8ZnVuY3Rpb24+aW5zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5vdXRzPC9mdW5jdGlvbj4KKwlmdW5jdGlvbnMgY29weSBieXRlcywgd29yZHMgb3IgbG9uZ3MgdG8gdGhlIGdpdmVuIHBvcnQuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyFFaW5jbHVkZS9hc20taTM4Ni9pby5oCisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNDQ0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKQEAgLTAsMCArMSw3NTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iVVNCLUdhZGdldC1BUEkiPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPlVTQiBHYWRnZXQgQVBJIGZvciBMaW51eDwvdGl0bGU+CisgICAgPGRhdGU+MjAgQXVndXN0IDIwMDQ8L2RhdGU+CisgICAgPGVkaXRpb24+MjAgQXVndXN0IDIwMDQ8L2VkaXRpb24+CisgIAorICAgIDxsZWdhbG5vdGljZT4KKyAgICAgICA8cGFyYT4KKwkgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisJIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKwkgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisJIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKwkgdmVyc2lvbi4KKyAgICAgICA8L3BhcmE+CisJICAKKyAgICAgICA8cGFyYT4KKwkgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorCSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisJIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKwkgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgIDwvcGFyYT4KKwkgIAorICAgICAgIDxwYXJhPgorCSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKwkgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorCSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorCSBNQSAwMjExMS0xMzA3IFVTQQorICAgICAgIDwvcGFyYT4KKwkgIAorICAgICAgIDxwYXJhPgorCSBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKwkgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4yMDAzLTIwMDQ8L3llYXI+CisgICAgICA8aG9sZGVyPkRhdmlkIEJyb3duZWxsPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5EYXZpZDwvZmlyc3RuYW1lPiAKKyAgICAgIDxzdXJuYW1lPkJyb3duZWxsPC9zdXJuYW1lPgorICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICA8YWRkcmVzcz48ZW1haWw+ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldDwvZW1haWw+PC9hZGRyZXNzPgorICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICA8L2F1dGhvcj4KKyAgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworPGNoYXB0ZXI+PHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKzxwYXJhPlRoaXMgZG9jdW1lbnQgcHJlc2VudHMgYSBMaW51eC1VU0IgIkdhZGdldCIKK2tlcm5lbCBtb2RlCitBUEksIGZvciB1c2Ugd2l0aGluIHBlcmlwaGVyYWxzIGFuZCBvdGhlciBVU0IgZGV2aWNlcwordGhhdCBlbWJlZCBMaW51eC4KK0l0IHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBBUEkgc3RydWN0dXJlLAorYW5kIHNob3dzIGhvdyB0aGF0IGZpdHMgaW50byBhIHN5c3RlbSBkZXZlbG9wbWVudCBwcm9qZWN0LgorVGhpcyBpcyB0aGUgZmlyc3Qgc3VjaCBBUEkgcmVsZWFzZWQgb24gTGludXggdG8gYWRkcmVzcworYSBudW1iZXIgb2YgaW1wb3J0YW50IHByb2JsZW1zLCBpbmNsdWRpbmc6IDwvcGFyYT4KKworPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydHMgVVNCIDIuMCwgZm9yIGhpZ2ggc3BlZWQgZGV2aWNlcyB3aGljaAorCWNhbiBzdHJlYW0gZGF0YSBhdCBzZXZlcmFsIGRvemVuIG1lZ2FieXRlcyBwZXIgc2Vjb25kLgorCTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5IYW5kbGVzIGRldmljZXMgd2l0aCBkb3plbnMgb2YgZW5kcG9pbnRzIGp1c3QgYXMKKwl3ZWxsIGFzIG9uZXMgd2l0aCBqdXN0IHR3byBmaXhlZC1mdW5jdGlvbiBvbmVzLiAgR2FkZ2V0IGRyaXZlcnMKKwljYW4gYmUgd3JpdHRlbiBzbyB0aGV5J3JlIGVhc3kgdG8gcG9ydCB0byBuZXcgaGFyZHdhcmUuCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkZsZXhpYmxlIGVub3VnaCB0byBleHBvc2UgbW9yZSBjb21wbGV4IFVTQiBkZXZpY2UKKwljYXBhYmlsaXRpZXMgc3VjaCBhcyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucywgbXVsdGlwbGUgaW50ZXJmYWNlcywKKwljb21wb3NpdGUgZGV2aWNlcywKKwlhbmQgYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5ncy4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+VVNCICJPbi1UaGUtR28iIChPVEcpIHN1cHBvcnQsIGluIGNvbmp1bmN0aW9uCisJd2l0aCB1cGRhdGVzIHRvIHRoZSBMaW51eC1VU0IgaG9zdCBzaWRlLgorCTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5TaGFyaW5nIGRhdGEgc3RydWN0dXJlcyBhbmQgQVBJIG1vZGVscyB3aXRoIHRoZQorCUxpbnV4LVVTQiBob3N0IHNpZGUgQVBJLiAgVGhpcyBoZWxwcyB0aGUgT1RHIHN1cHBvcnQsIGFuZAorCWxvb2tzIGZvcndhcmQgdG8gbW9yZS1zeW1tZXRyaWMgZnJhbWV3b3JrcyAod2hlcmUgdGhlIHNhbWUKKwlJL08gbW9kZWwgaXMgdXNlZCBieSBib3RoIGhvc3QgYW5kIGRldmljZSBzaWRlIGRyaXZlcnMpLgorCTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5NaW5pbWFsaXN0LCBzbyBpdCdzIGVhc2llciB0byBzdXBwb3J0IG5ldyBkZXZpY2UKKwljb250cm9sbGVyIGhhcmR3YXJlLiAgSS9PIHByb2Nlc3NpbmcgZG9lc24ndCBpbXBseSBsYXJnZQorCWRlbWFuZHMgZm9yIG1lbW9yeSBvciBDUFUgcmVzb3VyY2VzLgorCTwvcGFyYT48L2xpc3RpdGVtPgorPC9pdGVtaXplZGxpc3Q+CisKKworPHBhcmE+TW9zdCBMaW51eCBkZXZlbG9wZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoaXMgQVBJLCBzaW5jZSB0aGV5CitoYXZlIFVTQiAiaG9zdCIgaGFyZHdhcmUgaW4gYSBQQywgd29ya3N0YXRpb24sIG9yIHNlcnZlci4KK0xpbnV4IHVzZXJzIHdpdGggZW1iZWRkZWQgc3lzdGVtcyBhcmUgbW9yZSBsaWtlbHkgdG8KK2hhdmUgVVNCIHBlcmlwaGVyYWwgaGFyZHdhcmUuCitUbyBkaXN0aW5ndWlzaCBkcml2ZXJzIHJ1bm5pbmcgaW5zaWRlIHN1Y2ggaGFyZHdhcmUgZnJvbSB0aGUKK21vcmUgZmFtaWxpYXIgTGludXggIlVTQiBkZXZpY2UgZHJpdmVycyIsCit3aGljaCBhcmUgaG9zdCBzaWRlIHByb3hpZXMgZm9yIHRoZSByZWFsIFVTQiBkZXZpY2VzLAorYSBkaWZmZXJlbnQgdGVybSBpcyB1c2VkOgordGhlIGRyaXZlcnMgaW5zaWRlIHRoZSBwZXJpcGhlcmFscyBhcmUgIlVTQiBnYWRnZXQgZHJpdmVycyIuCitJbiBVU0IgcHJvdG9jb2wgaW50ZXJhY3Rpb25zLCB0aGUgZGV2aWNlIGRyaXZlciBpcyB0aGUgbWFzdGVyCisob3IgImNsaWVudCBkcml2ZXIiKQorYW5kIHRoZSBnYWRnZXQgZHJpdmVyIGlzIHRoZSBzbGF2ZSAob3IgImZ1bmN0aW9uIGRyaXZlciIpLgorPC9wYXJhPgorCis8cGFyYT5UaGUgZ2FkZ2V0IEFQSSByZXNlbWJsZXMgdGhlIGhvc3Qgc2lkZSBMaW51eC1VU0IgQVBJIGluIHRoYXQgYm90aAordXNlIHF1ZXVlcyBvZiByZXF1ZXN0IG9iamVjdHMgdG8gcGFja2FnZSBJL08gYnVmZmVycywgYW5kIHRob3NlIHJlcXVlc3RzCittYXkgYmUgc3VibWl0dGVkIG9yIGNhbmNlbGVkLgorVGhleSBzaGFyZSBjb21tb24gZGVmaW5pdGlvbnMgZm9yIHRoZSBzdGFuZGFyZCBVU0IKKzxlbXBoYXNpcz5DaGFwdGVyIDk8L2VtcGhhc2lzPiBtZXNzYWdlcywgc3RydWN0dXJlcywgYW5kIGNvbnN0YW50cy4KK0Fsc28sIGJvdGggQVBJcyBiaW5kIGFuZCB1bmJpbmQgZHJpdmVycyB0byBkZXZpY2VzLgorVGhlIEFQSXMgZGlmZmVyIGluIGRldGFpbCwgc2luY2UgdGhlIGhvc3Qgc2lkZSdzIGN1cnJlbnQKK1VSQiBmcmFtZXdvcmsgZXhwb3NlcyBhIG51bWJlciBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzCithbmQgYXNzdW1wdGlvbnMgdGhhdCBhcmUgaW5hcHByb3ByaWF0ZSBmb3IgYSBnYWRnZXQgQVBJLgorV2hpbGUgdGhlIG1vZGVsIGZvciBjb250cm9sIHRyYW5zZmVycyBhbmQgY29uZmlndXJhdGlvbgorbWFuYWdlbWVudCBpcyBuZWNlc3NhcmlseSBkaWZmZXJlbnQgKG9uZSBzaWRlIGlzIGEgaGFyZHdhcmUtbmV1dHJhbCBtYXN0ZXIsCit0aGUgb3RoZXIgaXMgYSBoYXJkd2FyZS1hd2FyZSBzbGF2ZSksIHRoZSBlbmRwb2ludCBJLzAgQVBJIHVzZWQgaGVyZQorc2hvdWxkIGFsc28gYmUgdXNhYmxlIGZvciBhbiBvdmVyaGVhZC1yZWR1Y2VkIGhvc3Qgc2lkZSBBUEkuCis8L3BhcmE+CisKKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9InN0cnVjdHVyZSI+PHRpdGxlPlN0cnVjdHVyZSBvZiBHYWRnZXQgRHJpdmVyczwvdGl0bGU+CisKKzxwYXJhPkEgc3lzdGVtIHJ1bm5pbmcgaW5zaWRlIGEgVVNCIHBlcmlwaGVyYWwKK25vcm1hbGx5IGhhcyBhdCBsZWFzdCB0aHJlZSBsYXllcnMgaW5zaWRlIHRoZSBrZXJuZWwgdG8gaGFuZGxlCitVU0IgcHJvdG9jb2wgcHJvY2Vzc2luZywgYW5kIG1heSBoYXZlIGFkZGl0aW9uYWwgbGF5ZXJzIGluCit1c2VyIHNwYWNlIGNvZGUuCitUaGUgImdhZGdldCIgQVBJIGlzIHVzZWQgYnkgdGhlIG1pZGRsZSBsYXllciB0byBpbnRlcmFjdAord2l0aCB0aGUgbG93ZXN0IGxldmVsICh3aGljaCBkaXJlY3RseSBoYW5kbGVzIGhhcmR3YXJlKS4KKzwvcGFyYT4KKworPHBhcmE+SW4gTGludXgsIGZyb20gdGhlIGJvdHRvbSB1cCwgdGhlc2UgbGF5ZXJzIGFyZToKKzwvcGFyYT4KKworPHZhcmlhYmxlbGlzdD4KKworICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgIDx0ZXJtPjxlbXBoYXNpcz5VU0IgQ29udHJvbGxlciBEcml2ZXI8L2VtcGhhc2lzPjwvdGVybT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT5UaGlzIGlzIHRoZSBsb3dlc3Qgc29mdHdhcmUgbGV2ZWwuCisJSXQgaXMgdGhlIG9ubHkgbGF5ZXIgdGhhdCB0YWxrcyB0byBoYXJkd2FyZSwKKwl0aHJvdWdoIHJlZ2lzdGVycywgZmlmb3MsIGRtYSwgaXJxcywgYW5kIHRoZSBsaWtlLgorCVRoZSA8ZmlsZW5hbWU+Jmx0O2xpbnV4L3VzYl9nYWRnZXQuaCZndDs8L2ZpbGVuYW1lPiBBUEkgYWJzdHJhY3RzCisJdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciBlbmRwb2ludCBoYXJkd2FyZS4KKwlUaGF0IGhhcmR3YXJlIGlzIGV4cG9zZWQgdGhyb3VnaCBlbmRwb2ludCBvYmplY3RzLCB3aGljaCBhY2NlcHQKKwlzdHJlYW1zIG9mIElOL09VVCBidWZmZXJzLCBhbmQgdGhyb3VnaCBjYWxsYmFja3MgdGhhdCBpbnRlcmFjdAorCXdpdGggZ2FkZ2V0IGRyaXZlcnMuCisJU2luY2Ugbm9ybWFsIFVTQiBkZXZpY2VzIG9ubHkgaGF2ZSBvbmUgdXBzdHJlYW0KKwlwb3J0LCB0aGV5IG9ubHkgaGF2ZSBvbmUgb2YgdGhlc2UgZHJpdmVycy4KKwlUaGUgY29udHJvbGxlciBkcml2ZXIgY2FuIHN1cHBvcnQgYW55IG51bWJlciBvZiBkaWZmZXJlbnQKKwlnYWRnZXQgZHJpdmVycywgYnV0IG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIHVzZWQgYXQgYSB0aW1lLgorCTwvcGFyYT4KKworCTxwYXJhPkV4YW1wbGVzIG9mIHN1Y2ggY29udHJvbGxlciBoYXJkd2FyZSBpbmNsdWRlCisJdGhlIFBDSS1iYXNlZCBOZXRDaGlwIDIyODAgVVNCIDIuMCBoaWdoIHNwZWVkIGNvbnRyb2xsZXIsCisJdGhlIFNBLTExeDAgb3IgUFhBLTI1eCBVREMgKGZvdW5kIHdpdGhpbiBtYW55IFBEQXMpLAorCWFuZCBhIHZhcmlldHkgb2Ygb3RoZXIgcHJvZHVjdHMuCisJPC9wYXJhPgorCisJPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVtcGhhc2lzPkdhZGdldCBEcml2ZXI8L2VtcGhhc2lzPjwvdGVybT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT5UaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhpcyBkcml2ZXIgaW1wbGVtZW50cyBoYXJkd2FyZS1uZXV0cmFsCisJVVNCIGZ1bmN0aW9ucywgdXNpbmcgY2FsbHMgdG8gdGhlIGNvbnRyb2xsZXIgZHJpdmVyLgorCUJlY2F1c2Ugc3VjaCBoYXJkd2FyZSB2YXJpZXMgd2lkZWx5IGluIGNhcGFiaWxpdGllcyBhbmQgcmVzdHJpY3Rpb25zLAorCWFuZCBpcyB1c2VkIGluIGVtYmVkZGVkIGVudmlyb25tZW50cyB3aGVyZSBzcGFjZSBpcyBhdCBhIHByZW1pdW0sCisJdGhlIGdhZGdldCBkcml2ZXIgaXMgb2Z0ZW4gY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUKKwl0byB3b3JrIHdpdGggZW5kcG9pbnRzIHN1cHBvcnRlZCBieSBvbmUgcGFydGljdWxhciBjb250cm9sbGVyLgorCUdhZGdldCBkcml2ZXJzIG1heSBiZSBwb3J0YWJsZSB0byBzZXZlcmFsIGRpZmZlcmVudCBjb250cm9sbGVycywKKwl1c2luZyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KKwkoUmVjZW50IGtlcm5lbHMgc3Vic3RhbnRpYWxseSBzaW1wbGlmeSB0aGUgd29yayBpbnZvbHZlZCBpbgorCXN1cHBvcnRpbmcgbmV3IGhhcmR3YXJlLCBieSA8ZW1waGFzaXM+YXV0b2NvbmZpZ3VyaW5nPC9lbXBoYXNpcz4KKwllbmRwb2ludHMgYXV0b21hdGljYWxseSBmb3IgbWFueSBidWxrLW9yaWVudGVkIGRyaXZlcnMuKQorCUdhZGdldCBkcml2ZXIgcmVzcG9uc2liaWxpdGllcyBpbmNsdWRlOgorCTwvcGFyYT4KKwk8aXRlbWl6ZWRsaXN0PgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxpbmcgc2V0dXAgcmVxdWVzdHMgKGVwMCBwcm90b2NvbCByZXNwb25zZXMpCisJCXBvc3NpYmx5IGluY2x1ZGluZyBjbGFzcy1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5CisJCTwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+cmV0dXJuaW5nIGNvbmZpZ3VyYXRpb24gYW5kIHN0cmluZyBkZXNjcmlwdG9ycworCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPihyZSlzZXR0aW5nIGNvbmZpZ3VyYXRpb25zIGFuZCBpbnRlcmZhY2UKKwkJYWx0c2V0dGluZ3MsIGluY2x1ZGluZyBlbmFibGluZyBhbmQgY29uZmlndXJpbmcgZW5kcG9pbnRzCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxpbmcgbGlmZSBjeWNsZSBldmVudHMsIHN1Y2ggYXMgbWFuYWdpbmcKKwkJYmluZGluZ3MgdG8gaGFyZHdhcmUsCisJCVVTQiBzdXNwZW5kL3Jlc3VtZSwgcmVtb3RlIHdha2V1cCwKKwkJYW5kIGRpc2Nvbm5lY3Rpb24gZnJvbSB0aGUgVVNCIGhvc3QuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+bWFuYWdpbmcgSU4gYW5kIE9VVCB0cmFuc2ZlcnMgb24gYWxsIGN1cnJlbnRseQorCQllbmFibGVkIGVuZHBvaW50cworCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L2l0ZW1pemVkbGlzdD4KKworCTxwYXJhPgorCVN1Y2ggZHJpdmVycyBtYXkgYmUgbW9kdWxlcyBvZiBwcm9wcmlldGFyeSBjb2RlLCBhbHRob3VnaAorCXRoYXQgYXBwcm9hY2ggaXMgZGlzY291cmFnZWQgaW4gdGhlIExpbnV4IGNvbW11bml0eS4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGVtcGhhc2lzPlVwcGVyIExldmVsPC9lbXBoYXNpcz48L3Rlcm0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+TW9zdCBnYWRnZXQgZHJpdmVycyBoYXZlIGFuIHVwcGVyIGJvdW5kYXJ5IHRoYXQgY29ubmVjdHMKKwl0byBzb21lIExpbnV4IGRyaXZlciBvciBmcmFtZXdvcmsgaW4gTGludXguCisJVGhyb3VnaCB0aGF0IGJvdW5kYXJ5IGZsb3dzIHRoZSBkYXRhIHdoaWNoIHRoZSBnYWRnZXQgZHJpdmVyCisJcHJvZHVjZXMgYW5kL29yIGNvbnN1bWVzIHRocm91Z2ggcHJvdG9jb2wgdHJhbnNmZXJzIG92ZXIgVVNCLgorCUV4YW1wbGVzIGluY2x1ZGU6CisJPC9wYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJICAgIDxsaXN0aXRlbT48cGFyYT51c2VyIG1vZGUgY29kZSwgdXNpbmcgZ2VuZXJpYyAoZ2FkZ2V0ZnMpCisJICAgICAgICBvciBhcHBsaWNhdGlvbiBzcGVjaWZpYyBmaWxlcyBpbgorCQk8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+CisJCTwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+bmV0d29ya2luZyBzdWJzeXN0ZW0gKGZvciBuZXR3b3JrIGdhZGdldHMsCisJCWxpa2UgdGhlIENEQyBFdGhlcm5ldCBNb2RlbCBnYWRnZXQgZHJpdmVyKQorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPmRhdGEgY2FwdHVyZSBkcml2ZXJzLCBwZXJoYXBzIHZpZGVvNExpbnV4IG9yCisJCSBhIHNjYW5uZXIgZHJpdmVyOyBvciB0ZXN0IGFuZCBtZWFzdXJlbWVudCBoYXJkd2FyZS4KKwkJIDwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+aW5wdXQgc3Vic3lzdGVtIChmb3IgSElEIGdhZGdldHMpCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCSAgICA8bGlzdGl0ZW0+PHBhcmE+c291bmQgc3Vic3lzdGVtIChmb3IgYXVkaW8gZ2FkZ2V0cykKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJICAgIDxsaXN0aXRlbT48cGFyYT5maWxlIHN5c3RlbSAoZm9yIFBUUCBnYWRnZXRzKQorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPmJsb2NrIGkvbyBzdWJzeXN0ZW0gKGZvciB1c2Itc3RvcmFnZSBnYWRnZXRzKQorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPGxpc3RpdGVtPjxwYXJhPi4uLiBhbmQgbW9yZSA8L3BhcmE+PC9saXN0aXRlbT4KKwk8L2l0ZW1pemVkbGlzdD4KKwk8L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZW1waGFzaXM+QWRkaXRpb25hbCBMYXllcnM8L2VtcGhhc2lzPjwvdGVybT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT5PdGhlciBsYXllcnMgbWF5IGV4aXN0LgorCVRoZXNlIGNvdWxkIGluY2x1ZGUga2VybmVsIGxheWVycywgc3VjaCBhcyBuZXR3b3JrIHByb3RvY29sIHN0YWNrcywKKwlhcyB3ZWxsIGFzIHVzZXIgbW9kZSBhcHBsaWNhdGlvbnMgYnVpbGRpbmcgb24gc3RhbmRhcmQgUE9TSVgKKwlzeXN0ZW0gY2FsbCBBUElzIHN1Y2ggYXMKKwk8ZW1waGFzaXM+b3BlbigpPC9lbXBoYXNpcz4sIDxlbXBoYXNpcz5jbG9zZSgpPC9lbXBoYXNpcz4sCisJPGVtcGhhc2lzPnJlYWQoKTwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXM+d3JpdGUoKTwvZW1waGFzaXM+LgorCU9uIG5ld2VyIHN5c3RlbXMsIFBPU0lYIEFzeW5jIEkvTyBjYWxscyBtYXkgYmUgYW4gb3B0aW9uLgorCVN1Y2ggdXNlciBtb2RlIGNvZGUgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgc3ViamVjdCB0bworCXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCis8L3ZhcmlhYmxlbGlzdD4KKworPHBhcmE+T1RHLWNhcGFibGUgc3lzdGVtcyB3aWxsIGFsc28gbmVlZCB0byBpbmNsdWRlIGEgc3RhbmRhcmQgTGludXgtVVNCCitob3N0IHNpZGUgc3RhY2ssCit3aXRoIDxlbXBoYXNpcz51c2Jjb3JlPC9lbXBoYXNpcz4sCitvbmUgb3IgbW9yZSA8ZW1waGFzaXM+SG9zdCBDb250cm9sbGVyIERyaXZlcnM8L2VtcGhhc2lzPiAoSENEcyksCis8ZW1waGFzaXM+VVNCIERldmljZSBEcml2ZXJzPC9lbXBoYXNpcz4gdG8gc3VwcG9ydAordGhlIE9URyAiVGFyZ2V0ZWQgUGVyaXBoZXJhbCBMaXN0IiwKK2FuZCBzbyBmb3J0aC4KK1RoZXJlIHdpbGwgYWxzbyBiZSBhbiA8ZW1waGFzaXM+T1RHIENvbnRyb2xsZXIgRHJpdmVyPC9lbXBoYXNpcz4sCit3aGljaCBpcyB2aXNpYmxlIHRvIGdhZGdldCBhbmQgZGV2aWNlIGRyaXZlciBkZXZlbG9wZXJzIG9ubHkgaW5kaXJlY3RseS4KK1RoYXQgaGVscHMgdGhlIGhvc3QgYW5kIGRldmljZSBzaWRlIFVTQiBjb250cm9sbGVycyBpbXBsZW1lbnQgdGhlCit0d28gbmV3IE9URyBwcm90b2NvbHMgKEhOUCBhbmQgU1JQKS4KK1JvbGVzIHN3aXRjaCAoaG9zdCB0byBwZXJpcGhlcmFsLCBvciB2aWNlIHZlcnNhKSB1c2luZyBITlAKK2R1cmluZyBVU0Igc3VzcGVuZCBwcm9jZXNzaW5nLCBhbmQgU1JQIGNhbiBiZSB2aWV3ZWQgYXMgYQorbW9yZSBiYXR0ZXJ5LWZyaWVuZGx5IGtpbmQgb2YgZGV2aWNlIHdha2V1cCBwcm90b2NvbC4KKzwvcGFyYT4KKworPHBhcmE+T3ZlciB0aW1lLCByZXVzYWJsZSB1dGlsaXRpZXMgYXJlIGV2b2x2aW5nIHRvIGhlbHAgbWFrZSBzb21lCitnYWRnZXQgZHJpdmVyIHRhc2tzIHNpbXBsZXIuCitGb3IgZXhhbXBsZSwgYnVpbGRpbmcgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBmcm9tIHZlY3RvcnMgb2YKK2Rlc2NyaXB0b3JzIGZvciB0aGUgY29uZmlndXJhdGlvbnMgaW50ZXJmYWNlcyBhbmQgZW5kcG9pbnRzIGlzCitub3cgYXV0b21hdGVkLCBhbmQgbWFueSBkcml2ZXJzIG5vdyB1c2UgYXV0b2NvbmZpZ3VyYXRpb24gdG8KK2Nob29zZSBoYXJkd2FyZSBlbmRwb2ludHMgYW5kIGluaXRpYWxpemUgdGhlaXIgZGVzY3JpcHRvcnMuCisKK0EgcG90ZW50aWFsIGV4YW1wbGUgb2YgcGFydGljdWxhciBpbnRlcmVzdAoraXMgY29kZSBpbXBsZW1lbnRpbmcgc3RhbmRhcmQgVVNCLUlGIHByb3RvY29scyBmb3IKK0hJRCwgbmV0d29ya2luZywgc3RvcmFnZSwgb3IgYXVkaW8gY2xhc3Nlcy4KK1NvbWUgZGV2ZWxvcGVycyBhcmUgaW50ZXJlc3RlZCBpbiBLREIgb3IgS0dEQiBob29rcywgdG8gbGV0Cit0YXJnZXQgaGFyZHdhcmUgYmUgcmVtb3RlbHkgZGVidWdnZWQuCitNb3N0IHN1Y2ggVVNCIHByb3RvY29sIGNvZGUgZG9lc24ndCBuZWVkIHRvIGJlIGhhcmR3YXJlLXNwZWNpZmljLAorYW55IG1vcmUgdGhhbiBuZXR3b3JrIHByb3RvY29scyBsaWtlIFgxMSwgSFRUUCwgb3IgTkZTIGFyZS4KK1N1Y2ggZ2FkZ2V0LXNpZGUgaW50ZXJmYWNlIGRyaXZlcnMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgY29tYmluZWQsCit0byBpbXBsZW1lbnQgY29tcG9zaXRlIGRldmljZXMuCis8L3BhcmE+CisKKzwvY2hhcHRlcj4KKworCis8Y2hhcHRlciBpZD0iYXBpIj48dGl0bGU+S2VybmVsIE1vZGUgR2FkZ2V0IEFQSTwvdGl0bGU+CisKKzxwYXJhPkdhZGdldCBkcml2ZXJzIGRlY2xhcmUgdGhlbXNlbHZlcyB0aHJvdWdoIGEKKzxlbXBoYXNpcz5zdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXI8L2VtcGhhc2lzPiwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yCittb3N0IHBhcnRzIG9mIGVudW1lcmF0aW9uIGZvciBhIDxlbXBoYXNpcz5zdHJ1Y3QgdXNiX2dhZGdldDwvZW1waGFzaXM+LgorVGhlIHJlc3BvbnNlIHRvIGEgc2V0X2NvbmZpZ3VyYXRpb24gdXN1YWxseSBpbnZvbHZlcworZW5hYmxpbmcgb25lIG9yIG1vcmUgb2YgdGhlIDxlbXBoYXNpcz5zdHJ1Y3QgdXNiX2VwPC9lbXBoYXNpcz4gb2JqZWN0cworZXhwb3NlZCBieSB0aGUgZ2FkZ2V0LCBhbmQgc3VibWl0dGluZyBvbmUgb3IgbW9yZQorPGVtcGhhc2lzPnN0cnVjdCB1c2JfcmVxdWVzdDwvZW1waGFzaXM+IGJ1ZmZlcnMgdG8gdHJhbnNmZXIgZGF0YS4KK1VuZGVyc3RhbmQgdGhvc2UgZm91ciBkYXRhIHR5cGVzLCBhbmQgdGhlaXIgb3BlcmF0aW9ucywgYW5kCit5b3Ugd2lsbCB1bmRlcnN0YW5kIGhvdyB0aGlzIEFQSSB3b3Jrcy4KKzwvcGFyYT4gCisKKzxub3RlPjx0aXRsZT5JbmNvbXBsZXRlIERhdGEgVHlwZSBEZXNjcmlwdGlvbnM8L3RpdGxlPgorCis8cGFyYT5UaGlzIGRvY3VtZW50YXRpb24gd2FzIHByZXBhcmVkIHVzaW5nIHRoZSBzdGFuZGFyZCBMaW51eAora2VybmVsIDxmaWxlbmFtZT5kb2Nwcm9jPC9maWxlbmFtZT4gdG9vbCwgd2hpY2ggdHVybnMgdGV4dAorYW5kIGluLWNvZGUgY29tbWVudHMgaW50byBTR01MIERvY0Jvb2sgYW5kIHRoZW4gaW50byB1c2FibGUKK2Zvcm1hdHMgc3VjaCBhcyBIVE1MIG9yIFBERi4KK090aGVyIHRoYW4gdGhlICJDaGFwdGVyIDkiIGRhdGEgdHlwZXMsIG1vc3Qgb2YgdGhlIHNpZ25pZmljYW50CitkYXRhIHR5cGVzIGFuZCBmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBoZXJlLgorPC9wYXJhPgorCis8cGFyYT5Ib3dldmVyLCBkb2Nwcm9jIGRvZXMgbm90IHVuZGVyc3RhbmQgYWxsIHRoZSBDIGNvbnN0cnVjdHMKK3RoYXQgYXJlIHVzZWQsIHNvIHNvbWUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaXMgbGlrZWx5IG9taXR0ZWQgZnJvbQord2hhdCB5b3UgYXJlIHJlYWRpbmcuICAKK09uZSBleGFtcGxlIG9mIHN1Y2ggaW5mb3JtYXRpb24gaXMgZW5kcG9pbnQgYXV0b2NvbmZpZ3VyYXRpb24uCitZb3UnbGwgaGF2ZSB0byByZWFkIHRoZSBoZWFkZXIgZmlsZSwgYW5kIHVzZSBleGFtcGxlIHNvdXJjZQorY29kZSAoc3VjaCBhcyB0aGF0IGZvciAiR2FkZ2V0IFplcm8iKSwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgQVBJLgorPC9wYXJhPgorCis8cGFyYT5UaGUgcGFydCBvZiB0aGUgQVBJIGltcGxlbWVudGluZyBzb21lIGJhc2ljCitkcml2ZXIgY2FwYWJpbGl0aWVzIGlzIHNwZWNpZmljIHRvIHRoZSB2ZXJzaW9uIG9mIHRoZQorTGludXgga2VybmVsIHRoYXQncyBpbiB1c2UuCitUaGUgMi42IGtlcm5lbCBpbmNsdWRlcyBhIDxlbXBoYXNpcz5kcml2ZXIgbW9kZWw8L2VtcGhhc2lzPgorZnJhbWV3b3JrIHRoYXQgaGFzIG5vIGFuYWxvZ3VlIG9uIGVhcmxpZXIga2VybmVsczsKK3NvIHRob3NlIHBhcnRzIG9mIHRoZSBnYWRnZXQgQVBJIGFyZSBub3QgZnVsbHkgcG9ydGFibGUuCisoVGhleSBhcmUgaW1wbGVtZW50ZWQgb24gMi40IGtlcm5lbHMsIGJ1dCBpbiBhIGRpZmZlcmVudCB3YXkuKQorVGhlIGRyaXZlciBtb2RlbCBzdGF0ZSBpcyBhbm90aGVyIHBhcnQgb2YgdGhpcyBBUEkgdGhhdCBpcworaWdub3JlZCBieSB0aGUga2VybmVsZG9jIHRvb2xzLgorPC9wYXJhPgorPC9ub3RlPgorCis8cGFyYT5UaGUgY29yZSBBUEkgZG9lcyBub3QgZXhwb3NlCitldmVyeSBwb3NzaWJsZSBoYXJkd2FyZSBmZWF0dXJlLCBvbmx5IHRoZSBtb3N0IHdpZGVseSBhdmFpbGFibGUgb25lcy4KK1RoZXJlIGFyZSBzaWduaWZpY2FudCBoYXJkd2FyZSBmZWF0dXJlcywgc3VjaCBhcyBkZXZpY2UtdG8tZGV2aWNlIERNQQorKHdpdGhvdXQgdGVtcG9yYXJ5IHN0b3JhZ2UgaW4gYSBtZW1vcnkgYnVmZmVyKQordGhhdCB3b3VsZCBiZSBhZGRlZCB1c2luZyBoYXJkd2FyZS1zcGVjaWZpYyBBUElzLgorPC9wYXJhPgorCis8cGFyYT5UaGlzIEFQSSBhbGxvd3MgZHJpdmVycyB0byB1c2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdG8gaGFuZGxlCitlbmRwb2ludCBjYXBhYmlsaXRpZXMgb2YgZGlmZmVyZW50IGhhcmR3YXJlLCBidXQgZG9lc24ndCByZXF1aXJlIHRoYXQuCitIYXJkd2FyZSB0ZW5kcyB0byBoYXZlIGFyYml0cmFyeSByZXN0cmljdGlvbnMsIHJlbGF0aW5nIHRvCit0cmFuc2ZlciB0eXBlcywgYWRkcmVzc2luZywgcGFja2V0IHNpemVzLCBidWZmZXJpbmcsIGFuZCBhdmFpbGFiaWxpdHkuCitBcyBhIHJ1bGUsIHN1Y2ggZGlmZmVyZW5jZXMgb25seSBtYXR0ZXIgZm9yICJlbmRwb2ludCB6ZXJvIiBsb2dpYwordGhhdCBoYW5kbGVzIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50LgorVGhlIEFQSSBzdXBwb3J0cyBsaW1pdGVkIHJ1bi10aW1lCitkZXRlY3Rpb24gb2YgY2FwYWJpbGl0aWVzLCB0aHJvdWdoIG5hbWluZyBjb252ZW50aW9ucyBmb3IgZW5kcG9pbnRzLgorTWFueSBkcml2ZXJzIHdpbGwgYmUgYWJsZSB0byBhdCBsZWFzdCBwYXJ0aWFsbHkgYXV0b2NvbmZpZ3VyZQordGhlbXNlbHZlcy4KK0luIHBhcnRpY3VsYXIsIGRyaXZlciBpbml0IHNlY3Rpb25zIHdpbGwgb2Z0ZW4gaGF2ZSBlbmRwb2ludAorYXV0b2NvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCBzY2FucyB0aGUgaGFyZHdhcmUncyBsaXN0IG9mIGVuZHBvaW50cwordG8gZmluZCBvbmVzIG1hdGNoaW5nIHRoZSBkcml2ZXIgcmVxdWlyZW1lbnRzCisocmVseWluZyBvbiB0aG9zZSBjb252ZW50aW9ucyksIHRvIGVsaW1pbmF0ZSBzb21lIG9mIHRoZSBtb3N0Citjb21tb24gcmVhc29ucyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uCis8L3BhcmE+CisKKzxwYXJhPkxpa2UgdGhlIExpbnV4LVVTQiBob3N0IHNpZGUgQVBJLCB0aGlzIEFQSSBleHBvc2VzCit0aGUgImNodW5reSIgbmF0dXJlIG9mIFVTQiBtZXNzYWdlczogIEkvTyByZXF1ZXN0cyBhcmUgaW4gdGVybXMKK29mIG9uZSBvciBtb3JlICJwYWNrZXRzIiwgYW5kIHBhY2tldCBib3VuZGFyaWVzIGFyZSB2aXNpYmxlIHRvIGRyaXZlcnMuCitDb21wYXJlZCB0byBSUy0yMzIgc2VyaWFsIHByb3RvY29scywgVVNCIHJlc2VtYmxlcworc3luY2hyb25vdXMgcHJvdG9jb2xzIGxpa2UgSERMQworKE4gYnl0ZXMgcGVyIGZyYW1lLCBtdWx0aXBvaW50IGFkZHJlc3NpbmcsIGhvc3QgYXMgdGhlIHByaW1hcnkKK3N0YXRpb24gYW5kIGRldmljZXMgYXMgc2Vjb25kYXJ5IHN0YXRpb25zKQorbW9yZSB0aGFuIGFzeW5jaHJvbm91cyBvbmVzCisodHR5IHN0eWxlOiAgOCBkYXRhIGJpdHMgcGVyIGZyYW1lLCBubyBwYXJpdHksIG9uZSBzdG9wIGJpdCkuCitTbyBmb3IgZXhhbXBsZSB0aGUgY29udHJvbGxlciBkcml2ZXJzIHdvbid0IGJ1ZmZlcgordHdvIHNpbmdsZSBieXRlIHdyaXRlcyBpbnRvIGEgc2luZ2xlIHR3by1ieXRlIFVTQiBJTiBwYWNrZXQsCithbHRob3VnaCBnYWRnZXQgZHJpdmVycyBtYXkgZG8gc28gd2hlbiB0aGV5IGltcGxlbWVudAorcHJvdG9jb2xzIHdoZXJlIHBhY2tldCBib3VuZGFyaWVzIChhbmQgInNob3J0IHBhY2tldHMiKQorYXJlIG5vdCBzaWduaWZpY2FudC4KKzwvcGFyYT4KKworPHNlY3QxIGlkPSJsaWZlY3ljbGUiPjx0aXRsZT5Ecml2ZXIgTGlmZSBDeWNsZTwvdGl0bGU+CisKKzxwYXJhPkdhZGdldCBkcml2ZXJzIG1ha2UgZW5kcG9pbnQgSS9PIHJlcXVlc3RzIHRvIGhhcmR3YXJlIHdpdGhvdXQKK25lZWRpbmcgdG8ga25vdyBtYW55IGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlLCBidXQgZHJpdmVyCitzZXR1cC9jb25maWd1cmF0aW9uIGNvZGUgbmVlZHMgdG8gaGFuZGxlIHNvbWUgZGlmZmVyZW5jZXMuCitVc2UgdGhlIEFQSSBsaWtlIHRoaXM6Cis8L3BhcmE+CisKKzxvcmRlcmVkbGlzdCBudW1lcmF0aW9uPSdhcmFiaWMnPgorCis8bGlzdGl0ZW0+PHBhcmE+UmVnaXN0ZXIgYSBkcml2ZXIgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZSBzaWRlCit1c2IgY29udHJvbGxlciBoYXJkd2FyZSwKK3N1Y2ggYXMgdGhlIG5ldDIyODAgb24gUENJIChVU0IgMi4wKSwKK3NhMTF4MCBvciBweGEyNXggYXMgZm91bmQgaW4gTGludXggUERBcywKK2FuZCBzbyBvbi4KK0F0IHRoaXMgcG9pbnQgdGhlIGRldmljZSBpcyBsb2dpY2FsbHkgaW4gdGhlIFVTQiBjaDkgaW5pdGlhbCBzdGF0ZQorKCJhdHRhY2hlZCIpLCBkcmF3aW5nIG5vIHBvd2VyIGFuZCBub3QgdXNhYmxlCisoc2luY2UgaXQgZG9lcyBub3QgeWV0IHN1cHBvcnQgZW51bWVyYXRpb24pLgorQW55IGhvc3Qgc2hvdWxkIG5vdCBzZWUgdGhlIGRldmljZSwgc2luY2UgaXQncyBub3QKK2FjdGl2YXRlZCB0aGUgZGF0YSBsaW5lIHB1bGx1cCB1c2VkIGJ5IHRoZSBob3N0IHRvCitkZXRlY3QgYSBkZXZpY2UsIGV2ZW4gaWYgVkJVUyBwb3dlciBpcyBhdmFpbGFibGUuCis8L3BhcmE+PC9saXN0aXRlbT4KKworPGxpc3RpdGVtPjxwYXJhPlJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGltcGxlbWVudHMgc29tZSBoaWdoZXIgbGV2ZWwKK2RldmljZSBmdW5jdGlvbi4gIFRoYXQgd2lsbCB0aGVuIGJpbmQoKSB0byBhIHVzYl9nYWRnZXQsIHdoaWNoCithY3RpdmF0ZXMgdGhlIGRhdGEgbGluZSBwdWxsdXAgc29tZXRpbWUgYWZ0ZXIgZGV0ZWN0aW5nIFZCVVMuCis8L3BhcmE+PC9saXN0aXRlbT4KKworPGxpc3RpdGVtPjxwYXJhPlRoZSBoYXJkd2FyZSBkcml2ZXIgY2FuIG5vdyBzdGFydCBlbnVtZXJhdGluZy4KK1RoZSBzdGVwcyBpdCBoYW5kbGVzIGFyZSB0byBhY2NlcHQgVVNCIHBvd2VyIGFuZCBzZXRfYWRkcmVzcyByZXF1ZXN0cy4KK090aGVyIHN0ZXBzIGFyZSBoYW5kbGVkIGJ5IHRoZSBnYWRnZXQgZHJpdmVyLgorSWYgdGhlIGdhZGdldCBkcml2ZXIgbW9kdWxlIGlzIHVubG9hZGVkIGJlZm9yZSB0aGUgaG9zdCBzdGFydHMgdG8KK2VudW1lcmF0ZSwgc3RlcHMgYmVmb3JlIHN0ZXAgNyBhcmUgc2tpcHBlZC4KKzwvcGFyYT48L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+PHBhcmE+VGhlIGdhZGdldCBkcml2ZXIncyBzZXR1cCgpIGNhbGwgcmV0dXJucyB1c2IgZGVzY3JpcHRvcnMsCitiYXNlZCBib3RoIG9uIHdoYXQgdGhlIGJ1cyBpbnRlcmZhY2UgaGFyZHdhcmUgcHJvdmlkZXMgYW5kIG9uIHRoZQorZnVuY3Rpb25hbGl0eSBiZWluZyBpbXBsZW1lbnRlZC4KK1RoYXQgY2FuIGludm9sdmUgYWx0ZXJuYXRlIHNldHRpbmdzIG9yIGNvbmZpZ3VyYXRpb25zLAordW5sZXNzIHRoZSBoYXJkd2FyZSBwcmV2ZW50cyBzdWNoIG9wZXJhdGlvbi4KK0ZvciBPVEcgZGV2aWNlcywgZWFjaCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgaW5jbHVkZXMKK2FuIE9URyBkZXNjcmlwdG9yLgorPC9wYXJhPjwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT48cGFyYT5UaGUgZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIHRoZSBsYXN0IHN0ZXAgb2YgZW51bWVyYXRpb24sCit3aGVuIHRoZSBVU0IgaG9zdCBpc3N1ZXMgYSBzZXRfY29uZmlndXJhdGlvbiBjYWxsLgorSXQgZW5hYmxlcyBhbGwgZW5kcG9pbnRzIHVzZWQgaW4gdGhhdCBjb25maWd1cmF0aW9uLAord2l0aCBhbGwgaW50ZXJmYWNlcyBpbiB0aGVpciBkZWZhdWx0IHNldHRpbmdzLgorVGhhdCBpbnZvbHZlcyB1c2luZyBhIGxpc3Qgb2YgdGhlIGhhcmR3YXJlJ3MgZW5kcG9pbnRzLCBlbmFibGluZyBlYWNoCitlbmRwb2ludCBhY2NvcmRpbmcgdG8gaXRzIGRlc2NyaXB0b3IuCitJdCBtYXkgYWxzbyBpbnZvbHZlIHVzaW5nIDxmdW5jdGlvbj51c2JfZ2FkZ2V0X3ZidXNfZHJhdzwvZnVuY3Rpb24+Cit0byBsZXQgbW9yZSBwb3dlciBiZSBkcmF3biBmcm9tIFZCVVMsIGFzIGFsbG93ZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uLgorRm9yIE9URyBkZXZpY2VzLCBzZXR0aW5nIGEgY29uZmlndXJhdGlvbiBtYXkgYWxzbyBpbnZvbHZlIHJlcG9ydGluZworSE5QIGNhcGFiaWxpdGllcyB0aHJvdWdoIGEgdXNlciBpbnRlcmZhY2UuCis8L3BhcmE+PC9saXN0aXRlbT4KKworPGxpc3RpdGVtPjxwYXJhPkRvIHJlYWwgd29yayBhbmQgcGVyZm9ybSBkYXRhIHRyYW5zZmVycywgcG9zc2libHkgaW52b2x2aW5nCitjaGFuZ2VzIHRvIGludGVyZmFjZSBzZXR0aW5ncyBvciBzd2l0Y2hpbmcgdG8gbmV3IGNvbmZpZ3VyYXRpb25zLCB1bnRpbCB0aGUKK2RldmljZSBpcyBkaXNjb25uZWN0KCllZCBmcm9tIHRoZSBob3N0LgorUXVldWUgYW55IG51bWJlciBvZiB0cmFuc2ZlciByZXF1ZXN0cyB0byBlYWNoIGVuZHBvaW50LgorSXQgbWF5IGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBzZXZlcmFsIHRpbWVzIGJlZm9yZSBiZWluZyBkaXNjb25uZWN0ZWQuCitPbiBkaXNjb25uZWN0LCB0aGUgZHJpdmVycyBnbyBiYWNrIHRvIHN0ZXAgMyAoYWJvdmUpLgorPC9wYXJhPjwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT48cGFyYT5XaGVuIHRoZSBnYWRnZXQgZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCwKK3RoZSBkcml2ZXIgdW5iaW5kKCkgY2FsbGJhY2sgaXMgaXNzdWVkLiAgVGhhdCBsZXRzIHRoZSBjb250cm9sbGVyCitkcml2ZXIgYmUgdW5sb2FkZWQuCis8L3BhcmE+PC9saXN0aXRlbT4KKworPC9vcmRlcmVkbGlzdD4KKworPHBhcmE+RHJpdmVycyB3aWxsIG5vcm1hbGx5IGJlIGFycmFuZ2VkIHNvIHRoYXQganVzdCBsb2FkaW5nIHRoZQorZ2FkZ2V0IGRyaXZlciBtb2R1bGUgKG9yIHN0YXRpY2FsbHkgbGlua2luZyBpdCBpbnRvIGEgTGludXgga2VybmVsKQorYWxsb3dzIHRoZSBwZXJpcGhlcmFsIGRldmljZSB0byBiZSBlbnVtZXJhdGVkLCBidXQgc29tZSBkcml2ZXJzCit3aWxsIGRlZmVyIGVudW1lcmF0aW9uIHVudGlsIHNvbWUgaGlnaGVyIGxldmVsIGNvbXBvbmVudCAobGlrZQorYSB1c2VyIG1vZGUgZGFlbW9uKSBlbmFibGVzIGl0LgorTm90ZSB0aGF0IGF0IHRoaXMgbG93ZXN0IGxldmVsIHRoZXJlIGFyZSBubyBwb2xpY2llcyBhYm91dCBob3cKK2VwMCBjb25maWd1cmF0aW9uIGxvZ2ljIGlzIGltcGxlbWVudGVkLAorZXhjZXB0IHRoYXQgaXQgc2hvdWxkIG9iZXkgVVNCIHNwZWNpZmljYXRpb25zLgorU3VjaCBpc3N1ZXMgYXJlIGluIHRoZSBkb21haW4gb2YgZ2FkZ2V0IGRyaXZlcnMsCitpbmNsdWRpbmcga25vd2luZyBhYm91dCBpbXBsZW1lbnRhdGlvbiBjb25zdHJhaW50cworaW1wb3NlZCBieSBzb21lIFVTQiBjb250cm9sbGVycworb3IgdW5kZXJzdGFuZGluZyB0aGF0IGNvbXBvc2l0ZSBkZXZpY2VzIG1pZ2h0IGhhcHBlbiB0bworYmUgYnVpbHQgYnkgaW50ZWdyYXRpbmcgcmV1c2FibGUgY29tcG9uZW50cy4KKzwvcGFyYT4KKworPHBhcmE+Tm90ZSB0aGF0IHRoZSBsaWZlY3ljbGUgYWJvdmUgY2FuIGJlIHNsaWdodGx5IGRpZmZlcmVudAorZm9yIE9URyBkZXZpY2VzLgorT3RoZXIgdGhhbiBwcm92aWRpbmcgYW4gYWRkaXRpb25hbCBPVEcgZGVzY3JpcHRvciBpbiBlYWNoCitjb25maWd1cmF0aW9uLCBvbmx5IHRoZSBITlAtcmVsYXRlZCBkaWZmZXJlbmNlcyBhcmUgcGFydGljdWxhcmx5Cit2aXNpYmxlIHRvIGRyaXZlciBjb2RlLgorVGhleSBpbnZvbHZlIHJlcG9ydGluZyByZXF1aXJlbWVudHMgZHVyaW5nIHRoZSBTRVRfQ09ORklHVVJBVElPTgorcmVxdWVzdCwgYW5kIHRoZSBvcHRpb24gdG8gaW52b2tlIEhOUCBkdXJpbmcgc29tZSBzdXNwZW5kIGNhbGxiYWNrcy4KK0Fsc28sIFNSUCBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mgb2YKKzxmdW5jdGlvbj51c2JfZ2FkZ2V0X3dha2V1cDwvZnVuY3Rpb24+CitzbGlnaHRseS4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJjaDkiPjx0aXRsZT5VU0IgMi4wIENoYXB0ZXIgOSBUeXBlcyBhbmQgQ29uc3RhbnRzPC90aXRsZT4KKworPHBhcmE+R2FkZ2V0IGRyaXZlcnMKK3JlbHkgb24gY29tbW9uIFVTQiBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMKK2RlZmluZWQgaW4gdGhlCis8ZmlsZW5hbWU+Jmx0O2xpbnV4L3VzYl9jaDkuaCZndDs8L2ZpbGVuYW1lPgoraGVhZGVyIGZpbGUsIHdoaWNoIGlzIHN0YW5kYXJkIGluIExpbnV4IDIuNiBrZXJuZWxzLgorVGhlc2UgYXJlIHRoZSBzYW1lIHR5cGVzIGFuZCBjb25zdGFudHMgdXNlZCBieSBob3N0CitzaWRlIGRyaXZlcnMgKGFuZCB1c2Jjb3JlKS4KKzwvcGFyYT4KKworIUlpbmNsdWRlL2xpbnV4L3VzYl9jaDkuaAorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJjb3JlIj48dGl0bGU+Q29yZSBPYmplY3RzIGFuZCBNZXRob2RzPC90aXRsZT4KKworPHBhcmE+VGhlc2UgYXJlIGRlY2xhcmVkIGluCis8ZmlsZW5hbWU+Jmx0O2xpbnV4L3VzYl9nYWRnZXQuaCZndDs8L2ZpbGVuYW1lPiwKK2FuZCBhcmUgdXNlZCBieSBnYWRnZXQgZHJpdmVycyB0byBpbnRlcmFjdCB3aXRoCitVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMuCis8L3BhcmE+CisKKwk8IS0tIHllZWNoLCB0aGlzIGlzIHVnbHkgaW4gbnNnbWxzIFBERiBvdXRwdXQuCisKKwkgICAgIHRoZSBQREYgYm9va21hcmsgYW5kIHJlZmVudHJ5IG91dHB1dCBuZXN0aW5nIGlzIHdyb25nLAorCSAgICAgYW5kIHRoZSBtZW1iZXIvYXJndW1lbnQgZG9jdW1lbnRhdGlvbiBpbmRlbnRzIHVnbHkuCisKKwkgICAgIHBsdXMgc29tZXRoaW5nIChkb2Nwcm9jPykgYWRkcyB3aGl0ZXNwYWNlIGJlZm9yZSB0aGUKKwkgICAgIGRlc2NyaXB0aXZlIHBhcmFncmFwaCB0ZXh0LCBzbyBpdCBjYW4ndCBsaW5lIHVwIHJpZ2h0CisJICAgICB1bmxlc3MgdGhlIGV4cGxhbmF0aW9ucyBhcmUgdHJpdmlhbC4KKwkgIC0tPgorCishSWluY2x1ZGUvbGludXgvdXNiX2dhZGdldC5oCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InV0aWxzIj48dGl0bGU+T3B0aW9uYWwgVXRpbGl0aWVzPC90aXRsZT4KKworPHBhcmE+VGhlIGNvcmUgQVBJIGlzIHN1ZmZpY2llbnQgZm9yIHdyaXRpbmcgYSBVU0IgR2FkZ2V0IERyaXZlciwKK2J1dCBzb21lIG9wdGlvbmFsIHV0aWxpdGllcyBhcmUgcHJvdmlkZWQgdG8gc2ltcGxpZnkgY29tbW9uIHRhc2tzLgorVGhlc2UgdXRpbGl0aWVzIGluY2x1ZGUgZW5kcG9pbnQgYXV0b2NvbmZpZ3VyYXRpb24uCis8L3BhcmE+CisKKyFFZHJpdmVycy91c2IvZ2FkZ2V0L3VzYnN0cmluZy5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9jb25maWcuYworPCEtLSAhRWRyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMgLS0+Cis8L3NlY3QxPgorCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJjb250cm9sbGVycyI+PHRpdGxlPlBlcmlwaGVyYWwgQ29udHJvbGxlciBEcml2ZXJzPC90aXRsZT4KKworPHBhcmE+VGhlIGZpcnN0IGhhcmR3YXJlIHN1cHBvcnRpbmcgdGhpcyBBUEkgd2FzIHRoZSBOZXRDaGlwIDIyODAKK2NvbnRyb2xsZXIsIHdoaWNoIHN1cHBvcnRzIFVTQiAyLjAgaGlnaCBzcGVlZCBhbmQgaXMgYmFzZWQgb24gUENJLgorVGhpcyBpcyB0aGUgPGZpbGVuYW1lPm5ldDIyODA8L2ZpbGVuYW1lPiBkcml2ZXIgbW9kdWxlLgorVGhlIGRyaXZlciBzdXBwb3J0cyBMaW51eCBrZXJuZWwgdmVyc2lvbnMgMi40IGFuZCAyLjY7Citjb250YWN0IE5ldENoaXAgVGVjaG5vbG9naWVzIGZvciBkZXZlbG9wbWVudCBib2FyZHMgYW5kIHByb2R1Y3QKK2luZm9ybWF0aW9uLgorPC9wYXJhPiAKKworPHBhcmE+T3RoZXIgaGFyZHdhcmUgd29ya2luZyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGluY2x1ZGVzOgorSW50ZWwncyBQWEEgMjV4IGFuZCBJWFA0Mnggc2VyaWVzIHByb2Nlc3NvcnMKKyg8ZmlsZW5hbWU+cHhhMnh4X3VkYzwvZmlsZW5hbWU+KSwKK1Rvc2hpYmEgVEM4NmMwMDEgIkdva3UtUyIgKDxmaWxlbmFtZT5nb2t1X3VkYzwvZmlsZW5hbWU+KSwKK1JlbmVzYXMgU0g3NzA1Lzc3MjcgKDxmaWxlbmFtZT5zaF91ZGM8L2ZpbGVuYW1lPiksCitNZWRpYVEgMTF4eCAoPGZpbGVuYW1lPm1xMTF4eF91ZGM8L2ZpbGVuYW1lPiksCitIeW5peCBITVMzMEM3MjAyICg8ZmlsZW5hbWU+aDcyMDJfdWRjPC9maWxlbmFtZT4pLAorTmF0aW9uYWwgOTMwMy80ICg8ZmlsZW5hbWU+bjk2MDRfdWRjPC9maWxlbmFtZT4pLAorVGV4YXMgSW5zdHJ1bWVudHMgT01BUCAoPGZpbGVuYW1lPm9tYXBfdWRjPC9maWxlbmFtZT4pLAorU2hhcnAgTEg3QTQweCAoPGZpbGVuYW1lPmxoN2E0MHhfdWRjPC9maWxlbmFtZT4pLAorYW5kIG1vcmUuCitNb3N0IG9mIHRob3NlIGFyZSBmdWxsIHNwZWVkIGNvbnRyb2xsZXJzLgorPC9wYXJhPgorCis8cGFyYT5BdCB0aGlzIHdyaXRpbmcsIHRoZXJlIGFyZSBwZW9wbGUgYXQgd29yayBvbiBkcml2ZXJzIGluCit0aGlzIGZyYW1ld29yayBmb3Igc2V2ZXJhbCBvdGhlciBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLAord2l0aCBwbGFucyB0byBtYWtlIG1hbnkgb2YgdGhlbSBiZSB3aWRlbHkgYXZhaWxhYmxlLgorPC9wYXJhPgorCis8IS0tICFFZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyAtLT4KKworPHBhcmE+QSBwYXJ0aWFsIFVTQiBzaW11bGF0b3IsCit0aGUgPGZpbGVuYW1lPmR1bW15X2hjZDwvZmlsZW5hbWU+IGRyaXZlciwgaXMgYXZhaWxhYmxlLgorSXQgY2FuIGFjdCBsaWtlIGEgbmV0MjI4MCwgYSBweGEyNXgsIG9yIGFuIHNhMTF4MCBpbiB0ZXJtcworb2YgYXZhaWxhYmxlIGVuZHBvaW50cyBhbmQgZGV2aWNlIHNwZWVkczsgYW5kIGl0IHNpbXVsYXRlcworY29udHJvbCwgYnVsaywgYW5kIHRvIHNvbWUgZXh0ZW50IGludGVycnVwdCB0cmFuc2ZlcnMuCitUaGF0IGxldHMgeW91IGRldmVsb3Agc29tZSBwYXJ0cyBvZiBhIGdhZGdldCBkcml2ZXIgb24gYSBub3JtYWwgUEMsCit3aXRob3V0IGFueSBzcGVjaWFsIGhhcmR3YXJlLCBhbmQgcGVyaGFwcyB3aXRoIHRoZSBhc3Npc3RhbmNlCitvZiB0b29scyBzdWNoIGFzIEdEQiBydW5uaW5nIHdpdGggVXNlciBNb2RlIExpbnV4LgorQXQgbGVhc3Qgb25lIHBlcnNvbiBoYXMgZXhwcmVzc2VkIGludGVyZXN0IGluIGFkYXB0aW5nIHRoYXQKK2FwcHJvYWNoLCBob29raW5nIGl0IHVwIHRvIGEgc2ltdWxhdG9yIGZvciBhIG1pY3JvY29udHJvbGxlci4KK1N1Y2ggc2ltdWxhdG9ycyBjYW4gaGVscCBkZWJ1ZyBzdWJzeXN0ZW1zIHdoZXJlIHRoZSBydW50aW1lIGhhcmR3YXJlCitpcyB1bmZyaWVuZGx5IHRvIHNvZnR3YXJlIGRldmVsb3BtZW50LCBvciBpcyBub3QgeWV0IGF2YWlsYWJsZS4KKzwvcGFyYT4KKworPHBhcmE+U3VwcG9ydCBmb3Igb3RoZXIgY29udHJvbGxlcnMgaXMgZXhwZWN0ZWQgdG8gYmUgZGV2ZWxvcGVkCithbmQgY29udHJpYnV0ZWQKK292ZXIgdGltZSwgYXMgdGhpcyBkcml2ZXIgZnJhbWV3b3JrIGV2b2x2ZXMuCis8L3BhcmE+CisKKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9ImdhZGdldCI+PHRpdGxlPkdhZGdldCBEcml2ZXJzPC90aXRsZT4KKworPHBhcmE+SW4gYWRkaXRpb24gdG8gPGVtcGhhc2lzPkdhZGdldCBaZXJvPC9lbXBoYXNpcz4KKyh1c2VkIHByaW1hcmlseSBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgd2l0aCBkcml2ZXJzCitmb3IgdXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUpLCBvdGhlciBnYWRnZXQgZHJpdmVycyBleGlzdC4KKzwvcGFyYT4KKworPHBhcmE+VGhlcmUncyBhbiA8ZW1waGFzaXM+ZXRoZXJuZXQ8L2VtcGhhc2lzPiBnYWRnZXQKK2RyaXZlciwgd2hpY2ggaW1wbGVtZW50cyBvbmUgb2YgdGhlIG1vc3QgdXNlZnVsCis8ZW1waGFzaXM+Q29tbXVuaWNhdGlvbnMgRGV2aWNlIENsYXNzPC9lbXBoYXNpcz4gKENEQykgbW9kZWxzLiAgCitPbmUgb2YgdGhlIHN0YW5kYXJkcyBmb3IgY2FibGUgbW9kZW0gaW50ZXJvcGVyYWJpbGl0eSBldmVuCitzcGVjaWZpZXMgdGhlIHVzZSBvZiB0aGlzIGV0aGVybmV0IG1vZGVsIGFzIG9uZSBvZiB0d28KK21hbmRhdG9yeSBvcHRpb25zLgorR2FkZ2V0cyB1c2luZyB0aGlzIGNvZGUgbG9vayB0byBhIFVTQiBob3N0IGFzIGlmIHRoZXkncmUKK2FuIEV0aGVybmV0IGFkYXB0ZXIuCitJdCBwcm92aWRlcyBhY2Nlc3MgdG8gYSBuZXR3b3JrIHdoZXJlIHRoZSBnYWRnZXQncyBDUFUgaXMgb25lIGhvc3QsCit3aGljaCBjb3VsZCBlYXNpbHkgYmUgYnJpZGdpbmcsIHJvdXRpbmcsIG9yIGZpcmV3YWxsaW5nCithY2Nlc3MgdG8gb3RoZXIgbmV0d29ya3MuCitTaW5jZSBzb21lIGhhcmR3YXJlIGNhbid0IGZ1bGx5IGltcGxlbWVudCB0aGUgQ0RDIEV0aGVybmV0CityZXF1aXJlbWVudHMsIHRoaXMgZHJpdmVyIGFsc28gaW1wbGVtZW50cyBhICJnb29kIHBhcnRzIG9ubHkiCitzdWJzZXQgb2YgQ0RDIEV0aGVybmV0LgorKFRoYXQgc3Vic2V0IGRvZXNuJ3QgYWR2ZXJ0aXNlIGl0c2VsZiBhcyBDREMgRXRoZXJuZXQsCit0byBhdm9pZCBjcmVhdGluZyBwcm9ibGVtcy4pCis8L3BhcmE+CisKKzxwYXJhPlN1cHBvcnQgZm9yIE1pY3Jvc29mdCdzIDxlbXBoYXNpcz5STkRJUzwvZW1waGFzaXM+Citwcm90b2NvbCBoYXMgYmVlbiBjb250cmlidXRlZCBieSBQZW5ndXRyb25peCBhbmQgQXVlcnN3YWxkIEdtYkguCitUaGlzIGlzIGxpa2UgQ0RDIEV0aGVybmV0LCBidXQgaXQgcnVucyBvbiBtb3JlIHNsaWdodGx5IFVTQiBoYXJkd2FyZQorKGJ1dCBsZXNzIHRoYW4gdGhlIENEQyBzdWJzZXQpLgorSG93ZXZlciwgaXRzIG1haW4gY2xhaW0gdG8gZmFtZSBpcyBiZWluZyBhYmxlIHRvIGNvbm5lY3QgZGlyZWN0bHkgdG8KK3JlY2VudCB2ZXJzaW9ucyBvZiBXaW5kb3dzLCB1c2luZyBkcml2ZXJzIHRoYXQgTWljcm9zb2Z0IGJ1bmRsZXMKK2FuZCBzdXBwb3J0cywgbWFraW5nIGl0IG11Y2ggc2ltcGxlciB0byBuZXR3b3JrIHdpdGggV2luZG93cy4KKzwvcGFyYT4KKworPHBhcmE+VGhlcmUgaXMgYWxzbyBzdXBwb3J0IGZvciB1c2VyIG1vZGUgZ2FkZ2V0IGRyaXZlcnMsCit1c2luZyA8ZW1waGFzaXM+Z2FkZ2V0ZnM8L2VtcGhhc2lzPi4KK1RoaXMgcHJvdmlkZXMgYSA8ZW1waGFzaXM+VXNlciBNb2RlIEFQSTwvZW1waGFzaXM+IHRoYXQgcHJlc2VudHMKK2VhY2ggZW5kcG9pbnQgYXMgYSBzaW5nbGUgZmlsZSBkZXNjcmlwdG9yLiAgSS9PIGlzIGRvbmUgdXNpbmcKK25vcm1hbCA8ZW1waGFzaXM+cmVhZCgpPC9lbXBoYXNpcz4gYW5kIDxlbXBoYXNpcz5yZWFkKCk8L2VtcGhhc2lzPiBjYWxscy4KK0ZhbWlsaWFyIHRvb2xzIGxpa2UgR0RCIGFuZCBwdGhyZWFkcyBjYW4gYmUgdXNlZCB0bworZGV2ZWxvcCBhbmQgZGVidWcgdXNlciBtb2RlIGRyaXZlcnMsIHNvIHRoYXQgb25jZSBhIHJvYnVzdAorY29udHJvbGxlciBkcml2ZXIgaXMgYXZhaWxhYmxlIG1hbnkgYXBwbGljYXRpb25zIGZvciBpdAord29uJ3QgcmVxdWlyZSBuZXcga2VybmVsIG1vZGUgc29mdHdhcmUuCitMaW51eCAyLjYgPGVtcGhhc2lzPkFzeW5jIEkvTyAoQUlPKTwvZW1waGFzaXM+CitzdXBwb3J0IGlzIGF2YWlsYWJsZSwgc28gdGhhdCB1c2VyIG1vZGUgc29mdHdhcmUKK2NhbiBzdHJlYW0gZGF0YSB3aXRoIG9ubHkgc2xpZ2h0bHkgbW9yZSBvdmVyaGVhZAordGhhbiBhIGtlcm5lbCBkcml2ZXIuCis8L3BhcmE+CisKKzxwYXJhPlRoZXJlJ3MgYSBVU0IgTWFzcyBTdG9yYWdlIGNsYXNzIGRyaXZlciwgd2hpY2ggcHJvdmlkZXMKK2EgZGlmZmVyZW50IHNvbHV0aW9uIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggc3lzdGVtcyBzdWNoCithcyBNUy1XaW5kb3dzIGFuZCBNYWNPUy4KK1RoYXQgPGVtcGhhc2lzPkZpbGUtYmFja2VkIFN0b3JhZ2U8L2VtcGhhc2lzPiBkcml2ZXIgdXNlcyBhCitmaWxlIG9yIGJsb2NrIGRldmljZSBhcyBiYWNraW5nIHN0b3JlIGZvciBhIGRyaXZlLAorbGlrZSB0aGUgPGZpbGVuYW1lPmxvb3A8L2ZpbGVuYW1lPiBkcml2ZXIuCitUaGUgVVNCIGhvc3QgdXNlcyB0aGUgQkJCLCBDQiwgb3IgQ0JJIHZlcnNpb25zIG9mIHRoZSBtYXNzCitzdG9yYWdlIGNsYXNzIHNwZWNpZmljYXRpb24sIHVzaW5nIHRyYW5zcGFyZW50IFNDU0kgY29tbWFuZHMKK3RvIGFjY2VzcyB0aGUgZGF0YSBmcm9tIHRoZSBiYWNraW5nIHN0b3JlLgorPC9wYXJhPgorCis8cGFyYT5UaGVyZSdzIGEgInNlcmlhbCBsaW5lIiBkcml2ZXIsIHVzZWZ1bCBmb3IgVFRZIHN0eWxlCitvcGVyYXRpb24gb3ZlciBVU0IuCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBkcml2ZXIgc3VwcG9ydHMgQ0RDIEFDTSBzdHlsZQorb3BlcmF0aW9uLCBsaWtlIGEgVVNCIG1vZGVtLCBhbmQgc28gb24gbW9zdCBoYXJkd2FyZSBpdCBjYW4KK2ludGVyb3BlcmF0ZSBlYXNpbHkgd2l0aCBNUy1XaW5kb3dzLgorT25lIGludGVyZXN0aW5nIHVzZSBvZiB0aGF0IGRyaXZlciBpcyBpbiBib290IGZpcm13YXJlIChsaWtlIGEgQklPUyksCit3aGljaCBjYW4gc29tZXRpbWVzIHVzZSB0aGF0IG1vZGVsIHdpdGggdmVyeSBzbWFsbCBzeXN0ZW1zIHdpdGhvdXQKK3JlYWwgc2VyaWFsIGxpbmVzLgorPC9wYXJhPgorCis8cGFyYT5TdXBwb3J0IGZvciBvdGhlciBraW5kcyBvZiBnYWRnZXQgaXMgZXhwZWN0ZWQgdG8KK2JlIGRldmVsb3BlZCBhbmQgY29udHJpYnV0ZWQKK292ZXIgdGltZSwgYXMgdGhpcyBkcml2ZXIgZnJhbWV3b3JrIGV2b2x2ZXMuCis8L3BhcmE+CisKKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9Im90ZyI+PHRpdGxlPlVTQiBPbi1UaGUtR08gKE9URyk8L3RpdGxlPgorCis8cGFyYT5VU0IgT1RHIHN1cHBvcnQgb24gTGludXggMi42IHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkCitieSBUZXhhcyBJbnN0cnVtZW50cyBmb3IKKzx1bGluayB1cmw9Imh0dHA6Ly93d3cub21hcC5jb20iPk9NQVA8L3VsaW5rPiAxNnh4IGFuZCAxN3h4CitzZXJpZXMgcHJvY2Vzc29ycy4KK090aGVyIE9URyBzeXN0ZW1zIHNob3VsZCB3b3JrIGluIHNpbWlsYXIgd2F5cywgYnV0IHRoZQoraGFyZHdhcmUgbGV2ZWwgZGV0YWlscyBjb3VsZCBiZSB2ZXJ5IGRpZmZlcmVudC4KKzwvcGFyYT4gCisKKzxwYXJhPlN5c3RlbXMgbmVlZCBzcGVjaWFsaXplZCBoYXJkd2FyZSBzdXBwb3J0IHRvIGltcGxlbWVudCBPVEcsCitub3RhYmx5IGluY2x1ZGluZyBhIHNwZWNpYWwgPGVtcGhhc2lzPk1pbmktQUI8L2VtcGhhc2lzPiBqYWNrCithbmQgYXNzb2NpYXRlZCB0cmFuc2NpZXZlciB0byBzdXBwb3J0IDxlbXBoYXNpcz5EdWFsLVJvbGU8L2VtcGhhc2lzPgorb3BlcmF0aW9uOgordGhleSBjYW4gYWN0IGVpdGhlciBhcyBhIGhvc3QsIHVzaW5nIHRoZSBzdGFuZGFyZAorTGludXgtVVNCIGhvc3Qgc2lkZSBkcml2ZXIgc3RhY2ssCitvciBhcyBhIHBlcmlwaGVyYWwsIHVzaW5nIHRoaXMgImdhZGdldCIgZnJhbWV3b3JrLgorVG8gZG8gdGhhdCwgdGhlIHN5c3RlbSBzb2Z0d2FyZSByZWxpZXMgb24gc21hbGwgYWRkaXRpb25zCit0byB0aG9zZSBwcm9ncmFtbWluZyBpbnRlcmZhY2VzLAorYW5kIG9uIGEgbmV3IGludGVybmFsIGNvbXBvbmVudCAoaGVyZSBjYWxsZWQgYW4gIk9URyBDb250cm9sbGVyIikKK2FmZmVjdGluZyB3aGljaCBkcml2ZXIgc3RhY2sgY29ubmVjdHMgdG8gdGhlIE9URyBwb3J0LgorSW4gZWFjaCByb2xlLCB0aGUgc3lzdGVtIGNhbiByZS11c2UgdGhlIGV4aXN0aW5nIHBvb2wgb2YKK2hhcmR3YXJlLW5ldXRyYWwgZHJpdmVycywgbGF5ZXJlZCBvbiB0b3Agb2YgdGhlIGNvbnRyb2xsZXIKK2RyaXZlciBpbnRlcmZhY2VzICg8ZW1waGFzaXM+dXNiX2J1czwvZW1waGFzaXM+IG9yCis8ZW1waGFzaXM+dXNiX2dhZGdldDwvZW1waGFzaXM+KS4KK1N1Y2ggZHJpdmVycyBuZWVkIGF0IG1vc3QgbWlub3IgY2hhbmdlcywgYW5kIG1vc3Qgb2YgdGhlIGNhbGxzCithZGRlZCB0byBzdXBwb3J0IE9URyBjYW4gYWxzbyBiZW5lZml0IG5vbi1PVEcgcHJvZHVjdHMuCis8L3BhcmE+CisKKzxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPkdhZGdldCBkcml2ZXJzIHRlc3QgdGhlIDxlbXBoYXNpcz5pc19vdGc8L2VtcGhhc2lzPgorCWZsYWcsIGFuZCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUKKwlhbiBPVEcgZGVzY3JpcHRvciBpbiBlYWNoIG9mIHRoZWlyIGNvbmZpZ3VyYXRpb25zLgorCTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5HYWRnZXQgZHJpdmVycyBtYXkgbmVlZCBjaGFuZ2VzIHRvIHN1cHBvcnQgdGhlCisJdHdvIG5ldyBPVEcgcHJvdG9jb2xzLCBleHBvc2VkIGluIG5ldyBnYWRnZXQgYXR0cmlidXRlcworCXN1Y2ggYXMgPGVtcGhhc2lzPmJfaG5wX2VuYWJsZTwvZW1waGFzaXM+IGZsYWcuCisJSE5QIHN1cHBvcnQgc2hvdWxkIGJlIHJlcG9ydGVkIHRocm91Z2ggYSB1c2VyIGludGVyZmFjZQorCSh0d28gTEVEcyBjb3VsZCBzdWZmaWNlKSwgYW5kIGlzIHRyaWdnZXJlZCBpbiBzb21lIGNhc2VzCisJd2hlbiB0aGUgaG9zdCBzdXNwZW5kcyB0aGUgcGVyaXBoZXJhbC4KKwlTUlAgc3VwcG9ydCBjYW4gYmUgdXNlci1pbml0aWF0ZWQganVzdCBsaWtlIHJlbW90ZSB3YWtldXAsCisJcHJvYmFibHkgYnkgcHJlc3NpbmcgdGhlIHNhbWUgYnV0dG9uLgorCTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5PbiB0aGUgaG9zdCBzaWRlLCBVU0IgZGV2aWNlIGRyaXZlcnMgbmVlZAorCXRvIGJlIHRhdWdodCB0byB0cmlnZ2VyIEhOUCBhdCBhcHByb3ByaWF0ZSBtb21lbnRzLCB1c2luZworCTxmdW5jdGlvbj51c2Jfc3VzcGVuZF9kZXZpY2UoKTwvZnVuY3Rpb24+LgorCVRoYXQgYWxzbyBjb25zZXJ2ZXMgYmF0dGVyeSBwb3dlciwgd2hpY2ggaXMgdXNlZnVsIGV2ZW4KKwlmb3Igbm9uLU9URyBjb25maWd1cmF0aW9ucy4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+QWxzbyBvbiB0aGUgaG9zdCBzaWRlLCBhIGRyaXZlciBtdXN0IHN1cHBvcnQgdGhlCisJT1RHICJUYXJnZXRlZCBQZXJpcGhlcmFsIExpc3QiLiAgVGhhdCdzIGp1c3QgYSB3aGl0ZWxpc3QsCisJdXNlZCB0byByZWplY3QgcGVyaXBoZXJhbHMgbm90IHN1cHBvcnRlZCB3aXRoIGEgZ2l2ZW4KKwlMaW51eCBPVEcgaG9zdC4KKwk8ZW1waGFzaXM+VGhpcyB3aGl0ZWxpc3QgaXMgcHJvZHVjdC1zcGVjaWZpYzsKKwllYWNoIHByb2R1Y3QgbXVzdCBtb2RpZnkgPGZpbGVuYW1lPm90Z193aGl0ZWxpc3QuaDwvZmlsZW5hbWU+CisJdG8gbWF0Y2ggaXRzIGludGVyb3BlcmFiaWxpdHkgc3BlY2lmaWNhdGlvbi4KKwk8L2VtcGhhc2lzPgorCTwvcGFyYT4KKwk8cGFyYT5Ob24tT1RHIExpbnV4IGhvc3RzLCBsaWtlIFBDcyBhbmQgd29ya3N0YXRpb25zLAorCW5vcm1hbGx5IGhhdmUgc29tZSBzb2x1dGlvbiBmb3IgYWRkaW5nIGRyaXZlcnMsIHNvIHRoYXQKKwlwZXJpcGhlcmFscyB0aGF0IGFyZW4ndCByZWNvZ25pemVkIGNhbiBldmVudHVhbGx5IGJlIHN1cHBvcnRlZC4KKwlUaGF0IGFwcHJvYWNoIGlzIHVucmVhc29uYWJsZSBmb3IgY29uc3VtZXIgcHJvZHVjdHMgdGhhdCBtYXkKKwluZXZlciBoYXZlIHRoZWlyIGZpcm13YXJlIHVwZ3JhZGVkLCBhbmQgd2hlcmUgaXQncyB1c3VhbGx5CisJdW5yZWFsaXN0aWMgdG8gZXhwZWN0IHRyYWRpdGlvbmFsIFBDL3dvcmtzdGF0aW9uL3NlcnZlciBraW5kcworCW9mIHN1cHBvcnQgbW9kZWwgdG8gd29yay4KKwlGb3IgZXhhbXBsZSwgaXQncyBvZnRlbiBpbXByYWN0aWNhbCB0byBjaGFuZ2UgZGV2aWNlIGZpcm13YXJlCisJb25jZSB0aGUgcHJvZHVjdCBoYXMgYmVlbiBkaXN0cmlidXRlZCwgc28gZHJpdmVyIGJ1Z3MgY2FuJ3QKKwlub3JtYWxseSBiZSBmaXhlZCBpZiB0aGV5J3JlIGZvdW5kIGFmdGVyIHNoaXBtZW50LgorCTwvcGFyYT48L2xpc3RpdGVtPgorPC9pdGVtaXplZGxpc3Q+CisKKzxwYXJhPgorQWRkaXRpb25hbCBjaGFuZ2VzIGFyZSBuZWVkZWQgYmVsb3cgdGhvc2UgaGFyZHdhcmUtbmV1dHJhbAorPGVtcGhhc2lzPnVzYl9idXM8L2VtcGhhc2lzPiBhbmQgPGVtcGhhc2lzPnVzYl9nYWRnZXQ8L2VtcGhhc2lzPgorZHJpdmVyIGludGVyZmFjZXM7IHRob3NlIGFyZW4ndCBkaXNjdXNzZWQgaGVyZSBpbiBhbnkgZGV0YWlsLgorVGhvc2UgYWZmZWN0IHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIGZvciBlYWNoIFVTQiBIb3N0IG9yIFBlcmlwaGVyYWwKK2NvbnRyb2xsZXIsIGFuZCBob3cgdGhlIEhDRCBpbml0aWFsaXplcyAoc2luY2UgT1RHIGNhbiBiZSBhY3RpdmUgb25seQorb24gYSBzaW5nbGUgcG9ydCkuCitUaGV5IGFsc28gaW52b2x2ZSB3aGF0IG1heSBiZSBjYWxsZWQgYW4gPGVtcGhhc2lzPk9URyBDb250cm9sbGVyCitEcml2ZXI8L2VtcGhhc2lzPiwgbWFuYWdpbmcgdGhlIE9URyB0cmFuc2NlaXZlciBhbmQgdGhlIE9URyBzdGF0ZQorbWFjaGluZSBsb2dpYyBhcyB3ZWxsIGFzIG11Y2ggb2YgdGhlIHJvb3QgaHViIGJlaGF2aW9yIGZvciB0aGUKK09URyBwb3J0LgorVGhlIE9URyBjb250cm9sbGVyIGRyaXZlciBuZWVkcyB0byBhY3RpdmF0ZSBhbmQgZGVhY3RpdmF0ZSBVU0IKK2NvbnRyb2xsZXJzIGRlcGVuZGluZyBvbiB0aGUgcmVsZXZhbnQgZGV2aWNlIHJvbGUuCitTb21lIHJlbGF0ZWQgY2hhbmdlcyB3ZXJlIG5lZWRlZCBpbnNpZGUgdXNiY29yZSwgc28gdGhhdCBpdAorY2FuIGlkZW50aWZ5IE9URy1jYXBhYmxlIGRldmljZXMgYW5kIHJlc3BvbmQgYXBwcm9wcmlhdGVseQordG8gSE5QIG9yIFNSUCBwcm90b2NvbHMuCis8L3BhcmE+IAorCis8L2NoYXB0ZXI+CisKKzwvYm9vaz4KKzwhLS0KKwl2aW06c3ludGF4PXNnbWw6c3c9NAorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svam91cm5hbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9qb3VybmFsLWFwaS50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjZmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svam91cm5hbC1hcGkudG1wbApAQCAtMCwwICsxLDMzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJMaW51eEpCREFQSSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VGhlIExpbnV4IEpvdXJuYWxsaW5nIEFQSTwvdGl0bGU+CisgIDxhdXRob3Jncm91cD4KKyAgPGF1dGhvcj4KKyAgICAgPGZpcnN0bmFtZT5Sb2dlcjwvZmlyc3RuYW1lPgorICAgICA8c3VybmFtZT5HYW1tYW5zPC9zdXJuYW1lPgorICAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnJnYW1tYW5zQGNvbXB1dGVyLXN1cmdlcnkuY28udWs8L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgPC9hdXRob3I+IAorICA8L2F1dGhvcmdyb3VwPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPlN0ZXBoZW48L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5Ud2VlZGllPC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+c2N0QHJlZGhhdC5jb208L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAyPC95ZWFyPgorICAgPGhvbGRlcj5Sb2dlciBHYW1tYW5zPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCis8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9Ik92ZXJ2aWV3Ij4KKyAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKyAgPHNlY3QxPgorICAgICA8dGl0bGU+RGV0YWlsczwvdGl0bGU+Cis8cGFyYT4KK1RoZSBqb3VybmFsbGluZyBsYXllciBpcyAgZWFzeSB0byB1c2UuIFlvdSBuZWVkIHRvIAorZmlyc3Qgb2YgYWxsIGNyZWF0ZSBhIGpvdXJuYWxfdCBkYXRhIHN0cnVjdHVyZS4gVGhlcmUgYXJlCit0d28gY2FsbHMgdG8gZG8gdGhpcyBkZXBlbmRlbnQgb24gaG93IHlvdSBkZWNpZGUgdG8gYWxsb2NhdGUgdGhlIHBoeXNpY2FsCittZWRpYSBvbiB3aGljaCB0aGUgam91cm5hbCByZXNpZGVzLiBUaGUgam91cm5hbF9pbml0X2lub2RlKCkgY2FsbCAKK2lzIGZvciBqb3VybmFscyBzdG9yZWQgaW4gZmlsZXN5c3RlbSBpbm9kZXMsIG9yIHRoZSBqb3VybmFsX2luaXRfZGV2KCkKK2NhbGwgY2FuIGJlIHVzZSBmb3Igam91cm5hbCBzdG9yZWQgb24gYSByYXcgZGV2aWNlIChpbiBhIGNvbnRpbnVvdXMgcmFuZ2UgCitvZiBibG9ja3MpLiBBIGpvdXJuYWxfdCBpcyBhIHR5cGVkZWYgZm9yIGEgc3RydWN0IHBvaW50ZXIsIHNvIHdoZW4KK3lvdSBhcmUgZmluYWxseSBmaW5pc2hlZCBtYWtlIHN1cmUgeW91IGNhbGwgam91cm5hbF9kZXN0cm95KCkgb24gaXQKK3RvIGZyZWUgdXAgYW55IHVzZWQga2VybmVsIG1lbW9yeS4KKzwvcGFyYT4KKworPHBhcmE+CitPbmNlIHlvdSBoYXZlIGdvdCB5b3VyIGpvdXJuYWxfdCBvYmplY3QgeW91IG5lZWQgdG8gJ21vdW50JyBvciBsb2FkIHRoZSBqb3VybmFsCitmaWxlLCB1bmxlc3Mgb2YgY291cnNlIHlvdSBoYXZlbid0IGluaXRpYWxpc2VkIGl0IHlldCAtIGluIHdoaWNoIGNhc2UgeW91CituZWVkIHRvIGNhbGwgam91cm5hbF9jcmVhdGUoKS4KKzwvcGFyYT4KKworPHBhcmE+CitNb3N0IG9mIHRoZSB0aW1lIGhvd2V2ZXIgeW91ciBqb3VybmFsIGZpbGUgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBjcmVhdGVkLCBidXQKK2JlZm9yZSB5b3UgbG9hZCBpdCB5b3UgbXVzdCBjYWxsIGpvdXJuYWxfd2lwZSgpIHRvIGVtcHR5IHRoZSBqb3VybmFsIGZpbGUuCitIYW5nIG9uLCB5b3Ugc2F5ICwgd2hhdCBpZiB0aGUgZmlsZXN5c3RlbSB3YXNuJ3QgY2xlYW5seSB1bW91bnQoKSdkIC4gV2VsbCwgaXQgaXMgdGhlIAoram9iIG9mIHRoZSBjbGllbnQgZmlsZSBzeXN0ZW0gdG8gZGV0ZWN0IHRoaXMgYW5kIHNraXAgdGhlIGNhbGwgdG8gam91cm5hbF93aXBlKCkuCis8L3BhcmE+CisKKzxwYXJhPgorSW4gZWl0aGVyIGNhc2UgdGhlIG5leHQgY2FsbCBzaG91bGQgYmUgdG8gam91cm5hbF9sb2FkKCkgd2hpY2ggcHJlcGFyZXMgdGhlCitqb3VybmFsIGZpbGUgZm9yIHVzZS4gTm90ZSB0aGF0IGpvdXJuYWxfd2lwZSguLiwwKSBjYWxscyBqb3VybmFsX3NraXBfcmVjb3ZlcnkoKSAKK2ZvciB5b3UgaWYgaXQgZGV0ZWN0cyBhbnkgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb25zIGluIHRoZSBqb3VybmFsIGFuZCBzaW1pbGFybHkKK2pvdXJuYWxfbG9hZCgpIHdpbGwgY2FsbCBqb3VybmFsX3JlY292ZXIoKSBpZiBuZWNlc3NhcnkuCitJIHdvdWxkIGFkdmlzZSByZWFkaW5nIGZzL2V4dDMvc3VwZXIuYyBmb3IgZXhhbXBsZXMgb24gdGhpcyBzdGFnZS4KK1tSR0c6IFdoeSBpcyB0aGUgam91cm5hbF93aXBlKCkgY2FsbCBuZWNlc3NhcnkgLSBkb2Vzbid0IHRoaXMgbmVlZGxlc3NseSAKK2NvbXBsaWNhdGUgdGhlIEFQSS4gT3IgaXNuJ3QgYSBnb29kIGlkZWEgZm9yIHRoZSBqb3VybmFsIGxheWVyIHRvIGhpZGUgCitkaXJ0eSBtb3VudHMgZnJvbSB0aGUgY2xpZW50IGZzXQorPC9wYXJhPgorCis8cGFyYT4KK05vdyB5b3UgY2FuIGdvIGFoZWFkIGFuZCBzdGFydCBtb2RpZnlpbmcgdGhlIHVuZGVybHlpbmcgCitmaWxlc3lzdGVtLiBBbG1vc3QuCis8L3BhcmE+CisKKworPHBhcmE+CisKK1lvdSBzdGlsbCBuZWVkIHRvIGFjdHVhbGx5IGpvdXJuYWwgeW91ciBmaWxlc3lzdGVtIGNoYW5nZXMsIHRoaXMKK2lzIGRvbmUgYnkgd3JhcHBpbmcgdGhlbSBpbnRvIHRyYW5zYWN0aW9ucy4gQWRkaXRpb25hbGx5IHlvdQorYWxzbyBuZWVkIHRvIHdyYXAgdGhlIG1vZGlmaWNhdGlvbiBvZiBlYWNoIG9mIHRoZSB0aGUgYnVmZmVycword2l0aCBjYWxscyB0byB0aGUgam91cm5hbCBsYXllciwgc28gaXQga25vd3Mgd2hhdCB0aGUgbW9kaWZpY2F0aW9ucworeW91IGFyZSBhY3R1YWxseSBtYWtpbmcgYXJlLiBUbyBkbyB0aGlzIHVzZSAgam91cm5hbF9zdGFydCgpIHdoaWNoCityZXR1cm5zIGEgdHJhbnNhY3Rpb24gaGFuZGxlLgorPC9wYXJhPgorCis8cGFyYT4KK2pvdXJuYWxfc3RhcnQoKQorYW5kIGl0cyBjb3VudGVycGFydCBqb3VybmFsX3N0b3AoKSwgd2hpY2ggaW5kaWNhdGVzIHRoZSBlbmQgb2YgYSB0cmFuc2FjdGlvbgorYXJlIG5lc3RhYmxlIGNhbGxzLCBzbyB5b3UgY2FuIHJlZW50ZXIgYSB0cmFuc2FjdGlvbiBpZiBuZWNlc3NhcnksCitidXQgcmVtZW1iZXIgeW91IG11c3QgY2FsbCBqb3VybmFsX3N0b3AoKSB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMgYXMKK2pvdXJuYWxfc3RhcnQoKSBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCAob3IgbW9yZSBhY2N1cmF0ZWx5CitsZWF2ZXMgdGhlIHRoZSB1cGRhdGUgcGhhc2UpLiBFeHQzL1ZGUyBtYWtlcyB1c2Ugb2YgdGhpcyBmZWF0dXJlIHRvIHNpbXBsaWZ5IAorcXVvdGEgc3VwcG9ydC4KKzwvcGFyYT4KKworPHBhcmE+CitJbnNpZGUgZWFjaCB0cmFuc2FjdGlvbiB5b3UgbmVlZCB0byB3cmFwIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZQoraW5kaXZpZHVhbCBidWZmZXJzIChibG9ja3MpLiBCZWZvcmUgeW91IHN0YXJ0IHRvIG1vZGlmeSBhIGJ1ZmZlciB5b3UKK25lZWQgdG8gY2FsbCBqb3VybmFsX2dldF97Y3JlYXRlLHdyaXRlLHVuZG99X2FjY2VzcygpIGFzIGFwcHJvcHJpYXRlLAordGhpcyBhbGxvd3MgdGhlIGpvdXJuYWxsaW5nIGxheWVyIHRvIGNvcHkgdGhlIHVubW9kaWZpZWQgZGF0YSBpZiBpdAorbmVlZHMgdG8uIEFmdGVyIGFsbCB0aGUgYnVmZmVyIG1heSBiZSBwYXJ0IG9mIGEgcHJldmlvdXNseSB1bmNvbW1pdHRlZAordHJhbnNhY3Rpb24uIAorQXQgdGhpcyBwb2ludCB5b3UgYXJlIGF0IGxhc3QgcmVhZHkgdG8gbW9kaWZ5IGEgYnVmZmVyLCBhbmQgb25jZQoreW91IGFyZSBoYXZlIGRvbmUgc28geW91IG5lZWQgdG8gY2FsbCBqb3VybmFsX2RpcnR5X3ttZXRhLH1kYXRhKCkuCitPciBpZiB5b3UndmUgYXNrZWQgZm9yIGFjY2VzcyB0byBhIGJ1ZmZlciB5b3Ugbm93IGtub3cgaXMgbm93IGxvbmdlciAKK3JlcXVpcmVkIHRvIGJlIHB1c2hlZCBiYWNrIG9uIHRoZSBkZXZpY2UgeW91IGNhbiBjYWxsIGpvdXJuYWxfZm9yZ2V0KCkKK2luIG11Y2ggdGhlIHNhbWUgd2F5IGFzIHlvdSBtaWdodCBoYXZlIHVzZWQgYmZvcmdldCgpIGluIHRoZSBwYXN0LgorPC9wYXJhPgorCis8cGFyYT4KK0Egam91cm5hbF9mbHVzaCgpIG1heSBiZSBjYWxsZWQgYXQgYW55IHRpbWUgdG8gY29tbWl0IGFuZCBjaGVja3BvaW50CithbGwgeW91ciB0cmFuc2FjdGlvbnMuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlbiBhdCB1bW91bnQgdGltZSAsIGluIHlvdXIgcHV0X3N1cGVyKCkgKDIuNCkgb3Igd3JpdGVfc3VwZXIoKSAoMi41KQoreW91IGNhbiB0aGVuIGNhbGwgam91cm5hbF9kZXN0cm95KCkgdG8gY2xlYW4gdXAgeW91ciBpbi1jb3JlIGpvdXJuYWwgb2JqZWN0LgorPC9wYXJhPgorCisKKzxwYXJhPgorVW5mb3J0dW5hdGVseSB0aGVyZSBhIGNvdXBsZSBvZiB3YXlzIHRoZSBqb3VybmFsIGxheWVyIGNhbiBjYXVzZSBhIGRlYWRsb2NrLgorVGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUgaXMgdGhhdCBlYWNoIHRhc2sgY2FuIG9ubHkgaGF2ZQorYSBzaW5nbGUgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24gYXQgYW55IG9uZSB0aW1lLCByZW1lbWJlciBub3RoaW5nCitjb21taXRzIHVudGlsIHRoZSBvdXRlcm1vc3Qgam91cm5hbF9zdG9wKCkuIFRoaXMgbWVhbnMKK3lvdSBtdXN0IGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiBhdCB0aGUgZW5kIG9mIGVhY2ggZmlsZS9pbm9kZS9hZGRyZXNzCitldGMuIG9wZXJhdGlvbiB5b3UgcGVyZm9ybSwgc28gdGhhdCB0aGUgam91cm5hbGxpbmcgc3lzdGVtIGlzbid0IHJlLWVudGVyZWQKK29uIGFub3RoZXIgam91cm5hbC4gU2luY2UgdHJhbnNhY3Rpb25zIGNhbid0IGJlIG5lc3RlZC9iYXRjaGVkIAorYWNyb3NzIGRpZmZlcmluZyBqb3VybmFscywgYW5kIGFub3RoZXIgZmlsZXN5c3RlbSBvdGhlciB0aGFuCit5b3VycyAoc2F5IGV4dDMpIG1heSBiZSBtb2RpZmllZCBpbiBhIGxhdGVyIHN5c2NhbGwuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIHNlY29uZCBjYXNlIHRvIGJlYXIgaW4gbWluZCBpcyB0aGF0IGpvdXJuYWxfc3RhcnQoKSBjYW4gCitibG9jayBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgaW4gdGhlIGpvdXJuYWwgZm9yIHlvdXIgdHJhbnNhY3Rpb24gCisoYmFzZWQgb24gdGhlIHBhc3NlZCBuYmxvY2tzIHBhcmFtKSAtIHdoZW4gaXQgYmxvY2tzIGl0IG1lcmVseSghKSBuZWVkcyB0bword2FpdCBmb3IgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlIGFuZCBiZSBjb21taXR0ZWQgZnJvbSBvdGhlciB0YXNrcywgCitzbyBlc3NlbnRpYWxseSB3ZSBhcmUgd2FpdGluZyBmb3Igam91cm5hbF9zdG9wKCkuIFNvIHRvIGF2b2lkIAorZGVhZGxvY2tzIHlvdSBtdXN0IHRyZWF0IGpvdXJuYWxfc3RhcnQvc3RvcCgpIGFzIGlmIHRoZXkKK3dlcmUgc2VtYXBob3JlcyBhbmQgaW5jbHVkZSB0aGVtIGluIHlvdXIgc2VtYXBob3JlIG9yZGVyaW5nIHJ1bGVzIHRvIHByZXZlbnQgCitkZWFkbG9ja3MuIE5vdGUgdGhhdCBqb3VybmFsX2V4dGVuZCgpIGhhcyBzaW1pbGFyIGJsb2NraW5nIGJlaGF2aW91ciB0bworam91cm5hbF9zdGFydCgpIHNvIHlvdSBjYW4gZGVhZGxvY2sgaGVyZSBqdXN0IGFzIGVhc2lseSBhcyBvbiBqb3VybmFsX3N0YXJ0KCkuCis8L3BhcmE+CisKKzxwYXJhPgorVHJ5IHRvIHJlc2VydmUgdGhlIHJpZ2h0IG51bWJlciBvZiBibG9ja3MgdGhlIGZpcnN0IHRpbWUuIDstKS4gVGhpcyB3aWxsCitiZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHlvdSBhcmUgZ29pbmcgdG8gdG91Y2ggaW4gdGhpcyB0cmFuc2FjdGlvbi4KK0kgYWR2aXNlIGhhdmluZyBhIGxvb2sgYXQgYXQgbGVhc3QgZXh0M19qYmQuaCB0byBzZWUgdGhlIGJhc2lzIG9uIHdoaWNoIAorZXh0MyB1c2VzIHRvIG1ha2UgdGhlc2UgZGVjaXNpb25zLgorPC9wYXJhPgorCis8cGFyYT4KK0Fub3RoZXIgd3JpZ2dsZSB0byB3YXRjaCBvdXQgZm9yIGlzIHlvdXIgb24tZGlzayBibG9jayBhbGxvY2F0aW9uIHN0cmF0ZWd5Lgord2h5PyBCZWNhdXNlLCBpZiB5b3UgdW5kbyBhIGRlbGV0ZSwgeW91IG5lZWQgdG8gZW5zdXJlIHlvdSBoYXZlbid0IHJldXNlZCBhbnkKK29mIHRoZSBmcmVlZCBibG9ja3MgaW4gYSBsYXRlciB0cmFuc2FjdGlvbi4gT25lIHNpbXBsZSB3YXkgb2YgZG9pbmcgdGhpcworaXMgbWFrZSBzdXJlIGFueSBibG9ja3MgeW91IGFsbG9jYXRlIG9ubHkgaGF2ZSBjaGVja3BvaW50ZWQgdHJhbnNhY3Rpb25zCitsaXN0ZWQgYWdhaW5zdCB0aGVtLiBFeHQzIGRvZXMgdGhpcyBpbiBleHQzX3Rlc3RfYWxsb2NhdGFibGUoKS4gCis8L3BhcmE+CisKKzxwYXJhPgorTG9jayBpcyBhbHNvIHByb3ZpZGluZyB0aHJvdWdoIGpvdXJuYWxfe3VuLH1sb2NrX3VwZGF0ZXMoKSwKK2V4dDMgdXNlcyB0aGlzIHdoZW4gaXQgd2FudHMgYSB3aW5kb3cgd2l0aCBhIGNsZWFuIGFuZCBzdGFibGUgZnMgZm9yIGEgbW9tZW50LgorZWcuIAorPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+CisKKwlqb3VybmFsX2xvY2tfdXBkYXRlcygpIC8vc3RvcCBuZXcgc3R1ZmYgaGFwcGVuaW5nLi4KKwlqb3VybmFsX2ZsdXNoKCkgICAgICAgIC8vIGNoZWNrcG9pbnQgZXZlcnl0aGluZy4KKwkuLmRvIHN0dWZmIG9uIHN0YWJsZSBmcworCWpvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoKSAvLyBjYXJyeSBvbiB3aXRoIGZpbGVzeXN0ZW0gdXNlLgorPC9wcm9ncmFtbGlzdGluZz4KKworPHBhcmE+CitUaGUgb3Bwb3J0dW5pdGllcyBmb3IgYWJ1c2UgYW5kIERPUyBhdHRhY2tzIHdpdGggdGhpcyBzaG91bGQgYmUgb2J2aW91cywKK2lmIHlvdSBhbGxvdyB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHRvIHRyaWdnZXIgY29kZXBhdGhzIGNvbnRhaW5pbmcgdGhlc2UKK2NhbGxzLgorPC9wYXJhPgorCis8cGFyYT4KK0EgbmV3IGZlYXR1cmUgb2YgamJkIHNpbmNlIDIuNS4yNSBpcyBjb21taXQgY2FsbGJhY2tzIHdpdGggdGhlIG5ldworam91cm5hbF9jYWxsYmFja19zZXQoKSBmdW5jdGlvbiB5b3UgY2FuIG5vdyBhc2sgdGhlIGpvdXJuYWxsaW5nIGxheWVyCit0byBjYWxsIHlvdSBiYWNrIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGZpbmFsbHkgY29tbWl0dGVkIHRvIGRpc2ssIHNvIHRoYXQKK3lvdSBjYW4gZG8gc29tZSBvZiB5b3VyIG93biBtYW5hZ2VtZW50LiBUaGUga2V5IHRvIHRoaXMgaXMgdGhlIGpvdXJuYWxfY2FsbGJhY2sKK3N0cnVjdCwgdGhpcyBtYWludGFpbnMgdGhlIGludGVybmFsIGNhbGxiYWNrIGluZm9ybWF0aW9uIGJ1dCB5b3UgY2FuCitleHRlbmQgaXQgbGlrZSB0aGlzOi0KKzwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKwlzdHJ1Y3QgIG15ZnNfY2FsbGJhY2tfcyB7CisJCS8vRGF0YSBzdHJ1Y3R1cmUgZWxlbWVudCByZXF1aXJlZCBieSBqYmQuLgorCQlzdHJ1Y3Qgam91cm5hbF9jYWxsYmFjayBmb3JfamJkOworCQkvLyBTdHVmZiBmb3IgbXlmcyBhbGxvY2F0ZWQgdG9nZXRoZXIuCisJCW15ZnNfaW5vZGUqICAgIGlfY29tbWl0ZWQ7CisJCisJfQorPC9wcm9ncmFtbGlzdGluZz4KKworPHBhcmE+Cit0aGlzIHdvdWxkIGJlIHVzZWZ1bCBpZiB5b3UgbmVlZGVkIHRvIGtub3cgd2hlbiBkYXRhIHdhcyBjb21taXR0ZWQgdG8gYSAKK3BhcnRpY3VsYXIgaW5vZGUuCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKzxzZWN0MT4KKzx0aXRsZT5TdW1tYXJ5PC90aXRsZT4KKzxwYXJhPgorVXNpbmcgdGhlIGpvdXJuYWwgaXMgYSBtYXR0ZXIgb2Ygd3JhcHBpbmcgdGhlIGRpZmZlcmVudCBjb250ZXh0IGNoYW5nZXMsCitiZWluZyBlYWNoIG1vdW50LCBlYWNoIG1vZGlmaWNhdGlvbiAodHJhbnNhY3Rpb24pIGFuZCBlYWNoIGNoYW5nZWQgYnVmZmVyCit0byB0ZWxsIHRoZSBqb3VybmFsbGluZyBsYXllciBhYm91dCB0aGVtLgorPC9wYXJhPgorCis8cGFyYT4KK0hlcmUgaXMgYSBzb21lIHBzZXVkbyBjb2RlIHRvIGdpdmUgeW91IGFuIGlkZWEgb2YgaG93IGl0IHdvcmtzLCBhcworYW4gZXhhbXBsZS4KKzwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorICBqb3VybmFsX3QqIG15X2pucmwgPSBqb3VybmFsX2NyZWF0ZSgpOworICBqb3VybmFsX2luaXRfe2Rldixpbm9kZX0oam5ybCwuLi4pCisgIGlmIChjbGVhbikgam91cm5hbF93aXBlKCk7CisgIGpvdXJuYWxfbG9hZCgpOworCisgICBmb3JlYWNoKHRyYW5zYWN0aW9uKSB7IC8qdHJhbnNhY3Rpb25zIG11c3QgYmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3lzY2FsbCByZXR1cm5zIHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzcGFjZSovCisKKyAgICAgICAgICBoYW5kbGVfdCAqIHhjdD1qb3VybmFsX3N0YXJ0KG15X2pucmwpOworICAgICAgICAgIGZvcmVhY2goYmgpIHsKKyAgICAgICAgICAgICAgICBqb3VybmFsX2dldF97Y3JlYXRlLHdyaXRlLHVuZG99X2FjY2Vzcyh4YWN0LGJoKTsKKyAgICAgICAgICAgICAgICBpZiAoIG15ZnNfbW9kaWZ5KGJoKSApIHsgLyogcmV0dXJucyB0cnVlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1ha2VzIGNoYW5nZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuYWxfZGlydHlfe21ldGEsfWRhdGEoeGFjdCxiaCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvdXJuYWxfZm9yZ2V0KGJoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGpvdXJuYWxfc3RvcCh4Y3QpOworICAgfQorICAgam91cm5hbF9kZXN0cm95KG15X2pybmwpOworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdDE+CisKKzwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iYWR0Ij4KKyAgICAgPHRpdGxlPkRhdGEgVHlwZXM8L3RpdGxlPgorICAgICA8cGFyYT4JCisJVGhlIGpvdXJuYWxsaW5nIGxheWVyIHVzZXMgdHlwZWRlZnMgdG8gJ2hpZGUnIHRoZSBjb25jcmV0ZSBkZWZpbml0aW9ucworCW9mIHRoZSBzdHJ1Y3R1cmVzIHVzZWQuIEFzIGEgY2xpZW50IG9mIHRoZSBKQkQgbGF5ZXIgeW91IGNhbgorCWp1c3QgcmVseSBvbiB0aGUgdXNpbmcgdGhlIHBvaW50ZXIgYXMgYSBtYWdpYyBjb29raWUgIG9mIHNvbWUgc29ydC4KKwkKKwlPYnZpb3VzbHkgdGhlIGhpZGluZyBpcyBub3QgZW5mb3JjZWQgYXMgdGhpcyBpcyAnQycuCisJPC9wYXJhPgorCTxzZWN0MT48dGl0bGU+U3RydWN0dXJlczwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvamJkLmgKKwk8L3NlY3QxPgorPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJjYWxscyI+CisgICAgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorICAgICA8cGFyYT4JCisJVGhlIGZ1bmN0aW9ucyBoZXJlIGFyZSBzcGxpdCBpbnRvIHR3byBncm91cHMgdGhvc2UgdGhhdAorCWFmZmVjdCBhIGpvdXJuYWwgYXMgYSB3aG9sZSwgYW5kIHRob3NlIHdoaWNoIGFyZSB1c2VkIHRvCisJbWFuYWdlIHRyYW5zYWN0aW9ucworPC9wYXJhPgorCTxzZWN0MT48dGl0bGU+Sm91cm5hbCBMZXZlbDwvdGl0bGU+CishRWZzL2piZC9qb3VybmFsLmMKKyFFZnMvamJkL3JlY292ZXJ5LmMKKwk8L3NlY3QxPgorCTxzZWN0MT48dGl0bGU+VHJhbnNhc2N0aW9uIExldmVsPC90aXRsZT4KKyFFZnMvamJkL3RyYW5zYWN0aW9uLmMJCisJPC9zZWN0MT4KKzwvY2hhcHRlcj4KKzxjaGFwdGVyPgorICAgICA8dGl0bGU+U2VlIGFsc288L3RpdGxlPgorCTxwYXJhPgorCTxjaXRhdGlvbj4KKwkgICA8dWxpbmsgdXJsPSJmdHA6Ly9mdHAudWsubGludXgub3JnL3B1Yi9saW51eC9zY3QvZnMvamZzL2pvdXJuYWwtZGVzaWduLnBzLmd6Ij4KKwkgICAJSm91cm5hbGluZyB0aGUgTGludXggZXh0MmZzIEZpbGVzeXN0ZW0sTGludXhFeHBvIDk4LCBTdGVwaGVuIFR3ZWVkaWUKKwkgICA8L3VsaW5rPgorCSAgIDwvY2l0YXRpb24+CisJICAgPC9wYXJhPgorCSAgIDxwYXJhPgorCSAgIDxjaXRhdGlvbj4KKwkgICA8dWxpbmsgdXJsPSJodHRwOi8vb2xzdHJhbnMuc291cmNlZm9yZ2UubmV0L3JlbGVhc2UvT0xTMjAwMC1leHQzL09MUzIwMDAtZXh0My5odG1sIj4KKwkgICAJRXh0MyBKb3VybmFsbGluZyBGaWxlU3lzdGVtICwgT0xTIDIwMDAsIERyLiBTdGVwaGVuIFR3ZWVkaWUKKwkgICA8L3VsaW5rPgorCSAgIDwvY2l0YXRpb24+CisJICAgPC9wYXJhPgorPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQyMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbApAQCAtMCwwICsxLDM0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJMaW51eEtlcm5lbEFQSSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VGhlIExpbnV4IEtlcm5lbCBBUEk8L3RpdGxlPgorICAKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJCYXNpY3MiPgorICAgICA8dGl0bGU+RHJpdmVyIEJhc2ljczwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+RHJpdmVyIEVudHJ5IGFuZCBFeGl0IHBvaW50czwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvaW5pdC5oCisgICAgIDwvc2VjdDE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5BdG9taWMgYW5kIHBvaW50ZXIgbWFuaXB1bGF0aW9uPC90aXRsZT4KKyFJaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAorIUlpbmNsdWRlL2FzbS1pMzg2L3VuYWxpZ25lZC5oCisgICAgIDwvc2VjdDE+CisKKzwhLS0gRklYTUU6CisgIGtlcm5lbC9zY2hlZC5jIGhhcyBubyBkb2NzLCB3aGljaCBzdHVmZnMgdXAgdGhlIHNnbWwuICBDb21tZW50CisgIG91dCB1bnRpbCBzb21lYm9keSBhZGRzIGRvY3MuICBLQU8KKyAgICAgPHNlY3QxPjx0aXRsZT5EZWxheWluZywgc2NoZWR1bGluZywgYW5kIHRpbWVyIHJvdXRpbmVzPC90aXRsZT4KK1ghRWtlcm5lbC9zY2hlZC5jCisgICAgIDwvc2VjdDE+CitLQU8gLS0+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iYWR0Ij4KKyAgICAgPHRpdGxlPkRhdGEgVHlwZXM8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkRvdWJseSBMaW5rZWQgTGlzdHM8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2xpc3QuaAorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImxpYmMiPgorICAgICA8dGl0bGU+QmFzaWMgQyBMaWJyYXJ5IEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgPHBhcmE+CisgICAgICAgV2hlbiB3cml0aW5nIGRyaXZlcnMsIHlvdSBjYW5ub3QgaW4gZ2VuZXJhbCB1c2Ugcm91dGluZXMgd2hpY2ggYXJlCisgICAgICAgZnJvbSB0aGUgQyBMaWJyYXJ5LiAgU29tZSBvZiB0aGUgZnVuY3Rpb25zIGhhdmUgYmVlbiBmb3VuZCBnZW5lcmFsbHkKKyAgICAgICB1c2VmdWwgYW5kIHRoZXkgYXJlIGxpc3RlZCBiZWxvdy4gIFRoZSBiZWhhdmlvdXIgb2YgdGhlc2UgZnVuY3Rpb25zCisgICAgICAgbWF5IHZhcnkgc2xpZ2h0bHkgZnJvbSB0aG9zZSBkZWZpbmVkIGJ5IEFOU0ksIGFuZCB0aGVzZSBkZXZpYXRpb25zCisgICAgICAgYXJlIG5vdGVkIGluIHRoZSB0ZXh0LgorICAgICA8L3BhcmE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5TdHJpbmcgQ29udmVyc2lvbnM8L3RpdGxlPgorIUlsaWIvdnNwcmludGYuYworIUVsaWIvdnNwcmludGYuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlN0cmluZyBNYW5pcHVsYXRpb248L3RpdGxlPgorIUlsaWIvc3RyaW5nLmMKKyFFbGliL3N0cmluZy5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+Qml0IE9wZXJhdGlvbnM8L3RpdGxlPgorIUlpbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibW0iPgorICAgICA8dGl0bGU+TWVtb3J5IE1hbmFnZW1lbnQgaW4gTGludXg8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPlRoZSBTbGFiIENhY2hlPC90aXRsZT4KKyFFbW0vc2xhYi5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+VXNlciBTcGFjZSBNZW1vcnkgQWNjZXNzPC90aXRsZT4KKyFJaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgKKyFJYXJjaC9pMzg2L2xpYi91c2VyY29weS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ia2ZpZm8iPgorICAgICA8dGl0bGU+RklGTyBCdWZmZXI8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPmtmaWZvIGludGVyZmFjZTwvdGl0bGU+CishSWluY2x1ZGUvbGludXgva2ZpZm8uaAorIUVrZXJuZWwva2ZpZm8uYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InByb2MiPgorICAgICA8dGl0bGU+VGhlIHByb2MgZmlsZXN5c3RlbTwvdGl0bGU+CisgCisgICAgIDxzZWN0MT48dGl0bGU+c3lzY3RsIGludGVyZmFjZTwvdGl0bGU+CishRWtlcm5lbC9zeXNjdGwuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImRlYnVnZnMiPgorICAgICA8dGl0bGU+VGhlIGRlYnVnZnMgZmlsZXN5c3RlbTwvdGl0bGU+CisgCisgICAgIDxzZWN0MT48dGl0bGU+ZGVidWdmcyBpbnRlcmZhY2U8L3RpdGxlPgorIUVmcy9kZWJ1Z2ZzL2lub2RlLmMKKyFFZnMvZGVidWdmcy9maWxlLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJ2ZnMiPgorICAgICA8dGl0bGU+VGhlIExpbnV4IFZGUzwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+VGhlIERpcmVjdG9yeSBDYWNoZTwvdGl0bGU+CishRWZzL2RjYWNoZS5jCishSWluY2x1ZGUvbGludXgvZGNhY2hlLmgKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Jbm9kZSBIYW5kbGluZzwvdGl0bGU+CishRWZzL2lub2RlLmMKKyFFZnMvYmFkX2lub2RlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5SZWdpc3RyYXRpb24gYW5kIFN1cGVyYmxvY2tzPC90aXRsZT4KKyFFZnMvc3VwZXIuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkZpbGUgTG9ja3M8L3RpdGxlPgorIUVmcy9sb2Nrcy5jCishSWZzL2xvY2tzLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJuZXRjb3JlIj4KKyAgICAgPHRpdGxlPkxpbnV4IE5ldHdvcmtpbmc8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPlNvY2tldCBCdWZmZXIgRnVuY3Rpb25zPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9za2J1ZmYuaAorIUVuZXQvY29yZS9za2J1ZmYuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlNvY2tldCBGaWx0ZXI8L3RpdGxlPgorIUVuZXQvY29yZS9maWx0ZXIuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkdlbmVyaWMgTmV0d29yayBTdGF0aXN0aWNzPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaAorIUVuZXQvY29yZS9nZW5fc3RhdHMuYworIUVuZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJuZXRkZXYiPgorICAgICA8dGl0bGU+TmV0d29yayBkZXZpY2Ugc3VwcG9ydDwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+RHJpdmVyIFN1cHBvcnQ8L3RpdGxlPgorIUVuZXQvY29yZS9kZXYuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPjgzOTAgQmFzZWQgTmV0d29yayBDYXJkczwvdGl0bGU+CishRWRyaXZlcnMvbmV0LzgzOTAuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPlN5bmNocm9ub3VzIFBQUDwvdGl0bGU+CishRWRyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJtb2Rsb2FkIj4KKyAgICAgPHRpdGxlPk1vZHVsZSBTdXBwb3J0PC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Nb2R1bGUgTG9hZGluZzwvdGl0bGU+CishRWtlcm5lbC9rbW9kLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JbnRlciBNb2R1bGUgc3VwcG9ydDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICBSZWZlciB0byB0aGUgZmlsZSBrZXJuZWwvbW9kdWxlLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKzwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQorWCFFa2VybmVsL21vZHVsZS5jCistLT4KKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJoYXJkd2FyZSI+CisgICAgIDx0aXRsZT5IYXJkd2FyZSBJbnRlcmZhY2VzPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxpbmc8L3RpdGxlPgorIUlhcmNoL2kzODYva2VybmVsL2lycS5jCisgICAgIDwvc2VjdDE+CisKKyAgICAgPHNlY3QxPjx0aXRsZT5NVFJSIEhhbmRsaW5nPC90aXRsZT4KKyFFYXJjaC9pMzg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ0kgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KKyFFZHJpdmVycy9wY2kvcGNpLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ0kgSG90cGx1ZyBTdXBwb3J0IExpYnJhcnk8L3RpdGxlPgorIUVkcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1DQSBBcmNoaXRlY3R1cmU8L3RpdGxlPgorCTxzZWN0Mj48dGl0bGU+TUNBIERldmljZSBGdW5jdGlvbnM8L3RpdGxlPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgUmVmZXIgdG8gdGhlIGZpbGUgYXJjaC9pMzg2L2tlcm5lbC9tY2EuYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgPC9wYXJhPgorPCEtLSBGSVhNRTogUmVtb3ZlZCBmb3Igbm93IHNpbmNlIG5vIHN0cnVjdHVyZWQgY29tbWVudHMgaW4gc291cmNlCitYIUVhcmNoL2kzODYva2VybmVsL21jYS5jCistLT4KKwk8L3NlY3QyPgorCTxzZWN0Mj48dGl0bGU+TUNBIEJ1cyBETUE8L3RpdGxlPgorIUlpbmNsdWRlL2FzbS1pMzg2L21jYV9kbWEuaAorCTwvc2VjdDI+CisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZGV2ZnMiPgorICAgICA8dGl0bGU+VGhlIERldmljZSBGaWxlIFN5c3RlbTwvdGl0bGU+CishRWZzL2RldmZzL2Jhc2UuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InNlY3VyaXR5Ij4KKyAgICAgPHRpdGxlPlNlY3VyaXR5IEZyYW1ld29yazwvdGl0bGU+CishRXNlY3VyaXR5L3NlY3VyaXR5LmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwbWZ1bmNzIj4KKyAgICAgPHRpdGxlPlBvd2VyIE1hbmFnZW1lbnQ8L3RpdGxlPgorIUVrZXJuZWwvcG93ZXIvcG0uYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImJsa2RldiI+CisgICAgIDx0aXRsZT5CbG9jayBEZXZpY2VzPC90aXRsZT4KKyFFZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9Im1pc2NkZXYiPgorICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBEZXZpY2VzPC90aXRsZT4KKyFFZHJpdmVycy9jaGFyL21pc2MuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InZpZGRldiI+CisgICAgIDx0aXRsZT5WaWRlbzRMaW51eDwvdGl0bGU+CishRWRyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InNuZGRldiI+CisgICAgIDx0aXRsZT5Tb3VuZCBEZXZpY2VzPC90aXRsZT4KKyFFc291bmQvc291bmRfY29yZS5jCis8IS0tIEZJWE1FOiBSZW1vdmVkIGZvciBub3cgc2luY2Ugbm8gc3RydWN0dXJlZCBjb21tZW50cyBpbiBzb3VyY2UKK1ghSXNvdW5kL3NvdW5kX2Zpcm13YXJlLmMKKy0tPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InVhcnQxNng1MCI+CisgICAgIDx0aXRsZT4xNng1MCBVQVJUIERyaXZlcjwvdGl0bGU+CishRWRyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKyFFZHJpdmVycy9zZXJpYWwvODI1MC5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iejg1MjMwIj4KKyAgICAgPHRpdGxlPlo4NTIzMCBTdXBwb3J0IExpYnJhcnk8L3RpdGxlPgorIUVkcml2ZXJzL25ldC93YW4vejg1MjMwLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJmYmRldiI+CisgICAgIDx0aXRsZT5GcmFtZSBCdWZmZXIgTGlicmFyeTwvdGl0bGU+CisKKyAgICAgPHBhcmE+CisgICAgICAgVGhlIGZyYW1lIGJ1ZmZlciBkcml2ZXJzIGRlcGVuZCBoZWF2aWx5IG9uIGZvdXIgZGF0YSBzdHJ1Y3R1cmVzLiAgCisgICAgICAgVGhlc2Ugc3RydWN0dXJlcyBhcmUgZGVjbGFyZWQgaW4gaW5jbHVkZS9saW51eC9mYi5oLiAgVGhleSBhcmUgCisgICAgICAgZmJfaW5mbywgZmJfdmFyX3NjcmVlbmluZm8sIGZiX2ZpeF9zY3JlZW5pbmZvIGFuZCBmYl9tb25vc3BlY3MuIAorICAgICAgIFRoZSBsYXN0IHRocmVlIGNhbiBiZSBtYWRlIGF2YWlsYWJsZSB0byBhbmQgZnJvbSB1c2VybGFuZC4gCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBmYl9pbmZvIGRlZmluZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIHZpZGVvIGNhcmQuIAorICAgICAgIEluc2lkZSBmYl9pbmZvLCB0aGVyZSBleGlzdHMgYSBmYl9vcHMgc3RydWN0dXJlIHdoaWNoIGlzIGEgCisgICAgICAgY29sbGVjdGlvbiBvZiBuZWVkZWQgZnVuY3Rpb25zIHRvIG1ha2UgZmJkZXYgYW5kIGZiY29uIHdvcmsuCisgICAgICAgZmJfaW5mbyBpcyBvbmx5IHZpc2libGUgdG8gdGhlIGtlcm5lbC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIGZiX3Zhcl9zY3JlZW5pbmZvIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZlYXR1cmVzIG9mIGEgdmlkZW8gY2FyZCAKKyAgICAgICB0aGF0IGFyZSB1c2VyIGRlZmluZWQuICBXaXRoIGZiX3Zhcl9zY3JlZW5pbmZvLCB0aGluZ3Mgc3VjaCBhcworICAgICAgIGRlcHRoIGFuZCB0aGUgcmVzb2x1dGlvbiBtYXkgYmUgZGVmaW5lZC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIFRoZSBuZXh0IHN0cnVjdHVyZSBpcyBmYl9maXhfc2NyZWVuaW5mby4gVGhpcyBkZWZpbmVzIHRoZSAKKyAgICAgICBwcm9wZXJ0aWVzIG9mIGEgY2FyZCB0aGF0IGFyZSBjcmVhdGVkIHdoZW4gYSBtb2RlIGlzIHNldCBhbmQgY2FuJ3QgCisgICAgICAgYmUgY2hhbmdlZCBvdGhlcndpc2UuICBBIGdvb2QgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgCisgICAgICAgZnJhbWUgYnVmZmVyIG1lbW9yeS4gIFRoaXMgImxvY2tzIiB0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWUgYnVmZmVyCisgICAgICAgbWVtb3J5LCBzbyB0aGF0IGl0IGNhbm5vdCBiZSBjaGFuZ2VkIG9yIG1vdmVkLgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICAgVGhlIGxhc3Qgc3RydWN0dXJlIGlzIGZiX21vbm9zcGVjcy4gSW4gdGhlIG9sZCBBUEksIHRoZXJlIHdhcyAKKyAgICAgICBsaXR0bGUgaW1wb3J0YW5jZSBmb3IgZmJfbW9ub3NwZWNzLiBUaGlzIGFsbG93ZWQgZm9yIGZvcmJpZGRlbiB0aGluZ3MgCisgICAgICAgc3VjaCBhcyBzZXR0aW5nIGEgbW9kZSBvZiA4MDB4NjAwIG9uIGEgZml4IGZyZXF1ZW5jeSBtb25pdG9yLiBXaXRoIAorICAgICAgIHRoZSBuZXcgQVBJLCBmYl9tb25vc3BlY3MgcHJldmVudHMgc3VjaCB0aGluZ3MsIGFuZCBpZiB1c2VkIAorICAgICAgIGNvcnJlY3RseSwgY2FuIHByZXZlbnQgYSBtb25pdG9yIGZyb20gYmVpbmcgY29va2VkLiAgZmJfbW9ub3NwZWNzCisgICAgICAgd2lsbCBub3QgYmUgdXNlZnVsIHVudGlsIGtlcm5lbHMgMi41LnguCisgICAgIDwvcGFyYT4KKworICAgICA8c2VjdDE+PHRpdGxlPkZyYW1lIEJ1ZmZlciBNZW1vcnk8L3RpdGxlPgorIUVkcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgQ29uc29sZTwvdGl0bGU+CishRWRyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIENvbG9ybWFwPC90aXRsZT4KKyFFZHJpdmVycy92aWRlby9mYmNtYXAuYworICAgICA8L3NlY3QxPgorPCEtLSBGSVhNRToKKyAgZHJpdmVycy92aWRlby9mYmdlbi5jIGhhcyBubyBkb2NzLCB3aGljaCBzdHVmZnMgdXAgdGhlIHNnbWwuICBDb21tZW50CisgIG91dCB1bnRpbCBzb21lYm9keSBhZGRzIGRvY3MuICBLQU8KKyAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgR2VuZXJpYyBGdW5jdGlvbnM8L3RpdGxlPgorWCFJZHJpdmVycy92aWRlby9mYmdlbi5jCisgICAgIDwvc2VjdDE+CitLQU8gLS0+CisgICAgIDxzZWN0MT48dGl0bGU+RnJhbWUgQnVmZmVyIFZpZGVvIE1vZGUgRGF0YWJhc2U8L3RpdGxlPgorIUlkcml2ZXJzL3ZpZGVvL21vZGVkYi5jCishRWRyaXZlcnMvdmlkZW8vbW9kZWRiLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgTWFjaW50b3NoIFZpZGVvIE1vZGUgRGF0YWJhc2U8L3RpdGxlPgorIUlkcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5GcmFtZSBCdWZmZXIgRm9udHM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgUmVmZXIgdG8gdGhlIGZpbGUgZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRzLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKzwhLS0gRklYTUU6IFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBubyBzdHJ1Y3R1cmVkIGNvbW1lbnRzIGluIHNvdXJjZQorWCFJZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRzLmMKKy0tPgorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWhhY2tpbmcudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtaGFja2luZy50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTllZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWhhY2tpbmcudG1wbApAQCAtMCwwICsxLDEzNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0ibGstaGFja2luZy1ndWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VW5yZWxpYWJsZSBHdWlkZSBUbyBIYWNraW5nIFRoZSBMaW51eCBLZXJuZWw8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPlBhdWw8L2ZpcnN0bmFtZT4KKyAgICA8b3RoZXJuYW1lPlJ1c3R5PC9vdGhlcm5hbWU+CisgICAgPHN1cm5hbWU+UnVzc2VsbDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDE8L3llYXI+CisgICA8aG9sZGVyPlJ1c3R5IFJ1c3NlbGw8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgCisgICA8cGFyYT4KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAKKyAgIDxwYXJhPgorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAKKyAgIDxwYXJhPgorICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKworICA8cmVsZWFzZWluZm8+CisgICBUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlIG9mIHRoaXMgZG9jdW1lbnQgYXMgcGFydCBvZiB0aGUga2VybmVsIHRhcmJhbGwuCisgIDwvcmVsZWFzZWluZm8+CisKKyA8L2Jvb2tpbmZvPgorCisgPHRvYz48L3RvYz4KKworIDxjaGFwdGVyIGlkPSJpbnRyb2R1Y3Rpb24iPgorICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICBXZWxjb21lLCBnZW50bGUgcmVhZGVyLCB0byBSdXN0eSdzIFVucmVsaWFibGUgR3VpZGUgdG8gTGludXgKKyAgIEtlcm5lbCBIYWNraW5nLiAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNvbW1vbiByb3V0aW5lcyBhbmQKKyAgIGdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBrZXJuZWwgY29kZTogaXRzIGdvYWwgaXMgdG8gc2VydmUgYXMgYQorICAgcHJpbWVyIGZvciBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgZm9yIGV4cGVyaWVuY2VkIEMKKyAgIHByb2dyYW1tZXJzLiAgSSBhdm9pZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzOiB0aGF0J3Mgd2hhdCB0aGUKKyAgIGNvZGUgaXMgZm9yLCBhbmQgSSBpZ25vcmUgd2hvbGUgdHJhY3RzIG9mIHVzZWZ1bCByb3V0aW5lcy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgIEJlZm9yZSB5b3UgcmVhZCB0aGlzLCBwbGVhc2UgdW5kZXJzdGFuZCB0aGF0IEkgbmV2ZXIgd2FudGVkIHRvCisgICB3cml0ZSB0aGlzIGRvY3VtZW50LCBiZWluZyBncm9zc2x5IHVuZGVyLXF1YWxpZmllZCwgYnV0IEkgYWx3YXlzCisgICB3YW50ZWQgdG8gcmVhZCBpdCwgYW5kIHRoaXMgd2FzIHRoZSBvbmx5IHdheS4gIEkgaG9wZSBpdCB3aWxsCisgICBncm93IGludG8gYSBjb21wZW5kaXVtIG9mIGJlc3QgcHJhY3RpY2UsIGNvbW1vbiBzdGFydGluZyBwb2ludHMKKyAgIGFuZCByYW5kb20gaW5mb3JtYXRpb24uCisgIDwvcGFyYT4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iYmFzaWMtcGxheWVycyI+CisgIDx0aXRsZT5UaGUgUGxheWVyczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBBdCBhbnkgdGltZSBlYWNoIG9mIHRoZSBDUFVzIGluIGEgc3lzdGVtIGNhbiBiZToKKyAgPC9wYXJhPgorCisgIDxpdGVtaXplZGxpc3Q+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHByb2Nlc3MsIHNlcnZpbmcgYSBoYXJkd2FyZSBpbnRlcnJ1cHQ7CisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwcm9jZXNzLCBzZXJ2aW5nIGEgc29mdGlycSwgdGFza2xldCBvciBiaDsKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIHJ1bm5pbmcgaW4ga2VybmVsIHNwYWNlLCBhc3NvY2lhdGVkIHdpdGggYSBwcm9jZXNzOworICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgcnVubmluZyBhIHByb2Nlc3MgaW4gdXNlciBzcGFjZS4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKworICA8cGFyYT4KKyAgIFRoZXJlIGlzIGEgc3RyaWN0IG9yZGVyaW5nIGJldHdlZW4gdGhlc2U6IG90aGVyIHRoYW4gdGhlIGxhc3QKKyAgIGNhdGVnb3J5ICh1c2Vyc3BhY2UpIGVhY2ggY2FuIG9ubHkgYmUgcHJlLWVtcHRlZCBieSB0aG9zZSBhYm92ZS4KKyAgIEZvciBleGFtcGxlLCB3aGlsZSBhIHNvZnRpcnEgaXMgcnVubmluZyBvbiBhIENQVSwgbm8gb3RoZXIKKyAgIHNvZnRpcnEgd2lsbCBwcmUtZW1wdCBpdCwgYnV0IGEgaGFyZHdhcmUgaW50ZXJydXB0IGNhbi4gIEhvd2V2ZXIsCisgICBhbnkgb3RoZXIgQ1BVcyBpbiB0aGUgc3lzdGVtIGV4ZWN1dGUgaW5kZXBlbmRlbnRseS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2UnbGwgc2VlIGEgbnVtYmVyIG9mIHdheXMgdGhhdCB0aGUgdXNlciBjb250ZXh0IGNhbiBibG9jaworICAgaW50ZXJydXB0cywgdG8gYmVjb21lIHRydWx5IG5vbi1wcmVlbXB0YWJsZS4KKyAgPC9wYXJhPgorICAKKyAgPHNlY3QxIGlkPSJiYXNpY3MtdXNlcmNvbnRleHQiPgorICAgPHRpdGxlPlVzZXIgQ29udGV4dDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFVzZXIgY29udGV4dCBpcyB3aGVuIHlvdSBhcmUgY29taW5nIGluIGZyb20gYSBzeXN0ZW0gY2FsbCBvcgorICAgIG90aGVyIHRyYXA6IHlvdSBjYW4gc2xlZXAsIGFuZCB5b3Ugb3duIHRoZSBDUFUgKGV4Y2VwdCBmb3IKKyAgICBpbnRlcnJ1cHRzKSB1bnRpbCB5b3UgY2FsbCA8ZnVuY3Rpb24+c2NoZWR1bGUoKTwvZnVuY3Rpb24+LiAgCisgICAgSW4gb3RoZXIgd29yZHMsIHVzZXIgY29udGV4dCAodW5saWtlIHVzZXJzcGFjZSkgaXMgbm90IHByZS1lbXB0YWJsZS4KKyAgIDwvcGFyYT4KKworICAgPG5vdGU+CisgICAgPHBhcmE+CisgICAgIFlvdSBhcmUgYWx3YXlzIGluIHVzZXIgY29udGV4dCBvbiBtb2R1bGUgbG9hZCBhbmQgdW5sb2FkLAorICAgICBhbmQgb24gb3BlcmF0aW9ucyBvbiB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLgorICAgIDwvcGFyYT4KKyAgIDwvbm90ZT4KKworICAgPHBhcmE+CisgICAgSW4gdXNlciBjb250ZXh0LCB0aGUgPHZhcm5hbWU+Y3VycmVudDwvdmFybmFtZT4gcG9pbnRlciAoaW5kaWNhdGluZyAKKyAgICB0aGUgdGFzayB3ZSBhcmUgY3VycmVudGx5IGV4ZWN1dGluZykgaXMgdmFsaWQsIGFuZAorICAgIDxmdW5jdGlvbj5pbl9pbnRlcnJ1cHQoKTwvZnVuY3Rpb24+CisgICAgKDxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPC9maWxlbmFtZT4pIGlzIDxyZXR1cm52YWx1ZT5mYWxzZQorICAgIDwvcmV0dXJudmFsdWU+LiAgCisgICA8L3BhcmE+CisKKyAgIDxjYXV0aW9uPgorICAgIDxwYXJhPgorICAgICBCZXdhcmUgdGhhdCBpZiB5b3UgaGF2ZSBpbnRlcnJ1cHRzIG9yIGJvdHRvbSBoYWx2ZXMgZGlzYWJsZWQgCisgICAgIChzZWUgYmVsb3cpLCA8ZnVuY3Rpb24+aW5faW50ZXJydXB0KCk8L2Z1bmN0aW9uPiB3aWxsIHJldHVybiBhIAorICAgICBmYWxzZSBwb3NpdGl2ZS4KKyAgICA8L3BhcmE+CisgICA8L2NhdXRpb24+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJiYXNpY3MtaGFyZGlycXMiPgorICAgPHRpdGxlPkhhcmR3YXJlIEludGVycnVwdHMgKEhhcmQgSVJRcyk8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaW1lciB0aWNrcywgPGhhcmR3YXJlPm5ldHdvcmsgY2FyZHM8L2hhcmR3YXJlPiBhbmQgCisgICAgPGhhcmR3YXJlPmtleWJvYXJkPC9oYXJkd2FyZT4gYXJlIGV4YW1wbGVzIG9mIHJlYWwKKyAgICBoYXJkd2FyZSB3aGljaCBwcm9kdWNlIGludGVycnVwdHMgYXQgYW55IHRpbWUuICBUaGUga2VybmVsIHJ1bnMKKyAgICBpbnRlcnJ1cHQgaGFuZGxlcnMsIHdoaWNoIHNlcnZpY2VzIHRoZSBoYXJkd2FyZS4gIFRoZSBrZXJuZWwKKyAgICBndWFyYW50ZWVzIHRoYXQgdGhpcyBoYW5kbGVyIGlzIG5ldmVyIHJlLWVudGVyZWQ6IGlmIGFub3RoZXIKKyAgICBpbnRlcnJ1cHQgYXJyaXZlcywgaXQgaXMgcXVldWVkIChvciBkcm9wcGVkKS4gIEJlY2F1c2UgaXQKKyAgICBkaXNhYmxlcyBpbnRlcnJ1cHRzLCB0aGlzIGhhbmRsZXIgaGFzIHRvIGJlIGZhc3Q6IGZyZXF1ZW50bHkgaXQKKyAgICBzaW1wbHkgYWNrbm93bGVkZ2VzIHRoZSBpbnRlcnJ1cHQsIG1hcmtzIGEgYHNvZnR3YXJlIGludGVycnVwdCcKKyAgICBmb3IgZXhlY3V0aW9uIGFuZCBleGl0cy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgWW91IGNhbiB0ZWxsIHlvdSBhcmUgaW4gYSBoYXJkd2FyZSBpbnRlcnJ1cHQsIGJlY2F1c2UgCisgICAgPGZ1bmN0aW9uPmluX2lycSgpPC9mdW5jdGlvbj4gcmV0dXJucyA8cmV0dXJudmFsdWU+dHJ1ZTwvcmV0dXJudmFsdWU+LiAgCisgICA8L3BhcmE+CisgICA8Y2F1dGlvbj4KKyAgICA8cGFyYT4KKyAgICAgQmV3YXJlIHRoYXQgdGhpcyB3aWxsIHJldHVybiBhIGZhbHNlIHBvc2l0aXZlIGlmIGludGVycnVwdHMgYXJlIGRpc2FibGVkIAorICAgICAoc2VlIGJlbG93KS4KKyAgICA8L3BhcmE+CisgICA8L2NhdXRpb24+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJiYXNpY3Mtc29mdGlycXMiPgorICAgPHRpdGxlPlNvZnR3YXJlIEludGVycnVwdCBDb250ZXh0OiBCb3R0b20gSGFsdmVzLCBUYXNrbGV0cywgc29mdGlycXM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBXaGVuZXZlciBhIHN5c3RlbSBjYWxsIGlzIGFib3V0IHRvIHJldHVybiB0byB1c2Vyc3BhY2UsIG9yIGEKKyAgICBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBleGl0cywgYW55IGBzb2Z0d2FyZSBpbnRlcnJ1cHRzJworICAgIHdoaWNoIGFyZSBtYXJrZWQgcGVuZGluZyAodXN1YWxseSBieSBoYXJkd2FyZSBpbnRlcnJ1cHRzKSBhcmUKKyAgICBydW4gKDxmaWxlbmFtZT5rZXJuZWwvc29mdGlycS5jPC9maWxlbmFtZT4pLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBNdWNoIG9mIHRoZSByZWFsIGludGVycnVwdCBoYW5kbGluZyB3b3JrIGlzIGRvbmUgaGVyZS4gIEVhcmx5IGluCisgICAgdGhlIHRyYW5zaXRpb24gdG8gPGFjcm9ueW0+U01QPC9hY3JvbnltPiwgdGhlcmUgd2VyZSBvbmx5IGBib3R0b20gCisgICAgaGFsdmVzJyAoQkhzKSwgd2hpY2ggZGlkbid0IHRha2UgYWR2YW50YWdlIG9mIG11bHRpcGxlIENQVXMuICBTaG9ydGx5IAorICAgIGFmdGVyIHdlIHN3aXRjaGVkIGZyb20gd2luZC11cCBjb21wdXRlcnMgbWFkZSBvZiBtYXRjaC1zdGlja3MgYW5kIHNub3QsCisgICAgd2UgYWJhbmRvbmVkIHRoaXMgbGltaXRhdGlvbi4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPC9maWxlbmFtZT4gbGlzdHMgdGhlCisgICAgZGlmZmVyZW50IEJIJ3MuICBObyBtYXR0ZXIgaG93IG1hbnkgQ1BVcyB5b3UgaGF2ZSwgbm8gdHdvIEJIcyB3aWxsIHJ1biBhdCAKKyAgICB0aGUgc2FtZSB0aW1lLiBUaGlzIG1hZGUgdGhlIHRyYW5zaXRpb24gdG8gU01QIHNpbXBsZXIsIGJ1dCBzdWNrcyBoYXJkIGZvcgorICAgIHNjYWxhYmxlIHBlcmZvcm1hbmNlLiAgQSB2ZXJ5IGltcG9ydGFudCBib3R0b20gaGFsZiBpcyB0aGUgdGltZXIKKyAgICBCSCAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3RpbWVyLmg8L2ZpbGVuYW1lPik6IHlvdQorICAgIGNhbiByZWdpc3RlciB0byBoYXZlIGl0IGNhbGwgZnVuY3Rpb25zIGZvciB5b3UgaW4gYSBnaXZlbiBsZW5ndGggb2YgdGltZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgMi4zLjQzIGludHJvZHVjZWQgc29mdGlycXMsIGFuZCByZS1pbXBsZW1lbnRlZCB0aGUgKG5vdworICAgIGRlcHJlY2F0ZWQpIEJIcyB1bmRlcm5lYXRoIHRoZW0uICBTb2Z0aXJxcyBhcmUgZnVsbHktU01QCisgICAgdmVyc2lvbnMgb2YgQkhzOiB0aGV5IGNhbiBydW4gb24gYXMgbWFueSBDUFVzIGF0IG9uY2UgYXMKKyAgICByZXF1aXJlZC4gIFRoaXMgbWVhbnMgdGhleSBuZWVkIHRvIGRlYWwgd2l0aCBhbnkgcmFjZXMgaW4gc2hhcmVkCisgICAgZGF0YSB1c2luZyB0aGVpciBvd24gbG9ja3MuICBBIGJpdG1hc2sgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mCisgICAgd2hpY2ggYXJlIGVuYWJsZWQsIHNvIHRoZSAzMiBhdmFpbGFibGUgc29mdGlycXMgc2hvdWxkIG5vdCBiZQorICAgIHVzZWQgdXAgbGlnaHRseS4gICg8ZW1waGFzaXM+WWVzPC9lbXBoYXNpcz4sIHBlb3BsZSB3aWxsCisgICAgbm90aWNlKS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgdGFza2xldHMgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDwvZmlsZW5hbWU+KQorICAgIGFyZSBsaWtlIHNvZnRpcnFzLCBleGNlcHQgdGhleSBhcmUgZHluYW1pY2FsbHktcmVnaXN0cmFibGUgKG1lYW5pbmcgeW91IAorICAgIGNhbiBoYXZlIGFzIG1hbnkgYXMgeW91IHdhbnQpLCBhbmQgdGhleSBhbHNvIGd1YXJhbnRlZSB0aGF0IGFueSB0YXNrbGV0IAorICAgIHdpbGwgb25seSBydW4gb24gb25lIENQVSBhdCBhbnkgdGltZSwgYWx0aG91Z2ggZGlmZmVyZW50IHRhc2tsZXRzIGNhbiAKKyAgICBydW4gc2ltdWx0YW5lb3VzbHkgKHVubGlrZSBkaWZmZXJlbnQgQkhzKS4gIAorICAgPC9wYXJhPgorICAgPGNhdXRpb24+CisgICAgPHBhcmE+CisgICAgIFRoZSBuYW1lIGB0YXNrbGV0JyBpcyBtaXNsZWFkaW5nOiB0aGV5IGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGB0YXNrcycsIAorICAgICBhbmQgcHJvYmFibHkgbW9yZSB0byBkbyB3aXRoIHNvbWUgYmFkIHZvZGthIEFsZXhleSBLdXpuZXRzb3YgaGFkIGF0IHRoZSAKKyAgICAgdGltZS4KKyAgICA8L3BhcmE+CisgICA8L2NhdXRpb24+CisKKyAgIDxwYXJhPgorICAgIFlvdSBjYW4gdGVsbCB5b3UgYXJlIGluIGEgc29mdGlycSAob3IgYm90dG9tIGhhbGYsIG9yIHRhc2tsZXQpCisgICAgdXNpbmcgdGhlIDxmdW5jdGlvbj5pbl9zb2Z0aXJxKCk8L2Z1bmN0aW9uPiBtYWNybyAKKyAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPC9maWxlbmFtZT4pLgorICAgPC9wYXJhPgorICAgPGNhdXRpb24+CisgICAgPHBhcmE+CisgICAgIEJld2FyZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZSBpZiBhIGJoIGxvY2sgKHNlZSBiZWxvdykKKyAgICAgaXMgaGVsZC4KKyAgICA8L3BhcmE+CisgICA8L2NhdXRpb24+CisgIDwvc2VjdDE+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9ImJhc2ljLXJ1bGVzIj4KKyAgPHRpdGxlPlNvbWUgQmFzaWMgUnVsZXM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPk5vIG1lbW9yeSBwcm90ZWN0aW9uPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBJZiB5b3UgY29ycnVwdCBtZW1vcnksIHdoZXRoZXIgaW4gdXNlciBjb250ZXh0IG9yCisgICAgICBpbnRlcnJ1cHQgY29udGV4dCwgdGhlIHdob2xlIG1hY2hpbmUgd2lsbCBjcmFzaC4gIEFyZSB5b3UKKyAgICAgIHN1cmUgeW91IGNhbid0IGRvIHdoYXQgeW91IHdhbnQgaW4gdXNlcnNwYWNlPworICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPk5vIGZsb2F0aW5nIHBvaW50IG9yIDxhY3JvbnltPk1NWDwvYWNyb255bT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSA8YWNyb255bT5GUFU8L2Fjcm9ueW0+IGNvbnRleHQgaXMgbm90IHNhdmVkOyBldmVuIGluIHVzZXIKKyAgICAgIGNvbnRleHQgdGhlIDxhY3JvbnltPkZQVTwvYWNyb255bT4gc3RhdGUgcHJvYmFibHkgd29uJ3QKKyAgICAgIGNvcnJlc3BvbmQgd2l0aCB0aGUgY3VycmVudCBwcm9jZXNzOiB5b3Ugd291bGQgbWVzcyB3aXRoIHNvbWUKKyAgICAgIHVzZXIgcHJvY2VzcycgPGFjcm9ueW0+RlBVPC9hY3JvbnltPiBzdGF0ZS4gIElmIHlvdSByZWFsbHkgd2FudAorICAgICAgdG8gZG8gdGhpcywgeW91IHdvdWxkIGhhdmUgdG8gZXhwbGljaXRseSBzYXZlL3Jlc3RvcmUgdGhlIGZ1bGwKKyAgICAgIDxhY3JvbnltPkZQVTwvYWNyb255bT4gc3RhdGUgKGFuZCBhdm9pZCBjb250ZXh0IHN3aXRjaGVzKS4gIEl0CisgICAgICBpcyBnZW5lcmFsbHkgYSBiYWQgaWRlYTsgdXNlIGZpeGVkIHBvaW50IGFyaXRobWV0aWMgZmlyc3QuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+QSByaWdpZCBzdGFjayBsaW1pdDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIGtlcm5lbCBzdGFjayBpcyBhYm91dCA2SyBpbiAyLjIgKGZvciBtb3N0CisgICAgICBhcmNoaXRlY3R1cmVzOiBpdCdzIGFib3V0IDE0SyBvbiB0aGUgQWxwaGEpLCBhbmQgc2hhcmVkCisgICAgICB3aXRoIGludGVycnVwdHMgc28geW91IGNhbid0IHVzZSBpdCBhbGwuICBBdm9pZCBkZWVwCisgICAgICByZWN1cnNpb24gYW5kIGh1Z2UgbG9jYWwgYXJyYXlzIG9uIHRoZSBzdGFjayAoYWxsb2NhdGUKKyAgICAgIHRoZW0gZHluYW1pY2FsbHkgaW5zdGVhZCkuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+VGhlIExpbnV4IGtlcm5lbCBpcyBwb3J0YWJsZTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTGV0J3Mga2VlcCBpdCB0aGF0IHdheS4gIFlvdXIgY29kZSBzaG91bGQgYmUgNjQtYml0IGNsZWFuLAorICAgICAgYW5kIGVuZGlhbi1pbmRlcGVuZGVudC4gIFlvdSBzaG91bGQgYWxzbyBtaW5pbWl6ZSBDUFUKKyAgICAgIHNwZWNpZmljIHN0dWZmLCBlLmcuIGlubGluZSBhc3NlbWJseSBzaG91bGQgYmUgY2xlYW5seQorICAgICAgZW5jYXBzdWxhdGVkIGFuZCBtaW5pbWl6ZWQgdG8gZWFzZSBwb3J0aW5nLiAgR2VuZXJhbGx5IGl0CisgICAgICBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0IG9mCisgICAgICB0aGUga2VybmVsIHRyZWUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJpb2N0bHMiPgorICA8dGl0bGU+aW9jdGxzOiBOb3Qgd3JpdGluZyBhIG5ldyBzeXN0ZW0gY2FsbDwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBBIHN5c3RlbSBjYWxsIGdlbmVyYWxseSBsb29rcyBsaWtlIHRoaXMKKyAgPC9wYXJhPgorCisgIDxwcm9ncmFtbGlzdGluZz4KK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXljYWxsKGludCBhcmcpCit7CisgICAgICAgIHJldHVybiAwOyAKK30KKyAgPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIEZpcnN0LCBpbiBtb3N0IGNhc2VzIHlvdSBkb24ndCB3YW50IHRvIGNyZWF0ZSBhIG5ldyBzeXN0ZW0gY2FsbC4KKyAgIFlvdSBjcmVhdGUgYSBjaGFyYWN0ZXIgZGV2aWNlIGFuZCBpbXBsZW1lbnQgYW4gYXBwcm9wcmlhdGUgaW9jdGwKKyAgIGZvciBpdC4gIFRoaXMgaXMgbXVjaCBtb3JlIGZsZXhpYmxlIHRoYW4gc3lzdGVtIGNhbGxzLCBkb2Vzbid0IGhhdmUKKyAgIHRvIGJlIGVudGVyZWQgaW4gZXZlcnkgYXJjaGl0ZWN0dXJlJ3MKKyAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vdW5pc3RkLmg8L2ZpbGVuYW1lPiBhbmQKKyAgIDxmaWxlbmFtZT5hcmNoL2tlcm5lbC9lbnRyeS5TPC9maWxlbmFtZT4gZmlsZSwgYW5kIGlzIG11Y2ggbW9yZQorICAgbGlrZWx5IHRvIGJlIGFjY2VwdGVkIGJ5IExpbnVzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJZiBhbGwgeW91ciByb3V0aW5lIGRvZXMgaXMgcmVhZCBvciB3cml0ZSBzb21lIHBhcmFtZXRlciwgY29uc2lkZXIKKyAgIGltcGxlbWVudGluZyBhIDxmdW5jdGlvbj5zeXNjdGw8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgaW5zdGVhZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5zaWRlIHRoZSBpb2N0bCB5b3UncmUgaW4gdXNlciBjb250ZXh0IHRvIGEgcHJvY2Vzcy4gIFdoZW4gYQorICAgZXJyb3Igb2NjdXJzIHlvdSByZXR1cm4gYSBuZWdhdGVkIGVycm5vIChzZWUKKyAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9lcnJuby5oPC9maWxlbmFtZT4pLAorICAgb3RoZXJ3aXNlIHlvdSByZXR1cm4gPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQWZ0ZXIgeW91IHNsZXB0IHlvdSBzaG91bGQgY2hlY2sgaWYgYSBzaWduYWwgb2NjdXJyZWQ6IHRoZQorICAgVW5peC9MaW51eCB3YXkgb2YgaGFuZGxpbmcgc2lnbmFscyBpcyB0byB0ZW1wb3JhcmlseSBleGl0IHRoZQorICAgc3lzdGVtIGNhbGwgd2l0aCB0aGUgPGNvbnN0YW50Pi1FUkVTVEFSVFNZUzwvY29uc3RhbnQ+IGVycm9yLiAgVGhlCisgICBzeXN0ZW0gY2FsbCBlbnRyeSBjb2RlIHdpbGwgc3dpdGNoIGJhY2sgdG8gdXNlciBjb250ZXh0LCBwcm9jZXNzCisgICB0aGUgc2lnbmFsIGhhbmRsZXIgYW5kIHRoZW4geW91ciBzeXN0ZW0gY2FsbCB3aWxsIGJlIHJlc3RhcnRlZAorICAgKHVubGVzcyB0aGUgdXNlciBkaXNhYmxlZCB0aGF0KS4gIFNvIHlvdSBzaG91bGQgYmUgcHJlcGFyZWQgdG8KKyAgIHByb2Nlc3MgdGhlIHJlc3RhcnQsIGUuZy4gaWYgeW91J3JlIGluIHRoZSBtaWRkbGUgb2YgbWFuaXB1bGF0aW5nCisgICBzb21lIGRhdGEgc3RydWN0dXJlLgorICA8L3BhcmE+CisKKyAgPHByb2dyYW1saXN0aW5nPgoraWYgKHNpZ25hbF9wZW5kaW5nKCkpIAorICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOworICA8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgSWYgeW91J3JlIGRvaW5nIGxvbmdlciBjb21wdXRhdGlvbnM6IGZpcnN0IHRoaW5rIHVzZXJzcGFjZS4gSWYgeW91CisgICA8ZW1waGFzaXM+cmVhbGx5PC9lbXBoYXNpcz4gd2FudCB0byBkbyBpdCBpbiBrZXJuZWwgeW91IHNob3VsZAorICAgcmVndWxhcmx5IGNoZWNrIGlmIHlvdSBuZWVkIHRvIGdpdmUgdXAgdGhlIENQVSAocmVtZW1iZXIgdGhlcmUgaXMKKyAgIGNvb3BlcmF0aXZlIG11bHRpdGFza2luZyBwZXIgQ1BVKS4gIElkaW9tOgorICA8L3BhcmE+CisKKyAgPHByb2dyYW1saXN0aW5nPgorY29uZF9yZXNjaGVkKCk7IC8qIFdpbGwgc2xlZXAgKi8gCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBBIHNob3J0IG5vdGUgb24gaW50ZXJmYWNlIGRlc2lnbjogdGhlIFVOSVggc3lzdGVtIGNhbGwgbW90dG8gaXMKKyAgICJQcm92aWRlIG1lY2hhbmlzbSBub3QgcG9saWN5Ii4KKyAgPC9wYXJhPgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJkZWFkbG9jay1yZWNpcGVzIj4KKyAgPHRpdGxlPlJlY2lwZXMgZm9yIERlYWRsb2NrPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFlvdSBjYW5ub3QgY2FsbCBhbnkgcm91dGluZXMgd2hpY2ggbWF5IHNsZWVwLCB1bmxlc3M6CisgIDwvcGFyYT4KKyAgPGl0ZW1pemVkbGlzdD4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgWW91IGFyZSBpbiB1c2VyIGNvbnRleHQuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBZb3UgZG8gbm90IG93biBhbnkgc3BpbmxvY2tzLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgWW91IGhhdmUgaW50ZXJydXB0cyBlbmFibGVkIChhY3R1YWxseSwgQW5kaSBLbGVlbiBzYXlzCisgICAgIHRoYXQgdGhlIHNjaGVkdWxpbmcgY29kZSB3aWxsIGVuYWJsZSB0aGVtIGZvciB5b3UsIGJ1dAorICAgICB0aGF0J3MgcHJvYmFibHkgbm90IHdoYXQgeW91IHdhbnRlZCkuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+CisKKyAgPHBhcmE+CisgICBOb3RlIHRoYXQgc29tZSBmdW5jdGlvbnMgbWF5IHNsZWVwIGltcGxpY2l0bHk6IGNvbW1vbiBvbmVzIGFyZQorICAgdGhlIHVzZXIgc3BhY2UgYWNjZXNzIGZ1bmN0aW9ucyAoKl91c2VyKSBhbmQgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZ1bmN0aW9ucyB3aXRob3V0IDxzeW1ib2w+R0ZQX0FUT01JQzwvc3ltYm9sPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgWW91IHdpbGwgZXZlbnR1YWxseSBsb2NrIHVwIHlvdXIgYm94IGlmIHlvdSBicmVhayB0aGVzZSBydWxlcy4gIAorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBSZWFsbHkuCisgIDwvcGFyYT4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iY29tbW9uLXJvdXRpbmVzIj4KKyAgPHRpdGxlPkNvbW1vbiBSb3V0aW5lczwvdGl0bGU+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1wcmludGsiPgorICAgPHRpdGxlPgorICAgIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oPC9maWxlbmFtZT4KKyAgIDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGZlZWRzIGtlcm5lbCBtZXNzYWdlcyB0byB0aGUKKyAgICBjb25zb2xlLCBkbWVzZywgYW5kIHRoZSBzeXNsb2cgZGFlbW9uLiAgSXQgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyAgICBhbmQgcmVwb3J0aW5nIGVycm9ycywgYW5kIGNhbiBiZSB1c2VkIGluc2lkZSBpbnRlcnJ1cHQgY29udGV4dCwKKyAgICBidXQgdXNlIHdpdGggY2F1dGlvbjogYSBtYWNoaW5lIHdoaWNoIGhhcyBpdHMgY29uc29sZSBmbG9vZGVkIHdpdGgKKyAgICBwcmludGsgbWVzc2FnZXMgaXMgdW51c2FibGUuICBJdCB1c2VzIGEgZm9ybWF0IHN0cmluZyBtb3N0bHkKKyAgICBjb21wYXRpYmxlIHdpdGggQU5TSSBDIHByaW50ZiwgYW5kIEMgc3RyaW5nIGNvbmNhdGVuYXRpb24gdG8gZ2l2ZQorICAgIGl0IGEgZmlyc3QgInByaW9yaXR5IiBhcmd1bWVudDoKKyAgIDwvcGFyYT4KKworICAgPHByb2dyYW1saXN0aW5nPgorcHJpbnRrKEtFUk5fSU5GTyAiaSA9ICV1XG4iLCBpKTsKKyAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDxwYXJhPgorICAgIFNlZSA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgva2VybmVsLmg8L2ZpbGVuYW1lPjsKKyAgICBmb3Igb3RoZXIgS0VSTl8gdmFsdWVzOyB0aGVzZSBhcmUgaW50ZXJwcmV0ZWQgYnkgc3lzbG9nIGFzIHRoZQorICAgIGxldmVsLiAgU3BlY2lhbCBjYXNlOiBmb3IgcHJpbnRpbmcgYW4gSVAgYWRkcmVzcyB1c2UKKyAgIDwvcGFyYT4KKworICAgPHByb2dyYW1saXN0aW5nPgorX191MzIgaXBhZGRyZXNzOworcHJpbnRrKEtFUk5fSU5GTyAibXkgaXA6ICVkLiVkLiVkLiVkXG4iLCBOSVBRVUFEKGlwYWRkcmVzcykpOworICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4gaW50ZXJuYWxseSB1c2VzIGEgMUsgYnVmZmVyIGFuZCBkb2VzCisgICAgbm90IGNhdGNoIG92ZXJydW5zLiAgTWFrZSBzdXJlIHRoYXQgd2lsbCBiZSBlbm91Z2guCisgICA8L3BhcmE+CisKKyAgIDxub3RlPgorICAgIDxwYXJhPgorICAgICBZb3Ugd2lsbCBrbm93IHdoZW4geW91IGFyZSBhIHJlYWwga2VybmVsIGhhY2tlcgorICAgICB3aGVuIHlvdSBzdGFydCB0eXBvaW5nIHByaW50ZiBhcyBwcmludGsgaW4geW91ciB1c2VyIHByb2dyYW1zIDopCisgICAgPC9wYXJhPgorICAgPC9ub3RlPgorCisgICA8IS0tLSBGcm9tIHRoZSBMaW9ucyBib29rIHJlYWRlciBkZXBhcnRtZW50IC0tPiAKKworICAgPG5vdGU+CisgICAgPHBhcmE+CisgICAgIEFub3RoZXIgc2lkZW5vdGU6IHRoZSBvcmlnaW5hbCBVbml4IFZlcnNpb24gNiBzb3VyY2VzIGhhZCBhCisgICAgIGNvbW1lbnQgb24gdG9wIG9mIGl0cyBwcmludGYgZnVuY3Rpb246ICJQcmludGYgc2hvdWxkIG5vdCBiZQorICAgICB1c2VkIGZvciBjaGl0LWNoYXQiLiAgWW91IHNob3VsZCBmb2xsb3cgdGhhdCBhZHZpY2UuCisgICAgPC9wYXJhPgorICAgPC9ub3RlPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtY29weSI+CisgICA8dGl0bGU+CisgICAgPGZ1bmN0aW9uPmNvcHlfW3RvL2Zyb21dX3VzZXIoKTwvZnVuY3Rpb24+CisgICAgLworICAgIDxmdW5jdGlvbj5nZXRfdXNlcigpPC9mdW5jdGlvbj4KKyAgICAvCisgICAgPGZ1bmN0aW9uPnB1dF91c2VyKCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vdWFjY2Vzcy5oPC9maWxlbmFtZT4KKyAgIDwvdGl0bGU+ICAKKworICAgPHBhcmE+CisgICAgPGVtcGhhc2lzPltTTEVFUFNdPC9lbXBoYXNpcz4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnB1dF91c2VyKCk8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmdldF91c2VyKCk8L2Z1bmN0aW9uPgorICAgIGFyZSB1c2VkIHRvIGdldCBhbmQgcHV0IHNpbmdsZSB2YWx1ZXMgKHN1Y2ggYXMgYW4gaW50LCBjaGFyLCBvcgorICAgIGxvbmcpIGZyb20gYW5kIHRvIHVzZXJzcGFjZS4gIEEgcG9pbnRlciBpbnRvIHVzZXJzcGFjZSBzaG91bGQKKyAgICBuZXZlciBiZSBzaW1wbHkgZGVyZWZlcmVuY2VkOiBkYXRhIHNob3VsZCBiZSBjb3BpZWQgdXNpbmcgdGhlc2UKKyAgICByb3V0aW5lcy4gIEJvdGggcmV0dXJuIDxjb25zdGFudD4tRUZBVUxUPC9jb25zdGFudD4gb3IgMC4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5jb3B5X3RvX3VzZXIoKTwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5jb3B5X2Zyb21fdXNlcigpPC9mdW5jdGlvbj4gYXJlIG1vcmUgZ2VuZXJhbDogdGhleSBjb3B5CisgICAgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiBkYXRhIHRvIGFuZCBmcm9tIHVzZXJzcGFjZS4KKyAgICA8Y2F1dGlvbj4KKyAgICAgPHBhcmE+CisgICAgICBVbmxpa2UgPGZ1bmN0aW9uPnB1dF91c2VyKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5nZXRfdXNlcigpPC9mdW5jdGlvbj4sIHRoZXkgcmV0dXJuIHRoZSBhbW91bnQgb2YKKyAgICAgIHVuY29waWVkIGRhdGEgKGllLiA8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+IHN0aWxsIG1lYW5zCisgICAgICBzdWNjZXNzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvY2F1dGlvbj4KKyAgICBbWWVzLCB0aGlzIG1vcm9uaWMgaW50ZXJmYWNlIG1ha2VzIG1lIGNyaW5nZS4gIFBsZWFzZSBzdWJtaXQgYQorICAgIHBhdGNoIGFuZCBiZWNvbWUgbXkgaGVybyAtLVJSLl0KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIFRoZSBmdW5jdGlvbnMgbWF5IHNsZWVwIGltcGxpY2l0bHkuIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZAorICAgIG91dHNpZGUgdXNlciBjb250ZXh0IChpdCBtYWtlcyBubyBzZW5zZSksIHdpdGggaW50ZXJydXB0cworICAgIGRpc2FibGVkLCBvciBhIHNwaW5sb2NrIGhlbGQuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1rbWFsbG9jIj4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+a21hbGxvYygpPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9zbGFiLmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5bTUFZIFNMRUVQOiBTRUUgQkVMT1ddPC9lbXBoYXNpcz4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gZHluYW1pY2FsbHkgcmVxdWVzdCBwb2ludGVyLWFsaWduZWQKKyAgICBjaHVua3Mgb2YgbWVtb3J5LCBsaWtlIG1hbGxvYyBhbmQgZnJlZSBkbyBpbiB1c2Vyc3BhY2UsIGJ1dAorICAgIDxmdW5jdGlvbj5rbWFsbG9jKCk8L2Z1bmN0aW9uPiB0YWtlcyBhbiBleHRyYSBmbGFnIHdvcmQuCisgICAgSW1wb3J0YW50IHZhbHVlczoKKyAgIDwvcGFyYT4KKworICAgPHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT4KKyAgICAgIDxjb25zdGFudD4KKyAgICAgICBHRlBfS0VSTkVMCisgICAgICA8L2NvbnN0YW50PgorICAgICA8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIE1heSBzbGVlcCBhbmQgc3dhcCB0byBmcmVlIG1lbW9yeS4gT25seSBhbGxvd2VkIGluIHVzZXIKKyAgICAgICBjb250ZXh0LCBidXQgaXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT4KKyAgICAgIDxjb25zdGFudD4KKyAgICAgICBHRlBfQVRPTUlDCisgICAgICA8L2NvbnN0YW50PgorICAgICA8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIERvbid0IHNsZWVwLiBMZXNzIHJlbGlhYmxlIHRoYW4gPGNvbnN0YW50PkdGUF9LRVJORUw8L2NvbnN0YW50PiwKKyAgICAgICBidXQgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiBZb3Ugc2hvdWxkCisgICAgICAgPGVtcGhhc2lzPnJlYWxseTwvZW1waGFzaXM+IGhhdmUgYSBnb29kIG91dC1vZi1tZW1vcnkKKyAgICAgICBlcnJvci1oYW5kbGluZyBzdHJhdGVneS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAKKyAgICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT4KKyAgICAgIDxjb25zdGFudD4KKyAgICAgICBHRlBfRE1BCisgICAgICA8L2NvbnN0YW50PgorICAgICA8L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIEFsbG9jYXRlIElTQSBETUEgbG93ZXIgdGhhbiAxNk1CLiBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoYXQKKyAgICAgICBpcyB5b3UgZG9uJ3QgbmVlZCBpdC4gIFZlcnkgdW5yZWxpYWJsZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgIDwvdmFyaWFibGVsaXN0PgorCisgICA8cGFyYT4KKyAgICBJZiB5b3Ugc2VlIGEgPGVycm9ybmFtZT5rbWVtX2dyb3c6IENhbGxlZCBub25hdG9taWNhbGx5IGZyb20gaW50CisgICAgPC9lcnJvcm5hbWU+IHdhcm5pbmcgbWVzc2FnZSB5b3UgY2FsbGVkIGEgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24KKyAgICBmcm9tIGludGVycnVwdCBjb250ZXh0IHdpdGhvdXQgPGNvbnN0YW50PkdGUF9BVE9NSUM8L2NvbnN0YW50Pi4KKyAgICBZb3Ugc2hvdWxkIHJlYWxseSBmaXggdGhhdC4gIFJ1biwgZG9uJ3Qgd2Fsay4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSWYgeW91IGFyZSBhbGxvY2F0aW5nIGF0IGxlYXN0IDxjb25zdGFudD5QQUdFX1NJWkU8L2NvbnN0YW50PgorICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3BhZ2UuaDwvZmlsZW5hbWU+KSBieXRlcywKKyAgICBjb25zaWRlciB1c2luZyA8ZnVuY3Rpb24+X19nZXRfZnJlZV9wYWdlcygpPC9mdW5jdGlvbj4KKworICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvbW0uaDwvZmlsZW5hbWU+KS4gIEl0CisgICAgdGFrZXMgYW4gb3JkZXIgYXJndW1lbnQgKDAgZm9yIHBhZ2Ugc2l6ZWQsIDEgZm9yIGRvdWJsZSBwYWdlLCAyCisgICAgZm9yIGZvdXIgcGFnZXMgZXRjLikgYW5kIHRoZSBzYW1lIG1lbW9yeSBwcmlvcml0eSBmbGFnIHdvcmQgYXMKKyAgICBhYm92ZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSWYgeW91IGFyZSBhbGxvY2F0aW5nIG1vcmUgdGhhbiBhIHBhZ2Ugd29ydGggb2YgYnl0ZXMgeW91IGNhbiB1c2UKKyAgICA8ZnVuY3Rpb24+dm1hbGxvYygpPC9mdW5jdGlvbj4uICBJdCdsbCBhbGxvY2F0ZSB2aXJ0dWFsIG1lbW9yeSBpbgorICAgIHRoZSBrZXJuZWwgbWFwLiAgVGhpcyBibG9jayBpcyBub3QgY29udGlndW91cyBpbiBwaHlzaWNhbCBtZW1vcnksCisgICAgYnV0IHRoZSA8YWNyb255bT5NTVU8L2Fjcm9ueW0+IG1ha2VzIGl0IGxvb2sgbGlrZSBpdCBpcyBmb3IgeW91CisgICAgKHNvIGl0J2xsIG9ubHkgbG9vayBjb250aWd1b3VzIHRvIHRoZSBDUFVzLCBub3QgdG8gZXh0ZXJuYWwgZGV2aWNlCisgICAgZHJpdmVycykuICBJZiB5b3UgcmVhbGx5IG5lZWQgbGFyZ2UgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeQorICAgIGZvciBzb21lIHdlaXJkIGRldmljZSwgeW91IGhhdmUgYSBwcm9ibGVtOiBpdCBpcyBwb29ybHkgc3VwcG9ydGVkCisgICAgaW4gTGludXggYmVjYXVzZSBhZnRlciBzb21lIHRpbWUgbWVtb3J5IGZyYWdtZW50YXRpb24gaW4gYSBydW5uaW5nCisgICAga2VybmVsIG1ha2VzIGl0IGhhcmQuICBUaGUgYmVzdCB3YXkgaXMgdG8gYWxsb2NhdGUgdGhlIGJsb2NrIGVhcmx5CisgICAgaW4gdGhlIGJvb3QgcHJvY2VzcyB2aWEgdGhlIDxmdW5jdGlvbj5hbGxvY19ib290bWVtKCk8L2Z1bmN0aW9uPgorICAgIHJvdXRpbmUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEJlZm9yZSBpbnZlbnRpbmcgeW91ciBvd24gY2FjaGUgb2Ygb2Z0ZW4tdXNlZCBvYmplY3RzIGNvbnNpZGVyCisgICAgdXNpbmcgYSBzbGFiIGNhY2hlIGluCisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3NsYWIuaDwvZmlsZW5hbWU+CisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1jdXJyZW50Ij4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+Y3VycmVudDwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9jdXJyZW50Lmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIChyZWFsbHkgYSBtYWNybykgY29udGFpbnMgYSBwb2ludGVyIHRvCisgICAgdGhlIGN1cnJlbnQgdGFzayBzdHJ1Y3R1cmUsIHNvIGlzIG9ubHkgdmFsaWQgaW4gdXNlciBjb250ZXh0LgorICAgIEZvciBleGFtcGxlLCB3aGVuIGEgcHJvY2VzcyBtYWtlcyBhIHN5c3RlbSBjYWxsLCB0aGlzIHdpbGwKKyAgICBwb2ludCB0byB0aGUgdGFzayBzdHJ1Y3R1cmUgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gIEl0IGlzCisgICAgPGVtcGhhc2lzPm5vdCBOVUxMPC9lbXBoYXNpcz4gaW4gaW50ZXJydXB0IGNvbnRleHQuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy11ZGVsYXkiPgorICAgPHRpdGxlPjxmdW5jdGlvbj51ZGVsYXkoKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5tZGVsYXkoKTwvZnVuY3Rpb24+CisgICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vZGVsYXkuaDwvZmlsZW5hbWU+CisgICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9kZWxheS5oPC9maWxlbmFtZT4KKyAgIDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3Igc21hbGwgcGF1c2VzLgorICAgIERvIG5vdCB1c2UgbGFyZ2UgdmFsdWVzIHdpdGggPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gYXMgeW91IHJpc2sKKyAgICBvdmVyZmxvdyAtIHRoZSBoZWxwZXIgZnVuY3Rpb24gPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4gaXMgdXNlZnVsCisgICAgaGVyZSwgb3IgZXZlbiBjb25zaWRlciA8ZnVuY3Rpb24+c2NoZWR1bGVfdGltZW91dCgpPC9mdW5jdGlvbj4uCisgICA8L3BhcmE+IAorICA8L3NlY3QxPgorIAorICA8c2VjdDEgaWQ9InJvdXRpbmVzLWVuZGlhbiI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPmNwdV90b19iZTMyKCk8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+YmUzMl90b19jcHUoKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5jcHVfdG9fbGUzMigpPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmxlMzJfdG9fY3B1KCk8L2Z1bmN0aW9uPgorICAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL2J5dGVvcmRlci5oPC9maWxlbmFtZT4KKyAgIDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8ZnVuY3Rpb24+Y3B1X3RvX2JlMzIoKTwvZnVuY3Rpb24+IGZhbWlseSAod2hlcmUgdGhlICIzMiIgY2FuCisgICAgYmUgcmVwbGFjZWQgYnkgNjQgb3IgMTYsIGFuZCB0aGUgImJlIiBjYW4gYmUgcmVwbGFjZWQgYnkgImxlIikgYXJlCisgICAgdGhlIGdlbmVyYWwgd2F5IHRvIGRvIGVuZGlhbiBjb252ZXJzaW9ucyBpbiB0aGUga2VybmVsOiB0aGV5CisgICAgcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUuICBBbGwgdmFyaWF0aW9ucyBzdXBwbHkgdGhlIHJldmVyc2UgYXMKKyAgICB3ZWxsOiA8ZnVuY3Rpb24+YmUzMl90b19jcHUoKTwvZnVuY3Rpb24+LCBldGMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZXJlIGFyZSB0d28gbWFqb3IgdmFyaWF0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnM6IHRoZSBwb2ludGVyCisgICAgdmFyaWF0aW9uLCBzdWNoIGFzIDxmdW5jdGlvbj5jcHVfdG9fYmUzMnAoKTwvZnVuY3Rpb24+LCB3aGljaCB0YWtlCisgICAgYSBwb2ludGVyIHRvIHRoZSBnaXZlbiB0eXBlLCBhbmQgcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUuICBUaGUKKyAgICBvdGhlciB2YXJpYXRpb24gaXMgdGhlICJpbi1zaXR1IiBmYW1pbHksIHN1Y2ggYXMKKyAgICA8ZnVuY3Rpb24+Y3B1X3RvX2JlMzJzKCk8L2Z1bmN0aW9uPiwgd2hpY2ggY29udmVydCB2YWx1ZSByZWZlcnJlZAorICAgIHRvIGJ5IHRoZSBwb2ludGVyLCBhbmQgcmV0dXJuIHZvaWQuCisgICA8L3BhcmE+IAorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtbG9jYWwtaXJxcyI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPmxvY2FsX2lycV9zYXZlKCk8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+bG9jYWxfaXJxX3Jlc3RvcmUoKTwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2FzbS9zeXN0ZW0uaDwvZmlsZW5hbWU+CisgICA8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGVzZSByb3V0aW5lcyBkaXNhYmxlIGhhcmQgaW50ZXJydXB0cyBvbiB0aGUgbG9jYWwgQ1BVLCBhbmQKKyAgICByZXN0b3JlIHRoZW0uICBUaGV5IGFyZSByZWVudHJhbnQ7IHNhdmluZyB0aGUgcHJldmlvdXMgc3RhdGUgaW4KKyAgICB0aGVpciBvbmUgPHZhcm5hbWU+dW5zaWduZWQgbG9uZyBmbGFnczwvdmFybmFtZT4gYXJndW1lbnQuICBJZiB5b3UKKyAgICBrbm93IHRoYXQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCwgeW91IGNhbiBzaW1wbHkgdXNlCisgICAgPGZ1bmN0aW9uPmxvY2FsX2lycV9kaXNhYmxlKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICA8ZnVuY3Rpb24+bG9jYWxfaXJxX2VuYWJsZSgpPC9mdW5jdGlvbj4uCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1zb2Z0aXJxcyI+CisgICA8dGl0bGU+PGZ1bmN0aW9uPmxvY2FsX2JoX2Rpc2FibGUoKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5sb2NhbF9iaF9lbmFibGUoKTwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPC9maWxlbmFtZT48L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGVzZSByb3V0aW5lcyBkaXNhYmxlIHNvZnQgaW50ZXJydXB0cyBvbiB0aGUgbG9jYWwgQ1BVLCBhbmQKKyAgICByZXN0b3JlIHRoZW0uICBUaGV5IGFyZSByZWVudHJhbnQ7IGlmIHNvZnQgaW50ZXJydXB0cyB3ZXJlCisgICAgZGlzYWJsZWQgYmVmb3JlLCB0aGV5IHdpbGwgc3RpbGwgYmUgZGlzYWJsZWQgYWZ0ZXIgdGhpcyBwYWlyCisgICAgb2YgZnVuY3Rpb25zIGhhcyBiZWVuIGNhbGxlZC4gIFRoZXkgcHJldmVudCBzb2Z0aXJxcywgdGFza2xldHMKKyAgICBhbmQgYm90dG9tIGhhbHZlcyBmcm9tIHJ1bm5pbmcgb24gdGhlIGN1cnJlbnQgQ1BVLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0icm91dGluZXMtcHJvY2Vzc29yaWRzIj4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+c21wX3Byb2Nlc3Nvcl9pZDwvZnVuY3Rpb24+KCkKKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3NtcC5oPC9maWxlbmFtZT48L3RpdGxlPgorICAgCisgICA8cGFyYT4KKyAgICA8ZnVuY3Rpb24+c21wX3Byb2Nlc3Nvcl9pZCgpPC9mdW5jdGlvbj4gcmV0dXJucyB0aGUgY3VycmVudAorICAgIHByb2Nlc3NvciBudW1iZXIsIGJldHdlZW4gMCBhbmQgPHN5bWJvbD5OUl9DUFVTPC9zeW1ib2w+ICh0aGUKKyAgICBtYXhpbXVtIG51bWJlciBvZiBDUFVzIHN1cHBvcnRlZCBieSBMaW51eCwgY3VycmVudGx5IDMyKS4gIFRoZXNlCisgICAgdmFsdWVzIGFyZSBub3QgbmVjZXNzYXJpbHkgY29udGludW91cy4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9InJvdXRpbmVzLWluaXQiPgorICAgPHRpdGxlPjx0eXBlPl9faW5pdDwvdHlwZT4vPHR5cGU+X19leGl0PC90eXBlPi88dHlwZT5fX2luaXRkYXRhPC90eXBlPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbml0Lmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIEFmdGVyIGJvb3QsIHRoZSBrZXJuZWwgZnJlZXMgdXAgYSBzcGVjaWFsIHNlY3Rpb247IGZ1bmN0aW9ucworICAgIG1hcmtlZCB3aXRoIDx0eXBlPl9faW5pdDwvdHlwZT4gYW5kIGRhdGEgc3RydWN0dXJlcyBtYXJrZWQgd2l0aAorICAgIDx0eXBlPl9faW5pdGRhdGE8L3R5cGU+IGFyZSBkcm9wcGVkIGFmdGVyIGJvb3QgaXMgY29tcGxldGUgKHdpdGhpbgorICAgIG1vZHVsZXMgdGhpcyBkaXJlY3RpdmUgaXMgY3VycmVudGx5IGlnbm9yZWQpLiAgPHR5cGU+X19leGl0PC90eXBlPgorICAgIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uIHdoaWNoIGlzIG9ubHkgcmVxdWlyZWQgb24gZXhpdDogdGhlCisgICAgZnVuY3Rpb24gd2lsbCBiZSBkcm9wcGVkIGlmIHRoaXMgZmlsZSBpcyBub3QgY29tcGlsZWQgYXMgYSBtb2R1bGUuCisgICAgU2VlIHRoZSBoZWFkZXIgZmlsZSBmb3IgdXNlLiBOb3RlIHRoYXQgaXQgbWFrZXMgbm8gc2Vuc2UgZm9yIGEgZnVuY3Rpb24KKyAgICBtYXJrZWQgd2l0aCA8dHlwZT5fX2luaXQ8L3R5cGU+IHRvIGJlIGV4cG9ydGVkIHRvIG1vZHVsZXMgd2l0aCAKKyAgICA8ZnVuY3Rpb24+RVhQT1JUX1NZTUJPTCgpPC9mdW5jdGlvbj4gLSB0aGlzIHdpbGwgYnJlYWsuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgIFN0YXRpYyBkYXRhIHN0cnVjdHVyZXMgbWFya2VkIGFzIDx0eXBlPl9faW5pdGRhdGE8L3R5cGU+IG11c3QgYmUgaW5pdGlhbGlzZWQKKyAgIChhcyBvcHBvc2VkIHRvIG9yZGluYXJ5IHN0YXRpYyBkYXRhIHdoaWNoIGlzIHplcm9lZCBCU1MpIGFuZCBjYW5ub3QgYmUgCisgICA8dHlwZT5jb25zdDwvdHlwZT4uCisgICA8L3BhcmE+IAorCisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJyb3V0aW5lcy1pbml0LWFnYWluIj4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+X19pbml0Y2FsbCgpPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPm1vZHVsZV9pbml0KCk8L2Z1bmN0aW9uPgorICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9pbml0Lmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisgICA8cGFyYT4KKyAgICBNYW55IHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHdlbGwgc2VydmVkIGFzIGEgbW9kdWxlCisgICAgKGR5bmFtaWNhbGx5LWxvYWRhYmxlIHBhcnRzIG9mIHRoZSBrZXJuZWwpLiAgVXNpbmcgdGhlCisgICAgPGZ1bmN0aW9uPm1vZHVsZV9pbml0KCk8L2Z1bmN0aW9uPiBhbmQKKyAgICA8ZnVuY3Rpb24+bW9kdWxlX2V4aXQoKTwvZnVuY3Rpb24+IG1hY3JvcyBpdCBpcyBlYXN5IHRvIHdyaXRlIGNvZGUKKyAgICB3aXRob3V0ICNpZmRlZnMgd2hpY2ggY2FuIG9wZXJhdGUgYm90aCBhcyBhIG1vZHVsZSBvciBidWlsdCBpbnRvCisgICAgdGhlIGtlcm5lbC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxmdW5jdGlvbj5tb2R1bGVfaW5pdCgpPC9mdW5jdGlvbj4gbWFjcm8gZGVmaW5lcyB3aGljaAorICAgIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCBhdCBtb2R1bGUgaW5zZXJ0aW9uIHRpbWUgKGlmIHRoZSBmaWxlIGlzCisgICAgY29tcGlsZWQgYXMgYSBtb2R1bGUpLCBvciBhdCBib290IHRpbWU6IGlmIHRoZSBmaWxlIGlzIG5vdAorICAgIGNvbXBpbGVkIGFzIGEgbW9kdWxlIHRoZSA8ZnVuY3Rpb24+bW9kdWxlX2luaXQoKTwvZnVuY3Rpb24+IG1hY3JvCisgICAgYmVjb21lcyBlcXVpdmFsZW50IHRvIDxmdW5jdGlvbj5fX2luaXRjYWxsKCk8L2Z1bmN0aW9uPiwgd2hpY2gKKyAgICB0aHJvdWdoIGxpbmtlciBtYWdpYyBlbnN1cmVzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBib290LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgZnVuY3Rpb24gY2FuIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciB0byBjYXVzZQorICAgIG1vZHVsZSBsb2FkaW5nIHRvIGZhaWwgKHVuZm9ydHVuYXRlbHksIHRoaXMgaGFzIG5vIGVmZmVjdCBpZgorICAgIHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsKS4gIEZvciBtb2R1bGVzLCB0aGlzIGlzCisgICAgY2FsbGVkIGluIHVzZXIgY29udGV4dCwgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQsIGFuZCB0aGUKKyAgICBrZXJuZWwgbG9jayBoZWxkLCBzbyBpdCBjYW4gc2xlZXAuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIAorICA8c2VjdDEgaWQ9InJvdXRpbmVzLW1vZHVsZWV4aXQiPgorICAgPHRpdGxlPiA8ZnVuY3Rpb24+bW9kdWxlX2V4aXQoKTwvZnVuY3Rpb24+CisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2luaXQuaDwvZmlsZW5hbWU+IDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IG1vZHVsZSByZW1vdmFsCisgICAgdGltZSAob3IgbmV2ZXIsIGluIHRoZSBjYXNlIG9mIHRoZSBmaWxlIGNvbXBpbGVkIGludG8gdGhlCisgICAga2VybmVsKS4gIEl0IHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIG1vZHVsZSB1c2FnZSBjb3VudCBoYXMKKyAgICByZWFjaGVkIHplcm8uICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIHNsZWVwLCBidXQgY2Fubm90IGZhaWw6CisgICAgZXZlcnl0aGluZyBtdXN0IGJlIGNsZWFuZWQgdXAgYnkgdGhlIHRpbWUgaXQgcmV0dXJucy4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworIDwhLS0gYWRkIGluZm8gb24gbmV3LXN0eWxlIG1vZHVsZSByZWZjb3VudGluZyBoZXJlIC0tPgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJxdWV1ZXMiPgorICA8dGl0bGU+V2FpdCBRdWV1ZXMKKyAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC93YWl0Lmg8L2ZpbGVuYW1lPgorICA8L3RpdGxlPgorICA8cGFyYT4KKyAgIDxlbXBoYXNpcz5bU0xFRVBTXTwvZW1waGFzaXM+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgd2FpdCBxdWV1ZSBpcyB1c2VkIHRvIHdhaXQgZm9yIHNvbWVvbmUgdG8gd2FrZSB5b3UgdXAgd2hlbiBhCisgICBjZXJ0YWluIGNvbmRpdGlvbiBpcyB0cnVlLiAgVGhleSBtdXN0IGJlIHVzZWQgY2FyZWZ1bGx5IHRvIGVuc3VyZQorICAgdGhlcmUgaXMgbm8gcmFjZSBjb25kaXRpb24uICBZb3UgZGVjbGFyZSBhCisgICA8dHlwZT53YWl0X3F1ZXVlX2hlYWRfdDwvdHlwZT4sIGFuZCB0aGVuIHByb2Nlc3NlcyB3aGljaCB3YW50IHRvCisgICB3YWl0IGZvciB0aGF0IGNvbmRpdGlvbiBkZWNsYXJlIGEgPHR5cGU+d2FpdF9xdWV1ZV90PC90eXBlPgorICAgcmVmZXJyaW5nIHRvIHRoZW1zZWx2ZXMsIGFuZCBwbGFjZSB0aGF0IGluIHRoZSBxdWV1ZS4KKyAgPC9wYXJhPgorCisgIDxzZWN0MSBpZD0icXVldWUtZGVjbGFyaW5nIj4KKyAgIDx0aXRsZT5EZWNsYXJpbmc8L3RpdGxlPgorICAgCisgICA8cGFyYT4KKyAgICBZb3UgZGVjbGFyZSBhIDx0eXBlPndhaXRfcXVldWVfaGVhZF90PC90eXBlPiB1c2luZyB0aGUKKyAgICA8ZnVuY3Rpb24+REVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoKTwvZnVuY3Rpb24+IG1hY3JvLCBvciB1c2luZyB0aGUKKyAgICA8ZnVuY3Rpb24+aW5pdF93YWl0cXVldWVfaGVhZCgpPC9mdW5jdGlvbj4gcm91dGluZSBpbiB5b3VyCisgICAgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgCisgIDxzZWN0MSBpZD0icXVldWUtd2FpdHF1ZXVlIj4KKyAgIDx0aXRsZT5RdWV1aW5nPC90aXRsZT4KKyAgIAorICAgPHBhcmE+CisgICAgUGxhY2luZyB5b3Vyc2VsZiBpbiB0aGUgd2FpdHF1ZXVlIGlzIGZhaXJseSBjb21wbGV4LCBiZWNhdXNlIHlvdQorICAgIG11c3QgcHV0IHlvdXJzZWxmIGluIHRoZSBxdWV1ZSBiZWZvcmUgY2hlY2tpbmcgdGhlIGNvbmRpdGlvbi4KKyAgICBUaGVyZSBpcyBhIG1hY3JvIHRvIGRvIHRoaXM6CisgICAgPGZ1bmN0aW9uPndhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpPC9mdW5jdGlvbj4KKworICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9zY2hlZC5oPC9maWxlbmFtZT4gVGhlCisgICAgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHdhaXQgcXVldWUgaGVhZCwgYW5kIHRoZSBzZWNvbmQgaXMgYW4KKyAgICBleHByZXNzaW9uIHdoaWNoIGlzIGV2YWx1YXRlZDsgdGhlIG1hY3JvIHJldHVybnMKKyAgICA8cmV0dXJudmFsdWU+MDwvcmV0dXJudmFsdWU+IHdoZW4gdGhpcyBleHByZXNzaW9uIGlzIHRydWUsIG9yCisgICAgPHJldHVybnZhbHVlPi1FUkVTVEFSVFNZUzwvcmV0dXJudmFsdWU+IGlmIGEgc2lnbmFsIGlzIHJlY2VpdmVkLgorICAgIFRoZSA8ZnVuY3Rpb24+d2FpdF9ldmVudCgpPC9mdW5jdGlvbj4gdmVyc2lvbiBpZ25vcmVzIHNpZ25hbHMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgIERvIG5vdCB1c2UgdGhlIDxmdW5jdGlvbj5zbGVlcF9vbigpPC9mdW5jdGlvbj4gZnVuY3Rpb24gZmFtaWx5IC0KKyAgIGl0IGlzIHZlcnkgZWFzeSB0byBhY2NpZGVudGFsbHkgaW50cm9kdWNlIHJhY2VzOyBhbG1vc3QgY2VydGFpbmx5CisgICBvbmUgb2YgdGhlIDxmdW5jdGlvbj53YWl0X2V2ZW50KCk8L2Z1bmN0aW9uPiBmYW1pbHkgd2lsbCBkbywgb3IgYQorICAgbG9vcCBhcm91bmQgPGZ1bmN0aW9uPnNjaGVkdWxlX3RpbWVvdXQoKTwvZnVuY3Rpb24+LiBJZiB5b3UgY2hvb3NlCisgICB0byBsb29wIGFyb3VuZCA8ZnVuY3Rpb24+c2NoZWR1bGVfdGltZW91dCgpPC9mdW5jdGlvbj4gcmVtZW1iZXIKKyAgIHlvdSBtdXN0IHNldCB0aGUgdGFzayBzdGF0ZSAod2l0aCAKKyAgIDxmdW5jdGlvbj5zZXRfY3VycmVudF9zdGF0ZSgpPC9mdW5jdGlvbj4pIG9uIGVhY2ggaXRlcmF0aW9uIHRvIGF2b2lkCisgICBidXN5LWxvb3BpbmcuCisgICA8L3BhcmE+CisgCisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJxdWV1ZS13YWtpbmciPgorICAgPHRpdGxlPldha2luZyBVcCBRdWV1ZWQgVGFza3M8L3RpdGxlPgorICAgCisgICA8cGFyYT4KKyAgICBDYWxsIDxmdW5jdGlvbj53YWtlX3VwKCk8L2Z1bmN0aW9uPgorCisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3NjaGVkLmg8L2ZpbGVuYW1lPjssCisgICAgd2hpY2ggd2lsbCB3YWtlIHVwIGV2ZXJ5IHByb2Nlc3MgaW4gdGhlIHF1ZXVlLiAgVGhlIGV4Y2VwdGlvbiBpcworICAgIGlmIG9uZSBoYXMgPGNvbnN0YW50PlRBU0tfRVhDTFVTSVZFPC9jb25zdGFudD4gc2V0LCBpbiB3aGljaCBjYXNlCisgICAgdGhlIHJlbWFpbmRlciBvZiB0aGUgcXVldWUgd2lsbCBub3QgYmUgd29rZW4uCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9ImF0b21pYy1vcHMiPgorICA8dGl0bGU+QXRvbWljIE9wZXJhdGlvbnM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgQ2VydGFpbiBvcGVyYXRpb25zIGFyZSBndWFyYW50ZWVkIGF0b21pYyBvbiBhbGwgcGxhdGZvcm1zLiAgVGhlCisgICBmaXJzdCBjbGFzcyBvZiBvcGVyYXRpb25zIHdvcmsgb24gPHR5cGU+YXRvbWljX3Q8L3R5cGU+CisKKyAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vYXRvbWljLmg8L2ZpbGVuYW1lPjsgdGhpcworICAgY29udGFpbnMgYSBzaWduZWQgaW50ZWdlciAoYXQgbGVhc3QgMjQgYml0cyBsb25nKSwgYW5kIHlvdSBtdXN0IHVzZQorICAgdGhlc2UgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgb3IgcmVhZCBhdG9taWNfdCB2YXJpYWJsZXMuCisgICA8ZnVuY3Rpb24+YXRvbWljX3JlYWQoKTwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmF0b21pY19zZXQoKTwvZnVuY3Rpb24+IGdldCBhbmQgc2V0IHRoZSBjb3VudGVyLAorICAgPGZ1bmN0aW9uPmF0b21pY19hZGQoKTwvZnVuY3Rpb24+LAorICAgPGZ1bmN0aW9uPmF0b21pY19zdWIoKTwvZnVuY3Rpb24+LAorICAgPGZ1bmN0aW9uPmF0b21pY19pbmMoKTwvZnVuY3Rpb24+LAorICAgPGZ1bmN0aW9uPmF0b21pY19kZWMoKTwvZnVuY3Rpb24+LCBhbmQKKyAgIDxmdW5jdGlvbj5hdG9taWNfZGVjX2FuZF90ZXN0KCk8L2Z1bmN0aW9uPiAocmV0dXJucworICAgPHJldHVybnZhbHVlPnRydWU8L3JldHVybnZhbHVlPiBpZiBpdCB3YXMgZGVjcmVtZW50ZWQgdG8gemVybykuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFllcy4gIEl0IHJldHVybnMgPHJldHVybnZhbHVlPnRydWU8L3JldHVybnZhbHVlPiAoaS5lLiAhPSAwKSBpZiB0aGUKKyAgIGF0b21pYyB2YXJpYWJsZSBpcyB6ZXJvLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzbG93ZXIgdGhhbiBub3JtYWwgYXJpdGhtZXRpYywgYW5kCisgICBzbyBzaG91bGQgbm90IGJlIHVzZWQgdW5uZWNlc3NhcmlseS4gIE9uIHNvbWUgcGxhdGZvcm1zIHRoZXkKKyAgIGFyZSBtdWNoIHNsb3dlciwgbGlrZSAzMi1iaXQgU3BhcmMgd2hlcmUgdGhleSB1c2UgYSBzcGlubG9jay4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNlY29uZCBjbGFzcyBvZiBhdG9taWMgb3BlcmF0aW9ucyBpcyBhdG9taWMgYml0IG9wZXJhdGlvbnMgb24gYQorICAgPHR5cGU+bG9uZzwvdHlwZT4sIGRlZmluZWQgaW4KKworICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2JpdG9wcy5oPC9maWxlbmFtZT4uICBUaGVzZQorICAgb3BlcmF0aW9ucyBnZW5lcmFsbHkgdGFrZSBhIHBvaW50ZXIgdG8gdGhlIGJpdCBwYXR0ZXJuLCBhbmQgYSBiaXQKKyAgIG51bWJlcjogMCBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LgorICAgPGZ1bmN0aW9uPnNldF9iaXQoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+Y2xlYXJfYml0KCk8L2Z1bmN0aW9uPgorICAgYW5kIDxmdW5jdGlvbj5jaGFuZ2VfYml0KCk8L2Z1bmN0aW9uPiBzZXQsIGNsZWFyLCBhbmQgZmxpcCB0aGUKKyAgIGdpdmVuIGJpdC4gIDxmdW5jdGlvbj50ZXN0X2FuZF9zZXRfYml0KCk8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj50ZXN0X2FuZF9jbGVhcl9iaXQoKTwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPnRlc3RfYW5kX2NoYW5nZV9iaXQoKTwvZnVuY3Rpb24+IGRvIHRoZSBzYW1lIHRoaW5nLAorICAgZXhjZXB0IHJldHVybiB0cnVlIGlmIHRoZSBiaXQgd2FzIHByZXZpb3VzbHkgc2V0OyB0aGVzZSBhcmUKKyAgIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHZlcnkgc2ltcGxlIGxvY2tpbmcuCisgIDwvcGFyYT4KKyAgCisgIDxwYXJhPgorICAgSXQgaXMgcG9zc2libGUgdG8gY2FsbCB0aGVzZSBvcGVyYXRpb25zIHdpdGggYml0IGluZGljZXMgZ3JlYXRlcgorICAgdGhhbiBCSVRTX1BFUl9MT05HLiAgVGhlIHJlc3VsdGluZyBiZWhhdmlvciBpcyBzdHJhbmdlIG9uIGJpZy1lbmRpYW4KKyAgIHBsYXRmb3JtcyB0aG91Z2ggc28gaXQgaXMgYSBnb29kIGlkZWEgbm90IHRvIGRvIHRoaXMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgYml0cyBkZXBlbmRzIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGFuZCBpbgorICAgcGFydGljdWxhciwgdGhlIGJpdGZpZWxkIHBhc3NlZCB0byB0aGVzZSBvcGVyYXRpb25zIG11c3QgYmUgYXQKKyAgIGxlYXN0IGFzIGxhcmdlIGFzIGEgPHR5cGU+bG9uZzwvdHlwZT4uCisgIDwvcGFyYT4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0ic3ltYm9scyI+CisgIDx0aXRsZT5TeW1ib2xzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFdpdGhpbiB0aGUga2VybmVsIHByb3BlciwgdGhlIG5vcm1hbCBsaW5raW5nIHJ1bGVzIGFwcGx5CisgICAoaWUuIHVubGVzcyBhIHN5bWJvbCBpcyBkZWNsYXJlZCB0byBiZSBmaWxlIHNjb3BlIHdpdGggdGhlCisgICA8dHlwZT5zdGF0aWM8L3R5cGU+IGtleXdvcmQsIGl0IGNhbiBiZSB1c2VkIGFueXdoZXJlIGluIHRoZQorICAga2VybmVsKS4gIEhvd2V2ZXIsIGZvciBtb2R1bGVzLCBhIHNwZWNpYWwgZXhwb3J0ZWQgc3ltYm9sIHRhYmxlIGlzCisgICBrZXB0IHdoaWNoIGxpbWl0cyB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBrZXJuZWwgcHJvcGVyLiAgTW9kdWxlcworICAgY2FuIGFsc28gZXhwb3J0IHN5bWJvbHMuCisgIDwvcGFyYT4KKworICA8c2VjdDEgaWQ9InN5bS1leHBvcnRzeW1ib2xzIj4KKyAgIDx0aXRsZT48ZnVuY3Rpb24+RVhQT1JUX1NZTUJPTCgpPC9mdW5jdGlvbj4KKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvbW9kdWxlLmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgaXMgdGhlIGNsYXNzaWMgbWV0aG9kIG9mIGV4cG9ydGluZyBhIHN5bWJvbCwgYW5kIGl0IHdvcmtzCisgICAgZm9yIGJvdGggbW9kdWxlcyBhbmQgbm9uLW1vZHVsZXMuICBJbiB0aGUga2VybmVsIGFsbCB0aGVzZQorICAgIGRlY2xhcmF0aW9ucyBhcmUgb2Z0ZW4gYnVuZGxlZCBpbnRvIGEgc2luZ2xlIGZpbGUgdG8gaGVscAorICAgIGdlbmtzeW1zICh3aGljaCBzZWFyY2hlcyBzb3VyY2UgZmlsZXMgZm9yIHRoZXNlIGRlY2xhcmF0aW9ucykuCisgICAgU2VlIHRoZSBjb21tZW50IG9uIGdlbmtzeW1zIGFuZCBNYWtlZmlsZXMgYmVsb3cuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJzeW0tZXhwb3J0c3ltYm9scy1ncGwiPgorICAgPHRpdGxlPjxmdW5jdGlvbj5FWFBPUlRfU1lNQk9MX0dQTCgpPC9mdW5jdGlvbj4KKyAgICA8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvbW9kdWxlLmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFNpbWlsYXIgdG8gPGZ1bmN0aW9uPkVYUE9SVF9TWU1CT0woKTwvZnVuY3Rpb24+IGV4Y2VwdCB0aGF0IHRoZQorICAgIHN5bWJvbHMgZXhwb3J0ZWQgYnkgPGZ1bmN0aW9uPkVYUE9SVF9TWU1CT0xfR1BMKCk8L2Z1bmN0aW9uPiBjYW4KKyAgICBvbmx5IGJlIHNlZW4gYnkgbW9kdWxlcyB3aXRoIGEKKyAgICA8ZnVuY3Rpb24+TU9EVUxFX0xJQ0VOU0UoKTwvZnVuY3Rpb24+IHRoYXQgc3BlY2lmaWVzIGEgR1BMCisgICAgY29tcGF0aWJsZSBsaWNlbnNlLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJjb252ZW50aW9ucyI+CisgIDx0aXRsZT5Sb3V0aW5lcyBhbmQgQ29udmVudGlvbnM8L3RpdGxlPgorCisgIDxzZWN0MSBpZD0iY29udmVudGlvbnMtZG91YmxlbGlua2VkbGlzdCI+CisgICA8dGl0bGU+RG91YmxlLWxpbmtlZCBsaXN0cworICAgIDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9saW51eC9saXN0Lmg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoZXJlIGFyZSB0aHJlZSBzZXRzIG9mIGxpbmtlZC1saXN0IHJvdXRpbmVzIGluIHRoZSBrZXJuZWwKKyAgICBoZWFkZXJzLCBidXQgdGhpcyBvbmUgc2VlbXMgdG8gYmUgd2lubmluZyBvdXQgKGFuZCBMaW51cyBoYXMKKyAgICB1c2VkIGl0KS4gIElmIHlvdSBkb24ndCBoYXZlIHNvbWUgcGFydGljdWxhciBwcmVzc2luZyBuZWVkIGZvcgorICAgIGEgc2luZ2xlIGxpc3QsIGl0J3MgYSBnb29kIGNob2ljZS4gIEluIGZhY3QsIEkgZG9uJ3QgY2FyZQorICAgIHdoZXRoZXIgaXQncyBhIGdvb2QgY2hvaWNlIG9yIG5vdCwganVzdCB1c2UgaXQgc28gd2UgY2FuIGdldAorICAgIHJpZCBvZiB0aGUgb3RoZXJzLgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iY29udmVudGlvbi1yZXR1cm5zIj4KKyAgIDx0aXRsZT5SZXR1cm4gQ29udmVudGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBGb3IgY29kZSBjYWxsZWQgaW4gdXNlciBjb250ZXh0LCBpdCdzIHZlcnkgY29tbW9uIHRvIGRlZnkgQworICAgIGNvbnZlbnRpb24sIGFuZCByZXR1cm4gPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiBmb3Igc3VjY2VzcywKKyAgICBhbmQgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIKKyAgICAoZWcuIDxyZXR1cm52YWx1ZT4tRUZBVUxUPC9yZXR1cm52YWx1ZT4pIGZvciBmYWlsdXJlLiAgVGhpcyBjYW4gYmUKKyAgICB1bmludHVpdGl2ZSBhdCBmaXJzdCwgYnV0IGl0J3MgZmFpcmx5IHdpZGVzcHJlYWQgaW4gdGhlIG5ldHdvcmtpbmcKKyAgICBjb2RlLCBmb3IgZXhhbXBsZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIGZpbGVzeXN0ZW0gY29kZSB1c2VzIDxmdW5jdGlvbj5FUlJfUFRSKCk8L2Z1bmN0aW9uPgorCisgICAgPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2ZzLmg8L2ZpbGVuYW1lPjsgdG8KKyAgICBlbmNvZGUgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgaW50byBhIHBvaW50ZXIsIGFuZAorICAgIDxmdW5jdGlvbj5JU19FUlIoKTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+UFRSX0VSUigpPC9mdW5jdGlvbj4KKyAgICB0byBnZXQgaXQgYmFjayBvdXQgYWdhaW46IGF2b2lkcyBhIHNlcGFyYXRlIHBvaW50ZXIgcGFyYW1ldGVyIGZvcgorICAgIHRoZSBlcnJvciBudW1iZXIuICBJY2t5LCBidXQgaW4gYSBnb29kIHdheS4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImNvbnZlbnRpb25zLWJvcmtlZGNvbXBpbGUiPgorICAgPHRpdGxlPkJyZWFraW5nIENvbXBpbGF0aW9uPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgTGludXMgYW5kIHRoZSBvdGhlciBkZXZlbG9wZXJzIHNvbWV0aW1lcyBjaGFuZ2UgZnVuY3Rpb24gb3IKKyAgICBzdHJ1Y3R1cmUgbmFtZXMgaW4gZGV2ZWxvcG1lbnQga2VybmVsczsgdGhpcyBpcyBub3QgZG9uZSBqdXN0IHRvCisgICAga2VlcCBldmVyeW9uZSBvbiB0aGVpciB0b2VzOiBpdCByZWZsZWN0cyBhIGZ1bmRhbWVudGFsIGNoYW5nZQorICAgIChlZy4gY2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9uLCBvciBkb2VzIGV4dHJhCisgICAgY2hlY2tzLCBvciBkb2Vzbid0IGRvIGNoZWNrcyB3aGljaCB3ZXJlIGNhdWdodCBiZWZvcmUpLiAgVXN1YWxseQorICAgIHRoaXMgaXMgYWNjb21wYW5pZWQgYnkgYSBmYWlybHkgY29tcGxldGUgbm90ZSB0byB0aGUgbGludXgta2VybmVsCisgICAgbWFpbGluZyBsaXN0OyBzZWFyY2ggdGhlIGFyY2hpdmUuICBTaW1wbHkgZG9pbmcgYSBnbG9iYWwgcmVwbGFjZQorICAgIG9uIHRoZSBmaWxlIHVzdWFsbHkgbWFrZXMgdGhpbmdzIDxlbXBoYXNpcz53b3JzZTwvZW1waGFzaXM+LgorICAgPC9wYXJhPgorICA8L3NlY3QxPgorCisgIDxzZWN0MSBpZD0iY29udmVudGlvbnMtaW5pdGlhbGlzaW5nIj4KKyAgIDx0aXRsZT5Jbml0aWFsaXppbmcgc3RydWN0dXJlIG1lbWJlcnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGUgcHJlZmVycmVkIG1ldGhvZCBvZiBpbml0aWFsaXppbmcgc3RydWN0dXJlcyBpcyB0byB1c2UKKyAgICBkZXNpZ25hdGVkIGluaXRpYWxpc2VycywgYXMgZGVmaW5lZCBieSBJU08gQzk5LCBlZzoKKyAgIDwvcGFyYT4KKyAgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgb3B0X2ZvcHMgPSB7CisgICAgICAgIC5vcGVuICAgICAgICAgICAgICAgPSBvcHRfb3BlbiwKKyAgICAgICAgLnJlbGVhc2UgICAgICAgICAgICA9IG9wdF9yZWxlYXNlLAorICAgICAgICAuaW9jdGwgICAgICAgICAgICAgID0gb3B0X2lvY3RsLAorICAgICAgICAuY2hlY2tfbWVkaWFfY2hhbmdlID0gb3B0X21lZGlhX2NoYW5nZSwKK307CisgICA8L3Byb2dyYW1saXN0aW5nPgorICAgPHBhcmE+CisgICAgVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGdyZXAgZm9yLCBhbmQgbWFrZXMgaXQgY2xlYXIgd2hpY2gKKyAgICBzdHJ1Y3R1cmUgZmllbGRzIGFyZSBzZXQuICBZb3Ugc2hvdWxkIGRvIHRoaXMgYmVjYXVzZSBpdCBsb29rcworICAgIGNvb2wuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJjb252ZW50aW9ucy1nbnUtZXh0bnMiPgorICAgPHRpdGxlPkdOVSBFeHRlbnNpb25zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgR05VIEV4dGVuc2lvbnMgYXJlIGV4cGxpY2l0bHkgYWxsb3dlZCBpbiB0aGUgTGludXgga2VybmVsLgorICAgIE5vdGUgdGhhdCBzb21lIG9mIHRoZSBtb3JlIGNvbXBsZXggb25lcyBhcmUgbm90IHZlcnkgd2VsbAorICAgIHN1cHBvcnRlZCwgZHVlIHRvIGxhY2sgb2YgZ2VuZXJhbCB1c2UsIGJ1dCB0aGUgZm9sbG93aW5nIGFyZQorICAgIGNvbnNpZGVyZWQgc3RhbmRhcmQgKHNlZSB0aGUgR0NDIGluZm8gcGFnZSBzZWN0aW9uICJDCisgICAgRXh0ZW5zaW9ucyIgZm9yIG1vcmUgZGV0YWlscyAtIFllcywgcmVhbGx5IHRoZSBpbmZvIHBhZ2UsIHRoZQorICAgIG1hbiBwYWdlIGlzIG9ubHkgYSBzaG9ydCBzdW1tYXJ5IG9mIHRoZSBzdHVmZiBpbiBpbmZvKToKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIElubGluZSBmdW5jdGlvbnMKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFN0YXRlbWVudCBleHByZXNzaW9ucyAoaWUuIHRoZSAoeyBhbmQgfSkgY29uc3RydWN0cykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEZWNsYXJpbmcgYXR0cmlidXRlcyBvZiBhIGZ1bmN0aW9uIC8gdmFyaWFibGUgLyB0eXBlCisgICAgICAoX19hdHRyaWJ1dGVfXykKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIHR5cGVvZgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgWmVybyBsZW5ndGggYXJyYXlzCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYWNybyB2YXJhcmdzCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBBcml0aG1ldGljIG9uIHZvaWQgcG9pbnRlcnMKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE5vbi1Db25zdGFudCBpbml0aWFsaXplcnMKKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEFzc2VtYmxlciBJbnN0cnVjdGlvbnMgKG5vdCBvdXRzaWRlIGFyY2gvIGFuZCBpbmNsdWRlL2FzbS8pCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBGdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzIChfX0ZVTkNUSU9OX18pCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBfX2J1aWx0aW5fY29uc3RhbnRfcCgpCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgIDxwYXJhPgorICAgIEJlIHdhcnkgd2hlbiB1c2luZyBsb25nIGxvbmcgaW4gdGhlIGtlcm5lbCwgdGhlIGNvZGUgZ2NjIGdlbmVyYXRlcyBmb3IKKyAgICBpdCBpcyBob3JyaWJsZSBhbmQgd29yc2U6IGRpdmlzaW9uIGFuZCBtdWx0aXBsaWNhdGlvbiBkb2VzIG5vdCB3b3JrCisgICAgb24gaTM4NiBiZWNhdXNlIHRoZSBHQ0MgcnVudGltZSBmdW5jdGlvbnMgZm9yIGl0IGFyZSBtaXNzaW5nIGZyb20KKyAgICB0aGUga2VybmVsIGVudmlyb25tZW50LgorICAgPC9wYXJhPgorCisgICAgPCEtLSBGSVhNRTogYWRkIGEgbm90ZSBhYm91dCBBTlNJIGFsaWFzaW5nIGNsZWFubmVzcyAtLT4KKyAgPC9zZWN0MT4KKworICA8c2VjdDEgaWQ9ImNvbnZlbnRpb25zLWNwbHVzcGx1cyI+CisgICA8dGl0bGU+QysrPC90aXRsZT4KKyAgIAorICAgPHBhcmE+CisgICAgVXNpbmcgQysrIGluIHRoZSBrZXJuZWwgaXMgdXN1YWxseSBhIGJhZCBpZGVhLCBiZWNhdXNlIHRoZQorICAgIGtlcm5lbCBkb2VzIG5vdCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgcnVudGltZSBlbnZpcm9ubWVudAorICAgIGFuZCB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbm90IHRlc3RlZCBmb3IgaXQuICBJdCBpcyBzdGlsbAorICAgIHBvc3NpYmxlLCBidXQgbm90IHJlY29tbWVuZGVkLiAgSWYgeW91IHJlYWxseSB3YW50IHRvIGRvCisgICAgdGhpcywgZm9yZ2V0IGFib3V0IGV4Y2VwdGlvbnMgYXQgbGVhc3QuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgPHNlY3QxIGlkPSJjb252ZW50aW9ucy1pZmRlZiI+CisgICA8dGl0bGU+Jm51bTtpZjwvdGl0bGU+CisgICAKKyAgIDxwYXJhPgorICAgIEl0IGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGNsZWFuZXIgdG8gdXNlIG1hY3JvcyBpbiBoZWFkZXIgZmlsZXMKKyAgICAob3IgYXQgdGhlIHRvcCBvZiAuYyBmaWxlcykgdG8gYWJzdHJhY3QgYXdheSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4KKyAgICB1c2luZyBgI2lmJyBwcmUtcHJvY2Vzc29yIHN0YXRlbWVudHMgdGhyb3VnaG91dCB0aGUgc291cmNlIGNvZGUuCisgICA8L3BhcmE+CisgIDwvc2VjdDE+CisgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9InN1Ym1pdHRpbmciPgorICA8dGl0bGU+UHV0dGluZyBZb3VyIFN0dWZmIGluIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgIDxwYXJhPgorICAgSW4gb3JkZXIgdG8gZ2V0IHlvdXIgc3R1ZmYgaW50byBzaGFwZSBmb3Igb2ZmaWNpYWwgaW5jbHVzaW9uLCBvcgorICAgZXZlbiB0byBtYWtlIGEgbmVhdCBwYXRjaCwgdGhlcmUncyBhZG1pbmlzdHJhdGl2ZSB3b3JrIHRvIGJlCisgICBkb25lOgorICA8L3BhcmE+CisgIDxpdGVtaXplZGxpc3Q+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIEZpZ3VyZSBvdXQgd2hvc2UgcG9uZCB5b3UndmUgYmVlbiBwaXNzaW5nIGluLiAgTG9vayBhdCB0aGUgdG9wIG9mCisgICAgIHRoZSBzb3VyY2UgZmlsZXMsIGluc2lkZSB0aGUgPGZpbGVuYW1lPk1BSU5UQUlORVJTPC9maWxlbmFtZT4KKyAgICAgZmlsZSwgYW5kIGxhc3Qgb2YgYWxsIGluIHRoZSA8ZmlsZW5hbWU+Q1JFRElUUzwvZmlsZW5hbWU+IGZpbGUuCisgICAgIFlvdSBzaG91bGQgY29vcmRpbmF0ZSB3aXRoIHRoaXMgcGVyc29uIHRvIG1ha2Ugc3VyZSB5b3UncmUgbm90CisgICAgIGR1cGxpY2F0aW5nIGVmZm9ydCwgb3IgdHJ5aW5nIHNvbWV0aGluZyB0aGF0J3MgYWxyZWFkeSBiZWVuCisgICAgIHJlamVjdGVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBNYWtlIHN1cmUgeW91IHB1dCB5b3VyIG5hbWUgYW5kIEVNYWlsIGFkZHJlc3MgYXQgdGhlIHRvcCBvZgorICAgICBhbnkgZmlsZXMgeW91IGNyZWF0ZSBvciBtYW5nbGUgc2lnbmlmaWNhbnRseS4gIFRoaXMgaXMgdGhlCisgICAgIGZpcnN0IHBsYWNlIHBlb3BsZSB3aWxsIGxvb2sgd2hlbiB0aGV5IGZpbmQgYSBidWcsIG9yIHdoZW4KKyAgICAgPGVtcGhhc2lzPnRoZXk8L2VtcGhhc2lzPiB3YW50IHRvIG1ha2UgYSBjaGFuZ2UuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBVc3VhbGx5IHlvdSB3YW50IGEgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHlvdXIga2VybmVsIGhhY2suCisgICAgIEVkaXQgPGZpbGVuYW1lPkNvbmZpZy5pbjwvZmlsZW5hbWU+IGluIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkKKyAgICAgKGJ1dCB1bmRlciA8ZmlsZW5hbWU+YXJjaC88L2ZpbGVuYW1lPiBpdCdzIGNhbGxlZAorICAgICA8ZmlsZW5hbWU+Y29uZmlnLmluPC9maWxlbmFtZT4pLiAgVGhlIENvbmZpZyBMYW5ndWFnZSB1c2VkIGlzIG5vdAorICAgICBiYXNoLCBldmVuIHRob3VnaCBpdCBsb29rcyBsaWtlIGJhc2g7IHRoZSBzYWZlIHdheSBpcyB0byB1c2Ugb25seQorICAgICB0aGUgY29uc3RydWN0cyB0aGF0IHlvdSBhbHJlYWR5IHNlZSBpbgorICAgICA8ZmlsZW5hbWU+Q29uZmlnLmluPC9maWxlbmFtZT4gZmlsZXMgKHNlZQorICAgICA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQ8L2ZpbGVuYW1lPikuCisgICAgIEl0J3MgZ29vZCB0byBydW4gIm1ha2UgeGNvbmZpZyIgYXQgbGVhc3Qgb25jZSB0byB0ZXN0IChiZWNhdXNlCisgICAgIGl0J3MgdGhlIG9ubHkgb25lIHdpdGggYSBzdGF0aWMgcGFyc2VyKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVmFyaWFibGVzIHdoaWNoIGNhbiBiZSBZIG9yIE4gdXNlIDx0eXBlPmJvb2w8L3R5cGU+IGZvbGxvd2VkIGJ5IGEKKyAgICAgdGFnbGluZSBhbmQgdGhlIGNvbmZpZyBkZWZpbmUgbmFtZSAod2hpY2ggbXVzdCBzdGFydCB3aXRoCisgICAgIENPTkZJR18pLiAgVGhlIDx0eXBlPnRyaXN0YXRlPC90eXBlPiBmdW5jdGlvbiBpcyB0aGUgc2FtZSwgYnV0CisgICAgIGFsbG93cyB0aGUgYW5zd2VyIE0gKHdoaWNoIGRlZmluZXMKKyAgICAgPHN5bWJvbD5DT05GSUdfZm9vX01PRFVMRTwvc3ltYm9sPiBpbiB5b3VyIHNvdXJjZSwgaW5zdGVhZCBvZgorICAgICA8c3ltYm9sPkNPTkZJR19GT088L3N5bWJvbD4pIGlmIDxzeW1ib2w+Q09ORklHX01PRFVMRVM8L3N5bWJvbD4KKyAgICAgaXMgZW5hYmxlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgWW91IG1heSB3ZWxsIHdhbnQgdG8gbWFrZSB5b3VyIENPTkZJRyBvcHRpb24gb25seSB2aXNpYmxlIGlmCisgICAgIDxzeW1ib2w+Q09ORklHX0VYUEVSSU1FTlRBTDwvc3ltYm9sPiBpcyBlbmFibGVkOiB0aGlzIHNlcnZlcyBhcyBhCisgICAgIHdhcm5pbmcgdG8gdXNlcnMuICBUaGVyZSBtYW55IG90aGVyIGZhbmN5IHRoaW5ncyB5b3UgY2FuIGRvOiBzZWUKKyAgICAgdGhlIHZhcmlvdXMgPGZpbGVuYW1lPkNvbmZpZy5pbjwvZmlsZW5hbWU+IGZpbGVzIGZvciBpZGVhcy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+OiB0aGUgQ09ORklHIHZhcmlhYmxlcyBhcmUKKyAgICAgZXhwb3J0ZWQgaGVyZSBzbyB5b3UgY2FuIGNvbmRpdGlvbmFsaXplIGNvbXBpbGF0aW9uIHdpdGggYGlmZXEnLgorICAgICBJZiB5b3VyIGZpbGUgZXhwb3J0cyBzeW1ib2xzIHRoZW4gYWRkIHRoZSBuYW1lcyB0bworICAgICA8dmFybmFtZT5leHBvcnQtb2JqczwvdmFybmFtZT4gc28gdGhhdCBnZW5rc3ltcyB3aWxsIGZpbmQgdGhlbS4KKyAgICAgPGNhdXRpb24+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGVyZSBpcyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHRoYXQgb2JqZWN0cworICAgICAgIHdoaWNoIGV4cG9ydCBzeW1ib2xzIG11c3QgaGF2ZSBnbG9iYWxseSB1bmlxdWUgbmFtZXMuCisgICAgICAgSWYgeW91ciBvYmplY3QgZG9lcyBub3QgaGF2ZSBhIGdsb2JhbGx5IHVuaXF1ZSBuYW1lIHRoZW4gdGhlCisgICAgICAgc3RhbmRhcmQgZml4IGlzIHRvIG1vdmUgdGhlCisgICAgICAgPGZ1bmN0aW9uPkVYUE9SVF9TWU1CT0woKTwvZnVuY3Rpb24+IHN0YXRlbWVudHMgdG8gdGhlaXIgb3duCisgICAgICAgb2JqZWN0IHdpdGggYSB1bmlxdWUgbmFtZS4KKyAgICAgICBUaGlzIGlzIHdoeSBzZXZlcmFsIHN5c3RlbXMgaGF2ZSBzZXBhcmF0ZSBleHBvcnRpbmcgb2JqZWN0cywKKyAgICAgICB1c3VhbGx5IHN1ZmZpeGVkIHdpdGgga3N5bXMuCisgICAgICA8L3BhcmE+CisgICAgIDwvY2F1dGlvbj4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIERvY3VtZW50IHlvdXIgb3B0aW9uIGluIERvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAuICBNZW50aW9uCisgICAgIGluY29tcGF0aWJpbGl0aWVzIGFuZCBpc3N1ZXMgaGVyZS4gIDxlbXBoYXNpcz4gRGVmaW5pdGVseQorICAgICA8L2VtcGhhc2lzPiBlbmQgeW91ciBkZXNjcmlwdGlvbiB3aXRoIDxxdW90ZT4gaWYgaW4gZG91YnQsIHNheSBOCisgICAgIDwvcXVvdGU+IChvciwgb2NjYXNpb25hbGx5LCBgWScpOyB0aGlzIGlzIGZvciBwZW9wbGUgd2hvIGhhdmUgbm8KKyAgICAgaWRlYSB3aGF0IHlvdSBhcmUgdGFsa2luZyBhYm91dC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIFB1dCB5b3Vyc2VsZiBpbiA8ZmlsZW5hbWU+Q1JFRElUUzwvZmlsZW5hbWU+IGlmIHlvdSd2ZSBkb25lCisgICAgIHNvbWV0aGluZyBub3Rld29ydGh5LCB1c3VhbGx5IGJleW9uZCBhIHNpbmdsZSBmaWxlICh5b3VyIG5hbWUKKyAgICAgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBmaWxlcyBhbnl3YXkpLgorICAgICA8ZmlsZW5hbWU+TUFJTlRBSU5FUlM8L2ZpbGVuYW1lPiBtZWFucyB5b3Ugd2FudCB0byBiZSBjb25zdWx0ZWQKKyAgICAgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlIHRvIGEgc3Vic3lzdGVtLCBhbmQgaGVhciBhYm91dCBidWdzOyBpdAorICAgICBpbXBsaWVzIGEgbW9yZS10aGFuLXBhc3NpbmcgY29tbWl0bWVudCB0byBzb21lIHBhcnQgb2YgdGhlIGNvZGUuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIAorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICBGaW5hbGx5LCBkb24ndCBmb3JnZXQgdG8gcmVhZCA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlczwvZmlsZW5hbWU+CisgICAgIGFuZCBwb3NzaWJseSA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVyczwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJjYW50cmlwcyI+CisgIDx0aXRsZT5LZXJuZWwgQ2FudHJpcHM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgU29tZSBmYXZvcml0ZXMgZnJvbSBicm93c2luZyB0aGUgc291cmNlLiAgRmVlbCBmcmVlIHRvIGFkZCB0byB0aGlzCisgICBsaXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICA8ZmlsZW5hbWU+aW5jbHVkZS9saW51eC9icmxvY2suaDo8L2ZpbGVuYW1lPgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KK2V4dGVybiBpbmxpbmUgdm9pZCBicl9yZWFkX2xvY2sgKGVudW0gYnJsb2NrX2luZGljZXMgaWR4KQoreworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGNhdXNlcyBhIGxpbmstdGltZSBidWcgbWVzc2FnZSBpZiBhbgorICAgICAgICAgKiBpbnZhbGlkIGluZGV4IGlzIHVzZWQ6CisgICAgICAgICAqLworICAgICAgICBpZiAoaWR4ID49IF9fQlJfRU5EKQorICAgICAgICAgICAgICAgIF9fYnJfbG9ja191c2FnZV9idWcoKTsKKworICAgICAgICByZWFkX2xvY2soJmFtcDtfX2JybG9ja19hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldW2lkeF0pOworfQorICA8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvZnMuaDwvZmlsZW5hbWU+OgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKy8qCisgKiBLZXJuZWwgcG9pbnRlcnMgaGF2ZSByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHNvIHdlIGNhbiB1c2UgYQorICogc2NoZW1lIHdoZXJlIHdlIGNhbiByZXR1cm4gZWl0aGVyIGFuIGVycm9yIGNvZGUgb3IgYSBkZW50cnkKKyAqIHBvaW50ZXIgd2l0aCB0aGUgc2FtZSByZXR1cm4gdmFsdWUuCisgKgorICogVGhpcyBzaG91bGQgYmUgYSBwZXItYXJjaGl0ZWN0dXJlIHRoaW5nLCB0byBhbGxvdyBkaWZmZXJlbnQKKyAqIGVycm9yIGFuZCBwb2ludGVyIGRlY2lzaW9ucy4KKyAqLworICNkZWZpbmUgRVJSX1BUUihlcnIpICAgICgodm9pZCAqKSgobG9uZykoZXJyKSkpCisgI2RlZmluZSBQVFJfRVJSKHB0cikgICAgKChsb25nKShwdHIpKQorICNkZWZpbmUgSVNfRVJSKHB0cikgICAgICgodW5zaWduZWQgbG9uZykocHRyKSA+ICh1bnNpZ25lZCBsb25nKSgtMTAwMCkpCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgPGZpbGVuYW1lPmluY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oOjwvZmlsZW5hbWU+CisgIDwvcGFyYT4KKworICA8cHJvZ3JhbWxpc3Rpbmc+CisjZGVmaW5lIGNvcHlfdG9fdXNlcih0byxmcm9tLG4pICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgX19jb25zdGFudF9jb3B5X3RvX3VzZXIoKHRvKSwoZnJvbSksKG4pKSA6ICAgICBcCisgICAgICAgICBfX2dlbmVyaWNfY29weV90b191c2VyKCh0byksKGZyb20pLChuKSkpCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICA8ZmlsZW5hbWU+YXJjaC9zcGFyYy9rZXJuZWwvaGVhZC5TOjwvZmlsZW5hbWU+CisgIDwvcGFyYT4KKworICA8cHJvZ3JhbWxpc3Rpbmc+CisvKgorICogU3VuIHBlb3BsZSBjYW4ndCBzcGVsbCB3b3J0aCBkYW1uLiAiY29tcGF0YWJpbGl0eSIgaW5kZWVkLgorICogQXQgbGVhc3Qgd2UgKmtub3cqIHdlIGNhbid0IHNwZWxsLCBhbmQgdXNlIGEgc3BlbGwtY2hlY2tlci4KKyAqLworCisvKiBVaCwgYWN0dWFsbHkgTGludXMgaXQgaXMgSSB3aG8gY2Fubm90IHNwZWxsLiBUb28gbXVjaCBtdXJreQorICogU3BhcmMgYXNzZW1ibHkgd2lsbCBkbyB0aGlzIHRvIHlhLgorICovCitDX0xBQkVMKGNwdXR5cHZhcik6CisgICAgICAgIC5hc2NpeiAiY29tcGF0YWJpbGl0eSIKKworLyogVGVzdGVkIG9uIFNTLTUsIFNTLTEwLiBQcm9iYWJseSBzb21lb25lIGF0IFN1biBhcHBsaWVkIGEgc3BlbGwtY2hlY2tlci4gKi8KKyAgICAgICAgLmFsaWduIDQKK0NfTEFCRUwoY3B1dHlwdmFyX3N1bjRtKToKKyAgICAgICAgLmFzY2l6ICJjb21wYXRpYmxlIgorICA8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgPGZpbGVuYW1lPmFyY2gvc3BhcmMvbGliL2NoZWNrc3VtLlM6PC9maWxlbmFtZT4KKyAgPC9wYXJhPgorCisgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAgICAgLyogU3VuLCB5b3UganVzdCBjYW4ndCBiZWF0IG1lLCB5b3UganVzdCBjYW4ndC4gIFN0b3AgdHJ5aW5nLAorICAgICAgICAgKiBnaXZlIHVwLiAgSSdtIHNlcmlvdXMsIEkgYW0gZ29pbmcgdG8ga2ljayB0aGUgbGl2aW5nIHNoaXQKKyAgICAgICAgICogb3V0IG9mIHlvdSwgZ2FtZSBvdmVyLCBsaWdodHMgb3V0LgorICAgICAgICAgKi8KKyAgPC9wcm9ncmFtbGlzdGluZz4KKyA8L2NoYXB0ZXI+CisKKyA8Y2hhcHRlciBpZD0iY3JlZGl0cyI+CisgIDx0aXRsZT5UaGFua3M8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhhbmtzIHRvIEFuZGkgS2xlZW4gZm9yIHRoZSBpZGVhLCBhbnN3ZXJpbmcgbXkgcXVlc3Rpb25zLCBmaXhpbmcKKyAgIG15IG1pc3Rha2VzLCBmaWxsaW5nIGNvbnRlbnQsIGV0Yy4gIFBoaWxpcHAgUnVtcGYgZm9yIG1vcmUgc3BlbGxpbmcKKyAgIGFuZCBjbGFyaXR5IGZpeGVzLCBhbmQgc29tZSBleGNlbGxlbnQgbm9uLW9idmlvdXMgcG9pbnRzLiAgV2VybmVyCisgICBBbG1lc2JlcmdlciBmb3IgZ2l2aW5nIG1lIGEgZ3JlYXQgc3VtbWFyeSBvZgorICAgPGZ1bmN0aW9uPmRpc2FibGVfaXJxKCk8L2Z1bmN0aW9uPiwgYW5kIEplcyBTb3JlbnNlbiBhbmQgQW5kcmVhCisgICBBcmNhbmdlbGkgYWRkZWQgY2F2ZWF0cy4gTWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4gZm9yIGNoZWNraW5nCisgICBhbmQgYWRkaW5nIHRvIHRoZSBDb25maWd1cmUgc2VjdGlvbi4gPCEtLSBSdXN0eSBpbnNpc3RlZCBvbiB0aGlzCisgICBiaXQ7IEkgZGlkbid0IGRvIGl0ISAtLT4gVGVsc2EgR3d5bm5lIGZvciB0ZWFjaGluZyBtZSBEb2NCb29rLiAKKyAgPC9wYXJhPgorIDwvY2hhcHRlcj4KKzwvYm9vaz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWxvY2tpbmcudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGRjMmRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKQEAgLTAsMCArMSwyMDg4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IkxLTG9ja2luZ0d1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5VbnJlbGlhYmxlIEd1aWRlIFRvIExvY2tpbmc8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPlJ1c3R5PC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+UnVzc2VsbDwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDM8L3llYXI+CisgICA8aG9sZGVyPlJ1c3R5IFJ1c3NlbGw8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCisgPHRvYz48L3RvYz4KKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgPHBhcmE+CisgICAgIFdlbGNvbWUsIHRvIFJ1c3R5J3MgUmVtYXJrYWJseSBVbnJlbGlhYmxlIEd1aWRlIHRvIEtlcm5lbAorICAgICBMb2NraW5nIGlzc3Vlcy4gIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBsb2NraW5nIHN5c3RlbXMgaW4KKyAgICAgdGhlIExpbnV4IEtlcm5lbCBpbiAyLjYuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICAgV2l0aCB0aGUgd2lkZSBhdmFpbGFiaWxpdHkgb2YgSHlwZXJUaHJlYWRpbmcsIGFuZCA8Zmlyc3R0ZXJtCisgICAgIGxpbmtlbmQ9Imdsb3NzLXByZWVtcHRpb24iPnByZWVtcHRpb24gPC9maXJzdHRlcm0+IGluIHRoZSBMaW51eAorICAgICBLZXJuZWwsIGV2ZXJ5b25lIGhhY2tpbmcgb24gdGhlIGtlcm5lbCBuZWVkcyB0byBrbm93IHRoZQorICAgICBmdW5kYW1lbnRhbHMgb2YgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgZm9yCisgICAgIDxmaXJzdHRlcm0gbGlua2VuZD0iZ2xvc3Mtc21wIj48YWNyb255bT5TTVA8L2Fjcm9ueW0+PC9maXJzdHRlcm0+LgorICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgIDxjaGFwdGVyIGlkPSJyYWNlcyI+CisgICAgPHRpdGxlPlRoZSBQcm9ibGVtIFdpdGggQ29uY3VycmVuY3k8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgKFNraXAgdGhpcyBpZiB5b3Uga25vdyB3aGF0IGEgUmFjZSBDb25kaXRpb24gaXMpLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIGEgbm9ybWFsIHByb2dyYW0sIHlvdSBjYW4gaW5jcmVtZW50IGEgY291bnRlciBsaWtlIHNvOgorICAgIDwvcGFyYT4KKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgICB2ZXJ5X2ltcG9ydGFudF9jb3VudCsrOworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgaXMgd2hhdCB0aGV5IHdvdWxkIGV4cGVjdCB0byBoYXBwZW46CisgICAgPC9wYXJhPgorCisgICAgPHRhYmxlPgorICAgICA8dGl0bGU+RXhwZWN0ZWQgUmVzdWx0czwvdGl0bGU+CisKKyAgICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisKKyAgICAgIDx0aGVhZD4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+SW5zdGFuY2UgMTwvZW50cnk+CisgICAgICAgIDxlbnRyeT5JbnN0YW5jZSAyPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisKKyAgICAgIDx0Ym9keT4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+cmVhZCB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNSk8L2VudHJ5PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+YWRkIDEgKDYpPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PndyaXRlIHZlcnlfaW1wb3J0YW50X2NvdW50ICg2KTwvZW50cnk+CisgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICA8ZW50cnk+cmVhZCB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNik8L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT48L2VudHJ5PgorICAgICAgICA8ZW50cnk+YWRkIDEgKDcpPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PndyaXRlIHZlcnlfaW1wb3J0YW50X2NvdW50ICg3KTwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3Rib2R5PgorCisgICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgICA8cGFyYT4KKyAgICAgVGhpcyBpcyB3aGF0IG1pZ2h0IGhhcHBlbjoKKyAgICA8L3BhcmE+CisKKyAgICA8dGFibGU+CisgICAgIDx0aXRsZT5Qb3NzaWJsZSBSZXN1bHRzPC90aXRsZT4KKworICAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgICAgIDx0aGVhZD4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+SW5zdGFuY2UgMTwvZW50cnk+CisgICAgICAgIDxlbnRyeT5JbnN0YW5jZSAyPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisKKyAgICAgIDx0Ym9keT4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+cmVhZCB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNSk8L2VudHJ5PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PnJlYWQgdmVyeV9pbXBvcnRhbnRfY291bnQgKDUpPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+YWRkIDEgKDYpPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PjwvZW50cnk+CisgICAgICAgIDxlbnRyeT5hZGQgMSAoNik8L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT53cml0ZSB2ZXJ5X2ltcG9ydGFudF9jb3VudCAoNik8L2VudHJ5PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PndyaXRlIHZlcnlfaW1wb3J0YW50X2NvdW50ICg2KTwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3Rib2R5PgorICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHNlY3QxIGlkPSJyYWNlLWNvbmRpdGlvbiI+CisgICAgPHRpdGxlPlJhY2UgQ29uZGl0aW9ucyBhbmQgQ3JpdGljYWwgUmVnaW9uczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGlzIG92ZXJsYXAsIHdoZXJlIHRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUKKyAgICAgIHJlbGF0aXZlIHRpbWluZyBvZiBtdWx0aXBsZSB0YXNrcywgaXMgY2FsbGVkIGEgPGZpcnN0dGVybT5yYWNlIGNvbmRpdGlvbjwvZmlyc3R0ZXJtPi4KKyAgICAgIFRoZSBwaWVjZSBvZiBjb2RlIGNvbnRhaW5pbmcgdGhlIGNvbmN1cnJlbmN5IGlzc3VlIGlzIGNhbGxlZCBhCisgICAgICA8Zmlyc3R0ZXJtPmNyaXRpY2FsIHJlZ2lvbjwvZmlyc3R0ZXJtPi4gIEFuZCBlc3BlY2lhbGx5IHNpbmNlIExpbnV4IHN0YXJ0aW5nIHJ1bm5pbmcKKyAgICAgIG9uIFNNUCBtYWNoaW5lcywgdGhleSBiZWNhbWUgb25lIG9mIHRoZSBtYWpvciBpc3N1ZXMgaW4ga2VybmVsCisgICAgICBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFByZWVtcHRpb24gY2FuIGhhdmUgdGhlIHNhbWUgZWZmZWN0LCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lCisgICAgICBDUFU6IGJ5IHByZWVtcHRpbmcgb25lIHRhc2sgZHVyaW5nIHRoZSBjcml0aWNhbCByZWdpb24sIHdlIGhhdmUKKyAgICAgIGV4YWN0bHkgdGhlIHNhbWUgcmFjZSBjb25kaXRpb24uICBJbiB0aGlzIGNhc2UgdGhlIHRocmVhZCB3aGljaAorICAgICAgcHJlZW1wdHMgbWlnaHQgcnVuIHRoZSBjcml0aWNhbCByZWdpb24gaXRzZWxmLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byByZWNvZ25pemUgd2hlbiB0aGVzZSBzaW11bHRhbmVvdXMgYWNjZXNzZXMKKyAgICAgIG9jY3VyLCBhbmQgdXNlIGxvY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIGluc3RhbmNlIGNhbgorICAgICAgZW50ZXIgdGhlIGNyaXRpY2FsIHJlZ2lvbiBhdCBhbnkgdGltZS4gIFRoZXJlIGFyZSBtYW55CisgICAgICBmcmllbmRseSBwcmltaXRpdmVzIGluIHRoZSBMaW51eCBrZXJuZWwgdG8gaGVscCB5b3UgZG8gdGhpcy4KKyAgICAgIEFuZCB0aGVuIHRoZXJlIGFyZSB0aGUgdW5mcmllbmRseSBwcmltaXRpdmVzLCBidXQgSSdsbCBwcmV0ZW5kCisgICAgICB0aGV5IGRvbid0IGV4aXN0LgorICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImxvY2tzIj4KKyAgIDx0aXRsZT5Mb2NraW5nIGluIHRoZSBMaW51eCBLZXJuZWw8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICAgSWYgSSBjb3VsZCBnaXZlIHlvdSBvbmUgcGllY2Ugb2YgYWR2aWNlOiBuZXZlciBzbGVlcCB3aXRoIGFueW9uZQorICAgICBjcmF6aWVyIHRoYW4geW91cnNlbGYuICBCdXQgaWYgSSBoYWQgdG8gZ2l2ZSB5b3UgYWR2aWNlIG9uCisgICAgIGxvY2tpbmc6IDxlbXBoYXNpcz5rZWVwIGl0IHNpbXBsZTwvZW1waGFzaXM+LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgQmUgcmVsdWN0YW50IHRvIGludHJvZHVjZSBuZXcgbG9ja3MuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgICBTdHJhbmdlbHkgZW5vdWdoLCB0aGlzIGxhc3Qgb25lIGlzIHRoZSBleGFjdCByZXZlcnNlIG9mIG15IGFkdmljZSB3aGVuCisgICAgIHlvdSA8ZW1waGFzaXM+aGF2ZTwvZW1waGFzaXM+IHNsZXB0IHdpdGggc29tZW9uZSBjcmF6aWVyIHRoYW4geW91cnNlbGYuCisgICAgIEFuZCB5b3Ugc2hvdWxkIHRoaW5rIGFib3V0IGdldHRpbmcgYSBiaWcgZG9nLgorICAgPC9wYXJhPgorCisgICA8c2VjdDEgaWQ9ImxvY2staW50cm8iPgorICAgPHRpdGxlPlR3byBNYWluIFR5cGVzIG9mIEtlcm5lbCBMb2NrczogU3BpbmxvY2tzIGFuZCBTZW1hcGhvcmVzPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgIFRoZXJlIGFyZSB0d28gbWFpbiB0eXBlcyBvZiBrZXJuZWwgbG9ja3MuICBUaGUgZnVuZGFtZW50YWwgdHlwZQorICAgICBpcyB0aGUgc3BpbmxvY2sgCisgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3NwaW5sb2NrLmg8L2ZpbGVuYW1lPiksCisgICAgIHdoaWNoIGlzIGEgdmVyeSBzaW1wbGUgc2luZ2xlLWhvbGRlciBsb2NrOiBpZiB5b3UgY2FuJ3QgZ2V0IHRoZSAKKyAgICAgc3BpbmxvY2ssIHlvdSBrZWVwIHRyeWluZyAoc3Bpbm5pbmcpIHVudGlsIHlvdSBjYW4uICBTcGlubG9ja3MgYXJlIAorICAgICB2ZXJ5IHNtYWxsIGFuZCBmYXN0LCBhbmQgY2FuIGJlIHVzZWQgYW55d2hlcmUuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICAgVGhlIHNlY29uZCB0eXBlIGlzIGEgc2VtYXBob3JlCisgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvYXNtL3NlbWFwaG9yZS5oPC9maWxlbmFtZT4pOiBpdAorICAgICBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGhvbGRlciBhdCBhbnkgdGltZSAodGhlIG51bWJlciBkZWNpZGVkIGF0CisgICAgIGluaXRpYWxpemF0aW9uIHRpbWUpLCBhbHRob3VnaCBpdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgYXMgYQorICAgICBzaW5nbGUtaG9sZGVyIGxvY2sgKGEgbXV0ZXgpLiAgSWYgeW91IGNhbid0IGdldCBhIHNlbWFwaG9yZSwKKyAgICAgeW91ciB0YXNrIHdpbGwgcHV0IGl0c2VsZiBvbiB0aGUgcXVldWUsIGFuZCBiZSB3b2tlbiB1cCB3aGVuIHRoZQorICAgICBzZW1hcGhvcmUgaXMgcmVsZWFzZWQuICBUaGlzIG1lYW5zIHRoZSBDUFUgd2lsbCBkbyBzb21ldGhpbmcKKyAgICAgZWxzZSB3aGlsZSB5b3UgYXJlIHdhaXRpbmcsIGJ1dCB0aGVyZSBhcmUgbWFueSBjYXNlcyB3aGVuIHlvdQorICAgICBzaW1wbHkgY2FuJ3Qgc2xlZXAgKHNlZSA8eHJlZiBsaW5rZW5kPSJzbGVlcGluZy10aGluZ3MiLz4pLCBhbmQgc28KKyAgICAgaGF2ZSB0byB1c2UgYSBzcGlubG9jayBpbnN0ZWFkLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgIE5laXRoZXIgdHlwZSBvZiBsb2NrIGlzIHJlY3Vyc2l2ZTogc2VlCisgICAgIDx4cmVmIGxpbmtlbmQ9ImRlYWRsb2NrIi8+LgorICAgPC9wYXJhPgorICAgPC9zZWN0MT4KKyAKKyAgIDxzZWN0MSBpZD0idW5pcHJvY2Vzc29yIj4KKyAgICA8dGl0bGU+TG9ja3MgYW5kIFVuaXByb2Nlc3NvciBLZXJuZWxzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgRm9yIGtlcm5lbHMgY29tcGlsZWQgd2l0aG91dCA8c3ltYm9sPkNPTkZJR19TTVA8L3N5bWJvbD4sIGFuZAorICAgICAgd2l0aG91dCA8c3ltYm9sPkNPTkZJR19QUkVFTVBUPC9zeW1ib2w+IHNwaW5sb2NrcyBkbyBub3QgZXhpc3QgYXQKKyAgICAgIGFsbC4gIFRoaXMgaXMgYW4gZXhjZWxsZW50IGRlc2lnbiBkZWNpc2lvbjogd2hlbiBuby1vbmUgZWxzZSBjYW4KKyAgICAgIHJ1biBhdCB0aGUgc2FtZSB0aW1lLCB0aGVyZSBpcyBubyByZWFzb24gdG8gaGF2ZSBhIGxvY2suCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGhvdXQgPHN5bWJvbD5DT05GSUdfU01QPC9zeW1ib2w+LAorICAgICAgYnV0IDxzeW1ib2w+Q09ORklHX1BSRUVNUFQ8L3N5bWJvbD4gaXMgc2V0LCB0aGVuIHNwaW5sb2NrcworICAgICAgc2ltcGx5IGRpc2FibGUgcHJlZW1wdGlvbiwgd2hpY2ggaXMgc3VmZmljaWVudCB0byBwcmV2ZW50IGFueQorICAgICAgcmFjZXMuICBGb3IgbW9zdCBwdXJwb3Nlcywgd2UgY2FuIHRoaW5rIG9mIHByZWVtcHRpb24gYXMKKyAgICAgIGVxdWl2YWxlbnQgdG8gU01QLCBhbmQgbm90IHdvcnJ5IGFib3V0IGl0IHNlcGFyYXRlbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyB0ZXN0IHlvdXIgbG9ja2luZyBjb2RlIHdpdGggPHN5bWJvbD5DT05GSUdfU01QPC9zeW1ib2w+CisgICAgICBhbmQgPHN5bWJvbD5DT05GSUdfUFJFRU1QVDwvc3ltYm9sPiBlbmFibGVkLCBldmVuIGlmIHlvdSBkb24ndCBoYXZlIGFuIFNNUCB0ZXN0IGJveCwgYmVjYXVzZSBpdAorICAgICAgd2lsbCBzdGlsbCBjYXRjaCBzb21lIGtpbmRzIG9mIGxvY2tpbmcgYnVncy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFNlbWFwaG9yZXMgc3RpbGwgZXhpc3QsIGJlY2F1c2UgdGhleSBhcmUgcmVxdWlyZWQgZm9yCisgICAgICBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiA8Zmlyc3R0ZXJtIGxpbmtlbmQ9Imdsb3NzLXVzZXJjb250ZXh0Ij51c2VyIAorICAgICAgY29udGV4dHM8L2ZpcnN0dGVybT4sIGFzIHdlIHdpbGwgc2VlIGJlbG93LgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDEgaWQ9InVzZXJjb250ZXh0bG9ja2luZyI+CisgICAgIDx0aXRsZT5Mb2NraW5nIE9ubHkgSW4gVXNlciBDb250ZXh0PC90aXRsZT4KKworICAgICA8cGFyYT4KKyAgICAgICBJZiB5b3UgaGF2ZSBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIG9ubHkgZXZlciBhY2Nlc3NlZCBmcm9tCisgICAgICAgdXNlciBjb250ZXh0LCB0aGVuIHlvdSBjYW4gdXNlIGEgc2ltcGxlIHNlbWFwaG9yZQorICAgICAgICg8ZmlsZW5hbWU+bGludXgvYXNtL3NlbWFwaG9yZS5oPC9maWxlbmFtZT4pIHRvIHByb3RlY3QgaXQuICBUaGlzIAorICAgICAgIGlzIHRoZSBtb3N0IHRyaXZpYWwgY2FzZTogeW91IGluaXRpYWxpemUgdGhlIHNlbWFwaG9yZSB0byB0aGUgbnVtYmVyIAorICAgICAgIG9mIHJlc291cmNlcyBhdmFpbGFibGUgKHVzdWFsbHkgMSksIGFuZCBjYWxsCisgICAgICAgPGZ1bmN0aW9uPmRvd25faW50ZXJydXB0aWJsZSgpPC9mdW5jdGlvbj4gdG8gZ3JhYiB0aGUgc2VtYXBob3JlLCBhbmQgCisgICAgICAgPGZ1bmN0aW9uPnVwKCk8L2Z1bmN0aW9uPiB0byByZWxlYXNlIGl0LiAgVGhlcmUgaXMgYWxzbyBhIAorICAgICAgIDxmdW5jdGlvbj5kb3duKCk8L2Z1bmN0aW9uPiwgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQsIGJlY2F1c2UgaXQgCisgICAgICAgd2lsbCBub3QgcmV0dXJuIGlmIGEgc2lnbmFsIGlzIHJlY2VpdmVkLgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICAgRXhhbXBsZTogPGZpbGVuYW1lPmxpbnV4L25ldC9jb3JlL25ldGZpbHRlci5jPC9maWxlbmFtZT4gYWxsb3dzIAorICAgICAgIHJlZ2lzdHJhdGlvbiBvZiBuZXcgPGZ1bmN0aW9uPnNldHNvY2tvcHQoKTwvZnVuY3Rpb24+IGFuZCAKKyAgICAgICA8ZnVuY3Rpb24+Z2V0c29ja29wdCgpPC9mdW5jdGlvbj4gY2FsbHMsIHdpdGgKKyAgICAgICA8ZnVuY3Rpb24+bmZfcmVnaXN0ZXJfc29ja29wdCgpPC9mdW5jdGlvbj4uICBSZWdpc3RyYXRpb24gYW5kIAorICAgICAgIGRlLXJlZ2lzdHJhdGlvbiBhcmUgb25seSBkb25lIG9uIG1vZHVsZSBsb2FkIGFuZCB1bmxvYWQgKGFuZCBib290IAorICAgICAgIHRpbWUsIHdoZXJlIHRoZXJlIGlzIG5vIGNvbmN1cnJlbmN5KSwgYW5kIHRoZSBsaXN0IG9mIHJlZ2lzdHJhdGlvbnMgCisgICAgICAgaXMgb25seSBjb25zdWx0ZWQgZm9yIGFuIHVua25vd24gPGZ1bmN0aW9uPnNldHNvY2tvcHQoKTwvZnVuY3Rpb24+CisgICAgICAgb3IgPGZ1bmN0aW9uPmdldHNvY2tvcHQoKTwvZnVuY3Rpb24+IHN5c3RlbSBjYWxsLiAgVGhlIAorICAgICAgIDx2YXJuYW1lPm5mX3NvY2tvcHRfbXV0ZXg8L3Zhcm5hbWU+IGlzIHBlcmZlY3QgdG8gcHJvdGVjdCB0aGlzLAorICAgICAgIGVzcGVjaWFsbHkgc2luY2UgdGhlIHNldHNvY2tvcHQgYW5kIGdldHNvY2tvcHQgY2FsbHMgbWF5IHdlbGwKKyAgICAgICBzbGVlcC4KKyAgICAgPC9wYXJhPgorICAgPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJsb2NrLXVzZXItYmgiPgorICAgIDx0aXRsZT5Mb2NraW5nIEJldHdlZW4gVXNlciBDb250ZXh0IGFuZCBTb2Z0aXJxczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIGEgPGZpcnN0dGVybSBsaW5rZW5kPSJnbG9zcy1zb2Z0aXJxIj5zb2Z0aXJxPC9maXJzdHRlcm0+IHNoYXJlcworICAgICAgZGF0YSB3aXRoIHVzZXIgY29udGV4dCwgeW91IGhhdmUgdHdvIHByb2JsZW1zLiAgRmlyc3RseSwgdGhlIGN1cnJlbnQgCisgICAgICB1c2VyIGNvbnRleHQgY2FuIGJlIGludGVycnVwdGVkIGJ5IGEgc29mdGlycSwgYW5kIHNlY29uZGx5LCB0aGUKKyAgICAgIGNyaXRpY2FsIHJlZ2lvbiBjb3VsZCBiZSBlbnRlcmVkIGZyb20gYW5vdGhlciBDUFUuICBUaGlzIGlzIHdoZXJlCisgICAgICA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2JoKCk8L2Z1bmN0aW9uPiAKKyAgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvc3BpbmxvY2suaDwvZmlsZW5hbWU+KSBpcworICAgICAgdXNlZC4gIEl0IGRpc2FibGVzIHNvZnRpcnFzIG9uIHRoYXQgQ1BVLCB0aGVuIGdyYWJzIHRoZSBsb2NrLgorICAgICAgPGZ1bmN0aW9uPnNwaW5fdW5sb2NrX2JoKCk8L2Z1bmN0aW9uPiBkb2VzIHRoZSByZXZlcnNlLiAgKFRoZQorICAgICAgJ19iaCcgc3VmZml4IGlzIGEgaGlzdG9yaWNhbCByZWZlcmVuY2UgdG8gIkJvdHRvbSBIYWx2ZXMiLCB0aGUKKyAgICAgIG9sZCBuYW1lIGZvciBzb2Z0d2FyZSBpbnRlcnJ1cHRzLiAgSXQgc2hvdWxkIHJlYWxseSBiZQorICAgICAgY2FsbGVkIHNwaW5fbG9ja19zb2Z0aXJxKCknIGluIGEgcGVyZmVjdCB3b3JsZCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgeW91IGNhbiBhbHNvIHVzZSA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycSgpPC9mdW5jdGlvbj4KKyAgICAgIG9yIDxmdW5jdGlvbj5zcGluX2xvY2tfaXJxc2F2ZSgpPC9mdW5jdGlvbj4gaGVyZSwgd2hpY2ggc3RvcAorICAgICAgaGFyZHdhcmUgaW50ZXJydXB0cyBhcyB3ZWxsOiBzZWUgPHhyZWYgbGlua2VuZD0iaGFyZGlycS1jb250ZXh0Ii8+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyB3b3JrcyBwZXJmZWN0bHkgZm9yIDxmaXJzdHRlcm0gbGlua2VuZD0iZ2xvc3MtdXAiPjxhY3JvbnltPlVQCisgICAgICA8L2Fjcm9ueW0+PC9maXJzdHRlcm0+IGFzIHdlbGw6IHRoZSBzcGluIGxvY2sgdmFuaXNoZXMsIGFuZCB0aGlzIG1hY3JvIAorICAgICAgc2ltcGx5IGJlY29tZXMgPGZ1bmN0aW9uPmxvY2FsX2JoX2Rpc2FibGUoKTwvZnVuY3Rpb24+CisgICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPC9maWxlbmFtZT4pLCB3aGljaAorICAgICAgcHJvdGVjdHMgeW91IGZyb20gdGhlIHNvZnRpcnEgYmVpbmcgcnVuLgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0ibG9jay11c2VyLXRhc2tsZXQiPgorICAgIDx0aXRsZT5Mb2NraW5nIEJldHdlZW4gVXNlciBDb250ZXh0IGFuZCBUYXNrbGV0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBhYm92ZSwgYmVjYXVzZSA8Zmlyc3R0ZXJtCisgICAgICBsaW5rZW5kPSJnbG9zcy10YXNrbGV0Ij50YXNrbGV0czwvZmlyc3R0ZXJtPiBhcmUgYWN0dWFsbHkgcnVuCisgICAgICBmcm9tIGEgc29mdGlycS4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9ImxvY2stdXNlci10aW1lcnMiPgorICAgIDx0aXRsZT5Mb2NraW5nIEJldHdlZW4gVXNlciBDb250ZXh0IGFuZCBUaW1lcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzLCB0b28sIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYWJvdmUsIGJlY2F1c2UgPGZpcnN0dGVybQorICAgICAgbGlua2VuZD0iZ2xvc3MtdGltZXJzIj50aW1lcnM8L2ZpcnN0dGVybT4gYXJlIGFjdHVhbGx5IHJ1biBmcm9tCisgICAgICBhIHNvZnRpcnEuICBGcm9tIGEgbG9ja2luZyBwb2ludCBvZiB2aWV3LCB0YXNrbGV0cyBhbmQgdGltZXJzCisgICAgICBhcmUgaWRlbnRpY2FsLgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0ibG9jay10YXNrbGV0cyI+CisgICAgPHRpdGxlPkxvY2tpbmcgQmV0d2VlbiBUYXNrbGV0cy9UaW1lcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBTb21ldGltZXMgYSB0YXNrbGV0IG9yIHRpbWVyIG1pZ2h0IHdhbnQgdG8gc2hhcmUgZGF0YSB3aXRoCisgICAgICBhbm90aGVyIHRhc2tsZXQgb3IgdGltZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3QyIGlkPSJsb2NrLXRhc2tsZXRzLXNhbWUiPgorICAgICA8dGl0bGU+VGhlIFNhbWUgVGFza2xldC9UaW1lcjwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICAgIFNpbmNlIGEgdGFza2xldCBpcyBuZXZlciBydW4gb24gdHdvIENQVXMgYXQgb25jZSwgeW91IGRvbid0CisgICAgICAgbmVlZCB0byB3b3JyeSBhYm91dCB5b3VyIHRhc2tsZXQgYmVpbmcgcmVlbnRyYW50IChydW5uaW5nCisgICAgICAgdHdpY2UgYXQgb25jZSksIGV2ZW4gb24gU01QLgorICAgICA8L3BhcmE+CisgICAgPC9zZWN0Mj4KKworICAgIDxzZWN0MiBpZD0ibG9jay10YXNrbGV0cy1kaWZmZXJlbnQiPgorICAgICA8dGl0bGU+RGlmZmVyZW50IFRhc2tsZXRzL1RpbWVyczwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICAgIElmIGFub3RoZXIgdGFza2xldC90aW1lciB3YW50cworICAgICAgIHRvIHNoYXJlIGRhdGEgd2l0aCB5b3VyIHRhc2tsZXQgb3IgdGltZXIgLCB5b3Ugd2lsbCBib3RoIG5lZWQgdG8gdXNlCisgICAgICAgPGZ1bmN0aW9uPnNwaW5fbG9jaygpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgPGZ1bmN0aW9uPnNwaW5fdW5sb2NrKCk8L2Z1bmN0aW9uPiBjYWxscy4gIAorICAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2tfYmgoKTwvZnVuY3Rpb24+IGlzCisgICAgICAgdW5uZWNlc3NhcnkgaGVyZSwgYXMgeW91IGFyZSBhbHJlYWR5IGluIGEgdGFza2xldCwgYW5kCisgICAgICAgbm9uZSB3aWxsIGJlIHJ1biBvbiB0aGUgc2FtZSBDUFUuCisgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorICAgPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJsb2NrLXNvZnRpcnFzIj4KKyAgICA8dGl0bGU+TG9ja2luZyBCZXR3ZWVuIFNvZnRpcnFzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgT2Z0ZW4gYSBzb2Z0aXJxIG1pZ2h0CisgICAgICB3YW50IHRvIHNoYXJlIGRhdGEgd2l0aCBpdHNlbGYgb3IgYSB0YXNrbGV0L3RpbWVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0ibG9jay1zb2Z0aXJxcy1zYW1lIj4KKyAgICAgPHRpdGxlPlRoZSBTYW1lIFNvZnRpcnE8L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgIFRoZSBzYW1lIHNvZnRpcnEgY2FuIHJ1biBvbiB0aGUgb3RoZXIgQ1BVczogeW91IGNhbiB1c2UgYQorICAgICAgIHBlci1DUFUgYXJyYXkgKHNlZSA8eHJlZiBsaW5rZW5kPSJwZXItY3B1Ii8+KSBmb3IgYmV0dGVyCisgICAgICAgcGVyZm9ybWFuY2UuICBJZiB5b3UncmUgZ29pbmcgc28gZmFyIGFzIHRvIHVzZSBhIHNvZnRpcnEsCisgICAgICAgeW91IHByb2JhYmx5IGNhcmUgYWJvdXQgc2NhbGFibGUgcGVyZm9ybWFuY2UgZW5vdWdoCisgICAgICAgdG8ganVzdGlmeSB0aGUgZXh0cmEgY29tcGxleGl0eS4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIFlvdSdsbCBuZWVkIHRvIHVzZSA8ZnVuY3Rpb24+c3Bpbl9sb2NrKCk8L2Z1bmN0aW9uPiBhbmQgCisgICAgICAgPGZ1bmN0aW9uPnNwaW5fdW5sb2NrKCk8L2Z1bmN0aW9uPiBmb3Igc2hhcmVkIGRhdGEuCisgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QyPgorCisgICAgPHNlY3QyIGlkPSJsb2NrLXNvZnRpcnFzLWRpZmZlcmVudCI+CisgICAgIDx0aXRsZT5EaWZmZXJlbnQgU29mdGlycXM8L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgIFlvdSdsbCBuZWVkIHRvIHVzZSA8ZnVuY3Rpb24+c3Bpbl9sb2NrKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICA8ZnVuY3Rpb24+c3Bpbl91bmxvY2soKTwvZnVuY3Rpb24+IGZvciBzaGFyZWQgZGF0YSwgd2hldGhlciBpdAorICAgICAgIGJlIGEgdGltZXIsIHRhc2tsZXQsIGRpZmZlcmVudCBzb2Z0aXJxIG9yIHRoZSBzYW1lIG9yIGFub3RoZXIKKyAgICAgICBzb2Z0aXJxOiBhbnkgb2YgdGhlbSBjb3VsZCBiZSBydW5uaW5nIG9uIGEgZGlmZmVyZW50IENQVS4KKyAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImhhcmRpcnEtY29udGV4dCI+CisgICA8dGl0bGU+SGFyZCBJUlEgQ29udGV4dDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgICBIYXJkd2FyZSBpbnRlcnJ1cHRzIHVzdWFsbHkgY29tbXVuaWNhdGUgd2l0aCBhCisgICAgIHRhc2tsZXQgb3Igc29mdGlycS4gIEZyZXF1ZW50bHkgdGhpcyBpbnZvbHZlcyBwdXR0aW5nIHdvcmsgaW4gYQorICAgICBxdWV1ZSwgd2hpY2ggdGhlIHNvZnRpcnEgd2lsbCB0YWtlIG91dC4KKyAgIDwvcGFyYT4KKworICAgPHNlY3QxIGlkPSJoYXJkaXJxLXNvZnRpcnEiPgorICAgIDx0aXRsZT5Mb2NraW5nIEJldHdlZW4gSGFyZCBJUlEgYW5kIFNvZnRpcnFzL1Rhc2tsZXRzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgSWYgYSBoYXJkd2FyZSBpcnEgaGFuZGxlciBzaGFyZXMgZGF0YSB3aXRoIGEgc29mdGlycSwgeW91IGhhdmUKKyAgICAgIHR3byBjb25jZXJucy4gIEZpcnN0bHksIHRoZSBzb2Z0aXJxIHByb2Nlc3NpbmcgY2FuIGJlCisgICAgICBpbnRlcnJ1cHRlZCBieSBhIGhhcmR3YXJlIGludGVycnVwdCwgYW5kIHNlY29uZGx5LCB0aGUKKyAgICAgIGNyaXRpY2FsIHJlZ2lvbiBjb3VsZCBiZSBlbnRlcmVkIGJ5IGEgaGFyZHdhcmUgaW50ZXJydXB0IG9uCisgICAgICBhbm90aGVyIENQVS4gIFRoaXMgaXMgd2hlcmUgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnEoKTwvZnVuY3Rpb24+IGlzIAorICAgICAgdXNlZC4gIEl0IGlzIGRlZmluZWQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoYXQgY3B1LCB0aGVuIGdyYWIgCisgICAgICB0aGUgbG9jay4gPGZ1bmN0aW9uPnNwaW5fdW5sb2NrX2lycSgpPC9mdW5jdGlvbj4gZG9lcyB0aGUgcmV2ZXJzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBpcnEgaGFuZGxlciBkb2VzIG5vdCB0byB1c2UKKyAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2tfaXJxKCk8L2Z1bmN0aW9uPiwgYmVjYXVzZSB0aGUgc29mdGlycSBjYW5ub3QKKyAgICAgIHJ1biB3aGlsZSB0aGUgaXJxIGhhbmRsZXIgaXMgcnVubmluZzogaXQgY2FuIHVzZQorICAgICAgPGZ1bmN0aW9uPnNwaW5fbG9jaygpPC9mdW5jdGlvbj4sIHdoaWNoIGlzIHNsaWdodGx5IGZhc3Rlci4gIFRoZQorICAgICAgb25seSBleGNlcHRpb24gd291bGQgYmUgaWYgYSBkaWZmZXJlbnQgaGFyZHdhcmUgaXJxIGhhbmRsZXIgdXNlcworICAgICAgdGhlIHNhbWUgbG9jazogPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnEoKTwvZnVuY3Rpb24+IHdpbGwgc3RvcAorICAgICAgdGhhdCBmcm9tIGludGVycnVwdGluZyB1cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgd29ya3MgcGVyZmVjdGx5IGZvciBVUCBhcyB3ZWxsOiB0aGUgc3BpbiBsb2NrIHZhbmlzaGVzLAorICAgICAgYW5kIHRoaXMgbWFjcm8gc2ltcGx5IGJlY29tZXMgPGZ1bmN0aW9uPmxvY2FsX2lycV9kaXNhYmxlKCk8L2Z1bmN0aW9uPgorICAgICAgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vc21wLmg8L2ZpbGVuYW1lPiksIHdoaWNoCisgICAgICBwcm90ZWN0cyB5b3UgZnJvbSB0aGUgc29mdGlycS90YXNrbGV0L0JIIGJlaW5nIHJ1bi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2tfaXJxc2F2ZSgpPC9mdW5jdGlvbj4gCisgICAgICAoPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvc3BpbmxvY2suaDwvZmlsZW5hbWU+KSBpcyBhIHZhcmlhbnQKKyAgICAgIHdoaWNoIHNhdmVzIHdoZXRoZXIgaW50ZXJydXB0cyB3ZXJlIG9uIG9yIG9mZiBpbiBhIGZsYWdzIHdvcmQsCisgICAgICB3aGljaCBpcyBwYXNzZWQgdG8gPGZ1bmN0aW9uPnNwaW5fdW5sb2NrX2lycXJlc3RvcmUoKTwvZnVuY3Rpb24+LiAgVGhpcworICAgICAgbWVhbnMgdGhhdCB0aGUgc2FtZSBjb2RlIGNhbiBiZSB1c2VkIGluc2lkZSBhbiBoYXJkIGlycSBoYW5kbGVyICh3aGVyZQorICAgICAgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBvZmYpIGFuZCBpbiBzb2Z0aXJxcyAod2hlcmUgdGhlIGlycQorICAgICAgZGlzYWJsaW5nIGlzIHJlcXVpcmVkKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhhdCBzb2Z0aXJxcyAoYW5kIGhlbmNlIHRhc2tsZXRzIGFuZCB0aW1lcnMpIGFyZSBydW4gb24KKyAgICAgIHJldHVybiBmcm9tIGhhcmR3YXJlIGludGVycnVwdHMsIHNvCisgICAgICA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycSgpPC9mdW5jdGlvbj4gYWxzbyBzdG9wcyB0aGVzZS4gIEluIHRoYXQKKyAgICAgIHNlbnNlLCA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycXNhdmUoKTwvZnVuY3Rpb24+IGlzIHRoZSBtb3N0CisgICAgICBnZW5lcmFsIGFuZCBwb3dlcmZ1bCBsb2NraW5nIGZ1bmN0aW9uLgorICAgIDwvcGFyYT4KKworICAgPC9zZWN0MT4KKyAgIDxzZWN0MSBpZD0iaGFyZGlycS1oYXJkaXJxIj4KKyAgICA8dGl0bGU+TG9ja2luZyBCZXR3ZWVuIFR3byBIYXJkIElSUSBIYW5kbGVyczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBJdCBpcyByYXJlIHRvIGhhdmUgdG8gc2hhcmUgZGF0YSBiZXR3ZWVuIHR3byBJUlEgaGFuZGxlcnMsIGJ1dAorICAgICAgaWYgeW91IGRvLCA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycXNhdmUoKTwvZnVuY3Rpb24+IHNob3VsZCBiZQorICAgICAgdXNlZDogaXQgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHdoZXRoZXIgYWxsIGludGVycnVwdHMgYXJlCisgICAgICBkaXNhYmxlZCBpbnNpZGUgaXJxIGhhbmRsZXJzIHRoZW1zZWx2ZXMuCisgICAgPC9wYXJhPgorICAgPC9zZWN0MT4KKworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImNoZWF0c2hlZXQiPgorICAgPHRpdGxlPkNoZWF0IFNoZWV0IEZvciBMb2NraW5nPC90aXRsZT4KKyAgIDxwYXJhPgorICAgICBQZXRlIFphaXRjZXYgZ2l2ZXMgdGhlIGZvbGxvd2luZyBzdW1tYXJ5OgorICAgPC9wYXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgYXJlIGluIGEgcHJvY2VzcyBjb250ZXh0IChhbnkgc3lzY2FsbCkgYW5kIHdhbnQgdG8KKwlsb2NrIG90aGVyIHByb2Nlc3Mgb3V0LCB1c2UgYSBzZW1hcGhvcmUuICBZb3UgY2FuIHRha2UgYSBzZW1hcGhvcmUKKwlhbmQgc2xlZXAgKDxmdW5jdGlvbj5jb3B5X2Zyb21fdXNlciooPC9mdW5jdGlvbj4gb3IKKwk8ZnVuY3Rpb24+a21hbGxvYyh4LEdGUF9LRVJORUwpPC9mdW5jdGlvbj4pLgorICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4KKwlPdGhlcndpc2UgKD09IGRhdGEgY2FuIGJlIHRvdWNoZWQgaW4gYW4gaW50ZXJydXB0KSwgdXNlCisJPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnFzYXZlKCk8L2Z1bmN0aW9uPiBhbmQKKwk8ZnVuY3Rpb24+c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgpPC9mdW5jdGlvbj4uCisJPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4KKwlBdm9pZCBob2xkaW5nIHNwaW5sb2NrIGZvciBtb3JlIHRoYW4gNSBsaW5lcyBvZiBjb2RlIGFuZAorCWFjcm9zcyBhbnkgZnVuY3Rpb24gY2FsbCAoZXhjZXB0IGFjY2Vzc29ycyBsaWtlCisJPGZ1bmN0aW9uPnJlYWRiPC9mdW5jdGlvbj4pLgorCTwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgIDxzZWN0MSBpZD0ibWluaW11bS1sb2NrLXJlcWlyZW1lbnRzIj4KKyAgIDx0aXRsZT5UYWJsZSBvZiBNaW5pbXVtIFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgIDxwYXJhPiBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSA8ZW1waGFzaXM+bWluaW11bTwvZW1waGFzaXM+CisJbG9ja2luZyByZXF1aXJlbWVudHMgYmV0d2VlbiB2YXJpb3VzIGNvbnRleHRzLiAgSW4gc29tZSBjYXNlcywKKwl0aGUgc2FtZSBjb250ZXh0IGNhbiBvbmx5IGJlIHJ1bm5pbmcgb24gb25lIENQVSBhdCBhIHRpbWUsIHNvCisJbm8gbG9ja2luZyBpcyByZXF1aXJlZCBmb3IgdGhhdCBjb250ZXh0IChlZy4gYSBwYXJ0aWN1bGFyCisJdGhyZWFkIGNhbiBvbmx5IHJ1biBvbiBvbmUgQ1BVIGF0IGEgdGltZSwgYnV0IGlmIGl0IG5lZWRzCisJc2hhcmVzIGRhdGEgd2l0aCBhbm90aGVyIHRocmVhZCwgbG9ja2luZyBpcyByZXF1aXJlZCkuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKwlSZW1lbWJlciB0aGUgYWR2aWNlIGFib3ZlOiB5b3UgY2FuIGFsd2F5cyB1c2UKKwk8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycXNhdmUoKTwvZnVuY3Rpb24+LCB3aGljaCBpcyBhIHN1cGVyc2V0CisJb2YgYWxsIG90aGVyIHNwaW5sb2NrIHByaW1pdGl2ZXMuCisgICA8L3BhcmE+CisgICA8dGFibGU+Cis8dGl0bGU+VGFibGUgb2YgTG9ja2luZyBSZXF1aXJlbWVudHM8L3RpdGxlPgorPHRncm91cCBjb2xzPSIxMSI+Cis8dGJvZHk+Cis8cm93PgorPGVudHJ5PjwvZW50cnk+Cis8ZW50cnk+SVJRIEhhbmRsZXIgQTwvZW50cnk+Cis8ZW50cnk+SVJRIEhhbmRsZXIgQjwvZW50cnk+Cis8ZW50cnk+U29mdGlycSBBPC9lbnRyeT4KKzxlbnRyeT5Tb2Z0aXJxIEI8L2VudHJ5PgorPGVudHJ5PlRhc2tsZXQgQTwvZW50cnk+Cis8ZW50cnk+VGFza2xldCBCPC9lbnRyeT4KKzxlbnRyeT5UaW1lciBBPC9lbnRyeT4KKzxlbnRyeT5UaW1lciBCPC9lbnRyeT4KKzxlbnRyeT5Vc2VyIENvbnRleHQgQTwvZW50cnk+Cis8ZW50cnk+VXNlciBDb250ZXh0IEI8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+SVJRIEhhbmRsZXIgQTwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5JUlEgSGFuZGxlciBCPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxc2F2ZTwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5Tb2Z0aXJxIEE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5Tb2Z0aXJxIEI8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzwvcm93PgorCis8cm93PgorPGVudHJ5PlRhc2tsZXQgQTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5Pk5vbmU8L2VudHJ5PgorPC9yb3c+CisKKzxyb3c+Cis8ZW50cnk+VGFza2xldCBCPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5Ob25lPC9lbnRyeT4KKzwvcm93PgorCis8cm93PgorPGVudHJ5PlRpbWVyIEE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19pcnE8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5UaW1lciBCPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfaXJxPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2s8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9jazwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5Vc2VyIENvbnRleHQgQTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+Tm9uZTwvZW50cnk+Cis8L3Jvdz4KKworPHJvdz4KKzxlbnRyeT5Vc2VyIENvbnRleHQgQjwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2lycTwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+c3Bpbl9sb2NrX2JoPC9lbnRyeT4KKzxlbnRyeT5zcGluX2xvY2tfYmg8L2VudHJ5PgorPGVudHJ5PnNwaW5fbG9ja19iaDwvZW50cnk+Cis8ZW50cnk+ZG93bl9pbnRlcnJ1cHRpYmxlPC9lbnRyeT4KKzxlbnRyeT5Ob25lPC9lbnRyeT4KKzwvcm93PgorCis8L3Rib2R5PgorPC90Z3JvdXA+Cis8L3RhYmxlPgorPC9zZWN0MT4KKzwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iRXhhbXBsZXMiPgorICAgPHRpdGxlPkNvbW1vbiBFeGFtcGxlczwvdGl0bGU+CisgICAgPHBhcmE+CitMZXQncyBzdGVwIHRocm91Z2ggYSBzaW1wbGUgZXhhbXBsZTogYSBjYWNoZSBvZiBudW1iZXIgdG8gbmFtZQorbWFwcGluZ3MuICBUaGUgY2FjaGUga2VlcHMgYSBjb3VudCBvZiBob3cgb2Z0ZW4gZWFjaCBvZiB0aGUgb2JqZWN0cyBpcwordXNlZCwgYW5kIHdoZW4gaXQgZ2V0cyBmdWxsLCB0aHJvd3Mgb3V0IHRoZSBsZWFzdCB1c2VkIG9uZS4KKworICAgIDwvcGFyYT4KKworICAgPHNlY3QxIGlkPSJleGFtcGxlcy11c2VyY29udGV4dCI+CisgICAgPHRpdGxlPkFsbCBJbiBVc2VyIENvbnRleHQ8L3RpdGxlPgorICAgIDxwYXJhPgorRm9yIG91ciBmaXJzdCBleGFtcGxlLCB3ZSBhc3N1bWUgdGhhdCBhbGwgb3BlcmF0aW9ucyBhcmUgaW4gdXNlcgorY29udGV4dCAoaWUuIGZyb20gc3lzdGVtIGNhbGxzKSwgc28gd2UgY2FuIHNsZWVwLiAgVGhpcyBtZWFucyB3ZSBjYW4KK3VzZSBhIHNlbWFwaG9yZSB0byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbgoraXQuICBIZXJlJ3MgdGhlIGNvZGU6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKKyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CisjaW5jbHVkZSAmbHQ7YXNtL3NlbWFwaG9yZS5oJmd0OworI2luY2x1ZGUgJmx0O2FzbS9lcnJuby5oJmd0OworCitzdHJ1Y3Qgb2JqZWN0Cit7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyAgICAgICAgaW50IGlkOworICAgICAgICBjaGFyIG5hbWVbMzJdOworICAgICAgICBpbnQgcG9wdWxhcml0eTsKK307CisKKy8qIFByb3RlY3RzIHRoZSBjYWNoZSwgY2FjaGVfbnVtLCBhbmQgdGhlIG9iamVjdHMgd2l0aGluIGl0ICovCitzdGF0aWMgREVDTEFSRV9NVVRFWChjYWNoZV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoY2FjaGUpOworc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZV9udW0gPSAwOworI2RlZmluZSBNQVhfQ0FDSEVfU0laRSAxMAorCisvKiBNdXN0IGJlIGhvbGRpbmcgY2FjaGVfbG9jayAqLworc3RhdGljIHN0cnVjdCBvYmplY3QgKl9fY2FjaGVfZmluZChpbnQgaWQpCit7CisgICAgICAgIHN0cnVjdCBvYmplY3QgKmk7CisKKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmYW1wO2NhY2hlLCBsaXN0KQorICAgICAgICAgICAgICAgIGlmIChpLSZndDtpZCA9PSBpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaS0mZ3Q7cG9wdWxhcml0eSsrOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKK30KKworLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KK3N0YXRpYyB2b2lkIF9fY2FjaGVfZGVsZXRlKHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKyAgICAgICAgQlVHX09OKCFvYmopOworICAgICAgICBsaXN0X2RlbCgmYW1wO29iai0mZ3Q7bGlzdCk7CisgICAgICAgIGtmcmVlKG9iaik7CisgICAgICAgIGNhY2hlX251bS0tOworfQorCisvKiBNdXN0IGJlIGhvbGRpbmcgY2FjaGVfbG9jayAqLworc3RhdGljIHZvaWQgX19jYWNoZV9hZGQoc3RydWN0IG9iamVjdCAqb2JqKQoreworICAgICAgICBsaXN0X2FkZCgmYW1wO29iai0mZ3Q7bGlzdCwgJmFtcDtjYWNoZSk7CisgICAgICAgIGlmICgrK2NhY2hlX251bSA+IE1BWF9DQUNIRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IG9iamVjdCAqaSwgKm91dGNhc3QgPSBOVUxMOworICAgICAgICAgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmFtcDtjYWNoZSwgbGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdXRjYXN0IHx8IGktJmd0O3BvcHVsYXJpdHkgJmx0OyBvdXRjYXN0LSZndDtwb3B1bGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjYXN0ID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX19jYWNoZV9kZWxldGUob3V0Y2FzdCk7CisgICAgICAgIH0KK30KKworaW50IGNhY2hlX2FkZChpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgICAgIHN0cnVjdCBvYmplY3QgKm9iajsKKworICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Moc2l6ZW9mKCpvYmopLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICBzdHJsY3B5KG9iai0mZ3Q7bmFtZSwgbmFtZSwgc2l6ZW9mKG9iai0mZ3Q7bmFtZSkpOworICAgICAgICBvYmotJmd0O2lkID0gaWQ7CisgICAgICAgIG9iai0mZ3Q7cG9wdWxhcml0eSA9IDA7CisKKyAgICAgICAgZG93bigmYW1wO2NhY2hlX2xvY2spOworICAgICAgICBfX2NhY2hlX2FkZChvYmopOworICAgICAgICB1cCgmYW1wO2NhY2hlX2xvY2spOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBjYWNoZV9kZWxldGUoaW50IGlkKQoreworICAgICAgICBkb3duKCZhbXA7Y2FjaGVfbG9jayk7CisgICAgICAgIF9fY2FjaGVfZGVsZXRlKF9fY2FjaGVfZmluZChpZCkpOworICAgICAgICB1cCgmYW1wO2NhY2hlX2xvY2spOworfQorCitpbnQgY2FjaGVfZmluZChpbnQgaWQsIGNoYXIgKm5hbWUpCit7CisgICAgICAgIHN0cnVjdCBvYmplY3QgKm9iajsKKyAgICAgICAgaW50IHJldCA9IC1FTk9FTlQ7CisKKyAgICAgICAgZG93bigmYW1wO2NhY2hlX2xvY2spOworICAgICAgICBvYmogPSBfX2NhY2hlX2ZpbmQoaWQpOworICAgICAgICBpZiAob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICBzdHJjcHkobmFtZSwgb2JqLSZndDtuYW1lKTsKKyAgICAgICAgfQorICAgICAgICB1cCgmYW1wO2NhY2hlX2xvY2spOworICAgICAgICByZXR1cm4gcmV0OworfQorPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorTm90ZSB0aGF0IHdlIGFsd2F5cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY2FjaGVfbG9jayB3aGVuIHdlIGFkZCwKK2RlbGV0ZSwgb3IgbG9vayB1cCB0aGUgY2FjaGU6IGJvdGggdGhlIGNhY2hlIGluZnJhc3RydWN0dXJlIGl0c2VsZiBhbmQKK3RoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0cyBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBsb2NrLiAgSW4gdGhpcyBjYXNlCitpdCdzIGVhc3ksIHNpbmNlIHdlIGNvcHkgdGhlIGRhdGEgZm9yIHRoZSB1c2VyLCBhbmQgbmV2ZXIgbGV0IHRoZW0KK2FjY2VzcyB0aGUgb2JqZWN0cyBkaXJlY3RseS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CitUaGVyZSBpcyBhIHNsaWdodCAoYW5kIGNvbW1vbikgb3B0aW1pemF0aW9uIGhlcmU6IGluCis8ZnVuY3Rpb24+Y2FjaGVfYWRkPC9mdW5jdGlvbj4gd2Ugc2V0IHVwIHRoZSBmaWVsZHMgb2YgdGhlIG9iamVjdAorYmVmb3JlIGdyYWJiaW5nIHRoZSBsb2NrLiAgVGhpcyBpcyBzYWZlLCBhcyBuby1vbmUgZWxzZSBjYW4gYWNjZXNzIGl0Cit1bnRpbCB3ZSBwdXQgaXQgaW4gY2FjaGUuCisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0iZXhhbXBsZXMtaW50ZXJydXB0Ij4KKyAgICA8dGl0bGU+QWNjZXNzaW5nIEZyb20gSW50ZXJydXB0IENvbnRleHQ8L3RpdGxlPgorICAgIDxwYXJhPgorTm93IGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIDxmdW5jdGlvbj5jYWNoZV9maW5kPC9mdW5jdGlvbj4gY2FuIGJlCitjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dDogZWl0aGVyIGEgaGFyZHdhcmUgaW50ZXJydXB0IG9yIGEKK3NvZnRpcnEuICBBbiBleGFtcGxlIHdvdWxkIGJlIGEgdGltZXIgd2hpY2ggZGVsZXRlcyBvYmplY3QgZnJvbSB0aGUKK2NhY2hlLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KK1RoZSBjaGFuZ2UgaXMgc2hvd24gYmVsb3csIGluIHN0YW5kYXJkIHBhdGNoIGZvcm1hdDogdGhlCis8c3ltYm9sPi08L3N5bWJvbD4gYXJlIGxpbmVzIHdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlCis8c3ltYm9sPis8L3N5bWJvbD4gYXJlIGxpbmVzIHdoaWNoIGFyZSBhZGRlZC4KKyAgICA8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CistLS0gY2FjaGUuYy51c2VyY29udGV4dAkyMDAzLTEyLTA5IDEzOjU4OjU0LjAwMDAwMDAwMCArMTEwMAorKysrIGNhY2hlLmMuaW50ZXJydXB0CTIwMDMtMTItMDkgMTQ6MDc6NDkuMDAwMDAwMDAwICsxMTAwCitAQCAtMTIsNyArMTIsNyBAQAorICAgICAgICAgaW50IHBvcHVsYXJpdHk7CisgfTsKKworLXN0YXRpYyBERUNMQVJFX01VVEVYKGNhY2hlX2xvY2spOworK3N0YXRpYyBzcGlubG9ja190IGNhY2hlX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7Cisgc3RhdGljIExJU1RfSEVBRChjYWNoZSk7Cisgc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZV9udW0gPSAwOworICNkZWZpbmUgTUFYX0NBQ0hFX1NJWkUgMTAKK0BAIC01NSw2ICs1NSw3IEBACisgaW50IGNhY2hlX2FkZChpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCisgeworICAgICAgICAgc3RydWN0IG9iamVjdCAqb2JqOworKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jKHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworQEAgLTYzLDMwICs2NCwzMyBAQAorICAgICAgICAgb2JqLSZndDtpZCA9IGlkOworICAgICAgICAgb2JqLSZndDtwb3B1bGFyaXR5ID0gMDsKKworLSAgICAgICAgZG93bigmYW1wO2NhY2hlX2xvY2spOworKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICBfX2NhY2hlX2FkZChvYmopOworLSAgICAgICAgdXAoJmFtcDtjYWNoZV9sb2NrKTsKKysgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICByZXR1cm4gMDsKKyB9CisKKyB2b2lkIGNhY2hlX2RlbGV0ZShpbnQgaWQpCisgeworLSAgICAgICAgZG93bigmYW1wO2NhY2hlX2xvY2spOworKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKysKKysgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgX19jYWNoZV9kZWxldGUoX19jYWNoZV9maW5kKGlkKSk7CistICAgICAgICB1cCgmYW1wO2NhY2hlX2xvY2spOworKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyB9CisKKyBpbnQgY2FjaGVfZmluZChpbnQgaWQsIGNoYXIgKm5hbWUpCisgeworICAgICAgICAgc3RydWN0IG9iamVjdCAqb2JqOworICAgICAgICAgaW50IHJldCA9IC1FTk9FTlQ7CisrICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCistICAgICAgICBkb3duKCZhbXA7Y2FjaGVfbG9jayk7CisrICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIG9iaiA9IF9fY2FjaGVfZmluZChpZCk7CisgICAgICAgICBpZiAob2JqKSB7CisgICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgIHN0cmNweShuYW1lLCBvYmotJmd0O25hbWUpOworICAgICAgICAgfQorLSAgICAgICAgdXAoJmFtcDtjYWNoZV9sb2NrKTsKKysgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICByZXR1cm4gcmV0OworIH0KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KK05vdGUgdGhhdCB0aGUgPGZ1bmN0aW9uPnNwaW5fbG9ja19pcnFzYXZlPC9mdW5jdGlvbj4gd2lsbCB0dXJuIG9mZgoraW50ZXJydXB0cyBpZiB0aGV5IGFyZSBvbiwgb3RoZXJ3aXNlIGRvZXMgbm90aGluZyAoaWYgd2UgYXJlIGFscmVhZHkKK2luIGFuIGludGVycnVwdCBoYW5kbGVyKSwgaGVuY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBzYWZlIHRvIGNhbGwgZnJvbQorYW55IGNvbnRleHQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorVW5mb3J0dW5hdGVseSwgPGZ1bmN0aW9uPmNhY2hlX2FkZDwvZnVuY3Rpb24+IGNhbGxzCis8ZnVuY3Rpb24+a21hbGxvYzwvZnVuY3Rpb24+IHdpdGggdGhlIDxzeW1ib2w+R0ZQX0tFUk5FTDwvc3ltYm9sPgorZmxhZywgd2hpY2ggaXMgb25seSBsZWdhbCBpbiB1c2VyIGNvbnRleHQuICBJIGhhdmUgYXNzdW1lZCB0aGF0Cis8ZnVuY3Rpb24+Y2FjaGVfYWRkPC9mdW5jdGlvbj4gaXMgc3RpbGwgb25seSBjYWxsZWQgaW4gdXNlciBjb250ZXh0LAorb3RoZXJ3aXNlIHRoaXMgc2hvdWxkIGJlY29tZSBhIHBhcmFtZXRlciB0bworPGZ1bmN0aW9uPmNhY2hlX2FkZDwvZnVuY3Rpb24+LgorICAgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgIDxzZWN0MSBpZD0iZXhhbXBsZXMtcmVmY250Ij4KKyAgICA8dGl0bGU+RXhwb3NpbmcgT2JqZWN0cyBPdXRzaWRlIFRoaXMgRmlsZTwvdGl0bGU+CisgICAgPHBhcmE+CitJZiBvdXIgb2JqZWN0cyBjb250YWluZWQgbW9yZSBpbmZvcm1hdGlvbiwgaXQgbWlnaHQgbm90IGJlIHN1ZmZpY2llbnQKK3RvIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFuZCBvdXQ6IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIG1pZ2h0IHdhbnQKK3RvIGtlZXAgcG9pbnRlcnMgdG8gdGhlc2Ugb2JqZWN0cywgZm9yIGV4YW1wbGUsIHJhdGhlciB0aGFuIGxvb2tpbmcgdXAKK3RoZSBpZCBldmVyeSB0aW1lLiAgVGhpcyBwcm9kdWNlcyB0d28gcHJvYmxlbXMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorVGhlIGZpcnN0IHByb2JsZW0gaXMgdGhhdCB3ZSB1c2UgdGhlIDxzeW1ib2w+Y2FjaGVfbG9jazwvc3ltYm9sPiB0bworcHJvdGVjdCBvYmplY3RzOiB3ZSdkIG5lZWQgdG8gbWFrZSB0aGlzIG5vbi1zdGF0aWMgc28gdGhlIHJlc3Qgb2YgdGhlCitjb2RlIGNhbiB1c2UgaXQuICBUaGlzIG1ha2VzIGxvY2tpbmcgdHJpY2tpZXIsIGFzIGl0IGlzIG5vIGxvbmdlciBhbGwKK2luIG9uZSBwbGFjZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CitUaGUgc2Vjb25kIHByb2JsZW0gaXMgdGhlIGxpZmV0aW1lIHByb2JsZW06IGlmIGFub3RoZXIgc3RydWN0dXJlIGtlZXBzCithIHBvaW50ZXIgdG8gYW4gb2JqZWN0LCBpdCBwcmVzdW1hYmx5IGV4cGVjdHMgdGhhdCBwb2ludGVyIHRvIHJlbWFpbgordmFsaWQuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG9ubHkgZ3VhcmFudGVlZCB3aGlsZSB5b3UgaG9sZCB0aGUKK2xvY2ssIG90aGVyd2lzZSBzb21lb25lIG1pZ2h0IGNhbGwgPGZ1bmN0aW9uPmNhY2hlX2RlbGV0ZTwvZnVuY3Rpb24+CithbmQgZXZlbiB3b3JzZSwgYWRkIGFub3RoZXIgb2JqZWN0LCByZS11c2luZyB0aGUgc2FtZSBhZGRyZXNzLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KK0FzIHRoZXJlIGlzIG9ubHkgb25lIGxvY2ssIHlvdSBjYW4ndCBob2xkIGl0IGZvcmV2ZXI6IG5vLW9uZSBlbHNlIHdvdWxkCitnZXQgYW55IHdvcmsgZG9uZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CitUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIHVzZSBhIHJlZmVyZW5jZSBjb3VudDogZXZlcnlvbmUgd2hvCitoYXMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgaW5jcmVhc2VzIGl0IHdoZW4gdGhleSBmaXJzdCBnZXQgdGhlCitvYmplY3QsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHdoZW4gdGhleSdyZSBmaW5pc2hlZCB3aXRoIGl0LgorV2hvZXZlciBkcm9wcyBpdCB0byB6ZXJvIGtub3dzIGl0IGlzIHVudXNlZCwgYW5kIGNhbiBhY3R1YWxseSBkZWxldGUgaXQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorSGVyZSBpcyB0aGUgY29kZToKKyAgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKy0tLSBjYWNoZS5jLmludGVycnVwdAkyMDAzLTEyLTA5IDE0OjI1OjQzLjAwMDAwMDAwMCArMTEwMAorKysrIGNhY2hlLmMucmVmY250CTIwMDMtMTItMDkgMTQ6MzM6MDUuMDAwMDAwMDAwICsxMTAwCitAQCAtNyw2ICs3LDcgQEAKKyBzdHJ1Y3Qgb2JqZWN0CisgeworICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworKyAgICAgICAgdW5zaWduZWQgaW50IHJlZmNudDsKKyAgICAgICAgIGludCBpZDsKKyAgICAgICAgIGNoYXIgbmFtZVszMl07CisgICAgICAgICBpbnQgcG9wdWxhcml0eTsKK0BAIC0xNyw2ICsxOCwzNSBAQAorIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FjaGVfbnVtID0gMDsKKyAjZGVmaW5lIE1BWF9DQUNIRV9TSVpFIDEwCisKKytzdGF0aWMgdm9pZCBfX29iamVjdF9wdXQoc3RydWN0IG9iamVjdCAqb2JqKQorK3sKKysgICAgICAgIGlmICgtLW9iai0mZ3Q7cmVmY250ID09IDApCisrICAgICAgICAgICAgICAgIGtmcmVlKG9iaik7CisrfQorKworK3N0YXRpYyB2b2lkIF9fb2JqZWN0X2dldChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisreworKyAgICAgICAgb2JqLSZndDtyZWZjbnQrKzsKKyt9CisrCisrdm9pZCBvYmplY3RfcHV0KHN0cnVjdCBvYmplY3QgKm9iaikKKyt7CisrICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworKworKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisrICAgICAgICBfX29iamVjdF9wdXQob2JqKTsKKysgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisrfQorKworK3ZvaWQgb2JqZWN0X2dldChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisreworKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKysKKysgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworKyAgICAgICAgX19vYmplY3RfZ2V0KG9iaik7CisrICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworK30KKysKKyAvKiBNdXN0IGJlIGhvbGRpbmcgY2FjaGVfbG9jayAqLworIHN0YXRpYyBzdHJ1Y3Qgb2JqZWN0ICpfX2NhY2hlX2ZpbmQoaW50IGlkKQorIHsKK0BAIC0zNSw2ICs2NSw3IEBACisgeworICAgICAgICAgQlVHX09OKCFvYmopOworICAgICAgICAgbGlzdF9kZWwoJmFtcDtvYmotJmd0O2xpc3QpOworKyAgICAgICAgX19vYmplY3RfcHV0KG9iaik7CisgICAgICAgICBjYWNoZV9udW0tLTsKKyB9CisKK0BAIC02Myw2ICs5NCw3IEBACisgICAgICAgICBzdHJsY3B5KG9iai0mZ3Q7bmFtZSwgbmFtZSwgc2l6ZW9mKG9iai0mZ3Q7bmFtZSkpOworICAgICAgICAgb2JqLSZndDtpZCA9IGlkOworICAgICAgICAgb2JqLSZndDtwb3B1bGFyaXR5ID0gMDsKKysgICAgICAgIG9iai0mZ3Q7cmVmY250ID0gMTsgLyogVGhlIGNhY2hlIGhvbGRzIGEgcmVmZXJlbmNlICovCisKKyAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgX19jYWNoZV9hZGQob2JqKTsKK0BAIC03OSwxOCArMTExLDE1IEBACisgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworIH0KKworLWludCBjYWNoZV9maW5kKGludCBpZCwgY2hhciAqbmFtZSkKKytzdHJ1Y3Qgb2JqZWN0ICpjYWNoZV9maW5kKGludCBpZCkKKyB7CisgICAgICAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmo7CistICAgICAgICBpbnQgcmV0ID0gLUVOT0VOVDsKKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworICAgICAgICAgb2JqID0gX19jYWNoZV9maW5kKGlkKTsKKy0gICAgICAgIGlmIChvYmopIHsKKy0gICAgICAgICAgICAgICAgcmV0ID0gMDsKKy0gICAgICAgICAgICAgICAgc3RyY3B5KG5hbWUsIG9iai0mZ3Q7bmFtZSk7CistICAgICAgICB9CisrICAgICAgICBpZiAob2JqKQorKyAgICAgICAgICAgICAgICBfX29iamVjdF9nZXQob2JqKTsKKyAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CistICAgICAgICByZXR1cm4gcmV0OworKyAgICAgICAgcmV0dXJuIG9iajsKKyB9Cis8L3Byb2dyYW1saXN0aW5nPgorCis8cGFyYT4KK1dlIGVuY2Fwc3VsYXRlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaW4gdGhlIHN0YW5kYXJkICdnZXQnIGFuZCAncHV0JworZnVuY3Rpb25zLiAgTm93IHdlIGNhbiByZXR1cm4gdGhlIG9iamVjdCBpdHNlbGYgZnJvbQorPGZ1bmN0aW9uPmNhY2hlX2ZpbmQ8L2Z1bmN0aW9uPiB3aGljaCBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHRoZSB1c2VyCitjYW4gbm93IHNsZWVwIGhvbGRpbmcgdGhlIG9iamVjdCAoZWcuIHRvCis8ZnVuY3Rpb24+Y29weV90b191c2VyPC9mdW5jdGlvbj4gdG8gbmFtZSB0byB1c2Vyc3BhY2UpLgorPC9wYXJhPgorPHBhcmE+CitUaGUgb3RoZXIgcG9pbnQgdG8gbm90ZSBpcyB0aGF0IEkgc2FpZCBhIHJlZmVyZW5jZSBzaG91bGQgYmUgaGVsZCBmb3IKK2V2ZXJ5IHBvaW50ZXIgdG8gdGhlIG9iamVjdDogdGh1cyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIDEgd2hlbiBmaXJzdAoraW5zZXJ0ZWQgaW50byB0aGUgY2FjaGUuICBJbiBzb21lIHZlcnNpb25zIHRoZSBmcmFtZXdvcmsgZG9lcyBub3QgaG9sZAorYSByZWZlcmVuY2UgY291bnQsIGJ1dCB0aGV5IGFyZSBtb3JlIGNvbXBsaWNhdGVkLgorPC9wYXJhPgorCisgICA8c2VjdDIgaWQ9ImV4YW1wbGVzLXJlZmNudC1hdG9taWMiPgorICAgIDx0aXRsZT5Vc2luZyBBdG9taWMgT3BlcmF0aW9ucyBGb3IgVGhlIFJlZmVyZW5jZSBDb3VudDwvdGl0bGU+Cis8cGFyYT4KK0luIHByYWN0aWNlLCA8dHlwZT5hdG9taWNfdDwvdHlwZT4gd291bGQgdXN1YWxseSBiZSB1c2VkIGZvcgorPHN0cnVjdGZpZWxkPnJlZmNudDwvc3RydWN0ZmllbGQ+LiAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGF0b21pYworb3BlcmF0aW9ucyBkZWZpbmVkIGluCisKKzxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vYXRvbWljLmg8L2ZpbGVuYW1lPjogdGhlc2UgYXJlCitndWFyYW50ZWVkIHRvIGJlIHNlZW4gYXRvbWljYWxseSBmcm9tIGFsbCBDUFVzIGluIHRoZSBzeXN0ZW0sIHNvIG5vCitsb2NrIGlzIHJlcXVpcmVkLiAgSW4gdGhpcyBjYXNlLCBpdCBpcyBzaW1wbGVyIHRoYW4gdXNpbmcgc3BpbmxvY2tzLAorYWx0aG91Z2ggZm9yIGFueXRoaW5nIG5vbi10cml2aWFsIHVzaW5nIHNwaW5sb2NrcyBpcyBjbGVhcmVyLiAgVGhlCis8ZnVuY3Rpb24+YXRvbWljX2luYzwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPmF0b21pY19kZWNfYW5kX3Rlc3Q8L2Z1bmN0aW9uPiBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQorc3RhbmRhcmQgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLCBhbmQgdGhlIGxvY2sgaXMgbm8gbG9uZ2VyCit1c2VkIHRvIHByb3RlY3QgdGhlIHJlZmVyZW5jZSBjb3VudCBpdHNlbGYuCis8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKy0tLSBjYWNoZS5jLnJlZmNudAkyMDAzLTEyLTA5IDE1OjAwOjM1LjAwMDAwMDAwMCArMTEwMAorKysrIGNhY2hlLmMucmVmY250LWF0b21pYwkyMDAzLTEyLTExIDE1OjQ5OjQyLjAwMDAwMDAwMCArMTEwMAorQEAgLTcsNyArNyw3IEBACisgc3RydWN0IG9iamVjdAorIHsKKyAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKy0gICAgICAgIHVuc2lnbmVkIGludCByZWZjbnQ7CisrICAgICAgICBhdG9taWNfdCByZWZjbnQ7CisgICAgICAgICBpbnQgaWQ7CisgICAgICAgICBjaGFyIG5hbWVbMzJdOworICAgICAgICAgaW50IHBvcHVsYXJpdHk7CitAQCAtMTgsMzMgKzE4LDE1IEBACisgc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZV9udW0gPSAwOworICNkZWZpbmUgTUFYX0NBQ0hFX1NJWkUgMTAKKworLXN0YXRpYyB2b2lkIF9fb2JqZWN0X3B1dChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisteworLSAgICAgICAgaWYgKC0tb2JqLSZndDtyZWZjbnQgPT0gMCkKKy0gICAgICAgICAgICAgICAga2ZyZWUob2JqKTsKKy19CistCistc3RhdGljIHZvaWQgX19vYmplY3RfZ2V0KHN0cnVjdCBvYmplY3QgKm9iaikKKy17CistICAgICAgICBvYmotJmd0O3JlZmNudCsrOworLX0KKy0KKyB2b2lkIG9iamVjdF9wdXQoc3RydWN0IG9iamVjdCAqb2JqKQorIHsKKy0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CistCistICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKy0gICAgICAgIF9fb2JqZWN0X3B1dChvYmopOworLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKysgICAgICAgIGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7b2JqLSZndDtyZWZjbnQpKQorKyAgICAgICAgICAgICAgICBrZnJlZShvYmopOworIH0KKworIHZvaWQgb2JqZWN0X2dldChzdHJ1Y3Qgb2JqZWN0ICpvYmopCisgeworLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKy0KKy0gICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworLSAgICAgICAgX19vYmplY3RfZ2V0KG9iaik7CistICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworKyAgICAgICAgYXRvbWljX2luYygmYW1wO29iai0mZ3Q7cmVmY250KTsKKyB9CisKKyAvKiBNdXN0IGJlIGhvbGRpbmcgY2FjaGVfbG9jayAqLworQEAgLTY1LDcgKzQ3LDcgQEAKKyB7CisgICAgICAgICBCVUdfT04oIW9iaik7CisgICAgICAgICBsaXN0X2RlbCgmYW1wO29iai0mZ3Q7bGlzdCk7CistICAgICAgICBfX29iamVjdF9wdXQob2JqKTsKKysgICAgICAgIG9iamVjdF9wdXQob2JqKTsKKyAgICAgICAgIGNhY2hlX251bS0tOworIH0KKworQEAgLTk0LDcgKzc2LDcgQEAKKyAgICAgICAgIHN0cmxjcHkob2JqLSZndDtuYW1lLCBuYW1lLCBzaXplb2Yob2JqLSZndDtuYW1lKSk7CisgICAgICAgICBvYmotJmd0O2lkID0gaWQ7CisgICAgICAgICBvYmotJmd0O3BvcHVsYXJpdHkgPSAwOworLSAgICAgICAgb2JqLSZndDtyZWZjbnQgPSAxOyAvKiBUaGUgY2FjaGUgaG9sZHMgYSByZWZlcmVuY2UgKi8KKysgICAgICAgIGF0b21pY19zZXQoJmFtcDtvYmotJmd0O3JlZmNudCwgMSk7IC8qIFRoZSBjYWNoZSBob2xkcyBhIHJlZmVyZW5jZSAqLworCisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIF9fY2FjaGVfYWRkKG9iaik7CitAQCAtMTE5LDcgKzEwMSw3IEBACisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIG9iaiA9IF9fY2FjaGVfZmluZChpZCk7CisgICAgICAgICBpZiAob2JqKQorLSAgICAgICAgICAgICAgICBfX29iamVjdF9nZXQob2JqKTsKKysgICAgICAgICAgICAgICAgb2JqZWN0X2dldChvYmopOworICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIHJldHVybiBvYmo7CisgfQorPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdDI+Cis8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9ImV4YW1wbGVzLWxvY2stcGVyLW9iaiI+CisgICAgPHRpdGxlPlByb3RlY3RpbmcgVGhlIE9iamVjdHMgVGhlbXNlbHZlczwvdGl0bGU+CisgICAgPHBhcmE+CitJbiB0aGVzZSBleGFtcGxlcywgd2UgYXNzdW1lZCB0aGF0IHRoZSBvYmplY3RzIChleGNlcHQgdGhlIHJlZmVyZW5jZQorY291bnRzKSBuZXZlciBjaGFuZ2VkIG9uY2UgdGhleSBhcmUgY3JlYXRlZC4gIElmIHdlIHdhbnRlZCB0byBhbGxvdwordGhlIG5hbWUgdG8gY2hhbmdlLCB0aGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllczoKKyAgICA8L3BhcmE+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgIDxsaXN0aXRlbT4KKwk8cGFyYT4KK1lvdSBjYW4gbWFrZSA8c3ltYm9sPmNhY2hlX2xvY2s8L3N5bWJvbD4gbm9uLXN0YXRpYywgYW5kIHRlbGwgcGVvcGxlCit0byBncmFiIHRoYXQgbG9jayBiZWZvcmUgY2hhbmdpbmcgdGhlIG5hbWUgaW4gYW55IG9iamVjdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CitZb3UgY2FuIHByb3ZpZGUgYSA8ZnVuY3Rpb24+Y2FjaGVfb2JqX3JlbmFtZTwvZnVuY3Rpb24+IHdoaWNoIGdyYWJzCit0aGlzIGxvY2sgYW5kIGNoYW5nZXMgdGhlIG5hbWUgZm9yIHRoZSBjYWxsZXIsIGFuZCB0ZWxsIGV2ZXJ5b25lIHRvCit1c2UgdGhhdCBmdW5jdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CitZb3UgY2FuIG1ha2UgdGhlIDxzeW1ib2w+Y2FjaGVfbG9jazwvc3ltYm9sPiBwcm90ZWN0IG9ubHkgdGhlIGNhY2hlCitpdHNlbGYsIGFuZCB1c2UgYW5vdGhlciBsb2NrIHRvIHByb3RlY3QgdGhlIG5hbWUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgIDxwYXJhPgorVGhlb3JldGljYWxseSwgeW91IGNhbiBtYWtlIHRoZSBsb2NrcyBhcyBmaW5lLWdyYWluZWQgYXMgb25lIGxvY2sgZm9yCitldmVyeSBmaWVsZCwgZm9yIGV2ZXJ5IG9iamVjdC4gIEluIHByYWN0aWNlLCB0aGUgbW9zdCBjb21tb24gdmFyaWFudHMKK2FyZToKKzwvcGFyYT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgPGxpc3RpdGVtPgorCTxwYXJhPgorT25lIGxvY2sgd2hpY2ggcHJvdGVjdHMgdGhlIGluZnJhc3RydWN0dXJlICh0aGUgPHN5bWJvbD5jYWNoZTwvc3ltYm9sPgorbGlzdCBpbiB0aGlzIGV4YW1wbGUpIGFuZCBhbGwgdGhlIG9iamVjdHMuICBUaGlzIGlzIHdoYXQgd2UgaGF2ZSBkb25lCitzbyBmYXIuCisJPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CitPbmUgbG9jayB3aGljaCBwcm90ZWN0cyB0aGUgaW5mcmFzdHJ1Y3R1cmUgKGluY2x1ZGluZyB0aGUgbGlzdAorcG9pbnRlcnMgaW5zaWRlIHRoZSBvYmplY3RzKSwgYW5kIG9uZSBsb2NrIGluc2lkZSB0aGUgb2JqZWN0IHdoaWNoCitwcm90ZWN0cyB0aGUgcmVzdCBvZiB0aGF0IG9iamVjdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CitNdWx0aXBsZSBsb2NrcyB0byBwcm90ZWN0IHRoZSBpbmZyYXN0cnVjdHVyZSAoZWcuIG9uZSBsb2NrIHBlciBoYXNoCitjaGFpbiksIHBvc3NpYmx5IHdpdGggYSBzZXBhcmF0ZSBwZXItb2JqZWN0IGxvY2suCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisKKzxwYXJhPgorSGVyZSBpcyB0aGUgImxvY2stcGVyLW9iamVjdCIgaW1wbGVtZW50YXRpb246Cis8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CistLS0gY2FjaGUuYy5yZWZjbnQtYXRvbWljCTIwMDMtMTItMTEgMTU6NTA6NTQuMDAwMDAwMDAwICsxMTAwCisrKysgY2FjaGUuYy5wZXJvYmplY3Rsb2NrCTIwMDMtMTItMTEgMTc6MTU6MDMuMDAwMDAwMDAwICsxMTAwCitAQCAtNiwxMSArNiwxNyBAQAorCisgc3RydWN0IG9iamVjdAorIHsKKysgICAgICAgIC8qIFRoZXNlIHR3byBwcm90ZWN0ZWQgYnkgY2FjaGVfbG9jay4gKi8KKyAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKysgICAgICAgIGludCBwb3B1bGFyaXR5OworKworICAgICAgICAgYXRvbWljX3QgcmVmY250OworKworKyAgICAgICAgLyogRG9lc24ndCBjaGFuZ2Ugb25jZSBjcmVhdGVkLiAqLworICAgICAgICAgaW50IGlkOworKworKyAgICAgICAgc3BpbmxvY2tfdCBsb2NrOyAvKiBQcm90ZWN0cyB0aGUgbmFtZSAqLworICAgICAgICAgY2hhciBuYW1lWzMyXTsKKy0gICAgICAgIGludCBwb3B1bGFyaXR5OworIH07CisKKyBzdGF0aWMgc3BpbmxvY2tfdCBjYWNoZV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworQEAgLTc3LDYgKzg0LDcgQEAKKyAgICAgICAgIG9iai0mZ3Q7aWQgPSBpZDsKKyAgICAgICAgIG9iai0mZ3Q7cG9wdWxhcml0eSA9IDA7CisgICAgICAgICBhdG9taWNfc2V0KCZhbXA7b2JqLSZndDtyZWZjbnQsIDEpOyAvKiBUaGUgY2FjaGUgaG9sZHMgYSByZWZlcmVuY2UgKi8KKysgICAgICAgIHNwaW5fbG9ja19pbml0KCZhbXA7b2JqLSZndDtsb2NrKTsKKworICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjYWNoZV9sb2NrLCBmbGFncyk7CisgICAgICAgICBfX2NhY2hlX2FkZChvYmopOworPC9wcm9ncmFtbGlzdGluZz4KKworPHBhcmE+CitOb3RlIHRoYXQgSSBkZWNpZGUgdGhhdCB0aGUgPHN0cnVjdGZpZWxkPnBvcHVsYXJpdHk8L3N0cnVjdGZpZWxkPgorY291bnQgc2hvdWxkIGJlIHByb3RlY3RlZCBieSB0aGUgPHN5bWJvbD5jYWNoZV9sb2NrPC9zeW1ib2w+IHJhdGhlcgordGhhbiB0aGUgcGVyLW9iamVjdCBsb2NrOiB0aGlzIGlzIGJlY2F1c2UgaXQgKGxpa2UgdGhlCis8c3RydWN0bmFtZT5zdHJ1Y3QgbGlzdF9oZWFkPC9zdHJ1Y3RuYW1lPiBpbnNpZGUgdGhlIG9iamVjdCkgaXMKK2xvZ2ljYWxseSBwYXJ0IG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4gIFRoaXMgd2F5LCBJIGRvbid0IG5lZWQgdG8gZ3JhYgordGhlIGxvY2sgb2YgZXZlcnkgb2JqZWN0IGluIDxmdW5jdGlvbj5fX2NhY2hlX2FkZDwvZnVuY3Rpb24+IHdoZW4KK3NlZWtpbmcgdGhlIGxlYXN0IHBvcHVsYXIuCis8L3BhcmE+CisKKzxwYXJhPgorSSBhbHNvIGRlY2lkZWQgdGhhdCB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIGlzCit1bmNoYW5nZWFibGUsIHNvIEkgZG9uJ3QgbmVlZCB0byBncmFiIGVhY2ggb2JqZWN0IGxvY2sgaW4KKzxmdW5jdGlvbj5fX2NhY2hlX2ZpbmQoKTwvZnVuY3Rpb24+IHRvIGV4YW1pbmUgdGhlCis8c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPjogdGhlIG9iamVjdCBsb2NrIGlzIG9ubHkgdXNlZCBieSBhCitjYWxsZXIgd2hvIHdhbnRzIHRvIHJlYWQgb3Igd3JpdGUgdGhlIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkLgorPC9wYXJhPgorCis8cGFyYT4KK05vdGUgYWxzbyB0aGF0IEkgYWRkZWQgYSBjb21tZW50IGRlc2NyaWJpbmcgd2hhdCBkYXRhIHdhcyBwcm90ZWN0ZWQgYnkKK3doaWNoIGxvY2tzLiAgVGhpcyBpcyBleHRyZW1lbHkgaW1wb3J0YW50LCBhcyBpdCBkZXNjcmliZXMgdGhlIHJ1bnRpbWUKK2JlaGF2aW9yIG9mIHRoZSBjb2RlLCBhbmQgY2FuIGJlIGhhcmQgdG8gZ2FpbiBmcm9tIGp1c3QgcmVhZGluZy4gIEFuZAorYXMgQWxhbiBDb3ggc2F5cywgPHF1b3RlPkxvY2sgZGF0YSwgbm90IGNvZGU8L3F1b3RlPi4KKzwvcGFyYT4KKzwvc2VjdDE+Cis8L2NoYXB0ZXI+CisKKyAgIDxjaGFwdGVyIGlkPSJjb21tb24tcHJvYmxlbXMiPgorICAgIDx0aXRsZT5Db21tb24gUHJvYmxlbXM8L3RpdGxlPgorICAgIDxzZWN0MSBpZD0iZGVhZGxvY2siPgorICAgIDx0aXRsZT5EZWFkbG9jazogU2ltcGxlIGFuZCBBZHZhbmNlZDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGlzIGEgY29kaW5nIGJ1ZyB3aGVyZSBhIHBpZWNlIG9mIGNvZGUgdHJpZXMgdG8gZ3JhYiBhCisgICAgICBzcGlubG9jayB0d2ljZTogaXQgd2lsbCBzcGluIGZvcmV2ZXIsIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvCisgICAgICBiZSByZWxlYXNlZCAoc3BpbmxvY2tzLCByd2xvY2tzIGFuZCBzZW1hcGhvcmVzIGFyZSBub3QKKyAgICAgIHJlY3Vyc2l2ZSBpbiBMaW51eCkuICBUaGlzIGlzIHRyaXZpYWwgdG8gZGlhZ25vc2U6IG5vdCBhCisgICAgICBzdGF5LXVwLWZpdmUtbmlnaHRzLXRhbGstdG8tZmx1ZmZ5LWNvZGUtYnVubmllcyBraW5kIG9mCisgICAgICBwcm9ibGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRm9yIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IGNhc2UsIGltYWdpbmUgeW91IGhhdmUgYSByZWdpb24KKyAgICAgIHNoYXJlZCBieSBhIHNvZnRpcnEgYW5kIHVzZXIgY29udGV4dC4gIElmIHlvdSB1c2UgYQorICAgICAgPGZ1bmN0aW9uPnNwaW5fbG9jaygpPC9mdW5jdGlvbj4gY2FsbCB0byBwcm90ZWN0IGl0LCBpdCBpcyAKKyAgICAgIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgY29udGV4dCB3aWxsIGJlIGludGVycnVwdGVkIGJ5IHRoZSBzb2Z0aXJxCisgICAgICB3aGlsZSBpdCBob2xkcyB0aGUgbG9jaywgYW5kIHRoZSBzb2Z0aXJxIHdpbGwgdGhlbiBzcGluCisgICAgICBmb3JldmVyIHRyeWluZyB0byBnZXQgdGhlIHNhbWUgbG9jay4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEJvdGggb2YgdGhlc2UgYXJlIGNhbGxlZCBkZWFkbG9jaywgYW5kIGFzIHNob3duIGFib3ZlLCBpdCBjYW4KKyAgICAgIG9jY3VyIGV2ZW4gd2l0aCBhIHNpbmdsZSBDUFUgKGFsdGhvdWdoIG5vdCBvbiBVUCBjb21waWxlcywKKyAgICAgIHNpbmNlIHNwaW5sb2NrcyB2YW5pc2ggb24ga2VybmVsIGNvbXBpbGVzIHdpdGggCisgICAgICA8c3ltYm9sPkNPTkZJR19TTVA8L3N5bWJvbD49bi4gWW91J2xsIHN0aWxsIGdldCBkYXRhIGNvcnJ1cHRpb24gCisgICAgICBpbiB0aGUgc2Vjb25kIGV4YW1wbGUpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhpcyBjb21wbGV0ZSBsb2NrdXAgaXMgZWFzeSB0byBkaWFnbm9zZTogb24gU01QIGJveGVzIHRoZQorICAgICAgd2F0Y2hkb2cgdGltZXIgb3IgY29tcGlsaW5nIHdpdGggPHN5bWJvbD5ERUJVR19TUElOTE9DS1M8L3N5bWJvbD4gc2V0CisgICAgICAoPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvc3BpbmxvY2suaDwvZmlsZW5hbWU+KSB3aWxsIHNob3cgdGhpcyB1cCAKKyAgICAgIGltbWVkaWF0ZWx5IHdoZW4gaXQgaGFwcGVucy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEEgbW9yZSBjb21wbGV4IHByb2JsZW0gaXMgdGhlIHNvLWNhbGxlZCAnZGVhZGx5IGVtYnJhY2UnLAorICAgICAgaW52b2x2aW5nIHR3byBvciBtb3JlIGxvY2tzLiAgU2F5IHlvdSBoYXZlIGEgaGFzaCB0YWJsZTogZWFjaAorICAgICAgZW50cnkgaW4gdGhlIHRhYmxlIGlzIGEgc3BpbmxvY2ssIGFuZCBhIGNoYWluIG9mIGhhc2hlZAorICAgICAgb2JqZWN0cy4gIEluc2lkZSBhIHNvZnRpcnEgaGFuZGxlciwgeW91IHNvbWV0aW1lcyB3YW50IHRvCisgICAgICBhbHRlciBhbiBvYmplY3QgZnJvbSBvbmUgcGxhY2UgaW4gdGhlIGhhc2ggdG8gYW5vdGhlcjogeW91CisgICAgICBncmFiIHRoZSBzcGlubG9jayBvZiB0aGUgb2xkIGhhc2ggY2hhaW4gYW5kIHRoZSBzcGlubG9jayBvZgorICAgICAgdGhlIG5ldyBoYXNoIGNoYWluLCBhbmQgZGVsZXRlIHRoZSBvYmplY3QgZnJvbSB0aGUgb2xkIG9uZSwKKyAgICAgIGFuZCBpbnNlcnQgaXQgaW4gdGhlIG5ldyBvbmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGVyZSBhcmUgdHdvIHByb2JsZW1zIGhlcmUuICBGaXJzdCwgaWYgeW91ciBjb2RlIGV2ZXIKKyAgICAgIHRyaWVzIHRvIG1vdmUgdGhlIG9iamVjdCB0byB0aGUgc2FtZSBjaGFpbiwgaXQgd2lsbCBkZWFkbG9jaworICAgICAgd2l0aCBpdHNlbGYgYXMgaXQgdHJpZXMgdG8gbG9jayBpdCB0d2ljZS4gIFNlY29uZGx5LCBpZiB0aGUKKyAgICAgIHNhbWUgc29mdGlycSBvbiBhbm90aGVyIENQVSBpcyB0cnlpbmcgdG8gbW92ZSBhbm90aGVyIG9iamVjdAorICAgICAgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLCB0aGUgZm9sbG93aW5nIGNvdWxkIGhhcHBlbjoKKyAgICA8L3BhcmE+CisKKyAgICA8dGFibGU+CisgICAgIDx0aXRsZT5Db25zZXF1ZW5jZXM8L3RpdGxlPgorCisgICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorCisgICAgICA8dGhlYWQ+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PkNQVSAxPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PkNQVSAyPC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisKKyAgICAgIDx0Ym9keT4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+R3JhYiBsb2NrIEEgLSZndDsgT0s8L2VudHJ5PgorICAgICAgICA8ZW50cnk+R3JhYiBsb2NrIEIgLSZndDsgT0s8L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5HcmFiIGxvY2sgQiAtJmd0OyBzcGluPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5PkdyYWIgbG9jayBBIC0mZ3Q7IHNwaW48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgPC90Ym9keT4KKyAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIHR3byBDUFVzIHdpbGwgc3BpbiBmb3JldmVyLCB3YWl0aW5nIGZvciB0aGUgb3RoZXIgdG8gZ2l2ZSB1cAorICAgICAgdGhlaXIgbG9jay4gIEl0IHdpbGwgbG9vaywgc21lbGwsIGFuZCBmZWVsIGxpa2UgYSBjcmFzaC4KKyAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MSBpZD0idGVjaHMtZGVhZGxvY2stcHJldmVudCI+CisgICAgIDx0aXRsZT5QcmV2ZW50aW5nIERlYWRsb2NrPC90aXRsZT4KKworICAgICA8cGFyYT4KKyAgICAgICBUZXh0Ym9va3Mgd2lsbCB0ZWxsIHlvdSB0aGF0IGlmIHlvdSBhbHdheXMgbG9jayBpbiB0aGUgc2FtZQorICAgICAgIG9yZGVyLCB5b3Ugd2lsbCBuZXZlciBnZXQgdGhpcyBraW5kIG9mIGRlYWRsb2NrLiAgUHJhY3RpY2UKKyAgICAgICB3aWxsIHRlbGwgeW91IHRoYXQgdGhpcyBhcHByb2FjaCBkb2Vzbid0IHNjYWxlOiB3aGVuIEkKKyAgICAgICBjcmVhdGUgYSBuZXcgbG9jaywgSSBkb24ndCB1bmRlcnN0YW5kIGVub3VnaCBvZiB0aGUga2VybmVsCisgICAgICAgdG8gZmlndXJlIG91dCB3aGVyZSBpbiB0aGUgNTAwMCBsb2NrIGhpZXJhcmNoeSBpdCB3aWxsIGZpdC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIFRoZSBiZXN0IGxvY2tzIGFyZSBlbmNhcHN1bGF0ZWQ6IHRoZXkgbmV2ZXIgZ2V0IGV4cG9zZWQgaW4KKyAgICAgICBoZWFkZXJzLCBhbmQgYXJlIG5ldmVyIGhlbGQgYXJvdW5kIGNhbGxzIHRvIG5vbi10cml2aWFsCisgICAgICAgZnVuY3Rpb25zIG91dHNpZGUgdGhlIHNhbWUgZmlsZS4gIFlvdSBjYW4gcmVhZCB0aHJvdWdoIHRoaXMKKyAgICAgICBjb2RlIGFuZCBzZWUgdGhhdCBpdCB3aWxsIG5ldmVyIGRlYWRsb2NrLCBiZWNhdXNlIGl0IG5ldmVyCisgICAgICAgdHJpZXMgdG8gZ3JhYiBhbm90aGVyIGxvY2sgd2hpbGUgaXQgaGFzIHRoYXQgb25lLiAgUGVvcGxlCisgICAgICAgdXNpbmcgeW91ciBjb2RlIGRvbid0IGV2ZW4gbmVlZCB0byBrbm93IHlvdSBhcmUgdXNpbmcgYQorICAgICAgIGxvY2suCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgICBBIGNsYXNzaWMgcHJvYmxlbSBoZXJlIGlzIHdoZW4geW91IHByb3ZpZGUgY2FsbGJhY2tzIG9yCisgICAgICAgaG9va3M6IGlmIHlvdSBjYWxsIHRoZXNlIHdpdGggdGhlIGxvY2sgaGVsZCwgeW91IHJpc2sgc2ltcGxlCisgICAgICAgZGVhZGxvY2ssIG9yIGEgZGVhZGx5IGVtYnJhY2UgKHdobyBrbm93cyB3aGF0IHRoZSBjYWxsYmFjaworICAgICAgIHdpbGwgZG8/KS4gIFJlbWVtYmVyLCB0aGUgb3RoZXIgcHJvZ3JhbW1lcnMgYXJlIG91dCB0byBnZXQKKyAgICAgICB5b3UsIHNvIGRvbid0IGRvIHRoaXMuCisgICAgIDwvcGFyYT4KKworICAgIDxzZWN0MiBpZD0idGVjaHMtZGVhZGxvY2stb3ZlcnByZXZlbnQiPgorICAgICA8dGl0bGU+T3ZlcnplYWxvdXMgUHJldmVudGlvbiBPZiBEZWFkbG9ja3M8L3RpdGxlPgorCisgICAgIDxwYXJhPgorICAgICAgIERlYWRsb2NrcyBhcmUgcHJvYmxlbWF0aWMsIGJ1dCBub3QgYXMgYmFkIGFzIGRhdGEKKyAgICAgICBjb3JydXB0aW9uLiAgQ29kZSB3aGljaCBncmFicyBhIHJlYWQgbG9jaywgc2VhcmNoZXMgYSBsaXN0LAorICAgICAgIGZhaWxzIHRvIGZpbmQgd2hhdCBpdCB3YW50cywgZHJvcHMgdGhlIHJlYWQgbG9jaywgZ3JhYnMgYQorICAgICAgIHdyaXRlIGxvY2sgYW5kIGluc2VydHMgdGhlIG9iamVjdCBoYXMgYSByYWNlIGNvbmRpdGlvbi4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgIElmIHlvdSBkb24ndCBzZWUgd2h5LCBwbGVhc2Ugc3RheSB0aGUgZnVjayBhd2F5IGZyb20gbXkgY29kZS4KKyAgICAgPC9wYXJhPgorICAgIDwvc2VjdDI+CisgICAgPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJyYWNpbmctdGltZXJzIj4KKyAgICA8dGl0bGU+UmFjaW5nIFRpbWVyczogQSBLZXJuZWwgUGFzdGltZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRpbWVycyBjYW4gcHJvZHVjZSB0aGVpciBvd24gc3BlY2lhbCBwcm9ibGVtcyB3aXRoIHJhY2VzLgorICAgICAgQ29uc2lkZXIgYSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgKGxpc3QsIGhhc2gsIGV0Yykgd2hlcmUgZWFjaAorICAgICAgb2JqZWN0IGhhcyBhIHRpbWVyIHdoaWNoIGlzIGR1ZSB0byBkZXN0cm95IGl0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IHdhbnQgdG8gZGVzdHJveSB0aGUgZW50aXJlIGNvbGxlY3Rpb24gKHNheSBvbiBtb2R1bGUKKyAgICAgIHJlbW92YWwpLCB5b3UgbWlnaHQgZG8gdGhlIGZvbGxvd2luZzoKKyAgICA8L3BhcmE+CisKKyAgICA8cHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIC8qIFRISVMgQ09ERSBCQUQgQkFEIEJBRCBCQUQ6IElGIElUIFdBUyBBTlkgV09SU0UgSVQgV09VTEQgVVNFCisgICAgICAgICAgIEhVTkdBUklBTiBOT1RBVElPTiAqLworICAgICAgICBzcGluX2xvY2tfYmgoJmFtcDtsaXN0X2xvY2spOworCisgICAgICAgIHdoaWxlIChsaXN0KSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGZvbyAqbmV4dCA9IGxpc3QtJmd0O25leHQ7CisgICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZhbXA7bGlzdC0mZ3Q7dGltZXIpOworICAgICAgICAgICAgICAgIGtmcmVlKGxpc3QpOworICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgc3Bpbl91bmxvY2tfYmgoJmFtcDtsaXN0X2xvY2spOworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIFNvb25lciBvciBsYXRlciwgdGhpcyB3aWxsIGNyYXNoIG9uIFNNUCwgYmVjYXVzZSBhIHRpbWVyIGNhbgorICAgICAgaGF2ZSBqdXN0IGdvbmUgb2ZmIGJlZm9yZSB0aGUgPGZ1bmN0aW9uPnNwaW5fbG9ja19iaCgpPC9mdW5jdGlvbj4sCisgICAgICBhbmQgaXQgd2lsbCBvbmx5IGdldCB0aGUgbG9jayBhZnRlciB3ZQorICAgICAgPGZ1bmN0aW9uPnNwaW5fdW5sb2NrX2JoKCk8L2Z1bmN0aW9uPiwgYW5kIHRoZW4gdHJ5IHRvIGZyZWUKKyAgICAgIHRoZSBlbGVtZW50ICh3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGZyZWVkISkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGNhbiBiZSBhdm9pZGVkIGJ5IGNoZWNraW5nIHRoZSByZXN1bHQgb2YKKyAgICAgIDxmdW5jdGlvbj5kZWxfdGltZXIoKTwvZnVuY3Rpb24+OiBpZiBpdCByZXR1cm5zCisgICAgICA8cmV0dXJudmFsdWU+MTwvcmV0dXJudmFsdWU+LCB0aGUgdGltZXIgaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgIElmIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4sIGl0IG1lYW5zIChpbiB0aGlzCisgICAgICBjYXNlKSB0aGF0IGl0IGlzIGN1cnJlbnRseSBydW5uaW5nLCBzbyB3ZSBjYW4gZG86CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorICAgICAgICByZXRyeToKKyAgICAgICAgICAgICAgICBzcGluX2xvY2tfYmgoJmFtcDtsaXN0X2xvY2spOworCisgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmb28gKm5leHQgPSBsaXN0LSZndDtuZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWxfdGltZXIoJmFtcDtsaXN0LSZndDt0aW1lcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2l2ZSB0aW1lciBhIGNoYW5jZSB0byBkZWxldGUgdGhpcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19iaCgmYW1wO2xpc3RfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShsaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBuZXh0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2JoKCZhbXA7bGlzdF9sb2NrKTsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgPHBhcmE+CisgICAgICBBbm90aGVyIGNvbW1vbiBwcm9ibGVtIGlzIGRlbGV0aW5nIHRpbWVycyB3aGljaCByZXN0YXJ0CisgICAgICB0aGVtc2VsdmVzIChieSBjYWxsaW5nIDxmdW5jdGlvbj5hZGRfdGltZXIoKTwvZnVuY3Rpb24+IGF0IHRoZSBlbmQKKyAgICAgIG9mIHRoZWlyIHRpbWVyIGZ1bmN0aW9uKS4gIEJlY2F1c2UgdGhpcyBpcyBhIGZhaXJseSBjb21tb24gY2FzZQorICAgICAgd2hpY2ggaXMgcHJvbmUgdG8gcmFjZXMsIHlvdSBzaG91bGQgdXNlIDxmdW5jdGlvbj5kZWxfdGltZXJfc3luYygpPC9mdW5jdGlvbj4KKyAgICAgICg8ZmlsZW5hbWUgY2xhc3M9ImhlYWRlcmZpbGUiPmluY2x1ZGUvbGludXgvdGltZXIuaDwvZmlsZW5hbWU+KQorICAgICAgdG8gaGFuZGxlIHRoaXMgY2FzZS4gIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgdGltZXIKKyAgICAgIGhhZCB0byBiZSBkZWxldGVkIGJlZm9yZSB3ZSBmaW5hbGx5IHN0b3BwZWQgaXQgZnJvbSBhZGRpbmcgaXRzZWxmIGJhY2sKKyAgICAgIGluLgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgPC9jaGFwdGVyPgorCisgPGNoYXB0ZXIgaWQ9IkVmZmljaWVuY3kiPgorICAgIDx0aXRsZT5Mb2NraW5nIFNwZWVkPC90aXRsZT4KKworICAgIDxwYXJhPgorVGhlcmUgYXJlIHRocmVlIG1haW4gdGhpbmdzIHRvIHdvcnJ5IGFib3V0IHdoZW4gY29uc2lkZXJpbmcgc3BlZWQgb2YKK3NvbWUgY29kZSB3aGljaCBkb2VzIGxvY2tpbmcuICBGaXJzdCBpcyBjb25jdXJyZW5jeTogaG93IG1hbnkgdGhpbmdzCithcmUgZ29pbmcgdG8gYmUgd2FpdGluZyB3aGlsZSBzb21lb25lIGVsc2UgaXMgaG9sZGluZyBhIGxvY2suICBTZWNvbmQKK2lzIHRoZSB0aW1lIHRha2VuIHRvIGFjdHVhbGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgYW4gdW5jb250ZW5kZWQgbG9jay4KK1RoaXJkIGlzIHVzaW5nIGZld2VyLCBvciBzbWFydGVyIGxvY2tzLiAgSSdtIGFzc3VtaW5nIHRoYXQgdGhlIGxvY2sgaXMKK3VzZWQgZmFpcmx5IG9mdGVuOiBvdGhlcndpc2UsIHlvdSB3b3VsZG4ndCBiZSBjb25jZXJuZWQgYWJvdXQKK2VmZmljaWVuY3kuCis8L3BhcmE+CisgICAgPHBhcmE+CitDb25jdXJyZW5jeSBkZXBlbmRzIG9uIGhvdyBsb25nIHRoZSBsb2NrIGlzIHVzdWFsbHkgaGVsZDogeW91IHNob3VsZAoraG9sZCB0aGUgbG9jayBmb3IgYXMgbG9uZyBhcyBuZWVkZWQsIGJ1dCBubyBsb25nZXIuICBJbiB0aGUgY2FjaGUKK2V4YW1wbGUsIHdlIGFsd2F5cyBjcmVhdGUgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBsb2NrIGhlbGQsIGFuZCB0aGVuCitncmFiIHRoZSBsb2NrIG9ubHkgd2hlbiB3ZSBhcmUgcmVhZHkgdG8gaW5zZXJ0IGl0IGluIHRoZSBsaXN0LgorPC9wYXJhPgorICAgIDxwYXJhPgorQWNxdWlzaXRpb24gdGltZXMgZGVwZW5kIG9uIGhvdyBtdWNoIGRhbWFnZSB0aGUgbG9jayBvcGVyYXRpb25zIGRvIHRvCit0aGUgcGlwZWxpbmUgKHBpcGVsaW5lIHN0YWxscykgYW5kIGhvdyBsaWtlbHkgaXQgaXMgdGhhdCB0aGlzIENQVSB3YXMKK3RoZSBsYXN0IG9uZSB0byBncmFiIHRoZSBsb2NrIChpZS4gaXMgdGhlIGxvY2sgY2FjaGUtaG90IGZvciB0aGlzCitDUFUpOiBvbiBhIG1hY2hpbmUgd2l0aCBtb3JlIENQVXMsIHRoaXMgbGlrZWxpaG9vZCBkcm9wcyBmYXN0LgorQ29uc2lkZXIgYSA3MDBNSHogSW50ZWwgUGVudGl1bSBJSUk6IGFuIGluc3RydWN0aW9uIHRha2VzIGFib3V0IDAuN25zLAorYW4gYXRvbWljIGluY3JlbWVudCB0YWtlcyBhYm91dCA1OG5zLCBhIGxvY2sgd2hpY2ggaXMgY2FjaGUtaG90IG9uCit0aGlzIENQVSB0YWtlcyAxNjBucywgYW5kIGEgY2FjaGVsaW5lIHRyYW5zZmVyIGZyb20gYW5vdGhlciBDUFUgdGFrZXMKK2FuIGFkZGl0aW9uYWwgMTcwIHRvIDM2MG5zLiAgKFRoZXNlIGZpZ3VyZXMgZnJvbSBQYXVsIE1jS2VubmV5J3MKKzx1bGluayB1cmw9Imh0dHA6Ly93d3cubGludXhqb3VybmFsLmNvbS9hcnRpY2xlLnBocD9zaWQ9Njk5MyI+IExpbnV4CitKb3VybmFsIFJDVSBhcnRpY2xlPC91bGluaz4pLgorPC9wYXJhPgorICAgIDxwYXJhPgorVGhlc2UgdHdvIGFpbXMgY29uZmxpY3Q6IGhvbGRpbmcgYSBsb2NrIGZvciBhIHNob3J0IHRpbWUgbWlnaHQgYmUgZG9uZQorYnkgc3BsaXR0aW5nIGxvY2tzIGludG8gcGFydHMgKHN1Y2ggYXMgaW4gb3VyIGZpbmFsIHBlci1vYmplY3QtbG9jaworZXhhbXBsZSksIGJ1dCB0aGlzIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGxvY2sgYWNxdWlzaXRpb25zLCBhbmQgdGhlCityZXN1bHRzIGFyZSBvZnRlbiBzbG93ZXIgdGhhbiBoYXZpbmcgYSBzaW5nbGUgbG9jay4gIFRoaXMgaXMgYW5vdGhlcgorcmVhc29uIHRvIGFkdm9jYXRlIGxvY2tpbmcgc2ltcGxpY2l0eS4KKzwvcGFyYT4KKyAgICA8cGFyYT4KK1RoZSB0aGlyZCBjb25jZXJuIGlzIGFkZHJlc3NlZCBiZWxvdzogdGhlcmUgYXJlIHNvbWUgbWV0aG9kcyB0byByZWR1Y2UKK3RoZSBhbW91bnQgb2YgbG9ja2luZyB3aGljaCBuZWVkcyB0byBiZSBkb25lLgorPC9wYXJhPgorCisgIDxzZWN0MSBpZD0iZWZmaWNpZW5jeS1yd2xvY2tzIj4KKyAgIDx0aXRsZT5SZWFkL1dyaXRlIExvY2sgVmFyaWFudHM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICAgIEJvdGggc3BpbmxvY2tzIGFuZCBzZW1hcGhvcmVzIGhhdmUgcmVhZC93cml0ZSB2YXJpYW50czoKKyAgICAgIDx0eXBlPnJ3bG9ja190PC90eXBlPiBhbmQgPHN0cnVjdG5hbWU+c3RydWN0IHJ3X3NlbWFwaG9yZTwvc3RydWN0bmFtZT4uCisgICAgICBUaGVzZSBkaXZpZGUgdXNlcnMgaW50byB0d28gY2xhc3NlczogdGhlIHJlYWRlcnMgYW5kIHRoZSB3cml0ZXJzLiAgSWYKKyAgICAgIHlvdSBhcmUgb25seSByZWFkaW5nIHRoZSBkYXRhLCB5b3UgY2FuIGdldCBhIHJlYWQgbG9jaywgYnV0IHRvIHdyaXRlIHRvCisgICAgICB0aGUgZGF0YSB5b3UgbmVlZCB0aGUgd3JpdGUgbG9jay4gIE1hbnkgcGVvcGxlIGNhbiBob2xkIGEgcmVhZCBsb2NrLAorICAgICAgYnV0IGEgd3JpdGVyIG11c3QgYmUgc29sZSBob2xkZXIuCisgICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgIElmIHlvdXIgY29kZSBkaXZpZGVzIG5lYXRseSBhbG9uZyByZWFkZXIvd3JpdGVyIGxpbmVzIChhcyBvdXIKKyAgICAgIGNhY2hlIGNvZGUgZG9lcyksIGFuZCB0aGUgbG9jayBpcyBoZWxkIGJ5IHJlYWRlcnMgZm9yCisgICAgICBzaWduaWZpY2FudCBsZW5ndGhzIG9mIHRpbWUsIHVzaW5nIHRoZXNlIGxvY2tzIGNhbiBoZWxwLiAgVGhleQorICAgICAgYXJlIHNsaWdodGx5IHNsb3dlciB0aGFuIHRoZSBub3JtYWwgbG9ja3MgdGhvdWdoLCBzbyBpbiBwcmFjdGljZQorICAgICAgPHR5cGU+cndsb2NrX3Q8L3R5cGU+IGlzIG5vdCB1c3VhbGx5IHdvcnRod2hpbGUuCisgICAgPC9wYXJhPgorICAgPC9zZWN0MT4KKworICAgPHNlY3QxIGlkPSJlZmZpY2llbmN5LXJlYWQtY29weS11cGRhdGUiPgorICAgIDx0aXRsZT5Bdm9pZGluZyBMb2NrczogUmVhZCBDb3B5IFVwZGF0ZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGlzIGEgc3BlY2lhbCBtZXRob2Qgb2YgcmVhZC93cml0ZSBsb2NraW5nIGNhbGxlZCBSZWFkIENvcHkKKyAgICAgIFVwZGF0ZS4gIFVzaW5nIFJDVSwgdGhlIHJlYWRlcnMgY2FuIGF2b2lkIHRha2luZyBhIGxvY2sKKyAgICAgIGFsdG9nZXRoZXI6IGFzIHdlIGV4cGVjdCBvdXIgY2FjaGUgdG8gYmUgcmVhZCBtb3JlIG9mdGVuIHRoYW4KKyAgICAgIHVwZGF0ZWQgKG90aGVyd2lzZSB0aGUgY2FjaGUgaXMgYSB3YXN0ZSBvZiB0aW1lKSwgaXQgaXMgYQorICAgICAgY2FuZGlkYXRlIGZvciB0aGlzIG9wdGltaXphdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEhvdyBkbyB3ZSBnZXQgcmlkIG9mIHJlYWQgbG9ja3M/ICBHZXR0aW5nIHJpZCBvZiByZWFkIGxvY2tzCisgICAgICBtZWFucyB0aGF0IHdyaXRlcnMgbWF5IGJlIGNoYW5naW5nIHRoZSBsaXN0IHVuZGVybmVhdGggdGhlCisgICAgICByZWFkZXJzLiAgVGhhdCBpcyBhY3R1YWxseSBxdWl0ZSBzaW1wbGU6IHdlIGNhbiByZWFkIGEgbGlua2VkCisgICAgICBsaXN0IHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgYWRkZWQgaWYgdGhlIHdyaXRlciBhZGRzIHRoZQorICAgICAgZWxlbWVudCB2ZXJ5IGNhcmVmdWxseS4gIEZvciBleGFtcGxlLCBhZGRpbmcKKyAgICAgIDxzeW1ib2w+bmV3PC9zeW1ib2w+IHRvIGEgc2luZ2xlIGxpbmtlZCBsaXN0IGNhbGxlZAorICAgICAgPHN5bWJvbD5saXN0PC9zeW1ib2w+OgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KKyAgICAgICAgbmV3LSZndDtuZXh0ID0gbGlzdC0mZ3Q7bmV4dDsKKyAgICAgICAgd21iKCk7CisgICAgICAgIGxpc3QtJmd0O25leHQgPSBuZXc7CisgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj53bWIoKTwvZnVuY3Rpb24+IGlzIGEgd3JpdGUgbWVtb3J5IGJhcnJpZXIuICBJdAorICAgICAgZW5zdXJlcyB0aGF0IHRoZSBmaXJzdCBvcGVyYXRpb24gKHNldHRpbmcgdGhlIG5ldyBlbGVtZW50J3MKKyAgICAgIDxzeW1ib2w+bmV4dDwvc3ltYm9sPiBwb2ludGVyKSBpcyBjb21wbGV0ZSBhbmQgd2lsbCBiZSBzZWVuIGJ5CisgICAgICBhbGwgQ1BVcywgYmVmb3JlIHRoZSBzZWNvbmQgb3BlcmF0aW9uIGlzIChwdXR0aW5nIHRoZSBuZXcKKyAgICAgIGVsZW1lbnQgaW50byB0aGUgbGlzdCkuICBUaGlzIGlzIGltcG9ydGFudCwgc2luY2UgbW9kZXJuCisgICAgICBjb21waWxlcnMgYW5kIG1vZGVybiBDUFVzIGNhbiBib3RoIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zIHVubGVzcworICAgICAgdG9sZCBvdGhlcndpc2U6IHdlIHdhbnQgYSByZWFkZXIgdG8gZWl0aGVyIG5vdCBzZWUgdGhlIG5ldworICAgICAgZWxlbWVudCBhdCBhbGwsIG9yIHNlZSB0aGUgbmV3IGVsZW1lbnQgd2l0aCB0aGUKKyAgICAgIDxzeW1ib2w+bmV4dDwvc3ltYm9sPiBwb2ludGVyIGNvcnJlY3RseSBwb2ludGluZyBhdCB0aGUgcmVzdCBvZgorICAgICAgdGhlIGxpc3QuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgRm9ydHVuYXRlbHksIHRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gZG8gdGhpcyBmb3Igc3RhbmRhcmQKKyAgICAgIDxzdHJ1Y3RuYW1lPnN0cnVjdCBsaXN0X2hlYWQ8L3N0cnVjdG5hbWU+IGxpc3RzOgorICAgICAgPGZ1bmN0aW9uPmxpc3RfYWRkX3JjdSgpPC9mdW5jdGlvbj4KKyAgICAgICg8ZmlsZW5hbWU+aW5jbHVkZS9saW51eC9saXN0Lmg8L2ZpbGVuYW1lPikuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgUmVtb3ZpbmcgYW4gZWxlbWVudCBmcm9tIHRoZSBsaXN0IGlzIGV2ZW4gc2ltcGxlcjogd2UgcmVwbGFjZQorICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG9sZCBlbGVtZW50IHdpdGggYSBwb2ludGVyIHRvIGl0cyBzdWNjZXNzb3IsCisgICAgICBhbmQgcmVhZGVycyB3aWxsIGVpdGhlciBzZWUgaXQsIG9yIHNraXAgb3ZlciBpdC4KKyAgICA8L3BhcmE+CisgICAgPHByb2dyYW1saXN0aW5nPgorICAgICAgICBsaXN0LSZndDtuZXh0ID0gb2xkLSZndDtuZXh0OworICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+CisgICAgICBUaGVyZSBpcyA8ZnVuY3Rpb24+bGlzdF9kZWxfcmN1KCk8L2Z1bmN0aW9uPgorICAgICAgKDxmaWxlbmFtZT5pbmNsdWRlL2xpbnV4L2xpc3QuaDwvZmlsZW5hbWU+KSB3aGljaCBkb2VzIHRoaXMgKHRoZQorICAgICAgbm9ybWFsIHZlcnNpb24gcG9pc29ucyB0aGUgb2xkIG9iamVjdCwgd2hpY2ggd2UgZG9uJ3Qgd2FudCkuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgVGhlIHJlYWRlciBtdXN0IGFsc28gYmUgY2FyZWZ1bDogc29tZSBDUFVzIGNhbiBsb29rIHRocm91Z2ggdGhlCisgICAgICA8c3ltYm9sPm5leHQ8L3N5bWJvbD4gcG9pbnRlciB0byBzdGFydCByZWFkaW5nIHRoZSBjb250ZW50cyBvZgorICAgICAgdGhlIG5leHQgZWxlbWVudCBlYXJseSwgYnV0IGRvbid0IHJlYWxpemUgdGhhdCB0aGUgcHJlLWZldGNoZWQKKyAgICAgIGNvbnRlbnRzIGlzIHdyb25nIHdoZW4gdGhlIDxzeW1ib2w+bmV4dDwvc3ltYm9sPiBwb2ludGVyIGNoYW5nZXMKKyAgICAgIHVuZGVybmVhdGggdGhlbS4gIE9uY2UgYWdhaW4sIHRoZXJlIGlzIGEKKyAgICAgIDxmdW5jdGlvbj5saXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpPC9mdW5jdGlvbj4KKyAgICAgICg8ZmlsZW5hbWU+aW5jbHVkZS9saW51eC9saXN0Lmg8L2ZpbGVuYW1lPikgdG8gaGVscCB5b3UuICBPZgorICAgICAgY291cnNlLCB3cml0ZXJzIGNhbiBqdXN0IHVzZQorICAgICAgPGZ1bmN0aW9uPmxpc3RfZm9yX2VhY2hfZW50cnkoKTwvZnVuY3Rpb24+LCBzaW5jZSB0aGVyZSBjYW5ub3QKKyAgICAgIGJlIHR3byBzaW11bHRhbmVvdXMgd3JpdGVycy4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgICBPdXIgZmluYWwgZGlsZW1tYSBpcyB0aGlzOiB3aGVuIGNhbiB3ZSBhY3R1YWxseSBkZXN0cm95IHRoZQorICAgICAgcmVtb3ZlZCBlbGVtZW50PyAgUmVtZW1iZXIsIGEgcmVhZGVyIG1pZ2h0IGJlIHN0ZXBwaW5nIHRocm91Z2gKKyAgICAgIHRoaXMgZWxlbWVudCBpbiB0aGUgbGlzdCByaWdodCBub3c6IGl0IHdlIGZyZWUgdGhpcyBlbGVtZW50IGFuZAorICAgICAgdGhlIDxzeW1ib2w+bmV4dDwvc3ltYm9sPiBwb2ludGVyIGNoYW5nZXMsIHRoZSByZWFkZXIgd2lsbCBqdW1wCisgICAgICBvZmYgaW50byBnYXJiYWdlIGFuZCBjcmFzaC4gIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB3ZSBrbm93IHRoYXQKKyAgICAgIGFsbCB0aGUgcmVhZGVycyB3aG8gd2VyZSB0cmF2ZXJzaW5nIHRoZSBsaXN0IHdoZW4gd2UgZGVsZXRlZCB0aGUKKyAgICAgIGVsZW1lbnQgYXJlIGZpbmlzaGVkLiAgV2UgdXNlIDxmdW5jdGlvbj5jYWxsX3JjdSgpPC9mdW5jdGlvbj4gdG8KKyAgICAgIHJlZ2lzdGVyIGEgY2FsbGJhY2sgd2hpY2ggd2lsbCBhY3R1YWxseSBkZXN0cm95IHRoZSBvYmplY3Qgb25jZQorICAgICAgdGhlIHJlYWRlcnMgYXJlIGZpbmlzaGVkLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEJ1dCBob3cgZG9lcyBSZWFkIENvcHkgVXBkYXRlIGtub3cgd2hlbiB0aGUgcmVhZGVycyBhcmUKKyAgICAgIGZpbmlzaGVkPyAgVGhlIG1ldGhvZCBpcyB0aGlzOiBmaXJzdGx5LCB0aGUgcmVhZGVycyBhbHdheXMKKyAgICAgIHRyYXZlcnNlIHRoZSBsaXN0IGluc2lkZQorICAgICAgPGZ1bmN0aW9uPnJjdV9yZWFkX2xvY2soKTwvZnVuY3Rpb24+LzxmdW5jdGlvbj5yY3VfcmVhZF91bmxvY2soKTwvZnVuY3Rpb24+CisgICAgICBwYWlyczogdGhlc2Ugc2ltcGx5IGRpc2FibGUgcHJlZW1wdGlvbiBzbyB0aGUgcmVhZGVyIHdvbid0IGdvIHRvCisgICAgICBzbGVlcCB3aGlsZSByZWFkaW5nIHRoZSBsaXN0LgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIFJDVSB0aGVuIHdhaXRzIHVudGlsIGV2ZXJ5IG90aGVyIENQVSBoYXMgc2xlcHQgYXQgbGVhc3Qgb25jZToKKyAgICAgIHNpbmNlIHJlYWRlcnMgY2Fubm90IHNsZWVwLCB3ZSBrbm93IHRoYXQgYW55IHJlYWRlcnMgd2hpY2ggd2VyZQorICAgICAgdHJhdmVyc2luZyB0aGUgbGlzdCBkdXJpbmcgdGhlIGRlbGV0aW9uIGFyZSBmaW5pc2hlZCwgYW5kIHRoZQorICAgICAgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkLiAgVGhlIHJlYWwgUmVhZCBDb3B5IFVwZGF0ZSBjb2RlIGlzIGEKKyAgICAgIGxpdHRsZSBtb3JlIG9wdGltaXplZCB0aGFuIHRoaXMsIGJ1dCB0aGlzIGlzIHRoZSBmdW5kYW1lbnRhbAorICAgICAgaWRlYS4KKyAgICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKy0tLSBjYWNoZS5jLnBlcm9iamVjdGxvY2sJMjAwMy0xMi0xMSAxNzoxNTowMy4wMDAwMDAwMDAgKzExMDAKKysrKyBjYWNoZS5jLnJjdXBkYXRlCTIwMDMtMTItMTEgMTc6NTU6MTQuMDAwMDAwMDAwICsxMTAwCitAQCAtMSwxNSArMSwxOCBAQAorICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CisgI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKKyAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CisrI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CisgI2luY2x1ZGUgJmx0O2FzbS9zZW1hcGhvcmUuaCZndDsKKyAjaW5jbHVkZSAmbHQ7YXNtL2Vycm5vLmgmZ3Q7CisKKyBzdHJ1Y3Qgb2JqZWN0CisgeworLSAgICAgICAgLyogVGhlc2UgdHdvIHByb3RlY3RlZCBieSBjYWNoZV9sb2NrLiAqLworKyAgICAgICAgLyogVGhpcyBpcyBwcm90ZWN0ZWQgYnkgUkNVICovCisgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAgICAgICBpbnQgcG9wdWxhcml0eTsKKworKyAgICAgICAgc3RydWN0IHJjdV9oZWFkIHJjdTsKKysKKyAgICAgICAgIGF0b21pY190IHJlZmNudDsKKworICAgICAgICAgLyogRG9lc24ndCBjaGFuZ2Ugb25jZSBjcmVhdGVkLiAqLworQEAgLTQwLDcgKzQzLDcgQEAKKyB7CisgICAgICAgICBzdHJ1Y3Qgb2JqZWN0ICppOworCistICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZhbXA7Y2FjaGUsIGxpc3QpIHsKKysgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGksICZhbXA7Y2FjaGUsIGxpc3QpIHsKKyAgICAgICAgICAgICAgICAgaWYgKGktJmd0O2lkID09IGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgaS0mZ3Q7cG9wdWxhcml0eSsrOworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworQEAgLTQ5LDE5ICs1MiwyNSBAQAorICAgICAgICAgcmV0dXJuIE5VTEw7CisgfQorCisrLyogRmluYWwgZGlzY2FyZCBkb25lIG9uY2Ugd2Uga25vdyBubyByZWFkZXJzIGFyZSBsb29raW5nLiAqLworK3N0YXRpYyB2b2lkIGNhY2hlX2RlbGV0ZV9yY3Uodm9pZCAqYXJnKQorK3sKKysgICAgICAgIG9iamVjdF9wdXQoYXJnKTsKKyt9CisrCisgLyogTXVzdCBiZSBob2xkaW5nIGNhY2hlX2xvY2sgKi8KKyBzdGF0aWMgdm9pZCBfX2NhY2hlX2RlbGV0ZShzdHJ1Y3Qgb2JqZWN0ICpvYmopCisgeworICAgICAgICAgQlVHX09OKCFvYmopOworLSAgICAgICAgbGlzdF9kZWwoJmFtcDtvYmotJmd0O2xpc3QpOworLSAgICAgICAgb2JqZWN0X3B1dChvYmopOworKyAgICAgICAgbGlzdF9kZWxfcmN1KCZhbXA7b2JqLSZndDtsaXN0KTsKKyAgICAgICAgIGNhY2hlX251bS0tOworKyAgICAgICAgY2FsbF9yY3UoJmFtcDtvYmotJmd0O3JjdSwgY2FjaGVfZGVsZXRlX3JjdSwgb2JqKTsKKyB9CisKKyAvKiBNdXN0IGJlIGhvbGRpbmcgY2FjaGVfbG9jayAqLworIHN0YXRpYyB2b2lkIF9fY2FjaGVfYWRkKHN0cnVjdCBvYmplY3QgKm9iaikKKyB7CistICAgICAgICBsaXN0X2FkZCgmYW1wO29iai0mZ3Q7bGlzdCwgJmFtcDtjYWNoZSk7CisrICAgICAgICBsaXN0X2FkZF9yY3UoJmFtcDtvYmotJmd0O2xpc3QsICZhbXA7Y2FjaGUpOworICAgICAgICAgaWYgKCsrY2FjaGVfbnVtID4gTUFYX0NBQ0hFX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgc3RydWN0IG9iamVjdCAqaSwgKm91dGNhc3QgPSBOVUxMOworICAgICAgICAgICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZhbXA7Y2FjaGUsIGxpc3QpIHsKK0BAIC04NSw2ICs5NCw3IEBACisgICAgICAgICBvYmotJmd0O3BvcHVsYXJpdHkgPSAwOworICAgICAgICAgYXRvbWljX3NldCgmYW1wO29iai0mZ3Q7cmVmY250LCAxKTsgLyogVGhlIGNhY2hlIGhvbGRzIGEgcmVmZXJlbmNlICovCisgICAgICAgICBzcGluX2xvY2tfaW5pdCgmYW1wO29iai0mZ3Q7bG9jayk7CisrICAgICAgICBJTklUX1JDVV9IRUFEKCZhbXA7b2JqLSZndDtyY3UpOworCisgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKyAgICAgICAgIF9fY2FjaGVfYWRkKG9iaik7CitAQCAtMTA0LDEyICsxMTQsMTEgQEAKKyBzdHJ1Y3Qgb2JqZWN0ICpjYWNoZV9maW5kKGludCBpZCkKKyB7CisgICAgICAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmo7CistICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCistICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhY2hlX2xvY2ssIGZsYWdzKTsKKysgICAgICAgIHJjdV9yZWFkX2xvY2soKTsKKyAgICAgICAgIG9iaiA9IF9fY2FjaGVfZmluZChpZCk7CisgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgICBvYmplY3RfZ2V0KG9iaik7CistICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Y2FjaGVfbG9jaywgZmxhZ3MpOworKyAgICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7CisgICAgICAgICByZXR1cm4gb2JqOworIH0KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKzxwYXJhPgorTm90ZSB0aGF0IHRoZSByZWFkZXIgd2lsbCBhbHRlciB0aGUKKzxzdHJ1Y3RmaWVsZD5wb3B1bGFyaXR5PC9zdHJ1Y3RmaWVsZD4gbWVtYmVyIGluCis8ZnVuY3Rpb24+X19jYWNoZV9maW5kKCk8L2Z1bmN0aW9uPiwgYW5kIG5vdyBpdCBkb2Vzbid0IGhvbGQgYSBsb2NrLgorT25lIHNvbHV0aW9uIHdvdWxkIGJlIHRvIG1ha2UgaXQgYW4gPHR5cGU+YXRvbWljX3Q8L3R5cGU+LCBidXQgZm9yCit0aGlzIHVzYWdlLCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCByYWNlczogYW4gYXBwcm94aW1hdGUgcmVzdWx0IGlzCitnb29kIGVub3VnaCwgc28gSSBkaWRuJ3QgY2hhbmdlIGl0LgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSByZXN1bHQgaXMgdGhhdCA8ZnVuY3Rpb24+Y2FjaGVfZmluZCgpPC9mdW5jdGlvbj4gcmVxdWlyZXMgbm8KK3N5bmNocm9uaXphdGlvbiB3aXRoIGFueSBvdGhlciBmdW5jdGlvbnMsIHNvIGlzIGFsbW9zdCBhcyBmYXN0IG9uIFNNUAorYXMgaXQgd291bGQgYmUgb24gVVAuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlcmUgaXMgYSBmdXJ0aHVyIG9wdGltaXphdGlvbiBwb3NzaWJsZSBoZXJlOiByZW1lbWJlciBvdXIgb3JpZ2luYWwKK2NhY2hlIGNvZGUsIHdoZXJlIHRoZXJlIHdlcmUgbm8gcmVmZXJlbmNlIGNvdW50cyBhbmQgdGhlIGNhbGxlciBzaW1wbHkKK2hlbGQgdGhlIGxvY2sgd2hlbmV2ZXIgdXNpbmcgdGhlIG9iamVjdD8gIFRoaXMgaXMgc3RpbGwgcG9zc2libGU6IGlmCit5b3UgaG9sZCB0aGUgbG9jaywgbm9vbmUgY2FuIGRlbGV0ZSB0aGUgb2JqZWN0LCBzbyB5b3UgZG9uJ3QgbmVlZCB0bworZ2V0IGFuZCBwdXQgdGhlIHJlZmVyZW5jZSBjb3VudC4KKzwvcGFyYT4KKworPHBhcmE+CitOb3csIGJlY2F1c2UgdGhlICdyZWFkIGxvY2snIGluIFJDVSBpcyBzaW1wbHkgZGlzYWJsaW5nIHByZWVtcHRpb24sIGEKK2NhbGxlciB3aGljaCBhbHdheXMgaGFzIHByZWVtcHRpb24gZGlzYWJsZWQgYmV0d2VlbiBjYWxsaW5nCis8ZnVuY3Rpb24+Y2FjaGVfZmluZCgpPC9mdW5jdGlvbj4gYW5kCis8ZnVuY3Rpb24+b2JqZWN0X3B1dCgpPC9mdW5jdGlvbj4gZG9lcyBub3QgbmVlZCB0byBhY3R1YWxseSBnZXQgYW5kCitwdXQgdGhlIHJlZmVyZW5jZSBjb3VudDogd2UgY291bGQgZXhwb3NlCis8ZnVuY3Rpb24+X19jYWNoZV9maW5kKCk8L2Z1bmN0aW9uPiBieSBtYWtpbmcgaXQgbm9uLXN0YXRpYywgYW5kCitzdWNoIGNhbGxlcnMgY291bGQgc2ltcGx5IGNhbGwgdGhhdC4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIGJlbmVmaXQgaGVyZSBpcyB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgbm90IHdyaXR0ZW4gdG86IHRoZQorb2JqZWN0IGlzIG5vdCBhbHRlcmVkIGluIGFueSB3YXksIHdoaWNoIGlzIG11Y2ggZmFzdGVyIG9uIFNNUAorbWFjaGluZXMgZHVlIHRvIGNhY2hpbmcuCis8L3BhcmE+CisgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0icGVyLWNwdSI+CisgICAgPHRpdGxlPlBlci1DUFUgRGF0YTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIEFub3RoZXIgdGVjaG5pcXVlIGZvciBhdm9pZGluZyBsb2NraW5nIHdoaWNoIGlzIHVzZWQgZmFpcmx5CisgICAgICB3aWRlbHkgaXMgdG8gZHVwbGljYXRlIGluZm9ybWF0aW9uIGZvciBlYWNoIENQVS4gIEZvciBleGFtcGxlLAorICAgICAgaWYgeW91IHdhbnRlZCB0byBrZWVwIGEgY291bnQgb2YgYSBjb21tb24gY29uZGl0aW9uLCB5b3UgY291bGQKKyAgICAgIHVzZSBhIHNwaW4gbG9jayBhbmQgYSBzaW5nbGUgY291bnRlci4gIE5pY2UgYW5kIHNpbXBsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoYXQgd2FzIHRvbyBzbG93IChpdCdzIHVzdWFsbHkgbm90LCBidXQgaWYgeW91J3ZlIGdvdCBhCisgICAgICByZWFsbHkgYmlnIG1hY2hpbmUgdG8gdGVzdCBvbiBhbmQgY2FuIHNob3cgdGhhdCBpdCBpcyksIHlvdQorICAgICAgY291bGQgaW5zdGVhZCB1c2UgYSBjb3VudGVyIGZvciBlYWNoIENQVSwgdGhlbiBub25lIG9mIHRoZW0gbmVlZAorICAgICAgYW4gZXhjbHVzaXZlIGxvY2suICBTZWUgPGZ1bmN0aW9uPkRFRklORV9QRVJfQ1BVKCk8L2Z1bmN0aW9uPiwKKyAgICAgIDxmdW5jdGlvbj5nZXRfY3B1X3ZhcigpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+cHV0X2NwdV92YXIoKTwvZnVuY3Rpb24+CisgICAgICAoPGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5pbmNsdWRlL2xpbnV4L3BlcmNwdS5oPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgT2YgcGFydGljdWxhciB1c2UgZm9yIHNpbXBsZSBwZXItY3B1IGNvdW50ZXJzIGlzIHRoZQorICAgICAgPHR5cGU+bG9jYWxfdDwvdHlwZT4gdHlwZSwgYW5kIHRoZQorICAgICAgPGZ1bmN0aW9uPmNwdV9sb2NhbF9pbmMoKTwvZnVuY3Rpb24+IGFuZCByZWxhdGVkIGZ1bmN0aW9ucywKKyAgICAgIHdoaWNoIGFyZSBtb3JlIGVmZmljaWVudCB0aGFuIHNpbXBsZSBjb2RlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcworICAgICAgKDxmaWxlbmFtZSBjbGFzcz0iaGVhZGVyZmlsZSI+aW5jbHVkZS9hc20vbG9jYWwuaDwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzaW1wbGUsIHJlbGlhYmxlIHdheSBvZiBnZXR0aW5nIGFuIGV4YWN0CisgICAgICB2YWx1ZSBvZiBzdWNoIGEgY291bnRlciwgd2l0aG91dCBpbnRyb2R1Y2luZyBtb3JlIGxvY2tzLiAgVGhpcworICAgICAgaXMgbm90IGEgcHJvYmxlbSBmb3Igc29tZSB1c2VzLgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisKKyAgIDxzZWN0MSBpZD0ibW9zdGx5LWhhcmRpcnEiPgorICAgIDx0aXRsZT5EYXRhIFdoaWNoIE1vc3RseSBVc2VkIEJ5IEFuIElSUSBIYW5kbGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgSWYgZGF0YSBpcyBhbHdheXMgYWNjZXNzZWQgZnJvbSB3aXRoaW4gdGhlIHNhbWUgSVJRIGhhbmRsZXIsIHlvdQorICAgICAgZG9uJ3QgbmVlZCBhIGxvY2sgYXQgYWxsOiB0aGUga2VybmVsIGFscmVhZHkgZ3VhcmFudGVlcyB0aGF0IHRoZQorICAgICAgaXJxIGhhbmRsZXIgd2lsbCBub3QgcnVuIHNpbXVsdGFuZW91c2x5IG9uIG11bHRpcGxlIENQVXMuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgICAgTWFuZnJlZCBTcHJhdWwgcG9pbnRzIG91dCB0aGF0IHlvdSBjYW4gc3RpbGwgZG8gdGhpcywgZXZlbiBpZgorICAgICAgdGhlIGRhdGEgaXMgdmVyeSBvY2Nhc2lvbmFsbHkgYWNjZXNzZWQgaW4gdXNlciBjb250ZXh0IG9yCisgICAgICBzb2Z0aXJxcy90YXNrbGV0cy4gIFRoZSBpcnEgaGFuZGxlciBkb2Vzbid0IHVzZSBhIGxvY2ssIGFuZAorICAgICAgYWxsIG90aGVyIGFjY2Vzc2VzIGFyZSBkb25lIGFzIHNvOgorICAgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorCXNwaW5fbG9jaygmYW1wO2xvY2spOworCWRpc2FibGVfaXJxKGlycSk7CisJLi4uCisJZW5hYmxlX2lycShpcnEpOworCXNwaW5fdW5sb2NrKCZhbXA7bG9jayk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5kaXNhYmxlX2lycSgpPC9mdW5jdGlvbj4gcHJldmVudHMgdGhlIGlycSBoYW5kbGVyCisgICAgICBmcm9tIHJ1bm5pbmcgKGFuZCB3YWl0cyBmb3IgaXQgdG8gZmluaXNoIGlmIGl0J3MgY3VycmVudGx5CisgICAgICBydW5uaW5nIG9uIG90aGVyIENQVXMpLiAgVGhlIHNwaW5sb2NrIHByZXZlbnRzIGFueSBvdGhlcgorICAgICAgYWNjZXNzZXMgaGFwcGVuaW5nIGF0IHRoZSBzYW1lIHRpbWUuICBOYXR1cmFsbHksIHRoaXMgaXMgc2xvd2VyCisgICAgICB0aGFuIGp1c3QgYSA8ZnVuY3Rpb24+c3Bpbl9sb2NrX2lycSgpPC9mdW5jdGlvbj4gY2FsbCwgc28gaXQKKyAgICAgIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhpcyB0eXBlIG9mIGFjY2VzcyBoYXBwZW5zIGV4dHJlbWVseQorICAgICAgcmFyZWx5LgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworIDxjaGFwdGVyIGlkPSJzbGVlcGluZy10aGluZ3MiPgorICAgIDx0aXRsZT5XaGF0IEZ1bmN0aW9ucyBBcmUgU2FmZSBUbyBDYWxsIEZyb20gSW50ZXJydXB0cz88L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBNYW55IGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsIHNsZWVwIChpZS4gY2FsbCBzY2hlZHVsZSgpKQorICAgICAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseTogeW91IGNhbiBuZXZlciBjYWxsIHRoZW0gd2hpbGUgaG9sZGluZyBhCisgICAgICBzcGlubG9jaywgb3Igd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLiAgVGhpcyBhbHNvIG1lYW5zIHlvdSBuZWVkCisgICAgICB0byBiZSBpbiB1c2VyIGNvbnRleHQ6IGNhbGxpbmcgdGhlbSBmcm9tIGFuIGludGVycnVwdCBpcyBpbGxlZ2FsLgorICAgIDwvcGFyYT4KKworICAgPHNlY3QxIGlkPSJzbGVlcGluZyI+CisgICAgPHRpdGxlPlNvbWUgRnVuY3Rpb25zIFdoaWNoIFNsZWVwPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIG1vc3QgY29tbW9uIG9uZXMgYXJlIGxpc3RlZCBiZWxvdywgYnV0IHlvdSB1c3VhbGx5IGhhdmUgdG8KKyAgICAgIHJlYWQgdGhlIGNvZGUgdG8gZmluZCBvdXQgaWYgb3RoZXIgY2FsbHMgYXJlIHNhZmUuICBJZiBldmVyeW9uZQorICAgICAgZWxzZSB3aG8gY2FsbHMgaXQgY2FuIHNsZWVwLCB5b3UgcHJvYmFibHkgbmVlZCB0byBiZSBhYmxlIHRvCisgICAgICBzbGVlcCwgdG9vLiAgSW4gcGFydGljdWxhciwgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbgorICAgICAgZnVuY3Rpb25zIHVzdWFsbHkgZXhwZWN0IHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgYW5kIGNhbgorICAgICAgc2xlZXAuCisgICAgPC9wYXJhPgorCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIEFjY2Vzc2VzIHRvIAorICAgICAgICA8Zmlyc3R0ZXJtIGxpbmtlbmQ9Imdsb3NzLXVzZXJzcGFjZSI+dXNlcnNwYWNlPC9maXJzdHRlcm0+OgorICAgICAgPC9wYXJhPgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmdW5jdGlvbj5jb3B5X2Zyb21fdXNlcigpPC9mdW5jdGlvbj4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZnVuY3Rpb24+Y29weV90b191c2VyKCk8L2Z1bmN0aW9uPgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmdW5jdGlvbj5nZXRfdXNlcigpPC9mdW5jdGlvbj4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8ZnVuY3Rpb24+IHB1dF91c2VyKCk8L2Z1bmN0aW9uPgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICA8L2xpc3RpdGVtPgorCisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+a21hbGxvYyhHRlBfS0VSTkVMKTwvZnVuY3Rpb24+CisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICA8ZnVuY3Rpb24+ZG93bl9pbnRlcnJ1cHRpYmxlKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5kb3duKCk8L2Z1bmN0aW9uPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVGhlcmUgaXMgYSA8ZnVuY3Rpb24+ZG93bl90cnlsb2NrKCk8L2Z1bmN0aW9uPiB3aGljaCBjYW4gYmUKKyAgICAgICB1c2VkIGluc2lkZSBpbnRlcnJ1cHQgY29udGV4dCwgYXMgaXQgd2lsbCBub3Qgc2xlZXAuCisgICAgICAgPGZ1bmN0aW9uPnVwKCk8L2Z1bmN0aW9uPiB3aWxsIGFsc28gbmV2ZXIgc2xlZXAuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICA8L3NlY3QxPgorCisgICA8c2VjdDEgaWQ9ImRvbnQtc2xlZXAiPgorICAgIDx0aXRsZT5Tb21lIEZ1bmN0aW9ucyBXaGljaCBEb24ndCBTbGVlcDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgU29tZSBmdW5jdGlvbnMgYXJlIHNhZmUgdG8gY2FsbCBmcm9tIGFueSBjb250ZXh0LCBvciBob2xkaW5nCisgICAgIGFsbW9zdCBhbnkgbG9jay4KKyAgICA8L3BhcmE+CisKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKwk8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKwk8ZnVuY3Rpb24+YWRkX3RpbWVyKCk8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmRlbF90aW1lcigpPC9mdW5jdGlvbj4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0icmVmZXJlbmNlcyI+CisgICA8dGl0bGU+RnVydGhlciByZWFkaW5nPC90aXRsZT4KKworICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQ8L2ZpbGVuYW1lPjogCisgICAgICAgTGludXMgVG9ydmFsZHMnIHNwaW5sb2NraW5nIHR1dG9yaWFsIGluIHRoZSBrZXJuZWwgc291cmNlcy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgIFVuaXggU3lzdGVtcyBmb3IgTW9kZXJuIEFyY2hpdGVjdHVyZXM6IFN5bW1ldHJpYworICAgICAgIE11bHRpcHJvY2Vzc2luZyBhbmQgQ2FjaGluZyBmb3IgS2VybmVsIFByb2dyYW1tZXJzOgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICAgQ3VydCBTY2hpbW1lbCdzIHZlcnkgZ29vZCBpbnRyb2R1Y3Rpb24gdG8ga2VybmVsIGxldmVsCisgICAgICAgbG9ja2luZyAobm90IHdyaXR0ZW4gZm9yIExpbnV4LCBidXQgbmVhcmx5IGV2ZXJ5dGhpbmcKKyAgICAgICBhcHBsaWVzKS4gIFRoZSBib29rIGlzIGV4cGVuc2l2ZSwgYnV0IHJlYWxseSB3b3J0aCBldmVyeQorICAgICAgIHBlbm55IHRvIHVuZGVyc3RhbmQgU01QIGxvY2tpbmcuIFtJU0JOOiAwMjAxNjMzMzg4XQorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InRoYW5rcyI+CisgICAgPHRpdGxlPlRoYW5rczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoYW5rcyB0byBUZWxzYSBHd3lubmUgZm9yIERvY0Jvb2tpbmcsIG5lYXRlbmluZyBhbmQgYWRkaW5nCisgICAgICBzdHlsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoYW5rcyB0byBNYXJ0aW4gUG9vbCwgUGhpbGlwcCBSdW1wZiwgU3RlcGhlbiBSb3Rod2VsbCwgUGF1bAorICAgICAgTWFja2VycmFzLCBSdWVkaSBBc2Nod2FuZGVuLCBBbGFuIENveCwgTWFuZnJlZCBTcHJhdWwsIFRpbQorICAgICAgV2F1Z2gsIFBldGUgWmFpdGNldiwgSmFtZXMgTW9ycmlzLCBSb2JlcnQgTG92ZSwgUGF1bCBNY0tlbm5leSwKKyAgICAgIEpvaG4gQXNoYnkgZm9yIHByb29mcmVhZGluZywgY29ycmVjdGluZywgZmxhbWluZywgY29tbWVudGluZy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoYW5rcyB0byB0aGUgY2FiYWwgZm9yIGhhdmluZyBubyBpbmZsdWVuY2Ugb24gdGhpcyBkb2N1bWVudC4KKyAgICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Z2xvc3NhcnkgaWQ9Imdsb3NzYXJ5Ij4KKyAgIDx0aXRsZT5HbG9zc2FyeTwvdGl0bGU+CisKKyAgIDxnbG9zc2VudHJ5IGlkPSJnbG9zcy1wcmVlbXB0aW9uIj4KKyAgICA8Z2xvc3N0ZXJtPnByZWVtcHRpb248L2dsb3NzdGVybT4KKyAgICAgPGdsb3NzZGVmPgorICAgICAgPHBhcmE+CisgICAgICAgIFByaW9yIHRvIDIuNSwgb3Igd2hlbiA8c3ltYm9sPkNPTkZJR19QUkVFTVBUPC9zeW1ib2w+IGlzCisgICAgICAgIHVuc2V0LCBwcm9jZXNzZXMgaW4gdXNlciBjb250ZXh0IGluc2lkZSB0aGUga2VybmVsIHdvdWxkIG5vdAorICAgICAgICBwcmVlbXB0IGVhY2ggb3RoZXIgKGllLiB5b3UgaGFkIHRoYXQgQ1BVIHVudGlsIHlvdSBoYXZlIGl0IHVwLAorICAgICAgICBleGNlcHQgZm9yIGludGVycnVwdHMpLiAgV2l0aCB0aGUgYWRkaXRpb24gb2YKKyAgICAgICAgPHN5bWJvbD5DT05GSUdfUFJFRU1QVDwvc3ltYm9sPiBpbiAyLjUuNCwgdGhpcyBjaGFuZ2VkOiB3aGVuCisgICAgICAgIGluIHVzZXIgY29udGV4dCwgaGlnaGVyIHByaW9yaXR5IHRhc2tzIGNhbiAiY3V0IGluIjogc3BpbmxvY2tzCisgICAgICAgIHdlcmUgY2hhbmdlZCB0byBkaXNhYmxlIHByZWVtcHRpb24sIGV2ZW4gb24gVVAuCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3MtYmgiPgorICAgIDxnbG9zc3Rlcm0+Ymg8L2dsb3NzdGVybT4KKyAgICAgPGdsb3NzZGVmPgorICAgICAgPHBhcmE+CisgICAgICAgIEJvdHRvbSBIYWxmOiBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCBmdW5jdGlvbnMgd2l0aAorICAgICAgICAnX2JoJyBpbiB0aGVtIG9mdGVuIG5vdyByZWZlciB0byBhbnkgc29mdHdhcmUgaW50ZXJydXB0LCBlLmcuCisgICAgICAgIDxmdW5jdGlvbj5zcGluX2xvY2tfYmgoKTwvZnVuY3Rpb24+IGJsb2NrcyBhbnkgc29mdHdhcmUgaW50ZXJydXB0IAorICAgICAgICBvbiB0aGUgY3VycmVudCBDUFUuICBCb3R0b20gaGFsdmVzIGFyZSBkZXByZWNhdGVkLCBhbmQgd2lsbCAKKyAgICAgICAgZXZlbnR1YWxseSBiZSByZXBsYWNlZCBieSB0YXNrbGV0cy4gIE9ubHkgb25lIGJvdHRvbSBoYWxmIHdpbGwgYmUgCisgICAgICAgIHJ1bm5pbmcgYXQgYW55IHRpbWUuCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3MtaHdpbnRlcnJ1cHQiPgorICAgIDxnbG9zc3Rlcm0+SGFyZHdhcmUgSW50ZXJydXB0IC8gSGFyZHdhcmUgSVJRPC9nbG9zc3Rlcm0+CisgICAgPGdsb3NzZGVmPgorICAgICA8cGFyYT4KKyAgICAgICBIYXJkd2FyZSBpbnRlcnJ1cHQgcmVxdWVzdC4gIDxmdW5jdGlvbj5pbl9pcnEoKTwvZnVuY3Rpb24+IHJldHVybnMgCisgICAgICAgPHJldHVybnZhbHVlPnRydWU8L3JldHVybnZhbHVlPiBpbiBhIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLWludGVycnVwdGNvbnRleHQiPgorICAgIDxnbG9zc3Rlcm0+SW50ZXJydXB0IENvbnRleHQ8L2dsb3NzdGVybT4KKyAgICA8Z2xvc3NkZWY+CisgICAgIDxwYXJhPgorICAgICAgIE5vdCB1c2VyIGNvbnRleHQ6IHByb2Nlc3NpbmcgYSBoYXJkd2FyZSBpcnEgb3Igc29mdHdhcmUgaXJxLgorICAgICAgIEluZGljYXRlZCBieSB0aGUgPGZ1bmN0aW9uPmluX2ludGVycnVwdCgpPC9mdW5jdGlvbj4gbWFjcm8gCisgICAgICAgcmV0dXJuaW5nIDxyZXR1cm52YWx1ZT50cnVlPC9yZXR1cm52YWx1ZT4uCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3Mtc21wIj4KKyAgICA8Z2xvc3N0ZXJtPjxhY3JvbnltPlNNUDwvYWNyb255bT48L2dsb3NzdGVybT4KKyAgICA8Z2xvc3NkZWY+CisgICAgIDxwYXJhPgorICAgICAgIFN5bW1ldHJpYyBNdWx0aS1Qcm9jZXNzb3I6IGtlcm5lbHMgY29tcGlsZWQgZm9yIG11bHRpcGxlLUNQVQorICAgICAgIG1hY2hpbmVzLiAgKENPTkZJR19TTVA9eSkuCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3Mtc29mdGlycSI+CisgICAgPGdsb3NzdGVybT5Tb2Z0d2FyZSBJbnRlcnJ1cHQgLyBzb2Z0aXJxPC9nbG9zc3Rlcm0+CisgICAgPGdsb3NzZGVmPgorICAgICA8cGFyYT4KKyAgICAgICBTb2Z0d2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIDxmdW5jdGlvbj5pbl9pcnEoKTwvZnVuY3Rpb24+IHJldHVybnMKKyAgICAgICA8cmV0dXJudmFsdWU+ZmFsc2U8L3JldHVybnZhbHVlPjsgPGZ1bmN0aW9uPmluX3NvZnRpcnEoKTwvZnVuY3Rpb24+CisgICAgICAgcmV0dXJucyA8cmV0dXJudmFsdWU+dHJ1ZTwvcmV0dXJudmFsdWU+LiAgVGFza2xldHMgYW5kIHNvZnRpcnFzCisJYm90aCBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mICdzb2Z0d2FyZSBpbnRlcnJ1cHRzJy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgICBTdHJpY3RseSBzcGVha2luZyBhIHNvZnRpcnEgaXMgb25lIG9mIHVwIHRvIDMyIGVudW1lcmF0ZWQgc29mdHdhcmUKKyAgICAgICBpbnRlcnJ1cHRzIHdoaWNoIGNhbiBydW4gb24gbXVsdGlwbGUgQ1BVcyBhdCBvbmNlLgorICAgICAgIFNvbWV0aW1lcyB1c2VkIHRvIHJlZmVyIHRvIHRhc2tsZXRzIGFzCisgICAgICAgd2VsbCAoaWUuIGFsbCBzb2Z0d2FyZSBpbnRlcnJ1cHRzKS4KKyAgICAgPC9wYXJhPgorICAgIDwvZ2xvc3NkZWY+CisgICA8L2dsb3NzZW50cnk+CisKKyAgIDxnbG9zc2VudHJ5IGlkPSJnbG9zcy10YXNrbGV0Ij4KKyAgICA8Z2xvc3N0ZXJtPnRhc2tsZXQ8L2dsb3NzdGVybT4KKyAgICA8Z2xvc3NkZWY+CisgICAgIDxwYXJhPgorICAgICAgIEEgZHluYW1pY2FsbHktcmVnaXN0cmFibGUgc29mdHdhcmUgaW50ZXJydXB0LAorICAgICAgIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gb25seSBydW4gb24gb25lIENQVSBhdCBhIHRpbWUuCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3MtdGltZXJzIj4KKyAgICA8Z2xvc3N0ZXJtPnRpbWVyPC9nbG9zc3Rlcm0+CisgICAgPGdsb3NzZGVmPgorICAgICA8cGFyYT4KKyAgICAgICBBIGR5bmFtaWNhbGx5LXJlZ2lzdHJhYmxlIHNvZnR3YXJlIGludGVycnVwdCwgd2hpY2ggaXMgcnVuIGF0CisgICAgICAgKG9yIGNsb3NlIHRvKSBhIGdpdmVuIHRpbWUuICBXaGVuIHJ1bm5pbmcsIGl0IGlzIGp1c3QgbGlrZSBhCisgICAgICAgdGFza2xldCAoaW4gZmFjdCwgdGhleSBhcmUgY2FsbGVkIGZyb20gdGhlIFRJTUVSX1NPRlRJUlEpLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLXVwIj4KKyAgICA8Z2xvc3N0ZXJtPjxhY3JvbnltPlVQPC9hY3JvbnltPjwvZ2xvc3N0ZXJtPgorICAgIDxnbG9zc2RlZj4KKyAgICAgPHBhcmE+CisgICAgICAgVW5pLVByb2Nlc3NvcjogTm9uLVNNUC4gIChDT05GSUdfU01QPW4pLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4KKworICAgPGdsb3NzZW50cnkgaWQ9Imdsb3NzLXVzZXJjb250ZXh0Ij4KKyAgICA8Z2xvc3N0ZXJtPlVzZXIgQ29udGV4dDwvZ2xvc3N0ZXJtPgorICAgIDxnbG9zc2RlZj4KKyAgICAgPHBhcmE+CisgICAgICAgVGhlIGtlcm5lbCBleGVjdXRpbmcgb24gYmVoYWxmIG9mIGEgcGFydGljdWxhciBwcm9jZXNzIChpZS4gYQorICAgICAgIHN5c3RlbSBjYWxsIG9yIHRyYXApIG9yIGtlcm5lbCB0aHJlYWQuICBZb3UgY2FuIHRlbGwgd2hpY2gKKyAgICAgICBwcm9jZXNzIHdpdGggdGhlIDxzeW1ib2w+Y3VycmVudDwvc3ltYm9sPiBtYWNyby4pICBOb3QgdG8KKyAgICAgICBiZSBjb25mdXNlZCB3aXRoIHVzZXJzcGFjZS4gIENhbiBiZSBpbnRlcnJ1cHRlZCBieSBzb2Z0d2FyZSBvcgorICAgICAgIGhhcmR3YXJlIGludGVycnVwdHMuCisgICAgIDwvcGFyYT4KKyAgICA8L2dsb3NzZGVmPgorICAgPC9nbG9zc2VudHJ5PgorCisgICA8Z2xvc3NlbnRyeSBpZD0iZ2xvc3MtdXNlcnNwYWNlIj4KKyAgICA8Z2xvc3N0ZXJtPlVzZXJzcGFjZTwvZ2xvc3N0ZXJtPgorICAgIDxnbG9zc2RlZj4KKyAgICAgPHBhcmE+CisgICAgICAgQSBwcm9jZXNzIGV4ZWN1dGluZyBpdHMgb3duIGNvZGUgb3V0c2lkZSB0aGUga2VybmVsLgorICAgICA8L3BhcmE+CisgICAgPC9nbG9zc2RlZj4KKyAgIDwvZ2xvc3NlbnRyeT4gICAgICAKKworICA8L2dsb3NzYXJ5PgorPC9ib29rPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyZmNlNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbApAQCAtMCwwICsxLDI4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJsaWJhdGFEZXZHdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+bGliQVRBIERldmVsb3BlcidzIEd1aWRlPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5KZWZmPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+R2FyemlrPC9zdXJuYW1lPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDM8L3llYXI+CisgICA8aG9sZGVyPkplZmYgR2FyemlrPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgT3BlbgorICAgU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDEuMSB0aGF0IGNhbiBiZSBmb3VuZCBhdAorICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9vc2wtMS4xLnR4dCI+aHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9vc2wtMS4xLnR4dDwvdWxpbms+IGFuZCBpcyBpbmNsdWRlZCBoZXJlaW4KKyAgIGJ5IHJlZmVyZW5jZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICAgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSBhcyBkaXN0cmlidXRlZAorICAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgQ09QWUlORyBmaWxlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mCisgICB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cKKyAgIHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICAgdGhlIE9TTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQKKyAgIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4KKyAgIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAgIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgT1NMIG9yIHRoZSBHUEwuCisgICA8L3BhcmE+CisKKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJsaWJhdGFUaGFua3MiPgorICAgICA8dGl0bGU+VGhhbmtzPC90aXRsZT4KKyAgPHBhcmE+CisgIFRoZSBidWxrIG9mIHRoZSBBVEEga25vd2xlZGdlIGNvbWVzIHRoYW5rcyB0byBsb25nIGNvbnZlcnNhdGlvbnMgd2l0aAorICBBbmRyZSBIZWRyaWNrICh3d3cubGludXgtaWRlLm9yZykuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIFRoYW5rcyB0byBBbGFuIENveCBmb3IgcG9pbnRpbmcgb3V0IHNpbWlsYXJpdGllcyAKKyAgYmV0d2VlbiBTQVRBIGFuZCBTQ1NJLCBhbmQgaW4gZ2VuZXJhbCBmb3IgbW90aXZhdGlvbiB0byBoYWNrIG9uCisgIGxpYmF0YS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgbGliYXRhJ3MgZGV2aWNlIGRldGVjdGlvbgorICBtZXRob2QsIGF0YV9waW9fZGV2Y2hrLCBhbmQgaW4gZ2VuZXJhbCBhbGwgdGhlIGVhcmx5IHByb2Jpbmcgd2FzCisgIGJhc2VkIG9uIGV4dGVuc2l2ZSBzdHVkeSBvZiBIYWxlIExhbmRpcydzIHByb2JlL3Jlc2V0IGNvZGUgaW4gaGlzCisgIEFUQURSVlIgZHJpdmVyICh3d3cuYXRhLWF0YXBpLmNvbSkuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJsaWJhdGFEcml2ZXJBcGkiPgorICAgICA8dGl0bGU+bGliYXRhIERyaXZlciBBUEk8L3RpdGxlPgorICAgICA8c2VjdDE+CisgICAgICAgIDx0aXRsZT5zdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9uczwvdGl0bGU+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkICgqcG9ydF9kaXNhYmxlKSAoc3RydWN0IGF0YV9wb3J0ICopOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwlDYWxsZWQgZnJvbSBhdGFfYnVzX3Byb2JlKCkgYW5kIGF0YV9idXNfcmVzZXQoKSBlcnJvciBwYXRocywKKwlhcyB3ZWxsIGFzIHdoZW4gdW5yZWdpc3RlcmluZyBmcm9tIHRoZSBTQ1NJIG1vZHVsZSAocm1tb2QsIGhvdAorCXVucGx1ZykuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKmRldl9jb25maWcpIChzdHJ1Y3QgYXRhX3BvcnQgKiwgc3RydWN0IGF0YV9kZXZpY2UgKik7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCUNhbGxlZCBhZnRlciBJREVOVElGWSBbUEFDS0VUXSBERVZJQ0UgaXMgaXNzdWVkIHRvIGVhY2ggZGV2aWNlCisJZm91bmQuICBUeXBpY2FsbHkgdXNlZCB0byBhcHBseSBkZXZpY2Utc3BlY2lmaWMgZml4dXBzIHByaW9yIHRvCisJaXNzdWUgb2YgU0VUIEZFQVRVUkVTIC0gWEZFUiBNT0RFLCBhbmQgcHJpb3IgdG8gb3BlcmF0aW9uLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgKCpzZXRfcGlvbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKK3ZvaWQgKCpzZXRfZG1hbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKK3ZvaWQgKCpwb3N0X3NldF9tb2RlKSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCUhvb2tzIGNhbGxlZCBwcmlvciB0byB0aGUgaXNzdWUgb2YgU0VUIEZFQVRVUkVTIC0gWEZFUiBNT0RFCisJY29tbWFuZC4gIGRldi0+cGlvX21vZGUgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCB3aGVuCisJLT5zZXRfcGlvbW9kZSgpIGlzIGNhbGxlZCwgYW5kIGRldi0+ZG1hX21vZGUgaXMgZ3VhcmFudGVlZCB0byBiZQorCXZhbGlkIHdoZW4gLT5zZXRfZG1hbW9kZSgpIGlzIGNhbGxlZC4gIC0+cG9zdF9zZXRfbW9kZSgpIGlzCisJY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgYWZ0ZXIgdGhlIFNFVCBGRUFUVVJFUyAtIFhGRVIgTU9ERQorCWNvbW1hbmQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwktPnNldF9waW9tb2RlKCkgaXMgYWx3YXlzIGNhbGxlZCAoaWYgcHJlc2VudCksIGJ1dAorCS0+c2V0X2RtYV9tb2RlKCkgaXMgb25seSBjYWxsZWQgaWYgRE1BIGlzIHBvc3NpYmxlLgorCTwvcGFyYT4KKworCTxwcm9ncmFtbGlzdGluZz4KK3ZvaWQgKCp0Zl9sb2FkKSAoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOwordm9pZCAoKnRmX3JlYWQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCS0+dGZfbG9hZCgpIGlzIGNhbGxlZCB0byBsb2FkIHRoZSBnaXZlbiB0YXNrZmlsZSBpbnRvIGhhcmR3YXJlCisJcmVnaXN0ZXJzIC8gRE1BIGJ1ZmZlcnMuICAtPnRmX3JlYWQoKSBpcyBjYWxsZWQgdG8gcmVhZCB0aGUKKwloYXJkd2FyZSByZWdpc3RlcnMgLyBETUEgYnVmZmVycywgdG8gb2J0YWluIHRoZSBjdXJyZW50IHNldCBvZgorCXRhc2tmaWxlIHJlZ2lzdGVyIHZhbHVlcy4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkICgqZXhlY19jb21tYW5kKShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCWNhdXNlcyBhbiBBVEEgY29tbWFuZCwgcHJldmlvdXNseSBsb2FkZWQgd2l0aAorCS0+dGZfbG9hZCgpLCB0byBiZSBpbml0aWF0ZWQgaW4gaGFyZHdhcmUuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordTggICAoKmNoZWNrX3N0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7Cit2b2lkICgqZGV2X3NlbGVjdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCVJlYWRzIHRoZSBTdGF0dXMgQVRBIHNoYWRvdyByZWdpc3RlciBmcm9tIGhhcmR3YXJlLiAgT24gc29tZQorCWhhcmR3YXJlLCB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgY2xlYXJpbmcgdGhlIGludGVycnVwdAorCWNvbmRpdGlvbi4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkICgqZGV2X3NlbGVjdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCUlzc3VlcyB0aGUgbG93LWxldmVsIGhhcmR3YXJlIGNvbW1hbmQocykgdGhhdCBjYXVzZXMgb25lIG9mIE4KKwloYXJkd2FyZSBkZXZpY2VzIHRvIGJlIGNvbnNpZGVyZWQgJ3NlbGVjdGVkJyAoYWN0aXZlIGFuZAorCWF2YWlsYWJsZSBmb3IgdXNlKSBvbiB0aGUgQVRBIGJ1cy4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkICgqcGh5X3Jlc2V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCVRoZSB2ZXJ5IGZpcnN0IHN0ZXAgaW4gdGhlIHByb2JlIHBoYXNlLiAgQWN0aW9ucyB2YXJ5IGRlcGVuZGluZworCW9uIHRoZSBidXMgdHlwZSwgdHlwaWNhbGx5LiAgQWZ0ZXIgd2FraW5nIHVwIHRoZSBkZXZpY2UgYW5kIHByb2JpbmcKKwlmb3IgZGV2aWNlIHByZXNlbmNlIChQQVRBIGFuZCBTQVRBKSwgdHlwaWNhbGx5IGEgc29mdCByZXNldAorCShTUlNUKSB3aWxsIGJlIHBlcmZvcm1lZC4gIERyaXZlcnMgdHlwaWNhbGx5IHVzZSB0aGUgaGVscGVyCisJZnVuY3Rpb25zIGF0YV9idXNfcmVzZXQoKSBvciBzYXRhX3BoeV9yZXNldCgpIGZvciB0aGlzIGhvb2suCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKmJtZG1hX3NldHVwKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Cit2b2lkICgqYm1kbWFfc3RhcnQpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKKwk8L3Byb2dyYW1saXN0aW5nPgorCisJPHBhcmE+CisJV2hlbiBzZXR0aW5nIHVwIGFuIElERSBCTURNQSB0cmFuc2FjdGlvbiwgdGhlc2UgaG9va3MgYXJtCisJKC0+Ym1kbWFfc2V0dXApIGFuZCBmaXJlICgtPmJtZG1hX3N0YXJ0KSB0aGUgaGFyZHdhcmUncyBETUEKKwllbmdpbmUuCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKnFjX3ByZXApIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2ludCAoKnFjX2lzc3VlKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCUhpZ2hlci1sZXZlbCBob29rcywgdGhlc2UgdHdvIGhvb2tzIGNhbiBwb3RlbnRpYWxseSBzdXBlcmNlZGUKKwlzZXZlcmFsIG9mIHRoZSBhYm92ZSB0YXNrZmlsZS9ETUEgZW5naW5lIGhvb2tzLiAgLT5xY19wcmVwIGlzCisJY2FsbGVkIGFmdGVyIHRoZSBidWZmZXJzIGhhdmUgYmVlbiBETUEtbWFwcGVkLCBhbmQgaXMgdHlwaWNhbGx5CisJdXNlZCB0byBwb3B1bGF0ZSB0aGUgaGFyZHdhcmUncyBETUEgc2NhdHRlci1nYXRoZXIgdGFibGUuCisJTW9zdCBkcml2ZXJzIHVzZSB0aGUgc3RhbmRhcmQgYXRhX3FjX3ByZXAoKSBoZWxwZXIgZnVuY3Rpb24sIGJ1dAorCW1vcmUgYWR2YW5jZWQgZHJpdmVycyByb2xsIHRoZWlyIG93bi4KKwk8L3BhcmE+CisJPHBhcmE+CisJLT5xY19pc3N1ZSBpcyB1c2VkIHRvIG1ha2UgYSBjb21tYW5kIGFjdGl2ZSwgb25jZSB0aGUgaGFyZHdhcmUKKwlhbmQgUy9HIHRhYmxlcyBoYXZlIGJlZW4gcHJlcGFyZWQuICBJREUgQk1ETUEgZHJpdmVycyB1c2UgdGhlCisJaGVscGVyIGZ1bmN0aW9uIGF0YV9xY19pc3N1ZV9wcm90KCkgZm9yIHRhc2tmaWxlIHByb3RvY29sLWJhc2VkCisJZGlzcGF0Y2guICBNb3JlIGFkdmFuY2VkIGRyaXZlcnMgcm9sbCB0aGVpciBvd24gLT5xY19pc3N1ZQorCWltcGxlbWVudGF0aW9uLCB1c2luZyB0aGlzIGFzIHRoZSAiaXNzdWUgbmV3IEFUQSBjb21tYW5kIHRvCisJaGFyZHdhcmUiIGhvb2suCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgordm9pZCAoKmVuZ190aW1lb3V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCVRoaXMgaXMgYSBoaWdoIGxldmVsIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSB0aGUKKwllcnJvciBoYW5kbGluZyB0aHJlYWQsIHdoZW4gYSBjb21tYW5kIHRpbWVzIG91dC4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+CitpcnFyZXR1cm5fdCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Cit2b2lkICgqaXJxX2NsZWFyKSAoc3RydWN0IGF0YV9wb3J0ICopOworCTwvcHJvZ3JhbWxpc3Rpbmc+CisKKwk8cGFyYT4KKwktPmlycV9oYW5kbGVyIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZSByZWdpc3RlcmVkIHdpdGgKKwl0aGUgc3lzdGVtLCBieSBsaWJhdGEuICAtPmlycV9jbGVhciBpcyBjYWxsZWQgZHVyaW5nIHByb2JlIGp1c3QKKwliZWZvcmUgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQsIHRvIGJlIHN1cmUgaGFyZHdhcmUKKwlpcyBxdWlldC4KKwk8L3BhcmE+CisKKwk8cHJvZ3JhbWxpc3Rpbmc+Cit1MzIgKCpzY3JfcmVhZCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpOwordm9pZCAoKnNjcl93cml0ZSkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsCisgICAgICAgICAgICAgICAgICAgdTMyIHZhbCk7CisJPC9wcm9ncmFtbGlzdGluZz4KKworCTxwYXJhPgorCVJlYWQgYW5kIHdyaXRlIHN0YW5kYXJkIFNBVEEgcGh5IHJlZ2lzdGVycy4gIEN1cnJlbnRseSBvbmx5IHVzZWQKKwlpZiAtPnBoeV9yZXNldCBob29rIGNhbGxlZCB0aGUgc2F0YV9waHlfcmVzZXQoKSBoZWxwZXIgZnVuY3Rpb24uCisJPC9wYXJhPgorCisJPHByb2dyYW1saXN0aW5nPgoraW50ICgqcG9ydF9zdGFydCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOwordm9pZCAoKnBvcnRfc3RvcCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOwordm9pZCAoKmhvc3Rfc3RvcCkgKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KTsKKwk8L3Byb2dyYW1saXN0aW5nPgorCisJPHBhcmE+CisJLT5wb3J0X3N0YXJ0KCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIGRhdGEgc3RydWN0dXJlcyBmb3IgZWFjaAorCXBvcnQgYXJlIGluaXRpYWxpemVkLiAgVHlwaWNhbGx5IHRoaXMgaXMgdXNlZCB0byBhbGxvYyBwZXItcG9ydAorCURNQSBidWZmZXJzIC8gdGFibGVzIC8gcmluZ3MsIGVuYWJsZSBETUEgZW5naW5lcywgYW5kIHNpbWlsYXIKKwl0YXNrcy4gIAorCTwvcGFyYT4KKwk8cGFyYT4KKwktPmhvc3Rfc3RvcCgpIGlzIGNhbGxlZCB3aGVuIHRoZSBybW1vZCBvciBob3QgdW5wbHVnIHByb2Nlc3MKKwliZWdpbnMuICBUaGUgaG9vayBtdXN0IHN0b3AgYWxsIGhhcmR3YXJlIGludGVycnVwdHMsIERNQQorCWVuZ2luZXMsIGV0Yy4KKwk8L3BhcmE+CisJPHBhcmE+CisJLT5wb3J0X3N0b3AoKSBpcyBjYWxsZWQgYWZ0ZXIgLT5ob3N0X3N0b3AoKS4gIEl0J3Mgc29sZSBmdW5jdGlvbgorCWlzIHRvIHJlbGVhc2UgRE1BL21lbW9yeSByZXNvdXJjZXMsIG5vdyB0aGF0IHRoZXkgYXJlIG5vIGxvbmdlcgorCWFjdGl2ZWx5IGJlaW5nIHVzZWQuCisJPC9wYXJhPgorCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibGliYXRhRXh0Ij4KKyAgICAgPHRpdGxlPmxpYmF0YSBMaWJyYXJ5PC90aXRsZT4KKyFFZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJsaWJhdGFJbnQiPgorICAgICA8dGl0bGU+bGliYXRhIENvcmUgSW50ZXJuYWxzPC90aXRsZT4KKyFJZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJsaWJhdGFTY3NpSW50Ij4KKyAgICAgPHRpdGxlPmxpYmF0YSBTQ1NJIHRyYW5zbGF0aW9uL2VtdWxhdGlvbjwvdGl0bGU+CishRWRyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCishSWRyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iUGlpeEludCI+CisgICAgIDx0aXRsZT5hdGFfcGlpeCBJbnRlcm5hbHM8L3RpdGxlPgorIUlkcml2ZXJzL3Njc2kvYXRhX3BpaXguYworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9IlNJTEludCI+CisgICAgIDx0aXRsZT5zYXRhX3NpbCBJbnRlcm5hbHM8L3RpdGxlPgorIUlkcml2ZXJzL3Njc2kvc2F0YV9zaWwuYworICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJycy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYnJzLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmMzliYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJycy50bXBsCkBAIC0wLDAgKzEsMjg5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IlJlZWQtU29sb21vbi1MaWJyYXJ5LUd1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5SZWVkLVNvbG9tb24gTGlicmFyeSBQcm9ncmFtbWluZyBJbnRlcmZhY2U8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPlRob21hczwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkdsZWl4bmVyPC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+dGdseEBsaW51dHJvbml4LmRlPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwNDwveWVhcj4KKyAgIDxob2xkZXI+VGhvbWFzIEdsZWl4bmVyPC9ob2xkZXI+CisgIDwvY29weXJpZ2h0PgorCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICA8cGFyYT4KKyAgCVRoZSBnZW5lcmljIFJlZWQtU29sb21vbiBMaWJyYXJ5IHByb3ZpZGVzIGVuY29kaW5nLCBkZWNvZGluZworCWFuZCBlcnJvciBjb3JyZWN0aW9uIGZ1bmN0aW9ucy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgCVJlZWQtU29sb21vbiBjb2RlcyBhcmUgdXNlZCBpbiBjb21tdW5pY2F0aW9uIGFuZCBzdG9yYWdlCisJYXBwbGljYXRpb25zIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIAlUaGlzIGRvY3VtZW50YXRpb24gaXMgcHJvdmlkZWQgZm9yIGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gdXRpbGl6ZQorCXRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGxpYnJhcnkuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorICAKKyAgPGNoYXB0ZXIgaWQ9ImJ1Z3MiPgorICAgICA8dGl0bGU+S25vd24gQnVncyBBbmQgQXNzdW1wdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKwlOb25lLgkKKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InVzYWdlIj4KKyAgICAgCTx0aXRsZT5Vc2FnZTwvdGl0bGU+CisJPHBhcmE+CisJCVRoaXMgY2hhcHRlciBwcm92aWRlcyBleGFtcGxlcyBob3cgdG8gdXNlIHRoZSBsaWJyYXJ5LgorCTwvcGFyYT4KKwk8c2VjdDE+CisJCTx0aXRsZT5Jbml0aWFsaXppbmc8L3RpdGxlPgorCQk8cGFyYT4KKwkJCVRoZSBpbml0IGZ1bmN0aW9uIGluaXRfcnMgcmV0dXJucyBhIHBvaW50ZXIgdG8gYQorCQkJcnMgZGVjb2RlciBzdHJ1Y3R1cmUsIHdoaWNoIGhvbGRzIHRoZSBuZWNlc3NhcnkKKwkJCWluZm9ybWF0aW9uIGZvciBlbmNvZGluZywgZGVjb2RpbmcgYW5kIGVycm9yIGNvcnJlY3Rpb24KKwkJCXdpdGggdGhlIGdpdmVuIHBvbHlub21pYWwuIEl0IGVpdGhlciB1c2VzIGFuIGV4aXN0aW5nCisJCQltYXRjaGluZyBkZWNvZGVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lLiBPbiBjcmVhdGlvbiBhbGwKKwkJCXRoZSBsb29rdXAgdGFibGVzIGZvciBmYXN0IGVuL2RlY29kaW5nIGFyZSBjcmVhdGVkLgorCQkJVGhlIGZ1bmN0aW9uIG1heSB0YWtlIGEgd2hpbGUsIHNvIG1ha2Ugc3VyZSBub3QgdG8gCisJCQljYWxsIGl0IGluIGNyaXRpY2FsIGNvZGUgcGF0aHMuCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorLyogdGhlIFJlZWQgU29sb21vbiBjb250cm9sIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCByc19jb250cm9sICpyc19kZWNvZGVyOworCisvKiBTeW1ib2xzaXplIGlzIDEwIChiaXRzKQorICogUHJpbWl0dmUgcG9seW5vbWlhbCBpcyB4XjEwK3heMysxCisgKiBmaXJzdCBjb25zZWN1dGl2ZSByb290IGlzIDAKKyAqIHByaW1pdHZlIGVsZW1lbnQgdG8gZ2VuZXJhdGUgcm9vdHMgPSAxCisgKiBnZW5lcmF0b3IgcG9saW5vbWlhbCBkZWdyZWUgKG51bWJlciBvZiByb290cykgPSA2CisgKi8KK3JzX2RlY29kZXIgPSBpbml0X3JzICgxMCwgMHg0MDksIDAsIDEsIDYpOworCQk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdDE+CisJPHNlY3QxPgorCQk8dGl0bGU+RW5jb2Rpbmc8L3RpdGxlPgorCQk8cGFyYT4KKwkJCVRoZSBlbmNvZGVyIGNhbGN1bGF0ZXMgdGhlIFJlZWQtU29sb21vbiBjb2RlIG92ZXIKKwkJCXRoZSBnaXZlbiBkYXRhIGxlbmd0aCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gCisJCQl0aGUgcGFyaXR5IGJ1ZmZlci4gTm90ZSB0aGF0IHRoZSBwYXJpdHkgYnVmZmVyIG11c3QKKwkJCWJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIHRoZSBlbmNvZGVyLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJVGhlIGV4cGFuZGVkIGRhdGEgY2FuIGJlIGludmVydGVkIG9uIHRoZSBmbHkgYnkKKwkJCXByb3ZpZGluZyBhIG5vbiB6ZXJvIGludmVyc2lvbiBtYXNrLiBUaGUgZXhwYW5kZWQgZGF0YSBpcworCQkJWE9SJ2VkIHdpdGggdGhlIG1hc2suIFRoaXMgaXMgdXNlZCBlLmcuIGZvciBGTEFTSAorCQkJRUNDLCB3aGVyZSB0aGUgYWxsIDB4RkYgaXMgaW52ZXJ0ZWQgdG8gYW4gYWxsIDB4MDAuCisJCQlUaGUgUmVlZC1Tb2xvbW9uIGNvZGUgZm9yIGFsbCAweDAwIGlzIGFsbCAweDAwLiBUaGUKKwkJCWNvZGUgaXMgaW52ZXJ0ZWQgYmVmb3JlIHN0b3JpbmcgdG8gRkxBU0ggc28gaXQgaXMgMHhGRgorCQkJdG9vLiBUaGlzIHByZXZlbnQncyB0aGF0IHJlYWRpbmcgZnJvbSBhbiBlcmFzZWQgRkxBU0gKKwkJCXJlc3VsdHMgaW4gRUNDIGVycm9ycy4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCVRoZSBkYXRhYnl0ZXMgYXJlIGV4cGFuZGVkIHRvIHRoZSBnaXZlbiBzeW1ib2wgc2l6ZQorCQkJb24gdGhlIGZseS4gVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgZW5jb2RpbmcgY29udGludW91cworCQkJYml0c3RyZWFtcyB3aXRoIGEgc3ltYm9sIHNpemUgIT0gOCBhdCB0aGUgbW9tZW50LiBJZgorCQkJaXQgaXMgbmVjZXNzYXJ5IGl0IHNob3VsZCBiZSBub3QgYSBiaWcgZGVhbCB0byBpbXBsZW1lbnQKKwkJCXN1Y2ggZnVuY3Rpb25hbGl0eS4KKwkJPC9wYXJhPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CisvKiBQYXJpdHkgYnVmZmVyLiBTaXplID0gbnVtYmVyIG9mIHJvb3RzICovCit1aW50MTZfdCBwYXJbNl07CisvKiBJbml0aWFsaXplIHRoZSBwYXJpdHkgYnVmZmVyICovCittZW1zZXQocGFyLCAwLCBzaXplb2YocGFyKSk7CisvKiBFbmNvZGUgNTEyIGJ5dGUgaW4gZGF0YTguIFN0b3JlIHBhcml0eSBpbiBidWZmZXIgcGFyICovCitlbmNvZGVfcnM4IChyc19kZWNvZGVyLCBkYXRhOCwgNTEyLCBwYXIsIDApOworCQk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdDE+CisJPHNlY3QxPgorCQk8dGl0bGU+RGVjb2Rpbmc8L3RpdGxlPgorCQk8cGFyYT4KKwkJCVRoZSBkZWNvZGVyIGNhbGN1bGF0ZXMgdGhlIHN5bmRyb21lIG92ZXIKKwkJCXRoZSBnaXZlbiBkYXRhIGxlbmd0aCBhbmQgdGhlIHJlY2VpdmVkIHBhcml0eSBzeW1ib2xzCisJCQlhbmQgY29ycmVjdHMgZXJyb3JzIGluIHRoZSBkYXRhLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJSWYgYSBzeW5kcm9tZSBpcyBhdmFpbGFibGUgZnJvbSBhIGhhcmR3YXJlIGRlY29kZXIKKwkJCXRoZW4gdGhlIHN5bmRyb21lIGNhbGN1bGF0aW9uIGlzIHNraXBwZWQuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlUaGUgY29ycmVjdGlvbiBvZiB0aGUgZGF0YSBidWZmZXIgY2FuIGJlIHN1cHByZXNzZWQKKwkJCWJ5IHByb3ZpZGluZyBhIGNvcnJlY3Rpb24gcGF0dGVybiBidWZmZXIgYW5kIGFuIGVycm9yCisJCQlsb2NhdGlvbiBidWZmZXIgdG8gdGhlIGRlY29kZXIuIFRoZSBkZWNvZGVyIHN0b3JlcyB0aGUKKwkJCWNhbGN1bGF0ZWQgZXJyb3IgbG9jYXRpb24gYW5kIHRoZSBjb3JyZWN0aW9uIGJpdG1hc2sKKwkJCWluIHRoZSBnaXZlbiBidWZmZXJzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaGFyZHdhcmUKKwkJCWRlY29kZXJzIHdoaWNoIHVzZSBhIHdlaXJkIGJpdCBvcmRlcmluZyBzY2hlbWUuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlUaGUgZGF0YWJ5dGVzIGFyZSBleHBhbmRlZCB0byB0aGUgZ2l2ZW4gc3ltYm9sIHNpemUKKwkJCW9uIHRoZSBmbHkuIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGRlY29kaW5nIGNvbnRpbnVvdXMKKwkJCWJpdHN0cmVhbXMgd2l0aCBhIHN5bWJvbHNpemUgIT0gOCBhdCB0aGUgbW9tZW50LiBJZgorCQkJaXQgaXMgbmVjZXNzYXJ5IGl0IHNob3VsZCBiZSBub3QgYSBiaWcgZGVhbCB0byBpbXBsZW1lbnQKKwkJCXN1Y2ggZnVuY3Rpb25hbGl0eS4KKwkJPC9wYXJhPgorCQkKKwkJPHNlY3QyPgorCQk8dGl0bGU+CisJCQlEZWNvZGluZyB3aXRoIHN5bmRyb21lIGNhbGN1bGF0aW9uLCBkaXJlY3QgZGF0YSBjb3JyZWN0aW9uCisJCTwvdGl0bGU+CisJCTxwcm9ncmFtbGlzdGluZz4KKy8qIFBhcml0eSBidWZmZXIuIFNpemUgPSBudW1iZXIgb2Ygcm9vdHMgKi8KK3VpbnQxNl90IHBhcls2XTsKK3VpbnQ4X3QgIGRhdGFbNTEyXTsKK2ludCBudW1lcnI7CisvKiBSZWNlaXZlIGRhdGEgKi8KKy4uLi4uCisvKiBSZWNlaXZlIHBhcml0eSAqLworLi4uLi4KKy8qIERlY29kZSA1MTIgYnl0ZSBpbiBkYXRhOC4qLworbnVtZXJyID0gZGVjb2RlX3JzOCAocnNfZGVjb2RlciwgZGF0YTgsIHBhciwgNTEyLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9zZWN0Mj4KKworCQk8c2VjdDI+CisJCTx0aXRsZT4KKwkJCURlY29kaW5nIHdpdGggc3luZHJvbWUgZ2l2ZW4gYnkgaGFyZHdhcmUgZGVjb2RlciwgZGlyZWN0IGRhdGEgY29ycmVjdGlvbgorCQk8L3RpdGxlPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CisvKiBQYXJpdHkgYnVmZmVyLiBTaXplID0gbnVtYmVyIG9mIHJvb3RzICovCit1aW50MTZfdCBwYXJbNl0sIHN5bls2XTsKK3VpbnQ4X3QgIGRhdGFbNTEyXTsKK2ludCBudW1lcnI7CisvKiBSZWNlaXZlIGRhdGEgKi8KKy4uLi4uCisvKiBSZWNlaXZlIHBhcml0eSAqLworLi4uLi4KKy8qIEdldCBzeW5kcm9tZSBmcm9tIGhhcmR3YXJlIGRlY29kZXIgKi8KKy4uLi4uCisvKiBEZWNvZGUgNTEyIGJ5dGUgaW4gZGF0YTguKi8KK251bWVyciA9IGRlY29kZV9yczggKHJzX2RlY29kZXIsIGRhdGE4LCBwYXIsIDUxMiwgc3luLCAwLCBOVUxMLCAwLCBOVUxMKTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9zZWN0Mj4KKworCQk8c2VjdDI+CisJCTx0aXRsZT4KKwkJCURlY29kaW5nIHdpdGggc3luZHJvbWUgZ2l2ZW4gYnkgaGFyZHdhcmUgZGVjb2Rlciwgbm8gZGlyZWN0IGRhdGEgY29ycmVjdGlvbi4KKwkJPC90aXRsZT4KKwkJPHBhcmE+CisJCQlOb3RlOiBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZ2l2ZSBkYXRhIGFuZCByZWNlaXZlZCBwYXJpdHkgdG8gdGhlIGRlY29kZXIuCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorLyogUGFyaXR5IGJ1ZmZlci4gU2l6ZSA9IG51bWJlciBvZiByb290cyAqLwordWludDE2X3QgcGFyWzZdLCBzeW5bNl0sIGNvcnJbOF07Cit1aW50OF90ICBkYXRhWzUxMl07CitpbnQgbnVtZXJyLCBlcnJwb3NbOF07CisvKiBSZWNlaXZlIGRhdGEgKi8KKy4uLi4uCisvKiBSZWNlaXZlIHBhcml0eSAqLworLi4uLi4KKy8qIEdldCBzeW5kcm9tZSBmcm9tIGhhcmR3YXJlIGRlY29kZXIgKi8KKy4uLi4uCisvKiBEZWNvZGUgNTEyIGJ5dGUgaW4gZGF0YTguKi8KK251bWVyciA9IGRlY29kZV9yczggKHJzX2RlY29kZXIsIE5VTEwsIE5VTEwsIDUxMiwgc3luLCAwLCBlcnJwb3MsIDAsIGNvcnIpOworZm9yIChpID0gMDsgaSAmbHQ7IG51bWVycjsgaSsrKSB7CisJZG9fZXJyb3JfY29ycmVjdGlvbl9pbl95b3VyX2J1ZmZlcihlcnJwb3NbaV0sIGNvcnJbaV0pOworfQorCQk8L3Byb2dyYW1saXN0aW5nPgorCQk8L3NlY3QyPgorCTwvc2VjdDE+CisJPHNlY3QxPgorCQk8dGl0bGU+Q2xlYW51cDwvdGl0bGU+CisJCTxwYXJhPgorCQkJVGhlIGZ1bmN0aW9uIGZyZWVfcnMgZnJlZXMgdGhlIGFsbG9jYXRlZCByZXNvdXJjZXMsCisJCQlpZiB0aGUgY2FsbGVyIGlzIHRoZSBsYXN0IHVzZXIgb2YgdGhlIGRlY29kZXIuCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorLyogUmVsZWFzZSByZXNvdXJjZXMgKi8KK2ZyZWVfcnMocnNfZGVjb2Rlcik7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0MT4KKworICA8L2NoYXB0ZXI+CisJCisgIDxjaGFwdGVyIGlkPSJzdHJ1Y3RzIj4KKyAgICAgPHRpdGxlPlN0cnVjdHVyZXM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAgICAgVGhpcyBjaGFwdGVyIGNvbnRhaW5zIHRoZSBhdXRvZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb2YgdGhlIHN0cnVjdHVyZXMgd2hpY2ggYXJlCisgICAgIHVzZWQgaW4gdGhlIFJlZWQtU29sb21vbiBMaWJyYXJ5IGFuZCBhcmUgcmVsZXZhbnQgZm9yIGEgZGV2ZWxvcGVyLgorICAgICA8L3BhcmE+CishSWluY2x1ZGUvbGludXgvcnNsaWIuaAorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyAgICAgPHBhcmE+CisgICAgIFRoaXMgY2hhcHRlciBjb250YWlucyB0aGUgYXV0b2dlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9mIHRoZSBSZWVkLVNvbG9tb24gZnVuY3Rpb25zCisgICAgIHdoaWNoIGFyZSBleHBvcnRlZC4KKyAgICAgPC9wYXJhPgorIUVsaWIvcmVlZF9zb2xvbW9uL3JlZWRfc29sb21vbi5jCisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJjcmVkaXRzIj4KKyAgICAgPHRpdGxlPkNyZWRpdHM8L3RpdGxlPgorCTxwYXJhPgorCQlUaGUgbGlicmFyeSBjb2RlIGZvciBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgd2FzIHdyaXR0ZW4gYnkgUGhpbCBLYXJuLgorCTwvcGFyYT4KKwk8cHJvZ3JhbWxpc3Rpbmc+CisJCUNvcHlyaWdodCAyMDAyLCBQaGlsIEthcm4sIEtBOVEKKyAJCU1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkKKwk8L3Byb2dyYW1saXN0aW5nPgorCTxwYXJhPgorCQlUaGUgd3JhcHBlciBmdW5jdGlvbnMgYW5kIGludGVyZmFjZXMgYXJlIHdyaXR0ZW4gYnkgVGhvbWFzIEdsZWl4bmVyCisJPC9wYXJhPgorCTxwYXJhPgorCQlNYW55IHVzZXJzIGhhdmUgcHJvdmlkZWQgYnVnZml4ZXMsIGltcHJvdmVtZW50cyBhbmQgaGVscGluZyBoYW5kcyBmb3IgdGVzdGluZy4KKwkJVGhhbmtzIGEgbG90LgorCTwvcGFyYT4KKwk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCB0byB0aGlzIGRvY3VtZW50OgorCTwvcGFyYT4KKwk8cGFyYT4KKwkJVGhvbWFzIEdsZWl4bmVyPGVtYWlsPnRnbHhAbGludXRyb25peC5kZTwvZW1haWw+CisJPC9wYXJhPgorICA8L2NoYXB0ZXI+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbHNtLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbHNtLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzODIyMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9sc20udG1wbApAQCAtMCwwICsxLDI2NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBhcnRpY2xlIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxhcnRpY2xlIGNsYXNzPSJ3aGl0ZXBhcGVyIiBpZD0iTGludXhTZWN1cml0eU1vZHVsZSIgbGFuZz0iZW4iPgorIDxhcnRpY2xlaW5mbz4KKyA8dGl0bGU+TGludXggU2VjdXJpdHkgTW9kdWxlczogIEdlbmVyYWwgU2VjdXJpdHkgSG9va3MgZm9yIExpbnV4PC90aXRsZT4KKyA8YXV0aG9yZ3JvdXA+CisgPGF1dGhvcj4KKyA8Zmlyc3RuYW1lPlN0ZXBoZW48L2ZpcnN0bmFtZT4gCisgPHN1cm5hbWU+U21hbGxleTwvc3VybmFtZT4KKyA8YWZmaWxpYXRpb24+CisgPG9yZ25hbWU+TkFJIExhYnM8L29yZ25hbWU+CisgPGFkZHJlc3M+PGVtYWlsPnNzbWFsbGV5QG5haS5jb208L2VtYWlsPjwvYWRkcmVzcz4KKyA8L2FmZmlsaWF0aW9uPgorIDwvYXV0aG9yPgorIDxhdXRob3I+CisgPGZpcnN0bmFtZT5UaW1vdGh5PC9maXJzdG5hbWU+IAorIDxzdXJuYW1lPkZyYXNlcjwvc3VybmFtZT4KKyA8YWZmaWxpYXRpb24+CisgPG9yZ25hbWU+TkFJIExhYnM8L29yZ25hbWU+CisgPGFkZHJlc3M+PGVtYWlsPnRmcmFzZXJAbmFpLmNvbTwvZW1haWw+PC9hZGRyZXNzPgorIDwvYWZmaWxpYXRpb24+CisgPC9hdXRob3I+CisgPGF1dGhvcj4KKyA8Zmlyc3RuYW1lPkNocmlzPC9maXJzdG5hbWU+IAorIDxzdXJuYW1lPlZhbmNlPC9zdXJuYW1lPgorIDxhZmZpbGlhdGlvbj4KKyA8b3JnbmFtZT5OQUkgTGFiczwvb3JnbmFtZT4KKyA8YWRkcmVzcz48ZW1haWw+Y3ZhbmNlQG5haS5jb208L2VtYWlsPjwvYWRkcmVzcz4KKyA8L2FmZmlsaWF0aW9uPgorIDwvYXV0aG9yPgorIDwvYXV0aG9yZ3JvdXA+CisgPC9hcnRpY2xlaW5mbz4KKworPHNlY3QxPjx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCis8cGFyYT4KK0luIE1hcmNoIDIwMDEsIHRoZSBOYXRpb25hbCBTZWN1cml0eSBBZ2VuY3kgKE5TQSkgZ2F2ZSBhIHByZXNlbnRhdGlvbgorYWJvdXQgU2VjdXJpdHktRW5oYW5jZWQgTGludXggKFNFTGludXgpIGF0IHRoZSAyLjUgTGludXggS2VybmVsCitTdW1taXQuICBTRUxpbnV4IGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGZsZXhpYmxlIGFuZCBmaW5lLWdyYWluZWQKK25vbmRpc2NyZXRpb25hcnkgYWNjZXNzIGNvbnRyb2xzIGluIHRoZSBMaW51eCBrZXJuZWwsIG9yaWdpbmFsbHkKK2ltcGxlbWVudGVkIGFzIGl0cyBvd24gcGFydGljdWxhciBrZXJuZWwgcGF0Y2guICBTZXZlcmFsIG90aGVyCitzZWN1cml0eSBwcm9qZWN0cyAoZS5nLiBSU0JBQywgTWVkdXNhKSBoYXZlIGFsc28gZGV2ZWxvcGVkIGZsZXhpYmxlCithY2Nlc3MgY29udHJvbCBhcmNoaXRlY3R1cmVzIGZvciB0aGUgTGludXgga2VybmVsLCBhbmQgdmFyaW91cworcHJvamVjdHMgaGF2ZSBkZXZlbG9wZWQgcGFydGljdWxhciBhY2Nlc3MgY29udHJvbCBtb2RlbHMgZm9yIExpbnV4CisoZS5nLiBMSURTLCBEVEUsIFN1YkRvbWFpbikuICBFYWNoIHByb2plY3QgaGFzIGRldmVsb3BlZCBhbmQKK21haW50YWluZWQgaXRzIG93biBrZXJuZWwgcGF0Y2ggdG8gc3VwcG9ydCBpdHMgc2VjdXJpdHkgbmVlZHMuCis8L3BhcmE+CisKKzxwYXJhPgorSW4gcmVzcG9uc2UgdG8gdGhlIE5TQSBwcmVzZW50YXRpb24sIExpbnVzIFRvcnZhbGRzIG1hZGUgYSBzZXQgb2YKK3JlbWFya3MgdGhhdCBkZXNjcmliZWQgYSBzZWN1cml0eSBmcmFtZXdvcmsgaGUgd291bGQgYmUgd2lsbGluZyB0bworY29uc2lkZXIgZm9yIGluY2x1c2lvbiBpbiB0aGUgbWFpbnN0cmVhbSBMaW51eCBrZXJuZWwuICBIZSBkZXNjcmliZWQgYQorZ2VuZXJhbCBmcmFtZXdvcmsgdGhhdCB3b3VsZCBwcm92aWRlIGEgc2V0IG9mIHNlY3VyaXR5IGhvb2tzIHRvCitjb250cm9sIG9wZXJhdGlvbnMgb24ga2VybmVsIG9iamVjdHMgYW5kIGEgc2V0IG9mIG9wYXF1ZSBzZWN1cml0eQorZmllbGRzIGluIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG1haW50YWluaW5nIHNlY3VyaXR5IGF0dHJpYnV0ZXMuCitUaGlzIGZyYW1ld29yayBjb3VsZCB0aGVuIGJlIHVzZWQgYnkgbG9hZGFibGUga2VybmVsIG1vZHVsZXMgdG8KK2ltcGxlbWVudCBhbnkgZGVzaXJlZCBtb2RlbCBvZiBzZWN1cml0eS4gIExpbnVzIGFsc28gc3VnZ2VzdGVkIHRoZQorcG9zc2liaWxpdHkgb2YgbWlncmF0aW5nIHRoZSBMaW51eCBjYXBhYmlsaXRpZXMgY29kZSBpbnRvIHN1Y2ggYQorbW9kdWxlLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBMaW51eCBTZWN1cml0eSBNb2R1bGVzIChMU00pIHByb2plY3Qgd2FzIHN0YXJ0ZWQgYnkgV2lyZVggdG8KK2RldmVsb3Agc3VjaCBhIGZyYW1ld29yay4gIExTTSBpcyBhIGpvaW50IGRldmVsb3BtZW50IGVmZm9ydCBieQorc2V2ZXJhbCBzZWN1cml0eSBwcm9qZWN0cywgaW5jbHVkaW5nIEltbXVuaXgsIFNFTGludXgsIFNHSSBhbmQgSmFudXMsCithbmQgc2V2ZXJhbCBpbmRpdmlkdWFscywgaW5jbHVkaW5nIEdyZWcgS3JvYWgtSGFydG1hbiBhbmQgSmFtZXMKK01vcnJpcywgdG8gZGV2ZWxvcCBhIExpbnV4IGtlcm5lbCBwYXRjaCB0aGF0IGltcGxlbWVudHMgdGhpcworZnJhbWV3b3JrLiAgVGhlIHBhdGNoIGlzIGN1cnJlbnRseSB0cmFja2luZyB0aGUgMi40IHNlcmllcyBhbmQgaXMKK3RhcmdldGVkIGZvciBpbnRlZ3JhdGlvbiBpbnRvIHRoZSAyLjUgZGV2ZWxvcG1lbnQgc2VyaWVzLiAgVGhpcwordGVjaG5pY2FsIHJlcG9ydCBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgZnJhbWV3b3JrIGFuZCB0aGUgZXhhbXBsZQorY2FwYWJpbGl0aWVzIHNlY3VyaXR5IG1vZHVsZSBwcm92aWRlZCBieSB0aGUgTFNNIGtlcm5lbCBwYXRjaC4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJmcmFtZXdvcmsiPjx0aXRsZT5MU00gRnJhbWV3b3JrPC90aXRsZT4KKworPHBhcmE+CitUaGUgTFNNIGtlcm5lbCBwYXRjaCBwcm92aWRlcyBhIGdlbmVyYWwga2VybmVsIGZyYW1ld29yayB0byBzdXBwb3J0CitzZWN1cml0eSBtb2R1bGVzLiAgSW4gcGFydGljdWxhciwgdGhlIExTTSBmcmFtZXdvcmsgaXMgcHJpbWFyaWx5Citmb2N1c2VkIG9uIHN1cHBvcnRpbmcgYWNjZXNzIGNvbnRyb2wgbW9kdWxlcywgYWx0aG91Z2ggZnV0dXJlCitkZXZlbG9wbWVudCBpcyBsaWtlbHkgdG8gYWRkcmVzcyBvdGhlciBzZWN1cml0eSBuZWVkcyBzdWNoIGFzCithdWRpdGluZy4gIEJ5IGl0c2VsZiwgdGhlIGZyYW1ld29yayBkb2VzIG5vdCBwcm92aWRlIGFueSBhZGRpdGlvbmFsCitzZWN1cml0eTsgaXQgbWVyZWx5IHByb3ZpZGVzIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IHNlY3VyaXR5Cittb2R1bGVzLiAgVGhlIExTTSBrZXJuZWwgcGF0Y2ggYWxzbyBtb3ZlcyBtb3N0IG9mIHRoZSBjYXBhYmlsaXRpZXMKK2xvZ2ljIGludG8gYW4gb3B0aW9uYWwgc2VjdXJpdHkgbW9kdWxlLCB3aXRoIHRoZSBzeXN0ZW0gZGVmYXVsdGluZwordG8gdGhlIHRyYWRpdGlvbmFsIHN1cGVydXNlciBsb2dpYy4gIFRoaXMgY2FwYWJpbGl0aWVzIG1vZHVsZQoraXMgZGlzY3Vzc2VkIGZ1cnRoZXIgaW4gPHhyZWYgbGlua2VuZD0iY2FwIi8+LgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBMU00ga2VybmVsIHBhdGNoIGFkZHMgc2VjdXJpdHkgZmllbGRzIHRvIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMKK2FuZCBpbnNlcnRzIGNhbGxzIHRvIGhvb2sgZnVuY3Rpb25zIGF0IGNyaXRpY2FsIHBvaW50cyBpbiB0aGUga2VybmVsCitjb2RlIHRvIG1hbmFnZSB0aGUgc2VjdXJpdHkgZmllbGRzIGFuZCB0byBwZXJmb3JtIGFjY2VzcyBjb250cm9sLiAgSXQKK2Fsc28gYWRkcyBmdW5jdGlvbnMgZm9yIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIHNlY3VyaXR5Cittb2R1bGVzLCBhbmQgYWRkcyBhIGdlbmVyYWwgPGZ1bmN0aW9uPnNlY3VyaXR5PC9mdW5jdGlvbj4gc3lzdGVtIGNhbGwKK3RvIHN1cHBvcnQgbmV3IHN5c3RlbSBjYWxscyBmb3Igc2VjdXJpdHktYXdhcmUgYXBwbGljYXRpb25zLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBMU00gc2VjdXJpdHkgZmllbGRzIGFyZSBzaW1wbHkgPHR5cGU+dm9pZCo8L3R5cGU+IHBvaW50ZXJzLiAgRm9yCitwcm9jZXNzIGFuZCBwcm9ncmFtIGV4ZWN1dGlvbiBzZWN1cml0eSBpbmZvcm1hdGlvbiwgc2VjdXJpdHkgZmllbGRzCit3ZXJlIGFkZGVkIHRvIDxzdHJ1Y3RuYW1lPnN0cnVjdCB0YXNrX3N0cnVjdDwvc3RydWN0bmFtZT4gYW5kIAorPHN0cnVjdG5hbWU+c3RydWN0IGxpbnV4X2JpbnBybTwvc3RydWN0bmFtZT4uICBGb3IgZmlsZXN5c3RlbSBzZWN1cml0eQoraW5mb3JtYXRpb24sIGEgc2VjdXJpdHkgZmllbGQgd2FzIGFkZGVkIHRvIAorPHN0cnVjdG5hbWU+c3RydWN0IHN1cGVyX2Jsb2NrPC9zdHJ1Y3RuYW1lPi4gIEZvciBwaXBlLCBmaWxlLCBhbmQgc29ja2V0CitzZWN1cml0eSBpbmZvcm1hdGlvbiwgc2VjdXJpdHkgZmllbGRzIHdlcmUgYWRkZWQgdG8gCis8c3RydWN0bmFtZT5zdHJ1Y3QgaW5vZGU8L3N0cnVjdG5hbWU+IGFuZCAKKzxzdHJ1Y3RuYW1lPnN0cnVjdCBmaWxlPC9zdHJ1Y3RuYW1lPi4gIEZvciBwYWNrZXQgYW5kIG5ldHdvcmsgZGV2aWNlIHNlY3VyaXR5CitpbmZvcm1hdGlvbiwgc2VjdXJpdHkgZmllbGRzIHdlcmUgYWRkZWQgdG8KKzxzdHJ1Y3RuYW1lPnN0cnVjdCBza19idWZmPC9zdHJ1Y3RuYW1lPiBhbmQKKzxzdHJ1Y3RuYW1lPnN0cnVjdCBuZXRfZGV2aWNlPC9zdHJ1Y3RuYW1lPi4gIEZvciBTeXN0ZW0gViBJUEMgc2VjdXJpdHkKK2luZm9ybWF0aW9uLCBzZWN1cml0eSBmaWVsZHMgd2VyZSBhZGRlZCB0bworPHN0cnVjdG5hbWU+c3RydWN0IGtlcm5faXBjX3Blcm08L3N0cnVjdG5hbWU+IGFuZAorPHN0cnVjdG5hbWU+c3RydWN0IG1zZ19tc2c8L3N0cnVjdG5hbWU+OyBhZGRpdGlvbmFsbHksIHRoZSBkZWZpbml0aW9ucworZm9yIDxzdHJ1Y3RuYW1lPnN0cnVjdCBtc2dfbXNnPC9zdHJ1Y3RuYW1lPiwgPHN0cnVjdG5hbWU+c3RydWN0IAorbXNnX3F1ZXVlPC9zdHJ1Y3RuYW1lPiwgYW5kIDxzdHJ1Y3RuYW1lPnN0cnVjdCAKK3NobWlkX2tlcm5lbDwvc3RydWN0bmFtZT4gd2VyZSBtb3ZlZCB0byBoZWFkZXIgZmlsZXMKKyg8ZmlsZW5hbWU+aW5jbHVkZS9saW51eC9tc2cuaDwvZmlsZW5hbWU+IGFuZAorPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvc2htLmg8L2ZpbGVuYW1lPiBhcyBhcHByb3ByaWF0ZSkgdG8gYWxsb3cKK3RoZSBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZSB0aGVzZSBkZWZpbml0aW9ucy4KKzwvcGFyYT4KKworPHBhcmE+CitFYWNoIExTTSBob29rIGlzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBhIGdsb2JhbCB0YWJsZSwKK3NlY3VyaXR5X29wcy4gVGhpcyB0YWJsZSBpcyBhCis8c3RydWN0bmFtZT5zZWN1cml0eV9vcGVyYXRpb25zPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgYXMgZGVmaW5lZCBieQorPGZpbGVuYW1lPmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDwvZmlsZW5hbWU+LiAgRGV0YWlsZWQgZG9jdW1lbnRhdGlvbgorZm9yIGVhY2ggaG9vayBpcyBpbmNsdWRlZCBpbiB0aGlzIGhlYWRlciBmaWxlLiAgQXQgcHJlc2VudCwgdGhpcworc3RydWN0dXJlIGNvbnNpc3RzIG9mIGEgY29sbGVjdGlvbiBvZiBzdWJzdHJ1Y3R1cmVzIHRoYXQgZ3JvdXAgcmVsYXRlZAoraG9va3MgYmFzZWQgb24gdGhlIGtlcm5lbCBvYmplY3QgKGUuZy4gdGFzaywgaW5vZGUsIGZpbGUsIHNrX2J1ZmYsCitldGMpIGFzIHdlbGwgYXMgc29tZSB0b3AtbGV2ZWwgaG9vayBmdW5jdGlvbiBwb2ludGVycyBmb3Igc3lzdGVtCitvcGVyYXRpb25zLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgbGlrZWx5IHRvIGJlIGZsYXR0ZW5lZCBpbiB0aGUgZnV0dXJlCitmb3IgcGVyZm9ybWFuY2UuICBUaGUgcGxhY2VtZW50IG9mIHRoZSBob29rIGNhbGxzIGluIHRoZSBrZXJuZWwgY29kZQoraXMgZGVzY3JpYmVkIGJ5IHRoZSAiY2FsbGVkOiIgbGluZXMgaW4gdGhlIHBlci1ob29rIGRvY3VtZW50YXRpb24gaW4KK3RoZSBoZWFkZXIgZmlsZS4gIFRoZSBob29rIGNhbGxzIGNhbiBhbHNvIGJlIGVhc2lseSBmb3VuZCBpbiB0aGUKK2tlcm5lbCBjb2RlIGJ5IGxvb2tpbmcgZm9yIHRoZSBzdHJpbmcgInNlY3VyaXR5X29wcy0+Ii4KKworPC9wYXJhPgorCis8cGFyYT4KK0xpbnVzIG1lbnRpb25lZCBwZXItcHJvY2VzcyBzZWN1cml0eSBob29rcyBpbiBoaXMgb3JpZ2luYWwgcmVtYXJrcyBhcyBhCitwb3NzaWJsZSBhbHRlcm5hdGl2ZSB0byBnbG9iYWwgc2VjdXJpdHkgaG9va3MuICBIb3dldmVyLCBpZiBMU00gd2VyZQordG8gc3RhcnQgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgcGVyLXByb2Nlc3MgaG9va3MsIHRoZW4gdGhlIGJhc2UKK2ZyYW1ld29yayB3b3VsZCBoYXZlIHRvIGRlYWwgd2l0aCBob3cgdG8gaGFuZGxlIG9wZXJhdGlvbnMgdGhhdAoraW52b2x2ZSBtdWx0aXBsZSBwcm9jZXNzZXMgKGUuZy4ga2lsbCksIHNpbmNlIGVhY2ggcHJvY2VzcyBtaWdodCBoYXZlCitpdHMgb3duIGhvb2sgZm9yIGNvbnRyb2xsaW5nIHRoZSBvcGVyYXRpb24uICBUaGlzIHdvdWxkIHJlcXVpcmUgYQorZ2VuZXJhbCBtZWNoYW5pc20gZm9yIGNvbXBvc2luZyBob29rcyBpbiB0aGUgYmFzZSBmcmFtZXdvcmsuCitBZGRpdGlvbmFsbHksIExTTSB3b3VsZCBzdGlsbCBuZWVkIGdsb2JhbCBob29rcyBmb3Igb3BlcmF0aW9ucyB0aGF0CitoYXZlIG5vIHByb2Nlc3MgY29udGV4dCAoZS5nLiBuZXR3b3JrIGlucHV0IG9wZXJhdGlvbnMpLgorQ29uc2VxdWVudGx5LCBMU00gcHJvdmlkZXMgZ2xvYmFsIHNlY3VyaXR5IGhvb2tzLCBidXQgYSBzZWN1cml0eQorbW9kdWxlIGlzIGZyZWUgdG8gaW1wbGVtZW50IHBlci1wcm9jZXNzIGhvb2tzICh3aGVyZSB0aGF0IG1ha2VzIHNlbnNlKQorYnkgc3RvcmluZyBhIHNlY3VyaXR5X29wcyB0YWJsZSBpbiBlYWNoIHByb2Nlc3MnIHNlY3VyaXR5IGZpZWxkIGFuZAordGhlbiBpbnZva2luZyB0aGVzZSBwZXItcHJvY2VzcyBob29rcyBmcm9tIHRoZSBnbG9iYWwgaG9va3MuCitUaGUgcHJvYmxlbSBvZiBjb21wb3NpdGlvbiBpcyB0aHVzIGRlZmVycmVkIHRvIHRoZSBtb2R1bGUuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIGdsb2JhbCBzZWN1cml0eV9vcHMgdGFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gYSBzZXQgb2YgaG9vaworZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGEgZHVtbXkgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcHJvdmlkZXMKK3RyYWRpdGlvbmFsIHN1cGVydXNlciBsb2dpYy4gIEEgPGZ1bmN0aW9uPnJlZ2lzdGVyX3NlY3VyaXR5PC9mdW5jdGlvbj4KK2Z1bmN0aW9uIChpbiA8ZmlsZW5hbWU+c2VjdXJpdHkvc2VjdXJpdHkuYzwvZmlsZW5hbWU+KSBpcyBwcm92aWRlZCB0bworYWxsb3cgYSBzZWN1cml0eSBtb2R1bGUgdG8gc2V0IHNlY3VyaXR5X29wcyB0byByZWZlciB0byBpdHMgb3duIGhvb2sKK2Z1bmN0aW9ucywgYW5kIGFuIDxmdW5jdGlvbj51bnJlZ2lzdGVyX3NlY3VyaXR5PC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMKK3Byb3ZpZGVkIHRvIHJldmVydCBzZWN1cml0eV9vcHMgdG8gdGhlIGR1bW15IG1vZHVsZSBob29rcy4gIFRoaXMKK21lY2hhbmlzbSBpcyB1c2VkIHRvIHNldCB0aGUgcHJpbWFyeSBzZWN1cml0eSBtb2R1bGUsIHdoaWNoIGlzCityZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBmaW5hbCBkZWNpc2lvbiBmb3IgZWFjaCBob29rLgorPC9wYXJhPgorCis8cGFyYT4KK0xTTSBhbHNvIHByb3ZpZGVzIGEgc2ltcGxlIG1lY2hhbmlzbSBmb3Igc3RhY2tpbmcgYWRkaXRpb25hbCBzZWN1cml0eQorbW9kdWxlcyB3aXRoIHRoZSBwcmltYXJ5IHNlY3VyaXR5IG1vZHVsZS4gIEl0IGRlZmluZXMKKzxmdW5jdGlvbj5yZWdpc3Rlcl9zZWN1cml0eTwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPnVucmVnaXN0ZXJfc2VjdXJpdHk8L2Z1bmN0aW9uPiBob29rcyBpbiB0aGUKKzxzdHJ1Y3RuYW1lPnNlY3VyaXR5X29wZXJhdGlvbnM8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSBhbmQgcHJvdmlkZXMKKzxmdW5jdGlvbj5tb2RfcmVnX3NlY3VyaXR5PC9mdW5jdGlvbj4gYW5kCis8ZnVuY3Rpb24+bW9kX3VucmVnX3NlY3VyaXR5PC9mdW5jdGlvbj4gZnVuY3Rpb25zIHRoYXQgaW52b2tlIHRoZXNlCitob29rcyBhZnRlciBwZXJmb3JtaW5nIHNvbWUgc2FuaXR5IGNoZWNraW5nLiAgQSBzZWN1cml0eSBtb2R1bGUgY2FuCitjYWxsIHRoZXNlIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBzdGFjayB3aXRoIG90aGVyIG1vZHVsZXMuICBIb3dldmVyLAordGhlIGFjdHVhbCBkZXRhaWxzIG9mIGhvdyB0aGlzIHN0YWNraW5nIGlzIGhhbmRsZWQgYXJlIGRlZmVycmVkIHRvIHRoZQorbW9kdWxlLCB3aGljaCBjYW4gaW1wbGVtZW50IHRoZXNlIGhvb2tzIGluIGFueSB3YXkgaXQgd2lzaGVzCisoaW5jbHVkaW5nIGFsd2F5cyByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgZG9lcyBub3Qgd2lzaCB0byBzdXBwb3J0CitzdGFja2luZykuICBJbiB0aGlzIG1hbm5lciwgTFNNIGFnYWluIGRlZmVycyB0aGUgcHJvYmxlbSBvZgorY29tcG9zaXRpb24gdG8gdGhlIG1vZHVsZS4KKzwvcGFyYT4KKworPHBhcmE+CitBbHRob3VnaCB0aGUgTFNNIGhvb2tzIGFyZSBvcmdhbml6ZWQgaW50byBzdWJzdHJ1Y3R1cmVzIGJhc2VkIG9uCitrZXJuZWwgb2JqZWN0LCBhbGwgb2YgdGhlIGhvb2tzIGNhbiBiZSB2aWV3ZWQgYXMgZmFsbGluZyBpbnRvIHR3bworbWFqb3IgY2F0ZWdvcmllczogaG9va3MgdGhhdCBhcmUgdXNlZCB0byBtYW5hZ2UgdGhlIHNlY3VyaXR5IGZpZWxkcworYW5kIGhvb2tzIHRoYXQgYXJlIHVzZWQgdG8gcGVyZm9ybSBhY2Nlc3MgY29udHJvbC4gIEV4YW1wbGVzIG9mIHRoZQorZmlyc3QgY2F0ZWdvcnkgb2YgaG9va3MgaW5jbHVkZSB0aGUKKzxmdW5jdGlvbj5hbGxvY19zZWN1cml0eTwvZnVuY3Rpb24+IGFuZAorPGZ1bmN0aW9uPmZyZWVfc2VjdXJpdHk8L2Z1bmN0aW9uPiBob29rcyBkZWZpbmVkIGZvciBlYWNoIGtlcm5lbCBkYXRhCitzdHJ1Y3R1cmUgdGhhdCBoYXMgYSBzZWN1cml0eSBmaWVsZC4gIFRoZXNlIGhvb2tzIGFyZSB1c2VkIHRvIGFsbG9jYXRlCithbmQgZnJlZSBzZWN1cml0eSBzdHJ1Y3R1cmVzIGZvciBrZXJuZWwgb2JqZWN0cy4gIFRoZSBmaXJzdCBjYXRlZ29yeQorb2YgaG9va3MgYWxzbyBpbmNsdWRlcyBob29rcyB0aGF0IHNldCBpbmZvcm1hdGlvbiBpbiB0aGUgc2VjdXJpdHkKK2ZpZWxkIGFmdGVyIGFsbG9jYXRpb24sIHN1Y2ggYXMgdGhlIDxmdW5jdGlvbj5wb3N0X2xvb2t1cDwvZnVuY3Rpb24+Citob29rIGluIDxzdHJ1Y3RuYW1lPnN0cnVjdCBpbm9kZV9zZWN1cml0eV9vcHM8L3N0cnVjdG5hbWU+LiAgVGhpcyBob29rCitpcyB1c2VkIHRvIHNldCBzZWN1cml0eSBpbmZvcm1hdGlvbiBmb3IgaW5vZGVzIGFmdGVyIHN1Y2Nlc3NmdWwgbG9va3VwCitvcGVyYXRpb25zLiAgQW4gZXhhbXBsZSBvZiB0aGUgc2Vjb25kIGNhdGVnb3J5IG9mIGhvb2tzIGlzIHRoZQorPGZ1bmN0aW9uPnBlcm1pc3Npb248L2Z1bmN0aW9uPiBob29rIGluIAorPHN0cnVjdG5hbWU+c3RydWN0IGlub2RlX3NlY3VyaXR5X29wczwvc3RydWN0bmFtZT4uICBUaGlzIGhvb2sgY2hlY2tzCitwZXJtaXNzaW9uIHdoZW4gYWNjZXNzaW5nIGFuIGlub2RlLgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9ImNhcCI+PHRpdGxlPkxTTSBDYXBhYmlsaXRpZXMgTW9kdWxlPC90aXRsZT4KKworPHBhcmE+CitUaGUgTFNNIGtlcm5lbCBwYXRjaCBtb3ZlcyBtb3N0IG9mIHRoZSBleGlzdGluZyBQT1NJWC4xZSBjYXBhYmlsaXRpZXMKK2xvZ2ljIGludG8gYW4gb3B0aW9uYWwgc2VjdXJpdHkgbW9kdWxlIHN0b3JlZCBpbiB0aGUgZmlsZQorPGZpbGVuYW1lPnNlY3VyaXR5L2NhcGFiaWxpdHkuYzwvZmlsZW5hbWU+LiAgVGhpcyBjaGFuZ2UgYWxsb3dzCit1c2VycyB3aG8gZG8gbm90IHdhbnQgdG8gdXNlIGNhcGFiaWxpdGllcyB0byBvbWl0IHRoaXMgY29kZSBlbnRpcmVseQorZnJvbSB0aGVpciBrZXJuZWwsIGluc3RlYWQgdXNpbmcgdGhlIGR1bW15IG1vZHVsZSBmb3IgdHJhZGl0aW9uYWwKK3N1cGVydXNlciBsb2dpYyBvciBhbnkgb3RoZXIgbW9kdWxlIHRoYXQgdGhleSBkZXNpcmUuICBUaGlzIGNoYW5nZQorYWxzbyBhbGxvd3MgdGhlIGRldmVsb3BlcnMgb2YgdGhlIGNhcGFiaWxpdGllcyBsb2dpYyB0byBtYWludGFpbiBhbmQKK2VuaGFuY2UgdGhlaXIgY29kZSBtb3JlIGZyZWVseSwgd2l0aG91dCBuZWVkaW5nIHRvIGludGVncmF0ZSBwYXRjaGVzCitiYWNrIGludG8gdGhlIGJhc2Uga2VybmVsLgorPC9wYXJhPgorCis8cGFyYT4KK0luIGFkZGl0aW9uIHRvIG1vdmluZyB0aGUgY2FwYWJpbGl0aWVzIGxvZ2ljLCB0aGUgTFNNIGtlcm5lbCBwYXRjaAorY291bGQgbW92ZSB0aGUgY2FwYWJpbGl0eS1yZWxhdGVkIGZpZWxkcyBmcm9tIHRoZSBrZXJuZWwgZGF0YQorc3RydWN0dXJlcyBpbnRvIHRoZSBuZXcgc2VjdXJpdHkgZmllbGRzIG1hbmFnZWQgYnkgdGhlIHNlY3VyaXR5Cittb2R1bGVzLiAgSG93ZXZlciwgYXQgcHJlc2VudCwgdGhlIExTTSBrZXJuZWwgcGF0Y2ggbGVhdmVzIHRoZQorY2FwYWJpbGl0eSBmaWVsZHMgaW4gdGhlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuICBJbiBoaXMgb3JpZ2luYWwKK3JlbWFya3MsIExpbnVzIHN1Z2dlc3RlZCB0aGF0IHRoaXMgbWlnaHQgYmUgcHJlZmVyYWJsZSBzbyB0aGF0IG90aGVyCitzZWN1cml0eSBtb2R1bGVzIGNhbiBiZSBlYXNpbHkgc3RhY2tlZCB3aXRoIHRoZSBjYXBhYmlsaXRpZXMgbW9kdWxlCit3aXRob3V0IG5lZWRpbmcgdG8gY2hhaW4gbXVsdGlwbGUgc2VjdXJpdHkgc3RydWN0dXJlcyBvbiB0aGUgc2VjdXJpdHkgZmllbGQuCitJdCBhbHNvIGF2b2lkcyBpbXBvc2luZyBleHRyYSBvdmVyaGVhZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG1vZHVsZQordG8gbWFuYWdlIHRoZSBzZWN1cml0eSBmaWVsZHMuICBIb3dldmVyLCB0aGUgTFNNIGZyYW1ld29yayBjb3VsZAorY2VydGFpbmx5IHN1cHBvcnQgc3VjaCBhIG1vdmUgaWYgaXQgaXMgZGV0ZXJtaW5lZCB0byBiZSBkZXNpcmFibGUsCit3aXRoIG9ubHkgYSBmZXcgYWRkaXRpb25hbCBjaGFuZ2VzIGRlc2NyaWJlZCBiZWxvdy4KKzwvcGFyYT4KKworPHBhcmE+CitBdCBwcmVzZW50LCB0aGUgY2FwYWJpbGl0aWVzIGxvZ2ljIGZvciBjb21wdXRpbmcgcHJvY2VzcyBjYXBhYmlsaXRpZXMKK29uIDxmdW5jdGlvbj5leGVjdmU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPnNldCp1aWQ8L2Z1bmN0aW9uPiwKK2NoZWNraW5nIGNhcGFiaWxpdGllcyBmb3IgYSBwYXJ0aWN1bGFyIHByb2Nlc3MsIHNhdmluZyBhbmQgY2hlY2tpbmcKK2NhcGFiaWxpdGllcyBmb3IgbmV0bGluayBtZXNzYWdlcywgYW5kIGhhbmRsaW5nIHRoZQorPGZ1bmN0aW9uPmNhcGdldDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+Y2Fwc2V0PC9mdW5jdGlvbj4gc3lzdGVtCitjYWxscyBoYXZlIGJlZW4gbW92ZWQgaW50byB0aGUgY2FwYWJpbGl0aWVzIG1vZHVsZS4gIFRoZXJlIGFyZSBzdGlsbCBhCitmZXcgbG9jYXRpb25zIGluIHRoZSBiYXNlIGtlcm5lbCB3aGVyZSBjYXBhYmlsaXR5LXJlbGF0ZWQgZmllbGRzIGFyZQorZGlyZWN0bHkgZXhhbWluZWQgb3IgbW9kaWZpZWQsIGJ1dCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBMU00KK3BhdGNoIGRvZXMgYWxsb3cgYSBzZWN1cml0eSBtb2R1bGUgdG8gY29tcGxldGVseSByZXBsYWNlIHRoZQorYXNzaWdubWVudCBhbmQgdGVzdGluZyBvZiBjYXBhYmlsaXRpZXMuICBUaGVzZSBmZXcgbG9jYXRpb25zIHdvdWxkCituZWVkIHRvIGJlIGNoYW5nZWQgaWYgdGhlIGNhcGFiaWxpdHktcmVsYXRlZCBmaWVsZHMgd2VyZSBtb3ZlZCBpbnRvCit0aGUgc2VjdXJpdHkgZmllbGQuICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBrbm93biBsb2NhdGlvbnMgdGhhdAorc3RpbGwgcGVyZm9ybSBzdWNoIGRpcmVjdCBleGFtaW5hdGlvbiBvciBtb2RpZmljYXRpb24gb2YKK2NhcGFiaWxpdHktcmVsYXRlZCBmaWVsZHM6Cis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5mcy9vcGVuLmM8L2ZpbGVuYW1lPjo8ZnVuY3Rpb24+c3lzX2FjY2VzczwvZnVuY3Rpb24+PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZzL2xvY2tkL2hvc3QuYzwvZmlsZW5hbWU+OjxmdW5jdGlvbj5ubG1fYmluZF9ob3N0PC9mdW5jdGlvbj48L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZnMvbmZzZC9hdXRoLmM8L2ZpbGVuYW1lPjo8ZnVuY3Rpb24+bmZzZF9zZXR1c2VyPC9mdW5jdGlvbj48L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZnMvcHJvYy9hcnJheS5jPC9maWxlbmFtZT46PGZ1bmN0aW9uPnRhc2tfY2FwPC9mdW5jdGlvbj48L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8L2FydGljbGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFuL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmI3ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21hbi9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKKyMgUnVsZXMgYXJlIHB1dCBpbiBEb2N1bWVudGF0aW9uL0RvY0Jvb2sKKworY2xlYW4tZmlsZXMgOj0gKi45Lmd6ICouc2dtbCBtYW5wYWdlLmxpbmtzIG1hbnBhZ2UucmVmcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21jYWJvb2sudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tY2Fib29rLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2N2Y0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tY2Fib29rLnRtcGwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iTUNBR3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPk1DQSBEcml2ZXIgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5BbGFuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+Q294PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+YWxhbkByZWRoYXQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5EYXZpZDwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPldlaW5laGFsbDwvc3VybmFtZT4KKyAgIDwvYXV0aG9yPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPkNocmlzPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+QmVhdXJlZ2FyZDwvc3VybmFtZT4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAwPC95ZWFyPgorICAgPGhvbGRlcj5BbGFuIENveDwvaG9sZGVyPgorICAgPGhvbGRlcj5EYXZpZCBXZWluZWhhbGw8L2hvbGRlcj4KKyAgIDxob2xkZXI+Q2hyaXMgQmVhdXJlZ2FyZDwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICA8cGFyYT4KKwlUaGUgTUNBIGJ1cyBmdW5jdGlvbnMgcHJvdmlkZSBhIGdlbmVyYWxpc2VkIGludGVyZmFjZSB0byBmaW5kIE1DQQorCWJ1cyBjYXJkcywgdG8gY2xhaW0gdGhlbSBmb3IgYSBkcml2ZXIsIGFuZCB0byByZWFkIGFuZCBtYW5pcHVsYXRlIFBPUyAKKwlyZWdpc3RlcnMgd2l0aG91dCBiZWluZyBhd2FyZSBvZiB0aGUgbW90aGVyYm9hcmQgaW50ZXJuYWxzIG9yIAorCWNlcnRhaW4gZGVlcCBtYWdpYyBzcGVjaWZpYyB0byBvbmJvYXJkIGRldmljZXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIGJhc2ljIGludGVyZmFjZSB0byB0aGUgTUNBIGJ1cyBkZXZpY2VzIGlzIHRoZSBzbG90LiBFYWNoIHNsb3QKKwlpcyBudW1iZXJlZCBhbmQgdmlydHVhbCBzbG90IG51bWJlcnMgYXJlIGFzc2lnbmVkIHRvIHRoZSBpbnRlcm5hbAorCWRldmljZXMuIFVzaW5nIGEgcGNpX2RldiBhcyBvdGhlciBidXNzZXMgZG8gZG9lcyBub3QgcmVhbGx5IG1ha2UKKwlzZW5zZSBpbiB0aGUgTUNBIGNvbnRleHQgYXMgdGhlIE1DQSBidXMgcmVzb3VyY2VzIHJlcXVpcmUgY2FyZAorCXNwZWNpZmljIGludGVycHJldGF0aW9uLgorICA8L3BhcmE+CisgIDxwYXJhPgorCUZpbmFsbHkgdGhlIE1DQSBidXMgZnVuY3Rpb25zIHByb3ZpZGUgYSBwYXJhbGxlbCBzZXQgb2YgRE1BCisJZnVuY3Rpb25zIG1pbWljaW5nIHRoZSBJU0EgYnVzIERNQSBmdW5jdGlvbnMgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSwKKwlhbHRob3VnaCBhbHNvIHN1cHBvcnRpbmcgdGhlIGFkZGl0aW9uYWwgRE1BIGZ1bmN0aW9uYWxpdHkgb24gdGhlCisJTUNBIGJ1cyBjb250cm9sbGVycy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJidWdzIj4KKyAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KKyAgPHBhcmE+CisJTm9uZS4JCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CishRWFyY2gvaTM4Ni9rZXJuZWwvbWNhLmMKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkbWFmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+RE1BIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+CishSWluY2x1ZGUvYXNtLWkzODYvbWNhX2RtYS5oCisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NjNkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKQEAgLTAsMCArMSwxMzIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9Ik1URC1OQU5ELUd1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5NVEQgTkFORCBEcml2ZXIgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5UaG9tYXM8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5HbGVpeG5lcjwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPnRnbHhAbGludXRyb25peC5kZTwvZW1haWw+CisgICAgIDwvYWRkcmVzcz4KKyAgICA8L2FmZmlsaWF0aW9uPgorICAgPC9hdXRob3I+CisgIDwvYXV0aG9yZ3JvdXA+CisKKyAgPGNvcHlyaWdodD4KKyAgIDx5ZWFyPjIwMDQ8L3llYXI+CisgICA8aG9sZGVyPlRob21hcyBHbGVpeG5lcjwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgIAlUaGUgZ2VuZXJpYyBOQU5EIGRyaXZlciBzdXBwb3J0cyBhbG1vc3QgYWxsIE5BTkQgYW5kIEFHLUFORCBiYXNlZAorCWNoaXBzIGFuZCBjb25uZWN0cyB0aGVtIHRvIHRoZSBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisJc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBLZXJuZWwuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIAlUaGlzIGRvY3VtZW50YXRpb24gaXMgcHJvdmlkZWQgZm9yIGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gaW1wbGVtZW50CisJYm9hcmQgZHJpdmVycyBvciBmaWxlc3lzdGVtIGRyaXZlcnMgc3VpdGFibGUgZm9yIE5BTkQgZGV2aWNlcy4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iYnVncyI+CisgICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+CisgIDxwYXJhPgorCU5vbmUuCQorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZG9jaGludHMiPgorICAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbiBoaW50czwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGUgZnVuY3Rpb24gYW5kIHN0cnVjdHVyZSBkb2NzIGFyZSBhdXRvZ2VuZXJhdGVkLiBFYWNoIGZ1bmN0aW9uIGFuZCAKKyAgICAgc3RydWN0IG1lbWJlciBoYXMgYSBzaG9ydCBkZXNjcmlwdGlvbiB3aGljaCBpcyBtYXJrZWQgd2l0aCBhbiBbWFhYXSBpZGVudGlmaWVyLgorICAgICBUaGUgZm9sbG93aW5nIGNoYXB0ZXJzIGV4cGxhaW4gdGhlIG1lYW5pbmcgb2YgdGhvc2UgaWRlbnRpZmllcnMuCisgICAgIDwvcGFyYT4KKyAgICAgPHNlY3QxPiAgIAorCTx0aXRsZT5GdW5jdGlvbiBpZGVudGlmaWVycyBbWFhYXTwvdGl0bGU+CisgICAgIAk8cGFyYT4KKwlUaGUgZnVuY3Rpb25zIGFyZSBtYXJrZWQgd2l0aCBbWFhYXSBpZGVudGlmaWVycyBpbiB0aGUgc2hvcnQKKwljb21tZW50LiBUaGUgaWRlbnRpZmllcnMgZXhwbGFpbiB0aGUgdXNhZ2UgYW5kIHNjb3BlIG9mIHRoZQorCWZ1bmN0aW9ucy4gRm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkOgorICAgICAJPC9wYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkgIAlbTVREIEludGVyZmFjZV08L3BhcmE+PHBhcmE+CisJCVRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSBpbnRlcmZhY2UgdG8gdGhlIE1URCBrZXJuZWwgQVBJLiAKKwkJVGhleSBhcmUgbm90IHJlcGxhY2FibGUgYW5kIHByb3ZpZGUgZnVuY3Rpb25hbGl0eQorCQl3aGljaCBpcyBjb21wbGV0ZSBoYXJkd2FyZSBpbmRlcGVuZGVudC4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkgIAlbTkFORCBJbnRlcmZhY2VdPC9wYXJhPjxwYXJhPgorCQlUaGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGFuZCBwcm92aWRlIHRoZSBpbnRlcmZhY2UgdG8gdGhlIE5BTkQga2VybmVsIEFQSS4gCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJICAJW0dFTkVSSUNdPC9wYXJhPjxwYXJhPgorCQlHZW5lcmljIGZ1bmN0aW9ucyBhcmUgbm90IHJlcGxhY2FibGUgYW5kIHByb3ZpZGUgZnVuY3Rpb25hbGl0eQorCQl3aGljaCBpcyBjb21wbGV0ZSBoYXJkd2FyZSBpbmRlcGVuZGVudC4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkgIAlbREVGQVVMVF08L3BhcmE+PHBhcmE+CisJCURlZmF1bHQgZnVuY3Rpb25zIHByb3ZpZGUgaGFyZHdhcmUgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIHN1aXRhYmxlCisJCWZvciBtb3N0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgcmVwbGFjZWQgYnkgdGhlCisJCWJvYXJkIGRyaXZlciBpZiBuZWNjZWNhcnkuIFRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHZpYSBwb2ludGVycyBpbiB0aGUKKwkJTkFORCBjaGlwIGRlc2NyaXB0aW9uIHN0cnVjdHVyZS4gVGhlIGJvYXJkIGRyaXZlciBjYW4gc2V0IHRoZSBmdW5jdGlvbnMgd2hpY2gKKwkJc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGJvYXJkIGRlcGVuZGVuZCBmdW5jdGlvbnMgYmVmb3JlIGNhbGxpbmcgbmFuZF9zY2FuKCkuCisJCUlmIHRoZSBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEwgb24gZW50cnkgdG8gbmFuZF9zY2FuKCkgdGhlbiB0aGUgcG9pbnRlcgorCQlpcyBzZXQgdG8gdGhlIGRlZmF1bHQgZnVuY3Rpb24gd2hpY2ggaXMgc3VpdGFibGUgZm9yIHRoZSBkZXRlY3RlZCBjaGlwIHR5cGUuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+ICAgCisJPHRpdGxlPlN0cnVjdCBtZW1iZXIgaWRlbnRpZmllcnMgW1hYWF08L3RpdGxlPgorICAgICAJPHBhcmE+CisJVGhlIHN0cnVjdCBtZW1iZXJzIGFyZSBtYXJrZWQgd2l0aCBbWFhYXSBpZGVudGlmaWVycyBpbiB0aGUgCisJY29tbWVudC4gVGhlIGlkZW50aWZpZXJzIGV4cGxhaW4gdGhlIHVzYWdlIGFuZCBzY29wZSBvZiB0aGUKKwltZW1iZXJzLiBGb2xsb3dpbmcgaWRlbnRpZmllcnMgYXJlIHVzZWQ6CisgICAgIAk8L3BhcmE+CisJPGl0ZW1pemVkbGlzdD4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCSAgCVtJTlRFUk5dPC9wYXJhPjxwYXJhPgorCQlUaGVzZSBtZW1iZXJzIGFyZSBmb3IgTkFORCBkcml2ZXIgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG11c3Qgbm90IGJlCisJCW1vZGlmaWVkLiBNb3N0IG9mIHRoZXNlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBjaGlwIGdlb21ldHJ5CisJCWluZm9ybWF0aW9uIHdoaWNoIGlzIGV2YWx1YXRlZCBkdXJpbmcgbmFuZF9zY2FuKCkuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJICAJW1JFUExBQ0VBQkxFXTwvcGFyYT48cGFyYT4KKwkJUmVwbGFjZWFibGUgbWVtYmVycyBob2xkIGhhcmR3YXJlIHJlbGF0ZWQgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSAKKwkJcHJvdmlkZWQgYnkgdGhlIGJvYXJkIGRyaXZlci4gVGhlIGJvYXJkIGRyaXZlciBjYW4gc2V0IHRoZSBmdW5jdGlvbnMgd2hpY2gKKwkJc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGJvYXJkIGRlcGVuZGVuZCBmdW5jdGlvbnMgYmVmb3JlIGNhbGxpbmcgbmFuZF9zY2FuKCkuCisJCUlmIHRoZSBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEwgb24gZW50cnkgdG8gbmFuZF9zY2FuKCkgdGhlbiB0aGUgcG9pbnRlcgorCQlpcyBzZXQgdG8gdGhlIGRlZmF1bHQgZnVuY3Rpb24gd2hpY2ggaXMgc3VpdGFibGUgZm9yIHRoZSBkZXRlY3RlZCBjaGlwIHR5cGUuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJICAJW0JPQVJEU1BFQ0lGSUNdPC9wYXJhPjxwYXJhPgorCQlCb2FyZCBzcGVjaWZpYyBtZW1iZXJzIGhvbGQgaGFyZHdhcmUgcmVsYXRlZCBpbmZvcm1hdGlvbiB3aGljaCBtdXN0CisJCWJlIHByb3ZpZGVkIGJ5IHRoZSBib2FyZCBkcml2ZXIuIFRoZSBib2FyZCBkcml2ZXIgbXVzdCBzZXQgdGhlIGZ1bmN0aW9uCisJCXBvaW50ZXJzIGFuZCBkYXRhZmllbGRzIGJlZm9yZSBjYWxsaW5nIG5hbmRfc2NhbigpLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCSAgCVtPUFRJT05BTF08L3BhcmE+PHBhcmE+CisJCU9wdGlvbmFsIG1lbWJlcnMgY2FuIGhvbGQgaW5mb3JtYXRpb24gcmVsZXZhbnQgZm9yIHRoZSBib2FyZCBkcml2ZXIuIFRoZQorCQlnZW5lcmljIE5BTkQgZHJpdmVyIGNvZGUgZG9lcyBub3QgdXNlIHRoaXMgaW5mb3JtYXRpb24uCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+ICAgCisKKyAgPGNoYXB0ZXIgaWQ9ImJhc2ljYm9hcmRkcml2ZXIiPgorICAgICAJPHRpdGxlPkJhc2ljIGJvYXJkIGRyaXZlcjwvdGl0bGU+CisJPHBhcmE+CisJCUZvciBtb3N0IGJvYXJkcyBpdCB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gcHJvdmlkZSBqdXN0IHRoZQorCQliYXNpYyBmdW5jdGlvbnMgYW5kIGZpbGwgb3V0IHNvbWUgcmVhbGx5IGJvYXJkIGRlcGVuZGVuZAorCQltZW1iZXJzIGluIHRoZSBuYW5kIGNoaXAgZGVzY3JpcHRpb24gc3RydWN0dXJlLgorCQlTZWUgZHJpdmVycy9tdGQvbmFuZC9za2VsZXRvbiBmb3IgcmVmZXJlbmNlLgorCTwvcGFyYT4KKwk8c2VjdDE+CisJCTx0aXRsZT5CYXNpYyBkZWZpbmVzPC90aXRsZT4KKwkJPHBhcmE+CisJCQlBdCBsZWFzdCB5b3UgaGF2ZSB0byBwcm92aWRlIGEgbXRkIHN0cnVjdHVyZSBhbmQKKwkJCWEgc3RvcmFnZSBmb3IgdGhlIGlvcmVtYXAnZWQgY2hpcCBhZGRyZXNzLgorCQkJWW91IGNhbiBhbGxvY2F0ZSB0aGUgbXRkIHN0cnVjdHVyZSB1c2luZyBrbWFsbG9jCisJCQlvciB5b3UgY2FuIGFsbG9jYXRlIGl0IHN0YXRpY2FsbHkuCisJCQlJbiBjYXNlIG9mIHN0YXRpYyBhbGxvY2F0aW9uIHlvdSBoYXZlIHRvIGFsbG9jYXRlCisJCQlhIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG9vLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJS21hbGxvYyBiYXNlZCBleGFtcGxlCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYm9hcmRfbXRkOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJCTxwYXJhPgorCQkJU3RhdGljIGV4YW1wbGUKKwkJPC9wYXJhPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgc3RydWN0IG10ZF9pbmZvIGJvYXJkX210ZDsKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9jaGlwIGJvYXJkX2NoaXA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYXNlYWRkcjsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPlBhcnRpdGlvbiBkZWZpbmVzPC90aXRsZT4KKwkJPHBhcmE+CisJCQlJZiB5b3Ugd2FudCB0byBkaXZpZGUgeW91ciBkZXZpY2UgaW50byBwYXJpdGl0aW9ucywgdGhlbgorCQkJZW5hYmxlIHRoZSBjb25maWd1cmF0aW9uIHN3aXRjaCBDT05GSUdfTVREX1BBUklUSU9OUyBhbmQgZGVmaW5lCisJCQlhIHBhcml0aW9uaW5nIHNjaGVtZSBzdWl0YWJsZSB0byB5b3VyIGJvYXJkLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMgorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7CisJeyAubmFtZSA9ICJGbGFzaCBwYXJ0aXRpb24gMSIsCisJICAub2Zmc2V0ID0gIDAsCisJICAuc2l6ZSA9ICAgIDggKiAxMDI0ICogMTAyNCB9LAorCXsgLm5hbWUgPSAiRmxhc2ggcGFydGl0aW9uIDIiLAorCSAgLm9mZnNldCA9ICBNVERQQVJUX09GU19ORVhULAorCSAgLnNpemUgPSAgICBNVERQQVJUX1NJWl9GVUxMIH0sCit9OworCQk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdDE+CisJPHNlY3QxPgorCQk8dGl0bGU+SGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbjwvdGl0bGU+CisJCTxwYXJhPgorCQkJVGhlIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSAKKwkJCWNvbnRyb2wgcGlucyBvZiB0aGUgTkFORCBjaGlwKHMpLiAKKwkJCVRoZSBhY2Nlc3MgY2FuIGJlIGRvbmUgYnkgR1BJTyBwaW5zIG9yIGJ5IGFkZHJlc3MgbGluZXMuCisJCQlJZiB5b3UgdXNlIGFkZHJlc3MgbGluZXMsIG1ha2Ugc3VyZSB0aGF0IHRoZSB0aW1pbmcKKwkJCXJlcXVpcmVtZW50cyBhcmUgbWV0LgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJPGVtcGhhc2lzPkdQSU8gYmFzZWQgZXhhbXBsZTwvZW1waGFzaXM+CisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQgYm9hcmRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQoreworCXN3aXRjaChjbWQpeworCQljYXNlIE5BTkRfQ1RMX1NFVENMRTogLyogU2V0IENMRSBwaW4gaGlnaCAqLyBicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6IC8qIFNldCBDTEUgcGluIGxvdyAqLyBicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVRBTEU6IC8qIFNldCBBTEUgcGluIGhpZ2ggKi8gYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQUxFOiAvKiBTZXQgQUxFIHBpbiBsb3cgKi8gYnJlYWs7CisJCWNhc2UgTkFORF9DVExfU0VUTkNFOiAvKiBTZXQgbkNFIHBpbiBsb3cgKi8gYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSTkNFOiAvKiBTZXQgbkNFIHBpbiBoaWdoICovIGJyZWFrOworCX0KK30KKwkJPC9wcm9ncmFtbGlzdGluZz4KKwkJPHBhcmE+CisJCQk8ZW1waGFzaXM+QWRkcmVzcyBsaW5lcyBiYXNlZCBleGFtcGxlLjwvZW1waGFzaXM+IEl0J3MgYXNzdW1lZCB0aGF0IHRoZQorCQkJbkNFIHBpbiBpcyBkcml2ZW4gYnkgYSBjaGlwIHNlbGVjdCBkZWNvZGVyLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyB2b2lkIGJvYXJkX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgbXRkLT5wcml2OworCXN3aXRjaChjbWQpeworCQljYXNlIE5BTkRfQ1RMX1NFVENMRTogdGhpcy0+SU9fQUREUl9XIHw9IENMRV9BRFJSX0JJVDsgIGJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUkNMRTogdGhpcy0+SU9fQUREUl9XICZhbXA7PSB+Q0xFX0FEUlJfQklUOyBicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVRBTEU6IHRoaXMtPklPX0FERFJfVyB8PSBBTEVfQURSUl9CSVQ7ICBicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJBTEU6IHRoaXMtPklPX0FERFJfVyAmYW1wOz0gfkFMRV9BRFJSX0JJVDsgYnJlYWs7CisJfQorfQorCQk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdDE+CisJPHNlY3QxPgorCQk8dGl0bGU+RGV2aWNlIHJlYWR5IGZ1bmN0aW9uPC90aXRsZT4KKwkJPHBhcmE+CisJCQlJZiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGhhcyB0aGUgcmVhZHkgYnVzeSBwaW4gb2YgdGhlIE5BTkQgY2hpcCBjb25uZWN0ZWQgdG8gYQorCQkJR1BJTyBvciBvdGhlciBhY2Nlc2libGUgSS9PIHBpbiwgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgYmFjayB0aGUgc3RhdGUgb2YgdGhlCisJCQlwaW4uIFRoZSBmdW5jdGlvbiBoYXMgbm8gYXJndW1lbnRzIGFuZCBzaG91bGQgcmV0dXJuIDAsIGlmIHRoZSBkZXZpY2UgaXMgYnVzeSAoUi9CIHBpbiAKKwkJCWlzIGxvdykgYW5kIDEsIGlmIHRoZSBkZXZpY2UgaXMgcmVhZHkgKFIvQiBwaW4gaXMgaGlnaCkuCisJCQlJZiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGRvZXMgbm90IGdpdmUgYWNjZXNzIHRvIHRoZSByZWFkeSBidXN5IHBpbiwgdGhlbgorCQkJdGhlIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGRlZmluZWQgYW5kIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRoaXMtPmRldl9yZWFkeSBpcyBzZXQgdG8gTlVMTC4JCQorCQk8L3BhcmE+CisJPC9zZWN0MT4KKwk8c2VjdDE+CisJCTx0aXRsZT5Jbml0IGZ1bmN0aW9uPC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgaW5pdCBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBzZXRzIHVwIGFsbCB0aGUgYm9hcmQKKwkJCXNwZWNpZmljIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uIHBvaW50ZXJzLiBXaGVuIGV2ZXJ5dGhpbmcKKwkJCWlzIHNldCB1cCBuYW5kX3NjYW4oKSBpcyBjYWxsZWQuIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8KKwkJCWRldGVjdCBhbmQgaWRlbnRpZnkgdGhlbiBjaGlwLiBJZiBhIGNoaXAgaXMgZm91bmQgYWxsIHRoZQorCQkJaW50ZXJuYWwgZGF0YSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGFjY29yZGluZ2x5LgorCQkJVGhlIHN0cnVjdHVyZShzKSBoYXZlIHRvIGJlIHplcm9lZCBvdXQgZmlyc3QgYW5kIHRoZW4gZmlsbGVkIHdpdGggdGhlIG5lY2NlY2FyeSAKKwkJCWluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UuCisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgoraW50IF9faW5pdCBib2FyZF9pbml0ICh2b2lkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJaW50IGVyciA9IDA7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KKwlib2FyZF9tdGQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZiAoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCWlmICghYm9hcmRfbXRkKSB7CisJCXByaW50ayAoIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCW1lbXNldCAoKGNoYXIgKikgYm9hcmRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisKKwkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCisJYmFzZWFkZHIgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKENISVBfUEhZU0lDQUxfQUREUkVTUywgMTAyNCk7CisJaWYoIWJhc2VhZGRyKXsKKwkJcHJpbnRrKCJJb3JlbWFwIHRvIGFjY2VzcyBOQU5EIGNoaXAgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfbXRkOworCX0KKworCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoKTsKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCWJvYXJkX210ZC0+cHJpdiA9IHRoaXM7CisKKwkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCisJdGhpcy0+SU9fQUREUl9SID0gYmFzZWFkZHI7CisJdGhpcy0+SU9fQUREUl9XID0gYmFzZWFkZHI7CisJLyogUmVmZXJlbmNlIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KKwl0aGlzLT5od2NvbnRyb2wgPSBib2FyZF9od2NvbnRyb2w7CisJLyogU2V0IGNvbW1hbmQgZGVsYXkgdGltZSwgc2VlIGRhdGFzaGVldCBmb3IgY29ycmVjdCB2YWx1ZSAqLworCXRoaXMtPmNoaXBfZGVsYXkgPSBDSElQX0RFUEVOREVORF9DT01NQU5EX0RFTEFZOworCS8qIEFzc2lnbiB0aGUgZGV2aWNlIHJlYWR5IGZ1bmN0aW9uLCBpZiBhdmFpbGFibGUgKi8KKwl0aGlzLT5kZXZfcmVhZHkgPSBib2FyZF9kZXZfcmVhZHk7CisJdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwlpZiAobmFuZF9zY2FuIChib2FyZF9tdGQsIDEpKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXRfaW9yOworCX0KKwkKKwlhZGRfbXRkX3BhcnRpdGlvbnMoYm9hcmRfbXRkLCBwYXJ0aXRpb25faW5mbywgTlVNX1BBUlRJVElPTlMpOworCWdvdG8gb3V0OworCitvdXRfaW9yOgorCWlvdW5tYXAoKHZvaWQgKiliYXNlYWRkcik7CitvdXRfbXRkOgorCWtmcmVlIChib2FyZF9tdGQpOworb3V0OgorCXJldHVybiBlcnI7Cit9Cittb2R1bGVfaW5pdChib2FyZF9pbml0KTsKKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkV4aXQgZnVuY3Rpb248L3RpdGxlPgorCQk8cGFyYT4KKwkJCVRoZSBleGl0IGZ1bmN0aW9uIGlzIG9ubHkgbmVjY2VjYXJ5IGlmIHRoZSBkcml2ZXIgaXMKKwkJCWNvbXBpbGVkIGFzIGEgbW9kdWxlLiBJdCByZWxlYXNlcyBhbGwgcmVzb3VyY2VzIHdoaWNoCisJCQlhcmUgaGVsZCBieSB0aGUgY2hpcCBkcml2ZXIgYW5kIHVucmVnaXN0ZXJzIHRoZSBwYXJ0aXRpb25zCisJCQlpbiB0aGUgTVREIGxheWVyLgorCQk8L3BhcmE+CisJCTxwcm9ncmFtbGlzdGluZz4KKyNpZmRlZiBNT0RVTEUKK3N0YXRpYyB2b2lkIF9fZXhpdCBib2FyZF9jbGVhbnVwICh2b2lkKQoreworCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLworCW5hbmRfcmVsZWFzZSAoYm9hcmRfbXRkKTsKKworCS8qIHVubWFwIHBoeXNpY2FsIGFkcmVzcyAqLworCWlvdW5tYXAoKHZvaWQgKiliYXNlYWRkcik7CisJCisJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlrZnJlZSAoYm9hcmRfbXRkKTsKK30KK21vZHVsZV9leGl0KGJvYXJkX2NsZWFudXApOworI2VuZGlmCisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJib2FyZGRyaXZlcnNhZHZhbmNlZCI+CisgICAgIAk8dGl0bGU+QWR2YW5jZWQgYm9hcmQgZHJpdmVyIGZ1bmN0aW9uczwvdGl0bGU+CisJPHBhcmE+CisJCVRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIGFkdmFuY2VkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE5BTkQKKwkJZHJpdmVyLiBGb3IgYSBsaXN0IG9mIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYm9hcmQKKwkJZHJpdmVyIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgbmFuZF9jaGlwIHN0cnVjdHVyZS4KKwk8L3BhcmE+CisJPHNlY3QxPgorCQk8dGl0bGU+TXVsdGlwbGUgY2hpcCBjb250cm9sPC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgbmFuZCBkcml2ZXIgY2FuIGNvbnRyb2wgY2hpcCBhcnJheXMuIFRoZXJlZm9yIHRoZQorCQkJYm9hcmQgZHJpdmVyIG11c3QgcHJvdmlkZSBhbiBvd24gc2VsZWN0X2NoaXAgZnVuY3Rpb24uIFRoaXMKKwkJCWZ1bmN0aW9uIG11c3QgKGRlKXNlbGVjdCB0aGUgcmVxdWVzdGVkIGNoaXAuCisJCQlUaGUgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgbmFuZF9jaGlwIHN0cnVjdHVyZSBtdXN0CisJCQliZSBzZXQgYmVmb3JlIGNhbGxpbmcgbmFuZF9zY2FuKCkuIFRoZSBtYXhjaGlwIHBhcmFtZXRlcgorCQkJb2YgbmFuZF9zY2FuKCkgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hpcHMgdG8KKwkJCXNjYW4gZm9yLiBNYWtlIHN1cmUgdGhhdCB0aGUgc2VsZWN0X2NoaXAgZnVuY3Rpb24gY2FuCisJCQloYW5kbGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgY2hpcHMuCisJCTwvcGFyYT4KKwkJPHBhcmE+CisJCQlUaGUgbmFuZCBkcml2ZXIgY29uY2F0ZW5hdGVzIHRoZSBjaGlwcyB0byBvbmUgdmlydHVhbAorCQkJY2hpcCBhbmQgcHJvdmlkZXMgdGhpcyB2aXJ0dWFsIGNoaXAgdG8gdGhlIE1URCBsYXllci4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCTxlbXBoYXNpcz5Ob3RlOiBUaGUgZHJpdmVyIGNhbiBvbmx5IGhhbmRsZSBsaW5lYXIgY2hpcCBhcnJheXMKKwkJCW9mIGVxdWFsbHkgc2l6ZWQgY2hpcHMuIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yCisJCQlwYXJhbGxlbCBhcnJheXMgd2hpY2ggZXh0ZW5kIHRoZSBidXN3aWR0aC48L2VtcGhhc2lzPgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJPGVtcGhhc2lzPkdQSU8gYmFzZWQgZXhhbXBsZTwvZW1waGFzaXM+CisJCTwvcGFyYT4KKwkJPHByb2dyYW1saXN0aW5nPgorc3RhdGljIHZvaWQgYm9hcmRfc2VsZWN0X2NoaXAgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwkvKiBEZXNlbGVjdCBhbGwgY2hpcHMsIHNldCBhbGwgbkNFIHBpbnMgaGlnaCAqLworCUdQSU8oQk9BUkRfTkFORF9OQ0UpIHw9IDB4ZmY7CQorCWlmIChjaGlwID49IDApCisJCUdQSU8oQk9BUkRfTkFORF9OQ0UpICZhbXA7PSB+ICgxICZsdDsmbHQ7IGNoaXApOworfQorCQk8L3Byb2dyYW1saXN0aW5nPgorCQk8cGFyYT4KKwkJCTxlbXBoYXNpcz5BZGRyZXNzIGxpbmVzIGJhc2VkIGV4YW1wbGUuPC9lbXBoYXNpcz4KKwkJCUl0cyBhc3N1bWVkIHRoYXQgdGhlIG5DRSBwaW5zIGFyZSBjb25uZWN0ZWQgdG8gYW4KKwkJCWFkZHJlc3MgZGVjb2Rlci4KKwkJPC9wYXJhPgorCQk8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZCBib2FyZF9zZWxlY3RfY2hpcCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSBtdGQtPnByaXY7CisJCisJLyogRGVzZWxlY3QgYWxsIGNoaXBzICovCisJdGhpcy0+SU9fQUREUl9SICZhbXA7PSB+Qk9BUkRfTkFORF9BRERSX01BU0s7CisJdGhpcy0+SU9fQUREUl9XICZhbXA7PSB+Qk9BUkRfTkFORF9BRERSX01BU0s7CisJc3dpdGNoIChjaGlwKSB7CisJY2FzZSAwOgorCQl0aGlzLT5JT19BRERSX1IgfD0gQk9BUkRfTkFORF9BRERSX0NISVAwOworCQl0aGlzLT5JT19BRERSX1cgfD0gQk9BUkRfTkFORF9BRERSX0NISVAwOworCQlicmVhazsKKwkuLi4uCQorCWNhc2UgbjoKKwkJdGhpcy0+SU9fQUREUl9SIHw9IEJPQVJEX05BTkRfQUREUl9DSElQbjsKKwkJdGhpcy0+SU9fQUREUl9XIHw9IEJPQVJEX05BTkRfQUREUl9DSElQbjsKKwkJYnJlYWs7CisJfQkKK30KKwkJPC9wcm9ncmFtbGlzdGluZz4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkhhcmR3YXJlIEVDQyBzdXBwb3J0PC90aXRsZT4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPkZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzPC90aXRsZT4KKwkJCTxwYXJhPgorCQkJCVRoZSBuYW5kIGRyaXZlciBzdXBwb3J0cyB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YKKwkJCQloYXJkd2FyZSBFQ0MuCisJCQkJPGl0ZW1pemVkbGlzdD4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+TkFORF9FQ0NfSFczXzI1NjwvcGFyYT48cGFyYT4KKwkJCQlIYXJkd2FyZSBFQ0MgZ2VuZXJhdG9yIHByb3ZpZGluZyAzIGJ5dGVzIEVDQyBwZXIKKwkJCQkyNTYgYnl0ZS4KKwkJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPk5BTkRfRUNDX0hXM181MTI8L3BhcmE+PHBhcmE+CisJCQkJSGFyZHdhcmUgRUNDIGdlbmVyYXRvciBwcm92aWRpbmcgMyBieXRlcyBFQ0MgcGVyCisJCQkJNTEyIGJ5dGUuCisJCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5OQU5EX0VDQ19IVzZfNTEyPC9wYXJhPjxwYXJhPgorCQkJCUhhcmR3YXJlIEVDQyBnZW5lcmF0b3IgcHJvdmlkaW5nIDYgYnl0ZXMgRUNDIHBlcgorCQkJCTUxMiBieXRlLgorCQkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+TkFORF9FQ0NfSFc4XzUxMjwvcGFyYT48cGFyYT4KKwkJCQlIYXJkd2FyZSBFQ0MgZ2VuZXJhdG9yIHByb3ZpZGluZyA2IGJ5dGVzIEVDQyBwZXIKKwkJCQk1MTIgYnl0ZS4KKwkJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQkJPC9pdGVtaXplZGxpc3Q+CisJCQkJSWYgeW91ciBoYXJkd2FyZSBnZW5lcmF0b3IgaGFzIGEgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkKKwkJCQlhZGQgaXQgYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIG5hbmRfYmFzZS5jCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQlUaGUgYm9hcmQgZHJpdmVyIG11c3QgcHJvdmlkZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCQkJCTxpdGVtaXplZGxpc3Q+CisJCQkJPGxpc3RpdGVtPjxwYXJhPmVuYWJsZV9od2VjYzwvcGFyYT48cGFyYT4KKwkJCQlUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgcmVhZGluZyAvIHdyaXRpbmcgdG8KKwkJCQl0aGUgY2hpcC4gUmVzZXQgb3IgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgZ2VuZXJhdG9yCisJCQkJaW4gdGhpcyBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFuCisJCQkJYXJndW1lbnQgd2hpY2ggbGV0IHlvdSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlYWQgCisJCQkJYW5kIHdyaXRlIG9wZXJhdGlvbnMuCisJCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5jYWxjdWxhdGVfZWNjPC9wYXJhPjxwYXJhPgorCQkJCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHJlYWQgLyB3cml0ZSBmcm9tIC8gdG8KKwkJCQl0aGUgY2hpcC4gVHJhbnNmZXIgdGhlIEVDQyBmcm9tIHRoZSBoYXJkd2FyZSB0bworCQkJCXRoZSBidWZmZXIuIElmIHRoZSBvcHRpb24gTkFORF9IV0VDQ19TWU5EUk9NRSBpcyBzZXQKKwkJCQl0aGVuIHRoZSBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiB3cml0ZS4gU2VlIGJlbG93LgorCQkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+Y29ycmVjdF9kYXRhPC9wYXJhPjxwYXJhPgorCQkJCUluIGNhc2Ugb2YgYW4gRUNDIGVycm9yIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvcgorCQkJCWVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbi4gUmV0dXJuIDEgcmVzcGVjdGl2ZWx5IDIKKwkJCQlpbiBjYXNlIHRoZSBlcnJvciBjYW4gYmUgY29ycmVjdGVkLiBJZiB0aGUgZXJyb3IgaXMKKwkJCQlub3QgY29ycmVjdGFibGUgcmV0dXJuIC0xLiBJZiB5b3VyIGhhcmR3YXJlIGdlbmVyYXRvcgorCQkJCW1hdGNoZXMgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIG9mIHRoZSBuYW5kX2VjYyBzb2Z0d2FyZQorCQkJCWdlbmVyYXRvciB0aGVuIHVzZSB0aGUgY29ycmVjdGlvbiBmdW5jdGlvbiBwcm92aWRlZAorCQkJCWJ5IG5hbmRfZWNjIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIGR1cGxpY2F0ZWQgY29kZS4KKwkJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQkJPC9pdGVtaXplZGxpc3Q+CisJCQk8L3BhcmE+CisJCTwvc2VjdDI+CisJCTxzZWN0Mj4KKwkJPHRpdGxlPkhhcmR3YXJlIEVDQyB3aXRoIHN5bmRyb21lIGNhbGN1bGF0aW9uPC90aXRsZT4KKwkJCTxwYXJhPgorCQkJCU1hbnkgaGFyZHdhcmUgRUNDIGltcGxlbWVudGF0aW9ucyBwcm92aWRlIFJlZWQtU29sb21vbgorCQkJCWNvZGVzIGFuZCBjYWxjdWxhdGUgYW4gZXJyb3Igc3luZHJvbWUgb24gcmVhZC4gVGhlIHN5bmRyb21lCisJCQkJbXVzdCBiZSBjb252ZXJ0ZWQgdG8gYSBzdGFuZGFyZCBSZWVkLVNvbG9tb24gc3luZHJvbWUKKwkJCQliZWZvcmUgY2FsbGluZyB0aGUgZXJyb3IgY29ycmVjdGlvbiBjb2RlIGluIHRoZSBnZW5lcmljCisJCQkJUmVlZC1Tb2xvbW9uIGxpYnJhcnkuCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQlUaGUgRUNDIGJ5dGVzIG11c3QgYmUgcGxhY2VkIGltbWlkaWF0ZWx5IGFmdGVyIHRoZSBkYXRhCisJCQkJYnl0ZXMgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc3luZHJvbWUgZ2VuZXJhdG9yIHdvcmsuIFRoaXMKKwkJCQlpcyBjb250cmFyeSB0byB0aGUgdXN1YWwgbGF5b3V0IHVzZWQgYnkgc29mdHdhcmUgRUNDLiBUaGUKKwkJCQlzZXBlcmF0aW9uIG9mIGRhdGEgYW5kIG91dCBvZiBiYW5kIGFyZWEgaXMgbm90IGxvbmdlcgorCQkJCXBvc3NpYmxlLiBUaGUgbmFuZCBkcml2ZXIgY29kZSBoYW5kbGVzIHRoaXMgbGF5b3V0IGFuZAorCQkJCXRoZSByZW1haW5pbmcgZnJlZSBieXRlcyBpbiB0aGUgb29iIGFyZWEgYXJlIG1hbmFnZWQgYnkgCisJCQkJdGhlIGF1dG9wbGFjZW1lbnQgY29kZS4gUHJvdmlkZSBhIG1hdGNoaW5nIG9vYi1sYXlvdXQKKwkJCQlpbiB0aGlzIGNhc2UuIFNlZSBydHNfZnJvbTQuYyBhbmQgZGlza29uY2hpcC5jIGZvciAKKwkJCQlpbXBsZW1lbnRhdGlvbiByZWZlcmVuY2UuIEluIHRob3NlIGNhc2VzIHdlIG11c3QgYWxzbworCQkJCXVzZSBiYWQgYmxvY2sgdGFibGVzIG9uIEZMQVNILCBiZWNhdXNlIHRoZSBFQ0MgbGF5b3V0IGlzCisJCQkJaW50ZXJmZXJyaW5nIHdpdGggdGhlIGJhZCBibG9jayBtYXJrZXIgcG9zaXRpb25zLgorCQkJCVNlZSBiYWQgYmxvY2sgdGFibGUgc3VwcG9ydCBmb3IgZGV0YWlscy4KKwkJCTwvcGFyYT4KKwkJPC9zZWN0Mj4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPkJhZCBibG9jayB0YWJsZSBzdXBwb3J0PC90aXRsZT4KKwkJPHBhcmE+CisJCQlNb3N0IE5BTkQgY2hpcHMgbWFyayB0aGUgYmFkIGJsb2NrcyBhdCBhIGRlZmluZWQKKwkJCXBvc2l0aW9uIGluIHRoZSBzcGFyZSBhcmVhLiBUaG9zZSBibG9ja3MgbXVzdCAKKwkJCW5vdCBiZSBlcmFzZWQgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMgYXMgdGhlIGJhZCAKKwkJCWJsb2NrIGluZm9ybWF0aW9uIHdvdWxkIGJlIGxvc3QuCisJCQlJdCBpcyBwb3NzaWJsZSB0byBjaGVjayB0aGUgYmFkIGJsb2NrIG1hcmsgZWFjaAorCQkJdGltZSB3aGVuIHRoZSBibG9ja3MgYXJlIGFjY2Vzc2VkIGJ5IHJlYWRpbmcgdGhlCisJCQlzcGFyZSBhcmVhIG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBibG9jay4gVGhpcworCQkJaXMgdGltZSBjb25zdW1pbmcgc28gYSBiYWQgYmxvY2sgdGFibGUgaXMgdXNlZC4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCVRoZSBuYW5kIGRyaXZlciBzdXBwb3J0cyB2YXJpb3VzIHR5cGVzIG9mIGJhZCBibG9jaworCQkJdGFibGVzLgorCQkJPGl0ZW1pemVkbGlzdD4KKwkJCTxsaXN0aXRlbT48cGFyYT5QZXIgZGV2aWNlPC9wYXJhPjxwYXJhPgorCQkJVGhlIGJhZCBibG9jayB0YWJsZSBjb250YWlucyBhbGwgYmFkIGJsb2NrIGluZm9ybWF0aW9uCisJCQlvZiB0aGUgZGV2aWNlIHdoaWNoIGNhbiBjb25zaXN0IG9mIG11bHRpcGxlIGNoaXBzLgorCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPlBlciBjaGlwPC9wYXJhPjxwYXJhPgorCQkJQSBiYWQgYmxvY2sgdGFibGUgaXMgdXNlZCBwZXIgY2hpcCBhbmQgY29udGFpbnMgdGhlCisJCQliYWQgYmxvY2sgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGFydGljdWxhciBjaGlwLgorCQkJPC9wYXJhPgk8L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPkZpeGVkIG9mZnNldDwvcGFyYT48cGFyYT4KKwkJCVRoZSBiYWQgYmxvY2sgdGFibGUgaXMgbG9jYXRlZCBhdCBhIGZpeGVkIG9mZnNldAorCQkJaW4gdGhlIGNoaXAgKGRldmljZSkuIFRoaXMgYXBwbGllcyB0byB2YXJpb3VzCisJCQlEaXNrT25DaGlwIGRldmljZXMuCisJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+QXV0b21hdGljIHBsYWNlZDwvcGFyYT48cGFyYT4KKwkJCVRoZSBiYWQgYmxvY2sgdGFibGUgaXMgYXV0b21hdGljYWxseSBwbGFjZWQgYW5kCisJCQlkZXRlY3RlZCBlaXRoZXIgYXQgdGhlIGVuZCBvciBhdCB0aGUgYmVnaW5uaW5nCisJCQlvZiBhIGNoaXAgKGRldmljZSkKKwkJCTwvcGFyYT4JPC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5NaXJyb3JlZCB0YWJsZXM8L3BhcmE+PHBhcmE+CisJCQlUaGUgYmFkIGJsb2NrIHRhYmxlIGlzIG1pcnJvcmVkIG9uIHRoZSBjaGlwIChkZXZpY2UpIHRvCisJCQlhbGxvdyB1cGRhdGVzIG9mIHRoZSBiYWQgYmxvY2sgdGFibGUgd2l0aG91dCBkYXRhIGxvc3MuCisJCQk8L3BhcmE+CTwvbGlzdGl0ZW0+CisJCQk8L2l0ZW1pemVkbGlzdD4KKwkJPC9wYXJhPgorCQk8cGFyYT4JCisJCQluYW5kX3NjYW4oKSBjYWxscyB0aGUgZnVuY3Rpb24gbmFuZF9kZWZhdWx0X2JidCgpLiAKKwkJCW5hbmRfZGVmYXVsdF9iYnQoKSBzZWxlY3RzIGFwcHJvcHJpYXRlIGRlZmF1bHQKKwkJCWJhZCBibG9jayB0YWJsZSBkZXNyaXB0b3JzIGRlcGVuZGluZyBvbiB0aGUgY2hpcCBpbmZvcm1hdGlvbgorCQkJd2hpY2ggd2FzIHJldHJpZXZlZCBieSBuYW5kX3NjYW4oKS4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCVRoZSBzdGFuZGFyZCBwb2xpY3kgaXMgc2Nhbm5pbmcgdGhlIGRldmljZSBmb3IgYmFkIAorCQkJYmxvY2tzIGFuZCBidWlsZCBhIHJhbSBiYXNlZCBiYWQgYmxvY2sgdGFibGUgd2hpY2gKKwkJCWFsbG93cyBmYXN0ZXIgYWNjZXNzIHRoYW4gYWx3YXlzIGNoZWNraW5nIHRoZQorCQkJYmFkIGJsb2NrIGluZm9ybWF0aW9uIG9uIHRoZSBmbGFzaCBjaGlwIGl0c2VsZi4KKwkJPC9wYXJhPgorCQk8c2VjdDI+CisJCQk8dGl0bGU+Rmxhc2ggYmFzZWQgdGFibGVzPC90aXRsZT4KKwkJCTxwYXJhPgorCQkJCUl0IG1heSBiZSBkZXNpcmVkIG9yIG5lY2NlY2FyeSB0byBrZWVwIGEgYmFkIGJsb2NrIHRhYmxlIGluIEZMQVNILiAKKwkJCQlGb3IgQUctQU5EIGNoaXBzIHRoaXMgaXMgbWFuZGF0b3J5LCBhcyB0aGV5IGhhdmUgbm8gZmFjdG9yeSBtYXJrZWQKKwkJCQliYWQgYmxvY2tzLiBUaGV5IGhhdmUgZmFjdG9yeSBtYXJrZWQgZ29vZCBibG9ja3MuIFRoZSBtYXJrZXIgcGF0dGVybgorCQkJCWlzIGVyYXNlZCB3aGVuIHRoZSBibG9jayBpcyBlcmFzZWQgdG8gYmUgcmV1c2VkLiBTbyBpbiBjYXNlIG9mCisJCQkJcG93ZXJsb3NzIGJlZm9yZSB3cml0aW5nIHRoZSBwYXR0ZXJuIGJhY2sgdG8gdGhlIGNoaXAgdGhpcyBibG9jayAKKwkJCQl3b3VsZCBiZSBsb3N0IGFuZCBhZGRlZCB0byB0aGUgYmFkIGJsb2Nrcy4gVGhlcmVmb3Igd2Ugc2NhbiB0aGUgCisJCQkJY2hpcChzKSB3aGVuIHdlIGRldGVjdCB0aGVtIHRoZSBmaXJzdCB0aW1lIGZvciBnb29kIGJsb2NrcyBhbmQgCisJCQkJc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBpbiBhIGJhZCBibG9jayB0YWJsZSBiZWZvcmUgZXJhc2luZyBhbnkgCisJCQkJb2YgdGhlIGJsb2Nrcy4KKwkJCTwvcGFyYT4KKwkJCTxwYXJhPgorCQkJCVRoZSBibG9ja3MgaW4gd2hpY2ggdGhlIHRhYmxlcyBhcmUgc3RvcmVkIGFyZSBwcm9jdGV0ZWQgYWdhaW5zdAorCQkJCWFjY2lkZW50YWwgYWNjZXNzIGJ5IG1hcmtpbmcgdGhlbSBiYWQgaW4gdGhlIG1lbW9yeSBiYWQgYmxvY2sKKwkJCQl0YWJsZS4gVGhlIGJhZCBibG9jayB0YWJsZSBtYW5hZ21lbnQgZnVuY3Rpb25zIGFyZSBhbGxvd2VkCisJCQkJdG8gY2lyY3VtdmVybnQgdGhpcyBwcm90ZWN0aW9uLgorCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJVGhlIHNpbXBsZXN0IHdheSB0byBhY3RpdmF0ZSB0aGUgRkxBU0ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlIHN1cHBvcnQgCisJCQkJaXMgdG8gc2V0IHRoZSBvcHRpb24gTkFORF9VU0VfRkxBU0hfQkJUIGluIHRoZSBvcHRpb24gZmllbGQgb2YKKwkJCQl0aGUgbmFuZCBjaGlwIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyBuYW5kX3NjYW4oKS4gRm9yIEFHLUFORAorCQkJCWNoaXBzIGlzIHRoaXMgZG9uZSBieSBkZWZhdWx0LgorCQkJCVRoaXMgYWN0aXZhdGVzIHRoZSBkZWZhdWx0IEZMQVNIIGJhc2VkIGJhZCBibG9jayB0YWJsZSBmdW5jdGlvbmFsaXR5IAorCQkJCW9mIHRoZSBOQU5EIGRyaXZlci4gVGhlIGRlZmF1bHQgYmFkIGJsb2NrIHRhYmxlIG9wdGlvbnMgYXJlCisJCQkJPGl0ZW1pemVkbGlzdD4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+U3RvcmUgYmFkIGJsb2NrIHRhYmxlIHBlciBjaGlwPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlVzZSAyIGJpdHMgcGVyIGJsb2NrPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPkF1dG9tYXRpYyBwbGFjZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgY2hpcDwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5Vc2UgbWlycm9yZWQgdGFibGVzIHdpdGggdmVyc2lvbiBudW1iZXJzPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlJlc2VydmUgNCBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgY2hpcDwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTwvaXRlbWl6ZWRsaXN0PgorCQkJPC9wYXJhPgorCQk8L3NlY3QyPgorCQk8c2VjdDI+CisJCQk8dGl0bGU+VXNlciBkZWZpbmVkIHRhYmxlczwvdGl0bGU+CisJCQk8cGFyYT4KKwkJCQlVc2VyIGRlZmluZWQgdGFibGVzIGFyZSBjcmVhdGVkIGJ5IGZpbGxpbmcgb3V0IGEgCisJCQkJbmFuZF9iYnRfZGVzY3Igc3RydWN0dXJlIGFuZCBzdG9yaW5nIHRoZSBwb2ludGVyIGluIHRoZQorCQkJCW5hbmRfY2hpcCBzdHJ1Y3R1cmUgbWVtYmVyIGJidF90ZCBiZWZvcmUgY2FsbGluZyBuYW5kX3NjYW4oKS4gCisJCQkJSWYgYSBtaXJyb3IgdGFibGUgaXMgbmVjY2VjYXJ5IGEgc2Vjb25kIHN0cnVjdHVyZSBtdXN0IGJlCisJCQkJY3JlYXRlZCBhbmQgYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIG11c3QgYmUgc3RvcmVkCisJCQkJaW4gYmJ0X21kIGluc2lkZSB0aGUgbmFuZF9jaGlwIHN0cnVjdHVyZS4gSWYgdGhlIGJidF9tZCAKKwkJCQltZW1iZXIgaXMgc2V0IHRvIE5VTEwgdGhlbiBvbmx5IHRoZSBtYWluIHRhYmxlIGlzIHVzZWQKKwkJCQlhbmQgbm8gc2NhbiBmb3IgdGhlIG1pcnJvcmVkIHRhYmxlIGlzIHBlcmZvcm1lZC4KKwkJCTwvcGFyYT4KKwkJCTxwYXJhPgorCQkJCVRoZSBtb3N0IGltcG9ydGFudCBmaWVsZCBpbiB0aGUgbmFuZF9iYnRfZGVzY3Igc3RydWN0dXJlCisJCQkJaXMgdGhlIG9wdGlvbnMgZmllbGQuIFRoZSBvcHRpb25zIGRlZmluZSBtb3N0IG9mIHRoZSAKKwkJCQl0YWJsZSBwcm9wZXJ0aWVzLiBVc2UgdGhlIHByZWRlZmluZWQgY29uc3RhbnRzIGZyb20KKwkJCQluYW5kLmggdG8gZGVmaW5lIHRoZSBvcHRpb25zLgorCQkJCTxpdGVtaXplZGxpc3Q+CisJCQkJPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiBiaXRzIHBlciBibG9jazwvcGFyYT4KKwkJCQk8cGFyYT5UaGUgc3VwcG9ydGVkIG51bWJlciBvZiBiaXRzIGlzIDEsIDIsIDQsIDguPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlRhYmxlIHBlciBjaGlwPC9wYXJhPgorCQkJCTxwYXJhPlNldHRpbmcgdGhlIGNvbnN0YW50IE5BTkRfQkJUX1BFUkNISVAgc2VsZWN0cyB0aGF0CisJCQkJYSBiYWQgYmxvY2sgdGFibGUgaXMgbWFuYWdlZCBmb3IgZWFjaCBjaGlwIGluIGEgY2hpcCBhcnJheS4KKwkJCQlJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0IHRoZW4gYSBwZXIgZGV2aWNlIGJhZCBibG9jayB0YWJsZQorCQkJCWlzIHVzZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlRhYmxlIGxvY2F0aW9uIGlzIGFic29sdXRlPC9wYXJhPgorCQkJCTxwYXJhPlVzZSB0aGUgb3B0aW9uIGNvbnN0YW50IE5BTkRfQkJUX0FCU1BBR0UgYW5kCisJCQkJZGVmaW5lIHRoZSBhYnNvbHV0ZSBwYWdlIG51bWJlciB3aGVyZSB0aGUgYmFkIGJsb2NrCisJCQkJdGFibGUgc3RhcnRzIGluIHRoZSBmaWVsZCBwYWdlcy4gSWYgeW91IGhhdmUgc2VsZWN0ZWQgYmFkIGJsb2NrCisJCQkJdGFibGVzIHBlciBjaGlwIGFuZCB5b3UgaGF2ZSBhIG11bHRpIGNoaXAgYXJyYXkgdGhlbiB0aGUgc3RhcnQgcGFnZQorCQkJCW11c3QgYmUgZ2l2ZW4gZm9yIGVhY2ggY2hpcCBpbiB0aGUgY2hpcCBhcnJheS4gTm90ZTogdGhlcmUgaXMgbm8gc2NhbgorCQkJCWZvciBhIHRhYmxlIGlkZW50IHBhdHRlcm4gcGVyZm9ybWVkLCBzbyB0aGUgZmllbGRzIAorCQkJCXBhdHRlcm4sIHZlcm9mZnMsIG9mZnMsIGxlbiBjYW4gYmUgbGVmdCB1bmluaXRpYWxpemVkPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlRhYmxlIGxvY2F0aW9uIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQ8L3BhcmE+CisJCQkJPHBhcmE+VGhlIHRhYmxlIGNhbiBlaXRoZXIgYmUgbG9jYXRlZCBpbiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgZ29vZAorCQkJCWJsb2NrcyBvZiB0aGUgY2hpcCAoZGV2aWNlKS4gU2V0IE5BTkRfQkJUX0xBU1RCTE9DSyB0byBwbGFjZQorCQkJCXRoZSBiYWQgYmxvY2sgdGFibGUgYXQgdGhlIGVuZCBvZiB0aGUgY2hpcCAoZGV2aWNlKS4gVGhlCisJCQkJYmFkIGJsb2NrIHRhYmxlcyBhcmUgbWFya2VkIGFuZCBpZGVudGlmaWVkIGJ5IGEgcGF0dGVybiB3aGljaAorCQkJCWlzIHN0b3JlZCBpbiB0aGUgc3BhcmUgYXJlYSBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgYmxvY2sgd2hpY2gKKwkJCQlob2xkcyB0aGUgYmFkIGJsb2NrIHRhYmxlLiBTdG9yZSBhIHBvaW50ZXIgdG8gdGhlIHBhdHRlcm4gIAorCQkJCWluIHRoZSBwYXR0ZXJuIGZpZWxkLiBGdXJ0aGVyIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4gaGFzIHRvIGJlIAorCQkJCXN0b3JlZCBpbiBsZW4gYW5kIHRoZSBvZmZzZXQgaW4gdGhlIHNwYXJlIGFyZWEgbXVzdCBiZSBnaXZlbgorCQkJCWluIHRoZSBvZmZzIG1lbWJlciBvZiB0aGUgbmFuZF9iYnRfZGVzY3Igc3R1Y3R1cmUuIEZvciBtaXJyb3JlZAorCQkJCWJhZCBibG9jayB0YWJsZXMgZGlmZmVyZW50IHBhdHRlcm5zIGFyZSBtYW5kYXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlRhYmxlIGNyZWF0aW9uPC9wYXJhPgorCQkJCTxwYXJhPlNldCB0aGUgb3B0aW9uIE5BTkRfQkJUX0NSRUFURSB0byBlbmFibGUgdGhlIHRhYmxlIGNyZWF0aW9uCisJCQkJaWYgbm8gdGFibGUgY2FuIGJlIGZvdW5kIGR1cmluZyB0aGUgc2Nhbi4gVXN1YWxseSB0aGlzIGlzIGRvbmUgb25seSAKKwkJCQlvbmNlIGlmIGEgbmV3IGNoaXAgaXMgZm91bmQuIDwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSB3cml0ZSBzdXBwb3J0PC9wYXJhPgorCQkJCTxwYXJhPlNldCB0aGUgb3B0aW9uIE5BTkRfQkJUX1dSSVRFIHRvIGVuYWJsZSB0aGUgdGFibGUgd3JpdGUgc3VwcG9ydC4KKwkJCQlUaGlzIGFsbG93cyB0aGUgdXBkYXRlIG9mIHRoZSBiYWQgYmxvY2sgdGFibGUocykgaW4gY2FzZSBhIGJsb2NrIGhhcworCQkJCXRvIGJlIG1hcmtlZCBiYWQgZHVlIHRvIHdlYXIuIFRoZSBNVEQgaW50ZXJmYWNlIGZ1bmN0aW9uIGJsb2NrX21hcmtiYWQKKwkJCQlpcyBjYWxsaW5nIHRoZSB1cGRhdGUgZnVuY3Rpb24gb2YgdGhlIGJhZCBibG9jayB0YWJsZS4gSWYgdGhlIHdyaXRlCisJCQkJc3VwcG9ydCBpcyBlbmFibGVkIHRoZW4gdGhlIHRhYmxlIGlzIHVwZGF0ZWQgb24gRkxBU0guPC9wYXJhPgorCQkJCTxwYXJhPgorCQkJCU5vdGU6IFdyaXRlIHN1cHBvcnQgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBmb3IgbWlycm9yZWQgdGFibGVzIHdpdGgKKwkJCQl2ZXJzaW9uIGNvbnRyb2wuCisJCQkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPlRhYmxlIHZlcnNpb24gY29udHJvbDwvcGFyYT4KKwkJCQk8cGFyYT5TZXQgdGhlIG9wdGlvbiBOQU5EX0JCVF9WRVJTSU9OIHRvIGVuYWJsZSB0aGUgdGFibGUgdmVyc2lvbiBjb250cm9sLgorCQkJCUl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGVuYWJsZSB0aGlzIGZvciBtaXJyb3JlZCB0YWJsZXMgd2l0aCB3cml0ZQorCQkJCXN1cHBvcnQuIEl0IG1ha2VzIHN1cmUgdGhhdCB0aGUgcmlzayBvZiBsb29zaW5nIHRoZSBiYWQgYmxvY2sKKwkJCQl0YWJsZSBpbmZvcm1hdGlvbiBpcyByZWR1Y2VkIHRvIHRoZSBsb3NzIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKwkJCQlvbmUgd29ybiBvdXQgYmxvY2sgd2hpY2ggc2hvdWxkIGJlIG1hcmtlZCBiYWQuIFRoZSB2ZXJzaW9uIGlzIHN0b3JlZCBpbgorCQkJCTQgY29uc2VjdXRpdmUgYnl0ZXMgaW4gdGhlIHNwYXJlIGFyZWEgb2YgdGhlIGRldmljZS4gVGhlIHBvc2l0aW9uIG9mCisJCQkJdGhlIHZlcnNpb24gbnVtYmVyIGlzIGRlZmluZWQgYnkgdGhlIG1lbWJlciB2ZXJvZmZzIGluIHRoZSBiYWQgYmxvY2sgdGFibGUKKwkJCQlkZXNjcmlwdG9yLjwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5TYXZlIGJsb2NrIGNvbnRlbnRzIG9uIHdyaXRlPC9wYXJhPgorCQkJCTxwYXJhPgorCQkJCUluIGNhc2UgdGhhdCB0aGUgYmxvY2sgd2hpY2ggaG9sZHMgdGhlIGJhZCBibG9jayB0YWJsZSBkb2VzIGNvbnRhaW4KKwkJCQlvdGhlciB1c2VmdWwgaW5mb3JtYXRpb24sIHNldCB0aGUgb3B0aW9uIE5BTkRfQkJUX1NBVkVDT05URU5ULiBXaGVuCisJCQkJdGhlIGJhZCBibG9jayB0YWJsZSBpcyB3cml0dGVuIHRoZW4gdGhlIHdob2xlIGJsb2NrIGlzIHJlYWQgdGhlIGJhZAorCQkJCWJsb2NrIHRhYmxlIGlzIHVwZGF0ZWQgYW5kIHRoZSBibG9jayBpcyBlcmFzZWQgYW5kIGV2ZXJ5dGhpbmcgaXMgCisJCQkJd3JpdHRlbiBiYWNrLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0IG9ubHkgdGhlIGJhZCBibG9jayB0YWJsZQorCQkJCWlzIHdyaXR0ZW4gYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgYmxvY2sgaXMgaWdub3JlZCBhbmQgZXJhc2VkLgorCQkJCTwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgcmVzZXJ2ZWQgYmxvY2tzPC9wYXJhPgorCQkJCTxwYXJhPgorCQkJCUZvciBhdXRvbWF0aWMgcGxhY2VtZW50IHNvbWUgYmxvY2tzIG11c3QgYmUgcmVzZXJ2ZWQgZm9yCisJCQkJYmFkIGJsb2NrIHRhYmxlIHN0b3JhZ2UuIFRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgYmxvY2tzIGlzIGRlZmluZWQgCisJCQkJaW4gdGhlIG1heGJsb2NrcyBtZW1iZXIgb2YgdGhlIGJhYmQgYmxvY2sgdGFibGUgZGVzY3JpcHRpb24gc3RydWN0dXJlLgorCQkJCVJlc2VydmluZyA0IGJsb2NrcyBmb3IgbWlycm9yZWQgdGFibGVzIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgbnVtYmVyLiAKKwkJCQlUaGlzIGFsc28gbGltaXRzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHdoaWNoIGFyZSBzY2FubmVkIGZvciB0aGUgYmFkCisJCQkJYmxvY2sgdGFibGUgaWRlbnQgcGF0dGVybi4KKwkJCQk8L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8L2l0ZW1pemVkbGlzdD4KKwkJCTwvcGFyYT4KKwkJPC9zZWN0Mj4KKwk8L3NlY3QxPgorCTxzZWN0MT4KKwkJPHRpdGxlPlNwYXJlIGFyZWEgKGF1dG8pcGxhY2VtZW50PC90aXRsZT4KKwkJPHBhcmE+CisJCQlUaGUgbmFuZCBkcml2ZXIgaW1wbGVtZW50cyBkaWZmZXJlbnQgcG9zc2liaWxpdGllcyBmb3IKKwkJCXBsYWNlbWVudCBvZiBmaWxlc3lzdGVtIGRhdGEgaW4gdGhlIHNwYXJlIGFyZWEsIAorCQkJPGl0ZW1pemVkbGlzdD4KKwkJCTxsaXN0aXRlbT48cGFyYT5QbGFjZW1lbnQgZGVmaW5lZCBieSBmcyBkcml2ZXI8L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5BdXRvbWF0aWMgcGxhY2VtZW50PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8L2l0ZW1pemVkbGlzdD4KKwkJCVRoZSBkZWZhdWx0IHBsYWNlbWVudCBmdW5jdGlvbiBpcyBhdXRvbWF0aWMgcGxhY2VtZW50LiBUaGUKKwkJCW5hbmQgZHJpdmVyIGhhcyBidWlsdCBpbiBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWVzIGZvciB0aGUKKwkJCXZhcmlvdXMgY2hpcHR5cGVzLiBJZiBkdWUgdG8gaGFyZHdhcmUgRUNDIGZ1bmN0aW9uYWxpdHkgdGhlCisJCQlkZWZhdWx0IHBsYWNlbWVudCBkb2VzIG5vdCBmaXQgdGhlbiB0aGUgYm9hcmQgZHJpdmVyIGNhbgorCQkJcHJvdmlkZSBhIG93biBwbGFjZW1lbnQgc2NoZW1lLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJRmlsZSBzeXN0ZW0gZHJpdmVycyBjYW4gcHJvdmlkZSBhIG93biBwbGFjZW1lbnQgc2NoZW1lIHdoaWNoCisJCQlpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZS4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCVBsYWNlbWVudCBzY2hlbWVzIGFyZSBkZWZpbmVkIGJ5IGEgbmFuZF9vb2JpbmZvIHN0cnVjdHVyZQorCSAgICAgCQk8cHJvZ3JhbWxpc3Rpbmc+CitzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKKwlpbnQJdXNlZWNjOworCWludAllY2NieXRlczsKKwlpbnQJZWNjcG9zWzI0XTsKKwlpbnQJb29iZnJlZVs4XVsyXTsKK307CisJICAgICAJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJCQk8aXRlbWl6ZWRsaXN0PgorCQkJPGxpc3RpdGVtPjxwYXJhPnVzZWVjYzwvcGFyYT48cGFyYT4KKwkJCQlUaGUgdXNlZWNjIG1lbWJlciBjb250cm9scyB0aGUgZWNjIGFuZCBwbGFjZW1lbnQgZnVuY3Rpb24uIFRoZSBoZWFkZXIKKwkJCQlmaWxlIGluY2x1ZGUvbXRkL210ZC1hYmkuaCBjb250YWlucyBjb25zdGFudHMgdG8gc2VsZWN0IGVjYyBhbmQKKwkJCQlwbGFjZW1lbnQuIE1URF9OQU5ERUNDX09GRiBzd2l0Y2hlcyBvZmYgdGhlIGVjYyBjb21wbGV0ZS4gVGhpcyBpcworCQkJCW5vdCByZWNvbW1lbmRlZCBhbmQgYXZhaWxhYmxlIGZvciB0ZXN0aW5nIGFuZCBkaWFnbm9zaXMgb25seS4KKwkJCQlNVERfTkFOREVDQ19QTEFDRSBzZWxlY3RzIGNhbGxlciBkZWZpbmVkIHBsYWNlbWVudCwgTVREX05BTkRFQ0NfQVVUT1BMQUNFCisJCQkJc2VsZWN0cyBhdXRvbWF0aWMgcGxhY2VtZW50LgorCQkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+ZWNjYnl0ZXM8L3BhcmE+PHBhcmE+CisJCQkJVGhlIGVjY2J5dGVzIG1lbWJlciBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZWNjIGJ5dGVzIHBlciBwYWdlLgorCQkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+ZWNjcG9zPC9wYXJhPjxwYXJhPgorCQkJCVRoZSBlY2Nwb3MgYXJyYXkgaG9sZHMgdGhlIGJ5dGUgb2Zmc2V0cyBpbiB0aGUgc3BhcmUgYXJlYSB3aGVyZQorCQkJCXRoZSBlY2MgY29kZXMgYXJlIHBsYWNlZC4KKwkJCTwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPm9vYmZyZWU8L3BhcmE+PHBhcmE+CisJCQkJVGhlIG9vYmZyZWUgYXJyYXkgZGVmaW5lcyB0aGUgYXJlYXMgaW4gdGhlIHNwYXJlIGFyZWEgd2hpY2ggY2FuIGJlCisJCQkJdXNlZCBmb3IgYXV0b21hdGljIHBsYWNlbWVudC4gVGhlIGluZm9ybWF0aW9uIGlzIGdpdmVuIGluIHRoZSBmb3JtYXQKKwkJCQl7b2Zmc2V0LCBzaXplfS4gb2Zmc2V0IGRlZmluZXMgdGhlIHN0YXJ0IG9mIHRoZSB1c2FibGUgYXJlYSwgc2l6ZSB0aGUKKwkJCQlsZW5ndGggaW4gYnl0ZXMuIE1vcmUgdGhhbiBvbmUgYXJlYSBjYW4gYmUgZGVmaW5lZC4gVGhlIGxpc3QgaXMgdGVybWluYXRlZAorCQkJCWJ5IGFuIHswLCAwfSBlbnRyeS4KKwkJCTwvcGFyYT48L2xpc3RpdGVtPgorCQkJPC9pdGVtaXplZGxpc3Q+CisJCTwvcGFyYT4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPlBsYWNlbWVudCBkZWZpbmVkIGJ5IGZzIGRyaXZlcjwvdGl0bGU+CisJCQk8cGFyYT4KKwkJCQlUaGUgY2FsbGluZyBmdW5jdGlvbiBwcm92aWRlcyBhIHBvaW50ZXIgdG8gYSBuYW5kX29vYmluZm8KKwkJCQlzdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyB0aGUgZWNjIHBsYWNlbWVudC4gRm9yIHdyaXRlcyB0aGUKKwkJCQljYWxsZXIgbXVzdCBwcm92aWRlIGEgc3BhcmUgYXJlYSBidWZmZXIgYWxvbmcgd2l0aCB0aGUKKwkJCQlkYXRhIGJ1ZmZlci4gVGhlIHNwYXJlIGFyZWEgYnVmZmVyIHNpemUgaXMgKG51bWJlciBvZiBwYWdlcykgKgorCQkJCShzaXplIG9mIHNwYXJlIGFyZWEpLiBGb3IgcmVhZHMgdGhlIGJ1ZmZlciBzaXplIGlzCisJCQkJKG51bWJlciBvZiBwYWdlcykgKiAoKHNpemUgb2Ygc3BhcmUgYXJlYSkgKyAobnVtYmVyIG9mIGVjYworCQkJCXN0ZXBzIHBlciBwYWdlKSAqIHNpemVvZiAoaW50KSkuIFRoZSBkcml2ZXIgc3RvcmVzIHRoZQorCQkJCXJlc3VsdCBvZiB0aGUgZWNjIGNoZWNrIGZvciBlYWNoIHR1cGxlIGluIHRoZSBzcGFyZSBidWZmZXIuCisJCQkJVGhlIHN0b3JhZ2Ugc2VxdWVuY2UgaXMgCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQkmbHQ7c3BhcmUgZGF0YSBwYWdlIDAmZ3Q7Jmx0O2VjYyByZXN1bHQgMCZndDsuLi4mbHQ7ZWNjIHJlc3VsdCBuJmd0OworCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJLi4uCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQkmbHQ7c3BhcmUgZGF0YSBwYWdlIG4mZ3Q7Jmx0O2VjYyByZXN1bHQgMCZndDsuLi4mbHQ7ZWNjIHJlc3VsdCBuJmd0OworCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJVGhpcyBpcyBhIGxlZ2FjeSBtb2RlIHVzZWQgYnkgWUFGRlMxLgorCQkJPC9wYXJhPgorCQkJPHBhcmE+CisJCQkJSWYgdGhlIHNwYXJlIGFyZWEgYnVmZmVyIGlzIE5VTEwgdGhlbiBvbmx5IHRoZSBFQ0MgcGxhY2VtZW50IGlzCisJCQkJZG9uZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHNjaGVtZSBpbiB0aGUgbmFuZF9vb2JpbmZvIHN0cnVjdHVyZS4KKwkJCTwvcGFyYT4KKwkJPC9zZWN0Mj4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPkF1dG9tYXRpYyBwbGFjZW1lbnQ8L3RpdGxlPgorCQkJPHBhcmE+CisJCQkJQXV0b21hdGljIHBsYWNlbWVudCB1c2VzIHRoZSBidWlsdCBpbiBkZWZhdWx0cyB0byBwbGFjZSB0aGUKKwkJCQllY2MgYnl0ZXMgaW4gdGhlIHNwYXJlIGFyZWEuIElmIGZpbGVzeXN0ZW0gZGF0YSBoYXZlIHRvIGJlIHN0b3JlZCAvCisJCQkJcmVhZCBpbnRvIHRoZSBzcGFyZSBhcmVhIHRoZW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24gbXVzdCBwcm92aWRlIGEKKwkJCQlidWZmZXIuIFRoZSBidWZmZXIgc2l6ZSBwZXIgcGFnZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvb2JmcmVlIGFycmF5IGluCisJCQkJdGhlIG5hbmRfb29iaW5mbyBzdHJ1Y3R1cmUuCisJCQk8L3BhcmE+CisJCQk8cGFyYT4KKwkJCQlJZiB0aGUgc3BhcmUgYXJlYSBidWZmZXIgaXMgTlVMTCB0aGVuIG9ubHkgdGhlIEVDQyBwbGFjZW1lbnQgaXMKKwkJCQlkb25lIGFjY29yZGluZyB0byB0aGUgZGVmYXVsdCBidWlsdGluIHNjaGVtZS4KKwkJCTwvcGFyYT4KKwkJPC9zZWN0Mj4KKwkJPHNlY3QyPgorCQkJPHRpdGxlPlVzZXIgc3BhY2UgcGxhY2VtZW50IHNlbGVjdGlvbjwvdGl0bGU+CisJCTxwYXJhPgorCQkJQWxsIG5vbiBlY2MgZnVuY3Rpb25zIGxpa2UgbXRkLT5yZWFkIGFuZCBtdGQtPndyaXRlIHVzZSBhbiBpbnRlcm5hbCAKKwkJCXN0cnVjdHVyZSwgd2hpY2ggY2FuIGJlIHNldCBieSBhbiBpb2N0bC4gVGhpcyBzdHJ1Y3R1cmUgaXMgcHJlc2V0IAorCQkJdG8gdGhlIGF1dG9wbGFjZW1lbnQgZGVmYXVsdC4KKwkgICAgIAkJPHByb2dyYW1saXN0aW5nPgorCWlvY3RsIChmZCwgTUVNU0VUT09CU0VMLCBvb2JzZWwpOworCSAgICAgCQk8L3Byb2dyYW1saXN0aW5nPgorCQkJb29ic2VsIGlzIGEgcG9pbnRlciB0byBhIHVzZXIgc3VwcGxpZWQgc3RydWN0dXJlIG9mIHR5cGUKKwkJCW5hbmRfb29iY29uZmlnLiBUaGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUgbXVzdCBtYXRjaCB0aGUgCisJCQljcml0ZXJpYSBvZiB0aGUgZmlsZXN5c3RlbSwgd2hpY2ggd2lsbCBiZSB1c2VkLiBTZWUgYW4gZXhhbXBsZSBpbiB1dGlscy9uYW5kd3JpdGUuYy4KKwkJPC9wYXJhPgorCQk8L3NlY3QyPgorCTwvc2VjdDE+CQorCTxzZWN0MT4KKwkJPHRpdGxlPlNwYXJlIGFyZWEgYXV0b3BsYWNlbWVudCBkZWZhdWx0IHNjaGVtZXM8L3RpdGxlPgorCQk8c2VjdDI+CisJCQk8dGl0bGU+MjU2IGJ5dGUgcGFnZXNpemU8L3RpdGxlPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIzIj48dGJvZHk+Cis8cm93PgorPGVudHJ5Pk9mZnNldDwvZW50cnk+Cis8ZW50cnk+Q29udGVudDwvZW50cnk+Cis8ZW50cnk+Q29tbWVudDwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMDwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMDwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMDwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMjwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMjwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMjwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMzwvZW50cnk+Cis8ZW50cnk+QXV0b3BsYWNlIDA8L2VudHJ5PgorPGVudHJ5PjwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwNDwvZW50cnk+Cis8ZW50cnk+QXV0b3BsYWNlIDE8L2VudHJ5PgorPGVudHJ5PjwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwNTwvZW50cnk+Cis8ZW50cnk+QmFkIGJsb2NrIG1hcmtlcjwvZW50cnk+Cis8ZW50cnk+SWYgYW55IGJpdCBpbiB0aGlzIGJ5dGUgaXMgemVybywgdGhlbiB0aGlzIGJsb2NrIGlzIGJhZC4KK1RoaXMgYXBwbGllcyBvbmx5IHRvIHRoZSBmaXJzdCBwYWdlIGluIGEgYmxvY2suIEluIHRoZSByZW1haW5pbmcKK3BhZ2VzIHRoaXMgYnl0ZSBpcyByZXNlcnZlZDwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwNjwvZW50cnk+Cis8ZW50cnk+QXV0b3BsYWNlIDI8L2VudHJ5PgorPGVudHJ5PjwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwNzwvZW50cnk+Cis8ZW50cnk+QXV0b3BsYWNlIDM8L2VudHJ5PgorPGVudHJ5PjwvZW50cnk+Cis8L3Jvdz4KKzwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCQk8L3NlY3QyPgorCQk8c2VjdDI+CisJCQk8dGl0bGU+NTEyIGJ5dGUgcGFnZXNpemU8L3RpdGxlPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIzIj48dGJvZHk+Cis8cm93PgorPGVudHJ5Pk9mZnNldDwvZW50cnk+Cis8ZW50cnk+Q29udGVudDwvZW50cnk+Cis8ZW50cnk+Q29tbWVudDwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMDwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMDwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgbG93ZXIgMjU2IEJ5dGUgZGF0YSBpbgordGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDAxPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSBsb3dlciAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDAyPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAyPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBsb3dlciAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDAzPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAzPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAwIG9mIHRoZSB1cHBlciAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDA0PC9lbnRyeT4KKzxlbnRyeT5yZXNlcnZlZDwvZW50cnk+Cis8ZW50cnk+cmVzZXJ2ZWQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDU8L2VudHJ5PgorPGVudHJ5PkJhZCBibG9jayBtYXJrZXI8L2VudHJ5PgorPGVudHJ5PklmIGFueSBiaXQgaW4gdGhpcyBieXRlIGlzIHplcm8sIHRoZW4gdGhpcyBibG9jayBpcyBiYWQuCitUaGlzIGFwcGxpZXMgb25seSB0byB0aGUgZmlyc3QgcGFnZSBpbiBhIGJsb2NrLiBJbiB0aGUgcmVtYWluaW5nCitwYWdlcyB0aGlzIGJ5dGUgaXMgcmVzZXJ2ZWQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDY8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDQ8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIHVwcGVyIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDc8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDU8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIHVwcGVyIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDggLSAweDBGPC9lbnRyeT4KKzxlbnRyeT5BdXRvcGxhY2UgMCAtIDc8L2VudHJ5PgorPGVudHJ5PjwvZW50cnk+Cis8L3Jvdz4KKzwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCQk8L3NlY3QyPgorCQk8c2VjdDI+CisJCQk8dGl0bGU+MjA0OCBieXRlIHBhZ2VzaXplPC90aXRsZT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMyI+PHRib2R5PgorPHJvdz4KKzxlbnRyeT5PZmZzZXQ8L2VudHJ5PgorPGVudHJ5PkNvbnRlbnQ8L2VudHJ5PgorPGVudHJ5PkNvbW1lbnQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDA8L2VudHJ5PgorPGVudHJ5PkJhZCBibG9jayBtYXJrZXI8L2VudHJ5PgorPGVudHJ5PklmIGFueSBiaXQgaW4gdGhpcyBieXRlIGlzIHplcm8sIHRoZW4gdGhpcyBibG9jayBpcyBiYWQuCitUaGlzIGFwcGxpZXMgb25seSB0byB0aGUgZmlyc3QgcGFnZSBpbiBhIGJsb2NrLiBJbiB0aGUgcmVtYWluaW5nCitwYWdlcyB0aGlzIGJ5dGUgaXMgcmVzZXJ2ZWQ8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MDE8L2VudHJ5PgorPGVudHJ5PlJlc2VydmVkPC9lbnRyeT4KKzxlbnRyeT5SZXNlcnZlZDwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgwMi0weDI3PC9lbnRyeT4KKzxlbnRyeT5BdXRvcGxhY2UgMCAtIDM3PC9lbnRyeT4KKzxlbnRyeT48L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4Mjg8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDA8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDAgb2YgdGhlIGZpcnN0IDI1NiBCeXRlIGRhdGEgaW4KK3RoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgyOTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgZmlyc3QgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgyQTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMjwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgZmlyc3QgMjU2IEJ5dGVzIGRhdGEgaW4KK3RoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgyQjwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMzwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgc2Vjb25kIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MkM8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDQ8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIHNlY29uZCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDJEPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSA1PC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBzZWNvbmQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgyRTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgNjwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgdGhpcmQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgyRjwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgNzwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgdGhpcmQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzMDwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgODwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgdGhpcmQgMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzMTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgOTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgZm91cnRoIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MzI8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDEwPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAxIG9mIHRoZSBmb3VydGggMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzMzwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTE8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIGZvdXJ0aCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDM0PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxMjwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgZmlmdGggMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzNTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMTM8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIGZpZnRoIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4MzY8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDE0PC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBmaWZ0aCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDM3PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxNTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgc2l4dCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDM4PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxNjwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgc2l4dCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDM5PC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxNzwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgc2l4dCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDNBPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxODwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgc2V2ZW50aCAyNTYgQnl0ZXMgb2YKK2RhdGEgaW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDNCPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAxOTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgc2V2ZW50aCAyNTYgQnl0ZXMgb2YKK2RhdGEgaW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDNDPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAyMDwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMiBvZiB0aGUgc2V2ZW50aCAyNTYgQnl0ZXMgb2YKK2RhdGEgaW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPHJvdz4KKzxlbnRyeT4weDNEPC9lbnRyeT4KKzxlbnRyeT5FQ0MgYnl0ZSAyMTwvZW50cnk+Cis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgZWlndGggMjU2IEJ5dGVzIG9mIGRhdGEKK2luIHRoaXMgcGFnZTwvZW50cnk+Cis8L3Jvdz4KKzxyb3c+Cis8ZW50cnk+MHgzRTwvZW50cnk+Cis8ZW50cnk+RUNDIGJ5dGUgMjI8L2VudHJ5PgorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIGVpZ3RoIDI1NiBCeXRlcyBvZiBkYXRhCitpbiB0aGlzIHBhZ2U8L2VudHJ5PgorPC9yb3c+Cis8cm93PgorPGVudHJ5PjB4M0Y8L2VudHJ5PgorPGVudHJ5PkVDQyBieXRlIDIzPC9lbnRyeT4KKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBlaWd0aCAyNTYgQnl0ZXMgb2YgZGF0YQoraW4gdGhpcyBwYWdlPC9lbnRyeT4KKzwvcm93PgorPC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisJCTwvc2VjdDI+CisgICAgIAk8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImZpbGVzeXN0ZW1zIj4KKyAgICAgCTx0aXRsZT5GaWxlc3lzdGVtIHN1cHBvcnQ8L3RpdGxlPgorCTxwYXJhPgorCQlUaGUgTkFORCBkcml2ZXIgcHJvdmlkZXMgYWxsIG5lY2NlY2FyeSBmdW5jdGlvbnMgZm9yIGEKKwkJZmlsZXN5c3RlbSB2aWEgdGhlIE1URCBpbnRlcmZhY2UuCisJPC9wYXJhPgorCTxwYXJhPgorCQlGaWxlc3lzdGVtcyBtdXN0IGJlIGF3YXJlIG9mIHRoZSBOQU5EIHBlY3VsYXJpdGllcyBhbmQKKwkJcmVzdHJpY3Rpb25zLiBPbmUgbWFqb3IgcmVzdHJpY3Rpb25zIG9mIE5BTkQgRmxhc2ggaXMsIHRoYXQgeW91IGNhbm5vdCAKKwkJd3JpdGUgYXMgb2Z0ZW4gYXMgeW91IHdhbnQgdG8gYSBwYWdlLiBUaGUgY29uc2VjdXRpdmUgd3JpdGVzIHRvIGEgcGFnZSwgCisJCWJlZm9yZSBlcmFzaW5nIGl0IGFnYWluLCBhcmUgcmVzdHJpY3RlZCB0byAxLTMgd3JpdGVzLCBkZXBlbmRpbmcgb24gdGhlIAorCQltYW51ZmFjdHVyZXJzIHNwZWNpZmljYXRpb25zLiBUaGlzIGFwcGxpZXMgc2ltaWxhciB0byB0aGUgc3BhcmUgYXJlYS4gCisJPC9wYXJhPgorCTxwYXJhPgorCQlUaGVyZWZvciBOQU5EIGF3YXJlIGZpbGVzeXN0ZW1zIG11c3QgZWl0aGVyIHdyaXRlIGluIHBhZ2Ugc2l6ZSBjaHVua3MKKwkJb3IgaG9sZCBhIHdyaXRlYnVmZmVyIHRvIGNvbGxlY3Qgc21hbGxlciB3cml0ZXMgdW50aWwgdGhleSBzdW0gdXAgdG8gCisJCXBhZ2VzaXplLiBBdmFpbGFibGUgTkFORCBhd2FyZSBmaWxlc3lzdGVtczogSkZGUzIsIFlBRkZTLiAJCQorCTwvcGFyYT4KKwk8cGFyYT4KKwkJVGhlIHNwYXJlIGFyZWEgdXNhZ2UgdG8gc3RvcmUgZmlsZXN5c3RlbSBkYXRhIGlzIGNvbnRyb2xsZWQgYnkKKwkJdGhlIHNwYXJlIGFyZWEgcGxhY2VtZW50IGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMgZGVzY3JpYmVkIGluIG9uZQorCQlvZiB0aGUgZWFybGllciBjaGFwdGVycy4KKwk8L3BhcmE+CisgIDwvY2hhcHRlcj4JCisgIDxjaGFwdGVyIGlkPSJ0b29scyI+CisgICAgIAk8dGl0bGU+VG9vbHM8L3RpdGxlPgorCTxwYXJhPgorCQlUaGUgTVREIHByb2plY3QgcHJvdmlkZXMgYSBjb3VwbGUgb2YgaGVscGZ1bCB0b29scyB0byBoYW5kbGUgTkFORCBGbGFzaC4KKwkJPGl0ZW1pemVkbGlzdD4KKwkJPGxpc3RpdGVtPjxwYXJhPmZsYXNoZXJhc2UsIGZsYXNoZXJhc2VhbGw6IEVyYXNlIGFuZCBmb3JtYXQgRkxBU0ggcGFydGl0aW9uczwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+bmFuZHdyaXRlOiB3cml0ZSBmaWxlc3lzdGVtIGltYWdlcyB0byBOQU5EIEZMQVNIPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTxsaXN0aXRlbT48cGFyYT5uYW5kZHVtcDogZHVtcCB0aGUgY29udGVudHMgb2YgYSBOQU5EIEZMQVNIIHBhcnRpdGlvbnM8L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJPC9wYXJhPgorCTxwYXJhPgorCQlUaGVzZSB0b29scyBhcmUgYXdhcmUgb2YgdGhlIE5BTkQgcmVzdHJpY3Rpb25zLiBQbGVhc2UgdXNlIHRob3NlIHRvb2xzCisJCWluc3RlYWQgb2YgY29tcGxhaW5pbmcgYWJvdXQgZXJyb3JzIHdoaWNoIGFyZSBjYXVzZWQgYnkgbm9uIE5BTkQgYXdhcmUKKwkJYWNjZXNzIG1ldGhvZHMuCisJPC9wYXJhPgorICA8L2NoYXB0ZXI+CQorCisgIDxjaGFwdGVyIGlkPSJkZWZpbmVzIj4KKyAgICAgPHRpdGxlPkNvbnN0YW50czwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBjb25zdGFudHMgd2hpY2ggbWlnaHQgYmUgcmVsZXZhbnQgZm9yIGEgZHJpdmVyIGRldmVsb3Blci4KKyAgICAgPC9wYXJhPgorICAgICA8c2VjdDE+ICAgCisJPHRpdGxlPkNoaXAgb3B0aW9uIGNvbnN0YW50czwvdGl0bGU+CisgICAgIAk8c2VjdDI+ICAgCisJCTx0aXRsZT5Db25zdGFudHMgZm9yIGNoaXAgaWQgdGFibGU8L3RpdGxlPgorICAgICAJCTxwYXJhPgorCQlUaGVzZSBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gbmFuZC5oLiBUaGV5IGFyZSBvcmVkIHRvZ2V0aGVyIHRvIGRlc2NyaWJlCisJCXRoZSBjaGlwIGZ1bmN0aW9uYWxpdHkuCisgICAgIAkJPHByb2dyYW1saXN0aW5nPgorLyogQ2hpcCBjYW4gbm90IGF1dG8gaW5jcmVtZW50IHBhZ2VzICovCisjZGVmaW5lIE5BTkRfTk9fQVVUT0lOQ1IJMHgwMDAwMDAwMQorLyogQnVzd2l0ZGggaXMgMTYgYml0ICovCisjZGVmaW5lIE5BTkRfQlVTV0lEVEhfMTYJMHgwMDAwMDAwMgorLyogRGV2aWNlIHN1cHBvcnRzIHBhcnRpYWwgcHJvZ3JhbW1pbmcgd2l0aG91dCBwYWRkaW5nICovCisjZGVmaW5lIE5BTkRfTk9fUEFERElORwkJMHgwMDAwMDAwNAorLyogQ2hpcCBoYXMgY2FjaGUgcHJvZ3JhbSBmdW5jdGlvbiAqLworI2RlZmluZSBOQU5EX0NBQ0hFUFJHCQkweDAwMDAwMDA4CisvKiBDaGlwIGhhcyBjb3B5IGJhY2sgZnVuY3Rpb24gKi8KKyNkZWZpbmUgTkFORF9DT1BZQkFDSwkJMHgwMDAwMDAxMAorLyogQU5EIENoaXAgd2hpY2ggaGFzIDQgYmFua3MgYW5kIGEgY29uZnVzaW5nIHBhZ2UgLyBibG9jayAKKyAqIGFzc2lnbm1lbnQuIFNlZSBSZW5lc2FzIGRhdGFzaGVldCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBOQU5EX0lTX0FORAkJMHgwMDAwMDAyMAorLyogQ2hpcCBoYXMgYSBhcnJheSBvZiA0IHBhZ2VzIHdoaWNoIGNhbiBiZSByZWFkIHdpdGhvdXQKKyAqIGFkZGl0aW9uYWwgcmVhZHkgL2J1c3kgd2FpdHMgKi8KKyNkZWZpbmUgTkFORF80UEFHRV9BUlJBWQkweDAwMDAwMDQwIAorCQk8L3Byb2dyYW1saXN0aW5nPgorICAgICAJCTwvcGFyYT4KKyAgICAgCTwvc2VjdDI+CisgICAgIAk8c2VjdDI+ICAgCisJCTx0aXRsZT5Db25zdGFudHMgZm9yIHJ1bnRpbWUgb3B0aW9uczwvdGl0bGU+CisgICAgIAkJPHBhcmE+CisJCVRoZXNlIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiBuYW5kLmguIFRoZXkgYXJlIG9yZWQgdG9nZXRoZXIgdG8gZGVzY3JpYmUKKwkJdGhlIGZ1bmN0aW9uYWxpdHkuCisgICAgIAkJPHByb2dyYW1saXN0aW5nPgorLyogVXNlIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlLiBUaGlzIG9wdGlvbiBpcyBwYXJzZWQgYnkgdGhlCisgKiBkZWZhdWx0IGJhZCBibG9jayB0YWJsZSBmdW5jdGlvbiAobmFuZF9kZWZhdWx0X2JidCkuICovCisjZGVmaW5lIE5BTkRfVVNFX0ZMQVNIX0JCVAkweDAwMDEwMDAwCisvKiBUaGUgaHcgZWNjIGdlbmVyYXRvciBwcm92aWRlcyBhIHN5bmRyb21lIGluc3RlYWQgYSBlY2MgdmFsdWUgb24gcmVhZCAKKyAqIFRoaXMgY2FuIG9ubHkgd29yayBpZiB3ZSBoYXZlIHRoZSBlY2MgYnl0ZXMgZGlyZWN0bHkgYmVoaW5kIHRoZSAKKyAqIGRhdGEgYnl0ZXMuIEFwcGxpZXMgZm9yIERPQyBhbmQgQUctQU5EIFJlbmVzYXMgSFcgUmVlZCBTb2xvbW9uIGdlbmVyYXRvcnMgKi8KKyNkZWZpbmUgTkFORF9IV0VDQ19TWU5EUk9NRQkweDAwMDIwMDAwCisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgIAkJPC9wYXJhPgorICAgICAJPC9zZWN0Mj4KKyAgICAgPC9zZWN0MT4JCisKKyAgICAgPHNlY3QxPiAgIAorCTx0aXRsZT5FQ0Mgc2VsZWN0aW9uIGNvbnN0YW50czwvdGl0bGU+CisJPHBhcmE+CisJVXNlIHRoZXNlIGNvbnN0YW50cyB0byBzZWxlY3QgdGhlIEVDQyBhbGdvcml0aG0uCisgIAk8cHJvZ3JhbWxpc3Rpbmc+CisvKiBObyBFQ0MuIFVzYWdlIGlzIG5vdCByZWNvbW1lbmRlZCAhICovCisjZGVmaW5lIE5BTkRfRUNDX05PTkUJCTAKKy8qIFNvZnR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciAyNTYgQnl0ZSBkYXRhICovCisjZGVmaW5lIE5BTkRfRUNDX1NPRlQJCTEKKy8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciAyNTYgQnl0ZSBkYXRhICovCisjZGVmaW5lIE5BTkRfRUNDX0hXM18yNTYJMgorLyogSGFyZHdhcmUgRUNDIDMgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KKyNkZWZpbmUgTkFORF9FQ0NfSFczXzUxMgkzCisvKiBIYXJkd2FyZSBFQ0MgNiBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLworI2RlZmluZSBOQU5EX0VDQ19IVzZfNTEyCTQKKy8qIEhhcmR3YXJlIEVDQyA2IGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCisjZGVmaW5lIE5BTkRfRUNDX0hXOF81MTIJNgorCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9wYXJhPgorICAgICA8L3NlY3QxPgkKKworICAgICA8c2VjdDE+ICAgCisJPHRpdGxlPkhhcmR3YXJlIGNvbnRyb2wgcmVsYXRlZCBjb25zdGFudHM8L3RpdGxlPgorCTxwYXJhPgorCVRoZXNlIGNvbnN0YW50cyBkZXNjcmliZSB0aGUgcmVxdWVzdGVkIGhhcmR3YXJlIGFjY2VzcyBmdW5jdGlvbiB3aGVuCisJdGhlIGJvYXJkc3BlY2lmaWMgaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbiBpcyBjYWxsZWQKKyAgCTxwcm9ncmFtbGlzdGluZz4KKy8qIFNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUTkNFIAkxCisvKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgorLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUQ0xFCQkzCisvKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFCQk0CisvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gaGlnaCAqLworI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUJCTUKKy8qIERlc2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGxvdyAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUJCTYKKy8qIFNldCB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gaGlnaC4gTm90IHVzZWQhICovCisjZGVmaW5lIE5BTkRfQ1RMX1NFVFdQCQk3CisvKiBDbGVhciB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gbG93LiBOb3QgdXNlZCEgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSV1AJCTgKKwk8L3Byb2dyYW1saXN0aW5nPgorCTwvcGFyYT4KKyAgICAgPC9zZWN0MT4JCisKKyAgICAgPHNlY3QxPiAgIAorCTx0aXRsZT5CYWQgYmxvY2sgdGFibGUgcmVsYXRlZCBjb25zdGFudHM8L3RpdGxlPgorCTxwYXJhPgorCVRoZXNlIGNvbnN0YW50cyBkZXNjcmliZSB0aGUgb3B0aW9ucyB1c2VkIGZvciBiYWQgYmxvY2sKKwl0YWJsZSBkZXNjcmlwdG9ycy4KKyAgCTxwcm9ncmFtbGlzdGluZz4KKy8qIE9wdGlvbnMgZm9yIHRoZSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvcnMgKi8KKworLyogVGhlIG51bWJlciBvZiBiaXRzIHVzZWQgcGVyIGJsb2NrIGluIHRoZSBiYnQgb24gdGhlIGRldmljZSAqLworI2RlZmluZSBOQU5EX0JCVF9OUkJJVFNfTVNLCTB4MDAwMDAwMEYKKyNkZWZpbmUgTkFORF9CQlRfMUJJVAkJMHgwMDAwMDAwMQorI2RlZmluZSBOQU5EX0JCVF8yQklUCQkweDAwMDAwMDAyCisjZGVmaW5lIE5BTkRfQkJUXzRCSVQJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTkFORF9CQlRfOEJJVAkJMHgwMDAwMDAwOAorLyogVGhlIGJhZCBibG9jayB0YWJsZSBpcyBpbiB0aGUgbGFzdCBnb29kIGJsb2NrIG9mIHRoZSBkZXZpY2UgKi8KKyNkZWZpbmUJTkFORF9CQlRfTEFTVEJMT0NLCTB4MDAwMDAwMTAKKy8qIFRoZSBiYnQgaXMgYXQgdGhlIGdpdmVuIHBhZ2UsIGVsc2Ugd2UgbXVzdCBzY2FuIGZvciB0aGUgYmJ0ICovCisjZGVmaW5lIE5BTkRfQkJUX0FCU1BBR0UJMHgwMDAwMDAyMAorLyogVGhlIGJidCBpcyBhdCB0aGUgZ2l2ZW4gcGFnZSwgZWxzZSB3ZSBtdXN0IHNjYW4gZm9yIHRoZSBiYnQgKi8KKyNkZWZpbmUgTkFORF9CQlRfU0VBUkNICQkweDAwMDAwMDQwCisvKiBiYnQgaXMgc3RvcmVkIHBlciBjaGlwIG9uIG11bHRpY2hpcCBkZXZpY2VzICovCisjZGVmaW5lIE5BTkRfQkJUX1BFUkNISVAJMHgwMDAwMDA4MAorLyogYmJ0IGhhcyBhIHZlcnNpb24gY291bnRlciBhdCBvZmZzZXQgdmVyb2ZmcyAqLworI2RlZmluZSBOQU5EX0JCVF9WRVJTSU9OCTB4MDAwMDAxMDAKKy8qIENyZWF0ZSBhIGJidCBpZiBub25lIGF4aXN0cyAqLworI2RlZmluZSBOQU5EX0JCVF9DUkVBVEUJCTB4MDAwMDAyMDAKKy8qIFNlYXJjaCBnb29kIC8gYmFkIHBhdHRlcm4gdGhyb3VnaCBhbGwgcGFnZXMgb2YgYSBibG9jayAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMJMHgwMDAwMDQwMAorLyogU2NhbiBibG9jayBlbXB0eSBkdXJpbmcgZ29vZCAvIGJhZCBibG9jayBzY2FuICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5FTVBUWQkweDAwMDAwODAwCisvKiBXcml0ZSBiYnQgaWYgbmVjY2VjYXJ5ICovCisjZGVmaW5lIE5BTkRfQkJUX1dSSVRFCQkweDAwMDAxMDAwCisvKiBSZWFkIGFuZCB3cml0ZSBiYWNrIGJsb2NrIGNvbnRlbnRzIHdoZW4gd3JpdGluZyBiYnQgKi8KKyNkZWZpbmUgTkFORF9CQlRfU0FWRUNPTlRFTlQJMHgwMDAwMjAwMAorCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9wYXJhPgorICAgICA8L3NlY3QxPgkKKworICA8L2NoYXB0ZXI+CisgIAkKKyAgPGNoYXB0ZXIgaWQ9InN0cnVjdHMiPgorICAgICA8dGl0bGU+U3RydWN0dXJlczwvdGl0bGU+CisgICAgIDxwYXJhPgorICAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgdGhlIGF1dG9nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvZiB0aGUgc3RydWN0dXJlcyB3aGljaCBhcmUKKyAgICAgdXNlZCBpbiB0aGUgTkFORCBkcml2ZXIgYW5kIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBhIGRyaXZlciBkZXZlbG9wZXIuIEVhY2ggIAorICAgICBzdHJ1Y3QgbWVtYmVyIGhhcyBhIHNob3J0IGRlc2NyaXB0aW9uIHdoaWNoIGlzIG1hcmtlZCB3aXRoIGFuIFtYWFhdIGlkZW50aWZpZXIuCisgICAgIFNlZSB0aGUgY2hhcHRlciAiRG9jdW1lbnRhdGlvbiBoaW50cyIgZm9yIGFuIGV4cGxhbmF0aW9uLgorICAgICA8L3BhcmE+CishSWluY2x1ZGUvbGludXgvbXRkL25hbmQuaAorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyAgICAgPHBhcmE+CisgICAgIFRoaXMgY2hhcHRlciBjb250YWlucyB0aGUgYXV0b2dlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9mIHRoZSBOQU5EIGtlcm5lbCBBUEkgZnVuY3Rpb25zCisgICAgICB3aGljaCBhcmUgZXhwb3J0ZWQuIEVhY2ggZnVuY3Rpb24gaGFzIGEgc2hvcnQgZGVzY3JpcHRpb24gd2hpY2ggaXMgbWFya2VkIHdpdGggYW4gW1hYWF0gaWRlbnRpZmllci4KKyAgICAgU2VlIHRoZSBjaGFwdGVyICJEb2N1bWVudGF0aW9uIGhpbnRzIiBmb3IgYW4gZXhwbGFuYXRpb24uCisgICAgIDwvcGFyYT4KKyFFZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworIUVkcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKKyFFZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJpbnRmdW5jdGlvbnMiPgorICAgICA8dGl0bGU+SW50ZXJuYWwgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyAgICAgPHBhcmE+CisgICAgIFRoaXMgY2hhcHRlciBjb250YWlucyB0aGUgYXV0b2dlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9mIHRoZSBOQU5EIGRyaXZlciBpbnRlcm5hbCBmdW5jdGlvbnMuCisgICAgIEVhY2ggZnVuY3Rpb24gaGFzIGEgc2hvcnQgZGVzY3JpcHRpb24gd2hpY2ggaXMgbWFya2VkIHdpdGggYW4gW1hYWF0gaWRlbnRpZmllci4KKyAgICAgU2VlIHRoZSBjaGFwdGVyICJEb2N1bWVudGF0aW9uIGhpbnRzIiBmb3IgYW4gZXhwbGFuYXRpb24uCisgICAgIFRoZSBmdW5jdGlvbnMgbWFya2VkIHdpdGggW0RFRkFVTFRdIG1pZ2h0IGJlIHJlbGV2YW50IGZvciBhIGJvYXJkIGRyaXZlciBkZXZlbG9wZXIuCisgICAgIDwvcGFyYT4KKyFJZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworIUlkcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKKyFJZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iY3JlZGl0cyI+CisgICAgIDx0aXRsZT5DcmVkaXRzPC90aXRsZT4KKwk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgTkFORCBkcml2ZXI6CisJCTxvcmRlcmVkbGlzdD4KKwkJCTxsaXN0aXRlbT48cGFyYT5TdGV2ZW4gSi4gSGlsbDxlbWFpbD5zamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPC9lbWFpbD48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT5EYXZpZCBXb29kaG91c2U8ZW1haWw+ZHdtdzJAaW5mcmFkZWFkLm9yZzwvZW1haWw+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+VGhvbWFzIEdsZWl4bmVyPGVtYWlsPnRnbHhAbGludXRyb25peC5kZTwvZW1haWw+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCTwvb3JkZXJlZGxpc3Q+CisJCUEgbG90IG9mIHVzZXJzIGhhdmUgcHJvdmlkZWQgYnVnZml4ZXMsIGltcHJvdmVtZW50cyBhbmQgaGVscGluZyBoYW5kcyBmb3IgdGVzdGluZy4KKwkJVGhhbmtzIGEgbG90LgorCTwvcGFyYT4KKwk8cGFyYT4KKwkJVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCB0byB0aGlzIGRvY3VtZW50OgorCQk8b3JkZXJlZGxpc3Q+CisJCQk8bGlzdGl0ZW0+PHBhcmE+VGhvbWFzIEdsZWl4bmVyPGVtYWlsPnRnbHhAbGludXRyb25peC5kZTwvZW1haWw+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCTwvb3JkZXJlZGxpc3Q+CisJPC9wYXJhPgorICA8L2NoYXB0ZXI+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzLWd1aWRlLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzLWd1aWRlLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjYWQyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbApAQCAtMCwwICsxLDU5MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgWworPCFFTlRJVFkgcHJvY2ZzZXhhbXBsZSBTWVNURU0gInByb2Nmc19leGFtcGxlLnhtbCI+CitdPgorCis8Ym9vayBpZD0iTEtQcm9jZnNHdWlkZSI+CisgIDxib29raW5mbz4KKyAgICA8dGl0bGU+TGludXggS2VybmVsIFByb2NmcyBHdWlkZTwvdGl0bGU+CisKKyAgICA8YXV0aG9yZ3JvdXA+CisgICAgICA8YXV0aG9yPgorCTxmaXJzdG5hbWU+RXJpazwvZmlyc3RuYW1lPgorCTxvdGhlcm5hbWU+KEouQS5LLik8L290aGVybmFtZT4KKwk8c3VybmFtZT5Nb3V3PC9zdXJuYW1lPgorCTxhZmZpbGlhdGlvbj4KKwkgIDxvcmduYW1lPkRlbGZ0IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neTwvb3JnbmFtZT4KKwkgIDxvcmdkaXY+RmFjdWx0eSBvZiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IGFuZCBTeXN0ZW1zPC9vcmdkaXY+CisJICA8YWRkcmVzcz4KKyAgICAgICAgICAgIDxlbWFpbD5KLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sPC9lbWFpbD4KKyAgICAgICAgICAgIDxwb2I+UE8gQk9YIDUwMzE8L3BvYj4KKyAgICAgICAgICAgIDxwb3N0Y29kZT4yNjAwIEdBPC9wb3N0Y29kZT4KKyAgICAgICAgICAgIDxjaXR5PkRlbGZ0PC9jaXR5PgorICAgICAgICAgICAgPGNvdW50cnk+VGhlIE5ldGhlcmxhbmRzPC9jb3VudHJ5PgorICAgICAgICAgIDwvYWRkcmVzcz4KKwk8L2FmZmlsaWF0aW9uPgorICAgICAgPC9hdXRob3I+CisgICAgPC9hdXRob3Jncm91cD4KKworICAgIDxyZXZoaXN0b3J5PgorICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MS4wJm5ic3A7PC9yZXZudW1iZXI+CisJPGRhdGU+TWF5IDMwLCAyMDAxPC9kYXRlPgorCTxyZXZyZW1hcms+SW5pdGlhbCByZXZpc2lvbiBwb3N0ZWQgdG8gbGludXgta2VybmVsPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MS4xJm5ic3A7PC9yZXZudW1iZXI+CisJPGRhdGU+SnVuZSAzLCAyMDAxPC9kYXRlPgorCTxyZXZyZW1hcms+UmV2aXNlZCBhZnRlciBjb21tZW50cyBmcm9tIGxpbnV4LWtlcm5lbDwvcmV2cmVtYXJrPgorICAgICAgPC9yZXZpc2lvbj4KKyAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+MjAwMTwveWVhcj4KKyAgICAgIDxob2xkZXI+RXJpayBNb3V3PC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKyAgICAgICAgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICAgICB2ZXJzaW9uLgorICAgICAgPC9wYXJhPgorICAgICAgCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgICAgICAgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIAorICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICAgICA8L3BhcmE+CisgICAgICAKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgICAgPC9wYXJhPgorICAgIDwvbGVnYWxub3RpY2U+CisgIDwvYm9va2luZm8+CisKKworCisKKyAgPHRvYz4KKyAgPC90b2M+CisKKworCisKKyAgPHByZWZhY2U+CisgICAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgdXNlIG9mIHRoZSBwcm9jZnMgZmlsZSBzeXN0ZW0gZnJvbQorICAgICAgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFRoZSBpZGVhIHRvIHdyaXRlIHRoaXMgZ3VpZGUgY2FtZSB1cCBvbgorICAgICAgdGhlICNrZXJuZWxuZXdiaWVzIElSQyBjaGFubmVsIChzZWUgPHVsaW5rCisgICAgICB1cmw9Imh0dHA6Ly93d3cua2VybmVsbmV3Ymllcy5vcmcvIj5odHRwOi8vd3d3Lmtlcm5lbG5ld2JpZXMub3JnLzwvdWxpbms+KSwKKyAgICAgIHdoZW4gSmVmZiBHYXJ6aWsgZXhwbGFpbmVkIHRoZSB1c2Ugb2YgcHJvY2ZzIGFuZCBmb3J3YXJkZWQgbWUgYQorICAgICAgbWVzc2FnZSBBbGV4YW5kZXIgVmlybyB3cm90ZSB0byB0aGUgbGludXgta2VybmVsIG1haWxpbmcgbGlzdC4gSQorICAgICAgYWdyZWVkIHRvIHdyaXRlIGl0IHVwIG5pY2VseSwgc28gaGVyZSBpdCBpcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEknZCBsaWtlIHRvIHRoYW5rIEplZmYgR2FyemlrCisgICAgICA8ZW1haWw+amdhcnppa0Bwb2JveC5jb208L2VtYWlsPiBhbmQgQWxleGFuZGVyIFZpcm8KKyAgICAgIDxlbWFpbD52aXJvQHBhcmNlbGZhcmNlLmxpbnV4LnRoZXBsYW5ldC5jby51azwvZW1haWw+IGZvciB0aGVpciBpbnB1dCwKKyAgICAgIFRpbSBXYXVnaCA8ZW1haWw+dHdhdWdoQHJlZGhhdC5jb208L2VtYWlsPiBmb3IgaGlzIDx1bGluaworICAgICAgdXJsPSJodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vdHdhdWdoL2RvY2Jvb2svc2VsZmRvY2Jvb2svIj5TZWxmZG9jYm9vazwvdWxpbms+LAorICAgICAgYW5kIE1hcmMgSm9vc2VuIDxlbWFpbD5tYXJjakBoaXN0b3JpYS5ldC50dWRlbGZ0Lm5sPC9lbWFpbD4gZm9yCisgICAgICBwcm9vZnJlYWRpbmcuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGRvY3VtZW50YXRpb24gd2FzIHdyaXR0ZW4gd2hpbGUgd29ya2luZyBvbiB0aGUgTEFSVAorICAgICAgY29tcHV0aW5nIGJvYXJkICg8dWxpbmsKKyAgICAgIHVybD0iaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvIj5odHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC88L3VsaW5rPiksCisgICAgICB3aGljaCBpcyBzcG9uc29yZWQgYnkgdGhlIE1vYmlsZSBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucworICAgICAgKDx1bGluaworICAgICAgdXJsPSJodHRwOi8vd3d3Lm1tYy50dWRlbGZ0Lm5sLyI+aHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC88L3VsaW5rPikKKyAgICAgIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zICg8dWxpbmsKKyAgICAgIHVybD0iaHR0cDovL3d3dy51Ymljb20udHVkZWxmdC5ubC8iPmh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvPC91bGluaz4pCisgICAgICBwcm9qZWN0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEVyaWsKKyAgICA8L3BhcmE+CisgIDwvcHJlZmFjZT4KKworCisKKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPi9wcm9jPC9maWxlbmFtZT4gZmlsZSBzeXN0ZW0KKyAgICAgIChwcm9jZnMpIGlzIGEgc3BlY2lhbCBmaWxlIHN5c3RlbSBpbiB0aGUgbGludXgga2VybmVsLiBJdCdzIGEKKyAgICAgIHZpcnR1YWwgZmlsZSBzeXN0ZW06IGl0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBibG9jayBkZXZpY2UKKyAgICAgIGJ1dCBleGlzdHMgb25seSBpbiBtZW1vcnkuIFRoZSBmaWxlcyBpbiB0aGUgcHJvY2ZzIGFyZSB0aGVyZSB0bworICAgICAgYWxsb3cgdXNlcmxhbmQgcHJvZ3JhbXMgYWNjZXNzIHRvIGNlcnRhaW4gaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAgICAgIGtlcm5lbCAobGlrZSBwcm9jZXNzIGluZm9ybWF0aW9uIGluIDxmaWxlbmFtZQorICAgICAgY2xhc3M9ImRpcmVjdG9yeSI+L3Byb2MvWzAtOV0rLzwvZmlsZW5hbWU+KSwgYnV0IGFsc28gZm9yIGRlYnVnCisgICAgICBwdXJwb3NlcyAobGlrZSA8ZmlsZW5hbWU+L3Byb2Mva3N5bXM8L2ZpbGVuYW1lPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgdXNlIG9mIHRoZSBwcm9jZnMgZmlsZSBzeXN0ZW0gZnJvbQorICAgICAgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEl0IHN0YXJ0cyBieSBpbnRyb2R1Y2luZyBhbGwgcmVsZXZhbnQKKyAgICAgIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZpbGVzIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0uIEFmdGVyIHRoYXQKKyAgICAgIGl0IHNob3dzIGhvdyB0byBjb21tdW5pY2F0ZSB3aXRoIHVzZXJsYW5kLCBhbmQgc29tZSB0aXBzIGFuZAorICAgICAgdHJpY2tzIHdpbGwgYmUgcG9pbnRlZCBvdXQuIEZpbmFsbHkgYSBjb21wbGV0ZSBleGFtcGxlIHdpbGwgYmUKKyAgICAgIHNob3duLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgTm90ZSB0aGF0IHRoZSBmaWxlcyBpbiA8ZmlsZW5hbWUKKyAgICAgIGNsYXNzPSJkaXJlY3RvcnkiPi9wcm9jL3N5czwvZmlsZW5hbWU+IGFyZSBzeXNjdGwgZmlsZXM6IHRoZXkKKyAgICAgIGRvbid0IGJlbG9uZyB0byBwcm9jZnMgYW5kIGFyZSBnb3Zlcm5lZCBieSBhIGNvbXBsZXRlbHkKKyAgICAgIGRpZmZlcmVudCBBUEkgZGVzY3JpYmVkIGluIHRoZSBLZXJuZWwgQVBJIGJvb2suCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKworCisKKyAgPGNoYXB0ZXIgaWQ9Im1hbmFnaW5nIj4KKyAgICA8dGl0bGU+TWFuYWdpbmcgcHJvY2ZzIGVudHJpZXM8L3RpdGxlPgorICAgIAorICAgIDxwYXJhPgorICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgZnVuY3Rpb25zIHRoYXQgdmFyaW91cyBrZXJuZWwKKyAgICAgIGNvbXBvbmVudHMgdXNlIHRvIHBvcHVsYXRlIHRoZSBwcm9jZnMgd2l0aCBmaWxlcywgc3ltbGlua3MsCisgICAgICBkZXZpY2Ugbm9kZXMsIGFuZCBkaXJlY3Rvcmllcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEEgbWlub3Igbm90ZSBiZWZvcmUgd2Ugc3RhcnQ6IGlmIHlvdSB3YW50IHRvIHVzZSBhbnkgb2YgdGhlCisgICAgICBwcm9jZnMgZnVuY3Rpb25zLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGNvcnJlY3QgaGVhZGVyIGZpbGUhIAorICAgICAgVGhpcyBzaG91bGQgYmUgb25lIG9mIHRoZSBmaXJzdCBsaW5lcyBpbiB5b3VyIGNvZGU6CisgICAgPC9wYXJhPgorCisgICAgPHByb2dyYW1saXN0aW5nPgorI2luY2x1ZGUgJmx0O2xpbnV4L3Byb2NfZnMuaCZndDsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorCisKKworCisgICAgPHNlY3QxIGlkPSJyZWd1bGFyZmlsZSI+CisgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSByZWd1bGFyIGZpbGU8L3RpdGxlPgorICAgICAgCisgICAgICA8ZnVuY3N5bm9wc2lzPgorCTxmdW5jcHJvdG90eXBlPgorCSAgPGZ1bmNkZWY+c3RydWN0IHByb2NfZGlyX2VudHJ5KiA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwkgIDxwYXJhbWRlZj5jb25zdCBjaGFyKiA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPm1vZGVfdCA8cGFyYW1ldGVyPm1vZGU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTwvZnVuY3Byb3RvdHlwZT4KKyAgICAgIDwvZnVuY3N5bm9wc2lzPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgcmVndWxhciBmaWxlIHdpdGggdGhlIG5hbWUKKyAgICAgICAgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+LCBmaWxlIG1vZGUKKyAgICAgICAgPHBhcmFtZXRlcj5tb2RlPC9wYXJhbWV0ZXI+IGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj4uIFRvIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIHJvb3Qgb2YKKyAgICAgICAgdGhlIHByb2NmcywgdXNlIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gYXMKKyAgICAgICAgPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj4gcGFyYW1ldGVyLiBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgICAgICBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZyZXNobHkgY3JlYXRlZAorICAgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+OyBvdGhlcndpc2UgaXQKKyAgICAgICAgd2lsbCByZXR1cm4gPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi4gPHhyZWYKKyAgICAgICAgbGlua2VuZD0idXNlcmxhbmQiLz4gZGVzY3JpYmVzIGhvdyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGgKKyAgICAgICAgcmVndWxhciBmaWxlcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE5vdGUgdGhhdCBpdCBpcyBzcGVjaWZpY2FsbHkgc3VwcG9ydGVkIHRoYXQgeW91IGNhbiBwYXNzIGEKKyAgICAgICAgcGF0aCB0aGF0IHNwYW5zIG11bHRpcGxlIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZQorICAgICAgICA8ZnVuY3Rpb24+Y3JlYXRlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPig8cGFyYW1ldGVyPiJkcml2ZXJzL3ZpYTAvaW5mbyI8L3BhcmFtZXRlcj4pCisgICAgICAgIHdpbGwgY3JlYXRlIHRoZSA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+dmlhMDwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeSBpZiBuZWNlc3NhcnksIHdpdGggc3RhbmRhcmQKKyAgICAgICAgPGNvbnN0YW50PjA3NTU8L2NvbnN0YW50PiBwZXJtaXNzaW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IG9ubHkgd2FudCB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIGZpbGUsIHRoZSBmdW5jdGlvbgorICAgICAgPGZ1bmN0aW9uPmNyZWF0ZV9wcm9jX3JlYWRfZW50cnk8L2Z1bmN0aW9uPiBkZXNjcmliZWQgaW4gPHhyZWYKKyAgICAgIGxpbmtlbmQ9ImNvbnZlbmllbmNlIi8+IG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgaW5pdGlhbGlzZQorICAgICAgdGhlIHByb2NmcyBlbnRyeSBpbiBvbmUgc2luZ2xlIGNhbGwuCisgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKworCisKKyAgICA8c2VjdDE+CisgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBzeW1saW5rPC90aXRsZT4KKworICAgICAgPGZ1bmNzeW5vcHNpcz4KKwk8ZnVuY3Byb3RvdHlwZT4KKwkgIDxmdW5jZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSoKKwkgIDxmdW5jdGlvbj5wcm9jX3N5bWxpbms8L2Z1bmN0aW9uPjwvZnVuY2RlZj4gPHBhcmFtZGVmPmNvbnN0CisJICBjaGFyKiA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSoKKwkgIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4gPHBhcmFtZGVmPmNvbnN0CisJICBjaGFyKiA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTwvZnVuY3Byb3RvdHlwZT4KKyAgICAgIDwvZnVuY3N5bm9wc2lzPgorICAgICAgCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjcmVhdGVzIGEgc3ltbGluayBpbiB0aGUgcHJvY2ZzIGRpcmVjdG9yeQorICAgICAgICA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPiB0aGF0IHBvaW50cyBmcm9tCisgICAgICAgIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiB0bworICAgICAgICA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj4uIFRoaXMgdHJhbnNsYXRlcyBpbiB1c2VybGFuZCB0bworICAgICAgICA8bGl0ZXJhbD5sbiAtczwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5kZXN0PC9wYXJhbWV0ZXI+CisgICAgICAgIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIAorICAgICAgPGZ1bmNzeW5vcHNpcz4KKwk8ZnVuY3Byb3RvdHlwZT4KKwkgIDxmdW5jZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogPGZ1bmN0aW9uPnByb2NfbWtkaXI8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwkgIDxwYXJhbWRlZj5jb25zdCBjaGFyKiA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSogPHBhcmFtZXRlcj5wYXJlbnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTwvZnVuY3Byb3RvdHlwZT4KKyAgICAgIDwvZnVuY3N5bm9wc2lzPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQ3JlYXRlIGEgZGlyZWN0b3J5IDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiBpbiB0aGUgcHJvY2ZzCisgICAgICAgIGRpcmVjdG9yeSA8cGFyYW1ldGVyPnBhcmVudDwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisKKworCisgICAgPHNlY3QxPgorICAgICAgPHRpdGxlPlJlbW92aW5nIGFuIGVudHJ5PC90aXRsZT4KKyAgICAgIAorICAgICAgPGZ1bmNzeW5vcHNpcz4KKwk8ZnVuY3Byb3RvdHlwZT4KKwkgIDxmdW5jZGVmPnZvaWQgPGZ1bmN0aW9uPnJlbW92ZV9wcm9jX2VudHJ5PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJICA8cGFyYW1kZWY+Y29uc3QgY2hhciogPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8L2Z1bmNwcm90b3R5cGU+CisgICAgICA8L2Z1bmNzeW5vcHNpcz4KKworICAgICAgPHBhcmE+CisgICAgICAgIFJlbW92ZXMgdGhlIGVudHJ5IDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+IGZyb20gdGhlIHByb2Nmcy4gRW50cmllcyBhcmUKKyAgICAgICAgcmVtb3ZlZCBieSB0aGVpciA8ZW1waGFzaXM+bmFtZTwvZW1waGFzaXM+LCBub3QgYnkgdGhlCisgICAgICAgIDxzdHJ1Y3RuYW1lPnN0cnVjdCBwcm9jX2Rpcl9lbnRyeTwvc3RydWN0bmFtZT4gcmV0dXJuZWQgYnkgdGhlCisgICAgICAgIHZhcmlvdXMgY3JlYXRlIGZ1bmN0aW9ucy4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lc24ndAorICAgICAgICByZWN1cnNpdmVseSByZW1vdmUgZW50cmllcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEJlIHN1cmUgdG8gZnJlZSB0aGUgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBlbnRyeSBmcm9tCisgICAgICAgIHRoZSA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+IGJlZm9yZQorICAgICAgICA8ZnVuY3Rpb24+cmVtb3ZlX3Byb2NfZW50cnk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgKHRoYXQgaXM6IGlmCisgICAgICAgIHRoZXJlIHdhcyBzb21lIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gYWxsb2NhdGVkLCBvZgorICAgICAgICBjb3Vyc2UpLiBTZWUgPHhyZWYgbGlua2VuZD0idXNpbmdkYXRhIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgIG9uIHVzaW5nIHRoZSA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGVudHJ5LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworCisKKworICA8Y2hhcHRlciBpZD0idXNlcmxhbmQiPgorICAgIDx0aXRsZT5Db21tdW5pY2F0aW5nIHdpdGggdXNlcmxhbmQ8L3RpdGxlPgorICAgIAorICAgIDxwYXJhPgorICAgICAgIEluc3RlYWQgb2YgcmVhZGluZyAob3Igd3JpdGluZykgaW5mb3JtYXRpb24gZGlyZWN0bHkgZnJvbQorICAgICAgIGtlcm5lbCBtZW1vcnksIHByb2NmcyB3b3JrcyB3aXRoIDxlbXBoYXNpcz5jYWxsIGJhY2sKKyAgICAgICBmdW5jdGlvbnM8L2VtcGhhc2lzPiBmb3IgZmlsZXM6IGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgd2hlbgorICAgICAgIGEgc3BlY2lmaWMgZmlsZSBpcyBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIFN1Y2ggZnVuY3Rpb25zIGhhdmUKKyAgICAgICB0byBiZSBpbml0aWFsaXNlZCBhZnRlciB0aGUgcHJvY2ZzIGZpbGUgaXMgY3JlYXRlZCBieSBzZXR0aW5nCisgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5yZWFkX3Byb2M8L3N0cnVjdGZpZWxkPiBhbmQvb3IKKyAgICAgICA8c3RydWN0ZmllbGQ+d3JpdGVfcHJvYzwvc3RydWN0ZmllbGQ+IGZpZWxkcyBpbiB0aGUKKyAgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqPC9zdHJ1Y3RuYW1lPiB0aGF0IHRoZQorICAgICAgIGZ1bmN0aW9uIDxmdW5jdGlvbj5jcmVhdGVfcHJvY19lbnRyeTwvZnVuY3Rpb24+IHJldHVybmVkOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSogZW50cnk7CisKK2VudHJ5LT5yZWFkX3Byb2MgPSByZWFkX3Byb2NfZm9vOworZW50cnktPndyaXRlX3Byb2MgPSB3cml0ZV9wcm9jX2ZvbzsKKyAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3Ugb25seSB3YW50IHRvIHVzZSBhIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPnJlYWRfcHJvYzwvc3RydWN0ZmllbGQ+LCB0aGUgZnVuY3Rpb24KKyAgICAgIDxmdW5jdGlvbj5jcmVhdGVfcHJvY19yZWFkX2VudHJ5PC9mdW5jdGlvbj4gZGVzY3JpYmVkIGluIDx4cmVmCisgICAgICBsaW5rZW5kPSJjb252ZW5pZW5jZSIvPiBtYXkgYmUgdXNlZCB0byBjcmVhdGUgYW5kIGluaXRpYWxpc2UgdGhlCisgICAgICBwcm9jZnMgZW50cnkgaW4gb25lIHNpbmdsZSBjYWxsLgorICAgIDwvcGFyYT4KKworCisKKyAgICA8c2VjdDE+CisgICAgICA8dGl0bGU+UmVhZGluZyBkYXRhPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZWFkIGZ1bmN0aW9uIGlzIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHVzZXJsYW5kCisgICAgICAgIHByb2Nlc3NlcyB0byByZWFkIGRhdGEgZnJvbSB0aGUga2VybmVsLiBUaGUgcmVhZCBmdW5jdGlvbgorICAgICAgICBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPGZ1bmNzeW5vcHNpcz4KKwk8ZnVuY3Byb3RvdHlwZT4KKwkgIDxmdW5jZGVmPmludCA8ZnVuY3Rpb24+cmVhZF9mdW5jPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJICA8cGFyYW1kZWY+Y2hhciogPHBhcmFtZXRlcj5wYWdlPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5jaGFyKiogPHBhcmFtZXRlcj5zdGFydDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJICA8cGFyYW1kZWY+b2ZmX3QgPHBhcmFtZXRlcj5vZmY8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5pbnQqIDxwYXJhbWV0ZXI+ZW9mPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj52b2lkKiA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTwvZnVuY3Byb3RvdHlwZT4KKyAgICAgIDwvZnVuY3N5bm9wc2lzPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlYWQgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIGl0cyBpbmZvcm1hdGlvbiBpbnRvIHRoZQorICAgICAgICA8cGFyYW1ldGVyPnBhZ2U8L3BhcmFtZXRlcj4uIEZvciBwcm9wZXIgdXNlLCB0aGUgZnVuY3Rpb24KKyAgICAgICAgc2hvdWxkIHN0YXJ0IHdyaXRpbmcgYXQgYW4gb2Zmc2V0IG9mCisgICAgICAgIDxwYXJhbWV0ZXI+b2ZmPC9wYXJhbWV0ZXI+IGluIDxwYXJhbWV0ZXI+cGFnZTwvcGFyYW1ldGVyPiBhbmQKKyAgICAgICAgd3JpdGUgYXQgbW9zdCA8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+IGJ5dGVzLCBidXQgYmVjYXVzZQorICAgICAgICBtb3N0IHJlYWQgZnVuY3Rpb25zIGFyZSBxdWl0ZSBzaW1wbGUgYW5kIG9ubHkgcmV0dXJuIGEgc21hbGwKKyAgICAgICAgYW1vdW50IG9mIGluZm9ybWF0aW9uLCB0aGVzZSB0d28gcGFyYW1ldGVycyBhcmUgdXN1YWxseQorICAgICAgICBpZ25vcmVkIChpdCBicmVha3MgcGFnZXJzIGxpa2UgPGxpdGVyYWw+bW9yZTwvbGl0ZXJhbD4gYW5kCisgICAgICAgIDxsaXRlcmFsPmxlc3M8L2xpdGVyYWw+LCBidXQgPGxpdGVyYWw+Y2F0PC9saXRlcmFsPiBzdGlsbAorICAgICAgICB3b3JrcykuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgPHBhcmFtZXRlcj5vZmY8L3BhcmFtZXRlcj4gYW5kCisgICAgICAgIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4gcGFyYW1ldGVycyBhcmUgcHJvcGVybHkgdXNlZCwKKyAgICAgICAgPHBhcmFtZXRlcj5lb2Y8L3BhcmFtZXRlcj4gc2hvdWxkIGJlIHVzZWQgdG8gc2lnbmFsIHRoYXQgdGhlCisgICAgICAgIGVuZCBvZiB0aGUgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGJ5IHdyaXRpbmcKKyAgICAgICAgPGxpdGVyYWw+MTwvbGl0ZXJhbD4gdG8gdGhlIG1lbW9yeSBsb2NhdGlvbgorICAgICAgICA8cGFyYW1ldGVyPmVvZjwvcGFyYW1ldGVyPiBwb2ludHMgdG8uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcGFyYW1ldGVyIDxwYXJhbWV0ZXI+c3RhcnQ8L3BhcmFtZXRlcj4gZG9lc24ndCBzZWVtIHRvIGJlCisgICAgICAgIHVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhlIDxwYXJhbWV0ZXI+ZGF0YTwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2luZ2xlIGNhbGwgYmFjayBmdW5jdGlvbiBmb3IKKyAgICAgICAgc2V2ZXJhbCBmaWxlcywgc2VlIDx4cmVmIGxpbmtlbmQ9InVzaW5nZGF0YSIvPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+cmVhZF9mdW5jPC9mdW5jdGlvbj4gZnVuY3Rpb24gbXVzdCByZXR1cm4gdGhlCisgICAgICAgIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGludG8gdGhlIDxwYXJhbWV0ZXI+cGFnZTwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImV4YW1wbGUiLz4gc2hvd3MgaG93IHRvIHVzZSBhIHJlYWQgY2FsbCBiYWNrCisgICAgICAgIGZ1bmN0aW9uLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdDE+CisKKworCisKKyAgICA8c2VjdDE+CisgICAgICA8dGl0bGU+V3JpdGluZyBkYXRhPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB3cml0ZSBjYWxsIGJhY2sgZnVuY3Rpb24gYWxsb3dzIGEgdXNlcmxhbmQgcHJvY2VzcyB0byB3cml0ZQorICAgICAgICBkYXRhIHRvIHRoZSBrZXJuZWwsIHNvIGl0IGhhcyBzb21lIGtpbmQgb2YgY29udHJvbCBvdmVyIHRoZQorICAgICAgICBrZXJuZWwuIFRoZSB3cml0ZSBmdW5jdGlvbiBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPGZ1bmNzeW5vcHNpcz4KKwk8ZnVuY3Byb3RvdHlwZT4KKwkgIDxmdW5jZGVmPmludCA8ZnVuY3Rpb24+d3JpdGVfZnVuYzwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCSAgPHBhcmFtZGVmPnN0cnVjdCBmaWxlKiA8cGFyYW1ldGVyPmZpbGU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPmNvbnN0IGNoYXIqIDxwYXJhbWV0ZXI+YnVmZmVyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj51bnNpZ25lZCBsb25nIDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPnZvaWQqIDxwYXJhbWV0ZXI+ZGF0YTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPC9mdW5jcHJvdG90eXBlPgorICAgICAgPC9mdW5jc3lub3BzaXM+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgd3JpdGUgZnVuY3Rpb24gc2hvdWxkIHJlYWQgPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPgorICAgICAgICBieXRlcyBhdCBtYXhpbXVtIGZyb20gdGhlIDxwYXJhbWV0ZXI+YnVmZmVyPC9wYXJhbWV0ZXI+LiBOb3RlCisgICAgICAgIHRoYXQgdGhlIDxwYXJhbWV0ZXI+YnVmZmVyPC9wYXJhbWV0ZXI+IGRvZXNuJ3QgbGl2ZSBpbiB0aGUKKyAgICAgICAga2VybmVsJ3MgbWVtb3J5IHNwYWNlLCBzbyBpdCBzaG91bGQgZmlyc3QgYmUgY29waWVkIHRvIGtlcm5lbAorICAgICAgICBzcGFjZSB3aXRoIDxmdW5jdGlvbj5jb3B5X2Zyb21fdXNlcjwvZnVuY3Rpb24+LiBUaGUKKyAgICAgICAgPHBhcmFtZXRlcj5maWxlPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciBpcyB1c3VhbGx5CisgICAgICAgIGlnbm9yZWQuIDx4cmVmIGxpbmtlbmQ9InVzaW5nZGF0YSIvPiBzaG93cyBob3cgdG8gdXNlIHRoZQorICAgICAgICA8cGFyYW1ldGVyPmRhdGE8L3BhcmFtZXRlcj4gcGFyYW1ldGVyLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWdhaW4sIDx4cmVmIGxpbmtlbmQ9ImV4YW1wbGUiLz4gc2hvd3MgaG93IHRvIHVzZSB0aGlzIGNhbGwgYmFjaworICAgICAgICBmdW5jdGlvbi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3QxPgorCisKKworCisgICAgPHNlY3QxIGlkPSJ1c2luZ2RhdGEiPgorICAgICAgPHRpdGxlPkEgc2luZ2xlIGNhbGwgYmFjayBmb3IgbWFueSBmaWxlczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICAgV2hlbiBhIGxhcmdlIG51bWJlciBvZiBhbG1vc3QgaWRlbnRpY2FsIGZpbGVzIGlzIHVzZWQsIGl0J3MKKyAgICAgICAgIHF1aXRlIGluY29udmVuaWVudCB0byB1c2UgYSBzZXBhcmF0ZSBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yCisgICAgICAgICBlYWNoIGZpbGUuIEEgYmV0dGVyIGFwcHJvYWNoIGlzIHRvIGhhdmUgYSBzaW5nbGUgY2FsbCBiYWNrCisgICAgICAgICBmdW5jdGlvbiB0aGF0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGUgZmlsZXMgYnkgdXNpbmcgdGhlCisgICAgICAgICA8c3RydWN0ZmllbGQ+ZGF0YTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIDxzdHJ1Y3RuYW1lPnN0cnVjdAorICAgICAgICAgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+LiBGaXJzdCBvZiBhbGwsIHRoZQorICAgICAgICAgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCBoYXMgdG8gYmUgaW5pdGlhbGlzZWQ6CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSogZW50cnk7CitzdHJ1Y3QgbXlfZmlsZV9kYXRhICpmaWxlX2RhdGE7CisKK2ZpbGVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBteV9maWxlX2RhdGEpLCBHRlBfS0VSTkVMKTsKK2VudHJ5LT5kYXRhID0gZmlsZV9kYXRhOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgCisgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBhIDx0eXBlPnZvaWQKKyAgICAgICAgICAqPC90eXBlPiwgc28gaXQgY2FuIGJlIGluaXRpYWxpc2VkIHdpdGggYW55dGhpbmcuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgdGhhdCB0aGUgPHN0cnVjdGZpZWxkPmRhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQsIHRoZQorICAgICAgICA8ZnVuY3Rpb24+cmVhZF9wcm9jPC9mdW5jdGlvbj4gYW5kCisgICAgICAgIDxmdW5jdGlvbj53cml0ZV9wcm9jPC9mdW5jdGlvbj4gY2FuIHVzZSBpdCB0byBkaXN0aW5ndWlzaAorICAgICAgICBiZXR3ZWVuIGZpbGVzIGJlY2F1c2UgdGhleSBnZXQgaXQgcGFzc2VkIGludG8gdGhlaXIKKyAgICAgICAgPHBhcmFtZXRlcj5kYXRhPC9wYXJhbWV0ZXI+IHBhcmFtZXRlcjoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgoraW50IGZvb19yZWFkX2Z1bmMoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworICAgICAgICBpbnQgbGVuOworCisgICAgICAgIGlmKGRhdGEgPT0gZmlsZV9kYXRhKSB7CisgICAgICAgICAgICAgICAgLyogc3BlY2lhbCBjYXNlIGZvciB0aGlzIGZpbGUgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBub3JtYWwgcHJvY2Vzc2luZyAqLworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxlbjsKK30KKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBCZSBzdXJlIHRvIGZyZWUgdGhlIDxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD4gZGF0YSBmaWVsZAorICAgICAgICB3aGVuIHJlbW92aW5nIHRoZSBwcm9jZnMgZW50cnkuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorCisKKworCisgIDxjaGFwdGVyIGlkPSJ0aXBzIj4KKyAgICA8dGl0bGU+VGlwcyBhbmQgdHJpY2tzPC90aXRsZT4KKworCisKKworICAgIDxzZWN0MSBpZD0iY29udmVuaWVuY2UiPgorICAgICAgPHRpdGxlPkNvbnZlbmllbmNlIGZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgIDxmdW5jc3lub3BzaXM+CisJPGZ1bmNwcm90b3R5cGU+CisJICA8ZnVuY2RlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIDxmdW5jdGlvbj5jcmVhdGVfcHJvY19yZWFkX2VudHJ5PC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJICA8cGFyYW1kZWY+Y29uc3QgY2hhciogPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5tb2RlX3QgPHBhcmFtZXRlcj5tb2RlPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5zdHJ1Y3QgcHJvY19kaXJfZW50cnkqIDxwYXJhbWV0ZXI+cGFyZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwkgIDxwYXJhbWRlZj5yZWFkX3Byb2NfdCogPHBhcmFtZXRlcj5yZWFkX3Byb2M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCSAgPHBhcmFtZGVmPnZvaWQqIDxwYXJhbWV0ZXI+ZGF0YTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPC9mdW5jcHJvdG90eXBlPgorICAgICAgPC9mdW5jc3lub3BzaXM+CisgICAgICAKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSByZWd1bGFyIGZpbGUgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkKKyAgICAgICAgYXMgPGZ1bmN0aW9uPmNyZWF0ZV9wcm9jX2VudHJ5PC9mdW5jdGlvbj4gZnJvbSA8eHJlZgorICAgICAgICBsaW5rZW5kPSJyZWd1bGFyZmlsZSIvPiBkb2VzLCBidXQgYWxzbyBhbGxvd3MgdG8gc2V0IHRoZSByZWFkCisgICAgICAgIGZ1bmN0aW9uIDxwYXJhbWV0ZXI+cmVhZF9wcm9jPC9wYXJhbWV0ZXI+IGluIG9uZSBjYWxsLiBUaGlzCisgICAgICAgIGZ1bmN0aW9uIGNhbiBzZXQgdGhlIDxwYXJhbWV0ZXI+ZGF0YTwvcGFyYW1ldGVyPiBhcyB3ZWxsLCBsaWtlCisgICAgICAgIGV4cGxhaW5lZCBpbiA8eHJlZiBsaW5rZW5kPSJ1c2luZ2RhdGEiLz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0MT4KKworCisKKyAgICA8c2VjdDE+CisgICAgICA8dGl0bGU+TW9kdWxlczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiBwcm9jZnMgaXMgYmVpbmcgdXNlZCBmcm9tIHdpdGhpbiBhIG1vZHVsZSwgYmUgc3VyZSB0byBzZXQKKyAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5vd25lcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIHRoZQorICAgICAgICA8c3RydWN0bmFtZT5zdHJ1Y3QgcHJvY19kaXJfZW50cnk8L3N0cnVjdG5hbWU+IHRvCisgICAgICAgIDxjb25zdGFudD5USElTX01PRFVMRTwvY29uc3RhbnQ+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CitzdHJ1Y3QgcHJvY19kaXJfZW50cnkqIGVudHJ5OworCitlbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPC9zZWN0MT4KKworCisKKworICAgIDxzZWN0MT4KKyAgICAgIDx0aXRsZT5Nb2RlIGFuZCBvd25lcnNoaXA8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBjaGFuZ2UgdGhlIG1vZGUgYW5kL29yIG93bmVyc2hpcCBvZgorICAgICAgICBhIHByb2NmcyBlbnRyeS4gSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGFjaGlldmUKKyAgICAgICAgdGhhdDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorc3RydWN0IHByb2NfZGlyX2VudHJ5KiBlbnRyeTsKKworZW50cnktPm1vZGUgPSAgU19JV1VTUiB8U19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RIOworZW50cnktPnVpZCA9IDA7CitlbnRyeS0+Z2lkID0gMTAwOworICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKworICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworCisKKworICA8Y2hhcHRlciBpZD0iZXhhbXBsZSI+CisgICAgPHRpdGxlPkV4YW1wbGU8L3RpdGxlPgorCisgICAgPCEtLSBiZSBjYXJlZnVsIHdpdGggdGhlIGV4YW1wbGUgY29kZTogaXQgc2hvdWxkbid0IGJlIHdpZGVyIHRoYW4KKyAgICBhcHByb3guIDYwIGNvbHVtbnMsIG9yIG90aGVyd2lzZSBpdCB3b24ndCBmaXQgcHJvcGVybHkgb24gYSBwYWdlCisgICAgLS0+CisKKyZwcm9jZnNleGFtcGxlOworCisgIDwvY2hhcHRlcj4KKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2NDA4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogcHJvY2ZzX2V4YW1wbGUuYzogYW4gZXhhbXBsZSBwcm9jIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKQorICoKKyAqIFRoaXMgZmlsZSBhY2NvbXBhbmllcyB0aGUgcHJvY2ZzLWd1aWRlIGluIHRoZSBMaW51eCBrZXJuZWwKKyAqIHNvdXJjZS4gSXRzIG1haW4gdXNlIGlzIHRvIGRlbW9uc3RyYXRlIHRoZSBjb25jZXB0cyBhbmQKKyAqIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gdGhlIGd1aWRlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaGFzIGJlZW4gZGV2ZWxvcGVkIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKKyAqIGNvbXB1dGluZyBib2FyZCAoaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvKSwgd2hpY2ggaXMKKyAqIHNwb25zb3JlZCBieSB0aGUgTW9iaWxlIE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zCisgKiAoaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8pIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zIAorICogKGh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvKSBwcm9qZWN0cy4KKyAqCisgKiBUaGUgYXV0aG9yIGNhbiBiZSByZWFjaGVkIGF0OgorICoKKyAqICBFcmlrIE1vdXcKKyAqICBJbmZvcm1hdGlvbiBhbmQgQ29tbXVuaWNhdGlvbiBUaGVvcnkgR3JvdXAKKyAqICBGYWN1bHR5IG9mIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgYW5kIFN5c3RlbXMKKyAqICBEZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kKKyAqICBQLk8uIEJveCA1MDMxCisgKiAgMjYwMCBHQSBEZWxmdAorICogIFRoZSBOZXRoZXJsYW5kcworICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAqIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgKiB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsCisgKiBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworCisjZGVmaW5lIE1PRFVMRV9WRVJTICIxLjAiCisjZGVmaW5lIE1PRFVMRV9OQU1FICJwcm9jZnNfZXhhbXBsZSIKKworI2RlZmluZSBGT09CQVJfTEVOIDgKKworc3RydWN0IGZiX2RhdGFfdCB7CisJY2hhciBuYW1lW0ZPT0JBUl9MRU4gKyAxXTsKKwljaGFyIHZhbHVlW0ZPT0JBUl9MRU4gKyAxXTsKK307CisKKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZXhhbXBsZV9kaXIsICpmb29fZmlsZSwKKwkqYmFyX2ZpbGUsICpqaWZmaWVzX2ZpbGUsICpzeW1saW5rOworCisKK3N0cnVjdCBmYl9kYXRhX3QgZm9vX2RhdGEsIGJhcl9kYXRhOworCisKK3N0YXRpYyBpbnQgcHJvY19yZWFkX2ppZmZpZXMoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAorCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbjsKKworCWxlbiA9IHNwcmludGYocGFnZSwgImppZmZpZXMgPSAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgamlmZmllcyk7CisKKwlyZXR1cm4gbGVuOworfQorCisKK3N0YXRpYyBpbnQgcHJvY19yZWFkX2Zvb2JhcihjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsCisJCQkgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIAorCQkJICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW47CisJc3RydWN0IGZiX2RhdGFfdCAqZmJfZGF0YSA9IChzdHJ1Y3QgZmJfZGF0YV90ICopZGF0YTsKKworCS8qIERPTidUIERPIFRIQVQgLSBidWZmZXIgb3ZlcnJ1bnMgYXJlIGJhZCAqLworCWxlbiA9IHNwcmludGYocGFnZSwgIiVzID0gJyVzJ1xuIiwgCisJCSAgICAgIGZiX2RhdGEtPm5hbWUsIGZiX2RhdGEtPnZhbHVlKTsKKworCXJldHVybiBsZW47Cit9CisKKworc3RhdGljIGludCBwcm9jX3dyaXRlX2Zvb2JhcihzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCAKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBmYl9kYXRhX3QgKmZiX2RhdGEgPSAoc3RydWN0IGZiX2RhdGFfdCAqKWRhdGE7CisKKwlpZihjb3VudCA+IEZPT0JBUl9MRU4pCisJCWxlbiA9IEZPT0JBUl9MRU47CisJZWxzZQorCQlsZW4gPSBjb3VudDsKKworCWlmKGNvcHlfZnJvbV91c2VyKGZiX2RhdGEtPnZhbHVlLCBidWZmZXIsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJZmJfZGF0YS0+dmFsdWVbbGVuXSA9ICdcMCc7CisKKwlyZXR1cm4gbGVuOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcHJvY2ZzX2V4YW1wbGUodm9pZCkKK3sKKwlpbnQgcnYgPSAwOworCisJLyogY3JlYXRlIGRpcmVjdG9yeSAqLworCWV4YW1wbGVfZGlyID0gcHJvY19ta2RpcihNT0RVTEVfTkFNRSwgTlVMTCk7CisJaWYoZXhhbXBsZV9kaXIgPT0gTlVMTCkgeworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwkKKwlleGFtcGxlX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkKKwkvKiBjcmVhdGUgamlmZmllcyB1c2luZyBjb252ZW5pZW5jZSBmdW5jdGlvbiAqLworCWppZmZpZXNfZmlsZSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImppZmZpZXMiLCAKKwkJCQkJICAgICAgMDQ0NCwgZXhhbXBsZV9kaXIsIAorCQkJCQkgICAgICBwcm9jX3JlYWRfamlmZmllcywKKwkJCQkJICAgICAgTlVMTCk7CisJaWYoamlmZmllc19maWxlID09IE5VTEwpIHsKKwkJcnYgID0gLUVOT01FTTsKKwkJZ290byBub19qaWZmaWVzOworCX0KKworCWppZmZpZXNfZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIGNyZWF0ZSBmb28gYW5kIGJhciBmaWxlcyB1c2luZyBzYW1lIGNhbGxiYWNrCisJICogZnVuY3Rpb25zIAorCSAqLworCWZvb19maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoImZvbyIsIDA2NDQsIGV4YW1wbGVfZGlyKTsKKwlpZihmb29fZmlsZSA9PSBOVUxMKSB7CisJCXJ2ID0gLUVOT01FTTsKKwkJZ290byBub19mb287CisJfQorCisJc3RyY3B5KGZvb19kYXRhLm5hbWUsICJmb28iKTsKKwlzdHJjcHkoZm9vX2RhdGEudmFsdWUsICJmb28iKTsKKwlmb29fZmlsZS0+ZGF0YSA9ICZmb29fZGF0YTsKKwlmb29fZmlsZS0+cmVhZF9wcm9jID0gcHJvY19yZWFkX2Zvb2JhcjsKKwlmb29fZmlsZS0+d3JpdGVfcHJvYyA9IHByb2Nfd3JpdGVfZm9vYmFyOworCWZvb19maWxlLT5vd25lciA9IFRISVNfTU9EVUxFOworCQkKKwliYXJfZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJiYXIiLCAwNjQ0LCBleGFtcGxlX2Rpcik7CisJaWYoYmFyX2ZpbGUgPT0gTlVMTCkgeworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gbm9fYmFyOworCX0KKworCXN0cmNweShiYXJfZGF0YS5uYW1lLCAiYmFyIik7CisJc3RyY3B5KGJhcl9kYXRhLnZhbHVlLCAiYmFyIik7CisJYmFyX2ZpbGUtPmRhdGEgPSAmYmFyX2RhdGE7CisJYmFyX2ZpbGUtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9mb29iYXI7CisJYmFyX2ZpbGUtPndyaXRlX3Byb2MgPSBwcm9jX3dyaXRlX2Zvb2JhcjsKKwliYXJfZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCisJLyogY3JlYXRlIHN5bWxpbmsgKi8KKwlzeW1saW5rID0gcHJvY19zeW1saW5rKCJqaWZmaWVzX3RvbyIsIGV4YW1wbGVfZGlyLCAKKwkJCSAgICAgICAiamlmZmllcyIpOworCWlmKHN5bWxpbmsgPT0gTlVMTCkgeworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gbm9fc3ltbGluazsKKwl9CisKKwlzeW1saW5rLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyogZXZlcnl0aGluZyBPSyAqLworCXByaW50ayhLRVJOX0lORk8gIiVzICVzIGluaXRpYWxpc2VkXG4iLAorCSAgICAgICBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOworCXJldHVybiAwOworCitub19zeW1saW5rOgorCXJlbW92ZV9wcm9jX2VudHJ5KCJ0dHkiLCBleGFtcGxlX2Rpcik7Citub190dHk6CisJcmVtb3ZlX3Byb2NfZW50cnkoImJhciIsIGV4YW1wbGVfZGlyKTsKK25vX2JhcjoKKwlyZW1vdmVfcHJvY19lbnRyeSgiZm9vIiwgZXhhbXBsZV9kaXIpOworbm9fZm9vOgorCXJlbW92ZV9wcm9jX2VudHJ5KCJqaWZmaWVzIiwgZXhhbXBsZV9kaXIpOworbm9famlmZmllczoJCQkgICAgICAKKwlyZW1vdmVfcHJvY19lbnRyeShNT0RVTEVfTkFNRSwgTlVMTCk7CitvdXQ6CisJcmV0dXJuIHJ2OworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3Byb2Nmc19leGFtcGxlKHZvaWQpCit7CisJcmVtb3ZlX3Byb2NfZW50cnkoImppZmZpZXNfdG9vIiwgZXhhbXBsZV9kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ0dHkiLCBleGFtcGxlX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImJhciIsIGV4YW1wbGVfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZm9vIiwgZXhhbXBsZV9kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJqaWZmaWVzIiwgZXhhbXBsZV9kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KE1PRFVMRV9OQU1FLCBOVUxMKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzICVzIHJlbW92ZWRcbiIsCisJICAgICAgIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7Cit9CisKKworbW9kdWxlX2luaXQoaW5pdF9wcm9jZnNfZXhhbXBsZSk7Cittb2R1bGVfZXhpdChjbGVhbnVwX3Byb2Nmc19leGFtcGxlKTsKKworTU9EVUxFX0FVVEhPUigiRXJpayBNb3V3Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInByb2NmcyBleGFtcGxlcyIpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2lkcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc2NzaWRyaXZlcnMudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU4ZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Njc2lkcml2ZXJzLnRtcGwKQEAgLTAsMCArMSwxOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0ic2NzaWRyaXZlcnMiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlNDU0kgU3Vic3lzdGVtIEludGVyZmFjZXM8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPkRvdWdsYXM8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5HaWxiZXJ0PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+ZGdpbGJlcnRAaW50ZXJsb2cuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKyAgPHB1YmRhdGU+MjAwMy0wOC0xMTwvcHViZGF0ZT4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMjwveWVhcj4KKyAgIDx5ZWFyPjIwMDM8L3llYXI+CisgICA8aG9sZGVyPkRvdWdsYXMgR2lsYmVydDwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorCisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIExpbnV4IHNjc2kgbWlkIGxldmVsCithbmQgbG93ZXIgbGV2ZWwgZHJpdmVycy4gTG93ZXIgbGV2ZWwgZHJpdmVycyBhcmUgdmFyaW91c2x5IGNhbGxlZCBIQkEKKyhob3N0IGJ1cyBhZGFwdGVyKSBkcml2ZXJzLCBob3N0IGRyaXZlcnMgKEhEKSBvciBwc2V1ZG8gYWRhcHRlciBkcml2ZXJzLgorVGhlIGxhdHRlciBhbGx1ZGVzIHRvIHRoZSBmYWN0IHRoYXQgYSBsb3dlciBsZXZlbCBkcml2ZXIgbWF5IGJlIGEKK2JyaWRnZSB0byBhbm90aGVyIElPIHN1YnN5c3RlbSAoYW5kIHRoZSAiaWRlLXNjc2kiIGRyaXZlciBpcyBhbiBleGFtcGxlCitvZiB0aGlzKS4gVGhlcmUgY2FuIGJlIG1hbnkgbG93ZXIgbGV2ZWwgZHJpdmVycyBhY3RpdmUgaW4gYSBydW5uaW5nCitzeXN0ZW0sIGJ1dCBvbmx5IG9uZSBwZXIgaGFyZHdhcmUgdHlwZS4gRm9yIGV4YW1wbGUsIHRoZSBhaWM3eHh4IGRyaXZlcgorY29udHJvbHMgYWRhcHRlYyBjb250cm9sbGVycyBiYXNlZCBvbiB0aGUgN3h4eCBjaGlwIHNlcmllcy4gTW9zdCBsb3dlcgorbGV2ZWwgZHJpdmVycyBjYW4gY29udHJvbCBvbmUgb3IgbW9yZSBzY3NpIGhvc3RzIChhLmsuYS4gc2NzaSBpbml0aWF0b3JzKS4KKyAgPC9wYXJhPgorPHBhcmE+CitUaGlzIGRvY3VtZW50IGNhbiBiZWVuIGZvdW5kIGluIGFuIEFTQ0lJIHRleHQgZmlsZSBpbiB0aGUgbGludXgga2VybmVsIAorc291cmNlOiA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0PC9maWxlbmFtZT4gLgorSXQgY3VycmVudGx5IGhvbGQgYSBsaXR0bGUgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIHRoaXMgZG9jdW1lbnQuIFRoZQorPGZpbGVuYW1lPmRyaXZlcnMvc2NzaS9ob3N0cy5oPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4KK2RyaXZlcnMvc2NzaS9zY3NpLmg8L2ZpbGVuYW1lPiBoZWFkZXJzIGNvbnRhaW4gZGVzY3JpcHRpb25zIG9mIG1lbWJlcnMKK29mIGltcG9ydGFudCBzdHJ1Y3R1cmVzIGZvciB0aGUgc2NzaSBzdWJzeXN0ZW0uCis8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZHJpdmVyLXN0cnVjdCI+CisgICAgICA8dGl0bGU+RHJpdmVyIHN0cnVjdHVyZTwvdGl0bGU+CisgIDxwYXJhPgorVHJhZGl0aW9uYWxseSBhIGxvd2VyIGxldmVsIGRyaXZlciBmb3IgdGhlIHNjc2kgc3Vic3lzdGVtIGhhcyBiZWVuCithdCBsZWFzdCB0d28gZmlsZXMgaW4gdGhlIGRyaXZlcnMvc2NzaSBkaXJlY3RvcnkuIEZvciBleGFtcGxlLCBhCitkcml2ZXIgY2FsbGVkICJ4eXoiIGhhcyBhIGhlYWRlciBmaWxlICJ4eXouaCIgYW5kIGEgc291cmNlIGZpbGUKKyJ4eXouYyIuIFtBY3R1YWxseSB0aGVyZSBpcyBubyBnb29kIHJlYXNvbiB3aHkgdGhpcyBjb3VsZG4ndCBhbGwKK2JlIGluIG9uZSBmaWxlLl0gU29tZSBkcml2ZXJzIHRoYXQgaGF2ZSBiZWVuIHBvcnRlZCB0byBzZXZlcmFsIG9wZXJhdGluZworc3lzdGVtcyAoZS5nLiBhaWM3eHh4IHdoaWNoIGhhcyBzZXBhcmF0ZSAgZmlsZXMgZm9yIGdlbmVyaWMgYW5kCitPUy1zcGVjaWZpYyBjb2RlKSBoYXZlIG1vcmUgdGhhbiB0d28gZmlsZXMuIFN1Y2ggZHJpdmVycyB0ZW5kIHRvIGhhdmUKK3RoZWlyIG93biBkaXJlY3RvcnkgdW5kZXIgdGhlIGRyaXZlcnMvc2NzaSBkaXJlY3RvcnkuCisgIDwvcGFyYT4KKyAgPHBhcmE+CitzY3NpX21vZHVsZS5jIGlzIG5vcm1hbGx5IGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgYSBsb3dlcgorbGV2ZWwgZHJpdmVyLiBGb3IgaXQgdG8gd29yayBhIGRlY2xhcmF0aW9uIGxpa2UgdGhpcyBpcyBuZWVkZWQgYmVmb3JlCitpdCBpcyBpbmNsdWRlZDoKKzxwcm9ncmFtbGlzdGluZz4KKyAgICBzdGF0aWMgU2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IERSSVZFUl9URU1QTEFURTsKKyAgICAvKiBEUklWRVJfVEVNUExBVEUgc2hvdWxkIGNvbnRhaW4gcG9pbnRlcnMgdG8gc3VwcG9ydGVkIGludGVyZmFjZQorICAgICAgIGZ1bmN0aW9ucy4gU2NzaV9Ib3N0X1RlbXBsYXRlIGlzIGRlZmluZWQgaG9zdHMuaCAqLworICAgICNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgorPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorICA8cGFyYT4KK1RoZSBzY3NpX21vZHVsZS5jIGFzc3VtZXMgdGhlIG5hbWUgImRyaXZlcl90ZW1wbGF0ZSIgaXMgYXBwcm9wcmlhdGVseQorZGVmaW5lZC4gSXQgY29udGFpbnMgMiBmdW5jdGlvbnM6Cis8b3JkZXJlZGxpc3Q+Cis8bGlzdGl0ZW0+PHBhcmE+CisgICAgIGluaXRfdGhpc19zY3NpX2RyaXZlcigpIGNhbGxlZCBkdXJpbmcgYnVpbHRpbiBhbmQgbW9kdWxlIGRyaXZlcgorICAgICBpbml0aWFsaXphdGlvbjogaW52b2tlcyBtaWQgbGV2ZWwncyBzY3NpX3JlZ2lzdGVyX2hvc3QoKQorPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+CisgICAgIGV4aXRfdGhpc19zY3NpX2RyaXZlcigpIGNhbGxlZCBkdXJpbmcgY2xvc2Vkb3duOiBpbnZva2VzCisgICAgIG1pZCBsZXZlbCdzIHNjc2lfdW5yZWdpc3Rlcl9ob3N0KCkKKzwvcGFyYT48L2xpc3RpdGVtPgorPC9vcmRlcmVkbGlzdD4KKyAgPC9wYXJhPgorPHBhcmE+CitXaGVuIGEgbmV3LCBsb3dlciBsZXZlbCBkcml2ZXIgaXMgYmVpbmcgYWRkZWQgdG8gTGludXgsIHRoZSBmb2xsb3dpbmcgCitmaWxlcyAoYWxsIGZvdW5kIGluIHRoZSBkcml2ZXJzL3Njc2kgZGlyZWN0b3J5KSB3aWxsIG5lZWQgc29tZSBhdHRlbnRpb246IAorTWFrZWZpbGUsIENvbmZpZy5oZWxwIGFuZCBDb25maWcuaW4gLiBJdCBpcyBwcm9iYWJseSBiZXN0IHRvIGxvb2sgYXQgd2hhdCAKK2FuIGV4aXN0aW5nIGxvd2VyIGxldmVsIGRyaXZlciBkb2VzIGluIHRoaXMgcmVnYXJkLgorPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImludGZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5JbnRlcmZhY2UgRnVuY3Rpb25zPC90aXRsZT4KKyFFRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0ibG9ja3MiPgorICAgICA8dGl0bGU+TG9ja3M8L3RpdGxlPgorPHBhcmE+CitFYWNoIFNjc2lfSG9zdCBpbnN0YW5jZSBoYXMgYSBzcGluX2xvY2sgY2FsbGVkIFNjc2lfSG9zdDo6ZGVmYXVsdF9sb2NrCit3aGljaCBpcyBpbml0aWFsaXplZCBpbiBzY3NpX3JlZ2lzdGVyKCkgW2ZvdW5kIGluIGhvc3RzLmNdLiBXaXRoaW4gdGhlCitzYW1lIGZ1bmN0aW9uIHRoZSBTY3NpX0hvc3Q6Omhvc3RfbG9jayBwb2ludGVyIGlzIGluaXRpYWxpemVkIHRvIHBvaW50CithdCBkZWZhdWx0X2xvY2sgd2l0aCB0aGUgc2NzaV9hc3NpZ25fbG9jaygpIGZ1bmN0aW9uLiBUaGVyZWFmdGVyCitsb2NrIGFuZCB1bmxvY2sgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIG1pZCBsZXZlbCB1c2UgdGhlCitTY3NpX0hvc3Q6Omhvc3RfbG9jayBwb2ludGVyLgorPC9wYXJhPgorPHBhcmE+CitMb3dlciBsZXZlbCBkcml2ZXJzIGNhbiBvdmVycmlkZSB0aGUgdXNlIG9mIFNjc2lfSG9zdDo6ZGVmYXVsdF9sb2NrIGJ5Cit1c2luZyBzY3NpX2Fzc2lnbl9sb2NrKCkuIFRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSB0byBkbyB0aGlzIHdvdWxkCitiZSBpbiB0aGUgZGV0ZWN0KCkgZnVuY3Rpb24gYWZ0ZXIgaXQgaGFzIGludm9rZWQgc2NzaV9yZWdpc3RlcigpLiBJdAorY291bGQgYmUgcmVwbGFjZWQgYnkgYSBjb2Fyc2VyIGdyYWluIGxvY2sgKGUuZy4gcGVyIGRyaXZlcikgb3IgYQorbG9jayBvZiBlcXVhbCBncmFudWxhcml0eSAoaS5lLiBwZXIgaG9zdCkuIFVzaW5nIGZpbmVyIGdyYWluIGxvY2tzCisoZS5nLiBwZXIgc2NzaSBkZXZpY2UpIG1heSBiZSBwb3NzaWJsZSBieSBqdWdnbGluZyBsb2NrcyBpbgorcXVldWVjb21tYW5kKCkuCis8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iY2hhbmdlcyI+CisgICAgIDx0aXRsZT5DaGFuZ2VzIHNpbmNlIGxrIDIuNCBzZXJpZXM8L3RpdGxlPgorPHBhcmE+Citpb19yZXF1ZXN0X2xvY2sgaGFzIGJlZW4gcmVwbGFjZWQgYnkgc2V2ZXJhbCBmaW5lciBncmFpbmVkIGxvY2tzLiBUaGUgbG9jaworcmVsZXZhbnQgdG8gbG93ZXIgbGV2ZWwgZHJpdmVycyBpcyBTY3NpX0hvc3Q6Omhvc3RfbG9jayBhbmQgdGhlcmUgaXMgb25lCitwZXIgc2NzaSBob3N0LgorPC9wYXJhPgorPHBhcmE+CitUaGUgb2xkZXIgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgbWVhbnMgdGhlCitsb3dlciBsZXZlbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGFib3J0KCkgYW5kIHJlc2V0KCkgaGF2ZSBiZWVuIHJlbW92ZWQuCis8L3BhcmE+Cis8cGFyYT4KK0luIHRoZSAyLjQgc2VyaWVzIHRoZSBzY3NpIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9ucyB3ZXJlCithZ2dyZWdhdGVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb25zIGZyb20gYWxsIG90aGVyIExpbnV4CitzdWJzeXN0ZW1zIGluIHRoZSBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwIGZpbGUuIEluIHRoZSAyLjUgc2VyaWVzLAordGhlIHNjc2kgc3Vic3lzdGVtIG5vdyBoYXMgaXRzIG93biAobXVjaCBzbWFsbGVyKSBkcml2ZXJzL3Njc2kvQ29uZmlnLmhlbHAKK2ZpbGUuCis8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iY3JlZGl0cyI+CisgICAgIDx0aXRsZT5DcmVkaXRzPC90aXRsZT4KKzxwYXJhPgorVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCB0byB0aGlzIGRvY3VtZW50OgorPG9yZGVyZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPgorTWlrZSBBbmRlcnNvbiA8ZW1haWw+YW5kbWlrZUB1cy5pYm0uY29tPC9lbWFpbD4KKzwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPgorSmFtZXMgQm90dG9tbGV5IDxlbWFpbD5KYW1lcy5Cb3R0b21sZXlAc3RlZWxleWUuY29tPC9lbWFpbD4KKzwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPgorUGF0cmljayBNYW5zZmllbGQgPGVtYWlsPnBhdG1hbnNAdXMuaWJtLmNvbTwvZW1haWw+Cis8L3BhcmE+PC9saXN0aXRlbT4KKzwvb3JkZXJlZGxpc3Q+Cis8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3NpczkwMC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3NpczkwMC50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMmNiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc2lzOTAwLnRtcGwKQEAgLTAsMCArMSw1ODUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iU2lTOTAwR3VpZGUiPgorCis8Ym9va2luZm8+CisKKzx0aXRsZT5TaVMgOTAwLzcwMTYgRmFzdCBFdGhlcm5ldCBEZXZpY2UgRHJpdmVyPC90aXRsZT4KKworPGF1dGhvcmdyb3VwPgorPGF1dGhvcj4KKzxmaXJzdG5hbWU+T2xsaWU8L2ZpcnN0bmFtZT4KKzxzdXJuYW1lPkxobzwvc3VybmFtZT4KKzwvYXV0aG9yPgorCis8YXV0aG9yPgorPGZpcnN0bmFtZT5MZWkgQ2h1bjwvZmlyc3RuYW1lPgorPHN1cm5hbWU+Q2hhbmc8L3N1cm5hbWU+Cis8L2F1dGhvcj4KKzwvYXV0aG9yZ3JvdXA+CisKKzxlZGl0aW9uPkRvY3VtZW50IFJldmlzaW9uOiAwLjMgZm9yIFNpUzkwMCBkcml2ZXIgdjEuMDYgJmFtcDsgdjEuMDc8L2VkaXRpb24+Cis8cHViZGF0ZT5Ob3ZlbWJlciAxNiwgMjAwMDwvcHViZGF0ZT4KKworPGNvcHlyaWdodD4KKyA8eWVhcj4xOTk5PC95ZWFyPgorIDxob2xkZXI+U2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3JwLjwvaG9sZGVyPgorPC9jb3B5cmlnaHQ+CisKKzxsZWdhbG5vdGljZT4KKyA8cGFyYT4KKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIDwvcGFyYT4KKworIDxwYXJhPgorCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgPC9wYXJhPgorCisgPHBhcmE+CisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorCUZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyA8L3BhcmE+Cis8L2xlZ2Fsbm90aWNlPgorCis8YWJzdHJhY3Q+Cis8cGFyYT4KK1RoaXMgZG9jdW1lbnQgZ2l2ZXMgc29tZSBpbmZvcm1hdGlvbiBvbiBpbnN0YWxsYXRpb24gYW5kIHVzYWdlIG9mIFNpUyA5MDAvNzAxNgorZGV2aWNlIGRyaXZlciB1bmRlciBMaW51eC4KKzwvcGFyYT4KKzwvYWJzdHJhY3Q+CisKKzwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKzxjaGFwdGVyIGlkPSJpbnRybyI+CisgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKzxwYXJhPgorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHJldmlzaW9uIDEuMDYgYW5kIDEuMDcgb2YgU2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgCitkZXZpY2UgZHJpdmVyIHVuZGVyIExpbnV4LiBUaGUgZHJpdmVyIGlzIGRldmVsb3BlZCBieSBTaWxpY29uIEludGVncmF0ZWQKK1N5c3RlbSBDb3JwLiBhbmQgZGlzdHJpYnV0ZWQgZnJlZWx5IHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KK1RoZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbG9hZGFibGUgbW9kdWxlIGFuZCB1c2VkIHVuZGVyIExpbnV4IGtlcm5lbCAKK3ZlcnNpb24gMi4yLnguIChyZXYuIDEuMDYpCitXaXRoIG1pbmltYWwgY2hhbmdlcywgdGhlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHVuZGVyIDIuMy54IGFuZCAyLjQueCBrZXJuZWwgCisocmV2LiAxLjA3KSwgcGxlYXNlIHNlZSAKKzx4cmVmIGxpbmtlbmQ9Imluc3RhbGwiLz4uIElmIHlvdSBhcmUgaW50ZW5kZWQgdG8KK3VzZSB0aGUgZHJpdmVyIGZvciBlYXJsaWVyIGtlcm5lbHMsIHlvdSBhcmUgb24geW91ciBvd24uCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIGRyaXZlciBpcyB0ZXN0ZWQgd2l0aCB1c3VhbCBUQ1AvSVAgYXBwbGljYXRpb25zIGluY2x1ZGluZworRlRQLCBUZWxuZXQsIE5ldHNjYXBlIGV0Yy4gYW5kIGlzIHVzZWQgY29uc3RhbnRseSBieSB0aGUgZGV2ZWxvcGVycy4KKzwvcGFyYT4KKworPHBhcmE+CitQbGVhc2Ugc2VuZCBhbGwgY29tbWVudHMvZml4ZXMvcXVlc3Rpb25zIHRvCis8dWxpbmsgdXJsPSJtYWlsdG86bGNjaGFuZ0BzaXMuY29tLnR3Ij5MZWktQ2h1biBDaGFuZzwvdWxpbms+LgorPC9wYXJhPgorPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0iY2hhbmdlcyI+CisgPHRpdGxlPkNoYW5nZXM8L3RpdGxlPgorCis8cGFyYT4KK0NoYW5nZXMgbWFkZSBpbiBSZXZpc2lvbiAxLjA3CisKKzxvcmRlcmVkbGlzdD4KKzxsaXN0aXRlbT4KKzxwYXJhPgorU2VwYXJhdGlvbiBvZiBzaXM5MDAuYyBhbmQgc2lzOTAwLmggaW4gb3JkZXIgdG8gbW92ZSBtb3N0IAorY29uc3RhbnQgZGVmaW5pdGlvbiB0byBzaXM5MDAuaCAobWFueSBvZiB0aG9zZSBjb25zdGFudHMgd2VyZQorY29ycmVjdGVkKQorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitDbGVhbiB1cCBQQ0kgZGV0ZWN0aW9uLCB0aGUgcGNpLXNjYW4gZnJvbSBEb25hbGQgQmVja2VyIHdlcmUgbm90IHVzZWQsCitqdXN0IHNpbXBsZSBwY2kmbG93YmFyO2ZpbmQmbG93YmFyOyouCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK01JSSBkZXRlY3Rpb24gaXMgbW9kaWZpZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBtaWkgdHJhbnNjZWl2ZXIuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0J1Z3MgaW4gcmVhZCZsb3diYXI7ZWVwcm9tLCBtZGlvJmxvd2JhcjsqIHdlcmUgcmVtb3ZlZC4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorTG90IG9mIHNpczkwMCBpcnJlbGV2YW50IGNvbW1lbnRzIHdlcmUgcmVtb3ZlZC9jaGFuZ2VkIGFuZAorbW9yZSBjb21tZW50cyB3ZXJlIGFkZGVkIHRvIHJlZmxlY3QgdGhlIHJlYWwgc2l0dWF0aW9uLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitDbGVhbiB1cCBvZiBwaHlzaWNhbC92aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWVzcyBpbiBidWZmZXIgCitkZXNjcmlwdG9ycy4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQmV0dGVyIHRyYW5zbWl0L3JlY2VpdmUgZXJyb3IgaGFuZGxpbmcuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK1RoZSBkcml2ZXIgbm93IHVzZXMgemVyby1jb3B5IHNpbmdsZSBidWZmZXIgbWFuYWdlbWVudAorc2NoZW1lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK05hbWVzIG9mIHZhcmlhYmxlcyB3ZXJlIGNoYW5nZWQgdG8gYmUgbW9yZSBjb25zaXN0ZW50LgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitDbGVhbiB1cCBvZiBhdW8tbmVnb3RpYXRpb24gYW5kIHRpbWVyIGNvZGUuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0F1dG9tYXRpYyBkZXRlY3Rpb24gYW5kIGNoYW5nZSBvZiBQSFkgb24gdGhlIGZseS4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorQnVnIGluIG1hYyBwcm9iaW5nIGZpeGVkLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitGaXggNjMwRSBlcXVhbGllciBwcm9ibGVtIGJ5IG1vZGlmeWluZyB0aGUgZXF1YWxpemVyIHdvcmthcm91bmQgcnVsZS4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorU3VwcG9ydCBmb3IgSUNTMTg5MyAxMC8xMDAgSW50ZXJhdGVkIFBIWWNlaXZlci4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorU3VwcG9ydCBmb3IgbWVkaWEgc2VsZWN0IGJ5IGlmY29uZmlnLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitBZGRlZCBrZXJuZWwtZG9jIGV4dHJhdGFibGUgZG9jdW1lbnRhdGlvbi4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzwvb3JkZXJlZGxpc3Q+Cis8L3BhcmE+Cis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJ0ZXN0ZWQiPgorIDx0aXRsZT5UZXN0ZWQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCis8cGFyYT4KK1RoaXMgZHJpdmVyIGlzIGRldmVsb3BlZCBvbiB0aGUgZm9sbG93aW5nIGhhcmR3YXJlCisKKzxpdGVtaXplZGxpc3Q+Cis8bGlzdGl0ZW0+CisKKzxwYXJhPgorSW50ZWwgQ2VsZXJvbiA1MDAgd2l0aCBTaVMgNjMwIChyZXYgMDIpIGNoaXBzZXQKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+CisKKzxwYXJhPgorU2lTIDkwMCAocmV2IDAxKSBhbmQgU2lTIDcwMTYvNzAxNCBGYXN0IEV0aGVybmV0IENhcmQKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzwvaXRlbWl6ZWRsaXN0PgorCithbmQgdGVzdGVkIHdpdGggdGhlc2Ugc29mdHdhcmUgZW52aXJvbm1lbnRzCisKKzxpdGVtaXplZGxpc3Q+Cis8bGlzdGl0ZW0+CisKKzxwYXJhPgorUmVkIEhhdCBMaW51eCB2ZXJzaW9uIDYuMgorPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKworPHBhcmE+CitMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjQuMAorPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKworPHBhcmE+CitOZXRzY2FwZSB2ZXJzaW9uIDQuNgorPC9wYXJhPgorPC9saXN0aXRlbT4KKzxsaXN0aXRlbT4KKworPHBhcmE+CitOY0ZUUCAzLjAuMCBiZXRhIDE4Cis8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCis8cGFyYT4KK1NhbWJhIHZlcnNpb24gMi4wLjMKKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzwvaXRlbWl6ZWRsaXN0PgorCis8L3BhcmE+CisKKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9ImZpbGVzIj4KKzx0aXRsZT5GaWxlcyBpbiBUaGlzIFBhY2thZ2U8L3RpdGxlPgorCis8cGFyYT4KK0luIHRoZSBwYWNrYWdlIHlvdSBjYW4gZmluZCB0aGVzZSBmaWxlczoKKzwvcGFyYT4KKworPHBhcmE+Cis8dmFyaWFibGVsaXN0PgorCis8dmFybGlzdGVudHJ5PgorPHRlcm0+c2lzOTAwLmM8L3Rlcm0+Cis8bGlzdGl0ZW0+Cis8cGFyYT4KK0RyaXZlciBzb3VyY2UgZmlsZSBpbiBDIAorPC9wYXJhPgorPC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorPHRlcm0+c2lzOTAwLmg8L3Rlcm0+Cis8bGlzdGl0ZW0+Cis8cGFyYT4KK0hlYWRlciBmaWxlIGZvciBzaXM5MDAuYworPC9wYXJhPgorPC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorPHRlcm0+c2lzOTAwLnNnbWw8L3Rlcm0+Cis8bGlzdGl0ZW0+Cis8cGFyYT4KK0RvY0Jvb2sgU0dNTCBzb3VyY2Ugb2YgdGhlIGRvY3VtZW50Cis8L3BhcmE+Cis8L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+CisKKzx2YXJsaXN0ZW50cnk+Cis8dGVybT5zaXM5MDAudHh0PC90ZXJtPgorPGxpc3RpdGVtPgorPHBhcmE+CitEcml2ZXIgZG9jdW1lbnQgaW4gcGxhaW4gdGV4dAorPC9wYXJhPgorPC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8L3ZhcmlhYmxlbGlzdD4KKzwvcGFyYT4KKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9Imluc3RhbGwiPgorIDx0aXRsZT5JbnN0YWxsYXRpb248L3RpdGxlPgorCis8cGFyYT4KK1NpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC4gaXMgY29vcGVyYXRpbmcgY2xvc2VseSB3aXRoIGNvcmUgTGludXggS2VybmVsCitkZXZlbG9wZXJzLiBUaGUgcmV2aXNpb25zIG9mIFNpUyA5MDAgZHJpdmVyIGFyZSBkaXN0cmlidXRlZCBieSB0aGUgdXN1YWxsIGNoYW5uZWxzCitmb3Iga2VybmVsIHRhciBmaWxlcyBhbmQgcGF0Y2hlcy4gVGhvc2Uga2VybmVsIHRhciBmaWxlcyBmb3Igb2ZmaWNpYWwga2VybmVsIGFuZAorcGF0Y2hlcyBmb3Iga2VybmVsIHByZS1yZWxlYXNlIGNhbiBiZSBkb3dubG9hZCBhdCAKKzx1bGluayB1cmw9Imh0dHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsLyI+b2ZmaWNpYWwga2VybmVsIGZ0cCBzaXRlPC91bGluaz4KK2FuZCBpdHMgbWlycm9ycy4KK1RoZSAxLjA2IHJldmlzaW9uIGNhbiBiZSBmb3VuZCBpbiBrZXJuZWwgdmVyc2lvbiBsYXRlciB0aGFuIDIuMy4xNSBhbmQgcHJlLTIuMi4xNCwgCithbmQgMS4wNyByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gMi40LjAuCitJZiB5b3UgaGF2ZSBubyBwcmlvciBleHBlcmllbmNlIGluIG5ldHdvcmtpbmcgdW5kZXIgTGludXgsIHBsZWFzZSByZWFkCis8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnRsZHAub3JnLyI+RXRoZXJuZXQgSE9XVE88L3VsaW5rPiBhbmQKKzx1bGluayB1cmw9Imh0dHA6Ly93d3cudGxkcC5vcmcvIj5OZXR3b3JraW5nIEhPV1RPPC91bGluaz4gYXZhaWxhYmxlIGZyb20KK0xpbnV4IERvY3VtZW50YXRpb24gUHJvamVjdCAoTERQKS4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgZHJpdmVyIGlzIGJ1bmRsZWQgaW4gcmVsZWFzZSBsYXRlciB0aGFuIDIuMi4xMSBhbmQgMi4zLjE1IHNvIHRoaXMgCitpcyB0aGUgbW9zdCBlYXN5IGNhc2UuIAorQmUgc3VyZSB5b3UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZXMgZm9yIGNvbXBpbGluZyBrZXJuZWwgc291cmNlLgorVGhvc2UgcGFja2FnZXMgYXJlIGxpc3RlZCBpbiBEb2N1bWVudC9DaGFuZ2VzIGluIGtlcm5lbCBzb3VyY2UgCitkaXN0cmlidXRpb24uIElmIHlvdSBoYXZlIHRvIGluc3RhbGwgdGhlIGRyaXZlciBvdGhlciB0aGFuIHRob3NlIGJ1bmRsZWQKK2luIGtlcm5lbCByZWxlYXNlLCB5b3Ugc2hvdWxkIGhhdmUgeW91ciBkcml2ZXIgZmlsZSAKKzxmaWxlbmFtZT5zaXM5MDAuYzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+c2lzOTAwLmg8L2ZpbGVuYW1lPiAKK2NvcGllZCBpbnRvIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij4vdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC88L2ZpbGVuYW1lPiBmaXJzdC4KK1RoZXJlIGFyZSB0d28gYWx0ZXJuYXRpdmUgd2F5cyB0byBpbnN0YWxsIHRoZSBkcml2ZXIKKzwvcGFyYT4KKworPHNlY3QxPgorPHRpdGxlPkJ1aWxkaW5nIHRoZSBkcml2ZXIgYXMgbG9hZGFibGUgbW9kdWxlPC90aXRsZT4KKworPHBhcmE+CitUbyBidWlsZCB0aGUgZHJpdmVyIGFzIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZSB5b3UgaGF2ZSB0byByZWNvbmZpZ3VyZQordGhlIGtlcm5lbCB0byBhY3RpdmF0ZSBuZXR3b3JrIHN1cHBvcnQgYnkKKzwvcGFyYT4KKworPHBhcmE+PHNjcmVlbj4KK21ha2UgbWVudWNvbmZpZworPC9zY3JlZW4+PC9wYXJhPgorCis8cGFyYT4KK0Nob29zZSA8cXVvdGU+TG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgIC0tLT48L3F1b3RlPiwgCit0aGVuIHNlbGVjdCA8cXVvdGU+RW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0PC9xdW90ZT4uCis8L3BhcmE+CisKKzxwYXJhPgorQ2hvb3NlIDxxdW90ZT5OZXR3b3JrIERldmljZSBTdXBwb3J0ICAtLS0+PC9xdW90ZT4sIHNlbGVjdCAKKzxxdW90ZT5FdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCk8L3F1b3RlPi4KK1RoZW4gc2VsZWN0IDxxdW90ZT5FSVNBLCBWTEIsIFBDSSBhbmQgb24gYm9hcmQgY29udHJvbGxlcnM8L3F1b3RlPiwgCithbmQgY2hvb3NlIDxxdW90ZT5TaVMgOTAwLzcwMTYgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBzdXBwb3J0PC9xdW90ZT4gCit0byA8cXVvdGU+TTwvcXVvdGU+LgorPC9wYXJhPgorCis8cGFyYT4KK0FmdGVyIHJlY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgeW91IGNhbiBtYWtlIHRoZSBkcml2ZXIgbW9kdWxlIGJ5Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+CittYWtlIG1vZHVsZXMKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitUaGUgZHJpdmVyIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIG5vIGVycm9ycy4gQWZ0ZXIgY29tcGlsaW5nIHRoZSBkcml2ZXIsCit0aGUgZHJpdmVyIGNhbiBiZSBpbnN0YWxsZWQgdG8gcHJvcGVyIHBsYWNlIGJ5Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+CittYWtlIG1vZHVsZXNfaW5zdGFsbAorPC9zY3JlZW4+PC9wYXJhPgorCis8cGFyYT4KK0xvYWQgdGhlIGRyaXZlciBpbnRvIGtlcm5lbCBieQorPC9wYXJhPgorCis8cGFyYT48c2NyZWVuPgoraW5zbW9kIHNpczkwMAorPC9zY3JlZW4+PC9wYXJhPgorCis8cGFyYT4KK1doZW4gbG9hZGluZyB0aGUgZHJpdmVyIGludG8gbWVtb3J5LCBzb21lIGluZm9ybWF0aW9uIG1lc3NhZ2UgY2FuIGJlIHZpZXcgYnkKKzwvcGFyYT4KKworPHBhcmE+Cis8c2NyZWVuPgorZG1lc2cKKzwvc2NyZWVuPgorCitvcgorCis8c2NyZWVuPgorY2F0IC92YXIvbG9nL21lc3NhZ2UKKzwvc2NyZWVuPgorPC9wYXJhPgorCis8cGFyYT4KK0lmIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHByb3Blcmx5IHlvdSB3aWxsIGhhdmUgbWVzc2FnZXMgc2ltaWxhciB0byB0aGlzOgorPC9wYXJhPgorCis8cGFyYT48c2NyZWVuPgorc2lzOTAwLmM6IHYxLjA3LjA2ICAxMS8wNy8yMDAwCitldGgwOiBTaVMgOTAwIFBDSSBGYXN0IEV0aGVybmV0IGF0IDB4ZDAwMCwgSVJRIDEwLCAwMDowMDplODo4Mzo3ZjphNC4KK2V0aDA6IFNpUyA5MDAgSW50ZXJuYWwgTUlJIFBIWSB0cmFuc2NlaXZlciBmb3VuZCBhdCBhZGRyZXNzIDEuCitldGgwOiBVc2luZyBTaVMgOTAwIEludGVybmFsIE1JSSBQSFkgYXMgZGVmYXVsdAorPC9zY3JlZW4+PC9wYXJhPgorCis8cGFyYT4KK3Nob3dpbmcgdGhlIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbmQgdGhlIHJlc3VsdHMgb2YgcHJvYmluZyByb3V0aW5lLgorPC9wYXJhPgorCis8cGFyYT4KK09uY2UgdGhlIGRyaXZlciBpcyBsb2FkZWQsIG5ldHdvcmsgY2FuIGJlIGJyb3VnaHQgdXAgYnkKKzwvcGFyYT4KKworPHBhcmE+PHNjcmVlbj4KKy9zYmluL2lmY29uZmlnIGV0aDAgSVBBRERSIGJyb2FkY2FzdCBCUk9BRENBU1QgbmV0bWFzayBORVRNQVNLIG1lZGlhIFRZUEUKKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+Cit3aGVyZSBJUEFERFIsIEJST0FEQ0FTVCwgTkVUTUFTSyBhcmUgeW91ciBJUCBhZGRyZXNzLCBicm9hZGNhc3QgYWRkcmVzcyBhbmQKK25ldG1hc2sgcmVzcGVjdGl2ZWx5LiBUWVBFIGlzIHVzZWQgdG8gc2V0IG1lZGl1bSB0eXBlIHVzZWQgYnkgdGhlIGRldmljZS4gCitUeXBpY2FsIHZhbHVlcyBhcmUgIjEwYmFzZVQiKHR3aXN0ZWQtcGFpciAxME1icHMgRXRoZXJuZXQpIG9yICIxMDBiYXNlVCIKKyh0d2lzdGVkLXBhaXIgMTAwTWJwcyBFdGhlcm5ldCkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb25maWd1cmUgCituZXR3b3JrIGludGVyZmFjZSwgcGxlYXNlIHJlZmVyIHRvICAKKzx1bGluayB1cmw9Imh0dHA6Ly93d3cudGxkcC5vcmcvIj5OZXR3b3JraW5nIEhPV1RPPC91bGluaz4uCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIGxpbmsgc3RhdHVzIGlzIGFsc28gc2hvd24gYnkga2VybmVsIG1lc3NhZ2VzLiBGb3IgZXhhbXBsZSwgYWZ0ZXIgdGhlCituZXR3b3JrIGludGVyZmFjZSBpcyBhY3RpdmF0ZWQsIHlvdSBtYXkgaGF2ZSB0aGUgbWVzc2FnZToKKzwvcGFyYT4KKworPHBhcmE+PHNjcmVlbj4KK2V0aDA6IE1lZGlhIExpbmsgT24gMTAwbWJwcyBmdWxsLWR1cGxleAorPC9zY3JlZW4+PC9wYXJhPgorCis8cGFyYT4KK0lmIHlvdSB0cnkgdG8gdW5wbHVnIHRoZSB0d2lzdCBwYWlyIChUUCkgY2FibGUgeW91IHdpbGwgZ2V0Cis8L3BhcmE+CisKKzxwYXJhPjxzY3JlZW4+CitldGgwOiBNZWRpYSBMaW5rIE9mZgorPC9zY3JlZW4+PC9wYXJhPgorCis8cGFyYT4KK2luZGljYXRpbmcgdGhhdCB0aGUgbGluayBpcyBmYWlsZWQuCis8L3BhcmE+Cis8L3NlY3QxPgorCis8c2VjdDE+Cis8dGl0bGU+QnVpbGRpbmcgdGhlIGRyaXZlciBpbnRvIGtlcm5lbDwvdGl0bGU+CisKKzxwYXJhPgorSWYgeW91IHdhbnQgdG8gbWFrZSB0aGUgZHJpdmVyIGludG8ga2VybmVsLCBjaG9vc2UgPHF1b3RlPlk8L3F1b3RlPiAKK3JhdGhlciB0aGFuIDxxdW90ZT5NPC9xdW90ZT4gb24gCis8cXVvdGU+U2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydDwvcXVvdGU+IAord2hlbiBjb25maWd1cmluZyB0aGUga2VybmVsLiBCdWlsZCB0aGUga2VybmVsIGltYWdlIGluIHRoZSB1c3VhbCB3YXkKKzwvcGFyYT4KKworPHBhcmE+PHNjcmVlbj4KK21ha2UgY2xlYW4KKworbWFrZSBiemxpbG8KKzwvc2NyZWVuPjwvcGFyYT4KKworPHBhcmE+CitOZXh0IHRpbWUgdGhlIHN5c3RlbSByZWJvb3QsIHlvdSBoYXZlIHRoZSBkcml2ZXIgaW4gbWVtb3J5LgorPC9wYXJhPgorCis8L3NlY3QxPgorPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0icHJvYmxlbXMiPgorIDx0aXRsZT5Lbm93biBQcm9ibGVtcyBhbmQgQnVnczwvdGl0bGU+CisKKzxwYXJhPgorVGhlcmUgYXJlIHNvbWUga25vd24gcHJvYmxlbXMgYW5kIGJ1Z3MuIElmIHlvdSBmaW5kIGFueSBvdGhlciBidWdzIHBsZWFzZSAKK21haWwgdG8gPHVsaW5rIHVybD0ibWFpbHRvOmxjY2hhbmdAc2lzLmNvbS50dyI+bGNjaGFuZ0BzaXMuY29tLnR3PC91bGluaz4KKworPG9yZGVyZWRsaXN0PgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0FNNzlDOTAxIEhvbWVQTkEgUEhZIGlzIG5vdCB0aG9yb3VnaGx5IHRlc3RlZCwgdGhlcmUgbWF5IGJlIHNvbWUgCitidWdzIGluIHRoZSA8cXVvdGU+b24gdGhlIGZseTwvcXVvdGU+IGNoYW5nZSBvZiB0cmFuc2NlaXZlci4gCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK0EgYnVnIGlzIGhpZGRlbiBzb21ld2hlcmUgaW4gdGhlIHJlY2VpdmUgYnVmZmVyIG1hbmFnZW1lbnQgY29kZSwgCit0aGUgYnVnIGNhdXNlcyBOVUxMIHBvaW50ZXIgcmVmZXJlbmNlIGluIHRoZSBrZXJuZWwuIFRoaXMgZmF1bHQgaXMgCitjYXVnaHQgYmVmb3JlIGJhZCB0aGluZ3MgaGFwcGVuIGFuZCByZXBvcnRlZCB3aXRoIHRoZSBtZXNzYWdlOgorCis8Y29tcHV0ZXJvdXRwdXQ+CitldGgwOiBOVUxMIHBvaW50ZXIgZW5jb3VudGVyZWQgaW4gUnggcmluZywgc2tpcHBpbmcgCis8L2NvbXB1dGVyb3V0cHV0PgorCit3aGljaCBjYW4gYmUgdmlld2VkIHdpdGggPGxpdGVyYWwgcmVtYXA9InR0Ij5kbWVzZzwvbGl0ZXJhbD4gb3IKKzxsaXRlcmFsIHJlbWFwPSJ0dCI+Y2F0IC92YXIvbG9nL21lc3NhZ2U8L2xpdGVyYWw+LgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitUaGUgbWVkaWEgdHlwZSBjaGFuZ2UgZnJvbSAxME1icHMgdG8gMTAwTWJwcyB0d2lzdGVkLXBhaXIgZXRoZXJuZXQgCitieSBpZmNvbmZpZyBjYXVzZXMgdGhlIG1lZGlhIGxpbmsgZG93bi4KKzwvcGFyYT4KKzwvbGlzdGl0ZW0+CisKKzwvb3JkZXJlZGxpc3Q+Cis8L3BhcmE+Cis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJSSGlzdG9yeSI+CisgPHRpdGxlPlJldmlzaW9uIEhpc3Rvcnk8L3RpdGxlPgorCis8cGFyYT4KKzxpdGVtaXplZGxpc3Q+CisKKzxsaXN0aXRlbT4KKzxwYXJhPgorTm92ZW1iZXIgMTMsIDIwMDAsIFJldmlzaW9uIDEuMDcsIHNldmVudGggcmVsZWFzZSwgNjMwRSBwcm9ibGVtIGZpeGVkIAorYW5kIGZ1cnRoZXIgY2xlYW4gdXAuCis8L3BhcmE+Cis8L2xpc3RpdGVtPgorCis8bGlzdGl0ZW0+Cis8cGFyYT4KK05vdmVtYmVyIDQsIDE5OTksIFJldmlzaW9uIDEuMDYsIFNlY29uZCByZWxlYXNlLCBsb3RzIG9mIGNsZWFuIHVwCithbmQgb3B0aW1pemF0aW9uLgorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorPHBhcmE+CitBdWd1c3QgOCwgMTk5OSwgUmV2aXNpb24gMS4wNSwgSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorPC9wYXJhPgorPC9saXN0aXRlbT4KKworPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+Cis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJhY2tub3dsZWRnZW1lbnRzIj4KKyA8dGl0bGU+QWNrbm93bGVkZ2VtZW50czwvdGl0bGU+CisKKzxwYXJhPgorVGhpcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgZGVyaXZlZCBmb3JtIAorPHVsaW5rIHVybD0ibWFpbHRvOmJlY2tlckBjZXNkaXMxLmdzZmMubmFzYS5nb3YiPkRvbmFsZCBCZWNrZXI8L3VsaW5rPidzCis8dWxpbmsgdXJsPSJmdHA6Ly9jZXNkaXMuZ3NmYy5uYXNhLmdvdi9wdWIvbGludXgvZHJpdmVycy9rZXJuLTIuMy9wY2ktc2tlbGV0b24uYyIKKz5wY2ktc2tlbGV0b248L3VsaW5rPiBhbmQKKzx1bGluayB1cmw9ImZ0cDovL2Nlc2Rpcy5nc2ZjLm5hc2EuZ292L3B1Yi9saW51eC9kcml2ZXJzL2tlcm4tMi4zL3J0bDgxMzkuYyIKKz5ydGw4MTM5PC91bGluaz4gZHJpdmVycy4gRG9uYWxkIGFsc28gcHJvdmlkZWQgdmFyaW91cyBzdWdnZXN0aW9uCityZWdhcmRlZCB3aXRoIGltcHJvdmVtZW50cyBtYWRlIGluIHJldmlzaW9uIDEuMDYuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIDEuMDUgcmV2aXNpb24gd2FzIGNyZWF0ZWQgYnkgCis8dWxpbmsgdXJsPSJtYWlsdG86Y21odWFuZ0BzaXMuY29tLnR3Ij5KaW0gSHVhbmc8L3VsaW5rPiwgQU1EIDc5YzkwMQorc3VwcG9ydCB3YXMgYWRkZWQgYnkgPHVsaW5rIHVybD0ibWFpbHRvOmxjc0BzaXMuY29tLnR3Ij5DaGluLVNoYW4gTGk8L3VsaW5rPi4KKzwvcGFyYT4KKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9ImZ1bmN0aW9ucyI+Cis8dGl0bGU+TGlzdCBvZiBGdW5jdGlvbnM8L3RpdGxlPgorIUlkcml2ZXJzL25ldC9zaXM5MDAuYworPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdHVsaXAtdXNlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIwZDdhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3R1bGlwLXVzZXIudG1wbApAQCAtMCwwICsxLDMyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJUdWxpcFVzZXJHdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VHVsaXAgRHJpdmVyIFVzZXIncyBHdWlkZTwvdGl0bGU+CisgIAorICA8YXV0aG9yZ3JvdXA+CisgICA8YXV0aG9yPgorICAgIDxmaXJzdG5hbWU+SmVmZjwvZmlyc3RuYW1lPgorICAgIDxzdXJuYW1lPkdhcnppazwvc3VybmFtZT4KKyAgICA8YWZmaWxpYXRpb24+CisgICAgIDxhZGRyZXNzPgorICAgICAgPGVtYWlsPmpnYXJ6aWtAcG9ib3guY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMTwveWVhcj4KKyAgIDxob2xkZXI+SmVmZiBHYXJ6aWs8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCisgPHRvYz48L3RvYz4KKworICA8Y2hhcHRlciBpZD0iaW50cm8iPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorPHBhcmE+CitUaGUgVHVsaXAgRXRoZXJuZXQgQ2FyZCBEcml2ZXIKK2lzIG1haW50YWluZWQgYnkgSmVmZiBHYXJ6aWsgKDxlbWFpbD5qZ2FyemlrQHBvYm94LmNvbTwvZW1haWw+KS4KKzwvcGFyYT4KKworPHBhcmE+CitUaGUgVHVsaXAgZHJpdmVyIHdhcyBkZXZlbG9wZWQgYnkgRG9uYWxkIEJlY2tlciBhbmQgY2hhbmdlZCBieQorSmVmZiBHYXJ6aWssIFRha2FzaGkgTWFuYWJlIGFuZCBhIGNhc3Qgb2YgdGhvdXNhbmRzLgorPC9wYXJhPgorCis8cGFyYT4KK0ZvciAyLjQueCBhbmQgbGF0ZXIga2VybmVscywgdGhlIExpbnV4IFR1bGlwIGRyaXZlciBpcyBhdmFpbGFibGUgYXQKKzx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvIj5odHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3R1bGlwLzwvdWxpbms+Cis8L3BhcmE+CisKKzxwYXJhPgorCVRoaXMgZHJpdmVyIGlzIGZvciB0aGUgRGlnaXRhbCAiVHVsaXAiIEV0aGVybmV0IGFkYXB0ZXIgaW50ZXJmYWNlLgorCUl0IHNob3VsZCB3b3JrIHdpdGggbW9zdCBERUMgMjEqNCotYmFzZWQgY2hpcHMvZXRoZXJjYXJkcywgYXMgd2VsbCBhcworCXdpdGggd29yay1hbGlrZSBjaGlwcyBmcm9tIExpdGUtT24gKFBOSUMpIGFuZCBNYWNyb25peCAoTVhJQykgYW5kIEFTSVguCis8L3BhcmE+CisKKzxwYXJhPgorICAgICAgICBUaGUgb3JpZ2luYWwgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIGJlY2tlckBzY3lsZC5jb20sIG9yIEMvTworICAgICAgICBTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24sCisgICAgICAgIDQxMCBTZXZlcm4gQXZlLiwgU3VpdGUgMjEwLAorICAgICAgICBBbm5hcG9saXMgTUQgMjE0MDMKKzwvcGFyYT4KKworPHBhcmE+CisJQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBEb25hbGQgQmVja2VyJ3MgdHVsaXAuYworCWlzIGF2YWlsYWJsZSBhdCA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3R1bGlwLmh0bWwiPmh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvdHVsaXAuaHRtbDwvdWxpbms+Cis8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkcnZyLWNvbXBhdCI+CisgICAgPHRpdGxlPkRyaXZlciBDb21wYXRpYmlsaXR5PC90aXRsZT4KKworPHBhcmE+CitUaGlzIGRldmljZSBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHRoZSBERUNjaGlwICJUdWxpcCIsIERpZ2l0YWwncworc2luZ2xlLWNoaXAgZXRoZXJuZXQgY29udHJvbGxlcnMgZm9yIFBDSSAobm93IG93bmVkIGJ5IEludGVsKS4KK1N1cHBvcnRlZCBtZW1iZXJzIG9mIHRoZSBmYW1pbHkKK2FyZSB0aGUgMjEwNDAsIDIxMDQxLCAyMTE0MCwgMjExNDBBLCAyMTE0MiwgYW5kIDIxMTQzLiAgU2ltaWxhciB3b3JrLWFsaWtlCitjaGlwcyBmcm9tIExpdGUtT24sIE1hY3JvbmljcywgQVNJWCwgQ29tcGV4IGFuZCBvdGhlciBsaXN0ZWQgYmVsb3cgYXJlIGFsc28KK3N1cHBvcnRlZC4KKzwvcGFyYT4KKworPHBhcmE+CitUaGVzZSBjaGlwcyBhcmUgdXNlZCBvbiBhdCBsZWFzdCAxNDAgdW5pcXVlIFBDSSBib2FyZCBkZXNpZ25zLiAgVGhlIGdyZWF0CitudW1iZXIgb2YgY2hpcHMgYW5kIGJvYXJkIGRlc2lnbnMgc3VwcG9ydGVkIGlzIHRoZSByZWFzb24gZm9yIHRoZQorZHJpdmVyIHNpemUgYW5kIGNvbXBsZXhpdHkuICBBbG1vc3Qgb2YgdGhlIGluY3JlYXNpbmcgY29tcGxleGl0eSBpcyBpbiB0aGUKK2JvYXJkIGNvbmZpZ3VyYXRpb24gYW5kIG1lZGlhIHNlbGVjdGlvbiBjb2RlLiAgVGhlcmUgaXMgdmVyeSBsaXR0bGUKK2luY3JlYXNpbmcgaW4gdGhlIG9wZXJhdGlvbmFsIGNyaXRpY2FsIHBhdGggbGVuZ3RoLgorPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImJvYXJkLXNldHRpbmdzIj4KKyAgICA8dGl0bGU+Qm9hcmQtc3BlY2lmaWMgU2V0dGluZ3M8L3RpdGxlPgorCis8cGFyYT4KK1BDSSBidXMgZGV2aWNlcyBhcmUgY29uZmlndXJlZCBieSB0aGUgc3lzdGVtIGF0IGJvb3QgdGltZSwgc28gbm8ganVtcGVycworbmVlZCB0byBiZSBzZXQgb24gdGhlIGJvYXJkLiAgVGhlIHN5c3RlbSBCSU9TIHByZWZlcmFibHkgc2hvdWxkIGFzc2lnbiB0aGUKK1BDSSBJTlRBIHNpZ25hbCB0byBhbiBvdGhlcndpc2UgdW51c2VkIHN5c3RlbSBJUlEgbGluZS4KKzwvcGFyYT4KKworPHBhcmE+CitTb21lIGJvYXJkcyBoYXZlIEVFUFJPTXMgdGFibGVzIHdpdGggZGVmYXVsdCBtZWRpYSBlbnRyeS4gIFRoZSBmYWN0b3J5IGRlZmF1bHQKK2lzIHVzdWFsbHkgImF1dG9zZWxlY3QiLiAgVGhpcyBzaG91bGQgb25seSBiZSBvdmVycmlkZGVuIHdoZW4gdXNpbmcKK3RyYW5zY2VpdmVyIGNvbm5lY3Rpb25zIHdpdGhvdXQgbGluayBiZWF0IGUuZy4gMTBiYXNlMiBvciBBVUksIG9yIChyYXJlbHkhKQorZm9yIGZvcmNpbmcgZnVsbC1kdXBsZXggd2hlbiB1c2VkIHdpdGggb2xkIGxpbmsgcGFydG5lcnMgdGhhdCBkbyBub3QgZG8KK2F1dG9uZWdvdGlhdGlvbi4KKzwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJkcml2ZXItb3BlcmF0aW9uIj4KKyAgICA8dGl0bGU+RHJpdmVyIE9wZXJhdGlvbjwvdGl0bGU+CisKKzxzZWN0MT48dGl0bGU+UmluZyBidWZmZXJzPC90aXRsZT4KKworPHBhcmE+CitUaGUgVHVsaXAgY2FuIHVzZSBlaXRoZXIgcmluZyBidWZmZXJzIG9yIGxpc3RzIG9mIFR4IGFuZCBSeCBkZXNjcmlwdG9ycy4KK1RoaXMgZHJpdmVyIHVzZXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgcmluZ3Mgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3JzLCBzZXQgYXQKK2NvbXBpbGUgdGltZSBieSBSWC9UWF9SSU5HX1NJWkUuICBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbGxvY2F0ZXMgc2tidWZmcworZm9yIHRoZSBSeCByaW5nIGJ1ZmZlcnMgYXQgb3BlbigpIHRpbWUgYW5kIHBhc3NlcyB0aGUgc2tiLT5kYXRhIGZpZWxkIHRvIHRoZQorVHVsaXAgYXMgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXaGVuIGFuIGluY29taW5nIGZyYW1lIGlzIGxlc3MgdGhhbgorUlhfQ09QWUJSRUFLIGJ5dGVzIGxvbmcsIGEgZnJlc2ggc2tidWZmIGlzIGFsbG9jYXRlZCBhbmQgdGhlIGZyYW1lIGlzCitjb3BpZWQgdG8gdGhlIG5ldyBza2J1ZmYuICBXaGVuIHRoZSBpbmNvbWluZyBmcmFtZSBpcyBsYXJnZXIsIHRoZSBza2J1ZmYgaXMKK3Bhc3NlZCBkaXJlY3RseSB1cCB0aGUgcHJvdG9jb2wgc3RhY2sgYW5kIHJlcGxhY2VkIGJ5IGEgbmV3bHkgYWxsb2NhdGVkCitza2J1ZmYuCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIFJYX0NPUFlCUkVBSyB2YWx1ZSBpcyBjaG9zZW4gdG8gdHJhZGUtb2ZmIHRoZSBtZW1vcnkgd2FzdGVkIGJ5Cit1c2luZyBhIGZ1bGwtc2l6ZWQgc2tidWZmIGZvciBzbWFsbCBmcmFtZXMgdnMuIHRoZSBjb3B5aW5nIGNvc3RzIG9mIGxhcmdlcgorZnJhbWVzLiAgRm9yIHNtYWxsIGZyYW1lcyB0aGUgY29weWluZyBjb3N0IGlzIG5lZ2xpZ2libGUgKGVzcC4gY29uc2lkZXJpbmcKK3RoYXQgd2UgYXJlIHByZS1sb2FkaW5nIHRoZSBjYWNoZSB3aXRoIGltbWVkaWF0ZWx5IHVzZWZ1bCBoZWFkZXIKK2luZm9ybWF0aW9uKS4gIEZvciBsYXJnZSBmcmFtZXMgdGhlIGNvcHlpbmcgY29zdCBpcyBub24tdHJpdmlhbCwgYW5kIHRoZQorbGFyZ2VyIGNvcHkgbWlnaHQgZmx1c2ggdGhlIGNhY2hlIG9mIHVzZWZ1bCBkYXRhLiAgQSBzdWJ0bGUgYXNwZWN0IG9mIHRoaXMKK2Nob2ljZSBpcyB0aGF0IHRoZSBUdWxpcCBvbmx5IHJlY2VpdmVzIGludG8gbG9uZ3dvcmQgYWxpZ25lZCBidWZmZXJzLCB0aHVzCit0aGUgSVAgaGVhZGVyIGF0IG9mZnNldCAxNCBpc24ndCBsb25nd29yZCBhbGlnbmVkIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCitDb3BpZWQgZnJhbWVzIGFyZSBwdXQgaW50byB0aGUgbmV3IHNrYnVmZiBhdCBhbiBvZmZzZXQgb2YgIisyIiwgdGh1cyBjb3B5aW5nCitoYXMgdGhlIGJlbmVmaWNpYWwgZWZmZWN0IG9mIGFsaWduaW5nIHRoZSBJUCBoZWFkZXIgYW5kIHByZWxvYWRpbmcgdGhlCitjYWNoZS4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxPjx0aXRsZT5TeW5jaHJvbml6YXRpb248L3RpdGxlPgorPHBhcmE+CitUaGUgZHJpdmVyIHJ1bnMgYXMgdHdvIGluZGVwZW5kZW50LCBzaW5nbGUtdGhyZWFkZWQgZmxvd3Mgb2YgY29udHJvbC4gIE9uZQoraXMgdGhlIHNlbmQtcGFja2V0IHJvdXRpbmUsIHdoaWNoIGVuZm9yY2VzIHNpbmdsZS10aHJlYWRlZCB1c2UgYnkgdGhlCitkZXYtPnRidXN5IGZsYWcuICBUaGUgb3RoZXIgdGhyZWFkIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2hpY2ggaXMgc2luZ2xlCit0aHJlYWRlZCBieSB0aGUgaGFyZHdhcmUgYW5kIG90aGVyIHNvZnR3YXJlLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBzZW5kIHBhY2tldCB0aHJlYWQgaGFzIHBhcnRpYWwgY29udHJvbCBvdmVyIHRoZSBUeCByaW5nIGFuZCAnZGV2LT50YnVzeScKK2ZsYWcuICBJdCBzZXRzIHRoZSB0YnVzeSBmbGFnIHdoZW5ldmVyIGl0J3MgcXVldWluZyBhIFR4IHBhY2tldC4gSWYgdGhlIG5leHQKK3F1ZXVlIHNsb3QgaXMgZW1wdHksIGl0IGNsZWFycyB0aGUgdGJ1c3kgZmxhZyB3aGVuIGZpbmlzaGVkIG90aGVyd2lzZSBpdCBzZXRzCit0aGUgJ3RwLT50eF9mdWxsJyBmbGFnLgorPC9wYXJhPgorCis8cGFyYT4KK1RoZSBpbnRlcnJ1cHQgaGFuZGxlciBoYXMgZXhjbHVzaXZlIGNvbnRyb2wgb3ZlciB0aGUgUnggcmluZyBhbmQgcmVjb3JkcyBzdGF0cworZnJvbSB0aGUgVHggcmluZy4gIChUaGUgVHgtZG9uZSBpbnRlcnJ1cHQgY2FuJ3QgYmUgc2VsZWN0aXZlbHkgdHVybmVkIG9mZiwgc28KK3dlIGNhbid0IGF2b2lkIHRoZSBpbnRlcnJ1cHQgb3ZlcmhlYWQgYnkgaGF2aW5nIHRoZSBUeCByb3V0aW5lIHJlYXAgdGhlIFR4CitzdGF0cy4pCSBBZnRlciByZWFwaW5nIHRoZSBzdGF0cywgaXQgbWFya3MgdGhlIHF1ZXVlIGVudHJ5IGFzIGVtcHR5IGJ5IHNldHRpbmcKK3RoZSAnYmFzZScgdG8gemVyby4JIElmZiB0aGUgJ3RwLT50eF9mdWxsJyBmbGFnIGlzIHNldCwgaXQgY2xlYXJzIGJvdGggdGhlCit0eF9mdWxsIGFuZCB0YnVzeSBmbGFncy4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImVycmF0YSI+CisgICAgPHRpdGxlPkVycmF0YTwvdGl0bGU+CisKKzxwYXJhPgorVGhlIG9sZCBERUMgZGF0YWJvb2tzIHdlcmUgbGlnaHQgb24gZGV0YWlscy4KK1RoZSAyMTA0MCBkYXRhYm9vayBjbGFpbXMgdGhhdCBDU1IxMywgQ1NSMTQsIGFuZCBDU1IxNSBzaG91bGQgZWFjaCBiZSB0aGUgbGFzdAorcmVnaXN0ZXIgb2YgdGhlIHNldCBDU1IxMi0xNSB3cml0dGVuLiAgSG1tbSwgbm93IGhvdyBpcyB0aGF0IHBvc3NpYmxlPworPC9wYXJhPgorCis8cGFyYT4KK1RoZSBERUMgU1JPTSBmb3JtYXQgaXMgdmVyeSBiYWRseSBkZXNpZ25lZCBub3QgcHJlY2lzZWx5IGRlZmluZWQsIGxlYWRpbmcgdG8KK3BhcnQgb2YgdGhlIG1lZGlhIHNlbGVjdGlvbiBqdW5raGVhcCBiZWxvdy4gIFNvbWUgYm9hcmRzIGRvIG5vdCBoYXZlIEVFUFJPTQorbWVkaWEgdGFibGVzIGFuZCBuZWVkIHRvIGJlIHBhdGNoZWQgdXAuICBXb3JzZSwgb3RoZXIgYm9hcmRzIHVzZSB0aGUgREVDCitkZXNpZ24ga2l0IG1lZGlhIHRhYmxlIHdoZW4gaXQgaXNuJ3QgY29ycmVjdCBmb3IgdGhlaXIgYm9hcmQuCis8L3BhcmE+CisKKzxwYXJhPgorV2UgY2Fubm90IHVzZSBNSUkgaW50ZXJydXB0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGRlZmluZWQgR1BJTyBwaW4gdG8gYXR0YWNoCit0aGVtLiAgVGhlIE1JSSB0cmFuc2NlaXZlciBzdGF0dXMgaXMgcG9sbGVkIHVzaW5nIGFuIGtlcm5lbCB0aW1lci4KKzwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJjaGFuZ2Vsb2ciPgorICAgIDx0aXRsZT5Ecml2ZXIgQ2hhbmdlIEhpc3Rvcnk8L3RpdGxlPgorCisgICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS4xNCAoRmVicnVhcnkgMjAsIDIwMDEpPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5GaXggUE5JQyBwcm9ibGVtcyAoTWFuZnJlZCBTcHJhdWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBuZXcgUENJIGlkIGZvciBBY2N0b24gY29tZXQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydCBEYXZpY29tIHR1bGlwczwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5GaXggb29wcyBpbiBlZXByb20gcGFyc2luZzwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgd29ya2Fyb3VuZHMgZm9yIGVhcmx5IFBDSSBjaGlwc2V0czwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5JQTY0LCBocHBhIGNzcjAgc3VwcG9ydDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5TdXBwb3J0IG1lZGlhIHR5cGVzIDUsIDY8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+SW50ZXJwcmV0IGEgYml0IG1vcmUgb2YgdGhlIDIxMTQyIFNST00gZXh0ZW5kZWQgbWVkaWEgdHlwZSAzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBtaXNzaW5nIGRlbGF5IGluIGVlcHJvbSByZWFkaW5nPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTEgKE5vdmVtYmVyIDMsIDIwMDApPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5FbGltaW5hdGUgZXh0cmEgYnVzIGFjY2Vzc2VzIHdoZW4gc2hhcmluZyBpbnRlcnJ1cHRzIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkJhcnJpZXIgZm9sbG93aW5nIG93bmVyc2hpcCBkZXNjcmlwdG9yIGJpdCBmbGlwIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkVuZGlhbm5lc3MgZml4ZXMgZm9yID4xNCBhZGRyZXNzZXMgaW4gc2V0dXAgZnJhbWVzIChwcnVtcGYpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlcG9ydCBsaW5rIGJlYXQgdG8ga2VybmVsL3VzZXJzcGFjZSB2aWEgbmV0aWZfY2Fycmllcl8qLiAoa3V6bmV0KTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5CZXR0ZXIgc3BpbmxvY2tpbmcgaW4gc2V0X3J4X21vZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkZpeCBJL08gcmVzb3VyY2UgcmVxdWVzdCBmYWlsdXJlIGVycm9yIG1lc3NhZ2VzIChEYXZlTSBjYXRjaCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+SGFuZGxlIERNQSBhbGxvY2F0aW9uIGZhaWx1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuMTAgKFNlcHRlbWJlciA2LCAyMDAwKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U2ltcGxlIGludGVycnVwdCBtaXRpZ2F0aW9uICh2aWEgamFtYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPk1vcmUgUENJIGlkczwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjkgKEF1Z3VzdCAxMSwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPk1vcmUgUENJIGlkczwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjggKEp1bHkgMTMsIDIwMDApPC90aXRsZT4KKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5Db3JyZWN0IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGZvciBkdW1teSBmcmFtZSBpbmRleDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgb3V0ZGF0ZWQgcmVmZXJlbmNlcyB0byBzdHJ1Y3QgZW5ldF9zdGF0aXN0aWNzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNyAoSnVuZSAxNywgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPlRpbWVyIGNsZWFudXBzIChBbmRyZXcgTW9ydG9uKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5BbHBoYSBjb21waWxlIGZpeCAoc29tZWJvZHk/KTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisKKyAgICA8c2VjdDE+PHRpdGxlPlZlcnNpb24gMC45LjYgKE1heSAzMSwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJldmVydCAyMTE0My1yZWxhdGVkIHN1cHBvcnQgZmxhZyBwYXRjaDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgSFBQQS9tZWRpYS10YWJsZSBkZWJ1Z2dpbmcgcHJpbnRrPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNSAoTWF5IDMwLCAyMDAwKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+SFBQQSBzdXBwb3J0ICh3aWxseUBwdWZmaW5ncm91cCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+Q1NSNiBiaXRzIGFuZCB0dWxpcC5oIGNsZWFudXAgKENocmlzIFNtaXRoKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5JbXByb3ZlIGRlYnVnZ2luZyBtZXNzYWdlcyBhIGJpdDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgZGVsYXkgYWZ0ZXIgQ1NSMTMgd3JpdGUgaW4gdDIxMTQyX3N0YXJ0X253YXk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIHVudXNlZCBFVEhFUl9TVEFUUyBjb2RlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnZlcnQgJ2V4dGVybiBpbmxpbmUnIHRvICdzdGF0aWMgaW5saW5lJyBpbiB0dWxpcC5oIChDaHJpcyBTbWl0aCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+VXBkYXRlIERTMjExNDMgc3VwcG9ydCBmbGFncyBpbiB0dWxpcF9jaGlwX2luZm9bXTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5Vc2Ugc3Bpbl9sb2NrX2lycSwgbm90IF9pcnFzYXZlL3Jlc3RvcmUsIGluIHR1bGlwX3N0YXJ0X3htaXQoKTwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgbG9ja2luZyB0byBzZXRfcnhfbW9kZSgpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkZpeCByYWNlIHdpdGggY2hpcCBzZXR0aW5nIERlc2NPd25lZCBiaXQgKEhhbCBNdXJyYXkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlcXVlc3QgMTAwJSBvZiBQSU8gYW5kIE1NSU8gcmVzb3VyY2Ugc3BhY2UgYXNzaWduZWQgdG8gY2FyZDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgZXJyb3IgbWVzc2FnZSBmcm9tIHBjaV9lbmFibGVfZGV2aWNlIGZhaWx1cmU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS40LjMgKEFwcmlsIDE0LCAyMDAwKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+bW9kX3RpbWVyIGZpeCAoSGFsIE11cnJheSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UE5JQzIgcmVzdXNjaXRhdGlvbiAoQ2hyaXMgU21pdGgpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0MT4KKworICAgIDxzZWN0MT48dGl0bGU+VmVyc2lvbiAwLjkuNC4yIChNYXJjaCAyMSwgMjAwMCk8L3RpdGxlPgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPjxwYXJhPkZpeCAyMTA0MSBDU1I3LCBDU1IxMy8xNC8xNSBoYW5kbGluZzwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5NZXJnZSBzb21lIFBDSSBpZHMgZnJvbSB0dWxpcCAwLjkxeDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5NZXJnZSBzb21lIEhBU194eHggZmxhZ3MgYW5kIGZsYWcgc2V0dGluZ3MgZnJvbSB0dWxpcCAwLjkxeDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5hc20vaW8uaCBmaXggKHN1Ym1pdHRlZCBieSBtYW55KSBhbmQgY2xlYW51cDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5zL0hBU19OV0FZMTQzL0hBU19OV0FZLzwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5DbGVhbnVwIDIxMDQxIG1vZGUgcmVwb3J0aW5nPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlNtYWxsIGNvZGUgY2xlYW51cHM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3NlY3QxPgorCisgICAgPHNlY3QxPjx0aXRsZT5WZXJzaW9uIDAuOS40LjEgKE1hcmNoIDE4LCAyMDAwKTwvdGl0bGU+CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIFBDSSBETUEgY29udmVyc2lvbiAoZGF2ZW0pPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCBuZXRpZl9zdGFydF9xdWV1ZSgpIGF0IGVuZCBvZiB0dWxpcF90eF90aW1lb3V0KCkgKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UENJIERNQSBmaXggKGt1em5ldCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+ZWVwcm9tLmMgY29kZSBjbGVhbnVwPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlbW92ZSBYaXJjb20gVHVsaXAgY3J1ZDwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZWYwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKQEAgLTAsMCArMSw5NzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iTGludXgtVVNCLUFQSSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+VGhlIExpbnV4LVVTQiBIb3N0IFNpZGUgQVBJPC90aXRsZT4KKyAgCisgIDxsZWdhbG5vdGljZT4KKyAgIDxwYXJhPgorICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKKyAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgICB2ZXJzaW9uLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQorICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCisgICA8L3BhcmE+CisgIDwvbGVnYWxub3RpY2U+CisgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uIHRvIFVTQiBvbiBMaW51eDwvdGl0bGU+CisKKyAgICA8cGFyYT5BIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIGlzIHVzZWQgdG8gY29ubmVjdCBhIGhvc3QsCisgICAgc3VjaCBhcyBhIFBDIG9yIHdvcmtzdGF0aW9uLCB0byBhIG51bWJlciBvZiBwZXJpcGhlcmFsCisgICAgZGV2aWNlcy4gIFVTQiB1c2VzIGEgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggdGhlIGhvc3QgYXQgdGhlCisgICAgcm9vdCAodGhlIHN5c3RlbSdzIG1hc3RlciksIGh1YnMgYXMgaW50ZXJpb3Igbm9kZXMsIGFuZAorICAgIHBlcmlwaGVyYWwgZGV2aWNlcyBhcyBsZWF2ZXMgKGFuZCBzbGF2ZXMpLgorICAgIE1vZGVybiBQQ3Mgc3VwcG9ydCBzZXZlcmFsIHN1Y2ggdHJlZXMgb2YgVVNCIGRldmljZXMsIHVzdWFsbHkKKyAgICBvbmUgVVNCIDIuMCB0cmVlICg0ODAgTWJpdC9zZWMgZWFjaCkgd2l0aAorICAgIGEgZmV3IFVTQiAxLjEgdHJlZXMgKDEyIE1iaXQvc2VjIGVhY2gpIHRoYXQgYXJlIHVzZWQgd2hlbiB5b3UKKyAgICBjb25uZWN0IGEgVVNCIDEuMSBkZXZpY2UgZGlyZWN0bHkgdG8gdGhlIG1hY2hpbmUncyAicm9vdCBodWIiLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPlRoYXQgbWFzdGVyL3NsYXZlIGFzeW1tZXRyeSB3YXMgZGVzaWduZWQgaW4gcGFydCBmb3IKKyAgICBlYXNlIG9mIHVzZS4gIEl0IGlzIG5vdCBwaHlzaWNhbGx5IHBvc3NpYmxlIHRvIGFzc2VtYmxlCisgICAgKGxlZ2FsKSBVU0IgY2FibGVzIGluY29ycmVjdGx5OiAgYWxsIHVwc3RyZWFtICJ0by10aGUtaG9zdCIKKyAgICBjb25uZWN0b3JzIGFyZSB0aGUgcmVjdGFuZ3VsYXIgdHlwZSwgbWF0Y2hpbmcgdGhlIHNvY2tldHMgb24KKyAgICByb290IGh1YnMsIGFuZCB0aGUgZG93bnN0cmVhbSB0eXBlIGFyZSB0aGUgc3F1YXJpc2ggdHlwZQorICAgIChvciB0aGV5IGFyZSBidWlsdCBpbiB0byB0aGUgcGVyaXBoZXJhbCkuCisgICAgU29mdHdhcmUgZG9lc24ndCBuZWVkIHRvIGRlYWwgd2l0aCBkaXN0cmlidXRlZCBhdXRvY29uZmlndXJhdGlvbgorICAgIHNpbmNlIHRoZSBwcmUtZGVzaWduYXRlZCBtYXN0ZXIgbm9kZSBtYW5hZ2VzIGFsbCB0aGF0LgorICAgIEF0IHRoZSBlbGVjdHJpY2FsIGxldmVsLCBidXMgcHJvdG9jb2wgb3ZlcmhlYWQgaXMgcmVkdWNlZCBieQorICAgIGVsaW1pbmF0aW5nIGFyYml0cmF0aW9uIGFuZCBtb3Zpbmcgc2NoZWR1bGluZyBpbnRvIGhvc3Qgc29mdHdhcmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+VVNCIDEuMCB3YXMgYW5ub3VuY2VkIGluIEphbnVhcnkgMTk5NiwgYW5kIHdhcyByZXZpc2VkCisgICAgYXMgVVNCIDEuMSAod2l0aCBpbXByb3ZlbWVudHMgaW4gaHViIHNwZWNpZmljYXRpb24gYW5kCisgICAgc3VwcG9ydCBmb3IgaW50ZXJydXB0LW91dCB0cmFuc2ZlcnMpIGluIFNlcHRlbWJlciAxOTk4LgorICAgIFVTQiAyLjAgd2FzIHJlbGVhc2VkIGluIEFwcmlsIDIwMDAsIGluY2x1ZGluZyBoaWdoIHNwZWVkCisgICAgdHJhbnNmZXJzIGFuZCB0cmFuc2FjdGlvbiB0cmFuc2xhdGluZyBodWJzICh1c2VkIGZvciBVU0IgMS4xCisgICAgYW5kIDEuMCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT5VU0Igc3VwcG9ydCB3YXMgYWRkZWQgdG8gTGludXggZWFybHkgaW4gdGhlIDIuMiBrZXJuZWwgc2VyaWVzCisgICAgc2hvcnRseSBiZWZvcmUgdGhlIDIuMyBkZXZlbG9wbWVudCBmb3JrZWQgb2ZmLiAgVXBkYXRlcworICAgIGZyb20gMi4zIHdlcmUgcmVndWxhcmx5IGZvbGRlZCBiYWNrIGludG8gMi4yIHJlbGVhc2VzLCBicmluZ2luZworICAgIG5ldyBmZWF0dXJlcyBzdWNoIGFzIDxmaWxlbmFtZT4vc2Jpbi9ob3RwbHVnPC9maWxlbmFtZT4gc3VwcG9ydCwKKyAgICBtb3JlIGRyaXZlcnMsIGFuZCBtb3JlIHJvYnVzdG5lc3MuCisgICAgVGhlIDIuNSBrZXJuZWwgc2VyaWVzIGNvbnRpbnVlZCBzdWNoIGltcHJvdmVtZW50cywgYW5kIGFsc28KKyAgICB3b3JrZWQgb24gVVNCIDIuMCBzdXBwb3J0LAorICAgIGhpZ2hlciBwZXJmb3JtYW5jZSwKKyAgICBiZXR0ZXIgY29uc2lzdGVuY3kgYmV0d2VlbiBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywKKyAgICBBUEkgc2ltcGxpZmljYXRpb24gKHRvIG1ha2UgYnVncyBsZXNzIGxpa2VseSksCisgICAgYW5kIHByb3ZpZGluZyBpbnRlcm5hbCAia2VybmVsZG9jIiBkb2N1bWVudGF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPkxpbnV4IGNhbiBydW4gaW5zaWRlIFVTQiBkZXZpY2VzIGFzIHdlbGwgYXMgb24KKyAgICB0aGUgaG9zdHMgdGhhdCBjb250cm9sIHRoZSBkZXZpY2VzLgorICAgIEJlY2F1c2UgdGhlIExpbnV4IDIueCBVU0Igc3VwcG9ydCBldm9sdmVkIHRvIHN1cHBvcnQgbWFzcyBtYXJrZXQKKyAgICBwbGF0Zm9ybXMgc3VjaCBhcyBBcHBsZSBNYWNpbnRvc2ggb3IgUEMtY29tcGF0aWJsZSBzeXN0ZW1zLAorICAgIGl0IGRpZG4ndCBhZGRyZXNzIGRlc2lnbiBjb25jZXJucyBmb3IgdGhvc2UgdHlwZXMgb2YgVVNCIHN5c3RlbXMuCisgICAgU28gaXQgY2FuJ3QgYmUgdXNlZCBpbnNpZGUgbWFzcy1tYXJrZXQgUERBcywgb3Igb3RoZXIgcGVyaXBoZXJhbHMuCisgICAgVVNCIGRldmljZSBkcml2ZXJzIHJ1bm5pbmcgaW5zaWRlIHRob3NlIExpbnV4IHBlcmlwaGVyYWxzCisgICAgZG9uJ3QgZG8gdGhlIHNhbWUgdGhpbmdzIGFzIHRoZSBvbmVzIHJ1bm5pbmcgaW5zaWRlIGhvc3RzLAorICAgIGFuZCBzbyB0aGV5J3ZlIGJlZW4gZ2l2ZW4gYSBkaWZmZXJlbnQgbmFtZToKKyAgICB0aGV5J3JlIGNhbGxlZCA8ZW1waGFzaXM+Z2FkZ2V0IGRyaXZlcnM8L2VtcGhhc2lzPi4KKyAgICBUaGlzIGRvY3VtZW50IGRvZXMgbm90IHByZXNlbnQgZ2FkZ2V0IGRyaXZlcnMuCisgICAgPC9wYXJhPgorCisgICAgPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0iaG9zdCI+CisgICAgPHRpdGxlPlVTQiBIb3N0LVNpZGUgQVBJIE1vZGVsPC90aXRsZT4KKworICAgIDxwYXJhPldpdGhpbiB0aGUga2VybmVsLAorICAgIGhvc3Qtc2lkZSBkcml2ZXJzIGZvciBVU0IgZGV2aWNlcyB0YWxrIHRvIHRoZSAidXNiY29yZSIgQVBJcy4KKyAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIHB1YmxpYyAidXNiY29yZSIgQVBJcywgdGFyZ2V0dGVkIGF0IHR3byBkaWZmZXJlbnQKKyAgICBsYXllcnMgb2YgVVNCIGRyaXZlci4gIFRob3NlIGFyZQorICAgIDxlbXBoYXNpcz5nZW5lcmFsIHB1cnBvc2U8L2VtcGhhc2lzPiBkcml2ZXJzLCBleHBvc2VkIHRocm91Z2gKKyAgICBkcml2ZXIgZnJhbWV3b3JrcyBzdWNoIGFzIGJsb2NrLCBjaGFyYWN0ZXIsIG9yIG5ldHdvcmsgZGV2aWNlczsKKyAgICBhbmQgZHJpdmVycyB0aGF0IGFyZSA8ZW1waGFzaXM+cGFydCBvZiB0aGUgY29yZTwvZW1waGFzaXM+LAorICAgIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiBtYW5hZ2luZyBhIFVTQiBidXMuCisgICAgU3VjaCBjb3JlIGRyaXZlcnMgaW5jbHVkZSB0aGUgPGVtcGhhc2lzPmh1YjwvZW1waGFzaXM+IGRyaXZlciwKKyAgICB3aGljaCBtYW5hZ2VzIHRyZWVzIG9mIFVTQiBkZXZpY2VzLCBhbmQgc2V2ZXJhbCBkaWZmZXJlbnQga2luZHMKKyAgICBvZiA8ZW1waGFzaXM+aG9zdCBjb250cm9sbGVyIGRyaXZlciAoSENEKTwvZW1waGFzaXM+LAorICAgIHdoaWNoIGNvbnRyb2wgaW5kaXZpZHVhbCBidXNzZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+VGhlIGRldmljZSBtb2RlbCBzZWVuIGJ5IFVTQiBkcml2ZXJzIGlzIHJlbGF0aXZlbHkgY29tcGxleC4KKyAgICA8L3BhcmE+CisgICAgIAorICAgIDxpdGVtaXplZGxpc3Q+CisKKwk8bGlzdGl0ZW0+PHBhcmE+VVNCIHN1cHBvcnRzIGZvdXIga2luZHMgb2YgZGF0YSB0cmFuc2ZlcgorCShjb250cm9sLCBidWxrLCBpbnRlcnJ1cHQsIGFuZCBpc29jaHJvbm91cykuICBUd28gdHJhbnNmZXIKKwl0eXBlcyB1c2UgYmFuZHdpZHRoIGFzIGl0J3MgYXZhaWxhYmxlIChjb250cm9sIGFuZCBidWxrKSwKKwl3aGlsZSB0aGUgb3RoZXIgdHdvIHR5cGVzIG9mIHRyYW5zZmVyIChpbnRlcnJ1cHQgYW5kIGlzb2Nocm9ub3VzKQorCWFyZSBzY2hlZHVsZWQgdG8gcHJvdmlkZSBndWFyYW50ZWVkIGJhbmR3aWR0aC4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT48cGFyYT5UaGUgZGV2aWNlIGRlc2NyaXB0aW9uIG1vZGVsIGluY2x1ZGVzIG9uZSBvciBtb3JlCisJImNvbmZpZ3VyYXRpb25zIiBwZXIgZGV2aWNlLCBvbmx5IG9uZSBvZiB3aGljaCBpcyBhY3RpdmUgYXQgYSB0aW1lLgorCURldmljZXMgdGhhdCBhcmUgY2FwYWJsZSBvZiBoaWdoIHNwZWVkIG9wZXJhdGlvbiBtdXN0IGFsc28gc3VwcG9ydAorCWZ1bGwgc3BlZWQgY29uZmlndXJhdGlvbnMsIGFsb25nIHdpdGggYSB3YXkgdG8gYXNrIGFib3V0IHRoZQorCSJvdGhlciBzcGVlZCIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSB1c2VkLgorCTwvcGFyYT48L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyYXRpb25zIGhhdmUgb25lIG9yIG1vcmUgImludGVyZmFjZSIsIGVhY2gKKwlvZiB3aGljaCBtYXkgaGF2ZSAiYWx0ZXJuYXRlIHNldHRpbmdzIi4gIEludGVyZmFjZXMgbWF5IGJlCisJc3RhbmRhcmRpemVkIGJ5IFVTQiAiQ2xhc3MiIHNwZWNpZmljYXRpb25zLCBvciBtYXkgYmUgc3BlY2lmaWMgdG8KKwlhIHZlbmRvciBvciBkZXZpY2UuPC9wYXJhPgorCisJPHBhcmE+VVNCIGRldmljZSBkcml2ZXJzIGFjdHVhbGx5IGJpbmQgdG8gaW50ZXJmYWNlcywgbm90IGRldmljZXMuCisJVGhpbmsgb2YgdGhlbSBhcyAiaW50ZXJmYWNlIGRyaXZlcnMiLCB0aG91Z2ggeW91CisJbWF5IG5vdCBzZWUgbWFueSBkZXZpY2VzIHdoZXJlIHRoZSBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQuCisJPGVtcGhhc2lzPk1vc3QgVVNCIGRldmljZXMgYXJlIHNpbXBsZSwgd2l0aCBvbmx5IG9uZSBjb25maWd1cmF0aW9uLAorCW9uZSBpbnRlcmZhY2UsIGFuZCBvbmUgYWx0ZXJuYXRlIHNldHRpbmcuPC9lbXBoYXNpcz4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT48cGFyYT5JbnRlcmZhY2VzIGhhdmUgb25lIG9yIG1vcmUgImVuZHBvaW50cyIsIGVhY2ggb2YKKwl3aGljaCBzdXBwb3J0cyBvbmUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGRhdGEgdHJhbnNmZXIgc3VjaCBhcworCSJidWxrIG91dCIgb3IgImludGVycnVwdCBpbiIuICBUaGUgZW50aXJlIGNvbmZpZ3VyYXRpb24gbWF5IGhhdmUKKwl1cCB0byBzaXh0ZWVuIGVuZHBvaW50cyBpbiBlYWNoIGRpcmVjdGlvbiwgYWxsb2NhdGVkIGFzIG5lZWRlZAorCWFtb25nIGFsbCB0aGUgaW50ZXJmYWNlcy4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT48cGFyYT5EYXRhIHRyYW5zZmVyIG9uIFVTQiBpcyBwYWNrZXRpemVkOyBlYWNoIGVuZHBvaW50CisJaGFzIGEgbWF4aW11bSBwYWNrZXQgc2l6ZS4KKwlEcml2ZXJzIG11c3Qgb2Z0ZW4gYmUgYXdhcmUgb2YgY29udmVudGlvbnMgc3VjaCBhcyBmbGFnZ2luZyB0aGUgZW5kCisJb2YgYnVsayB0cmFuc2ZlcnMgdXNpbmcgInNob3J0IiAoaW5jbHVkaW5nIHplcm8gbGVuZ3RoKSBwYWNrZXRzLgorCTwvcGFyYT48L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPjxwYXJhPlRoZSBMaW51eCBVU0IgQVBJIHN1cHBvcnRzIHN5bmNocm9ub3VzIGNhbGxzIGZvcgorCWNvbnRyb2wgYW5kIGJ1bGsgbWVzc2FnaW5nLgorCUl0IGFsc28gc3VwcG9ydHMgYXN5bmNobm91cyBjYWxscyBmb3IgYWxsIGtpbmRzIG9mIGRhdGEgdHJhbnNmZXIsCisJdXNpbmcgcmVxdWVzdCBzdHJ1Y3R1cmVzIGNhbGxlZCAiVVJCcyIgKFVTQiBSZXF1ZXN0IEJsb2NrcykuCisJPC9wYXJhPjwvbGlzdGl0ZW0+CisKKyAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgIDxwYXJhPkFjY29yZGluZ2x5LCB0aGUgVVNCIENvcmUgQVBJIGV4cG9zZWQgdG8gZGV2aWNlIGRyaXZlcnMKKyAgICBjb3ZlcnMgcXVpdGUgYSBsb3Qgb2YgdGVycml0b3J5LiAgWW91J2xsIHByb2JhYmx5IG5lZWQgdG8gY29uc3VsdAorICAgIHRoZSBVU0IgMi4wIHNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBvbmxpbmUgZnJvbSB3d3cudXNiLm9yZyBhdAorICAgIG5vIGNvc3QsIGFzIHdlbGwgYXMgY2xhc3Mgb3IgZGV2aWNlIHNwZWNpZmljYXRpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPlRoZSBvbmx5IGhvc3Qtc2lkZSBkcml2ZXJzIHRoYXQgYWN0dWFsbHkgdG91Y2ggaGFyZHdhcmUKKyAgICAocmVhZGluZy93cml0aW5nIHJlZ2lzdGVycywgaGFuZGxpbmcgSVJRcywgYW5kIHNvIG9uKSBhcmUgdGhlIEhDRHMuCisgICAgSW4gdGhlb3J5LCBhbGwgSENEcyBwcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCB0aGUgc2FtZQorICAgIEFQSS4gIEluIHByYWN0aWNlLCB0aGF0J3MgYmVjb21pbmcgbW9yZSB0cnVlIG9uIHRoZSAyLjUga2VybmVscywKKyAgICBidXQgdGhlcmUgYXJlIHN0aWxsIGRpZmZlcmVuY2VzIHRoYXQgY3JvcCB1cCBlc3BlY2lhbGx5IHdpdGgKKyAgICBmYXVsdCBoYW5kbGluZy4gIERpZmZlcmVudCBjb250cm9sbGVycyBkb24ndCBuZWNlc3NhcmlseSByZXBvcnQKKyAgICB0aGUgc2FtZSBhc3BlY3RzIG9mIGZhaWx1cmVzLCBhbmQgcmVjb3ZlcnkgZnJvbSBmYXVsdHMgKGluY2x1ZGluZworICAgIHNvZnR3YXJlLWluZHVjZWQgb25lcyBsaWtlIHVubGlua2luZyBhbiBVUkIpIGlzbid0IHlldCBmdWxseQorICAgIGNvbnNpc3RlbnQuCisgICAgRGV2aWNlIGRyaXZlciBhdXRob3JzIHNob3VsZCBtYWtlIGEgcG9pbnQgb2YgZG9pbmcgZGlzY29ubmVjdAorICAgIHRlc3RpbmcgKHdoaWxlIHRoZSBkZXZpY2UgaXMgYWN0aXZlKSB3aXRoIGVhY2ggZGlmZmVyZW50IGhvc3QKKyAgICBjb250cm9sbGVyIGRyaXZlciwgdG8gbWFrZSBzdXJlIGRyaXZlcnMgZG9uJ3QgaGF2ZSBidWdzIG9mCisgICAgdGhlaXIgb3duIGFzIHdlbGwgYXMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlbid0IHJlbHlpbmcgb24gc29tZQorICAgIEhDRC1zcGVjaWZpYyBiZWhhdmlvci4KKyAgICAoWW91IHdpbGwgbmVlZCBleHRlcm5hbCBVU0IgMS4xIGFuZC9vcgorICAgIFVTQiAyLjAgaHVicyB0byBwZXJmb3JtIGFsbCB0aG9zZSB0ZXN0cy4pCisgICAgPC9wYXJhPgorCisgICAgPC9jaGFwdGVyPgorCis8Y2hhcHRlcj48dGl0bGU+VVNCLVN0YW5kYXJkIFR5cGVzPC90aXRsZT4KKworICAgIDxwYXJhPkluIDxmaWxlbmFtZT4mbHQ7bGludXgvdXNiX2NoOS5oJmd0OzwvZmlsZW5hbWU+IHlvdSB3aWxsIGZpbmQKKyAgICB0aGUgVVNCIGRhdGEgdHlwZXMgZGVmaW5lZCBpbiBjaGFwdGVyIDkgb2YgdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICAgIFRoZXNlIGRhdGEgdHlwZXMgYXJlIHVzZWQgdGhyb3VnaG91dCBVU0IsIGFuZCBpbiBBUElzIGluY2x1ZGluZworICAgIHRoaXMgaG9zdCBzaWRlIEFQSSwgZ2FkZ2V0IEFQSXMsIGFuZCB1c2Jmcy4KKyAgICA8L3BhcmE+CisKKyFJaW5jbHVkZS9saW51eC91c2JfY2g5LmgKKworICAgIDwvY2hhcHRlcj4KKworPGNoYXB0ZXI+PHRpdGxlPkhvc3QtU2lkZSBEYXRhIFR5cGVzIGFuZCBNYWNyb3M8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIGhvc3Qgc2lkZSBBUEkgZXhwb3NlcyBzZXZlcmFsIGxheWVycyB0byBkcml2ZXJzLCBzb21lIG9mCisgICAgd2hpY2ggYXJlIG1vcmUgbmVjZXNzYXJ5IHRoYW4gb3RoZXJzLgorICAgIFRoZXNlIHN1cHBvcnQgbGlmZWN5Y2xlIG1vZGVscyBmb3IgaG9zdCBzaWRlIGRyaXZlcnMKKyAgICBhbmQgZGV2aWNlcywgYW5kIHN1cHBvcnQgcGFzc2luZyBidWZmZXJzIHRocm91Z2ggdXNiY29yZSB0bworICAgIHNvbWUgSENEIHRoYXQgcGVyZm9ybXMgdGhlIEkvTyBmb3IgdGhlIGRldmljZSBkcml2ZXIuCisgICAgPC9wYXJhPgorCisKKyFJaW5jbHVkZS9saW51eC91c2IuaAorCisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXI+PHRpdGxlPlVTQiBDb3JlIEFQSXM8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlcmUgYXJlIHR3byBiYXNpYyBJL08gbW9kZWxzIGluIHRoZSBVU0IgQVBJLgorICAgIFRoZSBtb3N0IGVsZW1lbnRhbCBvbmUgaXMgYXN5bmNocm9ub3VzOiAgZHJpdmVycyBzdWJtaXQgcmVxdWVzdHMKKyAgICBpbiB0aGUgZm9ybSBvZiBhbiBVUkIsIGFuZCB0aGUgVVJCJ3MgY29tcGxldGlvbiBjYWxsYmFjaworICAgIGhhbmRsZSB0aGUgbmV4dCBzdGVwLgorICAgIEFsbCBVU0IgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydCB0aGF0IG1vZGVsLCBhbHRob3VnaCB0aGVyZQorICAgIGFyZSBzcGVjaWFsIGNhc2VzIGZvciBjb250cm9sIFVSQnMgKHdoaWNoIGFsd2F5cyBoYXZlIHNldHVwCisgICAgYW5kIHN0YXR1cyBzdGFnZXMsIGJ1dCBtYXkgbm90IGhhdmUgYSBkYXRhIHN0YWdlKSBhbmQKKyAgICBpc29jaHJvbm91cyBVUkJzICh3aGljaCBhbGxvdyBsYXJnZSBwYWNrZXRzIGFuZCBpbmNsdWRlCisgICAgcGVyLXBhY2tldCBmYXVsdCByZXBvcnRzKS4KKyAgICBCdWlsdCBvbiB0b3Agb2YgdGhhdCBpcyBzeW5jaHJvbm91cyBBUEkgc3VwcG9ydCwgd2hlcmUgYQorICAgIGRyaXZlciBjYWxscyBhIHJvdXRpbmUgdGhhdCBhbGxvY2F0ZXMgb25lIG9yIG1vcmUgVVJCcywKKyAgICBzdWJtaXRzIHRoZW0sIGFuZCB3YWl0cyB1bnRpbCB0aGV5IGNvbXBsZXRlLgorICAgIFRoZXJlIGFyZSBzeW5jaHJvbm91cyB3cmFwcGVycyBmb3Igc2luZ2xlLWJ1ZmZlciBjb250cm9sCisgICAgYW5kIGJ1bGsgdHJhbnNmZXJzICh3aGljaCBhcmUgYXdrd2FyZCB0byB1c2UgaW4gc29tZQorICAgIGRyaXZlciBkaXNjb25uZWN0IHNjZW5hcmlvcyksIGFuZCBmb3Igc2NhdHRlcmxpc3QgYmFzZWQKKyAgICBzdHJlYW1pbmcgaS9vIChidWxrIG9yIGludGVycnVwdCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+VVNCIGRyaXZlcnMgbmVlZCB0byBwcm92aWRlIGJ1ZmZlcnMgdGhhdCBjYW4gYmUKKyAgICB1c2VkIGZvciBETUEsIGFsdGhvdWdoIHRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgbmVlZCB0bworICAgIHByb3ZpZGUgdGhlIERNQSBtYXBwaW5nIHRoZW1zZWx2ZXMuCisgICAgVGhlcmUgYXJlIEFQSXMgdG8gdXNlIHVzZWQgd2hlbiBhbGxvY2F0aW5nIERNQSBidWZmZXJzLAorICAgIHdoaWNoIGNhbiBwcmV2ZW50IHVzZSBvZiBib3VuY2UgYnVmZmVycyBvbiBzb21lIHN5c3RlbXMuCisgICAgSW4gc29tZSBjYXNlcywgZHJpdmVycyBtYXkgYmUgYWJsZSB0byByZWx5IG9uIDY0Yml0IERNQQorICAgIHRvIGVsaW1pbmF0ZSBhbm90aGVyIGtpbmQgb2YgYm91bmNlIGJ1ZmZlci4KKyAgICA8L3BhcmE+CisKKyFFZHJpdmVycy91c2IvY29yZS91cmIuYworIUVkcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworIUVkcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYworIUVkcml2ZXJzL3VzYi9jb3JlL3VzYi5jCishRWRyaXZlcnMvdXNiL2NvcmUvaHViLmMKKyAgICA8L2NoYXB0ZXI+CisKKyAgICA8Y2hhcHRlcj48dGl0bGU+SG9zdCBDb250cm9sbGVyIEFQSXM8L3RpdGxlPgorCisgICAgPHBhcmE+VGhlc2UgQVBJcyBhcmUgb25seSBmb3IgdXNlIGJ5IGhvc3QgY29udHJvbGxlciBkcml2ZXJzLAorICAgIG1vc3Qgb2Ygd2hpY2ggaW1wbGVtZW50IHN0YW5kYXJkIHJlZ2lzdGVyIGludGVyZmFjZXMgc3VjaCBhcworICAgIEVIQ0ksIE9IQ0ksIG9yIFVIQ0kuCisgICAgVUhDSSB3YXMgb25lIG9mIHRoZSBmaXJzdCBpbnRlcmZhY2VzLCBkZXNpZ25lZCBieSBJbnRlbCBhbmQKKyAgICBhbHNvIHVzZWQgYnkgVklBOyBpdCBkb2Vzbid0IGRvIG11Y2ggaW4gaGFyZHdhcmUuCisgICAgT0hDSSB3YXMgZGVzaWduZWQgbGF0ZXIsIHRvIGhhdmUgdGhlIGhhcmR3YXJlIGRvIG1vcmUgd29yaworICAgIChiaWdnZXIgdHJhbnNmZXJzLCB0cmFja2luZyBwcm90b2NvbCBzdGF0ZSwgYW5kIHNvIG9uKS4KKyAgICBFSENJIHdhcyBkZXNpZ25lZCB3aXRoIFVTQiAyLjA7IGl0cyBkZXNpZ24gaGFzIGZlYXR1cmVzIHRoYXQKKyAgICByZXNlbWJsZSBPSENJIChoYXJkd2FyZSBkb2VzIG11Y2ggbW9yZSB3b3JrKSBhcyB3ZWxsIGFzCisgICAgVUhDSSAoc29tZSBwYXJ0cyBvZiBJU08gc3VwcG9ydCwgVEQgbGlzdCBwcm9jZXNzaW5nKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT5UaGVyZSBhcmUgaG9zdCBjb250cm9sbGVycyBvdGhlciB0aGFuIHRoZSAiYmlnIHRocmVlIiwKKyAgICBhbHRob3VnaCBtb3N0IFBDSSBiYXNlZCBjb250cm9sbGVycyAoYW5kIGEgZmV3IG5vbi1QQ0kgYmFzZWQKKyAgICBvbmVzKSB1c2Ugb25lIG9mIHRob3NlIGludGVyZmFjZXMuCisgICAgTm90IGFsbCBob3N0IGNvbnRyb2xsZXJzIHVzZSBETUE7IHNvbWUgdXNlIFBJTywgYW5kIHRoZXJlCisgICAgaXMgYWxzbyBhIHNpbXVsYXRvci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT5UaGUgc2FtZSBiYXNpYyBBUElzIGFyZSBhdmFpbGFibGUgdG8gZHJpdmVycyBmb3IgYWxsCisgICAgdGhvc2UgY29udHJvbGxlcnMuICAKKyAgICBGb3IgaGlzdG9yaWNhbCByZWFzb25zIHRoZXkgYXJlIGluIHR3byBsYXllcnM6CisgICAgPHN0cnVjdG5hbWU+c3RydWN0IHVzYl9idXM8L3N0cnVjdG5hbWU+IGlzIGEgcmF0aGVyIHRoaW4KKyAgICBsYXllciB0aGF0IGJlY2FtZSBhdmFpbGFibGUgaW4gdGhlIDIuMiBrZXJuZWxzLCB3aGlsZQorICAgIDxzdHJ1Y3RuYW1lPnN0cnVjdCB1c2JfaGNkPC9zdHJ1Y3RuYW1lPiBpcyBhIG1vcmUgZmVhdHVyZWZ1bAorICAgIGxheWVyIChhdmFpbGFibGUgaW4gbGF0ZXIgMi40IGtlcm5lbHMgYW5kIGluIDIuNSkgdGhhdAorICAgIGxldHMgSENEcyBzaGFyZSBjb21tb24gY29kZSwgdG8gc2hyaW5rIGRyaXZlciBzaXplCisgICAgYW5kIHNpZ25pZmljYW50bHkgcmVkdWNlIGhjZC1zcGVjaWZpYyBiZWhhdmlvcnMuCisgICAgPC9wYXJhPgorCishRWRyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKyFFZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKyFFZHJpdmVycy91c2IvY29yZS9idWZmZXIuYworICAgIDwvY2hhcHRlcj4KKworICAgIDxjaGFwdGVyPgorCTx0aXRsZT5UaGUgVVNCIEZpbGVzeXN0ZW0gKHVzYmZzKTwvdGl0bGU+CisKKwk8cGFyYT5UaGlzIGNoYXB0ZXIgcHJlc2VudHMgdGhlIExpbnV4IDxlbXBoYXNpcz51c2JmczwvZW1waGFzaXM+LgorCVlvdSBtYXkgcHJlZmVyIHRvIGF2b2lkIHdyaXRpbmcgbmV3IGtlcm5lbCBjb2RlIGZvciB5b3VyCisJVVNCIGRyaXZlcjsgdGhhdCdzIHRoZSBwcm9ibGVtIHRoYXQgdXNiZnMgc2V0IG91dCB0byBzb2x2ZS4KKwlVc2VyIG1vZGUgZGV2aWNlIGRyaXZlcnMgYXJlIHVzdWFsbHkgcGFja2FnZWQgYXMgYXBwbGljYXRpb25zCisJb3IgbGlicmFyaWVzLCBhbmQgbWF5IHVzZSB1c2JmcyB0aHJvdWdoIHNvbWUgcHJvZ3JhbW1pbmcgbGlicmFyeQorCXRoYXQgd3JhcHMgaXQuICBTdWNoIGxpYnJhcmllcyBpbmNsdWRlCisJPHVsaW5rIHVybD0iaHR0cDovL2xpYnVzYi5zb3VyY2Vmb3JnZS5uZXQiPmxpYnVzYjwvdWxpbms+CisJZm9yIEMvQysrLCBhbmQKKwk8dWxpbmsgdXJsPSJodHRwOi8valVTQi5zb3VyY2Vmb3JnZS5uZXQiPmpVU0I8L3VsaW5rPiBmb3IgSmF2YS4KKwk8L3BhcmE+CisKKwk8bm90ZT48dGl0bGU+VW5maW5pc2hlZDwvdGl0bGU+CisJICAgIDxwYXJhPlRoaXMgcGFydGljdWxhciBkb2N1bWVudGF0aW9uIGlzIGluY29tcGxldGUsCisJICAgIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIHRoZSBhc3luY2hyb25vdXMgbW9kZS4KKwkgICAgQXMgb2Yga2VybmVsIDIuNS42NiB0aGUgY29kZSBhbmQgdGhpcyAobmV3KSBkb2N1bWVudGF0aW9uCisJICAgIG5lZWQgdG8gYmUgY3Jvc3MtcmV2aWV3ZWQuCisJICAgIDwvcGFyYT4KKwkgICAgPC9ub3RlPgorCisJPHBhcmE+Q29uZmlndXJlIHVzYmZzIGludG8gTGludXgga2VybmVscyBieSBlbmFibGluZyB0aGUKKwk8ZW1waGFzaXM+VVNCIGZpbGVzeXN0ZW08L2VtcGhhc2lzPiBvcHRpb24gKENPTkZJR19VU0JfREVWSUNFRlMpLAorCWFuZCB5b3UgZ2V0IGJhc2ljIHN1cHBvcnQgZm9yIHVzZXIgbW9kZSBVU0IgZGV2aWNlIGRyaXZlcnMuCisJVW50aWwgcmVsYXRpdmVseSByZWNlbnRseSBpdCB3YXMgb2Z0ZW4gKGNvbmZ1c2luZ2x5KSBjYWxsZWQKKwk8ZW1waGFzaXM+dXNiZGV2ZnM8L2VtcGhhc2lzPiBhbHRob3VnaCBpdCB3YXNuJ3Qgc29sdmluZyB3aGF0CisJPGVtcGhhc2lzPmRldmZzPC9lbXBoYXNpcz4gd2FzLgorCUV2ZXJ5IFVTQiBkZXZpY2Ugd2lsbCBhcHBlYXIgaW4gdXNiZnMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvcgorCW5vdCBpdCBoYXMgYSBrZXJuZWwgZHJpdmVyOyBidXQgb25seSBkZXZpY2VzIHdpdGgga2VybmVsIGRyaXZlcnMKKwlzaG93IHVwIGluIGRldmZzLgorCTwvcGFyYT4KKworCTxzZWN0MT4KKwkgICAgPHRpdGxlPldoYXQgZmlsZXMgYXJlIGluICJ1c2JmcyI/PC90aXRsZT4KKworCSAgICA8cGFyYT5Db252ZW50aW9uYWxseSBtb3VudGVkIGF0CisJICAgIDxmaWxlbmFtZT4vcHJvYy9idXMvdXNiPC9maWxlbmFtZT4sIHVzYmZzIAorCSAgICBmZWF0dXJlcyBpbmNsdWRlOgorCSAgICA8aXRlbWl6ZWRsaXN0PgorCQk8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPi9wcm9jL2J1cy91c2IvZGV2aWNlczwvZmlsZW5hbWU+CisJCSAgICAuLi4gYSB0ZXh0IGZpbGUKKwkJICAgIHNob3dpbmcgZWFjaCBvZiB0aGUgVVNCIGRldmljZXMgb24ga25vd24gdG8gdGhlIGtlcm5lbCwKKwkJICAgIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzLgorCQkgICAgWW91IGNhbiBhbHNvIHBvbGwoKSB0aGlzIHRvIGxlYXJuIGFib3V0IG5ldyBkZXZpY2VzLgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+L3Byb2MvYnVzL3VzYi9CQkIvREREPC9maWxlbmFtZT4KKwkJICAgIC4uLiBtYWdpYyBmaWxlcworCQkgICAgZXhwb3NpbmcgdGhlIGVhY2ggZGV2aWNlJ3MgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycywgYW5kCisJCSAgICBzdXBwb3J0aW5nIGEgc2VyaWVzIG9mIGlvY3RscyBmb3IgbWFraW5nIGRldmljZSByZXF1ZXN0cywKKwkJICAgIGluY2x1ZGluZyBJL08gdG8gZGV2aWNlcy4gIChQdXJlbHkgZm9yIGFjY2VzcyBieSBwcm9ncmFtcy4pCisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgPC9pdGVtaXplZGxpc3Q+CisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT4gRWFjaCBidXMgaXMgZ2l2ZW4gYSBudW1iZXIgKEJCQikgYmFzZWQgb24gd2hlbiBpdCB3YXMKKwkgICAgZW51bWVyYXRlZDsgd2l0aGluIGVhY2ggYnVzLCBlYWNoIGRldmljZSBpcyBnaXZlbiBhIHNpbWlsYXIKKwkgICAgbnVtYmVyIChEREQpLgorCSAgICBUaG9zZSBCQkIvREREIHBhdGhzIGFyZSBub3QgInN0YWJsZSIgaWRlbnRpZmllcnM7CisJICAgIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBldmVuIGlmIHlvdSBhbHdheXMgbGVhdmUgdGhlIGRldmljZXMKKwkgICAgcGx1Z2dlZCBpbiB0byB0aGUgc2FtZSBodWIgcG9ydC4KKwkgICAgPGVtcGhhc2lzPkRvbid0IGV2ZW4gdGhpbmsgb2Ygc2F2aW5nIHRoZXNlIGluIGFwcGxpY2F0aW9uCisJICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuPC9lbXBoYXNpcz4KKwkgICAgU3RhYmxlIGlkZW50aWZpZXJzIGFyZSBhdmFpbGFibGUsIGZvciB1c2VyIG1vZGUgYXBwbGljYXRpb25zCisJICAgIHRoYXQgd2FudCB0byB1c2UgdGhlbS4gIEhJRCBhbmQgbmV0d29ya2luZyBkZXZpY2VzIGV4cG9zZQorCSAgICB0aGVzZSBzdGFibGUgSURzLCBzbyB0aGF0IGZvciBleGFtcGxlIHlvdSBjYW4gYmUgc3VyZSB0aGF0CisJICAgIHlvdSB0b2xkIHRoZSByaWdodCBVUFMgdG8gcG93ZXIgZG93biBpdHMgc2Vjb25kIHNlcnZlci4KKwkgICAgInVzYmZzIiBkb2Vzbid0ICh5ZXQpIGV4cG9zZSB0aG9zZSBJRHMuCisJICAgIDwvcGFyYT4KKworCTwvc2VjdDE+CisKKwk8c2VjdDE+CisJICAgIDx0aXRsZT5Nb3VudGluZyBhbmQgQWNjZXNzIENvbnRyb2w8L3RpdGxlPgorCisJICAgIDxwYXJhPlRoZXJlIGFyZSBhIG51bWJlciBvZiBtb3VudCBvcHRpb25zIGZvciB1c2Jmcywgd2hpY2ggd2lsbAorCSAgICBiZSBvZiBtb3N0IGludGVyZXN0IHRvIHlvdSBpZiB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAorCSAgICBhY2Nlc3MgY29udHJvbCBwb2xpY3kuCisJICAgIFRoYXQgcG9saWN5IGlzIHRoYXQgb25seSByb290IG1heSByZWFkIG9yIHdyaXRlIGRldmljZSBmaWxlcworCSAgICAoPGZpbGVuYW1lPi9wcm9jL2J1cy9CQkIvREREPC9maWxlbmFtZT4pIGFsdGhvdWdoIGFueW9uZSBtYXkgcmVhZAorCSAgICB0aGUgPGZpbGVuYW1lPmRldmljZXM8L2ZpbGVuYW1lPgorCSAgICBvciA8ZmlsZW5hbWU+ZHJpdmVyczwvZmlsZW5hbWU+IGZpbGVzLgorCSAgICBJL08gcmVxdWVzdHMgdG8gdGhlIGRldmljZSBhbHNvIG5lZWQgdGhlIENBUF9TWVNfUkFXSU8gY2FwYWJpbGl0eSwKKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPlRoZSBzaWduaWZpY2FuY2Ugb2YgdGhhdCBpcyB0aGF0IGJ5IGRlZmF1bHQsIGFsbCB1c2VyIG1vZGUKKwkgICAgZGV2aWNlIGRyaXZlcnMgbmVlZCBzdXBlci11c2VyIHByaXZpbGVnZXMuCisJICAgIFlvdSBjYW4gY2hhbmdlIG1vZGVzIG9yIG93bmVyc2hpcCBpbiBhIGRyaXZlciBzZXR1cAorCSAgICB3aGVuIHRoZSBkZXZpY2UgaG90cGx1Z3MsIG9yIG1heWUganVzdCBzdGFydCB0aGUKKwkgICAgZHJpdmVyIHJpZ2h0IHRoZW4sIGFzIGEgcHJpdmlsZWdlZCBzZXJ2ZXIgKG9yIHNvbWUgYWN0aXZpdHkKKwkgICAgd2l0aGluIG9uZSkuCisJICAgIFRoYXQncyB0aGUgbW9zdCBzZWN1cmUgYXBwcm9hY2ggZm9yIG11bHRpLXVzZXIgc3lzdGVtcywKKwkgICAgYnV0IGZvciBzaW5nbGUgdXNlciBzeXN0ZW1zICgidHJ1c3RlZCIgYnkgdGhhdCB1c2VyKQorCSAgICBpdCdzIG1vcmUgY29udmVuaWVudCBqdXN0IHRvIGdyYW50IGV2ZXJ5b25lIGFsbCBhY2Nlc3MKKwkgICAgKHVzaW5nIHRoZSA8ZW1waGFzaXM+ZGV2bW9kZT0wNjY2PC9lbXBoYXNpcz4gb3B0aW9uKQorCSAgICBzbyB0aGUgZHJpdmVyIGNhbiBzdGFydCB3aGVuZXZlciBpdCdzIG5lZWRlZC4KKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPlRoZSBtb3VudCBvcHRpb25zIGZvciB1c2JmcywgdXNhYmxlIGluIC9ldGMvZnN0YWIgb3IKKwkgICAgaW4gY29tbWFuZCBsaW5lIGludm9jYXRpb25zIG9mIDxlbXBoYXNpcz5tb3VudDwvZW1waGFzaXM+LCBhcmU6CisKKwkgICAgPHZhcmlhYmxlbGlzdD4KKwkJPHZhcmxpc3RlbnRyeT4KKwkJICAgIDx0ZXJtPjxlbXBoYXNpcz5idXNnaWQ8L2VtcGhhc2lzPj1OTk5OTjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Db250cm9scyB0aGUgR0lEIHVzZWQgZm9yIHRoZQorCQkgICAgL3Byb2MvYnVzL3VzYi9CQkIKKwkJICAgIGRpcmVjdG9yaWVzLiAgKERlZmF1bHQ6IDApPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+PGVtcGhhc2lzPmJ1c21vZGU8L2VtcGhhc2lzPj1NTU08L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+Q29udHJvbHMgdGhlIGZpbGUgbW9kZSB1c2VkIGZvciB0aGUKKwkJICAgIC9wcm9jL2J1cy91c2IvQkJCCisJCSAgICBkaXJlY3Rvcmllcy4gIChEZWZhdWx0OiAwNTU1KQorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+PGVtcGhhc2lzPmJ1c3VpZDwvZW1waGFzaXM+PU5OTk5OPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBVSUQgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL0JCQgorCQkgICAgZGlyZWN0b3JpZXMuICAoRGVmYXVsdDogMCk8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPjxlbXBoYXNpcz5kZXZnaWQ8L2VtcGhhc2lzPj1OTk5OTjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Db250cm9scyB0aGUgR0lEIHVzZWQgZm9yIHRoZQorCQkgICAgL3Byb2MvYnVzL3VzYi9CQkIvRERECisJCSAgICBmaWxlcy4gIChEZWZhdWx0OiAwKTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPjxlbXBoYXNpcz5kZXZtb2RlPC9lbXBoYXNpcz49TU1NPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBmaWxlIG1vZGUgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL0JCQi9EREQKKwkJICAgIGZpbGVzLiAgKERlZmF1bHQ6IDA2NDQpPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+PGVtcGhhc2lzPmRldnVpZDwvZW1waGFzaXM+PU5OTk5OPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBVSUQgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL0JCQi9EREQKKwkJICAgIGZpbGVzLiAgKERlZmF1bHQ6IDApPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT48ZW1waGFzaXM+bGlzdGdpZDwvZW1waGFzaXM+PU5OTk5OPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHRoZSBHSUQgdXNlZCBmb3IgdGhlCisJCSAgICAvcHJvYy9idXMvdXNiL2RldmljZXMgYW5kIGRyaXZlcnMgZmlsZXMuCisJCSAgICAoRGVmYXVsdDogMCk8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKwkJPHZhcmxpc3RlbnRyeT48dGVybT48ZW1waGFzaXM+bGlzdG1vZGU8L2VtcGhhc2lzPj1NTU08L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+Q29udHJvbHMgdGhlIGZpbGUgbW9kZSB1c2VkIGZvciB0aGUKKwkJICAgIC9wcm9jL2J1cy91c2IvZGV2aWNlcyBhbmQgZHJpdmVycyBmaWxlcy4KKwkJICAgIChEZWZhdWx0OiAwNDQ0KTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPjxlbXBoYXNpcz5saXN0dWlkPC9lbXBoYXNpcz49Tk5OTk48L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+Q29udHJvbHMgdGhlIFVJRCB1c2VkIGZvciB0aGUKKwkJICAgIC9wcm9jL2J1cy91c2IvZGV2aWNlcyBhbmQgZHJpdmVycyBmaWxlcy4KKwkJICAgIChEZWZhdWx0OiAwKTwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCSAgICA8L3ZhcmlhYmxlbGlzdD4KKworCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+Tm90ZSB0aGF0IG1hbnkgTGludXggZGlzdHJpYnV0aW9ucyBoYXJkLXdpcmUgdGhlIG1vdW50IG9wdGlvbnMKKwkgICAgZm9yIHVzYmZzIGluIHRoZWlyIGluaXQgc2NyaXB0cywgc3VjaCBhcworCSAgICA8ZmlsZW5hbWU+L2V0Yy9yYy5kL3JjLnN5c2luaXQ8L2ZpbGVuYW1lPiwKKwkgICAgcmF0aGVyIHRoYW4gbWFraW5nIGl0IGVhc3kgdG8gc2V0IHRoaXMgcGVyLXN5c3RlbQorCSAgICBwb2xpY3kgaW4gPGZpbGVuYW1lPi9ldGMvZnN0YWI8L2ZpbGVuYW1lPi4KKwkgICAgPC9wYXJhPgorCisJPC9zZWN0MT4KKworCTxzZWN0MT4KKwkgICAgPHRpdGxlPi9wcm9jL2J1cy91c2IvZGV2aWNlczwvdGl0bGU+CisKKwkgICAgPHBhcmE+VGhpcyBmaWxlIGlzIGhhbmR5IGZvciBzdGF0dXMgdmlld2luZyB0b29scyBpbiB1c2VyCisJICAgIG1vZGUsIHdoaWNoIGNhbiBzY2FuIHRoZSB0ZXh0IGZvcm1hdCBhbmQgaWdub3JlIG1vc3Qgb2YgaXQuCisJICAgIE1vcmUgZGV0YWlsZWQgZGV2aWNlIHN0YXR1cyAoaW5jbHVkaW5nIGNsYXNzIGFuZCB2ZW5kb3IKKwkgICAgc3RhdHVzKSBpcyBhdmFpbGFibGUgZnJvbSBkZXZpY2Utc3BlY2lmaWMgZmlsZXMuCisJICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBmb3JtYXQgb2YgdGhpcyBmaWxlLAorCSAgICBzZWUgdGhlCisJICAgIDxmaWxlbmFtZT5Eb2N1bWVudGF0aW9uL3VzYi9wcm9jX3VzYl9pbmZvLnR4dDwvZmlsZW5hbWU+CisJICAgIGZpbGUgaW4geW91ciBMaW51eCBrZXJuZWwgc291cmNlcy4KKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPk90aGVyd2lzZSB0aGUgbWFpbiB1c2UgZm9yIHRoaXMgZmlsZSBmcm9tIHByb2dyYW1zCisJICAgIGlzIHRvIHBvbGwoKSBpdCB0byBnZXQgbm90aWZpY2F0aW9ucyBvZiB1c2IgZGV2aWNlcworCSAgICBhcyB0aGV5J3JlIHBsdWdnZWQgb3IgdW5wbHVnZ2VkLgorCSAgICBUbyBzZWUgd2hhdCBjaGFuZ2VkLCB5b3UnZCBuZWVkIHRvIHJlYWQgdGhlIGZpbGUgYW5kCisJICAgIGNvbXBhcmUgImJlZm9yZSIgYW5kICJhZnRlciIgY29udGVudHMsIHNjYW4gdGhlIGZpbGVzeXN0ZW0sCisJICAgIG9yIHNlZSBpdHMgaG90cGx1ZyBldmVudC4KKwkgICAgPC9wYXJhPgorCisJPC9zZWN0MT4KKworCTxzZWN0MT4KKwkgICAgPHRpdGxlPi9wcm9jL2J1cy91c2IvQkJCL0RERDwvdGl0bGU+CisKKwkgICAgPHBhcmE+VXNlIHRoZXNlIGZpbGVzIGluIG9uZSBvZiB0aGVzZSBiYXNpYyB3YXlzOgorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+PGVtcGhhc2lzPlRoZXkgY2FuIGJlIHJlYWQsPC9lbXBoYXNpcz4KKwkgICAgcHJvZHVjaW5nIGZpcnN0IHRoZSBkZXZpY2UgZGVzY3JpcHRvcgorCSAgICAoMTggYnl0ZXMpIGFuZCB0aGVuIHRoZSBkZXNjcmlwdG9ycyBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKwkgICAgU2VlIHRoZSBVU0IgMi4wIHNwZWMgZm9yIGRldGFpbHMgYWJvdXQgdGhvc2UgYmluYXJ5IGRhdGEgZm9ybWF0cy4KKwkgICAgWW91J2xsIG5lZWQgdG8gY29udmVydCBtb3N0IG11bHRpYnl0ZSB2YWx1ZXMgZnJvbSBsaXR0bGUgZW5kaWFuCisJICAgIGZvcm1hdCB0byB5b3VyIG5hdGl2ZSBob3N0IGJ5dGUgb3JkZXIsIGFsdGhvdWdoIGEgZmV3IG9mIHRoZQorCSAgICBmaWVsZHMgaW4gdGhlIGRldmljZSBkZXNjcmlwdG9yIChib3RoIG9mIHRoZSBCQ0QtZW5jb2RlZCBmaWVsZHMsCisJICAgIGFuZCB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0IElEcykgd2lsbCBiZSBieXRlc3dhcHBlZCBmb3IgeW91LgorCSAgICBOb3RlIHRoYXQgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBpbmNsdWRlIGRlc2NyaXB0b3JzIGZvcgorCSAgICBpbnRlcmZhY2VzLCBhbHRzZXR0aW5ncywgZW5kcG9pbnRzLCBhbmQgbWF5YmUgYWRkaXRpb25hbAorCSAgICBjbGFzcyBkZXNjcmlwdG9ycy4KKwkgICAgPC9wYXJhPgorCisJICAgIDxwYXJhPjxlbXBoYXNpcz5QZXJmb3JtIFVTQiBvcGVyYXRpb25zPC9lbXBoYXNpcz4gdXNpbmcgCisJICAgIDxlbXBoYXNpcz5pb2N0bCgpPC9lbXBoYXNpcz4gcmVxdWVzdHMgdG8gbWFrZSBlbmRwb2ludCBJL08KKwkgICAgcmVxdWVzdHMgKHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkpIG9yIG1hbmFnZQorCSAgICB0aGUgZGV2aWNlLgorCSAgICBUaGVzZSByZXF1ZXN0cyBuZWVkIHRoZSBDQVBfU1lTX1JBV0lPIGNhcGFiaWxpdHksCisJICAgIGFzIHdlbGwgYXMgZmlsZXN5c3RlbSBhY2Nlc3MgcGVybWlzc2lvbnMuCisJICAgIE9ubHkgb25lIGlvY3RsIHJlcXVlc3QgY2FuIGJlIG1hZGUgb24gb25lIG9mIHRoZXNlCisJICAgIGRldmljZSBmaWxlcyBhdCBhIHRpbWUuCisJICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgYXJlIHN5bmNocm9ub3VzbHkgcmVhZGluZyBhbiBlbmRwb2ludAorCSAgICBmcm9tIG9uZSB0aHJlYWQsIHlvdSB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGEgZGlmZmVyZW50CisJICAgIGVuZHBvaW50IGZyb20gYW5vdGhlciB0aHJlYWQgdW50aWwgdGhlIHJlYWQgY29tcGxldGVzLgorCSAgICBUaGlzIHdvcmtzIGZvciA8ZW1waGFzaXM+aGFsZiBkdXBsZXg8L2VtcGhhc2lzPiBwcm90b2NvbHMsCisJICAgIGJ1dCBvdGhlcndpc2UgeW91J2QgdXNlIGFzeW5jaHJvbm91cyBpL28gcmVxdWVzdHMuIAorCSAgICA8L3BhcmE+CisKKwkgICAgPC9zZWN0MT4KKworCisJPHNlY3QxPgorCSAgICA8dGl0bGU+TGlmZSBDeWNsZSBvZiBVc2VyIE1vZGUgRHJpdmVyczwvdGl0bGU+CisKKwkgICAgPHBhcmE+U3VjaCBhIGRyaXZlciBmaXJzdCBuZWVkcyB0byBmaW5kIGEgZGV2aWNlIGZpbGUKKwkgICAgZm9yIGEgZGV2aWNlIGl0IGtub3dzIGhvdyB0byBoYW5kbGUuCisJICAgIE1heWJlIGl0IHdhcyB0b2xkIGFib3V0IGl0IGJlY2F1c2UgYQorCSAgICA8ZmlsZW5hbWU+L3NiaW4vaG90cGx1ZzwvZmlsZW5hbWU+IGV2ZW50IGhhbmRsaW5nIGFnZW50CisJICAgIGNob3NlIHRoYXQgZHJpdmVyIHRvIGhhbmRsZSB0aGUgbmV3IGRldmljZS4KKwkgICAgT3IgbWF5YmUgaXQncyBhbiBhcHBsaWNhdGlvbiB0aGF0IHNjYW5zIGFsbCB0aGUKKwkgICAgL3Byb2MvYnVzL3VzYiBkZXZpY2UgZmlsZXMsIGFuZCBpZ25vcmVzIG1vc3QgZGV2aWNlcy4KKwkgICAgSW4gZWl0aGVyIGNhc2UsIGl0IHNob3VsZCA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gYWxsCisJICAgIHRoZSBkZXNjcmlwdG9ycyBmcm9tIHRoZSBkZXZpY2UgZmlsZSwKKwkgICAgYW5kIGNoZWNrIHRoZW0gYWdhaW5zdCB3aGF0IGl0IGtub3dzIGhvdyB0byBoYW5kbGUuCisJICAgIEl0IG1pZ2h0IGp1c3QgcmVqZWN0IGV2ZXJ5dGhpbmcgZXhjZXB0IGEgcGFydGljdWxhcgorCSAgICB2ZW5kb3IgYW5kIHByb2R1Y3QgSUQsIG9yIG5lZWQgYSBtb3JlIGNvbXBsZXggcG9saWN5LgorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+TmV2ZXIgYXNzdW1lIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgc3VjaCBkZXZpY2UKKwkgICAgb24gdGhlIHN5c3RlbSBhdCBhIHRpbWUhCisJICAgIElmIHlvdXIgY29kZSBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIG9uZSBkZXZpY2UgYXQKKwkgICAgYSB0aW1lLCBhdCBsZWFzdCBkZXRlY3Qgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUsIGFuZAorCSAgICBoYXZlIHlvdXIgdXNlcnMgY2hvb3NlIHdoaWNoIGRldmljZSB0byB1c2UuCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT5PbmNlIHlvdXIgdXNlciBtb2RlIGRyaXZlciBrbm93cyB3aGF0IGRldmljZSB0byB1c2UsCisJICAgIGl0IGludGVyYWN0cyB3aXRoIGl0IGluIGVpdGhlciBvZiB0d28gc3R5bGVzLgorCSAgICBUaGUgc2ltcGxlIHN0eWxlIGlzIHRvIG1ha2Ugb25seSBjb250cm9sIHJlcXVlc3RzOyBzb21lCisJICAgIGRldmljZXMgZG9uJ3QgbmVlZCBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHRoYW4gdGhvc2UuCisJICAgIChBbiBleGFtcGxlIG1pZ2h0IGJlIHNvZnR3YXJlIHVzaW5nIHZlbmRvci1zcGVjaWZpYyBjb250cm9sCisJICAgIHJlcXVlc3RzIGZvciBzb21lIGluaXRpYWxpemF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gdGFza3MsCisJICAgIHdpdGggYSBrZXJuZWwgZHJpdmVyIGZvciB0aGUgcmVzdC4pCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT5Nb3JlIGxpa2VseSwgeW91IG5lZWQgYSBtb3JlIGNvbXBsZXggc3R5bGUgZHJpdmVyOgorCSAgICBvbmUgdXNpbmcgbm9uLWNvbnRyb2wgZW5kcG9pbnRzLCByZWFkaW5nIG9yIHdyaXRpbmcgZGF0YQorCSAgICBhbmQgY2xhaW1pbmcgZXhjbHVzaXZlIHVzZSBvZiBhbiBpbnRlcmZhY2UuCisJICAgIDxlbXBoYXNpcz5CdWxrPC9lbXBoYXNpcz4gdHJhbnNmZXJzIGFyZSBlYXNpZXN0IHRvIHVzZSwKKwkgICAgYnV0IG9ubHkgdGhlaXIgc2libGluZyA8ZW1waGFzaXM+aW50ZXJydXB0PC9lbXBoYXNpcz4gdHJhbnNmZXJzIAorCSAgICB3b3JrIHdpdGggbG93IHNwZWVkIGRldmljZXMuCisJICAgIEJvdGggaW50ZXJydXB0IGFuZCA8ZW1waGFzaXM+aXNvY2hyb25vdXM8L2VtcGhhc2lzPiB0cmFuc2ZlcnMKKwkgICAgb2ZmZXIgc2VydmljZSBndWFyYW50ZWVzIGJlY2F1c2UgdGhlaXIgYmFuZHdpZHRoIGlzIHJlc2VydmVkLgorCSAgICBTdWNoICJwZXJpb2RpYyIgdHJhbnNmZXJzIGFyZSBhd2t3YXJkIHRvIHVzZSB0aHJvdWdoIHVzYmZzLAorCSAgICB1bmxlc3MgeW91J3JlIHVzaW5nIHRoZSBhc3luY2hyb25vdXMgY2FsbHMuICBIb3dldmVyLCBpbnRlcnJ1cHQKKwkgICAgdHJhbnNmZXJzIGNhbiBhbHNvIGJlIHVzZWQgaW4gYSBzeW5jaHJvbm91cyAib25lIHNob3QiIHN0eWxlLgorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+WW91ciB1c2VyLW1vZGUgZHJpdmVyIHNob3VsZCBuZXZlciBuZWVkIHRvIHdvcnJ5CisJICAgIGFib3V0IGNsZWFuaW5nIHVwIHJlcXVlc3Qgc3RhdGUgd2hlbiB0aGUgZGV2aWNlIGlzCisJICAgIGRpc2Nvbm5lY3RlZCwgYWx0aG91Z2ggaXQgc2hvdWxkIGNsb3NlIGl0cyBvcGVuIGZpbGUKKwkgICAgZGVzY3JpcHRvcnMgYXMgc29vbiBhcyBpdCBzdGFydHMgc2VlaW5nIHRoZSBFTk9ERVYKKwkgICAgZXJyb3JzLgorCSAgICA8L3BhcmE+CisKKwkgICAgPC9zZWN0MT4KKworCTxzZWN0MT48dGl0bGU+VGhlIGlvY3RsKCkgUmVxdWVzdHM8L3RpdGxlPgorCisJICAgIDxwYXJhPlRvIHVzZSB0aGVzZSBpb2N0bHMsIHlvdSBuZWVkIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZworCSAgICBoZWFkZXJzIGluIHlvdXIgdXNlcnNwYWNlIHByb2dyYW06Cis8cHJvZ3JhbWxpc3Rpbmc+I2luY2x1ZGUgJmx0O2xpbnV4L3VzYi5oJmd0OworI2luY2x1ZGUgJmx0O2xpbnV4L3VzYmRldmljZV9mcy5oJmd0OworI2luY2x1ZGUgJmx0O2FzbS9ieXRlb3JkZXIuaCZndDs8L3Byb2dyYW1saXN0aW5nPgorCSAgICBUaGUgc3RhbmRhcmQgVVNCIGRldmljZSBtb2RlbCByZXF1ZXN0cywgZnJvbSAiQ2hhcHRlciA5IiBvZgorCSAgICB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uLCBhcmUgYXV0b21hdGljYWxseSBpbmNsdWRlZCBmcm9tCisJICAgIHRoZSA8ZmlsZW5hbWU+Jmx0O2xpbnV4L3VzYl9jaDkuaCZndDs8L2ZpbGVuYW1lPiBoZWFkZXIuCisJICAgIDwvcGFyYT4KKworCSAgICA8cGFyYT5Vbmxlc3Mgbm90ZWQgb3RoZXJ3aXNlLCB0aGUgaW9jdGwgcmVxdWVzdHMKKwkgICAgZGVzY3JpYmVkIGhlcmUgd2lsbAorCSAgICB1cGRhdGUgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9uIHRoZSB1c2JmcyBmaWxlIHRvIHdoaWNoCisJICAgIHRoZXkgYXJlIGFwcGxpZWQgKHVubGVzcyB0aGV5IGZhaWwpLgorCSAgICBBIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UsIGEKKwkgICAgc3RhbmRhcmQgVVNCIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuICAoVGhlc2UgYXJlCisJICAgIGRvY3VtZW50ZWQgaW4KKwkgICAgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dDwvZmlsZW5hbWU+CisJICAgIGluIHlvdXIga2VybmVsIHNvdXJjZXMuKQorCSAgICA8L3BhcmE+CisKKwkgICAgPHBhcmE+RWFjaCBvZiB0aGVzZSBmaWxlcyBtdWx0aXBsZXhlcyBhY2Nlc3MgdG8gc2V2ZXJhbAorCSAgICBJL08gc3RyZWFtcywgb25lIHBlciBlbmRwb2ludC4KKwkgICAgRWFjaCBkZXZpY2UgaGFzIG9uZSBjb250cm9sIGVuZHBvaW50IChlbmRwb2ludCB6ZXJvKQorCSAgICB3aGljaCBzdXBwb3J0cyBhIGxpbWl0ZWQgUlBDIHN0eWxlIFJQQyBhY2Nlc3MuCisJICAgIERldmljZXMgYXJlIGNvbmZpZ3VyZWQKKwkgICAgYnkga2h1YmQgKGluIHRoZSBrZXJuZWwpIHNldHRpbmcgYSBkZXZpY2Utd2lkZQorCSAgICA8ZW1waGFzaXM+Y29uZmlndXJhdGlvbjwvZW1waGFzaXM+IHRoYXQgYWZmZWN0cyB0aGluZ3MKKwkgICAgbGlrZSBwb3dlciBjb25zdW1wdGlvbiBhbmQgYmFzaWMgZnVuY3Rpb25hbGl0eS4KKwkgICAgVGhlIGVuZHBvaW50cyBhcmUgcGFydCBvZiBVU0IgPGVtcGhhc2lzPmludGVyZmFjZXM8L2VtcGhhc2lzPiwKKwkgICAgd2hpY2ggbWF5IGhhdmUgPGVtcGhhc2lzPmFsdHNldHRpbmdzPC9lbXBoYXNpcz4KKwkgICAgYWZmZWN0aW5nIHRoaW5ncyBsaWtlIHdoaWNoIGVuZHBvaW50cyBhcmUgYXZhaWxhYmxlLgorCSAgICBNYW55IGRldmljZXMgb25seSBoYXZlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gYW5kIGludGVyZmFjZSwKKwkgICAgc28gZHJpdmVycyBmb3IgdGhlbSB3aWxsIGlnbm9yZSBjb25maWd1cmF0aW9ucyBhbmQgYWx0c2V0dGluZ3MuCisJICAgIDwvcGFyYT4KKworCisJICAgIDxzZWN0Mj4KKwkJPHRpdGxlPk1hbmFnZW1lbnQvU3RhdHVzIFJlcXVlc3RzPC90aXRsZT4KKworCQk8cGFyYT5BIG51bWJlciBvZiB1c2JmcyByZXF1ZXN0cyBkb24ndCBkZWFsIHZlcnkgZGlyZWN0bHkKKwkJd2l0aCBkZXZpY2UgSS9PLgorCQlUaGV5IG1vc3RseSByZWxhdGUgdG8gZGV2aWNlIG1hbmFnZW1lbnQgYW5kIHN0YXR1cy4KKwkJVGhlc2UgYXJlIGFsbCBzeW5jaHJvbm91cyByZXF1ZXN0cy4KKwkJPC9wYXJhPgorCisJCTx2YXJpYWJsZWxpc3Q+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19DTEFJTUlOVEVSRkFDRTwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5UaGlzIGlzIHVzZWQgdG8gZm9yY2UgdXNiZnMgdG8KKwkJICAgIGNsYWltIGEgc3BlY2lmaWMgaW50ZXJmYWNlLAorCQkgICAgd2hpY2ggaGFzIG5vdCBwcmV2aW91c2x5IGJlZW4gY2xhaW1lZCBieSB1c2JmcyBvciBhbnkgb3RoZXIKKwkJICAgIGtlcm5lbCBkcml2ZXIuCisJCSAgICBUaGUgaW9jdGwgcGFyYW1ldGVyIGlzIGFuIGludGVnZXIgaG9sZGluZyB0aGUgbnVtYmVyIG9mCisJCSAgICB0aGUgaW50ZXJmYWNlIChiSW50ZXJmYWNlTnVtYmVyIGZyb20gZGVzY3JpcHRvcikuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICBOb3RlIHRoYXQgaWYgeW91ciBkcml2ZXIgZG9lc24ndCBjbGFpbSBhbiBpbnRlcmZhY2UKKwkJICAgIGJlZm9yZSB0cnlpbmcgdG8gdXNlIG9uZSBvZiBpdHMgZW5kcG9pbnRzLCBhbmQgbm8KKwkJICAgIG90aGVyIGRyaXZlciBoYXMgYm91bmQgdG8gaXQsIHRoZW4gdGhlIGludGVyZmFjZSBpcworCQkgICAgYXV0b21hdGljYWxseSBjbGFpbWVkIGJ5IHVzYmZzLgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgVGhpcyBjbGFpbSB3aWxsIGJlIHJlbGVhc2VkIGJ5IGEgUkVMRUFTRUlOVEVSRkFDRSBpb2N0bCwKKwkJICAgIG9yIGJ5IGNsb3NpbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19DT05ORUNUSU5GTzwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5TYXlzIHdoZXRoZXIgdGhlIGRldmljZSBpcyBsb3dzcGVlZC4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgcG9pbnRzIHRvIGEgc3RydWN0dXJlIGxpa2UgdGhpczoKKzxwcm9ncmFtbGlzdGluZz5zdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8geworICAgICAgICB1bnNpZ25lZCBpbnQgICBkZXZudW07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgIHNsb3c7Cit9OyA8L3Byb2dyYW1saXN0aW5nPgorCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+WW91IGNhbid0IHRlbGwgd2hldGhlciBhICJub3Qgc2xvdyIKKwkJICAgIGRldmljZSBpcyBjb25uZWN0ZWQgYXQgaGlnaCBzcGVlZCAoNDgwIE1CaXQvc2VjKQorCQkgICAgb3IganVzdCBmdWxsIHNwZWVkICgxMiBNQml0L3NlYykuPC9lbXBoYXNpcz4KKwkJICAgIFlvdSBzaG91bGQga25vdyB0aGUgZGV2bnVtIHZhbHVlIGFscmVhZHksCisJCSAgICBpdCdzIHRoZSBEREQgdmFsdWUgb2YgdGhlIGRldmljZSBmaWxlIG5hbWUuCisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX0dFVERSSVZFUjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5SZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBrZXJuZWwgZHJpdmVyCisJCSAgICBib3VuZCB0byBhIGdpdmVuIGludGVyZmFjZSAoYSBzdHJpbmcpLiAgUGFyYW1ldGVyCisJCSAgICBpcyBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUsIHdoaWNoIGlzIG1vZGlmaWVkOgorPHByb2dyYW1saXN0aW5nPnN0cnVjdCB1c2JkZXZmc19nZXRkcml2ZXIgeworICAgICAgICB1bnNpZ25lZCBpbnQgIGludGVyZmFjZTsKKyAgICAgICAgY2hhciAgICAgICAgICBkcml2ZXJbVVNCREVWRlNfTUFYRFJJVkVSTkFNRSArIDFdOworfTs8L3Byb2dyYW1saXN0aW5nPgorCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX0lPQ1RMPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPlBhc3NlcyBhIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaAorCQkgICAgdG8gYSBrZXJuZWwgZHJpdmVyIHRoYXQgaGFzIGFuIGlvY3RsIGVudHJ5IGluIHRoZQorCQkgICAgPGVtcGhhc2lzPnN0cnVjdCB1c2JfZHJpdmVyPC9lbXBoYXNpcz4gaXQgcmVnaXN0ZXJlZC4KKzxwcm9ncmFtbGlzdGluZz5zdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwgeworICAgICAgICBpbnQgICAgIGlmbm87CisgICAgICAgIGludCAgICAgaW9jdGxfY29kZTsKKyAgICAgICAgdm9pZCAgICAqZGF0YTsKK307CisKKy8qIHVzZXIgbW9kZSBjYWxsIGxvb2tzIGxpa2UgdGhpcy4KKyAqICdyZXF1ZXN0JyBiZWNvbWVzIHRoZSBkcml2ZXItPmlvY3RsKCkgJ2NvZGUnIHBhcmFtZXRlci4KKyAqIHRoZSBzaXplIG9mICdwYXJhbScgaXMgZW5jb2RlZCBpbiAncmVxdWVzdCcsIGFuZCB0aGF0IGRhdGEKKyAqIGlzIGNvcGllZCB0byBvciBmcm9tIHRoZSBkcml2ZXItPmlvY3RsKCkgJ2J1ZicgcGFyYW1ldGVyLgorICovCitzdGF0aWMgaW50Cit1c2JkZXZfaW9jdGwgKGludCBmZCwgaW50IGlmbm8sIHVuc2lnbmVkIHJlcXVlc3QsIHZvaWQgKnBhcmFtKQoreworICAgICAgICBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwJd3JhcHBlcjsKKworICAgICAgICB3cmFwcGVyLmlmbm8gPSBpZm5vOworICAgICAgICB3cmFwcGVyLmlvY3RsX2NvZGUgPSByZXF1ZXN0OworICAgICAgICB3cmFwcGVyLmRhdGEgPSBwYXJhbTsKKworICAgICAgICByZXR1cm4gaW9jdGwgKGZkLCBVU0JERVZGU19JT0NUTCwgJmFtcDt3cmFwcGVyKTsKK30gPC9wcm9ncmFtbGlzdGluZz4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgVGhpcyByZXF1ZXN0IGxldHMga2VybmVsIGRyaXZlcnMgdGFsayB0byB1c2VyIG1vZGUgY29kZQorCQkgICAgdGhyb3VnaCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgZXZlbiB3aGVuIHRoZXkgZG9uJ3QgY3JlYXRlCisJCSAgICBhIGNoYXJhY3RvciBvciBibG9jayBzcGVjaWFsIGRldmljZS4KKwkJICAgIEl0J3MgYWxzbyBiZWVuIHVzZWQgdG8gZG8gdGhpbmdzIGxpa2UgYXNrIGRldmljZXMgd2hhdAorCQkgICAgZGV2aWNlIHNwZWNpYWwgZmlsZSBzaG91bGQgYmUgdXNlZC4KKwkJICAgIFR3byBwcmUtZGVmaW5lZCBpb2N0bHMgYXJlIHVzZWQKKwkJICAgIHRvIGRpc2Nvbm5lY3QgYW5kIHJlY29ubmVjdCBrZXJuZWwgZHJpdmVycywgc28KKwkJICAgIHRoYXQgdXNlciBtb2RlIGNvZGUgY2FuIGNvbXBsZXRlbHkgbWFuYWdlIGJpbmRpbmcKKwkJICAgIGFuZCBjb25maWd1cmF0aW9uIG9mIGRldmljZXMuCisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0U8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+VGhpcyBpcyB1c2VkIHRvIHJlbGVhc2UgdGhlIGNsYWltIHVzYmZzCisJCSAgICBtYWRlIG9uIGludGVyZmFjZSwgZWl0aGVyIGltcGxpY2l0bHkgb3IgYmVjYXVzZSBvZiBhCisJCSAgICBVU0JERVZGU19DTEFJTUlOVEVSRkFDRSBjYWxsLCBiZWZvcmUgdGhlIGZpbGUKKwkJICAgIGRlc2NyaXB0b3IgaXMgY2xvc2VkLgorCQkgICAgVGhlIGlvY3RsIHBhcmFtZXRlciBpcyBhbiBpbnRlZ2VyIGhvbGRpbmcgdGhlIG51bWJlciBvZgorCQkgICAgdGhlIGludGVyZmFjZSAoYkludGVyZmFjZU51bWJlciBmcm9tIGRlc2NyaXB0b3IpOworCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PHdhcm5pbmc+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+Tm8gc2VjdXJpdHkgY2hlY2sgaXMgbWFkZSB0byBlbnN1cmUKKwkJICAgIHRoYXQgdGhlIHRhc2sgd2hpY2ggbWFkZSB0aGUgY2xhaW0gaXMgdGhlIG9uZQorCQkgICAgd2hpY2ggaXMgcmVsZWFzaW5nIGl0LgorCQkgICAgVGhpcyBtZWFucyB0aGF0IHVzZXIgbW9kZSBkcml2ZXIgbWF5IGludGVyZmVyZQorCQkgICAgb3RoZXIgb25lcy4gIDwvZW1waGFzaXM+CisJCSAgICA8L3BhcmE+PC93YXJuaW5nPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19SRVNFVEVQPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPlJlc2V0cyB0aGUgZGF0YSB0b2dnbGUgdmFsdWUgZm9yIGFuIGVuZHBvaW50CisJCSAgICAoYnVsayBvciBpbnRlcnJ1cHQpIHRvIERBVEEwLgorCQkgICAgVGhlIGlvY3RsIHBhcmFtZXRlciBpcyBhbiBpbnRlZ2VyIGVuZHBvaW50IG51bWJlcgorCQkgICAgKDEgdG8gMTUsIGFzIGlkZW50aWZpZWQgaW4gdGhlIGVuZHBvaW50IGRlc2NyaXB0b3IpLAorCQkgICAgd2l0aCBVU0JfRElSX0lOIGFkZGVkIGlmIHRoZSBkZXZpY2UncyBlbmRwb2ludCBzZW5kcworCQkgICAgZGF0YSB0byB0aGUgaG9zdC4KKwkJICAgIDwvcGFyYT48d2FybmluZz48cGFyYT4KKwkJICAgIDxlbXBoYXNpcz5Bdm9pZCB1c2luZyB0aGlzIHJlcXVlc3QuCisJCSAgICBJdCBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZC48L2VtcGhhc2lzPgorCQkgICAgVXNpbmcgaXQgdHlwaWNhbGx5IG1lYW5zIHRoZSBkZXZpY2UgYW5kIGRyaXZlciB3aWxsIGxvc2UKKwkJICAgIHRvZ2dsZSBzeW5jaHJvbml6YXRpb24uICBJZiB5b3UgcmVhbGx5IGxvc3Qgc3luY2hyb25pemF0aW9uLAorCQkgICAgeW91IGxpa2VseSBuZWVkIHRvIGNvbXBsZXRlbHkgaGFuZHNoYWtlIHdpdGggdGhlIGRldmljZSwKKwkJICAgIHVzaW5nIGEgcmVxdWVzdCBsaWtlIENMRUFSX0hBTFQKKwkJICAgIG9yIFNFVF9JTlRFUkZBQ0UuCisJCSAgICA8L3BhcmE+PC93YXJuaW5nPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPC92YXJpYWJsZWxpc3Q+CisKKwkJPC9zZWN0Mj4KKworCSAgICA8c2VjdDI+CisJCTx0aXRsZT5TeW5jaHJvbm91cyBJL08gU3VwcG9ydDwvdGl0bGU+CisKKwkJPHBhcmE+U3luY2hyb25vdXMgcmVxdWVzdHMgaW52b2x2ZSB0aGUga2VybmVsIGJsb2NraW5nCisJCXVudGlsIHVudGlsIHRoZSB1c2VyIG1vZGUgcmVxdWVzdCBjb21wbGV0ZXMsIGVpdGhlciBieQorCQlmaW5pc2hpbmcgc3VjY2Vzc2Z1bGx5IG9yIGJ5IHJlcG9ydGluZyBhbiBlcnJvci4KKwkJSW4gbW9zdCBjYXNlcyB0aGlzIGlzIHRoZSBzaW1wbGVzdCB3YXkgdG8gdXNlIHVzYmZzLAorCQlhbHRob3VnaCBhcyBub3RlZCBhYm92ZSBpdCBkb2VzIHByZXZlbnQgcGVyZm9ybWluZyBJL08KKwkJdG8gbW9yZSB0aGFuIG9uZSBlbmRwb2ludCBhdCBhIHRpbWUuCisJCTwvcGFyYT4KKworCQk8dmFyaWFibGVsaXN0PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfQlVMSzwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Jc3N1ZXMgYSBidWxrIHJlYWQgb3Igd3JpdGUgcmVxdWVzdCB0byB0aGUKKwkJICAgIGRldmljZS4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlOgorPHByb2dyYW1saXN0aW5nPnN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIgeworICAgICAgICB1bnNpZ25lZCBpbnQgIGVwOworICAgICAgICB1bnNpZ25lZCBpbnQgIGxlbjsKKyAgICAgICAgdW5zaWduZWQgaW50ICB0aW1lb3V0OyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAgICAgICAgdm9pZCAgICAgICAgICAqZGF0YTsKK307PC9wcm9ncmFtbGlzdGluZz4KKwkJICAgIDwvcGFyYT48cGFyYT5UaGUgImVwIiB2YWx1ZSBpZGVudGlmaWVzIGEKKwkJICAgIGJ1bGsgZW5kcG9pbnQgbnVtYmVyICgxIHRvIDE1LCBhcyBpZGVudGlmaWVkIGluIGFuIGVuZHBvaW50CisJCSAgICBkZXNjcmlwdG9yKSwKKwkJICAgIG1hc2tlZCB3aXRoIFVTQl9ESVJfSU4gd2hlbiByZWZlcnJpbmcgdG8gYW4gZW5kcG9pbnQgd2hpY2gKKwkJICAgIHNlbmRzIGRhdGEgdG8gdGhlIGhvc3QgZnJvbSB0aGUgZGV2aWNlLgorCQkgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIgaXMgaWRlbnRpZmllZCBieSAibGVuIjsKKwkJICAgIFJlY2VudCBrZXJuZWxzIHN1cHBvcnQgcmVxdWVzdHMgdXAgdG8gYWJvdXQgMTI4S0J5dGVzLgorCQkgICAgPGVtcGhhc2lzPkZJWE1FIHNheSBob3cgcmVhZCBsZW5ndGggaXMgcmV0dXJuZWQsCisJCSAgICBhbmQgaG93IHNob3J0IHJlYWRzIGFyZSBoYW5kbGVkLjwvZW1waGFzaXM+LgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19DTEVBUl9IQUxUPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPkNsZWFycyBlbmRwb2ludCBoYWx0IChzdGFsbCkgYW5kCisJCSAgICByZXNldHMgdGhlIGVuZHBvaW50IHRvZ2dsZS4gIFRoaXMgaXMgb25seQorCQkgICAgbWVhbmluZ2Z1bCBmb3IgYnVsayBvciBpbnRlcnJ1cHQgZW5kcG9pbnRzLgorCQkgICAgVGhlIGlvY3RsIHBhcmFtZXRlciBpcyBhbiBpbnRlZ2VyIGVuZHBvaW50IG51bWJlcgorCQkgICAgKDEgdG8gMTUsIGFzIGlkZW50aWZpZWQgaW4gYW4gZW5kcG9pbnQgZGVzY3JpcHRvciksCisJCSAgICBtYXNrZWQgd2l0aCBVU0JfRElSX0lOIHdoZW4gcmVmZXJyaW5nIHRvIGFuIGVuZHBvaW50IHdoaWNoCisJCSAgICBzZW5kcyBkYXRhIHRvIHRoZSBob3N0IGZyb20gdGhlIGRldmljZS4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIFVzZSB0aGlzIG9uIGJ1bGsgb3IgaW50ZXJydXB0IGVuZHBvaW50cyB3aGljaCBoYXZlCisJCSAgICBzdGFsbGVkLCByZXR1cm5pbmcgPGVtcGhhc2lzPi1FUElQRTwvZW1waGFzaXM+IHN0YXR1cworCQkgICAgdG8gYSBkYXRhIHRyYW5zZmVyIHJlcXVlc3QuCisJCSAgICBEbyBub3QgaXNzdWUgdGhlIGNvbnRyb2wgcmVxdWVzdCBkaXJlY3RseSwgc2luY2UKKwkJICAgIHRoYXQgY291bGQgaW52YWxpZGF0ZSB0aGUgaG9zdCdzIHJlY29yZCBvZiB0aGUKKwkJICAgIGRhdGEgdG9nZ2xlLgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19DT05UUk9MPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPklzc3VlcyBhIGNvbnRyb2wgcmVxdWVzdCB0byB0aGUgZGV2aWNlLgorCQkgICAgVGhlIGlvY3RsIHBhcmFtZXRlciBwb2ludHMgdG8gYSBzdHJ1Y3R1cmUgbGlrZSB0aGlzOgorPHByb2dyYW1saXN0aW5nPnN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIgeworICAgICAgICBfX3U4ICAgYlJlcXVlc3RUeXBlOworICAgICAgICBfX3U4ICAgYlJlcXVlc3Q7CisgICAgICAgIF9fdTE2ICB3VmFsdWU7CisgICAgICAgIF9fdTE2ICB3SW5kZXg7CisgICAgICAgIF9fdTE2ICB3TGVuZ3RoOworICAgICAgICBfX3UzMiAgdGltZW91dDsgIC8qIGluIG1pbGxpc2Vjb25kcyAqLworICAgICAgICB2b2lkICAgKmRhdGE7Cit9OzwvcHJvZ3JhbWxpc3Rpbmc+CisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICBUaGUgZmlyc3QgZWlnaHQgYnl0ZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIHRoZSBjb250ZW50cworCQkgICAgb2YgdGhlIFNFVFVQIHBhY2tldCB0byBiZSBzZW50IHRvIHRoZSBkZXZpY2U7IHNlZSB0aGUKKwkJICAgIFVTQiAyLjAgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKwkJICAgIFRoZSBiUmVxdWVzdFR5cGUgdmFsdWUgaXMgY29tcG9zZWQgYnkgY29tYmluaW5nIGEKKwkJICAgIFVTQl9UWVBFXyogdmFsdWUsIGEgVVNCX0RJUl8qIHZhbHVlLCBhbmQgYQorCQkgICAgVVNCX1JFQ0lQXyogdmFsdWUgKGZyb20KKwkJICAgIDxlbXBoYXNpcz4mbHQ7bGludXgvdXNiLmgmZ3Q7PC9lbXBoYXNpcz4pLgorCQkgICAgSWYgd0xlbmd0aCBpcyBub256ZXJvLCBpdCBkZXNjcmliZXMgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YQorCQkgICAgYnVmZmVyLCB3aGljaCBpcyBlaXRoZXIgd3JpdHRlbiB0byB0aGUgZGV2aWNlCisJCSAgICAoVVNCX0RJUl9PVVQpIG9yIHJlYWQgZnJvbSB0aGUgZGV2aWNlIChVU0JfRElSX0lOKS4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIEF0IHRoaXMgd3JpdGluZywgeW91IGNhbid0IHRyYW5zZmVyIG1vcmUgdGhhbiA0IEtCeXRlcworCQkgICAgb2YgZGF0YSB0byBvciBmcm9tIGEgZGV2aWNlOyB1c2JmcyBoYXMgYSBsaW1pdCwgYW5kCisJCSAgICBzb21lIGhvc3QgY29udHJvbGxlciBkcml2ZXJzIGhhdmUgYSBsaW1pdC4KKwkJICAgIChUaGF0J3Mgbm90IHVzdWFsbHkgYSBwcm9ibGVtLikKKwkJICAgIDxlbXBoYXNpcz5BbHNvPC9lbXBoYXNpcz4gdGhlcmUncyBubyB3YXkgdG8gc2F5IGl0J3MKKwkJICAgIG5vdCBPSyB0byBnZXQgYSBzaG9ydCByZWFkIGJhY2sgZnJvbSB0aGUgZGV2aWNlLgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19SRVNFVDwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT5Eb2VzIGEgVVNCIGxldmVsIGRldmljZSByZXNldC4KKwkJICAgIFRoZSBpb2N0bCBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKwkJICAgIEFmdGVyIHRoZSByZXNldCwgdGhpcyByZWJpbmRzIGFsbCBkZXZpY2UgaW50ZXJmYWNlcy4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjx3YXJuaW5nPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPkF2b2lkIHVzaW5nIHRoaXMgY2FsbDwvZW1waGFzaXM+CisJCSAgICB1bnRpbCBzb21lIHVzYmNvcmUgYnVncyBnZXQgZml4ZWQsCisJCSAgICBzaW5jZSBpdCBkb2VzIG5vdCBmdWxseSBzeW5jaHJvbml6ZSBkZXZpY2UsIGludGVyZmFjZSwKKwkJICAgIGFuZCBkcml2ZXIgKG5vdCBqdXN0IHVzYmZzKSBzdGF0ZS4KKwkJICAgIDwvcGFyYT48L3dhcm5pbmc+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKwkgICAgCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfU0VUSU5URVJGQUNFPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPlNldHMgdGhlIGFsdGVybmF0ZSBzZXR0aW5nIGZvciBhbgorCQkgICAgaW50ZXJmYWNlLiAgVGhlIGlvY3RsIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gYQorCQkgICAgc3RydWN0dXJlIGxpa2UgdGhpczoKKzxwcm9ncmFtbGlzdGluZz5zdHJ1Y3QgdXNiZGV2ZnNfc2V0aW50ZXJmYWNlIHsKKyAgICAgICAgdW5zaWduZWQgaW50ICBpbnRlcmZhY2U7CisgICAgICAgIHVuc2lnbmVkIGludCAgYWx0c2V0dGluZzsKK307IDwvcHJvZ3JhbWxpc3Rpbmc+CisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIFRob3NlIHN0cnVjdCBtZW1iZXJzIGFyZSBmcm9tIHNvbWUgaW50ZXJmYWNlIGRlc2NyaXB0b3IKKwkJICAgIGFwcGx5aW5nIHRvIHRoZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorCQkgICAgVGhlIGludGVyZmFjZSBudW1iZXIgaXMgdGhlIGJJbnRlcmZhY2VOdW1iZXIgdmFsdWUsIGFuZAorCQkgICAgdGhlIGFsdHNldHRpbmcgbnVtYmVyIGlzIHRoZSBiQWx0ZXJuYXRlU2V0dGluZyB2YWx1ZS4KKwkJICAgIChUaGlzIHJlc2V0cyBlYWNoIGVuZHBvaW50IGluIHRoZSBpbnRlcmZhY2UuKQorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19TRVRDT05GSUdVUkFUSU9OPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPklzc3VlcyB0aGUKKwkJICAgIDxmdW5jdGlvbj51c2Jfc2V0X2NvbmZpZ3VyYXRpb248L2Z1bmN0aW9uPiBjYWxsCisJCSAgICBmb3IgdGhlIGRldmljZS4KKwkJICAgIFRoZSBwYXJhbWV0ZXIgaXMgYW4gaW50ZWdlciBob2xkaW5nIHRoZSBudW1iZXIgb2YKKwkJICAgIGEgY29uZmlndXJhdGlvbiAoYkNvbmZpZ3VyYXRpb25WYWx1ZSBmcm9tIGRlc2NyaXB0b3IpLgorCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PHdhcm5pbmc+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+QXZvaWQgdXNpbmcgdGhpcyBjYWxsPC9lbXBoYXNpcz4KKwkJICAgIHVudGlsIHNvbWUgdXNiY29yZSBidWdzIGdldCBmaXhlZCwKKwkJICAgIHNpbmNlIGl0IGRvZXMgbm90IGZ1bGx5IHN5bmNocm9uaXplIGRldmljZSwgaW50ZXJmYWNlLAorCQkgICAgYW5kIGRyaXZlciAobm90IGp1c3QgdXNiZnMpIHN0YXRlLgorCQkgICAgPC9wYXJhPjwvd2FybmluZz48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTwvdmFyaWFibGVsaXN0PgorCSAgICA8L3NlY3QyPgorCisJICAgIDxzZWN0Mj4KKwkJPHRpdGxlPkFzeW5jaHJvbm91cyBJL08gU3VwcG9ydDwvdGl0bGU+CisKKwkJPHBhcmE+QXMgbWVudGlvbmVkIGFib3ZlLCB0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSBpdCBtYXkgYmUKKwkJaW1wb3J0YW50IHRvIGluaXRpYXRlIGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBmcm9tIHVzZXIgbW9kZSBjb2RlLgorCQlUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIHBlcmlvZGljIHRyYW5zZmVycworCQkoaW50ZXJydXB0IGFuZCBpc29jaHJvbm91cyksIGJ1dCBpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKKwkJa2luZHMgb2YgVVNCIHJlcXVlc3RzIHRvby4KKwkJSW4gc3VjaCBjYXNlcywgdGhlIGFzeW5jaHJvbm91cyByZXF1ZXN0cyBkZXNjcmliZWQgaGVyZQorCQlhcmUgZXNzZW50aWFsLiAgUmF0aGVyIHRoYW4gc3VibWl0dGluZyBvbmUgcmVxdWVzdCBhbmQgaGF2aW5nCisJCXRoZSBrZXJuZWwgYmxvY2sgdW50aWwgaXQgY29tcGxldGVzLCB0aGUgYmxvY2tpbmcgaXMgc2VwYXJhdGUuCisJCTwvcGFyYT4KKworCQk8cGFyYT5UaGVzZSByZXF1ZXN0cyBhcmUgcGFja2FnZWQgaW50byBhIHN0cnVjdHVyZSB0aGF0CisJCXJlc2VtYmxlcyB0aGUgVVJCIHVzZWQgYnkga2VybmVsIGRldmljZSBkcml2ZXJzLgorCQkoTm8gUE9TSVggQXN5bmMgSS9PIHN1cHBvcnQgaGVyZSwgc29ycnkuKQorCQlJdCBpZGVudGlmaWVzIHRoZSBlbmRwb2ludCB0eXBlIChVU0JERVZGU19VUkJfVFlQRV8qKSwKKwkJZW5kcG9pbnQgKG51bWJlciwgbWFza2VkIHdpdGggVVNCX0RJUl9JTiBhcyBhcHByb3ByaWF0ZSksCisJCWJ1ZmZlciBhbmQgbGVuZ3RoLCBhbmQgYSB1c2VyICJjb250ZXh0IiB2YWx1ZSBzZXJ2aW5nIHRvCisJCXVuaXF1ZWx5IGlkZW50aWZ5IGVhY2ggcmVxdWVzdC4KKwkJKEl0J3MgdXN1YWxseSBhIHBvaW50ZXIgdG8gcGVyLXJlcXVlc3QgZGF0YS4pCisJCUZsYWdzIGNhbiBtb2RpZnkgcmVxdWVzdHMgKG5vdCBhcyBtYW55IGFzIHN1cHBvcnRlZCBmb3IKKwkJa2VybmVsIGRyaXZlcnMpLgorCQk8L3BhcmE+CisKKwkJPHBhcmE+RWFjaCByZXF1ZXN0IGNhbiBzcGVjaWZ5IGEgcmVhbHRpbWUgc2lnbmFsIG51bWJlcgorCQkoYmV0d2VlbiBTSUdSVE1JTiBhbmQgU0lHUlRNQVgsIGluY2x1c2l2ZSkgdG8gcmVxdWVzdCBhCisJCXNpZ25hbCBiZSBzZW50IHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLgorCQk8L3BhcmE+CisKKwkJPHBhcmE+V2hlbiB1c2JmcyByZXR1cm5zIHRoZXNlIHVyYnMsIHRoZSBzdGF0dXMgdmFsdWUKKwkJaXMgdXBkYXRlZCwgYW5kIHRoZSBidWZmZXIgbWF5IGhhdmUgYmVlbiBtb2RpZmllZC4KKwkJRXhjZXB0IGZvciBpc29jaHJvbm91cyB0cmFuc2ZlcnMsIHRoZSBhY3R1YWxfbGVuZ3RoIGlzCisJCXVwZGF0ZWQgdG8gc2F5IGhvdyBtYW55IGJ5dGVzIHdlcmUgdHJhbnNmZXJyZWQ7IGlmIHRoZQorCQlVU0JERVZGU19VUkJfRElTQUJMRV9TUEQgZmxhZyBpcyBzZXQKKwkJKCJzaG9ydCBwYWNrZXRzIGFyZSBub3QgT0siKSwgaWYgZmV3ZXIgYnl0ZXMgd2VyZSByZWFkCisJCXRoYW4gd2VyZSByZXF1ZXN0ZWQgdGhlbiB5b3UgZ2V0IGFuIGVycm9yIHJlcG9ydC4KKwkJPC9wYXJhPgorCis8cHJvZ3JhbWxpc3Rpbmc+c3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyB7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX2xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworfTsKKworc3RydWN0IHVzYmRldmZzX3VyYiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgIHR5cGU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50OworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnVmZmVyOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuZ3RoOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxfbGVuZ3RoOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9mcmFtZTsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3BhY2tldHM7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvdW50OworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICBzaWducjsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzZXJjb250ZXh0OworICAgICAgICBzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjICBpc29fZnJhbWVfZGVzY1tdOworfTs8L3Byb2dyYW1saXN0aW5nPgorCisJCTxwYXJhPiBGb3IgdGhlc2UgYXN5bmNocm9ub3VzIHJlcXVlc3RzLCB0aGUgZmlsZSBtb2RpZmljYXRpb24KKwkJdGltZSByZWZsZWN0cyB3aGVuIHRoZSByZXF1ZXN0IHdhcyBpbml0aWF0ZWQuCisJCVRoaXMgY29udHJhc3RzIHdpdGggdGhlaXIgdXNlIHdpdGggdGhlIHN5bmNocm9ub3VzIHJlcXVlc3RzLAorCQl3aGVyZSBpdCByZWZsZWN0cyB3aGVuIHJlcXVlc3RzIGNvbXBsZXRlLgorCQk8L3BhcmE+CisKKwkJPHZhcmlhYmxlbGlzdD4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX0RJU0NBUkRVUkI8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+VEJTPC9lbXBoYXNpcz4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19ESVNDU0lHTkFMPC90ZXJtPgorCQkgICAgPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgPGVtcGhhc2lzPlRCUzwvZW1waGFzaXM+CisJCSAgICBGaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5vdCB1cGRhdGVkIGJ5IHRoaXMgcmVxdWVzdC4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTx2YXJsaXN0ZW50cnk+PHRlcm0+VVNCREVWRlNfUkVBUFVSQjwvdGVybT4KKwkJICAgIDxsaXN0aXRlbT48cGFyYT4KKwkJICAgIDxlbXBoYXNpcz5UQlM8L2VtcGhhc2lzPgorCQkgICAgRmlsZSBtb2RpZmljYXRpb24gdGltZSBpcyBub3QgdXBkYXRlZCBieSB0aGlzIHJlcXVlc3QuCisJCSAgICA8L3BhcmE+PHBhcmE+CisJCSAgICA8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworCQk8dmFybGlzdGVudHJ5Pjx0ZXJtPlVTQkRFVkZTX1JFQVBVUkJOREVMQVk8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+VEJTPC9lbXBoYXNpcz4KKwkJICAgIEZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbm90IHVwZGF0ZWQgYnkgdGhpcyByZXF1ZXN0LgorCQkgICAgPC9wYXJhPjxwYXJhPgorCQkgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+CisKKwkJPHZhcmxpc3RlbnRyeT48dGVybT5VU0JERVZGU19TVUJNSVRVUkI8L3Rlcm0+CisJCSAgICA8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICA8ZW1waGFzaXM+VEJTPC9lbXBoYXNpcz4KKwkJICAgIDwvcGFyYT48cGFyYT4KKwkJICAgIDwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisJCTwvdmFyaWFibGVsaXN0PgorCSAgICA8L3NlY3QyPgorCisJPC9zZWN0MT4KKworICAgIDwvY2hhcHRlcj4KKworPC9ib29rPgorPCEtLSB2aW06c3ludGF4PXNnbWw6c3c9NAorLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlhLWF1ZGlvLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlhLWF1ZGlvLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlNjQyMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWEtYXVkaW8udG1wbApAQCAtMCwwICsxLDU5NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJWaWFBdWRpb0d1aWRlIj4KKyA8Ym9va2luZm8+CisgIDx0aXRsZT5WaWEgNjg2IEF1ZGlvIERyaXZlciBmb3IgTGludXg8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPkplZmY8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5HYXJ6aWs8L3N1cm5hbWU+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MTk5OS0yMDAxPC95ZWFyPgorICAgPGhvbGRlcj5KZWZmIEdhcnppazwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICA8cGFyYT4KKyAgCVRoZSBWaWEgVlQ4MkM2ODZBICJzdXBlciBzb3V0aGJyaWRnZSIgY2hpcHMgY29udGFpbgorCUFDOTctY29tcGF0aWJsZSBhdWRpbyBsb2dpYyB3aGljaCBmZWF0dXJlcyBkdWFsIDE2LWJpdCBzdGVyZW8KKwlQQ00gc291bmQgY2hhbm5lbHMgKGZ1bGwgZHVwbGV4KSwgcGx1cyBhIHRoaXJkIFBDTSBjaGFubmVsIGludGVuZGVkIGZvciB1c2UKKwlpbiBoYXJkd2FyZS1hc3Npc3RlZCBGTSBzeW50aGVzaXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIAlUaGUgY3VycmVudCBMaW51eCBrZXJuZWwgYXVkaW8gZHJpdmVyIGZvciB0aGlzIGZhbWlseSBvZiBjaGlwcworCXN1cHBvcnRzIGF1ZGlvIHBsYXliYWNrIGFuZCByZWNvcmRpbmcsIGJ1dCBoYXJkd2FyZS1hc3Npc3RlZAorCUZNIGZlYXR1cmVzLCBhbmQgaGFyZHdhcmUgYnVmZmVyIGRpcmVjdC1hY2Nlc3MgKG1tYXApCisJc3VwcG9ydCBhcmUgbm90IHlldCBhdmFpbGFibGUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIAlUaGlzIGRyaXZlciBzdXBwb3J0cyBhbnkgTGludXgga2VybmVsIHZlcnNpb24gYWZ0ZXIgMi40LjEwLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIHRoZSBtYWlsaW5nIGxpc3QgPGVtYWlsPmxpbnV4LXZpYUBndGYub3JnPC9lbWFpbD4uCisJVG8gc3Vic2NyaWJlLCBlLW1haWwgPGVtYWlsPm1ham9yZG9tb0BndGYub3JnPC9lbWFpbD4gd2l0aAorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKwlzdWJzY3JpYmUgbGludXgtdmlhCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorCWluIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJpbnN0YWxsIj4KKyAgICAgIDx0aXRsZT5Ecml2ZXIgSW5zdGFsbGF0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgIAlUbyB1c2UgdGhpcyBhdWRpbyBkcml2ZXIsIHNlbGVjdCB0aGUKKwlDT05GSUdfU09VTkRfVklBODJDWFhYIG9wdGlvbiBpbiB0aGUgc2VjdGlvbiBTb3VuZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uCisJRm9sbG93IHRoZSB1c3VhbCBrZXJuZWwgcHJvY2VkdXJlcyBmb3IgcmVidWlsZGluZyB0aGUga2VybmVsLAorCW9yIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIGRyaXZlciBtb2R1bGVzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAJVG8gbWFrZSB0aGlzIGRyaXZlciB0aGUgZGVmYXVsdCBhdWRpbyBkcml2ZXIsIHlvdSBjYW4gYWRkIHRoZQorCWZvbGxvd2luZyB0byB5b3VyIC9ldGMvY29uZi5tb2R1bGVzIGZpbGU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCWFsaWFzIHNvdW5kIHZpYTgyY3h4eF9hdWRpbworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgCU5vdGUgdGhhdCBzb3VuZGNvcmUgYW5kIGFjOTdfY29kZWMgc3VwcG9ydCBtb2R1bGVzCisJYXJlIGFsc28gcmVxdWlyZWQgZm9yIHdvcmtpbmcgYXVkaW8sIGluIGFkZGl0aW9uIHRvCisJdGhlIHZpYTgyY3h4eF9hdWRpbyBtb2R1bGUgaXRzZWxmLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJyZXBvcnRidWciPgorICAgICAgPHRpdGxlPlN1Ym1pdHRpbmcgYSBidWcgcmVwb3J0PC90aXRsZT4KKyAgPHNlY3QxIGlkPSJidWdyZXBkZXNjIj48dGl0bGU+RGVzY3JpcHRpb24gb2YgcHJvYmxlbTwvdGl0bGU+CisgIDxwYXJhPgorCURlc2NyaWJlIHRoZSBhcHBsaWNhdGlvbiB5b3Ugd2VyZSB1c2luZyB0byBwbGF5L3JlY29yZCBzb3VuZCwgYW5kIGhvdworCXRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbS4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImJ1Z3JlcGRpYWciPjx0aXRsZT5EaWFnbm9zdGljIG91dHB1dDwvdGl0bGU+CisgIDxwYXJhPgorCU9idGFpbiB0aGUgdmlhLWF1ZGlvLWRpYWcgZGlhZ25vc3RpY3MgcHJvZ3JhbSBmcm9tCisJaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9na2VybmVsLyBhbmQgcHJvdmlkZSBhIGR1bXAgb2YgdGhlCisJYXVkaW8gY2hpcCdzIHJlZ2lzdGVycyB3aGlsZSB0aGUgcHJvYmxlbSBpcyBvY2N1cnJpbmcuICBTYW1wbGUgY29tbWFuZCBsaW5lOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKwkuL3ZpYS1hdWRpby1kaWFnIC1hcHMgPiBkaWFnLW91dHB1dC50eHQKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJidWdyZXBkZWJ1ZyI+PHRpdGxlPkRyaXZlciBkZWJ1ZyBvdXRwdXQ8L3RpdGxlPgorICA8cGFyYT4KKwlEZWZpbmUgPGNvbnN0YW50PlZJQV9ERUJVRzwvY29uc3RhbnQ+IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRyaXZlciwgdGhlbiBjYXB0dXJlIGFuZCBlbWFpbAorCXRoZSBrZXJuZWwgbG9nIG91dHB1dC4gIFRoaXMgY2FuIGJlIHZpZXdlZCBpbiB0aGUgc3lzdGVtIGtlcm5lbCBsb2cgKGlmCisJZW5hYmxlZCksIG9yIHZpYSB0aGUgZG1lc2cgcHJvZ3JhbS4gIFNhbXBsZSBjb21tYW5kIGxpbmU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCWRtZXNnID4gL3RtcC9kbWVzZy1vdXRwdXQudHh0CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0iYnVncmVwcHJpbnRrIj48dGl0bGU+QmlnZ2VyIGtlcm5lbCBtZXNzYWdlIGJ1ZmZlcjwvdGl0bGU+CisgIDxwYXJhPgorCUlmIHlvdSB3aXNoIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgZGlzcGxheWVkIGJ5IGRtZXNnLCB0aGVuCisJY2hhbmdlIHRoZSA8Y29uc3RhbnQ+TE9HX0JVRl9MRU48L2NvbnN0YW50PiBtYWNybyBhdCB0aGUgdG9wIG9mIGxpbnV4L2tlcm5lbC9wcmludGsuYywgcmVjb21waWxlCisJeW91ciBrZXJuZWwsIGFuZCBwYXNzIHRoZSA8Y29uc3RhbnQ+TE9HX0JVRl9MRU48L2NvbnN0YW50PiB2YWx1ZSB0byBkbWVzZy4gIFNhbXBsZSBjb21tYW5kIGxpbmUgd2l0aAorCTxjb25zdGFudD5MT0dfQlVGX0xFTjwvY29uc3RhbnQ+ID09IDMyNzY4OgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKwlkbWVzZyAtcyAzMjc2OCA+IC90bXAvZG1lc2ctb3V0cHV0LnR4dAorICA8L3Byb2dyYW1saXN0aW5nPgorICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iYnVncyI+CisgICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+CisgIDxwYXJhPgorICA8dmFyaWFibGVsaXN0PgorICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+TG93IHZvbHVtZTwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisJVm9sdW1lIHRvbyBsb3cgb24gbWFueSBzeXN0ZW1zLiAgV29ya2Fyb3VuZDogIHVzZSBtaXhlciBwcm9ncmFtCisJc3VjaCBhcyB4bWl4ZXIgdG8gaW5jcmVhc2Ugdm9sdW1lLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCQorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0idGhhbmtzIj4KKyAgICAgIDx0aXRsZT5UaGFua3M8L3RpdGxlPgorICA8cGFyYT4KKwlWaWEgZm9yIHByb3ZpZGluZyBlLW1haWwgc3VwcG9ydCwgc3BlY3MsIGFuZCBOREEnZCBzb3VyY2UgY29kZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlNYW5kcmFrZVNvZnQgZm9yIHByb3ZpZGluZyBoYWNraW5nIHRpbWUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJQUM5NyBtaXhlciBpbnRlcmZhY2UgZml4ZXMgYW5kIGRlYnVnZ2luZyBieSBSb24gQ2VtZXIgPGVtYWlsPnJvbmNlbWVyQGd0ZS5uZXQ8L2VtYWlsPi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlSdWkgU291c2EgPGVtYWlsPnJ1aS5zb3VzYUBjb25leGFudC5jb208L2VtYWlsPiwgZm9yIGJ1Z2ZpeGluZworCU1NQVAgc3VwcG9ydCwgYW5kIHNldmVyYWwgb3RoZXIgbm90YWJsZSBmaXhlcyB0aGF0IHJlc3VsdGVkIGZyb20KKwloaXMgaGFyZCB3b3JrIGFuZCB0ZXN0aW5nLgorICA8L3BhcmE+CisgIDxwYXJhPgorCUFkcmlhbiBDb3ggPGVtYWlsPmFkcmlhbkBodW1ib2xkdC5jby51azwvZW1haWw+LCBmb3IgYnVnZml4aW5nCisJTU1BUCBzdXBwb3J0LCBhbmQgc2V2ZXJhbCBvdGhlciBub3RhYmxlIGZpeGVzIHRoYXQgcmVzdWx0ZWQgZnJvbQorCWhpcyBoYXJkIHdvcmsgYW5kIHRlc3RpbmcuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgIAlUaG9tYXMgU2FpbGVyIGZvciBmdXJ0aGVyIGJ1Z2ZpeGVzLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJub3RlcyI+CisgICAgIDx0aXRsZT5SYW5kb20gTm90ZXM8L3RpdGxlPgorICA8cGFyYT4KKwlUd28gL3Byb2MgcHNldWRvLWZpbGVzIHByb3ZpZGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgZ2VuZXJhbGx5CisJbm90IHVzZWZ1bCB0byBtb3N0IHVzZXJzLiAgUG93ZXIgdXNlcnMgY2FuIGRpc2FibGUgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWF9QUk9DRlMsCisJYW5kIHJlbW92ZSB0aGUgL3Byb2Mgc3VwcG9ydCBjb2RlLiAgT25jZQorCXZlcnNpb24gMi4wLjAgaXMgcmVsZWFzZWQsIHRoZSAvcHJvYyBzdXBwb3J0IGNvZGUgd2lsbCBiZSBkaXNhYmxlZCBieQorCWRlZmF1bHQuICBBdmFpbGFibGUgL3Byb2MgcHNldWRvLWZpbGVzOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKwkvcHJvYy9kcml2ZXIvdmlhLzAvaW5mbworCS9wcm9jL2RyaXZlci92aWEvMC9hYzk3CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorCVRoaXMgZHJpdmVyIGJ5IGRlZmF1bHQgc3VwcG9ydHMgYWxsIFBDSSBhdWRpbyBkZXZpY2VzIHdoaWNoIHJlcG9ydAorCWEgdmVuZG9yIGlkIG9mIDB4MTEwNiwgYW5kIGEgZGV2aWNlIGlkIG9mIDB4MzA1OC4gIFN1YnN5c3RlbSB2ZW5kb3IKKwlhbmQgZGV2aWNlIGlkcyBhcmUgbm90IGV4YW1pbmVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorCUdOVSBpbmRlbnQgZm9ybWF0dGluZyBvcHRpb25zOgorICA8cHJvZ3JhbWxpc3Rpbmc+Cista3IgLWk4IC10czggLWJyIC1jZSAtYmFwIC1zb2IgLWw4MCAtcGNzIC1jcyAtc3MgLWJzIC1kaTEgLW5iYyAtbHAgLXBzbAorICA8L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisgIDxwYXJhPgorCVZpYSBoYXMgZ3JhY2lvdXNseSBkb25hdGVkIGUtbWFpbCBzdXBwb3J0IGFuZCBzb3VyY2UgY29kZSB0byBoZWxwIGZ1cnRoZXIKKwl0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIuICBUaGVpciBhc3Npc3RhbmNlIGhhcyBiZWVuIGludmFsdWFibGUKKwlpbiB0aGUgZGVzaWduIGFuZCBjb2Rpbmcgb2YgdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiB0aGlzIGRyaXZlci4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgVmlhIGF1ZGlvIGNoaXAgYXBwYXJlbnRseSBwcm92aWRlcyBhIHNlY29uZCBQQ00gc2NhdHRlci1nYXRoZXIKKwlETUEgY2hhbm5lbCBqdXN0IGZvciBGTSBkYXRhLCBidXQgZG9lcyBub3QgaGF2ZSBhIGZ1bGwgaGFyZHdhcmUgTUlESQorCXByb2Nlc3Nvci4gIEkgaGF2ZW4ndCBwdXQgbXVjaCB0aG91Z2h0IHRvd2FyZHMgYSBzb2x1dGlvbiBoZXJlLCBidXQgaXQKKwltaWdodCBpbnZvbHZlIHVzaW5nIFNvZnRPU1MgbWlkaSB3YXZlIHRhYmxlLCBvciBzaW1wbHkgZGlzYWJsaW5nIE1JREkKKwlzdXBwb3J0IGFsdG9nZXRoZXIgYW5kIHVzaW5nIHRoZSBGTSBQQ00gY2hhbm5lbCBhcyBhIHNlY29uZCAoaW5wdXQ/IG91dHB1dD8pCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJjaGFuZ2Vsb2ciPgorICAgICAgPHRpdGxlPkRyaXZlciBDaGFuZ2VMb2c8L3RpdGxlPgorCis8c2VjdDEgaWQ9InZlcnNpb24xOTEiPjx0aXRsZT4KK1ZlcnNpb24gMS45LjEKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgRFNQIHJlYWQvd3JpdGUgYnVnZml4ZXMgZnJvbSBUaG9tYXMgU2FpbGVyLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBBZGQgbmV3IFBDSSBpZCBmb3Igc2luZ2xlLWNoYW5uZWwgdXNlIG9mIFZpYSA4MjMzLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBPdGhlciBidWcgZml4ZXMsIHR3ZWFrcywgbmV3IGlvY3Rscy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTExNSI+PHRpdGxlPgorVmVyc2lvbiAxLjEuMTUKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgU3VwcG9ydCBmb3IgdmFyaWFibGUgZnJhZ21lbnQgc2l6ZSBhbmQgdmFyaWFibGUgZnJhZ21lbnQgbnVtYmVyIChSdWkKKyAgICBTb3VzYSkKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgRml4ZXMgZm9yIHRoZSBTUEVFRCwgU1RFUkVPLCBDSEFOTkVMUywgRk1UIGlvY3RscyB3aGVuIGluIHJlYWQgJmFtcDsKKyAgICB3cml0ZSBtb2RlIChSdWkgU291c2EpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIE1tYXBlZCBzb3VuZCBpcyBub3cgZnVsbHkgZnVuY3Rpb25hbC4gKFJ1aSBTb3VzYSkKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgTWFrZSBzdXJlIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGJlZm9yZSByZWFkaW5nIGFueSBvZiBpdHMgUENJCisgICAgY29uZmlnIGluZm9ybWF0aW9uLiAoZml4ZXMgcG90ZW50aWFsIGhvdHBsdWcgcHJvYmxlbXMpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIENsZWFuIHVwIGNvZGUgYSBiaXQgYW5kIGFkZCBtb3JlIGludGVybmFsIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIEFDOTcgY29kZWMgYWNjZXNzIGZpeGVzIChBZHJpYW4gQ294KQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBCaWcgZW5kaWFuIGZpeGVzIChBZHJpYW4gQ294KQorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBNSURJIHN1cHBvcnQgKEFkcmlhbiBDb3gpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIERldGVjdCBhbmQgcmVwb3J0IGxvY2tlZC1yYXRlIEFDOTcgY29kZWNzLiAgSWYgeW91ciBoYXJkd2FyZSBvbmx5CisgICAgc3VwcG9ydHMgNDhLaHogKGxvY2tlZCByYXRlKSwgdGhlbiB5b3VyIHJlY29yZGluZy9wbGF5YmFjayBzb2Z0d2FyZQorICAgIG11c3QgdXBzYW1wbGUgb3IgZG93bnNhbXBsZSBhY2NvcmRpbmdseS4gIFRoZSBoYXJkd2FyZSBjYW5ub3QgZG8gaXQuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFVzZSBuZXcgcGNpX3JlcXVlc3RfcmVnaW9ucyBhbmQgcGNpX2Rpc2FibGVfZGV2aWNlIGZ1bmN0aW9ucyBpbgorICAgIGtlcm5lbCAyLjQuNi4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTExNCI+PHRpdGxlPgorVmVyc2lvbiAxLjEuMTQKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgVXNlIFZNX1JFU0VSVkUgd2hlbiBhdmFpbGFibGUsIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBwYWdlIGZhdWx0cy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExMTIiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjEyCis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIG1tYXAgYnVnIGZpeGVzIGZyb20gTGludXMuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InZlcnNpb24xMTExIj48dGl0bGU+CitWZXJzaW9uIDEuMS4xMQorPC90aXRsZT4KKyAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBNYW55IG1vcmUgYnVnIGZpeGVzLiAgbW1hcCBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBtYXkgc3RpbGwgYmUgYnVnZ3kuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFVzZXMgbmV3IGFuZCBzcGlmZnkgbWV0aG9kIG9mIG1tYXAnaW5nIHRoZSBETUEgYnVmZmVyLCBiYXNlZAorICAgIG9uIGEgc3VnZ2VzdGlvbiBmcm9tIExpbnVzLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTExMCI+PHRpdGxlPgorVmVyc2lvbiAxLjEuMTAKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgTWFueSBidWcgZml4ZXMuICBtbWFwIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IG1heSBzdGlsbCBiZSBidWdneS4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExOSI+PHRpdGxlPgorVmVyc2lvbiAxLjEuOQorPC90aXRsZT4KKyAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBSZWRlc2lnbiBhbmQgcmV3cml0ZSBhdWRpbyBwbGF5YmFjayBpbXBsZW1lbnRhdGlvbi4gIChmYXN0ZXIgYW5kIHNtYWxsZXIsIGhvcGVmdWxseSkKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgSW1wbGVtZW50IHJlY29yZGluZyBhbmQgZnVsbCBkdXBsZXggKERTUF9DQVBfRFVQTEVYKSBzdXBwb3J0LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBNYWtlIHByb2NmcyBzdXBwb3J0IG9wdGlvbmFsLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBRdWljayBpbnRlcnJ1cHQgc3RhdHVzIGNoZWNrLCB0byBsZXNzZW4gb3ZlcmhlYWQgaW4gaW50ZXJydXB0CisgICAgc2hhcmluZyBzaXR1YXRpb25zLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBBZGQgbW1hcCgyKSBzdXBwb3J0LiAgRGlzYWJsZWQgZm9yIG5vdywgaXQgaXMgc3RpbGwgYnVnZ3kgYW5kIGV4cGVyaW1lbnRhbC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgU3Vycm91bmQgYWxsIHN5c2NhbGxzIHdpdGggYSBzZW1hcGhvcmUgZm9yIGNoZWFwIGFuZCBlYXN5IFNNUCBwcm90ZWN0aW9uLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBGaXggYnVnIGluIGNoYW5uZWwgc2h1dGRvd24gKGhhcmR3YXJlIGNoYW5uZWwgcmVzZXQpIGNvZGUuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBzcGlubG9ja3MgKGJldHRlciBwZXJmb3JtYW5jZSkuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIEVsaW1pbmF0ZSAidW5rbm93biBBRk1UIiBtZXNzYWdlIGJ5IHVzaW5nIGEgZGlmZmVyZW50IG1ldGhvZAorICAgIG9mIHNlbGVjdGluZyB0aGUgYmVzdCBBRk1UX3h4eCBzb3VuZCBzYW1wbGUgZm9ybWF0IGZvciB1c2UuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFN1cHBvcnQgZm9yIHJlYWx0aW1lIGhhcmR3YXJlIHBvaW50ZXIgcG9zaXRpb24gcmVwb3J0aW5nCisgICAgKERTUF9DQVBfUkVBTFRJTUUsIFNORENUTF9EU1BfR0VUeFBUUiBpb2N0bHMpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFN1cHBvcnQgZm9yIGNhcHR1cmUvcGxheWJhY2sgdHJpZ2dlcmluZworICAgIChEU1BfQ0FQX1RSSUdHRVIsIFNORENUTF9EU1BfU0VUVFJJR0dFUiBpb2N0bHMpCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFNORENUTF9EU1BfU0VURFVQTEVYIGFuZCBTTkRDVExfRFNQX1BPU1QgaW9jdGxzIG5vdyBoYW5kbGVkLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICBSZXdyaXRlIG9wZW4oMikgYW5kIGNsb3NlKDIpIGxvZ2ljIHRvIGFsbG93IG9ubHkgb25lIHVzZXIgYXQKKyAgICBhIHRpbWUuICBBbGwgb3RoZXIgb3BlbigyKSBhdHRlbXB0cyB3aWxsIHNsZWVwIHVudGlsIHRoZXkgc3VjY2VlZC4KKyAgICBGSVhNRTogb3BlbihPX1JET05MWSkgYW5kIG9wZW4oT19XUk9OTFkpIHNob3VsZCBiZSBhbGxvd2VkIHRvIHN1Y2NlZWQuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIFJldmlld2VkIGNvZGUgdG8gZW5zdXJlIHRoYXQgU01QIGFuZCBtdWx0aXBsZSBhdWRpbyBkZXZpY2VzCisgICAgYXJlIGZ1bGx5IHN1cHBvcnRlZC4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorCisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTE4Ij48dGl0bGU+CitWZXJzaW9uIDEuMS44Cis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgIAlDbGVhbiB1cCBpbnRlcnJ1cHQgaGFuZGxlciBvdXRwdXQuICBGaXhlcyB0aGUgZm9sbG93aW5nIGtlcm5lbCBlcnJvciBtZXNzYWdlOgorICAgIDwvcGFyYT4KKyAgCTxwcm9ncmFtbGlzdGluZz4KKwl1bmhhbmRsZWQgaW50ZXJydXB0IC4uLgorICAJPC9wcm9ncmFtbGlzdGluZz4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAJQ29udmVydCBkb2N1bWVudGF0aW9uIHRvIERvY0Jvb2ssIHNvIHRoYXQgUERGLCBIVE1MIGFuZCBQb3N0U2NyaXB0ICgucHMpIG91dHB1dCBpcyByZWFkaWx5CisJYXZhaWxhYmxlLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgPC9pdGVtaXplZGxpc3Q+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InZlcnNpb24xMTciPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjcKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgRml4IG1vZHVsZSB1bmxvYWQgYnVnIHdoZXJlIG1peGVyIGRldmljZSBsZWZ0IHJlZ2lzdGVyZWQKKyAgYWZ0ZXIgZHJpdmVyIGV4aXQKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICA8L2l0ZW1pemVkbGlzdD4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0idmVyc2lvbjExNiI+PHRpdGxlPgorVmVyc2lvbiAxLjEuNgorPC90aXRsZT4KKyAgPGl0ZW1pemVkbGlzdCBzcGFjaW5nPSJjb21wYWN0Ij4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBSZXdyaXRlIHZpYV9zZXRfcmF0ZSB0byBtaW1pYyBBTFNBIGJhc2ljIEFDOTcgcmF0ZSBzZXR0aW5nCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBSZW1vdmUgbXVjaCBkZWFkIGNvZGUKKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVtPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorIENvbXBsZXRlIHNwaW5fbG9ja19pcnFzYXZlIC0+IHNwaW5fbG9ja19pcnEgY29udmVyc2lvbiBpbiB2aWFfZHNwX2lvY3RsCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBGaXggYnVpbGQgcHJvYmxlbSBpbiB2aWFfZHNwX2lvY3RsCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBPcHRpbWl6ZSBpbmNsdWRlZCBoZWFkZXJzIHRvIGVsaW1pbmF0ZSBoZWFkZXJzIGZvdW5kIGluIGxpbnV4L3NvdW5kCisJPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgPC9pdGVtaXplZGxpc3Q+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InZlcnNpb24xMTUiPjx0aXRsZT4KK1ZlcnNpb24gMS4xLjUKKzwvdGl0bGU+CisgIDxpdGVtaXplZGxpc3Qgc3BhY2luZz0iY29tcGFjdCI+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgRGlzYWJsZSBzb21lIG92ZXJseS12ZXJib3NlIGRlYnVnZ2luZyBjb2RlCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBSZW1vdmUgdW5uZWNlc3Nhcnkgc291bmQgbG9ja3MKKyAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgRml4IHNvbWUgaW9jdGxzIGZvciBiZXR0ZXIgdGltZSByZXNvbHV0aW9uCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyBCZWdpbiBzcGluX2xvY2tfaXJxc2F2ZSAtPiBzcGluX2xvY2tfaXJxIGNvbnZlcnNpb24gaW4gdmlhX2RzcF9pb2N0bAorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ2ZXJzaW9uMTE0Ij48dGl0bGU+CitWZXJzaW9uIDEuMS40Cis8L3RpdGxlPgorICA8aXRlbWl6ZWRsaXN0IHNwYWNpbmc9ImNvbXBhY3QiPgorICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorIENvbXBsZXRlZCByZXdyaXRlIG9mIGRyaXZlci4gIEVsaW1pbmF0ZWQgU291bmRCbGFzdGVyIGNvbXBhdGliaWxpdHkKKyAgY29tcGxldGVseSwgYW5kIG5vdyB1c2VzIHRoZSBtdWNoLWZhc3RlciBzY2F0dGVyLWdhdGhlciBETUEgZW5naW5lLgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisgIDwvaXRlbWl6ZWRsaXN0PgorPC9zZWN0MT4KKworICA8L2NoYXB0ZXI+CisgIAorICA8Y2hhcHRlciBpZD0iaW50ZnVuY3Rpb25zIj4KKyAgICAgPHRpdGxlPkludGVybmFsIEZ1bmN0aW9uczwvdGl0bGU+CishSXNvdW5kL29zcy92aWE4MmN4eHhfYXVkaW8uYworICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjNmM4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWRlb2Jvb2sudG1wbApAQCAtMCwwICsxLDE2NjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iVjRMR3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlZpZGVvNExpbnV4IFByb2dyYW1taW5nPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5BbGFuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+Q294PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+YWxhbkByZWRoYXQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMDwveWVhcj4KKyAgIDxob2xkZXI+QWxhbiBDb3g8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIFBhcnRzIG9mIHRoaXMgZG9jdW1lbnQgZmlyc3QgYXBwZWFyZWQgaW4gTGludXggTWFnYXppbmUgdW5kZXIgYQorICAgICAgICBuaW5ldHkgZGF5IGV4Y2x1c2l2aXR5LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBWaWRlbzRMaW51eCBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGEgY29tbW9uIHByb2dyYW1taW5nIGludGVyZmFjZQorICAgICAgICBmb3IgdGhlIG1hbnkgVFYgYW5kIGNhcHR1cmUgY2FyZHMgbm93IG9uIHRoZSBtYXJrZXQsIGFzIHdlbGwgYXMKKyAgICAgICAgcGFyYWxsZWwgcG9ydCBhbmQgVVNCIHZpZGVvIGNhbWVyYXMuIFJhZGlvLCB0ZWxldGV4dCBkZWNvZGVycyBhbmQKKyAgICAgICAgdmVydGljYWwgYmxhbmtpbmcgZGF0YSBpbnRlcmZhY2VzIGFyZSBhbHNvIHByb3ZpZGVkLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXIgaWQ9InJhZGlvIj4KKyAgICAgICAgPHRpdGxlPlJhZGlvIERldmljZXM8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIGEgd2lkZSB2YXJpZXR5IG9mIHJhZGlvIGludGVyZmFjZXMgYXZhaWxhYmxlIGZvciBQQydzLCBhbmQgdGhlc2UKKyAgICAgICAgYXJlIGdlbmVyYWxseSB2ZXJ5IHNpbXBsZSB0byBwcm9ncmFtLiBUaGUgYmlnZ2VzdCBwcm9ibGVtIHdpdGggc3VwcG9ydGluZworICAgICAgICBzdWNoIGRldmljZXMgaXMgbm9ybWFsbHkgZXh0cmFjdGluZyBkb2N1bWVudGF0aW9uIGZyb20gdGhlIHZlbmRvci4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIHJhZGlvIGludGVyZmFjZSBzdXBwb3J0cyBhIHNpbXBsZSBzZXQgb2YgY29udHJvbCBpb2N0bHMgc3RhbmRhcmRpc2VkCisgICAgICAgIGFjcm9zcyBhbGwgcmFkaW8gYW5kIHR2IGludGVyZmFjZXMuIEl0IGRvZXMgbm90IHN1cHBvcnQgcmVhZCBvciB3cml0ZSwgd2hpY2gKKyAgICAgICAgYXJlIHVzZWQgZm9yIHZpZGVvIHN0cmVhbXMuIFRoZSByZWFzb24gcmFkaW8gY2FyZHMgZG8gbm90IGFsbG93IHlvdSB0byByZWFkCisgICAgICAgIHRoZSBhdWRpbyBzdHJlYW0gaW50byBhbiBhcHBsaWNhdGlvbiBpcyB0aGF0IHdpdGhvdXQgZXhjZXB0aW9uIHRoZXkgcHJvdmlkZQorICAgICAgICBhIGNvbm5lY3Rpb24gb24gdG8gYSBzb3VuZGNhcmQuIFNvdW5kY2FyZHMgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGUgcmFkaW8KKyAgICAgICAgZGF0YSBqdXN0IGZpbmUuIAorICA8L3BhcmE+CisgIDxzZWN0MSBpZD0icmVnaXN0ZXJyYWRpbyI+CisgIDx0aXRsZT5SZWdpc3RlcmluZyBSYWRpbyBEZXZpY2VzPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBWaWRlbzRsaW51eCBjb3JlIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgcmVnaXN0ZXJpbmcgZGV2aWNlcy4gVGhlCisgICAgICAgIGZpcnN0IHN0ZXAgaW4gd3JpdGluZyBvdXIgcmFkaW8gY2FyZCBkcml2ZXIgaXMgdG8gcmVnaXN0ZXIgaXQuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG15X3JhZGlvCit7CisgICAgICAgICJNeSByYWRpbyIsCisgICAgICAgIFZJRF9UWVBFX1RVTkVSLAorICAgICAgICBWSURfSEFSRFdBUkVfTVlSQURJTywKKyAgICAgICAgcmFkaW9fb3Blbi4KKyAgICAgICAgcmFkaW9fY2xvc2UsCisgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG5vIHJlYWQgKi8KKyAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIG5vIHdyaXRlICovCisgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG5vIHBvbGwgKi8KKyAgICAgICAgcmFkaW9faW9jdGwsCisgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG5vIHNwZWNpYWwgaW5pdCBmdW5jdGlvbiAqLworICAgICAgICBOVUxMICAgICAgICAgICAgICAgIC8qIG5vIHByaXZhdGUgZGF0YSAqLworfTsKKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGlzIGRlY2xhcmVzIG91ciB2aWRlbzRsaW51eCBkZXZpY2UgZHJpdmVyIGludGVyZmFjZS4gVGhlIFZJRF9UWVBFXyB2YWx1ZQorICAgICAgICBkZWZpbmVzIHdoYXQga2luZCBvZiBhbiBpbnRlcmZhY2Ugd2UgYXJlLCBhbmQgZGVmaW5lcyBiYXNpYyBjYXBhYmlsaXRpZXMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBvbmx5IGRlZmluZWQgdmFsdWUgcmVsZXZhbnQgZm9yIGEgcmFkaW8gY2FyZCBpcyBWSURfVFlQRV9UVU5FUiB3aGljaAorICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIGNhbiBiZSB0dW5lZC4gQ2xlYXJseSBvdXIgcmFkaW8gaXMgZ29pbmcgdG8gaGF2ZSBzb21lCisgICAgICAgIHdheSB0byBjaGFuZ2UgY2hhbm5lbCBzbyBpdCBpcyB0dW5lYWJsZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIFZJRF9IQVJEV0FSRV8gdHlwZXMgYXJlIHVuaXF1ZSB0byBlYWNoIGRldmljZS4gTnVtYmVycyBhcmUgYXNzaWduZWQgYnkKKyAgICAgICAgPGVtYWlsPmFsYW5AcmVkaGF0LmNvbTwvZW1haWw+IHdoZW4gZGV2aWNlIGRyaXZlcnMgYXJlIGdvaW5nIHRvIGJlIHJlbGVhc2VkLiBVbnRpbCB0aGVuIHlvdQorICAgICAgICBjYW4gcHVsbCBhIHN1aXRhYmx5IGxhcmdlIG51bWJlciBvdXQgb2YgeW91ciBoYXQgYW5kIHVzZSBpdC4gMTAwMDAgc2hvdWxkIGJlCisgICAgICAgIHNhZmUgZm9yIGEgdmVyeSBsb25nIHRpbWUgZXZlbiBhbGxvd2luZyBmb3IgdGhlIGh1Z2UgbnVtYmVyIG9mIHZlbmRvcnMKKyAgICAgICAgbWFraW5nIG5ldyBhbmQgZGlmZmVyZW50IHJhZGlvIGNhcmRzIGF0IHRoZSBtb21lbnQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFdlIGRlY2xhcmUgYW4gb3BlbiBhbmQgY2xvc2Ugcm91dGluZSwgYnV0IHdlIGRvIG5vdCBuZWVkIHJlYWQgb3Igd3JpdGUsCisgICAgICAgIHdoaWNoIGFyZSB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIHZpZGVvIGRhdGEgdG8gb3IgZnJvbSB0aGUgY2FyZCBpdHNlbGYuIEFzCisgICAgICAgIHdlIGhhdmUgbm8gcmVhZCBvciB3cml0ZSB0aGVyZSBpcyBubyBwb2xsIGZ1bmN0aW9uLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgcHJpdmF0ZSBpbml0aWFsaXNlIGZ1bmN0aW9uIGlzIHJ1biB3aGVuIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gSW4KKyAgICAgICAgdGhpcyBkcml2ZXIgd2UndmUgYWxyZWFkeSBkb25lIGFsbCB0aGUgd29yayBuZWVkZWQuIFRoZSBmaW5hbCBwb2ludGVyIGlzIGEKKyAgICAgICAgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciB0byBhdHRhY2ggYW5kCisgICAgICAgIHJldHJpZXZlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLiBXZSBzZXQgdGhpcyBmaWVsZCAicHJpdiIgdG8gTlVMTCBmb3IKKyAgICAgICAgdGhlIG1vbWVudC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgSGF2aW5nIHRoZSBzdHJ1Y3R1cmUgZGVmaW5lZCBpcyBhbGwgdmVyeSB3ZWxsIGJ1dCB3ZSBub3cgbmVlZCB0byByZWdpc3RlciBpdAorICAgICAgICB3aXRoIHRoZSBrZXJuZWwuIAorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IGlvID0gMHgzMjA7CisKK2ludCBfX2luaXQgbXlyYWRpb19pbml0KHN0cnVjdCB2aWRlb19pbml0ICp2KQoreworICAgICAgICBpZighcmVxdWVzdF9yZWdpb24oaW8sIE1ZX0lPX1NJWkUsICJteXJhZGlvIikpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgCisgICAgICAgICAgICAgICAgICAgICJteXJhZGlvOiBwb3J0IDB4JTAzWCBpcyBpbiB1c2UuXG4iLCBpbyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHZpZGVvX2RldmljZV9yZWdpc3RlcigmYW1wO215X3JhZGlvLCBWRkxfVFlQRV9SQURJTyk9PS0xKSB7CisgICAgICAgICAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CQkKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBzdGFnZSBvZiB0aGUgaW5pdGlhbGlzYXRpb24sIGFzIGlzIG5vcm1hbGx5IHRoZSBjYXNlLCBpcyB0byBjaGVjayAKKyAgICAgICAgdGhhdCB0aGUgSS9PIHNwYWNlIHdlIGFyZSBhYm91dCB0byBmaWRkbGUgd2l0aCBkb2Vzbid0IGJlbG9uZyB0byBzb21lIG90aGVyIAorICAgICAgICBkcml2ZXIuIElmIGl0IGlzIHdlIGxlYXZlIHdlbGwgYWxvbmUuIElmIHRoZSB1c2VyIGdpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSAKKyAgICAgICAgd3JvbmcgZGV2aWNlIHRoZW4gd2Ugd2lsbCBzcG90IHRoaXMuIFRoZXNlIHBvbGljaWVzIHdpbGwgZ2VuZXJhbGx5IGF2b2lkIAorICAgICAgICBjcmFzaGluZyB0aGUgbWFjaGluZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgTm93IHdlIGFzayB0aGUgVmlkZW80TGludXggbGF5ZXIgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSBmb3IgdXMuIFdlIGhhbmQgaXQKKyAgICAgICAgb3VyIGNhcmVmdWxseSBkZXNpZ25lZCB2aWRlb19kZXZpY2Ugc3RydWN0dXJlIGFuZCBhbHNvIHRlbGwgaXQgd2hpY2ggZ3JvdXAKKyAgICAgICAgb2YgZGV2aWNlcyB3ZSB3YW50IGl0IHJlZ2lzdGVyZWQgd2l0aC4gSW4gdGhpcyBjYXNlIFZGTF9UWVBFX1JBRElPLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgdHlwZXMgYXZhaWxhYmxlIGFyZQorICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPkRldmljZSBUeXBlczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjMiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5WRkxfVFlQRV9SQURJTzwvZW50cnk+PGVudHJ5Pi9kZXYvcmFkaW97bn08L2VudHJ5PjxlbnRyeT4KKworICAgICAgICBSYWRpbyBkZXZpY2VzIGFyZSBhc3NpZ25lZCBpbiB0aGlzIGJsb2NrLiBBcyB3aXRoIGFsbCBvZiB0aGVzZQorICAgICAgICBzZWxlY3Rpb25zIHRoZSBhY3R1YWwgbnVtYmVyIGFzc2lnbm1lbnQgaXMgZG9uZSBieSB0aGUgdmlkZW8gbGF5ZXIKKyAgICAgICAgYWNjb3JkaWpuZyB0byB3aGF0IGlzIGZyZWUuPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VkZMX1RZUEVfR1JBQkJFUjwvZW50cnk+PGVudHJ5Pi9kZXYvdmlkZW97bn08L2VudHJ5PjxlbnRyeT4KKyAgICAgICAgVmlkZW8gY2FwdHVyZSBkZXZpY2VzIGFuZCBhbHNvIC0tIGNvdW50ZXItaW50dWl0aXZlbHkgZm9yIHRoZSBuYW1lIC0tCisgICAgICAgIGhhcmR3YXJlIHZpZGVvIHBsYXliYWNrIGRldmljZXMgc3VjaCBhcyBNUEVHMiBjYXJkcy48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WRkxfVFlQRV9WQkk8L2VudHJ5PjxlbnRyeT4vZGV2L3ZiaXtufTwvZW50cnk+PGVudHJ5PgorICAgICAgICBUaGUgVkJJIGRldmljZXMgY2FwdHVyZSB0aGUgaGlkZGVuIGxpbmVzIG9uIGEgdGVsZXZpc2lvbiBwaWN0dXJlCisgICAgICAgIHRoYXQgY2FycnkgZnVydGhlciBpbmZvcm1hdGlvbiBsaWtlIGNsb3NlZCBjYXB0aW9uIGRhdGEsIHRlbGV0ZXh0CisgICAgICAgIChwcmltYXJpbHkgaW4gRXVyb3BlKSBhbmQgbm93IEludGVyY2FzdCBhbmQgdGhlIEFUVkVDIGludGVybmV0CisgICAgICAgIHRlbGV2aXNpb24gZW5jb2RpbmdzLjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZGTF9UWVBFX1ZUWDwvZW50cnk+PGVudHJ5Pi9kZXYvdnR4W259PC9lbnRyeT48ZW50cnk+CisgICAgICAgIFZUWCBpcyAnVmlkZW90ZXh0JyBhbHNvIGtub3duIGFzICdUZWxldGV4dCcuIFRoaXMgaXMgYSBzeXN0ZW0gZm9yCisgICAgICAgIHNlbmRpbmcgbnVtYmVyZWQsIDQweDI1LCBtb3N0bHkgdGV4dHVhbCBwYWdlIGltYWdlcyBvdmVyIHRoZSBoaWRkZW4KKyAgICAgICAgbGluZXMuIFVubGlrZSB0aGUgL2Rldi92YmkgaW50ZXJmYWNlcywgdGhpcyBpcyBmb3IgJ3NtYXJ0JyBkZWNvZGVyIAorICAgICAgICBjaGlwcy4gKFRoZSB1c2Ugb2YgdGhlIHdvcmQgc21hcnQgaGVyZSBoYXMgdG8gYmUgdGFrZW4gaW4gY29udGV4dCwKKyAgICAgICAgdGhlIHNtYXJ0ZXN0IHRlbGV0ZXh0IGNoaXBzIGFyZSBmYWlybHkgZHVtYiBwaWVjZXMgb2YgdGVjaG5vbG9neSkuCisJPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDxwYXJhPgorICAgICAgICBXZSBhcmUgbW9zdCBkZWZpbml0ZWx5IGEgcmFkaW8uCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIEZpbmFsbHkgd2UgYWxsb2NhdGUgb3VyIEkvTyBzcGFjZSBzbyB0aGF0IG5vYm9keSB0cmVhZHMgb24gdXMgYW5kIHJldHVybiAwCisgICAgICAgIHRvIHNpZ25pZnkgZ2VuZXJhbCBoYXBwaW5lc3Mgd2l0aCB0aGUgc3RhdGUgb2YgdGhlIHVuaXZlcnNlLgorICA8L3BhcmE+CisgIDwvc2VjdDE+CisgIDxzZWN0MSBpZD0ib3BlbnJhZGlvIj4KKyAgPHRpdGxlPk9wZW5pbmcgQW5kIENsb3NpbmcgVGhlIFJhZGlvPC90aXRsZT4KKworICA8cGFyYT4KKyAgICAgICAgVGhlIGZ1bmN0aW9ucyB3ZSBkZWNsYXJlZCBpbiBvdXIgdmlkZW9fZGV2aWNlIGFyZSBtb3N0bHkgdmVyeSBzaW1wbGUuCisgICAgICAgIEZpcnN0bHkgd2UgY2FuIGRyb3AgaW4gd2hhdCBpcyBiYXNpY2FsbHkgc3RhbmRhcmQgY29kZSBmb3Igb3BlbiBhbmQgY2xvc2UuIAorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IHVzZXJzID0gMDsKKworc3RhdGljIGludCByYWRpb19vcGVuKHN0dWN0IHZpZGVvX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCit7CisgICAgICAgIGlmKHVzZXJzKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIHVzZXJzKys7CisgICAgICAgIHJldHVybiAwOworfQorCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBBdCBvcGVuIHRpbWUgd2UgbmVlZCB0byBkbyBub3RoaW5nIGJ1dCBjaGVjayBpZiBzb21lb25lIGVsc2UgaXMgYWxzbyB1c2luZworICAgICAgICB0aGUgcmFkaW8gY2FyZC4gSWYgbm9ib2R5IGlzIHVzaW5nIGl0IHdlIG1ha2UgYSBub3RlIHRoYXQgd2UgYXJlIHVzaW5nIGl0LAorICAgICAgICB0aGVuIHdlIGVuc3VyZSB0aGF0IG5vYm9keSB1bmxvYWRzIG91ciBkcml2ZXIgb24gdXMuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKK3N0YXRpYyBpbnQgcmFkaW9fY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQoreworICAgICAgICB1c2Vycy0tOworfQorCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBBdCBjbG9zZSB0aW1lIHdlIHNpbXBseSBuZWVkIHRvIHJlZHVjZSB0aGUgdXNlciBjb3VudCBhbmQgYWxsb3cgdGhlIG1vZHVsZQorICAgICAgICB0byBiZWNvbWUgdW5sb2FkYWJsZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGFyZSBzaGFycCB5b3Ugd2lsbCBoYXZlIG5vdGljZWQgbmVpdGhlciB0aGUgb3BlbiBub3IgdGhlIGNsb3NlCisgICAgICAgIHJvdXRpbmVzIGF0dGVtcHQgdG8gcmVzZXQgb3IgY2hhbmdlIHRoZSByYWRpbyBzZXR0aW5ncy4gVGhpcyBpcyBpbnRlbnRpb25hbC4KKyAgICAgICAgSXQgYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHNldCB1cCB0aGUgcmFkaW8gYW5kIGV4aXQuIEl0IGF2b2lkcyBhIHVzZXIKKyAgICAgICAgaGF2aW5nIHRvIGxlYXZlIGFuIGFwcGxpY2F0aW9uIHJ1bm5pbmcgYWxsIHRoZSB0aW1lIGp1c3QgdG8gbGlzdGVuIHRvIHRoZQorICAgICAgICByYWRpby4gCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJpb2N0bHJhZGlvIj4KKyAgPHRpdGxlPlRoZSBJb2N0bCBJbnRlcmZhY2U8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgICAgVGhpcyBsZWF2ZXMgdGhlIGlvY3RsIHJvdXRpbmUsIHdpdGhvdXQgd2hpY2ggdGhlIGRyaXZlciB3aWxsIG5vdCBiZQorICAgICAgICB0ZXJyaWJseSB1c2VmdWwgdG8gYW55b25lLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IHJhZGlvX2lvY3RsKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworICAgICAgICBzd2l0Y2goY21kKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHQ0FQOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IHY7CisgICAgICAgICAgICAgICAgICAgICAgICB2LnR5cGUgPSBWSURfVFlQRV9UVU5FUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuY2hhbm5lbHMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdi5hdWRpb3MgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdi5tYXh3aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4aGVpZ2h0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubWluaGVpZ2h0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJNeSBSYWRpbyIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDt2LCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVklESU9DR0NBUCBpcyB0aGUgZmlyc3QgaW9jdGwgYWxsIHZpZGVvNGxpbnV4IGRldmljZXMgbXVzdCBzdXBwb3J0LiBJdAorICAgICAgICBhbGxvd3MgdGhlIGFwcGxpY2F0aW9ucyB0byBmaW5kIG91dCB3aGF0IHNvcnQgb2YgYSBjYXJkIHRoZXkgaGF2ZSBmb3VuZCBhbmQKKyAgICAgICAgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgd2FudCB0byBkbyBhYm91dCBpdC4gVGhlIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlIGFyZQorICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGZpZWxkczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+VGhlIGRldmljZSB0ZXh0IG5hbWUuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PmNoYW5uZWxzPC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2hhbm5lbHMgeW91IGNhbiB0dW5lIG9uCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGNhcmQuIEl0IGNvdWxkIGV2ZW4gYnkgemVybyBmb3IgYSBjYXJkIHRoYXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBubyB0dW5pbmcgY2FwYWJpbGl0eS4gRm9yIG91ciBzaW1wbGUgRk0gcmFkaW8gaXQgaXMgMS4gCisgICAgICAgICAgICAgICAgICAgICAgICBBbiBBTS9GTSByYWRpbyB3b3VsZCByZXBvcnQgMi48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5hdWRpb3M8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIGF1ZGlvIGlucHV0cyBvbiB0aGlzIGRldmljZS4gRm9yIG91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW8gdGhlcmUgaXMgb25seSBvbmUgYXVkaW8gaW5wdXQuPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+bWlud2lkdGgsbWluaGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIHNtYWxsZXN0IHNpemUgdGhlIGNhcmQgaXMgY2FwYWJsZSBvZiBjYXB0dXJpbmcKKwkJICAgICAgICBpbWFnZXMgaW4uIFdlIHNldCB0aGVzZSB0byB6ZXJvLiBSYWRpb3MgZG8gbm90CisgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIHBpY3R1cmVzPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+bWF4d2lkdGgsbWF4aGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIGxhcmdlc3QgaW1hZ2Ugc2l6ZSB0aGUgY2FyZCBpcyBjYXBhYmxlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmluZy4gRm9yIG91ciByYWRpbyB3ZSByZXBvcnQgMC4KKwkJCQk8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT50eXBlPC9lbnRyeT48ZW50cnk+VGhpcyByZXBvcnRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZSwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzIHRoZSBmaWVsZCB3ZSBmaWxsZWQgaW4gaW4gdGhlIHN0cnVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fZGV2aWNlIHdoZW4gcmVnaXN0ZXJpbmcuPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDxwYXJhPgorICAgICAgICBIYXZpbmcgZmlsbGVkIGluIHRoZSBmaWVsZHMsIHdlIHVzZSBjb3B5X3RvX3VzZXIgdG8gY29weSB0aGUgc3RydWN0dXJlIGludG8KKyAgICAgICAgdGhlIHVzZXJzIGJ1ZmZlci4gSWYgdGhlIGNvcHkgZmFpbHMgd2UgcmV0dXJuIGFuIEVGQVVMVCB0byB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgc28gdGhhdCBpdCBrbm93cyBpdCB0cmllZCB0byBmZWVkIHVzIGdhcmJhZ2UuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBuZXh0IHBhaXIgb2YgaW9jdGwgb3BlcmF0aW9ucyBzZWxlY3Qgd2hpY2ggdHVuZXIgaXMgdG8gYmUgdXNlZCBhbmQgbGV0CisgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBmaW5kIHRoZSB0dW5lciBwcm9wZXJ0aWVzLiBXZSBoYXZlIG9ubHkgYSBzaW5nbGUgRk0gYmFuZAorICAgICAgICB0dW5lciBpbiBvdXIgZXhhbXBsZSBkZXZpY2UuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dUVU5FUjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpIT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYudHVuZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgdi5yYW5nZWxvdz0oODcqMTYwMDApOworICAgICAgICAgICAgICAgICAgICAgICAgdi5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2LmZsYWdzID0gVklERU9fVFVORVJfTE9XOworICAgICAgICAgICAgICAgICAgICAgICAgdi5tb2RlID0gVklERU9fTU9ERV9BVVRPOworICAgICAgICAgICAgICAgICAgICAgICAgdi5zaWduYWwgPSAweEZGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiRk0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSE9MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBWSURJT0NHVFVORVIgaW9jdGwgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBxdWVyeSBhIHR1bmVyLiBUaGUgYXBwbGljYXRpb24KKyAgICAgICAgc2V0cyB0aGUgdHVuZXIgZmllbGQgdG8gdGhlIHR1bmVyIG51bWJlciBpdCB3aXNoZXMgdG8gcXVlcnkuIFRoZSBxdWVyeSBkb2VzCisgICAgICAgIG5vdCBjaGFuZ2UgdGhlIHR1bmVyIHRoYXQgaXMgYmVpbmcgdXNlZCwgaXQgbWVyZWx5IGVucXVpcmVzIGFib3V0IHRoZSB0dW5lcgorICAgICAgICBpbiBxdWVzdGlvbi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2UgaGF2ZSBleGFjdGx5IG9uZSB0dW5lciBzbyBhZnRlciBjb3B5aW5nIHRoZSB1c2VyIGJ1ZmZlciB0byBvdXIgdGVtcG9yYXJ5CisgICAgICAgIHN0cnVjdHVyZSB3ZSBjb21wbGFpbiBpZiB0aGV5IGFza2VkIGZvciBhIHR1bmVyIG90aGVyIHRoYW4gdHVuZXIgMC4gCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSB2aWRlb190dW5lciBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzCisgIDwvcGFyYT4KKyAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIGZpZWxkczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5pbnQgdHVuZXI8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIHRoZSB0dW5lciBpbiBxdWVzdGlvbjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+Y2hhciBuYW1lWzMyXTwvZW50cnk+PGVudHJ5PkEgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGlzIHR1bmVyLiAiRk0iIHdpbGwgZG8gZmluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSBhcHBsaWNhdGlvbi48L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PnUzMiBmbGFnczwvZW50cnk+CisgICAgICAgIDxlbnRyeT5UdW5lciBjYXBhYmlsaXR5IGZsYWdzPC9lbnRyeT4KKyAgIDwvcm93PgorICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PnUxNiBtb2RlPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgcmVjZXB0aW9uIG1vZGU8L2VudHJ5PgorCisgICA8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+dTE2IHNpZ25hbDwvZW50cnk+PGVudHJ5PlRoZSBzaWduYWwgc3RyZW5ndGggc2NhbGVkIGJldHdlZW4gMCBhbmQgNjU1MzUuIElmCisgICAgICAgICAgICAgICAgICAgICAgICBhIGRldmljZSBjYW5ub3QgdGVsbCB0aGUgc2lnbmFsIHN0cmVuZ3RoIGl0IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IDY1NTM1LiBNYW55IHNpbXBsZSBjYXJkcyBjb250YWluIG9ubHkgYSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC9ubyBzaWduYWwgYml0LiBTdWNoIGNhcmRzIHdpbGwgcmVwb3J0IGVpdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgMCBvciA2NTUzNS48L2VudHJ5PgorCisgICA8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+dTMyIHJhbmdlbG93LCByYW5nZWhpZ2g8L2VudHJ5PjxlbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByYW5nZSBvZiBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvCisgICAgICAgICAgICAgICAgICAgICAgICBvciBUVi4gSXQgaXMgc2NhbGVkIGFjY29yZGluZyB0byB0aGUgVklERU9fVFVORVJfTE9XCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFnLjwvZW50cnk+CisKKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisKKyAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIGZsYWdzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKwk8ZW50cnk+VklERU9fVFVORVJfUEFMPC9lbnRyeT48ZW50cnk+QSBQQUwgVFYgdHVuZXI8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9OVFNDPC9lbnRyeT48ZW50cnk+QW4gTlRTQyAoVVMpIFRWIHR1bmVyPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfU0VDQU08L2VudHJ5PjxlbnRyeT5BIFNFQ0FNIChGcmVuY2gpIFRWIHR1bmVyPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfTE9XPC9lbnRyeT48ZW50cnk+CisgICAgICAgICAgICAgVGhlIHR1bmVyIGZyZXF1ZW5jeSBpcyBzY2FsZWQgaW4gMS8xNnRoIG9mIGEgS0h6CisgICAgICAgICAgICAgc3RlcHMuIElmIG5vdCBpdCBpcyBpbiAxLzE2dGggb2YgYSBNSHogc3RlcHMKKwk8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9OT1JNPC9lbnRyeT48ZW50cnk+VGhlIHR1bmVyIGNhbiBzZXQgaXRzIGZvcm1hdDwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX1NURVJFT19PTjwvZW50cnk+PGVudHJ5PlRoZSB0dW5lciBpcyBjdXJyZW50bHkgcmVjZWl2aW5nIGEgc3RlcmVvIHNpZ25hbDwvZW50cnk+CisgICAgICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fdHVuZXIgbW9kZXM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1BBTDwvZW50cnk+PGVudHJ5PlBBTCBGb3JtYXQ8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9OVFNDPC9lbnRyeT48ZW50cnk+TlRTQyBGb3JtYXQgKFVTQSk8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9TRUNBTTwvZW50cnk+PGVudHJ5PkZyZW5jaCBGb3JtYXQ8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9BVVRPPC9lbnRyeT48ZW50cnk+QSBkZXZpY2UgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFYgZm9ybWF0IHN3aXRjaGluZzwvZW50cnk+CisgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgIDxwYXJhPgorICAgICAgICBUaGUgc2V0dGluZ3MgZm9yIHRoZSByYWRpbyBjYXJkIGFyZSB0aHVzIGZhaXJseSBzaW1wbGUuIFdlIHJlcG9ydCB0aGF0IHdlCisgICAgICAgIGFyZSBhIHR1bmVyIGNhbGxlZCAiRk0iIGZvciBGTSByYWRpby4gSW4gb3JkZXIgdG8gZ2V0IHRoZSBiZXN0IHR1bmluZworICAgICAgICByZXNvbHV0aW9uIHdlIHJlcG9ydCBWSURFT19UVU5FUl9MT1cgYW5kIHNlbGVjdCB0dW5pbmcgdG8gMS8xNnRoIG9mIEtIei4gSXRzCisgICAgICAgIHVubGlrZWx5IG91ciBjYXJkIGNhbiBkbyB0aGF0IHJlc29sdXRpb24gYnV0IGl0IGlzIGEgZmFpciBiZXQgdGhlIGNhcmQgY2FuCisgICAgICAgIGRvIGJldHRlciB0aGFuIDEvMTZ0aCBvZiBhIE1Iei4gVklERU9fVFVORVJfTE9XIGlzIGFwcHJvcHJpYXRlIHRvIGFsbW9zdCBhbGwKKyAgICAgICAgcmFkaW8gdXNhZ2UuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFdlIHJlcG9ydCB0aGF0IHRoZSB0dW5lciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgZGVjaWRpbmcgd2hhdCBmb3JtYXQgaXQgaXMKKyAgICAgICAgcmVjZWl2aW5nIC0gdHJ1ZSBlbm91Z2ggYXMgaXQgb25seSBoYW5kbGVzIEZNIHJhZGlvLiBPdXIgZXhhbXBsZSBjYXJkIGlzCisgICAgICAgIGFsc28gaW5jYXBhYmxlIG9mIGRldGVjdGluZyBzdGVyZW8gb3Igc2lnbmFsIHN0cmVuZ3RocyBzbyBpdCByZXBvcnRzIGEKKyAgICAgICAgc3RyZW5ndGggb2YgMHhGRkZGIChtYXhpbXVtKSBhbmQgbm8gc3RlcmVvIGRldGVjdGVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUbyBmaW5pc2ggb2ZmIHdlIHNldCB0aGUgcmFuZ2UgdGhhdCBjYW4gYmUgdHVuZWQgdG8gYmUgODctMTA4TWh6LCB0aGUgbm9ybWFsCisgICAgICAgIEZNIGJyb2FkY2FzdCByYWRpbyByYW5nZS4gSXQgaXMgaW1wb3J0YW50IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGNhcmQgaXMKKyAgICAgICAgYWN0dWFsbHkgY2FwYWJsZSBvZiB0dW5pbmcuIEl0IGlzIGVhc3kgZW5vdWdoIHRvIHNpbXBseSB1c2UgdGhlIEZNIGJyb2FkY2FzdAorICAgICAgICByYW5nZS4gVW5mb3J0dW5hdGVseSBpZiB5b3UgZG8gdGhpcyB5b3Ugd2lsbCBkaXNjb3ZlciB0aGUgRk0gYnJvYWRjYXN0CisgICAgICAgIHJhbmdlcyBpbiB0aGUgVVNBLCBFdXJvcGUgYW5kIEphcGFuIGFyZSBhbGwgc3VidGx5IGRpZmZlcmVudCBhbmQgc29tZSB1c2VycworICAgICAgICBjYW5ub3QgcmVjZWl2ZSBhbGwgdGhlIHN0YXRpb25zIHRoZXkgd2lzaC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGFsc28gbmVlZHMgdG8gYmUgYWJsZSB0byBzZXQgdGhlIHR1bmVyIGl0IHdpc2hlcyB0byB1c2UuIEluCisgICAgICAgIG91ciBjYXNlLCB3aXRoIGEgc2luZ2xlIHR1bmVyIHRoaXMgaXMgcmF0aGVyIHNpbXBsZSB0byBhcnJhbmdlLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1RVTkVSOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb190dW5lciB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi50dW5lciAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgV2UgY29weSB0aGUgdXNlciBzdXBwbGllZCBzdHJ1Y3R1cmUgaW50byBrZXJuZWwgbWVtb3J5IHNvIHdlIGNhbiBleGFtaW5lIGl0LiAKKyAgICAgICAgSWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgdHVuZXIgb3RoZXIgdGhhbiB6ZXJvIHdlIHJlamVjdCB0aGUgcmVxdWVzdC4gSWYgCisgICAgICAgIHRoZXkgd2FudGVkIHR1bmVyIDAgdGhlbiwgc3VycHJpc2luZ2x5IGVub3VnaCwgdGhhdCBpcyB0aGUgY3VycmVudCB0dW5lciBhbHJlYWR5LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgbmV4dCB0d28gaW9jdGxzIHdlIG5lZWQgdG8gcHJvdmlkZSBhcmUgdG8gZ2V0IGFuZCBzZXQgdGhlIGZyZXF1ZW5jeSBvZgorICAgICAgICB0aGUgcmFkaW8uIFRoZXNlIGJvdGggdXNlIGFuIHVuc2lnbmVkIGxvbmcgYXJndW1lbnQgd2hpY2ggaXMgdGhlIGZyZXF1ZW5jeS4KKyAgICAgICAgVGhlIHNjYWxlIG9mIHRoZSBmcmVxdWVuY3kgZGVwZW5kcyBvbiB0aGUgVklERU9fVFVORVJfTE9XIGZsYWcgYXMgSQorICAgICAgICBtZW50aW9uZWQgZWFybGllciBvbi4gU2luY2Ugd2UgaGF2ZSBWSURFT19UVU5FUl9MT1cgc2V0IHRoaXMgd2lsbCBiZSBpbgorICAgICAgICAxLzE2dGhzIG9mIGEgS0h6LgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VycmVudF9mcmVxOworCisKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0ZSRVE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2N1cnJlbnRfZnJlcSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgUXVlcnlpbmcgdGhlIGZyZXF1ZW5jeSBpbiBvdXIgY2FzZSBpcyByZWxhdGl2ZWx5IHNpbXBsZS4gT3VyIHJhZGlvIGNhcmQgaXMKKyAgICAgICAgdG9vIGR1bWIgdG8gbGV0IHVzIHF1ZXJ5IHRoZSBzaWduYWwgc3RyZW5ndGggc28gd2UgcmVtZW1iZXIgb3VyIHNldHRpbmcgaWYgCisgICAgICAgIHdlIGtub3cgaXQuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIGNvcHkgaXQgdG8gdGhlIHVzZXIuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NGUkVROgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBmcmVxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoYXJnLCAmYW1wO2ZyZXEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpIT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhcmR3YXJlX3NldF9mcmVxKGZyZXEpJmx0OzApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9mcmVxID0gZnJlcTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgU2V0dGluZyB0aGUgZnJlcXVlbmN5IGlzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gV2UgYmVnaW4gYnkgY29weWluZyB0aGUKKyAgICAgICAgZGVzaXJlZCBmcmVxdWVuY3kgaW50byBrZXJuZWwgc3BhY2UuIE5leHQgd2UgY2FsbCBhIGhhcmR3YXJlIHNwZWNpZmljIHJvdXRpbmUKKyAgICAgICAgdG8gc2V0IHRoZSByYWRpbyB1cC4gVGhpcyBtaWdodCBiZSBhcyBzaW1wbGUgYXMgc29tZSBzY2FsaW5nIGFuZCBhIGZldworICAgICAgICB3cml0ZXMgdG8gYW4gSS9PIHBvcnQuIEZvciBtb3N0IHJhZGlvIGNhcmRzIGl0IHR1cm5zIG91dCBhIGdvb2QgZGVhbCBtb3JlCisgICAgICAgIGNvbXBsaWNhdGVkIGFuZCBtYXkgaW52b2x2ZSBwcm9ncmFtbWluZyB0aGluZ3MgbGlrZSBhIHBoYXNlIGxvY2tlZCBsb29wIG9uCisgICAgICAgIHRoZSBjYXJkLiBUaGlzIGlzIHdoYXQgZG9jdW1lbnRhdGlvbiBpcyBmb3IuIAorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgZmluYWwgc2V0IG9mIG9wZXJhdGlvbnMgd2UgbmVlZCB0byBwcm92aWRlIGZvciBvdXIgcmFkaW8gYXJlIHRoZSAKKyAgICAgICAgdm9sdW1lIGNvbnRyb2xzLiBOb3QgYWxsIHJhZGlvIGNhcmRzIGNhbiBldmVuIGRvIHZvbHVtZSBjb250cm9sLiBBZnRlciBhbGwKKyAgICAgICAgdGhlcmUgaXMgYSBwZXJmZWN0bHkgZ29vZCB2b2x1bWUgY29udHJvbCBvbiB0aGUgc291bmQgY2FyZC4gV2Ugd2lsbCBhc3N1bWUKKyAgICAgICAgb3VyIHJhZGlvIGNhcmQgaGFzIGEgc2ltcGxlIDQgc3RlcCB2b2x1bWUgY29udHJvbC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHR3byBpb2N0bHMgd2l0aCBhdWRpbyB3ZSBuZWVkIHRvIHN1cHBvcnQKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKK3N0YXRpYyBpbnQgY3VycmVudF92b2x1bWU9MDsKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0FVRElPOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19hdWRpbyB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5hdWRpbyAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYudm9sdW1lID0gMTYzODQqY3VycmVudF92b2x1bWU7CisgICAgICAgICAgICAgICAgICAgICAgICB2LnN0ZXAgPSAxNjM4NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJSYWRpbyIpOworICAgICAgICAgICAgICAgICAgICAgICAgdi5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYuYmFsYW5jZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2LmJhc2UgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdi50cmVibGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLiAmYW1wO3YsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBNdWNoIGxpa2UgdGhlIHR1bmVyIHdlIHN0YXJ0IGJ5IGNvcHlpbmcgdGhlIHVzZXIgc3RydWN0dXJlIGludG8ga2VybmVsCisgICAgICAgIHNwYWNlLiBBZ2FpbiB3ZSBjaGVjayBpZiB0aGUgdXNlciBoYXMgYXNrZWQgZm9yIGEgdmFsaWQgYXVkaW8gaW5wdXQuIFdlIGhhdmUKKyAgICAgICAgb25seSBpbnB1dCAwIGFuZCB3ZSBwdW50IGlmIHRoZXkgYXNrIGZvciBhbm90aGVyIGlucHV0LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGVuIHdlIGZpbGwgaW4gdGhlIHZpZGVvX2F1ZGlvIHN0cnVjdHVyZS4gVGhpcyBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQKKyAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fYXVkaW8gZmllbGRzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKyAgIDxlbnRyeT5hdWRpbzwvZW50cnk+PGVudHJ5PlRoZSBpbnB1dCB0aGUgdXNlciB3aXNoZXMgdG8gcXVlcnk8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT52b2x1bWU8L2VudHJ5PjxlbnRyeT5UaGUgdm9sdW1lIHNldHRpbmcgb24gYSBzY2FsZSBvZiAwLTY1NTM1PC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+YmFzZTwvZW50cnk+PGVudHJ5PlRoZSBiYXNlIGxldmVsIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5PnRyZWJsZTwvZW50cnk+PGVudHJ5PlRoZSB0cmVibGUgbGV2ZWwgb24gYSBzY2FsZSBvZiAwLTY1NTM1PC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+ZmxhZ3M8L2VudHJ5PjxlbnRyeT5UaGUgZmVhdHVyZXMgdGhpcyBhdWRpbyBkZXZpY2Ugc3VwcG9ydHMKKyAgIDwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5Pm5hbWU8L2VudHJ5PjxlbnRyeT5BIHRleHQgbmFtZSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLiBXZSBwaWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICJSYWRpbyIgYXMgaXQgZXhwbGFpbnMgdGhpbmdzIHF1aXRlIG5pY2VseS48L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5tb2RlPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgcmVjZXB0aW9uIG1vZGUgZm9yIHRoZSBhdWRpbworCisgICAgICAgICAgICAgICAgV2UgcmVwb3J0IE1PTk8gYmVjYXVzZSBvdXIgY2FyZCBpcyB0b28gc3R1cGlkIHRvIGtub3cgaWYgaXQgaXMgaW4KKyAgICAgICAgICAgICAgICBtb25vIG9yIHN0ZXJlby4gCisgICA8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5iYWxhbmNlPC9lbnRyeT48ZW50cnk+VGhlIHN0ZXJlbyBiYWxhbmNlIG9uIGEgc2NhbGUgb2YgMC02NTUzNSwgMzI3NjggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pZGRsZS48L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5zdGVwPC9lbnRyeT48ZW50cnk+VGhlIHN0ZXAgYnkgd2hpY2ggdGhlIHZvbHVtZSBjb250cm9sIGp1bXBzLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGhlbHAgbWFrZSBpdCBlYXN5IGZvciBhcHBsaWNhdGlvbnMgdG8gc2V0IAorICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyIGJlaGF2aW91ci48L2VudHJ5PgorICAgPC9yb3c+CisgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgICA8L3RhYmxlPgorCisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb19hdWRpbyBmbGFnczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX01VVEU8L2VudHJ5PjxlbnRyeT5UaGUgYXVkaW8gaXMgY3VycmVudGx5IG11dGVkLiBXZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGZha2UgdGhpcyBpbiBvdXIgZHJpdmVyIGJ1dCB3ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSBub3QgdG8gYm90aGVyLjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19BVURJT19NVVRBQkxFPC9lbnRyeT48ZW50cnk+VGhlIGlucHV0IGhhcyBhIG11dGUgb3B0aW9uPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX1RSRUJMRTwvZW50cnk+PGVudHJ5PlRoZSAgaW5wdXQgaGFzIGEgdHJlYmxlIGNvbnRyb2w8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fQVVESU9fQkFTUzwvZW50cnk+PGVudHJ5PlRoZSBpbnB1dCBoYXMgYSBiYXNlIGNvbnRyb2w8L2VudHJ5PgorICAgPC9yb3c+CisgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgICA8L3RhYmxlPgorCisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb19hdWRpbyBtb2RlczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX1NPVU5EX01PTk88L2VudHJ5PjxlbnRyeT5Nb25vIHNvdW5kPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX1NPVU5EX1NURVJFTzwvZW50cnk+PGVudHJ5PlN0ZXJlbyBzb3VuZDwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19TT1VORF9MQU5HMTwvZW50cnk+PGVudHJ5PkFsdGVybmF0aXZlIGxhbmd1YWdlIDEgKFRWIHNwZWNpZmljKTwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19TT1VORF9MQU5HMjwvZW50cnk+PGVudHJ5PkFsdGVybmF0aXZlIGxhbmd1YWdlIDIgKFRWIHNwZWNpZmljKTwvZW50cnk+CisgICA8L3Jvdz4KKyAgIDwvdGJvZHk+CisgICA8L3Rncm91cD4KKyAgIDwvdGFibGU+CisgIDxwYXJhPgorICAgICAgICBIYXZpbmcgZmlsbGVkIGluIHRoZSBzdHJ1Y3R1cmUgd2UgY29weSBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBWSURJT0NTQVVESU8gaW9jdGwgYWxsb3dzIHRoZSB1c2VyIHRvIHNldCB0aGUgYXVkaW8gcGFyYW1ldGVycyBpbiB0aGUKKyAgICAgICAgdmlkZW9fYXVkaW8gc3RydWN0dXJlLiBUaGUgZHJpdmVyIGRvZXMgaXRzIGJlc3QgdG8gaG9ub3VyIHRoZSByZXF1ZXN0LgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU0FVRElPOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19hdWRpbyB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5hdWRpbykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZvbHVtZSA9IHYvMTYzODQ7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfdm9sdW1lKGN1cnJlbnRfdm9sdW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgSW4gb3VyIGNhc2UgdGhlcmUgaXMgdmVyeSBsaXR0bGUgdGhhdCB0aGUgdXNlciBjYW4gc2V0LiBUaGUgdm9sdW1lIGlzCisgICAgICAgIGJhc2ljYWxseSB0aGUgbGltaXQuIE5vdGUgdGhhdCB3ZSBjb3VsZCBwcmV0ZW5kIHRvIGhhdmUgYSBtdXRlIGZlYXR1cmUKKyAgICAgICAgYnkgcmV3cml0aW5nIHRoaXMgdG8gCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTQVVESU86CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2F1ZGlvIHY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LmF1ZGlvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdm9sdW1lID0gdi8xNjM4NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuZmxhZ3MmYW1wO1ZJREVPX0FVRElPX01VVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF92b2x1bWUoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF92b2x1bWUoY3VycmVudF92b2x1bWUpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9tdXRlZCA9IHYuZmxhZ3MgJmFtcDsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklERU9fQVVESU9fTVVURTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhpcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gdGhlIFZJRElPQ0dBVURJTyBjb2RlIHRvIHJlcG9ydCB0aGUKKyAgICAgICAgc3RhdGUgb2YgdGhlIG11dGUgZmxhZyB3ZSBzYXZlIGFuZCB0byByZXBvcnQgdGhlIGNhcmQgaGFzIGEgbXV0ZSBmdW5jdGlvbiwKKyAgICAgICAgd2lsbCBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gdXNlIGEgbXV0ZSBmYWNpbGl0eSB3aXRoIHRoaXMgY2FyZC4gSXQgaXMKKyAgICAgICAgcXVlc3Rpb25hYmxlIHdoZXRoZXIgdGhpcyBpcyBhIGdvb2QgaWRlYSBob3dldmVyLiBVc2VyIGFwcGxpY2F0aW9ucyBjYW4gYWxyZWFkeQorICAgICAgICBmYWtlIHRoaXMgdGhlbXNlbHZlcyBhbmQga2VybmVsIHNwYWNlIGlzIHByZWNpb3VzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSBub3cgaGF2ZSBhIHdvcmtpbmcgcmFkaW8gaW9jdGwgaGFuZGxlci4gU28gd2UganVzdCB3cmFwIHVwIHRoZSBmdW5jdGlvbgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgYW5kIHBhc3MgdGhlIFZpZGVvNExpbnV4IGxheWVyIGJhY2sgYW4gZXJyb3Igc28gdGhhdCBpdCBrbm93cyB3ZSBkaWQgbm90CisgICAgICAgIHVuZGVyc3RhbmQgdGhlIHJlcXVlc3Qgd2UgZ290IHBhc3NlZC4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9Im1vZHJhZGlvIj4KKyAgPHRpdGxlPk1vZHVsZSBXcmFwcGVyPC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIEZpbmFsbHkgd2UgYWRkIGluIHRoZSB1c3VhbCBtb2R1bGUgd3JhcHBpbmcgYW5kIHRoZSBkcml2ZXIgaXMgZG9uZS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKyNpZm5kZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgaW8gPSAweDMwMDsKKworI2Vsc2UKKworc3RhdGljIGludCBpbyA9IC0xOworCisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiQWxhbiBDb3giKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIGFuIGltYWdpbmFyeSByYWRpbyBjYXJkLiIpOworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBjYXJkLiIpOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisgICAgICAgIGlmKGlvPT0tMSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAKKyAgICAgICAgICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG15cmFkaW9faW5pdChOVUxMKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAodm9pZCkKK3sKKyAgICAgICAgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmFtcDtteV9yYWRpbyk7CisgICAgICAgIHJlbGVhc2VfcmVnaW9uKGlvLCBNWV9JT19TSVpFKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChjbGVhbnVwKTsKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgSW4gdGhpcyBleGFtcGxlIHdlIHNldCB0aGUgSU8gYmFzZSBieSBkZWZhdWx0IGlmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50bworICAgICAgICB0aGUga2VybmVsOiB5b3UgY2FuIHN0aWxsIHNldCBpdCB1c2luZyAibXlfcmFkaW8uaXJxIiBpZiB0aGlzIGZpbGUgaXMgY2FsbGVkIDxmaWxlbmFtZT5teV9yYWRpby5jPC9maWxlbmFtZT4uIEZvciB0aGUgbW9kdWxlIHdlIHJlcXVpcmUgdGhlCisgICAgICAgIHVzZXIgc2V0cyB0aGUgcGFyYW1ldGVyLiBXZSBzZXQgaW8gdG8gYSBub25zZW5zZSBwb3J0ICgtMSkgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgdGVsbCBpZiB0aGUgdXNlciBzdXBwbGllZCBhbiBpbyBwYXJhbWV0ZXIgb3Igbm90LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSB1c2UgTU9EVUxFXyBkZWZpbmVzIHRvIGdpdmUgYW4gYXV0aG9yIGZvciB0aGUgY2FyZCBkcml2ZXIgYW5kIGEKKyAgICAgICAgZGVzY3JpcHRpb24uIFdlIGFsc28gdXNlIHRoZW0gdG8gZGVjbGFyZSB0aGF0IGlvIGlzIGFuIGludGVnZXIgYW5kIGl0IGlzIHRoZQorICAgICAgICBhZGRyZXNzIG9mIHRoZSBjYXJkLCBhbmQgY2FuIGJlIHJlYWQgYnkgYW55b25lIGZyb20gc3lzZnMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBjbGVhbi11cCByb3V0aW5lIHVucmVnaXN0ZXJzIHRoZSB2aWRlb19kZXZpY2Ugd2UgcmVnaXN0ZXJlZCwgYW5kIGZyZWVzCisgICAgICAgIHVwIHRoZSBJL08gc3BhY2UuIE5vdGUgdGhhdCB0aGUgdW5yZWdpc3RlciB0YWtlcyB0aGUgYWN0dWFsIHZpZGVvX2RldmljZQorICAgICAgICBzdHJ1Y3R1cmUgYXMgaXRzIGFyZ3VtZW50LiBVbmxpa2UgdGhlIGZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgd2hpY2ggY2FuIGJlCisgICAgICAgIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzIG9mIGEgZGV2aWNlIGEgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSBhcyBhbiBhY3R1YWwKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRldmljZS4gSWYgeW91IGFyZSByZWdpc3RlcmluZyBtdWx0aXBsZSByYWRpbyBkZXZpY2VzIHlvdQorICAgICAgICBuZWVkIHRvIGZpbGwgaW4gb25lIHN0cnVjdHVyZSBwZXIgZGV2aWNlIChtb3N0IGxpa2VseSBieSBzZXR0aW5nIHVwIGEKKyAgICAgICAgdGVtcGxhdGUgYW5kIGNvcHlpbmcgaXQgdG8gZWFjaCBvZiB0aGUgYWN0dWFsIGRldmljZSBzdHJ1Y3R1cmVzKS4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyPgorICAgICAgICA8dGl0bGU+VmlkZW8gQ2FwdHVyZSBEZXZpY2VzPC90aXRsZT4KKyAgPHNlY3QxIGlkPSJpbnRyb3ZpZCI+CisgIDx0aXRsZT5WaWRlbyBDYXB0dXJlIERldmljZSBUeXBlczwvdGl0bGU+CisgIDxwYXJhPgorICAgICAgICBUaGUgdmlkZW8gY2FwdHVyZSBkZXZpY2VzIHNoYXJlIHRoZSBzYW1lIGludGVyZmFjZXMgYXMgcmFkaW8gZGV2aWNlcy4gSW4KKyAgICAgICAgb3JkZXIgdG8gZXhwbGFpbiB0aGUgdmlkZW8gY2FwdHVyZSBpbnRlcmZhY2UgSSB3aWxsIHVzZSB0aGUgZXhhbXBsZSBvZiBhCisgICAgICAgIGNhbWVyYSB0aGF0IGhhcyBubyB0dW5lcnMgb3IgYXVkaW8gaW5wdXQuIFRoaXMga2VlcHMgdGhlIGV4YW1wbGUgcmVsYXRpdmVseQorICAgICAgICBjbGVhbi4gVG8gZ2V0IGJvdGggY29tYmluZSB0aGUgdHdvIGRyaXZlciBleGFtcGxlcy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVmlkZW8gY2FwdHVyZSBkZXZpY2VzIGRpdmlkZSBpbnRvIGZvdXIgY2F0ZWdvcmllcy4gQSBsaXR0bGUgdGVjaG5vbG9neQorICAgICAgICBiYWNrZ3JvdW5kZXIuIEZ1bGwgbW90aW9uIHZpZGVvIGV2ZW4gYXQgdGVsZXZpc2lvbiByZXNvbHV0aW9uICh3aGljaCBpcworICAgICAgICBhY3R1YWxseSBmYWlybHkgbG93KSBpcyBwcmV0dHkgcmVzb3VyY2UtaW50ZW5zaXZlLiBZb3UgYXJlIGNvbnRpbnVhbGx5CisgICAgICAgIHBhc3NpbmcgbWVnYWJ5dGVzIG9mIGRhdGEgZXZlcnkgc2Vjb25kIGZyb20gdGhlIGNhcHR1cmUgY2FyZCB0byB0aGUgZGlzcGxheS4gCisgICAgICAgIHNldmVyYWwgYWx0ZXJuYXRpdmUgYXBwcm9hY2hlcyBoYXZlIGVtZXJnZWQgYmVjYXVzZSBjb3B5aW5nIHRoaXMgdGhyb3VnaCB0aGUgCisgICAgICAgIHByb2Nlc3NvciBhbmQgdGhlIHVzZXIgcHJvZ3JhbSBpcyBhIHBhcnRpY3VsYXJseSBiYWQgaWRlYSAuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBpcyB0byBhZGQgdGhlIHRlbGV2aXNpb24gaW1hZ2Ugb250byB0aGUgdmlkZW8gb3V0cHV0IGRpcmVjdGx5LgorICAgICAgICBUaGlzIGlzIGFsc28gaG93IHNvbWUgM0QgY2FyZHMgd29yay4gVGhlc2UgYmFzaWMgY2FyZHMgY2FuIGdlbmVyYWxseSBkcm9wIHRoZQorICAgICAgICB2aWRlbyBpbnRvIGFueSBjaG9zZW4gcmVjdGFuZ2xlIG9mIHRoZSBkaXNwbGF5LiBDYXJkcyBsaWtlIHRoaXMsIHdoaWNoCisgICAgICAgIGluY2x1ZGUgbW9zdCBtcGVnMSBjYXJkcyB0aGF0IHVzZWQgdGhlIGZlYXR1cmUgY29ubmVjdG9yLCAgYXJlbid0IHZlcnkKKyAgICAgICAgZnJpZW5kbHkgaW4gYSB3aW5kb3dpbmcgZW52aXJvbm1lbnQuIFRoZXkgZG9uJ3QgdW5kZXJzdGFuZCB3aW5kb3dzIG9yCisgICAgICAgIGNsaXBwaW5nLiBUaGUgdmlkZW8gd2luZG93IGlzIGFsd2F5cyBvbiB0aGUgdG9wIG9mIHRoZSBkaXNwbGF5LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBDaHJvbWEga2V5aW5nIGlzIGEgdGVjaG5pcXVlIHVzZWQgYnkgY2FyZHMgdG8gZ2V0IGFyb3VuZCB0aGlzLiBJdCBpcyBhbiBvbGQKKyAgICAgICAgdGVsZXZpc2lvbiBtaXhpbmcgdHJpY2sgd2hlcmUgeW91IG1hcmsgYWxsIHRoZSBhcmVhcyB5b3Ugd2lzaCB0byByZXBsYWNlCisgICAgICAgIHdpdGggYSBzaW5nbGUgY2xlYXIgY29sb3VyIHRoYXQgaXNuJ3QgdXNlZCBpbiB0aGUgaW1hZ2UgLSBUViBwZW9wbGUgdXNlIGFuCisgICAgICAgIGluY3JlZGlibHkgYnJpZ2h0IGJsdWUgd2hpbGUgY29tcHV0aW5nIHBlb3BsZSBvZnRlbiB1c2UgYSBwYXJ0aWN1bGFybHkKKyAgICAgICAgdmlydWxlbnQgcHVycGxlLiBCcmlnaHQgYmx1ZSBvY2N1cnMgb24gdGhlIGRlc2t0b3AuIEFueW9uZSB3aXRoIHZpcnVsZW50CisgICAgICAgIHB1cnBsZSB3aW5kb3dzIGhhcyBhbm90aGVyIHByb2JsZW0gYmVzaWRlcyB0aGVpciBUViBvdmVybGF5LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXBwcm9hY2ggaXMgdG8gY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXB0dXJlIGNhcmQgdG8gdGhlIHZpZGVvCisgICAgICAgIGNhcmQsIGJ1dCB0byBkbyBpdCBkaXJlY3RseSBhY3Jvc3MgdGhlIFBDSSBidXMuIFRoaXMgcmVsaWV2ZXMgdGhlIHByb2Nlc3NvcgorICAgICAgICBmcm9tIGRvaW5nIHRoZSB3b3JrIGJ1dCBkb2VzIHJlcXVpcmUgc29tZSBzbWFydG5lc3Mgb24gdGhlIHBhcnQgb2YgdGhlIHZpZGVvCisgICAgICAgIGNhcHR1cmUgY2hpcCwgYXMgd2VsbCBhcyBhIHN1aXRhYmxlIHZpZGVvIGNhcmQuIFByb2dyYW1taW5nIHRoaXMga2luZCBvZgorICAgICAgICBjYXJkIGFuZCBtb3JlIHNvIGRlYnVnZ2luZyBpdCBjYW4gYmUgZXh0cmVtZWx5IHRyaWNreS4gVGhlcmUgYXJlIHNvbWUgcXVpdGUKKyAgICAgICAgY29tcGxpY2F0ZWQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRpc3BsYXkgYW5kIHlvdSBtYXkgYWxzbyBoYXZlIHRvIGNvcGUgd2l0aAorICAgICAgICB2YXJpb3VzIGNoaXBzZXQgYnVncyB0aGF0IHNob3cgdXAgd2hlbiBQQ0kgY2FyZHMgc3RhcnQgdGFsa2luZyB0byBlYWNoCisgICAgICAgIG90aGVyLiAKKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVG8ga2VlcCBvdXIgZXhhbXBsZSBmYWlybHkgc2ltcGxlIHdlIHdpbGwgYXNzdW1lIGEgY2FyZCB0aGF0IHN1cHBvcnRzCisgICAgICAgIG92ZXJsYXlpbmcgYSBmbGF0IHJlY3Rhbmd1bGFyIGltYWdlIG9udG8gdGhlIGZyYW1lIGJ1ZmZlciBvdXRwdXQsIGFuZCB3aGljaAorICAgICAgICBjYW4gYWxzbyBjYXB0dXJlIHN0dWZmIGludG8gcHJvY2Vzc29yIG1lbW9yeS4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9InJlZ3ZpZCI+CisgIDx0aXRsZT5SZWdpc3RlcmluZyBWaWRlbyBDYXB0dXJlIERldmljZXM8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgICAgVGhpcyB0aW1lIHdlIG5lZWQgdG8gYWRkIG1vcmUgZnVuY3Rpb25zIGZvciBvdXIgY2FtZXJhIGRldmljZS4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBteV9jYW1lcmEKK3sKKyAgICAgICAgIk15IENhbWVyYSIsCisgICAgICAgIFZJRF9UWVBFX09WRVJMQVl8VklEX1RZUEVfU0NBTEVTfFwKKyAgICAgICAgVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9DSFJPTUFLRVksCisgICAgICAgIFZJRF9IQVJEV0FSRV9NWUNBTUVSQSwKKyAgICAgICAgY2FtZXJhX29wZW4uCisgICAgICAgIGNhbWVyYV9jbG9zZSwKKyAgICAgICAgY2FtZXJhX3JlYWQsICAgICAgLyogbm8gcmVhZCAqLworICAgICAgICBOVUxMLCAgICAgICAgICAgICAvKiBubyB3cml0ZSAqLworICAgICAgICBjYW1lcmFfcG9sbCwgICAgICAvKiBubyBwb2xsICovCisgICAgICAgIGNhbWVyYV9pb2N0bCwKKyAgICAgICAgTlVMTCwgICAgICAgICAgICAgLyogbm8gc3BlY2lhbCBpbml0IGZ1bmN0aW9uICovCisgICAgICAgIE5VTEwgICAgICAgICAgICAgIC8qIG5vIHByaXZhdGUgZGF0YSAqLworfTsKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFdlIG5lZWQgYSByZWFkKCkgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCBmb3IgY2FwdHVyaW5nIGRhdGEgZnJvbQorICAgICAgICB0aGUgY2FyZCwgYW5kIHdlIG5lZWQgYSBwb2xsIGZ1bmN0aW9uIHNvIHRoYXQgYSBkcml2ZXIgY2FuIHdhaXQgZm9yIHRoZSBuZXh0CisgICAgICAgIGZyYW1lIHRvIGJlIGNhcHR1cmVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSB1c2UgdGhlIGV4dHJhIHZpZGVvIGNhcGFiaWxpdHkgZmxhZ3MgdGhhdCBkaWQgbm90IGFwcGx5IHRvIHRoZQorICAgICAgICByYWRpbyBpbnRlcmZhY2UuIFRoZSB2aWRlbyByZWxhdGVkIGZsYWdzIGFyZQorICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPkNhcHR1cmUgQ2FwYWJpbGl0aWVzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKzxlbnRyeT5WSURfVFlQRV9DQVBUVVJFPC9lbnRyeT48ZW50cnk+V2Ugc3VwcG9ydCBpbWFnZSBjYXB0dXJlPC9lbnRyeT4KKzwvcm93Pjxyb3c+Cis8ZW50cnk+VklEX1RZUEVfVEVMRVRFWFQ8L2VudHJ5PjxlbnRyeT5BIHRlbGV0ZXh0IGNhcHR1cmUgZGV2aWNlICh2Yml7bl0pPC9lbnRyeT4KKzwvcm93Pjxyb3c+Cis8ZW50cnk+VklEX1RZUEVfT1ZFUkxBWTwvZW50cnk+PGVudHJ5PlRoZSBpbWFnZSBjYW4gYmUgZGlyZWN0bHkgb3ZlcmxhaWQgb250byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgYnVmZmVyPC9lbnRyeT4KKzwvcm93Pjxyb3c+Cis8ZW50cnk+VklEX1RZUEVfQ0hST01BS0VZPC9lbnRyeT48ZW50cnk+Q2hyb21ha2V5IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB3aGljaCBwYXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaW1hZ2UgdG8gZGlzcGxheTwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX0NMSVBQSU5HPC9lbnRyeT48ZW50cnk+SXQgaXMgcG9zc2libGUgdG8gZ2l2ZSB0aGUgYm9hcmQgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZXMgdG8gZHJhdyBhcm91bmQuIDwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX0ZSQU1FUkFNPC9lbnRyeT48ZW50cnk+VGhlIHZpZGVvIGNhcHR1cmUgZ29lcyBpbnRvIHRoZSB2aWRlbyBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFjdHVhbGx5IGNoYW5nZXMgaXQuIEFwcGxpY2F0aW9ucyBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGtub3cgdGhpcyBzbyB0aGV5IGNhbiBjbGVhbiB1cCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZDwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX1NDQUxFUzwvZW50cnk+PGVudHJ5PlRoZSBpbWFnZSBjYW4gYmUgc2NhbGVkIHRvIHZhcmlvdXMgc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGJlaW5nIGEgc2luZ2xlIGZpeGVkIHNpemUuPC9lbnRyeT4KKzwvcm93Pjxyb3c+Cis8ZW50cnk+VklEX1RZUEVfTU9OT0NIUk9NRTwvZW50cnk+PGVudHJ5PlRoZSBjYXB0dXJlIHdpbGwgYmUgbW9ub2Nocm9tZS4gVGhpcyBpc24ndCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlIGFuc3dlciB0byB0aGUgcXVlc3Rpb24gc2luY2UgYSBtb25vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYSBvbiBhIGNvbG91ciBjYXB0dXJlIGNhcmQgd2lsbCBzdGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIG1vbm8gb3V0cHV0LjwvZW50cnk+Cis8L3Jvdz48cm93PgorPGVudHJ5PlZJRF9UWVBFX1NVQkNBUFRVUkU8L2VudHJ5PjxlbnRyeT5UaGUgY2FyZCBhbGxvd3Mgb25seSBwYXJ0IG9mIGl0cyBmaWVsZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IHRvIGJlIGNhcHR1cmVkLiBUaGlzIGVuYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHRvIGF2b2lkIGNvcHlpbmcgYWxsIG9mIGEgbGFyZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaW50byBtZW1vcnkgd2hlbiBvbmx5IHNvbWUgc2VjdGlvbiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudC48L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPHBhcmE+CisgICAgICAgIFdlIHNldCBWSURfVFlQRV9DQVBUVVJFIHNvIHRoYXQgd2UgYXJlIHNlZW4gYXMgYSBjYXB0dXJlIGNhcmQsCisgICAgICAgIFZJRF9UWVBFX0NIUk9NQUtFWSBzbyB0aGUgYXBwbGljYXRpb24ga25vd3MgaXQgaXMgdGltZSB0byBkcmF3IGluIHZpcnVsZW50CisgICAgICAgIHB1cnBsZSwgYW5kIFZJRF9UWVBFX1NDQUxFUyBiZWNhdXNlIHdlIGNhbiBiZSByZXNpemVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBPdXIgc2V0dXAgaXMgZmFpcmx5IHNpbWlsYXIuIFRoaXMgdGltZSB3ZSBhbHNvIHdhbnQgYW4gaW50ZXJydXB0IGxpbmUKKyAgICAgICAgZm9yIHRoZSAnZnJhbWUgY2FwdHVyZWQnIHNpZ25hbC4gTm90IGFsbCBjYXJkcyBoYXZlIHRoaXMgc28gc29tZSBvZiB0aGVtCisgICAgICAgIGNhbm5vdCBoYW5kbGUgcG9sbCgpLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IGlvID0gMHgzMjA7CitzdGF0aWMgaW50IGlycSA9IDExOworCitpbnQgX19pbml0IG15Y2FtZXJhX2luaXQoc3RydWN0IHZpZGVvX2luaXQgKnYpCit7CisgICAgICAgIGlmKCFyZXF1ZXN0X3JlZ2lvbihpbywgTVlfSU9fU0laRSwgIm15Y2FtZXJhIikpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgCisgICAgICAgICAgICAgICAgICAgICAgIm15Y2FtZXJhOiBwb3J0IDB4JTAzWCBpcyBpbiB1c2UuXG4iLCBpbyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHZpZGVvX2RldmljZV9yZWdpc3RlcigmYW1wO215X2NhbWVyYSwgCisgICAgICAgICAgICBWRkxfVFlQRV9HUkFCQkVSKT09LTEpIHsKKyAgICAgICAgICAgICAgICByZWxlYXNlX3JlZ2lvbihpbywgTVlfSU9fU0laRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgbGl0dGxlIGNoYW5nZWQgZnJvbSB0aGUgbmVlZHMgb2YgdGhlIHJhZGlvIGNhcmQuIFdlIHNwZWNpZnkKKyAgICAgICAgVkZMX1RZUEVfR1JBQkJFUiB0aGlzIHRpbWUgYXMgd2Ugd2FudCB0byBiZSBhbGxvY2F0ZWQgYSAvZGV2L3ZpZGVvIG5hbWUuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJvcHZpZCI+CisgIDx0aXRsZT5PcGVuaW5nIEFuZCBDbG9zaW5nIFRoZSBDYXB0dXJlIERldmljZTwvdGl0bGU+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IHVzZXJzID0gMDsKKworc3RhdGljIGludCBjYW1lcmFfb3BlbihzdHVjdCB2aWRlb19kZXZpY2UgKmRldiwgaW50IGZsYWdzKQoreworICAgICAgICBpZih1c2VycykKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICBpZihyZXF1ZXN0X2lycShpcnEsIGNhbWVyYV9pcnEsIDAsICJjYW1lcmEiLCBkZXYpJmx0OzApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgdXNlcnMrKzsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBjYW1lcmFfY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQoreworICAgICAgICB1c2Vycy0tOworICAgICAgICBmcmVlX2lycShpcnEsIGRldik7Cit9CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMgYXJlIGFsc28gcXVpdGUgc2ltaWxhci4gVGhlIG9ubHkgcmVhbCBjaGFuZ2UgaXMKKyAgICAgICAgdGhhdCB3ZSBub3cgcmVxdWVzdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBjYW1lcmEgZGV2aWNlIGludGVycnVwdCBsaW5lLiBJZiB3ZQorICAgICAgICBjYW5ub3QgZ2V0IHRoZSBpbnRlcnJ1cHQgd2UgcmVwb3J0IEVCVVNZIHRvIHRoZSBhcHBsaWNhdGlvbiBhbmQgZ2l2ZSB1cC4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImlycXZpZCI+CisgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxpbmc8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgICAgT3VyIGV4YW1wbGUgaGFuZGxlciBpcyBmb3IgYW4gSVNBIGJ1cyBkZXZpY2UuIElmIGl0IHdhcyBQQ0kgeW91IHdvdWxkIGJlCisgICAgICAgIGFibGUgdG8gc2hhcmUgdGhlIGludGVycnVwdCBhbmQgd291bGQgaGF2ZSBzZXQgU0FfU0hJUlEgdG8gaW5kaWNhdGUgYSAKKyAgICAgICAgc2hhcmVkIElSUS4gV2UgcGFzcyB0aGUgZGV2aWNlIHBvaW50ZXIgYXMgdGhlIGludGVycnVwdCByb3V0aW5lIGFyZ3VtZW50LiBXZQorICAgICAgICBkb24ndCBuZWVkIHRvIHNpbmNlIHdlIG9ubHkgc3VwcG9ydCBvbmUgY2FyZCBidXQgZG9pbmcgdGhpcyB3aWxsIG1ha2UgaXQKKyAgICAgICAgZWFzaWVyIHRvIHVwZ3JhZGUgdGhlIGRyaXZlciBmb3IgbXVsdGlwbGUgZGV2aWNlcyBpbiB0aGUgZnV0dXJlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBPdXIgaW50ZXJydXB0IHJvdXRpbmUgbmVlZHMgdG8gZG8gbGl0dGxlIGlmIHdlIGFzc3VtZSB0aGUgY2FyZCBjYW4gc2ltcGx5CisgICAgICAgIHF1ZXVlIG9uZSBmcmFtZSB0byBiZSByZWFkIGFmdGVyIGl0IGNhcHR1cmVzIGl0LiAKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworc3RhdGljIHN0cnVjdCB3YWl0X3F1ZXVlICpjYXB0dXJlX3dhaXQ7CitzdGF0aWMgaW50IGNhcHR1cmVfcmVhZHkgPSAwOworCitzdGF0aWMgdm9pZCBjYW1lcmFfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworICAgICAgICBjYXB0dXJlX3JlYWR5PTE7CisgICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmYW1wO2NhcHR1cmVfd2FpdCk7Cit9CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgbmljZSBhbmQgc2ltcGxlIGZvciB0aGlzIGNhcmQgYXMgd2UgYXJlIGFzc3VtaW5nCisgICAgICAgIHRoZSBjYXJkIGlzIGJ1ZmZlcmluZyB0aGUgZnJhbWUgZm9yIHVzLiBUaGlzIG1lYW5zIHdlIGhhdmUgbGl0dGxlIHRvIGRvIGJ1dAorICAgICAgICB3YWtlIHVwICAgICAgICBhbnlib2R5IGludGVyZXN0ZWQuIFdlIGFsc28gc2V0IGEgY2FwdHVyZV9yZWFkeSBmbGFnLCBhcyB3ZSBtYXkKKyAgICAgICAgY2FwdHVyZSBhIGZyYW1lIGJlZm9yZSBhbiBhcHBsaWNhdGlvbiBuZWVkcyBpdC4gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8ga25vdworICAgICAgICB0aGF0IGEgZnJhbWUgaXMgcmVhZHkuIElmIHdlIGhhZCB0byBjb2xsZWN0IHRoZSBmcmFtZSBvbiB0aGUgaW50ZXJydXB0IGxpZmUKKyAgICAgICAgd291bGQgYmUgbW9yZSBjb21wbGV4LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgdHdvIG5ldyByb3V0aW5lcyB3ZSBuZWVkIHRvIHN1cHBseSBhcmUgY2FtZXJhX3JlYWQgd2hpY2ggcmV0dXJucyBhCisgICAgICAgIGZyYW1lLCBhbmQgY2FtZXJhX3BvbGwgd2hpY2ggd2FpdHMgZm9yIGEgZnJhbWUgdG8gYmVjb21lIHJlYWR5LgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgaW50IGNhbWVyYV9wb2xsKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgCisJc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlICp3YWl0KQoreworICAgICAgICBwb2xsX3dhaXQoZmlsZSwgJmFtcDtjYXB0dXJlX3dhaXQsIHdhaXQpOworICAgICAgICBpZihjYXB0dXJlX3JlYWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBPTExJTnxQT0xMUkROT1JNOworICAgICAgICByZXR1cm4gMDsKK30KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgT3VyIHdhaXQgcXVldWUgZm9yIHBvbGxpbmcgaXMgdGhlIGNhcHR1cmVfd2FpdCBxdWV1ZS4gVGhpcyB3aWxsIGNhdXNlIHRoZQorICAgICAgICB0YXNrIHRvIGJlIHdva2VuIHVwIGJ5IG91ciBjYW1lcmFfaXJxIHJvdXRpbmUuIFdlIGNoZWNrIGNhcHR1cmVfcmVhZCB0byBzZWUKKyAgICAgICAgaWYgdGhlcmUgaXMgYW4gaW1hZ2UgcHJlc2VudCBhbmQgaWYgc28gcmVwb3J0IHRoYXQgaXQgaXMgcmVhZGFibGUuCisgIDwvcGFyYT4KKyAgPC9zZWN0MT4KKyAgPHNlY3QxIGlkPSJyZHZpZCI+CisgIDx0aXRsZT5SZWFkaW5nIFRoZSBWaWRlbyBJbWFnZTwvdGl0bGU+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgbG9uZyBjYW1lcmFfcmVhZChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKyAgICAgICAgc3RydWN0IHdhaXRfcXVldWUgd2FpdCA9IHsgY3VycmVudCwgTlVMTCB9OworICAgICAgICB1OCAqcHRyOworICAgICAgICBpbnQgbGVuOworICAgICAgICBpbnQgaTsKKworICAgICAgICBhZGRfd2FpdF9xdWV1ZSgmYW1wO2NhcHR1cmVfd2FpdCwgJmFtcDt3YWl0KTsKKworICAgICAgICB3aGlsZSghY2FwdHVyZV9yZWFkeSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGZpbGUtPmZsYWdzJmFtcDtPX05ERUxBWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2NhcHR1cmVfd2FpdCwgJmFtcDt3YWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FV09VTERCTE9DSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJmFtcDtjYXB0dXJlX3dhaXQsICZhbXA7d2FpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVJFU1RBUlRTWVM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNjaGVkdWxlKCk7CisgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisgICAgICAgIH0KKyAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJmFtcDtjYXB0dXJlX3dhaXQsICZhbXA7d2FpdCk7CisgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QgdGhpbmcgd2UgaGF2ZSB0byBkbyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgYXBwbGljYXRpb24gd2FpdHMgdW50aWwKKyAgICAgICAgdGhlIG5leHQgZnJhbWUgaXMgcmVhZHkuIFRoZSBjb2RlIGhlcmUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgbW91c2UgY29kZQorICAgICAgICB3ZSB1c2VkIGVhcmxpZXIgaW4gdGhpcyBjaGFwdGVyLiBJdCBpcyBvbmUgb2YgdGhlIGNvbW1vbiBidWlsZGluZyBibG9ja3Mgb2YKKyAgICAgICAgTGludXggZGV2aWNlIGRyaXZlciBjb2RlIGFuZCBwcm9iYWJseSBvbmUgd2hpY2ggeW91IHdpbGwgZmluZCBvY2N1cnMgaW4gYW55CisgICAgICAgIGRyaXZlcnMgeW91IHdyaXRlLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXZSB3YWl0IGZvciBhIGZyYW1lIHRvIGJlIHJlYWR5LCBvciBmb3IgYSBzaWduYWwgdG8gaW50ZXJydXB0IG91ciB3YWl0aW5nLiBJZiBhCisgICAgICAgIHNpZ25hbCBvY2N1cnMgd2UgbmVlZCB0byByZXR1cm4gZnJvbSB0aGUgc3lzdGVtIGNhbGwgc28gdGhhdCB0aGUgc2lnbmFsIGNhbgorICAgICAgICBiZSBzZW50IHRvIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYuIFdlIGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIGFjdHVhbGx5CisgICAgICAgIHdhbnRlZCB0byBhdm9pZCB3YWl0aW5nIC0gaWUgIGlmIHRoZXkgYXJlIHVzaW5nIG5vbi1ibG9ja2luZyBJL08gYW5kIGhhdmUgb3RoZXIgdGhpbmdzIAorICAgICAgICB0byBnZXQgb24gd2l0aC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgTmV4dCB3ZSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHVzZXIgYXBwbGljYXRpb24uIFRoaXMgaXMgcmFyZWx5CisgICAgICAgIGFzIGVhc3kgYXMgb3VyIGV4YW1wbGUgbWFrZXMgb3V0LiBXZSB3aWxsIGFkZCBjYXB0dXJlX3csIGFuZCBjYXB0dXJlX2ggaGVyZQorICAgICAgICB0byBob2xkIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBjYXB0dXJlZCBpbWFnZS4gV2UgYXNzdW1lIHRoZSBjYXJkIG9ubHkKKyAgICAgICAgc3VwcG9ydHMgMjRiaXQgUkdCIGZvciBub3cuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKworICAgICAgICBjYXB0dXJlX3JlYWR5ID0gMDsKKworICAgICAgICBwdHI9KHU4ICopYnVmOworICAgICAgICBsZW4gPSBjYXB0dXJlX3cgKiAzICogY2FwdHVyZV9oOyAvKiAyNGJpdCBSR0IgKi8KKworICAgICAgICBpZihsZW4+Y291bnQpCisgICAgICAgICAgICAgICAgbGVuPWNvdW50OyAgLyogRG9lc24ndCBhbGwgZml0ICovCisKKyAgICAgICAgZm9yKGk9MDsgaSZsdDtsZW47IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHB1dF91c2VyKGluYihpbytJTUFHRV9EQVRBKSwgcHRyKTsKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgfQorCisgICAgICAgIGhhcmR3YXJlX3Jlc3RhcnRfY2FwdHVyZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gaTsKK30KKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgRm9yIGEgcmVhbCBoYXJkd2FyZSBkZXZpY2UgeW91IHdvdWxkIHRyeSB0byBhdm9pZCB0aGUgbG9vcCB3aXRoIHB1dF91c2VyKCkuCisgICAgICAgIEVhY2ggY2FsbCB0byBwdXRfdXNlcigpIGhhcyBhIHRpbWUgb3ZlcmhlYWQgY2hlY2tpbmcgd2hldGhlciB0aGUgYWNjZXNzZXMgdG8gdXNlcgorICAgICAgICBzcGFjZSBhcmUgYWxsb3dlZC4gSXQgd291bGQgYmUgYmV0dGVyIHRvIHJlYWQgYSBsaW5lIGludG8gYSB0ZW1wb3JhcnkgYnVmZmVyCisgICAgICAgIHRoZW4gY29weSB0aGlzIHRvIHVzZXIgc3BhY2UgaW4gb25lIGdvLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBIYXZpbmcgY2FwdHVyZWQgdGhlIGltYWdlIGFuZCBwdXQgaXQgaW50byB1c2VyIHNwYWNlIHdlIGNhbiBraWNrIHRoZSBjYXJkIHRvCisgICAgICAgIGdldCB0aGUgbmV4dCBmcmFtZSBhY3F1aXJlZC4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImlvY3ZpZCI+CisgIDx0aXRsZT5WaWRlbyBJb2N0bCBIYW5kbGluZzwvdGl0bGU+CisgIDxwYXJhPgorICAgICAgICBBcyB3aXRoIHRoZSByYWRpbyBkcml2ZXIgdGhlIG1ham9yIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHZpYSB0aGUgaW9jdGwoKQorICAgICAgICBmdW5jdGlvbi4gVmlkZW8gY2FwdHVyZSBkZXZpY2VzIHN1cHBvcnQgdGhlIHNhbWUgdHVuZXIgY2FsbHMgYXMgYSByYWRpbworICAgICAgICBkZXZpY2UgYW5kIGFsc28gc3VwcG9ydCBhZGRpdGlvbmFsIGNhbGxzIHRvIGNvbnRyb2wgaG93IHRoZSB2aWRlbyBmdW5jdGlvbnMKKyAgICAgICAgYXJlIGhhbmRsZWQuIEluIHRoaXMgc2ltcGxlIGV4YW1wbGUgdGhlIGNhcmQgaGFzIG5vIHR1bmVycyB0byBhdm9pZCBtYWtpbmcKKyAgICAgICAgdGhlIGNvZGUgY29tcGxleC4gCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKworc3RhdGljIGludCBjYW1lcmFfaW9jdGwoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisgICAgICAgIHN3aXRjaChjbWQpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dDQVA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkV8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklEX1RZUEVfQ0hST01BS0VZfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJRF9UWVBFX1NDQUxFU3xcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURfVFlQRV9PVkVSTEFZOworICAgICAgICAgICAgICAgICAgICAgICAgdi5jaGFubmVscyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB2LmF1ZGlvcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lm1heHdpZHRoID0gNjQwOworICAgICAgICAgICAgICAgICAgICAgICAgdi5taW53aWR0aCA9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgdi5tYXhoZWlnaHQgPSA0ODA7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbmhlaWdodCA9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHYubmFtZSwgIk15IENhbWVyYSIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDt2LCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QgaW9jdGwgd2UgbXVzdCBzdXBwb3J0IGFuZCB3aGljaCBhbGwgdmlkZW8gY2FwdHVyZSBhbmQgcmFkaW8KKyAgICAgICAgZGV2aWNlcyBhcmUgcmVxdWlyZWQgdG8gc3VwcG9ydCBpcyBWSURJT0NHQ0FQLiBUaGlzIGJlaGF2ZXMgZXhhY3RseSB0aGUgc2FtZQorICAgICAgICBhcyB3aXRoIGEgcmFkaW8gZGV2aWNlLiBUaGlzIHRpbWUsIGhvd2V2ZXIsIHdlIHJlcG9ydCB0aGUgZXh0cmEgY2FwYWJpbGl0aWVzCisgICAgICAgIHdlIG91dGxpbmVkIGVhcmxpZXIgb24gd2hlbiBkZWZpbmluZyBvdXIgdmlkZW9fZGV2IHN0cnVjdHVyZS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2Ugbm93IHNldCB0aGUgdmlkZW8gZmxhZ3Mgc2F5aW5nIHRoYXQgd2Ugc3VwcG9ydCBvdmVybGF5LCBjYXB0dXJlLAorICAgICAgICBzY2FsaW5nIGFuZCBjaHJvbWFrZXkuIFdlIGFsc28gcmVwb3J0IHNpemUgbGltaXRzIC0gb3VyIHNtYWxsZXN0IGltYWdlIGlzCisgICAgICAgIDE2eDE2IHBpeGVscywgb3VyIGxhcmdlc3QgaXMgNjQweDQ4MC4gCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSB3ZSByZXBvcnQgbm8gYXVkaW8gYW5kIG5vIHR1bmluZyBjYXBhYmlsaXRpZXMgYXQgYWxsLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4gICAgICAgIAorCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHQ0hBTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5jaGFubmVsICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgdi5mbGFncyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2LnR1bmVycyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2LnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYubm9ybSA9IFZJREVPX01PREVfQVVUTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJDYW1lcmEgSW5wdXQiKTticmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgVGhpcyBmb2xsb3dzIHdoYXQgaXMgdmVyeSBtdWNoIHRoZSBzdGFuZGFyZCB3YXkgYW4gaW9jdGwgaGFuZGxlciBsb29rcworICAgICAgICBpbiBMaW51eC4gV2UgY29weSB0aGUgZGF0YSBpbnRvIGEga2VybmVsIHNwYWNlIHZhcmlhYmxlIGFuZCB3ZSBjaGVjayB0aGF0IHRoZQorICAgICAgICByZXF1ZXN0IGlzIHZhbGlkIChpbiB0aGlzIGNhc2UgdGhhdCB0aGUgaW5wdXQgaXMgMCkuIEZpbmFsbHkgd2UgY29weSB0aGUKKyAgICAgICAgY2FtZXJhIGluZm8gYmFjayB0byB0aGUgdXNlci4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgVGhlIFZJRElPQ0dDSEFOIGlvY3RsIGFsbG93cyBhIHVzZXIgdG8gYXNrIGFib3V0IHZpZGVvIGNoYW5uZWxzICh0aGF0IGlzCisgICAgICAgIGlucHV0cyB0byB0aGUgdmlkZW8gY2FyZCkuIE91ciBleGFtcGxlIGNhcmQgaGFzIGEgc2luZ2xlIGNhbWVyYSBpbnB1dC4gVGhlCisgICAgICAgIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlIGFyZQorICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIGZpZWxkczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgIDx0Ym9keT4KKyAgIDxyb3c+CisKKyAgIDxlbnRyeT5jaGFubmVsPC9lbnRyeT48ZW50cnk+VGhlIGNoYW5uZWwgbnVtYmVyIHdlIGFyZSBzZWxlY3Rpbmc8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+VGhlIG5hbWUgZm9yIHRoaXMgY2hhbm5lbC4gVGhpcyBpcyBpbnRlbmRlZAorICAgICAgICAgICAgICAgICAgIHRvIGRlc2NyaWJlIHRoZSBwb3J0IHRvIHRoZSB1c2VyLgorICAgICAgICAgICAgICAgICAgIEFwcHJvcHJpYXRlIG5hbWVzIGFyZSB0aGVyZWZvcmUgdGhpbmdzIGxpa2UKKyAgICAgICAgICAgICAgICAgICAiQ2FtZXJhIiAiU0NBUlQgaW5wdXQiPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+ZmxhZ3M8L2VudHJ5PjxlbnRyeT5DaGFubmVsIHByb3BlcnRpZXM8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT50eXBlPC9lbnRyeT48ZW50cnk+SW5wdXQgdHlwZTwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgPGVudHJ5Pm5vcm08L2VudHJ5PjxlbnRyeT5UaGUgY3VycmVudCB0ZWxldmlzaW9uIGVuY29kaW5nIGJlaW5nIHVzZWQKKyAgICAgICAgICAgICAgICAgICBpZiByZWxldmFudCBmb3IgdGhpcyBjaGFubmVsLgorICAgIDwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX2NoYW5uZWwgZmxhZ3M8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgIDx0Ym9keT4KKyAgICA8cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVkNfVFVORVI8L2VudHJ5PjxlbnRyeT5DaGFubmVsIGhhcyBhIHR1bmVyLjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVkNfQVVESU88L2VudHJ5PjxlbnRyeT5DaGFubmVsIGhhcyBhdWRpby48L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIHR5cGVzPC90aXRsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KKyAgICA8dGJvZHk+CisgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX1RZUEVfVFY8L2VudHJ5PjxlbnRyeT5UZWxldmlzaW9uIGlucHV0LjwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fVFlQRV9DQU1FUkE8L2VudHJ5PjxlbnRyeT5GaXhlZCBjYW1lcmEgaW5wdXQuPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisJPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT5UeXBlIGlzIHVua25vd24uPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBub3JtczwvdGl0bGU+CisgICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICAgPHRib2R5PgorICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1BBTDwvZW50cnk+PGVudHJ5PlBBTCBlbmNvZGVkIFRlbGV2aXNpb248L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX01PREVfTlRTQzwvZW50cnk+PGVudHJ5Pk5UU0MgKFVTKSBlbmNvZGVkIFRlbGV2aXNpb248L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PlZJREVPX01PREVfU0VDQU08L2VudHJ5PjxlbnRyeT5TRUNBTSAoRnJlbmNoKSBUZWxldmlzaW9uIDwvZW50cnk+CisgICA8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9BVVRPPC9lbnRyeT48ZW50cnk+QXV0b21hdGljIHN3aXRjaGluZywgb3IgZm9ybWF0IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcjwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBWSURJT0NTQ0hBTiBpb2N0bCBhbGxvd3MgYSB1c2VyIHRvIGNoYW5nZSBjaGFubmVsIGFuZCB0bworICAgICAgICByZXF1ZXN0IHRoZSBub3JtIGlzIGNoYW5nZWQgLSBmb3IgZXhhbXBsZSB0byBzd2l0Y2ggYmV0d2VlbiBhIFBBTCBvciBhbiBOVFNDCisgICAgICAgIGZvcm1hdCBjYW1lcmEuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NDSEFOOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jaGFubmVsIHY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LmNoYW5uZWwgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2Lm5vcm0gIT0gVklERU9fTU9ERV9BVVRPKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjYWxsIGluIG91ciBkcml2ZXIgaXMgcmVtYXJrYWJseSBlYXN5LiBCZWNhdXNlIHdlCisgICAgICAgIGFyZSBhc3N1bWluZyBmaXhlZCBmb3JtYXQgaGFyZHdhcmUgd2UgbmVlZCBvbmx5IGNoZWNrIHRoYXQgdGhlIHVzZXIgaGFzIG5vdAorICAgICAgICB0cmllZCB0byBjaGFuZ2UgYW55dGhpbmcuIAorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgdXNlciBhbHNvIG5lZWRzIHRvIGJlIGFibGUgdG8gY29uZmlndXJlIGFuZCBhZGp1c3QgdGhlIHBpY3R1cmUgdGhleSBhcmUKKyAgICAgICAgc2VlaW5nLiBUaGlzIGlzIG11Y2ggbGlrZSBhZGp1c3RpbmcgYSB0ZWxldmlzaW9uIHNldC4gQSB1c2VyIGFwcGxpY2F0aW9uCisgICAgICAgIGFsc28gbmVlZHMgdG8ga25vdyB0aGUgcGFsZXR0ZSBiZWluZyB1c2VkIHNvIHRoYXQgaXQga25vd3MgaG93IHRvIGRpc3BsYXkKKyAgICAgICAgdGhlIGltYWdlIHRoYXQgaGFzIGJlZW4gY2FwdHVyZWQuIFRoZSBWSURJT0NHUElDVCBhbmQgVklESU9DU1BJQ1QgaW9jdGwKKyAgICAgICAgY2FsbHMgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHUElDVAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHY7CisgICAgICAgICAgICAgICAgICAgICAgICB2LmJyaWdodG5lc3MgPSBoYXJkd2FyZV9icmlnaHRuZXNzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2Lmh1ZSA9IGhhcmR3YXJlX2h1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdi5jb2xvdXIgPSBoYXJkd2FyZV9zYXR1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2LmNvbnRyYXN0ID0gaGFyZHdhcmVfYnJpZ2h0bmVzcygpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHNldHRhYmxlICovCisgICAgICAgICAgICAgICAgICAgICAgICB2LndoaXRlbmVzcyA9IDMyNzY4OworICAgICAgICAgICAgICAgICAgICAgICAgdi5kZXB0aCA9IDI0OyAgICAgICAgICAgLyogMjRiaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHYucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoJmFtcDt2LCBhcmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgYnJpZ2h0bmVzcywgaHVlLCBjb2xvciwgYW5kIGNvbnRyYXN0IHByb3ZpZGUgdGhlIHBpY3R1cmUgY29udHJvbHMgdGhhdAorICAgICAgICBhcmUgYWtpbiB0byBhIGNvbnZlbnRpb25hbCB0ZWxldmlzaW9uLiBXaGl0ZW5lc3MgcHJvdmlkZXMgYWRkaXRpb25hbAorICAgICAgICBjb250cm9sIGZvciBncmV5c2NhbGUgaW1hZ2VzLiBBbGwgb2YgdGhlc2UgdmFsdWVzIGFyZSBzY2FsZWQgYmV0d2VlbiAwLTY1NTM1CisgICAgICAgIGFuZCBoYXZlIDMyNzY4IGFzIHRoZSBtaWQgcG9pbnQgc2V0dGluZy4gVGhlIHNjYWxpbmcgbWVhbnMgdGhhdCBhcHBsaWNhdGlvbnMKKyAgICAgICAgZG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGNhcGFiaWxpdHkgcmFuZ2Ugb2YgdGhlIGhhcmR3YXJlIGJ1dCBjYW4gbGV0CisgICAgICAgIGl0IG1ha2UgYSBiZXN0IGVmZm9ydCBhdHRlbXB0LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBPdXIgZGVwdGggaXMgMjQsIGFzIHRoaXMgaXMgaW4gYml0cy4gV2Ugd2lsbCBiZSByZXR1cm5pbmcgUkdCMjQgZm9ybWF0LiBUaGlzCisgICAgICAgIGhhcyBvbmUgYnl0ZSBvZiByZWQsIHRoZW4gb25lIG9mIGdyZWVuLCB0aGVuIG9uZSBvZiBibHVlLiBUaGlzIHRoZW4gcmVwZWF0cworICAgICAgICBmb3IgZXZlcnkgb3RoZXIgcGl4ZWwgaW4gdGhlIGltYWdlLiBUaGUgb3RoZXIgY29tbW9uIGZvcm1hdHMgdGhlIGludGVyZmFjZSAKKyAgICAgICAgZGVmaW5lcyBhcmUKKyAgPC9wYXJhPgorICAgPHRhYmxlIGZyYW1lPSJhbGwiPjx0aXRsZT5GcmFtZWJ1ZmZlciBFbmNvZGluZ3M8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgPGVudHJ5PkdSRVk8L2VudHJ5PjxlbnRyeT5MaW5lYXIgZ3JleXNjYWxlLiBUaGlzIGlzIGZvciBzaW1wbGUgY2FtZXJhcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsaWtlPC9lbnRyeT4KKyAgIDwvcm93Pjxyb3c+CisgICA8ZW50cnk+UkdCNTY1PC9lbnRyeT48ZW50cnk+VGhlIHRvcCA1IGJpdHMgaG9sZCAzMiByZWQgbGV2ZWxzLCB0aGUgbmV4dCBzaXggYml0cworICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCBncmVlbiBhbmQgdGhlIGxvdyA1IGJpdHMgaG9sZCBibHVlLiA8L2VudHJ5PgorICAgPC9yb3c+PHJvdz4KKyAgIDxlbnRyeT5SR0I1NTU8L2VudHJ5PjxlbnRyeT5UaGUgdG9wIGJpdCBpcyBjbGVhci4gVGhlIHJlZCBncmVlbiBhbmQgYmx1ZSBsZXZlbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggb2NjdXB5IGZpdmUgYml0cy48L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPHBhcmE+CisgICAgICAgIEFkZGl0aW9uYWwgbW9kZXMgYXJlIHN1cHBvcnQgZm9yIFlVViBjYXB0dXJlIGZvcm1hdHMuIFRoZXNlIGFyZSBjb21tb24gZm9yCisgICAgICAgIFRWIGFuZCB2aWRlbyBjb25mZXJlbmNpbmcgYXBwbGljYXRpb25zLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBUaGUgVklESU9DU1BJQ1QgaW9jdGwgYWxsb3dzIGEgdXNlciB0byBzZXQgc29tZSBvZiB0aGUgcGljdHVyZSBwYXJhbWV0ZXJzLgorICAgICAgICBFeGFjdGx5IHdoaWNoIG9uZXMgYXJlIHN1cHBvcnRlZCBkZXBlbmRzIGhlYXZpbHkgb24gdGhlIGNhcmQgaXRzZWxmLiBJdCBpcworICAgICAgICBwb3NzaWJsZSB0byBzdXBwb3J0IG1hbnkgbW9kZXMgYW5kIGVmZmVjdHMgaW4gc29mdHdhcmUuIEluIGdlbmVyYWwgZG9pbmcKKyAgICAgICAgdGhpcyBpbiB0aGUga2VybmVsIGlzIGEgYmFkIGlkZWEuIFZpZGVvIGNhcHR1cmUgaXMgYSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUKKyAgICAgICAgYXBwbGljYXRpb24gYW5kIHRoZSBwcm9ncmFtcyBjYW4gb2Z0ZW4gZG8gYmV0dGVyIGlmIHRoZXkgYXJlbid0IGJlaW5nCisgICAgICAgICdoZWxwZWQnIGJ5IGFuIG92ZXJrZWVuIGRyaXZlciB3cml0ZXIuIFRodXMgZm9yIG91ciBkZXZpY2Ugd2Ugd2lsbCByZXBvcnQKKyAgICAgICAgUkdCMjQgb25seSBhbmQgcmVmdXNlIHRvIGFsbG93IGEgY2hhbmdlLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTUElDVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2OworICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5kZXB0aCE9MjQgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2LnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SR0IyNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaGFyZHdhcmVfYnJpZ2h0bmVzcyh2LmJyaWdodG5lc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2h1ZSh2Lmh1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaGFyZHdhcmVfc2F0dXJhdGlvbih2LmNvbG91cik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaGFyZHdhcmVfYnJpZ2h0bmVzcyh2LmNvbnRyYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBXZSBjaGVjayB0aGUgdXNlciBoYXMgbm90IHRyaWVkIHRvIGNoYW5nZSB0aGUgcGFsZXR0ZSBvciB0aGUgZGVwdGguIFdlIGRvCisgICAgICAgIG5vdCB3YW50IHRvIGNhcnJ5IG91dCBzb21lIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGVuIHJldHVybiBhbiBlcnJvci4gVGhpcyBtYXkKKyAgICAgICAgY29uZnVzZSB0aGUgYXBwbGljYXRpb24gd2hpY2ggd2lsbCBiZSBhc3N1bWluZyBubyBjaGFuZ2Ugb2NjdXJyZWQuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIEluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZSBwaWN0dXJlIGNvbnRyb2xzIHRvCisgICAgICAgIGdldCB0aGUgcmlnaHQgY2FwdHVyZSBpbWFnZXMsIG1hbnkgY2FyZHMgbmVlZCB0byBrbm93IHdoYXQgdGhleSBhcmUKKyAgICAgICAgZGlzcGxheWluZyBvbnRvIHdoZW4gZ2VuZXJhdGluZyBvdmVybGF5IG91dHB1dC4gSW4gc29tZSBjYXNlcyBnZXR0aW5nIHRoaXMKKyAgICAgICAgd3JvbmcgZXZlbiBtYWtlcyBhIG5hc3R5IG1lc3Mgb3IgbWF5IGNyYXNoIHRoZSBjb21wdXRlci4gRm9yIHRoYXQgcmVhc29uCisgICAgICAgIHRoZSBWSURJT0NTQlVGIGlvY3RsIHVzZWQgdG8gc2V0IHVwIHRoZSBmcmFtZSBidWZmZXIgaW5mb3JtYXRpb24gbWF5IHdlbGwKKyAgICAgICAgb25seSBiZSB1c2FibGUgYnkgcm9vdC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgICAgV2Ugd2lsbCBhc3N1bWUgb3VyIGNhcmQgaXMgb25lIG9mIHRoZSBvbGQgSVNBIGRldmljZXMgd2l0aCBmZWF0dXJlIGNvbm5lY3RvcgorICAgICAgICBhbmQgb25seSBzdXBwb3J0cyBhIGNvdXBsZSBvZiBzdGFuZGFyZCB2aWRlbyBtb2Rlcy4gVmVyeSBjb21tb24gZm9yIG9sZGVyCisgICAgICAgIGNhcmRzIGFsdGhvdWdoIHRoZSBQQ0kgZGV2aWNlcyBhcmUgd2F5IHNtYXJ0ZXIgdGhhbiB0aGlzLgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKworCitzdGF0aWMgc3RydWN0IHZpZGVvX2J1ZmZlciBjYXB0dXJlX2ZiOworCisgICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHRkJVRjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2NhcHR1cmVfZmIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2FwdHVyZV9mYikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorCisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFdlIGtlZXAgdGhlIGZyYW1lIGJ1ZmZlciBpbmZvcm1hdGlvbiBpbiB0aGUgZm9ybWF0IHRoZSBpb2N0bCB1c2VzLiBUaGlzCisgICAgICAgIG1ha2VzIGl0IG5pY2UgYW5kIGVhc3kgdG8gd29yayB3aXRoIGluIHRoZSBpb2N0bCBjYWxscy4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NGQlVGOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19idWZmZXIgdjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYud2lkdGghPTMyMCAmYW1wOyZhbXA7IHYud2lkdGghPTY0MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LmhlaWdodCE9MjAwICZhbXA7JmFtcDsgdi5oZWlnaHQhPTI0MCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFtcDsmYW1wOyB2LmhlaWdodCE9NDAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgdi5oZWlnaHQgIT00ODApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZhbXA7Y2FwdHVyZV9mYiwgJmFtcDt2LCBzaXplb2YodikpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X2ZiKCZhbXA7dik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworCisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgICBUaGUgY2FwYWJsZSgpIGZ1bmN0aW9uIGNoZWNrcyBhIHVzZXIgaGFzIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LiBUaGUgTGludXgKKyAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBoYXMgYSBzZXQgb2YgYWJvdXQgMzAgY2FwYWJpbGl0aWVzIGluZGljYXRpbmcgcHJpdmlsZWdlZAorICAgICAgICBhY2Nlc3MgdG8gc2VydmljZXMuIFRoZSBkZWZhdWx0IHNldCB1cCBnaXZlcyB0aGUgc3VwZXJ1c2VyICh1aWQgMCkgYWxsIG9mCisgICAgICAgIHRoZW0gYW5kIG5vYm9keSBlbHNlIGhhcyBhbnkuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIFdlIGNoZWNrIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSBTWVNfQURNSU4gY2FwYWJpbGl0eSwgdGhhdCBpcyB0aGV5IGFyZQorICAgICAgICBhbGxvd2VkIHRvIG9wZXJhdGUgYXMgdGhlIG1hY2hpbmUgYWRtaW5pc3RyYXRvci4gV2UgZG9uJ3Qgd2FudCBhbnlvbmUgYnV0CisgICAgICAgIHRoZSBhZG1pbmlzdHJhdG9yIG1ha2luZyBhIG1lc3Mgb2YgdGhlIGRpc3BsYXkuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIE5leHQgd2UgY2hlY2sgZm9yIHN0YW5kYXJkIFBDIHZpZGVvIG1vZGVzICgzMjAgb3IgNjQwIHdpZGUgd2l0aCBlaXRoZXIKKyAgICAgICAgRUdBIG9yIFZHQSBkZXB0aHMpLiBJZiB0aGUgbW9kZSBpcyBub3QgYSBzdGFuZGFyZCB2aWRlbyBtb2RlIHdlIHJlamVjdCBpdCBhcworICAgICAgICBub3Qgc3VwcG9ydGVkIGJ5IG91ciBjYXJkLiBJZiB0aGUgbW9kZSBpcyBhY2NlcHRhYmxlIHdlIHNhdmUgaXQgc28gdGhhdAorICAgICAgICBWSURJT0NGQlVGIHdpbGwgZ2l2ZSB0aGUgcmlnaHQgYW5zd2VyIG5leHQgdGltZSBpdCBpcyBjYWxsZWQuICBUaGUKKyAgICAgICAgaGFyZHdhcmVfc2V0X2ZiKCkgZnVuY3Rpb24gaXMgc29tZSB1bmRlc2NyaWJlZCBjYXJkIHNwZWNpZmljIGZ1bmN0aW9uIHRvCisgICAgICAgIHByb2dyYW0gdGhlIGNhcmQgZm9yIHRoZSBkZXNpcmVkIG1vZGUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICAgIEJlZm9yZSB0aGUgZHJpdmVyIGNhbiBkaXNwbGF5IGFuIG92ZXJsYXkgd2luZG93IGl0IG5lZWRzIHRvIGtub3cgd2hlcmUgdGhlCisgICAgICAgIHdpbmRvdyBzaG91bGQgYmUgcGxhY2VkLCBhbmQgYWxzbyBob3cgbGFyZ2UgaXQgc2hvdWxkIGJlLiBJZiB0aGUgY2FyZAorICAgICAgICBzdXBwb3J0cyBjbGlwcGluZyBpdCBuZWVkcyB0byBrbm93IHdoaWNoIHJlY3RhbmdsZXMgdG8gb21pdCBmcm9tIHRoZQorICAgICAgICBkaXNwbGF5LiBUaGUgdmlkZW9fd2luZG93IHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB3YXkgdGhlIGltYWdlIAorICAgICAgICBzaG91bGQgYmUgZGlzcGxheWVkLiAKKyAgIDwvcGFyYT4KKyAgIDx0YWJsZSBmcmFtZT0iYWxsIj48dGl0bGU+c3RydWN0IHZpZGVvX3dpbmRvdyBmaWVsZHM8L3RpdGxlPgorICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+CisgICA8dGJvZHk+CisgICA8cm93PgorICAgICAgICA8ZW50cnk+d2lkdGg8L2VudHJ5PjxlbnRyeT5UaGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBkZXNpcmVkIGltYWdlLiBUaGUgY2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgbWF5IHVzZSBhIHNtYWxsZXIgc2l6ZSBpZiB0aGlzIHNpemUgaXMgbm90IGF2YWlsYWJsZTwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PmhlaWdodDwvZW50cnk+PGVudHJ5PlRoZSBoZWlnaHQgb2YgdGhlIGltYWdlLiBUaGUgY2FyZCBtYXkgdXNlIGEgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBpZiB0aGlzIHNpemUgaXMgbm90IGF2YWlsYWJsZS48L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT54PC9lbnRyeT48ZW50cnk+ICAgVGhlIFggcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IG9mIHRoZSB3aW5kb3cuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHBpeGVscyByZWxhdGl2ZSB0byB0aGUgbGVmdCBoYW5kIGVkZ2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwaWN0dXJlLiBOb3QgYWxsIGNhcmRzIGNhbiBkaXNwbGF5IGltYWdlcyBhbGlnbmVkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcGl4ZWwgYm91bmRhcnkuIElmIHRoZSBwb3NpdGlvbiBpcyB1bnN1aXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2FyZCBhZGp1c3RzIHRoZSBpbWFnZSByaWdodCBhbmQgcmVkdWNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5Pnk8L2VudHJ5PjxlbnRyeT4gICBUaGUgWSBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgb2YgdGhlIHdpbmRvdy4gVGhpcworICAgICAgICAgICAgICAgICAgICAgICAgaXMgY291bnRlZCBpbiBwaXhlbHMgcmVsYXRpdmUgdG8gdGhlIHRvcCBlZGdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGljdHVyZS4gQXMgd2l0aCB0aGUgd2lkdGggaWYgdGhlIGNhcmQgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ICBzdGFydGluZyBvbiB0aGlzIGxpbmUgaXQgd2lsbCBhZGp1c3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuPC9lbnRyeT4KKwk8L3Jvdz48cm93PgorICAgICAgICA8ZW50cnk+Y2hyb21ha2V5PC9lbnRyeT48ZW50cnk+VGhlIGNvbG91ciAoZXhwcmVzc2VkIGluIFJHQjMyIGZvcm1hdCkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21ha2V5IGNvbG91ciBpZiBjaHJvbWEga2V5aW5nIGlzIGJlaW5nIHVzZWQuIDwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PmNsaXBzPC9lbnRyeT48ZW50cnk+QW4gYXJyYXkgb2YgcmVjdGFuZ2xlcyB0aGF0IG11c3Qgbm90IGJlIGRyYXduCisJCQlvdmVyLjwvZW50cnk+CisJPC9yb3c+PHJvdz4KKyAgICAgICAgPGVudHJ5PmNsaXBjb3VudDwvZW50cnk+PGVudHJ5PlRoZSBudW1iZXIgb2YgY2xpcHMgaW4gdGhpcyBhcnJheS48L2VudHJ5PgorICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgRWFjaCBjbGlwIGlzIGEgc3RydWN0IHZpZGVvX2NsaXAgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzCisgICA8L3BhcmE+CisgICA8dGFibGUgZnJhbWU9ImFsbCI+PHRpdGxlPnZpZGVvX2NsaXAgZmllbGRzPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgorICAgPHRib2R5PgorICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PngsIHk8L2VudHJ5PjxlbnRyeT5Dby1vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGRpc3BsYXk8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT53aWR0aCwgaGVpZ2h0PC9lbnRyeT48ZW50cnk+V2lkdGggYW5kIGhlaWdodCBpbiBwaXhlbHM8L2VudHJ5PgorCTwvcm93Pjxyb3c+CisgICAgICAgIDxlbnRyeT5uZXh0PC9lbnRyeT48ZW50cnk+QSBzcGFyZSBmaWVsZCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZTwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBpdCBhbHdheXMgZHJhd3MgaW4gdGhlIGFyZWEgcmVxdWVzdGVkIG9yIGEgICAgICAgIHNtYWxsZXIgYXJlYSwgYW5kIHRoYXQgaXQgbmV2ZXIgZHJhd3MgaW4gYW55IG9mIHRoZSBhcmVhcyB0aGF0IGFyZSBjbGlwcGVkLgorICAgICAgICBUaGlzIG1heSB3ZWxsIG1lYW4gaXQgaGFzIHRvIGxlYXZlIGFsb25lLiBzbWFsbCBhcmVhcyB0aGUgYXBwbGljYXRpb24gd2lzaGVkIHRvIGJlCisgICAgICAgIGRyYXduLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBPdXIgZXhhbXBsZSBjYXJkIHVzZXMgY2hyb21ha2V5IHNvIGRvZXMgbm90IGhhdmUgdG8gYWRkcmVzcyBtb3N0IG9mIHRoZQorICAgICAgICBjbGlwcGluZy4gIFdlIHdpbGwgYWRkIGEgdmlkZW9fd2luZG93IHN0cnVjdHVyZSB0byBvdXIgZ2xvYmFsIHZhcmlhYmxlcyB0bworICAgICAgICByZW1lbWJlciBvdXIgcGFyYW1ldGVycywgYXMgd2UgZGlkIHdpdGggdGhlIGZyYW1lIGJ1ZmZlci4KKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR1dJTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2NhcHR1cmVfd2luLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2FwdHVyZV93aW4pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1dJTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fd2luZG93IHY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoICZndDsgNjQwIHx8IHYuaGVpZ2h0ICZndDsgNDgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYud2lkdGggJmx0OyAxNiB8fCB2LmhlaWdodCAmbHQ7IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF9rZXkodi5jaHJvbWFrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3dpbmRvdyh2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYW1wO2NhcHR1cmVfd2luLCAmYW1wO3YsIHNpemVvZih2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlX3cgPSB2LndpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZV9oID0gdi5oZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKworICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgICAgQmVjYXVzZSB3ZSBhcmUgdXNpbmcgQ2hyb21ha2V5IG91ciBzZXR1cCBpcyBmYWlybHkgc2ltcGxlLiBNb3N0bHkgd2UgaGF2ZSB0bworICAgICAgICBjaGVjayB0aGUgdmFsdWVzIGFyZSBzYW5lIGFuZCBsb2FkIHRoZW0gaW50byB0aGUgY2FwdHVyZSBjYXJkLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgICBXaXRoIGFsbCB0aGUgc2V0dXAgZG9uZSB3ZSBjYW4gbm93IHR1cm4gb24gdGhlIGFjdHVhbCBjYXB0dXJlL292ZXJsYXkuIFRoaXMKKyAgICAgICAgaXMgZG9uZSB3aXRoIHRoZSBWSURJT0NDQVBUVVJFIGlvY3RsLiBUaGlzIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQKKyAgICAgICAgd2hlcmUgMCBpcyBvbiBhbmQgMSBpcyBvZmYuCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKyAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0NBUFRVUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihnZXRfdXNlcih2LCAoaW50ICopYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih2PT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9jYXB0dXJlX29mZigpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYXB0dXJlX2ZiLndpZHRoID09IDAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjYXB0dXJlX3cgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfY2FwdHVyZV9vbigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorCisKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICAgIFdlIGdyYWIgdGhlIGZsYWcgZnJvbSB1c2VyIHNwYWNlIGFuZCBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgYWNjb3JkaW5nIHRvCisgICAgICAgIGl0cyB2YWx1ZS4gVGhlcmUgaXMgb25lIHNtYWxsIGNvcm5lciBjYXNlIHdlIGhhdmUgdG8gY29uc2lkZXIgaGVyZS4gU3VwcG9zZQorICAgICAgICB0aGF0IHRoZSBjYXB0dXJlIHdhcyByZXF1ZXN0ZWQgYmVmb3JlIHRoZSB2aWRlbyB3aW5kb3cgb3IgdGhlIGZyYW1lIGJ1ZmZlcgorICAgICAgICBoYWQgYmVlbiBzZXQgdXAuIEluIHRob3NlIGNhc2VzIHRoZXJlIHdpbGwgYmUgdW5jb25maWd1cmVkIGZpZWxkcyBpbiBvdXIKKyAgICAgICAgY2FyZCBkYXRhLCBhcyB3ZWxsIGFzIHVuY29uZmlndXJlZCBoYXJkd2FyZSBzZXR0aW5ncy4gV2UgY2hlY2sgZm9yIHRoaXMgY2FzZSBhbmQKKyAgICAgICAgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBmcmFtZSBidWZmZXIgb3IgdGhlIGNhcHR1cmUgd2luZG93IHdpZHRoIGlzIHplcm8uCisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorCisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9JT0NUTENNRDsKKyAgICAgICAgfQorfQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKworICAgICAgICBXZSBkb24ndCBuZWVkIHRvIHN1cHBvcnQgYW55IG90aGVyIGlvY3Rscywgc28gaWYgd2UgZ2V0IHRoaXMgZmFyLCBpdCBpcyB0aW1lCisgICAgICAgIHRvIHRlbGwgdGhlIHZpZGVvIGxheWVyIHRoYXQgd2UgZG9uJ3Qgbm93IHdoYXQgdGhlIHVzZXIgaXMgdGFsa2luZyBhYm91dC4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8c2VjdDEgaWQ9ImVuZHZpZCI+CisgIDx0aXRsZT5PdGhlciBGdW5jdGlvbmFsaXR5PC90aXRsZT4KKyAgPHBhcmE+CisgICAgICAgIFRoZSBWaWRlbzRMaW51eCBsYXllciBzdXBwb3J0cyBhZGRpdGlvbmFsIGZlYXR1cmVzLCBpbmNsdWRpbmcgYSBoaWdoCisgICAgICAgIHBlcmZvcm1hbmNlIG1tYXAoKSBiYXNlZCBjYXB0dXJlIG1vZGUgYW5kIGNhcHR1cmluZyBwYXJ0IG9mIHRoZSBpbWFnZS4gCisgICAgICAgIFRoZXNlIGZlYXR1cmVzIGFyZSBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoZSBib29rLiAgWW91IHNob3VsZCBob3dldmVyIGhhdmUgZW5vdWdoIAorICAgICAgICBleGFtcGxlIGNvZGUgdG8gaW1wbGVtZW50IG1vc3Qgc2ltcGxlIHZpZGVvNGxpbnV4IGRldmljZXMgZm9yIHJhZGlvIGFuZCBUVgorICAgICAgICBjYXJkcy4KKyAgPC9wYXJhPgorICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyIGlkPSJidWdzIj4KKyAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KKyAgPHBhcmE+CisgIDx2YXJpYWJsZWxpc3Q+CisgICAgPHZhcmxpc3RlbnRyeT48dGVybT5NdWx0aXBsZSBPcGVuczwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgICAgIFRoZSBkcml2ZXIgYXNzdW1lcyBtdWx0aXBsZSBvcGVucyBzaG91bGQgbm90IGJlIGFsbG93ZWQuIEEgZHJpdmVyCisgICAgICAgIGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ1dCBub3QgY2xlYW5seS4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+QVBJIERlZmljaWVuY2llczwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGlzdGluZyBBUEkgcG9vcmx5IHJlZmxlY3RzIGNvbXByZXNzaW9uIGNhcGFibGUgZGV2aWNlcy4gVGhlcmUKKyAgICAgICAgYXJlIHBsYW5zIGFmb290IHRvIG1lcmdlIFY0TCwgVjRMMiBhbmQgc29tZSBvdGhlciBpZGVhcyBpbnRvIGEKKyAgICAgICAgYmV0dGVyIGludGVyZmFjZS4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyFFZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dhbmJvb2sudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93YW5ib29rLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlYmNjMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93YW5ib29rLnRtcGwKQEAgLTAsMCArMSw5OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzxib29rIGlkPSJXQU5HdWlkZSI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+U3luY2hyb25vdXMgUFBQIGFuZCBDaXNjbyBIRExDIFByb2dyYW1taW5nIEd1aWRlPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5BbGFuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+Q294PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+YWxhbkByZWRoYXQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMDwveWVhcj4KKyAgIDxob2xkZXI+QWxhbiBDb3g8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIHN5bmNwcHAgZHJpdmVycyBpbiBMaW51eCBwcm92aWRlIGEgZmFpcmx5IGNvbXBsZXRlIAorCWltcGxlbWVudGF0aW9uIG9mIENpc2NvIEhETEMgYW5kIGEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZgorCVBQUC4gVGhlIGxvbmdlciB0ZXJtIGdvYWwgaXMgdG8gc3dpdGNoIHRoZSBQUFAgbGF5ZXIgdG8gdGhlCisJZ2VuZXJpYyBQUFAgaW50ZXJmYWNlIHRoYXQgaXMgbmV3IGluIExpbnV4IDIuMy54LiBUaGUgQVBJIHNob3VsZAorCXJlbWFpbiB1bmNoYW5nZWQgd2hlbiB0aGlzIGlzIGRvbmUsIGJ1dCBzdXBwb3J0IHdpbGwgdGhlbiBiZQorCWF2YWlsYWJsZSBmb3IgSVBYLCBjb21wcmVzc2lvbiBhbmQgb3RoZXIgUFBQIGZlYXR1cmVzCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlciBpZD0iYnVncyI+CisgICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+CisgIDxwYXJhPgorICA8dmFyaWFibGVsaXN0PgorICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+UFBQIGlzIG1pbmltYWw8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorCVRoZSBjdXJyZW50IFBQUCBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljLCBhbHRob3VnaCBzdWZmaWNpZW50CisJZm9yIG1vc3Qgd2FuIHVzYWdlcy4KKyAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+Q2lzY28gSERMQyBRdWlya3M8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorCUN1cnJlbnRseSB3ZSBkbyBub3QgZW5kIGFsbCBwYWNrZXRzIHdpdGggdGhlIGNvcnJlY3QgQ2lzY28gbXVsdGljYXN0CisJb3IgdW5pY2FzdCBmbGFncy4gTm90aGluZyBhcHBlYXJzIHRvIG1pbmQgdG9vIG11Y2ggYnV0IHRoaXMgc2hvdWxkCisJYmUgY29ycmVjdGVkLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKwkKKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyFFZHJpdmVycy9uZXQvd2FuL3N5bmNwcHAuYworICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nX3VzYl9kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nX3VzYl9kcml2ZXIudG1wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWYzYmZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmdfdXNiX2RyaXZlci50bXBsCkBAIC0wLDAgKzEsNDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPGJvb2sgaWQ9IlVTQkRldmljZURyaXZlciI+CisgPGJvb2tpbmZvPgorICA8dGl0bGU+V3JpdGluZyBVU0IgRGV2aWNlIERyaXZlcnM8L3RpdGxlPgorICAKKyAgPGF1dGhvcmdyb3VwPgorICAgPGF1dGhvcj4KKyAgICA8Zmlyc3RuYW1lPkdyZWc8L2ZpcnN0bmFtZT4KKyAgICA8c3VybmFtZT5Lcm9haC1IYXJ0bWFuPC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+Z3JlZ0Brcm9haC5jb208L2VtYWlsPgorICAgICA8L2FkZHJlc3M+CisgICAgPC9hZmZpbGlhdGlvbj4KKyAgIDwvYXV0aG9yPgorICA8L2F1dGhvcmdyb3VwPgorCisgIDxjb3B5cmlnaHQ+CisgICA8eWVhcj4yMDAxLTIwMDI8L3llYXI+CisgICA8aG9sZGVyPkdyZWcgS3JvYWgtSGFydG1hbjwvaG9sZGVyPgorICA8L2NvcHlyaWdodD4KKworICA8bGVnYWxub3RpY2U+CisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCisgICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgICAgdmVyc2lvbi4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgIDwvcGFyYT4KKyAgICAgIAorICAgPHBhcmE+CisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKKyAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFydGljbGUgcHVibGlzaGVkIGluIAorICAgICBMaW51eCBKb3VybmFsIE1hZ2F6aW5lLCBPY3RvYmVyIDIwMDEsIElzc3VlIDkwLgorICAgPC9wYXJhPgorICA8L2xlZ2Fsbm90aWNlPgorIDwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKyAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KKyAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICA8cGFyYT4KKyAgICAgIFRoZSBMaW51eCBVU0Igc3Vic3lzdGVtIGhhcyBncm93biBmcm9tIHN1cHBvcnRpbmcgb25seSB0d28gZGlmZmVyZW50CisgICAgICB0eXBlcyBvZiBkZXZpY2VzIGluIHRoZSAyLjIuNyBrZXJuZWwgKG1pY2UgYW5kIGtleWJvYXJkcyksIHRvIG92ZXIgMjAKKyAgICAgIGRpZmZlcmVudCB0eXBlcyBvZiBkZXZpY2VzIGluIHRoZSAyLjQga2VybmVsLiBMaW51eCBjdXJyZW50bHkgc3VwcG9ydHMKKyAgICAgIGFsbW9zdCBhbGwgVVNCIGNsYXNzIGRldmljZXMgKHN0YW5kYXJkIHR5cGVzIG9mIGRldmljZXMgbGlrZSBrZXlib2FyZHMsCisgICAgICBtaWNlLCBtb2RlbXMsIHByaW50ZXJzIGFuZCBzcGVha2VycykgYW5kIGFuIGV2ZXItZ3Jvd2luZyBudW1iZXIgb2YKKyAgICAgIHZlbmRvci1zcGVjaWZpYyBkZXZpY2VzIChzdWNoIGFzIFVTQiB0byBzZXJpYWwgY29udmVydGVycywgZGlnaXRhbAorICAgICAgY2FtZXJhcywgRXRoZXJuZXQgZGV2aWNlcyBhbmQgTVAzIHBsYXllcnMpLiBGb3IgYSBmdWxsIGxpc3Qgb2YgdGhlCisgICAgICBkaWZmZXJlbnQgVVNCIGRldmljZXMgY3VycmVudGx5IHN1cHBvcnRlZCwgc2VlIFJlc291cmNlcy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgIFRoZSByZW1haW5pbmcga2luZHMgb2YgVVNCIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBzdXBwb3J0IG9uIExpbnV4IGFyZQorICAgICAgYWxtb3N0IGFsbCB2ZW5kb3Itc3BlY2lmaWMgZGV2aWNlcy4gRWFjaCB2ZW5kb3IgZGVjaWRlcyB0byBpbXBsZW1lbnQgYQorICAgICAgY3VzdG9tIHByb3RvY29sIHRvIHRhbGsgdG8gdGhlaXIgZGV2aWNlLCBzbyBhIGN1c3RvbSBkcml2ZXIgdXN1YWxseSBuZWVkcworICAgICAgdG8gYmUgY3JlYXRlZC4gU29tZSB2ZW5kb3JzIGFyZSBvcGVuIHdpdGggdGhlaXIgVVNCIHByb3RvY29scyBhbmQgaGVscAorICAgICAgd2l0aCB0aGUgY3JlYXRpb24gb2YgTGludXggZHJpdmVycywgd2hpbGUgb3RoZXJzIGRvIG5vdCBwdWJsaXNoIHRoZW0sIGFuZAorICAgICAgZGV2ZWxvcGVycyBhcmUgZm9yY2VkIHRvIHJldmVyc2UtZW5naW5lZXIuIFNlZSBSZXNvdXJjZXMgZm9yIHNvbWUgbGlua3MKKyAgICAgIHRvIGhhbmR5IHJldmVyc2UtZW5naW5lZXJpbmcgdG9vbHMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgICBCZWNhdXNlIGVhY2ggZGlmZmVyZW50IHByb3RvY29sIGNhdXNlcyBhIG5ldyBkcml2ZXIgdG8gYmUgY3JlYXRlZCwgSSBoYXZlCisgICAgICB3cml0dGVuIGEgZ2VuZXJpYyBVU0IgZHJpdmVyIHNrZWxldG9uLCBtb2RlbGVkIGFmdGVyIHRoZSBwY2ktc2tlbGV0b24uYworICAgICAgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHVwb24gd2hpY2ggbWFueSBQQ0kgbmV0d29yayBkcml2ZXJzIGhhdmUKKyAgICAgIGJlZW4gYmFzZWQuIFRoaXMgVVNCIHNrZWxldG9uIGNhbiBiZSBmb3VuZCBhdCBkcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworICAgICAgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSW4gdGhpcyBhcnRpY2xlIEkgd2lsbCB3YWxrIHRocm91Z2ggdGhlIGJhc2ljcworICAgICAgb2YgdGhlIHNrZWxldG9uIGRyaXZlciwgZXhwbGFpbmluZyB0aGUgZGlmZmVyZW50IHBpZWNlcyBhbmQgd2hhdCBuZWVkcyB0bworICAgICAgYmUgZG9uZSB0byBjdXN0b21pemUgaXQgdG8geW91ciBzcGVjaWZpYyBkZXZpY2UuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJiYXNpY3MiPgorICAgICAgPHRpdGxlPkxpbnV4IFVTQiBCYXNpY3M8L3RpdGxlPgorICA8cGFyYT4KKyAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgYSBMaW51eCBVU0IgZHJpdmVyLCBwbGVhc2UgYmVjb21lIGZhbWlsaWFyIHdpdGgKKyAgICAgIHRoZSBVU0IgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbi4gSXQgY2FuIGJlIGZvdW5kLCBhbG9uZyB3aXRoIG1hbnkgb3RoZXIKKyAgICAgIHVzZWZ1bCBkb2N1bWVudHMsIGF0IHRoZSBVU0IgaG9tZSBwYWdlIChzZWUgUmVzb3VyY2VzKS4gQW4gZXhjZWxsZW50CisgICAgICBpbnRyb2R1Y3Rpb24gdG8gdGhlIExpbnV4IFVTQiBzdWJzeXN0ZW0gY2FuIGJlIGZvdW5kIGF0IHRoZSBVU0IgV29ya2luZworICAgICAgRGV2aWNlcyBMaXN0IChzZWUgUmVzb3VyY2VzKS4gSXQgZXhwbGFpbnMgaG93IHRoZSBMaW51eCBVU0Igc3Vic3lzdGVtIGlzCisgICAgICBzdHJ1Y3R1cmVkIGFuZCBpbnRyb2R1Y2VzIHRoZSByZWFkZXIgdG8gdGhlIGNvbmNlcHQgb2YgVVNCIHVyYnMsIHdoaWNoCisgICAgICBhcmUgZXNzZW50aWFsIHRvIFVTQiBkcml2ZXJzLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgVGhlIGZpcnN0IHRoaW5nIGEgTGludXggVVNCIGRyaXZlciBuZWVkcyB0byBkbyBpcyByZWdpc3RlciBpdHNlbGYgd2l0aAorICAgICAgdGhlIExpbnV4IFVTQiBzdWJzeXN0ZW0sIGdpdmluZyBpdCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGRldmljZXMKKyAgICAgIHRoZSBkcml2ZXIgc3VwcG9ydHMgYW5kIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHdoZW4gYSBkZXZpY2Ugc3VwcG9ydGVkCisgICAgICBieSB0aGUgZHJpdmVyIGlzIGluc2VydGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBBbGwgb2YgdGhpcworICAgICAgaW5mb3JtYXRpb24gaXMgcGFzc2VkIHRvIHRoZSBVU0Igc3Vic3lzdGVtIGluIHRoZSB1c2JfZHJpdmVyIHN0cnVjdHVyZS4KKyAgICAgIFRoZSBza2VsZXRvbiBkcml2ZXIgZGVjbGFyZXMgYSB1c2JfZHJpdmVyIGFzOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBza2VsX2RyaXZlciA9IHsKKyAgICAgICAgLm5hbWUgICAgICAgID0gInNrZWxldG9uIiwKKyAgICAgICAgLnByb2JlICAgICAgID0gc2tlbF9wcm9iZSwKKyAgICAgICAgLmRpc2Nvbm5lY3QgID0gc2tlbF9kaXNjb25uZWN0LAorICAgICAgICAuZm9wcyAgICAgICAgPSAmYW1wO3NrZWxfZm9wcywKKyAgICAgICAgLm1pbm9yICAgICAgID0gVVNCX1NLRUxfTUlOT1JfQkFTRSwKKyAgICAgICAgLmlkX3RhYmxlICAgID0gc2tlbF90YWJsZSwKK307CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICAgVGhlIHZhcmlhYmxlIG5hbWUgaXMgYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGRyaXZlci4gSXQgaXMgdXNlZCBpbgorICAgICAgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBwcmludGVkIHRvIHRoZSBzeXN0ZW0gbG9nLiBUaGUgcHJvYmUgYW5kCisgICAgICBkaXNjb25uZWN0IGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBjYWxsZWQgd2hlbiBhIGRldmljZSB0aGF0IG1hdGNoZXMgdGhlCisgICAgICBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiB0aGUgaWRfdGFibGUgdmFyaWFibGUgaXMgZWl0aGVyIHNlZW4gb3IgcmVtb3ZlZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgIFRoZSBmb3BzIGFuZCBtaW5vciB2YXJpYWJsZXMgYXJlIG9wdGlvbmFsLiBNb3N0IFVTQiBkcml2ZXJzIGhvb2sgaW50bworICAgICAgYW5vdGhlciBrZXJuZWwgc3Vic3lzdGVtLCBzdWNoIGFzIHRoZSBTQ1NJLCBuZXR3b3JrIG9yIFRUWSBzdWJzeXN0ZW0uCisgICAgICBUaGVzZSB0eXBlcyBvZiBkcml2ZXJzIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCB0aGUgb3RoZXIga2VybmVsCisgICAgICBzdWJzeXN0ZW0sIGFuZCBhbnkgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYXJlIHByb3ZpZGVkIHRocm91Z2ggdGhhdAorICAgICAgaW50ZXJmYWNlLiBCdXQgZm9yIGRyaXZlcnMgdGhhdCBkbyBub3QgaGF2ZSBhIG1hdGNoaW5nIGtlcm5lbCBzdWJzeXN0ZW0sCisgICAgICBzdWNoIGFzIE1QMyBwbGF5ZXJzIG9yIHNjYW5uZXJzLCBhIG1ldGhvZCBvZiBpbnRlcmFjdGluZyB3aXRoIHVzZXIgc3BhY2UKKyAgICAgIGlzIG5lZWRlZC4gVGhlIFVTQiBzdWJzeXN0ZW0gcHJvdmlkZXMgYSB3YXkgdG8gcmVnaXN0ZXIgYSBtaW5vciBkZXZpY2UKKyAgICAgIG51bWJlciBhbmQgYSBzZXQgb2YgZmlsZV9vcGVyYXRpb25zIGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgZW5hYmxlIHRoaXMKKyAgICAgIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoZSBza2VsZXRvbiBkcml2ZXIgbmVlZHMgdGhpcyBraW5kIG9mIGludGVyZmFjZSwKKyAgICAgIHNvIGl0IHByb3ZpZGVzIGEgbWlub3Igc3RhcnRpbmcgbnVtYmVyIGFuZCBhIHBvaW50ZXIgdG8gaXRzCisgICAgICBmaWxlX29wZXJhdGlvbnMgZnVuY3Rpb25zLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICAgVGhlIFVTQiBkcml2ZXIgaXMgdGhlbiByZWdpc3RlcmVkIHdpdGggYSBjYWxsIHRvIHVzYl9yZWdpc3RlciwgdXN1YWxseSBpbgorICAgICAgdGhlIGRyaXZlcidzIGluaXQgZnVuY3Rpb24sIGFzIHNob3duIGhlcmU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIGludCBfX2luaXQgdXNiX3NrZWxfaW5pdCh2b2lkKQoreworICAgICAgICBpbnQgcmVzdWx0OworCisgICAgICAgIC8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKyAgICAgICAgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhbXA7c2tlbF9kcml2ZXIpOworICAgICAgICBpZiAocmVzdWx0ICZsdDsgMCkgeworICAgICAgICAgICAgICAgIGVycigmcXVvdDt1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgJnF1b3Q7X19GSUxFX18gJnF1b3Q7ZHJpdmVyLiZxdW90OworICAgICAgICAgICAgICAgICAgICAmcXVvdDtFcnJvciBudW1iZXIgJWQmcXVvdDssIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdCh1c2Jfc2tlbF9pbml0KTsKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQgZnJvbSB0aGUgc3lzdGVtLCBpdCBuZWVkcyB0byB1bnJlZ2lzdGVyCisgICAgICBpdHNlbGYgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS4gVGhpcyBpcyBkb25lIHdpdGggdGhlIHVzYl91bnJlZ2lzdGVyCisgICAgICBmdW5jdGlvbjoKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NrZWxfZXhpdCh2b2lkKQoreworICAgICAgICAvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKyAgICAgICAgdXNiX2RlcmVnaXN0ZXIoJmFtcDtza2VsX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh1c2Jfc2tlbF9leGl0KTsKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgIFRvIGVuYWJsZSB0aGUgbGludXgtaG90cGx1ZyBzeXN0ZW0gdG8gbG9hZCB0aGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgd2hlbgorICAgICB0aGUgZGV2aWNlIGlzIHBsdWdnZWQgaW4sIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIE1PRFVMRV9ERVZJQ0VfVEFCTEUuIFRoZQorICAgICBmb2xsb3dpbmcgY29kZSB0ZWxscyB0aGUgaG90cGx1ZyBzY3JpcHRzIHRoYXQgdGhpcyBtb2R1bGUgc3VwcG9ydHMgYQorICAgICBzaW5nbGUgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIHByb2R1Y3QgSUQ6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNrZWxfdGFibGUgW10gPSB7CisgICAgICAgIHsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCisgICAgICAgIHsgfSAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc2tlbF90YWJsZSk7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBUaGVyZSBhcmUgb3RoZXIgbWFjcm9zIHRoYXQgY2FuIGJlIHVzZWQgaW4gZGVzY3JpYmluZyBhIHVzYl9kZXZpY2VfaWQgZm9yCisgICAgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGEgd2hvbGUgY2xhc3Mgb2YgVVNCIGRyaXZlcnMuIFNlZSB1c2IuaCBmb3IgbW9yZQorICAgICBpbmZvcm1hdGlvbiBvbiB0aGlzLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZGV2aWNlIj4KKyAgICAgIDx0aXRsZT5EZXZpY2Ugb3BlcmF0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgIFdoZW4gYSBkZXZpY2UgaXMgcGx1Z2dlZCBpbnRvIHRoZSBVU0IgYnVzIHRoYXQgbWF0Y2hlcyB0aGUgZGV2aWNlIElECisgICAgIHBhdHRlcm4gdGhhdCB5b3VyIGRyaXZlciByZWdpc3RlcmVkIHdpdGggdGhlIFVTQiBjb3JlLCB0aGUgcHJvYmUgZnVuY3Rpb24KKyAgICAgaXMgY2FsbGVkLiBUaGUgdXNiX2RldmljZSBzdHJ1Y3R1cmUsIGludGVyZmFjZSBudW1iZXIgYW5kIHRoZSBpbnRlcmZhY2UgSUQKKyAgICAgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb246CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIGludCBza2VsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgVGhlIGRyaXZlciBub3cgbmVlZHMgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkZXZpY2UgaXMgYWN0dWFsbHkgb25lIHRoYXQgaXQKKyAgICAgY2FuIGFjY2VwdC4gSWYgc28sIGl0IHJldHVybnMgMC4KKyAgICAgSWYgbm90LCBvciBpZiBhbnkgZXJyb3Igb2NjdXJzIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYW4gZXJyb3Jjb2RlCisgICAgIChzdWNoIGFzIDxsaXRlcmFsPi1FTk9NRU08L2xpdGVyYWw+IG9yIDxsaXRlcmFsPi1FTk9ERVY8L2xpdGVyYWw+KQorICAgICBpcyByZXR1cm5lZCBmcm9tIHRoZSBwcm9iZSBmdW5jdGlvbi4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgSW4gdGhlIHNrZWxldG9uIGRyaXZlciwgd2UgZGV0ZXJtaW5lIHdoYXQgZW5kIHBvaW50cyBhcmUgbWFya2VkIGFzIGJ1bGstaW4KKyAgICAgYW5kIGJ1bGstb3V0LiBXZSBjcmVhdGUgYnVmZmVycyB0byBob2xkIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IGFuZAorICAgICByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UsIGFuZCBhIFVTQiB1cmIgdG8gd3JpdGUgZGF0YSB0byB0aGUgZGV2aWNlIGlzCisgICAgIGluaXRpYWxpemVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICBDb252ZXJzZWx5LCB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBVU0IgYnVzLCB0aGUgZGlzY29ubmVjdAorICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZGV2aWNlIHBvaW50ZXIuIFRoZSBkcml2ZXIgbmVlZHMgdG8gY2xlYW4gYW55CisgICAgIHByaXZhdGUgZGF0YSB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBhdCB0aGlzIHRpbWUgYW5kIHRvIHNodXQgZG93biBhbnkKKyAgICAgcGVuZGluZyB1cmJzIHRoYXQgYXJlIGluIHRoZSBVU0Igc3lzdGVtLiBUaGUgZHJpdmVyIGFsc28gdW5yZWdpc3RlcnMKKyAgICAgaXRzZWxmIGZyb20gdGhlIGRldmZzIHN1YnN5c3RlbSB3aXRoIHRoZSBjYWxsOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKy8qIHJlbW92ZSBvdXIgZGV2ZnMgbm9kZSAqLworZGV2ZnNfdW5yZWdpc3Rlcihza2VsLT5kZXZmcyk7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBOb3cgdGhhdCB0aGUgZGV2aWNlIGlzIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtIGFuZCB0aGUgZHJpdmVyIGlzIGJvdW5kIHRvCisgICAgIHRoZSBkZXZpY2UsIGFueSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoZSBmaWxlX29wZXJhdGlvbnMgc3RydWN0dXJlIHRoYXQKKyAgICAgd2VyZSBwYXNzZWQgdG8gdGhlIFVTQiBzdWJzeXN0ZW0gd2lsbCBiZSBjYWxsZWQgZnJvbSBhIHVzZXIgcHJvZ3JhbSB0cnlpbmcKKyAgICAgdG8gdGFsayB0byB0aGUgZGV2aWNlLiBUaGUgZmlyc3QgZnVuY3Rpb24gY2FsbGVkIHdpbGwgYmUgb3BlbiwgYXMgdGhlCisgICAgIHByb2dyYW0gdHJpZXMgdG8gb3BlbiB0aGUgZGV2aWNlIGZvciBJL08uIFdlIGluY3JlbWVudCBvdXIgcHJpdmF0ZSB1c2FnZQorICAgICBjb3VudCBhbmQgc2F2ZSBvZmYgYSBwb2ludGVyIHRvIG91ciBpbnRlcm5hbCBzdHJ1Y3R1cmUgaW4gdGhlIGZpbGUKKyAgICAgc3RydWN0dXJlLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBmdXR1cmUgY2FsbHMgdG8gZmlsZSBvcGVyYXRpb25zIHdpbGwKKyAgICAgZW5hYmxlIHRoZSBkcml2ZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIGRldmljZSB0aGUgdXNlciBpcyBhZGRyZXNzaW5nLiAgQWxsCisgICAgIG9mIHRoaXMgaXMgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZToKKyAgPC9wYXJhPgorICA8cHJvZ3JhbWxpc3Rpbmc+CisvKiBpbmNyZW1lbnQgb3VyIHVzYWdlIGNvdW50IGZvciB0aGUgbW9kdWxlICovCisrK3NrZWwtPm9wZW5fY291bnQ7CisKKy8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCitmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBBZnRlciB0aGUgb3BlbiBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSByZWFkIGFuZCB3cml0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZAorICAgICB0byByZWNlaXZlIGFuZCBzZW5kIGRhdGEgdG8gdGhlIGRldmljZS4gSW4gdGhlIHNrZWxfd3JpdGUgZnVuY3Rpb24sIHdlCisgICAgIHJlY2VpdmUgYSBwb2ludGVyIHRvIHNvbWUgZGF0YSB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIHNlbmQgdG8gdGhlIGRldmljZQorICAgICBhbmQgdGhlIHNpemUgb2YgdGhlIGRhdGEuIFRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIGhvdyBtdWNoIGRhdGEgaXQgY2FuCisgICAgIHNlbmQgdG8gdGhlIGRldmljZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgd3JpdGUgdXJiIGl0IGhhcyBjcmVhdGVkICh0aGlzCisgICAgIHNpemUgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgYnVsayBvdXQgZW5kIHBvaW50IHRoYXQgdGhlIGRldmljZSBoYXMpLgorICAgICBUaGVuIGl0IGNvcGllcyB0aGUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsIHNwYWNlLCBwb2ludHMgdGhlIHVyYiB0bworICAgICB0aGUgZGF0YSBhbmQgc3VibWl0cyB0aGUgdXJiIHRvIHRoZSBVU0Igc3Vic3lzdGVtLiAgVGhpcyBjYW4gYmUgc2hvd24gaW4KKyAgICAgaGUgZm9sbG93aW5nIGNvZGU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorLyogd2UgY2FuIG9ubHkgd3JpdGUgYXMgbXVjaCBhcyAxIHVyYiB3aWxsIGhvbGQgKi8KK2J5dGVzX3dyaXR0ZW4gPSAoY291bnQgPiBza2VsLT5idWxrX291dF9zaXplKSA/IHNrZWwtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKworLyogY29weSB0aGUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgaW50byBvdXIgdXJiICovCitjb3B5X2Zyb21fdXNlcihza2VsLT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyLCBieXRlc193cml0dGVuKTsKKworLyogc2V0IHVwIG91ciB1cmIgKi8KK3VzYl9maWxsX2J1bGtfdXJiKHNrZWwtPndyaXRlX3VyYiwKKyAgICAgICAgICAgICAgICAgIHNrZWwtPmRldiwKKyAgICAgICAgICAgICAgICAgIHVzYl9zbmRidWxrcGlwZShza2VsLT5kZXYsIHNrZWwtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksCisgICAgICAgICAgICAgICAgICBza2VsLT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4sCisgICAgICAgICAgICAgICAgICBza2VsX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICBza2VsKTsKKworLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoc2tlbC0+d3JpdGVfdXJiKTsKK2lmIChyZXN1bHQpIHsKKyAgICAgICAgZXJyKCZxdW90O0ZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQmcXVvdDssIHJlc3VsdCk7Cit9CisgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgIDxwYXJhPgorICAgICBXaGVuIHRoZSB3cml0ZSB1cmIgaXMgZmlsbGVkIHVwIHdpdGggdGhlIHByb3BlciBpbmZvcm1hdGlvbiB1c2luZyB0aGUKKyAgICAgdXNiX2ZpbGxfYnVsa191cmIgZnVuY3Rpb24sIHdlIHBvaW50IHRoZSB1cmIncyBjb21wbGV0aW9uIGNhbGxiYWNrIHRvIGNhbGwgb3VyCisgICAgIG93biBza2VsX3dyaXRlX2J1bGtfY2FsbGJhY2sgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlCisgICAgIHVyYiBpcyBmaW5pc2hlZCBieSB0aGUgVVNCIHN1YnN5c3RlbS4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbgorICAgICBpbnRlcnJ1cHQgY29udGV4dCwgc28gY2F1dGlvbiBtdXN0IGJlIHRha2VuIG5vdCB0byBkbyB2ZXJ5IG11Y2ggcHJvY2Vzc2luZworICAgICBhdCB0aGF0IHRpbWUuIE91ciBpbXBsZW1lbnRhdGlvbiBvZiBza2VsX3dyaXRlX2J1bGtfY2FsbGJhY2sgbWVyZWx5CisgICAgIHJlcG9ydHMgaWYgdGhlIHVyYiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciBub3QgYW5kIHRoZW4gcmV0dXJucy4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgVGhlIHJlYWQgZnVuY3Rpb24gd29ya3MgYSBiaXQgZGlmZmVyZW50bHkgZnJvbSB0aGUgd3JpdGUgZnVuY3Rpb24gaW4gdGhhdAorICAgICB3ZSBkbyBub3QgdXNlIGFuIHVyYiB0byB0cmFuc2ZlciBkYXRhIGZyb20gdGhlIGRldmljZSB0byB0aGUgZHJpdmVyLgorICAgICBJbnN0ZWFkIHdlIGNhbGwgdGhlIHVzYl9idWxrX21zZyBmdW5jdGlvbiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2VuZCBvcgorICAgICByZWNlaXZlIGRhdGEgZnJvbSBhIGRldmljZSB3aXRob3V0IGhhdmluZyB0byBjcmVhdGUgdXJicyBhbmQgaGFuZGxlCisgICAgIHVyYiBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9ucy4gV2UgY2FsbCB0aGUgdXNiX2J1bGtfbXNnIGZ1bmN0aW9uLAorICAgICBnaXZpbmcgaXQgYSBidWZmZXIgaW50byB3aGljaCB0byBwbGFjZSBhbnkgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBkZXZpY2UKKyAgICAgYW5kIGEgdGltZW91dCB2YWx1ZS4gSWYgdGhlIHRpbWVvdXQgcGVyaW9kIGV4cGlyZXMgd2l0aG91dCByZWNlaXZpbmcgYW55CisgICAgIGRhdGEgZnJvbSB0aGUgZGV2aWNlLCB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsIGFuZCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgVGhpcyBjYW4gYmUgc2hvd24gd2l0aCB0aGUgZm9sbG93aW5nIGNvZGU6CisgIDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorLyogZG8gYW4gaW1tZWRpYXRlIGJ1bGsgcmVhZCB0byBnZXQgZGF0YSBmcm9tIHRoZSBkZXZpY2UgKi8KK3JldHZhbCA9IHVzYl9idWxrX21zZyAoc2tlbC0+ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUgKHNrZWwtPmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2tlbC0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICBza2VsLT5idWxrX2luX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2tlbC0+YnVsa19pbl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAmYW1wO2NvdW50LCBIWioxMCk7CisvKiBpZiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgY29weSB0aGUgZGF0YSB0byB1c2VyIHNwYWNlICovCitpZiAoIXJldHZhbCkgeworICAgICAgICBpZiAoY29weV90b191c2VyIChidWZmZXIsIHNrZWwtPmJ1bGtfaW5fYnVmZmVyLCBjb3VudCkpCisgICAgICAgICAgICAgICAgcmV0dmFsID0gLUVGQVVMVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHZhbCA9IGNvdW50OworfQorICA8L3Byb2dyYW1saXN0aW5nPgorICA8cGFyYT4KKyAgICAgVGhlIHVzYl9idWxrX21zZyBmdW5jdGlvbiBjYW4gYmUgdmVyeSB1c2VmdWwgZm9yIGRvaW5nIHNpbmdsZSByZWFkcyBvcgorICAgICB3cml0ZXMgdG8gYSBkZXZpY2U7IGhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRvIHJlYWQgb3Igd3JpdGUgY29uc3RhbnRseSB0byBhCisgICAgIGRldmljZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IHVwIHlvdXIgb3duIHVyYnMgYW5kIHN1Ym1pdCB0aGVtIHRvIHRoZQorICAgICBVU0Igc3Vic3lzdGVtLgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICBXaGVuIHRoZSB1c2VyIHByb2dyYW0gcmVsZWFzZXMgdGhlIGZpbGUgaGFuZGxlIHRoYXQgaXQgaGFzIGJlZW4gdXNpbmcgdG8KKyAgICAgdGFsayB0byB0aGUgZGV2aWNlLCB0aGUgcmVsZWFzZSBmdW5jdGlvbiBpbiB0aGUgZHJpdmVyIGlzIGNhbGxlZC4gSW4gdGhpcworICAgICBmdW5jdGlvbiB3ZSBkZWNyZW1lbnQgb3VyIHByaXZhdGUgdXNhZ2UgY291bnQgYW5kIHdhaXQgZm9yIHBvc3NpYmxlCisgICAgIHBlbmRpbmcgd3JpdGVzOgorICA8L3BhcmE+CisgIDxwcm9ncmFtbGlzdGluZz4KKy8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KKy0tc2tlbC0+b3Blbl9jb3VudDsKKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgIE9uZSBvZiB0aGUgbW9yZSBkaWZmaWN1bHQgcHJvYmxlbXMgdGhhdCBVU0IgZHJpdmVycyBtdXN0IGJlIGFibGUgdG8gaGFuZGxlCisgICAgIHNtb290aGx5IGlzIHRoZSBmYWN0IHRoYXQgdGhlIFVTQiBkZXZpY2UgbWF5IGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtIGF0CisgICAgIGFueSBwb2ludCBpbiB0aW1lLCBldmVuIGlmIGEgcHJvZ3JhbSBpcyBjdXJyZW50bHkgdGFsa2luZyB0byBpdC4gSXQgbmVlZHMKKyAgICAgdG8gYmUgYWJsZSB0byBzaHV0IGRvd24gYW55IGN1cnJlbnQgcmVhZHMgYW5kIHdyaXRlcyBhbmQgbm90aWZ5IHRoZQorICAgICB1c2VyLXNwYWNlIHByb2dyYW1zIHRoYXQgdGhlIGRldmljZSBpcyBubyBsb25nZXIgdGhlcmUuIFRoZSBmb2xsb3dpbmcKKyAgICAgY29kZSAoZnVuY3Rpb24gPGZ1bmN0aW9uPnNrZWxfZGVsZXRlPC9mdW5jdGlvbj4pCisgICAgIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGRvIHRoaXM6IDwvcGFyYT4KKyAgPHByb2dyYW1saXN0aW5nPgorc3RhdGljIGlubGluZSB2b2lkIHNrZWxfZGVsZXRlIChzdHJ1Y3QgdXNiX3NrZWwgKmRldikKK3sKKyAgICBpZiAoZGV2LT5idWxrX2luX2J1ZmZlciAhPSBOVUxMKQorICAgICAgICBrZnJlZSAoZGV2LT5idWxrX2luX2J1ZmZlcik7CisgICAgaWYgKGRldi0+YnVsa19vdXRfYnVmZmVyICE9IE5VTEwpCisgICAgICAgIHVzYl9idWZmZXJfZnJlZSAoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfb3V0X3NpemUsCisgICAgICAgICAgICBkZXYtPmJ1bGtfb3V0X2J1ZmZlciwKKyAgICAgICAgICAgIGRldi0+d3JpdGVfdXJiLT50cmFuc2Zlcl9kbWEpOworICAgIGlmIChkZXYtPndyaXRlX3VyYiAhPSBOVUxMKQorICAgICAgICB1c2JfZnJlZV91cmIgKGRldi0+d3JpdGVfdXJiKTsKKyAgICBrZnJlZSAoZGV2KTsKK30KKyAgPC9wcm9ncmFtbGlzdGluZz4KKyAgPHBhcmE+CisgICAgIElmIGEgcHJvZ3JhbSBjdXJyZW50bHkgaGFzIGFuIG9wZW4gaGFuZGxlIHRvIHRoZSBkZXZpY2UsIHdlIHJlc2V0IHRoZSBmbGFnCisgICAgIDxsaXRlcmFsPmRldmljZV9wcmVzZW50PC9saXRlcmFsPi4gRm9yCisgICAgIGV2ZXJ5IHJlYWQsIHdyaXRlLCByZWxlYXNlIGFuZCBvdGhlciBmdW5jdGlvbnMgdGhhdCBleHBlY3QgYSBkZXZpY2UgdG8gYmUKKyAgICAgcHJlc2VudCwgdGhlIGRyaXZlciBmaXJzdCBjaGVja3MgdGhpcyBmbGFnIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzCisgICAgIHN0aWxsIHByZXNlbnQuIElmIG5vdCwgaXQgcmVsZWFzZXMgdGhhdCB0aGUgZGV2aWNlIGhhcyBkaXNhcHBlYXJlZCwgYW5kIGEKKyAgICAgLUVOT0RFViBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgdXNlci1zcGFjZSBwcm9ncmFtLiBXaGVuIHRoZSByZWxlYXNlCisgICAgIGZ1bmN0aW9uIGlzIGV2ZW50dWFsbHkgY2FsbGVkLCBpdCBkZXRlcm1pbmVzIGlmIHRoZXJlIGlzIG5vIGRldmljZQorICAgICBhbmQgaWYgbm90LCBpdCBkb2VzIHRoZSBjbGVhbnVwIHRoYXQgdGhlIHNrZWxfZGlzY29ubmVjdAorICAgICBmdW5jdGlvbiBub3JtYWxseSBkb2VzIGlmIHRoZXJlIGFyZSBubyBvcGVuIGZpbGVzIG9uIHRoZSBkZXZpY2UgKHNlZQorICAgICBMaXN0aW5nIDUpLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iaXNvIj4KKyAgICAgIDx0aXRsZT5Jc29jaHJvbm91cyBEYXRhPC90aXRsZT4KKyAgPHBhcmE+CisgICAgIFRoaXMgdXNiLXNrZWxldG9uIGRyaXZlciBkb2VzIG5vdCBoYXZlIGFueSBleGFtcGxlcyBvZiBpbnRlcnJ1cHQgb3IKKyAgICAgaXNvY2hyb25vdXMgZGF0YSBiZWluZyBzZW50IHRvIG9yIGZyb20gdGhlIGRldmljZS4gSW50ZXJydXB0IGRhdGEgaXMgc2VudAorICAgICBhbG1vc3QgZXhhY3RseSBhcyBidWxrIGRhdGEgaXMsIHdpdGggYSBmZXcgbWlub3IgZXhjZXB0aW9ucy4gIElzb2Nocm9ub3VzCisgICAgIGRhdGEgd29ya3MgZGlmZmVyZW50bHkgd2l0aCBjb250aW51b3VzIHN0cmVhbXMgb2YgZGF0YSBiZWluZyBzZW50IHRvIG9yCisgICAgIGZyb20gdGhlIGRldmljZS4gVGhlIGF1ZGlvIGFuZCB2aWRlbyBjYW1lcmEgZHJpdmVycyBhcmUgdmVyeSBnb29kIGV4YW1wbGVzCisgICAgIG9mIGRyaXZlcnMgdGhhdCBoYW5kbGUgaXNvY2hyb25vdXMgZGF0YSBhbmQgd2lsbCBiZSB1c2VmdWwgaWYgeW91IGFsc28KKyAgICAgbmVlZCB0byBkbyB0aGlzLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyIGlkPSJDb25jbHVzaW9uIj4KKyAgICAgIDx0aXRsZT5Db25jbHVzaW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgIFdyaXRpbmcgTGludXggVVNCIGRldmljZSBkcml2ZXJzIGlzIG5vdCBhIGRpZmZpY3VsdCB0YXNrIGFzIHRoZQorICAgICB1c2Itc2tlbGV0b24gZHJpdmVyIHNob3dzLiBUaGlzIGRyaXZlciwgY29tYmluZWQgd2l0aCB0aGUgb3RoZXIgY3VycmVudAorICAgICBVU0IgZHJpdmVycywgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGV4YW1wbGVzIHRvIGhlbHAgYSBiZWdpbm5pbmcgYXV0aG9yCisgICAgIGNyZWF0ZSBhIHdvcmtpbmcgZHJpdmVyIGluIGEgbWluaW1hbCBhbW91bnQgb2YgdGltZS4gVGhlIGxpbnV4LXVzYi1kZXZlbAorICAgICBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYWxzbyBjb250YWluIGEgbG90IG9mIGhlbHBmdWwgaW5mb3JtYXRpb24uCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJyZXNvdXJjZXMiPgorICAgICAgPHRpdGxlPlJlc291cmNlczwvdGl0bGU+CisgIDxwYXJhPgorICAgICBUaGUgTGludXggVVNCIFByb2plY3Q6IDx1bGluayB1cmw9Imh0dHA6Ly93d3cubGludXgtdXNiLm9yZyI+aHR0cDovL3d3dy5saW51eC11c2Iub3JnLzwvdWxpbms+CisgIDwvcGFyYT4KKyAgPHBhcmE+CisgICAgIExpbnV4IEhvdHBsdWcgUHJvamVjdDogPHVsaW5rIHVybD0iaHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0Ij5odHRwOi8vbGludXgtaG90cGx1Zy5zb3VyY2Vmb3JnZS5uZXQvPC91bGluaz4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgTGludXggVVNCIFdvcmtpbmcgRGV2aWNlcyBMaXN0OiA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnFiaWsuY2gvdXNiL2RldmljZXMiPmh0dHA6Ly93d3cucWJpay5jaC91c2IvZGV2aWNlcy88L3VsaW5rPgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICBsaW51eC11c2ItZGV2ZWwgTWFpbGluZyBMaXN0IEFyY2hpdmVzOiA8dWxpbmsgdXJsPSJodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWxpbnV4LXVzYi1kZXZlbCI+aHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1saW51eC11c2ItZGV2ZWw8L3VsaW5rPgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgICBQcm9ncmFtbWluZyBHdWlkZSBmb3IgTGludXggVVNCIERldmljZSBEcml2ZXJzOiA8dWxpbmsgdXJsPSJodHRwOi8vdXNiLmNzLnR1bS5lZHUvdXNiZG9jIj5odHRwOi8vdXNiLmNzLnR1bS5lZHUvdXNiZG9jPC91bGluaz4KKyAgPC9wYXJhPgorICA8cGFyYT4KKyAgICAgVVNCIEhvbWUgUGFnZTogPHVsaW5rIHVybD0iaHR0cDovL3d3dy51c2Iub3JnIj5odHRwOi8vd3d3LnVzYi5vcmc8L3VsaW5rPgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3o4NTMwYm9vay50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3o4NTMwYm9vay50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDc4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svejg1MzBib29rLnRtcGwKQEAgLTAsMCArMSwzODUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKwkiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFtdPgorCis8Ym9vayBpZD0iWjg1MjMwR3VpZGUiPgorIDxib29raW5mbz4KKyAgPHRpdGxlPlo4NTMwIFByb2dyYW1taW5nIEd1aWRlPC90aXRsZT4KKyAgCisgIDxhdXRob3Jncm91cD4KKyAgIDxhdXRob3I+CisgICAgPGZpcnN0bmFtZT5BbGFuPC9maXJzdG5hbWU+CisgICAgPHN1cm5hbWU+Q294PC9zdXJuYW1lPgorICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgPGFkZHJlc3M+CisgICAgICA8ZW1haWw+YWxhbkByZWRoYXQuY29tPC9lbWFpbD4KKyAgICAgPC9hZGRyZXNzPgorICAgIDwvYWZmaWxpYXRpb24+CisgICA8L2F1dGhvcj4KKyAgPC9hdXRob3Jncm91cD4KKworICA8Y29weXJpZ2h0PgorICAgPHllYXI+MjAwMDwveWVhcj4KKyAgIDxob2xkZXI+QWxhbiBDb3g8L2hvbGRlcj4KKyAgPC9jb3B5cmlnaHQ+CisKKyAgPGxlZ2Fsbm90aWNlPgorICAgPHBhcmE+CisgICAgIFRoaXMgZG9jdW1lbnRhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQorICAgICBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisgICAgIHZlcnNpb24uCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCisgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAgICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICA8L3BhcmE+CisgICAgICAKKyAgIDxwYXJhPgorICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgPC9wYXJhPgorICAgICAgCisgICA8cGFyYT4KKyAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgc291cmNlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBMaW51eC4KKyAgIDwvcGFyYT4KKyAgPC9sZWdhbG5vdGljZT4KKyA8L2Jvb2tpbmZvPgorCis8dG9jPjwvdG9jPgorCisgIDxjaGFwdGVyIGlkPSJpbnRybyI+CisgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIFo4NXgzMCBmYW1pbHkgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIGNvbnRyb2xsZXIgY2hpcHMgYXJlCisJdXNlZCBvbiBhIGxhcmdlIG51bWJlciBvZiBjaGVhcCBuZXR3b3JrIGludGVyZmFjZSBjYXJkcy4gVGhlCisJa2VybmVsIHByb3ZpZGVzIGEgY29yZSBpbnRlcmZhY2UgbGF5ZXIgdGhhdCBpcyBkZXNpZ25lZCB0byBtYWtlCisJaXQgZWFzeSB0byBwcm92aWRlIFdBTiBzZXJ2aWNlcyB1c2luZyB0aGlzIGNoaXAuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIGN1cnJlbnQgZHJpdmVyIG9ubHkgc3VwcG9ydCBzeW5jaHJvbm91cyBvcGVyYXRpb24uIE1lcmdpbmcgdGhlCisJYXN5bmNocm9ub3VzIGRyaXZlciBzdXBwb3J0IGludG8gdGhpcyBjb2RlIHRvIGFsbG93IGFueSBaODV4MzAKKwlkZXZpY2UgdG8gYmUgdXNlZCBhcyBib3RoIGEgdHR5IGludGVyZmFjZSBhbmQgYXMgYSBzeW5jaHJvbm91cyAKKwljb250cm9sbGVyIGlzIGEgcHJvamVjdCBmb3IgTGludXggcG9zdCB0aGUgMi40IHJlbGVhc2UKKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgc3VwcG9ydCBjb2RlIGhhbmRsZXMgbW9zdCBjb21tb24gY2FyZCBjb25maWd1cmF0aW9ucyBhbmQKKwlzdXBwb3J0cyBydW5uaW5nIGJvdGggQ2lzY28gSERMQyBhbmQgU3luY2hyb25vdXMgUFBQLiBXaXRoIGV4dHJhCisJZ2x1ZSB0aGUgZnJhbWUgcmVsYXkgYW5kIFguMjUgcHJvdG9jb2xzIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCB0aGlzCisJZHJpdmVyLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKyAgCisgIDxjaGFwdGVyPgorIAk8dGl0bGU+RHJpdmVyIE1vZGVzPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIFo4NTIzMCBkcml2ZXIgbGF5ZXIgY2FuIGRyaXZlIFo4NTMwLCBaODVDMzAgYW5kIFo4NTIzMCBkZXZpY2VzCisJaW4gdGhyZWUgZGlmZmVyZW50IG1vZGVzLiBFYWNoIG1vZGUgY2FuIGJlIGFwcGxpZWQgdG8gYW4gaW5kaXZpZHVhbAorCWNoYW5uZWwgb24gdGhlIGNoaXAgKGVhY2ggY2hpcCBoYXMgdHdvIGNoYW5uZWxzKS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgUElPIHN5bmNocm9ub3VzIG1vZGUgc3VwcG9ydHMgdGhlIG1vc3QgY29tbW9uIFo4NTMwIHdpcmluZy4gSGVyZQorCXRoZSBjaGlwIGlzIGludGVyZmFjZSB0byB0aGUgSS9PIGFuZCBpbnRlcnJ1cHQgZmFjaWxpdGllcyBvZiB0aGUKKwlob3N0IG1hY2hpbmUgYnV0IG5vdCB0byB0aGUgRE1BIHN1YnN5c3RlbS4gV2hlbiBydW5uaW5nIFBJTyB0aGUKKwlaODUzMCBoYXMgZXh0cmVtZWx5IHRpZ2h0IHRpbWluZyByZXF1aXJlbWVudHMuIERvaW5nIGhpZ2ggc3BlZWRzLAorCWV2ZW4gd2l0aCBhIFo4NTIzMCB3aWxsIGJlIHRyaWNreS4gVHlwaWNhbGx5IHlvdSBzaG91bGQgZXhwZWN0IHRvCisJYWNoaWV2ZSBhdCBiZXN0IDk2MDAgYmF1ZCB3aXRoIGEgWjhDNTMwIGFuZCA2NEtiaXRzIHdpdGggYSBaODUyMzAuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVGhlIERNQSBtb2RlIHN1cHBvcnRzIHRoZSBjaGlwIHdoZW4gaXQgaXMgY29uZmlndXJlZCB0byB1c2UgZHVhbCBETUEKKwljaGFubmVscyBvbiBhbiBJU0EgYnVzLiBUaGUgYmV0dGVyIGNhcmRzIHRlbmQgdG8gc3VwcG9ydCB0aGlzIG1vZGUKKwlvZiBvcGVyYXRpb24gZm9yIGEgc2luZ2xlIGNoYW5uZWwuIFdpdGggRE1BIHJ1bm5pbmcgdGhlIFo4NTIzMCB0b3BzCisJb3V0IHdoZW4gaXQgc3RhcnRzIHRvIGhpdCBJU0EgRE1BIGNvbnN0cmFpbnRzIGF0IGFib3V0IDUxMktiaXRzLiBJdAorCWlzIHdvcnRoIG5vdGluZyBoZXJlIHRoYXQgbWFueSBQQyBtYWNoaW5lcyBoYW5nIG9yIGNyYXNoIHdoZW4gdGhlCisJY2hpcCBpcyBkcml2ZW4gZmFzdCBlbm91Z2ggdG8gaG9sZCB0aGUgSVNBIGJ1cyBzb2xpZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUcmFuc21pdCBETUEgbW9kZSB1c2VzIGEgc2luZ2xlIERNQSBjaGFubmVsLiBUaGUgRE1BIGNoYW5uZWwgaXMgdXNlZAorCWZvciB0cmFuc21pc3Npb24gYXMgdGhlIHRyYW5zbWl0IEZJRk8gaXMgc21hbGxlciB0aGFuIHRoZSByZWNlaXZlCisJRklGTy4gaXQgZ2l2ZXMgYmV0dGVyIHBlcmZvcm1hbmNlIHRoYW4gcHVyZSBQSU8gbW9kZSBidXQgaXMgbm93aGVyZQorCW5lYXIgYXMgaWRlYWwgYXMgcHVyZSBETUEgbW9kZS4gCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyPgorIAk8dGl0bGU+VXNpbmcgdGhlIFo4NTIzMCBkcml2ZXI8L3RpdGxlPgorICA8cGFyYT4KKwlUaGUgWjg1MjMwIGRyaXZlciBwcm92aWRlcyB0aGUgYmFjayBlbmQgaW50ZXJmYWNlIHRvIHlvdXIgYm9hcmQuIFRvCisJY29uZmlndXJlIGEgWjg1MzAgaW50ZXJmYWNlIHlvdSBuZWVkIHRvIGRldGVjdCB0aGUgYm9hcmQgYW5kIHRvIAorCWlkZW50aWZ5IGl0cyBwb3J0cyBhbmQgaW50ZXJydXB0IHJlc291cmNlcy4gSXQgaXMgYWxzbyB5b3VyIHByb2JsZW0KKwl0byB2ZXJpZnkgdGhlIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLgorICA8L3BhcmE+CisgIDxwYXJhPgorCUhhdmluZyBpZGVudGlmaWVkIHRoZSBjaGlwIHlvdSBuZWVkIHRvIGZpbGwgaW4gYSBzdHJ1Y3Qgejg1MzBfZGV2LAorCXdoaWNoIGRlc2NyaWJlcyBlYWNoIGNoaXAuIFRoaXMgb2JqZWN0IG11c3QgZXhpc3QgdW50aWwgeW91IGZpbmFsbHkKKwlzaHV0ZG93biB0aGUgYm9hcmQuIEZpcnN0bHkgemVybyB0aGUgYWN0aXZlIGZpZWxkLiBUaGlzIGVuc3VyZXMgCisJbm90aGluZyBnb2VzIG9mZiB3aXRob3V0IHlvdSBpbnRlbmRpbmcgaXQuIFRoZSBpcnEgZmllbGQgc2hvdWxkCisJYmUgc2V0IHRvIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZSBjaGlwLiAoRWFjaCBjaGlwIGhhcyBhIHNpbmdsZQorCWludGVycnVwdCBzb3VyY2UgcmF0aGVyIHRoYW4gZWFjaCBjaGFubmVsKS4gWW91IGFyZSByZXNwb25zaWJsZQorCWZvciBhbGxvY2F0aW5nIHRoZSBpbnRlcnJ1cHQgbGluZS4gVGhlIGludGVycnVwdCBoYW5kbGVyIHNob3VsZCBiZQorCXNldCB0byA8ZnVuY3Rpb24+ejg1MzBfaW50ZXJydXB0PC9mdW5jdGlvbj4uIFRoZSBkZXZpY2UgaWQgc2hvdWxkCisJYmUgc2V0IHRvIHRoZSB6ODUzMF9kZXYgc3RydWN0dXJlIHBvaW50ZXIuIFdoZXRoZXIgdGhlIGludGVycnVwdCBjYW4KKwliZSBzaGFyZWQgb3Igbm90IGlzIGJvYXJkIGRlcGVuZGVudCwgYW5kIHVwIHRvIHlvdSB0byBpbml0aWFsaXNlLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBzdHJ1Y3R1cmUgaG9sZHMgdHdvIGNoYW5uZWwgc3RydWN0dXJlcy4gCisJSW5pdGlhbGlzZSBjaGFuQS5jdHJsaW8gYW5kIGNoYW5BLmRhdGFpbyB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZQorCWNvbnRyb2wgYW5kIGRhdGEgcG9ydHMuIFlvdSBjYW4gb3IgdGhpcyB3aXRoIFo4NTMwX1BPUlRfU0xFRVAgdG8KKwlpbmRpY2F0ZSB5b3VyIGludGVyZmFjZSBuZWVkcyB0aGUgNXVTIGRlbGF5IGZvciBjaGlwIHNldHRsaW5nIGRvbmUKKwlpbiBzb2Z0d2FyZS4gVGhlIFBPUlRfU0xFRVAgb3B0aW9uIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYy4gT3RoZXIKKwlmbGFncyBtYXkgYmVjb21lIGF2YWlsYWJsZSBvbiBmdXR1cmUgcGxhdGZvcm1zLCBlZyBmb3IgTU1JTy4KKwlJbml0aWFsaXNlIHRoZSBjaGFuQS5pcnFzIHRvICZhbXA7ejg1MzBfbm9wIHRvIHN0YXJ0IHRoZSBjaGlwIHVwCisJYXMgZGlzYWJsZWQgYW5kIGRpc2NhcmRpbmcgaW50ZXJydXB0IGV2ZW50cy4gVGhpcyBlbnN1cmVzIHRoYXQKKwlzdHJheSBpbnRlcnJ1cHRzIHdpbGwgYmUgbW9wcGVkIHVwIGFuZCBub3QgaGFuZyB0aGUgYnVzLiBTZXQKKwljaGFuQS5kZXYgdG8gcG9pbnQgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUgaXRzZWxmLiBUaGUKKwlwcml2YXRlIGFuZCBuYW1lIGZpZWxkIHlvdSBtYXkgdXNlIGFzIHlvdSB3aXNoLiBUaGUgcHJpdmF0ZSBmaWVsZAorCWlzIHVudXNlZCBieSB0aGUgWjg1MjMwIGxheWVyLiBUaGUgbmFtZSBpcyB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcKKwlhbmQgaXQgbWF5IHRodXMgbWFrZSBzZW5zZSB0byBtYWtlIGl0IG1hdGNoIHRoZSBuZXR3b3JrIG5hbWUuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJUmVwZWF0IHRoZSBzYW1lIG9wZXJhdGlvbiB3aXRoIHRoZSBCIGNoYW5uZWwgaWYgeW91ciBjaGlwIGhhcworCWJvdGggY2hhbm5lbHMgd2lyZWQgdG8gc29tZXRoaW5nIHVzZWZ1bC4gVGhpcyBpc24ndCBhbHdheXMgdGhlCisJY2FzZS4gSWYgaXQgaXMgbm90IHdpcmVkIHRoZW4gdGhlIEkvTyB2YWx1ZXMgZG8gbm90IG1hdHRlciwgYnV0CisJeW91IG11c3QgaW5pdGlhbGlzZSBjaGFuQi5kZXYuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJSWYgeW91ciBib2FyZCBoYXMgRE1BIGZhY2lsaXRpZXMgdGhlbiBpbml0aWFsaXNlIHRoZSB0eGRtYSBhbmQKKwlyeGRtYSBmaWVsZHMgZm9yIHRoZSByZWxldmFudCBjaGFubmVscy4gWW91IG11c3QgYWxzbyBhbGxvY2F0ZSB0aGUKKwlJU0EgRE1BIGNoYW5uZWxzIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IGJvYXJkIGxldmVsIGluaXRpYWxpc2F0aW9uCisJdG8gY29uZmlndXJlIHRoZW0uIFRoZSBsb3cgbGV2ZWwgZHJpdmVyIHdpbGwgZG8gdGhlIFo4NTMwIGFuZAorCURNQSBjb250cm9sbGVyIHByb2dyYW1taW5nIGJ1dCBub3QgYm9hcmQgc3BlY2lmaWMgbWFnaWMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJSGF2aW5nIGluaXRpYWxpc2VkIHRoZSBkZXZpY2UgeW91IGNhbiB0aGVuIGNhbGwKKwk8ZnVuY3Rpb24+ejg1MzBfaW5pdDwvZnVuY3Rpb24+LiBUaGlzIHdpbGwgcHJvYmUgdGhlIGNoaXAgYW5kIAorCXJlc2V0IGl0IGludG8gYSBrbm93biBzdGF0ZS4gQW4gaWRlbnRpZmljYXRpb24gc2VxdWVuY2UgaXMgdGhlbgorCXJ1biB0byBpZGVudGlmeSB0aGUgY2hpcCB0eXBlLiBJZiB0aGUgY2hlY2tzIGZhaWwgdG8gcGFzcyB0aGUKKwlmdW5jdGlvbiByZXR1cm5zIGEgbm9uIHplcm8gZXJyb3IgY29kZS4gVHlwaWNhbGx5IHRoaXMgaW5kaWNhdGVzCisJdGhhdCB0aGUgcG9ydCBnaXZlbiBpcyBub3QgdmFsaWQuIEFmdGVyIHRoaXMgY2FsbCB0aGUKKwl0eXBlIGZpZWxkIG9mIHRoZSB6ODUzMF9kZXYgc3RydWN0dXJlIGlzIGluaXRpYWxpc2VkIHRvIGVpdGhlcgorCVo4NTMwLCBaODVDMzAgb3IgWjg1MjMwIGFjY29yZGluZyB0byB0aGUgY2hpcCBmb3VuZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlPbmNlIHlvdSBoYXZlIGNhbGxlZCB6ODUzMF9pbml0IHlvdSBjYW4gYWxzbyBtYWtlIHVzZSBvZiB0aGUgdXRpbGl0eQorCWZ1bmN0aW9uIDxmdW5jdGlvbj56ODUzMF9kZXNjcmliZTwvZnVuY3Rpb24+LiBUaGlzIHByb3ZpZGVzIGEgCisJY29uc2lzdGVudCByZXBvcnRpbmcgZm9ybWF0IGZvciB0aGUgWjg1MzAgZGV2aWNlcywgYW5kIGFsbG93cyBhbGwKKwl0aGUgZHJpdmVycyB0byBwcm92aWRlIGNvbnNpc3RlbnQgcmVwb3J0aW5nLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlcj4KKyAJPHRpdGxlPkF0dGFjaGluZyBOZXR3b3JrIEludGVyZmFjZXM8L3RpdGxlPgorICA8cGFyYT4KKwlJZiB5b3Ugd2lzaCB0byB1c2UgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZhY2lsaXRpZXMgb2YgdGhlIGRyaXZlciwKKwl0aGVuIHlvdSBuZWVkIHRvIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGVhY2ggY2hhbm5lbCB0aGF0IGlzCisJcHJlc2VudCBhbmQgaW4gdXNlLiBJbiBhZGRpdGlvbiB0byB1c2UgdGhlIFN5bmNQUFAgYW5kIENpc2NvIEhETEMKKwl5b3UgbmVlZCB0byBmb2xsb3cgc29tZSBhZGRpdGlvbmFsIHBsdW1iaW5nIHJ1bGVzLiBUaGV5IG1heSBzZWVtIAorCWNvbXBsZXggYnV0IGEgbG9vayBhdCB0aGUgZXhhbXBsZSBob3N0ZXNzX3N2MTEgZHJpdmVyIHNob3VsZAorCXJlYXNzdXJlIHlvdS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgbmV0d29yayBkZXZpY2UgdXNlZCBmb3IgZWFjaCBjaGFubmVsIHNob3VsZCBiZSBwb2ludGVkIHRvIGJ5CisJdGhlIG5ldGRldmljZSBmaWVsZCBvZiBlYWNoIGNoYW5uZWwuIFRoZSBkZXYtJmd0OyBwcml2IGZpZWxkIG9mIHRoZQorCW5ldHdvcmsgZGV2aWNlIHBvaW50cyB0byB5b3VyIHByaXZhdGUgZGF0YSAtIHlvdSB3aWxsIG5lZWQgdG8gYmUKKwlhYmxlIHRvIGZpbmQgeW91ciBwcHAgZGV2aWNlIGZyb20gdGhpcy4gSW4gYWRkaXRpb24gdG8gdXNlIHRoZQorCXN5bmMgcHBwIGxheWVyIHRoZSBwcml2YXRlIGRhdGEgbXVzdCBzdGFydCB3aXRoIGEgdm9pZCAqIHBvaW50ZXIKKwl0byB0aGUgc3luY3BwcCBzdHJ1Y3R1cmVzLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSB3YXkgbW9zdCBkcml2ZXJzIGFwcHJvYWNoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtIGlzIHRvCisJY3JlYXRlIGEgc3RydWN0dXJlIGhvbGRpbmcgdGhlIFo4NTMwIGRldmljZSBkZWZpbml0aW9uIGFuZAorCXB1dCB0aGF0IGFuZCB0aGUgc3luY3BwcCBwb2ludGVyIGludG8gdGhlIHByaXZhdGUgZmllbGQgb2YKKwl0aGUgbmV0d29yayBkZXZpY2UuIFRoZSBuZXR3b3JrIGRldmljZSBmaWVsZHMgb2YgdGhlIGNoYW5uZWxzCisJdGhlbiBwb2ludCBiYWNrIHRvIHRoZSBuZXR3b3JrIGRldmljZXMuIFRoZSBwcHBfZGV2aWNlIGNhbiBhbHNvCisJYmUgcHV0IGluIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBjb252ZW5pZW50bHkuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBzeW5jaHJvbm91cyBwcHAgdGhlbiB5b3UgbmVlZCB0byBhdHRhY2gKKwl0aGUgc3luY3BwcCBsYXllciB0byB0aGUgbmV0d29yayBkZXZpY2UuIFlvdSBzaG91bGQgZG8gdGhpcyBiZWZvcmUKKwl5b3UgcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLiBUaGUKKwk8ZnVuY3Rpb24+c3BwcF9hdHRhY2g8L2Z1bmN0aW9uPiByZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCB2b2lkICoKKwlwb2ludGVyIGluIHlvdXIgcHJpdmF0ZSBkYXRhIGlzIHBvaW50aW5nIHRvIGFuIGVtcHR5IHN0cnVjdAorCXBwcF9kZXZpY2UuIFRoZSBmdW5jdGlvbiBmaWxscyBpbiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUKKwlwcHAvaGRsYyBsYXllci4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlCZWZvcmUgeW91IHJlZ2lzdGVyIHlvdXIgbmV0d29yayBkZXZpY2UgeW91IHdpbGwgYWxzbyBuZWVkIHRvCisJcHJvdmlkZSBzdWl0YWJsZSBoYW5kbGVycyBmb3IgbW9zdCBvZiB0aGUgbmV0d29yayBkZXZpY2UgY2FsbGJhY2tzLiAKKwlTZWUgdGhlIG5ldHdvcmsgZGV2aWNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzLgorICA8L3BhcmE+CisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlcj4KKyAJPHRpdGxlPkNvbmZpZ3VyaW5nIEFuZCBBY3RpdmF0aW5nIFRoZSBQb3J0PC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIFo4NTIzMCBkcml2ZXIgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgdGFibGVzIHRvIGxvYWQgdGhlCisJcG9ydCByZWdpc3RlcnMgb24gdGhlIFo4NTMwIGNoaXBzLiBXaGVuIHByb2dyYW1taW5nIHRoZSByZWdpc3RlcgorCXNldHRpbmdzIGZvciBhIGNoYW5uZWwgYmUgYXdhcmUgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiByZWNvbW1lbmRzCisJaW5pdGlhbGlzYXRpb24gb3JkZXJzLiBTdHJhbmdlIHRoaW5ncyBoYXBwZW4gd2hlbiB0aGVzZSBhcmUgbm90CisJZm9sbG93ZWQuIAorICA8L3BhcmE+CisgIDxwYXJhPgorCTxmdW5jdGlvbj56ODUzMF9jaGFubmVsX2xvYWQ8L2Z1bmN0aW9uPiB0YWtlcyBhbiBhcnJheSBvZgorCXBhaXJzIG9mIGluaXRpYWxpc2F0aW9uIHZhbHVlcyBpbiBhbiBhcnJheSBvZiB1OCB0eXBlLiBUaGUgZmlyc3QKKwl2YWx1ZSBpcyB0aGUgWjg1MzAgcmVnaXN0ZXIgbnVtYmVyLiBBZGQgMTYgdG8gaW5kaWNhdGUgdGhlIGFsdGVybmF0ZQorCXJlZ2lzdGVyIGJhbmsgb24gdGhlIGxhdGVyIGNoaXBzLiBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieSBhIDI1NS4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgZHJpdmVyIHByb3ZpZGVzIGEgcGFpciBvZiBwdWJsaWMgdGFibGVzLiBUaGUKKwl6ODUzMF9oZGxjX2tpbG9zdHJlYW0gdGFibGUgaXMgZm9yIHRoZSBVSyAnS2lsb3N0cmVhbScgc2VydmljZSBhbmQKKwlhbHNvIGhhcHBlbnMgdG8gY292ZXIgbW9zdCBvdGhlciBlbmQgaG9zdCBjb25maWd1cmF0aW9ucy4gVGhlCisJejg1MzBfaGRsY19raWxvc3RyZWFtXzg1MjMwIHRhYmxlIGlzIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gdXNpbmcKKwl0aGUgZW5oYW5jZW1lbnRzIG9mIHRoZSA4NTIzMCBjaGlwLiBUaGUgY29uZmlndXJhdGlvbiBsb2FkZWQgaXMKKwlzdGFuZGFyZCBOUlogZW5jb2RlZCBzeW5jaHJvbm91cyBkYXRhIHdpdGggSERMQyBiaXRzdHVmZmluZy4gQWxsCisJb2YgdGhlIHRpbWluZyBpcyB0YWtlbiBmcm9tIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJV2hlbiB3cml0aW5nIHlvdXIgb3duIHRhYmxlcyBiZSBhd2FyZSB0aGF0IHRoZSBkcml2ZXIgaW50ZXJuYWxseQorCXRyYWNrcyByZWdpc3RlciB2YWx1ZXMuIEl0IG1heSBuZWVkIHRvIHJlbG9hZCB2YWx1ZXMuIFlvdSBzaG91bGQKKwl0aGVyZWZvcmUgYmUgc3VyZSB0byBzZXQgcmVnaXN0ZXJzIDEtNywgOS0xMSwgMTQgYW5kIDE1IGluIGFsbAorCWNvbmZpZ3VyYXRpb25zLiBXaGVyZSB0aGUgcmVnaXN0ZXIgc2V0dGluZ3MgZGVwZW5kIG9uIERNQSBzZWxlY3Rpb24KKwl0aGUgZHJpdmVyIHdpbGwgdXBkYXRlIHRoZSBiaXRzIGl0c2VsZiB3aGVuIHlvdSBvcGVuIG9yIGNsb3NlLgorCUxvYWRpbmcgYSBuZXcgdGFibGUgd2l0aCB0aGUgaW50ZXJmYWNlIG9wZW4gaXMgbm90IHJlY29tbWVuZGVkLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZXJlIGFyZSB0aHJlZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGNvcmUKKwljb2RlLiBJbiBQSU8gbW9kZSB0aGUgaW50ZXJmYWNlIGlzIHByb2dyYW1tZWQgdXAgdG8gdXNlCisJaW50ZXJydXB0IGRyaXZlbiBQSU8uIFRoaXMgcGxhY2VzIGhpZ2ggZGVtYW5kcyBvbiB0aGUgaG9zdCBwcm9jZXNzb3IKKwl0byBhdm9pZCBsYXRlbmN5LiBUaGUgZHJpdmVyIGlzIHdyaXR0ZW4gdG8gdGFrZSBhY2NvdW50IG9mIGxhdGVuY3kKKwlpc3N1ZXMgYnV0IGl0IGNhbm5vdCBhdm9pZCBsYXRlbmNpZXMgY2F1c2VkIGJ5IG90aGVyIGRyaXZlcnMsCisJbm90YWJseSBJREUgaW4gUElPIG1vZGUuIEJlY2F1c2UgdGhlIGRyaXZlcnMgYWxsb2NhdGUgYnVmZmVycyB5b3UKKwltdXN0IGFsc28gcHJldmVudCBNVFUgY2hhbmdlcyB3aGlsZSB0aGUgcG9ydCBpcyBvcGVuLgorICA8L3BhcmE+CisgIDxwYXJhPgorCU9uY2UgdGhlIHBvcnQgaXMgb3BlbiBpdCB3aWxsIGNhbGwgdGhlIHJ4X2Z1bmN0aW9uIG9mIGVhY2ggY2hhbm5lbAorCXdoZW5ldmVyIGEgY29tcGxldGVkIHBhY2tldCBhcnJpdmVkLiBUaGlzIGlzIGludm9rZWQgZnJvbQorCWludGVycnVwdCBjb250ZXh0IGFuZCBwYXNzZXMgeW91IHRoZSBjaGFubmVsIGFuZCBhIG5ldHdvcmsJCisJYnVmZmVyIChzdHJ1Y3Qgc2tfYnVmZikgaG9sZGluZyB0aGUgZGF0YS4gVGhlIGRhdGEgaW5jbHVkZXMKKwl0aGUgQ1JDIGJ5dGVzIHNvIG1vc3QgdXNlcnMgd2lsbCB3YW50IHRvIHRyaW0gdGhlIGxhc3QgdHdvCisJYnl0ZXMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGRhdGEuIFRoaXMgZnVuY3Rpb24gaXMgdmVyeSB0aW1pbmcKKwljcml0aWNhbC4gV2hlbiB5b3Ugd2lzaCB0byBzaW1wbHkgZGlzY2FyZCBkYXRhIHRoZSBzdXBwb3J0CisJY29kZSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gPGZ1bmN0aW9uPno4NTMwX251bGxfcng8L2Z1bmN0aW9uPgorCXRvIGRpc2NhcmQgdGhlIGRhdGEuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJVG8gYWN0aXZlIFBJTyBtb2RlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyB0aGUgPGZ1bmN0aW9uPgorCXo4NTMwX3N5bmNfb3BlbjwvZnVuY3Rpb24+IGlzIGNhbGxlZC4gVGhpcyBleHBlY3RzIHRvIGJlIHBhc3NlZAorCXRoZSBuZXR3b3JrIGRldmljZSBhbmQgdGhlIGNoYW5uZWwuIFR5cGljYWxseSB0aGlzIGlzIGNhbGxlZCBmcm9tCisJeW91ciBuZXR3b3JrIGRldmljZSBvcGVuIGNhbGxiYWNrLiBPbiBhIGZhaWx1cmUgYSBub24gemVybyBlcnJvcgorCXN0YXR1cyBpcyByZXR1cm5lZC4gVGhlIDxmdW5jdGlvbj56ODUzMF9zeW5jX2Nsb3NlPC9mdW5jdGlvbj4gCisJZnVuY3Rpb24gc2h1dHMgZG93biBhIFBJTyBjaGFubmVsLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIAorCWNoYW5uZWwgaXMgb3BlbmVkIGFnYWluCWFuZCBiZWZvcmUgdGhlIGRyaXZlciBzaHV0cyBkb3duIAorCWFuZCB1bmxvYWRzLgorICA8L3BhcmE+CisgIDxwYXJhPgorCVRoZSBpZGVhbCBtb2RlIG9mIG9wZXJhdGlvbiBpcyBkdWFsIGNoYW5uZWwgRE1BIG1vZGUuIEhlcmUgdGhlCisJa2VybmVsIGRyaXZlciB3aWxsIGNvbmZpZ3VyZSB0aGUgYm9hcmQgZm9yIERNQSBpbiBib3RoIGRpcmVjdGlvbnMuCisJVGhlIGRyaXZlciBhbHNvIGhhbmRsZXMgSVNBIERNQSBpc3N1ZXMgc3VjaCBhcyBjb250cm9sbGVyCisJcHJvZ3JhbW1pbmcgYW5kIHRoZSBtZW1vcnkgcmFuZ2UgbGltaXQgZm9yIHlvdS4gVGhpcyBtb2RlIGlzCisJYWN0aXZhdGVkIGJ5IGNhbGxpbmcgdGhlIDxmdW5jdGlvbj56ODUzMF9zeW5jX2RtYV9vcGVuPC9mdW5jdGlvbj4KKwlmdW5jdGlvbi4gT24gZmFpbHVyZSBhIG5vbiB6ZXJvIGVycm9yIHZhbHVlIGlzIHJldHVybmVkLgorCU9uY2UgdGhpcyBtb2RlIGlzIGFjdGl2YXRlZCBpdCBjYW4gYmUgc2h1dCBkb3duIGJ5IGNhbGxpbmcgdGhlCisJPGZ1bmN0aW9uPno4NTMwX3N5bmNfZG1hX2Nsb3NlPC9mdW5jdGlvbj4uIFlvdSBtdXN0IGNhbGwgdGhlIGNsb3NlCisJZnVuY3Rpb24gbWF0Y2hpbmcgdGhlIG9wZW4gbW9kZSB5b3UgdXNlZC4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgZmluYWwgc3VwcG9ydGVkIG1vZGUgdXNlcyBhIHNpbmdsZSBETUEgY2hhbm5lbCB0byBkcml2ZSB0aGUKKwl0cmFuc21pdCBzaWRlLiBBcyB0aGUgWjg1QzMwIGhhcyBhIGxhcmdlciBGSUZPIG9uIHRoZSByZWNlaXZlCisJY2hhbm5lbAl0aGlzIHRlbmRzIHRvIGluY3JlYXNlIHRoZSBtYXhpbXVtIHNwZWVkIGEgbGl0dGxlLiAKKwlUaGlzIGlzIGFjdGl2YXRlZCBieSBjYWxsaW5nIHRoZSA8ZnVuY3Rpb24+ejg1MzBfc3luY190eGRtYV9vcGVuCisJPC9mdW5jdGlvbj4uIFRoaXMgcmV0dXJucyBhIG5vbiB6ZXJvIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gVGhlCisJPGZ1bmN0aW9uPno4NTMwX3N5bmNfdHhkbWFfY2xvc2U8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjbG9zZXMgZG93bgorCXRoZSBaODUzMCBpbnRlcmZhY2UgZnJvbSB0aGlzIG1vZGUuCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyPgorIAk8dGl0bGU+TmV0d29yayBMYXllciBGdW5jdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKwlUaGUgWjg1MzAgbGF5ZXIgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHF1ZXVlIHBhY2tldHMgZm9yCisJdHJhbnNtaXNzaW9uLiBUaGUgZHJpdmVyIGludGVybmFsbHkgYnVmZmVycyB0aGUgZnJhbWUgY3VycmVudGx5CisJYmVpbmcgdHJhbnNtaXR0ZWQgYW5kIG9uZSBmdXJ0aGVyIGZyYW1lIChpbiBvcmRlciB0byBrZWVwIGJhY2sKKwl0byBiYWNrIHRyYW5zbWlzc2lvbiBydW5uaW5nKS4gQW55IGZ1cnRoZXIgYnVmZmVyaW5nIGlzIHVwIHRvCisJdGhlIGNhbGxlci4KKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgZnVuY3Rpb24gPGZ1bmN0aW9uPno4NTMwX3F1ZXVlX3htaXQ8L2Z1bmN0aW9uPiB0YWtlcyBhIG5ldHdvcmsKKwlidWZmZXIgaW4gc2tfYnVmZiBmb3JtYXQgYW5kIHF1ZXVlcyBpdCBmb3IgdHJhbnNtaXNzaW9uLiBUaGUKKwljYWxsZXIgbXVzdCBwcm92aWRlIHRoZSBlbnRpcmUgcGFja2V0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKKwliaXRzdHVmZmluZyBhbmQgQ1JDLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgYnkgdGhlIGNhbGxlciB2aWEKKwl0aGUgc3luY3BwcCBpbnRlcmZhY2UgbGF5ZXIuIEl0IHJldHVybnMgMCBpZiB0aGUgYnVmZmVyIGhhcyBiZWVuIAorICAgICAgICBxdWV1ZWQgYW5kIG5vbiB6ZXJvIHZhbHVlcyAgZm9yIHF1ZXVlIGZ1bGwuIElmIHRoZSBmdW5jdGlvbiBhY2NlcHRzIAorCXRoZSBidWZmZXIgaXQgYmVjb21lcyBwcm9wZXJ0eSBvZiB0aGUgWjg1MzAgbGF5ZXIgYW5kIHRoZSBjYWxsZXIgCisJc2hvdWxkIG5vdCBmcmVlIGl0LiAKKyAgPC9wYXJhPgorICA8cGFyYT4KKwlUaGUgZnVuY3Rpb24gPGZ1bmN0aW9uPno4NTMwX2dldF9zdGF0czwvZnVuY3Rpb24+IHJldHVybnMgYSBwb2ludGVyCisJdG8gYW4gaW50ZXJuYWxseSBtYWludGFpbmVkIHBlciBpbnRlcmZhY2Ugc3RhdGlzdGljcyBibG9jay4gVGhpcworCXByb3ZpZGVzIG1vc3Qgb2YgdGhlIGludGVyZmFjZSBjb2RlIG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIG5ldHdvcmsKKwlsYXllciBnZXRfc3RhdHMgY2FsbGJhY2suCisgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyPgorICAgICA8dGl0bGU+UG9ydGluZyBUaGUgWjg1MzAgRHJpdmVyPC90aXRsZT4KKyAgPHBhcmE+CisJVGhlIFo4NTMwIGRyaXZlciBpcyB3cml0dGVuIHRvIGJlIHBvcnRhYmxlLiBJbiBETUEgbW9kZSBpdCBtYWtlcworCWFzc3VtcHRpb25zIGFib3V0IHRoZSB1c2Ugb2YgSVNBIERNQS4gVGhlc2UgYXJlIHByb2JhYmx5IHdhcnJhbnRlZAorCWluIG1vc3QgY2FzZXMgYXMgdGhlIFo4NTIzMCBpbiBwYXJ0aWN1bGFyIHdhcyBkZXNpZ25lZCB0byBnbHVlIHRvIFBDCisJdHlwZSBtYWNoaW5lcy4gVGhlIFBJTyBtb2RlIG1ha2VzIG5vIHJlYWwgYXNzdW1wdGlvbnMuCisgIDwvcGFyYT4KKyAgPHBhcmE+CisJU2hvdWxkIHlvdSBuZWVkIHRvIHJldGFyZ2V0IHRoZSBaODUzMCBkcml2ZXIgdG8gYW5vdGhlciBhcmNoaXRlY3R1cmUKKwl0aGUgb25seSBjb2RlIHRoYXQgc2hvdWxkIG5lZWQgY2hhbmdpbmcgYXJlIHRoZSBwb3J0IEkvTyBmdW5jdGlvbnMuCisJQXQgdGhlIG1vbWVudCB0aGVzZSBhc3N1bWUgUEMgSS9PIHBvcnQgYWNjZXNzZXMuIFRoaXMgbWF5IG5vdCBiZQorCWFwcHJvcHJpYXRlIGZvciBhbGwgcGxhdGZvcm1zLiBSZXBsYWNpbmcgCisJPGZ1bmN0aW9uPno4NTMwX3JlYWRfcG9ydDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+ejg1MzBfd3JpdGVfcG9ydAorCTwvZnVuY3Rpb24+IGlzIGludGVuZGVkIHRvIGJlIGFsbCB0aGF0IGlzIHJlcXVpcmVkIHRvIHBvcnQgdGhpcworCWRyaXZlciBsYXllci4KKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9ImJ1Z3MiPgorICAgICA8dGl0bGU+S25vd24gQnVncyBBbmQgQXNzdW1wdGlvbnM8L3RpdGxlPgorICA8cGFyYT4KKyAgPHZhcmlhYmxlbGlzdD4KKyAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPkludGVycnVwdCBMb2NraW5nPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKwlUaGUgbG9ja2luZyBpbiB0aGUgZHJpdmVyIGlzIGRvbmUgdmlhIHRoZSBnbG9iYWwgY2xpL3N0aSBsb2NrLiBUaGlzCisJbWFrZXMgZm9yIHJlbGF0aXZlbHkgcG9vciBTTVAgcGVyZm9ybWFuY2UuIFN3aXRjaGluZyB0aGlzIHRvIHVzZSBhCisJcGVyIGRldmljZSBzcGluIGxvY2sgd291bGQgcHJvYmFibHkgbWF0ZXJpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeT48dGVybT5PY2Nhc2lvbmFsIEZhaWx1cmVzPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKwlXZSBoYXZlIHJlcG9ydHMgb2Ygb2NjYXNpb25hbCBmYWlsdXJlcyB3aGVuIHJ1biBmb3IgdmVyeSBsb25nCisJcGVyaW9kcyBvZiB0aW1lIGFuZCB0aGUgZHJpdmVyIHN0YXJ0cyB0byByZWNlaXZlIGp1bmsgZnJhbWVzLiBBdAorCXRoZSBtb21lbnQgdGhlIGNhdXNlIG9mIHRoaXMgaXMgbm90IGNsZWFyLgorICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorICA8L3ZhcmlhYmxlbGlzdD4KKwkKKyAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CisgICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KKyFFZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iaW50ZnVuY3Rpb25zIj4KKyAgICAgPHRpdGxlPkludGVybmFsIEZ1bmN0aW9uczwvdGl0bGU+CishSWRyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZWRiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0CkBAIC0wLDAgKzEsMjA4IEBACitbIE5PVEU6IFRoZSB2aXJ0X3RvX2J1cygpIGFuZCBidXNfdG9fdmlydCgpIGZ1bmN0aW9ucyBoYXZlIGJlZW4KKwlzdXBlcnNlZGVkIGJ5IHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZSBQQ0kgRE1BCisJaW50ZXJmYWNlIChzZWUgRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQpLiAgVGhleSBjb250aW51ZQorCXRvIGJlIGRvY3VtZW50ZWQgYmVsb3cgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMsIGJ1dCBuZXcgY29kZQorCW11c3Qgbm90IHVzZSB0aGVtLiAtLWRhdmlkbSAwMC8xMi8xMiBdCisKK1sgVGhpcyBpcyBhIG1haWwgbWVzc2FnZSBpbiByZXNwb25zZSB0byBhIHF1ZXJ5IG9uIElPIG1hcHBpbmcsIHRodXMgdGhlCisgIHN0cmFuZ2UgZm9ybWF0IGZvciBhICJkb2N1bWVudCIgXQorCitUaGUgQUhBLTE1NDIgaXMgYSBidXMtbWFzdGVyIGRldmljZSwgYW5kIHlvdXIgcGF0Y2ggbWFrZXMgdGhlIGRyaXZlciBnaXZlIHRoZQorY29udHJvbGxlciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVycywgd2hpY2ggaXMgY29ycmVjdCBvbiB4ODYKKyhiZWNhdXNlIGFsbCBidXMgbWFzdGVyIGRldmljZXMgc2VlIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZ3MgZGlyZWN0bHkpLiAKKworSG93ZXZlciwgb24gbWFueSBzZXR1cHMsIHRoZXJlIGFyZSBhY3R1YWxseSBfdGhyZWVfIGRpZmZlcmVudCB3YXlzIG9mIGxvb2tpbmcKK2F0IG1lbW9yeSBhZGRyZXNzZXMsIGFuZCBpbiB0aGlzIGNhc2Ugd2UgYWN0dWFsbHkgd2FudCB0aGUgdGhpcmQsIHRoZQorc28tY2FsbGVkICJidXMgYWRkcmVzcyIuIAorCitFc3NlbnRpYWxseSwgdGhlIHRocmVlIHdheXMgb2YgYWRkcmVzc2luZyBtZW1vcnkgYXJlICh0aGlzIGlzICJyZWFsIG1lbW9yeSIsCit0aGF0IGlzLCBub3JtYWwgUkFNLS1zZWUgbGF0ZXIgYWJvdXQgb3RoZXIgZGV0YWlscyk6IAorCisgLSBDUFUgdW50cmFuc2xhdGVkLiAgVGhpcyBpcyB0aGUgInBoeXNpY2FsIiBhZGRyZXNzLiAgUGh5c2ljYWwgYWRkcmVzcyAKKyAgIDAgaXMgd2hhdCB0aGUgQ1BVIHNlZXMgd2hlbiBpdCBkcml2ZXMgemVyb2VzIG9uIHRoZSBtZW1vcnkgYnVzLgorCisgLSBDUFUgdHJhbnNsYXRlZCBhZGRyZXNzLiBUaGlzIGlzIHRoZSAidmlydHVhbCIgYWRkcmVzcywgYW5kIGlzIAorICAgY29tcGxldGVseSBpbnRlcm5hbCB0byB0aGUgQ1BVIGl0c2VsZiB3aXRoIHRoZSBDUFUgZG9pbmcgdGhlIGFwcHJvcHJpYXRlCisgICB0cmFuc2xhdGlvbnMgaW50byAiQ1BVIHVudHJhbnNsYXRlZCIuIAorCisgLSBidXMgYWRkcmVzcy4gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiBtZW1vcnkgYXMgc2VlbiBieSBPVEhFUiBkZXZpY2VzLCAKKyAgIG5vdCB0aGUgQ1BVLiBOb3csIGluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBtYW55IGRpZmZlcmVudCBidXMgCisgICBhZGRyZXNzZXMsIHdpdGggZWFjaCBkZXZpY2Ugc2VlaW5nIG1lbW9yeSBpbiBzb21lIGRldmljZS1zcGVjaWZpYyB3YXksIGJ1dAorICAgaGFwcGlseSBtb3N0IGhhcmR3YXJlIGRlc2lnbmVycyBhcmVuJ3QgYWN0dWFsbHkgYWN0aXZlbHkgdHJ5aW5nIHRvIG1ha2UKKyAgIHRoaW5ncyBhbnkgbW9yZSBjb21wbGV4IHRoYW4gbmVjZXNzYXJ5LCBzbyB5b3UgY2FuIGFzc3VtZSB0aGF0IGFsbCAKKyAgIGV4dGVybmFsIGhhcmR3YXJlIHNlZXMgdGhlIG1lbW9yeSB0aGUgc2FtZSB3YXkuIAorCitOb3csIG9uIG5vcm1hbCBQQ3MgdGhlIGJ1cyBhZGRyZXNzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIHBoeXNpY2FsCithZGRyZXNzLCBhbmQgdGhpbmdzIGFyZSB2ZXJ5IHNpbXBsZSBpbmRlZWQuIEhvd2V2ZXIsIHRoZXkgYXJlIHRoYXQgc2ltcGxlCitiZWNhdXNlIHRoZSBtZW1vcnkgYW5kIHRoZSBkZXZpY2VzIHNoYXJlIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UsIGFuZCB0aGF0IGlzCitub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyaWx5IHRydWUgb24gb3RoZXIgUENJL0lTQSBzZXR1cHMuIAorCitOb3csIGp1c3QgYXMgYW4gZXhhbXBsZSwgb24gdGhlIFBSZVAgKFBvd2VyUEMgUmVmZXJlbmNlIFBsYXRmb3JtKSwgdGhlIAorQ1BVIHNlZXMgYSBtZW1vcnkgbWFwIHNvbWV0aGluZyBsaWtlIHRoaXMgKHRoaXMgaXMgZnJvbSBtZW1vcnkpOgorCisJMC0yIEdCCQkicmVhbCBtZW1vcnkiCisJMiBHQi0zIEdCCSJzeXN0ZW0gSU8iIChpbmIvb3V0IGFuZCBzaW1pbGFyIGFjY2Vzc2VzIG9uIHg4NikKKwkzIEdCLTQgR0IgCSJJTyBtZW1vcnkiIChzaGFyZWQgbWVtb3J5IG92ZXIgdGhlIElPIGJ1cykKKworTm93LCB0aGF0IGxvb2tzIHNpbXBsZSBlbm91Z2guIEhvd2V2ZXIsIHdoZW4geW91IGxvb2sgYXQgdGhlIHNhbWUgdGhpbmcgZnJvbQordGhlIHZpZXdwb2ludCBvZiB0aGUgZGV2aWNlcywgeW91IGhhdmUgdGhlIHJldmVyc2UsIGFuZCB0aGUgcGh5c2ljYWwgbWVtb3J5CithZGRyZXNzIDAgYWN0dWFsbHkgc2hvd3MgdXAgYXMgYWRkcmVzcyAyIEdCIGZvciBhbnkgSU8gbWFzdGVyLgorCitTbyB3aGVuIHRoZSBDUFUgd2FudHMgYW55IGJ1cyBtYXN0ZXIgdG8gd3JpdGUgdG8gcGh5c2ljYWwgbWVtb3J5IDAsIGl0IAoraGFzIHRvIGdpdmUgdGhlIG1hc3RlciBhZGRyZXNzIDB4ODAwMDAwMDAgYXMgdGhlIG1lbW9yeSBhZGRyZXNzLgorCitTbywgZm9yIGV4YW1wbGUsIGRlcGVuZGluZyBvbiBob3cgdGhlIGtlcm5lbCBpcyBhY3R1YWxseSBtYXBwZWQgb24gdGhlIAorUFBDLCB5b3UgY2FuIGVuZCB1cCB3aXRoIGEgc2V0dXAgbGlrZSB0aGlzOgorCisgcGh5c2ljYWwgYWRkcmVzczoJMAorIHZpcnR1YWwgYWRkcmVzczoJMHhDMDAwMDAwMAorIGJ1cyBhZGRyZXNzOgkJMHg4MDAwMDAwMAorCit3aGVyZSBhbGwgdGhlIGFkZHJlc3NlcyBhY3R1YWxseSBwb2ludCB0byB0aGUgc2FtZSB0aGluZy4gIEl0J3MganVzdCBzZWVuIAordGhyb3VnaCBkaWZmZXJlbnQgdHJhbnNsYXRpb25zLi4KKworU2ltaWxhcmx5LCBvbiB0aGUgQWxwaGEsIHRoZSBub3JtYWwgdHJhbnNsYXRpb24gaXMKKworIHBoeXNpY2FsIGFkZHJlc3M6CTAKKyB2aXJ0dWFsIGFkZHJlc3M6CTB4ZmZmZmZjMDAwMDAwMDAwMAorIGJ1cyBhZGRyZXNzOgkJMHg0MDAwMDAwMAorCisoYnV0IHRoZXJlIGFyZSBhbHNvIEFscGhhcyB3aGVyZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgdGhlIGJ1cyBhZGRyZXNzCithcmUgdGhlIHNhbWUpLiAKKworQW55d2F5LCB0aGUgd2F5IHRvIGxvb2sgdXAgYWxsIHRoZXNlIHRyYW5zbGF0aW9ucywgeW91IGRvCisKKwkjaW5jbHVkZSA8YXNtL2lvLmg+CisKKwlwaHlzX2FkZHIgPSB2aXJ0X3RvX3BoeXModmlydF9hZGRyKTsKKwl2aXJ0X2FkZHIgPSBwaHlzX3RvX3ZpcnQocGh5c19hZGRyKTsKKwkgYnVzX2FkZHIgPSB2aXJ0X3RvX2J1cyh2aXJ0X2FkZHIpOworCXZpcnRfYWRkciA9IGJ1c190b192aXJ0KGJ1c19hZGRyKTsKKworTm93LCB3aGVuIGRvIHlvdSBuZWVkIHRoZXNlPworCitZb3Ugd2FudCB0aGUgX3ZpcnR1YWxfIGFkZHJlc3Mgd2hlbiB5b3UgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGFjY2VzcyB0aGF0IAorcG9pbnRlciBmcm9tIHRoZSBrZXJuZWwuIFNvIHlvdSBjYW4gaGF2ZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisJLyoKKwkgKiB0aGlzIGlzIHRoZSBoYXJkd2FyZSAibWFpbGJveCIgd2UgdXNlIHRvIGNvbW11bmljYXRlIHdpdGgKKwkgKiB0aGUgY29udHJvbGxlci4gVGhlIGNvbnRyb2xsZXIgc2VlcyB0aGlzIGRpcmVjdGx5LgorCSAqLworCXN0cnVjdCBtYWlsYm94IHsKKwkJX191MzIgc3RhdHVzOworCQlfX3UzMiBidWZzdGFydDsKKwkJX191MzIgYnVmbGVuOworCQkuLgorCX0gbWJveDsKKworCQl1bnNpZ25lZCBjaGFyICogcmV0YnVmZmVyOworCisJCS8qIGdldCB0aGUgYWRkcmVzcyBmcm9tIHRoZSBjb250cm9sbGVyICovCisJCXJldGJ1ZmZlciA9IGJ1c190b192aXJ0KG1ib3guYnVmc3RhcnQpOworCQlzd2l0Y2ggKHJldGJ1ZmZlclswXSkgeworCQkJY2FzZSBTVEFUVVNfT0s6CisJCQkJLi4uCisKK29uIHRoZSBvdGhlciBoYW5kLCB5b3Ugd2FudCB0aGUgYnVzIGFkZHJlc3Mgd2hlbiB5b3UgaGF2ZSBhIGJ1ZmZlciB0aGF0IAoreW91IHdhbnQgdG8gZ2l2ZSB0byB0aGUgY29udHJvbGxlcjoKKworCS8qIGFzayB0aGUgY29udHJvbGxlciB0byByZWFkIHRoZSBzZW5zZSBzdGF0dXMgaW50byAic2Vuc2VfYnVmZmVyIiAqLworCW1ib3guYnVmc3RhcnQgPSB2aXJ0X3RvX2J1cygmc2Vuc2VfYnVmZmVyKTsKKwltYm94LmJ1ZmxlbiA9IHNpemVvZihzZW5zZV9idWZmZXIpOworCW1ib3guc3RhdHVzID0gMDsKKwlub3RpZnlfY29udHJvbGxlcigmbWJveCk7CisKK0FuZCB5b3UgZ2VuZXJhbGx5IF9uZXZlcl8gd2FudCB0byB1c2UgdGhlIHBoeXNpY2FsIGFkZHJlc3MsIGJlY2F1c2UgeW91IGNhbid0Cit1c2UgdGhhdCBmcm9tIHRoZSBDUFUgKHRoZSBDUFUgb25seSB1c2VzIHRyYW5zbGF0ZWQgdmlydHVhbCBhZGRyZXNzZXMpLCBhbmQKK3lvdSBjYW4ndCB1c2UgaXQgZnJvbSB0aGUgYnVzIG1hc3Rlci4gCisKK1NvIHdoeSBkbyB3ZSBjYXJlIGFib3V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IGFsbD8gV2UgZG8gbmVlZCB0aGUgcGh5c2ljYWwKK2FkZHJlc3MgaW4gc29tZSBjYXNlcywgaXQncyBqdXN0IG5vdCB2ZXJ5IG9mdGVuIGluIG5vcm1hbCBjb2RlLiAgVGhlIHBoeXNpY2FsCithZGRyZXNzIGlzIG5lZWRlZCBpZiB5b3UgdXNlIG1lbW9yeSBtYXBwaW5ncywgZm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlCisicmVtYXBfcGZuX3JhbmdlKCkiIG1tIGZ1bmN0aW9uIHdhbnRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgdG8KK2JlIHJlbWFwcGVkIGFzIG1lYXN1cmVkIGluIHVuaXRzIG9mIHBhZ2VzLCBhLmsuYS4gdGhlIHBmbiAodGhlIG1lbW9yeQorbWFuYWdlbWVudCBsYXllciBkb2Vzbid0IGtub3cgYWJvdXQgZGV2aWNlcyBvdXRzaWRlIHRoZSBDUFUsIHNvIGl0CitzaG91bGRuJ3QgbmVlZCB0byBrbm93IGFib3V0ICJidXMgYWRkcmVzc2VzIiBldGMpLgorCitOT1RFIE5PVEUgTk9URSEgVGhlIGFib3ZlIGlzIG9ubHkgb25lIHBhcnQgb2YgdGhlIHdob2xlIGVxdWF0aW9uLiBUaGUgYWJvdmUKK29ubHkgdGFsa3MgYWJvdXQgInJlYWwgbWVtb3J5IiwgdGhhdCBpcywgQ1BVIG1lbW9yeSAoUkFNKS4gCisKK1RoZXJlIGlzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgdHlwZSBvZiBtZW1vcnkgdG9vLCBhbmQgdGhhdCdzIHRoZSAic2hhcmVkCittZW1vcnkiIG9uIHRoZSBQQ0kgb3IgSVNBIGJ1cy4gVGhhdCdzIGdlbmVyYWxseSBub3QgUkFNIChhbHRob3VnaCBpbiB0aGUgY2FzZQorb2YgYSB2aWRlbyBncmFwaGljcyBjYXJkIGl0IGNhbiBiZSBub3JtYWwgRFJBTSB0aGF0IGlzIGp1c3QgdXNlZCBmb3IgYSBmcmFtZQorYnVmZmVyKSwgYnV0IGNhbiBiZSB0aGluZ3MgbGlrZSBhIHBhY2tldCBidWZmZXIgaW4gYSBuZXR3b3JrIGNhcmQgZXRjLiAKKworVGhpcyBtZW1vcnkgaXMgY2FsbGVkICJQQ0kgbWVtb3J5IiBvciAic2hhcmVkIG1lbW9yeSIgb3IgIklPIG1lbW9yeSIgb3IKK3doYXRldmVyLCBhbmQgdGhlcmUgaXMgb25seSBvbmUgd2F5IHRvIGFjY2VzcyBpdDogdGhlIHJlYWRiL3dyaXRlYiBhbmQKK3JlbGF0ZWQgZnVuY3Rpb25zLiBZb3Ugc2hvdWxkIG5ldmVyIHRha2UgdGhlIGFkZHJlc3Mgb2Ygc3VjaCBtZW1vcnksIGJlY2F1c2UKK3RoZXJlIGlzIHJlYWxseSBub3RoaW5nIHlvdSBjYW4gZG8gd2l0aCBzdWNoIGFuIGFkZHJlc3M6IGl0J3Mgbm90Citjb25jZXB0dWFsbHkgaW4gdGhlIHNhbWUgbWVtb3J5IHNwYWNlIGFzICJyZWFsIG1lbW9yeSIgYXQgYWxsLCBzbyB5b3UgY2Fubm90CitqdXN0IGRlcmVmZXJlbmNlIGEgcG9pbnRlci4gKFNhZGx5LCBvbiB4ODYgaXQgX2lzXyBpbiB0aGUgc2FtZSBtZW1vcnkgc3BhY2UsCitzbyBvbiB4ODYgaXQgYWN0dWFsbHkgd29ya3MgdG8ganVzdCBkZWZlcmVuY2UgYSBwb2ludGVyLCBidXQgaXQncyBub3QKK3BvcnRhYmxlKS4gCisKK0ZvciBzdWNoIG1lbW9yeSwgeW91IGNhbiBkbyB0aGluZ3MgbGlrZQorCisgLSByZWFkaW5nOgorCS8qCisJICogcmVhZCBmaXJzdCAzMiBiaXRzIGZyb20gSVNBIG1lbW9yeSBhdCAweEMwMDAwLCBha2EKKwkgKiBDMDAwOjAwMDAgaW4gRE9TIHRlcm1zCisJICovCisJdW5zaWduZWQgaW50IHNpZ25hdHVyZSA9IGlzYV9yZWFkbCgweEMwMDAwKTsKKworIC0gcmVtYXBwaW5nIGFuZCB3cml0aW5nOgorCS8qCisJICogcmVtYXAgZnJhbWVidWZmZXIgUENJIG1lbW9yeSBhcmVhIGF0IDB4RkMwMDAwMDAsCisJICogc2l6ZSAxTUIsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyBpdDogV2UgY2FuIGRpcmVjdGx5CisJICogYWNjZXNzIG9ubHkgdGhlIDY0MGstMU1CIGFyZWEsIHNvIGFueXRoaW5nIGVsc2UKKwkgKiBoYXMgdG8gYmUgcmVtYXBwZWQuCisJICovCisJY2hhciAqIGJhc2VwdHIgPSBpb3JlbWFwKDB4RkMwMDAwMDAsIDEwMjQqMTAyNCk7CisKKwkvKiB3cml0ZSBhICdBJyB0byB0aGUgb2Zmc2V0IDEwIG9mIHRoZSBhcmVhICovCisJd3JpdGViKCdBJyxiYXNlcHRyKzEwKTsKKworCS8qIHVubWFwIHdoZW4gd2UgdW5sb2FkIHRoZSBkcml2ZXIgKi8KKwlpb3VubWFwKGJhc2VwdHIpOworCisgLSBjb3B5aW5nIGFuZCBjbGVhcmluZzoKKwkvKiBnZXQgdGhlIDYtYnl0ZSBFdGhlcm5ldCBhZGRyZXNzIGF0IElTQSBhZGRyZXNzIEUwMDA6MDA0MCAqLworCW1lbWNweV9mcm9taW8oa2VybmVsX2J1ZmZlciwgMHhFMDA0MCwgNik7CisJLyogd3JpdGUgYSBwYWNrZXQgdG8gdGhlIGRyaXZlciAqLworCW1lbWNweV90b2lvKDB4RTEwMDAsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCS8qIGNsZWFyIHRoZSBmcmFtZSBidWZmZXIgKi8KKwltZW1zZXRfaW8oMHhBMDAwMCwgMCwgMHgxMDAwMCk7CisKK09LLCB0aGF0IGp1c3QgYWJvdXQgY292ZXJzIHRoZSBiYXNpY3Mgb2YgYWNjZXNzaW5nIElPIHBvcnRhYmx5LiAgUXVlc3Rpb25zPworQ29tbWVudHM/IFlvdSBtYXkgdGhpbmsgdGhhdCBhbGwgdGhlIGFib3ZlIGlzIG92ZXJseSBjb21wbGV4LCBidXQgb25lIGRheSB5b3UKK21pZ2h0IGZpbmQgeW91cnNlbGYgd2l0aCBhIDUwMCBNSHogQWxwaGEgaW4gZnJvbnQgb2YgeW91LCBhbmQgdGhlbiB5b3UnbGwgYmUKK2hhcHB5IHRoYXQgeW91ciBkcml2ZXIgd29ya3MgOykKKworTm90ZSB0aGF0IGtlcm5lbCB2ZXJzaW9ucyAyLjAueCAoYW5kIGVhcmxpZXIpIG1pc3Rha2VubHkgY2FsbGVkIHRoZQoraW9yZW1hcCgpIGZ1bmN0aW9uICJ2cmVtYXAoKSIuICBpb3JlbWFwKCkgaXMgdGhlIHByb3BlciBuYW1lLCBidXQgSQorZGlkbid0IHRoaW5rIHN0cmFpZ2h0IHdoZW4gSSB3cm90ZSBpdCBvcmlnaW5hbGx5LiAgUGVvcGxlIHdobyBoYXZlIHRvCitzdXBwb3J0IGJvdGggY2FuIGRvIHNvbWV0aGluZyBsaWtlOgorIAorCS8qIHN1cHBvcnQgb2xkIG5hbWluZyBzaWxsaW5lc3MgKi8KKwkjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgMHgwMjAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJI2RlZmluZSBpb3JlbWFwIHZyZW1hcAorCSNkZWZpbmUgaW91bm1hcCB2ZnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJI2VuZGlmCisgCithdCB0aGUgdG9wIG9mIHRoZWlyIHNvdXJjZSBmaWxlcywgYW5kIHRoZW4gdGhleSBjYW4gdXNlIHRoZSByaWdodCBuYW1lcworZXZlbiBvbiAyLjAueCBzeXN0ZW1zLiAKKworQW5kIHRoZSBhYm92ZSBzb3VuZHMgd29yc2UgdGhhbiBpdCByZWFsbHkgaXMuICBNb3N0IHJlYWwgZHJpdmVycyByZWFsbHkKK2Rvbid0IGRvIGFsbCB0aGF0IGNvbXBsZXggdGhpbmdzIChvciByYXRoZXI6IHRoZSBjb21wbGV4aXR5IGlzIG5vdCBzbworbXVjaCBpbiB0aGUgYWN0dWFsIElPIGFjY2Vzc2VzIGFzIGluIGVycm9yIGhhbmRsaW5nIGFuZCB0aW1lb3V0cyBldGMpLiAKK0l0J3MgZ2VuZXJhbGx5IG5vdCBoYXJkIHRvIGZpeCBkcml2ZXJzLCBhbmQgaW4gbWFueSBjYXNlcyB0aGUgY29kZQorYWN0dWFsbHkgbG9va3MgYmV0dGVyIGFmdGVyd2FyZHM6CisKKwl1bnNpZ25lZCBsb25nIHNpZ25hdHVyZSA9ICoodW5zaWduZWQgaW50ICopIDB4QzAwMDA7CisJCXZzCisJdW5zaWduZWQgbG9uZyBzaWduYXR1cmUgPSByZWFkbCgweEMwMDAwKTsKKworSSB0aGluayB0aGUgc2Vjb25kIHZlcnNpb24gYWN0dWFsbHkgaXMgbW9yZSByZWFkYWJsZSwgbm8/CisKKwkJTGludXMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JUE1JLnR4dCBiL0RvY3VtZW50YXRpb24vSVBNSS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkMTBlNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vSVBNSS50eHQKQEAgLTAsMCArMSw1MzQgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgTGludXggSVBNSSBEcml2ZXIKKwkJCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgICAgICBDb3JleSBNaW55YXJkCisJCQkgIDxtaW55YXJkQG12aXN0YS5jb20+CisJCQkgICAgPG1pbnlhcmRAYWNtLm9yZz4KKworVGhlIEludGVsbGlnZW50IFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJmYWNlLCBvciBJUE1JLCBpcyBhCitzdGFuZGFyZCBmb3IgY29udHJvbGxpbmcgaW50ZWxsaWdlbnQgZGV2aWNlcyB0aGF0IG1vbml0b3IgYSBzeXN0ZW0uCitJdCBwcm92aWRlcyBmb3IgZHluYW1pYyBkaXNjb3Zlcnkgb2Ygc2Vuc29ycyBpbiB0aGUgc3lzdGVtIGFuZCB0aGUKK2FiaWxpdHkgdG8gbW9uaXRvciB0aGUgc2Vuc29ycyBhbmQgYmUgaW5mb3JtZWQgd2hlbiB0aGUgc2Vuc29yJ3MKK3ZhbHVlcyBjaGFuZ2Ugb3IgZ28gb3V0c2lkZSBjZXJ0YWluIGJvdW5kYXJpZXMuICBJdCBhbHNvIGhhcyBhCitzdGFuZGFyZGl6ZWQgZGF0YWJhc2UgZm9yIGZpZWxkLXJlcGxhY2FibGUgdW5pdHMgKEZSVXMpIGFuZCBhIHdhdGNoZG9nCit0aW1lci4KKworVG8gdXNlIHRoaXMsIHlvdSBuZWVkIGFuIGludGVyZmFjZSB0byBhbiBJUE1JIGNvbnRyb2xsZXIgaW4geW91cgorc3lzdGVtIChjYWxsZWQgYSBCYXNlYm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyLCBvciBCTUMpIGFuZAorbWFuYWdlbWVudCBzb2Z0d2FyZSB0aGF0IGNhbiB1c2UgdGhlIElQTUkgc3lzdGVtLgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gdXNlIHRoZSBJUE1JIGRyaXZlciBmb3IgTGludXguICBJZiB5b3UKK2FyZSBub3QgZmFtaWxpYXIgd2l0aCBJUE1JIGl0c2VsZiwgc2VlIHRoZSB3ZWIgc2l0ZSBhdAoraHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL3NlcnZlcnMvaXBtaS9pbmRleC5odG0uICBJUE1JIGlzIGEgYmlnCitzdWJqZWN0IGFuZCBJIGNhbid0IGNvdmVyIGl0IGFsbCBoZXJlIQorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBMaW51eElQTUkgZHJpdmVyIGlzIG1vZHVsYXIsIHdoaWNoIG1lYW5zIHlvdSBoYXZlIHRvIHBpY2sgc2V2ZXJhbAordGhpbmdzIHRvIGhhdmUgaXQgd29yayByaWdodCBkZXBlbmRpbmcgb24geW91ciBoYXJkd2FyZS4gIE1vc3Qgb2YKK3RoZXNlIGFyZSBhdmFpbGFibGUgaW4gdGhlICdDaGFyYWN0ZXIgRGV2aWNlcycgbWVudS4KKworTm8gbWF0dGVyIHdoYXQsIHlvdSBtdXN0IHBpY2sgJ0lQTUkgdG9wLWxldmVsIG1lc3NhZ2UgaGFuZGxlcicgdG8gdXNlCitJUE1JLiAgV2hhdCB5b3UgZG8gYmV5b25kIHRoYXQgZGVwZW5kcyBvbiB5b3VyIG5lZWRzIGFuZCBoYXJkd2FyZS4KKworVGhlIG1lc3NhZ2UgaGFuZGxlciBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VyLWxldmVsIGludGVyZmFjZXMuCitLZXJuZWwgY29kZSAobGlrZSB0aGUgd2F0Y2hkb2cpIGNhbiBzdGlsbCB1c2UgaXQuICBJZiB5b3UgbmVlZCBhY2Nlc3MKK2Zyb20gdXNlcmxhbmQsIHlvdSBuZWVkIHRvIHNlbGVjdCAnRGV2aWNlIGludGVyZmFjZSBmb3IgSVBNSScgaWYgeW91Cit3YW50IGFjY2VzcyB0aHJvdWdoIGEgZGV2aWNlIGRyaXZlci4gIEFub3RoZXIgaW50ZXJmYWNlIGlzIGFsc28KK2F2YWlsYWJsZSwgeW91IG1heSBzZWxlY3QgJ0lQTUkgc29ja2V0cycgaW4gdGhlICdOZXR3b3JraW5nIFN1cHBvcnQnCittYWluIG1lbnUuICBUaGlzIHByb3ZpZGVzIGEgc29ja2V0IGludGVyZmFjZSB0byBJUE1JLiAgWW91IG1heSBzZWxlY3QKK2JvdGggb2YgdGhlc2UgYXQgdGhlIHNhbWUgdGltZSwgdGhleSB3aWxsIGJvdGggd29yayB0b2dldGhlci4KKworVGhlIGRyaXZlciBpbnRlcmZhY2UgZGVwZW5kcyBvbiB5b3VyIGhhcmR3YXJlLiAgSWYgeW91IGhhdmUgYSBib2FyZAord2l0aCBhIHN0YW5kYXJkIGludGVyZmFjZSAoVGhlc2Ugd2lsbCBnZW5lcmFsbHkgYmUgZWl0aGVyICJLQ1MiLAorIlNNSUMiLCBvciAiQlQiLCBjb25zdWx0IHlvdXIgaGFyZHdhcmUgbWFudWFsKSwgY2hvb3NlIHRoZSAnSVBNSSBTSQoraGFuZGxlcicgb3B0aW9uLiAgQSBkcml2ZXIgYWxzbyBleGlzdHMgZm9yIGRpcmVjdCBJMkMgYWNjZXNzIHRvIHRoZQorSVBNSSBtYW5hZ2VtZW50IGNvbnRyb2xsZXIuICBTb21lIGJvYXJkcyBzdXBwb3J0IHRoaXMsIGJ1dCBpdCBpcwordW5rbm93biBpZiBpdCB3aWxsIHdvcmsgb24gZXZlcnkgYm9hcmQuICBGb3IgdGhpcywgY2hvb3NlICdJUE1JIFNNQnVzCitoYW5kbGVyJywgYnV0IGJlIHJlYWR5IHRvIHRyeSB0byBkbyBzb21lIGZpZ3VyaW5nIHRvIHNlZSBpZiBpdCB3aWxsCit3b3JrLgorCitUaGVyZSBpcyBhbHNvIGEgS0NTLW9ubHkgZHJpdmVyIGludGVyZmFjZSBzdXBwbGllZCwgYnV0IGl0IGlzCitkZXByYWNhdGVkIGluIGZhdm9yIG9mIHRoZSBTSSBpbnRlcmZhY2UuCisKK1lvdSBzaG91bGQgZ2VuZXJhbGx5IGVuYWJsZSBBQ1BJIG9uIHlvdXIgc3lzdGVtLCBhcyBzeXN0ZW1zIHdpdGggSVBNSQorc2hvdWxkIGhhdmUgQUNQSSB0YWJsZXMgZGVzY3JpYmluZyB0aGVtLgorCitJZiB5b3UgaGF2ZSBhIHN0YW5kYXJkIGludGVyZmFjZSBhbmQgdGhlIGJvYXJkIG1hbnVmYWN0dXJlciBoYXMgZG9uZQordGhlaXIgam9iIGNvcnJlY3RseSwgdGhlIElQTUkgY29udHJvbGxlciBzaG91bGQgYmUgYXV0b21hdGljYWxseQorZGV0ZWN0ICh2aWEgQUNQSSBvciBTTUJJT1MgdGFibGVzKSBhbmQgc2hvdWxkIGp1c3Qgd29yay4gIFNhZGx5LCBtYW55Citib2FyZHMgZG8gbm90IGhhdmUgdGhpcyBpbmZvcm1hdGlvbi4gIFRoZSBkcml2ZXIgYXR0ZW1wdHMgc3RhbmRhcmQKK2RlZmF1bHRzLCBidXQgdGhleSBtYXkgbm90IHdvcmsuICBJZiB5b3UgZmFsbCBpbnRvIHRoaXMgc2l0dWF0aW9uLCB5b3UKK25lZWQgdG8gcmVhZCB0aGUgc2VjdGlvbiBiZWxvdyBuYW1lZCAnVGhlIFNJIERyaXZlcicgb24gaG93IHRvCitoYW5kLWNvbmZpZ3VyZSB5b3VyIHN5c3RlbS4KKworSVBNSSBkZWZpbmVzIGEgc3RhbmRhcmQgd2F0Y2hkb2cgdGltZXIuICBZb3UgY2FuIGVuYWJsZSB0aGlzIHdpdGggdGhlCisnSVBNSSBXYXRjaGRvZyBUaW1lcicgY29uZmlnIG9wdGlvbi4gIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50bwordGhlIGtlcm5lbCwgdGhlbiB2aWEgYSBrZXJuZWwgY29tbWFuZC1saW5lIG9wdGlvbiB5b3UgY2FuIGhhdmUgdGhlCit3YXRjaGRvZyB0aW1lciBzdGFydCBhcyBzb29uIGFzIGl0IGludGl0aWFsaXplcy4gIEl0IGFsc28gaGF2ZSBhIGxvdAorb2Ygb3RoZXIgb3B0aW9ucywgc2VlIHRoZSAnV2F0Y2hkb2cnIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KK05vdGUgdGhhdCB5b3UgY2FuIGFsc28gaGF2ZSB0aGUgd2F0Y2hkb2cgY29udGludWUgdG8gcnVuIGlmIGl0IGlzCitjbG9zZWQgKGJ5IGRlZmF1bHQgaXQgaXMgZGlzYWJsZWQgb24gY2xvc2UpLiAgR28gaW50byB0aGUgJ1dhdGNoZG9nCitDYXJkcycgbWVudSwgZW5hYmxlICdXYXRjaGRvZyBUaW1lciBTdXBwb3J0JywgYW5kIGVuYWJsZSB0aGUgb3B0aW9uCisnRGlzYWJsZSB3YXRjaGRvZyBzaHV0ZG93biBvbiBjbG9zZScuCisKKworQmFzaWMgRGVzaWduCistLS0tLS0tLS0tLS0KKworVGhlIExpbnV4IElQTUkgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGJlIHZlcnkgbW9kdWxhciBhbmQgZmxleGlibGUsIHlvdQorb25seSBuZWVkIHRvIHRha2UgdGhlIHBpZWNlcyB5b3UgbmVlZCBhbmQgeW91IGNhbiB1c2UgaXQgaW4gbWFueQorZGlmZmVyZW50IHdheXMuICBCZWNhdXNlIG9mIHRoYXQsIGl0J3MgYnJva2VuIGludG8gbWFueSBjaHVua3Mgb2YKK2NvZGUuICBUaGVzZSBjaHVua3MgYXJlOgorCitpcG1pX21zZ2hhbmRsZXIgLSBUaGlzIGlzIHRoZSBjZW50cmFsIHBpZWNlIG9mIHNvZnR3YXJlIGZvciB0aGUgSVBNSQorc3lzdGVtLiAgSXQgaGFuZGxlcyBhbGwgbWVzc2FnZXMsIG1lc3NhZ2UgdGltaW5nLCBhbmQgcmVzcG9uc2VzLiAgVGhlCitJUE1JIHVzZXJzIHRpZSBpbnRvIHRoaXMsIGFuZCB0aGUgSVBNSSBwaHlzaWNhbCBpbnRlcmZhY2VzIChjYWxsZWQKK1N5c3RlbSBNYW5hZ2VtZW50IEludGVyZmFjZXMsIG9yIFNNSXMpIGFsc28gdGllIGluIGhlcmUuICBUaGlzCitwcm92aWRlcyB0aGUga2VybmVsbGFuZCBpbnRlcmZhY2UgZm9yIElQTUksIGJ1dCBkb2VzIG5vdCBwcm92aWRlIGFuCitpbnRlcmZhY2UgZm9yIHVzZSBieSBhcHBsaWNhdGlvbiBwcm9jZXNzZXMuCisKK2lwbWlfZGV2aW50ZiAtIFRoaXMgcHJvdmlkZXMgYSB1c2VybGFuZCBJT0NUTCBpbnRlcmZhY2UgZm9yIHRoZSBJUE1JCitkcml2ZXIsIGVhY2ggb3BlbiBmaWxlIGZvciB0aGlzIGRldmljZSB0aWVzIGluIHRvIHRoZSBtZXNzYWdlIGhhbmRsZXIKK2FzIGFuIElQTUkgdXNlci4KKworaXBtaV9zaSAtIEEgZHJpdmVyIGZvciB2YXJpb3VzIHN5c3RlbSBpbnRlcmZhY2VzLiAgVGhpcyBzdXBwb3J0cworS0NTLCBTTUlDLCBhbmQgbWF5IHN1cHBvcnQgQlQgaW4gdGhlIGZ1dHVyZS4gIFVubGVzcyB5b3UgaGF2ZSB5b3VyIG93bgorY3VzdG9tIGludGVyZmFjZSwgeW91IHByb2JhYmx5IG5lZWQgdG8gdXNlIHRoaXMuCisKK2lwbWlfc21iIC0gQSBkcml2ZXIgZm9yIGFjY2Vzc2luZyBCTUNzIG9uIHRoZSBTTUJ1cy4gSXQgdXNlcyB0aGUKK0kyQyBrZXJuZWwgZHJpdmVyJ3MgU01CdXMgaW50ZXJmYWNlcyB0byBzZW5kIGFuZCByZWNlaXZlIElQTUkgbWVzc2FnZXMKK292ZXIgdGhlIFNNQnVzLgorCithZl9pcG1pIC0gQSBuZXR3b3JrIHNvY2tldCBpbnRlcmZhY2UgdG8gSVBNSS4gIFRoaXMgZG9lc24ndCB0YWtlIHVwCithIGNoYXJhY3RlciBkZXZpY2UgaW4geW91ciBzeXN0ZW0uCisKK05vdGUgdGhhdCB0aGUgS0NTLW9ubHkgaW50ZXJmYWNlIGFocyBiZWVuIHJlbW92ZWQuCisKK011Y2ggZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGludGVyZmFjZSBpcyBpbiB0aGUgaW5jbHVkZSBmaWxlcy4gIFRoZQorSVBNSSBpbmNsdWRlIGZpbGVzIGFyZToKKworbmV0L2FmX2lwbWkuaCAtIENvbnRhaW5zIHRoZSBzb2NrZXQgaW50ZXJmYWNlLgorCitsaW51eC9pcG1pLmggLSBDb250YWlucyB0aGUgdXNlciBpbnRlcmZhY2UgYW5kIElPQ1RMIGludGVyZmFjZSBmb3IgSVBNSS4KKworbGludXgvaXBtaV9zbWkuaCAtIENvbnRhaW5zIHRoZSBpbnRlcmZhY2UgZm9yIHN5c3RlbSBtYW5hZ2VtZW50IGludGVyZmFjZXMKKyh0aGluZ3MgdGhhdCBpbnRlcmZhY2UgdG8gSVBNSSBjb250cm9sbGVycykgdG8gdXNlLgorCitsaW51eC9pcG1pX21zZ2RlZnMuaCAtIEdlbmVyYWwgZGVmaW5pdGlvbnMgZm9yIGJhc2UgSVBNSSBtZXNzYWdpbmcuCisKKworQWRkcmVzc2luZworLS0tLS0tLS0tLQorCitUaGUgSVBNSSBhZGRyZXNzaW5nIHdvcmtzIG11Y2ggbGlrZSBJUCBhZGRyZXNzZXMsIHlvdSBoYXZlIGFuIG92ZXJsYXkKK3RvIGhhbmRsZSB0aGUgZGlmZmVyZW50IGFkZHJlc3MgdHlwZXMuICBUaGUgb3ZlcmxheSBpczoKKworICBzdHJ1Y3QgaXBtaV9hZGRyCisgIHsKKwlpbnQgICBhZGRyX3R5cGU7CisJc2hvcnQgY2hhbm5lbDsKKwljaGFyICBkYXRhW0lQTUlfTUFYX0FERFJfU0laRV07CisgIH07CisKK1RoZSBhZGRyX3R5cGUgZGV0ZXJtaW5lcyB3aGF0IHRoZSBhZGRyZXNzIHJlYWxseSBpcy4gIFRoZSBkcml2ZXIKK2N1cnJlbnRseSB1bmRlcnN0YW5kcyB0d28gZGlmZmVyZW50IHR5cGVzIG9mIGFkZHJlc3Nlcy4KKworIlN5c3RlbSBJbnRlcmZhY2UiIGFkZHJlc3NlcyBhcmUgZGVmaW5lZCBhczoKKworICBzdHJ1Y3QgaXBtaV9zeXN0ZW1faW50ZXJmYWNlX2FkZHIKKyAgeworCWludCAgIGFkZHJfdHlwZTsKKwlzaG9ydCBjaGFubmVsOworICB9OworCithbmQgdGhlIHR5cGUgaXMgSVBNSV9TWVNURU1fSU5URVJGQUNFX0FERFJfVFlQRS4gIFRoaXMgaXMgdXNlZCBmb3IgdGFsa2luZworc3RyYWlnaHQgdG8gdGhlIEJNQyBvbiB0aGUgY3VycmVudCBjYXJkLiAgVGhlIGNoYW5uZWwgbXVzdCBiZQorSVBNSV9CTUNfQ0hBTk5FTC4KKworTWVzc2FnZXMgdGhhdCBhcmUgZGVzdGluZWQgdG8gZ28gb3V0IG9uIHRoZSBJUE1CIGJ1cyB1c2UgdGhlCitJUE1JX0lQTUJfQUREUl9UWVBFIGFkZHJlc3MgdHlwZS4gIFRoZSBmb3JtYXQgaXMKKworICBzdHJ1Y3QgaXBtaV9pcG1iX2FkZHIKKyAgeworCWludCAgICAgICAgICAgYWRkcl90eXBlOworCXNob3J0ICAgICAgICAgY2hhbm5lbDsKKwl1bnNpZ25lZCBjaGFyIHNsYXZlX2FkZHI7CisJdW5zaWduZWQgY2hhciBsdW47CisgIH07CisKK1RoZSAiY2hhbm5lbCIgaGVyZSBpcyBnZW5lcmFsbHkgemVybywgYnV0IHNvbWUgZGV2aWNlcyBzdXBwb3J0IG1vcmUKK3RoYW4gb25lIGNoYW5uZWwsIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBjaGFubmVsIGFzIGRlZmluZWQgaW4gdGhlIElQTUkKK3NwZWMuCisKKworTWVzc2FnZXMKKy0tLS0tLS0tCisKK01lc3NhZ2VzIGFyZSBkZWZpbmVkIGFzOgorCitzdHJ1Y3QgaXBtaV9tc2cKK3sKKwl1bnNpZ25lZCBjaGFyIG5ldGZuOworCXVuc2lnbmVkIGNoYXIgbHVuOworCXVuc2lnbmVkIGNoYXIgY21kOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJaW50ICAgICAgICAgICBkYXRhX2xlbjsKK307CisKK1RoZSBkcml2ZXIgdGFrZXMgY2FyZSBvZiBhZGRpbmcvc3RyaXBwaW5nIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24uICBUaGUKK2RhdGEgcG9ydGlvbiBpcyBqdXN0IHRoZSBkYXRhIHRvIGJlIHNlbmQgKGRvIE5PVCBwdXQgYWRkcmVzc2luZyBpbmZvCitoZXJlKSBvciB0aGUgcmVzcG9uc2UuICBOb3RlIHRoYXQgdGhlIGNvbXBsZXRpb24gY29kZSBvZiBhIHJlc3BvbnNlIGlzCit0aGUgZmlyc3QgaXRlbSBpbiAiZGF0YSIsIGl0IGlzIG5vdCBzdHJpcHBlZCBvdXQgYmVjYXVzZSB0aGF0IGlzIGhvdworYWxsIHRoZSBtZXNzYWdlcyBhcmUgZGVmaW5lZCBpbiB0aGUgc3BlYyAoYW5kIHRodXMgbWFrZXMgY291bnRpbmcgdGhlCitvZmZzZXRzIGEgbGl0dGxlIGVhc2llciA6LSkuCisKK1doZW4gdXNpbmcgdGhlIElPQ1RMIGludGVyZmFjZSBmcm9tIHVzZXJsYW5kLCB5b3UgbXVzdCBwcm92aWRlIGEgYmxvY2sKK29mIGRhdGEgZm9yICJkYXRhIiwgZmlsbCBpdCwgYW5kIHNldCBkYXRhX2xlbiB0byB0aGUgbGVuZ3RoIG9mIHRoZQorYmxvY2sgb2YgZGF0YSwgZXZlbiB3aGVuIHJlY2VpdmluZyBtZXNzYWdlcy4gIE90aGVyd2lzZSB0aGUgZHJpdmVyCit3aWxsIGhhdmUgbm8gcGxhY2UgdG8gcHV0IHRoZSBtZXNzYWdlLgorCitNZXNzYWdlcyBjb21pbmcgdXAgZnJvbSB0aGUgbWVzc2FnZSBoYW5kbGVyIGluIGtlcm5lbGxhbmQgd2lsbCBjb21lIGluCithczoKKworICBzdHJ1Y3QgaXBtaV9yZWN2X21zZworICB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJLyogVGhlIHR5cGUgb2YgbWVzc2FnZSBhcyBkZWZpbmVkIGluIHRoZSAiUmVjZWl2ZSBUeXBlcyIKKyAgICAgICAgICAgZGVmaW5lcyBhYm92ZS4gKi8KKwlpbnQgICAgICAgICByZWN2X3R5cGU7CisKKwlpcG1pX3VzZXJfdCAgICAgICp1c2VyOworCXN0cnVjdCBpcG1pX2FkZHIgYWRkcjsKKwlsb25nICAgICAgICAgICAgIG1zZ2lkOworCXN0cnVjdCBpcG1pX21zZyAgbXNnOworCisJLyogQ2FsbCB0aGlzIHdoZW4gZG9uZSB3aXRoIHRoZSBtZXNzYWdlLiAgSXQgd2lsbCBwcmVzdW1hYmx5IGZyZWUKKwkgICB0aGUgbWVzc2FnZSBhbmQgZG8gYW55IG90aGVyIG5lY2Vzc2FyeSBjbGVhbnVwLiAqLworCXZvaWQgKCpkb25lKShzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqbXNnKTsKKworCS8qIFBsYWNlLWhvbGRlciBmb3IgdGhlIGRhdGEsIGRvbid0IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0CisJICAgdGhlIHNpemUgb3IgZXhpc3RlbmNlIG9mIHRoaXMsIHNpbmNlIGl0IG1heSBjaGFuZ2UuICovCisJdW5zaWduZWQgY2hhciAgIG1zZ19kYXRhW0lQTUlfTUFYX01TR19MRU5HVEhdOworICB9OworCitZb3Ugc2hvdWxkIGxvb2sgYXQgdGhlIHJlY2VpdmUgdHlwZSBhbmQgaGFuZGxlIHRoZSBtZXNzYWdlCithcHByb3ByaWF0ZWx5LgorCisKK1RoZSBVcHBlciBMYXllciBJbnRlcmZhY2UgKE1lc3NhZ2UgSGFuZGxlcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHVwcGVyIGxheWVyIG9mIHRoZSBpbnRlcmZhY2UgcHJvdmlkZXMgdGhlIHVzZXJzIHdpdGggYSBjb25zaXN0ZW50Cit2aWV3IG9mIHRoZSBJUE1JIGludGVyZmFjZXMuICBJdCBhbGxvd3MgbXVsdGlwbGUgU01JIGludGVyZmFjZXMgdG8gYmUKK2FkZHJlc3NlZCAoYmVjYXVzZSBzb21lIGJvYXJkcyBhY3R1YWxseSBoYXZlIG11bHRpcGxlIEJNQ3Mgb24gdGhlbSkKK2FuZCB0aGUgdXNlciBzaG91bGQgbm90IGhhdmUgdG8gY2FyZSB3aGF0IHR5cGUgb2YgU01JIGlzIGJlbG93IHRoZW0uCisKKworQ3JlYXRpbmcgdGhlIFVzZXIKKworVG8gdXNlciB0aGUgbWVzc2FnZSBoYW5kbGVyLCB5b3UgbXVzdCBmaXJzdCBjcmVhdGUgYSB1c2VyIHVzaW5nCitpcG1pX2NyZWF0ZV91c2VyLiAgVGhlIGludGVyZmFjZSBudW1iZXIgc3BlY2lmaWVzIHdoaWNoIFNNSSB5b3Ugd2FudAordG8gY29ubmVjdCB0bywgYW5kIHlvdSBtdXN0IHN1cHBseSBjYWxsYmFjayBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkCit3aGVuIGRhdGEgY29tZXMgaW4uICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIHJ1biBhdCBpbnRlcnJ1cHQgbGV2ZWwsCitzbyBiZSBjYXJlZnVsIHVzaW5nIHRoZSBjYWxsYmFja3MuICBUaGlzIGFsc28gYWxsb3dzIHRvIHlvdSBwYXNzIGluIGEKK3BpZWNlIG9mIGRhdGEsIHRoZSBoYW5kbGVyX2RhdGEsIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB5b3Ugb24KK2FsbCBjYWxscy4KKworT25jZSB5b3UgYXJlIGRvbmUsIGNhbGwgaXBtaV9kZXN0cm95X3VzZXIoKSB0byBnZXQgcmlkIG9mIHRoZSB1c2VyLgorCitGcm9tIHVzZXJsYW5kLCBvcGVuaW5nIHRoZSBkZXZpY2UgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgdXNlciwgYW5kCitjbG9zaW5nIHRoZSBkZXZpY2UgYXV0b21hdGljYWxseSBkZXN0cm95cyB0aGUgdXNlci4KKworCitNZXNzYWdpbmcKKworVG8gc2VuZCBhIG1lc3NhZ2UgZnJvbSBrZXJuZWwtbGFuZCwgdGhlIGlwbWlfcmVxdWVzdCgpIGNhbGwgZG9lcworcHJldHR5IG11Y2ggYWxsIG1lc3NhZ2UgaGFuZGxpbmcuICBNb3N0IG9mIHRoZSBwYXJhbWV0ZXIgYXJlCitzZWxmLWV4cGxhbmF0b3J5LiAgSG93ZXZlciwgaXQgdGFrZXMgYSAibXNnaWQiIHBhcmFtZXRlci4gIFRoaXMgaXMgTk9UCit0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIG1lc3NhZ2VzLiAgSXQgaXMgc2ltcGx5IGEgbG9uZyB2YWx1ZSB0aGF0IGlzCitwYXNzZWQgYmFjayB3aGVuIHRoZSByZXNwb25zZSBmb3IgdGhlIG1lc3NhZ2UgaXMgcmV0dXJuZWQuICBZb3UgbWF5Cit1c2UgaXQgZm9yIGFueXRoaW5nIHlvdSBsaWtlLgorCitSZXNwb25zZXMgY29tZSBiYWNrIGluIHRoZSBmdW5jdGlvbiBwb2ludGVkIHRvIGJ5IHRoZSBpcG1pX3JlY3ZfaG5kbAorZmllbGQgb2YgdGhlICJoYW5kbGVyIiB0aGF0IHlvdSBwYXNzZWQgaW4gdG8gaXBtaV9jcmVhdGVfdXNlcigpLgorUmVtZW1iZXIgYWdhaW4sIHRoZXNlIG1heSBiZSBydW5uaW5nIGF0IGludGVycnVwdCBsZXZlbC4gIFJlbWVtYmVyIHRvCitsb29rIGF0IHRoZSByZWNlaXZlIHR5cGUsIHRvby4KKworRnJvbSB1c2VybGFuZCwgeW91IGZpbGwgb3V0IGFuIGlwbWlfcmVxX3Qgc3RydWN0dXJlIGFuZCB1c2UgdGhlCitJUE1JQ1RMX1NFTkRfQ09NTUFORCBpb2N0bC4gIEZvciBpbmNvbWluZyBzdHVmZiwgeW91IGNhbiB1c2Ugc2VsZWN0KCkKK29yIHBvbGwoKSB0byB3YWl0IGZvciBtZXNzYWdlcyB0byBjb21lIGluLiAgSG93ZXZlciwgeW91IGNhbm5vdCB1c2UKK3JlYWQoKSB0byBnZXQgdGhlbSwgeW91IG11c3QgY2FsbCB0aGUgSVBNSUNUTF9SRUNFSVZFX01TRyB3aXRoIHRoZQoraXBtaV9yZWN2X3Qgc3RydWN0dXJlIHRvIGFjdHVhbGx5IGdldCB0aGUgbWVzc2FnZS4gIFJlbWVtYmVyIHRoYXQgeW91CittdXN0IHN1cHBseSBhIHBvaW50ZXIgdG8gYSBibG9jayBvZiBkYXRhIGluIHRoZSBtc2cuZGF0YSBmaWVsZCwgYW5kCit5b3UgbXVzdCBmaWxsIGluIHRoZSBtc2cuZGF0YV9sZW4gZmllbGQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgZGF0YS4KK1RoaXMgZ2l2ZXMgdGhlIHJlY2VpdmVyIGEgcGxhY2UgdG8gYWN0dWFsbHkgcHV0IHRoZSBtZXNzYWdlLgorCitJZiB0aGUgbWVzc2FnZSBjYW5ub3QgZml0IGludG8gdGhlIGRhdGEgeW91IHByb3ZpZGUsIHlvdSB3aWxsIGdldCBhbgorRU1TR1NJWkUgZXJyb3IgYW5kIHRoZSBkcml2ZXIgd2lsbCBsZWF2ZSB0aGUgZGF0YSBpbiB0aGUgcmVjZWl2ZQorcXVldWUuICBJZiB5b3Ugd2FudCB0byBnZXQgaXQgYW5kIGhhdmUgaXQgdHJ1bmNhdGUgdGhlIG1lc3NhZ2UsIHVzCit0aGUgSVBNSUNUTF9SRUNFSVZFX01TR19UUlVOQyBpb2N0bC4KKworV2hlbiB5b3Ugc2VuZCBhIGNvbW1hbmQgKHdoaWNoIGlzIGRlZmluZWQgYnkgdGhlIGxvd2VzdC1vcmRlciBiaXQgb2YKK3RoZSBuZXRmbiBwZXIgdGhlIElQTUkgc3BlYykgb24gdGhlIElQTUIgYnVzLCB0aGUgZHJpdmVyIHdpbGwKK2F1dG9tYXRpY2FsbHkgYXNzaWduIHRoZSBzZXF1ZW5jZSBudW1iZXIgdG8gdGhlIGNvbW1hbmQgYW5kIHNhdmUgdGhlCitjb21tYW5kLiAgSWYgdGhlIHJlc3BvbnNlIGlzIG5vdCByZWNlaXZlIGluIHRoZSBJUE1JLXNwZWNpZmllZCA1CitzZWNvbmRzLCBpdCB3aWxsIGdlbmVyYXRlIGEgcmVzcG9uc2UgYXV0b21hdGljYWxseSBzYXlpbmcgdGhlIGNvbW1hbmQKK3RpbWVkIG91dC4gIElmIGFuIHVuc29saWNpdGVkIHJlc3BvbnNlIGNvbWVzIGluIChpZiBpdCB3YXMgYWZ0ZXIgNQorc2Vjb25kcywgZm9yIGluc3RhbmNlKSwgdGhhdCByZXNwb25zZSB3aWxsIGJlIGlnbm9yZWQuCisKK0luIGtlcm5lbGxhbmQsIGFmdGVyIHlvdSByZWNlaXZlIGEgbWVzc2FnZSBhbmQgYXJlIGRvbmUgd2l0aCBpdCwgeW91CitNVVNUIGNhbGwgaXBtaV9mcmVlX3JlY3ZfbXNnKCkgb24gaXQsIG9yIHlvdSB3aWxsIGxlYWsgbWVzc2FnZXMuICBOb3RlCit0aGF0IHlvdSBzaG91bGQgTkVWRVIgbWVzcyB3aXRoIHRoZSAiZG9uZSIgZmllbGQgb2YgYSBtZXNzYWdlLCB0aGF0IGlzCityZXF1aXJlZCB0byBwcm9wZXJseSBjbGVhbiB1cCB0aGUgbWVzc2FnZS4KKworTm90ZSB0aGF0IHdoZW4gc2VuZGluZywgdGhlcmUgaXMgYW4gaXBtaV9yZXF1ZXN0X3N1cHBseV9tc2dzKCkgY2FsbAordGhhdCBsZXRzIHlvdSBzdXBwbHkgdGhlIHNtaSBhbmQgcmVjZWl2ZSBtZXNzYWdlLiAgVGhpcyBpcyB1c2VmdWwgZm9yCitwaWVjZXMgb2YgY29kZSB0aGF0IG5lZWQgdG8gd29yayBldmVuIGlmIHRoZSBzeXN0ZW0gaXMgb3V0IG9mIGJ1ZmZlcnMKKyh0aGUgd2F0Y2hkb2cgdGltZXIgdXNlcyB0aGlzLCBmb3IgaW5zdGFuY2UpLiAgWW91IHN1cHBseSB5b3VyIG93bgorYnVmZmVyIGFuZCBvd24gZnJlZSByb3V0aW5lcy4gIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGZvciBub3JtYWwgdXNlLAordGhvdWdoLCBzaW5jZSBpdCBpcyB0cmlja3kgdG8gbWFuYWdlIHlvdXIgb3duIGJ1ZmZlcnMuCisKKworRXZlbnRzIGFuZCBJbmNvbWluZyBDb21tYW5kcworCitUaGUgZHJpdmVyIHRha2VzIGNhcmUgb2YgcG9sbGluZyBmb3IgSVBNSSBldmVudHMgYW5kIHJlY2VpdmluZworY29tbWFuZHMgKGNvbW1hbmRzIGFyZSBtZXNzYWdlcyB0aGF0IGFyZSBub3QgcmVzcG9uc2VzLCB0aGV5IGFyZQorY29tbWFuZHMgdGhhdCBvdGhlciB0aGluZ3Mgb24gdGhlIElQTUIgYnVzIGhhdmUgc2VudCB5b3UpLiAgVG8gcmVjZWl2ZQordGhlc2UsIHlvdSBtdXN0IHJlZ2lzdGVyIGZvciB0aGVtLCB0aGV5IHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYmUgc2VudAordG8geW91LgorCitUbyByZWNlaXZlIGV2ZW50cywgeW91IG11c3QgY2FsbCBpcG1pX3NldF9nZXRzX2V2ZW50cygpIGFuZCBzZXQgdGhlCisidmFsIiB0byBub24temVyby4gIEFueSBldmVudHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnkgdGhlIGRyaXZlcgorc2luY2Ugc3RhcnR1cCB3aWxsIGltbWVkaWF0ZWx5IGJlIGRlbGl2ZXJlZCB0byB0aGUgZmlyc3QgdXNlciB0aGF0CityZWdpc3RlcnMgZm9yIGV2ZW50cy4gIEFmdGVyIHRoYXQsIGlmIG11bHRpcGxlIHVzZXJzIGFyZSByZWdpc3RlcmVkCitmb3IgZXZlbnRzLCB0aGV5IHdpbGwgYWxsIHJlY2VpdmUgYWxsIGV2ZW50cyB0aGF0IGNvbWUgaW4uCisKK0ZvciByZWNlaXZpbmcgY29tbWFuZHMsIHlvdSBoYXZlIHRvIGluZGl2aWR1YWxseSByZWdpc3RlciBjb21tYW5kcyB5b3UKK3dhbnQgdG8gcmVjZWl2ZS4gIENhbGwgaXBtaV9yZWdpc3Rlcl9mb3JfY21kKCkgYW5kIHN1cHBseSB0aGUgbmV0Zm4KK2FuZCBjb21tYW5kIG5hbWUgZm9yIGVhY2ggY29tbWFuZCB5b3Ugd2FudCB0byByZWNlaXZlLiAgT25seSBvbmUgdXNlcgorbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIGVhY2ggbmV0Zm4vY21kLCBidXQgZGlmZmVyZW50IHVzZXJzIG1heSByZWdpc3RlcgorZm9yIGRpZmZlcmVudCBjb21tYW5kcy4KKworRnJvbSB1c2VybGFuZCwgZXF1aXZhbGVudCBJT0NUTHMgYXJlIHByb3ZpZGVkIHRvIGRvIHRoZXNlIGZ1bmN0aW9ucy4KKworCitUaGUgTG93ZXIgTGF5ZXIgKFNNSSkgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIG1lbnRpb25lZCBiZWZvcmUsIG11bHRpcGxlIFNNSSBpbnRlcmZhY2VzIG1heSBiZSByZWdpc3RlcmVkIHRvIHRoZQorbWVzc2FnZSBoYW5kbGVyLCBlYWNoIG9mIHRoZXNlIGlzIGFzc2lnbmVkIGFuIGludGVyZmFjZSBudW1iZXIgd2hlbgordGhleSByZWdpc3RlciB3aXRoIHRoZSBtZXNzYWdlIGhhbmRsZXIuICBUaGV5IGFyZSBnZW5lcmFsbHkgYXNzaWduZWQKK2luIHRoZSBvcmRlciB0aGV5IHJlZ2lzdGVyLCBhbHRob3VnaCBpZiBhbiBTTUkgdW5yZWdpc3RlcnMgYW5kIHRoZW4KK2Fub3RoZXIgb25lIHJlZ2lzdGVycywgYWxsIGJldHMgYXJlIG9mZi4KKworVGhlIGlwbWlfc21pLmggZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZXMsIHNlZQordGhhdCBmb3IgbW9yZSBkZXRhaWxzLgorCisKK1RoZSBTSSBEcml2ZXIKKy0tLS0tLS0tLS0tLS0KKworVGhlIFNJIGRyaXZlciBhbGxvd3MgdXAgdG8gNCBLQ1Mgb3IgU01JQyBpbnRlcmZhY2VzIHRvIGJlIGNvbmZpZ3VyZWQKK2luIHRoZSBzeXN0ZW0uICBCeSBkZWZhdWx0LCBzY2FuIHRoZSBBQ1BJIHRhYmxlcyBmb3IgaW50ZXJmYWNlcywgYW5kCitpZiBpdCBkb2Vzbid0IGZpbmQgYW55IHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHJlZ2lzdGVyIG9uZSBLQ1MKK2ludGVyZmFjZSBhdCB0aGUgc3BlYy1zcGVjaWZpZWQgSS9PIHBvcnQgMHhjYTIgd2l0aG91dCBpbnRlcnJ1cHRzLgorWW91IGNhbiBjaGFuZ2UgdGhpcyBhdCBtb2R1bGUgbG9hZCB0aW1lIChmb3IgYSBtb2R1bGUpIHdpdGg6CisKKyAgbW9kcHJvYmUgaXBtaV9zaS5vIHR5cGU9PHR5cGUxPiw8dHlwZTI+Li4uLgorICAgICAgIHBvcnRzPTxwb3J0MT4sPHBvcnQyPi4uLiBhZGRycz08YWRkcjE+LDxhZGRyMj4uLi4KKyAgICAgICBpcnFzPTxpcnExPiw8aXJxMj4uLi4gdHJ5ZGVmYXVsdHM9WzB8MV0KKyAgICAgICByZWdzcGFjaW5ncz08c3AxPiw8c3AyPiwuLi4gcmVnc2l6ZXM9PHNpemUxPiw8c2l6ZTI+LC4uLgorICAgICAgIHJlZ3NoaWZ0cz08c2hpZnQxPiw8c2hpZnQyPiwuLi4KKyAgICAgICBzbGF2ZV9hZGRycz08YWRkcjE+LDxhZGRyMj4sLi4uCisKK0VhY2ggb2YgdGhlc2UgZXhjZXB0IHNpX3RyeWRlZmF1bHRzIGlzIGEgbGlzdCwgdGhlIGZpcnN0IGl0ZW0gZm9yIHRoZQorZmlyc3QgaW50ZXJmYWNlLCBzZWNvbmQgaXRlbSBmb3IgdGhlIHNlY29uZCBpbnRlcmZhY2UsIGV0Yy4KKworVGhlIHNpX3R5cGUgbWF5IGJlIGVpdGhlciAia2NzIiwgInNtaWMiLCBvciAiYnQiLiAgSWYgeW91IGxlYXZlIGl0IGJsYW5rLCBpdAorZGVmYXVsdHMgdG8gImtjcyIuCisKK0lmIHlvdSBzcGVjaWZ5IHNpX2FkZHJzIGFzIG5vbi16ZXJvIGZvciBhbiBpbnRlcmZhY2UsIHRoZSBkcml2ZXIgd2lsbAordXNlIHRoZSBtZW1vcnkgYWRkcmVzcyBnaXZlbiBhcyB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLiAgVGhpcworb3ZlcnJpZGVzIHNpX3BvcnRzLgorCitJZiB5b3Ugc3BlY2lmeSBzaV9wb3J0cyBhcyBub24temVybyBmb3IgYW4gaW50ZXJmYWNlLCB0aGUgZHJpdmVyIHdpbGwKK3VzZSB0aGUgSS9PIHBvcnQgZ2l2ZW4gYXMgdGhlIGRldmljZSBhZGRyZXNzLgorCitJZiB5b3Ugc3BlY2lmeSBzaV9pcnFzIGFzIG5vbi16ZXJvIGZvciBhbiBpbnRlcmZhY2UsIHRoZSBkcml2ZXIgd2lsbAorYXR0ZW1wdCB0byB1c2UgdGhlIGdpdmVuIGludGVycnVwdCBmb3IgdGhlIGRldmljZS4KKworc2lfdHJ5ZGVmYXVsdHMgc2V0cyB3aGV0aGVyIHRoZSBzdGFuZGFyZCBJUE1JIGludGVyZmFjZSBhdCAweGNhMiBhbmQKK2FueSBpbnRlcmZhY2VzIHNwZWNpZmllZCBieSBBQ1BFIGFyZSB0cmllZC4gIEJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIKK3RyaWVzIGl0LCBzZXQgdGhpcyB2YWx1ZSB0byB6ZXJvIHRvIHR1cm4gdGhpcyBvZmYuCisKK1RoZSBuZXh0IHRocmVlIHBhcmFtZXRlcnMgaGF2ZSB0byBkbyB3aXRoIHJlZ2lzdGVyIGxheW91dC4gIFRoZQorcmVnaXN0ZXJzIHVzZWQgYnkgdGhlIGludGVyZmFjZXMgbWF5IG5vdCBhcHBlYXIgYXQgc3VjY2Vzc2l2ZQorbG9jYXRpb25zIGFuZCB0aGV5IG1heSBub3QgYmUgaW4gOC1iaXQgcmVnaXN0ZXJzLiAgVGhlc2UgcGFyYW1ldGVycworYWxsb3cgdGhlIGxheW91dCBvZiB0aGUgZGF0YSBpbiB0aGUgcmVnaXN0ZXJzIHRvIGJlIG1vcmUgcHJlY2lzZWx5CitzcGVjaWZpZWQuCisKK1RoZSByZWdzcGFjaW5ncyBwYXJhbWV0ZXIgZ2l2ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gc3VjY2Vzc2l2ZQorcmVnaXN0ZXIgc3RhcnQgYWRkcmVzc2VzLiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgcmVnc3BhY2luZyBpcyBzZXQgdG8gNAorYW5kIHRoZSBzdGFydCBhZGRyZXNzIGlzIDB4Y2EyLCB0aGVuIHRoZSBhZGRyZXNzIGZvciB0aGUgc2Vjb25kCityZWdpc3RlciB3b3VsZCBiZSAweGNhNi4gIFRoaXMgZGVmYXVsdHMgdG8gMS4KKworVGhlIHJlZ3NpemVzIHBhcmFtZXRlciBnaXZlcyB0aGUgc2l6ZSBvZiBhIHJlZ2lzdGVyLCBpbiBieXRlcy4gIFRoZQorZGF0YSB1c2VkIGJ5IElQTUkgaXMgOC1iaXRzIHdpZGUsIGJ1dCBpdCBtYXkgYmUgaW5zaWRlIGEgbGFyZ2VyCityZWdpc3Rlci4gIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgcmVhZCBhbmQgd3JpdGUgdHlwZSB0byBzcGVjaWZpZWQuCitJdCBtYXkgYmUgMSwgMiwgNCwgb3IgOC4gIFRoZSBkZWZhdWx0IGlzIDEuCisKK1NpbmNlIHRoZSByZWdpc3RlciBzaXplIG1heSBiZSBsYXJnZXIgdGhhbiAzMiBiaXRzLCB0aGUgSVBNSSBkYXRhIG1heSBub3QKK2JlIGluIHRoZSBsb3dlciA4IGJpdHMuICBUaGUgcmVnc2hpZnRzIHBhcmFtZXRlciBnaXZlIHRoZSBhbW91bnQgdG8gc2hpZnQKK3RoZSBkYXRhIHRvIGdldCB0byB0aGUgYWN0dWFsIElQTUkgZGF0YS4KKworVGhlIHNsYXZlX2FkZHJzIHNwZWNpZmllcyB0aGUgSVBNSSBhZGRyZXNzIG9mIHRoZSBsb2NhbCBCTUMuICBUaGlzIGlzCit1c3VhbGx5IDB4MjAgYW5kIHRoZSBkcml2ZXIgZGVmYXVsdHMgdG8gdGhhdCwgYnV0IGluIGNhc2UgaXQncyBub3QsIGl0CitjYW4gYmUgc3BlY2lmaWVkIHdoZW4gdGhlIGRyaXZlciBzdGFydHMgdXAuCisKK1doZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUgYWRkcmVzc2VzIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlCitrZXJuZWwgY29tbWFuZCBsaW5lIGFzOgorCisgIGlwbWlfc2kudHlwZT08dHlwZTE+LDx0eXBlMj4uLi4KKyAgICAgICBpcG1pX3NpLnBvcnRzPTxwb3J0MT4sPHBvcnQyPi4uLiBpcG1pX3NpLmFkZHJzPTxhZGRyMT4sPGFkZHIyPi4uLgorICAgICAgIGlwbWlfc2kuaXJxcz08aXJxMT4sPGlycTI+Li4uIGlwbWlfc2kudHJ5ZGVmYXVsdHM9WzB8MV0KKyAgICAgICBpcG1pX3NpLnJlZ3NwYWNpbmdzPTxzcDE+LDxzcDI+LC4uLgorICAgICAgIGlwbWlfc2kucmVnc2l6ZXM9PHNpemUxPiw8c2l6ZTI+LC4uLgorICAgICAgIGlwbWlfc2kucmVnc2hpZnRzPTxzaGlmdDE+LDxzaGlmdDI+LC4uLgorICAgICAgIGlwbWlfc2kuc2xhdmVfYWRkcnM9PGFkZHIxPiw8YWRkcjI+LC4uLgorCitJdCB3b3JrcyB0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgb2YgdGhlIHNhbWUgbmFtZXMuCisKK0J5IGRlZmF1bHQsIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCBhbnkgZGV2aWNlIHNwZWNpZmllZCBieQorQUNQSSwgYW5kIGlmIG5vbmUgb2YgdGhvc2UgdGhlbiBhIEtDUyBkZXZpY2UgYXQgdGhlIHNwZWMtc3BlY2lmaWVkCisweGNhMi4gIElmIHlvdSB3YW50IHRvIHR1cm4gdGhpcyBvZmYsIHNldCB0aGUgInRyeWRlZmF1bHRzIiBvcHRpb24gdG8KK2ZhbHNlLgorCitJZiB5b3UgaGF2ZSBoaWdoLXJlcyB0aW1lcnMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwKK3VzZSB0aGVtIHRvIHByb3ZpZGUgbXVjaCBiZXR0ZXIgcGVyZm9ybWFuY2UuICBOb3RlIHRoYXQgaWYgeW91IGRvIG5vdAoraGF2ZSBoaWdoLXJlcyB0aW1lcnMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGFuZCB5b3UgZG9uJ3QgaGF2ZQoraW50ZXJydXB0cyBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgcnVuIFZFUlkgc2xvd2x5LiAgRG9uJ3QgYmxhbWUgbWUsCit0aGVzZSBpbnRlcmZhY2VzIHN1Y2suCisKKworVGhlIFNNQnVzIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgU01CdXMgZHJpdmVyIGFsbG93cyB1cCB0byA0IFNNQnVzIGRldmljZXMgdG8gYmUgY29uZmlndXJlZCBpbiB0aGUKK3N5c3RlbS4gIEJ5IGRlZmF1bHQsIHRoZSBkcml2ZXIgd2lsbCByZWdpc3RlciBhbnkgU01CdXMgaW50ZXJmYWNlcyBpdCBmaW5kcworaW4gdGhlIEkyQyBhZGRyZXNzIHJhbmdlIG9mIDB4MjAgdG8gMHg0ZiBvbiBhbnkgYWRhcHRlci4gIFlvdSBjYW4gY2hhbmdlIHRoaXMKK2F0IG1vZHVsZSBsb2FkIHRpbWUgKGZvciBhIG1vZHVsZSkgd2l0aDoKKworICBtb2Rwcm9iZSBpcG1pX3NtYi5vCisJYWRkcj08YWRhcHRlcjE+LDxpMmNhZGRyMT5bLDxhZGFwdGVyMj4sPGkyY2FkZHIyPlssLi4uXV0KKwlkYmc9PGZsYWdzMT4sPGZsYWdzMj4uLi4KKwlbZGVmYXVsdHByb2JlPTBdIFtkYmdfcHJvYmU9MV0KKworVGhlIGFkZHJlc3NlcyBhcmUgc3BlY2lmaWVkIGluIHBhaXJzLCB0aGUgZmlyc3QgaXMgdGhlIGFkYXB0ZXIgSUQgYW5kIHRoZQorc2Vjb25kIGlzIHRoZSBJMkMgYWRkcmVzcyBvbiB0aGF0IGFkYXB0ZXIuCisKK1RoZSBkZWJ1ZyBmbGFncyBhcmUgYml0IGZsYWdzIGZvciBlYWNoIEJNQyBmb3VuZCwgdGhleSBhcmU6CitJUE1JIG1lc3NhZ2VzOiAxLCBkcml2ZXIgc3RhdGU6IDIsIHRpbWluZzogNCwgSTJDIHByb2JlOiA4CisKK1NldHRpbmcgc21iX2RlZmF1bHRwcm9iZSB0byB6ZXJvIGRpc2FibGVkIHRoZSBkZWZhdWx0IHByb2Jpbmcgb2YgU01CdXMKK2ludGVyZmFjZXMgYXQgYWRkcmVzcyByYW5nZSAweDIwIHRvIDB4NGYuICBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUKK0JNQ3Mgc3BlY2lmaWVkIG9uIHRoZSBzbWJfYWRkciBsaW5lIHdpbGwgYmUgZGV0ZWN0ZWQuCisKK1NldHRpbmcgc21iX2RiZ19wcm9iZSB0byAxIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBvZiB0aGUgcHJvYmluZyBhbmQKK2RldGVjdGlvbiBwcm9jZXNzIGZvciBCTUNzIG9uIHRoZSBTTUJ1c3Nlcy4KKworRGlzY292ZXJpbmcgdGhlIElQTUkgY29tcGlsYW50IEJNQyBvbiB0aGUgU01CdXMgY2FuIGNhdXNlIGRldmljZXMKK29uIHRoZSBJMkMgYnVzIHRvIGZhaWwuIFRoZSBTTUJ1cyBkcml2ZXIgd3JpdGVzIGEgIkdldCBEZXZpY2UgSUQiIElQTUkKK21lc3NhZ2UgYXMgYSBibG9jayB3cml0ZSB0byB0aGUgSTJDIGJ1cyBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuCitUaGlzIGFjdGlvbiBjYW4gYmUgZGV0cmltZW50YWwgdG8gc29tZSBJMkMgZGV2aWNlcy4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkCit0aGF0IHRoZSBrbm93biBJMmMgYWRkcmVzcyBiZSBnaXZlbiB0byB0aGUgU01CdXMgZHJpdmVyIGluIHRoZSBzbWJfYWRkcgorcGFyYW1ldGVyLiBUaGUgZGVmYXVsdCBhZHJyZXNzIHJhbmdlIHdpbGwgbm90IGJlIHVzZWQgd2hlbiBhIHNtYl9hZGRyCitwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuCisKK1doZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUgYWRkcmVzc2VzIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlCitrZXJuZWwgY29tbWFuZCBsaW5lIGFzOgorCisgIGlwbWJfc21iLmFkZHI9PGFkYXB0ZXIxPiw8aTJjYWRkcjE+Wyw8YWRhcHRlcjI+LDxpMmNhZGRyMj5bLC4uLl1dCisJaXBtaV9zbWIuZGJnPTxmbGFnczE+LDxmbGFnczI+Li4uCisJaXBtaV9zbWIuZGVmYXVsdHByb2JlPTAgaXBtaV9zbWIuZGJnX3Byb2JlPTEKKworVGhlc2UgYXJlIHRoZSBzYW1lIG9wdGlvbnMgYXMgb24gdGhlIG1vZHVsZSBjb21tYW5kIGxpbmUuCisKK05vdGUgdGhhdCB5b3UgbWlnaHQgbmVlZCBzb21lIEkyQyBjaGFuZ2VzIGlmIENPTkZJR19JUE1JX1BBTklDX0VWRU5UCitpcyBlbmFibGVkIGFsb25nIHdpdGggdGhpcywgc28gdGhlIEkyQyBkcml2ZXIga25vd3MgdG8gcnVuIHRvCitjb21wbGV0aW9uIGR1cmluZyBzZW5kaW5nIGEgcGFuaWMgZXZlbnQuCisKKworT3RoZXIgUGllY2VzCistLS0tLS0tLS0tLS0KKworV2F0Y2hkb2cKKy0tLS0tLS0tCisKK0Egd2F0Y2hkb2cgdGltZXIgaXMgcHJvdmlkZWQgdGhhdCBpbXBsZW1lbnRzIHRoZSBMaW51eC1zdGFuZGFyZAord2F0Y2hkb2cgdGltZXIgaW50ZXJmYWNlLiAgSXQgaGFzIHRocmVlIG1vZHVsZSBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlCit1c2VkIHRvIGNvbnRyb2wgaXQ6CisKKyAgbW9kcHJvYmUgaXBtaV93YXRjaGRvZyB0aW1lb3V0PTx0PiBwcmV0aW1lb3V0PTx0PiBhY3Rpb249PGFjdGlvbiB0eXBlPgorICAgICAgcHJlYWN0aW9uPTxwcmVhY3Rpb24gdHlwZT4gcHJlb3A9PHByZW9wIHR5cGU+IHN0YXJ0X25vdz14CisgICAgICBub3dheW91dD14CisKK1RoZSB0aW1lb3V0IGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB0aGUgYWN0aW9uLCBhbmQgdGhlIHByZXRpbWVvdXQKK2lzIHRoZSBhbW91bnQgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIHJlc2V0IHRoYXQgdGhlIHByZS10aW1lb3V0IHBhbmljIHdpbGwKK29jY3VyIChpZiBwcmV0aW1lb3V0IGlzIHplcm8sIHRoZW4gcHJldGltZW91dCB3aWxsIG5vdCBiZSBlbmFibGVkKS4gIE5vdGUKK3RoYXQgdGhlIHByZXRpbWVvdXQgaXMgdGhlIHRpbWUgYmVmb3JlIHRoZSBmaW5hbCB0aW1lb3V0LiAgU28gaWYgdGhlCit0aW1lb3V0IGlzIDUwIHNlY29uZHMgYW5kIHRoZSBwcmV0aW1lb3V0IGlzIDEwIHNlY29uZHMsIHRoZW4gdGhlIHByZXRpbWVvdXQKK3dpbGwgb2NjdXIgaW4gNDAgc2Vjb25kICgxMCBzZWNvbmRzIGJlZm9yZSB0aGUgdGltZW91dCkuCisKK1RoZSBhY3Rpb24gbWF5IGJlICJyZXNldCIsICJwb3dlcl9jeWNsZSIsIG9yICJwb3dlcl9vZmYiLCBhbmQKK3NwZWNpZmllcyB3aGF0IHRvIGRvIHdoZW4gdGhlIHRpbWVyIHRpbWVzIG91dCwgYW5kIGRlZmF1bHRzIHRvCisicmVzZXQiLgorCitUaGUgcHJlYWN0aW9uIG1heSBiZSAicHJlX3NtaSIgZm9yIGFuIGluZGljYXRpb24gdGhyb3VnaCB0aGUgU01JCitpbnRlcmZhY2UsICJwcmVfaW50IiBmb3IgYW4gaW5kaWNhdGlvbiB0aHJvdWdoIHRoZSBTTUkgd2l0aCBhbgoraW50ZXJydXB0cywgYW5kICJwcmVfbm1pIiBmb3IgYSBOTUkgb24gYSBwcmVhY3Rpb24uICBUaGlzIGlzIGhvdwordGhlIGRyaXZlciBpcyBpbmZvcm1lZCBvZiB0aGUgcHJldGltZW91dC4KKworVGhlIHByZW9wIG1heSBiZSBzZXQgdG8gInByZW9wX25vbmUiIGZvciBubyBvcGVyYXRpb24gb24gYSBwcmV0aW1lb3V0LAorInByZW9wX3BhbmljIiB0byBzZXQgdGhlIHByZW9wZXJhdGlvbiB0byBwYW5pYywgb3IgInByZW9wX2dpdmVfZGF0YSIKK3RvIHByb3ZpZGUgZGF0YSB0byByZWFkIGZyb20gdGhlIHdhdGNoZG9nIGRldmljZSB3aGVuIHRoZSBwcmV0aW1lb3V0CitvY2N1cnMuICBBICJwcmVfbm1pIiBzZXR0aW5nIENBTk5PVCBiZSB1c2VkIHdpdGggInByZW9wX2dpdmVfZGF0YSIKK2JlY2F1c2UgeW91IGNhbid0IGRvIGRhdGEgb3BlcmF0aW9ucyBmcm9tIGFuIE5NSS4KKworV2hlbiBwcmVvcCBpcyBzZXQgdG8gInByZW9wX2dpdmVfZGF0YSIsIG9uZSBieXRlIGNvbWVzIHJlYWR5IHRvIHJlYWQKK29uIHRoZSBkZXZpY2Ugd2hlbiB0aGUgcHJldGltZW91dCBvY2N1cnMuICBTZWxlY3QgYW5kIGZhc3luYyB3b3JrIG9uCit0aGUgZGV2aWNlLCBhcyB3ZWxsLgorCitJZiBzdGFydF9ub3cgaXMgc2V0IHRvIDEsIHRoZSB3YXRjaGRvZyB0aW1lciB3aWxsIHN0YXJ0IHJ1bm5pbmcgYXMKK3Nvb24gYXMgdGhlIGRyaXZlciBpcyBsb2FkZWQuCisKK0lmIG5vd2F5b3V0IGlzIHNldCB0byAxLCB0aGUgd2F0Y2hkb2cgdGltZXIgd2lsbCBub3Qgc3RvcCB3aGVuIHRoZQord2F0Y2hkb2cgZGV2aWNlIGlzIGNsb3NlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIG5vd2F5b3V0IGlzIHRydWUKK2lmIHRoZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgb3B0aW9uIGlzIGVuYWJsZWQsIG9yIGZhbHNlIGlmIG5vdC4KKworV2hlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGlzIGF2YWlsYWJsZQorZm9yIGNvbmZpZ3VyaW5nIHRoZSB3YXRjaGRvZzoKKworICBpcG1pX3dhdGNoZG9nLnRpbWVvdXQ9PHQ+IGlwbWlfd2F0Y2hkb2cucHJldGltZW91dD08dD4KKwlpcG1pX3dhdGNoZG9nLmFjdGlvbj08YWN0aW9uIHR5cGU+CisJaXBtaV93YXRjaGRvZy5wcmVhY3Rpb249PHByZWFjdGlvbiB0eXBlPgorCWlwbWlfd2F0Y2hkb2cucHJlb3A9PHByZW9wIHR5cGU+CisJaXBtaV93YXRjaGRvZy5zdGFydF9ub3c9eAorCWlwbWlfd2F0Y2hkb2cubm93YXlvdXQ9eAorCitUaGUgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgb3B0aW9ucy4KKworVGhlIHdhdGNoZG9nIHdpbGwgcGFuaWMgYW5kIHN0YXJ0IGEgMTIwIHNlY29uZCByZXNldCB0aW1lb3V0IGlmIGl0CitnZXRzIGEgcHJlLWFjdGlvbi4gIER1cmluZyBhIHBhbmljIG9yIGEgcmVib290LCB0aGUgd2F0Y2hkb2cgd2lsbAorc3RhcnQgYSAxMjAgdGltZXIgaWYgaXQgaXMgcnVubmluZyB0byBtYWtlIHN1cmUgdGhlIHJlYm9vdCBvY2N1cnMuCisKK05vdGUgdGhhdCBpZiB5b3UgdXNlIHRoZSBOTUkgcHJlYWN0aW9uIGZvciB0aGUgd2F0Y2hkb2csIHlvdSBNVVNUCitOT1QgdXNlIG5taSB3YXRjaGRvZyBtb2RlIDEuICBJZiB5b3UgdXNlIHRoZSBOTUkgd2F0Y2hkb2csIHlvdQorbXVzdCB1c2UgbW9kZSAyLgorCitPbmNlIHlvdSBvcGVuIHRoZSB3YXRjaGRvZyB0aW1lciwgeW91IG11c3Qgd3JpdGUgYSAnVicgY2hhcmFjdGVyIHRvIHRoZQorZGV2aWNlIHRvIGNsb3NlIGl0LCBvciB0aGUgdGltZXIgd2lsbCBub3Qgc3RvcC4gIFRoaXMgaXMgYSBuZXcgc2VtYW50aWMKK2ZvciB0aGUgZHJpdmVyLCBidXQgbWFrZXMgaXQgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSB3YXRjaGRvZworZHJpdmVycyBpbiBMaW51eC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSVJRLWFmZmluaXR5LnR4dCBiL0RvY3VtZW50YXRpb24vSVJRLWFmZmluaXR5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhkN2RkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9JUlEtYWZmaW5pdHkudHh0CkBAIC0wLDAgKzEsMzcgQEAKKworU01QIElSUSBhZmZpbml0eSwgc3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKworCisvcHJvYy9pcnEvSVJRIy9zbXBfYWZmaW5pdHkgc3BlY2lmaWVzIHdoaWNoIHRhcmdldCBDUFVzIGFyZSBwZXJtaXR0ZWQKK2ZvciBhIGdpdmVuIElSUSBzb3VyY2UuIEl0J3MgYSBiaXRtYXNrIG9mIGFsbG93ZWQgQ1BVcy4gSXQncyBub3QgYWxsb3dlZAordG8gdHVybiBvZmYgYWxsIENQVXMsIGFuZCBpZiBhbiBJUlEgY29udHJvbGxlciBkb2VzIG5vdCBzdXBwb3J0IElSUQorYWZmaW5pdHkgdGhlbiB0aGUgdmFsdWUgd2lsbCBub3QgY2hhbmdlIGZyb20gdGhlIGRlZmF1bHQgMHhmZmZmZmZmZi4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHJlc3RyaWN0aW5nIElSUTQ0IChldGgxKSB0byBDUFUwLTMgdGhlbiByZXN0cmljdGluZwordGhlIElSUSB0byBDUFU0LTcgKHRoaXMgaXMgYW4gOC1DUFUgU01QIGJveCk6CisKK1tyb290QG1vb24gNDRdIyBjYXQgc21wX2FmZmluaXR5CitmZmZmZmZmZgorW3Jvb3RAbW9vbiA0NF0jIGVjaG8gMGYgPiBzbXBfYWZmaW5pdHkKK1tyb290QG1vb24gNDRdIyBjYXQgc21wX2FmZmluaXR5CiswMDAwMDAwZgorW3Jvb3RAbW9vbiA0NF0jIHBpbmcgLWYgaAorUElORyBoZWxsICgxOTUuNC43LjMpOiA1NiBkYXRhIGJ5dGVzCisuLi4KKy0tLSBoZWxsIHBpbmcgc3RhdGlzdGljcyAtLS0KKzYwMjkgcGFja2V0cyB0cmFuc21pdHRlZCwgNjAyNyBwYWNrZXRzIHJlY2VpdmVkLCAwJSBwYWNrZXQgbG9zcworcm91bmQtdHJpcCBtaW4vYXZnL21heCA9IDAuMS8wLjEvMC40IG1zCitbcm9vdEBtb29uIDQ0XSMgY2F0IC9wcm9jL2ludGVycnVwdHMgfCBncmVwIDQ0OgorIDQ0OiAgICAgICAgICAwICAgICAgIDE3ODUgICAgICAgMTc4NSAgICAgICAxNzgzICAgICAgIDE3ODMgICAgICAgICAgMQorMSAgICAgICAgICAwICAgSU8tQVBJQy1sZXZlbCAgZXRoMQorW3Jvb3RAbW9vbiA0NF0jIGVjaG8gZjAgPiBzbXBfYWZmaW5pdHkKK1tyb290QG1vb24gNDRdIyBwaW5nIC1mIGgKK1BJTkcgaGVsbCAoMTk1LjQuNy4zKTogNTYgZGF0YSBieXRlcworLi4KKy0tLSBoZWxsIHBpbmcgc3RhdGlzdGljcyAtLS0KKzI3NzkgcGFja2V0cyB0cmFuc21pdHRlZCwgMjc3NyBwYWNrZXRzIHJlY2VpdmVkLCAwJSBwYWNrZXQgbG9zcworcm91bmQtdHJpcCBtaW4vYXZnL21heCA9IDAuMS8wLjUvNTg1LjQgbXMKK1tyb290QG1vb24gNDRdIyBjYXQgL3Byb2MvaW50ZXJydXB0cyB8IGdyZXAgNDQ6CisgNDQ6ICAgICAgIDEwNjggICAgICAgMTc4NSAgICAgICAxNzg1ICAgICAgIDE3ODQgICAgICAgMTc4NCAgICAgICAxMDY5ICAgICAgIDEwNzAgICAgICAgMTA2OSAgIElPLUFQSUMtbGV2ZWwgIGV0aDEKK1tyb290QG1vb24gNDRdIworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMzJlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vTVNJLUhPV1RPLnR4dApAQCAtMCwwICsxLDUwMyBAQAorCQlUaGUgTVNJIERyaXZlciBHdWlkZSBIT1dUTworCVRvbSBMIE5ndXllbiB0b20ubC5uZ3V5ZW5AaW50ZWwuY29tCisJCQkxMC8wMy8yMDAzCisJUmV2aXNlZCBGZWIgMTIsIDIwMDQgYnkgTWFydGluZSBTaWxiZXJtYW5uCisJCWVtYWlsOiBNYXJ0aW5lLlNpbGJlcm1hbm5AaHAuY29tCisJUmV2aXNlZCBKdW4gMjUsIDIwMDQgYnkgVG9tIEwgTmd1eWVuCisKKzEuIEFib3V0IHRoaXMgZ3VpZGUKKworVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSksCit0aGUgYWR2YW50YWdlcyBvZiB1c2luZyBNU0kgb3ZlciB0cmFkaXRpb25hbCBpbnRlcnJ1cHQgbWVjaGFuaXNtcywKK2FuZCBob3cgdG8gZW5hYmxlIHlvdXIgZHJpdmVyIHRvIHVzZSBNU0kgb3IgTVNJLVguIEFsc28gaW5jbHVkZWQgaXMKK2EgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMuCisKKzIuIENvcHlyaWdodCAyMDAzIEludGVsIENvcnBvcmF0aW9uCisKKzMuIFdoYXQgaXMgTVNJL01TSS1YPworCitNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCAoTVNJKSwgYXMgZGVzY3JpYmVkIGluIHRoZSBQQ0kgTG9jYWwgQnVzCitTcGVjaWZpY2F0aW9uIFJldmlzaW9uIDIuMyBvciBsYXRlc3QsIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUsIGFuZCBhCityZXF1aXJlZCBmZWF0dXJlIGZvciBQQ0kgRXhwcmVzcyBkZXZpY2VzLiBNU0kgZW5hYmxlcyBhIGRldmljZSBmdW5jdGlvbgordG8gcmVxdWVzdCBzZXJ2aWNlIGJ5IHNlbmRpbmcgYW4gSW5ib3VuZCBNZW1vcnkgV3JpdGUgb24gaXRzIFBDSSBidXMgdG8KK3RoZSBGU0IgYXMgYSBNZXNzYWdlIFNpZ25hbCBJbnRlcnJ1cHQgdHJhbnNhY3Rpb24uIEJlY2F1c2UgTVNJIGlzCitnZW5lcmF0ZWQgaW4gdGhlIGZvcm0gb2YgYSBNZW1vcnkgV3JpdGUsIGFsbCB0cmFuc2FjdGlvbiBjb25kaXRpb25zLAorc3VjaCBhcyBhIFJldHJ5LCBNYXN0ZXItQWJvcnQsIFRhcmdldC1BYm9ydCBvciBub3JtYWwgY29tcGxldGlvbiwgYXJlCitzdXBwb3J0ZWQuCisKK0EgUENJIGRldmljZSB0aGF0IHN1cHBvcnRzIE1TSSBtdXN0IGFsc28gc3VwcG9ydCBwaW4gSVJRIGFzc2VydGlvbgoraW50ZXJydXB0IG1lY2hhbmlzbSB0byBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHN5c3RlbXMgdGhhdAorZG8gbm90IHN1cHBvcnQgTVNJLiBJbiBTeXN0ZW1zLCB3aGljaCBzdXBwb3J0IE1TSSwgdGhlIGJ1cyBkcml2ZXIgaXMKK3Jlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIG1lc3NhZ2UgYWRkcmVzcyBhbmQgbWVzc2FnZSBkYXRhIG9mCit0aGUgZGV2aWNlIGZ1bmN0aW9uJ3MgTVNJL01TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIGR1cmluZyBkZXZpY2UKK2luaXRpYWwgY29uZmlndXJhdGlvbi4KKworQW4gTVNJIGNhcGFibGUgZGV2aWNlIGZ1bmN0aW9uIGluZGljYXRlcyBNU0kgc3VwcG9ydCBieSBpbXBsZW1lbnRpbmcKK3RoZSBNU0kvTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgaW4gaXRzIFBDSSBjYXBhYmlsaXR5IGxpc3QuIFRoZQorZGV2aWNlIGZ1bmN0aW9uIG1heSBpbXBsZW1lbnQgYm90aCB0aGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlIGFuZAordGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlOyBob3dldmVyLCB0aGUgYnVzIGRyaXZlciBzaG91bGQgbm90CitlbmFibGUgYm90aC4KKworVGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBjb250YWlucyBNZXNzYWdlIENvbnRyb2wgcmVnaXN0ZXIsCitNZXNzYWdlIEFkZHJlc3MgcmVnaXN0ZXIgYW5kIE1lc3NhZ2UgRGF0YSByZWdpc3Rlci4gVGhlc2UgcmVnaXN0ZXJzCitwcm92aWRlIHRoZSBidXMgZHJpdmVyIGNvbnRyb2wgb3ZlciBNU0kuIFRoZSBNZXNzYWdlIENvbnRyb2wgcmVnaXN0ZXIKK2luZGljYXRlcyB0aGUgTVNJIGNhcGFiaWxpdHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuIFRoZSBNZXNzYWdlCitBZGRyZXNzIHJlZ2lzdGVyIHNwZWNpZmllcyB0aGUgdGFyZ2V0IGFkZHJlc3MgYW5kIHRoZSBNZXNzYWdlIERhdGEKK3JlZ2lzdGVyIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBtZXNzYWdlLiBUbyByZXF1ZXN0CitzZXJ2aWNlLCB0aGUgZGV2aWNlIGZ1bmN0aW9uIHdyaXRlcyB0aGUgY29udGVudCBvZiB0aGUgTWVzc2FnZSBEYXRhCityZWdpc3RlciB0byB0aGUgdGFyZ2V0IGFkZHJlc3MuIFRoZSBkZXZpY2UgYW5kIGl0cyBzb2Z0d2FyZSBkcml2ZXIKK2FyZSBwcm9oaWJpdGVkIGZyb20gd3JpdGluZyB0byB0aGVzZSByZWdpc3RlcnMuCisKK1RoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gTVNJLiBJdAordXNlcyBhbiBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuIFRoZXJlIGFyZQorc29tZSBrZXkgYWR2YW50YWdlcyB0byBpbXBsZW1lbnRpbmcgdGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlCitvdmVyIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgYXMgZGVzY3JpYmVkIGJlbG93LgorCisJLSBTdXBwb3J0IGEgbGFyZ2VyIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvcnMgcGVyIGZ1bmN0aW9uLgorCisJLSBQcm92aWRlIHRoZSBhYmlsaXR5IGZvciBzeXN0ZW0gc29mdHdhcmUgdG8gY29uZmlndXJlCisJZWFjaCB2ZWN0b3Igd2l0aCBhbiBpbmRlcGVuZGVudCBtZXNzYWdlIGFkZHJlc3MgYW5kIG1lc3NhZ2UKKwlkYXRhLCBzcGVjaWZpZWQgYnkgYSB0YWJsZSB0aGF0IHJlc2lkZXMgaW4gTWVtb3J5IFNwYWNlLgorCisgICAgICAgIC0gTVNJIGFuZCBNU0ktWCBib3RoIHN1cHBvcnQgcGVyLXZlY3RvciBtYXNraW5nLiBQZXItdmVjdG9yCisJbWFza2luZyBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gb2YgTVNJIGJ1dCBhIHJlcXVpcmVkCisJZmVhdHVyZSBmb3IgTVNJLVguIFBlci12ZWN0b3IgbWFza2luZyBwcm92aWRlcyB0aGUga2VybmVsCisJdGhlIGFiaWxpdHkgdG8gbWFzay91bm1hc2sgTVNJIHdoZW4gc2VydmljaW5nIGl0cyBzb2Z0d2FyZQorCWludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmcgaGFuZGxlci4gSWYgcGVyLXZlY3RvciBtYXNraW5nIGlzCisJbm90IHN1cHBvcnRlZCwgdGhlbiB0aGUgZGV2aWNlIGRyaXZlciBzaG91bGQgcHJvdmlkZSB0aGUKKwloYXJkd2FyZS9zb2Z0d2FyZSBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGRldmljZQorCWdlbmVyYXRlcyBNU0kgd2hlbiB0aGUgZHJpdmVyIHdhbnRzIGl0IHRvIGRvIHNvLgorCis0LiBXaHkgdXNlIE1TST8KKworQXMgYSBiZW5lZml0IHRoZSBzaW1wbGlmaWNhdGlvbiBvZiBib2FyZCBkZXNpZ24sIE1TSSBhbGxvd3MgYm9hcmQKK2Rlc2lnbmVycyB0byByZW1vdmUgb3V0IG9mIGJhbmQgaW50ZXJydXB0IHJvdXRpbmcuIE1TSSBpcyBhbm90aGVyCitzdGVwIHRvd2FyZHMgYSBsZWdhY3ktZnJlZSBlbnZpcm9ubWVudC4KKworRHVlIHRvIGluY3JlYXNpbmcgcHJlc3N1cmUgb24gY2hpcHNldCBhbmQgcHJvY2Vzc29yIHBhY2thZ2VzIHRvCityZWR1Y2UgcGluIGNvdW50LCB0aGUgbmVlZCBmb3IgaW50ZXJydXB0IHBpbnMgaXMgZXhwZWN0ZWQgdG8KK2RpbWluaXNoIG92ZXIgdGltZS4gRGV2aWNlcywgZHVlIHRvIHBpbiBjb25zdHJhaW50cywgbWF5IGltcGxlbWVudAorbWVzc2FnZXMgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UuCisKK1BDSSBFeHByZXNzIGVuZHBvaW50cyB1c2VzIElOVHggZW11bGF0aW9uIChpbi1iYW5kIG1lc3NhZ2VzKSBpbnN0ZWFkCitvZiBJUlEgcGluIGFzc2VydGlvbi4gVXNpbmcgSU5UeCBlbXVsYXRpb24gcmVxdWlyZXMgaW50ZXJydXB0CitzaGFyaW5nIGFtb25nIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUgKFBDSSBicmlkZ2UpIHdoaWxlCitNU0kgaXMgdW5pcXVlIChub24tc2hhcmVkKSBhbmQgZG9lcyBub3QgcmVxdWlyZSBCSU9TIGNvbmZpZ3VyYXRpb24KK3N1cHBvcnQuIEFzIGEgcmVzdWx0LCB0aGUgUENJIEV4cHJlc3MgdGVjaG5vbG9neSByZXF1aXJlcyBNU0kKK3N1cHBvcnQgZm9yIGJldHRlciBpbnRlcnJ1cHQgcGVyZm9ybWFuY2UuCisKK1VzaW5nIE1TSSBlbmFibGVzIHRoZSBkZXZpY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdHdvIG9yIG1vcmUKK3ZlY3RvcnMsIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkIHRvIHRhcmdldCBkaWZmZXJlbnQgQ1BVJ3MgdG8KK2luY3JlYXNlIHNjYWxhYmlsaXR5LgorCis1LiBDb25maWd1cmluZyBhIGRyaXZlciB0byB1c2UgTVNJL01TSS1YCisKK0J5IGRlZmF1bHQsIHRoZSBrZXJuZWwgd2lsbCBub3QgZW5hYmxlIE1TSS9NU0ktWCBvbiBhbGwgZGV2aWNlcyB0aGF0CitzdXBwb3J0IHRoaXMgY2FwYWJpbGl0eS4gVGhlIENPTkZJR19QQ0lfTVNJIGtlcm5lbCBvcHRpb24KK211c3QgYmUgc2VsZWN0ZWQgdG8gZW5hYmxlIE1TSS9NU0ktWCBzdXBwb3J0LgorCis1LjEgSW5jbHVkaW5nIE1TSS9NU0ktWCBzdXBwb3J0IGludG8gdGhlIGtlcm5lbAorCitUbyBhbGxvdyBNU0kvTVNJLVggY2FwYWJsZSBkZXZpY2UgZHJpdmVycyB0byBzZWxlY3RpdmVseSBlbmFibGUKK01TSS9NU0ktWCAodXNpbmcgcGNpX2VuYWJsZV9tc2koKS9wY2lfZW5hYmxlX21zaXgoKSBhcyBkZXNjcmliZWQKK2JlbG93KSwgdGhlIFZFQ1RPUiBiYXNlZCBzY2hlbWUgbmVlZHMgdG8gYmUgZW5hYmxlZCBieSBzZXR0aW5nCitDT05GSUdfUENJX01TSSBkdXJpbmcga2VybmVsIGNvbmZpZy4KKworU2luY2UgdGhlIHRhcmdldCBvZiB0aGUgaW5ib3VuZCBtZXNzYWdlIGlzIHRoZSBsb2NhbCBBUElDLCBwcm92aWRpbmcKK0NPTkZJR19YODZfTE9DQUxfQVBJQyBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCBhcyBDT05GSUdfUENJX01TSS4KKworNS4yIENvbmZpZ3VyaW5nIGZvciBNU0kgc3VwcG9ydAorCitEdWUgdG8gdGhlIG5vbi1jb250aWd1b3VzIGZhc2hpb24gaW4gdmVjdG9yIGFzc2lnbm1lbnQgb2YgdGhlCitleGlzdGluZyBMaW51eCBrZXJuZWwsIHRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlCittZXNzYWdlcyByZWdhcmRsZXNzIG9mIGEgZGV2aWNlIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2Ygc3VwcG9ydGluZworbW9yZSB0aGFuIG9uZSB2ZWN0b3IuIFRvIGVuYWJsZSBNU0kgb24gYSBkZXZpY2UgZnVuY3Rpb24ncyBNU0kKK2NhcGFiaWxpdHkgc3RydWN0dXJlIHJlcXVpcmVzIGEgZGV2aWNlIGRyaXZlciB0byBjYWxsIHRoZSBmdW5jdGlvbgorcGNpX2VuYWJsZV9tc2koKSBleHBsaWNpdGx5LgorCis1LjIuMSBBUEkgcGNpX2VuYWJsZV9tc2kKKworaW50IHBjaV9lbmFibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCisKK1dpdGggdGhpcyBuZXcgQVBJLCBhbnkgZXhpc3RpbmcgZGV2aWNlIGRyaXZlciwgd2hpY2ggbGlrZSB0byBoYXZlCitNU0kgZW5hYmxlZCBvbiBpdHMgZGV2aWNlIGZ1bmN0aW9uLCBtdXN0IGNhbGwgdGhpcyBBUEkgdG8gZW5hYmxlIE1TSQorQSBzdWNjZXNzZnVsIGNhbGwgd2lsbCBpbml0aWFsaXplIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKK3dpdGggT05FIHZlY3RvciwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgZGV2aWNlIGZ1bmN0aW9uIGlzCitjYXBhYmxlIG9mIHN1cHBvcnRpbmcgbXVsdGlwbGUgbWVzc2FnZXMuIFRoaXMgdmVjdG9yIHJlcGxhY2VzIHRoZQorcHJlLWFzc2lnbmVkIGRldi0+aXJxIHdpdGggYSBuZXcgTVNJIHZlY3Rvci4gVG8gYXZvaWQgdGhlIGNvbmZsaWN0CitvZiBuZXcgYXNzaWduZWQgdmVjdG9yIHdpdGggZXhpc3RpbmcgcHJlLWFzc2lnbmVkIHZlY3RvciByZXF1aXJlcworYSBkZXZpY2UgZHJpdmVyIHRvIGNhbGwgdGhpcyBBUEkgYmVmb3JlIGNhbGxpbmcgcmVxdWVzdF9pcnEoKS4KKworNS4yLjIgQVBJIHBjaV9kaXNhYmxlX21zaQorCit2b2lkIHBjaV9kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorCitUaGlzIEFQSSBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpKCkKK3doZW4gYSBkZXZpY2UgZHJpdmVyIGlzIHVubG9hZGluZy4gVGhpcyBBUEkgcmVzdG9yZXMgZGV2LT5pcnEgd2l0aAordGhlIHByZS1hc3NpZ25lZCBJT0FQSUMgdmVjdG9yIGFuZCBzd2l0Y2hlcyBhIGRldmljZSdzIGludGVycnVwdAorbW9kZSB0byBQQ0kgcGluLWlycSBhc3NlcnRpb24vSU5UeCBlbXVsYXRpb24gbW9kZS4KKworTm90ZSB0aGF0IGEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiBNU0kgdmVjdG9yCitpdCBoYXMgZG9uZSByZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nIHRoaXMgQVBJLiBGYWlsdXJlIHRvIGRvCitzbyByZXN1bHRzIGEgQlVHX09OKCkgYW5kIGEgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSSBlbmFibGVkIGFuZAorbGVha3MgaXRzIHZlY3Rvci4KKworNS4yLjMgTVNJIG1vZGUgdnMuIGxlZ2FjeSBtb2RlIGRpYWdyYW0KKworVGhlIGJlbG93IGRpYWdyYW0gc2hvd3MgdGhlIGV2ZW50cywgd2hpY2ggc3dpdGNoZXMgdGhlIGludGVycnVwdAorbW9kZSBvbiB0aGUgTVNJLWNhcGFibGUgZGV2aWNlIGZ1bmN0aW9uIGJldHdlZW4gTVNJIG1vZGUgYW5kCitQSU4tSVJRIGFzc2VydGlvbiBtb2RlLgorCisJIC0tLS0tLS0tLS0tLSAgIHBjaV9lbmFibGVfbXNpIAkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfAkgICAgIHwgPD09PT09PT09PT09PT09PQl8IAkJCSB8CisJfCBNU0kgTU9ERSAgIHwJICAJICAgICAJfCBQSU4tSVJRIEFTU0VSVElPTiBNT0RFIHwKKwl8IAkgICAgIHwgPT09PT09PT09PT09PT09Pgl8CQkJIHwKKyAJIC0tLS0tLS0tLS0tLQlwY2lfZGlzYWJsZV9tc2kgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0ZpZ3VyZSAxLjAgTVNJIE1vZGUgdnMuIExlZ2FjeSBNb2RlCisKK0luIEZpZ3VyZSAxLjAsIGEgZGV2aWNlIG9wZXJhdGVzIGJ5IGRlZmF1bHQgaW4gbGVnYWN5IG1vZGUuIExlZ2FjeQoraW4gdGhpcyBjb250ZXh0IG1lYW5zIFBDSSBwaW4taXJxIGFzc2VydGlvbiBvciBQQ0ktRXhwcmVzcyBJTlR4CitlbXVsYXRpb24uIEEgc3VjY2Vzc2Z1bCBNU0kgcmVxdWVzdCAodXNpbmcgcGNpX2VuYWJsZV9tc2koKSkgc3dpdGNoZXMKK2EgZGV2aWNlJ3MgaW50ZXJydXB0IG1vZGUgdG8gTVNJIG1vZGUuIEEgcHJlLWFzc2lnbmVkIElPQVBJQyB2ZWN0b3IKK3N0b3JlZCBpbiBkZXYtPmlycSB3aWxsIGJlIHNhdmVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBhIG5ldworYXNzaWduZWQgTVNJIHZlY3RvciB3aWxsIHJlcGxhY2UgZGV2LT5pcnEuCisKK1RvIHJldHVybiBiYWNrIHRvIGl0cyBkZWZhdWx0IG1vZGUsIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwKK3BjaV9kaXNhYmxlX21zaSgpIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaSgpLiBOb3RlIHRoYXQgYQorZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiBNU0kgdmVjdG9yIGl0IGhhcyBkb25lCityZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaSgpLiBGYWlsdXJlIHRvIGRvIHNvCityZXN1bHRzIGEgQlVHX09OKCkgYW5kIGEgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSSBlbmFibGVkIGFuZAorbGVha3MgaXRzIHZlY3Rvci4gT3RoZXJ3aXNlLCB0aGUgUENJIHN1YnN5c3RlbSByZXN0b3JlcyBhIGRldmljZSdzCitkZXYtPmlycSB3aXRoIGEgcHJlLWFzc2lnbmVkIElPQVBJQyB2ZWN0b3IgYW5kIG1hcmtzIHJlbGVhc2VkCitNU0kgdmVjdG9yIGFzIHVudXNlZC4KKworT25jZSBiZWluZyBtYXJrZWQgYXMgdW51c2VkLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgUENJCitzdWJzeXN0ZW0gd2lsbCByZXNlcnZlIHRoaXMgTVNJIHZlY3RvciBmb3IgYSBkZXZpY2UuIERlcGVuZGluZyBvbgordGhlIGF2YWlsYWJpbGl0eSBvZiBjdXJyZW50IFBDSSB2ZWN0b3IgcmVzb3VyY2VzIGFuZCB0aGUgbnVtYmVyIG9mCitNU0kvTVNJLVggcmVxdWVzdHMgZnJvbSBvdGhlciBkcml2ZXJzLCB0aGlzIE1TSSBtYXkgYmUgcmUtYXNzaWduZWQuCisKK0ZvciB0aGUgY2FzZSB3aGVyZSB0aGUgUENJIHN1YnN5c3RlbSByZS1hc3NpZ25lZCB0aGlzIE1TSSB2ZWN0b3IKK2Fub3RoZXIgZHJpdmVyLCBhIHJlcXVlc3QgdG8gc3dpdGNoaW5nIGJhY2sgdG8gTVNJIG1vZGUgbWF5IHJlc3VsdAoraW4gYmVpbmcgYXNzaWduZWQgYSBkaWZmZXJlbnQgTVNJIHZlY3RvciBvciBhIGZhaWx1cmUgaWYgbm8gbW9yZQordmVjdG9ycyBhcmUgYXZhaWxhYmxlLgorCis1LjMgQ29uZmlndXJpbmcgZm9yIE1TSS1YIHN1cHBvcnQKKworRHVlIHRvIHRoZSBhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gc29mdHdhcmUgdG8gY29uZmlndXJlIGVhY2ggdmVjdG9yIG9mCit0aGUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aCBhbiBpbmRlcGVuZGVudCBtZXNzYWdlIGFkZHJlc3MKK2FuZCBtZXNzYWdlIGRhdGEsIHRoZSBub24tY29udGlndW91cyBmYXNoaW9uIGluIHZlY3RvciBhc3NpZ25tZW50IG9mCit0aGUgZXhpc3RpbmcgTGludXgga2VybmVsIGhhcyBubyBpbXBhY3Qgb24gc3VwcG9ydGluZyBtdWx0aXBsZQorbWVzc2FnZXMgb24gYW4gTVNJLVggY2FwYWJsZSBkZXZpY2UgZnVuY3Rpb25zLiBUbyBlbmFibGUgTVNJLVggb24KK2EgZGV2aWNlIGZ1bmN0aW9uJ3MgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgcmVxdWlyZXMgaXRzIGRldmljZQorZHJpdmVyIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHBjaV9lbmFibGVfbXNpeCgpIGV4cGxpY2l0bHkuCisKK1RoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaXgoKSwgb25jZSBpbnZva2VkLCBlbmFibGVzIGVpdGhlcgorYWxsIG9yIG5vdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhdmFpbGFiaWxpdHkgb2YgUENJIHZlY3RvcgorcmVzb3VyY2VzLiBJZiB0aGUgUENJIHZlY3RvciByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIG51bWJlcgorb2YgdmVjdG9ycyByZXF1ZXN0ZWQgYnkgYSBkZXZpY2UgZHJpdmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlCit0aGUgTVNJLVggdGFibGUgb2YgdGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIG9mIGEgZGV2aWNlIHdpdGgKK3JlcXVlc3RlZCBtZXNzYWdlcy4gVG8gZW1waGFzaXplIHRoaXMgcmVhc29uLCBmb3IgZXhhbXBsZSwgYSBkZXZpY2UKK21heSBiZSBjYXBhYmxlIGZvciBzdXBwb3J0aW5nIHRoZSBtYXhpbXVtIG9mIDMyIHZlY3RvcnMgd2hpbGUgaXRzCitzb2Z0d2FyZSBkcml2ZXIgdXN1YWxseSBtYXkgcmVxdWVzdCA0IHZlY3RvcnMuIEl0IGlzIHJlY29tbWVuZGVkCit0aGF0IHRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gb25jZSBkdXJpbmcgdGhlCitpbml0aWFsaXphdGlvbiBwaGFzZSBvZiB0aGUgZGV2aWNlIGRyaXZlci4KKworVW5saWtlIHRoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaSgpLCB0aGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2l4KCkKK2RvZXMgbm90IHJlcGxhY2UgdGhlIHByZS1hc3NpZ25lZCBJT0FQSUMgZGV2LT5pcnEgd2l0aCBhIG5ldyBNU0kKK3ZlY3RvciBiZWNhdXNlIHRoZSBQQ0kgc3Vic3lzdGVtIHdyaXRlcyB0aGUgMToxIHZlY3Rvci10by1lbnRyeSBtYXBwaW5nCitpbnRvIHRoZSBmaWVsZCB2ZWN0b3Igb2YgZWFjaCBlbGVtZW50IGNvbnRhaW5lZCBpbiBhIHNlY29uZCBhcmd1bWVudC4KK05vdGUgdGhhdCB0aGUgcHJlLWFzc2lnbmVkIElPLUFQSUMgZGV2LT5pcnEgaXMgdmFsaWQgb25seSBpZiB0aGUgZGV2aWNlCitvcGVyYXRlcyBpbiBQSU4tSVJRIGFzc2VydGlvbiBtb2RlLiBJbiBNU0ktWCBtb2RlLCBhbnkgYXR0ZW1wdCBvZgordXNpbmcgZGV2LT5pcnEgYnkgdGhlIGRldmljZSBkcml2ZXIgdG8gcmVxdWVzdCBmb3IgaW50ZXJydXB0IHNlcnZpY2UKK21heSByZXN1bHQgdW5wcmVkaWN0YWJlIGJlaGF2aW9yLgorCitGb3IgZWFjaCBNU0ktWCB2ZWN0b3IgZ3JhbnRlZCwgYSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIHRvIGNhbGwKK290aGVyIGZ1bmN0aW9ucyBsaWtlIHJlcXVlc3RfaXJxKCksIGVuYWJsZV9pcnEoKSwgZXRjLiB0byBlbmFibGUKK3RoaXMgdmVjdG9yIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHNlcnZpY2UgaGFuZGxlci4gSXQgaXMKK2EgZGV2aWNlIGRyaXZlcidzIGNob2ljZSB0byBhc3NpZ24gYWxsIHZlY3RvcnMgd2l0aCB0aGUgc2FtZQoraW50ZXJydXB0IHNlcnZpY2UgaGFuZGxlciBvciBlYWNoIHZlY3RvciB3aXRoIGEgdW5pcXVlIGludGVycnVwdAorc2VydmljZSBoYW5kbGVyLgorCis1LjMuMSBIYW5kbGluZyBNTUlPIGFkZHJlc3Mgc3BhY2Ugb2YgTVNJLVggVGFibGUKKworVGhlIFBDSSAzLjAgc3BlY2lmaWNhdGlvbiBoYXMgaW1wbGVtZW50YXRpb24gbm90ZXMgdGhhdCBNTUlPIGFkZHJlc3MKK3NwYWNlIGZvciBhIGRldmljZSdzIE1TSS1YIHN0cnVjdHVyZSBzaG91bGQgYmUgaXNvbGF0ZWQgc28gdGhhdCB0aGUKK3NvZnR3YXJlIHN5c3RlbSBjYW4gc2V0IGRpZmZlcmVudCBwYWdlIGZvciBjb250cm9sbGluZyBhY2Nlc3NlcyB0bwordGhlIE1TSS1YIHN0cnVjdHVyZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIE1TSSBwYXRjaCByZXF1aXJlcyB0aGUgUENJCitzdWJzeXN0ZW0sIG5vdCBhIGRldmljZSBkcml2ZXIsIHRvIG1haW50YWluIGZ1bGwgY29udHJvbCBvZiB0aGUgTVNJLVgKK3RhYmxlL01TSS1YIFBCQSBhbmQgTU1JTyBhZGRyZXNzIHNwYWNlIG9mIHRoZSBNU0ktWCB0YWJsZS9NU0ktWCBQQkEuCitBIGRldmljZSBkcml2ZXIgaXMgcHJvaGliaXRlZCBmcm9tIHJlcXVlc3RpbmcgdGhlIE1NSU8gYWRkcmVzcyBzcGFjZQorb2YgdGhlIE1TSS1YIHRhYmxlL01TSS1YIFBCQS4gT3RoZXJ3aXNlLCB0aGUgUENJIHN1YnN5c3RlbSB3aWxsIGZhaWwKK2VuYWJsaW5nIE1TSS1YIG9uIGl0cyBoYXJkd2FyZSBkZXZpY2Ugd2hlbiBpdCBjYWxscyB0aGUgZnVuY3Rpb24KK3BjaV9lbmFibGVfbXNpeCgpLgorCis1LjMuMiBIYW5kbGluZyBNU0ktWCBhbGxvY2F0aW9uCisKK0RldGVybWluaW5nIHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyBhbGxvY2F0ZWQgdG8gYSBmdW5jdGlvbiBpcworZGVwZW5kZW50IG9uIHRoZSBudW1iZXIgb2YgTVNJIGNhcGFibGUgZGV2aWNlcyBhbmQgTVNJLVggY2FwYWJsZQorZGV2aWNlcyBwb3B1bGF0ZWQgaW4gdGhlIHN5c3RlbS4gVGhlIHBvbGljeSBvZiBhbGxvY2F0aW5nIE1TSS1YCit2ZWN0b3JzIHRvIGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nOgorCisjb2YgTVNJLVggdmVjdG9ycyBhbGxvY2F0ZWQgdG8gYSBmdW5jdGlvbiA9ICh4IC0geSkveiB3aGVyZQorCit4ID0gCVRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIFBDSSB2ZWN0b3IgcmVzb3VyY2VzIGJ5IHRoZSB0aW1lCisJdGhlIGRldmljZSBkcml2ZXIgY2FsbHMgcGNpX2VuYWJsZV9tc2l4KCkuIFRoZSBQQ0kgdmVjdG9yCisJcmVzb3VyY2VzIGlzIHRoZSBzdW0gb2YgdGhlIG51bWJlciBvZiB1bmFzc2lnbmVkIHZlY3RvcnMKKwkobmV3KSBhbmQgdGhlIG51bWJlciBvZiByZWxlYXNlZCB2ZWN0b3JzIHdoZW4gYW55IE1TSS9NU0ktWAorCWRldmljZSBkcml2ZXIgc3dpdGNoZXMgaXRzIGhhcmR3YXJlIGRldmljZSBiYWNrIHRvIGEgbGVnYWN5CisJbW9kZSBvciBpcyBob3QtcmVtb3ZlZC4JVGhlIG51bWJlciBvZiB1bmFzc2lnbmVkIHZlY3RvcnMKKwltYXkgZXhjbHVkZSBzb21lIHZlY3RvcnMgcmVzZXJ2ZWQsIGFzIGRlZmluZWQgaW4gcGFyYW1ldGVyCisJTlJfSFBfUkVTRVJWRURfVkVDVE9SUywgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBzeXN0ZW0gaXMKKwljYXBhYmxlIG9mIHN1cHBvcnRpbmcgaG90LWFkZC9ob3QtcmVtb3ZlIG9wZXJhdGlvbnMuIFVzZXJzCisJbWF5IGNoYW5nZSB0aGUgdmFsdWUgZGVmaW5lZCBpbiBOUl9IUl9SRVNFUlZFRF9WRUNUT1JTIHRvCisJbWVldCB0aGVpciBzcGVjaWZpYyBuZWVkcy4KKworeSA9CVRoZSBudW1iZXIgb2YgTVNJIGNhcGFibGUgZGV2aWNlcyBwb3B1bGF0ZWQgaW4gdGhlIHN5c3RlbS4KKwlUaGlzIHBvbGljeSBlbnN1cmVzIHRoYXQgZWFjaCBNU0kgY2FwYWJsZSBkZXZpY2UgaGFzIGl0cworCXZlY3RvciByZXNlcnZlZCB0byBhdm9pZCB0aGUgY2FzZSB3aGVyZSBzb21lIE1TSS1YIGNhcGFibGUKKwlkcml2ZXJzIG1heSBhdHRlbXB0IHRvIGNsYWltIGFsbCBhdmFpbGFibGUgdmVjdG9yIHJlc291cmNlcy4KKworeiA9CVRoZSBudW1iZXIgb2YgTVNJLVggY2FwYWJsZSBkZXZpY2VzIHB1cHVsYXRlZCBpbiB0aGUgc3lzdGVtLgorCVRoaXMgcG9saWN5IGVuc3VyZXMgdGhhdCBtYXhpbXVtICh4IC0geSkgaXMgZGlzdHJpYnV0ZWQKKwlldmVubHkgYW1vbmcgTVNJLVggY2FwYWJsZSBkZXZpY2VzLgorCitOb3RlIHRoYXQgdGhlIFBDSSBzdWJzeXN0ZW0gc2NhbnMgeSBhbmQgeiBkdXJpbmcgYSBidXMgZW51bWVyYXRpb24uCitXaGVuIHRoZSBQQ0kgc3Vic3lzdGVtIGNvbXBsZXRlcyBjb25maWd1cmluZyBNU0kvTVNJLVggY2FwYWJpbGl0eQorc3RydWN0dXJlIG9mIGEgZGV2aWNlIGFzIHJlcXVlc3RlZCBieSBpdHMgZGV2aWNlIGRyaXZlciwgeS96IGlzCitkZWNyZW1lbnRlZCBhY2NvcmRpbmdseS4KKworNS4zLjMgSGFuZGxpbmcgTVNJLVggc2hvcnRhZ2VzCisKK0ZvciB0aGUgY2FzZSB3aGVyZSBmZXdlciBNU0ktWCB2ZWN0b3JzIGFyZSBhbGxvY2F0ZWQgdG8gYSBmdW5jdGlvbgordGhhbiByZXF1ZXN0ZWQsIHRoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaXgoKSB3aWxsIHJldHVybiB0aGUKK21heGltdW0gbnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgYXZhaWxhYmxlIHRvIHRoZSBjYWxsZXIuIEEgZGV2aWNlCitkcml2ZXIgbWF5IHJlLXNlbmQgaXRzIHJlcXVlc3Qgd2l0aCBmZXdlciBvciBlcXVhbCB2ZWN0b3JzIGluZGljYXRlZAoraW4gYSByZXR1cm4uIEZvciBleGFtcGxlLCBpZiBhIGRldmljZSBkcml2ZXIgcmVxdWVzdHMgNSB2ZWN0b3JzLCBidXQKK3RoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHZlY3RvcnMgaXMgMyB2ZWN0b3JzLCBhIHZhbHVlIG9mIDMgd2lsbCBiZSBhCityZXR1cm4gYXMgYSByZXN1bHQgb2YgcGNpX2VuYWJsZV9tc2l4KCkgY2FsbC4gQSBmdW5jdGlvbiBjb3VsZCBiZQorZGVzaWduZWQgZm9yIGl0cyBkcml2ZXIgdG8gdXNlIG9ubHkgMyBNU0ktWCB0YWJsZSBlbnRyaWVzIGFzCitkaWZmZXJlbnQgY29tYmluYXRpb25zIGFzIEFCQy0tLCBBLUItQywgQS0tQ0IsIGV0Yy4gTm90ZSB0aGF0IHRoaXMKK3BhdGNoIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIHZlY3Rvci4gU3VjaAorYXR0ZW1wdCBieSBhIGRldmljZSBkcml2ZXIgdG8gdXNlIDUgTVNJLVggdGFibGUgZW50cmllcyB3aXRoIDMgdmVjdG9ycworYXMgQUJCQ0MsIEFBQkNDLCBCQ0NCQSwgZXRjIHdpbGwgcmVzdWx0IGFzIGEgZmFpbHVyZSBieSB0aGUgZnVuY3Rpb24KK3BjaV9lbmFibGVfbXNpeCgpLiBCZWxvdyBhcmUgdGhlIHJlYXNvbnMgd2h5IHN1cHBvcnRpbmcgbXVsdGlwbGUKK2VudHJpZXMgd2l0aCB0aGUgc2FtZSB2ZWN0b3IgaXMgYW4gdW5kZXNpcmFibGUgc29sdXRpb24uCisKKwktIFRoZSBQQ0kgc3Vic3lzdGVtIGNhbiBub3QgZGV0ZXJtaW5lIHdoaWNoIGVudHJ5LCB3aGljaAorCSAgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlLCB0byBtYXNrL3VubWFzayBNU0kgd2hpbGUgaGFuZGxpbmcKKwkgIHNvZnR3YXJlIGRyaXZlciBJU1IuIEF0dGVtcHRpbmcgdG8gd2FsayB0aHJvdWdoIGFsbCBNU0ktWAorCSAgdGFibGUgZW50cmllcyAoMjA0OCBtYXgpIHRvIG1hc2svdW5tYXNrIGFueSBtYXRjaCB2ZWN0b3IKKwkgIGlzIGFuIHVuZGVzaXJhYmxlIHNvbHV0aW9uLgorCisJLSBXYWxrIHRocm91Z2ggYWxsIE1TSS1YIHRhYmxlIGVudHJpZXMgKDIwNDggbWF4KSB0byBoYW5kbGUKKwkgIFNNUCBhZmZpbml0eSBvZiBhbnkgbWF0Y2ggdmVjdG9yIGlzIGFuIHVuZGVzaXJhYmxlIHNvbHV0aW9uLgorCis1LjMuNCBBUEkgcGNpX2VuYWJsZV9tc2l4CisKK2ludCBwY2lfZW5hYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyICplbnRyaWVzLCBpbnQgbnZlYykKKworVGhpcyBBUEkgZW5hYmxlcyBhIGRldmljZSBkcml2ZXIgdG8gcmVxdWVzdCB0aGUgUENJIHN1YnN5c3RlbQorZm9yIGVuYWJsaW5nIE1TSS1YIG1lc3NhZ2VzIG9uIGl0cyBoYXJkd2FyZSBkZXZpY2UuIERlcGVuZGluZyBvbgordGhlIGF2YWlsYWJpbGl0eSBvZiBQQ0kgdmVjdG9ycyByZXNvdXJjZXMsIHRoZSBQQ0kgc3Vic3lzdGVtIGVuYWJsZXMKK2VpdGhlciBhbGwgb3Igbm90aGluZy4KKworQXJndW1lbnQgZGV2IHBvaW50cyB0byB0aGUgZGV2aWNlIChwY2lfZGV2KSBzdHJ1Y3R1cmUuCisKK0FyZ3VtZW50IGVudHJpZXMgaXMgYSBwb2ludGVyIG9mIHVuc2lnbmVkIGludGVnZXIgdHlwZS4gVGhlIG51bWJlciBvZgorZWxlbWVudHMgaXMgaW5kaWNhdGVkIGluIGFyZ3VtZW50IG52ZWMuIFRoZSBjb250ZW50IG9mIGVhY2ggZWxlbWVudAord2lsbCBiZSBtYXBwZWQgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3QgZGVmaW5lZCBpbiAvZHJpdmVyL3BjaS9tc2kuaC4KKworc3RydWN0IG1zaXhfZW50cnkgeworCXUxNiAJdmVjdG9yOyAvKiBrZXJuZWwgdXNlcyB0byB3cml0ZSBhbGxvYyB2ZWN0b3IgKi8KKwl1MTYJZW50cnk7IC8qIGRyaXZlciB1c2VzIHRvIHNwZWNpZnkgZW50cnkgKi8KK307CisKK0EgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBmaWVsZCBlbnRyeSBvZgorZWFjaCBlbGVtZW50IHdpdGggdW5pcXVlIGVudHJ5IHN1cHBvcnRlZCBieSBNU0ktWCB0YWJsZS4gT3RoZXJ3aXNlLAorLUVJTlZBTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgcmVzdWx0LiBBIHN1Y2Nlc3NmdWwgcmV0dXJuIG9mIHplcm8KK2luZGljYXRlcyB0aGUgUENJIHN1YnN5c3RlbSBjb21wbGV0ZXMgaW5pdGlhbGl6aW5nIGVhY2ggb2YgcmVxdWVzdGVkCitlbnRyaWVzIG9mIHRoZSBNU0ktWCB0YWJsZSB3aXRoIG1lc3NhZ2UgYWRkcmVzcyBhbmQgbWVzc2FnZSBkYXRhLgorTGFzdCBidXQgbm90IGxlYXN0LCB0aGUgUENJIHN1YnN5c3RlbSB3aWxsIHdyaXRlIHRoZSAxOjEKK3ZlY3Rvci10by1lbnRyeSBtYXBwaW5nIGludG8gdGhlIGZpZWxkIHZlY3RvciBvZiBlYWNoIGVsZW1lbnQuIEEKK2RldmljZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgb2Yga2VlcGluZyB0cmFjayBvZiBhbGxvY2F0ZWQgTVNJLVgKK3ZlY3RvcnMgaW4gaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlLgorCitBcmd1bWVudCBudmVjIGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzCityZXF1ZXN0ZWQuCisKK0EgcmV0dXJuIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIG51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIGlzCitzdWNjZXNzZnVsbHkgYWxsb2NhdGVkLiBBIHJldHVybiBvZiBncmVhdGVyIHRoYW4gemVybyBpbmRpY2F0ZXMKK01TSS1YIHZlY3RvciBzaG9ydGFnZS4gT3IgYSByZXR1cm4gb2YgbGVzcyB0aGFuIHplcm8gaW5kaWNhdGVzCithIGZhaWx1cmUuIFRoaXMgZmFpbHVyZSBtYXkgYmUgYSByZXN1bHQgb2YgZHVwbGljYXRlIGVudHJpZXMKK3NwZWNpZmllZCBpbiBzZWNvbmQgYXJndW1lbnQsIG9yIGEgcmVzdWx0IG9mIG5vIGF2YWlsYWJsZSB2ZWN0b3IsCitvciBhIHJlc3VsdCBvZiBmYWlsaW5nIHRvIGluaXRpYWxpemUgTVNJLVggdGFibGUgZW50cmllcy4KKworNS4zLjUgQVBJIHBjaV9kaXNhYmxlX21zaXgKKwordm9pZCBwY2lfZGlzYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCisKK1RoaXMgQVBJIHNob3VsZCBhbHdheXMgYmUgdXNlZCB0byB1bmRvIHRoZSBlZmZlY3Qgb2YgcGNpX2VuYWJsZV9tc2l4KCkKK3doZW4gYSBkZXZpY2UgZHJpdmVyIGlzIHVubG9hZGluZy4gTm90ZSB0aGF0IGEgZGV2aWNlIGRyaXZlciBzaG91bGQKK2Fsd2F5cyBjYWxsIGZyZWVfaXJxKCkgb24gYWxsIE1TSS1YIHZlY3RvcnMgaXQgaGFzIGRvbmUgcmVxdWVzdF9pcnEoKQorb24gYmVmb3JlIGNhbGxpbmcgdGhpcyBBUEkuIEZhaWx1cmUgdG8gZG8gc28gcmVzdWx0cyBhIEJVR19PTigpIGFuZAorYSBkZXZpY2Ugd2lsbCBiZSBsZWZ0IHdpdGggTVNJLVggZW5hYmxlZCBhbmQgbGVha3MgaXRzIHZlY3RvcnMuCisKKzUuMy42IE1TSS1YIG1vZGUgdnMuIGxlZ2FjeSBtb2RlIGRpYWdyYW0KKworVGhlIGJlbG93IGRpYWdyYW0gc2hvd3MgdGhlIGV2ZW50cywgd2hpY2ggc3dpdGNoZXMgdGhlIGludGVycnVwdAorbW9kZSBvbiB0aGUgTVNJLVggY2FwYWJsZSBkZXZpY2UgZnVuY3Rpb24gYmV0d2VlbiBNU0ktWCBtb2RlIGFuZAorUElOLUlSUSBhc3NlcnRpb24gbW9kZSAobGVnYWN5KS4KKworCSAtLS0tLS0tLS0tLS0gICBwY2lfZW5hYmxlX21zaXgoLCxuKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl8CSAgICAgfCA8PT09PT09PT09PT09PT09CSAgICB8IAkJCSAgICAgfAorCXwgTVNJLVggTU9ERSB8CSAgCSAgICAgCSAgICB8IFBJTi1JUlEgQVNTRVJUSU9OIE1PREUgfAorCXwgCSAgICAgfCA9PT09PT09PT09PT09PT0+CSAgICB8CQkJICAgICB8CisgCSAtLS0tLS0tLS0tLS0JcGNpX2Rpc2FibGVfbXNpeCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpZ3VyZSAyLjAgTVNJLVggTW9kZSB2cy4gTGVnYWN5IE1vZGUKKworSW4gRmlndXJlIDIuMCwgYSBkZXZpY2Ugb3BlcmF0ZXMgYnkgZGVmYXVsdCBpbiBsZWdhY3kgbW9kZS4gQQorc3VjY2Vzc2Z1bCBNU0ktWCByZXF1ZXN0ICh1c2luZyBwY2lfZW5hYmxlX21zaXgoKSkgc3dpdGNoZXMgYQorZGV2aWNlJ3MgaW50ZXJydXB0IG1vZGUgdG8gTVNJLVggbW9kZS4gQSBwcmUtYXNzaWduZWQgSU9BUElDIHZlY3Rvcgorc3RvcmVkIGluIGRldi0+aXJxIHdpbGwgYmUgc2F2ZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW07IGhvd2V2ZXIsCit1bmxpa2UgTVNJIG1vZGUsIHRoZSBQQ0kgc3Vic3lzdGVtIHdpbGwgbm90IHJlcGxhY2UgZGV2LT5pcnEgd2l0aAorYXNzaWduZWQgTVNJLVggdmVjdG9yIGJlY2F1c2UgdGhlIFBDSSBzdWJzeXN0ZW0gYWxyZWFkeSB3cml0ZXMgdGhlIDE6MQordmVjdG9yLXRvLWVudHJ5IG1hcHBpbmcgaW50byB0aGUgZmllbGQgdmVjdG9yIG9mIGVhY2ggZWxlbWVudAorc3BlY2lmaWVkIGluIHNlY29uZCBhcmd1bWVudC4KKworVG8gcmV0dXJuIGJhY2sgdG8gaXRzIGRlZmF1bHQgbW9kZSwgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbAorcGNpX2Rpc2FibGVfbXNpeCgpIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaXgoKS4gTm90ZSB0aGF0CithIGRldmljZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkgb24gYWxsIE1TSS1YIHZlY3RvcnMgaXQKK2hhcyBkb25lIHJlcXVlc3RfaXJxKCkgb24gYmVmb3JlIGNhbGxpbmcgcGNpX2Rpc2FibGVfbXNpeCgpLiBGYWlsdXJlCit0byBkbyBzbyByZXN1bHRzIGEgQlVHX09OKCkgYW5kIGEgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSS1YCitlbmFibGVkIGFuZCBsZWFrcyBpdHMgdmVjdG9ycy4gT3RoZXJ3aXNlLCB0aGUgUENJIHN1YnN5c3RlbSBzd2l0Y2hlcyBhCitkZXZpY2UgZnVuY3Rpb24ncyBpbnRlcnJ1cHQgbW9kZSBmcm9tIE1TSS1YIG1vZGUgdG8gbGVnYWN5IG1vZGUgYW5kCittYXJrcyBhbGwgYWxsb2NhdGVkIE1TSS1YIHZlY3RvcnMgYXMgdW51c2VkLgorCitPbmNlIGJlaW5nIG1hcmtlZCBhcyB1bnVzZWQsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBQQ0kKK3N1YnN5c3RlbSB3aWxsIHJlc2VydmUgdGhlc2UgTVNJLVggdmVjdG9ycyBmb3IgYSBkZXZpY2UuIERlcGVuZGluZyBvbgordGhlIGF2YWlsYWJpbGl0eSBvZiBjdXJyZW50IFBDSSB2ZWN0b3IgcmVzb3VyY2VzIGFuZCB0aGUgbnVtYmVyIG9mCitNU0kvTVNJLVggcmVxdWVzdHMgZnJvbSBvdGhlciBkcml2ZXJzLCB0aGVzZSBNU0ktWCB2ZWN0b3JzIG1heSBiZQorcmUtYXNzaWduZWQuCisKK0ZvciB0aGUgY2FzZSB3aGVyZSB0aGUgUENJIHN1YnN5c3RlbSByZS1hc3NpZ25lZCB0aGVzZSBNU0ktWCB2ZWN0b3JzCit0byBvdGhlciBkcml2ZXIsIGEgcmVxdWVzdCB0byBzd2l0Y2hpbmcgYmFjayB0byBNU0ktWCBtb2RlIG1heSByZXN1bHQKK2JlaW5nIGFzc2lnbmVkIHdpdGggYW5vdGhlciBzZXQgb2YgTVNJLVggdmVjdG9ycyBvciBhIGZhaWx1cmUgaWYgbm8KK21vcmUgdmVjdG9ycyBhcmUgYXZhaWxhYmxlLgorCis1LjQgSGFuZGxpbmcgZnVuY3Rpb24gaW1wbGVtZW50bmcgYm90aCBNU0kgYW5kIE1TSS1YIGNhcGFiaWxpdGllcworCitGb3IgdGhlIGNhc2Ugd2hlcmUgYSBmdW5jdGlvbiBpbXBsZW1lbnRzIGJvdGggTVNJIGFuZCBNU0ktWAorY2FwYWJpbGl0aWVzLCB0aGUgUENJIHN1YnN5c3RlbSBlbmFibGVzIGEgZGV2aWNlIHRvIHJ1biBlaXRoZXIgaW4gTVNJCittb2RlIG9yIE1TSS1YIG1vZGUgYnV0IG5vdCBib3RoLiBBIGRldmljZSBkcml2ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0Cit3YW50cyBNU0kgb3IgTVNJLVggZW5hYmxlZCBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlLiBPbmNlIGEgZGV2aWNlCitkcml2ZXIgcmVxdWVzdHMgZm9yIE1TSSwgZm9yIGV4YW1wbGUsIGl0IGlzIHByb2hpYml0ZWQgdG8gcmVxdWVzdCBmb3IKK01TSS1YOyBpbiBvdGhlciB3b3JkcywgYSBkZXZpY2UgZHJpdmVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcGluZy1wb25nCitiZXR3ZWVuIE1TSSBtb2QgTVNJLVggbW9kZSBkdXJpbmcgYSBydW4tdGltZS4KKworNS41IEhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgTVNJL01TSS1YIHN1cHBvcnQKK01TSS9NU0ktWCBzdXBwb3J0IHJlcXVpcmVzIHN1cHBvcnQgZnJvbSBib3RoIHN5c3RlbSBoYXJkd2FyZSBhbmQKK2luZGl2aWR1YWwgaGFyZHdhcmUgZGV2aWNlIGZ1bmN0aW9ucy4KKworNS41LjEgU3lzdGVtIGhhcmR3YXJlIHN1cHBvcnQKK1NpbmNlIHRoZSB0YXJnZXQgb2YgTVNJIGFkZHJlc3MgaXMgdGhlIGxvY2FsIEFQSUMgQ1BVLCBlbmFibGluZworTVNJL01TSS1YIHN1cHBvcnQgaW4gTGludXgga2VybmVsIGlzIGRlcGVuZGVudCBvbiB3aGV0aGVyIGV4aXN0aW5nCitzeXN0ZW0gaGFyZHdhcmUgc3VwcG9ydHMgbG9jYWwgQVBJQy4gVXNlcnMgc2hvdWxkIHZlcmlmeSB0aGVpcgorc3lzdGVtIHdoZXRoZXIgaXQgcnVucyB3aGVuIENPTkZJR19YODZfTE9DQUxfQVBJQz15LgorCitJbiBTTVAgZW52aXJvbm1lbnQsIENPTkZJR19YODZfTE9DQUxfQVBJQyBpcyBhdXRvbWF0aWNhbGx5IHNldDsKK2hvd2V2ZXIsIGluIFVQIGVudmlyb25tZW50LCB1c2VycyBtdXN0IG1hbnVhbGx5IHNldAorQ09ORklHX1g4Nl9MT0NBTF9BUElDLiBPbmNlIENPTkZJR19YODZfTE9DQUxfQVBJQz15LCBzZXR0aW5nCitDT05GSUdfUENJX01TSSBlbmFibGVzIHRoZSBWRUNUT1IgYmFzZWQgc2NoZW1lIGFuZAordGhlIG9wdGlvbiBmb3IgTVNJLWNhcGFibGUgZGV2aWNlIGRyaXZlcnMgdG8gc2VsZWN0aXZlbHkgZW5hYmxlCitNU0kvTVNJLVguCisKK05vdGUgdGhhdCBDT05GSUdfWDg2X0lPX0FQSUMgc2V0dGluZyBpcyBpcnJlbGV2YW50IGJlY2F1c2UgTVNJL01TSS1YCit2ZWN0b3IgaXMgYWxsb2NhdGVkIG5ldyBkdXJpbmcgcnVudGltZSBhbmQgTVNJL01TSS1YIHN1cHBvcnQgZG9lcyBub3QKK2RlcGVuZCBvbiBCSU9TIHN1cHBvcnQuIFRoaXMga2V5IGluZGVwZW5kZW5jeSBlbmFibGVzIE1TSS9NU0ktWAorc3VwcG9ydCBvbiBmdXR1cmUgSU94QVBJQyBmcmVlIHBsYXRmb3JtLgorCis1LjUuMiBEZXZpY2UgaGFyZHdhcmUgc3VwcG9ydAorVGhlIGhhcmR3YXJlIGRldmljZSBmdW5jdGlvbiBzdXBwb3J0cyBNU0kgYnkgaW5kaWNhdGluZyB0aGUKK01TSS9NU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvbiBpdHMgUENJIGNhcGFiaWxpdHkgbGlzdC4gQnkKK2RlZmF1bHQsIHRoaXMgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2lsbCBub3QgYmUgaW5pdGlhbGl6ZWQgYnkKK3RoZSBrZXJuZWwgdG8gZW5hYmxlIE1TSSBkdXJpbmcgdGhlIHN5c3RlbSBib290LiBJbiBvdGhlciB3b3JkcywKK3RoZSBkZXZpY2UgZnVuY3Rpb24gaXMgcnVubmluZyBvbiBpdHMgZGVmYXVsdCBwaW4gYXNzZXJ0aW9uIG1vZGUuCitOb3RlIHRoYXQgaW4gbWFueSBjYXNlcyB0aGUgaGFyZHdhcmUgc3VwcG9ydGluZyBNU0kgaGF2ZSBidWdzLAord2hpY2ggbWF5IHJlc3VsdCBpbiBzeXN0ZW0gaGFuZy4gVGhlIHNvZnR3YXJlIGRyaXZlciBvZiBzcGVjaWZpYworTVNJLWNhcGFibGUgaGFyZHdhcmUgaXMgcmVzcG9uc2libGUgZm9yIHdoZXRoZXIgY2FsbGluZworcGNpX2VuYWJsZV9tc2kgb3Igbm90LiBBIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyB0aGUga2VybmVsCitzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIE1TSS9NU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiB0aGUKK2RldmljZSBmdW50aW9uLiBUaGUgZGV2aWNlIGZ1bmN0aW9uIGlzIG5vdyBydW5uaW5nIG9uIE1TSS9NU0ktWCBtb2RlLgorCis1LjYgSG93IHRvIHRlbGwgd2hldGhlciBNU0kvTVNJLVggaXMgZW5hYmxlZCBvbiBkZXZpY2UgZnVuY3Rpb24KKworQXQgdGhlIGRyaXZlciBsZXZlbCwgYSByZXR1cm4gb2YgemVybyBmcm9tIHRoZSBmdW5jdGlvbiBjYWxsIG9mCitwY2lfZW5hYmxlX21zaSgpL3BjaV9lbmFibGVfbXNpeCgpIGluZGljYXRlcyB0byBhIGRldmljZSBkcml2ZXIgdGhhdAoraXRzIGRldmljZSBmdW5jdGlvbiBpcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgYW5kIHJlYWR5IHRvIHJ1biBpbgorTVNJL01TSS1YIG1vZGUuCisKK0F0IHRoZSB1c2VyIGxldmVsLCB1c2VycyBjYW4gdXNlIGNvbW1hbmQgJ2NhdCAvcHJvYy9pbnRlcnJ1cHRzJwordG8gZGlzcGxheSB0aGUgdmVjdG9yIGFsbG9jYXRlZCBmb3IgYSBkZXZpY2UgYW5kIGl0cyBpbnRlcnJ1cHQKK01TSS9NU0ktWCBtb2RlICgiUENJIE1TSSIvIlBDSSBNU0lYIikuIEJlbG93IHNob3dzIGJlbG93IE1TSSBtb2RlIGlzCitlbmFibGVkIG9uIGEgU0NTSSBBZGFwdGVjIDM5MzIwRCBVbHRyYTMyMC4KKworICAgICAgICAgICBDUFUwICAgICAgIENQVTEKKyAgMDogICAgIDMyNDYzOSAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgdGltZXIKKyAgMTogICAgICAgMTE4NiAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgaTgwNDIKKyAgMjogICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIFhULVBJQyAgY2FzY2FkZQorIDEyOiAgICAgICAyNzk3ICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICBpODA0MgorIDE0OiAgICAgICA2NTQzICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICBpZGUwCisgMTU6ICAgICAgICAgIDEgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIGlkZTEKKzE2OTogICAgICAgICAgMCAgICAgICAgICAwICAgSU8tQVBJQy1sZXZlbCAgdWhjaS1oY2QKKzE4NTogICAgICAgICAgMCAgICAgICAgICAwICAgSU8tQVBJQy1sZXZlbCAgdWhjaS1oY2QKKzE5MzogICAgICAgIDEzOCAgICAgICAgIDEwICAgICAgICAgUENJIE1TSSAgYWljNzl4eAorMjAxOiAgICAgICAgIDMwICAgICAgICAgIDAgICAgICAgICBQQ0kgTVNJICBhaWM3OXh4CisyMjU6ICAgICAgICAgMzAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIGFpYzd4eHgKKzIzMzogICAgICAgICAzMCAgICAgICAgICAwICAgSU8tQVBJQy1sZXZlbCAgYWljN3h4eAorTk1JOiAgICAgICAgICAwICAgICAgICAgIDAKK0xPQzogICAgIDMyNDU1MyAgICAgMzI1MDY4CitFUlI6ICAgICAgICAgIDAKK01JUzogICAgICAgICAgMAorCis2LiBGQVEKKworUTEuIEFyZSB0aGVyZSBhbnkgbGltaXRhdGlvbnMgb24gdXNpbmcgdGhlIE1TST8KKworQTEuIElmIHRoZSBQQ0kgZGV2aWNlIHN1cHBvcnRzIE1TSSBhbmQgY29uZm9ybXMgdG8gdGhlCitzcGVjaWZpY2F0aW9uIGFuZCB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgdGhlIEFQSUMgbG9jYWwgYnVzLAordGhlbiB1c2luZyBNU0kgc2hvdWxkIHdvcmsuCisKK1EyLiBXaWxsIGl0IHdvcmsgb24gYWxsIHRoZSBQZW50aXVtIHByb2Nlc3NvcnMgKFAzLCBQNCwgWGVvbiwKK0FNRCBwcm9jZXNzb3JzKT8gSW4gUDMgSVBJJ3MgYXJlIHRyYW5zbWl0dGVkIG9uIHRoZSBBUElDIGxvY2FsCitidXMgYW5kIGluIFA0IGFuZCBYZW9uIHRoZXkgYXJlIHRyYW5zbWl0dGVkIG9uIHRoZSBzeXN0ZW0KK2J1cy4gQXJlIHRoZXJlIGFueSBpbXBsaWNhdGlvbnMgd2l0aCB0aGlzPworCitBMi4gTVNJIHN1cHBvcnQgZW5hYmxlcyBhIFBDSSBkZXZpY2Ugc2VuZGluZyBhbiBpbmJvdW5kCittZW1vcnkgd3JpdGUgKDB4ZmVleHh4eHggYXMgdGFyZ2V0IGFkZHJlc3MpIG9uIGl0cyBQQ0kgYnVzCitkaXJlY3RseSB0byB0aGUgRlNCLiBTaW5jZSB0aGUgbWVzc2FnZSBhZGRyZXNzIGhhcyBhCityZWRpcmVjdGlvbiBoaW50IGJpdCBjbGVhcmVkLCBpdCBzaG91bGQgd29yay4KKworUTMuIFRoZSB0YXJnZXQgYWRkcmVzcyAweGZlZXh4eHh4IHdpbGwgYmUgdHJhbnNsYXRlZCBieSB0aGUKK0hvc3QgQnJpZGdlIGludG8gYW4gaW50ZXJydXB0IG1lc3NhZ2UuIEFyZSB0aGVyZSBhbnkKK2xpbWl0YXRpb25zIG9uIHRoZSBjaGlwc2V0cyBzdWNoIGFzIEludGVsIDh4eCwgSW50ZWwgZTd4eHgsCitvciBWSUE/CisKK0EzLiBJZiB0aGVzZSBjaGlwc2V0cyBzdXBwb3J0IGFuIGluYm91bmQgbWVtb3J5IHdyaXRlIHdpdGgKK3RhcmdldCBhZGRyZXNzIHNldCBhcyAweGZlZXh4eHh4LCBhcyBjb25mb3JtZWQgdG8gUENJCitzcGVjaWZpY2F0aW9uIDIuMyBvciBsYXRlc3QsIHRoZW4gaXQgc2hvdWxkIHdvcmsuCisKK1E0LiBGcm9tIHRoZSBkcml2ZXIgcG9pbnQgb2YgdmlldywgaWYgdGhlIE1TSSBpcyBsb3N0IGJlY2F1c2UKK29mIHRoZSBlcnJvcnMgb2NjdXIgZHVyaW5nIGluYm91bmQgbWVtb3J5IHdyaXRlLCB0aGVuIGl0IG1heQord2FpdCBmb3IgZXZlci4gSXMgdGhlcmUgYSBtZWNoYW5pc20gZm9yIGl0IHRvIHJlY292ZXI/CisKK0E0LiBTaW5jZSB0aGUgdGFyZ2V0IG9mIHRoZSB0cmFuc2FjdGlvbiBpcyBhbiBpbmJvdW5kIG1lbW9yeQord3JpdGUsIGFsbCB0cmFuc2FjdGlvbiB0ZXJtaW5hdGlvbiBjb25kaXRpb25zIChSZXRyeSwKK01hc3Rlci1BYm9ydCwgVGFyZ2V0LUFib3J0LCBvciBub3JtYWwgY29tcGxldGlvbikgYXJlCitzdXBwb3J0ZWQuIEEgZGV2aWNlIHNlbmRpbmcgYW4gTVNJIG11c3QgYWJpZGUgYnkgYWxsIHRoZSBQQ0kKK3J1bGVzIGFuZCBjb25kaXRpb25zIHJlZ2FyZGluZyB0aGF0IGluYm91bmQgbWVtb3J5IHdyaXRlLiBTbywKK2lmIGEgcmV0cnkgaXMgc2lnbmFsZWQgaXQgbXVzdCByZXRyeSwgZXRjLi4uIFdlIGJlbGlldmUgdGhhdAordGhlIHJlY29tbWVuZGF0aW9uIGZvciBBYm9ydCBpcyBhbHNvIGEgcmV0cnkgKHJlZmVyIHRvIFBDSQorc3BlY2lmaWNhdGlvbiAyLjMgb3IgbGF0ZXN0KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFuYWdlbWVudFN0eWxlIGIvRG9jdW1lbnRhdGlvbi9NYW5hZ2VtZW50U3R5bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiZWJmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vTWFuYWdlbWVudFN0eWxlCkBAIC0wLDAgKzEsMjc2IEBACisKKyAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgbWFuYWdlbWVudCBzdHlsZQorCitUaGlzIGlzIGEgc2hvcnQgZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUgcHJlZmVycmVkIChvciBtYWRlIHVwLCBkZXBlbmRpbmcKK29uIHdobyB5b3UgYXNrKSBtYW5hZ2VtZW50IHN0eWxlIGZvciB0aGUgbGludXgga2VybmVsLiAgSXQncyBtZWFudCB0bworbWlycm9yIHRoZSBDb2RpbmdTdHlsZSBkb2N1bWVudCB0byBzb21lIGRlZ3JlZSwgYW5kIG1haW5seSB3cml0dGVuIHRvCithdm9pZCBhbnN3ZXJpbmcgKCopIHRoZSBzYW1lIChvciBzaW1pbGFyKSBxdWVzdGlvbnMgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4gCisKK01hbmFnZW1lbnQgc3R5bGUgaXMgdmVyeSBwZXJzb25hbCBhbmQgbXVjaCBoYXJkZXIgdG8gcXVhbnRpZnkgdGhhbgorc2ltcGxlIGNvZGluZyBzdHlsZSBydWxlcywgc28gdGhpcyBkb2N1bWVudCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFueXRoaW5nCit0byBkbyB3aXRoIHJlYWxpdHkuICBJdCBzdGFydGVkIGFzIGEgbGFyaywgYnV0IHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQKK21pZ2h0IG5vdCBhY3R1YWxseSBiZSB0cnVlLiBZb3UnbGwgaGF2ZSB0byBkZWNpZGUgZm9yIHlvdXJzZWxmLgorCitCdHcsIHdoZW4gdGFsa2luZyBhYm91dCAia2VybmVsIG1hbmFnZXIiLCBpdCdzIGFsbCBhYm91dCB0aGUgdGVjaG5pY2FsCitsZWFkIHBlcnNvbnMsIG5vdCB0aGUgcGVvcGxlIHdobyBkbyB0cmFkaXRpb25hbCBtYW5hZ2VtZW50IGluc2lkZQorY29tcGFuaWVzLiAgSWYgeW91IHNpZ24gcHVyY2hhc2Ugb3JkZXJzIG9yIHlvdSBoYXZlIGFueSBjbHVlIGFib3V0IHRoZQorYnVkZ2V0IG9mIHlvdXIgZ3JvdXAsIHlvdSdyZSBhbG1vc3QgY2VydGFpbmx5IG5vdCBhIGtlcm5lbCBtYW5hZ2VyLiAKK1RoZXNlIHN1Z2dlc3Rpb25zIG1heSBvciBtYXkgbm90IGFwcGx5IHRvIHlvdS4gCisKK0ZpcnN0IG9mZiwgSSdkIHN1Z2dlc3QgYnV5aW5nICJTZXZlbiBIYWJpdHMgb2YgSGlnaGx5IFN1Y2Nlc3NmdWwKK1Blb3BsZSIsIGFuZCBOT1QgcmVhZCBpdC4gIEJ1cm4gaXQsIGl0J3MgYSBncmVhdCBzeW1ib2xpYyBnZXN0dXJlLiAKKworKCopIFRoaXMgZG9jdW1lbnQgZG9lcyBzbyBub3Qgc28gbXVjaCBieSBhbnN3ZXJpbmcgdGhlIHF1ZXN0aW9uLCBidXQgYnkKK21ha2luZyBpdCBwYWluZnVsbHkgb2J2aW91cyB0byB0aGUgcXVlc3Rpb25lciB0aGF0IHdlIGRvbid0IGhhdmUgYSBjbHVlCit0byB3aGF0IHRoZSBhbnN3ZXIgaXMuIAorCitBbnl3YXksIGhlcmUgZ29lczoKKworCisJCUNoYXB0ZXIgMTogRGVjaXNpb25zCisKK0V2ZXJ5Ym9keSB0aGlua3MgbWFuYWdlcnMgbWFrZSBkZWNpc2lvbnMsIGFuZCB0aGF0IGRlY2lzaW9uLW1ha2luZyBpcworaW1wb3J0YW50LiAgVGhlIGJpZ2dlciBhbmQgbW9yZSBwYWluZnVsIHRoZSBkZWNpc2lvbiwgdGhlIGJpZ2dlciB0aGUKK21hbmFnZXIgbXVzdCBiZSB0byBtYWtlIGl0LiAgVGhhdCdzIHZlcnkgZGVlcCBhbmQgb2J2aW91cywgYnV0IGl0J3Mgbm90CithY3R1YWxseSB0cnVlLiAKKworVGhlIG5hbWUgb2YgdGhlIGdhbWUgaXMgdG8gX2F2b2lkXyBoYXZpbmcgdG8gbWFrZSBhIGRlY2lzaW9uLiAgSW4KK3BhcnRpY3VsYXIsIGlmIHNvbWVib2R5IHRlbGxzIHlvdSAiY2hvb3NlIChhKSBvciAoYiksIHdlIHJlYWxseSBuZWVkIHlvdQordG8gZGVjaWRlIG9uIHRoaXMiLCB5b3UncmUgaW4gdHJvdWJsZSBhcyBhIG1hbmFnZXIuICBUaGUgcGVvcGxlIHlvdQorbWFuYWdlIGhhZCBiZXR0ZXIga25vdyB0aGUgZGV0YWlscyBiZXR0ZXIgdGhhbiB5b3UsIHNvIGlmIHRoZXkgY29tZSB0bworeW91IGZvciBhIHRlY2huaWNhbCBkZWNpc2lvbiwgeW91J3JlIHNjcmV3ZWQuICBZb3UncmUgY2xlYXJseSBub3QKK2NvbXBldGVudCB0byBtYWtlIHRoYXQgZGVjaXNpb24gZm9yIHRoZW0uIAorCisoQ29yb2xsYXJ5OmlmIHRoZSBwZW9wbGUgeW91IG1hbmFnZSBkb24ndCBrbm93IHRoZSBkZXRhaWxzIGJldHRlciB0aGFuCit5b3UsIHlvdSdyZSBhbHNvIHNjcmV3ZWQsIGFsdGhvdWdoIGZvciBhIHRvdGFsbHkgZGlmZmVyZW50IHJlYXNvbi4gCitOYW1lbHkgdGhhdCB5b3UgYXJlIGluIHRoZSB3cm9uZyBqb2IsIGFuZCB0aGF0IF90aGV5XyBzaG91bGQgYmUgbWFuYWdpbmcKK3lvdXIgYnJpbGxpYW5jZSBpbnN0ZWFkKS4gCisKK1NvIHRoZSBuYW1lIG9mIHRoZSBnYW1lIGlzIHRvIF9hdm9pZF8gZGVjaXNpb25zLCBhdCBsZWFzdCB0aGUgYmlnIGFuZAorcGFpbmZ1bCBvbmVzLiAgTWFraW5nIHNtYWxsIGFuZCBub24tY29uc2VxdWVudGlhbCBkZWNpc2lvbnMgaXMgZmluZSwgYW5kCittYWtlcyB5b3UgbG9vayBsaWtlIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLCBzbyB3aGF0IGEga2VybmVsIG1hbmFnZXIKK25lZWRzIHRvIGRvIGlzIHRvIHR1cm4gdGhlIGJpZyBhbmQgcGFpbmZ1bCBvbmVzIGludG8gc21hbGwgdGhpbmdzIHdoZXJlCitub2JvZHkgcmVhbGx5IGNhcmVzLiAKKworSXQgaGVscHMgdG8gcmVhbGl6ZSB0aGF0IHRoZSBrZXkgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYmlnIGRlY2lzaW9uIGFuZCBhCitzbWFsbCBvbmUgaXMgd2hldGhlciB5b3UgY2FuIGZpeCB5b3VyIGRlY2lzaW9uIGFmdGVyd2FyZHMuICBBbnkgZGVjaXNpb24KK2NhbiBiZSBtYWRlIHNtYWxsIGJ5IGp1c3QgYWx3YXlzIG1ha2luZyBzdXJlIHRoYXQgaWYgeW91IHdlcmUgd3JvbmcgKGFuZAoreW91IF93aWxsXyBiZSB3cm9uZyksIHlvdSBjYW4gYWx3YXlzIHVuZG8gdGhlIGRhbWFnZSBsYXRlciBieQorYmFja3RyYWNraW5nLiAgU3VkZGVubHksIHlvdSBnZXQgdG8gYmUgZG91Ymx5IG1hbmFnZXJpYWwgZm9yIG1ha2luZworX3R3b18gaW5jb25zZXF1ZW50aWFsIGRlY2lzaW9ucyAtIHRoZSB3cm9uZyBvbmUgX2FuZF8gdGhlIHJpZ2h0IG9uZS4gCisKK0FuZCBwZW9wbGUgd2lsbCBldmVuIHNlZSB0aGF0IGFzIHRydWUgbGVhZGVyc2hpcCAoKmNvdWdoKiBidWxsc2hpdAorKmNvdWdoKikuCisKK1RodXMgdGhlIGtleSB0byBhdm9pZGluZyBiaWcgZGVjaXNpb25zIGJlY29tZXMgdG8ganVzdCBhdm9pZGluZyB0byBkbwordGhpbmdzIHRoYXQgY2FuJ3QgYmUgdW5kb25lLiAgRG9uJ3QgZ2V0IHVzaGVyZWQgaW50byBhIGNvcm5lciBmcm9tIHdoaWNoCit5b3UgY2Fubm90IGVzY2FwZS4gIEEgY29ybmVyZWQgcmF0IG1heSBiZSBkYW5nZXJvdXMgLSBhIGNvcm5lcmVkIG1hbmFnZXIKK2lzIGp1c3QgcGl0aWZ1bC4gCisKK0l0IHR1cm5zIG91dCB0aGF0IHNpbmNlIG5vYm9keSB3b3VsZCBiZSBzdHVwaWQgZW5vdWdoIHRvIGV2ZXIgcmVhbGx5IGxldAorYSBrZXJuZWwgbWFuYWdlciBoYXZlIGh1Z2UgZmlzY2FsIHJlc3BvbnNpYmlsaXR5IF9hbnl3YXlfLCBpdCdzIHVzdWFsbHkKK2ZhaXJseSBlYXN5IHRvIGJhY2t0cmFjay4gIFNpbmNlIHlvdSdyZSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byB3YXN0ZQoraHVnZSBhbW91bnRzIG9mIG1vbmV5IHRoYXQgeW91IG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHJlcGF5LCB0aGUgb25seQordGhpbmcgeW91IGNhbiBiYWNrdHJhY2sgb24gaXMgYSB0ZWNobmljYWwgZGVjaXNpb24sIGFuZCB0aGVyZQorYmFjay10cmFja2luZyBpcyB2ZXJ5IGVhc3k6IGp1c3QgdGVsbCBldmVyeWJvZHkgdGhhdCB5b3Ugd2VyZSBhbgoraW5jb21wZXRlbnQgbmluY29tcG9vcCwgc2F5IHlvdSdyZSBzb3JyeSwgYW5kIHVuZG8gYWxsIHRoZSB3b3J0aGxlc3MKK3dvcmsgeW91IGhhZCBwZW9wbGUgd29yayBvbiBmb3IgdGhlIGxhc3QgeWVhci4gIFN1ZGRlbmx5IHRoZSBkZWNpc2lvbgoreW91IG1hZGUgYSB5ZWFyIGFnbyB3YXNuJ3QgYSBiaWcgZGVjaXNpb24gYWZ0ZXIgYWxsLCBzaW5jZSBpdCBjb3VsZCBiZQorZWFzaWx5IHVuZG9uZS4gCisKK0l0IHR1cm5zIG91dCB0aGF0IHNvbWUgcGVvcGxlIGhhdmUgdHJvdWJsZSB3aXRoIHRoaXMgYXBwcm9hY2gsIGZvciB0d28KK3JlYXNvbnM6CisgLSBhZG1pdHRpbmcgeW91IHdlcmUgYW4gaWRpb3QgaXMgaGFyZGVyIHRoYW4gaXQgbG9va3MuICBXZSBhbGwgbGlrZSB0bworICAgbWFpbnRhaW4gYXBwZWFyYW5jZXMsIGFuZCBjb21pbmcgb3V0IGluIHB1YmxpYyB0byBzYXkgdGhhdCB5b3Ugd2VyZQorICAgd3JvbmcgaXMgc29tZXRpbWVzIHZlcnkgaGFyZCBpbmRlZWQuIAorIC0gaGF2aW5nIHNvbWVib2R5IHRlbGwgeW91IHRoYXQgd2hhdCB5b3Ugd29ya2VkIG9uIGZvciB0aGUgbGFzdCB5ZWFyCisgICB3YXNuJ3Qgd29ydGh3aGlsZSBhZnRlciBhbGwgY2FuIGJlIGhhcmQgb24gdGhlIHBvb3IgbG93bHkgZW5naW5lZXJzCisgICB0b28sIGFuZCB3aGlsZSB0aGUgYWN0dWFsIF93b3JrXyB3YXMgZWFzeSBlbm91Z2ggdG8gdW5kbyBieSBqdXN0CisgICBkZWxldGluZyBpdCwgeW91IG1heSBoYXZlIGlycmV2b2NhYmx5IGxvc3QgdGhlIHRydXN0IG9mIHRoYXQKKyAgIGVuZ2luZWVyLiAgQW5kIHJlbWVtYmVyOiAiaXJyZXZvY2FibGUiIHdhcyB3aGF0IHdlIHRyaWVkIHRvIGF2b2lkIGluCisgICB0aGUgZmlyc3QgcGxhY2UsIGFuZCB5b3VyIGRlY2lzaW9uIGVuZGVkIHVwIGJlaW5nIGEgYmlnIG9uZSBhZnRlcgorICAgYWxsLiAKKworSGFwcGlseSwgYm90aCBvZiB0aGVzZSByZWFzb25zIGNhbiBiZSBtaXRpZ2F0ZWQgZWZmZWN0aXZlbHkgYnkganVzdAorYWRtaXR0aW5nIHVwLWZyb250IHRoYXQgeW91IGRvbid0IGhhdmUgYSBmcmlnZ2luJyBjbHVlLCBhbmQgdGVsbGluZworcGVvcGxlIGFoZWFkIG9mIHRoZSBmYWN0IHRoYXQgeW91ciBkZWNpc2lvbiBpcyBwdXJlbHkgcHJlbGltaW5hcnksIGFuZAorbWlnaHQgYmUgdGhlIHdyb25nIHRoaW5nLiAgWW91IHNob3VsZCBhbHdheXMgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gY2hhbmdlCit5b3VyIG1pbmQsIGFuZCBtYWtlIHBlb3BsZSB2ZXJ5IF9hd2FyZV8gb2YgdGhhdC4gIEFuZCBpdCdzIG11Y2ggZWFzaWVyCit0byBhZG1pdCB0aGF0IHlvdSBhcmUgc3R1cGlkIHdoZW4geW91IGhhdmVuJ3QgX3lldF8gZG9uZSB0aGUgcmVhbGx5CitzdHVwaWQgdGhpbmcuCisKK1RoZW4sIHdoZW4gaXQgcmVhbGx5IGRvZXMgdHVybiBvdXQgdG8gYmUgc3R1cGlkLCBwZW9wbGUganVzdCByb2xsIHRoZWlyCitleWVzIGFuZCBzYXkgIk9vcHMsIGhlIGRpZCBpdCBhZ2FpbiIuICAKKworVGhpcyBwcmVlbXB0aXZlIGFkbWlzc2lvbiBvZiBpbmNvbXBldGVuY2UgbWlnaHQgYWxzbyBtYWtlIHRoZSBwZW9wbGUgd2hvCithY3R1YWxseSBkbyB0aGUgd29yayBhbHNvIHRoaW5rIHR3aWNlIGFib3V0IHdoZXRoZXIgaXQncyB3b3J0aCBkb2luZyBvcgorbm90LiAgQWZ0ZXIgYWxsLCBpZiBfdGhleV8gYXJlbid0IGNlcnRhaW4gd2hldGhlciBpdCdzIGEgZ29vZCBpZGVhLCB5b3UKK3N1cmUgYXMgaGVsbCBzaG91bGRuJ3QgZW5jb3VyYWdlIHRoZW0gYnkgcHJvbWlzaW5nIHRoZW0gdGhhdCB3aGF0IHRoZXkKK3dvcmsgb24gd2lsbCBiZSBpbmNsdWRlZC4gIE1ha2UgdGhlbSBhdCBsZWFzdCB0aGluayB0d2ljZSBiZWZvcmUgdGhleQorZW1iYXJrIG9uIGEgYmlnIGVuZGVhdm9yLiAKKworUmVtZW1iZXI6IHRoZXknZCBiZXR0ZXIga25vdyBtb3JlIGFib3V0IHRoZSBkZXRhaWxzIHRoYW4geW91IGRvLCBhbmQKK3RoZXkgdXN1YWxseSBhbHJlYWR5IHRoaW5rIHRoZXkgaGF2ZSB0aGUgYW5zd2VyIHRvIGV2ZXJ5dGhpbmcuICBUaGUgYmVzdAordGhpbmcgeW91IGNhbiBkbyBhcyBhIG1hbmFnZXIgaXMgbm90IHRvIGluc3RpbGwgY29uZmlkZW5jZSwgYnV0IHJhdGhlciBhCitoZWFsdGh5IGRvc2Ugb2YgY3JpdGljYWwgdGhpbmtpbmcgb24gd2hhdCB0aGV5IGRvLiAKKworQnR3LCBhbm90aGVyIHdheSB0byBhdm9pZCBhIGRlY2lzaW9uIGlzIHRvIHBsYWludGl2ZWx5IGp1c3Qgd2hpbmUgImNhbid0Cit3ZSBqdXN0IGRvIGJvdGg/IiBhbmQgbG9vayBwaXRpZnVsLiAgVHJ1c3QgbWUsIGl0IHdvcmtzLiAgSWYgaXQncyBub3QKK2NsZWFyIHdoaWNoIGFwcHJvYWNoIGlzIGJldHRlciwgdGhleSdsbCBldmVudHVhbGx5IGZpZ3VyZSBpdCBvdXQuICBUaGUKK2Fuc3dlciBtYXkgZW5kIHVwIGJlaW5nIHRoYXQgYm90aCB0ZWFtcyBnZXQgc28gZnJ1c3RyYXRlZCBieSB0aGUKK3NpdHVhdGlvbiB0aGF0IHRoZXkganVzdCBnaXZlIHVwLiAKKworVGhhdCBtYXkgc291bmQgbGlrZSBhIGZhaWx1cmUsIGJ1dCBpdCdzIHVzdWFsbHkgYSBzaWduIHRoYXQgdGhlcmUgd2FzCitzb21ldGhpbmcgd3Jvbmcgd2l0aCBib3RoIHByb2plY3RzLCBhbmQgdGhlIHJlYXNvbiB0aGUgcGVvcGxlIGludm9sdmVkCitjb3VsZG4ndCBkZWNpZGUgd2FzIHRoYXQgdGhleSB3ZXJlIGJvdGggd3JvbmcuICBZb3UgZW5kIHVwIGNvbWluZyB1cAorc21lbGxpbmcgbGlrZSByb3NlcywgYW5kIHlvdSBhdm9pZGVkIHlldCBhbm90aGVyIGRlY2lzaW9uIHRoYXQgeW91IGNvdWxkCitoYXZlIHNjcmV3ZWQgdXAgb24uIAorCisKKwkJQ2hhcHRlciAyOiBQZW9wbGUKKworTW9zdCBwZW9wbGUgYXJlIGlkaW90cywgYW5kIGJlaW5nIGEgbWFuYWdlciBtZWFucyB5b3UnbGwgaGF2ZSB0byBkZWFsCit3aXRoIGl0LCBhbmQgcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCB0aGF0IF90aGV5XyBoYXZlIHRvIGRlYWwgd2l0aAorX3lvdV8uIAorCitJdCB0dXJucyBvdXQgdGhhdCB3aGlsZSBpdCdzIGVhc3kgdG8gdW5kbyB0ZWNobmljYWwgbWlzdGFrZXMsIGl0J3Mgbm90CithcyBlYXN5IHRvIHVuZG8gcGVyc29uYWxpdHkgZGlzb3JkZXJzLiAgWW91IGp1c3QgaGF2ZSB0byBsaXZlIHdpdGgKK3RoZWlycyAtIGFuZCB5b3Vycy4gCisKK0hvd2V2ZXIsIGluIG9yZGVyIHRvIHByZXBhcmUgeW91cnNlbGYgYXMgYSBrZXJuZWwgbWFuYWdlciwgaXQncyBiZXN0IHRvCityZW1lbWJlciBub3QgdG8gYnVybiBhbnkgYnJpZGdlcywgYm9tYiBhbnkgaW5ub2NlbnQgdmlsbGFnZXJzLCBvcgorYWxpZW5hdGUgdG9vIG1hbnkga2VybmVsIGRldmVsb3BlcnMuIEl0IHR1cm5zIG91dCB0aGF0IGFsaWVuYXRpbmcgcGVvcGxlCitpcyBmYWlybHkgZWFzeSwgYW5kIHVuLWFsaWVuYXRpbmcgdGhlbSBpcyBoYXJkLiBUaHVzICJhbGllbmF0aW5nIgoraW1tZWRpYXRlbHkgZmFsbHMgdW5kZXIgdGhlIGhlYWRpbmcgb2YgIm5vdCByZXZlcnNpYmxlIiwgYW5kIGJlY29tZXMgYQorbm8tbm8gYWNjb3JkaW5nIHRvIENoYXB0ZXIgMS4KKworVGhlcmUncyBqdXN0IGEgZmV3IHNpbXBsZSBydWxlcyBoZXJlOgorICgxKSBkb24ndCBjYWxsIHBlb3BsZSBkKmNraGVhZHMgKGF0IGxlYXN0IG5vdCBpbiBwdWJsaWMpCisgKDIpIGxlYXJuIGhvdyB0byBhcG9sb2dpemUgd2hlbiB5b3UgZm9yZ290IHJ1bGUgKDEpCisKK1RoZSBwcm9ibGVtIHdpdGggIzEgaXMgdGhhdCBpdCdzIHZlcnkgZWFzeSB0byBkbywgc2luY2UgeW91IGNhbiBzYXkKKyJ5b3UncmUgYSBkKmNraGVhZCIgaW4gbWlsbGlvbnMgb2YgZGlmZmVyZW50IHdheXMgKCopLCBzb21ldGltZXMgd2l0aG91dAorZXZlbiByZWFsaXppbmcgaXQsIGFuZCBhbG1vc3QgYWx3YXlzIHdpdGggYSB3aGl0ZS1ob3QgY29udmljdGlvbiB0aGF0Cit5b3UgYXJlIHJpZ2h0LiAKKworQW5kIHRoZSBtb3JlIGNvbnZpbmNlZCB5b3UgYXJlIHRoYXQgeW91IGFyZSByaWdodCAoYW5kIGxldCdzIGZhY2UgaXQsCit5b3UgY2FuIGNhbGwganVzdCBhYm91dCBfYW55Ym9keV8gYSBkKmNraGVhZCwgYW5kIHlvdSBvZnRlbiBfd2lsbF8gYmUKK3JpZ2h0KSwgdGhlIGhhcmRlciBpdCBlbmRzIHVwIGJlaW5nIHRvIGFwb2xvZ2l6ZSBhZnRlcndhcmRzLiAKKworVG8gc29sdmUgdGhpcyBwcm9ibGVtLCB5b3UgcmVhbGx5IG9ubHkgaGF2ZSB0d28gb3B0aW9uczoKKyAtIGdldCByZWFsbHkgZ29vZCBhdCBhcG9sb2dpZXMKKyAtIHNwcmVhZCB0aGUgImxvdmUiIG91dCBzbyBldmVubHkgdGhhdCBub2JvZHkgcmVhbGx5IGVuZHMgdXAgZmVlbGluZworICAgbGlrZSB0aGV5IGdldCB1bmZhaXJseSB0YXJnZXRlZC4gIE1ha2UgaXQgaW52ZW50aXZlIGVub3VnaCwgYW5kIHRoZXkKKyAgIG1pZ2h0IGV2ZW4gYmUgYW11c2VkLiAKKworVGhlIG9wdGlvbiBvZiBiZWluZyB1bmZhaWxpbmdseSBwb2xpdGUgcmVhbGx5IGRvZXNuJ3QgZXhpc3QuIE5vYm9keSB3aWxsCit0cnVzdCBzb21lYm9keSB3aG8gaXMgc28gY2xlYXJseSBoaWRpbmcgaGlzIHRydWUgY2hhcmFjdGVyLgorCisoKikgUGF1bCBTaW1vbiBzYW5nICJGaWZ0eSBXYXlzIHRvIExvc2UgWW91ciBMb3ZlciIsIGJlY2F1c2UgcXVpdGUKK2ZyYW5rbHksICJBIE1pbGxpb24gV2F5cyB0byBUZWxsIGEgRGV2ZWxvcGVyIEhlIElzIGEgRCpja2hlYWQiIGRvZXNuJ3QKK3NjYW4gbmVhcmx5IGFzIHdlbGwuICBCdXQgSSdtIHN1cmUgaGUgdGhvdWdodCBhYm91dCBpdC4gCisKKworCQlDaGFwdGVyIDM6IFBlb3BsZSBJSSAtIHRoZSBHb29kIEtpbmQKKworV2hpbGUgaXQgdHVybnMgb3V0IHRoYXQgbW9zdCBwZW9wbGUgYXJlIGlkaW90cywgdGhlIGNvcm9sbGFyeSB0byB0aGF0IGlzCitzYWRseSB0aGF0IHlvdSBhcmUgb25lIHRvbywgYW5kIHRoYXQgd2hpbGUgd2UgY2FuIGFsbCBiYXNrIGluIHRoZSBzZWN1cmUKK2tub3dsZWRnZSB0aGF0IHdlJ3JlIGJldHRlciB0aGFuIHRoZSBhdmVyYWdlIHBlcnNvbiAobGV0J3MgZmFjZSBpdCwKK25vYm9keSBldmVyIGJlbGlldmVzIHRoYXQgdGhleSdyZSBhdmVyYWdlIG9yIGJlbG93LWF2ZXJhZ2UpLCB3ZSBzaG91bGQKK2Fsc28gYWRtaXQgdGhhdCB3ZSdyZSBub3QgdGhlIHNoYXJwZXN0IGtuaWZlIGFyb3VuZCwgYW5kIHRoZXJlIHdpbGwgYmUKK290aGVyIHBlb3BsZSB0aGF0IGFyZSBsZXNzIG9mIGFuIGlkaW90IHRoYXQgeW91IGFyZS4gCisKK1NvbWUgcGVvcGxlIHJlYWN0IGJhZGx5IHRvIHNtYXJ0IHBlb3BsZS4gIE90aGVycyB0YWtlIGFkdmFudGFnZSBvZiB0aGVtLiAKKworTWFrZSBzdXJlIHRoYXQgeW91LCBhcyBhIGtlcm5lbCBtYWludGFpbmVyLCBhcmUgaW4gdGhlIHNlY29uZCBncm91cC4gCitTdWNrIHVwIHRvIHRoZW0sIGJlY2F1c2UgdGhleSBhcmUgdGhlIHBlb3BsZSB3aG8gd2lsbCBtYWtlIHlvdXIgam9iCitlYXNpZXIuIEluIHBhcnRpY3VsYXIsIHRoZXknbGwgYmUgYWJsZSB0byBtYWtlIHlvdXIgZGVjaXNpb25zIGZvciB5b3UsCit3aGljaCBpcyB3aGF0IHRoZSBnYW1lIGlzIGFsbCBhYm91dC4KKworU28gd2hlbiB5b3UgZmluZCBzb21lYm9keSBzbWFydGVyIHRoYW4geW91IGFyZSwganVzdCBjb2FzdCBhbG9uZy4gIFlvdXIKK21hbmFnZW1lbnQgcmVzcG9uc2liaWxpdGllcyBsYXJnZWx5IGJlY29tZSBvbmVzIG9mIHNheWluZyAiU291bmRzIGxpa2UgYQorZ29vZCBpZGVhIC0gZ28gd2lsZCIsIG9yICJUaGF0IHNvdW5kcyBnb29kLCBidXQgd2hhdCBhYm91dCB4eHg/Ii4gIFRoZQorc2Vjb25kIHZlcnNpb24gaW4gcGFydGljdWxhciBpcyBhIGdyZWF0IHdheSB0byBlaXRoZXIgbGVhcm4gc29tZXRoaW5nCituZXcgYWJvdXQgInh4eCIgb3Igc2VlbSBfZXh0cmFfIG1hbmFnZXJpYWwgYnkgcG9pbnRpbmcgb3V0IHNvbWV0aGluZyB0aGUKK3NtYXJ0ZXIgcGVyc29uIGhhZG4ndCB0aG91Z2h0IGFib3V0LiAgSW4gZWl0aGVyIGNhc2UsIHlvdSB3aW4uCisKK09uZSB0aGluZyB0byBsb29rIG91dCBmb3IgaXMgdG8gcmVhbGl6ZSB0aGF0IGdyZWF0bmVzcyBpbiBvbmUgYXJlYSBkb2VzCitub3QgbmVjZXNzYXJpbHkgdHJhbnNsYXRlIHRvIG90aGVyIGFyZWFzLiAgU28geW91IG1pZ2h0IHByb2QgcGVvcGxlIGluCitzcGVjaWZpYyBkaXJlY3Rpb25zLCBidXQgbGV0J3MgZmFjZSBpdCwgdGhleSBtaWdodCBiZSBnb29kIGF0IHdoYXQgdGhleQorZG8sIGFuZCBzdWNrIGF0IGV2ZXJ5dGhpbmcgZWxzZS4gIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBwZW9wbGUgdGVuZCB0bworbmF0dXJhbGx5IGdyYXZpdGF0ZSBiYWNrIHRvIHdoYXQgdGhleSBhcmUgZ29vZCBhdCwgc28gaXQncyBub3QgbGlrZSB5b3UKK2FyZSBkb2luZyBzb21ldGhpbmcgaXJyZXZlcnNpYmxlIHdoZW4geW91IF9kb18gcHJvZCB0aGVtIGluIHNvbWUKK2RpcmVjdGlvbiwganVzdCBkb24ndCBwdXNoIHRvbyBoYXJkLgorCisKKwkJQ2hhcHRlciA0OiBQbGFjaW5nIGJsYW1lCisKK1RoaW5ncyB3aWxsIGdvIHdyb25nLCBhbmQgcGVvcGxlIHdhbnQgc29tZWJvZHkgdG8gYmxhbWUuIFRhZywgeW91J3JlIGl0LgorCitJdCdzIG5vdCBhY3R1YWxseSB0aGF0IGhhcmQgdG8gYWNjZXB0IHRoZSBibGFtZSwgZXNwZWNpYWxseSBpZiBwZW9wbGUKK2tpbmQgb2YgcmVhbGl6ZSB0aGF0IGl0IHdhc24ndCBfYWxsXyB5b3VyIGZhdWx0LiAgV2hpY2ggYnJpbmdzIHVzIHRvIHRoZQorYmVzdCB3YXkgb2YgdGFraW5nIHRoZSBibGFtZTogZG8gaXQgZm9yIGFub3RoZXIgZ3V5LiBZb3UnbGwgZmVlbCBnb29kCitmb3IgdGFraW5nIHRoZSBmYWxsLCBoZSdsbCBmZWVsIGdvb2QgYWJvdXQgbm90IGdldHRpbmcgYmxhbWVkLCBhbmQgdGhlCitndXkgd2hvIGxvc3QgaGlzIHdob2xlIDM2R0IgcG9ybi1jb2xsZWN0aW9uIGJlY2F1c2Ugb2YgeW91ciBpbmNvbXBldGVuY2UKK3dpbGwgZ3J1ZGdpbmdseSBhZG1pdCB0aGF0IHlvdSBhdCBsZWFzdCBkaWRuJ3QgdHJ5IHRvIHdlYXNlbCBvdXQgb2YgaXQuCisKK1RoZW4gbWFrZSB0aGUgZGV2ZWxvcGVyIHdobyByZWFsbHkgc2NyZXdlZCB1cCAoaWYgeW91IGNhbiBmaW5kIGhpbSkga25vdworX2luX3ByaXZhdGVfIHRoYXQgaGUgc2NyZXdlZCB1cC4gIE5vdCBqdXN0IHNvIGhlIGNhbiBhdm9pZCBpdCBpbiB0aGUKK2Z1dHVyZSwgYnV0IHNvIHRoYXQgaGUga25vd3MgaGUgb3dlcyB5b3Ugb25lLiAgQW5kLCBwZXJoYXBzIGV2ZW4gbW9yZQoraW1wb3J0YW50bHksIGhlJ3MgYWxzbyBsaWtlbHkgdGhlIHBlcnNvbiB3aG8gY2FuIGZpeCBpdC4gIEJlY2F1c2UsIGxldCdzCitmYWNlIGl0LCBpdCBzdXJlIGFpbid0IHlvdS4gCisKK1Rha2luZyB0aGUgYmxhbWUgaXMgYWxzbyB3aHkgeW91IGdldCB0byBiZSBtYW5hZ2VyIGluIHRoZSBmaXJzdCBwbGFjZS4gCitJdCdzIHBhcnQgb2Ygd2hhdCBtYWtlcyBwZW9wbGUgdHJ1c3QgeW91LCBhbmQgYWxsb3cgeW91IHRoZSBwb3RlbnRpYWwKK2dsb3J5LCBiZWNhdXNlIHlvdSdyZSB0aGUgb25lIHdobyBnZXRzIHRvIHNheSAiSSBzY3Jld2VkIHVwIi4gIEFuZCBpZgoreW91J3ZlIGZvbGxvd2VkIHRoZSBwcmV2aW91cyBydWxlcywgeW91J2xsIGJlIHByZXR0eSBnb29kIGF0IHNheWluZyB0aGF0CitieSBub3cuIAorCisKKwkJQ2hhcHRlciA1OiBUaGluZ3MgdG8gYXZvaWQKKworVGhlcmUncyBvbmUgdGhpbmcgcGVvcGxlIGhhdGUgZXZlbiBtb3JlIHRoYW4gYmVpbmcgY2FsbGVkICJkKmNraGVhZCIsCithbmQgdGhhdCBpcyBiZWluZyBjYWxsZWQgYSAiZCpja2hlYWQiIGluIGEgc2FuY3RpbW9uaW91cyB2b2ljZS4gIFRoZQorZmlyc3QgeW91IGNhbiBhcG9sb2dpemUgZm9yLCB0aGUgc2Vjb25kIG9uZSB5b3Ugd29uJ3QgcmVhbGx5IGdldCB0aGUKK2NoYW5jZS4gIFRoZXkgbGlrZWx5IHdpbGwgbm8gbG9uZ2VyIGJlIGxpc3RlbmluZyBldmVuIGlmIHlvdSBvdGhlcndpc2UKK2RvIGEgZ29vZCBqb2IuIAorCitXZSBhbGwgdGhpbmsgd2UncmUgYmV0dGVyIHRoYW4gYW55Ym9keSBlbHNlLCB3aGljaCBtZWFucyB0aGF0IHdoZW4KK3NvbWVib2R5IGVsc2UgcHV0cyBvbiBhaXJzLCBpdCBfcmVhbGx5XyBydWJzIHVzIHRoZSB3cm9uZyB3YXkuICBZb3UgbWF5CitiZSBtb3JhbGx5IGFuZCBpbnRlbGxlY3R1YWxseSBzdXBlcmlvciB0byBldmVyeWJvZHkgYXJvdW5kIHlvdSwgYnV0Citkb24ndCB0cnkgdG8gbWFrZSBpdCB0b28gb2J2aW91cyB1bmxlc3MgeW91IHJlYWxseSBfaW50ZW5kXyB0byBpcnJpdGF0ZQorc29tZWJvZHkgKCopLiAKKworU2ltaWxhcmx5LCBkb24ndCBiZSB0b28gcG9saXRlIG9yIHN1YnRsZSBhYm91dCB0aGluZ3MuIFBvbGl0ZW5lc3MgZWFzaWx5CitlbmRzIHVwIGdvaW5nIG92ZXJib2FyZCBhbmQgaGlkaW5nIHRoZSBwcm9ibGVtLCBhbmQgYXMgdGhleSBzYXksICJPbiB0aGUKK2ludGVybmV0LCBub2JvZHkgY2FuIGhlYXIgeW91IGJlaW5nIHN1YnRsZSIuIFVzZSBhIGJpZyBibHVudCBvYmplY3QgdG8KK2hhbW1lciB0aGUgcG9pbnQgaW4sIGJlY2F1c2UgeW91IGNhbid0IHJlYWxseSBkZXBlbmQgb24gcGVvcGxlIGdldHRpbmcKK3lvdXIgcG9pbnQgb3RoZXJ3aXNlLgorCitTb21lIGh1bW9yIGNhbiBoZWxwIHBhZCBib3RoIHRoZSBibHVudG5lc3MgYW5kIHRoZSBtb3JhbGl6aW5nLiAgR29pbmcKK292ZXJib2FyZCB0byB0aGUgcG9pbnQgb2YgYmVpbmcgcmlkaWN1bG91cyBjYW4gZHJpdmUgYSBwb2ludCBob21lCit3aXRob3V0IG1ha2luZyBpdCBwYWluZnVsIHRvIHRoZSByZWNpcGllbnQsIHdobyBqdXN0IHRoaW5rcyB5b3UncmUgYmVpbmcKK3NpbGx5LiAgSXQgY2FuIHRodXMgaGVscCBnZXQgdGhyb3VnaCB0aGUgcGVyc29uYWwgbWVudGFsIGJsb2NrIHdlIGFsbAoraGF2ZSBhYm91dCBjcml0aWNpc20uIAorCisoKikgSGludDogaW50ZXJuZXQgbmV3c2dyb3VwcyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHdvcmsKK2FyZSBncmVhdCB3YXlzIHRvIHRha2Ugb3V0IHlvdXIgZnJ1c3RyYXRpb25zIGF0IG90aGVyIHBlb3BsZS4gV3JpdGUKK2luc3VsdGluZyBwb3N0cyB3aXRoIGEgc25lZXIganVzdCB0byBnZXQgaW50byBhIGdvb2QgZmxhbWUgZXZlcnkgb25jZSBpbgorYSB3aGlsZSwgYW5kIHlvdSdsbCBmZWVsIGNsZWFuc2VkLiBKdXN0IGRvbid0IGNyYXAgdG9vIGNsb3NlIHRvIGhvbWUuCisKKworCQlDaGFwdGVyIDY6IFdoeSBtZT8KKworU2luY2UgeW91ciBtYWluIHJlc3BvbnNpYmlsaXR5IHNlZW1zIHRvIGJlIHRvIHRha2UgdGhlIGJsYW1lIGZvciBvdGhlcgorcGVvcGxlcyBtaXN0YWtlcywgYW5kIG1ha2UgaXQgcGFpbmZ1bGx5IG9idmlvdXMgdG8gZXZlcnlib2R5IGVsc2UgdGhhdAoreW91J3JlIGluY29tcGV0ZW50LCB0aGUgb2J2aW91cyBxdWVzdGlvbiBiZWNvbWVzIG9uZSBvZiB3aHkgZG8gaXQgaW4gdGhlCitmaXJzdCBwbGFjZT8KKworRmlyc3Qgb2ZmLCB3aGlsZSB5b3UgbWF5IG9yIG1heSBub3QgZ2V0IHNjcmVhbWluZyB0ZWVuYWdlIGdpcmxzIChvcgorYm95cywgbGV0J3Mgbm90IGJlIGp1ZGdtZW50YWwgb3Igc2V4aXN0IGhlcmUpIGtub2NraW5nIG9uIHlvdXIgZHJlc3NpbmcKK3Jvb20gZG9vciwgeW91IF93aWxsXyBnZXQgYW4gaW1tZW5zZSBmZWVsaW5nIG9mIHBlcnNvbmFsIGFjY29tcGxpc2htZW50Citmb3IgYmVpbmcgImluIGNoYXJnZSIuICBOZXZlciBtaW5kIHRoZSBmYWN0IHRoYXQgeW91J3JlIHJlYWxseSBsZWFkaW5nCitieSB0cnlpbmcgdG8ga2VlcCB1cCB3aXRoIGV2ZXJ5Ym9keSBlbHNlIGFuZCBydW5uaW5nIGFmdGVyIHRoZW0gYXMgZmFzdAorYXMgeW91IGNhbi4gIEV2ZXJ5Ym9keSB3aWxsIHN0aWxsIHRoaW5rIHlvdSdyZSB0aGUgcGVyc29uIGluIGNoYXJnZS4gCisKK0l0J3MgYSBncmVhdCBqb2IgaWYgeW91IGNhbiBoYWNrIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0lFQlVTLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vUENJRUJVUy1IT1dUTy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZjQyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUENJRUJVUy1IT1dUTy50eHQKQEAgLTAsMCArMSwyMTcgQEAKKwkJVGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlciBHdWlkZSBIT1dUTworCVRvbSBMIE5ndXllbiB0b20ubC5uZ3V5ZW5AaW50ZWwuY29tCisJCQkxMS8wMy8yMDA0CisKKzEuIEFib3V0IHRoaXMgZ3VpZGUKKworVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyCithbmQgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIGVuYWJsZSB0aGUgc2VydmljZSBkcml2ZXJzIHRvCityZWdpc3Rlci91bnJlZ2lzdGVyIHdpdGggdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlci4KKworMi4gQ29weXJpZ2h0IDIwMDQgSW50ZWwgQ29ycG9yYXRpb24KKworMy4gV2hhdCBpcyB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyCisKK0EgUENJIEV4cHJlc3MgUG9ydCBpcyBhIGxvZ2ljYWwgUENJLVBDSSBCcmlkZ2Ugc3RydWN0dXJlLiBUaGVyZQorYXJlIHR3byB0eXBlcyBvZiBQQ0kgRXhwcmVzcyBQb3J0OiB0aGUgUm9vdCBQb3J0IGFuZCB0aGUgU3dpdGNoCitQb3J0LiBUaGUgUm9vdCBQb3J0IG9yaWdpbmF0ZXMgYSBQQ0kgRXhwcmVzcyBsaW5rIGZyb20gYSBQQ0kgRXhwcmVzcworUm9vdCBDb21wbGV4IGFuZCB0aGUgU3dpdGNoIFBvcnQgY29ubmVjdHMgUENJIEV4cHJlc3MgbGlua3MgdG8KK2ludGVybmFsIGxvZ2ljYWwgUENJIGJ1c2VzLiBUaGUgU3dpdGNoIFBvcnQsIHdoaWNoIGhhcyBpdHMgc2Vjb25kYXJ5CitidXMgcmVwcmVzZW50aW5nIHRoZSBzd2l0Y2gncyBpbnRlcm5hbCByb3V0aW5nIGxvZ2ljLCBpcyBjYWxsZWQgdGhlCitzd2l0Y2gncyBVcHN0cmVhbSBQb3J0LiBUaGUgc3dpdGNoJ3MgRG93bnN0cmVhbSBQb3J0IGlzIGJyaWRnaW5nIGZyb20KK3N3aXRjaCdzIGludGVybmFsIHJvdXRpbmcgYnVzIHRvIGEgYnVzIHJlcHJlc2VudGluZyB0aGUgZG93bnN0cmVhbQorUENJIEV4cHJlc3MgbGluayBmcm9tIHRoZSBQQ0kgRXhwcmVzcyBTd2l0Y2guCisKK0EgUENJIEV4cHJlc3MgUG9ydCBjYW4gcHJvdmlkZSB1cCB0byBmb3VyIGRpc3RpbmN0IGZ1bmN0aW9ucywKK3JlZmVycmVkIHRvIGluIHRoaXMgZG9jdW1lbnQgYXMgc2VydmljZXMsIGRlcGVuZGluZyBvbiBpdHMgcG9ydCB0eXBlLgorUENJIEV4cHJlc3MgUG9ydCdzIHNlcnZpY2VzIGluY2x1ZGUgbmF0aXZlIGhvdHBsdWcgc3VwcG9ydCAoSFApLAorcG93ZXIgbWFuYWdlbWVudCBldmVudCBzdXBwb3J0IChQTUUpLCBhZHZhbmNlZCBlcnJvciByZXBvcnRpbmcKK3N1cHBvcnQgKEFFUiksIGFuZCB2aXJ0dWFsIGNoYW5uZWwgc3VwcG9ydCAoVkMpLiBUaGVzZSBzZXJ2aWNlcyBtYXkKK2JlIGhhbmRsZWQgYnkgYSBzaW5nbGUgY29tcGxleCBkcml2ZXIgb3IgYmUgaW5kaXZpZHVhbGx5IGRpc3RyaWJ1dGVkCithbmQgaGFuZGxlZCBieSBjb3JyZXNwb25kaW5nIHNlcnZpY2UgZHJpdmVycy4KKworNC4gV2h5IHVzZSB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgRHJpdmVyPworCitJbiBleGlzdGluZyBMaW51eCBrZXJuZWxzLCB0aGUgTGludXggRGV2aWNlIERyaXZlciBNb2RlbCBhbGxvd3MgYQorcGh5c2ljYWwgZGV2aWNlIHRvIGJlIGhhbmRsZWQgYnkgb25seSBhIHNpbmdsZSBkcml2ZXIuIFRoZSBQQ0kKK0V4cHJlc3MgUG9ydCBpcyBhIFBDSS1QQ0kgQnJpZGdlIGRldmljZSB3aXRoIG11bHRpcGxlIGRpc3RpbmN0CitzZXJ2aWNlcy4gVG8gbWFpbnRhaW4gYSBjbGVhbiBhbmQgc2ltcGxlIHNvbHV0aW9uIGVhY2ggc2VydmljZQorbWF5IGhhdmUgaXRzIG93biBzb2Z0d2FyZSBzZXJ2aWNlIGRyaXZlci4gSW4gdGhpcyBjYXNlIHNldmVyYWwKK3NlcnZpY2UgZHJpdmVycyB3aWxsIGNvbXBldGUgZm9yIGEgc2luZ2xlIFBDSS1QQ0kgQnJpZGdlIGRldmljZS4KK0ZvciBleGFtcGxlLCBpZiB0aGUgUENJIEV4cHJlc3MgUm9vdCBQb3J0IG5hdGl2ZSBob3RwbHVnIHNlcnZpY2UKK2RyaXZlciBpcyBsb2FkZWQgZmlyc3QsIGl0IGNsYWltcyBhIFBDSS1QQ0kgQnJpZGdlIFJvb3QgUG9ydC4gVGhlCitrZXJuZWwgdGhlcmVmb3JlIGRvZXMgbm90IGxvYWQgb3RoZXIgc2VydmljZSBkcml2ZXJzIGZvciB0aGF0IFJvb3QKK1BvcnQuIEluIG90aGVyIHdvcmRzLCBpdCBpcyBpbXBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgc2VydmljZQorZHJpdmVycyBsb2FkIGFuZCBydW4gb24gYSBQQ0ktUENJIEJyaWRnZSBkZXZpY2Ugc2ltdWx0YW5lb3VzbHkKK3VzaW5nIHRoZSBjdXJyZW50IGRyaXZlciBtb2RlbC4KKworVG8gZW5hYmxlIG11bHRpcGxlIHNlcnZpY2UgZHJpdmVycyBydW5uaW5nIHNpbXVsdGFuZW91c2x5IHJlcXVpcmVzCitoYXZpbmcgYSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIsIHdoaWNoIG1hbmFnZXMgYWxsIHBvcHVsYXRlZAorUENJIEV4cHJlc3MgUG9ydHMgYW5kIGRpc3RyaWJ1dGVzIGFsbCBwcm92aWRlZCBzZXJ2aWNlIHJlcXVlc3RzCit0byB0aGUgY29ycmVzcG9uZGluZyBzZXJ2aWNlIGRyaXZlcnMgYXMgcmVxdWlyZWQuIFNvbWUga2V5CithZHZhbnRhZ2VzIG9mIHVzaW5nIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgYXJlIGxpc3RlZCBiZWxvdzoKKworCS0gQWxsb3cgbXVsdGlwbGUgc2VydmljZSBkcml2ZXJzIHRvIHJ1biBzaW11bHRhbmVvdXNseSBvbgorCSAgYSBQQ0ktUENJIEJyaWRnZSBQb3J0IGRldmljZS4KKworCS0gQWxsb3cgc2VydmljZSBkcml2ZXJzIGltcGxlbWVudGVkIGluIGFuIGluZGVwZW5kZW50CisJICBzdGFnZWQgYXBwcm9hY2guCisJCisJLSBBbGxvdyBvbmUgc2VydmljZSBkcml2ZXIgdG8gcnVuIG9uIG11bHRpcGxlIFBDSS1QQ0kgQnJpZGdlCisJICBQb3J0IGRldmljZXMuIAorCisJLSBNYW5hZ2UgYW5kIGRpc3RyaWJ1dGUgcmVzb3VyY2VzIG9mIGEgUENJLVBDSSBCcmlkZ2UgUG9ydAorCSAgZGV2aWNlIHRvIHJlcXVlc3RlZCBzZXJ2aWNlIGRyaXZlcnMuCisKKzUuIENvbmZpZ3VyaW5nIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIgdnMuIFNlcnZpY2UgRHJpdmVycworCis1LjEgSW5jbHVkaW5nIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIgU3VwcG9ydCBpbnRvIHRoZSBLZXJuZWwKKworSW5jbHVkaW5nIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBQQ0kKK0V4cHJlc3Mgc3VwcG9ydCBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhlIGtlcm5lbCB3aWxsCithdXRvbWF0aWNhbGx5IGluY2x1ZGUgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIGRyaXZlciBhcyBhIGtlcm5lbAorZHJpdmVyIHdoZW4gdGhlIFBDSSBFeHByZXNzIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsLgorCis1LjIgRW5hYmxpbmcgU2VydmljZSBEcml2ZXIgU3VwcG9ydAorCitQQ0kgZGV2aWNlIGRyaXZlcnMgYXJlIGltcGxlbWVudGVkIGJhc2VkIG9uIExpbnV4IERldmljZSBEcml2ZXIgTW9kZWwuCitBbGwgc2VydmljZSBkcml2ZXJzIGFyZSBQQ0kgZGV2aWNlIGRyaXZlcnMuIEFzIGRpc2N1c3NlZCBhYm92ZSwgaXQgaXMKK2ltcG9zc2libGUgdG8gbG9hZCBhbnkgc2VydmljZSBkcml2ZXIgb25jZSB0aGUga2VybmVsIGhhcyBsb2FkZWQgdGhlCitQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBEcml2ZXIuIFRvIG1lZXQgdGhlIFBDSSBFeHByZXNzIFBvcnQgQnVzIERyaXZlcgorTW9kZWwgcmVxdWlyZXMgc29tZSBtaW5pbWFsIGNoYW5nZXMgb24gZXhpc3Rpbmcgc2VydmljZSBkcml2ZXJzIHRoYXQKK2ltcG9zZXMgbm8gaW1wYWN0IG9uIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGV4aXN0aW5nIHNlcnZpY2UgZHJpdmVycy4KKworQSBzZXJ2aWNlIGRyaXZlciBpcyByZXF1aXJlZCB0byB1c2UgdGhlIHR3byBBUElzIHNob3duIGJlbG93IHRvCityZWdpc3RlciBpdHMgc2VydmljZSB3aXRoIHRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgKHNlZSAKK3NlY3Rpb24gNS4yLjEgJiA1LjIuMikuIEl0IGlzIGltcG9ydGFudCB0aGF0IGEgc2VydmljZSBkcml2ZXIKK2luaXRpYWxpemVzIHRoZSBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgZGF0YSBzdHJ1Y3R1cmUsIGluY2x1ZGVkIGluCitoZWFkZXIgZmlsZSAvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oLCBiZWZvcmUgY2FsbGluZyB0aGVzZSBBUElzLgorRmFpbHVyZSB0byBkbyBzbyB3aWxsIHJlc3VsdCBhbiBpZGVudGl0eSBtaXNtYXRjaCwgd2hpY2ggcHJldmVudHMKK3RoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIgZnJvbSBsb2FkaW5nIGEgc2VydmljZSBkcml2ZXIuCisKKzUuMi4xIHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyCisKK2ludCBwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlcihzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpuZXcpCisKK1RoaXMgQVBJIHJlcGxhY2VzIHRoZSBMaW51eCBEcml2ZXIgTW9kZWwncyBwY2lfbW9kdWxlX2luaXQgQVBJLiBBCitzZXJ2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGxzIHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyIGF0Cittb2R1bGUgaW5pdC4gTm90ZSB0aGF0IGFmdGVyIHNlcnZpY2UgZHJpdmVyIGJlaW5nIGxvYWRlZCwgY2FsbHMKK3N1Y2ggYXMgcGNpX2VuYWJsZV9kZXZpY2UoZGV2KSBhbmQgcGNpX3NldF9tYXN0ZXIoZGV2KSBhcmUgbm8gbG9uZ2VyCituZWNlc3Nhcnkgc2luY2UgdGhlc2UgY2FsbHMgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBQQ0kgUG9ydCBCdXMgZHJpdmVyLgorCis1LjIuMiBwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyCisKK3ZvaWQgcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpuZXcpCisKK3BjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIgcmVwbGFjZXMgdGhlIExpbnV4IERyaXZlciBNb2RlbCdzCitwY2lfdW5yZWdpc3Rlcl9kcml2ZXIuIEl0J3MgYWx3YXlzIGNhbGxlZCBieSBzZXJ2aWNlIGRyaXZlciB3aGVuIGEKK21vZHVsZSBleGl0cy4KKworNS4yLjMgU2FtcGxlIENvZGUKKworQmVsb3cgaXMgc2FtcGxlIHNlcnZpY2UgZHJpdmVyIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZXJ2aWNlCitkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuCisKK3N0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgc2VydmljZV9pZFtdID0geyB7CisJLnZlbmRvciA9IFBDSV9BTllfSUQsCisJLmRldmljZSA9IFBDSV9BTllfSUQsCisJLnBvcnRfdHlwZSA9IFBDSUVfUkNfUE9SVCwKKwkuc2VydmljZV90eXBlID0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAorCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIHJvb3RfYWVyZHJ2ID0geworCS5uYW1lCQk9IChjaGFyICopZGV2aWNlX25hbWUsCisJLmlkX3RhYmxlCT0gJnNlcnZpY2VfaWRbMF0sCisKKwkucHJvYmUJCT0gYWVyZHJ2X2xvYWQsCisJLnJlbW92ZQkJPSBhZXJkcnZfdW5sb2FkLAorCisJLnN1c3BlbmQJPSBhZXJkcnZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFlcmRydl9yZXN1bWUsCit9OworCitCZWxvdyBpcyBhIHNhbXBsZSBjb2RlIGZvciByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nIGEgc2VydmljZQorZHJpdmVyLgorCitzdGF0aWMgaW50IF9faW5pdCBhZXJkcnZfc2VydmljZV9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IDA7CisJCisJcmV0dmFsID0gcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJnJvb3RfYWVyZHJ2KTsKKwlpZiAoIXJldHZhbCkgeworCQkvKgorCQkgKiBGSVggTUUKKwkJICovCisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZXJkcnZfc2VydmljZV9leGl0KHZvaWQpIAoreworCXBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIoJnJvb3RfYWVyZHJ2KTsKK30KKworbW9kdWxlX2luaXQoYWVyZHJ2X3NlcnZpY2VfaW5pdCk7Cittb2R1bGVfZXhpdChhZXJkcnZfc2VydmljZV9leGl0KTsKKworNi4gUG9zc2libGUgUmVzb3VyY2UgQ29uZmxpY3RzCisKK1NpbmNlIGFsbCBzZXJ2aWNlIGRyaXZlcnMgb2YgYSBQQ0ktUENJIEJyaWRnZSBQb3J0IGRldmljZSBhcmUKK2FsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91c2x5LCBiZWxvdyBsaXN0cyBhIGZldyBvZiBwb3NzaWJsZSByZXNvdXJjZQorY29uZmxpY3RzIHdpdGggcHJvcG9zZWQgc29sdXRpb25zLgorCis2LjEgTVNJIFZlY3RvciBSZXNvdXJjZQorCitUaGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlIGVuYWJsZXMgYSBkZXZpY2Ugc29mdHdhcmUgZHJpdmVyIHRvIGNhbGwKK3BjaV9lbmFibGVfbXNpIHRvIHJlcXVlc3QgTVNJIGJhc2VkIGludGVycnVwdHMuIE9uY2UgTVNJIGludGVycnVwdHMKK2FyZSBlbmFibGVkIG9uIGEgZGV2aWNlLCBpdCBzdGF5cyBpbiB0aGlzIG1vZGUgdW50aWwgYSBkZXZpY2UgZHJpdmVyCitjYWxscyBwY2lfZGlzYWJsZV9tc2kgdG8gZGlzYWJsZSBNU0kgaW50ZXJydXB0cyBhbmQgcmV2ZXJ0IGJhY2sgdG8KK0lOVHggZW11bGF0aW9uIG1vZGUuIFNpbmNlIHNlcnZpY2UgZHJpdmVycyBvZiB0aGUgc2FtZSBQQ0ktUENJIEJyaWRnZQorcG9ydCBzaGFyZSB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UsIGlmIGFuIGluZGl2aWR1YWwgc2VydmljZSBkcml2ZXIKK2NhbGxzIHBjaV9lbmFibGVfbXNpL3BjaV9kaXNhYmxlX21zaSBpdCBtYXkgcmVzdWx0IHVucHJlZGljdGFibGUKK2JlaGF2aW9yLiBGb3IgZXhhbXBsZSwgdHdvIHNlcnZpY2UgZHJpdmVycyBydW4gc2ltdWx0YW5lb3VzbHkgb24gdGhlCitzYW1lIHBoeXNpY2FsIFJvb3QgUG9ydC4gQm90aCBzZXJ2aWNlIGRyaXZlcnMgY2FsbCBwY2lfZW5hYmxlX21zaSB0bworcmVxdWVzdCBNU0kgYmFzZWQgaW50ZXJydXB0cy4gQSBzZXJ2aWNlIGRyaXZlciBtYXkgbm90IGtub3cgd2hldGhlcgorYW55IG90aGVyIHNlcnZpY2UgZHJpdmVycyBoYXZlIHJ1biBvbiB0aGlzIFJvb3QgUG9ydC4gSWYgZWl0aGVyIG9uZQorb2YgdGhlbSBjYWxscyBwY2lfZGlzYWJsZV9tc2ksIGl0IHB1dHMgdGhlIG90aGVyIHNlcnZpY2UgZHJpdmVyCitpbiBhIHdyb25nIGludGVycnVwdCBtb2RlLiAKKworVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24gYWxsIHNlcnZpY2UgZHJpdmVycyBhcmUgbm90IHBlcm1pdHRlZCB0bworc3dpdGNoIGludGVycnVwdCBtb2RlIG9uIGl0cyBkZXZpY2UuIFRoZSBQQ0kgRXhwcmVzcyBQb3J0IEJ1cyBkcml2ZXIKK2lzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZXJydXB0IG1vZGUgYW5kIHRoaXMgc2hvdWxkIGJlCit0cmFuc3BhcmVudCB0byBzZXJ2aWNlIGRyaXZlcnMuIFNlcnZpY2UgZHJpdmVycyBuZWVkIHRvIGtub3cgb25seQordGhlIHZlY3RvciBJUlEgYXNzaWduZWQgdG8gdGhlIGZpZWxkIGlycSBvZiBzdHJ1Y3QgcGNpZV9kZXZpY2UsIHdoaWNoCitpcyBwYXNzZWQgaW4gd2hlbiB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIHByb2JlcyBlYWNoIHNlcnZpY2UKK2RyaXZlci4gU2VydmljZSBkcml2ZXJzIHNob3VsZCB1c2UgKHN0cnVjdCBwY2llX2RldmljZSopZGV2LT5pcnEgdG8KK2NhbGwgcmVxdWVzdF9pcnEvZnJlZV9pcnEuIEluIGFkZGl0aW9uLCB0aGUgaW50ZXJydXB0IG1vZGUgaXMgc3RvcmVkCitpbiB0aGUgZmllbGQgaW50ZXJydXB0X21vZGUgb2Ygc3RydWN0IHBjaWVfZGV2aWNlLgorCis2LjIgTVNJLVggVmVjdG9yIFJlc291cmNlcworCitTaW1pbGFyIHRvIHRoZSBNU0kgYSBkZXZpY2UgZHJpdmVyIGZvciBhbiBNU0ktWCBjYXBhYmxlIGRldmljZSBjYW4KK2NhbGwgcGNpX2VuYWJsZV9tc2l4IHRvIHJlcXVlc3QgTVNJLVggaW50ZXJydXB0cy4gQWxsIHNlcnZpY2UgZHJpdmVycworYXJlIG5vdCBwZXJtaXR0ZWQgdG8gc3dpdGNoIGludGVycnVwdCBtb2RlIG9uIGl0cyBkZXZpY2UuIFRoZSBQQ0kKK0V4cHJlc3MgUG9ydCBCdXMgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZXJydXB0Cittb2RlIGFuZCB0aGlzIHNob3VsZCBiZSB0cmFuc3BhcmVudCB0byBzZXJ2aWNlIGRyaXZlcnMuIEFueSBhdHRlbXB0CitieSBzZXJ2aWNlIGRyaXZlciB0byBjYWxsIHBjaV9lbmFibGVfbXNpeC9wY2lfZGlzYWJsZV9tc2l4IG1heQorcmVzdWx0IHVucHJlZGljdGFibGUgYmVoYXZpb3IuIFNlcnZpY2UgZHJpdmVycyBzaG91bGQgdXNlCisoc3RydWN0IHBjaWVfZGV2aWNlKilkZXYtPmlycSBhbmQgY2FsbCByZXF1ZXN0X2lycS9mcmVlX2lycS4KKworNi4zIFBDSSBNZW1vcnkvSU8gTWFwcGVkIFJlZ2lvbnMKKworU2VydmljZSBkcml2ZXJzIGZvciBQQ0kgRXhwcmVzcyBQb3dlciBNYW5hZ2VtZW50IChQTUUpLCBBZHZhbmNlZAorRXJyb3IgUmVwb3J0aW5nIChBRVIpLCBIb3QtUGx1ZyAoSFApIGFuZCBWaXJ0dWFsIENoYW5uZWwgKFZDKSBhY2Nlc3MKK1BDSSBjb25maWd1cmF0aW9uIHNwYWNlIG9uIHRoZSBQQ0kgRXhwcmVzcyBwb3J0LiBJbiBhbGwgY2FzZXMgdGhlCityZWdpc3RlcnMgYWNjZXNzZWQgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIFRoaXMgcGF0Y2ggYXNzdW1lcwordGhhdCBhbGwgc2VydmljZSBkcml2ZXJzIHdpbGwgYmUgd2VsbCBiZWhhdmVkIGFuZCBub3Qgb3ZlcndyaXRlCitvdGhlciBzZXJ2aWNlIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKzYuNCBQQ0kgQ29uZmlnIFJlZ2lzdGVycworCitFYWNoIHNlcnZpY2UgZHJpdmVyIHJ1bnMgaXRzIFBDSSBjb25maWcgb3BlcmF0aW9ucyBvbiBpdHMgb3duCitjYXBhYmlsaXR5IHN0cnVjdHVyZSBleGNlcHQgdGhlIFBDSSBFeHByZXNzIGNhcGFiaWxpdHkgc3RydWN0dXJlLCBpbgord2hpY2ggUm9vdCBDb250cm9sIHJlZ2lzdGVyIGFuZCBEZXZpY2UgQ29udHJvbCByZWdpc3RlciBhcmUgc2hhcmVkCitiZXR3ZWVuIFBNRSBhbmQgQUVSLiBUaGlzIHBhdGNoIGFzc3VtZXMgdGhhdCBhbGwgc2VydmljZSBkcml2ZXJzCit3aWxsIGJlIHdlbGwgYmVoYXZlZCBhbmQgbm90IG92ZXJ3cml0ZSBvdGhlciBzZXJ2aWNlIGRyaXZlcidzCitjb25maWd1cmF0aW9uIHNldHRpbmdzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjI1MGIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKQEAgLTAsMCArMSwzODcgQEAKK1JlYWQgdGhlIEYtaW5nIFBhcGVycyEKKworCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBSQ1UtcmVsYXRlZCBwdWJsaWNhdGlvbnMsIGFuZCBpcyBmb2xsb3dlZCBieQordGhlIGNvcnJlc3BvbmRpbmcgYmlidGV4IGVudHJpZXMuCisKK1RoZSBmaXJzdCB0aGluZyByZXNlbWJsaW5nIFJDVSB3YXMgcHVibGlzaGVkIGluIDE5ODAsIHdoZW4gS3VuZyBhbmQgTGVobWFuCitbS3VuZzgwXSByZWNvbW1lbmRlZCB1c2Ugb2YgYSBnYXJiYWdlIGNvbGxlY3RvciB0byBkZWZlciBkZXN0cnVjdGlvbgorb2Ygbm9kZXMgaW4gYSBwYXJhbGxlbCBiaW5hcnkgc2VhcmNoIHRyZWUgaW4gb3JkZXIgdG8gc2ltcGxpZnkgaXRzCitpbXBsZW1lbnRhdGlvbi4gIFRoaXMgd29ya3Mgd2VsbCBpbiBlbnZpcm9ubWVudHMgdGhhdCBoYXZlIGdhcmJhZ2UKK2NvbGxlY3RvcnMsIGJ1dCBjdXJyZW50IHByb2R1Y3Rpb24gZ2FyYmFnZSBjb2xsZWN0b3JzIGluY3VyIHNpZ25pZmljYW50CityZWFkLXNpZGUgb3ZlcmhlYWQuCisKK0luIDE5ODIsIE1hbmJlciBhbmQgTGFkbmVyIFtNYW5iZXI4MixNYW5iZXI4NF0gcmVjb21tZW5kZWQgZGVmZXJyaW5nCitkZXN0cnVjdGlvbiB1bnRpbCBhbGwgdGhyZWFkcyBydW5uaW5nIGF0IHRoYXQgdGltZSBoYXZlIHRlcm1pbmF0ZWQsIGFnYWluCitmb3IgYSBwYXJhbGxlbCBiaW5hcnkgc2VhcmNoIHRyZWUuICBUaGlzIGFwcHJvYWNoIHdvcmtzIHdlbGwgaW4gc3lzdGVtcword2l0aCBzaG9ydC1saXZlZCB0aHJlYWRzLCBzdWNoIGFzIHRoZSBLNDIgcmVzZWFyY2ggb3BlcmF0aW5nIHN5c3RlbS4KK0hvd2V2ZXIsIExpbnV4IGhhcyBsb25nLWxpdmVkIHRhc2tzLCBzbyBtb3JlIGlzIG5lZWRlZC4KKworSW4gMTk4NiwgSGVubmVzc3ksIE9zaXNlaywgYW5kIFNlaWdoIFtIZW5uZXNzeTg5XSBpbnRyb2R1Y2VkIHBhc3NpdmUKK3NlcmlhbGl6YXRpb24sIHdoaWNoIGlzIGFuIFJDVS1saWtlIG1lY2hhbmlzbSB0aGF0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2UKK29mICJxdWllc2NlbnQgc3RhdGVzIiBpbiB0aGUgVk0vWEEgaHlwZXJ2aXNvciB0aGF0IGFyZSBndWFyYW50ZWVkIG5vdAordG8gYmUgcmVmZXJlbmNpbmcgdGhlIGRhdGEgc3RydWN0dXJlLiAgSG93ZXZlciwgdGhpcyBtZWNoYW5pc20gd2FzIG5vdAorb3B0aW1pemVkIGZvciBtb2Rlcm4gY29tcHV0ZXIgc3lzdGVtcywgd2hpY2ggaXMgbm90IHN1cnByaXNpbmcgZ2l2ZW4KK3RoYXQgdGhlc2Ugb3ZlcmhlYWRzIHdlcmUgbm90IHNvIGV4cGVuc2l2ZSBpbiB0aGUgbWlkLTgwcy4gIE5vbmV0aGVsZXNzLAorcGFzc2l2ZSBzZXJpYWxpemF0aW9uIGFwcGVhcnMgdG8gYmUgdGhlIGZpcnN0IGRlZmVycmVkLWRlc3RydWN0aW9uCittZWNoYW5pc20gdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLiAgRnVydGhlcm1vcmUsIHRoZSByZWxldmFudCBwYXRlbnQgaGFzCitsYXBzZWQsIHNvIHRoaXMgYXBwcm9hY2ggbWF5IGJlIHVzZWQgaW4gbm9uLUdQTCBzb2Z0d2FyZSwgaWYgZGVzaXJlZC4KKyhJbiBjb250cmFzdCwgdXNlIG9mIFJDVSBpcyBwZXJtaXR0ZWQgb25seSBpbiBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlcgorR1BMLiAgU29ycnkhISEpCisKK0luIDE5OTAsIFB1Z2ggW1B1Z2g5MF0gbm90ZWQgdGhhdCBleHBsaWNpdGx5IHRyYWNraW5nIHdoaWNoIHRocmVhZHMKK3dlcmUgcmVhZGluZyBhIGdpdmVuIGRhdGEgc3RydWN0dXJlIHBlcm1pdHRlZCBkZWZlcnJlZCBmcmVlIHRvIG9wZXJhdGUKK2luIHRoZSBwcmVzZW5jZSBvZiBub24tdGVybWluYXRpbmcgdGhyZWFkcy4gIEhvd2V2ZXIsIHRoaXMgZXhwbGljaXQKK3RyYWNraW5nIGltcG9zZXMgc2lnbmlmaWNhbnQgcmVhZC1zaWRlIG92ZXJoZWFkLCB3aGljaCBpcyB1bmRlc2lyYWJsZQoraW4gcmVhZC1tb3N0bHkgc2l0dWF0aW9ucy4gIFRoaXMgYWxnb3JpdGhtIGRvZXMgdGFrZSBwYWlucyB0byBhdm9pZAord3JpdGUtc2lkZSBjb250ZW50aW9uIGFuZCBwYXJhbGxlbGl6ZSB0aGUgb3RoZXIgd3JpdGUtc2lkZSBvdmVyaGVhZHMgYnkKK3Byb3ZpZGluZyBhIGZpbmUtZ3JhaW5lZCBsb2NraW5nIGRlc2lnbiwgaG93ZXZlciwgaXQgd291bGQgYmUgaW50ZXJlc3RpbmcKK3RvIHNlZSBob3cgbXVjaCBvZiB0aGUgcGVyZm9ybWFuY2UgYWR2YW50YWdlIHJlcG9ydGVkIGluIDE5OTAgcmVtYWlucworaW4gMjAwNC4KKworQXQgYWJvdXQgdGhpcyBzYW1lIHRpbWUsIEFkYW1zIFtBZGFtczkxXSBkZXNjcmliZWQgYGBjaGFvdGljIHJlbGF4YXRpb24nJywKK3doZXJlIHRoZSBub3JtYWwgYmFycmllcnMgYmV0d2VlbiBzdWNjZXNzaXZlIGl0ZXJhdGlvbnMgb2YgY29udmVyZ2VudAorbnVtZXJpY2FsIGFsZ29yaXRobXMgYXJlIHJlbGF4ZWQsIHNvIHRoYXQgaXRlcmF0aW9uICRuJCBtaWdodCB1c2UKK2RhdGEgZnJvbSBpdGVyYXRpb24gJG4tMSQgb3IgZXZlbiAkbi0yJC4gIFRoaXMgaW50cm9kdWNlcyBlcnJvciwKK3doaWNoIHR5cGljYWxseSBzbG93cyBjb252ZXJnZW5jZSBhbmQgdGh1cyBpbmNyZWFzZXMgdGhlIG51bWJlciBvZgoraXRlcmF0aW9ucyByZXF1aXJlZC4gIEhvd2V2ZXIsIHRoaXMgaW5jcmVhc2UgaXMgc29tZXRpbWVzIG1vcmUgdGhhbiBtYWRlCit1cCBmb3IgYnkgYSByZWR1Y3Rpb24gaW4gdGhlIG51bWJlciBvZiBleHBlbnNpdmUgYmFycmllciBvcGVyYXRpb25zLAord2hpY2ggYXJlIG90aGVyd2lzZSByZXF1aXJlZCB0byBzeW5jaHJvbml6ZSB0aGUgdGhyZWFkcyBhdCB0aGUgZW5kCitvZiBlYWNoIGl0ZXJhdGlvbi4gIFVuZm9ydHVuYXRlbHksIGNoYW90aWMgcmVsYXhhdGlvbiByZXF1aXJlcyBoaWdobHkKK3N0cnVjdHVyZWQgZGF0YSwgc3VjaCBhcyB0aGUgbWF0cmljZXMgdXNlZCBpbiBzY2llbnRpZmljIHByb2dyYW1zLCBhbmQKK2lzIHRodXMgaW5hcHBsaWNhYmxlIHRvIG1vc3QgZGF0YSBzdHJ1Y3R1cmVzIGluIG9wZXJhdGluZy1zeXN0ZW0ga2VybmVscy4KKworSW4gMTk5MywgSmFjb2Jzb24gW0phY29ic29uOTNdIHZlcmJhbGx5IGRlc2NyaWJlZCB3aGF0IGlzIHBlcmhhcHMgdGhlCitzaW1wbGVzdCBkZWZlcnJlZC1mcmVlIHRlY2huaXF1ZTogc2ltcGx5IHdhaXRpbmcgYSBmaXhlZCBhbW91bnQgb2YgdGltZQorYmVmb3JlIGZyZWVpbmcgYmxvY2tzIGF3YWl0aW5nIGRlZmVycmVkIGZyZWUuICBKYWNvYnNvbiBkaWQgbm90IGRlc2NyaWJlCithbnkgd3JpdGUtc2lkZSBjaGFuZ2VzIGhlIG1pZ2h0IGhhdmUgbWFkZSBpbiB0aGlzIHdvcmsgdXNpbmcgU0dJJ3MgSXJpeAora2VybmVsLiAgQWp1IEpvaG4gcHVibGlzaGVkIGEgc2ltaWxhciB0ZWNobmlxdWUgaW4gMTk5NSBbQWp1Sm9objk1XS4KK1RoaXMgd29ya3Mgd2VsbCBpZiB0aGVyZSBpcyBhIHdlbGwtZGVmaW5lZCB1cHBlciBib3VuZCBvbiB0aGUgbGVuZ3RoIG9mCit0aW1lIHRoYXQgcmVhZGluZyB0aHJlYWRzIGNhbiBob2xkIHJlZmVyZW5jZXMsIGFzIHRoZXJlIG1pZ2h0IHdlbGwgYmUgaW4KK2hhcmQgcmVhbC10aW1lIHN5c3RlbXMuICBIb3dldmVyLCBpZiB0aGlzIHRpbWUgaXMgZXhjZWVkZWQsIHBlcmhhcHMgZHVlCit0byBwcmVlbXB0aW9uLCBleGNlc3NpdmUgaW50ZXJydXB0cywgb3IgbGFyZ2VyLXRoYW4tYW50aWNpcGF0ZWQgbG9hZCwKK21lbW9yeSBjb3JydXB0aW9uIGNhbiBlbnN1ZSwgd2l0aCBubyByZWFzb25hYmxlIG1lYW5zIG9mIGRpYWdub3Npcy4KK0phY29ic29uJ3MgdGVjaG5pcXVlIGlzIHRoZXJlZm9yZSBpbmFwcHJvcHJpYXRlIGZvciB1c2UgaW4gcHJvZHVjdGlvbgorb3BlcmF0aW5nLXN5c3RlbSBrZXJuZWxzLCBleGNlcHQgd2hlbiBzdWNoIGtlcm5lbHMgY2FuIHByb3ZpZGUgaGFyZAorcmVhbC10aW1lIHJlc3BvbnNlIGd1YXJhbnRlZXMgZm9yIGFsbCBvcGVyYXRpb25zLgorCitBbHNvIGluIDE5OTUsIFB1IGV0IGFsLiBbUHU5NWFdIGFwcGxpZWQgYSB0ZWNobmlxdWUgc2ltaWxhciB0byB0aGF0IG9mIFB1Z2gncworcmVhZC1zaWRlLXRyYWNraW5nIHRvIHBlcm1pdCByZXBsdWdnaW5nIG9mIGFsZ29yaXRobXMgd2l0aGluIGEgY29tbWVyY2lhbAorVW5peCBvcGVyYXRpbmcgc3lzdGVtLiAgSG93ZXZlciwgdGhpcyByZXBsdWdnaW5nIHBlcm1pdHRlZCBvbmx5IGEgc2luZ2xlCityZWFkZXIgYXQgYSB0aW1lLiAgVGhlIGZvbGxvd2luZyB5ZWFyLCB0aGlzIHNhbWUgZ3JvdXAgb2YgcmVzZWFyY2hlcnMKK2V4dGVuZGVkIHRoZWlyIHRlY2huaXF1ZSB0byBhbGxvdyBmb3IgbXVsdGlwbGUgcmVhZGVycyBbQ293YW45NmFdLgorVGhlaXIgYXBwcm9hY2ggcmVxdWlyZXMgbWVtb3J5IGJhcnJpZXJzIChhbmQgdGh1cyBwaXBlbGluZSBzdGFsbHMpLAorYnV0IHJlZHVjZXMgbWVtb3J5IGxhdGVuY3ksIGNvbnRlbnRpb24sIGFuZCBsb2NraW5nIG92ZXJoZWFkcy4KKworMTk5NSBhbHNvIHNhdyB0aGUgZmlyc3QgcHVibGljYXRpb24gb2YgRFlOSVgvcHR4J3MgUkNVIG1lY2hhbmlzbQorW1NsaW5nd2luZTk1XSwgd2hpY2ggd2FzIG9wdGltaXplZCBmb3IgbW9kZXJuIENQVSBhcmNoaXRlY3R1cmVzLAorYW5kIHdhcyBzdWNjZXNzZnVsbHkgYXBwbGllZCB0byBhIG51bWJlciBvZiBzaXR1YXRpb25zIHdpdGhpbiB0aGUKK0RZTklYL3B0eCBrZXJuZWwuICBUaGUgY29ycmVzcG9uZGluZyBjb25mZXJlbmNlIHBhcGVyIGFwcGVhcmVkIGluIDE5OTgKK1tNY0tlbm5leTk4XS4KKworSW4gMTk5OSwgdGhlIFRvcm5hZG8gYW5kIEs0MiBncm91cHMgZGVzY3JpYmVkIHRoZWlyICJnZW5lcmF0aW9ucyIKK21lY2hhbmlzbSwgd2hpY2ggcXVpdGUgc2ltaWxhciB0byBSQ1UgW0dhbXNhOTldLiAgVGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMKK21hZGUgcGVydmFzaXZlIHVzZSBvZiBSQ1UgaW4gcGxhY2Ugb2YgImV4aXN0ZW5jZSBsb2NrcyIsIHdoaWNoIGdyZWF0bHkKK3NpbXBsaWZpZXMgbG9ja2luZyBoaWVyYXJjaGllcy4KKworMjAwMSBzYXcgdGhlIGZpcnN0IFJDVSBwcmVzZW50YXRpb24gaW52b2x2aW5nIExpbnV4IFtNY0tlbm5leTAxYV0KK2F0IE9MUy4gIFRoZSByZXN1bHRpbmcgYWJ1bmRhbmNlIG9mIFJDVSBwYXRjaGVzIHdhcyBwcmVzZW50ZWQgdGhlCitmb2xsb3dpbmcgeWVhciBbTWNLZW5uZXkwMmFdLCBhbmQgdXNlIG9mIFJDVSBpbiBkY2FjaGUgd2FzIGZpcnN0CitkZXNjcmliZWQgdGhhdCBzYW1lIHllYXIgW0xpbmRlcjAyYV0uCisKK0Fsc28gaW4gMjAwMiwgTWljaGFlbCBbTWljaGFlbDAyYixNaWNoYWVsMDJhXSBwcmVzZW50ZWQgdGVjaG5pcXVlcwordGhhdCBkZWZlciB0aGUgZGVzdHJ1Y3Rpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNpbXBsaWZ5IG5vbi1ibG9ja2luZworc3luY2hyb25pemF0aW9uICh3YWl0LWZyZWUgc3luY2hyb25pemF0aW9uLCBsb2NrLWZyZWUgc3luY2hyb25pemF0aW9uLAorYW5kIG9ic3RydWN0aW9uLWZyZWUgc3luY2hyb25pemF0aW9uIGFyZSBhbGwgZXhhbXBsZXMgb2Ygbm9uLWJsb2NraW5nCitzeW5jaHJvbml6YXRpb24pLiAgSW4gcGFydGljdWxhciwgdGhpcyB0ZWNobmlxdWUgZWxpbWluYXRlcyBsb2NraW5nLAorcmVkdWNlcyBjb250ZW50aW9uLCByZWR1Y2VzIG1lbW9yeSBsYXRlbmN5IGZvciByZWFkZXJzLCBhbmQgcGFyYWxsZWxpemVzCitwaXBlbGluZSBzdGFsbHMgYW5kIG1lbW9yeSBsYXRlbmN5IGZvciB3cml0ZXJzLiAgSG93ZXZlciwgdGhlc2UKK3RlY2huaXF1ZXMgc3RpbGwgaW1wb3NlIHNpZ25pZmljYW50IHJlYWQtc2lkZSBvdmVyaGVhZCBpbiB0aGUgZm9ybSBvZgorbWVtb3J5IGJhcnJpZXJzLiAgUmVzZWFyY2hlcnMgYXQgU3VuIHdvcmtlZCBhbG9uZyBzaW1pbGFyIGxpbmVzIGluIHRoZQorc2FtZSB0aW1lZnJhbWUgW0hlcmxpaHlMTTAyLEhlcmxpaHlMTVMwM10uCisKK0luIDIwMDMsIHRoZSBLNDIgZ3JvdXAgZGVzY3JpYmVkIGhvdyBSQ1UgY291bGQgYmUgdXNlZCB0byBjcmVhdGUKK2hvdC1wbHVnZ2FibGUgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGluZy1zeXN0ZW0gZnVuY3Rpb25zLiAgTGF0ZXIgdGhhdAoreWVhciBzYXcgYSBwYXBlciBkZXNjcmliaW5nIGFuIFJDVSBpbXBsZW1lbnRhdGlvbiBvZiBTeXN0ZW0gViBJUEMKK1tBcmNhbmdlbGkwM10sIGFuZCBhbiBpbnRyb2R1Y3Rpb24gdG8gUkNVIGluIExpbnV4IEpvdXJuYWwgW01jS2VubmV5MDNhXS4KKworMjAwNCBoYXMgc2VlbiBhIExpbnV4LUpvdXJuYWwgYXJ0aWNsZSBvbiB1c2Ugb2YgUkNVIGluIGRjYWNoZQorW01jS2VubmV5MDRhXSwgYSBwZXJmb3JtYW5jZSBjb21wYXJpc29uIG9mIGxvY2tpbmcgdG8gUkNVIG9uIHNldmVyYWwKK2RpZmZlcmVudCBDUFVzIFtNY0tlbm5leTA0Yl0sIGEgZGlzc2VydGF0aW9uIGRlc2NyaWJpbmcgdXNlIG9mIFJDVSBpbiBhCitudW1iZXIgb2Ygb3BlcmF0aW5nLXN5c3RlbSBrZXJuZWxzIFtQYXVsRWR3YXJkTWNLZW5uZXlQaERdLCBhbmQgYSBwYXBlcgorZGVzY3JpYmluZyBob3cgdG8gbWFrZSBSQ1Ugc2FmZSBmb3Igc29mdC1yZWFsdGltZSBhcHBsaWNhdGlvbnMgW1Nhcm1hMDRjXS4KKworCitCaWJ0ZXggRW50cmllcworCitAYXJ0aWNsZXtLdW5nODAKKyxhdXRob3I9IkguIFQuIEt1bmcgYW5kIFEuIExlaG1hbiIKKyx0aXRsZT0iQ29uY3VycmVudCBNYWludGVuYW5jZSBvZiBCaW5hcnkgU2VhcmNoIFRyZWVzIgorLFllYXI9IjE5ODAiCissTW9udGg9IlNlcHRlbWJlciIKKyxqb3VybmFsPSJBQ00gVHJhbnNhY3Rpb25zIG9uIERhdGFiYXNlIFN5c3RlbXMiCissdm9sdW1lPSI1IgorLG51bWJlcj0iMyIKKyxwYWdlcz0iMzU0LTM4MiIKK30KKworQHRlY2hyZXBvcnR7TWFuYmVyODIKKyxhdXRob3I9IlVkaSBNYW5iZXIgYW5kIFJpY2hhcmQgRS4gTGFkbmVyIgorLHRpdGxlPSJDb25jdXJyZW5jeSBDb250cm9sIGluIGEgRHluYW1pYyBTZWFyY2ggU3RydWN0dXJlIgorLGluc3RpdHV0aW9uPSJEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UsIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3RvbiIKKyxhZGRyZXNzPSJTZWF0dGxlLCBXYXNoaW5ndG9uIgorLHllYXI9IjE5ODIiCissbnVtYmVyPSI4Mi0wMS0wMSIKKyxtb250aD0iSmFudWFyeSIKKyxwYWdlcz0iMjgiCit9CisKK0BhcnRpY2xle01hbmJlcjg0CissYXV0aG9yPSJVZGkgTWFuYmVyIGFuZCBSaWNoYXJkIEUuIExhZG5lciIKKyx0aXRsZT0iQ29uY3VycmVuY3kgQ29udHJvbCBpbiBhIER5bmFtaWMgU2VhcmNoIFN0cnVjdHVyZSIKKyxZZWFyPSIxOTg0IgorLE1vbnRoPSJTZXB0ZW1iZXIiCissam91cm5hbD0iQUNNIFRyYW5zYWN0aW9ucyBvbiBEYXRhYmFzZSBTeXN0ZW1zIgorLHZvbHVtZT0iOSIKKyxudW1iZXI9IjMiCisscGFnZXM9IjQzOS00NTUiCit9CisKK0B0ZWNocmVwb3J0e0hlbm5lc3N5ODkKKyxhdXRob3I9IkphbWVzIFAuIEhlbm5lc3N5IGFuZCBEYW1pYW4gTC4gT3Npc2VrIGFuZCBKb3NlcGggVy4ge1NlaWdoIElJfSIKKyx0aXRsZT0iUGFzc2l2ZSBTZXJpYWxpemF0aW9uIGluIGEgTXVsdGl0YXNraW5nIEVudmlyb25tZW50IgorLGluc3RpdHV0aW9uPSJVUyBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UiCissYWRkcmVzcz0iV2FzaGluZ3RvbiwgREMiCisseWVhcj0iMTk4OSIKKyxudW1iZXI9IlVTIFBhdGVudCA0LDgwOSwxNjggKGxhcHNlZCkiCissbW9udGg9IkZlYnJ1YXJ5IgorLHBhZ2VzPSIxMSIKK30KKworQHRlY2hyZXBvcnR7UHVnaDkwCissYXV0aG9yPSJXaWxsaWFtIFB1Z2giCissdGl0bGU9IkNvbmN1cnJlbnQgTWFpbnRlbmFuY2Ugb2YgU2tpcCBMaXN0cyIKKyxpbnN0aXR1dGlvbj0iSW5zdGl0dXRlIG9mIEFkdmFuY2VkIENvbXB1dGVyIFNjaWVuY2UgU3R1ZGllcywgRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlLCBVbml2ZXJzaXR5IG9mIE1hcnlsYW5kIgorLGFkZHJlc3M9IkNvbGxlZ2UgUGFyaywgTWFyeWxhbmQiCisseWVhcj0iMTk5MCIKKyxudW1iZXI9IkNTLVRSLTIyMjIuMSIKKyxtb250aD0iSnVuZSIKK30KKworQEJvb2t7QWRhbXM5MQorLEF1dGhvcj0iR3JlZ29yeSBSLiBBZGFtcyIKKyx0aXRsZT0iQ29uY3VycmVudCBQcm9ncmFtbWluZywgUHJpbmNpcGxlcywgYW5kIFByYWN0aWNlcyIKKyxQdWJsaXNoZXI9IkJlbmphbWluIEN1bW1pbnMiCissWWVhcj0iMTk5MSIKK30KKworQHVucHVibGlzaGVke0phY29ic29uOTMKKyxhdXRob3I9IlZhbiBKYWNvYnNvbiIKKyx0aXRsZT0iQXZvaWQgUmVhZC1TaWRlIExvY2tpbmcgVmlhIERlbGF5ZWQgRnJlZSIKKyx5ZWFyPSIxOTkzIgorLG1vbnRoPSJTZXB0ZW1iZXIiCissbm90ZT0iVmVyYmFsIGRpc2N1c3Npb24iCit9CisKK0BDb25mZXJlbmNle0FqdUpvaG45NQorLEF1dGhvcj0iQWp1IEpvaG4iCissVGl0bGU9IkR5bmFtaWMgdm5vZGVzIC0tIERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24iCissQm9va3RpdGxlPSJ7VVNFTklYIFdpbnRlciAxOTk1fSIKKyxQdWJsaXNoZXI9IlVTRU5JWCBBc3NvY2lhdGlvbiIKKyxNb250aD0iSmFudWFyeSIKKyxZZWFyPSIxOTk1IgorLHBhZ2VzPSIxMS0yMyIKKyxBZGRyZXNzPSJOZXcgT3JsZWFucywgTEEiCit9CisKK0B0ZWNocmVwb3J0e1NsaW5nd2luZTk1CissYXV0aG9yPSJKb2huIEQuIFNsaW5nd2luZSBhbmQgUGF1bCBFLiBNY0tlbm5leSIKKyx0aXRsZT0iQXBwYXJhdHVzIGFuZCBNZXRob2QgZm9yIEFjaGlldmluZyBSZWR1Y2VkIE92ZXJoZWFkIE11dHVhbAorRXhjbHVzaW9uIGFuZCBNYWludGFpbmluZyBDb2hlcmVuY3kgaW4gYSBNdWx0aXByb2Nlc3NvciBTeXN0ZW0KK1V0aWxpemluZyBFeGVjdXRpb24gSGlzdG9yeSBhbmQgVGhyZWFkIE1vbml0b3JpbmciCissaW5zdGl0dXRpb249IlVTIFBhdGVudCBhbmQgVHJhZGVtYXJrIE9mZmljZSIKKyxhZGRyZXNzPSJXYXNoaW5ndG9uLCBEQyIKKyx5ZWFyPSIxOTk1IgorLG51bWJlcj0iVVMgUGF0ZW50IDUsNDQyLDc1OCAoY29udHJpYnV0ZWQgdW5kZXIgR1BMKSIKKyxtb250aD0iQXVndXN0IgorfQorCitAdGVjaHJlcG9ydHtTbGluZ3dpbmU5NworLGF1dGhvcj0iSm9obiBELiBTbGluZ3dpbmUgYW5kIFBhdWwgRS4gTWNLZW5uZXkiCissdGl0bGU9Ik1ldGhvZCBmb3IgbWFpbnRhaW5pbmcgZGF0YSBjb2hlcmVuY3kgdXNpbmcgdGhyZWFkCithY3Rpdml0eSBzdW1tYXJpZXMgaW4gYSBtdWx0aWNvbXB1dGVyIHN5c3RlbSIKKyxpbnN0aXR1dGlvbj0iVVMgUGF0ZW50IGFuZCBUcmFkZW1hcmsgT2ZmaWNlIgorLGFkZHJlc3M9Ildhc2hpbmd0b24sIERDIgorLHllYXI9IjE5OTciCissbnVtYmVyPSJVUyBQYXRlbnQgNSw2MDgsODkzIChjb250cmlidXRlZCB1bmRlciBHUEwpIgorLG1vbnRoPSJNYXJjaCIKK30KKworQHRlY2hyZXBvcnR7U2xpbmd3aW5lOTgKKyxhdXRob3I9IkpvaG4gRC4gU2xpbmd3aW5lIGFuZCBQYXVsIEUuIE1jS2VubmV5IgorLHRpdGxlPSJBcHBhcmF0dXMgYW5kIG1ldGhvZCBmb3IgYWNoaWV2aW5nIHJlZHVjZWQgb3ZlcmhlYWQKK211dHVhbCBleGNsdXNpb24gYW5kIG1haW50YWluaW5nIGNvaGVyZW5jeSBpbiBhIG11bHRpcHJvY2Vzc29yCitzeXN0ZW0gdXRpbGl6aW5nIGV4ZWN1dGlvbiBoaXN0b3J5IGFuZCB0aHJlYWQgbW9uaXRvcmluZyIKKyxpbnN0aXR1dGlvbj0iVVMgUGF0ZW50IGFuZCBUcmFkZW1hcmsgT2ZmaWNlIgorLGFkZHJlc3M9Ildhc2hpbmd0b24sIERDIgorLHllYXI9IjE5OTgiCissbnVtYmVyPSJVUyBQYXRlbnQgNSw3MjcsMjA5IChjb250cmlidXRlZCB1bmRlciBHUEwpIgorLG1vbnRoPSJNYXJjaCIKK30KKworQENvbmZlcmVuY2V7TWNLZW5uZXk5OAorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSBhbmQgSm9obiBELiBTbGluZ3dpbmUiCissVGl0bGU9IlJlYWQtQ29weSBVcGRhdGU6IFVzaW5nIEV4ZWN1dGlvbiBIaXN0b3J5IHRvIFNvbHZlIENvbmN1cnJlbmN5CitQcm9ibGVtcyIKKyxCb29rdGl0bGU9IntQYXJhbGxlbCBhbmQgRGlzdHJpYnV0ZWQgQ29tcHV0aW5nIGFuZCBTeXN0ZW1zfSIKKyxNb250aD0iT2N0b2JlciIKKyxZZWFyPSIxOTk4IgorLHBhZ2VzPSI1MDktNTE4IgorLEFkZHJlc3M9IkxhcyBWZWdhcywgTlYiCit9CisKK0BDb25mZXJlbmNle0dhbXNhOTkKKyxBdXRob3I9IkJlbiBHYW1zYSBhbmQgT3JyYW4gS3JpZWdlciBhbmQgSm9uYXRoYW4gQXBwYXZvbyBhbmQgTWljaGFlbCBTdHVtbSIKKyxUaXRsZT0iVG9ybmFkbzogTWF4aW1pemluZyBMb2NhbGl0eSBhbmQgQ29uY3VycmVuY3kgaW4gYSBTaGFyZWQgTWVtb3J5CitNdWx0aXByb2Nlc3NvciBPcGVyYXRpbmcgU3lzdGVtIgorLEJvb2t0aXRsZT0ie1Byb2NlZWRpbmdzIG9mIHRoZSAzXHRleHRzdXBlcnNjcmlwdHtyZH0gU3ltcG9zaXVtIG9uCitPcGVyYXRpbmcgU3lzdGVtIERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb259IgorLE1vbnRoPSJGZWJydWFyeSIKKyxZZWFyPSIxOTk5IgorLHBhZ2VzPSI4Ny0xMDAiCissQWRkcmVzcz0iTmV3IE9ybGVhbnMsIExBIgorfQorCitAdGVjaHJlcG9ydHtTbGluZ3dpbmUwMQorLGF1dGhvcj0iSm9obiBELiBTbGluZ3dpbmUgYW5kIFBhdWwgRS4gTWNLZW5uZXkiCissdGl0bGU9IkFwcGFyYXR1cyBhbmQgbWV0aG9kIGZvciBhY2hpZXZpbmcgcmVkdWNlZCBvdmVyaGVhZAorbXV0dWFsIGV4Y2x1c2lvbiBhbmQgbWFpbnRhaW5pbmcgY29oZXJlbmN5IGluIGEgbXVsdGlwcm9jZXNzb3IKK3N5c3RlbSB1dGlsaXppbmcgZXhlY3V0aW9uIGhpc3RvcnkgYW5kIHRocmVhZCBtb25pdG9yaW5nIgorLGluc3RpdHV0aW9uPSJVUyBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UiCissYWRkcmVzcz0iV2FzaGluZ3RvbiwgREMiCisseWVhcj0iMjAwMSIKKyxudW1iZXI9IlVTIFBhdGVudCA1LDIxOSw2OTAgKGNvbnRyaWJ1dGVkIHVuZGVyIEdQTCkiCissbW9udGg9IkFwcmlsIgorfQorCitAQ29uZmVyZW5jZXtNY0tlbm5leTAxYQorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSBhbmQgSm9uYXRoYW4gQXBwYXZvbyBhbmQgQW5kaSBLbGVlbiBhbmQKK09ycmFuIEtyaWVnZXIgYW5kIFJ1c3R5IFJ1c3NlbGwgYW5kIERpcGFua2FyIFNhcm1hIGFuZCBNYW5lZXNoIFNvbmkiCissVGl0bGU9IlJlYWQtQ29weSBVcGRhdGUiCissQm9va3RpdGxlPSJ7T3R0YXdhIExpbnV4IFN5bXBvc2l1bX0iCissTW9udGg9Ikp1bHkiCissWWVhcj0iMjAwMSIKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly93d3cubGludXhzeW1wb3NpdW0ub3JnLzIwMDEvYWJzdHJhY3RzL3JlYWRjb3B5LnBocH0KK1x1cmx7aHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9yY2xvY2svcmNsb2NrX09MUy4yMDAxLjA1LjAxYy5wZGZ9CitbVmlld2VkIEp1bmUgMjMsIDIwMDRdIgorYW5ub3RhdGlvbj0iCitEZXNjcmliZWQgUkNVLCBhbmQgcHJlc2VudGVkIHNvbWUgcGF0Y2hlcyBpbXBsZW1lbnRpbmcgYW5kIHVzaW5nIGl0IGluCit0aGUgTGludXgga2VybmVsLgorIgorfQorCitAQ29uZmVyZW5jZXtMaW5kZXIwMmEKKyxBdXRob3I9Ikhhbm5hIExpbmRlciBhbmQgRGlwYW5rYXIgU2FybWEgYW5kIE1hbmVlc2ggU29uaSIKKyxUaXRsZT0iU2NhbGFiaWxpdHkgb2YgdGhlIERpcmVjdG9yeSBFbnRyeSBDYWNoZSIKKyxCb29rdGl0bGU9IntPdHRhd2EgTGludXggU3ltcG9zaXVtfSIKKyxNb250aD0iSnVuZSIKKyxZZWFyPSIyMDAyIgorLHBhZ2VzPSIyODktMzAwIgorfQorCitAQ29uZmVyZW5jZXtNY0tlbm5leTAyYQorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSBhbmQgRGlwYW5rYXIgU2FybWEgYW5kCitBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuIGFuZCBPcnJhbiBLcmllZ2VyIGFuZCBSdXN0eSBSdXNzZWxsIgorLFRpdGxlPSJSZWFkLUNvcHkgVXBkYXRlIgorLEJvb2t0aXRsZT0ie090dGF3YSBMaW51eCBTeW1wb3NpdW19IgorLE1vbnRoPSJKdW5lIgorLFllYXI9IjIwMDIiCisscGFnZXM9IjMzOC0zNjciCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3LmxpbnV4Lm9yZy51ay9+YWpoL29sczIwMDJfcHJvY2VlZGluZ3MucGRmLmd6fQorW1ZpZXdlZCBKdW5lIDIzLCAyMDA0XSIKK30KKworQGFydGljbGV7QXBwYXZvbzAzYQorLGF1dGhvcj0iSi4gQXBwYXZvbyBhbmQgSy4gSHVpIGFuZCBDLiBBLiBOLiBTb3VsZXMgYW5kIFIuIFcuIFdpc25pZXdza2kgYW5kCitELiBNLiB7RGEgU2lsdmF9IGFuZCBPLiBLcmllZ2VyIGFuZCBNLiBBLiBBdXNsYW5kZXIgYW5kIEQuIEouIEVkZWxzb2huIGFuZAorQi4gR2Ftc2EgYW5kIEcuIFIuIEdhbmdlciBhbmQgUC4gTWNLZW5uZXkgYW5kIE0uIE9zdHJvd3NraSBhbmQKK0IuIFJvc2VuYnVyZyBhbmQgTS4gU3R1bW0gYW5kIEouIFhlbmlkaXMiCissdGl0bGU9IkVuYWJsaW5nIEF1dG9ub21pYyBCZWhhdmlvciBpbiBTeXN0ZW1zIFNvZnR3YXJlIFdpdGggSG90IFN3YXBwaW5nIgorLFllYXI9IjIwMDMiCissTW9udGg9IkphbnVhcnkiCissam91cm5hbD0iSUJNIFN5c3RlbXMgSm91cm5hbCIKKyx2b2x1bWU9IjQyIgorLG51bWJlcj0iMSIKKyxwYWdlcz0iNjAtNzYiCit9CisKK0BDb25mZXJlbmNle0FyY2FuZ2VsaTAzCissQXV0aG9yPSJBbmRyZWEgQXJjYW5nZWxpIGFuZCBNaW5nbWluZyBDYW8gYW5kIFBhdWwgRS4gTWNLZW5uZXkgYW5kCitEaXBhbmthciBTYXJtYSIKKyxUaXRsZT0iVXNpbmcgUmVhZC1Db3B5IFVwZGF0ZSBUZWNobmlxdWVzIGZvciB7U3lzdGVtIFYgSVBDfSBpbiB0aGUKK3tMaW51eH0gMi41IEtlcm5lbCIKKyxCb29rdGl0bGU9IlByb2NlZWRpbmdzIG9mIHRoZSAyMDAzIFVTRU5JWCBBbm51YWwgVGVjaG5pY2FsIENvbmZlcmVuY2UKKyhGUkVFTklYIFRyYWNrKSIKKyxQdWJsaXNoZXI9IlVTRU5JWCBBc3NvY2lhdGlvbiIKKyx5ZWFyPSIyMDAzIgorLG1vbnRoPSJKdW5lIgorLHBhZ2VzPSIyOTctMzEwIgorfQorCitAYXJ0aWNsZXtNY0tlbm5leTAzYQorLGF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSIKKyx0aXRsZT0iVXNpbmcge1JDVX0gaW4gdGhlIHtMaW51eH0gMi41IEtlcm5lbCIKKyxZZWFyPSIyMDAzIgorLE1vbnRoPSJPY3RvYmVyIgorLGpvdXJuYWw9IkxpbnV4IEpvdXJuYWwiCissdm9sdW1lPSIxIgorLG51bWJlcj0iMTE0IgorLHBhZ2VzPSIxOC0yNiIKK30KKworQGFydGljbGV7TWNLZW5uZXkwNGEKKyxhdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkgYW5kIERpcGFua2FyIFNhcm1hIGFuZCBNYW5lZXNoIFNvbmkiCissdGl0bGU9IlNjYWxpbmcgZGNhY2hlIHdpdGgge1JDVX0iCissWWVhcj0iMjAwNCIKKyxNb250aD0iSmFudWFyeSIKKyxqb3VybmFsPSJMaW51eCBKb3VybmFsIgorLHZvbHVtZT0iMSIKKyxudW1iZXI9IjExOCIKKyxwYWdlcz0iMzgtNDYiCit9CisKK0BDb25mZXJlbmNle01jS2VubmV5MDRiCissQXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IgorLFRpdGxlPSJ7UkNVfSB2cy4gTG9ja2luZyBQZXJmb3JtYW5jZSBvbiBEaWZmZXJlbnQge0NQVXN9IgorLEJvb2t0aXRsZT0ie2xpbnV4LmNvbmYuYXV9IgorLE1vbnRoPSJKYW51YXJ5IgorLFllYXI9IjIwMDQiCissQWRkcmVzcz0iQWRlbGFpZGUsIEF1c3RyYWxpYSIKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly93d3cubGludXgub3JnLmF1L2NvbmYvMjAwNC9hYnN0cmFjdHMuaHRtbCM5MH0KK1x1cmx7aHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9yY2xvY2svbG9ja3BlcmYuMjAwNC4wMS4xN2EucGRmfQorW1ZpZXdlZCBKdW5lIDIzLCAyMDA0XSIKK30KKworQHBoZHRoZXNpc3tQYXVsRWR3YXJkTWNLZW5uZXlQaEQKKyxhdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkiCissdGl0bGU9IkV4cGxvaXRpbmcgRGVmZXJyZWQgRGVzdHJ1Y3Rpb246CitBbiBBbmFseXNpcyBvZiBSZWFkLUNvcHktVXBkYXRlIFRlY2huaXF1ZXMKK2luIE9wZXJhdGluZyBTeXN0ZW0gS2VybmVscyIKKyxzY2hvb2w9Ik9HSSBTY2hvb2wgb2YgU2NpZW5jZSBhbmQgRW5naW5lZXJpbmcgYXQKK09yZWdvbiBIZWFsdGggYW5kIFNjaWVuY2VzIFVuaXZlcnNpdHkiCisseWVhcj0iMjAwNCIKK30KKworQENvbmZlcmVuY2V7U2FybWEwNGMKKyxBdXRob3I9IkRpcGFua2FyIFNhcm1hIGFuZCBQYXVsIEUuIE1jS2VubmV5IgorLFRpdGxlPSJNYWtpbmcgUkNVIFNhZmUgZm9yIERlZXAgU3ViLU1pbGxpc2Vjb25kIFJlc3BvbnNlIFJlYWx0aW1lIEFwcGxpY2F0aW9ucyIKKyxCb29rdGl0bGU9IlByb2NlZWRpbmdzIG9mIHRoZSAyMDA0IFVTRU5JWCBBbm51YWwgVGVjaG5pY2FsIENvbmZlcmVuY2UKKyhGUkVFTklYIFRyYWNrKSIKKyxQdWJsaXNoZXI9IlVTRU5JWCBBc3NvY2lhdGlvbiIKKyx5ZWFyPSIyMDA0IgorLG1vbnRoPSJKdW5lIgorLHBhZ2VzPSIxODItMTkxIgorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MWE4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9VUC50eHQKQEAgLTAsMCArMSw2NCBAQAorUkNVIG9uIFVuaXByb2Nlc3NvciBTeXN0ZW1zCisKKworQSBjb21tb24gbWlzY29uY2VwdGlvbiBpcyB0aGF0LCBvbiBVUCBzeXN0ZW1zLCB0aGUgY2FsbF9yY3UoKSBwcmltaXRpdmUKK21heSBpbW1lZGlhdGVseSBpbnZva2UgaXRzIGZ1bmN0aW9uLCBhbmQgdGhhdCB0aGUgc3luY2hyb25pemVfa2VybmVsCitwcmltaXRpdmUgbWF5IHJldHVybiBpbW1lZGlhdGVseS4gIFRoZSBiYXNpcyBvZiB0aGlzIG1pc2NvbmNlcHRpb24KK2lzIHRoYXQgc2luY2UgdGhlcmUgaXMgb25seSBvbmUgQ1BVLCBpdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0bword2FpdCBmb3IgYW55dGhpbmcgZWxzZSB0byBnZXQgZG9uZSwgc2luY2UgdGhlcmUgYXJlIG5vIG90aGVyIENQVXMgZm9yCithbnl0aGluZyBlbHNlIHRvIGJlIGhhcHBlbmluZyBvbi4gIEFsdGhvdWdoIHRoaXMgYXBwcm9hY2ggd2lsbCBzb3J0IG9mCit3b3JrIGEgc3VycHJpc2luZyBhbW91bnQgb2YgdGhlIHRpbWUsIGl0IGlzIGEgdmVyeSBiYWQgaWRlYSBpbiBnZW5lcmFsLgorVGhpcyBkb2N1bWVudCBwcmVzZW50cyB0d28gZXhhbXBsZXMgdGhhdCBkZW1vbnN0cmF0ZSBleGFjdGx5IGhvdyBiYWQgYW4KK2lkZWEgdGhpcyBpcy4KKworCitFeGFtcGxlIDE6IHNvZnRpcnEgU3VpY2lkZQorCitTdXBwb3NlIHRoYXQgYW4gUkNVLWJhc2VkIGFsZ29yaXRobSBzY2FucyBhIGxpbmtlZCBsaXN0IGNvbnRhaW5pbmcKK2VsZW1lbnRzIEEsIEIsIGFuZCBDIGluIHByb2Nlc3MgY29udGV4dCwgYW5kIGNhbiBkZWxldGUgZWxlbWVudHMgZnJvbQordGhpcyBzYW1lIGxpc3QgaW4gc29mdGlycSBjb250ZXh0LiAgU3VwcG9zZSB0aGF0IHRoZSBwcm9jZXNzLWNvbnRleHQgc2NhbgoraXMgcmVmZXJlbmNpbmcgZWxlbWVudCBCIHdoZW4gaXQgaXMgaW50ZXJydXB0ZWQgYnkgc29mdGlycSBwcm9jZXNzaW5nLAord2hpY2ggZGVsZXRlcyBlbGVtZW50IEIsIGFuZCB0aGVuIGludm9rZXMgY2FsbF9yY3UoKSB0byBmcmVlIGVsZW1lbnQgQgorYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCisKK05vdywgaWYgY2FsbF9yY3UoKSB3ZXJlIHRvIGRpcmVjdGx5IGludm9rZSBpdHMgYXJndW1lbnRzLCB0aGVuIHVwb24gcmV0dXJuCitmcm9tIHNvZnRpcnEsIHRoZSBsaXN0IHNjYW4gd291bGQgZmluZCBpdHNlbGYgcmVmZXJlbmNpbmcgYSBuZXdseSBmcmVlZAorZWxlbWVudCBCLiAgVGhpcyBzaXR1YXRpb24gY2FuIGdyZWF0bHkgZGVjcmVhc2UgdGhlIGxpZmUgZXhwZWN0YW5jeSBvZgoreW91ciBrZXJuZWwuCisKKworRXhhbXBsZSAyOiBGdW5jdGlvbi1DYWxsIEZhdGFsaXR5CisKK09mIGNvdXJzZSwgb25lIGNvdWxkIGF2ZXJ0IHRoZSBzdWljaWRlIGRlc2NyaWJlZCBpbiB0aGUgcHJlY2VkaW5nIGV4YW1wbGUKK2J5IGhhdmluZyBjYWxsX3JjdSgpIGRpcmVjdGx5IGludm9rZSBpdHMgYXJndW1lbnRzIG9ubHkgaWYgaXQgd2FzIGNhbGxlZAorZnJvbSBwcm9jZXNzIGNvbnRleHQuICBIb3dldmVyLCB0aGlzIGNhbiBmYWlsIGluIGEgc2ltaWxhciBtYW5uZXIuCisKK1N1cHBvc2UgdGhhdCBhbiBSQ1UtYmFzZWQgYWxnb3JpdGhtIGFnYWluIHNjYW5zIGEgbGlua2VkIGxpc3QgY29udGFpbmluZworZWxlbWVudHMgQSwgQiwgYW5kIEMgaW4gcHJvY2VzcyBjb250ZXh0cywgYnV0IHRoYXQgaXQgaW52b2tlcyBhIGZ1bmN0aW9uCitvbiBlYWNoIGVsZW1lbnQgYXMgaXQgaXMgc2Nhbm5lZC4gIFN1cHBvc2UgZnVydGhlciB0aGF0IHRoaXMgZnVuY3Rpb24KK2RlbGV0ZXMgZWxlbWVudCBCIGZyb20gdGhlIGxpc3QsIHRoZW4gcGFzc2VzIGl0IHRvIGNhbGxfcmN1KCkgZm9yIGRlZmVycmVkCitmcmVlaW5nLiAgVGhpcyBtYXkgYmUgYSBiaXQgdW5jb252ZW50aW9uYWwsIGJ1dCBpdCBpcyBwZXJmZWN0bHkgbGVnYWwKK1JDVSB1c2FnZSwgc2luY2UgY2FsbF9yY3UoKSBtdXN0IHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kIHRvIGVsYXBzZS4KK1RoZXJlZm9yZSwgaW4gdGhpcyBjYXNlLCBhbGxvd2luZyBjYWxsX3JjdSgpIHRvIGltbWVkaWF0ZWx5IGludm9rZQoraXRzIGFyZ3VtZW50cyB3b3VsZCBjYXVzZSBpdCB0byBmYWlsIHRvIG1ha2UgdGhlIGZ1bmRhbWVudGFsIGd1YXJhbnRlZQordW5kZXJseWluZyBSQ1UsIG5hbWVseSB0aGF0IGNhbGxfcmN1KCkgZGVmZXJzIGludm9raW5nIGl0cyBhcmd1bWVudHMgdW50aWwKK2FsbCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGN1cnJlbnRseSBleGVjdXRpbmcgaGF2ZSBjb21wbGV0ZWQuCisKK1F1aWNrIFF1aXo6IHdoeSBpcyBpdCAtbm90LSBsZWdhbCB0byBpbnZva2Ugc3luY2hyb25pemVfa2VybmVsKCkgaW4KK3RoaXMgY2FzZT8KKworCitTdW1tYXJ5CisKK1Blcm1pdHRpbmcgY2FsbF9yY3UoKSB0byBpbW1lZGlhdGVseSBpbnZva2UgaXRzIGFyZ3VtZW50cyBvciBwZXJtaXR0aW5nCitzeW5jaHJvbml6ZV9rZXJuZWwoKSB0byBpbW1lZGlhdGVseSByZXR1cm4gYnJlYWtzIFJDVSwgZXZlbiBvbiBhIFVQIHN5c3RlbS4KK1NvIGRvIG5vdCBkbyBpdCEgIEV2ZW4gb24gYSBVUCBzeXN0ZW0sIHRoZSBSQ1UgaW5mcmFzdHJ1Y3R1cmUgLW11c3QtCityZXNwZWN0IGdyYWNlIHBlcmlvZHMuCisKKworQW5zd2VyIHRvIFF1aWNrIFF1aXoKKworVGhlIGNhbGxpbmcgZnVuY3Rpb24gaXMgc2Nhbm5pbmcgYW4gUkNVLXByb3RlY3RlZCBsaW5rZWQgbGlzdCwgYW5kCitpcyB0aGVyZWZvcmUgd2l0aGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoZXJlZm9yZSwKK3RoZSBjYWxsZWQgZnVuY3Rpb24gaGFzIGJlZW4gaW52b2tlZCB3aXRoaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorc2VjdGlvbiwgYW5kIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmxvY2suCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9hcnJheVJDVS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9hcnJheVJDVS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzZWJlNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2FycmF5UkNVLnR4dApAQCAtMCwwICsxLDE0MSBAQAorVXNpbmcgUkNVIHRvIFByb3RlY3QgUmVhZC1Nb3N0bHkgQXJyYXlzCisKKworQWx0aG91Z2ggUkNVIGlzIG1vcmUgY29tbW9ubHkgdXNlZCB0byBwcm90ZWN0IGxpbmtlZCBsaXN0cywgaXQgY2FuCithbHNvIGJlIHVzZWQgdG8gcHJvdGVjdCBhcnJheXMuICBUaHJlZSBzaXR1YXRpb25zIGFyZSBhcyBmb2xsb3dzOgorCisxLiAgSGFzaCBUYWJsZXMKKworMi4gIFN0YXRpYyBBcnJheXMKKworMy4gIFJlc2l6ZWFibGUgQXJyYXlzCisKK0VhY2ggb2YgdGhlc2Ugc2l0dWF0aW9ucyBhcmUgZGlzY3Vzc2VkIGJlbG93LgorCisKK1NpdHVhdGlvbiAxOiBIYXNoIFRhYmxlcworCitIYXNoIHRhYmxlcyBhcmUgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYW4gYXJyYXksIHdoZXJlIGVhY2ggYXJyYXkgZW50cnkKK2hhcyBhIGxpbmtlZC1saXN0IGhhc2ggY2hhaW4uICBFYWNoIGhhc2ggY2hhaW4gY2FuIGJlIHByb3RlY3RlZCBieSBSQ1UKK2FzIGRlc2NyaWJlZCBpbiB0aGUgbGlzdFJDVS50eHQgZG9jdW1lbnQuICBUaGlzIGFwcHJvYWNoIGFsc28gYXBwbGllcwordG8gb3RoZXIgYXJyYXktb2YtbGlzdCBzaXR1YXRpb25zLCBzdWNoIGFzIHJhZGl4IHRyZWVzLgorCisKK1NpdHVhdGlvbiAyOiBTdGF0aWMgQXJyYXlzCisKK1N0YXRpYyBhcnJheXMsIHdoZXJlIHRoZSBkYXRhIChyYXRoZXIgdGhhbiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEpIGlzCitsb2NhdGVkIGluIGVhY2ggYXJyYXkgZWxlbWVudCwgYW5kIHdoZXJlIHRoZSBhcnJheSBpcyBuZXZlciByZXNpemVkLAoraGF2ZSBub3QgYmVlbiB1c2VkIHdpdGggUkNVLiAgUmlrIHZhbiBSaWVsIHJlY29tbWVuZHMgdXNpbmcgc2VxbG9jayBpbgordGhpcyBzaXR1YXRpb24sIHdoaWNoIHdvdWxkIGFsc28gaGF2ZSBtaW5pbWFsIHJlYWQtc2lkZSBvdmVyaGVhZCBhcyBsb25nCithcyB1cGRhdGVzIGFyZSByYXJlLgorCitRdWljayBRdWl6OiAgV2h5IGlzIGl0IHNvIGltcG9ydGFudCB0aGF0IHVwZGF0ZXMgYmUgcmFyZSB3aGVuCisJICAgICB1c2luZyBzZXFsb2NrPworCisKK1NpdHVhdGlvbiAzOiBSZXNpemVhYmxlIEFycmF5cworCitVc2Ugb2YgUkNVIGZvciByZXNpemVhYmxlIGFycmF5cyBpcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGdyb3dfYXJ5KCkKK2Z1bmN0aW9uIHVzZWQgYnkgdGhlIFN5c3RlbSBWIElQQyBjb2RlLiAgVGhlIGFycmF5IGlzIHVzZWQgdG8gbWFwIGZyb20KK3NlbWFwaG9yZSwgbWVzc2FnZS1xdWV1ZSwgYW5kIHNoYXJlZC1tZW1vcnkgSURzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZQordGhhdCByZXByZXNlbnRzIHRoZSBjb3JyZXNwb25kaW5nIElQQyBjb25zdHJ1Y3QuICBUaGUgZ3Jvd19hcnkoKQorZnVuY3Rpb24gZG9lcyBub3QgYWNxdWlyZSBhbnkgbG9ja3M7IGluc3RlYWQgaXRzIGNhbGxlciBtdXN0IGhvbGQgdGhlCitpZHMtPnNlbSBzZW1hcGhvcmUuCisKK1RoZSBncm93X2FyeSgpIGZ1bmN0aW9uLCBzaG93biBiZWxvdywgZG9lcyBzb21lIGxpbWl0IGNoZWNrcywgYWxsb2NhdGVzIGEKK25ldyBpcGNfaWRfYXJ5LCBjb3BpZXMgdGhlIG9sZCB0byB0aGUgbmV3IHBvcnRpb24gb2YgdGhlIG5ldywgaW5pdGlhbGl6ZXMKK3RoZSByZW1haW5kZXIgb2YgdGhlIG5ldywgdXBkYXRlcyB0aGUgaWRzLT5lbnRyaWVzIHBvaW50ZXIgdG8gcG9pbnQgdG8KK3RoZSBuZXcgYXJyYXksIGFuZCBpbnZva2VzIGlwY19yY3VfcHV0cmVmKCkgdG8gZnJlZSB1cCB0aGUgb2xkIGFycmF5LgorTm90ZSB0aGF0IHJjdV9hc3NpZ25fcG9pbnRlcigpIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBpZHMtPmVudHJpZXMgcG9pbnRlciwKK3doaWNoIGluY2x1ZGVzIGFueSBtZW1vcnkgYmFycmllcnMgcmVxdWlyZWQgb24gd2hhdGV2ZXIgYXJjaGl0ZWN0dXJlCit5b3UgYXJlIHJ1bm5pbmcgb24uCisKKwlzdGF0aWMgaW50IGdyb3dfYXJ5KHN0cnVjdCBpcGNfaWRzKiBpZHMsIGludCBuZXdzaXplKQorCXsKKwkJc3RydWN0IGlwY19pZF9hcnkqIG5ldzsKKwkJc3RydWN0IGlwY19pZF9hcnkqIG9sZDsKKwkJaW50IGk7CisJCWludCBzaXplID0gaWRzLT5lbnRyaWVzLT5zaXplOworCisJCWlmKG5ld3NpemUgPiBJUENNTkkpCisJCQluZXdzaXplID0gSVBDTU5JOworCQlpZihuZXdzaXplIDw9IHNpemUpCisJCQlyZXR1cm4gbmV3c2l6ZTsKKworCQluZXcgPSBpcGNfcmN1X2FsbG9jKHNpemVvZihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqKSpuZXdzaXplICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcGNfaWRfYXJ5KSk7CisJCWlmKG5ldyA9PSBOVUxMKQorCQkJcmV0dXJuIHNpemU7CisJCW5ldy0+c2l6ZSA9IG5ld3NpemU7CisJCW1lbWNweShuZXctPnAsIGlkcy0+ZW50cmllcy0+cCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqKSpzaXplICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXBjX2lkX2FyeSkpOworCQlmb3IoaT1zaXplO2k8bmV3c2l6ZTtpKyspIHsKKwkJCW5ldy0+cFtpXSA9IE5VTEw7CisJCX0KKwkJb2xkID0gaWRzLT5lbnRyaWVzOworCisJCS8qCisJCSAqIFVzZSByY3VfYXNzaWduX3BvaW50ZXIoKSB0byBtYWtlIHN1cmUgdGhlIG1lbWNweWVkCisJCSAqIGNvbnRlbnRzIG9mIHRoZSBuZXcgYXJyYXkgYXJlIHZpc2libGUgYmVmb3JlIHRoZSBuZXcKKwkJICogYXJyYXkgYmVjb21lcyB2aXNpYmxlLgorCQkgKi8KKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGlkcy0+ZW50cmllcywgbmV3KTsKKworCQlpcGNfcmN1X3B1dHJlZihvbGQpOworCQlyZXR1cm4gbmV3c2l6ZTsKKwl9CisKK1RoZSBpcGNfcmN1X3B1dHJlZigpIGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIGFycmF5J3MgcmVmZXJlbmNlIGNvdW50CithbmQgdGhlbiwgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBoYXMgZHJvcHBlZCB0byB6ZXJvLCB1c2VzIGNhbGxfcmN1KCkKK3RvIGZyZWUgdGhlIGFycmF5IGFmdGVyIGEgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorCitUaGUgYXJyYXkgaXMgdHJhdmVyc2VkIGJ5IHRoZSBpcGNfbG9jaygpIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbgoraW5kZXhlcyBpbnRvIHRoZSBhcnJheSB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiByY3VfcmVhZF9sb2NrKCksCit1c2luZyByY3VfZGVyZWZlcmVuY2UoKSB0byBwaWNrIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBhcnJheSBzbwordGhhdCBpdCBtYXkgbGF0ZXIgc2FmZWx5IGJlIGRlcmVmZXJlbmNlZCAtLSBtZW1vcnkgYmFycmllcnMgYXJlCityZXF1aXJlZCBvbiB0aGUgQWxwaGEgQ1BVLiAgU2luY2UgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlzIHN0b3JlZAord2l0aCB0aGUgYXJyYXkgaXRzZWxmLCB0aGVyZSBjYW4gYmUgbm8gYXJyYXktc2l6ZSBtaXNtYXRjaGVzLCBzbworYSBzaW1wbGUgY2hlY2sgc3VmZmljZXMuICBUaGUgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcKK3RvIHRoZSBkZXNpcmVkIElQQyBvYmplY3QgaXMgcGxhY2VkIGluICJvdXQiLCB3aXRoIE5VTEwgaW5kaWNhdGluZworYSBub24tZXhpc3RlbnQgZW50cnkuICBBZnRlciBhY3F1aXJpbmcgIm91dC0+bG9jayIsIHRoZSAib3V0LT5kZWxldGVkIgorZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgSVBDIG9iamVjdCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZworZGVsZXRlZCwgYW5kLCBpZiBub3QsIHRoZSBwb2ludGVyIGlzIHJldHVybmVkLgorCisJc3RydWN0IGtlcm5faXBjX3Blcm0qIGlwY19sb2NrKHN0cnVjdCBpcGNfaWRzKiBpZHMsIGludCBpZCkKKwl7CisJCXN0cnVjdCBrZXJuX2lwY19wZXJtKiBvdXQ7CisJCWludCBsaWQgPSBpZCAlIFNFUV9NVUxUSVBMSUVSOworCQlzdHJ1Y3QgaXBjX2lkX2FyeSogZW50cmllczsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWVudHJpZXMgPSByY3VfZGVyZWZlcmVuY2UoaWRzLT5lbnRyaWVzKTsKKwkJaWYobGlkID49IGVudHJpZXMtPnNpemUpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJb3V0ID0gZW50cmllcy0+cFtsaWRdOworCQlpZihvdXQgPT0gTlVMTCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlzcGluX2xvY2soJm91dC0+bG9jayk7CisKKwkJLyogaXBjX3JtaWQoKSBtYXkgaGF2ZSBhbHJlYWR5IGZyZWVkIHRoZSBJRCB3aGlsZSBpcGNfbG9jaworCQkgKiB3YXMgc3Bpbm5pbmc6IGhlcmUgdmVyaWZ5IHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBzdGlsbCB2YWxpZAorCQkgKi8KKwkJaWYgKG91dC0+ZGVsZXRlZCkgeworCQkJc3Bpbl91bmxvY2soJm91dC0+bG9jayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJldHVybiBvdXQ7CisJfQorCisKK0Fuc3dlciB0byBRdWljayBRdWl6OgorCisJVGhlIHJlYXNvbiB0aGF0IGl0IGlzIGltcG9ydGFudCB0aGF0IHVwZGF0ZXMgYmUgcmFyZSB3aGVuCisJdXNpbmcgc2VxbG9jayBpcyB0aGF0IGZyZXF1ZW50IHVwZGF0ZXMgY2FuIGxpdmVsb2NrIHJlYWRlcnMuCisJT25lIHdheSB0byBhdm9pZCB0aGlzIHByb2JsZW0gaXMgdG8gYXNzaWduIGEgc2VxbG9jayBmb3IKKwllYWNoIGFycmF5IGVudHJ5IHJhdGhlciB0aGFuIHRvIHRoZSBlbnRpcmUgYXJyYXkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2E1NjhhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dApAQCAtMCwwICsxLDE1NyBAQAorUmV2aWV3IENoZWNrbGlzdCBmb3IgUkNVIFBhdGNoZXMKKworCitUaGlzIGRvY3VtZW50IGNvbnRhaW5zIGEgY2hlY2tsaXN0IGZvciBwcm9kdWNpbmcgYW5kIHJldmlld2luZyBwYXRjaGVzCit0aGF0IG1ha2UgdXNlIG9mIFJDVS4gIFZpb2xhdGluZyBhbnkgb2YgdGhlIHJ1bGVzIGxpc3RlZCBiZWxvdyB3aWxsCityZXN1bHQgaW4gdGhlIHNhbWUgc29ydHMgb2YgcHJvYmxlbXMgdGhhdCBsZWF2aW5nIG91dCBhIGxvY2tpbmcgcHJpbWl0aXZlCit3b3VsZCBjYXVzZS4gIFRoaXMgbGlzdCBpcyBiYXNlZCBvbiBleHBlcmllbmNlcyByZXZpZXdpbmcgc3VjaCBwYXRjaGVzCitvdmVyIGEgcmF0aGVyIGxvbmcgcGVyaW9kIG9mIHRpbWUsIGJ1dCBpbXByb3ZlbWVudHMgYXJlIGFsd2F5cyB3ZWxjb21lIQorCiswLglJcyBSQ1UgYmVpbmcgYXBwbGllZCB0byBhIHJlYWQtbW9zdGx5IHNpdHVhdGlvbj8gIElmIHRoZSBkYXRhCisJc3RydWN0dXJlIGlzIHVwZGF0ZWQgbW9yZSB0aGFuIGFib3V0IDEwJSBvZiB0aGUgdGltZSwgdGhlbgorCXlvdSBzaG91bGQgc3Ryb25nbHkgY29uc2lkZXIgc29tZSBvdGhlciBhcHByb2FjaCwgdW5sZXNzCisJZGV0YWlsZWQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBSQ1UgaXMgbm9uZXRoZWxlc3MKKwl0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4KKworCVRoZSBvdGhlciBleGNlcHRpb24gd291bGQgYmUgd2hlcmUgcGVyZm9ybWFuY2UgaXMgbm90IGFuIGlzc3VlLAorCWFuZCBSQ1UgcHJvdmlkZXMgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uLiAgQW4gZXhhbXBsZSBvZiB0aGlzCisJc2l0dWF0aW9uIGlzIHRoZSBkeW5hbWljIE5NSSBjb2RlIGluIHRoZSBMaW51eCAyLjYga2VybmVsLAorCWF0IGxlYXN0IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgTk1JcyBhcmUgcmFyZS4KKworMS4JRG9lcyB0aGUgdXBkYXRlIGNvZGUgaGF2ZSBwcm9wZXIgbXV0dWFsIGV4Y2x1c2lvbj8KKworCVJDVSBkb2VzIGFsbG93IC1yZWFkZXJzLSB0byBydW4gKGFsbW9zdCkgbmFrZWQsIGJ1dCAtd3JpdGVycy0gbXVzdAorCXN0aWxsIHVzZSBzb21lIHNvcnQgb2YgbXV0dWFsIGV4Y2x1c2lvbiwgc3VjaCBhczoKKworCWEuCWxvY2tpbmcsCisJYi4JYXRvbWljIG9wZXJhdGlvbnMsIG9yCisJYy4JcmVzdHJpY3RpbmcgdXBkYXRlcyB0byBhIHNpbmdsZSB0YXNrLgorCisJSWYgeW91IGNob29zZSAjYiwgYmUgcHJlcGFyZWQgdG8gZGVzY3JpYmUgaG93IHlvdSBoYXZlIGhhbmRsZWQKKwltZW1vcnkgYmFycmllcnMgb24gd2Vha2x5IG9yZGVyZWQgbWFjaGluZXMgKHByZXR0eSBtdWNoIGFsbCBvZgorCXRoZW0gLS0gZXZlbiB4ODYgYWxsb3dzIHJlYWRzIHRvIGJlIHJlb3JkZXJlZCksIGFuZCBiZSBwcmVwYXJlZAorCXRvIGV4cGxhaW4gd2h5IHRoaXMgYWRkZWQgY29tcGxleGl0eSBpcyB3b3J0aHdoaWxlLiAgSWYgeW91CisJY2hvb3NlICNjLCBiZSBwcmVwYXJlZCB0byBleHBsYWluIGhvdyB0aGlzIHNpbmdsZSB0YXNrIGRvZXMgbm90CisJYmVjb21lIGEgbWFqb3IgYm90dGxlbmVjayBvbiBiaWcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMuCisKKzIuCURvIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG1ha2UgcHJvcGVyIHVzZSBvZgorCXJjdV9yZWFkX2xvY2soKSBhbmQgZnJpZW5kcz8gIFRoZXNlIHByaW1pdGl2ZXMgYXJlIG5lZWRlZAorCXRvIHN1cHByZXNzIHByZWVtcHRpb24gKG9yIGJvdHRvbSBoYWx2ZXMsIGluIHRoZSBjYXNlIG9mCisJcmN1X3JlYWRfbG9ja19iaCgpKSBpbiB0aGUgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLAorCWFuZCBhcmUgYWxzbyBhbiBleGNlbGxlbnQgYWlkIHRvIHJlYWRhYmlsaXR5LgorCiszLglEb2VzIHRoZSB1cGRhdGUgY29kZSB0b2xlcmF0ZSBjb25jdXJyZW50IGFjY2Vzc2VzPworCisJVGhlIHdob2xlIHBvaW50IG9mIFJDVSBpcyB0byBwZXJtaXQgcmVhZGVycyB0byBydW4gd2l0aG91dAorCWFueSBsb2NrcyBvciBhdG9taWMgb3BlcmF0aW9ucy4gIFRoaXMgbWVhbnMgdGhhdCByZWFkZXJzIHdpbGwKKwliZSBydW5uaW5nIHdoaWxlIHVwZGF0ZXMgYXJlIGluIHByb2dyZXNzLiAgVGhlcmUgYXJlIGEgbnVtYmVyCisJb2Ygd2F5cyB0byBoYW5kbGUgdGhpcyBjb25jdXJyZW5jeSwgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb246CisKKwlhLglNYWtlIHVwZGF0ZXMgYXBwZWFyIGF0b21pYyB0byByZWFkZXJzLiAgRm9yIGV4YW1wbGUsCisJCXBvaW50ZXIgdXBkYXRlcyB0byBwcm9wZXJseSBhbGlnbmVkIGZpZWxkcyB3aWxsIGFwcGVhcgorCQlhdG9taWMsIGFzIHdpbGwgaW5kaXZpZHVhbCBhdG9taWMgcHJpbWl0aXZlcy4gIE9wZXJhdGlvbnMKKwkJcGVyZm9ybWVkIHVuZGVyIGEgbG9jayBhbmQgc2VxdWVuY2VzIG9mIG11bHRpcGxlIGF0b21pYworCQlwcmltaXRpdmVzIHdpbGwgLW5vdC0gYXBwZWFyIHRvIGJlIGF0b21pYy4KKworCQlUaGlzIGlzIGFsbW9zdCBhbHdheXMgdGhlIGJlc3QgYXBwcm9hY2guCisKKwliLglDYXJlZnVsbHkgb3JkZXIgdGhlIHVwZGF0ZXMgYW5kIHRoZSByZWFkcyBzbyB0aGF0CisJCXJlYWRlcnMgc2VlIHZhbGlkIGRhdGEgYXQgYWxsIHBoYXNlcyBvZiB0aGUgdXBkYXRlLgorCQlUaGlzIGlzIG9mdGVuIG1vcmUgZGlmZmljdWx0IHRoYW4gaXQgc291bmRzLCBlc3BlY2lhbGx5CisJCWdpdmVuIG1vZGVybiBDUFVzJyB0ZW5kZW5jeSB0byByZW9yZGVyIG1lbW9yeSByZWZlcmVuY2VzLgorCQlPbmUgbXVzdCB1c3VhbGx5IGxpYmVyYWxseSBzcHJpbmtsZSBtZW1vcnkgYmFycmllcnMKKwkJKHNtcF93bWIoKSwgc21wX3JtYigpLCBzbXBfbWIoKSkgdGhyb3VnaCB0aGUgY29kZSwKKwkJbWFraW5nIGl0IGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGFuZCB0byB0ZXN0LgorCisJCUl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIGdyb3VwIHRoZSBjaGFuZ2luZyBkYXRhIGludG8KKwkJYSBzZXBhcmF0ZSBzdHJ1Y3R1cmUsIHNvIHRoYXQgdGhlIGNoYW5nZSBtYXkgYmUgbWFkZQorCQl0byBhcHBlYXIgYXRvbWljIGJ5IHVwZGF0aW5nIGEgcG9pbnRlciB0byByZWZlcmVuY2UKKwkJYSBuZXcgc3RydWN0dXJlIGNvbnRhaW5pbmcgdXBkYXRlZCB2YWx1ZXMuCisKKzQuCVdlYWtseSBvcmRlcmVkIENQVXMgcG9zZSBzcGVjaWFsIGNoYWxsZW5nZXMuICBBbG1vc3QgYWxsIENQVXMKKwlhcmUgd2Vha2x5IG9yZGVyZWQgLS0gZXZlbiBpMzg2IENQVXMgYWxsb3cgcmVhZHMgdG8gYmUgcmVvcmRlcmVkLgorCVJDVSBjb2RlIG11c3QgdGFrZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBtZWFzdXJlcyB0byBwcmV2ZW50CisJbWVtb3J5LWNvcnJ1cHRpb24gcHJvYmxlbXM6CisKKwlhLglSZWFkZXJzIG11c3QgbWFpbnRhaW4gcHJvcGVyIG9yZGVyaW5nIG9mIHRoZWlyIG1lbW9yeQorCQlhY2Nlc3Nlcy4gIFRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgZW5zdXJlcyB0aGF0CisJCXRoZSBDUFUgcGlja3MgdXAgdGhlIHBvaW50ZXIgYmVmb3JlIGl0IHBpY2tzIHVwIHRoZSBkYXRhCisJCXRoYXQgdGhlIHBvaW50ZXIgcG9pbnRzIHRvLiAgVGhpcyByZWFsbHkgaXMgbmVjZXNzYXJ5CisJCW9uIEFscGhhIENQVXMuCUlmIHlvdSBkb24ndCBiZWxpZXZlIG1lLCBzZWU6CisKKwkJCWh0dHA6Ly93d3cub3BlbnZtcy5jb21wYXEuY29tL3dpemFyZC93aXpfMjYzNy5odG1sCisKKwkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyBhbHNvIGFuIGV4Y2VsbGVudAorCQlkb2N1bWVudGF0aW9uIGFpZCwgbGV0dGluZyB0aGUgcGVyc29uIHJlYWRpbmcgdGhlIGNvZGUKKwkJa25vdyBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgorCisJCVRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgaXMgdXNlZCBieSB0aGUgdmFyaW91cworCQkiX3JjdSgpIiBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCBzdWNoIGFzIHRoZQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLgorCisJYi4JSWYgdGhlIGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLCB0aGUgbGlzdF9kZWxfcmN1KCksCisJCWxpc3RfYWRkX3RhaWxfcmN1KCksIGFuZCBsaXN0X2RlbF9yY3UoKSBwcmltaXRpdmVzIG11c3QKKwkJYmUgdXNlZCBpbiBvcmRlciB0byBwcmV2ZW50IHdlYWtseSBvcmRlcmVkIG1hY2hpbmVzIGZyb20KKwkJbWlzb3JkZXJpbmcgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCBwb2ludGVyIHBsYW50aW5nLgorCQlTaW1pbGFybHksIGlmIHRoZSBobGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsIHRoZQorCQlobGlzdF9kZWxfcmN1KCkgYW5kIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHByaW1pdGl2ZXMKKwkJYXJlIHJlcXVpcmVkLgorCisJYy4JVXBkYXRlcyBtdXN0IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGEgZ2l2ZW4KKwkJc3RydWN0dXJlIGhhcHBlbnMgYmVmb3JlIHBvaW50ZXJzIHRvIHRoYXQgc3RydWN0dXJlIGFyZQorCQlwdWJsaWNpemVkLiAgVXNlIHRoZSByY3VfYXNzaWduX3BvaW50ZXIoKSBwcmltaXRpdmUKKwkJd2hlbiBwdWJsaWNpemluZyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgdGhhdCBjYW4KKwkJYmUgdHJhdmVyc2VkIGJ5IGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKworCQlbVGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHByaW1pdGl2ZSBpcyBpbiBwcm9jZXNzLl0KKworNS4JSWYgY2FsbF9yY3UoKSwgb3IgYSByZWxhdGVkIHByaW1pdGl2ZSBzdWNoIGFzIGNhbGxfcmN1X2JoKCksCisJaXMgdXNlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgYmUgd3JpdHRlbiB0byBiZSBjYWxsZWQKKwlmcm9tIHNvZnRpcnEgY29udGV4dC4gIEluIHBhcnRpY3VsYXIsIGl0IGNhbm5vdCBibG9jay4KKworNi4JU2luY2Ugc3luY2hyb25pemVfa2VybmVsKCkgYmxvY2tzLCBpdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20KKwlhbnkgc29ydCBvZiBpcnEgY29udGV4dC4KKworNy4JSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdSgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMKKwltdXN0IHVzZSByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpLiAgSWYgdGhlIHVwZGF0ZXIKKwl1c2VzIGNhbGxfcmN1X2JoKCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IHVzZQorCXJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkuICBNaXhpbmcgdGhpbmdzIHVwCisJd2lsbCByZXN1bHQgaW4gY29uZnVzaW9uIGFuZCBicm9rZW4ga2VybmVscy4KKworCU9uZSBleGNlcHRpb24gdG8gdGhpcyBydWxlOiByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpCisJbWF5IGJlIHN1YnN0aXR1dGVkIGZvciByY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpCisJaW4gY2FzZXMgd2hlcmUgbG9jYWwgYm90dG9tIGhhbHZlcyBhcmUgYWxyZWFkeSBrbm93biB0byBiZQorCWRpc2FibGVkLCBmb3IgZXhhbXBsZSwgaW4gaXJxIG9yIHNvZnRpcnEgY29udGV4dC4gIENvbW1lbnRpbmcKKwlzdWNoIGNhc2VzIGlzIGEgbXVzdCwgb2YgY291cnNlISAgQW5kIHRoZSBqdXJ5IGlzIHN0aWxsIG91dCBvbgorCXdoZXRoZXIgdGhlIGluY3JlYXNlZCBzcGVlZCBpcyB3b3J0aCBpdC4KKworOC4JQWx0aG91Z2ggc3luY2hyb25pemVfa2VybmVsKCkgaXMgYSBiaXQgc2xvd2VyIHRoYW4gaXMgY2FsbF9yY3UoKSwKKwlpdCB1c3VhbGx5IHJlc3VsdHMgaW4gc2ltcGxlciBjb2RlLiAgU28sIHVubGVzcyB1cGRhdGUgcGVyZm9ybWFuY2UKKwlpcyBpbXBvcnRhbnQgb3IgdGhlIHVwZGF0ZXJzIGNhbm5vdCBibG9jaywgc3luY2hyb25pemVfa2VybmVsKCkKKwlzaG91bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGNhbGxfcmN1KCkuCisKKzkuCUFsbCBSQ1UgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgd2hpY2ggaW5jbHVkZQorCWxpc3RfZm9yX2VhY2hfcmN1KCksIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCksCisJbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UoKSwgYW5kIGxpc3RfZm9yX2VhY2hfc2FmZV9yY3UoKSwKKwltdXN0IGJlIHdpdGhpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBSQ1UKKwlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYXJlIGRlbGltaXRlZCBieSByY3VfcmVhZF9sb2NrKCkKKwlhbmQgcmN1X3JlYWRfdW5sb2NrKCksIG9yIGJ5IHNpbWlsYXIgcHJpbWl0aXZlcyBzdWNoIGFzCisJcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4KKworCVVzZSBvZiB0aGUgX3JjdSgpIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMgb3V0c2lkZSBvZiBhbgorCVJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBjYXVzZXMgbm8gaGFybSBvdGhlciB0aGFuCisJYSBzbGlnaHQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb24gQWxwaGEgQ1BVcyBhbmQgc29tZQorCWNvbmZ1c2lvbiBvbiB0aGUgcGFydCBvZiBwZW9wbGUgdHJ5aW5nIHRvIHJlYWQgdGhlIGNvZGUuCisKKwlBbm90aGVyIHdheSBvZiB0aGlua2luZyBvZiB0aGlzIGlzICJJZiB5b3UgYXJlIGhvbGRpbmcgdGhlCisJbG9jayB0aGF0IHByZXZlbnRzIHRoZSBkYXRhIHN0cnVjdHVyZSBmcm9tIGNoYW5naW5nLCB3aHkgZG8KKwl5b3UgYWxzbyBuZWVkIFJDVS1iYXNlZCBwcm90ZWN0aW9uPyIgIFRoYXQgc2FpZCwgdGhlcmUgbWF5CisJd2VsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHVzZSBvZiB0aGUgX3JjdSgpIGxpc3QtdHJhdmVyc2FsCisJcHJpbWl0aXZlcyB3aGlsZSB0aGUgdXBkYXRlLXNpZGUgbG9jayBpcyBoZWxkIHJlc3VsdHMgaW4KKwlzaW1wbGVyIGFuZCBtb3JlIG1haW50YWluYWJsZSBjb2RlLiAgVGhlIGp1cnkgaXMgc3RpbGwgb3V0CisJb24gdGhpcyBxdWVzdGlvbi4KKworMTAuCUNvbnZlcnNlbHksIGlmIHlvdSBhcmUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLAorCXlvdSAtbXVzdC0gdXNlIHRoZSAiX3JjdSgpIiB2YXJpYW50cyBvZiB0aGUgbGlzdCBtYWNyb3MuCisJRmFpbGluZyB0byBkbyBzbyB3aWxsIGJyZWFrIEFscGhhIGFuZCBjb25mdXNlIHBlb3BsZSByZWFkaW5nCisJeW91ciBjb2RlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE2ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKQEAgLTAsMCArMSwzMDcgQEAKK1VzaW5nIFJDVSB0byBQcm90ZWN0IFJlYWQtTW9zdGx5IExpbmtlZCBMaXN0cworCisKK09uZSBvZiB0aGUgYmVzdCBhcHBsaWNhdGlvbnMgb2YgUkNVIGlzIHRvIHByb3RlY3QgcmVhZC1tb3N0bHkgbGlua2VkIGxpc3RzCisoInN0cnVjdCBsaXN0X2hlYWQiIGluIGxpc3QuaCkuICBPbmUgYmlnIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoCitpcyB0aGF0IGFsbCBvZiB0aGUgcmVxdWlyZWQgbWVtb3J5IGJhcnJpZXJzIGFyZSBpbmNsdWRlZCBmb3IgeW91IGluCit0aGUgbGlzdCBtYWNyb3MuICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBzZXZlcmFsIGFwcGxpY2F0aW9ucyBvZiBSQ1UsCit3aXRoIHRoZSBiZXN0IGZpdHMgZmlyc3QuCisKKworRXhhbXBsZSAxOiBSZWFkLVNpZGUgQWN0aW9uIFRha2VuIE91dHNpZGUgb2YgTG9jaywgTm8gSW4tUGxhY2UgVXBkYXRlcworCitUaGUgYmVzdCBhcHBsaWNhdGlvbnMgYXJlIGNhc2VzIHdoZXJlLCBpZiByZWFkZXItd3JpdGVyIGxvY2tpbmcgd2VyZQordXNlZCwgdGhlIHJlYWQtc2lkZSBsb2NrIHdvdWxkIGJlIGRyb3BwZWQgYmVmb3JlIHRha2luZyBhbnkgYWN0aW9uCitiYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiB0aGUgc2VhcmNoLiAgVGhlIG1vc3QgY2VsZWJyYXRlZCBleGFtcGxlIGlzCit0aGUgcm91dGluZyB0YWJsZS4gIEJlY2F1c2UgdGhlIHJvdXRpbmcgdGFibGUgaXMgdHJhY2tpbmcgdGhlIHN0YXRlIG9mCitlcXVpcG1lbnQgb3V0c2lkZSBvZiB0aGUgY29tcHV0ZXIsIGl0IHdpbGwgYXQgdGltZXMgY29udGFpbiBzdGFsZSBkYXRhLgorVGhlcmVmb3JlLCBvbmNlIHRoZSByb3V0ZSBoYXMgYmVlbiBjb21wdXRlZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBob2xkCit0aGUgcm91dGluZyB0YWJsZSBzdGF0aWMgZHVyaW5nIHRyYW5zbWlzc2lvbiBvZiB0aGUgcGFja2V0LiAgQWZ0ZXIgYWxsLAoreW91IGNhbiBob2xkIHRoZSByb3V0aW5nIHRhYmxlIHN0YXRpYyBhbGwgeW91IHdhbnQsIGJ1dCB0aGF0IHdvbid0IGtlZXAKK3RoZSBleHRlcm5hbCBJbnRlcm5ldCBmcm9tIGNoYW5naW5nLCBhbmQgaXQgaXMgdGhlIHN0YXRlIG9mIHRoZSBleHRlcm5hbAorSW50ZXJuZXQgdGhhdCByZWFsbHkgbWF0dGVycy4gIEluIGFkZGl0aW9uLCByb3V0aW5nIGVudHJpZXMgYXJlIHR5cGljYWxseQorYWRkZWQgb3IgZGVsZXRlZCwgcmF0aGVyIHRoYW4gYmVpbmcgbW9kaWZpZWQgaW4gcGxhY2UuCisKK0Egc3RyYWlnaHRmb3J3YXJkIGV4YW1wbGUgb2YgdGhpcyB1c2Ugb2YgUkNVIG1heSBiZSBmb3VuZCBpbiB0aGUKK3N5c3RlbS1jYWxsIGF1ZGl0aW5nIHN1cHBvcnQuICBGb3IgZXhhbXBsZSwgYSByZWFkZXItd3JpdGVyIGxvY2tlZAoraW1wbGVtZW50YXRpb24gb2YgYXVkaXRfZmlsdGVyX3Rhc2soKSBtaWdodCBiZSBhcyBmb2xsb3dzOgorCisJc3RhdGljIGVudW0gYXVkaXRfc3RhdGUgYXVkaXRfZmlsdGVyX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CisJCWVudW0gYXVkaXRfc3RhdGUgICBzdGF0ZTsKKworCQlyZWFkX2xvY2soJmF1ZGl0c2NfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmF1ZGl0X3Rza2xpc3QsIGxpc3QpIHsKKwkJCWlmIChhdWRpdF9maWx0ZXJfcnVsZXModHNrLCAmZS0+cnVsZSwgTlVMTCwgJnN0YXRlKSkgeworCQkJCXJlYWRfdW5sb2NrKCZhdWRpdHNjX2xvY2spOworCQkJCXJldHVybiBzdGF0ZTsKKwkJCX0KKwkJfQorCQlyZWFkX3VubG9jaygmYXVkaXRzY19sb2NrKTsKKwkJcmV0dXJuIEFVRElUX0JVSUxEX0NPTlRFWFQ7CisJfQorCitIZXJlIHRoZSBsaXN0IGlzIHNlYXJjaGVkIHVuZGVyIHRoZSBsb2NrLCBidXQgdGhlIGxvY2sgaXMgZHJvcHBlZCBiZWZvcmUKK3RoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHJldHVybmVkLiAgQnkgdGhlIHRpbWUgdGhhdCB0aGlzIHZhbHVlIGlzIGFjdGVkCitvbiwgdGhlIGxpc3QgbWF5IHdlbGwgaGF2ZSBiZWVuIG1vZGlmaWVkLiAgVGhpcyBtYWtlcyBzZW5zZSwgc2luY2UgaWYKK3lvdSBhcmUgdHVybmluZyBhdWRpdGluZyBvZmYsIGl0IGlzIE9LIHRvIGF1ZGl0IGEgZmV3IGV4dHJhIHN5c3RlbSBjYWxscy4KKworVGhpcyBtZWFucyB0aGF0IFJDVSBjYW4gYmUgZWFzaWx5IGFwcGxpZWQgdG8gdGhlIHJlYWQgc2lkZSwgYXMgZm9sbG93czoKKworCXN0YXRpYyBlbnVtIGF1ZGl0X3N0YXRlIGF1ZGl0X2ZpbHRlcl90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorCXsKKwkJc3RydWN0IGF1ZGl0X2VudHJ5ICplOworCQllbnVtIGF1ZGl0X3N0YXRlICAgc3RhdGU7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCAmYXVkaXRfdHNrbGlzdCwgbGlzdCkgeworCQkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCAmc3RhdGUpKSB7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJcmV0dXJuIHN0YXRlOworCQkJfQorCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gQVVESVRfQlVJTERfQ09OVEVYVDsKKwl9CisKK1RoZSByZWFkX2xvY2soKSBhbmQgcmVhZF91bmxvY2soKSBjYWxscyBoYXZlIGJlY29tZSByY3VfcmVhZF9sb2NrKCkKK2FuZCByY3VfcmVhZF91bmxvY2soKSwgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlIGxpc3RfZm9yX2VhY2hfZW50cnkoKSBoYXMKK2JlY29tZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLiAgVGhlIF9yY3UoKSBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzCitpbnNlcnQgdGhlIHJlYWQtc2lkZSBtZW1vcnkgYmFycmllcnMgdGhhdCBhcmUgcmVxdWlyZWQgb24gREVDIEFscGhhIENQVXMuCisKK1RoZSBjaGFuZ2VzIHRvIHRoZSB1cGRhdGUgc2lkZSBhcmUgYWxzbyBzdHJhaWdodGZvcndhcmQuICBBIHJlYWRlci13cml0ZXIKK2xvY2sgbWlnaHQgYmUgdXNlZCBhcyBmb2xsb3dzIGZvciBkZWxldGlvbiBhbmQgaW5zZXJ0aW9uOgorCisJc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZGVsX3J1bGUoc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorCXsKKwkJc3RydWN0IGF1ZGl0X2VudHJ5ICAqZTsKKworCQl3cml0ZV9sb2NrKCZhdWRpdHNjX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgeworCQkJCWxpc3RfZGVsKCZlLT5saXN0KTsKKwkJCQl3cml0ZV91bmxvY2soJmF1ZGl0c2NfbG9jayk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJd3JpdGVfdW5sb2NrKCZhdWRpdHNjX2xvY2spOworCQlyZXR1cm4gLUVGQVVMVDsJCS8qIE5vIG1hdGNoaW5nIHJ1bGUgKi8KKwl9CisKKwlzdGF0aWMgaW5saW5lIGludCBhdWRpdF9hZGRfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKKwl7CisJCXdyaXRlX2xvY2soJmF1ZGl0c2NfbG9jayk7CisJCWlmIChlbnRyeS0+cnVsZS5mbGFncyAmIEFVRElUX1BSRVBFTkQpIHsKKwkJCWVudHJ5LT5ydWxlLmZsYWdzICY9IH5BVURJVF9QUkVQRU5EOworCQkJbGlzdF9hZGQoJmVudHJ5LT5saXN0LCBsaXN0KTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCBsaXN0KTsKKwkJfQorCQl3cml0ZV91bmxvY2soJmF1ZGl0c2NfbG9jayk7CisJCXJldHVybiAwOworCX0KKworRm9sbG93aW5nIGFyZSB0aGUgUkNVIGVxdWl2YWxlbnRzIGZvciB0aGVzZSB0d28gZnVuY3Rpb25zOgorCisJc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZGVsX3J1bGUoc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorCXsKKwkJc3RydWN0IGF1ZGl0X2VudHJ5ICAqZTsKKworCQkvKiBEbyBub3QgdXNlIHRoZSBfcmN1IGl0ZXJhdG9yIGhlcmUsIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkKKwkJICogZGVsZXRpb24gcm91dGluZS4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7CisJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCAmZS0+cnVsZSkpIHsKKwkJCQlsaXN0X2RlbF9yY3UoJmUtPmxpc3QpOworCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJcmV0dXJuIC1FRkFVTFQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCisJfQorCisJc3RhdGljIGlubGluZSBpbnQgYXVkaXRfYWRkX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCisJeworCQlpZiAoZW50cnktPnJ1bGUuZmxhZ3MgJiBBVURJVF9QUkVQRU5EKSB7CisJCQllbnRyeS0+cnVsZS5mbGFncyAmPSB+QVVESVRfUFJFUEVORDsKKwkJCWxpc3RfYWRkX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCBsaXN0KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKK05vcm1hbGx5LCB0aGUgd3JpdGVfbG9jaygpIGFuZCB3cml0ZV91bmxvY2soKSB3b3VsZCBiZSByZXBsYWNlZCBieQorYSBzcGluX2xvY2soKSBhbmQgYSBzcGluX3VubG9jaygpLCBidXQgaW4gdGhpcyBjYXNlLCBhbGwgY2FsbGVycyBob2xkCithdWRpdF9uZXRsaW5rX3NlbSwgc28gbm8gYWRkaXRpb25hbCBsb2NraW5nIGlzIHJlcXVpcmVkLiAgVGhlIGF1ZGl0c2NfbG9jaworY2FuIHRoZXJlZm9yZSBiZSBlbGltaW5hdGVkLCBzaW5jZSB1c2Ugb2YgUkNVIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yCit3cml0ZXJzIHRvIGV4Y2x1ZGUgcmVhZGVycy4KKworVGhlIGxpc3RfZGVsKCksIGxpc3RfYWRkKCksIGFuZCBsaXN0X2FkZF90YWlsKCkgcHJpbWl0aXZlcyBoYXZlIGJlZW4KK3JlcGxhY2VkIGJ5IGxpc3RfZGVsX3JjdSgpLCBsaXN0X2FkZF9yY3UoKSwgYW5kIGxpc3RfYWRkX3RhaWxfcmN1KCkuCitUaGUgX3JjdSgpIGxpc3QtbWFuaXB1bGF0aW9uIHByaW1pdGl2ZXMgYWRkIG1lbW9yeSBiYXJyaWVycyB0aGF0IGFyZQorbmVlZGVkIG9uIHdlYWtseSBvcmRlcmVkIENQVXMgKG1vc3Qgb2YgdGhlbSEpLgorCitTbywgd2hlbiByZWFkZXJzIGNhbiB0b2xlcmF0ZSBzdGFsZSBkYXRhIGFuZCB3aGVuIGVudHJpZXMgYXJlIGVpdGhlciBhZGRlZAorb3IgZGVsZXRlZCwgd2l0aG91dCBpbi1wbGFjZSBtb2RpZmljYXRpb24sIGl0IGlzIHZlcnkgZWFzeSB0byB1c2UgUkNVIQorCisKK0V4YW1wbGUgMjogSGFuZGxpbmcgSW4tUGxhY2UgVXBkYXRlcworCitUaGUgc3lzdGVtLWNhbGwgYXVkaXRpbmcgY29kZSBkb2VzIG5vdCB1cGRhdGUgYXVkaXRpbmcgcnVsZXMgaW4gcGxhY2UuCitIb3dldmVyLCBpZiBpdCBkaWQsIHJlYWRlci13cml0ZXItbG9ja2VkIGNvZGUgdG8gZG8gc28gbWlnaHQgbG9vayBhcworZm9sbG93cyAocHJlc3VtYWJseSwgdGhlIGZpZWxkX2NvdW50IGlzIG9ubHkgcGVybWl0dGVkIHRvIGRlY3JlYXNlLAorb3RoZXJ3aXNlLCB0aGUgYWRkZWQgZmllbGRzIHdvdWxkIG5lZWQgdG8gYmUgZmlsbGVkIGluKToKKworCXN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X3VwZF9ydWxlKHN0cnVjdCBhdWRpdF9ydWxlICpydWxlLAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJIF9fdTMyIG5ld2FjdGlvbiwKKwkJCQkJIF9fdTMyIG5ld2ZpZWxkX2NvdW50KQorCXsKKwkJc3RydWN0IGF1ZGl0X2VudHJ5ICAqZTsKKwkJc3RydWN0IGF1ZGl0X25ld2VudHJ5ICpuZTsKKworCQl3cml0ZV9sb2NrKCZhdWRpdHNjX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKKwkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgeworCQkJCWUtPnJ1bGUuYWN0aW9uID0gbmV3YWN0aW9uOworCQkJCWUtPnJ1bGUuZmlsZV9jb3VudCA9IG5ld2ZpZWxkX2NvdW50OworCQkJCXdyaXRlX3VubG9jaygmYXVkaXRzY19sb2NrKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQl3cml0ZV91bmxvY2soJmF1ZGl0c2NfbG9jayk7CisJCXJldHVybiAtRUZBVUxUOwkJLyogTm8gbWF0Y2hpbmcgcnVsZSAqLworCX0KKworVGhlIFJDVSB2ZXJzaW9uIGNyZWF0ZXMgYSBjb3B5LCB1cGRhdGVzIHRoZSBjb3B5LCB0aGVuIHJlcGxhY2VzIHRoZSBvbGQKK2VudHJ5IHdpdGggdGhlIG5ld2x5IHVwZGF0ZWQgZW50cnkuICBUaGlzIHNlcXVlbmNlIG9mIGFjdGlvbnMsIGFsbG93aW5nCitjb25jdXJyZW50IHJlYWRzIHdoaWxlIGRvaW5nIGEgY29weSB0byBwZXJmb3JtIGFuIHVwZGF0ZSwgaXMgd2hhdCBnaXZlcworUkNVICgicmVhZC1jb3B5IHVwZGF0ZSIpIGl0cyBuYW1lLiAgVGhlIFJDVSBjb2RlIGlzIGFzIGZvbGxvd3M6CisKKwlzdGF0aWMgaW5saW5lIGludCBhdWRpdF91cGRfcnVsZShzdHJ1Y3QgYXVkaXRfcnVsZSAqcnVsZSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJCSBfX3UzMiBuZXdhY3Rpb24sCisJCQkJCSBfX3UzMiBuZXdmaWVsZF9jb3VudCkKKwl7CisJCXN0cnVjdCBhdWRpdF9lbnRyeSAgKmU7CisJCXN0cnVjdCBhdWRpdF9uZXdlbnRyeSAqbmU7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7CisJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCAmZS0+cnVsZSkpIHsKKwkJCQluZSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOworCQkJCWlmIChuZSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlhdWRpdF9jb3B5X3J1bGUoJm5lLT5ydWxlLCAmZS0+cnVsZSk7CisJCQkJbmUtPnJ1bGUuYWN0aW9uID0gbmV3YWN0aW9uOworCQkJCW5lLT5ydWxlLmZpbGVfY291bnQgPSBuZXdmaWVsZF9jb3VudDsKKwkJCQlsaXN0X2FkZF9yY3UobmUsIGUpOworCQkJCWxpc3RfZGVsKGUpOworCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJcmV0dXJuIC1FRkFVTFQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCisJfQorCitBZ2FpbiwgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBob2xkcyBhdWRpdF9uZXRsaW5rX3NlbS4gIE5vcm1hbGx5LAordGhlIHJlYWRlci13cml0ZXIgbG9jayB3b3VsZCBiZWNvbWUgYSBzcGlubG9jayBpbiB0aGlzIHNvcnQgb2YgY29kZS4KKworCitFeGFtcGxlIDM6IEVsaW1pbmF0aW5nIFN0YWxlIERhdGEKKworVGhlIGF1ZGl0aW5nIGV4YW1wbGVzIGFib3ZlIHRvbGVyYXRlIHN0YWxlIGRhdGEsIGFzIGRvIG1vc3QgYWxnb3JpdGhtcwordGhhdCBhcmUgdHJhY2tpbmcgZXh0ZXJuYWwgc3RhdGUuICBCZWNhdXNlIHRoZXJlIGlzIGEgZGVsYXkgZnJvbSB0aGUKK3RpbWUgdGhlIGV4dGVybmFsIHN0YXRlIGNoYW5nZXMgYmVmb3JlIExpbnV4IGJlY29tZXMgYXdhcmUgb2YgdGhlIGNoYW5nZSwKK2FkZGl0aW9uYWwgUkNVLWluZHVjZWQgc3RhbGVuZXNzIGlzIG5vcm1hbGx5IG5vdCBhIHByb2JsZW0uCisKK0hvd2V2ZXIsIHRoZXJlIGFyZSBtYW55IGV4YW1wbGVzIHdoZXJlIHN0YWxlIGRhdGEgY2Fubm90IGJlIHRvbGVyYXRlZC4KK09uZSBleGFtcGxlIGluIHRoZSBMaW51eCBrZXJuZWwgaXMgdGhlIFN5c3RlbSBWIElQQyAoc2VlIHRoZSBpcGNfbG9jaygpCitmdW5jdGlvbiBpbiBpcGMvdXRpbC5jKS4gIFRoaXMgY29kZSBjaGVja3MgYSAiZGVsZXRlZCIgZmxhZyB1bmRlciBhCitwZXItZW50cnkgc3BpbmxvY2ssIGFuZCwgaWYgdGhlICJkZWxldGVkIiBmbGFnIGlzIHNldCwgcHJldGVuZHMgdGhhdCB0aGUKK2VudHJ5IGRvZXMgbm90IGV4aXN0LiAgRm9yIHRoaXMgdG8gYmUgaGVscGZ1bCwgdGhlIHNlYXJjaCBmdW5jdGlvbiBtdXN0CityZXR1cm4gaG9sZGluZyB0aGUgcGVyLWVudHJ5IHNwaW5sb2NrLCBhcyBpcGNfbG9jaygpIGRvZXMgaW4gZmFjdCBkby4KKworUXVpY2sgUXVpejogIFdoeSBkb2VzIHRoZSBzZWFyY2ggZnVuY3Rpb24gbmVlZCB0byByZXR1cm4gaG9sZGluZyB0aGUKK3Blci1lbnRyeSBsb2NrIGZvciB0aGlzIGRlbGV0ZWQtZmxhZyB0ZWNobmlxdWUgdG8gYmUgaGVscGZ1bD8KKworSWYgdGhlIHN5c3RlbS1jYWxsIGF1ZGl0IG1vZHVsZSB3ZXJlIHRvIGV2ZXIgbmVlZCB0byByZWplY3Qgc3RhbGUgZGF0YSwKK29uZSB3YXkgdG8gYWNjb21wbGlzaCB0aGlzIHdvdWxkIGJlIHRvIGFkZCBhICJkZWxldGVkIiBmbGFnIGFuZCBhICJsb2NrIgorc3BpbmxvY2sgdG8gdGhlIGF1ZGl0X2VudHJ5IHN0cnVjdHVyZSwgYW5kIG1vZGlmeSBhdWRpdF9maWx0ZXJfdGFzaygpCithcyBmb2xsb3dzOgorCisJc3RhdGljIGVudW0gYXVkaXRfc3RhdGUgYXVkaXRfZmlsdGVyX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCisJeworCQlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CisJCWVudW0gYXVkaXRfc3RhdGUgICBzdGF0ZTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhdWRpdF90c2tsaXN0LCBsaXN0KSB7CisJCQlpZiAoYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIE5VTEwsICZzdGF0ZSkpIHsKKwkJCQlzcGluX2xvY2soJmUtPmxvY2spOworCQkJCWlmIChlLT5kZWxldGVkKSB7CisJCQkJCXNwaW5fdW5sb2NrKCZlLT5sb2NrKTsKKwkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOworCQkJCX0KKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm4gc3RhdGU7CisJCQl9CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOworCX0KKworTm90ZSB0aGF0IHRoaXMgZXhhbXBsZSBhc3N1bWVzIHRoYXQgZW50cmllcyBhcmUgb25seSBhZGRlZCBhbmQgZGVsZXRlZC4KK0FkZGl0aW9uYWwgbWVjaGFuaXNtIGlzIHJlcXVpcmVkIHRvIGRlYWwgY29ycmVjdGx5IHdpdGggdGhlCit1cGRhdGUtaW4tcGxhY2UgcGVyZm9ybWVkIGJ5IGF1ZGl0X3VwZF9ydWxlKCkuICBGb3Igb25lIHRoaW5nLAorYXVkaXRfdXBkX3J1bGUoKSB3b3VsZCBuZWVkIGFkZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZQordGhhdCB0aGUgbGlzdF9hZGRfcmN1KCkgd2FzIHJlYWxseSBleGVjdXRlZCBiZWZvcmUgdGhlIGxpc3RfZGVsX3JjdSgpLgorCitUaGUgYXVkaXRfZGVsX3J1bGUoKSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHNldCB0aGUgImRlbGV0ZWQiCitmbGFnIHVuZGVyIHRoZSBzcGlubG9jayBhcyBmb2xsb3dzOgorCisJc3RhdGljIGlubGluZSBpbnQgYXVkaXRfZGVsX3J1bGUoc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorCXsKKwkJc3RydWN0IGF1ZGl0X2VudHJ5ICAqZTsKKworCQkvKiBEbyBub3QgdXNlIHRoZSBfcmN1IGl0ZXJhdG9yIGhlcmUsIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkKKwkJICogZGVsZXRpb24gcm91dGluZS4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7CisJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCAmZS0+cnVsZSkpIHsKKwkJCQlzcGluX2xvY2soJmUtPmxvY2spOworCQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7CisJCQkJZS0+ZGVsZXRlZCA9IDE7CisJCQkJc3Bpbl91bmxvY2soJmUtPmxvY2spOworCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJcmV0dXJuIC1FRkFVTFQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCisJfQorCisKK1N1bW1hcnkKKworUmVhZC1tb3N0bHkgbGlzdC1iYXNlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjYW4gdG9sZXJhdGUgc3RhbGUgZGF0YSBhcmUKK3RoZSBtb3N0IGFtZW5hYmxlIHRvIHVzZSBvZiBSQ1UuICBUaGUgc2ltcGxlc3QgY2FzZSBpcyB3aGVyZSBlbnRyaWVzIGFyZQorZWl0aGVyIGFkZGVkIG9yIGRlbGV0ZWQgZnJvbSB0aGUgZGF0YSBzdHJ1Y3R1cmUgKG9yIGF0b21pY2FsbHkgbW9kaWZpZWQKK2luIHBsYWNlKSwgYnV0IG5vbi1hdG9taWMgaW4tcGxhY2UgbW9kaWZpY2F0aW9ucyBjYW4gYmUgaGFuZGxlZCBieSBtYWtpbmcKK2EgY29weSwgdXBkYXRpbmcgdGhlIGNvcHksIHRoZW4gcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCB3aXRoIHRoZSBjb3B5LgorSWYgc3RhbGUgZGF0YSBjYW5ub3QgYmUgdG9sZXJhdGVkLCB0aGVuIGEgImRlbGV0ZWQiIGZsYWcgbWF5IGJlIHVzZWQKK2luIGNvbmp1bmN0aW9uIHdpdGggYSBwZXItZW50cnkgc3BpbmxvY2sgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIHNlYXJjaAorZnVuY3Rpb24gdG8gcmVqZWN0IG5ld2x5IGRlbGV0ZWQgZGF0YS4KKworCitBbnN3ZXIgdG8gUXVpY2sgUXVpegorCitJZiB0aGUgc2VhcmNoIGZ1bmN0aW9uIGRyb3BzIHRoZSBwZXItZW50cnkgbG9jayBiZWZvcmUgcmV0dXJuaW5nLCB0aGVuCit0aGUgY2FsbGVyIHdpbGwgYmUgcHJvY2Vzc2luZyBzdGFsZSBkYXRhIGluIGFueSBjYXNlLiAgSWYgaXQgaXMgcmVhbGx5CitPSyB0byBiZSBwcm9jZXNzaW5nIHN0YWxlIGRhdGEsIHRoZW4geW91IGRvbid0IG5lZWQgYSAiZGVsZXRlZCIgZmxhZy4KK0lmIHByb2Nlc3Npbmcgc3RhbGUgZGF0YSByZWFsbHkgaXMgYSBwcm9ibGVtLCB0aGVuIHlvdSBuZWVkIHRvIGhvbGQgdGhlCitwZXItZW50cnkgbG9jayBhY3Jvc3MgYWxsIG9mIHRoZSBjb2RlIHRoYXQgdXNlcyB0aGUgdmFsdWUgbG9va2VkIHVwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwYzJhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTAsMCArMSw2NyBAQAorUkNVIENvbmNlcHRzCisKKworVGhlIGJhc2ljIGlkZWEgYmVoaW5kIFJDVSAocmVhZC1jb3B5IHVwZGF0ZSkgaXMgdG8gc3BsaXQgZGVzdHJ1Y3RpdmUKK29wZXJhdGlvbnMgaW50byB0d28gcGFydHMsIG9uZSB0aGF0IHByZXZlbnRzIGFueW9uZSBmcm9tIHNlZWluZyB0aGUgZGF0YQoraXRlbSBiZWluZyBkZXN0cm95ZWQsIGFuZCBvbmUgdGhhdCBhY3R1YWxseSBjYXJyaWVzIG91dCB0aGUgZGVzdHJ1Y3Rpb24uCitBICJncmFjZSBwZXJpb2QiIG11c3QgZWxhcHNlIGJldHdlZW4gdGhlIHR3byBwYXJ0cywgYW5kIHRoaXMgZ3JhY2UgcGVyaW9kCittdXN0IGJlIGxvbmcgZW5vdWdoIHRoYXQgYW55IHJlYWRlcnMgYWNjZXNzaW5nIHRoZSBpdGVtIGJlaW5nIGRlbGV0ZWQgaGF2ZQorc2luY2UgZHJvcHBlZCB0aGVpciByZWZlcmVuY2VzLiAgRm9yIGV4YW1wbGUsIGFuIFJDVS1wcm90ZWN0ZWQgZGVsZXRpb24KK2Zyb20gYSBsaW5rZWQgbGlzdCB3b3VsZCBmaXJzdCByZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgbGlzdCwgd2FpdCBmb3IKK2EgZ3JhY2UgcGVyaW9kIHRvIGVsYXBzZSwgdGhlbiBmcmVlIHRoZSBlbGVtZW50LiAgU2VlIHRoZSBsaXN0UkNVLnR4dAorZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBSQ1Ugd2l0aCBsaW5rZWQgbGlzdHMuCisKKworRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKworbwlXaHkgd291bGQgYW55b25lIHdhbnQgdG8gdXNlIFJDVT8KKworCVRoZSBhZHZhbnRhZ2Ugb2YgUkNVJ3MgdHdvLXBhcnQgYXBwcm9hY2ggaXMgdGhhdCBSQ1UgcmVhZGVycyBuZWVkCisJbm90IGFjcXVpcmUgYW55IGxvY2tzLCBwZXJmb3JtIGFueSBhdG9taWMgaW5zdHJ1Y3Rpb25zLCB3cml0ZSB0bworCXNoYXJlZCBtZW1vcnksIG9yIChvbiBDUFVzIG90aGVyIHRoYW4gQWxwaGEpIGV4ZWN1dGUgYW55IG1lbW9yeQorCWJhcnJpZXJzLiAgVGhlIGZhY3QgdGhhdCB0aGVzZSBvcGVyYXRpb25zIGFyZSBxdWl0ZSBleHBlbnNpdmUKKwlvbiBtb2Rlcm4gQ1BVcyBpcyB3aGF0IGdpdmVzIFJDVSBpdHMgcGVyZm9ybWFuY2UgYWR2YW50YWdlcworCWluIHJlYWQtbW9zdGx5IHNpdHVhdGlvbnMuICBUaGUgZmFjdCB0aGF0IFJDVSByZWFkZXJzIG5lZWQgbm90CisJYWNxdWlyZSBsb2NrcyBjYW4gYWxzbyBncmVhdGx5IHNpbXBsaWZ5IGRlYWRsb2NrLWF2b2lkYW5jZSBjb2RlLgorCitvCUhvdyBjYW4gdGhlIHVwZGF0ZXIgdGVsbCB3aGVuIGEgZ3JhY2UgcGVyaW9kIGhhcyBjb21wbGV0ZWQKKwlpZiB0aGUgUkNVIHJlYWRlcnMgZ2l2ZSBubyBpbmRpY2F0aW9uIHdoZW4gdGhleSBhcmUgZG9uZT8KKworCUp1c3QgYXMgd2l0aCBzcGlubG9ja3MsIFJDVSByZWFkZXJzIGFyZSBub3QgcGVybWl0dGVkIHRvCisJYmxvY2ssIHN3aXRjaCB0byB1c2VyLW1vZGUgZXhlY3V0aW9uLCBvciBlbnRlciB0aGUgaWRsZSBsb29wLgorCVRoZXJlZm9yZSwgYXMgc29vbiBhcyBhIENQVSBpcyBzZWVuIHBhc3NpbmcgdGhyb3VnaCBhbnkgb2YgdGhlc2UKKwl0aHJlZSBzdGF0ZXMsIHdlIGtub3cgdGhhdCB0aGF0IENQVSBoYXMgZXhpdGVkIGFueSBwcmV2aW91cyBSQ1UKKwlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBTbywgaWYgd2UgcmVtb3ZlIGFuIGl0ZW0gZnJvbSBhCisJbGlua2VkIGxpc3QsIGFuZCB0aGVuIHdhaXQgdW50aWwgYWxsIENQVXMgaGF2ZSBzd2l0Y2hlZCBjb250ZXh0LAorCWV4ZWN1dGVkIGluIHVzZXIgbW9kZSwgb3IgZXhlY3V0ZWQgaW4gdGhlIGlkbGUgbG9vcCwgd2UgY2FuCisJc2FmZWx5IGZyZWUgdXAgdGhhdCBpdGVtLgorCitvCUlmIEkgYW0gcnVubmluZyBvbiBhIHVuaXByb2Nlc3NvciBrZXJuZWwsIHdoaWNoIGNhbiBvbmx5IGRvIG9uZQorCXRoaW5nIGF0IGEgdGltZSwgd2h5IHNob3VsZCBJIHdhaXQgZm9yIGEgZ3JhY2UgcGVyaW9kPworCisJU2VlIHRoZSBVUC50eHQgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KKworbwlIb3cgY2FuIEkgc2VlIHdoZXJlIFJDVSBpcyBjdXJyZW50bHkgdXNlZCBpbiB0aGUgTGludXgga2VybmVsPworCisJU2VhcmNoIGZvciAicmN1X3JlYWRfbG9jayIsICJjYWxsX3JjdSIsIGFuZCAic3luY2hyb25pemVfa2VybmVsIi4KKworbwlXaGF0IGd1aWRlbGluZXMgc2hvdWxkIEkgZm9sbG93IHdoZW4gd3JpdGluZyBjb2RlIHRoYXQgdXNlcyBSQ1U/CisKKwlTZWUgdGhlIGNoZWNrbGlzdC50eHQgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KKworbwlXaHkgdGhlIG5hbWUgIlJDVSI/CisKKwkiUkNVIiBzdGFuZHMgZm9yICJyZWFkLWNvcHkgdXBkYXRlIi4gIFRoZSBmaWxlIGxpc3RSQ1UudHh0IGhhcworCW1vcmUgaW5mb3JtYXRpb24gb24gd2hlcmUgdGhpcyBuYW1lIGNhbWUgZnJvbSwgc2VhcmNoIGZvcgorCSJyZWFkLWNvcHkgdXBkYXRlIiB0byBmaW5kIGl0LgorCitvCUkgaGVhciB0aGF0IFJDVSBpcyBwYXRlbnRlZD8gIFdoYXQgaXMgd2l0aCB0aGF0PworCisJWWVzLCBpdCBpcy4gIFRoZXJlIGFyZSBzZXZlcmFsIGtub3duIHBhdGVudHMgcmVsYXRlZCB0byBSQ1UsCisJc2VhcmNoIGZvciB0aGUgc3RyaW5nICJQYXRlbnQiIGluIFJURlAudHh0IHRvIGZpbmQgdGhlbS4KKwlPZiB0aGVzZSwgb25lIHdhcyBhbGxvd2VkIHRvIGxhcHNlIGJ5IHRoZSBhc3NpZ25lZSwgYW5kIHRoZQorCW90aGVycyBoYXZlIGJlZW4gY29udHJpYnV0ZWQgdG8gdGhlIExpbnV4IGtlcm5lbCB1bmRlciBHUEwuCisKK28JV2hlcmUgY2FuIEkgZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIFJDVT8KKworCVNlZSB0aGUgUlRGUC50eHQgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkVBRE1FLkRBQzk2MCBiL0RvY3VtZW50YXRpb24vUkVBRE1FLkRBQzk2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGVhNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SRUFETUUuREFDOTYwCkBAIC0wLDAgKzEsNzU2IEBACisgICBMaW51eCBEcml2ZXIgZm9yIE15bGV4IERBQzk2MC9BY2NlbGVSQUlEL2VYdHJlbWVSQUlEIFBDSSBSQUlEIENvbnRyb2xsZXJzCisKKwkJCVZlcnNpb24gMi4yLjExIGZvciBMaW51eCAyLjIuMTkKKwkJCVZlcnNpb24gMi40LjExIGZvciBMaW51eCAyLjQuMTIKKworCQkJICAgICAgUFJPRFVDVElPTiBSRUxFQVNFCisKKwkJCQkxMSBPY3RvYmVyIDIwMDEKKworCQkJICAgICAgIExlb25hcmQgTi4gWnVia29mZgorCQkJICAgICAgIERhbmRlbGlvbiBEaWdpdGFsCisJCQkgICAgICAgbG56QGRhbmRlbGlvbi5jb20KKworCSBDb3B5cmlnaHQgMTk5OC0yMDAxIGJ5IExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKworCQkJCSBJTlRST0RVQ1RJT04KKworTXlsZXgsIEluYy4gZGVzaWducyBhbmQgbWFudWZhY3R1cmVzIGEgdmFyaWV0eSBvZiBoaWdoIHBlcmZvcm1hbmNlIFBDSSBSQUlECitjb250cm9sbGVycy4gIE15bGV4IENvcnBvcmF0aW9uIGlzIGxvY2F0ZWQgYXQgMzQ1NTEgQXJkZW53b29kIEJsdmQuLCBGcmVtb250LAorQ2FsaWZvcm5pYSA5NDU1NSwgVVNBIGFuZCBjYW4gYmUgcmVhY2hlZCBhdCA1MTAuNzk2LjYxMDAgb3Igb24gdGhlIFdvcmxkIFdpZGUKK1dlYiBhdCBodHRwOi8vd3d3Lm15bGV4LmNvbS4gIE15bGV4IFRlY2huaWNhbCBTdXBwb3J0IGNhbiBiZSByZWFjaGVkIGJ5CitlbGVjdHJvbmljIG1haWwgYXQgbXlsZXhzdXBAdXMuaWJtLmNvbSwgYnkgdm9pY2UgYXQgNTEwLjYwOC4yNDAwLCBvciBieSBGQVggYXQKKzUxMC43NDUuNzcxNS4gIENvbnRhY3QgaW5mb3JtYXRpb24gZm9yIG9mZmljZXMgaW4gRXVyb3BlIGFuZCBKYXBhbiBpcyBhdmFpbGFibGUKK29uIHRoZWlyIFdlYiBzaXRlLgorCitUaGUgbGF0ZXN0IGluZm9ybWF0aW9uIG9uIExpbnV4IHN1cHBvcnQgZm9yIERBQzk2MCBQQ0kgUkFJRCBDb250cm9sbGVycywgYXMKK3dlbGwgYXMgdGhlIG1vc3QgcmVjZW50IHJlbGVhc2Ugb2YgdGhpcyBkcml2ZXIsIHdpbGwgYWx3YXlzIGJlIGF2YWlsYWJsZSBmcm9tCitteSBMaW51eCBIb21lIFBhZ2UgYXQgVVJMICJodHRwOi8vd3d3LmRhbmRlbGlvbi5jb20vTGludXgvIi4gIFRoZSBMaW51eCBEQUM5NjAKK2RyaXZlciBzdXBwb3J0cyBhbGwgY3VycmVudCBNeWxleCBQQ0kgUkFJRCBjb250cm9sbGVycyBpbmNsdWRpbmcgdGhlIG5ldworZVh0cmVtZVJBSUQgMjAwMC8zMDAwIGFuZCBBY2NlbGVSQUlEIDM1Mi8xNzAvMTYwIG1vZGVscyB3aGljaCBoYXZlIGFuIGVudGlyZWx5CituZXcgZmlybXdhcmUgaW50ZXJmYWNlIGZyb20gdGhlIG9sZGVyIGVYdHJlbWVSQUlEIDExMDAsIEFjY2VsZVJBSUQgMTUwLzIwMC8yNTAsCithbmQgREFDOTYwUEovUEcvUFUvUEQvUEwuICBTZWUgYmVsb3cgZm9yIGEgY29tcGxldGUgY29udHJvbGxlciBsaXN0IGFzIHdlbGwgYXMKK21pbmltdW0gZmlybXdhcmUgdmVyc2lvbiByZXF1aXJlbWVudHMuICBGb3Igc2ltcGxpY2l0eSwgaW4gbW9zdCBwbGFjZXMgdGhpcworZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gREFDOTYwIGdlbmVyaWNhbGx5IHJhdGhlciB0aGFuIGV4cGxpY2l0bHkgbGlzdGluZyBhbGwKK3RoZSBzdXBwb3J0ZWQgbW9kZWxzLgorCitEcml2ZXIgYnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbnQgdmlhIGVsZWN0cm9uaWMgbWFpbCB0byAibG56QGRhbmRlbGlvbi5jb20iLgorUGxlYXNlIGluY2x1ZGUgd2l0aCB0aGUgYnVnIHJlcG9ydCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBtZXNzYWdlcyByZXBvcnRlZAorYnkgdGhlIGRyaXZlciBhdCBzdGFydHVwLCBhbG9uZyB3aXRoIGFueSBzdWJzZXF1ZW50IHN5c3RlbSBtZXNzYWdlcyByZWxldmFudCB0bwordGhlIGNvbnRyb2xsZXIncyBvcGVyYXRpb24sIGFuZCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MKK2hhcmR3YXJlIGNvbmZpZ3VyYXRpb24uICBEcml2ZXIgYnVncyBhcmUgYWN0dWFsbHkgcXVpdGUgcmFyZTsgaWYgeW91IGVuY291bnRlcgorcHJvYmxlbXMgd2l0aCBkaXNrcyBiZWluZyBtYXJrZWQgb2ZmbGluZSwgZm9yIGV4YW1wbGUsIHBsZWFzZSBjb250YWN0IE15bGV4CitUZWNobmljYWwgU3VwcG9ydCBhcyB0aGUgcHJvYmxlbSBpcyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uCityYXRoZXIgdGhhbiB0aGUgTGludXggZHJpdmVyLgorCitQbGVhc2UgY29uc3VsdCB0aGUgUkFJRCBjb250cm9sbGVyIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uCityZWdhcmRpbmcgaW5zdGFsbGF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb250cm9sbGVycy4gIFRoaXMgZG9jdW1lbnQKK3ByaW1hcmlseSBwcm92aWRlcyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgTGludXggc3VwcG9ydC4KKworCisJCQkJRFJJVkVSIEZFQVRVUkVTCisKK1RoZSBEQUM5NjAgUkFJRCBjb250cm9sbGVycyBhcmUgc3VwcG9ydGVkIHNvbGVseSBhcyBoaWdoIHBlcmZvcm1hbmNlIFJBSUQKK2NvbnRyb2xsZXJzLCBub3QgYXMgaW50ZXJmYWNlcyB0byBhcmJpdHJhcnkgU0NTSSBkZXZpY2VzLiAgVGhlIExpbnV4IERBQzk2MAorZHJpdmVyIG9wZXJhdGVzIGF0IHRoZSBibG9jayBkZXZpY2UgbGV2ZWwsIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBTQ1NJIGFuZCBJREUKK2RyaXZlcnMuICBVbmxpa2Ugb3RoZXIgUkFJRCBjb250cm9sbGVycyBjdXJyZW50bHkgc3VwcG9ydGVkIG9uIExpbnV4LCB0aGUKK0RBQzk2MCBkcml2ZXIgaXMgbm90IGRlcGVuZGVudCBvbiB0aGUgU0NTSSBzdWJzeXN0ZW0sIGFuZCBoZW5jZSBhdm9pZHMgYWxsIHRoZQorY29tcGxleGl0eSBhbmQgdW5uZWNlc3NhcnkgY29kZSB0aGF0IHdvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbgorYXMgYSBTQ1NJIGRyaXZlci4gIFRoZSBEQUM5NjAgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBhcyBoaWdoIGEgcGVyZm9ybWFuY2UgYXMKK3Bvc3NpYmxlIHdpdGggbm8gY29tcHJvbWlzZXMgb3IgZXh0cmEgY29kZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGxvd2VyCitwZXJmb3JtYW5jZSBkZXZpY2VzLiAgVGhlIERBQzk2MCBkcml2ZXIgaW5jbHVkZXMgZXh0ZW5zaXZlIGVycm9yIGxvZ2dpbmcgYW5kCitvbmxpbmUgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcy4gIEV4Y2VwdCBmb3IgaW5pdGlhbCBjb25maWd1cmF0aW9uCitvZiB0aGUgY29udHJvbGxlciBhbmQgYWRkaW5nIG5ldyBkaXNrIGRyaXZlcywgbW9zdCBldmVyeXRoaW5nIGNhbiBiZSBoYW5kbGVkCitmcm9tIExpbnV4IHdoaWxlIHRoZSBzeXN0ZW0gaXMgb3BlcmF0aW9uYWwuCisKK1RoZSBEQUM5NjAgZHJpdmVyIGlzIGFyY2hpdGVjdGVkIHRvIHN1cHBvcnQgdXAgdG8gOCBjb250cm9sbGVycyBwZXIgc3lzdGVtLgorRWFjaCBEQUM5NjAgcGFyYWxsZWwgU0NTSSBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHVwIHRvIDE1IGRpc2sgZHJpdmVzIHBlcgorY2hhbm5lbCwgZm9yIGEgbWF4aW11bSBvZiA2MCBkcml2ZXMgb24gYSBmb3VyIGNoYW5uZWwgY29udHJvbGxlcjsgdGhlIGZpYnJlCitjaGFubmVsIGVYdHJlbWVSQUlEIDMwMDAgY29udHJvbGxlciBzdXBwb3J0cyB1cCB0byAxMjUgZGlzayBkcml2ZXMgcGVyIGxvb3AgZm9yCithIHRvdGFsIG9mIDI1MCBkcml2ZXMuICBUaGUgZHJpdmVzIGluc3RhbGxlZCBvbiBhIGNvbnRyb2xsZXIgYXJlIGRpdmlkZWQgaW50bworb25lIG9yIG1vcmUgIkRyaXZlIEdyb3VwcyIsIGFuZCB0aGVuIGVhY2ggRHJpdmUgR3JvdXAgaXMgc3ViZGl2aWRlZCBmdXJ0aGVyCitpbnRvIDEgdG8gMzIgIkxvZ2ljYWwgRHJpdmVzIi4gIEVhY2ggTG9naWNhbCBEcml2ZSBoYXMgYSBzcGVjaWZpYyBSQUlEIExldmVsCithbmQgY2FjaGluZyBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgaXQgYXBwZWFycyB0byBMaW51eCBhcyBhIHNpbmdsZQorYmxvY2sgZGV2aWNlLiAgTG9naWNhbCBEcml2ZXMgYXJlIGZ1cnRoZXIgc3ViZGl2aWRlZCBpbnRvIHVwIHRvIDcgcGFydGl0aW9ucwordGhyb3VnaCB0aGUgbm9ybWFsIExpbnV4IGFuZCBQQyBkaXNrIHBhcnRpdGlvbmluZyBzY2hlbWVzLiAgTG9naWNhbCBEcml2ZXMgYXJlCithbHNvIGtub3duIGFzICJTeXN0ZW0gRHJpdmVzIiwgYW5kIERyaXZlIEdyb3VwcyBhcmUgYWxzbyBjYWxsZWQgIlBhY2tzIi4gIEJvdGgKK3Rlcm1zIGFyZSBpbiB1c2UgaW4gdGhlIE15bGV4IGRvY3VtZW50YXRpb247IEkgaGF2ZSBjaG9zZW4gdG8gc3RhbmRhcmRpemUgb24KK3RoZSBtb3JlIGdlbmVyaWMgIkxvZ2ljYWwgRHJpdmUiIGFuZCAiRHJpdmUgR3JvdXAiLgorCitEQUM5NjAgUkFJRCBkaXNrIGRldmljZXMgYXJlIG5hbWVkIGluIHRoZSBzdHlsZSBvZiB0aGUgRGV2aWNlIEZpbGUgU3lzdGVtCisoREVWRlMpLiAgVGhlIGRldmljZSBjb3JyZXNwb25kaW5nIHRvIExvZ2ljYWwgRHJpdmUgRCBvbiBDb250cm9sbGVyIEMgaXMKK3JlZmVycmVkIHRvIGFzIC9kZXYvcmQvY0NkRCwgYW5kIHRoZSBwYXJ0aXRpb25zIGFyZSBjYWxsZWQgL2Rldi9yZC9jQ2REcDEKK3Rocm91Z2ggL2Rldi9yZC9jQ2REcDcuICBGb3IgZXhhbXBsZSwgcGFydGl0aW9uIDMgb2YgTG9naWNhbCBEcml2ZSA1IG9uCitDb250cm9sbGVyIDIgaXMgcmVmZXJyZWQgdG8gYXMgL2Rldi9yZC9jMmQ1cDMuICBOb3RlIHRoYXQgdW5saWtlIHdpdGggU0NTSQorZGlza3MgdGhlIGRldmljZSBuYW1lcyB3aWxsIG5vdCBjaGFuZ2UgaW4gdGhlIGV2ZW50IG9mIGEgZGlzayBkcml2ZSBmYWlsdXJlLgorVGhlIERBQzk2MCBkcml2ZXIgaXMgYXNzaWduZWQgbWFqb3IgbnVtYmVycyA0OCAtIDU1IHdpdGggb25lIG1ham9yIG51bWJlciBwZXIKK2NvbnRyb2xsZXIuICBUaGUgOCBiaXRzIG9mIG1pbm9yIG51bWJlciBhcmUgZGl2aWRlZCBpbnRvIDUgYml0cyBmb3IgdGhlIExvZ2ljYWwKK0RyaXZlIGFuZCAzIGJpdHMgZm9yIHRoZSBwYXJ0aXRpb24uCisKKworCSAgU1VQUE9SVEVEIERBQzk2MC9BY2NlbGVSQUlEL2VYdHJlbWVSQUlEIFBDSSBSQUlEIENPTlRST0xMRVJTCisKK1RoZSBmb2xsb3dpbmcgbGlzdCBjb21wcmlzZXMgdGhlIHN1cHBvcnRlZCBEQUM5NjAsIEFjY2VsZVJBSUQsIGFuZCBlWHRyZW1lUkFJRAorUENJIFJBSUQgQ29udHJvbGxlcnMgYXMgb2YgdGhlIGRhdGUgb2YgdGhpcyBkb2N1bWVudC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQKK2FueW9uZSBwdXJjaGFzaW5nIGEgTXlsZXggUENJIFJBSUQgQ29udHJvbGxlciBub3QgaW4gdGhlIGZvbGxvd2luZyB0YWJsZQorY29udGFjdCB0aGUgYXV0aG9yIGJlZm9yZWhhbmQgdG8gdmVyaWZ5IHRoYXQgaXQgaXMgb3Igd2lsbCBiZSBzdXBwb3J0ZWQuCisKK2VYdHJlbWVSQUlEIDMwMDAKKwkgICAgMSBXaWRlIFVsdHJhLTIvTFZEIFNDU0kgY2hhbm5lbAorCSAgICAyIEV4dGVybmFsIEZpYnJlIEZDLUFMIGNoYW5uZWxzCisJICAgIDIzM01IeiBTdHJvbmdBUk0gU0EgMTEwIFByb2Nlc3NvcgorCSAgICA2NCBCaXQgMzNNSHogUENJIChiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggMzIgQml0IFBDSSBzbG90cykKKwkgICAgMzJNQi82NE1CIEVDQyBTRFJBTSBNZW1vcnkKKworZVh0cmVtZVJBSUQgMjAwMAorCSAgICA0IFdpZGUgVWx0cmEtMTYwIExWRCBTQ1NJIGNoYW5uZWxzCisJICAgIDIzM01IeiBTdHJvbmdBUk0gU0EgMTEwIFByb2Nlc3NvcgorCSAgICA2NCBCaXQgMzNNSHogUENJIChiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggMzIgQml0IFBDSSBzbG90cykKKwkgICAgMzJNQi82NE1CIEVDQyBTRFJBTSBNZW1vcnkKKworQWNjZWxlUkFJRCAzNTIKKwkgICAgMiBXaWRlIFVsdHJhLTE2MCBMVkQgU0NTSSBjaGFubmVscworCSAgICAxMDBNSHogSW50ZWwgaTk2MFJOIFJJU0MgUHJvY2Vzc29yCisJICAgIDY0IEJpdCAzM01IeiBQQ0kgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCAzMiBCaXQgUENJIHNsb3RzKQorCSAgICAzMk1CLzY0TUIgRUNDIFNEUkFNIE1lbW9yeQorCitBY2NlbGVSQUlEIDE3MAorCSAgICAxIFdpZGUgVWx0cmEtMTYwIExWRCBTQ1NJIGNoYW5uZWwKKwkgICAgMTAwTUh6IEludGVsIGk5NjBSTSBSSVNDIFByb2Nlc3NvcgorCSAgICAxNk1CLzMyTUIvNjRNQiBFQ0MgU0RSQU0gTWVtb3J5CisKK0FjY2VsZVJBSUQgMTYwIChBY2NlbGVSQUlEIDE3MExQKQorCSAgICAxIFdpZGUgVWx0cmEtMTYwIExWRCBTQ1NJIGNoYW5uZWwKKwkgICAgMTAwTUh6IEludGVsIGk5NjBSUyBSSVNDIFByb2Nlc3NvcgorCSAgICBCdWlsdCBpbiAxNk0gRUNDIFNEUkFNIE1lbW9yeQorCSAgICBQQ0kgTG93IFByb2ZpbGUgRm9ybSBGYWN0b3IgLSBmaXQgZm9yIDJVIGhlaWdodAorCitlWHRyZW1lUkFJRCAxMTAwIChEQUMxMTY0UCkKKwkgICAgMyBXaWRlIFVsdHJhLTIvTFZEIFNDU0kgY2hhbm5lbHMKKwkgICAgMjMzTUh6IFN0cm9uZ0FSTSBTQSAxMTAgUHJvY2Vzc29yCisJICAgIDY0IEJpdCAzM01IeiBQQ0kgKGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCAzMiBCaXQgUENJIHNsb3RzKQorCSAgICAxNk1CLzMyTUIvNjRNQiBQYXJpdHkgU0RSQU0gTWVtb3J5IHdpdGggQmF0dGVyeSBCYWNrdXAKKworQWNjZWxlUkFJRCAyNTAgKERBQzk2MFBUTDEpCisJICAgIFVzZXMgb25ib2FyZCBTeW1iaW9zIFNDU0kgY2hpcHMgb24gY2VydGFpbiBtb3RoZXJib2FyZHMKKwkgICAgQWxzbyBpbmNsdWRlcyBvbmUgb25ib2FyZCBXaWRlIFVsdHJhLTIvTFZEIFNDU0kgQ2hhbm5lbAorCSAgICA2Nk1IeiBJbnRlbCBpOTYwUkQgUklTQyBQcm9jZXNzb3IKKwkgICAgNE1CLzhNQi8xNk1CLzMyTUIvNjRNQi8xMjhNQiBFQ0MgRURPIE1lbW9yeQorCitBY2NlbGVSQUlEIDIwMCAoREFDOTYwUFRMMCkKKwkgICAgVXNlcyBvbmJvYXJkIFN5bWJpb3MgU0NTSSBjaGlwcyBvbiBjZXJ0YWluIG1vdGhlcmJvYXJkcworCSAgICBJbmNsdWRlcyBubyBvbmJvYXJkIFNDU0kgQ2hhbm5lbHMKKwkgICAgNjZNSHogSW50ZWwgaTk2MFJEIFJJU0MgUHJvY2Vzc29yCisJICAgIDRNQi84TUIvMTZNQi8zMk1CLzY0TUIvMTI4TUIgRUNDIEVETyBNZW1vcnkKKworQWNjZWxlUkFJRCAxNTAgKERBQzk2MFBSTCkKKwkgICAgVXNlcyBvbmJvYXJkIFN5bWJpb3MgU0NTSSBjaGlwcyBvbiBjZXJ0YWluIG1vdGhlcmJvYXJkcworCSAgICBBbHNvIGluY2x1ZGVzIG9uZSBvbmJvYXJkIFdpZGUgVWx0cmEtMi9MVkQgU0NTSSBDaGFubmVsCisJICAgIDMzTUh6IEludGVsIGk5NjBSUCBSSVNDIFByb2Nlc3NvcgorCSAgICA0TUIgUGFyaXR5IEVETyBNZW1vcnkKKworREFDOTYwUEogICAgMS8yLzMgV2lkZSBVbHRyYSBTQ1NJLTMgQ2hhbm5lbHMKKwkgICAgNjZNSHogSW50ZWwgaTk2MFJEIFJJU0MgUHJvY2Vzc29yCisJICAgIDRNQi84TUIvMTZNQi8zMk1CLzY0TUIvMTI4TUIgRUNDIEVETyBNZW1vcnkKKworREFDOTYwUEcgICAgMS8yLzMgV2lkZSBVbHRyYSBTQ1NJLTMgQ2hhbm5lbHMKKwkgICAgMzNNSHogSW50ZWwgaTk2MFJQIFJJU0MgUHJvY2Vzc29yCisJICAgIDRNQi84TUIgRUNDIEVETyBNZW1vcnkKKworREFDOTYwUFUgICAgMS8yLzMgV2lkZSBVbHRyYSBTQ1NJLTMgQ2hhbm5lbHMKKwkgICAgSW50ZWwgaTk2MENGIFJJU0MgUHJvY2Vzc29yCisJICAgIDRNQi84TUIgRURSQU0gb3IgMk1CLzRNQi84TUIvMTZNQi8zMk1CIERSQU0gTWVtb3J5CisKK0RBQzk2MFBEICAgIDEvMi8zIFdpZGUgRmFzdCBTQ1NJLTIgQ2hhbm5lbHMKKwkgICAgSW50ZWwgaTk2MENGIFJJU0MgUHJvY2Vzc29yCisJICAgIDRNQi84TUIgRURSQU0gb3IgMk1CLzRNQi84TUIvMTZNQi8zMk1CIERSQU0gTWVtb3J5CisKK0RBQzk2MFBMICAgIDEvMi8zIFdpZGUgRmFzdCBTQ1NJLTIgQ2hhbm5lbHMKKwkgICAgSW50ZWwgaTk2MCBSSVNDIFByb2Nlc3NvcgorCSAgICAyTUIvNE1CLzhNQi8xNk1CLzMyTUIgRFJBTSBNZW1vcnkKKworREFDOTYwUAkgICAgMS8yLzMgV2lkZSBGYXN0IFNDU0ktMiBDaGFubmVscworCSAgICBJbnRlbCBpOTYwIFJJU0MgUHJvY2Vzc29yCisJICAgIDJNQi80TUIvOE1CLzE2TUIvMzJNQiBEUkFNIE1lbW9yeQorCitGb3IgdGhlIGVYdHJlbWVSQUlEIDIwMDAvMzAwMCBhbmQgQWNjZWxlUkFJRCAzNTIvMTcwLzE2MCwgZmlybXdhcmUgdmVyc2lvbgorNi4wMC0wMSBvciBhYm92ZSBpcyByZXF1aXJlZC4KKworRm9yIHRoZSBlWHRyZW1lUkFJRCAxMTAwLCBmaXJtd2FyZSB2ZXJzaW9uIDUuMDYtMC01MiBvciBhYm92ZSBpcyByZXF1aXJlZC4KKworRm9yIHRoZSBBY2NlbGVSQUlEIDI1MCwgMjAwLCBhbmQgMTUwLCBmaXJtd2FyZSB2ZXJzaW9uIDQuMDYtMC01NyBvciBhYm92ZSBpcworcmVxdWlyZWQuCisKK0ZvciB0aGUgREFDOTYwUEogYW5kIERBQzk2MFBHLCBmaXJtd2FyZSB2ZXJzaW9uIDQuMDYtMC0wMCBvciBhYm92ZSBpcyByZXF1aXJlZC4KKworRm9yIHRoZSBEQUM5NjBQVSwgREFDOTYwUEQsIERBQzk2MFBMLCBhbmQgREFDOTYwUCwgZWl0aGVyIGZpcm13YXJlIHZlcnNpb24KKzMuNTEtMC0wNCBvciBhYm92ZSBpcyByZXF1aXJlZCAoZm9yIGR1YWwgRmxhc2ggUk9NIGNvbnRyb2xsZXJzKSwgb3IgZmlybXdhcmUKK3ZlcnNpb24gMi43My0wLTAwIG9yIGFib3ZlIGlzIHJlcXVpcmVkIChmb3Igc2luZ2xlIEZsYXNoIFJPTSBjb250cm9sbGVycykKKworUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIFNDU0kgZGlzayBkcml2ZXMgYXJlIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBEQUM5NjAKK2NvbnRyb2xsZXJzLCBhbmQgb25seSBwYXJ0aWN1bGFyIGZpcm13YXJlIHZlcnNpb25zIG9mIGFueSBnaXZlbiBtb2RlbCBtYXkKK2FjdHVhbGx5IGZ1bmN0aW9uIGNvcnJlY3RseS4gIFNpbWlsYXJseSwgbm90IGFsbCBtb3RoZXJib2FyZHMgaGF2ZSBhIEJJT1MgdGhhdAorcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlIEFjY2VsZVJBSUQgMjUwLCBBY2NlbGVSQUlEIDIwMCwgQWNjZWxlUkFJRCAxNTAsCitEQUM5NjBQSiwgYW5kIERBQzk2MFBHIGJlY2F1c2UgdGhlIEludGVsIGk5NjBSRC9SUCBpcyBhIG11bHRpLWZ1bmN0aW9uIGRldmljZS4KK0lmIGluIGRvdWJ0LCBjb250YWN0IE15bGV4IFJBSUQgVGVjaG5pY2FsIFN1cHBvcnQgKG15bGV4c3VwQHVzLmlibS5jb20pIHRvCit2ZXJpZnkgY29tcGF0aWJpbGl0eS4gIE15bGV4IG1ha2VzIGF2YWlsYWJsZSBhIGhhcmQgZGlzayBjb21wYXRpYmlsaXR5IGxpc3QgYXQKK2h0dHA6Ly93d3cubXlsZXguY29tL3N1cHBvcnQvaGRjb21wL2hkLWxpc3RzLmh0bWwuCisKKworCQkJICAgICAgRFJJVkVSIElOU1RBTExBVElPTgorCitUaGlzIGRpc3RyaWJ1dGlvbiB3YXMgcHJlcGFyZWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMi4xOSBvciAyLjQuMTIuCisKK1RvIGluc3RhbGwgdGhlIERBQzk2MCBSQUlEIGRyaXZlciwgeW91IG1heSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcywKK3JlcGxhY2luZyAiL3Vzci9zcmMiIHdpdGggd2hlcmV2ZXIgeW91IGtlZXAgeW91ciBMaW51eCBrZXJuZWwgc291cmNlIHRyZWU6CisKKyAgY2QgL3Vzci9zcmMKKyAgdGFyIC14dnpmIERBQzk2MC0yLjIuMTEudGFyLmd6IChvciBEQUM5NjAtMi40LjExLnRhci5neikKKyAgbXYgUkVBRE1FLkRBQzk2MCBsaW51eC9Eb2N1bWVudGF0aW9uCisgIG12IERBQzk2MC5bY2hdIGxpbnV4L2RyaXZlcnMvYmxvY2sKKyAgcGF0Y2ggLXAwIDwgREFDOTYwLnBhdGNoIChpZiBEQUM5NjAucGF0Y2ggaXMgaW5jbHVkZWQpCisgIGNkIGxpbnV4CisgIG1ha2UgY29uZmlnCisgIG1ha2UgYnpJbWFnZSAob3IgekltYWdlKQorCitUaGVuIGluc3RhbGwgImFyY2gvaTM4Ni9ib290L2J6SW1hZ2UiIG9yICJhcmNoL2kzODYvYm9vdC96SW1hZ2UiIGFzIHlvdXIKK3N0YW5kYXJkIGtlcm5lbCwgcnVuIGxpbG8gaWYgYXBwcm9wcmlhdGUsIGFuZCByZWJvb3QuCisKK1RvIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IGRldmljZXMgaW4gL2RldiwgdGhlICJtYWtlX3JkIiBzY3JpcHQgaW5jbHVkZWQgaW4KKyJEQUM5NjAtVXRpbGl0aWVzLnRhci5neiIgZnJvbSBodHRwOi8vd3d3LmRhbmRlbGlvbi5jb20vTGludXgvIG1heSBiZSB1c2VkLgorTElMTyAyMSBhbmQgRkRJU0sgdjIuOSBpbmNsdWRlIERBQzk2MCBzdXBwb3J0OyBhbHNvIGluY2x1ZGVkIGluIHRoaXMgYXJjaGl2ZQorYXJlIHBhdGNoZXMgdG8gTElMTyAyMCBhbmQgRkRJU0sgdjIuOCB0aGF0IGFkZCBEQUM5NjAgc3VwcG9ydCwgYWxvbmcgd2l0aAorc3RhdGljYWxseSBsaW5rZWQgZXhlY3V0YWJsZXMgb2YgTElMTyBhbmQgRkRJU0suICBUaGlzIG1vZGlmaWVkIHZlcnNpb24gb2YgTElMTword2lsbCBhbGxvdyBib290aW5nIGZyb20gYSBEQUM5NjAgY29udHJvbGxlciBhbmQvb3IgbW91bnRpbmcgdGhlIHJvb3QgZmlsZQorc3lzdGVtIGZyb20gYSBEQUM5NjAuCisKK1JlZCBIYXQgTGludXggNi4wIGFuZCBTdVNFIExpbnV4IDYuMSBpbmNsdWRlIHN1cHBvcnQgZm9yIE15bGV4IFBDSSBSQUlECitjb250cm9sbGVycy4gIEluc3RhbGxpbmcgZGlyZWN0bHkgb250byBhIERBQzk2MCBtYXkgYmUgcHJvYmxlbWF0aWMgZnJvbSBvdGhlcgorTGludXggZGlzdHJpYnV0aW9ucyB1bnRpbCB0aGVpciBpbnN0YWxsYXRpb24gdXRpbGl0aWVzIGFyZSB1cGRhdGVkLgorCisKKwkJCSAgICAgIElOU1RBTExBVElPTiBOT1RFUworCitCZWZvcmUgaW5zdGFsbGluZyBMaW51eCBvciBhZGRpbmcgREFDOTYwIGxvZ2ljYWwgZHJpdmVzIHRvIGFuIGV4aXN0aW5nIExpbnV4CitzeXN0ZW0sIHRoZSBjb250cm9sbGVyIG11c3QgZmlyc3QgYmUgY29uZmlndXJlZCB0byBwcm92aWRlIG9uZSBvciBtb3JlIGxvZ2ljYWwKK2RyaXZlcyB1c2luZyB0aGUgQklPUyBDb25maWd1cmF0aW9uIFV0aWxpdHkgb3IgREFDQ0YuICBQbGVhc2Ugbm90ZSB0aGF0IHNpbmNlCit0aGVyZSBhcmUgb25seSBhdCBtb3N0IDYgdXNhYmxlIHBhcnRpdGlvbnMgb24gZWFjaCBsb2dpY2FsIGRyaXZlLCBzeXN0ZW1zCityZXF1aXJpbmcgbW9yZSBwYXJ0aXRpb25zIHNob3VsZCBzdWJkaXZpZGUgYSBkcml2ZSBncm91cCBpbnRvIG11bHRpcGxlIGxvZ2ljYWwKK2RyaXZlcywgZWFjaCBvZiB3aGljaCBjYW4gaGF2ZSB1cCB0byA2IHVzYWJsZSBwYXJ0aXRpb25zLiAgQWxzbywgbm90ZSB0aGF0IHdpdGgKK2xhcmdlIGRpc2sgYXJyYXlzIGl0IGlzIGFkdmlzYWJsZSB0byBlbmFibGUgdGhlIDhHQiBCSU9TIEdlb21ldHJ5ICgyNTUvNjMpCityYXRoZXIgdGhhbiBhY2NlcHRpbmcgdGhlIGRlZmF1bHQgMkdCIEJJT1MgR2VvbWV0cnkgKDEyOC8zMik7IGZhaWxpbmcgdG8gc28gZG8KK3dpbGwgY2F1c2UgdGhlIGxvZ2ljYWwgZHJpdmUgZ2VvbWV0cnkgdG8gaGF2ZSBtb3JlIHRoYW4gNjU1MzUgY3lsaW5kZXJzIHdoaWNoCit3aWxsIG1ha2UgaXQgaW1wb3NzaWJsZSBmb3IgRkRJU0sgdG8gYmUgdXNlZCBwcm9wZXJseS4gIFRoZSA4R0IgQklPUyBHZW9tZXRyeQorY2FuIGJlIGVuYWJsZWQgYnkgY29uZmlndXJpbmcgdGhlIERBQzk2MCBCSU9TLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBBbHQtTQorZHVyaW5nIHRoZSBCSU9TIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorCitGb3IgbWF4aW11bSBwZXJmb3JtYW5jZSBhbmQgdGhlIG1vc3QgZWZmaWNpZW50IEUyRlNDSyBwZXJmb3JtYW5jZSwgaXQgaXMKK3JlY29tbWVuZGVkIHRoYXQgRVhUMiBmaWxlIHN5c3RlbXMgYmUgYnVpbHQgd2l0aCBhIDRLQiBibG9jayBzaXplIGFuZCAxNiBibG9jaworc3RyaWRlIHRvIG1hdGNoIHRoZSBEQUM5NjAgY29udHJvbGxlcidzIDY0S0IgZGVmYXVsdCBzdHJpcGUgc2l6ZS4gIFRoZSBjb21tYW5kCisibWtlMmZzIC1iIDQwOTYgLVIgc3RyaWRlPTE2IDxkZXZpY2U+IiBpcyBhcHByb3ByaWF0ZS4gIFVubGVzcyB0aGVyZSB3aWxsIGJlIGEKK2xhcmdlIG51bWJlciBvZiBzbWFsbCBmaWxlcyBvbiB0aGUgZmlsZSBzeXN0ZW1zLCBpdCBpcyBhbHNvIGJlbmVmaWNpYWwgdG8gYWRkCit0aGUgIi1pIDE2Mzg0IiBvcHRpb24gdG8gaW5jcmVhc2UgdGhlIGJ5dGVzIHBlciBpbm9kZSBwYXJhbWV0ZXIgdGhlcmVieQorcmVkdWNpbmcgdGhlIGZpbGUgc3lzdGVtIG1ldGFkYXRhLiAgRmluYWxseSwgb24gc3lzdGVtcyB0aGF0IHdpbGwgb25seSBiZSBydW4KK3dpdGggTGludXggMi4yIG9yIGxhdGVyIGtlcm5lbHMgaXQgaXMgYmVuZWZpY2lhbCB0byBlbmFibGUgc3BhcnNlIHN1cGVyYmxvY2tzCit3aXRoIHRoZSAiLXMgMSIgb3B0aW9uLgorCisKKwkJICAgICAgREFDOTYwIEFOTk9VTkNFTUVOVFMgTUFJTElORyBMSVNUCisKK1RoZSBEQUM5NjAgQW5ub3VuY2VtZW50cyBNYWlsaW5nIExpc3QgcHJvdmlkZXMgYSBmb3J1bSBmb3IgaW5mb3JtaW5nIExpbnV4Cit1c2VycyBvZiBuZXcgZHJpdmVyIHJlbGVhc2VzIGFuZCBvdGhlciBhbm5vdW5jZW1lbnRzIHJlZ2FyZGluZyBMaW51eCBzdXBwb3J0Citmb3IgREFDOTYwIFBDSSBSQUlEIENvbnRyb2xsZXJzLiAgVG8gam9pbiB0aGUgbWFpbGluZyBsaXN0LCBzZW5kIGEgbWVzc2FnZSB0bworImRhYzk2MC1hbm5vdW5jZS1yZXF1ZXN0QGRhbmRlbGlvbi5jb20iIHdpdGggdGhlIGxpbmUgInN1YnNjcmliZSIgaW4gdGhlCittZXNzYWdlIGJvZHkuCisKKworCQlDT05UUk9MTEVSIENPTkZJR1VSQVRJT04gQU5EIFNUQVRVUyBNT05JVE9SSU5HCisKK1RoZSBEQUM5NjAgUkFJRCBjb250cm9sbGVycyBydW5uaW5nIGZpcm13YXJlIDQuMDYgb3IgYWJvdmUgaW5jbHVkZSBhIEJhY2tncm91bmQKK0luaXRpYWxpemF0aW9uIGZhY2lsaXR5IHNvIHRoYXQgc3lzdGVtIGRvd250aW1lIGlzIG1pbmltaXplZCBib3RoIGZvciBpbml0aWFsCitpbnN0YWxsYXRpb24gYW5kIHN1YnNlcXVlbnQgY29uZmlndXJhdGlvbiBvZiBhZGRpdGlvbmFsIHN0b3JhZ2UuICBUaGUgQklPUworQ29uZmlndXJhdGlvbiBVdGlsaXR5IChhY2Nlc3NpYmxlIHZpYSBBbHQtUiBkdXJpbmcgdGhlIEJJT1MgaW5pdGlhbGl6YXRpb24KK3NlcXVlbmNlKSBpcyB1c2VkIHRvIHF1aWNrbHkgY29uZmlndXJlIHRoZSBjb250cm9sbGVyLCBhbmQgdGhlbiB0aGUgbG9naWNhbAorZHJpdmVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgYXJlIGF2YWlsYWJsZSBmb3IgaW1tZWRpYXRlIHVzZSBldmVuIHdoaWxlIHRoZXkKK2FyZSBzdGlsbCBiZWluZyBpbml0aWFsaXplZCBieSB0aGUgY29udHJvbGxlci4gIFRoZSBwcmltYXJ5IG5lZWQgZm9yIG9ubGluZQorY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzIG1vbml0b3JpbmcgaXMgdGhlbiB0byBhdm9pZCBzeXN0ZW0gZG93bnRpbWUgd2hlbiBkaXNrCitkcml2ZXMgZmFpbCBhbmQgbXVzdCBiZSByZXBsYWNlZC4gIE15bGV4J3Mgb25saW5lIG1vbml0b3JpbmcgYW5kIGNvbmZpZ3VyYXRpb24KK3V0aWxpdGllcyBhcmUgYmVpbmcgcG9ydGVkIHRvIExpbnV4IGFuZCB3aWxsIGJlY29tZSBhdmFpbGFibGUgYXQgc29tZSBwb2ludCBpbgordGhlIGZ1dHVyZS4gIE5vdGUgdGhhdCB3aXRoIGEgU0FGLVRFIChTQ1NJIEFjY2Vzc2VkIEZhdWx0LVRvbGVyYW50IEVuY2xvc3VyZSkKK2VuY2xvc3VyZSwgdGhlIGNvbnRyb2xsZXIgaXMgYWJsZSB0byByZWJ1aWxkIGZhaWxlZCBkcml2ZXMgYXV0b21hdGljYWxseSBhcworc29vbiBhcyBhIGRyaXZlIHJlcGxhY2VtZW50IGlzIG1hZGUgYXZhaWxhYmxlLgorCitUaGUgcHJpbWFyeSBpbnRlcmZhY2VzIGZvciBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyBtb25pdG9yaW5nIGFyZQorc3BlY2lhbCBmaWxlcyBjcmVhdGVkIGluIHRoZSAvcHJvYy9yZC8uLi4gaGllcmFyY2h5IGFsb25nIHdpdGggdGhlIG5vcm1hbAorc3lzdGVtIGNvbnNvbGUgbG9nZ2luZyBtZWNoYW5pc20uICBXaGVuZXZlciB0aGUgc3lzdGVtIGlzIG9wZXJhdGluZywgdGhlIERBQzk2MAorZHJpdmVyIHF1ZXJpZXMgZWFjaCBjb250cm9sbGVyIGZvciBzdGF0dXMgaW5mb3JtYXRpb24gZXZlcnkgMTAgc2Vjb25kcywgYW5kCitjaGVja3MgZm9yIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBldmVyeSA2MCBzZWNvbmRzLiAgVGhlIGluaXRpYWwgc3RhdHVzIG9mIGVhY2gKK2NvbnRyb2xsZXIgaXMgYWx3YXlzIGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBOIGluIC9wcm9jL3JkL2NOL2luaXRpYWxfc3RhdHVzLAorYW5kIHRoZSBjdXJyZW50IHN0YXR1cyBhcyBvZiB0aGUgbGFzdCBzdGF0dXMgbW9uaXRvcmluZyBxdWVyeSBpcyBhdmFpbGFibGUgaW4KKy9wcm9jL3JkL2NOL2N1cnJlbnRfc3RhdHVzLiAgSW4gYWRkaXRpb24sIHN0YXR1cyBjaGFuZ2VzIGFyZSBhbHNvIGxvZ2dlZCBieSB0aGUKK2RyaXZlciB0byB0aGUgc3lzdGVtIGNvbnNvbGUgYW5kIHdpbGwgYXBwZWFyIGluIHRoZSBsb2cgZmlsZXMgbWFpbnRhaW5lZCBieQorc3lzbG9nLiAgVGhlIHByb2dyZXNzIG9mIGFzeW5jaHJvbm91cyByZWJ1aWxkIG9yIGNvbnNpc3RlbmN5IGNoZWNrIG9wZXJhdGlvbnMKK2lzIGFsc28gYXZhaWxhYmxlIGluIC9wcm9jL3JkL2NOL2N1cnJlbnRfc3RhdHVzLCBhbmQgcHJvZ3Jlc3MgbWVzc2FnZXMgYXJlCitsb2dnZWQgdG8gdGhlIHN5c3RlbSBjb25zb2xlIGF0IG1vc3QgZXZlcnkgNjAgc2Vjb25kcy4KKworU3RhcnRpbmcgd2l0aCB0aGUgMi4yLjMvMi4wLjMgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbgorYXZhaWxhYmxlIGluIC9wcm9jL3JkL2NOL2luaXRpYWxfc3RhdHVzIGFuZCAvcHJvYy9yZC9jTi9jdXJyZW50X3N0YXR1cyBoYXMgYmVlbgorYXVnbWVudGVkIHRvIGluY2x1ZGUgdGhlIHZlbmRvciwgbW9kZWwsIHJldmlzaW9uLCBhbmQgc2VyaWFsIG51bWJlciAoaWYKK2F2YWlsYWJsZSkgZm9yIGVhY2ggcGh5c2ljYWwgZGV2aWNlIGZvdW5kIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlcjoKKworKioqKiogREFDOTYwIFJBSUQgRHJpdmVyIFZlcnNpb24gMi4yLjMgb2YgMTkgQXVndXN0IDE5OTkgKioqKioKK0NvcHlyaWdodCAxOTk4LTE5OTkgYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KK0NvbmZpZ3VyaW5nIE15bGV4IERBQzk2MFBSTCBQQ0kgUkFJRCBDb250cm9sbGVyCisgIEZpcm13YXJlIFZlcnNpb246IDQuMDctMC0wNywgQ2hhbm5lbHM6IDEsIE1lbW9yeSBTaXplOiAxNk1CCisgIFBDSSBCdXM6IDEsIERldmljZTogNCwgRnVuY3Rpb246IDEsIEkvTyBBZGRyZXNzOiBVbmFzc2lnbmVkCisgIFBDSSBBZGRyZXNzOiAweEZFMzAwMDAwIG1hcHBlZCBhdCAweEEwODAwMDAwLCBJUlEgQ2hhbm5lbDogMjEKKyAgQ29udHJvbGxlciBRdWV1ZSBEZXB0aDogMTI4LCBNYXhpbXVtIEJsb2NrcyBwZXIgQ29tbWFuZDogMTI4CisgIERyaXZlciBRdWV1ZSBEZXB0aDogMTI3LCBNYXhpbXVtIFNjYXR0ZXIvR2F0aGVyIFNlZ21lbnRzOiAzMworICBTdHJpcGUgU2l6ZTogNjRLQiwgU2VnbWVudCBTaXplOiA4S0IsIEJJT1MgR2VvbWV0cnk6IDI1NS82MworICBTQUYtVEUgRW5jbG9zdXJlIE1hbmFnZW1lbnQgRW5hYmxlZAorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MCAgVmVuZG9yOiBJQk0gICAgICAgTW9kZWw6IERSVlMwOUQgICAgICAgICAgIFJldmlzaW9uOiAwMjcwCisgICAgICAgICBTZXJpYWwgTnVtYmVyOiAgICAgICA2ODAxNjc3NUhBCisgICAgICAgICBEaXNrIFN0YXR1czogT25saW5lLCAxNzkyODE5MiBibG9ja3MKKyAgICAwOjEgIFZlbmRvcjogSUJNICAgICAgIE1vZGVsOiBEUlZTMDlEICAgICAgICAgICBSZXZpc2lvbjogMDI3MAorICAgICAgICAgU2VyaWFsIE51bWJlcjogICAgICAgNjgwMDRFNTNIQQorICAgICAgICAgRGlzayBTdGF0dXM6IE9ubGluZSwgMTc5MjgxOTIgYmxvY2tzCisgICAgMDoyICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRFJWUzA5RCAgICAgICAgICAgUmV2aXNpb246IDAyNzAKKyAgICAgICAgIFNlcmlhbCBOdW1iZXI6ICAgICAgIDEzMDEzOTM1SEEKKyAgICAgICAgIERpc2sgU3RhdHVzOiBPbmxpbmUsIDE3OTI4MTkyIGJsb2NrcworICAgIDA6MyAgVmVuZG9yOiBJQk0gICAgICAgTW9kZWw6IERSVlMwOUQgICAgICAgICAgIFJldmlzaW9uOiAwMjcwCisgICAgICAgICBTZXJpYWwgTnVtYmVyOiAgICAgICAxMzAxNjg5N0hBCisgICAgICAgICBEaXNrIFN0YXR1czogT25saW5lLCAxNzkyODE5MiBibG9ja3MKKyAgICAwOjQgIFZlbmRvcjogSUJNICAgICAgIE1vZGVsOiBEUlZTMDlEICAgICAgICAgICBSZXZpc2lvbjogMDI3MAorICAgICAgICAgU2VyaWFsIE51bWJlcjogICAgICAgNjgwMTk5MDVIQQorICAgICAgICAgRGlzayBTdGF0dXM6IE9ubGluZSwgMTc5MjgxOTIgYmxvY2tzCisgICAgMDo1ICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRFJWUzA5RCAgICAgICAgICAgUmV2aXNpb246IDAyNzAKKyAgICAgICAgIFNlcmlhbCBOdW1iZXI6ICAgICAgIDY4MDEyNzUzSEEKKyAgICAgICAgIERpc2sgU3RhdHVzOiBPbmxpbmUsIDE3OTI4MTkyIGJsb2NrcworICAgIDA6NiAgVmVuZG9yOiBFU0ctU0hWICAgTW9kZWw6IFNDQSBIU0JQIE02ICAgICAgIFJldmlzaW9uOiAwLjYxCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBPbmxpbmUsIDg5NjQwOTYwIGJsb2NrcywgV3JpdGUgVGhydQorICBObyBSZWJ1aWxkIG9yIENvbnNpc3RlbmN5IENoZWNrIGluIFByb2dyZXNzCisKK1RvIHNpbXBsaWZ5IHRoZSBtb25pdG9yaW5nIHByb2Nlc3MgZm9yIGN1c3RvbSBzb2Z0d2FyZSwgdGhlIHNwZWNpYWwgZmlsZQorL3Byb2MvcmQvc3RhdHVzIHJldHVybnMgIk9LIiB3aGVuIGFsbCBEQUM5NjAgY29udHJvbGxlcnMgaW4gdGhlIHN5c3RlbSBhcmUKK29wZXJhdGluZyBub3JtYWxseSBhbmQgbm8gZmFpbHVyZXMgaGF2ZSBvY2N1cnJlZCwgb3IgIkFMRVJUIiBpZiBhbnkgbG9naWNhbAorZHJpdmVzIGFyZSBvZmZsaW5lIG9yIGNyaXRpY2FsIG9yIGFueSBub24tc3RhbmRieSBwaHlzaWNhbCBkcml2ZXMgYXJlIGRlYWQuCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHMgZm9yIGNvbnRyb2xsZXIgTiBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgc3BlY2lhbCBmaWxlCisvcHJvYy9yZC9jTi91c2VyX2NvbW1hbmQuICBBIGh1bWFuIHJlYWRhYmxlIGNvbW1hbmQgY2FuIGJlIHdyaXR0ZW4gdG8gdGhpcworc3BlY2lhbCBmaWxlIHRvIGluaXRpYXRlIGEgY29uZmlndXJhdGlvbiBvcGVyYXRpb24sIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUKK29wZXJhdGlvbiBjYW4gdGhlbiBiZSByZWFkIGJhY2sgZnJvbSB0aGUgc3BlY2lhbCBmaWxlIGluIGFkZGl0aW9uIHRvIGJlaW5nCitsb2dnZWQgdG8gdGhlIHN5c3RlbSBjb25zb2xlLiAgVGhlIHNoZWxsIGNvbW1hbmQgc2VxdWVuY2UKKworICBlY2hvICI8Y29uZmlndXJhdGlvbi1jb21tYW5kPiIgPiAvcHJvYy9yZC9jMC91c2VyX2NvbW1hbmQKKyAgY2F0IC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZAorCitpcyB0eXBpY2FsbHkgdXNlZCB0byBleGVjdXRlIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuICBUaGUgY29uZmlndXJhdGlvbgorY29tbWFuZHMgYXJlOgorCisgIGZsdXNoLWNhY2hlCisKKyAgICBUaGUgImZsdXNoLWNhY2hlIiBjb21tYW5kIGZsdXNoZXMgdGhlIGNvbnRyb2xsZXIncyBjYWNoZS4gIFRoZSBzeXN0ZW0KKyAgICBhdXRvbWF0aWNhbGx5IGZsdXNoZXMgdGhlIGNhY2hlIGF0IHNodXRkb3duIG9yIGlmIHRoZSBkcml2ZXIgbW9kdWxlIGlzCisgICAgdW5sb2FkZWQsIHNvIHRoaXMgY29tbWFuZCBpcyBvbmx5IG5lZWRlZCB0byBiZSBjZXJ0YWluIGEgd3JpdGUgYmFjayBjYWNoZQorICAgIGlzIGZsdXNoZWQgdG8gZGlzayBiZWZvcmUgdGhlIHN5c3RlbSBpcyBwb3dlcmVkIG9mZiBieSBhIGNvbW1hbmQgdG8gYSBVUFMuCisgICAgTm90ZSB0aGF0IHRoZSBmbHVzaC1jYWNoZSBjb21tYW5kIGFsc28gc3RvcHMgYW4gYXN5bmNocm9ub3VzIHJlYnVpbGQgb3IKKyAgICBjb25zaXN0ZW5jeSBjaGVjaywgc28gaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGV4Y2VwdCB3aGVuIHRoZSBzeXN0ZW0gaXMgYmVpbmcKKyAgICBoYWx0ZWQuCisKKyAga2lsbCA8Y2hhbm5lbD46PHRhcmdldC1pZD4KKworICAgIFRoZSAia2lsbCIgY29tbWFuZCBtYXJrcyB0aGUgcGh5c2ljYWwgZHJpdmUgPGNoYW5uZWw+Ojx0YXJnZXQtaWQ+IGFzIERFQUQuCisgICAgVGhpcyBjb21tYW5kIGlzIHByb3ZpZGVkIHByaW1hcmlseSBmb3IgdGVzdGluZywgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorICAgIGR1cmluZyBub3JtYWwgc3lzdGVtIG9wZXJhdGlvbi4KKworICBtYWtlLW9ubGluZSA8Y2hhbm5lbD46PHRhcmdldC1pZD4KKworICAgIFRoZSAibWFrZS1vbmxpbmUiIGNvbW1hbmQgY2hhbmdlcyB0aGUgcGh5c2ljYWwgZHJpdmUgPGNoYW5uZWw+Ojx0YXJnZXQtaWQ+CisgICAgZnJvbSBzdGF0dXMgREVBRCB0byBzdGF0dXMgT05MSU5FLiAgSW4gY2FzZXMgd2hlcmUgbXVsdGlwbGUgcGh5c2ljYWwgZHJpdmVzCisgICAgaGF2ZSBiZWVuIGtpbGxlZCBzaW11bHRhbmVvdXNseSwgdGhpcyBjb21tYW5kIG1heSBiZSB1c2VkIHRvIGJyaW5nIGFsbCBidXQKKyAgICBvbmUgb2YgdGhlbSBiYWNrIG9ubGluZSwgYWZ0ZXIgd2hpY2ggYSByZWJ1aWxkIHRvIHRoZSBmaW5hbCBkcml2ZSBpcworICAgIG5lY2Vzc2FyeS4KKworICAgIFdhcm5pbmc6IG1ha2Utb25saW5lIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gYSBkZWFkIHBoeXNpY2FsIGRyaXZlIHRoYXQgaXMKKyAgICBhbiBhY3RpdmUgcGFydCBvZiBhIGRyaXZlIGdyb3VwLCBuZXZlciBvbiBhIHN0YW5kYnkgZHJpdmUuICBUaGUgY29tbWFuZAorICAgIHNob3VsZCBuZXZlciBiZSB1c2VkIG9uIGEgZGVhZCBkcml2ZSB0aGF0IGlzIHBhcnQgb2YgYSBjcml0aWNhbCBsb2dpY2FsCisgICAgZHJpdmU7IHJlYnVpbGQgc2hvdWxkIGJlIHVzZWQgaWYgb25seSBhIHNpbmdsZSBkcml2ZSBpcyBkZWFkLgorCisgIG1ha2Utc3RhbmRieSA8Y2hhbm5lbD46PHRhcmdldC1pZD4KKworICAgIFRoZSAibWFrZS1zdGFuZGJ5IiBjb21tYW5kIGNoYW5nZXMgcGh5c2ljYWwgZHJpdmUgPGNoYW5uZWw+Ojx0YXJnZXQtaWQ+CisgICAgZnJvbSBzdGF0dXMgREVBRCB0byBzdGF0dXMgU1RBTkRCWS4gIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gY2FzZXMgd2hlcmUKKyAgICBhIGRlYWQgZHJpdmUgd2FzIHJlcGxhY2VkIGFmdGVyIGFuIGF1dG9tYXRpYyByZWJ1aWxkIHdhcyBwZXJmb3JtZWQgb250byBhCisgICAgc3RhbmRieSBkcml2ZS4gIEl0IGNhbm5vdCBiZSB1c2VkIHRvIGFkZCBhIHN0YW5kYnkgZHJpdmUgdG8gdGhlIGNvbnRyb2xsZXIKKyAgICBjb25maWd1cmF0aW9uIGlmIG9uZSB3YXMgbm90IGNyZWF0ZWQgaW5pdGlhbGx5OyB0aGUgQklPUyBDb25maWd1cmF0aW9uCisgICAgVXRpbGl0eSBtdXN0IGJlIHVzZWQgZm9yIHRoYXQgY3VycmVudGx5LgorCisgIHJlYnVpbGQgPGNoYW5uZWw+Ojx0YXJnZXQtaWQ+CisKKyAgICBUaGUgInJlYnVpbGQiIGNvbW1hbmQgaW5pdGlhdGVzIGFuIGFzeW5jaHJvbm91cyByZWJ1aWxkIG9udG8gcGh5c2ljYWwgZHJpdmUKKyAgICA8Y2hhbm5lbD46PHRhcmdldC1pZD4uICBJdCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gYSBkZWFkIGRyaXZlIGhhcyBiZWVuCisgICAgcmVwbGFjZWQuCisKKyAgY2hlY2stY29uc2lzdGVuY3kgPGxvZ2ljYWwtZHJpdmUtbnVtYmVyPgorCisgICAgVGhlICJjaGVjay1jb25zaXN0ZW5jeSIgY29tbWFuZCBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIGNvbnNpc3RlbmN5IGNoZWNrCisgICAgb2YgPGxvZ2ljYWwtZHJpdmUtbnVtYmVyPiB3aXRoIGF1dG9tYXRpYyByZXN0b3JhdGlvbi4gIEl0IGNhbiBiZSB1c2VkCisgICAgd2hlbmV2ZXIgaXQgaXMgZGVzaXJlZCB0byB2ZXJpZnkgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSByZWR1bmRhbmN5CisgICAgaW5mb3JtYXRpb24uCisKKyAgY2FuY2VsLXJlYnVpbGQKKyAgY2FuY2VsLWNvbnNpc3RlbmN5LWNoZWNrCisKKyAgICBUaGUgImNhbmNlbC1yZWJ1aWxkIiBhbmQgImNhbmNlbC1jb25zaXN0ZW5jeS1jaGVjayIgY29tbWFuZHMgY2FuY2VsIGFueQorICAgIHJlYnVpbGQgb3IgY29uc2lzdGVuY3kgY2hlY2sgb3BlcmF0aW9ucyBwcmV2aW91c2x5IGluaXRpYXRlZC4KKworCisJICAgICAgIEVYQU1QTEUgSSAtIERSSVZFIEZBSUxVUkUgV0lUSE9VVCBBIFNUQU5EQlkgRFJJVkUKKworVGhlIGZvbGxvd2luZyBhbm5vdGF0ZWQgbG9ncyBkZW1vbnN0cmF0ZSB0aGUgY29udHJvbGxlciBjb25maWd1cmF0aW9uIGFuZCBhbmQKK29ubGluZSBzdGF0dXMgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIExpbnV4IERBQzk2MCBEcml2ZXIuICBUaGUgdGVzdAorY29uZmlndXJhdGlvbiBjb21wcmlzZXMgNiAxR0IgUXVhbnR1bSBBdGxhcyBJIGRpc2sgZHJpdmVzIG9uIHR3byBjaGFubmVscyBvZiBhCitEQUM5NjBQSiBjb250cm9sbGVyLiAgVGhlIHBoeXNpY2FsIGRyaXZlcyBhcmUgY29uZmlndXJlZCBpbnRvIGEgc2luZ2xlIGRyaXZlCitncm91cCB3aXRob3V0IGEgc3RhbmRieSBkcml2ZSwgYW5kIHRoZSBkcml2ZSBncm91cCBoYXMgYmVlbiBjb25maWd1cmVkIGludG8gdHdvCitsb2dpY2FsIGRyaXZlcywgb25lIFJBSUQtNSBhbmQgb25lIFJBSUQtNi4gIE5vdGUgdGhhdCB0aGVzZSBsb2dzIGFyZSBmcm9tIGFuCitlYXJsaWVyIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbmQgdGhlIG1lc3NhZ2VzIGhhdmUgY2hhbmdlZCBzb21ld2hhdCB3aXRoIG5ld2VyCityZWxlYXNlcywgYnV0IHRoZSBmdW5jdGlvbmFsaXR5IHJlbWFpbnMgc2ltaWxhci4gIEZpcnN0LCBoZXJlIGlzIHRoZSBjdXJyZW50CitzdGF0dXMgb2YgdGhlIFJBSUQgY29uZmlndXJhdGlvbjoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cworKioqKiogREFDOTYwIFJBSUQgRHJpdmVyIFZlcnNpb24gMi4wLjAgb2YgMjMgTWFyY2ggMTk5OSAqKioqKgorQ29weXJpZ2h0IDE5OTgtMTk5OSBieSBMZW9uYXJkIE4uIFp1YmtvZmYgPGxuekBkYW5kZWxpb24uY29tPgorQ29uZmlndXJpbmcgTXlsZXggREFDOTYwUEogUENJIFJBSUQgQ29udHJvbGxlcgorICBGaXJtd2FyZSBWZXJzaW9uOiA0LjA2LTAtMDgsIENoYW5uZWxzOiAzLCBNZW1vcnkgU2l6ZTogOE1CCisgIFBDSSBCdXM6IDAsIERldmljZTogMTksIEZ1bmN0aW9uOiAxLCBJL08gQWRkcmVzczogVW5hc3NpZ25lZAorICBQQ0kgQWRkcmVzczogMHhGRDRGQzAwMCBtYXBwZWQgYXQgMHg4ODA3MDAwLCBJUlEgQ2hhbm5lbDogOQorICBDb250cm9sbGVyIFF1ZXVlIERlcHRoOiAxMjgsIE1heGltdW0gQmxvY2tzIHBlciBDb21tYW5kOiAxMjgKKyAgRHJpdmVyIFF1ZXVlIERlcHRoOiAxMjcsIE1heGltdW0gU2NhdHRlci9HYXRoZXIgU2VnbWVudHM6IDMzCisgIFN0cmlwZSBTaXplOiA2NEtCLCBTZWdtZW50IFNpemU6IDhLQiwgQklPUyBHZW9tZXRyeTogMjU1LzYzCisgIFBoeXNpY2FsIERldmljZXM6CisgICAgMDoxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBPbmxpbmUsIDU0OTg4ODAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgICAgL2Rldi9yZC9jMGQxOiBSQUlELTYsIE9ubGluZSwgMzMwNTQ3MiBibG9ja3MsIFdyaXRlIFRocnUKKyAgTm8gUmVidWlsZCBvciBDb25zaXN0ZW5jeSBDaGVjayBpbiBQcm9ncmVzcworCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL3N0YXR1cworT0sKKworVGhlIGFib3ZlIG1lc3NhZ2VzIGluZGljYXRlIHRoYXQgZXZlcnl0aGluZyBpcyBoZWFsdGh5LCBhbmQgL3Byb2MvcmQvc3RhdHVzCityZXR1cm5zICJPSyIgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIGFueSBEQUM5NjAgY29udHJvbGxlcgoraW4gdGhlIHN5c3RlbS4gIEZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzLCB3aGlsZSBJL08gaXMgYWN0aXZlIFBoeXNpY2FsIERyaXZlCisxOjEgaXMgbm93IGRpc2Nvbm5lY3RlZCwgc2ltdWxhdGluZyBhIGRyaXZlIGZhaWx1cmUuICBUaGUgZmFpbHVyZSBpcyBub3RlZCBieQordGhlIGRyaXZlciB3aXRoaW4gMTAgc2Vjb25kcyBvZiB0aGUgY29udHJvbGxlcidzIGhhdmluZyBkZXRlY3RlZCBpdCwgYW5kIHRoZQorZHJpdmVyIGxvZ3MgdGhlIGZvbGxvd2luZyBjb25zb2xlIHN0YXR1cyBtZXNzYWdlcyBpbmRpY2F0aW5nIHRoYXQgTG9naWNhbAorRHJpdmVzIDAgYW5kIDEgYXJlIG5vdyBDUklUSUNBTCBhcyBhIHJlc3VsdCBvZiBQaHlzaWNhbCBEcml2ZSAxOjEgYmVpbmcgREVBRDoKKworREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MiBFcnJvciBMb2c6IFNlbnNlIEtleSA9IDYsIEFTQyA9IDI5LCBBU0NRID0gMDIKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjMgRXJyb3IgTG9nOiBTZW5zZSBLZXkgPSA2LCBBU0MgPSAyOSwgQVNDUSA9IDAyCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToxIGtpbGxlZCBiZWNhdXNlIG9mIHRpbWVvdXQgb24gU0NTSSBjb21tYW5kCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToxIGlzIG5vdyBERUFECitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIGlzIG5vdyBDUklUSUNBTAorREFDOTYwIzA6IExvZ2ljYWwgRHJpdmUgMSAoL2Rldi9yZC9jMGQxKSBpcyBub3cgQ1JJVElDQUwKKworVGhlIFNlbnNlIEtleXMgbG9nZ2VkIGhlcmUgYXJlIGp1c3QgQ2hlY2sgQ29uZGl0aW9uIC8gVW5pdCBBdHRlbnRpb24gY29uZGl0aW9ucworYXJpc2luZyBmcm9tIGEgU0NTSSBidXMgcmVzZXQgdGhhdCBpcyBmb3JjZWQgYnkgdGhlIGNvbnRyb2xsZXIgZHVyaW5nIGl0cyBlcnJvcgorcmVjb3ZlcnkgcHJvY2VkdXJlcy4gIENvbmN1cnJlbnRseSB3aXRoIHRoZSBhYm92ZSwgdGhlIGRyaXZlciBzdGF0dXMgYXZhaWxhYmxlCitmcm9tIC9wcm9jL3JkIGFsc28gcmVmbGVjdHMgdGhlIGRyaXZlIGZhaWx1cmUuICBUaGUgc3RhdHVzIG1lc3NhZ2UgaW4KKy9wcm9jL3JkL3N0YXR1cyBoYXMgY2hhbmdlZCBmcm9tICJPSyIgdG8gIkFMRVJUIjoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9zdGF0dXMKK0FMRVJUCisKK2FuZCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBoYXMgYmVlbiB1cGRhdGVkOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisgIC4uLgorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IERlYWQsIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIENyaXRpY2FsLCA1NDk4ODgwIGJsb2NrcywgV3JpdGUgVGhydQorICAgIC9kZXYvcmQvYzBkMTogUkFJRC02LCBDcml0aWNhbCwgMzMwNTQ3MiBibG9ja3MsIFdyaXRlIFRocnUKKyAgTm8gUmVidWlsZCBvciBDb25zaXN0ZW5jeSBDaGVjayBpbiBQcm9ncmVzcworCitTaW5jZSB0aGVyZSBhcmUgbm8gc3RhbmRieSBkcml2ZXMgY29uZmlndXJlZCwgdGhlIHN5c3RlbSBjYW4gY29udGludWUgdG8gYWNjZXNzCit0aGUgbG9naWNhbCBkcml2ZXMgaW4gYSBwZXJmb3JtYW5jZSBkZWdyYWRlZCBtb2RlIHVudGlsIHRoZSBmYWlsZWQgZHJpdmUgaXMKK3JlcGxhY2VkIGFuZCBhIHJlYnVpbGQgb3BlcmF0aW9uIGNvbXBsZXRlZCB0byByZXN0b3JlIHRoZSByZWR1bmRhbmN5IG9mIHRoZQorbG9naWNhbCBkcml2ZXMuICBPbmNlIFBoeXNpY2FsIERyaXZlIDE6MSBpcyByZXBsYWNlZCB3aXRoIGEgcHJvcGVybHkKK2Z1bmN0aW9uaW5nIGRyaXZlLCBvciBpZiB0aGUgcGh5c2ljYWwgZHJpdmUgd2FzIGtpbGxlZCB3aXRob3V0IGhhdmluZyBmYWlsZWQKKyhlLmcuLCBkdWUgdG8gZWxlY3RyaWNhbCBwcm9ibGVtcyBvbiB0aGUgU0NTSSBidXMpLCB0aGUgdXNlciBjYW4gaW5zdHJ1Y3QgdGhlCitjb250cm9sbGVyIHRvIGluaXRpYXRlIGEgcmVidWlsZCBvcGVyYXRpb24gb250byB0aGUgbmV3bHkgcmVwbGFjZWQgZHJpdmU6CisKK2d3eW5lZGQ6L3UvbG56IyBlY2hvICJyZWJ1aWxkIDE6MSIgPiAvcHJvYy9yZC9jMC91c2VyX2NvbW1hbmQKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvYzAvdXNlcl9jb21tYW5kCitSZWJ1aWxkIG9mIFBoeXNpY2FsIERyaXZlIDE6MSBJbml0aWF0ZWQKKworVGhlIGVjaG8gY29tbWFuZCBpbnN0cnVjdHMgdGhlIGNvbnRyb2xsZXIgdG8gaW5pdGlhdGUgYW4gYXN5bmNocm9ub3VzIHJlYnVpbGQKK29wZXJhdGlvbiBvbnRvIFBoeXNpY2FsIERyaXZlIDE6MSwgYW5kIHRoZSBzdGF0dXMgbWVzc2FnZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUKK29wZXJhdGlvbiBpcyB0aGVuIGF2YWlsYWJsZSBmb3IgcmVhZGluZyBmcm9tIC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZCwgYXMgd2VsbAorYXMgYmVpbmcgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIGJ5IHRoZSBkcml2ZXIuCisKK1dpdGhpbiAxMCBzZWNvbmRzIG9mIHRoaXMgY29tbWFuZCB0aGUgZHJpdmVyIGxvZ3MgdGhlIGluaXRpYXRpb24gb2YgdGhlCithc3luY2hyb25vdXMgcmVidWlsZCBvcGVyYXRpb246CisKK0RBQzk2MCMwOiBSZWJ1aWxkIG9mIFBoeXNpY2FsIERyaXZlIDE6MSBJbml0aWF0ZWQKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjEgRXJyb3IgTG9nOiBTZW5zZSBLZXkgPSA2LCBBU0MgPSAyOSwgQVNDUSA9IDAxCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToxIGlzIG5vdyBXUklURS1PTkxZCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIDElIGNvbXBsZXRlZAorCithbmQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMgaXMgdXBkYXRlZDoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cworICAuLi4KKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBXcml0ZS1Pbmx5LCAyMjAxNjAwIGJsb2NrcworICAgIDE6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBDcml0aWNhbCwgNTQ5ODg4MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgQ3JpdGljYWwsIDMzMDU0NzIgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSA2JSBjb21wbGV0ZWQKKworQXMgdGhlIHJlYnVpbGQgcHJvZ3Jlc3NlcywgdGhlIGN1cnJlbnQgc3RhdHVzIGluIC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzIGlzCit1cGRhdGVkIGV2ZXJ5IDEwIHNlY29uZHM6CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMKKyAgLi4uCisgIFBoeXNpY2FsIERldmljZXM6CisgICAgMDoxIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MiAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToxIC0gRGlzazogV3JpdGUtT25seSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMTozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICBMb2dpY2FsIERyaXZlczoKKyAgICAvZGV2L3JkL2MwZDA6IFJBSUQtNSwgQ3JpdGljYWwsIDU0OTg4ODAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgICAgL2Rldi9yZC9jMGQxOiBSQUlELTYsIENyaXRpY2FsLCAzMzA1NDcyIGJsb2NrcywgV3JpdGUgVGhydQorICBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgMTUlIGNvbXBsZXRlZAorCithbmQgZXZlcnkgbWludXRlIGEgcHJvZ3Jlc3MgbWVzc2FnZSBpcyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYnkgdGhlIGRyaXZlcjoKKworREFDOTYwIzA6IFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSAzMiUgY29tcGxldGVkCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIDYzJSBjb21wbGV0ZWQKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgOTQlIGNvbXBsZXRlZAorREFDOTYwIzA6IFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMSAoL2Rldi9yZC9jMGQxKSA5NCUgY29tcGxldGVkCisKK0ZpbmFsbHksIHRoZSByZWJ1aWxkIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuICBUaGUgZHJpdmVyIGxvZ3MgdGhlIHN0YXR1cyBvZiB0aGUgCitsb2dpY2FsIGFuZCBwaHlzaWNhbCBkcml2ZXMgYW5kIHRoZSByZWJ1aWxkIGNvbXBsZXRpb246CisKK0RBQzk2MCMwOiBSZWJ1aWxkIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjEgaXMgbm93IE9OTElORQorREFDOTYwIzA6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSBpcyBub3cgT05MSU5FCitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAxICgvZGV2L3JkL2MwZDEpIGlzIG5vdyBPTkxJTkUKKworL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMgaXMgdXBkYXRlZDoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cworICAuLi4KKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIE9ubGluZSwgNTQ5ODg4MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgT25saW5lLCAzMzA1NDcyIGJsb2NrcywgV3JpdGUgVGhydQorICBSZWJ1aWxkIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkKKworYW5kIC9wcm9jL3JkL3N0YXR1cyBpbmRpY2F0ZXMgdGhhdCBldmVyeXRoaW5nIGlzIGhlYWx0aHkgb25jZSBhZ2FpbjoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9zdGF0dXMKK09LCisKKworCQlFWEFNUExFIElJIC0gRFJJVkUgRkFJTFVSRSBXSVRIIEEgU1RBTkRCWSBEUklWRQorCitUaGUgZm9sbG93aW5nIGFubm90YXRlZCBsb2dzIGRlbW9uc3RyYXRlIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gYW5kIGFuZAorb25saW5lIHN0YXR1cyBtb25pdG9yaW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgTGludXggREFDOTYwIERyaXZlci4gIFRoZSB0ZXN0Citjb25maWd1cmF0aW9uIGNvbXByaXNlcyA2IDFHQiBRdWFudHVtIEF0bGFzIEkgZGlzayBkcml2ZXMgb24gdHdvIGNoYW5uZWxzIG9mIGEKK0RBQzk2MFBKIGNvbnRyb2xsZXIuICBUaGUgcGh5c2ljYWwgZHJpdmVzIGFyZSBjb25maWd1cmVkIGludG8gYSBzaW5nbGUgZHJpdmUKK2dyb3VwIHdpdGggYSBzdGFuZGJ5IGRyaXZlLCBhbmQgdGhlIGRyaXZlIGdyb3VwIGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW50byB0d28KK2xvZ2ljYWwgZHJpdmVzLCBvbmUgUkFJRC01IGFuZCBvbmUgUkFJRC02LiAgTm90ZSB0aGF0IHRoZXNlIGxvZ3MgYXJlIGZyb20gYW4KK2VhcmxpZXIgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGFuZCB0aGUgbWVzc2FnZXMgaGF2ZSBjaGFuZ2VkIHNvbWV3aGF0IHdpdGggbmV3ZXIKK3JlbGVhc2VzLCBidXQgdGhlIGZ1bmN0aW9uYWxpdHkgcmVtYWlucyBzaW1pbGFyLiAgRmlyc3QsIGhlcmUgaXMgdGhlIGN1cnJlbnQKK3N0YXR1cyBvZiB0aGUgUkFJRCBjb25maWd1cmF0aW9uOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisqKioqKiBEQUM5NjAgUkFJRCBEcml2ZXIgVmVyc2lvbiAyLjAuMCBvZiAyMyBNYXJjaCAxOTk5ICoqKioqCitDb3B5cmlnaHQgMTk5OC0xOTk5IGJ5IExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CitDb25maWd1cmluZyBNeWxleCBEQUM5NjBQSiBQQ0kgUkFJRCBDb250cm9sbGVyCisgIEZpcm13YXJlIFZlcnNpb246IDQuMDYtMC0wOCwgQ2hhbm5lbHM6IDMsIE1lbW9yeSBTaXplOiA4TUIKKyAgUENJIEJ1czogMCwgRGV2aWNlOiAxOSwgRnVuY3Rpb246IDEsIEkvTyBBZGRyZXNzOiBVbmFzc2lnbmVkCisgIFBDSSBBZGRyZXNzOiAweEZENEZDMDAwIG1hcHBlZCBhdCAweDg4MDcwMDAsIElSUSBDaGFubmVsOiA5CisgIENvbnRyb2xsZXIgUXVldWUgRGVwdGg6IDEyOCwgTWF4aW11bSBCbG9ja3MgcGVyIENvbW1hbmQ6IDEyOAorICBEcml2ZXIgUXVldWUgRGVwdGg6IDEyNywgTWF4aW11bSBTY2F0dGVyL0dhdGhlciBTZWdtZW50czogMzMKKyAgU3RyaXBlIFNpemU6IDY0S0IsIFNlZ21lbnQgU2l6ZTogOEtCLCBCSU9TIEdlb21ldHJ5OiAyNTUvNjMKKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IFN0YW5kYnksIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBPbmxpbmUsIDQzOTkxMDQgYmxvY2tzLCBXcml0ZSBUaHJ1CisgICAgL2Rldi9yZC9jMGQxOiBSQUlELTYsIE9ubGluZSwgMjc1NDU2MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgTm8gUmVidWlsZCBvciBDb25zaXN0ZW5jeSBDaGVjayBpbiBQcm9ncmVzcworCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL3N0YXR1cworT0sKKworVGhlIGFib3ZlIG1lc3NhZ2VzIGluZGljYXRlIHRoYXQgZXZlcnl0aGluZyBpcyBoZWFsdGh5LCBhbmQgL3Byb2MvcmQvc3RhdHVzCityZXR1cm5zICJPSyIgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIGFueSBEQUM5NjAgY29udHJvbGxlcgoraW4gdGhlIHN5c3RlbS4gIEZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzLCB3aGlsZSBJL08gaXMgYWN0aXZlIFBoeXNpY2FsIERyaXZlCisxOjIgaXMgbm93IGRpc2Nvbm5lY3RlZCwgc2ltdWxhdGluZyBhIGRyaXZlIGZhaWx1cmUuICBUaGUgZmFpbHVyZSBpcyBub3RlZCBieQordGhlIGRyaXZlciB3aXRoaW4gMTAgc2Vjb25kcyBvZiB0aGUgY29udHJvbGxlcidzIGhhdmluZyBkZXRlY3RlZCBpdCwgYW5kIHRoZQorZHJpdmVyIGxvZ3MgdGhlIGZvbGxvd2luZyBjb25zb2xlIHN0YXR1cyBtZXNzYWdlczoKKworREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MSBFcnJvciBMb2c6IFNlbnNlIEtleSA9IDYsIEFTQyA9IDI5LCBBU0NRID0gMDIKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjMgRXJyb3IgTG9nOiBTZW5zZSBLZXkgPSA2LCBBU0MgPSAyOSwgQVNDUSA9IDAyCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToyIGtpbGxlZCBiZWNhdXNlIG9mIHRpbWVvdXQgb24gU0NTSSBjb21tYW5kCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToyIGlzIG5vdyBERUFECitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToyIGtpbGxlZCBiZWNhdXNlIGl0IHdhcyByZW1vdmVkCitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIGlzIG5vdyBDUklUSUNBTAorREFDOTYwIzA6IExvZ2ljYWwgRHJpdmUgMSAoL2Rldi9yZC9jMGQxKSBpcyBub3cgQ1JJVElDQUwKKworU2luY2UgYSBzdGFuZGJ5IGRyaXZlIGlzIGNvbmZpZ3VyZWQsIHRoZSBjb250cm9sbGVyIGF1dG9tYXRpY2FsbHkgYmVnaW5zCityZWJ1aWxkaW5nIG9udG8gdGhlIHN0YW5kYnkgZHJpdmU6CisKK0RBQzk2MCMwOiBQaHlzaWNhbCBEcml2ZSAxOjMgaXMgbm93IFdSSVRFLU9OTFkKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgNCUgY29tcGxldGVkCisKK0NvbmN1cnJlbnRseSB3aXRoIHRoZSBhYm92ZSwgdGhlIGRyaXZlciBzdGF0dXMgYXZhaWxhYmxlIGZyb20gL3Byb2MvcmQgYWxzbworcmVmbGVjdHMgdGhlIGRyaXZlIGZhaWx1cmUgYW5kIGF1dG9tYXRpYyByZWJ1aWxkLiAgVGhlIHN0YXR1cyBtZXNzYWdlIGluCisvcHJvYy9yZC9zdGF0dXMgaGFzIGNoYW5nZWQgZnJvbSAiT0siIHRvICJBTEVSVCI6CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvc3RhdHVzCitBTEVSVAorCithbmQgL3Byb2MvcmQvYzAvY3VycmVudF9zdGF0dXMgaGFzIGJlZW4gdXBkYXRlZDoKKworZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cworICAuLi4KKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogRGVhZCwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjMgLSBEaXNrOiBXcml0ZS1Pbmx5LCAyMjAxNjAwIGJsb2NrcworICBMb2dpY2FsIERyaXZlczoKKyAgICAvZGV2L3JkL2MwZDA6IFJBSUQtNSwgQ3JpdGljYWwsIDQzOTkxMDQgYmxvY2tzLCBXcml0ZSBUaHJ1CisgICAgL2Rldi9yZC9jMGQxOiBSQUlELTYsIENyaXRpY2FsLCAyNzU0NTYwIGJsb2NrcywgV3JpdGUgVGhydQorICBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgNCUgY29tcGxldGVkCisKK0FzIHRoZSByZWJ1aWxkIHByb2dyZXNzZXMsIHRoZSBjdXJyZW50IHN0YXR1cyBpbiAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBpcwordXBkYXRlZCBldmVyeSAxMCBzZWNvbmRzOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisgIC4uLgorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBEZWFkLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IFdyaXRlLU9ubHksIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBDcml0aWNhbCwgNDM5OTEwNCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgQ3JpdGljYWwsIDI3NTQ1NjAgYmxvY2tzLCBXcml0ZSBUaHJ1CisgIFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMCAoL2Rldi9yZC9jMGQwKSA0MCUgY29tcGxldGVkCisKK2FuZCBldmVyeSBtaW51dGUgYSBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvZ2dlZCBvbiB0aGUgY29uc29sZSBieSB0aGUgZHJpdmVyOgorCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIDQwJSBjb21wbGV0ZWQKK0RBQzk2MCMwOiBSZWJ1aWxkIGluIFByb2dyZXNzOiBMb2dpY2FsIERyaXZlIDAgKC9kZXYvcmQvYzBkMCkgNzYlIGNvbXBsZXRlZAorREFDOTYwIzA6IFJlYnVpbGQgaW4gUHJvZ3Jlc3M6IExvZ2ljYWwgRHJpdmUgMSAoL2Rldi9yZC9jMGQxKSA2NiUgY29tcGxldGVkCitEQUM5NjAjMDogUmVidWlsZCBpbiBQcm9ncmVzczogTG9naWNhbCBEcml2ZSAxICgvZGV2L3JkL2MwZDEpIDg0JSBjb21wbGV0ZWQKKworRmluYWxseSwgdGhlIHJlYnVpbGQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4gIFRoZSBkcml2ZXIgbG9ncyB0aGUgc3RhdHVzIG9mIHRoZSAKK2xvZ2ljYWwgYW5kIHBoeXNpY2FsIGRyaXZlcyBhbmQgdGhlIHJlYnVpbGQgY29tcGxldGlvbjoKKworREFDOTYwIzA6IFJlYnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseQorREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MyBpcyBub3cgT05MSU5FCitEQUM5NjAjMDogTG9naWNhbCBEcml2ZSAwICgvZGV2L3JkL2MwZDApIGlzIG5vdyBPTkxJTkUKK0RBQzk2MCMwOiBMb2dpY2FsIERyaXZlIDEgKC9kZXYvcmQvYzBkMSkgaXMgbm93IE9OTElORQorCisvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBpcyB1cGRhdGVkOgorCisqKioqKiBEQUM5NjAgUkFJRCBEcml2ZXIgVmVyc2lvbiAyLjAuMCBvZiAyMyBNYXJjaCAxOTk5ICoqKioqCitDb3B5cmlnaHQgMTk5OC0xOTk5IGJ5IExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CitDb25maWd1cmluZyBNeWxleCBEQUM5NjBQSiBQQ0kgUkFJRCBDb250cm9sbGVyCisgIEZpcm13YXJlIFZlcnNpb246IDQuMDYtMC0wOCwgQ2hhbm5lbHM6IDMsIE1lbW9yeSBTaXplOiA4TUIKKyAgUENJIEJ1czogMCwgRGV2aWNlOiAxOSwgRnVuY3Rpb246IDEsIEkvTyBBZGRyZXNzOiBVbmFzc2lnbmVkCisgIFBDSSBBZGRyZXNzOiAweEZENEZDMDAwIG1hcHBlZCBhdCAweDg4MDcwMDAsIElSUSBDaGFubmVsOiA5CisgIENvbnRyb2xsZXIgUXVldWUgRGVwdGg6IDEyOCwgTWF4aW11bSBCbG9ja3MgcGVyIENvbW1hbmQ6IDEyOAorICBEcml2ZXIgUXVldWUgRGVwdGg6IDEyNywgTWF4aW11bSBTY2F0dGVyL0dhdGhlciBTZWdtZW50czogMzMKKyAgU3RyaXBlIFNpemU6IDY0S0IsIFNlZ21lbnQgU2l6ZTogOEtCLCBCSU9TIEdlb21ldHJ5OiAyNTUvNjMKKyAgUGh5c2ljYWwgRGV2aWNlczoKKyAgICAwOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDoyIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDA6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjEgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMToyIC0gRGlzazogRGVhZCwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjMgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgIExvZ2ljYWwgRHJpdmVzOgorICAgIC9kZXYvcmQvYzBkMDogUkFJRC01LCBPbmxpbmUsIDQzOTkxMDQgYmxvY2tzLCBXcml0ZSBUaHJ1CisgICAgL2Rldi9yZC9jMGQxOiBSQUlELTYsIE9ubGluZSwgMjc1NDU2MCBibG9ja3MsIFdyaXRlIFRocnUKKyAgUmVidWlsZCBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5CisKK2FuZCAvcHJvYy9yZC9zdGF0dXMgaW5kaWNhdGVzIHRoYXQgZXZlcnl0aGluZyBpcyBoZWFsdGh5IG9uY2UgYWdhaW46CisKK2d3eW5lZGQ6L3UvbG56IyBjYXQgL3Byb2MvcmQvc3RhdHVzCitPSworCitOb3RlIHRoYXQgdGhlIGFic2VuY2Ugb2YgYSB2aWFibGUgc3RhbmRieSBkcml2ZSBkb2VzIG5vdCBjcmVhdGUgYW4gIkFMRVJUIgorc3RhdHVzLiAgT25jZSBkZWFkIFBoeXNpY2FsIERyaXZlIDE6MiBoYXMgYmVlbiByZXBsYWNlZCwgdGhlIGNvbnRyb2xsZXIgbXVzdCBiZQordG9sZCB0aGF0IHRoaXMgaGFzIG9jY3VycmVkIGFuZCB0aGF0IHRoZSBuZXdseSByZXBsYWNlZCBkcml2ZSBzaG91bGQgYmVjb21lIHRoZQorbmV3IHN0YW5kYnkgZHJpdmU6CisKK2d3eW5lZGQ6L3UvbG56IyBlY2hvICJtYWtlLXN0YW5kYnkgMToyIiA+IC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZAorZ3d5bmVkZDovdS9sbnojIGNhdCAvcHJvYy9yZC9jMC91c2VyX2NvbW1hbmQKK01ha2UgU3RhbmRieSBvZiBQaHlzaWNhbCBEcml2ZSAxOjIgU3VjY2VlZGVkCisKK1RoZSBlY2hvIGNvbW1hbmQgaW5zdHJ1Y3RzIHRoZSBjb250cm9sbGVyIHRvIG1ha2UgUGh5c2ljYWwgRHJpdmUgMToyIGludG8gYQorc3RhbmRieSBkcml2ZSwgYW5kIHRoZSBzdGF0dXMgbWVzc2FnZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgb3BlcmF0aW9uIGlzIHRoZW4KK2F2YWlsYWJsZSBmb3IgcmVhZGluZyBmcm9tIC9wcm9jL3JkL2MwL3VzZXJfY29tbWFuZCwgYXMgd2VsbCBhcyBiZWluZyBsb2dnZWQgdG8KK3RoZSBjb25zb2xlIGJ5IHRoZSBkcml2ZXIuICBXaXRoaW4gNjAgc2Vjb25kcyBvZiB0aGlzIGNvbW1hbmQgdGhlIGRyaXZlciBsb2dzOgorCitEQUM5NjAjMDogUGh5c2ljYWwgRHJpdmUgMToyIEVycm9yIExvZzogU2Vuc2UgS2V5ID0gNiwgQVNDID0gMjksIEFTQ1EgPSAwMQorREFDOTYwIzA6IFBoeXNpY2FsIERyaXZlIDE6MiBpcyBub3cgU1RBTkRCWQorREFDOTYwIzA6IE1ha2UgU3RhbmRieSBvZiBQaHlzaWNhbCBEcml2ZSAxOjIgU3VjY2VlZGVkCisKK2FuZCAvcHJvYy9yZC9jMC9jdXJyZW50X3N0YXR1cyBpcyB1cGRhdGVkOgorCitnd3luZWRkOi91L2xueiMgY2F0IC9wcm9jL3JkL2MwL2N1cnJlbnRfc3RhdHVzCisgIC4uLgorICBQaHlzaWNhbCBEZXZpY2VzOgorICAgIDA6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAwOjIgLSBEaXNrOiBPbmxpbmUsIDIyMDE2MDAgYmxvY2tzCisgICAgMDozIC0gRGlzazogT25saW5lLCAyMjAxNjAwIGJsb2NrcworICAgIDE6MSAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgICAxOjIgLSBEaXNrOiBTdGFuZGJ5LCAyMjAxNjAwIGJsb2NrcworICAgIDE6MyAtIERpc2s6IE9ubGluZSwgMjIwMTYwMCBibG9ja3MKKyAgTG9naWNhbCBEcml2ZXM6CisgICAgL2Rldi9yZC9jMGQwOiBSQUlELTUsIE9ubGluZSwgNDM5OTEwNCBibG9ja3MsIFdyaXRlIFRocnUKKyAgICAvZGV2L3JkL2MwZDE6IFJBSUQtNiwgT25saW5lLCAyNzU0NTYwIGJsb2NrcywgV3JpdGUgVGhydQorICBSZWJ1aWxkIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkVBRE1FLmN5Y2xhZGVzWiBiL0RvY3VtZW50YXRpb24vUkVBRE1FLmN5Y2xhZGVzWgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRhNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SRUFETUUuY3ljbGFkZXNaCkBAIC0wLDAgKzEsOCBAQAorCitUaGUgQ3ljbGFkZXMtWiBtdXN0IGhhdmUgZmlybXdhcmUgbG9hZGVkIG9udG8gdGhlIGNhcmQgYmVmb3JlIGl0IHdpbGwKK29wZXJhdGUuICBUaGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIGR1cmluZyBzeXN0ZW0gc3RhcnR1cCwKKworVGhlIGZpcm13YXJlLCBsb2FkZXIgcHJvZ3JhbSBhbmQgdGhlIGxhdGVzdCBkZXZpY2UgZHJpdmVyIGNvZGUgYXJlCithdmFpbGFibGUgZnJvbSBDeWNsYWRlcyBhdAorICAgIGZ0cDovL2Z0cC5jeWNsYWRlcy5jb20vcHViL2N5Y2xhZGVzL2N5Y2xhZGVzLXovbGludXgvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU0FLLnR4dCBiL0RvY3VtZW50YXRpb24vU0FLLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTAxOWNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9TQUsudHh0CkBAIC0wLDAgKzEsODggQEAKK0xpbnV4IDIuNC4yIFNlY3VyZSBBdHRlbnRpb24gS2V5IChTQUspIGhhbmRsaW5nCisxOCBNYXJjaCAyMDAxLCBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPgorCitBbiBvcGVyYXRpbmcgc3lzdGVtJ3MgU2VjdXJlIEF0dGVudGlvbiBLZXkgaXMgYSBzZWN1cml0eSB0b29sIHdoaWNoIGlzCitwcm92aWRlZCBhcyBwcm90ZWN0aW9uIGFnYWluc3QgdHJvamFuIHBhc3N3b3JkIGNhcHR1cmluZyBwcm9ncmFtcy4gIEl0CitpcyBhbiB1bmRlZmVhdGFibGUgd2F5IG9mIGtpbGxpbmcgYWxsIHByb2dyYW1zIHdoaWNoIGNvdWxkIGJlCittYXNxdWVyYWRpbmcgYXMgbG9naW4gYXBwbGljYXRpb25zLiAgVXNlcnMgbmVlZCB0byBiZSB0YXVnaHQgdG8gZW50ZXIKK3RoaXMga2V5IHNlcXVlbmNlIGJlZm9yZSB0aGV5IGxvZyBpbiB0byB0aGUgc3lzdGVtLgorCitGcm9tIHRoZSBQQyBrZXlib2FyZCwgTGludXggaGFzIHR3byBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgd2F5cyBvZgorcHJvdmlkaW5nIFNBSy4gIE9uZSBpcyB0aGUgQUxULVNZU1JRLUsgc2VxdWVuY2UuICBZb3Ugc2hvdWxkbid0IHVzZQordGhpcyBzZXF1ZW5jZS4gIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGgKK3N5c3JxIHN1cHBvcnQuCisKK1RoZSBwcm9wZXIgd2F5IG9mIGdlbmVyYXRpbmcgYSBTQUsgaXMgdG8gZGVmaW5lIHRoZSBrZXkgc2VxdWVuY2UgdXNpbmcKK2Bsb2Fka2V5cycuICBUaGlzIHdpbGwgd29yayB3aGV0aGVyIG9yIG5vdCBzeXNycSBzdXBwb3J0IGlzIGNvbXBpbGVkCitpbnRvIHRoZSBrZXJuZWwuCisKK1NBSyB3b3JrcyBjb3JyZWN0bHkgd2hlbiB0aGUga2V5Ym9hcmQgaXMgaW4gcmF3IG1vZGUuICBUaGlzIG1lYW5zIHRoYXQKK29uY2UgZGVmaW5lZCwgU0FLIHdpbGwga2lsbCBhIHJ1bm5pbmcgWCBzZXJ2ZXIuICBJZiB0aGUgc3lzdGVtIGlzIGluCitydW4gbGV2ZWwgNSwgdGhlIFggc2VydmVyIHdpbGwgcmVzdGFydC4gIFRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0bworaGFwcGVuLgorCitXaGF0IGtleSBzZXF1ZW5jZSBzaG91bGQgeW91IHVzZT8gV2VsbCwgQ1RSTC1BTFQtREVMIGlzIHVzZWQgdG8gcmVib290Cit0aGUgbWFjaGluZS4gIENUUkwtQUxULUJBQ0tTUEFDRSBpcyBtYWdpY2FsIHRvIHRoZSBYIHNlcnZlci4gIFdlJ2xsCitjaG9vc2UgQ1RSTC1BTFQtUEFVU0UuCisKK0luIHlvdXIgcmMuc3lzaW5pdCAob3IgcmMubG9jYWwpIGZpbGUsIGFkZCB0aGUgY29tbWFuZAorCisJZWNobyAiY29udHJvbCBhbHQga2V5Y29kZSAxMDEgPSBTQUsiIHwgL2Jpbi9sb2Fka2V5cworCitBbmQgdGhhdCdzIGl0ISAgT25seSB0aGUgc3VwZXJ1c2VyIG1heSByZXByb2dyYW0gdGhlIFNBSyBrZXkuCisKKworTk9URVMKKz09PT09CisKKzE6IExpbnV4IFNBSyBpcyBzYWlkIHRvIGJlIG5vdCBhICJ0cnVlIFNBSyIgYXMgaXMgcmVxdWlyZWQgYnkKKyAgIHN5c3RlbXMgd2hpY2ggaW1wbGVtZW50IEMyIGxldmVsIHNlY3VyaXR5LiAgVGhpcyBhdXRob3IgZG9lcyBub3QKKyAgIGtub3cgd2h5LgorCisKKzI6IE9uIHRoZSBQQyBrZXlib2FyZCwgU0FLIGtpbGxzIGFsbCBhcHBsaWNhdGlvbnMgd2hpY2ggaGF2ZQorICAgL2Rldi9jb25zb2xlIG9wZW5lZC4KKworICAgVW5mb3J0dW5hdGVseSB0aGlzIGluY2x1ZGVzIGEgbnVtYmVyIG9mIHRoaW5ncyB3aGljaCB5b3UgZG9uJ3QKKyAgIGFjdHVhbGx5IHdhbnQga2lsbGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXNlIGFwcGxpY2F0aW9ucyBhcmUKKyAgIGluY29ycmVjdGx5IGhvbGRpbmcgL2Rldi9jb25zb2xlIG9wZW4uICBCZSBzdXJlIHRvIGNvbXBsYWluIHRvIHlvdXIKKyAgIExpbnV4IGRpc3RyaWJ1dG9yIGFib3V0IHRoaXMhCisKKyAgIFlvdSBjYW4gaWRlbnRpZnkgcHJvY2Vzc2VzIHdoaWNoIHdpbGwgYmUga2lsbGVkIGJ5IFNBSyB3aXRoIHRoZQorICAgY29tbWFuZAorCisJIyBscyAtbCAvcHJvYy9bMC05XSovZmQvKiB8IGdyZXAgY29uc29sZQorCWwtd3gtLS0tLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICA2NCBNYXIgMTggMDA6NDYgL3Byb2MvNTc5L2ZkLzAgLT4gL2Rldi9jb25zb2xlCisKKyAgIFRoZW46CisKKwkjIHBzIGF1eHxncmVwIDU3OQorCXJvb3QgICAgICAgNTc5ICAwLjAgIDAuMSAgMTA4OCAgNDM2ID8gICAgICAgIFMgICAgMDA6NDMgICAwOjAwIGdwbSAtdCBwcy8yCisKKyAgIFNvIGBncG0nIHdpbGwgYmUga2lsbGVkIGJ5IFNBSy4gIFRoaXMgaXMgYSBidWcgaW4gZ3BtLiAgSXQgc2hvdWxkCisgICBiZSBjbG9zaW5nIHN0YW5kYXJkIGlucHV0LiAgWW91IGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ5IGZpbmRpbmcgdGhlCisgICBpbml0c2NyaXB0IHdoaWNoIGxhdW5jaGVzIGdwbSBhbmQgY2hhbmdpbmcgaXQgdGh1c2x5OgorCisgICBPbGQ6CisKKwlkYWVtb24gZ3BtCisKKyAgIE5ldzoKKworCWRhZW1vbiBncG0gPCAvZGV2L251bGwKKworICAgVml4aWUgY3JvbiBhbHNvIHNlZW1zIHRvIGhhdmUgdGhpcyBwcm9ibGVtLCBhbmQgbmVlZHMgdGhlIHNhbWUgdHJlYXRtZW50LgorCisgICBBbHNvLCBvbmUgcHJvbWluZW50IExpbnV4IGRpc3RyaWJ1dGlvbiBoYXMgdGhlIGZvbGxvd2luZyB0aHJlZQorICAgbGluZXMgaW4gaXRzIHJjLnN5c2luaXQgYW5kIHJjIHNjcmlwdHM6CisKKwlleGVjIDM8JjAKKwlleGVjIDQ+JjEKKwlleGVjIDU+JjIKKworICAgVGhlc2UgY29tbWFuZHMgY2F1c2UgKmFsbCogZGFlbW9ucyB3aGljaCBhcmUgbGF1bmNoZWQgYnkgdGhlCisgICBpbml0c2NyaXB0cyB0byBoYXZlIGZpbGUgZGVzY3JpcHRvcnMgMywgNCBhbmQgNSBhdHRhY2hlZCB0bworICAgL2Rldi9jb25zb2xlLiAgU28gU0FLIGtpbGxzIHRoZW0gYWxsLiAgQSB3b3JrYXJvdW5kIGlzIHRvIHNpbXBseQorICAgZGVsZXRlIHRoZXNlIGxpbmVzLCBidXQgdGhpcyBtYXkgY2F1c2Ugc3lzdGVtIG1hbmFnZW1lbnQKKyAgIGFwcGxpY2F0aW9ucyB0byBtYWxmdW5jdGlvbiAtIHRlc3QgZXZlcnl0aGluZyB3ZWxsLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1NlY3VyaXR5QnVncyBiL0RvY3VtZW50YXRpb24vU2VjdXJpdHlCdWdzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YzNiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1NlY3VyaXR5QnVncwpAQCAtMCwwICsxLDM4IEBACitMaW51eCBrZXJuZWwgZGV2ZWxvcGVycyB0YWtlIHNlY3VyaXR5IHZlcnkgc2VyaW91c2x5LiAgQXMgc3VjaCwgd2UnZAorbGlrZSB0byBrbm93IHdoZW4gYSBzZWN1cml0eSBidWcgaXMgZm91bmQgc28gdGhhdCBpdCBjYW4gYmUgZml4ZWQgYW5kCitkaXNjbG9zZWQgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4gIFBsZWFzZSByZXBvcnQgc2VjdXJpdHkgYnVncyB0byB0aGUKK0xpbnV4IGtlcm5lbCBzZWN1cml0eSB0ZWFtLgorCisxKSBDb250YWN0CisKK1RoZSBMaW51eCBrZXJuZWwgc2VjdXJpdHkgdGVhbSBjYW4gYmUgY29udGFjdGVkIGJ5IGVtYWlsIGF0Cis8c2VjdXJpdHlAa2VybmVsLm9yZz4uICBUaGlzIGlzIGEgcHJpdmF0ZSBsaXN0IG9mIHNlY3VyaXR5IG9mZmljZXJzCit3aG8gd2lsbCBoZWxwIHZlcmlmeSB0aGUgYnVnIHJlcG9ydCBhbmQgZGV2ZWxvcCBhbmQgcmVsZWFzZSBhIGZpeC4KK0l0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHNlY3VyaXR5IHRlYW0gd2lsbCBicmluZyBpbiBleHRyYSBoZWxwIGZyb20KK2FyZWEgbWFpbnRhaW5lcnMgdG8gdW5kZXJzdGFuZCBhbmQgZml4IHRoZSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorCitBcyBpdCBpcyB3aXRoIGFueSBidWcsIHRoZSBtb3JlIGluZm9ybWF0aW9uIHByb3ZpZGVkIHRoZSBlYXNpZXIgaXQKK3dpbGwgYmUgdG8gZGlhZ25vc2UgYW5kIGZpeC4gIFBsZWFzZSByZXZpZXcgdGhlIHByb2NlZHVyZSBvdXRsaW5lZCBpbgorUkVQT1JUSU5HLUJVR1MgaWYgeW91IGFyZSB1bmNsZWFyIGFib3V0IHdoYXQgaW5mb3JtYXRpb24gaXMgaGVscGZ1bC4KK0FueSBleHBsb2l0IGNvZGUgaXMgdmVyeSBoZWxwZnVsIGFuZCB3aWxsIG5vdCBiZSByZWxlYXNlZCB3aXRob3V0Citjb25zZW50IGZyb20gdGhlIHJlcG9ydGVyIHVubGVzcyBpdCBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgcHVibGljLgorCisyKSBEaXNjbG9zdXJlCisKK1RoZSBnb2FsIG9mIHRoZSBMaW51eCBrZXJuZWwgc2VjdXJpdHkgdGVhbSBpcyB0byB3b3JrIHdpdGggdGhlCitidWcgc3VibWl0dGVyIHRvIGJ1ZyByZXNvbHV0aW9uIGFzIHdlbGwgYXMgZGlzY2xvc3VyZS4gIFdlIHByZWZlcgordG8gZnVsbHkgZGlzY2xvc2UgdGhlIGJ1ZyBhcyBzb29uIGFzIHBvc3NpYmxlLiAgSXQgaXMgcmVhc29uYWJsZSB0bworZGVsYXkgZGlzY2xvc3VyZSB3aGVuIHRoZSBidWcgb3IgdGhlIGZpeCBpcyBub3QgeWV0IGZ1bGx5IHVuZGVyc3Rvb2QsCit0aGUgc29sdXRpb24gaXMgbm90IHdlbGwtdGVzdGVkIG9yIGZvciB2ZW5kb3IgY29vcmRpbmF0aW9uLiAgSG93ZXZlciwgd2UKK2V4cGVjdCB0aGVzZSBkZWxheXMgdG8gYmUgc2hvcnQsIG1lYXN1cmFibGUgaW4gZGF5cywgbm90IHdlZWtzIG9yIG1vbnRocy4KK0EgZGlzY2xvc3VyZSBkYXRlIGlzIG5lZ290aWF0ZWQgYnkgdGhlIHNlY3VyaXR5IHRlYW0gd29ya2luZyB3aXRoIHRoZQorYnVnIHN1Ym1pdHRlciBhcyB3ZWxsIGFzIHZlbmRvcnMuICBIb3dldmVyLCB0aGUga2VybmVsIHNlY3VyaXR5IHRlYW0KK2hvbGRzIHRoZSBmaW5hbCBzYXkgd2hlbiBzZXR0aW5nIGEgZGlzY2xvc3VyZSBkYXRlLiAgVGhlIHRpbWVmcmFtZSBmb3IKK2Rpc2Nsb3N1cmUgaXMgZnJvbSBpbW1lZGlhdGUgKGVzcC4gaWYgaXQncyBhbHJlYWR5IHB1YmxpY2FsbHkga25vd24pCit0byBhIGZldyB3ZWVrcy4gIEFzIGEgYmFzaWMgZGVmYXVsdCBwb2xpY3ksIHdlIGV4cGVjdCByZXBvcnQgZGF0ZSB0bworZGlzY2xvc3VyZSBkYXRlIHRvIGJlIG9uIHRoZSBvcmRlciBvZiA3IGRheXMuCisKKzMpIE5vbi1kaXNjbG9zdXJlIGFncmVlbWVudHMKKworVGhlIExpbnV4IGtlcm5lbCBzZWN1cml0eSB0ZWFtIGlzIG5vdCBhIGZvcm1hbCBib2R5IGFuZCB0aGVyZWZvcmUgdW5hYmxlCit0byBlbnRlciBhbnkgbm9uLWRpc2Nsb3N1cmUgYWdyZWVtZW50cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlM2IyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCkBAIC0wLDAgKzEsMTQ1IEBACitTdWJtaXR0aW5nIERyaXZlcnMgRm9yIFRoZSBMaW51eCBLZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGV4cGxhaW4gaG93IHRvIHN1Ym1pdCBkZXZpY2UgZHJpdmVycyB0byB0aGUKK3ZhcmlvdXMga2VybmVsIHRyZWVzLiBOb3RlIHRoYXQgaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHZpZGVvIGNhcmQgZHJpdmVycworeW91IHNob3VsZCBwcm9iYWJseSB0YWxrIHRvIFhGcmVlODYgKGh0dHA6Ly93d3cueGZyZWU4Ni5vcmcvKSBhbmQvb3IgWC5PcmcKKyhodHRwOi8veC5vcmcvKSBpbnN0ZWFkLgorCitBbHNvIHJlYWQgdGhlIERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgZG9jdW1lbnQuCisKKworQWxsb2NhdGluZyBEZXZpY2UgTnVtYmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWpvciBhbmQgbWlub3IgbnVtYmVycyBmb3IgYmxvY2sgYW5kIGNoYXJhY3RlciBkZXZpY2VzIGFyZSBhbGxvY2F0ZWQKK2J5IHRoZSBMaW51eCBhc3NpZ25lZCBuYW1lIGFuZCBudW1iZXIgYXV0aG9yaXR5IChjdXJyZW50bHkgYmV0dGVyCitrbm93biBhcyBIIFBldGVyIEFudmluKS4gVGhlIHNpdGUgaXMgaHR0cDovL3d3dy5sYW5hbmEub3JnLy4gVGhpcworYWxzbyBkZWFscyB3aXRoIGFsbG9jYXRpbmcgbnVtYmVycyBmb3IgZGV2aWNlcyB0aGF0IGFyZSBub3QgZ29pbmcgdG8KK2JlIHN1Ym1pdHRlZCB0byB0aGUgbWFpbnN0cmVhbSBrZXJuZWwuCisKK0lmIHlvdSBkb24ndCB1c2UgYXNzaWduZWQgbnVtYmVycyB0aGVuIHdoZW4geW91IGRldmljZSBpcyBzdWJtaXR0ZWQgaXQgd2lsbAorZ2V0IGdpdmVuIGFuIGFzc2lnbmVkIG51bWJlciBldmVuIGlmIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdmFsdWVzIHlvdSBtYXkKK2hhdmUgc2hpcHBlZCB0byBjdXN0b21lcnMgYmVmb3JlLgorCitXaG8gVG8gU3VibWl0IERyaXZlcnMgVG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW51eCAyLjA6CisJTm8gbmV3IGRyaXZlcnMgYXJlIGFjY2VwdGVkIGZvciB0aGlzIGtlcm5lbCB0cmVlCisKK0xpbnV4IDIuMjoKKwlJZiB0aGUgY29kZSBhcmVhIGhhcyBhIGdlbmVyYWwgbWFpbnRhaW5lciB0aGVuIHBsZWFzZSBzdWJtaXQgaXQgdG8KKwl0aGUgbWFpbnRhaW5lciBsaXN0ZWQgaW4gTUFJTlRBSU5FUlMgaW4gdGhlIGtlcm5lbCBmaWxlLiBJZiB0aGUKKwltYWludGFpbmVyIGRvZXMgbm90IHJlc3BvbmQgb3IgeW91IGNhbm5vdCBmaW5kIHRoZSBhcHByb3ByaWF0ZQorCW1haW50YWluZXIgdGhlbiBwbGVhc2UgY29udGFjdCBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorCitMaW51eCAyLjQ6CisJVGhlIHNhbWUgcnVsZXMgYXBwbHkgYXMgMi4yLiBUaGUgZmluYWwgY29udGFjdCBwb2ludCBmb3IgTGludXggMi40CisJc3VibWlzc2lvbnMgaXMgTWFyY2VsbyBUb3NhdHRpIDxtYXJjZWxvLnRvc2F0dGlAY3ljbGFkZXMuY29tPi4KKworTGludXggMi42OgorCVRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIDIuNCBleGNlcHQgdGhhdCB5b3Ugc2hvdWxkIGZvbGxvdyBsaW51eC1rZXJuZWwKKwl0byB0cmFjayBjaGFuZ2VzIGluIEFQSSdzLiBUaGUgZmluYWwgY29udGFjdCBwb2ludCBmb3IgTGludXggMi42CisJc3VibWlzc2lvbnMgaXMgQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4uCisKK1doYXQgQ3JpdGVyaWEgRGV0ZXJtaW5lIEFjY2VwdGFuY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGljZW5zaW5nOglUaGUgY29kZSBtdXN0IGJlIHJlbGVhc2VkIHRvIHVzIHVuZGVyIHRoZQorCQlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gV2UgZG9uJ3QgaW5zaXN0IG9uIGFueSBraW5kCisJCW9mIGV4Y2x1c2l2ZWx5IEdQTCBsaWNlbnNpbmcsIGFuZCBpZiB5b3Ugd2lzaCB0aGUgZHJpdmVyCisJCXRvIGJlIHVzZWZ1bCB0byBvdGhlciBjb21tdW5pdGllcyBzdWNoIGFzIEJTRCB5b3UgbWF5IHdlbGwKKwkJd2lzaCB0byByZWxlYXNlIHVuZGVyIG11bHRpcGxlIGxpY2Vuc2VzLgorCitDb3B5cmlnaHQ6CVRoZSBjb3B5cmlnaHQgb3duZXIgbXVzdCBhZ3JlZSB0byB1c2Ugb2YgR1BMLgorCQlJdCdzIGJlc3QgaWYgdGhlIHN1Ym1pdHRlciBhbmQgY29weXJpZ2h0IG93bmVyCisJCWFyZSB0aGUgc2FtZSBwZXJzb24vZW50aXR5LiBJZiBub3QsIHRoZSBuYW1lIG9mCisJCXRoZSBwZXJzb24vZW50aXR5IGF1dGhvcml6aW5nIHVzZSBvZiBHUEwgc2hvdWxkIGJlCisJCWxpc3RlZCBpbiBjYXNlIGl0J3MgbmVjZXNzYXJ5IHRvIHZlcmlmeSB0aGUgd2lsbCBvZgorCQl0aGUgY29wcmlnaHQgb3duZXIuCisKK0ludGVyZmFjZXM6CUlmIHlvdXIgZHJpdmVyIHVzZXMgZXhpc3RpbmcgaW50ZXJmYWNlcyBhbmQgYmVoYXZlcyBsaWtlCisJCW90aGVyIGRyaXZlcnMgaW4gdGhlIHNhbWUgY2xhc3MgaXQgd2lsbCBiZSBtdWNoIG1vcmUgbGlrZWx5CisJCXRvIGJlIGFjY2VwdGVkIHRoYW4gaWYgaXQgaW52ZW50cyBncmF0dWl0b3VzIG5ldyBvbmVzLiAKKwkJSWYgeW91IG5lZWQgdG8gaW1wbGVtZW50IGEgY29tbW9uIEFQSSBvdmVyIExpbnV4IGFuZCBOVAorCQlkcml2ZXJzIGRvIGl0IGluIHVzZXJzcGFjZS4KKworQ29kZToJCVBsZWFzZSB1c2UgdGhlIExpbnV4IHN0eWxlIG9mIGNvZGUgZm9ybWF0dGluZyBhcyBkb2N1bWVudGVkCisJCWluIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUuIElmIHlvdSBoYXZlIHNlY3Rpb25zIG9mIGNvZGUKKwkJdGhhdCBuZWVkIHRvIGJlIGluIG90aGVyIGZvcm1hdHMsIGZvciBleGFtcGxlIGJlY2F1c2UgdGhleQorCQlhcmUgc2hhcmVkIHdpdGggYSB3aW5kb3dzIGRyaXZlciBraXQgYW5kIHlvdSB3YW50IHRvCisJCW1haW50YWluIHRoZW0ganVzdCBvbmNlIHNlcGFyYXRlIHRoZW0gb3V0IG5pY2VseSBhbmQgbm90ZQorCQl0aGlzIGZhY3QuCisKK1BvcnRhYmlsaXR5OglQb2ludGVycyBhcmUgbm90IGFsd2F5cyAzMmJpdHMsIG5vdCBhbGwgY29tcHV0ZXJzIGFyZSBsaXR0bGUKKwkJZW5kaWFuLCBwZW9wbGUgZG8gbm90IGFsbCBoYXZlIGZsb2F0aW5nIHBvaW50IGFuZCB5b3UKKwkJc2hvdWxkbid0IHVzZSBpbmxpbmUgeDg2IGFzc2VtYmxlciBpbiB5b3VyIGRyaXZlciB3aXRob3V0CisJCWNhcmVmdWwgdGhvdWdodC4gUHVyZSB4ODYgZHJpdmVycyBnZW5lcmFsbHkgYXJlIG5vdCBwb3B1bGFyLgorCQlJZiB5b3Ugb25seSBoYXZlIHg4NiBoYXJkd2FyZSBpdCBpcyBoYXJkIHRvIHRlc3QgcG9ydGFiaWxpdHkKKwkJYnV0IGl0IGlzIGVhc3kgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGNhbiBlYXNpbHkgYmUgbWFkZQorCQlwb3J0YWJsZS4KKworQ2xhcml0eToJSXQgaGVscHMgaWYgYW55b25lIGNhbiBzZWUgaG93IHRvIGZpeCB0aGUgZHJpdmVyLiBJdCBoZWxwcworCQl5b3UgYmVjYXVzZSB5b3UgZ2V0IHBhdGNoZXMgbm90IGJ1ZyByZXBvcnRzLiBJZiB5b3Ugc3VibWl0IGEKKwkJZHJpdmVyIHRoYXQgaW50ZW50aW9uYWxseSBvYmZ1c2NhdGVzIGhvdyB0aGUgaGFyZHdhcmUgd29ya3MKKwkJaXQgd2lsbCBnbyBpbiB0aGUgYml0YnVja2V0LgorCitDb250cm9sOglJbiBnZW5lcmFsIGlmIHRoZXJlIGlzIGFjdGl2ZSBtYWludGFpbmFuY2Ugb2YgYSBkcml2ZXIgYnkKKwkJdGhlIGF1dGhvciB0aGVuIHBhdGNoZXMgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZW0gdW5sZXNzIAorCQl0aGV5IGFyZSB0b3RhbGx5IG9idmlvdXMgYW5kIHdpdGhvdXQgbmVlZCBvZiBjaGVja2luZy4KKwkJSWYgeW91IHdhbnQgdG8gYmUgdGhlIGNvbnRhY3QgYW5kIHVwZGF0ZSBwb2ludCBmb3IgdGhlCisJCWRyaXZlciBpdCBpcyBhIGdvb2QgaWRlYSB0byBzdGF0ZSB0aGlzIGluIHRoZSBjb21tZW50cywKKwkJYW5kIGluY2x1ZGUgYW4gZW50cnkgaW4gTUFJTlRBSU5FUlMgZm9yIHlvdXIgZHJpdmVyLgorCitXaGF0IENyaXRlcmlhIERvIE5vdCBEZXRlcm1pbmUgQWNjZXB0YW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmVuZG9yOgkJQmVpbmcgdGhlIGhhcmR3YXJlIHZlbmRvciBhbmQgbWFpbnRhaW5pbmcgdGhlIGRyaXZlciBpcworCQlvZnRlbiBhIGdvb2QgdGhpbmcuIElmIHRoZXJlIGlzIGEgc3RhYmxlIHdvcmtpbmcgZHJpdmVyIGZyb20KKwkJb3RoZXIgcGVvcGxlIGFscmVhZHkgaW4gdGhlIHRyZWUgZG9uJ3QgZXhwZWN0ICd3ZSBhcmUgdGhlCisJCXZlbmRvcicgdG8gZ2V0IHlvdXIgZHJpdmVyIGNob3Nlbi4gSWRlYWxseSB3b3JrIHdpdGggdGhlIAorCQlleGlzdGluZyBkcml2ZXIgYXV0aG9yIHRvIGJ1aWxkIGEgc2luZ2xlIHBlcmZlY3QgZHJpdmVyLgorCitBdXRob3I6CQlJdCBkb2Vzbid0IG1hdHRlciBpZiBhIGxhcmdlIExpbnV4IGNvbXBhbnkgd3JvdGUgdGhlIGRyaXZlciwKKwkJb3IgeW91IGRpZC4gTm9ib2R5IGhhcyBhbnkgc3BlY2lhbCBhY2Nlc3MgdG8gdGhlIGtlcm5lbAorCQl0cmVlLiBBbnlvbmUgd2hvIHRlbGxzIHlvdSBvdGhlcndpc2UgaXNuJ3QgdGVsbGluZyB0aGUKKwkJd2hvbGUgc3RvcnkuCisKKworUmVzb3VyY2VzCistLS0tLS0tLS0KKworTGludXgga2VybmVsIG1hc3RlciB0cmVlOgorCWZ0cC4/Py5rZXJuZWwub3JnOi9wdWIvbGludXgva2VybmVsLy4uLgorCT8/ID09IHlvdXIgY291bnRyeSBjb2RlLCBzdWNoIGFzICJ1cyIsICJ1ayIsICJmciIsIGV0Yy4KKworTGludXgga2VybmVsIG1haWxpbmcgbGlzdDoJCQorCWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKKwlbbWFpbCBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIHRvIHN1YnNjcmliZV0KKworTGludXggRGV2aWNlIERyaXZlcnMsIFRoaXJkIEVkaXRpb24gKGNvdmVycyAyLjYuMTApOgorCWh0dHA6Ly9sd24ubmV0L0tlcm5lbC9MREQzLyAgKGZyZWUgdmVyc2lvbikKKworS2VybmVsIHRyYWZmaWM6CisJV2Vla2x5IHN1bW1hcnkgb2Yga2VybmVsIGxpc3QgYWN0aXZpdHkgKG11Y2ggZWFzaWVyIHRvIHJlYWQpCisJaHR0cDovL3d3dy5rZXJuZWx0cmFmZmljLm9yZy9rZXJuZWwtdHJhZmZpYy8KKworTFdOLm5ldDoKKwlXZWVrbHkgc3VtbWFyeSBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgYWN0aXZpdHkgLSBodHRwOi8vbHduLm5ldC8KKwkyLjYgQVBJIGNoYW5nZXM6CisJCWh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzIuNi1rZXJuZWwtYXBpLworCVBvcnRpbmcgZHJpdmVycyBmcm9tIHByaW9yIGtlcm5lbHMgdG8gMi42OgorCQlodHRwOi8vbHduLm5ldC9BcnRpY2xlcy9kcml2ZXItcG9ydGluZy8KKworS2VybmVsVHJhcDoKKwlPY2Nhc2lvbmFsIExpbnV4IGtlcm5lbCBhcnRpY2xlcyBhbmQgZGV2ZWxvcGVyIGludGVydmlld3MKKwlodHRwOi8va2VybmVsdHJhcC5vcmcvCisKK0tlcm5lbE5ld2JpZXM6CisJRG9jdW1lbnRhdGlvbiBhbmQgYXNzaXN0YW5jZSBmb3IgbmV3IGtlcm5lbCBwcm9ncmFtbWVycworCWh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy8KKworTGludXggVVNCIHByb2plY3Q6CisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC11c2IvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MzhkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0wLDAgKzEsMzc0IEBACisKKwlIb3cgdG8gR2V0IFlvdXIgQ2hhbmdlIEludG8gdGhlIExpbnV4IEtlcm5lbAorCQlvcgorCUNhcmUgQW5kIE9wZXJhdGlvbiBPZiBZb3VyIExpbnVzIFRvcnZhbGRzCisKKworCitGb3IgYSBwZXJzb24gb3IgY29tcGFueSB3aG8gd2lzaGVzIHRvIHN1Ym1pdCBhIGNoYW5nZSB0byB0aGUgTGludXgKK2tlcm5lbCwgdGhlIHByb2Nlc3MgY2FuIHNvbWV0aW1lcyBiZSBkYXVudGluZyBpZiB5b3UncmUgbm90IGZhbWlsaWFyCit3aXRoICJ0aGUgc3lzdGVtLiIgIFRoaXMgdGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Ygc3VnZ2VzdGlvbnMgd2hpY2gKK2NhbiBncmVhdGx5IGluY3JlYXNlIHRoZSBjaGFuY2VzIG9mIHlvdXIgY2hhbmdlIGJlaW5nIGFjY2VwdGVkLgorCitJZiB5b3UgYXJlIHN1Ym1pdHRpbmcgYSBkcml2ZXIsIGFsc28gcmVhZCBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzLgorCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NFQ1RJT04gMSAtIENSRUFUSU5HIEFORCBTRU5ESU5HIFlPVVIgQ0hBTkdFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworMSkgImRpZmYgLXVwIgorLS0tLS0tLS0tLS0tCisKK1VzZSAiZGlmZiAtdXAiIG9yICJkaWZmIC11cHJOIiB0byBjcmVhdGUgcGF0Y2hlcy4KKworQWxsIGNoYW5nZXMgdG8gdGhlIExpbnV4IGtlcm5lbCBvY2N1ciBpbiB0aGUgZm9ybSBvZiBwYXRjaGVzLCBhcworZ2VuZXJhdGVkIGJ5IGRpZmYoMSkuICBXaGVuIGNyZWF0aW5nIHlvdXIgcGF0Y2gsIG1ha2Ugc3VyZSB0byBjcmVhdGUgaXQKK2luICJ1bmlmaWVkIGRpZmYiIGZvcm1hdCwgYXMgc3VwcGxpZWQgYnkgdGhlICctdScgYXJndW1lbnQgdG8gZGlmZigxKS4KK0Fsc28sIHBsZWFzZSB1c2UgdGhlICctcCcgYXJndW1lbnQgd2hpY2ggc2hvd3Mgd2hpY2ggQyBmdW5jdGlvbiBlYWNoCitjaGFuZ2UgaXMgaW4gLSB0aGF0IG1ha2VzIHRoZSByZXN1bHRhbnQgZGlmZiBhIGxvdCBlYXNpZXIgdG8gcmVhZC4KK1BhdGNoZXMgc2hvdWxkIGJlIGJhc2VkIGluIHRoZSByb290IGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5LAorbm90IGluIGFueSBsb3dlciBzdWJkaXJlY3RvcnkuCisKK1RvIGNyZWF0ZSBhIHBhdGNoIGZvciBhIHNpbmdsZSBmaWxlLCBpdCBpcyBvZnRlbiBzdWZmaWNpZW50IHRvIGRvOgorCisJU1JDVFJFRT0gbGludXgtMi40CisJTVlGSUxFPSAgZHJpdmVycy9uZXQvbXlkcml2ZXIuYworCisJY2QgJFNSQ1RSRUUKKwljcCAkTVlGSUxFICRNWUZJTEUub3JpZworCXZpICRNWUZJTEUJIyBtYWtlIHlvdXIgY2hhbmdlCisJY2QgLi4KKwlkaWZmIC11cCAkU1JDVFJFRS8kTVlGSUxFey5vcmlnLH0gPiAvdG1wL3BhdGNoCisKK1RvIGNyZWF0ZSBhIHBhdGNoIGZvciBtdWx0aXBsZSBmaWxlcywgeW91IHNob3VsZCB1bnBhY2sgYSAidmFuaWxsYSIsCitvciB1bm1vZGlmaWVkIGtlcm5lbCBzb3VyY2UgdHJlZSwgYW5kIGdlbmVyYXRlIGEgZGlmZiBhZ2FpbnN0IHlvdXIKK293biBzb3VyY2UgdHJlZS4gIEZvciBleGFtcGxlOgorCisJTVlTUkM9IC9kZXZlbC9saW51eC0yLjQKKworCXRhciB4dmZ6IGxpbnV4LTIuNC4wLXRlc3QxMS50YXIuZ3oKKwltdiBsaW51eCBsaW51eC12YW5pbGxhCisJd2dldCBodHRwOi8vd3d3Lm1vc2VzLnVrbGludXgubmV0L3BhdGNoZXMvZG9udGRpZmYKKwlkaWZmIC11cHJOIC1YIGRvbnRkaWZmIGxpbnV4LXZhbmlsbGEgJE1ZU1JDID4gL3RtcC9wYXRjaAorCXJtIC1mIGRvbnRkaWZmCisKKyJkb250ZGlmZiIgaXMgYSBsaXN0IG9mIGZpbGVzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBkdXJpbmcKK3RoZSBidWlsZCBwcm9jZXNzLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gYW55IGRpZmYoMSktZ2VuZXJhdGVkCitwYXRjaC4gIGRvbnRkaWZmIGlzIG1haW50YWluZWQgYnkgVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AdmVyaXRhcy5jb20+CisKK01ha2Ugc3VyZSB5b3VyIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgYW55IGV4dHJhIGZpbGVzIHdoaWNoIGRvIG5vdAorYmVsb25nIGluIGEgcGF0Y2ggc3VibWlzc2lvbi4gIE1ha2Ugc3VyZSB0byByZXZpZXcgeW91ciBwYXRjaCAtYWZ0ZXItCitnZW5lcmF0ZWQgaXQgd2l0aCBkaWZmKDEpLCB0byBlbnN1cmUgYWNjdXJhY3kuCisKK0lmIHlvdXIgY2hhbmdlcyBwcm9kdWNlIGEgbG90IG9mIGRlbHRhcywgeW91IG1heSB3YW50IHRvIGxvb2sgaW50bworc3BsaXR0aW5nIHRoZW0gaW50byBpbmRpdmlkdWFsIHBhdGNoZXMgd2hpY2ggbW9kaWZ5IHRoaW5ncyBpbgorbG9naWNhbCBzdGFnZXMsIHRoaXMgd2lsbCBmYWNpbGl0YXRlIGVhc2llciByZXZpZXdpbmcgYnkgb3RoZXIKK2tlcm5lbCBkZXZlbG9wZXJzLCB2ZXJ5IGltcG9ydGFudCBpZiB5b3Ugd2FudCB5b3VyIHBhdGNoIGFjY2VwdGVkLgorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHNjcmlwdHMgd2hpY2ggY2FuIGFpZCBpbiB0aGlzOworCitRdWlsdDoKK2h0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0CisKK1JhbmR5IER1bmxhcCdzIHBhdGNoIHNjcmlwdHM6CitodHRwOi8vZGV2ZWxvcGVyLm9zZGwub3JnL3JkZHVubGFwL3NjcmlwdHMvcGF0Y2hpbmctc2NyaXB0cy50Z3oKKworQW5kcmV3IE1vcnRvbidzIHBhdGNoIHNjcmlwdHM6CitodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9wYXRjaC1zY3JpcHRzLTAuMTYKKworMikgRGVzY3JpYmUgeW91ciBjaGFuZ2VzLgorCitEZXNjcmliZSB0aGUgdGVjaG5pY2FsIGRldGFpbCBvZiB0aGUgY2hhbmdlKHMpIHlvdXIgcGF0Y2ggaW5jbHVkZXMuCisKK0JlIGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlLiAgVGhlIFdPUlNUIGRlc2NyaXB0aW9ucyBwb3NzaWJsZSBpbmNsdWRlCit0aGluZ3MgbGlrZSAidXBkYXRlIGRyaXZlciBYIiwgImJ1ZyBmaXggZm9yIGRyaXZlciBYIiwgb3IgInRoaXMgcGF0Y2gKK2luY2x1ZGVzIHVwZGF0ZXMgZm9yIHN1YnN5c3RlbSBYLiAgUGxlYXNlIGFwcGx5LiIKKworSWYgeW91ciBkZXNjcmlwdGlvbiBzdGFydHMgdG8gZ2V0IGxvbmcsIHRoYXQncyBhIHNpZ24gdGhhdCB5b3UgcHJvYmFibHkKK25lZWQgdG8gc3BsaXQgdXAgeW91ciBwYXRjaC4gIFNlZSAjMywgbmV4dC4KKworCisKKzMpIFNlcGFyYXRlIHlvdXIgY2hhbmdlcy4KKworU2VwYXJhdGUgZWFjaCBsb2dpY2FsIGNoYW5nZSBpbnRvIGl0cyBvd24gcGF0Y2guCisKK0ZvciBleGFtcGxlLCBpZiB5b3VyIGNoYW5nZXMgaW5jbHVkZSBib3RoIGJ1ZyBmaXhlcyBhbmQgcGVyZm9ybWFuY2UKK2VuaGFuY2VtZW50cyBmb3IgYSBzaW5nbGUgZHJpdmVyLCBzZXBhcmF0ZSB0aG9zZSBjaGFuZ2VzIGludG8gdHdvCitvciBtb3JlIHBhdGNoZXMuICBJZiB5b3VyIGNoYW5nZXMgaW5jbHVkZSBhbiBBUEkgdXBkYXRlLCBhbmQgYSBuZXcKK2RyaXZlciB3aGljaCB1c2VzIHRoYXQgbmV3IEFQSSwgc2VwYXJhdGUgdGhvc2UgaW50byB0d28gcGF0Y2hlcy4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSBtYWtlIGEgc2luZ2xlIGNoYW5nZSB0byBudW1lcm91cyBmaWxlcywKK2dyb3VwIHRob3NlIGNoYW5nZXMgaW50byBhIHNpbmdsZSBwYXRjaC4gIFRodXMgYSBzaW5nbGUgbG9naWNhbCBjaGFuZ2UKK2lzIGNvbnRhaW5lZCB3aXRoaW4gYSBzaW5nbGUgcGF0Y2guCisKK0lmIG9uZSBwYXRjaCBkZXBlbmRzIG9uIGFub3RoZXIgcGF0Y2ggaW4gb3JkZXIgZm9yIGEgY2hhbmdlIHRvIGJlCitjb21wbGV0ZSwgdGhhdCBpcyBPSy4gIFNpbXBseSBub3RlICJ0aGlzIHBhdGNoIGRlcGVuZHMgb24gcGF0Y2ggWCIKK2luIHlvdXIgcGF0Y2ggZGVzY3JpcHRpb24uCisKKworNCkgU2VsZWN0IGUtbWFpbCBkZXN0aW5hdGlvbi4KKworTG9vayB0aHJvdWdoIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGFuZCB0aGUgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUKK2lmIHlvdXIgY2hhbmdlIGFwcGxpZXMgdG8gYSBzcGVjaWZpYyBzdWJzeXN0ZW0gb2YgdGhlIGtlcm5lbCwgd2l0aAorYW4gYXNzaWduZWQgbWFpbnRhaW5lci4gIElmIHNvLCBlLW1haWwgdGhhdCBwZXJzb24uCisKK0lmIG5vIG1haW50YWluZXIgaXMgbGlzdGVkLCBvciB0aGUgbWFpbnRhaW5lciBkb2VzIG5vdCByZXNwb25kLCBzZW5kCit5b3VyIHBhdGNoIHRvIHRoZSBwcmltYXJ5IExpbnV4IGtlcm5lbCBkZXZlbG9wZXIncyBtYWlsaW5nIGxpc3QsCitsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnLiAgTW9zdCBrZXJuZWwgZGV2ZWxvcGVycyBtb25pdG9yIHRoaXMKK2UtbWFpbCBsaXN0LCBhbmQgY2FuIGNvbW1lbnQgb24geW91ciBjaGFuZ2VzLgorCitMaW51cyBUb3J2YWxkcyBpcyB0aGUgZmluYWwgYXJiaXRlciBvZiBhbGwgY2hhbmdlcyBhY2NlcHRlZCBpbnRvIHRoZQorTGludXgga2VybmVsLiAgSGlzIGUtbWFpbCBhZGRyZXNzIGlzIDx0b3J2YWxkc0Bvc2RsLm9yZz4uICBIZSBnZXRzCithIGxvdCBvZiBlLW1haWwsIHNvIHR5cGljYWxseSB5b3Ugc2hvdWxkIGRvIHlvdXIgYmVzdCB0byAtYXZvaWQtIHNlbmRpbmcKK2hpbSBlLW1haWwuCisKK1BhdGNoZXMgd2hpY2ggYXJlIGJ1ZyBmaXhlcywgYXJlICJvYnZpb3VzIiBjaGFuZ2VzLCBvciBzaW1pbGFybHkKK3JlcXVpcmUgbGl0dGxlIGRpc2N1c3Npb24gc2hvdWxkIGJlIHNlbnQgb3IgQ0MnZCB0byBMaW51cy4gIFBhdGNoZXMKK3doaWNoIHJlcXVpcmUgZGlzY3Vzc2lvbiBvciBkbyBub3QgaGF2ZSBhIGNsZWFyIGFkdmFudGFnZSBzaG91bGQKK3VzdWFsbHkgYmUgc2VudCBmaXJzdCB0byBsaW51eC1rZXJuZWwuICBPbmx5IGFmdGVyIHRoZSBwYXRjaCBpcworZGlzY3Vzc2VkIHNob3VsZCB0aGUgcGF0Y2ggdGhlbiBiZSBzdWJtaXR0ZWQgdG8gTGludXMuCisKK0ZvciBzbWFsbCBwYXRjaGVzIHlvdSBtYXkgd2FudCB0byBDQyB0aGUgVHJpdmlhbCBQYXRjaCBNb25rZXkKK3RyaXZpYWxAcnVzdGNvcnAuY29tLmF1IHNldCB1cCBieSBSdXN0eSBSdXNzZWxsOyB3aGljaCBjb2xsZWN0cyAidHJpdmlhbCIKK3BhdGNoZXMuIFRyaXZpYWwgcGF0Y2hlcyBtdXN0IHF1YWxpZnkgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJ1bGVzOgorIFNwZWxsaW5nIGZpeGVzIGluIGRvY3VtZW50YXRpb24KKyBTcGVsbGluZyBmaXhlcyB3aGljaCBjb3VsZCBicmVhayBncmVwKDEpLgorIFdhcm5pbmcgZml4ZXMgKGNsdXR0ZXJpbmcgd2l0aCB1c2VsZXNzIHdhcm5pbmdzIGlzIGJhZCkKKyBDb21waWxhdGlvbiBmaXhlcyAob25seSBpZiB0aGV5IGFyZSBhY3R1YWxseSBjb3JyZWN0KQorIFJ1bnRpbWUgZml4ZXMgKG9ubHkgaWYgdGhleSBhY3R1YWxseSBmaXggdGhpbmdzKQorIFJlbW92aW5nIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucy9tYWNyb3MgKGVnLiBjaGVja19yZWdpb24pLgorIENvbnRhY3QgZGV0YWlsIGFuZCBkb2N1bWVudGF0aW9uIGZpeGVzCisgTm9uLXBvcnRhYmxlIGNvZGUgcmVwbGFjZWQgYnkgcG9ydGFibGUgY29kZSAoZXZlbiBpbiBhcmNoLXNwZWNpZmljLAorIHNpbmNlIHBlb3BsZSBjb3B5LCBhcyBsb25nIGFzIGl0J3MgdHJpdmlhbCkKKyBBbnkgZml4IGJ5IHRoZSBhdXRob3IvbWFpbnRhaW5lciBvZiB0aGUgZmlsZS4gKGllLiBwYXRjaCBtb25rZXkKKyBpbiByZS10cmFuc21pc3Npb24gbW9kZSkKKworCisKKzUpIFNlbGVjdCB5b3VyIENDIChlLW1haWwgY2FyYm9uIGNvcHkpIGxpc3QuCisKK1VubGVzcyB5b3UgaGF2ZSBhIHJlYXNvbiBOT1QgdG8gZG8gc28sIENDIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcuCisKK090aGVyIGtlcm5lbCBkZXZlbG9wZXJzIGJlc2lkZXMgTGludXMgbmVlZCB0byBiZSBhd2FyZSBvZiB5b3VyIGNoYW5nZSwKK3NvIHRoYXQgdGhleSBtYXkgY29tbWVudCBvbiBpdCBhbmQgb2ZmZXIgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLgorbGludXgta2VybmVsIGlzIHRoZSBwcmltYXJ5IExpbnV4IGtlcm5lbCBkZXZlbG9wZXIgbWFpbGluZyBsaXN0LgorT3RoZXIgbWFpbGluZyBsaXN0cyBhcmUgYXZhaWxhYmxlIGZvciBzcGVjaWZpYyBzdWJzeXN0ZW1zLCBzdWNoIGFzCitVU0IsIGZyYW1lYnVmZmVyIGRldmljZXMsIHRoZSBWRlMsIHRoZSBTQ1NJIHN1YnN5c3RlbSwgZXRjLiAgU2VlIHRoZQorTUFJTlRBSU5FUlMgZmlsZSBmb3IgYSBtYWlsaW5nIGxpc3QgdGhhdCByZWxhdGVzIHNwZWNpZmljYWxseSB0bworeW91ciBjaGFuZ2UuCisKK0V2ZW4gaWYgdGhlIG1haW50YWluZXIgZGlkIG5vdCByZXNwb25kIGluIHN0ZXAgIzQsIG1ha2Ugc3VyZSB0byBBTFdBWVMKK2NvcHkgdGhlIG1haW50YWluZXIgd2hlbiB5b3UgY2hhbmdlIHRoZWlyIGNvZGUuCisKK0ZvciBzbWFsbCBwYXRjaGVzIHlvdSBtYXkgd2FudCB0byBDQyB0aGUgVHJpdmlhbCBQYXRjaCBNb25rZXkKK3RyaXZpYWxAcnVzdGNvcnAuY29tLmF1IHNldCB1cCBieSBSdXN0eSBSdXNzZWxsOyB3aGljaCBjb2xsZWN0cyAidHJpdmlhbCIKK3BhdGNoZXMuIFRyaXZpYWwgcGF0Y2hlcyBtdXN0IHF1YWxpZnkgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJ1bGVzOgorIFNwZWxsaW5nIGZpeGVzIGluIGRvY3VtZW50YXRpb24KKyBTcGVsbGluZyBmaXhlcyB3aGljaCBjb3VsZCBicmVhayBncmVwKDEpLgorIFdhcm5pbmcgZml4ZXMgKGNsdXR0ZXJpbmcgd2l0aCB1c2VsZXNzIHdhcm5pbmdzIGlzIGJhZCkKKyBDb21waWxhdGlvbiBmaXhlcyAob25seSBpZiB0aGV5IGFyZSBhY3R1YWxseSBjb3JyZWN0KQorIFJ1bnRpbWUgZml4ZXMgKG9ubHkgaWYgdGhleSBhY3R1YWxseSBmaXggdGhpbmdzKQorIFJlbW92aW5nIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucy9tYWNyb3MgKGVnLiBjaGVja19yZWdpb24pLgorIENvbnRhY3QgZGV0YWlsIGFuZCBkb2N1bWVudGF0aW9uIGZpeGVzCisgTm9uLXBvcnRhYmxlIGNvZGUgcmVwbGFjZWQgYnkgcG9ydGFibGUgY29kZSAoZXZlbiBpbiBhcmNoLXNwZWNpZmljLAorIHNpbmNlIHBlb3BsZSBjb3B5LCBhcyBsb25nIGFzIGl0J3MgdHJpdmlhbCkKKyBBbnkgZml4IGJ5IHRoZSBhdXRob3IvbWFpbnRhaW5lciBvZiB0aGUgZmlsZS4gKGllLiBwYXRjaCBtb25rZXkKKyBpbiByZS10cmFuc21pc3Npb24gbW9kZSkKKworCisKKzYpIE5vIE1JTUUsIG5vIGxpbmtzLCBubyBjb21wcmVzc2lvbiwgbm8gYXR0YWNobWVudHMuICBKdXN0IHBsYWluIHRleHQuCisKK0xpbnVzIGFuZCBvdGhlciBrZXJuZWwgZGV2ZWxvcGVycyBuZWVkIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQgY29tbWVudAorb24gdGhlIGNoYW5nZXMgeW91IGFyZSBzdWJtaXR0aW5nLiAgSXQgaXMgaW1wb3J0YW50IGZvciBhIGtlcm5lbAorZGV2ZWxvcGVyIHRvIGJlIGFibGUgdG8gInF1b3RlIiB5b3VyIGNoYW5nZXMsIHVzaW5nIHN0YW5kYXJkIGUtbWFpbAordG9vbHMsIHNvIHRoYXQgdGhleSBtYXkgY29tbWVudCBvbiBzcGVjaWZpYyBwb3J0aW9ucyBvZiB5b3VyIGNvZGUuCisKK0ZvciB0aGlzIHJlYXNvbiwgYWxsIHBhdGNoZXMgc2hvdWxkIGJlIHN1Ym1pdHRpbmcgZS1tYWlsICJpbmxpbmUiLgorV0FSTklORzogIEJlIHdhcnkgb2YgeW91ciBlZGl0b3IncyB3b3JkLXdyYXAgY29ycnVwdGluZyB5b3VyIHBhdGNoLAoraWYgeW91IGNob29zZSB0byBjdXQtbi1wYXN0ZSB5b3VyIHBhdGNoLgorCitEbyBub3QgYXR0YWNoIHRoZSBwYXRjaCBhcyBhIE1JTUUgYXR0YWNobWVudCwgY29tcHJlc3NlZCBvciBub3QuCitNYW55IHBvcHVsYXIgZS1tYWlsIGFwcGxpY2F0aW9ucyB3aWxsIG5vdCBhbHdheXMgdHJhbnNtaXQgYSBNSU1FCithdHRhY2htZW50IGFzIHBsYWluIHRleHQsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgb24geW91cgorY29kZS4gIEEgTUlNRSBhdHRhY2htZW50IGFsc28gdGFrZXMgTGludXMgYSBiaXQgbW9yZSB0aW1lIHRvIHByb2Nlc3MsCitkZWNyZWFzaW5nIHRoZSBsaWtlbGlob29kIG9mIHlvdXIgTUlNRS1hdHRhY2hlZCBjaGFuZ2UgYmVpbmcgYWNjZXB0ZWQuCisKK0V4Y2VwdGlvbjogIElmIHlvdXIgbWFpbGVyIGlzIG1hbmdsaW5nIHBhdGNoZXMgdGhlbiBzb21lb25lIG1heSBhc2sKK3lvdSB0byByZS1zZW5kIHRoZW0gdXNpbmcgTUlNRS4KKworCisKKzcpIEUtbWFpbCBzaXplLgorCitXaGVuIHNlbmRpbmcgcGF0Y2hlcyB0byBMaW51cywgYWx3YXlzIGZvbGxvdyBzdGVwICM2LgorCitMYXJnZSBjaGFuZ2VzIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIG1haWxpbmcgbGlzdHMsIGFuZCBzb21lCittYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyA0MCBrQiBpbiBzaXplLAoraXQgaXMgcHJlZmVycmVkIHRoYXQgeW91IHN0b3JlIHlvdXIgcGF0Y2ggb24gYW4gSW50ZXJuZXQtYWNjZXNzaWJsZQorc2VydmVyLCBhbmQgcHJvdmlkZSBpbnN0ZWFkIGEgVVJMIChsaW5rKSBwb2ludGluZyB0byB5b3VyIHBhdGNoLgorCisKKworOCkgTmFtZSB5b3VyIGtlcm5lbCB2ZXJzaW9uLgorCitJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSwgZWl0aGVyIGluIHRoZSBzdWJqZWN0IGxpbmUgb3IgaW4gdGhlIHBhdGNoCitkZXNjcmlwdGlvbiwgdGhlIGtlcm5lbCB2ZXJzaW9uIHRvIHdoaWNoIHRoaXMgcGF0Y2ggYXBwbGllcy4KKworSWYgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHkgdG8gdGhlIGxhdGVzdCBrZXJuZWwgdmVyc2lvbiwKK0xpbnVzIHdpbGwgbm90IGFwcGx5IGl0LgorCisKKworOSkgRG9uJ3QgZ2V0IGRpc2NvdXJhZ2VkLiAgUmUtc3VibWl0LgorCitBZnRlciB5b3UgaGF2ZSBzdWJtaXR0ZWQgeW91ciBjaGFuZ2UsIGJlIHBhdGllbnQgYW5kIHdhaXQuICBJZiBMaW51cworbGlrZXMgeW91ciBjaGFuZ2UgYW5kIGFwcGxpZXMgaXQsIGl0IHdpbGwgYXBwZWFyIGluIHRoZSBuZXh0IHZlcnNpb24KK29mIHRoZSBrZXJuZWwgdGhhdCBoZSByZWxlYXNlcy4KKworSG93ZXZlciwgaWYgeW91ciBjaGFuZ2UgZG9lc24ndCBhcHBlYXIgaW4gdGhlIG5leHQgdmVyc2lvbiBvZiB0aGUKK2tlcm5lbCwgdGhlcmUgY291bGQgYmUgYW55IG51bWJlciBvZiByZWFzb25zLiAgSXQncyBZT1VSIGpvYiB0bworbmFycm93IGRvd24gdGhvc2UgcmVhc29ucywgY29ycmVjdCB3aGF0IHdhcyB3cm9uZywgYW5kIHN1Ym1pdCB5b3VyCit1cGRhdGVkIGNoYW5nZS4KKworSXQgaXMgcXVpdGUgY29tbW9uIGZvciBMaW51cyB0byAiZHJvcCIgeW91ciBwYXRjaCB3aXRob3V0IGNvbW1lbnQuCitUaGF0J3MgdGhlIG5hdHVyZSBvZiB0aGUgc3lzdGVtLiAgSWYgaGUgZHJvcHMgeW91ciBwYXRjaCwgaXQgY291bGQgYmUKK2R1ZSB0bworKiBZb3VyIHBhdGNoIGRpZCBub3QgYXBwbHkgY2xlYW5seSB0byB0aGUgbGF0ZXN0IGtlcm5lbCB2ZXJzaW9uCisqIFlvdXIgcGF0Y2ggd2FzIG5vdCBzdWZmaWNpZW50bHkgZGlzY3Vzc2VkIG9uIGxpbnV4LWtlcm5lbC4KKyogQSBzdHlsZSBpc3N1ZSAoc2VlIHNlY3Rpb24gMiksCisqIEFuIGUtbWFpbCBmb3JtYXR0aW5nIGlzc3VlIChyZS1yZWFkIHRoaXMgc2VjdGlvbikKKyogQSB0ZWNobmljYWwgcHJvYmxlbSB3aXRoIHlvdXIgY2hhbmdlCisqIEhlIGdldHMgdG9ucyBvZiBlLW1haWwsIGFuZCB5b3VycyBnb3QgbG9zdCBpbiB0aGUgc2h1ZmZsZQorKiBZb3UgYXJlIGJlaW5nIGFubm95aW5nIChTZWUgRmlndXJlIDEpCisKK1doZW4gaW4gZG91YnQsIHNvbGljaXQgY29tbWVudHMgb24gbGludXgta2VybmVsIG1haWxpbmcgbGlzdC4KKworCisKKzEwKSBJbmNsdWRlIFBBVENIIGluIHRoZSBzdWJqZWN0CisKK0R1ZSB0byBoaWdoIGUtbWFpbCB0cmFmZmljIHRvIExpbnVzLCBhbmQgdG8gbGludXgta2VybmVsLCBpdCBpcyBjb21tb24KK2NvbnZlbnRpb24gdG8gcHJlZml4IHlvdXIgc3ViamVjdCBsaW5lIHdpdGggW1BBVENIXS4gIFRoaXMgbGV0cyBMaW51cworYW5kIG90aGVyIGtlcm5lbCBkZXZlbG9wZXJzIG1vcmUgZWFzaWx5IGRpc3Rpbmd1aXNoIHBhdGNoZXMgZnJvbSBvdGhlcgorZS1tYWlsIGRpc2N1c3Npb25zLgorCisKKworMTEpIFNpZ24geW91ciB3b3JrCisKK1RvIGltcHJvdmUgdHJhY2tpbmcgb2Ygd2hvIGRpZCB3aGF0LCBlc3BlY2lhbGx5IHdpdGggcGF0Y2hlcyB0aGF0IGNhbgorcGVyY29sYXRlIHRvIHRoZWlyIGZpbmFsIHJlc3RpbmcgcGxhY2UgaW4gdGhlIGtlcm5lbCB0aHJvdWdoIHNldmVyYWwKK2xheWVycyBvZiBtYWludGFpbmVycywgd2UndmUgaW50cm9kdWNlZCBhICJzaWduLW9mZiIgcHJvY2VkdXJlIG9uCitwYXRjaGVzIHRoYXQgYXJlIGJlaW5nIGVtYWlsZWQgYXJvdW5kLgorCitUaGUgc2lnbi1vZmYgaXMgYSBzaW1wbGUgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBleHBsYW5hdGlvbiBmb3IgdGhlCitwYXRjaCwgd2hpY2ggY2VydGlmaWVzIHRoYXQgeW91IHdyb3RlIGl0IG9yIG90aGVyd2lzZSBoYXZlIHRoZSByaWdodCB0bworcGFzcyBpdCBvbiBhcyBhIG9wZW4tc291cmNlIHBhdGNoLiAgVGhlIHJ1bGVzIGFyZSBwcmV0dHkgc2ltcGxlOiBpZiB5b3UKK2NhbiBjZXJ0aWZ5IHRoZSBiZWxvdzoKKworICAgICAgICBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4gMS4wCisKKyAgICAgICAgQnkgbWFraW5nIGEgY29udHJpYnV0aW9uIHRvIHRoaXMgcHJvamVjdCwgSSBjZXJ0aWZ5IHRoYXQ6CisKKyAgICAgICAgKGEpIFRoZSBjb250cmlidXRpb24gd2FzIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydCBieSBtZSBhbmQgSQorICAgICAgICAgICAgaGF2ZSB0aGUgcmlnaHQgdG8gc3VibWl0IGl0IHVuZGVyIHRoZSBvcGVuIHNvdXJjZSBsaWNlbnNlCisgICAgICAgICAgICBpbmRpY2F0ZWQgaW4gdGhlIGZpbGU7IG9yCisKKyAgICAgICAgKGIpIFRoZSBjb250cmlidXRpb24gaXMgYmFzZWQgdXBvbiBwcmV2aW91cyB3b3JrIHRoYXQsIHRvIHRoZSBiZXN0CisgICAgICAgICAgICBvZiBteSBrbm93bGVkZ2UsIGlzIGNvdmVyZWQgdW5kZXIgYW4gYXBwcm9wcmlhdGUgb3BlbiBzb3VyY2UKKyAgICAgICAgICAgIGxpY2Vuc2UgYW5kIEkgaGF2ZSB0aGUgcmlnaHQgdW5kZXIgdGhhdCBsaWNlbnNlIHRvIHN1Ym1pdCB0aGF0CisgICAgICAgICAgICB3b3JrIHdpdGggbW9kaWZpY2F0aW9ucywgd2hldGhlciBjcmVhdGVkIGluIHdob2xlIG9yIGluIHBhcnQKKyAgICAgICAgICAgIGJ5IG1lLCB1bmRlciB0aGUgc2FtZSBvcGVuIHNvdXJjZSBsaWNlbnNlICh1bmxlc3MgSSBhbQorICAgICAgICAgICAgcGVybWl0dGVkIHRvIHN1Ym1pdCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlKSwgYXMgaW5kaWNhdGVkCisgICAgICAgICAgICBpbiB0aGUgZmlsZTsgb3IKKworICAgICAgICAoYykgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgcHJvdmlkZWQgZGlyZWN0bHkgdG8gbWUgYnkgc29tZSBvdGhlcgorICAgICAgICAgICAgcGVyc29uIHdobyBjZXJ0aWZpZWQgKGEpLCAoYikgb3IgKGMpIGFuZCBJIGhhdmUgbm90IG1vZGlmaWVkCisgICAgICAgICAgICBpdC4KKwordGhlbiB5b3UganVzdCBhZGQgYSBsaW5lIHNheWluZworCisJU2lnbmVkLW9mZi1ieTogUmFuZG9tIEogRGV2ZWxvcGVyIDxyYW5kb21AZGV2ZWxvcGVyLm9yZz4KKworU29tZSBwZW9wbGUgYWxzbyBwdXQgZXh0cmEgdGFncyBhdCB0aGUgZW5kLiAgVGhleSdsbCBqdXN0IGJlIGlnbm9yZWQgZm9yCitub3csIGJ1dCB5b3UgY2FuIGRvIHRoaXMgdG8gbWFyayBpbnRlcm5hbCBjb21wYW55IHByb2NlZHVyZXMgb3IganVzdAorcG9pbnQgb3V0IHNvbWUgc3BlY2lhbCBkZXRhaWwgYWJvdXQgdGhlIHNpZ24tb2ZmLiAKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU0VDVElPTiAyIC0gSElOVFMsIFRJUFMsIEFORCBUUklDS1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiBsaXN0cyBtYW55IG9mIHRoZSBjb21tb24gInJ1bGVzIiBhc3NvY2lhdGVkIHdpdGggY29kZQorc3VibWl0dGVkIHRvIHRoZSBrZXJuZWwuICBUaGVyZSBhcmUgYWx3YXlzIGV4Y2VwdGlvbnMuLi4gYnV0IHlvdSBtdXN0CitoYXZlIGEgcmVhbGx5IGdvb2QgcmVhc29uIGZvciBkb2luZyBzby4gIFlvdSBjb3VsZCBwcm9iYWJseSBjYWxsIHRoaXMKK3NlY3Rpb24gTGludXMgQ29tcHV0ZXIgU2NpZW5jZSAxMDEuCisKKworCisxKSBSZWFkIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKworTnVmZiBzYWlkLiAgSWYgeW91ciBjb2RlIGRldmlhdGVzIHRvbyBtdWNoIGZyb20gdGhpcywgaXQgaXMgbGlrZWx5Cit0byBiZSByZWplY3RlZCB3aXRob3V0IGZ1cnRoZXIgcmV2aWV3LCBhbmQgd2l0aG91dCBjb21tZW50LgorCisKKworMikgI2lmZGVmcyBhcmUgdWdseQorCitDb2RlIGNsdXR0ZXJlZCB3aXRoIGlmZGVmcyBpcyBkaWZmaWN1bHQgdG8gcmVhZCBhbmQgbWFpbnRhaW4uICBEb24ndCBkbworaXQuICBJbnN0ZWFkLCBwdXQgeW91ciBpZmRlZnMgaW4gYSBoZWFkZXIsIGFuZCBjb25kaXRpb25hbGx5IGRlZmluZQorJ3N0YXRpYyBpbmxpbmUnIGZ1bmN0aW9ucywgb3IgbWFjcm9zLCB3aGljaCBhcmUgdXNlZCBpbiB0aGUgY29kZS4KK0xldCB0aGUgY29tcGlsZXIgb3B0aW1pemUgYXdheSB0aGUgIm5vLW9wIiBjYXNlLgorCitTaW1wbGUgZXhhbXBsZSwgb2YgcG9vciBjb2RlOgorCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYgKHNpemVvZihzdHJ1Y3QgZnVua3lfcHJpdmF0ZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwkjaWZkZWYgQ09ORklHX05FVF9GVU5LSU5FU1MKKwlpbml0X2Z1bmt5X25ldChkZXYpOworCSNlbmRpZgorCitDbGVhbmVkLXVwIGV4YW1wbGU6CisKKyhpbiBoZWFkZXIpCisJI2lmbmRlZiBDT05GSUdfTkVUX0ZVTktJTkVTUworCXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2Z1bmt5X25ldCAoc3RydWN0IG5ldF9kZXZpY2UgKmQpIHt9CisJI2VuZGlmCisKKyhpbiB0aGUgY29kZSBpdHNlbGYpCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYgKHNpemVvZihzdHJ1Y3QgZnVua3lfcHJpdmF0ZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpbml0X2Z1bmt5X25ldChkZXYpOworCisKKworMykgJ3N0YXRpYyBpbmxpbmUnIGlzIGJldHRlciB0aGFuIGEgbWFjcm8KKworU3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGdyZWF0bHkgcHJlZmVycmVkIG92ZXIgbWFjcm9zLgorVGhleSBwcm92aWRlIHR5cGUgc2FmZXR5LCBoYXZlIG5vIGxlbmd0aCBsaW1pdGF0aW9ucywgbm8gZm9ybWF0dGluZworbGltaXRhdGlvbnMsIGFuZCB1bmRlciBnY2MgdGhleSBhcmUgYXMgY2hlYXAgYXMgbWFjcm9zLgorCitNYWNyb3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgYSBzdGF0aWMgaW5saW5lIGlzIGNsZWFybHkKK3N1Ym9wdGltYWwgW3RoZXJlIGEgZmV3LCBpc29sYXRlZCBjYXNlcyBvZiB0aGlzIGluIGZhc3QgcGF0aHNdLAorb3Igd2hlcmUgaXQgaXMgaW1wb3NzaWJsZSB0byB1c2UgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIFtzdWNoIGFzCitzdHJpbmctaXppbmddLgorCisnc3RhdGljIGlubGluZScgaXMgcHJlZmVycmVkIG92ZXIgJ3N0YXRpYyBfX2lubGluZV9fJywgJ2V4dGVybiBpbmxpbmUnLAorYW5kICdleHRlcm4gX19pbmxpbmVfXycuCisKKworCis0KSBEb24ndCBvdmVyLWRlc2lnbi4KKworRG9uJ3QgdHJ5IHRvIGFudGljaXBhdGUgbmVidWxvdXMgZnV0dXJlIGNhc2VzIHdoaWNoIG1heSBvciBtYXkgbm90CitiZSB1c2VmdWw6ICAiTWFrZSBpdCBhcyBzaW1wbGUgYXMgeW91IGNhbiwgYW5kIG5vIHNpbXBsZXIiCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1ZHQS1zb2Z0Y3Vyc29yLnR4dCBiL0RvY3VtZW50YXRpb24vVkdBLXNvZnRjdXJzb3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYWNmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1ZHQS1zb2Z0Y3Vyc29yLnR4dApAQCAtMCwwICsxLDM5IEBACitTb2Z0d2FyZSBjdXJzb3IgZm9yIFZHQSAgICBieSBQYXZlbCBNYWNoZWsgPHBhdmVsQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KKz09PT09PT09PT09PT09PT09PT09PT09ICAgIGFuZCBNYXJ0aW4gTWFyZXMgPG1qQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KKworICAgTGludXggbm93IGhhcyBzb21lIGFiaWxpdHkgdG8gbWFuaXB1bGF0ZSBjdXJzb3IgYXBwZWFyYW5jZS4gTm9ybWFsbHksIHlvdQorY2FuIHNldCB0aGUgc2l6ZSBvZiBoYXJkd2FyZSBjdXJzb3IgKGFuZCBhbHNvIHdvcmsgYXJvdW5kIHNvbWUgdWdseSBidWdzIGluCit0aG9zZSBtaXNlcmFibGUgVHJpZGVudCBjYXJkcy0tc2VlICNkZWZpbmUgVFJJREVOVF9HTElUQ0ggaW4gZHJpdmVycy92aWRlby8KK3ZnYWNvbi5jKS4gWW91IGNhbiBub3cgcGxheSBhIGZldyBuZXcgdHJpY2tzOiAgeW91IGNhbiBtYWtlIHlvdXIgY3Vyc29yIGxvb2sKK2xpa2UgYSBub24tYmxpbmtpbmcgcmVkIGJsb2NrLCBtYWtlIGl0IGludmVyc2UgYmFja2dyb3VuZCBvZiB0aGUgY2hhcmFjdGVyIGl0J3MKK292ZXIgb3IgdG8gaGlnaGxpZ2h0IHRoYXQgY2hhcmFjdGVyIGFuZCBzdGlsbCBjaG9vc2Ugd2hldGhlciB0aGUgb3JpZ2luYWwKK2hhcmR3YXJlIGN1cnNvciBzaG91bGQgcmVtYWluIHZpc2libGUgb3Igbm90LiAgVGhlcmUgbWF5IGJlIG90aGVyIHRoaW5ncyBJIGhhdmUKK25ldmVyIHRob3VnaHQgb2YuCisKKyAgIFRoZSBjdXJzb3IgYXBwZWFyYW5jZSBpcyBjb250cm9sbGVkIGJ5IGEgIjxFU0M+Wz8xOzI7M2MiIGVzY2FwZSBzZXF1ZW5jZQord2hlcmUgMSwgMiBhbmQgMyBhcmUgcGFyYW1ldGVycyBkZXNjcmliZWQgYmVsb3cuIElmIHlvdSBvbWl0IGFueSBvZiB0aGVtLAordGhleSB3aWxsIGRlZmF1bHQgdG8gemVyb2VzLgorCisgICBQYXJhbWV0ZXIgMSBzcGVjaWZpZXMgY3Vyc29yIHNpemUgKDA9ZGVmYXVsdCwgMT1pbnZpc2libGUsIDI9dW5kZXJsaW5lLCAuLi4sCis4PWZ1bGwgYmxvY2spICsgMTYgaWYgeW91IHdhbnQgdGhlIHNvZnR3YXJlIGN1cnNvciB0byBiZSBhcHBsaWVkICsgMzIgaWYgeW91Cit3YW50IHRvIGFsd2F5cyBjaGFuZ2UgdGhlIGJhY2tncm91bmQgY29sb3IgKyA2NCBpZiB5b3UgZGlzbGlrZSBoYXZpbmcgdGhlCitiYWNrZ3JvdW5kIHRoZSBzYW1lIGFzIHRoZSBmb3JlZ3JvdW5kLiAgSGlnaGxpZ2h0cyBhcmUgaWdub3JlZCBmb3IgdGhlIGxhc3QgdHdvCitmbGFncy4KKworICAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgc2VsZWN0cyBjaGFyYWN0ZXIgYXR0cmlidXRlIGJpdHMgeW91IHdhbnQgdG8gY2hhbmdlCisoYnkgc2ltcGx5IFhPUmluZyB0aGVtIHdpdGggdGhlIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyKS4gT24gc3RhbmRhcmQgVkdBLAordGhlIGhpZ2ggZm91ciBiaXRzIHNwZWNpZnkgYmFja2dyb3VuZCBhbmQgdGhlIGxvdyBmb3VyIHRoZSBmb3JlZ3JvdW5kLiBJbiBib3RoCitncm91cHMsIGxvdyB0aHJlZSBiaXRzIHNldCBjb2xvciAoYXMgaW4gbm9ybWFsIGNvbG9yIGNvZGVzIHVzZWQgYnkgdGhlIGNvbnNvbGUpCithbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgb25lIHR1cm5zIG9uIGhpZ2hsaWdodCAob3Igc29tZXRpbWVzIGJsaW5raW5nLS1pdAorZGVwZW5kcyBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB5b3VyIFZHQSkuCisKKyAgIFRoZSB0aGlyZCBwYXJhbWV0ZXIgY29uc2lzdHMgb2YgY2hhcmFjdGVyIGF0dHJpYnV0ZSBiaXRzIHlvdSB3YW50IHRvIHNldC4KK0JpdCBzZXR0aW5nIHRha2VzIHBsYWNlIGJlZm9yZSBiaXQgdG9nZ2xpbmcsIHNvIHlvdSBjYW4gc2ltcGx5IGNsZWFyIGEgYml0IGJ5IAoraW5jbHVkaW5nIGl0IGluIGJvdGggdGhlIHNldCBtYXNrIGFuZCB0aGUgdG9nZ2xlIG1hc2suCisKK0V4YW1wbGVzOgorPT09PT09PT09CisKK1RvIGdldCBub3JtYWwgYmxpbmtpbmcgdW5kZXJsaW5lLCB1c2U6IGVjaG8gLWUgJ1wwMzNbPzJjJworVG8gZ2V0IGJsaW5raW5nIGJsb2NrLCB1c2U6ICAgICAgICAgICAgZWNobyAtZSAnXDAzM1s/NmMnCitUbyBnZXQgcmVkIG5vbi1ibGlua2luZyBibG9jaywgdXNlOiAgICBlY2hvIC1lICdcMDMzWz8xNzswOzY0YycKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL2FvZS50eHQgYi9Eb2N1bWVudGF0aW9uL2FvZS9hb2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTUwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FvZS9hb2UudHh0CkBAIC0wLDAgKzEsOTEgQEAKK1RoZSBFdGhlckRyaXZlIChSKSBIT1dUTyBmb3IgdXNlcnMgb2YgMi42IGtlcm5lbHMgaXMgZm91bmQgYXQgLi4uCisKKyAgaHR0cDovL3d3dy5jb3JhaWQuY29tL3N1cHBvcnQvbGludXgvRXRoZXJEcml2ZS0yLjYtSE9XVE8uaHRtbAorCisgIEl0IGhhcyBtYW55IHRpcHMgYW5kIGhpbnRzIQorCitDUkVBVElORyBERVZJQ0UgTk9ERVMKKworICBVc2VycyBvZiB1ZGV2IHNob3VsZCBmaW5kIHRoZSBibG9jayBkZXZpY2Ugbm9kZXMgY3JlYXRlZAorICBhdXRvbWF0aWNhbGx5LCBidXQgdG8gY3JlYXRlIGFsbCB0aGUgbmVjZXNzYXJ5IGRldmljZSBub2RlcywgdXNlIHRoZQorICB1ZGV2IGNvbmZpZ3VyYXRpb24gcnVsZXMgcHJvdmlkZWQgaW4gdWRldi50eHQgKGluIHRoaXMgZGlyZWN0b3J5KS4KKworICBUaGVyZSBpcyBhIHVkZXYtaW5zdGFsbC5zaCBzY3JpcHQgdGhhdCBzaG93cyBob3cgdG8gaW5zdGFsbCB0aGVzZQorICBydWxlcyBvbiB5b3VyIHN5c3RlbS4KKworICBJZiB5b3UgYXJlIG5vdCB1c2luZyB1ZGV2LCB0d28gc2NyaXB0cyBhcmUgcHJvdmlkZWQgaW4KKyAgRG9jdW1lbnRhdGlvbi9hb2UgYXMgZXhhbXBsZXMgb2Ygc3RhdGljIGRldmljZSBub2RlIGNyZWF0aW9uIGZvcgorICB1c2luZyB0aGUgYW9lIGRyaXZlci4KKworICAgIHJtIC1yZiAvZGV2L2V0aGVyZAorICAgIHNoIERvY3VtZW50YXRpb24vYW9lL21rZGV2cy5zaCAvZGV2L2V0aGVyZAorCisgIC4uLiBvciB0byBtYWtlIGp1c3Qgb25lIHNoZWxmJ3Mgd29ydGggb2YgYmxvY2sgZGV2aWNlIG5vZGVzIC4uLgorCisgICAgc2ggRG9jdW1lbnRhdGlvbi9hb2UvbWtzaGVsZi5zaCAvZGV2L2V0aGVyZCAwCisKKyAgVGhlcmUgaXMgYWxzbyBhbiBhdXRvbG9hZCBzY3JpcHQgdGhhdCBzaG93cyBob3cgdG8gZWRpdAorICAvZXRjL21vZHByb2JlLmNvbmYgdG8gZW5zdXJlIHRoYXQgdGhlIGFvZSBtb2R1bGUgaXMgbG9hZGVkIHdoZW4KKyAgbmVjZXNzYXJ5LgorCitVU0lORyBERVZJQ0UgTk9ERVMKKworICAiY2F0IC9kZXYvZXRoZXJkL2VyciIgYmxvY2tzLCB3YWl0aW5nIGZvciBlcnJvciBkaWFnbm9zdGljIG91dHB1dCwKKyAgbGlrZSBhbnkgcmV0cmFuc21pdHRlZCBwYWNrZXRzLgorCisgICJlY2hvIGV0aDIgZXRoNCA+IC9kZXYvZXRoZXJkL2ludGVyZmFjZXMiIHRlbGxzIHRoZSBhb2UgZHJpdmVyIHRvCisgIGxpbWl0IEFUQSBvdmVyIEV0aGVybmV0IHRyYWZmaWMgdG8gZXRoMiBhbmQgZXRoNC4gIEFvRSB0cmFmZmljIGZyb20KKyAgdW50cnVzdGVkIG5ldHdvcmtzIHNob3VsZCBiZSBpZ25vcmVkIGFzIGEgbWF0dGVyIG9mIHNlY3VyaXR5LgorCisgICJlY2hvID4gL2Rldi9ldGhlcmQvZGlzY292ZXIiIHRlbGxzIHRoZSBkcml2ZXIgdG8gZmluZCBvdXQgd2hhdCBBb0UKKyAgZGV2aWNlcyBhcmUgYXZhaWxhYmxlLgorCisgIFRoZXNlIGNoYXJhY3RlciBkZXZpY2VzIG1heSBkaXNhcHBlYXIgYW5kIGJlIHJlcGxhY2VkIGJ5IHN5c2ZzCisgIGNvdW50ZXJwYXJ0cywgc28gZGlzdHJpYnV0aW9uIG1haW50YWluZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGNyZWF0ZQorICBzY3JpcHRzIHRoYXQgdXNlIHRoZXNlIGRldmljZXMuCisKKyAgVGhlIGJsb2NrIGRldmljZXMgYXJlIG5hbWVkIGxpa2UgdGhpczoKKworCWV7c2hlbGZ9LntzbG90fQorCWV7c2hlbGZ9LntzbG90fXB7cGFydH0KKworICAuLi4gc28gdGhhdCAiZTAuMiIgaXMgdGhlIHRoaXJkIGJsYWRlIGZyb20gdGhlIGxlZnQgKHNsb3QgMikgaW4gdGhlCisgIGZpcnN0IHNoZWxmIChzaGVsZiBhZGRyZXNzIHplcm8pLiAgVGhhdCdzIHRoZSB3aG9sZSBkaXNrLiAgVGhlIGZpcnN0CisgIHBhcnRpdGlvbiBvbiB0aGF0IGRpc2sgd291bGQgYmUgImUwLjJwMSIuCisKK1VTSU5HIFNZU0ZTCisKKyAgRWFjaCBhb2UgYmxvY2sgZGV2aWNlIGluIC9zeXMvYmxvY2sgaGFzIHRoZSBleHRyYSBhdHRyaWJ1dGVzIG9mCisgIHN0YXRlLCBtYWMsIGFuZCBuZXRpZi4gIFRoZSBzdGF0ZSBhdHRyaWJ1dGUgaXMgInVwIiB3aGVuIHRoZSBkZXZpY2UKKyAgaXMgcmVhZHkgZm9yIEkvTyBhbmQgImRvd24iIGlmIGRldGVjdGVkIGJ1dCB1bnVzYWJsZS4gIFRoZQorICAiZG93bixjbG9zZXdhaXQiIHN0YXRlIHNob3dzIHRoYXQgdGhlIGRldmljZSBpcyBzdGlsbCBvcGVuIGFuZAorICBjYW5ub3QgY29tZSB1cCBhZ2FpbiB1bnRpbCBpdCBoYXMgYmVlbiBjbG9zZWQuCisKKyAgVGhlIG1hYyBhdHRyaWJ1dGUgaXMgdGhlIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBBb0UgZGV2aWNlLgorICBUaGUgbmV0aWYgYXR0cmlidXRlIGlzIHRoZSBuZXR3b3JrIGludGVyZmFjZSBvbiB0aGUgbG9jYWxob3N0CisgIHRocm91Z2ggd2hpY2ggd2UgYXJlIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgcmVtb3RlIEFvRSBkZXZpY2UuCisKKyAgVGhlcmUgaXMgYSBzY3JpcHQgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCBmb3JtYXRzIHRoaXMgaW5mb3JtYXRpb24KKyAgaW4gYSBjb252ZW5pZW50IHdheS4KKworICByb290QG1ha2tpIHJvb3QjIHNoIERvY3VtZW50YXRpb24vYW9lL3N0YXR1cy5zaCAKKyAgICAgZTEwLjAgICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICBlMTAuMSAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgIGUxMC4yICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKKyAgICAgZTEwLjMgICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICBlMTAuNCAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgIGUxMC41ICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKKyAgICAgZTEwLjYgICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICBlMTAuNyAgICAgICAgICAgIGV0aDMgICAgICAgICAgICAgIHVwCisgICAgIGUxMC44ICAgICAgICAgICAgZXRoMyAgICAgICAgICAgICAgdXAKKyAgICAgZTEwLjkgICAgICAgICAgICBldGgzICAgICAgICAgICAgICB1cAorICAgICAgZTQuMCAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCisgICAgICBlNC4xICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKKyAgICAgIGU0LjIgICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorICAgICAgZTQuMyAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCisgICAgICBlNC40ICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKKyAgICAgIGU0LjUgICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorICAgICAgZTQuNiAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCisgICAgICBlNC43ICAgICAgICAgICAgZXRoMSAgICAgICAgICAgICAgdXAKKyAgICAgIGU0LjggICAgICAgICAgICBldGgxICAgICAgICAgICAgICB1cAorICAgICAgZTQuOSAgICAgICAgICAgIGV0aDEgICAgICAgICAgICAgIHVwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FvZS9hdXRvbG9hZC5zaCBiL0RvY3VtZW50YXRpb24vYW9lL2F1dG9sb2FkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZGFkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FvZS9hdXRvbG9hZC5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKyMgc2V0IGFvZSB0byBhdXRvbG9hZCBieSBpbnN0YWxsaW5nIHRoZQorIyBhbGlhc2VzIGluIC9ldGMvbW9kcHJvYmUuY29uZgorCitmPS9ldGMvbW9kcHJvYmUuY29uZgorCitpZiB0ZXN0ICEgLXIgJGYgfHwgdGVzdCAhIC13ICRmOyB0aGVuCisJZWNobyAiY2Fubm90IGNvbmZpZ3VyZSAkZiBmb3IgbW9kdWxlIGF1dG9sb2FkaW5nIiAxPiYyCisJZXhpdCAxCitmaQorCitncmVwIG1ham9yLTE1MiAkZiA+L2Rldi9udWxsCitpZiBbICQ/ID0gMSBdOyB0aGVuCisJZWNobyBhbGlhcyBibG9jay1tYWpvci0xNTIgYW9lID4+ICRmCisJZWNobyBhbGlhcyBjaGFyLW1ham9yLTE1MiBhb2UgPj4gJGYKK2ZpCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL21rZGV2cy5zaCBiL0RvY3VtZW50YXRpb24vYW9lL21rZGV2cy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U3MDcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hb2UvbWtkZXZzLnNoCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorCituX3NoZWx2ZXM9JHtuX3NoZWx2ZXM6LTEwfQorbl9wYXJ0aXRpb25zPSR7bl9wYXJ0aXRpb25zOi0xNn0KKworaWYgdGVzdCAiJCMiICE9ICIxIjsgdGhlbgorCWVjaG8gIlVzYWdlOiBzaCBgYmFzZW5hbWUgJDBgIHtkaXJ9IiAxPiYyCisJZXhpdCAxCitmaQorZGlyPSQxCisKK01BSk9SPTE1MgorCitlY2hvICJDcmVhdGluZyBBb0UgZGV2bm9kZSBmaWxlcyBpbiAkZGlyIC4uLiIKKworc2V0IC1lCisKK21rZGlyIC1wICRkaXIKKworIyAoU3RhdHVzIGluZm8gaXMgaW4gc3lzZnMuICBTZWUgc3RhdHVzLnNoLikKKyMgcm0gLWYgJGRpci9zdGF0CisjIG1rbm9kIC1tIDA0MDAgJGRpci9zdGF0IGMgJE1BSk9SIDEKK3JtIC1mICRkaXIvZXJyCitta25vZCAtbSAwNDAwICRkaXIvZXJyIGMgJE1BSk9SIDIKK3JtIC1mICRkaXIvZGlzY292ZXIKK21rbm9kIC1tIDAyMDAgJGRpci9kaXNjb3ZlciBjICRNQUpPUiAzCitybSAtZiAkZGlyL2ludGVyZmFjZXMKK21rbm9kIC1tIDAyMDAgJGRpci9pbnRlcmZhY2VzIGMgJE1BSk9SIDQKKworZXhwb3J0IG5fcGFydGl0aW9ucworbWtzaGVsZj1gZWNobyAkMCB8IHNlZCAncyFta2RldnMhbWtzaGVsZiEnYAoraT0wCit3aGlsZSB0ZXN0ICRpIC1sdCAkbl9zaGVsdmVzOyBkbworCXNoIC14YyAic2ggJG1rc2hlbGYgJGRpciAkaSIKKwlpPWBleHByICRpICsgMWAKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL21rc2hlbGYuc2ggYi9Eb2N1bWVudGF0aW9uL2FvZS9ta3NoZWxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTMyODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FvZS9ta3NoZWxmLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhIC9iaW4vc2gKKworaWYgdGVzdCAiJCMiICE9ICIyIjsgdGhlbgorCWVjaG8gIlVzYWdlOiBzaCBgYmFzZW5hbWUgJDBgIHtkaXJ9IHtzaGVsZmFkZHJlc3N9IiAxPiYyCisJZXhpdCAxCitmaQorbl9wYXJ0aXRpb25zPSR7bl9wYXJ0aXRpb25zOi0xNn0KK2Rpcj0kMQorc2hlbGY9JDIKK01BSk9SPTE1MgorCitzZXQgLWUKKworbWlub3I9YGVjaG8gMTAgXCogJHNoZWxmIFwqICRuX3BhcnRpdGlvbnMgfCBiY2AKK2VuZHA9YGVjaG8gJG5fcGFydGl0aW9ucyAtIDEgfCBiY2AKK2ZvciBzbG90IGluIGBzZXEgMCA5YDsgZG8KKwlmb3IgcGFydCBpbiBgc2VxIDAgJGVuZHBgOyBkbworCQluYW1lPWUkc2hlbGYuJHNsb3QKKwkJdGVzdCAiJHBhcnQiICE9ICIwIiAmJiBuYW1lPSR7bmFtZX1wJHBhcnQKKwkJcm0gLWYgJGRpci8kbmFtZQorCQlta25vZCAtbSAwNjYwICRkaXIvJG5hbWUgYiAkTUFKT1IgJG1pbm9yCisKKwkJbWlub3I9YGV4cHIgJG1pbm9yICsgMWAKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FvZS9zdGF0dXMuc2ggYi9Eb2N1bWVudGF0aW9uL2FvZS9zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyODExNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYW9lL3N0YXR1cy5zaApAQCAtMCwwICsxLDMxIEBACisjISAvYmluL3NoCisjIGNvbGxhdGUgYW5kIHByZXNlbnQgc3lzZnMgaW5mb3JtYXRpb24gYWJvdXQgQW9FIHN0b3JhZ2UKKworc2V0IC1lCitmb3JtYXQ9IiU4c1x0JThzXHQlOHNcbiIKK21lPWBiYXNlbmFtZSAkMGAKK3N5c2Q9JHtzeXNmc19kaXI6LS9zeXN9CisKKyMgcHJpbnRmICIkZm9ybWF0IiBkZXZpY2UgbWFjIG5ldGlmIHN0YXRlCisKKyMgU3VzZSA5LjEgUHJvIGRvZXNuJ3QgcHV0IC9zeXMgaW4gL2V0Yy9tdGFiCisjdGVzdCAteiAiYG1vdW50IHwgZ3JlcCBzeXNmc2AiICYmIHsKK3Rlc3QgISAtZCAiJHN5c2QvYmxvY2siICYmIHsKKwllY2hvICIkbWUgRXJyb3I6IHN5c2ZzIGlzIG5vdCBtb3VudGVkIiAxPiYyCisJZXhpdCAxCit9Cit0ZXN0IC16ICJgbHNtb2QgfCBncmVwICdeYW9lJ2AiICYmIHsKKwllY2hvICAiJG1lIEVycm9yOiBhb2UgbW9kdWxlIGlzIG5vdCBsb2FkZWQiIDE+JjIKKwlleGl0IDEKK30KKworZm9yIGQgaW4gYGxzIC1kICRzeXNkL2Jsb2NrL2V0aGVyZCogMj4vZGV2L251bGwgfCBncmVwIC12IHBgIGVuZDsgZG8KKwkjIG1heWJlIGxzIGNvbWVzIHVwIGVtcHR5LCBzbyB3ZSB1c2UgImVuZCIKKwl0ZXN0ICRkID0gZW5kICYmIGNvbnRpbnVlCisKKwlkZXY9YGVjaG8gIiRkIiB8IHNlZCAncy8uKiEvLydgCisJcHJpbnRmICIkZm9ybWF0IiBcCisJCSIkZGV2IiBcCisJCSJgY2F0IFwiJGQvbmV0aWZcImAiIFwKKwkJImBjYXQgXCIkZC9zdGF0ZVwiYCIKK2RvbmUgfCBzb3J0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FvZS91ZGV2LWluc3RhbGwuc2ggYi9Eb2N1bWVudGF0aW9uL2FvZS91ZGV2LWluc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxYTI3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYW9lL3VkZXYtaW5zdGFsbC5zaApAQCAtMCwwICsxLDI2IEBACisjIGluc3RhbGwgdGhlIGFvZS1zcGVjaWZpYyB1ZGV2IHJ1bGVzIGZyb20gdWRldi50eHQgaW50byAKKyMgdGhlIHN5c3RlbSdzIHVkZXYgY29uZmlndXJhdGlvbgorIyAKKworbWU9ImBiYXNlbmFtZSAkMGAiCisKKyMgZmluZCB1ZGV2LmNvbmYsIG9mdGVuIC9ldGMvdWRldi91ZGV2LmNvbmYKKyMgKG9yIGVudmlyb25tZW50IGNhbiBzcGVjaWZ5IHdoZXJlIHRvIGZpbmQgdWRldi5jb25mKQorIworaWYgdGVzdCAteiAiJGNvbmYiOyB0aGVuCisJaWYgdGVzdCAtciAvZXRjL3VkZXYvdWRldi5jb25mOyB0aGVuCisJCWNvbmY9L2V0Yy91ZGV2L3VkZXYuY29uZgorCWVsc2UKKwkJY29uZj0iYGZpbmQgL2V0YyAtdHlwZSBmIC1uYW1lIHVkZXYuY29uZiAyPiAvZGV2L251bGxgIgorCQlpZiB0ZXN0IC16ICIkY29uZiIgfHwgdGVzdCAhIC1yICIkY29uZiI7IHRoZW4KKwkJCWVjaG8gIiRtZSBFcnJvcjogbm8gdWRldi5jb25mIGZvdW5kIiAxPiYyCisJCQlleGl0IDEKKwkJZmkKKwlmaQorZmkKKworIyBmaW5kIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdWRldiBydWxlcyBhcmUgc3RvcmVkLCBvZnRlbgorIyAvZXRjL3VkZXYvcnVsZXMuZAorIworcnVsZXNfZD0iYHNlZCAtbiAnL151ZGV2X3J1bGVzPS97IHMhdWRldl9ydWxlcz0hITsgcyFcIiEhZzsgcDsgfScgJGNvbmZgIgordGVzdCAiJHJ1bGVzX2QiICYmIHNoIC14YyAiY3AgYGRpcm5hbWUgJDBgL3VkZXYudHh0ICRydWxlc19kLzYwLWFvZS5ydWxlcyIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYW9lL3VkZXYudHh0IGIvRG9jdW1lbnRhdGlvbi9hb2UvdWRldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzOWQ4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYW9lL3VkZXYudHh0CkBAIC0wLDAgKzEsMjMgQEAKKyMgVGhlc2UgcnVsZXMgdGVsbCB1ZGV2IHdoYXQgZGV2aWNlIG5vZGVzIHRvIGNyZWF0ZSBmb3IgYW9lIHN1cHBvcnQuCisjIFRoZXkgbWF5IGJlIGluc3RhbGxlZCBhbG9uZyB0aGUgZm9sbG93aW5nIGxpbmVzIChhZGp1c3RlZCB0byB3aGF0CisjIHlvdSBzZWUgb24geW91ciBzeXN0ZW0pLgorIyAKKyMgICBlY2FzaGluQG1ha2tpIH4kIHN1CisjICAgUGFzc3dvcmQ6CisjICAgYmFzaCMgZmluZCAvZXRjIC10eXBlIGYgLW5hbWUgdWRldi5jb25mCisjICAgL2V0Yy91ZGV2L3VkZXYuY29uZgorIyAgIGJhc2gjIGdyZXAgdWRldl9ydWxlcz0gL2V0Yy91ZGV2L3VkZXYuY29uZgorIyAgIHVkZXZfcnVsZXM9Ii9ldGMvdWRldi9ydWxlcy5kLyIKKyMgICBiYXNoIyBscyAvZXRjL3VkZXYvcnVsZXMuZC8KKyMgICAxMC13YWNvbS5ydWxlcyAgNTAtdWRldi5ydWxlcworIyAgIGJhc2gjIGNwIC9wYXRoL3RvL2xpbnV4LTIuNi54eC9Eb2N1bWVudGF0aW9uL2FvZS91ZGV2LnR4dCBcCisjICAgICAgICAgICAvZXRjL3VkZXYvcnVsZXMuZC82MC1hb2UucnVsZXMKKyMgIAorCisjIGFvZSBjaGFyIGRldmljZXMKK1NVQlNZU1RFTT0iYW9lIiwgS0VSTkVMPSJkaXNjb3ZlciIsCU5BTUU9ImV0aGVyZC8layIsIEdST1VQPSJkaXNrIiwgTU9ERT0iMDIyMCIKK1NVQlNZU1RFTT0iYW9lIiwgS0VSTkVMPSJlcnIiLAkJTkFNRT0iZXRoZXJkLyVrIiwgR1JPVVA9ImRpc2siLCBNT0RFPSIwNDQwIgorU1VCU1lTVEVNPSJhb2UiLCBLRVJORUw9ImludGVyZmFjZXMiLAlOQU1FPSJldGhlcmQvJWsiLCBHUk9VUD0iZGlzayIsIE1PREU9IjAyMjAiCisKKyMgYW9lIGJsb2NrIGRldmljZXMgICAgIAorS0VSTkVMPSJldGhlcmQqIiwgICAgICAgTkFNRT0iJWsiLCBHUk9VUD0iZGlzayIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9hcm0vMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1M2ZlNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtLzAwLUlOREVYCkBAIC0wLDAgKzEsMjAgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKK0Jvb3RpbmcKKwktIHJlcXVpcmVtZW50cyBmb3IgYm9vdGluZworSW50ZXJydXB0cworCS0gQVJNIEludGVycnVwdCBzdWJzeXN0ZW0gZG9jdW1lbnRhdGlvbgorTmV0d2luZGVyCisJLSBOZXR3aW5kZXIgc3BlY2lmaWMgZG9jdW1lbnRhdGlvbgorUkVBRE1FCisJLSBHZW5lcmFsIEFSTSBkb2N1bWVudGF0aW9uCitTQTExMDAKKwktIFNBMTEwMCBkb2N1bWVudGF0aW9uCitYU2NhbGUKKwktIFhTY2FsZSBkb2N1bWVudGF0aW9uCitlbXBlZworCS0gRW1wZWcgZG9jdW1lbnRhdGlvbgorbWVtX2FsaWdubWVudAorCS0gYWxpZ25tZW50IGFib3J0IGhhbmRsZXIgZG9jdW1lbnRhdGlvbgorbndmcGUKKwktIE5XRlBFIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yIGRvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL0Jvb3RpbmcgYi9Eb2N1bWVudGF0aW9uL2FybS9Cb290aW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDU2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9Cb290aW5nCkBAIC0wLDAgKzEsMTQxIEBACisJCQlCb290aW5nIEFSTSBMaW51eAorCQkJPT09PT09PT09PT09PT09PT0KKworQXV0aG9yOglSdXNzZWxsIEtpbmcKK0RhdGUgIDogMTggTWF5IDIwMDIKKworVGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGlzIHJlbGV2YW50IHRvIDIuNC4xOC1ybWs2IGFuZCBiZXlvbmQuCisKK0luIG9yZGVyIHRvIGJvb3QgQVJNIExpbnV4LCB5b3UgcmVxdWlyZSBhIGJvb3QgbG9hZGVyLCB3aGljaCBpcyBhIHNtYWxsCitwcm9ncmFtIHRoYXQgcnVucyBiZWZvcmUgdGhlIG1haW4ga2VybmVsLiAgVGhlIGJvb3QgbG9hZGVyIGlzIGV4cGVjdGVkCit0byBpbml0aWFsaXNlIHZhcmlvdXMgZGV2aWNlcywgYW5kIGV2ZW50dWFsbHkgY2FsbCB0aGUgTGludXgga2VybmVsLAorcGFzc2luZyBpbmZvcm1hdGlvbiB0byB0aGUga2VybmVsLgorCitFc3NlbnRpYWxseSwgdGhlIGJvb3QgbG9hZGVyIHNob3VsZCBwcm92aWRlIChhcyBhIG1pbmltdW0pIHRoZQorZm9sbG93aW5nOgorCisxLiBTZXR1cCBhbmQgaW5pdGlhbGlzZSB0aGUgUkFNLgorMi4gSW5pdGlhbGlzZSBvbmUgc2VyaWFsIHBvcnQuCiszLiBEZXRlY3QgdGhlIG1hY2hpbmUgdHlwZS4KKzQuIFNldHVwIHRoZSBrZXJuZWwgdGFnZ2VkIGxpc3QuCis1LiBDYWxsIHRoZSBrZXJuZWwgaW1hZ2UuCisKKworMS4gU2V0dXAgYW5kIGluaXRpYWxpc2UgUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhpc3RpbmcgYm9vdCBsb2FkZXJzOgkJTUFOREFUT1JZCitOZXcgYm9vdCBsb2FkZXJzOgkJTUFOREFUT1JZCisKK1RoZSBib290IGxvYWRlciBpcyBleHBlY3RlZCB0byBmaW5kIGFuZCBpbml0aWFsaXNlIGFsbCBSQU0gdGhhdCB0aGUKK2tlcm5lbCB3aWxsIHVzZSBmb3Igdm9sYXRpbGUgZGF0YSBzdG9yYWdlIGluIHRoZSBzeXN0ZW0uICBJdCBwZXJmb3JtcwordGhpcyBpbiBhIG1hY2hpbmUgZGVwZW5kZW50IG1hbm5lci4gIChJdCBtYXkgdXNlIGludGVybmFsIGFsZ29yaXRobXMKK3RvIGF1dG9tYXRpY2FsbHkgbG9jYXRlIGFuZCBzaXplIGFsbCBSQU0sIG9yIGl0IG1heSB1c2Uga25vd2xlZGdlIG9mCit0aGUgUkFNIGluIHRoZSBtYWNoaW5lLCBvciBhbnkgb3RoZXIgbWV0aG9kIHRoZSBib290IGxvYWRlciBkZXNpZ25lcgorc2VlcyBmaXQuKQorCisKKzIuIEluaXRpYWxpc2Ugb25lIHNlcmlhbCBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFeGlzdGluZyBib290IGxvYWRlcnM6CQlPUFRJT05BTCwgUkVDT01NRU5ERUQKK05ldyBib290IGxvYWRlcnM6CQlPUFRJT05BTCwgUkVDT01NRU5ERUQKKworVGhlIGJvb3QgbG9hZGVyIHNob3VsZCBpbml0aWFsaXNlIGFuZCBlbmFibGUgb25lIHNlcmlhbCBwb3J0IG9uIHRoZQordGFyZ2V0LiAgVGhpcyBhbGxvd3MgdGhlIGtlcm5lbCBzZXJpYWwgZHJpdmVyIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0Cit3aGljaCBzZXJpYWwgcG9ydCBpdCBzaG91bGQgdXNlIGZvciB0aGUga2VybmVsIGNvbnNvbGUgKGdlbmVyYWxseQordXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHRhcmdldC4pCisKK0FzIGFuIGFsdGVybmF0aXZlLCB0aGUgYm9vdCBsb2FkZXIgY2FuIHBhc3MgdGhlIHJlbGV2YW50ICdjb25zb2xlPScKK29wdGlvbiB0byB0aGUga2VybmVsIHZpYSB0aGUgdGFnZ2VkIGxpc3RzIHNwZWNpZnlpbmcgdGhlIHBvcnQsIGFuZAorc2VyaWFsIGZvcm1hdCBvcHRpb25zIGFzIGRlc2NyaWJlZCBpbgorCisgICAgICAgRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQuCisKKworMy4gRGV0ZWN0IHRoZSBtYWNoaW5lIHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4aXN0aW5nIGJvb3QgbG9hZGVyczoJCU9QVElPTkFMCitOZXcgYm9vdCBsb2FkZXJzOgkJTUFOREFUT1JZCisKK1RoZSBib290IGxvYWRlciBzaG91bGQgZGV0ZWN0IHRoZSBtYWNoaW5lIHR5cGUgaXRzIHJ1bm5pbmcgb24gYnkgc29tZQorbWV0aG9kLiAgV2hldGhlciB0aGlzIGlzIGEgaGFyZCBjb2RlZCB2YWx1ZSBvciBzb21lIGFsZ29yaXRobSB0aGF0Citsb29rcyBhdCB0aGUgY29ubmVjdGVkIGhhcmR3YXJlIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudC4KK1RoZSBib290IGxvYWRlciBtdXN0IHVsdGltYXRlbHkgYmUgYWJsZSB0byBwcm92aWRlIGEgTUFDSF9UWVBFX3h4eAordmFsdWUgdG8gdGhlIGtlcm5lbC4gKHNlZSBsaW51eC9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzKS4KKworCis0LiBTZXR1cCB0aGUga2VybmVsIHRhZ2dlZCBsaXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4aXN0aW5nIGJvb3QgbG9hZGVyczoJCU9QVElPTkFMLCBISUdITFkgUkVDT01NRU5ERUQKK05ldyBib290IGxvYWRlcnM6CQlNQU5EQVRPUlkKKworVGhlIGJvb3QgbG9hZGVyIG11c3QgY3JlYXRlIGFuZCBpbml0aWFsaXNlIHRoZSBrZXJuZWwgdGFnZ2VkIGxpc3QuCitBIHZhbGlkIHRhZ2dlZCBsaXN0IHN0YXJ0cyB3aXRoIEFUQUdfQ09SRSBhbmQgZW5kcyB3aXRoIEFUQUdfTk9ORS4KK1RoZSBBVEFHX0NPUkUgdGFnIG1heSBvciBtYXkgbm90IGJlIGVtcHR5LiAgQW4gZW1wdHkgQVRBR19DT1JFIHRhZworaGFzIHRoZSBzaXplIGZpZWxkIHNldCB0byAnMicgKDB4MDAwMDAwMDIpLiAgVGhlIEFUQUdfTk9ORSBtdXN0IHNldAordGhlIHNpemUgZmllbGQgdG8gemVyby4KKworQW55IG51bWJlciBvZiB0YWdzIGNhbiBiZSBwbGFjZWQgaW4gdGhlIGxpc3QuICBJdCBpcyB1bmRlZmluZWQKK3doZXRoZXIgYSByZXBlYXRlZCB0YWcgYXBwZW5kcyB0byB0aGUgaW5mb3JtYXRpb24gY2FycmllZCBieSB0aGUKK3ByZXZpb3VzIHRhZywgb3Igd2hldGhlciBpdCByZXBsYWNlcyB0aGUgaW5mb3JtYXRpb24gaW4gaXRzCitlbnRpcmV0eTsgc29tZSB0YWdzIGJlaGF2ZSBhcyB0aGUgZm9ybWVyLCBvdGhlcnMgdGhlIGxhdHRlci4KKworVGhlIGJvb3QgbG9hZGVyIG11c3QgcGFzcyBhdCBhIG1pbmltdW0gdGhlIHNpemUgYW5kIGxvY2F0aW9uIG9mCit0aGUgc3lzdGVtIG1lbW9yeSwgYW5kIHJvb3QgZmlsZXN5c3RlbSBsb2NhdGlvbi4gIFRoZXJlZm9yZSwgdGhlCittaW5pbXVtIHRhZ2dlZCBsaXN0IHNob3VsZCBsb29rOgorCisJKy0tLS0tLS0tLS0tKworYmFzZSAtPgl8IEFUQUdfQ09SRSB8ICB8CisJKy0tLS0tLS0tLS0tKyAgfAorCXwgQVRBR19NRU0gIHwgIHwgaW5jcmVhc2luZyBhZGRyZXNzCisJKy0tLS0tLS0tLS0tKyAgfAorCXwgQVRBR19OT05FIHwgIHwKKwkrLS0tLS0tLS0tLS0rICB2CisKK1RoZSB0YWdnZWQgbGlzdCBzaG91bGQgYmUgc3RvcmVkIGluIHN5c3RlbSBSQU0uCisKK1RoZSB0YWdnZWQgbGlzdCBtdXN0IGJlIHBsYWNlZCBpbiBhIHJlZ2lvbiBvZiBtZW1vcnkgd2hlcmUgbmVpdGhlcgordGhlIGtlcm5lbCBkZWNvbXByZXNzb3Igbm9yIGluaXRyZCAnYm9vdHAnIHByb2dyYW0gd2lsbCBvdmVyd3JpdGUKK2l0LiAgVGhlIHJlY29tbWVuZGVkIHBsYWNlbWVudCBpcyBpbiB0aGUgZmlyc3QgMTZLaUIgb2YgUkFNLgorCis1LiBDYWxsaW5nIHRoZSBrZXJuZWwgaW1hZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFeGlzdGluZyBib290IGxvYWRlcnM6CQlNQU5EQVRPUlkKK05ldyBib290IGxvYWRlcnM6CQlNQU5EQVRPUlkKKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBjYWxsaW5nIHRoZSBrZXJuZWwgekltYWdlLiAgSWYgdGhlIHpJbWFnZQoraXMgc3RvcmVkIGluIGZsYXNoLCBhbmQgaXMgbGlua2VkIGNvcnJlY3RseSB0byBiZSBydW4gZnJvbSBmbGFzaCwKK3RoZW4gaXQgaXMgbGVnYWwgZm9yIHRoZSBib290IGxvYWRlciB0byBjYWxsIHRoZSB6SW1hZ2UgaW4gZmxhc2gKK2RpcmVjdGx5LgorCitUaGUgekltYWdlIG1heSBhbHNvIGJlIHBsYWNlZCBpbiBzeXN0ZW0gUkFNIChhdCBhbnkgbG9jYXRpb24pIGFuZAorY2FsbGVkIHRoZXJlLiAgTm90ZSB0aGF0IHRoZSBrZXJuZWwgdXNlcyAxNksgb2YgUkFNIGJlbG93IHRoZSBpbWFnZQordG8gc3RvcmUgcGFnZSB0YWJsZXMuICBUaGUgcmVjb21tZW5kZWQgcGxhY2VtZW50IGlzIDMyS2lCIGludG8gUkFNLgorCitJbiBlaXRoZXIgY2FzZSwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgbWV0OgorCistIFF1aWVzY2UgYWxsIERNQSBjYXBhYmxlIGRldmljZXNzIHNvIHRoYXQgbWVtb3J5IGRvZXMgbm90IGdldAorICBjb3JydXB0ZWQgYnkgYm9ndXMgbmV0d29yayBwYWNrZXRzIG9yIGRpc2sgZGF0YS4gVGhpcyB3aWxsIHNhdmUKKyAgeW91IG1hbnkgaG91cnMgb2YgZGVidWcuCisKKy0gQ1BVIHJlZ2lzdGVyIHNldHRpbmdzCisgIHIwID0gMCwKKyAgcjEgPSBtYWNoaW5lIHR5cGUgbnVtYmVyIGRpc2NvdmVyZWQgaW4gKDMpIGFib3ZlLgorICByMiA9IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGFnZ2VkIGxpc3QgaW4gc3lzdGVtIFJBTS4KKworLSBDUFUgbW9kZQorICBBbGwgZm9ybXMgb2YgaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIChJUlFzIGFuZCBGSVFzKQorICBUaGUgQ1BVIG11c3QgYmUgaW4gU1ZDIG1vZGUuICAoQSBzcGVjaWFsIGV4Y2VwdGlvbiBleGlzdHMgZm9yIEFuZ2VsKQorCistIENhY2hlcywgTU1VcworICBUaGUgTU1VIG11c3QgYmUgb2ZmLgorICBJbnN0cnVjdGlvbiBjYWNoZSBtYXkgYmUgb24gb3Igb2ZmLgorICBEYXRhIGNhY2hlIG11c3QgYmUgb2ZmLgorCistIFRoZSBib290IGxvYWRlciBpcyBleHBlY3RlZCB0byBjYWxsIHRoZSBrZXJuZWwgaW1hZ2UgYnkganVtcGluZworICBkaXJlY3RseSB0byB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIGtlcm5lbCBpbWFnZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vSVhQMjAwMCBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDIwMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxNDhiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDIwMDAKQEAgLTAsMCArMSw2OSBAQAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWxlYXNlIE5vdGVzIGZvciBMaW51eCBvbiBJbnRlbCdzIElYUDIwMDAgTmV0d29yayBQcm9jZXNzb3IKKworTWFpbnRhaW5lZCBieSBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBPdmVydmlldworCitJbnRlbCdzIElYUDIwMDAgZmFtaWx5IG9mIE5QVXMgKElYUDI0MDAsIElYUDI4MDAsIElYUDI4NTApIGlzIGRlc2lnbmVkCitmb3IgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JrIGFwcGxpY2F0aW9ucyBzdWNoIGhpZ2gtYXZhaWxhYmlsaXR5Cit0ZWxlY29tIHN5c3RlbXMuIEluIGFkZGl0aW9uIHRvIGFuIFhTY2FsZSBjb3JlLCBpdCBjb250YWlucyB1cCB0byA4CisiTWljcm9FbmdpbmVzIiB0aGF0IHJ1biBzcGVjaWFsIGNvZGUsIHNldmVyYWwgaGlnaC1lbmQgbmV0d29ya2luZyAKK2ludGVyZmFjZXMgKFVUT1BJQSwgU1BJLCBldGMpLCBhIFBDSSBob3N0IGJyaWRnZSwgb25lIHNlcmlhbCBwb3J0LAorZmxhc2ggaW50ZXJmYWNlLCBhbmQgc29tZSBvdGhlciBvZGRzIGFuZCBlbmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgorCitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9wcm9kdWN0cy9ucGZhbWlseS9peHAyeHh4Lmh0bQorCisyLiBMaW51eCBTdXBwb3J0CisKK0xpbnV4IGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIG9uIHRoZSBJWFAyMDAwIE5QVXM6CisKKy0gT24tY2hpcCBzZXJpYWwKKy0gUENJCistIEZsYXNoIChNVEQvSkZGUzIpCistIEkyQyB0aHJvdWdoIEdQSU8KKy0gVGltZXJzICh3YXRjaGRvZywgT1MpCisKK1RoYXQgaXMgYWJvdXQgYWxsIHdlIGNhbiBzdXBwb3J0IHVuZGVyIExpbnV4IEFUTSBiL2MgdGhlIGNvcmUgbmV0d29ya2luZworY29tcG9uZW50cyBvZiB0aGUgY2hpcCBhcmUgYWNjZXNzZWQgdmlhIEludGVsJ3MgY2xvc2VkIHNvdXJjZSBTREsuIAorUGxlYXNlIGNvbnRhY3QgSW50ZWwgZGlyZWN0bHkgb24gaXNzdWVzIHdpdGggdXNpbmcgdGhvc2UuIFRoZXJlIGlzCithbHNvIGEgbWFpbGluZyBsaXN0IHJ1biBieSBzb21lIGZvbGtzIGF0IFByaW5jZXRvbiBVbml2ZXJzaXR5IHRoYXQgbWlnaHQKK2JlIG9mIGhlbHA6ICBodHRwczovL2xpc3RzLmNzLnByaW5jZXRvbi5lZHUvbWFpbG1hbi9saXN0aW5mby9peHAyeHh4CisKK1dIQVRFVkVSIFlPVSBETywgRE8gTk9UIFBPU1QgRU1BSUwgVE8gVEhFIExJTlVYLUFSTSBPUiBMSU5VWC1BUk0tS0VSTkVMCitNQUlMSU5HIExJU1RTIFJFR0FSRElORyBUSEUgSU5URUwgU0RLLgorCiszLiBTdXBwb3J0ZWQgUGxhdGZvcm1zCisKKy0gSW50ZWwgSVhEUDI0MDAgUmVmZXJlbmNlIFBsYXRmb3JtCistIEludGVsIElYRFAyODAwIFJlZmVyZW5jZSBQbGF0Zm9ybQorLSBJbnRlbCBJWERQMjQwMSBSZWZlcmVuY2UgUGxhdGZvcm0KKy0gSW50ZWwgSVhEUDI4MDEgUmVmZXJlbmNlIFBsYXRmb3JtCistIFJhZGlTeXMgRU5QLTI2MTEKKworNC4gVXNhZ2UgTm90ZXMKKworLSBUaGUgSVhQMjAwMCBwbGF0Zm9ybXMgdXN1YWxseSBoYXZlIHJhdGhlciBjb21wbGV4IFBDSSBidXMgdG9wb2xvZ2llcworICB3aXRoIGxhcmdlIG1lbW9yeSBzcGFjZSByZXF1aXJlbWVudHMuIEluIGFkZGl0aW9uLCBiL2Mgb2YgdGhlIHdheSB0aGUKKyAgSW50ZWwgU0RLIGlzIGRlc2lnbmVkLCBkZXZpY2VzIGFyZSBlbnVtZXJhdGVkIGluIGEgdmVyeSBzcGVjaWZpYworICB3YXkuIEIvYyBvZiB0aGlzIHRoaXMsIHdlIHVzZSAicGNpPWZpcm13YXJlIiBvcHRpb24gaW4gdGhlIGtlcm5lbAorICBjb21tYW5kIGxpbmUgc28gdGhhdCB3ZSBkbyBub3QgcmUtZW51bWVyYXRlIHRoZSBidXMuCisKKy0gSVhEUDJ4MDEgc3lzdGVtcyBoYXZlIHZhcmlhYmxlIGNsb2NrIHRpY2sgcmF0ZXMgdGhhdCB3ZSBjYW5ub3QgZGV0ZXJtaW5lIAorICB2aWEgSFcgcmVnaXN0ZXJzLiBUaGUgIml4ZHAyeDAxX2Nsaz1YWFgiIGNtZCBsaW5lIG9wdGlvbnMgYWxsb3cgeW91CisgIHRvIHBhc3MgdGhlIGNsb2NrIHJhdGUgdG8gdGhlIGJvYXJkIHBvcnQuCisKKzUuIFRoYW5rcworCitUaGUgSVhQMjAwMCB3b3JrIGhhcyBiZWVuIGZ1bmRlZCBieSBJbnRlbCBDb3JwLiBhbmQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHBhdGNoZXMvY29tbWVudHMvZXRjOgorCitOYWVlbSBGLiBBZnphbAorTGVubmVydCBCdXl0ZW5oZWsKK0plZmZyZXkgRGFseQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMYXN0IFVwZGF0ZTogOC8wOS8yMDA0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHggYi9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjNmQzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eApAQCAtMCwwICsxLDE3NCBAQAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWxlYXNlIE5vdGVzIGZvciBMaW51eCBvbiBJbnRlbCdzIElYUDR4eCBOZXR3b3JrIFByb2Nlc3NvcgorCitNYWludGFpbmVkIGJ5IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIE92ZXJ2aWV3CisKK0ludGVsJ3MgSVhQNHh4IG5ldHdvcmsgcHJvY2Vzc29yIGlzIGEgaGlnaGx5IGludGVncmF0ZWQgU09DIHRoYXQKK2lzIHRhcmdldGVkIGZvciBuZXR3b3JrIGFwcGxpY2F0aW9ucywgdGhvdWdoIGl0IGhhcyBiZWNvbWUgcG9wdWxhciAKK2luIGluZHVzdHJpYWwgY29udHJvbCBhbmQgb3RoZXIgYXJlYXMgZHVlIHRvIGxvdyBjb3N0IGFuZCBwb3dlcgorY29uc3VtcHRpb24uIFRoZSBJWFA0eHggZmFtaWx5IGN1cnJlbnRseSBjb25zaXN0cyBvZiBzZXZlcmFsIHByb2Nlc3NvcnMKK3RoYXQgc3VwcG9ydCBkaWZmZXJlbnQgbmV0d29yayBvZmZsb2FkIGZ1bmN0aW9ucyBzdWNoIGFzIGVuY3J5cHRpb24sCityb3V0aW5nLCBmaXJld2FsbGluZywgZXRjLiBUaGUgSVhQNDZ4IGZhbWlseSBpcyBhbiB1cGRhdGVkIHZlcnNpb24gd2hpY2gKK3N1cHBvcnRzIGZhc3RlciBzcGVlZHMsIG5ldyBtZW1vcnkgYW5kIGZsYXNoIGNvbmZpZ3VyYXRpb25zLCBhbmQgbW9yZQoraW50ZWdyYXRpb24gc3VjaCBhcyBhbiBvbi1jaGlwIEkyQyBjb250cm9sbGVyLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGUgQ1BVLCBzZWU6CisKKyAgIGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL3Byb2R1Y3RzL25wZmFtaWx5L2l4cDR4eC5odG0KKworSW50ZWwgYWxzbyBtYWRlIHRoZSBJWENQMTEwMCBDUFUgZm9yIHNvbWV0aW1lIHdoaWNoIGlzIGFuIElYUDR4eCAKK3N0cmlwcGVkIG9mIG11Y2ggb2YgdGhlIG5ldHdvcmsgaW50ZWxsaWdlbmNlLgorCisyLiBMaW51eCBTdXBwb3J0CisKK0xpbnV4IGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIG9uIHRoZSBJWFA0eHggY2hpcHM6CisKKy0gRHVhbCBzZXJpYWwgcG9ydHMKKy0gUENJIGludGVyZmFjZQorLSBGbGFzaCBhY2Nlc3MgKE1URC9KRkZTKQorLSBJMkMgdGhyb3VnaCBHUElPIG9uIElYUDQyeAorLSBHUElPIGZvciBpbnB1dC9vdXRwdXQvaW50ZXJydXB0cyAKKyAgU2VlIGluY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oIGZvciBhY2Nlc3MgZnVuY3Rpb25zLgorLSBUaW1lcnMgKHdhdGNoZG9nLCBPUykKKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIHRoZSBjaGlwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBMaW51eCBhbmQKK3JlcXVpcmUgdGhlIHVzZSBvZiBJbnRlbCdzIHByb3BpZXRhcnkgQ1NSIHNvZnRhcmU6CisKKy0gVVNCIGRldmljZSBpbnRlcmZhY2UKKy0gTmV0d29yayBpbnRlcmZhY2VzIChIU1MsIFV0b3BpYSwgTlBFcywgZXRjKQorLSBOZXR3b3JrIG9mZmxvYWQgZnVuY3Rpb25hbGl0eQorCitJZiB5b3UgbmVlZCB0byB1c2UgYW55IG9mIHRoZSBhYm92ZSwgeW91IG5lZWQgdG8gZG93bmxvYWQgSW50ZWwncworc29mdHdhcmUgZnJvbToKKworICAgaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhwNDI1c3dyMS5odG0KKworRE8gTk9UIFBPU1QgUVVFU1RJT05TIFRPIFRIRSBMSU5VWCBNQUlMSU5HIExJU1RTIFJFR0FSRElORyBUSEUgUFJPUElFVEFSWQorU09GVFdBUkUuCisKK1RoZXJlIGFyZSBzZXZlcmFsIHdlYnNpdGVzIHRoYXQgcHJvdmlkZSBkaXJlY3Rpb25zL3BvaW50ZXJzIG9uIHVzaW5nCitJbnRlbCdzIHNvZnR3YXJlOgorCitodHRwOi8vaXhwNHh4LW9zZGcuc291cmNlZm9yZ2UubmV0LyAKKyAgIE9wZW4gU291cmNlIERldmVsb3BlcidzIEd1aWRlIGZvciB1c2luZyB1Q2xpbnV4IGFuZCB0aGUgSW50ZWwgbGlicmFyaWVzIAorCitodHRwOi8vZ2F0ZXdheW1ha2VyLnNvdXJjZWZvcmdlLm5ldC8gCisgICBTaW1wbGUgb25lIHBhZ2Ugc3VtbWFyeSBvZiBidWlsZGluZyBhIGdhdGV3YXkgdXNpbmcgYW4gSVhQNDI1IGFuZCBMaW51eAorCitodHRwOi8vaXhwNDI1LnNvdXJjZWZvcmdlLm5ldC8KKyAgIEFUTSBkZXZpY2UgZHJpdmVyIGZvciBJWFA0MjUgdGhhdCByZWxpZXMgb24gSW50ZWwncyBsaWJyYXJpZXMKKworMy4gS25vd24gSXNzdWVzL0xpbWl0YXRpb25zCisKKzNhLiBMaW1pdGVkIGluYm91bmQgUENJIHdpbmRvdworCitUaGUgSVhQNHh4IGZhbWlseSBhbGxvd3MgZm9yIHVwIHRvIDI1Nk1CIG9mIG1lbW9yeSBidXQgdGhlIFBDSSBpbnRlcmZhY2UKK2NhbiBvbmx5IGV4cG9zZSA2NE1CIG9mIHRoYXQgbWVtb3J5IHRvIHRoZSBQQ0kgYnVzLiBUaGlzIG1lYW5zIHRoYXQgaWYKK3lvdSBhcmUgcnVubmluZyB3aXRoID4gNjRNQiwgYWxsIFBDSSBidWZmZXJzIG91dHNpZGUgb2YgdGhlIGFjY2Vzc2libGUKK3JhbmdlIHdpbGwgYmUgYm91bmNlZCB1c2luZyB0aGUgcm91dGluZXMgaW4gYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jLgorICAgCiszYi4gTGltaXRlZCBvdXRib3VuZCBQQ0kgd2luZG93CisKK0lYUDR4eCBwcm92aWRlcyB0d28gbWV0aG9kcyBvZiBhY2Nlc3NpbmcgUENJIG1lbW9yeSBzcGFjZToKKworMSkgQSBkaXJlY3QgbWFwcGVkIHdpbmRvdyBmcm9tIDB4NDgwMDAwMDAgdG8gMHg0YmZmZmZmZiAoNjRNQikuCisgICBUbyBhY2Nlc3MgUENJIHZpYSB0aGlzIHNwYWNlLCB3ZSBzaW1wbHkgaW9yZW1hcCgpIHRoZSBCQVIKKyAgIGludG8gdGhlIGtlcm5lbCBhbmQgd2UgY2FuIHVzZSB0aGUgc3RhbmRhcmQgcmVhZFtid2xdL3dyaXRlW2J3bF0KKyAgIG1hY3Jvcy4gVGhpcyBpcyB0aGUgcHJlZmZlcmVkIG1ldGhvZCBkdWUgdG8gc3BlZWQgYnV0IGl0CisgICBsaW1pdHMgdGhlIHN5c3RlbSB0byBqdXN0IDY0TUIgb2YgUENJIG1lbW9yeS4gVGhpcyBjYW4gYmUgCisgICBwcm9ibGFtYXRpYyBpZiB1c2luZyB2aWRlbyBjYXJkcyBhbmQgb3RoZXIgbWVtb3J5LWhlYXZ5IGRldmljZXMuCisgICAgICAgICAgCisyKSBJZiA+IDY0TUIgb2YgbWVtb3J5IHNwYWNlIGlzIHJlcXVpcmVkLCB0aGUgSVhQNHh4IGNhbiBiZSAKKyAgIGNvbmZpZ3VyZWQgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVycyB0byBhY2Nlc3MgUENJIFRoaXMgYWxsb3dzIAorICAgZm9yIHVwIHRvIDEyOE1CICgweDQ4MDAwMDAwIHRvIDB4NGZmZmZmZmYpIG9mIG1lbW9yeSBvbiB0aGUgYnVzLiAKKyAgIFRoZSBkaXNhZHZhbnRhZGdlIG9mIHRoaXMgaXMgdGhhdCBldmVyeSBQQ0kgYWNjZXNzIHJlcXVpcmVzIAorICAgdGhyZWUgbG9jYWwgcmVnaXN0ZXIgYWNjZXNzZXMgcGx1cyBhIHNwaW5sb2NrLCBidXQgaW4gc29tZSAKKyAgIGNhc2VzIHRoZSBwZXJmb3JtYW5jZSBoaXQgaXMgYWNjZXB0YWJsZS4gSW4gYWRkaXRpb24sIHlvdSBjYW5ub3QgCisgICBtbWFwKCkgUENJIGRldmljZXMgaW4gdGhpcyBjYXNlIGR1ZSB0byB0aGUgaW5kaXJlY3QgbmF0dXJlCisgICBvZiB0aGUgUENJIHdpbmRvdy4KKworQnkgZGVmYXVsdCwgdGhlIGRpcmVjdCBtZXRob2QgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSWYKK3lvdSBuZWVkIG1vcmUgUENJIG1lbW9yeSwgZW5hYmxlIHRoZSBJWFA0WFhfSU5ESVJFQ1RfUENJIGNvbmZpZyBvcHRpb24uCisKKzNjLiBHUElPIGFzIEludGVycnVwdHMKKworQ3VycmVudGx5IHRoZSBjb2RlIG9ubHkgaGFuZGxlcyBsZXZlbC1zZW5zaXRpdmUgR1BJTyBpbnRlcnJ1cHRzIAorCis0LiBTdXBwb3J0ZWQgcGxhdGZvcm1zCisKK0FESSBFbmdpbmVlcmluZyBDb3lvdGUgR2F0ZXdheSBSZWZlcmVuY2UgUGxhdGZvcm0KK2h0dHA6Ly93d3cuYWRpZW5naW5lZXJpbmcuY29tL3Byb2R1Y3RzQ295b3RlLmh0bWwKKworICAgVGhlIEFESSBDb3lvdGUgcGxhdGZvcm0gaXMgcmVmZXJlbmNlIGRlc2lnbiBmb3IgdGhvc2UgYnVpbGRpbmcgCisgICBzbWFsbCByZXNpZGVudGlhbC9vZmZpY2UgZ2F0ZXdheXMuIE9uZSBOUEUgaXMgY29ubmVjdGVkIHRvIGEgMTAvMTAwCisgICBpbnRlcmZhY2UsIG9uZSB0byA0LXBvcnQgMTAvMTAwIHN3aXRjaCwgYW5kIHRoZSB0aGlyZCB0byBhbmQgQURTTAorICAgaW50ZXJmYWNlLiBJbiBhZGRpdGlvbiwgaXQgYWxzbyBzdXBwb3J0cyB0byBQT1RzIGludGVyZmFjZXMgY29ubmVjdGVkCisgICB2aWEgU0xJQ3MuIE5vdGUgdGhhdCB0aG9zZSBhcmUgbm90IHN1cHBvcnRlZCBieSBMaW51eCBBVE0uIEZpbmFsbHksCisgICB0aGUgcGxhdGZvcm0gaGFzIHR3byBtaW5pLVBDSSBzbG90cyB1c2VkIGZvciA4MDIuMTFbYmdhXSBjYXJkcy4KKyAgIEZpbmFsbHksIHRoZXJlIGlzIGFuIElERSBwb3J0IGhhbmdpbmcgb2ZmIHRoZSBleHBhbnNpb24gYnVzLgorCitHYXRld29ya3MgQXZpbGEgTmV0d29yayBQbGF0Zm9ybQoraHR0cDovL3d3dy5nYXRld29ya3MuY29tL2F2aWxhX3NiYy5odG0KKworICAgVGhlIEF2aWxhIHBsYXRmb3JtIGlzIGJhc2ljYWxseSBhbmQgSVhEUDQyNSB3aXRoIHRoZSA0IFBDSSBzbG90cworICAgcmVwbGFjZWQgd2l0aCBtaW5pLVBDSSBzbG90cyBhbmQgYSBDRiBJREUgaW50ZXJmYWNlIGhhbmdpbmcgb2ZmCisgICB0aGUgZXhwYW5zaW9uIGJ1cy4KKworSW50ZWwgSVhEUDQyNSBEZXZlbG9wbWVudCBQbGF0Zm9ybQoraHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhkcDQyNS5odG0KKworICAgVGhpcyBpcyBJbnRlbCdzIHN0YW5kYXJkIHJlZmVyZW5jZSBwbGF0Zm9ybSBmb3IgdGhlIElYRFA0MjUgYW5kIGlzIAorICAgYWxzbyBrbm93biBhcyB0aGUgUmljaGZpZWxkIGJvYXJkLiBJdCBjb250YWlucyA0IFBDSSBzbG90cywgMTZNQgorICAgb2YgZmxhc2gsIHR3byAxMC8xMDAgcG9ydHMgYW5kIG9uZSBBRFNMIHBvcnQuCisKK0ludGVsIElYRFA0NjUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0KK2h0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL3Byb2R1Y3RzL25wZmFtaWx5L2l4ZHA0NjUuaHRtCisKKyAgIFRoaXMgaXMgYmFzaWNhbGx5IGFuIElYRFA0MjUgd2l0aCBhbiBJWFA0NjUgYW5kIDMyTSBvZiBmbGFzaCBpbnN0ZWFkCisgICBvZiBqdXN0IDE2LgorCitJbnRlbCBJWERQRzQyNSBEZXZlbG9wbWVudCBQbGF0Zm9ybQorCisgICBUaGlzIGlzIGJhc2ljYWxseSBhbmQgQURJIENveW90ZSBib2FyZCB3aXRoIGEgTkVDIEVIQ0kgY29udHJvbGxlcgorICAgYWRkZWQuIE9uZSBpc3N1ZSB3aXRoIHRoaXMgYm9hcmQgaXMgdGhhdCB0aGUgbWluaS1QQ0kgc2xvdHMgb25seQorICAgaGF2ZSB0aGUgMy4zdiBsaW5lIGNvbm5lY3RlZCwgc28geW91IGNhbid0IHVzZSBhIFBDSSB0byBtaW5pLVBDSQorICAgYWRhcHRlciB3aXRoIGFuIEUxMDAgY2FyZC4gU28gdG8gTkZTIHJvb3QgeW91IG5lZWQgdG8gdXNlIGVpdGhlcgorICAgdGhlIENTUiBvciBhIFdpRmkgY2FyZCBhbmQgYSByYW1kaXNrIHRoYXQgQk9PVFBzIGFuZCB0aGVuIGRvZXMKKyAgIGEgcGl2b3Rfcm9vdCB0byBORlMuCisKK01vdG9yb2xhIFByUE1DMTEwMCBQcm9jZXNzb3IgTWV6YW5pbmUgQ2FyZAoraHR0cDovL3d3dy5mb3VudGFpbnN5cy5jb20vZGF0YXNoZWV0L1ByUE1DMTEwMC5wZGYKKworICAgVGhlIFByUE1DMTEwMCBpcyBiYXNlZCBvbiB0aGUgSVhDUDExMDAgYW5kIGlzIG1lYW50IHRvIHBsdWcgaW50bworICAgYW5kIElYUDI0MDAvMjgwMCBzeXN0ZW0gdG8gYWN0IGFzIHRoZSBzeXN0ZW0gY29udHJvbGxlci4gSXQgc2ltcGx5CisgICBjb250YWlucyBhIENQVSBhbmQgMTZNQiBvZiBmbGFzaCBvbiB0aGUgYm9hcmQgYW5kIG5lZWRzIHRvIGJlCisgICBwbHVnZ2VkIGludG8gYSBjYXJyaWVyIGJvYXJkIHRvIGZ1bmN0aW9uLiBDdXJyZW50bHkgTGludXggb25seQorICAgc3VwcG9ydHMgdGhlIE1vdG9yb2xhIFByUE1DIGNhcnJpZXIgYm9hcmQgZm9yIHRoaXMgcGxhdGZvcm0uCisgICBTZWUgaHR0cHM6Ly9tY2cubW90b3JvbGEuY29tL3VzL2RzL3BkZi9kczAxNDQucGRmIGZvciBpbmZvCisgICBvbiB0aGUgY2FycmllciBib2FyZC4KKworNS4gVE9ETyBMSVNUCisKKy0gQWRkIHN1cHBvcnQgZm9yIENveW90ZSBJREUKKy0gQWRkIHN1cHBvcnQgZm9yIGVkZ2UtYmFzZWQgR1BJTyBpbnRlcnJ1cHRzCistIEFkZCBzdXBwb3J0IGZvciBDRiBJREUgb24gZXhwYW5zaW9uIGJ1cworCis2LiBUaGFua3MKKworVGhlIElYUDR4eCB3b3JrIGhhcyBiZWVuIGZ1bmRlZCBieSBJbnRlbCBDb3JwLiBhbmQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHBhdGNoZXMvY29tbWVudHMvZXRjOgorCitMZW5uZXJ0eSBCdXl0ZW5oZWsKK0x1dHogSmFlbmlja2UKK0p1c3RpbiBNYXlmaWVsZAorUm9iZXJ0IEUuIFJhbnNsYW0KK1tJIGtub3cgSSd2ZSBmb3Jnb3R0ZW4gb3RoZXJzLCBwbGVhc2UgZW1haWwgbWUgdG8gYmUgYWRkZWRdIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xhc3QgVXBkYXRlOiAwMS8wNC8yMDA1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9JbnRlcnJ1cHRzIGIvRG9jdW1lbnRhdGlvbi9hcm0vSW50ZXJydXB0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmM5M2RlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vSW50ZXJydXB0cwpAQCAtMCwwICsxLDE3MyBAQAorMi41LjItcm1rNQorLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBmaXJzdCBrZXJuZWwgdGhhdCBjb250YWlucyBhIG1ham9yIHNoYWtlIHVwIG9mIHNvbWUgb2YgdGhlCittYWpvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3Vic3lzdGVtcy4KKworRmlyc3RseSwgaXQgY29udGFpbnMgc29tZSBwcmV0dHkgbWFqb3IgY2hhbmdlcyB0byB0aGUgd2F5IHdlIGhhbmRsZSB0aGUKK01NVSBUTEIuICBFYWNoIE1NVSBUTEIgdmFyaWFudCBpcyBub3cgaGFuZGxlZCBjb21wbGV0ZWx5IHNlcGFyYXRlbHkgLQord2UgaGF2ZSBUTEIgdjMsIFRMQiB2NCAod2l0aG91dCB3cml0ZSBidWZmZXIpLCBUTEIgdjQgKHdpdGggd3JpdGUgYnVmZmVyKSwKK2FuZCBmaW5hbGx5IFRMQiB2NCAod2l0aCB3cml0ZSBidWZmZXIsIHdpdGggSSBUTEIgaW52YWxpZGF0ZSBlbnRyeSkuCitUaGVyZSBpcyBtb3JlIGFzc2VtYmx5IGNvZGUgaW5zaWRlIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zLCBtYWlubHkgdG8KK2FsbG93IG1vcmUgZmxleGlibGUgVExCIGhhbmRsaW5nIGZvciB0aGUgZnV0dXJlLgorCitTZWNvbmRseSwgdGhlIElSUSBzdWJzeXN0ZW0uCisKK1RoZSAyLjUga2VybmVscyB3aWxsIGJlIGhhdmluZyBtYWpvciBjaGFuZ2VzIHRvIHRoZSB3YXkgSVJRcyBhcmUgaGFuZGxlZC4KK1VuZm9ydHVuYXRlbHksIHRoaXMgbWVhbnMgdGhhdCBtYWNoaW5lIHR5cGVzIHRoYXQgdG91Y2ggdGhlIGlycV9kZXNjW10KK2FycmF5IChiYXNpY2FsbHkgYWxsIG1hY2hpbmUgdHlwZXMpIHdpbGwgYnJlYWssIGFuZCB0aGlzIG1lYW5zIGV2ZXJ5CittYWNoaW5lIHR5cGUgdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KKworTGV0cyB0YWtlIGFuIGV4YW1wbGUuICBPbiB0aGUgQXNzYWJldCB3aXRoIE5lcG9uc2V0LCB3ZSBoYXZlOgorCisgICAgICAgICAgICAgICAgICBHUElPMjUgICAgICAgICAgICAgICAgIElSUjoyCisgICAgICAgIFNBMTEwMCAtLS0tLS0tLS0tLS0+IE5lcG9uc2V0IC0tLS0tLS0tLS0tPiBTQTExMTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUlSOjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0+IFVTQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUlSOjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0+IFNNQzkxOTYKKworVGhlIHdheSBzdHVmZiBjdXJyZW50bHkgd29ya3MsIGFsbCBTQTExMTEgaW50ZXJydXB0cyBhcmUgbXV0dWFsbHkKK2V4Y2x1c2l2ZSBvZiBlYWNoIG90aGVyIC0gaWYgeW91J3JlIHByb2Nlc3Npbmcgb25lIGludGVycnVwdCBmcm9tIHRoZQorU0ExMTExIGFuZCBhbm90aGVyIGNvbWVzIGluLCB5b3UgaGF2ZSB0byB3YWl0IGZvciB0aGF0IGludGVycnVwdCB0bworZmluaXNoIHByb2Nlc3NpbmcgYmVmb3JlIHlvdSBjYW4gc2VydmljZSB0aGUgbmV3IGludGVycnVwdC4gIEVnLCBhbgorSURFIFBJTy1iYXNlZCBpbnRlcnJ1cHQgb24gdGhlIFNBMTExMSBleGNsdWRlcyBhbGwgb3RoZXIgU0ExMTExIGFuZAorU01DOTE5NiBpbnRlcnJ1cHRzIHVudGlsIGl0IGhhcyBmaW5pc2hlZCB0cmFuc2ZlcnJpbmcgaXRzIG11bHRpLXNlY3RvcgorZGF0YSwgd2hpY2ggY2FuIGJlIGEgbG9uZyB0aW1lLiAgTm90ZSBhbHNvIHRoYXQgc2luY2Ugd2UgbG9vcCBpbiB0aGUKK1NBMTExMSBJUlEgaGFuZGxlciwgU0ExMTExIElSUXMgY2FuIGhvbGQgb2ZmIFNNQzkxOTYgSVJRcyBpbmRlZmluaXRlbHkuCisKKworVGhlIG5ldyBhcHByb2FjaCBicmluZ3Mgc2V2ZXJhbCBuZXcgaWRlYXMuLi4KKworV2UgaW50cm9kdWNlIHRoZSBjb25jZXB0IG9mIGEgInBhcmVudCIgYW5kIGEgImNoaWxkIi4gIEZvciBleGFtcGxlLAordG8gdGhlIE5lcG9uc2V0IGhhbmRsZXIsIHRoZSAicGFyZW50IiBpcyBHUElPMjUsIGFuZCB0aGUgImNoaWxkcmVuImQKK2FyZSBTQTExMTEsIFNNQzkxOTYgYW5kIFVTQVIuCisKK1dlIGFsc28gYnJpbmcgdGhlIGlkZWEgb2YgYW4gSVJRICJjaGlwIiAobWFpbmx5IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZgordGhlIGlycWRlc2MgYXJyYXkpLiAgVGhpcyBkb2Vzbid0IGhhdmUgdG8gYmUgYSByZWFsICJJQyI7IGluZGVlZCB0aGUKK1NBMTF4MCBJUlFzIGFyZSBoYW5kbGVkIGJ5IHR3byBzZXBhcmF0ZSAiY2hpcCIgc3RydWN0dXJlcywgb25lIGZvcgorR1BJTzAtMTAsIGFuZCBhbm90aGVyIGZvciBhbGwgdGhlIHJlc3QuICBJdCBpcyBqdXN0IGEgY29udGFpbmVyIGZvcgordGhlIHZhcmlvdXMgb3BlcmF0aW9ucyAobWF5YmUgdGhpcydsbCBjaGFuZ2UgdG8gYSBiZXR0ZXIgbmFtZSkuCitUaGlzIHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgorCitzdHJ1Y3QgaXJxY2hpcCB7CisgICAgICAgIC8qCisgICAgICAgICAqIEFja25vd2xlZGdlIHRoZSBJUlEuCisgICAgICAgICAqIElmIHRoaXMgaXMgYSBsZXZlbC1iYXNlZCBJUlEsIHRoZW4gaXQgaXMgZXhwZWN0ZWQgdG8gbWFzayB0aGUgSVJRCisgICAgICAgICAqIGFzIHdlbGwuCisgICAgICAgICAqLworICAgICAgICB2b2lkICgqYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogTWFzayB0aGUgSVJRIGluIGhhcmR3YXJlLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCAoKm1hc2spKHVuc2lnbmVkIGludCBpcnEpOworICAgICAgICAvKgorICAgICAgICAgKiBVbm1hc2sgdGhlIElSUSBpbiBoYXJkd2FyZS4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgKCp1bm1hc2spKHVuc2lnbmVkIGludCBpcnEpOworICAgICAgICAvKgorICAgICAgICAgKiBSZS1ydW4gdGhlIElSUQorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCAoKnJlcnVuKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2V0IHRoZSB0eXBlIG9mIHRoZSBJUlEuCisgICAgICAgICAqLworICAgICAgICBpbnQgKCp0eXBlKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQsIHR5cGUpOworfTsKKworYWNrICAgIC0gcmVxdWlyZWQuICBNYXkgYmUgdGhlIHNhbWUgZnVuY3Rpb24gYXMgbWFzayBmb3IgSVJRcworICAgICAgICAgaGFuZGxlZCBieSBkb19sZXZlbF9JUlEuCittYXNrICAgLSByZXF1aXJlZC4KK3VubWFzayAtIHJlcXVpcmVkLgorcmVydW4gIC0gb3B0aW9uYWwuICBOb3QgcmVxdWlyZWQgaWYgeW91J3JlIHVzaW5nIGRvX2xldmVsX0lSUSBmb3IgYWxsCisgICAgICAgICBJUlFzIHRoYXQgdXNlIHRoaXMgJ2lycWNoaXAnLiAgR2VuZXJhbGx5IGV4cGVjdGVkIHRvIHJlLXRyaWdnZXIKKyAgICAgICAgIHRoZSBoYXJkd2FyZSBJUlEgaWYgcG9zc2libGUuICBJZiBub3QsIG1heSBjYWxsIHRoZSBoYW5kbGVyCisJIGRpcmVjdGx5LgordHlwZSAgIC0gb3B0aW9uYWwuICBJZiB5b3UgZG9uJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGUgdHlwZSBvZiBhbiBJUlEsCisgICAgICAgICBpdCBzaG91bGQgYmUgbnVsbCBzbyBwZW9wbGUgY2FuIGRldGVjdCBpZiB0aGV5IGFyZSB1bmFibGUgdG8KKyAgICAgICAgIHNldCB0aGUgSVJRIHR5cGUuCisKK0ZvciBlYWNoIElSUSwgd2Uga2VlcCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisgICAgICAgIC0gImRpc2FibGUiIGRlcHRoIChudW1iZXIgb2YgZGlzYWJsZV9pcnEoKXMgd2l0aG91dCBlbmFibGVfaXJxKClzKQorICAgICAgICAtIGZsYWdzIGluZGljYXRpbmcgd2hhdCB3ZSBjYW4gZG8gd2l0aCB0aGlzIElSUSAodmFsaWQsIHByb2JlLAorICAgICAgICAgIG5vYXV0b3VubWFzaykgYXMgYmVmb3JlCisgICAgICAgIC0gc3RhdHVzIG9mIHRoZSBJUlEgKHByb2JpbmcsIGVuYWJsZSwgZXRjKQorICAgICAgICAtIGNoaXAKKyAgICAgICAgLSBwZXItSVJRIGhhbmRsZXIKKyAgICAgICAgLSBpcnFhY3Rpb24gc3RydWN0dXJlIGxpc3QKKworVGhlIGhhbmRsZXIgY2FuIGJlIG9uZSBvZiB0aGUgMyBzdGFuZGFyZCBoYW5kbGVycyAtICJsZXZlbCIsICJlZGdlIiBhbmQKKyJzaW1wbGUiLCBvciB5b3VyIG93biBzcGVjaWZpYyBoYW5kbGVyIGlmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsLgorCitUaGUgImxldmVsIiBoYW5kbGVyIGlzIHdoYXQgd2UgY3VycmVudGx5IGhhdmUgLSBpdHMgcHJldHR5IHNpbXBsZS4KKyJlZGdlIiBrbm93cyBhYm91dCB0aGUgYnJva2VubmVzcyBvZiBzdWNoIElSUSBpbXBsZW1lbnRhdGlvbnMgLSB0aGF0IHlvdQorbmVlZCB0byBsZWF2ZSB0aGUgaGFyZHdhcmUgSVJRIGVuYWJsZWQgd2hpbGUgcHJvY2Vzc2luZyBpdCwgYW5kIHF1ZXVlaW5nCitmdXJ0aGVyIElSUSBldmVudHMgc2hvdWxkIHRoZSBJUlEgaGFwcGVuIGFnYWluIHdoaWxlIHByb2Nlc3NpbmcuICBUaGUKKyJzaW1wbGUiIGhhbmRsZXIgaXMgdmVyeSBiYXNpYywgYW5kIGRvZXMgbm90IHBlcmZvcm0gYW55IGhhcmR3YXJlCittYW5pcHVsYXRpb24sIG5vciBzdGF0ZSB0cmFja2luZy4gIFRoaXMgaXMgdXNlZnVsIGZvciB0aGluZ3MgbGlrZSB0aGUKK1NNQzkxOTYgYW5kIFVTQVIgYWJvdmUuCisKK1NvLCB3aGF0J3MgY2hhbmdlZD8KKworMS4gTWFjaGluZSBpbXBsZW1lbnRhdGlvbnMgbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGlycWRlc2MgYXJyYXkuCisKKzIuIE5ldyBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgaXJxZGVzYyBhcnJheS4gIFRoZSBmaXJzdCA0IGFyZSBleHBlY3RlZAorICAgdG8gYmUgdXNlZnVsIG9ubHkgdG8gbWFjaGluZSBzcGVjaWZpYyBjb2RlLiAgVGhlIGxhc3QgaXMgcmVjb21tZW5kZWQgdG8KKyAgIG9ubHkgYmUgdXNlZCBieSBtYWNoaW5lIHNwZWNpZmljIGNvZGUsIGJ1dCBtYXkgYmUgdXNlZCBpbiBkcml2ZXJzIGlmCisgICBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KKworICAgICAgICBzZXRfaXJxX2NoaXAoaXJxLGNoaXApCisKKyAgICAgICAgICAgICAgICBTZXQgdGhlIG1hc2svdW5tYXNrIG1ldGhvZHMgZm9yIGhhbmRsaW5nIHRoaXMgSVJRCisKKyAgICAgICAgc2V0X2lycV9oYW5kbGVyKGlycSxoYW5kbGVyKQorCisgICAgICAgICAgICAgICAgU2V0IHRoZSBoYW5kbGVyIGZvciB0aGlzIElSUSAobGV2ZWwsIGVkZ2UsIHNpbXBsZSkKKworICAgICAgICBzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsaGFuZGxlcikKKworICAgICAgICAgICAgICAgIFNldCBhICJjaGFpbmVkIiBoYW5kbGVyIGZvciB0aGlzIElSUSAtIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBlbmFibGVzIHRoaXMgSVJRIChlZywgTmVwb25zZXQgYW5kIFNBMTExMSBoYW5kbGVycykuCisKKyAgICAgICAgc2V0X2lycV9mbGFncyhpcnEsZmxhZ3MpCisKKyAgICAgICAgICAgICAgICBTZXQgdGhlIHZhbGlkL3Byb2JlL25vYXV0b2VuYWJsZSBmbGFncy4KKworICAgICAgICBzZXRfaXJxX3R5cGUoaXJxLHR5cGUpCisKKyAgICAgICAgICAgICAgICBTZXQgYWN0aXZlIHRoZSBJUlEgZWRnZShzKS9sZXZlbC4gIFRoaXMgcmVwbGFjZXMgdGhlCisgICAgICAgICAgICAgICAgU0ExMTExIElOVFBPTCBtYW5pcHVsYXRpb24sIGFuZCB0aGUgc2V0X0dQSU9fSVJRX2VkZ2UoKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiAgVHlwZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgICAgICAgICAjZGVmaW5lIElSUVRfTk9FREdFICAgICAoMCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIElSUVRfUklTSU5HICAgICAoX19JUlFUX1JJU0VER0UpCisgICAgICAgICAgICAgICAgI2RlZmluZSBJUlFUX0ZBTExJTkcgICAgKF9fSVJRVF9GQUxFREdFKQorICAgICAgICAgICAgICAgICNkZWZpbmUgSVJRVF9CT1RIRURHRSAgIChfX0lSUVRfUklTRURHRXxfX0lSUVRfRkFMRURHRSkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIElSUVRfTE9XICAgICAgICAoX19JUlFUX0xPV0xWTCkKKyAgICAgICAgICAgICAgICAjZGVmaW5lIElSUVRfSElHSCAgICAgICAoX19JUlFUX0hJR0hMVkwpCisKKzMuIHNldF9HUElPX0lSUV9lZGdlKCkgaXMgb2Jzb2xldGUsIGFuZCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgc2V0X2lycV90eXBlLgorCis0LiBEaXJlY3QgYWNjZXNzIHRvIFNBMTExMSBJTlRQT0wgaXMgZGVwcmVjaWF0ZWQuICBVc2Ugc2V0X2lycV90eXBlIGluc3RlYWQuCisKKzUuIEEgaGFuZGxlciBpcyBleHBlY3RlZCB0byBwZXJmb3JtIGFueSBuZWNlc3NhcnkgYWNrbm93bGVkZ2VtZW50IG9mIHRoZQorICAgcGFyZW50IElSUSB2aWEgdGhlIGNvcnJlY3QgY2hpcCBzcGVjaWZpYyBmdW5jdGlvbi4gIEZvciBpbnN0YW5jZSwgaWYKKyAgIHRoZSBTQTExMTEgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGEgU0ExMTEwIEdQSU8sIHRoZW4geW91IHNob3VsZAorICAgYWNrbm93bGVkZ2UgdGhlIFNBMTExMCBJUlEgZWFjaCB0aW1lIHlvdSByZS1yZWFkIHRoZSBTQTExMTEgSVJRIHN0YXR1cy4KKworNi4gRm9yIGFueSBjaGlsZCB3aGljaCBkb2Vzbid0IGhhdmUgaXRzIG93biBJUlEgZW5hYmxlL2Rpc2FibGUgY29udHJvbHMKKyAgIChlZywgU01DOTE5NiksIHRoZSBoYW5kbGVyIG11c3QgbWFzayBvciBhY2tub3dsZWRnZSB0aGUgcGFyZW50IElSUQorICAgd2hpbGUgdGhlIGNoaWxkIGhhbmRsZXIgaXMgY2FsbGVkLCBhbmQgdGhlIGNoaWxkIGhhbmRsZXIgc2hvdWxkIGJlIHRoZQorICAgInNpbXBsZSIgaGFuZGxlciAobm90ICJlZGdlIiBub3IgImxldmVsIikuICBBZnRlciB0aGUgaGFuZGxlciBjb21wbGV0ZXMsCisgICB0aGUgcGFyZW50IElSUSBzaG91bGQgYmUgdW5tYXNrZWQsIGFuZCB0aGUgc3RhdHVzIG9mIGFsbCBjaGlsZHJlbiBtdXN0CisgICBiZSByZS1jaGVja2VkIGZvciBwZW5kaW5nIGV2ZW50cy4gIChzZWUgdGhlIE5lcG9uc2V0IElSUSBoYW5kbGVyIGZvcgorICAgZGV0YWlscykuCisKKzcuIGZpeHVwX2lycSgpIGlzIGdvbmUsIGFzIGlzIGluY2x1ZGUvYXNtLWFybS9hcmNoLSovaXJxLmgKKworUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHNvbHZlIGFsbCBwcm9ibGVtcyAtIHNvbWUgb2YgdGhlbSBhcmUKK2hhcmR3YXJlIGJhc2VkLiAgTWl4aW5nIGxldmVsLWJhc2VkIGFuZCBlZGdlLWJhc2VkIElSUXMgb24gdGhlIHNhbWUKK3BhcmVudCBzaWduYWwgKGVnIG5lcG9uc2V0KSBpcyBvbmUgc3VjaCBhcmVhIHdoZXJlIGEgc29mdHdhcmUgYmFzZWQKK3NvbHV0aW9uIGNhbid0IHByb3ZpZGUgdGhlIGZ1bGwgYW5zd2VyIHRvIGxvdyBJUlEgbGF0ZW5jeS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vTmV0d2luZGVyIGIvRG9jdW1lbnRhdGlvbi9hcm0vTmV0d2luZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9OZXR3aW5kZXIKQEAgLTAsMCArMSw3OCBAQAorTmV0V2luZGVyIHNwZWNpZmljIGRvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBOZXRXaW5kZXIgaXMgYSBzbWFsbCBsb3ctcG93ZXIgY29tcHV0ZXIsIHByaW1hcmlseSBkZXNpZ25lZAordG8gcnVuIExpbnV4LiAgSXQgaXMgYmFzZWQgYXJvdW5kIHRoZSBTdHJvbmdBUk0gUklTQyBwcm9jZXNzb3IsCitEQzIxMjg1IFBDSSBicmlkZ2UsIHdpdGggUEMtdHlwZSBoYXJkd2FyZSBnbHVlZCBhcm91bmQgaXQuCisKK1BvcnQgdXNhZ2UKKz09PT09PT09PT0KKworTWluICAgIC0gTWF4CURlc2NyaXB0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzB4MDAwMCAtIDB4MDAwZglETUExCisweDAwMjAgLSAweDAwMjEJUElDMQorMHgwMDYwIC0gMHgwMDZmCUtleWJvYXJkCisweDAwNzAgLSAweDAwN2YJUlRDCisweDAwODAgLSAweDAwODcJRE1BMQorMHgwMDg4IC0gMHgwMDhmCURNQTIKKzB4MDBhMCAtIDB4MDBhMwlQSUMyCisweDAwYzAgLSAweDAwZGYJRE1BMgorMHgwMTgwIC0gMHgwMTg3CUlSREEKKzB4MDFmMCAtIDB4MDFmNglpZGUwCisweDAyMDEJCUdhbWUgcG9ydAorMHgwMjAzCQlSV0EwMTAgY29uZmlndXJhdGlvbiByZWFkCisweDAyMjAgLSA/CVNvdW5kQmxhc3RlcgorMHgwMjUwIC0gPwlXYXZlQXJ0aXN0CisweDAyNzkJCVJXQTAxMCBjb25maWd1cmF0aW9uIGluZGV4CisweDAyZjggLSAweDAyZmYJU2VyaWFsIHR0eVMxCisweDAzMDAgLSAweDAzMWYJRXRoZXIxMAorMHgwMzM4CQlHUElPMQorMHgwMzNhCQlHUElPMgorMHgwMzcwIC0gMHgwMzcxCVc4Mzk3N0YgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKzB4MDM4OCAtID8JQWRMaWIKKzB4MDNjMCAtIDB4MDNkZglWR0EKKzB4MDNmNgkJaWRlMAorMHgwM2Y4IC0gMHgwM2ZmCVNlcmlhbCB0dHlTMAorMHgwNDAwIC0gMHgwNDA4CURDMjExNDMKKzB4MDQ4MCAtIDB4MDQ4NwlETUExCisweDA0ODggLSAweDA0OGYJRE1BMgorMHgwYTc5CQlSV0EwMTAgY29uZmlndXJhdGlvbiB3cml0ZQorMHhlODAwIC0gMHhlODBmCWlkZTAvaWRlMSBCTSBETUEKKworCitJbnRlcnJ1cHQgdXNhZ2UKKz09PT09PT09PT09PT09PQorCitJUlEJdHlwZQlEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMAlJU0EJMTAwSHogdGltZXIKKyAxCUlTQQlLZXlib2FyZAorIDIJSVNBCWNhc2NhZGUKKyAzCUlTQQlTZXJpYWwgdHR5UzEKKyA0CUlTQQlTZXJpYWwgdHR5UzAKKyA1CUlTQQlQUy8yIG1vdXNlCisgNglJU0EJSVJEQQorIDcJSVNBCVByaW50ZXIKKyA4CUlTQQlSVEMgYWxhcm0KKyA5CUlTQQorMTAJSVNBCUdQMTAgKE9yYW5nZSByZXNldCBidXR0b24pCisxMQlJU0EKKzEyCUlTQQlXYXZlQXJ0aXN0CisxMwlJU0EKKzE0CUlTQQloZGExCisxNQlJU0EKKworRE1BIHVzYWdlCis9PT09PT09PT0KKworRE1BCXR5cGUJRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDAJSVNBCUlSREEKKyAxCUlTQQorIDIJSVNBCWNhc2NhZGUKKyAzCUlTQQlXYXZlQXJ0aXN0CisgNAlJU0EKKyA1CUlTQQorIDYJSVNBCisgNwlJU0EJV2F2ZUFydGlzdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vUG9ydGluZyBiL0RvY3VtZW50YXRpb24vYXJtL1BvcnRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5MjIzMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1BvcnRpbmcKQEAgLTAsMCArMSwxMzUgQEAKK1Rha2VuIGZyb20gbGlzdCBhcmNoaXZlIGF0IGh0dHA6Ly9saXN0cy5hcm0ubGludXgub3JnLnVrL3BpcGVybWFpbC9saW51eC1hcm0ta2VybmVsLzIwMDEtSnVseS8wMDQwNjQuaHRtbAorCitJbml0aWFsIGRlZmluaXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc3ltYm9sIGRlZmluaXRpb25zIHJlbHkgb24geW91IGtub3dpbmcgdGhlIHRyYW5zbGF0aW9uIHRoYXQKK19fdmlydF90b19waHlzKCkgZG9lcyBmb3IgeW91ciBtYWNoaW5lLiAgVGhpcyBtYWNybyBjb252ZXJ0cyB0aGUgcGFzc2VkCit2aXJ0dWFsIGFkZHJlc3MgdG8gYSBwaHlzaWNhbCBhZGRyZXNzLiAgTm9ybWFsbHksIGl0IGlzIHNpbXBseToKKworCQlwaHlzID0gdmlydCAtIFBBR0VfT0ZGU0VUICsgUEhZU19PRkZTRVQKKworCitEZWNvbXByZXNzb3IgU3ltYm9scworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWlRFWFRBRERSCisJU3RhcnQgYWRkcmVzcyBvZiBkZWNvbXByZXNzb3IuICBUaGVyZSdzIG5vIHBvaW50IGluIHRhbGtpbmcgYWJvdXQKKwl2aXJ0dWFsIG9yIHBoeXNpY2FsIGFkZHJlc3NlcyBoZXJlLCBzaW5jZSB0aGUgTU1VIHdpbGwgYmUgb2ZmIGF0CisJdGhlIHRpbWUgd2hlbiB5b3UgY2FsbCB0aGUgZGVjb21wcmVzc29yIGNvZGUuICBZb3Ugbm9ybWFsbHkgY2FsbAorCXRoZSBrZXJuZWwgYXQgdGhpcyBhZGRyZXNzIHRvIHN0YXJ0IGl0IGJvb3RpbmcuICBUaGlzIGRvZXNuJ3QgaGF2ZQorCXRvIGJlIGxvY2F0ZWQgaW4gUkFNLCBpdCBjYW4gYmUgaW4gZmxhc2ggb3Igb3RoZXIgcmVhZC1vbmx5IG9yCisJcmVhZC13cml0ZSBhZGRyZXNzYWJsZSBtZWRpdW0uCisKK1pCU1NBRERSCisJU3RhcnQgYWRkcmVzcyBvZiB6ZXJvLWluaXRpYWxpc2VkIHdvcmsgYXJlYSBmb3IgdGhlIGRlY29tcHJlc3Nvci4KKwlUaGlzIG11c3QgYmUgcG9pbnRpbmcgYXQgUkFNLiAgVGhlIGRlY29tcHJlc3NvciB3aWxsIHplcm8gaW5pdGlhbGlzZQorCXRoaXMgZm9yIHlvdS4gIEFnYWluLCB0aGUgTU1VIHdpbGwgYmUgb2ZmLgorCitaUkVMQUREUgorCVRoaXMgaXMgdGhlIGFkZHJlc3Mgd2hlcmUgdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwgd2lsbCBiZSB3cml0dGVuLAorCWFuZCBldmVudHVhbGx5IGV4ZWN1dGVkLiAgVGhlIGZvbGxvd2luZyBjb25zdHJhaW50IG11c3QgYmUgdmFsaWQ6CisKKwkJX192aXJ0X3RvX3BoeXMoVEVYVEFERFIpID09IFpSRUxBRERSCisKKwlUaGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBrZXJuZWwgaXMgY2FyZWZ1bGx5IGNvZGVkIHRvIGJlIHBvc2l0aW9uCisJaW5kZXBlbmRlbnQuCisKK0lOSVRSRF9QSFlTCisJUGh5c2ljYWwgYWRkcmVzcyB0byBwbGFjZSB0aGUgaW5pdGlhbCBSQU0gZGlzay4gIE9ubHkgcmVsZXZhbnQgaWYKKwl5b3UgYXJlIHVzaW5nIHRoZSBib290cEltYWdlIHN0dWZmICh3aGljaCBvbmx5IHdvcmtzIG9uIHRoZSBvbGQKKwlzdHJ1Y3QgcGFyYW1fc3RydWN0KS4KKworSU5JVFJEX1ZJUlQKKwlWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGluaXRpYWwgUkFNIGRpc2suICBUaGUgZm9sbG93aW5nICBjb25zdHJhaW50CisJbXVzdCBiZSB2YWxpZDoKKworCQlfX3ZpcnRfdG9fcGh5cyhJTklUUkRfVklSVCkgPT0gSU5JVFJEX1BIWVMKKworUEFSQU1TX1BIWVMKKwlQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzdHJ1Y3QgcGFyYW1fc3RydWN0IG9yIHRhZyBsaXN0LCBnaXZpbmcgdGhlCisJa2VybmVsIHZhcmlvdXMgcGFyYW1ldGVycyBhYm91dCBpdHMgZXhlY3V0aW9uIGVudmlyb25tZW50LgorCisKK0tlcm5lbCBTeW1ib2xzCistLS0tLS0tLS0tLS0tLQorCitQSFlTX09GRlNFVAorCVBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGJhbmsgb2YgUkFNLgorCitQQUdFX09GRlNFVAorCVZpcnR1YWwgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYmFuayBvZiBSQU0uICBEdXJpbmcgdGhlIGtlcm5lbAorCWJvb3QgcGhhc2UsIHZpcnR1YWwgYWRkcmVzcyBQQUdFX09GRlNFVCB3aWxsIGJlIG1hcHBlZCB0byBwaHlzaWNhbAorCWFkZHJlc3MgUEhZU19PRkZTRVQsIGFsb25nIHdpdGggYW55IG90aGVyIG1hcHBpbmdzIHlvdSBzdXBwbHkuCisJVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgdmFsdWUgYXMgVEFTS19TSVpFLgorCitUQVNLX1NJWkUKKwlUaGUgbWF4aW11bSBzaXplIG9mIGEgdXNlciBwcm9jZXNzIGluIGJ5dGVzLiAgU2luY2UgdXNlciBzcGFjZQorCWFsd2F5cyBzdGFydHMgYXQgemVybywgdGhpcyBpcyB0aGUgbWF4aW11bSBhZGRyZXNzIHRoYXQgYSB1c2VyCisJcHJvY2VzcyBjYW4gYWNjZXNzKzEuICBUaGUgdXNlciBzcGFjZSBzdGFjayBncm93cyBkb3duIGZyb20gdGhpcworCWFkZHJlc3MuCisKKwlBbnkgdmlydHVhbCBhZGRyZXNzIGJlbG93IFRBU0tfU0laRSBpcyBkZWVtZWQgdG8gYmUgdXNlciBwcm9jZXNzCisJYXJlYSwgYW5kIHRoZXJlZm9yZSBtYW5hZ2VkIGR5bmFtaWNhbGx5IG9uIGEgcHJvY2VzcyBieSBwcm9jZXNzCisJYmFzaXMgYnkgdGhlIGtlcm5lbC4gIEknbGwgY2FsbCB0aGlzIHRoZSB1c2VyIHNlZ21lbnQuCisKKwlBbnl0aGluZyBhYm92ZSBUQVNLX1NJWkUgaXMgY29tbW9uIHRvIGFsbCBwcm9jZXNzZXMuICBJJ2xsIGNhbGwKKwl0aGlzIHRoZSBrZXJuZWwgc2VnbWVudC4KKworCShJbiBvdGhlciB3b3JkcywgeW91IGNhbid0IHB1dCBJTyBtYXBwaW5ncyBiZWxvdyBUQVNLX1NJWkUsIGFuZAorCWhlbmNlIFBBR0VfT0ZGU0VUKS4KKworVEVYVEFERFIKKwlWaXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2Yga2VybmVsLCBub3JtYWxseSBQQUdFX09GRlNFVCArIDB4ODAwMC4KKwlUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwgaW1hZ2UgZW5kcyB1cC4gIFdpdGggdGhlIGxhdGVzdCBrZXJuZWxzLAorCWl0IG11c3QgYmUgbG9jYXRlZCBhdCAzMjc2OCBieXRlcyBpbnRvIGEgMTI4TUIgcmVnaW9uLiAgUHJldmlvdXMKKwlrZXJuZWxzIHBsYWNlZCBhIHJlc3RyaWN0aW9uIG9mIDI1Nk1CIGhlcmUuCisKK0RBVEFBRERSCisJVmlydHVhbCBhZGRyZXNzIGZvciB0aGUga2VybmVsIGRhdGEgc2VnbWVudC4gIE11c3Qgbm90IGJlIGRlZmluZWQKKwl3aGVuIHVzaW5nIHRoZSBkZWNvbXByZXNzb3IuCisKK1ZNQUxMT0NfU1RBUlQKK1ZNQUxMT0NfRU5ECisJVmlydHVhbCBhZGRyZXNzZXMgYm91bmRpbmcgdGhlIHZtYWxsb2MoKSBhcmVhLiAgVGhlcmUgbXVzdCBub3QgYmUKKwlhbnkgc3RhdGljIG1hcHBpbmdzIGluIHRoaXMgYXJlYTsgdm1hbGxvYyB3aWxsIG92ZXJ3cml0ZSB0aGVtLgorCVRoZSBhZGRyZXNzZXMgbXVzdCBhbHNvIGJlIGluIHRoZSBrZXJuZWwgc2VnbWVudCAoc2VlIGFib3ZlKS4KKwlOb3JtYWxseSwgdGhlIHZtYWxsb2MoKSBhcmVhIHN0YXJ0cyBWTUFMTE9DX09GRlNFVCBieXRlcyBhYm92ZSB0aGUKKwlsYXN0IHZpcnR1YWwgUkFNIGFkZHJlc3MgKGZvdW5kIHVzaW5nIHZhcmlhYmxlIGhpZ2hfbWVtb3J5KS4KKworVk1BTExPQ19PRkZTRVQKKwlPZmZzZXQgbm9ybWFsbHkgaW5jb3Jwb3JhdGVkIGludG8gVk1BTExPQ19TVEFSVCB0byBwcm92aWRlIGEgaG9sZQorCWJldHdlZW4gdmlydHVhbCBSQU0gYW5kIHRoZSB2bWFsbG9jIGFyZWEuICBXZSBkbyB0aGlzIHRvIGFsbG93CisJb3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgKGVnLCBzb21ldGhpbmcgd3JpdGluZyBvZmYgdGhlIGVuZAorCW9mIHRoZSBtYXBwZWQgbWVtb3J5IG1hcCkgdG8gYmUgY2F1Z2h0LiAgTm9ybWFsbHkgc2V0IHRvIDhNQi4KKworQXJjaGl0ZWN0dXJlIFNwZWNpZmljIE1hY3JvcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCT09UX01FTShwcmFtLHBpbyx2aW8pCisJYHByYW0nIHNwZWNpZmllcyB0aGUgcGh5c2ljYWwgc3RhcnQgYWRkcmVzcyBvZiBSQU0uICBNdXN0IGFsd2F5cworCWJlIHByZXNlbnQsIGFuZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgUEhZU19PRkZTRVQuCisKKwlgcGlvJyBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhbiA4TUIgcmVnaW9uIGNvbnRhaW5pbmcgSU8gZm9yCisJdXNlIHdpdGggdGhlIGRlYnVnZ2luZyBtYWNyb3MgaW4gYXJjaC9hcm0va2VybmVsL2RlYnVnLWFybXYuUy4KKworCWB2aW8nIGlzIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIDhNQiBkZWJ1Z2dpbmcgcmVnaW9uLgorCisJSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZGVidWdnaW5nIHJlZ2lvbiB3aWxsIGJlIHJlLWluaXRpYWxpc2VkCisJYnkgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlIGxhdGVyIGluIHRoZSBjb2RlICh2aWEgdGhlCisJTUFQSU8gZnVuY3Rpb24pLgorCitCT09UX1BBUkFNUworCVNhbWUgYXMsIGFuZCBzZWUgUEFSQU1TX1BIWVMuCisKK0ZJWFVQKGZ1bmMpCisJTWFjaGluZSBzcGVjaWZpYyBmaXh1cHMsIHJ1biBiZWZvcmUgbWVtb3J5IHN1YnN5c3RlbXMgaGF2ZSBiZWVuCisJaW5pdGlhbGlzZWQuCisKK01BUElPKGZ1bmMpCisJTWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbiB0byBtYXAgSU8gYXJlYXMgKGluY2x1ZGluZyB0aGUgZGVidWcKKwlyZWdpb24gYWJvdmUpLgorCitJTklUSVJRKGZ1bmMpCisJTWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbiB0byBpbml0aWFsaXNlIGludGVycnVwdHMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmY3MThlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vUkVBRE1FCkBAIC0wLDAgKzEsMTk4IEBACisJCQkgICBBUk0gTGludXggMi42CisJCQkgICA9PT09PT09PT09PT09CisKKyAgICBQbGVhc2UgY2hlY2sgPGZ0cDovL2Z0cC5hcm0ubGludXgub3JnLnVrL3B1Yi9hcm1saW51eD4gZm9yCisgICAgdXBkYXRlcy4KKworQ29tcGlsYXRpb24gb2Yga2VybmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJbiBvcmRlciB0byBjb21waWxlIEFSTSBMaW51eCwgeW91IHdpbGwgbmVlZCBhIGNvbXBpbGVyIGNhcGFibGUgb2YKKyAgZ2VuZXJhdGluZyBBUk0gRUxGIGNvZGUgd2l0aCBHTlUgZXh0ZW5zaW9ucy4gIEdDQyAyLjk1LjEsIEVHQ1MKKyAgMS4xLjIsIGFuZCBHQ0MgMy4zIGFyZSBrbm93biB0byBiZSBnb29kIGNvbXBpbGVycy4gIEZvcnR1bmF0ZWx5LCB5b3UKKyAgbmVlZG4ndCBndWVzcy4gIFRoZSBrZXJuZWwgd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgeW91ciBjb21waWxlciBpcworICBhIHJlY29nbml6ZWQgb2ZmZW5kZXIuCisKKyAgVG8gYnVpbGQgQVJNIExpbnV4IG5hdGl2ZWx5LCB5b3Ugc2hvdWxkbid0IGhhdmUgdG8gYWx0ZXIgdGhlIEFSQ0ggPSBsaW5lCisgIGluIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUuICBIb3dldmVyLCBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgQVJNIExpbnV4IEVMRgorICB0b29scyBpbnN0YWxsZWQgYXMgZGVmYXVsdCwgdGhlbiB5b3Ugc2hvdWxkIGNoYW5nZSB0aGUgQ1JPU1NfQ09NUElMRQorICBsaW5lIGFzIGRldGFpbGVkIGJlbG93LgorCisgIElmIHlvdSB3aXNoIHRvIGNyb3NzLWNvbXBpbGUsIHRoZW4gYWx0ZXIgdGhlIGZvbGxvd2luZyBsaW5lcyBpbiB0aGUgdG9wCisgIGxldmVsIG1ha2UgZmlsZToKKworICAgIEFSQ0ggPSA8d2hhdGV2ZXI+CisJd2l0aAorICAgIEFSQ0ggPSBhcm0KKworCWFuZAorCisgICAgQ1JPU1NfQ09NUElMRT0KKwl0bworICAgIENST1NTX0NPTVBJTEU9PHlvdXItcGF0aC10by15b3VyLWNvbXBpbGVyLXdpdGhvdXQtZ2NjPgorCWVnLgorICAgIENST1NTX0NPTVBJTEU9YXJtLWxpbnV4LQorCisgIERvIGEgJ21ha2UgY29uZmlnJywgZm9sbG93ZWQgYnkgJ21ha2UgSW1hZ2UnIHRvIGJ1aWxkIHRoZSBrZXJuZWwgCisgIChhcmNoL2FybS9ib290L0ltYWdlKS4gIEEgY29tcHJlc3NlZCBpbWFnZSBjYW4gYmUgYnVpbHQgYnkgZG9pbmcgYSAKKyAgJ21ha2UgekltYWdlJyBpbnN0ZWFkIG9mICdtYWtlIEltYWdlJy4KKworCitCdWcgcmVwb3J0cyBldGMKKy0tLS0tLS0tLS0tLS0tLQorCisgIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gdGhlIHBhdGNoIHN5c3RlbS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL3BhdGNoZXMvaW5mby5odG1sICBBbHdheXMgaW5jbHVkZSBzb21lCisgIGV4cGxhbmF0aW9uIGFzIHRvIHdoYXQgdGhlIHBhdGNoIGRvZXMgYW5kIHdoeSBpdCBpcyBuZWVkZWQuCisKKyAgQnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbnQgdG8gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrLAorICBvciBzdWJtaXR0ZWQgdGhyb3VnaCB0aGUgd2ViIGZvcm0gYXQKKyAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2Zvcm1zL3NvbHV0aW9uLnNodG1sCisKKyAgV2hlbiBzZW5kaW5nIGJ1ZyByZXBvcnRzLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhleSBjb250YWluIGFsbCByZWxldmFudAorICBpbmZvcm1hdGlvbiwgZWcuIHRoZSBrZXJuZWwgbWVzc2FnZXMgdGhhdCB3ZXJlIHByaW50ZWQgYmVmb3JlL2R1cmluZworICB0aGUgcHJvYmxlbSwgd2hhdCB5b3Ugd2VyZSBkb2luZywgZXRjLgorCisKK0luY2x1ZGUgZmlsZXMKKy0tLS0tLS0tLS0tLS0KKworICBTZXZlcmFsIG5ldyBpbmNsdWRlIGRpcmVjdG9yaWVzIGhhdmUgYmVlbiBjcmVhdGVkIHVuZGVyIGluY2x1ZGUvYXNtLWFybSwKKyAgd2hpY2ggYXJlIHRoZXJlIHRvIHJlZHVjZSB0aGUgY2x1dHRlciBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gIFRoZXNlCisgIGRpcmVjdG9yaWVzLCBhbmQgdGhlaXIgcHVycG9zZSBpcyBsaXN0ZWQgYmVsb3c6CisKKyAgIGFyY2gtKgltYWNoaW5lL3BsYXRmb3JtIHNwZWNpZmljIGhlYWRlciBmaWxlcworICAgaGFyZHdhcmUJZHJpdmVyLWludGVybmFsIEFSTSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMvZGVmaW5pdGlvbnMKKyAgIG1hY2gJCWRlc2NyaXB0aW9ucyBvZiBnZW5lcmljIEFSTSB0byBzcGVjaWZpYyBtYWNoaW5lIGludGVyZmFjZXMKKyAgIHByb2MtKglwcm9jZXNzb3IgZGVwZW5kZW50IGhlYWRlciBmaWxlcyAoY3VycmVudGx5IG9ubHkgdHdvCisJCWNhdGVnb3JpZXMpCisKKworTWFjaGluZS9QbGF0Zm9ybSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgQVJNIHRyZWUgY29udGFpbnMgc3VwcG9ydCBmb3IgYSBsb3Qgb2YgZGlmZmVyZW50IG1hY2hpbmUgdHlwZXMuICBUbworICBjb250aW51ZSBzdXBwb3J0aW5nIHRoZXNlIGRpZmZlcmVuY2VzLCBpdCBoYXMgYmVjb21lIG5lY2Vzc2FyeSB0byBzcGxpdAorICBtYWNoaW5lLXNwZWNpZmljIHBhcnRzIGJ5IGRpcmVjdG9yeS4gIEZvciB0aGlzLCB0aGUgbWFjaGluZSBjYXRlZ29yeSBpcworICB1c2VkIHRvIHNlbGVjdCB3aGljaCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZ2V0IGluY2x1ZGVkICh3ZSB3aWxsIHVzZQorICAkKE1BQ0hJTkUpIHRvIHJlZmVyIHRvIHRoZSBjYXRlZ29yeSkKKworICBUbyB0aGlzIGVuZCwgd2Ugbm93IGhhdmUgYXJjaC9hcm0vbWFjaC0kKE1BQ0hJTkUpIGRpcmVjdG9yaWVzIHdoaWNoIGFyZQorICBkZXNpZ25lZCB0byBob3VzZSB0aGUgbm9uLWRyaXZlciBmaWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgKGVnLCBQQ0ksCisgIG1lbW9yeSBtYW5hZ2VtZW50LCBhcmNoaXRlY3R1cmUgZGVmaW5pdGlvbnMgZXRjKS4gIEZvciBhbGwgZnV0dXJlCisgIG1hY2hpbmVzLCB0aGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIGluY2x1ZGUvYXNtLWFybS9hcmNoLSQoTUFDSElORSkKKyAgZGlyZWN0b3J5LgorCisKK01vZHVsZXMKKy0tLS0tLS0KKworICBBbHRob3VnaCBtb2R1bGFyaXNhdGlvbiBpcyBzdXBwb3J0ZWQgKGFuZCByZXF1aXJlZCBmb3IgdGhlIEZQIGVtdWxhdG9yKSwKKyAgZWFjaCBtb2R1bGUgb24gYW4gQVJNMi9BUk0yNTAvQVJNMyBtYWNoaW5lIHdoZW4gaXMgbG9hZGVkIHdpbGwgdGFrZQorICBtZW1vcnkgdXAgdG8gdGhlIG5leHQgMzJrIGJvdW5kYXJ5IGR1ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcGFnZXMuCisgIFRoZXJlZm9yZSwgbW9kdWxhcmlzYXRpb24gb24gdGhlc2UgbWFjaGluZXMgcmVhbGx5IHdvcnRoIGl0PworCisgIEhvd2V2ZXIsIEFSTTYgYW5kIHVwIG1hY2hpbmVzIGFsbG93IG1vZHVsZXMgdG8gdGFrZSBtdWx0aXBsZXMgb2YgNGssIGFuZAorICBhcyBzdWNoIEFjb3JuIFJpc2NQQ3MgYW5kIG90aGVyIGFyY2hpdGVjdHVyZXMgdXNpbmcgdGhlc2UgcHJvY2Vzc29ycyBjYW4KKyAgbWFrZSBnb29kIHVzZSBvZiBtb2R1bGFyaXNhdGlvbi4KKworCitBREZTIEltYWdlIGZpbGVzCistLS0tLS0tLS0tLS0tLS0tCisKKyAgWW91IGNhbiBhY2Nlc3MgaW1hZ2UgZmlsZXMgb24geW91ciBBREZTIHBhcnRpdGlvbnMgYnkgbW91bnRpbmcgdGhlIEFERlMKKyAgcGFydGl0aW9uLCBhbmQgdGhlbiB1c2luZyB0aGUgbG9vcGJhY2sgZGV2aWNlIGRyaXZlci4gIFlvdSBtdXN0IGhhdmUKKyAgbG9zZXR1cCBpbnN0YWxsZWQuCisKKyAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgUENFbXVsYXRvciBET1MgcGFydGl0aW9ucyBoYXZlIGEgcGFydGl0aW9uIHRhYmxlIGF0CisgIHRoZSBzdGFydCwgYW5kIGFzIHN1Y2gsIHlvdSB3aWxsIGhhdmUgdG8gZ2l2ZSAnLW8gb2Zmc2V0JyB0byBsb3NldHVwLgorCisKK1JlcXVlc3QgdG8gZGV2ZWxvcGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgV2hlbiB3cml0aW5nIGRldmljZSBkcml2ZXJzIHdoaWNoIGluY2x1ZGUgYSBzZXBhcmF0ZSBhc3NlbWJsZXIgZmlsZSwgcGxlYXNlCisgIGluY2x1ZGUgaXQgaW4gd2l0aCB0aGUgQyBmaWxlLCBhbmQgbm90IHRoZSBhcmNoL2FybS9saWIgZGlyZWN0b3J5LiAgVGhpcworICBhbGxvd3MgdGhlIGRyaXZlciB0byBiZSBjb21waWxlZCBhcyBhIGxvYWRhYmxlIG1vZHVsZSB3aXRob3V0IHJlcXVpcmluZworICBoYWxmIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4KKworICBJbiBnZW5lcmFsLCB0cnkgdG8gYXZvaWQgdXNpbmcgYXNzZW1ibGVyIHVubGVzcyBpdCBpcyByZWFsbHkgbmVjZXNzYXJ5LiAgSXQKKyAgbWFrZXMgZHJpdmVycyBmYXIgbGVzcyBlYXN5IHRvIHBvcnQgdG8gb3RoZXIgaGFyZHdhcmUuCisKKworU1Q1MDYgaGFyZCBkcml2ZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIFNUNTA2IGhhcmQgZHJpdmUgY29udHJvbGxlcnMgc2VlbSB0byBiZSB3b3JraW5nIGZpbmUgKGlmIGEgbGl0dGxlCisgIHNsb3dseSkuICBBdCB0aGUgbW9tZW50IHRoZXkgd2lsbCBvbmx5IHdvcmsgb2ZmIHRoZSBjb250cm9sbGVycyBvbiBhbgorICBBNHgwJ3MgbW90aGVyYm9hcmQsIGJ1dCBmb3IgaXQgdG8gd29yayBvZmYgYSBQb2R1bGUganVzdCByZXF1aXJlcworICBzb21lb25lIHdpdGggYSBwb2R1bGUgdG8gYWRkIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSBJUlEgbWFzayBhbmQgdGhlCisgIEhEQyBiYXNlIHRvIHRoZSBzb3VyY2UuCisKKyAgQXMgb2YgMzEvMy85NiBpdCB3b3JrcyB3aXRoIHR3byBkcml2ZXMgKHlvdSBzaG91bGQgZ2V0IHRoZSBBREZTCisgICpjb25maWd1cmUgaGFyZGRyaXZlIHNldCB0byAyKS4gSSd2ZSBnb3QgYW4gaW50ZXJuYWwgMjBNQiBhbmQgYSBncmVhdAorICBiaWcgZXh0ZXJuYWwgNS4yNSIgRkggNjRNQiBkcml2ZSAod2hvIGNvdWxkIGV2ZXIgd2FudCBtb3JlIDotKSApLgorCisgIEkndmUganVzdCBnb3QgMjQwSy9zIG9mZiBpdCAoYSBkZCB3aXRoIGJzPTEyOGspOyB0aGF0cyBhYm91dCBoYWxmIG9mIHdoYXQKKyAgUmlzY09TIGdldHM7IGJ1dCBpdCdzIGEgaGVjayBvZiBhIGxvdCBiZXR0ZXIgdGhhbiB0aGUgNTBLL3MgSSB3YXMgZ2V0dGluZworICBsYXN0IHdlZWsgOi0pCisKKyAgS25vd24gYnVnOiBEcml2ZSBkYXRhIGVycm9ycyBjYW4gY2F1c2UgYSBoYW5nOyBpbmNsdWRpbmcgY2FzZXMgd2hlcmUKKyAgdGhlIGNvbnRyb2xsZXIgaGFzIGZpeGVkIHRoZSBlcnJvciB1c2luZyBFQ0MuIChQb3NzaWJseSBPTkxZCisgIGluIHRoYXQgY2FzZS4uLmhtbSkuCisKKworMTc3MiBGbG9wcHkKKy0tLS0tLS0tLS0tCisgIFRoaXMgYWxzbyBzZWVtcyB0byB3b3JrIE9LLCBidXQgaGFzbid0IGJlZW4gc3RyZXNzZWQgbXVjaCBsYXRlbHkuICBJdAorICBoYXNuJ3QgZ290IGFueSBjb2RlIGZvciBkaXNjIGNoYW5nZSBkZXRlY3Rpb24gaW4gdGhlcmUgYXQgdGhlIG1vbWVudCB3aGljaAorICBjb3VsZCBiZSBhIGJpdCBvZiBhIHByb2JsZW0hICBTdWdnZXN0aW9ucyBvbiB0aGUgY29ycmVjdCB3YXkgdG8gZG8gdGhpcworICBhcmUgd2VsY29tZS4KKworCitDT05GSUdfTUFDSF8gYW5kIENPTkZJR19BUkNIXworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQSBjaGFuZ2Ugd2FzIG1hZGUgaW4gMjAwMyB0byB0aGUgbWFjcm8gbmFtZXMgZm9yIG5ldyBtYWNoaW5lcy4KKyAgSGlzdG9yaWNhbGx5LCBDT05GSUdfQVJDSF8gd2FzIHVzZWQgZm9yIHRoZSBib25hZmlkZSBhcmNoaXRlY3R1cmUsCisgIGUuZy4gU0ExMTAwLCBhcyB3ZWxsIGFzIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYXJjaGl0ZWN0dXJlLAorICBlLmcuIEFzc2FiZXQuICBJdCB3YXMgZGVjaWRlZCB0byBjaGFuZ2UgdGhlIGltcGxlbWVudGF0aW9uIG1hY3JvcworICB0byByZWFkIENPTkZJR19NQUNIXyBmb3IgY2xhcml0eS4gIE1vcmVvdmVyLCBhIHJldHJvYWN0aXZlIGZpeHVwIGhhcworICBub3QgYmVlbiBtYWRlIGJlY2F1c2UgaXQgd291bGQgY29tcGxpY2F0ZSBwYXRjaGluZy4KKworICBQcmV2aW91cyByZWdpc3RyYXRpb25zIG1heSBiZSBmb3VuZCBvbmxpbmUuCisKKyAgICA8aHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8+CisKK0tlcm5lbCBlbnRyeSAoaGVhZC5TKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIGluaXRpYWwgZW50cnkgaW50byB0aGUga2VybmVsIGlzIHZpYSBoZWFkLlMsIHdoaWNoIHVzZXMgbWFjaGluZQorICBpbmRlcGVuZGVudCBjb2RlLiAgVGhlIG1hY2hpbmUgaXMgc2VsZWN0ZWQgYnkgdGhlIHZhbHVlIG9mICdyMScgb24KKyAgZW50cnksIHdoaWNoIG11c3QgYmUga2VwdCB1bmlxdWUuCisKKyAgRHVlIHRvIHRoZSBsYXJnZSBudW1iZXIgb2YgbWFjaGluZXMgd2hpY2ggdGhlIEFSTSBwb3J0IG9mIExpbnV4IHByb3ZpZGVzCisgIGZvciwgd2UgaGF2ZSBhIG1ldGhvZCB0byBtYW5hZ2UgdGhpcyB3aGljaCBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgZW5kIHVwCisgIGR1cGxpY2F0aW5nIGxhcmdlIGFtb3VudHMgb2YgY29kZS4KKworICBXZSBncm91cCBtYWNoaW5lIChvciBwbGF0Zm9ybSkgc3VwcG9ydCBjb2RlIGludG8gbWFjaGluZSBjbGFzc2VzLiAgQQorICBjbGFzcyB0eXBpY2FsbHkgYmFzZWQgYXJvdW5kIG9uZSBvciBtb3JlIHN5c3RlbSBvbiBhIGNoaXAgZGV2aWNlcywgYW5kCisgIGFjdHMgYXMgYSBuYXR1cmFsIGNvbnRhaW5lciBhcm91bmQgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbnMuICBUaGVzZQorICBjbGFzc2VzIGFyZSBnaXZlbiBkaXJlY3RvcmllcyAtIGFyY2gvYXJtL21hY2gtPGNsYXNzPiBhbmQKKyAgaW5jbHVkZS9hc20tYXJtL2FyY2gtPGNsYXNzPiAtIHdoaWNoIGNvbnRhaW4gdGhlIHNvdXJjZSBmaWxlcyB0bworICBzdXBwb3J0IHRoZSBtYWNoaW5lIGNsYXNzLiAgVGhpcyBkaXJlY3RvcmllcyBhbHNvIGNvbnRhaW4gYW55IG1hY2hpbmUKKyAgc3BlY2lmaWMgc3VwcG9ydGluZyBjb2RlLgorCisgIEZvciBleGFtcGxlLCB0aGUgU0ExMTAwIGNsYXNzIGlzIGJhc2VkIHVwb24gdGhlIFNBMTEwMCBhbmQgU0ExMTEwIFNvQworICBkZXZpY2VzLCBhbmQgY29udGFpbnMgdGhlIGNvZGUgdG8gc3VwcG9ydCB0aGUgd2F5IHRoZSBvbi1ib2FyZCBhbmQgb2ZmLQorICBib2FyZCBkZXZpY2VzIGFyZSB1c2VkLCBvciB0aGUgZGV2aWNlIGlzIHNldHVwLCBhbmQgcHJvdmlkZXMgdGhhdAorICBtYWNoaW5lIHNwZWNpZmljICJwZXJzb25hbGl0eS4iCisKKyAgVGhpcyBmaW5lLWdyYWluZWQgbWFjaGluZSBzcGVjaWZpYyBzZWxlY3Rpb24gaXMgY29udHJvbGxlZCBieSB0aGUgbWFjaGluZQorICB0eXBlIElELCB3aGljaCBhY3RzIGJvdGggYXMgYSBydW4tdGltZSBhbmQgYSBjb21waWxlLXRpbWUgY29kZSBzZWxlY3Rpb24KKyAgbWV0aG9kLgorCisgIFlvdSBjYW4gcmVnaXN0ZXIgYSBuZXcgbWFjaGluZSB2aWEgdGhlIHdlYiBzaXRlIGF0OgorCisgICAgPGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvPgorCistLS0KK1J1c3NlbGwgS2luZyAoMTUvMDMvMjAwNCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9BRFNCaXRzeSBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9BRFNCaXRzeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ3YzM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0FEU0JpdHN5CkBAIC0wLDAgKzEsNDMgQEAKK0FEUyBCaXRzeSBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIKKyhJdCBpcyBkaWZmZXJlbnQgZnJvbSBCaXRzeShpUEFRKSBvZiBDb21wYXEpCisKK0ZvciBtb3JlIGRldGFpbHMsIGNvbnRhY3QgQXBwbGllZCBEYXRhIFN5c3RlbXMgb3Igc2VlCitodHRwOi8vd3d3LmFwcGxpZWRkYXRhLm5ldC9wcm9kdWN0cy5odG1sCisKK1RoZSBMaW51eCBzdXBwb3J0IGZvciB0aGlzIHByb2R1Y3QgaGFzIGJlZW4gcHJvdmlkZWQgYnkKK1dvb2p1bmcgSHVoIDx3aHVoQGFwcGxpZWRkYXRhLm5ldD4KKworVXNlICdtYWtlIGFkc2JpdHN5X2NvbmZpZycgYmVmb3JlIGFueSAnbWFrZSBjb25maWcnLgorVGhpcyB3aWxsIHNldCB1cCBkZWZhdWx0cyBmb3IgQURTIEJpdHN5IHN1cHBvcnQuCisKK1RoZSBrZXJuZWwgekltYWdlIGlzIGxpbmtlZCB0byBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkIGF0IDB4YzA0MDAwMDAuCisKK0xpbnV4IGNhbiAgYmUgdXNlZCB3aXRoIHRoZSBBRFMgQm9vdExvYWRlciB0aGF0IHNoaXBzIHdpdGggdGhlCituZXdlciByZXYgYm9hcmRzLiBTZWUgdGhlaXIgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gbG9hZCBMaW51eC4KKworU3VwcG9ydGVkIHBlcmlwaGVyYWxzOgorLSBTQTExMDAgTENEIGZyYW1lIGJ1ZmZlciAoOC8xNmJwcC4uLnNvcnQgb2YpCistIFNBMTExMSBVU0IgTWFzdGVyCistIFNBMTEwMCBzZXJpYWwgcG9ydAorLSBwY21jaWEsIGNvbXBhY3QgZmxhc2gKKy0gdG91Y2hzY3JlZW4odWNiMTIwMCkKKy0gY29uc29sZSBvbiBMQ0Qgc2NyZWVuCistIHNlcmlhbCBwb3J0cyAodHR5U1swLTJdKQorICAtIHR0eVMwIGlzIGRlZmF1bHQgZm9yIHNlcmlhbCBjb25zb2xlCisKK1RvIGRvOgorLSBldmVyeXRoaW5nIGVsc2UhICA6LSkKKworTm90ZXM6CisKKy0gVGhlIGZsYXNoIG9uIGJvYXJkIGlzIGRpdmlkZWQgaW50byAzIHBhcnRpdGlvbnMuCisgIFlvdSBzaG91bGQgYmUgY2FyZWZ1bCB0byB1c2UgZmxhc2ggb24gYm9hcmQuCisgIEl0J3MgcGFydGl0aW9uIGlzIGRpZmZlcmVudCBmcm9tIEdyYXBoaWNzQ2xpZW50IFBsdXMgYW5kIEdyYXBoaWNzTWFzdGVyCisKKy0gMTZicHAgbW9kZSByZXF1aXJlcyBhIGRpZmZlcmVudCBjYWJsZSB0aGFuIHdoYXQgc2hpcHMgd2l0aCB0aGUgYm9hcmQuCisgIENvbnRhY3QgQURTIG9yIGxvb2sgdGhyb3VnaCB0aGUgbWFudWFsIHRvIHdpcmUgeW91ciBvd24uIEN1cnJlbnRseSwKKyAgaWYgeW91IGNvbXBpbGUgd2l0aCAxNmJpdCBtb2RlIHN1cHBvcnQgYW5kIHN3aXRjaCBpbnRvIGEgbG93ZXIgYnBwCisgIG1vZGUsIHRoZSB0aW1pbmcgaXMgb2ZmIHNvIHRoZSBpbWFnZSBpcyBjb3JydXB0ZWQuICBUaGlzIHdpbGwgYmUKKyAgZml4ZWQgc29vbi4KKworQW55IGNvbnRyaWJ1dGlvbiBjYW4gYmUgc2VudCB0byBuaWNvQGNhbS5vcmcgYW5kIHdpbGwgYmUgZ3JlYXRseSB3ZWxjb21lIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0Fzc2FiZXQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQXNzYWJldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJlNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0Fzc2FiZXQKQEAgLTAsMCArMSwzMDEgQEAKK1RoZSBJbnRlbCBBc3NhYmV0IChTQS0xMTEwIGV2YWx1YXRpb24pIGJvYXJkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2Ugc2VlOgoraHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL3N0cm9uZy9xdWlja2xpc3QvZXZhbC1wbGF0L3NhLTExMTAuaHRtCitodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vc3Ryb25nL2d1aWRlcy8yNzgyNzguaHRtCisKK0Fsc28gc29tZSBub3RlcyBmcm9tIEpvaG4gRyBEb3JzZXkgPGpkNXFAYW5kcmV3LmNtdS5lZHU+OgoraHR0cDovL3d3dy5jcy5jbXUuZWR1L353ZWFyYWJsZS9zb2Z0d2FyZS9hc3NhYmV0Lmh0bWwKKworCitCdWlsZGluZyB0aGUga2VybmVsCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGJ1aWxkIHRoZSBrZXJuZWwgd2l0aCBjdXJyZW50IGRlZmF1bHRzOgorCisJbWFrZSBhc3NhYmV0X2NvbmZpZworCW1ha2Ugb2xkY29uZmlnCisJbWFrZSB6SW1hZ2UKKworVGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2Ugc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiBsaW51eC9hcmNoL2FybS9ib290L3pJbWFnZS4KKworCitJbnN0YWxsaW5nIGEgYm9vdGxvYWRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBjb3VwbGUgb2YgYm9vdGxvYWRlcnMgYWJsZSB0byBib290IExpbnV4IG9uIEFzc2FiZXQgYXJlIGF2YWlsYWJsZToKKworQkxPQiAoaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvbGFydHdhcmUvYmxvYi8pCisKKyAgIEJMT0IgaXMgYSBib290bG9hZGVyIHVzZWQgd2l0aGluIHRoZSBMQVJUIHByb2plY3QuICBTb21lIGNvbnRyaWJ1dGVkCisgICBwYXRjaGVzIHdlcmUgbWVyZ2VkIGludG8gQkxPQiB0byBhZGQgc3VwcG9ydCBmb3IgQXNzYWJldC4KKworQ29tcGFxJ3MgQm9vdGxkciArIEpvaG4gRG9yc2V5J3MgcGF0Y2ggZm9yIEFzc2FiZXQgc3VwcG9ydAorKGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvYm9vdGxkci5odG1sKQorKGh0dHA6Ly93d3cud2VhcmFibGVncm91cC5vcmcvc29mdHdhcmUvYm9vdGxkci8pCisKKyAgIEJvb3RsZHIgaXMgdGhlIGJvb3Rsb2FkZXIgZGV2ZWxvcGVkIGJ5IENvbXBhcSBmb3IgdGhlIGlQQVEgUG9ja2V0IFBDLgorICAgSm9obiBEb3JzZXkgaGFzIHByb2R1Y2VkIGFkZC1vbiBwYXRjaGVzIHRvIGFkZCBzdXBwb3J0IGZvciBBc3NhYmV0IGFuZAorICAgdGhlIEpGRlMgZmlsZXN5c3RlbS4KKworUmVkQm9vdCAoaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9yZWRib290LykKKworICAgUmVkQm9vdCBpcyBhIGJvb3Rsb2FkZXIgZGV2ZWxvcGVkIGJ5IFJlZCBIYXQgYmFzZWQgb24gdGhlIGVDb3MgUlRPUworICAgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuICBJdCBzdXBwb3J0cyBBc3NhYmV0IGFtb25nc3QgbWFueSBvdGhlcgorICAgaGFyZHdhcmUgcGxhdGZvcm1zLgorCitSZWRCb290IGlzIGN1cnJlbnRseSB0aGUgcmVjb21tZW5kZWQgY2hvaWNlIHNpbmNlIGl0J3MgdGhlIG9ubHkgb25lIHRvIGhhdmUKK25ldHdvcmtpbmcgc3VwcG9ydCwgYW5kIGlzIHRoZSBtb3N0IGFjdGl2ZWx5IG1haW50YWluZWQuCisKK0JyaWVmIGV4YW1wbGVzIG9uIGhvdyB0byBib290IExpbnV4IHdpdGggUmVkQm9vdCBhcmUgc2hvd24gYmVsb3cuICBCdXQgZmlyc3QKK3lvdSBuZWVkIHRvIGhhdmUgUmVkQm9vdCBpbnN0YWxsZWQgaW4geW91ciBmbGFzaCBtZW1vcnkuICBBIGtub3duIHRvIHdvcmsKK3ByZWNvbXBpbGVkIFJlZEJvb3QgYmluYXJ5IGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246CisKK2Z0cDovL2Z0cC5uZXR3aW5kZXIub3JnL3VzZXJzL24vbmljby8KK2Z0cDovL2Z0cC5hcm0ubGludXgub3JnLnVrL3B1Yi9saW51eC9hcm0vcGVvcGxlL25pY28vCitmdHA6Ly9mdHAuaGFuZGhlbGRzLm9yZy9wdWIvbGludXgvYXJtL3NhLTExMDAtcGF0Y2hlcy8KKworTG9vayBmb3IgcmVkYm9vdC1hc3NhYmV0Ki50Z3ouICBTb21lIGluc3RhbGxhdGlvbiBpbmZvcyBhcmUgcHJvdmlkZWQgaW4KK3JlZGJvb3QtYXNzYWJldCoudHh0LgorCisKK0luaXRpYWwgUmVkQm9vdCBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZHMgdXNlZCBoZXJlIGFyZSBleHBsYWluZWQgaW4gVGhlIFJlZEJvb3QgVXNlcidzIEd1aWRlIGF2YWlsYWJsZQorb24tbGluZSBhdCBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2Vjb3MvZG9jcy1sYXRlc3QvcmVkYm9vdC9yZWRib290Lmh0bWwuCitQbGVhc2UgcmVmZXIgdG8gaXQgZm9yIGV4cGxhbmF0aW9ucy4KKworSWYgeW91IGhhdmUgYSBDRiBuZXR3b3JrIGNhcmQgKG15IEFzc2FiZXQga2l0IGNvbnRhaW5lZCBhIENGKyBMUC1FIGZyb20KK1NvY2tldCBDb21tdW5pY2F0aW9ucyBJbmMuKSwgeW91IHNob3VsZCBzdHJvbmdseSBjb25zaWRlciB1c2luZyBpdCBmb3IgVEZUUAorZmlsZSB0cmFuc2ZlcnMuICBZb3UgbXVzdCBpbnNlcnQgaXQgYmVmb3JlIFJlZEJvb3QgcnVucyBzaW5jZSBpdCBjYW4ndCBkZXRlY3QKK2l0IGR5bmFtaWNhbGx5LgorCitUbyBpbml0aWFsaXplIHRoZSBmbGFzaCBkaXJlY3Rvcnk6CisKKwlmaXMgaW5pdCAtZgorCitUbyBpbml0aWFsaXplIHRoZSBub24tdm9sYXRpbGUgc2V0dGluZ3MsIGxpa2Ugd2hldGhlciB5b3Ugd2FudCB0byB1c2UgQk9PVFAgb3IKK2Egc3RhdGljIElQIGFkZHJlc3MsIGV0YywgdXNlIHRoaXMgY29tbWFuZDoKKworCWZjb25maWcgLWkKKworCitXcml0aW5nIGEga2VybmVsIGltYWdlIGludG8gZmxhc2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdCwgdGhlIGtlcm5lbCBpbWFnZSBtdXN0IGJlIGxvYWRlZCBpbnRvIFJBTS4gIElmIHlvdSBoYXZlIHRoZSB6SW1hZ2UgZmlsZQorYXZhaWxhYmxlIG9uIGEgVEZUUCBzZXJ2ZXI6CisKKwlsb2FkIHpJbWFnZSAtciAtYiAweDEwMDAwMAorCitJZiB5b3UgcmF0aGVyIHdhbnQgdG8gdXNlIFktTW9kZW0gdXBsb2FkIG92ZXIgdGhlIHNlcmlhbCBwb3J0OgorCisJbG9hZCAtbSB5bW9kZW0gLXIgLWIgMHgxMDAwMDAKKworVG8gd3JpdGUgaXQgdG8gZmxhc2g6CisKKwlmaXMgY3JlYXRlICJMaW51eCBrZXJuZWwiIC1iIDB4MTAwMDAwIC1sIDB4YzAwMDAKKworCitCb290aW5nIHRoZSBrZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUga2VybmVsIHN0aWxsIHJlcXVpcmVzIGEgZmlsZXN5c3RlbSB0byBib290LiAgQSByYW1kaXNrIGltYWdlIGNhbiBiZSBsb2FkZWQKK2FzIGZvbGxvd3M6CisKKwlsb2FkIHJhbWRpc2tfaW1hZ2UuZ3ogLXIgLWIgMHg4MDAwMDAKKworQWdhaW4sIFktTW9kZW0gdXBsb2FkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgVEZUUCBieSByZXBsYWNpbmcgdGhlIGZpbGUgbmFtZQorYnkgJy15IHltb2RlbScuCisKK05vdyB0aGUga2VybmVsIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBmbGFzaCBsaWtlIHRoaXM6CisKKwlmaXMgbG9hZCAiTGludXgga2VybmVsIgorCitvciBsb2FkZWQgYXMgZGVzY3JpYmVkIHByZXZpb3VzbHkuICBUbyBib290IHRoZSBrZXJuZWw6CisKKwlleGVjIC1iIDB4MTAwMDAwIC1sIDB4YzAwMDAKKworVGhlIHJhbWRpc2sgaW1hZ2UgY291bGQgYmUgc3RvcmVkIGludG8gZmxhc2ggYXMgd2VsbCwgYnV0IHRoZXJlIGFyZSBiZXR0ZXIKK3NvbHV0aW9ucyBmb3Igb24tZmxhc2ggZmlsZXN5c3RlbXMgYXMgbWVudGlvbmVkIGJlbG93LgorCisKK1VzaW5nIEpGRlMyCistLS0tLS0tLS0tLQorCitVc2luZyBKRkZTMiAodGhlIFNlY29uZCBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSkgaXMgcHJvYmFibHkgdGhlIG1vc3QKK2NvbnZlbmllbnQgd2F5IHRvIHN0b3JlIGEgd3JpdGFibGUgZmlsZXN5c3RlbSBpbnRvIGZsYXNoLiAgSkZGUzIgaXMgdXNlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0aGUgTVREIGxheWVyIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBsb3ctbGV2ZWwgZmxhc2gKK21hbmFnZW1lbnQuICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBMaW51eCBNVEQgY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQ6CitodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLy4gIEEgSkZGUyBob3d0byB3aXRoIHNvbWUgaW5mb3MgYWJvdXQKK2NyZWF0aW5nIEpGRlMvSkZGUzIgaW1hZ2VzIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzYW1lIHNpdGUuCisKK0ZvciBpbnN0YW5jZSwgYSBzYW1wbGUgSkZGUzIgaW1hZ2UgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBzYW1lIEZUUCBzaXRlcworbWVudGlvbmVkIGJlbG93IGZvciB0aGUgcHJlY29tcGlsZWQgUmVkQm9vdCBpbWFnZS4KKworVG8gbG9hZCB0aGlzIGZpbGU6CisKKwlsb2FkIHNhbXBsZV9pbWcuamZmczIgLXIgLWIgMHgxMDAwMDAKKworVGhlIHJlc3VsdCBzaG91bGQgbG9vayBsaWtlOgorCitSZWRCb290PiBsb2FkIHNhbXBsZV9pbWcuamZmczIgLXIgLWIgMHgxMDAwMDAKK1JhdyBmaWxlIGxvYWRlZCAweDAwMTAwMDAwLTB4MDAzNzc0MjQKKworTm93IHdlIG11c3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgdW5hbGxvY2F0ZWQgZmxhc2g6CisKKwlmaXMgZnJlZQorCitSZXN1bHQ6CisKK1JlZEJvb3Q+IGZpcyBmcmVlCisgIDB4NTAwRTAwMDAgLi4gMHg1MDNDMDAwMAorCitUaGUgdmFsdWVzIGFib3ZlIG1heSBiZSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtIGFuZAordGhlIHR5cGUgb2YgZmxhc2guICBTZWUgdGhlaXIgdXNhZ2UgYmVsb3cgYXMgYW4gZXhhbXBsZSBhbmQgdGFrZSBjYXJlIG9mCitzdWJzdGl0dXRpbmcgeW91cnMgYXBwcm9wcmlhdGVseS4KKworV2UgbXVzdCBkZXRlcm1pbmUgc29tZSB2YWx1ZXM6CisKK3NpemUgb2YgdW5hbGxvY2F0ZWQgZmxhc2g6CTB4NTAzYzAwMDAgLSAweDUwMGUwMDAwID0gMHgyZTAwMDAKK3NpemUgb2YgdGhlIGZpbGVzeXN0ZW0gaW1hZ2U6CTB4MDAzNzc0MjQgLSAweDAwMTAwMDAwID0gMHgyNzc0MjQKKworV2Ugd2FudCB0byBmaXQgdGhlIGZpbGVzeXN0ZW0gaW1hZ2Ugb2YgY291cnNlLCBidXQgd2UgYWxzbyB3YW50IHRvIGdpdmUgaXQgYWxsCit0aGUgcmVtYWluaW5nIGZsYXNoIHNwYWNlIGFzIHdlbGwuICBUbyB3cml0ZSBpdDoKKworCWZpcyB1bmxvY2sgLWYgMHg1MDBFMDAwMCAtbCAweDJlMDAwMAorCWZpcyBlcmFzZSAtZiAweDUwMEUwMDAwIC1sIDB4MmUwMDAwCisJZmlzIHdyaXRlIC1iIDB4MTAwMDAwIC1sIDB4Mjc3NDI0IC1mIDB4NTAwRTAwMDAKKwlmaXMgY3JlYXRlICJKRkZTMiIgLW4gLWYgMHg1MDBFMDAwMCAtbCAweDJlMDAwMAorCitOb3cgdGhlIGZpbGVzeXN0ZW0gaXMgYXNzb2NpYXRlZCB0byBhIE1URCAicGFydGl0aW9uIiBvbmNlIExpbnV4IGhhcyBkaXNjb3ZlcmVkCit3aGF0IHRoZXkgYXJlIGluIHRoZSBib290IHByb2Nlc3MuICBGcm9tIFJlZGJvb3QsIHRoZSAnZmlzIGxpc3QnIGNvbW1hbmQKK2Rpc3BsYXlzIHRoZW06CisKK1JlZEJvb3Q+IGZpcyBsaXN0CitOYW1lICAgICAgICAgICAgICBGTEFTSCBhZGRyICBNZW0gYWRkciAgICBMZW5ndGggICAgICBFbnRyeSBwb2ludAorUmVkQm9vdCAgICAgICAgICAgMHg1MDAwMDAwMCAgMHg1MDAwMDAwMCAgMHgwMDAyMDAwMCAgMHgwMDAwMDAwMAorUmVkQm9vdCBjb25maWcgICAgMHg1MDNDMDAwMCAgMHg1MDNDMDAwMCAgMHgwMDAyMDAwMCAgMHgwMDAwMDAwMAorRklTIGRpcmVjdG9yeSAgICAgMHg1MDNFMDAwMCAgMHg1MDNFMDAwMCAgMHgwMDAyMDAwMCAgMHgwMDAwMDAwMAorTGludXgga2VybmVsICAgICAgMHg1MDAyMDAwMCAgMHgwMDEwMDAwMCAgMHgwMDBDMDAwMCAgMHgwMDAwMDAwMAorSkZGUzIgICAgICAgICAgICAgMHg1MDBFMDAwMCAgMHg1MDBFMDAwMCAgMHgwMDJFMDAwMCAgMHgwMDAwMDAwMAorCitIb3dldmVyIExpbnV4IHNob3VsZCBkaXNwbGF5IHNvbWV0aGluZyBsaWtlOgorCitTQTExMDAgZmxhc2g6IHByb2JpbmcgMzItYml0IGZsYXNoIGJ1cworU0ExMTAwIGZsYXNoOiBGb3VuZCAyIHgxNiBkZXZpY2VzIGF0IDB4MCBpbiAzMi1iaXQgbW9kZQorVXNpbmcgUmVkQm9vdCBwYXJ0aXRpb24gZGVmaW5pdGlvbgorQ3JlYXRpbmcgNSBNVEQgcGFydGl0aW9ucyBvbiAiU0ExMTAwIGZsYXNoIjoKKzB4MDAwMDAwMDAtMHgwMDAyMDAwMCA6ICJSZWRCb290IgorMHgwMDAyMDAwMC0weDAwMGUwMDAwIDogIkxpbnV4IGtlcm5lbCIKKzB4MDAwZTAwMDAtMHgwMDNjMDAwMCA6ICJKRkZTMiIKKzB4MDAzYzAwMDAtMHgwMDNlMDAwMCA6ICJSZWRCb290IGNvbmZpZyIKKzB4MDAzZTAwMDAtMHgwMDQwMDAwMCA6ICJGSVMgZGlyZWN0b3J5IgorCitXaGF0J3MgaW1wb3J0YW50IGhlcmUgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwYXJ0aXRpb24gd2UgYXJlIGludGVyZXN0ZWQgaW4sCit3aGljaCBpcyB0aGUgdGhpcmQgb25lLiAgV2l0aGluIExpbnV4LCB0aGlzIGNvcnJlc3BvbmQgdG8gL2Rldi9tdGRibG9jazIuCitUaGVyZWZvcmUgdG8gYm9vdCBMaW51eCB3aXRoIHRoZSBrZXJuZWwgYW5kIGl0cyByb290IGZpbGVzeXN0ZW0gaW4gZmxhc2gsIHdlCituZWVkIHRoaXMgUmVkQm9vdCBjb21tYW5kOgorCisJZmlzIGxvYWQgIkxpbnV4IGtlcm5lbCIKKwlleGVjIC1iIDB4MTAwMDAwIC1sIDB4YzAwMDAgLWMgInJvb3Q9L2Rldi9tdGRibG9jazIiCisKK09mIGNvdXJzZSBvdGhlciBmaWxlc3lzdGVtcyB0aGFuIEpGRlMgbWlnaHQgYmUgdXNlZCwgbGlrZSBjcmFtZnMgZm9yIGV4YW1wbGUuCitZb3UgbWlnaHQgd2FudCB0byBib290IHdpdGggYSByb290IGZpbGVzeXN0ZW0gb3ZlciBORlMsIGV0Yy4gIEl0IGlzIGFsc28KK3Bvc3NpYmxlLCBhbmQgc29tZXRpbWVzIG1vcmUgY29udmVuaWVudCwgdG8gZmxhc2ggYSBmaWxlc3lzdGVtIGRpcmVjdGx5IGZyb20KK3dpdGhpbiBMaW51eCB3aGlsZSBib290ZWQgZnJvbSBhIHJhbWRpc2sgb3IgTkZTLiAgVGhlIExpbnV4IE1URCByZXBvc2l0b3J5IGhhcworbWFueSB0b29scyB0byBkZWFsIHdpdGggZmxhc2ggbWVtb3J5IGFzIHdlbGwsIHRvIGVyYXNlIGl0IGZvciBleGFtcGxlLiAgSkZGUzIKK2NhbiB0aGVuIGJlIG1vdW50ZWQgZGlyZWN0bHkgb24gYSBmcmVzaGx5IGVyYXNlZCBwYXJ0aXRpb24gYW5kIGZpbGVzIGNhbiBiZQorY29waWVkIG92ZXIgZGlyZWN0bHkuICBFdGMuLi4KKworCitSZWRCb290IHNjcmlwdGluZworLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIHRoZSBjb21tYW5kcyBhYm92ZSBhcmVuJ3Qgc28gdXNlZnVsIGlmIHRoZXkgaGF2ZSB0byBiZSB0eXBlZCBpbiBldmVyeQordGltZSB0aGUgQXNzYWJldCBpcyByZWJvb3RlZC4gIFRoZXJlZm9yZSBpdCdzIHBvc3NpYmxlIHRvIGF1dG9tYXRpemUgdGhlIGJvb3QKK3Byb2Nlc3MgdXNpbmcgUmVkQm9vdCdzIHNjcmlwdGluZyBjYXBhYmlsaXR5LgorCitGb3IgZXhhbXBsZSwgSSB1c2UgdGhpcyB0byBib290IExpbnV4IHdpdGggYm90aCB0aGUga2VybmVsIGFuZCB0aGUgcmFtZGlzaworaW1hZ2VzIHJldHJpZXZlZCBmcm9tIGEgVEZUUCBzZXJ2ZXIgb24gdGhlIG5ldHdvcms6CisKK1JlZEJvb3Q+IGZjb25maWcKK1J1biBzY3JpcHQgYXQgYm9vdDogZmFsc2UgdHJ1ZQorQm9vdCBzY3JpcHQ6CitFbnRlciBzY3JpcHQsIHRlcm1pbmF0ZSB3aXRoIGVtcHR5IGxpbmUKKz4+IGxvYWQgekltYWdlIC1yIC1iIDB4MTAwMDAwCis+PiBsb2FkIHJhbWRpc2tfa3MuZ3ogLXIgLWIgMHg4MDAwMDAKKz4+IGV4ZWMgLWIgMHgxMDAwMDAgLWwgMHhjMDAwMAorPj4KK0Jvb3Qgc2NyaXB0IHRpbWVvdXQgKDEwMDBtcyByZXNvbHV0aW9uKTogMworVXNlIEJPT1RQIGZvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb246IHRydWUKK0dEQiBjb25uZWN0aW9uIHBvcnQ6IDkwMDAKK05ldHdvcmsgZGVidWcgYXQgYm9vdCB0aW1lOiBmYWxzZQorVXBkYXRlIFJlZEJvb3Qgbm9uLXZvbGF0aWxlIGNvbmZpZ3VyYXRpb24gLSBhcmUgeW91IHN1cmUgKHkvbik/IHkKKworVGhlbiwgcmVib290aW5nIHRoZSBBc3NhYmV0IGlzIGp1c3QgYSBtYXR0ZXIgb2Ygd2FpdGluZyBmb3IgdGhlIGxvZ2luIHByb21wdC4KKworCisKK05pY29sYXMgUGl0cmUKK25pY29AY2FtLm9yZworSnVuZSAxMiwgMjAwMQorCisKK1N0YXR1cyBvZiBwZXJpcGhlcmFscyBpbiAtcm1rIHRyZWUgKHVwZGF0ZWQgMTQvMTAvMjAwMSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXNzYWJldDoKKyBTZXJpYWwgcG9ydHM6CisgIFJhZGlvOgkJVFgsIFJYLCBDVFMsIERTUiwgRENELCBSSQorICAgUE06CQkJTm90IHRlc3RlZC4KKyAgQ09NOgkJCVRYLCBSWCwgQ1RTLCBEU1IsIERDRCwgUlRTLCBEVFIsIFBNCisgICBQTToJCQlOb3QgdGVzdGVkLgorICBJMkM6CQkJSW1wbGVtZW50ZWQsIG5vdCBmdWxseSB0ZXN0ZWQuCisgIEwzOgkJCUZ1bGx5IHRlc3RlZCwgcGFzcy4KKyAgIFBNOgkJCU5vdCB0ZXN0ZWQuCisKKyBWaWRlbzoKKyAgTENEOgkJCUZ1bGx5IHRlc3RlZC4gIFBNCisJCQkoTENEIGRvZXNuJ3QgbGlrZSBiZWluZyBibGFua2VkIHdpdGgKKwkJCSBuZXBvbnNldCBjb25uZWN0ZWQpCisgIFZpZGVvIG91dDoJCU5vdCBmdWxseQorCisgQXVkaW86CisgIFVEQTEzNDE6CisgICBQbGF5YmFjazoJCUZ1bGx5IHRlc3RlZCwgcGFzcy4KKyAgIFJlY29yZDoJCUltcGxlbWVudGVkLCBub3QgdGVzdGVkLgorICAgUE06CQkJTm90IHRlc3RlZC4KKworICBVQ0IxMjAwOgorICAgQXVkaW8gcGxheToJCUltcGxlbWVudGVkLCBub3QgaGVhdmlseSB0ZXN0ZWQuCisgICBBdWRpbyByZWM6CQlJbXBsZW1lbnRlZCwgbm90IGhlYXZpbHkgdGVzdGVkLgorICAgVGVsY28gYXVkaW8gcGxheToJSW1wbGVtZW50ZWQsIG5vdCBoZWF2aWx5IHRlc3RlZC4KKyAgIFRlbGNvIGF1ZGlvIHJlYzoJSW1wbGVtZW50ZWQsIG5vdCBoZWF2aWx5IHRlc3RlZC4KKyAgIFBPVFMgY29udHJvbDoJTm8KKyAgIFRvdWNoc2NyZWVuOgkJWWVzCisgICBQTToJCQlOb3QgdGVzdGVkLgorCisgT3RoZXI6CisgIFBDTUNJQToKKyAgIExQRToJCQlGdWxseSB0ZXN0ZWQsIHBhc3MuCisgIFVTQjoJCQlObworICBJUkRBOgorICAgU0lSOgkJCUZ1bGx5IHRlc3RlZCwgcGFzcy4KKyAgIEZJUjoJCQlGdWxseSB0ZXN0ZWQsIHBhc3MuCisgICBQTToJCQlOb3QgdGVzdGVkLgorCitOZXBvbnNldDoKKyBTZXJpYWwgcG9ydHM6CisgIENPTTEsMjoJVFgsIFJYLCBDVFMsIERTUiwgRENELCBSVFMsIERUUgorICAgUE06CQkJTm90IHRlc3RlZC4KKyAgVVNCOgkJCUltcGxlbWVudGVkLCBub3QgaGVhdmlseSB0ZXN0ZWQuCisgIFBDTUNJQToJCUltcGxlbWVudGVkLCBub3QgaGVhdmlseSB0ZXN0ZWQuCisgICBQTToJCQlOb3QgdGVzdGVkLgorICBDRjoJCQlJbXBsZW1lbnRlZCwgbm90IGhlYXZpbHkgdGVzdGVkLgorICAgUE06CQkJTm90IHRlc3RlZC4KKworTW9yZSBzdHVmZiBjYW4gYmUgZm91bmQgaW4gdGhlIC1ucCAoTmljb2xhcyBQaXRyZSdzKSB0cmVlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQnJ1dHVzIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0JydXR1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjU0YzhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0JydXR1cwpAQCAtMCwwICsxLDY2IEBACitCcnV0dXMgaXMgYW4gZXZhbHVhdGlvbiBwbGF0Zm9ybSBmb3IgdGhlIFNBMTEwMCBtYW51ZmFjdHVyZWQgYnkgSW50ZWwuICAKK0ZvciBtb3JlIGRldGFpbHMsIHNlZToKKworaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL3N0cm9uZy9hcHBsbm90cy9zYTExMDBseC9nZXRzdGFydC5odG0KKworVG8gY29tcGlsZSBmb3IgQnJ1dHVzLCB5b3UgbXVzdCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCisJbWFrZSBicnV0dXNfY29uZmlnCisJbWFrZSBjb25maWcKKwlbYWNjZXB0IGFsbCB0aGUgZGVmYXVsdHNdCisJbWFrZSB6SW1hZ2UKKworVGhlIHJlc3VsdGluZyBrZXJuZWwgd2lsbCBlbmQgdXAgaW4gbGludXgvYXJjaC9hcm0vYm9vdC96SW1hZ2UuICBUaGlzIGZpbGUKK211c3QgYmUgbG9hZGVkIGF0IDB4YzAwMDgwMDAgaW4gQnJ1dHVzJ3MgbWVtb3J5IGFuZCBleGVjdXRpb24gc3RhcnRlZCBhdAorMHhjMDAwODAwMCBhcyB3ZWxsIHdpdGggdGhlIHZhbHVlIG9mIHJlZ2lzdGVycyByMCA9IDAgYW5kIHIxID0gMTYgdXBvbgorZW50cnkuCisKK0J1dCBwcmlvciB0byBleGVjdXRlIHRoZSBrZXJuZWwsIGEgcmFtZGlzayBpbWFnZSBtdXN0IGFsc28gYmUgbG9hZGVkIGluCittZW1vcnkuICBVc2UgbWVtb3J5IGFkZHJlc3MgMHhkODAwMDAwMCBmb3IgdGhpcy4gIE5vdGUgdGhhdCB0aGUgZmlsZSAKK2NvbnRhaW5pbmcgdGhlIChjb21wcmVzc2VkKSByYW1kaXNrIGltYWdlIG11c3Qgbm90IGV4Y2VlZCA0IE1CLgorCitUeXBpY2FsbHksIHlvdSdsbCBuZWVkIGFuZ2VsYm9vdCB0byBsb2FkIHRoZSBrZXJuZWwuCitUaGUgZm9sbG93aW5nIGFuZ2VsYm9vdC5vcHQgZmlsZSBzaG91bGQgYmUgdXNlZDoKKworLS0tLS0gYmVnaW4gYW5nZWxib290Lm9wdCAtLS0tLQorYmFzZSAweGMwMDA4MDAwCitlbnRyeSAweGMwMDA4MDAwCityMCAweDAwMDAwMDAwCityMSAweDAwMDAwMDEwCitkZXZpY2UgL2Rldi90dHlTMAorb3B0aW9ucyAiOTYwMCA4TjEiCitiYXVkIDExNTIwMAorb3RoZXJmaWxlIHJhbWRpc2tfaW1nLmd6CitvdGhlcmJhc2UgMHhkODAwMDAwMAorLS0tLS0gZW5kIGFuZ2VsYm9vdC5vcHQgLS0tLS0KKworVGhlbiBsb2FkIHRoZSBrZXJuZWwgYW5kIHJhbWRpc2sgd2l0aDoKKworCWFuZ2VsYm9vdCAtZiBhbmdlbGJvb3Qub3B0IHpJbWFnZQorCitUaGUgZmlyc3QgQnJ1dHVzIHNlcmlhbCBwb3J0IChhc3N1bWVkIHRvIGJlIGxpbmtlZCB0byAvZGV2L3R0eVMwIG9uIHlvdXIKK2hvc3QgUEMpIGlzIHVzZWQgYnkgYW5nZWwgdG8gbG9hZCB0aGUga2VybmVsIGFuZCByYW1kaXNrIGltYWdlLiBUaGUgc2VyaWFsCitjb25zb2xlIGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIHNlY29uZCBCcnV0dXMgc2VyaWFsIHBvcnQuIFRvIGFjY2VzcyBpdCwKK3lvdSBtYXkgdXNlIG1pbmljb20gY29uZmlndXJlZCB3aXRoIC9kZXYvdHR5UzEsIDk2MDAgYmF1ZCwgOE4xLCBubyBmbG93Citjb250cm9sLgorCitDdXJyZW50bHkgc3VwcG9ydGVkOgorCS0gUlMyMzIgc2VyaWFsIHBvcnRzCisJLSBhdWRpbyBvdXRwdXQKKwktIExDRCBzY3JlZW4KKwktIGtleWJvYXJkCisJCitUaGUgYWN0dWFsIEJydXR1cyBzdXBwb3J0IG1heSBub3QgYmUgY29tcGxldGUgd2l0aG91dCBleHRyYSBwYXRjaGVzLiAKK0lmIHN1Y2ggcGF0Y2hlcyBleGlzdCwgdGhleSBzaG91bGQgYmUgZm91bmQgZnJvbSAKK2Z0cC5uZXR3aW5kZXIub3JnL3VzZXJzL24vbmljby4KKworQSBmdWxsIFBDTUNJQSBzdXBwb3J0IGlzIHN0aWxsIG1pc3NpbmcsIGFsdGhvdWdoIGl0J3MgcG9zc2libGUgdG8gaGFjaworc29tZSBkcml2ZXJzIGluIG9yZGVyIHRvIGRyaXZlIGFscmVhZHkgaW5zZXJ0ZWQgY2FyZHMgYXQgYm9vdCB0aW1lIHdpdGgKK2xpdHRsZSBtb2RpZmljYXRpb25zLgorCitBbnkgY29udHJpYnV0aW9uIGlzIHdlbGNvbWUuCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG8gbmljb0BjYW0ub3JnCisKK0hhdmUgRnVuICEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0NFUkYgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQ0VSRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q4NDUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0NFUkYKQEAgLTAsMCArMSwyOSBAQAorKioqIFRoZSBTdHJvbmdBUk0gdmVyc2lvbiBvZiB0aGUgQ2VyZkJvYXJkL0N1YmUgaGFzIGJlZW4gZGlzY29udGludWVkICoqKgorCitUaGUgSW50cmluc3ljIENlcmZCb2FyZCBpcyBhIFN0cm9uZ0FSTSAxMTEwLWJhc2VkIGNvbXB1dGVyIG9uIGEgYm9hcmQKK3RoYXQgbWVhc3VyZXMgYXBwcm94aW1hdGVseSAyIiBzcXVhcmUuIEl0IGluY2x1ZGVzIGFuIEV0aGVybmV0Citjb250cm9sbGVyLCBhbiBSUzIzMi1jb21wYXRpYmxlIHNlcmlhbCBwb3J0LCBhIFVTQiBmdW5jdGlvbiBwb3J0LCBhbmQKK29uZSBDb21wYWN0Rmxhc2grIHNsb3Qgb24gdGhlIGJhY2suIFBpY3R1cmVzIGNhbiBiZSBmb3VuZCBhdCB0aGUKK0ludHJpbnN5YyB3ZWJzaXRlLCBodHRwOi8vd3d3LmludHJpbnN5Yy5jb20uCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBzdXBwb3J0IGluIHRoZSBMaW51eCBrZXJuZWwgZm9yIHRoZQorSW50cmluc3ljIENlcmZCb2FyZC4KKworU3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbjoKKyAgIC0gQ29tcGFjdEZsYXNoKyBzbG90IChzZWxlY3QgUENNQ0lBIGluIEdlbmVyYWwgU2V0dXAgYW5kIGFueSBvcHRpb25zCisgICAgIHRoYXQgbWF5IGJlIHJlcXVpcmVkKQorICAgLSBPbmJvYXJkIENyeXN0YWwgQ1M4OTAwIEV0aGVybmV0IGNvbnRyb2xsZXIgKENlcmYgQ1M4OTAwQSBzdXBwb3J0IGluCisgICAgIE5ldHdvcmsgRGV2aWNlcykKKyAgIC0gU2VyaWFsIHBvcnRzIHdpdGggYSBzZXJpYWwgY29uc29sZSAoaGFyZGNvZGVkIHRvIDM4NDAwIDhOMSkKKworSW4gb3JkZXIgdG8gZ2V0IHRoaXMga2VybmVsIG9udG8geW91ciBDZXJmLCB5b3UgbmVlZCBhIHNlcnZlciB0aGF0IHJ1bnMKK2JvdGggQk9PVFAgYW5kIFRGVFAuIERldGFpbGVkIGluc3RydWN0aW9ucyBzaG91bGQgaGF2ZSBjb21lIHdpdGggeW91cgorZXZhbHVhdGlvbiBraXQgb24gaG93IHRvIHVzZSB0aGUgYm9vdGxvYWRlci4gVGhpcyBzZXJpZXMgb2YgY29tbWFuZHMKK3dpbGwgc3VmZmljZToKKworICAgbWFrZSBBUkNIPWFybSBDUk9TU19DT01QSUxFPWFybS1saW51eC0gY2VyZmN1YmVfZGVmY29uZmlnCisgICBtYWtlIEFSQ0g9YXJtIENST1NTX0NPTVBJTEU9YXJtLWxpbnV4LSB6SW1hZ2UKKyAgIG1ha2UgQVJDSD1hcm0gQ1JPU1NfQ09NUElMRT1hcm0tbGludXgtIG1vZHVsZXMKKyAgIGNwIGFyY2gvYXJtL2Jvb3QvekltYWdlIDxURlRQIGRpcmVjdG9yeT4KKworc3VwcG9ydEBpbnRyaW5zeWMuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvRnJlZUJpcmQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvRnJlZUJpcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhMjhiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9GcmVlQmlyZApAQCAtMCwwICsxLDIxIEBACitGcmVlYmlyZC0xLjEgaXMgcHJvZHVjZWQgYnkgTGVnbmVkKEMpICxJbmMuCisoaHR0cDovL3d3dy5sZWdlbmQuY29tLmNuKQorYW5kIHNvZnR3YXJlL2xpbnV4IG1haW5hdGluZWQgYnkgQ292ZW50aXZlKEMpLEluYy4KKyhodHRwOi8vd3d3LmNvdmVudGl2ZS5jb20pCisKK0Jhc2VkIG9uIHRoZSBOaWNvbGFzJ3Mgc3Ryb25nYXJtIGtlcm5lbCB0cmVlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01haW50YWluZXI6CisKK0NoZXN0ZXIgS3VvIDxjaGVzdGVyQGNvdmVudGl2ZS5jb20+CisJICAgIDxjaGVzdGVyQGxpbnV4Lm9yZy50dz4KKworQXV0aG9yIDoKK1RpbSB3dSA8dGltd3VAY292ZW50aXZlLmNvbT4KK0NJSCA8Y2loQGNvdmVudGl2ZS5jb20+CitFcmljIFBlbmcgPGVyaWNwZW5nQGNvdmVudGl2ZS5jb20+CitKZWZmIExlZSA8amVmZl9sZWVAY292ZW50aXZlLmNvbT4KK0FsbGVuIENoZW5nCitUb255IExpdSA8dG9ueWxpdUBjb3ZlbnRpdmUuY29tPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NDbGllbnQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NDbGllbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhN2U4MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudApAQCAtMCwwICsxLDk4IEBACitBRFMgR3JhcGhpY3NDbGllbnQgUGx1cyBTaW5nbGUgQm9hcmQgQ29tcHV0ZXIKKworRm9yIG1vcmUgZGV0YWlscywgY29udGFjdCBBcHBsaWVkIERhdGEgU3lzdGVtcyBvciBzZWUKK2h0dHA6Ly93d3cuYXBwbGllZGRhdGEubmV0L3Byb2R1Y3RzLmh0bWwKKworVGhlIG9yaWdpbmFsIExpbnV4IHN1cHBvcnQgZm9yIHRoaXMgcHJvZHVjdCBoYXMgYmVlbiBwcm92aWRlZCBieSAKK05pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4uIENvbnRpbnVlZCBkZXZlbG9wbWVudCB3b3JrIGJ5CitXb29qdW5nIEh1aCA8d2h1aEBhcHBsaWVkZGF0YS5uZXQ+CisKK0l0J3MgY3VycmVudGx5IHBvc3NpYmxlIHRvIG1vdW50IGEgcm9vdCBmaWxlc3lzdGVtIHZpYSBORlMgcHJvdmlkaW5nIGEKK2NvbXBsZXRlIExpbnV4IGVudmlyb25tZW50LiAgT3RoZXJ3aXNlIGEgcmFtZGlzayBpbWFnZSBtYXkgYmUgdXNlZC4gIFRoZQorYm9hcmQgc3VwcG9ydHMgTVREL0pGRlMsIHNvIHlvdSBjb3VsZCBhbHNvIG1vdW50IHNvbWV0aGluZyBvbiB0aGVyZS4KKworVXNlICdtYWtlIGdyYXBoaWNzY2xpZW50X2NvbmZpZycgYmVmb3JlIGFueSAnbWFrZSBjb25maWcnLiAgVGhpcyB3aWxsIHNldCB1cAorZGVmYXVsdHMgZm9yIEdyYXBoaWNzQ2xpZW50IFBsdXMgc3VwcG9ydC4KKworVGhlIGtlcm5lbCB6SW1hZ2UgaXMgbGlua2VkIHRvIGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQgYXQgMHhjMDIwMDAwMC4gIAorQWxzbyB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBzaG91bGQgaGF2ZSB0aGUgc3BlY2lmaWVkIHZhbHVlcyB1cG9uIGVudHJ5OgorCisJcjAgPSAwCisJcjEgPSAyOQkodGhpcyBpcyB0aGUgR3JhcGhpY3NDbGllbnQgYXJjaGl0ZWN0dXJlIG51bWJlcikKKworTGludXggY2FuICBiZSB1c2VkIHdpdGggdGhlIEFEUyBCb290TG9hZGVyIHRoYXQgc2hpcHMgd2l0aCB0aGUKK25ld2VyIHJldiBib2FyZHMuIFNlZSB0aGVpciBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBsb2FkIExpbnV4LgorQW5nZWwgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIEdyYXBoaWNzQ2xpZW50IFBsdXMgQUZBSUsuCisKK1RoZXJlIGlzIGEgIGJvYXJkIGtub3duIGFzIGp1c3QgdGhlIEdyYXBoaWNzQ2xpZW50IHRoYXQgQURTIHVzZWQgdG8KK3Byb2R1Y2UgYnV0IGhhcyBlbmQgb2YgbGlmZWQuIFRoaXMgY29kZSB3aWxsIG5vdCB3b3JrIG9uIHRoZSBvbGRlcgorYm9hcmQgd2l0aCB0aGUgQURTIGJvb3Rsb2FkZXIsIGJ1dCBzaG91bGQgc3RpbGwgd29yayB3aXRoIEFuZ2VsLAorYXMgb3V0bGluZWQgYmVsb3cuICBJbiBhbnkgY2FzZSwgaWYgeW91J3JlIHBsYW5uaW5nIG9uIGRlcGxveWluZworc29tZXRoaW5nIGVuIG1hc3NlLCB5b3Ugc2hvdWxkIHByb2JhYmx5IGdldCB0aGUgbmV3ZXIgYm9hcmQuCisKK0lmIHVzaW5nIEFuZ2VsIG9uIHRoZSBvbGRlciBib2FyZHMsIGhlcmUgaXMgYSB0eXBpY2FsIGFuZ2VsLm9wdCBvcHRpb24gZmlsZQoraWYgdGhlIGtlcm5lbCBpcyBsb2FkZWQgdGhyb3VnaCB0aGUgQW5nZWwgRGVidWcgTW9uaXRvcjoKKworLS0tLS0gYmVnaW4gYW5nZWxib290Lm9wdCAtLS0tLQorYmFzZSAweGMwMjAwMDAwCitlbnRyeSAweGMwMjAwMDAwCityMCAweDAwMDAwMDAwCityMSAweDAwMDAwMDFkCitkZXZpY2UgL2Rldi90dHlTMQorb3B0aW9ucyAiMzg0MDAgOE4xIgorYmF1ZCAxMTUyMDAKKyNvdGhlcmZpbGUgcmFtZGlzay5negorI290aGVyYmFzZSAweGMwODAwMDAwCitleGVjIG1pbmljb20KKy0tLS0tIGVuZCBhbmdlbGJvb3Qub3B0IC0tLS0tCisKK1RoZW4gdGhlIGtlcm5lbCAoYW5kIHJhbWRpc2sgaWYgb3RoZXJmaWxlL290aGVyYmFzZSBsaW5lcyBhYm92ZSBhcmUKK3VuY29tbWVudGVkKSB3b3VsZCBiZSBsb2FkZWQgd2l0aDoKKworCWFuZ2VsYm9vdCAtZiBhbmdlbGJvb3Qub3B0IHpJbWFnZQorCitIZXJlIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgYm9hcmQgaXMgY29ubmVjdGVkIHRvIHR0eVMxIG9uIHlvdXIgUEMKK2FuZCB0aGF0IG1pbmljb20gaXMgcHJlY29uZmlndXJlZCB3aXRoIC9kZXYvdHR5UzEsIDM4NDAwIGJhdWQsIDhOMSwgbm8gZmxvdworY29udHJvbCBieSBkZWZhdWx0LgorCitJZiBhbnkgb3RoZXIgYm9vdGxvYWRlciBpcyB1c2VkLCBlbnN1cmUgaXQgYWNjb21wbGlzaCB0aGUgc2FtZSwgZXNwZWNpYWxseQorZm9yIHIwL3IxIHJlZ2lzdGVyIHZhbHVlcyBiZWZvcmUganVtcGluZyBpbnRvIHRoZSBrZXJuZWwuCisKKworU3VwcG9ydGVkIHBlcmlwaGVyYWxzOgorLSBTQTExMDAgTENEIGZyYW1lIGJ1ZmZlciAoOC8xNmJwcC4uLnNvcnQgb2YpCistIG9uLWJvYXJkIFNNQyA5MkM5NiBldGhlcm5ldCBOSUMKKy0gU0ExMTAwIHNlcmlhbCBwb3J0CistIGZsYXNoIG1lbW9yeSBhY2Nlc3MgKE1URC9KRkZTKQorLSBwY21jaWEKKy0gdG91Y2hzY3JlZW4odWNiMTIwMCkKKy0gcHMvMiBrZXlib2FyZAorLSBjb25zb2xlIG9uIExDRCBzY3JlZW4KKy0gc2VyaWFsIHBvcnRzICh0dHlTWzAtMl0pCisgIC0gdHR5UzAgaXMgZGVmYXVsdCBmb3Igc2VyaWFsIGNvbnNvbGUKKy0gU21hcnQgSS9PIChBREMsIGtleXBhZCwgZGlnaXRhbCBpbnB1dHMsIGV0YykKKyAgU2VlIGh0dHA6Ly93d3cuYXBwbGllZGRhdGEuY29tL2RldmVsb3BlcnMvbGludXggZm9yIElPQ1RMIGRvY3VtZW50YXRpb24KKyAgYW5kIGV4YW1wbGUgdXNlciBzcGFjZSBjb2RlLiBwcy8yIGtleWJkIGlzIG11bHRpcGxleGVkIHRocm91Z2ggdGhpcyBkcml2ZXIKKworVG8gZG86CistIFVDQjEyMDAgYXVkaW8gd2l0aCBuZXcgdWNiX2dlbmVyaWMgbGF5ZXIKKy0gZXZlcnl0aGluZyBlbHNlISAgOi0pCisKK05vdGVzOgorCistIFRoZSBmbGFzaCBvbiBib2FyZCBpcyBkaXZpZGVkIGludG8gMyBwYXJ0aXRpb25zLiAgbXRkMCBpcyB3aGVyZQorICB0aGUgQURTIGJvb3QgUk9NIGFuZCB6SW1hZ2UgaXMgc3RvcmVkLiAgSXQncyBiZWVuIG1hcmtlZCBhcworICByZWFkLW9ubHkgdG8ga2VlcCB5b3UgZnJvbSBibGFzdGluZyBvdmVyIHRoZSBib290bG9hZGVyLiA6KSAgbXRkMSBpcworICBmb3IgdGhlIHJhbWRpc2suZ3ogaW1hZ2UuICBtdGQyIGlzIHVzZXIgZmxhc2ggc3BhY2UgYW5kIGNhbiBiZQorICB1dGlsaXplZCBmb3IgZWl0aGVyIEpGRlMgb3IgaWYgeW91J3JlIGZlZWxpbmcgY3JhenksIHJ1bm5pbmcgZXh0MgorICBvbiB0b3Agb2YgaXQuIElmIHlvdSdyZSBub3QgdXNpbmcgdGhlIEFEUyBib290bG9hZGVyLCB5b3UncmUKKyAgd2VsY29tZSB0byBibGFzdCBvdmVyIHRoZSBtdGQxIHBhcnRpdGlvbiBhbHNvLgorCistIDE2YnBwIG1vZGUgcmVxdWlyZXMgYSBkaWZmZXJlbnQgY2FibGUgdGhhbiB3aGF0IHNoaXBzIHdpdGggdGhlIGJvYXJkLgorICBDb250YWN0IEFEUyBvciBsb29rIHRocm91Z2ggdGhlIG1hbnVhbCB0byB3aXJlIHlvdXIgb3duLiBDdXJyZW50bHksCisgIGlmIHlvdSBjb21waWxlIHdpdGggMTZiaXQgbW9kZSBzdXBwb3J0IGFuZCBzd2l0Y2ggaW50byBhIGxvd2VyIGJwcAorICBtb2RlLCB0aGUgdGltaW5nIGlzIG9mZiBzbyB0aGUgaW1hZ2UgaXMgY29ycnVwdGVkLiAgVGhpcyB3aWxsIGJlCisgIGZpeGVkIHNvb24uCisKK0FueSBjb250cmlidXRpb24gY2FuIGJlIHNlbnQgdG8gbmljb0BjYW0ub3JnIGFuZCB3aWxsIGJlIGdyZWF0bHkgd2VsY29tZSEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzTWFzdGVyIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzTWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjg3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NNYXN0ZXIKQEAgLTAsMCArMSw1MyBAQAorQURTIEdyYXBoaWNzTWFzdGVyIFNpbmdsZSBCb2FyZCBDb21wdXRlcgorCitGb3IgbW9yZSBkZXRhaWxzLCBjb250YWN0IEFwcGxpZWQgRGF0YSBTeXN0ZW1zIG9yIHNlZQoraHR0cDovL3d3dy5hcHBsaWVkZGF0YS5uZXQvcHJvZHVjdHMuaHRtbAorCitUaGUgb3JpZ2luYWwgTGludXggc3VwcG9ydCBmb3IgdGhpcyBwcm9kdWN0IGhhcyBiZWVuIHByb3ZpZGVkIGJ5CitOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+LiBDb250aW51ZWQgZGV2ZWxvcG1lbnQgd29yayBieQorV29vanVuZyBIdWggPHdodWhAYXBwbGllZGRhdGEubmV0PgorCitVc2UgJ21ha2UgZ3JhcGhpY3NtYXN0ZXJfY29uZmlnJyBiZWZvcmUgYW55ICdtYWtlIGNvbmZpZycuCitUaGlzIHdpbGwgc2V0IHVwIGRlZmF1bHRzIGZvciBHcmFwaGljc01hc3RlciBzdXBwb3J0LgorCitUaGUga2VybmVsIHpJbWFnZSBpcyBsaW5rZWQgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZCBhdCAweGMwNDAwMDAwLgorCitMaW51eCBjYW4gIGJlIHVzZWQgd2l0aCB0aGUgQURTIEJvb3RMb2FkZXIgdGhhdCBzaGlwcyB3aXRoIHRoZQorbmV3ZXIgcmV2IGJvYXJkcy4gU2VlIHRoZWlyIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGxvYWQgTGludXguCisKK1N1cHBvcnRlZCBwZXJpcGhlcmFsczoKKy0gU0ExMTAwIExDRCBmcmFtZSBidWZmZXIgKDgvMTZicHAuLi5zb3J0IG9mKQorLSBTQTExMTEgVVNCIE1hc3RlcgorLSBvbi1ib2FyZCBTTUMgOTJDOTYgZXRoZXJuZXQgTklDCistIFNBMTEwMCBzZXJpYWwgcG9ydAorLSBmbGFzaCBtZW1vcnkgYWNjZXNzIChNVEQvSkZGUykKKy0gcGNtY2lhLCBjb21wYWN0IGZsYXNoCistIHRvdWNoc2NyZWVuKHVjYjEyMDApCistIHBzLzIga2V5Ym9hcmQKKy0gY29uc29sZSBvbiBMQ0Qgc2NyZWVuCistIHNlcmlhbCBwb3J0cyAodHR5U1swLTJdKQorICAtIHR0eVMwIGlzIGRlZmF1bHQgZm9yIHNlcmlhbCBjb25zb2xlCistIFNtYXJ0IEkvTyAoQURDLCBrZXlwYWQsIGRpZ2l0YWwgaW5wdXRzLCBldGMpCisgIFNlZSBodHRwOi8vd3d3LmFwcGxpZWRkYXRhLmNvbS9kZXZlbG9wZXJzL2xpbnV4IGZvciBJT0NUTCBkb2N1bWVudGF0aW9uCisgIGFuZCBleGFtcGxlIHVzZXIgc3BhY2UgY29kZS4gcHMvMiBrZXliZCBpcyBtdWx0aXBsZXhlZCB0aHJvdWdoIHRoaXMgZHJpdmVyCisKK1RvIGRvOgorLSBldmVyeXRoaW5nIGVsc2UhICA6LSkKKworTm90ZXM6CisKKy0gVGhlIGZsYXNoIG9uIGJvYXJkIGlzIGRpdmlkZWQgaW50byAzIHBhcnRpdGlvbnMuICBtdGQwIGlzIHdoZXJlCisgIHRoZSB6SW1hZ2UgaXMgc3RvcmVkLiAgSXQncyBiZWVuIG1hcmtlZCBhcyByZWFkLW9ubHkgdG8ga2VlcCB5b3UKKyAgZnJvbSBibGFzdGluZyBvdmVyIHRoZSBib290bG9hZGVyLiA6KSAgbXRkMSBpcworICBmb3IgdGhlIHJhbWRpc2suZ3ogaW1hZ2UuICBtdGQyIGlzIHVzZXIgZmxhc2ggc3BhY2UgYW5kIGNhbiBiZQorICB1dGlsaXplZCBmb3IgZWl0aGVyIEpGRlMgb3IgaWYgeW91J3JlIGZlZWxpbmcgY3JhenksIHJ1bm5pbmcgZXh0MgorICBvbiB0b3Agb2YgaXQuIElmIHlvdSdyZSBub3QgdXNpbmcgdGhlIEFEUyBib290bG9hZGVyLCB5b3UncmUKKyAgd2VsY29tZSB0byBibGFzdCBvdmVyIHRoZSBtdGQxIHBhcnRpdGlvbiBhbHNvLgorCistIDE2YnBwIG1vZGUgcmVxdWlyZXMgYSBkaWZmZXJlbnQgY2FibGUgdGhhbiB3aGF0IHNoaXBzIHdpdGggdGhlIGJvYXJkLgorICBDb250YWN0IEFEUyBvciBsb29rIHRocm91Z2ggdGhlIG1hbnVhbCB0byB3aXJlIHlvdXIgb3duLiBDdXJyZW50bHksCisgIGlmIHlvdSBjb21waWxlIHdpdGggMTZiaXQgbW9kZSBzdXBwb3J0IGFuZCBzd2l0Y2ggaW50byBhIGxvd2VyIGJwcAorICBtb2RlLCB0aGUgdGltaW5nIGlzIG9mZiBzbyB0aGUgaW1hZ2UgaXMgY29ycnVwdGVkLiAgVGhpcyB3aWxsIGJlCisgIGZpeGVkIHNvb24uCisKK0FueSBjb250cmlidXRpb24gY2FuIGJlIHNlbnQgdG8gbmljb0BjYW0ub3JnIGFuZCB3aWxsIGJlIGdyZWF0bHkgd2VsY29tZSEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9IVVdfV0VCUEFORUwgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvSFVXX1dFQlBBTkVMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTZiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvSFVXX1dFQlBBTkVMCkBAIC0wLDAgKzEsMTcgQEAKK1RoZSBIVVdfV0VCUEFORUwgaXMgYSBwcm9kdWN0IG9mIHRoZSBnZXJtYW4gY29tcGFueSBIb2VmdCAmIFdlc3NlbCBBRworCitJZiB5b3Ugd2FudCBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlzaXQKK2h0dHA6Ly93d3cuaG9lZnQtd2Vzc2VsLmRlCisKK1RvIGJ1aWxkIHRoZSBrZXJuZWw6CisJbWFrZSBodXdfd2VicGFuZWxfY29uZmlnCisJbWFrZSBvbGRjb25maWcKKwlbYWNjZXB0IGFsbCBkZWZhdWx0c10KKwltYWtlIHpJbWFnZQorCitNb3N0bHkgb2YgdGhlIHdvcmsgaXMgZG9uZSBieToKK1JvbWFuIEpvcmRhbiAgICAgICAgIGpvckBob2VmdC13ZXNzZWwuZGUKK0NocmlzdG9waCBTY2h1bHogICAgc2NodUBob2VmdC13ZXNzZWwuZGUKKworMjAwMC8xMi8xOC8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0l0c3kgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvSXRzeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjU5NDUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0l0c3kKQEAgLTAsMCArMSwzOSBAQAorSXRzeSBpcyBhIHJlc2VhcmNoIHByb2plY3QgZG9uZSBieSB0aGUgV2VzdGVybiBSZXNlYXJjaCBMYWIsIGFuZCBTeXN0ZW1zCitSZXNlYXJjaCBDZW50ZXIgaW4gUGFsbyBBbHRvLCBDQS4gVGhlIEl0c3kgcHJvamVjdCBpcyBvbmUgb2Ygc2V2ZXJhbAorcmVzZWFyY2ggcHJvamVjdHMgYXQgQ29tcGFxIHRoYXQgYXJlIHJlbGF0ZWQgdG8gcG9ja2V0IGNvbXB1dGluZy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZToKKworCWh0dHA6Ly93d3cucmVzZWFyY2guZGlnaXRhbC5jb20vd3JsL2l0c3kvaW5kZXguaHRtbAorCitOb3RlcyBvbiBpbml0aWFsIDIuNCBJdHN5IHN1cHBvcnQgKDgvMjcvMjAwMCkgOgorVGhlIHBvcnQgd2FzIGRvbmUgb24gYW4gSXRzeSB2ZXJzaW9uIDEuNSBtYWNoaW5lIHdpdGggYSBkYXVnaHRlcmNhcmQgd2l0aAorNjQgTWVnIG9mIERSQU0gYW5kIDMyIE1lZyBvZiBGbGFzaC4gVGhlIGluaXRpYWwgd29yayBpbmNsdWRlcyBzdXBwb3J0IGZvcgorc2VyaWFsIGNvbnNvbGUgKHRvIHNlZSB3aGF0IHlvdSdyZSBkb2luZykuICBObyBvdGhlciBkZXZpY2VzIGhhdmUgYmVlbgorZW5hYmxlZC4KKworVG8gYnVpbGQsIGRvIGEgIm1ha2UgbWVudWNvbmZpZyIgKG9yIHhtZW51Y29uZmlnKSBhbmQgc2VsZWN0IEl0c3kgc3VwcG9ydC4KK0Rpc2FibGUgRmxhc2ggYW5kIExDRCBzdXBwb3J0LiBhbmQgdGhlbiBkbyBhIG1ha2UgekltYWdlLgorRmluYWxseSwgeW91IHdpbGwgbmVlZCB0byBjZCB0byBhcmNoL2FybS9ib290L3Rvb2xzIGFuZCBleGVjdXRlIGEgbWFrZSB0aGVyZQordG8gYnVpbGQgdGhlIHBhcmFtcy1pdHN5IHByb2dyYW0gdXNlZCB0byBib290IHRoZSBrZXJuZWwuCisKK0luIG9yZGVyIHRvIGluc3RhbGwgdGhlIHBvcnQgb2YgMi40IHRvIHRoZSBpdHN5LCBZb3Ugd2lsbCBuZWVkIHRvIHNldCB0aGUKK2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgbW9uaXRvciBhcyBmb2xsb3dzOgorQXJnIDE6MHgwODM0MDAwMCwgQXJnMjogMHhDMDAwMDAwMCwgQXJnMzoxOCAoMHgxMiksIEFyZzQ6MAorTWFrZSBzdXJlIHRoZSBzdGFydC1yb3V0aW5lIGFkZHJlc3MgaXMgc2V0IHRvIDB4MDAwNjAwMDAuCisKK05leHQsIGZsYXNoIHRoZSBwYXJhbXMtaXRzeSBwcm9ncmFtIHRvIDB4MDAwNjAwMDAgKCJwIDEgMHgwMDA2MDAwMCIgaW4gdGhlCitmbGFzaCBtZW51KSAgRmxhc2ggdGhlIGtlcm5lbCBpbiBhcmNoL2FybS9ib290L3pJbWFnZSBpbnRvIDB4MDgzNDAwMDAKKygicCAxIDB4MDAzNDAwMDAiKS4gIEZpbmFsbHkgZmxhc2ggYW4gaW5pdGlhbCByYW1kaXNrIGludG8gMHhDODAwMDAwMAorKCJwIDIgMHgwIikgIFdlIHVzZWQgcmFtZGlzay0yLTMwLmd6IGZyb20gdGhlIDAuMTEgdmVyc2lvbiBkaXJlY3Rvcnkgb24KK2hhbmRoZWxkcy5vcmcuCisKK1RoZSBzZXJpYWwgY29ubmVjdGlvbiB3ZSBlc3RhYmxpc2hlZCB3YXMgYXQ6CisgOC1iaXQgZGF0YSwgbm8gcGFyaXR5LCAxIHN0b3AgYml0KHMpLCAxMTUyMDAuMDAgYi9zLiBpbiB0aGUgbW9uaXRvciwgaW4gdGhlCitwYXJhbXMtaXRzeSBwcm9ncmFtLCBhbmQgaW4gdGhlIGtlcm5lbCBpdHNlbGYuICBUaGlzIGNhbiBiZSBjaGFuZ2VkLCBidXQKK25vdCBlYXNpbHkuIFRoZSBtb25pdG9yIHBhcmFtZXRlcnMgYXJlIGVhc2lseSBjaGFuZ2VkLCB0aGUgcGFyYW1zIHByb2dyYW0KK3NldHVwIGlzIGFzc2VtYmx5IG91dGwncywgYW5kIHRoZSBrZXJuZWwgaXMgYSBjb25maWd1cmF0aW9uIGl0ZW0gc3BlY2lmaWMgdG8KK3RoZSBpdHN5LiAoaS5lLiBncmVwIGZvciBDT05GSUdfU0ExMTAwX0lUU1kgYW5kIHlvdSdsbCBmaW5kIHdoZXJlIGl0IGlzLikKKworCitUaGlzIHNob3VsZCBnZXQgeW91IGEgcHJvcGVybHkgYm9vdGluZyAyLjQga2VybmVsIG9uIHRoZSBpdHN5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0xBUlQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvTEFSVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjczZjUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0xBUlQKQEAgLTAsMCArMSwxNCBAQAorTGludXggQWR2YW5jZWQgUmFkaW8gVGVybWluYWwgKExBUlQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExBUlQgaXMgYSBzbWFsbCAoNy41IHggMTBjbSkgU0EtMTEwMCBib2FyZCwgZGVzaWduZWQgZm9yIGVtYmVkZGVkCithcHBsaWNhdGlvbnMuIEl0IGhhcyAzMiBNQiBEUkFNLCA0TUIgRmxhc2ggUk9NLCBkb3VibGUgUlMyMzIgYW5kIGFsbAorb3RoZXIgU3Ryb25nQVJNLWdhZGdldHMuIEFsbW9zdCBhbGwgU0Egc2lnbmFscyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZQordGhyb3VnaCBhIG51bWJlciBvZiBjb25uZWN0b3JzLiBUaGUgcG93ZXJzdXBwbHkgYWNjZXB0cyB2b2x0YWdlcworYmV0d2VlbiAzLjVWIGFuZCAxNlYgYW5kIGlzIG92ZXJkaW1lbnNpb25lZCB0byBzdXBwb3J0IGEgcmFuZ2Ugb2YKK2RhdWdodGVyYm9hcmRzLiBBIHF1YWQgRXRoZXJuZXQgLyBJREUgLyBQUzIgLyBzb3VuZCBkYXVnaHRlcmJvYXJkCitpcyB1bmRlciBkZXZlbG9wbWVudCwgd2l0aCBwbGVudHkgb2Ygb3RoZXJzIGluIGRpZmZlcmVudCBzdGFnZXMgb2YKK3BsYW5uaW5nLgorCitUaGUgaGFyZHdhcmUgZGVzaWducyBmb3IgdGhpcyBib2FyZCBoYXZlIGJlZW4gcmVsZWFzZWQgdW5kZXIgYW4gb3BlbiBsaWNlbnNlOworc2VlIHRoZSBMQVJUIHBhZ2UgYXQgaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvIGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1BMRUIgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUExFQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNhZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1BMRUIKQEAgLTAsMCArMSwxMSBAQAorVGhlIFBMRUIgcHJvamVjdCB3YXMgc3RhcnRlZCBhcyBhIHN0dWRlbnQgaW5pdGlhdGl2ZSBhdCB0aGUgU2Nob29sIG9mCitDb21wdXRlciBTY2llbmNlIGFuZCBFbmdpbmVlcmluZywgVW5pdmVyc2l0eSBvZiBOZXcgU291dGggV2FsZXMgdG8gbWFrZSBhCitwb2NrZXQgY29tcHV0ZXIgY2FwYWJsZSBvZiBydW5uaW5nIHRoZSBMaW51eCBLZXJuZWwuCisKK1BMRUIgc3VwcG9ydCBoYXMgeWV0IHRvIGJlIGZ1bGx5IGludGVncmF0ZWQuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CisKKwlodHRwOi8vd3d3LmNzZS51bnN3LmVkdS5hdS9+cGxlYi8KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUGFuZ29saW4gYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvUGFuZ29saW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3YTYxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9QYW5nb2xpbgpAQCAtMCwwICsxLDIzIEBACitQYW5nb2xpbiBpcyBhIFN0cm9uZ0FSTSAxMTEwLWJhc2VkIGV2YWx1YXRpb24gcGxhdGZvcm0gcHJvZHVjZWQKK2J5IERpYWxvZ3VlIFRlY2hub2xvZ3kgKGh0dHA6Ly93d3cuZGlhbG9ndWUuY29tLnR3LykuCitJdCBoYXMgRUlTQSBzbG90cyBmb3IgZWFzZSBvZiBjb25maWd1cmF0aW9uIHdpdGggU0RSQU0vRmxhc2gKK21lbW9yeSBjYXJkLCBVU0IvU2VyaWFsL0F1ZGlvIGNhcmQsIENvbXBhY3QgRmxhc2ggY2FyZCwKK1BDTUNJQS9JREUgY2FyZCBhbmQgVEZULUxDRCBjYXJkLgorCitUbyBjb21waWxlIGZvciBQYW5nb2xpbiwgeW91IG11c3QgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworCW1ha2UgcGFuZ29saW5fY29uZmlnCisJbWFrZSBvbGRjb25maWcKKwltYWtlIHpJbWFnZQorCitTdXBwb3J0ZWQgcGVyaXBoZXJhbHM6CistIFNBMTExMCBzZXJpYWwgcG9ydCAoVUFSVDEvVUFSVDIvVUFSVDMpCistIGZsYXNoIG1lbW9yeSBhY2Nlc3MKKy0gY29tcGFjdCBmbGFzaCBkcml2ZXIKKy0gVURBMTM0MSBzb3VuZCBkcml2ZXIKKy0gU0ExMTAwIExDRCBjb250cm9sbGVyIGZvciA4MDB4NjAwIDE2YnBwIFRGVC1MQ0QKKy0gTVEtMjAwIGRyaXZlciBmb3IgODAweDYwMCAxNmJwcCBURlQtTENECistIFBlbm1vdW50KHRvdWNoIHBhbmVsKSBkcml2ZXIKKy0gUENNQ0lBIGRyaXZlcgorLSBTTUM5MUM5NCBMQU4gZHJpdmVyCistIElERSBkcml2ZXIgKGV4cGVyaW1lbnRhbCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9UaWZvbiBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9UaWZvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE5MzRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1RpZm9uCkBAIC0wLDAgKzEsNyBAQAorVGlmb24KKy0tLS0tCisKK01vcmUgaW5mbyBoYXMgdG8gY29tZS4uLgorCitDb250YWN0OiBQZXRlciBEYW5pZWxzc29uIDxwZXRlci5kYW5pZWxzc29uQGVyYS10LmVyaWNzc29uLnNlPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvVmljdG9yIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1ZpY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWU4MWZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1ZpY3RvcgpAQCAtMCwwICsxLDE2IEBACitWaWN0b3IgaXMga25vd24gYXMgYSAiZGlnaXRhbCB0YWxraW5nIGJvb2sgcGxheWVyIiBtYW51ZmFjdHVyZWQgYnkKK1Zpc3VBaWRlLCBJbmMuIHRvIGJlIHVzZWQgYnkgYmxpbmQgcGVvcGxlLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIFZpY3Rvciwgc2VlOgorCisJaHR0cDovL3d3dy52aXN1YWlkZS5jb20vdmljdG9yCisKK09mIGNvdXJzZSBWaWN0b3IgaXMgdXNpbmcgTGludXggYXMgaXRzIG1haW4gb3BlcmF0aW5nIHN5c3RlbS4KK1RoZSBWaWN0b3IgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4IGlzIG1haW50YWluZWQgYnkgTmljb2xhcyBQaXRyZToKKworCW5pY29AdmlzdWFpZGUuY29tCisJbmljb0BjYW0ub3JnCisKK0ZvciBhbnkgY29tbWVudHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29udGFjdCBtZSB0aHJvdWdoIHRoZSBhYm92ZQorYWRkcmVzc2VzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvWW9weSBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9Zb3B5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNGYxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvWW9weQpAQCAtMCwwICsxLDIgQEAKK1NlZSBodHRwOi8vd3d3LnlvcHlkZXZlbG9wZXIub3JnIGZvciBtb3JlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvZW1wZWcgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvZW1wZWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjZTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9lbXBlZwpAQCAtMCwwICsxLDIgQEAKK1NlZSAuLi9lbXBlZy9SRUFETUUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvbmFub0VuZ2luZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQzMWNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL25hbm9FbmdpbmUKQEAgLTAsMCArMSwxMSBAQAorbmFub0VuZ2luZQorLS0tLS0tLS0tLQorCisibmFub0VuZ2luZSIgaXMgYSBTQTExMTAgYmFzZWQgc2luZ2xlIGJvYXJkIGNvbXB1dGVyIGZyb20gCitCcmlnaHQgU3RhciBFbmdpbmVlcmluZyBJbmMuICBTZWUgd3d3LmJyaWdodHN0YXJlbmcuY29tL2FybQorZm9yIG1vcmUgaW5mby4KKyhSZWY6IFN0dWFydCBBZGFtcyA8c2phQGJyaWdodHN0YXJlbmcuY29tPikKKworQWxzbyB2aXNpdCBMYXJyeSBEb29saXR0bGUncyAiTGludXggZm9yIHRoZSBuYW5vRW5naW5lIiBzaXRlOgoraHR0cDovL3JlY3ljbGUubGJsLmdvdi9+bGRvb2xpdHQvYnNlLworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvc2VyaWFsX1VBUlQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvc2VyaWFsX1VBUlQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMmU5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9zZXJpYWxfVUFSVApAQCAtMCwwICsxLDQ3IEBACitUaGUgU0ExMTAwIHNlcmlhbCBwb3J0IGhhZCBpdHMgbWFqb3IvbWlub3IgbnVtYmVycyBvZmZpY2lhbGx5IGFzc2lnbmVkOgorCis+IERhdGU6IFN1biwgMjQgU2VwIDIwMDAgMjE6NDA6MjcgLTA3MDAKKz4gRnJvbTogSC4gUGV0ZXIgQW52aW4gPGhwYUB0cmFuc21ldGEuY29tPgorPiBUbzogTmljb2xhcyBQaXRyZSA8bmljb0BDQU0uT1JHPgorPiBDYzogRGV2aWNlIExpc3QgTWFpbnRhaW5lciA8ZGV2aWNlQGxhbmFuYS5vcmc+Cis+IFN1YmplY3Q6IFJlOiBkZXZpY2UKKz4gCis+IE9rYXkuICBOb3RlIHRoYXQgZGV2aWNlIG51bWJlcnMgMjA0IGFuZCAyMDUgYXJlIHVzZWQgZm9yICJsb3cgZGVuc2l0eQorPiBzZXJpYWwgZGV2aWNlcyIsIHNvIHlvdSB3aWxsIGhhdmUgYSByYW5nZSBvZiBtaW5vcnMgb24gdGhvc2UgbWFqb3JzICh0aGUKKz4gdHR5IGRldmljZSBsYXllciBoYW5kbGVzIHRoaXMganVzdCBmaW5lLCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorPiBkb2luZyBhbnl0aGluZyBzcGVjaWFsLikKKz4gCis+IFNvIHlvdXIgYXNzaWdubWVudHMgYXJlOgorPiAKKz4gMjA0IGNoYXIgICAgICAgIExvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cworPiAgICAgICAgICAgICAgICAgICA1ID0gL2Rldi90dHlTQTAgICAgICAgICAgICAgICBTQTExMDAgYnVpbHRpbiBzZXJpYWwgcG9ydCAwCis+ICAgICAgICAgICAgICAgICAgIDYgPSAvZGV2L3R0eVNBMSAgICAgICAgICAgICAgIFNBMTEwMCBidWlsdGluIHNlcmlhbCBwb3J0IDEKKz4gICAgICAgICAgICAgICAgICAgNyA9IC9kZXYvdHR5U0EyICAgICAgICAgICAgICAgU0ExMTAwIGJ1aWx0aW4gc2VyaWFsIHBvcnQgMgorPiAKKz4gMjA1IGNoYXIgICAgICAgIExvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cyAoYWx0ZXJuYXRlIGRldmljZSkKKz4gICAgICAgICAgICAgICAgICAgNSA9IC9kZXYvY3VzYTAgICAgICAgICAgICAgICAgQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNBMAorPiAgICAgICAgICAgICAgICAgICA2ID0gL2Rldi9jdXNhMSAgICAgICAgICAgICAgICBDYWxsb3V0IGRldmljZSBmb3IgdHR5U0ExCis+ICAgICAgICAgICAgICAgICAgIDcgPSAvZGV2L2N1c2EyICAgICAgICAgICAgICAgIENhbGxvdXQgZGV2aWNlIGZvciB0dHlTQTIKKz4KKworSWYgeW91J3JlIG5vdCB1c2luZyBkZXZmcywgeW91IG11c3QgY3JlYXRlIHRob3NlIGlub2RlcyBpbiAvZGV2CitvbiB0aGUgcm9vdCBmaWxlc3lzdGVtIHVzZWQgYnkgeW91ciBTQTExMDAtYmFzZWQgZGV2aWNlOgorCisJbWtub2QgdHR5U0EwIGMgMjA0IDUKKwlta25vZCB0dHlTQTEgYyAyMDQgNgorCW1rbm9kIHR0eVNBMiBjIDIwNCA3CisJbWtub2QgY3VzYTAgYyAyMDUgNQorCW1rbm9kIGN1c2ExIGMgMjA1IDYKKwlta25vZCBjdXNhMiBjIDIwNSA3CisKK0luIGFkZGl0aW9uIHRvIHRoZSBjcmVhdGlvbiBvZiB0aGUgYXBwcm9wcmlhdGUgZGV2aWNlIG5vZGVzIGFib3ZlLCB5b3UKK211c3QgZW5zdXJlIHlvdXIgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMgbWFrZSB1c2Ugb2YgdGhlIGNvcnJlY3QgZGV2aWNlCituYW1lLiBUaGUgY2xhc3NpYyBleGFtcGxlIGlzIHRoZSBjb250ZW50IG9mIHRoZSAvZXRjL2luaXR0YWIgZmlsZSB3aGVyZQoreW91IG1pZ2h0IGhhdmUgYSBnZXR0eSBwcm9jZXNzIHN0YXJ0ZWQgb24gdHR5UzAuICBJbiB0aGlzIGNhc2U6CisKKy0gcmVwbGFjZSBvY2N1cnJlbmNlcyBvZiB0dHlTMCB3aXRoIHR0eVNBMCwgdHR5UzEgd2l0aCB0dHlTQTEsIGV0Yy4KKworLSBkb24ndCBmb3JnZXQgdG8gYWRkICd0dHlTQTAnLCAnY29uc29sZScsIG9yIHRoZSBhcHByb3ByaWF0ZSB0dHkgbmFtZQorICBpbiAvZXRjL3NlY3VyZXR0eSBmb3Igcm9vdCB0byBiZSBhbGxvd2VkIHRvIGxvZ2luIGFzIHdlbGwuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0VCMjQxMElUWC50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvRUIyNDEwSVRYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDBlM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0VCMjQxMElUWC50eHQKQEAgLTAsMCArMSw1OCBAQAorCQlTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYIChCQVNUKQorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBFQjI0MTBJVFggaXMgYSBTM0MyNDEwIGJhc2VkIGRldmVsb3BtZW50IGJvYXJkIHdpdGggYSB2YXJpZXR5IG9mCisgIHBlcmlwaGVyYWxzIGFuZCBleHBhbnNpb24gY29ubmVjdG9ycy4gVGhpcyBib2FyZCBpcyBhbHNvIGtub3duIGJ5CisgIHRoZSBzaG9ydGVuZWQgbmFtZSBvZiBCYXN0LgorCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworICBUbyBzZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgdXNlIGBtYWtlIGJhc3RfZGVmY29uZmlnYCB3aGljaAorICBzdXBwb3J0cyB0aGUgY29tbW9ubHkgdXNlZCBmZWF0dXJlcyBvZiB0aGlzIGJvYXJkLgorCisKK1N1cHBvcnQKKy0tLS0tLS0KKworICBPZmZpY2lhbCBzdXBwb3J0IGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBvbiB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzCisgIHdlYnNpdGUsIGF0IHRoZSBwcm9kdWN0IHBhZ2UgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworCisgIFVzZWZ1bCBsaW5rczoKKworICAgIC0gUmVzb3VyY2VzIFBhZ2UgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYL3Jlc291cmNlcy5odG1sCisKKyAgICAtIEJvYXJkIEZBUSBhdCBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjI0MTBJVFgvZmFxLmh0bWwKKworICAgIC0gQm9vdGxvYWRlciBpbmZvIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXQUJMRS9yZXNvdXJjZXMuaHRtbAorICAgICAgYW5kIEZBUSBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0FCTEUvZmFxLmh0bWwKKworCitNVEQKKy0tLQorCisgIFRoZSBOQU5EIGFuZCBOT1Igc3VwcG9ydCBoYXMgYmVlbiBtZXJnZWQgZnJvbSB0aGUgbGludXgtbXRkIHByb2plY3QuCisgIEFueSBwcm9sYmVtcywgc2VlIGh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIGZvciBtb3JlCisgIGluZm9ybWF0aW9uIG9yIHVwLXRvLWRhdGUgdmVyc2lvbnMgb2YgbGludXgtbXRkLgorCisKK0lERQorLS0tCisKKyAgQm90aCBvbmJvYXJkIElERSBwb3J0cyBhcmUgc3VwcG9ydGVkLCBob3dldmVyIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yCisgIGNoYW5naW5nIHNwZWVkIG9mIGRldmljZXMsIFBJTyBNb2RlIDQgY2FwYWJsZSBkcml2ZXMgc2hvdWxkIGJlIHVzZWQuCisKKworTWFpbnRhaW5lcnMKKy0tLS0tLS0tLS0tCisKKyAgVGhpcyBib2FyZCBpcyBtYWludGFpbmVkIGJ5IFNpbXRlYyBFbGVjdHJvbmljcy4KKworCisoYykgMjAwNCBCZW4gRG9va3MsIFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0dQSU8udHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0dQSU8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjI3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvR1BJTy50eHQKQEAgLTAsMCArMSwxMjIgQEAKKwkJCVMzQzI0MTAgR1BJTyBDb250cm9sCisJCQk9PT09PT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBzM2MyNDEwIGtlcm5lbCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gY29uZmlndXJlIGFuZAorICBtYW5pcHVsYXRlIHRoZSBzdGF0ZSBvZiB0aGUgR1BJTyBwaW5zLCBhbmQgZmluZCBvdXQgb3RoZXIKKyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS4KKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgY29uZGl0aW9ucyBhdHRhY2hlZCB0byB0aGUgY29uZmlndXJhdGlvbgorICBvZiB0aGUgczNjMjQxMCBHUElPIHN5c3RlbSwgcGxlYXNlIHJlYWQgdGhlIFNhbXN1bmcgcHJvdmlkZWQKKyAgZGF0YS1zaGVldC91c2VycyBtYW51YWwgdG8gZmluZCBvdXQgdGhlIGNvbXBsZXRlIGxpc3QuCisKKworSGVhZGVycworLS0tLS0tLQorCisgIFNlZSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGZvciB0aGUgbGlzdAorICBvZiBHUElPIHBpbnMsIGFuZCB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZW0uIFRoaXMKKyAgaXMgaW5jbHVkZWQgYnkgdXNpbmcgI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisgIFRoZSBHUElPIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBoYXJkd2FyZQorICBoZWFkZXIgaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oIHdoaWNoIGNhbiBiZQorICBpbmNsdWRlZCBieSAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworICBBIHVzZWZ1bCBhbW1vdW50IG9mIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBoYXJkd2FyZQorICBoZWFkZXIgb24gaG93IHRoZSBHUElPIGZ1bmN0aW9ucyAoYW5kIG90aGVycykgd29yay4KKworICBXaGlsc3QgYSBudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGRvIG1ha2Ugc29tZSBjaGVja3Mgb24gd2hhdAorICBpcyBwYXNzZWQgdG8gdGhlbSwgZm9yIHNwZWVkIG9mIHVzZSwgdGhleSBtYXkgbm90IGFsd2F5cyBlbnN1cmUKKyAgdGhhdCB0aGUgdXNlciBzdXBwbGllZCBkYXRhIHRvIHRoZW0gaXMgY29ycmVjdC4KKworCitQSU4gTnVtYmVycworLS0tLS0tLS0tLS0KKworICBFYWNoIHBpbiBoYXMgYW4gdW5pcXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggaXQgaW4gcmVncy1ncGlvLmgsCisgIGVnIFMzQzI0MTBfR1BBMCBvciBTM0MyNDEwX0dQRjEuIFRoZXNlIGRlZmluZXMgYXJlIHVzZWQgdG8gdGVsbAorICB0aGUgR1BJTyBmdW5jdGlvbnMgd2hpY2ggcGluIGlzIHRvIGJlIHVzZWQuCisKKworQ29uZmlndXJpbmcgYSBwaW4KKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhbGxvd3MgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiBwaW4gdG8KKyAgYmUgY2hhbmdlZC4KKworICAgIHZvaWQgczNjMjQxMF9ncGlvX2NmZ3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOworCisgIEVnOgorCisgICAgIHMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEEwLCBTM0MyNDEwX0dQQTBfQUREUjApOworICAgICBzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFOCwgUzNDMjQxMF9HUEU4X1NEREFUMSk7CisKKyAgIHdoaWNoIHdvdWxkIHR1cm4gR1BBMCBpbnRvIHRoZSBsb3dlc3QgQWRkcmVzcyBsaW5lIEEwLCBhbmQgc2V0CisgICBHUEU4IHRvIGJlIGNvbm5lY3RlZCB0byB0aGUgU0RJTy9NTUMgY29udHJvbGxlcidzIFNEREFUMSBsaW5lLgorCisKK1JlYWRpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBhIHBpbiBjYW4gYmUgcmVhZCBieSB1c2luZzoKKworICBzM2MyNDEwX2dwaW9fZ2V0Y2ZnKHVuc2lnbmVkIGludCBwaW4pOworCisgIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBmcm9tIHRoZSBzYW1lIHNldCBvZiB2YWx1ZXMgd2hpY2ggY2FuIGJlCisgIHBhc3NlZCB0byBzM2MyNDEwX2dwaW9fY2ZncGluKCkuCisKKworQ29uZmlndXJpbmcgYSBwdWxsLXVwIHJlc2lzdG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBIGxhcmdlIHByb3BvcnRpb24gb2YgdGhlIEdQSU8gcGlucyBvbiB0aGUgUzNDMjQxMCBjYW4gaGF2ZSB3ZWFrCisgIHB1bGwtdXAgcmVzaXN0b3JzIGVuYWJsZWQuIFRoaXMgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIGZvbGxvd2luZworICBmdW5jdGlvbjoKKworICAgIHZvaWQgczNjMjQxMF9ncGlvX3B1bGx1cCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgdG8pOworCisgIFdoZXJlIHRoZSB0byB2YWx1ZSBpcyB6ZXJvIHRvIHNldCB0aGUgcHVsbC11cCBvZmYsIGFuZCAxIHRvIGVuYWJsZQorICB0aGUgc3BlY2lmaWVkIHB1bGwtdXAuIEFueSBvdGhlciB2YWx1ZXMgYXJlIGN1cnJlbnRseSB1bmRlZmluZWQuCisKKworR2V0dGluZyB0aGUgc3RhdGUgb2YgYSBQSU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIHN0YXRlIG9mIGEgcGluIGNhbiBiZSByZWFkIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbjoKKworICAgIHVuc2lnbmVkIGludCBzM2MyNDEwX2dwaW9fZ2V0cGluKHVuc2lnbmVkIGludCBwaW4pOworCisgIFRoaXMgd2lsbCByZXR1cm4gZWl0aGVyIHplcm8gb3Igbm9uLXplcm8uIERvIG5vdCBjb3VudCBvbiB0aGlzCisgIGZ1bmN0aW9uIHJldHVybmluZyAxIGlmIHRoZSBwaW4gaXMgc2V0LgorCisKK1NldHRpbmcgdGhlIHN0YXRlIG9mIGEgUElOCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSB2YWx1ZSBhbiBwaW4gaXMgb3V0cHV0aW5nIGNhbiBiZSBtb2RpZmllZCBieSB1c2luZyB0aGUgZm9sbG93aW5nOgorCisgICAgdm9pZCBzM2MyNDEwX2dwaW9fc2V0cGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB0byk7CisKKyAgV2hpY2ggc2V0cyB0aGUgZ2l2ZW4gcGluIHRvIHRoZSB2YWx1ZS4gVXNlIDAgdG8gd3JpdGUgMCwgYW5kIDEgdG8KKyAgc2V0IHRoZSBvdXRwdXQgdG8gMS4KKworCitHZXR0aW5nIHRoZSBJUlEgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIFBJTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiBtYXAgdGhlIGdpdmVuIHBpbiBudW1iZXIgdG8gYW4gSVJRCisgIG51bWJlciB0byBwYXNzIHRvIHRoZSBJUlEgc3lzdGVtLgorCisgICBpbnQgczNjMjQxMF9ncGlvX2dldGlycSh1bnNpZ25lZCBpbnQgcGluKTsKKworICBOb3RlLCBub3QgYWxsIHBpbnMgaGF2ZSBhbiBJUlEuCisKKworQXV0aG91cgorLS0tLS0tLQorCisKK0JlbiBEb29rcywgMDMgT2N0b2JlciAyMDA0CisoYykgMjAwNCBCZW4gRG9va3MsIFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0gxOTQwLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9IMTk0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiMWRlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9IMTk0MC50eHQKQEAgLTAsMCArMSw0MCBAQAorCQlIUCBJUEFRIEgxOTQwCisJCT09PT09PT09PT09PT0KKworaHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL3Byb2plY3RzL2gxOTQwLmh0bWwKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworICBUaGUgSFAgSDE5NDAgaXMgYSBTM0MyNDEwIGJhc2VkIGhhbmRoZWxkIGRldmljZSwgd2l0aAorICBibHVldG9vdGggY29ubmVjdGl2aXR5LgorCisKK1N1cHBvcnQKKy0tLS0tLS0KKworICBBIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlCisKKyAgaGFuZGhlbGRzLm9yZyBwcm9qZWN0IHBhZ2U6CisKKyAgICBodHRwOi8vd3d3LmhhbmRoZWxkcy5vcmcvcHJvamVjdHMvaDE5NDAuaHRtbAorCisgIGhhbmRoZWxkcy5vcmcgd2lraSBwYWdlOgorCisgICAgaHR0cDovL2hhbmRoZWxkcy5vcmcvbW9pbi9tb2luLmNnaS9IcElwYXFIMTk0MAorCisgIEhlcmJlcnQgUPZ0emwgcGFnZXM6CisKKyAgICBodHRwOi8vdnNlcnZlci4xM3RoZmxvb3IuYXQvSDE5NDAvCisKKworTWFpbnRhaW5lcnMKKy0tLS0tLS0tLS0tCisKKyAgVGhpcyBwcm9qZWN0IGlzIGJlaW5nIG1haW50YWluZWQgYW5kIGRldmVsb3BlZCBieSBhIHZhcmlldHkKKyAgb2YgcGVvcGxlLCBpbmNsdWRpbmcgQmVuIERvb2tzLCBBcm5hdWQgUGF0YXJkLCBhbmQgSGVyYmVydCBQ9nR6bC4KKworICBUaGFua3MgdG8gdGhlIG1hbnkgb3RoZXJzIHdobyBoYXZlIGFsc28gcHJvdmlkZWQgc3VwcG9ydC4KKworCisoYykgMjAwNSBCZW4gRG9va3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY0ZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dApAQCAtMCwwICsxLDE1NiBAQAorCQkJUzNDMjRYWCBBUk0gTGludXggT3ZlcnZpZXcKKwkJCT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBTYW1zdW5nIFMzQzI0WFggcmFuZ2Ugb2YgQVJNOSBTeXN0ZW0tb24tQ2hpcCBDUFVzIGFyZSBzdXBwb3J0ZWQKKyAgYnkgdGhlICdzM2MyNDEwJyBhcmNoaXRlY3R1cmUgb2YgQVJNIExpbnV4LiBDdXJyZW50bHkgdGhlIFMzQzI0MTAgYW5kCisgIHRoZSBTM0MyNDQwIGFyZSBzdXBwb3J0ZWQgQ1BVcy4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKKyAgQSBnZW5lcmljIFMzQzI0MTAgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCwgYW5kIGNhbiBiZSB1c2VkIGFzIHRoZQorICBkZWZhdWx0IGJ5IGBtYWtlIHMzYzI0MTBfZGVmY29uZmlnYC4gVGhpcyBjb25maWd1cmF0aW9uIGhhcyBzdXBwb3J0CisgIGZvciBhbGwgdGhlIG1hY2hpbmVzLCBhbmQgdGhlIGNvbW1vbmx5IHVzZWQgZmVhdHVyZXMgb24gdGhlbS4KKworICBDZXJ0YWluIG1hY2hpbmVzIG1heSBoYXZlIHRoZWlyIG93biBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFzIHdlbGwsCisgIHBsZWFzZSBjaGVjayB0aGUgbWFjaGluZSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uLgorCisKK01hY2hpbmVzCistLS0tLS0tLQorCisgIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIG1hY2hpbmVzIGFyZSBhcyBmb2xsb3dzOgorCisgIFNpbXRlYyBFbGVjdHJvbmljcyBFQjI0MTBJVFggKEJBU1QpCisKKyAgICBBIGdlbmVyYWwgcHVycG9zZSBkZXZlbG9wbWVudCBib2FyZCwgc2VlIEVCMjQxMElUWC50eHQgZm9yIGZ1cnRoZXIKKyAgICBkZXRhaWxzCisKKyAgU2Ftc3VuZyBTTURLMjQxMAorCisgICAgU2Ftc3VuZydzIG93biBkZXZlbG9wbWVudCBib2FyZCwgZ2VhcmVkIGZvciBQREEgd29yay4KKworICBTYW1zdW5nL01lcml0ZWNoIFNNREsyNDQwCisKKyAgICBUaGUgUzNDMjQ0MCBjb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIFNNREsyNDQwCisKKyAgVGhvcmNvbSBWUjEwMDAKKworICAgIEN1c3RvbSBlbWJlZGRlZCBib2FyZAorCisgIEhQIElQQVEgMTk0MAorCisgICAgSGFuZGhlbGQgKElQQVEpLCBhdmFpbGFibGUgaW4gc2V2ZXJhbCB2YXJpZXRpZXMKKworICBIUCBpUEFRIHJ4MzcxNQorCisgICAgUzNDMjQ0MCBiYXNlZCBJUEFRLCB3aXRoIGEgbnVtYmVyIG9mIHZhcmlhdGlvbnMgZGVwZW5kaW5nIG9uCisgICAgZmVhdHVyZXMgc2hpcHBlZC4KKworICBBY2VyIE4zMAorCisgICAgQSBTM0MyNDEwIGJhc2VkIFBEQSBmcm9tIEFjZXIuICBUaGVyZSBpcyBhIFdpa2kgcGFnZSBhdAorICAgIGh0dHA6Ly9oYW5kaGVsZHMub3JnL21vaW4vbW9pbi5jZ2kvQWNlck4zMERvY3VtZW50YXRpb24gLgorCisKK0FkZGluZyBOZXcgTWFjaGluZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgYXJjaGljdHVyZSBoYXMgYmVlbiBkZXNpZ25lZCB0byBzdXBwb3J0IGFzIG1hbnkgbWFjaGluZXMgYXMgY2FuCisgIGJlIGNvbmZpZ3VyZWQgZm9yIGl0IGluIG9uZSBrZXJuZWwgYnVpbGQsIGFuZCBhbnkgZnV0dXJlIGFkZGl0aW9ucworICBzaG91bGQga2VlcCB0aGlzIGluIG1pbmQgYmVmb3JlIGFsdGVyaW5nIGl0ZW1zIG91dHNpZGUgb2YgdGhlaXIgb3duCisgIG1hY2hpbmUgZmlsZXMuCisKKyAgTWFjaGluZSBkZWZpbml0aW9ucyBzaG91bGQgYmUga2VwdCBpbiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAsCisgIGFuZCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZXhhbXBsZXMgdGhhdCBjYW4gYmUgbG9va2VkIGF0LgorCisgIFJlYWQgdGhlIGtlcm5lbCBwYXRjaCBzdWJtaXNzaW9uIHBvbGljaWVzIGFzIHdlbGwgYXMgdGhlCisgIERvY3VtZW50YXRpb24vYXJtIGRpcmVjdG9yeSBiZWZvcmUgc3VibWl0dGluZyBwYXRjaGVzLiBUaGUKKyAgQVJNIGtlcm5lbCBzZXJpZXMgaXMgbWFuYWdlZCBieSBSdXNzZWxsIEtpbmcsIGFuZCBoYXMgYSBwYXRjaCBzeXN0ZW0KKyAgbG9jYXRlZCBhdCBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL3BhdGNoZXMvCisgIGFzIHdlbGwgYXMgbWFpbGluZyBsaXN0cyB0aGF0IGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBzYW1lIHNpdGUuCisKKyAgQXMgYSBjb3VydGVzeSwgcGxlYXNlIG5vdGlmeSA8YmVuLWxpbnV4QGZsdWZmLm9yZz4gb2YgYW55IG5ldworICBtYWNoaW5lcyBvciBvdGhlciBtb2RpZmljYXRpb25zLgorCisgIEFueSBsYXJnZSBzY2FsZSBtb2RpZmljYXRpb25zLCBvciBuZXcgZHJpdmVycyBzaG91bGQgYmUgZGlzY3Vzc2VkCisgIG9uIHRoZSBBUk0ga2VybmVsIG1haWxpbmcgbGlzdCAobGludXgtYXJtLWtlcm5lbCkgYmVmb3JlIGJlaW5nCisgIGF0dGVtcHRlZC4KKworCitOQU5ECistLS0tCisKKyAgVGhlIGN1cnJlbnQga2VybmVscyBub3cgaGF2ZSBzdXBwb3J0IGZvciB0aGUgczNjMjQxMCBOQU5ECisgIGNvbnRyb2xsZXIuIElmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgdGhlIGxhdGVzdCBsaW51eC1tdGQKKyAgQ1ZTIGNhbiBiZSBmb3VuZCBmcm9tIGh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvCisKKworU2VyaWFsCistLS0tLS0KKworICBUaGUgczNjMjQxMCBzZXJpYWwgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBpbnRlcm5hbAorICBzZXJpYWwgcG9ydHMuIFRoZXNlIGRldmljZXMgYXBwZWFyIGFzIC9kZXYvdHR5U0FDMCB0aHJvdWdoIDMuCisKKyAgVG8gY3JlYXRlIGRldmljZSBub2RlcyBmb3IgdGhlc2UsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzCisKKyAgICBta25vZCB0dHlTQUMwIGMgMjA0IDY0CisgICAgbWtub2QgdHR5U0FDMSBjIDIwNCA2NQorICAgIG1rbm9kIHR0eVNBQzIgYyAyMDQgNjYKKworCitHUElPCistLS0tCisKKyAgVGhlIGNvcmUgY29udGFpbnMgc3VwcG9ydCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBHUElPLCBzZWUgdGhlCisgIGRvY3VtZW50YXRpb24gaW4gR1BJTy50eHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgZmlsZS4KKworCitDbG9jayBNYW5hZ2VtZW50CistLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGNvcmUgcHJvdmlkZXMgdGhlIGludGVyZmFjZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZQorICBpbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvY2xvY2suaCwgdG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZQorICB2YXJpb3VzIGNsb2NrIHVuaXRzCisKKworUG9ydCBDb250cmlidXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQmVuIERvb2tzIChCSkQpCisgIFZpbmNlbnQgU2FuZGVycworICBIZXJiZXJ0IFBvdHpsCisgIEFybmF1ZCBQYXRhcmQgKFJUUCkKKyAgUm9jIFd1CisgIEtsYXVzIEZldHNjaGVyCisgIERpbWl0cnkgQW5kcmljCisgIFNoYW5ub24gSG9sbGFuZAorICBHdWlsbGF1bWUgR291cmF0IChOZXhWaXNpb24pCisgIENocmlzdGVyIFdlaW5pZ2VsICh3aW5nZWwpIChBY2VyIE4zMCkKKyAgTHVjYXMgQ29ycmVpYSBWaWxsYSBSZWFsIChTM0MyNDAwIHBvcnQpCisKKworRG9jdW1lbnQgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLQorCisgIDA1IFNlcCAyMDA0IC0gQkpEIC0gQWRkZWQgRG9jdW1lbnQgQ2hhbmdlcyBzZWN0aW9uCisgIDA1IFNlcCAyMDA0IC0gQkpEIC0gQWRkZWQgS2xhdXMgRmV0c2NoZXIgdG8gbGlzdCBvZiBjb250cmlidXRvcnMKKyAgMjUgT2N0IDIwMDQgLSBCSkQgLSBBZGRlZCBEaW1pdHJ5IEFuZHJpYyB0byBsaXN0IG9mIGNvbnRyaWJ1dG9ycworICAyNSBPY3QgMjAwNCAtIEJKRCAtIFVwZGF0ZWQgdGhlIE1URCBmcm9tIHRoZSAyLjYuOSBtZXJnZQorICAyMSBKYW4gMjAwNSAtIEJKRCAtIEFkZGVkIHJ4MzcxNSwgYWRkZWQgU2hhbm5vbiB0byBjb250cmlidXRvcnMKKyAgMTAgRmViIDIwMDUgLSBCSkQgLSBBZGRlZCBHdWlsbGF1bWUgR291cmF0IHRvIGNvbnRyaWJ1dG9ycworICAwMiBNYXIgMjAwNSAtIEJKRCAtIEFkZGVkIFNNREsyNDQwIHRvIGxpc3Qgb2YgbWFjaGluZXMKKyAgMDYgTWFyIDIwMDUgLSBCSkQgLSBBZGRlZCBDaHJpc3RlciBXZWluaWdlbAorICAwOCBNYXIgMjAwNSAtIEJKRCAtIEFkZGVkIExDVlIgdG8gbGlzdCBvZiBwZW9wbGUsIHVwZGF0ZWQgaW50cm9kdWN0aW9uCisgIDA4IE1hciAyMDA1IC0gQkpEIC0gQWRkZWQgc2VjdGlvbiBvbiBhZGRpbmcgbWFjaGluZXMKKworRG9jdW1lbnQgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0KKworQmVuIERvb2tzLCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1NNREsyNDQwLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TTURLMjQ0MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlMWVhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TTURLMjQ0MC50eHQKQEAgLTAsMCArMSw1NiBAQAorCQlTYW1zdW5nL01lcml0ZWNoIFNNREsyNDQwCisJCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworICBUaGUgU01ESzI0NDAgaXMgYSB0d28gcGFydCBldmFsdWF0aW9uIGJvYXJkIGZvciB0aGUgU2Ftc3VuZyBTM0MyNDQwCisgIHByb2Nlc3Nvci4gSXQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgTENELCBTbWFydE1lZGlhLCBBdWRpbywgU0QgYW5kCisgIDEwTUJpdCBFdGhlcm5ldCwgYW5kIGV4cGFuc2lvbiBoZWFkZXJzIGZvciB2YXJpb3VzIHNpZ25hbHMsIGluY2x1ZGluZworICB0aGUgY2FtZXJhIGFuZCB1bnVzZWQgR1BJTy4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKKyAgVG8gc2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHVzZSBgbWFrZSBzbWRrMjQ0MF9kZWZjb25maWdgIHdoaWNoCisgIHdpbGwgY29uZmlndXJlIHRoZSBjb21tb24gZmVhdHVyZXMgb2YgdGhpcyBib2FyZCwgb3IgdXNlCisgIGBtYWtlIHMzYzI0MTBfY29uZmlnYCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGFsbCBzM2MyNDEwL3MzYzI0NDAgbWFjaGluZXMKKworCitTdXBwb3J0CistLS0tLS0tCisKKyAgQmVuIERvb2tzJyBTTURLMjQ0MCBzaXRlIGF0IGh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9zbWRrMjQ0MC8gd2hpY2gKKyAgaW5jbHVkZXMgbGludXggYmFzZWQgVVNCIGRvd25sb2FkIHRvb2xzLgorCisgIFNvbWUgb2YgdGhlIGgxOTQwIHBhdGNoZXMgdGhhdCBjYW4gYmUgZm91bmQgZnJvbSB0aGUgSDE5NDAgcHJvamVjdAorICBzaXRlIGF0IGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9wcm9qZWN0cy9oMTk0MC5odG1sIGNhbiBhbHNvIGJlCisgIGFwcGxpZWQgdG8gdGhpcyBib2FyZC4KKworCitQZXJpcGhlcmFscworLS0tLS0tLS0tLS0KKworICBUaGVyZSBpcyBubyBjdXJyZW50IHN1cHBvcnQgZm9yIGFueSBvZiB0aGUgZXh0cmEgcGVyaXBoZXJhbHMgb24gdGhlCisgIGJhc2UtYm9hcmQgaXRzZWxmLgorCisKK01URAorLS0tCisKKyAgVGhlIE5BTkQgZmxhc2ggc2hvdWxkIGJlIHN1cHBvcnRlZCBieSB0aGUgaW4ga2VybmVsIE1URCBOQU5EIHN1cHBvcnQsCisgIE5PUiBmbGFzaCB3aWxsIGJlIGFkZGVkIGxhdGVyLgorCisKK01haW50YWluZXJzCistLS0tLS0tLS0tLQorCisgIFRoaXMgYm9hcmQgaXMgYmVpbmcgbWFpbnRhaW5lZCBieSBCZW4gRG9va3MsIGZvciBtb3JlIGluZm8sIHNlZQorICBodHRwOi8vd3d3LmZsdWZmLm9yZy9iZW4vc21kazI0NDAvCisKKyAgTWFueSB0aGFua3MgdG8gRGltaXRyeSBBbmRyaWMgb2YgVG9tVG9tIGZvciB0aGUgbG9hbiBvZiB0aGUgU01ESzI0NDAsCisgIGFuZCB0byBTaW10ZWMgRWxlY3Ryb25pY3MgZm9yIGFsbG93aW5nIG1lIHRpbWUgdG8gd29yayBvbiB0aGlzLgorCisKKyhjKSAyMDA0IEJlbiBEb29rcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTJiYzMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CkBAIC0wLDAgKzEsMTA2IEBACisJCQlTM0MyNFhYIFN1c3BlbmQgU3VwcG9ydAorCQkJPT09PT09PT09PT09PT09PT09PT09PT0KKworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCisgIFRoZSBTM0MyNDEwIHN1cHBvcnRzIGEgbG93LXBvd2VyIHN1c3BlbmQgbW9kZSwgd2hlcmUgdGhlIFNEUkFNIGlzIGtlcHQKKyAgaW4gU2VsZi1SZWZyZXNoIG1vZGUsIGFuZCBhbGwgYnV0IHRoZSBlc3NlbnRpYWwgcGVyaXBoZXJhbCBibG9ja3MgYXJlCisgIHBvd2VyZWQgZG93bi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgd29ya3MsIHBsZWFzZSBsb29rCisgIGF0IHRoZSBTM0MyNDEwIGRhdGFzaGVldHMgZnJvbSBTYW1zdW5nLgorCisKK1JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKKyAgMSkgQSBib290bG9hZGVyIHRoYXQgY2FuIHN1cHBvcnQgdGhlIG5lY2Vzc2FyeSByZXN1bWUgb3BlcmF0aW9uCisKKyAgMikgU3VwcG9ydCBmb3IgYXQgbGVhc3QgMSBzb3VyY2UgZm9yIHJlc3VtZQorCisgIDMpIENPTkZJR19QTSBlbmFibGVkIGluIHRoZSBrZXJuZWwKKworICA0KSBBbnkgcGVyaXBoZXJhbHMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgcG93ZXJlZCBkb3duIGF0IHRoZSBzYW1lCisgICAgIHRpbWUgcmVxdWlyZSBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LgorCisKK1Jlc3VtaW5nCistLS0tLS0tLQorCisgIFRoZSBTM0MyNDEwIHVzZXIgbWFudWFsIGRlZmluZXMgdGhlIHByb2Nlc3Mgb2Ygc2VuZGluZyB0aGUgQ1BVIHRvCisgIHNsZWVwIGFuZCBob3cgaXQgcmVzdW1lcy4gVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBMaW51eCBjb2RlCisgIGlzIHRvIHNldCB0aGUgR1NUQVRVUzMgcmVnaXN0ZXIgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlCisgIGNvZGUgdG8gcmVzdW1lIExpbnV4IG9wZXJhdGlvbi4KKworICBHU1RBVFVTNCBpcyBjdXJyZW50bHkgbGVmdCBhbG9uZSBieSB0aGUgc2xlZXAgY29kZSwgYW5kIGlzIGZyZWUgdG8KKyAgdXNlIGZvciBhbnkgb3RoZXIgcHVycG9zZXMgKGZvciBleGFtcGxlLCB0aGUgRUIyNDEwSVRYIHVzZXMgdGhpcyB0bworICBzYXZlIG1lbW9yeSBjb25maWd1cmF0aW9uIGluKS4KKworCitNYWNoaW5lIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBtYWNoaW5lIHNwZWNpZmljIGZ1bmN0aW9ucyBtdXN0IGNhbGwgdGhlIHMzYzI0MTBfcG1faW5pdCgpIGZ1bmN0aW9uCisgIHRvIHNheSB0aGF0IGl0cyBib290bG9hZGVyIGlzIGNhcGFibGUgb2YgcmVzdW1pbmcuIFRoaXMgY2FuIGJlIGFzCisgIHNpbXBsZSBhcyBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUgbWFjaGluZSdzIGRlZmluaXRpb246CisKKyAgSU5JVE1BQ0hJTkUoczNjMjQxMF9wbV9pbml0KQorCisgIEEgYm9hcmQgY2FuIGRvIGl0cyBvd24gc2V0dXAgYmVmb3JlIGNhbGxpbmcgczNjMjQxMF9wbV9pbml0LCBpZiBpdAorICBuZWVkcyB0byBzZXR1cCBhbnl0aGluZyBlbHNlIGZvciBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCisKKyAgVGhlcmUgaXMgY3VycmVudGx5IG5vIHN1cHBvcnQgZm9yIG92ZXItcmlkaW5nIHRoZSBkZWZhdWx0IG1ldGhvZCBvZgorICBzYXZpbmcgdGhlIHJlc3VtZSBhZGRyZXNzLCBpZiB5b3VyIGJvYXJkIHJlcXVpcmVzIGl0LCB0aGVuIGNvbnRhY3QKKyAgdGhlIG1haW50YWluZXIgYW5kIGRpc2N1c3Mgd2hhdCBpcyByZXF1aXJlZC4KKworICBOb3RlLCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9mIGFkZGluZyBhbiBsYXRlX2luaXRjYWxsKCkgaXMgd3JvbmcsCisgIGFuZCB3aWxsIGVuZCB1cCBpbml0aWFsaXNpbmcgYWxsIGNvbXBpbGVkIG1hY2hpbmVzJyBwbSBpbml0IQorCisKK0RlYnVnZ2luZworLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHNldmVyYWwgaW1wb3J0YW50IHRoaW5ncyB0byByZW1lbWJlciB3aGVuIHVzaW5nIFBNIHN1c3BlbmQ6CisKKyAgMSkgVGhlIHVhcnQgZHJpdmVycyB3aWxsIGRpc2FibGUgdGhlIGNsb2NrcyB0byB0aGUgVUFSVCBibG9ja3Mgd2hlbgorICAgICBzdXNwZW5kaW5nLCB3aGljaCBtZWFucyB0aGF0IHVzZSBvZiBwcmludGFzY2lpKCkgb3Igc2ltaWxhciBkaXJlY3QKKyAgICAgYWNjZXNzIHRvIHRoZSBVQVJUcyB3aWxsIGNhdXNlIHRoZSBkZWJ1ZyB0byBzdG9wLgorCisgIDIpIFdoaWxzdCB0aGUgcG0gY29kZSBpdHNlbGYgd2lsbCBhdHRlbXB0IHRvIHJlLWVuYWJsZSB0aGUgVUFSVCBjbG9ja3MsCisgICAgIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRoYXQgYW55IGV4dGVybmFsIGNsb2NrIHNvdXJjZXMgdGhhdCB0aGUgVUFSVHMKKyAgICAgcmVseSBvbiBhcmUgc3RpbGwgZW5hYmxlZCBhdCB0aGF0IHBvaW50LgorCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworICBUaGUgUzNDMjQxMCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluIGBTeXN0ZW0gVHlwZWAgZGVmaW5lcyB2YXJpb3VzCisgIGFzcGVjdHMgb2YgaG93IHRoZSBTM0MyNDEwIHN1c3BlbmQgYW5kIHJlc3VtZSBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKKworICBgUzNDMjQxMCBQTSBTdXNwZW5kIGRlYnVnYAorCisgICAgVGhpcyBvcHRpb24gcHJpbnRzIG1lc3NhZ2VzIHRvIHRoZSBzZXJpYWwgY29uc29sZSBiZWZvcmUgYW5kIGFmdGVyCisgICAgdGhlIGFjdHVhbCBzdXNwZW5kLCBnaXZpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCBpcworICAgIGhhcHBlbmluZworCisKKyAgYFMzQzI0MTAgUE0gU3VzcGVuZCBNZW1vcnkgQ1JDYAorCisgICAgQWxsb3dzIHRoZSBlbnRpcmUgbWVtb3J5IHRvIGJlIGNoZWNrc3VtbWVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgICAgc3VzcGVuZCB0byBzZWUgaWYgdGhlcmUgaGFzIGJlZW4gYW55IGNvcnJ1cHRpb24gb2YgdGhlIGNvbnRlbnRzLgorCisgICAgVGhpcyBzdXBwb3J0IHJlcXVpcmVzIHRoZSBDUkMzMiBmdW5jdGlvbiB0byBiZSBlbmFibGVkLgorCisKKyAgYFMzQzI0MTAgUE0gU3VzcGVuZCBDUkMgQ2h1bmtzaXplIChLaUIpYAorCisgICAgRGVmaW5lcyB0aGUgc2l6ZSBvZiBtZW1vcnkgZWFjaCBDUkMgY2h1bmsgY292ZXJzLiBBIHNtYWxsZXIgdmFsdWUKKyAgICB3aWxsIG1lYW4gdGhhdCB0aGUgQ1JDIGRhdGEgYmxvY2sgd2lsbCB0YWtlIG1vcmUgbWVtb3J5LCBidXQgd2lsbAorICAgIGlkZW50aWZ5IGFueSBmYXVsdHMgd2l0aCBiZXR0ZXIgcHJlY2lzaW9uCisKKworRG9jdW1lbnQgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0KKworQmVuIERvb2tzLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAgYi9Eb2N1bWVudGF0aW9uL2FybS9TZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWJkMDcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAKQEAgLTAsMCArMSwxMjkgQEAKK0tlcm5lbCBpbml0aWFsaXNhdGlvbiBwYXJhbWV0ZXJzIG9uIEFSTSBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcGFyYW1ldGVyCitzdHJ1Y3R1cmUsIG90aGVyd2lzZSBrbm93biBhcyAnc3RydWN0IHBhcmFtX3N0cnVjdCcgd2hpY2ggaXMgdXNlZAorZm9yIG1vc3QgQVJNIExpbnV4IGFyY2hpdGVjdHVyZXMuCisKK1RoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyBpbml0aWFsaXNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCitrZXJuZWwgbG9hZGVyIHRvIHRoZSBMaW51eCBrZXJuZWwgcHJvcGVyLCBhbmQgbWF5IGJlIHNob3J0IGxpdmVkCit0aHJvdWdoIHRoZSBrZXJuZWwgaW5pdGlhbGlzYXRpb24gcHJvY2Vzcy4gIEFzIGEgZ2VuZXJhbCBydWxlLCBpdAorc2hvdWxkIG5vdCBiZSByZWZlcmVuY2VkIG91dHNpZGUgb2YgYXJjaC9hcm0va2VybmVsL3NldHVwLmM6c2V0dXBfYXJjaCgpLgorCitUaGVyZSBhcmUgYSBsb3Qgb2YgcGFyYW1ldGVycyBsaXN0ZWQgaW4gdGhlcmUsIGFuZCB0aGV5IGFyZSBkZXNjcmliZWQKK2JlbG93OgorCisgcGFnZV9zaXplCisKKyAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIHRoZSBwYWdlIHNpemUgb2YgdGhlIG1hY2hpbmUsIGFuZAorICAgd2lsbCBiZSBjaGVja2VkIGJ5IHRoZSBrZXJuZWwuCisKKyBucl9wYWdlcworCisgICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgb2YgbWVtb3J5IGluIHRoZSBzeXN0ZW0uICBJZgorICAgdGhlIG1lbW9yeSBpcyBiYW5rZWQsIHRoZW4gdGhpcyBzaG91bGQgY29udGFpbiB0aGUgdG90YWwgbnVtYmVyCisgICBvZiBwYWdlcyBpbiB0aGUgc3lzdGVtLgorCisgICBJZiB0aGUgc3lzdGVtIGNvbnRhaW5zIHNlcGFyYXRlIFZSQU0sIHRoaXMgdmFsdWUgc2hvdWxkIG5vdAorICAgaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uLgorCisgcmFtZGlza19zaXplCisKKyAgIFRoaXMgaXMgbm93IG9ic29sZXRlLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorCisgZmxhZ3MKKworICAgVmFyaW91cyBrZXJuZWwgZmxhZ3MsIGluY2x1ZGluZzoKKyAgICBiaXQgMCAtIDEgPSBtb3VudCByb290IHJlYWQgb25seQorICAgIGJpdCAxIC0gdW51c2VkCisgICAgYml0IDIgLSAwID0gbG9hZCByYW1kaXNrCisgICAgYml0IDMgLSAwID0gcHJvbXB0IGZvciByYW1kaXNrCisKKyByb290ZGV2CisKKyAgIG1ham9yL21pbm9yIG51bWJlciBwYWlyIG9mIGRldmljZSB0byBtb3VudCBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorCisgdmlkZW9fbnVtX2NvbHMKKyB2aWRlb19udW1fcm93cworCisgICBUaGVzZSB0d28gdG9nZXRoZXIgZGVzY3JpYmUgdGhlIGNoYXJhY3RlciBzaXplIG9mIHRoZSBkdW1teSBjb25zb2xlLAorICAgb3IgVkdBIGNvbnNvbGUgY2hhcmFjdGVyIHNpemUuICBUaGV5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYW55IG90aGVyCisgICBwdXJwb3NlLgorCisgICBJdCdzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSB0byBzZXQgdGhlc2UgdG8gYmUgZWl0aGVyIHN0YW5kYXJkIFZHQSwgb3IKKyAgIHRoZSBlcXVpdmFsZW50IGNoYXJhY3RlciBzaXplIG9mIHlvdXIgZmJjb24gZGlzcGxheS4gIFRoaXMgdGhlbiBhbGxvd3MKKyAgIGFsbCB0aGUgYm9vdHVwIG1lc3NhZ2VzIHRvIGJlIGRpc3BsYXllZCBjb3JyZWN0bHkuCisKKyB2aWRlb194CisgdmlkZW9feQorCisgICBUaGlzIGRlc2NyaWJlcyB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIG9mIGN1cnNvciBvbiBWR0EgY29uc29sZSwgYW5kCisgICBpcyBvdGhlcndpc2UgdW51c2VkLiAoc2hvdWxkIG5vdCB1c2VkIGZvciBvdGhlciBjb25zb2xlIHR5cGVzLCBhbmQKKyAgIHNob3VsZCBub3QgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMpLgorCisgbWVtY19jb250cm9sX3JlZworCisgICBNRU1DIGNoaXAgY29udHJvbCByZWdpc3RlciBmb3IgQWNvcm4gQXJjaGltZWRlcyBhbmQgQWNvcm4gQTUwMDAKKyAgIGJhc2VkIG1hY2hpbmVzLiAgTWF5IGJlIHVzZWQgZGlmZmVyZW50bHkgYnkgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisKKyBzb3VuZGRlZmF1bHQKKworICAgRGVmYXVsdCBzb3VuZCBzZXR0aW5nIG9uIEFjb3JuIG1hY2hpbmVzLiAgTWF5IGJlIHVzZWQgZGlmZmVyZW50bHkgYnkKKyAgIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorCisgYWRmc2RyaXZlcworCisgICBOdW1iZXIgb2YgQURGUy9NRk0gZGlza3MuICBNYXkgYmUgdXNlZCBkaWZmZXJlbnRseSBieSBkaWZmZXJlbnQKKyAgIGFyY2hpdGVjdHVyZXMuCisKKyBieXRlc19wZXJfY2hhcl9oCisgYnl0ZXNfcGVyX2NoYXJfdgorCisgICBUaGVzZSBhcmUgbm93IG9ic29sZXRlLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorCisgcGFnZXNfaW5fYmFua1s0XQorCisgICBOdW1iZXIgb2YgcGFnZXMgaW4gZWFjaCBiYW5rIG9mIHRoZSBzeXN0ZW1zIG1lbW9yeSAodXNlZCBmb3IgUmlzY1BDKS4KKyAgIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAgIGlzIG5vbi1jb250aWd1b3VzIGZyb20gdGhlIHByb2Nlc3NvcnMgcG9pbnQgb2Ygdmlldy4KKworIHBhZ2VzX2luX3ZyYW0KKworICAgTnVtYmVyIG9mIHBhZ2VzIGluIFZSQU0gKHVzZWQgb24gQWNvcm4gUmlzY1BDKS4gIFRoaXMgdmFsdWUgbWF5IGFsc28KKyAgIGJlIHVzZWQgYnkgbG9hZGVycyBpZiB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gUkFNIGNhbid0IGJlIG9idGFpbmVkCisgICBmcm9tIHRoZSBoYXJkd2FyZS4KKworIGluaXRyZF9zdGFydAorIGluaXRyZF9zaXplCisKKyAgIFRoaXMgZGVzY3JpYmVzIHRoZSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZQorICAgaW5pdGlhbCByYW1kaXNrLgorCisgcmRfc3RhcnQKKworICAgU3RhcnQgYWRkcmVzcyBpbiBzZWN0b3JzIG9mIHRoZSByYW1kaXNrIGltYWdlIG9uIGEgZmxvcHB5IGRpc2suCisKKyBzeXN0ZW1fcmV2CisKKyAgIHN5c3RlbSByZXZpc2lvbiBudW1iZXIuCisKKyBzeXN0ZW1fc2VyaWFsX2xvdworIHN5c3RlbV9zZXJpYWxfaGlnaAorCisgICBzeXN0ZW0gNjQtYml0IHNlcmlhbCBudW1iZXIKKworIG1lbV9mY2xrXzIxMjg1CisKKyAgIFRoZSBzcGVlZCBvZiB0aGUgZXh0ZXJuYWwgb3NjaWxsYXRvciB0byB0aGUgMjEyODUgKGZvb3RicmlkZ2UpLAorICAgd2hpY2ggY29udHJvbCdzIHRoZSBzcGVlZCBvZiB0aGUgbWVtb3J5IGJ1cywgdGltZXIgJiBzZXJpYWwgcG9ydC4KKyAgIERlcGVuZGluZyB1cG9uIHRoZSBzcGVlZCBvZiB0aGUgY3B1IGl0cyB2YWx1ZSBjYW4gYmUgYmV0d2VlbgorICAgMC02NiBNSHouIElmIG5vIHBhcmFtcyBhcmUgcGFzc2VkIG9yIGEgdmFsdWUgb2YgemVybyBpcyBwYXNzZWQsCisgICB0aGVuIGEgdmFsdWUgb2YgNTAgTWh6IGlzIHRoZSBkZWZhdWx0IG9uIDIxMjg1IGFyY2hpdGVjdHVyZXMuCisKKyBwYXRoc1s4XVsxMjhdCisKKyAgIFRoZXNlIGFyZSBub3cgb2Jzb2xldGUsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCisKKyBjb21tYW5kbGluZQorCisgICBLZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuICBEZXRhaWxzIGNhbiBiZSBmb3VuZCBlbHNld2hlcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9Db21wYWN0Rmxhc2ggYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9Db21wYWN0Rmxhc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNmQ4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0NvbXBhY3RGbGFzaApAQCAtMCwwICsxLDMyIEBACitSRUFETUUgb24gdGhlIENvbXBhY3QgRmxhc2ggZm9yIENhcmQgRW5naW5lcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHRocmVlIGNoYWxsZW5nZXMgaW4gc3VwcG9ydGluZyB0aGUgQ0YgaW50ZXJmYWNlIG9mIHRoZSBDYXJkCitFbmdpbmVzLiAgRmlyc3QsIGV2ZXJ5IElPIG9wZXJhdGlvbiBtdXN0IGJlIGZvbGxvd2VkIHdpdGggSU8gdG8KK2Fub3RoZXIgbWVtb3J5IHJlZ2lvbi4gIFNlY29uZCwgdGhlIHNsb3QgaXMgd2lyZWQgZm9yIG9uZS10by1vbmUKK2FkZHJlc3MgbWFwcGluZyAqYW5kKiBpdCBpcyB3aXJlZCBmb3IgMTYgYml0IGFjY2VzcyBvbmx5LiAgU2Vjb25kLCB0aGUKK2ludGVycnVwdCByZXF1ZXN0IGxpbmUgZnJvbSB0aGUgQ0YgZGV2aWNlIGlzbid0IHdpcmVkLgorCitUaGUgSU9CQVJSSUVSIGlzc3VlIGlzIGNvdmVyZWQgaW4gUkVBRE1FLklPQkFSUklFUi4gIFRoaXMgaXNuJ3QgYW4KK29uZXJvdXMgcHJvYmxlbS4gIEVub3VnaCBzYWlkIGhlcmUuCisKK1RoZSBhZGRyZXNzaW5nIGlzc3VlIGlzIHNvbHZlZCBpbiB0aGUKK2FyY2gvYXJtL21hY2gtbGg3YTQweC9pZGUtbHBkN2E0MHguYyBmaWxlIHdpdGggc29tZSBhd2t3YXJkCit3b3JrLWFyb3VuZHMuICBXZSBpbXBsZW1lbnQgYSBzcGVjaWFsIFNFTEVDVF9EUklWRSByb3V0aW5lIHRoYXQgaXMKK2NhbGxlZCBiZWZvcmUgdGhlIElERSBkcml2ZXIgcGVyZm9ybXMgaXRzIG93biBTRUxFQ1RfRFJJVkUuICBPdXIgY29kZQorcmVjb2duaXplcyB0aGF0IHRoZSBTRUxFQ1QgcmVnaXN0ZXIgY2Fubm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgYWxzbword3JpdGluZyBhIGNvbW1hbmQuICBJdCBzZW5kIGFuIElETEVfSU1NRURJQVRFIGNvbW1hbmQgb24gc2VsZWN0aW5nIGEKK2RyaXZlLiAgVGhlIGZ1bmN0aW9uIGFsc28gcHJldmVudHMgZHJpdmUgc2VsZWN0IHRvIHRoZSBzbGF2ZSBkcml2ZQorc2luY2UgdGhlcmUgY2FuIGJlIG9ubHkgb25lLiAgVGhlIGF3a3dhcmQgcGFydCBpcyB0aGF0IHRoZSBJREUgZHJpdmVyLAorZXZlbiB0aG91Z2ggd2UgaGF2ZSBhIHNlbGVjdCBwcm9jZWR1cmUsIGFsc28gYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZQorZHJpdmUgYnkgd3JpdGluZyBkaXJlY3RseSB0aGUgU0VMRUNUIHJlZ2lzdGVyLiAgVGhpcyBhdHRlbXB0IGlzCitleHBsaWNpdGx5IGJsb2NrZWQgYnkgdGhlIE9VVEIgZnVuY3Rpb24tLW5vdCBwcmV0dHksIGJ1dCBlZmZlY3RpdmUuCisKK1RoZSBsYWNrIG9mIGludGVycnVwdHMgaXMgYSBtb3JlIHNlcmlvdXMgcHJvYmxlbS4gIEV2ZW4gdGhvdWdoIHRoZSBDRgorY2FyZCBpcyBmYXN0IHdoZW4gY29tcGFyZWQgdG8gYSBub3JtYWwgSURFIGRldmljZSwgd2UgZG9uJ3Qga25vdyB0aGF0Cit0aGUgQ0YgaXMgcmVhbGx5IGZsYXNoLiAgQSB1c2VyIGNvdWxkIHVzZSBvbmUgb2YgdGhlIHZlcnkgc21hbGwgaGFyZAorZHJpdmVzIGJlaW5nIHNoaXBwZWQgd2l0aCBhIENGIGludGVyZmFjZS4gIFRoZSBJREUgY29kZSBpbmNsdWRlcyBhCitjaGVjayBmb3IgaW50ZXJmYWNlcyB0aGF0IGxhY2sgYW4gSVJRLiAgSW4gdGhlc2UgY2FzZXMsIHN1Ym1pdHRpbmcgYQorY29tbWFuZCB0byB0aGUgSURFIGNvbnRyb2xsZXIgaXMgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHBvbGwgZm9yCitjb21wbGV0aW9uLiAgSWYgdGhlIGRldmljZSBpc24ndCBpbW1lZGlhdGVseSByZWFkeSwgaXQgc2NoZWR1bGVzIGEKK3RpbWVyIHRvIHBvbGwgYWdhaW4gbGF0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9JT0JhcnJpZXIgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9JT0JhcnJpZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkODg1MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0lPQmFycmllcgpAQCAtMCwwICsxLDQ1IEBACitSRUFETUUgb24gdGhlIElPQkFSUklFUiBmb3IgQ2FyZEVuZ2luZSBJTworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRHVlIHRvIGFuIHVuZm9ydHVuYXRlIG92ZXJzaWdodCB3aGVuIHRoZSBDYXJkIEVuZ2luZXMgd2VyZSBkZXNpZ25lZCwKK3RoZSBzaWduYWxzIHRoYXQgY29udHJvbCBhY2Nlc3MgdG8gc29tZSBwZXJpcGhlcmFscywgbW9zdCBub3RhYmx5IHRoZQorU01DOTFDOTExMSBldGhlcm5ldCBjb250cm9sbGVyLCBhcmUgbm90IHByb3Blcmx5IGhhbmRsZWQuCisKK1RoZSBzeW1wdG9tIGlzIHRoYXQgc29tZSBiYWNrIHRvIGJhY2sgSU8gd2l0aCB0aGUgcGVyaXBoZXJhbCByZXR1cm5zCit1bnJlbGlhYmxlIGRhdGEuICBXaXRoIHRoZSBTTUMgY2hpcCwgeW91J2xsIHNlZSBlcnJvcnMgYWJvdXQgdGhlIGJhbmsKK3JlZ2lzdGVyIGJlaW5nICdzY3Jld2VkJy4KKworVGhlIGNhdXNlIGlzIHRoYXQgdGhlIEFFTiBzaWduYWwgdG8gdGhlIFNNQyBjaGlwIGRvZXMgbm90IHRyYW5zaXRpb24KK2ZvciBldmVyeSBtZW1vcnkgYWNjZXNzLiAgSXQgaXMgZHJpdmVuIHRocm91Z2ggdGhlIENQTEQgZnJvbSB0aGUgQ1M3CitsaW5lIG9mIHRoZSBDUFUncyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaXMgb3B0aW1pemVkIHRvCitlbGltaW5hdGUgdW5uZWNlc3NhcnkgdHJhbnNpdGlvbnMuICBZZXQsIHRoZSBTTUMgcmVxdWlyZXMgYSB0cmFuc2l0aW9uCitmb3IgZXZlcnkgd3JpdGUgYWNjZXNzLiAgVGhlIFNoYXJwIHdlYnNpdGUgaGFzIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBlZmZlY3QgdGhpcyBwb3dlci1jb25zZXJ2aW5nIGZlYXR1cmUgaGFzIG9uIHBlcmlwaGVyYWwKK2ludGVyZmFjaW5nLgorCitUaGUgc29sdXRpb24gaXMgdG8gZm9sbG93IGV2ZXJ5IHdyaXRlIGFjY2VzcyB0byB0aGUgU01DIGNoaXAgd2l0aCBhbgorYWNjZXNzIHRvIGFub3RoZXIgbWVtb3J5IHJlZ2lvbiB0aGF0IHdpbGwgZm9yY2UgdGhlIENQVSB0byByZWxlYXNlIHRoZQorY2hpcCBzZWxlY3QgbGluZS4gIEl0IGlzIGltcG9ydGFudCB0byBndWFyYW50ZWUgdGhhdCB0aGlzIGFjY2VzcworZm9yY2VzIHRoZSBDUFUgb2ZmLWNoaXAuICBXZSBtYXAgYSBwYWdlIG9mIFNEUkFNIGFzIGlmIGl0IHdlcmUgYW4KK3VuY2FjaGVhYmxlIElPIGRldmljZSBhbmQgcmVhZCBmcm9tIGl0IGFmdGVyIGV2ZXJ5IFNNQyBJTyB3cml0ZQorb3BlcmF0aW9uLgorCisgIFNNQyBJTworICBCQVJSSUVSIElPCisKK09ubHkgdGhpcyBzZXF1ZW5jZSBpcyBpbXBvcnRhbnQuICBJdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCB0aGVyZSBpcyBubworQkFSUklFUiBJTyBiZWZvcmUgdGhlIGFjY2VzcyB0byB0aGUgU01DIGNoaXAgYmVjYXVzZSB0aGUgQUVOIGxhdGNoCitvbmx5IG5lZWRzIG9jY3VycyBhZnRlciB0aGUgU01DIElPIHdyaXRlIGN5Y2xlLiAgVGhlIHJvdXRpbmVzIHRoYXQKK2ltcGxlbWVudCB0aGlzIHdvcmstYXJvdW5kIG1ha2UgYW4gYWRkaXRpb25hbCBjb25jZXNzaW9uIHdoaWNoIGlzIHRvCitkaXNhYmxlIGludGVycnVwdHMgZHVyaW5nIHRoZSBJTyBzZXF1ZW5jZS4gIE90aGVyIGhhcmR3YXJlIGRldmljZXMKKyh0aGUgTG9naWNQRCBDUExEKSBoYXZlIHJlZ2lzdGVycyBpbiB0aGUgc2FtZSB0aGUgcGh5c2ljYWwgbWVtb3J5CityZWdpb24gYXMgdGhlIFNNQyBjaGlwLiAgQW4gaW50ZXJydXB0IG1pZ2h0IGFsbG93IGFuIGFjY2VzcyB0byBvbmUgb2YKK3Rob3NlIHJlZ2lzdGVycyB3aGlsZSBTTUMgSU8gaXMgYmVpbmcgcGVyZm9ybWVkLgorCitZb3UgbWlnaHQgYmUgdGVtcHRlZCB0byB0aGluayB0aGF0IHdlIGhhdmUgdG8gYWNjZXNzIGFub3RoZXIgZGV2aWNlCithdHRhY2hlZCB0byB0aGUgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyLCBidXQgdGhlIGVtcGlyaWNhbCBldmlkZW5jZQoraW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBub3Qgc28uICBNYXBwaW5nIDB4MDAwMDAwMDAgKGZsYXNoKSBhbmQKKzB4YzAwMDAwMDAgKFNEUkFNKSBhcHBlYXIgdG8gaGF2ZSB0aGUgc2FtZSBlZmZlY3QuICBVc2luZyBTRFJBTSBzZWVtcwordG8gYmUgZmFzdGVyLiAgQ2hvb3NpbmcgdG8gYWNjZXNzIGFuIHVuZGVjb2RlZCBtZW1vcnkgcmVnaW9uIGlzIG5vdAorZGVzaXJhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGhvdyB0aGF0IGNoaXAgc2VsZWN0IHdpbGwgYmUgdXNlZAoraW4gdGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0tFVjdBNDAwIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvS0VWN0E0MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzMmIxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0tFVjdBNDAwCkBAIC0wLDAgKzEsOCBAQAorUkVBRE1FIG9uIEltcGxlbWVudGluZyBMaW51eCBmb3IgU2hhcnAncyBLRVY3YTQwMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGlzY29udGludWVkIGJ5IFNoYXJwLiAgRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUKK3BhcnRpYWxseSBpbXBsZW1lbnRlZCBjb2RlIHJlbWFpbnMgaW4gdGhlIGtlcm5lbC4gIEF0IHNvbWUgcG9pbnQgaW4KK3RoZSBmdXR1cmUsIGVpdGhlciB0aGUgY29kZSB3aWxsIGJlIGZpbmlzaGVkIG9yIGl0IHdpbGwgYmUgcmVtb3ZlZAorY29tcGxldGVseS4gIFRoaXMgZGVwZW5kcyBwcmltYXJpbHkgb24gaG93IG1hbnkgb2YgdGhlIGRldmVsb3BtZW50Citib2FyZHMgYXJlIGluIHRoZSBmaWVsZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xQRDdBNDAwIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2hhcnAtTEgvTFBEN0E0MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3NWI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xQRDdBNDAwCkBAIC0wLDAgKzEsMTUgQEAKK1JFQURNRSBvbiBJbXBsZW1lbnRpbmcgTGludXggZm9yIHRoZSBMb2dpYyBQRCBMUEQ3QTQwMC0xMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0gQ1BMRCBtZW1vcnkgbWFwcGluZworCisgIFRoZSBib2FyZCBkZXNpZ25lcnMgY2hvc2UgdG8gdXNlIGhpZ2ggYWRkcmVzcyBsaW5lcyBmb3IgY29udHJvbGxpbmcKKyAgYWNjZXNzIHRvIHRoZSBDUExEIHJlZ2lzdGVycy4gIEl0IHR1cm5zIG91dCB0byBiZSBhIGJpZyB3YXN0ZQorICBiZWNhdXNlIHdlJ3JlIHVzaW5nIGFuIE1NVSBhbmQgbXVzdCBtYXAgSU8gc3BhY2UgaW50byB2aXJ0dWFsCisgIG1lbW9yeS4gIFRoZSByZXN1bHQgaXMgdGhhdCB3ZSBoYXZlIHRvIG1ha2UgYSBtYXBwaW5nIGZvciBldmVyeQorICByZWdpc3Rlci4KKworLSBTZXJpYWwgQ29uc29sZQorCisgIEl0IG1heSBiZSBPSyBub3QgdG8gdXNlIHRoZSBzZXJpYWwgY29uc29sZSBvcHRpb24gaWYgdGhlIHVzZXIgcGFzc2VzCisgIHRoZSBjb25zb2xlIGRldmljZSBuYW1lIHRvIHRoZSBrZXJuZWwuICBUaGlzIGRlc2VydmVzIHNvbWUgZXhwbG9yYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MUEQ3QTQwWCBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xQRDdBNDBYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjlhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MUEQ3QTQwWApAQCAtMCwwICsxLDE2IEBACitSRUFETUUgb24gSW1wbGVtZW50aW5nIExpbnV4IGZvciB0aGUgTG9naWMgUEQgTFBEN0E0MFgtMTAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistIENQTEQgbWVtb3J5IG1hcHBpbmcKKworICBUaGUgYm9hcmQgZGVzaWduZXJzIGNob3NlIHRvIHVzZSBoaWdoIGFkZHJlc3MgbGluZXMgZm9yIGNvbnRyb2xsaW5nCisgIGFjY2VzcyB0byB0aGUgQ1BMRCByZWdpc3RlcnMuICBJdCB0dXJucyBvdXQgdG8gYmUgYSBiaWcgd2FzdGUKKyAgYmVjYXVzZSB3ZSdyZSB1c2luZyBhbiBNTVUgYW5kIG11c3QgbWFwIElPIHNwYWNlIGludG8gdmlydHVhbAorICBtZW1vcnkuICBUaGUgcmVzdWx0IGlzIHRoYXQgd2UgaGF2ZSB0byBtYWtlIGEgbWFwcGluZyBmb3IgZXZlcnkKKyAgcmVnaXN0ZXIuCisKKy0gU2VyaWFsIENvbnNvbGUKKworICBJdCBtYXkgYmUgT0sgbm90IHRvIHVzZSB0aGUgc2VyaWFsIGNvbnNvbGUgb3B0aW9uIGlmIHRoZSB1c2VyIHBhc3NlcworICB0aGUgY29uc29sZSBkZXZpY2UgbmFtZSB0byB0aGUga2VybmVsLiAgVGhpcyBkZXNlcnZlcyBzb21lIGV4cGxvcmF0aW9uLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9TRFJBTSBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL1NEUkFNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGRjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9TRFJBTQpAQCAtMCwwICsxLDUxIEBACitSRUFETUUgb24gdGhlIFNEUkFNIENvbnRyb2xsZXIgZm9yIHRoZSBMSDdhNDBYCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGZvciB0aGUgU0RSQU0gY29udHJvbGxlciBnZW5lcmF0ZXMgYSBzcGFyc2UKK21lbW9yeSBhcnJheS4gIFRoZSBwcmVjaXNlIGxheW91dCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBTRFJBTSBjaGlwcy4gIEEKK2RlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24gYXNzZW1ibGVzIHRoZSBkaXNjb250aWd1b3VzIG1lbW9yeQorcmVnaW9ucyBpbnRvIHNlcGFyYXRlIG1lbW9yeSBub2RlcyB2aWEgdGhlIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeQorQXJjaGl0ZWN0dXJlKSBmYWNpbGl0aWVzLiAgSW4gdGhpcyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHRoZSBrZXJuZWwKK2lzIGZvcmdpdmluZyBhYm91dCB0aGUgcHJlY2lzZSBsYXlvdXQuICBBcyBsb25nIGFzIGl0IGlzIGdpdmVuIGFuCithY2N1cmF0ZSBwaWN0dXJlIG9mIGF2YWlsYWJsZSBtZW1vcnkgYnkgdGhlIGJvb3Rsb2FkZXIgdGhlIGtlcm5lbCB3aWxsCitleGVjdXRlIGNvcnJlY3RseS4KKworVGhlIFNEUkMgc3VwcG9ydHMgYSBtb2RlIHdoZXJlIHNvbWUgb2YgdGhlIGNoaXAgc2VsZWN0IGxpbmVzIGFyZQorc3dhcHBlZCBpbiBvcmRlciB0byBtYWtlIFNEUkFNIGxvb2sgbGlrZSBhIHN5bmNocm9ub3VzIFJPTS4gIFNldHRpbmcKK3RoaXMgYml0IG1lYW5zIHRoYXQgdGhlIFJBTSB3aWxsIHByZXNlbnQgYXMgYSBjb250aWd1b3VzIGFycmF5LiAgU29tZQorcHJvZ3JhbW1lcnMgcHJlZmVyIHRoaXMgdG8gdGhlIGRpc2NvbnRpZ3VvdXMgbGF5b3V0LiAgQmUgYXdhcmUgdGhhdAorbWF5IGJlIGEgcGVuYWx0eSBmb3IgdGhpcyBmZWF0dXJlIHdoZXJlIHNvbWUgc29tZSBjb25maWd1cmF0aW9ucyBvZgorbWVtb3J5IGFyZSBzaWduaWZpY2FudGx5IHJlZHVjZWQ7IGkuZS4gNjRNaUIgb2YgUkFNIGFwcGVhcnMgYXMgb25seSAzMgorTWlCLgorCitUaGVyZSBhcmUgYSBjb3VwbGUgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CitiZWhhdmlvci4gIFdoZW4gdGhlIFNST01MTCBiaXQgaXMgc2V0IGFuZCBtZW1vcnkgYXBwZWFycyBhcyBhCitjb250aWd1b3VzIGFycmF5LCB0aGVyZSBpcyBubyByZWFzb24gdG8gc3VwcG9ydCBOVU1BLgorQ09ORklHX0xIN0E0MFhfQ09OVElHTUVNIGRpc2FibGVzIE5VTUEgc3VwcG9ydC4gIFdoZW4gcGh5c2ljYWwgbWVtb3J5CitpcyBkaXNjb250aWd1b3VzLCB0aGUgbWVtb3J5IHRhYmxlcyBhcmUgb3JnYW5pemVkIHN1Y2ggdGhhdCB0aGVyZSBhcmUKK3R3byBiYW5rcyBwZXIgbm9kZXMgd2l0aCBhIHNtYWxsIGdhcCBiZXR3ZWVuIHRoZW0uICBUaGlzIGxheW91dCB3YXN0ZXMKK3NvbWUga2VybmVsIG1lbW9yeSBmb3IgcGFnZSB0YWJsZXMgcmVwcmVzZW50aW5nIG5vbi1leGlzdGVudCBtZW1vcnkuCitDT05GSUdfTEg3QTQwWF9PTkVfQkFOS19QRVJfTk9ERSBvcHRpbWl6ZXMgdGhlIG5vZGUgdGFibGVzIHN1Y2ggdGhhdAordGhlcmUgYXJlIG5vIGdhcHMuICBUaGVzZSBvcHRpb25zIGNvbnRyb2wgdGhlIGxvdyBsZXZlbCBvcmdhbml6YXRpb24KK29mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCB0YWJsZXMgaW4gd2F5cyB0aGF0IG1heSBwcmV2ZW50IHRoZSBrZXJuZWwKK2Zyb20gYm9vdGluZyBvciBtYXkgY2F1c2UgdGhlIGtlcm5lbCB0byBhbGxvY2F0ZWQgZXhjZXNzaXZlbHkgbGFyZ2UKK3BhZ2UgdGFibGVzLiAgQmUgd2FybmVkLiAgT25seSBjaGFuZ2UgdGhlc2Ugb3B0aW9ucyBpZiB5b3Uga25vdyB3aGF0Cit5b3UgYXJlIGRvaW5nLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYSByZWFzb25hYmxlIGNvbXByb21pc2UgdGhhdAord2lsbCBzdWl0IGFsbCB1c2Vycy4KKworLS0KKworQSB0eXBpY2FsIDMyTWlCIHN5c3RlbSB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsCitmaW5kIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VkIGFzIGZvbGxvd3MuCisKKyAgIG5vZGUgMDogMHhjMDAwMDAwMCA0TWlCCisgICAgICAgICAgIDB4YzEwMDAwMDAgNE1pQgorICAgbm9kZSAxOiAweGM0MDAwMDAwIDRNaUIKKyAgICAgICAgICAgMHhjNTAwMDAwMCA0TWlCCisgICBub2RlIDI6IDB4YzgwMDAwMDAgNE1pQgorICAgICAgICAgICAweGM5MDAwMDAwIDRNaUIKKyAgIG5vZGUgMzogMHhjYzAwMDAwMCA0TWlCCisgICAgICAgICAgIDB4Y2QwMDAwMDAgNE1pQgorCitTZXR0aW5nIENPTkZJR19MSDdBNDBYX09ORV9CQU5LX1BFUl9OT0RFIHdpbGwgcHV0IGVhY2ggYmFuayBpbnRvIGEKK3NlcGFyYXRlIG5vZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9WZWN0b3JlZEludGVycnVwdENvbnRyb2xsZXIgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9WZWN0b3JlZEludGVycnVwdENvbnRyb2xsZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwNDdlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL1ZlY3RvcmVkSW50ZXJydXB0Q29udHJvbGxlcgpAQCAtMCwwICsxLDgwIEBACitSRUFETUUgb24gdGhlIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIG9mIHRoZSBMSDdBNDA0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA0MDQgcmV2aXNpb24gb2YgdGhlIExIN0E0MFggc2VyaWVzIGNvbWVzIHdpdGggdHdvIHZlY3RvcmVkCitpbnRlcnJ1cHRzIGNvbnRyb2xsZXJzLiAgV2hpbGUgdGhlIGtlcm5lbCBkb2VzIHVzZSBzb21lIG9mIHRoZQorZmVhdHVyZXMgb2YgdGhlc2UgZGV2aWNlcywgaXQgaXMgZmFyIGZyb20gdGhlIHB1cnBvc2UgZm9yIHdoaWNoIHRoZXkKK3dlcmUgZGVzaWduZWQuCisKK1doZW4gdGhpcyBSRUFETUUgd2FzIHdyaXR0ZW4sIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVklDcyB3YXMgaW4KK2ZsdXguICBJdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgZGV0YWlscywgZXNwZWNpYWxseSB3aXRoIHByaW9yaXRpZXMsCit3aWxsIGNoYW5nZS4KKworVGhlIFZJQyBzdXBwb3J0IGNvZGUgaXMgaW5zcGlyZWQgYnkgcm91dGluZXMgd3JpdHRlbiBieSBTaGFycC4KKworCitQcmlvcml0eSBDb250cm9sCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaWduaWZpY2FudCByZWFzb24gZm9yIHVzaW5nIHRoZSBWSUMncyB2ZWN0b3JpbmcgaXMgdG8gY29udHJvbAoraW50ZXJydXB0IHByaW9yaXRpZXMuICBUaGVyZSBhcmUgdHdvIHRhYmxlcyBpbgorYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMgdGhhdCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXMuCisKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaXJxX3ByaV92aWMxW10gPSB7IElSUV9HUElPM0lOVFIsIH07CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9wcmlfdmljMltdID0geworCUlSUV9UM1VJLCBJUlFfR1BJTzdJTlRSLAorCUlSUV9VQVJUMUlOVFIsIElSUV9VQVJUMklOVFIsIElSUV9VQVJUM0lOVFIsIH07CisKK1RoZSBpbml0aWFsaXphdGlvbiBjb2RlIHJlYWRzIHRoZXNlIHRhYmxlcyBhbmQgaW5zZXJ0cyBhIHZlY3RvcgorYWRkcmVzcyBhbmQgZW5hYmxlIGZvciBlYWNoIGluZGljYXRlZCBJUlEuICBWZWN0b3JlZCBpbnRlcnJ1cHRzIGhhdmUKK2hpZ2hlciBwcmlvcml0eSB0aGFuIG5vbi12ZWN0b3JlZCBpbnRlcnJ1cHRzLiAgU28sIG9uIFZJQzEsCitJUlFfR1BJTzNJTlRSIHdpbGwgYmUgc2VydmVkIGJlZm9yZSBhbnkgb3RoZXIgbm9uLUZJUSBpbnRlcnJ1cHQuICBEdWUKK3RvIHRoZSB3YXkgdGhhdCB0aGUgdmVjdG9yaW5nIHdvcmtzLCBJUlFfVDNVSSBpcyB0aGUgbmV4dCBoaWdoZXN0Citwcmlvcml0eSBmb2xsb3dlZCBieSB0aGUgb3RoZXIgdmVjdG9yZWQgaW50ZXJydXB0cyBvbiBWSUMyLiAgQWZ0ZXIKK3RoYXQsIHRoZSBub24tdmVjdG9yZWQgaW50ZXJydXB0cyBhcmUgc2Nhbm5lZCBpbiBWSUMxIHRoZW4gaW4gVklDMi4KKworCitJU1IKKy0tLQorCitUaGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBtYWNybyBnZXRfaXJxbnIoKSBpbgorYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBzY2FucyB0aGUgVklDcyBmb3IgdGhlIG5leHQgYWN0aXZlCitpbnRlcnJ1cHQuICBUaGUgdmVjdG9yaW5nIG1ha2VzIHRoaXMgY29kZSBzb21ld2hhdCBsYXJnZXIgdGhhbiBpdCB3YXMKK2JlZm9yZSB1c2luZyB2ZWN0b3JpbmcgKHJlZmVyIHRvIHRoZSBMSDdBNDAwIGltcGxlbWVudGF0aW9uKS4gIEluIHRoZQorY2FzZSB3aGVyZSBhbiBpbnRlcnJ1cHQgaXMgdmVjdG9yZWQsIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIHRlbmQgdG8KK2JlIGZhc3RlciB0aGFuIHRoZSBub24tdmVjdG9yZWQgdmVyc2lvbi4gIEhvd2V2ZXIsIHRoZSB3b3JzdC1jYXNlIHBhdGgKK2lzIGxvbmdlci4KKworSXQgaXMgd29ydGggbm90aW5nIHRoYXQgYXQgcHJlc2VudCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZWFkCitWSUMyX1ZFQ1RBRERSIGJlY2F1c2UgdGhlIHJlZ2lzdGVyIGFwcGVhcnMgdG8gYmUgc2hhcmVkIGJldHdlZW4gdGhlCitjb250cm9sbGVycy4gIFRoZSBjb2RlIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IGlmIHRoaXMgY2hhbmdlcywgaXQgb3VnaHQKK3RvIHN0aWxsIHdvcmsgcHJvcGVybHkuCisKKworVmVjdG9yIEFkZHJlc3NlcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvcGVyIHVzZSBvZiB0aGUgdmVjdG9yaW5nIGhhcmR3YXJlIHdvdWxkIGp1bXAgdG8gdGhlIElTUgorc3BlY2lmaWVkIGJ5IHRoZSB2ZWN0b3JpbmcgYWRkcmVzcy4gIExpbnV4IGlzbid0IHN0cnVjdHVyZWQgdG8gdGFrZQorYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgdGhvdWdoIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGNoYW5nZQordGhpbmdzIHRvIHN1cHBvcnQgaXQuCisKK0luIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoZSB2ZWN0b3JpbmcgYWRkcmVzcyBpcyB1c2VkIHRvIHNwZWVkIHRoZQorc2VhcmNoIGZvciB0aGUgYWN0aXZlIElSUS4gIFRoZSBhZGRyZXNzIGlzIGNvZGVkIHN1Y2ggdGhhdCB0aGUgbG93ZXN0Cis2IGJpdHMgc3RvcmUgdGhlIElSUSBudW1iZXIgZm9yIHZlY3RvcmVkIGludGVycnVwdHMuICBUaGVzZSBudW1iZXJzCitjb3JyZXNwb25kIHRvIHRoZSBiaXRzIGluIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycy4gIElSUSB6ZXJvIGlzCit0aGUgbG93ZXN0IGludGVycnVwdCBiaXQgaW4gVklDMS4gIElSUSAzMiBpcyB0aGUgbG93ZXN0IGludGVycnVwdCBiaXQKK2luIFZJQzIuICBCZWNhdXNlIHplcm8gaXMgYSB2YWxpZCBJUlEgbnVtYmVyIGFuZCBiZWNhdXNlIHdlIGNhbm5vdAorZGV0ZWN0IHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgdmFsaWQgdmVjdG9yaW5nIGFkZHJlc3MgaWYgdGhhdAorYWRkcmVzcyBpcyB6ZXJvLCB0aGUgZWlndGggYml0ICgweDEwMCkgaXMgc2V0IGZvciB2ZWN0b3JlZCBpbnRlcnJ1cHRzLgorVGhlIGFkZHJlc3MgZm9yIElSUSAweDE4IChWSUMyKSBpcyAweDExOC4gIE9ubHkgdGhlIG5pbnRoIGJpdCBpcyBzZXQKK2ZvciB0aGUgZGVmYXVsdCBoYW5kbGVyIG9uIFZJQzEgYW5kIG9ubHkgdGhlIHRlbnRoIGJpdCBpcyBzZXQgZm9yIHRoZQorZGVmYXVsdCBoYW5kbGVyIG9uIFZJQzIuCisKK0luIG90aGVyIHdvcmRzLgorCisgIDB4MDAwCQktIG5vIGFjdGl2ZSBpbnRlcnJ1cHQKKyAgMHgxaWkJCS0gdmVjdG9yZWQgaW50ZXJydXB0IDB4aWkKKyAgMHgyeHgJCS0gdW52ZWN0b3JlZCBpbnRlcnJ1cHQgb24gVklDMSAoeHggaXMgZG9uJ3QgY2FyZSkKKyAgMHg0eHgJCS0gdW52ZWN0b3JlZCBpbnRlcnJ1cHQgb24gVklDMiAoeHggaXMgZG9uJ3QgY2FyZSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vVkZQL3JlbGVhc2Utbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vVkZQL3JlbGVhc2Utbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOGUwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9WRlAvcmVsZWFzZS1ub3Rlcy50eHQKQEAgLTAsMCArMSw1NSBAQAorUmVsZWFzZSBub3RlcyBmb3IgTGludXggS2VybmVsIFZGUCBzdXBwb3J0IGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGU6IAkyMCBNYXkgMjAwNAorQXV0aG9yOglSdXNzZWxsIEtpbmcKKworVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgTGludXggS2VybmVsIFZGUCBzdXBwb3J0IGNvZGUuICBJdAorcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGV4Y2VwdGlvbnMgYm91bmNlZCBmcm9tIFZGUCBoYXJkd2FyZSBmb3VuZAorb24gQVJNOTI2RUotUy4KKworVGhpcyByZWxlYXNlIGhhcyBiZWVuIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBTb2Z0RmxvYXQtMmIgbGlicmFyeSBieQorSm9obiBSLiBIYXVzZXIgdXNpbmcgdGhlIFRlc3RGbG9hdC0yYSB0ZXN0IHN1aXRlLiAgRGV0YWlscyBvZiB0aGlzCitsaWJyYXJ5IGFuZCB0ZXN0IHN1aXRlIGNhbiBiZSBmb3VuZCBhdDoKKworICAgaHR0cDovL3d3dy5jcy5iZXJrZWxleS5lZHUvfmpoYXVzZXIvYXJpdGhtZXRpYy9Tb2Z0RmxvYXQuaHRtbAorCitUaGUgb3BlcmF0aW9ucyB3aGljaCBoYXZlIGJlZW4gdGVzdGVkIHdpdGggdGhpcyBwYWNrYWdlIGFyZToKKworIC0gZmRpdgorIC0gZnN1YgorIC0gZmFkZAorIC0gZm11bAorIC0gZmNtcAorIC0gZmNtcGUKKyAtIGZjdnRkCisgLSBmY3Z0cworIC0gZnNpdG8KKyAtIGZ0b3NpCisgLSBmc3FydAorCitBbGwgdGhlIGFib3ZlIHBhc3Mgc29mdGZsb2F0IHRlc3RzIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgorCistIGZhZGQvZnN1YiBzaG93cyBzb21lIGRpZmZlcmVuY2VzIGluIHRoZSBoYW5kbGluZyBvZiArMCAvIC0wIHJlc3VsdHMKKyAgd2hlbiBpbnB1dCBvcGVyYW5kcyBkaWZmZXIgaW4gc2lnbnMuCistIHRoZSBoYW5kbGluZyBvZiB1bmRlcmZsb3cgZXhjZXB0aW9ucyBpcyBzbGlnaHRseSBkaWZmZXJlbnQuICBJZiBhCisgIHJlc3VsdCB1bmRlcmZsb3dzIGJlZm9yZSByb3VuZGluZywgYnV0IGJlY29tZXMgYSBub3JtYWxpc2VkIG51bWJlcgorICBhZnRlciByb3VuZGluZywgd2UgZG8gbm90IHNpZ25hbCBhbiB1bmRlcmZsb3cgZXhjZXB0aW9uLgorCitPdGhlciBvcGVyYXRpb25zIHdoaWNoIGhhdmUgYmVlbiB0ZXN0ZWQgYnkgYmFzaWMgYXNzZW1ibHktb25seSB0ZXN0cworYXJlOgorCisgLSBmY3B5CisgLSBmYWJzCisgLSBmbmVnCisgLSBmdG91aQorIC0gZnRvc2l6CisgLSBmdG91aXoKKworVGhlIGNvbWJpbmF0aW9uIG9wZXJhdGlvbnMgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQ6CisKKyAtIGZtYWMKKyAtIGZubWFjCisgLSBmbXNjCisgLSBmbm1zYworIC0gZm5tdWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL2VtcGVnL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL2VtcGVnL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWNjOGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vZW1wZWcvUkVBRE1FCkBAIC0wLDAgKzEsMTMgQEAKK0VtcGVnLCBMdGQncyBFbXBlZyBNUDMgQ2FyIEF1ZGlvIFBsYXllcgorCitUaGUgaW5pdGlhbCBkZXNpZ24gaXMgdG8gZ28gaW4geW91ciBjYXIsIGJ1dCB5b3UgY2FuIHVzZSBpdCBhdCBob21lLCBvbiBhCitib2F0Li4uIGFsbW9zdCBhbnl3aGVyZS4gVGhlIHByaW5jaXBsZSBpcyB0byBzdG9yZSBDRC1xdWFsaXR5IG11c2ljIHVzaW5nCitNUEVHIHRlY2hub2xvZ3kgb250byBhIGhhcmQgZGlzayBpbiB0aGUgdW5pdCwgYW5kIHVzZSB0aGUgcG93ZXIgb2YgdGhlCitlbWJlZGRlZCBjb21wdXRlciB0byBzZXJ2ZSB1cCB0aGUgbXVzaWMgeW91IHdhbnQuCisKK0ZvciBtb3JlIGRldGFpbHMsIHNlZToKKworCWh0dHA6Ly93d3cuZW1wZWcuY29tCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9lbXBlZy9pci50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9lbXBlZy9pci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhMjk3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL2VtcGVnL2lyLnR4dApAQCAtMCwwICsxLDQ5IEBACitJbmZyYS1yZWQgZHJpdmVyIGRvY3VtZW50YXRpb24uCisKK01pa2UgQ3Jvd2UgPG1hY0BlbXBlZy5jb20+CisoQykgRW1wZWcgTHRkIDE5OTkKKworTm90IGEgbG90IGhlcmUgeWV0IDotKQorCitUaGUgS2Vud29vZCBLQ0EtUjZBIHJlbW90ZSBjb250cm9sIGdlbmVyYXRlcyBhIHNlcXVlbmNlIGxpa2UgdGhlIGZvbGxvd2luZzoKKworR28gbG93IGZvciBhcHByb3ggMTZUIChBcm91bmQgOTAwMHVzKQorR28gaGlnaCBmb3IgYXBwcm94IDhUIChBcm91bmQgNDAwMHVzKQorR28gbG93IGZvciBsZXNzIHRoYW4gMlQgKEFyb3VuZCA3NTB1cykKKworRm9yIGVhY2ggb2YgdGhlIDMyIGJpdHMKKyAgR28gaGlnaCBmb3IgbW9yZSB0aGFuIDJUIChBcm91bmQgMTUwMHVzKSA9PSAxCisgIEdvIGhpZ2ggZm9yIGxlc3MgdGhhbiBUIChBcm91bmQgNDAwdXMpID09IDAKKyAgR28gbG93IGZvciBsZXNzIHRoYW4gMlQgKEFyb3VuZCA3NTB1cykKKworUmF0aGVyIHRoYW4gcmVwZWF0IGEgc2lnbmFsIHdoZW4gdGhlIGJ1dHRvbiBpcyBoZWxkIGRvd24gY2VydGFpbiBidXR0b25zCitnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gaW5kaWNhdGUgcmVwZXRpdGlvbi4KKworR28gbG93IGZvciBhcHByb3ggMTZUCitHbyBoaWdoIGZvciBhcHByb3ggNFQKK0dvIGxvdyBmb3IgbGVzcyB0aGFuIDJUCisKKyhCeSByZW1vdmluZyB0aGUgPDJUIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSBhbmQgcGxhY2luZyBhdCB0aGUgZW5kCisgaXQgY2FuIGJlIGNvbnNpZGVyZWQgYSBzdG9wIGJpdCBidXQgSSBmb3VuZCBpdCBlYXNpZXIgdG8gZGVhbCB3aXRoIGl0IGF0CisgdGhlIHN0YXJ0KS4KKworVGhlIDMyIGJpdHMgYXJlIGVuY29kZWQgYXMgWHhZeSB3aGVyZSB4IGFuZCB5IGFyZSB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzCit3aGlsZSBYIGFuZCBZIGFyZSB0aGUgbG9naWNhbCBpbnZlcnNlcyBvZiB0aGUgYXNzb2NpYXRlZCBkYXRhIHZhbHVlcy4gVXNpbmcgCitMU0IgZmlyc3QgeWllbGRzIHNlbnNpYmxlIGNvZGVzIGZvciB0aGUgbnVtYmVycy4KKworQWxsIGNvZGVzIGFyZSBvZiB0aGUgZm9ybSBiOXh4CisKK1RoZSBudW1lcmljIGtleXMgZ2VuZXJhdGUgdGhlIGNvZGUgMHggd2hlcmUgeCBpcyB0aGUgbnVtYmVyIHByZXNzZWQuCisKK1R1bmVyCQkxYworVGFwZQkJMWQKK0NECQkxZQorQ0QtTUQtQ0gJMWYKK1RyYWNrLQkJMGEKK1RyYWNrKwkJMGIKK1Jld2luZAkJMGMKK0ZGCQkwZAorRE5QUAkJNWUKK1BsYXkvUGF1c2UJMGUKK1ZvbCsJCTE0CitWb2wtCQkxNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vZW1wZWcvbWtkZXZzIGIvRG9jdW1lbnRhdGlvbi9hcm0vZW1wZWcvbWtkZXZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODVlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9lbXBlZy9ta2RldnMKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCitta25vZCAvZGV2L2Rpc3BsYXkgYyAyNDQgMAorbWtub2QgL2Rldi9pciBjIDI0MiAwCitta25vZCAvZGV2L3VzYjAgYyAyNDMgMAorbWtub2QgL2Rldi9hdWRpbyBjIDI0NSA0Citta25vZCAvZGV2L2RzcCBjIDI0NSAzCitta25vZCAvZGV2L21peGVyIGMgMjQ1IDAKK21rbm9kIC9kZXYvZW1wZWdfc3RhdGUgYyAyNDYgMAorbWtub2QgL2Rldi9yYWRpbzAgYyA4MSA2NAorbG4gLXNmIHJhZGlvMCByYWRpbworbG4gLXNmIHVzYjAgdXNiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1fYWxpZ25tZW50IGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtX2FsaWdubWVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQ1Y2NjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtX2FsaWdubWVudApAQCAtMCwwICsxLDU4IEBACitUb28gbWFueSBwcm9ibGVtcyBwb3BlZCB1cCBiZWNhdXNlIG9mIHVubm90aWNlZCBtaXNhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4KK2tlcm5lbCBjb2RlIGxhdGVseS4gIFRoZXJlZm9yZSB0aGUgYWxpZ25tZW50IGZpeHVwIGlzIG5vdyB1bmNvbmRpdGlvbmFsbHkKK2NvbmZpZ3VyZWQgaW4gZm9yIFNBMTF4MCBiYXNlZCB0YXJnZXRzLiAgQWNjb3JkaW5nIHRvIEFsYW4gQ294LCB0aGlzIGlzIGEKK2JhZCBpZGVhIHRvIGNvbmZpZ3VyZSBpdCBvdXQsIGJ1dCBSdXNzZWxsIEtpbmcgaGFzIHNvbWUgZ29vZCByZWFzb25zIGZvcgorZG9pbmcgc28gb24gc29tZSBmKioqZWQgdXAgQVJNIGFyY2hpdGVjdHVyZXMgbGlrZSB0aGUgRUJTQTExMC4gIEhvd2V2ZXIKK3RoaXMgaXMgbm90IHRoZSBjYXNlIG9uIG1hbnkgZGVzaWduIEknbSBhd2FyZSBvZiwgbGlrZSBhbGwgU0ExMXgwIGJhc2VkCitvbmVzLgorCitPZiBjb3Vyc2UgdGhpcyBpcyBhIGJhZCBpZGVhIHRvIHJlbHkgb24gdGhlIGFsaWdubWVudCB0cmFwIHRvIHBlcmZvcm0KK3VuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIGdlbmVyYWwuICBJZiB0aG9zZSBhY2Nlc3MgYXJlIHByZWRpY3RhYmxlLCB5b3UKK2FyZSBiZXR0ZXIgdG8gdXNlIHRoZSBtYWNyb3MgcHJvdmlkZWQgYnkgaW5jbHVkZS9hc20vdW5hbGlnbmVkLmguICBUaGUKK2FsaWdubWVudCB0cmFwIGNhbiBmaXh1cCBtaXNhbGlnbmVkIGFjY2VzcyBmb3IgdGhlIGV4Y2VwdGlvbiBjYXNlcywgYnV0IGF0CithIGhpZ2ggcGVyZm9ybWFuY2UgY29zdC4gIEl0IGJldHRlciBiZSByYXJlLgorCitOb3cgZm9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zLCBpdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgdGhlIGFsaWdubWVudAordHJhcCB0byBTSUdCVVMgYW55IGNvZGUgcGVyZm9ybWluZyB1bmFsaWduZWQgYWNjZXNzIChnb29kIGZvciBkZWJ1Z2dpbmcgYmFkCitjb2RlKSwgb3IgZXZlbiBmaXh1cCB0aGUgYWNjZXNzIGJ5IHNvZnR3YXJlIGxpa2UgZm9yIGtlcm5lbCBjb2RlLiAgVGhlIGxhdGVyCittb2RlIGlzbid0IHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIChqdXN0IHRoaW5rIGFib3V0IHRoZQorZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIHRoYXQgd29ya3MgYWJvdXQgdGhlIHNhbWUgd2F5KS4gIEZpeCB5b3VyIGNvZGUKK2luc3RlYWQhCisKK1BsZWFzZSBub3RlIHRoYXQgcmFuZG9tbHkgY2hhbmdpbmcgdGhlIGJlaGF2aW91ciB3aXRob3V0IGdvb2QgdGhvdWdodCBpcworcmVhbCBiYWQgLSBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvdXIgb2YgYWxsIHVuYWxpZ25lZCBpbnN0cnVjdGlvbnMgaW4gdXNlcgorc3BhY2UsIGFuZCBtaWdodCBjYXVzZSBwcm9ncmFtcyB0byBmYWlsIHVuZXhwZWN0ZWRseS4KKworVG8gY2hhbmdlIHRoZSBhbGlnbm1lbnQgdHJhcCBiZWhhdmlvciwgc2ltcGx5IGVjaG8gYSBudW1iZXIgaW50bworL3Byb2Mvc3lzL2RlYnVnL2FsaWdubWVudC4gIFRoZSBudW1iZXIgaXMgbWFkZSB1cCBmcm9tIHZhcmlvdXMgYml0czoKKworYml0CQliZWhhdmlvciB3aGVuIHNldAorLS0tCQktLS0tLS0tLS0tLS0tLS0tLQorCiswCQlBIHVzZXIgcHJvY2VzcyBwZXJmb3JtaW5nIGFuIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisJCXdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBwcmludCBhIG1lc3NhZ2UgaW5kaWNhdGluZworCQlwcm9jZXNzIG5hbWUsIHBpZCwgcGMsIGluc3RydWN0aW9uLCBhZGRyZXNzLCBhbmQgdGhlCisJCWZhdWx0IGNvZGUuCisKKzEJCVRoZSBrZXJuZWwgd2lsbCBhdHRlbXB0IHRvIGZpeCB1cCB0aGUgdXNlciBwcm9jZXNzCisJCXBlcmZvcm1pbmcgdGhlIHVuYWxpZ25lZCBhY2Nlc3MuICBUaGlzIGlzIG9mIGNvdXJzZQorCQlzbG93ICh0aGluayBhYm91dCB0aGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IpIGFuZAorCQlub3QgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24gdXNlLgorCisyCQlUaGUga2VybmVsIHdpbGwgc2VuZCBhIFNJR0JVUyBzaWduYWwgdG8gdGhlIHVzZXIgcHJvY2VzcworCQlwZXJmb3JtaW5nIHRoZSB1bmFsaWduZWQgYWNjZXNzLgorCitOb3RlIHRoYXQgbm90IGFsbCBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCAtIG9ubHkgdmFsdWVzIDAgdGhyb3VnaCA1LgorKDYgYW5kIDcgZG9uJ3QgbWFrZSBzZW5zZSkuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdpbGwgdHVybiBvbiB0aGUgd2FybmluZ3MsIGJ1dCB3aXRob3V0CitmaXhpbmcgdXAgb3Igc2VuZGluZyBTSUdCVVMgc2lnbmFsczoKKworCWVjaG8gMSA+IC9wcm9jL3N5cy9kZWJ1Zy9hbGlnbm1lbnQKKworWW91IGNhbiBhbHNvIHJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIHNhbWUgZmlsZSB0byBnZXQgc3RhdGlzdGljYWwKK2luZm9ybWF0aW9uIG9uIHVuYWxpZ25lZCBhY2Nlc3Mgb2NjdXJyZW5jZXMgcGx1cyB0aGUgY3VycmVudCBtb2RlIG9mCitvcGVyYXRpb24gZm9yIHVzZXIgc3BhY2UgY29kZS4KKworCitOaWNvbGFzIFBpdHJlLCBNYXIgMTMsIDIwMDEuICBNb2RpZmllZCBSdXNzZWxsIEtpbmcsIE5vdiAzMCwgMjAwMS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWM5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CkBAIC0wLDAgKzEsNzIgQEAKKwkJS2VybmVsIE1lbW9yeSBMYXlvdXQgb24gQVJNIExpbnV4CisKKwkJUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KKwkJCU1heSAyMSwgMjAwNCAoMi42LjYpCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBsYXlvdXQgd2hpY2ggdGhlIExpbnV4CitrZXJuZWwgdXNlcyBmb3IgQVJNIHByb2Nlc3NvcnMuICBJdCBpbmRpY2F0ZXMgd2hpY2ggcmVnaW9ucyBhcmUKK2ZyZWUgZm9yIHBsYXRmb3JtcyB0byB1c2UsIGFuZCB3aGljaCBhcmUgdXNlZCBieSBnZW5lcmljIGNvZGUuCisKK1RoZSBBUk0gQ1BVIGlzIGNhcGFibGUgb2YgYWRkcmVzc2luZyBhIG1heGltdW0gb2YgNEdCIHZpcnR1YWwgbWVtb3J5CitzcGFjZSwgYW5kIHRoaXMgbXVzdCBiZSBzaGFyZWQgYmV0d2VlbiB1c2VyIHNwYWNlIHByb2Nlc3NlcywgdGhlCitrZXJuZWwsIGFuZCBoYXJkd2FyZSBkZXZpY2VzLgorCitBcyB0aGUgQVJNIGFyY2hpdGVjdHVyZSBtYXR1cmVzLCBpdCBiZWNvbWVzIG5lY2Vzc2FyeSB0byByZXNlcnZlCitjZXJ0YWluIHJlZ2lvbnMgb2YgVk0gc3BhY2UgZm9yIHVzZSBmb3IgbmV3IGZhY2lsaXRpZXM7IHRoZXJlZm9yZQordGhpcyBkb2N1bWVudCBtYXkgcmVzZXJ2ZSBtb3JlIFZNIHNwYWNlIG92ZXIgdGltZS4KKworU3RhcnQJCUVuZAkJVXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZmZmZjgwMDAJZmZmZmZmZmYJY29weV91c2VyX3BhZ2UgLyBjbGVhcl91c2VyX3BhZ2UgdXNlLgorCQkJCUZvciBTQTExeHggYW5kIFhzY2FsZSwgdGhpcyBpcyB1c2VkIHRvCisJCQkJc2V0dXAgYSBtaW5pY2FjaGUgbWFwcGluZy4KKworZmZmZjEwMDAJZmZmZjdmZmYJUmVzZXJ2ZWQuCisJCQkJUGxhdGZvcm1zIG11c3Qgbm90IHVzZSB0aGlzIGFkZHJlc3MgcmFuZ2UuCisKK2ZmZmYwMDAwCWZmZmYwZmZmCUNQVSB2ZWN0b3IgcGFnZS4KKwkJCQlUaGUgQ1BVIHZlY3RvcnMgYXJlIG1hcHBlZCBoZXJlIGlmIHRoZQorCQkJCUNQVSBzdXBwb3J0cyB2ZWN0b3IgcmVsb2NhdGlvbiAoY29udHJvbAorCQkJCXJlZ2lzdGVyIFYgYml0LikKKworZmZjMDAwMDAJZmZmZWZmZmYJRE1BIG1lbW9yeSBtYXBwaW5nIHJlZ2lvbi4gIE1lbW9yeSByZXR1cm5lZAorCQkJCWJ5IHRoZSBkbWFfYWxsb2NfeHh4IGZ1bmN0aW9ucyB3aWxsIGJlCisJCQkJZHluYW1pY2FsbHkgbWFwcGVkIGhlcmUuCisKK2ZmMDAwMDAwCWZmYmZmZmZmCVJlc2VydmVkIGZvciBmdXR1cmUgZXhwYW5zaW9uIG9mIERNQQorCQkJCW1hcHBpbmcgcmVnaW9uLgorCitWTUFMTE9DX0VORAlmZWZmZmZmZglGcmVlIGZvciBwbGF0Zm9ybSB1c2UsIHJlY29tbWVuZGVkLgorCitWTUFMTE9DX1NUQVJUCVZNQUxMT0NfRU5ELTEJdm1hbGxvYygpIC8gaW9yZW1hcCgpIHNwYWNlLgorCQkJCU1lbW9yeSByZXR1cm5lZCBieSB2bWFsbG9jL2lvcmVtYXAgd2lsbAorCQkJCWJlIGR5bmFtaWNhbGx5IHBsYWNlZCBpbiB0aGlzIHJlZ2lvbi4KKwkJCQlWTUFMTE9DX1NUQVJUIG1heSBiZSBiYXNlZCB1cG9uIHRoZSB2YWx1ZQorCQkJCW9mIHRoZSBoaWdoX21lbW9yeSB2YXJpYWJsZS4KKworUEFHRV9PRkZTRVQJaGlnaF9tZW1vcnktMQlLZXJuZWwgZGlyZWN0LW1hcHBlZCBSQU0gcmVnaW9uLgorCQkJCVRoaXMgbWFwcyB0aGUgcGxhdGZvcm1zIFJBTSwgYW5kIHR5cGljYWxseQorCQkJCW1hcHMgYWxsIHBsYXRmb3JtIFJBTSBpbiBhIDE6MSByZWxhdGlvbnNoaXAuCisKK1RBU0tfU0laRQlQQUdFX09GRlNFVC0xCUtlcm5lbCBtb2R1bGUgc3BhY2UKKwkJCQlLZXJuZWwgbW9kdWxlcyBpbnNlcnRlZCB2aWEgaW5zbW9kIGFyZQorCQkJCXBsYWNlZCBoZXJlIHVzaW5nIGR5bmFtaWMgbWFwcGluZ3MuCisKKzAwMDAxMDAwCVRBU0tfU0laRS0xCVVzZXIgc3BhY2UgbWFwcGluZ3MKKwkJCQlQZXItdGhyZWFkIG1hcHBpbmdzIGFyZSBwbGFjZWQgaGVyZSB2aWEKKwkJCQl0aGUgbW1hcCgpIHN5c3RlbSBjYWxsLgorCiswMDAwMDAwMAkwMDAwMGZmZglDUFUgdmVjdG9yIHBhZ2UgLyBudWxsIHBvaW50ZXIgdHJhcAorCQkJCUNQVXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdmVjdG9yIHJlbWFwcGluZworCQkJCXBsYWNlIHRoZWlyIHZlY3RvciBwYWdlIGhlcmUuICBOVUxMIHBvaW50ZXIKKwkJCQlkZXJlZmVyZW5jZXMgYnkgYm90aCB0aGUga2VybmVsIGFuZCB1c2VyCisJCQkJc3BhY2UgYXJlIGFsc28gY2F1Z2h0IHZpYSB0aGlzIG1hcHBpbmcuCisKK1BsZWFzZSBub3RlIHRoYXQgbWFwcGluZ3Mgd2hpY2ggY29sbGlkZSB3aXRoIHRoZSBhYm92ZSBhcmVhcyBtYXkgcmVzdWx0CitpbiBhIG5vbi1ib290YWJsZSBrZXJuZWwsIG9yIG1heSBjYXVzZSB0aGUga2VybmVsIHRvIChldmVudHVhbGx5KSBwYW5pYworYXQgcnVuIHRpbWUuCisKK1NpbmNlIGZ1dHVyZSBDUFVzIG1heSBpbXBhY3QgdGhlIGtlcm5lbCBtYXBwaW5nIGxheW91dCwgdXNlciBwcm9ncmFtcworbXVzdCBub3QgYWNjZXNzIGFueSBtZW1vcnkgd2hpY2ggaXMgbm90IG1hcHBlZCBpbnNpZGUgdGhlaXIgMHgwMDAxMDAwCit0byBUQVNLX1NJWkUgYWRkcmVzcyByYW5nZS4gIElmIHRoZXkgd2lzaCB0byBhY2Nlc3MgdGhlc2UgYXJlYXMsIHRoZXkKK211c3Qgc2V0IHVwIHRoZWlyIG93biBtYXBwaW5ncyB1c2luZyBvcGVuKCkgYW5kIG1tYXAoKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL05PVEVTIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvTk9URVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1NzdiNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL05PVEVTCkBAIC0wLDAgKzEsMjkgQEAKK1RoZXJlIHNlZW1zIHRvIGJlIGEgcHJvYmxlbSB3aXRoIGV4cChkb3VibGUpIGFuZCBvdXIgZW11bGF0b3IuICBJIGhhdmVuJ3QKK2JlZW4gYWJsZSB0byB0cmFjayBpdCBkb3duIHlldC4gIFRoaXMgZG9lcyBub3Qgb2NjdXIgd2l0aCB0aGUgZW11bGF0b3IKK3N1cHBsaWVkIGJ5IFJ1c3NlbGwgS2luZy4KKworSSBhbHNvIGZvdW5kIG9uZSBvZGRpdHkgaW4gdGhlIGVtdWxhdG9yLiAgSSBkb24ndCB0aGluayBpdCBpcyBzZXJpb3VzIGJ1dAord2lsbCBwb2ludCBpdCBvdXQuICBUaGUgQVJNIGNhbGxpbmcgY29udmVudGlvbnMgcmVxdWlyZSBmbG9hdGluZyBwb2ludAorcmVnaXN0ZXJzIGY0LWY3IHRvIGJlIHByZXNlcnZlZCBvdmVyIGEgZnVuY3Rpb24gY2FsbC4gIFRoZSBjb21waWxlciBxdWl0ZQorb2Z0ZW4gdXNlcyBhbiBzdGZlIGluc3RydWN0aW9uIHRvIHNhdmUgZjQgb24gdGhlIHN0YWNrIHVwb24gZW50cnkgdG8gYQorZnVuY3Rpb24sIGFuZCBhbiBsZGZlIGluc3RydWN0aW9uIHRvIHJlc3RvcmUgaXQgYmVmb3JlIHJldHVybmluZy4KKworSSB3YXMgbG9va2luZyBhdCBzb21lIGNvZGUsIHRoYXQgY2FsY3VsYXRlZCBhIGRvdWJsZSByZXN1bHQsIHN0b3JlZCBpdCBpbiBmNAordGhlbiBtYWRlIGEgZnVuY3Rpb24gY2FsbC4gVXBvbiByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gY2FsbCB0aGUgbnVtYmVyIGluCitmNCBoYWQgYmVlbiBjb252ZXJ0ZWQgdG8gYW4gZXh0ZW5kZWQgdmFsdWUgaW4gdGhlIGVtdWxhdG9yLgorCitUaGlzIGlzIGEgc2lkZSBlZmZlY3Qgb2YgdGhlIHN0ZmUgaW5zdHJ1Y3Rpb24uICBUaGUgZG91YmxlIGluIGY0IGhhZCB0byBiZQorY29udmVydGVkIHRvIGV4dGVuZGVkLCB0aGVuIHN0b3JlZC4gIElmIGFuIGxmbS9zZm0gY29tYmluYXRpb24gaGFkIGJlZW4gdXNlZCwKK3RoZW4gbm8gY29udmVyc2lvbiB3b3VsZCBvY2N1ci4gIFRoaXMgaGFzIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiAgVGhlCityZXN1bHQgZnJvbSB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgZjQgd2VyZSB1c2VkIGluIGEgbXVsdGlwbGljYXRpb24uICBJZiB0aGUKK2VtdWxhdG9yIHNlZXMgYSBtdWx0aXBseSBvZiBhIGRvdWJsZSBhbmQgZXh0ZW5kZWQsIGl0IHByb21vdGVzIHRoZSBkb3VibGUgdG8KK2V4dGVuZGVkLCB0aGVuIGRvZXMgdGhlIG11bHRpcGx5IGluIGV4dGVuZGVkIHByZWNpc2lvbi4KKworVGhpcyBjb2RlIHdpbGwgY2F1c2UgdGhpcyBwcm9ibGVtOgorCitkb3VibGUgeCwgeSwgejsKK3ogPSBsb2coeCkvbG9nKHkpOworCitUaGUgcmVzdWx0IG9mIGxvZyh4KSAoYSBkb3VibGUpIHdpbGwgYmUgY2FsY3VsYXRlZCwgcmV0dXJuZWQgaW4gZjAsIHRoZW4KK21vdmVkIHRvIGY0IHRvIHByZXNlcnZlIGl0IG92ZXIgdGhlIGxvZyh5KSBjYWxsLiAgVGhlIGRpdmlzaW9uIHdpbGwgYmUgZG9uZQoraW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBkdWUgdG8gdGhlIHN0ZmUgaW5zdHJ1Y3Rpb24gdXNlZCB0byBzYXZlIGY0IGluIGxvZyh5KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRSBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE4NzFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvUkVBRE1FCkBAIC0wLDAgKzEsNzAgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSB2ZXJzaW9uIDAuOTIgdGVzdCByZWxlYXNlIG9mIHRoZSBOZXRXaW5kZXIgCitGbG9hdGluZyBQb2ludCBFbXVsYXRvci4KKworVGhlIG1ham9yaXR5IG9mIHRoZSBjb2RlIHdhcyB3cml0dGVuIGJ5IG1lLCBTY290dCBCYW1icm91Z2ggSXQgaXMKK3dyaXR0ZW4gaW4gQywgd2l0aCBhIHNtYWxsIG51bWJlciBvZiByb3V0aW5lcyBpbiBpbmxpbmUgYXNzZW1ibGVyCit3aGVyZSByZXF1aXJlZC4gIEl0IHdhcyB3cml0dGVuIHF1aWNrbHksIHdpdGggYSBnb2FsIG9mIGltcGxlbWVudGluZyBhCit3b3JraW5nIHZlcnNpb24gb2YgYWxsIHRoZSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgdGhlIGNvbXBpbGVyCitlbWl0cyBhcyB0aGUgZmlyc3QgdGFyZ2V0LiAgSSBoYXZlIGF0dGVtcHRlZCB0byBiZSBhcyBvcHRpbWFsIGFzCitwb3NzaWJsZSwgYnV0IHRoZXJlIHJlbWFpbnMgbXVjaCByb29tIGZvciBpbXByb3ZlbWVudC4KKworSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoZSBlbXVsYXRvciBhcyBwb3J0YWJsZSBhcyBwb3NzaWJsZS4gIE9uZSBvZgordGhlIHByb2JsZW1zIGlzIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyBvbiBrZXJuZWwgc3ltYm9scy4gIEVsZgora2VybmVscyBoYXZlIG5vIGxlYWRpbmcgdW5kZXJzY29yZXMsIGEub3V0IGNvbXBpbGVkIGtlcm5lbHMgZG8uICBJCitoYXZlIGF0dGVtcHRlZCB0byB1c2UgdGhlIENfU1lNQk9MX05BTUUgbWFjcm8gd2hlcmV2ZXIgdGhpcyBtYXkgYmUKK2ltcG9ydGFudC4KKworQW5vdGhlciBjaG9pY2UgSSBtYWRlIHdhcyBpbiB0aGUgZmlsZSBzdHJ1Y3R1cmUuICBJIGhhdmUgYXR0ZW1wdGVkIHRvCitjb250YWluIGFsbCBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIGNvZGUgaW4gb25lIG1vZHVsZSAoZnBtb2R1bGUuKikuCitBbGwgdGhlIG90aGVyIGZpbGVzIGNvbnRhaW4gZW11bGF0b3Igc3BlY2lmaWMgY29kZS4gIFRoaXMgc2hvdWxkIGFsbG93CitvdGhlcnMgdG8gcG9ydCB0aGUgZW11bGF0b3IgdG8gTmV0QlNEIGZvciBpbnN0YW5jZSByZWxhdGl2ZWx5IGVhc2lseS4KKworVGhlIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYXJlIGJhc2VkIG9uIFNvZnRGbG9hdCBSZWxlYXNlIDIsIGJ5CitKb2huIEhhdXNlci4gIFNvZnRGbG9hdCBpcyBhIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIGZsb2F0aW5nLXBvaW50Cit0aGF0IGNvbmZvcm1zIHRvIHRoZSBJRUMvSUVFRSBTdGFuZGFyZCBmb3IgQmluYXJ5IEZsb2F0aW5nLXBvaW50CitBcml0aG1ldGljLiAgQXMgbWFueSBhcyBmb3VyIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogc2luZ2xlIHByZWNpc2lvbiwKK2RvdWJsZSBwcmVjaXNpb24sIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24sIGFuZCBxdWFkcnVwbGUgcHJlY2lzaW9uLgorQWxsIG9wZXJhdGlvbnMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGFyZSBpbXBsZW1lbnRlZCwgZXhjZXB0IGZvcgorY29udmVyc2lvbnMgdG8gYW5kIGZyb20gZGVjaW1hbC4gIFdlIHVzZSBvbmx5IHRoZSBzaW5nbGUgcHJlY2lzaW9uLAorZG91YmxlIHByZWNpc2lvbiBhbmQgZXh0ZW5kZWQgZG91YmxlIHByZWNpc2lvbiBmb3JtYXRzLiAgVGhlIHBvcnQgb2YKK1NvZnRGbG9hdCB0byB0aGUgQVJNIHdhcyBkb25lIGJ5IFBoaWwgQmx1bmRlbGwsIGJhc2VkIG9uIGFuIGVhcmxpZXIKK3BvcnQgb2YgU29mdEZsb2F0IHZlcnNpb24gMSBieSBOZWlsIENhcnNvbiBmb3IgTmV0QlNEL2FybTMyLgorCitUaGUgZmlsZSBSRUFETUUuRlBFIGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2Ygd2hhdCBoYXMgYmVlbiBpbXBsZW1lbnRlZAorc28gZmFyIGluIHRoZSBlbXVsYXRvci4gIFRoZSBmaWxlIFRPRE8gY29udGFpbnMgYSBpbmZvcm1hdGlvbiBvbiB3aGF0IAorcmVtYWlucyB0byBiZSBkb25lLCBhbmQgb3RoZXIgaWRlYXMgZm9yIHRoZSBlbXVsYXRvci4KKworQnVnIHJlcG9ydHMsIGNvbW1lbnRzLCBzdWdnZXN0aW9ucyBzaG91bGQgYmUgZGlyZWN0ZWQgdG8gbWUgYXQKKzxzY290dGJAbmV0d2luZGVyLm9yZz4uICBHZW5lcmFsIHJlcG9ydHMgb2YgInRoaXMgcHJvZ3JhbSBkb2Vzbid0Cit3b3JrIGNvcnJlY3RseSB3aGVuIHlvdXIgZW11bGF0b3IgaXMgaW5zdGFsbGVkIiBhcmUgdXNlZnVsIGZvcgorZGV0ZXJtaW5pbmcgdGhhdCBidWdzIHN0aWxsIGV4aXN0OyBidXQgYXJlIHZpcnR1YWxseSB1c2VsZXNzIHdoZW4KK2F0dGVtcHRpbmcgdG8gaXNvbGF0ZSB0aGUgcHJvYmxlbS4gIFBsZWFzZSByZXBvcnQgdGhlbSwgYnV0IGRvbid0CitleHBlY3QgcXVpY2sgYWN0aW9uLiAgQnVncyBzdGlsbCBleGlzdC4gIFRoZSBwcm9ibGVtIHJlbWFpbnMgaW4gaXNvbGF0aW5nCit3aGljaCBpbnN0cnVjdGlvbiBjb250YWlucyB0aGUgYnVnLiAgU21hbGwgcHJvZ3JhbXMgaWxsdXN0cmF0aW5nIGEgc3BlY2lmaWMKK3Byb2JsZW0gYXJlIGEgZ29kc2VuZC4KKworTGVnYWwgTm90aWNlcworLS0tLS0tLS0tLS0tLQorCitUaGUgTmV0V2luZGVyIEZsb2F0aW5nIFBvaW50IEVtdWxhdG9yIGlzIGZyZWUgc29mdHdhcmUuICBFdmVyeXRoaW5nIFJlYmVsLmNvbQoraGFzIHdyaXR0ZW4gaXMgcHJvdmlkZWQgdW5kZXIgdGhlIEdOVSBHUEwuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZworY29uZGl0aW9ucy4gIEV4Y2x1ZGVkIGZyb20gdGhlIGFib3ZlIGlzIHRoZSBTb2Z0RmxvYXQgY29kZS4gIEpvaG4gSGF1c2VyJ3MgCitsZWdhbCBub3RpY2UgZm9yIFNvZnRGbG9hdCBpcyBpbmNsdWRlZCBiZWxvdy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29mdEZsb2F0IExlZ2FsIE5vdGljZQorCitTb2Z0RmxvYXQgd2FzIHdyaXR0ZW4gYnkgSm9obiBSLiBIYXVzZXIuICBUaGlzIHdvcmsgd2FzIG1hZGUgcG9zc2libGUgaW4KK3BhcnQgYnkgdGhlIEludGVybmF0aW9uYWwgQ29tcHV0ZXIgU2NpZW5jZSBJbnN0aXR1dGUsIGxvY2F0ZWQgYXQgU3VpdGUgNjAwLAorMTk0NyBDZW50ZXIgU3RyZWV0LCBCZXJrZWxleSwgQ2FsaWZvcm5pYSA5NDcwNC4gIEZ1bmRpbmcgd2FzIHBhcnRpYWxseQorcHJvdmlkZWQgYnkgdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91bmRhdGlvbiB1bmRlciBncmFudCBNSVAtOTMxMTk4MC4gIFRoZQorb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGNvZGUgd2FzIHdyaXR0ZW4gYXMgcGFydCBvZiBhIHByb2plY3QgdG8gYnVpbGQKK2EgZml4ZWQtcG9pbnQgdmVjdG9yIHByb2Nlc3NvciBpbiBjb2xsYWJvcmF0aW9uIHdpdGggdGhlIFVuaXZlcnNpdHkgb2YKK0NhbGlmb3JuaWEgYXQgQmVya2VsZXksIG92ZXJzZWVuIGJ5IFByb2ZzLiBOZWxzb24gTW9yZ2FuIGFuZCBKb2huIFdhd3J6eW5lay4KKworVEhJUyBTT0ZUV0FSRSBJUyBESVNUUklCVVRFRCBBUyBJUywgRk9SIEZSRUUuICBBbHRob3VnaCByZWFzb25hYmxlIGVmZm9ydAoraGFzIGJlZW4gbWFkZSB0byBhdm9pZCBpdCwgVEhJUyBTT0ZUV0FSRSBNQVkgQ09OVEFJTiBGQVVMVFMgVEhBVCBXSUxMIEFUCitUSU1FUyBSRVNVTFQgSU4gSU5DT1JSRUNUIEJFSEFWSU9SLiAgVVNFIE9GIFRISVMgU09GVFdBUkUgSVMgUkVTVFJJQ1RFRCBUTworUEVSU09OUyBBTkQgT1JHQU5JWkFUSU9OUyBXSE8gQ0FOIEFORCBXSUxMIFRBS0UgRlVMTCBSRVNQT05TSUJJTElUWSBGT1IgQU5ZCitBTkQgQUxMIExPU1NFUywgQ09TVFMsIE9SIE9USEVSIFBST0JMRU1TIEFSSVNJTkcgRlJPTSBJVFMgVVNFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvUkVBRE1FLkZQRSBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRS5GUEUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmNWQ3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL253ZnBlL1JFQURNRS5GUEUKQEAgLTAsMCArMSwxNTYgQEAKK1RoZSBmb2xsb3dpbmcgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOZXRXaW5kZXIncyBmbG9hdGluZyBwb2ludAorZW11bGF0b3IuCisKK0luIHRoZSBmb2xsb3dpbmcgbm9tZW5jbGF0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZsb2F0aW5nIHBvaW50CitpbnN0cnVjdGlvbnMuICBJdCBmb2xsb3dzIHRoZSBjb252ZW50aW9ucyBpbiB0aGUgQVJNIG1hbnVhbC4KKworPFN8RHxFPiA9IDxzaW5nbGV8ZG91YmxlfGV4dGVuZGVkPiwgbm8gZGVmYXVsdAore1B8TXxafSA9IHtyb3VuZCB0byAraW5maW5pdHkscm91bmQgdG8gLWluZmluaXR5LHJvdW5kIHRvIHplcm99LAorICAgICAgICAgIGRlZmF1bHQgPSByb3VuZCB0byBuZWFyZXN0CisKK05vdGU6IGl0ZW1zIGVuY2xvc2VkIGluIHt9IGFyZSBvcHRpb25hbC4KKworRmxvYXRpbmcgUG9pbnQgQ29wcm9jZXNzb3IgRGF0YSBUcmFuc2ZlciBJbnN0cnVjdGlvbnMgKENQRFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTERGL1NURiAtIGxvYWQgYW5kIHN0b3JlIGZsb2F0aW5nCisKKzxMREZ8U1RGPntjb25kfTxTfER8RT4gRmQsIFJuCis8TERGfFNURj57Y29uZH08U3xEfEU+IEZkLCBbUm4sICM8ZXhwcmVzc2lvbj5deyF9Cis8TERGfFNURj57Y29uZH08U3xEfEU+IEZkLCBbUm5dLCAjPGV4cHJlc3Npb24+CisKK1RoZXNlIGluc3RydWN0aW9ucyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQuCisKK0xGTS9TRk0gLSBsb2FkIGFuZCBzdG9yZSBtdWx0aXBsZSBmbG9hdGluZworCitGb3JtIDEgc3ludGF4OgorPExGTXxTRk0+e2NvbmR9PFN8RHxFPiBGZCwgPGNvdW50PiwgW1JuXQorPExGTXxTRk0+e2NvbmR9PFN8RHxFPiBGZCwgPGNvdW50PiwgW1JuLCAjPGV4cHJlc3Npb24+XXshfQorPExGTXxTRk0+e2NvbmR9PFN8RHxFPiBGZCwgPGNvdW50PiwgW1JuXSwgIzxleHByZXNzaW9uPgorCitGb3JtIDIgc3ludGF4OgorPExGTXxTRk0+e2NvbmR9PEZELEVBPiBGZCwgPGNvdW50PiwgW1JuXXshfQorCitUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGZ1bGx5IGltcGxlbWVudGVkLiAgVGhleSBzdG9yZS9sb2FkIHRocmVlIHdvcmRzCitmb3IgZWFjaCBmbG9hdGluZyBwb2ludCByZWdpc3RlciBpbnRvIHRoZSBtZW1vcnkgbG9jYXRpb24gZ2l2ZW4gaW4gdGhlIAoraW5zdHJ1Y3Rpb24uICBUaGUgZm9ybWF0IGluIG1lbW9yeSBpcyB1bmxpa2VseSB0byBiZSBjb21wYXRpYmxlIHdpdGgKK290aGVyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciB0aGUgYWN0dWFsIGhhcmR3YXJlLiAgU3BlY2lmaWMKK21lbnRpb24gb2YgdGhpcyBpcyBtYWRlIGluIHRoZSBBUk0gbWFudWFscy4gIAorCitGbG9hdGluZyBQb2ludCBDb3Byb2Nlc3NvciBSZWdpc3RlciBUcmFuc2ZlciBJbnN0cnVjdGlvbnMgKENQUlQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnZlcnNpb25zLCByZWFkL3dyaXRlIHN0YXR1cy9jb250cm9sIHJlZ2lzdGVyIGluc3RydWN0aW9ucworCitGTFR7Y29uZH08UyxELEU+e1AsTSxafSBGbiwgUmQgICAgICAgICAgQ29udmVydCBpbnRlZ2VyIHRvIGZsb2F0aW5nIHBvaW50CitGSVh7Y29uZH17UCxNLFp9IFJkLCBGbiAgICAgICAgICAgICAgICAgQ29udmVydCBmbG9hdGluZyBwb2ludCB0byBpbnRlZ2VyCitXRlN7Y29uZH0gUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIHJlZ2lzdGVyCitSRlN7Y29uZH0gUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIKK1dGQ3tjb25kfSBSZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyCitSRkN7Y29uZH0gUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyCisKK0ZMVC9GSVggYXJlIGZ1bGx5IGltcGxlbWVudGVkLgorCitSRlMvV0ZTIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworUkZDL1dGQyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQuICBSRkMvV0ZDIGFyZSBzdXBlcnZpc29yIG9ubHkgaW5zdHJ1Y3Rpb25zLCBhbmQKK3ByZXNlbnRseSBjaGVjayB0aGUgQ1BVIG1vZGUsIGFuZCBkbyBhbiBpbnZhbGlkIGluc3RydWN0aW9uIHRyYXAgaWYgbm90IGNhbGxlZAorZnJvbSBzdXBlcnZpc29yIG1vZGUuCisKK0NvbXBhcmUgaW5zdHJ1Y3Rpb25zCisKK0NNRntjb25kfSBGbiwgRm0gICAgICAgIENvbXBhcmUgZmxvYXRpbmcKK0NNRkV7Y29uZH0gRm4sIEZtICAgICAgIENvbXBhcmUgZmxvYXRpbmcgd2l0aCBleGNlcHRpb24KK0NORntjb25kfSBGbiwgRm0gICAgICAgIENvbXBhcmUgbmVnYXRlZCBmbG9hdGluZworQ05GRXtjb25kfSBGbiwgRm0gICAgICAgQ29tcGFyZSBuZWdhdGVkIGZsb2F0aW5nIHdpdGggZXhjZXB0aW9uCisKK1RoZXNlIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworRmxvYXRpbmcgUG9pbnQgQ29wcm9jZXNzb3IgRGF0YSBJbnN0cnVjdGlvbnMgKENQRFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHlhZGljIG9wZXJhdGlvbnM6CisKK0FERntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBhZGQKK1NVRntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBzdWJ0cmFjdAorUlNGe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHJldmVyc2Ugc3VidHJhY3QKK01VRntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBtdWx0aXBseQorRFZGe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIGRpdmlkZQorUkRWe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHJldmVyc2UgZGl2aWRlCisKK1RoZXNlIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworRk1Me2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIGZhc3QgbXVsdGlwbHkKK0ZEVntjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSBmYXN0IGRpdmlkZQorRlJEe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIGZhc3QgcmV2ZXJzZSBkaXZpZGUKKworVGhlc2UgYXJlIGZ1bGx5IGltcGxlbWVudGVkIGFzIHdlbGwuICBUaGV5IHVzZSB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdGhlCitub24tZmFzdCB2ZXJzaW9ucy4gIEhlbmNlLCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoZWlyIHBlcmZvcm1hbmNlIGlzCitlcXVpdmFsZW50IHRvIHRoZSBNVUYvRFZGL1JEViBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIGFjY2VwdGFibGUgYWNjb3JkaW5nCit0byB0aGUgQVJNIG1hbnVhbC4gIFRoZSBtYW51YWwgbm90ZXMgdGhlc2UgYXJlIGRlZmluZWQgb25seSBmb3Igc2luZ2xlCitvcGVyYW5kcywgb24gdGhlIGFjdHVhbCBGUEExMSBoYXJkd2FyZSB0aGV5IGRvIG5vdCB3b3JrIGZvciBkb3VibGUgb3IKK2V4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kcy4gIFRoZSBlbXVsYXRvciBjdXJyZW50bHkgZG9lcyBub3QgY2hlY2sKK3RoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgY29uZGl0aW9ucywgYW5kIHBlcmZvcm1zIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLgorCitSTUZ7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gSUVFRSByZW1haW5kZXIKKworVGhpcyBpcyBmdWxseSBpbXBsZW1lbnRlZC4KKworTW9uYWRpYyBvcGVyYXRpb25zOgorCitNVkZ7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBtb3ZlCitNTkZ7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBtb3ZlIG5lZ2F0ZWQKKworVGhlc2UgYXJlIGZ1bGx5IGltcGxlbWVudGVkLgorCitBQlN7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBhYnNvbHV0ZSB2YWx1ZQorU1FUe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gc3F1YXJlIHJvb3QKK1JORHtjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIHJvdW5kCisKK1RoZXNlIGFyZSBmdWxseSBpbXBsZW1lbnRlZC4KKworVVJEe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gdW5ub3JtYWxpemVkIHJvdW5kCitOUk17Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBub3JtYWxpemUKKworVGhlc2UgYXJlIGltcGxlbWVudGVkLiAgVVJEIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzYW1lIGNvZGUgYXMgdGhlIFJORAoraW5zdHJ1Y3Rpb24uICBTaW5jZSBVUkQgY2Fubm90IHJldHVybiBhIHVubm9ybWFsaXplZCBudW1iZXIsIE5STSBiZWNvbWVzCithIE5PUC4KKworTGlicmFyeSBjYWxsczoKKworUE9Xe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHBvd2VyCitSUFd7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gcmV2ZXJzZSBwb3dlcgorUE9Me2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIEZuLCA8Rm0sI3ZhbHVlPiAtIHBvbGFyIGFuZ2xlIChhcmN0YW4yKQorCitMT0d7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBsb2dhcml0aG0gdG8gYmFzZSAxMAorTEdOe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gbG9nYXJpdGhtIHRvIGJhc2UgZSAKK0VYUHtjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGV4cG9uZW50CitTSU57Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBzaW5lCitDT1N7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBjb3NpbmUKK1RBTntjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIHRhbmdlbnQKK0FTTntjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGFyY3NpbmUKK0FDU3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGFyY2Nvc2luZQorQVROe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gYXJjdGFuZ2VudAorCitUaGVzZSBhcmUgbm90IGltcGxlbWVudGVkLiAgVGhleSBhcmUgbm90IGN1cnJlbnRseSBpc3N1ZWQgYnkgdGhlIGNvbXBpbGVyLAorYW5kIGFyZSBoYW5kbGVkIGJ5IHJvdXRpbmVzIGluIGxpYmMuICBUaGVzZSBhcmUgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBGUEExMQoraGFyZHdhcmUsIGJ1dCBhcmUgaGFuZGxlZCBieSB0aGUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBjb2RlLiAgVGhleSBzaG91bGQgCitiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMuCisKK1NpZ25hbGxpbmc6CisKK1NpZ25hbHMgYXJlIGltcGxlbWVudGVkLiAgSG93ZXZlciBjdXJyZW50IEVMRiBrZXJuZWxzIHByb2R1Y2VkIGJ5IFJlYmVsLmNvbQoraGF2ZSBhIGJ1ZyBpbiB0aGVtIHRoYXQgcHJldmVudHMgdGhlIG1vZHVsZSBmcm9tIGdlbmVyYXRpbmcgYSBTSUdGUEUuICBUaGlzCitpcyBjYXVzZWQgYnkgYSBmYWlsdXJlIHRvIGFsaWFzIGZwX2N1cnJlbnQgdG8gdGhlIGtlcm5lbCB2YXJpYWJsZQorY3VycmVudF9zZXRbMF0gY29ycmVjdGx5LgorCitUaGUga2VybmVsIHByb3ZpZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gKHZtbGludXgtbndmcGUtMC45MykgY29udGFpbnMKK2EgZml4IGZvciB0aGlzIHByb2JsZW0gYW5kIGFsc28gaW5jb3Jwb3JhdGVzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlCitlbXVsYXRvciBkaXJlY3RseS4gIEl0IGlzIHBvc3NpYmxlIHRvIHJ1biB3aXRoIG5vIGZsb2F0aW5nIHBvaW50IG1vZHVsZQorbG9hZGVkIHdpdGggdGhpcyBrZXJuZWwuICBJdCBpcyBwcm92aWRlZCBhcyBhIGRlbW9uc3RyYXRpb24gb2YgdGhlIAordGVjaG5vbG9neSBhbmQgZm9yIHRob3NlIHdobyB3YW50IHRvIGRvIGZsb2F0aW5nIHBvaW50IHdvcmsgdGhhdCBkZXBlbmRzCitvbiBzaWduYWxzLiAgSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byB1c2UgdGhlIG1vZHVsZS4KKworQSBtb2R1bGUgKGVpdGhlciB0aGUgb25lIHByb3ZpZGVkIGJ5IFJ1c3NlbGwgS2luZywgb3IgdGhlIG9uZSBpbiB0aGlzIAorZGlzdHJpYnV0aW9uKSBjYW4gYmUgbG9hZGVkIHRvIHJlcGxhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGVtdWxhdG9yCitidWlsdCBpbnRvIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9ud2ZwZS9UT0RPIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDI3MDYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbndmcGUvVE9ETwpAQCAtMCwwICsxLDY3IEBACitUT0RPIExJU1QKKy0tLS0tLS0tLQorCitQT1d7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gcG93ZXIKK1JQV3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCBGbiwgPEZtLCN2YWx1ZT4gLSByZXZlcnNlIHBvd2VyCitQT0x7Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgRm4sIDxGbSwjdmFsdWU+IC0gcG9sYXIgYW5nbGUgKGFyY3RhbjIpCisKK0xPR3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGxvZ2FyaXRobSB0byBiYXNlIDEwCitMR057Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBsb2dhcml0aG0gdG8gYmFzZSBlIAorRVhQe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gZXhwb25lbnQKK1NJTntjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIHNpbmUKK0NPU3tjb25kfTxTfER8RT57UCxNLFp9IEZkLCA8Rm0sI3ZhbHVlPiAtIGNvc2luZQorVEFOe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gdGFuZ2VudAorQVNOe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gYXJjc2luZQorQUNTe2NvbmR9PFN8RHxFPntQLE0sWn0gRmQsIDxGbSwjdmFsdWU+IC0gYXJjY29zaW5lCitBVE57Y29uZH08U3xEfEU+e1AsTSxafSBGZCwgPEZtLCN2YWx1ZT4gLSBhcmN0YW5nZW50CisKK1RoZXNlIGFyZSBub3QgaW1wbGVtZW50ZWQuICBUaGV5IGFyZSBub3QgY3VycmVudGx5IGlzc3VlZCBieSB0aGUgY29tcGlsZXIsCithbmQgYXJlIGhhbmRsZWQgYnkgcm91dGluZXMgaW4gbGliYy4gIFRoZXNlIGFyZSBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIEZQQTExCitoYXJkd2FyZSwgYnV0IGFyZSBoYW5kbGVkIGJ5IHRoZSBmbG9hdGluZyBwb2ludCBzdXBwb3J0IGNvZGUuICBUaGV5IHNob3VsZCAKK2JlIGltcGxlbWVudGVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4KKworVGhlcmUgYXJlIGEgY291cGxlIG9mIHdheXMgdG8gYXBwcm9hY2ggdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlLiAgT25lCittZXRob2Qgd291bGQgYmUgdG8gdXNlIGFjY3VyYXRlIHRhYmxlIG1ldGhvZHMgZm9yIHRoZXNlIHJvdXRpbmVzLiAgSSBoYXZlIAorYSBjb3VwbGUgb2YgcGFwZXJzIGJ5IFMuIEdhbCBmcm9tIElCTSdzIHJlc2VhcmNoIGxhYnMgaW4gSGFpZmEsIElzcmFlbCB0aGF0CitzZWVtIHRvIHByb21pc2UgZXh0cmVtZSBhY2N1cmFjeSAoaW4gdGhlIG9yZGVyIG9mIDk5LjglKSBhbmQgcmVhc29uYWJsZSBzcGVlZC4KK1RoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW4gR0xJQkMgZm9yIHNvbWUgb2YgdGhlIHRyYW5zY2VuZGVudGFsIGZ1bmN0aW9ucy4KKworQW5vdGhlciBhcHByb2FjaCwgd2hpY2ggSSBrbm93IGxpdHRsZSBhYm91dCBpcyBDT1JESUMuICBUaGlzIHN0YW5kcyBmb3IKK0Nvb3JkaW5hdGUgUm90YXRpb24gRGlnaXRhbCBDb21wdXRlciwgYW5kIGlzIGEgbWV0aG9kIG9mIGNvbXB1dGluZyAKK3RyYW5zY2VuZGVudGFsIGZ1bmN0aW9ucyB1c2luZyBtb3N0bHkgc2hpZnRzIGFuZCBhZGRzIGFuZCBhIGZldworbXVsdGlwbGljYXRpb25zIGFuZCBkaXZpc2lvbnMuICBUaGUgQVJNIGV4Y2VscyBhdCBzaGlmdHMgYW5kIGFkZHMsCitzbyBzdWNoIGEgbWV0aG9kIGNvdWxkIGJlIHByb21pc2luZywgYnV0IHJlcXVpcmVzIG1vcmUgcmVzZWFyY2ggdG8gCitkZXRlcm1pbmUgaWYgaXQgaXMgZmVhc2libGUuCisKK1JvdW5kaW5nIE1ldGhvZHMKKworVGhlIElFRUUgc3RhbmRhcmQgZGVmaW5lcyA0IHJvdW5kaW5nIG1vZGVzLiAgUm91bmQgdG8gbmVhcmVzdCBpcyB0aGUKK2RlZmF1bHQsIGJ1dCByb3VuZGluZyB0byArIG9yIC0gaW5maW5pdHkgb3Igcm91bmQgdG8gemVybyBhcmUgYWxzbyBhbGxvd2VkLgorTWFueSBhcmNoaXRlY3R1cmVzIGFsbG93IHRoZSByb3VuZGluZyBtb2RlIHRvIGJlIHNwZWNpZmllZCBieSBtb2RpZnlpbmcgYml0cworaW4gYSBjb250cm9sIHJlZ2lzdGVyLiAgTm90IHNvIHdpdGggdGhlIEFSTSBGUEExMSBhcmNoaXRlY3R1cmUuICBUbyBjaGFuZ2UKK3RoZSByb3VuZGluZyBtb2RlIG9uZSBtdXN0IHNwZWNpZnkgaXQgd2l0aCBlYWNoIGluc3RydWN0aW9uLgorCitUaGlzIGhhcyBtYWRlIHBvcnRpbmcgc29tZSBiZW5jaG1hcmtzIGRpZmZpY3VsdC4gIEl0IGlzIHBvc3NpYmxlIHRvCitpbnRyb2R1Y2Ugc3VjaCBhIGNhcGFiaWxpdHkgaW50byB0aGUgZW11bGF0b3IuICBUaGUgRlBDUiBjb250YWlucyAKK2JpdHMgZGVzY3JpYmluZyB0aGUgcm91bmRpbmcgbW9kZS4gIFRoZSBlbXVsYXRvciBjb3VsZCBiZSBhbHRlcmVkIHRvIAorZXhhbWluZSBhIGZsYWcsIHdoaWNoIGlmIHNldCBmb3JjZWQgaXQgdG8gaWdub3JlIHRoZSByb3VuZGluZyBtb2RlIGluCit0aGUgaW5zdHJ1Y3Rpb24sIGFuZCB1c2UgdGhlIG1vZGUgc3BlY2lmaWVkIGluIHRoZSBiaXRzIGluIHRoZSBGUENSLgorCitUaGlzIHdvdWxkIHJlcXVpcmUgYSBtZXRob2Qgb2YgZ2V0dGluZy9zZXR0aW5nIHRoZSBmbGFnLCBhbmQgdGhlIGJpdHMKK2luIHRoZSBGUENSLiAgVGhpcyByZXF1aXJlcyBhIGtlcm5lbCBjYWxsIGluIEFybUxpbnV4LCBhcyBXRkMvUkZDIGFyZQorc3VwZXJ2aXNvciBvbmx5IGluc3RydWN0aW9ucy4gIElmIGFueW9uZSBoYXMgYW55IGlkZWFzIG9yIGNvbW1lbnRzIEkKK3dvdWxkIGxpa2UgdG8gaGVhciB0aGVtLgorCitbTk9URTogcHVsbGVkIG91dCBmcm9tIHNvbWUgZG9jcyBvbiBBUk0gZmxvYXRpbmcgcG9pbnQsIHNwZWNpZmljYWxseQorIGZvciB0aGUgQWNvcm4gRlBFLCBidXQgbm90IGxpbWl0ZWQgdG8gaXQ6CisKKyBUaGUgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciAoRlBDUikgbWF5IG9ubHkgYmUgcHJlc2VudCBpbiBzb21lCisgaW1wbGVtZW50YXRpb25zOiBpdCBpcyB0aGVyZSB0byBjb250cm9sIHRoZSBoYXJkd2FyZSBpbiBhbiBpbXBsZW1lbnRhdGlvbi0KKyBzcGVjaWZpYyBtYW5uZXIsIGZvciBleGFtcGxlIHRvIGRpc2FibGUgdGhlIGZsb2F0aW5nIHBvaW50IHN5c3RlbS4gIFRoZSB1c2VyCisgbW9kZSBvZiB0aGUgQVJNIGlzIG5vdCBwZXJtaXR0ZWQgdG8gdXNlIHRoaXMgcmVnaXN0ZXIgKHNpbmNlIHRoZSByaWdodCBpcworIHJlc2VydmVkIHRvIGFsdGVyIGl0IGJldHdlZW4gaW1wbGVtZW50YXRpb25zKSBhbmQgdGhlIFdGQyBhbmQgUkZDCisgaW5zdHJ1Y3Rpb25zIHdpbGwgdHJhcCBpZiB0cmllZCBpbiB1c2VyIG1vZGUuCisKKyBIZW5jZSwgdGhlIGFuc3dlciBpcyB5ZXMsIHlvdSBjb3VsZCBkbyB0aGlzLCBidXQgdGhlbiB5b3Ugd2lsbCBydW4gYSBoaWdoCisgcmlzayBvZiBiZWNvbWluZyBpc29sYXRlZCBpZiBhbmQgd2hlbiBoYXJkd2FyZSBGUCBlbXVsYXRpb24gY29tZXMgb3V0CisJCS0tIFJ1c3NlbGxdLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dCBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlZGFhMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKQEAgLTAsMCArMSw0NTYgQEAKKwkJU2VtYW50aWNzIGFuZCBCZWhhdmlvciBvZiBBdG9taWMgYW5kCisJCSAgICAgICAgIEJpdG1hc2sgT3BlcmF0aW9ucworCisJCQkgIERhdmlkIFMuIE1pbGxlcgkgCisKKwlUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIHNlcnZlIGFzIGEgZ3VpZGUgdG8gTGludXggcG9ydAorbWFpbnRhaW5lcnMgb24gaG93IHRvIGltcGxlbWVudCBhdG9taWMgY291bnRlciwgYml0b3BzLCBhbmQgc3BpbmxvY2sKK2ludGVyZmFjZXMgcHJvcGVybHkuCisKKwlUaGUgYXRvbWljX3QgdHlwZSBzaG91bGQgYmUgZGVmaW5lZCBhcyBhIHNpZ25lZCBpbnRlZ2VyLgorQWxzbywgaXQgc2hvdWxkIGJlIG1hZGUgb3BhcXVlIHN1Y2ggdGhhdCBhbnkga2luZCBvZiBjYXN0IHRvIGEgbm9ybWFsCitDIGludGVnZXIgdHlwZSB3aWxsIGZhaWwuICBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNob3VsZAorc3VmZmljZToKKworCXR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CisKKwlUaGUgZmlyc3Qgb3BlcmF0aW9ucyB0byBpbXBsZW1lbnQgZm9yIGF0b21pY190J3MgYXJlIHRoZQoraW5pdGlhbGl6ZXJzIGFuZCBwbGFpbiByZWFkcy4KKworCSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJCXsgKGkpIH0KKwkjZGVmaW5lIGF0b21pY19zZXQodiwgaSkJKCh2KS0+Y291bnRlciA9IChpKSkKKworVGhlIGZpcnN0IG1hY3JvIGlzIHVzZWQgaW4gZGVmaW5pdGlvbnMsIHN1Y2ggYXM6CisKK3N0YXRpYyBhdG9taWNfdCBteV9jb3VudGVyID0gQVRPTUlDX0lOSVQoMSk7CisKK1RoZSBzZWNvbmQgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIGF0IHJ1bnRpbWUsIGFzIGluOgorCisJc3RydWN0IGZvbyB7IGF0b21pY190IGNvdW50ZXI7IH07CisJLi4uCisKKwlzdHJ1Y3QgZm9vICprOworCisJayA9IGttYWxsb2Moc2l6ZW9mKCprKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhdG9taWNfc2V0KCZrLT5jb3VudGVyLCAwKTsKKworTmV4dCwgd2UgaGF2ZToKKworCSNkZWZpbmUgYXRvbWljX3JlYWQodikJKCh2KS0+Y291bnRlcikKKword2hpY2ggc2ltcGx5IHJlYWRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudGVyLgorCitOb3csIHdlIG1vdmUgb250byB0aGUgYWN0dWFsIGF0b21pYyBvcGVyYXRpb24gaW50ZXJmYWNlcy4KKworCXZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpOworCXZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpOworCXZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdik7CisJdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KTsKKworVGhlc2UgZm91ciByb3V0aW5lcyBhZGQgYW5kIHN1YnRyYWN0IGludGVncmFsIHZhbHVlcyB0by9mcm9tIHRoZSBnaXZlbgorYXRvbWljX3QgdmFsdWUuICBUaGUgZmlyc3QgdHdvIHJvdXRpbmVzIHBhc3MgZXhwbGljaXQgaW50ZWdlcnMgYnkKK3doaWNoIHRvIG1ha2UgdGhlIGFkanVzdG1lbnQsIHdoZXJlYXMgdGhlIGxhdHRlciB0d28gdXNlIGFuIGltcGxpY2l0CithZGp1c3RtZW50IHZhbHVlIG9mICIxIi4KKworT25lIHZlcnkgaW1wb3J0YW50IGFzcGVjdCBvZiB0aGVzZSB0d28gcm91dGluZXMgaXMgdGhhdCB0aGV5IERPIE5PVAorcmVxdWlyZSBhbnkgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzLiAgVGhleSBuZWVkIG9ubHkgcGVyZm9ybSB0aGUKK2F0b21pY190IGNvdW50ZXIgdXBkYXRlIGluIGFuIFNNUCBzYWZlIG1hbm5lci4KKworTmV4dCwgd2UgaGF2ZToKKworCWludCBhdG9taWNfaW5jX3JldHVybihhdG9taWNfdCAqdik7CisJaW50IGF0b21pY19kZWNfcmV0dXJuKGF0b21pY190ICp2KTsKKworVGhlc2Ugcm91dGluZXMgYWRkIDEgYW5kIHN1YnRyYWN0IDEsIHJlc3BlY3RpdmVseSwgZnJvbSB0aGUgZ2l2ZW4KK2F0b21pY190IGFuZCByZXR1cm4gdGhlIG5ldyBjb3VudGVyIHZhbHVlIGFmdGVyIHRoZSBvcGVyYXRpb24gaXMKK3BlcmZvcm1lZC4KKworVW5saWtlIHRoZSBhYm92ZSByb3V0aW5lcywgaXQgaXMgcmVxdWlyZWQgdGhhdCBleHBsaWNpdCBtZW1vcnkKK2JhcnJpZXJzIGFyZSBwZXJmb3JtZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3BlcmF0aW9uLiAgSXQgbXVzdCBiZQorZG9uZSBzdWNoIHRoYXQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGF0b21pYworb3BlcmF0aW9uIGNhbGxzIGFyZSBzdHJvbmdseSBvcmRlcmVkIHdpdGggcmVzcGVjdCB0byB0aGUgYXRvbWljCitvcGVyYXRpb24gaXRzZWxmLgorCitGb3IgZXhhbXBsZSwgaXQgc2hvdWxkIGJlaGF2ZSBhcyBpZiBhIHNtcF9tYigpIGNhbGwgZXhpc3RlZCBib3RoCitiZWZvcmUgYW5kIGFmdGVyIHRoZSBhdG9taWMgb3BlcmF0aW9uLgorCitJZiB0aGUgYXRvbWljIGluc3RydWN0aW9ucyB1c2VkIGluIGFuIGltcGxlbWVudGF0aW9uIHByb3ZpZGUgZXhwbGljaXQKK21lbW9yeSBiYXJyaWVyIHNlbWFudGljcyB3aGljaCBzYXRpc2Z5IHRoZSBhYm92ZSByZXF1aXJlbWVudHMsIHRoYXQgaXMKK2ZpbmUgYXMgd2VsbC4KKworTGV0J3MgbW92ZSBvbjoKKworCWludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpOworCWludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpOworCitUaGVzZSBiZWhhdmUganVzdCBsaWtlIGF0b21pY197aW5jLGRlY31fcmV0dXJuKCkgZXhjZXB0IHRoYXQgYW4KK2V4cGxpY2l0IGNvdW50ZXIgYWRqdXN0bWVudCBpcyBnaXZlbiBpbnN0ZWFkIG9mIHRoZSBpbXBsaWNpdCAiMSIuCitUaGlzIG1lYW5zIHRoYXQgbGlrZSBhdG9taWNfe2luYyxkZWN9X3JldHVybigpLCB0aGUgbWVtb3J5IGJhcnJpZXIKK3NlbWFudGljcyBhcmUgcmVxdWlyZWQuCisKK05leHQ6CisKKwlpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdik7CisJaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpOworCitUaGVzZSB0d28gcm91dGluZXMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnkgMSwgcmVzcGVjdGl2ZWx5LCB0aGUKK2dpdmVuIGF0b21pYyBjb3VudGVyLiAgVGhleSByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUKK3Jlc3VsdGluZyBjb3VudGVyIHZhbHVlIHdhcyB6ZXJvIG9yIG5vdC4KKworSXQgcmVxdWlyZXMgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFyb3VuZCB0aGUgb3BlcmF0aW9uIGFzCithYm92ZS4KKworCWludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdik7CisKK1RoaXMgaXMgaWRlbnRpY2FsIHRvIGF0b21pY19kZWNfYW5kX3Rlc3QoKSBleGNlcHQgdGhhdCBhbiBleHBsaWNpdAorZGVjcmVtZW50IGlzIGdpdmVuIGluc3RlYWQgb2YgdGhlIGltcGxpY2l0ICIxIi4gIEl0IHJlcXVpcmVzIGV4cGxpY2l0CittZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYXJvdW5kIHRoZSBvcGVyYXRpb24uCisKKwlpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpOworCitUaGUgZ2l2ZW4gaW5jcmVtZW50IGlzIGFkZGVkIHRvIHRoZSBnaXZlbiBhdG9taWMgY291bnRlciB2YWx1ZS4gIEEKK2Jvb2xlYW4gaXMgcmV0dXJuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXN1bHRpbmcgY291bnRlciB2YWx1ZQoraXMgbmVnYXRpdmUuICBJdCByZXF1aXJlcyBleHBsaWNpdCBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYXJvdW5kIHRoZQorb3BlcmF0aW9uLgorCitJZiBhIGNhbGxlciByZXF1aXJlcyBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgYXJvdW5kIGFuIGF0b21pY190CitvcGVyYXRpb24gd2hpY2ggZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUsIGEgc2V0IG9mIGludGVyZmFjZXMgYXJlCitkZWZpbmVkIHdoaWNoIGFjY29tcGxpc2ggdGhpczoKKworCXZvaWQgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYyh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYyh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmModm9pZCk7CisJdm9pZCBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWModm9pZCk7CisKK0ZvciBleGFtcGxlLCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgY2FuIGJlIHVzZWQgbGlrZSBzbzoKKworCW9iai0+ZGVhZCA9IDE7CisJc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpOworCWF0b21pY19kZWMoJm9iai0+cmVmX2NvdW50KTsKKworSXQgbWFrZXMgc3VyZSB0aGF0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyBwcmVjZWVkaW5nIHRoZSBhdG9taWNfZGVjKCkKK2NhbGwgYXJlIHN0cm9uZ2x5IG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBhdG9taWMgY291bnRlcgorb3BlcmF0aW9uLiAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGl0IGd1YXJlbnRlZXMgdGhhdCB0aGUgYXNzaWdubWVudCBvZgorIjEiIHRvIG9iai0+ZGVhZCB3aWxsIGJlIGdsb2JhbGx5IHZpc2libGUgdG8gb3RoZXIgY3B1cyBiZWZvcmUgdGhlCithdG9taWMgY291bnRlciBkZWNyZW1lbnQuCisKK1dpdGhvdXQgdGhlIGV4cGxpY2l0bCBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkgY2FsbCwgdGhlCitpbXBsZW1lbnRhdGlvbiBjb3VsZCBsZWdhbGx5IGFsbG93IHRoZSBhdG9taWMgY291bnRlciB1cGRhdGUgdmlzaWJsZQordG8gb3RoZXIgY3B1cyBiZWZvcmUgdGhlICJvYmotPmRlYWQgPSAxOyIgYXNzaWdubWVudC4KKworVGhlIG90aGVyIHRocmVlIGludGVyZmFjZXMgbGlzdGVkIGFyZSB1c2VkIHRvIHByb3ZpZGUgZXhwbGljaXQKK29yZGVyaW5nIHdpdGggcmVzcGVjdCB0byBtZW1vcnkgb3BlcmF0aW9ucyBhZnRlciBhbiBhdG9taWNfZGVjKCkgY2FsbAorKHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpKSBhbmQgYXJvdW5kIGF0b21pY19pbmMoKSBjYWxscworKHNtcF9tYl9fe2JlZm9yZSxhZnRlcn1fYXRvbWljX2luYygpKS4KKworQSBtaXNzaW5nIG1lbW9yeSBiYXJyaWVyIGluIHRoZSBjYXNlcyB3aGVyZSB0aGV5IGFyZSByZXF1aXJlZCBieSB0aGUKK2F0b21pY190IGltcGxlbWVudGF0aW9uIGFib3ZlIGNhbiBoYXZlIGRpc2FzdGVyb3VzIHJlc3VsdHMuICBIZXJlIGlzCithbiBleGFtcGxlLCB3aGljaCBmb2xsb3dzIGEgcGF0dGVybiBvY2N1cmluZyBmcmVxdWVudGx5IGluIHRoZSBMaW51eAora2VybmVsLiAgSXQgaXMgdGhlIHVzZSBvZiBhdG9taWMgY291bnRlcnMgdG8gaW1wbGVtZW50IHJlZmVyZW5jZQorY291bnRpbmcsIGFuZCBpdCB3b3JrcyBzdWNoIHRoYXQgb25jZSB0aGUgY291bnRlciBmYWxscyB0byB6ZXJvIGl0IGNhbgorYmUgZ3VhcmVudGVlZCB0aGF0IG5vIG90aGVyIGVudGl0eSBjYW4gYmUgYWNjZXNzaW5nIHRoZSBvYmplY3Q6CisKK3N0YXRpYyB2b2lkIG9ial9saXN0X2FkZChzdHJ1Y3Qgb2JqICpvYmopCit7CisJb2JqLT5hY3RpdmUgPSAxOworCWxpc3RfYWRkKCZvYmotPmxpc3QpOworfQorCitzdGF0aWMgdm9pZCBvYmpfbGlzdF9kZWwoc3RydWN0IG9iaiAqb2JqKQoreworCWxpc3RfZGVsKCZvYmotPmxpc3QpOworCW9iai0+YWN0aXZlID0gMDsKK30KKworc3RhdGljIHZvaWQgb2JqX2Rlc3Ryb3koc3RydWN0IG9iaiAqb2JqKQoreworCUJVR19PTihvYmotPmFjdGl2ZSk7CisJa2ZyZWUob2JqKTsKK30KKworc3RydWN0IG9iaiAqb2JqX2xpc3RfcGVlayhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlzdHJ1Y3Qgb2JqICpvYmo7CisKKwkJb2JqID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3Qgb2JqLCBsaXN0KTsKKwkJYXRvbWljX2luYygmb2JqLT5yZWZjbnQpOworCQlyZXR1cm4gb2JqOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBvYmpfcG9rZSh2b2lkKQoreworCXN0cnVjdCBvYmogKm9iajsKKworCXNwaW5fbG9jaygmZ2xvYmFsX2xpc3RfbG9jayk7CisJb2JqID0gb2JqX2xpc3RfcGVlaygmZ2xvYmFsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZnbG9iYWxfbGlzdF9sb2NrKTsKKworCWlmIChvYmopIHsKKwkJb2JqLT5vcHMtPnBva2Uob2JqKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9iai0+cmVmY250KSkKKwkJCW9ial9kZXN0cm95KG9iaik7CisJfQorfQorCit2b2lkIG9ial90aW1lb3V0KHN0cnVjdCBvYmogKm9iaikKK3sKKwlzcGluX2xvY2soJmdsb2JhbF9saXN0X2xvY2spOworCW9ial9saXN0X2RlbChvYmopOworCXNwaW5fdW5sb2NrKCZnbG9iYWxfbGlzdF9sb2NrKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmotPnJlZmNudCkpCisJCW9ial9kZXN0cm95KG9iaik7Cit9CisKKyhUaGlzIGlzIGEgc2ltcGxpZmljYXRpb24gb2YgdGhlIEFSUCBxdWV1ZSBtYW5hZ2VtZW50IGluIHRoZQorIGdlbmVyaWMgbmVpZ2hib3VyIGRpc2NvdmVyIGNvZGUgb2YgdGhlIG5ldHdvcmtpbmcuICBPbGFmIEtpcmNoCisgZm91bmQgYSBidWcgd3J0LiBtZW1vcnkgYmFycmllcnMgaW4ga2ZyZWVfc2tiKCkgdGhhdCBleHBvc2VkCisgdGhlIGF0b21pY190IG1lbW9yeSBiYXJyaWVyIHJlcXVpcmVtZW50cyBxdWl0ZSBjbGVhcmx5LikKKworR2l2ZW4gdGhlIGFib3ZlIHNjaGVtZSwgaXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHRoZSBvYmotPmFjdGl2ZQordXBkYXRlIGRvbmUgYnkgdGhlIG9iaiBsaXN0IGRlbGV0aW9uIGJlIHZpc2libGUgdG8gb3RoZXIgcHJvY2Vzc29ycworYmVmb3JlIHRoZSBhdG9taWMgY291bnRlciBkZWNyZW1lbnQgaXMgcGVyZm9ybWVkLgorCitPdGhlcndpc2UsIHRoZSBjb3VudGVyIGNvdWxkIGZhbGwgdG8gemVybywgeWV0IG9iai0+YWN0aXZlIHdvdWxkIHN0aWxsCitiZSBzZXQsIHRodXMgdHJpZ2dlcmluZyB0aGUgYXNzZXJ0aW9uIGluIG9ial9kZXN0cm95KCkuICBUaGUgZXJyb3IKK3NlcXVlbmNlIGxvb2tzIGxpa2UgdGhpczoKKworCWNwdSAwCQkJCWNwdSAxCisJb2JqX3Bva2UoKQkJCW9ial90aW1lb3V0KCkKKwlvYmogPSBvYmpfbGlzdF9wZWVrKCk7CisJLi4uIGdhaW5zIHJlZiB0byBvYmosIHJlZmNudD0yCisJCQkJCW9ial9saXN0X2RlbChvYmopOworCQkJCQlvYmotPmFjdGl2ZSA9IDAgLi4uCisJCQkJCS4uLiB2aXNpYmlsaXR5IGRlbGF5ZWQgLi4uCisJCQkJCWF0b21pY19kZWNfYW5kX3Rlc3QoKQorCQkJCQkuLi4gcmVmY250IGRyb3BzIHRvIDEgLi4uCisJYXRvbWljX2RlY19hbmRfdGVzdCgpCisJLi4uIHJlZmNvdW50IGRyb3BzIHRvIDAgLi4uCisJb2JqX2Rlc3Ryb3koKQorCUJVRygpIHRyaWdnZXJzIHNpbmNlIG9iai0+YWN0aXZlCisJc3RpbGwgc2VlbiBhcyBvbmUKKwkJCQkJb2JqLT5hY3RpdmUgdXBkYXRlIHZpc2liaWxpdHkgb2NjdXJzCisKK1dpdGggdGhlIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyByZXF1aXJlZCBvZiB0aGUgYXRvbWljX3Qgb3BlcmF0aW9ucword2hpY2ggcmV0dXJuIHZhbHVlcywgdGhlIGFib3ZlIHNlcXVlbmNlIG9mIG1lbW9yeSB2aXNpYmlsaXR5IGNhbiBuZXZlcgoraGFwcGVuLiAgU3BlY2lmaWNhbGx5LCBpbiB0aGUgYWJvdmUgY2FzZSB0aGUgYXRvbWljX2RlY19hbmRfdGVzdCgpCitjb3VudGVyIGRlY3JlbWVudCB3b3VsZCBub3QgYmVjb21lIGdsb2JhbGx5IHZpc2libGUgdW50aWwgdGhlCitvYmotPmFjdGl2ZSB1cGRhdGUgZG9lcy4KKworQXMgYSBoaXN0b3JpY2FsIG5vdGUsIDMyLWJpdCBTcGFyYyB1c2VkIHRvIG9ubHkgYWxsb3cgdXNhZ2Ugb2YKKzI0LWJpdHMgb2YgaXQncyBhdG9taWNfdCB0eXBlLiAgVGhpcyB3YXMgYmVjYXVzZSBpdCB1c2VkIDggYml0cworYXMgYSBzcGlubG9jayBmb3IgU01QIHNhZmV0eS4gIFNwYXJjMzIgbGFja2VkIGEgImNvbXBhcmUgYW5kIHN3YXAiCit0eXBlIGluc3RydWN0aW9uLiAgSG93ZXZlciwgMzItYml0IFNwYXJjIGhhcyBzaW5jZSBiZWVuIG1vdmVkIG92ZXIKK3RvIGEgImhhc2ggdGFibGUgb2Ygc3BpbmxvY2tzIiBzY2hlbWUsIHRoYXQgYWxsb3dzIHRoZSBmdWxsIDMyLWJpdAorY291bnRlciB0byBiZSByZWFsaXplZC4gIEVzc2VudGlhbGx5LCBhbiBhcnJheSBvZiBzcGlubG9ja3MgYXJlCitpbmRleGVkIGludG8gYmFzZWQgdXBvbiB0aGUgYWRkcmVzcyBvZiB0aGUgYXRvbWljX3QgYmVpbmcgb3BlcmF0ZWQKK29uLCBhbmQgdGhhdCBsb2NrIHByb3RlY3RzIHRoZSBhdG9taWMgb3BlcmF0aW9uLiAgUGFyaXNjIHVzZXMgdGhlCitzYW1lIHNjaGVtZS4KKworQW5vdGhlciBub3RlIGlzIHRoYXQgdGhlIGF0b21pY190IG9wZXJhdGlvbnMgcmV0dXJuaW5nIHZhbHVlcyBhcmUKK2V4dHJlbWVseSBzbG93IG9uIGFuIG9sZCAzODYuCisKK1dlIHdpbGwgbm93IGNvdmVyIHRoZSBhdG9taWMgYml0bWFzayBvcGVyYXRpb25zLiAgWW91IHdpbGwgZmluZCB0aGF0Cit0aGVpciBTTVAgYW5kIG1lbW9yeSBiYXJyaWVyIHNlbWFudGljcyBhcmUgc2ltaWxhciBpbiBzaGFwZSBhbmQgc2NvcGUKK3RvIHRoZSBhdG9taWNfdCBvcHMgYWJvdmUuCisKK05hdGl2ZSBhdG9taWMgYml0IG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgdG8gb3BlcmF0ZSBvbiBvYmplY3RzIGFsaWduZWQKK3RvIHRoZSBzaXplIG9mIGFuICJ1bnNpZ25lZCBsb25nIiBDIGRhdGEgdHlwZSwgYW5kIGFyZSBsZWFzdCBvZiB0aGF0CitzaXplLiAgVGhlIGVuZGlhbm5lc3Mgb2YgdGhlIGJpdHMgd2l0aGluIGVhY2ggInVuc2lnbmVkIGxvbmciIGFyZSB0aGUKK25hdGl2ZSBlbmRpYW5uZXNzIG9mIHRoZSBjcHUuCisKKwl2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbHMgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJdm9pZCBjbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbHMgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJdm9pZCBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxzIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCitUaGVzZSByb3V0aW5lcyBzZXQsIGNsZWFyLCBhbmQgY2hhbmdlLCByZXNwZWN0aXZlbHksIHRoZSBiaXQgbnVtYmVyCitpbmRpY2F0ZWQgYnkgIm5yIiBvbiB0aGUgYml0IG1hc2sgcG9pbnRlZCB0byBieSAiQUREUiIuCisKK1RoZXkgbXVzdCBleGVjdXRlIGF0b21pY2FsbHksIHlldCB0aGVyZSBhcmUgbm8gaW1wbGljaXQgbWVtb3J5IGJhcnJpZXIKK3NlbWFudGljcyByZXF1aXJlZCBvZiB0aGVzZSBpbnRlcmZhY2VzLgorCisJaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbHMgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJaW50IHRlc3RfYW5kX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlscyB1bnNpZ25lZCBsb25nICphZGRyKTsKKwlpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlscyB1bnNpZ25lZCBsb25nICphZGRyKTsKKworTGlrZSB0aGUgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZXNlIHJvdXRpbmVzIHJldHVybiBhIGJvb2xlYW4gd2hpY2gKK2luZGljYXRlcyB3aGV0aGVyIHRoZSBjaGFuZ2VkIGJpdCB3YXMgc2V0IF9CRUZPUkVfIHRoZSBhdG9taWMgYml0CitvcGVyYXRpb24uCisKK1dBUk5JTkchIEl0IGlzIGluY3JlZGlibHkgaW1wb3J0YW50IHRoYXQgdGhlIHZhbHVlIGJlIGEgYm9vbGVhbiwKK2llLiAiMCIgb3IgIjEiLiAgRG8gbm90IHRyeSB0byBiZSBmYW5jeSBhbmQgc2F2ZSBhIGZldyBpbnN0cnVjdGlvbnMgYnkKK2RlY2xhcmluZyB0aGUgYWJvdmUgdG8gcmV0dXJuICJsb25nIiBhbmQganVzdCByZXR1cm5pbmcgc29tZXRoaW5nIGxpa2UKKyJvbGRfdmFsICYgbWFzayIgYmVjYXVzZSB0aGF0IHdpbGwgbm90IHdvcmsuCisKK0ZvciBvbmUgdGhpbmcsIHRoaXMgcmV0dXJuIHZhbHVlIGdldHMgdHJ1bmNhdGVkIHRvIGludCBpbiBtYW55IGNvZGUKK3BhdGhzIHVzaW5nIHRoZXNlIGludGVyZmFjZXMsIHNvIG9uIDY0LWJpdCBpZiB0aGUgYml0IGlzIHNldCBpbiB0aGUKK3VwcGVyIDMyLWJpdHMgdGhlbiB0ZXN0ZXJzIHdpbGwgbmV2ZXIgc2VlIHRoYXQuCisKK09uZSBncmVhdCBleGFtcGxlIG9mIHdoZXJlIHRoaXMgcHJvYmxlbSBjcm9wcyB1cCBhcmUgdGhlIHRocmVhZF9pbmZvCitmbGFnIG9wZXJhdGlvbnMuICBSb3V0aW5lcyBzdWNoIGFzIHRlc3RfYW5kX3NldF90aV90aHJlYWRfZmxhZygpIGNob3AKK3RoZSByZXR1cm4gdmFsdWUgaW50byBhbiBpbnQuICBUaGVyZSBhcmUgb3RoZXIgcGxhY2VzIHdoZXJlIHRoaW5ncworbGlrZSB0aGlzIG9jY3VyIGFzIHdlbGwuCisKK1RoZXNlIHJvdXRpbmVzLCBsaWtlIHRoZSBhdG9taWNfdCBjb3VudGVyIG9wZXJhdGlvbnMgcmV0dXJuaW5nIHZhbHVlcywKK3JlcXVpcmUgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGFyb3VuZCB0aGVpciBleGVjdXRpb24uICBBbGwKK21lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGUgYXRvbWljIGJpdCBvcGVyYXRpb24gY2FsbCBtdXN0IGJlIG1hZGUKK3Zpc2libGUgZ2xvYmFsbHkgYmVmb3JlIHRoZSBhdG9taWMgYml0IG9wZXJhdGlvbiBpcyBtYWRlIHZpc2libGUuCitMaWtld2lzZSwgdGhlIGF0b21pYyBiaXQgb3BlcmF0aW9uIG11c3QgYmUgdmlzaWJsZSBnbG9iYWxseSBiZWZvcmUgYW55CitzdWJzZXF1ZW50IG1lbW9yeSBvcGVyYXRpb24gaXMgbWFkZSB2aXNpYmxlLiAgRm9yIGV4YW1wbGU6CisKKwlvYmotPmRlYWQgPSAxOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZvYmotPmZsYWdzKSkKKwkJLyogLi4uICovOworCW9iai0+a2lsbGVkID0gMTsKKworVGhlIGltcGxlbWVudGF0aW9uIG9mIHRlc3RfYW5kX3NldF9iaXQoKSBtdXN0IGd1YXJlbnRlZSB0aGF0Cisib2JqLT5kZWFkID0gMTsiIGlzIHZpc2libGUgdG8gY3B1cyBiZWZvcmUgdGhlIGF0b21pYyBtZW1vcnkgb3BlcmF0aW9uCitkb25lIGJ5IHRlc3RfYW5kX3NldF9iaXQoKSBiZWNvbWVzIHZpc2libGUuICBMaWtld2lzZSwgdGhlIGF0b21pYworbWVtb3J5IG9wZXJhdGlvbiBkb25lIGJ5IHRlc3RfYW5kX3NldF9iaXQoKSBtdXN0IGJlY29tZSB2aXNpYmxlIGJlZm9yZQorIm9iai0+a2lsbGVkID0gMTsiIGlzIHZpc2libGUuCisKK0ZpbmFsbHkgdGhlcmUgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbjoKKworCWludCB0ZXN0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCBfX2NvbnN0X18gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CisKK1doaWNoIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgYml0ICJuciIgaXMgc2V0IGluIHRoZSBiaXRtYXNrCitwb2ludGVkIHRvIGJ5ICJhZGRyIi4KKworSWYgZXhwbGljaXQgbWVtb3J5IGJhcnJpZXJzIGFyZSByZXF1aXJlZCBhcm91bmQgY2xlYXJfYml0KCkgKHdoaWNoCitkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSwgYW5kIHRodXMgZG9lcyBub3QgbmVlZCB0byBwcm92aWRlIG1lbW9yeQorYmFycmllciBzZW1hbnRpY3MpLCB0d28gaW50ZXJmYWNlcyBhcmUgcHJvdmlkZWQ6CisKKwl2b2lkIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCh2b2lkKTsKKwl2b2lkIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KHZvaWQpOworCitUaGV5IGFyZSB1c2VkIGFzIGZvbGxvd3MsIGFuZCBhcmUgYWtpbiB0byB0aGVpciBhdG9taWNfdCBvcGVyYXRpb24KK2Jyb3RoZXJzOgorCisJLyogQWxsIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGlzIGNhbGwgd2lsbAorCSAqIGJlIGdsb2JhbGx5IHZpc2libGUgYmVmb3JlIHRoZSBjbGVhcl9iaXQoKS4KKwkgKi8KKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoIC4uLiApOworCisJLyogVGhlIGNsZWFyX2JpdCgpIHdpbGwgYmUgdmlzaWJsZSBiZWZvcmUgYWxsCisJICogc3Vic2VxdWVudCBtZW1vcnkgb3BlcmF0aW9ucy4KKwkgKi8KKwkgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworRmluYWxseSwgdGhlcmUgYXJlIG5vbi1hdG9taWMgdmVyc2lvbnMgb2YgdGhlIGJpdG1hc2sgb3BlcmF0aW9ucworcHJvdmlkZWQuICBUaGV5IGFyZSB1c2VkIGluIGNvbnRleHRzIHdoZXJlIHNvbWUgb3RoZXIgaGlnaGVyLWxldmVsIFNNUAorbG9ja2luZyBzY2hlbWUgaXMgYmVpbmcgdXNlZCB0byBwcm90ZWN0IHRoZSBiaXRtYXNrLCBhbmQgdGh1cyBsZXNzCitleHBlbnNpdmUgbm9uLWF0b21pYyBvcGVyYXRpb25zIG1heSBiZSB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KK1RoZXkgaGF2ZSBuYW1lcyBzaW1pbGFyIHRvIHRoZSBhYm92ZSBiaXRtYXNrIG9wZXJhdGlvbiBpbnRlcmZhY2VzLAorZXhjZXB0IHRoYXQgdHdvIHVuZGVyc2NvcmVzIGFyZSBwcmVmaXhlZCB0byB0aGUgaW50ZXJmYWNlIG5hbWUuCisKKwl2b2lkIF9fc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKTsKKwl2b2lkIF9fY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCXZvaWQgX19jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCWludCBfX3Rlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CisJaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCWludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcik7CisKK1RoZXNlIG5vbi1hdG9taWMgdmFyaWFudHMgYWxzbyBkbyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBtZW1vcnkKK2JhcnJpZXIgc2VtYW50aWNzLgorCitUaGUgcm91dGluZXMgeGNoZygpIGFuZCBjbXB4Y2hnKCkgbmVlZCB0aGUgc2FtZSBleGFjdCBtZW1vcnkgYmFycmllcnMKK2FzIHRoZSBhdG9taWMgYW5kIGJpdCBvcGVyYXRpb25zIHJldHVybmluZyB2YWx1ZXMuCisKK1NwaW5sb2NrcyBhbmQgcndsb2NrcyBoYXZlIG1lbW9yeSBiYXJyaWVyIGV4cGVjdGF0aW9ucyBhcyB3ZWxsLgorVGhlIHJ1bGUgdG8gZm9sbG93IGlzIHNpbXBsZToKKworMSkgV2hlbiBhY3F1aXJpbmcgYSBsb2NrLCB0aGUgaW1wbGVtZW50YXRpb24gbXVzdCBtYWtlIGl0IGdsb2JhbGx5CisgICB2aXNpYmxlIGJlZm9yZSBhbnkgc3Vic2VxdWVudCBtZW1vcnkgb3BlcmF0aW9uLgorCisyKSBXaGVuIHJlbGVhc2luZyBhIGxvY2ssIHRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IG1ha2UgaXQgc3VjaCB0aGF0CisgICBhbGwgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIGdsb2JhbGx5IHZpc2libGUgYmVmb3JlIHRoZQorICAgbG9jayByZWxlYXNlLgorCitXaGljaCBmaW5hbGx5IGJyaW5ncyB1cyB0byBfYXRvbWljX2RlY19hbmRfbG9jaygpLiAgVGhlcmUgaXMgYW4KK2FyY2hpdGVjdHVyZS1uZXV0cmFsIHZlcnNpb24gaW1wbGVtZW50ZWQgaW4gbGliL2RlY19hbmRfbG9jay5jLAorYnV0IG1vc3QgcGxhdGZvcm1zIHdpbGwgd2lzaCB0byBvcHRpbWl6ZSB0aGlzIGluIGFzc2VtYmxlci4KKworCWludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKTsKKworQXRvbWljYWxseSBkZWNyZW1lbnQgdGhlIGdpdmVuIGNvdW50ZXIsIGFuZCBpZiB3aWxsIGRyb3AgdG8gemVybworYXRvbWljYWxseSBhY3F1aXJlIHRoZSBnaXZlbiBzcGlubG9jayBhbmQgcGVyZm9ybSB0aGUgZGVjcmVtZW50CitvZiB0aGUgY291bnRlciB0byB6ZXJvLiAgSWYgaXQgZG9lcyBub3QgZHJvcCB0byB6ZXJvLCBkbyBub3RoaW5nCit3aXRoIHRoZSBzcGlubG9jay4KKworSXQgaXMgYWN0dWFsbHkgcHJldHR5IHNpbXBsZSB0byBnZXQgdGhlIG1lbW9yeSBiYXJyaWVyIGNvcnJlY3QuCitTaW1wbHkgc2F0aXNmeSB0aGUgc3BpbmxvY2sgZ3JhYiByZXF1aXJlbWVudHMsIHdoaWNoIGlzIG1ha2UKK3N1cmUgdGhlIHNwaW5sb2NrIG9wZXJhdGlvbiBpcyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZSBhbnkKK3N1YnNlcXVlbnQgbWVtb3J5IG9wZXJhdGlvbi4KKworV2UgY2FuIGRlbW9uc3RyYXRlIHRoaXMgb3BlcmF0aW9uIG1vcmUgY2xlYXJseSBpZiB3ZSBkZWZpbmUKK2FuIGFic3RyYWN0IGF0b21pYyBvcGVyYXRpb246CisKKwlsb25nIGNhcyhsb25nICptZW0sIGxvbmcgb2xkLCBsb25nIG5ldyk7CisKKyJjYXMiIHN0YW5kcyBmb3IgImNvbXBhcmUgYW5kIHN3YXAiLiAgSXQgYXRvbWljYWxseToKKworMSkgQ29tcGFyZXMgIm9sZCIgd2l0aCB0aGUgdmFsdWUgY3VycmVudGx5IGF0ICJtZW0iLgorMikgSWYgdGhleSBhcmUgZXF1YWwsICJuZXciIGlzIHdyaXR0ZW4gdG8gIm1lbSIuCiszKSBSZWdhcmRsZXNzLCB0aGUgY3VycmVudCB2YWx1ZSBhdCAibWVtIiBpcyByZXR1cm5lZC4KKworQXMgYW4gZXhhbXBsZSB1c2FnZSwgaGVyZSBpcyB3aGF0IGFuIGF0b21pYyBjb3VudGVyIHVwZGF0ZQorbWlnaHQgbG9vayBsaWtlOgorCit2b2lkIGV4YW1wbGVfYXRvbWljX2luYyhsb25nICpjb3VudGVyKQoreworCWxvbmcgb2xkLCBuZXcsIHJldDsKKworCXdoaWxlICgxKSB7CisJCW9sZCA9ICpjb3VudGVyOworCQluZXcgPSBvbGQgKyAxOworCisJCXJldCA9IGNhcyhjb3VudGVyLCBvbGQsIG5ldyk7CisJCWlmIChyZXQgPT0gb2xkKQorCQkJYnJlYWs7CisJfQorfQorCitMZXQncyB1c2UgY2FzKCkgaW4gb3JkZXIgdG8gYnVpbGQgYSBwc2V1ZG8tQyBhdG9taWNfZGVjX2FuZF9sb2NrKCk6CisKK2ludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKQoreworCWxvbmcgb2xkLCBuZXcsIHJldDsKKwlpbnQgd2VudF90b196ZXJvOworCisJd2VudF90b196ZXJvID0gMDsKKwl3aGlsZSAoMSkgeworCQlvbGQgPSBhdG9taWNfcmVhZChhdG9taWMpOworCQluZXcgPSBvbGQgLSAxOworCQlpZiAobmV3ID09IDApIHsKKwkJCXdlbnRfdG9femVybyA9IDE7CisJCQlzcGluX2xvY2sobG9jayk7CisJCX0KKwkJcmV0ID0gY2FzKGF0b21pYywgb2xkLCBuZXcpOworCQlpZiAocmV0ID09IG9sZCkKKwkJCWJyZWFrOworCQlpZiAod2VudF90b196ZXJvKSB7CisJCQlzcGluX3VubG9jayhsb2NrKTsKKwkJCXdlbnRfdG9femVybyA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gd2VudF90b196ZXJvOworfQorCitOb3csIGFzIGZhciBhcyBtZW1vcnkgYmFycmllcnMgZ28sIGFzIGxvbmcgYXMgc3Bpbl9sb2NrKCkKK3N0cmljdGx5IG9yZGVycyBhbGwgc3Vic2VxdWVudCBtZW1vcnkgb3BlcmF0aW9ucyAoaW5jbHVkaW5nCit0aGUgY2FzKCkpIHdpdGggcmVzcGVjdCB0byBpdHNlbGYsIHRoaW5ncyB3aWxsIGJlIGZpbmUuCisKK1NhaWQgYW5vdGhlciB3YXksIF9hdG9taWNfZGVjX2FuZF9sb2NrKCkgbXVzdCBndWFyZW50ZWUgdGhhdAorYSBjb3VudGVyIGRyb3BwaW5nIHRvIHplcm8gaXMgbmV2ZXIgbWFkZSB2aXNpYmxlIGJlZm9yZSB0aGUKK3NwaW5sb2NrIGJlaW5nIGFjcXVpcmVkLgorCitOb3RlIHRoYXQgdGhpcyBhbHNvIG1lYW5zIHRoYXQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBjb3VudGVyCitpcyBub3QgZHJvcHBpbmcgdG8gemVybywgdGhlcmUgYXJlIG5vIG1lbW9yeSBvcmRlcmluZworcmVxdWlyZW1lbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9iYXNpY19wcm9maWxpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9iYXNpY19wcm9maWxpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTNkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jhc2ljX3Byb2ZpbGluZy50eHQKQEAgLTAsMCArMSw1MiBAQAorVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBkZWxpYmVyYXRlbHkgdmVyeSBiYXNpYy4gSWYgeW91IHdhbnQgc29tZXRoaW5nIGNsZXZlciwKK2dvIHJlYWQgdGhlIHJlYWwgZG9jcyA7LSkgUGxlYXNlIGRvbid0IGFkZCBtb3JlIHN0dWZmLCBidXQgZmVlbCBmcmVlIHRvIAorY29ycmVjdCBteSBtaXN0YWtlcyA7LSkgICAgKG1ibGlnaEBhcmFjbmV0LmNvbSkKK1RoYW5rcyB0byBKb2huIExldm9uLCBEYXZlIEhhbnNlbiwgZXQgYWwuIGZvciBoZWxwIHdyaXRpbmcgdGhpcy4KKworPHRlc3Q+IGlzIHRoZSB0aGluZyB5b3UncmUgdHJ5aW5nIHRvIG1lYXN1cmUuCitNYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgU3lzdGVtLm1hcCAvIHZtbGludXggcmVmZXJlbmNlZCEKKworSXQgaXMgcHJvYmFibHkgZWFzaWVzdCB0byB1c2UgIm1ha2UgaW5zdGFsbCIgZm9yIGxpbnV4IGFuZCBoYWNrCisvc2Jpbi9pbnN0YWxsa2VybmVsIHRvIGNvcHkgdm1saW51eCB0byAvYm9vdCwgaW4gYWRkaXRpb24gdG8gdm1saW51eiwKK2NvbmZpZywgU3lzdGVtLm1hcCwgd2hpY2ggYXJlIHVzdWFsbHkgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCisKK1JlYWRwcm9maWxlCistLS0tLS0tLS0tLQorQSByZWNlbnQgcmVhZHByb2ZpbGUgY29tbWFuZCBpcyBuZWVkZWQgZm9yIDIuNiwgc3VjaCBhcyBmb3VuZCBpbiB1dGlsLWxpbnV4CisyLjEyYSwgd2hpY2ggY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKworaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4LworCitNb3N0IGRpc3RyaWJ1dGlvbnMgd2lsbCBzaGlwIGl0IGFscmVhZHkuCisKK0FkZCAicHJvZmlsZT0yIiB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworY2xlYXIJCXJlYWRwcm9maWxlIC1yCisJCTx0ZXN0PgorZHVtcCBvdXRwdXQJcmVhZHByb2ZpbGUgLW0gL2Jvb3QvU3lzdGVtLm1hcCA+IGNhcHR1cmVkX3Byb2ZpbGUKKworT3Byb2ZpbGUKKy0tLS0tLS0tCitHZXQgdGhlIHNvdXJjZSAoSSB1c2UgMC44KSBmcm9tIGh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvCithbmQgYWRkICJpZGxlPXBvbGwiIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCitDb25maWd1cmUgd2l0aCBDT05GSUdfUFJPRklMSU5HPXkgYW5kIENPTkZJR19PUFJPRklMRT15ICYgcmVib290IG9uIG5ldyBrZXJuZWwKKy4vY29uZmlndXJlIC0td2l0aC1rZXJuZWwtc3VwcG9ydAorbWFrZSBpbnN0YWxsCisKK0ZvciBzdXBlcmlvciByZXN1bHRzLCBiZSBzdXJlIHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQy4gSWYgb3ByZXBvcnQgc2VlcworYSAwSHogQ1BVLCBBUElDIHdhcyBub3Qgb24uIEJlIGF3YXJlIHRoYXQgaWRsZT1wb2xsIG1heSBtZWFuIGEgcGVyZm9ybWFuY2UKK3BlbmFsdHkuCisKK09uZSB0aW1lIHNldHVwOgorCQlvcGNvbnRyb2wgLS1zZXR1cCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eAorCitjbGVhcgkJb3Bjb250cm9sIC0tcmVzZXQKK3N0YXJ0CQlvcGNvbnRyb2wgLS1zdGFydAorCQk8dGVzdD4KK3N0b3AJCW9wY29udHJvbCAtLXN0b3AKK2R1bXAgb3V0cHV0CW9wcmVwb3J0ID4gIG91dHB1dF9maWxlCisKK1RvIG9ubHkgcmVwb3J0IG9uIHRoZSBrZXJuZWwsIHJ1biBvcHJlcG9ydCAvYm9vdC92bWxpbnV4ID4gb3V0cHV0X2ZpbGUKKworQSByZXNldCBpcyBuZWVkZWQgdG8gY2xlYXIgb2xkIHN0YXRpc3RpY3MsIHdoaWNoIHN1cnZpdmUgYSByZWJvb3QuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5N2YwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0CkBAIC0wLDAgKzEsMTE2IEBACisgICAgIEtlcm5lbCBTdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzICh5b3VyIGZhdm91cml0ZSkgQmluYXJ5IEZvcm1hdHMgdjEuMQorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBLZXJuZWwgZmVhdHVyZSBhbGxvd3MgeW91IHRvIGludm9rZSBhbG1vc3QgKGZvciByZXN0cmljdGlvbnMgc2VlIGJlbG93KQorZXZlcnkgcHJvZ3JhbSBieSBzaW1wbHkgdHlwaW5nIGl0cyBuYW1lIGluIHRoZSBzaGVsbC4KK1RoaXMgaW5jbHVkZXMgZm9yIGV4YW1wbGUgY29tcGlsZWQgSmF2YShUTSksIFB5dGhvbiBvciBFbWFjcyBwcm9ncmFtcy4KKworVG8gYWNoaWV2ZSB0aGlzIHlvdSBtdXN0IHRlbGwgYmluZm10X21pc2Mgd2hpY2ggaW50ZXJwcmV0ZXIgaGFzIHRvIGJlIGludm9rZWQKK3dpdGggd2hpY2ggYmluYXJ5LiBCaW5mbXRfbWlzYyByZWNvZ25pc2VzIHRoZSBiaW5hcnktdHlwZSBieSBtYXRjaGluZyBzb21lIGJ5dGVzCithdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHdpdGggYSBtYWdpYyBieXRlIHNlcXVlbmNlIChtYXNraW5nIG91dCBzcGVjaWZpZWQKK2JpdHMpIHlvdSBoYXZlIHN1cHBsaWVkLiBCaW5mbXRfbWlzYyBjYW4gYWxzbyByZWNvZ25pc2UgYSBmaWxlbmFtZSBleHRlbnNpb24KK2FrYSAnLmNvbScgb3IgJy5leGUnLgorCitGaXJzdCB5b3UgbXVzdCBtb3VudCBiaW5mbXRfbWlzYzoKKwltb3VudCBiaW5mbXRfbWlzYyAtdCBiaW5mbXRfbWlzYyAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgCisKK1RvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlCis6bmFtZTp0eXBlOm9mZnNldDptYWdpYzptYXNrOmludGVycHJldGVyOmZsYWdzICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGUgJzonIHVwb24KK3lvdXIgbmVlZHMpIGFuZCBlY2hvIGl0IHRvIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3Rlci4KK0hlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46CisgLSAnbmFtZScgaXMgYW4gaWRlbnRpZmllciBzdHJpbmcuIEEgbmV3IC9wcm9jIGZpbGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhpcworICAgbmFtZSBiZWxvdyAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MKKyAtICd0eXBlJyBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSAnTScgZm9yIG1hZ2ljIGFuZCAnRScgZm9yIGV4dGVuc2lvbi4KKyAtICdvZmZzZXQnIGlzIHRoZSBvZmZzZXQgb2YgdGhlIG1hZ2ljL21hc2sgaW4gdGhlIGZpbGUsIGNvdW50ZWQgaW4gYnl0ZXMuIFRoaXMKKyAgIGRlZmF1bHRzIHRvIDAgaWYgeW91IG9taXQgaXQgKGkuZS4geW91IHdyaXRlICc6bmFtZTp0eXBlOjptYWdpYy4uLicpCisgLSAnbWFnaWMnIGlzIHRoZSBieXRlIHNlcXVlbmNlIGJpbmZtdF9taXNjIGlzIG1hdGNoaW5nIGZvci4gVGhlIG1hZ2ljIHN0cmluZworICAgbWF5IGNvbnRhaW4gaGV4LWVuY29kZWQgY2hhcmFjdGVycyBsaWtlIFx4MGEgb3IgXHhBNC4gSW4gYSBzaGVsbCBlbnZpcm9ubWVudAorICAgeW91IHdpbGwgaGF2ZSB0byB3cml0ZSBcXHgwYSB0byBwcmV2ZW50IHRoZSBzaGVsbCBmcm9tIGVhdGluZyB5b3VyIFwuCisgICBJZiB5b3UgY2hvc2UgZmlsZW5hbWUgZXh0ZW5zaW9uIG1hdGNoaW5nLCB0aGlzIGlzIHRoZSBleHRlbnNpb24gdG8gYmUKKyAgIHJlY29nbmlzZWQgKHdpdGhvdXQgdGhlICcuJywgdGhlIFx4MGEgc3BlY2lhbHMgYXJlIG5vdCBhbGxvd2VkKS4gRXh0ZW5zaW9uCisgICBtYXRjaGluZyBpcyBjYXNlIHNlbnNpdGl2ZSEKKyAtICdtYXNrJyBpcyBhbiAob3B0aW9uYWwsIGRlZmF1bHRzIHRvIGFsbCAweGZmKSBtYXNrLiBZb3UgY2FuIG1hc2sgb3V0IHNvbWUKKyAgIGJpdHMgZnJvbSBtYXRjaGluZyBieSBzdXBwbHlpbmcgYSBzdHJpbmcgbGlrZSBtYWdpYyBhbmQgYXMgbG9uZyBhcyBtYWdpYy4KKyAgIFRoZSBtYXNrIGlzIGFuZGVkIHdpdGggdGhlIGJ5dGUgc2VxdWVuY2Ugb2YgdGhlIGZpbGUuCisgLSAnaW50ZXJwcmV0ZXInIGlzIHRoZSBwcm9ncmFtIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgd2l0aCB0aGUgYmluYXJ5IGFzIGZpcnN0CisgICBhcmd1bWVudCAoc3BlY2lmeSB0aGUgZnVsbCBwYXRoKQorIC0gJ2ZsYWdzJyBpcyBhbiBvcHRpb25hbCBmaWVsZCB0aGF0IGNvbnRyb2xzIHNldmVyYWwgYXNwZWN0cyBvZiB0aGUgaW52b2NhdGlvbgorICAgb2YgdGhlIGludGVycHJldGVyLiBJdCBpcyBhIHN0cmluZyBvZiBjYXBpdGFsIGxldHRlcnMsIGVhY2ggY29udHJvbHMgYSBjZXJ0YWluCisgICBhc3BlY3QuIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHN1cHBvcnRlZCAtCisgICAgICAnUCcgLSBwcmVzZXJ2ZS1hcmd2WzBdLiAgTGVnYWN5IGJlaGF2aW9yIG9mIGJpbmZtdF9taXNjIGlzIHRvIG92ZXJ3cml0ZSB0aGUKKyAgICAgICAgICAgIG9yaWdpbmFsIGFyZ3ZbMF0gd2l0aCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBiaW5hcnkuICBXaGVuIHRoaXMgZmxhZyBpcworICAgICAgICAgICAgaW5jbHVkZWQsIGJpbmZtdF9taXNjIHdpbGwgYWRkIGFuIGFyZ3VtZW50IHRvIHRoZSBhcmd1bWVudCB2ZWN0b3IgZm9yCisgICAgICAgICAgICB0aGlzIHB1cnBvc2UsIHRodXMgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgYXJndlswXS4KKyAgICAgICdPJyAtIG9wZW4tYmluYXJ5LiBMZWdhY3kgYmVoYXZpb3Igb2YgYmluZm10X21pc2MgaXMgdG8gcGFzcyB0aGUgZnVsbCBwYXRoCisgICAgICAgICAgICBvZiB0aGUgYmluYXJ5IHRvIHRoZSBpbnRlcnByZXRlciBhcyBhbiBhcmd1bWVudC4gV2hlbiB0aGlzIGZsYWcgaXMKKyAgICAgICAgICAgIGluY2x1ZGVkLCBiaW5mbXRfbWlzYyB3aWxsIG9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcgYW5kIHBhc3MgaXRzCisgICAgICAgICAgICBkZXNjcmlwdG9yIGFzIGFuIGFyZ3VtZW50LCBpbnN0ZWFkIG9mIHRoZSBmdWxsIHBhdGgsIHRodXMgYWxsb3dpbmcKKyAgICAgICAgICAgIHRoZSBpbnRlcnByZXRlciB0byBleGVjdXRlIG5vbi1yZWFkYWJsZSBiaW5hcmllcy4gVGhpcyBmZWF0dXJlIHNob3VsZAorICAgICAgICAgICAgYmUgdXNlZCB3aXRoIGNhcmUgLSB0aGUgaW50ZXJwcmV0ZXIgaGFzIHRvIGJlIHRydXN0ZWQgbm90IHRvIGVtaXQKKyAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgbm9uLXJlYWRhYmxlIGJpbmFyeS4KKyAgICAgICdDJyAtIGNyZWRlbnRpYWxzLiBDdXJyZW50bHksIHRoZSBiZWhhdmlvciBvZiBiaW5mbXRfbWlzYyBpcyB0byBjYWxjdWxhdGUKKyAgICAgICAgICAgIHRoZSBjcmVkZW50aWFscyBhbmQgc2VjdXJpdHkgdG9rZW4gb2YgdGhlIG5ldyBwcm9jZXNzIGFjY29yZGluZyB0bworICAgICAgICAgICAgdGhlIGludGVycHJldGVyLiBXaGVuIHRoaXMgZmxhZyBpcyBpbmNsdWRlZCwgdGhlc2UgYXR0cmlidXRlcyBhcmUKKyAgICAgICAgICAgIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBiaW5hcnkuIEl0IGFsc28gaW1wbGllcyB0aGUgJ08nIGZsYWcuCisgICAgICAgICAgICBUaGlzIGZlYXR1cmUgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlIGFzIHRoZSBpbnRlcnByZXRlcgorICAgICAgICAgICAgd2lsbCBydW4gd2l0aCByb290IHBlcm1pc3Npb25zIHdoZW4gYSBzZXR1aWQgYmluYXJ5IG93bmVkIGJ5IHJvb3QKKyAgICAgICAgICAgIGlzIHJ1biB3aXRoIGJpbmZtdF9taXNjLgorCisKK1RoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczoKKyAtIHRoZSB3aG9sZSByZWdpc3RlciBzdHJpbmcgbWF5IG5vdCBleGNlZWQgMjU1IGNoYXJhY3RlcnMKKyAtIHRoZSBtYWdpYyBtdXN0IHJlc2lkZSBpbiB0aGUgZmlyc3QgMTI4IGJ5dGVzIG9mIHRoZSBmaWxlLCBpLmUuCisgICBvZmZzZXQrc2l6ZShtYWdpYykgaGFzIHRvIGJlIGxlc3MgdGhhbiAxMjgKKyAtIHRoZSBpbnRlcnByZXRlciBzdHJpbmcgbWF5IG5vdCBleGNlZWQgMTI3IGNoYXJhY3RlcnMKKworVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGgKKyJtb3VudCAtdCBiaW5mbXRfbWlzYyBub25lIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyIgY29tbWFuZCwgb3IgeW91IGNhbiBhZGQKK2EgbGluZSAibm9uZSAgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGJpbmZtdF9taXNjIGRlZmF1bHRzIDAgMCIgdG8geW91cgorL2V0Yy9mc3RhYiBzbyBpdCBhdXRvIG1vdW50cyBvbiBib290LgorCitZb3UgbWF5IHdhbnQgdG8gYWRkIHRoZSBiaW5hcnkgZm9ybWF0cyBpbiBvbmUgb2YgeW91ciAvZXRjL3JjIHNjcmlwdHMgZHVyaW5nCitib290LXVwLiBSZWFkIHRoZSBtYW51YWwgb2YgeW91ciBpbml0IHByb2dyYW0gdG8gZmlndXJlIG91dCBob3cgdG8gZG8gdGhpcworcmlnaHQuCisKK1RoaW5rIGFib3V0IHRoZSBvcmRlciBvZiBhZGRpbmcgZW50cmllcyEgTGF0ZXIgYWRkZWQgZW50cmllcyBhcmUgbWF0Y2hlZCBmaXJzdCEKKworCitBIGZldyBleGFtcGxlcyAoYXNzdW1lZCB5b3UgYXJlIGluIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyk6CisKKy0gZW5hYmxlIHN1cHBvcnQgZm9yIGVtODYgKGxpa2UgYmluZm10X2VtODYsIGZvciBBbHBoYSBBWFAgb25seSk6CisgIGVjaG8gJzppMzg2Ok06Olx4N2ZFTEZceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDM6XHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZlXHhmZVx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmJceGZmXHhmZjovYmluL2VtODY6JyA+IHJlZ2lzdGVyCisgIGVjaG8gJzppNDg2Ok06Olx4N2ZFTEZceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDY6XHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZlXHhmZVx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmJceGZmXHhmZjovYmluL2VtODY6JyA+IHJlZ2lzdGVyCisKKy0gZW5hYmxlIHN1cHBvcnQgZm9yIHBhY2tlZCBET1MgYXBwbGljYXRpb25zIChwcmUtY29uZmlndXJlZCBkb3NlbXUgaGRpbWFnZXMpOgorICBlY2hvICc6REVYRTpNOjpceDBlREVYOjovdXNyL2Jpbi9kb3NleGVjOicgPiByZWdpc3RlcgorCistIGVuYWJsZSBzdXBwb3J0IGZvciBXaW5kb3dzIGV4ZWN1dGFibGVzIHVzaW5nIHdpbmU6CisgIGVjaG8gJzpET1NXaW46TTo6TVo6Oi91c3IvbG9jYWwvYmluL3dpbmU6JyA+IHJlZ2lzdGVyCisKK0ZvciBqYXZhIHN1cHBvcnQgc2VlIERvY3VtZW50YXRpb24vamF2YS50eHQKKworCitZb3UgY2FuIGVuYWJsZS9kaXNhYmxlIGJpbmZtdF9taXNjIG9yIG9uZSBiaW5hcnkgdHlwZSBieSBlY2hvaW5nIDAgKHRvIGRpc2FibGUpCitvciAxICh0byBlbmFibGUpIHRvIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9zdGF0dXMgb3IgL3Byb2MvLi4uL3RoZV9uYW1lLgorQ2F0dGluZyB0aGUgZmlsZSB0ZWxscyB5b3UgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIGJpbmZtdF9taXNjL3RoZSBlbnRyeS4KKworWW91IGNhbiByZW1vdmUgb25lIGVudHJ5IG9yIGFsbCBlbnRyaWVzIGJ5IGVjaG9pbmcgLTEgdG8gL3Byb2MvLi4uL3RoZV9uYW1lCitvciAvcHJvYy9zeXMvZnMvYmluZm10X21pc2Mvc3RhdHVzLgorCisKK0hJTlRTOgorPT09PT09CisKK0lmIHlvdSB3YW50IHRvIHBhc3Mgc3BlY2lhbCBhcmd1bWVudHMgdG8geW91ciBpbnRlcnByZXRlciwgeW91IGNhbgord3JpdGUgYSB3cmFwcGVyIHNjcmlwdCBmb3IgaXQuIFNlZSBEb2N1bWVudGF0aW9uL2phdmEudHh0IGZvciBhbgorZXhhbXBsZS4KKworWW91ciBpbnRlcnByZXRlciBzaG91bGQgTk9UIGxvb2sgaW4gdGhlIFBBVEggZm9yIHRoZSBmaWxlbmFtZTsgdGhlIGtlcm5lbAorcGFzc2VzIGl0IHRoZSBmdWxsIGZpbGVuYW1lIChvciB0aGUgZmlsZSBkZXNjcmlwdG9yKSB0byB1c2UuICBVc2luZyAkUEFUSCBjYW4KK2NhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIGFuZCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQuCisKKworVGhlcmUgaXMgYSB3ZWIgcGFnZSBhYm91dCBiaW5mbXRfbWlzYyBhdAoraHR0cDovL3d3dy50YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUvfnJndWVudGgvbGludXgvYmluZm10X21pc2MuaHRtbAorCitSaWNoYXJkIEf8bnRoZXIgPHJndWVudGhAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NzMzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQKQEAgLTAsMCArMSwxNjUgQEAKK0FudGljaXBhdG9yeSBJTyBzY2hlZHVsZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05pY2sgUGlnZ2luIDxwaWdnaW5AY3liZXJvbmUuY29tLmF1PiAgICAxMyBTZXAgMjAwMworCitBdHRlbnRpb24hIERhdGFiYXNlIHNlcnZlcnMsIGVzcGVjaWFsbHkgdGhvc2UgdXNpbmcgIlRDUSIgZGlza3Mgc2hvdWxkCitpbnZlc3RpZ2F0ZSBwZXJmb3JtYW5jZSB3aXRoIHRoZSAnZGVhZGxpbmUnIElPIHNjaGVkdWxlci4gQW55IHN5c3RlbSB3aXRoIGhpZ2gKK2Rpc2sgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIHNob3VsZCBkbyBzbywgaW4gZmFjdC4KKworSWYgeW91IHNlZSB1bnVzdWFsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB5b3VyIGRpc2sgc3lzdGVtcywgb3IgeW91CitzZWUgYmlnIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIHZlcnN1cyB0aGUgZGVhZGxpbmUgc2NoZWR1bGVyLCBwbGVhc2UgZW1haWwKK21lLiBEYXRhYmFzZSB1c2VycyBkb24ndCBib3RoZXIgdW5sZXNzIHlvdSdyZSB3aWxsaW5nIHRvIHRlc3QgYSBsb3Qgb2YgcGF0Y2hlcworZnJvbSBtZSA7KSBpdHMgYSBrbm93biBpc3N1ZS4KKworQWxzbywgdXNlcnMgd2l0aCBoYXJkd2FyZSBSQUlEIGNvbnRyb2xsZXJzLCBkb2luZyBzdHJpcGluZywgbWF5IGZpbmQKK2hpZ2hseSB2YXJpYWJsZSBwZXJmb3JtYW5jZSByZXN1bHRzIHdpdGggdXNpbmcgdGhlIGFzLWlvc2NoZWQuIFRoZQorYXMtaW9zY2hlZCBhbnRpY2lwYXRvcnkgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIG5vdGlvbiB0aGF0IGEgZGlzaworZGV2aWNlIGhhcyBvbmx5IG9uZSBwaHlzaWNhbCBzZWVraW5nIGhlYWQuICBBIHN0cmlwZWQgUkFJRCBjb250cm9sbGVyCithY3R1YWxseSBoYXMgYSBoZWFkIGZvciBlYWNoIHBoeXNpY2FsIGRldmljZSBpbiB0aGUgbG9naWNhbCBSQUlEIGRldmljZS4KKworSG93ZXZlciwgc2V0dGluZyB0aGUgYW50aWNfZXhwaXJlIChzZWUgdHVuYWJsZSBwYXJhbWV0ZXJzIGJlbG93KSBwcm9kdWNlcwordmVyeSBzaW1pbGFyIGJlaGF2aW9yIHRvIHRoZSBkZWFkbGluZSBJTyBzY2hlZHVsZXIuCisKKworU2VsZWN0aW5nIElPIHNjaGVkdWxlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBjaG9vc2UgSU8gc2NoZWR1bGVycyBhdCBib290IHRpbWUsIHVzZSB0aGUgYXJndW1lbnQgJ2VsZXZhdG9yPWRlYWRsaW5lJy4KKydub29wJyBhbmQgJ2FzJyAodGhlIGRlZmF1bHQpIGFyZSBhbHNvIGF2YWlsYWJsZS4gSU8gc2NoZWR1bGVycyBhcmUgYXNzaWduZWQKK2dsb2JhbGx5IGF0IGJvb3QgdGltZSBvbmx5IHByZXNlbnRseS4KKworCitBbnRpY2lwYXRvcnkgSU8gc2NoZWR1bGVyIFBvbGljaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgYXMtaW9zY2hlZCBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIHNldmVyYWwgbGF5ZXJzIG9mIHBvbGljaWVzCit0byBkZXRlcm1pbmUgd2hlbiBhbiBJTyByZXF1ZXN0IGlzIGRpc3BhdGNoZWQgdG8gdGhlIGRpc2sgY29udHJvbGxlci4KK0hlcmUgYXJlIHRoZSBwb2xpY2llcyBvdXRsaW5lZCwgaW4gb3JkZXIgb2YgYXBwbGljYXRpb24uCisKKzEuIG9uZS13YXkgRWxldmF0b3IgYWxnb3JpdGhtLgorCitUaGUgZWxldmF0b3IgYWxnb3JpdGhtIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIGRlYWRsaW5lIHNjaGVkdWxlciwgd2l0aAordGhlIGFkZGl0aW9uIHRoYXQgaXQgYWxsb3dzIGxpbWl0ZWQgYmFja3dhcmQgbW92ZW1lbnQgb2YgdGhlIGVsZXZhdG9yCisoaS5lLiBzZWVrcyBiYWNrd2FyZHMpLiAgQSBzZWVrIGJhY2t3YXJkcyBjYW4gb2NjdXIgd2hlbiBjaG9vc2luZyBiZXR3ZWVuCit0d28gSU8gcmVxdWVzdHMgd2hlcmUgb25lIGlzIGJlaGluZCB0aGUgZWxldmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCBhbmQKK3RoZSBvdGhlciBpcyBpbiBmcm9udCBvZiB0aGUgZWxldmF0b3IncyBwb3NpdGlvbi4gSWYgdGhlIHNlZWsgZGlzdGFuY2UgdG8KK3RoZSByZXF1ZXN0IGluIGJhY2sgb2YgdGhlIGVsZXZhdG9yIGlzIGxlc3MgdGhhbiBoYWxmIHRoZSBzZWVrIGRpc3RhbmNlIHRvCit0aGUgcmVxdWVzdCBpbiBmcm9udCBvZiB0aGUgZWxldmF0b3IsIHRoZW4gdGhlIHJlcXVlc3QgaW4gYmFjayBjYW4gYmUgY2hvc2VuLgorQmFja3dhcmQgc2Vla3MgYXJlIGFsc28gbGltaXRlZCB0byBhIG1heGltdW0gb2YgTUFYQkFDSyAoMTAyNCoxMDI0KSBzZWN0b3JzLgorVGhpcyBmYXZvcnMgZm9yd2FyZCBtb3ZlbWVudCBvZiB0aGUgZWxldmF0b3IsIHdoaWxlIGFsbG93aW5nIG9wcG9ydHVuaXN0aWMKKyJzaG9ydCIgYmFja3dhcmQgc2Vla3MuCisKKzIuIEZJRk8gZXhwaXJhdGlvbiB0aW1lcyBmb3IgcmVhZHMgYW5kIGZvciB3cml0ZXMuCisKK1RoaXMgaXMgYWdhaW4gdmVyeSBzaW1pbGFyIHRvIHRoZSBkZWFkbGluZSBJTyBzY2hlZHVsZXIuICBUaGUgZXhwaXJhdGlvbgordGltZXMgZm9yIHJlcXVlc3RzIG9uIHRoZXNlIGxpc3RzIGlzIHR1bmFibGUgdXNpbmcgdGhlIHBhcmFtZXRlcnMgcmVhZF9leHBpcmUKK2FuZCB3cml0ZV9leHBpcmUgZGlzY3Vzc2VkIGJlbG93LiAgV2hlbiBhIHJlYWQgb3IgYSB3cml0ZSBleHBpcmVzIGluIHRoaXMgd2F5LAordGhlIElPIHNjaGVkdWxlciB3aWxsIGludGVycnVwdCBpdHMgY3VycmVudCBlbGV2YXRvciBzd2VlcCBvciByZWFkIGFudGljaXBhdGlvbgordG8gc2VydmljZSB0aGUgZXhwaXJlZCByZXF1ZXN0LgorCiszLiBSZWFkIGFuZCB3cml0ZSByZXF1ZXN0IGJhdGNoaW5nCisKK0EgYmF0Y2ggaXMgYSBjb2xsZWN0aW9uIG9mIHJlYWQgcmVxdWVzdHMgb3IgYSBjb2xsZWN0aW9uIG9mIHdyaXRlCityZXF1ZXN0cy4gIFRoZSBhcyBzY2hlZHVsZXIgYWx0ZXJuYXRlcyBkaXNwYXRjaGluZyByZWFkIGFuZCB3cml0ZSBiYXRjaGVzCit0byB0aGUgZHJpdmVyLiAgSW4gdGhlIGNhc2UgYSByZWFkIGJhdGNoLCB0aGUgc2NoZWR1bGVyIHN1Ym1pdHMgcmVhZAorcmVxdWVzdHMgdG8gdGhlIGRyaXZlciBhcyBsb25nIGFzIHRoZXJlIGFyZSByZWFkIHJlcXVlc3RzIHRvIHN1Ym1pdCwgYW5kCit0aGUgcmVhZCBiYXRjaCB0aW1lIGxpbWl0IGhhcyBub3QgYmVlbiBleGNlZWRlZCAocmVhZF9iYXRjaF9leHBpcmUpLgorVGhlIHJlYWQgYmF0Y2ggdGltZSBsaW1pdCBiZWdpbnMgY291bnRpbmcgZG93biBvbmx5IHdoZW4gdGhlcmUgYXJlCitjb21wZXRpbmcgd3JpdGUgcmVxdWVzdHMgcGVuZGluZy4KKworSW4gdGhlIGNhc2Ugb2YgYSB3cml0ZSBiYXRjaCwgdGhlIHNjaGVkdWxlciBzdWJtaXRzIHdyaXRlIHJlcXVlc3RzIHRvCit0aGUgZHJpdmVyIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHdyaXRlIHJlcXVlc3RzIGF2YWlsYWJsZSwgYW5kIHRoZQord3JpdGUgYmF0Y2ggdGltZSBsaW1pdCBoYXMgbm90IGJlZW4gZXhjZWVkZWQgKHdyaXRlX2JhdGNoX2V4cGlyZSkuCitIb3dldmVyLCB0aGUgbGVuZ3RoIG9mIHdyaXRlIGJhdGNoZXMgd2lsbCBiZSBncmFkdWFsbHkgc2hvcnRlbmVkCit3aGVuIHJlYWQgYmF0Y2hlcyBmcmVxdWVudGx5IGV4Y2VlZCB0aGVpciB0aW1lIGxpbWl0LgorCitXaGVuIGNoYW5naW5nIGJldHdlZW4gYmF0Y2ggdHlwZXMsIHRoZSBzY2hlZHVsZXIgd2FpdHMgZm9yIGFsbCByZXF1ZXN0cworZnJvbSB0aGUgcHJldmlvdXMgYmF0Y2ggdG8gY29tcGxldGUgYmVmb3JlIHNjaGVkdWxpbmcgcmVxdWVzdHMgZm9yIHRoZQorbmV4dCBiYXRjaC4KKworVGhlIHJlYWQgYW5kIHdyaXRlIGZpZm8gZXhwaXJhdGlvbiB0aW1lcyBkZXNjcmliZWQgaW4gcG9saWN5IDIgYWJvdmUKK2FyZSBjaGVja2VkIG9ubHkgd2hlbiBpbiBzY2hlZHVsaW5nIElPIG9mIGEgYmF0Y2ggZm9yIHRoZSBjb3JyZXNwb25kaW5nCisocmVhZC93cml0ZSkgdHlwZS4gIFNvIGZvciBleGFtcGxlLCB0aGUgcmVhZCBGSUZPIHRpbWVvdXQgdmFsdWVzIGFyZQordGVzdGVkIG9ubHkgZHVyaW5nIHJlYWQgYmF0Y2hlcy4gIExpa2V3aXNlLCB0aGUgd3JpdGUgRklGTyB0aW1lb3V0Cit2YWx1ZXMgYXJlIHRlc3RlZCBvbmx5IGR1cmluZyB3cml0ZSBiYXRjaGVzLiAgRm9yIHRoaXMgcmVhc29uLAoraXQgaXMgZ2VuZXJhbGx5IG5vdCByZWNvbW1lbmRlZCBmb3IgdGhlIHJlYWQgYmF0Y2ggdGltZQordG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHdyaXRlIGV4cGlyYXRpb24gdGltZSwgbm9yIGZvciB0aGUgd3JpdGUgYmF0Y2gKK3RpbWUgdG8gZXhjZWVkIHRoZSByZWFkIGV4cGlyYXRpb24gdGltZSAoc2VlIHR1bmFibGUgcGFyYW1ldGVycyBiZWxvdykuCisKK1doZW4gdGhlIElPIHNjaGVkdWxlciBjaGFuZ2VzIGZyb20gYSByZWFkIHRvIGEgd3JpdGUgYmF0Y2gsCitpdCBiZWdpbnMgdGhlIGVsZXZhdG9yIGZyb20gdGhlIHJlcXVlc3QgdGhhdCBpcyBvbiB0aGUgaGVhZCBvZiB0aGUKK3dyaXRlIGV4cGlyYXRpb24gRklGTy4gIExpa2V3aXNlLCB3aGVuIGNoYW5naW5nIGZyb20gYSB3cml0ZSBiYXRjaCB0bworYSByZWFkIGJhdGNoLCBzY2hlZHVsZXIgYmVnaW5zIHRoZSBlbGV2YXRvciBmcm9tIHRoZSBmaXJzdCBlbnRyeQorb24gdGhlIHJlYWQgZXhwaXJhdGlvbiBGSUZPLgorCis0LiBSZWFkIGFudGljaXBhdGlvbi4KKworUmVhZCBhbnRpY2lwYXRpb24gb2NjdXJzIG9ubHkgd2hlbiBzY2hlZHVsaW5nIGEgcmVhZCBiYXRjaC4KK1RoaXMgaW1wbGVtZW50YXRpb24gb2YgcmVhZCBhbnRpY2lwYXRpb24gYWxsb3dzIG9ubHkgb25lIHJlYWQgcmVxdWVzdAordG8gYmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyIGF0IGEgdGltZS4gIEluCitjb250cmFzdCwgbWFueSB3cml0ZSByZXF1ZXN0cyBtYXkgYmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyCithdCBhIHRpbWUgZHVyaW5nIGEgd3JpdGUgYmF0Y2guICBJdCBpcyB0aGlzIGNoYXJhY3RlcmlzdGljIHRoYXQgY2FuIG1ha2UKK3RoZSBhbnRpY2lwYXRvcnkgc2NoZWR1bGVyIHBlcmZvcm0gYW5vbWFsb3VzbHkgd2l0aCBjb250cm9sbGVycyBzdXBwb3J0aW5nCitUQ1EsIG9yIHdpdGggaGFyZHdhcmUgc3RyaXBlZCBSQUlEIGRldmljZXMuIFNldHRpbmcgdGhlIGFudGljX2V4cGlyZQorcXVldWUgcGFyYW10ZXIgKHNlZSBiZWxvdykgdG8gemVybyBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLCBhbmQgdGhlIGFudGljaXBhdG9yeQorc2NoZWR1bGVyIGJlaGF2ZXMgZXNzZW50aWFsbHkgbGlrZSB0aGUgZGVhZGxpbmUgc2NoZWR1bGVyLgorCitXaGVuIHJlYWQgYW50aWNpcGF0aW9uIGlzIGVuYWJsZWQgKGFudGljX2V4cGlyZSBpcyBub3QgemVybyksIHJlYWRzCithcmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyIG9uZSBhdCBhIHRpbWUuCitBdCB0aGUgZW5kIG9mIGVhY2ggcmVhZCByZXF1ZXN0LCB0aGUgSU8gc2NoZWR1bGVyIGV4YW1pbmVzIGl0cyBuZXh0CitjYW5kaWRhdGUgcmVhZCByZXF1ZXN0IGZyb20gaXRzIHNvcnRlZCByZWFkIGxpc3QuICBJZiB0aGF0IG5leHQgcmVxdWVzdAoraXMgZnJvbSB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSByZXF1ZXN0IHRoYXQganVzdCBjb21wbGV0ZWQsCitvciBpZiB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZSBpcyAidmVyeSBjbG9zZSIgdG8gdGhlCitqdXN0IGNvbXBsZXRlZCByZXF1ZXN0LCBpdCBpcyBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5LiAgT3RoZXJ3aXNlLAorc3RhdGlzdGljcyAoYXZlcmFnZSB0aGluayB0aW1lLCBhdmVyYWdlIHNlZWsgZGlzdGFuY2UpIG9uIHRoZSBwcm9jZXNzCit0aGF0IHN1Ym1pdHRlZCB0aGUganVzdCBjb21wbGV0ZWQgcmVxdWVzdCBhcmUgZXhhbWluZWQuICBJZiBpdCBzZWVtcworbGlrZWx5IHRoYXQgdGhhdCBwcm9jZXNzIHdpbGwgc3VibWl0IGFub3RoZXIgcmVxdWVzdCBzb29uLCBhbmQgdGhhdAorcmVxdWVzdCBpcyBsaWtlbHkgdG8gYmUgbmVhciB0aGUganVzdCBjb21wbGV0ZWQgcmVxdWVzdCwgdGhlbiB0aGUgSU8KK3NjaGVkdWxlciB3aWxsIHN0b3AgZGlzcGF0Y2hpbmcgbW9yZSByZWFkIHJlcXVlc3RzIGZvciB1cCB0aW1lIChhbnRpY19leHBpcmUpCittaWxsaXNlY29uZHMsIGhvcGluZyB0aGF0IHByb2Nlc3Mgd2lsbCBzdWJtaXQgYSBuZXcgcmVxdWVzdCBuZWFyIHRoZSBvbmUKK3RoYXQganVzdCBjb21wbGV0ZWQuICBJZiBzdWNoIGEgcmVxdWVzdCBpcyBtYWRlLCB0aGVuIGl0IGlzIGRpc3BhdGNoZWQKK2ltbWVkaWF0ZWx5LiAgSWYgdGhlIGFudGljX2V4cGlyZSB3YWl0IHRpbWUgZXhwaXJlcywgdGhlbiB0aGUgSU8gc2NoZWR1bGVyCit3aWxsIGRpc3BhdGNoIHRoZSBuZXh0IHJlYWQgcmVxdWVzdCBmcm9tIHRoZSBzb3J0ZWQgcmVhZCBxdWV1ZS4KKworVG8gZGVjaWRlIHdoZXRoZXIgYW4gYW50aWNpcGF0b3J5IHdhaXQgaXMgd29ydGh3aGlsZSwgdGhlIHNjaGVkdWxlcgorbWFpbnRhaW5zIHN0YXRpc3RpY3MgZm9yIGVhY2ggcHJvY2VzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUKK21lYW4gInRoaW5rIHRpbWUiICh0aGUgdGltZSBiZXR3ZWVuIHJlYWQgcmVxdWVzdHMpLCBhbmQgbWVhbiBzZWVrCitkaXN0YW5jZSBmb3IgdGhhdCBwcm9jZXNzLiAgT25lIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlc2Ugc3RhdGlzdGljcworYXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHByb2Nlc3MsIGJ1dCB0aG9zZSBzdGF0aXN0aWNzIGFyZSBub3QgYXNzb2NpYXRlZAord2l0aCBhIHNwZWNpZmljIElPIGRldmljZS4gIFNvIGZvciBleGFtcGxlLCBpZiBhIHByb2Nlc3MgaXMgZG9pbmcgSU8KK29uIHNldmVyYWwgZmlsZSBzeXN0ZW1zIG9uIHNlcGFyYXRlIGRldmljZXMsIHRoZSBzdGF0aXN0aWNzIHdpbGwgYmUKK2EgY29tYmluYXRpb24gb2YgSU8gYmVoYXZpb3IgZnJvbSBhbGwgdGhvc2UgZGV2aWNlcy4KKworCitUdW5pbmcgdGhlIGFudGljaXBhdG9yeSBJTyBzY2hlZHVsZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hlbiB1c2luZyAnYXMnLCB0aGUgYW50aWNpcGF0b3J5IElPIHNjaGVkdWxlciB0aGVyZSBhcmUgNSBwYXJhbWV0ZXJzIHVuZGVyCisvc3lzL2Jsb2NrLyovcXVldWUvaW9zY2hlZC8uIEFsbCBhcmUgdW5pdHMgb2YgbWlsbGlzZWNvbmRzLgorCitUaGUgcGFyYW1ldGVycyBhcmU6CisqIHJlYWRfZXhwaXJlCisgICAgQ29udHJvbHMgaG93IGxvbmcgdW50aWwgYSByZWFkIHJlcXVlc3QgYmVjb21lcyAiZXhwaXJlZCIuIEl0IGFsc28gY29udHJvbHMgdGhlCisgICAgaW50ZXJ2YWwgYmV0d2VlbiB3aGljaCBleHBpcmVkIHJlcXVlc3RzIGFyZSBzZXJ2ZWQsIHNvIHNldCB0byA1MCwgYSByZXF1ZXN0CisgICAgbWlnaHQgdGFrZSBhbnl3aGVyZSA8IDEwMG1zIHRvIGJlIHNlcnZpY2VkIF9pZl8gaXQgaXMgdGhlIG5leHQgb24gdGhlCisgICAgZXhwaXJlZCBsaXN0LiBPYnZpb3VzbHkgcmVxdWVzdCBleHBpcmF0aW9uIHN0cmF0ZWdpZXMgd29uJ3QgbWFrZSB0aGUgZGlzaworICAgIGdvIGZhc3Rlci4gVGhlIHJlc3VsdCBiYXNpY2FsbHkgZXF1YXRlcyB0byB0aGUgdGltZXNsaWNlIGEgc2luZ2xlIHJlYWRlcgorICAgIGdldHMgaW4gdGhlIHByZXNlbmNlIG9mIG90aGVyIElPLiAxMDAqKChzZWVrIHRpbWUgLyByZWFkX2V4cGlyZSkgKyAxKSBpcworICAgIHZlcnkgcm91Z2hseSB0aGUgJSBzdHJlYW1pbmcgcmVhZCBlZmZpY2llbmN5IHlvdXIgZGlzayBzaG91bGQgZ2V0IHdpdGgKKyAgICBtdWx0aXBsZSByZWFkZXJzLgorCisqIHJlYWRfYmF0Y2hfZXhwaXJlCisgICAgQ29udHJvbHMgaG93IG11Y2ggdGltZSBhIGJhdGNoIG9mIHJlYWRzIGlzIGdpdmVuIGJlZm9yZSBwZW5kaW5nIHdyaXRlcyBhcmUKKyAgICBzZXJ2ZWQuIEEgaGlnaGVyIHZhbHVlIGlzIG1vcmUgZWZmaWNpZW50LiBUaGlzIG1pZ2h0IGJlIHNldCBiZWxvdyByZWFkX2V4cGlyZQorICAgIGlmIHdyaXRlcyBhcmUgdG8gYmUgZ2l2ZW4gaGlnaGVyIHByaW9yaXR5IHRoYW4gcmVhZHMsIGJ1dCByZWFkcyBhcmUgdG8gYmUKKyAgICBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUgd2hlbiB0aGVyZSBhcmUgbm8gd3JpdGVzLiBHZW5lcmFsbHkgdGhvdWdoLCBpdAorICAgIHNob3VsZCBiZSBzb21lIG11bHRpcGxlIG9mIHJlYWRfZXhwaXJlLgorCisqIHdyaXRlX2V4cGlyZSwgYW5kCisqIHdyaXRlX2JhdGNoX2V4cGlyZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgYWJvdmUsIGZvciB3cml0ZXMuCisKKyogYW50aWNfZXhwaXJlCisgICAgQ29udHJvbHMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgd2UgY2FuIGFudGljaXBhdGUgYSBnb29kIHJlYWQgKG9uZQorICAgIHdpdGggYSBzaG9ydCBzZWVrIGRpc3RhbmNlIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgY29tcGxldGVkIHJlcXVlc3QpIGJlZm9yZQorICAgIGdpdmluZyB1cC4gTWFueSBvdGhlciBmYWN0b3JzIG1heSBjYXVzZSBhbnRpY2lwYXRpb24gdG8gYmUgc3RvcHBlZCBlYXJseSwKKyAgICBvciBzb21lIHByb2Nlc3NlcyB3aWxsIG5vdCBiZSAiYW50aWNpcGF0ZWQiIGF0IGFsbC4gU2hvdWxkIGJlIGEgYml0IGhpZ2hlcgorICAgIGZvciBiaWcgc2VlayB0aW1lIGRldmljZXMgdGhvdWdoIG5vdCBhIGxpbmVhciBjb3JyZXNwb25kZW5jZSAtIG1vc3QKKyAgICBwcm9jZXNzZXMgaGF2ZSBvbmx5IGEgZmV3IG1zIHRoaW5rdGltZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDI3NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTAsMCArMSwxMjEzIEBACisJTm90ZXMgb24gdGhlIEdlbmVyaWMgQmxvY2sgTGF5ZXIgUmV3cml0ZSBpbiBMaW51eCAyLjUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3RlcyBXcml0dGVuIG9uIEphbiAxNSwgMjAwMjoKKwlKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorCVN1cGFybmEgQmhhdHRhY2hhcnlhIDxzdXBhcm5hQGluLmlibS5jb20+CisKK0xhc3QgVXBkYXRlZCBNYXkgMiwgMjAwMgorU2VwdGVtYmVyIDIwMDM6IFVwZGF0ZWQgSS9PIFNjaGVkdWxlciBwb3J0aW9ucworCU5pY2sgUGlnZ2luIDxwaWdnaW5AY3liZXJvbmUuY29tLmF1PgorCitJbnRyb2R1Y3Rpb246CisKK1RoZXNlIGFyZSBzb21lIG5vdGVzIGRlc2NyaWJpbmcgc29tZSBhc3BlY3RzIG9mIHRoZSAyLjUgYmxvY2sgbGF5ZXIgaW4gdGhlCitjb250ZXh0IG9mIHRoZSBiaW8gcmV3cml0ZS4gVGhlIGlkZWEgaXMgdG8gYnJpbmcgb3V0IHNvbWUgb2YgdGhlIGtleQorY2hhbmdlcyBhbmQgYSBnbGltcHNlIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIHRob3NlIGNoYW5nZXMuCisKK1BsZWFzZSBtYWlsIGNvcnJlY3Rpb25zICYgc3VnZ2VzdGlvbnMgdG8gc3VwYXJuYUBpbi5pYm0uY29tLgorCitDcmVkaXRzOgorLS0tLS0tLS0tCisKKzIuNSBiaW8gcmV3cml0ZToKKwlKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorCitNYW55IGFzcGVjdHMgb2YgdGhlIGdlbmVyaWMgYmxvY2sgbGF5ZXIgcmVkZXNpZ24gd2VyZSBkcml2ZW4gYnkgYW5kIGV2b2x2ZWQKK292ZXIgZGlzY3Vzc2lvbnMsIHByaW9yIHBhdGNoZXMgYW5kIHRoZSBjb2xsZWN0aXZlIGV4cGVyaWVuY2Ugb2Ygc2V2ZXJhbAorcGVvcGxlLiBTZWUgc2VjdGlvbnMgOCBhbmQgOSBmb3IgYSBsaXN0IG9mIHNvbWUgcmVsYXRlZCByZWZlcmVuY2VzLgorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBoZWxwZWQgd2l0aCByZXZpZXcgY29tbWVudHMgYW5kIGlucHV0cyBmb3IgdGhpcworZG9jdW1lbnQ6CisJQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgorCUFyamFuIHZhbiBkZSBWZW4gPGFyamFudkByZWRoYXQuY29tPgorCVJhbmR5IER1bmxhcCA8cmRkdW5sYXBAb3NkbC5vcmc+CisJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KKworVGhlIGZvbGxvd2luZyBwZW9wbGUgaGVscGVkIHdpdGggZml4ZXMvY29udHJpYnV0aW9ucyB0byB0aGUgYmlvIHBhdGNoZXMKK3doaWxlIGl0IHdhcyBzdGlsbCB3b3JrLWluLXByb2dyZXNzOgorCURhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4KKworCitEZXNjcmlwdGlvbiBvZiBDb250ZW50czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBTY29wZSBmb3IgdHVuaW5nIG9mIGxvZ2ljIHRvIHZhcmlvdXMgbmVlZHMKKyAgMS4xIFR1bmluZyBiYXNlZCBvbiBkZXZpY2Ugb3IgbG93IGxldmVsIGRyaXZlciBjYXBhYmlsaXRpZXMKKwktIFBlci1xdWV1ZSBwYXJhbWV0ZXJzCisJLSBIaWdobWVtIEkvTyBzdXBwb3J0CisJLSBJL08gc2NoZWR1bGVyIG1vZHVsYXJpemF0aW9uCisgIDEuMiBUdW5pbmcgYmFzZWQgb24gaGlnaCBsZXZlbCByZXF1aXJlbWVudHMvY2FwYWJpbGl0aWVzCisJMS4yLjEgSS9PIEJhcnJpZXJzCisJMS4yLjIgUmVxdWVzdCBQcmlvcml0eS9MYXRlbmN5CisgIDEuMyBEaXJlY3QgYWNjZXNzL2J5cGFzcyB0byBsb3dlciBsYXllcnMgZm9yIGRpYWdub3N0aWNzIGFuZCBzcGVjaWFsCisgICAgICBkZXZpY2Ugb3BlcmF0aW9ucworCTEuMy4xIFByZS1idWlsdCBjb21tYW5kcworMi4gTmV3IGZsZXhpYmxlIGFuZCBnZW5lcmljIGJ1dCBtaW5pbWFsaXN0IGkvbyBzdHJ1Y3R1cmUgb3IgZGVzY3JpcHRvcgorICAgKGluc3RlYWQgb2YgdXNpbmcgYnVmZmVyIGhlYWRzIGF0IHRoZSBpL28gbGF5ZXIpCisgIDIuMSBSZXF1aXJlbWVudHMvR29hbHMgYWRkcmVzc2VkCisgIDIuMiBUaGUgYmlvIHN0cnVjdCBpbiBkZXRhaWwgKG11bHRpLXBhZ2UgaW8gdW5pdCkKKyAgMi4zIENoYW5nZXMgaW4gdGhlIHJlcXVlc3Qgc3RydWN0dXJlCiszLiBVc2luZyBiaW9zCisgIDMuMSBTZXR1cC90ZWFyZG93biAoYWxsb2NhdGlvbiwgc3BsaXR0aW5nKQorICAzLjIgR2VuZXJpYyBiaW8gaGVscGVyIHJvdXRpbmVzCisgICAgMy4yLjEgVHJhdmVyc2luZyBzZWdtZW50cyBhbmQgY29tcGxldGlvbiB1bml0cyBpbiBhIHJlcXVlc3QKKyAgICAzLjIuMiBTZXR0aW5nIHVwIERNQSBzY2F0dGVybGlzdHMKKyAgICAzLjIuMyBJL08gY29tcGxldGlvbgorICAgIDMuMi40IEltcGxpY2F0aW9ucyBmb3IgZHJpdmVycyB0aGF0IGRvIG5vdCBpbnRlcnByZXQgYmlvcyAoZG9uJ3QgaGFuZGxlCisgCSAgbXVsdGlwbGUgc2VnbWVudHMpCisgICAgMy4yLjUgUmVxdWVzdCBjb21tYW5kIHRhZ2dpbmcKKyAgMy4zIEkvTyBzdWJtaXNzaW9uCis0LiBUaGUgSS9PIHNjaGVkdWxlcgorNS4gU2NhbGFiaWxpdHkgcmVsYXRlZCBjaGFuZ2VzCisgIDUuMSBHcmFudWxhciBsb2NraW5nOiBSZW1vdmFsIG9mIGlvX3JlcXVlc3RfbG9jaworICA1LjIgUHJlcGFyZSBmb3IgdHJhbnNpdGlvbiB0byA2NCBiaXQgc2VjdG9yX3QKKzYuIE90aGVyIENoYW5nZXMvSW1wbGljYXRpb25zCisgIDYuMSBQYXJ0aXRpb24gcmUtbWFwcGluZyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyCis3LiBBIGZldyB0aXBzIG9uIG1pZ3JhdGlvbiBvZiBvbGRlciBkcml2ZXJzCis4LiBBIGxpc3Qgb2YgcHJpb3IvcmVsYXRlZC9pbXBhY3RlZCBwYXRjaGVzL2lkZWFzCis5LiBPdGhlciBSZWZlcmVuY2VzL0Rpc2N1c3Npb24gVGhyZWFkcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmlvIE5vdGVzCistLS0tLS0tLQorCitMZXQgdXMgZGlzY3VzcyB0aGUgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiBob3cgc29tZSBvdmVyYWxsIGdvYWxzIGZvciB0aGUKK2Jsb2NrIGxheWVyIGFyZSBhZGRyZXNzZWQuCisKKzEuIFNjb3BlIGZvciB0dW5pbmcgdGhlIGdlbmVyaWMgbG9naWMgdG8gc2F0aXNmeSB2YXJpb3VzIHJlcXVpcmVtZW50cworCitUaGUgYmxvY2sgbGF5ZXIgZGVzaWduIHN1cHBvcnRzIGFkYXB0YWJsZSBhYnN0cmFjdGlvbnMgdG8gaGFuZGxlIGNvbW1vbgorcHJvY2Vzc2luZyB3aXRoIHRoZSBhYmlsaXR5IHRvIHR1bmUgdGhlIGxvZ2ljIHRvIGFuIGFwcHJvcHJpYXRlIGV4dGVudAorZGVwZW5kaW5nIG9uIHRoZSBuYXR1cmUgb2YgdGhlIGRldmljZSBhbmQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgY2FsbGVyLgorT25lIG9mIHRoZSBvYmplY3RpdmVzIG9mIHRoZSByZXdyaXRlIHdhcyB0byBpbmNyZWFzZSB0aGUgZGVncmVlIG9mIHR1bmFiaWxpdHkKK2FuZCB0byBlbmFibGUgaGlnaGVyIGxldmVsIGNvZGUgdG8gdXRpbGl6ZSB1bmRlcmx5aW5nIGRldmljZS9kcml2ZXIKK2NhcGFiaWxpdGllcyB0byB0aGUgbWF4aW11bSBleHRlbnQgZm9yIGJldHRlciBpL28gcGVyZm9ybWFuY2UuIFRoaXMgaXMKK2ltcG9ydGFudCBlc3BlY2lhbGx5IGluIHRoZSBsaWdodCBvZiBldmVyIGltcHJvdmluZyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMKK2FuZCBhcHBsaWNhdGlvbi9taWRkbGV3YXJlIHNvZnR3YXJlIGRlc2lnbmVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZXNlCitjYXBhYmlsaXRpZXMuCisKKzEuMSBUdW5pbmcgYmFzZWQgb24gbG93IGxldmVsIGRldmljZSAvIGRyaXZlciBjYXBhYmlsaXRpZXMKKworU29waGlzdGljYXRlZCBkZXZpY2VzIHdpdGggbGFyZ2UgYnVpbHQtaW4gY2FjaGVzLCBpbnRlbGxpZ2VudCBpL28gc2NoZWR1bGluZworb3B0aW1pemF0aW9ucywgaGlnaCBtZW1vcnkgRE1BIHN1cHBvcnQsIGV0YyBtYXkgZmluZCBzb21lIG9mIHRoZQorZ2VuZXJpYyBwcm9jZXNzaW5nIGFuIG92ZXJoZWFkLCB3aGlsZSBmb3IgbGVzcyBjYXBhYmxlIGRldmljZXMgdGhlCitnZW5lcmljIGZ1bmN0aW9uYWxpdHkgaXMgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyByZWFzb25zLgorS25vd2xlZGdlIG9mIHNvbWUgb2YgdGhlIGNhcGFiaWxpdGllcyBvciBwYXJhbWV0ZXJzIG9mIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCit1c2VkIGF0IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyIHRvIHRha2UgdGhlIHJpZ2h0IGRlY2lzaW9ucyBvbgorYmVoYWxmIG9mIHRoZSBkcml2ZXIuCisKK0hvdyBpcyB0aGlzIGFjaGlldmVkID8KKworVHVuaW5nIGF0IGEgcGVyLXF1ZXVlIGxldmVsOgorCitpLiBQZXItcXVldWUgbGltaXRzL3ZhbHVlcyBleHBvcnRlZCB0byB0aGUgZ2VuZXJpYyBsYXllciBieSB0aGUgZHJpdmVyCisKK1ZhcmlvdXMgcGFyYW1ldGVycyB0aGF0IHRoZSBnZW5lcmljIGkvbyBzY2hlZHVsZXIgbG9naWMgdXNlcyBhcmUgc2V0IGF0CithIHBlci1xdWV1ZSBsZXZlbCAoZS5nIG1heGltdW0gcmVxdWVzdCBzaXplLCBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyBpbgorYSBzY2F0dGVyLWdhdGhlciBsaXN0LCBoYXJkc2VjdCBzaXplKQorCitTb21lIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIGVhcmxpZXIgYXZhaWxhYmxlIGFzIGdsb2JhbCBhcnJheXMgaW5kZXhlZCBieQorbWFqb3IvbWlub3IgYXJlIG5vdyBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlIHF1ZXVlLiBTb21lIG9mIHRoZXNlIG1heQorbW92ZSBpbnRvIHRoZSBibG9jayBkZXZpY2Ugc3RydWN0dXJlIGluIHRoZSBmdXR1cmUuIFNvbWUgY2hhcmFjdGVyaXN0aWNzCitoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkIGludG8gYSBxdWV1ZSBmbGFncyBmaWVsZCByYXRoZXIgdGhhbiBzZXBhcmF0ZSBmaWVsZHMKK2luIHRoZW1zZWx2ZXMuICBUaGVyZSBhcmUgYmxrX3F1ZXVlX3h4eCBmdW5jdGlvbnMgdG8gc2V0IHRoZSBwYXJhbWV0ZXJzLAorcmF0aGVyIHRoYW4gdXBkYXRlIHRoZSBmaWVsZHMgZGlyZWN0bHkKKworU29tZSBuZXcgcXVldWUgcHJvcGVydHkgc2V0dGluZ3M6CisKKwlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIHU2NCBkbWFfYWRkcmVzcykKKwkJRW5hYmxlIEkvTyB0byBoaWdobWVtIHBhZ2VzLCBkbWFfYWRkcmVzcyBiZWluZyB0aGUKKwkJbGltaXQuIE5vIGhpZ2htZW0gZGVmYXVsdC4KKworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBtYXhfc2VjdG9ycykKKwkJTWF4aW11bSBzaXplIHJlcXVlc3QgeW91IGNhbiBoYW5kbGUgaW4gdW5pdHMgb2YgNTEyIGJ5dGUKKwkJc2VjdG9ycy4gMjU1IGRlZmF1bHQuCisKKwlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgbWF4X3NlZ21lbnRzKQorCQlNYXhpbXVtIHBoeXNpY2FsIHNlZ21lbnRzIHlvdSBjYW4gaGFuZGxlIGluIGEgcmVxdWVzdC4gMTI4CisJCWRlZmF1bHQgKGRyaXZlciBsaW1pdCkuIChTZWUgMy4yLjIpCisKKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIG1heF9zZWdtZW50cykKKwkJTWF4aW11bSBkbWEgc2VnbWVudHMgdGhlIGhhcmR3YXJlIGNhbiBoYW5kbGUgaW4gYSByZXF1ZXN0LiAxMjgKKwkJZGVmYXVsdCAoaG9zdCBhZGFwdGVyIGxpbWl0LCBhZnRlciBkbWEgcmVtYXBwaW5nKS4KKwkJKFNlZSAzLjIuMikKKworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIG1heF9zZWdfc2l6ZSkKKwkJTWF4aW11bSBzaXplIG9mIGEgY2x1c3RlcmVkIHNlZ21lbnQsIDY0a0IgZGVmYXVsdC4KKworCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKHEsIGhhcmRzZWN0X3NpemUpCisJCUxvd2VzdCBwb3NzaWJsZSBzZWN0b3Igc2l6ZSB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gb3BlcmF0ZQorCQlvbiwgNTEyIGJ5dGVzIGRlZmF1bHQuCisKK05ldyBxdWV1ZSBmbGFnczoKKworCVFVRVVFX0ZMQUdfQ0xVU1RFUiAoc2VlIDMuMi4yKQorCVFVRVVFX0ZMQUdfUVVFVUVEIChzZWUgMy4yLjQpCisKKworaWkuIEhpZ2gtbWVtIGkvbyBjYXBhYmlsaXRpZXMgYXJlIG5vdyBjb25zaWRlcmVkIHRoZSBkZWZhdWx0CisKK1RoZSBnZW5lcmljIGJvdW5jZSBidWZmZXIgbG9naWMsIHByZXNlbnQgaW4gMi40LCB3aGVyZSB0aGUgYmxvY2sgbGF5ZXIgd291bGQKK2J5IGRlZmF1bHQgY29weWluL291dCBpL28gcmVxdWVzdHMgb24gaGlnaC1tZW1vcnkgYnVmZmVycyB0byBsb3ctbWVtb3J5IGJ1ZmZlcnMKK2Fzc3VtaW5nIHRoYXQgdGhlIGRyaXZlciB3b3VsZG4ndCBiZSBhYmxlIHRvIGhhbmRsZSBpdCBkaXJlY3RseSwgaGFzIGJlZW4KK2NoYW5nZWQgaW4gMi41LiBUaGUgYm91bmNlIGxvZ2ljIGlzIG5vdyBhcHBsaWVkIG9ubHkgZm9yIG1lbW9yeSByYW5nZXMKK2ZvciB3aGljaCB0aGUgZGV2aWNlIGNhbm5vdCBoYW5kbGUgaS9vLiBBIGRyaXZlciBjYW4gc3BlY2lmeSB0aGlzIGJ5CitzZXR0aW5nIHRoZSBxdWV1ZSBib3VuY2UgbGltaXQgZm9yIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCisoYmxrX3F1ZXVlX2JvdW5jZV9saW1pdCgpKS4gVGhpcyBhdm9pZHMgdGhlIGluZWZmaWNpZW5jaWVzIG9mIHRoZSBjb3B5aW4vb3V0Cit3aGVyZSBhIGRldmljZSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGhpZ2ggbWVtb3J5IGkvby4KKworSW4gb3JkZXIgdG8gZW5hYmxlIGhpZ2gtbWVtb3J5IGkvbyB3aGVyZSB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2Ygc3VwcG9ydGluZworaXQsIHRoZSBwY2kgZG1hIG1hcHBpbmcgcm91dGluZXMgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm93IGJlZW4KK21vZGlmaWVkIHRvIGFjY29tcGxpc2ggYSBkaXJlY3QgcGFnZSAtPiBidXMgdHJhbnNsYXRpb24sIHdpdGhvdXQgcmVxdWlyaW5nCithIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nICh1bmxpa2UgdGhlIGVhcmxpZXIgc2NoZW1lIG9mIHZpcnR1YWwgYWRkcmVzcworLT4gYnVzIHRyYW5zbGF0aW9uKS4gU28gdGhpcyB3b3JrcyB1bmlmb3JtbHkgZm9yIGhpZ2gtbWVtb3J5IHBhZ2VzICh3aGljaAorZG8gbm90IGhhdmUgYSBjb3JyZXBvbmRpbmcga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtYXBwaW5nKSBhbmQKK2xvdy1tZW1vcnkgcGFnZXMuCisKK05vdGU6IFBsZWFzZSByZWZlciB0byBETUEtbWFwcGluZy50eHQgZm9yIGEgZGlzY3Vzc2lvbiBvbiBQQ0kgaGlnaCBtZW0gRE1BCithc3BlY3RzIGFuZCBtYXBwaW5nIG9mIHNjYXR0ZXIgZ2F0aGVyIGxpc3RzLCBhbmQgc3VwcG9ydCBmb3IgNjQgYml0IFBDSS4KKworU3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCBvbmx5IGZvciBjYXNlcyB3aGVyZSBpL28gbmVlZHMgdG8gaGFwcGVuIG9uCitwYWdlcyBhdCBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzc2VzIGJleW9uZCB3aGF0IHRoZSBkZXZpY2UgY2FuIHN1cHBvcnQuIEluIHRoZXNlCitjYXNlcywgYSBib3VuY2UgYmlvIHJlcHJlc2VudGluZyBhIGJ1ZmZlciBmcm9tIHRoZSBzdXBwb3J0ZWQgbWVtb3J5IHJhbmdlCitpcyB1c2VkIGZvciBwZXJmb3JtaW5nIHRoZSBpL28gd2l0aCBjb3B5aW4vY29weW91dCBhcyBuZWVkZWQgZGVwZW5kaW5nIG9uCit0aGUgdHlwZSBvZiB0aGUgb3BlcmF0aW9uLiAgRm9yIGV4YW1wbGUsIGluIGNhc2Ugb2YgYSByZWFkIG9wZXJhdGlvbiwgdGhlCitkYXRhIHJlYWQgaGFzIHRvIGJlIGNvcGllZCB0byB0aGUgb3JpZ2luYWwgYnVmZmVyIG9uIGkvbyBjb21wbGV0aW9uLCBzbyBhCitjYWxsYmFjayByb3V0aW5lIGlzIHNldCB1cCB0byBkbyB0aGlzLCB3aGlsZSBmb3Igd3JpdGUsIHRoZSBkYXRhIGlzIGNvcGllZAorZnJvbSB0aGUgb3JpZ2luYWwgYnVmZmVyIHRvIHRoZSBib3VuY2UgYnVmZmVyIHByaW9yIHRvIGlzc3VpbmcgdGhlCitvcGVyYXRpb24uIFNpbmNlIGFuIG9yaWdpbmFsIGJ1ZmZlciBtYXkgYmUgaW4gYSBoaWdoIG1lbW9yeSBhcmVhIHRoYXQncyBub3QKK21hcHBlZCBpbiBrZXJuZWwgdmlydHVhbCBhZGRyLCBhIGttYXAgb3BlcmF0aW9uIG1heSBiZSByZXF1aXJlZCBmb3IKK3BlcmZvcm1pbmcgdGhlIGNvcHksIGFuZCBzcGVjaWFsIGNhcmUgbWF5IGJlIG5lZWRlZCBpbiB0aGUgY29tcGxldGlvbiBwYXRoCithcyBpdCBtYXkgbm90IGJlIGluIGlycSBjb250ZXh0LiBTcGVjaWFsIGNhcmUgaXMgYWxzbyByZXF1aXJlZCAoYnkgd2F5IG9mCitHRlAgZmxhZ3MpIHdoZW4gYWxsb2NhdGluZyBib3VuY2UgYnVmZmVycywgdG8gYXZvaWQgY2VydGFpbiBoaWdobWVtCitkZWFkbG9jayBwb3NzaWJpbGl0aWVzLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgYSBib3VuY2UgYnVmZmVyIG1heSBiZSBhbGxvY2F0ZWQgZnJvbSBoaWdoLW1lbW9yeQorYXJlYSB0aGF0J3Mgbm90IG1hcHBlZCBpbiBrZXJuZWwgdmlydHVhbCBhZGRyLCBidXQgd2l0aGluIHRoZSByYW5nZSB0aGF0IHRoZQorZGV2aWNlIGNhbiB1c2UgZGlyZWN0bHk7IHNvIHRoZSBib3VuY2UgcGFnZSBtYXkgbmVlZCB0byBiZSBrbWFwcGVkIGR1cmluZworY29weSBvcGVyYXRpb25zLiBbTm90ZTogVGhpcyBkb2VzIG5vdCBob2xkIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLAordGhvdWdoXQorCitUaGVyZSBhcmUgc29tZSBzaXR1YXRpb25zIHdoZW4gcGFnZXMgZnJvbSBoaWdoIG1lbW9yeSBtYXkgbmVlZCB0bworYmUga21hcHBlZCwgZXZlbiBpZiBib3VuY2UgYnVmZmVycyBhcmUgbm90IG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUgYSBkZXZpY2UKK21heSBuZWVkIHRvIGFib3J0IERNQSBvcGVyYXRpb25zIGFuZCByZXZlcnQgdG8gUElPIGZvciB0aGUgdHJhbnNmZXIsIGluCit3aGljaCBjYXNlIGEgdmlydHVhbCBtYXBwaW5nIG9mIHRoZSBwYWdlIGlzIHJlcXVpcmVkLiBGb3IgU0NTSSBpdCBpcyBhbHNvCitkb25lIGluIHNvbWUgc2NlbmFyaW9zIHdoZXJlIHRoZSBsb3cgbGV2ZWwgZHJpdmVyIGNhbm5vdCBiZSB0cnVzdGVkIHRvCitoYW5kbGUgYSBzaW5nbGUgc2cgZW50cnkgY29ycmVjdGx5LiBUaGUgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gdGhlCitrbWFwcyBhcyBuZWVkZWQgb24gc3VjaCBvY2Nhc2lvbnMgdXNpbmcgdGhlIF9fYmlvX2ttYXBfYXRvbWljIGFuZCBiaW9fa21hcF9pcnEKK3JvdXRpbmVzIGFzIGFwcHJvcHJpYXRlLiBBIGRyaXZlciBjb3VsZCBhbHNvIHVzZSB0aGUgYmxrX3F1ZXVlX2JvdW5jZSgpCityb3V0aW5lIG9uIGl0cyBvd24gdG8gYm91bmNlIGhpZ2htZW0gaS9vIHRvIGxvdyBtZW1vcnkgZm9yIHNwZWNpZmljIHJlcXVlc3RzCitpZiBzbyBkZXNpcmVkLgorCitpaWkuIFRoZSBpL28gc2NoZWR1bGVyIGFsZ29yaXRobSBpdHNlbGYgY2FuIGJlIHJlcGxhY2VkL3NldCBhcyBhcHByb3ByaWF0ZQorCitBcyBpbiAyLjQsIGl0IGlzIHBvc3NpYmxlIHRvIHBsdWdpbiBhIGJyYW5kIG5ldyBpL28gc2NoZWR1bGVyIGZvciBhIHBhcnRpY3VsYXIKK3F1ZXVlIG9yIHBpY2sgZnJvbSAoY29weSkgZXhpc3RpbmcgZ2VuZXJpYyBzY2hlZHVsZXJzIGFuZCByZXBsYWNlL292ZXJyaWRlCitjZXJ0YWluIHBvcnRpb25zIG9mIGl0LiBUaGUgMi41IHJld3JpdGUgcHJvdmlkZXMgaW1wcm92ZWQgbW9kdWxhcml6YXRpb24KK29mIHRoZSBpL28gc2NoZWR1bGVyLiBUaGVyZSBhcmUgbW9yZSBwbHVnZ2FibGUgY2FsbGJhY2tzLCBlLmcgZm9yIGluaXQsCithZGQgcmVxdWVzdCwgZXh0cmFjdCByZXF1ZXN0LCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBhYnN0cmFjdCBzcGVjaWZpYworaS9vIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGFzcGVjdHMgYW5kIGRldGFpbHMgb3V0c2lkZSBvZiB0aGUgZ2VuZXJpYyBsb29wLgorSXQgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IGhpZGUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YKK3RoZSBpL28gc2NoZWR1bGVyIGZyb20gYmxvY2sgZHJpdmVycy4KKworSS9PIHNjaGVkdWxlciB3cmFwcGVycyBhcmUgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCitTZWUgc2VjdGlvbiA0LiBUaGUgSS9PIHNjaGVkdWxlciBmb3IgZGV0YWlscy4KKworMS4yIFR1bmluZyBCYXNlZCBvbiBIaWdoIGxldmVsIGNvZGUgY2FwYWJpbGl0aWVzCisKK2kuIEFwcGxpY2F0aW9uIGNhcGFiaWxpdGllcyBmb3IgcmF3IGkvbworCitUaGlzIGNvbWVzIGZyb20gc29tZSBvZiB0aGUgaGlnaC1wZXJmb3JtYW5jZSBkYXRhYmFzZS9taWRkbGV3YXJlCityZXF1aXJlbWVudHMgd2hlcmUgYW4gYXBwbGljYXRpb24gcHJlZmVycyB0byBtYWtlIGl0cyBvd24gaS9vIHNjaGVkdWxpbmcKK2RlY2lzaW9ucyBiYXNlZCBvbiBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhY2Nlc3MgcGF0dGVybnMgYW5kIGkvbworY2hhcmFjdGVyaXN0aWNzCisKK2lpLiBIaWdoIHBlcmZvcm1hbmNlIGZpbGVzeXN0ZW1zIG9yIG90aGVyIGhpZ2hlciBsZXZlbCBrZXJuZWwgY29kZSdzCitjYXBhYmlsaXRpZXMKKworS2VybmVsIGNvbXBvbmVudHMgbGlrZSBmaWxlc3lzdGVtcyBjb3VsZCBhbHNvIHRha2UgdGhlaXIgb3duIGkvbyBzY2hlZHVsaW5nCitkZWNpc2lvbnMgZm9yIG9wdGltaXppbmcgcGVyZm9ybWFuY2UuIEpvdXJuYWxsaW5nIGZpbGVzeXN0ZW1zIG1heSBuZWVkCitzb21lIGNvbnRyb2wgb3ZlciBpL28gb3JkZXJpbmcuCisKK1doYXQga2luZCBvZiBzdXBwb3J0IGV4aXN0cyBhdCB0aGUgZ2VuZXJpYyBibG9jayBsYXllciBmb3IgdGhpcyA/CisKK1RoZSBmbGFncyBhbmQgcncgZmllbGRzIGluIHRoZSBiaW8gc3RydWN0dXJlIGNhbiBiZSB1c2VkIGZvciBzb21lIHR1bmluZworZnJvbSBhYm92ZSBlLmcgaW5kaWNhdGluZyB0aGF0IGFuIGkvbyBpcyBqdXN0IGEgcmVhZGFoZWFkIHJlcXVlc3QsIG9yIGZvcgorbWFya2luZyAgYmFycmllciByZXF1ZXN0cyAoZGlzY3Vzc2VkIG5leHQpLCBvciBwcmlvcml0eSBzZXR0aW5ncyAoY3VycmVudGx5Cit1bnVzZWQpLiBBcyBmYXIgYXMgdXNlciBhcHBsaWNhdGlvbnMgYXJlIGNvbmNlcm5lZCB0aGV5IHdvdWxkIG5lZWQgYW4KK2FkZGl0aW9uYWwgbWVjaGFuaXNtIGVpdGhlciB2aWEgb3BlbiBmbGFncyBvciBpb2N0bHMsIG9yIHNvbWUgb3RoZXIgdXBwZXIKK2xldmVsIG1lY2hhbmlzbSB0byBjb21tdW5pY2F0ZSBzdWNoIHNldHRpbmdzIHRvIGJsb2NrLgorCisxLjIuMSBJL08gQmFycmllcnMKKworVGhlcmUgaXMgYSB3YXkgdG8gZW5mb3JjZSBzdHJpY3Qgb3JkZXJpbmcgZm9yIGkvb3MgdGhyb3VnaCBiYXJyaWVycy4KK0FsbCByZXF1ZXN0cyBiZWZvcmUgYSBiYXJyaWVyIHBvaW50IG11c3QgYmUgc2VydmljZWQgYmVmb3JlIHRoZSBiYXJyaWVyCityZXF1ZXN0IGFuZCBhbnkgb3RoZXIgcmVxdWVzdHMgYXJyaXZpbmcgYWZ0ZXIgdGhlIGJhcnJpZXIgd2lsbCBub3QgYmUKK3NlcnZpY2VkIHVudGlsIGFmdGVyIHRoZSBiYXJyaWVyIGhhcyBjb21wbGV0ZWQuIFRoaXMgaXMgdXNlZnVsIGZvciBoaWdoZXIKK2xldmVsIGNvbnRyb2wgb24gd3JpdGUgb3JkZXJpbmcsIGUuZyBmbHVzaGluZyBhIGxvZyBvZiBjb21taXR0ZWQgdXBkYXRlcwordG8gZGlzayBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgdXBkYXRlcyB0aGVtc2VsdmVzLgorCitBIGZsYWcgaW4gdGhlIGJpbyBzdHJ1Y3R1cmUsIEJJT19CQVJSSUVSIGlzIHVzZWQgdG8gaWRlbnRpZnkgYSBiYXJyaWVyIGkvby4KK1RoZSBnZW5lcmljIGkvbyBzY2hlZHVsZXIgd291bGQgbWFrZSBzdXJlIHRoYXQgaXQgcGxhY2VzIHRoZSBiYXJyaWVyIHJlcXVlc3QgYW5kCithbGwgb3RoZXIgcmVxdWVzdHMgY29taW5nIGFmdGVyIGl0IGFmdGVyIGFsbCB0aGUgcHJldmlvdXMgcmVxdWVzdHMgaW4gdGhlCitxdWV1ZS4gQmFycmllcnMgbWF5IGJlIGltcGxlbWVudGVkIGluIGRpZmZlcmVudCB3YXlzIGRlcGVuZGluZyBvbiB0aGUKK2RyaXZlci4gQSBTQ1NJIGRyaXZlciBmb3IgZXhhbXBsZSBjb3VsZCBtYWtlIHVzZSBvZiBvcmRlcmVkIHRhZ3MgdG8KK3ByZXNlcnZlIHRoZSBuZWNlc3Nhcnkgb3JkZXJpbmcgd2l0aCBhIGxvd2VyIGltcGFjdCBvbiB0aHJvdWdocHV0LiBGb3IgSURFCit0aGlzIG1pZ2h0IGJlIHR3byBzeW5jIGNhY2hlIGZsdXNoOiBhIHByZSBhbmQgcG9zdCBmbHVzaCB3aGVuIGVuY291bnRlcmluZworYSBiYXJyaWVyIHdyaXRlLgorCitUaGVyZSBpcyBhIHByb3Zpc2lvbiBmb3IgcXVldWVzIHRvIGluZGljYXRlIHdoYXQga2luZCBvZiBiYXJyaWVycyB0aGV5CitjYW4gcHJvdmlkZS4gVGhpcyBpcyBhcyBvZiB5ZXQgdW5tZXJnZWQsIGRldGFpbHMgd2lsbCBiZSBhZGRlZCBoZXJlIG9uY2UgaXQKK2lzIGluIHRoZSBrZXJuZWwuCisKKzEuMi4yIFJlcXVlc3QgUHJpb3JpdHkvTGF0ZW5jeQorCitUb2RvL1VuZGVyIGRpc2N1c3Npb246CitBcmphbidzIHByb3Bvc2VkIHJlcXVlc3QgcHJpb3JpdHkgc2NoZW1lIGFsbG93cyBoaWdoZXIgbGV2ZWxzIHNvbWUgYnJvYWQKKyAgY29udHJvbCAoaGlnaC9tZWQvbG93KSBvdmVyIHRoZSBwcmlvcml0eSAgb2YgYW4gaS9vIHJlcXVlc3QgdnMgb3RoZXIgcGVuZGluZworICByZXF1ZXN0cyBpbiB0aGUgcXVldWUuIEZvciBleGFtcGxlIGl0IGFsbG93cyByZWFkcyBmb3IgYnJpbmdpbmcgaW4gYW4KKyAgZXhlY3V0YWJsZSBwYWdlIG9uIGRlbWFuZCB0byBiZSBnaXZlbiBhIGhpZ2hlciBwcmlvcml0eSBvdmVyIHBlbmRpbmcgd3JpdGUKKyAgcmVxdWVzdHMgd2hpY2ggaGF2ZW4ndCBhZ2VkIHRvbyBtdWNoIG9uIHRoZSBxdWV1ZS4gUG90ZW50aWFsbHkgdGhpcyBwcmlvcml0eQorICBjb3VsZCBldmVuIGJlIGV4cG9zZWQgdG8gYXBwbGljYXRpb25zIGluIHNvbWUgbWFubmVyLCBwcm92aWRpbmcgaGlnaGVyIGxldmVsCisgIHR1bmFiaWxpdHkuIFRpbWUgYmFzZWQgYWdpbmcgYXZvaWRzIHN0YXJ2YXRpb24gb2YgbG93ZXIgcHJpb3JpdHkKKyAgcmVxdWVzdHMuIFNvbWUgYml0cyBpbiB0aGUgYmlfcncgZmxhZ3MgZmllbGQgaW4gdGhlIGJpbyBzdHJ1Y3R1cmUgYXJlCisgIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHRoaXMgcHJpb3JpdHkgaW5mb3JtYXRpb24uCisKKworMS4zIERpcmVjdCBBY2Nlc3MgdG8gTG93IGxldmVsIERldmljZS9Ecml2ZXIgQ2FwYWJpbGl0aWVzIChCeXBhc3MgbW9kZSkKKyAgICAoZS5nIERpYWdub3N0aWNzLCBTeXN0ZW1zIE1hbmFnZW1lbnQpCisKK1RoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIGhpZ2gtbGV2ZWwgY29kZSBuZWVkcyB0byBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8KK3RoZSBsb3cgbGV2ZWwgZGV2aWNlIGNhcGFiaWxpdGllcyBvciByZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBpc3N1ZSBjb21tYW5kcwordG8gdGhlIGRldmljZSBieXBhc3Npbmcgc29tZSBvZiB0aGUgaW50ZXJtZWRpYXRlIGkvbyBsYXllcnMuCitUaGVzZSBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIHNwZWNpYWwgY29udHJvbCBjb21tYW5kcyBpc3N1ZWQgdGhyb3VnaCBpb2N0bAoraW50ZXJmYWNlcywgb3IgY291bGQgYmUgcmF3IHJlYWQvd3JpdGUgY29tbWFuZHMgdGhhdCBzdHJlc3MgdGhlIGRyaXZlJ3MKK2NhcGFiaWxpdGllcyBmb3IgY2VydGFpbiBraW5kcyBvZiBmaXRuZXNzIHRlc3RzLiBIYXZpbmcgZGlyZWN0IGludGVyZmFjZXMgYXQKK211bHRpcGxlIGxldmVscyB3aXRob3V0IGhhdmluZyB0byBwYXNzIHRocm91Z2ggdXBwZXIgbGF5ZXJzIG1ha2VzCitpdCBwb3NzaWJsZSB0byBwZXJmb3JtIGJvdHRvbSB1cCB2YWxpZGF0aW9uIG9mIHRoZSBpL28gcGF0aCwgbGF5ZXIgYnkKK2xheWVyLCBzdGFydGluZyBmcm9tIHRoZSBtZWRpYS4KKworVGhlIG5vcm1hbCBpL28gc3VibWlzc2lvbiBpbnRlcmZhY2VzLCBlLmcgc3VibWl0X2JpbywgY291bGQgYmUgYnlwYXNzZWQKK2ZvciBzcGVjaWFsbHkgY3JhZnRlZCByZXF1ZXN0cyB3aGljaCBzdWNoIGlvY3RsIG9yIGRpYWdub3N0aWNzCitpbnRlcmZhY2VzIHdvdWxkIHR5cGljYWxseSB1c2UsIGFuZCB0aGUgZWxldmF0b3IgYWRkX3JlcXVlc3Qgcm91dGluZQorY2FuIGluc3RlYWQgYmUgdXNlZCB0byBkaXJlY3RseSBpbnNlcnQgc3VjaCByZXF1ZXN0cyBpbiB0aGUgcXVldWUgb3IgcHJlZmVyYWJseQordGhlIGJsa19kb19ycSByb3V0aW5lIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSByZXF1ZXN0IG9uIHRoZSBxdWV1ZSBhbmQKK3dhaXQgZm9yIGNvbXBsZXRpb24uIEFsdGVybmF0aXZlbHksIHNvbWV0aW1lcyB0aGUgY2FsbGVyIG1pZ2h0IGp1c3QKK2ludm9rZSBhIGxvd2VyIGxldmVsIGRyaXZlciBzcGVjaWZpYyBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVxdWVzdCBhcyBhCitwYXJhbWV0ZXIuCisKK0lmIHRoZSByZXF1ZXN0IGlzIGEgbWVhbnMgZm9yIHBhc3Npbmcgb24gc3BlY2lhbCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGgKK3RoZSBjb21tYW5kLCB0aGVuIHN1Y2ggaW5mb3JtYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LT5zcGVjaWFsCitmaWVsZCAocmF0aGVyIHRoYW4gbWlzdXNlIHRoZSByZXF1ZXN0LT5idWZmZXIgZmllbGQgd2hpY2ggaXMgbWVhbnQgZm9yIHRoZQorcmVxdWVzdCBkYXRhIGJ1ZmZlcidzIHZpcnR1YWwgbWFwcGluZykuCisKK0ZvciBwYXNzaW5nIHJlcXVlc3QgZGF0YSwgdGhlIGNhbGxlciBtdXN0IGJ1aWxkIHVwIGEgYmlvIGRlc2NyaXB0b3IKK3JlcHJlc2VudGluZyB0aGUgY29uY2VybmVkIG1lbW9yeSBidWZmZXIgaWYgdGhlIHVuZGVybHlpbmcgZHJpdmVyIGludGVycHJldHMKK2JpbyBzZWdtZW50cyBvciB1c2VzIHRoZSBibG9jayBsYXllciBlbmQqcmVxdWVzdCogZnVuY3Rpb25zIGZvciBpL28KK2NvbXBsZXRpb24uIEFsdGVybmF0aXZlbHkgb25lIGNvdWxkIGRpcmVjdGx5IHVzZSB0aGUgcmVxdWVzdC0+YnVmZmVyIGZpZWxkIHRvCitzcGVjaWZ5IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciwgaWYgdGhlIGRyaXZlciBleHBlY3RzIGJ1ZmZlcgorYWRkcmVzc2VzIHBhc3NlZCBpbiB0aGlzIHdheSBhbmQgaWdub3JlcyBiaW8gZW50cmllcyBmb3IgdGhlIHJlcXVlc3QgdHlwZQoraW52b2x2ZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGRyaXZlciB3b3VsZCBtb2RpZnkgYW5kIG1hbmFnZSB0aGUKK3JlcXVlc3QtPmJ1ZmZlciwgcmVxdWVzdC0+c2VjdG9yIGFuZCByZXF1ZXN0LT5ucl9zZWN0b3JzIG9yCityZXF1ZXN0LT5jdXJyZW50X25yX3NlY3RvcnMgZmllbGRzIGl0c2VsZiByYXRoZXIgdGhhbiB1c2luZyB0aGUgYmxvY2sgbGF5ZXIKK2VuZF9yZXF1ZXN0IG9yIGVuZF90aGF0X3JlcXVlc3RfZmlyc3QgY29tcGxldGlvbiBpbnRlcmZhY2VzLgorKFNlZSAyLjMgb3IgRG9jdW1lbnRhdGlvbi9ibG9jay9yZXF1ZXN0LnR4dCBmb3IgYSBicmllZiBleHBsYW5hdGlvbiBvZgordGhlIHJlcXVlc3Qgc3RydWN0dXJlIGZpZWxkcykKKworW1RCRDogZW5kX3RoYXRfcmVxdWVzdF9sYXN0IHNob3VsZCBiZSB1c2FibGUgZXZlbiBpbiB0aGlzIGNhc2U7CitQZXJoYXBzIGFuIGVuZF90aGF0X2RpcmVjdF9yZXF1ZXN0X2ZpcnN0IHJvdXRpbmUgY291bGQgYmUgaW1wbGVtZW50ZWQgdG8gbWFrZQoraGFuZGxpbmcgZGlyZWN0IHJlcXVlc3RzIGVhc2llciBmb3Igc3VjaCBkcml2ZXJzOyBBbHNvIGZvciBkcml2ZXJzIHRoYXQKK2V4cGVjdCBiaW9zLCBhIGhlbHBlciBmdW5jdGlvbiBjb3VsZCBiZSBwcm92aWRlZCBmb3Igc2V0dGluZyB1cCBhIGJpbworY29ycmVzcG9uZGluZyB0byBhIGRhdGEgYnVmZmVyXQorCis8SkVOUzogSSBkb250IHVuZGVyc3RhbmQgdGhlIGFib3ZlLCB3aHkgaXMgZW5kX3RoYXRfcmVxdWVzdF9maXJzdCgpIG5vdAordXNhYmxlPyBPciBfbGFzdCBmb3IgdGhhdCBtYXR0ZXIuIEkgbXVzdCBiZSBtaXNzaW5nIHNvbWV0aGluZz4KKzxTVVA6IFdoYXQgSSBtZWFudCBoZXJlIHdhcyB0aGF0IGlmIHRoZSByZXF1ZXN0IGRvZXNuJ3QgaGF2ZSBhIGJpbywgdGhlbgorIGVuZF90aGF0X3JlcXVlc3RfZmlyc3QgZG9lc24ndCBtb2RpZnkgbnJfc2VjdG9ycyBvciBjdXJyZW50X25yX3NlY3RvcnMsCisgYW5kIGhlbmNlIGNhbid0IGJlIHVzZWQgZm9yIGFkdmFuY2luZyByZXF1ZXN0IHN0YXRlIHNldHRpbmdzIG9uIHRoZQorIGNvbXBsZXRpb24gb2YgcGFydGlhbCB0cmFuc2ZlcnMuIFRoZSBkcml2ZXIgaGFzIHRvIG1vZGlmeSB0aGVzZSBmaWVsZHMgCisgZGlyZWN0bHkgYnkgaGFuZC4KKyBUaGlzIGlzIGJlY2F1c2UgZW5kX3RoYXRfcmVxdWVzdF9maXJzdCBvbmx5IGl0ZXJhdGVzIG92ZXIgdGhlIGJpbyBsaXN0LAorIGFuZCBhbHdheXMgcmV0dXJucyAwIGlmIHRoZXJlIGFyZSBub25lIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4KKyBfbGFzdCB3b3JrcyBPSyBpbiB0aGlzIGNhc2UsIGFuZCBpcyBub3QgYSBwcm9ibGVtLCBhcyBJIG1lbnRpb25lZCBlYXJsaWVyCis+CisKKzEuMy4xIFByZS1idWlsdCBDb21tYW5kcworCitBIHJlcXVlc3QgY2FuIGJlIGNyZWF0ZWQgd2l0aCBhIHByZS1idWlsdCBjdXN0b20gY29tbWFuZCAgdG8gYmUgc2VudCBkaXJlY3RseQordG8gdGhlIGRldmljZS4gVGhlIGNtZCBibG9jayBpbiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgaGFzIHJvb20gZm9yIGZpbGxpbmcKK2luIHRoZSBjb21tYW5kIGJ5dGVzLiAoaS5lIHJxLT5jbWQgaXMgbm93IDE2IGJ5dGVzIGluIHNpemUsIGFuZCBtZWFudCBmb3IKK2NvbW1hbmQgcHJlLWJ1aWxkaW5nLCBhbmQgdGhlIHR5cGUgb2YgdGhlIHJlcXVlc3QgaXMgbm93IGluZGljYXRlZAordGhyb3VnaCBycS0+ZmxhZ3MgaW5zdGVhZCBvZiB2aWEgcnEtPmNtZCkKKworVGhlIHJlcXVlc3Qgc3RydWN0dXJlIGZsYWdzIGNhbiBiZSBzZXQgdXAgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgcmVxdWVzdAoraW4gc3VjaCBjYXNlcyAoUkVRX1BDOiBkaXJlY3QgcGFja2V0IGNvbW1hbmQgcGFzc2VkIHRvIGRyaXZlciwgUkVRX0JMT0NLX1BDOgorcGFja2V0IGNvbW1hbmQgaXNzdWVkIHZpYSBibGtfZG9fcnEsIFJFUV9TUEVDSUFMOiBzcGVjaWFsIHJlcXVlc3QpLgorCitJdCBjYW4gaGVscCB0byBwcmUtYnVpbGQgZGV2aWNlIGNvbW1hbmRzIGZvciByZXF1ZXN0cyBpbiBhZHZhbmNlLgorRHJpdmVycyBjYW4gbm93IHNwZWNpZnkgYSByZXF1ZXN0IHByZXBhcmUgZnVuY3Rpb24gKHEtPnByZXBfcnFfZm4pIHRoYXQgdGhlCitibG9jayBsYXllciB3b3VsZCBpbnZva2UgdG8gcHJlLWJ1aWxkIGRldmljZSBjb21tYW5kcyBmb3IgYSBnaXZlbiByZXF1ZXN0LAorb3IgcGVyZm9ybSBvdGhlciBwcmVwYXJhdG9yeSBwcm9jZXNzaW5nIGZvciB0aGUgcmVxdWVzdC4gVGhpcyBpcyByb3V0aW5lIGlzCitjYWxsZWQgYnkgZWx2X25leHRfcmVxdWVzdCgpLCBpLmUuIHR5cGljYWxseSBqdXN0IGJlZm9yZSBzZXJ2aWNpbmcgYSByZXF1ZXN0LgorKFRoZSBwcmVwYXJlIGZ1bmN0aW9uIHdvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIHJlcXVlc3RzIHRoYXQgaGF2ZSBSRVFfRE9OVFBSRVAKK2VuYWJsZWQpCisKK0FzaWRlOgorICBQcmUtYnVpbGRpbmcgY291bGQgcG9zc2libHkgZXZlbiBiZSBkb25lIGVhcmx5LCBpLmUgYmVmb3JlIHBsYWNpbmcgdGhlCisgIHJlcXVlc3Qgb24gdGhlIHF1ZXVlLCByYXRoZXIgdGhhbiBjb25zdHJ1Y3QgdGhlIGNvbW1hbmQgb24gdGhlIGZseSBpbiB0aGUKKyAgZHJpdmVyIHdoaWxlIHNlcnZpY2luZyB0aGUgcmVxdWVzdCBxdWV1ZSB3aGVuIGl0IG1heSBhZmZlY3QgbGF0ZW5jaWVzIGluCisgIGludGVycnVwdCBjb250ZXh0IG9yIHJlc3BvbnNpdmVuZXNzIGluIGdlbmVyYWwuIE9uZSB3YXkgdG8gYWRkIGVhcmx5CisgIHByZS1idWlsZGluZyB3b3VsZCBiZSB0byBkbyBpdCB3aGVuZXZlciB3ZSBmYWlsIHRvIG1lcmdlIG9uIGEgcmVxdWVzdC4KKyAgTm93IFJFUV9OT01FUkdFIGlzIHNldCBpbiB0aGUgcmVxdWVzdCBmbGFncyB0byBza2lwIHRoaXMgb25lIGluIHRoZSBmdXR1cmUsCisgIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBub3QgY2hhbmdlIGJlZm9yZSB3ZSBmZWVkIGl0IHRvIHRoZSBkZXZpY2UuIFNvCisgIHRoZSBwcmUtYnVpbGRlciBob29rIGNhbiBiZSBpbnZva2VkIHRoZXJlLgorCisKKzIuIEZsZXhpYmxlIGFuZCBnZW5lcmljIGJ1dCBtaW5pbWFsaXN0IGkvbyBzdHJ1Y3R1cmUvZGVzY3JpcHRvci4KKworMi4xIFJlYXNvbiBmb3IgYSBuZXcgc3RydWN0dXJlIGFuZCByZXF1aXJlbWVudHMgYWRkcmVzc2VkCisKK1ByaW9yIHRvIDIuNSwgYnVmZmVyIGhlYWRzIHdlcmUgdXNlZCBhcyB0aGUgdW5pdCBvZiBpL28gYXQgdGhlIGdlbmVyaWMgYmxvY2sKK2xheWVyLCBhbmQgdGhlIGxvdyBsZXZlbCByZXF1ZXN0IHN0cnVjdHVyZSB3YXMgYXNzb2NpYXRlZCB3aXRoIGEgY2hhaW4gb2YKK2J1ZmZlciBoZWFkcyBmb3IgYSBjb250aWd1b3VzIGkvbyByZXF1ZXN0LiBUaGlzIGxlZCB0byBjZXJ0YWluIGluZWZmaWNpZW5jaWVzCit3aGVuIGl0IGNhbWUgdG8gbGFyZ2UgaS9vIHJlcXVlc3RzIGFuZCByZWFkdi93cml0ZXYgc3R5bGUgb3BlcmF0aW9ucywgYXMgaXQKK2ZvcmNlZCBzdWNoIHJlcXVlc3RzIHRvIGJlIGJyb2tlbiB1cCBpbnRvIHNtYWxsIGNodW5rcyBiZWZvcmUgYmVpbmcgcGFzc2VkCitvbiB0byB0aGUgZ2VuZXJpYyBibG9jayBsYXllciwgb25seSB0byBiZSBtZXJnZWQgYnkgdGhlIGkvbyBzY2hlZHVsZXIKK3doZW4gdGhlIHVuZGVybHlpbmcgZGV2aWNlIHdhcyBjYXBhYmxlIG9mIGhhbmRsaW5nIHRoZSBpL28gaW4gb25lIHNob3QuCitBbHNvLCB1c2luZyB0aGUgYnVmZmVyIGhlYWQgYXMgYW4gaS9vIHN0cnVjdHVyZSBmb3IgaS9vcyB0aGF0IGRpZG4ndCBvcmlnaW5hdGUKK2Zyb20gdGhlIGJ1ZmZlciBjYWNoZSB1bmVjZXNzYXJpbHkgYWRkZWQgdG8gdGhlIHdlaWdodCBvZiB0aGUgZGVzY3JpcHRvcnMKK3doaWNoIHdlcmUgZ2VuZXJhdGVkIGZvciBlYWNoIHN1Y2ggY2h1bmsuCisKK1RoZSBmb2xsb3dpbmcgd2VyZSBzb21lIG9mIHRoZSBnb2FscyBhbmQgZXhwZWN0YXRpb25zIGNvbnNpZGVyZWQgaW4gdGhlCityZWRlc2lnbiBvZiB0aGUgYmxvY2sgaS9vIGRhdGEgc3RydWN0dXJlIGluIDIuNS4KKworaS4gIFNob3VsZCBiZSBhcHByb3ByaWF0ZSBhcyBhIGRlc2NyaXB0b3IgZm9yIGJvdGggcmF3IGFuZCBidWZmZXJlZCBpL28gIC0KKyAgICBhdm9pZCBjYWNoZSByZWxhdGVkIGZpZWxkcyB3aGljaCBhcmUgaXJyZWxldmFudCBpbiB0aGUgZGlyZWN0L3BhZ2UgaS9vIHBhdGgsCisgICAgb3IgZmlsZXN5c3RlbSBibG9jayBzaXplIGFsaWdubWVudCByZXN0cmljdGlvbnMgd2hpY2ggbWF5IG5vdCBiZSByZWxldmFudAorICAgIGZvciByYXcgaS9vLgoraWkuIEFiaWxpdHkgdG8gcmVwcmVzZW50IGhpZ2gtbWVtb3J5IGJ1ZmZlcnMgKHdoaWNoIGRvIG5vdCBoYXZlIGEgdmlydHVhbAorICAgIGFkZHJlc3MgbWFwcGluZyBpbiBrZXJuZWwgYWRkcmVzcyBzcGFjZSkuCitpaWkuQWJpbGl0eSB0byByZXByZXNlbnQgbGFyZ2UgaS9vcyB3L28gdW5lY2Vzc2FyaWx5IGJyZWFraW5nIHRoZW0gdXAgKGkuZQorICAgIGdyZWF0ZXIgdGhhbiBQQUdFX1NJWkUgY2h1bmtzIGluIG9uZSBzaG90KQoraXYuIEF0IHRoZSBzYW1lIHRpbWUsIGFiaWxpdHkgdG8gcmV0YWluIGluZGVwZW5kZW50IGlkZW50aXR5IG9mIGkvb3MgZnJvbQorICAgIGRpZmZlcmVudCBzb3VyY2VzIG9yIGkvbyB1bml0cyByZXF1aXJpbmcgaW5kaXZpZHVhbCBjb21wbGV0aW9uIChlLmcuIGZvcgorICAgIGxhdGVuY3kgcmVhc29ucykKK3YuICBBYmlsaXR5IHRvIHJlcHJlc2VudCBhbiBpL28gaW52b2x2aW5nIG11bHRpcGxlIHBoeXNpY2FsIG1lbW9yeSBzZWdtZW50cworICAgIChpbmNsdWRpbmcgbm9uLXBhZ2UgYWxpZ25lZCBwYWdlIGZyYWdtZW50cywgYXMgc3BlY2lmaWVkIHZpYSByZWFkdi93cml0ZXYpCisgICAgd2l0aG91dCB1bmVjZXNzYXJpbHkgYnJlYWtpbmcgaXQgdXAsIGlmIHRoZSB1bmRlcmx5aW5nIGRldmljZSBpcyBjYXBhYmxlIG9mCisgICAgaGFuZGxpbmcgaXQuCit2aS4gUHJlZmVyYWJseSBzaG91bGQgYmUgYmFzZWQgb24gYSBtZW1vcnkgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUKKyAgICBwYXNzZWQgYXJvdW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzdWJzeXN0ZW1zIG9yIGxheWVycywgbWF5YmUgZXZlbgorICAgIG5ldHdvcmtpbmcsIHdpdGhvdXQgZHVwbGljYXRpb24gb3IgZXh0cmEgY29waWVzIG9mIGRhdGEvZGVzY3JpcHRvciBmaWVsZHMKKyAgICB0aGVtc2VsdmVzIGluIHRoZSBwcm9jZXNzCit2aWkuQWJpbGl0eSB0byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IG9mIHNwbGl0cy9tZXJnZXMgYXMgdGhlIHN0cnVjdHVyZSBwYXNzZXMKKyAgICB0aHJvdWdoIGxheWVyZWQgZHJpdmVycyAobHZtLCBtZCwgZXZtcyksIHdpdGggbWluaW1hbCBvdmVyaGVhZC4KKworVGhlIHNvbHV0aW9uIHdhcyB0byBkZWZpbmUgYSBuZXcgc3RydWN0dXJlIChiaW8pICBmb3IgdGhlIGJsb2NrIGxheWVyLAoraW5zdGVhZCBvZiB1c2luZyB0aGUgYnVmZmVyIGhlYWQgc3RydWN0dXJlIChiaCkgZGlyZWN0bHksIHRoZSBpZGVhIGJlaW5nCithdm9pZGFuY2Ugb2Ygc29tZSBhc3NvY2lhdGVkIGJhZ2dhZ2UgYW5kIGxpbWl0YXRpb25zLiBUaGUgYmlvIHN0cnVjdHVyZQoraXMgdW5pZm9ybWx5IHVzZWQgZm9yIGFsbCBpL28gYXQgdGhlIGJsb2NrIGxheWVyIDsgaXQgZm9ybXMgYSBwYXJ0IG9mIHRoZQorYmggc3RydWN0dXJlIGZvciBidWZmZXJlZCBpL28sIGFuZCBpbiB0aGUgY2FzZSBvZiByYXcvZGlyZWN0IGkvbyBraW9idWZzIGFyZQorbWFwcGVkIHRvIGJpbyBzdHJ1Y3R1cmVzLgorCisyLjIgVGhlIGJpbyBzdHJ1Y3QKKworVGhlIGJpbyBzdHJ1Y3R1cmUgdXNlcyBhIHZlY3RvciByZXByZXNlbnRhdGlvbiBwb2ludGluZyB0byBhbiBhcnJheSBvZiB0dXBsZXMKK29mIDxwYWdlLCBvZmZzZXQsIGxlbj4gdG8gZGVzY3JpYmUgdGhlIGkvbyBidWZmZXIsIGFuZCBoYXMgdmFyaW91cyBvdGhlcgorZmllbGRzIGRlc2NyaWJpbmcgaS9vIHBhcmFtZXRlcnMgYW5kIHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUgbWFpbnRhaW5lZCBmb3IKK3BlcmZvcm1pbmcgdGhlIGkvby4KKworTm90aWNlIHRoYXQgdGhpcyByZXByZXNlbnRhdGlvbiBtZWFucyB0aGF0IGEgYmlvIGhhcyBubyB2aXJ0dWFsIGFkZHJlc3MKK21hcHBpbmcgYXQgYWxsICh1bmxpa2UgYnVmZmVyIGhlYWRzKS4KKworc3RydWN0IGJpb192ZWMgeworICAgICAgIHN0cnVjdCBwYWdlICAgICAqYnZfcGFnZTsKKyAgICAgICB1bnNpZ25lZCBzaG9ydCAgYnZfbGVuOworICAgICAgIHVuc2lnbmVkIHNob3J0ICBidl9vZmZzZXQ7Cit9OworCisvKgorICogbWFpbiB1bml0IG9mIEkvTyBmb3IgdGhlIGJsb2NrIGxheWVyIGFuZCBsb3dlciBsYXllcnMgKGllIGRyaXZlcnMpCisgKi8KK3N0cnVjdCBiaW8geworICAgICAgIHNlY3Rvcl90ICAgICAgICAgICAgYmlfc2VjdG9yOworICAgICAgIHN0cnVjdCBiaW8gICAgICAgICAgKmJpX25leHQ7ICAgIC8qIHJlcXVlc3QgcXVldWUgbGluayAqLworICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJpX2JkZXY7CS8qIHRhcmdldCBkZXZpY2UgKi8KKyAgICAgICB1bnNpZ25lZCBsb25nICAgICAgIGJpX2ZsYWdzOyAgICAvKiBzdGF0dXMsIGNvbW1hbmQsIGV0YyAqLworICAgICAgIHVuc2lnbmVkIGxvbmcgICAgICAgYmlfcnc7ICAgICAgIC8qIGxvdyBiaXRzOiByL3csIGhpZ2g6IHByaW9yaXR5ICovCisKKyAgICAgICB1bnNpZ25lZCBpbnQJYmlfdmNudDsgICAgIC8qIGhvdyBtYXkgYmlvX3ZlYydzICovCisgICAgICAgdW5zaWduZWQgaW50CWJpX2lkeDsJCS8qIGN1cnJlbnQgaW5kZXggaW50byBiaW9fdmVjIGFycmF5ICovCisKKyAgICAgICB1bnNpZ25lZCBpbnQJYmlfc2l6ZTsgICAgIC8qIHRvdGFsIHNpemUgaW4gYnl0ZXMgKi8KKyAgICAgICB1bnNpZ25lZCBzaG9ydCAJYmlfcGh5c19zZWdtZW50czsgLyogc2VnbWVudHMgYWZ0ZXIgcGh5c2FkZHIgY29hbGVzY2UqLworICAgICAgIHVuc2lnbmVkIHNob3J0CWJpX2h3X3NlZ21lbnRzOyAvKiBzZWdtZW50cyBhZnRlciBETUEgcmVtYXBwaW5nICovCisgICAgICAgdW5zaWduZWQgaW50CWJpX21heDsJICAgICAvKiBtYXggYmlvX3ZlY3Mgd2UgY2FuIGhvbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGFzIGluZGV4IGludG8gcG9vbCAqLworICAgICAgIHN0cnVjdCBiaW9fdmVjICAgKmJpX2lvX3ZlYzsgIC8qIHRoZSBhY3R1YWwgdmVjIGxpc3QgKi8KKyAgICAgICBiaW9fZW5kX2lvX3QJKmJpX2VuZF9pbzsgIC8qIGJpX2VuZF9pbyAoYmlvKSAqLworICAgICAgIGF0b21pY190CQliaV9jbnQ7CSAgICAgLyogcGluIGNvdW50OiBmcmVlIHdoZW4gaXQgaGl0cyB6ZXJvICovCisgICAgICAgdm9pZCAgICAgICAgICAgICAqYmlfcHJpdmF0ZTsKKyAgICAgICBiaW9fZGVzdHJ1Y3Rvcl90ICpiaV9kZXN0cnVjdG9yOyAvKiBiaV9kZXN0cnVjdG9yIChiaW8pICovCit9OworCitXaXRoIHRoaXMgbXVsdGlwYWdlIGJpbyBkZXNpZ246CisKKy0gTGFyZ2UgaS9vcyBjYW4gYmUgc2VudCBkb3duIGluIG9uZSBnbyB1c2luZyBhIGJpb192ZWMgbGlzdCBjb25zaXN0aW5nCisgIG9mIGFuIGFycmF5IG9mIDxwYWdlLCBvZmZzZXQsIGxlbj4gZnJhZ21lbnRzIChzaW1pbGFyIHRvIHRoZSB3YXkgZnJhZ21lbnRzCisgIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgemVyby1jb3B5IG5ldHdvcmsgY29kZSkKKy0gU3BsaXR0aW5nIG9mIGFuIGkvbyByZXF1ZXN0IGFjcm9zcyBtdWx0aXBsZSBkZXZpY2VzIChhcyBpbiB0aGUgY2FzZSBvZgorICBsdm0gb3IgcmFpZCkgaXMgYWNoaWV2ZWQgYnkgY2xvbmluZyB0aGUgYmlvICh3aGVyZSB0aGUgY2xvbmUgcG9pbnRzIHRvCisgIHRoZSBzYW1lIGJpX2lvX3ZlYyBhcnJheSwgYnV0IHdpdGggdGhlIGluZGV4IGFuZCBzaXplIGFjY29yZGluZ2x5IG1vZGlmaWVkKQorLSBBIGxpbmtlZCBsaXN0IG9mIGJpb3MgaXMgdXNlZCBhcyBiZWZvcmUgZm9yIHVucmVsYXRlZCBtZXJnZXMgKCopIC0gdGhpcworICBhdm9pZHMgcmVhbGxvY3MgYW5kIG1ha2VzIGluZGVwZW5kZW50IGNvbXBsZXRpb25zIGVhc2llciB0byBoYW5kbGUuCistIENvZGUgdGhhdCB0cmF2ZXJzZXMgdGhlIHJlcSBsaXN0IG5lZWRzIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuCisgIHNlZ21lbnRzIG9mIGEgcmVxdWVzdCAoYmlvX2Zvcl9lYWNoX3NlZ21lbnQpIGFuZCB0aGUgZGlzdGluY3QgY29tcGxldGlvbgorICB1bml0cy9iaW9zIChycV9mb3JfZWFjaF9iaW8pLgorLSBEcml2ZXJzIHdoaWNoIGNhbid0IHByb2Nlc3MgYSBsYXJnZSBiaW8gaW4gb25lIHNob3QgY2FuIHVzZSB0aGUgYmlfaWR4CisgIGZpZWxkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgYmlvX3ZlYyBlbnRyeSB0byBwcm9jZXNzLgorICAoZS5nIGEgMU1CIGJpb192ZWMgbmVlZHMgdG8gYmUgaGFuZGxlZCBpbiBtYXggMTI4a0IgY2h1bmtzIGZvciBJREUpCisgIFtUQkQ6IFNob3VsZCBwcmVmZXJhYmx5IGFsc28gaGF2ZSBhIGJpX3ZvZmZzZXQgYW5kIGJpX3ZsZW4gdG8gYXZvaWQgbW9kaWZ5aW5nCisgICBiaV9vZmZzZXQgYW4gbGVuIGZpZWxkc10KKworKCopIHVucmVsYXRlZCBtZXJnZXMgLS0gYSByZXF1ZXN0IGVuZHMgdXAgY29udGFpbmluZyB0d28gb3IgbW9yZSBiaW9zIHRoYXQKKyAgICBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKK2JpX2VuZF9pbygpIGkvbyBjYWxsYmFjayBnZXRzIGNhbGxlZCBvbiBpL28gY29tcGxldGlvbiBvZiB0aGUgZW50aXJlIGJpby4KKworQXQgYSBsb3dlciBsZXZlbCwgZHJpdmVycyBidWlsZCBhIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgZnJvbSB0aGUgbWVyZ2VkIGJpb3MuCitUaGUgc2NhdHRlciBnYXRoZXIgbGlzdCBpcyBpbiB0aGUgZm9ybSBvZiBhbiBhcnJheSBvZiA8cGFnZSwgb2Zmc2V0LCBsZW4+CitlbnRyaWVzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBkbWEgYWRkcmVzcyBtYXBwaW5ncyBmaWxsZWQgaW4gYXQgdGhlCithcHByb3ByaWF0ZSB0aW1lLiBBcyBhbiBvcHRpbWl6YXRpb24sIGNvbnRpZ3VvdXMgcGh5c2ljYWwgcGFnZXMgY2FuIGJlCitjb3ZlcmVkIGJ5IGEgc2luZ2xlIGVudHJ5IHdoZXJlIDxwYWdlPiByZWZlcnMgdG8gdGhlIGZpcnN0IHBhZ2UgYW5kIDxsZW4+Citjb3ZlcnMgdGhlIHJhbmdlIG9mIHBhZ2VzICh1cHRvIDE2IGNvbnRpZ3VvdXMgcGFnZXMgY291bGQgYmUgY292ZXJlZCB0aGlzCit3YXkpLiBUaGVyZSBpcyBhIGhlbHBlciByb3V0aW5lIChibGtfcnFfbWFwX3NnKSB3aGljaCBkcml2ZXJzIGNhbiB1c2UgdG8gYnVpbGQKK3RoZSBzZyBsaXN0LgorCitOb3RlOiBSaWdodCBub3cgdGhlIG9ubHkgdXNlciBvZiBiaW9zIHdpdGggbW9yZSB0aGFuIG9uZSBwYWdlIGlzIGxsX3J3X2tpbywKK3doaWNoIGluIHR1cm4gbWVhbnMgdGhhdCBvbmx5IHJhdyBJL08gdXNlcyBpdCAoZGlyZWN0IGkvbyBtYXkgbm90IHdvcmsKK3JpZ2h0IG5vdykuIFRoZSBpbnRlbnQgaG93ZXZlciBpcyB0byBlbmFibGUgY2x1c3RlcmluZyBvZiBwYWdlcyBldGMgdG8KK2JlY29tZSBwb3NzaWJsZS4gVGhlIHBhZ2VidWYgYWJzdHJhY3Rpb24gbGF5ZXIgZnJvbSBTR0kgYWxzbyB1c2VzIG11bHRpLXBhZ2UKK2Jpb3MsIGJ1dCB0aGF0IGlzIGN1cnJlbnRseSBub3QgaW5jbHVkZWQgaW4gdGhlIHN0b2NrIGRldmVsb3BtZW50IGtlcm5lbHMuCitUaGUgc2FtZSBpcyB0cnVlIG9mIEFuZHJldyBNb3J0b24ncyB3b3JrLWluLXByb2dyZXNzIG11bHRpcGFnZSBiaW8gd3JpdGVvdXQgCithbmQgcmVhZGFoZWFkIHBhdGNoZXMuCisKKzIuMyBDaGFuZ2VzIGluIHRoZSBSZXF1ZXN0IFN0cnVjdHVyZQorCitUaGUgcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IGdldHMgcGFzc2VkIGRvd24gdG8gbG93IGxldmVsCitkcml2ZXJzLiBUaGUgYmxvY2sgbGF5ZXIgbWFrZV9yZXF1ZXN0IGZ1bmN0aW9uIGJ1aWxkcyB1cCBhIHJlcXVlc3Qgc3RydWN0dXJlLAorcGxhY2VzIGl0IG9uIHRoZSBxdWV1ZSBhbmQgaW52b2tlcyB0aGUgZHJpdmVycyByZXF1ZXN0X2ZuLiBUaGUgZHJpdmVyIG1ha2VzCit1c2Ugb2YgYmxvY2sgbGF5ZXIgaGVscGVyIHJvdXRpbmUgZWx2X25leHRfcmVxdWVzdCB0byBwdWxsIHRoZSBuZXh0IHJlcXVlc3QKK29mZiB0aGUgcXVldWUuIENvbnRyb2wgb3IgZGlhZ25vc3RpYyBmdW5jdGlvbnMgbWlnaHQgYnlwYXNzIGJsb2NrIGFuZCBkaXJlY3RseQoraW52b2tlIHVuZGVybHlpbmcgZHJpdmVyIGVudHJ5IHBvaW50cyBwYXNzaW5nIGluIGEgc3BlY2lhbGx5IGNvbnN0cnVjdGVkCityZXF1ZXN0IHN0cnVjdHVyZS4KKworT25seSBzb21lIHJlbGV2YW50IGZpZWxkcyAobWFpbmx5IHRob3NlIHdoaWNoIGNoYW5nZWQgb3IgbWF5IGJlIHJlZmVycmVkCit0byBpbiBzb21lIG9mIHRoZSBkaXNjdXNzaW9uIGhlcmUpIGFyZSBsaXN0ZWQgYmVsb3csIG5vdCBuZWNlc3NhcmlseSBpbgordGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgaW4gdGhlIHN0cnVjdHVyZSAoc2VlIGluY2x1ZGUvbGludXgvYmxrZGV2LmgpCitSZWZlciB0byBEb2N1bWVudGF0aW9uL2Jsb2NrL3JlcXVlc3QudHh0IGZvciBkZXRhaWxzIGFib3V0IGFsbCB0aGUgcmVxdWVzdAorc3RydWN0dXJlIGZpZWxkcyBhbmQgYSBxdWljayByZWZlcmVuY2UgYWJvdXQgdGhlIGxheWVycyB3aGljaCBhcmUKK3N1cHBvc2VkIHRvIHVzZSBvciBtb2RpZnkgdGhvc2UgZmllbGRzLgorCitzdHJ1Y3QgcmVxdWVzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZWxpc3Q7ICAvKiBOb3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgYWNjZXNzZWQgYnkKKwkJCQkJdGhlIGRyaXZlci4KKwkJCQkJVXNlZCBieSBxLT5lbHZfbmV4dF9yZXF1ZXN0X2ZuCisJCQkJCXJxLT5xdWV1ZSBpcyBnb25lCisJCQkJCSovCisJLgorCS4KKwl1bnNpZ25lZCBjaGFyIGNtZFsxNl07IC8qIHByZWJ1aWx0IGNvbW1hbmQgZGF0YSBibG9jayAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgLyogYWxzbyBpbmNsdWRlcyBlYXJsaWVyIHJxLT5jbWQgc2V0dGluZ3MgKi8KKwkuCisJLgorCXNlY3Rvcl90IHNlY3RvcjsgLyogdGhpcyBmaWVsZCBpcyBub3cgb2YgdHlwZSBzZWN0b3JfdCBpbnN0ZWFkIG9mIGludAorCQkJICAgIHByZXBhcmF0aW9uIGZvciA2NCBiaXQgc2VjdG9ycyAqLworCS4KKwkuCisKKwkvKiBOdW1iZXIgb2Ygc2NhdHRlci1nYXRoZXIgRE1BIGFkZHIrbGVuIHBhaXJzIGFmdGVyCisJICogcGh5c2ljYWwgYWRkcmVzcyBjb2FsZXNjaW5nIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBucl9waHlzX3NlZ21lbnRzOworCisJLyogTnVtYmVyIG9mIHNjYXR0ZXItZ2F0aGVyIGFkZHIrbGVuIHBhaXJzIGFmdGVyCisJICogcGh5c2ljYWwgYW5kIERNQSByZW1hcHBpbmcgaGFyZHdhcmUgY29hbGVzY2luZyBpcyBwZXJmb3JtZWQuCisJICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHNjYXR0ZXItZ2F0aGVyIGVudHJpZXMgdGhlIGRyaXZlcgorCSAqIHdpbGwgYWN0dWFsbHkgaGF2ZSB0byBkZWFsIHdpdGggYWZ0ZXIgRE1BIG1hcHBpbmcgaXMgZG9uZS4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBucl9od19zZWdtZW50czsKKworCS8qIFZhcmlvdXMgc2VjdG9yIGNvdW50cyAqLworCXVuc2lnbmVkIGxvbmcgbnJfc2VjdG9yczsgIC8qIG5vLiBvZiBzZWN0b3JzIGxlZnQ6IGRyaXZlciBtb2RpZmlhYmxlICovCisJdW5zaWduZWQgbG9uZyBoYXJkX25yX3NlY3RvcnM7ICAvKiBibG9jayBpbnRlcm5hbCBjb3B5IG9mIGFib3ZlICovCisJdW5zaWduZWQgaW50IGN1cnJlbnRfbnJfc2VjdG9yczsgLyogbm8uIG9mIHNlY3RvcnMgbGVmdCBpbiB0aGUKKwkJCQkJICAgY3VycmVudCBzZWdtZW50OmRyaXZlciBtb2RpZmlhYmxlICovCisJdW5zaWduZWQgbG9uZyBoYXJkX2N1cl9zZWN0b3JzOyAvKiBibG9jayBpbnRlcm5hbCBjb3B5IG9mIHRoZSBhYm92ZSAqLworCS4KKwkuCisJaW50IHRhZzsJLyogY29tbWFuZCB0YWcgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QgKi8KKwl2b2lkICpzcGVjaWFsOyAgLyogc2FtZSBhcyBiZWZvcmUgKi8KKwljaGFyICpidWZmZXI7ICAgLyogdmFsaWQgb25seSBmb3IgbG93IG1lbW9yeSBidWZmZXJzIHVwdG8KKwkJCSBjdXJyZW50X25yX3NlY3RvcnMgKi8KKwkuCisJLgorCXN0cnVjdCBiaW8gKmJpbywgKmJpb3RhaWw7ICAvKiBiaW8gbGlzdCBpbnN0ZWFkIG9mIGJoICovCisJc3RydWN0IHJlcXVlc3RfbGlzdCAqcmw7Cit9CisJCitTZWUgdGhlIHJxX2ZsYWdfYml0cyBkZWZpbml0aW9ucyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIHZhcmlvdXMgZmxhZ3MKK2F2YWlsYWJsZS4gU29tZSBiaXRzIGFyZSB1c2VkIGJ5IHRoZSBibG9jayBsYXllciBvciBpL28gc2NoZWR1bGVyLgorCQorVGhlIGJlaGF2aW91ciBvZiB0aGUgdmFyaW91cyBzZWN0b3IgY291bnRzIGFyZSBhbG1vc3QgdGhlIHNhbWUgYXMgYmVmb3JlLAorZXhjZXB0IHRoYXQgc2luY2Ugd2UgaGF2ZSBtdWx0aS1zZWdtZW50IGJpb3MsIGN1cnJlbnRfbnJfc2VjdG9ycyByZWZlcnMKK3RvIHRoZSBudW1iZXJzIG9mIHNlY3RvcnMgaW4gdGhlIGN1cnJlbnQgc2VnbWVudCBiZWluZyBwcm9jZXNzZWQgd2hpY2ggY291bGQKK2JlIG9uZSBvZiB0aGUgbWFueSBzZWdtZW50cyBpbiB0aGUgY3VycmVudCBiaW8gKGkuZSBpL28gY29tcGxldGlvbiB1bml0KS4KK1RoZSBucl9zZWN0b3JzIHZhbHVlIHJlZmVycyB0byB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgaW4gdGhlIHdob2xlCityZXF1ZXN0IHRoYXQgcmVtYWluIHRvIGJlIHRyYW5zZmVycmVkIChubyBjaGFuZ2UpLiBUaGUgcHVycG9zZSBvZiB0aGUKK2hhcmRfeHh4IHZhbHVlcyBpcyBmb3IgYmxvY2sgdG8gcmVtZW1iZXIgdGhlc2UgY291bnRzIGV2ZXJ5IHRpbWUgaXQgaGFuZHMKK292ZXIgdGhlIHJlcXVlc3QgdG8gdGhlIGRyaXZlci4gVGhlc2UgdmFsdWVzIGFyZSB1cGRhdGVkIGJ5IGJsb2NrIG9uCitlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0LCBpLmUuIGV2ZXJ5IHRpbWUgdGhlIGRyaXZlciBjb21wbGV0ZXMgYSBwYXJ0IG9mIHRoZQordHJhbnNmZXIgYW5kIGludm9rZXMgYmxvY2sgZW5kKnJlcXVlc3QgaGVscGVycyB0byBtYXJrIHRoaXMuIFRoZQorZHJpdmVyIHNob3VsZCBub3QgbW9kaWZ5IHRoZXNlIHZhbHVlcy4gVGhlIGJsb2NrIGxheWVyIHNldHMgdXAgdGhlCitucl9zZWN0b3JzIGFuZCBjdXJyZW50X25yX3NlY3RvcnMgZmllbGRzIChiYXNlZCBvbiB0aGUgY29ycmVzcG9uZGluZworaGFyZF94eHggdmFsdWVzIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkKSBhbmQgdXBkYXRlcyBpdCBvbgorZXZlcnkgdHJhbnNmZXIgdGhhdCBpbnZva2VzIGVuZF90aGF0X3JlcXVlc3RfZmlyc3QuIEl0IGRvZXMgdGhlIHNhbWUgZm9yIHRoZQorYnVmZmVyLCBiaW8sIGJpby0+YmlfaWR4IGZpZWxkcyB0b28uCisKK1RoZSBidWZmZXIgZmllbGQgaXMganVzdCBhIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQKK29mIHRoZSBpL28gYnVmZmVyIGluIGNhc2VzIHdoZXJlIHRoZSBidWZmZXIgcmVzaWRlcyBpbiBsb3ctbWVtb3J5LiBGb3IgaGlnaAorbWVtb3J5IGkvbywgdGhpcyBmaWVsZCBpcyBub3QgdmFsaWQgYW5kIG11c3Qgbm90IGJlIHVzZWQgYnkgZHJpdmVycy4KKworQ29kZSB0aGF0IHNldHMgdXAgaXRzIG93biByZXF1ZXN0IHN0cnVjdHVyZXMgYW5kIHBhc3NlcyB0aGVtIGRvd24gdG8KK2EgZHJpdmVyIG5lZWRzIHRvIGJlIGNhcmVmdWwgYWJvdXQgaW50ZXJvcGVyYXRpb24gd2l0aCB0aGUgYmxvY2sgbGF5ZXIgaGVscGVyCitmdW5jdGlvbnMgd2hpY2ggdGhlIGRyaXZlciB1c2VzLiAoU2VjdGlvbiAxLjMpCisKKzMuIFVzaW5nIGJpb3MKKworMy4xIFNldHVwL1RlYXJkb3duCisKK1RoZXJlIGFyZSByb3V0aW5lcyBmb3IgbWFuYWdpbmcgdGhlIGFsbG9jYXRpb24sIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGFuZAorZnJlZWluZyBvZiBiaW9zIChiaW9fYWxsb2MsIGJpb19nZXQsIGJpb19wdXQpLgorCitUaGlzIG1ha2VzIHVzZSBvZiBJbmdvIE1vbG5hcidzIG1lbXBvb2wgaW1wbGVtZW50YXRpb24sIHdoaWNoIGVuYWJsZXMKK3N1YnN5c3RlbXMgbGlrZSBiaW8gdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlc2VydmUgbWVtb3J5IHBvb2xzIGZvciBndWFyYW50ZWVkCitkZWFkbG9jay1mcmVlIGFsbG9jYXRpb25zIGR1cmluZyBleHRyZW1lIFZNIGxvYWQuIEZvciBleGFtcGxlLCB0aGUgVk0KK3N1YnN5c3RlbSBtYWtlcyB1c2Ugb2YgdGhlIGJsb2NrIGxheWVyIHRvIHdyaXRlb3V0IGRpcnR5IHBhZ2VzIGluIG9yZGVyIHRvIGJlCithYmxlIHRvIGZyZWUgdXAgbWVtb3J5IHNwYWNlLCBhIGNhc2Ugd2hpY2ggbmVlZHMgY2FyZWZ1bCBoYW5kbGluZy4gVGhlCithbGxvY2F0aW9uIGxvZ2ljIGRyYXdzIGZyb20gdGhlIHByZWFsbG9jYXRlZCBlbWVyZ2VuY3kgcmVzZXJ2ZSBpbiBzaXR1YXRpb25zCit3aGVyZSBpdCBjYW5ub3QgYWxsb2NhdGUgdGhyb3VnaCBub3JtYWwgbWVhbnMuIElmIHRoZSBwb29sIGlzIGVtcHR5IGFuZCBpdAorY2FuIHdhaXQsIHRoZW4gaXQgd291bGQgdHJpZ2dlciBhY3Rpb24gdGhhdCB3b3VsZCBoZWxwIGZyZWUgdXAgbWVtb3J5IG9yCityZXBsZW5pc2ggdGhlIHBvb2wgKHdpdGhvdXQgZGVhZGxvY2tpbmcpIGFuZCB3YWl0IGZvciBhdmFpbGFiaWxpdHkgaW4gdGhlIHBvb2wuCitJZiBpdCBpcyBpbiBJUlEgY29udGV4dCwgYW5kIGhlbmNlIG5vdCBpbiBhIHBvc2l0aW9uIHRvIGRvIHRoaXMsIGFsbG9jYXRpb24KK2NvdWxkIGZhaWwgaWYgdGhlIHBvb2wgaXMgZW1wdHkuIEluIGdlbmVyYWwgbWVtcG9vbCBhbHdheXMgZmlyc3QgdHJpZXMgdG8KK3BlcmZvcm0gYWxsb2NhdGlvbiB3aXRob3V0IGhhdmluZyB0byB3YWl0LCBldmVuIGlmIGl0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUKK3Bvb2wgYXMgbG9uZyBpdCBpcyBub3QgbGVzcyB0aGF0IDUwJSBmdWxsLgorCitPbiBhIGZyZWUsIG1lbW9yeSBpcyByZWxlYXNlZCB0byB0aGUgcG9vbCBvciBkaXJlY3RseSBmcmVlZCBkZXBlbmRpbmcgb24KK3RoZSBjdXJyZW50IGF2YWlsYWJpbGl0eSBpbiB0aGUgcG9vbC4gVGhlIG1lbXBvb2wgaW50ZXJmYWNlIGxldHMgdGhlCitzdWJzeXN0ZW0gc3BlY2lmeSB0aGUgcm91dGluZXMgdG8gYmUgdXNlZCBmb3Igbm9ybWFsIGFsbG9jIGFuZCBmcmVlLiBJbiB0aGUKK2Nhc2Ugb2YgYmlvLCB0aGVzZSByb3V0aW5lcyBtYWtlIHVzZSBvZiB0aGUgc3RhbmRhcmQgc2xhYiBhbGxvY2F0b3IuCisKK1RoZSBjYWxsZXIgb2YgYmlvX2FsbG9jIGlzIGV4cGVjdGVkIHRvIHRha2VuIGNlcnRhaW4gc3RlcHMgdG8gYXZvaWQKK2RlYWRsb2NrcywgZS5nLiBhdm9pZCB0cnlpbmcgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkgZnJvbSB0aGUgcG9vbCB3aGlsZQorYWxyZWFkeSBob2xkaW5nIG1lbW9yeSBvYnRhaW5lZCBmcm9tIHRoZSBwb29sLgorW1RCRDogVGhpcyBpcyBhIHBvdGVudGlhbCBpc3N1ZSwgdGhvdWdoIGEgcmFyZSBwb3NzaWJpbGl0eQorIGluIHRoZSBib3VuY2UgYmlvIGFsbG9jYXRpb24gdGhhdCBoYXBwZW5zIGluIHRoZSBjdXJyZW50IGNvZGUsIHNpbmNlCisgaXQgZW5kcyB1cCBhbGxvY2F0aW5nIGEgc2Vjb25kIGJpbyBmcm9tIHRoZSBzYW1lIHBvb2wgd2hpbGUKKyBob2xkaW5nIHRoZSBvcmlnaW5hbCBiaW8gXQorCitNZW1vcnkgYWxsb2NhdGVkIGZyb20gdGhlIHBvb2wgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgd2l0aGluIGEgbGltaXRlZAorYW1vdW50IG9mIHRpbWUgKGluIHRoZSBjYXNlIG9mIGJpbywgdGhhdCB3b3VsZCBiZSBhZnRlciB0aGUgaS9vIGlzIGNvbXBsZXRlZCkuCitUaGlzIGVuc3VyZXMgdGhhdCBpZiBwYXJ0IG9mIHRoZSBwb29sIGhhcyBiZWVuIHVzZWQgdXAsIHNvbWUgd29yayAoaW4gdGhpcworY2FzZSBpL28pIG11c3QgYWxyZWFkeSBiZSBpbiBwcm9ncmVzcyBhbmQgbWVtb3J5IHdvdWxkIGJlIGF2YWlsYWJsZSB3aGVuIGl0CitpcyBvdmVyLiBJZiBhbGxvY2F0aW5nIGZyb20gbXVsdGlwbGUgcG9vbHMgaW4gdGhlIHNhbWUgY29kZSBwYXRoLCB0aGUgb3JkZXIKK29yIGhpZXJhcmNoeSBvZiBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGNvbnNpc3RlbnQsIGp1c3QgdGhlIHdheSBvbmUgZGVhbHMKK3dpdGggbXVsdGlwbGUgbG9ja3MuCisKK1RoZSBiaW9fYWxsb2Mgcm91dGluZSBhbHNvIG5lZWRzIHRvIGFsbG9jYXRlIHRoZSBiaW9fdmVjX2xpc3QgKGJ2ZWNfYWxsb2MoKSkKK2ZvciBhIG5vbi1jbG9uZSBiaW8uIFRoZXJlIGFyZSB0aGUgNiBwb29scyBzZXR1cCBmb3IgZGlmZmVyZW50IHNpemUgYmlvdmVjcywKK3NvIGJpb19hbGxvYyhnZnBfbWFzaywgbnJfaW92ZWNzKSB3aWxsIGFsbG9jYXRlIGEgdmVjX2xpc3Qgb2YgdGhlCitnaXZlbiBzaXplIGZyb20gdGhlc2Ugc2xhYnMuCisKK1RoZSBiaV9kZXN0cnVjdG9yKCkgcm91dGluZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSBiaW8KK2hhdmluZyBvcmlnaW5hdGVkIGZyb20gYSBkaWZmZXJlbnQgc291cmNlIChzZWUgbGF0ZXIgZGlzY3Vzc2lvbnMgb24KK24vdyB0byBibG9jayB0cmFuc2ZlcnMgYW5kIGt2ZWNfY2IpCisKK1RoZSBiaW9fZ2V0KCkgcm91dGluZSBtYXkgYmUgdXNlZCB0byBob2xkIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIGJpbyBwcmlvcgordG8gaS9vIHN1Ym1pc3Npb24sIGlmIHRoZSBiaW8gZmllbGRzIGFyZSBsaWtlbHkgdG8gYmUgYWNjZXNzZWQgYWZ0ZXIgdGhlCitpL28gaXMgaXNzdWVkIChzaW5jZSB0aGUgYmlvIG1heSBvdGhlcndpc2UgZ2V0IGZyZWVkIGluIGNhc2UgaS9vIGNvbXBsZXRpb24KK2hhcHBlbnMgaW4gdGhlIG1lYW50aW1lKS4KKworVGhlIGJpb19jbG9uZSgpIHJvdXRpbmUgbWF5IGJlIHVzZWQgdG8gZHVwbGljYXRlIGEgYmlvLCB3aGVyZSB0aGUgY2xvbmUKK3NoYXJlcyB0aGUgYmlvX3ZlY19saXN0IHdpdGggdGhlIG9yaWdpbmFsIGJpbyAoaS5lLiBib3RoIHBvaW50IHRvIHRoZQorc2FtZSBiaW9fdmVjX2xpc3QpLiBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSB1c2VkIGZvciBzcGxpdHRpbmcgaS9vIHJlcXVlc3RzCitpbiBsdm0gb3IgbWQuCisKKzMuMiBHZW5lcmljIGJpbyBoZWxwZXIgUm91dGluZXMKKworMy4yLjEgVHJhdmVyc2luZyBzZWdtZW50cyBhbmQgY29tcGxldGlvbiB1bml0cyBpbiBhIHJlcXVlc3QKKworVGhlIG1hY3JvcyBiaW9fZm9yX2VhY2hfc2VnbWVudCgpIGFuZCBycV9mb3JfZWFjaF9iaW8oKSBzaG91bGQgYmUgdXNlZCBmb3IKK3RyYXZlcnNpbmcgdGhlIGJpb3MgaW4gdGhlIHJlcXVlc3QgbGlzdCAoZHJpdmVycyBzaG91bGQgYXZvaWQgZGlyZWN0bHkKK3RyeWluZyB0byBkbyBpdCB0aGVtc2VsdmVzKS4gVXNpbmcgdGhlc2UgaGVscGVycyBzaG91bGQgYWxzbyBtYWtlIGl0IGVhc2llcgordG8gY29wZSB3aXRoIGJsb2NrIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZS4KKworCXJxX2Zvcl9lYWNoX2JpbyhiaW8sIHJxKQorCQliaW9fZm9yX2VhY2hfc2VnbWVudChiaW9fdmVjLCBiaW8sIGkpCisJCQkvKiBiaW9fdmVjIGlzIG5vdyBjdXJyZW50IHNlZ21lbnQgKi8KKworSS9PIGNvbXBsZXRpb24gY2FsbGJhY2tzIGFyZSBwZXItYmlvIHJhdGhlciB0aGFuIHBlci1zZWdtZW50LCBzbyBkcml2ZXJzCit0aGF0IHRyYXZlcnNlIGJpbyBjaGFpbnMgb24gY29tcGxldGlvbiBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBEcml2ZXJzCit3aGljaCBkb24ndCBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBzZWdtZW50cyBhbmQgY29tcGxldGlvbiB1bml0cyB3b3VsZAorbmVlZCB0byBiZSByZW9yZ2FuaXplZCB0byBzdXBwb3J0IG11bHRpLXNlZ21lbnQgYmlvcy4KKworMy4yLjIgU2V0dGluZyB1cCBETUEgc2NhdHRlcmxpc3RzCisKK1RoZSBibGtfcnFfbWFwX3NnKCkgaGVscGVyIHJvdXRpbmUgd291bGQgYmUgdXNlZCBmb3Igc2V0dGluZyB1cCBzY2F0dGVyCitnYXRoZXIgbGlzdHMgZnJvbSBhIHJlcXVlc3QsIHNvIGEgZHJpdmVyIG5lZWQgbm90IGRvIGl0IG9uIGl0cyBvd24uCisKKwlucl9zZWdtZW50cyA9IGJsa19ycV9tYXBfc2cocSwgcnEsIHNjYXR0ZXJsaXN0KTsKKworVGhlIGhlbHBlciByb3V0aW5lIHByb3ZpZGVzIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gd2hpY2ggbWFrZXMgaXQgZWFzaWVyCit0byBtb2RpZnkgdGhlIGludGVybmFscyBvZiByZXF1ZXN0IHRvIHNjYXR0ZXJsaXN0IGNvbnZlcnNpb24gZG93biB0aGUgbGluZQord2l0aG91dCBicmVha2luZyBkcml2ZXJzLiBUaGUgYmxrX3JxX21hcF9zZyByb3V0aW5lIHRha2VzIGNhcmUgb2Ygc2V2ZXJhbAordGhpbmdzIGxpa2UgY29sbGFwc2luZyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgc2VnbWVudHMgKGlmIFFVRVVFX0ZMQUdfQ0xVU1RFUgoraXMgc2V0KSBhbmQgY29ycmVjdCBzZWdtZW50IGFjY291bnRpbmcgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSBsaW1pdHMgd2hpY2gKK3RoZSBpL28gaGFyZHdhcmUgY2FuIGhhbmRsZSwgYmFzZWQgb24gdmFyaW91cyBxdWV1ZSBwcm9wZXJ0aWVzLgorCistIFByZXZlbnRzIGEgY2x1c3RlcmVkIHNlZ21lbnQgZnJvbSBjcm9zc2luZyBhIDRHQiBtZW0gYm91bmRhcnkKKy0gQXZvaWRzIGJ1aWxkaW5nIHNlZ21lbnRzIHRoYXQgd291bGQgZXhjZWVkIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwKKyAgbWVtb3J5IHNlZ21lbnRzIHRoYXQgdGhlIGRyaXZlciBjYW4gaGFuZGxlIChwaHlzX3NlZ21lbnRzKSBhbmQgdGhlCisgIG51bWJlciB0aGF0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGNhbiBoYW5kbGUgYXQgb25jZSwgYWNjb3VudGluZyBmb3IKKyAgRE1BIHJlbWFwcGluZyAoaHdfc2VnbWVudHMpICAoaS5lLiBJT01NVSBhd2FyZSBsaW1pdHMpLgorCitSb3V0aW5lcyB3aGljaCB0aGUgbG93IGxldmVsIGRyaXZlciBjYW4gdXNlIHRvIHNldCB1cCB0aGUgc2VnbWVudCBsaW1pdHM6CisKK2Jsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoKSA6IFNldHMgYW4gdXBwZXIgbGltaXQgb2YgdGhlIG1heGltdW0gbnVtYmVyIG9mCitodyBkYXRhIHNlZ21lbnRzIGluIGEgcmVxdWVzdCAoaS5lLiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWRkcmVzcy9sZW5ndGgKK3BhaXJzIHRoZSBob3N0IGFkYXB0ZXIgY2FuIGFjdHVhbGx5IGhhbmQgdG8gdGhlIGRldmljZSBhdCBvbmNlKQorCitibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoKSA6IFNldHMgYW4gdXBwZXIgbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyCitvZiBwaHlzaWNhbCBkYXRhIHNlZ21lbnRzIGluIGEgcmVxdWVzdCAoaS5lLiB0aGUgbGFyZ2VzdCBzaXplZCBzY2F0dGVyIGxpc3QKK2EgZHJpdmVyIGNvdWxkIGhhbmRsZSkKKworMy4yLjMgSS9PIGNvbXBsZXRpb24KKworVGhlIGV4aXN0aW5nIGdlbmVyaWMgYmxvY2sgbGF5ZXIgaGVscGVyIHJvdXRpbmVzIGVuZF9yZXF1ZXN0LAorZW5kX3RoYXRfcmVxdWVzdF9maXJzdCBhbmQgZW5kX3RoYXRfcmVxdWVzdF9sYXN0IGNhbiBiZSB1c2VkIGZvciBpL28KK2NvbXBsZXRpb24gKGFuZCBzZXR0aW5nIHRoaW5ncyB1cCBzbyB0aGUgcmVzdCBvZiB0aGUgaS9vIG9yIHRoZSBuZXh0CityZXF1ZXN0IGNhbiBiZSBraWNrZWQgb2YpIGFzIGJlZm9yZS4gV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIG11bHRpLXBhZ2UKK2JpbyBzdXBwb3J0LCBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0IHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgaW5kaWNhdGluZwordGhlIG51bWJlciBvZiBzZWN0b3JzIGNvbXBsZXRlZC4KKworMy4yLjQgSW1wbGljYXRpb25zIGZvciBkcml2ZXJzIHRoYXQgZG8gbm90IGludGVycHJldCBiaW9zIChkb24ndCBoYW5kbGUKKyBtdWx0aXBsZSBzZWdtZW50cykKKworRHJpdmVycyB0aGF0IGRvIG5vdCBpbnRlcnByZXQgYmlvcyBlLmcgdGhvc2Ugd2hpY2ggZG8gbm90IGhhbmRsZSBtdWx0aXBsZQorc2VnbWVudHMgYW5kIGRvIG5vdCBzdXBwb3J0IGkvbyBpbnRvIGhpZ2ggbWVtb3J5IGFkZHJlc3NlcyAocmVxdWlyZSBib3VuY2UKK2J1ZmZlcnMpIGFuZCBleHBlY3Qgb25seSB2aXJ0dWFsbHkgbWFwcGVkIGJ1ZmZlcnMsIGNhbiBhY2Nlc3MgdGhlIHJxLT5idWZmZXIKK2ZpZWxkLiBBcyBiZWZvcmUgdGhlIGRyaXZlciBzaG91bGQgdXNlIGN1cnJlbnRfbnJfc2VjdG9ycyB0byBkZXRlcm1pbmUgdGhlCitzaXplIG9mIHJlbWFpbmluZyBkYXRhIGluIHRoZSBjdXJyZW50IHNlZ21lbnQgKHRoYXQgaXMgdGhlIG1heGltdW0gaXQgY2FuCit0cmFuc2ZlciBpbiBvbmUgZ28gdW5sZXNzIGl0IGludGVycHJldHMgc2VnbWVudHMpLCBhbmQgcmVseSBvbiB0aGUgYmxvY2sgbGF5ZXIKK2VuZF9yZXF1ZXN0LCBvciBlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0L2xhc3QgdG8gdGFrZSBjYXJlIG9mIGFsbCBhY2NvdW50aW5nCithbmQgdHJhbnNwYXJlbnQgbWFwcGluZyBvZiB0aGUgbmV4dCBiaW8gc2VnbWVudCB3aGVuIGEgc2VnbWVudCBib3VuZGFyeQoraXMgY3Jvc3NlZCBvbiBjb21wbGV0aW9uIG9mIGEgdHJhbnNmZXIuIChUaGUgZW5kKnJlcXVlc3QqIGZ1bmN0aW9ucyBzaG91bGQKK2JlIHVzZWQgaWYgb25seSBpZiB0aGUgcmVxdWVzdCBoYXMgY29tZSBkb3duIGZyb20gYmxvY2svYmlvIHBhdGgsIG5vdCBmb3IKK2RpcmVjdCBhY2Nlc3MgcmVxdWVzdHMgd2hpY2ggb25seSBzcGVjaWZ5IHJxLT5idWZmZXIgd2l0aG91dCBhIHZhbGlkIHJxLT5iaW8pCisKKzMuMi41IEdlbmVyaWMgcmVxdWVzdCBjb21tYW5kIHRhZ2dpbmcKKworMy4yLjUuMSBUYWcgaGVscGVycworCitCbG9jayBub3cgb2ZmZXJzIHNvbWUgc2ltcGxlIGdlbmVyaWMgZnVuY3Rpb25hbGl0eSB0byBoZWxwIHN1cHBvcnQgY29tbWFuZAorcXVldWVpbmcgKHR5cGljYWxseSBrbm93biBhcyB0YWdnZWQgY29tbWFuZCBxdWV1ZWluZyksIGllIG1hbmFnZSBtb3JlIHRoYW4KK29uZSBvdXRzdGFuZGluZyBjb21tYW5kIG9uIGEgcXVldWUgYXQgYW55IGdpdmVuIHRpbWUuCisKKwlibGtfcXVldWVfaW5pdF90YWdzKHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IGRlcHRoKQorCisJSW5pdGlhbGl6ZSBpbnRlcm5hbCBjb21tYW5kIHRhZ2dpbmcgc3RydWN0dXJlcyBmb3IgYSBtYXhpbXVtCisJZGVwdGggb2YgJ2RlcHRoJy4KKworCWJsa19xdWV1ZV9mcmVlX3RhZ3MoKHJlcXVlc3RfcXVldWVfdCAqcSkKKworCVRlYXJkb3duIHRhZyBpbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGUgcXVldWUuIFRoaXMgd2lsbCBiZSBkb25lCisJYXV0b21hdGljYWxseSBieSBibG9jayBpZiBibGtfcXVldWVfY2xlYW51cCgpIGlzIGNhbGxlZCBvbiBhIHF1ZXVlCisJdGhhdCBpcyB1c2luZyB0YWdnaW5nLgorCitUaGUgYWJvdmUgYXJlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IG1hbmFnZW1lbnQsIHRoZSBtYWluIGhlbHBlcnMgZHVyaW5nCitub3JtYWwgb3BlcmF0aW9ucyBhcmU6CisKKwlibGtfcXVldWVfc3RhcnRfdGFnKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQorCisJU3RhcnQgdGFnZ2VkIG9wZXJhdGlvbiBmb3IgdGhpcyByZXF1ZXN0LiBBIGZyZWUgdGFnIG51bWJlciBiZXR3ZWVuCisJMCBhbmQgJ2RlcHRoJyBpcyBhc3NpZ25lZCB0byB0aGUgcmVxdWVzdCAocnEtPnRhZyBob2xkcyB0aGlzIG51bWJlciksCisJYW5kICdycScgaXMgYWRkZWQgdG8gdGhlIGludGVybmFsIHRhZyBtYW5hZ2VtZW50LiBJZiB0aGUgbWF4aW11bSBkZXB0aAorCWZvciB0aGlzIHF1ZXVlIGlzIGFscmVhZHkgYWNoaWV2ZWQgKG9yIGlmIHRoZSB0YWcgd2Fzbid0IHN0YXJ0ZWQgZm9yCisJc29tZSBvdGhlciByZWFzb24pLCAxIGlzIHJldHVybmVkLiBPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4KKworCWJsa19xdWV1ZV9lbmRfdGFnKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQorCisJRW5kIHRhZ2dlZCBvcGVyYXRpb24gb24gdGhpcyByZXF1ZXN0LiAncnEnIGlzIHJlbW92ZWQgZnJvbSB0aGUgaW50ZXJuYWwKKwlib29rIGtlZXBpbmcgc3RydWN0dXJlcy4KKworVG8gbWluaW1pemUgc3RydWN0IHJlcXVlc3QgYW5kIHF1ZXVlIG92ZXJoZWFkLCB0aGUgdGFnIGhlbHBlcnMgdXRpbGl6ZSBzb21lCitvZiB0aGUgc2FtZSByZXF1ZXN0IG1lbWJlcnMgdGhhdCBhcmUgdXNlZCBmb3Igbm9ybWFsIHJlcXVlc3QgcXVldWUgbWFuYWdlbWVudC4KK1RoaXMgbWVhbnMgdGhhdCBhIHJlcXVlc3QgY2Fubm90IGJvdGggYmUgYW4gYWN0aXZlIHRhZyBhbmQgYmUgb24gdGhlIHF1ZXVlCitsaXN0IGF0IHRoZSBzYW1lIHRpbWUuIGJsa19xdWV1ZV9zdGFydF90YWcoKSB3aWxsIHJlbW92ZSB0aGUgcmVxdWVzdCwgYnV0Cit0aGUgZHJpdmVyIG11c3QgcmVtZW1iZXIgdG8gY2FsbCBibGtfcXVldWVfZW5kX3RhZygpIGJlZm9yZSBzaWduYWxsaW5nCitjb21wbGV0aW9uIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBibG9jayBsYXllci4gVGhpcyBtZWFucyBlbmRpbmcgdGFnCitvcGVyYXRpb25zIGJlZm9yZSBjYWxsaW5nIGVuZF90aGF0X3JlcXVlc3RfbGFzdCgpISBGb3IgYW4gZXhhbXBsZSBvZiBhIHVzZXIKK29mIHRoZXNlIGhlbHBlcnMsIHNlZSB0aGUgSURFIHRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nIHN1cHBvcnQuCisKK0NlcnRhaW4gaGFyZHdhcmUgY29uZGl0aW9ucyBtYXkgZGljdGF0ZSBhIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgYmxvY2sgdGFnCitxdWV1ZS4gRm9yIGluc3RhbmNlLCBvbiBJREUgYW55IHRhZ2dlZCByZXF1ZXN0IGVycm9yIG5lZWRzIHRvIGNsZWFyIGJvdGgKK3RoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgYmxvY2sgcXVldWUgYW5kIGVuYWJsZSB0aGUgZHJpdmVyIHRvIHNhbmVseSByZXN0YXJ0CithbGwgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3RzLiBUaGVyZSdzIGEgdGhpcmQgaGVscGVyIHRvIGRvIHRoYXQ6CisKKwlibGtfcXVldWVfaW52YWxpZGF0ZV90YWdzKHJlcXVlc3RfcXVldWVfdCAqcSkKKworCUNsZWFyIHRoZSBpbnRlcm5hbCBibG9jayB0YWcgcXVldWUgYW5kIHJlYWRkIGFsbCB0aGUgcGVuZGluZyByZXF1ZXN0cworCXRvIHRoZSByZXF1ZXN0IHF1ZXVlLiBUaGUgZHJpdmVyIHdpbGwgcmVjZWl2ZSB0aGVtIGFnYWluIG9uIHRoZQorCW5leHQgcmVxdWVzdF9mbiBydW4sIGp1c3QgbGlrZSBpdCBkaWQgdGhlIGZpcnN0IHRpbWUgaXQgZW5jb3VudGVyZWQKKwl0aGVtLgorCiszLjIuNS4yIFRhZyBpbmZvCisKK1NvbWUgYmxvY2sgZnVuY3Rpb25zIGV4aXN0IHRvIHF1ZXJ5IGN1cnJlbnQgdGFnIHN0YXR1cyBvciB0byBnbyBmcm9tIGEKK3RhZyBudW1iZXIgdG8gdGhlIGFzc29jaWF0ZWQgcmVxdWVzdC4gVGhlc2UgYXJlLCBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyOgorCisJYmxrX3F1ZXVlX3RhZ2dlZChxKQorCisJUmV0dXJucyAxIGlmIHRoZSBxdWV1ZSAncScgaXMgdXNpbmcgdGFnZ2luZywgMCBpZiBub3QuCisKKwlibGtfcXVldWVfdGFnX3JlcXVlc3QocSwgdGFnKQorCisJUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIHRhZyAndGFnJy4KKworCWJsa19xdWV1ZV90YWdfZGVwdGgocSkKKwkKKwlSZXR1cm4gY3VycmVudCBxdWV1ZSBkZXB0aC4KKworCWJsa19xdWV1ZV90YWdfcXVldWUocSkKKworCVJldHVybnMgMSBpZiB0aGUgcXVldWUgY2FuIGFjY2VwdCBhIG5ldyBxdWV1ZWQgY29tbWFuZCwgMCBpZiB3ZSBhcmUKKwlhdCB0aGUgbWF4aW11bSBkZXB0aCBhbHJlYWR5LgorCisJYmxrX3F1ZXVlX3JxX3RhZ2dlZChycSkKKworCVJldHVybnMgMSBpZiB0aGUgcmVxdWVzdCAncnEnIGlzIHRhZ2dlZC4KKworMy4yLjUuMiBJbnRlcm5hbCBzdHJ1Y3R1cmUKKworSW50ZXJuYWxseSwgYmxvY2sgbWFuYWdlcyB0YWdzIGluIHRoZSBibGtfcXVldWVfdGFnIHN0cnVjdHVyZToKKworCXN0cnVjdCBibGtfcXVldWVfdGFnIHsKKwkJc3RydWN0IHJlcXVlc3QgKip0YWdfaW5kZXg7CS8qIGFycmF5IG9yIHBvaW50ZXJzIHRvIHJxICovCisJCXVuc2lnbmVkIGxvbmcgKnRhZ19tYXA7CQkvKiBiaXRtYXAgb2YgZnJlZSB0YWdzICovCisJCXN0cnVjdCBsaXN0X2hlYWQgYnVzeV9saXN0OwkvKiBmaWZvIGxpc3Qgb2YgYnVzeSB0YWdzICovCisJCWludCBidXN5OwkJCS8qIHF1ZXVlIGRlcHRoICovCisJCWludCBtYXhfZGVwdGg7CQkJLyogbWF4IHF1ZXVlIGRlcHRoICovCisJfTsKKworTW9zdCBvZiB0aGUgYWJvdmUgaXMgc2ltcGxlIGFuZCBzdHJhaWdodCBmb3J3YXJkLCBob3dldmVyIGJ1c3lfbGlzdCBtYXkgbmVlZAorYSBiaXQgb2YgZXhwbGFpbmluZy4gTm9ybWFsbHkgd2UgZG9uJ3QgY2FyZSB0b28gbXVjaCBhYm91dCByZXF1ZXN0IG9yZGVyaW5nLAorYnV0IGluIHRoZSBldmVudCBvZiBhbnkgYmFycmllciByZXF1ZXN0cyBpbiB0aGUgdGFnIHF1ZXVlIHdlIG5lZWQgdG8gZW5zdXJlCit0aGF0IHJlcXVlc3RzIGFyZSByZXN0YXJ0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBxdWV1ZS4gVGhpcyBtYXkgaGFwcGVuCitpZiB0aGUgZHJpdmVyIG5lZWRzIHRvIHVzZSBibGtfcXVldWVfaW52YWxpZGF0ZV90YWdzKCkuCisKK1RhZ2dpbmcgYWxzbyBkZWZpbmVzIGEgbmV3IHJlcXVlc3QgZmxhZywgUkVRX1FVRVVFRC4gVGhpcyBpcyBzZXQgd2hlbmV2ZXIKK2EgcmVxdWVzdCBpcyBjdXJyZW50bHkgdGFnZ2VkLiBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmbGFnIGRpcmVjdGx5LAorYmxrX3JxX3RhZ2dlZChycSkgaXMgdGhlIHBvcnRhYmxlIHdheSB0byBkbyBzby4KKworMy4zIEkvTyBTdWJtaXNzaW9uCisKK1RoZSByb3V0aW5lIHN1Ym1pdF9iaW8oKSBpcyB1c2VkIHRvIHN1Ym1pdCBhIHNpbmdsZSBpby4gSGlnaGVyIGxldmVsIGkvbworcm91dGluZXMgbWFrZSB1c2Ugb2YgdGhpczoKKworKGEpIEJ1ZmZlcmVkIGkvbzoKK1RoZSByb3V0aW5lIHN1Ym1pdF9iaCgpIGludm9rZXMgc3VibWl0X2JpbygpIG9uIGEgYmlvIGNvcnJlc3BvbmRpbmcgdG8gdGhlCitiaCwgYWxsb2NhdGluZyB0aGUgYmlvIGlmIHJlcXVpcmVkLiBsbF9yd19ibG9jaygpIHVzZXMgc3VibWl0X2JoKCkgYXMgYmVmb3JlLgorCisoYikgS2lvYnVmIGkvbyAoZm9yIHJhdy9kaXJlY3QgaS9vKToKK1RoZSBsbF9yd19raW8oKSByb3V0aW5lIGJyZWFrcyB1cCB0aGUga2lvYnVmIGludG8gcGFnZSBzaXplZCBjaHVua3MgYW5kCittYXBzIHRoZSBhcnJheSB0byBvbmUgb3IgbW9yZSBtdWx0aS1wYWdlIGJpb3MsIGlzc3Vpbmcgc3VibWl0X2JpbygpIHRvCitwZXJmb3JtIHRoZSBpL28gb24gZWFjaCBvZiB0aGVzZS4KKworVGhlIGVtYmVkZGVkIGJoIGFycmF5IGluIHRoZSBraW9idWYgc3RydWN0dXJlIGhhcyBiZWVuIHJlbW92ZWQgYW5kIG5vCitwcmVhbGxvY2F0aW9uIG9mIGJpb3MgaXMgZG9uZSBmb3Iga2lvYnVmcy4gW1RoZSBpbnRlbnQgaXMgdG8gcmVtb3ZlIHRoZQorYmxvY2tzIGFycmF5IGFzIHdlbGwsIGJ1dCBpdCdzIGN1cnJlbnRseSBpbiB0aGVyZSB0byBrbHVkZ2UgYXJvdW5kIGRpcmVjdCBpL28uXQorVGh1cyBraW9idWYgYWxsb2NhdGlvbiBoYXMgc3dpdGNoZWQgYmFjayB0byB1c2luZyBrbWFsbG9jIHJhdGhlciB0aGFuIHZtYWxsb2MuCisKK1RvZG8vT2JzZXJ2YXRpb246CisKKyBBIHNpbmdsZSBraW9idWYgc3RydWN0dXJlIGlzIGFzc3VtZWQgdG8gY29ycmVzcG9uZCB0byBhIGNvbnRpZ3VvdXMgcmFuZ2UKKyBvZiBkYXRhLCBzbyBicndfa2lvdmVjKCkgaW52b2tlcyBsbF9yd19raW8gZm9yIGVhY2gga2lvYnVmIGluIGEga2lvdmVjLgorIFNvIHJpZ2h0IG5vdyBpdCB3b3VsZG4ndCB3b3JrIGZvciBkaXJlY3QgaS9vIG9uIG5vbi1jb250aWd1b3VzIGJsb2Nrcy4KKyBUaGlzIGlzIHRvIGJlIHJlc29sdmVkLiAgVGhlIGV2ZW50dWFsIGRpcmVjdGlvbiBpcyB0byByZXBsYWNlIGtpb2J1ZgorIGJ5IGt2ZWMncy4KKworIEJhZGFyaSBQdWxhdmFydHkgaGFzIGEgcGF0Y2ggdG8gaW1wbGVtZW50IGRpcmVjdCBpL28gY29ycmVjdGx5IHVzaW5nCisgYmlvIGFuZCBrdmVjLgorCisKKyhjKSBQYWdlIGkvbzoKK1RvZG8vVW5kZXIgZGlzY3Vzc2lvbjoKKworIEFuZHJldyBNb3J0b24ncyBtdWx0aS1wYWdlIGJpbyBwYXRjaGVzIGF0dGVtcHQgdG8gaXNzdWUgbXVsdGktcGFnZQorIHdyaXRlb3V0cyAoYW5kIHJlYWRzKSBmcm9tIHRoZSBwYWdlIGNhY2hlLCBieSBkaXJlY3RseSBidWlsZGluZyB1cAorIGxhcmdlIGJpb3MgZm9yIHN1Ym1pc3Npb24gY29tcGxldGVseSBieXBhc3NpbmcgdGhlIHVzYWdlIG9mIGJ1ZmZlcgorIGhlYWRzLiBUaGlzIHdvcmsgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCisKKyBDaHJpc3RvcGggSGVsbHdpZyBoYWQgc29tZSBjb2RlIHRoYXQgdXNlcyBiaW9zIGZvciBwYWdlLWlvIChyYXRoZXIgdGhhbgorIGJoKS4gVGhpcyBpc24ndCBpbmNsdWRlZCBpbiBiaW8gYXMgeWV0LiBDaHJpc3RvcGggd2FzIGFsc28gd29ya2luZyBvbiBhCisgZGVzaWduIGZvciByZXByZXNlbnRpbmcgdmlydHVhbC9yZWFsIGV4dGVudHMgYXMgYW4gZW50aXR5IGFuZCBtb2RpZnlpbmcKKyBzb21lIG9mIHRoZSBhZGRyZXNzIHNwYWNlIG9wcyBpbnRlcmZhY2VzIHRvIHV0aWxpemUgdGhpcyBhYnN0cmFjdGlvbiByYXRoZXIKKyB0aGFuIGJ1ZmZlcl9oZWFkcy4gKFRoaXMgaXMgc29tZXdoYXQgYWxvbmcgdGhlIGxpbmVzIG9mIHRoZSBTR0kgWEZTIHBhZ2VidWYKKyBhYnN0cmFjdGlvbiwgYnV0IGludGVuZGVkIHRvIGJlIGFzIGxpZ2h0d2VpZ2h0IGFzIHBvc3NpYmxlKS4KKworKGQpIERpcmVjdCBhY2Nlc3MgaS9vOgorRGlyZWN0IGFjY2VzcyByZXF1ZXN0cyB0aGF0IGRvIG5vdCBjb250YWluIGJpb3Mgd291bGQgYmUgc3VibWl0dGVkIGRpZmZlcmVudGx5CithcyBkaXNjdXNzZWQgZWFybGllciBpbiBzZWN0aW9uIDEuMy4KKworQXNpZGU6CisKKyAgS3ZlYyBpL286CisKKyAgQmVuIExhSGFpc2UncyBhaW8gY29kZSB1c2VzIGEgc2xpZ2hseSBkaWZmZXJlbnQgc3RydWN0dXJlIGluc3RlYWQKKyAgb2Yga2lvYnVmcywgY2FsbGVkIGEga3ZlY19jYi4gVGhpcyBjb250YWlucyBhbiBhcnJheSBvZiA8cGFnZSwgb2Zmc2V0LCBsZW4+CisgIHR1cGxlcyAodmVyeSBtdWNoIGxpa2UgdGhlIG5ldHdvcmtpbmcgY29kZSksIHRvZ2V0aGVyIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbgorICBhbmQgZGF0YSBwb2ludGVyLiBUaGlzIGlzIGVtYmVkZGVkIGludG8gYSBicndfY2Igc3RydWN0dXJlIHdoZW4gcGFzc2VkCisgIHRvIGJyd19rdmVjX2FzeW5jKCkuCisKKyAgTm93IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkaXJlY3RseSBtYXAgdGhlc2Uga3ZlY3MgdG8gYSBiaW8uIEp1c3QgYXMgd2hpbGUKKyAgY2xvbmluZywgaW4gdGhpcyBjYXNlIHJhdGhlciB0aGFuIFBSRV9CVUlMVCBiaW9fdmVjcywgd2Ugc2V0IHRoZSBiaV9pb192ZWMKKyAgYXJyYXkgcG9pbnRlciB0byBwb2ludCB0byB0aGUgdmVjbGV0IGFycmF5IGluIGt2ZWNzLgorCisgIFRCRDogSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgc29tZSBjaGFuZ2VzIGFyZSBuZWVkZWQgaW4gdGhlIHdheSBtdWx0aS1wYWdlCisgIGJpb3MgYXJlIGhhbmRsZWQgdG9kYXkuIFRoZSB2YWx1ZXMgb2YgdGhlIHR1cGxlcyBpbiBzdWNoIGEgdmVjdG9yIHBhc3NlZCBpbgorICBmcm9tIGhpZ2hlciBsZXZlbCBjb2RlIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGJsb2NrIGxheWVyIGluIHRoZSBjb3Vyc2UKKyAgb2YgaXRzIHJlcXVlc3QgcHJvY2Vzc2luZywgc2luY2UgdGhhdCB3b3VsZCBtYWtlIGl0IGhhcmQgZm9yIHRoZSBoaWdoZXIgbGF5ZXIKKyAgdG8gY29udGludWUgdG8gdXNlIHRoZSB2ZWN0b3IgZGVzY3JpcHRvciAoa3ZlYykgYWZ0ZXIgaS9vIGNvbXBsZXRlcy4gSW5zdGVhZCwKKyAgYWxsIHN1Y2ggdHJhbnNpZW50IHN0YXRlIHNob3VsZCBlaXRoZXIgYmUgbWFpbnRhaW5lZCBpbiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUsCisgIGFuZCBwYXNzZWQgb24gaW4gc29tZSB3YXkgdG8gdGhlIGVuZGlvIGNvbXBsZXRpb24gcm91dGluZS4KKworCis0LiBUaGUgSS9PIHNjaGVkdWxlcgorSS9PIHNjaGVkdWxlcnMgYXJlIG5vdyBwZXIgcXVldWUuIFRoZXkgc2hvdWxkIGJlIHJ1bnRpbWUgc3dpdGNoYWJsZSBhbmQgbW9kdWxhcgorYnV0IGFyZW4ndCB5ZXQuIEplbnMgaGFzIG1vc3QgYml0cyB0byBkbyB0aGlzLCBidXQgdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uIGlzCittaXNzaW5nLgorCitBIGJsb2NrIGxheWVyIGNhbGwgdG8gdGhlIGkvbyBzY2hlZHVsZXIgZm9sbG93cyB0aGUgY29udmVudGlvbiBlbHZfeHh4KCkuIFRoaXMKK2NhbGxzIGVsZXZhdG9yX3h4eF9mbiBpbiB0aGUgZWxldmF0b3Igc3dpdGNoIChkcml2ZXJzL2Jsb2NrL2VsZXZhdG9yLmMpLiBPaCwKK3h4eCBhbmQgeHh4IG1pZ2h0IG5vdCBtYXRjaCBleGFjdGx5LCBidXQgdXNlIHlvdXIgaW1hZ2luYXRpb24uIElmIGFuIGVsZXZhdG9yCitkb2Vzbid0IGltcGxlbWVudCBhIGZ1bmN0aW9uLCB0aGUgc3dpdGNoIGRvZXMgbm90aGluZyBvciBzb21lIG1pbmltYWwgaG91c2UKK2tlZXBpbmcgd29yay4KKworNC4xLiBJL08gc2NoZWR1bGVyIEFQSQorCitUaGUgZnVuY3Rpb25zIGFuIGVsZXZhdG9yIG1heSBpbXBsZW1lbnQgYXJlOiAoKiBhcmUgbWFuZGF0b3J5KQorZWxldmF0b3JfbWVyZ2VfZm4JCWNhbGxlZCB0byBxdWVyeSByZXF1ZXN0cyBmb3IgbWVyZ2Ugd2l0aCBhIGJpbworCitlbGV2YXRvcl9tZXJnZV9yZXFfZm4JCSIgIiAiICB3aXRoIGFub3RoZXIgcmVxdWVzdAorCitlbGV2YXRvcl9tZXJnZWRfZm4JCWNhbGxlZCB3aGVuIGEgcmVxdWVzdCBpbiB0aGUgc2NoZWR1bGVyIGhhcyBiZWVuCisJCQkJaW52b2x2ZWQgaW4gYSBtZXJnZS4gSXQgaXMgdXNlZCBpbiB0aGUgZGVhZGxpbmUKKwkJCQlzY2hlZHVsZXIgZm9yIGV4YW1wbGUsIHRvIHJlcG9zaXRpb24gdGhlIHJlcXVlc3QKKwkJCQlpZiBpdHMgc29ydGluZyBvcmRlciBoYXMgY2hhbmdlZC4KKworKmVsZXZhdG9yX25leHRfcmVxX2ZuCQlyZXR1cm5zIHRoZSBuZXh0IHNjaGVkdWxlZCByZXF1ZXN0LCBvciBOVUxMCisJCQkJaWYgdGhlcmUgYXJlIG5vbmUgKG9yIG5vbmUgYXJlIHJlYWR5KS4KKworKmVsZXZhdG9yX2FkZF9yZXFfZm4JCWNhbGxlZCB0byBhZGQgYSBuZXcgcmVxdWVzdCBpbnRvIHRoZSBzY2hlZHVsZXIKKworZWxldmF0b3JfcXVldWVfZW1wdHlfZm4JCXJldHVybnMgdHJ1ZSBpZiB0aGUgbWVyZ2UgcXVldWUgaXMgZW1wdHkuCisJCQkJRHJpdmVycyBzaG91bGRuJ3QgdXNlIHRoaXMsIGJ1dCByYXRoZXIgY2hlY2sKKwkJCQlpZiBlbHZfbmV4dF9yZXF1ZXN0IGlzIE5VTEwgKHdpdGhvdXQgbG9zaW5nIHRoZQorCQkJCXJlcXVlc3QgaWYgb25lIGV4aXN0cyEpCisKK2VsZXZhdG9yX3JlbW92ZV9yZXFfZm4JCVRoaXMgaXMgY2FsbGVkIHdoZW4gYSBkcml2ZXIgY2xhaW1zIG93bmVyc2hpcCBvZgorCQkJCXRoZSB0YXJnZXQgcmVxdWVzdCAtIGl0IG5vdyBiZWxvbmdzIHRvIHRoZQorCQkJCWRyaXZlci4gSXQgbXVzdCBub3QgYmUgbW9kaWZpZWQgb3IgbWVyZ2VkLgorCQkJCURyaXZlcnMgbXVzdCBub3QgbG9zZSB0aGUgcmVxdWVzdCEgQSBzdWJzZXF1ZW50CisJCQkJY2FsbCBvZiBlbGV2YXRvcl9uZXh0X3JlcV9mbiBtdXN0ICByZXR1cm4gdGhlCisJCQkJX25leHRfIHJlcXVlc3QuCisKK2VsZXZhdG9yX3JlcXVldWVfcmVxX2ZuCQljYWxsZWQgdG8gYWRkIGEgcmVxdWVzdCB0byB0aGUgc2NoZWR1bGVyLiBUaGlzCisJCQkJaXMgdXNlZCB3aGVuIHRoZSByZXF1ZXN0IGhhcyBhbHJuYWRlYmVlbgorCQkJCXJldHVybmVkIGJ5IGVsdl9uZXh0X3JlcXVlc3QsIGJ1dCBoYXNuJ3QKKwkJCQljb21wbGV0ZWQuIElmIHRoaXMgaXMgbm90IGltcGxlbWVudGVkIHRoZW4KKwkJCQllbGV2YXRvcl9hZGRfcmVxX2ZuIGlzIGNhbGxlZCBpbnN0ZWFkLgorCitlbGV2YXRvcl9mb3JtZXJfcmVxX2ZuCitlbGV2YXRvcl9sYXR0ZXJfcmVxX2ZuCQlUaGVzZSByZXR1cm4gdGhlIHJlcXVlc3QgYmVmb3JlIG9yIGFmdGVyIHRoZQorCQkJCW9uZSBzcGVjaWZpZWQgaW4gZGlzayBzb3J0IG9yZGVyLiBVc2VkIGJ5IHRoZQorCQkJCWJsb2NrIGxheWVyIHRvIGZpbmQgbWVyZ2UgcG9zc2liaWxpdGllcy4KKworZWxldmF0b3JfY29tcGxldGVkX3JlcV9mbgljYWxsZWQgd2hlbiBhIHJlcXVlc3QgaXMgY29tcGxldGVkLiBUaGlzIG1pZ2h0CisJCQkJY29tZSBhYm91dCBkdWUgdG8gYmVpbmcgbWVyZ2VkIHdpdGggYW5vdGhlciBvcgorCQkJCXdoZW4gdGhlIGRldmljZSBjb21wbGV0ZXMgdGhlIHJlcXVlc3QuCisKK2VsZXZhdG9yX21heV9xdWV1ZV9mbgkJcmV0dXJucyB0cnVlIGlmIHRoZSBzY2hlZHVsZXIgd2FudHMgdG8gYWxsb3cgdGhlCisJCQkJY3VycmVudCBjb250ZXh0IHRvIHF1ZXVlIGEgbmV3IHJlcXVlc3QgZXZlbiBpZgorCQkJCWl0IGlzIG92ZXIgdGhlIHF1ZXVlIGxpbWl0LiBUaGlzIG11c3QgYmUgdXNlZAorCQkJCXZlcnkgY2FyZWZ1bGx5ISEKKworZWxldmF0b3Jfc2V0X3JlcV9mbgorZWxldmF0b3JfcHV0X3JlcV9mbgkJTXVzdCBiZSB1c2VkIHRvIGFsbG9jYXRlIGFuZCBmcmVlIGFueSBlbGV2YXRvcgorCQkJCXNwZWNpZmljIHN0b3JhdGUgZm9yIGEgcmVxdWVzdC4KKworZWxldmF0b3JfaW5pdF9mbgorZWxldmF0b3JfZXhpdF9mbgkJQWxsb2NhdGUgYW5kIGZyZWUgYW55IGVsZXZhdG9yIHNwZWNpZmljIHN0b3JhZ2UKKwkJCQlmb3IgYSBxdWV1ZS4KKworNC4yIEkvTyBzY2hlZHVsZXIgaW1wbGVtZW50YXRpb24KK1RoZSBnZW5lcmljIGkvbyBzY2hlZHVsZXIgYWxnb3JpdGhtIGF0dGVtcHRzIHRvIHNvcnQvbWVyZ2UvYmF0Y2ggcmVxdWVzdHMgZm9yCitvcHRpbWFsIGRpc2sgc2NhbiBhbmQgcmVxdWVzdCBzZXJ2aWNpbmcgcGVyZm9ybWFuY2UgKGJhc2VkIG9uIGdlbmVyaWMKK3ByaW5jaXBsZXMgYW5kIGRldmljZSBjYXBhYmlsaXRpZXMpLCBvcHRpbWl6ZWQgZm9yOgoraS4gICBpbXByb3ZlZCB0aHJvdWdocHV0CitpaS4gIGltcHJvdmVkIGxhdGVuY3kKK2lpaS4gYmV0dGVyIHV0aWxpemF0aW9uIG9mIGgvdyAmIENQVSB0aW1lCisKK0NoYXJhY3RlcmlzdGljczoKKworaS4gQmluYXJ5IHRyZWUKK0FTIGFuZCBkZWFkbGluZSBpL28gc2NoZWR1bGVycyB1c2UgcmVkIGJsYWNrIGJpbmFyeSB0cmVlcyBmb3IgZGlzayBwb3NpdGlvbgorc29ydGluZyBhbmQgc2VhcmNoaW5nLCBhbmQgYSBmaWZvIGxpbmtlZCBsaXN0IGZvciB0aW1lLWJhc2VkIHNlYXJjaGluZy4gVGhpcworZ2l2ZXMgZ29vZCBzY2FsYWJpbGl0eSBhbmQgZ29vZCBhdmFpbGFibGlsaXR5IG9mIGluZm9ybWF0aW9uLiBSZXF1ZXN0cyBhcmUKK2FsbW9zdCBhbHdheXMgZGlzcGF0Y2hlZCBpbiBkaXNrIHNvcnQgb3JkZXIsIHNvIGEgY2FjaGUgaXMga2VwdCBvZiB0aGUgbmV4dAorcmVxdWVzdCBpbiBzb3J0IG9yZGVyIHRvIHByZXZlbnQgYmluYXJ5IHRyZWUgbG9va3Vwcy4KKworVGhpcyBhcnJhbmdlbWVudCBpcyBub3QgYSBnZW5lcmljIGJsb2NrIGxheWVyIGNoYXJhY3RlcmlzdGljIGhvd2V2ZXIsIHNvCitlbGV2YXRvcnMgbWF5IGltcGxlbWVudCBxdWV1ZXMgYXMgdGhleSBwbGVhc2UuCisKK2lpLiBMYXN0IG1lcmdlIGhpbnQKK1RoZSBsYXN0IG1lcmdlIGhpbnQgaXMgcGFydCBvZiB0aGUgZ2VuZXJpYyBxdWV1ZSBsYXllci4gSS9PIHNjaGVkdWxlcnMgbXVzdCBkbworc29tZSBtYW5hZ2VtZW50IG9uIGl0LiBGb3IgdGhlIG1vc3QgcGFydCwgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGlzIHRvIG1ha2UKK3N1cmUgcS0+bGFzdF9tZXJnZSBpcyBjbGVhcmVkIChzZXQgdG8gTlVMTCkgd2hlbiB0aGUgcmVxdWVzdCBvbiBpdCBpcyBubyBsb25nZXIKK2EgY2FuZGlkYXRlIGZvciBtZXJnaW5nIChmb3IgZXhhbXBsZSBpZiBpdCBoYXMgYmVlbiBzZW50IHRvIHRoZSBkcml2ZXIpLgorCitUaGUgbGFzdCBtZXJnZSBwZXJmb3JtZWQgaXMgY2FjaGVkIGFzIGEgaGludCBmb3IgdGhlIHN1YnNlcXVlbnQgcmVxdWVzdC4gSWYKK3NlcXVlbnRpYWwgZGF0YSBpcyBiZWluZyBzdWJtaXR0ZWQsIHRoZSBoaW50IGlzIHVzZWQgdG8gcGVyZm9ybSBtZXJnZXMgd2l0aG91dAorYW55IHNjYW5uaW5nLiBUaGlzIGlzIG5vdCBzdWZmaWNpZW50IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHByb2Nlc3NlcyBkb2luZworSS9PIHRob3VnaCwgc28gYSAibWVyZ2UgaGFzaCIgaXMgdXNlZCBieSBzb21lIHNjaGVkdWxlcnMuCisKK2lpaS4gTWVyZ2UgaGFzaAorQVMgYW5kIGRlYWRsaW5lIHVzZSBhIGhhc2ggdGFibGUgaW5kZXhlZCBieSB0aGUgbGFzdCBzZWN0b3Igb2YgYSByZXF1ZXN0LiBUaGlzCitlbmFibGVzIG1lcmdpbmcgY29kZSB0byBxdWlja2x5IGxvb2sgdXAgImJhY2sgbWVyZ2UiIGNhbmRpZGF0ZXMsIGV2ZW4gd2hlbgorbXVsdGlwbGUgSS9PIHN0cmVhbXMgYXJlIGJlaW5nIHBlcmZvcm1lZCBhdCBvbmNlIG9uIG9uZSBkaXNrLgorCisiRnJvbnQgbWVyZ2VzIiwgYSBuZXcgcmVxdWVzdCBiZWluZyBtZXJnZWQgYXQgdGhlIGZyb250IG9mIGFuIGV4aXN0aW5nIHJlcXVlc3QsCithcmUgZmFyIGxlc3MgY29tbW9uIHRoYW4gImJhY2sgbWVyZ2VzIiBkdWUgdG8gdGhlIG5hdHVyZSBvZiBtb3N0IEkvTyBwYXR0ZXJucy4KK0Zyb250IG1lcmdlcyBhcmUgaGFuZGxlZCBieSB0aGUgYmluYXJ5IHRyZWVzIGluIEFTIGFuZCBkZWFkbGluZSBzY2hlZHVsZXJzLgorCitpdi4gSGFuZGxpbmcgYmFycmllciBjYXNlcworQSByZXF1ZXN0IHdpdGggZmxhZ3MgUkVRX0hBUkRCQVJSSUVSIG9yIFJFUV9TT0ZUQkFSUklFUiBtdXN0IG5vdCBiZSBvcmRlcmVkCithcm91bmQuIFRoYXQgaXMsIHRoZXkgbXVzdCBiZSBwcm9jZXNzZWQgYWZ0ZXIgYWxsIG9sZGVyIHJlcXVlc3RzLCBhbmQgYmVmb3JlCithbnkgbmV3ZXIgb25lcy4gVGhpcyBpbmNsdWRlcyBtZXJnZXMhCisKK0luIEFTIGFuZCBkZWFkbGluZSBzY2hlZHVsZXJzLCBiYXJyaWVycyBoYXZlIHRoZSBlZmZlY3Qgb2YgZmx1c2hpbmcgdGhlIHJlb3JkZXIKK3F1ZXVlLiBUaGUgcGVyZm9ybWFuY2UgY29zdCBvZiB0aGlzIHdpbGwgdmFyeSBmcm9tIG5vdGhpbmcgdG8gYSBsb3QgZGVwZW5kaW5nCitvbiBpL28gcGF0dGVybnMgYW5kIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MuIE9idmlvdXNseSB0aGV5IHdvbid0IGltcHJvdmUKK3BlcmZvcm1hbmNlLCBzbyB0aGVpciB1c2Ugc2hvdWxkIGJlIGtlcHQgdG8gYSBtaW5pbXVtLgorCit2LiBIYW5kbGluZyBpbnNlcnRpb24gcG9zaXRpb24gZGlyZWN0aXZlcworQSByZXF1ZXN0IG1heSBiZSBpbnNlcnRlZCB3aXRoIGEgcG9zaXRpb24gZGlyZWN0aXZlLiBUaGUgZGlyZWN0aXZlcyBhcmUgb25lIG9mCitFTEVWQVRPUl9JTlNFUlRfQkFDSywgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCBFTEVWQVRPUl9JTlNFUlRfU09SVC4KKworRUxFVkFUT1JfSU5TRVJUX1NPUlQgaXMgYSBnZW5lcmFsIGRpcmVjdGl2ZSBmb3Igbm9uLWJhcnJpZXIgcmVxdWVzdHMuCitFTEVWQVRPUl9JTlNFUlRfQkFDSyBpcyB1c2VkIHRvIGluc2VydCBhIGJhcnJpZXIgdG8gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLgorRUxFVkFUT1JfSU5TRVJUX0ZST05UIGlzIHVzZWQgdG8gaW5zZXJ0IGEgYmFycmllciB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLCBhbmQKK292ZXJyaWRlcyB0aGUgb3JkZXJpbmcgcmVxdWVzdGVkIGJ5IGFueSBwcmV2aW91cyBiYXJyaWVycy4gSW4gcHJhY3RpY2UgdGhpcyBpcworaGFybWxlc3MgYW5kIHJlcXVpcmVkLCBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yIFNDU0kgcmVxdWV1ZWluZy4gVGhpcyBkb2VzIG5vdAorcmVxdWlyZSBmbHVzaGluZyB0aGUgcmVvcmRlciBxdWV1ZSwgc28gZG9lcyBub3QgaW1wb3NlIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKwordmkuIFBsdWdnaW5nIHRoZSBxdWV1ZSB0byBiYXRjaCByZXF1ZXN0cyBpbiBhbnRpY2lwYXRpb24gb2Ygb3Bwb3J0dW5pdGllcyBmb3IKKyAgbWVyZ2Uvc29ydCBvcHRpbWl6YXRpb25zCisKK1RoaXMgaXMganVzdCB0aGUgc2FtZSBhcyBpbiAyLjQgc28gZmFyLCB0aG91Z2ggcGVyLWRldmljZSB1bnBsdWdnaW5nCitzdXBwb3J0IGlzIGFudGljaXBhdGVkIGZvciAyLjUuIEFsc28gd2l0aCBhIHByaW9yaXR5LWJhc2VkIGkvbyBzY2hlZHVsZXIsCitzdWNoIGRlY2lzaW9ucyBjb3VsZCBiZSBiYXNlZCBvbiByZXF1ZXN0IHByaW9yaXRpZXMuCisKK1BsdWdnaW5nIGlzIGFuIGFwcHJvYWNoIHRoYXQgdGhlIGN1cnJlbnQgaS9vIHNjaGVkdWxpbmcgYWxnb3JpdGhtIHJlc29ydHMgdG8gc28KK3RoYXQgaXQgY29sbGVjdHMgdXAgZW5vdWdoIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSB0byBiZSBhYmxlIHRvIHRha2UKK2FkdmFudGFnZSBvZiB0aGUgc29ydGluZy9tZXJnaW5nIGxvZ2ljIGluIHRoZSBlbGV2YXRvci4gSWYgdGhlCitxdWV1ZSBpcyBlbXB0eSB3aGVuIGEgcmVxdWVzdCBjb21lcyBpbiwgdGhlbiBpdCBwbHVncyB0aGUgcmVxdWVzdCBxdWV1ZQorKHNvcnQgb2YgbGlrZSBwbHVnZ2luZyB0aGUgYm90dG9tIG9mIGEgdmVzc2VsIHRvIGdldCBmbHVpZCB0byBidWlsZCB1cCkKK3RpbGwgaXQgZmlsbHMgdXAgd2l0aCBhIGZldyBtb3JlIHJlcXVlc3RzLCBiZWZvcmUgc3RhcnRpbmcgdG8gc2VydmljZQordGhlIHJlcXVlc3RzLiBUaGlzIHByb3ZpZGVzIGFuIG9wcG9ydHVuaXR5IHRvIG1lcmdlL3NvcnQgdGhlIHJlcXVlc3RzIGJlZm9yZQorcGFzc2luZyB0aGVtIGRvd24gdG8gdGhlIGRldmljZS4gVGhlcmUgYXJlIHZhcmlvdXMgY29uZGl0aW9ucyB3aGVuIHRoZSBxdWV1ZSBpcwordW5wbHVnZ2VkICh0byBvcGVuIHVwIHRoZSBmbG93IGFnYWluKSwgZWl0aGVyIHRocm91Z2ggYSBzY2hlZHVsZWQgdGFzayBvcgorY291bGQgYmUgb24gZGVtYW5kLiBGb3IgZXhhbXBsZSB3YWl0X29uX2J1ZmZlciBzZXRzIHRoZSB1bnBsdWdnaW5nIGdvaW5nCisoYnkgcnVubmluZyB0cV9kaXNrKSBzbyB0aGUgcmVhZCBnZXRzIHNhdGlzZmllZCBzb29uLiBTbyBpbiB0aGUgcmVhZCBjYXNlLAordGhlIHF1ZXVlIGdldHMgZXhwbGljaXRseSB1bnBsdWdnZWQgYXMgcGFydCBvZiB3YWl0aW5nIGZvciBjb21wbGV0aW9uLAoraW4gZmFjdCBhbGwgcXVldWVzIGdldCB1bnBsdWdnZWQgYXMgYSBzaWRlLWVmZmVjdC4KKworQXNpZGU6CisgIFRoaXMgaXMga2luZCBvZiBjb250cm92ZXJzaWFsIHRlcnJpdG9yeSwgYXMgaXQncyBub3QgY2xlYXIgaWYgcGx1Z2dpbmcgaXMKKyAgYWx3YXlzIHRoZSByaWdodCB0aGluZyB0byBkby4gRGV2aWNlcyB0eXBpY2FsbHkgaGF2ZSB0aGVpciBvd24gcXVldWVzLAorICBhbmQgYWxsb3dpbmcgYSBiaWcgcXVldWUgdG8gYnVpbGQgdXAgaW4gc29mdHdhcmUsIHdoaWxlIGxldHRpbmcgdGhlIGRldmljZSBiZQorICBpZGxlIGZvciBhIHdoaWxlIG1heSBub3QgYWx3YXlzIG1ha2Ugc2Vuc2UuIFRoZSB0cmljayBpcyB0byBoYW5kbGUgdGhlIGZpbmUKKyAgYmFsYW5jZSBiZXR3ZWVuIHdoZW4gdG8gcGx1ZyBhbmQgd2hlbiB0byBvcGVuIHVwLiBBbHNvIG5vdyB0aGF0IHdlIGhhdmUKKyAgbXVsdGktcGFnZSBiaW9zIGJlaW5nIHF1ZXVlZCBpbiBvbmUgc2hvdCwgd2UgbWF5IG5vdCBuZWVkIHRvIHdhaXQgdG8gbWVyZ2UKKyAgYSBiaWcgcmVxdWVzdCBmcm9tIHRoZSBicm9rZW4gdXAgcGllY2VzIGNvbWluZyBieS4KKworICBQZXItcXVldWUgZ3JhbnVsYXJpdHkgdW5wbHVnZ2luZyAoc3RpbGwgYSBUb2RvKSBtYXkgaGVscCByZWR1Y2Ugc29tZSBvZiB0aGUKKyAgY29uY2VybnMgd2l0aCBqdXN0IGEgc2luZ2xlIHRxX2Rpc2sgZmx1c2ggYXBwcm9hY2guIFNvbWV0aGluZyBsaWtlCisgIGJsa19raWNrX3F1ZXVlKCkgdG8gdW5wbHVnIGEgc3BlY2lmaWMgcXVldWUgKHJpZ2h0IGF3YXkgPykKKyAgb3Igb3B0aW9uYWxseSwgYWxsIHF1ZXVlcywgaXMgaW4gdGhlIHBsYW4uCisKKzQuMyBJL08gY29udGV4dHMKK0kvTyBjb250ZXh0cyBwcm92aWRlIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHBlciBwcm9jZXNzIGRhdGEgYXJlYS4gVGhleSBtYXkKK2JlIHVzZWQgaW4gSS9PIHNjaGVkdWxlcnMsIGFuZCBpbiB0aGUgYmxvY2sgbGF5ZXIgKGNvdWxkIGJlIHVzZWQgZm9yIElPIHN0YXRpcywKK3ByaW9yaXRpZXMgZm9yIGV4YW1wbGUpLiBTZWUgKmlvX2NvbnRleHQgaW4gZHJpdmVycy9ibG9jay9sbF9yd19ibGsuYywgYW5kCithcy1pb3NjaGVkLmMgZm9yIGFuIGV4YW1wbGUgb2YgdXNhZ2UgaW4gYW4gaS9vIHNjaGVkdWxlci4KKworCis1LiBTY2FsYWJpbGl0eSByZWxhdGVkIGNoYW5nZXMKKworNS4xIEdyYW51bGFyIExvY2tpbmc6IGlvX3JlcXVlc3RfbG9jayByZXBsYWNlZCBieSBhIHBlci1xdWV1ZSBsb2NrCisKK1RoZSBnbG9iYWwgaW9fcmVxdWVzdF9sb2NrIGhhcyBiZWVuIHJlbW92ZWQgYXMgb2YgMi41LCB0byBhdm9pZAordGhlIHNjYWxhYmlsaXR5IGJvdHRsZW5lY2sgaXQgd2FzIGNhdXNpbmcsIGFuZCBoYXMgYmVlbiByZXBsYWNlZCBieSBtb3JlCitncmFudWxhciBsb2NraW5nLiBUaGUgcmVxdWVzdCBxdWV1ZSBzdHJ1Y3R1cmUgaGFzIGEgcG9pbnRlciB0byB0aGUKK2xvY2sgdG8gYmUgdXNlZCBmb3IgdGhhdCBxdWV1ZS4gQXMgYSByZXN1bHQsIGxvY2tpbmcgY2FuIG5vdyBiZQorcGVyLXF1ZXVlLCB3aXRoIGEgcHJvdmlzaW9uIGZvciBzaGFyaW5nIGEgbG9jayBhY3Jvc3MgcXVldWVzIGlmCituZWNlc3NhcnkgKGUuZyB0aGUgc2NzaSBsYXllciBzZXRzIHRoZSBxdWV1ZSBsb2NrIHBvaW50ZXJzIHRvIHRoZQorY29ycmVzcG9uZGluZyBhZGFwdGVyIGxvY2ssIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXIgaG9zdCBsb2NraW5nCitncmFudWxhcml0eSkuIFRoZSBsb2NraW5nIHNlbWFudGljcyBhcmUgdGhlIHNhbWUsIGkuZS4gbG9ja2luZyBpcworc3RpbGwgaW1wb3NlZCBieSB0aGUgYmxvY2sgbGF5ZXIsIGdyYWJiaW5nIHRoZSBsb2NrIGJlZm9yZQorcmVxdWVzdF9mbiBleGVjdXRpb24gd2hpY2ggaXQgbWVhbnMgdGhhdCBsb3RzIG9mIG9sZGVyIGRyaXZlcnMKK3Nob3VsZCBzdGlsbCBiZSBTTVAgc2FmZS4gRHJpdmVycyBhcmUgZnJlZSB0byBkcm9wIHRoZSBxdWV1ZQorbG9jayB0aGVtc2VsdmVzLCBpZiByZXF1aXJlZC4gRHJpdmVycyB0aGF0IGV4cGxpY2l0bHkgdXNlZCB0aGUKK2lvX3JlcXVlc3RfbG9jayBmb3Igc2VyaWFsaXphdGlvbiBuZWVkIHRvIGJlIG1vZGlmaWVkIGFjY29yZGluZ2x5LgorVXN1YWxseSBpdCdzIGFzIGVhc3kgYXMgYWRkaW5nIGEgZ2xvYmFsIGxvY2s6CisKKwlzdGF0aWMgc3BpbmxvY2tfdCBteV9kcml2ZXJfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworYW5kIHBhc3NpbmcgdGhlIGFkZHJlc3MgdG8gdGhhdCBsb2NrIHRvIGJsa19pbml0X3F1ZXVlKCkuCisKKzUuMiA2NCBiaXQgc2VjdG9yIG51bWJlcnMgKHNlY3Rvcl90IHByZXBhcmVzIGZvciA2NCBiaXQgc3VwcG9ydCkKKworVGhlIHNlY3RvciBudW1iZXIgdXNlZCBpbiB0aGUgYmlvIHN0cnVjdHVyZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIHNlY3Rvcl90LAord2hpY2ggY291bGQgYmUgZGVmaW5lZCBhcyA2NCBiaXQgaW4gcHJlcGFyYXRpb24gZm9yIDY0IGJpdCBzZWN0b3Igc3VwcG9ydC4KKworNi4gT3RoZXIgQ2hhbmdlcy9JbXBsaWNhdGlvbnMKKworNi4xIFBhcnRpdGlvbiByZS1tYXBwaW5nIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgYmxvY2sgbGF5ZXIKKworSW4gMi41IHNvbWUgb2YgdGhlIGdlbmRpc2svcGFydGl0aW9uIHJlbGF0ZWQgY29kZSBoYXMgYmVlbiByZW9yZ2FuaXplZC4KK05vdyB0aGUgZ2VuZXJpYyBibG9jayBsYXllciBwZXJmb3JtcyBwYXJ0aXRpb24tcmVtYXBwaW5nIGVhcmx5IGFuZCB0aHVzCitwcm92aWRlcyBkcml2ZXJzIHdpdGggYSBzZWN0b3IgbnVtYmVyIHJlbGF0aXZlIHRvIHdob2xlIGRldmljZSwgcmF0aGVyIHRoYW4KK2hhdmluZyB0byB0YWtlIHBhcnRpdGlvbiBudW1iZXIgaW50byBhY2NvdW50IGluIG9yZGVyIHRvIGFycml2ZSBhdCB0aGUgdHJ1ZQorc2VjdG9yIG51bWJlci4gVGhlIHJvdXRpbmUgYmxrX3BhcnRpdGlvbl9yZW1hcCgpIGlzIGludm9rZWQgYnkKK2dlbmVyaWNfbWFrZV9yZXF1ZXN0IGV2ZW4gYmVmb3JlIGludm9raW5nIHRoZSBxdWV1ZSBzcGVjaWZpYyBtYWtlX3JlcXVlc3RfZm4sCitzbyB0aGUgaS9vIHNjaGVkdWxlciBhbHNvIGdldHMgdG8gb3BlcmF0ZSBvbiB3aG9sZSBkaXNrIHNlY3RvciBudW1iZXJzLiBUaGlzCitzaG91bGQgdHlwaWNhbGx5IG5vdCByZXF1aXJlIGNoYW5nZXMgdG8gYmxvY2sgZHJpdmVycywgaXQganVzdCBuZXZlciBnZXRzCit0byBpbnZva2UgaXRzIG93biBwYXJ0aXRpb24gc2VjdG9yIG9mZnNldCBjYWxjdWxhdGlvbnMgc2luY2UgYWxsIGJpb3MKK3NlbnQgYXJlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZS4KKworCis3LiBBIEZldyBUaXBzIG9uIE1pZ3JhdGlvbiBvZiBvbGRlciBkcml2ZXJzCisKK09sZC1zdHlsZSBkcml2ZXJzIHRoYXQganVzdCB1c2UgQ1VSUkVOVCBhbmQgaWdub3JlcyBjbHVzdGVyZWQgcmVxdWVzdHMsCittYXkgbm90IG5lZWQgbXVjaCBjaGFuZ2UuICBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIGF1dG9tYXRpY2FsbHkgaGFuZGxlCitjbHVzdGVyZWQgcmVxdWVzdHMsIG11bHRpLXBhZ2UgYmlvcywgZXRjIGZvciB0aGUgZHJpdmVyLgorCitGb3IgYSBsb3cgcGVyZm9ybWFuY2UgZHJpdmVyIG9yIGhhcmR3YXJlIHRoYXQgaXMgUElPIGRyaXZlbiBvciBqdXN0IGRvZXNuJ3QKK3N1cHBvcnQgc2NhdHRlci1nYXRoZXIgY2hhbmdlcyBzaG91bGQgYmUgbWluaW1hbCB0b28uCisKK1RoZSBmb2xsb3dpbmcgYXJlIHNvbWUgcG9pbnRzIHRvIGtlZXAgaW4gbWluZCB3aGVuIGNvbnZlcnRpbmcgb2xkIGRyaXZlcnMKK3RvIGJpby4KKworRHJpdmVycyBzaG91bGQgdXNlIGVsdl9uZXh0X3JlcXVlc3QgdG8gcGljayB1cCByZXF1ZXN0cyBhbmQgYXJlIG5vIGxvbmdlcgorc3VwcG9zZWQgdG8gaGFuZGxlIGxvb3BpbmcgZGlyZWN0bHkgb3ZlciB0aGUgcmVxdWVzdCBsaXN0LgorKHN0cnVjdCByZXF1ZXN0LT5xdWV1ZSBoYXMgYmVlbiByZW1vdmVkKQorCitOb3cgZW5kX3RoYXRfcmVxdWVzdF9maXJzdCB0YWtlcyBhbiBhZGRpdGlvbmFsIG51bWJlcl9vZl9zZWN0b3JzIGFyZ3VtZW50LgorSXQgdXNlZCB0byBoYW5kbGUgYWx3YXlzIGp1c3QgdGhlIGZpcnN0IGJ1ZmZlcl9oZWFkIGluIGEgcmVxdWVzdCwgbm93CitpdCB3aWxsIGxvb3AgYW5kIGhhbmRsZSBhcyBtYW55IHNlY3RvcnMgKG9uIGEgYmlvLXNlZ21lbnQgZ3JhbnVsYXJpdHkpCithcyBzcGVjaWZpZWQuCisKK05vdyBiaC0+Yl9lbmRfaW8gaXMgcmVwbGFjZWQgYnkgYmlvLT5iaV9lbmRfaW8sIGJ1dCBtb3N0IG9mIHRoZSB0aW1lIHRoZQorcmlnaHQgdGhpbmcgdG8gdXNlIGlzIGJpb19lbmRpbyhiaW8sIHVwdG9kYXRlKSBpbnN0ZWFkLgorCitJZiB0aGUgZHJpdmVyIGlzIGRyb3BwaW5nIHRoZSBpb19yZXF1ZXN0X2xvY2sgZnJvbSBpdHMgcmVxdWVzdF9mbiBzdHJhdGVneSwKK3RoZW4gaXQganVzdCBuZWVkcyB0byByZXBsYWNlIHRoYXQgd2l0aCBxLT5xdWV1ZV9sb2NrIGluc3RlYWQuCisKK0FzIGRlc2NyaWJlZCBpbiBTZWMgMS4xLCBkcml2ZXJzIGNhbiBzZXQgbWF4IHNlY3RvciBzaXplLCBtYXggc2VnbWVudCBzaXplCitldGMgcGVyIHF1ZXVlIG5vdy4gRHJpdmVycyB0aGF0IHVzZWQgdG8gZGVmaW5lIHRoZWlyIG93biBtZXJnZSBmdW5jdGlvbnMgaQordG8gaGFuZGxlIHRoaW5ncyBsaWtlIHRoaXMgY2FuIG5vdyBqdXN0IHVzZSB0aGUgYmxrX3F1ZXVlXyogZnVuY3Rpb25zIGF0CitibGtfaW5pdF9xdWV1ZSB0aW1lLgorCitEcml2ZXJzIG5vIGxvbmdlciBoYXZlIHRvIG1hcCBhIHtwYXJ0aXRpb24sIHNlY3RvciBvZmZzZXR9IGludG8gdGhlCitjb3JyZWN0IGFic29sdXRlIGxvY2F0aW9uIGFueW1vcmUsIHRoaXMgaXMgZG9uZSBieSB0aGUgYmxvY2sgbGF5ZXIsIHNvCit3aGVyZSBhIGRyaXZlciByZWNlaXZlZCBhIHJlcXVlc3QgYWxhIHRoaXMgYmVmb3JlOgorCisJcnEtPnJxX2RldiA9IG1rX2tkZXYoMywgNSk7CS8qIC9kZXYvaGRhNSAqLworCXJxLT5zZWN0b3IgPSAwOwkJCS8qIGZpcnN0IHNlY3RvciBvbiBoZGE1ICovCisKKyAgaXQgd2lsbCBub3cgc2VlCisKKwlycS0+cnFfZGV2ID0gbWtfa2RldigzLCAwKTsJLyogL2Rldi9oZGEgKi8KKwlycS0+c2VjdG9yID0gMTIzMTI4OwkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZGlzayAqLworCitBcyBtZW50aW9uZWQsIHRoZXJlIGlzIG5vIHZpcnR1YWwgbWFwcGluZyBvZiBhIGJpby4gRm9yIERNQSwgdGhpcyBpcworbm90IGEgcHJvYmxlbSBhcyB0aGUgZHJpdmVyIHByb2JhYmx5IG5ldmVyIHdpbGwgbmVlZCBhIHZpcnR1YWwgbWFwcGluZy4KK0luc3RlYWQgaXQgbmVlZHMgYSBidXMgbWFwcGluZyAocGNpX21hcF9wYWdlIGZvciBhIHNpbmdsZSBzZWdtZW50IG9yCit1c2UgYmxrX3JxX21hcF9zZyBmb3Igc2NhdHRlciBnYXRoZXIpIHRvIGJlIGFibGUgdG8gc2hpcCBpdCB0byB0aGUgZHJpdmVyLiBGb3IKK1BJTyBkcml2ZXJzIChvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZXZlcnQgdG8gUElPIHRyYW5zZmVyIG9uY2UgaW4gYQord2hpbGUgKElERSBmb3IgZXhhbXBsZSkpLCB3aGVyZSB0aGUgQ1BVIGlzIGRvaW5nIHRoZSBhY3R1YWwgZGF0YQordHJhbnNmZXIgYSB2aXJ0dWFsIG1hcHBpbmcgaXMgbmVlZGVkLiBJZiB0aGUgZHJpdmVyIHN1cHBvcnRzIGhpZ2htZW0gSS9PLAorKFNlYyAxLjEsIChpaSkgKSBpdCBuZWVkcyB0byB1c2UgX19iaW9fa21hcF9hdG9taWMgYW5kIGJpb19rbWFwX2lycSB0bwordGVtcG9yYXJpbHkgbWFwIGEgYmlvIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKworCis4LiBQcmlvci9SZWxhdGVkL0ltcGFjdGVkIHBhdGNoZXMKKworOC4xLiBFYXJsaWVyIGtpb2J1ZiBwYXRjaGVzIChzY3QvYXhib2UvY2hhaXQvaGNoL21rcCkKKy0gb3JpZyBraW9idWYgJiByYXcgaS9vIHBhdGNoZXMgKG5vdyBpbiAyLjQgdHJlZSkKKy0gZGlyZWN0IGtpb2J1ZiBiYXNlZCBpL28gdG8gZGV2aWNlcyAobm8gaW50ZXJtZWRpYXRlIGJoJ3MpCistIHBhZ2UgaS9vIHVzaW5nIGtpb2J1ZgorLSBraW9idWYgc3BsaXR0aW5nIGZvciBsdm0gKG1rcCkKKy0gZWxldmF0b3Igc3VwcG9ydCBmb3Iga2lvYnVmIHJlcXVlc3QgbWVyZ2luZyAoYXhib2UpCis4LjIuIFplcm8tY29weSBuZXR3b3JraW5nIChEYXZlIE1pbGxlcikKKzguMy4gU0dJIFhGUyAtIHBhZ2VidWYgcGF0Y2hlcyAtIHVzZSBvZiBraW9idWZzCis4LjQuIE11bHRpLXBhZ2UgcGlvZW50IHBhdGNoIGZvciBiaW8gKENocmlzdG9waCBIZWxsd2lnKQorOC41LiBEaXJlY3QgaS9vIGltcGxlbWVudGF0aW9uIChBbmRyZWEgQXJjYW5nZWxpKSBzaW5jZSAyLjQuMTAtcHJlMTEKKzguNi4gQXN5bmMgaS9vIGltcGxlbWVudGF0aW9uIHBhdGNoIChCZW4gTGFIYWlzZSkKKzguNy4gRVZNUyBsYXllcmluZyBkZXNpZ24gKElCTSBFVk1TIHRlYW0pCis4LjguIExhcmdlciBwYWdlIGNhY2hlIHNpemUgcGF0Y2ggKEJlbiBMYUhhaXNlKSBhbmQKKyAgICAgTGFyZ2UgcGFnZSBzaXplIChEYW5pZWwgUGhpbGxpcHMpCisgICAgPT4gbGFyZ2VyIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5IGJ1ZmZlcnMKKzguOS4gVk0gcmVzZXJ2YXRpb25zIHBhdGNoIChCZW4gTGFIYWlzZSkKKzguMTAuIFdyaXRlIGNsdXN0ZXJpbmcgcGF0Y2hlcyA/IChNYXJjZWxvL1F1aW50ZWxhL1JpZWwgPykKKzguMTEuIEJsb2NrIGRldmljZSBpbiBwYWdlIGNhY2hlIHBhdGNoIChBbmRyZWEgQXJjaGFuZ2VsaSkgLSBub3cgaW4gMi40LjEwKworOC4xMi4gTXVsdGlwbGUgYmxvY2stc2l6ZSB0cmFuc2ZlcnMgZm9yIGZhc3RlciByYXcgaS9vIChTaGFpbGFiaCBOYWdhciwKKyAgICAgIEJhZGFyaSkKKzguMTMgIFByaW9yaXR5IGJhc2VkIGkvbyBzY2hlZHVsZXIgLSBwcmVwYXRjaGVzIChBcmphbiB2YW4gZGUgVmVuKQorOC4xNCAgSURFIFRhc2tmaWxlIGkvbyBwYXRjaCAoQW5kcmUgSGVkcmljaykKKzguMTUgIE11bHRpLXBhZ2Ugd3JpdGVvdXQgYW5kIHJlYWRhaGVhZCBwYXRjaGVzIChBbmRyZXcgTW9ydG9uKQorOC4xNiAgRGlyZWN0IGkvbyBwYXRjaGVzIGZvciAyLjUgdXNpbmcga3ZlYyBhbmQgYmlvIChCYWRhcmkgUHVsYXZhcnRoeSkKKworOS4gT3RoZXIgUmVmZXJlbmNlczoKKworOS4xIFRoZSBTcGxpY2UgSS9PIE1vZGVsIC0gTGFycnkgTWNWb3kgKGFuZCBzdWJzZXF1ZW50IGRpc2N1c3Npb25zIG9uIGxrbWwsCithbmQgTGludXMnIGNvbW1lbnRzIC0gSmFuIDIwMDEpCis5LjIgRGlzY3Vzc2lvbnMgYWJvdXQga2lvYnVmIGFuZCBiaCBkZXNpZ24gb24gbGttbCBiZXR3ZWVuIHNjdCwgbGludXMsIGFsYW4KK2V0IGFsIC0gRmViLU1hcmNoIDIwMDEgKG1hbnkgb2YgdGhlIGluaXRpYWwgdGhvdWdodHMgdGhhdCBsZWQgdG8gYmlvIHdlcmUKK2Jyb3VnaHQgdXAgaW4gdGhpcyBkaXNjdXNpb24gdGhyZWFkKQorOS4zIERpc2N1c3Npb25zIG9uIG1lbXBvb2wgb24gbGttbCAtIERlYyAyMDAxLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTE4YjNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLnR4dApAQCAtMCwwICsxLDc4IEBACitEZWFkbGluZSBJTyBzY2hlZHVsZXIgdHVuYWJsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGxpdHRsZSBmaWxlIGF0dGVtcHRzIHRvIGRvY3VtZW50IGhvdyB0aGUgZGVhZGxpbmUgaW8gc2NoZWR1bGVyIHdvcmtzLgorSW4gcGFydGljdWxhciwgaXQgd2lsbCBjbGFyaWZ5IHRoZSBtZWFuaW5nIG9mIHRoZSBleHBvc2VkIHR1bmFibGVzIHRoYXQgbWF5IGJlCitvZiBpbnRlcmVzdCB0byBwb3dlciB1c2Vycy4KKworRWFjaCBpbyBxdWV1ZSBoYXMgYSBzZXQgb2YgaW8gc2NoZWR1bGVyIHR1bmFibGVzIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhlc2UKK3R1bmFibGVzIGNvbnRyb2wgaG93IHRoZSBpbyBzY2hlZHVsZXIgd29ya3MuIFlvdSBjYW4gZmluZCB0aGVzZSBlbnRyaWVzCitpbjoKKworL3N5cy9ibG9jay88ZGV2aWNlPi9xdWV1ZS9pb3NjaGVkCisKK2Fzc3VtaW5nIHRoYXQgeW91IGhhdmUgc3lzZnMgbW91bnRlZCBvbiAvc3lzLiBJZiB5b3UgZG9uJ3QgaGF2ZSBzeXNmcyBtb3VudGVkLAoreW91IGNhbiBkbyBzbyBieSB0eXBpbmc6CisKKyMgbW91bnQgbm9uZSAvc3lzIC10IHN5c2ZzCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCityZWFkX2V4cGlyZQkoaW4gbXMpCistLS0tLS0tLS0tLQorCitUaGUgZ29hbCBvZiB0aGUgZGVhZGxpbmUgaW8gc2NoZWR1bGVyIGlzIHRvIGF0dGVtcHQgdG8gZ3VhcmVudGVlIGEgc3RhcnQKK3NlcnZpY2UgdGltZSBmb3IgYSByZXF1ZXN0LiBBcyB3ZSBmb2N1cyBtYWlubHkgb24gcmVhZCBsYXRlbmNpZXMsIHRoaXMgaXMKK3R1bmFibGUuIFdoZW4gYSByZWFkIHJlcXVlc3QgZmlyc3QgZW50ZXJzIHRoZSBpbyBzY2hlZHVsZXIsIGl0IGlzIGFzc2lnbmVkCithIGRlYWRsaW5lIHRoYXQgaXMgdGhlIGN1cnJlbnQgdGltZSArIHRoZSByZWFkX2V4cGlyZSB2YWx1ZSBpbiB1bml0cyBvZgorbWlsaXNlY29uZHMuCisKKword3JpdGVfZXhwaXJlCShpbiBtcykKKy0tLS0tLS0tLS0tCisKK1NpbWlsYXIgdG8gcmVhZF9leHBpcmUgbWVudGlvbmVkIGFib3ZlLCBidXQgZm9yIHdyaXRlcy4KKworCitmaWZvX2JhdGNoCistLS0tLS0tLS0tCisKK1doZW4gYSByZWFkIHJlcXVlc3QgZXhwaXJlcyBpdHMgZGVhZGxpbmUsIHdlIG11c3QgbW92ZSBzb21lIHJlcXVlc3RzIGZyb20KK3RoZSBzb3J0ZWQgaW8gc2NoZWR1bGVyIGxpc3QgdG8gdGhlIGJsb2NrIGRldmljZSBkaXNwYXRjaCBxdWV1ZS4gZmlmb19iYXRjaAorY29udHJvbHMgaG93IG1hbnkgcmVxdWVzdHMgd2UgbW92ZSwgYmFzZWQgb24gdGhlIGNvc3Qgb2YgZWFjaCByZXF1ZXN0LiBBCityZXF1ZXN0IGlzIGVpdGhlciBxdWFsaWZpZWQgYXMgYSBzZWVrIG9yIGEgc3RyZWFtLiBUaGUgaW8gc2NoZWR1bGVyIGtub3dzCit0aGUgbGFzdCByZXF1ZXN0IHRoYXQgd2FzIHNlcnZpY2VkIGJ5IHRoZSBkcml2ZSAob3Igd2lsbCBiZSBzZXJ2aWNlZCByaWdodAorYmVmb3JlIHRoaXMgb25lKS4gU2VlIHNlZWtfY29zdCBhbmQgc3RyZWFtX3VuaXQuCisKKword3JpdGVfc3RhcnZlZAkobnVtYmVyIG9mIGRpc3BhdGNoZXMpCistLS0tLS0tLS0tLS0tCisKK1doZW4gd2UgaGF2ZSB0byBtb3ZlIHJlcXVlc3RzIGZyb20gdGhlIGlvIHNjaGVkdWxlciBxdWV1ZSB0byB0aGUgYmxvY2sKK2RldmljZSBkaXNwYXRjaCBxdWV1ZSwgd2UgYWx3YXlzIGdpdmUgYSBwcmVmZXJlbmNlIHRvIHJlYWRzLiBIb3dldmVyLCB3ZQorZG9uJ3Qgd2FudCB0byBzdGFydmUgd3JpdGVzIGluZGVmaW5pdGVseSBlaXRoZXIuIFNvIHdyaXRlc19zdGFydmVkIGNvbnRyb2xzCitob3cgbWFueSB0aW1lcyB3ZSBnaXZlIHByZWZlcmVuY2UgdG8gcmVhZHMgb3ZlciB3cml0ZXMuIFdoZW4gdGhhdCBoYXMgYmVlbgorZG9uZSB3cml0ZXNfc3RhcnZlZCBudW1iZXIgb2YgdGltZXMsIHdlIGRpc3BhdGNoIHNvbWUgd3JpdGVzIGJhc2VkIG9uIHRoZQorc2FtZSBjcml0ZXJpYSBhcyByZWFkcy4KKworCitmcm9udF9tZXJnZXMJKGJvb2wpCistLS0tLS0tLS0tLS0KKworU29tZXRpbWVzIGl0IGhhcHBlbnMgdGhhdCBhIHJlcXVlc3QgZW50ZXJzIHRoZSBpbyBzY2hlZHVsZXIgdGhhdCBpcyBjb250aWdpb3VzCit3aXRoIGEgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgb24gdGhlIHF1ZXVlLiBFaXRoZXIgaXQgZml0cyBpbiB0aGUgYmFjayBvZiB0aGF0CityZXF1ZXN0LCBvciBpdCBmaXRzIGF0IHRoZSBmcm9udC4gVGhhdCBpcyBjYWxsZWQgZWl0aGVyIGEgYmFjayBtZXJnZSBjYW5kaWRhdGUKK29yIGEgZnJvbnQgbWVyZ2UgY2FuZGlkYXRlLiBEdWUgdG8gdGhlIHdheSBmaWxlcyBhcmUgdHlwaWNhbGx5IGxhaWQgb3V0LAorYmFjayBtZXJnZXMgYXJlIG11Y2ggbW9yZSBjb21tb24gdGhhbiBmcm9udCBtZXJnZXMuIEZvciBzb21lIHdvcmsgbG9hZHMsIHlvdQorbWF5IGV2ZW4ga25vdyB0aGF0IGl0IGlzIGEgd2FzdGUgb2YgdGltZSB0byBzcGVuZCBhbnkgdGltZSBhdHRlbXB0aW5nIHRvCitmcm9udCBtZXJnZSByZXF1ZXN0cy4gU2V0dGluZyBmcm9udF9tZXJnZXMgdG8gMCBkaXNhYmxlcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCitGcm9udCBtZXJnZXMgbWF5IHN0aWxsIG9jY3VyIGR1ZSB0byB0aGUgY2FjaGVkIGxhc3RfbWVyZ2UgaGludCwgYnV0IHNpbmNlCit0aGF0IGNvbWVzIGF0IGJhc2ljYWxseSAwIGNvc3Qgd2UgbGVhdmUgdGhhdCBvbi4gV2Ugc2ltcGx5IGRpc2FibGUgdGhlCityYnRyZWUgZnJvbnQgc2VjdG9yIGxvb2t1cCB3aGVuIHRoZSBpbyBzY2hlZHVsZXIgbWVyZ2UgZnVuY3Rpb24gaXMgY2FsbGVkLgorCisKK05vdiAxMSAyMDAyLCBKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svcmVxdWVzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3JlcXVlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTI0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3JlcXVlc3QudHh0CkBAIC0wLDAgKzEsODggQEAKKworc3RydWN0IHJlcXVlc3QgZG9jdW1lbnRhdGlvbgorCitKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPiAyNy8wNS8wMgorCisxLjAKK0luZGV4CisKKzIuMCBTdHJ1Y3QgcmVxdWVzdCBtZW1iZXJzIGNsYXNzaWZpY2F0aW9uCisKKwkyLjEgc3RydWN0IHJlcXVlc3QgbWVtYmVycyBleHBsYW5hdGlvbgorCiszLjAKKworCisyLjAKK1Nob3J0IGV4cGxhbmF0aW9uIG9mIHJlcXVlc3QgbWVtYmVycworCitDbGFzc2lmaWNhdGlvbiBmbGFnczoKKworCUQJZHJpdmVyIG1lbWJlcgorCUIJYmxvY2sgbGF5ZXIgbWVtYmVyCisJSQlJL08gc2NoZWR1bGVyIG1lbWJlcgorCitVbmxlc3MgYW4gZW50cnkgY29udGFpbnMgYSBEIGNsYXNzaWZpY2F0aW9uLCBhIGRldmljZSBkcml2ZXIgbXVzdCBub3QgYWNjZXNzCit0aGlzIG1lbWJlci4gU29tZSBtZW1iZXJzIG1heSBjb250YWluIEQgY2xhc3NpZmljYXRpb25zLCBidXQgc2hvdWxkIG9ubHkgYmUKK2FjY2VzcyB0aHJvdWdoIGNlcnRhaW4gbWFjcm9zIG9yIGZ1bmN0aW9ucyAoZWcgLT5mbGFncykuCisKKzxsaW51eC9ibGtkZXYuaD4KKworMi4xCitNZW1iZXIJCQkJRmxhZwlDb21tZW50CistLS0tLS0JCQkJLS0tLQktLS0tLS0tCisKK3N0cnVjdCBsaXN0X2hlYWQgcXVldWVsaXN0CUJJCU9yZ2FuaXphdGlvbiBvbiB2YXJpb3VzIGludGVybmFsCisJCQkJCXF1ZXVlcworCit2b2lkICplbGV2YXRvcl9wcml2YXRlCQlJCUkvTyBzY2hlZHVsZXIgcHJpdmF0ZSBkYXRhCisKK3Vuc2lnbmVkIGNoYXIgY21kWzE2XQkJRAlEcml2ZXIgY2FuIHVzZSB0aGlzIGZvciBzZXR0aW5nIHVwCisJCQkJCWEgY2RiIGJlZm9yZSBleGVjdXRpb24sIHNlZQorCQkJCQlibGtfcXVldWVfcHJlcF9ycQorCit1bnNpZ25lZCBsb25nIGZsYWdzCQlEQkkJQ29udGFpbnMgaW5mbyBhYm91dCBkYXRhIGRpcmVjdGlvbiwKKwkJCQkJcmVxdWVzdCB0eXBlLCBldGMuCisKK2ludCBycV9zdGF0dXMJCQlECVJlcXVlc3Qgc3RhdHVzIGJpdHMKKwora2Rldl90IHJxX2RldgkJCURCSQlUYXJnZXQgZGV2aWNlCisKK2ludCBlcnJvcnMJCQlEQglFcnJvciBjb3VudHMKKworc2VjdG9yX3Qgc2VjdG9yCQkJREJJCVRhcmdldCBsb2NhdGlvbgorCit1bnNpZ25lZCBsb25nIGhhcmRfbnJfc2VjdG9ycwlCCVVzZWQgdG8ga2VlcCBzZWN0b3Igc2FuZQorCit1bnNpZ25lZCBsb25nIG5yX3NlY3RvcnMJREJJCVRvdGFsIG51bWJlciBvZiBzZWN0b3JzIGluIHJlcXVlc3QKKwordW5zaWduZWQgbG9uZyBoYXJkX25yX3NlY3RvcnMJQglVc2VkIHRvIGtlZXAgbnJfc2VjdG9ycyBzYW5lCisKK3Vuc2lnbmVkIHNob3J0IG5yX3BoeXNfc2VnbWVudHMJREIJTnVtYmVyIG9mIHBoeXNpY2FsIHNjYXR0ZXIgZ2F0aGVyCisJCQkJCXNlZ21lbnRzIGluIGEgcmVxdWVzdAorCit1bnNpZ25lZCBzaG9ydCBucl9od19zZWdtZW50cwlEQglOdW1iZXIgb2YgaGFyZHdhcmUgc2NhdHRlciBnYXRoZXIKKwkJCQkJc2VnbWVudHMgaW4gYSByZXF1ZXN0CisKK3Vuc2lnbmVkIGludCBjdXJyZW50X25yX3NlY3RvcnMJREIJTnVtYmVyIG9mIHNlY3RvcnMgaW4gZmlyc3Qgc2VnbWVudAorCQkJCQlvZiByZXF1ZXN0CisKK3Vuc2lnbmVkIGludCBoYXJkX2N1cl9zZWN0b3JzCUIJVXNlZCB0byBrZWVwIGN1cnJlbnRfbnJfc2VjdG9ycyBzYW5lCisKK2ludCB0YWcJCQkJREIJVENRIHRhZywgaWYgYXNzaWduZWQKKwordm9pZCAqc3BlY2lhbAkJCUQJRnJlZSB0byBiZSB1c2VkIGJ5IGRyaXZlcgorCitjaGFyICpidWZmZXIJCQlECU1hcCBvZiBmaXJzdCBzZWdtZW50LCBhbHNvIHNlZQorCQkJCQlzZWN0aW9uIG9uIGJvdW5jaW5nIFNFQ1RJT04KKworc3RydWN0IGNvbXBsZXRpb24gKndhaXRpbmcJRAlDYW4gYmUgdXNlZCBieSBkcml2ZXIgdG8gZ2V0IHNpZ25hbGxlZAorCQkJCQlvbiByZXF1ZXN0IGNvbXBsZXRpb24KKworc3RydWN0IGJpbyAqYmlvCQkJREJJCUZpcnN0IGJpbyBpbiByZXF1ZXN0CisKK3N0cnVjdCBiaW8gKmJpb3RhaWwJCURCSQlMYXN0IGJpbyBpbiByZXF1ZXN0CisKK3JlcXVlc3RfcXVldWVfdCAqcQkJREIJUmVxdWVzdCBxdWV1ZSB0aGlzIHJlcXVlc3QgYmVsb25ncyB0bworCitzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybAkJQglSZXF1ZXN0IGxpc3QgdGhpcyByZXF1ZXN0IGNhbWUgZnJvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTMyZmIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKQEAgLTAsMCArMSwzODQgQEAKKwkJQ2FjaGUgYW5kIFRMQiBGbHVzaGluZworCQkgICAgIFVuZGVyIExpbnV4CisKKwkgICAgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY2FjaGUvdGxiIGZsdXNoaW5nIGludGVyZmFjZXMgY2FsbGVkCitieSB0aGUgTGludXggVk0gc3Vic3lzdGVtLiAgSXQgZW51bWVyYXRlcyBvdmVyIGVhY2ggaW50ZXJmYWNlLAorZGVzY3JpYmVzIGl0J3MgaW50ZW5kZWQgcHVycG9zZSwgYW5kIHdoYXQgc2lkZSBlZmZlY3QgaXMgZXhwZWN0ZWQKK2FmdGVyIHRoZSBpbnRlcmZhY2UgaXMgaW52b2tlZC4KKworVGhlIHNpZGUgZWZmZWN0cyBkZXNjcmliZWQgYmVsb3cgYXJlIHN0YXRlZCBmb3IgYSB1bmlwcm9jZXNzb3IKK2ltcGxlbWVudGF0aW9uLCBhbmQgd2hhdCBpcyB0byBoYXBwZW4gb24gdGhhdCBzaW5nbGUgcHJvY2Vzc29yLiAgVGhlCitTTVAgY2FzZXMgYXJlIGEgc2ltcGxlIGV4dGVuc2lvbiwgaW4gdGhhdCB5b3UganVzdCBleHRlbmQgdGhlCitkZWZpbml0aW9uIHN1Y2ggdGhhdCB0aGUgc2lkZSBlZmZlY3QgZm9yIGEgcGFydGljdWxhciBpbnRlcmZhY2Ugb2NjdXJzCitvbiBhbGwgcHJvY2Vzc29ycyBpbiB0aGUgc3lzdGVtLiAgRG9uJ3QgbGV0IHRoaXMgc2NhcmUgeW91IGludG8KK3RoaW5raW5nIFNNUCBjYWNoZS90bGIgZmx1c2hpbmcgbXVzdCBiZSBzbyBpbmVmZmljaWVudCwgdGhpcyBpcyBpbgorZmFjdCBhbiBhcmVhIHdoZXJlIG1hbnkgb3B0aW1pemF0aW9ucyBhcmUgcG9zc2libGUuICBGb3IgZXhhbXBsZSwKK2lmIGl0IGNhbiBiZSBwcm92ZW4gdGhhdCBhIHVzZXIgYWRkcmVzcyBzcGFjZSBoYXMgbmV2ZXIgZXhlY3V0ZWQKK29uIGEgY3B1IChzZWUgdm1hLT5jcHVfdm1fbWFzayksIG9uZSBuZWVkIG5vdCBwZXJmb3JtIGEgZmx1c2gKK2ZvciB0aGlzIGFkZHJlc3Mgc3BhY2Ugb24gdGhhdCBjcHUuCisKK0ZpcnN0LCB0aGUgVExCIGZsdXNoaW5nIGludGVyZmFjZXMsIHNpbmNlIHRoZXkgYXJlIHRoZSBzaW1wbGVzdC4gIFRoZQorIlRMQiIgaXMgYWJzdHJhY3RlZCB1bmRlciBMaW51eCBhcyBzb21ldGhpbmcgdGhlIGNwdSB1c2VzIHRvIGNhY2hlCit2aXJ0dWFsLS0+cGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbnMgb2J0YWluZWQgZnJvbSB0aGUgc29mdHdhcmUKK3BhZ2UgdGFibGVzLiAgTWVhbmluZyB0aGF0IGlmIHRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcyBjaGFuZ2UsIGl0IGlzCitwb3NzaWJsZSBmb3Igc3RhbGUgdHJhbnNsYXRpb25zIHRvIGV4aXN0IGluIHRoaXMgIlRMQiIgY2FjaGUuCitUaGVyZWZvcmUgd2hlbiBzb2Z0d2FyZSBwYWdlIHRhYmxlIGNoYW5nZXMgb2NjdXIsIHRoZSBrZXJuZWwgd2lsbAoraW52b2tlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZsdXNoIG1ldGhvZHMgX2FmdGVyXyB0aGUgcGFnZSB0YWJsZQorY2hhbmdlcyBvY2N1cjoKKworMSkgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCisKKwlUaGUgbW9zdCBzZXZlcmUgZmx1c2ggb2YgYWxsLiAgQWZ0ZXIgdGhpcyBpbnRlcmZhY2UgcnVucywKKwlhbnkgcHJldmlvdXMgcGFnZSB0YWJsZSBtb2RpZmljYXRpb24gd2hhdHNvZXZlciB3aWxsIGJlCisJdmlzaWJsZSB0byB0aGUgY3B1LgorCisJVGhpcyBpcyB1c3VhbGx5IGludm9rZWQgd2hlbiB0aGUga2VybmVsIHBhZ2UgdGFibGVzIGFyZQorCWNoYW5nZWQsIHNpbmNlIHN1Y2ggdHJhbnNsYXRpb25zIGFyZSAiZ2xvYmFsIiBpbiBuYXR1cmUuCisKKzIpIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorCisJVGhpcyBpbnRlcmZhY2UgZmx1c2hlcyBhbiBlbnRpcmUgdXNlciBhZGRyZXNzIHNwYWNlIGZyb20KKwl0aGUgVExCLiAgQWZ0ZXIgcnVubmluZywgdGhpcyBpbnRlcmZhY2UgbXVzdCBtYWtlIHN1cmUgdGhhdAorCWFueSBwcmV2aW91cyBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBhZGRyZXNzIHNwYWNlCisJJ21tJyB3aWxsIGJlIHZpc2libGUgdG8gdGhlIGNwdS4gIFRoYXQgaXMsIGFmdGVyIHJ1bm5pbmcsCisJdGhlcmUgd2lsbCBiZSBubyBlbnRyaWVzIGluIHRoZSBUTEIgZm9yICdtbScuCisKKwlUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGhhbmRsZSB3aG9sZSBhZGRyZXNzIHNwYWNlCisJcGFnZSB0YWJsZSBvcGVyYXRpb25zIHN1Y2ggYXMgd2hhdCBoYXBwZW5zIGR1cmluZworCWZvcmssIGFuZCBleGVjLgorCisJUGxhdGZvcm0gZGV2ZWxvcGVycyBub3RlIHRoYXQgZ2VuZXJpYyBjb2RlIHdpbGwgYWx3YXlzCisJaW52b2tlIHRoaXMgaW50ZXJmYWNlIHdpdGhvdXQgbW0tPnBhZ2VfdGFibGVfbG9jayBoZWxkLgorCiszKSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCisJSGVyZSB3ZSBhcmUgZmx1c2hpbmcgYSBzcGVjaWZpYyByYW5nZSBvZiAodXNlcikgdmlydHVhbAorCWFkZHJlc3MgdHJhbnNsYXRpb25zIGZyb20gdGhlIFRMQi4gIEFmdGVyIHJ1bm5pbmcsIHRoaXMKKwlpbnRlcmZhY2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlvdXMgcGFnZSB0YWJsZQorCW1vZGlmaWNhdGlvbnMgZm9yIHRoZSBhZGRyZXNzIHNwYWNlICd2bWEtPnZtX21tJyBpbiB0aGUgcmFuZ2UKKwknc3RhcnQnIHRvICdlbmQtMScgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBjcHUuICBUaGF0IGlzLCBhZnRlcgorCXJ1bm5pbmcsIGhlcmUgd2lsbCBiZSBubyBlbnRyaWVzIGluIHRoZSBUTEIgZm9yICdtbScgZm9yCisJdmlydHVhbCBhZGRyZXNzZXMgaW4gdGhlIHJhbmdlICdzdGFydCcgdG8gJ2VuZC0xJy4KKworCVRoZSAidm1hIiBpcyB0aGUgYmFja2luZyBzdG9yZSBiZWluZyB1c2VkIGZvciB0aGUgcmVnaW9uLgorCVByaW1hcmlseSwgdGhpcyBpcyB1c2VkIGZvciBtdW5tYXAoKSB0eXBlIG9wZXJhdGlvbnMuCisKKwlUaGUgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIGluIGhvcGVzIHRoYXQgdGhlIHBvcnQgY2FuIGZpbmQKKwlhIHN1aXRhYmx5IGVmZmljaWVudCBtZXRob2QgZm9yIHJlbW92aW5nIG11bHRpcGxlIHBhZ2UKKwlzaXplZCB0cmFuc2xhdGlvbnMgZnJvbSB0aGUgVExCLCBpbnN0ZWFkIG9mIGhhdmluZyB0aGUga2VybmVsCisJY2FsbCBmbHVzaF90bGJfcGFnZSAoc2VlIGJlbG93KSBmb3IgZWFjaCBlbnRyeSB3aGljaCBtYXkgYmUKKwltb2RpZmllZC4KKworCVBsYXRmb3JtIGRldmVsb3BlcnMgbm90ZSB0aGF0IGdlbmVyaWMgY29kZSB3aWxsIGFsd2F5cworCWludm9rZSB0aGlzIGludGVyZmFjZSB3aXRoIG1tLT5wYWdlX3RhYmxlX2xvY2sgaGVsZC4KKworNCkgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQorCisJVGhpcyB0aW1lIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBQQUdFX1NJWkUgc2l6ZWQgdHJhbnNsYXRpb24KKwlmcm9tIHRoZSBUTEIuICBUaGUgJ3ZtYScgaXMgdGhlIGJhY2tpbmcgc3RydWN0dXJlIHVzZWQgYnkKKwlMaW51eCB0byBrZWVwIHRyYWNrIG9mIG1tYXAnZCByZWdpb25zIGZvciBhIHByb2Nlc3MsIHRoZQorCWFkZHJlc3Mgc3BhY2UgaXMgYXZhaWxhYmxlIHZpYSB2bWEtPnZtX21tLiAgQWxzbywgb25lIG1heQorCXRlc3QgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB0byBzZWUgaWYgdGhpcyByZWdpb24gaXMKKwlleGVjdXRhYmxlIChhbmQgdGh1cyBjb3VsZCBiZSBpbiB0aGUgJ2luc3RydWN0aW9uIFRMQicgaW4KKwlzcGxpdC10bGIgdHlwZSBzZXR1cHMpLgorCisJQWZ0ZXIgcnVubmluZywgdGhpcyBpbnRlcmZhY2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlvdXMKKwlwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbiBmb3IgYWRkcmVzcyBzcGFjZSAndm1hLT52bV9tbScgZm9yCisJdXNlciB2aXJ0dWFsIGFkZHJlc3MgJ2FkZHInIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgY3B1LiAgVGhhdAorCWlzLCBhZnRlciBydW5uaW5nLCB0aGVyZSB3aWxsIGJlIG5vIGVudHJpZXMgaW4gdGhlIFRMQiBmb3IKKwkndm1hLT52bV9tbScgZm9yIHZpcnR1YWwgYWRkcmVzcyAnYWRkcicuCisKKwlUaGlzIGlzIHVzZWQgcHJpbWFyaWx5IGR1cmluZyBmYXVsdCBwcm9jZXNzaW5nLgorCisJUGxhdGZvcm0gZGV2ZWxvcGVycyBub3RlIHRoYXQgZ2VuZXJpYyBjb2RlIHdpbGwgYWx3YXlzCisJaW52b2tlIHRoaXMgaW50ZXJmYWNlIHdpdGggbW0tPnBhZ2VfdGFibGVfbG9jayBoZWxkLgorCis1KSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCisgICBUaGUgc29mdHdhcmUgcGFnZSB0YWJsZXMgZm9yIGFkZHJlc3Mgc3BhY2UgJ21tJyBmb3IgdmlydHVhbAorICAgYWRkcmVzc2VzIGluIHRoZSByYW5nZSAnc3RhcnQnIHRvICdlbmQtMScgYXJlIGJlaW5nIHRvcm4gZG93bi4KKworICAgU29tZSBwbGF0Zm9ybXMgY2FjaGUgdGhlIGxvd2VzdCBsZXZlbCBvZiB0aGUgc29mdHdhcmUgcGFnZSB0YWJsZXMKKyAgIGluIGEgbGluZWFyIHZpcnR1YWxseSBtYXBwZWQgYXJyYXksIHRvIG1ha2UgVExCIG1pc3MgcHJvY2Vzc2luZworICAgbW9yZSBlZmZpY2llbnQuICBPbiBzdWNoIHBsYXRmb3Jtcywgc2luY2UgdGhlIFRMQiBpcyBjYWNoaW5nIHRoZQorICAgc29mdHdhcmUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmUsIGl0IG5lZWRzIHRvIGJlIGZsdXNoZWQgd2hlbiBwYXJ0cworICAgb2YgdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGUgdHJlZSBhcmUgdW5saW5rZWQvZnJlZWQuCisKKyAgIFNwYXJjNjQgaXMgb25lIGV4YW1wbGUgb2YgYSBwbGF0Zm9ybSB3aGljaCBkb2VzIHRoaXMuCisKKyAgIFVzdWFsbHksIHdoZW4gbXVubWFwKCknaW5nIGFuIGFyZWEgb2YgdXNlciB2aXJ0dWFsIGFkZHJlc3MKKyAgIHNwYWNlLCB0aGUga2VybmVsIGxlYXZlcyB0aGUgcGFnZSB0YWJsZSBwYXJ0cyBhcm91bmQgYW5kIGp1c3QKKyAgIG1hcmtzIHRoZSBpbmRpdmlkdWFsIHB0ZSdzIGFzIGludmFsaWQuICBIb3dldmVyLCBpZiB2ZXJ5IGxhcmdlCisgICBwb3J0aW9ucyBvZiB0aGUgYWRkcmVzcyBzcGFjZSBhcmUgdW5tYXBwZWQsIHRoZSBrZXJuZWwgZnJlZXMgdXAKKyAgIHRob3NlIHBvcnRpb25zIG9mIHRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcyB0byBwcmV2ZW50IHBvdGVudGlhbAorICAgZXhjZXNzaXZlIGtlcm5lbCBtZW1vcnkgdXNhZ2UgY2F1c2VkIGJ5IGVycmF0aWMgbW1hcC9tbXVubWFwCisgICBzZXF1ZW5jZXMuICBJdCBpcyBhdCB0aGVzZSB0aW1lcyB0aGF0IGZsdXNoX3RsYl9wZ3RhYmxlcyB3aWxsCisgICBiZSBpbnZva2VkLgorCis2KSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisKKwlBdCB0aGUgZW5kIG9mIGV2ZXJ5IHBhZ2UgZmF1bHQsIHRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvCisJdGVsbCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgdGhhdCBhIHRyYW5zbGF0aW9uCisJZGVzY3JpYmVkIGJ5ICJwdGUiIG5vdyBleGlzdHMgYXQgdmlydHVhbCBhZGRyZXNzICJhZGRyZXNzIgorCWZvciBhZGRyZXNzIHNwYWNlICJ2bWEtPnZtX21tIiwgaW4gdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzLgorCisJQSBwb3J0IG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiBpbiBhbnkgd2F5IGl0IHNvIGNob29zZXMuCisJRm9yIGV4YW1wbGUsIGl0IGNvdWxkIHVzZSB0aGlzIGV2ZW50IHRvIHByZS1sb2FkIFRMQgorCXRyYW5zbGF0aW9ucyBmb3Igc29mdHdhcmUgbWFuYWdlZCBUTEIgY29uZmlndXJhdGlvbnMuCisJVGhlIHNwYXJjNjQgcG9ydCBjdXJyZW50bHkgZG9lcyB0aGlzLgorCis3KSB2b2lkIHRsYl9taWdyYXRlX2ZpbmlzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKKworCVRoaXMgaW50ZXJmYWNlIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGFuIGV4cGxpY2l0CisJcHJvY2VzcyBtaWdyYXRpb24uIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgaG9vaworCXRvIGFsbG93IGEgcGxhdGZvcm0gdG8gdXBkYXRlIFRMQiBvciBjb250ZXh0LXNwZWNpZmljCisJaW5mb3JtYXRpb24gZm9yIHRoZSBhZGRyZXNzIHNwYWNlLgorCisJVGhlIGlhNjQgc24yIHBsYXRmb3JtIGlzIG9uZSBleGFtcGxlIG9mIGEgcGxhdGZvcm0KKwl0aGF0IHVzZXMgdGhpcyBpbnRlcmZhY2UuCisKKzgpIHZvaWQgbGF6eV9tbXVfcHJvdF91cGRhdGUocHRlX3QgcHRlKQorCVRoaXMgaW50ZXJmYWNlIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgcHJvdGVjdGlvbiBvbgorCWFueSB1c2VyIFBURXMgY2hhbmdlLiAgVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBub3RpZmljYXRpb24KKwl0byBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSB0byB0YWtlIGFwcHJvcGlhdGUgYWN0aW9uLgorCisKK05leHQsIHdlIGhhdmUgdGhlIGNhY2hlIGZsdXNoaW5nIGludGVyZmFjZXMuICBJbiBnZW5lcmFsLCB3aGVuIExpbnV4CitpcyBjaGFuZ2luZyBhbiBleGlzdGluZyB2aXJ0dWFsLS0+cGh5c2ljYWwgbWFwcGluZyB0byBhIG5ldyB2YWx1ZSwKK3RoZSBzZXF1ZW5jZSB3aWxsIGJlIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorCisJMSkgZmx1c2hfY2FjaGVfbW0obW0pOworCSAgIGNoYW5nZV9hbGxfcGFnZV90YWJsZXNfb2YobW0pOworCSAgIGZsdXNoX3RsYl9tbShtbSk7CisKKwkyKSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOworCSAgIGNoYW5nZV9yYW5nZV9vZl9wYWdlX3RhYmxlcyhtbSwgc3RhcnQsIGVuZCk7CisJICAgZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7CisKKwkzKSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkciwgcGZuKTsKKwkgICBzZXRfcHRlKHB0ZV9wb2ludGVyLCBuZXdfcHRlX3ZhbCk7CisJICAgZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyKTsKKworVGhlIGNhY2hlIGxldmVsIGZsdXNoIHdpbGwgYWx3YXlzIGJlIGZpcnN0LCBiZWNhdXNlIHRoaXMgYWxsb3dzCit1cyB0byBwcm9wZXJseSBoYW5kbGUgc3lzdGVtcyB3aG9zZSBjYWNoZXMgYXJlIHN0cmljdCBhbmQgcmVxdWlyZQorYSB2aXJ0dWFsLS0+cGh5c2ljYWwgdHJhbnNsYXRpb24gdG8gZXhpc3QgZm9yIGEgdmlydHVhbCBhZGRyZXNzCit3aGVuIHRoYXQgdmlydHVhbCBhZGRyZXNzIGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUuICBUaGUgSHlwZXJTcGFyYworY3B1IGlzIG9uZSBzdWNoIGNwdSB3aXRoIHRoaXMgYXR0cmlidXRlLgorCitUaGUgY2FjaGUgZmx1c2hpbmcgcm91dGluZXMgYmVsb3cgbmVlZCBvbmx5IGRlYWwgd2l0aCBjYWNoZSBmbHVzaGluZwordG8gdGhlIGV4dGVudCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSBmb3IgYSBwYXJ0aWN1bGFyIGNwdS4gIE1vc3RseSwKK3RoZXNlIHJvdXRpbmVzIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIGNwdXMgd2hpY2ggaGF2ZSB2aXJ0dWFsbHkKK2luZGV4ZWQgY2FjaGVzIHdoaWNoIG11c3QgYmUgZmx1c2hlZCB3aGVuIHZpcnR1YWwtLT5waHlzaWNhbAordHJhbnNsYXRpb25zIGFyZSBjaGFuZ2VkIG9yIHJlbW92ZWQuICBTbywgZm9yIGV4YW1wbGUsIHRoZSBwaHlzaWNhbGx5CitpbmRleGVkIHBoeXNpY2FsbHkgdGFnZ2VkIGNhY2hlcyBvZiBJQTMyIHByb2Nlc3NvcnMgaGF2ZSBubyBuZWVkIHRvCitpbXBsZW1lbnQgdGhlc2UgaW50ZXJmYWNlcyBzaW5jZSB0aGUgY2FjaGVzIGFyZSBmdWxseSBzeW5jaHJvbml6ZWQKK2FuZCBoYXZlIG5vIGRlcGVuZGVuY3kgb24gdHJhbnNsYXRpb24gaW5mb3JtYXRpb24uCisKK0hlcmUgYXJlIHRoZSByb3V0aW5lcywgb25lIGJ5IG9uZToKKworMSkgdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKKworCVRoaXMgaW50ZXJmYWNlIGZsdXNoZXMgYW4gZW50aXJlIHVzZXIgYWRkcmVzcyBzcGFjZSBmcm9tCisJdGhlIGNhY2hlcy4gIFRoYXQgaXMsIGFmdGVyIHJ1bm5pbmcsIHRoZXJlIHdpbGwgYmUgbm8gY2FjaGUKKwlsaW5lcyBhc3NvY2lhdGVkIHdpdGggJ21tJy4KKworCVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gaGFuZGxlIHdob2xlIGFkZHJlc3Mgc3BhY2UKKwlwYWdlIHRhYmxlIG9wZXJhdGlvbnMgc3VjaCBhcyB3aGF0IGhhcHBlbnMgZHVyaW5nCisJZm9yaywgZXhpdCwgYW5kIGV4ZWMuCisKKzIpIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCisJSGVyZSB3ZSBhcmUgZmx1c2hpbmcgYSBzcGVjaWZpYyByYW5nZSBvZiAodXNlcikgdmlydHVhbAorCWFkZHJlc3NlcyBmcm9tIHRoZSBjYWNoZS4gIEFmdGVyIHJ1bm5pbmcsIHRoZXJlIHdpbGwgYmUgbm8KKwllbnRyaWVzIGluIHRoZSBjYWNoZSBmb3IgJ3ZtYS0+dm1fbW0nIGZvciB2aXJ0dWFsIGFkZHJlc3NlcyBpbgorCXRoZSByYW5nZSAnc3RhcnQnIHRvICdlbmQtMScuCisKKwlUaGUgInZtYSIgaXMgdGhlIGJhY2tpbmcgc3RvcmUgYmVpbmcgdXNlZCBmb3IgdGhlIHJlZ2lvbi4KKwlQcmltYXJpbHksIHRoaXMgaXMgdXNlZCBmb3IgbXVubWFwKCkgdHlwZSBvcGVyYXRpb25zLgorCisJVGhlIGludGVyZmFjZSBpcyBwcm92aWRlZCBpbiBob3BlcyB0aGF0IHRoZSBwb3J0IGNhbiBmaW5kCisJYSBzdWl0YWJseSBlZmZpY2llbnQgbWV0aG9kIGZvciByZW1vdmluZyBtdWx0aXBsZSBwYWdlCisJc2l6ZWQgcmVnaW9ucyBmcm9tIHRoZSBjYWNoZSwgaW5zdGVhZCBvZiBoYXZpbmcgdGhlIGtlcm5lbAorCWNhbGwgZmx1c2hfY2FjaGVfcGFnZSAoc2VlIGJlbG93KSBmb3IgZWFjaCBlbnRyeSB3aGljaCBtYXkgYmUKKwltb2RpZmllZC4KKworMykgdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQorCisJVGhpcyB0aW1lIHdlIG5lZWQgdG8gcmVtb3ZlIGEgUEFHRV9TSVpFIHNpemVkIHJhbmdlCisJZnJvbSB0aGUgY2FjaGUuICBUaGUgJ3ZtYScgaXMgdGhlIGJhY2tpbmcgc3RydWN0dXJlIHVzZWQgYnkKKwlMaW51eCB0byBrZWVwIHRyYWNrIG9mIG1tYXAnZCByZWdpb25zIGZvciBhIHByb2Nlc3MsIHRoZQorCWFkZHJlc3Mgc3BhY2UgaXMgYXZhaWxhYmxlIHZpYSB2bWEtPnZtX21tLiAgQWxzbywgb25lIG1heQorCXRlc3QgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB0byBzZWUgaWYgdGhpcyByZWdpb24gaXMKKwlleGVjdXRhYmxlIChhbmQgdGh1cyBjb3VsZCBiZSBpbiB0aGUgJ2luc3RydWN0aW9uIGNhY2hlJyBpbgorCSJIYXJ2YXJkIiB0eXBlIGNhY2hlIGxheW91dHMpLgorCisJVGhlICdwZm4nIGluZGljYXRlcyB0aGUgcGh5c2ljYWwgcGFnZSBmcmFtZSAoc2hpZnQgdGhpcyB2YWx1ZQorCWxlZnQgYnkgUEFHRV9TSElGVCB0byBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MpIHRoYXQgJ2FkZHInCisJdHJhbnNsYXRlcyB0by4gIEl0IGlzIHRoaXMgbWFwcGluZyB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCisJdGhlIGNhY2hlLgorCisJQWZ0ZXIgcnVubmluZywgdGhlcmUgd2lsbCBiZSBubyBlbnRyaWVzIGluIHRoZSBjYWNoZSBmb3IKKwkndm1hLT52bV9tbScgZm9yIHZpcnR1YWwgYWRkcmVzcyAnYWRkcicgd2hpY2ggdHJhbnNsYXRlcworCXRvICdwZm4nLgorCisJVGhpcyBpcyB1c2VkIHByaW1hcmlseSBkdXJpbmcgZmF1bHQgcHJvY2Vzc2luZy4KKworNCkgdm9pZCBmbHVzaF9jYWNoZV9rbWFwcyh2b2lkKQorCisJVGhpcyByb3V0aW5lIG5lZWQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiB0aGUgcGxhdGZvcm0gdXRpbGl6ZXMKKwloaWdobWVtLiAgSXQgd2lsbCBiZSBjYWxsZWQgcmlnaHQgYmVmb3JlIGFsbCBvZiB0aGUga21hcHMKKwlhcmUgaW52YWxpZGF0ZWQuCisKKwlBZnRlciBydW5uaW5nLCB0aGVyZSB3aWxsIGJlIG5vIGVudHJpZXMgaW4gdGhlIGNhY2hlIGZvcgorCXRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHJhbmdlIFBLTUFQX0FERFIoMCkgdG8KKwlQS01BUF9BRERSKExBU1RfUEtNQVApLgorCisJVGhpcyByb3V0aW5nIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBhc20vaGlnaG1lbS5oCisKKzUpIHZvaWQgZmx1c2hfY2FjaGVfdm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKKyAgIHZvaWQgZmx1c2hfY2FjaGVfdnVubWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorCisJSGVyZSBpbiB0aGVzZSB0d28gaW50ZXJmYWNlcyB3ZSBhcmUgZmx1c2hpbmcgYSBzcGVjaWZpYyByYW5nZQorCW9mIChrZXJuZWwpIHZpcnR1YWwgYWRkcmVzc2VzIGZyb20gdGhlIGNhY2hlLiAgQWZ0ZXIgcnVubmluZywKKwl0aGVyZSB3aWxsIGJlIG5vIGVudHJpZXMgaW4gdGhlIGNhY2hlIGZvciB0aGUga2VybmVsIGFkZHJlc3MKKwlzcGFjZSBmb3IgdmlydHVhbCBhZGRyZXNzZXMgaW4gdGhlIHJhbmdlICdzdGFydCcgdG8gJ2VuZC0xJy4KKworCVRoZSBmaXJzdCBvZiB0aGVzZSB0d28gcm91dGluZXMgaXMgaW52b2tlZCBhZnRlciBtYXBfdm1fYXJlYSgpCisJaGFzIGluc3RhbGxlZCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLiAgVGhlIHNlY29uZCBpcyBpbnZva2VkCisJYmVmb3JlIHVubWFwX3ZtX2FyZWEoKSBkZWxldGVzIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMuCisKK1RoZXJlIGV4aXN0cyBhbm90aGVyIHdob2xlIGNsYXNzIG9mIGNwdSBjYWNoZSBpc3N1ZXMgd2hpY2ggY3VycmVudGx5CityZXF1aXJlIGEgd2hvbGUgZGlmZmVyZW50IHNldCBvZiBpbnRlcmZhY2VzIHRvIGhhbmRsZSBwcm9wZXJseS4KK1RoZSBiaWdnZXN0IHByb2JsZW0gaXMgdGhhdCBvZiB2aXJ0dWFsIGFsaWFzaW5nIGluIHRoZSBkYXRhIGNhY2hlCitvZiBhIHByb2Nlc3Nvci4KKworSXMgeW91ciBwb3J0IHN1c2NlcHRpYmxlIHRvIHZpcnR1YWwgYWxpYXNpbmcgaW4gaXQncyBELWNhY2hlPworV2VsbCwgaWYgeW91ciBELWNhY2hlIGlzIHZpcnR1YWxseSBpbmRleGVkLCBpcyBsYXJnZXIgaW4gc2l6ZSB0aGFuCitQQUdFX1NJWkUsIGFuZCBkb2VzIG5vdCBwcmV2ZW50IG11bHRpcGxlIGNhY2hlIGxpbmVzIGZvciB0aGUgc2FtZQorcGh5c2ljYWwgYWRkcmVzcyBmcm9tIGV4aXN0aW5nIGF0IG9uY2UsIHlvdSBoYXZlIHRoaXMgcHJvYmxlbS4KKworSWYgeW91ciBELWNhY2hlIGhhcyB0aGlzIHByb2JsZW0sIGZpcnN0IGRlZmluZSBhc20vc2htcGFyYW0uaCBTSE1MQkEKK3Byb3Blcmx5LCBpdCBzaG91bGQgZXNzZW50aWFsbHkgYmUgdGhlIHNpemUgb2YgeW91ciB2aXJ0dWFsbHkKK2FkZHJlc3NlZCBELWNhY2hlIChvciBpZiB0aGUgc2l6ZSBpcyB2YXJpYWJsZSwgdGhlIGxhcmdlc3QgcG9zc2libGUKK3NpemUpLiAgVGhpcyBzZXR0aW5nIHdpbGwgZm9yY2UgdGhlIFNZU3YgSVBDIGxheWVyIHRvIG9ubHkgYWxsb3cgdXNlcgorcHJvY2Vzc2VzIHRvIG1tYXAgc2hhcmVkIG1lbW9yeSBhdCBhZGRyZXNzIHdoaWNoIGFyZSBhIG11bHRpcGxlIG9mCit0aGlzIHZhbHVlLgorCitOT1RFOiBUaGlzIGRvZXMgbm90IGZpeCBzaGFyZWQgbW1hcHMsIGNoZWNrIG91dCB0aGUgc3BhcmM2NCBwb3J0IGZvcgorb25lIHdheSB0byBzb2x2ZSB0aGlzIChpbiBwYXJ0aWN1bGFyIFNQQVJDX0ZMQUdfTU1BUFNIQVJFRCkuCisKK05leHQsIHlvdSBoYXZlIHRvIHNvbHZlIHRoZSBELWNhY2hlIGFsaWFzaW5nIGlzc3VlIGZvciBhbGwKK290aGVyIGNhc2VzLiAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGZhY3QgdGhhdCwgZm9yIGEgZ2l2ZW4gcGFnZQorbWFwcGVkIGludG8gc29tZSB1c2VyIGFkZHJlc3Mgc3BhY2UsIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgbW9yZQorbWFwcGluZywgdGhhdCBvZiB0aGUga2VybmVsIGluIGl0J3MgbGluZWFyIG1hcHBpbmcgc3RhcnRpbmcgYXQKK1BBR0VfT0ZGU0VULiAgU28gaW1tZWRpYXRlbHksIG9uY2UgdGhlIGZpcnN0IHVzZXIgbWFwcyBhIGdpdmVuCitwaHlzaWNhbCBwYWdlIGludG8gaXRzIGFkZHJlc3Mgc3BhY2UsIGJ5IGltcGxpY2F0aW9uIHRoZSBELWNhY2hlCithbGlhc2luZyBwcm9ibGVtIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4aXN0IHNpbmNlIHRoZSBrZXJuZWwgYWxyZWFkeQorbWFwcyB0aGlzIHBhZ2UgYXQgaXRzIHZpcnR1YWwgYWRkcmVzcy4KKworICB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlKQorICB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICp0bywgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKworCVRoZXNlIHR3byByb3V0aW5lcyBzdG9yZSBkYXRhIGluIHVzZXIgYW5vbnltb3VzIG9yIENPVworCXBhZ2VzLiAgSXQgYWxsb3dzIGEgcG9ydCB0byBlZmZpY2llbnRseSBhdm9pZCBELWNhY2hlIGFsaWFzCisJaXNzdWVzIGJldHdlZW4gdXNlcnNwYWNlIGFuZCB0aGUga2VybmVsLgorCisJRm9yIGV4YW1wbGUsIGEgcG9ydCBtYXkgdGVtcG9yYXJpbHkgbWFwICdmcm9tJyBhbmQgJ3RvJyB0bworCWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyBkdXJpbmcgdGhlIGNvcHkuICBUaGUgdmlydHVhbCBhZGRyZXNzCisJZm9yIHRoZXNlIHR3byBwYWdlcyBpcyBjaG9zZW4gaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBrZXJuZWwKKwlsb2FkL3N0b3JlIGluc3RydWN0aW9ucyBoYXBwZW4gdG8gdmlydHVhbCBhZGRyZXNzZXMgd2hpY2ggYXJlCisJb2YgdGhlIHNhbWUgImNvbG9yIiBhcyB0aGUgdXNlciBtYXBwaW5nIG9mIHRoZSBwYWdlLiAgU3BhcmM2NAorCWZvciBleGFtcGxlLCB1c2VzIHRoaXMgdGVjaG5pcXVlLgorCisJVGhlICdhZGRyJyBwYXJhbWV0ZXIgdGVsbHMgdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGVyZSB0aGUKKwl1c2VyIHdpbGwgdWx0aW1hdGVseSBoYXZlIHRoaXMgcGFnZSBtYXBwZWQsIGFuZCB0aGUgJ3BhZ2UnCisJcGFyYW1ldGVyIGdpdmVzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHBhZ2Ugb2YgdGhlIHRhcmdldC4KKworCUlmIEQtY2FjaGUgYWxpYXNpbmcgaXMgbm90IGFuIGlzc3VlLCB0aGVzZSB0d28gcm91dGluZXMgbWF5CisJc2ltcGx5IGNhbGwgbWVtY3B5L21lbXNldCBkaXJlY3RseSBhbmQgZG8gbm90aGluZyBtb3JlLgorCisgIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCisKKwlBbnkgdGltZSB0aGUga2VybmVsIHdyaXRlcyB0byBhIHBhZ2UgY2FjaGUgcGFnZSwgX09SXworCXRoZSBrZXJuZWwgaXMgYWJvdXQgdG8gcmVhZCBmcm9tIGEgcGFnZSBjYWNoZSBwYWdlIGFuZAorCXVzZXIgc3BhY2Ugc2hhcmVkL3dyaXRhYmxlIG1hcHBpbmdzIG9mIHRoaXMgcGFnZSBwb3RlbnRpYWxseQorCWV4aXN0LCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLgorCisJTk9URTogVGhpcyByb3V0aW5lIG5lZWQgb25seSBiZSBjYWxsZWQgZm9yIHBhZ2UgY2FjaGUgcGFnZXMKKwkgICAgICB3aGljaCBjYW4gcG90ZW50aWFsbHkgZXZlciBiZSBtYXBwZWQgaW50byB0aGUgYWRkcmVzcworCSAgICAgIHNwYWNlIG9mIGEgdXNlciBwcm9jZXNzLiAgU28gZm9yIGV4YW1wbGUsIFZGUyBsYXllciBjb2RlCisJICAgICAgaGFuZGxpbmcgdmZzIHN5bWxpbmtzIGluIHRoZSBwYWdlIGNhY2hlIG5lZWQgbm90IGNhbGwKKwkgICAgICB0aGlzIGludGVyZmFjZSBhdCBhbGwuCisKKwlUaGUgcGhyYXNlICJrZXJuZWwgd3JpdGVzIHRvIGEgcGFnZSBjYWNoZSBwYWdlIiBtZWFucywKKwlzcGVjaWZpY2FsbHksIHRoYXQgdGhlIGtlcm5lbCBleGVjdXRlcyBzdG9yZSBpbnN0cnVjdGlvbnMKKwl0aGF0IGRpcnR5IGRhdGEgaW4gdGhhdCBwYWdlIGF0IHRoZSBwYWdlLT52aXJ0dWFsIG1hcHBpbmcKKwlvZiB0aGF0IHBhZ2UuICBJdCBpcyBpbXBvcnRhbnQgdG8gZmx1c2ggaGVyZSB0byBoYW5kbGUKKwlELWNhY2hlIGFsaWFzaW5nLCB0byBtYWtlIHN1cmUgdGhlc2Uga2VybmVsIHN0b3JlcyBhcmUKKwl2aXNpYmxlIHRvIHVzZXIgc3BhY2UgbWFwcGluZ3Mgb2YgdGhhdCBwYWdlLgorCisJVGhlIGNvcm9sbGFyeSBjYXNlIGlzIGp1c3QgYXMgaW1wb3J0YW50LCBpZiB0aGVyZSBhcmUgdXNlcnMKKwl3aGljaCBoYXZlIHNoYXJlZCt3cml0YWJsZSBtYXBwaW5ncyBvZiB0aGlzIGZpbGUsIHdlIG11c3QgbWFrZQorCXN1cmUgdGhhdCBrZXJuZWwgcmVhZHMgb2YgdGhlc2UgcGFnZXMgd2lsbCBzZWUgdGhlIG1vc3QgcmVjZW50CisJc3RvcmVzIGRvbmUgYnkgdGhlIHVzZXIuCisKKwlJZiBELWNhY2hlIGFsaWFzaW5nIGlzIG5vdCBhbiBpc3N1ZSwgdGhpcyByb3V0aW5lIG1heQorCXNpbXBseSBiZSBkZWZpbmVkIGFzIGEgbm9wIG9uIHRoYXQgYXJjaGl0ZWN0dXJlLgorCisgICAgICAgIFRoZXJlIGlzIGEgYml0IHNldCBhc2lkZSBpbiBwYWdlLT5mbGFncyAoUEdfYXJjaF8xKSBhcworCSJhcmNoaXRlY3R1cmUgcHJpdmF0ZSIuICBUaGUga2VybmVsIGd1YXJhbnRlZXMgdGhhdCwKKwlmb3IgcGFnZWNhY2hlIHBhZ2VzLCBpdCB3aWxsIGNsZWFyIHRoaXMgYml0IHdoZW4gc3VjaAorCWEgcGFnZSBmaXJzdCBlbnRlcnMgdGhlIHBhZ2VjYWNoZS4KKworCVRoaXMgYWxsb3dzIHRoZXNlIGludGVyZmFjZXMgdG8gYmUgaW1wbGVtZW50ZWQgbXVjaCBtb3JlCisJZWZmaWNpZW50bHkuICBJdCBhbGxvd3Mgb25lIHRvICJkZWZlciIgKHBlcmhhcHMgaW5kZWZpbml0ZWx5KQorCXRoZSBhY3R1YWwgZmx1c2ggaWYgdGhlcmUgYXJlIGN1cnJlbnRseSBubyB1c2VyIHByb2Nlc3NlcworCW1hcHBpbmcgdGhpcyBwYWdlLiAgU2VlIHNwYXJjNjQncyBmbHVzaF9kY2FjaGVfcGFnZSBhbmQKKwl1cGRhdGVfbW11X2NhY2hlIGltcGxlbWVudGF0aW9ucyBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gZ28KKwlhYm91dCBkb2luZyB0aGlzLgorCisJVGhlIGlkZWEgaXMsIGZpcnN0IGF0IGZsdXNoX2RjYWNoZV9wYWdlKCkgdGltZSwgaWYKKwlwYWdlLT5tYXBwaW5nLT5pX21tYXAgaXMgYW4gZW1wdHkgdHJlZSBhbmQgLT5pX21tYXBfbm9ubGluZWFyCisJYW4gZW1wdHkgbGlzdCwganVzdCBtYXJrIHRoZSBhcmNoaXRlY3R1cmUgcHJpdmF0ZSBwYWdlIGZsYWcgYml0LgorCUxhdGVyLCBpbiB1cGRhdGVfbW11X2NhY2hlKCksIGEgY2hlY2sgaXMgbWFkZSBvZiB0aGlzIGZsYWcgYml0LAorCWFuZCBpZiBzZXQgdGhlIGZsdXNoIGlzIGRvbmUgYW5kIHRoZSBmbGFnIGJpdCBpcyBjbGVhcmVkLgorCisJSU1QT1JUQU5UIE5PVEU6IEl0IGlzIG9mdGVuIGltcG9ydGFudCwgaWYgeW91IGRlZmVyIHRoZSBmbHVzaCwKKwkJCXRoYXQgdGhlIGFjdHVhbCBmbHVzaCBvY2N1cnMgb24gdGhlIHNhbWUgQ1BVCisJCQlhcyBkaWQgdGhlIGNwdSBzdG9yZXMgaW50byB0aGUgcGFnZSB0byBtYWtlIGl0CisJCQlkaXJ0eS4gIEFnYWluLCBzZWUgc3BhcmM2NCBmb3IgZXhhbXBsZXMgb2YgaG93CisJCQl0byBkZWFsIHdpdGggdGhpcy4KKworICB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pCisgIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXJfdmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbikKKwlXaGVuIHRoZSBrZXJuZWwgbmVlZHMgdG8gY29weSBhcmJpdHJhcnkgZGF0YSBpbiBhbmQgb3V0CisJb2YgYXJiaXRyYXJ5IHVzZXIgcGFnZXMgKGYuZS4gZm9yIHB0cmFjZSgpKSBpdCB3aWxsIHVzZQorCXRoZXNlIHR3byByb3V0aW5lcy4KKworCUFueSBuZWNlc3NhcnkgY2FjaGUgZmx1c2hpbmcgb3Igb3RoZXIgY29oZXJlbmN5IG9wZXJhdGlvbnMKKwl0aGF0IG5lZWQgdG8gb2NjdXIgc2hvdWxkIGhhcHBlbiBoZXJlLiAgSWYgdGhlIHByb2Nlc3NvcidzCisJaW5zdHJ1Y3Rpb24gY2FjaGUgZG9lcyBub3Qgc25vb3AgY3B1IHN0b3JlcywgaXQgaXMgdmVyeQorCWxpa2VseSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gZmx1c2ggdGhlIGluc3RydWN0aW9uIGNhY2hlCisJZm9yIGNvcHlfdG9fdXNlcl9wYWdlKCkuCisKKyAgdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCisgIAlXaGVuIHRoZSBrZXJuZWwgc3RvcmVzIGludG8gYWRkcmVzc2VzIHRoYXQgaXQgd2lsbCBleGVjdXRlCisJb3V0IG9mIChlZyB3aGVuIGxvYWRpbmcgbW9kdWxlcyksIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorCisJSWYgdGhlIGljYWNoZSBkb2VzIG5vdCBzbm9vcCBzdG9yZXMgdGhlbiB0aGlzIHJvdXRpbmUgd2lsbCBuZWVkCisJdG8gZmx1c2ggaXQuCisKKyAgdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCisJQWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGZsdXNoX2ljYWNoZV9wYWdlIGNhbiBiZSBpbXBsZW1lbnRlZCBpbgorCWZsdXNoX2RjYWNoZV9wYWdlIGFuZCB1cGRhdGVfbW11X2NhY2hlLiBJbiAyLjcgdGhlIGhvcGUgaXMgdG8KKwlyZW1vdmUgdGhpcyBpbnRlcmZhY2UgY29tcGxldGVseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Npc3MudHh0IGIvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5OWJlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Npc3MudHh0CkBAIC0wLDAgKzEsMTMyIEBACitUaGlzIGRyaXZlciBpcyBmb3IgQ29tcGFxJ3MgU01BUlQgQXJyYXkgQ29udHJvbGxlcnMuCisKK1N1cHBvcnRlZCBDYXJkczoKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgY2FyZHM6CisKKwkqIFNBIDUzMDAKKwkqIFNBIDVpIAorCSogU0EgNTMyCisJKiBTQSA1MzEyCisJKiBTQSA2NDEKKwkqIFNBIDY0MgorCSogU0EgNjQwMAorCSogU0EgNjQwMCBVMzIwIEV4cGFuc2lvbiBNb2R1bGUKKwkqIFNBIDZpCisJKiBTQSBQNjAwCisJKiBTQSBQODAwCisJKiBTQSBFNDAwCisKK0lmIG5vZGVzIGFyZSBub3QgYWxyZWFkeSBjcmVhdGVkIGluIHRoZSAvZGV2L2NjaXNzIGRpcmVjdG9yeSwgcnVuIGFzIHJvb3Q6CisKKyMgY2QgL2RldgorIyAuL01BS0VERVYgY2Npc3MKKworRGV2aWNlIE5hbWluZzoKKy0tLS0tLS0tLS0tLS0tCisKK1lvdSBuZWVkIHNvbWUgZW50cmllcyBpbiAvZGV2IGZvciB0aGUgY2Npc3MgZGV2aWNlLiAgVGhlIE1BS0VERVYgc2NyaXB0CitjYW4gbWFrZSBkZXZpY2Ugbm9kZXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5LiAgQ3VycmVudGx5IHRoZSBkZXZpY2Ugc2V0dXAKK2lzIGFzIGZvbGxvd3M6CisKK01ham9yIG51bWJlcnM6CisJMTA0CWNjaXNzMAkKKwkxMDUJY2Npc3MxCQorCTEwNgljY2lzczIKKwkxMDUJY2Npc3MzCisJMTA4CWNjaXNzNAorCTEwOQljY2lzczUKKwkxMTAJY2Npc3M2CisJMTExCWNjaXNzNworCitNaW5vciBudW1iZXJzOgorICAgICAgICBiNyBiNiBiNSBiNCBiMyBiMiBiMSBiMAorICAgICAgICB8LS0tLSstLS0tfCB8LS0tLSstLS0tfAorICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyAgICAgICAgICAgICB8ICAgICAgICAgICArLS0tLS0tLS0gUGFydGl0aW9uIElEICgwPXdob2xlZGV2LCAxLTE1IHBhcnRpdGlvbikKKyAgICAgICAgICAgICB8CisgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWwgVm9sdW1lIG51bWJlcgorCitUaGUgZGV2aWNlIG5hbWluZyBzY2hlbWUgaXM6CisvZGV2L2NjaXNzL2MwZDAJCQlDb250cm9sbGVyIDAsIGRpc2sgMCwgd2hvbGUgZGV2aWNlCisvZGV2L2NjaXNzL2MwZDBwMQkJQ29udHJvbGxlciAwLCBkaXNrIDAsIHBhcnRpdGlvbiAxCisvZGV2L2NjaXNzL2MwZDBwMgkJQ29udHJvbGxlciAwLCBkaXNrIDAsIHBhcnRpdGlvbiAyCisvZGV2L2NjaXNzL2MwZDBwMwkJQ29udHJvbGxlciAwLCBkaXNrIDAsIHBhcnRpdGlvbiAzCisKKy9kZXYvY2Npc3MvYzFkMQkJCUNvbnRyb2xsZXIgMSwgZGlzayAxLCB3aG9sZSBkZXZpY2UKKy9kZXYvY2Npc3MvYzFkMXAxCQlDb250cm9sbGVyIDEsIGRpc2sgMSwgcGFydGl0aW9uIDEKKy9kZXYvY2Npc3MvYzFkMXAyCQlDb250cm9sbGVyIDEsIGRpc2sgMSwgcGFydGl0aW9uIDIKKy9kZXYvY2Npc3MvYzFkMXAzCQlDb250cm9sbGVyIDEsIGRpc2sgMSwgcGFydGl0aW9uIDMKKworU0NTSSB0YXBlIGRyaXZlIGFuZCBtZWRpdW0gY2hhbmdlciBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU0NTSSBzZXF1ZW50aWFsIGFjY2VzcyBkZXZpY2VzIGFuZCBtZWRpdW0gY2hhbmdlciBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYW5kIAorYXBwcm9wcmlhdGUgZGV2aWNlIG5vZGVzIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuICAoZS5nLiAgCisvZGV2L3N0MCwgL2Rldi9zdDEsIGV0Yy4gIFNlZSB0aGUgInN0IiBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLikgCitZb3UgbXVzdCBlbmFibGUgIlNDU0kgdGFwZSBkcml2ZSBzdXBwb3J0IGZvciBTbWFydCBBcnJheSA1eHh4IiBhbmQgCisiU0NTSSBzdXBwb3J0IiBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGJlIGFibGUgdG8gdXNlIFNDU0kKK3RhcGUgZHJpdmVzIHdpdGggeW91ciBTbWFydCBBcnJheSA1eHh4IGNvbnRyb2xsZXIuCisKK0FkZGl0aW9uYWxseSwgbm90ZSB0aGF0IHRoZSBkcml2ZXIgd2lsbCBub3QgZW5nYWdlIHRoZSBTQ1NJIGNvcmUgYXQgaW5pdCAKK3RpbWUuICBUaGUgZHJpdmVyIG11c3QgYmUgZGlyZWN0ZWQgdG8gZHluYW1pY2FsbHkgZW5nYWdlIHRoZSBTQ1NJIGNvcmUgdmlhIAordGhlIC9wcm9jIGZpbGVzeXN0ZW0gZW50cnkgd2hpY2ggdGhlICJibG9jayIgc2lkZSBvZiB0aGUgZHJpdmVyIGNyZWF0ZXMgYXMgCisvcHJvYy9kcml2ZXIvY2Npc3MvY2Npc3MqIGF0IHJ1bnRpbWUuICBUaGlzIGlzIGJlY2F1c2UgYXQgZHJpdmVyIGluaXQgdGltZSwgCit0aGUgU0NTSSBjb3JlIG1heSBub3QgeWV0IGJlIGluaXRpYWxpemVkIChiZWNhdXNlIHRoZSBkcml2ZXIgaXMgYSBibG9jayAKK2RyaXZlcikgYW5kIGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgaXQgd2l0aCB0aGUgU0NTSSBjb3JlIGluIHN1Y2ggYSBjYXNlIAord291bGQgY2F1c2UgYSBoYW5nLiAgVGhpcyBpcyBiZXN0IGRvbmUgdmlhIGFuIGluaXRpYWxpemF0aW9uIHNjcmlwdCAKKyh0eXBpY2FsbHkgaW4gL2V0Yy9pbml0LmQsIGJ1dCBjb3VsZCB2YXJ5IGRlcGVuZGluZyBvbiBkaXN0aWJ1dGlvbikuIAorRm9yIGV4YW1wbGU6CisKKwlmb3IgeCBpbiAvcHJvYy9kcml2ZXIvY2Npc3MvY2Npc3NbMC05XSoKKwlkbworCQllY2hvICJlbmdhZ2Ugc2NzaSIgPiAkeAorCWRvbmUKKworT25jZSB0aGUgU0NTSSBjb3JlIGlzIGVuZ2FnZWQgYnkgdGhlIGRyaXZlciwgaXQgY2Fubm90IGJlIGRpc2VuZ2FnZWQgCisoZXhjZXB0IGJ5IHVubG9hZGluZyB0aGUgZHJpdmVyLCBpZiBpdCBoYXBwZW5zIHRvIGJlIGxpbmtlZCBhcyBhIG1vZHVsZS4pCisKK05vdGUgYWxzbyB0aGF0IGlmIG5vIHNlcXVlbnRpYWwgYWNjZXNzIGRldmljZXMgb3IgbWVkaXVtIGNoYW5nZXJzIGFyZQorZGV0ZWN0ZWQsIHRoZSBTQ1NJIGNvcmUgd2lsbCBub3QgYmUgZW5nYWdlZCBieSB0aGUgYWN0aW9uIG9mIHRoZSBhYm92ZQorc2NyaXB0LgorCitIb3QgcGx1ZyBzdXBwb3J0IGZvciBTQ1NJIHRhcGUgZHJpdmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hvdCBwbHVnZ2luZyBvZiBTQ1NJIHRhcGUgZHJpdmVzIGlzIHN1cHBvcnRlZCwgd2l0aCBzb21lIGNhdmVhdHMuCitUaGUgY2Npc3MgZHJpdmVyIG11c3QgYmUgaW5mb3JtZWQgdGhhdCBjaGFuZ2VzIHRvIHRoZSBTQ1NJIGJ1cworaGF2ZSBiZWVuIG1hZGUsIGluIGFkZGl0aW9uIHRvIGFuZCBwcmlvciB0byBpbmZvcm1pbmcgdGhlIFNDU0kgCittaWQgbGF5ZXIuICBUaGlzIG1heSBiZSBkb25lIHZpYSB0aGUgL3Byb2MgZmlsZXN5c3RlbS4gIEZvciBleGFtcGxlOgorCisJZWNobyAicmVzY2FuIiA+IC9wcm9jL3Njc2kvY2Npc3MwLzEKKworVGhpcyBjYXVzZXMgdGhlIGFkYXB0ZXIgdG8gcXVlcnkgdGhlIGFkYXB0ZXIgYWJvdXQgY2hhbmdlcyB0byB0aGUgCitwaHlzaWNhbCBTQ1NJIGJ1c2VzIGFuZC9vciBmaWJyZSBjaGFubmVsIGFyYml0cmF0ZWQgbG9vcCBhbmQgdGhlIAorZHJpdmVyIHRvIG1ha2Ugbm90ZSBvZiBhbnkgbmV3IG9yIHJlbW92ZWQgc2VxdWVudGlhbCBhY2Nlc3MgZGV2aWNlcworb3IgbWVkaXVtIGNoYW5nZXJzLiAgVGhlIGRyaXZlciB3aWxsIG91dHB1dCBtZXNzYWdlcyBpbmRpY2F0aW5nIHdoYXQgCitkZXZpY2VzIGhhdmUgYmVlbiBhZGRlZCBvciByZW1vdmVkIGFuZCB0aGUgY29udHJvbGxlciwgYnVzLCB0YXJnZXQgYW5kIAorbHVuIHVzZWQgdG8gYWRkcmVzcyB0aGUgZGV2aWNlLiAgT25jZSB0aGlzIGlzIGRvbmUsIHRoZSBTQ1NJIG1pZCBsYXllciAKK2NhbiBiZSBpbmZvcm1lZCBvZiBjaGFuZ2VzIHRvIHRoZSB2aXJ0dWFsIFNDU0kgYnVzIHdoaWNoIHRoZSBkcml2ZXIgCitwcmVzZW50cyB0byBpdCBpbiB0aGUgdXN1YWwgd2F5LiBGb3IgZXhhbXBsZTogCisKKwllY2hvIHNjc2kgYWRkLXNpbmdsZS1kZXZpY2UgMyAyIDEgMCA+IC9wcm9jL3Njc2kvc2NzaQorIAordG8gYWRkIGEgZGV2aWNlIG9uIGNvbnRyb2xsZXIgMywgYnVzIDIsIHRhcmdldCAxLCBsdW4gMC4gICBOb3RlIHRoYXQKK3RoZSBkcml2ZXIgbWFrZXMgYW4gZWZmb3J0IHRvIHByZXNlcnZlIHRoZSBkZXZpY2VzIHBvc2l0aW9ucworaW4gdGhlIHZpcnR1YWwgU0NTSSBidXMsIHNvIGlmIHlvdSBhcmUgb25seSBtb3ZpbmcgdGFwZSBkcml2ZXMgCithcm91bmQgb24gdGhlIHNhbWUgYWRhcHRlciBhbmQgbm90IGFkZGluZyBvciByZW1vdmluZyB0YXBlIGRyaXZlcyAKK2Zyb20gdGhlIGFkYXB0ZXIsIGluZm9ybWluZyB0aGUgU0NTSSBtaWQgbGF5ZXIgbWF5IG5vdCBiZSBuZWNlc3NhcnkuCisKK05vdGUgdGhhdCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgdGhlIC9wcm9jIGZpbGVzeXN0ZW0gZW50cmllcyAKK2NvbnRhaW5zIGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvIHRoZSBkcml2ZXIgbmFtZS4gIChFLmcuICJjY2lzczAiIAoraW5zdGVhZCBvZiBqdXN0ICJjY2lzcyIgd2hpY2ggeW91IG1pZ2h0IGV4cGVjdC4pCisKK05vdGU6IE9OTFkgc2VxdWVudGlhbCBhY2Nlc3MgZGV2aWNlcyBhbmQgbWVkaXVtIGNoYW5nZXJzIGFyZSBwcmVzZW50ZWQgCithcyBTQ1NJIGRldmljZXMgdG8gdGhlIFNDU0kgbWlkIGxheWVyIGJ5IHRoZSBjY2lzcyBkcml2ZXIuICBTcGVjaWZpY2FsbHksIAorcGh5c2ljYWwgU0NTSSBkaXNrIGRyaXZlcyBhcmUgTk9UIHByZXNlbnRlZCB0byB0aGUgU0NTSSBtaWQgbGF5ZXIuICBUaGUgCitwaHlzaWNhbCBTQ1NJIGRpc2sgZHJpdmVzIGFyZSBjb250cm9sbGVkIGRpcmVjdGx5IGJ5IHRoZSBhcnJheSBjb250cm9sbGVyIAoraGFyZHdhcmUgYW5kIGl0IGlzIGltcG9ydGFudCB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhdHRlbXB0aW5nIHRvIGRpcmVjdGx5CithY2Nlc3MgdGhlc2UgZGV2aWNlcyB0b28sIGFzIGlmIHRoZSBhcnJheSBjb250cm9sbGVyIHdlcmUgbWVyZWx5IGEgU0NTSSAKK2NvbnRyb2xsZXIgaW4gdGhlIHNhbWUgd2F5IHRoYXQgd2UgYXJlIGFsbG93aW5nIGl0IHRvIGFjY2VzcyBTQ1NJIHRhcGUgZHJpdmVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTZkYWZlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS8wMC1JTkRFWApAQCAtMCwwICsxLDMzIEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlIChpbmZvIG9uIENELVJPTXMgYW5kIExpbnV4KQorTWFrZWZpbGUKKwktIG9ubHkgdXNlZCB0byBnZW5lcmF0ZSBUZVggb3V0cHV0IGZyb20gdGhlIGRvY3VtZW50YXRpb24uCithenRjZAorCS0gaW5mbyBvbiBBenRlY2gvT3JjaGlkL09rYW5vL1dlYXJuZXMvQ29ucmFkL0N5Q0RST00gZHJpdmVyLgorY2Ryb20tc3RhbmRhcmQudGV4CisJLSBMYVRlWCBkb2N1bWVudCBvbiBzdGFuZGFyZGl6aW5nIHRoZSBDRC1ST00gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlLgorY2R1MzFhCisJLSBpbmZvIG9uIHRoZSBTb255IENEVTMxQS9DRFUzM0EgQ0QtUk9NIGRyaXZlci4KK2NtMjA2CisJLSBpbmZvIG9uIHRoZSBQaGlsaXBzL0xNUyBjbTIwNi9jbTI2MCBDRC1ST00gZHJpdmVyLgorZ3NjZAorCS0gaW5mbyBvbiB0aGUgR29sZHN0YXIgUjQyMCBDRC1ST00gZHJpdmVyLgoraWRlLWNkCisJLSBpbmZvIG9uIHNldHRpbmcgdXAgYW5kIHVzaW5nIEFUQVBJIChha2EgSURFKSBDRC1ST01zLgoraXNwMTYKKwktIGluZm8gb24gdGhlIENELVJPTSBpbnRlcmZhY2Ugb24gSVNQMTYsIE1BRDE2IG9yIE1vemFydCBzb3VuZCBjYXJkLgorbWNkCisJLSBpbmZvIG9uIGxpbWl0YXRpb25zIG9mIHN0YW5kYXJkIE1pdHN1bWkgQ0QtUk9NIGRyaXZlci4KK21jZHgKKwktIGluZm8gb24gaW1wcm92ZWQgTWl0c3VtaSBDRC1ST00gZHJpdmVyLgorb3B0Y2QKKwktIGluZm8gb24gdGhlIE9wdGljcyBTdG9yYWdlIDgwMDAgQVQgQ0QtUk9NIGRyaXZlcgorcGFja2V0LXdyaXRpbmcudHh0CisJLSBJbmZvIG9uIHRoZSBDRFJXIHBhY2tldCB3cml0aW5nIG1vZHVsZQorc2JwY2QKKwktIGluZm8gb24gdGhlIFNvdW5kQmxhc3Rlci9QYW5hc29uaWMgQ0QtUk9NIGludGVyZmFjZSBkcml2ZXIuCitzamNkCisJLSBpbmZvIG9uIHRoZSBTQU5ZTyBDRFItSDk0QSBDRC1ST00gaW50ZXJmYWNlIGRyaXZlci4KK3NvbnljZDUzNQorCS0gaW5mbyBvbiB0aGUgU29ueSBDRFUtNTM1IChhbmQgNTMxKSBDRC1ST00gZHJpdmVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTllMzIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACitMQVRFWEZJTEUgPSBjZHJvbS1zdGFuZGFyZAorCithbGw6CisJbWFrZSBjbGVhbgorCWxhdGV4ICQoTEFURVhGSUxFKQorCWxhdGV4ICQoTEFURVhGSUxFKQorCUBpZiBbIC14IGB3aGljaCBndmAgXTsgdGhlbiBcCisJCWBkdmlwcyAtcSAtdCBsZXR0ZXIgLW8gJChMQVRFWEZJTEUpLnBzICQoTEFURVhGSUxFKS5kdmlgIDtcCisJCWBndiAtYW50aWFsaWFzIC1tZWRpYSBsZXR0ZXIgLW5vY2VudGVyICQoTEFURVhGSUxFKS5wc2AgO1wKKwllbHNlIFwKKwkJYHhkdmkgJChMQVRFWEZJTEUpLmR2aSAmYCA7XAorCWZpCisJbWFrZSBzb3J0b2ZjbGVhbgorCitjbGVhbjoKKwlybSAtZiAkKExBVEVYRklMRSkucHMgJChMQVRFWEZJTEUpLmR2aSAkKExBVEVYRklMRSkuYXV4ICQoTEFURVhGSUxFKS5sb2cgCisKK3NvcnRvZmNsZWFuOgorCXJtIC1mICQoTEFURVhGSUxFKS5hdXggJChMQVRFWEZJTEUpLmxvZyAKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2F6dGNkIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9henRjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmYwMjkwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9henRjZApAQCAtMCwwICsxLDgyMiBAQAorJElkOiBSRUFETUUuYXp0Y2QsdiAyLjYwIDE5OTcvMTEvMjkgMDk6NTE6MjUgcm9vdCBFeHAgcm9vdCAkCisgICAgICAgICAgUmVhZG1lLUZpbGUgRG9jdW1lbnRhdGlvbi9jZHJvbS9henRjZAorICAgICAgICAgICAJCQlmb3IgCisJICAgICBBWlRFQ0ggQ0QtUk9NIENEQTI2OC0wMUEsIE9SQ0hJRCBDRC0zMTEwLAorICAgICAgT0tBTk8vV0VBUk5FUyBDREQxMTAsIENPTlJBRCBUWEMsIEN5Q0RST00gQ1I1MjAsIENSNTQwCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDRC1ST00gRHJpdmVzIAorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuNiBhbmQgbmV3ZXIKKyAgICAgICAgICAgICAgICAgICAoZm9yIG90aGVyIGRyaXZlcyBzZWUgNi4tOC4pCisKK05PVEU6IFRISVMgRFJJVkVSIFdJTEwgV09SSyBXSVRIIFRIRSBDRC1ST00gRFJJVkVTIExJU1RFRCwgV0hJQ0ggSEFWRQorICAgICAgQSBQUk9QUklFVEFSWSBJTlRFUkZBQ0UgKGltcGxlbWVudGVkIG9uIGEgc291bmQgY2FyZCBvciBvbiBhbgorICAgICAgSVNBLUFULWJ1cyBjYXJkKS4gCisgICAgICBJVCBXSUxMIERFRklOSVRFTFkgTk9UIFdPUksgV0lUSCBDRC1ST00gRFJJVkVTIFdJVEggKklERSotSU5URVJGQUNFLAorICAgICAgc3VjaCBhcyB0aGUgQXp0ZWNoIENEQTI2OS0wMzFTRSAhISEgKFRoZSBvbmx5IGtub3duIGV4Y2VwdGlvbnMgYXJlCisgICAgICAnZmFrZWQnIElERSBkcml2ZXMgbGlrZSB0aGUgQ3lDRFJPTSBDUjUyMGllIHdoaWNoIHdvcmsgd2l0aCBhenRjZAorICAgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBzZWUgNy4pLiBJRiBZT1UnUkUgVVNJTkcgQSBDRC1ST00gRFJJVkUKKyAgICAgIFdJVEggSURFLUlOVEVSRkFDRSwgU09NRVRJTUVTIEFMU08gQ0FMTEVEIEFUQVBJLUNPTVBBVElCTEUsIFBMRUFTRSAKKyAgICAgIFVTRSBUSEUgaWRlLWNkLmMgRFJJVkVSLCBXUklUVEVOIEJZIE1BUksgTE9SRCBBTkQgU0NPVFQgU05ZREVSICEKKyAgICAgIFRIRSBTVEFOREFSRC1LRVJORUwgMS4yLnggTk9XIEFMU08gU1VQUE9SVFMgSURFLUNEUk9NLURSSVZFUywgU0VFIFRIRQorICAgICAgSEFSRERJU0sgKCEpIFNFQ1RJT04gT0YgbWFrZSBjb25maWcsIFdIRU4gQ09NUElMSU5HIEEgTkVXIEtFUk5FTCEhIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250ZW50cyBvZiB0aGlzIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgMS4gIE5PVEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAyLiAgSU5TVEFMTEFUSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgMy4gIENPTkZJR1VSSU5HIFlPVVIgS0VSTkVMCisgICAgICAgICAgICAgICAgICAgICAgICAgNC4gIFJFQ09NUElMSU5HIFlPVVIgS0VSTkVMCisgICAgICAgICAgICAgICAgICAgICAgICAgNC4xICAgQVpUQ0QgQVMgQSBSVU4tVElNRSBMT0FEQUJMRSBNT0RVTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICA0LjIgICBDRFJPTSBDT05ORUNURUQgVE8gQSBTT1VORENBUkQKKyAgICAgICAgICAgICAgICAgICAgICAgICA1LiAgS05PV04gUFJPQkxFTVMsIEZVVFVSRSBERVZFTE9QTUVOVFMKKwkJCSA1LjEgICBNVUxUSVNFU1NJT04gU1VQUE9SVAorCQkJIDUuMiAgIFNUQVRVUyBSRUNPR05JVElPTgorCQkJIDUuMyAgIERPU0VNVSdzIENEUk9NIFNVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICA2LiAgQlVHIFJFUE9SVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICA3LiAgT1RIRVIgRFJJVkVTCisgICAgICAgICAgICAgICAgICAgICAgICAgOC4gIElGIFlPVSBET04nVCBTVUNDRUVEIC4uLiBERUJVR0dJTkcgIAorICAgICAgICAgICAgICAgICAgICAgICAgIDkuICBURUNITklDQUwgSElTVE9SWSBPRiBUSEUgRFJJVkVSCisgICAgICAgICAgICAgICAgICAgICAgICAxMC4gIEFDS05PV0xFREdNRU5UUworICAgICAgICAgICAgICAgICAgICAgICAgMTEuICBQUk9HUkFNTUlORyBBREQgT05TOiBDRFBMQVkuQworICAgICAgICAgICAgICAgICAgICAgICAgQVBQRU5ESVg6IFNvdXJjZSBjb2RlIG9mIGNkcGxheS5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIE5PVEUgCitUaGlzIHNvZnR3YXJlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbiBhbHBoYSBhbmQgYmV0YSB0ZXN0IGFuZCBpcyBwYXJ0IG9mCit0aGUgc3RhbmRhcmQga2VybmVsIHNpbmNlIGtlcm5lbCAxLjEuOHggc2luY2UgRGVjZW1iZXIgMTk5NC4gSXQgd29ya3Mgd2l0aAorQVpURUNIIENEQTI2OC0wMUEsIE9SQ0hJRCBDRFMtMzExMCwgT1JDSElEL1dFQVJORVMgQ0REMTEwIGFuZCBDT05SQUQgVFhDIAorKE5yLjk5IDMxIDIzIC1zZXJpZXMgMDQpIGFuZCBoYXMgcHJvdmVuIHRvIGJlIHN0YWJsZSB3aXRoIGtlcm5lbCAKK3ZlcnNpb25zIDEuMC45IGFuZCBuZXdlci4gQnV0IHdpdGggYW55IHNvZnR3YXJlIHRoZXJlIHN0aWxsIG1heSBiZSBidWdzIGluIGl0LiAKK1NvIGlmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMsIHlvdSBhcmUgaW52aXRlZCB0byBoZWxwIHVzIGltcHJvdmUgdGhpcyBzb2Z0d2FyZS4gCitQbGVhc2Ugc2VuZCBtZSBhIGRldGFpbGVkIGJ1ZyByZXBvcnQgKHNlZSBjaGFwdGVyIEJVRyBSRVBPUlRTKS4gWW91IGFyZSBhbHNvIAoraW52aXRlZCBpbiBoZWxwaW5nIHVzIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgb2YgZHJpdmVzLCB3aGljaCBhcmUgc3VwcG9ydGVkLgorCitQbGVhc2UgcmVhZCB0aGUgUkVBRE1FLWZpbGVzIGNhcmVmdWxseSBhbmQgYWx3YXlzIGtlZXAgYSBiYWNrdXAgY29weSBvZiB5b3VyIAorb2xkIGtlcm5lbCwgaW4gb3JkZXIgdG8gcmVib290IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIQorCisyLiBJTlNUQUxMQVRJT04KK1RoZSBkcml2ZXIgY29uc2lzdHMgb2YgYSBoZWFkZXIgZmlsZSAnYXp0Y2QuaCcsIHdoaWNoIG5vcm1hbGx5IHNob3VsZCByZXNpZGUgCitpbiAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2Nkcm9tIGFuZCB0aGUgc291cmNlIGNvZGUgJ2F6dGNkLmMnLCB3aGljaCBub3JtYWxseSAKK3Jlc2lkZXMgaW4gdGhlIHNhbWUgcGxhY2UuIEl0IHVzZXMgL2Rldi9henRjZCAoL2Rldi9henRjZDAgaW4gc29tZSBkaXN0cmktCitidXRpb25zKSwgd2hpY2ggbXVzdCBiZSBhIHZhbGlkIGJsb2NrIGRldmljZSB3aXRoIG1ham9yIG51bWJlciAyOSBhbmQgcmVzaWRlIAoraW4gZGlyZWN0b3J5IC9kZXYuIFRvIG1vdW50IGEgQ0QtUk9NLCB5b3VyIGtlcm5lbCBuZWVkcyB0byBoYXZlIHRoZSBJU085NjYwLQorZmlsZXN5c3RlbSBzdXBwb3J0IGluY2x1ZGVkLgorCitQTEVBU0UgTk9URTogYXp0Y2QuYyBoYXMgYmVlbiBkZXZlbG9wZWQgaW4gcGFyYWxsZWwgdG8gdGhlIGxpbnV4IGtlcm5lbCwKK3doaWNoIGhhZCBhbmQgaXMgaGF2aW5nIG1hbnkgbWFqb3IgYW5kIG1pbm9yIGNoYW5nZXMgd2hpY2ggYXJlIG5vdCBiYWNrd2FyZAorY29tcGF0aWJsZS4gUXVpdGUgZGVmaW5pdGVseSBhenRjZC5jIHZlcnNpb24gMS44MCBhbmQgbmV3ZXIgd2lsbCBOT1Qgd29yaworaW4ga2VybmVscyBvbGRlciB0aGFuIDEuMy4zMy4gU28gcGxlYXNlIGFsd2F5cyB1c2UgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24KK29mIGF6dGNkLmMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbGludXgta2VybmVsLgorCiszLiAgQ09ORklHVVJJTkcgWU9VUiBLRVJORUwKK0lmIHlvdXIga2VybmVsIGlzIGFscmVhZHkgY29uZmlndXJlZCBmb3IgdXNpbmcgdGhlIEFaVEVDSCBkcml2ZXIgeW91IHdpbGwKK3NlZSB0aGUgZm9sbG93aW5nIG1lc3NhZ2Ugd2hpbGUgTGludXggYm9vdHM6CisgICAgQXp0ZWNoIENELVJPTSBJbml0OiBEcml2ZXJWZXJzaW9uPTx2ZXJzaW9uIG51bWJlcj4gQmFzZUFkZHJlc3M9PGJhc2VhZGRyZXNzPgorICAgIEF6dGVjaCBDRC1ST00gSW5pdDogRmlybXdhcmVWZXJzaW9uPTxmaXJtd2FyZSB2ZXJzaW9uIGlkIG9mIHlvdXIgSS9PLWNhcmQ+Pj4KKyAgICBBenRlY2ggQ0QtUk9NIEluaXQ6IDxkcml2ZSB0eXBlPiBkZXRlY3RlZAorICAgIEF6dGVjaCBDRC1ST00gSW5pdDogRW5kCitJZiB0aGUgbWVzc2FnZSBsb29rcyBkaWZmZXJlbnQgYW5kIHlvdSBhcmUgc3VyZSB0byBoYXZlIGEgc3VwcG9ydGVkIGRyaXZlLAoraXQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgYmFzZSBhZGRyZXNzLiBUaGUgQXp0ZWNoIGRyaXZlciBkb2VzIGxvb2sgZm9yIHRoZSAKK0NELVJPTSBkcml2ZSBhdCB0aGUgYmFzZSBhZGRyZXNzIHNwZWNpZmllZCBpbiBhenRjZC5oIGF0IGNvbXBpbGUgdGltZS4gVGhpcyAKK2FkZHJlc3MgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IGJvb3QgcGFyYW1ldGVyIGF6dGNkPS4uLi5Zb3Ugc2hvdWxkIHJlYm9vdCBhbmQgCitzdGFydCBMaW51eCB3aXRoIGJvb3QgcGFyYW1ldGVyIGF6dGNkPTxiYXNlIGFkZHJlc3M+LCBlLmcuIGF6dGNkPTB4MzIwLiBJZiAKK3lvdSBkbyBub3Qga25vdyB0aGUgYmFzZSBhZGRyZXNzLCBzdGFydCB5b3VyIFBDIHdpdGggRE9TIGFuZCBsb29rIGF0IHRoZSBib290IAorbWVzc2FnZSBvZiB5b3VyIENELVJPTSdzIERPUyBkcml2ZXIuIElmIHRoYXQgc3RpbGwgZG9lcyBub3QgaGVscCwgdXNlIGJvb3QKK3BhcmFtZXRlciBhenRjZD08YmFzZSBhZGRyZXNzPiwweDc5ICwgdGhpcyB0ZWxscyBhenRjZCB0byB0cnkgYSBsaXR0bGUgaGFyZGVyLgorYXp0Y2QgbWF5IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGF1dG9wcm9iaW5nIHRoZSBiYXNlIGFkZHJlc3MgYnkgcmVjb21waWxpbmcKK2l0IChzZWUgY2hhcHRlciA0LikuCisKK0lmIHRoZSBtZXNzYWdlIGxvb2tzIGNvcnJlY3QsIGFzIHVzZXIgJ3Jvb3QnIHlvdSBzaG91bGQgYmUgYWJsZSB0byBtb3VudCB0aGUgCitkcml2ZSBieQorICAgICAgICAgIG1vdW50IC10IGlzbzk2NjAgLXIgL2Rldi9henRjZDAgL21udAorYW5kIHVzZSBpdCBhcyBhbnkgb3RoZXIgZmlsZXN5c3RlbS4gKElmIHRoaXMgZG9lcyBub3Qgd29yaywgY2hlY2sgaWYKKy9kZXYvYXp0Y2QwIGFuZCAvbW50IGRvIGV4aXN0IGFuZCBjcmVhdGUgdGhlbSwgaWYgbmVjZXNzYXJ5IGJ5IGRvaW5nCisgICAgICBta25vZCAvZGV2L2F6dGNkMCBiIDI5IDAKKyAgICAgIG1rZGlyIC9tbnQgICAgICAgICAgICAgICAgICAgICAgIAorCitJZiB5b3Ugc3RpbGwgZ2V0IGEgZGlmZmVyZW50IG1lc3NhZ2Ugd2hpbGUgTGludXggYm9vdHMgb3Igd2hlbiB5b3UgZ2V0IHRoZSAKK21lc3NhZ2UsIHRoYXQgdGhlIElTTzk2NjAtZmlsZXN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIga2VybmVsLCB3aGVuCit5b3UgdHJ5IHRvIG1vdW50IHRoZSBDRC1ST00gZHJpdmUsIHlvdSBoYXZlIHRvIHJlY29tcGlsZSB5b3VyIGtlcm5lbC4KKworSWYgeW91IGRvICpub3QqIGhhdmUgYW4gQXp0ZWNoL09yY2hpZC9Pa2Fuby9XZWFybmVzL1RYQyBkcml2ZSBhbmQgd2FudCB0byAKK2J5cGFzcyBkcml2ZSBkZXRlY3Rpb24gZHVyaW5nIExpbnV4IGJvb3QgdXAsIHN0YXJ0IHdpdGggYm9vdCBwYXJhbWV0ZXIgYXp0Y2Q9MC4KKworTW9zdCBkaXN0cmlidXRpb25zIG5vd2FkYXlzIGRvIGNvbnRhaW4gYSBib290IGRpc2sgaW1hZ2UgY29udGFpbmluZyBhenRjZC4KK1BsZWFzZSBub3RlLCB0aGF0IHRoaXMgZHJpdmVyIHdpbGwgbm90IHdvcmsgd2l0aCBJREUvQVRBUEkgZHJpdmVzISBXaXRoIHRoZXNlIAoreW91IG11c3QgdXNlIGlkZS1jZC5jIGluc3RlYWQuCisKKzQuIFJFQ09NUElMSU5HIFlPVVIgS0VSTkVMCitJZiB5b3VyIGtlcm5lbCBpcyBub3QgeWV0IGNvbmZpZ3VyZWQgZm9yIHRoZSBBWlRFQ0ggZHJpdmVyIGFuZCB0aGUgSVNPOTY2MC0KK2ZpbGVzeXN0ZW0sIHlvdSBoYXZlIHRvIHJlY29tcGlsZSB5b3VyIGtlcm5lbDogCisKKy0gRWRpdCBhenRjZC5oIHRvIHNldCB0aGUgSS9PLWFkZHJlc3MgdG8geW91ciBJL08tQmFzZSBhZGRyZXNzIChBWlRfQkFTRV9BRERSKSwgCisgIHRoZSBkcml2ZXIgZG9lcyBub3QgdXNlIGludGVycnVwdHMgb3IgRE1BLCBzbyBpZiB5b3UgYXJlIHVzaW5nIGFuIEFaVEVDSAorICBDRDI2OCwgYW4gT1JDSElEIENELTMxMTAgb3IgT1JDSElEL1dFQVJORVMgQ0REMTEwIHRoYXQncyB0aGUgb25seSBpdGVtIHlvdSAKKyAgaGF2ZSB0byBzZXQgdXAuIElmIHlvdSBoYXZlIGEgc291bmRjYXJkLCByZWFkIGNoYXB0ZXIgNC4yLgorICBVc2VycyBvZiBvdGhlciBkcml2ZXMgc2hvdWxkIHJlYWQgY2hhcHRlciBPVEhFUiBEUklWRVMgb2YgdGhpcyBmaWxlLgorICBZb3UgYWxzbyBjYW4gY29uZmlndXJlIHRoYXQgYWRkcmVzcyBieSBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgYXp0Y2Q9Li4uIAorLSBhenRjZCBtYXkgYmUgY29uZmlndXJlZCB0byB1c2UgYXV0b3Byb2JpbmcgdGhlIGJhc2UgYWRkcmVzcyBieSBzZXR0aW5nCisgIEFaVF9CQVNFX0FERFIgdG8gJy0xJy4gSW4gdGhhdCBjYXNlIGF6dGNkIHByb2JlcyB0aGUgYWRkcmVzc2VzIGxpc3RlZCAKKyAgdW5kZXIgQVpUX0JBU0VfQVVUTy4gQnV0IHBsZWFzZSByZW1lbWJlciwgdGhhdCBhdXRvcHJvYmluZyBhbHdheXMgbWF5IAorICBpbmNvcnJlY3RseSBpbmZsdWVuY2Ugb3RoZXIgaGFyZHdhcmUgY29tcG9uZW50cyB0b28hCistIFRoZXJlIGFyZSBzb21lIG90aGVyIHBvaW50cywgd2hpY2ggbWF5IGJlIGNvbmZpZ3VyZWQsIGUuZy4gYXV0by1lamVjdCB0aGUKKyAgQ0Qgd2hlbiB1bm1vdW50aW5nIGEgZHJpdmUsIHRyYXkgbG9ja2luZyBldGMuLCBzZWUgYXp0Y2QuaCBmb3IgZGV0YWlscy4KKy0gSWYgeW91J3JlIHVzaW5nIGEgbGludXgga2VybmVsIHZlcnNpb24gcHJpb3IgdG8gMi4xLjAsIGluIGF6dGNkLmgKKyAgdW5jb21tZW50IHRoZSBsaW5lICcjZGVmaW5lIEFaVF9LRVJORUxfUFJJT1JfMl8xJworLSBCdWlsZCBhIG5ldyBrZXJuZWwsIGNvbmZpZ3VyZSBpdCBmb3IgJ0F6dGVjaC9PcmNoaWQvT2thbm8vV2Vhcm5lcyBzdXBwb3J0JyAKKyAgKGlmIHlvdSB3YW50IGF6dGNkIHRvIGJlIHBhcnQgb2YgdGhlIGtlcm5lbCkuIERvIG5vdCBjb25maWd1cmUgaXQgZm9yCisgICdBenRlY2guLi4gc3VwcG9ydCcsIGlmIHlvdSB3YW50IHRvIHVzZSBhenRjZCBhcyBhIHJ1biB0aW1lIGxvYWRhYmxlIG1vZHVsZS4gCisgIEJ1dCBpbiBhbnkgY2FzZSB5b3UgbXVzdCBoYXZlIHRoZSBJU085NjYwLWZpbGVzeXN0ZW0gaW5jbHVkZWQgaW4geW91cgorICBrZXJuZWwuCistIEFjdGl2YXRlIHRoZSBuZXcga2VybmVsLCBub3JtYWxseSB0aGlzIGlzIGRvbmUgYnkgcnVubmluZyBMSUxPIChkb24ndCBmb3ItCisgIGdldCB0byBjb25maWd1cmUgaXQgYmVmb3JlIGFuZCB0byBrZWVwIGEgY29weSBvZiB5b3VyIG9sZCBrZXJuZWwgaW4gY2FzZQorICBzb21ldGhpbmcgZ29lcyB3cm9uZyEpLgorLSBSZWJvb3QKKy0gSWYgeW91J3ZlIGluY2x1ZGVkIGF6dGNkIGluIHlvdXIga2VybmVsLCB5b3Ugbm93IHNob3VsZCBzZWUgZHVyaW5nIGJvb3QgCisgIHNvbWUgbWVzc2FnZXMgbGlrZQorICAgIEF6dGVjaCBDRC1ST00gSW5pdDogRHJpdmVyVmVyc2lvbj08dmVyc2lvbiBudW1iZXI+IEJhc2VBZGRyZXNzPTxiYXNlYWRkcmVzcz4KKyAgICBBenRlY2ggQ0QtUk9NIEluaXQ6IEZpcm13YXJlVmVyc2lvbj08ZmlybXdhcmUgdmVyc2lvbiBpZCBvZiB5b3VyIEkvTy1jYXJkPgorICAgIEF6dGVjaCBDRC1ST00gSW5pdDogPGRyaXZlIHR5cGU+IGRldGVjdGVkCisgICAgQXp0ZWNoIENELVJPTSBJbml0OiBFbmQKKy0gSWYgeW91IGhhdmUgbm90IGluY2x1ZGVkIGF6dGNkIGluIHlvdXIga2VybmVsLCBidXQgd2FudCB0byBsb2FkIGF6dGNkIGFzIGEgCisgIHJ1biB0aW1lIGxvYWRhYmxlIG1vZHVsZSBzZWUgNC4xLiAKKy0gSWYgdGhlIG1lc3NhZ2UgbG9va3MgY29ycmVjdCwgYXMgdXNlciAncm9vdCcgeW91IHNob3VsZCBiZSBhYmxlIHRvIG1vdW50IAorICB0aGUgZHJpdmUgYnkKKyAgICAgICAgICBtb3VudCAtdCBpc285NjYwIC1yIC9kZXYvYXp0Y2QwIC9tbnQKKyAgYW5kIHVzZSBpdCBhcyBhbnkgb3RoZXIgZmlsZXN5c3RlbS4gKElmIHRoaXMgZG9lcyBub3Qgd29yaywgY2hlY2sgaWYKKyAgL2Rldi9henRjZDAgYW5kIC9tbnQgZG8gZXhpc3QgYW5kIGNyZWF0ZSB0aGVtLCBpZiBuZWNlc3NhcnkgYnkgZG9pbmcKKyAgICAgIG1rbm9kIC9kZXYvYXp0Y2QwIGIgMjkgMAorICAgICAgbWtkaXIgL21udCAgICAgICAgICAgICAgICAgICAgICAgCistIElmIHRoaXMgc3RpbGwgZG9lcyBub3QgaGVscCwgc2VlIGNoYXB0ZXJzIE9USEVSIERSSVZFUyBhbmQgREVCVUdHSU5HLgorCis0LjEgQVpUQ0QgQVMgQSBSVU4tVElNRSBMT0FEQUJMRSBNT0RVTEUKK0lmIHlvdSBkbyBub3QgbmVlZCBhenRjZCBwZXJtYW5lbnRseSwgeW91IGNhbiBhbHNvIGxvYWQgYW5kIHJlbW92ZSB0aGUgZHJpdmVyCitkdXJpbmcgcnVudGltZSB2aWEgaW5zbW9kIGFuZCBybW1vZC4gVG8gYnVpbGQgYXp0Y2QgYXMgYSBsb2FkYWJsZSBtb2R1bGUgeW91IAorbXVzdCBjb25maWd1cmUgeW91ciBrZXJuZWwgZm9yIEFaVEVDSCBtb2R1bGUgc3VwcG9ydCAoYW5zd2VyICdtJyB3aGVuIGNvbi0KK2ZpZ3VyaW5nIHRoZSBrZXJuZWwpLiBBbnlob3csIHlvdSBtYXkgcnVuIGludG8gcHJvYmxlbXMsIGlmIHRoZSB2ZXJzaW9uIG9mIAoreW91ciBib290IGtlcm5lbCBpcyBub3QgdGhlIHNhbWUgdGhhbiB0aGUgc291cmNlIGtlcm5lbCB2ZXJzaW9uLCBmcm9tIHdoaWNoIAoreW91IGNyZWF0ZSB0aGUgbW9kdWxlcy4gU28gcmVidWlsZCB5b3VyIGtlcm5lbCwgaWYgbmVjZXNzYXJ5LiAKKworTm93IGVkaXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB5b3VyIEFaVEVDSCBpbnRlcmZhY2UgY2FyZCBpbgorL3Vzci9zcmMvbGludXgvZHJpdmVycy9jZHJvbS9henRjZC5oIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZS4gCithenRjZCBtYXkgYmUgY29uZmlndXJlZCB0byB1c2UgYXV0b3Byb2JpbmcgdGhlIGJhc2UgYWRkcmVzcyBieSBzZXR0aW5nCitBWlRfQkFTRV9BRERSIHRvICctMScuIEluIHRoYXQgY2FzZSBhenRjZCBwcm9iZXMgdGhlIGFkZHJlc3NlcyBsaXN0ZWQgCit1bmRlciBBWlRfQkFTRV9BVVRPLiBCdXQgcGxlYXNlIHJlbWVtYmVyLCB0aGF0IGF1dG9wcm9iaW5nIGFsd2F5cyBtYXkgCitpbmNvcnJlY3RseSBpbmZsdWVuY2Ugb3RoZXIgaGFyZHdhcmUgY29tcG9uZW50cyB0b28hCitUaGVyZSBhcmUgYWxzbyBzb21lIHNwZWNpYWwgZmVhdHVyZXMgd2hpY2ggbWF5IGJlIGNvbmZpZ3VyZWQsIGUuZy4gCithdXRvLWVqZWN0IGEgQ0Qgd2hlbiB1bm1vdW50aW5nIHRoZSBkcml2ZSBldGM7IHNlZSBhenRjZC5oIGZvciBkZXRhaWxzLiAKK1RoZW4gY2hhbmdlIHRvIC91c3Ivc3JjL2xpbnV4IGFuZCBkbyBhIAorICAgICAgICAgICAgICAgICAgICBtYWtlIG1vZHVsZXMgIAorCSAgICAgICAgICAgIG1ha2UgbW9kdWxlc19pbnN0YWxsCitBZnRlciB0aGF0IHlvdSBjYW4gcnVuLXRpbWUgbG9hZCB0aGUgZHJpdmVyIHZpYQorICAgICAgICAgICAgICAgICAgICBpbnNtb2QgL2xpYi9tb2R1bGVzL1guWC5YL21pc2MvYXp0Y2QubworYW5kIHJlbW92ZSBpdCB2aWEgICBybW1vZCAgYXp0Y2QuCitJZiB5b3UgZGlkIG5vdCBzZXQgdGhlIGNvcnJlY3QgYmFzZSBhZGRyZXNzIGluIGF6dGNkLmgsIHlvdSBjYW4gYWxzbyBzdXBwbHkgdGhlCitiYXNlIGFkZHJlc3Mgd2hlbiBsb2FkaW5nIHRoZSBkcml2ZXIgdmlhCisgICAgICAgICAgICAgICAgICAgIGluc21vZCAvbGliL21vZHVsZXMvWC5YLlgvbWlzYy9henRjZC5vIGF6dGNkPTxiYXNlIGFkZHJlc3M+CitBZ2FpbiBzcGVjaWZ5aW5nIGF6dGNkPS0xIHdpbGwgY2F1c2UgYXV0b3Byb2JpbmcuCitJZiB5b3UgZG8gbm90IGhhdmUgdGhlIGlzbzk2NjAtZmlsZXN5c3RlbSBpbiB5b3VyIGJvb3Qga2VybmVsLCB5b3UgYWxzbyBoYXZlCit0byBsb2FkIGl0IGJlZm9yZSB5b3UgY2FuIG1vdW50IHRoZSBDRFJPTToKKyAgICAgICAgICAgICAgICAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy9YLlguWC9mcy9pc29mcy5vCitUaGUgbW91bnQgcHJvY2VkdXJlIHdvcmtzIGFzIGRlc2NyaWJlZCBpbiA0LiBhYm92ZS4KKyhJbiBhbGwgY29tbWFuZHMgJ1guWC5YJyBpcyB0aGUgY3VycmVudCBsaW51eCBrZXJuZWwgdmVyc2lvbiBudW1iZXIpCisKKzQuMiBDRFJPTSBDT05ORUNURUQgVE8gQSBTT1VORENBUkQKK01vc3Qgc291bmRjYXJkcyBkbyBoYXZlIGEgYnVzIGludGVyZmFjZSB0byB0aGUgQ0RST00tZHJpdmUuIEluIG1hbnkgY2FzZXMKK3RoaXMgc291bmRjYXJkIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQsIGJlZm9yZSB0aGUgQ0RST00gY2FuIGJlIHVzZWQuIFRoaXMKK2NvbmZpZ3VyYXRpb24gcHJvY2VkdXJlIGNvbnNpc3RzIG9mIHdyaXRpbmcgc29tZSBraW5kIG9mIGluaXRpYWxpemF0aW9uCitkYXRhIHRvIHRoZSBzb3VuZGNhcmQgcmVnaXN0ZXJzLiBUaGUgQVpURUNILUNEUk9NIGRyaXZlciBpbiB0aGUgbW9tZW50IGRvZXMKK29ubHkgc3VwcG9ydCBvbmUgdHlwZSBvZiBzb3VuZGNhcmQgKFNvdW5kV2F2ZTMyKS4gVXNlcnMgb2Ygb3RoZXIgc291bmRjYXJkcworc2hvdWxkIHRyeSB0byBib290IERPUyBmaXJzdCBhbmQgbGV0IHRoZWlyIERPUyBkcml2ZXJzIGluaXRpYWxpemUgdGhlCitzb3VuZGNhcmQgYW5kIENEUk9NLCB0aGVuIHdhcm0gYm9vdCAob3IgdXNlIGxvYWRsaW4pIHRoZWlyIFBDIHRvIHN0YXJ0CitMaW51eC4KK1N1cHBvcnQgZm9yIHRoZSBDRFJPTS1pbnRlcmZhY2Ugb2YgU291bmRXYXZlMzItc291bmRjYXJkcyBpcyBkaXJlY3RseQoraW1wbGVtZW50ZWQgaW4gdGhlIEFaVEVDSCBkcml2ZXIuIFBsZWFzZSBlZGl0IGxpbnV4L2RyaXZlcnMvY2Ryb20vYXp0ZGMuaCwKK3VuY29tbWVudCBsaW5lICcjZGVmaW5lIEFaVF9TVzMyJyBhbmQgc2V0IHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBmb3IKK0FaVF9CQVNFX0FERFIgYW5kIEFaVF9TVzMyX0JBU0VfQUREUi4gVGhpcyBzdXBwb3J0IHdhcyB0ZXN0ZWQgd2l0aCBhbiBPcmNoaWQKK0NEUy0zMTEwIGNvbm5lY3RlZCB0byBhIFNvdW5kV2F2ZTMyLgorSWYgeW91IHdhbnQgeW91ciBzb3VuZGNhcmQgdG8gYmUgc3VwcG9ydGVkLCBmaW5kIG91dCwgaG93IGl0IG5lZWRzIHRvIGJlCitjb25maWd1cmVkIGFuZCBtYWlsIG1lIChzZWUgNi4pIHRoZSBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbi4gCisKKzUuIEtOT1dOIFBST0JMRU1TLCBGVVRVUkUgREVWRUxPUE1FTlRTCis1LjEgTVVMVElTRVNTSU9OIFNVUFBPUlQKK011bHRpc2Vzc2lvbiBzdXBwb3J0IGZvciBDRCdzIHN0aWxsIGlzIGEgbXl0aC4gSSBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIGEgYmFzaWMKK3N1cHBvcnQgZm9yIG11bHRpc2Vzc2lvbiBhbmQgWEEgQ0RzLCBidXQgSSBzdGlsbCBoYXZlIG5vdCBlbm91Z2ggQ0RzIGFuZCBhcHBsaS0KK2NhdGlvbnMgdG8gdGVzdCBpdCByaWdvcm91c2x5LiBTbyBpZiB5b3UnZCBsaWtlIHRvIGhlbHAgbWUsIHBsZWFzZSBjb250YWN0IG1lCisoRW1haWwgYWRkcmVzcyBzZWUgYmVsb3cpLiBBcyBvZiB2ZXJzaW9uIDEuNCBhbmQgbmV3ZXIgeW91IGNhbiBlbmFibGUgdGhlIAorbXVsdGlzZXNzaW9uIHN1cHBvcnQgaW4gYXp0Y2QuaCBieSBzZXR0aW5nIEFaVF9NVUxUSVNFU1NJT04gdG8gMS4gRG9pbmcgc28gCit3aWxsIGNhdXNlIHRoZSBJU085NjYwLWZpbGVzeXN0ZW0gdG8gZGVhbCB3aXRoIG11bHRpc2Vzc2lvbiBDRHMsIGllLiByZWRpcmVjdCAKK3JlcXVlc3RzIHRvIHRoZSBUYWJsZSBvZiBDb250ZW50cyAoVE9DKSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsYXN0IHNlc3Npb24sIAord2hpY2ggY29udGFpbnMgdGhlIGluZm8gb2YgYWxsIHByZXZpb3VzIHNlc3Npb25zIGV0Yy4uIElmIHlvdSBkbyBzZXQgCitBWlRfTVVMVElTRVNTSU9OIHRvIDAsIHlvdSBjYW4gdXNlIG11bHRpc2Vzc2lvbiBDRHMgYW55d2F5LiBJbiB0aGF0IGNhc2UgdGhlIAorZHJpdmUncyBmaXJtd2FyZSB3aWxsIGRvIGF1dG9tYXRpYyByZWRpcmVjdGlvbi4gRm9yIHRoZSBJU085NjYwLWZpbGVzeXN0ZW0gYW55IAorbXVsdGlzZXNzaW9uIENEICB3aWxsIHRoZW4gbG9vayBsaWtlIGEgJ25vcm1hbCcgc2luZ2xlIHNlc3Npb24gQ0QuIEJ1dCBuZXZlci0KK3RoZWxlc3MgdGhlIGRhdGEgb2YgYWxsIHNlc3Npb25zIGFyZSB2aWV3YWJsZSBhbmQgYWNjZXNzaWJsZS4gU28gd2l0aCBwcmFjdGljYWwtCitseSBhbGwgcmVhbCB3b3JsZCBhcHBsaWNhdGlvbnMgeW91IHdvbid0IG5vdGljZSB0aGUgZGlmZmVyZW5jZS4gQnV0IGFzIGZ1dHVyZQorYXBwbGljYXRpb25zIG1heSBtYWtlIHVzZSBvZiBhZHZhbmNlZCBtdWx0aXNlc3Npb24gZmVhdHVyZXMsIEkndmUgc3RhcnRlZCB0bworaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBJU085NjYwIG11bHRpc2Vzc2lvbiBpbnRlcmZhY2UgdmlhIGlvY3RsCitDRFJPTU1VTFRJU0VTU0lPTi4KKworNS4yIFNUQVRVUyBSRUNPR05JVElPTgorVGhlIGRyaXZlIHN0YXR1cyByZWNvZ25pdGlvbiBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiBhbGwgY2FzZXMuIENoYW5naW5nCithIGRpc2sgb3IgaGF2aW5nIHRoZSBkb29yIG9wZW4sIHdoZW4gYSBkcml2ZSBpcyBhbHJlYWR5IG1vdW50ZWQsIGlzIGRldGVjdGVkIAorYnkgdGhlIEF6dGVjaCBkcml2ZXIgaXRzZWxmLCBidXQgbmV2ZXJ0aGVsZXNzIGNhdXNlcyBtdWx0aXBsZSByZWFkIGF0dGVtcHRzCitieSB0aGUgZGlmZmVyZW50IGxheWVycyBvZiB0aGUgSVNPOTY2MC1maWxlc3lzdGVtIGRyaXZlciwgd2hpY2ggZmluYWxseSB0aW1lb3V0LAorc28geW91IGhhdmUgdG8gd2FpdCBxdWl0ZSBhIGxpdHRsZS4uLiBCdXQgaXNuJ3QgaXQgYmFkIHN0eWxlIHRvIGNoYW5nZSBhIGRpc2sgCitpbiBhIG1vdW50ZWQgZHJpdmUsIGFueWhvdyA/IQorCitUaGUgZHJpdmVyIHVzZXMgYnVzeSB3YWl0IGluIG1vc3QgY2FzZXMgZm9yIHRoZSBkcml2ZSBoYW5kc2hha2UgKG1hY3JvcworU1RFTl9MT1cgYW5kIERURU5fTE9XKS4gSSB0ZXN0ZWQgd2l0aCBhIDQ4Ni9EWDIgYXQgNjZNSHogYW5kIGEgUGVudGl1bSBhdAorNjBNSHogYW5kIDkwTUh6LiBXaGVuZXZlciB5b3UgdXNlIGEgbXVjaCBmYXN0ZXIgbWFjaGluZSB5b3UgYXJlIGxpa2VseSB0byBnZXQgCit0aW1lb3V0IG1lc3NhZ2VzLiBJbiB0aGF0IGNhc2UgZWRpdCBhenRjZC5oIGFuZCBpbmNyZWFzZSB0aGUgdGltZW91dCB2YWx1ZSAKK0FaVF9USU1FT1VULiAKKworRm9yIHNvbWUgJ3Nsb3cnIGRyaXZlIGNvbW1hbmRzIEkgaW1wbGVtZW50ZWQgd2FpdGluZyB3aXRoIGEgdGltZXIgd2FpdHF1ZXVlCisobWFjcm8gU1RFTl9MT1dfV0FJVCkuIElmIHlvdSBnZXQgdGhpcyB0aW1lb3V0IG1lc3NhZ2UsIHlvdSBtYXkgYWxzbyBlZGl0CithenRjZC5oIGFuZCBpbmNyZWFzZSB0aGUgdGltZW91dCB2YWx1ZSBBWlRfU1RBVFVTX0RFTEFZLiBUaGUgd2FpdHF1ZXVlIGhhcworc2hvd24gdG8gYmUgYSBsaXR0bGUgY3JpdGljYWwuIElmIHlvdSBnZXQga2VybmVsIHBhbmljIG1lc3NhZ2VzLCBlZGl0IGF6dGNkLmMKK2FuZCBzdWJzdGl0dXRlIFNURU5fTE9XX1dBSVQgYnkgU1RFTl9MT1cuIEJ1c3kgd2FpdGluZyB3aXRoIFNURU5fTE9XIGlzIG1vcmUKK3N0YWJsZSwgYnV0IGFsc28gY2F1c2VzIENQVSBvdmVyaGVhZC4KKworNS4zIERPU0VNVSdzIENELVJPTSBTVVBQT1JUCitXaXRoIHJlbGVhc2UgMS4yMCBhenRjZCB3YXMgbW9kaWZpZWQgdG8gYWxsb3cgYWNjZXNzIHRvIENELVJPTVMgd2hlbiBydW5uaW5nCit1bmRlciBkb3NlbXUtMC42MC4wIGF6dGNkLXZlcnNpb25zIGJlZm9yZSAxLjIwIGFyZSBtb3N0IGxpa2VseSB0byBjcmFzaAorTGludXgsIHdoZW4gYSBDRC1ST00gaXMgYWNjZXNzZWQgdW5kZXIgZG9zZW11LiBUaGlzIHByb2JsZW0gaGFzIHBhcnRseSBiZWVuCitmaXhlZCwgYnV0IHN0aWxsIHdoZW4gYWNjZXNzaW5nIGEgZGlyZWN0b3J5IGZvciB0aGUgZmlyc3QgdGltZSB0aGUgc3lzdGVtCittaWdodCBoYW5nIGZvciBzb21lIDMwc2VjLiBTbyBiZSBwYXRpZW50LCB3aGVuIHVzaW5nIGRvc2VtdSdzIENELVJPTSBzdXBwb3J0CitpbiBjb21iaW5hdGlvbiB3aXRoIGF6dGNkIDotKSAhIAorVGhpcyBwcm9ibGVtIGhhcyBub3cgKEp1bHkgMTk5NSkgYmVlbiBmaXhlZCBieSBhIG1vZGlmaWNhdGlvbiB0byBkb3NlbXUncworQ0QtUk9NIGRyaXZlci4gVGhlIG5ldyB2ZXJzaW9uIGNhbWUgd2l0aCBkb3NlbXUtMC42MC4yLCBzZWUgZG9zZW11J3MKK1JFQURNRS5DRFJPTS4KKworNi4gQlVHIFJFUE9SVFMKK1BsZWFzZSBzZW5kIGRldGFpbGVkIGJ1ZyByZXBvcnRzIGFuZCBidWcgZml4ZXMgdmlhIEVNYWlsIHRvCisKKyAgICAgICAgV2VybmVyLlppbW1lcm1hbm5AZmh0LWVzc2xpbmdlbi5kZQorCitQbGVhc2UgaW5jbHVkZSBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgQ0QtUk9NIGRyaXZlIHR5cGUgYW5kIGludGVyZmFjZSBjYXJkLCAKK3RoZSBleGFjdCBmaXJtd2FyZSBtZXNzYWdlIGR1cmluZyBMaW51eCBib290dXAsIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgCitBWlRFQ0gtQ0RST00tZHJpdmVyIGFuZCB0aGUgTGludXgga2VybmVsIHZlcnNpb24uIEFsc28gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIAorc3lzdGVtJ3Mgb3RoZXIgaGFyZHdhcmUgY291bGQgYmUgb2YgaW50ZXJlc3QsIGVzcGVjaWFsbHkgbWljcm9wcm9jZXNzb3IgdHlwZSwgCitjbG9jayBmcmVxdWVuY3ksIG90aGVyIGludGVyZmFjZSBjYXJkcyBzdWNoIGFzIHNvdW5kY2FyZHMsIGV0aGVybmV0IGFkYXB0ZXIsIAorZ2FtZSBjYXJkcyBldGMuLgorCitJIHdpbGwgdHJ5IHRvIGNvbGxlY3QgdGhlIHJlcG9ydHMgYW5kIG1ha2UgdGhlIG5lY2Vzc2FyeSBtb2RpZmljYXRpb25zIGZyb20gCit0aW1lIHRvIHRpbWUuIEkgbWF5IGFsc28gY29tZSBiYWNrIHRvIHlvdSBkaXJlY3RseSB3aXRoIHNvbWUgYnVnIGZpeGVzIGFuZCAKK2FzayB5b3UgdG8gZG8gZnVydGhlciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcuCisKK0VkaXRvcnMgb2YgQ0QtUk9NcyBhcmUgaW52aXRlZCB0byBzZW5kIGEgJ2Nvb3BlcmF0aW9uJyBjb3B5IG9mIHRoZWlyCitDRC1ST01zIHRvIHRoZSB2b2x1bnRlZXJzLCB3aG8gcHJvdmlkZWQgdGhlIENELVJPTSBzdXBwb3J0IGZvciBMaW51eC4gTXkKK3NuYWlsIG1haWwgYWRkcmVzcyBmb3Igc3VjaCAnc3R1ZmYnIGlzCisgICAgICAgICAgIFByb2YuIERyLiBXLiBaaW1tZXJtYW5uCisgICAgICAgICAgIEZhY2hob2Noc2NodWxlIGZ1ZXIgVGVjaG5payBFc3NsaW5nZW4KKyAgICAgICAgICAgRmFjaGJlcmVpY2ggSVQKKyAgICAgICAgICAgRmxhbmRlcm5zdHJhc3NlIDEwMQorICAgICAgICAgICBELTczNzMyIEVzc2xpbmdlbgorICAgICAgICAgICBHZXJtYW55CisKKworNy4gT1RIRVIgRFJJVkVTCitUaGUgZm9sbG93aW5nIGRyaXZlcyBPUkNISUQgQ0RTMzExMCwgT0tBTk8gQ0REMTEwLCBXRUFSTkVTIENERDExMCBhbmQgQ29ucmFkCitUWEMgTnIuIDk5MzEyMy1zZXJpZXMgMDQgbmVhcmx5IGxvb2sgdGhlIHNhbWUgYXMgQVpURUNIIENEQTI2OC0wMUEsIGVzcGVjaWFsbHkgCit0aGV5IHNlZW0gdG8gdXNlIHRoZSBzYW1lIGNvbW1hbmQgY29kZXMuIFNvIGl0IHdhcyBxdWl0ZSBzaW1wbGUgdG8gbWFrZSB0aGUgCitBWlRFQ0ggZHJpdmVyIHdvcmsgd2l0aCB0aGVzZSBkcml2ZXMuIAorCitVbmZvcnR1bmF0ZWx5IEkgZG8gbm90IGhhdmUgYW55IG9mIHRoZXNlIGRyaXZlcyBhdmFpbGFibGUsIHNvIEkgY291bGRuJ3QgdGVzdAoraXQgbXlzZWxmLiBJbiBzb21lIGluc3RhbGxhdGlvbnMsIGl0IHNlZW1zIG5lY2Vzc2FyeSB0byBpbml0aWFsaXplIHRoZSBkcml2ZSAKK3dpdGggdGhlIERPUyBkcml2ZXIgYmVmb3JlIChlc3BlY2lhbGx5IGlmIGNvbWJpbmVkIHdpdGggYSBzb3VuZCBjYXJkKSBhbmQgdGhlbiAKK2RvIGEgd2FybSBib290IChDVFJMLUFMVC1SRVNFVCkgb3Igc3RhcnQgTGludXggZnJvbSBET1MsIGUuZy4gd2l0aCAnbG9hZGxpbicuCisKK0lmIHlvdSBkbyBub3Qgc3VjY2VlZCwgcmVhZCBjaGFwdGVyIERFQlVHR0lORy4gVGhhbmtzIGluIGFkdmFuY2UhCisKK1NvcnJ5IGZvciB0aGUgaW5jb252ZW5pZW5jZSwgYnV0IGl0IGlzIGRpZmZpY3VsdCB0byBkZXZlbG9wIGZvciBoYXJkd2FyZSwgCit3aGljaCB5b3UgZG9uJ3QgaGF2ZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcuIFNvIGlmIHlvdSBsaWtlLCBwbGVhc2UgaGVscCB1cy4KKworSWYgeW91IGRvIGhhdmUgYSBDeUNEUk9NIENSNTIwaWUgdGhhbmtzIHRvIEhpbG1hciBCZXJnZXIncyBoZWxwIHlvdXIgY2hhbmNlcworYXJlIGdvb2QsIHRoYXQgaXQgd2lsbCB3b3JrIHdpdGggYXp0Y2QuIFRoZSBDUjUyMGllIGlzIHNvbGQgYXMgYW4gSURFLWRyaXZlCithbmQgcmVhbGx5IGlzIGNvbm5lY3RlZCB0byB0aGUgSURFIGludGVyZmFjZSAocHJpbWFyeSBhdCAweDFGMCBvciBzZWNvbmRhcnkKK2F0IDB4MTcwLCBjb25maWd1cmVkIGFzIHNsYXZlLCBub3QgYXMgbWFzdGVyKS4gTmV2ZXJ0aGVsZXNzIGl0IGlzIG5vdCBBVEFQSQorY29tcGF0aWJsZSBidXQgc3RpbGwgdXNlcyBBenRlY2gncyBjb21tYW5kIGNvZGVzLgorCisKKzguIERFQlVHR0lORyA6IElGIFlPVSBET04nVCBTVUNDRUVELCBUUlkgVEhFIEZPTExPV0lORworLXJlcmVhZCB0aGUgY29tcGxldGUgUkVBRE1FIGZpbGUKKy1tYWtlIHN1cmUsIHRoYXQgeW91ciBkcml2ZSBpcyBoYXJkd2FyZSBjb25maWd1cmVkIGZvciAKKyAgICB0cmFuc2ZlciBtb2RlOiBwb2xsZWQKKyAgICBJUlE6ICAgICAgICAgICBub3QgdXNlZAorICAgIERNQTogICAgICAgICAgIG5vdCB1c2VkCisgICAgQmFzZSBBZGRyZXNzOiAgc29tZXRoaW5nIGxpa2UgMzAwLCAzMjAgLi4uCisgWW91IGNhbiBjaGVjayB0aGlzLCB3aGVuIHlvdSBzdGFydCB0aGUgRE9TIGRyaXZlciwgd2hpY2ggY2FtZSB3aXRoIHlvdXIKKyBkcml2ZS4gQnkgYXBwcm9wcmlhdGVseSBjb25maWd1cmluZyB0aGUgZHJpdmUgYW5kIHRoZSBET1MgZHJpdmVyIHlvdSBjYW4KKyBjaGVjaywgd2hldGhlciB5b3VyIGRyaXZlIGRvZXMgb3BlcmF0ZSBpbiB0aGlzIG1vZGUgY29ycmVjdGx5IHVuZGVyIERPUy4gSWYKKyBpdCBkb2VzIG5vdCBvcGVyYXRlIHVuZGVyIERPUywgaXQgd29uJ3QgdW5kZXIgTGludXguCisgSWYgeW91ciBkcml2ZSdzIGJhc2UgYWRkcmVzcyBpcyBzb21ldGhpbmcgbGlrZSAweDE3MCBvciAweDFGMCAoYW5kIGl0IGlzCisgbm90IGEgQ3lDRFJPTSBDUjUyMGllIG9yIENSIDk0MGllKSB5b3UgbW9zdCBsaWtlbHkgYXJlIGhhdmluZyBhbiBJREUvQVRBUEktCisgY29tcGF0aWJsZSBkcml2ZSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSBhenRjZC5jLCB1c2UgaWRlLWNkLmMgaW5zdGVhZC4KKyBNYWtlIHN1cmUgdGhlIEJhc2UgQWRkcmVzcyBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBpbiBhenRjZC5oLCBhbHNvIG1ha2UKKyBzdXJlLCB0aGF0IC9kZXYvYXp0Y2QwIGV4aXN0cyB3aXRoIHRoZSBjb3JyZWN0IG1ham9yIG51bWJlciAoY29tcGFyZSBpdCB3aXRoCisgdGhlIGVudHJ5IGluIGZpbGUgL3Vzci9pbmNsdWRlL2xpbnV4L21ham9yLmggZm9yIHRoZSBBenRlY2ggZHJpdmUpLiAKKy1pbnNlcnQgYSBDRC1ST00gYW5kIGNsb3NlIHRoZSB0cmF5CistY29sZCBib290IHlvdXIgUEMgKGkuZS4gdmlhIHRoZSBwb3dlciBvbiBzd2l0Y2ggb3IgdGhlIHJlc2V0IGJ1dHRvbikKKy1pZiB5b3Ugc3RhcnQgTGludXggdmlhIERPUywgZS5nLiB1c2luZyBsb2FkbGluLCBtYWtlIHN1cmUsIHRoYXQgdGhlIERPUworIGRyaXZlciBmb3IgdGhlIENELVJPTSBkcml2ZSBpcyBub3QgbG9hZGVkIChjb21tZW50IG91dCB0aGUgY2FsbGluZyBsaW5lcyAKKyBpbiBET1MnIGNvbmZpZy5zeXMhKQorLWxvb2sgZm9yIHRoZSBhenRjZDogaW5pdCBtZXNzYWdlIGR1cmluZyBMaW51eCBpbml0IGFuZCBub3RlIHRoZW0gZXhhY3RseQorLWxvZyBpbiBhcyByb290IGFuZCBkbyBhIG1vdW50IC10IGlzbzk2NjAgL2Rldi9henRjZDAgL21udAorLWlmIHlvdSBkb24ndCBzdWNjZWVkIGluIHRoZSBmaXJzdCB0aW1lLCB0cnkgc2V2ZXJhbCB0aW1lcy4gVHJ5IGFsc28gdG8gb3BlbgorIGFuZCBjbG9zZSB0aGUgdHJheSwgdGhlbiBtb3VudCBhZ2Fpbi4gUGxlYXNlIG5vdGUgY2FyZWZ1bGx5IGFsbCBjb21tYW5kcworIHlvdSB0eXBlZCBpbiBhbmQgdGhlIGF6dGNkLW1lc3NhZ2VzLCB3aGljaCB5b3UgZ2V0LgorLWlmIHlvdSBnZXQgYW4gJ0F6dGVjaCBDRC1ST00gaW5pdDogYWJvcnRlZCcgbWVzc2FnZSwgcmVhZCB0aGUgcmVtYXJrcyBhYm91dAorIHRoZSB2ZXJzaW9uIHN0cmluZyBiZWxvdy4KKworSWYgdGhpcyBkb2VzIG5vdCBoZWxwLCBkbyB0aGUgc2FtZSB3aXRoIHRoZSBmb2xsb3dpbmcgZGlmZmVyZW5jZXMgCistc3RhcnQgRE9TIGJlZm9yZTsgbWFrZSBub3cgc3VyZSwgdGhhdCB0aGUgRE9TIGRyaXZlciBmb3IgdGhlIENELVJPTSBpcyAKKyBsb2FkZWQgdW5kZXIgRE9TIChpLmUuIHVuY29tbWVudCBpdCBhZ2FpbiBpbiBjb25maWcuc3lzKQorLXdhcm0gYm9vdCB5b3VyIFBDIChpLmUuIHZpYSBDVFJMLUFMVC1ERUwpCisgaWYgeW91IGhhdmUgaXQsIHlvdSBjYW4gYWxzbyBzdGFydCB2aWEgbG9hZGxpbiAodHJ5IGJvdGgpLgorIC4uLgorIEFnYWluIG5vdGUgYWxsIGNvbW1hbmRzIGFuZCB0aGUgYXp0Y2QtbWVzc2FnZXMuCisKK0lmIHlvdSBzZWUgU1RFTl9MT1cgb3IgU1RFTl9MT1dfV0FJVCBlcnJvciBtZXNzYWdlcywgaW5jcmVhc2UgdGhlIHRpbWVvdXQKK3ZhbHVlcy4KKworSWYgdGhpcyBzdGlsbCBkb2VzIG5vdCBoZWxwLCAKKy1sb29rIGluIGF6dGNkLmMgZm9yIHRoZSBsaW5lcyAgI2lmIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBBWlRfVEVTVDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIGFuZCBzdWJzdGl0dXRlICcjaWYgMCcgYnkgJyNpZiAxJy4KKy1yZWNvbXBpbGUgeW91ciBrZXJuZWwgYW5kIHJlcGVhdCB0aGUgYWJvdmUgdHdvIHByb2NlZHVyZXMuIFlvdSB3aWxsIG5vdyBnZXQgCisgYSBidW5kbGUgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIGZyb20gdGhlIGRyaXZlci4gQWdhaW4gbm90ZSB5b3VyIGNvbW1hbmRzCisgYW5kIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlcy4gSWYgeW91IGhhdmUgc3lzbG9nZCBydW5uaW5nLCB0aGVzZSBtZXNzYWdlcworIG1heSBhbHNvIGJlIGZvdW5kIGluIHN5c2xvZ2QncyBrZXJuZWwgbG9nIGZpbGUuIE5ldmVydGhlbGVzcyBpbiBzb21lCisgaW5zdGFsbGF0aW9ucyBzeXNsb2dkIGRvZXMgbm90IHlldCBydW4sIHdoZW4gaW5pdCgpIGlzIGNhbGxlZCwgdGh1cyBsb29rIGZvcgorIHRoZSBhenRjZC1tZXNzYWdlcyBkdXJpbmcgaW5pdCwgYmVmb3JlIHRoZSBsb2dpbi1wcm9tcHQgYXBwZWFycy4KKyBUaGVuIGxvb2sgaW4gYXp0Y2QuYywgdG8gZmluZCBvdXQsIHdoYXQgaGFwcGVuZWQuIFRoZSBub3JtYWwgY2FsbGluZyBzZXF1ZW5jZSAKKyBpczogYXp0Y2RfaW5pdCgpIGR1cmluZyBMaW51eCBib290dXAgcHJvY2VkdXJlIGluaXQoKQorIGFmdGVyIGRvaW5nIGEgJ21vdW50IC10IGlzbzk2NjAgL2Rldi9henRjZDAgL21udCcgdGhlIG5vcm1hbCBjYWxsaW5nIHNlcXVlbmNlIGlzCisgICAgIGF6dGNkX29wZW4oKSAgICAtPiBTdGF0dXMgMmMgYWZ0ZXIgY29sZCByZWJvb3Qgd2l0aCBDRFJPTSBvciBhdWRpbyBDRCBpbnNlcnRlZAorICAgICAgICAgICAgICAgICAgICAgLT4gU3RhdHVzIDggIGFmdGVyIHdhcm0gcmVib290IHdpdGggQ0RST00gaW5zZXJ0ZWQgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAtPiBTdGF0dXMgMmUgYWZ0ZXIgY29sZCByZWJvb3Qgd2l0aCBubyBkaXNrLCBjbG9zZWQgdHJheQorICAgICAgICAgICAgICAgICAgICAgLT4gU3RhdHVzIDZlIGFmdGVyIGNvbGQgcmVib290LCBtb3VudCB3aXRoIGRvb3Igb3BlbgorICAgICBhenRVcGRhdGVUb2MoKQorICAgICBhenRHZXREaXNrSW5mbygpCisgICAgIGF6dEdldFFDaGFubmVsSW5mbygpICAgcmVwZWF0ZWQgc2V2ZXJhbCB0aW1lcworICAgICBhenRHZXRUb2MoKQorICAgICBhenRHZXRRQ2hhbm5lbEluZm8oKSAgIHJlcGVhdGVkIHNldmVyYWwgdGltZXMKKyAgICAgYSBsaXN0IG9mIHRyYWNrIGluZm9ybWF0aW9uCisgICAgIGRvX2F6dGNkX3JlcXVlc3QoKSAgfSAgCisgICAgIGF6dF90cmFuc2ZlcigpICAgIH0gcmVwZWF0ZWQgc2V2ZXJhbCB0aW1lcworICAgICBhenRfcG9sbCAgICAgICAgICB9CisgQ2hlY2ssIGlmIHRoZXJlIGlzIGEgZGlmZmVyZW5jZSBpbiB0aGUgY2FsbGluZyBzZXF1ZW5jZSBvciB0aGUgc3RhdHVzIGZsYWdzIQorIAorIFRoZXJlIGFyZSBhIGxvdCBvZiBvdGhlciBtZXNzYWdlcywgZWcuIHRoZSBBQ01ELWNvbW1hbmQgY29kZSAoZGVmaW5lZCBpbgorIGF6dGNkLmgpLCBzdGF0dXMgaW5mbyBmcm9tIHRoZSBnZXRBenRTdGF0dXMtY29tbWFuZCBhbmQgdGhlIHN0YXRlIHNlcXVlbmNlIG9mCisgdGhlIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIGluIGF6dF9wb2xsKCkuIFRoZSBtb3N0IGltcG9ydGFudCBhcmUgdGhlIHN0YXR1cworIG1lc3NhZ2VzLCBsb29rIGhvdyB0aGV5IGFyZSBkZWZpbmVkIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCwgaWYgdGhleSBtYWtlCisgc2Vuc2UgaW4gdGhlIGNvbnRleHQgd2hlcmUgdGhleSBhcHBlYXIuIFdpdGggYSBDRC1ST00gaW5zZXJ0ZWQgdGhlIHN0YXR1cyAKKyBzaG91bGQgYWx3YXlzIGJlIDgsIGV4Y2VwdCBpbiBhenRjZF9vcGVuKCkuIFRyeSB0byBvcGVuIHRoZSB0cmF5LCBpbnNlcnQgYW4KKyBhdWRpbyBkaXNrLCBpbnNlcnQgbm8gZGlzayBvciByZWluc2VydCB0aGUgQ0QtUk9NIGFuZCBjaGVjaywgaWYgdGhlIHN0YXR1cworIGJpdHMgY2hhbmdlIGFjY29yZGluZ2x5LiBUaGUgc3RhdHVzIGJpdHMgYXJlIHRoZSBtb3N0IGxpa2VseSBwb2ludCwgd2hlcmUgCisgdGhlIGRyaXZlIG1hbnVmYWN0dXJlcnMgbWF5IGltcGxlbWVudCBjaGFuZ2VzLgorICAgICAgICAgICAgCitJZiB5b3Ugc3RpbGwgZG9uJ3Qgc3VjY2VlZCwgYSBnb29kIHBvaW50IHRvIHN0YXJ0IGlzIHRvIGxvb2sgaW4gYXp0Y2QuYyBpbiAKK2Z1bmN0aW9uIGF6dGNkX2luaXQsIHdoZXJlIHRoZSBkcml2ZSBzaG91bGQgYmUgZGV0ZWN0ZWQgZHVyaW5nIGluaXQuIERvIHRoZQorZm9sbG93aW5nOgorLXJlYm9vdCB0aGUgc3lzdGVtIHdpdGggYm9vdCBwYXJhbWV0ZXIgJ2F6dGNkPTx5b3VyIGJhc2UgYWRkcmVzcz4sMHg3OScuIFdpdGgKKyBwYXJhbWV0ZXIgMHg3OSBtb3N0IG9mIHRoZSBkcml2ZSB2ZXJzaW9uIGRldGVjdGlvbiBpcyBieXBhc3NlZC4gQWZ0ZXIgdGhhdCAKKyB5b3Ugc2hvdWxkIHNlZSB0aGUgY29tcGxldGUgdmVyc2lvbiBzdHJpbmcgaW5jbHVkaW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIAorIGJsYW5rcyBkdXJpbmcgaW5pdC4gCisgTm93IGFkYXB0IHRoZSBzdGF0ZW1lbnQKKyAgICAgIGlmICgocmVzdWx0WzFdPT0nQScpJiYocmVzdWx0WzJdPT0nWicgLi4uKQorIGluIGF6dGNkX2luaXQoKSB0byBleGFjdGx5IG1hdGNoIHRoZSBmaXJzdCAzIG9yIDQgbGV0dGVycyB5b3UgaGF2ZSBzZWVuLgorLUFub3RoZXIgcG9pbnQgaXMgdGhlICdzbWFydCcgY2FyZCBkZXRlY3Rpb24gZmVhdHVyZSBpbiBhenRjZF9pbml0KCkuIE5vcm1hbGx5CisgdGhlIENELVJPTSBkcml2ZSBpcyByZWFkeSwgd2hlbiBhenRjZF9pbml0IGlzIHRyeWluZyB0byByZWFkIHRoZSB2ZXJzaW9uCisgc3RyaW5nIGFuZCBhIHRpbWUgY29uc3VtaW5nIEFDTURfU09GVF9SRVNFVCBjb21tYW5kIGNhbiBiZSBhdm9pZGVkLiBUaGlzIGlzCisgZGV0ZWN0ZWQgYnkgbG9va2luZywgaWYgQUZMX09QX09LIGNhbiBiZSByZWFkIGNvcnJlY3RseS4gSWYgdGhlIENELVJPTSBkcml2ZSAKKyBoYW5ncyBpbiBzb21lIHVua25vd24gc3RhdGUsIGUuZy4gYmVjYXVzZSBvZiBhbiBlcnJvciBiZWZvcmUgYSB3YXJtIHN0YXJ0IG9yIAorIGJlY2F1c2UgeW91IGZpcnN0IG9wZXJhdGVkIHVuZGVyIERPUywgZXZlbiB0aGUgdmVyc2lvbiBzdHJpbmcgbWF5IGJlIGNvcnJlY3QsIAorIGJ1dCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHdpbGwgbm90LiBUaGVuIGNoYW5nZSB0aGUgY29kZSBpbiBzdWNoIGEgd2F5LCAKKyB0aGF0IHRoZSBBQ01EX1NPRlRfUkVTRVQgaXMgaXNzdWVkIGluIGFueSBjYXNlLCBieSBzdWJzdGl0dXRpbmcgdGhlCisgaWYtc3RhdGVtZW50ICdpZiAoIC4uLj1BRkxfT1BfT0spJyBieSAnaWYgKDEpJy4KKworSWYgeW91IHN1Y2NlZWQsIHBsZWFzZSBtYWlsIG1lIHRoZSBleGFjdCB2ZXJzaW9uIHN0cmluZyBvZiB5b3VyIGRyaXZlIGFuZAordGhlIGNvZGUgbW9kaWZpY2F0aW9ucywgeW91IGhhdmUgbWFkZSB0b2dldGhlciB3aXRoIGEgc2hvcnQgZXhwbGFuYXRpb24uCitJZiB5b3UgZG9uJ3Qgc3VjY2VlZCwgeW91IG1heSBtYWlsIG1lIHRoZSBvdXRwdXQgb2YgdGhlIGRlYnVnZ2luZyBtZXNzYWdlcy4KK0J1dCByZW1lbWJlciwgdGhleSBhcmUgb25seSB1c2VmdWwsIGlmIHRoZXkgYXJlIGV4YWN0IGFuZCBjb21wbGV0ZSBhbmQgeW91CitkZXNjcmliZSBpbiBkZXRhaWwgeW91ciBoYXJkd2FyZSBzZXR1cCBhbmQgd2hhdCB5b3UgZGlkIChjb2xkL3dhcm0gcmVib290LAord2l0aC93aXRob3V0IERPUywgRE9TLWRyaXZlciBzdGFydGVkL25vdCBzdGFydGVkLCB3aGljaCBMaW51eC1jb21tYW5kcyBldGMuKQorCisKKzkuIFRFQ0hOSUNBTCBISVNUT1JZIE9GIFRIRSBEUklWRVIKK1RoZSBBWlRFQ0gtRHJpdmVyIGlzIGEgcmV3b3JrIG9mIHRoZSBNaXRzdW1pLURyaXZlci4gRm91ciBtYWpvciBpdGVtcyBoYWQgdG8KK2JlIHJld29ya2VkOgorCithKSBUaGUgTWl0c3VtaSBkcml2ZSBkb2VzIGlzc3VlIGNvbXBsZXRlIHN0YXR1cyBpbmZvcm1hdGlvbiBhY2tub3dsZWRnaW5nCitlYWNoIGNvbW1hbmQsIHRoZSBBenRlY2ggZHJpdmUgZG9lcyBvbmx5IHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIHdhcworcHJvY2Vzc2VkLiBTbyB3aGVuZXZlciB0aGUgY29tcGxldGUgc3RhdHVzIGluZm9ybWF0aW9uIGlzIG5lZWRlZCwgYW4gZXh0cmEKK0FDTURfR0VUX1NUQVRVUyBjb21tYW5kIGlzIGlzc3VlZC4gVGhlIGhhbmRzaGFrZSBwcm9jZWR1cmUgZm9yIHRoZSBkcml2ZQorY2FuIGJlIGZvdW5kIGluIHRoZSBmdW5jdGlvbnMgYXp0U2VuZENtZCgpLCBzZW5kQXp0Q21kKCkgYW5kIGdldEF6dFN0YXR1cygpLgorCitiKSBUaGUgQXp0ZWNoIERyaXZlIGRvZXMgbm90IGhhdmUgYSBBQ01EX0dFVF9ESVNLX0lORk8gY29tbWFuZCwgc28gdGhlCituZWNlc3NhcnkgaW5mbyBhYm91dCB0aGUgbnVtYmVyIG9mIHRyYWNrcyAoZmlyc3RUcmFjaywgbGFzdFRyYWNrKSwgZGlzaworbGVuZ3RoIGV0Yy4gaGFzIHRvIGJlIHJlYWQgZnJvbSB0aGUgVE9DIGluIHRoZSBsZWFkIGluIHRyYWNrIChzZWUgZnVuY3Rpb24KK2F6dEdldERpc2tJbmZvKCkpLgorCitjKSBXaGVuZXZlciBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZHJpdmUsIHRoZSBNaXRzdW1pIGRyaXZlIGlzIHN0YXJ0ZWQgd2l0aCBhCitjb21tYW5kIHRvIHJlYWQgYW4gaW5kZWZpbml0ZSAoMHhmZmZmZmYpIG51bWJlciBvZiBzZWN0b3JzLiBXaGVuIHRoZSBhcHByb3ByaWF0ZSAKK251bWJlciBvZiBzZWN0b3JzIGlzIHJlYWQsIHRoZSBkcml2ZSBpcyBzdG9wcGVkIGJ5IGEgQUNETV9TVE9QIGNvbW1hbmQuIFRoaXMKK2RvZXMgbm90IHdvcmsgd2l0aCB0aGUgQXp0ZWNoIGRyaXZlLiBJIGRpZCBub3QgZmluZCBhIHdheSB0byBzdG9wIGl0LiBUaGUKK3N0b3AgYW5kIHBhdXNlIGNvbW1hbmRzIGRvIG9ubHkgd29yayBpbiBBVURJTyBtb2RlIGJ1dCBub3QgaW4gREFUQSBtb2RlLgorVGhlcmVmb3JlIEkgaGFkIHRvIG1vZGlmeSB0aGUgJ2Zpbml0ZSBzdGF0ZSBtYWNoaW5lJyBpbiBmdW5jdGlvbiBhenRfcG9sbCB0bworb25seSByZWFkIGEgY2VydGFpbiBudW1iZXIgb2Ygc2VjdG9ycyBhbmQgdGhlbiBzdGFydCBhIG5ldyByZWFkIG9uIGRlbWFuZC4gQXMgSSAKK2hhdmUgbm90IGNvbXBsZXRlbHkgdW5kZXJzdG9vZCwgaG93IHRoZSBidWZmZXIvY2FjaGluZyBzY2hlbWUgb2YgdGhlIE1pdHN1bWkgCitkcml2ZXIgd2FzIGltcGxlbWVudGVkLCBJIGFtIG5vdCBzdXJlLCBpZiBJIGhhdmUgY292ZXJlZCBhbGwgY2FzZXMgY29ycmVjdGx5LCAKK3doZW5ldmVyIHlvdSBnZXQgdGltZW91dCBtZXNzYWdlcywgdGhlIGJ1ZyBpcyBtb3N0IGxpa2VseSB0byBiZSBpbiB0aGF0CitmdW5jdGlvbiBhenRfcG9sbCgpIGFyb3VuZCBzd2l0Y2goY21kKSAuLi4uIGNhc2UgQUNEX1NfREFUQS4gCisKK2QpIEkgZGlkIG5vdCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdpbmcgZHJpdmUgbW9kZS4gU28gSSBkb3VidCwgdGhhdCB0aGUKK2NvZGUgYXJvdW5kIGZ1bmN0aW9uIGF6dF9wb2xsKCkgY2FzZSBBWlRfU19NT0RFIGRvZXMgd29yay4gSW4gbXkgdGVzdCBJIGhhdmUKK25vdCBiZWVuIGFibGUgdG8gc3dpdGNoIHRvIHJlYWRpbmcgaW4gcmF3IG1vZGUuIEZvciByZWFkaW5nIHJhdyBtb2RlLCBBenRlY2gKK3VzZXMgYSBkaWZmZXJlbnQgY29tbWFuZCB0aGFuIGZvciBjb29rZWQgbW9kZSwgd2hpY2ggSSBvbmx5IGhhdmUgaW1wbGVtZW4tCit0ZWQgaW4gdGhlIGlvY3RsLXNlY3Rpb24gYnV0IG5vdCBpbiB0aGUgc2VjdGlvbiB3aGljaCBpcyB1c2VkIGJ5IHRoZSBJU085NjYwLiAKKworVGhlIGRyaXZlciB3YXMgZGV2ZWxvcGVkIG9uIGFuIEFTVCBQQyB3aXRoIEludGVsIDQ4Ni9EWDIsIDhNQiBSQU0sIDM0ME1CIElERSAKK2hhcmQgZGlzayBhbmQgb24gYW4gQVNUIFBDIHdpdGggSW50ZWwgUGVudGl1bSA2ME1IeiwgMTZNQiBSQU0sIDUyME1CIElERSAKK3J1bm5pbmcgTGludXgga2VybmVsIHZlcnNpb24gMS4wLjkgZnJvbSB0aGUgTFNUIDEuOCBEaXN0cmlidXRpb24uIFRoZSBrZXJuZWwgCit3YXMgY29tcGlsZWQgd2l0aCBnY2MuMi41LjguIE15IENELVJPTSBkcml2ZSBpcyBhbiBBenRlY2ggQ0RBMjY4LTAxQS4gTXkKK2RyaXZlIHNheXMsIHRoYXQgaXQgaGFzIEZpcm13YXJlIFZlcnNpb24gQVpUMjY4MDFBMS4zLiBJdCBjYW1lIHdpdGggYW4gSVNBLWJ1cworaW50ZXJmYWNlIGNhcmQgYW5kIHdvcmtzIHdpdGggcG9sbGVkIEkvTyB3aXRob3V0IERNQSBhbmQgd2l0aG91dCBpbnRlcnJ1cHRzLgorVGhlIGNvZGUgZm9yIGFsbCBvdGhlciBkcml2ZXMgd2FzICdyZW1vdGUnIHRlc3RlZCBhbmQgZGVidWdnZWQgYnkgYSBudW1iZXIgb2YgCit2b2x1bnRlZXJzIG9uIHRoZSBJbnRlcm5ldC4KKworUG9pbnRzLCB3aGVyZSBJIGZlZWwgdGhhdCBwb3NzaWJsZSBwcm9ibGVtcyBtaWdodCBiZSBhbmQgYWxsIHBvaW50cyB3aGVyZSBJIAorZGlkIG5vdCBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgdGhlIGRyaXZlJ3MgYmVoYXZpb3VyIG9yIHRydXN0IG15IG93biBjb2RlIGFyZSAKK21hcmtlZCB3aXRoIC8qPz8/Ki8gaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGVyZSBhcmUgYWxzbyBzb21lIHBhcnRzIGluIHRoZSAKK01pdHN1bWkgZHJpdmVyLCB3aGVyZSBJIGRpZCBub3QgY29tcGxldGVseSB1bmRlcnN0YW5kIHRoZWlyIGNvZGUuCisKKworMTAuIEFDS05PV0xFREdNRU5UUworV2l0aG91dCB0aGUgaGVscCBvZiBQLkJ1c2gsIEF6dGVjaCwgd2hvIGRlbGl2ZXJlZCB0ZWNobmljYWwgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBBenRlY2ggRHJpdmUgYW5kIHdpdGhvdXQgdGhlIGhlbHAgb2YgRS5Nb2Vua2ViZXJnLCBHV0RHLCB3aG8gZGlkIGEKK2dyZWF0IGpvYiBpbiBhbmFseXppbmcgdGhlIGNvbW1hbmQgc3RydWN0dXJlIG9mIHZhcmlvdXMgQ0QtUk9NIGRyaXZlcywgdGhpcword29yayB3b3VsZCBub3QgaGF2ZSBiZWVuIHBvc3NpYmxlLiBFLk1vZW5rZWJlcmcgd2FzIGFsc28gYSBncmVhdCBoZWxwIGluIAorbWFraW5nIHRoZSBzb2Z0d2FyZSAna2VybmVsIHJlYWR5JyBhbmQgaW4gYW5zd2VyaW5nIG1hbnkgb2YgdGhlIENEUk9NLXJlbGF0ZWQgCitxdWVzdGlvbnMgaW4gdGhlIG5ld3Nncm91cHMuIEhlIHJlYWxseSBpcyAqdGhlKiBMaW51eCBDRC1ST00gZ3VydS4gVGhhbmtzIAorYWxzbyB0byBhbGwgdGhlIGd1eXMgb24gdGhlIEludGVybmV0LCB3aG8gY29sbGVjdGVkIHZhbHVhYmxlIHRlY2huaWNhbCAKK2luZm9ybWF0aW9uIGFib3V0IENEUk9Ncy4gCisKK0pvZSBOYXJkb25lIChqb2VAYWNjZXNzLmRpZ2V4Lm5ldCkgd2FzIGEgcGF0aWVudCB0ZXN0ZXIgZXZlbiBmb3IgbXkgZmlyc3QKK3RyaWFsLCB3aGljaCB3YXMgbW9yZSB0aGFuIHNsb3csIGFuZCBtYWRlIHN1Z2dlc3Rpb25zIGZvciBjb2RlIGltcHJvdmVtZW50LgorRXNwZWNpYWxseSB0aGUgJ2Zpbml0ZSBzdGF0ZSBtYWNoaW5lJyBhenRfcG9sbCgpIHdhcyByZXdyaXR0ZW4gYnkgSm9lIHRvIGdldAorY2xlYW4gQyBjb2RlIGFuZCBhdm9pZCB0aGUgdWdseSAnZ290b3MnLCB3aGljaCBJIGNvcGllZCBmcm9tIG1jZC5jLgorCitSb2JieSBTY2hpcm1lciAoc2NoaXJtZXJAZm1pLnVuaS1wYXNzYXUuZGUpIHRlc3RlZCB0aGUgYXVkaW8gc3R1ZmYgKGlvY3RscykgCithbmQgc3VnZ2VzdGVkIGEgbG90IG9mIHBhdGNoZXMgZm9yIHRoZW0uCisKK0pvc2VwaCBQaXNrb3IgYW5kIFBldGVyIE51Z2VudCB3ZXJlIHRoZSBmaXJzdCB1c2VycyB3aXRoIHRoZSBPUkNISUQgQ0QzMTEwCithbmQgYWxzbyB3ZXJlIHZlcnkgcGF0aWVudCB3aXRoIHRoZSBwcm9ibGVtcyB3aGljaCBvY2N1cnJlZC4KKworUmVpbmhhcmQgTWF4IGRlbGl2ZXJlZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBDRFJPTS1pbnRlcmZhY2Ugb2YgdGhlCitTb3VuZFdhdmUzMiBzb3VuZGNhcmRzLgorCitKb2NoZW4gS3VueiBhbmQgT2xhZiBLYWx1emEgZGVsaXZlcmVkIHRoZSBpbmZvcm1hdGlvbiBmb3Igc3VwcG9ydGluZyBDb25yYWQncyAKK1RYQyBkcml2ZS4KKworSGlsbWFyIEJlcmdlciBkZWxpdmVyZWQgdGhlIHBhdGNoZXMgZm9yIHN1cHBvcnRpbmcgQ3lDRFJPTSBDUjUyMGllLgorCitBbnlib2R5LCB3aG8gaXMgaW50ZXJlc3RlZCBpbiB0aGVzZSBpdGVtcyBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgJ2Z0cC5nd2RnLmRlJywKK2RpcmVjdG9yeSAncHViL2xpbnV4L2Nkcm9tJyBhbmQgYXQgJ2Z0cC5jZHJvbS5jb20nLCBkaXJlY3RvcnkgJ3B1Yi9jZHJvbScuCisKKzExLiBQUk9HUkFNTUlORyBBREQgT05zOiBjZHBsYXkuYworWW91IGNhbiB1c2UgdGhlIGlvY3RsLWZ1bmN0aW9ucyBpbmNsdWRlZCBpbiBhenRjZC5jIGluIHlvdXIgb3duIHByb2dyYW1zLiBBcworYW4gZXhhbXBsZSBvbiBob3cgdG8gZG8gdGhpcywgeW91IHdpbGwgZmluZCBhIHRpbnkgQ0QgUGxheWVyIGZvciBhdWRpbyBDRHMgCituYW1lZCAnY2RwbGF5LmMnLiBJdCBhbGxvd3MgeW91IHRvIHBsYXkgYXVkaW8gQ0RzLiBZb3UgY2FuIHBsYXkgYSBzcGVjaWZpZWQgCit0cmFjaywgcGF1c2UgYW5kIHJlc3VtZSBvciBza2lwIHRyYWNrcyBmb3J3YXJkIGFuZCBiYWNrd2FyZHMuIElmIHlvdSBxdWl0IHRoZSAKK3Byb2dyYW0gd2l0aG91dCBzdG9wcGluZyB0aGUgIGRyaXZlLCBwbGF5aW5nIGlzIGNvbnRpbnVlZC4gWW91IGNhbiBhbHNvIAorKG1pcyl1c2UgY2RwbGF5IHRvIHJlYWQgYW5kIGhleGR1bXAgZGF0YSBkaXNrcy4gWW91IGNhbiBmaW5kIHRoZSBjb2RlIGluIHRoZSAKK0FQUEVORElYIG9mIHRoaXMgZmlsZSwgd2hpY2ggeW91IHNob3VsZCBjdXQgb3V0IHdpdGggYW4gZWRpdG9yIGFuZCBzdG9yZSBpbiBhIAorc2VwYXJhdGUgZmlsZSAnY2RwbGF5LmMnLiBUbyBjb21waWxlIGl0IGFuZCBtYWtlIGl0IGV4ZWN1dGFibGUsIGRvCisgIGdjYyAtcyAtV2FsbCAtTzIgLUwvdXNyL2xpYiBjZHBsYXkuYyAtbyAvdXNyL2xvY2FsL2Jpbi9jZHBsYXkgIyBjb21waWxlcyBpdAorICBjaG1vZCArNzU1IC91c3IvbG9jYWwvYmluL2NkcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZXMgaXQgZXhlY3V0YWJsZQorICBsbiAtcyAvZGV2L2F6dGNkMCAvZGV2L2Nkcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY3JlYXRlcyBhIGxpbmsKKyAgIChmb3IgL3Vzci9saWIgc3Vic3RpdHV0ZSB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSwgd2hlcmUgeW91ciBpbmNsdWRlIGZpbGVzIAorICAgIHJlc2lkZSwgIGFuZCBmb3IgL3Vzci9sb2NhbC9iaW4gdGhlIGRpcmVjdG9yeSwgd2hlcmUgeW91IHdhbnQgdGhlIGV4ZWN1dGFibGUgCisgICAgYmluYXJ5IHRvIHJlc2lkZSApCisKK1lvdSBoYXZlIHRvIHNldCB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyBmb3IgY2RwbGF5ICphbmQqIGZvciAvZGV2L21jZDAgb3IKKy9kZXYvYXp0Y2QwIGluIG9yZGVyIHRvIHVzZSBpdC4gUmVtZW1iZXIsIHRoYXQgeW91IHNob3VsZCBub3QgaGF2ZSAvZGV2L2Nkcm9tIAorbW91bnRlZCwgd2hlbiB5b3UncmUgcGxheWluZyBhdWRpbyBDRHMuIAorCitUaGlzIHByb2dyYW0gaXMganVzdCBhIGhhY2sgZm9yIHRlc3RpbmcgdGhlIGlvY3RsLWZ1bmN0aW9ucyBpbiBhenRjZC5jLiBJIHdpbGwgCitub3QgbWFpbnRhaW4gaXQsIHNvIGlmIHlvdSBydW4gaW50byBwcm9ibGVtcywgZGlzY2FyZCBpdCBvciBoYXZlIGEgbG9vayBpbnRvIAordGhlIHNvdXJjZSBjb2RlICdjZHBsYXkuYycuIFRoZSBwcm9ncmFtIGRvZXMgb25seSBjb250YWluIGEgbWluaW11bSBvZiB1c2VyIAorcHJvdGVjdGlvbiBhbmQgaW5wdXQgZXJyb3IgZGV0ZWN0aW9uLiBJZiB5b3UgdXNlIHRoZSBjb21tYW5kcyBpbiB0aGUgd3JvbmcgCitvcmRlciBvciBpZiB5b3UgdHJ5IHRvIHJlYWQgYSBDRCBhdCB3cm9uZyBhZGRyZXNzZXMsIHlvdSBtYXkgZ2V0IGVycm9yIG1lc3NhZ2VzCitvciBldmVuIGhhbmcgeW91ciBtYWNoaW5lLiBJZiB5b3UgZ2V0IFNURU5fTE9XLCBTVEVOX0xPV19XQUlUIG9yIHNlZ21lbnQgdmlvbGF0aW9uIAorZXJyb3IgbWVzc2FnZXMgd2hlbiB1c2luZyBjZHBsYXksIGFmdGVyIHRoYXQsIHRoZSBzeXN0ZW0gbWlnaHQgbm90IGJlIHN0YWJsZSAKK2FueSBtb3JlLCBzbyB5b3UnZCBiZXR0ZXIgcmVib290LiBBcyB0aGUgaW9jdGwtZnVuY3Rpb25zIHJ1biBpbiBrZXJuZWwgbW9kZSwKK21vc3Qgbm9ybWFsIExpbnV4LW11bHRpdGFza2luZyBwcm90ZWN0aW9uIGZlYXR1cmVzIGRvIG5vdCB3b3JrLiBCeSB1c2luZwordW5pbml0aWFsaXplZCAnd2lsZCcgcG9pbnRlcnMgZXRjLiwgaXQgaXMgZWFzeSB0byB3cml0ZSB0byBvdGhlciB1c2VycycgZGF0YSAKK2FuZCBwcm9ncmFtIGFyZWFzLCBkZXN0cm95IGtlcm5lbCB0YWJsZXMgZXRjLi4gU28gaWYgeW91IGV4cGVyaW1lbnQgd2l0aCBpb2N0bHMKK2FzIGFsd2F5cyB3aGVuIHlvdSBhcmUgZG9pbmcgc3lzdGVtcyBwcm9ncmFtbWluZyBhbmQga2VybmVsIGhhY2tpbmcsIHlvdQorc2hvdWxkIGhhdmUgYSBiYWNrdXAgY29weSBvZiB5b3VyIHN5c3RlbSBpbiBhIHNhZmUgcGxhY2UgKGFuZCB5b3UgYWxzbworc2hvdWxkIHRyeSByZXN0b3JpbmcgZnJvbSBhIGJhY2t1cCBjb3B5IGZpcnN0KSEKKworQSByZXdvcmtlZCBhbmQgaW1wcm92ZWQgdmVyc2lvbiBjYWxsZWQgJ2NkdGVzdGVyLmMnLCB3aGljaCBoYXMgeWV0IG1vcmUKK2ZlYXR1cmVzIGZvciB0ZXN0aW5nIENEUk9NLWRyaXZlcyBjYW4gYmUgZm91bmQgaW4KK0RvY3VtZW50YXRpb24vY2Ryb20vc2JwY2QsIHdyaXR0ZW4gYnkgRS5Nb2Vua2ViZXJnLgorCitXZXJuZXIgWmltbWVybWFubgorRmFjaGhvY2hzY2h1bGUgZnVlciBUZWNobmlrIEVzc2xpbmdlbgorKEVNYWlsOiBXZXJuZXIuWmltbWVybWFubkBmaHQtZXNzbGluZ2VuLmRlKQorT2N0b2JlciwgMTk5NworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FQUEVORElYOiBTb3VyY2UgY29kZSBvZiBjZHBsYXkuYworCisvKiBUaW55IEF1ZGlvIENEIFBsYXllcgorCisgICBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMTk5NiBXZXJuZXIgWmltbWVybWFubiAoV2VybmVyLlppbW1lcm1hbm5AZmh0LWVzc2xpbmdlbi5kZSkKKworVGhpcyBwcm9ncmFtIG9yaWdpbmFsbHkgd2FzIHdyaXR0ZW4gdG8gdGVzdCB0aGUgYXVkaW8gZnVuY3Rpb25zIG9mIHRoZQorQVpURUNILkNEUk9NLWRyaXZlciwgYnV0IGl0IHNob3VsZCB3b3JrIHdpdGggZXZlcnkgQ0QtUk9NIGRyaXZlLiBCZWZvcmUgCit1c2luZyBpdCwgeW91IHNob3VsZCBzZXQgYSBzeW1saW5rIGZyb20gL2Rldi9jZHJvbSB0byB5b3VyIHJlYWwgQ0RST00KK2RldmljZS4KKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhpcyBwcm9ncmFtLgorCitIaXN0b3J5OiAgVjAuMSAgVy5aaW1tZXJtYW5uOiBGaXJzdCByZWxlYXNlLiBOb3YuIDgsIDE5OTQKKyAgICAgICAgICBWMC4yICBXLlppbW1lcm1hbm46IEVuaGFuY2VkIGZ1bmN0aW9uYWxpdHkuIE5vdi4gOSwgMTk5NAorICAgICAgICAgIFYwLjMgIFcuWmltbWVybWFubjogQWRkaXRpb25hbCBmdW5jdGlvbnMuIE5vdi4gMjgsIDE5OTQgICAgICAgICAgCisgICAgICAgICAgVjAuNCAgVy5aaW1tZXJtYW5uOiBmaXhlZCBzb21lIGJ1Z3MuIERlYy4gMTcsIDE5OTQKKyAgICAgICAgICBWMC41ICBXLlppbW1lcm1hbm46IGNsZWFuICdzY2FuZicgY29tbWFuZHMgd2l0aG91dCBjb21waWxlciB3YXJuaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmFuLiA2LCAxOTk1CisgICAgICAgICAgVjAuNiAgVy5aaW1tZXJtYW5uOiB2b2x1bWUgY29udHJvbCAoc3RpbGwgZXhwZXJpbWVudGFsKS4gSmFuLiAyNCwgMTk5NQorICAgICAgICAgIFYwLjcgIFcuWmltbWVybWFubjogcmVhZCByYXcgbW9kaWZpZWQuIEp1bHkgMjYsIDk1CisqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyNpbmNsdWRlIDxsaW51eC8uLi8uLi9kcml2ZXJzL2Nkcm9tL2F6dGNkLmg+CisKK3ZvaWQgaGVscCh2b2lkKQoreyBwcmludGYoIkF2YWlsYWJsZSBDb21tYW5kczogIFNUT1AgICAgICAgICBzICAgICAgRUpFQ1QvQ0xPU0UgIGUgICAgICAgUVVJVCAgICAgICAgIHFcbiIpOworICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgIFBMQVkgVFJBQ0sgICB0ICAgICAgUEFVU0UgICAgICAgIHAgICAgICAgUkVTVU1FICAgICAgIHJcbiIpOworICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgIE5FWFQgVFJBQ0sgICBuICAgICAgUkVQRUFUIExBU1QgIGwgICAgICAgSEVMUCAgICAgICAgIGhcbiIpOworICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgIFNVQiBDSEFOTkVMICBjICAgICAgVFJBQ0sgSU5GTyAgIGkgICAgICAgUExBWSBBVCAgICAgIGFcbiIpOworICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgIFJFQUQgICAgICAgICBkICAgICAgUkVBRCBSQVcgICAgIHcgICAgICAgVk9MVU1FICAgICAgIHZcbiIpOworfQorCitpbnQgbWFpbih2b2lkKQoreyBpbnQgaGFuZGxlOworICB1bnNpZ25lZCBjaGFyIGNvbW1hbmQ9JyAnLCBpbmk9MCwgZmlyc3Q9MSwgbGFzdD0xOworICB1bnNpZ25lZCBpbnQgY21kLCBpLGosaywgYXJnMSxhcmcyLGFyZzM7CisgIHN0cnVjdCBjZHJvbV90aSAgICAgICB0aTsKKyAgc3RydWN0IGNkcm9tX3RvY2hkciAgIHRvY0hkcjsKKyAgc3RydWN0IGNkcm9tX3N1YmNobmwgIHN1YmNobmw7CisgIHN0cnVjdCBjZHJvbV90b2NlbnRyeSBlbnRyeTsKKyAgc3RydWN0IGNkcm9tX21zZiAgICAgIG1zZjsKKyAgdW5pb24gIHsgc3RydWN0IGNkcm9tX21zZiBtc2Y7CisgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW0NEX0ZSQU1FU0laRV9SQVddOworICAgICAgICAgfSBhenQ7CisgIHN0cnVjdCBjZHJvbV92b2xjdHJsICB2b2xjdHJsOworCisgIHByaW50ZigiXG5NaW5pLUF1ZGlvIENELVBsYXllciBWMC43MiAgIChDKSAxOTk0LDE5OTUsMTk5NiAgVy5aaW1tZXJtYW5uXG4iKTsKKyAgaGFuZGxlPW9wZW4oIi9kZXYvY2Ryb20iLE9fUkRXUik7CisgIGlvY3RsKGhhbmRsZSxDRFJPTVJFU1VNRSk7CisgIAorICBpZiAoaGFuZGxlPD0wKSAKKyAgICB7IHByaW50ZigiRHJpdmUgRXJyb3I6IGFscmVhZHkgcGxheWluZywgbm8gYXVkaW8gZGlzaywgZG9vciBvcGVuXG4iKTsKKyAgICAgIHByaW50ZigiICAgICAgICAgICAgIG9yIG5vIHBlcm1pc3Npb24gKHlvdSBtdXN0IGJlIFJPT1QgaW4gb3JkZXIgdG8gdXNlIHRoaXMgcHJvZ3JhbSlcbiIpOworICAgIH0KKyAgZWxzZQorICAgIHsgaGVscCgpOworICAgICAgd2hpbGUgKDEpCisgICAgICAgIHsgcHJpbnRmKCJUeXBlIGNvbW1hbmQgKGggPSBoZWxwKTogICIpOworICAgICAgICAgIHNjYW5mKCIlcyIsJmNvbW1hbmQpOyAKKyAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpCisgICAgICAgICAgICB7IGNhc2UgJ2UnOiAgIGNtZD1DRFJPTUVKRUNUOworICAgICAgICAgICAgICAgICAgICAgICAgICBpb2N0bChoYW5kbGUsY21kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgY2FzZSAncCc6ICAgaWYgKCFpbmkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJDb21tYW5kIG5vdCBhbGxvd2VkIC0gcGxheSB0cmFjayBmaXJzdFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNtZD1DRFJPTVBBVVNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kKSkgcHJpbnRmKCJEcml2ZSBFcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ3InOiAgIGlmICghaW5pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiQ29tbWFuZCBub3QgYWxsb3dlZCAtIHBsYXkgdHJhY2sgZmlyc3RcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjbWQ9Q0RST01SRVNVTUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQpKSBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAncyc6ICAgY21kPUNEUk9NUEFVU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kKSkgcHJpbnRmKCJEcml2ZSBlcnJvciBvciBhbHJlYWR5IHN0b3BwZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ9Q0RST01TVE9QOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCkpIHByaW50ZigiRHJpdmUgZXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAndCc6ICAgY21kPUNEUk9NUkVBRFRPQ0hEUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJnRvY0hkcikpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdD10b2NIZHIuY2R0aF90cmswOworICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0PSB0b2NIZHIuY2R0aF90cmsxOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpcnN0PT0wKXx8KGZpcnN0Pmxhc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmICgiLS1jb3VsZCBub3QgcmVhZCBUT0NcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCItLWZpcnN0IHRyYWNrOiAlZCAgIC0tbGFzdCB0cmFjazogJWQgICAtLWVudGVyIHRyYWNrIG51bWJlcjogIixmaXJzdCxsYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZD1DRFJPTVBMQVlUUktJTkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWkiLCZhcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfdHJrMD1hcmcxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpLmNkdGlfdHJrMDxmaXJzdCkgdGkuY2R0aV90cmswPWZpcnN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpLmNkdGlfdHJrMD5sYXN0KSAgdGkuY2R0aV90cmswPWxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX2luZDA9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfdHJrMT1sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV9pbmQxPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCwmdGkpKSBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaT0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICduJzogICBpZiAoIWluaSsrKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmIChpb2N0bChoYW5kbGUsQ0RST01SRUFEVE9DSERSLCZ0b2NIZHIpKSBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0PXRvY0hkci5jZHRoX3RyazA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0PSB0b2NIZHIuY2R0aF90cmsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV90cmswPWZpcnN0LTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpcnN0PT0wKXx8KGZpcnN0Pmxhc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmICgiLS1jb3VsZCBub3QgcmVhZCBUT0NcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY21kPUNEUk9NUExBWVRSS0lORDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK3RpLmNkdGlfdHJrMCA+IGxhc3QpICB0aS5jZHRpX3RyazA9bGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfaW5kMD0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV90cmsxPWxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX2luZDE9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kLCZ0aSkpIHByaW50ZigiRHJpdmUgRXJyb3JcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pPTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnbCc6ICAgaWYgKCFpbmkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmIChpb2N0bChoYW5kbGUsQ0RST01SRUFEVE9DSERSLCZ0b2NIZHIpKSBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0PXRvY0hkci5jZHRoX3RyazA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0PSB0b2NIZHIuY2R0aF90cmsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV90cmswPWZpcnN0KzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpcnN0PT0wKXx8KGZpcnN0Pmxhc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmICgiLS1jb3VsZCBub3QgcmVhZCBUT0NcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY21kPUNEUk9NUExBWVRSS0lORDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLXRpLmNkdGlfdHJrMCA8IGZpcnN0KSB0aS5jZHRpX3RyazA9Zmlyc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aS5jZHRpX2luZDA9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpLmNkdGlfdHJrMT1sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGkuY2R0aV9pbmQxPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoaGFuZGxlLGNtZCwmdGkpKSBwcmludGYoIkRyaXZlIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaT0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnYyc6ICAgc3ViY2hubC5jZHNjX2Zvcm1hdD1DRFJPTV9NU0Y7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsQ0RST01TVUJDSE5MLCZzdWJjaG5sKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJEcml2ZSBFcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiQXVkaW9TdGF0dXM6JXMgICBUcmFjazolZCAgTW9kZTolZCAgIE1TRj0lZDolZDolZFxuIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViY2hubC5jZHNjX2F1ZGlvc3RhdHVzPT1DRFJPTV9BVURJT19QTEFZID8gIlBMQVlJTkciOiJOT1QgUExBWUlORyIsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViY2hubC5jZHNjX3RyayxzdWJjaG5sLmNkc2NfYWRyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjaG5sLmNkc2NfYWJzYWRkci5tc2YubWludXRlLCBzdWJjaG5sLmNkc2NfYWJzYWRkci5tc2Yuc2Vjb25kLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjaG5sLmNkc2NfYWJzYWRkci5tc2YuZnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgY2FzZSAnaSc6ICAgaWYgKCFpbmkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIkNvbW1hbmQgbm90IGFsbG93ZWQgLSBwbGF5IHRyYWNrIGZpcnN0XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNtZD1DRFJPTVJFQURUT0NFTlRSWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVHJhY2sgTm8uOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsJmFyZzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuY2R0ZV90cmFjaz1hcmcxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmNkdGVfdHJhY2s8Zmlyc3QpIGVudHJ5LmNkdGVfdHJhY2s9Zmlyc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuY2R0ZV90cmFjaz5sYXN0KSAgZW50cnkuY2R0ZV90cmFjaz1sYXN0OworCQkJICAgICAgZW50cnkuY2R0ZV9mb3JtYXQ9Q0RST01fTVNGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJmVudHJ5KSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIkRyaXZlIGVycm9yIG9yIGludmFsaWQgdHJhY2sgbm8uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIk1vZGUgJWQgVHJhY2ssIHN0YXJ0cyBhdCAlZDolZDolZFxuIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNkdGVfYWRyLGVudHJ5LmNkdGVfYWRkci5tc2YubWludXRlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuY2R0ZV9hZGRyLm1zZi5zZWNvbmQsZW50cnkuY2R0ZV9hZGRyLm1zZi5mcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ2EnOiAgIGNtZD1DRFJPTVBMQVlNU0Y7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQWRkcmVzcyAobWluOnNlYzpmcmFtZSkgICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWQ6JWQ6JWQiLCZhcmcxLCZhcmcyLCZhcmczKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXNmLmNkbXNmX21pbjAgID1hcmcxOworICAgICAgICAgICAgICAgICAgICAgICAgICBtc2YuY2Rtc2Zfc2VjMCAgPWFyZzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZi5jZG1zZl9mcmFtZTA9YXJnMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZi5jZG1zZl9zZWMwICA+IDU5KSBtc2YuY2Rtc2Zfc2VjMCAgPTU5OworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNmLmNkbXNmX2ZyYW1lMD4gNzQpIG1zZi5jZG1zZl9mcmFtZTA9NzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZi5jZG1zZl9taW4xPTYwOworICAgICAgICAgICAgICAgICAgICAgICAgICBtc2YuY2Rtc2Zfc2VjMT0wMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXNmLmNkbXNmX2ZyYW1lMT0wMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJm1zZikpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIkRyaXZlIGVycm9yIG9yIGludmFsaWQgYWRkcmVzc1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIEFaVF9QUklWQVRFX0lPQ1RMUyAvKm5vdCBzdXBwb3J0ZWQgYnkgZXZlcnkgQ0RST00gZHJpdmVyKi8KKyAgICAgICAgICAgICAgY2FzZSAnZCc6ICAgY21kPUNEUk9NUkVBRENPT0tFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzIChtaW46c2VjOmZyYW1lKSAgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZDolZDolZCIsJmFyZzEsJmFyZzIsJmFyZzMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBhenQubXNmLmNkbXNmX21pbjAgID1hcmcxOworICAgICAgICAgICAgICAgICAgICAgICAgICBhenQubXNmLmNkbXNmX3NlYzAgID1hcmcyOworICAgICAgICAgICAgICAgICAgICAgICAgICBhenQubXNmLmNkbXNmX2ZyYW1lMD1hcmczOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXp0Lm1zZi5jZG1zZl9zZWMwICA+IDU5KSBhenQubXNmLmNkbXNmX3NlYzAgID01OTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPiA3NCkgYXp0Lm1zZi5jZG1zZl9mcmFtZTA9NzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kLCZhenQubXNmKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiRHJpdmUgZXJyb3IsIGludmFsaWQgYWRkcmVzcyBvciB1bnN1cHBvcnRlZCBjb21tYW5kXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRjaGFyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8MTI4O2krKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCIlNGQ6IixpKjE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7ajwxNjtqKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIiUyeCAiLGF6dC5idWZbaSoxNitqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDtqPDE2O2orKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmIChpc2FsbnVtKGF6dC5idWZbaSoxNitqXSkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVjIixhenQuYnVmW2kqMTYral0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGs+PTIwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoInByZXNzIEVOVEVSIHRvIGNvbnRpbnVlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Y2hhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAndyc6ICAgY21kPUNEUk9NUkVBRFJBVzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzIChtaW46c2VjOmZyYW1lKSAgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZDolZDolZCIsJmFyZzEsJmFyZzIsJmFyZzMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBhenQubXNmLmNkbXNmX21pbjAgID1hcmcxOworICAgICAgICAgICAgICAgICAgICAgICAgICBhenQubXNmLmNkbXNmX3NlYzAgID1hcmcyOworICAgICAgICAgICAgICAgICAgICAgICAgICBhenQubXNmLmNkbXNmX2ZyYW1lMD1hcmczOyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhenQubXNmLmNkbXNmX3NlYzAgID4gNTkpIGF6dC5tc2YuY2Rtc2Zfc2VjMCAgPTU5OworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXp0Lm1zZi5jZG1zZl9mcmFtZTA+IDc0KSBhenQubXNmLmNkbXNmX2ZyYW1lMD03NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKGhhbmRsZSxjbWQsJmF6dCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIkRyaXZlIGVycm9yLCBpbnZhbGlkIGFkZHJlc3Mgb3IgdW5zdXBwb3J0ZWQgY29tbWFuZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGs9MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTwxNDc7aSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIiU0ZDoiLGkqMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDtqPDE2O2orKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiJTJ4ICIsYXp0LmJ1ZltpKjE2K2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0wO2o8MTY7aisrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYgKGlzYWxudW0oYXp0LmJ1ZltpKjE2K2pdKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLGF6dC5idWZbaSoxNitqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaz49MjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdldGNoYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaz0wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgICAgY2FzZSAndic6ICAgY21kPUNEUk9NVk9MQ1RSTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCItLUNoYW5uZWwgMCBMZWZ0ICAoMC0yNTUpOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwmYXJnMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiLS1DaGFubmVsIDEgUmlnaHQgKDAtMjU1KTogIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsJmFyZzIpOworICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xjdHJsLmNoYW5uZWwwPWFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbGN0cmwuY2hhbm5lbDE9YXJnMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sY3RybC5jaGFubmVsMj0wOworICAgICAgICAgICAgICAgICAgICAgICAgICB2b2xjdHJsLmNoYW5uZWwzPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpb2N0bChoYW5kbGUsY21kLCZ2b2xjdHJsKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiRHJpdmUgZXJyb3Igb3IgdW5zdXBwb3J0ZWQgY29tbWFuZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgCisgICAgICAgICAgICAgIGNhc2UgJ3EnOiAgIGlmIChjbG9zZShoYW5kbGUpKSBwcmludGYoIkRyaXZlIEVycm9yOiBDTE9TRVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgICAgIGNhc2UgJ2gnOiAgIGhlbHAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgIHByaW50ZigidW5rbm93biBjb21tYW5kXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2Nkcm9tLXN0YW5kYXJkLnRleCBiL0RvY3VtZW50YXRpb24vY2Ryb20vY2Ryb20tc3RhbmRhcmQudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjk0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2Nkcm9tLXN0YW5kYXJkLnRleApAQCAtMCwwICsxLDEwMjIgQEAKK1xkb2N1bWVudGNsYXNze2FydGljbGV9CitcZGVmXHZlcnNpb257JElkOiBjZHJvbS1zdGFuZGFyZC50ZXgsdiAxLjkgMTk5Ny8xMi8yOCAxNTo0Mjo0OSBkYXZpZCBFeHAgJH0KK1xuZXdjb21tYW5ke1xuZXdzZWN0aW9ufVsxXXtcbmV3cGFnZVxzZWN0aW9ueyMxfX0KKworXGV2ZW5zaWRlbWFyZ2luPTBwdAorXG9kZHNpZGVtYXJnaW49MHB0CitcdG9wbWFyZ2luPS1caGVhZGhlaWdodCBcYWR2YW5jZVx0b3BtYXJnaW4gYnkgLVxoZWFkc2VwCitcdGV4dHdpZHRoPTE1Ljk5Y20gXHRleHRoZWlnaHQ9MjQuNjJjbSAlIG5vcm1hbCBBNCwgMScnIG1hcmdpbgorCitcZGVmXGxpbnV4e3tcc2MgTGludXh9fQorXGRlZlxjZHJvbXt7XHNjIGNkLXJvbX19CitcZGVmXFVDRHt7XHNjIFVuaWZvcm0gY2Qtcm9tIERyaXZlcn19CitcZGVmXGNkcm9tY3t7XHR0IHtjZHJvbS5jfX19CitcZGVmXGNkcm9taHt7XHR0IHtjZHJvbS5ofX19CitcZGVmXGZve1xzbH0gICAgICAgICAgICAgICAgICAgICUgZm9yZWlnbiB3b3JkcworXGRlZlxpZXt7XGZvIGkuZS59fQorXGRlZlxlZ3t7XGZvIGUuZy59fQorCitcZXZlcnltYXRoe1xpdH0gXGV2ZXJ5ZGlzcGxheXtcaXR9CitcY2F0Y29kZSBgXF89XGFjdGl2ZSBcZGVmX3tcX1xwZW5hbHR5MTAwIH0KK1xjYXRjb2RlYFw8PVxhY3RpdmUgXGRlZjwjMT57e1xsYW5nbGVcaGJveHtccm0jMX1ccmFuZ2xlfX0KKworXGJlZ2lue2RvY3VtZW50fQorXHRpdGxle0EgXGxpbnV4XCBcY2Ryb21cIHN0YW5kYXJkfQorXGF1dGhvcntEYXZpZCB2YW4gTGVldXdlblxce1xub3JtYWxzaXplXHR0IGRhdmlkQEVsc2VXYXJlLmNpc3Ryb24ubmx9CitcXHtcZm9vdG5vdGVzaXplIHVwZGF0ZWQgYnkgRXJpayBBbmRlcnNlbiB7XHR0KGFuZGVyc2VlQGRlYmlhbi5vcmcpfX0KK1xce1xmb290bm90ZXNpemUgdXBkYXRlZCBieSBKZW5zIEF4Ym9lIHtcdHQoYXhib2VAaW1hZ2UuZGspfX19CitcZGF0ZXsxMiBNYXJjaCAxOTk5fQorCitcbWFrZXRpdGxlCisKK1xuZXdzZWN0aW9ue0ludHJvZHVjdGlvbn0KKworXGxpbnV4XCBpcyBwcm9iYWJseSB0aGUgVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCBzdXBwb3J0cwordGhlIHdpZGVzdCB2YXJpZXR5IG9mIGhhcmR3YXJlIGRldmljZXMuIFRoZSByZWFzb25zIGZvciB0aGlzIGFyZQorcHJlc3VtYWJseSAKK1xiZWdpbntpdGVtaXplfSAKK1xpdGVtIAorICBUaGUgbGFyZ2UgbGlzdCBvZiBoYXJkd2FyZSBkZXZpY2VzIGF2YWlsYWJsZSBmb3IgdGhlIG1hbnkgcGxhdGZvcm1zCisgIHRoYXQgXGxpbnV4XCBub3cgc3VwcG9ydHMgKFxpZSwgaTM4Ni1QQ3MsIFNwYXJjIFN1bnMsIGV0Yy4pCitcaXRlbSAKKyAgVGhlIG9wZW4gZGVzaWduIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBzdWNoIHRoYXQgYW55Ym9keSBjYW4gd3JpdGUgYQorICBkcml2ZXIgZm9yIFxsaW51eC4KK1xpdGVtIAorICBUaGVyZSBpcyBwbGVudHkgb2Ygc291cmNlIGNvZGUgYXJvdW5kIGFzIGV4YW1wbGVzIG9mIGhvdyB0byB3cml0ZSBhIGRyaXZlci4KK1xlbmR7aXRlbWl6ZX0KK1RoZSBvcGVubmVzcyBvZiBcbGludXgsIGFuZCB0aGUgbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgYXZhaWxhYmxlCitoYXJkd2FyZSBoYXMgYWxsb3dlZCBcbGludXhcIHRvIHN1cHBvcnQgbWFueSBkaWZmZXJlbnQgaGFyZHdhcmUgZGV2aWNlcy4KK1VuZm9ydHVuYXRlbHksIHRoZSB2ZXJ5IG9wZW5uZXNzIHRoYXQgaGFzIGFsbG93ZWQgXGxpbnV4XCB0byBzdXBwb3J0CithbGwgdGhlc2UgZGlmZmVyZW50IGRldmljZXMgaGFzIGFsc28gYWxsb3dlZCB0aGUgYmVoYXZpb3Igb2YgZWFjaAorZGV2aWNlIGRyaXZlciB0byBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIG9uZSBkZXZpY2UgdG8gYW5vdGhlci4KK1RoaXMgZGl2ZXJnZW5jZSBvZiBiZWhhdmlvciBoYXMgYmVlbiB2ZXJ5IHNpZ25pZmljYW50IGZvciBcY2Ryb21cCitkZXZpY2VzOyB0aGUgd2F5IGEgcGFydGljdWxhciBkcml2ZSByZWFjdHMgdG8gYSBgc3RhbmRhcmQnICRpb2N0bCgpJAorY2FsbCB2YXJpZXMgZ3JlYXRseSBmcm9tIG9uZSBkZXZpY2UgZHJpdmVyIHRvIGFub3RoZXIuIFRvIGF2b2lkIG1ha2luZwordGhlaXIgZHJpdmVycyB0b3RhbGx5IGluY29uc2lzdGVudCwgdGhlIHdyaXRlcnMgb2YgXGxpbnV4XCBcY2Ryb21cCitkcml2ZXJzIGdlbmVyYWxseSBjcmVhdGVkIG5ldyBkZXZpY2UgZHJpdmVycyBieSB1bmRlcnN0YW5kaW5nLCBjb3B5aW5nLAorYW5kIHRoZW4gY2hhbmdpbmcgYW4gZXhpc3Rpbmcgb25lLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIHByYWN0aWNlIGRpZCBub3QKK21haW50YWluIHVuaWZvcm0gYmVoYXZpb3IgYWNyb3NzIGFsbCB0aGUgXGxpbnV4XCBcY2Ryb21cIGRyaXZlcnMuIAorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBhbiBlZmZvcnQgdG8gZXN0YWJsaXNoIFVuaWZvcm0gYmVoYXZpb3IgYWNyb3NzCithbGwgdGhlIGRpZmZlcmVudCBcY2Ryb21cIGRldmljZSBkcml2ZXJzIGZvciBcbGludXguIFRoaXMgZG9jdW1lbnQgYWxzbworZGVmaW5lcyB0aGUgdmFyaW91cyAkaW9jdGwkcywgYW5kIGhvdyB0aGUgbG93LWxldmVsIFxjZHJvbVwgZGV2aWNlCitkcml2ZXJzIHNob3VsZCBpbXBsZW1lbnQgdGhlbS4gQ3VycmVudGx5IChhcyBvZiB0aGUgXGxpbnV4XCAyLjEuJHgkCitkZXZlbG9wbWVudCBrZXJuZWxzKSBzZXZlcmFsIGxvdy1sZXZlbCBcY2Ryb21cIGRldmljZSBkcml2ZXJzLCBpbmNsdWRpbmcKK2JvdGggSURFL0FUQVBJIGFuZCBTQ1NJLCBub3cgdXNlIHRoaXMgVW5pZm9ybSBpbnRlcmZhY2UuCisKK1doZW4gdGhlIFxjZHJvbVwgd2FzIGRldmVsb3BlZCwgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBcY2Ryb21cIGRyaXZlCithbmQgdGhlIGNvbXB1dGVyIHdhcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZHMuIEFzIGEgcmVzdWx0LCBtYW55CitkaWZmZXJlbnQgXGNkcm9tXCBpbnRlcmZhY2VzIHdlcmUgZGV2ZWxvcGVkLiBTb21lIG9mIHRoZW0gaGFkIHRoZWlyCitvd24gcHJvcHJpZXRhcnkgZGVzaWduIChTb255LCBNaXRzdW1pLCBQYW5hc29uaWMsIFBoaWxpcHMpLCBvdGhlcgorbWFudWZhY3R1cmVycyBhZG9wdGVkIGFuIGV4aXN0aW5nIGVsZWN0cmljYWwgaW50ZXJmYWNlIGFuZCBjaGFuZ2VkCit0aGUgZnVuY3Rpb25hbGl0eSAoQ3JlYXRpdmVMYWJzL1NvdW5kQmxhc3RlciwgVGVhYywgRnVuYWkpIG9yIHNpbXBseQorYWRhcHRlZCB0aGVpciBkcml2ZXMgdG8gb25lIG9yIG1vcmUgb2YgdGhlIGFscmVhZHkgZXhpc3RpbmcgZWxlY3RyaWNhbAoraW50ZXJmYWNlcyAoQXp0ZWNoLCBTYW55bywgRnVuYWksIFZlcnRvcywgTG9uZ3NoaW5lLCBPcHRpY3MgU3RvcmFnZSBhbmQKK21vc3Qgb2YgdGhlIGBOb05hbWUnIG1hbnVmYWN0dXJlcnMpLiBJbiBjYXNlcyB3aGVyZSBhIG5ldyBkcml2ZSByZWFsbHkKK2Jyb3VnaHQgaXRzIG93biBpbnRlcmZhY2Ugb3IgdXNlZCBpdHMgb3duIGNvbW1hbmQgc2V0IGFuZCBmbG93IGNvbnRyb2wKK3NjaGVtZSwgZWl0aGVyIGEgc2VwYXJhdGUgZHJpdmVyIGhhZCB0byBiZSB3cml0dGVuLCBvciBhbiBleGlzdGluZworZHJpdmVyIGhhZCB0byBiZSBlbmhhbmNlZC4gSGlzdG9yeSBoYXMgZGVsaXZlcmVkIHVzIFxjZHJvbVwgc3VwcG9ydCBmb3IKK21hbnkgb2YgdGhlc2UgZGlmZmVyZW50IGludGVyZmFjZXMuIE5vd2FkYXlzLCBhbG1vc3QgYWxsIG5ldyBcY2Ryb21cCitkcml2ZXMgYXJlIGVpdGhlciBJREUvQVRBUEkgb3IgU0NTSSwgYW5kIGl0IGlzIHZlcnkgdW5saWtlbHkgdGhhdCBhbnkKK21hbnVmYWN0dXJlciB3aWxsIGNyZWF0ZSBhIG5ldyBpbnRlcmZhY2UuIEV2ZW4gZmluZGluZyBkcml2ZXMgZm9yIHRoZQorb2xkIHByb3ByaWV0YXJ5IGludGVyZmFjZXMgaXMgZ2V0dGluZyBkaWZmaWN1bHQuCisKK1doZW4gKGluIHRoZSAxLjMuNzAncykgSSBsb29rZWQgYXQgdGhlIGV4aXN0aW5nIHNvZnR3YXJlIGludGVyZmFjZSwKK3doaWNoIHdhcyBleHByZXNzZWQgdGhyb3VnaCBcY2Ryb21oLCBpdCBhcHBlYXJlZCB0byBiZSBhIHJhdGhlciB3aWxkCitzZXQgb2YgY29tbWFuZHMgYW5kIGRhdGEgZm9ybWF0cy5cZm9vdG5vdGV7SSBjYW5ub3QgcmVjb2xsZWN0IHdoYXQKK2tlcm5lbCB2ZXJzaW9uIEkgbG9va2VkIGF0LCB0aGVuLCBwcmVzdW1hYmx5IDEuMi4xMyBhbmQgMS4zLjM0LS0tdGhlCitsYXRlc3Qga2VybmVsIHRoYXQgSSB3YXMgaW5kaXJlY3RseSBpbnZvbHZlZCBpbi59IEl0IHNlZW1lZCB0aGF0IG1hbnkKK2ZlYXR1cmVzIG9mIHRoZSBzb2Z0d2FyZSBpbnRlcmZhY2UgaGFkIGJlZW4gYWRkZWQgdG8gYWNjb21tb2RhdGUgdGhlCitjYXBhYmlsaXRpZXMgb2YgYSBwYXJ0aWN1bGFyIGRyaXZlLCBpbiBhbiB7XGZvIGFkIGhvY1wvfSBtYW5uZXIuIE1vcmUKK2ltcG9ydGFudGx5LCBpdCBhcHBlYXJlZCB0aGF0IHRoZSBiZWhhdmlvciBvZiB0aGUgYHN0YW5kYXJkJyBjb21tYW5kcword2FzIGRpZmZlcmVudCBmb3IgbW9zdCBvZiB0aGUgZGlmZmVyZW50IGRyaXZlcnM6IFxlZywgc29tZSBkcml2ZXJzCitjbG9zZSB0aGUgdHJheSBpZiBhbiAkb3BlbigpJCBjYWxsIG9jY3VycyB3aGVuIHRoZSB0cmF5IGlzIG9wZW4sIHdoaWxlCitvdGhlcnMgZG8gbm90LiBTb21lIGRyaXZlcnMgbG9jayB0aGUgZG9vciB1cG9uIG9wZW5pbmcgdGhlIGRldmljZSwgdG8KK3ByZXZlbnQgYW4gaW5jb2hlcmVudCBmaWxlIHN5c3RlbSwgYnV0IG90aGVycyBkb24ndCwgdG8gYWxsb3cgc29mdHdhcmUKK2VqZWN0aW9uLiBVbmRvdWJ0ZWRseSwgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGlmZmVyZW50IGRyaXZlcyB2YXJ5LAorYnV0IGV2ZW4gd2hlbiB0d28gZHJpdmVzIGhhdmUgdGhlIHNhbWUgY2FwYWJpbGl0eSB0aGVpciBkcml2ZXJzJworYmVoYXZpb3Igd2FzIHVzdWFsbHkgZGlmZmVyZW50LgorCitJIGRlY2lkZWQgdG8gc3RhcnQgYSBkaXNjdXNzaW9uIG9uIGhvdyB0byBtYWtlIGFsbCB0aGUgXGxpbnV4XCBcY2Ryb21cCitkcml2ZXJzIGJlaGF2ZSBtb3JlIHVuaWZvcm1seS4gSSBiZWdhbiBieSBjb250YWN0aW5nIHRoZSBkZXZlbG9wZXJzIG9mCit0aGUgbWFueSBcY2Ryb21cIGRyaXZlcnMgZm91bmQgaW4gdGhlIFxsaW51eFwga2VybmVsLiBUaGVpciByZWFjdGlvbnMKK2VuY291cmFnZWQgbWUgdG8gd3JpdGUgdGhlIFxVQ0RcIHdoaWNoIHRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8KK2Rlc2NyaWJlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFxVQ0RcIGlzIGluIHRoZSBmaWxlIFxjZHJvbWMuIFRoaXMKK2RyaXZlciBpcyBpbnRlbmRlZCB0byBiZSBhbiBhZGRpdGlvbmFsIHNvZnR3YXJlIGxheWVyIHRoYXQgc2l0cyBvbiB0b3AKK29mIHRoZSBsb3ctbGV2ZWwgZGV2aWNlIGRyaXZlcnMgZm9yIGVhY2ggXGNkcm9tXCBkcml2ZS4gQnkgYWRkaW5nIHRoaXMKK2FkZGl0aW9uYWwgbGF5ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYWxsIHRoZSBkaWZmZXJlbnQgXGNkcm9tXAorZGV2aWNlcyBiZWhhdmUge1xlbSBleGFjdGx5XC99IHRoZSBzYW1lIChpbnNvZmFyIGFzIHRoZSB1bmRlcmx5aW5nCitoYXJkd2FyZSB3aWxsIGFsbG93KS4KKworVGhlIGdvYWwgb2YgdGhlIFxVQ0RcIGlzIHtcZW0gbm90XC99IHRvIGFsaWVuYXRlIGRyaXZlciBkZXZlbG9wZXJzIHdobworaGF2ZSBub3QgeWV0IHRha2VuIHN0ZXBzIHRvIHN1cHBvcnQgdGhpcyBlZmZvcnQuIFRoZSBnb2FsIG9mIFxVQ0RcIGlzCitzaW1wbHkgdG8gZ2l2ZSBwZW9wbGUgd3JpdGluZyBhcHBsaWNhdGlvbiBwcm9ncmFtcyBmb3IgXGNkcm9tXCBkcml2ZXMKK3tcZW0gb25lXC99IFxsaW51eFwgXGNkcm9tXCBpbnRlcmZhY2Ugd2l0aCBjb25zaXN0ZW50IGJlaGF2aW9yIGZvciBhbGwKK1xjZHJvbVwgZGV2aWNlcy4gSW4gYWRkaXRpb24sIHRoaXMgYWxzbyBwcm92aWRlcyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlCitiZXR3ZWVuIHRoZSBsb3ctbGV2ZWwgZGV2aWNlIGRyaXZlciBjb2RlIGFuZCB0aGUgXGxpbnV4XCBrZXJuZWwuIENhcmUKK2lzIHRha2VuIHRoYXQgMTAwXCxcJSBjb21wYXRpYmlsaXR5IGV4aXN0cyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kCitwcm9ncmFtbWVyJ3MgaW50ZXJmYWNlIGRlZmluZWQgaW4gXGNkcm9taC4gVGhpcyBndWlkZSB3YXMgd3JpdHRlbiB0bworaGVscCBcY2Ryb21cIGRyaXZlciBkZXZlbG9wZXJzIGFkYXB0IHRoZWlyIGNvZGUgdG8gdXNlIHRoZSBcVUNEXCBjb2RlCitkZWZpbmVkIGluIFxjZHJvbWMuCisKK1BlcnNvbmFsbHksIEkgdGhpbmsgdGhhdCB0aGUgbW9zdCBpbXBvcnRhbnQgaGFyZHdhcmUgaW50ZXJmYWNlcyBhcmUKK3RoZSBJREUvQVRBUEkgZHJpdmVzIGFuZCwgb2YgY291cnNlLCB0aGUgU0NTSSBkcml2ZXMsIGJ1dCBhcyBwcmljZXMKK29mIGhhcmR3YXJlIGRyb3AgY29udGludW91c2x5LCBpdCBpcyBhbHNvIGxpa2VseSB0aGF0IHBlb3BsZSBtYXkgaGF2ZQorbW9yZSB0aGFuIG9uZSBcY2Ryb21cIGRyaXZlLCBwb3NzaWJseSBvZiBtaXhlZCB0eXBlcy4gSXQgaXMgaW1wb3J0YW50Cit0aGF0IHRoZXNlIGRyaXZlcyBiZWhhdmUgaW4gdGhlIHNhbWUgd2F5LiBJbiBEZWNlbWJlciAxOTk0LCBvbmUgb2YgdGhlCitjaGVhcGVzdCBcY2Ryb21cIGRyaXZlcyB3YXMgYSBQaGlsaXBzIGNtMjA2LCBhIGRvdWJsZS1zcGVlZCBwcm9wcmlldGFyeQorZHJpdmUuIEluIHRoZSBtb250aHMgdGhhdCBJIHdhcyBidXN5IHdyaXRpbmcgYSBcbGludXhcIGRyaXZlciBmb3IgaXQsCitwcm9wcmlldGFyeSBkcml2ZXMgYmVjYW1lIG9ic29sZXRlIGFuZCBJREUvQVRBUEkgZHJpdmVzIGJlY2FtZSB0aGUKK3N0YW5kYXJkLiBBdCB0aGUgdGltZSBvZiB0aGUgbGFzdCB1cGRhdGUgdG8gdGhpcyBkb2N1bWVudCAoTm92ZW1iZXIKKzE5OTcpIGl0IGlzIGJlY29taW5nIGRpZmZpY3VsdCB0byBldmVuIHtcZW0gZmluZH0gYW55dGhpbmcgbGVzcyB0aGFuIGEKKzE2IHNwZWVkIFxjZHJvbVwgZHJpdmUsIGFuZCAyNCBzcGVlZCBkcml2ZXMgYXJlIGNvbW1vbi4KKworXG5ld3NlY3Rpb257U3RhbmRhcmRpemluZyB0aHJvdWdoIGFub3RoZXIgc29mdHdhcmUgbGV2ZWx9CitcbGFiZWx7Y2Ryb20uY30KKworQXQgdGhlIHRpbWUgdGhpcyBkb2N1bWVudCB3YXMgY29uY2VpdmVkLCBhbGwgZHJpdmVycyBkaXJlY3RseQoraW1wbGVtZW50ZWQgdGhlIFxjZHJvbVwgJGlvY3RsKCkkIGNhbGxzIHRocm91Z2ggdGhlaXIgb3duIHJvdXRpbmVzLiBUaGlzCitsZWQgdG8gdGhlIGRhbmdlciBvZiBkaWZmZXJlbnQgZHJpdmVycyBmb3JnZXR0aW5nIHRvIGRvIGltcG9ydGFudCB0aGluZ3MKK2xpa2UgY2hlY2tpbmcgdGhhdCB0aGUgdXNlciB3YXMgZ2l2aW5nIHRoZSBkcml2ZXIgdmFsaWQgZGF0YS4gTW9yZQoraW1wb3J0YW50bHksIHRoaXMgbGVkIHRvIHRoZSBkaXZlcmdlbmNlIG9mIGJlaGF2aW9yLCB3aGljaCBoYXMgYWxyZWFkeQorYmVlbiBkaXNjdXNzZWQuCisKK0ZvciB0aGlzIHJlYXNvbiwgdGhlIFxVQ0RcIHdhcyBjcmVhdGVkIHRvIGVuZm9yY2UgY29uc2lzdGVudCBcY2Ryb21cCitkcml2ZSBiZWhhdmlvciwgYW5kIHRvIHByb3ZpZGUgYSBjb21tb24gc2V0IG9mIHNlcnZpY2VzIHRvIHRoZSB2YXJpb3VzCitsb3ctbGV2ZWwgXGNkcm9tXCBkZXZpY2UgZHJpdmVycy4gVGhlIFxVQ0RcIG5vdyBwcm92aWRlcyBhbm90aGVyCitzb2Z0d2FyZS1sZXZlbCwgdGhhdCBzZXBhcmF0ZXMgdGhlICRpb2N0bCgpJCBhbmQgJG9wZW4oKSQgaW1wbGVtZW50YXRpb24KK2Zyb20gdGhlIGFjdHVhbCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZWZmb3J0IGhhcworbWFkZSBmZXcgY2hhbmdlcyB3aGljaCB3aWxsIGFmZmVjdCBhIHVzZXIncyBhcHBsaWNhdGlvbiBwcm9ncmFtcy4gVGhlCitncmVhdGVzdCBjaGFuZ2UgaW52b2x2ZWQgbW92aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgdmFyaW91cyBsb3ctbGV2ZWwKK1xjZHJvbVwgZHJpdmVycycgaGVhZGVyIGZpbGVzIHRvIHRoZSBrZXJuZWwncyBjZHJvbSBkaXJlY3RvcnkuIFRoaXMgd2FzCitkb25lIHRvIGhlbHAgZW5zdXJlIHRoYXQgdGhlIHVzZXIgaXMgb25seSBwcmVzZW50ZWQgd2l0aCBvbmx5IG9uZSBjZHJvbQoraW50ZXJmYWNlLCB0aGUgaW50ZXJmYWNlIGRlZmluZWQgaW4gXGNkcm9taC4KKworXGNkcm9tXCBkcml2ZXMgYXJlIHNwZWNpZmljIGVub3VnaCAoXGllLCBkaWZmZXJlbnQgZnJvbSBvdGhlcgorYmxvY2stZGV2aWNlcyBzdWNoIGFzIGZsb3BweSBvciBoYXJkIGRpc2MgZHJpdmVzKSwgdG8gZGVmaW5lIGEgc2V0CitvZiBjb21tb24ge1xlbSBcY2Ryb21cIGRldmljZSBvcGVyYXRpb25zfSwgJDxjZHJvbS1kZXZpY2U+X2RvcHMkLgorVGhlc2Ugb3BlcmF0aW9ucyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGNsYXNzaWNhbCBibG9jay1kZXZpY2UgZmlsZQorb3BlcmF0aW9ucywgJDxibG9jay1kZXZpY2U+X2ZvcHMkLgorCitUaGUgcm91dGluZXMgZm9yIHRoZSBcVUNEXCBpbnRlcmZhY2UgbGV2ZWwgYXJlIGltcGxlbWVudGVkIGluIHRoZSBmaWxlCitcY2Ryb21jLiBJbiB0aGlzIGZpbGUsIHRoZSBcVUNEXCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbCBhcyBhIGJsb2NrCitkZXZpY2UgYnkgcmVnaXN0ZXJpbmcgdGhlIGZvbGxvd2luZyBnZW5lcmFsICRzdHJ1Y3RcIGZpbGVfb3BlcmF0aW9ucyQ6CiskJAorXGhhbGlnbnskIyRcIFxoZmlsJiQjJFwgXGhmaWwmJC8qJCBccm0jICQqLyRcaGZpbFxjcgorc3RydWN0JiBmaWxlX29wZXJhdGlvbnNcIGNkcm9tX2ZvcHMgPSBce1xoaWRld2lkdGhcY3IKKyAgICAgICAgJk5VTEwsICAgICAgICAgICAgICAgICAgJiBsc2VlayBcY3IKKyAgICAgICAgJmJsb2NrX3JlYWQsICAgICAgICAgICAgJiByZWFkLS0tZ2VuZXJhbCBibG9jay1kZXYgcmVhZCBcY3IKKyAgICAgICAgJmJsb2NrX3dyaXRlLCAgICAgICAgICAgJiB3cml0ZS0tLWdlbmVyYWwgYmxvY2stZGV2IHdyaXRlIFxjcgorICAgICAgICAmTlVMTCwgICAgICAgICAgICAgICAgICAmIHJlYWRkaXIgXGNyCisgICAgICAgICZOVUxMLCAgICAgICAgICAgICAgICAgICYgc2VsZWN0IFxjcgorICAgICAgICAmY2Ryb21faW9jdGwsICAgICAgICAgICAmIGlvY3RsIFxjcgorICAgICAgICAmTlVMTCwgICAgICAgICAgICAgICAgICAmIG1tYXAgXGNyCisgICAgICAgICZjZHJvbV9vcGVuLCAgICAgICAgICAgICYgb3BlbiBcY3IKKyAgICAgICAgJmNkcm9tX3JlbGVhc2UsICAgICAgICAgJiByZWxlYXNlIFxjcgorICAgICAgICAmTlVMTCwgICAgICAgICAgICAgICAgICAmIGZzeW5jIFxjcgorICAgICAgICAmTlVMTCwgICAgICAgICAgICAgICAgICAmIGZhc3luYyBcY3IKKyAgICAgICAgJmNkcm9tX21lZGlhX2NoYW5nZWQsICAgJiBtZWRpYSBjaGFuZ2UgXGNyCisgICAgICAgICZOVUxMICAgICAgICAgICAgICAgICAgICYgcmV2YWxpZGF0ZSBcY3IKK1x9O1xjcgorfQorJCQgCisKK0V2ZXJ5IGFjdGl2ZSBcY2Ryb21cIGRldmljZSBzaGFyZXMgdGhpcyAkc3RydWN0JC4gVGhlIHJvdXRpbmVzCitkZWNsYXJlZCBhYm92ZSBhcmUgYWxsIGltcGxlbWVudGVkIGluIFxjZHJvbWMsIHNpbmNlIHRoaXMgZmlsZSBpcyB0aGUKK3BsYWNlIHdoZXJlIHRoZSBiZWhhdmlvciBvZiBhbGwgXGNkcm9tLWRldmljZXMgaXMgZGVmaW5lZCBhbmQKK3N0YW5kYXJkaXplZC4gVGhlIGFjdHVhbCBpbnRlcmZhY2UgdG8gdGhlIHZhcmlvdXMgdHlwZXMgb2YgXGNkcm9tXCAKK2hhcmR3YXJlIGlzIHN0aWxsIHBlcmZvcm1lZCBieSB2YXJpb3VzIGxvdy1sZXZlbCBcY2Ryb20tZGV2aWNlCitkcml2ZXJzLiBUaGVzZSByb3V0aW5lcyBzaW1wbHkgaW1wbGVtZW50IGNlcnRhaW4ge1xlbSBjYXBhYmlsaXRpZXNcL30KK3RoYXQgYXJlIGNvbW1vbiB0byBhbGwgXGNkcm9tXCAoYW5kIHJlYWxseSwgYWxsIHJlbW92YWJsZS1tZWRpYQorZGV2aWNlcykuCisKK1JlZ2lzdHJhdGlvbiBvZiBhIGxvdy1sZXZlbCBcY2Ryb21cIGRldmljZSBkcml2ZXIgaXMgbm93IGRvbmUgdGhyb3VnaAordGhlIGdlbmVyYWwgcm91dGluZXMgaW4gXGNkcm9tYywgbm90IHRocm91Z2ggdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0KKyhWRlMpIGFueSBtb3JlLiBUaGUgaW50ZXJmYWNlIGltcGxlbWVudGVkIGluIFxjZHJvbWNcIGlzIGNhcnJpZWQgb3V0Cit0aHJvdWdoIHR3byBnZW5lcmFsIHN0cnVjdHVyZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZQorY2FwYWJpbGl0aWVzIG9mIHRoZSBkcml2ZXIsIGFuZCB0aGUgc3BlY2lmaWMgZHJpdmVzIG9uIHdoaWNoIHRoZQorZHJpdmVyIG9wZXJhdGVzLiBUaGUgc3RydWN0dXJlcyBhcmU6CitcYmVnaW57ZGVzY3JpcHRpb259CitcaXRlbVskY2Ryb21fZGV2aWNlX29wcyRdIAorICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG93LWxldmVsIGRyaXZlciBmb3IgYQorICBcY2Ryb21cIGRldmljZS4gVGhpcyBzdHJ1Y3R1cmUgaXMgY29uY2VwdHVhbGx5IGNvbm5lY3RlZCB0byB0aGUgbWFqb3IKKyAgbnVtYmVyIG9mIHRoZSBkZXZpY2UgKGFsdGhvdWdoIHNvbWUgZHJpdmVycyBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgbWFqb3IgbnVtYmVycywgYXMgaXMgdGhlIGNhc2UgZm9yIHRoZSBJREUgZHJpdmVyKS4KK1xpdGVtWyRjZHJvbV9kZXZpY2VfaW5mbyRdIAorICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgXGNkcm9tXCBkcml2ZSwKKyAgc3VjaCBhcyBpdHMgZGV2aWNlIG5hbWUsIHNwZWVkLCBldGMuIFRoaXMgc3RydWN0dXJlIGlzIGNvbmNlcHR1YWxseQorICBjb25uZWN0ZWQgdG8gdGhlIG1pbm9yIG51bWJlciBvZiB0aGUgZGV2aWNlLgorXGVuZHtkZXNjcmlwdGlvbn0KKworUmVnaXN0ZXJpbmcgYSBwYXJ0aWN1bGFyIFxjZHJvbVwgZHJpdmUgd2l0aCB0aGUgXFVDRFwgaXMgZG9uZSBieSB0aGUKK2xvdy1sZXZlbCBkZXZpY2UgZHJpdmVyIHRob3VnaCBhIGNhbGwgdG86CiskJHJlZ2lzdGVyX2Nkcm9tKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiA8ZGV2aWNlPl9pbmZvKSAgCiskJAorVGhlIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUsICQ8ZGV2aWNlPl9pbmZvJCwgY29udGFpbnMgYWxsIHRoZQoraW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUga2VybmVsIHRvIGludGVyZmFjZSB3aXRoIHRoZSBsb3ctbGV2ZWwKK1xjZHJvbVwgZGV2aWNlIGRyaXZlci4gT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBlbnRyaWVzIGluIHRoaXMKK3N0cnVjdHVyZSBpcyBhIHBvaW50ZXIgdG8gdGhlICRjZHJvbV9kZXZpY2Vfb3BzJCBzdHJ1Y3R1cmUgb2YgdGhlCitsb3ctbGV2ZWwgZHJpdmVyLgorCitUaGUgZGV2aWNlIG9wZXJhdGlvbnMgc3RydWN0dXJlLCAkY2Ryb21fZGV2aWNlX29wcyQsIGNvbnRhaW5zIGEgbGlzdAorb2YgcG9pbnRlcnMgdG8gdGhlIGZ1bmN0aW9ucyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGxvdy1sZXZlbAorZGV2aWNlIGRyaXZlci4gV2hlbiBcY2Ryb21jXCBhY2Nlc3NlcyBhIFxjZHJvbVwgZGV2aWNlLCBpdCBkb2VzIGl0Cit0aHJvdWdoIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBzdHJ1Y3R1cmUuIEl0IGlzIGltcG9zc2libGUgdG8ga25vdyBhbGwKK3RoZSBjYXBhYmlsaXRpZXMgb2YgZnV0dXJlIFxjZHJvbVwgZHJpdmVzLCBzbyBpdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMKK2xpc3QgbWF5IG5lZWQgdG8gYmUgZXhwYW5kZWQgZnJvbSB0aW1lIHRvIHRpbWUgYXMgbmV3IHRlY2hub2xvZ2llcyBhcmUKK2RldmVsb3BlZC4gRm9yIGV4YW1wbGUsIENELVIgYW5kIENELVIvVyBkcml2ZXMgYXJlIGJlZ2lubmluZyB0byBiZWNvbWUKK3BvcHVsYXIsIGFuZCBzdXBwb3J0IHdpbGwgc29vbiBuZWVkIHRvIGJlIGFkZGVkIGZvciB0aGVtLiBGb3Igbm93LCB0aGUKK2N1cnJlbnQgJHN0cnVjdCQgaXM6CiskJAorXGhhbGlnbnskIyRcIFxoZmlsJiQjJFwgXGhmaWwmXGhib3ggdG8gMTBlbXskIyRcaHNzfSYKKyAgJC8qJCBccm0jICQqLyRcaGZpbFxjcgorc3RydWN0JiBjZHJvbV9kZXZpY2Vfb3BzXCBceyBcaGlkZXdpZHRoXGNyCisgICZpbnQmICgqIG9wZW4pKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KVxjcgorICAmdm9pZCYgKCogcmVsZWFzZSkoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqKTtcY3IgCisgICZpbnQmICgqIGRyaXZlX3N0YXR1cykoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpO1xjciAgICAgCisgICZpbnQmICgqIG1lZGlhX2NoYW5nZWQpKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTtcY3IgCisgICZpbnQmICgqIHRyYXlfbW92ZSkoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqLCBpbnQpO1xjcgorICAmaW50JiAoKiBsb2NrX2Rvb3IpKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiwgaW50KTtcY3IKKyAgJmludCYgKCogc2VsZWN0X3NwZWVkKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIGludCk7XGNyCisgICZpbnQmICgqIHNlbGVjdF9kaXNjKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIGludCk7XGNyCisgICZpbnQmICgqIGdldF9sYXN0X3Nlc3Npb24pIChzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIAorICAgICAgICBzdHJ1Y3RcIGNkcm9tX211bHRpc2Vzc2lvbiAqe30pO1xjcgorICAmaW50JiAoKiBnZXRfbWNuKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIHN0cnVjdFwgY2Ryb21fbWNuICp7fSk7XGNyCisgICZpbnQmICgqIHJlc2V0KShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICopO1xjcgorICAmaW50JiAoKiBhdWRpb19pb2N0bCkoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqLCB1bnNpZ25lZFwgaW50LCAKKyAgICAgICAgdm9pZCAqe30pO1xjciAKKyAgJmludCYgKCogZGV2X2lvY3RsKShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICosIHVuc2lnbmVkXCBpbnQsIAorICAgICAgICB1bnNpZ25lZFwgbG9uZyk7XGNyCitcbm9hbGlnbntcbWVkc2tpcH0KKyAgJmNvbnN0XCBpbnQmIGNhcGFiaWxpdHk7JiBjYXBhYmlsaXR5IGZsYWdzIFxjcgorICAmaW50JiBuX21pbm9yczsmIG51bWJlciBvZiBhY3RpdmUgbWlub3IgZGV2aWNlcyBcY3IKK1x9O1xjcgorfQorJCQKK1doZW4gYSBsb3ctbGV2ZWwgZGV2aWNlIGRyaXZlciBpbXBsZW1lbnRzIG9uZSBvZiB0aGVzZSBjYXBhYmlsaXRpZXMsCitpdCBzaG91bGQgYWRkIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGlzICRzdHJ1Y3QkLiBXaGVuIGEgcGFydGljdWxhcgorZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkLCBob3dldmVyLCB0aGlzICRzdHJ1Y3QkIHNob3VsZCBjb250YWluIGEKK05VTEwgaW5zdGVhZC4gVGhlICRjYXBhYmlsaXR5JCBmbGFncyBzcGVjaWZ5IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlCitcY2Ryb21cIGhhcmR3YXJlIGFuZC9vciBsb3ctbGV2ZWwgXGNkcm9tXCBkcml2ZXIgd2hlbiBhIFxjZHJvbVwgZHJpdmUKK2lzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgXFVDRC4gVGhlIHZhbHVlICRuX21pbm9ycyQgc2hvdWxkIGJlIGEgcG9zaXRpdmUKK3ZhbHVlIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBtaW5vciBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieQordGhlIGxvdy1sZXZlbCBkZXZpY2UgZHJpdmVyLCBub3JtYWxseX4xLiBBbHRob3VnaCB0aGVzZSB0d28gdmFyaWFibGVzCithcmUgYGluZm9ybWF0aXZlJyByYXRoZXIgdGhhbiBgb3BlcmF0aW9uYWwsJyB0aGV5IGFyZSBpbmNsdWRlZCBpbgorJGNkcm9tX2RldmljZV9vcHMkIGJlY2F1c2UgdGhleSBkZXNjcmliZSB0aGUgY2FwYWJpbGl0eSBvZiB0aGUge1xlbQorZHJpdmVyXC99IHJhdGhlciB0aGFuIHRoZSB7XGVtIGRyaXZlfS4gTm9tZW5jbGF0dXJlIGhhcyBhbHdheXMgYmVlbgorZGlmZmljdWx0IGluIGNvbXB1dGVyIHByb2dyYW1taW5nLgorCitOb3RlIHRoYXQgbW9zdCBmdW5jdGlvbnMgaGF2ZSBmZXdlciBwYXJhbWV0ZXJzIHRoYW4gdGhlaXIKKyRibGtkZXZfZm9wcyQgY291bnRlcnBhcnRzLiBUaGlzIGlzIGJlY2F1c2UgdmVyeSBsaXR0bGUgb2YgdGhlCitpbmZvcm1hdGlvbiBpbiB0aGUgc3RydWN0dXJlcyAkaW5vZGUkIGFuZCAkZmlsZSQgaXMgdXNlZC4gRm9yIG1vc3QKK2RyaXZlcnMsIHRoZSBtYWluIHBhcmFtZXRlciBpcyB0aGUgJHN0cnVjdCQgJGNkcm9tX2RldmljZV9pbmZvJCwgZnJvbQord2hpY2ggdGhlIG1ham9yIGFuZCBtaW5vciBudW1iZXIgY2FuIGJlIGV4dHJhY3RlZC4gKE1vc3QgbG93LWxldmVsCitcY2Ryb21cIGRyaXZlcnMgZG9uJ3QgZXZlbiBsb29rIGF0IHRoZSBtYWpvciBhbmQgbWlub3IgbnVtYmVyIHRob3VnaCwKK3NpbmNlIG1hbnkgb2YgdGhlbSBvbmx5IHN1cHBvcnQgb25lIGRldmljZS4pIFRoaXMgd2lsbCBiZSBhdmFpbGFibGUKK3Rocm91Z2ggJGRldiQgaW4gJGNkcm9tX2RldmljZV9pbmZvJCBkZXNjcmliZWQgYmVsb3cuCisKK1RoZSBkcml2ZS1zcGVjaWZpYywgbWlub3ItbGlrZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlZ2lzdGVyZWQgd2l0aAorXGNkcm9tYywgY3VycmVudGx5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorJCQKK1xoYWxpZ257JCMkXCBcaGZpbCYkIyRcIFxoZmlsJlxoYm94IHRvIDEwZW17JCMkXGhzc30mCisgICQvKiQgXHJtIyAkKi8kXGhmaWxcY3IKK3N0cnVjdCYgY2Ryb21fZGV2aWNlX2luZm9cIFx7IFxoaWRld2lkdGhcY3IKKyAgJiBzdHJ1Y3RcIGNkcm9tX2RldmljZV9vcHMgKiYgb3BzOyYgZGV2aWNlIG9wZXJhdGlvbnMgZm9yIHRoaXMgbWFqb3JcY3IKKyAgJiBzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvIComIG5leHQ7JiBuZXh0IGRldmljZV9pbmZvIGZvciB0aGlzIG1ham9yXGNyCisgICYgdm9pZCAqJiAgaGFuZGxlOyYgZHJpdmVyLWRlcGVuZGVudCBkYXRhXGNyCitcbm9hbGlnbntcbWVkc2tpcH0KKyAgJiBrZGV2X3QmICBkZXY7JiBkZXZpY2UgbnVtYmVyIChpbmNvcnBvcmF0ZXMgbWlub3IpXGNyCisgICYgaW50JiBtYXNrOyYgbWFzayBvZiBjYXBhYmlsaXR5OiBkaXNhYmxlcyB0aGVtIFxjcgorICAmIGludCYgc3BlZWQ7JiBtYXhpbXVtIHNwZWVkIGZvciByZWFkaW5nIGRhdGEgXGNyCisgICYgaW50JiBjYXBhY2l0eTsmIG51bWJlciBvZiBkaXNjcyBpbiBhIGp1a2Vib3ggXGNyCitcbm9hbGlnbntcbWVkc2tpcH0KKyAgJmludCYgb3B0aW9ucyA6IDMwOyYgb3B0aW9ucyBmbGFncyBcY3IKKyAgJnVuc2lnbmVkJiBtY19mbGFncyA6IDI7JiBtZWRpYS1jaGFuZ2UgYnVmZmVyIGZsYWdzIFxjcgorICAmIGludCYgdXNlX2NvdW50OyYgbnVtYmVyIG9mIHRpbWVzIGRldmljZSBpcyBvcGVuZWRcY3IKKyAgJiBjaGFyJiBuYW1lWzIwXTsmIG5hbWUgb2YgdGhlIGRldmljZSB0eXBlXGNyCitcfVxjcgorfSQkCitVc2luZyB0aGlzICRzdHJ1Y3QkLCBhIGxpbmtlZCBsaXN0IG9mIHRoZSByZWdpc3RlcmVkIG1pbm9yIGRldmljZXMgaXMKK2J1aWx0LCB1c2luZyB0aGUgJG5leHQkIGZpZWxkLiBUaGUgZGV2aWNlIG51bWJlciwgdGhlIGRldmljZSBvcGVyYXRpb25zCitzdHJ1Y3QgYW5kIHNwZWNpZmljYXRpb25zIG9mIHByb3BlcnRpZXMgb2YgdGhlIGRyaXZlIGFyZSBzdG9yZWQgaW4gdGhpcworc3RydWN0dXJlLgorCitUaGUgJG1hc2skIGZsYWdzIGNhbiBiZSB1c2VkIHRvIG1hc2sgb3V0IHNvbWUgb2YgdGhlIGNhcGFiaWxpdGllcyBsaXN0ZWQKK2luICRvcHNcdG8gY2FwYWJpbGl0eSQsIGlmIGEgc3BlY2lmaWMgZHJpdmUgZG9lc24ndCBzdXBwb3J0IGEgZmVhdHVyZQorb2YgdGhlIGRyaXZlci4gVGhlIHZhbHVlICRzcGVlZCQgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGhlYWQtcmF0ZSBvZiB0aGUKK2RyaXZlLCBtZWFzdXJlZCBpbiB1bml0cyBvZiBub3JtYWwgYXVkaW8gc3BlZWQgKDE3Nlwsa0Ivc2VjIHJhdyBkYXRhIG9yCisxNTBcLGtCL3NlYyBmaWxlIHN5c3RlbSBkYXRhKS4gVGhlIHZhbHVlICRuX2Rpc2NzJCBzaG91bGQgcmVmbGVjdCB0aGUKK251bWJlciBvZiBkaXNjcyB0aGUgZHJpdmUgY2FuIGhvbGQgc2ltdWx0YW5lb3VzbHksIGlmIGl0IGlzIGRlc2lnbmVkCithcyBhIGp1a2UtYm94LCBvciBvdGhlcndpc2V+MS4gVGhlIHBhcmFtZXRlcnMgYXJlIGRlY2xhcmVkICRjb25zdCQKK2JlY2F1c2UgdGhleSBkZXNjcmliZSBwcm9wZXJ0aWVzIG9mIHRoZSBkcml2ZSwgd2hpY2ggZG9uJ3QgY2hhbmdlIGFmdGVyCityZWdpc3RyYXRpb24uCisKK0EgZmV3IHJlZ2lzdGVycyBjb250YWluIHZhcmlhYmxlcyBsb2NhbCB0byB0aGUgXGNkcm9tXCBkcml2ZS4gVGhlCitmbGFncyAkb3B0aW9ucyQgYXJlIHVzZWQgdG8gc3BlY2lmeSBob3cgdGhlIGdlbmVyYWwgXGNkcm9tXCByb3V0aW5lcworc2hvdWxkIGJlaGF2ZS4gVGhlc2UgdmFyaW91cyBmbGFncyByZWdpc3RlcnMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoCitmbGV4aWJpbGl0eSB0byBhZGFwdCB0byB0aGUgZGlmZmVyZW50IHVzZXJzJyB3aXNoZXMgKGFuZCB7XGVtIG5vdFwvfSB0aGUKK2BhcmJpdHJhcnknIHdpc2hlcyBvZiB0aGUgYXV0aG9yIG9mIHRoZSBsb3ctbGV2ZWwgZGV2aWNlIGRyaXZlciwgYXMgaXMKK3RoZSBjYXNlIGluIHRoZSBvbGQgc2NoZW1lKS4gVGhlIHJlZ2lzdGVyICRtY19mbGFncyQgaXMgdXNlZCB0byBidWZmZXIKK3RoZSBpbmZvcm1hdGlvbiBmcm9tICRtZWRpYV9jaGFuZ2VkKCkkIHRvIHR3byBzZXBhcmF0ZSBxdWV1ZXMuIE90aGVyCitkYXRhIHRoYXQgaXMgc3BlY2lmaWMgdG8gYSBtaW5vciBkcml2ZSwgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggJGhhbmRsZSQsCit3aGljaCBjYW4gcG9pbnQgdG8gYSBkYXRhIHN0cnVjdHVyZSBzcGVjaWZpYyB0byB0aGUgbG93LWxldmVsIGRyaXZlci4KK1RoZSBmaWVsZHMgJHVzZV9jb3VudCQsICRuZXh0JCwgJG9wdGlvbnMkIGFuZCAkbWNfZmxhZ3MkIG5lZWQgbm90IGJlCitpbml0aWFsaXplZC4KKworVGhlIGludGVybWVkaWF0ZSBzb2Z0d2FyZSBsYXllciB0aGF0IFxjZHJvbWNcIGZvcm1zIHdpbGwgcGVyZm9ybSBzb21lCithZGRpdGlvbmFsIGJvb2trZWVwaW5nLiBUaGUgdXNlIGNvdW50IG9mIHRoZSBkZXZpY2UgKHRoZSBudW1iZXIgb2YKK3Byb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIGRldmljZSBvcGVuZWQpIGlzIHJlZ2lzdGVyZWQgaW4gJHVzZV9jb3VudCQuIFRoZQorZnVuY3Rpb24gJGNkcm9tX2lvY3RsKCkkIHdpbGwgdmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSB1c2VyLW1lbW9yeSByZWdpb25zCitmb3IgcmVhZCBhbmQgd3JpdGUsIGFuZCBpbiBjYXNlIGEgbG9jYXRpb24gb24gdGhlIENEIGlzIHRyYW5zZmVycmVkLAoraXQgd2lsbCBgc2FuaXRpemUnIHRoZSBmb3JtYXQgYnkgbWFraW5nIHJlcXVlc3RzIHRvIHRoZSBsb3ctbGV2ZWwKK2RyaXZlcnMgaW4gYSBzdGFuZGFyZCBmb3JtYXQsIGFuZCB0cmFuc2xhdGluZyBhbGwgZm9ybWF0cyBiZXR3ZWVuIHRoZQordXNlci1zb2Z0d2FyZSBhbmQgbG93IGxldmVsIGRyaXZlcnMuIFRoaXMgcmVsaWV2ZXMgbXVjaCBvZiB0aGUgZHJpdmVycycKK21lbW9yeSBjaGVja2luZyBhbmQgZm9ybWF0IGNoZWNraW5nIGFuZCB0cmFuc2xhdGlvbi4gQWxzbywgdGhlIG5lY2Vzc2FyeQorc3RydWN0dXJlcyB3aWxsIGJlIGRlY2xhcmVkIG9uIHRoZSBwcm9ncmFtIHN0YWNrLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZ1bmN0aW9ucyBzaG91bGQgYmUgYXMgZGVmaW5lZCBpbiB0aGUKK2ZvbGxvd2luZyBzZWN0aW9ucy4gVHdvIGZ1bmN0aW9ucyB7XGVtIG11c3RcL30gYmUgaW1wbGVtZW50ZWQsIG5hbWVseQorJG9wZW4oKSQgYW5kICRyZWxlYXNlKCkkLiBPdGhlciBmdW5jdGlvbnMgbWF5IGJlIG9taXR0ZWQsIHRoZWlyCitjb3JyZXNwb25kaW5nIGNhcGFiaWxpdHkgZmxhZ3Mgd2lsbCBiZSBjbGVhcmVkIHVwb24gcmVnaXN0cmF0aW9uLgorR2VuZXJhbGx5LCBhIGZ1bmN0aW9uIHJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSBvbiBlcnJvci4gQQorZnVuY3Rpb24gY2FsbCBzaG91bGQgcmV0dXJuIG9ubHkgYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzIGNvbXBsZXRlZCwgYnV0IG9mCitjb3Vyc2Ugd2FpdGluZyBmb3IgdGhlIGRldmljZSBzaG91bGQgbm90IHVzZSBwcm9jZXNzb3IgdGltZS4KKworXHN1YnNlY3Rpb257JEludFwgb3BlbihzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpLCBpbnRcIHB1cnBvc2UpJH0KKworJE9wZW4oKSQgc2hvdWxkIHRyeSB0byBvcGVuIHRoZSBkZXZpY2UgZm9yIGEgc3BlY2lmaWMgJHB1cnBvc2UkLCB3aGljaAorY2FuIGJlIGVpdGhlcjoKK1xiZWdpbntpdGVtaXplfQorXGl0ZW1bMF0gT3BlbiBmb3IgcmVhZGluZyBkYXRhLCBhcyBkb25lIGJ5IHtcdHQge21vdW50KCl9fSAoMiksIG9yIHRoZQordXNlciBjb21tYW5kcyB7XHR0IHtkZH19IG9yIHtcdHQge2NhdH19LiAgCitcaXRlbVsxXSBPcGVuIGZvciAkaW9jdGwkIGNvbW1hbmRzLCBhcyBkb25lIGJ5IGF1ZGlvLUNEIHBsYXlpbmcKK3Byb2dyYW1zLgorXGVuZHtpdGVtaXplfQorTm90aWNlIHRoYXQgYW55IHN0cmF0ZWdpYyBjb2RlIChjbG9zaW5nIHRyYXkgdXBvbiAkb3BlbigpJCwgZXRjLilcIGlzCitkb25lIGJ5IHRoZSBjYWxsaW5nIHJvdXRpbmUgaW4gXGNkcm9tYywgc28gdGhlIGxvdy1sZXZlbCByb3V0aW5lCitzaG91bGQgb25seSBiZSBjb25jZXJuZWQgd2l0aCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIHN1Y2ggYXMgc3Bpbm5pbmcKK3VwIHRoZSBkaXNjLCBldGMuICUgYW5kIGRldmljZS11c2UgY291bnQKKworCitcc3Vic2VjdGlvbnskVm9pZFwgcmVsZWFzZShzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpKSR9CisKKworRGV2aWNlLXNwZWNpZmljIGFjdGlvbnMgc2hvdWxkIGJlIHRha2VuIHN1Y2ggYXMgc3Bpbm5pbmcgZG93biB0aGUgZGV2aWNlLgorSG93ZXZlciwgc3RyYXRlZ2ljIGFjdGlvbnMgc3VjaCBhcyBlamVjdGlvbiBvZiB0aGUgdHJheSwgb3IgdW5sb2NraW5nCit0aGUgZG9vciwgc2hvdWxkIGJlIGxlZnQgb3ZlciB0byB0aGUgZ2VuZXJhbCByb3V0aW5lICRjZHJvbV9yZWxlYXNlKCkkLgorVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiByZXR1cm5pbmcgdHlwZSAkdm9pZCQuCisKK1xzdWJzZWN0aW9ueyRJbnRcIGRyaXZlX3N0YXR1cyhzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpLCBpbnRcIHNsb3RfbnIpJH0KK1xsYWJlbHtkcml2ZSBzdGF0dXN9CisKK1RoZSBmdW5jdGlvbiAkZHJpdmVfc3RhdHVzJCwgaWYgaW1wbGVtZW50ZWQsIHNob3VsZCBwcm92aWRlCitpbmZvcm1hdGlvbiBvbiB0aGUgc3RhdHVzIG9mIHRoZSBkcml2ZSAobm90IHRoZSBzdGF0dXMgb2YgdGhlIGRpc2MsCit3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBpbiB0aGUgZHJpdmUpLiBJZiB0aGUgZHJpdmUgaXMgbm90IGEgY2hhbmdlciwKKyRzbG90X25yJCBzaG91bGQgYmUgaWdub3JlZC4gSW4gXGNkcm9taFwgdGhlIHBvc3NpYmlsaXRpZXMgYXJlIGxpc3RlZDogCiskJAorXGhhbGlnbnskIyRcIFxoZmlsJiQvKiQgXHJtIyAkKi8kXGhmaWxcY3IKK0NEU19OT19JTkZPJiBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGVcY3IKK0NEU19OT19ESVNDJiBubyBkaXNjIGlzIGluc2VydGVkLCB0cmF5IGlzIGNsb3NlZFxjcgorQ0RTX1RSQVlfT1BFTiYgdHJheSBpcyBvcGVuZWRcY3IKK0NEU19EUklWRV9OT1RfUkVBRFkmIHNvbWV0aGluZyBpcyB3cm9uZywgdHJheSBpcyBtb3Zpbmc/XGNyCitDRFNfRElTQ19PSyYgYSBkaXNjIGlzIGxvYWRlZCBhbmQgZXZlcnl0aGluZyBpcyBmaW5lXGNyCit9CiskJAorCitcc3Vic2VjdGlvbnskSW50XCBtZWRpYV9jaGFuZ2VkKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIGludFwgZGlzY19ucikkfQorCitUaGlzIGZ1bmN0aW9uIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gaW4gJHN0cnVjdFwgCitmaWxlX29wZXJhdGlvbnMkLiBJdCByZXR1cm5zIDEgaWYgdGhlIG1lZGl1bSBvZiB0aGUgZGV2aWNlICRjZGlcdG8KK2RldiQgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCwgYW5kIDAgb3RoZXJ3aXNlLiBUaGUgcGFyYW1ldGVyCiskZGlzY19uciQgaWRlbnRpZmllcyBhIHNwZWNpZmljIHNsb3QgaW4gYSBqdWtlLWJveCwgaXQgc2hvdWxkIGJlCitpZ25vcmVkIGZvciBzaW5nbGUtZGlzYyBkcml2ZXMuICBOb3RlIHRoYXQgYnkgYHJlLXJvdXRpbmcnIHRoaXMKK2Z1bmN0aW9uIHRocm91Z2ggJGNkcm9tX21lZGlhX2NoYW5nZWQoKSQsIHdlIGNhbiBpbXBsZW1lbnQgc2VwYXJhdGUKK3F1ZXVlcyBmb3IgdGhlIFZGUyBhbmQgYSBuZXcgJGlvY3RsKCkkIGZ1bmN0aW9uIHRoYXQgY2FuIHJlcG9ydCBkZXZpY2UKK2NoYW5nZXMgdG8gc29mdHdhcmUgKFxlZywgYW4gYXV0by1tb3VudGluZyBkYWVtb24pLgorCitcc3Vic2VjdGlvbnskSW50XCB0cmF5X21vdmUoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgaW50XCBwb3NpdGlvbikkfQorCitUaGlzIGZ1bmN0aW9uLCBpZiBpbXBsZW1lbnRlZCwgc2hvdWxkIGNvbnRyb2wgdGhlIHRyYXkgbW92ZW1lbnQuIChObworb3RoZXIgZnVuY3Rpb24gc2hvdWxkIGNvbnRyb2wgdGhpcy4pIFRoZSBwYXJhbWV0ZXIgJHBvc2l0aW9uJCBjb250cm9scwordGhlIGRlc2lyZWQgZGlyZWN0aW9uIG9mIG1vdmVtZW50OgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbVswXSBDbG9zZSB0cmF5CitcaXRlbVsxXSBPcGVuIHRyYXkKK1xlbmR7aXRlbWl6ZX0KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyAwIHVwb24gc3VjY2VzcywgYW5kIGEgbm9uLXplcm8gdmFsdWUgdXBvbgorZXJyb3IuIE5vdGUgdGhhdCBpZiB0aGUgdHJheSBpcyBhbHJlYWR5IGluIHRoZSBkZXNpcmVkIHBvc2l0aW9uLCBubworYWN0aW9uIG5lZWQgYmUgdGFrZW4sIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSAwLiAKKworXHN1YnNlY3Rpb257JEludFwgbG9ja19kb29yKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIGludFwgbG9jaykkfQorCitUaGlzIGZ1bmN0aW9uIChhbmQgbm8gb3RoZXIgY29kZSkgY29udHJvbHMgbG9ja2luZyBvZiB0aGUgZG9vciwgaWYgdGhlCitkcml2ZSBhbGxvd3MgdGhpcy4gVGhlIHZhbHVlIG9mICRsb2NrJCBjb250cm9scyB0aGUgZGVzaXJlZCBsb2NraW5nCitzdGF0ZToKK1xiZWdpbntpdGVtaXplfQorXGl0ZW1bMF0gVW5sb2NrIGRvb3IsIG1hbnVhbCBvcGVuaW5nIGlzIGFsbG93ZWQKK1xpdGVtWzFdIExvY2sgZG9vciwgdHJheSBjYW5ub3QgYmUgZWplY3RlZCBtYW51YWxseQorXGVuZHtpdGVtaXplfQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCBhbmQgYSBub24temVybyB2YWx1ZSB1cG9uCitlcnJvci4gTm90ZSB0aGF0IGlmIHRoZSBkb29yIGlzIGFscmVhZHkgaW4gdGhlIHJlcXVlc3RlZCBzdGF0ZSwgbm8KK2FjdGlvbiBuZWVkIGJlIHRha2VuLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgMC4gCisKK1xzdWJzZWN0aW9ueyRJbnRcIHNlbGVjdF9zcGVlZChzdHJ1Y3RcIGNkcm9tX2RldmljZV9pbmZvICogY2RpLCBpbnRcIHNwZWVkKSR9CisKK1NvbWUgXGNkcm9tXCBkcml2ZXMgYXJlIGNhcGFibGUgb2YgY2hhbmdpbmcgdGhlaXIgaGVhZC1zcGVlZC4gVGhlcmUKK2FyZSBzZXZlcmFsIHJlYXNvbnMgZm9yIGNoYW5naW5nIHRoZSBzcGVlZCBvZiBhIFxjZHJvbVwgZHJpdmUuIEJhZGx5CitwcmVzc2VkIFxjZHJvbSBzIG1heSBiZW5lZml0IGZyb20gbGVzcy10aGFuLW1heGltdW0gaGVhZCByYXRlLiBNb2Rlcm4KK1xjZHJvbVwgZHJpdmVzIGNhbiBvYnRhaW4gdmVyeSBoaWdoIGhlYWQgcmF0ZXMgKHVwIHRvICQyNFx0aW1lcyQgaXMKK2NvbW1vbikuICBJdCBoYXMgYmVlbiByZXBvcnRlZCB0aGF0IHRoZXNlIGRyaXZlcyBjYW4gbWFrZSByZWFkaW5nCitlcnJvcnMgYXQgdGhlc2UgaGlnaCBzcGVlZHMsIHJlZHVjaW5nIHRoZSBzcGVlZCBjYW4gcHJldmVudCBkYXRhIGxvc3MKK2luIHRoZXNlIGNpcmN1bXN0YW5jZXMuICBGaW5hbGx5LCBzb21lIG9mIHRoZXNlIGRyaXZlcyBjYW4KK21ha2UgYW4gYW5ub3lpbmdseSBsb3VkIG5vaXNlLCB3aGljaCBhIGxvd2VyIHNwZWVkIG1heSByZWR1Y2UuICVGaW5hbGx5LAorJWFsdGhvdWdoIHRoZSBhdWRpby1sb3ctcGFzcyBmaWx0ZXJzIHByb2JhYmx5IGFyZW4ndCBkZXNpZ25lZCBmb3IgaXQsCislbW9yZSB0aGFuIHJlYWwtdGltZSBwbGF5YmFjayBvZiBhdWRpbyBtaWdodCBiZSB1c2VkIGZvciBoaWdoLXNwZWVkCislY29weWluZyBvZiBhdWRpbyB0cmFja3MuCisKK1RoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSBzcGVlZCBhdCB3aGljaCBkYXRhIGlzIHJlYWQgb3IgYXVkaW8gaXMKK3BsYXllZCBiYWNrLiBUaGUgdmFsdWUgb2YgJHNwZWVkJCBzcGVjaWZpZXMgdGhlIGhlYWQtc3BlZWQgb2YgdGhlCitkcml2ZSwgbWVhc3VyZWQgaW4gdW5pdHMgb2Ygc3RhbmRhcmQgY2Ryb20gc3BlZWQgKDE3Nlwsa0Ivc2VjIHJhdyBkYXRhCitvciAxNTBcLGtCL3NlYyBmaWxlIHN5c3RlbSBkYXRhKS4gU28gdG8gcmVxdWVzdCB0aGF0IGEgXGNkcm9tXCBkcml2ZQorb3BlcmF0ZSBhdCAzMDBcLGtCL3NlYyB5b3Ugd291bGQgY2FsbCB0aGUgQ0RST01fU0VMRUNUX1NQRUVEICRpb2N0bCQKK3dpdGggJHNwZWVkPTIkLiBUaGUgc3BlY2lhbCB2YWx1ZSBgMCcgbWVhbnMgYGF1dG8tc2VsZWN0aW9uJywgXGllLAorbWF4aW11bSBkYXRhLXJhdGUgb3IgcmVhbC10aW1lIGF1ZGlvIHJhdGUuIElmIHRoZSBkcml2ZSBkb2Vzbid0IGhhdmUKK3RoaXMgYGF1dG8tc2VsZWN0aW9uJyBjYXBhYmlsaXR5LCB0aGUgZGVjaXNpb24gc2hvdWxkIGJlIG1hZGUgb24gdGhlCitjdXJyZW50IGRpc2MgbG9hZGVkIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBwb3NpdGl2ZS4gQSBuZWdhdGl2ZQorcmV0dXJuIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4KKworXHN1YnNlY3Rpb257JEludFwgc2VsZWN0X2Rpc2Moc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgaW50XCBudW1iZXIpJH0KKworSWYgdGhlIGRyaXZlIGNhbiBzdG9yZSBtdWx0aXBsZSBkaXNjcyAoYSBqdWtlLWJveCkgdGhpcyBmdW5jdGlvbgord2lsbCBwZXJmb3JtIGRpc2Mgc2VsZWN0aW9uLiBJdCBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlCitzZWxlY3RlZCBkaXNjIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuIEN1cnJlbnRseSwgb25seQordGhlIGlkZS1jZCBkcml2ZXIgc3VwcG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5LgorCitcc3Vic2VjdGlvbnskSW50XCBnZXRfbGFzdF9zZXNzaW9uKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIHN0cnVjdFwKKyAgY2Ryb21fbXVsdGlzZXNzaW9uICogbXNfaW5mbykkfQorCitUaGlzIGZ1bmN0aW9uIHNob3VsZCBpbXBsZW1lbnQgdGhlIG9sZCBjb3JyZXNwb25kaW5nICRpb2N0bCgpJC4gRm9yCitkZXZpY2UgJGNkaVx0byBkZXYkLCB0aGUgc3RhcnQgb2YgdGhlIGxhc3Qgc2Vzc2lvbiBvZiB0aGUgY3VycmVudCBkaXNjCitzaG91bGQgYmUgcmV0dXJuZWQgaW4gdGhlIHBvaW50ZXIgYXJndW1lbnQgJG1zX2luZm8kLiBOb3RlIHRoYXQKK3JvdXRpbmVzIGluIFxjZHJvbWNcIGhhdmUgc2FuaXRpemVkIHRoaXMgYXJndW1lbnQ6IGl0cyByZXF1ZXN0ZWQKK2Zvcm1hdCB3aWxsIHtcZW0gYWx3YXlzXC99IGJlIG9mIHRoZSB0eXBlICRDRFJPTV9MQkEkIChsaW5lYXIgYmxvY2sKK2FkZHJlc3NpbmcgbW9kZSksIHdoYXRldmVyIHRoZSBjYWxsaW5nIHNvZnR3YXJlIHJlcXVlc3RlZC4gQnV0CitzYW5pdGl6YXRpb24gZ29lcyBldmVuIGZ1cnRoZXI6IHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gbWF5CityZXR1cm4gdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpbiAkQ0RST01fTVNGJCBmb3JtYXQgaWYgaXQgd2lzaGVzIHNvCisoc2V0dGluZyB0aGUgJG1zX2luZm9ccmlnaHRhcnJvdyBhZGRyX2Zvcm1hdCQgZmllbGQgYXBwcm9wcmlhdGVseSwgb2YKK2NvdXJzZSkgYW5kIHRoZSByb3V0aW5lcyBpbiBcY2Ryb21jXCB3aWxsIG1ha2UgdGhlIHRyYW5zZm9ybWF0aW9uIGlmCituZWNlc3NhcnkuIFRoZSByZXR1cm4gdmFsdWUgaXMgMCB1cG9uIHN1Y2Nlc3MuCisKK1xzdWJzZWN0aW9ueyRJbnRcIGdldF9tY24oc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwgc3RydWN0XAorICBjZHJvbV9tY24gKiBtY24pJH0KKworU29tZSBkaXNjcyBjYXJyeSBhIGBNZWRpYSBDYXRhbG9nIE51bWJlcicgKE1DTiksIGFsc28gY2FsbGVkCitgVW5pdmVyc2FsIFByb2R1Y3QgQ29kZScgKFVQQykuIFRoaXMgbnVtYmVyIHNob3VsZCByZWZsZWN0IHRoZSBudW1iZXIKK3RoYXQgaXMgZ2VuZXJhbGx5IGZvdW5kIGluIHRoZSBiYXItY29kZSBvbiB0aGUgcHJvZHVjdC4gVW5mb3J0dW5hdGVseSwKK3RoZSBmZXcgZGlzY3MgdGhhdCBjYXJyeSBzdWNoIGEgbnVtYmVyIG9uIHRoZSBkaXNjIGRvbid0IGV2ZW4gdXNlIHRoZQorc2FtZSBmb3JtYXQuIFRoZSByZXR1cm4gYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiBpcyBhIHBvaW50ZXIgdG8gYQorcHJlLWRlY2xhcmVkIG1lbW9yeSByZWdpb24gb2YgdHlwZSAkc3RydWN0XCBjZHJvbV9tY24kLiBUaGUgTUNOIGlzCitleHBlY3RlZCBhcyBhIDEzLWNoYXJhY3RlciBzdHJpbmcsIHRlcm1pbmF0ZWQgYnkgYSBudWxsLWNoYXJhY3Rlci4KKworXHN1YnNlY3Rpb257JEludFwgcmVzZXQoc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSkkfQorCitUaGlzIGNhbGwgc2hvdWxkIHBlcmZvcm0gYSBoYXJkLXJlc2V0IG9uIHRoZSBkcml2ZSAoYWx0aG91Z2ggaW4KK2NpcmN1bXN0YW5jZXMgdGhhdCBhIGhhcmQtcmVzZXQgaXMgbmVjZXNzYXJ5LCBhIGRyaXZlIG1heSB2ZXJ5IHdlbGwgbm90CitsaXN0ZW4gdG8gY29tbWFuZHMgYW55bW9yZSkuIFByZWZlcmFibHksIGNvbnRyb2wgaXMgcmV0dXJuZWQgdG8gdGhlCitjYWxsZXIgb25seSBhZnRlciB0aGUgZHJpdmUgaGFzIGZpbmlzaGVkIHJlc2V0dGluZy4gSWYgdGhlIGRyaXZlIGlzIG5vCitsb25nZXIgbGlzdGVuaW5nLCBpdCBtYXkgYmUgd2lzZSBmb3IgdGhlIHVuZGVybHlpbmcgbG93LWxldmVsIGNkcm9tCitkcml2ZXIgdG8gdGltZSBvdXQuCisKK1xzdWJzZWN0aW9ueyRJbnRcIGF1ZGlvX2lvY3RsKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIHVuc2lnbmVkXAorICBpbnRcIGNtZCwgdm9pZCAqIGFyZykkfQorCitTb21lIG9mIHRoZSBcY2Ryb20tJGlvY3RsJHMgZGVmaW5lZCBpbiBcY2Ryb21oXCBjYW4gYmUKK2ltcGxlbWVudGVkIGJ5IHRoZSByb3V0aW5lcyBkZXNjcmliZWQgYWJvdmUsIGFuZCBoZW5jZSB0aGUgZnVuY3Rpb24KKyRjZHJvbV9pb2N0bCQgd2lsbCB1c2UgdGhvc2UuIEhvd2V2ZXIsIG1vc3QgJGlvY3RsJHMgZGVhbCB3aXRoCithdWRpby1jb250cm9sLiBXZSBoYXZlIGRlY2lkZWQgdG8gbGVhdmUgdGhlc2UgdG8gYmUgYWNjZXNzZWQgdGhyb3VnaCBhCitzaW5nbGUgZnVuY3Rpb24sIHJlcGVhdGluZyB0aGUgYXJndW1lbnRzICRjbWQkIGFuZCAkYXJnJC4gTm90ZSB0aGF0Cit0aGUgbGF0dGVyIGlzIG9mIHR5cGUgJHZvaWQqe30kLCByYXRoZXIgdGhhbiAkdW5zaWduZWRcIGxvbmdcCitpbnQkLiBUaGUgcm91dGluZSAkY2Ryb21faW9jdGwoKSQgZG9lcyBkbyBzb21lIHVzZWZ1bCB0aGluZ3MsCit0aG91Z2guIEl0IHNhbml0aXplcyB0aGUgYWRkcmVzcyBmb3JtYXQgdHlwZSB0byAkQ0RST01fTVNGJCAoTWludXRlcywKK1NlY29uZHMsIEZyYW1lcykgZm9yIGFsbCBhdWRpbyBjYWxscy4gSXQgYWxzbyB2ZXJpZmllcyB0aGUgbWVtb3J5Citsb2NhdGlvbiBvZiAkYXJnJCwgYW5kIHJlc2VydmVzIHN0YWNrLW1lbW9yeSBmb3IgdGhlIGFyZ3VtZW50LiBUaGlzCittYWtlcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJGF1ZGlvX2lvY3RsKCkkIG11Y2ggc2ltcGxlciB0aGFuIGluIHRoZQorb2xkIGRyaXZlciBzY2hlbWUuIEZvciBleGFtcGxlLCB5b3UgbWF5IGxvb2sgdXAgdGhlIGZ1bmN0aW9uCiskY20yMDZfYXVkaW9faW9jdGwoKSQgaW4ge1x0dCB7Y20yMDYuY319IHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aAordGhpcyBkb2N1bWVudGF0aW9uLiAKKworQW4gdW5pbXBsZW1lbnRlZCBpb2N0bCBzaG91bGQgcmV0dXJuICQtRU5PU1lTJCwgYnV0IGEgaGFybWxlc3MgcmVxdWVzdAorKFxlZywgJENEUk9NU1RBUlQkKSBtYXkgYmUgaWdub3JlZCBieSByZXR1cm5pbmcgMCAoc3VjY2VzcykuIE90aGVyCitlcnJvcnMgc2hvdWxkIGJlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmRzLCB3aGF0ZXZlciB0aGV5IGFyZS4gV2hlbgorYW4gZXJyb3IgaXMgcmV0dXJuZWQgYnkgdGhlIGxvdy1sZXZlbCBkcml2ZXIsIHRoZSBcVUNEXCB0cmllcyB3aGVuZXZlcgorcG9zc2libGUgdG8gcmV0dXJuIHRoZSBlcnJvciBjb2RlIHRvIHRoZSBjYWxsaW5nIHByb2dyYW0uIChXZSBtYXkgZGVjaWRlCit0byBzYW5pdGl6ZSB0aGUgcmV0dXJuIHZhbHVlIGluICRjZHJvbV9pb2N0bCgpJCB0aG91Z2gsIGluIG9yZGVyIHRvCitndWFyYW50ZWUgYSB1bmlmb3JtIGludGVyZmFjZSB0byB0aGUgYXVkaW8tcGxheWVyIHNvZnR3YXJlLikKKworXHN1YnNlY3Rpb257JEludFwgZGV2X2lvY3RsKHN0cnVjdFwgY2Ryb21fZGV2aWNlX2luZm8gKiBjZGksIHVuc2lnbmVkXCBpbnRcCisgIGNtZCwgdW5zaWduZWRcIGxvbmdcIGFyZykkfQorCitTb21lICRpb2N0bCRzIHNlZW0gdG8gYmUgc3BlY2lmaWMgdG8gY2VydGFpbiBcY2Ryb21cIGRyaXZlcy4gVGhhdCBpcywKK3RoZXkgYXJlIGludHJvZHVjZWQgdG8gc2VydmljZSBzb21lIGNhcGFiaWxpdGllcyBvZiBjZXJ0YWluIGRyaXZlcy4gSW4KK2ZhY3QsIHRoZXJlIGFyZSA2IGRpZmZlcmVudCAkaW9jdGwkcyBmb3IgcmVhZGluZyBkYXRhLCBlaXRoZXIgaW4gc29tZQorcGFydGljdWxhciBraW5kIG9mIGZvcm1hdCwgb3IgYXVkaW8gZGF0YS4gTm90IG1hbnkgZHJpdmVzIHN1cHBvcnQKK3JlYWRpbmcgYXVkaW8gdHJhY2tzIGFzIGRhdGEsIEkgYmVsaWV2ZSB0aGlzIGlzIGJlY2F1c2Ugb2YgcHJvdGVjdGlvbgorb2YgY29weXJpZ2h0cyBvZiBhcnRpc3RzLiBNb3Jlb3ZlciwgSSB0aGluayB0aGF0IGlmIGF1ZGlvLXRyYWNrcyBhcmUKK3N1cHBvcnRlZCwgaXQgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB0aGUgVkZTIGFuZCBub3QgdmlhICRpb2N0bCRzLiBBCitwcm9ibGVtIGhlcmUgY291bGQgYmUgdGhlIGZhY3QgdGhhdCBhdWRpby1mcmFtZXMgYXJlIDIzNTIgYnl0ZXMgbG9uZywKK3NvIGVpdGhlciB0aGUgYXVkaW8tZmlsZS1zeXN0ZW0gc2hvdWxkIGFzayBmb3IgNzUyNjQgYnl0ZXMgYXQgb25jZQorKHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgNTEyIGFuZCAyMzUyKSwgb3IgdGhlIGRyaXZlcnMgc2hvdWxkCitiZW5kIHRoZWlyIGJhY2tzIHRvIGNvcGUgd2l0aCB0aGlzIGluY29oZXJlbmNlICh0byB3aGljaCBJIHdvdWxkIGJlCitvcHBvc2VkKS4gIEZ1cnRoZXJtb3JlLCBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCBmb3IgdGhlIGhhcmR3YXJlIHRvIGZpbmQKK3RoZSBleGFjdCBmcmFtZSBib3VuZGFyaWVzLCBzaW5jZSB0aGVyZSBhcmUgbm8gc3luY2hyb25pemF0aW9uIGhlYWRlcnMKK2luIGF1ZGlvIGZyYW1lcy4gIE9uY2UgdGhlc2UgaXNzdWVzIGFyZSByZXNvbHZlZCwgdGhpcyBjb2RlIHNob3VsZCBiZQorc3RhbmRhcmRpemVkIGluIFxjZHJvbWMuCisKK0JlY2F1c2UgdGhlcmUgYXJlIHNvIG1hbnkgJGlvY3RsJHMgdGhhdCBzZWVtIHRvIGJlIGludHJvZHVjZWQgdG8KK3NhdGlzZnkgY2VydGFpbiBkcml2ZXJzLFxmb290bm90ZXtJcyB0aGVyZSBzb2Z0d2FyZSBhcm91bmQgdGhhdAorICBhY3R1YWxseSB1c2VzIHRoZXNlPyBJJ2QgYmUgaW50ZXJlc3RlZCF9IGFueSBgbm9uLXN0YW5kYXJkJyAkaW9jdGwkcworYXJlIHJvdXRlZCB0aHJvdWdoIHRoZSBjYWxsICRkZXZfaW9jdGwoKSQuIEluIHByaW5jaXBsZSwgYHByaXZhdGUnCiskaW9jdGwkcyBzaG91bGQgYmUgbnVtYmVyZWQgYWZ0ZXIgdGhlIGRldmljZSdzIG1ham9yIG51bWJlciwgYW5kIG5vdAordGhlIGdlbmVyYWwgXGNkcm9tXCAkaW9jdGwkIG51bWJlciwge1x0dCB7MHg1M319LiBDdXJyZW50bHkgdGhlCitub24tc3VwcG9ydGVkICRpb2N0bCRzIGFyZToge1xpdCBDRFJPTVJFQURNT0RFMSwgQ0RST01SRUFETU9ERTIsCisgIENEUk9NUkVBREFVRElPLCBDRFJPTVJFQURSQVcsIENEUk9NUkVBRENPT0tFRCwgQ0RST01TRUVLLAorICBDRFJPTVBMQVlcLUJMSyBhbmQgQ0RST01cLVJFQURBTEx9LgorCisKK1xzdWJzZWN0aW9ue1xjZHJvbVwgY2FwYWJpbGl0aWVzfQorXGxhYmVse2NhcGFiaWxpdHl9CisKK0luc3RlYWQgb2YganVzdCBpbXBsZW1lbnRpbmcgc29tZSAkaW9jdGwkIGNhbGxzLCB0aGUgaW50ZXJmYWNlIGluCitcY2Ryb21jXCBzdXBwbGllcyB0aGUgcG9zc2liaWxpdHkgdG8gaW5kaWNhdGUgdGhlIHtcZW0gY2FwYWJpbGl0aWVzXC99CitvZiBhIFxjZHJvbVwgZHJpdmUuIFRoaXMgY2FuIGJlIGRvbmUgYnkgT1JpbmcgYW55IG51bWJlciBvZgorY2FwYWJpbGl0eS1jb25zdGFudHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBcY2Ryb21oXCBhdCB0aGUgcmVnaXN0cmF0aW9uCitwaGFzZS4gQ3VycmVudGx5LCB0aGUgY2FwYWJpbGl0aWVzIGFyZSBhbnkgb2Y6CiskJAorXGhhbGlnbnskIyRcIFxoZmlsJiQvKiQgXHJtIyAkKi8kXGhmaWxcY3IKK0NEQ19DTE9TRV9UUkFZJiBjYW4gY2xvc2UgdHJheSBieSBzb2Z0d2FyZSBjb250cm9sXGNyCitDRENfT1BFTl9UUkFZJiBjYW4gb3BlbiB0cmF5XGNyCitDRENfTE9DSyYgY2FuIGxvY2sgYW5kIHVubG9jayB0aGUgZG9vclxjcgorQ0RDX1NFTEVDVF9TUEVFRCYgY2FuIHNlbGVjdCBzcGVlZCwgaW4gdW5pdHMgb2YgJFxzaW0kMTUwXCxrQi9zXGNyCitDRENfU0VMRUNUX0RJU0MmIGRyaXZlIGlzIGp1a2UtYm94XGNyCitDRENfTVVMVElfU0VTU0lPTiYgY2FuIHJlYWQgc2Vzc2lvbnMgJD5ccm0xJFxjcgorQ0RDX01DTiYgY2FuIHJlYWQgTWVkaWEgQ2F0YWxvZyBOdW1iZXJcY3IKK0NEQ19NRURJQV9DSEFOR0VEJiBjYW4gcmVwb3J0IGlmIGRpc2MgaGFzIGNoYW5nZWRcY3IKK0NEQ19QTEFZX0FVRElPJiBjYW4gcGVyZm9ybSBhdWRpby1mdW5jdGlvbnMgKHBsYXksIHBhdXNlLCBldGMpXGNyCitDRENfUkVTRVQmIGhhcmQgcmVzZXQgZGV2aWNlXGNyCitDRENfSU9DVExTJiBkcml2ZXIgaGFzIG5vbi1zdGFuZGFyZCBpb2N0bHNcY3IKK0NEQ19EUklWRV9TVEFUVVMmIGRyaXZlciBpbXBsZW1lbnRzIGRyaXZlIHN0YXR1c1xjcgorfQorJCQKK1RoZSBjYXBhYmlsaXR5IGZsYWcgaXMgZGVjbGFyZWQgJGNvbnN0JCwgdG8gcHJldmVudCBkcml2ZXJzIGZyb20KK2FjY2lkZW50YWxseSB0YW1wZXJpbmcgd2l0aCB0aGUgY29udGVudHMuIFRoZSBjYXBhYmlsaXR5IGZhZ3MgYWN0dWFsbHkKK2luZm9ybSBcY2Ryb21jXCBvZiB3aGF0IHRoZSBkcml2ZXIgY2FuIGRvLiBJZiB0aGUgZHJpdmUgZm91bmQKK2J5IHRoZSBkcml2ZXIgZG9lcyBub3QgaGF2ZSB0aGUgY2FwYWJpbGl0eSwgaXMgY2FuIGJlIG1hc2tlZCBvdXQgYnkKK3RoZSAkY2Ryb21fZGV2aWNlX2luZm8kIHZhcmlhYmxlICRtYXNrJC4gRm9yIGluc3RhbmNlLCB0aGUgU0NTSSBcY2Ryb21cCitkcml2ZXIgaGFzIGltcGxlbWVudGVkIHRoZSBjb2RlIGZvciBsb2FkaW5nIGFuZCBlamVjdGluZyBcY2Ryb20ncywgYW5kCitoZW5jZSBpdHMgY29ycmVzcG9uZGluZyBmbGFncyBpbiAkY2FwYWJpbGl0eSQgd2lsbCBiZSBzZXQuIEJ1dCBhIFNDU0kKK1xjZHJvbVwgZHJpdmUgbWlnaHQgYmUgYSBjYWRkeSBzeXN0ZW0sIHdoaWNoIGNhbid0IGxvYWQgdGhlIHRyYXksIGFuZAoraGVuY2UgZm9yIHRoaXMgZHJpdmUgdGhlICRjZHJvbV9kZXZpY2VfaW5mbyQgc3RydWN0IHdpbGwgaGF2ZSBzZXQKK3RoZSAkQ0RDX0NMT1NFX1RSQVkkIGJpdCBpbiAkbWFzayQuCisKK0luIHRoZSBmaWxlIFxjZHJvbWNcIHlvdSB3aWxsIGVuY291bnRlciBtYW55IGNvbnN0cnVjdGlvbnMgb2YgdGhlIHR5cGUKKyQkXGl0CitpZlwgKGNkb1xyaWdodGFycm93IGNhcGFiaWxpdHkgXG1hdGhyZWxcJiBcbWF0aG9yZHtcc2ltfSBjZGlccmlnaHRhcnJvdyBtYXNrIAorICAgXG1hdGhyZWx7XCZ9IENEQ188Y2FwYWJpbGl0eT4pIFxsZG90cworJCQKK1RoZXJlIGlzIG5vICRpb2N0bCQgdG8gc2V0IHRoZSBtYXNrXGRvdHMgVGhlIHJlYXNvbiBpcyB0aGF0CitJIHRoaW5rIGl0IGlzIGJldHRlciB0byBjb250cm9sIHRoZSB7XGVtIGJlaGF2aW9yXC99IHJhdGhlciB0aGFuIHRoZQore1xlbSBjYXBhYmlsaXRpZXN9LgorCitcc3Vic2VjdGlvbntPcHRpb25zfQorCitBIGZpbmFsIGZsYWcgcmVnaXN0ZXIgY29udHJvbHMgdGhlIHtcZW0gYmVoYXZpb3JcL30gb2YgdGhlIFxjZHJvbVwKK2RyaXZlcywgaW4gb3JkZXIgdG8gc2F0aXNmeSBkaWZmZXJlbnQgdXNlcnMnIHdpc2hlcywgaG9wZWZ1bGx5CitpbmRlcGVuZGVudGx5IG9mIHRoZSBpZGVhcyBvZiB0aGUgcmVzcGVjdGl2ZSBhdXRob3Igd2hvIGhhcHBlbmVkIHRvCitoYXZlIG1hZGUgdGhlIGRyaXZlJ3Mgc3VwcG9ydCBhdmFpbGFibGUgdG8gdGhlIFxsaW51eFwgY29tbXVuaXR5LiBUaGUKK2N1cnJlbnQgYmVoYXZpb3Igb3B0aW9ucyBhcmU6CiskJAorXGhhbGlnbnskIyRcIFxoZmlsJiQvKiQgXHJtIyAkKi8kXGhmaWxcY3IKK0NET19BVVRPX0NMT1NFJiB0cnkgdG8gY2xvc2UgdHJheSB1cG9uIGRldmljZSAkb3BlbigpJFxjcgorQ0RPX0FVVE9fRUpFQ1QmIHRyeSB0byBvcGVuIHRyYXkgb24gbGFzdCBkZXZpY2UgJGNsb3NlKCkkXGNyCitDRE9fVVNFX0ZGTEFHUyYgdXNlICRmaWxlX3BvaW50ZXJccmlnaHRhcnJvdyBmX2ZsYWdzJCB0byBpbmRpY2F0ZQorIHB1cnBvc2UgZm9yICRvcGVuKCkkXGNyCitDRE9fTE9DSyYgdHJ5IHRvIGxvY2sgZG9vciBpZiBkZXZpY2UgaXMgb3BlbmVkXGNyCitDRE9fQ0hFQ0tfVFlQRSYgZW5zdXJlIGRpc2MgdHlwZSBpcyBkYXRhIGlmIG9wZW5lZCBmb3IgZGF0YVxjcgorfQorJCQKKworVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyByZWdpc3RlciBpcyAkQ0RPX0FVVE9fQ0xPU0UgXG1hdGhyZWx8CitDRE9fVVNFX0ZGTEFHUyBcbWF0aHJlbHwgQ0RPX0xPQ0skLCByZWZsZWN0aW5nIG15IG93biB2aWV3IG9uIHVzZXIKK2ludGVyZmFjZSBhbmQgc29mdHdhcmUgc3RhbmRhcmRzLiBCZWZvcmUgeW91IHByb3Rlc3QsIHRoZXJlIGFyZSB0d28KK25ldyAkaW9jdGwkcyBpbXBsZW1lbnRlZCBpbiBcY2Ryb21jLCB0aGF0IGFsbG93IHlvdSB0byBjb250cm9sIHRoZQorYmVoYXZpb3IgYnkgc29mdHdhcmUuIFRoZXNlIGFyZToKKyQkCitcaGFsaWdueyQjJFwgXGhmaWwmJC8qJCBccm0jICQqLyRcaGZpbFxjcgorQ0RST01fU0VUX09QVElPTlMmIHNldCBvcHRpb25zIHNwZWNpZmllZCBpbiAkKGludClcIGFyZyRcY3IKK0NEUk9NX0NMRUFSX09QVElPTlMmIGNsZWFyIG9wdGlvbnMgc3BlY2lmaWVkIGluICQoaW50KVwgYXJnJFxjcgorfQorJCQKK09uZSBvcHRpb24gbmVlZHMgc29tZSBtb3JlIGV4cGxhbmF0aW9uOiAkQ0RPX1VTRV9GRkxBR1MkLiBJbiB0aGUgbmV4dAorbmV3c2VjdGlvbiB3ZSBleHBsYWluIHdoYXQgdGhlIG5lZWQgZm9yIHRoaXMgb3B0aW9uIGlzLgorCitBIHNvZnR3YXJlIHBhY2thZ2Uge1x0dCBzZXRjZH0sIGF2YWlsYWJsZSBmcm9tIHRoZSBEZWJpYW4gZGlzdHJpYnV0aW9uCithbmQge1x0dCBzdW5zaXRlLnVuYy5lZHV9LCBhbGxvd3MgdXNlciBsZXZlbCBjb250cm9sIG9mIHRoZXNlIGZsYWdzLiAKKworXG5ld3NlY3Rpb257VGhlIG5lZWQgdG8ga25vdyB0aGUgcHVycG9zZSBvZiBvcGVuaW5nIHRoZSBcY2Ryb21cIGRldmljZX0KKworVHJhZGl0aW9uYWxseSwgVW5peCBkZXZpY2VzIGNhbiBiZSB1c2VkIGluIHR3byBkaWZmZXJlbnQgYG1vZGVzJywKK2VpdGhlciBieSByZWFkaW5nL3dyaXRpbmcgdG8gdGhlIGRldmljZSBmaWxlLCBvciBieSBpc3N1aW5nCitjb250cm9sbGluZyBjb21tYW5kcyB0byB0aGUgZGV2aWNlLCBieSB0aGUgZGV2aWNlJ3MgJGlvY3RsKCkkCitjYWxsLiBUaGUgcHJvYmxlbSB3aXRoIFxjZHJvbVwgZHJpdmVzLCBpcyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgZm9yCit0d28gZW50aXJlbHkgZGlmZmVyZW50IHB1cnBvc2VzLiBPbmUgaXMgdG8gbW91bnQgcmVtb3ZhYmxlCitmaWxlIHN5c3RlbXMsIFxjZHJvbSBzLCB0aGUgb3RoZXIgaXMgdG8gcGxheSBhdWRpbyBDRCdzLiBBdWRpbyBjb21tYW5kcworYXJlIGltcGxlbWVudGVkIGVudGlyZWx5IHRocm91Z2ggJGlvY3RsJHMsIHByZXN1bWFibHkgYmVjYXVzZSB0aGUKK2ZpcnN0IGltcGxlbWVudGF0aW9uIChTVU4/KSBoYXMgYmVlbiBzdWNoLiBJbiBwcmluY2lwbGUgdGhlcmUgaXMKK25vdGhpbmcgd3Jvbmcgd2l0aCB0aGlzLCBidXQgYSBnb29kIGNvbnRyb2wgb2YgdGhlIGBDRCBwbGF5ZXInIGRlbWFuZHMKK3RoYXQgdGhlIGRldmljZSBjYW4ge1xlbSBhbHdheXNcL30gYmUgb3BlbmVkIGluIG9yZGVyIHRvIGdpdmUgdGhlCiskaW9jdGwkIGNvbW1hbmRzLCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSB0aGUgZHJpdmUgaXMgaW4uIAorCitPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiB1c2VkIGFzIGEgcmVtb3ZhYmxlLW1lZGlhIGRpc2MgZHJpdmUgKHdoYXQgdGhlCitvcmlnaW5hbCBwdXJwb3NlIG9mIFxjZHJvbSBzIGlzKSB3ZSB3b3VsZCBsaWtlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorZGlzYyBkcml2ZSBpcyByZWFkeSBmb3Igb3BlcmF0aW9uIHVwb24gb3BlbmluZyB0aGUgZGV2aWNlLiBJbiB0aGUgb2xkCitzY2hlbWUsIHNvbWUgXGNkcm9tXCBkcml2ZXJzIGRvbid0IGRvIGFueSBpbnRlZ3JpdHkgY2hlY2tpbmcsIHJlc3VsdGluZworaW4gYSBudW1iZXIgb2YgaS9vIGVycm9ycyByZXBvcnRlZCBieSB0aGUgVkZTIHRvIHRoZSBrZXJuZWwgd2hlbiBhbgorYXR0ZW1wdCBmb3IgbW91bnRpbmcgYSBcY2Ryb21cIG9uIGFuIGVtcHR5IGRyaXZlIG9jY3Vycy4gVGhpcyBpcyBub3QgYQorcGFydGljdWxhcmx5IGVsZWdhbnQgd2F5IHRvIGZpbmQgb3V0IHRoYXQgdGhlcmUgaXMgbm8gXGNkcm9tXCBpbnNlcnRlZDsKK2l0IG1vcmUtb3ItbGVzcyBsb29rcyBsaWtlIHRoZSBvbGQgSUJNLVBDIHRyeWluZyB0byByZWFkIGFuIGVtcHR5IGZsb3BweQorZHJpdmUgZm9yIGEgY291cGxlIG9mIHNlY29uZHMsIGFmdGVyIHdoaWNoIHRoZSBzeXN0ZW0gY29tcGxhaW5zIGl0CitjYW4ndCByZWFkIGZyb20gaXQuIE5vd2FkYXlzIHdlIGNhbiB7XGVtIHNlbnNlXC99IHRoZSBleGlzdGVuY2Ugb2YgYQorcmVtb3ZhYmxlIG1lZGl1bSBpbiBhIGRyaXZlLCBhbmQgd2UgYmVsaWV2ZSB3ZSBzaG91bGQgZXhwbG9pdCB0aGF0CitmYWN0LiBBbiBpbnRlZ3JpdHkgY2hlY2sgb24gb3BlbmluZyBvZiB0aGUgZGV2aWNlLCB0aGF0IHZlcmlmaWVzIHRoZQorYXZhaWxhYmlsaXR5IG9mIGEgXGNkcm9tXCBhbmQgaXRzIGNvcnJlY3QgdHlwZSAoZGF0YSksIHdvdWxkIGJlCitkZXNpcmFibGUuCisKK1RoZXNlIHR3byB3YXlzIG9mIHVzaW5nIGEgXGNkcm9tXCBkcml2ZSwgcHJpbmNpcGFsbHkgZm9yIGRhdGEgYW5kCitzZWNvbmRhcmlseSBmb3IgcGxheWluZyBhdWRpbyBkaXNjcywgaGF2ZSBkaWZmZXJlbnQgZGVtYW5kcyBmb3IgdGhlCitiZWhhdmlvciBvZiB0aGUgJG9wZW4oKSQgY2FsbC4gQXVkaW8gdXNlIHNpbXBseSB3YW50cyB0byBvcGVuIHRoZQorZGV2aWNlIGluIG9yZGVyIHRvIGdldCBhIGZpbGUgaGFuZGxlIHdoaWNoIGlzIG5lZWRlZCBmb3IgaXNzdWluZworJGlvY3RsJCBjb21tYW5kcywgd2hpbGUgZGF0YSB1c2Ugd2FudHMgdG8gb3BlbiBmb3IgY29ycmVjdCBhbmQKK3JlbGlhYmxlIGRhdGEgdHJhbnNmZXIuIFRoZSBvbmx5IHdheSB1c2VyIHByb2dyYW1zIGNhbiBpbmRpY2F0ZSB3aGF0Cit0aGVpciB7XGVtIHB1cnBvc2VcL30gb2Ygb3BlbmluZyB0aGUgZGV2aWNlIGlzLCBpcyB0aHJvdWdoIHRoZSAkZmxhZ3MkCitwYXJhbWV0ZXIgKHNlZSB7XHR0IHtvcGVuKDIpfX0pLiBGb3IgXGNkcm9tXCBkZXZpY2VzLCB0aGVzZSBmbGFncyBhcmVuJ3QKK2ltcGxlbWVudGVkIChzb21lIGRyaXZlcnMgaW1wbGVtZW50IGNoZWNraW5nIGZvciB3cml0ZS1yZWxhdGVkIGZsYWdzLAorYnV0IHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBpZiB0aGUgZGV2aWNlIGZpbGUgaGFzIGNvcnJlY3QKK3Blcm1pc3Npb24gZmxhZ3MpLiBNb3N0IG9wdGlvbiBmbGFncyBzaW1wbHkgZG9uJ3QgbWFrZSBzZW5zZSB0bworXGNkcm9tXCBkZXZpY2VzOiAkT19DUkVBVCQsICRPX05PQ1RUWSQsICRPX1RSVU5DJCwgJE9fQVBQRU5EJCwgYW5kCiskT19TWU5DJCBoYXZlIG5vIG1lYW5pbmcgdG8gYSBcY2Ryb20uIAorCitXZSB0aGVyZWZvcmUgcHJvcG9zZSB0byB1c2UgdGhlIGZsYWcgJE9fTk9OQkxPQ0skIHRvIGluZGljYXRlCit0aGF0IHRoZSBkZXZpY2UgaXMgb3BlbmVkIGp1c3QgZm9yIGlzc3VpbmcgJGlvY3RsJAorY29tbWFuZHMuIFN0cmljdGx5LCB0aGUgbWVhbmluZyBvZiAkT19OT05CTE9DSyQgaXMgdGhhdCBvcGVuaW5nIGFuZAorc3Vic2VxdWVudCBjYWxscyB0byB0aGUgZGV2aWNlIGRvbid0IGNhdXNlIHRoZSBjYWxsaW5nIHByb2Nlc3MgdG8KK3dhaXQuIFdlIGNvdWxkIGludGVycHJldCB0aGlzIGFzIGBgZG9uJ3Qgd2FpdCB1bnRpbCBzb21lb25lIGhhcworaW5zZXJ0ZWQgc29tZSB2YWxpZCBkYXRhLVxjZHJvbS4nJyBUaHVzLCBvdXIgcHJvcG9zYWwgb2YgdGhlCitpbXBsZW1lbnRhdGlvbiBmb3IgdGhlICRvcGVuKCkkIGNhbGwgZm9yIFxjZHJvbSBzIGlzOgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBJZiBubyBvdGhlciBmbGFncyBhcmUgc2V0IHRoYW4gJE9fUkRPTkxZJCwgdGhlIGRldmljZSBpcyBvcGVuZWQKK2ZvciBkYXRhIHRyYW5zZmVyLCBhbmQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIDAgb25seSB1cG9uIHN1Y2Nlc3NmdWwKK2luaXRpYWxpemF0aW9uIG9mIHRoZSB0cmFuc2Zlci4gVGhlIGNhbGwgbWF5IGV2ZW4gaW5kdWNlIHNvbWUgYWN0aW9ucworb24gdGhlIFxjZHJvbSwgc3VjaCBhcyBjbG9zaW5nIHRoZSB0cmF5LiAgCitcaXRlbSBJZiB0aGUgb3B0aW9uIGZsYWcgJE9fTk9OQkxPQ0skIGlzIHNldCwgb3BlbmluZyB3aWxsIGFsd2F5cyBiZQorc3VjY2Vzc2Z1bCwgdW5sZXNzIHRoZSB3aG9sZSBkZXZpY2UgZG9lc24ndCBleGlzdC4gVGhlIGRyaXZlIHdpbGwgdGFrZQorbm8gYWN0aW9ucyB3aGF0c29ldmVyLiAKK1xlbmR7aXRlbWl6ZX0KKworXHN1YnNlY3Rpb257QW5kIHdoYXQgYWJvdXQgc3RhbmRhcmRzP30KKworWW91IG1pZ2h0IGhlc2l0YXRlIHRvIGFjY2VwdCB0aGlzIHByb3Bvc2FsIGFzIGl0IGNvbWVzIGZyb20gdGhlCitcbGludXhcIGNvbW11bml0eSwgYW5kIG5vdCBmcm9tIHNvbWUgc3RhbmRhcmRpemluZyBpbnN0aXR1dGUuIFdoYXQKK2Fib3V0IFNVTiwgU0dJLCBIUCBhbmQgYWxsIHRob3NlIG90aGVyIFVuaXggYW5kIGhhcmR3YXJlIHZlbmRvcnM/CitXZWxsLCB0aGVzZSBjb21wYW5pZXMgYXJlIGluIHRoZSBsdWNreSBwb3NpdGlvbiB0aGF0IHRoZXkgZ2VuZXJhbGx5Citjb250cm9sIGJvdGggdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBvZiB0aGVpciBzdXBwb3J0ZWQgcHJvZHVjdHMsCithbmQgYXJlIGxhcmdlIGVub3VnaCB0byBzZXQgdGhlaXIgb3duIHN0YW5kYXJkLiBUaGV5IGRvIG5vdCBoYXZlIHRvCitkZWFsIHdpdGggYSBkb3plbiBvciBtb3JlIGRpZmZlcmVudCwgY29tcGV0aW5nIGhhcmR3YXJlCitjb25maWd1cmF0aW9ucy5cZm9vdG5vdGV7SW5jaWRlbnRhbGx5LCBJIHRoaW5rIHRoYXQgU1VOJ3MgYXBwcm9hY2ggdG8KK21vdW50aW5nIFxjZHJvbSBzIGlzIHZlcnkgZ29vZCBpbiBvcmlnaW46IHVuZGVyIFNvbGFyaXMgYQordm9sdW1lLWRhZW1vbiBhdXRvbWF0aWNhbGx5IG1vdW50cyBhIG5ld2x5IGluc2VydGVkIFxjZHJvbVwgdW5kZXIge1x0dAorey9jZHJvbS8kPHZvbHVtZS1uYW1lPiQvfX0uIEluIG15IG9waW5pb24gdGhleSBzaG91bGQgaGF2ZSBwdXNoZWQgdGhpcworZnVydGhlciBhbmQgaGF2ZSB7XGVtIGV2ZXJ5XC99IFxjZHJvbVwgb24gdGhlIGxvY2FsIGFyZWEgbmV0d29yayBiZQorbW91bnRlZCBhdCB0aGUgc2ltaWxhciBsb2NhdGlvbiwgXGllLCBubyBtYXR0ZXIgaW4gd2hpY2ggcGFydGljdWxhcgorbWFjaGluZSB5b3UgaW5zZXJ0IGEgXGNkcm9tLCBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXQgdGhlIHNhbWUKK3Bvc2l0aW9uIGluIHRoZSBkaXJlY3RvcnkgdHJlZSwgb24gZXZlcnkgc3lzdGVtLiBXaGVuIEkgd2FudGVkIHRvCitpbXBsZW1lbnQgc3VjaCBhIHVzZXItcHJvZ3JhbSBmb3IgXGxpbnV4LCBJIGNhbWUgYWNyb3NzIHRoZQorZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3Igb2YgdGhlIHZhcmlvdXMgZHJpdmVycywgYW5kIHRoZSBuZWVkIGZvciBhbgorJGlvY3RsJCBpbmZvcm1pbmcgYWJvdXQgbWVkaWEgY2hhbmdlcy59CisKK1dlIGJlbGlldmUgdGhhdCB1c2luZyAkT19OT05CTE9DSyQgdG8gaW5kaWNhdGUgdGhhdCBhIGRldmljZSBpcyBiZWluZyBvcGVuZWQKK2ZvciAkaW9jdGwkIGNvbW1hbmRzIG9ubHkgY2FuIGJlIGVhc2lseSBpbnRyb2R1Y2VkIGluIHRoZSBcbGludXhcCitjb21tdW5pdHkuIEFsbCB0aGUgQ0QtcGxheWVyIGF1dGhvcnMgd2lsbCBoYXZlIHRvIGJlIGluZm9ybWVkLCB3ZSBjYW4KK2V2ZW4gc2VuZCBpbiBvdXIgb3duIHBhdGNoZXMgdG8gdGhlIHByb2dyYW1zLiBUaGUgdXNlIG9mICRPX05PTkJMT0NLJAoraGFzIG1vc3QgbGlrZWx5IG5vIGluZmx1ZW5jZSBvbiB0aGUgYmVoYXZpb3Igb2YgdGhlIENELXBsYXllcnMgb24KK290aGVyIG9wZXJhdGluZyBzeXN0ZW1zIHRoYW4gXGxpbnV4LiBGaW5hbGx5LCBhIHVzZXIgY2FuIGFsd2F5cyByZXZlcnQKK3RvIG9sZCBiZWhhdmlvciBieSBhIGNhbGwgdG8gJGlvY3RsKGZpbGVfZGVzY3JpcHRvciwgQ0RST01fQ0xFQVJfT1BUSU9OUywKK0NET19VU0VfRkZMQUdTKSQuIAorCitcc3Vic2VjdGlvbntUaGUgcHJlZmVycmVkIHN0cmF0ZWd5IG9mICRvcGVuKCkkfQorCitUaGUgcm91dGluZXMgaW4gXGNkcm9tY1wgYXJlIGRlc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCBydW4tdGltZQorY29uZmlndXJhdGlvbiBvZiB0aGUgYmVoYXZpb3Igb2YgXGNkcm9tXCBkZXZpY2VzIChvZiB7XGVtIGFueVwvfSB0eXBlKQorY2FuIGJlIGNhcnJpZWQgb3V0LCBieSB0aGUgJENEUk9NX1NFVC9DTEVBUl9PUFRJT05TJCAkaW9jdGxzJC4gVGh1cywgdmFyaW91cworbW9kZXMgb2Ygb3BlcmF0aW9uIGNhbiBiZSBzZXQ6CitcYmVnaW57ZGVzY3JpcHRpb259CitcaXRlbVskQ0RPX0FVVE9fQ0xPU0UgXG1hdGhyZWx8IENET19VU0VfRkZMQUdTIFxtYXRocmVsfCBDRE9fTE9DSyRdIFRoaXMKK2lzIHRoZSBkZWZhdWx0IHNldHRpbmcuIChXaXRoICRDRE9fQ0hFQ0tfVFlQRSQgaXQgd2lsbCBiZSBiZXR0ZXIsIGluIHRoZQorZnV0dXJlLikgSWYgdGhlIGRldmljZSBpcyBub3QgeWV0IG9wZW5lZCBieSBhbnkgb3RoZXIgcHJvY2VzcywgYW5kIGlmCit0aGUgZGV2aWNlIGlzIGJlaW5nIG9wZW5lZCBmb3IgZGF0YSAoJE9fTk9OQkxPQ0skIGlzIG5vdCBzZXQpIGFuZCB0aGUKK3RyYXkgaXMgZm91bmQgdG8gYmUgb3BlbiwgYW4gYXR0ZW1wdCB0byBjbG9zZSB0aGUgdHJheSBpcyBtYWRlLiBUaGVuLAoraXQgaXMgdmVyaWZpZWQgdGhhdCBhIGRpc2MgaXMgaW4gdGhlIGRyaXZlIGFuZCwgaWYgJENET19DSEVDS19UWVBFJCBpcworc2V0LCB0aGF0IGl0IGNvbnRhaW5zIHRyYWNrcyBvZiB0eXBlIGBkYXRhIG1vZGUgMS4nIE9ubHkgaWYgYWxsIHRlc3RzCithcmUgcGFzc2VkIGlzIHRoZSByZXR1cm4gdmFsdWUgemVyby4gVGhlIGRvb3IgaXMgbG9ja2VkIHRvIHByZXZlbnQgZmlsZQorc3lzdGVtIGNvcnJ1cHRpb24uIElmIHRoZSBkcml2ZSBpcyBvcGVuZWQgZm9yIGF1ZGlvICgkT19OT05CTE9DSyQgaXMKK3NldCksIG5vIGFjdGlvbnMgYXJlIHRha2VuIGFuZCBhIHZhbHVlIG9mIDAgd2lsbCBiZSByZXR1cm5lZC4gCitcaXRlbVskQ0RPX0FVVE9fQ0xPU0UgXG1hdGhyZWx8IENET19BVVRPX0VKRUNUIFxtYXRocmVsfCBDRE9fTE9DSyRdIFRoaXMKK21pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGN1cnJlbnQgc2JwY2QtZHJpdmVyLiBUaGUgb3B0aW9uIGZsYWdzIGFyZQoraWdub3JlZCwgdGhlIHRyYXkgaXMgY2xvc2VkIG9uIHRoZSBmaXJzdCBvcGVuLCBpZiBuZWNlc3NhcnkuIFNpbWlsYXJseSwKK3RoZSB0cmF5IGlzIG9wZW5lZCBvbiB0aGUgbGFzdCByZWxlYXNlLCBcaWUsIGlmIGEgXGNkcm9tXCBpcyB1bm1vdW50ZWQsCitpdCBpcyBhdXRvbWF0aWNhbGx5IGVqZWN0ZWQsIHN1Y2ggdGhhdCB0aGUgdXNlciBjYW4gcmVwbGFjZSBpdC4KK1xlbmR7ZGVzY3JpcHRpb259IAorV2UgaG9wZSB0aGF0IHRoZXNlIG9wdGlvbiBjYW4gY29udmluY2UgZXZlcnlib2R5IChib3RoIGRyaXZlcgorbWFpbnRhaW5lcnMgYW5kIHVzZXIgcHJvZ3JhbSBkZXZlbG9wZXJzKSB0byBhZG9wdCB0aGUgbmV3IFxjZHJvbVwKK2RyaXZlciBzY2hlbWUgYW5kIG9wdGlvbiBmbGFnIGludGVycHJldGF0aW9uLgorCitcbmV3c2VjdGlvbntEZXNjcmlwdGlvbiBvZiByb3V0aW5lcyBpbiBcY2Ryb21jfQorCitPbmx5IGEgZmV3IHJvdXRpbmVzIGluIFxjZHJvbWNcIGFyZSBleHBvcnRlZCB0byB0aGUgZHJpdmVycy4gSW4gdGhpcworbmV3IHNlY3Rpb24gd2Ugd2lsbCBkaXNjdXNzIHRoZXNlLCBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvbnMgdGhhdCBgdGFrZQorb3ZlcicgdGhlIFxjZHJvbVwgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwuIFRoZSBoZWFkZXIgZmlsZSBiZWxvbmdpbmcKK3RvIFxjZHJvbWNcIGlzIGNhbGxlZCBcY2Ryb21oLiBGb3JtZXJseSwgc29tZSBvZiB0aGUgY29udGVudHMgb2YgdGhpcworZmlsZSB3ZXJlIHBsYWNlZCBpbiB0aGUgZmlsZSB7XHR0IHt1Y2Ryb20uaH19LCBidXQgdGhpcyBmaWxlIGhhcyBub3cgYmVlbgorbWVyZ2VkIGJhY2sgaW50byBcY2Ryb21oLgorCitcc3Vic2VjdGlvbnskU3RydWN0XCBmaWxlX29wZXJhdGlvbnNcIGNkcm9tX2ZvcHMkfQorCitUaGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUgd2VyZSBkZXNjcmliZWQgaW4gc2VjdGlvbn5ccmVme2Nkcm9tLmN9LgorQSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIGlzIGFzc2lnbmVkIHRvIHRoZSAkZm9wcyQgZmllbGQKK29mIHRoZSAkc3RydWN0IGdlbmRpc2skLgorCitcc3Vic2VjdGlvbnskSW50XCByZWdpc3Rlcl9jZHJvbSggc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mb1wgKiBjZGkpJH0KKworVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGFib3V0IHRoZSBzYW1lIHdheSBvbmUgcmVnaXN0ZXJzICRjZHJvbV9mb3BzJAord2l0aCB0aGUga2VybmVsLCB0aGUgZGV2aWNlIG9wZXJhdGlvbnMgYW5kIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMsCithcyBkZXNjcmliZWQgaW4gc2VjdGlvbn5ccmVme2Nkcm9tLmN9LCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZQorXFVDRDoKKyQkCityZWdpc3Rlcl9jZHJvbShcJjxkZXZpY2U+X2luZm8pKTsKKyQkCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyB1cG9uIHN1Y2Nlc3MsIGFuZCBub24temVybyB1cG9uCitmYWlsdXJlLiBUaGUgc3RydWN0dXJlICQ8ZGV2aWNlPl9pbmZvJCBzaG91bGQgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlCitkcml2ZXIncyAkPGRldmljZT5fZG9wcyQsIGFzIGluIAorJCQKK1x2Ym94e1xoYWxpZ257JiQjJFxoZmlsXGNyCitzdHJ1Y3RcICZjZHJvbV9kZXZpY2VfaW5mb1wgPGRldmljZT5faW5mbyA9IFx7XGNyCismIDxkZXZpY2U+X2RvcHM7XGNyCismXGxkb3RzXGNyCitcfVxjcgorfX0kJAorTm90ZSB0aGF0IGEgZHJpdmVyIG11c3QgaGF2ZSBvbmUgc3RhdGljIHN0cnVjdHVyZSwgJDxkZXZpY2U+X2RvcHMkLCB3aGlsZQoraXQgbWF5IGhhdmUgYXMgbWFueSBzdHJ1Y3R1cmVzICQ8ZGV2aWNlPl9pbmZvJCBhcyB0aGVyZSBhcmUgbWlub3IgZGV2aWNlcworYWN0aXZlLiAkUmVnaXN0ZXJfY2Ryb20oKSQgYnVpbGRzIGEgbGlua2VkIGxpc3QgZnJvbSB0aGVzZS4gCisKK1xzdWJzZWN0aW9ueyRJbnRcIHVucmVnaXN0ZXJfY2Ryb20oc3RydWN0XCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSkkfQorCitVbnJlZ2lzdGVyaW5nIGRldmljZSAkY2RpJCB3aXRoIG1pbm9yIG51bWJlciAkTUlOT1IoY2RpXHRvIGRldikkIHJlbW92ZXMKK3RoZSBtaW5vciBkZXZpY2UgZnJvbSB0aGUgbGlzdC4gSWYgaXQgd2FzIHRoZSBsYXN0IHJlZ2lzdGVyZWQgbWlub3IgZm9yCit0aGUgbG93LWxldmVsIGRyaXZlciwgdGhpcyBkaXNjb25uZWN0cyB0aGUgcmVnaXN0ZXJlZCBkZXZpY2Utb3BlcmF0aW9uCityb3V0aW5lcyBmcm9tIHRoZSBcY2Ryb21cIGludGVyZmFjZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gdXBvbgorc3VjY2VzcywgYW5kIG5vbi16ZXJvIHVwb24gZmFpbHVyZS4KKworXHN1YnNlY3Rpb257JEludFwgY2Ryb21fb3BlbihzdHJ1Y3RcIGlub2RlICogaXAsIHN0cnVjdFwgZmlsZSAqIGZwKSR9CisKK1RoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSBieSB0aGUgbG93LWxldmVsIGRyaXZlcnMsIGl0IGlzCitsaXN0ZWQgaW4gdGhlIHN0YW5kYXJkICRjZHJvbV9mb3BzJC4gSWYgdGhlIFZGUyBvcGVucyBhIGZpbGUsIHRoaXMKK2Z1bmN0aW9uIGJlY29tZXMgYWN0aXZlLiBBIHN0cmF0ZWd5IGlzIGltcGxlbWVudGVkIGluIHRoaXMgcm91dGluZSwKK3Rha2luZyBjYXJlIG9mIGFsbCBjYXBhYmlsaXRpZXMgYW5kIG9wdGlvbnMgdGhhdCBhcmUgc2V0IGluIHRoZQorJGNkcm9tX2RldmljZV9vcHMkIGNvbm5lY3RlZCB0byB0aGUgZGV2aWNlLiBUaGVuLCB0aGUgcHJvZ3JhbSBmbG93IGlzCit0cmFuc2ZlcnJlZCB0byB0aGUgZGV2aWNlX2RlcGVuZGVudCAkb3BlbigpJCBjYWxsLgorCitcc3Vic2VjdGlvbnskVm9pZFwgY2Ryb21fcmVsZWFzZShzdHJ1Y3RcIGlub2RlICppcCwgc3RydWN0XCBmaWxlCisqZnApJH0KKworVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSByZXZlcnNlLWxvZ2ljIG9mICRjZHJvbV9vcGVuKCkkLCBhbmQgdGhlbgorY2FsbHMgdGhlIGRldmljZS1kZXBlbmRlbnQgJHJlbGVhc2UoKSQgcm91dGluZS4gV2hlbiB0aGUgdXNlLWNvdW50IGhhcworcmVhY2hlZCAwLCB0aGUgYWxsb2NhdGVkIGJ1ZmZlcnMgYXJlIGZsdXNoZWQgYnkgY2FsbHMgdG8gJHN5bmNfZGV2KGRldikkCithbmQgJGludmFsaWRhdGVfYnVmZmVycyhkZXYpJC4KKworCitcc3Vic2VjdGlvbnskSW50XCBjZHJvbV9pb2N0bChzdHJ1Y3RcIGlub2RlICppcCwgc3RydWN0XCBmaWxlICpmcCwKK3Vuc2lnbmVkXCBpbnRcIGNtZCwgdW5zaWduZWRcIGxvbmdcIGFyZykkfQorXGxhYmVse2Nkcm9tLWlvY3RsfQorCitUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYWxsIHRoZSBzdGFuZGFyZCAkaW9jdGwkIHJlcXVlc3RzIGZvciBcY2Ryb21cCitkZXZpY2VzIGluIGEgdW5pZm9ybSB3YXkuIFRoZSBkaWZmZXJlbnQgY2FsbHMgZmFsbCBpbnRvIHRocmVlCitjYXRlZ29yaWVzOiAkaW9jdGwkcyB0aGF0IGNhbiBiZSBkaXJlY3RseSBpbXBsZW1lbnRlZCBieSBkZXZpY2UKK29wZXJhdGlvbnMsIG9uZXMgdGhhdCBhcmUgcm91dGVkIHRocm91Z2ggdGhlIGNhbGwgJGF1ZGlvX2lvY3RsKCkkLCBhbmQKK3RoZSByZW1haW5pbmcgb25lcywgdGhhdCBhcmUgcHJlc3VtYWJsZSBkZXZpY2UtZGVwZW5kZW50LiBHZW5lcmFsbHksIGEKK25lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCisKK1xzdWJzdWJzZWN0aW9ue0RpcmVjdGx5IGltcGxlbWVudGVkICRpb2N0bCRzfQorXGxhYmVse2lvY3RsLWRpcmVjdH0KKworVGhlIGZvbGxvd2luZyBgb2xkJyBcY2Ryb20tJGlvY3RsJHMgYXJlIGltcGxlbWVudGVkIGJ5IGRpcmVjdGx5CitjYWxsaW5nIGRldmljZS1vcGVyYXRpb25zIGluICRjZHJvbV9kZXZpY2Vfb3BzJCwgaWYgaW1wbGVtZW50ZWQgYW5kCitub3QgbWFza2VkOgorXGJlZ2lue2Rlc2NyaXB0aW9ufQorXGl0ZW1bQ0RST01NVUxUSVNFU1NJT05dIFJlcXVlc3RzIHRoZSBsYXN0IHNlc3Npb24gb24gYSBcY2Ryb20uCitcaXRlbVtDRFJPTUVKRUNUXSBPcGVuIHRyYXkuIAorXGl0ZW1bQ0RST01DTE9TRVRSQVldIENsb3NlIHRyYXkuCitcaXRlbVtDRFJPTUVKRUNUX1NXXSBJZiAkYXJnXG5vdD0wJCwgc2V0IGJlaGF2aW9yIHRvIGF1dG8tY2xvc2UgKGNsb3NlCit0cmF5IG9uIGZpcnN0IG9wZW4pIGFuZCBhdXRvLWVqZWN0IChlamVjdCBvbiBsYXN0IHJlbGVhc2UpLCBvdGhlcndpc2UKK3NldCBiZWhhdmlvciB0byBub24tbW92aW5nIG9uICRvcGVuKCkkIGFuZCAkcmVsZWFzZSgpJCBjYWxscy4KK1xpdGVtW0NEUk9NX0dFVF9NQ05dIEdldCB0aGUgTWVkaWEgQ2F0YWxvZyBOdW1iZXIgZnJvbSBhIENELgorXGVuZHtkZXNjcmlwdGlvbn0KKworXHN1YnN1YnNlY3Rpb257JElvY3RsJHMgcm91dGVkIHRocm91Z2ggJGF1ZGlvX2lvY3RsKCkkfQorXGxhYmVse2lvY3RsLWF1ZGlvfQorCitUaGUgZm9sbG93aW5nIHNldCBvZiAkaW9jdGwkcyBhcmUgYWxsIGltcGxlbWVudGVkIHRocm91Z2ggYSBjYWxsIHRvCit0aGUgJGNkcm9tX2ZvcHMkIGZ1bmN0aW9uICRhdWRpb19pb2N0bCgpJC4gTWVtb3J5IGNoZWNrcyBhbmQKK2FsbG9jYXRpb24gYXJlIHBlcmZvcm1lZCBpbiAkY2Ryb21faW9jdGwoKSQsIGFuZCBhbHNvIHNhbml0aXphdGlvbiBvZgorYWRkcmVzcyBmb3JtYXQgKCRDRFJPTV9MQkEkLyRDRFJPTV9NU0YkKSBpcyBkb25lLgorXGJlZ2lue2Rlc2NyaXB0aW9ufQorXGl0ZW1bQ0RST01TVUJDSE5MXSBHZXQgc3ViLWNoYW5uZWwgZGF0YSBpbiBhcmd1bWVudCAkYXJnJCBvZiB0eXBlICRzdHJ1Y3RcCitjZHJvbV9zdWJjaG5sICp7fSQuCitcaXRlbVtDRFJPTVJFQURUT0NIRFJdIFJlYWQgVGFibGUgb2YgQ29udGVudHMgaGVhZGVyLCBpbiAkYXJnJCBvZiB0eXBlCiskc3RydWN0XCBjZHJvbV90b2NoZHIgKnt9JC4gCitcaXRlbVtDRFJPTVJFQURUT0NFTlRSWV0gUmVhZCBhIFRhYmxlIG9mIENvbnRlbnRzIGVudHJ5IGluICRhcmckIGFuZAorc3BlY2lmaWVkIGJ5ICRhcmckIG9mIHR5cGUgJHN0cnVjdFwgY2Ryb21fdG9jZW50cnkgKnt9JC4KK1xpdGVtW0NEUk9NUExBWU1TRl0gUGxheSBhdWRpbyBmcmFnbWVudCBzcGVjaWZpZWQgaW4gTWludXRlLCBTZWNvbmQsCitGcmFtZSBmb3JtYXQsIGRlbGltaXRlZCBieSAkYXJnJCBvZiB0eXBlICRzdHJ1Y3RcIGNkcm9tX21zZiAqe30kLgorXGl0ZW1bQ0RST01QTEFZVFJLSU5EXSBQbGF5IGF1ZGlvIGZyYWdtZW50IGluIHRyYWNrLWluZGV4IGZvcm1hdAorZGVsaW1pdGVkIGJ5ICRhcmckIG9mIHR5cGUgJHN0cnVjdFwgXHBlbmFsdHktMTAwMCBjZHJvbV90aSAqe30kLgorXGl0ZW1bQ0RST01WT0xDVFJMXSBTZXQgdm9sdW1lIHNwZWNpZmllZCBieSAkYXJnJCBvZiB0eXBlICRzdHJ1Y3RcCitjZHJvbV92b2xjdHJsICp7fSQuCitcaXRlbVtDRFJPTVZPTFJFQURdIFJlYWQgdm9sdW1lIGludG8gYnkgJGFyZyQgb2YgdHlwZSAkc3RydWN0XAorY2Ryb21fdm9sY3RybCAqe30kLgorXGl0ZW1bQ0RST01TVEFSVF0gU3BpbiB1cCBkaXNjLgorXGl0ZW1bQ0RST01TVE9QXSBTdG9wIHBsYXliYWNrIG9mIGF1ZGlvIGZyYWdtZW50LgorXGl0ZW1bQ0RST01QQVVTRV0gUGF1c2UgcGxheWJhY2sgb2YgYXVkaW8gZnJhZ21lbnQuCitcaXRlbVtDRFJPTVJFU1VNRV0gUmVzdW1lIHBsYXlpbmcuCitcZW5ke2Rlc2NyaXB0aW9ufQorCitcc3Vic3Vic2VjdGlvbntOZXcgJGlvY3RsJHMgaW4gXGNkcm9tY30KKworVGhlIGZvbGxvd2luZyAkaW9jdGwkcyBoYXZlIGJlZW4gaW50cm9kdWNlZCB0byBhbGxvdyB1c2VyIHByb2dyYW1zIHRvCitjb250cm9sIHRoZSBiZWhhdmlvciBvZiBpbmRpdmlkdWFsIFxjZHJvbVwgZGV2aWNlcy4gTmV3ICRpb2N0bCQKK2NvbW1hbmRzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHRoZSB1bmRlcnNjb3JlcyBpbiB0aGVpciBuYW1lcy4KK1xiZWdpbntkZXNjcmlwdGlvbn0KK1xpdGVtW0NEUk9NX1NFVF9PUFRJT05TXSBTZXQgb3B0aW9ucyBzcGVjaWZpZWQgYnkgJGFyZyQuIFJldHVybnMgdGhlCitvcHRpb24gZmxhZyByZWdpc3RlciBhZnRlciBtb2RpZmljYXRpb24uIFVzZSAgJGFyZyA9IFxybTAkIGZvciByZWFkaW5nCit0aGUgY3VycmVudCBmbGFncy4KK1xpdGVtW0NEUk9NX0NMRUFSX09QVElPTlNdIENsZWFyIG9wdGlvbnMgc3BlY2lmaWVkIGJ5ICRhcmckLiBSZXR1cm5zCisgIHRoZSBvcHRpb24gZmxhZyByZWdpc3RlciBhZnRlciBtb2RpZmljYXRpb24uCitcaXRlbVtDRFJPTV9TRUxFQ1RfU1BFRURdIFNlbGVjdCBoZWFkLXJhdGUgc3BlZWQgb2YgZGlzYyBzcGVjaWZpZWQgYXMKKyAgYnkgJGFyZyQgaW4gdW5pdHMgb2Ygc3RhbmRhcmQgY2Ryb20gc3BlZWQgKDE3Nlwsa0Ivc2VjIHJhdyBkYXRhIG9yCisgIDE1MFwsa0Ivc2VjIGZpbGUgc3lzdGVtIGRhdGEpLiBUaGUgdmFsdWUgMCBtZWFucyBgYXV0by1zZWxlY3QnLCBcaWUsCisgIHBsYXkgYXVkaW8gZGlzY3MgYXQgcmVhbCB0aW1lIGFuZCBkYXRhIGRpc2NzIGF0IG1heGltdW0gc3BlZWQuIFRoZSB2YWx1ZQorICAkYXJnJCBpcyBjaGVja2VkIGFnYWluc3QgdGhlIG1heGltdW0gaGVhZCByYXRlIG9mIHRoZSBkcml2ZSBmb3VuZCBpbiB0aGUKKyAgJGNkcm9tX2RvcHMkLgorXGl0ZW1bQ0RST01fU0VMRUNUX0RJU0NdIFNlbGVjdCBkaXNjIG51bWJlcmVkICRhcmckIGZyb20gYSBqdWtlLWJveC4KKyAgRmlyc3QgZGlzYyBpcyBudW1iZXJlZCAwLiBUaGUgbnVtYmVyICRhcmckIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUKKyAgbWF4aW11bSBudW1iZXIgb2YgZGlzY3MgaW4gdGhlIGp1a2UtYm94IGZvdW5kIGluIHRoZSAkY2Ryb21fZG9wcyQuCitcaXRlbVtDRFJPTV9NRURJQV9DSEFOR0VEXSBSZXR1cm5zIDEgaWYgYSBkaXNjIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UKKyAgdGhlIGxhc3QgY2FsbC4gTm90ZSB0aGF0IGNhbGxzIHRvICRjZHJvbV9tZWRpYV9jaGFuZ2VkJCBieSB0aGUgVkZTCisgIGFyZSB0cmVhdGVkIGJ5IGFuIGluZGVwZW5kZW50IHF1ZXVlLCBzbyBib3RoIG1lY2hhbmlzbXMgd2lsbCBkZXRlY3QKKyAgYSBtZWRpYSBjaGFuZ2Ugb25jZS4gRm9yIGp1a2UtYm94ZXMsIGFuIGV4dHJhIGFyZ3VtZW50ICRhcmckCisgIHNwZWNpZmllcyB0aGUgc2xvdCBmb3Igd2hpY2ggdGhlIGluZm9ybWF0aW9uIGlzIGdpdmVuLiBUaGUgc3BlY2lhbAorICB2YWx1ZSAkQ0RTTF9DVVJSRU5UJCByZXF1ZXN0cyB0aGF0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkKKyAgc2VsZWN0ZWQgc2xvdCBiZSByZXR1cm5lZC4KK1xpdGVtW0NEUk9NX0RSSVZFX1NUQVRVU10gUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBkcml2ZSBieSBhIGNhbGwgdG8KKyAgJGRyaXZlX3N0YXR1cygpJC4gUmV0dXJuIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBzZWN0aW9uflxyZWZ7ZHJpdmUKKyAgIHN0YXR1c30uIE5vdGUgdGhhdCB0aGlzIGNhbGwgZG9lc24ndCByZXR1cm4gaW5mb3JtYXRpb24gb24gdGhlCisgIGN1cnJlbnQgcGxheWluZyBhY3Rpdml0eSBvZiB0aGUgZHJpdmU7IHRoaXMgY2FuIGJlIHBvbGxlZCB0aHJvdWdoIGFuCisgICRpb2N0bCQgY2FsbCB0byAkQ0RST01TVUJDSE5MJC4gRm9yIGp1a2UtYm94ZXMsIGFuIGV4dHJhIGFyZ3VtZW50CisgICRhcmckIHNwZWNpZmllcyB0aGUgc2xvdCBmb3Igd2hpY2ggKHBvc3NpYmx5IGxpbWl0ZWQpIGluZm9ybWF0aW9uIGlzCisgIGdpdmVuLiBUaGUgc3BlY2lhbCB2YWx1ZSAkQ0RTTF9DVVJSRU5UJCByZXF1ZXN0cyB0aGF0IGluZm9ybWF0aW9uCisgIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2xvdCBiZSByZXR1cm5lZC4KK1xpdGVtW0NEUk9NX0RJU0NfU1RBVFVTXSBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBkaXNjIGN1cnJlbnRseSBpbiB0aGUKKyAgZHJpdmUuICBJdCBzaG91bGQgYmUgdmlld2VkIGFzIGEgY29tcGxlbWVudCB0byAkQ0RST01fRFJJVkVfU1RBVFVTJC4KKyAgVGhpcyAkaW9jdGwkIGNhbiBwcm92aWRlIFxlbXBoIHtzb21lfSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudAorICBkaXNjIHRoYXQgaXMgaW5zZXJ0ZWQgaW4gdGhlIGRyaXZlLiAgVGhpcyBmdW5jdGlvbmFsaXR5IHVzZWQgdG8gYmUKKyAgaW1wbGVtZW50ZWQgaW4gdGhlIGxvdyBsZXZlbCBkcml2ZXJzLCBidXQgaXMgbm93IGNhcnJpZWQgb3V0CisgIGVudGlyZWx5IGluIFxVQ0QuCisgIAorICBUaGUgaGlzdG9yeSBvZiBkZXZlbG9wbWVudCBvZiB0aGUgQ0QncyB1c2UgYXMgYSBjYXJyaWVyIG1lZGl1bSBmb3IKKyAgdmFyaW91cyBkaWdpdGFsIGluZm9ybWF0aW9uIGhhcyBsZWFkIHRvIG1hbnkgZGlmZmVyZW50IGRpc2MgdHlwZXMuCisgIFRoaXMgJGlvY3RsJCBpcyB1c2VmdWwgb25seSBpbiB0aGUgY2FzZSB0aGF0IENEcyBoYXZlIFxlbXBoIHtvbmx5CisgICAgb25lfSB0eXBlIG9mIGRhdGEgb24gdGhlbS4gIFdoaWxlIHRoaXMgaXMgb2Z0ZW4gdGhlIGNhc2UsIGl0IGlzCisgIGFsc28gdmVyeSBjb21tb24gZm9yIENEcyB0byBoYXZlIHNvbWUgdHJhY2tzIHdpdGggZGF0YSwgYW5kIHNvbWUKKyAgdHJhY2tzIHdpdGggYXVkaW8uICBCZWNhdXNlIHRoaXMgaXMgYW4gZXhpc3RpbmcgaW50ZXJmYWNlLCByYXRoZXIKKyAgdGhhbiBmaXhpbmcgdGhpcyBpbnRlcmZhY2UgYnkgY2hhbmdpbmcgdGhlIGFzc3VtcHRpb25zIGl0IHdhcyBtYWRlCisgIHVuZGVyLCB0aGVyZWJ5IGJyZWFraW5nIGFsbCB1c2VyIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGlzCisgIGZ1bmN0aW9uLCB0aGUgXFVDRFwgaW1wbGVtZW50cyB0aGlzICRpb2N0bCQgYXMgZm9sbG93czogSWYgdGhlIENEIGluCisgIHF1ZXN0aW9uIGhhcyBhdWRpbyB0cmFja3Mgb24gaXQsIGFuZCBpdCBoYXMgYWJzb2x1dGVseSBubyBDRC1JLCBYQSwKKyAgb3IgZGF0YSB0cmFja3Mgb24gaXQsIGl0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgJENEU19BVURJTyQuICBJZiBpdCBoYXMKKyAgYm90aCBhdWRpbyBhbmQgZGF0YSB0cmFja3MsIGl0IHdpbGwgcmV0dXJuICRDRFNfTUlYRUQkLiAgSWYgdGhlcmUKKyAgYXJlIG5vIGF1ZGlvIHRyYWNrcyBvbiB0aGUgZGlzYywgYW5kIGlmIHRoZSBDRCBpbiBxdWVzdGlvbiBoYXMgYW55CisgIENELUkgdHJhY2tzIG9uIGl0LCBpdCB3aWxsIGJlIHJlcG9ydGVkIGFzICRDRFNfWEFfMl8yJC4gIEZhaWxpbmcKKyAgdGhhdCwgaWYgdGhlIENEIGluIHF1ZXN0aW9uIGhhcyBhbnkgWEEgdHJhY2tzIG9uIGl0LCBpdCB3aWxsIGJlCisgIHJlcG9ydGVkIGFzICRDRFNfWEFfMl8xJC4gIEZpbmFsbHksIGlmIHRoZSBDRCBpbiBxdWVzdGlvbiBoYXMgYW55CisgIGRhdGEgdHJhY2tzIG9uIGl0LCBpdCB3aWxsIGJlIHJlcG9ydGVkIGFzIGEgZGF0YSBDRCAoJENEU19EQVRBXzEkKS4KKworICBUaGlzICRpb2N0bCQgY2FuIHJldHVybjoKKyAgJCQKKyAgXGhhbGlnbnskIyRcIFxoZmlsJiQvKiQgXHJtIyAkKi8kXGhmaWxcY3IKKyAgICBDRFNfTk9fSU5GTyYgbm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlXGNyCisgICAgQ0RTX05PX0RJU0MmIG5vIGRpc2MgaXMgaW5zZXJ0ZWQsIG9yIHRyYXkgaXMgb3BlbmVkXGNyCisgICAgQ0RTX0FVRElPJiBBdWRpbyBkaXNjICgyMzUyIGF1ZGlvIGJ5dGVzL2ZyYW1lKVxjcgorICAgIENEU19EQVRBXzEmIGRhdGEgZGlzYywgbW9kZSAxICgyMDQ4IHVzZXIgYnl0ZXMvZnJhbWUpXGNyCisgICAgQ0RTX1hBXzJfMSYgbWl4ZWQgZGF0YSAoWEEpLCBtb2RlIDIsIGZvcm0gMSAoMjA0OCB1c2VyIGJ5dGVzKVxjcgorICAgIENEU19YQV8yXzImIG1peGVkIGRhdGEgKFhBKSwgbW9kZSAyLCBmb3JtIDEgKDIzMjQgIHVzZXIgYnl0ZXMpXGNyCisgICAgQ0RTX01JWEVEJiBtaXhlZCBhdWRpby9kYXRhIGRpc2NcY3IKKyAgICB9CisgICQkCisgIEZvciBzb21lIGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgZnJhbWUgbGF5b3V0IG9mIHRoZSB2YXJpb3VzIGRpc2MKKyAgdHlwZXMsIHNlZSBhIHJlY2VudCB2ZXJzaW9uIG9mIFxjZHJvbWguCisKK1xpdGVtW0NEUk9NX0NIQU5HRVJfTlNMT1RTXSBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gYQorICBqdWtlLWJveC4gCitcaXRlbVtDRFJPTVJFU0VUXSBSZXNldCB0aGUgZHJpdmUuIAorXGl0ZW1bQ0RST01fR0VUX0NBUEFCSUxJVFldIFJldHVybnMgdGhlICRjYXBhYmlsaXR5JCBmbGFncyBmb3IgdGhlCisgIGRyaXZlLiBSZWZlciB0byBzZWN0aW9uIFxyZWZ7Y2FwYWJpbGl0eX0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKyAgdGhlc2UgZmxhZ3MuCitcaXRlbVtDRFJPTV9MT0NLRE9PUl0gTG9ja3MgdGhlIGRvb3Igb2YgdGhlIGRyaXZlLiAkYXJnID09IFxybTAkCisgIHVubG9ja3MgdGhlIGRvb3IsIGFueSBvdGhlciB2YWx1ZSBsb2NrcyBpdC4KK1xpdGVtW0NEUk9NX0RFQlVHXSBUdXJucyBvbiBkZWJ1Z2dpbmcgaW5mby4gT25seSByb290IGlzIGFsbG93ZWQKKyAgdG8gZG8gdGhpcy4gU2FtZSBzZW1hbnRpY3MgYXMgQ0RST01fTE9DS0RPT1IuCitcZW5ke2Rlc2NyaXB0aW9ufQorCitcc3Vic3Vic2VjdGlvbntEZXZpY2UgZGVwZW5kZW50ICRpb2N0bCRzfQorCitGaW5hbGx5LCBhbGwgb3RoZXIgJGlvY3RsJHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gJGRldl9pb2N0bCgpJCwKK2lmIGltcGxlbWVudGVkLiBObyBtZW1vcnkgYWxsb2NhdGlvbiBvciB2ZXJpZmljYXRpb24gaXMgY2FycmllZCBvdXQuIAorCitcbmV3c2VjdGlvbntIb3cgdG8gdXBkYXRlIHlvdXIgZHJpdmVyfQorCitcYmVnaW57ZW51bWVyYXRlfQorXGl0ZW0gTWFrZSBhIGJhY2t1cCBvZiB5b3VyIGN1cnJlbnQgZHJpdmVyLiAKK1xpdGVtIEdldCBob2xkIG9mIHRoZSBmaWxlcyBcY2Ryb21jXCBhbmQgXGNkcm9taCwgdGhleSBzaG91bGQgYmUgaW4KKyAgdGhlIGRpcmVjdG9yeSB0cmVlIHRoYXQgY2FtZSB3aXRoIHRoaXMgZG9jdW1lbnRhdGlvbi4KK1xpdGVtIE1ha2Ugc3VyZSB5b3UgaW5jbHVkZSBcY2Ryb21oLgorXGl0ZW0gQ2hhbmdlIHRoZSAzcmQgYXJndW1lbnQgb2YgJHJlZ2lzdGVyX2Jsa2RldiQgZnJvbQorJFwmPHlvdXItZHJpdmU+X2ZvcHMkIHRvICRcJmNkcm9tX2ZvcHMkLiAKK1xpdGVtIEp1c3QgYWZ0ZXIgdGhhdCBsaW5lLCBhZGQgdGhlIGZvbGxvd2luZyB0byByZWdpc3RlciB3aXRoIHRoZSBcVUNEOgorICAkJHJlZ2lzdGVyX2Nkcm9tKFwmPHlvdXItZHJpdmU+X2luZm8pOyQkCisgIFNpbWlsYXJseSwgYWRkIGEgY2FsbCB0byAkdW5yZWdpc3Rlcl9jZHJvbSgpJCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UuCitcaXRlbSBDb3B5IGFuIGV4YW1wbGUgb2YgdGhlIGRldmljZS1vcGVyYXRpb25zICRzdHJ1Y3QkIHRvIHlvdXIKKyAgc291cmNlLCBcZWcsIGZyb20ge1x0dCB7Y20yMDYuY319ICRjbTIwNl9kb3BzJCwgYW5kIGNoYW5nZSBhbGwKKyAgZW50cmllcyB0byBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIHlvdXIgZHJpdmVyLCBvciBuYW1lcyB5b3UganVzdAorICBoYXBwZW4gdG8gbGlrZS4gSWYgeW91ciBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGEgY2VydGFpbiBmdW5jdGlvbiwKKyAgbWFrZSB0aGUgZW50cnkgJE5VTEwkLiBBdCB0aGUgZW50cnkgJGNhcGFiaWxpdHkkIHlvdSBzaG91bGQgbGlzdCBhbGwKKyAgY2FwYWJpbGl0aWVzIHlvdXIgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cy4gSWYgeW91ciBkcml2ZXIKKyAgaGFzIGEgY2FwYWJpbGl0eSB0aGF0IGlzIG5vdCBsaXN0ZWQsIHBsZWFzZSBzZW5kIG1lIGEgbWVzc2FnZS4KK1xpdGVtIENvcHkgdGhlICRjZHJvbV9kZXZpY2VfaW5mbyQgZGVjbGFyYXRpb24gZnJvbSB0aGUgc2FtZSBleGFtcGxlCisgIGRyaXZlciwgYW5kIG1vZGlmeSB0aGUgZW50cmllcyBhY2NvcmRpbmcgdG8geW91ciBuZWVkcy4gSWYgeW91cgorICBkcml2ZXIgZHluYW1pY2FsbHkgZGV0ZXJtaW5lcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBoYXJkd2FyZSwgdGhpcworICBzdHJ1Y3R1cmUgc2hvdWxkIGFsc28gYmUgZGVjbGFyZWQgZHluYW1pY2FsbHkuIAorXGl0ZW0gSW1wbGVtZW50IGFsbCBmdW5jdGlvbnMgaW4geW91ciAkPGRldmljZT5fZG9wcyQgc3RydWN0dXJlLAorICBhY2NvcmRpbmcgdG8gcHJvdG90eXBlcyBsaXN0ZWQgaW4gXGNkcm9taCwgYW5kIHNwZWNpZmljYXRpb25zIGdpdmVuCisgIGluIHNlY3Rpb25+XHJlZntjZHJvbS5jfS4gTW9zdCBsaWtlbHkgeW91IGhhdmUgYWxyZWFkeSBpbXBsZW1lbnRlZAorICB0aGUgY29kZSBpbiBhIGxhcmdlIHBhcnQsIGFuZCB5b3Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IG5lZWQgdG8gYWRhcHQgdGhlCisgIHByb3RvdHlwZSBhbmQgcmV0dXJuIHZhbHVlcy4KK1xpdGVtIFJlbmFtZSB5b3VyICQ8ZGV2aWNlPl9pb2N0bCgpJCBmdW5jdGlvbiB0byAkYXVkaW9faW9jdGwkIGFuZAorICBjaGFuZ2UgdGhlIHByb3RvdHlwZSBhIGxpdHRsZS4gUmVtb3ZlIGVudHJpZXMgbGlzdGVkIGluIHRoZSBmaXJzdAorICBwYXJ0IGluIHNlY3Rpb25+XHJlZntjZHJvbS1pb2N0bH0sIGlmIHlvdXIgY29kZSB3YXMgT0ssIHRoZXNlIGFyZQorICBqdXN0IGNhbGxzIHRvIHRoZSByb3V0aW5lcyB5b3UgYWRhcHRlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4KK1xpdGVtIFlvdSBtYXkgcmVtb3ZlIGFsbCByZW1haW5pbmcgbWVtb3J5IGNoZWNraW5nIGNvZGUgaW4gdGhlCisgICRhdWRpb19pb2N0bCgpJCBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggYXVkaW8gY29tbWFuZHMgKHRoZXNlIGFyZQorICBsaXN0ZWQgaW4gdGhlIHNlY29uZCBwYXJ0IG9mIHNlY3Rpb25+XHJlZntjZHJvbS1pb2N0bH0pLiBUaGVyZSBpcyBubworICBuZWVkIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBlaXRoZXIsIHNvIG1vc3QgJGNhc2UkcyBpbiB0aGUgJHN3aXRjaCQKKyAgc3RhdGVtZW50IGxvb2sgc2ltaWxhciB0bzoKKyAgJCQKKyAgY2FzZVwgQ0RST01SRUFEVE9DRU5UUllcY29sb24gZ2V0X3RvY19lbnRyeVxiaWdsKChzdHJ1Y3RcIAorICBjZHJvbV90b2NlbnRyeSAqe30pXCBhcmdcYmlncik7CisgICQkCitcaXRlbSBBbGwgcmVtYWluaW5nICRpb2N0bCQgY2FzZXMgbXVzdCBiZSBtb3ZlZCB0byBhIHNlcGFyYXRlCisgIGZ1bmN0aW9uLCAkPGRldmljZT5faW9jdGwkLCB0aGUgZGV2aWNlLWRlcGVuZGVudCAkaW9jdGwkcy4gTm90ZSB0aGF0CisgIG1lbW9yeSBjaGVja2luZyBhbmQgYWxsb2NhdGlvbiBtdXN0IGJlIGtlcHQgaW4gdGhpcyBjb2RlIQorXGl0ZW0gQ2hhbmdlIHRoZSBwcm90b3R5cGVzIG9mICQ8ZGV2aWNlPl9vcGVuKCkkIGFuZAorICAkPGRldmljZT5fcmVsZWFzZSgpJCwgYW5kIHJlbW92ZSBhbnkgc3RyYXRlZ2ljIGNvZGUgKFxpZSwgdHJheQorICBtb3ZlbWVudCwgZG9vciBsb2NraW5nLCBldGMuKS4KK1xpdGVtIFRyeSB0byByZWNvbXBpbGUgdGhlIGRyaXZlcnMuIFdlIGFkdmlzZSB5b3UgdG8gdXNlIG1vZHVsZXMsIGJvdGgKKyAgZm9yIHtcdHQge2Nkcm9tLm99fSBhbmQgeW91ciBkcml2ZXIsIGFzIGRlYnVnZ2luZyBpcyBtdWNoIGVhc2llciB0aGlzCisgIHdheS4KK1xlbmR7ZW51bWVyYXRlfSAKKworXG5ld3NlY3Rpb257VGhhbmtzfQorCitUaGFua3MgdG8gYWxsIHRoZSBwZW9wbGUgaW52b2x2ZWQuICBGaXJzdCwgRXJpayBBbmRlcnNlbiwgd2hvIGhhcwordGFrZW4gb3ZlciB0aGUgdG9yY2ggaW4gbWFpbnRhaW5pbmcgXGNkcm9tY1wgYW5kIGludGVncmF0aW5nIG11Y2gKK1xjZHJvbS1yZWxhdGVkIGNvZGUgaW4gdGhlIDIuMS1rZXJuZWwuICBUaGFua3MgdG8gU2NvdHQgU255ZGVyIGFuZAorR2VyZCBLbm9yciwgd2hvIHdlcmUgdGhlIGZpcnN0IHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBmb3IgU0NTSQorYW5kIElERS1DRCBkcml2ZXJzIGFuZCBhZGRlZCBtYW55IGlkZWFzIGZvciBleHRlbnNpb24gb2YgdGhlIGRhdGEKK3N0cnVjdHVyZXMgcmVsYXRpdmUgdG8ga2VybmVsfjIuMC4gIEZ1cnRoZXIgdGhhbmtzIHRvIEhlaWtvIEVpc3NmZWxkdCwKK1Rob21hcyBRdWlub3QsIEpvbiBUb21icywgS2VuIFBpenppbmksIEViZXJoYXJkIE1cIm9ua2ViZXJnIGFuZCBBbmRyZXcKK0tyb2xsLCB0aGUgXGxpbnV4XCBcY2Ryb21cIGRldmljZSBkcml2ZXIgZGV2ZWxvcGVycyB3aG8gd2VyZSBraW5kCitlbm91Z2ggdG8gZ2l2ZSBzdWdnZXN0aW9ucyBhbmQgY3JpdGljaXNtcyBkdXJpbmcgdGhlIHdyaXRpbmcuIEZpbmFsbHkKK29mIGNvdXJzZSwgSSB3YW50IHRvIHRoYW5rIExpbnVzIFRvcnZhbGRzIGZvciBtYWtpbmcgdGhpcyBwb3NzaWJsZSBpbgordGhlIGZpcnN0IHBsYWNlLgorCitcdmZpbGwKKyQgXHZlcnNpb25cICQKK1xlamVjdAorXGVuZHtkb2N1bWVudH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vY2R1MzFhIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9jZHUzMWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2NjdkYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vY2R1MzFhCkBAIC0wLDAgKzEsMTk2IEBACisKKwkJQ0RVMzFBL0NEVTMzQSBEcml2ZXIgSW5mbworCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luZm9ybWF0aW9uIG9uIHRoZSBTb255IENEVTMxQS9DRFUzM0EgQ0RST00gZHJpdmVyIGZvciB0aGUgTGludXgKK2tlcm5lbC4KKworICAgQ29yZXkgTWlueWFyZCAobWlueWFyZEBtZXRyb25ldC5jb20pCisgIAorICAgQ29sb3NzaWFucyAzOjE3CisKK0NydWRlIFRhYmxlIG9mIENvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFNldHRpbmcgVXAgdGhlIEhhcmR3YXJlCisgIENvbmZpZ3VyaW5nIHRoZSBLZXJuZWwKKyAgQ29uZmlndXJpbmcgYXMgYSBNb2R1bGUKKyAgRHJpdmVyIFNwZWNpYWwgRmVhdHVyZXMKKworICAKK1RoaXMgZGV2aWNlIGRyaXZlciBoYW5kbGVzIFNvbnkgQ0RVMzFBL0NEVTMzQSBDRFJPTSBkcml2ZXMgYW5kCitwcm92aWRlcyBhIGNvbXBsZXRlIGJsb2NrLWxldmVsIGludGVyZmFjZSBhcyB3ZWxsIGFzIGFuIGlvY3RsKCkKK2ludGVyZmFjZSBhcyBzcGVjaWZpZWQgaW4gaW5jbHVkZS9saW51eC9jZHJvbS5oKS4gIFdpdGggdGhpcworaW50ZXJmYWNlLCBDRFJPTXMgY2FuIGJlIGFjY2Vzc2VkLCBzdGFuZGFyZCBhdWRpbyBDRHMgY2FuIGJlIHBsYXllZAorYmFjayBub3JtYWxseSwgYW5kIENEIGF1ZGlvIGluZm9ybWF0aW9uIGNhbiBiZSByZWFkIG9mZiB0aGUgZHJpdmUuCisKK05vdGUgdGhhdCB0aGlzIHdpbGwgb25seSB3b3JrIGZvciBDRFUzMUEvQ0RVMzNBIGRyaXZlcy4gIFNvbWUgdmVuZG9ycworbWFya2V0IHRoZWlyIGRyaXZlcyBhcyBDRFUzMUEgY29tcGF0aWJsZS4gIFRoZXkgbGllLiAgVGhlaXIgZHJpdmVzIGFyZQorcmVhbGx5IENEVTMxQSBoYXJkd2FyZSBpbnRlcmZhY2UgY29tcGF0aWJsZSAodGhleSBjYW4gcGx1ZyBpbnRvIHRoZQorc2FtZSBjYXJkKS4gIFRoZXkgYXJlIG5vdCBzb2Z0d2FyZSBjb21wYXRpYmxlLgorCitTZXR0aW5nIFVwIHRoZSBIYXJkd2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIENEVTMxQSBkcml2ZXIgaXMgdW5hYmxlIHRvIHNhZmVseSB0ZWxsIGlmIGFuIGludGVyZmFjZSBjYXJkIGlzCitwcmVzZW50IHRoYXQgaXQgY2FuIHVzZSBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgY2FyZCBkb2VzIG5vdCBhbm5vdW5jZQoraXRzIHByZXNlbmNlIGluIGFueSB3YXkgYmVzaWRlcyBwbGFjaW5nIDQgSS9PIGxvY2F0aW9ucyBpbiBtZW1vcnkuICBJdAordXNlZCB0byBqdXN0IHByb2JlIG1lbW9yeSBhbmQgYXR0ZW1wdCBjb21tYW5kcywgYnV0IExpbnVzIHdpc2VseSBhc2tlZAorbWUgdG8gcmVtb3ZlIHRoYXQgYmVjYXVzZSBpdCBjb3VsZCByZWFsbHkgc2NyZXcgdXAgb3RoZXIgaGFyZHdhcmUgaW4KK3RoZSBzeXN0ZW0uCisKK0JlY2F1c2Ugb2YgdGhpcywgeW91IG11c3QgdGVsbCB0aGUga2VybmVsIHdoZXJlIHRoZSBkcml2ZSBpbnRlcmZhY2UKK2lzLCB3aGF0IGludGVycnVwdHMgYXJlIHVzZWQsIGFuZCBwb3NzaWJseSBpZiB5b3UgYXJlIG9uIGEgUEFTLTE2Citzb3VuZGNhcmQuCisKK0lmIHlvdSBoYXZlIHRoZSBTb255IENEVTMxQS9DRFUzM0EgZHJpdmUgaW50ZXJmYWNlIGNhcmQsIHRoZSBmb2xsb3dpbmcKK2RpYWdyYW0gd2lsbCBoZWxwIHlvdSBzZXQgaXQgdXAuICBJZiB5b3UgaGF2ZSBhbm90aGVyIGNhcmQsIHlvdSBhcmUgb24KK3lvdXIgb3duLiAgWW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIEkvTyBhZGRyZXNzIGFuZCBpbnRlcnJ1cHQgaXMKK25vdCB1c2VkIGJ5IGFub3RoZXIgY2FyZCBpbiB0aGUgc3lzdGVtLiAgWW91IHdpbGwgbmVlZCB0byBrbm93IHRoZSBJL08KK2FkZHJlc3MgYW5kIGludGVycnVwdCB5b3UgaGF2ZSBzZXQuICBOb3RlIHRoYXQgdXNlIG9mIGludGVycnVwdHMgaXMKK2hpZ2hseSByZWNvbW1lbmRlZCwgaWYgcG9zc2libGUsIGl0IHJlYWxseSBjdXRzIGRvd24gb24gQ1BVIHVzZWQuCitVbmZvcnR1bmF0ZWx5LCBtb3N0IHNvdW5kY2FyZHMgZG8gbm90IHN1cHBvcnQgaW50ZXJydXB0cyBmb3IgdGhlaXIKK0NEUk9NIGludGVyZmFjZXMuICBCeSBkZWZhdWx0LCB0aGUgU29ueSBpbnRlcmZhY2UgY2FyZCBjb21lcyB3aXRoCitpbnRlcnJ1cHRzIGRpc2FibGVkLgorICAgCisgICAgICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgIEpQMSAgICAgfCAgMzQgUGluIENvbm4gICAgfCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgIEpQMiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgIEpQMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgIEpQNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0rCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICArLSsKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgfCAgRXh0ZXJuYWwKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgfCAgQ29ubmVjdG9yCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8IHwKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstKworICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tKworICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tKworICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgCisgICAgICBKUDEgc2V0cyB0aGUgQmFzZSBBZGRyZXNzLCB1c2luZyB0aGUgZm9sbG93aW5nIHNldHRpbmdzOgorICAgCisgICAgICAgIEFkZHJlc3MgICAgICAgICBQaW4gMSAgICAgICAgICAgUGluIDIKKyAgICAgICAgLS0tLS0tLSAgICAgICAgIC0tLS0tICAgICAgICAgICAtLS0tLQorICAgICAgICAweDMyMCAgICAgICAgICAgU2hvcnQgICAgICAgICAgIFNob3J0CisgICAgICAgIDB4MzMwICAgICAgICAgICBTaG9ydCAgICAgICAgICAgT3BlbgorICAgICAgICAweDM0MCAgICAgICAgICAgT3BlbiAgICAgICAgICAgIFNob3J0CisgICAgICAgIDB4MzYwICAgICAgICAgICBPcGVuICAgICAgICAgICAgT3BlbgorICAgCisgICAgICBKUDIgYW5kIEpQMyBjb25maWd1cmUgdGhlIERNQSBjaGFubmVsOyB0aGV5IG11c3QgYmUgc2V0IHRoZSBzYW1lLgorICAgCisgICAgICAgIERNQSAgICAgICAgICAgICBQaW4gMSAgICAgICAgICAgUGluIDIgICAgICAgICAgIFBpbiAzCisgICAgICAgIC0tLSAgICAgICAgICAgICAtLS0tLSAgICAgICAgICAgLS0tLS0gICAgICAgICAgIC0tLS0tCisgICAgICAgIDEgICAgICAgICAgICAgICBPbiAgICAgICAgICAgICAgT2ZmICAgICAgICAgICAgIE9uCisgICAgICAgIDIgICAgICAgICAgICAgICBPZmYgICAgICAgICAgICAgT24gICAgICAgICAgICAgIE9mZgorICAgICAgICAzICAgICAgICAgICAgICAgT2ZmICAgICAgICAgICAgIE9mZiAgICAgICAgICAgICBPbgorICAgCisgICAgICBKUDQgQ29uZmlndXJlcyB0aGUgSVJROgorICAgCisgICAgICAgIElSUSAgICAgUGluIDEgICAgICAgICAgIFBpbiAyICAgICAgICAgICBQaW4gMyAgICAgICAgICAgUGluIDQKKyAgICAgICAgLS0tICAgICAtLS0tLSAgICAgICAgICAgLS0tLS0gICAgICAgICAgIC0tLS0tICAgICAgICAgICAtLS0tLQorICAgICAgICAzICAgICAgIE9mZiAgICAgICAgICAgICBPZmYgICAgICAgICAgICAgT24gICAgICAgICAgICAgIE9mZgorICAgICAgICA0ICAgICAgIE9mZiAgICAgICAgICAgICBPZmYqICAgICAgICAgICAgT2ZmICAgICAgICAgICAgIE9uCisgICAgICAgIDUgICAgICAgT24gICAgICAgICAgICAgIE9mZiAgICAgICAgICAgICBPZmYgICAgICAgICAgICAgT2ZmCisgICAgICAgIDYgICAgICAgT2ZmICAgICAgICAgICAgIE9uICAgICAgICAgICAgICBPZmYgICAgICAgICAgICAgT2ZmCisgICAKKyAgICAgICAgICAgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0byBzZXQgdGhpcyBmb3IgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICA0LCBidXQgSSB0aGluayB0aGF0IGlzIGEgbWlzdGFrZS4KKworTm90ZSB0aGF0IGlmIHlvdSBoYXZlIGFub3RoZXIgaW50ZXJmYWNlIGNhcmQsIHlvdSB3aWxsIG5lZWQgdG8gbG9vayBhdAordGhlIGRvY3VtZW50YXRpb24gdG8gZmluZCB0aGUgSS9PIGJhc2UgYWRkcmVzcy4gIFRoaXMgaXMgc3BlY2lmaWVkIHRvCit0aGUgU0xDRC5TWVMgZHJpdmVyIGZvciBET1Mgd2l0aCB0aGUgL0I6IHBhcmFtZXRlciwgc28geW91IGNhbiBsb29rIGF0Cit5b3UgRE9TIGRyaXZlciBzZXR1cCB0byBmaW5kIHRoZSBhZGRyZXNzLCBpZiBuZWNlc3NhcnkuCisKK0NvbmZpZ3VyaW5nIHRoZSBLZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IG11c3QgdGVsbCB0aGUga2VybmVsIHdoZXJlIHRoZSBkcml2ZSBpcyBhdCBib290IHRpbWUuICBUaGlzIGNhbiBiZQorZG9uZSBhdCB0aGUgTGludXggYm9vdCBwcm9tcHQsIGJ5IHVzaW5nIExJTE8sIG9yIGJ5IHVzaW5nIEJvb3RsaW4uCitOb3RlIHRoYXQgdGhpcyBpcyBubyBzdWJzdGl0dXRlIGZvciBIT1dUT3MgYW5kIExJTE8gZG9jdW1lbnRhdGlvbiwgaWYKK3lvdSBhcmUgY29uZnVzZWQgcGxlYXNlIHJlYWQgdGhvc2UgZm9yIGluZm8gb24gYm9vdGxpbmUgY29uZmlndXJhdGlvbgorYW5kIExJTE8uCisKK0F0IHRoZSBsaW51eCBib290IHByb21wdCwgcHJlc3MgdGhlIEFMVCBrZXkgYW5kIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUKK2FmdGVyIHRoZSBib290IG5hbWUgKHlvdSBjYW4gbGV0IHRoZSBrZXJuZWwgYm9vdCwgaXQgd2lsbCB0ZWxsIHlvdSB0aGUKK2RlZmF1bHQgYm9vdCBuYW1lIHdoaWxlIGJvb3RpbmcpOgorCisJY2R1MzFhPTxiYXNlIGFkZHJlc3M+LDxpbnRlcnJ1cHQ+WyxQQVNdCisKK1RoZSBiYXNlIGFkZHJlc3MgbmVlZHMgdG8gaGF2ZSAiMHgiIGluIGZyb250IG9mIGl0LCBzaW5jZSBpdCBpcyBpbgoraGV4LiAgRm9yIGluc3RhbmNlLCB0byBjb25maWd1cmUgYSBkcml2ZSBhdCBhZGRyZXNzIDMyMCBvbiBpbnRlcnJ1cHQgNSwKK3VzZSB0aGUgZm9sbG93aW5nOgorCisJY2R1MzFhPTB4MzIwLDUKKworSSB1c2UgdGhlIGZvbGxvd2luZyBib290IGxpbmU6CisKKwljZHUzMWE9MHgxZjg4LDAsUEFTCisKK2JlY2F1c2UgSSBoYXZlIGEgUEFTLTE2IHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJydXB0IGZvciB0aGUKK0NEVTMxQSBpbnRlcmZhY2UuCisKK0FkZGluZyB0aGlzIGFzIGFuIGFwcGVuZCBsaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIC9ldGMvbGlsby5jb25mCitmaWxlIHdpbGwgc2V0IGl0IGZvciBsaWxvIGNvbmZpZ3VyYXRpb25zLiAgSSBoYXZlIHRoZSBmb2xsb3dpbmcgYXMgdGhlCitmaXJzdCBsaW5lIGluIG15IGxpbG8uY29uZiBmaWxlOgorCisJYXBwZW5kPSJjZHUzMWE9MHgxZjg4LDAiCisKK0knbSBub3Qgc3VyZSBob3cgdG8gc2V0IHVwIEJvb3RsaW4gKEkgaGF2ZSBuZXZlciB1c2VkIGl0KSwgaWYgc29tZW9uZQord291bGQgbGlrZSB0byBmaWxsIGluIHRoaXMgc2VjdGlvbiBwbGVhc2UgZG8uCisKKworQ29uZmlndXJpbmcgYXMgYSBNb2R1bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgbG9hZGluZyBhcyBhIG1vZHVsZS4gIEhvd2V2ZXIsIHlvdSBtdXN0IHNwZWNpZnkKK3RoZSBib290IGFkZHJlc3MgYW5kIGludGVycnVwdCBvbiB0aGUgYm9vdCBsaW5lIHRvIGluc21vZC4gIFlvdSBjYW4ndAordXNlIG1vZHByb2JlIHRvIGxvYWQgaXQsIHNpbmNlIG1vZHByb2JlIGRvZXNuJ3Qgc3VwcG9ydCBzZXR0aW5nCit2YXJpYWJsZXMuCisKK0FueXdheSwgSSB1c2UgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGxvYWQgbXkgZHJpdmVyIGFzIGEgbW9kdWxlCisKKyAgL3NiaW4vaW5zbW9kIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL21pc2MvY2R1MzFhLm8gY2R1MzFhX3BvcnQ9MHgxZjg4CisKK1lvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHRoZSBkcml2ZXI6CisKKyAgY2R1MzFhX3BvcnQ9PEkvTyBhZGRyZXNzPiAtIHNldHMgdGhlIGJhc2UgSS9PLiAgSWYgaGV4LCBwdXQgMHggaW4KKwkJCSAgICAgIGZyb250IG9mIGl0LiAgVGhpcyBtdXN0IGJlIHNwZWNpZmllZC4KKworICBjZHUzMWFfaXJxPTxpbnRlcnJ1cHQ+IC0gU2V0cyB0aGUgaW50ZXJydXB0IG51bWJlci4gIExlYXZpbmcgdGhpcworCQkJICAgb2ZmIHdpbGwgdHVybiBpbnRlcnJ1cHRzIG9mZi4KKworCitEcml2ZXIgU3BlY2lhbCBGZWF0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBmZWF0dXJlcyBiZXlvbmQgdGhlIG5vcm1hbCBhdWRpbyBhbmQgQ0QtUk9NCitmdW5jdGlvbnMgb2YgdGhlIGRyaXZlLgorCisyMDQ4IGJ5dGUgYnVmZmVyIG1vZGUKKworSWYgYSBkaXNrIGlzIG1vdW50ZWQgd2l0aCAtbyBibG9jaz0yMDQ4LCBkYXRhIGlzIGNvcGllZCBzdHJhaWdodCBmcm9tCit0aGUgZHJpdmUgZGF0YSBwb3J0IHRvIHRoZSBidWZmZXIuICBPdGhlcndpc2UsIHRoZSByZWFkYWhlYWQgYnVmZmVyCittdXN0IGJlIGludm9sdmVkIHRvIGhvbGQgdGhlIG90aGVyIDFLIG9mIGRhdGEgd2hlbiBhIDFLIGJsb2NrCitvcGVyYXRpb24gaXMgZG9uZS4gIE5vdGUgdGhhdCB3aXRoIDIwNDggYnl0ZSBibG9ja3MgeW91IGNhbm5vdCBleGVjdXRlCitmaWxlcyBmcm9tIHRoZSBDRC4KKworWEEgY29tcGF0aWJpbGl0eQorCitUaGUgZHJpdmVyIHNob3VsZCBzdXBwb3J0IFhBIGRpc2tzIGZvciBib3RoIHRoZSBDRFUzMUEgYW5kIENEVTMzQS4gIEl0Citkb2VzIHRoaXMgdHJhbnNwYXJlbnRseSwgdGhlIHVzaW5nIHByb2dyYW0gZG9lc24ndCBuZWVkIHRvIHNldCBpdC4KKworTXVsdGktU2Vzc2lvbgorCitBIG11bHRpLXNlc3Npb24gZGlzayBsb29rcyBqdXN0IGxpa2UgYSBub3JtYWwgZGlzayB0byB0aGUgdXNlci4gIEp1c3QKK21vdW50IG9uZSBub3JtYWxseSwgYW5kIGFsbCB0aGUgZGF0YSBzaG91bGQgYmUgdGhlcmUuICBBIHNwZWNpYWwKK3RoYW5rcyB0byBLb2VuIGZvciBoZWxwIHdpdGggdGhpcyEKKworUmF3IHNlY3RvciBJL08KKworVXNpbmcgdGhlIENEUk9NUkVBREFVRElPIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWQgcmF3IGF1ZGlvIGFuZCBkYXRhCit0cmFja3MuICBCb3RoIG9wZXJhdGlvbnMgcmV0dXJuIDIzNTIgYnl0ZXMgcGVyIHNlY3Rvci4gIE9uIHRoZSBkYXRhCit0cmFja3MsIHRoZSBmaXJzdCAxMiBieXRlcyBpcyBub3QgcmV0dXJuZWQgYnkgdGhlIGRyaXZlIGFuZCB0aGUgdmFsdWUKK29mIHRoYXQgZGF0YSBpcyBpbmRldGVybWluYXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9jbTIwNiBiL0RvY3VtZW50YXRpb24vY2Ryb20vY20yMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwMzY4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vY20yMDYKQEAgLTAsMCArMSwxODUgQEAKK1RoaXMgaXMgdGhlIHJlYWRtZSBmaWxlIGZvciB0aGUgZHJpdmVyIGZvciB0aGUgUGhpbGlwcy9MTVMgY2Ryb20gZHJpdmUKK2NtMjA2IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNtMjYwIGhvc3QgYWRhcHRlciBjYXJkLiAKKworCQkJCShjKSAxOTk1IERhdmlkIEEuIHZhbiBMZWV1d2VuCisgICAKK0NoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjk5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBJbnRlcmZhY2luZyB0byB0aGUga2VybmVsIGlzIHJvdXRlZCB0aG91Z2ggYW4gZXh0cmEgaW50ZXJmYWNlIGxheWVyLCAKKyAgY2Ryb20uYy4gVGhpcyBhbGxvd3MgcnVudGltZS1jb25maWd1cmFibGUgYGJlaGF2aW9yJyBvZiB0aGUgY2Ryb20tZHJpdmUsIAorICBpbmRlcGVuZGVudCBvZiB0aGUgZHJpdmVyLiAKKworRmVhdHVyZXMgc2luY2UgdmVyc2lvbiAwLjMzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gRnVsbCBhdWRpbyBzdXBwb3J0LCB0aGF0IGlzLCBib3RoICB3b3JrbWFuLCB3b3JrYm9uZSBhbmQgY2RwIHdvcmsKKyAgbm93IHJlYXNvbmFibHkuIFJlYWRpbmcgVE9DIHN0aWxsIHRha2VzIHNvbWUgdGltZS4geG1jZCBoYXMgYmVlbgorICByZXBvcnRlZCB0byBydW4gc3VjY2Vzc2Z1bGx5LiAKKy0gTWFkZSBhdXRvLXByb2JlIGNvZGUgYSBsaXR0bGUgYmV0dGVyLCBJIGhvcGUKKworRmVhdHVyZXMgc2luY2UgdmVyc2lvbiAwLjI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gRnVsbCBzcGVlZCB0cmFuc2ZlciByYXRlICgzMDAga0IvcykuCistIE1pbmltdW0ga2VybmVsIG1lbW9yeSB1c2FnZSBmb3IgYnVmZmVyaW5nIChsZXNzIHRoYW4gMyBrQikuCistIE11bHRpc2Vzc2lvbiBzdXBwb3J0LgorLSBUcmF5IGxvY2tpbmcuCistIFN0YXRpc3RpY3Mgb2YgZHJpdmVyIGFjY2Vzc2libGUgdG8gdGhlIHVzZXIuCistIE1vZHVsZSBzdXBwb3J0LgorLSBBdXRvLXByb2Jpbmcgb2YgYWRhcHRlciBjYXJkJ3MgYmFzZSBwb3J0IGFuZCBpcnEgbGluZSwKKyAgYWxzbyBjb25maWd1cmFibGUgYXQgYm9vdCB0aW1lIG9yIG1vZHVsZSBsb2FkIHRpbWUuCisKKworRGVjaWRlIGhvdyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgZHJpdmVyLiBUaGVyZSBhcmUgdHdvCitvcHRpb25zOgorCisgICAoYSkgaW5zdGFsbGluZyB0aGUgZHJpdmVyIGFzIGEgcmVzaWRlbnQgcGFydCBvZiB0aGUga2VybmVsCisgICAoYikgY29tcGlsaW5nIHRoZSBkcml2ZXIgYXMgYSBsb2FkYWJsZSBtb2R1bGUKKworICAgRnVydGhlciwgeW91IG11c3QgZGVjaWRlIGlmIHlvdSBhcmUgZ29pbmcgdG8gc3BlY2lmeSB0aGUgYmFzZSBwb3J0CisgICBhZGRyZXNzIGFuZCB0aGUgaW50ZXJydXB0IHJlcXVlc3QgbGluZSBvZiB0aGUgYWRhcHRlciBjYXJkIGNtMjYwIGFzCisgICBib290IG9wdGlvbnMgZm9yIChhKSwgbW9kdWxlIHBhcmFtZXRlcnMgZm9yIChiKSwgdXNlIGF1dG9tYXRpYworICAgcHJvYmluZyBvZiB0aGVzZSB2YWx1ZXMsIG9yIGhhcmQtd2lyZSB5b3VyIGFkYXB0b3IgY2FyZCdzIHNldHRpbmdzCisgICBpbnRvIHRoZSBzb3VyY2UgY29kZS4gSWYgeW91IGRvbid0IGNhcmUsIHlvdSBjYW4gY2hvb3NlIAorICAgYXV0b3Byb2JpbmcsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiBJbiB0aGF0IGNhc2UgeW91IGNhbiBtb3ZlIG9uIHRvCisgICB0aGUgbmV4dCBzdGVwLgorCitDb21waWxpbmcgdGhlIGtlcm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIG1vdmUgdG8gL3Vzci9zcmMvbGludXggYW5kIGRvIGEgCisKKwltYWtlIGNvbmZpZworCisgICBJZiB5b3UgaGF2ZSBjaG9zZW4gb3B0aW9uIChhKSwgYW5zd2VyIHllcyB0byBDT05GSUdfQ00yMDYgYW5kCisgICBDT05GSUdfSVNPOTY2MF9GUy4KKworICAgSWYgeW91IGhhdmUgY2hvc2VuIG9wdGlvbiAoYiksIGFuc3dlciB5ZXMgdG8gQ09ORklHX01PRFZFUlNJT05TCisgICBhbmQgbm8gKCEpIHRvIENPTkZJR19DTTIwNiBhbmQgQ09ORklHX0lTTzk2NjBfRlMuIAorCisyKSB0aGVuIGRvIGEgCisJCisJbWFrZSBjbGVhbjsgbWFrZSB6SW1hZ2U7IG1ha2UgbW9kdWxlcworCiszKSBkbyB0aGUgdXN1YWwgdGhpbmdzIHRvIGluc3RhbGwgYSBuZXcgaW1hZ2UgKGJhY2t1cCB0aGUgb2xkIG9uZSwgcnVuCisgICBgcmRldiAtUiB6SW1hZ2UgMScsIGNvcHkgdGhlIG5ldyBpbWFnZSBpbiBwbGFjZSwgcnVuIGxpbG8pLiAgTWlnaHQKKyAgIGJlIGBtYWtlIHpsaWxvJy4KKworVXNpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IHdpbGwgb25seSBvY2Nhc2lvbmFsbHkgdXNlIHRoZSBjZC1yb20gZHJpdmVyLCB5b3UgY2FuIGNob29zZQorb3B0aW9uIChiKSwgaW5zdGFsbCBhcyBhIGxvYWRhYmxlIG1vZHVsZS4gWW91IG1heSBoYXZlIHRvIHJlLWNvbXBpbGUKK3RoZSBtb2R1bGUgd2hlbiB5b3UgdXBncmFkZSB0aGUga2VybmVsIHRvIGEgbmV3IHZlcnNpb24uIAorCitTaW5jZSB2ZXJzaW9uIDAuOTYsIG11Y2ggb2YgdGhlIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gdHJhbnNmZXJyZWQgdG8KK2EgZ2VuZXJpYyBjZHJvbSBpbnRlcmZhY2UgaW4gdGhlIGZpbGUgY2Ryb20uYy4gVGhlIG1vZHVsZSBjbTIwNi5vCitkZXBlbmRzIG9uIGNkcm9tLm8uIElmIHRoZSBsYXR0ZXIgaXMgbm90IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwKK3lvdSBtdXN0IGV4cGxpY2l0bHkgbG9hZCBpdCBiZWZvcmUgY20yMDYubzoKKworCSBpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9jZHJvbS5vCisKK1RvIGluc3RhbGwgdGhlIG1vZHVsZSwgeW91IHVzZSB0aGUgY29tbWFuZCwgYXMgcm9vdAorCisJaW5zbW9kIC91c3Ivc3JjL2xpbnV4L21vZHVsZXMvY20yMDYubworCitZb3UgY2FuIHNwZWNpZnkgdGhlIGJhc2UgYWRkcmVzcyBvbiB0aGUgY29tbWFuZCBsaW5lIGFzIHdlbGwgYXMgdGhlIGlycSAKK2xpbmUgdG8gYmUgdXNlZCwgZS5nLgorCisJaW5zbW9kIC91c3Ivc3JjL2xpbnV4L21vZHVsZXMvY20yMDYubyBjbTIwNj0weDMwMCwxMQorCitUaGUgb3JkZXIgb2YgYmFzZSBwb3J0IGFuZCBpcnEgbGluZSBkb2Vzbid0IG1hdHRlcjsgaWYgeW91IHNwZWNpZnkgb25seQorb25lLCB0aGUgb3RoZXIgd2lsbCBoYXZlIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGlsZWQtaW4gZGVmYXVsdC4gIFlvdQorbWF5IGFsc28gaGF2ZSB0byBpbnN0YWxsIHRoZSBmaWxlLXN5c3RlbSBtb2R1bGUgYGlzbzk2NjAubycsIGlmIHlvdQorZGlkbid0IGNvbXBpbGUgdGhhdCBpbnRvIHRoZSBrZXJuZWwuIAorCisKK1VzaW5nIHRoZSBkcml2ZXIgYXMgcGFydCBvZiB0aGUga2VybmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGhhdmUgY2hvc2VuIG9wdGlvbiAoYSksIHlvdSBjYW4gc3BlY2lmeSB0aGUgYmFzZS1wb3J0CithZGRyZXNzIGFuZCBpcnEgb24gdGhlIGxpbG8gYm9vdCBjb21tYW5kIGxpbmUsIGUuZy46CisKKwlMSUxPOiBsaW51eCBjbTIwNj0weDM0MCwxMQorCitUaGlzIGFzc3VtZXMgdGhhdCB5b3VyIGxpbnV4IGtlcm5lbCBpbWFnZSBrZXl3b3JkIGlzIGBsaW51eCcuIAorSWYgeW91IHNwZWNpZnkgZWl0aGVyIElSUSAoMy0tMTEpIG9yIGJhc2UgcG9ydCAoMHgzMDAtLTB4MzcwKSwKK2F1dG8gcHJvYmluZyBpcyB0dXJuZWQgb2ZmIGZvciBib3RoIHNldHRpbmdzLCB0aHVzIHNldHRpbmcgdGhlIAorb3RoZXIgdmFsdWUgdG8gdGhlIGNvbXBpbGVkLWluIGRlZmF1bHQuCisKK05vdGUgdGhhdCB5b3UgY2FuIGFsc28gcHV0IHRoZXNlIHBhcmFtZXRlcnMgaW4gdGhlIGxpbG8gY29uZmlndXJhdGlvbiBmaWxlOgorCisjIGxpbnV4IGNvbmZpZworaW1hZ2UgPSAvdm1saW51egorICAgcm9vdCA9IC9kZXYvaGRhMQorICAgbGFiZWwgPSBMaW51eAorICAgYXBwZW5kID0gImNtMjA2PTB4MzQwLDExIgorICAgcmVhZC1vbmx5CisKKworSWYgbW9kdWxlIHBhcmFtZXRlcnMgYW5kIExJTE8gY29uZmlnIG9wdGlvbnMgZG9uJ3Qgd29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgYXV0b3Byb2JpbmcgZG9lcyBub3Qgd29yaywgeW91IGNhbiBoYXJkLXdpcmUgdGhlIGRlZmF1bHQgdmFsdWVzCitvZiB0aGUgYmFzZSBwb3J0IGFkZHJlc3MgKENNMjA2X0JBU0UpIGFuZCBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lCisoQ00yMDZfSVJRKSBpbnRvIHRoZSBmaWxlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvY2Ryb20vY20yMDYuaC4gQ2hhbmdlCit0aGUgZGVmaW5lcyBvZiBDTTIwNl9JUlEgYW5kIENNMjA2X0JBU0UuCisKKworTW91bnRpbmcgdGhlIGNkcm9tCistLS0tLS0tLS0tLS0tLS0tLS0KKzEpIE1ha2Ugc3VyZSB0aGF0IHRoZSByaWdodCBkZXZpY2UgaXMgaW5zdGFsbGVkIGluIC9kZXYuCisKKyAgCW1rbm9kIC9kZXYvY20yMDZjZCBiIDMyIDAKKworMikgTWFrZSBzdXJlIHRoZXJlIGlzIGEgbW91bnQgcG9pbnQsIGUuZy4sIC9jZHJvbSAKKworCW1rZGlyIC9jZHJvbQorCiszKSBtb3VudCB1c2luZyBhIGNvbW1hbmQgbGlrZSB0aGlzIChydW4gYXMgcm9vdCk6CisKKwltb3VudCAtcnQgaXNvOTY2MCAvZGV2L2NtMjA2Y2QgL2Nkcm9tCisKKzQpIEZvciB1c2VyLW1vdW50cywgYWRkIGEgbGluZSBpbiAvZXRjL2ZzdGFiCisKKwkvZGV2L2NtMjA2Y2QgICAgICAvY2Ryb20gICAgIGlzbzk2NjAgCXJvLG5vYXV0byx1c2VyCisKKyAgIFRoaXMgd2lsbCBhbGxvdyB1c2VycyB0byBnaXZlIHRoZSBjb21tYW5kcworCisJbW91bnQgL2Nkcm9tCisJdW1vdW50IC9jZHJvbQorCitJZiB0aGluZ3MgZG9uJ3Qgd29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBUcnkgdG8gZG8gYSBgZG1lc2cnIHRvIGZpbmQgb3V0IGlmIHRoZSBkcml2ZXIgc2FpZCBhbnl0aGluZyBhYm91dAorICB3aGF0IGlzIGdvaW5nIHdyb25nIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uCisKKy0gVHJ5IHRvIGRvIGEgYGRkIGlmPS9kZXYvY20yMDZjZCB8IG9kIC10YyB8IGxlc3MnIHRvIHJlYWQgZnJvbSB0aGUKKyAgQ0QuCisKKy0gTG9vayBpbiB0aGUgL3Byb2MgZGlyZWN0b3J5IHRvIHNlZSBpZiBgY20yMDYnIHNob3dzIHVwIHVuZGVyIG9uZSBvZgorICBgaW50ZXJydXB0cycsIGBpb3BvcnRzJywgYGRldmljZXMnIG9yIGBtb2R1bGVzJyAoaWYgYXBwbGljYWJsZSkuCisKKworRElTQ0xBSU1FUiAKKy0tLS0tLS0tLS0gCitJIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGlzIGRyaXZlciB3b3Jrcywgb3IgdGhhdCB0aGUgaGFyZHdhcmUgd2lsbAorbm90IGJlIGhhcm1lZCwgYWx0aG91Z2ggSSBjb25zaWRlciBpdCBtb3N0IHVubGlrZWx5LiAKKworSSBob3BlIHRoYXQgeW91J2xsIGZpbmQgdGhpcyBkcml2ZXIgaW4gc29tZSB3YXkgdXNlZnVsLiAKKworCQkJCQlEYXZpZCB2YW4gTGVldXdlbgorCQkJCQlkYXZpZEB0bS50bm8ubmwKKworTm90ZSBmb3IgTGludXggQ0RST00gdmVuZG9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBhcmUgZW5jb3VyYWdlZCB0byBpbmNsdWRlIHRoaXMgZHJpdmVyIG9uIHlvdXIgTGludXggQ0RST00uIElmCit5b3UgZG8sIHlvdSBtaWdodCBjb25zaWRlciBzZW5kaW5nIG1lIGEgZnJlZSBjb3B5IG9mIHRoYXQgY2Qtcm9tLgorWW91IGNhbiBjb250YWN0IG1lIHRocm91Z2ggbXkgZS1tYWlsIGFkZHJlc3MsIGRhdmlkQHRtLnRuby5ubC4gCitJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIGEga2VybmVsIHRvIGJvb3Qgb2ZmIGEgY2Ryb20sIAoreW91IHNob3VsZCBhY3R1YWxseSBzZW5kIG1lIGEgZnJlZSBjb3B5IG9mIHRoYXQgY2Qtcm9tLiAKKworQ29weXJpZ2h0CistLS0tLS0tLS0KK1RoZSBjb3B5cmlnaHQgb2YgdGhlIGNtMjA2IGRyaXZlciBmb3IgTGludXggaXMgCisKKyAgICAoYykgMTk5NSBEYXZpZCBBLiB2YW4gTGVldXdlbgorCitUaGUgZHJpdmVyIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoZSBHTlUgZ2VuZXJhbCBwdWJsaWMKK2xpY2Vuc2UsIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSByb290IG9mIHRoaXMKK3NvdXJjZSB0cmVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9nc2NkIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9nc2NkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMWNhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2dzY2QKQEAgLTAsMCArMSw2MCBAQAorCUdvbGRzdGFyIFI0MjAgQ0QtUm9tIGRldmljZSBkcml2ZXIgUkVBRE1FCisKK0ZvciBhbGwga2luZCBvZiBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgR29sZFN0YXIgUjQyMCBDRFJPTQorYW5kIHRoaXMgTGludXggZGV2aWNlIGRyaXZlciBzZWUgdGhlIFdXVyBwYWdlOgorCisgICAgICAgIGh0dHA6Ly9saW51eC5yei5maC1oYW5ub3Zlci5kZS9+cmF1cGFjaCAgICAgICAgCisKKworICAgICAgSWYgeW91IGFyZSB0aGUgZWRpdG9yIG9mIGEgTGludXggQ0QsIHlvdSBzaG91bGQKKyAgICAgIGVuYWJsZSBnc2NkLmMgd2l0aGluIHlvdXIgYm9vdCBmbG9wcHkga2VybmVsLiBQbGVhc2UsCisgICAgICBzZW5kIG1lIG9uZSBvZiB5b3VyIENEcyBmb3IgZnJlZS4KKworCitUaGlzIGN1cnJlbnQgZHJpdmVyIHZlcnNpb24gMC40YSBvbmx5IHN1cHBvcnRzIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBkaXNrLgorQ3VycmVudGx5IHdlIGhhdmUgbm8gYXVkaW8gYW5kIG5vIG11bHRpc2Vzc2lvbiBvciBYQSBzdXBwb3J0LgorVGhlIHBvbGxpbmcgaW50ZXJmYWNlIGlzIHVzZWQsIG5vIERNQS4KKworCitTb21ldGltZXMgdGhlIEdvbGRTdGFyIFI0MjAgaXMgc29sZCBpbiBhICdSZXZlYWwgTXVsdGltZWRpYSBLaXQnLiBUaGlzIGtpdCdzCitkcml2ZSBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSwgdG9vLgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKK0NoYW5nZSB0byAnL3Vzci9zcmMvbGludXgvZHJpdmVycy9jZHJvbScgYW5kIGVkaXQgdGhlIGZpbGUgJ2dzY2QuaCcuIEluc2VydAordGhlIGkvbyBhZGRyZXNzIG9mIHlvdXIgaW50ZXJmYWNlIGNhcmQuCisKK1RoZSBkZWZhdWx0IGJhc2UgYWRkcmVzcyBpcyAweDM0MC4gVGhpcyB3aWxsIHdvcmsgZm9yIG1vc3QgYXBwbGljYXRpb25zLiAKK0FkZHJlc3Mgc2VsZWN0aW9uIGlzIGFjY29tcGxpc2hlZCBieSBqdW1wZXJzIFBOODAxLTEgdG8gUE44MDEtNCBvbiB0aGUgCitHb2xkU3RhciBJbnRlcmZhY2UgQ2FyZC4KK0FwcHJvcHJpYXRlIHNldHRpbmdzIGFyZTogMHgzMDAsIDB4MzEwLCAweDMyMCwgMHgzMzAsIDB4MzQwLCAweDM1MCwgMHgzNjAKKzB4MzcwLCAweDM4MCwgMHgzOTAsIDB4M0EwLCAweDNCMCwgMHgzQzAsIDB4M0QwLCAweDNFMCwgMHgzRjAgICAgICAgICAgICAgCisKK1RoZW4gZ28gYmFjayB0byAnL3Vzci9zcmMvbGludXgvJyBhbmQgJ21ha2UgY29uZmlnJyB0byBidWlsZCB0aGUgbmV3Citjb25maWd1cmF0aW9uIGZvciB5b3VyIGtlcm5lbC4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBHb2xkU3RhciBkcml2ZXIKK2xpa2UgYSBtb2R1bGUsIGRvbid0IHNlbGVjdCAnR29sZFN0YXIgQ0RST00gc3VwcG9ydCcuIEJ5IHRoZSB3YXksIHlvdQoraGF2ZSB0byBpbmNsdWRlIHRoZSBpc285NjYwIGZpbGVzeXN0ZW0uCisKK05vdyBzdGFydCBjb21waWxpbmcgdGhlIGtlcm5lbCB3aXRoICdtYWtlIHpJbWFnZScuCitJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IGhhdmUgdG8gZG8gJ21ha2UgbW9kdWxlcycgCithbmQgJ21ha2UgbW9kdWxlc19pbnN0YWxsJywgYWRkaXRpb25hbGx5LgorSW5zdGFsbCB5b3VyIG5ldyBrZXJuZWwgYXMgdXN1YWwgLSBtYXliZSB5b3UgZG8gaXQgd2l0aCAnbWFrZSB6bGlsbycuCisKK0JlZm9yZSB5b3UgY2FuIHVzZSB0aGUgZHJpdmVyLCB5b3UgaGF2ZSB0bworICAgbWtub2QgL2Rldi9nc2NkMCBiIDE2IDAKK3RvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgZGV2aWNlIGZpbGUgKHlvdSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlKS4KKworSWYgeW91IHVzZSBtb2R1bGVzLCB5b3UgY2FuIHRyeSB0byBpbnNlcnQgdGhlIGRyaXZlci4KK1NheTogJ2luc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL2dzY2QubycKK29yOiAgJ2luc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL2dzY2QubyBnc2NkPTxhZGRyZXNzPicKK1RoZSBkcml2ZXIgc2hvdWxkIHJlcG9ydCBpdHMgcmVzdWx0cy4KKworVGhhdCdzIGl0ISBNb3VudCBhIGRpc2ssIGkuZS4gJ21vdW50IC1ydCBpc285NjYwIC9kZXYvZ3NjZDAgL2Nkcm9tJworCitGZWVsIGZyZWUgdG8gcmVwb3J0IGVycm9ycyBhbmQgc3VnZ2VzdGlvbnMgdG8gdGhlIGZvbGxvd2luZyBhZGRyZXNzLgorQmUgc3VyZSwgSSdtIHZlcnkgaGFwcHkgdG8gcmVjZWl2ZSB5b3VyIGNvbW1lbnRzIQorIAorICAgICAgICBPbGl2ZXIgUmF1cGFjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFubm92ZXIsIEp1bmkgMTk5NQorKHJhdXBhY2hAbndmczEucnouZmgtaGFubm92ZXIuZGUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZCBiL0RvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzIxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZApAQCAtMCwwICsxLDU3NCBAQAorSURFLUNEIGRyaXZlciBkb2N1bWVudGF0aW9uCitPcmlnaW5hbGx5IGJ5IHNjb3R0IHNueWRlciAgPHNueWRlckBmbmFsZDAuZm5hbC5nb3Y+ICgxOSBNYXkgMTk5NikKK0NhcnJ5aW5nIG9uIHRoZSB0b3JjaCBpczogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4KK05ldyBtYWludGFpbmVycyAoMTkgT2N0IDE5OTgpOiBKZW5zIEF4Ym9lIDxheGJvZUBpbWFnZS5kaz4KKworMS4gSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0KKworVGhlIGlkZS1jZCBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhbGwgQVRBUEkgdmVyIDEuMiB0byBBVEFQSSAyLjYgY29tcGxpYW50IAorQ0RST00gZHJpdmVzIHdoaWNoIGF0dGFjaCB0byBhbiBJREUgaW50ZXJmYWNlLiAgTm90ZSB0aGF0IHNvbWUgQ0RST00gdmVuZG9ycworKGluY2x1ZGluZyBNaXRzdW1pLCBTb255LCBDcmVhdGl2ZSwgQXp0ZWNoLCBhbmQgR29sZHN0YXIpIGhhdmUgbWFkZQorYm90aCBBVEFQSS1jb21wbGlhbnQgZHJpdmVzIGFuZCBkcml2ZXMgd2hpY2ggdXNlIGEgcHJvcHJpZXRhcnkKK2ludGVyZmFjZS4gIElmIHlvdXIgZHJpdmUgdXNlcyBvbmUgb2YgdGhvc2UgcHJvcHJpZXRhcnkgaW50ZXJmYWNlcywKK3RoaXMgZHJpdmVyIHdpbGwgbm90IHdvcmsgd2l0aCBpdCAoYnV0IG9uZSBvZiB0aGUgb3RoZXIgQ0RST00gZHJpdmVycworcHJvYmFibHkgd2lsbCkuICBUaGlzIGRyaXZlciB3aWxsIG5vdCB3b3JrIHdpdGggYEFUQVBJJyBkcml2ZXMgd2hpY2gKK2F0dGFjaCB0byB0aGUgcGFyYWxsZWwgcG9ydC4gIEluIGFkZGl0aW9uLCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZHJpdmUKKyhDeUNEUk9NIENSNTIwaWUpIHdoaWNoIGF0dGFjaGVzIHRvIHRoZSBJREUgcG9ydCBidXQgaXMgbm90IEFUQVBJOwordGhpcyBkcml2ZXIgd2lsbCBub3Qgd29yayB3aXRoIGRyaXZlcyBsaWtlIHRoYXQgZWl0aGVyIChidXQgc2VlIHRoZQorYXp0Y2QgZHJpdmVyKS4KKworVGhpcyBkcml2ZXIgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKworIC0gUmVhZGluZyBmcm9tIGRhdGEgdHJhY2tzLCBhbmQgbW91bnRpbmcgSVNPIDk2NjAgZmlsZXN5c3RlbXMuCisKKyAtIFBsYXlpbmcgYXVkaW8gdHJhY2tzLiAgTW9zdCBvZiB0aGUgQ0RST00gcGxheWVyIHByb2dyYW1zIGZsb2F0aW5nCisgICBhcm91bmQgc2hvdWxkIHdvcms7IEkgdXN1YWxseSB1c2UgV29ya21hbi4KKworIC0gTXVsdGlzZXNzaW9uIHN1cHBvcnQuCisKKyAtIE9uIGRyaXZlcyB3aGljaCBzdXBwb3J0IGl0LCByZWFkaW5nIGRpZ2l0YWwgYXVkaW8gZGF0YSBkaXJlY3RseQorICAgZnJvbSBhdWRpbyB0cmFja3MuICBUaGUgcHJvZ3JhbSBjZGRhMndhdiBjYW4gYmUgdXNlZCBmb3IgdGhpcy4KKyAgIE5vdGUsIGhvd2V2ZXIsIHRoYXQgb25seSBzb21lIGRyaXZlcyBhY3R1YWxseSBzdXBwb3J0IHRoaXMuCisKKyAtIFRoZXJlIGlzIG5vdyBzdXBwb3J0IGZvciBDRFJPTSBjaGFuZ2VycyB3aGljaCBjb21wbHkgd2l0aCB0aGUgCisgICBBVEFQSSAyLjYgZHJhZnQgc3RhbmRhcmQgKHN1Y2ggYXMgdGhlIE5FQyBDRFItMjUxKS4gIFRoaXMgYWRkaXRpb25hbAorICAgZnVuY3Rpb25hbGl0eSBpbmNsdWRlcyBhIGZ1bmN0aW9uIGNhbGwgdG8gcXVlcnkgd2hpY2ggc2xvdCBpcyB0aGUKKyAgIGN1cnJlbnRseSBzZWxlY3RlZCBzbG90LCBhIGZ1bmN0aW9uIGNhbGwgdG8gcXVlcnkgd2hpY2ggc2xvdHMgY29udGFpbgorICAgQ0RzLCBldGMuIEEgc2FtcGxlIHByb2dyYW0gd2hpY2ggZGVtb25zdHJhdGVzIHRoaXMgZnVuY3Rpb25hbGl0eSBpcworICAgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGlzIGZpbGUuICBUaGUgU2FueW8gMy1kaXNjIGNoYW5nZXIKKyAgICh3aGljaCBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBzdGFuZGFyZCkgaXMgYWxzbyBub3cgc3VwcG9ydGVkLgorICAgUGxlYXNlIG5vdGUgdGhlIGRyaXZlciByZWZlcnMgdG8gdGhlIGZpcnN0IENEIGFzIHNsb3QgIyAwLgorCisKKzIuIEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKKzAuIFRoZSBpZGUtY2QgcmVsaWVzIG9uIHRoZSBpZGUgZGlzayBkcml2ZXIuICBTZWUKKyAgIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgaWRlCisgICBkcml2ZXIuCisKKzEuIE1ha2Ugc3VyZSB0aGF0IHRoZSBpZGUgYW5kIGlkZS1jZCBkcml2ZXJzIGFyZSBjb21waWxlZCBpbnRvIHRoZQorICAga2VybmVsIHlvdSdyZSB1c2luZy4gIFdoZW4gY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgaW4gdGhlIHNlY3Rpb24gCisgICBlbnRpdGxlZCAiRmxvcHB5LCBJREUsIGFuZCBvdGhlciBibG9jayBkZXZpY2VzIiwgc2F5IGVpdGhlciBgWScgCisgICAod2hpY2ggd2lsbCBjb21waWxlIHRoZSBzdXBwb3J0IGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCkgb3IgYE0nCisgICAodG8gY29tcGlsZSBzdXBwb3J0IGFzIGEgbW9kdWxlIHdoaWNoIGNhbiBiZSBsb2FkZWQgYW5kIHVubG9hZGVkKQorICAgdG8gdGhlIG9wdGlvbnM6IAorCisgICAgICBFbmhhbmNlZCBJREUvTUZNL1JMTCBkaXNrL2Nkcm9tL3RhcGUvZmxvcHB5IHN1cHBvcnQKKyAgICAgIEluY2x1ZGUgSURFL0FUQVBJIENEUk9NIHN1cHBvcnQKKworICAgYW5kIGBubycgdG8KKworICAgICAgVXNlIG9sZCBkaXNrLW9ubHkgZHJpdmVyIG9uIHByaW1hcnkgaW50ZXJmYWNlCisKKyAgIERlcGVuZGluZyBvbiB3aGF0IHR5cGUgb2YgSURFIGludGVyZmFjZSB5b3UgaGF2ZSwgeW91IG1heSBuZWVkIHRvCisgICBzcGVjaWZ5IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgU2VlCisgICBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisKKzIuIFlvdSBzaG91bGQgYWxzbyBlbnN1cmUgdGhhdCB0aGUgaXNvOTY2MCBmaWxlc3lzdGVtIGlzIGVpdGhlcgorICAgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG9yIGF2YWlsYWJsZSBhcyBhIGxvYWRhYmxlIG1vZHVsZS4gIFlvdQorICAgY2FuIHNlZSBpZiBhIGZpbGVzeXN0ZW0gaXMga25vd24gdG8gdGhlIGtlcm5lbCBieSBjYXR0aW5nCisgICAvcHJvYy9maWxlc3lzdGVtcy4KKworMy4gVGhlIENEUk9NIGRyaXZlIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gdGhlIGhvc3Qgb24gYW4gSURFCisgICBpbnRlcmZhY2UuICBFYWNoIGludGVyZmFjZSBvbiBhIHN5c3RlbSBpcyBkZWZpbmVkIGJ5IGFuIEkvTyBwb3J0CisgICBhZGRyZXNzIGFuZCBhbiBJUlEgbnVtYmVyLCB0aGUgc3RhbmRhcmQgYXNzaWdubWVudHMgYmVpbmcKKyAgIDB4MWYwIGFuZCAxNCBmb3IgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGFuZCAweDE3MCBhbmQgMTUgZm9yIHRoZQorICAgc2Vjb25kYXJ5IGludGVyZmFjZS4gIEVhY2ggaW50ZXJmYWNlIGNhbiBjb250cm9sIHVwIHRvIHR3byBkZXZpY2VzLAorICAgd2hlcmUgZWFjaCBkZXZpY2UgY2FuIGJlIGEgaGFyZCBkcml2ZSwgYSBDRFJPTSBkcml2ZSwgYSBmbG9wcHkgZHJpdmUsIAorICAgb3IgYSB0YXBlIGRyaXZlLiAgVGhlIHR3byBkZXZpY2VzIG9uIGFuIGludGVyZmFjZSBhcmUgY2FsbGVkIGBtYXN0ZXInCisgICBhbmQgYHNsYXZlJzsgdGhpcyBpcyB1c3VhbGx5IHNlbGVjdGFibGUgdmlhIGEganVtcGVyIG9uIHRoZSBkcml2ZS4KKworICAgTGludXggbmFtZXMgdGhlc2UgZGV2aWNlcyBhcyBmb2xsb3dzLiAgVGhlIG1hc3RlciBhbmQgc2xhdmUgZGV2aWNlcworICAgb24gdGhlIHByaW1hcnkgSURFIGludGVyZmFjZSBhcmUgY2FsbGVkIGBoZGEnIGFuZCBgaGRiJywKKyAgIHJlc3BlY3RpdmVseS4gIFRoZSBkcml2ZXMgb24gdGhlIHNlY29uZGFyeSBpbnRlcmZhY2UgYXJlIGNhbGxlZAorICAgYGhkYycgYW5kIGBoZGQnLiAgKEludGVyZmFjZXMgYXQgb3RoZXIgbG9jYXRpb25zIGdldCBvdGhlciBsZXR0ZXJzCisgICBpbiB0aGUgdGhpcmQgcG9zaXRpb247IHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuKQorCisgICBJZiB5b3Ugd2FudCB5b3VyIENEUk9NIGRyaXZlIHRvIGJlIGZvdW5kIGF1dG9tYXRpY2FsbHkgYnkgdGhlCisgICBkcml2ZXIsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHlvdXIgSURFIGludGVyZmFjZSB1c2VzIGVpdGhlciB0aGUKKyAgIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGFkZHJlc3NlcyBtZW50aW9uZWQgYWJvdmUuICBJbiBhZGRpdGlvbiwgaWYKKyAgIHRoZSBDRFJPTSBkcml2ZSBpcyB0aGUgb25seSBkZXZpY2Ugb24gdGhlIElERSBpbnRlcmZhY2UsIGl0IHNob3VsZAorICAgYmUganVtcGVyZWQgYXMgYG1hc3RlcicuICAoSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QgY29uZmlndXJlCisgICB5b3VyIHN5c3RlbSBpbiB0aGlzIG1hbm5lciwgeW91IGNhbiBwcm9iYWJseSBzdGlsbCB1c2UgdGhlIGRyaXZlci4KKyAgIFlvdSBtYXkgaGF2ZSB0byBwYXNzIGV4dHJhIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdG8gdGhlIGtlcm5lbAorICAgd2hlbiB5b3UgYm9vdCwgaG93ZXZlci4gIFNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIG1vcmUKKyAgIGluZm9ybWF0aW9uLikKKworNC4gQm9vdCB0aGUgc3lzdGVtLiAgSWYgdGhlIGRyaXZlIGlzIHJlY29nbml6ZWQsIHlvdSBzaG91bGQgc2VlIGEKKyAgIG1lc3NhZ2Ugd2hpY2ggbG9va3MgbGlrZQorCisgICAgIGhkYjogTkVDIENELVJPTSBEUklWRToyNjAsIEFUQVBJIENEUk9NIGRyaXZlCisKKyAgIElmIHlvdSBkbyBub3Qgc2VlIHRoaXMsIHNlZSBzZWN0aW9uIDUgYmVsb3cuCisKKzUuIFlvdSBtYXkgd2FudCB0byBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIC9kZXYvY2Ryb20gcG9pbnRpbmcgdG8gdGhlCisgICBhY3R1YWwgZGV2aWNlLiAgWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlIGNvbW1hbmQKKworICAgICBsbiAtcyAgL2Rldi9oZFggIC9kZXYvY2Ryb20KKworICAgd2hlcmUgWCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgdGhlIGxldHRlciBpbmRpY2F0aW5nIHdoZXJlIHlvdXIKKyAgIGRyaXZlIGlzIGluc3RhbGxlZC4KKworNi4gWW91IHNob3VsZCBiZSBhYmxlIHRvIHNlZSBhbnkgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgZHJpdmVyIHdpdGgKKyAgIHRoZSBgZG1lc2cnIGNvbW1hbmQuCisKKworMy4gQmFzaWMgdXNhZ2UKKy0tLS0tLS0tLS0tLS0tCisKK0FuIElTTyA5NjYwIENEUk9NIGNhbiBiZSBtb3VudGVkIGJ5IHB1dHRpbmcgdGhlIGRpc2MgaW4gdGhlIGRyaXZlIGFuZCAKK3R5cGluZyAoYXMgcm9vdCkKKworICBtb3VudCAtdCBpc285NjYwIC9kZXYvY2Ryb20gL21udC9jZHJvbQorCit3aGVyZSBpdCBpcyBhc3N1bWVkIHRoYXQgL2Rldi9jZHJvbSBpcyBhIGxpbmsgcG9pbnRpbmcgdG8gdGhlIGFjdHVhbAorZGV2aWNlIChhcyBkZXNjcmliZWQgaW4gc3RlcCA1IG9mIHRoZSBsYXN0IHNlY3Rpb24pIGFuZCAvbW50L2Nkcm9tIGlzCithbiBlbXB0eSBkaXJlY3RvcnkuICBZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlCitDRFJPTSB1bmRlciB0aGUgL21udC9jZHJvbSBkaXJlY3RvcnkuICBJZiB5b3Ugd2FudCB0byBlamVjdCB0aGUgQ0RST00sCit5b3UgbXVzdCBmaXJzdCBkaXNtb3VudCBpdCB3aXRoIGEgY29tbWFuZCBsaWtlCisKKyAgdW1vdW50IC9tbnQvY2Ryb20KKworTm90ZSB0aGF0IGF1ZGlvIENEcyBjYW5ub3QgYmUgbW91bnRlZC4KKworU29tZSBkaXN0cmlidXRpb25zIHNldCB1cCAvZXRjL2ZzdGFiIHRvIGFsd2F5cyB0cnkgdG8gbW91bnQgYSBDRFJPTQorZmlsZXN5c3RlbSBvbiBib290dXAuICBJdCBpcyBub3QgcmVxdWlyZWQgdG8gbW91bnQgdGhlIENEUk9NIGluIHRoaXMKK21hbm5lciwgdGhvdWdoLCBhbmQgaXQgbWF5IGJlIGEgbnVpc2FuY2UgaWYgeW91IGNoYW5nZSBDRFJPTXMgb2Z0ZW4uCitZb3Ugc2hvdWxkIGZlZWwgZnJlZSB0byByZW1vdmUgdGhlIGNkcm9tIGxpbmUgZnJvbSAvZXRjL2ZzdGFiIGFuZAorbW91bnQgQ0RST01zIG1hbnVhbGx5IGlmIHRoYXQgc3VpdHMgeW91IGJldHRlci4KKworTXVsdGlzZXNzaW9uIGFuZCBwaG90b2NkIGRpc2NzIHNob3VsZCB3b3JrIHdpdGggbm8gc3BlY2lhbCBoYW5kbGluZy4KK1RoZSBocGNkdG9wcG0gcGFja2FnZSAoZnRwLmd3ZGcuZGU6L3B1Yi9saW51eC9ocGNkdG9wcG0vKSBtYXkgYmUKK3VzZWZ1bCBmb3IgcmVhZGluZyBwaG90b2Nkcy4KKworVG8gcGxheSBhbiBhdWRpbyBDRCwgeW91IHNob3VsZCBmaXJzdCB1bm1vdW50IGFuZCByZW1vdmUgYW55IGRhdGEKK0NEUk9NLiAgQW55IG9mIHRoZSBDRFJPTSBwbGF5ZXIgcHJvZ3JhbXMgc2hvdWxkIHRoZW4gd29yayAod29ya21hbiwKK3dvcmtib25lLCBjZHBsYXllciwgZXRjLikuICBMYWNraW5nIGFueXRoaW5nIGVsc2UsIHlvdSBjb3VsZCB1c2UgdGhlCitjZHRlc3RlciBwcm9ncmFtIGluIERvY3VtZW50YXRpb24vY2Ryb20vc2JwY2QuCisKK09uIGEgZmV3IGRyaXZlcywgeW91IGNhbiByZWFkIGRpZ2l0YWwgYXVkaW8gZGlyZWN0bHkgdXNpbmcgYSBwcm9ncmFtCitzdWNoIGFzIGNkZGEyd2F2LiAgVGhlIG9ubHkgdHlwZXMgb2YgZHJpdmUgd2hpY2ggSSd2ZSBoZWFyZCBzdXBwb3J0Cit0aGlzIGFyZSBTb255IGFuZCBUb3NoaWJhIGRyaXZlcy4gIFlvdSB3aWxsIGdldCBlcnJvcnMgaWYgeW91IHRyeSB0bwordXNlIHRoaXMgZnVuY3Rpb24gb24gYSBkcml2ZSB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGl0LgorCitGb3Igc3VwcG9ydGVkIGNoYW5nZXJzLCB5b3UgY2FuIHVzZSB0aGUgYGNkY2hhbmdlJyBwcm9ncmFtIChhcHBlbmRlZCB0bwordGhlIGVuZCBvZiB0aGlzIGZpbGUpIHRvIHN3aXRjaCBiZXR3ZWVuIGNoYW5nZXIgc2xvdHMuICBOb3RlIHRoYXQgdGhlCitkcml2ZSBzaG91bGQgYmUgdW5tb3VudGVkIGJlZm9yZSBhdHRlbXB0aW5nIHRoaXMuICBUaGUgcHJvZ3JhbSB0YWtlcwordHdvIGFyZ3VtZW50czogIHRoZSBDRFJPTSBkZXZpY2UsIGFuZCB0aGUgc2xvdCBudW1iZXIgdG8gd2hpY2ggeW91IHdpc2gKK3RvIGNoYW5nZS4gIElmIHRoZSBzbG90IG51bWJlciBpcyAtMSwgdGhlIGRyaXZlIGlzIHVubG9hZGVkLgorCisKKzQuIENvbXBpbGF0aW9uIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIGEgZmV3IGFkZGl0aW9uYWwgb3B0aW9ucyB3aGljaCBjYW4gYmUgc2V0IHdoZW4gY29tcGlsaW5nIHRoZQorZHJpdmVyLiAgTW9zdCBwZW9wbGUgc2hvdWxkIG5vdCBuZWVkIHRvIG1lc3Mgd2l0aCBhbnkgb2YgdGhlc2U7IHRoZXkKK2FyZSBsaXN0ZWQgaGVyZSBzaW1wbHkgZm9yIGNvbXBsZXRlbmVzcy4gIEEgY29tcGlsYXRpb24gb3B0aW9uIGNhbiBiZQorZW5hYmxlZCBieSBhZGRpbmcgYSBsaW5lIG9mIHRoZSBmb3JtIGAjZGVmaW5lIDxvcHRpb24+IDEnIHRvIHRoZSB0b3AKK29mIGlkZS1jZC5jLiAgQWxsIHRoZXNlIG9wdGlvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKK1ZFUkJPU0VfSURFX0NEX0VSUk9SUworICBJZiB0aGlzIGlzIHNldCwgQVRBUEkgZXJyb3IgY29kZXMgd2lsbCBiZSB0cmFuc2xhdGVkIGludG8gdGV4dHVhbAorICBkZXNjcmlwdGlvbnMuICBJbiBhZGRpdGlvbiwgYSBkdW1wIGlzIG1hZGUgb2YgdGhlIGNvbW1hbmQgd2hpY2gKKyAgcHJvdm9rZWQgdGhlIGVycm9yLiAgVGhpcyBpcyBvZmYgYnkgZGVmYXVsdCB0byBzYXZlIHRoZSBtZW1vcnkgdXNlZAorICBieSB0aGUgKHNvbWV3aGF0IGxvbmcpIHRhYmxlIG9mIGVycm9yIGRlc2NyaXB0aW9ucy4gIAorCitTVEFOREFSRF9BVEFQSQorICBJZiB0aGlzIGlzIHNldCwgdGhlIGNvZGUgbmVlZGVkIHRvIGRlYWwgd2l0aCBjZXJ0YWluIGRyaXZlcyB3aGljaCBkbworICBub3QgcHJvcGVybHkgaW1wbGVtZW50IHRoZSBBVEFQSSBzcGVjIHdpbGwgYmUgZGlzYWJsZWQuICBJZiB5b3Uga25vdworICB5b3VyIGRyaXZlIGltcGxlbWVudHMgQVRBUEkgcHJvcGVybHksIHlvdSBjYW4gdHVybiB0aGlzIG9uIHRvIGdldCBhCisgIHNsaWdodGx5IHNtYWxsZXIga2VybmVsLgorCitOT19ET09SX0xPQ0tJTkcKKyAgSWYgdGhpcyBpcyBzZXQsIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBhdHRlbXB0IHRvIGxvY2sgdGhlIGRvb3Igb2YKKyAgdGhlIGRyaXZlLgorCitDRFJPTV9OQkxPQ0tTX0JVRkZFUgorICBUaGlzIHNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBiZSB1c2VkIGZvciBhIENEUk9NUkVBREFVRElPCisgIGlvY3RsLiAgVGhlIGRlZmF1bHQgaXMgOC4KKworVEVTVAorICBUaGlzIGN1cnJlbnRseSBlbmFibGVzIGFuIGFkZGl0aW9uYWwgaW9jdGwgd2hpY2ggZW5hYmxlcyBhIHVzZXItbW9kZQorICBwcm9ncmFtIHRvIGV4ZWN1dGUgYW4gYXJiaXRyYXJ5IHBhY2tldCBjb21tYW5kLiAgU2VlIHRoZSBzb3VyY2UgZm9yCisgIGRldGFpbHMuICBUaGlzIHNob3VsZCBiZSBsZWZ0IG9mZiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuCisKKworNS4gQ29tbW9uIHByb2JsZW1zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBlbmNvdW50ZXJlZCB3aGVuIHRyeWluZyB0bwordXNlIHRoZSBkcml2ZXIsIGFuZCBzb21lIHBvc3NpYmxlIHNvbHV0aW9ucy4gIE5vdGUgdGhhdCBpZiB5b3UgYXJlCitleHBlcmllbmNpbmcgcHJvYmxlbXMsIHlvdSBzaG91bGQgcHJvYmFibHkgYWxzbyByZXZpZXcKK0RvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5kZXJseWluZworSURFIHN1cHBvcnQgY29kZS4gIFNvbWUgb2YgdGhlc2UgaXRlbXMgYXBwbHkgb25seSB0byBlYXJsaWVyIHZlcnNpb25zCitvZiB0aGUgZHJpdmVyLCBidXQgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCisKK0luIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2l0aCBgZG1lc2cnIGZvciBhbnkgZXJyb3JzCitmcm9tIHRoZSBkcml2ZXIuCisKK2EuIERyaXZlIGlzIG5vdCBkZXRlY3RlZCBkdXJpbmcgYm9vdGluZy4KKworICAgLSBSZXZpZXcgdGhlIGNvbmZpZ3VyYXRpb24gaW5zdHJ1Y3Rpb25zIGFib3ZlIGFuZCBpbgorICAgICBEb2N1bWVudGF0aW9uL2lkZS50eHQsIGFuZCBjaGVjayBob3cgeW91ciBoYXJkd2FyZSBpcworICAgICBjb25maWd1cmVkLgorCisgICAtIElmIHlvdXIgZHJpdmUgaXMgdGhlIG9ubHkgZGV2aWNlIG9uIGFuIElERSBpbnRlcmZhY2UsIGl0IHNob3VsZAorICAgICBiZSBqdW1wZXJlZCBhcyBtYXN0ZXIsIGlmIGF0IGFsbCBwb3NzaWJsZS4KKworICAgLSBJZiB5b3VyIElERSBpbnRlcmZhY2UgaXMgbm90IGF0IHRoZSBzdGFuZGFyZCBhZGRyZXNzZXMgb2YgMHgxNzAKKyAgICAgb3IgMHgxZjAsIHlvdSdsbCBuZWVkIHRvIGV4cGxpY2l0bHkgaW5mb3JtIHRoZSBkcml2ZXIgdXNpbmcgYQorICAgICBsaWxvIG9wdGlvbi4gIFNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuICAoVGhpcyBmZWF0dXJlIHdhcworICAgICBhZGRlZCBhcm91bmQga2VybmVsIHZlcnNpb24gMS4zLjMwLikKKworICAgLSBJZiB0aGUgYXV0b3Byb2JpbmcgaXMgbm90IGZpbmRpbmcgeW91ciBkcml2ZSwgeW91IGNhbiB0ZWxsIHRoZQorICAgICBkcml2ZXIgdG8gYXNzdW1lIHRoYXQgb25lIGV4aXN0cyBieSB1c2luZyBhIGxpbG8gb3B0aW9uIG9mIHRoZQorICAgICBmb3JtIGBoZFg9Y2Ryb20nLCB3aGVyZSBYIGlzIHRoZSBkcml2ZSBsZXR0ZXIgY29ycmVzcG9uZGluZyB0bworICAgICB3aGVyZSB5b3VyIGRyaXZlIGlzIGluc3RhbGxlZC4gIE5vdGUgdGhhdCBpZiB5b3UgZG8gdGhpcyBhbmQgeW91IAorICAgICBzZWUgYSBib290IG1lc3NhZ2UgbGlrZQorCisgICAgICAgaGRYOiBBVEFQSSBjZHJvbSAoPykKKworICAgICB0aGlzIGRvZXMgX25vdF8gbWVhbiB0aGF0IHRoZSBkcml2ZXIgaGFzIHN1Y2Nlc3NmdWxseSBkZXRlY3RlZAorICAgICB0aGUgZHJpdmU7IHJhdGhlciwgaXQgbWVhbnMgdGhhdCB0aGUgZHJpdmVyIGhhcyBub3QgZGV0ZWN0ZWQgYQorICAgICBkcml2ZSwgYnV0IGlzIGFzc3VtaW5nIHRoZXJlJ3Mgb25lIHRoZXJlIGFueXdheSBiZWNhdXNlIHlvdSB0b2xkCisgICAgIGl0IHNvLiAgSWYgeW91IGFjdHVhbGx5IHRyeSB0byBkbyBJL08gdG8gYSBkcml2ZSBkZWZpbmVkIGF0IGEKKyAgICAgbm9uZXhpc3RlbnQgb3Igbm9ucmVzcG9uZGluZyBJL08gYWRkcmVzcywgeW91J2xsIHByb2JhYmx5IGdldAorICAgICBlcnJvcnMgd2l0aCBhIHN0YXR1cyB2YWx1ZSBvZiAweGZmLgorCisgICAtIFNvbWUgSURFIGFkYXB0ZXJzIHJlcXVpcmUgYSBub25zdGFuZGFyZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQorICAgICBiZWZvcmUgdGhleSdsbCBmdW5jdGlvbiBwcm9wZXJseS4gIChJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVyZQorICAgICB3aWxsIG9mdGVuIGJlIGEgc2VwYXJhdGUgTVMtRE9TIGRyaXZlciBqdXN0IGZvciB0aGUgY29udHJvbGxlci4pCisgICAgIElERSBpbnRlcmZhY2VzIG9uIHNvdW5kIGNhcmRzIG9mdGVuIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LgorCisgICAgIFN1cHBvcnQgZm9yIHNvbWUgaW50ZXJmYWNlcyBuZWVkaW5nIGV4dHJhIGluaXRpYWxpemF0aW9uIGlzCisgICAgIHByb3ZpZGVkIGluIGxhdGVyIDEuMy54IGtlcm5lbHMuICBZb3UgbWF5IG5lZWQgdG8gdHVybiBvbgorICAgICBhZGRpdGlvbmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZ2V0IHRoZW0gdG8gd29yazsKKyAgICAgc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4KKworICAgICBFdmVuIGlmIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgeW91ciBpbnRlcmZhY2UsIHlvdSBtYXkgYmUKKyAgICAgYWJsZSB0byBnZXQgaXQgdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlLiAgRmlyc3QgYm9vdAorICAgICBNUy1ET1MgYW5kIGxvYWQgdGhlIGFwcHJvcHJpYXRlIGRyaXZlcnMuICBUaGVuIHdhcm0tYm9vdCBsaW51eAorICAgICAoaS5lLiwgd2l0aG91dCBwb3dlcmluZyBvZmYpLiAgSWYgdGhpcyB3b3JrcywgaXQgY2FuIGJlIGF1dG9tYXRlZAorICAgICBieSBydW5uaW5nIGxvYWRsaW4gZnJvbSB0aGUgTVMtRE9TIGF1dG9leGVjLgorCisKK2IuIFRpbWVvdXQvSVJRIGVycm9ycy4KKworICAtIElmIHlvdSBhbHdheXMgZ2V0IHRpbWVvdXQgZXJyb3JzLCBpbnRlcnJ1cHRzIGZyb20gdGhlIGRyaXZlIGFyZQorICAgIHByb2JhYmx5IG5vdCBtYWtpbmcgaXQgdG8gdGhlIGhvc3QuCisKKyAgLSBJUlEgcHJvYmxlbXMgbWF5IGFsc28gYmUgaW5kaWNhdGVkIGJ5IHRoZSBtZXNzYWdlCisgICAgYElSUSBwcm9iZSBmYWlsZWQgKDxuPiknIHdoaWxlIGJvb3RpbmcuICBJZiA8bj4gaXMgemVybywgdGhhdAorICAgIG1lYW5zIHRoYXQgdGhlIHN5c3RlbSBkaWQgbm90IHNlZSBhbiBpbnRlcnJ1cHQgZnJvbSB0aGUgZHJpdmUgd2hlbgorICAgIGl0IHdhcyBleHBlY3Rpbmcgb25lIChvbiBhbnkgZmVhc2libGUgSVJRKS4gIElmIDxuPiBpcyBuZWdhdGl2ZSwKKyAgICB0aGF0IG1lYW5zIHRoZSBzeXN0ZW0gc2F3IGludGVycnVwdHMgb24gbXVsdGlwbGUgSVJRIGxpbmVzLCB3aGVuCisgICAgaXQgd2FzIGV4cGVjdGluZyB0byByZWNlaXZlIGp1c3Qgb25lIGZyb20gdGhlIENEUk9NIGRyaXZlLgorCisgIC0gRG91YmxlLWNoZWNrIHlvdXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgSVJRCisgICAgbnVtYmVyIG9mIHlvdXIgSURFIGludGVyZmFjZSBtYXRjaGVzIHdoYXQgdGhlIGRyaXZlciBleHBlY3RzLgorICAgIChUaGUgdXN1YWwgYXNzaWdubWVudHMgYXJlIDE0IGZvciB0aGUgcHJpbWFyeSAoMHgxZjApIGludGVyZmFjZQorICAgIGFuZCAxNSBmb3IgdGhlIHNlY29uZGFyeSAoMHgxNzApIGludGVyZmFjZS4pICBBbHNvIGJlIHN1cmUgdGhhdAorICAgIHlvdSBkb24ndCBoYXZlIHNvbWUgb3RoZXIgaGFyZHdhcmUgd2hpY2ggbWlnaHQgYmUgY29uZmxpY3Rpbmcgd2l0aAorICAgIHRoZSBJUlEgeW91J3JlIHVzaW5nLiAgQWxzbyBjaGVjayB0aGUgQklPUyBzZXR1cCBmb3IgeW91ciBzeXN0ZW07CisgICAgc29tZSBoYXZlIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgaW5kaXZpZHVhbCBJUlEgbGV2ZWxzLCBhbmQgSSd2ZQorICAgIGhhZCBvbmUgcmVwb3J0IG9mIGEgc3lzdGVtIHdoaWNoIHdhcyBzaGlwcGVkIHdpdGggSVJRIDE1IGRpc2FibGVkCisgICAgYnkgZGVmYXVsdC4KKworICAtIE5vdGUgdGhhdCBtYW55IE1TLURPUyBDRFJPTSBkcml2ZXJzIHdpbGwgc3RpbGwgZnVuY3Rpb24gZXZlbiBpZgorICAgIHRoZXJlIGFyZSBoYXJkd2FyZSBwcm9ibGVtcyB3aXRoIHRoZSBpbnRlcnJ1cHQgc2V0dXA7IHRoZXkKKyAgICBhcHBhcmVudGx5IGRvbid0IHVzZSBpbnRlcnJ1cHRzLgorCisgIC0gSWYgeW91IG93biBhIFBpb25lZXIgRFItQTI0WCwgeW91IF93aWxsXyBnZXQgbmFzdHkgZXJyb3IgbWVzc2FnZXMgCisgICAgb24gYm9vdCBzdWNoIGFzICJpcnEgdGltZW91dDogc3RhdHVzPTB4NTAgeyBEcml2ZVJlYWR5IFNlZWtDb21wbGV0ZSB9IgorICAgIFRoZSBQaW9uZWVyIERSLUEyNFggQ0RST00gZHJpdmVzIGFyZSBmYWlybHkgcG9wdWxhciB0aGVzZSBkYXlzLgorICAgIFVuZm9ydHVuYXRlbHksIHRoZXNlIGRyaXZlcyBzZWVtIHRvIGJlY29tZSB2ZXJ5IGNvbmZ1c2VkIHdoZW4gd2UgcGVyZm9ybQorICAgIHRoZSBzdGFuZGFyZCBMaW51eCBBVEEgZGlzayBkcml2ZSBwcm9iZS4gSWYgeW91IG93biBvbmUgb2YgdGhlc2UgZHJpdmVzLAorICAgIHlvdSBjYW4gYnlwYXNzIHRoZSBBVEEgcHJvYmluZyB3aGljaCBjb25mdXNlcyB0aGVzZSBDRFJPTSBkcml2ZXMsIGJ5IAorICAgIGFkZGluZyBgYXBwZW5kPSJoZFg9bm9wcm9iZSBoZFg9Y2Ryb20iJyB0byB5b3VyIGxpbG8uY29uZiBmaWxlIGFuZCBydW5uaW5nIAorICAgIGxpbG8gKGFnYWluIHdoZXJlIFggaXMgdGhlIGRyaXZlIGxldHRlciBjb3JyZXNwb25kaW5nIHRvIHdoZXJlIHlvdXIgZHJpdmUgCisgICAgaXMgaW5zdGFsbGVkLikKKyAgICAKK2MuIFN5c3RlbSBoYW5ndXBzLgorCisgIC0gSWYgdGhlIHN5c3RlbSBsb2NrcyB1cCB3aGVuIHlvdSB0cnkgdG8gYWNjZXNzIHRoZSBDRFJPTSwgdGhlIG1vc3QKKyAgICBsaWtlbHkgY2F1c2UgaXMgdGhhdCB5b3UgaGF2ZSBhIGJ1Z2d5IElERSBhZGFwdGVyIHdoaWNoIGRvZXNuJ3QKKyAgICBwcm9wZXJseSBoYW5kbGUgc2ltdWx0YW5lb3VzIHRyYW5zYWN0aW9ucyBvbiBtdWx0aXBsZSBpbnRlcmZhY2VzLgorICAgIFRoZSBtb3N0IG5vdG9yaW91cyBvZiB0aGVzZSBpcyB0aGUgQ01ENjQwQiBjaGlwLiAgVGhpcyBwcm9ibGVtIGNhbgorICAgIGJlIHdvcmtlZCBhcm91bmQgYnkgc3BlY2lmeWluZyB0aGUgYHNlcmlhbGl6ZScgb3B0aW9uIHdoZW4KKyAgICBib290aW5nLiAgUmVjZW50IGtlcm5lbHMgc2hvdWxkIGJlIGFibGUgdG8gZGV0ZWN0IHRoZSBuZWVkIGZvcgorICAgIHRoaXMgYXV0b21hdGljYWxseSBpbiBtb3N0IGNhc2VzLCBidXQgdGhlIGRldGVjdGlvbiBpcyBub3QKKyAgICBmb29scHJvb2YuICBTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgYWJvdXQgdGhlIGBzZXJpYWxpemUnIG9wdGlvbiBhbmQgdGhlIENNRDY0MEIuCisKKyAgLSBOb3RlIHRoYXQgbWFueSBNUy1ET1MgQ0RST00gZHJpdmVycyB3aWxsIHdvcmsgd2l0aCBzdWNoIGJ1Z2d5CisgICAgaGFyZHdhcmUsIGFwcGFyZW50bHkgYmVjYXVzZSB0aGV5IG5ldmVyIGF0dGVtcHQgdG8gb3ZlcmxhcCBDRFJPTQorICAgIG9wZXJhdGlvbnMgd2l0aCBvdGhlciBkaXNrIGFjdGl2aXR5LgorCisKK2QuIENhbid0IG1vdW50IGEgQ0RST00uCisKKyAgLSBJZiB5b3UgZ2V0IGVycm9ycyBmcm9tIG1vdW50LCBpdCBtYXkgaGVscCB0byBjaGVjayBgZG1lc2cnIHRvIHNlZQorICAgIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBzcGVjaWZpYyBlcnJvcnMgZnJvbSB0aGUgZHJpdmVyIG9yIGZyb20gdGhlCisgICAgZmlsZXN5c3RlbS4KKworICAtIE1ha2Ugc3VyZSB0aGVyZSdzIGEgQ0RST00gbG9hZGVkIGluIHRoZSBkcml2ZSwgYW5kIHRoYXQncyBpdCdzIGFuCisgICAgSVNPIDk2NjAgZGlzYy4gIFlvdSBjYW4ndCBtb3VudCBhbiBhdWRpbyBDRC4KKworICAtIFdpdGggdGhlIENEUk9NIGluIHRoZSBkcml2ZSBhbmQgdW5tb3VudGVkLCB0cnkgc29tZXRoaW5nIGxpa2UKKworICAgICAgY2F0IC9kZXYvY2Ryb20gfCBvZCB8IG1vcmUKKworICAgIElmIHlvdSBzZWUgYSBkdW1wLCB0aGVuIHRoZSBkcml2ZSBhbmQgZHJpdmVyIGFyZSBwcm9iYWJseSB3b3JraW5nCisgICAgT0ssIGFuZCB0aGUgcHJvYmxlbSBpcyBhdCB0aGUgZmlsZXN5c3RlbSBsZXZlbCAoaS5lLiwgdGhlIENEUk9NIGlzCisgICAgbm90IElTTyA5NjYwIG9yIGhhcyBlcnJvcnMgaW4gdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlKS4KKworICAtIElmIHlvdSBzZWUgYG5vdCBhIGJsb2NrIGRldmljZScgZXJyb3JzLCBjaGVjayB0aGF0IHRoZSBkZWZpbml0aW9ucworICAgIG9mIHRoZSBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBhcmUgY29ycmVjdC4gIFRoZXkgc2hvdWxkIGJlIGFzCisgICAgZm9sbG93czoKKworICAgICAgYnJ3LXJ3LS0tLSAgIDEgcm9vdCAgICAgZGlzayAgICAgICAzLCAgIDAgTm92IDExIDE4OjQ4IC9kZXYvaGRhCisgICAgICBicnctcnctLS0tICAgMSByb290ICAgICBkaXNrICAgICAgIDMsICA2NCBOb3YgMTEgMTg6NDggL2Rldi9oZGIKKyAgICAgIGJydy1ydy0tLS0gICAxIHJvb3QgICAgIGRpc2sgICAgICAyMiwgICAwIE5vdiAxMSAxODo0OCAvZGV2L2hkYworICAgICAgYnJ3LXJ3LS0tLSAgIDEgcm9vdCAgICAgZGlzayAgICAgIDIyLCAgNjQgTm92IDExIDE4OjQ4IC9kZXYvaGRkCisKKyAgICBTb21lIGVhcmx5IFNsYWNrd2FyZSByZWxlYXNlcyBoYWQgdGhlc2UgZGVmaW5lZCBpbmNvcnJlY3RseS4gIElmCisgICAgdGhlc2UgYXJlIHdyb25nLCB5b3UgY2FuIHJlbWFrZSB0aGVtIGJ5IHJ1bm5pbmcgdGhlIHNjcmlwdAorICAgIHNjcmlwdHMvTUFLRURFVi5pZGUuICAoWW91IG1heSBoYXZlIHRvIG1ha2UgaXQgZXhlY3V0YWJsZQorICAgIHdpdGggY2htb2QgZmlyc3QuKQorCisgICAgSWYgeW91IGhhdmUgYSAvZGV2L2Nkcm9tIHN5bWJvbGljIGxpbmssIGNoZWNrIHRoYXQgaXQgaXMgcG9pbnRpbmcKKyAgICB0byB0aGUgY29ycmVjdCBkZXZpY2UgZmlsZS4KKworICAgIElmIHlvdSBoZWFyIHBlb3BsZSB0YWxraW5nIG9mIHRoZSBkZXZpY2VzIGBoZDFhJyBhbmQgYGhkMWInLCB0aGVzZQorICAgIHdlcmUgb2xkIG5hbWVzIGZvciB3aGF0IGFyZSBub3cgY2FsbGVkIGhkYyBhbmQgaGRkLiAgVGhvc2UgbmFtZXMKKyAgICBzaG91bGQgYmUgY29uc2lkZXJlZCBvYnNvbGV0ZS4KKworICAtIElmIG1vdW50IGlzIGNvbXBsYWluaW5nIHRoYXQgdGhlIGlzbzk2NjAgZmlsZXN5c3RlbSBpcyBub3QKKyAgICBhdmFpbGFibGUsIGJ1dCB5b3Uga25vdyBpdCBpcyAoY2hlY2sgL3Byb2MvZmlsZXN5c3RlbXMpLCB5b3UKKyAgICBwcm9iYWJseSBuZWVkIGEgbmV3ZXIgdmVyc2lvbiBvZiBtb3VudC4gIEVhcmx5IHZlcnNpb25zIHdvdWxkIG5vdAorICAgIGFsd2F5cyBnaXZlIG1lYW5pbmdmdWwgZXJyb3IgbWVzc2FnZXMuCisKKworZS4gRGlyZWN0b3J5IGxpc3RpbmdzIGFyZSB1bnByZWRpY3RhYmx5IHRydW5jYXRlZCwgYW5kIGBkbWVzZycgc2hvd3MKKyAgIGBidWZmZXIgYm90Y2gnIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGRyaXZlci4KKworICAtIFRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGluIDEuMi54IGtlcm5lbHMKKyAgICB3aGljaCBjb3VsZCBjYXVzZSB0aGlzLiAgSXQgd2FzIGZpeGVkIGluIDEuMy4wLiAgSWYgeW91IGNhbid0CisgICAgdXBncmFkZSwgeW91IGNhbiBwcm9iYWJseSB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBieSBzcGVjaWZ5aW5nIGEKKyAgICBibG9ja3NpemUgb2YgMjA0OCB3aGVuIG1vdW50aW5nLiAgKE5vdGUgdGhhdCB5b3Ugd29uJ3QgYmUgYWJsZSB0bworICAgIGRpcmVjdGx5IGV4ZWN1dGUgYmluYXJpZXMgb2ZmIHRoZSBDRFJPTSBpbiB0aGF0IGNhc2UuKQorCisgICAgSWYgeW91IHNlZSB0aGlzIGluIGtlcm5lbHMgbGF0ZXIgdGhhbiAxLjMuMCwgcGxlYXNlIHJlcG9ydCBpdCBhcyBhCisgICAgYnVnLgorCisKK2YuIERhdGEgY29ycnVwdGlvbi4KKworICAtIFJhbmRvbSBkYXRhIGNvcnJ1cHRpb24gd2FzIG9jY2FzaW9uYWxseSBvYnNlcnZlZCB3aXRoIHRoZSBIaXRhY2hpCisgICAgQ0RSLTc3MzAgQ0RST00uIElmIHlvdSBleHBlcmllbmNlIGRhdGEgY29ycnVwdGlvbiwgdXNpbmcgImhkeD1zbG93IgorICAgIGFzIGEgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBtYXkgd29yayBhcm91bmQgdGhlIHByb2JsZW0sIGF0IHRoZQorICAgIGV4cGVuc2Ugb2YgbG93IHN5c3RlbSBwZXJmb3JtYW5jZS4KKworCis2LiBjZGNoYW5nZS5jCistLS0tLS0tLS0tLS0tCisKKy8qCisgKiBjZGNoYW5nZS5jICBbLXZdICA8ZGV2aWNlPiAgWzxzbG90Pl0KKyAqCisgKiBUaGlzIGxvYWRzIGEgQ0RST00gZnJvbSBhIHNwZWNpZmllZCBzbG90IGluIGEgY2hhbmdlciwgYW5kIGRpc3BsYXlzIAorICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5nZXIgc3RhdHVzLiAgVGhlIGRyaXZlIHNob3VsZCBiZSB1bm1vdW50ZWQgYmVmb3JlIAorICogdXNpbmcgdGhpcyBwcm9ncmFtLgorICoKKyAqIENoYW5nZXIgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkIGlmIGVpdGhlciB0aGUgLXYgZmxhZyBpcyBzcGVjaWZpZWQKKyAqIG9yIG5vIHNsb3Qgd2FzIHNwZWNpZmllZC4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIG9yaWdpbmFsbHkgZnJvbSBHZXJoYXJkIFp1YmVyIDx6dWJlckBiZXJsaW4uc25hZnUuZGU+LgorICogQ2hhbmdlciBzdGF0dXMgaW5mb3JtYXRpb24sIGFuZCByZXdyaXRlIGZvciB0aGUgbmV3IFVuaWZvcm0gQ0RST00gZHJpdmVyCisgKiBpbnRlcmZhY2UgYnkgRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CisKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqcHJvZ3JhbTsKKwljaGFyICpkZXZpY2U7CisJaW50IGZkOyAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yIGZvciBDRC1ST00gZGV2aWNlICovCisJaW50IHN0YXR1czsgICAgICAgLyogcmV0dXJuIHN0YXR1cyBmb3Igc3lzdGVtIGNhbGxzICovCisJaW50IHZlcmJvc2UgPSAwOworCWludCBzbG90PS0xLCB4X3Nsb3Q7CisJaW50IHRvdGFsX3Nsb3RzX2F2YWlsYWJsZTsKKworCXByb2dyYW0gPSBhcmd2WzBdOworCisJKythcmd2OworCS0tYXJnYzsKKworCWlmIChhcmdjIDwgMSB8fCBhcmdjID4gMykgeworCQlmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgWy12XSA8ZGV2aWNlPiBbPHNsb3Q+XVxuIiwKKwkJCSBwcm9ncmFtKTsKKwkJZnByaW50ZiAoc3RkZXJyLCAiICAgICAgIFNsb3RzIGFyZSBudW1iZXJlZCAxIC0tIG4uXG4iKTsKKwkJZXhpdCAoMSk7CisJfQorIAorICAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbMF0sICItdiIpID09IDApIHsKKyAgICAgICAgICAgICAgICB2ZXJib3NlID0gMTsKKyAgICAgICAgICAgICAgICArK2FyZ3Y7CisgICAgICAgICAgICAgICAgLS1hcmdjOworICAgICAgICB9CisgCisJZGV2aWNlID0gYXJndlswXTsKKyAKKwlpZiAoYXJnYyA9PSAyKQorCQlzbG90ID0gYXRvaSAoYXJndlsxXSkgLSAxOworCisJLyogb3BlbiBkZXZpY2UgKi8gCisJZmQgPSBvcGVuKGRldmljZSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKKwlpZiAoZmQgPCAwKSB7CisJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBvcGVuIGZhaWxlZCBmb3IgYCVzJzogJXNcbiIsCisJCQkgcHJvZ3JhbSwgZGV2aWNlLCBzdHJlcnJvciAoZXJybm8pKTsKKwkJZXhpdCAoMSk7CisJfQorCisJLyogQ2hlY2sgQ0QgcGxheWVyIHN0YXR1cyAqLyAKKwl0b3RhbF9zbG90c19hdmFpbGFibGUgPSBpb2N0bCAoZmQsIENEUk9NX0NIQU5HRVJfTlNMT1RTKTsKKwlpZiAodG90YWxfc2xvdHNfYXZhaWxhYmxlIDw9IDEgKSB7CisJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBEZXZpY2UgYCVzJyBpcyBub3QgYW4gQVRBUEkgIgorCQkJImNvbXBsaWFudCBDRCBjaGFuZ2VyLlxuIiwgcHJvZ3JhbSwgZGV2aWNlKTsKKwkJZXhpdCAoMSk7CisJfQorCisJaWYgKHNsb3QgPj0gMCkgeworCQlpZiAoc2xvdCA+PSB0b3RhbF9zbG90c19hdmFpbGFibGUpIHsKKwkJCWZwcmludGYgKHN0ZGVyciwgIkJhZCBzbG90IG51bWJlci4gICIKKwkJCQkgIlNob3VsZCBiZSAxIC0tICVkLlxuIiwKKwkJCQkgdG90YWxfc2xvdHNfYXZhaWxhYmxlKTsKKwkJCWV4aXQgKDEpOworCQl9CisKKwkJLyogbG9hZCAqLyAKKwkJc2xvdD1pb2N0bCAoZmQsIENEUk9NX1NFTEVDVF9ESVNDLCBzbG90KTsKKwkJaWYgKHNsb3Q8MCkgeworCQkJZmZsdXNoKHN0ZG91dCk7CisJCQkJcGVycm9yICgiQ0RST01fU0VMRUNUX0RJU0MgIik7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKHNsb3QgPCAwIHx8IHZlcmJvc2UpIHsKKworCQlzdGF0dXM9aW9jdGwgKGZkLCBDRFJPTV9TRUxFQ1RfRElTQywgQ0RTTF9DVVJSRU5UKTsKKwkJaWYgKHN0YXR1czwwKSB7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXBlcnJvciAoIiBDRFJPTV9TRUxFQ1RfRElTQyIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlzbG90PXN0YXR1czsKKworCQlwcmludGYgKCJDdXJyZW50IHNsb3Q6ICVkXG4iLCBzbG90KzEpOworCQlwcmludGYgKCJUb3RhbCBzbG90cyBhdmFpbGFibGU6ICVkXG4iLAorCQkJdG90YWxfc2xvdHNfYXZhaWxhYmxlKTsKKworCQlwcmludGYgKCJEcml2ZSBzdGF0dXM6ICIpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IGlvY3RsIChmZCwgQ0RST01fRFJJVkVfU1RBVFVTLCBDRFNMX0NVUlJFTlQpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXM8MCkgeworICAgICAgICAgICAgICAgICAgcGVycm9yKCIgQ0RST01fRFJJVkVfU1RBVFVTIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHN3aXRjaChzdGF0dXMpIHsKKwkJY2FzZSBDRFNfRElTQ19PSzoKKwkJCXByaW50ZiAoIlJlYWR5LlxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDRFNfVFJBWV9PUEVOOgorCQkJcHJpbnRmICgiVHJheSBPcGVuLlxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDRFNfRFJJVkVfTk9UX1JFQURZOgorCQkJcHJpbnRmICgiRHJpdmUgTm90IFJlYWR5LlxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZiAoIlRoaXMgU2hvdWxkIG5vdCBoYXBwZW4hXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZm9yICh4X3Nsb3Q9MDsgeF9zbG90PHRvdGFsX3Nsb3RzX2F2YWlsYWJsZTsgeF9zbG90KyspIHsKKwkJCXByaW50ZiAoIlNsb3QgJTJkOiAiLCB4X3Nsb3QrMSk7CisgICAgICAgICAgICAgCQlzdGF0dXMgPSBpb2N0bCAoZmQsIENEUk9NX0RSSVZFX1NUQVRVUywgeF9zbG90KTsKKyAgICAgICAgICAgICAJCWlmIChzdGF0dXM8MCkgeworICAgICAgICAgICAgIAkJICAgICBwZXJyb3IoIiBDRFJPTV9EUklWRV9TVEFUVVMiKTsKKyAgICAgICAgICAgICAJCX0gZWxzZSBzd2l0Y2goc3RhdHVzKSB7CisJCQljYXNlIENEU19ESVNDX09LOgorCQkJCXByaW50ZiAoIkRpc2MgcHJlc2VudC4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0RTX05PX0RJU0M6IAorCQkJCXByaW50ZiAoIkVtcHR5IHNsb3QuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIENEU19UUkFZX09QRU46CisJCQkJcHJpbnRmICgiQ0QtUk9NIHRyYXkgb3Blbi5cbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBDRFNfRFJJVkVfTk9UX1JFQURZOgorCQkJCXByaW50ZiAoIkNELVJPTSBkcml2ZSBub3QgcmVhZHkuXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0RTX05PX0lORk86CisJCQkJcHJpbnRmICgiTm8gSW5mb3JtYXRpb24gYXZhaWxhYmxlLiIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGYgKCJUaGlzIFNob3VsZCBub3QgaGFwcGVuIVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCSAgaWYgKHNsb3QgPT0geF9zbG90KSB7CisgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBpb2N0bCAoZmQsIENEUk9NX0RJU0NfU1RBVFVTKTsKKyAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXM8MCkgeworCQkJcGVycm9yKCIgQ0RST01fRElTQ19TVEFUVVMiKTsKKyAgICAgICAgICAgICAgICAgIH0KKwkJICBzd2l0Y2ggKHN0YXR1cykgeworCQkJY2FzZSBDRFNfQVVESU86CisJCQkJcHJpbnRmICgiXHRBdWRpbyBkaXNjLlx0Iik7CisJCQkJYnJlYWs7CisJCQljYXNlIENEU19EQVRBXzE6CisJCQljYXNlIENEU19EQVRBXzI6CisJCQkJcHJpbnRmICgiXHREYXRhIGRpc2MgdHlwZSAlZC5cdCIsIHN0YXR1cy1DRFNfREFUQV8xKzEpOworCQkJCWJyZWFrOworCQkJY2FzZSBDRFNfWEFfMl8xOgorCQkJY2FzZSBDRFNfWEFfMl8yOgorCQkJCXByaW50ZiAoIlx0WEEgZGF0YSBkaXNjIHR5cGUgJWQuXHQiLCBzdGF0dXMtQ0RTX1hBXzJfMSsxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmICgiXHRVbmtub3duIGRpc2MgdHlwZSAweCV4IVx0Iiwgc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCX0KKyAgICAgICAgICAgICAgICAgIAlzdGF0dXMgPSBpb2N0bCAoZmQsIENEUk9NX01FRElBX0NIQU5HRUQsIHhfc2xvdCk7CisgICAgICAgICAgICAgICAgICAJaWYgKHN0YXR1czwwKSB7CisJCQkJcGVycm9yKCIgQ0RST01fTUVESUFfQ0hBTkdFRCIpOworICAgICAgICAgICAgICAgICAgCX0KKwkJICAJc3dpdGNoIChzdGF0dXMpIHsKKwkJCWNhc2UgMToKKwkJCQlwcmludGYgKCJDaGFuZ2VkLlxuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZiAoIlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBjbG9zZSBkZXZpY2UgKi8KKwlzdGF0dXMgPSBjbG9zZSAoZmQpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlmcHJpbnRmIChzdGRlcnIsICIlczogY2xvc2UgZmFpbGVkIGZvciBgJXMnOiAlc1xuIiwKKwkJCSBwcm9ncmFtLCBkZXZpY2UsIHN0cmVycm9yIChlcnJubykpOworCQlleGl0ICgxKTsKKwl9CisgCisJZXhpdCAoMCk7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lzcDE2IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9pc3AxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzg2NTMzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9pc3AxNgpAQCAtMCwwICsxLDEwMCBAQAorIC0tIERvY3VtZW50YXRpb24vY2Ryb20vaXNwMTYKKworRG9jcyBieSBFcmljIHZhbiBkZXIgTWFhcmVsIDxILlQuTS52LmQuTWFhcmVsQG1hcmluLm5sPgorCitUaGlzIGlzIHRoZSBSRUFETUUgZm9yIHZlcnNpb24gMC42IG9mIHRoZSBjZHJvbSBpbnRlcmZhY2Ugb24gYW4KK0lTUDE2LCBNQUQxNiBvciBNb3phcnQgc291bmQgY2FyZC4KKworVGhlIGRldGVjdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGlzIGludGVyZmFjZSB1c2VkIHRvIGJlIGluY2x1ZGVkCitpbiBib3RoIHRoZSBzamNkIGFuZCBvcHRjZCBjZHJvbSBkcml2ZXIuIERyaXZlcyBzdXBwb3J0ZWQgYnkgdGhlc2UKK2RyaXZlcnMgY2FtZSBwYWNrZWQgd2l0aCBNZWRpYSBNYWdpYydzIG11bHRpIG1lZGlhIGtpdCwgd2hpY2ggYWxzbworaW5jbHVkZWQgdGhlIElTUDE2IGNhcmQuIFRoZSBpZGVhICh0aGFua3MgTGVvIFNwaWVrbWFuKQordG8gbW92ZSBpdCBmcm9tIHRoZXNlIGRyaXZlcnMgaW50byBhIHNlcGFyYXRlIG1vZHVsZSBhbmQgbW9yZW92ZXIsIG5vdCB0bworcmVseSBvbiB0aGUgTUFEMTYgc291bmQgZHJpdmVyLCBhcmUgYXMgZm9sbG93czoKKy1kdXBsaWNhdGlvbiBvZiBjb2RlIGluIHRoZSBrZXJuZWwgaXMgYSB3YXN0ZSBvZiByZXNvdXJjZXMgYW5kIHNob3VsZAorIGJlIGF2b2lkZWQ7CistaG93ZXZlciwga2VybmVscyBhbmQgbm90YWJseSB0aG9zZSBpbmNsdWRlZCB3aXRoIExpbnV4IGRpc3RyaWJ1dGlvbnMKKyAoY2YgU2xhY2t3YXJlIDMuMCBpbmNsdWRlZCB2ZXJzaW9uIDAuNSBvZiB0aGUgaXNwMTYgY29uZmlndXJhdGlvbgorIGNvZGUgaW5jbHVkZWQgaW4gdGhlIGRyaXZlcnMpIGRvbid0IGFsd2F5cyBjb21lIHdpdGggc291bmQgc3VwcG9ydAorIGluY2x1ZGVkLiBFc3BlY2lhbGx5IHdoZW4gdGhleSBhbHJlYWR5IGluY2x1ZGUgYSBidW5jaCBvZiBjZHJvbSBkcml2ZXJzLgorIEhlbmNlLCB0aGUgY2Ryb20gaW50ZXJmYWNlIHNob3VsZCBiZSBjb25maWd1cmFibGUgX2luZGVwZW5kZW50bHlfIG9mCisgc291bmQgc3VwcG9ydC4KKworVGhlIElTUDE2LCBNQUQxNiBhbmQgTW96YXJ0IHNvdW5kIGNhcmRzIGhhdmUgYW4gT1BUaSA4MkM5Mjggb3IgYW4KK09QVGkgODJDOTI5IGNoaXAuICBUaGUgaW50ZXJmYWNlIG9uIHRoZXNlIGNhcmRzIHNob3VsZCB3b3JrIHdpdGgKK2FueSBjZHJvbSBhdHRhY2hlZCB0byB0aGUgY2FyZCwgd2hpY2ggaXMgJ2VsZWN0cmljYWxseScgY29tcGF0aWJsZQord2l0aCBTYW55by9QYW5hc29uaWMsIFNvbnkgb3IgTWl0c3VtaSBub24taWRlIGRyaXZlcy4gSG93ZXZlciwgdGhlCitjb21tYW5kIHNldHMgZm9yIGFueSBwcm9wcmlldGFyeSBkcml2ZXMgbWF5IGRpZmZlcgorKGFuZCBoZW5jZSBtYXkgbm90IGJlIHN1cHBvcnRlZCBpbiB0aGUga2VybmVsKSBmcm9tIHRoZXNlIGZvdXIgdHlwZXMuCitGb3IgYSBmYWN0IEkga25vdyB0aGUgaW50ZXJmYWNlIHdvcmtzIGFuZCB0aGUgd2F5IG9mIGNvbmZpZ3VyYXRpb24KK2FzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50YXRpb24gd29ya3MgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKK3NqY2QgKGluIFNhbnlvL1BhbmFzb25pYyBjb21wYXRpYmlsaXR5IG1vZGUpIGNkcm9tIGRyaXZlcnMKKyhwcm9iYWJseSB3aXRoIHRoZSBvcHRjZCAoaW4gU29ueSBjb21wYXRpYmlsaXR5IG1vZGUpIGFzIHdlbGwpLgorSWYgeW91IGhhdmUgc3VjaCBhbiBPUFRpIGJhc2VkIHNvdW5kIGNhcmQgYW5kIHlvdSB3YW50IHRvIHVzZSB0aGUKK2Nkcm9tIGludGVyZmFjZSB3aXRoIGEgY2Ryb20gZHJpdmUgc3VwcG9ydGVkIGJ5IGFueSBvZiB0aGUgb3RoZXIgY2Ryb20KK2RyaXZlcnMsIGl0IHdpbGwgcHJvYmFibHkgd29yay4gUGxlYXNlIGxldCBtZSBrbm93IGFueSBleHBlcmllbmNlIHlvdQorbWlnaHQgaGF2ZSkuCitJIHVuZGVyc3RhbmQgdGhhdCBjYXJkcyBiYXNlZCBvbiB0aGUgT1BUaSA4MkM5MjkgY2hpcHMgbWF5IGJlIGNvbmZpZ3VyZWQKKyhoYXJkd2FyZSBqdW1wZXJzIHRoYXQgaXMpIGFzIGFuIElERSBpbnRlcmZhY2UuIEluaXRpYWxpc2F0aW9uIG9mIHN1Y2ggYQorY2FyZCBpbiB0aGlzIG1vZGUgaXMgbm90IHN1cHBvcnRlZCAoeWV0PykuCisKK1RoZSBzdWdnZXN0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgSVNQMTYgZXRjLiBzb3VuZCBjYXJkIGJ5IGJvb3RpbmcgRE9TIGFuZCAKK2RvIGEgd2FybSByZWJvb3QgdG8gYm9vdCBMaW51eCBzb21laG93IGRvZXNuJ3Qgd29yaywgYXQgbGVhc3Qgbm90CitvbiBteSBtYWNoaW5lIChJUEMgUDkwKSwgd2l0aCB0aGUgT1BUaSA4MkM5MjggYmFzZWQgY2FyZC4KKworQm9vdGluZyB0aGUga2VybmVsIHRocm91Z2ggdGhlIGJvb3QgbWFuYWdlciBMSUxPIGFsbG93cyB0aGUgdXNlCitvZiBzb21lIGNvbW1hbmQgbGluZSBvcHRpb25zIG9uIHRoZSAnTElMTyBib290OicgcHJvbXB0LiBBdCBib290IHRpbWUKK3ByZXNzIEFsdCBvciBTaGlmdCB3aGlsZSB0aGUgTElMTyBwcm9tcHQgaXMgd3JpdHRlbiBvbiB0aGUgc2NyZWVuIGFuZCBlbnRlcgorYW55IGtlcm5lbCBvcHRpb25zLiBBbHRlcm5hdGl2ZWx5IHRoZXNlIG9wdGlvbnMgbWF5IGJlIHVzZWQgaW4KK3RoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIGluIC9ldGMvbGlsby5jb25mLiBBZGRpbmcgJ2FwcGVuZD0iPGNtZF9saW5lX29wdGlvbnM+IicKK3dpbGwgZG8gdGhlIHRyaWNrIGFzIHdlbGwuCitUaGUgc3ludGF4IG9mICdjbWRfbGluZV9vcHRpb25zJyBpcworCisgICAgICAgIGlzcDE2PVs8cG9ydD5bLDxpcnE+Wyw8ZG1hPl1dXVtbLF08ZHJpdmVfdHlwZT5dCisKK0lmIHRoZXJlIGlzIG5vIElTUDE2IG9yIGNvbXBhdGlibGVzIGRldGVjdGVkLCB0aGVyZSdzIHByb2JhYmx5IG5vIGhhcm0gZG9uZS4KK1RoZXNlIG9wdGlvbnMgaW5kaWNhdGUgdGhlIHZhbHVlcyB0aGF0IHlvdXIgY2Ryb20gZHJpdmUgaGFzIGJlZW4gKG9yIHdpbGwgYmUpCitjb25maWd1cmVkIHRvIHVzZS4KK1ZhbGlkIHZhbHVlcyBmb3IgdGhlIGJhc2UgaS9vIGFkZHJlc3MgYXJlOgorICBwb3J0PTB4MzQwLDB4MzIwLDB4MzMwLDB4MzYwCitmb3IgdGhlIGludGVycnVwdCByZXF1ZXN0IG51bWJlciAKKyAgaXJxPTAsMyw1LDcsOSwxMCwxMQorZm9yIHRoZSBkaXJlY3QgbWVtb3J5IGFjY2VzcyBsaW5lCisgIGRtYT0wLDMsNSw2LDcKK2FuZCBmb3IgdGhlIHR5cGUgb2YgZHJpdmUKKyAgZHJpdmVfdHlwZT1ub2lzcDE2LFNhbnlvLFBhbmFzb25pYyxTb255LE1pdHN1bWkuCitOb3RlIHRoYXQgdGhlc2Ugb3B0aW9ucyBhcmUgY2FzZSBzZW5zaXRpdmUuCitUaGUgdmFsdWVzIDAgZm9yIGlycSBhbmQgZG1hIGluZGljYXRlIHRoYXQgdGhleSBhcmUgbm90IHVzZWQsIGFuZAordGhlIGRyaXZlIHdpbGwgYmUgdXNlZCBpbiAncG9sbGluZycgbW9kZS4gVGhlIHZhbHVlcyA1IGFuZCA3IGZvciBpcnEKK3Nob3VsZCBiZSBhdm9pZGVkIGluIG9yZGVyIHRvIGF2b2lkIGFueSBjb25mbGljdHMgd2l0aCBvcHRpb25hbAorc291bmQgY2FyZCBjb25maWd1cmF0aW9uLgorVGhlIHN5bnRheCBvZiB0aGUgY29tbWFuZCBsaW5lIGRvZXMgbm90IGFsbG93IHRoZSBzcGVjaWZpY2F0aW9uIG9mCitpcnEgd2hlbiB0aGVyZSdzIG5vdGhpbmcgc3BlY2lmaWVkIGZvciB0aGUgYmFzZSBhZGRyZXNzIGFuZCBubworc3BlY2lmaWNhdGlvbiBvZiBkbWEgd2hlbiB0aGVyZSBpcyBubyBzcGVjaWZpY2F0aW9uIG9mIGlycS4KK1RoZSB2YWx1ZSAnbm9pc3AxNicgZm9yIGRyaXZlX3R5cGUsIHdoaWNoIG1heSBiZSB1c2VkIGFzIHRoZSBmaXJzdAorbm9uLWludGVnZXIgb3B0aW9uIHZhbHVlIChlLmcuICdpc3AxNj1ub2lzcDE2JyksIG1ha2VzIHN1cmUgdGhhdCBwcm9iaW5nCitmb3IgYW5kIHN1YnNlcXVlbnQgY29uZmlndXJhdGlvbiBvZiBhbiBJU1AxNi1jb21wYXRpYmxlIGNhcmQgaXMgc2tpcHBlZAorYWxsIHRvZ2V0aGVyLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gb3ZlcmNvbWUgcG9zc2libGUgY29uZmxpY3RzIHdoaWNoCittYXkgYXJpc2Ugd2hpbGUgdGhlIGtlcm5lbCBpcyBwcm9iaW5nIHlvdXIgaGFyZHdhcmUuCitUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlCisgIHBvcnQ9MHgzNDAKKyAgaXJxPTAKKyAgZG1hPTAKKyAgZHJpdmVfdHlwZT1TYW55bworcmVmbGVjdGluZyBteSBvd24gY29uZmlndXJhdGlvbi4gVGhlIGRlZmF1bHRzIGNhbiBiZSBjaGFuZ2VkIGluCit0aGUgZmlsZSBsaW51eC9kcml2ZXJzL2Nkcm9tL2lwczE2LmguCisKK1RoZSBjZHJvbSBpbnRlcmZhY2UgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgcnVuIHRpbWUgYnkgbG9hZGluZyB0aGUKK2luaXRpYWxpc2F0aW9uIGRyaXZlciBhcyBhIG1vZHVsZS4gSW4gdGhhdCBjYXNlLCB0aGUgaW50ZXJmYWNlCitwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgYnkgZ2l2aW5nIGFwcHJvcHJpYXRlIHZhbHVlcyBvbiB0aGUgY29tbWFuZAorbGluZS4gQ29uZmlndXJpbmcgdGhlIGRyaXZlciBjYW4gdGhlbiBiZSBkb25lIGJ5IHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgKGFzc3VtaW5nIHlvdSBoYXZlIGlzbzE2Lm8gaW5zdGFsbGVkIGluIGEgcHJvcGVyIHBsYWNlKToKKworICBpbnNtb2QgaXNwMTYubyBpc3AxNl9jZHJvbV9iYXNlPTxwb3J0PiBpc3AxNl9jZHJvbV9pcnE9PGlycT4gXAorICAgIGlzcDE2X2Nkcm9tX2RtYT08ZG1hPiBpc3AxNl9jZHJvbV90eXBlPTxkcml2ZV90eXBlPgorCit3aGVyZSBwb3J0LCBpcnEsIGRtYSBhbmQgZHJpdmVfdHlwZSBjYW4gaGF2ZSBhbnkgb2YgdGhlIHZhbHVlcyBtZW50aW9uZWQKK2Fib3ZlLgorCisKK0hhdmUgZnVuIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9tY2R4IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9tY2R4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWM0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL21jZHgKQEAgLTAsMCArMSwyOSBAQAorSWYgeW91IGFyZSB1c2luZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHNwZWNpZnkgeW91ciBwb3J0cyBhbmQgSVJRcworbGlrZQorCisgIyBpbnNtb2QgbWNkeC5vIG1jZHg9MHgzMDAsMTEsMHgzMDQsNQorCithbmQgc28gb24gKCJhZGRyZXNzLElSUSIgcGFpcnMpLgorVGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIGluIG1jZHguaC4KKworVGhpcyBkcml2ZXI6CisKKyAgICBvICAgaGFuZGxlcyBYQSBhbmQgKGhvcGVmdWxseSkgbXVsdGkgc2Vzc2lvbiBDRHMgYXMgd2VsbCBhcworICAgICAgICBvcmRpbmFyeSBDRHM7CisgICAgbyAgIHN1cHBvcnRzIHVwIHRvIDUgZHJpdmVzIChvZiBjb3Vyc2UsIHlvdSdsbCBuZWVkIGZyZWUgCisgICAgICAgIElSUXMsIGkvbyBwb3J0cyBhbmQgc2xvdHMpOworICAgIG8gICBwbGF5cyBhdWRpbworCitUaGlzIHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IHlldDoKKworICAgIG8gICBzaGFyZWQgSVJRcyAoYnV0IGl0IHNlZW1zIHRvIGJlIHBvc3NpYmxlIC0gSSd2ZSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICBjb25uZWN0ZWQgdHdvIGRyaXZlcyB0byB0aGUgc2FtZSBpcnEuICBTbyBpdCdzIGBvbmx5JyBhIAorICAgICAgICAgICAgICAgIHByb2JsZW0gb2YgdGhlIGRyaXZlci4pCisKK1RoaXMgZHJpdmVyIG5ldmVyIHdpbGw6CisKKyAgICBvICAgUmVhZCBkaWdpdGFsIGF1ZGlvIChpLmUuIGNvcHkgZGlyZWN0bHkpLCBkdWUgdG8gbWlzc2luZworICAgICAgICBoYXJkd2FyZSBmZWF0dXJlcy4gCisKKworaGVpa29AbG90dGUuc2F4LmRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL29wdGNkIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9vcHRjZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ2YzdhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9vcHRjZApAQCAtMCwwICsxLDU3IEBACitUaGlzIGlzIHRoZSBSRUFETUUgZmlsZSBmb3IgdGhlIE9wdGljcyBTdG9yYWdlIDgwMDAgQVQgQ0RST00gZGV2aWNlIGRyaXZlci4KKworVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc28tY2FsbGVkICdET0xQSElOJyBkcml2ZSwgd2l0aCB0aGUgMzQtcGluCitTb255LWNvbXBhdGlibGUgaW50ZXJmYWNlLiBGb3IgdGhlIElERS1jb21wYXRpYmxlIE9wdGljcyBTdG9yYWdlIDgwMDEKK2RyaXZlLCB5b3Ugd2lsbCB3YW50IHRoZSBBVEFQSSBDRFJPTSBkcml2ZXIuIFRoZSBkcml2ZXIgYWxzbyBzZWVtcyB0bword29yayB3aXRoIHRoZSBMYXNlcm1hdGUgQ1IzMjhBLiBJZiB5b3UgaGF2ZSBhIGRyaXZlIHRoYXQgd29ya3Mgd2l0aAordGhpcyBkcml2ZXIsIGFuZCB0aGF0IGRvZXNuJ3QgcmVwb3J0IGl0c2VsZiBhcyBET0xQSElOLCBwbGVhc2UgZHJvcCBtZQorYSBtYWlsLgorCitUaGUgc3VwcG9ydCBmb3IgbXVsdGlzZXNzaW9uIENEcyBpcyBpbiBBTFBIQSBzdGFnZS4gSWYgeW91IHVzZSBpdCwKK3BsZWFzZSBtYWlsIG1lIHlvdXIgZXhwZXJpZW5jZXMuIE11bHRpc2Vzc2lvbiBzdXBwb3J0IGNhbiBiZSBkaXNhYmxlZAorYXQgY29tcGlsZSB0aW1lLgorCitZb3UgY2FuIGZpbmQgc29tZSBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyIGF0CisgICAgICBkdXRldHRlLmV0LnR1ZGVsZnQubmw6L3B1Yi9saW51eC8KK2FuZCBhdCBFYmVyaGFyZCdzIG1pcnJvcgorICAgICAgZnRwLmd3ZGcuZGU6L3B1Yi9saW51eC9jZHJvbS9kcml2ZXJzL29wdGljcy8KKworQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSBkcml2ZXIsIHlvdSBoYXZlIHRvIGNyZWF0ZSB0aGUgZGV2aWNlIGZpbGUgb25jZToKKyAjIG1rbm9kIC9kZXYvb3B0Y2QwIGIgMTcgMAorCitUbyBzcGVjaWZ5IHRoZSBiYXNlIGFkZHJlc3MgaWYgdGhlIGRyaXZlciBpcyAiY29tcGlsZWQtaW4iIHRvIHlvdXIga2VybmVsLAoreW91IGNhbiB1c2UgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaXRlbSAoTElMTyBvcHRpb24pCisgICAgICAgICAgICAgb3B0Y2Q9MHgzNDAKK3dpdGggdGhlIHJpZ2h0IGFkZHJlc3MuCisKK0lmIHlvdSBoYXZlIGNvbXBpbGVkIG9wdGNkIGFzIGEgbW9kdWxlLCB5b3UgY2FuIGxvYWQgaXQgd2l0aAorICMgaW5zbW9kIC91c3Ivc3JjL2xpbnV4L21vZHVsZXMvb3B0Y2Qubworb3IKKyAjIGluc21vZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzL29wdGNkLm8gb3B0Y2Q9MHgzNDAKK3dpdGggdGhlIG1hdGNoaW5nIGFkZHJlc3MgdmFsdWUgb2YgeW91ciBpbnRlcmZhY2UgY2FyZC4KKworVGhlIGRyaXZlciBlbXBsb3lzIGEgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gZG8gcmVhZC1haGVhZCBhbmQgYmxvY2sgc2l6ZQorY29udmVyc2lvbi4gVGhlIG51bWJlciBvZiBidWZmZXJzIGlzIGNvbmZpZ3VyYWJsZSBpbiBvcHRjZC5oLCBhbmQgaGFzCitpbmZsdWVuY2Ugb24gdGhlIGRyaXZlciBwZXJmb3JtYW5jZS4gRm9yIG15IG1hY2hpbmUgKGEgUDc1KSwgNiBidWZmZXJzCitzZWVtcyBvcHRpbWFsLCBhcyBjYW4gYmUgc2VlbiBmcm9tIHRoaXMgdGFibGU6CisKKyNidWZzCWtiL3MJJWNwdQorMQk5NwkwLjEKKzIJMTkxCTAuMworMwkxODgJMC4yCis0CTI0NgkwLjMKKzUJMTg5CTE5Cis2CTI4MAkwLjQKKzcJMjgxCTcuMAorOAkyNDYJMi44CisxNgkyODEJMy40CisKK0lmIHlvdSBnZXQgYSB0aHJvdWdocHV0IHNpZ25pZmljYW50bHkgYmVsb3cgMzAwIGtiL3MsIHRyeSB0d2Vha2luZworTl9CVUZTLCBhbmQgZG9uJ3QgZm9yZ2V0IHRvIG1haWwgbWUgeW91ciByZXN1bHRzIQorCitJJ2QgYXBwcmVjaWF0ZSBzdWNjZXNzL2ZhaWx1cmUgcmVwb3J0cy4gSWYgeW91IGZpbmQgYSBidWcsIHRyeQorcmVjb21waWxpbmcgdGhlIGRyaXZlciB3aXRoIHNvbWUgc3RyYXRlZ2ljYWxseSBjaG9zZW4gZGVidWcgb3B0aW9ucworKHRoZXNlIGNhbiBiZSBmb3VuZCBpbiBvcHRjZC5oKSBhbmQgaW5jbHVkZSB0aGUgbWVzc2FnZXMgZ2VuZXJhdGVkIGluCit5b3VyIGJ1ZyByZXBvcnQuIEdvb2QgbHVjay4KKworTGVvIFNwaWVrbWFuIChzcGlla21hbkBkdXRldHRlLmV0LnR1ZGVsZnQubmwpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL3BhY2tldC13cml0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDRjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL3BhY2tldC13cml0aW5nLnR4dApAQCAtMCwwICsxLDk3IEBACitHZXR0aW5nIHN0YXJ0ZWQgcXVpY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIFNlbGVjdCBwYWNrZXQgc3VwcG9ydCBpbiB0aGUgYmxvY2sgZGV2aWNlIHNlY3Rpb24gYW5kIFVERiBzdXBwb3J0IGluCisgIHRoZSBmaWxlIHN5c3RlbSBzZWN0aW9uLgorCistIENvbXBpbGUgYW5kIGluc3RhbGwga2VybmVsIGFuZCBtb2R1bGVzLCByZWJvb3QuCisKKy0gWW91IG5lZWQgdGhlIHVkZnRvb2xzIHBhY2thZ2UgKHBrdHNldHVwLCBta3VkZmZzLCBjZHJ3dG9vbCkuCisgIERvd25sb2FkIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC11ZGYvCisKKy0gR3JhYiBhIG5ldyBDRC1SVyBkaXNjIGFuZCBmb3JtYXQgaXQgKGFzc3VtaW5nIENELVJXIGlzIGhkYywgc3Vic3RpdHV0ZQorICBhcyBhcHByb3ByaWF0ZSk6CisJIyBjZHJ3dG9vbCAtZCAvZGV2L2hkYyAtcQorCistIFNldHVwIHlvdXIgd3JpdGVyCisJIyBwa3RzZXR1cCBkZXZfbmFtZSAvZGV2L2hkYworCistIE5vdyB5b3UgY2FuIG1vdW50IC9kZXYvcGt0Y2R2ZC9kZXZfbmFtZSBhbmQgY29weSBmaWxlcyB0byBpdC4gRW5qb3khCisJIyBtb3VudCAvZGV2L3BrdGNkdmQvZGV2X25hbWUgL2Nkcm9tIC10IHVkZiAtbyBydyxub2F0aW1lCisKKworUGFja2V0IHdyaXRpbmcgZm9yIERWRC1SVyBtZWRpYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEVkQtUlcgZGlzY3MgY2FuIGJlIHdyaXR0ZW4gdG8gbXVjaCBsaWtlIENELVJXIGRpc2NzIGlmIHRoZXkgYXJlIGluCit0aGUgc28gY2FsbGVkICJyZXN0cmljdGVkIG92ZXJ3cml0ZSIgbW9kZS4gVG8gcHV0IGEgZGlzYyBpbiByZXN0cmljdGVkCitvdmVyd3JpdGUgbW9kZSwgcnVuOgorCisJIyBkdmQrcnctZm9ybWF0IC9kZXYvaGRjCisKK1lvdSBjYW4gdGhlbiB1c2UgdGhlIGRpc2MgdGhlIHNhbWUgd2F5IHlvdSB3b3VsZCB1c2UgYSBDRC1SVyBkaXNjOgorCisJIyBwa3RzZXR1cCBkZXZfbmFtZSAvZGV2L2hkYworCSMgbW91bnQgL2Rldi9wa3RjZHZkL2Rldl9uYW1lIC9jZHJvbSAtdCB1ZGYgLW8gcncsbm9hdGltZQorCisKK1BhY2tldCB3cml0aW5nIGZvciBEVkQrUlcgbWVkaWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWNjb3JkaW5nIHRvIHRoZSBEVkQrUlcgc3BlY2lmaWNhdGlvbiwgYSBkcml2ZSBzdXBwb3J0aW5nIERWRCtSVyBkaXNjcworc2hhbGwgaW1wbGVtZW50ICJ0cnVlIHJhbmRvbSB3cml0ZXMgd2l0aCAyS0IgZ3JhbnVsYXJpdHkiLCB3aGljaCBtZWFucwordGhhdCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcHV0IGFueSBmaWxlc3lzdGVtIHdpdGggYSBibG9jayBzaXplID49CisyS0Igb24gc3VjaCBhIGRpc2MuIEZvciBleGFtcGxlLCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG86CisKKwkjIGR2ZCtydy1mb3JtYXQgL2Rldi9oZGMgICAob25seSBuZWVkZWQgaWYgdGhlIGRpc2MgaGFzIG5ldmVyCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gZm9ybWF0dGVkKQorCSMgbWt1ZGZmcyAvZGV2L2hkYworCSMgbW91bnQgL2Rldi9oZGMgL2Nkcm9tIC10IHVkZiAtbyBydyxub2F0aW1lCisKK0hvd2V2ZXIsIHNvbWUgZHJpdmVzIGRvbid0IGZvbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgZXhwZWN0IHRoZQoraG9zdCB0byBwZXJmb3JtIGFsaWduZWQgd3JpdGVzIGF0IDMyS0IgYm91bmRhcmllcy4gT3RoZXIgZHJpdmVzIGRvCitmb2xsb3cgdGhlIHNwZWNpZmljYXRpb24sIGJ1dCBzdWZmZXIgYmFkIHBlcmZvcm1hbmNlIHByb2JsZW1zIGlmIHRoZQord3JpdGVzIGFyZSBub3QgMzJLQiBhbGlnbmVkLgorCitCb3RoIHByb2JsZW1zIGNhbiBiZSBzb2x2ZWQgYnkgdXNpbmcgdGhlIHBrdGNkdmQgZHJpdmVyLCB3aGljaCBhbHdheXMKK2dlbmVyYXRlcyBhbGlnbmVkIHdyaXRlcy4KKworCSMgZHZkK3J3LWZvcm1hdCAvZGV2L2hkYworCSMgcGt0c2V0dXAgZGV2X25hbWUgL2Rldi9oZGMKKwkjIG1rdWRmZnMgL2Rldi9wa3RjZHZkL2Rldl9uYW1lCisJIyBtb3VudCAvZGV2L3BrdGNkdmQvZGV2X25hbWUgL2Nkcm9tIC10IHVkZiAtbyBydyxub2F0aW1lCisKKworUGFja2V0IHdyaXRpbmcgZm9yIERWRC1SQU0gbWVkaWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RWRC1SQU0gZGlzY3MgYXJlIHJhbmRvbSB3cml0YWJsZSwgc28gdXNpbmcgdGhlIHBrdGNkdmQgZHJpdmVyIGlzIG5vdAorbmVjZXNzYXJ5LiBIb3dldmVyLCB1c2luZyB0aGUgcGt0Y2R2ZCBkcml2ZXIgY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UKK2luIHRoZSBzYW1lIHdheSBpdCBkb2VzIGZvciBEVkQrUlcgbWVkaWEuCisKKworTm90ZXMKKy0tLS0tCisKKy0gQ0QtUlcgbWVkaWEgY2FuIHVzdWFsbHkgbm90IGJlIG92ZXJ3cml0dGVuIG1vcmUgdGhhbiBhYm91dCAxMDAwCisgIHRpbWVzLCBzbyB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3ZWFyIG9uIHRoZSBtZWRpYSwgeW91IHNob3VsZCBhbHdheXMKKyAgdXNlIHRoZSBub2F0aW1lIG1vdW50IG9wdGlvbi4KKworLSBEZWZlY3QgbWFuYWdlbWVudCAoaWUgYXV0b21hdGljIHJlbWFwcGluZyBvZiBiYWQgc2VjdG9ycykgaGFzIG5vdAorICBiZWVuIGltcGxlbWVudGVkIHlldCwgc28geW91IGFyZSBsaWtlbHkgdG8gZ2V0IGF0IGxlYXN0IHNvbWUKKyAgZmlsZXN5c3RlbSBjb3JydXB0aW9uIGlmIHRoZSBkaXNjIHdlYXJzIG91dC4KKworLSBTaW5jZSB0aGUgcGt0Y2R2ZCBkcml2ZXIgbWFrZXMgdGhlIGRpc2MgYXBwZWFyIGFzIGEgcmVndWxhciBibG9jaworICBkZXZpY2Ugd2l0aCBhIDJLQiBibG9jayBzaXplLCB5b3UgY2FuIHB1dCBhbnkgZmlsZXN5c3RlbSB5b3UgbGlrZSBvbgorICB0aGUgZGlzYy4gRm9yIGV4YW1wbGUsIHJ1bjoKKworCSMgL3NiaW4vbWtlMmZzIC9kZXYvcGt0Y2R2ZC9kZXZfbmFtZQorCisgIHRvIGNyZWF0ZSBhbiBleHQyIGZpbGVzeXN0ZW0gb24gdGhlIGRpc2MuCisKKworTGlua3MKKy0tLS0tCisKK1NlZSBodHRwOi8vZnkuY2hhbG1lcnMuc2UvfmFwcHJvL2xpbnV4L0RWRCtSVy8gZm9yIG1vcmUgaW5mb3JtYXRpb24KK2Fib3V0IERWRCB3cml0aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9zYnBjZCBiL0RvY3VtZW50YXRpb24vY2Ryb20vc2JwY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4MjVkZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vc2JwY2QKQEAgLTAsMCArMSwxMDU3IEBACitUaGlzIFJFQURNRSBiZWxvbmdzIHRvIHJlbGVhc2UgNC4yIG9yIG5ld2VyIG9mIHRoZSBTb3VuZEJsYXN0ZXIgUHJvCisoTWF0c3VzaGl0YSwgS290b2J1a2ksIFBhbmFzb25pYywgQ3JlYXRpdmVMYWJzLCBMb25nc2hpbmUgYW5kIFRlYWMpCitDRC1ST00gZHJpdmVyIGZvciBMaW51eC4KKworc2JwY2QgcmVhbGx5LCByZWFsbHkgaXMgTk9UIGZvciBBTlkgSURFL0FUQVBJIGRyaXZlIQorTm90IGV2ZW4gaWYgeW91IGhhdmUgYW4gIm9yaWdpbmFsIiBTb3VuZEJsYXN0ZXIgY2FyZCB3aXRoIGFuIElERSBpbnRlcmZhY2UhCitTbywgeW91J2QgYmV0dGVyIGhhdmUgYSBsb29rIGludG8gUkVBRE1FLmlkZSBpZiB5b3VyIHBvcnQgYWRkcmVzcyBpcyAweDFGMCwKKzB4MTcwLCAweDFFOCwgMHgxNjggb3Igc2ltaWxhci4KK0kgZ2V0IHRvbnMgb2YgbWFpbHMgZnJvbSBJREUvQVRBUEkgZHJpdmUgdXNlcnMgLSBJIHJlYWxseSBjYW4ndCBjb250aW51ZQorYW55IG1vcmUgdG8gYW5zd2VyIHRoZW0gYWxsLiBTbywgaWYgeW91ciBkcml2ZS9pbnRlcmZhY2UgaW5mb3JtYXRpb24gc2hlZXRzCittZW50aW9uICJJREUiIChwcmltYXJ5LCBzZWNvbmRhcnksIHRlcnRpYXJ5LCBxdWF0ZXJuYXJ5KSBhbmQgdGhlIERPUyBkcml2ZXIKK2ludm9raW5nIGxpbmUgd2l0aGluIHlvdXIgQ09ORklHLlNZUyBpcyB1c2luZyBhbiBhZGRyZXNzIGJlbG93IDB4MjMwOgorRE9OJ1QgUk9CIE1ZIExBU1QgTkVSVkUgLSBqdW1wZXIgeW91ciBpbnRlcmZhY2UgdG8gYWRkcmVzcyAweDE3MCBhbmQgSVJRIDE1CisodGhhdCBpcyB0aGUgInNlY29uZGFyeSBJREUiIGNvbmZpZ3VyYXRpb24pLCBzZXQgeW91ciBkcml2ZSB0byAibWFzdGVyIiBhbmQKK3VzZSBpZGUtY2QgYXMgeW91ciBkcml2ZXIuIElmIHlvdSBkbyBub3QgaGF2ZSBhIHNlY29uZCBJREUgaGFyZCBkaXNrLCB1c2UgdGhlCitMSUxPIGNvbW1hbmRzCisgICBoZGI9bm9wcm9iZSBoZGM9Y2Ryb20KK2FuZCBnZXQgbHVja3kuCitUbyBtYWtlIGl0IGZ1bGx5IGNsZWFyIHRvIHlvdTogaWYgeW91IG1haWwgbWUgYWJvdXQgSURFL0FUQVBJIGRyaXZlIHByb2JsZW1zLAorbXkgYW5zd2VyIGlzIGFib3ZlLCBhbmQgSSBzaW1wbHkgd2lsbCBkaXNjYXJkIHlvdXIgbWFpbCwgaG9waW5nIHRvIHN0b3AgdGhlCitmbG9vZCBhbmQgdG8gZmluZCB0aW1lIHRvIGxlYWQgbXkgMTIteWVhciBvbGQgc29uIHRvd2FyZHMgaGFwcHkgY29tcHV0aW5nLgorCitUaGUgZHJpdmVyIGlzIGFibGUgdG8gZHJpdmUgdGhlIHdob2xlIGZhbWlseSBvZiAidHJhZGl0aW9uYWwiIEFULXN0eWxlICh0aGF0CitpcyBOT1QgdGhlIG5ldyAiRW5oYW5jZWQgSURFIiBvciAiQVRBUEkiIGRyaXZlIHN0YW5kYXJkKSBNYXRzdXNoaXRhLAorS290b2J1a2ksIFBhbmFzb25pYyBkcml2ZXMsIHNvbWV0aW1lcyBsYWJlbGxlZCBhcyAiQ3JlYXRpdmVMYWJzIi4gVGhlCit3ZWxsLWtub3duIGRyaXZlcyBhcmUgQ1ItNTIxLCBDUi01MjIsIENSLTUyMywgQ1ItNTYyLCBDUi01NjMuCitDUi01NzQgaXMgYW4gSURFL0FUQVBJIGRyaXZlLgorCitUaGUgTG9uZ3NoaW5lIExDUy03MjYwIGlzIGEgZG91YmxlLXNwZWVkIGRyaXZlIHdoaWNoIHVzZXMgdGhlICJvbGQiCitNYXRzdXNoaXRhIGNvbW1hbmQgc2V0LiBJdCBpcyBzdXBwb3J0ZWQgLSB3aXRoIGhlbHAgYnkgU2VyZ2UgUm9ieW5zLgorVmVydG9zICgiRWxpdGVncm91cCBDb21wdXRlciBTeXN0ZW1zIiwgRUNTKSBoYXMgYSBzaW1pbGFyIGRyaXZlIC0gc3VwcG9ydAoraGFzIHN0YXJ0ZWQ7IGdldCBpbiBjb250YWN0IGlmIHlvdSBoYXZlIHN1Y2ggYSAiVmVydG9zIDEwMCIgb3IgIkVDUy1BVCIKK2RyaXZlLgorCitUaGVyZSBleGlzdHMgYW4gIklCTSBFeHRlcm5hbCBJU0EgQ0QtUk9NIERyaXZlIiB3aGljaCBpbiBmYWN0IGlzIGEgQ1ItNTYzCit3aXRoIGEgc3BlY2lhbCBjb250cm9sbGVyIGJvYXJkLiBUaGlzIGRyaXZlIGlzIHN1cHBvcnRlZCAodGhlIGludGVyZmFjZSBpcworb2YgdGhlICJMYXNlck1hdGUiIHR5cGUpLCBhbmQgaXQgaXMgcG9zc2libHkgdGhlIGJlc3QgYnV5IHRvZGF5IChjaGVhcGVyIHRoYW4KK2FuIGludGVybmFsIGRyaXZlLCBhbmQgeW91IGNhbiB1c2UgaXQgYXMgYW4gaW50ZXJuYWwsIHRvbyAtIGUuZy4gcGx1ZyBpdCBpbnRvCithIHNvdW5kY2FyZCkuCisKK0NyZWF0aXZlTGFicyBoYXMgYSBuZXcgZHJpdmUgIkNEMjAwIiBhbmQgYSBzaW1pbGFyIGRyaXZlICJDRDIwMEYiLiBUaGUgbGF0dGVyCitpcyBtYWRlIGJ5IEZ1bmFpIGFuZCBzb21ldGltZXMgbmFtZWQgIkUyNTUwVUEiLCBuZXdlciBtb2RlbHMgbWF5IGJlIG5hbWVkCisiTUs0MDE1Ii4gVGhlIENEMjAwRiBkcml2ZXMgc2hvdWxkIGZ1bGx5IHdvcmsuCitDRDIwMCBkcml2ZXMgd2l0aG91dCAiRiIgYXJlIHN0aWxsIGdpdmluZyBwcm9ibGVtczogZHJpdmUgZGV0ZWN0aW9uIGFuZAorcGxheWluZyBhdWRpbyBzaG91bGQgd29yaywgZGF0YSBhY2Nlc3Mgd2lsbCByZXN1bHQgaW4gZXJyb3JzLiBJIG5lZWQgcXVhbGlmaWVkCitmZWVkYmFjayBhYm91dCB0aGUgYnVncyB3aXRoaW4gdGhlIGRhdGEgZnVuY3Rpb25zIG9yIGEgZHJpdmUgKEkgbmV2ZXIgc2F3IGEKK0NEMjAwKS4KKworVGhlIHF1YWQtc3BlZWQgVGVhYyBDRC01NUEgZHJpdmUgaXMgc3VwcG9ydGVkLCBidXQgc3RpbGwgZG9lcyBub3QgcmVhY2ggImZ1bGwKK3NwZWVkIi4gVGhlIGRhdGEgcmF0ZSBhbHJlYWR5IHJlYWNoZXMgNTAwIGtCL3NlYyBpZiB5b3Ugc2V0IFNCUF9CVUZGRVJfRlJBTUVTCit0byA2NCAoaXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGRvIHRoYXQgZm9yIG5vcm1hbCAiZmlsZSBhY2Nlc3MiIHVzYWdlLCBidXQgaXQKK2NhbiBzcGVlZCB1cCB0aGluZ3MgYSBsb3QgaWYgeW91IHVzZSBzb21ldGhpbmcgbGlrZSAiZGQiIHRvIHJlYWQgZnJvbSB0aGUKK2RyaXZlOyBJIHVzZSBpdCBmb3IgdmVyaWZ5aW5nIHNlbGYtd3JpdHRlbiBDRHMgdGhpcyB3YXkpLgorVGhlIGRyaXZlIGl0c2VsZiBpcyBhYmxlIHRvIGRlbGl2ZXIgNjAwIGtCL3NlYywgc28gdGhpcyBuZWVkcword29yazsgd2l0aCB0aGUgbm9ybWFsIHNldHVwLCB0aGUgcGVyZm9ybWFuY2UgY3VycmVudGx5IGlzIG5vdCBldmVuIGFzIGdvb2QgYXMKK2RvdWJsZS1zcGVlZC4KKworVGhpcyBkcml2ZXIgaXMgTk9UIGZvciBNaXRzdW1pIG9yIFNvbnkgb3IgQXp0ZWNoIG9yIFBoaWxpcHMgb3IgWFhYIGRyaXZlcywKK2FuZCBhZ2FpbjogdGhpcyBkcml2ZXIgaXMgaW4gbm8gd2F5IHVzYWJsZSBmb3IgYW55IElERS9BVEFQSSBkcml2ZS4gSWYgeW91IAordGhpbmsgeW91ciBkcml2ZSBzaG91bGQgd29yayBhbmQgaXQgZG9lc24ndDogc2VuZCBtZSB0aGUgRE9TIGRyaXZlciBmb3IgeW91cgorYmVhc3QgKGd6aXBwZWQgKyB1dWVuY29kZWQpIGFuZCB5b3VyIENPTkZJRy5TWVMgaWYgeW91IHdhbnQgdG8gYXNrIG1lIGZvciBoZWxwLAorYW5kIGluY2x1ZGUgYW4gb3JpZ2luYWwgbG9nIG1lc3NhZ2UgZXhjZXJwdCwgYW5kIHRyeSB0byBnaXZlIGFsbCBpbmZvcm1hdGlvbgorYSBjb21wbGV0ZSBpZGlvdCBuZWVkcyB0byB1bmRlcnN0YW5kIHlvdXIgaGFzc2xlIGFscmVhZHkgd2l0aCB5b3VyIGZpcnN0CittYWlsLiBBbmQgaWYgeW91IHdhbnQgdG8gc2F5ICJhcyBJIGhhdmUgbWFpbGVkIHlvdSBiZWZvcmUiLCBiZSBzdXJlIHRoYXQgSQorZG9uJ3QgcmVtZW1iZXIgeW91ciAiY2FzZSIgYnkgc3VjaCByZW1hcmtzOyBhdCB0aGUgbW9tZW50LCBJIGhhdmUgc29tZSAKK2h1bmRyZWRzIG9mIG9wZW4gY29ycmVzcG9uZGVuY2VzIGFib3V0IExpbnV4IENEUk9NIHF1ZXN0aW9ucyAoaG9wZSB0byByZWR1Y2UgaWYKK3RoZSBJREUvQVRBUEkgdXNlciBxdWVzdGlvbnMgZGlzYXBwZWFyKS4gCisKKworVGhpcyBkcml2ZXIgd2lsbCB3b3JrIHdpdGggdGhlIHNvdW5kY2FyZCBpbnRlcmZhY2VzIChTQiBQcm8sIFNCIDE2LCBHYWxheHksCitTb3VuZEZYLCBNb3phcnQsIE1BRDE2IC4uLikgYW5kIHdpdGggdGhlICJuby1zb3VuZCIgY2FyZHMgKFBhbmFzb25pYyBDSS0xMDFQLAorTGFzZXJNYXRlLCBXREgtNzAwMUMsIExvbmdzaGluZSBMQ1MtNjg1MywgVGVhYyAuLi4pLgorCitJdCB3b3JrcyB3aXRoIHRoZSAiY29uZmlndXJhYmxlIiBpbnRlcmZhY2UgIlNlcXVvaWEgUy0xMDAwIiwgdG9vLCB3aGljaCBpcyAKK3VzZWQgb24gdGhlIFNwZWEgTWVkaWEgRlggYW5kIEVuc29uaWMgU291bmRzY2FwZSBzb3VuZCBjYXJkcy4gWW91IGhhdmUgdG8KK3NwZWNpZnkgdGhlIHR5cGUgIlNCUFJPIDIiIGFuZCB0aGUgdHJ1ZSBDRFJPTSBwb3J0IGFkZHJlc3Mgd2l0aCBpdCwgbm90IHRoZQorImNvbmZpZ3VyYXRpb24gcG9ydCIgYWRkcmVzcy4KKworSWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIHdoaWNoIG5lZWRzIGEgImNvbmZpZ3VyYXRpb24gZHJpdmVyIiBpbnN0ZWFkIG9mCitqdW1wZXJzIGZvciBpbnRlcmZhY2UgdHlwZXMgYW5kIGFkZHJlc3NlcyAobGlrZSBNb3phcnQgY2FyZHMpIC0gdGhvc2UKK2RyaXZlcnMgZ2V0IGludm9rZWQgYmVmb3JlIHRoZSBET1MgQ0RST00gZHJpdmVyIGluIHlvdXIgQ09ORklHLlNZUywgdHlwaWNhbAorbmFtZXMgYXJlICJjZHNldHVwLnN5cyIgYW5kICJtenRpbml0LnN5cyIgLSBsZXQgdGhlIHNvdW5kIGRyaXZlciBkbyB0aGUKK0NEUk9NIHBvcnQgY29uZmlndXJhdGlvbiAodGhlIGxlYWRpbmcgY29tbWVudHMgaW4gbGludXgvZHJpdmVycy9zb3VuZC9tYWQxNi5jCithcmUganVzdCBmb3IgeW91ISkuIEhhbm51IFNhdm9sYWluZW4ncyBtYWQxNi5jIGNvZGUgaXMgYWJsZSB0byBzZXQgdXAgbXkKK01vemFydCBjYXJkIC0gSSBzaW1wbHkgaGFkIHRvIGFkZAorICAgI2RlZmluZSBNQUQxNl9DT05GIDB4MDYKKyAgICNkZWZpbmUgTUFEMTZfQ0RTRUwgMHgwMwordG8gY29uZmlndXJlIHRoZSBDRFJPTSBpbnRlcmZhY2UgZm9yIHR5cGUgIlBhbmFzb25pYyIgKExhc2VyTWF0ZSkgYW5kIGFkZHJlc3MKKzB4MzQwLgorCitUaGUgaW50ZXJmYWNlIHR5cGUgaGFzIHRvIGdldCBjb25maWd1cmVkIGluIGxpbnV4L2RyaXZlcnMvY2Ryb20vc2JwY2QuaCwgCitiZWNhdXNlIHRoZSByZWdpc3RlciBsYXlvdXQgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhlICJTb3VuZEJsYXN0ZXIiIGFuZCB0aGUKKyJMYXNlck1hdGUiIHR5cGUuCisKK0kgZ290IGEgcmVwb3J0IHRoYXQgdGhlIFRlYWMgaW50ZXJmYWNlIGNhcmQgIkkvRiBFMTE3MDk4IiBpcyBvZiB0eXBlCisiU291bmRCbGFzdGVyIiAoaS5lLiB5b3UgaGF2ZSB0byBzZXQgU0JQUk8gdG8gMSkgZXZlbiB3aXRoIHRoZSBhZGRyZXNzZXMKKzB4MzAwIGFuZCBhYm92ZS4gVGhpcyBpcyB1bnVzdWFsLCBhbmQgaXQgY2FuJ3QgZ2V0IGNvdmVyZWQgYnkgdGhlIGF1dG8KK3Byb2Jpbmcgc2NoZW1lLgorVGhlIFRlYWMgMTYtYml0IGludGVyZmFjZSBjYXJkcyAobGlrZSBQL04gRTk1MDIyOC0wMEEsIGRlZmF1bHQgYWRkcmVzcyAweDJDMCkKK25lZWQgdGhlIFNCUFJPIDMgc2V0dXAuCisKK0lmIGF1dG8tcHJvYmluZyBmb3VuZCB0aGUgZHJpdmUsIHRoZSBhZGRyZXNzIGlzIGNvcnJlY3QuIFRoZSByZXBvcnRlZCB0eXBlCittYXkgYmUgd3JvbmcuIEEgIm1vdW50IiB3aWxsIGdpdmUgc3VjY2VzcyBvbmx5IGlmIHRoZSBpbnRlcmZhY2UgdHlwZSBpcyBzZXQKK3JpZ2h0LiBQbGF5aW5nIGF1ZGlvIHNob3VsZCB3b3JrIHdpdGggYSB3cm9uZyBzZXQgaW50ZXJmYWNlIHR5cGUsIHRvby4KKworV2l0aCBzb21lIFRlYWMgYW5kIHNvbWUgQ0QyMDAgZHJpdmVzIEkgaGF2ZSBzZWVuIGludGVyZmFjZSBjYXJkcyB3aGljaCBzZWVtCit0byBsYWNrIHRoZSAiZHJpdmUgc2VsZWN0IiBsaW5lczsgYWx3YXlzIGRyaXZlIDAgZ2V0cyBhZGRyZXNzZWQuIFRvIGF2b2lkCisibWlycm9yIGRyaXZlcyIgKGZvdXIgZHJpdmVzIGRldGVjdGVkIHdoZXJlIHlvdSBvbmx5IGhhdmUgb25lKSB3aXRoIHN1Y2gKK2ludGVyZmFjZSBjYXJkcywgc2V0IE1BWF9EUklWRVMgdG8gMSBhbmQganVtcGVyIHlvdXIgZHJpdmUgdG8gSUQgMCAoaWYKK3Bvc3NpYmxlKS4KKworCitVcCB0byA0IGRyaXZlcyBwZXIgaW50ZXJmYWNlIGNhcmQsIGFuZCB1cCB0byA0IGludGVyZmFjZSBjYXJkcyBhcmUgc3VwcG9ydGVkLgorQWxsIHN1cHBvcnRlZCBkcml2ZSBmYW1pbGllcyBjYW4gYmUgbWl4ZWQsIGJ1dCB0aGUgQ1ItNTIxIGRyaXZlcyBhcmUgCitoYXJkLXdpcmVkIHRvIGRyaXZlIElEIDAuIFRoZSBkcml2ZXMgaGF2ZSB0byB1c2UgZGlmZmVyZW50IGRyaXZlIElEcywgYW5kIGVhY2gKK2RyaXZlIGhhcyB0byBnZXQgYSB1bmlxdWUgbWlub3IgbnVtYmVyICgwLi4uMyksIGNvcnJlc3BvbmRpbmcgaW5kaXJlY3RseSB0byAKK2l0cyBkcml2ZSBJRC4KK1RoZSBkcml2ZSBJRHMgbWF5IGJlIHNlbGVjdGVkIGZyZWVseSBmcm9tIDAgdG8gMyAtIHRoZXkgZG8gbm90IGhhdmUgdG8gYmUgaW4KK2NvbnNlY3V0aXZlIG9yZGVyLgorCitBcyBEb24gQ2Fycm9sbCwgZG9uQGRzOS51cy5kZWxsLmNvbSBvciBGSURPIDE6MzgyLzE0LCB0b2xkIG1lLCBpdCBpcyBwb3NzaWJsZQordG8gY2hhbmdlIG9sZCBkcml2ZXMgdG8gYW55IElELCB0b28uIEhlIHdyaXRlcyBpbiB0aGlzIHNlbnNlOgorICAgIkluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIG1vcmUgdGhhbiBvbmUgc2luZ2xlIHNwZWVkIGRyaXZlCisgICAodGhleSBkbyBub3QgaGF2ZSB0aGUgSUQganVtcGVycykgeW91IG11c3QgYWRkIGEgRElQIHN3aXRjaAorICAgYW5kIHR3byByZXNpc3RvcnMuIFRoZSBwYWRzIGFyZSBhbHJlYWR5IG9uIHRoZSBib2FyZCBuZXh0IHRvCisgICB0aGUgcG93ZXIgY29ubmVjdG9yLiBZb3Ugd2lsbCBzZWUgdGhlIHNpbGtzY3JlZW4gZm9yIHRoZQorICAgc3dpdGNoIGlmIHlvdSByZW1vdmUgdGhlIHRvcCBjb3Zlci4KKyAgICAgICAgICAgICAgICAgICAgMSAyIDMgNAorICAgICAgICAgICAgIElEIDAgPSB4IEYgRiB4ICAgICAgICAgICAgIE8gPSAib24iCisgICAgICAgICAgICAgSUQgMSA9IHggTyBGIHggICAgICAgICAgICAgRiA9ICJvZmYiCisgICAgICAgICAgICAgSUQgMiA9IHggRiBPIHggICAgICAgICAgICAgeCA9ICJkb24ndCBjYXJlIgorICAgICAgICAgICAgIElEIDMgPSB4IE8gTyB4CisgICBOZXh0IHRvIHRoZSBzd2l0Y2ggYXJlIHRoZSBwb3NpdGlvbnMgZm9yIFI3NiAoN2spIGFuZCBSNzgKKyAgICgxMmspLiBJIGhhZCB0byBwbGF5IGFyb3VuZCB3aXRoIHRoZSByZXNpc3RvciB2YWx1ZXMgLSBJRCAzCisgICBkaWQgbm90IHdvcmsgd2l0aCBvdGhlciB2YWx1ZXMuIElmIHRoZSB2YWx1ZXMgYXJlIG5vdCBnb29kLAorICAgSUQgMyBiZWhhdmVzIGxpa2UgSUQgMC4iCisKK1RvIHVzZSBtb3JlIHRoYW4gNCBkcml2ZXMsIHlvdSBzaW1wbHkgbmVlZCBhIHNlY29uZCBjb250cm9sbGVyIGNhcmQgYXQgYSAKK2RpZmZlcmVudCBhZGRyZXNzIGFuZCBhIHNlY29uZCBjYWJsZS4KKworVGhlIGRyaXZlciBzdXBwb3J0cyByZWFkaW5nIG9mIGRhdGEgZnJvbSB0aGUgQ0QgYW5kIHBsYXlpbmcgb2YgYXVkaW8gdHJhY2tzLgorVGhlIGF1ZGlvIHBhcnQgc2hvdWxkIHJ1biB3aXRoIFdvcmtNYW4sIHhjZHBsYXllciwgd2l0aCB0aGUgIm5vbi1YMTEiIHByb2R1Y3RzCitDRHBsYXllciBhbmQgV29ya0JvbmUgLSB0ZWxsIG1lIGlmIGl0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3RoZXIgc29mdHdhcmUuCitUaGUgb25seSBhY2NlcHRlZCBtZWFzdXJlIGZvciBjb3JyZWN0bmVzcyB3aXRoIHRoZSBhdWRpbyBmdW5jdGlvbnMgaXMgdGhlCisiY2R0ZXN0ZXIiIHV0aWxpdHkgKGFwcGVuZGVkKSAtIG1vc3QgYXVkaW8gcGxheWVyIHByb2dyYW1tZXJzIHNlZW0gdG8gYmUKK2JldHRlciBtdXNpY2lhbnMgdGhhbiBwcm9ncmFtbWVycy4gOy0pCisKK1dpdGggdGhlIENSLTU2eCBhbmQgdGhlIENEMjAwIGRyaXZlcywgdGhlIHJlYWRpbmcgb2YgYXVkaW8gZnJhbWVzIGlzIHBvc3NpYmxlLgorVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBhbiBJT0NUTCBmdW5jdGlvbiB3aGljaCByZWFkcyBSRUFEX0FVRElPIGZyYW1lcyBvZgorMjM1MiBieXRlcyBhdCBvbmNlIChjb25maWd1cmFibGUgd2l0aCB0aGUgIlJFQURfQVVESU8iIGRlZmluZSwgZGVmYXVsdCBpcyAwKS4KK1JlYWRpbmcgdGhlIHNhbWUgZnJhbWUgYSBzZWNvbmQgdGltZSBnaXZlcyBkaWZmZXJlbnQgZGF0YTsgdGhlIGZyYW1lIGRhdGEgCitzdGFydCBhdCBhIGRpZmZlcmVudCBwb3NpdGlvbiwgYnV0IGFsbCByZWFkIGJ5dGVzIGFyZSB2YWxpZCwgYW5kIHdlIGFsd2F5cworcmVhZCA5OCBjb25zZWN1dGl2ZSBjaHVua3MgKG9mIDI0IEJ5dGVzKSBhcyBhIGZyYW1lLiBSZWFkaW5nIG1vcmUgdGhhbiAxIGZyYW1lCithdCBvbmNlIHBvc3NpYmx5IG1pc3NlcyBzb21lIGNodW5rcyBhdCBlYWNoIGZyYW1lIGJvdW5kYXJ5LiBUaGlzIGxhY2sgaGFzIHRvCitnZXQgY29ycmVjdGVkIGJ5IGV4dGVybmFsLCAiaGlnaGVyIGxldmVsIiBzb2Z0d2FyZSB3aGljaCByZWFkcyB0aGUgc2FtZSBmcmFtZSAKK2FnYWluIGFuZCB0cmllcyB0byBmaW5kIGFuZCBlbGltaW5hdGUgb3ZlcmxhcHBpbmcgY2h1bmtzICgyNC1ieXRlLXBpZWNlcykuCisKK1RoZSB0cmFuc2ZlciByYXRlIHdpdGggcmVhZGluZyBhdWRpbyAoMS1mcmFtZS1waWVjZXMpIGN1cnJlbnRseSBpcyB2ZXJ5IHNsb3cuCitUaGlzIGNhbiBiZSBiZXR0ZXIgcmVhZGluZyBiaWdnZXIgY2h1bmtzLCBidXQgdGhlICJtaXNzaW5nIiBjaHVua3MgcG9zc2libHkKK29jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzaW5nbGUgZnJhbWUuCitUaGUgc29mdHdhcmUgaW50ZXJmYWNlIHBvc3NpYmx5IG1heSBjaGFuZ2UgYSBiaXQgdGhlIGRheSB0aGUgU0NTSSBkcml2ZXIKK3N1cHBvcnRzIGl0IHRvby4KKworV2l0aCBhbGwgYnV0IHRoZSBDUi01MnggZHJpdmVzLCBNdWx0aVNlc3Npb24gaXMgc3VwcG9ydGVkLgorUGhvdG8gQ0RzIHdvcmsgKHRoZSAib2xkIiBkcml2ZXMgbGlrZSBDUi01MjEgY2FuIGFjY2VzcyBvbmx5IHRoZSBmaXJzdAorc2Vzc2lvbiBvZiBhIHBob3RvQ0QpLgorQXQgZnRwLmd3ZGcuZGU6L3B1Yi9saW51eC9ocGNkdG9wcG0vIHlvdSB3aWxsIGZpbmQgSGFkbXV0IERhbmlzY2gncyBwYWNrYWdlIHRvCitjb252ZXJ0IHBob3RvIENEIGltYWdlIGZpbGVzIGFuZCBHZXJkIEtub3JyJ3Mgdmlld2luZyB1dGlsaXR5LgorCitUaGUgdHJhbnNmZXIgcmF0ZSB3aWxsIHJlYWNoIDE1MCBrQi9zZWMgd2l0aCBDUi01MnggZHJpdmVzLCAzMDAga0Ivc2VjIHdpdGgKK0NSLTU2eCBkcml2ZXMsIGFuZCBjdXJyZW50bHkgbm90IG1vcmUgdGhhbiA1MDAga0Ivc2VjICh1c3VhbGx5IGxlc3MgdGhhbgorMjUwIGtCL3NlYykgd2l0aCB0aGUgVGVhYyBxdWFkIHNwZWVkIGRyaXZlcy4KK1hBIChQaG90b0NEKSBkaXNrcyB3aXRoICJvbGQiIGRyaXZlcyBnaXZlIG9ubHkgNTAga0Ivc2VjLgorCitUaGlzIHJlbGVhc2UgY29uc2lzdHMgb2YKKy0gdGhpcyBSRUFETUUgZmlsZQorLSB0aGUgZHJpdmVyIGZpbGUgbGludXgvZHJpdmVycy9jZHJvbS9zYnBjZC5jCistIHRoZSBzdHViIGZpbGVzIGxpbnV4L2RyaXZlcnMvY2Ryb20vc2JwY2RbMjM0XS5jCistIHRoZSBoZWFkZXIgZmlsZSBsaW51eC9kcml2ZXJzL2Nkcm9tL3NicGNkLmguCisKKworVG8gaW5zdGFsbDoKKy0tLS0tLS0tLS0tCisKKzEuIFNldHVwIHlvdXIgaGFyZHdhcmUgcGFyYW1ldGVycy4gVGhvdWdoIHRoZSBkcml2ZXIgZG9lcyAiYXV0by1wcm9iaW5nIiBhdCBhCisgICBsb3Qgb2YgKG5vdCBhbGwgcG9zc2libGUhKSBhZGRyZXNzZXMsIHRoaXMgc3RlcCBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIGV2ZXJ5ZGF5IHVzZS4gWW91IHNob3VsZCBsZXQgc2JwY2QgYXV0by1wcm9iZSBvbmNlIGFuZCB1c2UgdGhlIHJlcG9ydGVkCisgICBhZGRyZXNzIGlmIGEgZHJpdmUgZ290IGZvdW5kLiBUaGUgcmVwb3J0ZWQgdHlwZSBtYXkgYmUgaW5jb3JyZWN0OyBpdCBpcworICAgY29ycmVjdCBpZiB5b3UgY2FuIG1vdW50IGEgZGF0YSBDRC4gVGhlcmUgaXMgbm8gY2hvaWNlIGZvciB5b3Ugd2l0aCB0aGUKKyAgIHR5cGU7IG9ubHkgb25lIGlzIHJpZ2h0LCB0aGUgb3RoZXJzIGFyZSBkZWFkbHkgd3JvbmcuCisKKyAgIGEuIEdvIGludG8gL3Vzci9zcmMvbGludXgvZHJpdmVycy9jZHJvbS9zYnBjZC5oIGFuZCBjb25maWd1cmUgaXQgZm9yIHlvdXIKKyAgICAgIGhhcmR3YXJlIChuZWFyIHRoZSBiZWdpbm5pbmcpOgorICAgICAgYTEuIFNldCBpdCB1cCBmb3IgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgaW50ZXJmYWNlIGJvYXJkLgorICAgICAgICAgICJPcmlnaW5hbCIgQ3JlYXRpdmVMYWJzIHNvdW5kIGNhcmRzIG5lZWQgIlNCUFJPIDEiLgorICAgICAgICAgIE1vc3QgImNvbXBhdGlibGUiIHNvdW5kIGNhcmRzIChhbG1vc3QgYWxsICJub24tQ3JlYXRpdmVMYWJzIiBjYXJkcykKKyAgICAgICAgICBuZWVkICJTQlBSTyAwIi4KKyAgICAgICAgICBUaGUgIm5vLXNvdW5kIiBib2FyZCBmcm9tIE9tbmlDZCBuZWVkcyB0aGUgIlNCUFJPIDEiIHNldHVwLgorICAgICAgICAgIFRoZSBUZWFjIDgtYml0ICJuby1zb3VuZCIgYm9hcmRzIG5lZWQgdGhlICJTQlBSTyAxIiBzZXR1cC4KKyAgICAgICAgICBUaGUgVGVhYyAxNi1iaXQgIm5vLXNvdW5kIiBib2FyZHMgbmVlZCB0aGUgIlNCUFJPIDMiIHNldHVwLgorICAgICAgICAgIEFsbCBvdGhlciAibm8tc291bmQiIGJvYXJkcyBuZWVkIHRoZSAiU0JQUk8gMCIgc2V0dXAuCisgICAgICAgICAgVGhlIFNwZWEgTWVkaWEgRlggYW5kIEVuc29uaXEgU291bmRTY2FwZSBjYXJkcyBuZWVkICJTQlBSTyAyIi4KKyAgICAgICAgICBzYnBjZC5jIGhvbGRzIHNvbWUgZXhhbXBsZXMgaW4gaXRzIGF1dG8tcHJvYmUgbGlzdC4KKyAgICAgICAgICBJZiB5b3UgY29uZmlndXJlICJTQlBSTyIgd3JvbmcsIHRoZSBwbGF5aW5nIG9mIGF1ZGlvIENEcyB3aWxsIHdvcmssCisgICAgICAgICAgYnV0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vdW50IGEgZGF0YSBDRC4KKyAgICAgIGEyLiBUZWxsIHRoZSBhZGRyZXNzIG9mIHlvdXIgQ0RST01fUE9SVCAobm90IG9mIHRoZSBzb3VuZCBwb3J0KS4KKyAgICAgIGEzLiBJZiA0IGRyaXZlcyBnZXQgZm91bmQsIGJ1dCB5b3UgaGF2ZSBvbmx5IG9uZSwgc2V0IE1BWF9EUklWRVMgdG8gMS4KKyAgICAgIGE0LiBTZXQgRElTVFJJQlVUSU9OIHRvIDAuCisgICBiLiBBZGRpdGlvbmFsbHkgZm9yIDIuYTEgYW5kIDIuYTIsIHRoZSBzZXR1cCBtYXkgYmUgZG9uZSBkdXJpbmcKKyAgICAgIGJvb3QgdGltZSAodmlhIHRoZSAia2VybmVsIGNvbW1hbmQgbGluZSIgb3IgIkxJTE8gb3B0aW9uIik6CisgICAgICAgICAgc2JwY2Q9MHgzMjAsTGFzZXJNYXRlCisgICAgICBvcgorICAgICAgICAgIHNicGNkPTB4MjMwLFNvdW5kQmxhc3RlcgorICAgICAgb3IKKyAgICAgICAgICBzYnBjZD0weDMzOCxTb3VuZFNjYXBlCisgICAgICBvcgorICAgICAgICAgIHNicGNkPTB4MkMwLFRlYWMxNmJpdAorICAgICAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpZiB5b3UgaW5zdGFsbCBhIGZyZXNoIGRpc3RyaWJ1dGlvbi4KKyAgICAgIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBpdCBnZXRzIHRha2VuIGFzIHRoZSB0eXBlCisgICAgICBzZXR0aW5nOyAwIGlzICJMYXNlck1hdGUiLCAxIGlzICJTb3VuZEJsYXN0ZXIiLCAyIGlzICJTb3VuZFNjYXBlIiwKKyAgICAgIDMgaXMgIlRlYWMxNmJpdCIuCisgICAgICBTbywgZm9yIGV4YW1wbGUKKyAgICAgICAgICBzYnBjZD0weDIzMCwxCisgICAgICBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgc2JwY2Q9MHgyMzAsU291bmRCbGFzdGVyCisKKzIuICJjZCAvdXNyL3NyYy9saW51eCIgYW5kIGRvIGEgIm1ha2UgY29uZmlnIiBhbmQgc2VsZWN0ICJ5IiBmb3IgTWF0c3VzaGl0YQorICAgQ0QtUk9NIHN1cHBvcnQgYW5kIGZvciBJU085NjYwIEZpbGVTeXN0ZW0gc3VwcG9ydC4gSWYgeW91IGRvIG5vdCBoYXZlIGEKKyAgIHNlY29uZCwgdGhpcmQsIG9yIGZvdXJ0aCBjb250cm9sbGVyIGluc3RhbGxlZCwgZG8gbm90IHNheSAieSIgdG8gdGhlIAorICAgc2Vjb25kYXJ5IE1hdHN1c2hpdGEgQ0QtUk9NIHF1ZXN0aW9ucy4KKworMy4gVGhlbiBtYWtlIHRoZSBrZXJuZWwgaW1hZ2UgKCJtYWtlIHpsaWxvIiBvciBzaW1pbGFyKS4KKworNC4gTWFrZSB0aGUgZGV2aWNlIGZpbGUocykuIFRoaXMgc3RlcCB1c3VhbGx5IGFscmVhZHkgaGFzIGJlZW4gZG9uZSBieSB0aGUKKyAgIE1BS0VERVYgc2NyaXB0LgorICAgVGhlIGRyaXZlciB1c2VzIE1BSk9SIDI1LCBzbywgaWYgbmVjZXNzYXJ5LCBkbworICAgICAgICBta25vZCAvZGV2L3NicGNkICBiIDI1IDAgICAgICAgKGlmIHlvdSBoYXZlIG9ubHkgb25lIGRyaXZlKQorICAgYW5kL29yCisgICAgICAgIG1rbm9kIC9kZXYvc2JwY2QwIGIgMjUgMAorICAgICAgICBta25vZCAvZGV2L3NicGNkMSBiIDI1IDEKKyAgICAgICAgbWtub2QgL2Rldi9zYnBjZDIgYiAyNSAyCisgICAgICAgIG1rbm9kIC9kZXYvc2JwY2QzIGIgMjUgMworICAgdG8gbWFrZSB0aGUgbm9kZShzKS4KKworICAgVGhlICJmaXJzdCBmb3VuZCIgZHJpdmUgZ2V0cyBNSU5PUiAwIChyZWdhcmRsZXNzIG9mIGl0cyBqdW1wZXJlZCBJRCksIHRoZQorICAgIm5leHQgZm91bmQiIChhdCB0aGUgc2FtZSBjYWJsZSkgZ2V0cyBNSU5PUiAxLCAuLi4KKyAgIAorICAgRm9yIGEgc2Vjb25kIGludGVyZmFjZSBib2FyZCwgeW91IGhhdmUgdG8gbWFrZSBub2RlcyBsaWtlCisgICAgICAgIG1rbm9kIC9kZXYvc2JwY2Q0IGIgMjYgMAorICAgICAgICBta25vZCAvZGV2L3NicGNkNSBiIDI2IDEKKyAgIGFuZCBzbyBvbi4gVXNlIHRoZSBNQUpPUnMgMjYsIDI3LCAyOC4KKworICAgSWYgeW91IGZ1cnRoZXIgbWFrZSBhIGxpbmsgbGlrZQorICAgICAgICBsbiAtcyBzYnBjZCAvZGV2L2Nkcm9tCisgICB5b3UgY2FuIHVzZSB0aGUgbmFtZSAvZGV2L2Nkcm9tLCB0b28uCisKKzUuIFJlYm9vdCB3aXRoIHRoZSBuZXcga2VybmVsLgorCitZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGRvCisgICAgICAgICAgICAgIG1rZGlyIC9DRAorYW5kIAorICAgICAgICAgICAgICBtb3VudCAtcnQgaXNvOTY2MCAvZGV2L3NicGNkIC9DRAorb3IKKyAgICAgICAgICAgICAgbW91bnQgLXJ0IGlzbzk2NjAgLW8gYmxvY2s9MjA0OCAvZGV2L3NicGNkIC9DRAorYW5kIHNlZSB0aGUgY29udGVudHMgb2YgeW91ciBDRCBpbiB0aGUgL0NEIGRpcmVjdG9yeS4KK1RvIHVzZSBhdWRpbyBDRHMsIGEgbW91bnRpbmcgaXMgbm90IHJlY29tbWVuZGVkIChhbmQgaXQgd291bGQgZmFpbCBpZiB0aGUKK2ZpcnN0IHRyYWNrIGlzIG5vdCBhIGRhdGEgdHJhY2spLgorCisKK1VzaW5nIHNicGNkIGFzIGEgImxvYWRhYmxlIG1vZHVsZSI6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgZG8gTk9UIHNlbGVjdCAiTWF0c3VzaGl0YS9QYW5hc29uaWMgQ0RST00gZHJpdmVyIHN1cHBvcnQiIGR1cmluZyB0aGUKKyJtYWtlIGNvbmZpZyIgb2YgeW91ciBrZXJuZWwsIHlvdSBjYW4gYnVpbGQgdGhlICJsb2FkYWJsZSBtb2R1bGUiIHNicGNkLm8uCisKK0lmIHNicGNkIGdldHMgdXNlZCBhcyBhIG1vZHVsZSwgdGhlIHN1cHBvcnQgb2YgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UKK2NhcmQgKGkuZS4gZHJpdmVzIDQuLi4xNSkgaXMgZGlzYWJsZWQuCisKK1lvdSBjYW4gc3BlY2lmeSBpbnRlcmZhY2UgYWRkcmVzcyBhbmQgdHlwZSB3aXRoIHRoZSAiaW5zbW9kIiBjb21tYW5kIGxpa2U6CisgIyBpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9zYnBjZC5vIHNicGNkPTB4MzQwLDAKK29yCisgIyBpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9zYnBjZC5vIHNicGNkPTB4MjMwLDEKK29yCisgIyBpbnNtb2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcy9zYnBjZC5vIHNicGNkPTB4MzM4LDIKK3doZXJlIHRoZSBsYXN0IG51bWJlciByZXByZXNlbnRzIHRoZSBTQlBSTyBzZXR0aW5nIChubyBzdHJpbmdzIGFsbG93ZWQgaGVyZSkuCisKKworVGhpbmdzIG9mIGludGVyZXN0OgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgdG8gdHJ5IHRoZSBMYXNlck1hdGUgdHlwZSBvZiBpbnRlcmZhY2UgYXQgSS9PIHBvcnQKKzB4MDM0MCBmaXJzdC4gSWYgdGhpcyBpcyBub3QgYXBwcm9wcmlhdGUsIHNicGNkLmggc2hvdWxkIGdldCBjaGFuZ2VkCisoeW91IHdpbGwgZmluZCB0aGUgcmlnaHQgcGxhY2UgLSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcpLgorCitObyBETUEgYW5kIG5vIElSUSBpcyB1c2VkLgorCitUbyByZWR1Y2Ugb3IgaW5jcmVhc2UgdGhlIGFtb3VudCBvZiBrZXJuZWwgbWVzc2FnZXMsIGVkaXQgc2JwY2QuYyBhbmQgcGxheQord2l0aCB0aGUgIkRCR194eHgiIHN3aXRjaGVzIChpbml0aWFsaXphdGlvbiBvZiB0aGUgdmFyaWFibGUgInNicGNkX2RlYnVnIikuCitEb24ndCBmb3JnZXQgdG8gcmVmbGVjdCBvbiB3aGF0IHlvdSBkbzsgZW5hYmxpbmcgYWxsIERCR194eHggc3dpdGNoZXMgYXQgb25jZQorbWF5IGNyYXNoIHlvdXIgc3lzdGVtLCBhbmQgZWFjaCBtZXNzYWdlIGxpbmUgaXMgYWNjb21wYW5pZWQgYnkgYSBkZWxheS4KKworVGhlIGRyaXZlciB1c2VzIHRoZSAidmFyaWFibGUgQkxPQ0tfU0laRSIgZmVhdHVyZS4gVG8gdXNlIGl0LCB5b3UgaGF2ZSB0bworc3BlY2lmeSAiYmxvY2s9MjA0OCIgYXMgYSBtb3VudCBvcHRpb24uIERvaW5nIHRoaXMgd2lsbCBkaXNhYmxlIHRoZSBkaXJlY3QKK2V4ZWN1dGlvbiBvZiBhIGJpbmFyeSBmcm9tIHRoZSBDRDsgeW91IGhhdmUgdG8gY29weSBpdCB0byBhIGRldmljZSB3aXRoIHRoZQorc3RhbmRhcmQgQkxPQ0tfU0laRSAoMTAyNCkgZmlyc3QuIFNvLCBkbyBub3QgdXNlIHRoaXMgaWYgeW91ciBzeXN0ZW0gaXMKK2RpcmVjdGx5ICJydW5uaW5nIGZyb20gdGhlIENEUk9NIiAobGlrZSBzb21lIG9mIFlnZ2RyYXNpbCdzIGluc3RhbGxhdGlvbgordmFyaWFudHMpLiBUaGVyZSBhcmUgQ0RzIG9uIHRoZSBtYXJrZXQgKGxpa2UgdGhlIEdlcm1hbiAidW5pZml4IiBMaW51eAorZGlzdHJpYnV0aW9uKSB3aGljaCBNVVNUIGdldCBoYW5kbGVkIHdpdGggYSBibG9ja19zaXplIG9mIDEwMjQuIEdlbmVyYWxseSwKK29uZSBjYW4gc2F5IGFsbCB0aGUgQ0RzIHdoaWNoIGhvbGQgZmlsZXMgb2YgdGhlIG5hbWUgWU1UUkFOUy5UQkwgYXJlIGRlZmVjdGl2ZTsKK2RvIG5vdCB1c2UgYmxvY2s9MjA0OCB3aXRoIHRob3NlLgorCitXaXRoaW4gc2JwY2QuaCwgeW91IHdpbGwgZmluZCBzb21lICIjZGVmaW5lInMgKGUuZy4gRUpFQ1QgYW5kIEpVS0VCT1gpLiBXaXRoCit0aGVzZSwgeW91IGNhbiBjb25maWd1cmUgdGhlIGRyaXZlciBmb3Igc29tZSBzcGVjaWFsIHRoaW5ncy4KK1lvdSBjYW4gdXNlIHRoZSBhcHBlbmRlZCBwcm9ncmFtICJjZHRlc3RlciIgdG8gc2V0IHRoZSBhdXRvLWVqZWN0IGZlYXR1cmUKK2R1cmluZyBydW50aW1lLiBKZWZmIFRyYW50ZXIncyAiZWplY3QiIHV0aWxpdHkgY2FuIGRvIHRoaXMsIHRvbyAoYW5kIG1vcmUpCitmb3IgeW91LgorCitUaGVyZSBpcyBhbiBpb2N0bCBDRFJPTU1VTFRJU0VTU0lPTiB0byBvYnRhaW4gd2l0aCBhIHVzZXIgcHJvZ3JhbSBpZgordGhlIENEIGlzIGFuIFhBIGRpc2sgYW5kIC0gaWYgaXQgaXMgLSB3aGVyZSB0aGUgbGFzdCBzZXNzaW9uIHN0YXJ0cy4gVGhlCisiY2R0ZXN0ZXIiIHByb2dyYW0gaWxsdXN0cmF0ZXMgaG93IHRvIGNhbGwgaXQuCisKKworQXV0by1wcm9iaW5nIGF0IGJvb3QgdGltZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgZG9lcyBhdXRvLXByb2JpbmcgYXQgbWFueSB3ZWxsLWtub3duIGludGVyZmFjZSBjYXJkIGFkZHJlc3NlcywKK2J1dCBub3QgYWxsOgorU29tZSBwcm9iaW5ncyBjYW4gY2F1c2UgYSBoYW5nIGlmIGFuIE5FMjAwMCBldGhlcm5ldCBjYXJkIGdldHMgdG91Y2hlZCwgYmVjYXVzZQorU0JQQ0QncyBhdXRvLXByb2JpbmcgaGFwcGVucyBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBuZXQgZHJpdmVycy4KK1Rob3NlICJoYXphcmRvdXMiIGFkZHJlc3NlcyBhcmUgZXhjbHVkZWQgZnJvbSBhdXRvLXByb2Jpbmc7IHRoZSAia2VybmVsIAorY29tbWFuZCBsaW5lIiBmZWF0dXJlIGhhcyB0byBiZSB1c2VkIGR1cmluZyBpbnN0YWxsYXRpb24gaWYgeW91IGhhdmUgeW91ciAKK2RyaXZlIGF0IHRob3NlIGFkZHJlc3Nlcy4gVGhlICJtb2R1bGUiIHZlcnNpb24gaXMgYWxsb3dlZCB0byBwcm9iZSBhdCB0aG9zZQorYWRkcmVzc2VzLCB0b28uCisKK1RoZSBhdXRvLXByb2JpbmcgbG9va3MgZmlyc3QgYXQgdGhlIGNvbmZpZ3VyZWQgYWRkcmVzcyByZXNwLiB0aGUgYWRkcmVzcworc3VibWl0dGVkIGJ5IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBXaXRoIHRoaXMsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzCitkcml2ZXIgd2l0aGluIGluc3RhbGxhdGlvbiBib290IGZsb3BwaWVzLCBhbmQgZm9yIGFueSBub24tc3RhbmRhcmQgYWRkcmVzcywKK3Rvby4KKworQXV0by1wcm9iaW5nIHdpbGwgbWFrZSBhbiBhc3N1bXB0aW9uIGFib3V0IHRoZSBpbnRlcmZhY2UgdHlwZSAoIlNCUFJPIiBvciBub3QpLAorYmFzZWQgdXBvbiB0aGUgYWRkcmVzcy4gVGhhdCBhc3N1bXB0aW9uIG1heSBiZSB3cm9uZyAoaW5pdGlhbGl6YXRpb24gd2lsbCBiZQorby5rLiwgYnV0IHlvdSB3aWxsIGdldCBJL08gZXJyb3JzIGR1cmluZyBtb3VudCkuIEluIHRoYXQgY2FzZSwgdXNlIHRoZSAia2VybmVsCitjb21tYW5kIGxpbmUiIGZlYXR1cmUgYW5kIHNwZWNpZnkgYWRkcmVzcyAmIHR5cGUgYXQgYm9vdCB0aW1lIHRvIGZpbmQgb3V0IHRoZQorcmlnaHQgc2V0dXAuCisKK0ZvciBldmVyeWRheSB1c2UsIGFkZHJlc3MgYW5kIHR5cGUgc2hvdWxkIGdldCBjb25maWd1cmVkIHdpdGhpbiBzYnBjZC5oLiBUaGF0Cit3aWxsIHN0b3AgdGhlIGF1dG8tcHJvYmluZyBkdWUgdG8gc3VjY2VzcyB3aXRoIHRoZSBmaXJzdCB0cnkuCisKK1RoZSBrZXJuZWwgY29tbWFuZCAic2JwY2Q9MCIgc3VwcHJlc3NlcyBlYWNoIGF1dG8tcHJvYmluZyBhbmQgY2F1c2VzCit0aGUgZHJpdmVyIG5vdCB0byBmaW5kIGFueSBkcml2ZTsgaXQgaXMgbWVhbnQgZm9yIHBlb3BsZSB3aG8gbG92ZSBzYnBjZAorc28gbXVjaCB0aGF0IHRoZXkgZG8gbm90IHdhbnQgdG8gbWlzcyBpdCwgZXZlbiBpZiB0aGV5IG1pc3MgdGhlIGRyaXZlcy4gOy0pICAKKworSWYgeW91IGNvbmZpZ3VyZSAiI2RlZmluZSBDRFJPTV9QT1JUIDAiIGluIHNicGNkLmgsIHRoZSBhdXRvLXByb2JpbmcgaXMKK2luaXRpYWxseSBkaXNhYmxlZCBhbmQgbmVlZHMgYW4gZXhwbGljaXQga2VybmVsIGNvbW1hbmQgdG8gZ2V0IGFjdGl2YXRlZC4KK09uY2UgYWN0aXZhdGVkLCBpdCBkb2VzIG5vdCBzdG9wIGJlZm9yZSBzdWNjZXNzIG9yIGVuZC1vZi1saXN0LiBUaGlzIG1heSBiZQordXNlZnVsIHdpdGhpbiAidW5pdmVyc2FsIiBDRFJPTSBpbnN0YWxsYXRpb24gYm9vdCBmbG9wcGllcyAoYnV0IHVzaW5nIHRoZSAKK2xvYWRhYmxlIG1vZHVsZSB3b3VsZCBiZSBiZXR0ZXIgYmVjYXVzZSBpdCBhbGxvd3MgYW4gImV4dGVuZGVkIiBhdXRvLXByb2JpbmcKK3dpdGhvdXQgZmVhcmluZyBORTIwMDAgY2FyZHMpLgorCitUbyBzaG9ydGVuIHRoZSBhdXRvLXByb2JpbmcgbGlzdCB0byBhIHNpbmdsZSBlbnRyeSwgc2V0IERJU1RSSUJVVElPTiAwIHdpdGhpbgorc2JwY2QuaC4KKworCitTZXR0aW5nIHVwIGFkZHJlc3MgYW5kIGludGVyZmFjZSB0eXBlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91ciBJL08gcG9ydCBhZGRyZXNzIGlzIG5vdCAweDM0MCwgeW91IGhhdmUgdG8gbG9vayBmb3IgdGhlICNkZWZpbmVzIG5lYXIKK3RoZSBiZWdpbm5pbmcgb2Ygc2JwY2QuaCBhbmQgY29uZmlndXJlIHRoZW06IHNldCBTQlBSTyB0byAwIG9yIDEgb3IgMiwgYW5kCitjaGFuZ2UgQ0RST01fUE9SVCB0byB0aGUgYWRkcmVzcyBvZiB5b3VyIENEUk9NIEkvTyBwb3J0LgorCitBbG1vc3QgYWxsIG9mIHRoZSAiU291bmRCbGFzdGVyIGNvbXBhdGlibGUiIGNhcmRzIGJlaGF2ZSBsaWtlIHRoZSBuby1zb3VuZAoraW50ZXJmYWNlcywgaS5lLiBuZWVkIFNCUFJPIDAhIAorCitXaXRoICJvcmlnaW5hbCIgU0IgUHJvIGNhcmRzLCBhbiBpbml0aWFsIHNldHRpbmcgb2YgQ0Rfdm9sdW1lIHRocm91Z2ggdGhlCitzb3VuZCBjYXJkJ3MgTUlYRVIgcmVnaXN0ZXIgZ2V0cyBkb25lLgorSWYgeW91IGFyZSB1c2luZyBhICJjb21wYXRpYmxlIiBzb3VuZCBjYXJkIG9mIHR5cGVzICJMYXNlck1hdGUiIG9yICJTUEVBIiwKK3lvdSBjYW4gc2V0IFNPVU5EX0JBU0UgKGluIHNicGNkLmgpIHRvIGdldCBpdCBkb25lIHdpdGggeW91ciBjYXJkLCB0b28uLi4KKworCitVc2luZyBhdWRpbyBDRHM6CistLS0tLS0tLS0tLS0tLS0tCisKK1dvcmttYW4sIFdvcmtCb25lLCB4Y2RwbGF5ZXIsIGNkcGxheWVyIGFuZCB0aGUgbmljZSBsaXR0bGUgdG9vbCAiY2RwbGF5IiAoc2VlCitSRUFETUUuYXp0Y2QgZnJvbSB0aGUgQXp0ZWNoIGRyaXZlciBwYWNrYWdlKSBzaG91bGQgd29yay4KKworVGhlIHByb2dyYW0gQ0RwbGF5ZXIgbGlrZXMgdG8gdGFsayB0byAiL2Rldi9tY2QiIG9ubHksIHhjZHBsYXllciB3YW50cworIi9kZXYvcnNyMCIsIHdvcmttYW4gbG92ZXMgIi9kZXYvc3IwIiBvciAiL2Rldi9jZHJvbSIgLSBzbywgbWFrZSB0aGUgCithcHByb3ByaWF0ZSBsaW5rcyB0byB1c2UgdGhlbSB3aXRob3V0IHRoZSBuZWVkIHRvIHN1cHBseSBwYXJhbWV0ZXJzLgorCisKK0NvcHlpbmcgYXVkaW8gdHJhY2tzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgcHJvZ3JhbSB3aWxsIGNvcHkgdHJhY2sgMSAob3IgYSBwaWVjZSBvZiBpdCkgZnJvbSBhbiBhdWRpbyBDRAoraW50byB0aGUgZmlsZSAidHJhY2swMSI6CisKKy8qPT09PT09PT09PT09PT09PT09PSBiZWdpbiBwcm9ncmFtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAqIHJlYWQgYW4gYXVkaW8gdHJhY2sgZnJvbSBhIENECisgKgorICogKGMpIDE5OTQgRWJlcmhhcmQgTW9lbmtlYmVyZyA8ZW1vZW5rZUBnd2RnLmRlPgorICogICAgICAgICAgbWF5IGJlIHVzZWQgJiBlbmhhbmNlZCBmcmVlbHkKKyAqCisgKiBEdWUgdG8gbm9uLWV4aXN0ZW50IHN5bmMgYnl0ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGF1ZGlvIGZyYW1lIChvciBkdWUKKyAqIHRvIGEgZmlybXdhcmUgYnVnIHdpdGhpbiBhbGwga25vd24gZHJpdmVzPyksIGl0IGlzIGN1cnJlbnRseSBhIGtpbmQgb2YKKyAqIGZvcnR1bmUgaWYgdHdvIGNvbnNlY3V0aXZlIGZyYW1lcyBmaXQgdG9nZXRoZXIuCisgKiBVc3VhbGx5LCB0aGV5IG92ZXJsYXAsIG9yIGEgbGl0dGxlIHBpZWNlIGlzIG1pc3NpbmcuIFRoaXMgaGFwcGVucyBpbiB1bml0cworICogb2YgMjQtYnl0ZSBjaHVua3MuIEl0IGhhcyB0byBnZXQgZml4ZWQgYnkgaGlnaGVyLWxldmVsIHNvZnR3YXJlIChyZWFkaW5nCisgKiB1bnRpbCBhbiBvdmVybGFwIG9jY3VycywgYW5kIHRoZW4gZWxpbWluYXRlIHRoZSBvdmVybGFwcGluZyBjaHVua3MpLiAKKyAqIGZ0cC5nd2RnLmRlOi9wdWIvbGludXgvbWlzYy9jZGRhMndhdi1zYnBjZC4qLnRhci5neiBob2xkcyBhbiBleGFtcGxlIG9mCisgKiBzdWNoIGFuIGFsZ29yaXRobS4KKyAqIFRoaXMgZXhhbXBsZSBwcm9ncmFtIGZ1cnRoZXIgaXMgbWlzc2luZyB0byBvYnRhaW4gdGhlIFN1YkNoYW5uZWwgZGF0YQorICogd2hpY2ggYmVsb25nIHRvIGVhY2ggZnJhbWUuCisgKgorICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUgb2YgdGhlIGxvdy1sZXZlbCBhY2Nlc3Mgcm91dGluZS4gVGhlIHJlYWQgZGF0YSBhcmUKKyAqIHB1cmUgMTYtYml0IENEREEgdmFsdWVzOyB0aGV5IGhhdmUgdG8gZ2V0IGNvbnZlcnRlZCB0byBtYWtlIHNvdW5kIG91dCBvZgorICogdGhlbS4KKyAqIEl0IGlzIG5vIGZ1biB0byBsaXN0ZW4gdG8gaXQgd2l0aG91dCBwcmlvciBvdmVybGFwL3VuZGVybGFwIGNvcnJlY3Rpb24hCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2Ryb21fdG9jaGRyIGhkcjsKK3N0YXRpYyBzdHJ1Y3QgY2Ryb21fdG9jZW50cnkgZW50cnlbMTAxXTsKK3N0YXRpYyBzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbyBhcmc7CitzdGF0aWMgdV9jaGFyIGJ1ZmZlcltDRF9GUkFNRVNJWkVfUkFXXTsKK3N0YXRpYyBpbnQgZGF0YWZpbGUsIGRyaXZlOworc3RhdGljIGludCBpLCBqLCBsaW1pdCwgdHJhY2ssIGVycjsKK3N0YXRpYyBjaGFyIGZpbGVuYW1lWzMyXTsKKworbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworLyoKKyAqIG9wZW4gL2Rldi9jZHJvbQorICovCisgIGRyaXZlPW9wZW4oIi9kZXYvY2Ryb20iLCAwKTsKKyAgaWYgKGRyaXZlPDApCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJjYW4ndCBvcGVuIGRyaXZlLlxuIik7CisgICAgICBleGl0ICgtMSk7CisgICAgfQorLyoKKyAqIGdldCBUb2NIZWFkZXIKKyAqLworICBmcHJpbnRmKHN0ZG91dCwgImdldHRpbmcgVG9jSGVhZGVyLi4uXG4iKTsKKyAgZXJyPWlvY3RsKGRyaXZlLCBDRFJPTVJFQURUT0NIRFIsICZoZHIpOworICBpZiAoZXJyIT0wKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3QgZ2V0IFRvY0hlYWRlciAoZXJyb3IgJWQpLlxuIiwgZXJyKTsKKyAgICAgIGV4aXQgKC0xKTsKKyAgICB9CisgIGVsc2UKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlRvY0hlYWRlcjogJWQgJWRcbiIsIGhkci5jZHRoX3RyazAsIGhkci5jZHRoX3RyazEpOworLyoKKyAqIGdldCBhbmQgZGlzcGxheSBhbGwgVG9jRW50cmllcworICovCisgIGZwcmludGYoc3Rkb3V0LCAiZ2V0dGluZyBUb2NFbnRyaWVzLi4uXG4iKTsKKyAgZm9yIChpPTE7aTw9aGRyLmNkdGhfdHJrMSsxO2krKykKKyAgICB7CisgICAgICBpZiAoaSE9aGRyLmNkdGhfdHJrMSsxKSBlbnRyeVtpXS5jZHRlX3RyYWNrID0gaTsKKyAgICAgIGVsc2UgZW50cnlbaV0uY2R0ZV90cmFjayA9IENEUk9NX0xFQURPVVQ7CisgICAgICBlbnRyeVtpXS5jZHRlX2Zvcm1hdCA9IENEUk9NX0xCQTsKKyAgICAgIGVycj1pb2N0bChkcml2ZSwgQ0RST01SRUFEVE9DRU5UUlksICZlbnRyeVtpXSk7CisgICAgICBpZiAoZXJyIT0wKQorCXsKKwkgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3QgZ2V0IFRvY0VudHJ5ICMlZCAoZXJyb3IgJWQpLlxuIiwgaSwgZXJyKTsKKwkgIGV4aXQgKC0xKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgZnByaW50ZihzdGRvdXQsICJUb2NFbnRyeSAjJWQ6ICUxWCAlMVggJTA2WCAlMDJYXG4iLAorCQkgZW50cnlbaV0uY2R0ZV90cmFjaywKKwkJIGVudHJ5W2ldLmNkdGVfYWRyLAorCQkgZW50cnlbaV0uY2R0ZV9jdHJsLAorCQkgZW50cnlbaV0uY2R0ZV9hZGRyLmxiYSwKKwkJIGVudHJ5W2ldLmNkdGVfZGF0YW1vZGUpOworCX0KKyAgICB9CisgIGZwcmludGYoc3Rkb3V0LCAiZ290IGFsbCBUb2NFbnRyaWVzLlxuIik7CisvKgorICogYXNrIGZvciB0cmFjayBudW1iZXIgKG5vdCBpbXBsZW1lbnRlZCBoZXJlKQorICovCit0cmFjaz0xOworI2lmIDAgLyoganVzdCByZWFkIGEgbGl0dGxlIHBpZWNlICg0IHNlY29uZHMpICovCitlbnRyeVt0cmFjaysxXS5jZHRlX2FkZHIubGJhPWVudHJ5W3RyYWNrXS5jZHRlX2FkZHIubGJhKzMwMDsKKyNlbmRpZgorLyoKKyAqIHJlYWQgdHJhY2sgaW50byBmaWxlCisgKi8KKyAgc3ByaW50ZihmaWxlbmFtZSwgInRyYWNrJTAyZFwwIiwgdHJhY2spOworICBkYXRhZmlsZT1jcmVhdChmaWxlbmFtZSwgMDc1NSk7CisgIGlmIChkYXRhZmlsZTwwKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3Qgb3BlbiBkYXRhZmlsZSAlcy5cbiIsIGZpbGVuYW1lKTsKKyAgICAgIGV4aXQgKC0xKTsKKyAgICB9CisgIGFyZy5hZGRyLmxiYT1lbnRyeVt0cmFja10uY2R0ZV9hZGRyLmxiYTsKKyAgYXJnLmFkZHJfZm9ybWF0PUNEUk9NX0xCQTsgLyogQ0RST01fTVNGIHdvdWxkIGJlIHBvc3NpYmxlIGhlcmUsIHRvby4gKi8KKyAgYXJnLm5mcmFtZXM9MTsKKyAgYXJnLmJ1Zj0mYnVmZmVyWzBdOworICBsaW1pdD1lbnRyeVt0cmFjaysxXS5jZHRlX2FkZHIubGJhOworICBmb3IgKDthcmcuYWRkci5sYmE8bGltaXQ7YXJnLmFkZHIubGJhKyspCisgICAgeworICAgICAgZXJyPWlvY3RsKGRyaXZlLCBDRFJPTVJFQURBVURJTywgJmFyZyk7CisgICAgICBpZiAoZXJyIT0wKQorCXsKKwkgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3QgcmVhZCBhYnMuIGZyYW1lICMlZCAoZXJyb3IgJWQpLlxuIiwgCisJCSBhcmcuYWRkci5sYmEsIGVycik7CisJfQorICAgICAgaj13cml0ZShkYXRhZmlsZSwgJmJ1ZmZlclswXSwgQ0RfRlJBTUVTSVpFX1JBVyk7CisgICAgICBpZiAoaiE9Q0RfRlJBTUVTSVpFX1JBVykKKwl7CisJICBmcHJpbnRmKHN0ZGVyciwiSS9PIGVycm9yIChkYXRhZmlsZSkgYXQgcmVsLiBmcmFtZSAlZFxuIiwKKwkJCSBhcmcuYWRkci5sYmEtZW50cnlbdHJhY2tdLmNkdGVfYWRkci5sYmEpOworCX0KKyAgICAgIGFyZy5hZGRyLmxiYSsrOworICAgIH0KK30KKy8qPT09PT09PT09PT09PT09PT09PT09IGVuZCBwcm9ncmFtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitBdCBmdHAuZ3dkZy5kZTovcHViL2xpbnV4L21pc2MvY2RkYTJ3YXYtc2JwY2QuKi50YXIuZ3ogaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mCitIZWlrbyBFaXNzZmVsZHQncyBkaWdpdGFsLWF1ZGlvIHRvIC5XQVYgY29udmVydGVyICh0aGUgb3JpZ2luYWwgaXMgdGhlcmUsIHRvbykuCitUaGlzIGlzIHByZWxpbWluYXJ5LCBhcyBIZWlrbyBoaW1zZWxmIHdpbGwgY2FyZSBhYm91dCBpdC4KKworCitLbm93biBwcm9ibGVtczoKKy0tLS0tLS0tLS0tLS0tLQorCitDdXJyZW50bHksIHRoZSBkZXRlY3Rpb24gb2YgZGlzayBjaGFuZ2Ugb3IgcmVtb3ZhbCBpcyBhY3RpdmVseSBkaXNhYmxlZC4KKworTW9zdCBhdHRlbXB0cyB0byByZWFkIHRoZSBVUEMvRUFOIGNvZGUgcmVzdWx0IGluIGEgc3RyZWFtIG9mIHplcm9lcy4gQWxsIG15Citkcml2ZXMgYXJlIG1vc3RseSB0ZWxsaW5nIHRoZXJlIGlzIG5vIFVQQy9FQU4gY29kZSBvbiBkaXNrIG9yIHRoZXJlIGlzLCBidXQgaXQKK2lzIGFuIGFsbC16ZXJvIG51bWJlci4gSSBndWVzcyBub3cgYWxtb3N0IG5vIENEIGhvbGRzIHN1Y2ggYSBudW1iZXIuCisKK0J1ZyByZXBvcnRzLCBjb21tZW50cywgd2lzaGVzLCBkb25hdGlvbnMgKHRlY2huaWNhbCBpbmZvcm1hdGlvbiBpcyBhIGRvbmF0aW9uLAordG9vIDotKSBldGMuIHRvIGVtb2Vua2VAZ3dkZy5kZS4KKworU25haWxNYWlsIGFkZHJlc3MsIHByZWZlcmFibGUgZm9yIENEIGVkaXRvcnMgaWYgdGhleSB3YW50IHRvIHN1Ym1pdCBhIGZyZWUKKyJjb29wZXJhdGlvbiIgY29weToKKyAgICAgICAgICAgICAgICAgICAgICAgICBFYmVyaGFyZCBNb2Vua2ViZXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgUmVpbmhvbGRzdHIuIDE0CisgICAgICAgICAgICAgICAgICAgICAgICAgRC0zNzA4MyBHb2V0dGluZ2VuCisgICAgICAgICAgICAgICAgICAgICAgICAgR2VybWFueQorLS0tCisKKworQXBwZW5kaXggLS0gdGhlICJjZHRlc3RlciIgdXRpbGl0eToKKworLyoKKyAqIGNkdGVzdGVyLmMgLS0gdGVzdCB0aGUgYXVkaW8gZnVuY3Rpb25zIG9mIGEgQ0QgZHJpdmVyCisgKgorICogKGMpIDE5OTUgRWJlcmhhcmQgTW9lbmtlYmVyZyA8ZW1vZW5rZUBnd2RnLmRlPgorICogICAgICAgICAgcHVibGlzaGVkIHVuZGVyIHRoZSBHUEwKKyAqCisgKiAgICAgICAgICBtYWRlIHVuZGVyIGhlYXZ5IHVzZSBvZiB0aGUgIlRpbnkgQXVkaW8gQ0QgUGxheWVyIgorICogICAgICAgICAgZnJvbSBXZXJuZXIgWmltbWVybWFubiA8emltbWVybWFAcnouZmh0LWVzc2xpbmdlbi5kZT4KKyAqICAgICAgICAgIChzZWUgbGludXgvZHJpdmVycy9ibG9jay9SRUFETUUuYXp0Y2QpCisgKi8KKyN1bmRlZiBBWlRfUFJJVkFURV9JT0NUTFMgLyogbm90IHN1cHBvcnRlZCBieSBldmVyeSBDRFJPTSBkcml2ZXIgKi8KKyNkZWZpbmUgU0JQX1BSSVZBVEVfSU9DVExTIC8qIG5vdCBzdXBwb3J0ZWQgYnkgZXZlcnkgQ0RST00gZHJpdmVyICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKworI2lmZGVmIEFaVF9QUklWQVRFX0lPQ1RMUworI2luY2x1ZGUgPGxpbnV4Ly4uLy4uL2RyaXZlcnMvY2Ryb20vYXp0Y2QuaD4KKyNlbmRpZiBBWlRfUFJJVkFURV9JT0NUTFMKKyNpZmRlZiBTQlBfUFJJVkFURV9JT0NUTFMKKyNpbmNsdWRlIDxsaW51eC8uLi8uLi9kcml2ZXJzL2Nkcm9tL3NicGNkLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNlbmRpZiBTQlBfUFJJVkFURV9JT0NUTFMKKworc3RydWN0IGNkcm9tX3RvY2hkciBoZHI7CitzdHJ1Y3QgY2Ryb21fdG9jaGRyIHRvY0hkcjsKK3N0cnVjdCBjZHJvbV90b2NlbnRyeSBUb2NFbnRyeVsxMDFdOworc3RydWN0IGNkcm9tX3RvY2VudHJ5IGVudHJ5Oworc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbiBtc19pbmZvOworc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8gcmVhZF9hdWRpbzsKK3N0cnVjdCBjZHJvbV90aSB0aTsKK3N0cnVjdCBjZHJvbV9zdWJjaG5sIHN1YmNobmw7CitzdHJ1Y3QgY2Ryb21fbXNmIG1zZjsKK3N0cnVjdCBjZHJvbV92b2xjdHJsIHZvbGN0cmw7CisjaWZkZWYgQVpUX1BSSVZBVEVfSU9DVExTCit1bmlvbgoreworCXN0cnVjdCBjZHJvbV9tc2YgbXNmOworCXVuc2lnbmVkIGNoYXIgYnVmW0NEX0ZSQU1FU0laRV9SQVddOworfSBhenQ7CisjZW5kaWYgQVpUX1BSSVZBVEVfSU9DVExTCitpbnQgaSwgaTEsIGkyLCBpMywgaiwgazsKK3Vuc2lnbmVkIGNoYXIgc2VxdWVuY2U9MDsKK3Vuc2lnbmVkIGNoYXIgY29tbWFuZFs4MF07Cit1bnNpZ25lZCBjaGFyIGZpcnN0PTEsIGxhc3Q9MTsKK2NoYXIgKmRlZmF1bHRfZGV2aWNlPSIvZGV2L2Nkcm9tIjsKK2NoYXIgZGV2WzIwXTsKK2NoYXIgZmlsZW5hbWVbMjBdOworaW50IGRyaXZlOworaW50IGRhdGFmaWxlOworaW50IHJjOworCit2b2lkIGhlbHAodm9pZCkKK3sKKwlwcmludGYoIkF2YWlsYWJsZSBDb21tYW5kczpcbiIpOworCXByaW50ZigiU1RPUCAgICAgICAgICBzICAgICAgRUpFQ1QgICAgICAgIGUgICAgICAgUVVJVCAgICAgICAgIHFcbiIpOworCXByaW50ZigiUExBWSBUUkFDSyAgICB0ICAgICAgUEFVU0UgICAgICAgIHAgICAgICAgUkVTVU1FICAgICAgIHJcbiIpOworCXByaW50ZigiTkVYVCBUUkFDSyAgICBuICAgICAgUkVQRUFUIExBU1QgIGwgICAgICAgSEVMUCAgICAgICAgIGhcbiIpOworCXByaW50ZigiU1VCQ0hBTk5FTF9RICBjICAgICAgVFJBQ0sgSU5GTyAgIGkgICAgICAgUExBWSBBVCAgICAgIGFcbiIpOworCXByaW50ZigiUkVBRCAgICAgICAgICBkICAgICAgUkVBRCBSQVcgICAgIHcgICAgICAgUkVBRCBBVURJTyAgIEFcbiIpOworCXByaW50ZigiTVMtSU5GTyAgICAgICBNICAgICAgVE9DICAgICAgICAgIFQgICAgICAgU1RBUlQgICAgICAgIFNcbiIpOworCXByaW50ZigiU0VUIEVKRUNUU1cgICBYICAgICAgREVWSUNFICAgICAgIEQgICAgICAgREVCVUcgICAgICAgIFlcbiIpOworCXByaW50ZigiQVVESU9fQlVGU0laICBaICAgICAgUkVTRVQgICAgICAgIFIgICAgICAgU0VUIFZPTFVNRSAgIHZcbiIpOworCXByaW50ZigiR0VUIFZPTFVNRSAgICBWXG4iKTsKK30KKworLyoKKyAqICBjb252ZXJ0IE1TRiBudW1iZXIgKDMgYnl0ZXMgb25seSkgdG8gTG9naWNhbF9CbG9ja19BZGRyZXNzIAorICovCitpbnQgbXNmMmxiYSh1X2NoYXIgKm1zZikKK3sKKwlpbnQgaTsKKwkKKwlpPShtc2ZbMF0gKiBDRF9TRUNTICsgbXNmWzFdKSAqIENEX0ZSQU1FUyArIG1zZlsyXSAtIENEX0JMT0NLX09GRlNFVDsKKwlpZiAoaTwwKSByZXR1cm4gKDApOworCXJldHVybiAoaSk7Cit9CisvKgorICogIGNvbnZlcnQgbG9naWNhbF9ibG9ja19hZGRyZXNzIHRvIG0tcy1mX251bWJlciAoMyBieXRlcyBvbmx5KQorICovCit2b2lkIGxiYTJtc2YoaW50IGxiYSwgdW5zaWduZWQgY2hhciAqbXNmKQoreworCWxiYSArPSBDRF9CTE9DS19PRkZTRVQ7CisJbXNmWzBdID0gbGJhIC8gKENEX1NFQ1MqQ0RfRlJBTUVTKTsKKwlsYmEgJT0gQ0RfU0VDUypDRF9GUkFNRVM7CisJbXNmWzFdID0gbGJhIC8gQ0RfRlJBTUVTOworCW1zZlsyXSA9IGxiYSAlIENEX0ZSQU1FUzsKK30KKworaW50IGluaXRfZHJpdmUoY2hhciAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgbXNmX2VudFszXTsKKworCS8qCisJICogb3BlbiB0aGUgZGV2aWNlCisJICovCisJZHJpdmU9b3BlbihkZXYsMCk7CisJaWYgKGRyaXZlPDApIHJldHVybiAoLTEpOworCS8qCisJICogZ2V0IFRvY0hlYWRlcgorCSAqLworCXByaW50ZigiZ2V0dGluZyBUb2NIZWFkZXIuLi5cbiIpOworCXJjPWlvY3RsKGRyaXZlLENEUk9NUkVBRFRPQ0hEUiwmaGRyKTsKKwlpZiAocmMhPTApCisJeworCQlwcmludGYoImNhbid0IGdldCBUb2NIZWFkZXIgKGVycm9yICVkKS5cbiIscmMpOworCQlyZXR1cm4gKC0yKTsKKwl9CisJZWxzZQorCQlmaXJzdD1oZHIuY2R0aF90cmswOworCQlsYXN0PWhkci5jZHRoX3RyazE7CisJCXByaW50ZigiVG9jSGVhZGVyOiAlZCAlZFxuIixoZHIuY2R0aF90cmswLGhkci5jZHRoX3RyazEpOworCS8qCisJICogZ2V0IGFuZCBkaXNwbGF5IGFsbCBUb2NFbnRyaWVzCisJICovCisJcHJpbnRmKCJnZXR0aW5nIFRvY0VudHJpZXMuLi5cbiIpOworCWZvciAoaT0xO2k8PWhkci5jZHRoX3RyazErMTtpKyspCisJeworCQlpZiAoaSE9aGRyLmNkdGhfdHJrMSsxKSBUb2NFbnRyeVtpXS5jZHRlX3RyYWNrID0gaTsKKwkJZWxzZSBUb2NFbnRyeVtpXS5jZHRlX3RyYWNrID0gQ0RST01fTEVBRE9VVDsKKwkJVG9jRW50cnlbaV0uY2R0ZV9mb3JtYXQgPSBDRFJPTV9MQkE7CisJCXJjPWlvY3RsKGRyaXZlLENEUk9NUkVBRFRPQ0VOVFJZLCZUb2NFbnRyeVtpXSk7CisJCWlmIChyYyE9MCkKKwkJeworCQkJcHJpbnRmKCJjYW4ndCBnZXQgVG9jRW50cnkgIyVkIChlcnJvciAlZCkuXG4iLGkscmMpOworCQl9CisJCWVsc2UKKwkJeworCQkJbGJhMm1zZihUb2NFbnRyeVtpXS5jZHRlX2FkZHIubGJhLCZtc2ZfZW50WzBdKTsKKwkJCWlmIChUb2NFbnRyeVtpXS5jZHRlX3RyYWNrPT1DRFJPTV9MRUFET1VUKQorCQkJeworCQkJCXByaW50ZigiVG9jRW50cnkgIyUwMlg6ICUxWCAlMVggJTAyZDolMDJkOiUwMmQgKGxiYTogMHglMDZYKSAlMDJYXG4iLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX3RyYWNrLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkciwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9jdHJsLAorCQkJCSAgICAgICBtc2ZfZW50WzBdLAorCQkJCSAgICAgICBtc2ZfZW50WzFdLAorCQkJCSAgICAgICBtc2ZfZW50WzJdLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkZHIubGJhLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2RhdGFtb2RlKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludGYoIlRvY0VudHJ5ICMlMDJkOiAlMVggJTFYICUwMmQ6JTAyZDolMDJkIChsYmE6IDB4JTA2WCkgJTAyWFxuIiwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV90cmFjaywKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9hZHIsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfY3RybCwKKwkJCQkgICAgICAgbXNmX2VudFswXSwKKwkJCQkgICAgICAgbXNmX2VudFsxXSwKKwkJCQkgICAgICAgbXNmX2VudFsyXSwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9hZGRyLmxiYSwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9kYXRhbW9kZSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChoZHIuY2R0aF90cmsxKTsgLyogbnVtYmVyIG9mIHRyYWNrcyAqLworfQorCit2b2lkIGRpc3BsYXkoaW50IHNpemUsdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCWs9MDsKKwlnZXRjaGFyKCk7CisJZm9yIChpPTA7aTwoc2l6ZSsxKS8xNjtpKyspCisJeworCQlwcmludGYoIiU0ZDoiLGkqMTYpOworCQlmb3IgKGo9MDtqPDE2O2orKykKKwkJeworCQkJcHJpbnRmKCIgJTAyWCIsYnVmZmVyW2kqMTYral0pOworCQl9CisJCXByaW50ZigiICAiKTsKKwkJZm9yIChqPTA7ajwxNjtqKyspCisJCXsKKwkJCWlmIChpc2FsbnVtKGJ1ZmZlcltpKjE2K2pdKSkgCisJCQkJcHJpbnRmKCIlYyIsYnVmZmVyW2kqMTYral0pOworCQkJZWxzZQorCQkJCXByaW50ZigiLiIpOworCQl9CisJCXByaW50ZigiXG4iKTsgCisJCWsrKzsKKwkJaWYgKGs+PTIwKQorCQl7CisJCQlwcmludGYoInByZXNzIEVOVEVSIHRvIGNvbnRpbnVlXG4iKTsKKwkJCWdldGNoYXIoKTsKKwkJCWs9MDsKKwkJfQorCX0gCit9IAorCittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcHJpbnRmKCJcblRlc3RpbmcgdG9vbCBmb3IgYSBDRFJPTSBkcml2ZXIncyBhdWRpbyBmdW5jdGlvbnMgVjAuMVxuIik7CisJcHJpbnRmKCIoQykgMTk5NSBFYmVyaGFyZCBNb2Vua2ViZXJnIDxlbW9lbmtlQGd3ZGcuZGU+XG4iKTsKKwlwcmludGYoImluaXRpYWxpemluZy4uLlxuIik7CisJCisJcmM9aW5pdF9kcml2ZShkZWZhdWx0X2RldmljZSk7CisJaWYgKHJjPDApIHByaW50ZigiY291bGQgbm90IG9wZW4gJXMgKHJjPSVkKS5cbiIsZGVmYXVsdF9kZXZpY2UscmMpOworCWhlbHAoKTsKKwl3aGlsZSAoMSkKKwl7CisJCXByaW50ZigiR2l2ZSBhIG9uZS1sZXR0ZXIgY29tbWFuZCAoaCA9IGhlbHApOiAiKTsKKwkJc2NhbmYoIiVzIixjb21tYW5kKTsKKwkJY29tbWFuZFsxXT0wOworCQlzd2l0Y2ggKGNvbW1hbmRbMF0pCisJCXsKKwkJY2FzZSAnRCc6CisJCQlwcmludGYoImRldmljZSBuYW1lIChmLmUuIC9kZXYvc2JwY2QzKTogPyAiKTsKKwkJCXNjYW5mKCIlcyIsJmRldik7CisJCQljbG9zZShkcml2ZSk7CisJCQlyYz1pbml0X2RyaXZlKGRldik7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJjb3VsZCBub3Qgb3BlbiAlcyAocmMgJWQpLlxuIixkZXYscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01FSkVDVCk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTUVKRUNUOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01QQVVTRSk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVBBVVNFOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRVNVTUUpOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01SRVNVTUU6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNUT1ApOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01TVE9QOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ1MnOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01TVEFSVCk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVNUQVJUOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFEVE9DSERSLCZ0b2NIZHIpOworCQkJaWYgKHJjPDApCisJCQl7CisJCQkJcHJpbnRmKCJDRFJPTVJFQURUT0NIRFI6IHJjPSVkLlxuIixyYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmaXJzdD10b2NIZHIuY2R0aF90cmswOworCQkJbGFzdD0gdG9jSGRyLmNkdGhfdHJrMTsKKwkJCWlmICgoZmlyc3Q9PTApfHwoZmlyc3Q+bGFzdCkpCisJCQl7CisJCQkJcHJpbnRmICgiLS1nb3QgaW52YWxpZCBUT0MgZGF0YS5cbiIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaW50ZigiLS1lbnRlciB0cmFjayBudW1iZXIoZmlyc3Q9JWQsIGxhc3Q9JWQpOiAiLGZpcnN0LGxhc3QpOworCQkJCXNjYW5mKCIlZCIsJmkxKTsKKwkJCQl0aS5jZHRpX3RyazA9aTE7CisJCQkJaWYgKHRpLmNkdGlfdHJrMDxmaXJzdCkgdGkuY2R0aV90cmswPWZpcnN0OworCQkJCWlmICh0aS5jZHRpX3RyazA+bGFzdCkgdGkuY2R0aV90cmswPWxhc3Q7CisJCQkJdGkuY2R0aV9pbmQwPTA7CisJCQkJdGkuY2R0aV90cmsxPWxhc3Q7CisJCQkJdGkuY2R0aV9pbmQxPTA7CisJCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01TVE9QKTsKKwkJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVBMQVlUUktJTkQsJnRpKTsKKwkJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVBMQVlUUktJTkQ6IHJjPSVkLlxuIixyYyk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNUT1ApOworCQkJaWYgKCsrdGkuY2R0aV90cmswPmxhc3QpIHRpLmNkdGlfdHJrMD1sYXN0OworCQkJdGkuY2R0aV9pbmQwPTA7CisJCQl0aS5jZHRpX3RyazE9bGFzdDsKKwkJCXRpLmNkdGlfaW5kMT0wOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01QTEFZVFJLSU5ELCZ0aSk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVBMQVlUUktJTkQ6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsKKwkJY2FzZSAnbCc6CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVNUT1ApOworCQkJaWYgKC0tdGkuY2R0aV90cmswPGZpcnN0KSB0aS5jZHRpX3RyazA9Zmlyc3Q7CisJCQl0aS5jZHRpX2luZDA9MDsKKwkJCXRpLmNkdGlfdHJrMT1sYXN0OworCQkJdGkuY2R0aV9pbmQxPTA7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTVBMQVlUUktJTkQsJnRpKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUExBWVRSS0lORDogcmM9JWQuXG4iLHJjKTsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXN1YmNobmwuY2RzY19mb3JtYXQ9Q0RST01fTVNGOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01TVUJDSE5MLCZzdWJjaG5sKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NU1VCQ0hOTDogcmM9JWQuXG4iLHJjKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludGYoIkF1ZGlvU3RhdHVzOiVzICBUcmFjazolZCAgTW9kZTolZCAgTVNGPSUwMmQ6JTAyZDolMDJkXG4iLAorCQkJCSAgICAgICBzdWJjaG5sLmNkc2NfYXVkaW9zdGF0dXM9PUNEUk9NX0FVRElPX1BMQVkgPyAiUExBWUlORyI6Ik5PVCBQTEFZSU5HIiwKKwkJCQkgICAgICAgc3ViY2hubC5jZHNjX3RyayxzdWJjaG5sLmNkc2NfYWRyLCAKKwkJCQkgICAgICAgc3ViY2hubC5jZHNjX2Fic2FkZHIubXNmLm1pbnV0ZSwKKwkJCQkgICAgICAgc3ViY2hubC5jZHNjX2Fic2FkZHIubXNmLnNlY29uZCwKKwkJCQkgICAgICAgc3ViY2hubC5jZHNjX2Fic2FkZHIubXNmLmZyYW1lKTsKKwkJCX0KKwkJCWJyZWFrOyAgICAgICAgICAgICAgCisJCWNhc2UgJ2knOgorCQkJcHJpbnRmKCJUcmFjayBOby46ICIpOworCQkJc2NhbmYoIiVkIiwmaTEpOworCQkJZW50cnkuY2R0ZV90cmFjaz1pMTsKKwkJCWlmIChlbnRyeS5jZHRlX3RyYWNrPGZpcnN0KSBlbnRyeS5jZHRlX3RyYWNrPWZpcnN0OworCQkJaWYgKGVudHJ5LmNkdGVfdHJhY2s+bGFzdCkgIGVudHJ5LmNkdGVfdHJhY2s9bGFzdDsKKwkJCWVudHJ5LmNkdGVfZm9ybWF0PUNEUk9NX01TRjsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NUkVBRFRPQ0VOVFJZLCZlbnRyeSk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVJFQURUT0NFTlRSWTogcmM9JWQuXG4iLHJjKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludGYoIk1vZGUgJWQgVHJhY2ssIHN0YXJ0cyBhdCAlMDJkOiUwMmQ6JTAyZFxuIiwKKwkJCQkgICAgICAgZW50cnkuY2R0ZV9hZHIsCisJCQkJICAgICAgIGVudHJ5LmNkdGVfYWRkci5tc2YubWludXRlLAorCQkJCSAgICAgICBlbnRyeS5jZHRlX2FkZHIubXNmLnNlY29uZCwKKwkJCQkgICAgICAgZW50cnkuY2R0ZV9hZGRyLm1zZi5mcmFtZSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnYSc6CisJCQlwcmludGYoIkFkZHJlc3MgKG1pbjpzZWM6ZnJtKSAgIik7CisJCQlzY2FuZigiJWQ6JWQ6JWQiLCZpMSwmaTIsJmkzKTsKKwkJCW1zZi5jZG1zZl9taW4wPWkxOworCQkJbXNmLmNkbXNmX3NlYzA9aTI7CisJCQltc2YuY2Rtc2ZfZnJhbWUwPWkzOworCQkJaWYgKG1zZi5jZG1zZl9zZWMwPjU5KSBtc2YuY2Rtc2Zfc2VjMD01OTsKKwkJCWlmIChtc2YuY2Rtc2ZfZnJhbWUwPjc0KSBtc2YuY2Rtc2ZfZnJhbWUwPTc0OworCQkJbGJhMm1zZihUb2NFbnRyeVtsYXN0KzFdLmNkdGVfYWRkci5sYmEtMSwmbXNmLmNkbXNmX21pbjEpOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01TVE9QKTsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NUExBWU1TRiwmbXNmKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUExBWU1TRjogcmM9JWQuXG4iLHJjKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NVk9MUkVBRCwmdm9sY3RybCk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVZPTENUUkw6IHJjPSVkLlxuIixyYyk7CisJCQlwcmludGYoIlZvbHVtZTogY2hhbm5lbCAwIChsZWZ0KSAlZCwgY2hhbm5lbCAxIChyaWdodCkgJWRcbiIsdm9sY3RybC5jaGFubmVsMCx2b2xjdHJsLmNoYW5uZWwxKTsKKwkJCWJyZWFrOyAgCisJCWNhc2UgJ1InOgorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRVNFVCk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVJFU0VUOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisjaWZkZWYgQVpUX1BSSVZBVEVfSU9DVExTIC8qbm90IHN1cHBvcnRlZCBieSBldmVyeSBDRFJPTSBkcml2ZXIqLworCQljYXNlICdkJzoKKwkJCXByaW50ZigiQWRkcmVzcyAobWluOnNlYzpmcm0pICAiKTsKKwkJCXNjYW5mKCIlZDolZDolZCIsJmkxLCZpMiwmaTMpOworCQkJYXp0Lm1zZi5jZG1zZl9taW4wPWkxOworCQkJYXp0Lm1zZi5jZG1zZl9zZWMwPWkyOworCQkJYXp0Lm1zZi5jZG1zZl9mcmFtZTA9aTM7CisJCQlpZiAoYXp0Lm1zZi5jZG1zZl9zZWMwPjU5KSBhenQubXNmLmNkbXNmX3NlYzA9NTk7CisJCQlpZiAoYXp0Lm1zZi5jZG1zZl9mcmFtZTA+NzQpIGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPTc0OworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFETU9ERTEsJmF6dC5tc2YpOworCQkJaWYgKHJjPDApIHByaW50ZigiQ0RST01SRUFETU9ERTE6IHJjPSVkLlxuIixyYyk7CisJCQllbHNlIGRpc3BsYXkoQ0RfRlJBTUVTSVpFLGF6dC5idWYpOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJcHJpbnRmKCJBZGRyZXNzIChtaW46c2VjOmZyYW1lKSAgIik7CisJCQlzY2FuZigiJWQ6JWQ6JWQiLCZpMSwmaTIsJmkzKTsKKwkJCWF6dC5tc2YuY2Rtc2ZfbWluMD1pMTsKKwkJCWF6dC5tc2YuY2Rtc2Zfc2VjMD1pMjsKKwkJCWF6dC5tc2YuY2Rtc2ZfZnJhbWUwPWkzOworCQkJaWYgKGF6dC5tc2YuY2Rtc2Zfc2VjMD41OSkgYXp0Lm1zZi5jZG1zZl9zZWMwPTU5OworCQkJaWYgKGF6dC5tc2YuY2Rtc2ZfZnJhbWUwPjc0KSBhenQubXNmLmNkbXNmX2ZyYW1lMD03NDsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NUkVBRE1PREUyLCZhenQubXNmKTsKKwkJCWlmIChyYzwwKSBwcmludGYoIkNEUk9NUkVBRE1PREUyOiByYz0lZC5cbiIscmMpOworCQkJZWxzZSBkaXNwbGF5KENEX0ZSQU1FU0laRV9SQVcsYXp0LmJ1Zik7IC8qIGN1cnJlbnRseSBvbmx5IDIzMzYgKi8KKwkJCWJyZWFrOyAgCisjZW5kaWYKKwkJY2FzZSAndic6CisJCQlwcmludGYoIi0tQ2hhbm5lbCAwIChMZWZ0KSAgKDAtMjU1KTogIik7CisJCQlzY2FuZigiJWQiLCZpMSk7CisJCQl2b2xjdHJsLmNoYW5uZWwwPWkxOworCQkJcHJpbnRmKCItLUNoYW5uZWwgMSAoUmlnaHQpICgwLTI1NSk6ICIpOworCQkJc2NhbmYoIiVkIiwmaTEpOworCQkJdm9sY3RybC5jaGFubmVsMT1pMTsKKwkJCXZvbGN0cmwuY2hhbm5lbDI9MDsKKwkJCXZvbGN0cmwuY2hhbm5lbDM9MDsKKwkJCXJjPWlvY3RsKGRyaXZlLENEUk9NVk9MQ1RSTCwmdm9sY3RybCk7CisJCQlpZiAocmM8MCkgcHJpbnRmKCJDRFJPTVZPTENUUkw6IHJjPSVkLlxuIixyYyk7CisJCQlicmVhazsgIAorCQljYXNlICdxJzoKKwkJCWNsb3NlKGRyaXZlKTsKKwkJCWV4aXQoMCk7CisJCWNhc2UgJ2gnOgorCQkJaGVscCgpOworCQkJYnJlYWs7CisJCWNhc2UgJ1QnOiAvKiBkaXNwbGF5IFRPQyBlbnRyeSAtIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBkcml2ZXIgKi8KKwkJCXNjYW5mKCIlZCIsJmkpOworCQkJaWYgKChpPGhkci5jZHRoX3RyazApfHwoaT5oZHIuY2R0aF90cmsxKSkKKwkJCQlwcmludGYoImludmFsaWQgdHJhY2sgbnVtYmVyLlxuIik7CisJCQllbHNlCisJCQkJcHJpbnRmKCJUb2NFbnRyeSAlMDJkOiBhZHI9JTAxWCBjdHJsPSUwMVggbXNmPSUwMmQ6JTAyZDolMDJkIG1vZGU9JTAyWFxuIiwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV90cmFjaywKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9hZHIsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfY3RybCwKKwkJCQkgICAgICAgVG9jRW50cnlbaV0uY2R0ZV9hZGRyLm1zZi5taW51dGUsCisJCQkJICAgICAgIFRvY0VudHJ5W2ldLmNkdGVfYWRkci5tc2Yuc2Vjb25kLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2FkZHIubXNmLmZyYW1lLAorCQkJCSAgICAgICBUb2NFbnRyeVtpXS5jZHRlX2RhdGFtb2RlKTsKKwkJCWJyZWFrOworCQljYXNlICdBJzogLyogcmVhZCBhdWRpbyBkYXRhIGludG8gZmlsZSAqLworCQkJcHJpbnRmKCJBZGRyZXNzIChtaW46c2VjOmZybSkgPyAiKTsKKwkJCXNjYW5mKCIlZDolZDolZCIsJmkxLCZpMiwmaTMpOworCQkJcmVhZF9hdWRpby5hZGRyLm1zZi5taW51dGU9aTE7CisJCQlyZWFkX2F1ZGlvLmFkZHIubXNmLnNlY29uZD1pMjsKKwkJCXJlYWRfYXVkaW8uYWRkci5tc2YuZnJhbWU9aTM7CisJCQlyZWFkX2F1ZGlvLmFkZHJfZm9ybWF0PUNEUk9NX01TRjsKKwkJCXByaW50ZigiIyBvZiBmcmFtZXMgPyAiKTsKKwkJCXNjYW5mKCIlZCIsJmkxKTsKKwkJCXJlYWRfYXVkaW8ubmZyYW1lcz1pMTsKKwkJCWs9cmVhZF9hdWRpby5uZnJhbWVzKkNEX0ZSQU1FU0laRV9SQVc7CisJCQlyZWFkX2F1ZGlvLmJ1Zj1tYWxsb2Moayk7CisJCQlpZiAocmVhZF9hdWRpby5idWY9PU5VTEwpCisJCQl7CisJCQkJcHJpbnRmKCJjYW4ndCBtYWxsb2MgJWQgYnl0ZXMuXG4iLGspOworCQkJCWJyZWFrOworCQkJfQorCQkJc3ByaW50ZihmaWxlbmFtZSwiYXVkaW9fJTAyZCUwMmQlMDJkXyUwMmQuJTAyZFwwIiwKKwkJCQlyZWFkX2F1ZGlvLmFkZHIubXNmLm1pbnV0ZSwKKwkJCQlyZWFkX2F1ZGlvLmFkZHIubXNmLnNlY29uZCwKKwkJCQlyZWFkX2F1ZGlvLmFkZHIubXNmLmZyYW1lLAorCQkJCXJlYWRfYXVkaW8ubmZyYW1lcywKKwkJCQkrK3NlcXVlbmNlKTsKKwkJCWRhdGFmaWxlPWNyZWF0KGZpbGVuYW1lLCAwNzU1KTsKKwkJCWlmIChkYXRhZmlsZTwwKQorCQkJeworCQkJCXByaW50ZigiY2FuJ3Qgb3BlbiBkYXRhZmlsZSAlcy5cbiIsZmlsZW5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01SRUFEQVVESU8sJnJlYWRfYXVkaW8pOworCQkJaWYgKHJjIT0wKQorCQkJeworCQkJCXByaW50ZigiQ0RST01SRUFEQVVESU86IHJjPSVkLlxuIixyYyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcmM9d3JpdGUoZGF0YWZpbGUsJnJlYWRfYXVkaW8uYnVmLGspOworCQkJCWlmIChyYyE9aykgcHJpbnRmKCJkYXRhZmlsZSBJL08gZXJyb3IgKCVkKS5cbiIscmMpOworCQkJfQorCQkJY2xvc2UoZGF0YWZpbGUpOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOiAvKiBzZXQgRUpFQ1RfU1cgKDA6IGRpc2FibGUsIDE6IGVuYWJsZSBhdXRvLWVqZWN0aW5nKSAqLworCQkJc2NhbmYoIiVkIiwmaSk7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTUVKRUNUX1NXLGkpOworCQkJaWYgKHJjIT0wKQorCQkJCXByaW50ZigiQ0RST01FSkVDVF9TVzogcmM9JWQuXG4iLHJjKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIkVKRUNUX1NXIHNldCB0byAlZFxuIixpKTsKKwkJCWJyZWFrOworCQljYXNlICdNJzogLyogZ2V0IHRoZSBtdWx0aXNlc3Npb24gcmVkaXJlY3Rpb24gaW5mbyAqLworCQkJbXNfaW5mby5hZGRyX2Zvcm1hdD1DRFJPTV9MQkE7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTU1VTFRJU0VTU0lPTiwmbXNfaW5mbyk7CisJCQlpZiAocmMhPTApCisJCQl7CisJCQkJcHJpbnRmKCJDRFJPTU1VTFRJU0VTU0lPTihsYmEpOiByYz0lZC5cbiIscmMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChtc19pbmZvLnhhX2ZsYWcpIHByaW50ZigiTXVsdGlTZXNzaW9uIG9mZnNldCAobGJhKTogJWQgKDB4JTA2WClcbiIsbXNfaW5mby5hZGRyLmxiYSxtc19pbmZvLmFkZHIubGJhKTsKKwkJCQllbHNlCisJCQkJeworCQkJCQlwcmludGYoInRoaXMgQ0QgaXMgbm90IGFuIFhBIGRpc2suXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJbXNfaW5mby5hZGRyX2Zvcm1hdD1DRFJPTV9NU0Y7CisJCQlyYz1pb2N0bChkcml2ZSxDRFJPTU1VTFRJU0VTU0lPTiwmbXNfaW5mbyk7CisJCQlpZiAocmMhPTApCisJCQl7CisJCQkJcHJpbnRmKCJDRFJPTU1VTFRJU0VTU0lPTihtc2YpOiByYz0lZC5cbiIscmMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChtc19pbmZvLnhhX2ZsYWcpCisJCQkJCXByaW50ZigiTXVsdGlTZXNzaW9uIG9mZnNldCAobXNmKTogJTAyZDolMDJkOiUwMmQgKDB4JTAyWCUwMlglMDJYKVxuIiwKKwkJCQkJICAgICAgIG1zX2luZm8uYWRkci5tc2YubWludXRlLAorCQkJCQkgICAgICAgbXNfaW5mby5hZGRyLm1zZi5zZWNvbmQsCisJCQkJCSAgICAgICBtc19pbmZvLmFkZHIubXNmLmZyYW1lLAorCQkJCQkgICAgICAgbXNfaW5mby5hZGRyLm1zZi5taW51dGUsCisJCQkJCSAgICAgICBtc19pbmZvLmFkZHIubXNmLnNlY29uZCwKKwkJCQkJICAgICAgIG1zX2luZm8uYWRkci5tc2YuZnJhbWUpOworCQkJCWVsc2UgcHJpbnRmKCJ0aGlzIENEIGlzIG5vdCBhbiBYQSBkaXNrLlxuIik7CisJCQl9CisJCQlicmVhazsKKyNpZmRlZiBTQlBfUFJJVkFURV9JT0NUTFMKKwkJY2FzZSAnWSc6IC8qIHNldCB0aGUgZHJpdmVyJ3MgbWVzc2FnZSBsZXZlbCAqLworI2lmIDAgLyogbm90IGltcGxlbWVudGVkIHlldCAqLworCQkJcHJpbnRmKCJlbnRlciBzd2l0Y2ggbmFtZSAoZi5lLiBEQkdfQ01EKTogIik7CisJCQlzY2FuZigiJXMiLCZkYmdfc3dpdGNoKTsKKwkJCWo9Z2V0X2RiZ19udW0oZGJnX3N3aXRjaCk7CisjZWxzZQorCQkJcHJpbnRmKCJlbnRlciBERElPQ1NEQkcgc3dpdGNoIG51bWJlcjogIik7CisJCQlzY2FuZigiJWQiLCZqKTsKKyNlbmRpZgorCQkJcHJpbnRmKCJlbnRlciAwIGZvciBcIm9mZlwiLCAxIGZvciBcIm9uXCI6ICIpOworCQkJc2NhbmYoIiVkIiwmaSk7CisJCQlpZiAoaT09MCkganw9MHg4MDsKKwkJCXByaW50ZigiY2FsbGluZyBcImlvY3RsKGRyaXZlLERESU9DU0RCRywlZClcIlxuIixqKTsKKwkJCXJjPWlvY3RsKGRyaXZlLERESU9DU0RCRyxqKTsKKwkJCXByaW50ZigiRERJT0NTREJHOiByYz0lZC5cbiIscmMpOworCQkJYnJlYWs7CisJCWNhc2UgJ1onOiAvKiBzZXQgdGhlIGF1ZGlvIGJ1ZmZlciBzaXplICovCisJCQlwcmludGYoIiMgZnJhbWVzIHdhbnRlZDogPyAiKTsKKwkJCXNjYW5mKCIlZCIsJmopOworCQkJcmM9aW9jdGwoZHJpdmUsQ0RST01BVURJT0JVRlNJWixqKTsKKwkJCXByaW50ZigiJWQgZnJhbWVzIGdyYW50ZWQuXG4iLHJjKTsKKwkJCWJyZWFrOworI2VuZGlmIFNCUF9QUklWQVRFX0lPQ1RMUworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJ1bmtub3duIGNvbW1hbmQ6IFwiJXNcIi5cbiIsY29tbWFuZCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL3NqY2QgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL3NqY2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMTQ4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vc2pjZApAQCAtMCwwICsxLDYwIEBACisgLS0gRG9jdW1lbnRhdGlvbi9jZHJvbS9zamNkCisJCQkJODAlIG9mIHRoZSB3b3JrIHRha2VzIDIwJSBvZiB0aGUgdGltZSwKKwkJCQkyMCUgb2YgdGhlIHdvcmsgdGFrZXMgODAlIG9mIHRoZSB0aW1lLi4uCisJCQkJCQkoTXVycGh5J3MgbGF3KQorCisJCQkJT25jZSBzdGFydGVkLCB0cmFpbmluZyBjYW4gbm90IGJlIHN0b3BwZWQuLi4KKwkJCQkJCShTdGFyIFdhcnMpCisKK1RoaXMgaXMgdGhlIFJFQURNRSBmb3IgdGhlIHNqY2QgY2Ryb20gZHJpdmVyLCB2ZXJzaW9uIDEuNi4KKworVGhpcyBmaWxlIGlzIG1lYW50IGFzIGEgdGlwcyAmIHRyaWNrcyBlZGdlIGZvciB0aGUgdXNhZ2Ugb2YgdGhlIFNBTllPIENEUi1IOTRBCitjZHJvbSBkcml2ZS4gSXQgd2lsbCBncm93IGFzIHRoZSBxdWVzdGlvbnMgYXJpc2UuIDstKQorRm9yIGluZm8gb24gY29uZmlndXJpbmcgdGhlIElTUDE2IHNvdW5kIGNhcmQgbG9vayBhdCBEb2N1bWVudGF0aW9uL2Nkcm9tL2lzcDE2LgorCitUaGUgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYW55IG9mIHRoZSBQYW5hc29uaWMsIFNvbnkgb3IgTWl0c3VtaSBzdHlsZQorQ0RST00gaW50ZXJmYWNlcy4KK1RoZSBjZHJvbSBpbnRlcmZhY2Ugb24gTWVkaWEgTWFnaWMncyBzb2Z0IGNvbmZpZ3VyYWJsZSBzb3VuZCBjYXJkIElTUDE2LAord2hpY2ggdXNlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyLCBpcyBub3cgc3VwcG9ydGVkIGluIGEgc2VwYXJhdGUgbW9kdWxlLgorVGhpcyBpbml0aWFsaXNhdGlvbiBtb2R1bGUgd2lsbCBwcm9iYWJseSBhbHNvIHdvcmsgd2l0aCBvdGhlciBpbnRlcmZhY2VzCitiYXNlZCBvbiBhbiBPUFRpIDgyQzkyOCBvciA4MkM5MjkgY2hpcCAobGlrZSBNQUQxNiBhbmQgTW96YXJ0KTogc2VlIHRoZQorZG9jdW1lbnRhdGlvbiBEb2N1bWVudGF0aW9uL2Nkcm9tL2lzcDE2LgorCitUaGUgZGV2aWNlIG1ham9yIGZvciBzamNkIGlzIDE4LCBhbmQgbWlub3IgaXMgMC4gQ3JlYXRlIGEgYmxvY2sgc3BlY2lhbAorZmlsZSBpbiB5b3VyIC9kZXYgZGlyZWN0b3J5IChlLmcuLCAvZGV2L3NqY2QpIHdpdGggdGhlc2UgbnVtYmVycy4KKyhGb3IgdGhvc2Ugd2hvIGRvbid0IGtub3csIGJlaW5nIHJvb3QgYW5kIGRvaW5nIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGRvCit0aGUgdHJpY2s6CisgIG1rbm9kIC1tIDY0NCAvZGV2L3NqY2QgYiAxOCAwCithbmQgbW91bnQgdGhlIGNkcm9tIGJ5IC9kZXYvc2pjZCkuCisKK1RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmU6CisgIGJhc2UgYWRkcmVzcyAweDM0MAorICBubyBpcnEKKyAgbm8gZG1hCisoQWN0dWFsbHkgdGhlIENEUi1IOTRBIGRvZXNuJ3Qga25vdyBob3cgdG8gdXNlIGlycSBhbmQgZG1hLikKK0FzIG9mIHZlcnNpb24gMS4yLCBzZXR0aW5nIGJhc2UgYWRkcmVzcyBhdCBib290IHRpbWUgaXMgc3VwcG9ydGVkCit0aHJvdWdoIHRoZSB1c2Ugb2YgY29tbWFuZCBsaW5lIG9wdGlvbnM6IHR5cGUgYXQgdGhlICJib290OiIgcHJvbXB0OgorICBsaW51eCBzamNkPTxiYXNlX2FkZHJlc3M+Cisod2hlcmUgeW91IHdvdWxkIHVzZSB0aGUga2VybmVsIGxhYmVsZWQgImxpbnV4IiBpbiBsaWxvJ3MgY29uZmlndXJhdGlvbgorZmlsZSAvZXRjL2xpbG8uY29uZikuIFlvdSBjb3VsZCBhbHNvIHVzZSAnYXBwZW5kPSJzamNkPTxjb25maWd1cmF0aW9uX2luZm8+IicKK2luIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIC9ldGMvbGlsby5jb25mCitJZiB5b3UncmUgYnVpbGRpbmcgYSBrZXJuZWwgeW91cnNlbGYgeW91IGNhbiBzZXQgeW91ciBkZWZhdWx0IGJhc2UKK2kvbyBhZGRyZXNzIHdpdGggU0pDRF9CQVNFX0FERFIgaW4gL3Vzci9zcmMvbGludXgvZHJpdmVycy9jZHJvbS9zamNkLmguCisKK1RoZSBzamNkIGRyaXZlciBzdXBwb3J0cyBiZWluZyBsb2FkZWQgYXMgYSBtb2R1bGUuIFRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgd2lsbCBzZXQgdGhlIGJhc2UgaS9vIGFkZHJlc3Mgb24gdGhlIGZseSAoYXNzdW1pbmcgeW91CitoYXZlIGluc3RhbGxlZCB0aGUgbW9kdWxlIGluIGFuIGFwcHJvcHJpYXRlIHBsYWNlKS4KKyAgaW5zbW9kIHNqY2QubyBzamNkX2Jhc2U9PGJhc2VfYWRkcmVzcz4KKworCitIYXZlIGZ1biEKKworSWYgc29tZXRoaW5nIGlzIHdyb25nLCBwbGVhc2UgZW1haWwgdG8JCXZhZGltQHJicmYucnUKKwkJCQkJb3IgCXZhZGltQGlwc3VuLnJhcy5ydQorCQkJCQlvcgltb2RlbEBjZWNtb3cuZW5ldC5kZWMuY29tCisJCQkJCW9yCUguVC5NLnYuZC5NYWFyZWxAbWFyaW4ubmwKKworSXQgaGFwcGVucyBzb21ldGltZXMgdGhhdCBWYWRpbSBpcyBub3QgcmVhY2hhYmxlIGJ5IG1haWwuIEZvciB0aGVzZQoraW5zdGFuY2VzLCBFcmljIHZhbiBkZXIgTWFhcmVsIHdpbGwgaGVscCB0b28uCisKKwkJVmFkaW0gVi4gTW9kZWwsIEVyaWMgdmFuIGRlciBNYWFyZWwsIEViZXJoYXJkIE1vZW5rZWJlcmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vc29ueWNkNTM1IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9zb255Y2Q1MzUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1ODFhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vc29ueWNkNTM1CkBAIC0wLDAgKzEsMTIxIEBACisgICAgICAgICAgICAgIFJFQURNRSBGT1IgTElOVVggU09OWSBDRFUtNTM1LzUzMSBEUklWRVIKKyAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBTb255IENEVS01MzUgKGFuZCA1MzEpIGRyaXZlciB2ZXJzaW9uIDAuNyBmb3IgTGludXguCitJIGRvIG5vdCB0aGluayBJIGhhdmUgdGhlIGRvY3VtZW50YXRpb24gdG8gYWRkIGZlYXR1cmVzIGxpa2UgRE1BIHN1cHBvcnQKK3NvIGlmIGFueW9uZSBlbHNlIHdhbnRzIHRvIHB1cnN1ZSBpdCBvciBoZWxwIG1lIHdpdGggaXQsIHBsZWFzZSBkby4KKyhJIG5lZWQgdG8gc2VlIHdoYXQgd2FzIGRvbmUgZm9yIHRoZSBDRFUtMzFBIGRyaXZlciAtLSBwZXJoYXBzIEkgY2FuCitzdGVhbCBzb21lIG9mIHRoYXQgY29kZS4pCisKK1RoaXMgaXMgYSBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciB0aGUgU29ueSBDRFUtNTM1IENEUk9NIGRyaXZlLiAgVGhpcyBpcworb25lIG9mIHRoZSBvbGRlciBTb255IGRyaXZlcyB3aXRoIGl0cyBvd24gaW50ZXJmYWNlIGNhcmQgKFNvbnkgYnVzKS4KK1RoZSBET1MgZHJpdmVyIGZvciB0aGlzIGRyaXZlIGlzIG5hbWVkIFNPTllfQ0RVLlNZUyAtIHdoZW4geW91IGJvb3QgRE9TCit5b3VyIGRyaXZlIHNob3VsZCBiZSBpZGVudGlmaWVkIGFzIGEgU09OWSBDRFUtNTM1LiAgVGhlIGRyaXZlciB3b3Jrcword2l0aCBhIENEVS01MzEgYWxzby4gIE9uZSB1c2VyIHJlcG9ydGVkIHRoYXQgdGhlIGRyaXZlciB3b3JrZWQgb24gZHJpdmVzCitPRU0nZWQgYnkgUHJvY29tbSwgZHJpdmUgYW5kIGludGVyZmFjZSBib2FyZCB3ZXJlIGxhYmVsbGVkIFByb2NvbW0uCisKK1RoZSBMaW51eCBkcml2ZXIgaXMgYmFzZWQgb24gQ29yZXkgTWlueWFyZCdzIHNvbnljZCAwLjMgZHJpdmVyIGZvcgordGhlIENEVS0zMUEuICBSb24gSmVwcGVzZW4ganVzdCBjaGFuZ2VkIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgc2VudAordG8gdGhlIGRyaXZlIHRvIGNvcnJlc3BvbmQgdG8gdGhlIENEVS01MzUgY29tbWFuZHMgYW5kIHJlZ2lzdGVycy4KK1RoZXJlIHdlcmUgZW5vdWdoIGNoYW5nZXMgdG8gbGV0IGJ1Z3MgY3JlZXAgaW4gYnV0IGl0IHNlZW1zIHRvIGJlIHN0YWJsZS4KK1JvbiB3YXMgYWJsZSB0byB0YXIgYW4gZW50aXJlIENEUk9NIChzaG91bGQgcmVhZCBhbGwgYmxvY2tzKSBhbmQgYnVpbHQKK2dob3N0dmlldyBhbmQgeGZpZyBvZmYgV2FsbnV0IENyZWVrJ3MgWDExUjUvR05VIENEUk9NLiAgeGNkcGxheWVyIGFuZAord29ya21hbiB3b3JrIHdpdGggdGhlIGRyaXZlci4gIE90aGVycyBoYXZlIHVzZWQgdGhlIGRyaXZlciB3aXRob3V0Citwcm9ibGVtcyBleGNlcHQgdGhvc2UgZGVhbGluZyB3aXRoIHdhaXQgbG9vcHMgKGZpeGVkIGluIHRoaXJkIHJlbGVhc2UpLgorTGlrZSBNaW55YXJkJ3Mgb3JpZ2luYWwgZHJpdmVyIHRoaXMgb25lIHVzZXMgYSBwb2xsZWQgaW50ZXJmYWNlICh0aGlzCitpcyBhbHNvIHRoZSBkZWZhdWx0IHNldHVwIGZvciB0aGUgRE9TIGRyaXZlcikuICBJdCBoYXMgbm90IGJlZW4gdHJpZWQKK3dpdGggaW50ZXJydXB0cyBvciBETUEgZW5hYmxlZCBvbiB0aGUgYm9hcmQuCisKK1JFUVVJUkVNRU5UUworPT09PT09PT09PT09CisKKwktIFNvbnkgQ0RVLTUzNSBkcml2ZSwgcHJlZmVyYWJseSB3aXRob3V0IGludGVycnVwdHMgYW5kIERNQSAKKwkgIGVuYWJsZWQgb24gdGhlIGNhcmQuCisKKwktIERyaXZlIG11c3QgYmUgc2V0IHVwIGFzIHVuaXQgMS4gIE9ubHkgdGhlIGZpcnN0IHVuaXQgd2lsbCBiZSAKKwkgIHJlY29nbml6ZWQKKworCS0gWW91IG11c3QgZW50ZXIgeW91ciBpbnRlcmZhY2UgYWRkcmVzcyBpbnRvIAorICAgICAgICAgIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvY2Ryb20vc29ueWNkNTM1LmggYW5kIGJ1aWxkIHRoZQorICAgICAgICAgIGFwcHJvcHJpYXRlIGtlcm5lbCBvciB1c2UgdGhlICJrZXJuZWwgY29tbWFuZCBsaW5lIiBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICBzb255Y2Q1MzU9MHgzMjAKKyAgICAgICAgICB3aXRoIHRoZSBjb3JyZWN0IGludGVyZmFjZSBhZGRyZXNzLgorCitOT1RFUzoKKz09PT09PQorCisxKSBUaGUgZHJpdmUgTVVTVCBiZSB0dXJuZWQgb24gd2hlbiBib290aW5nIG9yIGl0IHdpbGwgbm90IGJlIHJlY29nbml6ZWQhCisgICAoYnV0IHNlZSBjb21tZW50cyBvbiBtb2R1bGFyaXplZCB2ZXJzaW9uIGJlbG93KQorCisyKSB3aGVuIHRoZSBjZHJvbSBkZXZpY2UgaXMgb3BlbmVkIHRoZSBlamVjdCBidXR0b24gaXMgZGlzYWJsZWQgdG8ga2VlcCB0aGUKKyAgIHVzZXIgZnJvbSBlamVjdGluZyBhIG1vdW50ZWQgZGlzayBhbmQgcmVwbGFjaW5nIGl0IHdpdGggYW5vdGhlci4KKyAgIFVuZm9ydHVuYXRlbHkgeGNkcGxheWVyIGFuZCB3b3JrbWFuIGFsc28gb3BlbiB0aGUgY2Ryb20gZGV2aWNlIHNvIHlvdQorICAgaGF2ZSB0byB1c2UgdGhlIGVqZWN0IGJ1dHRvbiBpbiB0aGUgc29mdHdhcmUuICBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3VyCisgICBjZHJvbSBwbGF5ZXIgcmVmdXNlcyB0byBnaXZlIHVwIGl0cyBkaXNrIC0tIGV4aXQgd29ya21hbiBvciB4Y2RwbGF5ZXIsIG9yCisgICB1bW91bnQgdGhlIGRyaXZlIGlmIGl0IGhhcyBiZWVuIG1vdW50ZWQuCisKK1RIQU5LUworPT09PT09CisKK01hbnkgdGhhbmtzIHRvIFJvbiBKZXBwZXNlbiAocm9uai5hbkBzaXRlMDA3LnNhaWMuY29tKSBmb3IgZ2V0dGluZwordGhpcyBwcm9qZWN0IG9mZiB0aGUgZ3JvdW5kLiAgSGUgd3JvdGUgdGhlIGluaXRpYWwgcmVsZWFzZQorYW5kIHRoZSBmaXJzdCB0d28gcGF0Y2hlcyB0byB0aGlzIGRyaXZlciAoMC4xLCAwLjIsIGFuZCAwLjMpLgorVGhhbmtzIGFsc28gdG8gRWJlcmhhcmQgTW9lbmtlYmVyZyAoZW1vZW5rZUBnd2RnLmRlKSBmb3IgcHJvZGRpbmcKK21lIHRvIHBsYWNlIHRoaXMgY29kZSBpbnRvIHRoZSBtYWluc3RyZWFtIExpbnV4IHNvdXJjZSB0cmVlCisoYXMgb2YgTGludXggdmVyc2lvbiAxLjEuOTEpLCBhcyB3ZWxsIGFzIHNvbWUgcGF0Y2hlcyB0byBtYWtlCitpdCBhIGJldHRlciBkZXZpY2UgY2l0aXplbi4gIEZ1cnRoZXIgdGhhbmtzIHRvIEpvZWwgS2F0egorPGpvZWxrYXR6QHdlYmNoYXQub3JnPiBmb3IgaGlzIE1PRFVMRSBwYXRjaGVzIChzZWUgZGV0YWlscyBiZWxvdyksCitQb3JmaXJpIENsYXVkaW8gPEMuUG9yZmlyaUBuaXNtcy50ZWkuZXJpY3Nzb24uc2U+IGZvciBwYXRjaGVzCit0byBtYWtlIHRoZSBkcml2ZXIgd29yayB3aXRoIHRoZSBvbGRlciBDRFUtNTEwLzUxNSBzZXJpZXMsIGFuZAorSGVpa28gRWlzc2ZlbGR0IDxoZWlrb0Bjb2xvc3N1cy5lc2NhcGUuZGU+IGZvciBwb2ludGluZyBvdXQgdGhhdAordGhlIHZlcmlmeV9hcmVhKCkgY2hlY2tzIHdlcmUgaWdub3JpbmcgdGhlIHJlc3VsdHMgb2Ygc2FpZCBjaGVja3MuCisKKyhBY2tub3dsZWRnbWVudHMgZnJvbSBSb24gSmVwcGVzZW4gaW4gdGhlIDAuMyByZWxlYXNlOikKK1RoYW5rcyB0byBDb3JleSBNaW55YXJkIHdobyB3cm90ZSB0aGUgb3JpZ2luYWwgQ0RVLTMxQSBkcml2ZXIgb24gd2hpY2gKK3RoaXMgZHJpdmVyIGlzIGJhc2VkLiAgVGhhbmtzIHRvIEtlbiBQaXp6aW5pIGFuZCBCb2IgQmxhaXIgd2hvIHByb3ZpZGVkIAorcGF0Y2hlcyBhbmQgZmVlZGJhY2sgb24gdGhlIGZpcnN0IHJlbGVhc2Ugb2YgdGhpcyBkcml2ZXIuCisKK0tlbiBQaXp6aW5pCitrZW5AaGFsY3lvbi5jb20KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoVGhlIGZvbGxvd2luZyBpcyBmcm9tIEpvZWwgS2F0eiA8am9lbGthdHpAd2ViY2hhdC5vcmc+LikKKworCVRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBzb255NTM1Lm8gdGhhdCBjYW4gYmUgaW5zdGFsbGVkIGFzIGEgbW9kdWxlLAordXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworZ2NjIC1jIC1EX19LRVJORUxfXyAtRE1PRFVMRSAtTzIgc29ueWNkNTM1LmMgLW8gc29ueWNkNTM1Lm8KKworCVRvIGluc3RhbGwgdGhlIG1vZHVsZSwgc2ltcGx5IHR5cGU6CisKK2luc21vZCBzb255NTM1Lm8KKwlvcgoraW5zbW9kIHNvbnk1MzUubyBzb255Y2Q1MzU9PGFkZHJlc3M+CisKKwlBbmQgdG8gcmVtb3ZlIGl0OgorCitybW1vZCBzb255NTM1CisKKwlUaGUgY29kZSBjaGVja3MgdG8gc2VlIGlmIE1PRFVMRSBpcyBkZWZpbmVkIGFuZCBiZWhhdmVzIGFzIGl0IHVzZWQKK3RvIGlmIE1PRFVMRSBpcyBub3QgZGVmaW5lZC4gVGhhdCBtZWFucyB5b3VyIHBhdGNoZWQgZmlsZSBzaG91bGQgYmVoYXZlCitleGFjdGx5IGFzIGl0IHVzZWQgdG8gaWYgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgorCisJSSBoYXZlIGFuIGV4dGVybmFsIGRyaXZlLCBhbmQgSSB1c3VhbGx5IGxlYXZlIGl0IHBvd2VyZWQgb2ZmLiBJIHVzZWQKK3RvIGhhdmUgdG8gcmVib290IGlmIEkgbmVlZGVkIHRvIHVzZSB0aGUgQ0RST00gZHJpdmUuIE5vdyBJIGRvbid0LgorCisJRXZlbiBpZiB5b3UgaGF2ZSBhbiBpbnRlcm5hbCBkcml2ZSwgd2h5IHdhc3RlIHRoZSA5Nksgb2YgbWVtb3J5CisodW5zd2FwcGFibGUpIHRoYXQgdGhlIGRyaXZlciB1c2VzIGlmIHlvdSB1c2UgeW91ciBDRC1ST00gZHJpdmUgaW5mcmVxdWVudGx5PworCisJVGhpcyBkcml2ZXIgd2lsbCBub3QgaW5zdGFsbCAod2hldGhlciBjb21waWxlZCBpbiBvciBsb2FkZWQgYXMgYQorbW9kdWxlKSBpZiB0aGUgQ0RST00gZHJpdmUgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uLiBUaGlzCittZWFucyB0aGF0IHlvdSBjYW4gaGF2ZSB0aGUgZHJpdmVyIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBhbmQgc3RpbGwgbG9hZAordGhlIG1vZHVsZSBsYXRlciAoYXNzdW1pbmcgdGhlIGRyaXZlciBkb2Vzbid0IGluc3RhbGwgaXRzZWxmIGR1cmluZworcG93ZXItb24pLiBUaGlzIG9ubHkgd2FzdGVzIDEySyB3aGVuIHlvdSBib290IHdpdGggdGhlIENEUk9NIGRyaXZlIG9mZi4KKworCVRoaXMgaXMgd2hhdCBJIHVzdWFsbHkgZG87IEkgbGVhdmUgdGhlIGRyaXZlciBjb21waWxlZCBpbnRvIHRoZQora2VybmVsLCBidXQgbG9hZCBpdCBhcyBhIG1vZHVsZSBpZiBJIHBvd2VyZWQgdGhlIHN5c3RlbSB1cCB3aXRoIHRoZSBkcml2ZQorb2ZmIGFuZCB0aGVuIGxhdGVyIGRlY2lkZWQgdG8gdXNlIHRoZSBDRFJPTSBkcml2ZS4KKworCVNpbmNlIHRoZSBkcml2ZXIgb25seSB1c2VzIGEgc2luZ2xlIHBhZ2UgdG8gcG9pbnQgdG8gdGhlIGNodW5rcywKK2F0dGVtcHRpbmcgdG8gc2V0IHRoZSBidWZmZXIgY2FjaGUgdG8gbW9yZSB0aGFuIDIgTWVnYWJ5dGVzIHdvdWxkIGJlIHZlcnkKK2JhZDsgZG9uJ3QgZG8gdGhhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2xpLXN0aS1yZW1vdmFsLnR4dCBiL0RvY3VtZW50YXRpb24vY2xpLXN0aS1yZW1vdmFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjIzYzlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jbGktc3RpLXJlbW92YWwudHh0CkBAIC0wLDAgKzEsMTMzIEBACisKKyMjIyMgY2xpKCkvc3RpKCkgcmVtb3ZhbCBndWlkZSwgc3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKworCithcyBvZiAyLjUuMjgsIGZpdmUgcG9wdWxhciBtYWNyb3MgaGF2ZSBiZWVuIHJlbW92ZWQgb24gU01QLCBhbmQKK2FyZSBiZWluZyBwaGFzZWQgb3V0IG9uIFVQOgorCisgY2xpKCksIHN0aSgpLCBzYXZlX2ZsYWdzKGZsYWdzKSwgc2F2ZV9mbGFnc19jbGkoZmxhZ3MpLCByZXN0b3JlX2ZsYWdzKGZsYWdzKQorCit1bnRpbCBub3cgaXQgd2FzIHBvc3NpYmxlIHRvIHByb3RlY3QgZHJpdmVyIGNvZGUgYWdhaW5zdCBpbnRlcnJ1cHQKK2hhbmRsZXJzIHZpYSBhIGNsaSgpLCBidXQgZnJvbSBub3cgb24gb3RoZXIsIG1vcmUgbGlnaHR3ZWlnaHQgbWV0aG9kcworaGF2ZSB0byBiZSB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24sIHN1Y2ggYXMgc3BpbmxvY2tzIG9yIHNlbWFwaG9yZXMuCisKK2ZvciBleGFtcGxlLCBkcml2ZXIgY29kZSB0aGF0IHVzZWQgdG8gZG8gc29tZXRoaW5nIGxpa2U6CisKKwlzdHJ1Y3QgZHJpdmVyX2RhdGE7CisKKwlpcnFfaGFuZGxlciAoLi4uKQorCXsKKwkJLi4uLgorCQlkcml2ZXJfZGF0YS5maW5pc2ggPSAxOworCQlkcml2ZXJfZGF0YS5uZXdfd29yayA9IDA7CisJCS4uLi4KKwl9CisKKwkuLi4KKworCWlvY3RsX2Z1bmMgKC4uLikKKwl7CisJCS4uLgorCQljbGkoKTsKKwkJLi4uCisJCWRyaXZlcl9kYXRhLmZpbmlzaCA9IDA7CisJCWRyaXZlcl9kYXRhLm5ld193b3JrID0gMjsKKwkJLi4uCisJCXN0aSgpOworCQkuLi4KKwl9CisKK3dhcyBTTVAtY29ycmVjdCBiZWNhdXNlIHRoZSBjbGkoKSBmdW5jdGlvbiBlbnN1cmVkIHRoYXQgbm8KK2ludGVycnVwdCBoYW5kbGVyIChhbW9uZ3N0IHRoZW0gdGhlIGFib3ZlIGlycV9oYW5kbGVyKCkpIGZ1bmN0aW9uCit3b3VsZCBleGVjdXRlIHdoaWxlIHRoZSBjbGkoKS1lZCBzZWN0aW9uIGlzIGV4ZWN1dGluZy4KKworYnV0IGZyb20gbm93IG9uIGEgbW9yZSBkaXJlY3QgbWV0aG9kIG9mIGxvY2tpbmcgaGFzIHRvIGJlIHVzZWQ6CisKKwlzcGlubG9ja190IGRyaXZlcl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCXN0cnVjdCBkcml2ZXJfZGF0YTsKKworCWlycV9oYW5kbGVyICguLi4pCisJeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkuLi4uCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkcml2ZXJfbG9jaywgZmxhZ3MpOworCQkuLi4uCisJCWRyaXZlcl9kYXRhLmZpbmlzaCA9IDE7CisJCWRyaXZlcl9kYXRhLm5ld193b3JrID0gMDsKKwkJLi4uLgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcml2ZXJfbG9jaywgZmxhZ3MpOworCQkuLi4uCisJfQorCisJLi4uCisKKwlpb2N0bF9mdW5jICguLi4pCisJeworCQkuLi4KKwkJc3Bpbl9sb2NrX2lycSgmZHJpdmVyX2xvY2spOworCQkuLi4KKwkJZHJpdmVyX2RhdGEuZmluaXNoID0gMDsKKwkJZHJpdmVyX2RhdGEubmV3X3dvcmsgPSAyOworCQkuLi4KKwkJc3Bpbl91bmxvY2tfaXJxKCZkcml2ZXJfbG9jayk7CisJCS4uLgorCX0KKwordGhlIGFib3ZlIGNvZGUgaGFzIGEgbnVtYmVyIG9mIGFkdmFudGFnZXM6CisKKy0gdGhlIGxvY2tpbmcgcmVsYXRpb24gaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgLSBhY3R1YWwgbG9jayB1c2FnZQorICBwaW5wb2ludHMgdGhlIGNyaXRpY2FsIHNlY3Rpb25zLiBjbGkoKSB1c2FnZSBpcyB0b28gb3BhcXVlLgorICBFYXNpZXIgdG8gdW5kZXJzdGFuZCBtZWFucyBpdCdzIGVhc2llciB0byBkZWJ1Zy4KKworLSBpdCdzIGZhc3RlciwgYmVjYXVzZSBzcGlubG9ja3MgYXJlIGZhc3RlciB0byBhY3F1aXJlIHRoYW4gdGhlCisgIHBvdGVudGlhbGx5IGhlYXZpbHktdXNlZCBJUlEgbG9jay4gRnVydGhlcm1vcmUsIHlvdXIgZHJpdmVyIGRvZXMKKyAgbm90IGhhdmUgdG8gd2FpdCBlZy4gZm9yIGEgYmlnIGhlYXZ5IFNDU0kgaW50ZXJydXB0IHRvIGZpbmlzaCwKKyAgYmVjYXVzZSB0aGUgZHJpdmVyX2xvY2sgc3BpbmxvY2sgaXMgb25seSB1c2VkIGJ5IHlvdXIgZHJpdmVyLgorICBjbGkoKSBvbiB0aGUgb3RoZXIgaGFuZCB3YXMgdXNlZCBieSBtYW55IGRyaXZlcnMsIGFuZCBleHRlbmRlZAorICB0aGUgY3JpdGljYWwgc2VjdGlvbiB0byB0aGUgd2hvbGUgSVJRIGhhbmRsZXIgZnVuY3Rpb24gLSBjcmVhdGluZworICBzZXJpb3VzIGxvY2sgY29udGVudGlvbi4KKworIAordG8gbWFrZSB0aGUgdHJhbnNpdGlvbiBlYXNpZXIsIHdlJ3ZlIHN0aWxsIGtlcHQgdGhlIGNsaSgpLCBzdGkoKSwKK3NhdmVfZmxhZ3MoKSwgc2F2ZV9mbGFnc19jbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpIG1hY3JvcyBkZWZpbmVkCitvbiBVUCBzeXN0ZW1zIC0gYnV0IHRoZWlyIHVzYWdlIHdpbGwgYmUgcGhhc2VkIG91dCB1bnRpbCAyLjYgaXMKK3JlbGVhc2VkLgorCitkcml2ZXJzIHRoYXQgd2FudCB0byBkaXNhYmxlIGxvY2FsIGludGVycnVwdHMgKGludGVycnVwdHMgb24gdGhlCitjdXJyZW50IENQVSksIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBmaXZlIG1hY3JvczoKKworICBsb2NhbF9pcnFfZGlzYWJsZSgpLCBsb2NhbF9pcnFfZW5hYmxlKCksIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpLAorICBsb2NhbF9pcnFfc2F2ZShmbGFncyksIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQorCitidXQgYmV3YXJlLCB0aGVpciBtZWFuaW5nIGFuZCBzZW1hbnRpY3MgYXJlIG11Y2ggc2ltcGxlciwgZmFyIGZyb20KK3RoYXQgb2YgdGhlIG9sZCBjbGkoKSwgc3RpKCksIHNhdmVfZmxhZ3MoZmxhZ3MpIGFuZCByZXN0b3JlX2ZsYWdzKGZsYWdzKQorU01QIG1lYW5pbmc6CisKKyAgICBsb2NhbF9pcnFfZGlzYWJsZSgpICAgICAgID0+IHR1cm4gbG9jYWwgSVJRcyBvZmYKKworICAgIGxvY2FsX2lycV9lbmFibGUoKSAgICAgICAgPT4gdHVybiBsb2NhbCBJUlFzIG9uCisKKyAgICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSAgID0+IHNhdmUgdGhlIGN1cnJlbnQgSVJRIHN0YXRlIGludG8gZmxhZ3MuIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgY2FuIGJlIG9uIG9yIG9mZi4gKG9uIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgdGhlcmUncyBldmVuIG1vcmUgYml0cyBpbiBpdC4pCisKKyAgICBsb2NhbF9pcnFfc2F2ZShmbGFncykgICAgID0+IHNhdmUgdGhlIGN1cnJlbnQgSVJRIHN0YXRlIGludG8gZmxhZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIGludGVycnVwdHMuCisKKyAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykgID0+IHJlc3RvcmUgdGhlIElSUSBzdGF0ZSBmcm9tIGZsYWdzLgorCisobG9jYWxfaXJxX3NhdmUgY2FuIHNhdmUgYm90aCBpcnFzIG9uIGFuZCBpcnFzIG9mZiBzdGF0ZSwgYW5kCitsb2NhbF9pcnFfcmVzdG9yZSBjYW4gcmVzdG9yZSBpbnRvIGJvdGggaXJxcyBvbiBhbmQgaXJxcyBvZmYgc3RhdGUuKQorCithbm90aGVyIHJlbGF0ZWQgY2hhbmdlIGlzIHRoYXQgc3luY2hyb25pemVfaXJxKCkgbm93IHRha2VzIGEgcGFyYW1ldGVyOgorc3luY2hyb25pemVfaXJxKGlycSkuIFRoaXMgY2hhbmdlIHRvbyBoYXMgdGhlIHB1cnBvc2Ugb2YgbWFraW5nIFNNUAorc3luY2hyb25pemF0aW9uIG1vcmUgbGlnaHR3ZWlnaHQgLSB0aGlzIHdheSB5b3UgY2FuIHdhaXQgZm9yIHlvdXIgb3duCitpbnRlcnJ1cHQgaGFuZGxlciB0byBmaW5pc2gsIG5vIG5lZWQgdG8gd2FpdCBmb3Igb3RoZXIgSVJRIHNvdXJjZXMuCisKKword2h5IHdlcmUgdGhlc2UgY2hhbmdlcyBkb25lPyBUaGUgbWFpbiByZWFzb24gd2FzIHRoZSBhcmNoaXRlY3R1cmFsIGJ1cmRlbgorb2YgbWFpbnRhaW5pbmcgdGhlIGNsaSgpL3N0aSgpIGludGVyZmFjZSAtIGl0IGJlY2FtZSBhIHJlYWwgcHJvYmxlbS4gVGhlCituZXcgaW50ZXJydXB0IHN5c3RlbSBpcyBtdWNoIG1vcmUgc3RyZWFtbGluZWQsIGVhc2llciB0byB1bmRlcnN0YW5kLCBkZWJ1ZywKK2FuZCBpdCdzIGFsc28gYSBiaXQgZmFzdGVyIC0gdGhlIHNhbWUgaGFwcGVuZWQgdG8gaXQgdGhhdCB3aWxsIGhhcHBlbiB0bworY2xpKCkvc3RpKCkgdXNpbmcgZHJpdmVycyBvbmNlIHRoZXkgY29udmVydCB0byBzcGlubG9ja3MgOi0pCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29tcHV0b25lLnR4dCBiL0RvY3VtZW50YXRpb24vY29tcHV0b25lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWNmNTliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jb21wdXRvbmUudHh0CkBAIC0wLDAgKzEsNTg4IEBACitOT1RFOiBUaGlzIGlzIGFuIHVubWFpbnRhaW5lZCBkcml2ZXIuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIGR1ZSB0bworY2hhbmdlcyBtYWRlIGluIHRoZSB0dHkgbGF5ZXIgaW4gMi42LiAgSWYgeW91IHdpc2ggdG8gdGFrZSBvdmVyIG1haW50ZW5hbmNlIG9mCit0aGlzIGRyaXZlciwgY29udGFjdCBNaWNoYWVsIFdhcmZpZWxkIDxtaHdAd2l0dHNlbmQuY29tPi4KKworQ2hhbmdlbG9nOgorLS0tLS0tLS0tLQorMTEtMDEtMjAwMToJT3JpZ2luYWwgRG9jdW1lbnQKKworMTAtMjktMjAwNDoJTWlub3IgbWlzc3BlbGxpbmcgJiBmb3JtYXQgZml4LCB1cGRhdGUgc3RhdHVzIG9mIGRyaXZlci4KKwkJSmFtZXMgTmVsc29uIDxqYW1lczQ3NjVAZ21haWwuY29tPgorCitDb21wdXRvbmUgSW50ZWxsaXBvcnQgSUkvUGx1cyBNdWx0aXBvcnQgU2VyaWFsIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVsZWFzZSBOb3RlcyBGb3IgTGludXggS2VybmVsIDIuMiBhbmQgaGlnaGVyLgorVGhlc2Ugbm90ZXMgYXJlIGZvciB0aGUgZHJpdmVycyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBpbnRlZ3JhdGVkIGludG8gdGhlCitrZXJuZWwgYW5kIGhhdmUgYmVlbiB0ZXN0ZWQgb24gTGludXgga2VybmVscyAyLjAsIDIuMiwgMi4zLCBhbmQgMi40LgorCitWZXJzaW9uOiAxLjIuMTQKK0RhdGU6IDExLzAxLzIwMDEKK0hpc3RvcmljYWwgQXV0aG9yOiBBbmRyZXcgTWFuaXNvbiA8YW1hbmlzb25AYW1lcmljYS5uZXQ+CitQcmltYXJ5IEF1dGhvcjogRG91ZyBNY05hc2gKK1N1cHBvcnQ6IHN1cHBvcnRAY29tcHV0b25lLmNvbQorRml4ZXMgYW5kIFVwZGF0ZXM6IE1pa2UgV2FyZmllbGQgPG1od0B3aXR0c2VuZC5jb20+CisKK1RoaXMgZmlsZSBhc3N1bWVzIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgQ29tcHV0b25lIGRyaXZlcnMgd2hpY2ggYXJlCitpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBzb3VyY2VzLiAgRm9yIHVwZGF0aW5nIHRoZSBkcml2ZXJzIG9yIGluc3RhbGxpbmcKK2RyaXZlcnMgaW50byBrZXJuZWxzIHdoaWNoIGRvIG5vdCBhbHJlYWR5IGhhdmUgQ29tcHV0b25lIGRyaXZlcnMsIHBsZWFzZQorcmVmZXIgdG8gdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgUkVBRE1FLmNvbXB1dG9uZSBmaWxlIGluIHRoZSBkcml2ZXIgcGF0Y2guCisKKworMS4gSU5UUk9EVUNUSU9OCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBlbnRpcmUgZmFtaWx5IG9mIEludGVsbGlwb3J0IElJL1BsdXMgY29udHJvbGxlcnMKK3dpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgTWljcm9DaGFubmVsIGNvbnRyb2xsZXJzLiAgSXQgZG9lcyBub3Qgc3VwcG9ydAorcHJvZHVjdHMgcHJldmlvdXMgdG8gdGhlIEludGVsbGlwb3J0IElJLgorCitUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIG9uIHRoZSB2Mi4wLnggTGludXggdHJlZSBhbmQgaGFzIGJlZW4gdGVzdGVkIHVwCit0byB2Mi40LjE0OyBpdCB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIHdpdGggZWFybGllciB2MS5YIGtlcm5lbHMsLgorCisKKzIuIFFVSUNLIElOU1RBTExBVElPTgorCitIYXJkd2FyZSAtIElmIHlvdSBoYXZlIGFuIElTQSBjYXJkLCBmaW5kIGEgZnJlZSBpbnRlcnJ1cHQgYW5kIGlvIHBvcnQuIAorCQkgICBMaXN0IHRob3NlIGluIHVzZSB3aXRoIGBjYXQgL3Byb2MvaW50ZXJydXB0c2AgYW5kIAorCQkgICBgY2F0IC9wcm9jL2lvcG9ydHNgLiAgU2V0IHRoZSBjYXJkIGRpcCBzd2l0Y2hlcyB0byBhIGZyZWUgCisJCSAgIGFkZHJlc3MuICBZb3UgbWF5IG5lZWQgdG8gY29uZmlndXJlIHlvdXIgQklPUyB0byByZXNlcnZlIGFuCisJCSAgIGlycSBmb3IgYW4gSVNBIGNhcmQuICBQQ0kgYW5kIEVJU0EgcGFyYW1ldGVycyBhcmUgc2V0CisJCSAgIGF1dG9tYWdpY2FsbHkuICBJbnNlcnQgY2FyZCBpbnRvIGNvbXB1dGVyIHdpdGggdGhlIHBvd2VyIG9mZiAKKwkJICAgYmVmb3JlIG9yIGFmdGVyIGRyaXZlcnMgaW5zdGFsbGF0aW9uLgorCisJTm90ZSB0aGUgaGFyZHdhcmUgYWRkcmVzcyBmcm9tIHRoZSBDb21wdXRvbmUgSVNBIGNhcmRzIGluc3RhbGxlZCBpbnRvCisJCXRoZSBzeXN0ZW0uICBUaGVzZSBhcmUgcmVxdWlyZWQgZm9yIGVkaXRpbmcgaXAyLmMgb3IgZWRpdGluZworCQkvZXRjL21vZHByb2JlLmNvbmYsIG9yIGZvciBzcGVjaWZpY2F0aW9uIG9uIHRoZSBtb2Rwcm9iZQorCQljb21tYW5kIGxpbmUuCisKKwlOb3RlIHRoYXQgdGhlIC9ldGMvbW9kdWxlcy5jb25mIHNob3VsZCBiZSB1c2VkIGZvciBvbGRlciAocHJlLTIuNikKKwkJa2VybmVscy4KKworU29mdHdhcmUgLQorCitNb2R1bGUgaW5zdGFsbGF0aW9uOgorCithKSBEZXRlcm1pbmUgZnJlZSBpcnEvYWRkcmVzcyB0byB1c2UgaWYgYW55IChjb25maWd1cmUgQklPUyBpZiBuZWVkIGJlKQorYikgUnVuICJtYWtlIGNvbmZpZyIgb3IgIm1ha2UgbWVudWNvbmZpZyIgb3IgIm1ha2UgeGNvbmZpZyIKKyAgIFNlbGVjdCAobSkgbW9kdWxlIGZvciBDT05GSUdfQ09NUFVUT05FIHVuZGVyIGNoYXJhY3RlcgorICAgZGV2aWNlcy4gIENPTkZJR19QQ0kgYW5kIENPTkZJR19NT0RVTEVTIGFsc28gbWF5IG5lZWQgdG8gYmUgc2V0LgorYykgU2V0IGFkZHJlc3Mgb24gSVNBIGNhcmRzIHRoZW46CisgICBlZGl0IC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvY2hhci9pcDIuYyBpZiBuZWVkZWQgCisJb3IKKyAgIGVkaXQgL2V0Yy9tb2Rwcm9iZS5jb25mIGlmIG5lZWRlZCAobW9kdWxlKS4KKwlvciBib3RoIHRvIG1hdGNoIHRoaXMgc2V0dGluZy4KK2QpIFJ1biAibWFrZSBtb2R1bGVzIgorZSkgUnVuICJtYWtlIG1vZHVsZXNfaW5zdGFsbCIKK2YpIFJ1biAiL3NiaW4vZGVwbW9kIC1hIgorZykgaW5zdGFsbCBkcml2ZXIgdXNpbmcgYG1vZHByb2JlIGlwMiA8b3B0aW9ucz5gIChvcHRpb25zIGxpc3RlZCBiZWxvdykKK2gpIHJ1biBpcDJta2RldiAoZWl0aGVyIHRoZSBzY3JpcHQgYmVsb3cgb3IgdGhlIGJpbmFyeSB2ZXJzaW9uKQorCisKK0tlcm5lbCBpbnN0YWxsYXRpb246CisKK2EpIERldGVybWluZSBmcmVlIGlycS9hZGRyZXNzIHRvIHVzZSBpZiBhbnkgKGNvbmZpZ3VyZSBCSU9TIGlmIG5lZWQgYmUpCitiKSBSdW4gIm1ha2UgY29uZmlnIiBvciAibWFrZSBtZW51Y29uZmlnIiBvciAibWFrZSB4Y29uZmlnIgorICAgU2VsZWN0ICh5KSBrZXJuZWwgZm9yIENPTkZJR19DT01QVVRPTkUgdW5kZXIgY2hhcmFjdGVyCisgICBkZXZpY2VzLiAgQ09ORklHX1BDSSBtYXkgbmVlZCB0byBiZSBzZXQgaWYgeW91IGhhdmUgUENJIGJ1cy4KK2MpIFNldCBhZGRyZXNzIG9uIElTQSBjYXJkcyB0aGVuOgorCSAgIGVkaXQgL3Vzci9zcmMvbGludXgvZHJpdmVycy9jaGFyL2lwMi5jICAKKyAgICAgICAgICAgKE9wdGlvbmFsIC0gbWF5IGJlIHNwZWNpZmllZCBvbiBrZXJuZWwgY29tbWFuZCBsaW5lIG5vdykKK2QpIFJ1biAibWFrZSB6SW1hZ2UiIG9yIHdoYXRldmVyIHRhcmdldCB5b3UgcHJlZmVyLgorZSkgbXYgL3Vzci9zcmMvbGludXgvYXJjaC9pMzg2L2Jvb3QvekltYWdlIHRvIC9ib290LgorZikgQWRkIG5ldyBjb25maWcgZm9yIHRoaXMga2VybmVsIGludG8gL2V0Yy9saWxvLmNvbmYsIHJ1biAibGlsbyIKKwlvciBjb3B5IHRvIGEgZmxvcHB5IGRpc2sgYW5kIGJvb3QgZnJvbSB0aGF0IGZsb3BweSBkaXNrLgorZykgUmVib290IHVzaW5nIHRoaXMga2VybmVsCitoKSBydW4gaXAybWtkZXYgKGVpdGhlciB0aGUgc2NyaXB0IGJlbG93IG9yIHRoZSBiaW5hcnkgdmVyc2lvbikKKworS2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zOgorCitXaGVuIGNvbXBpbGluZyB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgaW8gYW5kIGlycSBtYXkgYmUKK2NvbXBpbGVkIGludG8gdGhlIGRyaXZlciBieSBlZGl0aW5nIGlwMi5jIGFuZCBzZXR0aW5nIHRoZSB2YWx1ZXMgZm9yCitpbyBhbmQgaXJxIGluIHRoZSBhcHByb3ByaWF0ZSBhcnJheS4gIEFuIGFsdGVybmF0aXZlIGlzIHRvIHNwZWNpZnkKK2EgY29tbWFuZCBsaW5lIHBhcmFtZXRlciB0byB0aGUga2VybmVsIGF0IGJvb3QgdXAuCisKKyAgICAgICAgaXAyPWlvMCxpcnEwLGlvMSxpcnExLGlvMixpcnEyLGlvMyxpcnEzCisKK05vdGUgdGhhdCB0aGlzIG9yZGVyIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gdGhlIHNwZWNpZmljYXRpb25zIGZvciB0aGUKK21vZGxvYWQgcGFyYW1ldGVycyB3aGljaCBoYXZlIHNlcGFyYXRlIElSUSBhbmQgSU8gc3BlY2lmaWVycy4KKworVGhlIGlvIHBvcnQgYWxzbyBzZWxlY3RzIFBDSSAoMSkgYW5kIEVJU0EgKDIpIGJvYXJkcy4KKworICAgICAgICBpbz0wICAgIE5vIGJvYXJkCisgICAgICAgIGlvPTEgICAgUENJIGJvYXJkCisgICAgICAgIGlvPTIgICAgRUlTQSBib2FyZAorICAgICAgICBlbHNlICAgIElTQSBib2FyZCBpbyBhZGRyZXNzCisKK1lvdSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgYm9hcmRzIHdoaWNoIGFyZSBwcmVzZW50LgorCisgICAgICAgIEV4YW1wbGVzOgorCisgICAgICAgICAgICAgICAgMiBQQ0kgYm9hcmRzOgorCisgICAgICAgICAgICAgICAgICAgICAgICBpcDI9MSwwLDEsMAorCisgICAgICAgICAgICAgICAgMSBJU0EgYm9hcmQgYXQgMHgzMTAgaXJxIDU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwMj0weDMxMCw1CisKK1RoaXMgY2FuIGJlIGFkZGVkIHRvIGFuZCAiYXBwZW5kIiBvcHRpb24gaW4gbGlsby5jb25mIHNpbWlsYXIgdG8gdGhpczoKKworICAgICAgICBhcHBlbmQ9ImlwMj0xLDAsMSwwIgorCisKKzMuIElOU1RBTExBVElPTgorCitQcmV2aW91c2x5LCB0aGUgZHJpdmVyIHNvdXJjZXMgd2VyZSBwYWNrYWdlZCB3aXRoIGEgc2V0IG9mIHBhdGNoIGZpbGVzCit0byB1cGRhdGUgdGhlIGNoYXJhY3RlciBkcml2ZXJzJyBtYWtlZmlsZSBhbmQgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgb3RoZXIgCitrZXJuZWwgc291cmNlIGZpbGVzLiBBIGJ1aWxkIHNjcmlwdCAoaXAyYnVpbGQpIHdhcyBpbmNsdWRlZCB3aGljaCBhcHBsaWVzIAordGhlIHBhdGNoZXMgaWYgbmVlZGVkLCBhbmQgYnVpbGQgYW55IHV0aWxpdGllcyBuZWVkZWQuCitXaGF0IHlvdSByZWNlaXZlIG1heSBiZSBhIHNpbmdsZSBwYXRjaCBmaWxlIGluIGNvbnZlbnRpb25hbCBrZXJuZWwKK3BhdGNoIGZvcm1hdCBidWlsZCBzY3JpcHQuIFRoYXQgZm9ybSBjYW4gYWxzbyBiZSBhcHBsaWVkIGJ5CitydW5uaW5nIHBhdGNoIC1wMSA8IFRoZVBhdGNoRmlsZS4gIE90aGVyd2lzZSBydW4gaXAyYnVpbGQuCisgCitUaGUgZHJpdmVyIGNhbiBiZSBpbnN0YWxsZWQgYXMgYSBtb2R1bGUgKHJlY29tbWVuZGVkKSBvciBidWlsdCBpbnRvIHRoZSAKK2tlcm5lbC4gVGhpcyBpcyBzZWxlY3RlZCBhcyBmb3Igb3RoZXIgZHJpdmVycyB0aHJvdWdoIHRoZSBgbWFrZSBjb25maWdgCitjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgdGhlIExpbnV4IHNvdXJjZSB0cmVlLiBJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IAoraW50byB0aGUga2VybmVsIHlvdSB3aWxsIG5lZWQgdG8gZWRpdCB0aGUgZmlsZSBpcDIuYyB0byBtYXRjaCB0aGUgYm9hcmRzIAoreW91IGFyZSBpbnN0YWxsaW5nLiBTZWUgdGhhdCBmaWxlIGZvciBpbnN0cnVjdGlvbnMuIElmIHRoZSBkcml2ZXIgaXMgCitpbnN0YWxsZWQgYXMgYSBtb2R1bGUgdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGFsc28gYmUgc3BlY2lmaWVkIG9uIHRoZQorbW9kcHJvYmUgY29tbWFuZCBsaW5lIGFzIGZvbGxvd3M6CisKKwltb2Rwcm9iZSBpcDIgaXJxPWlycTEsaXJxMixpcnEzLGlycTQgaW89YWRkcjEsYWRkcjIsYWRkcjMsYWRkcjQKKword2hlcmUgaXJxbnVtIGlzIG9uZSBvZiB0aGUgdmFsaWQgSW50ZWxsaXBvcnQgSUkgaW50ZXJydXB0cyAoMyw0LDUsNywxMCwxMSwKKzEyLDE1KSBhbmQgYWRkcjEtNCBhcmUgdGhlIGJhc2UgYWRkcmVzc2VzIGZvciB1cCB0byBmb3VyIGNvbnRyb2xsZXJzLiBJZiAKK3RoZSBpcnFzIGFyZSBub3Qgc3BlY2lmaWVkIHRoZSBkcml2ZXIgdXNlcyB0aGUgZGVmYXVsdCBpbiBpcDIuYyAod2hpY2ggCitzZWxlY3RzIHBvbGxlZCBtb2RlKS4gSWYgbm8gYmFzZSBhZGRyZXNzZXMgYXJlIHNwZWNpZmllZCB0aGUgZGVmYXVsdHMgaW4gCitpcDIuYyBhcmUgdXNlZC4gSWYgeW91IGFyZSBhdXRvbG9hZGluZyB0aGUgZHJpdmVyIG1vZHVsZSB3aXRoIGtlcm5lbGQgb3IKK2ttb2QgdGhlIGJhc2UgYWRkcmVzc2VzIGFuZCBpbnRlcnJ1cHQgbnVtYmVyIG11c3QgYWxzbyBiZSBzZXQgaW4gaXAyLmMKK2FuZCByZWNvbXBpbGUgb3IganVzdCBpbnNlcnQgYW5kIG9wdGlvbnMgbGluZSBpbiAvZXRjL21vZHByb2JlLmNvbmYgb3IgYm90aC4KK1RoZSBvcHRpb25zIGxpbmUgaXMgZXF1aXZhbGVudCB0byB0aGUgY29tbWFuZCBsaW5lIGFuZCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKK3doYXQgaXMgaW4gaXAyLmMuIAorCisvZXRjL21vZHByb2JlLmNvbmYgc2FtcGxlOgorCW9wdGlvbnMgaXAyIGlvPTEsMHgzMjggaXJxPTEsMTAKKwlhbGlhcyBjaGFyLW1ham9yLTcxIGlwMgorCWFsaWFzIGNoYXItbWFqb3ItNzIgaXAyCisJYWxpYXMgY2hhci1tYWpvci03MyBpcDIKKworVGhlIGVxdWl2YWxlbnQgaW4gaXAyLmM6CisKK3N0YXRpYyBpbnQgaW9bSVAyX01BWF9CT0FSRFNdPSB7IDEsIDB4MzI4LCAwLCAwIH07CitzdGF0aWMgaW50IGlycVtJUDJfTUFYX0JPQVJEU10gPSB7IDEsIDEwLCAtMSwgLTEgfTsgCisKK1RoZSBlcXVpdmFsZW50IGZvciB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAoaW4gbGlsby5jb25mKToKKworICAgICAgICBhcHBlbmQ9ImlwMj0xLDEsMHgzMjgsMTAiCisKKworTm90ZToJQm90aCBpbyBhbmQgaXJxIHNob3VsZCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgWU9VUiBzeXN0ZW0uICBBbiAiaW8iCisJYWRkcmVzcyBvZiAxIG9yIDIgaW5kaWNhdGVzIGEgUENJIG9yIEVJU0EgY2FyZCBpbiB0aGUgYm9hcmQgdGFibGUuCisJVGhlIFBDSSBvciBFSVNBIGlycSB3aWxsIGJlIGFzc2lnbmVkIGF1dG9tYXRpY2FsbHkuCisKK1NwZWNpZnlpbmcgYW4gaW52YWxpZCBvciBpbi11c2UgaXJxIHdpbGwgZGVmYXVsdCB0aGUgZHJpdmVyIGludG8KK3J1bm5pbmcgaW4gcG9sbGVkIG1vZGUgZm9yIHRoYXQgY2FyZC4gIElmIGFsbCBpcnEgZW50cmllcyBhcmUgMCB0aGVuCithbGwgY2FyZHMgd2lsbCBvcGVyYXRlIGluIHBvbGxlZCBtb2RlLgorCitJZiB5b3Ugc2VsZWN0IHRoZSBkcml2ZXIgYXMgcGFydCBvZiB0aGUga2VybmVsIHJ1biA6CisKKwltYWtlIHpsaWxvIChvciB3aGF0ZXZlciB5b3UgZG8gdG8gY3JlYXRlIGEgYm9vdGFibGUga2VybmVsKQorCitJZiB5b3Ugc2VsZWN0ZWQgYSBtb2R1bGUgcnVuIDoKKworCW1ha2UgbW9kdWxlcyAmJiBtYWtlIG1vZHVsZXNfaW5zdGFsbAorCitUaGUgdXRpbGl0eSBpcDJta2RldiAoc2VlIDUgYW5kIDcgYmVsb3cpIGNyZWF0ZXMgYWxsIHRoZSBkZXZpY2Ugbm9kZXMKK3JlcXVpcmVkIGJ5IHRoZSBkcml2ZXIuICBGb3IgYSBkZXZpY2UgdG8gYmUgY3JlYXRlZCBpdCBtdXN0IGJlIGNvbmZpZ3VyZWQKK2luIHRoZSBkcml2ZXIgYW5kIHRoZSBib2FyZCBtdXN0IGJlIGluc3RhbGxlZC4gT25seSBkZXZpY2VzIGNvcnJlc3BvbmRpbmcKK3RvIHJlYWwgSW50ZWxsaVBvcnQgSUkgcG9ydHMgYXJlIGNyZWF0ZWQuIFdpdGggbXVsdGlwbGUgYm9hcmRzIGFuZCBleHBhbnNpb24KK2JveGVzIHRoaXMgd2lsbCBsZWF2ZSBnYXBzIGluIHRoZSBzZXF1ZW5jZSBvZiBkZXZpY2UgbmFtZXMuIGlwMm1rZGV2IHVzZXMKK0xpbnV4IHR0eSBuYW1pbmcgY29udmVudGlvbnM6IHR0eUYwIC0gdHR5RjI1NSBmb3Igbm9ybWFsIGRldmljZXMsIGFuZAorY3VmMCAtIGN1ZjI1NSBmb3IgY2FsbG91dCBkZXZpY2VzLgorCitJZiB5b3UgYXJlIHVzaW5nIGRldmZzLCBleGlzdGluZyBkZXZpY2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2l0aGluCit0aGUgZGV2ZnMgbmFtZSBzcGFjZS4gIE5vcm1hbCBkZXZpY2VzIHdpbGwgYmUgdHRzL0YwIC0gdHRzL0YyNTUgYW5kIGNhbGxvdXQKK2RldmljZXMgd2lsbCBiZSBjdWEvRjAgLSBjdWEvRjI1NS4gIFdpdGggZGV2ZnMgaW5zdGFsbGVkLCBpcDJta2RldiB3aWxsCitjcmVhdGUgc3ltYm9saWMgbGlua3MgaW4gL2RldiBmcm9tIHRoZSBvbGQgY29udmVudGlvbmFsIG5hbWVzIHRvIHRoZSBuZXdlcgorZGV2ZnMgbmFtZXMgYXMgZm9sbG93czoKKworCS9kZXYvaXAyaXBsW25dCS0+IC9kZXYvaXAyL2lwbFtuXQluID0gMCAtIDMKKwkvZGV2L2lwMnN0YXRbbl0JLT4gL2Rldi9pcDIvc3RhdFtuXQluID0gMCAtIDMKKwkvZGV2L3R0eUZbbl0JLT4gL2Rldi90dHMvRltuXQluID0gMCAtIDI1NQorCS9kZXYvY3VmW25dCS0+IC9kZXYvY3VhL0Zbbl0JbiA9IDAgLSAyNTUKKworT25seSBkZXZpY2VzIGZvciBleGlzdGluZyBwb3J0cyBhbmQgYm9hcmRzIHdpbGwgYmUgY3JlYXRlZC4KKworSU1QT1JUQU5UIE5PVEU6ICBUaGUgbmFtaW5nIGNvbnZlbnRpb24gdXNlZCBmb3IgZGV2ZnMgYnkgdGhpcyBkcml2ZXIKK3dhcyBjaGFuZ2VkIGZyb20gMS4yLjEyIHRvIDEuMi4xMy4gIFRoZSBvbGQgbmFtaW5nIGNvbnZlbnRpb24gd2FzIHRvCit1c2UgdHRmLyVkIGZvciB0aGUgdHR5IGRldmljZSBhbmQgY3VmLyVkIGZvciB0aGUgY3VhIGRldmljZS4gIFRoYXQKK2hhcyBiZWVuIGNoYW5nZWQgdG8gY29uZm9ybSB0byBhbiBhZ3JlZWQtdXBvbiBzdGFuZGFyZCBvZiBwbGFjaW5nCithbGwgdGhlIHR0eSBkZXZpY2VzIHVuZGVyIHR0cy4gIFRoZSBkZXZpY2UgbmFtZXMgYXJlIG5vdyB0dHMvRiVkIGZvcgordGhlIHR0eSBkZXZpY2UgYW5kIGN1YS9GJWQgZm9yIHRoZSBjdWEgZGV2aWNlcy4gIElmIHlvdSB3ZXJlIHVzaW5nCit0aGUgb2xkZXIgZGV2ZnMgbmFtZXMsIHlvdSBtdXN0IHVwZGF0ZSBmb3IgdGhlIG5ld2VyIGNvbnZlbnRpb24uCisKK1lvdSBkbyBub3QgbmVlZCB0byBydW4gaXAybWtkZXYgaWYgeW91IGFyZSB1c2luZyBkZXZmcyBhbmQgb25seSB3YW50IHRvCit1c2UgdGhlIGRldmZzIG5hdGl2ZSBkZXZpY2UgbmFtZXMuCisKKworNC4gVVNJTkcgVEhFIERSSVZFUlMKKworQXMgbm90ZWQgYWJvdmUsIHRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgcG9ydHMgaW4gYWNjb3JkYW5jZSB3aXRoIExpbnV4Citjb252ZW50aW9ucywgYW5kIHRoZSBkZXZpY2VzIHNob3VsZCBiZSBpbnRlcmNoYW5nZWFibGUgd2l0aCB0aGUgc3RhbmRhcmQKK3NlcmlhbCBkZXZpY2VzLiAoVGhpcyBpcyBhIGtleSBwb2ludCBmb3IgcHJvYmxlbSByZXBvcnRpbmc6IHBsZWFzZSBtYWtlCitzdXJlIHRoYXQgd2hhdCB5b3UgYXJlIHRyeWluZyBkbyB3b3JrcyBvbiB0aGUgdHR5U3gvY3VheCBwb3J0cyBmaXJzdDsgdGhlbiAKK3RlbGwgdXMgd2hhdCB3ZW50IHdyb25nIHdpdGggdGhlIGlwMiBwb3J0cyEpCisKK0hpZ2hlciBzcGVlZHMgY2FuIGJlIG9idGFpbmVkIHVzaW5nIHRoZSBzZXRzZXJpYWwgdXRpbGl0eSB3aGljaCByZW1hcHMgCiszOCw0MDAgYnBzIChleHRiKSB0byA1Nyw2MDAgYnBzLCAxMTUsMjAwIGJwcywgb3IgYSBjdXN0b20gc3BlZWQuIAorSW50ZWxsaXBvcnQgSUkgaW5zdGFsbGF0aW9ucyB1c2luZyB0aGUgUG93ZXJQb3J0IGV4cGFuc2lvbiBtb2R1bGUgY2FuCit1c2UgdGhlIGN1c3RvbSBzcGVlZCBzZXR0aW5nIHRvIHNlbGVjdCB0aGUgaGlnaGVzdCBzcGVlZHM6IDE1Myw2MDAgYnBzLAorMjMwLDQwMCBicHMsIDMwNywyMDAgYnBzLCA0NjAsODAwYnBzIGFuZCA5MjEsNjAwIGJwcy4gVGhlIGJhc2UgZm9yCitjdXN0b20gYmF1ZCByYXRlIGNvbmZpZ3VyYXRpb24gaXMgZml4ZWQgYXQgOTIxLDYwMCBmb3IgY2FyZHMvZXhwYW5zaW9uCittb2R1bGVzIHdpdGggU1Q2NTQncyBhbmQgMTE1MjAwIGZvciB0aG9zZSB3aXRoIENpcnJ1cyBDRDE0MDAncy4gIFRoaXMKK2NvcnJlc3BvbmRzIHRvIHRoZSBtYXhpbXVtIGJpdCByYXRlcyB0aG9zZSBjaGlwcyBhcmUgY2FwYWJsZS4gIAorRm9yIGV4YW1wbGUgaWYgdGhlIGJhdWQgYmFzZSBpcyA5MjE2MDAgYW5kIHRoZSBiYXVkIGRpdmlzb3IgaXMgMTggdGhlbgordGhlIGN1c3RvbSByYXRlIGlzIDkyMTYwMC8xOCA9IDUxMjAwIGJwcy4gIFNlZSB0aGUgc2V0c2VyaWFsIG1hbiBwYWdlIGZvcgorY29tcGxldGUgZGV0YWlscy4gT2YgY291cnNlIGlmIHN0dHkgYWNjZXB0cyB0aGUgaGlnaGVyIHJhdGVzIG5vdyB5b3UgY2FuCit1c2UgdGhhdCBhcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCBpb2N0bHMoKS4KKworCis1LiBpcDJta2RldiBhbmQgYXNzb3J0ZWQgdXRpbGl0aWVzLi4uCisKK1NldmVyYWwgdXRpbGl0aWVzLCBpbmNsdWRpbmcgdGhlIHNvdXJjZSBmb3IgYSBiaW5hcnkgaXAybWtkZXYgdXRpbGl0eSBhcmUKK2F2YWlsYWJsZSB1bmRlciAuLi4vZHJpdmVycy9jaGFyL2lwMi4gIFRoZXNlIGNhbiBiZSBidWlsZCBieSBjaGFuZ2luZyB0bwordGhhdCBkaXJlY3RvcnkgYW5kIHR5cGluZyAibWFrZSIgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYmUgYnVpbHQuICBJZiB5b3UgZG8KK25vdCB3aXNoIHRvIGNvbXBpbGUgdGhlIGJpbmFyeSB1dGlsaXRpZXMsIHRoZSBzaGVsbCBzY3JpcHQgYmVsb3cgY2FuIGJlCitjdXQgb3V0IGFuZCBydW4gYXMgImlwMm1rZGV2IiB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBkZXZpY2UgZmlsZXMuICBUbwordXNlIHRoZSBpcDJta2RldiBzY3JpcHQsIHlvdSBtdXN0IGhhdmUgcHJvY2ZzIGVuYWJsZWQgYW5kIHRoZSBwcm9jIGZpbGUKK3N5c3RlbSBtb3VudGVkIG9uIC9wcm9jLgorCitZb3UgZG8gbm90IG5lZWQgdG8gcnVuIGlwMm1rZGV2IGlmIHlvdSBhcmUgdXNpbmcgZGV2ZnMgYW5kIG9ubHkgd2FudCB0bwordXNlIHRoZSBkZXZmcyBuYXRpdmUgZGV2aWNlIG5hbWVzLgorCisKKzYuIERFVkZTCisKK0RFVkZTIGlzIHRoZSBERVZpY2UgRmlsZSBTeXN0ZW0gYXZhaWxhYmxlIGFzIGFuIGFkZCBvbiBwYWNrYWdlIGZvciB0aGUKKzIuMi54IGtlcm5lbHMgYW5kIGF2YWlsYWJsZSBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIDIuMy40NiBhbmQgaGlnaGVyLgorRGV2ZnMgYWxsb3dzIGZvciB0aGUgYXV0b21hdGljIGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGRldmljZSBuYW1lcwordW5kZXIgY29udHJvbCBvZiB0aGUgZGV2aWNlIGRyaXZlcnMgdGhlbXNlbHZlcy4gIFRoZSBEZXZmcyBuYW1lc3BhY2UgaXMKK2hpZXJhcmNoaWNhbCBhbmQgcmVkdWNlcyB0aGUgY2x1dHRlciBwcmVzZW50IGluIHRoZSBub3JtYWwgZmxhdCAvZGV2CituYW1lc3BhY2UuICBEZXZmcyBuYW1lcyBhbmQgY29udmVudGlvbmFsIGRldmljZSBuYW1lcyBtYXkgYmUgaW50ZXJtaXhlZC4KK0EgdXNlcnNwYWNlIGRhZW1vbiwgZGV2ZnNkLCBleGlzdHMgdG8gYWxsb3cgZm9yIGF1dG9tYXRpYyBjcmVhdGlvbiBhbmQKK21hbmFnZW1lbnQgb2Ygc3ltYm9saWMgbGlua3MgZnJvbSB0aGUgZGV2ZnMgbmFtZSBzcGFjZSB0byB0aGUgY29udmVudGlvbmFsCituYW1lcy4gIE1vcmUgZGV0YWlscyBvbiBkZXZmcyBjYW4gYmUgZm91bmQgb24gdGhlIERFVkZTIGhvbWUgc2l0ZSBhdAorPGh0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4Lz4gb3IgaW4gdGhlIGZpbGUga2VybmVsCitkb2N1bWVudGF0aW9uIGZpbGVzLCAuLi4vbGludXgvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9SRUFETUUuCisKK0lmIHlvdSBhcmUgdXNpbmcgZGV2ZnMsIGV4aXN0aW5nIGRldmljZXMgYXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoaW4KK3RoZSBkZXZmcyBuYW1lIHNwYWNlLiAgTm9ybWFsIGRldmljZXMgd2lsbCBiZSB0dHMvRjAgLSB0dHMvRjI1NSBhbmQgY2FsbG91dAorZGV2aWNlcyB3aWxsIGJlIGN1YS9GMCAtIGN1YS9GMjU1LiAgV2l0aCBkZXZmcyBpbnN0YWxsZWQsIGlwMm1rZGV2IHdpbGwKK2NyZWF0ZSBzeW1ib2xpYyBsaW5rcyBpbiAvZGV2IGZyb20gdGhlIG9sZCBjb252ZW50aW9uYWwgbmFtZXMgdG8gdGhlIG5ld2VyCitkZXZmcyBuYW1lcyBhcyBmb2xsb3dzOgorCisJL2Rldi9pcDJpcGxbbl0JLT4gL2Rldi9pcDIvaXBsW25dCW4gPSAwIC0gMworCS9kZXYvaXAyc3RhdFtuXQktPiAvZGV2L2lwMi9zdGF0W25dCW4gPSAwIC0gMworCS9kZXYvdHR5RltuXQktPiAvZGV2L3R0cy9GW25dCW4gPSAwIC0gMjU1CisJL2Rldi9jdWZbbl0JLT4gL2Rldi9jdWEvRltuXQluID0gMCAtIDI1NQorCitPbmx5IGRldmljZXMgZm9yIGV4aXN0aW5nIHBvcnRzIGFuZCBib2FyZHMgd2lsbCBiZSBjcmVhdGVkLgorCitJTVBPUlRBTlQgTk9URTogIFRoZSBuYW1pbmcgY29udmVudGlvbiB1c2VkIGZvciBkZXZmcyBieSB0aGlzIGRyaXZlcgord2FzIGNoYW5nZWQgZnJvbSAxLjIuMTIgdG8gMS4yLjEzLiAgVGhlIG9sZCBuYW1pbmcgY29udmVudGlvbiB3YXMgdG8KK3VzZSB0dGYvJWQgZm9yIHRoZSB0dHkgZGV2aWNlIGFuZCBjdWYvJWQgZm9yIHRoZSBjdWEgZGV2aWNlLiAgVGhhdAoraGFzIGJlZW4gY2hhbmdlZCB0byBjb25mb3JtIHRvIGFuIGFncmVlZC11cG9uIHN0YW5kYXJkIG9mIHBsYWNpbmcKK2FsbCB0aGUgdHR5IGRldmljZXMgdW5kZXIgdHRzLiAgVGhlIGRldmljZSBuYW1lcyBhcmUgbm93IHR0cy9GJWQgZm9yCit0aGUgdHR5IGRldmljZSBhbmQgY3VhL0YlZCBmb3IgdGhlIGN1YSBkZXZpY2VzLiAgSWYgeW91IHdlcmUgdXNpbmcKK3RoZSBvbGRlciBkZXZmcyBuYW1lcywgeW91IG11c3QgdXBkYXRlIGZvciB0aGUgbmV3ZXIgY29udmVudGlvbi4KKworWW91IGRvIG5vdCBuZWVkIHRvIHJ1biBpcDJta2RldiBpZiB5b3UgYXJlIHVzaW5nIGRldmZzIGFuZCBvbmx5IHdhbnQgdG8KK3VzZSB0aGUgZGV2ZnMgbmF0aXZlIGRldmljZSBuYW1lcy4KKyAKKworNy4gTk9URVMKKworVGhpcyBpcyBhIHJlbGVhc2UgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLCBidXQgaXQgaXMgaW1wb3NzaWJsZSB0byB0ZXN0IGl0CitpbiBhbGwgY29uZmlndXJhdGlvbnMgb2YgTGludXguIElmIHRoZXJlIGlzIGFueSBhbm9tYWxvdXMgYmVoYXZpb3VyIHRoYXQgCitkb2VzIG5vdCBtYXRjaCB0aGUgc3RhbmRhcmQgc2VyaWFsIHBvcnQncyBiZWhhdmlvdXIgcGxlYXNlIGxldCB1cyBrbm93LgorCisKKzguIGlwMm1rZGV2IHNoZWxsIHNjcmlwdAorCitQcmV2aW91c2x5LCB0aGlzIHNjcmlwdCB3YXMgc2ltcGx5IGF0dGFjaGVkIGhlcmUuICBJdCBpcyBub3cgYXR0YWNoZWQgYXMgYQorc2hhciBhcmNoaXZlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGV4dHJhY3QgdGhlIHNjcmlwdCBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgorVG8gY3JlYXRlIHRoZSBpcDJta2RldiBzaGVsbCBzY3JpcHQgY2hhbmdlIHRvIGEgY29udmVuaWVudCBkaXJlY3RvcnkgKC90bXAKK3dvcmtzIGp1c3QgZmluZSkgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKwl1bnNoYXIgRG9jdW1lbnRhdGlvbi9jb21wdXRvbmUudHh0CisJCShUaGlzIGZpbGUpCisKK1lvdSBzaG91bGQgbm93IGhhdmUgYSBmaWxlIGlwMm1rZGV2IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aXRoCitwZXJtaXNzaW9ucyBzZXQgdG8gZXhlY3V0ZS4gIFJ1bm5pbmcgdGhhdCBzY3JpcHQgd2l0aCB0aGVuIGNyZWF0ZSB0aGUKK25lY2Vzc2FyeSBkZXZpY2VzIGZvciB0aGUgQ29tcHV0b25lIGJvYXJkcywgaW50ZXJmYWNlcywgYW5kIHBvcnRzIHdoaWNoCithcmUgcHJlc2VudCBvbiB5b3Ugc3lzdGVtIGF0IHRoZSB0aW1lIGl0IGlzIHJ1bi4KKworCisjIS9iaW4vc2gKKyMgVGhpcyBpcyBhIHNoZWxsIGFyY2hpdmUgKHByb2R1Y2VkIGJ5IEdOVSBzaGFydXRpbHMgNC4yLjEpLgorIyBUbyBleHRyYWN0IHRoZSBmaWxlcyBmcm9tIHRoaXMgYXJjaGl2ZSwgc2F2ZSBpdCB0byBzb21lIEZJTEUsIHJlbW92ZQorIyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgYCEvYmluL3NoJyBsaW5lIGFib3ZlLCB0aGVuIHR5cGUgYHNoIEZJTEUnLgorIworIyBNYWRlIG9uIDIwMDEtMTAtMjkgMTA6MzIgRVNUIGJ5IDxtaHdAYWxjb3ZlLndpdHRzZW5kLmNvbT4uCisjIFNvdXJjZSBkaXJlY3Rvcnkgd2FzIGAvaG9tZTIvc3JjL3RtcCcuCisjCisjIEV4aXN0aW5nIGZpbGVzIHdpbGwgKm5vdCogYmUgb3ZlcndyaXR0ZW4gdW5sZXNzIGAtYycgaXMgc3BlY2lmaWVkLgorIworIyBUaGlzIHNoYXIgY29udGFpbnM6CisjIGxlbmd0aCBtb2RlICAgICAgIG5hbWUKKyMgLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgNDI1MSAtcnd4ci14ci14IGlwMm1rZGV2CisjCitzYXZlX0lGUz0iJHtJRlN9IgorSUZTPSIke0lGU306IgorZ2V0dGV4dF9kaXI9RkFJTEVECitsb2NhbGVfZGlyPUZBSUxFRAorZmlyc3RfcGFyYW09IiQxIgorZm9yIGRpciBpbiAkUEFUSAorZG8KKyAgaWYgdGVzdCAiJGdldHRleHRfZGlyIiA9IEZBSUxFRCAmJiB0ZXN0IC1mICRkaXIvZ2V0dGV4dCBcCisgICAgICYmICgkZGlyL2dldHRleHQgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMSkKKyAgdGhlbgorICAgIHNldCBgJGRpci9nZXR0ZXh0IC0tdmVyc2lvbiAyPiYxYAorICAgIGlmIHRlc3QgIiQzIiA9IEdOVQorICAgIHRoZW4KKyAgICAgIGdldHRleHRfZGlyPSRkaXIKKyAgICBmaQorICBmaQorICBpZiB0ZXN0ICIkbG9jYWxlX2RpciIgPSBGQUlMRUQgJiYgdGVzdCAtZiAkZGlyL3NoYXIgXAorICAgICAmJiAoJGRpci9zaGFyIC0tcHJpbnQtdGV4dC1kb21haW4tZGlyID4vZGV2L251bGwgMj4mMSkKKyAgdGhlbgorICAgIGxvY2FsZV9kaXI9YCRkaXIvc2hhciAtLXByaW50LXRleHQtZG9tYWluLWRpcmAKKyAgZmkKK2RvbmUKK0lGUz0iJHNhdmVfSUZTIgoraWYgdGVzdCAiJGxvY2FsZV9kaXIiID0gRkFJTEVEIHx8IHRlc3QgIiRnZXR0ZXh0X2RpciIgPSBGQUlMRUQKK3RoZW4KKyAgZWNobz1lY2hvCitlbHNlCisgIFRFWFRET01BSU5ESVI9JGxvY2FsZV9kaXIKKyAgZXhwb3J0IFRFWFRET01BSU5ESVIKKyAgVEVYVERPTUFJTj1zaGFydXRpbHMKKyAgZXhwb3J0IFRFWFRET01BSU4KKyAgZWNobz0iJGdldHRleHRfZGlyL2dldHRleHQgLXMiCitmaQoraWYgdG91Y2ggLWFtIC10IDIwMDExMjMxMjM1OS41OSAkJC50b3VjaCA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1mIDIwMDExMjMxMjM1OS41OSAtYSAtZiAkJC50b3VjaDsgdGhlbgorICBzaGFyX3RvdWNoPSd0b3VjaCAtYW0gLXQgJDEkMiQzJDQkNSQ2LiQ3ICIkOCInCitlbGlmIHRvdWNoIC1hbSAxMjMxMjM1OTIwMDEuNTkgJCQudG91Y2ggPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZiAxMjMxMjM1OTIwMDEuNTkgLWEgISAtZiAxMjMxMjM1OTIwMDEuNSAtYSAtZiAkJC50b3VjaDsgdGhlbgorICBzaGFyX3RvdWNoPSd0b3VjaCAtYW0gJDMkNCQ1JDYkMSQyLiQ3ICIkOCInCitlbGlmIHRvdWNoIC1hbSAxMjMxMjM1OTAxICQkLnRvdWNoID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWYgMTIzMTIzNTkwMSAtYSAtZiAkJC50b3VjaDsgdGhlbgorICBzaGFyX3RvdWNoPSd0b3VjaCAtYW0gJDMkNCQ1JDYkMiAiJDgiJworZWxzZQorICBzaGFyX3RvdWNoPToKKyAgZWNobworICAkZWNobyAnV0FSTklORzogbm90IHJlc3RvcmluZyB0aW1lc3RhbXBzLiAgQ29uc2lkZXIgZ2V0dGluZyBhbmQnCisgICRlY2hvICJpbnN0YWxsaW5nIEdOVSBcYHRvdWNoJywgZGlzdHJpYnV0ZWQgaW4gR05VIEZpbGUgVXRpbGl0aWVzLi4uIgorICBlY2hvCitmaQorcm0gLWYgMjAwMTEyMzEyMzU5LjU5IDEyMzEyMzU5MjAwMS41OSAxMjMxMjM1OTIwMDEuNSAxMjMxMjM1OTAxICQkLnRvdWNoCisjCitpZiBta2RpciBfc2gxNzU4MTsgdGhlbgorICAkZWNobyAneCAtJyAnY3JlYXRpbmcgbG9jayBkaXJlY3RvcnknCitlbHNlCisgICRlY2hvICdmYWlsZWQgdG8gY3JlYXRlIGxvY2sgZGlyZWN0b3J5JworICBleGl0IDEKK2ZpCisjID09PT09PT09PT09PT0gaXAybWtkZXYgPT09PT09PT09PT09PT0KK2lmIHRlc3QgLWYgJ2lwMm1rZGV2JyAmJiB0ZXN0ICIkZmlyc3RfcGFyYW0iICE9IC1jOyB0aGVuCisgICRlY2hvICd4IC0nIFNLSVBQSU5HICdpcDJta2RldicgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnaXAybWtkZXYnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ2lwMm1rZGV2JyAmJgorIyEvYmluL3NoIC0KKyMKKyMJaXAybWtkZXYKKyMKKyMJTWFrZSBvciByZW1vdmUgZGV2aWNlcyBhcyBuZWVkZWQgZm9yIENvbXB1dG9uZSBJbnRlbGxpcG9ydCBkcml2ZXJzCisjCisjCUZpcnN0IHJ1bGUhICBJZiB0aGUgZGV2IGZpbGUgZXhpc3RzIGFuZCB5b3UgbmVlZCBpdCwgZG9uJ3QgbWVzcworIwl3aXRoIGl0LiAgVGhhdCBwcmV2ZW50cyB1cyBmcm9tIHNjcmV3aW5nIHVwIG9wZW4gdHR5cywgb3duZXJzaGlwCisjCWFuZCBwZXJtaXNzaW9ucyBvbiBhIHJ1bm5pbmcgc3lzdGVtIQorIworIwlUaGlzIHNjcmlwdCB3aWxsIE5PVCByZW1vdmUgZGV2aWNlcyB0aGF0IG5vIGxvbmdlciBleGlzdCBpZiB0aGVpcgorIwlib2FyZCBvciBpbnRlcmZhY2UgYm94IGhhcyBiZWVuIHJlbW92ZWQuICBJZiB5b3Ugd2FudCB0byBnZXQgcmlkCisjCW9mIHRoZW0sIHlvdSBjYW4gbWFudWFsbHkgZG8gYW4gInJtIC1mIC9kZXYvdHR5RiogL2Rldi9jdWFmKiIKKyMJYmVmb3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQuICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpbGwgdGhlbiByZWNyZWF0ZQorIwlhbGwgdGhlIHZhbGlkIGRldmljZXMuCisjCisjCU1pY2hhZWwgSC4gV2FyZmllbGQKKyMJL1wvXHw9bWh3PXxcL1wvCisjCW1od0B3aXR0c2VuZC5jb20KKyMKKyMJVXBkYXRlZCAxMC8yOS8yMDAwIGZvciB2ZXJzaW9uIDEuMi4xMyBuYW1pbmcgY29udmVudGlvbgorIwkJdW5kZXIgZGV2ZnMuCS9cL1x8PW1odz18XC9cLworIworIwlVcGRhdGVkIDAzLzA5LzIwMDAgZm9yIGRldmZzIHN1cHBvcnQgaW4gaXAyIGRyaXZlcnMuIC9cL1x8PW1odz18XC9cLworIworWAoraWYgdGVzdCAtZCAvZGV2L2lwMiA7IHRoZW4KKyMJVGhpcyBpcyBkZXZmcyBtb2RlLi4uICBXZSBkb24ndCBkbyBhbnl0aGluZyBleGNlcHQgY3JlYXRlIHN5bWxpbmtzCisjCWZyb20gdGhlIHJlYWwgZGV2aWNlcyB0byB0aGUgb2xkIG5hbWVzIQorWAljZCAvZGV2CitYCWVjaG8gIkNyZWF0aW5nIHN5bWJvbGljIGxpbmtzIHRvIGRldmZzIGRldmljZXMiCitYCWZvciBpIGluIGBscyBpcDJgIDsgZG8KK1gJCWlmIHRlc3QgISAtTCBpcDIkaSA7IHRoZW4KK1gJCQkjIFJlbW92ZSBpdCBpbmNhc2UgaXQgd2Fzbid0IGEgc3ltbGluayAob2xkIGRldmljZSkKK1gJCQlybSAtZiBpcDIkaQorWAkJCWxuIC1zIGlwMi8kaSBpcDIkaQorWAkJZmkKK1gJZG9uZQorWAlmb3IgaSBpbiBgKCBjZCB0dHMgOyBscyBGKiApYCA7IGRvCitYCQlpZiB0ZXN0ICEgLUwgdHR5JGkgOyB0aGVuCitYCQkJIyBSZW1vdmUgaXQgaW5jYXNlIGl0IHdhc24ndCBhIHN5bWxpbmsgKG9sZCBkZXZpY2UpCitYCQkJcm0gLWYgdHR5JGkKK1gJCQlsbiAtcyB0dHMvJGkgdHR5JGkKK1gJCWZpCitYCWRvbmUKK1gJZm9yIGkgaW4gYCggY2QgY3VhIDsgbHMgRiogKWAgOyBkbworWAkJREVWTlVNQkVSPWBleHByICRpIDogJ0ZcKC4qXCknYAorWAkJaWYgdGVzdCAhIC1MIGN1ZiRERVZOVU1CRVIgOyB0aGVuCitYCQkJIyBSZW1vdmUgaXQgaW5jYXNlIGl0IHdhc24ndCBhIHN5bWxpbmsgKG9sZCBkZXZpY2UpCitYCQkJcm0gLWYgY3VmJERFVk5VTUJFUgorWAkJCWxuIC1zIGN1YS8kaSBjdWYkREVWTlVNQkVSCitYCQlmaQorWAlkb25lCitYCWV4aXQgMAorZmkKK1gKK2lmIHRlc3QgISAtZiAvcHJvYy90dHkvZHJpdmVycwordGhlbgorWAllY2hvICJcCitVbmFibGUgdG8gY2hlY2sgZHJpdmVyIHN0YXR1cy4KK01ha2Ugc3VyZSBwcm9jIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQuIgorWAorWAlleGl0IDI1NQorZmkKK1gKK2lmIHRlc3QgISAtZiAvcHJvYy90dHkvZHJpdmVyL2lwMgordGhlbgorWAllY2hvICJcCitVbmFibGUgdG8gbG9jYXRlIGlwMiBwcm9jIGZpbGUuCitBdHRlbXB0aW5nIHRvIGxvYWQgZHJpdmVyIgorWAorWAlpZiAvc2Jpbi9pbnNtb2QgaXAyCitYCXRoZW4KK1gJCWlmIHRlc3QgISAtZiAvcHJvYy90dHkvZHJpdmVyL2lwMgorWAkJdGhlbgorWAkJCWVjaG8gIlwKK1VuYWJsZSB0byBsb2NhdGUgaXAyIHByb2MgZmlsZSBhZnRlciBsb2FkaW5nIGRyaXZlci4KK0RyaXZlciBpbml0aWFsaXphdGlvbiBmYWlsdXJlIG9yIGRyaXZlciB2ZXJzaW9uIGVycm9yLgorIgorWAkJZXhpdCAyNTUKK1gJCWZpCitYCWVsc2UKK1gJCWVjaG8gIlVuYWJsZSB0byBsb2FkIGlwMiBkcml2ZXIuIgorWAkJZXhpdCAyNTUKK1gJZmkKK2ZpCitYCisjIE9rLi4uICBTbyB3ZSBnb3QgdGhlIGRyaXZlciBsb2FkZWQgYW5kIHdlIGNhbiBsb2NhdGUgdGhlIHByb2NmcyBmaWxlcy4KKyMgTmV4dCB3ZSBuZWVkIG91ciBtYWpvciBudW1iZXJzLgorWAorVFRZTUFKT1I9YHNlZCAtZSAnL15pcDIvIWQnIC1lICcvXC9kZXZcL3R0LyFkJyAtZSAncy8uKnR0W14gCV0qWyAJXSpcKFswLTldKlwpWyAJXSouKi9cMS8nIDwgL3Byb2MvdHR5L2RyaXZlcnNgCitDVUFNQUpPUj1gc2VkIC1lICcvXmlwMi8hZCcgLWUgJy9cL2RldlwvY3UvIWQnIC1lICdzLy4qY3VbXiAJXSpbIAldKlwoWzAtOV0qXClbIAldKi4qL1wxLycgPCAvcHJvYy90dHkvZHJpdmVyc2AKK0JSRE1BSk9SPWBzZWQgLWUgJy9eRHJpdmVyOiAvIWQnIC1lICdzLy4qSU1ham9yPVwoWzAtOV0qXClbIAldKi4qL1wxLycgPCAvcHJvYy90dHkvZHJpdmVyL2lwMmAKK1gKK2VjaG8gIlwKK1RUWU1BSk9SID0gJFRUWU1BSk9SCitDVUFNQUpPUiA9ICRDVUFNQUpPUgorQlJETUFKT1IgPSAkQlJETUFKT1IKKyIKK1gKKyMgT2suLi4gIE5vdyB3ZSBzaG91bGQga25vdyBvdXIgbWFqb3IgbnVtYmVycywgaWYgYXBwcm9wcmlhdGUuLi4KKyMgTm93IHdlIG5lZWQgb3VyIGJvYXJkcyBhbmQgc3RhcnQgdGhlIGRldmljZSBsb29wcy4KK1gKK2dyZXAgJ15Cb2FyZCBbMC05XTonIC9wcm9jL3R0eS9kcml2ZXIvaXAyIHwgd2hpbGUgcmVhZCB0b2tlbiBudW1iZXIgdHlwZSBhbGx0aGVyZXN0CitkbworWAkjIFRoZSB0ZXN0IGZvciBibGFuayAidHlwZSIgd2lsbCBjYXRjaCB0aGUgc3RhdHMgbGVhZC1pbiBsaW5lcworWAkjIGlmIHRoZXkgZXhpc3QgaW4gdGhlIGZpbGUKK1gJaWYgdGVzdCAiJHR5cGUiID0gInZhY2FudCIgLW8gIiR0eXBlIiA9ICJWYWNhbnQiIC1vICIkdHlwZSIgPSAiIgorWAl0aGVuCitYCQljb250aW51ZQorWAlmaQorWAorWAlCT0FSRE5PPWBleHByICIkbnVtYmVyIiA6ICdcKFswLTldXCk6J2AKK1gJUE9SVFM9YGV4cHIgIiRhbGx0aGVyZXN0IiA6ICcuKnBvcnRzPVwoWzAtOV0qXCknIHwgdHIgJywnICcgJ2AKK1gJTUlOT1JTPWBleHByICIkYWxsdGhlcmVzdCIgOiAnLiptaW5vcnM9XChbMC05LF0qXCknIHwgdHIgJywnICcgJ2AKK1gKK1gJaWYgdGVzdCAiJEJPQVJETk8iID0gIiIgLW8gIiRQT1JUUyIgPSAiIgorWAl0aGVuCisjCVRoaXMgbWF5IGJlIGEgYnVnLiAgV2Ugc2hvdWxkIGF0IGxlYXN0IGdldCB0aGlzIG11Y2ggaW5mb3JtYXRpb24KK1gJCWVjaG8gIlVuYWJsZSB0byBwcm9jZXNzIGJvYXJkIGxpbmUiCitYCQljb250aW51ZQorWAlmaQorWAorWAlpZiB0ZXN0ICIkTUlOT1JTIiA9ICIiCitYCXRoZW4KKyMJU2lsZW50bHkgc2tpcCB0aGlzIG9uZS4gIFRoaXMgYm9hcmQgc2VlbXMgdG8gaGF2ZSBubyBib3hlcworWAkJY29udGludWUKK1gJZmkKK1gKK1gJZWNobyAiYm9hcmQgJEJPQVJETk86ICR0eXBlIHBvcnRzID0gJFBPUlRTOyBwb3J0IG51bWJlcnMgPSAkTUlOT1JTIgorWAorWAlpZiB0ZXN0ICIkQlJETUFKT1IiICE9ICIiCitYCXRoZW4KK1gJCUJSRE1JTk9SPWBleHByICRCT0FSRE5PIFwqIDRgCitYCQlTVFNNSU5PUj1gZXhwciAkQlJETUlOT1IgKyAxYAorWAkJaWYgdGVzdCAhIC1jIC9kZXYvaXAyaXBsJEJPQVJETk8gOyB0aGVuCitYCQkJbWtub2QgL2Rldi9pcDJpcGwkQk9BUkROTyBjICRCUkRNQUpPUiAkQlJETUlOT1IKK1gJCWZpCitYCQlpZiB0ZXN0ICEgLWMgL2Rldi9pcDJzdGF0JEJPQVJETk8gOyB0aGVuCitYCQkJbWtub2QgL2Rldi9pcDJzdGF0JEJPQVJETk8gYyAkQlJETUFKT1IgJFNUU01JTk9SCitYCQlmaQorWAlmaQorWAorWAlpZiB0ZXN0ICIkVFRZTUFKT1IiICE9ICIiCitYCXRoZW4KK1gJCVBPUlROTz0kQk9BUkRCQVNFCitYCitYCQlmb3IgUE9SVE5PIGluICRNSU5PUlMKK1gJCWRvCitYCQkJaWYgdGVzdCAhIC1jIC9kZXYvdHR5RiRQT1JUTk8gOyB0aGVuCitYCQkJCSMgV2UgZ290IHRoZSBoYXJkd2FyZSBidXQgbm8gZGV2aWNlIC0gbWFrZSBpdAorWAkJCQlta25vZCAvZGV2L3R0eUYkUE9SVE5PIGMgJFRUWU1BSk9SICRQT1JUTk8KK1gJCQlmaQkKK1gJCWRvbmUKK1gJZmkKK1gKK1gJaWYgdGVzdCAiJENVQU1BSk9SIiAhPSAiIgorWAl0aGVuCitYCQlQT1JUTk89JEJPQVJEQkFTRQorWAorWAkJZm9yIFBPUlROTyBpbiAkTUlOT1JTCitYCQlkbworWAkJCWlmIHRlc3QgISAtYyAvZGV2L2N1ZiRQT1JUTk8gOyB0aGVuCitYCQkJCSMgV2UgZ290IHRoZSBoYXJkd2FyZSBidXQgbm8gZGV2aWNlIC0gbWFrZSBpdAorWAkJCQlta25vZCAvZGV2L2N1ZiRQT1JUTk8gYyAkQ1VBTUFKT1IgJFBPUlROTworWAkJCWZpCQorWAkJZG9uZQorWAlmaQorZG9uZQorWAorWGV4aXQgMAorU0hBUl9FT0YKKyAgKHNldCAyMCAwMSAxMCAyOSAxMCAzMiAwMSAnaXAybWtkZXYnOyBldmFsICIkc2hhcl90b3VjaCIpICYmCisgIGNobW9kIDA3NTUgJ2lwMm1rZGV2JyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ2lwMm1rZGV2JyAnZmFpbGVkJworICBpZiAoIG1kNXN1bSAtLWhlbHAgMj4mMSB8IGdyZXAgJ3NhZ2U6IG1kNXN1bSBcWycgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiAoIG1kNXN1bSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgLXYgJ3RleHR1dGlscyAxLjEyJyApID4vZGV2L251bGw7IHRoZW4KKyAgICBtZDVzdW0gLWMgPDwgU0hBUl9FT0YgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICB8fCAkZWNobyAnaXAybWtkZXY6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKK2NiNTcxNzEzNDUwOWYzOGJhZDlmZGU2YjFmNzliNGE0ICBpcDJta2RldgorU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdpcDJta2RldidgIgorICAgIHRlc3QgNDI1MSAtZXEgIiRzaGFyX2NvdW50IiB8fAorICAgICRlY2hvICdpcDJta2RldjonICdvcmlnaW5hbCBzaXplJyAnNDI1MSwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorcm0gLWZyIF9zaDE3NTgxCitleGl0IDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3BxYXJyYXkudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHFhcnJheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxNTRlMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3BxYXJyYXkudHh0CkBAIC0wLDAgKzEsOTMgQEAKK1RoaXMgZHJpdmVyIGlzIGZvciBDb21wYXEncyBTTUFSVDIgSW50ZWxsaWdlbnQgRGlzayBBcnJheSBDb250cm9sbGVycy4KKworU3VwcG9ydGVkIENhcmRzOgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjYXJkczoKKworCSogU01BUlQgKEVJU0EpCisJKiBTTUFSVC0yL0UgKEVJU0EpCisJKiBTTUFSVC0yL1AKKwkqIFNNQVJULTJESAorCSogU01BUlQtMlNMCisJKiBTTUFSVC0yMjEKKwkqIFNNQVJULTMxMDBFUworCSogU01BUlQtMzIwMAorCSogSW50ZWdyYXRlZCBTbWFydCBBcnJheSBDb250cm9sbGVyCisJKiBTQSA0MjAwCisJKiBTQSA0MjUwRVMKKwkqIFNBIDQzMQorCSogUkFJRCBMQzIgQ29udHJvbGxlcgorCitJdCBzaG91bGQgYWxzbyB3b3JrIHdpdGggc29tZSByZWFsbHkgb2xkIERpc2sgYXJyYXkgYWRhcHRlcnMsIGJ1dCBJIGFtCit1bmFibGUgdG8gdGVzdCBhZ2FpbnN0IHRoZXNlIGNhcmRzOgorCisJKiBJREEKKwkqIElEQS0yCisJKiBJQUVTCisKKworRUlTQSBDb250cm9sbGVyczoKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIHVzZSBhbiBFSVNBIGNvbnRyb2xsZXIgeW91J2xsIGhhdmUgdG8gc3VwcGx5IHNvbWUKK21vZHByb2JlL2xpbG8gcGFyYW1ldGVycy4gIElmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBtdXN0CitnaXZlIGl0IHRoZSBjb250cm9sbGVyJ3MgSU8gcG9ydCBhZGRyZXNzIGF0IGJvb3QgdGltZSAoaXQgaXMgbm90CituZWNlc3NhcnkgdG8gc3BlY2lmeSB0aGUgSVJRKS4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIHR3byBTTUFSVC0yL0UKK2NvbnRyb2xsZXJzLCBpbiBFSVNBIHNsb3RzIDEgYW5kIDIgeW91J2QgZ2l2ZSBpdCBhIGJvb3QgYXJndW1lbnQgbGlrZQordGhpczoKKworCXNtYXJ0Mj0weDEwMDAsMHgyMDAwCisKK0lmIHlvdSB3ZXJlIGxvYWRpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91J2QgZ2l2ZSBsb2FkIGl0IGxpa2UgdGhpczoKKworCW1vZHByb2JlIGNwcWFycmF5IGVpc2E9MHgxMDAwLDB4MjAwMAorCitZb3UgY2FuIHVzZSBFSVNBIGFuZCBQQ0kgYWRhcHRlcnMgYXQgdGhlIHNhbWUgdGltZS4KKworCitEZXZpY2UgTmFtaW5nOgorLS0tLS0tLS0tLS0tLS0KKworWW91IG5lZWQgc29tZSBlbnRyaWVzIGluIC9kZXYgZm9yIHRoZSBpZGEgZGV2aWNlLiAgTUFLRURFViBpbiB0aGUgL2RldgorZGlyZWN0b3J5IGNhbiBtYWtlIGRldmljZSBub2RlcyBmb3IgeW91IGF1dG9tYXRpY2FsbHkuICBUaGUgZGV2aWNlIHNldHVwIGlzCithcyBmb2xsb3dzOgorCitNYWpvciBudW1iZXJzOgorCTcyCWlkYTAKKwk3MwlpZGExCisJNzQJaWRhMgorCTc1CWlkYTMKKwk3NglpZGE0CisJNzcJaWRhNQorCTc4CWlkYTYKKwk3OQlpZGE3CisKK01pbm9yIG51bWJlcnM6CisgICAgICAgIGI3IGI2IGI1IGI0IGIzIGIyIGIxIGIwCisgICAgICAgIHwtLS0tKy0tLS18IHwtLS0tKy0tLS18CisgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgICAgICAgIHwgICAgICAgICAgICstLS0tLS0tLSBQYXJ0aXRpb24gSUQgKDA9d2hvbGVkZXYsIDEtMTUgcGFydGl0aW9uKQorICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9naWNhbCBWb2x1bWUgbnVtYmVyCisKK1RoZSBkZXZpY2UgbmFtaW5nIHNjaGVtZSBpczoKKy9kZXYvaWRhL2MwZDAJCUNvbnRyb2xsZXIgMCwgZGlzayAwLCB3aG9sZSBkZXZpY2UKKy9kZXYvaWRhL2MwZDBwMQkJQ29udHJvbGxlciAwLCBkaXNrIDAsIHBhcnRpdGlvbiAxCisvZGV2L2lkYS9jMGQwcDIJCUNvbnRyb2xsZXIgMCwgZGlzayAwLCBwYXJ0aXRpb24gMgorL2Rldi9pZGEvYzBkMHAzCQlDb250cm9sbGVyIDAsIGRpc2sgMCwgcGFydGl0aW9uIDMKKworL2Rldi9pZGEvYzFkMQkJQ29udHJvbGxlciAxLCBkaXNrIDEsIHdob2xlIGRldmljZQorL2Rldi9pZGEvYzFkMXAxCQlDb250cm9sbGVyIDEsIGRpc2sgMSwgcGFydGl0aW9uIDEKKy9kZXYvaWRhL2MxZDFwMgkJQ29udHJvbGxlciAxLCBkaXNrIDEsIHBhcnRpdGlvbiAyCisvZGV2L2lkYS9jMWQxcDMJCUNvbnRyb2xsZXIgMSwgZGlzayAxLCBwYXJ0aXRpb24gMworCisKK0NoYW5nZWxvZzoKKz09PT09PT09PT0KKworMTAtMjgtMjAwNCA6CUdlbmVyYWwgY2xlYW51cCwgc3ludGF4IGZpeGVzIGZvciBpbi1rZXJuZWwgZHJpdmVyIHZlcnNpb24uCisJCUphbWVzIE5lbHNvbiA8amFtZXM0NzY1QGdtYWlsLmNvbT4KKworCisxOTk5IDoJCU9yaWdpbmFsIERvY3VtZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2FtZC1wb3dlcm5vdy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2FtZC1wb3dlcm5vdy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0ZGExNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvYW1kLXBvd2Vybm93LnR4dApAQCAtMCwwICsxLDM4IEBACisKK1Bvd2VyTm93ISBhbmQgQ29vbCduJ1F1aWV0IGFyZSBBTUQgbmFtZXMgZm9yIGZyZXF1ZW5jeQorbWFuYWdlbWVudCBjYXBhYmlsaXRpZXMgaW4gQU1EIHByb2Nlc3NvcnMuIEFzIHRoZSBoYXJkd2FyZQoraW1wbGVtZW50YXRpb24gY2hhbmdlcyBpbiBuZXcgZ2VuZXJhdGlvbnMgb2YgdGhlIHByb2Nlc3NvcnMsCit0aGVyZSBpcyBhIGRpZmZlcmVudCBjcHUtZnJlcSBkcml2ZXIgZm9yIGVhY2ggZ2VuZXJhdGlvbi4KKworTm90ZSB0aGF0IHRoZSBkcml2ZXIncyB3aWxsIG5vdCBsb2FkIG9uIHRoZSAid3JvbmciIGhhcmR3YXJlLAorc28gaXQgaXMgc2FmZSB0byB0cnkgZWFjaCBkcml2ZXIgaW4gdHVybiB3aGVuIGluIGRvdWJ0IGFzIHRvCit3aGljaCBpcyB0aGUgY29ycmVjdCBkcml2ZXIuCisKK05vdGUgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSB0byBjaGFuZ2UgZnJlcXVlbmN5IChhbmQgdm9sdGFnZSkKK2lzIG5vdCBhdmFpbGFibGUgaW4gYWxsIHByb2Nlc3NvcnMuIFRoZSBkcml2ZXJzIHdpbGwgcmVmdXNlCit0byBsb2FkIG9uIHByb2Nlc3NvcnMgd2l0aG91dCB0aGlzIGNhcGFiaWxpdHkuIFRoZSBjYXBhYmlsaXR5CitpcyBkZXRlY3RlZCB3aXRoIHRoZSBjcHVpZCBpbnN0cnVjdGlvbi4KKworVGhlIGRyaXZlcnMgdXNlIEJJT1Mgc3VwcGxpZWQgdGFibGVzIHRvIG9idGFpbiBmcmVxdWVuY3kgYW5kCit2b2x0YWdlIGluZm9ybWF0aW9uIGFwcHJvcHJpYXRlIGZvciBhIHBhcnRpY3VsYXIgcGxhdGZvcm0uCitGcmVxdWVuY3kgdHJhbnNpdGlvbnMgd2lsbCBiZSB1bmF2YWlsYWJsZSBpZiB0aGUgQklPUyBkb2VzCitub3Qgc3VwcGx5IHRoZXNlIHRhYmxlcy4KKworNnRoIEdlbmVyYXRpb246IHBvd2Vybm93LWs2CisKKzd0aCBHZW5lcmF0aW9uOiBwb3dlcm5vdy1rNzogQXRobG9uLCBEdXJvbiwgR2VvZGUuCisKKzh0aCBHZW5lcmF0aW9uOiBwb3dlcm5vdy1rODogQXRobG9uLCBBdGhsb24gNjQsIE9wdGVyb24sIFNlbXByb24uCitEb2N1bWVudGF0aW9uIG9uIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiA4dGggZ2VuZXJhdGlvbiBwcm9jZXNzb3JzCitpcyBhdmFpbGFibGUgaW4gdGhlICJCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUiLCBwdWJsaWNhdGlvbgorMjYwOTQsIGluIGNoYXB0ZXIgOSwgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIHd3dy5hbWQuY29tLiAKKworQklPUyBzdXBwbGllZCBkYXRhLCBmb3IgcG93ZXJub3ctazcgYW5kIGZvciBwb3dlcm5vdy1rOCwgbWF5IGJlCitmcm9tIGVpdGhlciB0aGUgUFNCIHRhYmxlIG9yIGZyb20gQUNQSSBvYmplY3RzLiBUaGUgQUNQSSBzdXBwb3J0CitpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUga2VybmVsIGNvbmZpZyBzZXRzIENPTkZJR19BQ1BJX1BST0NFU1NPUi4KK1RoZSBwb3dlcm5vdy1rOCBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHVzZSBBQ1BJIGlmIHNvIGNvbmZpZ3VyZWQsCithbmQgZmFsbCBiYWNrIHRvIFBTVCBpZiB0aGF0IGZhaWxzLgorVGhlIHBvd2Vybm93LWs3IGRyaXZlciB3aWxsIHRyeSB0byB1c2UgdGhlIFBTQiBzdXBwb3J0IGZpcnN0LCBhbmQKK2ZhbGwgYmFjayB0byBBQ1BJIGlmIHRoZSBQU0Igc3VwcG9ydCBmYWlscy4gQSBtb2R1bGUgcGFyYW1ldGVyLAorYWNwaV9mb3JjZSwgaXMgcHJvdmlkZWQgdG8gZm9yY2UgQUNQSSBzdXBwb3J0IHRvIGJlIHVzZWQgaW5zdGVhZCAKK29mIFBTQiBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY29yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliM2Y5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY29yZS50eHQKQEAgLTAsMCArMSw5OCBAQAorICAgICBDUFUgZnJlcXVlbmN5IGFuZCB2b2x0YWdlIHNjYWxpbmcgY29kZSBpbiB0aGUgTGludXgoVE0pIGtlcm5lbAorCisKKwkJICAgICAgICAgTCBpIG4gdSB4ICAgIEMgUCBVIEYgciBlIHEKKworCQkJICBDIFAgVSBGIHIgZSBxICAgIEMgbyByIGUKKworCisJCSAgICBEb21pbmlrIEJyb2Rvd3NraSAgPGxpbnV4QGJyb2RvLmRlPgorCQkgICAgIERhdmlkIEtpbWRvbiA8ZHdoZWRvbkBkZWJpYW4ub3JnPgorCisKKworICAgQ2xvY2sgc2NhbGluZyBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgY2xvY2sgc3BlZWQgb2YgdGhlIENQVXMgb24gdGhlCisgICAgZmx5LiBUaGlzIGlzIGEgbmljZSBtZXRob2QgdG8gc2F2ZSBiYXR0ZXJ5IHBvd2VyLCBiZWNhdXNlIHRoZSBsb3dlcgorICAgICAgICAgICAgdGhlIGNsb2NrIHNwZWVkLCB0aGUgbGVzcyBwb3dlciB0aGUgQ1BVIGNvbnN1bWVzLgorCisKK0NvbnRlbnRzOgorLS0tLS0tLS0tCisxLiAgQ1BVRnJlcSBjb3JlIGFuZCBpbnRlcmZhY2VzCisyLiAgQ1BVRnJlcSBub3RpZmllcnMKKworMS4gR2VuZXJhbCBJbmZvcm1hdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIENQVUZyZXEgY29yZSBjb2RlIGlzIGxvY2F0ZWQgaW4gbGludXgva2VybmVsL2NwdWZyZXEuYy4gVGhpcworY3B1ZnJlcSBjb2RlIG9mZmVycyBhIHN0YW5kYXJkaXplZCBpbnRlcmZhY2UgZm9yIHRoZSBDUFVGcmVxCithcmNoaXRlY3R1cmUgZHJpdmVycyAodGhvc2UgcGllY2VzIG9mIGNvZGUgdGhhdCBkbyBhY3R1YWwKK2ZyZXF1ZW5jeSB0cmFuc2l0aW9ucyksIGFzIHdlbGwgYXMgdG8gIm5vdGlmaWVycyIuIFRoZXNlIGFyZSBkZXZpY2UKK2RyaXZlcnMgb3Igb3RoZXIgcGFydCBvZiB0aGUga2VybmVsIHRoYXQgbmVlZCB0byBiZSBpbmZvcm1lZCBvZgorcG9saWN5IGNoYW5nZXMgKGV4LiB0aGVybWFsIG1vZHVsZXMgbGlrZSBBQ1BJKSBvciBvZiBhbGwKK2ZyZXF1ZW5jeSBjaGFuZ2VzIChleC4gdGltaW5nIGNvZGUpIG9yIGV2ZW4gbmVlZCB0byBmb3JjZSBjZXJ0YWluCitzcGVlZCBsaW1pdHMgKGxpa2UgTENEIGRyaXZlcnMgb24gQVJNIGFyY2hpdGVjdHVyZSkuIEFkZGl0aW9uYWxseSwgdGhlCitrZXJuZWwgImNvbnN0YW50IiBsb29wc19wZXJfamlmZnkgaXMgdXBkYXRlZCBvbiBmcmVxdWVuY3kgY2hhbmdlcworaGVyZS4KKworUmVmZXJlbmNlIGNvdW50aW5nIGlzIGRvbmUgYnkgY3B1ZnJlcV9nZXRfY3B1IGFuZCBjcHVmcmVxX3B1dF9jcHUsCit3aGljaCBtYWtlIHN1cmUgdGhhdCB0aGUgY3B1ZnJlcSBwcm9jZXNzb3IgZHJpdmVyIGlzIGNvcnJlY3RseQorcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb3JlLCBhbmQgd2lsbCBub3QgYmUgdW5sb2FkZWQgdW50aWwKK2NwdWZyZXFfcHV0X2NwdSBpcyBjYWxsZWQuCisKKzIuIENQVUZyZXEgbm90aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitDUFVGcmVxIG5vdGlmaWVycyBjb25mb3JtIHRvIHRoZSBzdGFuZGFyZCBrZXJuZWwgbm90aWZpZXIgaW50ZXJmYWNlLgorU2VlIGxpbnV4L2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCBmb3IgZGV0YWlscyBvbiBub3RpZmllcnMuCisKK1RoZXJlIGFyZSB0d28gZGlmZmVyZW50IENQVUZyZXEgbm90aWZpZXJzIC0gcG9saWN5IG5vdGlmaWVycyBhbmQKK3RyYW5zaXRpb24gbm90aWZpZXJzLgorCisKKzIuMSBDUFVGcmVxIHBvbGljeSBub3RpZmllcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIG5vdGlmaWVkIHdoZW4gYSBuZXcgcG9saWN5IGlzIGludGVuZGVkIHRvIGJlIHNldC4gRWFjaAorQ1BVRnJlcSBwb2xpY3kgbm90aWZpZXIgaXMgY2FsbGVkIHRocmVlIHRpbWVzIGZvciBhIHBvbGljeSB0cmFuc2l0aW9uOgorCisxLikgRHVyaW5nIENQVUZSRVFfQURKVVNUIGFsbCBDUFVGcmVxIG5vdGlmaWVycyBtYXkgY2hhbmdlIHRoZSBsaW1pdCBpZgorICAgIHRoZXkgc2VlIGEgbmVlZCBmb3IgdGhpcyAtIG1heSBpdCBiZSB0aGVybWFsIGNvbnNpZGVyYXRpb25zIG9yCisgICAgaGFyZHdhcmUgbGltaXRhdGlvbnMuCisKKzIuKSBEdXJpbmcgQ1BVRlJFUV9JTkNPTVBBVElCTEUgb25seSBjaGFuZ2VzIG1heSBiZSBkb25lIGluIG9yZGVyIHRvIGF2b2lkCisgICAgaGFyZHdhcmUgZmFpbHVyZS4KKworMy4pIEFuZCBkdXJpbmcgQ1BVRlJFUV9OT1RJRlkgYWxsIG5vdGlmaWVycyBhcmUgaW5mb3JtZWQgb2YgdGhlIG5ldyBwb2xpY3kKKyAgIC0gaWYgdHdvIGhhcmR3YXJlIGRyaXZlcnMgZmFpbGVkIHRvIGFncmVlIG9uIGEgbmV3IHBvbGljeSBiZWZvcmUgdGhpcworICAgc3RhZ2UsIHRoZSBpbmNvbXBhdGlibGUgaGFyZHdhcmUgc2hhbGwgYmUgc2h1dCBkb3duLCBhbmQgdGhlIHVzZXIKKyAgIGluZm9ybWVkIG9mIHRoaXMuCisKK1RoZSBwaGFzZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgbm90aWZpZXIuCisKK1RoZSB0aGlyZCBhcmd1bWVudCwgYSB2b2lkICpwb2ludGVyLCBwb2ludHMgdG8gYSBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kKK2NvbnNpc3Rpbmcgb2YgZml2ZSB2YWx1ZXM6IGNwdSwgbWluLCBtYXgsIHBvbGljeSBhbmQgbWF4X2NwdV9mcmVxLiBtaW4gCithbmQgbWF4IGFyZSB0aGUgbG93ZXIgYW5kIHVwcGVyIGZyZXF1ZW5jaWVzIChpbiBrSHopIG9mIHRoZSBuZXcKK3BvbGljeSwgcG9saWN5IHRoZSBuZXcgcG9saWN5LCBjcHUgdGhlIG51bWJlciBvZiB0aGUgYWZmZWN0ZWQgQ1BVOyBhbmQgCittYXhfY3B1X2ZyZXEgdGhlIG1heGltdW0gc3VwcG9ydGVkIENQVSBmcmVxdWVuY3kuIFRoaXMgdmFsdWUgaXMgZ2l2ZW4gCitmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LgorCisKKzIuMiBDUFVGcmVxIHRyYW5zaXRpb24gbm90aWZpZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgbm90aWZpZWQgdHdpY2Ugd2hlbiB0aGUgQ1BVZnJlcSBkcml2ZXIgc3dpdGNoZXMgdGhlIENQVSBjb3JlCitmcmVxdWVuY3kgYW5kIHRoaXMgY2hhbmdlIGhhcyBhbnkgZXh0ZXJuYWwgaW1wbGljYXRpb25zLgorCitUaGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgcGhhc2UgLSBDUFVGUkVRX1BSRUNIQU5HRSBvcgorQ1BVRlJFUV9QT1NUQ0hBTkdFLgorCitUaGUgdGhpcmQgYXJndW1lbnQgaXMgYSBzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyB3aXRoIHRoZSBmb2xsb3dpbmcKK3ZhbHVlczoKK2NwdQktIG51bWJlciBvZiB0aGUgYWZmZWN0ZWQgQ1BVCitvbGQJLSBvbGQgZnJlcXVlbmN5CituZXcJLSBuZXcgZnJlcXVlbmN5CisKK0lmIHRoZSBjcHVmcmVxIGNvcmUgZGV0ZWN0cyB0aGUgZnJlcXVlbmN5IGhhcyBjaGFuZ2VkIHdoaWxlIHRoZSBzeXN0ZW0KK3dhcyBzdXNwZW5kZWQsIHRoZXNlIG5vdGlmaWVycyBhcmUgY2FsbGVkIHdpdGggQ1BVRlJFUV9SRVNVTUVDSEFOR0UgYXMKK3NlY29uZCBhcmd1bWVudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY3B1LWRyaXZlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jcHUtZHJpdmVycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjNzQzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY3B1LWRyaXZlcnMudHh0CkBAIC0wLDAgKzEsMjE2IEBACisgICAgIENQVSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2Ugc2NhbGluZyBjb2RlIGluIHRoZSBMaW51eChUTSkga2VybmVsCisKKworCQkgICAgICAgICBMIGkgbiB1IHggICAgQyBQIFUgRiByIGUgcQorCisJCQkgICBDIFAgVSAgIEQgciBpIHYgZSByIHMgCisKKwkJICAgICAgIC0gaW5mb3JtYXRpb24gZm9yIGRldmVsb3BlcnMgLQorCisKKwkJICAgIERvbWluaWsgQnJvZG93c2tpICA8bGludXhAYnJvZG8uZGU+CisKKworCisgICBDbG9jayBzY2FsaW5nIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjbG9jayBzcGVlZCBvZiB0aGUgQ1BVcyBvbiB0aGUKKyAgICBmbHkuIFRoaXMgaXMgYSBuaWNlIG1ldGhvZCB0byBzYXZlIGJhdHRlcnkgcG93ZXIsIGJlY2F1c2UgdGhlIGxvd2VyCisgICAgICAgICAgICB0aGUgY2xvY2sgc3BlZWQsIHRoZSBsZXNzIHBvd2VyIHRoZSBDUFUgY29uc3VtZXMuCisKKworQ29udGVudHM6CistLS0tLS0tLS0KKzEuICAgV2hhdCBUbyBEbz8KKzEuMSAgSW5pdGlhbGl6YXRpb24KKzEuMiAgUGVyLUNQVSBJbml0aWFsaXphdGlvbgorMS4zICB2ZXJpZnkKKzEuNCAgdGFyZ2V0IG9yIHNldHBvbGljeT8KKzEuNSAgdGFyZ2V0CisxLjYgIHNldHBvbGljeQorMi4gICBGcmVxdWVuY3kgVGFibGUgSGVscGVycworCisKKworMS4gV2hhdCBUbyBEbz8KKz09PT09PT09PT09PT09CisKK1NvLCB5b3UganVzdCBnb3QgYSBicmFuZC1uZXcgQ1BVIC8gY2hpcHNldCB3aXRoIGRhdGFzaGVldHMgYW5kIHdhbnQgdG8KK2FkZCBjcHVmcmVxIHN1cHBvcnQgZm9yIHRoaXMgQ1BVIC8gY2hpcHNldD8gR3JlYXQuIEhlcmUgYXJlIHNvbWUgaGludHMKK29uIHdoYXQgaXMgbmVjZXNzYXJ5OgorCisKKzEuMSBJbml0aWFsaXphdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbCwgaW4gYW4gX19pbml0Y2FsbCBsZXZlbCA3IChtb2R1bGVfaW5pdCgpKSBvciBsYXRlcgorZnVuY3Rpb24gY2hlY2sgd2hldGhlciB0aGlzIGtlcm5lbCBydW5zIG9uIHRoZSByaWdodCBDUFUgYW5kIHRoZSByaWdodAorY2hpcHNldC4gSWYgc28sIHJlZ2lzdGVyIGEgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHdpdGggdGhlIENQVWZyZXEgY29yZQordXNpbmcgY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoKQorCitXaGF0IHNoYWxsIHRoaXMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGNvbnRhaW4/IAorCitjcHVmcmVxX2RyaXZlci5uYW1lIC0JCVRoZSBuYW1lIG9mIHRoaXMgZHJpdmVyLgorCitjcHVmcmVxX2RyaXZlci5vd25lciAtCQlUSElTX01PRFVMRTsKKworY3B1ZnJlcV9kcml2ZXIuaW5pdCAtCQlBIHBvaW50ZXIgdG8gdGhlIHBlci1DUFUgaW5pdGlhbGl6YXRpb24gCisJCQkJZnVuY3Rpb24uCisKK2NwdWZyZXFfZHJpdmVyLnZlcmlmeSAtCQlBIHBvaW50ZXIgdG8gYSAidmVyaWZpY2F0aW9uIiBmdW5jdGlvbi4KKworY3B1ZnJlcV9kcml2ZXIuc2V0cG9saWN5IF9vcl8gCitjcHVmcmVxX2RyaXZlci50YXJnZXQgLQkJU2VlIGJlbG93IG9uIHRoZSBkaWZmZXJlbmNlcy4KKworQW5kIG9wdGlvbmFsbHkKKworY3B1ZnJlcV9kcml2ZXIuZXhpdCAtCQlBIHBvaW50ZXIgdG8gYSBwZXItQ1BVIGNsZWFudXAgZnVuY3Rpb24uCisKK2NwdWZyZXFfZHJpdmVyLnJlc3VtZSAtCQlBIHBvaW50ZXIgdG8gYSBwZXItQ1BVIHJlc3VtZSBmdW5jdGlvbgorCQkJCXdoaWNoIGlzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKKwkJCQlhbmQgX2JlZm9yZV8gdGhlIHByZS1zdXNwZW5kIGZyZXF1ZW5jeQorCQkJCWFuZC9vciBwb2xpY3kgaXMgcmVzdG9yZWQgYnkgYSBjYWxsIHRvCisJCQkJLT50YXJnZXQgb3IgLT5zZXRwb2xpY3kuCisKK2NwdWZyZXFfZHJpdmVyLmF0dHIgLQkJQSBwb2ludGVyIHRvIGEgTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YKKwkJCQkic3RydWN0IGZyZXFfYXR0ciIgd2hpY2ggYWxsb3cgdG8KKwkJCQlleHBvcnQgdmFsdWVzIHRvIHN5c2ZzLgorCisKKzEuMiBQZXItQ1BVIEluaXRpYWxpemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuZXZlciBhIG5ldyBDUFUgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZpY2UgbW9kZWwsIG9yIGFmdGVyIHRoZQorY3B1ZnJlcSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiwgdGhlIHBlci1DUFUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gCitjcHVmcmVxX2RyaXZlci5pbml0IGlzIGNhbGxlZC4gSXQgdGFrZXMgYSBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kKKypwb2xpY3kgYXMgYXJndW1lbnQuIFdoYXQgdG8gZG8gbm93PworCitJZiBuZWNlc3NhcnksIGFjdGl2YXRlIHRoZSBDUFVmcmVxIHN1cHBvcnQgb24geW91ciBDUFUuCisKK1RoZW4sIHRoZSBkcml2ZXIgbXVzdCBmaWxsIGluIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCitwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgX2FuZF8KK3BvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSAtCXRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZyZXF1ZW5jeSAKKwkJCQkoaW4ga0h6KSB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgCisJCQkJdGhpcyBDUFUKK3BvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgICB0aGUgdGltZSBpdCB0YWtlcyBvbiB0aGlzIENQVSB0bworCQkJCXN3aXRjaCBiZXR3ZWVuIHR3byBmcmVxdWVuY2llcyAoaWYKKwkJCQlhcHByb3ByaWF0ZSwgZWxzZSBzcGVjaWZ5CisJCQkJQ1BVRlJFUV9FVEVSTkFMKQorCitwb2xpY3ktPmN1cgkJCVRoZSBjdXJyZW50IG9wZXJhdGluZyBmcmVxdWVuY3kgb2YKKwkJCQl0aGlzIENQVSAoaWYgYXBwcm9wcmlhdGUpCitwb2xpY3ktPm1pbiwgCitwb2xpY3ktPm1heCwgCitwb2xpY3ktPnBvbGljeSBhbmQsIGlmIG5lY2Vzc2FyeSwKK3BvbGljeS0+Z292ZXJub3IJCW11c3QgY29udGFpbiB0aGUgImRlZmF1bHQgcG9saWN5IiBmb3IKKwkJCQl0aGlzIENQVS4gQSBmZXcgbW9tZW50cyBsYXRlciwKKwkJCQljcHVmcmVxX2RyaXZlci52ZXJpZnkgYW5kIGVpdGhlcgorCQkJCWNwdWZyZXFfZHJpdmVyLnNldHBvbGljeSBvcgorCQkJCWNwdWZyZXFfZHJpdmVyLnRhcmdldCBpcyBjYWxsZWQgd2l0aAorCQkJCXRoZXNlIHZhbHVlcy4KKworRm9yIHNldHRpbmcgc29tZSBvZiB0aGVzZSB2YWx1ZXMsIHRoZSBmcmVxdWVuY3kgdGFibGUgaGVscGVycyBtaWdodCBiZQoraGVscGZ1bC4gU2VlIHRoZSBzZWN0aW9uIDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlbS4KKworCisxLjMgdmVyaWZ5CistLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgdXNlciBkZWNpZGVzIGEgbmV3IHBvbGljeSAoY29uc2lzdGluZyBvZgorInBvbGljeSxnb3Zlcm5vcixtaW4sbWF4Iikgc2hhbGwgYmUgc2V0LCB0aGlzIHBvbGljeSBtdXN0IGJlIHZhbGlkYXRlZAorc28gdGhhdCBpbmNvbXBhdGlibGUgdmFsdWVzIGNhbiBiZSBjb3JyZWN0ZWQuIEZvciB2ZXJpZnlpbmcgdGhlc2UKK3ZhbHVlcywgYSBmcmVxdWVuY3kgdGFibGUgaGVscGVyIGFuZC9vciB0aGUKK2NwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIHVuc2lnbmVkCitpbnQgbWluX2ZyZXEsIHVuc2lnbmVkIGludCBtYXhfZnJlcSkgZnVuY3Rpb24gbWlnaHQgYmUgaGVscGZ1bC4gU2VlCitzZWN0aW9uIDIgZm9yIGRldGFpbHMgb24gZnJlcXVlbmN5IHRhYmxlIGhlbHBlcnMuCisKK1lvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSB2YWxpZCBmcmVxdWVuY3kgKG9yIG9wZXJhdGluZworcmFuZ2UpIGlzIHdpdGhpbiBwb2xpY3ktPm1pbiBhbmQgcG9saWN5LT5tYXguIElmIG5lY2Vzc2FyeSwgaW5jcmVhc2UKK3BvbGljeS0+bWF4IGZpcnN0LCBhbmQgb25seSBpZiB0aGlzIGlzIG5vIHNvbHV0aW9uLCBkZWNyZWFzZSBwb2xpY3ktPm1pbi4KKworCisxLjQgdGFyZ2V0IG9yIHNldHBvbGljeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBjcHVmcmVxIGRyaXZlcnMgb3IgZXZlbiBtb3N0IGNwdSBmcmVxdWVuY3kgc2NhbGluZyBhbGdvcml0aG1zIAorb25seSBhbGxvdyB0aGUgQ1BVIHRvIGJlIHNldCB0byBvbmUgZnJlcXVlbmN5LiBGb3IgdGhlc2UsIHlvdSB1c2UgdGhlCistPnRhcmdldCBjYWxsLgorCitTb21lIGNwdWZyZXEtY2FwYWJsZSBwcm9jZXNzb3JzIHN3aXRjaCB0aGUgZnJlcXVlbmN5IGJldHdlZW4gY2VydGFpbgorbGltaXRzIG9uIHRoZWlyIG93bi4gVGhlc2Ugc2hhbGwgdXNlIHRoZSAtPnNldHBvbGljeSBjYWxsCisKKworMS40LiB0YXJnZXQKKy0tLS0tLS0tLS0tLS0KKworVGhlIHRhcmdldCBjYWxsIGhhcyB0aHJlZSBhcmd1bWVudHM6IHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAordW5zaWduZWQgaW50IHRhcmdldF9mcmVxdWVuY3ksIHVuc2lnbmVkIGludCByZWxhdGlvbi4KKworVGhlIENQVWZyZXEgZHJpdmVyIG11c3Qgc2V0IHRoZSBuZXcgZnJlcXVlbmN5IHdoZW4gY2FsbGVkIGhlcmUuIFRoZQorYWN0dWFsIGZyZXF1ZW5jeSBtdXN0IGJlIGRldGVybWluZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBydWxlczoKKworLSBrZWVwIGNsb3NlIHRvICJ0YXJnZXRfZnJlcSIKKy0gcG9saWN5LT5taW4gPD0gbmV3X2ZyZXEgPD0gcG9saWN5LT5tYXggKFRISVMgTVVTVCBCRSBWQUxJRCEhISkKKy0gaWYgcmVsYXRpb249PUNQVUZSRVFfUkVMX0wsIHRyeSB0byBzZWxlY3QgYSBuZXdfZnJlcSBoaWdoZXIgdGhhbiBvciBlcXVhbAorICB0YXJnZXRfZnJlcS4gKCJMIGZvciBsb3dlc3QsIGJ1dCBubyBsb3dlciB0aGFuIikKKy0gaWYgcmVsYXRpb249PUNQVUZSRVFfUkVMX0gsIHRyeSB0byBzZWxlY3QgYSBuZXdfZnJlcSBsb3dlciB0aGFuIG9yIGVxdWFsCisgIHRhcmdldF9mcmVxLiAoIkggZm9yIGhpZ2hlc3QsIGJ1dCBubyBoaWdoZXIgdGhhbiIpCisKK0hlcmUgYWdhaW4gdGhlIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXIgbWlnaHQgYXNzaXN0IHlvdSAtIHNlZSBzZWN0aW9uIDMKK2ZvciBkZXRhaWxzLgorCisKKzEuNSBzZXRwb2xpY3kKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2V0cG9saWN5IGNhbGwgb25seSB0YWtlcyBhIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5IGFzCithcmd1bWVudC4gWW91IG5lZWQgdG8gc2V0IHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgaW4tcHJvY2Vzc29yIG9yCitpbi1jaGlwc2V0IGR5bmFtaWMgZnJlcXVlbmN5IHN3aXRjaGluZyB0byBwb2xpY3ktPm1pbiwgdGhlIHVwcGVyIGxpbWl0Cit0byBwb2xpY3ktPm1heCwgYW5kIC1pZiBzdXBwb3J0ZWQtIHNlbGVjdCBhIHBlcmZvcm1hbmNlLW9yaWVudGVkCitzZXR0aW5nIHdoZW4gcG9saWN5LT5wb2xpY3kgaXMgQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UsIGFuZCBhCitwb3dlcnNhdmluZy1vcmllbnRlZCBzZXR0aW5nIHdoZW4gQ1BVRlJFUV9QT0xJQ1lfUE9XRVJTQVZFLiBBbHNvIGNoZWNrCit0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIGFyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisKKworCisyLiBGcmVxdWVuY3kgVGFibGUgSGVscGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgbW9zdCBjcHVmcmVxIHByb2Nlc3NvcnMgb25seSBhbGxvdyBmb3IgYmVpbmcgc2V0IHRvIGEgZmV3IHNwZWNpZmljCitmcmVxdWVuY2llcywgYSAiZnJlcXVlbmN5IHRhYmxlIiB3aXRoIHNvbWUgZnVuY3Rpb25zIG1pZ2h0IGFzc2lzdCBpbgorc29tZSB3b3JrIG9mIHRoZSBwcm9jZXNzb3IgZHJpdmVyLiBTdWNoIGEgImZyZXF1ZW5jeSB0YWJsZSIgY29uc2lzdHMKK29mIGFuIGFycmF5IG9mIHN0cnVjdCBjcHVmcmVxX2ZyZXFfdGFibGUgZW50cmllcywgd2l0aCBhbnkgdmFsdWUgaW4KKyJpbmRleCIgeW91IHdhbnQgdG8gdXNlLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5IGluCisiZnJlcXVlbmN5Ii4gQXQgdGhlIGVuZCBvZiB0aGUgdGFibGUsIHlvdSBuZWVkIHRvIGFkZCBhCitjcHVmcmVxX2ZyZXFfdGFibGUgZW50cnkgd2l0aCBmcmVxdWVuY3kgc2V0IHRvIENQVUZSRVFfVEFCTEVfRU5ELiBBbmQKK2lmIHlvdSB3YW50IHRvIHNraXAgb25lIGVudHJ5IGluIHRoZSB0YWJsZSwgc2V0IHRoZSBmcmVxdWVuY3kgdG8gCitDUFVGUkVRX0VOVFJZX0lOVkFMSUQuIFRoZSBlbnRyaWVzIGRvbid0IG5lZWQgdG8gYmUgaW4gYXNjZW5kaW5nCitvcmRlci4KKworQnkgY2FsbGluZyBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlKTsKK3RoZSBjcHVpbmZvLm1pbl9mcmVxIGFuZCBjcHVpbmZvLm1heF9mcmVxIHZhbHVlcyBhcmUgZGV0ZWN0ZWQsIGFuZAorcG9saWN5LT5taW4gYW5kIHBvbGljeS0+bWF4IGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWVzLiBUaGlzIGlzCitoZWxwZnVsIGZvciB0aGUgcGVyLUNQVSBpbml0aWFsaXphdGlvbiBzdGFnZS4KKworaW50IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSk7Cithc3N1cmVzIHRoYXQgYXQgbGVhc3Qgb25lIHZhbGlkIGZyZXF1ZW5jeSBpcyB3aXRoaW4gcG9saWN5LT5taW4gYW5kCitwb2xpY3ktPm1heCwgYW5kIGFsbCBvdGhlciBjcml0ZXJpYSBhcmUgbWV0LiBUaGlzIGlzIGhlbHBmdWwgZm9yIHRoZQorLT52ZXJpZnkgY2FsbC4KKworaW50IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqaW5kZXgpOworCitpcyB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgdGFibGUgaGVscGVyIGZvciB0aGUgLT50YXJnZXQKK3N0YWdlLiBKdXN0IHBhc3MgdGhlIHZhbHVlcyB0byB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIHVuc2lnbmVkIGludAoraW5kZXggcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBmcmVxdWVuY3kgdGFibGUgZW50cnkgd2hpY2ggY29udGFpbnMKK3RoZSBmcmVxdWVuY3kgdGhlIENQVSBzaGFsbCBiZSBzZXQgdG8uIFBMRUFTRSBOT1RFOiBUaGlzIGlzIG5vdCB0aGUKKyJpbmRleCIgd2hpY2ggaXMgaW4gdGhpcyBjcHVmcmVxX3RhYmxlX2VudHJ5LmluZGV4LCBidXQgaW5zdGVhZAorY3B1ZnJlcV90YWJsZVtpbmRleF0uIFNvLCB0aGUgbmV3IGZyZXF1ZW5jeSBpcworY3B1ZnJlcV90YWJsZVtpbmRleF0uZnJlcXVlbmN5LCBhbmQgdGhlIHZhbHVlIHlvdSBzdG9yZWQgaW50byB0aGUKK2ZyZXF1ZW5jeSB0YWJsZSAiaW5kZXgiIGZpZWxkIGlzCitjcHVmcmVxX3RhYmxlW2luZGV4XS5pbmRleC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jcHVmcmVxLW5mb3JjZTIudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jcHVmcmVxLW5mb3JjZTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODgzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NwdWZyZXEtbmZvcmNlMi50eHQKQEAgLTAsMCArMSwxOSBAQAorCitUaGUgY3B1ZnJlcS1uZm9yY2UyIGRyaXZlciBjaGFuZ2VzIHRoZSBGU0Igb24gblZpZGlhIG5Gb3JjZTIgcGxhdHRmb3Jtcy4KKworVGhpcyB3b3JrcyBiZXR0ZXIgdGhhbiBvbiBvdGhlciBwbGF0dGZvcm1zLCBiZWNhdXNlIHRoZSBGU0Igb2YgdGhlIENQVQorY2FuIGJlIGNvbnRyb2xsZWQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBQQ0kvQUdQIGNsb2NrLgorCitUaGUgbW9kdWxlIGhhcyB0d28gb3B0aW9uczoKKworCWZpZDogCSBtdWx0aXBsaWVyICogMTAgKGZvciBleGFtcGxlIDguNSA9IDg1KQorCW1pbl9mc2I6IG1pbmltdW0gRlNCCisKK0lmIG5vdCBzZXQsIGZpZCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGN1cnJlbnQgQ1BVIHNwZWVkIGFuZCB0aGUgRlNCLgorbWluX2ZzYiBkZWZhdWx0cyB0byBGU0IgYXQgYm9vdCB0aW1lIC0gNTAgTUh6LgorCitJTVBPUlRBTlQ6IFRoZSBhdmFpbGFibGUgcmFuZ2UgaXMgbGltaXRlZCBkb3dud2FyZHMhCisgICAgICAgICAgIEFsc28gdGhlIG1pbmltdW0gYXZhaWxhYmxlIEZTQiBjYW4gZGlmZmVyLCBmb3Igc3lzdGVtcyAKKyAgICAgICAgICAgYm9vdGluZyB3aXRoIDIwMCBNSHosIDE1MCBzaG91bGQgYWx3YXlzIHdvcmsuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NTQ4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2dvdmVybm9ycy50eHQKQEAgLTAsMCArMSwxNTUgQEAKKyAgICAgQ1BVIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nIGNvZGUgaW4gdGhlIExpbnV4KFRNKSBrZXJuZWwKKworCisJCSAgICAgICAgIEwgaSBuIHUgeCAgICBDIFAgVSBGIHIgZSBxCisKKwkJICAgICAgQyBQIFUgRiByIGUgcSAgIEcgbyB2IGUgciBuIG8gciBzCisKKwkJICAgLSBpbmZvcm1hdGlvbiBmb3IgdXNlcnMgYW5kIGRldmVsb3BlcnMgLQorCisKKwkJICAgIERvbWluaWsgQnJvZG93c2tpICA8bGludXhAYnJvZG8uZGU+CisKKworCisgICBDbG9jayBzY2FsaW5nIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjbG9jayBzcGVlZCBvZiB0aGUgQ1BVcyBvbiB0aGUKKyAgICBmbHkuIFRoaXMgaXMgYSBuaWNlIG1ldGhvZCB0byBzYXZlIGJhdHRlcnkgcG93ZXIsIGJlY2F1c2UgdGhlIGxvd2VyCisgICAgICAgICAgICB0aGUgY2xvY2sgc3BlZWQsIHRoZSBsZXNzIHBvd2VyIHRoZSBDUFUgY29uc3VtZXMuCisKKworQ29udGVudHM6CistLS0tLS0tLS0KKzEuICAgV2hhdCBpcyBhIENQVUZyZXEgR292ZXJub3I/CisKKzIuICAgR292ZXJub3JzIEluIHRoZSBMaW51eCBLZXJuZWwKKzIuMSAgUGVyZm9ybWFuY2UKKzIuMiAgUG93ZXJzYXZlCisyLjMgIFVzZXJzcGFjZQorCiszLiAgIFRoZSBHb3Zlcm5vciBJbnRlcmZhY2UgaW4gdGhlIENQVWZyZXEgQ29yZQorCisKKworMS4gV2hhdCBJcyBBIENQVUZyZXEgR292ZXJub3I/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTW9zdCBjcHVmcmVxIGRyaXZlcnMgKGluIGZhY3QsIGFsbCBleGNlcHQgb25lLCBsb25ncnVuKSBvciBldmVuIG1vc3QKK2NwdSBmcmVxdWVuY3kgc2NhbGluZyBhbGdvcml0aG1zIG9ubHkgb2ZmZXIgdGhlIENQVSB0byBiZSBzZXQgdG8gb25lCitmcmVxdWVuY3kuIEluIG9yZGVyIHRvIG9mZmVyIGR5bmFtaWMgZnJlcXVlbmN5IHNjYWxpbmcsIHRoZSBjcHVmcmVxCitjb3JlIG11c3QgYmUgYWJsZSB0byB0ZWxsIHRoZXNlIGRyaXZlcnMgb2YgYSAidGFyZ2V0IGZyZXF1ZW5jeSIuIFNvCit0aGVzZSBzcGVjaWZpYyBkcml2ZXJzIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG8gb2ZmZXIgYSAiLT50YXJnZXQiCitjYWxsIGluc3RlYWQgb2YgdGhlIGV4aXN0aW5nICItPnNldHBvbGljeSIgY2FsbC4gRm9yICJsb25ncnVuIiwgYWxsCitzdGF5cyB0aGUgc2FtZSwgdGhvdWdoLgorCitIb3cgdG8gZGVjaWRlIHdoYXQgZnJlcXVlbmN5IHdpdGhpbiB0aGUgQ1BVZnJlcSBwb2xpY3kgc2hvdWxkIGJlIHVzZWQ/CitUaGF0J3MgZG9uZSB1c2luZyAiY3B1ZnJlcSBnb3Zlcm5vcnMiLiBUd28gYXJlIGFscmVhZHkgaW4gdGhpcyBwYXRjaAorLS0gdGhleSdyZSB0aGUgYWxyZWFkeSBleGlzdGluZyAicG93ZXJzYXZlIiBhbmQgInBlcmZvcm1hbmNlIiB3aGljaAorc2V0IHRoZSBmcmVxdWVuY3kgc3RhdGljYWxseSB0byB0aGUgbG93ZXN0IG9yIGhpZ2hlc3QgZnJlcXVlbmN5LAorcmVzcGVjdGl2ZWx5LiBBdCBsZWFzdCB0d28gbW9yZSBzdWNoIGdvdmVybm9ycyB3aWxsIGJlIHJlYWR5IGZvcgorYWRkaXRpb24gaW4gdGhlIG5lYXIgZnV0dXJlLCBidXQgbGlrZWx5IG1hbnkgbW9yZSBhcyB0aGVyZSBhcmUgdmFyaW91cworZGlmZmVyZW50IHRoZW9yaWVzIGFuZCBtb2RlbHMgYWJvdXQgZHluYW1pYyBmcmVxdWVuY3kgc2NhbGluZworYXJvdW5kLiBVc2luZyBzdWNoIGEgZ2VuZXJpYyBpbnRlcmZhY2UgYXMgY3B1ZnJlcSBvZmZlcnMgdG8gc2NhbGluZworZ292ZXJub3JzLCB0aGVzZSBjYW4gYmUgdGVzdGVkIGV4dGVuc2l2ZWx5LCBhbmQgdGhlIGJlc3Qgb25lIGNhbiBiZQorc2VsZWN0ZWQgZm9yIGVhY2ggc3BlY2lmaWMgdXNlLgorCitCYXNpY2FsbHksIGl0J3MgdGhlIGZvbGxvd2luZyBmbG93IGdyYXBoOgorCitDUFUgY2FuIGJlIHNldCB0byBzd2l0Y2ggaW5kZXBlbmRldGx5CSB8CSAgIENQVSBjYW4gb25seSBiZSBzZXQKKyAgICAgIHdpdGhpbiBzcGVjaWZpYyAibGltaXRzIgkJIHwgICAgICAgdG8gc3BlY2lmaWMgZnJlcXVlbmNpZXMKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNQVWZyZXEgcG9saWN5IgorCQljb25zaXN0cyBvZiBmcmVxdWVuY3kgbGltaXRzIChwb2xpY3ktPnttaW4sbWF4fSkKKyAgCQkgICAgIGFuZCBDUFVmcmVxIGdvdmVybm9yIHRvIGJlIHVzZWQKKwkJCSAvCQkgICAgICBcCisJCQkvCQkgICAgICAgXAorCQkgICAgICAgLwkJICAgICAgIHRoZSBjcHVmcmVxIGdvdmVybm9yIGRlY2lkZXMKKwkJICAgICAgLwkJCSAgICAgICAoZHluYW1pY2FsbHkgb3Igc3RhdGljYWxseSkKKwkJICAgICAvCQkJICAgICAgIHdoYXQgdGFyZ2V0X2ZyZXEgdG8gc2V0IHdpdGhpbgorCQkgICAgLwkJCSAgICAgICB0aGUgbGltaXRzIG9mIHBvbGljeS0+e21pbixtYXh9CisJCSAgIC8JCQkgICAgICAgICAgICBcCisJCSAgLwkJCQkgICAgIFwKKwlVc2luZyB0aGUgLT5zZXRwb2xpY3kgY2FsbCwJCSBVc2luZyB0aGUgLT50YXJnZXQgY2FsbCwKKwkgICAgdGhlIGxpbWl0cyBhbmQgdGhlCQkJICB0aGUgZnJlcXVlbmN5IGNsb3Nlc3QKKwkgICAgICJwb2xpY3kiIGlzIHNldC4JCQkgIHRvIHRhcmdldF9mcmVxIGlzIHNldC4KKwkJCQkJCSAgSXQgaXMgYXNzdXJlZCB0aGF0IGl0CisJCQkJCQkgIGlzIHdpdGhpbiBwb2xpY3ktPnttaW4sbWF4fQorCisKKzIuIEdvdmVybm9ycyBJbiB0aGUgTGludXggS2VybmVsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisyLjEgUGVyZm9ybWFuY2UKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgQ1BVZnJlcSBnb3Zlcm5vciAicGVyZm9ybWFuY2UiIHNldHMgdGhlIENQVSBzdGF0aWNhbGx5IHRvIHRoZQoraGlnaGVzdCBmcmVxdWVuY3kgd2l0aGluIHRoZSBib3JkZXJzIG9mIHNjYWxpbmdfbWluX2ZyZXEgYW5kCitzY2FsaW5nX21heF9mcmVxLgorCisKKzIuMSBQb3dlcnNhdmUKKy0tLS0tLS0tLS0tLS0KKworVGhlIENQVWZyZXEgZ292ZXJub3IgInBvd2Vyc2F2ZSIgc2V0cyB0aGUgQ1BVIHN0YXRpY2FsbHkgdG8gdGhlCitsb3dlc3QgZnJlcXVlbmN5IHdpdGhpbiB0aGUgYm9yZGVycyBvZiBzY2FsaW5nX21pbl9mcmVxIGFuZAorc2NhbGluZ19tYXhfZnJlcS4KKworCisyLjIgVXNlcnNwYWNlCistLS0tLS0tLS0tLS0tCisKK1RoZSBDUFVmcmVxIGdvdmVybm9yICJ1c2Vyc3BhY2UiIGFsbG93cyB0aGUgdXNlciwgb3IgYW55IHVzZXJzcGFjZQorcHJvZ3JhbSBydW5uaW5nIHdpdGggVUlEICJyb290IiwgdG8gc2V0IHRoZSBDUFUgdG8gYSBzcGVjaWZpYyBmcmVxdWVuY3kKK2J5IG1ha2luZyBhIHN5c2ZzIGZpbGUgInNjYWxpbmdfc2V0c3BlZWQiIGF2YWlsYWJsZSBpbiB0aGUgQ1BVLWRldmljZQorZGlyZWN0b3J5LgorCisKKworMy4gVGhlIEdvdmVybm9yIEludGVyZmFjZSBpbiB0aGUgQ1BVZnJlcSBDb3JlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSBuZXcgZ292ZXJub3IgbXVzdCByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgQ1BVZnJlcSBjb3JlIHVzaW5nCisiY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vciIuIFRoZSBzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciwgd2hpY2ggaGFzIHRvCitiZSBwYXNzZWQgdG8gdGhhdCBmdW5jdGlvbiwgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCitnb3Zlcm5vci0+bmFtZSAtCSAgICBBIHVuaXF1ZSBuYW1lIGZvciB0aGlzIGdvdmVybm9yCitnb3Zlcm5vci0+Z292ZXJub3IgLQkgICAgVGhlIGdvdmVybm9yIGNhbGxiYWNrIGZ1bmN0aW9uCitnb3Zlcm5vci0+b3duZXIJLQkgICAgLlRISVNfTU9EVUxFIGZvciB0aGUgZ292ZXJub3IgbW9kdWxlIChpZiAKKwkJCSAgICBhcHByb3ByaWF0ZSkKKworVGhlIGdvdmVybm9yLT5nb3Zlcm5vciBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCAob3IgdG8tYmUtc2V0KQorY3B1ZnJlcV9wb2xpY3kgc3RydWN0IGZvciB0aGF0IENQVSwgYW5kIGFuIHVuc2lnbmVkIGludCBldmVudC4gVGhlCitmb2xsb3dpbmcgZXZlbnRzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDoKKworQ1BVRlJFUV9HT1ZfU1RBUlQ6ICAgVGhpcyBnb3Zlcm5vciBzaGFsbCBzdGFydCBpdHMgZHV0eSBmb3IgdGhlIENQVQorCQkgICAgIHBvbGljeS0+Y3B1CitDUFVGUkVRX0dPVl9TVE9QOiAgICBUaGlzIGdvdmVybm9yIHNoYWxsIGVuZCBpdHMgZHV0eSBmb3IgdGhlIENQVQorCQkgICAgIHBvbGljeS0+Y3B1CitDUFVGUkVRX0dPVl9MSU1JVFM6ICBUaGUgbGltaXRzIGZvciBDUFUgcG9saWN5LT5jcHUgaGF2ZSBjaGFuZ2VkIHRvCisJCSAgICAgcG9saWN5LT5taW4gYW5kIHBvbGljeS0+bWF4LgorCitJZiB5b3UgbmVlZCBvdGhlciAiZXZlbnRzIiBleHRlcm5hbGx5IG9mIHlvdXIgZHJpdmVyLCBfb25seV8gdXNlIHRoZQorY3B1ZnJlcV9nb3Zlcm5vcl9sKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBldmVudCkgY2FsbCB0byB0aGUKK0NQVWZyZXEgY29yZSB0byBlbnN1cmUgcHJvcGVyIGxvY2tpbmcuCisKKworVGhlIENQVWZyZXEgZ292ZXJub3IgbWF5IGNhbGwgdGhlIENQVSBwcm9jZXNzb3IgZHJpdmVyIHVzaW5nIG9uZSBvZgordGhlc2UgdHdvIGZ1bmN0aW9uczoKKworaW50IGNwdWZyZXFfZHJpdmVyX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbik7CisKK2ludCBfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pOworCit0YXJnZXRfZnJlcSBtdXN0IGJlIHdpdGhpbiBwb2xpY3ktPm1pbiBhbmQgcG9saWN5LT5tYXgsIG9mIGNvdXJzZS4KK1doYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnM/IFdoZW4geW91ciBnb3Zlcm5vcgorc3RpbGwgaXMgaW4gYSBkaXJlY3QgY29kZSBwYXRoIG9mIGEgY2FsbCB0byBnb3Zlcm5vci0+Z292ZXJub3IsIHRoZQorcGVyLUNQVSBjcHVmcmVxIGxvY2sgaXMgc3RpbGwgaGVsZCBpbiB0aGUgY3B1ZnJlcSBjb3JlLCBhbmQgdGhlcmUncworbm8gbmVlZCB0byBsb2NrIGl0IGFnYWluIChpbiBmYWN0LCB0aGlzIHdvdWxkIGNhdXNlIGEgZGVhZGxvY2spLiBTbwordXNlIF9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0IG9ubHkgaW4gdGhlc2UgY2FzZXMuIEluIGFsbCBvdGhlciBjYXNlcyAKKyhmb3IgZXhhbXBsZSwgd2hlbiB0aGVyZSdzIGEgImRhZW1vbml6ZWQiIGZ1bmN0aW9uIHRoYXQgd2FrZXMgdXAgCitldmVyeSBzZWNvbmQpLCB1c2UgY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0IHRvIGxvY2sgdGhlIGNwdWZyZXEgcGVyLUNQVQorbG9jayBiZWZvcmUgdGhlIGNvbW1hbmQgaXMgcGFzc2VkIHRvIHRoZSBjcHVmcmVxIHByb2Nlc3NvciBkcml2ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwOTgwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvaW5kZXgudHh0CkBAIC0wLDAgKzEsNTYgQEAKKyAgICAgQ1BVIGZyZXF1ZW5jeSBhbmQgdm9sdGFnZSBzY2FsaW5nIGNvZGUgaW4gdGhlIExpbnV4KFRNKSBrZXJuZWwKKworCisJCSAgICAgICAgIEwgaSBuIHUgeCAgICBDIFAgVSBGIHIgZSBxCisKKworCisKKwkJICAgIERvbWluaWsgQnJvZG93c2tpICA8bGludXhAYnJvZG8uZGU+CisKKworCisgICBDbG9jayBzY2FsaW5nIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjbG9jayBzcGVlZCBvZiB0aGUgQ1BVcyBvbiB0aGUKKyAgICBmbHkuIFRoaXMgaXMgYSBuaWNlIG1ldGhvZCB0byBzYXZlIGJhdHRlcnkgcG93ZXIsIGJlY2F1c2UgdGhlIGxvd2VyCisgICAgICAgICAgICB0aGUgY2xvY2sgc3BlZWQsIHRoZSBsZXNzIHBvd2VyIHRoZSBDUFUgY29uc3VtZXMuCisKKworCitEb2N1bWVudHMgaW4gdGhpcyBkaXJlY3Rvcnk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb3JlLnR4dAktCUdlbmVyYWwgZGVzY3JpcHRpb24gb2YgdGhlIENQVUZyZXEgY29yZSBhbmQKKwkJCW9mIENQVUZyZXEgbm90aWZpZXJzCisKK2NwdS1kcml2ZXJzLnR4dCAtCUhvdyB0byBpbXBsZW1lbnQgYSBuZXcgY3B1ZnJlcSBwcm9jZXNzb3IgZHJpdmVyCisKK2dvdmVybm9ycy50eHQJLQlXaGF0IGFyZSBjcHVmcmVxIGdvdmVybm9ycyBhbmQgaG93IHRvCisJCQlpbXBsZW1lbnQgdGhlbT8KKworaW5kZXgudHh0CS0JRmlsZSBpbmRleCwgTWFpbGluZyBsaXN0IGFuZCBMaW5rcyAodGhpcyBkb2N1bWVudCkKKwordXNlci1ndWlkZS50eHQJLQlVc2VyIEd1aWRlIHRvIENQVUZyZXEKKworCitNYWlsaW5nIExpc3QKKy0tLS0tLS0tLS0tLQorVGhlcmUgaXMgYSBDUFUgZnJlcXVlbmN5IGNoYW5naW5nIENWUyBjb21taXQgYW5kIGdlbmVyYWwgbGlzdCB3aGVyZQoreW91IGNhbiByZXBvcnQgYnVncywgcHJvYmxlbXMgb3Igc3VibWl0IHBhdGNoZXMuIFRvIHBvc3QgYSBtZXNzYWdlLAorc2VuZCBhbiBlbWFpbCB0byBjcHVmcmVxQGxpc3RzLmxpbnV4Lm9yZy51aywgdG8gc3Vic2NyaWJlIGdvIHRvCitodHRwOi8vbGlzdHMubGludXgub3JnLnVrL21haWxtYW4vbGlzdGluZm8vY3B1ZnJlcS4gUHJldmlvdXMgcG9zdCB0byB0aGUKK21haWxpbmcgbGlzdCBhcmUgYXZhaWxhYmxlIHRvIHN1YnNjcmliZXJzIGF0CitodHRwOi8vbGlzdHMubGludXgub3JnLnVrL21haWxtYW4vcHJpdmF0ZS9jcHVmcmVxLy4KKworCitMaW5rcworLS0tLS0KK3RoZSBGVFAgYXJjaGl2ZXM6CisqIGZ0cDovL2Z0cC5saW51eC5vcmcudWsvcHViL2xpbnV4L2NwdWZyZXEvCisKK2hvdyB0byBhY2Nlc3MgdGhlIENWUyByZXBvc2l0b3J5OgorKiBodHRwOi8vY3ZzLmFybS5saW51eC5vcmcudWsvCisKK3RoZSBDUFVGcmVxIE1haWxpbmcgbGlzdDoKKyogaHR0cDovL2xpc3RzLmxpbnV4Lm9yZy51ay9tYWlsbWFuL2xpc3RpbmZvL2NwdWZyZXEKKworQ2xvY2sgYW5kIHZvbHRhZ2Ugc2NhbGluZyBmb3IgdGhlIFNBLTExMDA6CisqIGh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sL3Byb2plY3RzL3NjYWxpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWRjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CkBAIC0wLDAgKzEsMTg1IEBACisgICAgIENQVSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2Ugc2NhbGluZyBjb2RlIGluIHRoZSBMaW51eChUTSkga2VybmVsCisKKworCQkgICAgICAgICBMIGkgbiB1IHggICAgQyBQIFUgRiByIGUgcQorCisJCQkgICAgIFUgUyBFIFIgICBHIFUgSSBEIEUKKworCisJCSAgICBEb21pbmlrIEJyb2Rvd3NraSAgPGxpbnV4QGJyb2RvLmRlPgorCisKKworICAgQ2xvY2sgc2NhbGluZyBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgY2xvY2sgc3BlZWQgb2YgdGhlIENQVXMgb24gdGhlCisgICAgZmx5LiBUaGlzIGlzIGEgbmljZSBtZXRob2QgdG8gc2F2ZSBiYXR0ZXJ5IHBvd2VyLCBiZWNhdXNlIHRoZSBsb3dlcgorICAgICAgICAgICAgdGhlIGNsb2NrIHNwZWVkLCB0aGUgbGVzcyBwb3dlciB0aGUgQ1BVIGNvbnN1bWVzLgorCisKK0NvbnRlbnRzOgorLS0tLS0tLS0tCisxLiBTdXBwb3J0ZWQgQXJjaGl0ZWN0dXJlcyBhbmQgUHJvY2Vzc29ycworMS4xIEFSTQorMS4yIHg4NgorMS4zIHNwYXJjNjQKKzEuNCBwcGMKKzEuNSBTdXBlckgKKworMi4gIlBvbGljeSIgLyAiR292ZXJub3IiPworMi4xIFBvbGljeQorMi4yIEdvdmVybm9yCisKKzMuIEhvdyB0byBjaGFuZ2UgdGhlIENQVSBjcHVmcmVxIHBvbGljeSBhbmQvb3Igc3BlZWQKKzMuMSBQcmVmZXJyZWQgaW50ZXJmYWNlOiBzeXNmcworMy4yIERlcHJlY2F0ZWQgaW50ZXJmYWNlcworCisKKworMS4gU3VwcG9ydGVkIEFyY2hpdGVjdHVyZXMgYW5kIFByb2Nlc3NvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuMSBBUk0KKy0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBBUk0gcHJvY2Vzc29ycyBhcmUgc3VwcG9ydGVkIGJ5IGNwdWZyZXE6CisKK0FSTSBJbnRlZ3JhdG9yCitBUk0tU0ExMTAwCitBUk0tU0ExMTEwCisKKworMS4yIHg4NgorLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIHByb2Nlc3NvcnMgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFyZSBzdXBwb3J0ZWQgYnkgY3B1ZnJlcToKKworQU1EIEVsYW4gLSBTQzQwMCwgU0M0MTAKK0FNRCBtb2JpbGUgSzYtMisKK0FNRCBtb2JpbGUgSzYtMysKK0FNRCBtb2JpbGUgRHVyb24KK0FNRCBtb2JpbGUgQXRobG9uCitBTUQgT3B0ZXJvbgorQU1EIEF0aGxvbiA2NAorQ3lyaXggTWVkaWEgR1htCitJbnRlbCBtb2JpbGUgUElJSSBhbmQgSW50ZWwgbW9iaWxlIFBJSUktTSBvbiBjZXJ0YWluIGNoaXBzZXRzCitJbnRlbCBQZW50aXVtIDQsIEludGVsIFhlb24KK0ludGVsIFBlbnRpdW0gTSAoQ2VudHJpbm8pCitOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBHZW9kZSBHWAorVHJhbnNtZXRhIENydXNvZQorVHJhbnNtZXRhIEVmZmljZW9uCitWSUEgQ3lyaXggMyAvIEMzCit2YXJpb3VzIHByb2Nlc3NvcnMgb24gc29tZSBBQ1BJIDIuMC1jb21wYXRpYmxlIHN5c3RlbXMgWypdCisKK1sqXSBPbmx5IGlmICJBQ1BJIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBTdGF0ZXMiIGFyZSBhdmFpbGFibGUKK3RvIHRoZSBBQ1BJPC0+QklPUyBpbnRlcmZhY2UuCisKKworMS4zIHNwYXJjNjQKKy0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgcHJvY2Vzc29ycyBmb3IgdGhlIHNwYXJjNjQgYXJjaGl0ZWN0dXJlIGFyZSBzdXBwb3J0ZWQgYnkKK2NwdWZyZXE6CisKK1VsdHJhU1BBUkMtSUlJCisKKworMS40IHBwYworLS0tLS0tLQorCitTZXZlcmFsICJQb3dlckJvb2siIGFuZCAiaUJvb2syIiBub3RlYm9va3MgYXJlIHN1cHBvcnRlZC4KKworCisxLjUgU3VwZXJICistLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgU3VwZXJIIHByb2Nlc3NvcnMgYXJlIHN1cHBvcnRlZCBieSBjcHVmcmVxOgorCitTSC0zCitTSC00CisKKworMi4gIlBvbGljeSIgLyAiR292ZXJub3IiID8KKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nLWNhcGFibGUgcHJvY2Vzc29yIHN3aXRjaCBiZXR3ZWVuIHZhcmlvdXMKK2ZyZXF1ZW5jaWVzIGFuZCBvcGVyYXRpbmcgdm9sdGFnZXMgIm9uIHRoZSBmbHkiIHdpdGhvdXQgYW55IGtlcm5lbCBvcgordXNlciBpbnZvbHZlbWVudC4gVGhpcyBndWFyYW50ZWVzIHZlcnkgZmFzdCBzd2l0Y2hpbmcgdG8gYSBmcmVxdWVuY3kKK3doaWNoIGlzIGhpZ2ggZW5vdWdoIHRvIHNlcnZlIHRoZSB1c2VyJ3MgbmVlZHMsIGJ1dCBsb3cgZW5vdWdoIHRvIHNhdmUKK3Bvd2VyLgorCisKKzIuMSBQb2xpY3kKKy0tLS0tLS0tLS0KKworT24gdGhlc2Ugc3lzdGVtcywgYWxsIHlvdSBjYW4gZG8gaXMgc2VsZWN0IHRoZSBsb3dlciBhbmQgdXBwZXIKK2ZyZXF1ZW5jeSBsaW1pdCBhcyB3ZWxsIGFzIHdoZXRoZXIgeW91IHdhbnQgbW9yZSBhZ2dyZXNzaXZlCitwb3dlci1zYXZpbmcgb3IgbW9yZSBpbnN0YW50bHkgYXZhaWxhYmxlIHByb2Nlc3NpbmcgcG93ZXIuCisKKworMi4yIEdvdmVybm9yCistLS0tLS0tLS0tLS0KKworT24gYWxsIG90aGVyIGNwdWZyZXEgaW1wbGVtZW50YXRpb25zLCB0aGVzZSBib3VuZGFyaWVzIHN0aWxsIG5lZWQgdG8KK2JlIHNldC4gVGhlbiwgYSAiZ292ZXJub3IiIG11c3QgYmUgc2VsZWN0ZWQuIFN1Y2ggYSAiZ292ZXJub3IiIGRlY2lkZXMKK3doYXQgc3BlZWQgdGhlIHByb2Nlc3NvciBzaGFsbCBydW4gd2l0aGluIHRoZSBib3VuZGFyaWVzLiBPbmUgc3VjaAorImdvdmVybm9yIiBpcyB0aGUgInVzZXJzcGFjZSIgZ292ZXJub3IuIFRoaXMgb25lIGFsbG93cyB0aGUgdXNlciAtIG9yCithIHlldC10by1pbXBsZW1lbnQgdXNlcnNwYWNlIHByb2dyYW0gLSB0byBkZWNpZGUgd2hhdCBzcGVjaWZpYyBzcGVlZAordGhlIHByb2Nlc3NvciBzaGFsbCBydW4gYXQuCisKKworMy4gSG93IHRvIGNoYW5nZSB0aGUgQ1BVIGNwdWZyZXEgcG9saWN5IGFuZC9vciBzcGVlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiszLjEgUHJlZmVycmVkIEludGVyZmFjZTogc3lzZnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcHJlZmVycmVkIGludGVyZmFjZSBpcyBsb2NhdGVkIGluIHRoZSBzeXNmcyBmaWxlc3lzdGVtLiBJZiB5b3UKK21vdW50ZWQgaXQgYXQgL3N5cywgdGhlIGNwdWZyZXEgaW50ZXJmYWNlIGlzIGxvY2F0ZWQgaW4gYSBzdWJkaXJlY3RvcnkKKyJjcHVmcmVxIiB3aXRoaW4gdGhlIGNwdS1kZXZpY2UgZGlyZWN0b3J5CisoZS5nLiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvIGZvciB0aGUgZmlyc3QgQ1BVKS4KKworY3B1aW5mb19taW5fZnJlcSA6CQl0aGlzIGZpbGUgc2hvd3MgdGhlIG1pbmltdW0gb3BlcmF0aW5nCisJCQkJZnJlcXVlbmN5IHRoZSBwcm9jZXNzb3IgY2FuIHJ1biBhdChpbiBrSHopIAorY3B1aW5mb19tYXhfZnJlcSA6CQl0aGlzIGZpbGUgc2hvd3MgdGhlIG1heGltdW0gb3BlcmF0aW5nCisJCQkJZnJlcXVlbmN5IHRoZSBwcm9jZXNzb3IgY2FuIHJ1biBhdChpbiBrSHopIAorc2NhbGluZ19kcml2ZXIgOgkJdGhpcyBmaWxlIHNob3dzIHdoYXQgY3B1ZnJlcSBkcml2ZXIgaXMKKwkJCQl1c2VkIHRvIHNldCB0aGUgZnJlcXVlbmN5IG9uIHRoaXMgQ1BVCisKK3NjYWxpbmdfYXZhaWxhYmxlX2dvdmVybm9ycyA6CXRoaXMgZmlsZSBzaG93cyB0aGUgQ1BVZnJlcSBnb3Zlcm5vcnMKKwkJCQlhdmFpbGFibGUgaW4gdGhpcyBrZXJuZWwuIFlvdSBjYW4gc2VlIHRoZQorCQkJCWN1cnJlbnRseSBhY3RpdmF0ZWQgZ292ZXJub3IgaW4KKworc2NhbGluZ19nb3Zlcm5vciwJCWFuZCBieSAiZWNob2luZyIgdGhlIG5hbWUgb2YgYW5vdGhlcgorCQkJCWdvdmVybm9yIHlvdSBjYW4gY2hhbmdlIGl0LiBQbGVhc2Ugbm90ZQorCQkJCXRoYXQgc29tZSBnb3Zlcm5vcnMgd29uJ3QgbG9hZCAtIHRoZXkgb25seQorCQkJCXdvcmsgb24gc29tZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIG9yCisJCQkJcHJvY2Vzc29ycy4KK3NjYWxpbmdfbWluX2ZyZXEgYW5kIAorc2NhbGluZ19tYXhfZnJlcQkJc2hvdyB0aGUgY3VycmVudCAicG9saWN5IGxpbWl0cyIgKGluCisJCQkJa0h6KS4gQnkgZWNob2luZyBuZXcgdmFsdWVzIGludG8gdGhlc2UKKwkJCQlmaWxlcywgeW91IGNhbiBjaGFuZ2UgdGhlc2UgbGltaXRzLgorCisKK0lmIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSAidXNlcnNwYWNlIiBnb3Zlcm5vciB3aGljaCBhbGxvd3MgeW91IHRvCitzZXQgdGhlIENQVSBvcGVyYXRpbmcgZnJlcXVlbmN5IHRvIGEgc3BlY2lmaWMgdmFsdWUsIHlvdSBjYW4gcmVhZCBvdXQKK3RoZSBjdXJyZW50IGZyZXF1ZW5jeSBpbgorCitzY2FsaW5nX3NldHNwZWVkLgkJQnkgImVjaG9pbmciIGEgbmV3IGZyZXF1ZW5jeSBpbnRvIHRoaXMKKwkJCQl5b3UgY2FuIGNoYW5nZSB0aGUgc3BlZWQgb2YgdGhlIENQVSwKKwkJCQlidXQgb25seSB3aXRoaW4gdGhlIGxpbWl0cyBvZgorCQkJCXNjYWxpbmdfbWluX2ZyZXEgYW5kIHNjYWxpbmdfbWF4X2ZyZXEuCisJCQkJCisKKzMuMiBEZXByZWNhdGVkIEludGVyZmFjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVwZW5kaW5nIG9uIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24sIHlvdSBtaWdodCBmaW5kIHRoZSBmb2xsb3dpbmcgCitjcHVmcmVxLXJlbGF0ZWQgZmlsZXM6CisvcHJvYy9jcHVmcmVxCisvcHJvYy9zeXMvY3B1Lyovc3BlZWQKKy9wcm9jL3N5cy9jcHUvKi9zcGVlZC1taW4KKy9wcm9jL3N5cy9jcHUvKi9zcGVlZC1tYXgKKworVGhlc2UgYXJlIGZpbGVzIGZvciBkZXByZWNhdGVkIGludGVyZmFjZXMgdG8gY3B1ZnJlcSwgd2hpY2ggb2ZmZXIgZmFyCitsZXNzIGZ1bmN0aW9uYWxpdHkuIEJlY2F1c2Ugb2YgdGhpcywgdGhlc2UgaW50ZXJmYWNlcyBhcmVuJ3QgZGVzY3JpYmVkCitoZXJlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQyNmQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApAQCAtMCwwICsxLDQxNSBAQAorCQkJCUNQVVNFVFMKKwkJCQktLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAwNCBCVUxMIFNBLgorV3JpdHRlbiBieSBTaW1vbi5EZXJyQGJ1bGwubmV0CisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCitNb2RpZmllZCBieSBQYXVsIEphY2tzb24gPHBqQHNnaS5jb20+CisKK0NPTlRFTlRTOgorPT09PT09PT09CisKKzEuIENwdXNldHMKKyAgMS4xIFdoYXQgYXJlIGNwdXNldHMgPworICAxLjIgV2h5IGFyZSBjcHVzZXRzIG5lZWRlZCA/CisgIDEuMyBIb3cgYXJlIGNwdXNldHMgaW1wbGVtZW50ZWQgPworICAxLjQgSG93IGRvIEkgdXNlIGNwdXNldHMgPworMi4gVXNhZ2UgRXhhbXBsZXMgYW5kIFN5bnRheAorICAyLjEgQmFzaWMgVXNhZ2UKKyAgMi4yIEFkZGluZy9yZW1vdmluZyBjcHVzCisgIDIuMyBTZXR0aW5nIGZsYWdzCisgIDIuNCBBdHRhY2hpbmcgcHJvY2Vzc2VzCiszLiBRdWVzdGlvbnMKKzQuIENvbnRhY3QKKworMS4gQ3B1c2V0cworPT09PT09PT09PQorCisxLjEgV2hhdCBhcmUgY3B1c2V0cyA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NwdXNldHMgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgYXNzaWduaW5nIGEgc2V0IG9mIENQVXMgYW5kIE1lbW9yeQorTm9kZXMgdG8gYSBzZXQgb2YgdGFza3MuCisKK0NwdXNldHMgY29uc3RyYWluIHRoZSBDUFUgYW5kIE1lbW9yeSBwbGFjZW1lbnQgb2YgdGFza3MgdG8gb25seQordGhlIHJlc291cmNlcyB3aXRoaW4gYSB0YXNrcyBjdXJyZW50IGNwdXNldC4gIFRoZXkgZm9ybSBhIG5lc3RlZAoraGllcmFyY2h5IHZpc2libGUgaW4gYSB2aXJ0dWFsIGZpbGUgc3lzdGVtLiAgVGhlc2UgYXJlIHRoZSBlc3NlbnRpYWwKK2hvb2tzLCBiZXlvbmQgd2hhdCBpcyBhbHJlYWR5IHByZXNlbnQsIHJlcXVpcmVkIHRvIG1hbmFnZSBkeW5hbWljCitqb2IgcGxhY2VtZW50IG9uIGxhcmdlIHN5c3RlbXMuCisKK0VhY2ggdGFzayBoYXMgYSBwb2ludGVyIHRvIGEgY3B1c2V0LiAgTXVsdGlwbGUgdGFza3MgbWF5IHJlZmVyZW5jZQordGhlIHNhbWUgY3B1c2V0LiAgUmVxdWVzdHMgYnkgYSB0YXNrLCB1c2luZyB0aGUgc2NoZWRfc2V0YWZmaW5pdHkoMikKK3N5c3RlbSBjYWxsIHRvIGluY2x1ZGUgQ1BVcyBpbiBpdHMgQ1BVIGFmZmluaXR5IG1hc2ssIGFuZCB1c2luZyB0aGUKK21iaW5kKDIpIGFuZCBzZXRfbWVtcG9saWN5KDIpIHN5c3RlbSBjYWxscyB0byBpbmNsdWRlIE1lbW9yeSBOb2RlcworaW4gaXRzIG1lbW9yeSBwb2xpY3ksIGFyZSBib3RoIGZpbHRlcmVkIHRocm91Z2ggdGhhdCB0YXNrcyBjcHVzZXQsCitmaWx0ZXJpbmcgb3V0IGFueSBDUFVzIG9yIE1lbW9yeSBOb2RlcyBub3QgaW4gdGhhdCBjcHVzZXQuICBUaGUKK3NjaGVkdWxlciB3aWxsIG5vdCBzY2hlZHVsZSBhIHRhc2sgb24gYSBDUFUgdGhhdCBpcyBub3QgYWxsb3dlZCBpbgoraXRzIGNwdXNfYWxsb3dlZCB2ZWN0b3IsIGFuZCB0aGUga2VybmVsIHBhZ2UgYWxsb2NhdG9yIHdpbGwgbm90CithbGxvY2F0ZSBhIHBhZ2Ugb24gYSBub2RlIHRoYXQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHJlcXVlc3RpbmcgdGFza3MKK21lbXNfYWxsb3dlZCB2ZWN0b3IuCisKK0lmIGEgY3B1c2V0IGlzIGNwdSBvciBtZW0gZXhjbHVzaXZlLCBubyBvdGhlciBjcHVzZXQsIG90aGVyIHRoYW4gYSBkaXJlY3QKK2FuY2VzdG9yIG9yIGRlc2NlbmRlbnQsIG1heSBzaGFyZSBhbnkgb2YgdGhlIHNhbWUgQ1BVcyBvciBNZW1vcnkgTm9kZXMuCisKK1VzZXIgbGV2ZWwgY29kZSBtYXkgY3JlYXRlIGFuZCBkZXN0cm95IGNwdXNldHMgYnkgbmFtZSBpbiB0aGUgY3B1c2V0Cit2aXJ0dWFsIGZpbGUgc3lzdGVtLCBtYW5hZ2UgdGhlIGF0dHJpYnV0ZXMgYW5kIHBlcm1pc3Npb25zIG9mIHRoZXNlCitjcHVzZXRzIGFuZCB3aGljaCBDUFVzIGFuZCBNZW1vcnkgTm9kZXMgYXJlIGFzc2lnbmVkIHRvIGVhY2ggY3B1c2V0LAorc3BlY2lmeSBhbmQgcXVlcnkgdG8gd2hpY2ggY3B1c2V0IGEgdGFzayBpcyBhc3NpZ25lZCwgYW5kIGxpc3QgdGhlCit0YXNrIHBpZHMgYXNzaWduZWQgdG8gYSBjcHVzZXQuCisKKworMS4yIFdoeSBhcmUgY3B1c2V0cyBuZWVkZWQgPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFuYWdlbWVudCBvZiBsYXJnZSBjb21wdXRlciBzeXN0ZW1zLCB3aXRoIG1hbnkgcHJvY2Vzc29ycyAoQ1BVcyksCitjb21wbGV4IG1lbW9yeSBjYWNoZSBoaWVyYXJjaGllcyBhbmQgbXVsdGlwbGUgTWVtb3J5IE5vZGVzIGhhdmluZworbm9uLXVuaWZvcm0gYWNjZXNzIHRpbWVzIChOVU1BKSBwcmVzZW50cyBhZGRpdGlvbmFsIGNoYWxsZW5nZXMgZm9yCit0aGUgZWZmaWNpZW50IHNjaGVkdWxpbmcgYW5kIG1lbW9yeSBwbGFjZW1lbnQgb2YgcHJvY2Vzc2VzLgorCitGcmVxdWVudGx5IG1vcmUgbW9kZXN0IHNpemVkIHN5c3RlbXMgY2FuIGJlIG9wZXJhdGVkIHdpdGggYWRlcXVhdGUKK2VmZmljaWVuY3kganVzdCBieSBsZXR0aW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2hhcmUKK3RoZSBhdmFpbGFibGUgQ1BVIGFuZCBNZW1vcnkgcmVzb3VyY2VzIGFtb25nc3QgdGhlIHJlcXVlc3RpbmcgdGFza3MuCisKK0J1dCBsYXJnZXIgc3lzdGVtcywgd2hpY2ggYmVuZWZpdCBtb3JlIGZyb20gY2FyZWZ1bCBwcm9jZXNzb3IgYW5kCittZW1vcnkgcGxhY2VtZW50IHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzIHRpbWVzIGFuZCBjb250ZW50aW9uLAorYW5kIHdoaWNoIHR5cGljYWxseSByZXByZXNlbnQgYSBsYXJnZXIgaW52ZXN0bWVudCBmb3IgdGhlIGN1c3RvbWVyLAorY2FuIGJlbmVmaXQgZnJvbSBleHBsaWN0bHkgcGxhY2luZyBqb2JzIG9uIHByb3Blcmx5IHNpemVkIHN1YnNldHMgb2YKK3RoZSBzeXN0ZW0uCisKK1RoaXMgY2FuIGJlIGVzcGVjaWFsbHkgdmFsdWFibGUgb246CisKKyAgICAqIFdlYiBTZXJ2ZXJzIHJ1bm5pbmcgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHdlYiBhcHBsaWNhdGlvbiwKKyAgICAqIFNlcnZlcnMgcnVubmluZyBkaWZmZXJlbnQgYXBwbGljYXRpb25zIChmb3IgaW5zdGFuY2UsIGEgd2ViIHNlcnZlcgorICAgICAgYW5kIGEgZGF0YWJhc2UpLCBvcgorICAgICogTlVNQSBzeXN0ZW1zIHJ1bm5pbmcgbGFyZ2UgSFBDIGFwcGxpY2F0aW9ucyB3aXRoIGRlbWFuZGluZworICAgICAgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLgorCitUaGVzZSBzdWJzZXRzLCBvciAic29mdCBwYXJ0aXRpb25zIiBtdXN0IGJlIGFibGUgdG8gYmUgZHluYW1pY2FsbHkKK2FkanVzdGVkLCBhcyB0aGUgam9iIG1peCBjaGFuZ2VzLCB3aXRob3V0IGltcGFjdGluZyBvdGhlciBjb25jdXJyZW50bHkKK2V4ZWN1dGluZyBqb2JzLgorCitUaGUga2VybmVsIGNwdXNldCBwYXRjaCBwcm92aWRlcyB0aGUgbWluaW11bSBlc3NlbnRpYWwga2VybmVsCittZWNoYW5pc21zIHJlcXVpcmVkIHRvIGVmZmljaWVudGx5IGltcGxlbWVudCBzdWNoIHN1YnNldHMuICBJdAorbGV2ZXJhZ2VzIGV4aXN0aW5nIENQVSBhbmQgTWVtb3J5IFBsYWNlbWVudCBmYWNpbGl0aWVzIGluIHRoZSBMaW51eAora2VybmVsIHRvIGF2b2lkIGFueSBhZGRpdGlvbmFsIGltcGFjdCBvbiB0aGUgY3JpdGljYWwgc2NoZWR1bGVyIG9yCittZW1vcnkgYWxsb2NhdG9yIGNvZGUuCisKKworMS4zIEhvdyBhcmUgY3B1c2V0cyBpbXBsZW1lbnRlZCA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3B1c2V0cyBwcm92aWRlIGEgTGludXgga2VybmVsICgyLjYuNyBhbmQgYWJvdmUpIG1lY2hhbmlzbSB0byBjb25zdHJhaW4KK3doaWNoIENQVXMgYW5kIE1lbW9yeSBOb2RlcyBhcmUgdXNlZCBieSBhIHByb2Nlc3Mgb3Igc2V0IG9mIHByb2Nlc3Nlcy4KKworVGhlIExpbnV4IGtlcm5lbCBhbHJlYWR5IGhhcyBhIHBhaXIgb2YgbWVjaGFuaXNtcyB0byBzcGVjaWZ5IG9uIHdoaWNoCitDUFVzIGEgdGFzayBtYXkgYmUgc2NoZWR1bGVkIChzY2hlZF9zZXRhZmZpbml0eSkgYW5kIG9uIHdoaWNoIE1lbW9yeQorTm9kZXMgaXQgbWF5IG9idGFpbiBtZW1vcnkgKG1iaW5kLCBzZXRfbWVtcG9saWN5KS4KKworQ3B1c2V0cyBleHRlbmRzIHRoZXNlIHR3byBtZWNoYW5pc21zIGFzIGZvbGxvd3M6CisKKyAtIENwdXNldHMgYXJlIHNldHMgb2YgYWxsb3dlZCBDUFVzIGFuZCBNZW1vcnkgTm9kZXMsIGtub3duIHRvIHRoZQorICAga2VybmVsLgorIC0gRWFjaCB0YXNrIGluIHRoZSBzeXN0ZW0gaXMgYXR0YWNoZWQgdG8gYSBjcHVzZXQsIHZpYSBhIHBvaW50ZXIKKyAgIGluIHRoZSB0YXNrIHN0cnVjdHVyZSB0byBhIHJlZmVyZW5jZSBjb3VudGVkIGNwdXNldCBzdHJ1Y3R1cmUuCisgLSBDYWxscyB0byBzY2hlZF9zZXRhZmZpbml0eSBhcmUgZmlsdGVyZWQgdG8ganVzdCB0aG9zZSBDUFVzCisgICBhbGxvd2VkIGluIHRoYXQgdGFza3MgY3B1c2V0LgorIC0gQ2FsbHMgdG8gbWJpbmQgYW5kIHNldF9tZW1wb2xpY3kgYXJlIGZpbHRlcmVkIHRvIGp1c3QKKyAgIHRob3NlIE1lbW9yeSBOb2RlcyBhbGxvd2VkIGluIHRoYXQgdGFza3MgY3B1c2V0LgorIC0gVGhlIHJvb3QgY3B1c2V0IGNvbnRhaW5zIGFsbCB0aGUgc3lzdGVtcyBDUFVzIGFuZCBNZW1vcnkKKyAgIE5vZGVzLgorIC0gRm9yIGFueSBjcHVzZXQsIG9uZSBjYW4gZGVmaW5lIGNoaWxkIGNwdXNldHMgY29udGFpbmluZyBhIHN1YnNldAorICAgb2YgdGhlIHBhcmVudHMgQ1BVIGFuZCBNZW1vcnkgTm9kZSByZXNvdXJjZXMuCisgLSBUaGUgaGllcmFyY2h5IG9mIGNwdXNldHMgY2FuIGJlIG1vdW50ZWQgYXQgL2Rldi9jcHVzZXQsIGZvcgorICAgYnJvd3NpbmcgYW5kIG1hbmlwdWxhdGlvbiBmcm9tIHVzZXIgc3BhY2UuCisgLSBBIGNwdXNldCBtYXkgYmUgbWFya2VkIGV4Y2x1c2l2ZSwgd2hpY2ggZW5zdXJlcyB0aGF0IG5vIG90aGVyCisgICBjcHVzZXQgKGV4Y2VwdCBkaXJlY3QgYW5jZXN0b3JzIGFuZCBkZXNjZW5kZW50cykgbWF5IGNvbnRhaW4KKyAgIGFueSBvdmVybGFwcGluZyBDUFVzIG9yIE1lbW9yeSBOb2Rlcy4KKyAtIFlvdSBjYW4gbGlzdCBhbGwgdGhlIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIGFueSBjcHVzZXQuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiBjcHVzZXRzIHJlcXVpcmVzIGEgZmV3LCBzaW1wbGUgaG9va3MKK2ludG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgbm9uZSBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRoczoKKworIC0gaW4gbWFpbi9pbml0LmMsIHRvIGluaXRpYWxpemUgdGhlIHJvb3QgY3B1c2V0IGF0IHN5c3RlbSBib290LgorIC0gaW4gZm9yayBhbmQgZXhpdCwgdG8gYXR0YWNoIGFuZCBkZXRhY2ggYSB0YXNrIGZyb20gaXRzIGNwdXNldC4KKyAtIGluIHNjaGVkX3NldGFmZmluaXR5LCB0byBtYXNrIHRoZSByZXF1ZXN0ZWQgQ1BVcyBieSB3aGF0J3MKKyAgIGFsbG93ZWQgaW4gdGhhdCB0YXNrcyBjcHVzZXQuCisgLSBpbiBzY2hlZC5jIG1pZ3JhdGVfYWxsX3Rhc2tzKCksIHRvIGtlZXAgbWlncmF0aW5nIHRhc2tzIHdpdGhpbgorICAgdGhlIENQVXMgYWxsb3dlZCBieSB0aGVpciBjcHVzZXQsIGlmIHBvc3NpYmxlLgorIC0gaW4gdGhlIG1iaW5kIGFuZCBzZXRfbWVtcG9saWN5IHN5c3RlbSBjYWxscywgdG8gbWFzayB0aGUgcmVxdWVzdGVkCisgICBNZW1vcnkgTm9kZXMgYnkgd2hhdCdzIGFsbG93ZWQgaW4gdGhhdCB0YXNrcyBjcHVzZXQuCisgLSBpbiBwYWdlX2FsbG9jLCB0byByZXN0cmljdCBtZW1vcnkgdG8gYWxsb3dlZCBub2Rlcy4KKyAtIGluIHZtc2Nhbi5jLCB0byByZXN0cmljdCBwYWdlIHJlY292ZXJ5IHRvIHRoZSBjdXJyZW50IGNwdXNldC4KKworSW4gYWRkaXRpb24gYSBuZXcgZmlsZSBzeXN0ZW0sIG9mIHR5cGUgImNwdXNldCIgbWF5IGJlIG1vdW50ZWQsCit0eXBpY2FsbHkgYXQgL2Rldi9jcHVzZXQsIHRvIGVuYWJsZSBicm93c2luZyBhbmQgbW9kaWZ5aW5nIHRoZSBjcHVzZXRzCitwcmVzZW50bHkga25vd24gdG8gdGhlIGtlcm5lbC4gIE5vIG5ldyBzeXN0ZW0gY2FsbHMgYXJlIGFkZGVkIGZvcgorY3B1c2V0cyAtIGFsbCBzdXBwb3J0IGZvciBxdWVyeWluZyBhbmQgbW9kaWZ5aW5nIGNwdXNldHMgaXMgdmlhCit0aGlzIGNwdXNldCBmaWxlIHN5c3RlbS4KKworRWFjaCB0YXNrIHVuZGVyIC9wcm9jIGhhcyBhbiBhZGRlZCBmaWxlIG5hbWVkICdjcHVzZXQnLCBkaXNwbGF5aW5nCit0aGUgY3B1c2V0IG5hbWUsIGFzIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBjcHVzZXQgZmlsZQorc3lzdGVtLgorCitUaGUgL3Byb2MvPHBpZD4vc3RhdHVzIGZpbGUgZm9yIGVhY2ggdGFzayBoYXMgdHdvIGFkZGVkIGxpbmVzLAorZGlzcGxheWluZyB0aGUgdGFza3MgY3B1c19hbGxvd2VkIChvbiB3aGljaCBDUFVzIGl0IG1heSBiZSBzY2hlZHVsZWQpCithbmQgbWVtc19hbGxvd2VkIChvbiB3aGljaCBNZW1vcnkgTm9kZXMgaXQgbWF5IG9idGFpbiBtZW1vcnkpLAoraW4gdGhlIGZvcm1hdCBzZWVuIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKworICBDcHVzX2FsbG93ZWQ6ICAgZmZmZmZmZmYsZmZmZmZmZmYsZmZmZmZmZmYsZmZmZmZmZmYKKyAgTWVtc19hbGxvd2VkOiAgIGZmZmZmZmZmLGZmZmZmZmZmCisKK0VhY2ggY3B1c2V0IGlzIHJlcHJlc2VudGVkIGJ5IGEgZGlyZWN0b3J5IGluIHRoZSBjcHVzZXQgZmlsZSBzeXN0ZW0KK2NvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBmaWxlcyBkZXNjcmliaW5nIHRoYXQgY3B1c2V0OgorCisgLSBjcHVzOiBsaXN0IG9mIENQVXMgaW4gdGhhdCBjcHVzZXQKKyAtIG1lbXM6IGxpc3Qgb2YgTWVtb3J5IE5vZGVzIGluIHRoYXQgY3B1c2V0CisgLSBjcHVfZXhjbHVzaXZlIGZsYWc6IGlzIGNwdSBwbGFjZW1lbnQgZXhjbHVzaXZlPworIC0gbWVtX2V4Y2x1c2l2ZSBmbGFnOiBpcyBtZW1vcnkgcGxhY2VtZW50IGV4Y2x1c2l2ZT8KKyAtIHRhc2tzOiBsaXN0IG9mIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIHRoYXQgY3B1c2V0CisKK05ldyBjcHVzZXRzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSBta2RpciBzeXN0ZW0gY2FsbCBvciBzaGVsbAorY29tbWFuZC4gIFRoZSBwcm9wZXJ0aWVzIG9mIGEgY3B1c2V0LCBzdWNoIGFzIGl0cyBmbGFncywgYWxsb3dlZAorQ1BVcyBhbmQgTWVtb3J5IE5vZGVzLCBhbmQgYXR0YWNoZWQgdGFza3MsIGFyZSBtb2RpZmllZCBieSB3cml0aW5nCit0byB0aGUgYXBwcm9wcmlhdGUgZmlsZSBpbiB0aGF0IGNwdXNldHMgZGlyZWN0b3J5LCBhcyBsaXN0ZWQgYWJvdmUuCisKK1RoZSBuYW1lZCBoaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIG5lc3RlZCBjcHVzZXRzIGFsbG93cyBwYXJ0aXRpb25pbmcKK2EgbGFyZ2Ugc3lzdGVtIGludG8gbmVzdGVkLCBkeW5hbWljYWxseSBjaGFuZ2VhYmxlLCAic29mdC1wYXJ0aXRpb25zIi4KKworVGhlIGF0dGFjaG1lbnQgb2YgZWFjaCB0YXNrLCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBhdCBmb3JrIGJ5IGFueQorY2hpbGRyZW4gb2YgdGhhdCB0YXNrLCB0byBhIGNwdXNldCBhbGxvd3Mgb3JnYW5pemluZyB0aGUgd29yayBsb2FkCitvbiBhIHN5c3RlbSBpbnRvIHJlbGF0ZWQgc2V0cyBvZiB0YXNrcyBzdWNoIHRoYXQgZWFjaCBzZXQgaXMgY29uc3RyYWluZWQKK3RvIHVzaW5nIHRoZSBDUFVzIGFuZCBNZW1vcnkgTm9kZXMgb2YgYSBwYXJ0aWN1bGFyIGNwdXNldC4gIEEgdGFzaworbWF5IGJlIHJlLWF0dGFjaGVkIHRvIGFueSBvdGhlciBjcHVzZXQsIGlmIGFsbG93ZWQgYnkgdGhlIHBlcm1pc3Npb25zCitvbiB0aGUgbmVjZXNzYXJ5IGNwdXNldCBmaWxlIHN5c3RlbSBkaXJlY3Rvcmllcy4KKworU3VjaCBtYW5hZ2VtZW50IG9mIGEgc3lzdGVtICJpbiB0aGUgbGFyZ2UiIGludGVncmF0ZXMgc21vb3RobHkgd2l0aAordGhlIGRldGFpbGVkIHBsYWNlbWVudCBkb25lIG9uIGluZGl2aWR1YWwgdGFza3MgYW5kIG1lbW9yeSByZWdpb25zCit1c2luZyB0aGUgc2NoZWRfc2V0YWZmaW5pdHksIG1iaW5kIGFuZCBzZXRfbWVtcG9saWN5IHN5c3RlbSBjYWxscy4KKworVGhlIGZvbGxvd2luZyBydWxlcyBhcHBseSB0byBlYWNoIGNwdXNldDoKKworIC0gSXRzIENQVXMgYW5kIE1lbW9yeSBOb2RlcyBtdXN0IGJlIGEgc3Vic2V0IG9mIGl0cyBwYXJlbnRzLgorIC0gSXQgY2FuIG9ubHkgYmUgbWFya2VkIGV4Y2x1c2l2ZSBpZiBpdHMgcGFyZW50IGlzLgorIC0gSWYgaXRzIGNwdSBvciBtZW1vcnkgaXMgZXhjbHVzaXZlLCB0aGV5IG1heSBub3Qgb3ZlcmxhcCBhbnkgc2libGluZy4KKworVGhlc2UgcnVsZXMsIGFuZCB0aGUgbmF0dXJhbCBoaWVyYXJjaHkgb2YgY3B1c2V0cywgZW5hYmxlIGVmZmljaWVudAorZW5mb3JjZW1lbnQgb2YgdGhlIGV4Y2x1c2l2ZSBndWFyYW50ZWUsIHdpdGhvdXQgaGF2aW5nIHRvIHNjYW4gYWxsCitjcHVzZXRzIGV2ZXJ5IHRpbWUgYW55IG9mIHRoZW0gY2hhbmdlIHRvIGVuc3VyZSBub3RoaW5nIG92ZXJsYXBzIGEKK2V4Y2x1c2l2ZSBjcHVzZXQuICBBbHNvLCB0aGUgdXNlIG9mIGEgTGludXggdmlydHVhbCBmaWxlIHN5c3RlbSAodmZzKQordG8gcmVwcmVzZW50IHRoZSBjcHVzZXQgaGllcmFyY2h5IHByb3ZpZGVzIGZvciBhIGZhbWlsaWFyIHBlcm1pc3Npb24KK2FuZCBuYW1lIHNwYWNlIGZvciBjcHVzZXRzLCB3aXRoIGEgbWluaW11bSBvZiBhZGRpdGlvbmFsIGtlcm5lbCBjb2RlLgorCisxLjQgSG93IGRvIEkgdXNlIGNwdXNldHMgPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gbWluaW1pemUgdGhlIGltcGFjdCBvZiBjcHVzZXRzIG9uIGNyaXRpY2FsIGtlcm5lbAorY29kZSwgc3VjaCBhcyB0aGUgc2NoZWR1bGVyLCBhbmQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGtlcm5lbAorZG9lcyBub3Qgc3VwcG9ydCBvbmUgdGFzayB1cGRhdGluZyB0aGUgbWVtb3J5IHBsYWNlbWVudCBvZiBhbm90aGVyCit0YXNrIGRpcmVjdGx5LCB0aGUgaW1wYWN0IG9uIGEgdGFzayBvZiBjaGFuZ2luZyBpdHMgY3B1c2V0IENQVQorb3IgTWVtb3J5IE5vZGUgcGxhY2VtZW50LCBvciBvZiBjaGFuZ2luZyB0byB3aGljaCBjcHVzZXQgYSB0YXNrCitpcyBhdHRhY2hlZCwgaXMgc3VidGxlLgorCitJZiBhIGNwdXNldCBoYXMgaXRzIE1lbW9yeSBOb2RlcyBtb2RpZmllZCwgdGhlbiBmb3IgZWFjaCB0YXNrIGF0dGFjaGVkCit0byB0aGF0IGNwdXNldCwgdGhlIG5leHQgdGltZSB0aGF0IHRoZSBrZXJuZWwgYXR0ZW1wdHMgdG8gYWxsb2NhdGUKK2EgcGFnZSBvZiBtZW1vcnkgZm9yIHRoYXQgdGFzaywgdGhlIGtlcm5lbCB3aWxsIG5vdGljZSB0aGUgY2hhbmdlCitpbiB0aGUgdGFza3MgY3B1c2V0LCBhbmQgdXBkYXRlIGl0cyBwZXItdGFzayBtZW1vcnkgcGxhY2VtZW50IHRvCityZW1haW4gd2l0aGluIHRoZSBuZXcgY3B1c2V0cyBtZW1vcnkgcGxhY2VtZW50LiAgSWYgdGhlIHRhc2sgd2FzIHVzaW5nCittZW1wb2xpY3kgTVBPTF9CSU5ELCBhbmQgdGhlIG5vZGVzIHRvIHdoaWNoIGl0IHdhcyBib3VuZCBvdmVybGFwIHdpdGgKK2l0cyBuZXcgY3B1c2V0LCB0aGVuIHRoZSB0YXNrIHdpbGwgY29udGludWUgdG8gdXNlIHdoYXRldmVyIHN1YnNldAorb2YgTVBPTF9CSU5EIG5vZGVzIGFyZSBzdGlsbCBhbGxvd2VkIGluIHRoZSBuZXcgY3B1c2V0LiAgSWYgdGhlIHRhc2sKK3dhcyB1c2luZyBNUE9MX0JJTkQgYW5kIG5vdyBub25lIG9mIGl0cyBNUE9MX0JJTkQgbm9kZXMgYXJlIGFsbG93ZWQKK2luIHRoZSBuZXcgY3B1c2V0LCB0aGVuIHRoZSB0YXNrIHdpbGwgYmUgZXNzZW50aWFsbHkgdHJlYXRlZCBhcyBpZiBpdAord2FzIE1QT0xfQklORCBib3VuZCB0byB0aGUgbmV3IGNwdXNldCAoZXZlbiB0aG91Z2ggaXRzIG51bWEgcGxhY2VtZW50LAorYXMgcXVlcmllZCBieSBnZXRfbWVtcG9saWN5KCksIGRvZXNuJ3QgY2hhbmdlKS4gIElmIGEgdGFzayBpcyBtb3ZlZAorZnJvbSBvbmUgY3B1c2V0IHRvIGFub3RoZXIsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGFkanVzdCB0aGUgdGFza3MKK21lbW9yeSBwbGFjZW1lbnQsIGFzIGFib3ZlLCB0aGUgbmV4dCB0aW1lIHRoYXQgdGhlIGtlcm5lbCBhdHRlbXB0cwordG8gYWxsb2NhdGUgYSBwYWdlIG9mIG1lbW9yeSBmb3IgdGhhdCB0YXNrLgorCitJZiBhIGNwdXNldCBoYXMgaXRzIENQVXMgbW9kaWZpZWQsIHRoZW4gZWFjaCB0YXNrIHVzaW5nIHRoYXQKK2NwdXNldCBkb2VzIF9ub3RfIGNoYW5nZSBpdHMgYmVoYXZpb3IgYXV0b21hdGljYWxseS4gIEluIG9yZGVyIHRvCittaW5pbWl6ZSB0aGUgaW1wYWN0IG9uIHRoZSBjcml0aWNhbCBzY2hlZHVsaW5nIGNvZGUgaW4gdGhlIGtlcm5lbCwKK3Rhc2tzIHdpbGwgY29udGludWUgdG8gdXNlIHRoZWlyIHByaW9yIENQVSBwbGFjZW1lbnQgdW50aWwgdGhleQorYXJlIHJlYm91bmQgdG8gdGhlaXIgY3B1c2V0LCBieSByZXdyaXRpbmcgdGhlaXIgcGlkIHRvIHRoZSAndGFza3MnCitmaWxlIG9mIHRoZWlyIGNwdXNldC4gIElmIGEgdGFzayBoYWQgYmVlbiBib3VuZCB0byBzb21lIHN1YnNldCBvZiBpdHMKK2NwdXNldCB1c2luZyB0aGUgc2NoZWRfc2V0YWZmaW5pdHkoKSBjYWxsLCBhbmQgaWYgYW55IG9mIHRoYXQgc3Vic2V0CitpcyBzdGlsbCBhbGxvd2VkIGluIGl0cyBuZXcgY3B1c2V0IHNldHRpbmdzLCB0aGVuIHRoZSB0YXNrIHdpbGwgYmUKK3Jlc3RyaWN0ZWQgdG8gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgQ1BVcyBpdCB3YXMgYWxsb3dlZCBvbiBiZWZvcmUsCithbmQgaXRzIG5ldyBjcHVzZXQgQ1BVIHBsYWNlbWVudC4gIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhlcmUgaXMKK25vIG92ZXJsYXAgYmV0d2VlbiBhIHRhc2tzIHByaW9yIHBsYWNlbWVudCBhbmQgaXRzIG5ldyBjcHVzZXQgQ1BVCitwbGFjZW1lbnQsIHRoZW4gdGhlIHRhc2sgd2lsbCBiZSBhbGxvd2VkIHRvIHJ1biBvbiBhbnkgQ1BVIGFsbG93ZWQKK2luIGl0cyBuZXcgY3B1c2V0LiAgSWYgYSB0YXNrIGlzIG1vdmVkIGZyb20gb25lIGNwdXNldCB0byBhbm90aGVyLAoraXRzIENQVSBwbGFjZW1lbnQgaXMgdXBkYXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgaWYgdGhlIHRhc2tzIHBpZCBpcworcmV3cml0dGVuIHRvIHRoZSAndGFza3MnIGZpbGUgb2YgaXRzIGN1cnJlbnQgY3B1c2V0LgorCitJbiBzdW1tYXJ5LCB0aGUgbWVtb3J5IHBsYWNlbWVudCBvZiBhIHRhc2sgd2hvc2UgY3B1c2V0IGlzIGNoYW5nZWQgaXMKK3VwZGF0ZWQgYnkgdGhlIGtlcm5lbCwgb24gdGhlIG5leHQgYWxsb2NhdGlvbiBvZiBhIHBhZ2UgZm9yIHRoYXQgdGFzaywKK2J1dCB0aGUgcHJvY2Vzc29yIHBsYWNlbWVudCBpcyBub3QgdXBkYXRlZCwgdW50aWwgdGhhdCB0YXNrcyBwaWQgaXMKK3Jld3JpdHRlbiB0byB0aGUgJ3Rhc2tzJyBmaWxlIG9mIGl0cyBjcHVzZXQuICBUaGlzIGlzIGRvbmUgdG8gYXZvaWQKK2ltcGFjdGluZyB0aGUgc2NoZWR1bGVyIGNvZGUgaW4gdGhlIGtlcm5lbCB3aXRoIGEgY2hlY2sgZm9yIGNoYW5nZXMKK2luIGEgdGFza3MgcHJvY2Vzc29yIHBsYWNlbWVudC4KKworVGhlcmUgaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBhYm92ZS4gIElmIGhvdHBsdWcgZnVudGlvbmFsaXR5IGlzIHVzZWQKK3RvIHJlbW92ZSBhbGwgdGhlIENQVXMgdGhhdCBhcmUgY3VycmVudGx5IGFzc2lnbmVkIHRvIGEgY3B1c2V0LAordGhlbiB0aGUga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGNwdXNfYWxsb3dlZCBvZiBhbGwKK3Rhc2tzIGF0dGFjaGVkIHRvIENQVXMgaW4gdGhhdCBjcHVzZXQgd2l0aCB0aGUgb25saW5lIENQVXMgb2YgdGhlCituZWFyZXN0IHBhcmVudCBjcHVzZXQgdGhhdCBzdGlsbCBoYXMgc29tZSBDUFVzIG9ubGluZS4gIFdoZW4gbWVtb3J5Citob3RwbHVnIGZ1bmN0aW9uYWxpdHkgZm9yIHJlbW92aW5nIE1lbW9yeSBOb2RlcyBpcyBhdmFpbGFibGUsIGEKK3NpbWlsYXIgZXhjZXB0aW9uIGlzIGV4cGVjdGVkIHRvIGFwcGx5IHRoZXJlIGFzIHdlbGwuICBJbiBnZW5lcmFsLAordGhlIGtlcm5lbCBwcmVmZXJzIHRvIHZpb2xhdGUgY3B1c2V0IHBsYWNlbWVudCwgb3ZlciBzdGFydmluZyBhIHRhc2sKK3RoYXQgaGFzIGhhZCBhbGwgaXRzIGFsbG93ZWQgQ1BVcyBvciBNZW1vcnkgTm9kZXMgdGFrZW4gb2ZmbGluZS4gIFVzZXIKK2NvZGUgc2hvdWxkIHJlY29uZmlndXJlIGNwdXNldHMgdG8gb25seSByZWZlciB0byBvbmxpbmUgQ1BVcyBhbmQgTWVtb3J5CitOb2RlcyB3aGVuIHVzaW5nIGhvdHBsdWcgdG8gYWRkIG9yIHJlbW92ZSBzdWNoIHJlc291cmNlcy4KKworVGhlcmUgaXMgYSBzZWNvbmQgZXhjZXB0aW9uIHRvIHRoZSBhYm92ZS4gIEdGUF9BVE9NSUMgcmVxdWVzdHMgYXJlCitrZXJuZWwgaW50ZXJuYWwgYWxsb2NhdGlvbnMgdGhhdCBtdXN0IGJlIHNhdGlzZmllZCwgaW1tZWRpYXRlbHkuCitUaGUga2VybmVsIG1heSBkcm9wIHNvbWUgcmVxdWVzdCwgaW4gcmFyZSBjYXNlcyBldmVuIHBhbmljLCBpZiBhCitHRlBfQVRPTUlDIGFsbG9jIGZhaWxzLiAgSWYgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlzZmllZCB3aXRoaW4KK3RoZSBjdXJyZW50IHRhc2tzIGNwdXNldCwgdGhlbiB3ZSByZWxheCB0aGUgY3B1c2V0LCBhbmQgbG9vayBmb3IKK21lbW9yeSBhbnl3aGVyZSB3ZSBjYW4gZmluZCBpdC4gIEl0J3MgYmV0dGVyIHRvIHZpb2xhdGUgdGhlIGNwdXNldAordGhhbiBzdHJlc3MgdGhlIGtlcm5lbC4KKworVG8gc3RhcnQgYSBuZXcgam9iIHRoYXQgaXMgdG8gYmUgY29udGFpbmVkIHdpdGhpbiBhIGNwdXNldCwgdGhlIHN0ZXBzIGFyZToKKworIDEpIG1rZGlyIC9kZXYvY3B1c2V0CisgMikgbW91bnQgLXQgY3B1c2V0IG5vbmUgL2Rldi9jcHVzZXQKKyAzKSBDcmVhdGUgdGhlIG5ldyBjcHVzZXQgYnkgZG9pbmcgbWtkaXIncyBhbmQgd3JpdGUncyAob3IgZWNobydzKSBpbgorICAgIHRoZSAvZGV2L2NwdXNldCB2aXJ0dWFsIGZpbGUgc3lzdGVtLgorIDQpIFN0YXJ0IGEgdGFzayB0aGF0IHdpbGwgYmUgdGhlICJmb3VuZGluZyBmYXRoZXIiIG9mIHRoZSBuZXcgam9iLgorIDUpIEF0dGFjaCB0aGF0IHRhc2sgdG8gdGhlIG5ldyBjcHVzZXQgYnkgd3JpdGluZyBpdHMgcGlkIHRvIHRoZQorICAgIC9kZXYvY3B1c2V0IHRhc2tzIGZpbGUgZm9yIHRoYXQgY3B1c2V0LgorIDYpIGZvcmssIGV4ZWMgb3IgY2xvbmUgdGhlIGpvYiB0YXNrcyBmcm9tIHRoaXMgZm91bmRpbmcgZmF0aGVyIHRhc2suCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHdpbGwgc2V0dXAgYSBjcHVzZXQKK25hbWVkICJDaGFybGllIiwgY29udGFpbmluZyBqdXN0IENQVXMgMiBhbmQgMywgYW5kIE1lbW9yeSBOb2RlIDEsCithbmQgdGhlbiBzdGFydCBhIHN1YnNoZWxsICdzaCcgaW4gdGhhdCBjcHVzZXQ6CisKKyAgbW91bnQgLXQgY3B1c2V0IG5vbmUgL2Rldi9jcHVzZXQKKyAgY2QgL2Rldi9jcHVzZXQKKyAgbWtkaXIgQ2hhcmxpZQorICBjZCBDaGFybGllCisgIC9iaW4vZWNobyAyLTMgPiBjcHVzCisgIC9iaW4vZWNobyAxID4gbWVtcworICAvYmluL2VjaG8gJCQgPiB0YXNrcworICBzaAorICAjIFRoZSBzdWJzaGVsbCAnc2gnIGlzIG5vdyBydW5uaW5nIGluIGNwdXNldCBDaGFybGllCisgICMgVGhlIG5leHQgbGluZSBzaG91bGQgZGlzcGxheSAnL0NoYXJsaWUnCisgIGNhdCAvcHJvYy9zZWxmL2NwdXNldAorCitJbiB0aGUgY2FzZSB0aGF0IGEgY2hhbmdlIG9mIGNwdXNldCBpbmNsdWRlcyB3YW50aW5nIHRvIG1vdmUgYWxyZWFkeQorYWxsb2NhdGVkIG1lbW9yeSBwYWdlcywgY29uc2lkZXIgZnVydGhlciB0aGUgd29yayBvZiBJV0FNT1RPCitUb3NoaWhpcm8gPGl3YW1vdG9AdmFsaW51eC5jby5qcD4gZm9yIHBhZ2UgcmVtYXBwaW5nIGFuZCBtZW1vcnkKK2hvdHJlbW92YWwsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKworICBodHRwOi8vcGVvcGxlLnZhbGludXguY28uanAvfml3YW1vdG8vbWguaHRtbAorCitUaGUgaW50ZWdyYXRpb24gb2YgY3B1c2V0cyB3aXRoIHN1Y2ggbWVtb3J5IG1pZ3JhdGlvbiBpcyBub3QgeWV0CithdmFpbGFibGUuCisKK0luIHRoZSBmdXR1cmUsIGEgQyBsaWJyYXJ5IGludGVyZmFjZSB0byBjcHVzZXRzIHdpbGwgbGlrZWx5IGJlCithdmFpbGFibGUuICBGb3Igbm93LCB0aGUgb25seSB3YXkgdG8gcXVlcnkgb3IgbW9kaWZ5IGNwdXNldHMgaXMKK3ZpYSB0aGUgY3B1c2V0IGZpbGUgc3lzdGVtLCB1c2luZyB0aGUgdmFyaW91cyBjZCwgbWtkaXIsIGVjaG8sIGNhdCwKK3JtZGlyIGNvbW1hbmRzIGZyb20gdGhlIHNoZWxsLCBvciB0aGVpciBlcXVpdmFsZW50IGZyb20gQy4KKworVGhlIHNjaGVkX3NldGFmZmluaXR5IGNhbGxzIGNhbiBhbHNvIGJlIGRvbmUgYXQgdGhlIHNoZWxsIHByb21wdCB1c2luZworU0dJJ3MgcnVub24gb3IgUm9iZXJ0IExvdmUncyB0YXNrc2V0LiAgVGhlIG1iaW5kIGFuZCBzZXRfbWVtcG9saWN5CitjYWxscyBjYW4gYmUgZG9uZSBhdCB0aGUgc2hlbGwgcHJvbXB0IHVzaW5nIHRoZSBudW1hY3RsIGNvbW1hbmQKKyhwYXJ0IG9mIEFuZGkgS2xlZW4ncyBudW1hIHBhY2thZ2UpLgorCisyLiBVc2FnZSBFeGFtcGxlcyBhbmQgU3ludGF4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzIuMSBCYXNpYyBVc2FnZQorLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nLCBtb2RpZnlpbmcsIHVzaW5nIHRoZSBjcHVzZXRzIGNhbiBiZSBkb25lIHRocm91Z2ggdGhlIGNwdXNldAordmlydHVhbCBmaWxlc3lzdGVtLgorCitUbyBtb3VudCBpdCwgdHlwZToKKyMgbW91bnQgLXQgY3B1c2V0IG5vbmUgL2Rldi9jcHVzZXQKKworVGhlbiB1bmRlciAvZGV2L2NwdXNldCB5b3UgY2FuIGZpbmQgYSB0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCit0cmVlIG9mIHRoZSBjcHVzZXRzIGluIHRoZSBzeXN0ZW0uIEZvciBpbnN0YW5jZSwgL2Rldi9jcHVzZXQKK2lzIHRoZSBjcHVzZXQgdGhhdCBob2xkcyB0aGUgd2hvbGUgc3lzdGVtLgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgY3B1c2V0IHVuZGVyIC9kZXYvY3B1c2V0OgorIyBjZCAvZGV2L2NwdXNldAorIyBta2RpciBteV9jcHVzZXQKKworTm93IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgY3B1c2V0LgorIyBjZCBteV9jcHVzZXQKKworSW4gdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBmaW5kIHNldmVyYWwgZmlsZXM6CisjIGxzCitjcHVzICBjcHVfZXhjbHVzaXZlICBtZW1zICBtZW1fZXhjbHVzaXZlICB0YXNrcworCitSZWFkaW5nIHRoZW0gd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhpcyBjcHVzZXQ6Cit0aGUgQ1BVcyBhbmQgTWVtb3J5IE5vZGVzIGl0IGNhbiB1c2UsIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgdXNpbmcKK2l0LCBpdHMgcHJvcGVydGllcy4gIEJ5IHdyaXRpbmcgdG8gdGhlc2UgZmlsZXMgeW91IGNhbiBtYW5pcHVsYXRlCit0aGUgY3B1c2V0LgorCitTZXQgc29tZSBmbGFnczoKKyMgL2Jpbi9lY2hvIDEgPiBjcHVfZXhjbHVzaXZlCisKK0FkZCBzb21lIGNwdXM6CisjIC9iaW4vZWNobyAwLTcgPiBjcHVzCisKK05vdyBhdHRhY2ggeW91ciBzaGVsbCB0byB0aGlzIGNwdXNldDoKKyMgL2Jpbi9lY2hvICQkID4gdGFza3MKKworWW91IGNhbiBhbHNvIGNyZWF0ZSBjcHVzZXRzIGluc2lkZSB5b3VyIGNwdXNldCBieSB1c2luZyBta2RpciBpbiB0aGlzCitkaXJlY3RvcnkuCisjIG1rZGlyIG15X3N1Yl9jcworCitUbyByZW1vdmUgYSBjcHVzZXQsIGp1c3QgdXNlIHJtZGlyOgorIyBybWRpciBteV9zdWJfY3MKK1RoaXMgd2lsbCBmYWlsIGlmIHRoZSBjcHVzZXQgaXMgaW4gdXNlIChoYXMgY3B1c2V0cyBpbnNpZGUsIG9yIGhhcworcHJvY2Vzc2VzIGF0dGFjaGVkKS4KKworMi4yIEFkZGluZy9yZW1vdmluZyBjcHVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgc3ludGF4IHRvIHVzZSB3aGVuIHdyaXRpbmcgaW4gdGhlIGNwdXMgb3IgbWVtcyBmaWxlcworaW4gY3B1c2V0IGRpcmVjdG9yaWVzOgorCisjIC9iaW4vZWNobyAxLTQgPiBjcHVzCQktPiBzZXQgY3B1cyBsaXN0IHRvIGNwdXMgMSwyLDMsNAorIyAvYmluL2VjaG8gMSwyLDMsNCA+IGNwdXMJLT4gc2V0IGNwdXMgbGlzdCB0byBjcHVzIDEsMiwzLDQKKworMi4zIFNldHRpbmcgZmxhZ3MKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzeW50YXggaXMgdmVyeSBzaW1wbGU6CisKKyMgL2Jpbi9lY2hvIDEgPiBjcHVfZXhjbHVzaXZlIAktPiBzZXQgZmxhZyAnY3B1X2V4Y2x1c2l2ZScKKyMgL2Jpbi9lY2hvIDAgPiBjcHVfZXhjbHVzaXZlIAktPiB1bnNldCBmbGFnICdjcHVfZXhjbHVzaXZlJworCisyLjQgQXR0YWNoaW5nIHByb2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAvYmluL2VjaG8gUElEID4gdGFza3MKKworTm90ZSB0aGF0IGl0IGlzIFBJRCwgbm90IFBJRHMuIFlvdSBjYW4gb25seSBhdHRhY2ggT05FIHRhc2sgYXQgYSB0aW1lLgorSWYgeW91IGhhdmUgc2V2ZXJhbCB0YXNrcyB0byBhdHRhY2gsIHlvdSBoYXZlIHRvIGRvIGl0IG9uZSBhZnRlciBhbm90aGVyOgorCisjIC9iaW4vZWNobyBQSUQxID4gdGFza3MKKyMgL2Jpbi9lY2hvIFBJRDIgPiB0YXNrcworCS4uLgorIyAvYmluL2VjaG8gUElEbiA+IHRhc2tzCisKKworMy4gUXVlc3Rpb25zCis9PT09PT09PT09PT0KKworUTogd2hhdCdzIHVwIHdpdGggdGhpcyAnL2Jpbi9lY2hvJyA/CitBOiBiYXNoJ3MgYnVpbHRpbiAnZWNobycgY29tbWFuZCBkb2VzIG5vdCBjaGVjayBjYWxscyB0byB3cml0ZSgpIGFnYWluc3QKKyAgIGVycm9ycy4gSWYgeW91IHVzZSBpdCBpbiB0aGUgY3B1c2V0IGZpbGUgc3lzdGVtLCB5b3Ugd29uJ3QgYmUKKyAgIGFibGUgdG8gdGVsbCB3aGV0aGVyIGEgY29tbWFuZCBzdWNjZWVkZWQgb3IgZmFpbGVkLgorCitROiBXaGVuIEkgYXR0YWNoIHByb2Nlc3Nlcywgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGxpbmUgZ2V0cyByZWFsbHkgYXR0YWNoZWQgIQorQTogV2UgY2FuIG9ubHkgcmV0dXJuIG9uZSBlcnJvciBjb2RlIHBlciBjYWxsIHRvIHdyaXRlKCkuIFNvIHlvdSBzaG91bGQgYWxzbworICAgcHV0IG9ubHkgT05FIHBpZC4KKworNC4gQ29udGFjdAorPT09PT09PT09PQorCitXZWI6IGh0dHA6Ly93d3cuYnVsbG9wZW5zb3VyY2Uub3JnL2NwdXNldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcmlzL1JFQURNRSBiL0RvY3VtZW50YXRpb24vY3Jpcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1YTFkYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3Jpcy9SRUFETUUKQEAgLTAsMCArMSwxOTUgQEAKK0xpbnV4IDIuNCBvbiB0aGUgQ1JJUyBhcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyRJZDogUkVBRE1FLHYgMS43IDIwMDEvMDQvMTkgMTI6Mzg6MzIgYmpvcm53IEV4cCAkCisKK1RoaXMgaXMgYSBwb3J0IG9mIExpbnV4IDIuNCB0byBBeGlzIENvbW11bmljYXRpb25zIEVUUkFYIDEwMExYIGVtYmVkZGVkIAorbmV0d29yayBDUFUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENSSVMgYW5kIEVUUkFYIHBsZWFzZSBzZWUgZnVydGhlcgorYmVsb3cuCisKK0luIG9yZGVyIHRvIGNvbXBpbGUgdGhpcyB5b3UgbmVlZCBhIHZlcnNpb24gb2YgZ2NjIHdpdGggc3VwcG9ydCBmb3IgdGhlCitFVFJBWCBjaGlwIGZhbWlseS4gUGxlYXNlIHNlZSB0aGlzIGxpbmsgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIAorZG93bmxvYWQgdGhlIGNvbXBpbGVyIGFuZCBvdGhlciB0b29scyB1c2VmdWwgd2hlbiBidWlsZGluZyBhbmQgYm9vdGluZworc29mdHdhcmUgZm9yIHRoZSBFVFJBWCBwbGF0Zm9ybToKKworaHR0cDovL2RldmVsb3Blci5heGlzLmNvbS9kb2Mvc29mdHdhcmUvZGV2Ym9hcmRfbHgvaW5zdGFsbC1ob3d0by5odG1sCisKKzxtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGluIHRoaXMgZG9jdW1lbnQgbGF0ZXI+CisKK1doYXQgaXMgQ1JJUyA/CistLS0tLS0tLS0tLS0tLQorCitDUklTIGlzIGFuIGFjcm9ueW0gZm9yICdDb2RlIFJlZHVjZWQgSW5zdHJ1Y3Rpb24gU2V0Jy4gSXQgaXMgdGhlIENQVQorYXJjaGl0ZWN0dXJlIGluIEF4aXMgQ29tbXVuaWNhdGlvbiBBQidzIHJhbmdlIG9mIGVtYmVkZGVkIG5ldHdvcmsgQ1BVJ3MsCitjYWxsZWQgRVRSQVguIFRoZSBsYXRlc3QgQ1BVIGlzIGNhbGxlZCBFVFJBWCAxMDBMWCwgd2hlcmUgTFggc3RhbmRzIGZvcgorJ0xpbnV4JyBiZWNhdXNlIHRoZSBjaGlwIHdhcyBkZXNpZ25lZCB0byBiZSBhIGdvb2QgaG9zdCBmb3IgdGhlIExpbnV4CitvcGVyYXRpbmcgc3lzdGVtLgorCitUaGUgRVRSQVggMTAwTFggY2hpcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHJlZmVyZW5jZSwgcGxhc2Ugc2VlIHRoZSBwcmVzcy1yZWxlYXNlOgorCitodHRwOi8vd3d3LmF4aXMuY29tL25ld3MvdXMvMDAxMTAxX2V0cmF4Lmh0bQorCitUaGUgRVRSQVggMTAwTFggaXMgYSAxMDAgTUlQUyBwcm9jZXNzb3Igd2l0aCA4a0IgY2FjaGUsIE1NVSwgYW5kIGEgdmVyeSBicm9hZCAKK3JhbmdlIG9mICBidWlsdC1pbiBpbnRlcmZhY2VzLCBhbGwgd2l0aCBtb2Rlcm4gc2NhdHRlci9nYXRoZXIgRE1BLgorCitNZW1vcnkgaW50ZXJmYWNlczoKKworCSogU1JBTQorCSogTk9SLWZsYXNoL1JPTQorCSogRURPIG9yIHBhZ2UtbW9kZSBEUkFNCisJKiBTRFJBTQorCitJL08gaW50ZXJmYWNlczoKKworCSogb25lIDEwLzEwMCBNYml0L3MgZXRoZXJuZXQgY29udHJvbGxlcgorCSogZm91ciBzZXJpYWwtcG9ydHMgKHVwIHRvIDYgTWJpdC9zKQorCSogdHdvIHN5bmNocm9ub3VzIHNlcmlhbC1wb3J0cyBmb3IgbXVsdGltZWRpYSBjb2RlYydzIGV0Yy4KKwkqIFVTQiBob3N0IGNvbnRyb2xsZXIgYW5kIFVTQiBzbGF2ZQorCSogQVRBCisJKiBTQ1NJCisJKiB0d28gcGFyYWxsZWwtcG9ydHMKKwkqIHR3byBnZW5lcmljIDgtYml0IHBvcnRzCisJCisJKG5vdCBhbGwgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lIHRpbWUgZHVlIHRvIGNoaXAgcGluIAorICAgICAgICAgbXVsdGlwbGV4aW5nKQorCitUaGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgRVRSQVgsIHRoZSBFVFJBWCAxMDAsIHNpdHMgaW4gYWxtb3N0IGFsbCBvZgorQXhpcyBzaGlwcGluZyB0aGluLXNlcnZlcnMgbGlrZSB0aGUgQXhpcyAyMTAwIHdlYiBjYW1lcmEgb3IgdGhlIEVUUkFYIDEwMAorZGV2ZWxvcGVyLWJvYXJkLiBJdCBsYWNrcyBhbiBNTVUgc28gdGhlIExpbnV4IHdlIHJ1biBvbiB0aGF0IGlzIGEgdmVyc2lvbgorb2YgdUNsaW51eCAoTGludXggMi4wIHdpdGhvdXQgTU0tc3VwcG9ydCkgcG9ydGVkIHRvIHRoZSBDUklTIGFyY2hpdGVjdHVyZS4KK1RoZSBuZXcgTGludXggMi40IHBvcnQgaGFzIGZ1bGwgTU0gYW5kIG5lZWRzIGEgQ1BVIHdpdGggYW4gTU1VLCBzbyBpdCB3aWxsCitub3QgcnVuIG9uIHRoZSBFVFJBWCAxMDAuCisKK0EgdmVyc2lvbiBvZiB0aGUgQXhpcyBkZXZlbG9wZXItYm9hcmQgd2l0aCBFVFJBWCAxMDBMWCAocnVubmluZyBMaW51eAorMi40KSBpcyBub3cgYXZhaWxhYmxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGRldmVsb3Blci5heGlzLmNvbS4KKworCitCb290bG9nCistLS0tLS0tCisKK0p1c3QgYXMgYW4gZXhhbXBsZSwgdGhpcyBpcyB0aGUgZGVidWctb3V0cHV0IGZyb20gYSBib290IG9mIExpbnV4IDIuNCBvbgorYSBib2FyZCB3aXRoIEVUUkFYIDEwMExYLiBUaGUgZGlzcGxheWVkIEJvZ29NSVBTIHZhbHVlIGlzIDUgdGltZXMgdG9vIHNtYWxsIDopCitBdCB0aGUgZW5kIHlvdSBzZWUgc29tZSB1c2VyLW1vZGUgcHJvZ3JhbXMgYm9vdGluZyBsaWtlIHRlbG5ldCBhbmQgZnRwIGRhZW1vbnMuCisKK0xpbnV4IHZlcnNpb24gMi40LjEgKGJqb3Jud0Bnb2R6aWxsYS5heGlzLnNlKSAoZ2NjIHZlcnNpb24gMi45NiAyMDAwMDQyNyAoZXhwZXJpbWVudGFsKSkgIzIwNyBXZWQgRmViIDIxIDE1OjQ4OjE1IENFVCAyMDAxCitST00gZnMgaW4gUkFNLCBzaXplIDEzNzYyNTYgYnl0ZXMKK1NldHRpbmcgdXAgcGFnaW5nIGFuZCB0aGUgTU1VLgorT24gbm9kZSAwIHRvdGFscGFnZXM6IDIwNDgKK3pvbmUoMCk6IDIwNDggcGFnZXMuCit6b25lKDEpOiAwIHBhZ2VzLgorem9uZSgyKTogMCBwYWdlcy4KK0xpbnV4L0NSSVMgcG9ydCBvbiBFVFJBWCAxMDBMWCAoYykgMjAwMSBBeGlzIENvbW11bmljYXRpb25zIEFCCitLZXJuZWwgY29tbWFuZCBsaW5lOiAKK0NhbGlicmF0aW5nIGRlbGF5IGxvb3AuLi4gMTkuOTEgQm9nb01JUFMKK01lbW9yeTogMTM4NzJrLzE2Mzg0ayBhdmFpbGFibGUgKDU4N2sga2VybmVsIGNvZGUsIDI1MTJrIHJlc2VydmVkLCA0NGsgZGF0YSwgMjRrIGluaXQpCitrbWVtX2NyZWF0ZTogRm9yY2luZyBzaXplIHdvcmQgYWxpZ25tZW50IC0gdm1fYXJlYV9zdHJ1Y3QKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSBmaWxwCitEZW50cnktY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAyMDQ4IChvcmRlcjogMSwgMTYzODQgYnl0ZXMpCitCdWZmZXItY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAyMDQ4IChvcmRlcjogMCwgODE5MiBieXRlcykKK1BhZ2UtY2FjaGUgaGFzaCB0YWJsZSBlbnRyaWVzOiAyMDQ4IChvcmRlcjogMCwgODE5MiBieXRlcykKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSBraW9idWYKK2ttZW1fY3JlYXRlOiBGb3JjaW5nIHNpemUgd29yZCBhbGlnbm1lbnQgLSBiZGV2X2NhY2hlCitJbm9kZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDEwMjQgKG9yZGVyOiAwLCA4MTkyIGJ5dGVzKQora21lbV9jcmVhdGU6IEZvcmNpbmcgc2l6ZSB3b3JkIGFsaWdubWVudCAtIGlub2RlX2NhY2hlCitQT1NJWCBjb25mb3JtYW5jZSB0ZXN0aW5nIGJ5IFVOSUZJWAorTGludXggTkVUNC4wIGZvciBMaW51eCAyLjQKK0Jhc2VkIHVwb24gU3dhbnNlYSBVbml2ZXJzaXR5IENvbXB1dGVyIFNvY2lldHkgTkVUMy4wMzkKK1N0YXJ0aW5nIGtzd2FwZCB2MS44CitrbWVtX2NyZWF0ZTogRm9yY2luZyBzaXplIHdvcmQgYWxpZ25tZW50IC0gZmlsZSBsb2NrIGNhY2hlCitrbWVtX2NyZWF0ZTogRm9yY2luZyBzaXplIHdvcmQgYWxpZ25tZW50IC0gYmxrZGV2X3JlcXVlc3RzCitibG9jazogcXVldWVkIHNlY3RvcnMgbWF4L2xvdyA5MTA5a0IvMzAzNmtCLCA2NCBzbG90cyBwZXIgcXVldWUKK0VUUkFYIDEwMExYIDEwLzEwME1CaXQgZXRoZXJuZXQgdjIuMCAoYykgMjAwMCBBeGlzIENvbW11bmljYXRpb25zIEFCCitldGgwIGluaXRpYWxpemVkCitldGgwOiBjaGFuZ2VkIE1BQyB0byAwMDo0MDo4QzpDRDowMDowMAorRVRSQVggMTAwTFggc2VyaWFsLWRyaXZlciAkUmV2aXNpb246IDEuNyAkLCAoYykgMjAwMCBBeGlzIENvbW11bmljYXRpb25zIEFCCit0dHlTMCBhdCAweGIwMDAwMDYwIGlzIGEgYnVpbHRpbiBVQVJUIHdpdGggRE1BCit0dHlTMSBhdCAweGIwMDAwMDY4IGlzIGEgYnVpbHRpbiBVQVJUIHdpdGggRE1BCit0dHlTMiBhdCAweGIwMDAwMDcwIGlzIGEgYnVpbHRpbiBVQVJUIHdpdGggRE1BCit0dHlTMyBhdCAweGIwMDAwMDc4IGlzIGEgYnVpbHRpbiBVQVJUIHdpdGggRE1BCitBeGlzIGZsYXNoIG1hcHBpbmc6IDIwMDAwMCBhdCA1MDAwMDAwMAorQXhpcyBmbGFzaDogRm91bmQgMSB4MTYgQ0ZJIGRldmljZSBhdCAweDAgaW4gMTYgYml0IG1vZGUKKyBBbWQvRnVqaXRzdSBFeHRlbmRlZCBRdWVyeSBUYWJsZSB2MS4wIGF0IDB4MDA0MAorQXhpcyBmbGFzaDogSkVERUMgRGV2aWNlIElEIGlzIDB4QzQuIEFzc3VtaW5nIGJyb2tlbiBDRkkgdGFibGUuCitBeGlzIGZsYXNoOiBTd2FwcGluZyBlcmFzZSByZWdpb25zIGZvciBicm9rZW4gQ0ZJIHRhYmxlLgorbnVtYmVyIG9mIENGSSBjaGlwczogMQorIFVzaW5nIGRlZmF1bHQgcGFydGl0aW9uIHRhYmxlCitJMkMgZHJpdmVyIHYyLjIsIChjKSAxOTk5LTIwMDEgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorRVRSQVggMTAwTFggR1BJTyBkcml2ZXIgdjIuMSwgKGMpIDIwMDEgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorTkVUNDogTGludXggVENQL0lQIDEuMCBmb3IgTkVUNC4wCitJUCBQcm90b2NvbHM6IElDTVAsIFVEUCwgVENQCitrbWVtX2NyZWF0ZTogRm9yY2luZyBzaXplIHdvcmQgYWxpZ25tZW50IC0gaXBfZHN0X2NhY2hlCitJUDogcm91dGluZyBjYWNoZSBoYXNoIHRhYmxlIG9mIDEwMjQgYnVja2V0cywgOEtieXRlcworVENQOiBIYXNoIHRhYmxlcyBjb25maWd1cmVkIChlc3RhYmxpc2hlZCAyMDQ4IGJpbmQgMjA0OCkKK05FVDQ6IFVuaXggZG9tYWluIHNvY2tldHMgMS4wL1NNUCBmb3IgTGludXggTkVUNC4wLgorVkZTOiBNb3VudGVkIHJvb3QgKGNyYW1mcyBmaWxlc3lzdGVtKSByZWFkb25seS4KK0luaXQgc3RhcnRzIHVwLi4uCitNb3VudGVkIG5vbmUgb24gL3Byb2Mgb2suCitTZXR0aW5nIHVwIGV0aDAgd2l0aCBpcCAxMC4xMy45LjExNiBhbmQgbWFjIDAwOjQwOjhjOjE4OjA0OjYwCitldGgwOiBjaGFuZ2VkIE1BQyB0byAwMDo0MDo4QzoxODowNDo2MAorU2V0dGluZyB1cCBsbyB3aXRoIGlwIDEyNy4wLjAuMQorRGVmYXVsdCBnYXRld2F5IGlzIDEwLjEzLjkuMQorSG9zdG5hbWUgaXMgYmJveDEKK1RlbG5ldGQgc3RhcnRpbmcsIHVzaW5nIHBvcnQgMjMuCisgIHVzaW5nIC9iaW4vc2FzaCBhcyBzaGVsbC4KK3NmdHBkWzE1XTogc2Z0cGQgJFJldmlzaW9uOiAxLjcgJCBzdGFydGluZyB1cAorCisKKworQW5kIGhlcmUgaXMgaG93IHNvbWUgL3Byb2MgZW50cmllcyBsb29rOgorCisxNyMgY2QgL3Byb2MKKzE3IyBjYXQgY3B1aW5mbworY3B1ICAgICAgICAgICAgIDogQ1JJUworY3B1IHJldmlzaW9uICAgIDogMTAKK2NwdSBtb2RlbCAgICAgICA6IEVUUkFYIDEwMExYCitjYWNoZSBzaXplICAgICAgOiA4IGtCCitmcHUgICAgICAgICAgICAgOiBubworbW11ICAgICAgICAgICAgIDogeWVzCitldGhlcm5ldCAgICAgICAgOiAxMC8xMDAgTWJwcwordG9rZW4gcmluZyAgICAgIDogbm8KK3Njc2kgICAgICAgICAgICA6IHllcworYXRhICAgICAgICAgICAgIDogeWVzCit1c2IgICAgICAgICAgICAgOiB5ZXMKK2JvZ29taXBzICAgICAgICA6IDk5Ljg0CisKKzE3IyBjYXQgbWVtaW5mbworICAgICAgICB0b3RhbDogICAgdXNlZDogICAgZnJlZTogIHNoYXJlZDogYnVmZmVyczogIGNhY2hlZDoKK01lbTogICA3MDI4NzM2ICAgOTI1Njk2ICA2MTAzMDQwICAgMTE0Njg4ICAgICAgICAwICAgMjI5Mzc2CitTd2FwOiAgICAgICAgMCAgICAgICAgMCAgICAgICAgMAorTWVtVG90YWw6ICAgICAgICAgNjg2NCBrQgorTWVtRnJlZTogICAgICAgICAgNTk2MCBrQgorTWVtU2hhcmVkOiAgICAgICAgIDExMiBrQgorQnVmZmVyczogICAgICAgICAgICAgMCBrQgorQ2FjaGVkOiAgICAgICAgICAgIDIyNCBrQgorQWN0aXZlOiAgICAgICAgICAgIDIyNCBrQgorSW5hY3RfZGlydHk6ICAgICAgICAgMCBrQgorSW5hY3RfY2xlYW46ICAgICAgICAgMCBrQgorSW5hY3RfdGFyZ2V0OiAgICAgICAgMCBrQgorSGlnaFRvdGFsOiAgICAgICAgICAgMCBrQgorSGlnaEZyZWU6ICAgICAgICAgICAgMCBrQgorTG93VG90YWw6ICAgICAgICAgNjg2NCBrQgorTG93RnJlZTogICAgICAgICAgNTk2MCBrQgorU3dhcFRvdGFsOiAgICAgICAgICAgMCBrQgorU3dhcEZyZWU6ICAgICAgICAgICAgMCBrQgorMTcjIGxzIC1sIC9iaW4KKy1yd3hyLXhyLXggIDEgMzQyICAgICAgMTAwICAgICAgICAgMTAzNTYgIEphbiAwMSAwMDowMCBpZmNvbmZpZworLXJ3eHIteHIteCAgMSAzNDIgICAgICAxMDAgICAgICAgICAxNzU0OCAgSmFuIDAxIDAwOjAwIGluaXQKKy1yd3hyLXhyLXggIDEgMzQyICAgICAgMTAwICAgICAgICAgIDk0ODggIEphbiAwMSAwMDowMCByb3V0ZQorLXJ3eHIteHIteCAgMSAzNDIgICAgICAxMDAgICAgICAgICA0NjAzNiAgSmFuIDAxIDAwOjAwIHNmdHBkCistcnd4ci14ci14ICAxIDM0MiAgICAgIDEwMCAgICAgICAgIDQ4MTA0ICBKYW4gMDEgMDA6MDAgc2gKKy1yd3hyLXhyLXggIDEgMzQyICAgICAgMTAwICAgICAgICAgMTYyNTIgIEphbiAwMSAwMDowMCB0ZWxuZXRkCisKKworKEFsbCBwcm9ncmFtcyBhcmUgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGxpYmMgYXQgdGhpcyBwb2ludCAtIHdlIGhhdmUgbm90IHBvcnRlZCB0aGUKKyBzaGFyZWQgbGlicmFyaWVzIHlldCkKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDViNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0CkBAIC0wLDAgKzEsMjQ0IEBACisKKyAgICAgICAgICAgICAgICAgICAgU2NhdHRlcmxpc3QgQ3J5cHRvZ3JhcGhpYyBBUEkKKyAgICAgICAgICAgICAgICAgICAKK0lOVFJPRFVDVElPTgorCitUaGUgU2NhdHRlcmxpc3QgQ3J5cHRvIEFQSSB0YWtlcyBwYWdlIHZlY3RvcnMgKHNjYXR0ZXJsaXN0cykgYXMKK2FyZ3VtZW50cywgYW5kIHdvcmtzIGRpcmVjdGx5IG9uIHBhZ2VzLiAgSW4gc29tZSBjYXNlcyAoZS5nLiBFQ0IKK21vZGUgY2lwaGVycyksIHRoaXMgd2lsbCBhbGxvdyBmb3IgcGFnZXMgdG8gYmUgZW5jcnlwdGVkIGluLXBsYWNlCit3aXRoIG5vIGNvcHlpbmcuCisKK09uZSBvZiB0aGUgaW5pdGlhbCBnb2FscyBvZiB0aGlzIGRlc2lnbiB3YXMgdG8gcmVhZGlseSBzdXBwb3J0IElQc2VjLAorc28gdGhhdCBwcm9jZXNzaW5nIGNhbiBiZSBhcHBsaWVkIHRvIHBhZ2VkIHNrYidzIHdpdGhvdXQgdGhlIG5lZWQKK2ZvciBsaW5lYXJpemF0aW9uLgorCisKK0RFVEFJTFMKKworQXQgdGhlIGxvd2VzdCBsZXZlbCBhcmUgYWxnb3JpdGhtcywgd2hpY2ggcmVnaXN0ZXIgZHluYW1pY2FsbHkgd2l0aCB0aGUKK0FQSS4KKworJ1RyYW5zZm9ybXMnIGFyZSB1c2VyLWluc3RhbnRpYXRlZCBvYmplY3RzLCB3aGljaCBtYWludGFpbiBzdGF0ZSwgaGFuZGxlIGFsbAorb2YgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIChlLmcuIG1hbmlwdWxhdGluZyBwYWdlIHZlY3RvcnMpLCBwcm92aWRlIGFuIAorYWJzdHJhY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtcywgYW5kIGhhbmRsZSBjb21tb24gbG9naWNhbCAKK29wZXJhdGlvbnMgKGUuZy4gY2lwaGVyIG1vZGVzLCBITUFDIGZvciBkaWdlc3RzKS4gIEhvd2V2ZXIsIGF0IHRoZSB1c2VyIAorbGV2ZWwgdGhleSBhcmUgdmVyeSBzaW1wbGUuCisKK0NvbmNlcHR1YWxseSwgdGhlIEFQSSBsYXllcmluZyBsb29rcyBsaWtlIHRoaXM6CisKKyAgW3RyYW5zZm9ybSBhcGldICAodXNlciBpbnRlcmZhY2UpCisgIFt0cmFuc2Zvcm0gb3BzXSAgKHBlci10eXBlIGxvZ2ljIGdsdWUgZS5nLiBjaXBoZXIuYywgZGlnZXN0LmMpCisgIFthbGdvcml0aG0gYXBpXSAgKGZvciByZWdpc3RlcmluZyBhbGdvcml0aG1zKQorICAKK1RoZSBpZGVhIGlzIHRvIG1ha2UgdGhlIHVzZXIgaW50ZXJmYWNlIGFuZCBhbGdvcml0aG0gcmVnaXN0cmF0aW9uIEFQSQordmVyeSBzaW1wbGUsIHdoaWxlIGhpZGluZyB0aGUgY29yZSBsb2dpYyBmcm9tIGJvdGguICBNYW55IGdvb2QgaWRlYXMKK2Zyb20gZXhpc3RpbmcgQVBJcyBzdWNoIGFzIENyeXB0b2FwaSBhbmQgTmV0dGxlIGhhdmUgYmVlbiBhZGFwdGVkIGZvciB0aGlzLgorCitUaGUgQVBJIGN1cnJlbnRseSBzdXBwb3J0cyB0aHJlZSB0eXBlcyBvZiB0cmFuc2Zvcm1zOiBDaXBoZXJzLCBEaWdlc3RzIGFuZAorQ29tcHJlc3NvcnMuICBUaGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBlc3BlY2lhbGx5IHNlZW0gdG8gYmUgcGVyZm9ybWluZwordmVyeSB3ZWxsIHNvIGZhci4KKworU3VwcG9ydCBmb3IgaGFyZHdhcmUgY3J5cHRvIGRldmljZXMgdmlhIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UgaXMKK3VuZGVyIGRldmVsb3BtZW50LgorCitIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBBUEk6CisKKwkjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisJCisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOworCWNoYXIgcmVzdWx0WzEyOF07CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwkKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJtZDUiLCAwKTsKKwlpZiAodGZtID09IE5VTEwpCisJCWZhaWwoKTsKKwkJCisJLyogLi4uIHNldCB1cCB0aGUgc2NhdHRlcmxpc3RzIC4uLiAqLworCQorCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOworCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgJnNnLCAyKTsKKwljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgcmVzdWx0KTsKKwkKKwljcnlwdG9fZnJlZV90Zm0odGZtKTsKKworICAgIAorTWFueSByZWFsIGV4YW1wbGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBtb2R1bGUgKHRjcnlwdC5jKS4KKworCitDT05GSUdVUkFUSU9OIE5PVEVTCisKK0FzIFRyaXBsZSBERVMgaXMgcGFydCBvZiB0aGUgREVTIG1vZHVsZSwgZm9yIHRob3NlIHVzaW5nIG1vZHVsYXIgYnVpbGRzLAorYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmY6CisKKyAgYWxpYXMgZGVzM19lZGUgZGVzCisKK1RoZSBOdWxsIGFsZ29yaXRobXMgcmVzaWRlIGluIHRoZSBjcnlwdG9fbnVsbCBtb2R1bGUsIHNvIHRoZXNlIGxpbmVzCitzaG91bGQgYWxzbyBiZSBhZGRlZDoKKworICBhbGlhcyBjaXBoZXJfbnVsbCBjcnlwdG9fbnVsbAorICBhbGlhcyBkaWdlc3RfbnVsbCBjcnlwdG9fbnVsbAorICBhbGlhcyBjb21wcmVzc19udWxsIGNyeXB0b19udWxsCisKK1RoZSBTSEEzODQgYWxnb3JpdGhtIHNoYXJlcyBjb2RlIHdpdGhpbiB0aGUgU0hBNTEyIG1vZHVsZSwgc28geW91J2xsCithbHNvIG5lZWQ6CisgIGFsaWFzIHNoYTM4NCBzaGE1MTIKKworCitERVZFTE9QRVIgTk9URVMKKworVHJhbnNmb3JtcyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgaW4gdXNlciBjb250ZXh0LCBhbmQgY3J5cHRvZ3JhcGhpYworbWV0aG9kcyBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSBzb2Z0aXJxIGFuZCB1c2VyIGNvbnRleHRzLgorCitXaGVuIHVzaW5nIHRoZSBBUEkgZm9yIGNpcGhlcnMsIHBlcmZvcm1hbmNlIHdpbGwgYmUgb3B0aW1hbCBpZiBlYWNoCitzY2F0dGVybGlzdCBjb250YWlucyBkYXRhIHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgdGhlIGNpcGhlcidzIGJsb2NrCitzaXplICh0eXBpY2FsbHkgOCBieXRlcykuICBUaGlzIHByZXZlbnRzIGhhdmluZyB0byBkbyBhbnkgY29weWluZworYWNyb3NzIG5vbi1hbGlnbmVkIHBhZ2UgZnJhZ21lbnQgYm91bmRhcmllcy4KKworCitBRERJTkcgTkVXIEFMR09SSVRITVMKKworV2hlbiBzdWJtaXR0aW5nIGEgbmV3IGFsZ29yaXRobSBmb3IgaW5jbHVzaW9uLCBhIG1hbmRhdG9yeSByZXF1aXJlbWVudAoraXMgdGhhdCBhdCBsZWFzdCBhIGZldyB0ZXN0IHZlY3RvcnMgZnJvbSBrbm93biBzb3VyY2VzIChwcmVmZXJhYmx5CitzdGFuZGFyZHMpIGJlIGluY2x1ZGVkLgorCitDb252ZXJ0aW5nIGV4aXN0aW5nIHdlbGwga25vd24gY29kZSBpcyBwcmVmZXJyZWQsIGFzIGl0IGlzIG1vcmUgbGlrZWx5Cit0byBoYXZlIGJlZW4gcmV2aWV3ZWQgYW5kIHdpZGVseSB0ZXN0ZWQuICBJZiBzdWJtaXR0aW5nIGNvZGUgZnJvbSBMR1BMCitzb3VyY2VzLCBwbGVhc2UgY29uc2lkZXIgY2hhbmdpbmcgdGhlIGxpY2Vuc2UgdG8gR1BMIChzZWUgc2VjdGlvbiAzIG9mCit0aGUgTEdQTCkuCisKK0FsZ29yaXRobXMgc3VibWl0dGVkIG11c3QgYWxzbyBiZSBnZW5lcmFsbHkgcGF0ZW50LWZyZWUgKGUuZy4gSURFQQord2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG1haW5saW5lIHVudGlsIGFyb3VuZCAyMDExKSwgYW5kIGJlIGJhc2VkCitvbiBhIHJlY29nbml6ZWQgc3RhbmRhcmQgYW5kL29yIGhhdmUgYmVlbiBzdWJqZWN0ZWQgdG8gYXBwcm9wcmlhdGUKK3BlZXIgcmV2aWV3LgorCitBbHNvIGNoZWNrIGZvciBhbnkgUkZDcyB3aGljaCBtYXkgcmVsYXRlIHRvIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgYWxnb3JpdGhtcywKK2FzIHdlbGwgYXMgZ2VuZXJhbCBhcHBsaWNhdGlvbiBub3RlcyBzdWNoIGFzIFJGQzI0NTEgKCJUaGUgRVNQIENCQy1Nb2RlCitDaXBoZXIgQWxnb3JpdGhtcyIpLgorCitJdCdzIGEgZ29vZCBpZGVhIHRvIGF2b2lkIHVzaW5nIGxvdHMgb2YgbWFjcm9zIGFuZCB1c2UgaW5saW5lZCBmdW5jdGlvbnMKK2luc3RlYWQsIGFzIGdjYyBkb2VzIGEgZ29vZCBqb2Igd2l0aCBpbmxpbmluZywgd2hpbGUgZXhjZXNzaXZlIHVzZSBvZgorbWFjcm9zIGNhbiBjYXVzZSBjb21waWxhdGlvbiBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3Jtcy4KKworQWxzbyBjaGVjayB0aGUgVE9ETyBsaXN0IGF0IHRoZSB3ZWIgc2l0ZSBsaXN0ZWQgYmVsb3cgdG8gc2VlIHdoYXQgcGVvcGxlCittaWdodCBhbHJlYWR5IGJlIHdvcmtpbmcgb24uCisKKworQlVHUworCitTZW5kIGJ1ZyByZXBvcnRzIHRvOgorSmFtZXMgTW9ycmlzIDxqbW9ycmlzQHJlZGhhdC5jb20+CitDYzogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgorCisKK0ZVUlRIRVIgSU5GT1JNQVRJT04KKworRm9yIGZ1cnRoZXIgcGF0Y2hlcyBhbmQgdmFyaW91cyB1cGRhdGVzLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgVE9ETworbGlzdCwgc2VlOgoraHR0cDovL3NhbWJhLm9yZy9+amFtZXNtL2NyeXB0by8KKworCitBVVRIT1JTCisKK0phbWVzIE1vcnJpcworRGF2aWQgUy4gTWlsbGVyCisKKworQ1JFRElUUworCitUaGUgZm9sbG93aW5nIHBlb3BsZSBwcm92aWRlZCBpbnZhbHVhYmxlIGZlZWRiYWNrIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQKK29mIHRoZSBBUEk6CisKKyAgQWxleGV5IEt1em5ldHpvdgorICBSdXN0eSBSdXNzZWxsCisgIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwKKyAgSmVmZiBHYXJ6aWsKKyAgTWljaGFlbCBSaWNoYXJkc29uCisgIEFuZHJldyBNb3J0b24KKyAgSW5nbyBPZXNlcgorICBDaHJpc3RvcGggSGVsbHdpZworCitQb3J0aW9ucyBvZiB0aGlzIEFQSSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHByb2plY3RzOgorICAKKyAgS2VybmVsaSBDcnlwdG9hcGkgKGh0dHA6Ly93d3cua2VybmVsaS5vcmcvKQorICAgIEFsZXhhbmRlciBLamVsZGFhcworICAgIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwKKyAgICBLeWxlIE1jTWFydGluCisgICAgSmVhbi1MdWMgQ29va2UKKyAgICBEYXZpZCBCcnlzb24KKyAgICBDbGVtZW5zIEZydWh3aXJ0aAorICAgIFRvYmlhcyBSaW5nc3Ryb20KKyAgICBIYXJhbGQgV2VsdGUKKworYW5kOworICAKKyAgTmV0dGxlIChodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9uZXR0bGUvKQorICAgIE5pZWxzIE32bGxlcgorCitPcmlnaW5hbCBkZXZlbG9wZXJzIG9mIHRoZSBjcnlwdG8gYWxnb3JpdGhtczoKKworICBEYW5hIEwuIEhvdyAoREVTKQorICBBbmRyZXcgVHJpZGdlbGwgYW5kIFN0ZXZlIEZyZW5jaCAoTUQ0KQorICBDb2xpbiBQbHVtYiAoTUQ1KQorICBTdGV2ZSBSZWlkIChTSEExKQorICBKZWFuLUx1YyBDb29rZSAoU0hBMjU2LCBTSEEzODQsIFNIQTUxMikKKyAgS2F6dW5vcmkgTWl5YXphd2EgLyBVU0FHSSAoSE1BQykKKyAgTWF0dGhldyBTa2FsYSAoVHdvZmlzaCkKKyAgRGFnIEFybmUgT3N2aWsgKFNlcnBlbnQpCisgIEJyaWFuIEdsYWRtYW4gKEFFUykKKyAgS2FydGlrZXkgTWFoZW5kcmEgQmhhdHQgKENBU1Q2KQorICBKb24gT2JlcmhlaWRlIChBUkM0KQorICBKb3VuaSBNYWxpbmVuIChNaWNoYWVsIE1JQykKKworU0hBMSBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBKZWFuLUZyYW5jb2lzIERpdmUKKyAgCitERVMgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgUmFpbWFyIEZhbGtlCisgIEdpc2xlIFPmbGVuc21pbmRlCisgIE5pZWxzIE32bGxlcgorCitCbG93ZmlzaCBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsCisgIEt5bGUgTWNNYXJ0aW4KKworVHdvZmlzaCBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBXZXJuZXIgS29jaAorICBNYXJjIE11dHoKKworU0hBMjU2LzM4NC81MTIgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQW5kcmV3IE1jRG9uYWxkCisgIEt5bGUgTWNNYXJ0aW4KKyAgSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICAKK0FFUyBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBbGV4YW5kZXIgS2plbGRhYXMKKyAgSGVyYmVydCBWYWxlcmlvIFJpZWRlbAorICBLeWxlIE1jTWFydGluCisgIEFkYW0gSi4gUmljaHRlcgorICBGcnVod2lydGggQ2xlbWVucyAoaTU4NikKKyAgTGludXMgVG9ydmFsZHMgKGk1ODYpCisKK0NBU1Q1IGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEthcnRpa2V5IE1haGVuZHJhIEJoYXR0IChvcmlnaW5hbCBkZXZlbG9wZXJzIHVua25vd24sIEZTRiBjb3B5cmlnaHQpLgorCitURUEvWFRFQSBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBYXJvbiBHcm90aGUKKworS2hhemFkIGFsZ29yaXRobSBjb250cmlidXRvcnM6CisgIEFhcm9uIEdyb3RoZQorCitXaGlybHBvb2wgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQWFyb24gR3JvdGhlCisgIEplYW4tTHVjIENvb2tlCisKK0FudWJpcyBhbGdvcml0aG0gY29udHJpYnV0b3JzOgorICBBYXJvbiBHcm90aGUKKworVGlnZXIgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKKyAgQWFyb24gR3JvdGhlCisKK0dlbmVyaWMgc2NhdHRlcndhbGsgY29kZSBieSBBZGFtIEouIFJpY2h0ZXIgPGFkYW1AeWdnZHJhc2lsLmNvbT4KKworUGxlYXNlIHNlbmQgYW55IGNyZWRpdHMgdXBkYXRlcyBvciBjb3JyZWN0aW9ucyB0bzoKK0phbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyeXB0by9kZXNjb3JlLXJlYWRtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NyeXB0by9kZXNjb3JlLXJlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NDc0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3J5cHRvL2Rlc2NvcmUtcmVhZG1lLnR4dApAQCAtMCwwICsxLDM1MiBAQAorQmVsb3cgaXMgdGhlIG9yZ2luYWwgUkVBRE1FIGZpbGUgZnJvbSB0aGUgZGVzY29yZS5zaGFyIHBhY2thZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVzIC0gZmFzdCAmIHBvcnRhYmxlIERFUyBlbmNyeXB0aW9uICYgZGVjcnlwdGlvbi4KK0NvcHlyaWdodCAoQykgMTk5MiAgRGFuYSBMLiBIb3cKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQXV0aG9yJ3MgYWRkcmVzczogaG93QGlzbC5zdGFuZm9yZC5lZHUKKworJElkOiBSRUFETUUsdiAxLjE1IDE5OTIvMDUvMjAgMDA6MjU6MzIgaG93IEUgJAorCisKKz09Pj4gVG8gY29tcGlsZSBhZnRlciB1bnRhcnJpbmcvdW5zaGFycmluZywganVzdCBgbWFrZScgPDw9PQorCisKK1RoaXMgcGFja2FnZSB3YXMgZGVzaWduZWQgd2l0aCB0aGUgZm9sbG93aW5nIGdvYWxzOgorMS4JSGlnaGVzdCBwb3NzaWJsZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24gUEVSRk9STUFOQ0UuCisyLglQT1JUQUJJTElUWSB0byBhbnkgYnl0ZS1hZGRyZXNzYWJsZSBob3N0IHdpdGggYSAzMmJpdCB1bnNpZ25lZCBDIHR5cGUKKzMuCVBsdWctY29tcGF0aWJsZSByZXBsYWNlbWVudCBmb3IgS0VSQkVST1MncyBsb3ctbGV2ZWwgcm91dGluZXMuCisKK1RoaXMgc2Vjb25kIHJlbGVhc2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIGZvcgorcmVnaXN0ZXItc3RhcnZlZCBtYWNoaW5lcy4gIE15IGRpc2N1c3Npb25zIHdpdGggUmljaGFyZCBPdXRlcmJyaWRnZSwKKzcxNzU1LjIwNEBjb21wdXNlcnZlLmNvbSwgc3BhcmtlZCBhIG51bWJlciBvZiB0aGVzZSBlbmhhbmNlbWVudHMuCisKK1RvIG1vcmUgcmFwaWRseSB1bmRlcnN0YW5kIHRoZSBjb2RlIGluIHRoaXMgcGFja2FnZSwgaW5zcGVjdCBkZXNTbWFsbEZpcHMuaQorKGNyZWF0ZWQgYnkgdHlwaW5nIGBtYWtlJykgQkVGT1JFIHlvdSB0YWNrbGUgZGVzQ29kZS5oLiAgVGhlIGxhdHRlciBpcyBzZXQKK3VwIGluIGEgcGFyYW1ldGVyaXplZCBmYXNoaW9uIHNvIGl0IGNhbiBlYXNpbHkgYmUgbW9kaWZpZWQgYnkgc3BlZWQtZGFlbW9uCitoYWNrZXJzIGluIHB1cnN1aXQgb2YgdGhhdCBsYXN0IG1pY3Jvc2Vjb25kLiAgWW91IHdpbGwgZmluZCBpdCBtb3JlCitpbGx1bWluYXRpbmcgdG8gaW5zcGVjdCBvbmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sCithbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBjb21tb24gYWJzdHJhY3Qgc2tlbGV0b24gd2l0aCB0aGlzIG9uZSBpbiBtaW5kLgorCisKK3BlcmZvcm1hbmNlIGNvbXBhcmlzb24gdG8gb3RoZXIgYXZhaWxhYmxlIGRlcyBjb2RlIHdoaWNoIGkgY291bGQKK2NvbXBpbGUgb24gYSBTUEFSQ1N0YXRpb24gMSAoY2MgLU80LCBnY2MgLU8yKToKKwordGhpcyBjb2RlIChieXRlLW9yZGVyIGluZGVwZW5kZW50KToKKyAgIDMwdXMgcGVyIGVuY3J5cHRpb24gKG9wdGlvbnM6IDY0ayB0YWJsZXMsIG5vIElQL0ZQKQorICAgMzN1cyBwZXIgZW5jcnlwdGlvbiAob3B0aW9uczogNjRrIHRhYmxlcywgRklQUyBzdGFuZGFyZCBiaXQgb3JkZXJpbmcpCisgICA0NXVzIHBlciBlbmNyeXB0aW9uIChvcHRpb25zOiAgMmsgdGFibGVzLCBubyBJUC9GUCkKKyAgIDQ4dXMgcGVyIGVuY3J5cHRpb24gKG9wdGlvbnM6ICAyayB0YWJsZXMsIEZJUFMgc3RhbmRhcmQgYml0IG9yZGVyaW5nKQorICAyNzV1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDFrIG9mIGtleSB0YWJsZXMpCisJdGhpcyBoYXMgdGhlIHF1aWNrZXN0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiByb3V0aW5lcyBpJ3ZlIHNlZW4uCisJc2luY2UgaSB3YXMgaW50ZXJlc3RlZCBpbiBmYXN0IGRlcyBmaWx0ZXJzIHJhdGhlciB0aGFuIGNyeXB0KDMpCisJYW5kIHBhc3N3b3JkIGNyYWNraW5nLCBpIGhhdmVuJ3QgcmVhbGx5IGJvdGhlcmVkIHlldCB0byBzcGVlZCB1cAorCXRoZSBrZXkgc2V0dGluZyByb3V0aW5lLiBhbHNvLCBpIGhhdmUgbm8gaW50ZXJlc3QgaW4gcmUtaW1wbGVtZW50aW5nCisJYWxsIHRoZSBvdGhlciBqdW5rIGluIHRoZSBtaXQga2VyYmVyb3MgZGVzIGxpYnJhcnksIHNvIGkndmUganVzdAorCXByb3ZpZGVkIG15IHJvdXRpbmVzIHdpdGggbGl0dGxlIHN0dWIgaW50ZXJmYWNlcyBzbyB0aGV5IGNhbiBiZQorCXVzZWQgYXMgZHJvcC1pbiByZXBsYWNlbWVudHMgd2l0aCBtaXQncyBjb2RlIG9yIGFueSBvZiB0aGUgbWl0LQorCWNvbXBhdGlibGUgcGFja2FnZXMgYmVsb3cuIChub3RlIHRoYXQgdGhlIGZpcnN0IHR3byB0aW1pbmdzIGFib3ZlCisJYXJlIGhpZ2hseSB2YXJpYWJsZSBiZWNhdXNlIG9mIGNhY2hlIGVmZmVjdHMpLgorCitrZXJiZXJvcyBkZXMgcmVwbGFjZW1lbnQgZnJvbSBhdXN0cmFsaWEgKHZlcnNpb24gMS45NSk6CisgICA1M3VzIHBlciBlbmNyeXB0aW9uICh1c2VzIDJrIG9mIHRhYmxlcykKKyAgIDk2dXMgdG8gc2V0IGEgbmV3IGtleSAodXNlcyAyLjI1ayBvZiBrZXkgdGFibGVzKQorCXNvIGRlc3BpdGUgdGhlIGF1dGhvcidzIGluY2x1c2lvbiBvZiBzb21lIG9mIHRoZSBwZXJmb3JtYW5jZQorCWltcHJvdmVtZW50cyBpIGhhZCBzdWdnZXN0ZWQgdG8gaGltLCB0aGlzIHBhY2thZ2UncworCWVuY3J5cHRpb24vZGVjcnlwdGlvbiBpcyBzdGlsbCBzbG93ZXIgb24gdGhlIHNwYXJjIGFuZCA2ODAwMC4KKwltb3JlIHNwZWNpZmljYWxseSwgMTktNDAlIHNsb3dlciBvbiB0aGUgNjgwMjAgYW5kIDExLTM1JSBzbG93ZXIKKwlvbiB0aGUgc3BhcmMsICBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyOworCWluIGZ1bGwgZ29yeSBkZXRhaWwgKEFMVF9FQ0IgaXMgYSBsaWJkZXMgdmFyaWFudCk6CisJY29tcGlsZXIgICAJbWFjaGluZQkJZGVzQ29yZQlsaWJkZXMJQUxUX0VDQglzbG93ZXIgYnkKKwlnY2MgMi4xIC1PMglTdW4gMy8xMTAJMzA0ICB1UwkzNjkuNXVTCTQ2MS44dVMJIDIyJQorCWNjICAgICAgLU8xCVN1biAzLzExMAkzMzYgIHVTCTQzNi42dVMJMzk5LjN1UwkgMTklCisJY2MgICAgICAtTzIJU3VuIDMvMTEwCTM2MCAgdVMJNTMyLjR1Uwk1MDUuMXVTCSA0MCUKKwljYyAgICAgIC1PNAlTdW4gMy8xMTAJMzY1ICB1Uwk1MzIuM3VTCTUwNS4zdVMJIDM4JQorCWdjYyAyLjEgLU8yCVN1biA0LzUwCSA0OCAgdVMJIDUzLjR1UwkgNTcuNXVTCSAxMSUKKwljYyAgICAgIC1PMglTdW4gNC81MAkgNDggIHVTCSA2NC42dVMJIDY0Ljd1UwkgMzUlCisJY2MgICAgICAtTzQJU3VuIDQvNTAJIDQ4ICB1UwkgNjQuN3VTCSA2NC45dVMJIDM1JQorCShteSB0aW1lIG1lYXN1cmVtZW50cyBhcmUgbm90IGFzIGFjY3VyYXRlIGFzIGhpcykuCisgICB0aGUgY29tbWVudHMgaW4gbXkgZmlyc3QgcmVsZWFzZSBvZiBkZXNDb3JlIG9uIHZlcnNpb24gMS45MjoKKyAgIDY4dXMgcGVyIGVuY3J5cHRpb24gKHVzZXMgMmsgb2YgdGFibGVzKQorICAgOTZ1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDIuMjVrIG9mIGtleSB0YWJsZXMpCisJdGhpcyBpcyBhIHZlcnkgbmljZSBwYWNrYWdlIHdoaWNoIGltcGxlbWVudHMgdGhlIG1vc3QgaW1wb3J0YW50CisJb2YgdGhlIG9wdGltaXphdGlvbnMgd2hpY2ggaSBkaWQgaW4gbXkgZW5jcnlwdGlvbiByb3V0aW5lcy4KKwlpdCdzIGEgYml0IHdlYWsgb24gY29tbW9uIGxvdy1sZXZlbCBvcHRpbWl6YXRpb25zIHdoaWNoIGlzIHdoeQorCWl0J3MgMzklLTEwNiUgc2xvd2VyLiAgYmVjYXVzZSBoZSB3YXMgaW50ZXJlc3RlZCBpbiBmYXN0IGNyeXB0KDMpIGFuZAorCXBhc3N3b3JkLWNyYWNraW5nIGFwcGxpY2F0aW9ucywgIGhlIGFsc28gdXNlZCB0aGUgc2FtZSBpZGVhcyB0bworCXNwZWVkIHVwIHRoZSBrZXktc2V0dGluZyByb3V0aW5lcyB3aXRoIGltcHJlc3NpdmUgcmVzdWx0cy4KKwkoYXQgc29tZSBwb2ludCBpIG1heSBkbyB0aGUgc2FtZSBpbiBteSBwYWNrYWdlKS4gIGhlIGFsc28gaW1wbGVtZW50cworCXRoZSByZXN0IG9mIHRoZSBtaXQgZGVzIGxpYnJhcnkuCisJKGNvZGUgZnJvbSBlYXlAcHN5Y2gucHN5LnVxLm96LmF1IHZpYSBjb21wLnNvdXJjZXMubWlzYykKKworZmFzdCBjcnlwdCgzKSBwYWNrYWdlIGZyb20gZGVubWFyazoKKwl0aGUgZGVzIHJvdXRpbmUgaGVyZSBpcyBidXJpZWQgaW5zaWRlIGEgbG9vcCB0byBkbyB0aGUKKwljcnlwdCBmdW5jdGlvbiBhbmQgaSBkaWRuJ3QgZmVlbCBsaWtlIHJpcHBpbmcgaXQgb3V0IGFuZCBtZWFzdXJpbmcKKwlwZXJmb3JtYW5jZS4gaGlzIGNvZGUgdGFrZXMgMjYgc3BhcmMgaW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUgb25lCisJZGVzIGl0ZXJhdGlvbjsgYWJvdmUsIFF1aWNrICg2NGspIHRha2VzIDIxIGFuZCBTbWFsbCAoMmspIHRha2VzIDM3LgorCWhlIGNsYWltcyB0byB1c2UgMjgwayBvZiB0YWJsZXMgYnV0IHRoZSBpdGVyYXRpb24gY2FsY3VsYXRpb24gc2VlbXMKKwl0byB1c2Ugb25seSAxMjhrLiAgaGlzIHRhYmxlcyBhbmQgY29kZSBhcmUgbWFjaGluZSBpbmRlcGVuZGVudC4KKwkoY29kZSBmcm9tIGdsYWRAZGFpbWkuYWF1LmRrIHZpYSBhbHQuc291cmNlcyBvciBjb21wLnNvdXJjZXMubWlzYykKKworc3dlZGlzaCByZWltcGxlbWVudGF0aW9uIG9mIEtlcmJlcm9zIGRlcyBsaWJyYXJ5CisgIDEwOHVzIHBlciBlbmNyeXB0aW9uICh1c2VzIDM0ayB3b3J0aCBvZiB0YWJsZXMpCisgIDEzNHVzIHRvIHNldCBhIG5ldyBrZXkgKHVzZXMgMzJrIG9mIGtleSB0YWJsZXMgdG8gZ2V0IHRoaXMgc3BlZWQhKQorCXRoZSB0YWJsZXMgdXNlZCBzZWVtIHRvIGJlIG1hY2hpbmUtaW5kZXBlbmRlbnQ7CisJaGUgc2VlbXMgdG8gaGF2ZSBpbmNsdWRlZCBhIGxvdCBvZiBzcGVjaWFsIGNhc2UgY29kZQorCXNvIHRoYXQsIGUuZy4sIGBsb25nJyBsb2FkcyBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIDQgYGNoYXInIGxvYWRzCisJd2hlbiB0aGUgbWFjaGluZSdzIGFyY2hpdGVjdHVyZSBhbGxvd3MgaXQuCisJKGNvZGUgb2J0YWluZWQgZnJvbSBjaGFsbWVycy5zZTpwdWIvZGVzKQorCitjcmFjayAzLjNjIHBhY2thZ2UgZnJvbSBlbmdsYW5kOgorCWFzIGluIGNyeXB0IGFib3ZlLCB0aGUgZGVzIHJvdXRpbmUgaXMgYnVyaWVkIGluIGEgbG9vcC4gaXQncworCWFsc28gdmVyeSBtb2RpZmllZCBmb3IgY3J5cHQuICBoaXMgaXRlcmF0aW9uIGNvZGUgdXNlcyAxNmsKKwlvZiB0YWJsZXMgYW5kIGFwcGVhcnMgdG8gYmUgc2xvdy4KKwkoY29kZSBvYnRhaW5lZCBmcm9tIGFlbUBhYmVyLmFjLnVrIHZpYSBhbHQuc291cmNlcyBvciBjb21wLnNvdXJjZXMubWlzYykKKworYGBoaWdobHkgb3B0aW1pemVkJycgYW5kIHR3ZWFrZWQgS2VyYmVyb3MvQXRoZW5hIGNvZGUgKGJ5dGUtb3JkZXIgZGVwZW5kZW50KToKKyAgMTY1dXMgcGVyIGVuY3J5cHRpb24gKHVzZXMgNmsgd29ydGggb2YgdGFibGVzKQorICA0Nzh1cyB0byBzZXQgYSBuZXcga2V5ICh1c2VzIDwxayBvZiBrZXkgdGFibGVzKQorCXNvIGRlc3BpdGUgdGhlIGNvbW1lbnRzIGluIHRoaXMgY29kZSwgaXQgd2FzIHBvc3NpYmxlIHRvIGdldAorCWZhc3RlciBjb2RlIEFORCBzbWFsbGVyIHRhYmxlcywgYXMgd2VsbCBhcyBtYWtpbmcgdGhlIHRhYmxlcworCW1hY2hpbmUtaW5kZXBlbmRlbnQuCisJKGNvZGUgb2J0YWluZWQgZnJvbSBwcmVwLmFpLm1pdC5lZHUpCisKK1VDIEJlcmtlbGV5IGNvZGUgKGRlcGVuZHMgb24gbWFjaGluZS1lbmRlZG5lc3MpOgorICAyMjZ1cyBwZXIgZW5jcnlwdGlvbgorMTA4NDh1cyB0byBzZXQgYSBuZXcga2V5CisJdGFibGUgc2l6ZXMgYXJlIHVuY2xlYXIsIGJ1dCB0aGV5IGRvbid0IGxvb2sgdmVyeSBzbWFsbAorCShjb2RlIG9idGFpbmVkIGZyb20gd3VhcmNoaXZlLnd1c3RsLmVkdSkKKworCittb3RpdmF0aW9uIGFuZCBoaXN0b3J5CisKK2Egd2hpbGUgYWdvIGkgd2FudGVkIHNvbWUgZGVzIHJvdXRpbmVzIGFuZCB0aGUgcm91dGluZXMgZG9jdW1lbnRlZCBvbiBzdW4ncworbWFuIHBhZ2VzIGVpdGhlciBkaWRuJ3QgZXhpc3Qgb3IgZHVtcGVkIGNvcmUuICBpIGhhZCBoZWFyZCBvZiBrZXJiZXJvcywKK2FuZCBrbmV3IHRoYXQgaXQgdXNlZCBkZXMsICBzbyBpIGZpZ3VyZWQgaSdkIHVzZSBpdHMgcm91dGluZXMuICBidXQgb25jZQoraSBnb3QgaXQgYW5kIGxvb2tlZCBhdCB0aGUgY29kZSwgIGl0IHJlYWxseSBzZXQgb2ZmIGEgbG90IG9mIHBldCBwZWV2ZXMgLQoraXQgd2FzIHRvbyBjb252b2x1dGVkLCB0aGUgY29kZSBoYWQgYmVlbiB3cml0dGVuIHdpdGhvdXQgdGFraW5nCithZHZhbnRhZ2Ugb2YgdGhlIHJlZ3VsYXIgc3RydWN0dXJlIG9mIG9wZXJhdGlvbnMgc3VjaCBhcyBJUCwgRSwgYW5kIEZQCisoaS5lLiB0aGUgYXV0aG9yIGRpZG4ndCBzaXQgZG93biBhbmQgdGhpbmsgYmVmb3JlIGNvZGluZyksCitpdCB3YXMgZXhjZXNzaXZlbHkgc2xvdywgIHRoZSBhdXRob3IgaGFkIGF0dGVtcHRlZCB0byBjbGFyaWZ5IHRoZSBjb2RlCitieSBhZGRpbmcgTU9SRSBzdGF0ZW1lbnRzIHRvIG1ha2UgdGhlIGRhdGEgbW92ZW1lbnQgbW9yZSBgY29uc2lzdGVudCcKK2luc3RlYWQgb2Ygc2ltcGxpZnlpbmcgaGlzIGltcGxlbWVudGF0aW9uIGFuZCBjdXR0aW5nIGRvd24gb24gYWxsIGRhdGEKK21vdmVtZW50IChpbiBwYXJ0aWN1bGFyLCBoaXMgdXNlIG9mIEwxLCBSMSwgTDIsIFIyKSwgYW5kIGl0IHdhcyBmdWxsIG9mCitpZGlvdGljIGB0d2Vha3MnIGZvciBwYXJ0aWN1bGFyIG1hY2hpbmVzIHdoaWNoIGZhaWxlZCB0byBkZWxpdmVyIHNpZ25pZmljYW50CitzcGVlZHVwcyBidXQgd2hpY2ggZGlkIG9iZnVzY2F0ZSBldmVyeXRoaW5nLiAgc28gaSB0b29rIHRoZSB0ZXN0IGRhdGEKK2Zyb20gaGlzIHZlcmlmaWNhdGlvbiBwcm9ncmFtIGFuZCByZXdyb3RlIGV2ZXJ5dGhpbmcgZWxzZS4KKworYSB3aGlsZSBsYXRlciBpIHJhbiBhY3Jvc3MgdGhlIGdyZWF0IGNyeXB0KDMpIHBhY2thZ2UgbWVudGlvbmVkIGFib3ZlLgordGhlIGZhY3QgdGhhdCB0aGlzIGd1eSB3YXMgY29tcHV0aW5nIDIgc2JveGVzIHBlciB0YWJsZSBsb29rdXAgcmF0aGVyCit0aGFuIG9uZSAoYW5kIHVzaW5nIGEgTVVDSCBsYXJnZXIgdGFibGUgaW4gdGhlIHByb2Nlc3MpIGVtYm9sZGVuZWQgbWUgdG8KK2RvIHRoZSBzYW1lIC0gaXQgd2FzIGEgdHJpdmlhbCBjaGFuZ2UgZnJvbSB3aGljaCBpIGhhZCBiZWVuIHNjYXJlZCBhd2F5CitieSB0aGUgbGFyZ2VyIHRhYmxlIHNpemUuICBpbiBoaXMgY2FzZSBoZSBkaWRuJ3QgcmVhbGl6ZSB5b3UgZG9uJ3QgbmVlZCB0byBrZWVwCit0aGUgd29ya2luZyBkYXRhIGluIFRXTyBmb3Jtcywgb25lIGZvciBlYXN5IHVzZSBvZiBoYWxmIHRoZSBzYm94ZXMgaW4KK2luZGV4aW5nLCB0aGUgb3RoZXIgZm9yIGVhc3kgdXNlIG9mIHRoZSBvdGhlciBoYWxmOyBpbnN0ZWFkIHlvdSBjYW4ga2VlcAoraXQgaW4gdGhlIGZvcm0gZm9yIHRoZSBmaXJzdCBoYWxmIGFuZCB1c2UgYSBzaW1wbGUgcm90YXRlIHRvIGdldCB0aGUgb3RoZXIKK2hhbGYuICB0aGlzIG1lYW5zIGkgaGF2ZSAoYWxtb3N0KSBoYWxmIHRoZSBkYXRhIG1hbmlwdWxhdGlvbiBhbmQgaGFsZgordGhlIHRhYmxlIHNpemUuICBpbiBmYWlybmVzcyB0aG91Z2ggaGUgbWlnaHQgYmUgZW5jb2Rpbmcgc29tZXRoaW5nIHBhcnRpY3VsYXIKK3RvIGNyeXB0KDMpIGluIGhpcyB0YWJsZXMgLSBpIGRpZG4ndCBjaGVjay4KKworaSdtIGdsYWQgdGhhdCBpIGltcGxlbWVudGVkIGl0IHRoZSB3YXkgaSBkaWQsIGJlY2F1c2UgdGhpcyBDIHZlcnNpb24gaXMKK3BvcnRhYmxlICh0aGUgaWZkZWYncyBhcmUgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzKSBhbmQgaXQgaXMgZmFzdGVyCit0aGFuIHZlcnNpb25zIGhhbmQtd3JpdHRlbiBpbiBhc3NlbWJseSBmb3IgdGhlIHNwYXJjIQorCisKK3BvcnRpbmcgbm90ZXMKKworb25lIHRoaW5nIGkgZGlkIG5vdCB3YW50IHRvIGRvIHdhcyB3cml0ZSBhbiBlbm9ybW91cyBtZXNzCit3aGljaCBkZXBlbmRlZCBvbiBlbmRlZG5lc3MgYW5kIG90aGVyIG1hY2hpbmUgcXVpcmtzLAorYW5kIHdoaWNoIG5lY2Vzc2FyaWx5IHByb2R1Y2VkIGRpZmZlcmVudCBjb2RlIGFuZCBkaWZmZXJlbnQgbG9va3VwIHRhYmxlcworZm9yIGRpZmZlcmVudCBtYWNoaW5lcy4gIHNlZSB0aGUga2VyYmVyb3MgY29kZSBmb3IgYW4gZXhhbXBsZQorb2Ygd2hhdCBpIGRpZG4ndCB3YW50IHRvIGRvOyBhbGwgdGhlaXIgZW5kZWRuZXNzLXNwZWNpZmljIGBvcHRpbWl6YXRpb25zJworb2JmdXNjYXRlIHRoZSBjb2RlIGFuZCBpbiB0aGUgZW5kIHdlcmUgc2xvd2VyIHRoYW4gYSBzaW1wbGVyIG1hY2hpbmUKK2luZGVwZW5kZW50IGFwcHJvYWNoLiAgaG93ZXZlciwgdGhlcmUgYXJlIGFsd2F5cyBzb21lIHBvcnRhYmlsaXR5Citjb25zaWRlcmF0aW9ucyBvZiBzb21lIGtpbmQsIGFuZCBpIGhhdmUgaW5jbHVkZWQgc29tZSBvcHRpb25zCitmb3IgdmFyeWluZyBudW1iZXJzIG9mIHJlZ2lzdGVyIHZhcmlhYmxlcy4KK3BlcmhhcHMgc29tZSB3aWxsIHN0aWxsIHJlZ2FyZCB0aGUgcmVzdWx0IGFzIGEgbWVzcyEKKworMSkgaSBhc3N1bWUgZXZlcnl0aGluZyBpcyBieXRlIGFkZHJlc3NhYmxlLCBhbHRob3VnaCBpIGRvbid0IGFjdHVhbGx5CisgICBkZXBlbmQgb24gdGhlIGJ5dGUgb3JkZXIsIGFuZCB0aGF0IGJ5dGVzIGFyZSA4IGJpdHMuCisgICBpIGFzc3VtZSB3b3JkIHBvaW50ZXJzIGNhbiBiZSBmcmVlbHkgY2FzdCB0byBhbmQgZnJvbSBjaGFyIHBvaW50ZXJzLgorICAgbm90ZSB0aGF0IDk5JSBvZiBDIHByb2dyYW1zIG1ha2UgdGhlc2UgYXNzdW1wdGlvbnMuCisgICBpIGFsd2F5cyB1c2UgdW5zaWduZWQgY2hhcidzIGlmIHRoZSBoaWdoIGJpdCBjb3VsZCBiZSBzZXQuCisyKSB0aGUgdHlwZWRlZiBgd29yZCcgbWVhbnMgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdyYWwgdHlwZS4KKyAgIGlmIGB1bnNpZ25lZCBsb25nJyBpcyBub3QgMzIgYml0cywgY2hhbmdlIHRoZSB0eXBlZGVmIGluIGRlc0NvcmUuaC4KKyAgIGkgYXNzdW1lIHNpemVvZih3b3JkKSA9PSA0IEVWRVJZV0hFUkUuCisKK3RoZSAod29yc3QtY2FzZSkgY29zdCBvZiBteSBOT1QgZG9pbmcgZW5kZWRuZXNzLXNwZWNpZmljIG9wdGltaXphdGlvbnMKK2luIHRoZSBkYXRhIGxvYWRpbmcgYW5kIHN0b3JpbmcgY29kZSBzdXJyb3VuZGluZyB0aGUga2V5IGl0ZXJhdGlvbnMKK2lzIGxlc3MgdGhhbiAxMiUuICBhbHNvLCB0aGVyZSBpcyB0aGUgYWRkZWQgYmVuZWZpdCB0aGF0Cit0aGUgaW5wdXQgYW5kIG91dHB1dCB3b3JrIGFyZWFzIGRvIG5vdCBuZWVkIHRvIGJlIHdvcmQtYWxpZ25lZC4KKworCitPUFRJT05BTCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zCisKKzEpIHlvdSBzaG91bGQgZGVmaW5lIG9uZSBvZiBgaTM4NiwnIGB2YXgsJyBgbWM2ODAwMCwnIG9yIGBzcGFyYywnCisgICB3aGljaGV2ZXIgb25lIGlzIGNsb3Nlc3QgdG8gdGhlIGNhcGFiaWxpdGllcyBvZiB5b3VyIG1hY2hpbmUuCisgICBzZWUgdGhlIHN0YXJ0IG9mIGRlc0NvZGUuaCB0byBzZWUgZXhhY3RseSB3aGF0IHRoaXMgc2VsZWN0aW9uIGltcGxpZXMuCisgICBub3RlIHRoYXQgaWYgeW91IHNlbGVjdCB0aGUgd3Jvbmcgb25lLCB0aGUgZGVzIGNvZGUgd2lsbCBzdGlsbCB3b3JrOworICAgdGhlc2UgYXJlIGp1c3QgcGVyZm9ybWFuY2UgdHdlYWtzLgorMikgZm9yIHRob3NlIHdpdGggZnVuY3Rpb25hbCBgYXNtJyBrZXl3b3JkczogeW91IHNob3VsZCBjaGFuZ2UgdGhlCisgICBST1IgYW5kIFJPTCBtYWNyb3MgdG8gdXNlIG1hY2hpbmUgcm90YXRlIGluc3RydWN0aW9ucyBpZiB5b3UgaGF2ZSB0aGVtLgorICAgdGhpcyB3aWxsIHNhdmUgMiBpbnN0cnVjdGlvbnMgYW5kIGEgdGVtcG9yYXJ5IHBlciB1c2UsCisgICBvciBhYm91dCAzMiB0byA0MCBpbnN0cnVjdGlvbnMgcGVyIGVuL2RlY3J5cHRpb24uCisgICBub3RlIHRoYXQgZ2NjIGlzIHNtYXJ0IGVub3VnaCB0byB0cmFuc2xhdGUgdGhlIFJPTC9SIG1hY3JvcyBpbnRvCisgICBtYWNoaW5lIHJvdGF0ZXMhCisKK3RoZXNlIG9wdGltaXphdGlvbnMgYXJlIGFsbCByYXRoZXIgcGVyc25pY2tldHksIHlldCB3aXRoIHRoZW0geW91IHNob3VsZAorYmUgYWJsZSB0byBnZXQgcGVyZm9ybWFuY2UgZXF1YWwgdG8gYXNzZW1ibHktY29kaW5nLCBleGNlcHQgdGhhdDoKKzEpIHdpdGggdGhlIGxhY2sgb2YgYSBiaXQgcm90YXRlIG9wZXJhdG9yIGluIEMsIHJvdGF0ZXMgaGF2ZSB0byBiZSBzeW50aGVzaXplZAorICAgZnJvbSBzaGlmdHMuICBzbyBhY2Nlc3MgdG8gYGFzbScgd2lsbCBzcGVlZCB0aGluZ3MgdXAgaWYgeW91ciBtYWNoaW5lCisgICBoYXMgcm90YXRlcywgYXMgZXhwbGFpbmVkIGFib3ZlIGluICgzKSAobm90IG5lY2Vzc2FyeSBpZiB5b3UgdXNlIGdjYykuCisyKSBpZiB5b3VyIG1hY2hpbmUgaGFzIGxlc3MgdGhhbiAxMiAzMi1iaXQgcmVnaXN0ZXJzIGkgZG91YnQgeW91ciBjb21waWxlciB3aWxsCisgICBnZW5lcmF0ZSBnb29kIGNvZGUuCisgICBgaTM4NicgdHJpZXMgdG8gY29uZmlndXJlIHRoZSBjb2RlIGZvciBhIDM4NiBieSBvbmx5IGRlY2xhcmluZyAzIHJlZ2lzdGVycworICAgKGl0IGFwcGVhcnMgdGhhdCBnY2MgY2FuIHVzZSBlYngsIGVzaSBhbmQgZWRpIHRvIGhvbGQgcmVnaXN0ZXIgdmFyaWFibGVzKS4KKyAgIGhvd2V2ZXIsIGlmIHlvdSBsaWtlIGFzc2VtYmx5IGNvZGluZywgdGhlIDM4NiBkb2VzIGhhdmUgNyAzMi1iaXQgcmVnaXN0ZXJzLAorICAgYW5kIGlmIHlvdSB1c2UgQUxMIG9mIHRoZW0sIHVzZSBgc2NhbGVkIGJ5IDgnIGFkZHJlc3MgbW9kZXMgd2l0aCBkaXNwbGFjZW1lbnQKKyAgIGFuZCBvdGhlciB0cmlja3MsIHlvdSBjYW4gZ2V0IHJlYXNvbmFibGUgcm91dGluZXMgZm9yIERlc1F1aWNrQ29yZS4uLiB3aXRoCisgICBhYm91dCAyNTAgaW5zdHJ1Y3Rpb25zIGFwaWVjZS4gIEZvciBEZXNTbWFsbC4uLiBpdCB3aWxsIGhlbHAgdG8gcmVhcnJhbmdlCisgICBkZXNfa2V5bWFwLCBpLmUuLCBub3cgdGhlIHNib3ggIyBpcyB0aGUgaGlnaCBwYXJ0IG9mIHRoZSBpbmRleCBhbmQKKyAgIHRoZSA2IGJpdHMgb2YgZGF0YSBpcyB0aGUgbG93IHBhcnQ7IGl0IGhlbHBzIHRvIGV4Y2hhbmdlIHRoZXNlLgorICAgc2luY2UgaSBoYXZlIG5vIHdheSB0byBjb252ZW5pZW50bHkgdGVzdCBpdCBpIGhhdmUgbm90IHByb3ZpZGVkIG15CisgICBzaG9laG9ybmVkIDM4NiB2ZXJzaW9uLiAgbm90ZSB0aGF0IHdpdGggdGhpcyByZWxlYXNlIG9mIGRlc0NvcmUsIGdjYyBpcyBhYmxlCisgICB0byBwdXQgZXZlcnl0aGluZyBpbiByZWdpc3RlcnMoISksIGFuZCBnZW5lcmF0ZSBhYm91dCAzNzAgaW5zdHJ1Y3Rpb25zIGFwaWVjZQorICAgZm9yIHRoZSBEZXNRdWlja0NvcmUuLi4gcm91dGluZXMhCisKK2NvZGluZyBub3RlcworCit0aGUgZW4vZGVjcnlwdGlvbiByb3V0aW5lcyBlYWNoIHVzZSA2IG5lY2Vzc2FyeSByZWdpc3RlciB2YXJpYWJsZXMsCit3aXRoIDQgYmVpbmcgYWN0aXZlbHkgdXNlZCBhdCBvbmNlIGR1cmluZyB0aGUgaW5uZXIgaXRlcmF0aW9ucy4KK2lmIHlvdSBkb24ndCBoYXZlIDQgcmVnaXN0ZXIgdmFyaWFibGVzIGdldCBhIG5ldyBtYWNoaW5lLgordXAgdG8gOCBtb3JlIHJlZ2lzdGVycyBhcmUgdXNlZCB0byBob2xkIGNvbnN0YW50cyBpbiBzb21lIGNvbmZpZ3VyYXRpb25zLgorCitpIGFzc3VtZSB0aGF0IHRoZSB1c2Ugb2YgYSBjb25zdGFudCBpcyBtb3JlIGV4cGVuc2l2ZSB0aGFuIHVzaW5nIGEgcmVnaXN0ZXI6CithKSBhZGRpdGlvbmFsbHksIGkgaGF2ZSB0cmllZCB0byBwdXQgdGhlIGxhcmdlciBjb25zdGFudHMgaW4gcmVnaXN0ZXJzLgorICAgcmVnaXN0ZXJpbmcgcHJpb3JpdHkgd2FzIGJ5IHRoZSBmb2xsb3dpbmc6CisJYW55dGhpbmcgbW9yZSB0aGFuIDEyIGJpdHMgKGJhZCBmb3IgUklTQyBhbmQgQ0lTQykKKwlncmVhdGVyIHRoYW4gMTI3IGluIHZhbHVlIChjYW4ndCB1c2UgbW92cSBvciBieXRlIGltbWVkaWF0ZSBvbiBDSVNDKQorCTktMTI3IChtYXkgbm90IGJlIGFibGUgdG8gdXNlIENJU0Mgc2hpZnQgaW1tZWRpYXRlIG9yIGFkZC9zdWIgcXVpY2spLAorCTEtOCB3ZXJlIG5ldmVyIHJlZ2lzdGVyZWQsIGJlaW5nIHRoZSBjaGVhcGVzdCBjb25zdGFudHMuCitiKSB0aGUgY29tcGlsZXIgbWF5IGJlIHRvbyBzdHVwaWQgdG8gcmVhbGl6ZSB0YWJsZSBhbmQgdGFibGUrMjU2IHNob3VsZAorICAgYmUgYXNzaWduZWQgdG8gZGlmZmVyZW50IGNvbnN0YW50IHJlZ2lzdGVycyBhbmQgaW5zdGVhZCByZXBldGl0aXZlbHkKKyAgIGRvIHRoZSBhcml0aG1ldGljLCBzbyBpIGFzc2lnbiB0aGVzZSB0byBleHBsaWNpdCBgbScgcmVnaXN0ZXIgdmFyaWFibGVzCisgICB3aGVuIHBvc3NpYmxlIGFuZCBoZWxwZnVsLgorCitpIGFzc3VtZSB0aGF0IGluZGV4aW5nIGlzIGNoZWFwZXIgb3IgZXF1aXZhbGVudCB0byBhdXRvIGluY3JlbWVudC9kZWNyZW1lbnQsCit3aGVyZSB0aGUgaW5kZXggaXMgNyBiaXRzIHVuc2lnbmVkIG9yIHNtYWxsZXIuCit0aGlzIGFzc3VtcHRpb24gaXMgcmV2ZXJzZWQgZm9yIDY4ayBhbmQgdmF4LgorCitpIGFzc3VtZSB0aGF0IGFkZHJlc3NlcyBjYW4gYmUgY2hlYXBseSBmb3JtZWQgZnJvbSB0d28gcmVnaXN0ZXJzLAorb3IgZnJvbSBhIHJlZ2lzdGVyIGFuZCBhIHNtYWxsIGNvbnN0YW50LgorZm9yIHRoZSA2ODAwMCwgdGhlIGB0d28gcmVnaXN0ZXJzIGFuZCBzbWFsbCBvZmZzZXQnIGZvcm0gaXMgdXNlZCBzcGFyaW5nbHkuCithbGwgaW5kZXggc2NhbGluZyBpcyBkb25lIGV4cGxpY2l0bHkgLSBubyBoaWRkZW4gc2hpZnRzIGJ5IGxvZzIoc2l6ZW9mKS4KKwordGhlIGNvZGUgaXMgd3JpdHRlbiBzbyB0aGF0IGV2ZW4gYSBkdW1iIGNvbXBpbGVyCitzaG91bGQgbmV2ZXIgbmVlZCBtb3JlIHRoYW4gb25lIGhpZGRlbiB0ZW1wb3JhcnksCitpbmNyZWFzaW5nIHRoZSBjaGFuY2UgdGhhdCBldmVyeXRoaW5nIHdpbGwgZml0IGluIHRoZSByZWdpc3RlcnMuCitLRUVQIFRISVMgTU9SRSBTVUJUTEUgUE9JTlQgSU4gTUlORCBJRiBZT1UgUkVXUklURSBBTllUSElORy4KKyhhY3R1YWxseSwgdGhlcmUgYXJlIHNvbWUgY29kZSBmcmFnbWVudHMgbm93IHdoaWNoIGRvIHJlcXVpcmUgdHdvIHRlbXBzLAorYnV0IGZpeGluZyBpdCB3b3VsZCBlaXRoZXIgYnJlYWsgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWFjcm9zIG9yCityZXF1aXJlIGRlY2xhcmluZyBhbm90aGVyIHRlbXBvcmFyeSkuCisKKworc3BlY2lhbCBlZmZpY2llbnQgZGF0YSBmb3JtYXQKKworYml0cyBhcmUgbWFuaXB1bGF0ZWQgaW4gdGhpcyBhcnJhbmdlbWVudCBtb3N0IG9mIHRoZSB0aW1lIChTNyBTNSBTMyBTMSk6CisJMDAzMTMwMjkyODI3eHh4eDI0MjMyMjIxMjAxOXh4eHgxNjE1MTQxMzEyMTF4eHh4MDgwNzA2MDUwNDAzeHh4eAorKHRoZSB4IGJpdHMgYXJlIHN0aWxsIHRoZXJlLCBpJ20ganVzdCBlbXBoYXNpemluZyB3aGVyZSB0aGUgUyBib3hlcyBhcmUpLgorYml0cyBhcmUgcm90YXRlZCBsZWZ0IDQgd2hlbiBjb21wdXRpbmcgUzYgUzQgUzIgUzA6CisJMjgyNzI2MjUyNDIzeHh4eDIwMTkxODE3MTYxNXh4eHgxMjExMTAwOTA4MDd4eHh4MDQwMzAyMDEwMDMxeHh4eAordGhlIHJpZ2h0bW9zdCB0d28gYml0cyBhcmUgdXN1YWxseSBjbGVhcmVkIHNvIHRoZSBsb3dlciBieXRlIGNhbiBiZSB1c2VkCithcyBhbiBpbmRleCBpbnRvIGFuIHNib3ggbWFwcGluZyB0YWJsZS4gdGhlIG5leHQgdHdvIHgnZCBiaXRzIGFyZSBzZXQKK3RvIHZhcmlvdXMgdmFsdWVzIHRvIGFjY2VzcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHRhYmxlcy4KKworCitob3cgdG8gdXNlIHRoZSByb3V0aW5lcworCitkYXRhdHlwZXM6CisJcG9pbnRlciB0byA4IGJ5dGUgYXJlYSBvZiB0eXBlIERlc0RhdGEKKwl1c2VkIHRvIGhvbGQga2V5cyBhbmQgaW5wdXQvb3V0cHV0IGJsb2NrcyB0byBkZXMuCisKKwlwb2ludGVyIHRvIDEyOCBieXRlIGFyZWEgb2YgdHlwZSBEZXNLZXlzCisJdXNlZCB0byBob2xkIGZ1bGwgNzY4LWJpdCBrZXkuCisJbXVzdCBiZSBsb25nLWFsaWduZWQuCisKK0Rlc1F1aWNrSW5pdCgpCisJY2FsbCB0aGlzIGJlZm9yZSB1c2luZyBhbnkgb3RoZXIgcm91dGluZSB3aXRoIGBRdWljaycgaW4gaXRzIG5hbWUuCisJaXQgZ2VuZXJhdGVzIHRoZSBzcGVjaWFsIDY0ayB0YWJsZSB0aGVzZSByb3V0aW5lcyBuZWVkLgorRGVzUXVpY2tEb25lKCkKKwlmcmVlcyB0aGlzIHRhYmxlCisKK0Rlc01ldGhvZChtLCBrKQorCW0gcG9pbnRzIHRvIGEgMTI4Ynl0ZSBibG9jaywgayBwb2ludHMgdG8gYW4gOCBieXRlIGRlcyBrZXkKKwl3aGljaCBtdXN0IGhhdmUgb2RkIHBhcml0eSAob3IgLTEgaXMgcmV0dXJuZWQpIGFuZCB3aGljaCBtdXN0CisJbm90IGJlIGEgKHNlbWktKXdlYWsga2V5IChvciAtMiBpcyByZXR1cm5lZCkuCisJbm9ybWFsbHkgRGVzTWV0aG9kKCkgcmV0dXJucyAwLgorCW0gaXMgZmlsbGVkIGluIGZyb20gayBzbyB0aGF0IHdoZW4gb25lIG9mIHRoZSByb3V0aW5lcyBiZWxvdworCWlzIGNhbGxlZCB3aXRoIG0sIHRoZSByb3V0aW5lIHdpbGwgYWN0IGxpa2Ugc3RhbmRhcmQgZGVzCisJZW4vZGVjcnlwdGlvbiB3aXRoIHRoZSBrZXkgay4gaWYgeW91IHVzZSBEZXNNZXRob2QsCisJeW91IHN1cHBseSBhIHN0YW5kYXJkIDU2Yml0IGtleTsgaG93ZXZlciwgaWYgeW91IGZpbGwgaW4KKwltIHlvdXJzZWxmLCB5b3Ugd2lsbCBnZXQgYSA3NjhiaXQga2V5IC0gYnV0IHRoZW4gaXQgd29uJ3QKKwliZSBzdGFuZGFyZC4gIGl0J3MgNzY4Yml0cyBub3QgMTAyNCBiZWNhdXNlIHRoZSBsZWFzdCBzaWduaWZpY2FudAorCXR3byBiaXRzIG9mIGVhY2ggYnl0ZSBhcmUgbm90IHVzZWQuICBub3RlIHRoYXQgdGhlc2UgdHdvIGJpdHMKKwl3aWxsIGJlIHNldCB0byBtYWdpYyBjb25zdGFudHMgd2hpY2ggc3BlZWQgdXAgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorCW9uIHNvbWUgbWFjaGluZXMuICBhbmQgeWVzLCBlYWNoIGJ5dGUgY29udHJvbHMKKwlhIHNwZWNpZmljIHNib3ggZHVyaW5nIGEgc3BlY2lmaWMgaXRlcmF0aW9uLgorCXlvdSByZWFsbHkgc2hvdWxkbid0IHVzZSB0aGUgNzY4Yml0IGZvcm1hdCBkaXJlY3RseTsgIGkgc2hvdWxkCisJcHJvdmlkZSBhIHJvdXRpbmUgdGhhdCBjb252ZXJ0cyAxMjggNi1iaXQgYnl0ZXMgKHNwZWNpZmllZCBpbgorCVMtYm94IG1hcHBpbmcgb3JkZXIgb3Igc29tZXRoaW5nKSBpbnRvIHRoZSByaWdodCBmb3JtYXQgZm9yIHlvdS4KKwl0aGlzIHdvdWxkIGVudGFpbCBzb21lIGJ5dGUgY29uY2F0ZW5hdGlvbiBhbmQgcm90YXRpb24uCisKK0Rlc3tTbWFsbHxRdWlja317Rmlwc3xDb3JlfXtFbmNyeXB0fERlY3J5cHR9KGQsIG0sIHMpCisJcGVyZm9ybXMgZGVzIG9uIHRoZSA4IGJ5dGVzIGF0IHMgaW50byB0aGUgOCBieXRlcyBhdCBkLiAoZCxzOiBjaGFyICopLgorCXVzZXMgbSBhcyBhIDc2OGJpdCBrZXkgYXMgZXhwbGFpbmVkIGFib3ZlLgorCXRoZSBFbmNyeXB0fERlY3J5cHQgY2hvaWNlIGlzIG9idmlvdXMuCisJRmlwc3xDb3JlIGRldGVybWluZXMgd2hldGhlciBhIGNvbXBsZXRlbHkgc3RhbmRhcmQgRklQUyBpbml0aWFsCisJYW5kIGZpbmFsIHBlcm11dGF0aW9uIGlzIGRvbmU7IGlmIG5vdCwgdGhlbiB0aGUgZGF0YSBpcyBsb2FkZWQKKwlhbmQgc3RvcmVkIGluIGEgbm9uc3RhbmRhcmQgYml0IG9yZGVyIChGSVBTIHcvbyBJUC9GUCkuCisJRmlwcyBzbG93cyBkb3duIFF1aWNrIGJ5IDEwJSwgU21hbGwgYnkgOSUuCisJU21hbGx8UXVpY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIHlvdSB1c2UgdGhlIG5vcm1hbCByb3V0aW5lCisJb3IgdGhlIGNyYXp5IHF1aWNrIG9uZSB3aGljaCBnb2JibGVzIHVwIDY0ayBtb3JlIG9mIG1lbW9yeS4KKwlTbWFsbCBpcyA1MCUgc2xvd2VyIHRoZW4gUXVpY2ssIGJ1dCBRdWljayBuZWVkcyAzMiB0aW1lcyBhcyBtdWNoCisJbWVtb3J5LiAgUXVpY2sgaXMgaW5jbHVkZWQgZm9yIHByb2dyYW1zIHRoYXQgZG8gbm90aGluZyBidXQgREVTLAorCWUuZy4sIGVuY3J5cHRpb24gZmlsdGVycywgZXRjLgorCisKK0dldHRpbmcgaXQgdG8gY29tcGlsZSBvbiB5b3VyIG1hY2hpbmUKKwordGhlcmUgYXJlIG5vIG1hY2hpbmUtZGVwZW5kZW5jaWVzIGluIHRoZSBjb2RlIChzZWUgcG9ydGluZyksCitleGNlcHQgcGVyaGFwcyB0aGUgYG5vdygpJyBtYWNybyBpbiBkZXNUZXN0LmMuCitBTEwgZ2VuZXJhdGVkIHRhYmxlcyBhcmUgbWFjaGluZSBpbmRlcGVuZGVudC4KK3lvdSBzaG91bGQgZWRpdCB0aGUgTWFrZWZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW1pemF0aW9uIGZsYWdzCitmb3IgeW91ciBjb21waWxlciAoTUFYIG9wdGltaXphdGlvbikuCisKKworU3BlZWRpbmcgdXAga2VyYmVyb3MgKGFuZC9vciBpdHMgZGVzIGxpYnJhcnkpCisKK25vdGUgdGhhdCBpIGhhdmUgaW5jbHVkZWQgYSBrZXJiZXJvcy1jb21wYXRpYmxlIGludGVyZmFjZSBpbiBkZXNVdGlsLmMKK3Rocm91Z2ggdGhlIGZ1bmN0aW9ucyBkZXNfa2V5X3NjaGVkKCkgYW5kIGRlc19lY2JfZW5jcnlwdCgpLgordG8gdXNlIHRoZXNlIHdpdGgga2VyYmVyb3Mgb3Iga2VyYmVyb3MtY29tcGF0aWJsZSBjb2RlIHB1dCBkZXNDb3JlLmEKK2FoZWFkIG9mIHRoZSBrZXJiZXJvcy1jb21wYXRpYmxlIGxpYnJhcnkgb24geW91ciBsaW5rZXIncyBjb21tYW5kIGxpbmUuCit5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvICNpbmNsdWRlIGRlc0NvcmUuaDsgIGp1c3QgaW5jbHVkZSB0aGUgaGVhZGVyCitmaWxlIHByb3ZpZGVkIHdpdGggdGhlIGtlcmJlcm9zIGxpYnJhcnkuCisKK090aGVyIHVzZXMKKwordGhlIG1hY3JvcyBpbiBkZXNDb2RlLmggd291bGQgYmUgdmVyeSB1c2VmdWwgZm9yIHB1dHRpbmcgaW5saW5lIGRlcworZnVuY3Rpb25zIGluIG1vcmUgY29tcGxpY2F0ZWQgZW5jcnlwdGlvbiByb3V0aW5lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLW1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctbW9kdWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMjlmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLW1vZHVsZXMudHh0CkBAIC0wLDAgKzEsMTggQEAKK0RlYnVnZ2luZyBNb2R1bGVzIGFmdGVyIDIuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBhbG1vc3QgYWxsIGRpc3RyaWJ1dGlvbnMsIHRoZSBrZXJuZWwgYXNrcyBmb3IgbW9kdWxlcyB3aGljaCBkb24ndAorZXhpc3QsIHN1Y2ggYXMgIm5ldC1wZi0xMCIgb3Igd2hhdGV2ZXIuICBDaGFuZ2luZyAibW9kcHJvYmUgLXEiIHRvCisic3VjY2VlZCIgaW4gdGhpcyBjYXNlIGlzIGhhY2t5IGFuZCBicmVha3Mgc29tZSBzZXR1cHMsIGFuZCBhbHNvIHdlCit3YW50IHRvIGtub3cgaWYgaXQgZmFpbGVkIGZvciB0aGUgZmFsbGJhY2sgY29kZSBmb3Igb2xkIGFsaWFzZXMgaW4KK2ZzL2NoYXJfZGV2LmMsIGZvciBleGFtcGxlLgorCitJbiB0aGUgcGFzdCBhIGRlYnVnZ2luZyBtZXNzYWdlIHdoaWNoIHdvdWxkIGZpbGwgcGVvcGxlJ3MgbG9ncyB3YXMKK2VtaXR0ZWQuICBUaGlzIGRlYnVnZ2luZyBtZXNzYWdlIGhhcyBiZWVuIHJlbW92ZWQuICBUaGUgY29ycmVjdCB3YXkKK29mIGRlYnVnZ2luZyBtb2R1bGUgcHJvYmxlbXMgaXMgc29tZXRoaW5nIGxpa2UgdGhpczoKKworZWNobyAnIyEgL2Jpbi9zaCcgPiAvdG1wL21vZHByb2JlCitlY2hvICdlY2hvICIkQCIgPj4gL3RtcC9tb2Rwcm9iZS5sb2cnID4+IC90bXAvbW9kcHJvYmUKK2VjaG8gJ2V4ZWMgL3NiaW4vbW9kcHJvYmUgIiRAIicgPj4gL3RtcC9tb2Rwcm9iZQorY2htb2QgYSt4IC90bXAvbW9kcHJvYmUKK2VjaG8gL3RtcC9tb2Rwcm9iZSA+IC9wcm9jL3N5cy9rZXJuZWwvbW9kcHJvYmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1pby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0taW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWQ5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0taW8udHh0CkBAIC0wLDAgKzEsNzUgQEAKK2RtLWlvCis9PT09PQorCitEbS1pbyBwcm92aWRlcyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIEkvTyBzZXJ2aWNlcy4gVGhlcmUgYXJlIHRocmVlCit0eXBlcyBvZiBJL08gc2VydmljZXMgYXZhaWxhYmxlLCBhbmQgZWFjaCB0eXBlIGhhcyBhIHN5bmMgYW5kIGFuIGFzeW5jCit2ZXJzaW9uLgorCitUaGUgdXNlciBtdXN0IHNldCB1cCBhbiBpb19yZWdpb24gc3RydWN0dXJlIHRvIGRlc2NyaWJlIHRoZSBkZXNpcmVkIGxvY2F0aW9uCitvZiB0aGUgSS9PLiBFYWNoIGlvX3JlZ2lvbiBpbmRpY2F0ZXMgYSBibG9jay1kZXZpY2UgYWxvbmcgd2l0aCB0aGUgc3RhcnRpbmcKK3NlY3RvciBhbmQgc2l6ZSBvZiB0aGUgcmVnaW9uLgorCisgICBzdHJ1Y3QgaW9fcmVnaW9uIHsKKyAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisgICAgICBzZWN0b3JfdCBzZWN0b3I7CisgICAgICBzZWN0b3JfdCBjb3VudDsKKyAgIH07CisKK0RtLWlvIGNhbiByZWFkIGZyb20gb25lIGlvX3JlZ2lvbiBvciB3cml0ZSB0byBvbmUgb3IgbW9yZSBpb19yZWdpb25zLiBXcml0ZXMKK3RvIG11bHRpcGxlIHJlZ2lvbnMgYXJlIHNwZWNpZmllZCBieSBhbiBhcnJheSBvZiBpb19yZWdpb24gc3RydWN0dXJlcy4KKworVGhlIGZpcnN0IEkvTyBzZXJ2aWNlIHR5cGUgdGFrZXMgYSBsaXN0IG9mIG1lbW9yeSBwYWdlcyBhcyB0aGUgZGF0YSBidWZmZXIgZm9yCit0aGUgSS9PLCBhbG9uZyB3aXRoIGFuIG9mZnNldCBpbnRvIHRoZSBmaXJzdCBwYWdlLgorCisgICBzdHJ1Y3QgcGFnZV9saXN0IHsKKyAgICAgIHN0cnVjdCBwYWdlX2xpc3QgKm5leHQ7CisgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZTsKKyAgIH07CisKKyAgIGludCBkbV9pb19zeW5jKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsIGludCBydywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlX2xpc3QgKnBsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZXJyb3JfYml0cyk7CisgICBpbnQgZG1faW9fYXN5bmModW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwgaW50IHJ3LAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlX2xpc3QgKnBsLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGlvX25vdGlmeV9mbiBmbiwgdm9pZCAqY29udGV4dCk7CisKK1RoZSBzZWNvbmQgSS9PIHNlcnZpY2UgdHlwZSB0YWtlcyBhbiBhcnJheSBvZiBiaW8gdmVjdG9ycyBhcyB0aGUgZGF0YSBidWZmZXIKK2ZvciB0aGUgSS9PLiBUaGlzIHNlcnZpY2UgY2FuIGJlIGhhbmR5IGlmIHRoZSBjYWxsZXIgaGFzIGEgcHJlLWFzc2VtYmxlZCBiaW8sCitidXQgd2FudHMgdG8gZGlyZWN0IGRpZmZlcmVudCBwb3J0aW9ucyBvZiB0aGUgYmlvIHRvIGRpZmZlcmVudCBkZXZpY2VzLgorCisgICBpbnQgZG1faW9fc3luY19idmVjKHVuc2lnbmVkIGludCBudW1fcmVnaW9ucywgc3RydWN0IGlvX3JlZ2lvbiAqd2hlcmUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBydywgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmVycm9yX2JpdHMpOworICAgaW50IGRtX2lvX2FzeW5jX2J2ZWModW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBydywgc3RydWN0IGJpb192ZWMgKmJ2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICBpb19ub3RpZnlfZm4gZm4sIHZvaWQgKmNvbnRleHQpOworCitUaGUgdGhpcmQgSS9PIHNlcnZpY2UgdHlwZSB0YWtlcyBhIHBvaW50ZXIgdG8gYSB2bWFsbG9jJ2QgbWVtb3J5IGJ1ZmZlciBhcyB0aGUKK2RhdGEgYnVmZmVyIGZvciB0aGUgSS9PLiBUaGlzIHNlcnZpY2UgY2FuIGJlIGhhbmR5IGlmIHRoZSBjYWxsZXIgbmVlZHMgdG8gZG8KK0kvTyB0byBhIGxhcmdlIHJlZ2lvbiBidXQgZG9lc24ndCB3YW50IHRvIGFsbG9jYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIGluZGl2aWR1YWwKK21lbW9yeSBwYWdlcy4KKworICAgaW50IGRtX2lvX3N5bmNfdm0odW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwgaW50IHJ3LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyAqZXJyb3JfYml0cyk7CisgICBpbnQgZG1faW9fYXN5bmNfdm0odW5zaWduZWQgaW50IG51bV9yZWdpb25zLCBzdHJ1Y3QgaW9fcmVnaW9uICp3aGVyZSwgaW50IHJ3LAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIGlvX25vdGlmeV9mbiBmbiwgdm9pZCAqY29udGV4dCk7CisKK0NhbGxlcnMgb2YgdGhlIGFzeW5jaHJvbm91cyBJL08gc2VydmljZXMgbXVzdCBpbmNsdWRlIHRoZSBuYW1lIG9mIGEgY29tcGxldGlvbgorY2FsbGJhY2sgcm91dGluZSBhbmQgYSBwb2ludGVyIHRvIHNvbWUgY29udGV4dCBkYXRhIGZvciB0aGUgSS9PLgorCisgICB0eXBlZGVmIHZvaWQgKCppb19ub3RpZnlfZm4pKHVuc2lnbmVkIGxvbmcgZXJyb3IsIHZvaWQgKmNvbnRleHQpOworCitUaGUgImVycm9yIiBwYXJhbWV0ZXIgaW4gdGhpcyBjYWxsYmFjaywgYXMgd2VsbCBhcyB0aGUgIiplcnJvciIgcGFyYW1ldGVyIGluCithbGwgb2YgdGhlIHN5bmNocm9ub3VzIHZlcnNpb25zLCBpcyBhIGJpdHNldCAoaW5zdGVhZCBvZiBhIHNpbXBsZSBlcnJvciB2YWx1ZSkuCitJbiB0aGUgY2FzZSBvZiBhbiB3cml0ZS1JL08gdG8gbXVsdGlwbGUgcmVnaW9ucywgdGhpcyBiaXRzZXQgYWxsb3dzIGRtLWlvIHRvCitpbmRpY2F0ZSBzdWNjZXNzIG9yIGZhaWx1cmUgb24gZWFjaCBpbmRpdmlkdWFsIHJlZ2lvbi4KKworQmVmb3JlIHVzaW5nIGFueSBvZiB0aGUgZG0taW8gc2VydmljZXMsIHRoZSB1c2VyIHNob3VsZCBjYWxsIGRtX2lvX2dldCgpCithbmQgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoZXkgZXhwZWN0IHRvIHBlcmZvcm0gSS9PIG9uIGNvbmN1cnJlbnRseS4KK0RtLWlvIHdpbGwgYXR0ZW1wdCB0byByZXNpemUgaXRzIG1lbXBvb2wgdG8gbWFrZSBzdXJlIGVub3VnaCBwYWdlcyBhcmUKK2Fsd2F5cyBhdmFpbGFibGUgaW4gb3JkZXIgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2FpdGluZyB3aGlsZSBwZXJmb3JtaW5nIEkvTy4KKworV2hlbiB0aGUgdXNlciBpcyBmaW5pc2hlZCB1c2luZyB0aGUgZG0taW8gc2VydmljZXMsIHRoZXkgc2hvdWxkIGNhbGwKK2RtX2lvX3B1dCgpIGFuZCBzcGVjaWZ5IHRoZSBzYW1lIG51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgZ2l2ZW4gb24gdGhlCitkbV9pb19nZXQoKSBjYWxsLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIva2NvcHlkLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9rY29weWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDM4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIva2NvcHlkLnR4dApAQCAtMCwwICsxLDQ3IEBACitrY29weWQKKz09PT09PQorCitLY29weWQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY29weSBhIHJhbmdlIG9mIHNlY3RvcnMgZnJvbSBvbmUgYmxvY2stZGV2aWNlCit0byBvbmUgb3IgbW9yZSBvdGhlciBibG9jay1kZXZpY2VzLCB3aXRoIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uCitub3RpZmljYXRpb24uIEl0IGlzIHVzZWQgYnkgZG0tc25hcHNob3QgYW5kIGRtLW1pcnJvci4KKworVXNlcnMgb2Yga2NvcHlkIG11c3QgZmlyc3QgY3JlYXRlIGEgY2xpZW50IGFuZCBpbmRpY2F0ZSBob3cgbWFueSBtZW1vcnkgcGFnZXMKK3RvIHNldCBhc2lkZSBmb3IgdGhlaXIgY29weSBqb2JzLiBUaGlzIGlzIGRvbmUgd2l0aCBhIGNhbGwgdG8KK2tjb3B5ZF9jbGllbnRfY3JlYXRlKCkuCisKKyAgIGludCBrY29weWRfY2xpZW50X2NyZWF0ZSh1bnNpZ25lZCBpbnQgbnVtX3BhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrY29weWRfY2xpZW50ICoqcmVzdWx0KTsKKworVG8gc3RhcnQgYSBjb3B5IGpvYiwgdGhlIHVzZXIgbXVzdCBzZXQgdXAgaW9fcmVnaW9uIHN0cnVjdHVyZXMgdG8gZGVzY3JpYmUKK3RoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9ucyBvZiB0aGUgY29weS4gRWFjaCBpb19yZWdpb24gaW5kaWNhdGVzIGEKK2Jsb2NrLWRldmljZSBhbG9uZyB3aXRoIHRoZSBzdGFydGluZyBzZWN0b3IgYW5kIHNpemUgb2YgdGhlIHJlZ2lvbi4gVGhlIHNvdXJjZQorb2YgdGhlIGNvcHkgaXMgZ2l2ZW4gYXMgb25lIGlvX3JlZ2lvbiBzdHJ1Y3R1cmUsIGFuZCB0aGUgZGVzdGluYXRpb25zIG9mIHRoZQorY29weSBhcmUgZ2l2ZW4gYXMgYW4gYXJyYXkgb2YgaW9fcmVnaW9uIHN0cnVjdHVyZXMuCisKKyAgIHN0cnVjdCBpb19yZWdpb24geworICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKyAgICAgIHNlY3Rvcl90IHNlY3RvcjsKKyAgICAgIHNlY3Rvcl90IGNvdW50OworICAgfTsKKworVG8gc3RhcnQgdGhlIGNvcHksIHRoZSB1c2VyIGNhbGxzIGtjb3B5ZF9jb3B5KCksIHBhc3NpbmcgaW4gdGhlIGNsaWVudAorcG9pbnRlciwgcG9pbnRlcnMgdG8gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW9fcmVnaW9ucywgdGhlIG5hbWUgb2YgYQorY29tcGxldGlvbiBjYWxsYmFjayByb3V0aW5lLCBhbmQgYSBwb2ludGVyIHRvIHNvbWUgY29udGV4dCBkYXRhIGZvciB0aGUgY29weS4KKworICAgaW50IGtjb3B5ZF9jb3B5KHN0cnVjdCBrY29weWRfY2xpZW50ICprYywgc3RydWN0IGlvX3JlZ2lvbiAqZnJvbSwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2Rlc3RzLCBzdHJ1Y3QgaW9fcmVnaW9uICpkZXN0cywKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGtjb3B5ZF9ub3RpZnlfZm4gZm4sIHZvaWQgKmNvbnRleHQpOworCisgICB0eXBlZGVmIHZvaWQgKCprY29weWRfbm90aWZ5X2ZuKShpbnQgcmVhZF9lcnIsIHVuc2lnbmVkIGludCB3cml0ZV9lcnIsCisJCQkJICAgIHZvaWQgKmNvbnRleHQpOworCitXaGVuIHRoZSBjb3B5IGNvbXBsZXRlcywga2NvcHlkIHdpbGwgY2FsbCB0aGUgdXNlcidzIGNvbXBsZXRpb24gcm91dGluZSwKK3Bhc3NpbmcgYmFjayB0aGUgdXNlcidzIGNvbnRleHQgcG9pbnRlci4gSXQgd2lsbCBhbHNvIGluZGljYXRlIGlmIGEgcmVhZCBvcgord3JpdGUgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBjb3B5LgorCitXaGVuIGEgdXNlciBpcyBkb25lIHdpdGggYWxsIHRoZWlyIGNvcHkgam9icywgdGhleSBzaG91bGQgY2FsbAora2NvcHlkX2NsaWVudF9kZXN0cm95KCkgdG8gZGVsZXRlIHRoZSBrY29weWQgY2xpZW50LCB3aGljaCB3aWxsIHJlbGVhc2UgdGhlCithc3NvY2lhdGVkIG1lbW9yeSBwYWdlcy4KKworICAgdm9pZCBrY29weWRfY2xpZW50X2Rlc3Ryb3koc3RydWN0IGtjb3B5ZF9jbGllbnQgKmtjKTsKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2xpbmVhci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvbGluZWFyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTMwN2QzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2xpbmVhci50eHQKQEAgLTAsMCArMSw2MSBAQAorZG0tbGluZWFyCis9PT09PT09PT0KKworRGV2aWNlLU1hcHBlcidzICJsaW5lYXIiIHRhcmdldCBtYXBzIGEgbGluZWFyIHJhbmdlIG9mIHRoZSBEZXZpY2UtTWFwcGVyCitkZXZpY2Ugb250byBhIGxpbmVhciByYW5nZSBvZiBhbm90aGVyIGRldmljZS4gIFRoaXMgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nCitibG9jayBvZiBsb2dpY2FsIHZvbHVtZSBtYW5hZ2Vycy4KKworUGFyYW1ldGVyczogPGRldiBwYXRoPiA8b2Zmc2V0PgorICAgIDxkZXYgcGF0aD46IEZ1bGwgcGF0aG5hbWUgdG8gdGhlIHVuZGVybHlpbmcgYmxvY2stZGV2aWNlLCBvciBhCisgICAgICAgICAgICAgICAgIm1ham9yOm1pbm9yIiBkZXZpY2UtbnVtYmVyLgorICAgIDxvZmZzZXQ+OiBTdGFydGluZyBzZWN0b3Igd2l0aGluIHRoZSBkZXZpY2UuCisKKworRXhhbXBsZSBzY3JpcHRzCis9PT09PT09PT09PT09PT0KK1tbCisjIS9iaW4vc2gKKyMgQ3JlYXRlIGFuIGlkZW50aXR5IG1hcHBpbmcgZm9yIGEgZGV2aWNlCitlY2hvICIwIGBibG9ja2RldiAtLWdldHNpemUgJDFgIGxpbmVhciAkMSAwIiB8IGRtc2V0dXAgY3JlYXRlIGlkZW50aXR5CitdXQorCisKK1tbCisjIS9iaW4vc2gKKyMgSm9pbiAyIGRldmljZXMgdG9nZXRoZXIKK3NpemUxPWBibG9ja2RldiAtLWdldHNpemUgJDFgCitzaXplMj1gYmxvY2tkZXYgLS1nZXRzaXplICQyYAorZWNobyAiMCAkc2l6ZTEgbGluZWFyICQxIDAKKyRzaXplMSAkc2l6ZTIgbGluZWFyICQyIDAiIHwgZG1zZXR1cCBjcmVhdGUgam9pbmVkCitdXQorCisKK1tbCisjIS91c3IvYmluL3BlcmwgLXcKKyMgU3BsaXQgYSBkZXZpY2UgaW50byA0TSBjaHVua3MgYW5kIHRoZW4gam9pbiB0aGVtIHRvZ2V0aGVyIGluIHJldmVyc2Ugb3JkZXIuCisKK215ICRuYW1lID0gInJldmVyc2UiOworbXkgJGV4dGVudF9zaXplID0gNCAqIDEwMjQgKiAyOworbXkgJGRldiA9ICRBUkdWWzBdOworbXkgJHRhYmxlID0gIiI7CitteSAkY291bnQgPSAwOworCitpZiAoIWRlZmluZWQoJGRldikpIHsKKyAgICAgICAgZGllKCJQbGVhc2Ugc3BlY2lmeSBhIGRldmljZS5cbiIpOworfQorCitteSAkZGV2X3NpemUgPSBgYmxvY2tkZXYgLS1nZXRzaXplICRkZXZgOworbXkgJGV4dGVudHMgPSBpbnQoJGRldl9zaXplIC8gJGV4dGVudF9zaXplKSAtCisgICAgICAgICAgICAgICgoJGRldl9zaXplICUgJGV4dGVudF9zaXplKSA/IDEgOiAwKTsKKword2hpbGUgKCRleHRlbnRzID4gMCkgeworICAgICAgICBteSAkdGhpc19zdGFydCA9ICRjb3VudCAqICRleHRlbnRfc2l6ZTsKKyAgICAgICAgJGV4dGVudHMtLTsKKyAgICAgICAgJGNvdW50Kys7CisgICAgICAgIG15ICR0aGlzX29mZnNldCA9ICRleHRlbnRzICogJGV4dGVudF9zaXplOworCisgICAgICAgICR0YWJsZSAuPSAiJHRoaXNfc3RhcnQgJGV4dGVudF9zaXplIGxpbmVhciAkZGV2ICR0aGlzX29mZnNldFxuIjsKK30KKworYGVjaG8gXCIkdGFibGVcIiB8IGRtc2V0dXAgY3JlYXRlICRuYW1lYDsKK11dCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc3RyaXBlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc3RyaXBlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0ZDMyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9zdHJpcGVkLnR4dApAQCAtMCwwICsxLDU4IEBACitkbS1zdHJpcGUKKz09PT09PT09PQorCitEZXZpY2UtTWFwcGVyJ3MgInN0cmlwZWQiIHRhcmdldCBpcyB1c2VkIHRvIGNyZWF0ZSBhIHN0cmlwZWQgKGkuZS4gUkFJRC0wKQorZGV2aWNlIGFjcm9zcyBvbmUgb3IgbW9yZSB1bmRlcmx5aW5nIGRldmljZXMuIERhdGEgaXMgd3JpdHRlbiBpbiAiY2h1bmtzIiwKK3dpdGggY29uc2VjdXRpdmUgY2h1bmtzIHJvdGF0aW5nIGFtb25nIHRoZSB1bmRlcmx5aW5nIGRldmljZXMuIFRoaXMgY2FuCitwb3RlbnRpYWxseSBwcm92aWRlIGltcHJvdmVkIEkvTyB0aHJvdWdocHV0IGJ5IHV0aWxpemluZyBzZXZlcmFsIHBoeXNpY2FsCitkZXZpY2VzIGluIHBhcmFsbGVsLgorCitQYXJhbWV0ZXJzOiA8bnVtIGRldnM+IDxjaHVuayBzaXplPiBbPGRldiBwYXRoPiA8b2Zmc2V0Pl0rCisgICAgPG51bSBkZXZzPjogTnVtYmVyIG9mIHVuZGVybHlpbmcgZGV2aWNlcy4KKyAgICA8Y2h1bmsgc2l6ZT46IFNpemUgb2YgZWFjaCBjaHVuayBvZiBkYXRhLiBNdXN0IGJlIGEgcG93ZXItb2YtMiBhbmQgYXQKKyAgICAgICAgICAgICAgICAgIGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBzeXN0ZW0ncyBQQUdFX1NJWkUuCisgICAgPGRldiBwYXRoPjogRnVsbCBwYXRobmFtZSB0byB0aGUgdW5kZXJseWluZyBibG9jay1kZXZpY2UsIG9yIGEKKyAgICAgICAgICAgICAgICAibWFqb3I6bWlub3IiIGRldmljZS1udW1iZXIuCisgICAgPG9mZnNldD46IFN0YXJ0aW5nIHNlY3RvciB3aXRoaW4gdGhlIGRldmljZS4KKworT25lIG9yIG1vcmUgdW5kZXJseWluZyBkZXZpY2VzIGNhbiBiZSBzcGVjaWZpZWQuIFRoZSBzdHJpcGVkIGRldmljZSBzaXplIG11c3QKK2JlIGEgbXVsdGlwbGUgb2YgdGhlIGNodW5rIHNpemUgYW5kIGEgbXVsdGlwbGUgb2YgdGhlIG51bWJlciBvZiB1bmRlcmx5aW5nCitkZXZpY2VzLgorCisKK0V4YW1wbGUgc2NyaXB0cworPT09PT09PT09PT09PT09CisKK1tbCisjIS91c3IvYmluL3BlcmwgLXcKKyMgQ3JlYXRlIGEgc3RyaXBlZCBkZXZpY2UgYWNyb3NzIGFueSBudW1iZXIgb2YgdW5kZXJseWluZyBkZXZpY2VzLiBUaGUgZGV2aWNlCisjIHdpbGwgYmUgY2FsbGVkICJzdHJpcGVfZGV2IiBhbmQgaGF2ZSBhIGNodW5rLXNpemUgb2YgMTI4ay4KKworbXkgJGNodW5rX3NpemUgPSAxMjggKiAyOworbXkgJGRldl9uYW1lID0gInN0cmlwZV9kZXYiOworbXkgJG51bV9kZXZzID0gQEFSR1Y7CitteSBAZGV2cyA9IEBBUkdWOworbXkgKCRtaW5fZGV2X3NpemUsICRzdHJpcGVfZGV2X3NpemUsICRpKTsKKworaWYgKCEkbnVtX2RldnMpIHsKKyAgICAgICAgZGllKCJTcGVjaWZ5IGF0IGxlYXN0IG9uZSBkZXZpY2VcbiIpOworfQorCiskbWluX2Rldl9zaXplID0gYGJsb2NrZGV2IC0tZ2V0c2l6ZSAkZGV2c1swXWA7Citmb3IgKCRpID0gMTsgJGkgPCAkbnVtX2RldnM7ICRpKyspIHsKKyAgICAgICAgbXkgJHRoaXNfc2l6ZSA9IGBibG9ja2RldiAtLWdldHNpemUgJGRldnNbJGldYDsKKyAgICAgICAgJG1pbl9kZXZfc2l6ZSA9ICgkbWluX2Rldl9zaXplIDwgJHRoaXNfc2l6ZSkgPworICAgICAgICAgICAgICAgICAgICAgICAgJG1pbl9kZXZfc2l6ZSA6ICR0aGlzX3NpemU7Cit9CisKKyRzdHJpcGVfZGV2X3NpemUgPSAkbWluX2Rldl9zaXplICogJG51bV9kZXZzOworJHN0cmlwZV9kZXZfc2l6ZSAtPSAkc3RyaXBlX2Rldl9zaXplICUgKCRjaHVua19zaXplICogJG51bV9kZXZzKTsKKworJHRhYmxlID0gIjAgJHN0cmlwZV9kZXZfc2l6ZSBzdHJpcGVkICRudW1fZGV2cyAkY2h1bmtfc2l6ZSI7Citmb3IgKCRpID0gMDsgJGkgPCAkbnVtX2RldnM7ICRpKyspIHsKKyAgICAgICAgJHRhYmxlIC49ICIgJGRldnNbJGldIDAiOworfQorCitgZWNobyAkdGFibGUgfCBkbXNldHVwIGNyZWF0ZSAkZGV2X25hbWVgOworXV0KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3plcm8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3plcm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmIzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvemVyby50eHQKQEAgLTAsMCArMSwzNyBAQAorZG0temVybworPT09PT09PQorCitEZXZpY2UtTWFwcGVyJ3MgInplcm8iIHRhcmdldCBwcm92aWRlcyBhIGJsb2NrLWRldmljZSB0aGF0IGFsd2F5cyByZXR1cm5zCit6ZXJvJ2QgZGF0YSBvbiByZWFkcyBhbmQgc2lsZW50bHkgZHJvcHMgd3JpdGVzLiBUaGlzIGlzIHNpbWlsYXIgYmVoYXZpb3IgdG8KKy9kZXYvemVybywgYnV0IGFzIGEgYmxvY2stZGV2aWNlIGluc3RlYWQgb2YgYSBjaGFyYWN0ZXItZGV2aWNlLgorCitEbS16ZXJvIGhhcyBubyB0YXJnZXQtc3BlY2lmaWMgcGFyYW1ldGVycy4KKworT25lIHZlcnkgaW50ZXJlc3RpbmcgdXNlIG9mIGRtLXplcm8gaXMgZm9yIGNyZWF0aW5nICJzcGFyc2UiIGRldmljZXMgaW4KK2Nvbmp1bmN0aW9uIHdpdGggZG0tc25hcHNob3QuIEEgc3BhcnNlIGRldmljZSByZXBvcnRzIGEgZGV2aWNlLXNpemUgbGFyZ2VyCit0aGFuIHRoZSBhbW91bnQgb2YgYWN0dWFsIHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlIGZvciB0aGF0IGRldmljZS4gQSB1c2VyIGNhbgord3JpdGUgZGF0YSBhbnl3aGVyZSB3aXRoaW4gdGhlIHNwYXJzZSBkZXZpY2UgYW5kIHJlYWQgaXQgYmFjayBsaWtlIGEgbm9ybWFsCitkZXZpY2UuIFJlYWRzIHRvIHByZXZpb3VzbHkgdW53cml0dGVuIGFyZWFzIHdpbGwgcmV0dXJuIGEgemVybydkIGJ1ZmZlci4gV2hlbgorZW5vdWdoIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byBmaWxsIHVwIHRoZSBhY3R1YWwgc3RvcmFnZSBzcGFjZSwgdGhlIHNwYXJzZQorZGV2aWNlIGlzIGRlYWN0aXZhdGVkLiBUaGlzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCBmb3IgdGVzdGluZyBkZXZpY2UgYW5kCitmaWxlc3lzdGVtIGxpbWl0YXRpb25zLgorCitUbyBjcmVhdGUgYSBzcGFyc2UgZGV2aWNlLCBzdGFydCBieSBjcmVhdGluZyBhIGRtLXplcm8gZGV2aWNlIHRoYXQncyB0aGUKK2Rlc2lyZWQgc2l6ZSBvZiB0aGUgc3BhcnNlIGRldmljZS4gRm9yIHRoaXMgZXhhbXBsZSwgd2UnbGwgYXNzdW1lIGEgMTBUQgorc3BhcnNlIGRldmljZS4KKworVEVOX1RFUkFCWVRFUz1gZXhwciAxMCBcKiAxMDI0IFwqIDEwMjQgXCogMTAyNCBcKiAyYCAgICMgMTAgVEIgaW4gc2VjdG9ycworZWNobyAiMCAkVEVOX1RFUkFCWVRFUyB6ZXJvIiB8IGRtc2V0dXAgY3JlYXRlIHplcm8xCisKK1RoZW4gY3JlYXRlIGEgc25hcHNob3Qgb2YgdGhlIHplcm8gZGV2aWNlLCB1c2luZyBhbnkgYXZhaWxhYmxlIGJsb2NrLWRldmljZSBhcwordGhlIENPVyBkZXZpY2UuIFRoZSBzaXplIG9mIHRoZSBDT1cgZGV2aWNlIHdpbGwgZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgcmVhbAorc3BhY2UgYXZhaWxhYmxlIHRvIHRoZSBzcGFyc2UgZGV2aWNlLiBGb3IgdGhpcyBleGFtcGxlLCB3ZSdsbCBhc3N1bWUgL2Rldi9zZGIxCitpcyBhbiBhdmFpbGFibGUgMTBHQiBwYXJ0aXRpb24uCisKK2VjaG8gIjAgJFRFTl9URVJBQllURVMgc25hcHNob3QgL2Rldi9tYXBwZXIvemVybzEgL2Rldi9zZGIxIHAgMTI4IiB8IFwKKyAgIGRtc2V0dXAgY3JlYXRlIHNwYXJzZTEKKworVGhpcyB3aWxsIGNyZWF0ZSBhIDEwVEIgc3BhcnNlIGRldmljZSBjYWxsZWQgL2Rldi9tYXBwZXIvc3BhcnNlMSB0aGF0IGhhcworMTBHQiBvZiBhY3R1YWwgc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUuIElmIG1vcmUgdGhhbiAxMEdCIG9mIGRhdGEgaXMgd3JpdHRlbgordG8gdGhpcyBkZXZpY2UsIGl0IHdpbGwgc3RhcnQgcmV0dXJuaW5nIEkvTyBlcnJvcnMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjdjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0wLDAgKzEsMzIxNiBAQAorCisJCSAgICBMSU5VWCBBTExPQ0FURUQgREVWSUNFUyAoMi42KyB2ZXJzaW9uKQorCisJICAgICBNYWludGFpbmVkIGJ5IFRvcmJlbiBNYXRoaWFzZW4gPGRldmljZUBsYW5hbmEub3JnPgorCisJCSAgICAgIExhc3QgcmV2aXNlZDogMjUgSmFudWFyeSAyMDA1CisKK1RoaXMgbGlzdCBpcyB0aGUgTGludXggRGV2aWNlIExpc3QsIHRoZSBvZmZpY2lhbCByZWdpc3RyeSBvZiBhbGxvY2F0ZWQKK2RldmljZSBudW1iZXJzIGFuZCAvZGV2IGRpcmVjdG9yeSBub2RlcyBmb3IgdGhlIExpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaXN0IGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vd3d3LmxhbmFuYS5vcmcvZG9jcy9kZXZpY2UtbGlzdC8gb3IKK2Z0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9kb2NzL2RldmljZS1saXN0Ly4gIFRoaXMgdmVyc2lvbiBtYXkgYmUKK25ld2VyIHRoYW4gdGhlIG9uZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisKK1RoZSBMYVRlWCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgaXMgbm8gbG9uZ2VyIG1haW50YWluZWQuCisKK1RoaXMgZG9jdW1lbnQgaXMgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGludG8gdGhlIEZpbGVzeXN0ZW0gSGllcmFyY2h5CitTdGFuZGFyZCAoRkhTKS4JIFRoZSBGSFMgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5wYXRobmFtZS5jb20vZmhzLy4KKworQWxsb2NhdGlvbnMgbWFya2VkICg2OGsvQW1pZ2EpIGFwcGx5IHRvIExpbnV4LzY4ayBvbiB0aGUgQW1pZ2EKK3BsYXRmb3JtIG9ubHkuCUFsbG9jYXRpb25zIG1hcmtlZCAoNjhrL0F0YXJpKSBhcHBseSB0byBMaW51eC82OGsgb24KK3RoZSBBdGFyaSBwbGF0Zm9ybSBvbmx5LgorCitUaGUgc3ltYm9sIHsyLjZ9IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGlzIG9ic29sZXRlIGFuZCBzY2hlZHVsZWQgZm9yCityZW1vdmFsIG9uY2Uga2VybmVsIHZlcnNpb24gMi42IChvciBlcXVpdmFsZW50KSBpcyByZWxlYXNlZC4gU29tZSBvZiB0aGVzZQorYWxsb2NhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KKworVGhpcyBkb2N1bWVudCBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4JVGhlIGF1dGhvciByZXF1ZXN0cywgaG93ZXZlciwKK3RoYXQgc2VtYW50aWNhbGx5IGFsdGVyZWQgdmVyc2lvbnMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRob3V0CitwZXJtaXNzaW9uIG9mIHRoZSBhdXRob3IsIGFzc3VtaW5nIHRoZSBhdXRob3IgY2FuIGJlIGNvbnRhY3RlZCB3aXRob3V0CithbiB1bnJlYXNvbmFibGUgZWZmb3J0LgorCitJbiBwYXJ0aWN1bGFyLCBwbGVhc2UgZG9uJ3Qgc2VudCBwYXRjaGVzIGZvciB0aGlzIGxpc3QgdG8gTGludXMsIGF0CitsZWFzdCBub3Qgd2l0aG91dCBjb250YWN0aW5nIG1lIGZpcnN0LgorCitJIGRvIG5vdCBoYXZlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBkZXZpY2VzIGJleW9uZCB3aGF0IGFwcGVhcnMKK29uIHRoaXMgbGlzdC4gIEFueSBzdWNoIGluZm9ybWF0aW9uIHJlcXVlc3RzIHdpbGwgYmUgZGVsZXRlZCB3aXRob3V0CityZXBseS4KKworCisJICAqKioqIERFVklDRSBEUklWRVJTIEFVVEhPUlMgUExFQVNFIFJFQUQgVEhJUyAqKioqCisKK1RvIGhhdmUgYSBtYWpvciBudW1iZXIgYWxsb2NhdGVkLCBvciBhIG1pbm9yIG51bWJlciBpbiBzaXR1YXRpb25zCit3aGVyZSB0aGF0IGFwcGxpZXMgKGUuZy4gYnVzbWljZSksIHBsZWFzZSBjb250YWN0IG1lIHdpdGggdGhlCithcHByb3ByaWF0ZSBkZXZpY2UgaW5mb3JtYXRpb24uCSBBbHNvLCBpZiB5b3UgaGF2ZSBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IG9mIHRoZSBkZXZpY2VzIGxpc3RlZCBiZWxvdywgb3IgaWYgSSBoYXZlCittYWRlIGEgbWlzdGFrZSwgSSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgYSBub3RlLgorCitJIGRvLCBob3dldmVyLCBtYWtlIGEgZmV3IHJlcXVlc3RzIGFib3V0IHRoZSBuYXR1cmUgb2YgeW91ciByZXBvcnQuCitUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbWUgdG8gYmUgYWJsZSB0byBrZWVwIHRoaXMgbGlzdCB1cCB0byBkYXRlIGFuZAorY29ycmVjdCBpbiBhIHRpbWVseSBtYW5uZXIuICBGaXJzdCBvZiBhbGwsICpwbGVhc2UqIHNlbmQgaXQgdG8gdGhlCitjb3JyZWN0IGFkZHJlc3MuLi4gPGRldmljZUBsYW5hbmEub3JnPi4gIEkgcmVjZWl2ZSBodW5kcmVkcyBvZiBlbWFpbAorbWVzc2FnZXMgYSBkYXksIHNvIG1haWwgc2VudCB0byBvdGhlciBhZGRyZXNzZXMgbWF5IHZlcnkgd2VsbCBnZXQgbG9zdAoraW4gdGhlIGF2YWxhbmNoZS4gIFBsZWFzZSBwdXQgaW4gYSBkZXNjcmlwdGl2ZSBzdWJqZWN0LCBzbyBJIGNhbiBmaW5kCit5b3VyIG1haWwgYWdhaW4gc2hvdWxkIEkgbmVlZCB0by4gIFRvbyBtYW55IHBlb3BsZSBzZW5kIG1lIGVtYWlsCitzYXlpbmcganVzdCAiZGV2aWNlIG51bWJlciByZXF1ZXN0IiBpbiB0aGUgc3ViamVjdC4KKworU2Vjb25kLCBwbGVhc2UgaW5jbHVkZSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkZXZpY2UgKmluIHRoZSBzYW1lIGZvcm1hdAorYXMgdGhpcyBsaXN0Ki4JVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGl0IGlzIHRoZSBvbmx5IHdheSBJIGhhdmUKK2ZvdW5kIHRvIGVuc3VyZSBJIGhhdmUgYWxsIHRoZSByZXF1aXNpdGUgaW5mb3JtYXRpb24gdG8gcHVibGlzaCB5b3VyCitkZXZpY2UgYW5kIGF2b2lkIGNvbmZsaWN0cy4KKworVGhpcmQsIHBsZWFzZSBkb24ndCBhc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0ZWQgdmVyc2lvbiBvZiB0aGUgbGlzdCBpcwordXAgdG8gZGF0ZS4gIER1ZSB0byB0aGUgbnVtYmVyIG9mIHJlZ2lzdHJhdGlvbnMgSSBoYXZlIHRvIG1haW50YWluIGl0CitpbiAiYmF0Y2ggbW9kZSIsIHNvIHRoZXJlIGlzIGxpa2VseSBhZGRpdGlvbmFsIHJlZ2lzdHJhdGlvbnMgdGhhdAoraGF2ZW4ndCBiZWVuIGxpc3RlZCB5ZXQuCisKK0ZpbmFsbHksIHNvbWV0aW1lcyBJIGhhdmUgdG8gcGxheSAibmFtZXNwYWNlIHBvbGljZS4iICBQbGVhc2UgZG9uJ3QgYmUKK29mZmVuZGVkLiAgSSBvZnRlbiBnZXQgc3VibWlzc2lvbnMgZm9yIC9kZXYgbmFtZXMgdGhhdCB3b3VsZCBiZSBib3VuZAordG8gY2F1c2UgY29uZmxpY3RzIGRvd24gdGhlIHJvYWQuICBJIGFtIHRyeWluZyB0byBhdm9pZCBnZXR0aW5nIGluIGEKK3NpdHVhdGlvbiB3aGVyZSB3ZSB3b3VsZCBoYXZlIHRvIHN1ZmZlciBhbiBpbmNvbXBhdGlibGUgZm9yd2FyZAorY2hhbmdlLiAgVGhlcmVmb3JlLCBwbGVhc2UgY29uc3VsdCB3aXRoIG1lICpiZWZvcmUqIHlvdSBtYWtlIHlvdXIKK2RldmljZSBuYW1lcyBhbmQgbnVtYmVycyBpbiBhbnkgd2F5IHB1YmxpYywgYXQgbGVhc3QgdG8gdGhlIHBvaW50Cit3aGVyZSBpdCB3b3VsZCBiZSBhdCBhbGwgZGlmZmljdWx0IHRvIGdldCB0aGVtIGNoYW5nZWQuCisKK1lvdXIgY29vcGVyYXRpb24gaXMgYXBwcmVjaWF0ZWQuCisKKworICAwCQlVbm5hbWVkIGRldmljZXMgKGUuZy4gbm9uLWRldmljZSBtb3VudHMpCisJCSAgMCA9IHJlc2VydmVkIGFzIG51bGwgZGV2aWNlIG51bWJlcgorCQlTZWUgYmxvY2sgbWFqb3IgMTQ0LCAxNDUsIDE0NiBmb3IgZXhwYW5zaW9uIGFyZWFzLgorCisgIDEgY2hhcglNZW1vcnkgZGV2aWNlcworCQkgIDEgPSAvZGV2L21lbQkJUGh5c2ljYWwgbWVtb3J5IGFjY2VzcworCQkgIDIgPSAvZGV2L2ttZW0JCUtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBhY2Nlc3MKKwkJICAzID0gL2Rldi9udWxsCQlOdWxsIGRldmljZQorCQkgIDQgPSAvZGV2L3BvcnQJCUkvTyBwb3J0IGFjY2VzcworCQkgIDUgPSAvZGV2L3plcm8JCU51bGwgYnl0ZSBzb3VyY2UKKwkJICA2ID0gL2Rldi9jb3JlCQlPQlNPTEVURSAtIHJlcGxhY2VkIGJ5IC9wcm9jL2tjb3JlCisJCSAgNyA9IC9kZXYvZnVsbAkJUmV0dXJucyBFTk9TUEMgb24gd3JpdGUKKwkJICA4ID0gL2Rldi9yYW5kb20JTm9uZGV0ZXJtaW5pc3RpYyByYW5kb20gbnVtYmVyIGdlbi4KKwkJICA5ID0gL2Rldi91cmFuZG9tCUZhc3RlciwgbGVzcyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW4uCisJCSAxMCA9IC9kZXYvYWlvCQlBc3luY3Jvbm91cyBJL08gbm90aWZpY2F0aW9uIGludGVyZmFjZQorCQkgMTEgPSAvZGV2L2ttc2cJCVdyaXRlcyB0byB0aGlzIGNvbWUgb3V0IGFzIHByaW50aydzCisgIDEgYmxvY2sJUkFNIGRpc2sKKwkJICAwID0gL2Rldi9yYW0wCQlGaXJzdCBSQU0gZGlzaworCQkgIDEgPSAvZGV2L3JhbTEJCVNlY29uZCBSQU0gZGlzaworCQkgICAgLi4uCisJCTI1MCA9IC9kZXYvaW5pdHJkCUluaXRpYWwgUkFNIGRpc2sgezIuNn0KKworCQlPbGRlciBrZXJuZWxzIGhhZCAvZGV2L3JhbWRpc2sgKDEsIDEpIGhlcmUuCisJCS9kZXYvaW5pdHJkIHJlZmVycyB0byBhIFJBTSBkaXNrIHdoaWNoIHdhcyBwcmVsb2FkZWQKKwkJYnkgdGhlIGJvb3QgbG9hZGVyOyBuZXdlciBrZXJuZWxzIHVzZSAvZGV2L3JhbTAgZm9yCisJCXRoZSBpbml0cmQuCisKKyAgMiBjaGFyCVBzZXVkby1UVFkgbWFzdGVycworCQkgIDAgPSAvZGV2L3B0eXAwCUZpcnN0IFBUWSBtYXN0ZXIKKwkJICAxID0gL2Rldi9wdHlwMQlTZWNvbmQgUFRZIG1hc3RlcgorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvcHR5ZWYJMjU2dGggUFRZIG1hc3RlcgorCisJCVBzZXVkby10dHkncyBhcmUgbmFtZWQgYXMgZm9sbG93czoKKwkJKiBNYXN0ZXJzIGFyZSAicHR5Iiwgc2xhdmVzIGFyZSAidHR5IjsKKwkJKiB0aGUgZm91cnRoIGxldHRlciBpcyBvbmUgb2YgcHFyc3R1dnd4eXphYmNkZSBpbmRpY2F0aW5nCisJCSAgdGhlIDFzdCB0aHJvdWdoIDE2dGggc2VyaWVzIG9mIDE2IHBzZXVkby10dHlzIGVhY2gsIGFuZAorCQkqIHRoZSBmaWZ0aCBsZXR0ZXIgaXMgb25lIG9mIDAxMjM0NTY3ODlhYmNkZWYgaW5kaWNhdGluZworCQkgIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHNlcmllcy4KKworCQlUaGVzZSBhcmUgdGhlIG9sZC1zdHlsZSAoQlNEKSBQVFkgZGV2aWNlczsgVW5peDk4CisJCWRldmljZXMgYXJlIG9uIG1ham9yIDEyOCBhbmQgYWJvdmUgYW5kIHVzZSB0aGUgUFRZCisJCW1hc3RlciBtdWx0aXBsZXggKC9kZXYvcHRteCkgdG8gYWNxdWlyZSBhIFBUWSBvbgorCQlkZW1hbmQuCisgIAorICAyIGJsb2NrCUZsb3BweSBkaXNrcworCQkgIDAgPSAvZGV2L2ZkMAkJQ29udHJvbGxlciAwLCBkcml2ZSAwLCBhdXRvZGV0ZWN0CisJCSAgMSA9IC9kZXYvZmQxCQlDb250cm9sbGVyIDAsIGRyaXZlIDEsIGF1dG9kZXRlY3QKKwkJICAyID0gL2Rldi9mZDIJCUNvbnRyb2xsZXIgMCwgZHJpdmUgMiwgYXV0b2RldGVjdAorCQkgIDMgPSAvZGV2L2ZkMwkJQ29udHJvbGxlciAwLCBkcml2ZSAzLCBhdXRvZGV0ZWN0CisJCTEyOCA9IC9kZXYvZmQ0CQlDb250cm9sbGVyIDEsIGRyaXZlIDAsIGF1dG9kZXRlY3QKKwkJMTI5ID0gL2Rldi9mZDUJCUNvbnRyb2xsZXIgMSwgZHJpdmUgMSwgYXV0b2RldGVjdAorCQkxMzAgPSAvZGV2L2ZkNgkJQ29udHJvbGxlciAxLCBkcml2ZSAyLCBhdXRvZGV0ZWN0CisJCTEzMSA9IC9kZXYvZmQ3CQlDb250cm9sbGVyIDEsIGRyaXZlIDMsIGF1dG9kZXRlY3QKKworCQlUbyBzcGVjaWZ5IGZvcm1hdCwgYWRkIHRvIHRoZSBhdXRvZGV0ZWN0IGRldmljZSBudW1iZXI6CisJCSAgMCA9IC9kZXYvZmQ/CQlBdXRvZGV0ZWN0IGZvcm1hdAorCQkgIDQgPSAvZGV2L2ZkP2QzNjAJNS4yNSIgIDM2MEsgaW4gYSAzNjBLICBkcml2ZSgxKQorCQkgMjAgPSAvZGV2L2ZkP2gzNjAJNS4yNSIgIDM2MEsgaW4gYSAxMjAwSyBkcml2ZSgxKQorCQkgNDggPSAvZGV2L2ZkP2g0MTAJNS4yNSIgIDQxMEsgaW4gYSAxMjAwSyBkcml2ZQorCQkgNjQgPSAvZGV2L2ZkP2g0MjAJNS4yNSIgIDQyMEsgaW4gYSAxMjAwSyBkcml2ZQorCQkgMjQgPSAvZGV2L2ZkP2g3MjAJNS4yNSIgIDcyMEsgaW4gYSAxMjAwSyBkcml2ZQorCQkgODAgPSAvZGV2L2ZkP2g4ODAJNS4yNSIgIDg4MEsgaW4gYSAxMjAwSyBkcml2ZSgxKQorCQkgIDggPSAvZGV2L2ZkP2gxMjAwCTUuMjUiIDEyMDBLIGluIGEgMTIwMEsgZHJpdmUoMSkKKwkJIDQwID0gL2Rldi9mZD9oMTQ0MAk1LjI1IiAxNDQwSyBpbiBhIDEyMDBLIGRyaXZlKDEpCisJCSA1NiA9IC9kZXYvZmQ/aDE0NzYJNS4yNSIgMTQ3NksgaW4gYSAxMjAwSyBkcml2ZQorCQkgNzIgPSAvZGV2L2ZkP2gxNDk0CTUuMjUiIDE0OTRLIGluIGEgMTIwMEsgZHJpdmUKKwkJIDkyID0gL2Rldi9mZD9oMTYwMAk1LjI1IiAxNjAwSyBpbiBhIDEyMDBLIGRyaXZlKDEpCisKKwkJIDEyID0gL2Rldi9mZD91MzYwCTMuNSIgICAzNjBLIERvdWJsZSBEZW5zaXR5KDIpCisJCSAxNiA9IC9kZXYvZmQ/dTcyMAkzLjUiICAgNzIwSyBEb3VibGUgRGVuc2l0eSgxKQorCQkxMjAgPSAvZGV2L2ZkP3U4MDAJMy41IiAgIDgwMEsgRG91YmxlIERlbnNpdHkoMikKKwkJIDUyID0gL2Rldi9mZD91ODIwCTMuNSIgICA4MjBLIERvdWJsZSBEZW5zaXR5CisJCSA2OCA9IC9kZXYvZmQ/dTgzMAkzLjUiICAgODMwSyBEb3VibGUgRGVuc2l0eQorCQkgODQgPSAvZGV2L2ZkP3UxMDQwCTMuNSIgIDEwNDBLIERvdWJsZSBEZW5zaXR5KDEpCisJCSA4OCA9IC9kZXYvZmQ/dTExMjAJMy41IiAgMTEyMEsgRG91YmxlIERlbnNpdHkoMSkKKwkJIDI4ID0gL2Rldi9mZD91MTQ0MAkzLjUiICAxNDQwSyBIaWdoIERlbnNpdHkoMSkKKwkJMTI0ID0gL2Rldi9mZD91MTYwMAkzLjUiICAxNjAwSyBIaWdoIERlbnNpdHkoMSkKKwkJIDQ0ID0gL2Rldi9mZD91MTY4MAkzLjUiICAxNjgwSyBIaWdoIERlbnNpdHkoMykKKwkJIDYwID0gL2Rldi9mZD91MTcyMgkzLjUiICAxNzIySyBIaWdoIERlbnNpdHkKKwkJIDc2ID0gL2Rldi9mZD91MTc0MwkzLjUiICAxNzQzSyBIaWdoIERlbnNpdHkKKwkJIDk2ID0gL2Rldi9mZD91MTc2MAkzLjUiICAxNzYwSyBIaWdoIERlbnNpdHkKKwkJMTE2ID0gL2Rldi9mZD91MTg0MAkzLjUiICAxODQwSyBIaWdoIERlbnNpdHkoMykKKwkJMTAwID0gL2Rldi9mZD91MTkyMAkzLjUiICAxOTIwSyBIaWdoIERlbnNpdHkoMSkKKwkJIDMyID0gL2Rldi9mZD91Mjg4MAkzLjUiICAyODgwSyBFeHRyYSBEZW5zaXR5KDEpCisJCTEwNCA9IC9kZXYvZmQ/dTMyMDAJMy41IiAgMzIwMEsgRXh0cmEgRGVuc2l0eQorCQkxMDggPSAvZGV2L2ZkP3UzNTIwCTMuNSIgIDM1MjBLIEV4dHJhIERlbnNpdHkKKwkJMTEyID0gL2Rldi9mZD91Mzg0MAkzLjUiICAzODQwSyBFeHRyYSBEZW5zaXR5KDEpCisKKwkJIDM2ID0gL2Rldi9mZD9Db21wYVEJQ29tcGFxIDI4ODBLIGRyaXZlOyBvYnNvbGV0ZT8KKworCQkoMSkgQXV0b2RldGVjdGFibGUgZm9ybWF0CisJCSgyKSBBdXRvZGV0ZWN0YWJsZSBmb3JtYXQgaW4gYSBEb3VibGUgRGVuc2l0eSAoNzIwSykgZHJpdmUgb25seQorCQkoMykgQXV0b2RldGVjdGFibGUgZm9ybWF0IGluIGEgSGlnaCBEZW5zaXR5ICgxNDQwSykgZHJpdmUgb25seQorCisJCU5PVEU6IFRoZSBsZXR0ZXIgaW4gdGhlIGRldmljZSBuYW1lIChkLCBxLCBoIG9yIHUpCisJCXNpZ25pZmllcyB0aGUgdHlwZSBvZiBkcml2ZTogNS4yNSIgRG91YmxlIERlbnNpdHkgKGQpLAorCQk1LjI1IiBRdWFkIERlbnNpdHkgKHEpLCA1LjI1IiBIaWdoIERlbnNpdHkgKGgpIG9yIDMuNSIKKwkJKGFueSBtb2RlbCwgdSkuCSBUaGUgdXNlIG9mIHRoZSBjYXBpdGFsIGxldHRlcnMgRCwgSAorCQlhbmQgRSBmb3IgdGhlIDMuNSIgbW9kZWxzIGhhdmUgYmVlbiBkZXByZWNhdGVkLCBzaW5jZQorCQl0aGUgZHJpdmUgdHlwZSBpcyBpbnNpZ25pZmljYW50IGZvciB0aGVzZSBkZXZpY2VzLgorCisgIDMgY2hhcglQc2V1ZG8tVFRZIHNsYXZlcworCQkgIDAgPSAvZGV2L3R0eXAwCUZpcnN0IFBUWSBzbGF2ZQorCQkgIDEgPSAvZGV2L3R0eXAxCVNlY29uZCBQVFkgc2xhdmUKKwkJICAgIC4uLgorCQkyNTUgPSAvZGV2L3R0eWVmCTI1NnRoIFBUWSBzbGF2ZQorCisJCVRoZXNlIGFyZSB0aGUgb2xkLXN0eWxlIChCU0QpIFBUWSBkZXZpY2VzOyBVbml4OTgKKwkJZGV2aWNlcyBhcmUgb24gbWFqb3IgMTM2IGFuZCBhYm92ZS4KKworICAzIGJsb2NrCUZpcnN0IE1GTSwgUkxMIGFuZCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZGEJCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkYgkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlGb3IgcGFydGl0aW9ucywgYWRkIHRvIHRoZSB3aG9sZSBkaXNrIGRldmljZSBudW1iZXI6CisJCSAgMCA9IC9kZXYvaGQ/CQlXaG9sZSBkaXNrCisJCSAgMSA9IC9kZXYvaGQ/MQkJRmlyc3QgcGFydGl0aW9uCisJCSAgMiA9IC9kZXYvaGQ/MgkJU2Vjb25kIHBhcnRpdGlvbgorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvaGQ/NjMJNjNyZCBwYXJ0aXRpb24KKworCQlGb3IgTGludXgvaTM4NiwgcGFydGl0aW9ucyAxLTQgYXJlIHRoZSBwcmltYXJ5CisJCXBhcnRpdGlvbnMsIGFuZCA1IGFuZCBhYm92ZSBhcmUgbG9naWNhbCBwYXJ0aXRpb25zLgorCQlPdGhlciB2ZXJzaW9ucyBvZiBMaW51eCB1c2UgcGFydGl0aW9uaW5nIHNjaGVtZXMKKwkJYXBwcm9wcmlhdGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBhcmNoaXRlY3R1cmVzLgorCisgIDQgY2hhcglUVFkgZGV2aWNlcworCQkgIDAgPSAvZGV2L3R0eTAJCUN1cnJlbnQgdmlydHVhbCBjb25zb2xlCisKKwkJICAxID0gL2Rldi90dHkxCQlGaXJzdCB2aXJ0dWFsIGNvbnNvbGUKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L3R0eTYzCTYzcmQgdmlydHVhbCBjb25zb2xlCisJCSA2NCA9IC9kZXYvdHR5UzAJRmlyc3QgVUFSVCBzZXJpYWwgcG9ydAorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvdHR5UzE5MQkxOTJuZCBVQVJUIHNlcmlhbCBwb3J0CisKKwkJVUFSVCBzZXJpYWwgcG9ydHMgcmVmZXIgdG8gODI1MC8xNjQ1MC8xNjU1MCBzZXJpZXMgZGV2aWNlcy4KKworCQlPbGRlciB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsIHVzZWQgdGhpcyBtYWpvcgorCQludW1iZXIgZm9yIEJTRCBQVFkgZGV2aWNlcy4gIEFzIG9mIExpbnV4IDIuMS4xMTUsIHRoaXMKKwkJaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4JIFVzZSBtYWpvciBudW1iZXJzIDIgYW5kIDMuCisKKyAgNCBibG9jawlBbGlhc2VzIGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWFqb3IgZGV2aWNlcyB0byBiZSB1c2VkCisJCXdoZW4gaXRzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgdGhlIHJlYWwgZGV2aWNlIG5vZGVzCisJCWJlY2F1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHJlYWQtb25seS4KKworICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvcm9vdAorCisgIDUgY2hhcglBbHRlcm5hdGUgVFRZIGRldmljZXMKKwkJICAwID0gL2Rldi90dHkJCUN1cnJlbnQgVFRZIGRldmljZQorCQkgIDEgPSAvZGV2L2NvbnNvbGUJU3lzdGVtIGNvbnNvbGUKKwkJICAyID0gL2Rldi9wdG14CQlQVFkgbWFzdGVyIG11bHRpcGxleAorCQkgNjQgPSAvZGV2L2N1YTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTMAorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvY3VhMTkxCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTMTkxCisKKwkJKDUsMSkgaXMgL2Rldi9jb25zb2xlIHN0YXJ0aW5nIHdpdGggTGludXggMi4xLjcxLiAgU2VlCisJCXRoZSBzZWN0aW9uIG9uIHRlcm1pbmFsIGRldmljZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24KKwkJb24gL2Rldi9jb25zb2xlLgorCisgIDYgY2hhcglQYXJhbGxlbCBwcmludGVyIGRldmljZXMKKwkJICAwID0gL2Rldi9scDAJCVBhcmFsbGVsIHByaW50ZXIgb24gcGFycG9ydDAKKwkJICAxID0gL2Rldi9scDEJCVBhcmFsbGVsIHByaW50ZXIgb24gcGFycG9ydDEKKwkJICAgIC4uLgorCisJCUN1cnJlbnQgTGludXgga2VybmVscyBubyBsb25nZXIgaGF2ZSBhIGZpeGVkIG1hcHBpbmcKKwkJYmV0d2VlbiBwYXJhbGxlbCBwb3J0cyBhbmQgSS9PIGFkZHJlc3Nlcy4gIEluc3RlYWQsCisJCXRoZXkgYXJlIHJlZGlyZWN0ZWQgdGhyb3VnaCB0aGUgcGFycG9ydCBtdWx0aXBsZXggbGF5ZXIuCisKKyAgNyBjaGFyCVZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGRldmljZXMKKwkJICAwID0gL2Rldi92Y3MJCUN1cnJlbnQgdmMgdGV4dCBjb250ZW50cworCQkgIDEgPSAvZGV2L3ZjczEJCXR0eTEgdGV4dCBjb250ZW50cworCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvdmNzNjMJdHR5NjMgdGV4dCBjb250ZW50cworCQkxMjggPSAvZGV2L3Zjc2EJCUN1cnJlbnQgdmMgdGV4dC9hdHRyaWJ1dGUgY29udGVudHMKKwkJMTI5ID0gL2Rldi92Y3NhMQl0dHkxIHRleHQvYXR0cmlidXRlIGNvbnRlbnRzCisJCSAgICAuLi4KKwkJMTkxID0gL2Rldi92Y3NhNjMJdHR5NjMgdGV4dC9hdHRyaWJ1dGUgY29udGVudHMKKwkKKwkJTk9URTogVGhlc2UgZGV2aWNlcyBwZXJtaXQgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuCisKKyAgNyBibG9jawlMb29wYmFjayBkZXZpY2VzCisJCSAgMCA9IC9kZXYvbG9vcDAJRmlyc3QgbG9vcGJhY2sgZGV2aWNlCisJCSAgMSA9IC9kZXYvbG9vcDEJU2Vjb25kIGxvb3BiYWNrIGRldmljZQorCQkgICAgLi4uCisKKwkJVGhlIGxvb3BiYWNrIGRldmljZXMgYXJlIHVzZWQgdG8gbW91bnQgZmlsZXN5c3RlbXMgbm90CisJCWFzc29jaWF0ZWQgd2l0aCBibG9jayBkZXZpY2VzLglUaGUgYmluZGluZyB0byB0aGUKKwkJbG9vcGJhY2sgZGV2aWNlcyBpcyBoYW5kbGVkIGJ5IG1vdW50KDgpIG9yIGxvc2V0dXAoOCkuCisKKyAgOCBibG9jawlTQ1NJIGRpc2sgZGV2aWNlcyAoMC0xNSkKKwkJICAwID0gL2Rldi9zZGEJCUZpcnN0IFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvc2RiCQlTZWNvbmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9zZGMJCVRoaXJkIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9zZHAJCVNpeHRlZW50aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyAgOSBjaGFyCVNDU0kgdGFwZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvc3QwCQlGaXJzdCBTQ1NJIHRhcGUsIG1vZGUgMAorCQkgIDEgPSAvZGV2L3N0MQkJU2Vjb25kIFNDU0kgdGFwZSwgbW9kZSAwCisJCSAgICAuLi4KKwkJIDMyID0gL2Rldi9zdDBsCQlGaXJzdCBTQ1NJIHRhcGUsIG1vZGUgMQorCQkgMzMgPSAvZGV2L3N0MWwJCVNlY29uZCBTQ1NJIHRhcGUsIG1vZGUgMQorCQkgICAgLi4uCisJCSA2NCA9IC9kZXYvc3QwbQkJRmlyc3QgU0NTSSB0YXBlLCBtb2RlIDIKKwkJIDY1ID0gL2Rldi9zdDFtCQlTZWNvbmQgU0NTSSB0YXBlLCBtb2RlIDIKKwkJICAgIC4uLgorCQkgOTYgPSAvZGV2L3N0MGEJCUZpcnN0IFNDU0kgdGFwZSwgbW9kZSAzCisJCSA5NyA9IC9kZXYvc3QxYQkJU2Vjb25kIFNDU0kgdGFwZSwgbW9kZSAzCisJCSAgICAgIC4uLgorCQkxMjggPSAvZGV2L25zdDAJCUZpcnN0IFNDU0kgdGFwZSwgbW9kZSAwLCBubyByZXdpbmQKKwkJMTI5ID0gL2Rldi9uc3QxCQlTZWNvbmQgU0NTSSB0YXBlLCBtb2RlIDAsIG5vIHJld2luZAorCQkgICAgLi4uCisJCTE2MCA9IC9kZXYvbnN0MGwJRmlyc3QgU0NTSSB0YXBlLCBtb2RlIDEsIG5vIHJld2luZAorCQkxNjEgPSAvZGV2L25zdDFsCVNlY29uZCBTQ1NJIHRhcGUsIG1vZGUgMSwgbm8gcmV3aW5kCisJCSAgICAuLi4KKwkJMTkyID0gL2Rldi9uc3QwbQlGaXJzdCBTQ1NJIHRhcGUsIG1vZGUgMiwgbm8gcmV3aW5kCisJCTE5MyA9IC9kZXYvbnN0MW0JU2Vjb25kIFNDU0kgdGFwZSwgbW9kZSAyLCBubyByZXdpbmQKKwkJICAgIC4uLgorCQkyMjQgPSAvZGV2L25zdDBhCUZpcnN0IFNDU0kgdGFwZSwgbW9kZSAzLCBubyByZXdpbmQKKwkJMjI1ID0gL2Rldi9uc3QxYQlTZWNvbmQgU0NTSSB0YXBlLCBtb2RlIDMsIG5vIHJld2luZAorCQkgICAgLi4uCisKKwkJIk5vIHJld2luZCIgcmVmZXJzIHRvIHRoZSBvbWlzc2lvbiBvZiB0aGUgZGVmYXVsdAorCQlhdXRvbWF0aWMgcmV3aW5kIG9uIGRldmljZSBjbG9zZS4gIFRoZSBNVFJFVyBvciBNVE9GRkwKKwkJaW9jdGwoKSdzIGNhbiBiZSB1c2VkIHRvIHJld2luZCB0aGUgdGFwZSByZWdhcmRsZXNzIG9mCisJCXRoZSBkZXZpY2UgdXNlZCB0byBhY2Nlc3MgaXQuCisKKyAgOSBibG9jawlNZXRhZGlzayAoUkFJRCkgZGV2aWNlcworCQkgIDAgPSAvZGV2L21kMAkJRmlyc3QgbWV0YWRpc2sgZ3JvdXAKKwkJICAxID0gL2Rldi9tZDEJCVNlY29uZCBtZXRhZGlzayBncm91cAorCQkgICAgLi4uCisKKwkJVGhlIG1ldGFkaXNrIGRyaXZlciBpcyB1c2VkIHRvIHNwYW4gYQorCQlmaWxlc3lzdGVtIGFjcm9zcyBtdWx0aXBsZSBwaHlzaWNhbCBkaXNrcy4KKworIDEwIGNoYXIJTm9uLXNlcmlhbCBtaWNlLCBtaXNjIGZlYXR1cmVzCisJCSAgMCA9IC9kZXYvbG9naWJtCUxvZ2l0ZWNoIGJ1cyBtb3VzZQorCQkgIDEgPSAvZGV2L3BzYXV4CVBTLzItc3R5bGUgbW91c2UgcG9ydAorCQkgIDIgPSAvZGV2L2lucG9ydGJtCU1pY3Jvc29mdCBJbnBvcnQgYnVzIG1vdXNlCisJCSAgMyA9IC9kZXYvYXRpYm0JQVRJIFhMIGJ1cyBtb3VzZQorCQkgIDQgPSAvZGV2L2pibQkJSi1tb3VzZQorCQkgIDQgPSAvZGV2L2FtaWdhbW91c2UJQW1pZ2EgbW91c2UgKDY4ay9BbWlnYSkKKwkJICA1ID0gL2Rldi9hdGFyaW1vdXNlCUF0YXJpIG1vdXNlCisJCSAgNiA9IC9kZXYvc3VubW91c2UJU3VuIG1vdXNlCisJCSAgNyA9IC9kZXYvYW1pZ2Ftb3VzZTEJU2Vjb25kIEFtaWdhIG1vdXNlCisJCSAgOCA9IC9kZXYvc21vdXNlCVNpbXBsZSBzZXJpYWwgbW91c2UgZHJpdmVyCisJCSAgOSA9IC9kZXYvcGMxMTBwYWQJSUJNIFBDLTExMCBkaWdpdGl6ZXIgcGFkCisJCSAxMCA9IC9kZXYvYWRibW91c2UJQXBwbGUgRGVza3RvcCBCdXMgbW91c2UKKwkJIDExID0gL2Rldi92cnRwYW5lbAlWcjQxeHggZW1iZWRkZWQgdG91Y2ggcGFuZWwKKwkJIDEzID0gL2Rldi92cGNtb3VzZQlDb25uZWN0aXggVmlydHVhbCBQQyBNb3VzZQorCQkgMTQgPSAvZGV2L3RvdWNoc2NyZWVuL3VjYjF4MDAgIFVDQiAxeDAwIHRvdWNoc2NyZWVuCisJCSAxNSA9IC9kZXYvdG91Y2hzY3JlZW4vbWs3MTIJTUs3MTIgdG91Y2hzY3JlZW4KKwkJMTI4ID0gL2Rldi9iZWVwCQlGYW5jeSBiZWVwIGRldmljZQorCQkxMjkgPSAvZGV2L21vZHJlcQlLZXJuZWwgbW9kdWxlIGxvYWQgcmVxdWVzdCB7Mi42fQorCQkxMzAgPSAvZGV2L3dhdGNoZG9nCVdhdGNoZG9nIHRpbWVyIHBvcnQKKwkJMTMxID0gL2Rldi90ZW1wZXJhdHVyZQlNYWNoaW5lIGludGVybmFsIHRlbXBlcmF0dXJlCisJCTEzMiA9IC9kZXYvaHd0cmFwCUhhcmR3YXJlIGZhdWx0IHRyYXAKKwkJMTMzID0gL2Rldi9leHR0cnAJRXh0ZXJuYWwgZGV2aWNlIHRyYXAKKwkJMTM0ID0gL2Rldi9hcG1fYmlvcwlBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEJJT1MKKwkJMTM1ID0gL2Rldi9ydGMJCVJlYWwgVGltZSBDbG9jaworCQkxMzkgPSAvZGV2L29wZW5wcm9tCVNQQVJDIE9wZW5Cb290IFBST00KKwkJMTQwID0gL2Rldi9yZWxheTgJQmVya3NoaXJlIFByb2R1Y3RzIE9jdGFsIHJlbGF5IGNhcmQKKwkJMTQxID0gL2Rldi9yZWxheTE2CUJlcmtzaGlyZSBQcm9kdWN0cyBJU08tMTYgcmVsYXkgY2FyZAorCQkxNDIgPSAvZGV2L21zcgkJeDg2IG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVycyB7Mi42fQorCQkxNDMgPSAvZGV2L3BjaWNvbmYJUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UKKwkJMTQ0ID0gL2Rldi9udnJhbQlOb24tdm9sYXRpbGUgY29uZmlndXJhdGlvbiBSQU0KKwkJMTQ1ID0gL2Rldi9oZm1vZGVtCVNvdW5kY2FyZCBzaG9ydHdhdmUgbW9kZW0gY29udHJvbCB7Mi42fQorCQkxNDYgPSAvZGV2L2dyYXBoaWNzCUxpbnV4L1NHSSBncmFwaGljcyBkZXZpY2UKKwkJMTQ3ID0gL2Rldi9vcGVuZ2wJTGludXgvU0dJIE9wZW5HTCBwaXBlCisJCTE0OCA9IC9kZXYvZ2Z4CQlMaW51eC9TR0kgZ3JhcGhpY3MgZWZmZWN0cyBkZXZpY2UKKwkJMTQ5ID0gL2Rldi9pbnB1dC9tb3VzZQlMaW51eC9TR0kgSXJpeCBlbXVsYXRpb24gbW91c2UKKwkJMTUwID0gL2Rldi9pbnB1dC9rZXlib2FyZCBMaW51eC9TR0kgSXJpeCBlbXVsYXRpb24ga2V5Ym9hcmQKKwkJMTUxID0gL2Rldi9sZWQJCUZyb250IHBhbmVsIExFRHMKKwkJMTUyID0gL2Rldi9rcG9sbAlLZXJuZWwgUG9sbCBEcml2ZXIKKwkJMTUzID0gL2Rldi9tZXJnZW1lbQlNZW1vcnkgbWVyZ2UgZGV2aWNlCisJCTE1NCA9IC9kZXYvcG11CQlNYWNpbnRvc2ggUG93ZXJCb29rIHBvd2VyIG1hbmFnZXIKKwkJMTU1ID0gL2Rldi9pc2ljdGwJTXVsdGlUZWNoIElTSUNvbSBzZXJpYWwgY29udHJvbAorCQkxNTYgPSAvZGV2L2xjZAkJRnJvbnQgcGFuZWwgTENEIGRpc3BsYXkKKwkJMTU3ID0gL2Rldi9hYwkJQXBwbGljb20gSW50bCBQcm9maWJ1cyBjYXJkCisJCTE1OCA9IC9kZXYvbndidXR0b24JTmV0d2luZGVyIGV4dGVybmFsIGJ1dHRvbgorCQkxNTkgPSAvZGV2L253ZGVidWcJTmV0d2luZGVyIGRlYnVnIGludGVyZmFjZQorCQkxNjAgPSAvZGV2L253Zmxhc2gJTmV0d2luZGVyIGZsYXNoIG1lbW9yeQorCQkxNjEgPSAvZGV2L3VzZXJkbWEJVXNlci1zcGFjZSBETUEgYWNjZXNzCisJCTE2MiA9IC9kZXYvc21idXMJU3lzdGVtIE1hbmFnZW1lbnQgQnVzCisJCTE2MyA9IC9kZXYvbGlrCQlMb2dpdGVjaCBJbnRlcm5ldCBLZXlib2FyZAorCQkxNjQgPSAvZGV2L2lwbW8JCUludGVsIEludGVsbGlnZW50IFBsYXRmb3JtIE1hbmFnZW1lbnQKKwkJMTY1ID0gL2Rldi92bW1vbglWTVdhcmUgdmlydHVhbCBtYWNoaW5lIG1vbml0b3IKKwkJMTY2ID0gL2Rldi9pMm8vY3RsCUkyTyBjb25maWd1cmF0aW9uIG1hbmFnZXIKKwkJMTY3ID0gL2Rldi9zcGVjaWFsaXhfc3hjdGwgU3BlY2lhbGl4IHNlcmlhbCBjb250cm9sCisJCTE2OCA9IC9kZXYvdGNsZHJ2CVRlY2hub2xvZ3kgQ29uY2VwdHMgc2VyaWFsIGNvbnRyb2wKKwkJMTY5ID0gL2Rldi9zcGVjaWFsaXhfcmlvY3RsIFNwZWNpYWxpeCBSSU8gc2VyaWFsIGNvbnRyb2wKKwkJMTcwID0gL2Rldi90aGlua3BhZC90aGlua3BhZAlJQk0gVGhpbmtwYWQgZGV2aWNlcworCQkxNzEgPSAvZGV2L3NycmlwYwlRTlg0IEFQSSBJUEMgbWFuYWdlcgorCQkxNzIgPSAvZGV2L3VzZW1hY2xvbmUJU2VtYXBob3JlIGNsb25lIGRldmljZQorCQkxNzMgPSAvZGV2L2lwbWlrY3MJSW50ZWxsaWdlbnQgUGxhdGZvcm0gTWFuYWdlbWVudAorCQkxNzQgPSAvZGV2L3VjdHJsCVNQQVJDYm9vayAzIG1pY3JvY29udHJvbGxlcgorCQkxNzUgPSAvZGV2L2FncGdhcnQJQUdQIEdyYXBoaWNzIEFkZHJlc3MgUmVtYXBwaW5nIFRhYmxlCisJCTE3NiA9IC9kZXYvZ3Ryc2MJR29yZ3kgVGltaW5nIHJhZGlvIGNsb2NrCisJCTE3NyA9IC9kZXYvY2JtCQlTZXJpYWwgQ0JNIGJ1cworCQkxNzggPSAvZGV2L2pzZmxhc2gJSmF2YVN0YXRpb24gT1MgZmxhc2ggU0lNTQorCQkxNzkgPSAvZGV2L3hzdmMJCUhpZ2gtc3BlZWQgc2hhcmVkLW1lbS9zZW1hcGhvcmUgc2VydmljZQorCQkxODAgPSAvZGV2L3ZyYnV0dG9ucwlWcjQxeHggYnV0dG9uIGlucHV0IGRldmljZQorCQkxODEgPSAvZGV2L3Rvc2hpYmEJVG9zaGliYSBsYXB0b3AgU01NIHN1cHBvcnQKKwkJMTgyID0gL2Rldi9wZXJmY3RyCVBlcmZvcm1hbmNlLW1vbml0b3JpbmcgY291bnRlcnMKKwkJMTgzID0gL2Rldi9od3JuZwlHZW5lcmljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisJCTE4NCA9IC9kZXYvY3B1L21pY3JvY29kZSBDUFUgbWljcm9jb2RlIHVwZGF0ZSBpbnRlcmZhY2UKKwkJMTg2ID0gL2Rldi9hdG9taWNwcwlBdG9taWMgc2hhcHNob3Qgb2YgcHJvY2VzcyBzdGF0ZSBkYXRhCisJCTE4NyA9IC9kZXYvaXJuZXQJSXJORVQgZGV2aWNlCisJCTE4OCA9IC9kZXYvc21idXNiaW9zCVNNQnVzIEJJT1MKKwkJMTg5ID0gL2Rldi91c3NwX2N0bAlVc2VyIHNwYWNlIHNlcmlhbCBwb3J0IGNvbnRyb2wKKwkJMTkwID0gL2Rldi9jcmFzaAlNaXNzaW9uIENyaXRpY2FsIExpbnV4IGNyYXNoIGR1bXAgZmFjaWxpdHkKKwkJMTkxID0gL2Rldi9wY2wxODEJPGluZm9ybWF0aW9uIG1pc3Npbmc+CisJCTE5MiA9IC9kZXYvbmFzX3hidXMJTkFTIHhidXMgTENEL2J1dHRvbnMgYWNjZXNzCisJCTE5MyA9IC9kZXYvZDdzCQlTUEFSQyA3LXNlZ21lbnQgZGlzcGxheQorCQkxOTQgPSAvZGV2L3prc2hpbQlaZXJvLUtub3dsZWRnZSBuZXR3b3JrIHNoaW0gY29udHJvbAorCQkxOTUgPSAvZGV2L2Vsb2dyYXBoaWNzL2UyMjAxCUVsb2dyYXBoaWNzIHRvdWNoc2NyZWVuIEUyNzEtMjIwMQorCQkxOTggPSAvZGV2L3NleGVjCVNpZ25lZCBleGVjdXRhYmxlIGludGVyZmFjZQorCQkxOTkgPSAvZGV2L3NjYW5uZXJzL2N1ZWNhdCA6Q3VlQ2F0IGJhcmNvZGUgc2Nhbm5lcgorCQkyMDAgPSAvZGV2L25ldC90dW4JVEFQL1RVTiBuZXR3b3JrIGRldmljZQorCQkyMDEgPSAvZGV2L2J1dHRvbi9ndWxwYglUcmFuc21ldGEgR1VMUC1CIGJ1dHRvbnMKKwkJMjAyID0gL2Rldi9lbWQvY3RsCUVuaGFuY2VkIE1ldGFkaXNrIFJBSUQgKEVNRCkgY29udHJvbAorCQkyMDQgPSAvZGV2L3ZpZGVvL2VtODMwMAkJRU04MzAwIERWRCBkZWNvZGVyIGNvbnRyb2wKKwkJMjA1ID0gL2Rldi92aWRlby9lbTgzMDBfbXYJRU04MzAwIERWRCBkZWNvZGVyIHZpZGVvCisJCTIwNiA9IC9kZXYvdmlkZW8vZW04MzAwX21hCUVNODMwMCBEVkQgZGVjb2RlciBhdWRpbworCQkyMDcgPSAvZGV2L3ZpZGVvL2VtODMwMF9zcAlFTTgzMDAgRFZEIGRlY29kZXIgc3VicGljdHVyZQorCQkyMDggPSAvZGV2L2NvbXBhcS9jcHFwaHBjCUNvbXBhcSBQQ0kgSG90IFBsdWcgQ29udHJvbGxlcgorCQkyMDkgPSAvZGV2L2NvbXBhcS9jcHFyaWQJQ29tcGFxIFJlbW90ZSBJbnNpZ2h0IERyaXZlcgorCQkyMTAgPSAvZGV2L2ltcGkvYnQJSU1QSSBjb3Byb2Nlc3NvciBibG9jayB0cmFuc2ZlcgkKKwkJMjExID0gL2Rldi9pbXBpL3NtaWMJSU1QSSBjb3Byb2Nlc3NvciBzdHJlYW0gaW50ZXJmYWNlCisJCTIxMiA9IC9kZXYvd2F0Y2hkb2dzLzAJRmlyc3Qgd2F0Y2hkb2cgZGV2aWNlCisJCTIxMyA9IC9kZXYvd2F0Y2hkb2dzLzEJU2Vjb25kIHdhdGNoZG9nIGRldmljZQorCQkyMTQgPSAvZGV2L3dhdGNoZG9ncy8yCVRoaXJkIHdhdGNoZG9nIGRldmljZQorCQkyMTUgPSAvZGV2L3dhdGNoZG9ncy8zCUZvdXJ0aCB3YXRjaGRvZyBkZXZpY2UKKwkJMjE2ID0gL2Rldi9mdWppdHN1L2FwYW5lbAlGdWppdHN1L1NpZW1lbnMgYXBwbGljYXRpb24gcGFuZWwKKwkJMjE3ID0gL2Rldi9uaS9uYXRtb3RuCQlOYXRpb25hbCBJbnN0cnVtZW50cyBNb3Rpb24KKwkJMjE4ID0gL2Rldi9rY2h1aWQJSW50ZXItcHJvY2VzcyBjaHVpZCBjb250cm9sCisJCTIxOSA9IC9kZXYvbW9kZW1zL213YXZlCU1XYXZlIG1vZGVtIGZpcm13YXJlIHVwbG9hZAorCQkyMjAgPSAvZGV2L21wdGN0bAlNZXNzYWdlIHBhc3NpbmcgdGVjaG5vbG9neSAoTVBUKSBjb250cm9sCisJCTIyMSA9IC9kZXYvbXZpc3RhL2hzc2RzaQlNb250YXZpc3RhIFBJQ01HIGhvdCBzd2FwIHN5c3RlbSBkcml2ZXIKKwkJMjIyID0gL2Rldi9tdmlzdGEvaGFzaQkJTW9udGF2aXN0YSBQSUNNRyBoaWdoIGF2YWlsYWJpbGl0eQorCQkyMjMgPSAvZGV2L2lucHV0L3VpbnB1dAkJVXNlciBsZXZlbCBkcml2ZXIgc3VwcG9ydCBmb3IgaW5wdXQKKwkJMjI0ID0gL2Rldi90cG0JCVRDUEEgVFBNIGRyaXZlcgorCQkyMjUgPSAvZGV2L3BwcwkJUHVsc2UgUGVyIFNlY29uZCBkcml2ZXIKKwkJMjI2ID0gL2Rldi9zeXN0cmFjZQlTeXN0cmFjZSBkZXZpY2UKKwkJMjI3ID0gL2Rldi9tY2Vsb2cJWDg2XzY0IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIGRyaXZlcgorCQkyMjggPSAvZGV2L2hwZXQJCUhQRVQgZHJpdmVyCisJCTIyOSA9IC9kZXYvZnVzZQkJRnVzZSAodmlydHVhbCBmaWxlc3lzdGVtIGluIHVzZXItc3BhY2UpCisJCTIzMCA9IC9kZXYvbWlkaXNoYXJlCU1pZGlTaGFyZSBkcml2ZXIKKwkJMjQwLTI1NAkJCVJlc2VydmVkIGZvciBsb2NhbCB1c2UKKwkJMjU1CQkJUmVzZXJ2ZWQgZm9yIE1JU0NfRFlOQU1JQ19NSU5PUgorCisgMTEgY2hhcglSYXcga2V5Ym9hcmQgZGV2aWNlCShMaW51eC9TUEFSQyBvbmx5KQorCQkgIDAgPSAvZGV2L2tiZAkJUmF3IGtleWJvYXJkIGRldmljZQorCisgMTEgY2hhcglTZXJpYWwgTXV4IGRldmljZQkoTGludXgvUEEtUklTQyBvbmx5KQorCQkgIDAgPSAvZGV2L3R0eUIwCUZpcnN0IG11eCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5QjEJU2Vjb25kIG11eCBwb3J0CisJCSAgICAuLi4KKworIDExIGJsb2NrCVNDU0kgQ0QtUk9NIGRldmljZXMKKwkJICAwID0gL2Rldi9zY2QwCQlGaXJzdCBTQ1NJIENELVJPTQorCQkgIDEgPSAvZGV2L3NjZDEJCVNlY29uZCBTQ1NJIENELVJPTQorCQkgICAgLi4uCisKKwkJVGhlIHByZWZpeCAvZGV2L3NyIChpbnN0ZWFkIG9mIC9kZXYvc2NkKSBoYXMgYmVlbiBkZXByZWNhdGVkLgorCisgMTIgY2hhcglRSUMtMDIgdGFwZQorCQkgIDIgPSAvZGV2L250cHFpYzExCVFJQy0xMSwgbm8gcmV3aW5kLW9uLWNsb3NlCisJCSAgMyA9IC9kZXYvdHBxaWMxMQlRSUMtMTEsIHJld2luZC1vbi1jbG9zZQorCQkgIDQgPSAvZGV2L250cHFpYzI0CVFJQy0yNCwgbm8gcmV3aW5kLW9uLWNsb3NlCisJCSAgNSA9IC9kZXYvdHBxaWMyNAlRSUMtMjQsIHJld2luZC1vbi1jbG9zZQorCQkgIDYgPSAvZGV2L250cHFpYzEyMAlRSUMtMTIwLCBubyByZXdpbmQtb24tY2xvc2UKKwkJICA3ID0gL2Rldi90cHFpYzEyMAlRSUMtMTIwLCByZXdpbmQtb24tY2xvc2UKKwkJICA4ID0gL2Rldi9udHBxaWMxNTAJUUlDLTE1MCwgbm8gcmV3aW5kLW9uLWNsb3NlCisJCSAgOSA9IC9kZXYvdHBxaWMxNTAJUUlDLTE1MCwgcmV3aW5kLW9uLWNsb3NlCisKKwkJVGhlIGRldmljZSBuYW1lcyBzcGVjaWZpZWQgYXJlIHByb3Bvc2VkIC0tIGlmIHRoZXJlCisJCWFyZSAic3RhbmRhcmQiIG5hbWVzIGZvciB0aGVzZSBkZXZpY2VzLCBwbGVhc2UgbGV0IG1lIGtub3cuCisKKyAxMiBibG9jawlNU0NERVggQ0QtUk9NIGNhbGxiYWNrIHN1cHBvcnQgezIuNn0KKwkJICAwID0gL2Rldi9kb3NfY2QwCUZpcnN0IE1TQ0RFWCBDRC1ST00KKwkJICAxID0gL2Rldi9kb3NfY2QxCVNlY29uZCBNU0NERVggQ0QtUk9NCisJCSAgICAuLi4KKworIDEzIGNoYXIJSW5wdXQgY29yZQorCQkgIDAgPSAvZGV2L2lucHV0L2pzMAlGaXJzdCBqb3lzdGljaworCQkgIDEgPSAvZGV2L2lucHV0L2pzMQlTZWNvbmQgam95c3RpY2sKKwkJICAgIC4uLgorCQkgMzIgPSAvZGV2L2lucHV0L21vdXNlMAlGaXJzdCBtb3VzZQorCQkgMzMgPSAvZGV2L2lucHV0L21vdXNlMQlTZWNvbmQgbW91c2UKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L2lucHV0L21pY2UJVW5pZmllZCBtb3VzZQorCQkgNjQgPSAvZGV2L2lucHV0L2V2ZW50MAlGaXJzdCBldmVudCBxdWV1ZQorCQkgNjUgPSAvZGV2L2lucHV0L2V2ZW50MQlTZWNvbmQgZXZlbnQgcXVldWUKKwkJICAgIC4uLgorCisJCUVhY2ggZGV2aWNlIHR5cGUgaGFzIDUgYml0cyAoMzIgbWlub3JzKS4KKworIDEzIGJsb2NrCTgtYml0IE1GTS9STEwvSURFIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi94ZGEJCUZpcnN0IFhUIGRpc2sgd2hvbGUgZGlzaworCQkgNjQgPSAvZGV2L3hkYgkJU2Vjb25kIFhUIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIElERSBkaXNrcworCQkoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDE0IGNoYXIJT3BlbiBTb3VuZCBTeXN0ZW0gKE9TUykKKwkJICAwID0gL2Rldi9taXhlcglNaXhlciBjb250cm9sCisJCSAgMSA9IC9kZXYvc2VxdWVuY2VyCUF1ZGlvIHNlcXVlbmNlcgorCQkgIDIgPSAvZGV2L21pZGkwMAlGaXJzdCBNSURJIHBvcnQKKwkJICAzID0gL2Rldi9kc3AJCURpZ2l0YWwgYXVkaW8KKwkJICA0ID0gL2Rldi9hdWRpbwlTdW4tY29tcGF0aWJsZSBkaWdpdGFsIGF1ZGlvCisJCSAgNiA9IC9kZXYvc25kc3RhdAlTb3VuZCBjYXJkIHN0YXR1cyBpbmZvcm1hdGlvbiB7Mi42fQorCQkgIDcgPSAvZGV2L2F1ZGlvY3RsCVNQQVJDIGF1ZGlvIGNvbnRyb2wgZGV2aWNlCisJCSAgOCA9IC9kZXYvc2VxdWVuY2VyMglTZXF1ZW5jZXIgLS0gYWx0ZXJuYXRlIGRldmljZQorCQkgMTYgPSAvZGV2L21peGVyMQlTZWNvbmQgc291bmRjYXJkIG1peGVyIGNvbnRyb2wKKwkJIDE3ID0gL2Rldi9wYXRtZ3IwCVNlcXVlbmNlciBwYXRjaCBtYW5hZ2VyCisJCSAxOCA9IC9kZXYvbWlkaTAxCVNlY29uZCBNSURJIHBvcnQKKwkJIDE5ID0gL2Rldi9kc3AxCQlTZWNvbmQgc291bmRjYXJkIGRpZ2l0YWwgYXVkaW8KKwkJIDIwID0gL2Rldi9hdWRpbzEJU2Vjb25kIHNvdW5kY2FyZCBTdW4gZGlnaXRhbCBhdWRpbworCQkgMzMgPSAvZGV2L3BhdG1ncjEJU2VxdWVuY2VyIHBhdGNoIG1hbmFnZXIKKwkJIDM0ID0gL2Rldi9taWRpMDIJVGhpcmQgTUlESSBwb3J0CisJCSA1MCA9IC9kZXYvbWlkaTAzCUZvdXJ0aCBNSURJIHBvcnQKKyAxNCBibG9jawlCSU9TIGhhcmRkcml2ZSBjYWxsYmFjayBzdXBwb3J0IHsyLjZ9CisJCSAgMCA9IC9kZXYvZG9zX2hkYQlGaXJzdCBCSU9TIGhhcmRkcml2ZSB3aG9sZSBkaXNrCisJCSA2NCA9IC9kZXYvZG9zX2hkYglTZWNvbmQgQklPUyBoYXJkZHJpdmUgd2hvbGUgZGlzaworCQkxMjggPSAvZGV2L2Rvc19oZGMJVGhpcmQgQklPUyBoYXJkZHJpdmUgd2hvbGUgZGlzaworCQkxOTIgPSAvZGV2L2Rvc19oZGQJRm91cnRoIEJJT1MgaGFyZGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBJREUgZGlza3MKKwkJKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyAxNSBjaGFyCUpveXN0aWNrCisJCSAgMCA9IC9kZXYvanMwCQlGaXJzdCBhbmFsb2cgam95c3RpY2sKKwkJICAxID0gL2Rldi9qczEJCVNlY29uZCBhbmFsb2cgam95c3RpY2sKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L2RqczAJCUZpcnN0IGRpZ2l0YWwgam95c3RpY2sKKwkJMTI5ID0gL2Rldi9kanMxCQlTZWNvbmQgZGlnaXRhbCBqb3lzdGljaworCQkgICAgLi4uCisgMTUgYmxvY2sJU29ueSBDRFUtMzFBL0NEVS0zM0EgQ0QtUk9NCisJCSAgMCA9IC9kZXYvc29ueWNkCVNvbnkgQ0RVLTMxYSBDRC1ST00KKworIDE2IGNoYXIJTm9uLVNDU0kgc2Nhbm5lcnMKKwkJICAwID0gL2Rldi9nczQ1MDAJR2VuaXVzIDQ1MDAgaGFuZGhlbGQgc2Nhbm5lcgorIDE2IGJsb2NrCUdvbGRTdGFyIENELVJPTQorCQkgIDAgPSAvZGV2L2dzY2QJCUdvbGRTdGFyIENELVJPTQorCisgMTcgY2hhcglDaGFzZSBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eUgwCUZpcnN0IENoYXNlIHBvcnQKKwkJICAxID0gL2Rldi90dHlIMQlTZWNvbmQgQ2hhc2UgcG9ydAorCQkgICAgLi4uCisgMTcgYmxvY2sJT3B0aWNzIFN0b3JhZ2UgQ0QtUk9NCisJCSAgMCA9IC9kZXYvb3B0Y2QJT3B0aWNzIFN0b3JhZ2UgQ0QtUk9NCisKKyAxOCBjaGFyCUNoYXNlIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdWgwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5SDAKKwkJICAxID0gL2Rldi9jdWgxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5SDEKKwkJICAgIC4uLgorIDE4IGJsb2NrCVNhbnlvIENELVJPTQorCQkgIDAgPSAvZGV2L3NqY2QJCVNhbnlvIENELVJPTQorCisgMTkgY2hhcglDeWNsYWRlcyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eUMwCUZpcnN0IEN5Y2xhZGVzIHBvcnQKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L3R0eUMzMQkzMm5kIEN5Y2xhZGVzIHBvcnQKKyAxOSBibG9jawkiRG91YmxlIiBjb21wcmVzc2VkIGRpc2sKKwkJICAwID0gL2Rldi9kb3VibGUwCUZpcnN0IGNvbXByZXNzZWQgZGlzaworCQkgICAgLi4uCisJCSAgNyA9IC9kZXYvZG91YmxlNwlFaWdodGggY29tcHJlc3NlZCBkaXNrCisJCTEyOCA9IC9kZXYvY2RvdWJsZTAJTWlycm9yIG9mIGZpcnN0IGNvbXByZXNzZWQgZGlzaworCQkgICAgLi4uCisJCTEzNSA9IC9kZXYvY2RvdWJsZTcJTWlycm9yIG9mIGVpZ2h0aCBjb21wcmVzc2VkIGRpc2sKKworCQlTZWUgdGhlIERvdWJsZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgbWVhbmluZyBvZiB0aGUKKwkJbWlycm9yIGRldmljZXMuCisKKyAyMCBjaGFyCUN5Y2xhZGVzIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdWIwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5QzAKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L2N1YjMxCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlDMzEKKyAyMCBibG9jawlIaXRhY2hpIENELVJPTSAodW5kZXIgZGV2ZWxvcG1lbnQpCisJCSAgMCA9IC9kZXYvaGl0Y2QJSGl0YWNoaSBDRC1ST00KKworIDIxIGNoYXIJR2VuZXJpYyBTQ1NJIGFjY2VzcworCQkgIDAgPSAvZGV2L3NnMAkJRmlyc3QgZ2VuZXJpYyBTQ1NJIGRldmljZQorCQkgIDEgPSAvZGV2L3NnMQkJU2Vjb25kIGdlbmVyaWMgU0NTSSBkZXZpY2UKKwkJICAgIC4uLgorCisJCU1vc3QgZGlzdHJpYnV0aW9ucyBuYW1lIHRoZXNlIC9kZXYvc2dhLCAvZGV2L3NnYi4uLjsKKwkJdGhpcyBzZXRzIGFuIHVubmVjZXNzYXJ5IGxpbWl0IG9mIDI2IFNDU0kgZGV2aWNlcyBpbgorCQl0aGUgc3lzdGVtIGFuZCBpcyBjb3VudGVyIHRvIHN0YW5kYXJkIExpbnV4CisJCWRldmljZS1uYW1pbmcgcHJhY3RpY2UuCisKKyAyMSBibG9jawlBY29ybiBNRk0gaGFyZCBkcml2ZSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9tZm1hCQlGaXJzdCBNRk0gZHJpdmUgd2hvbGUgZGlzaworCQkgNjQgPSAvZGV2L21mbWIJCVNlY29uZCBNRk0gZHJpdmUgd2hvbGUgZGlzaworCisJCVRoaXMgZGV2aWNlIGlzIHVzZWQgb24gdGhlIEFSTS1iYXNlZCBBY29ybiBSaXNjUEMuCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBJREUgZGlza3MKKwkJKHNlZSBtYWpvciBudW1iZXIgMykuIAorCisgMjIgY2hhcglEaWdpYm9hcmQgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlEMAlGaXJzdCBEaWdpYm9hcmQgcG9ydAorCQkgIDEgPSAvZGV2L3R0eUQxCVNlY29uZCBEaWdpYm9hcmQgcG9ydAorCQkgICAgLi4uCisgMjIgYmxvY2sJU2Vjb25kIElERSBoYXJkIGRpc2svQ0QtUk9NIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2hkYwkJTWFzdGVyOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCSA2NCA9IC9kZXYvaGRkCQlTbGF2ZTogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyAyMyBjaGFyCURpZ2lib2FyZCBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VkMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUQwCisJCSAgMSA9IC9kZXYvY3VkMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUQxCisJCSAgICAgIC4uLgorIDIzIGJsb2NrCU1pdHN1bWkgcHJvcHJpZXRhcnkgQ0QtUk9NCisJCSAgMCA9IC9kZXYvbWNkCQlNaXRzdW1pIENELVJPTQorCisgMjQgY2hhcglTdGFsbGlvbiBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eUUwCVN0YWxsaW9uIHBvcnQgMCBjYXJkIDAKKwkJICAxID0gL2Rldi90dHlFMQlTdGFsbGlvbiBwb3J0IDEgY2FyZCAwCisJCSAgICAuLi4KKwkJIDY0ID0gL2Rldi90dHlFNjQJU3RhbGxpb24gcG9ydCAwIGNhcmQgMQorCQkgNjUgPSAvZGV2L3R0eUU2NQlTdGFsbGlvbiBwb3J0IDEgY2FyZCAxCisJCSAgICAgIC4uLgorCQkxMjggPSAvZGV2L3R0eUUxMjgJU3RhbGxpb24gcG9ydCAwIGNhcmQgMgorCQkxMjkgPSAvZGV2L3R0eUUxMjkJU3RhbGxpb24gcG9ydCAxIGNhcmQgMgorCQkgICAgLi4uCisJCTE5MiA9IC9kZXYvdHR5RTE5MglTdGFsbGlvbiBwb3J0IDAgY2FyZCAzCisJCTE5MyA9IC9kZXYvdHR5RTE5MwlTdGFsbGlvbiBwb3J0IDEgY2FyZCAzCisJCSAgICAuLi4KKyAyNCBibG9jawlTb255IENEVS01MzUgQ0QtUk9NCisJCSAgMCA9IC9kZXYvY2R1NTM1CVNvbnkgQ0RVLTUzNSBDRC1ST00KKworIDI1IGNoYXIJU3RhbGxpb24gc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1ZTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFMAorCQkgIDEgPSAvZGV2L2N1ZTEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFMQorCQkgICAgLi4uCisJCSA2NCA9IC9kZXYvY3VlNjQJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUU2NAorCQkgNjUgPSAvZGV2L2N1ZTY1CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFNjUKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L2N1ZTEyOAlDYWxsb3V0IGRldmljZSBmb3IgdHR5RTEyOAorCQkxMjkgPSAvZGV2L2N1ZTEyOQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RTEyOQorCQkgICAgLi4uCisJCTE5MiA9IC9kZXYvY3VlMTkyCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFMTkyCisJCTE5MyA9IC9kZXYvY3VlMTkzCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlFMTkzCisJCSAgICAgIC4uLgorIDI1IGJsb2NrCUZpcnN0IE1hdHN1c2hpdGEgKFBhbmFzb25pYy9Tb3VuZEJsYXN0ZXIpIENELVJPTQorCQkgIDAgPSAvZGV2L3NicGNkMAlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMCB1bml0IDAKKwkJICAxID0gL2Rldi9zYnBjZDEJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDAgdW5pdCAxCisJCSAgMiA9IC9kZXYvc2JwY2QyCVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAwIHVuaXQgMgorCQkgIDMgPSAvZGV2L3NicGNkMwlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMCB1bml0IDMKKworIDI2IGNoYXIJUXVhbnRhIFdpblZpc2lvbiBmcmFtZSBncmFiYmVyIHsyLjZ9CisJCSAgMCA9IC9kZXYvd3Zpc2ZncmFiCVF1YW50YSBXaW5WaXNpb24gZnJhbWUgZ3JhYmJlcgorIDI2IGJsb2NrCVNlY29uZCBNYXRzdXNoaXRhIChQYW5hc29uaWMvU291bmRCbGFzdGVyKSBDRC1ST00KKwkJICAwID0gL2Rldi9zYnBjZDQJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDEgdW5pdCAwCisJCSAgMSA9IC9kZXYvc2JwY2Q1CVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAxIHVuaXQgMQorCQkgIDIgPSAvZGV2L3NicGNkNglQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMSB1bml0IDIKKwkJICAzID0gL2Rldi9zYnBjZDcJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDEgdW5pdCAzCisKKyAyNyBjaGFyCVFJQy0xMTcgdGFwZQorCQkgIDAgPSAvZGV2L3FmdDAJCVVuaXQgMCwgcmV3aW5kLW9uLWNsb3NlCisJCSAgMSA9IC9kZXYvcWZ0MQkJVW5pdCAxLCByZXdpbmQtb24tY2xvc2UKKwkJICAyID0gL2Rldi9xZnQyCQlVbml0IDIsIHJld2luZC1vbi1jbG9zZQorCQkgIDMgPSAvZGV2L3FmdDMJCVVuaXQgMywgcmV3aW5kLW9uLWNsb3NlCisJCSAgNCA9IC9kZXYvbnFmdDAJVW5pdCAwLCBubyByZXdpbmQtb24tY2xvc2UKKwkJICA1ID0gL2Rldi9ucWZ0MQlVbml0IDEsIG5vIHJld2luZC1vbi1jbG9zZQorCQkgIDYgPSAvZGV2L25xZnQyCVVuaXQgMiwgbm8gcmV3aW5kLW9uLWNsb3NlCisJCSAgNyA9IC9kZXYvbnFmdDMJVW5pdCAzLCBubyByZXdpbmQtb24tY2xvc2UKKwkJIDE2ID0gL2Rldi96cWZ0MAlVbml0IDAsIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDE3ID0gL2Rldi96cWZ0MQlVbml0IDEsIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDE4ID0gL2Rldi96cWZ0MglVbml0IDIsIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDE5ID0gL2Rldi96cWZ0MwlVbml0IDMsIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDIwID0gL2Rldi9uenFmdDAJVW5pdCAwLCBubyByZXdpbmQtb24tY2xvc2UsIGNvbXByZXNzaW9uCisJCSAyMSA9IC9kZXYvbnpxZnQxCVVuaXQgMSwgbm8gcmV3aW5kLW9uLWNsb3NlLCBjb21wcmVzc2lvbgorCQkgMjIgPSAvZGV2L256cWZ0MglVbml0IDIsIG5vIHJld2luZC1vbi1jbG9zZSwgY29tcHJlc3Npb24KKwkJIDIzID0gL2Rldi9uenFmdDMJVW5pdCAzLCBubyByZXdpbmQtb24tY2xvc2UsIGNvbXByZXNzaW9uCisJCSAzMiA9IC9kZXYvcmF3cWZ0MAlVbml0IDAsIHJld2luZC1vbi1jbG9zZSwgbm8gZmlsZSBtYXJrcworCQkgMzMgPSAvZGV2L3Jhd3FmdDEJVW5pdCAxLCByZXdpbmQtb24tY2xvc2UsIG5vIGZpbGUgbWFya3MKKwkJIDM0ID0gL2Rldi9yYXdxZnQyCVVuaXQgMiwgcmV3aW5kLW9uLWNsb3NlLCBubyBmaWxlIG1hcmtzCisJCSAzNSA9IC9kZXYvcmF3cWZ0MwlVbml0IDMsIHJld2luZC1vbi1jbG9zZSwgbm8gZmlsZSBtYXJrcworCQkgMzYgPSAvZGV2L25yYXdxZnQwCVVuaXQgMCwgbm8gcmV3aW5kLW9uLWNsb3NlLCBubyBmaWxlIG1hcmtzCisJCSAzNyA9IC9kZXYvbnJhd3FmdDEJVW5pdCAxLCBubyByZXdpbmQtb24tY2xvc2UsIG5vIGZpbGUgbWFya3MKKwkJIDM4ID0gL2Rldi9ucmF3cWZ0MglVbml0IDIsIG5vIHJld2luZC1vbi1jbG9zZSwgbm8gZmlsZSBtYXJrcworCQkgMzkgPSAvZGV2L25yYXdxZnQzCVVuaXQgMywgbm8gcmV3aW5kLW9uLWNsb3NlLCBubyBmaWxlIG1hcmtzCisgMjcgYmxvY2sJVGhpcmQgTWF0c3VzaGl0YSAoUGFuYXNvbmljL1NvdW5kQmxhc3RlcikgQ0QtUk9NCisJCSAgMCA9IC9kZXYvc2JwY2Q4CVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAyIHVuaXQgMAorCQkgIDEgPSAvZGV2L3NicGNkOQlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMiB1bml0IDEKKwkJICAyID0gL2Rldi9zYnBjZDEwCVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAyIHVuaXQgMgorCQkgIDMgPSAvZGV2L3NicGNkMTEJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDIgdW5pdCAzCisKKyAyOCBjaGFyCVN0YWxsaW9uIHNlcmlhbCBjYXJkIC0gY2FyZCBwcm9ncmFtbWluZworCQkgIDAgPSAvZGV2L3N0YWxpb21lbTAJRmlyc3QgU3RhbGxpb24gY2FyZCBJL08gbWVtb3J5CisJCSAgMSA9IC9kZXYvc3RhbGlvbWVtMQlTZWNvbmQgU3RhbGxpb24gY2FyZCBJL08gbWVtb3J5CisJCSAgMiA9IC9kZXYvc3RhbGlvbWVtMglUaGlyZCBTdGFsbGlvbiBjYXJkIEkvTyBtZW1vcnkKKwkJICAzID0gL2Rldi9zdGFsaW9tZW0zCUZvdXJ0aCBTdGFsbGlvbiBjYXJkIEkvTyBtZW1vcnkKKyAyOCBjaGFyCUF0YXJpIFNMTSBBQ1NJIGxhc2VyIHByaW50ZXIgKDY4ay9BdGFyaSkKKwkJICAwID0gL2Rldi9zbG0wCQlGaXJzdCBTTE0gbGFzZXIgcHJpbnRlcgorCQkgIDEgPSAvZGV2L3NsbTEJCVNlY29uZCBTTE0gbGFzZXIgcHJpbnRlcgorCQkgICAgLi4uCisgMjggYmxvY2sJRm91cnRoIE1hdHN1c2hpdGEgKFBhbmFzb25pYy9Tb3VuZEJsYXN0ZXIpIENELVJPTQorCQkgIDAgPSAvZGV2L3NicGNkMTIJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDMgdW5pdCAwCisJCSAgMSA9IC9kZXYvc2JwY2QxMwlQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMyB1bml0IDEKKwkJICAyID0gL2Rldi9zYnBjZDE0CVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAzIHVuaXQgMgorCQkgIDMgPSAvZGV2L3NicGNkMTUJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDMgdW5pdCAzCisgMjggYmxvY2sJQUNTSSBkaXNrICg2OGsvQXRhcmkpCisJCSAgMCA9IC9kZXYvYWRhCQlGaXJzdCBBQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2FkYgkJU2Vjb25kIEFDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAzMiA9IC9kZXYvYWRjCQlUaGlyZCBBQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvYWRwCQkxNnRoIEFDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNSwgbGlrZSBTQ1NJLgorCisgMjkgY2hhcglVbml2ZXJzYWwgZnJhbWUgYnVmZmVyCisJCSAgMCA9IC9kZXYvZmIwCQlGaXJzdCBmcmFtZSBidWZmZXIKKwkJICAxID0gL2Rldi9mYjEJCVNlY29uZCBmcmFtZSBidWZmZXIKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L2ZiMzEJCTMybmQgZnJhbWUgYnVmZmVyCisKKyAyOSBibG9jawlBenRlY2gvT3JjaGlkL09rYW5vL1dlYXJuZXMgQ0QtUk9NCisJCSAgMCA9IC9kZXYvYXp0Y2QJQXp0ZWNoIENELVJPTQorCisgMzAgY2hhcglpQkNTLTIgY29tcGF0aWJpbGl0eSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvc29ja3N5cwlTb2NrZXQgYWNjZXNzCisJCSAgMSA9IC9kZXYvc3B4CQlTVlIzIGxvY2FsIFggaW50ZXJmYWNlCisJCSAzMiA9IC9kZXYvaW5ldC9pcAlOZXR3b3JrIGFjY2VzcworCQkgMzMgPSAvZGV2L2luZXQvaWNtcAorCQkgMzQgPSAvZGV2L2luZXQvZ2dwCisJCSAzNSA9IC9kZXYvaW5ldC9pcGlwCisJCSAzNiA9IC9kZXYvaW5ldC90Y3AKKwkJIDM3ID0gL2Rldi9pbmV0L2VncAorCQkgMzggPSAvZGV2L2luZXQvcHVwCisJCSAzOSA9IC9kZXYvaW5ldC91ZHAKKwkJIDQwID0gL2Rldi9pbmV0L2lkcAorCQkgNDEgPSAvZGV2L2luZXQvcmF3aXAKKworCQlBZGRpdGlvbmFsbHksIGlCQ1MtMiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGxpbmtzOgorCisJCS9kZXYvaXAgLT4gL2Rldi9pbmV0L2lwCisJCS9kZXYvaWNtcCAtPiAvZGV2L2luZXQvaWNtcAorCQkvZGV2L2dncCAtPiAvZGV2L2luZXQvZ2dwCisJCS9kZXYvaXBpcCAtPiAvZGV2L2luZXQvaXBpcAorCQkvZGV2L3RjcCAtPiAvZGV2L2luZXQvdGNwCisJCS9kZXYvZWdwIC0+IC9kZXYvaW5ldC9lZ3AKKwkJL2Rldi9wdXAgLT4gL2Rldi9pbmV0L3B1cAorCQkvZGV2L3VkcCAtPiAvZGV2L2luZXQvdWRwCisJCS9kZXYvaWRwIC0+IC9kZXYvaW5ldC9pZHAKKwkJL2Rldi9yYXdpcCAtPiAvZGV2L2luZXQvcmF3aXAKKwkJL2Rldi9pbmV0L2FycCAtPiAvZGV2L2luZXQvdWRwCisJCS9kZXYvaW5ldC9yaXAgLT4gL2Rldi9pbmV0L3VkcAorCQkvZGV2L25mc2QgLT4gL2Rldi9zb2Nrc3lzCisJCS9kZXYvWDBSIC0+IC9kZXYvbnVsbCAoPyBhcHBhcmVudGx5IG5vdCByZXF1aXJlZCA/KQorCisgMzAgYmxvY2sJUGhpbGlwcyBMTVMgQ00tMjA1IENELVJPTQorCQkgIDAgPSAvZGV2L2NtMjA1Y2QJUGhpbGlwcyBMTVMgQ00tMjA1IENELVJPTQorCisJCS9kZXYvbG1zY2QgaXMgYW4gb2xkZXIgbmFtZSBmb3IgdGhpcyBkZXZpY2UuICBUaGlzCisJCWRyaXZlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhlIENNLTIwNU1TIENELVJPTS4KKworIDMxIGNoYXIJTVBVLTQwMSBNSURJCisJCSAgMCA9IC9kZXYvbXB1NDAxZGF0YQlNUFUtNDAxIGRhdGEgcG9ydAorCQkgIDEgPSAvZGV2L21wdTQwMXN0YXQJTVBVLTQwMSBzdGF0dXMgcG9ydAorIDMxIGJsb2NrCVJPTS9mbGFzaCBtZW1vcnkgY2FyZAorCQkgIDAgPSAvZGV2L3JvbTAJCUZpcnN0IFJPTSBjYXJkIChydykKKwkJICAgICAgLi4uCisJCSAgNyA9IC9kZXYvcm9tNwkJRWlnaHRoIFJPTSBjYXJkIChydykKKwkJICA4ID0gL2Rldi9ycm9tMAlGaXJzdCBST00gY2FyZCAocm8pCisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi9ycm9tNwlFaWdodGggUk9NIGNhcmQgKHJvKQorCQkgMTYgPSAvZGV2L2ZsYXNoMAlGaXJzdCBmbGFzaCBtZW1vcnkgY2FyZCAocncpCisJCSAgICAuLi4KKwkJIDIzID0gL2Rldi9mbGFzaDcJRWlnaHRoIGZsYXNoIG1lbW9yeSBjYXJkIChydykKKwkJIDI0ID0gL2Rldi9yZmxhc2gwCUZpcnN0IGZsYXNoIG1lbW9yeSBjYXJkIChybykKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L3JmbGFzaDcJRWlnaHRoIGZsYXNoIG1lbW9yeSBjYXJkIChybykKKworCQlUaGUgcmVhZC13cml0ZSAocncpIGRldmljZXMgc3VwcG9ydCBiYWNrLWNhY2hpbmcKKwkJd3JpdHRlbiBkYXRhIGluIFJBTSwgYXMgd2VsbCBhcyB3cml0aW5nIHRvIGZsYXNoIFJBTQorCQlkZXZpY2VzLiAgVGhlIHJlYWQtb25seSBkZXZpY2VzIChybykgc3VwcG9ydCByZWFkaW5nCisJCW9ubHkuCisKKyAzMiBjaGFyCVNwZWNpYWxpeCBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eVgwCUZpcnN0IFNwZWNpYWxpeCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5WDEJU2Vjb25kIFNwZWNpYWxpeCBwb3J0CisJCSAgICAuLi4KKyAzMiBibG9jawlQaGlsaXBzIExNUyBDTS0yMDYgQ0QtUk9NCisJCSAgMCA9IC9kZXYvY20yMDZjZAlQaGlsaXBzIExNUyBDTS0yMDYgQ0QtUk9NCisKKyAzMyBjaGFyCVNwZWNpYWxpeCBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3V4MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVgwCisJCSAgMSA9IC9kZXYvY3V4MQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVgxCisJCSAgICAuLi4KKyAzMyBibG9jawlUaGlyZCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZGUJCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkZgkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDM0IGNoYXIJWjg1MzAgSERMQyBkcml2ZXIKKwkJICAwID0gL2Rldi9zY2MwCQlGaXJzdCBaODUzMCwgZmlyc3QgcG9ydAorCQkgIDEgPSAvZGV2L3NjYzEJCUZpcnN0IFo4NTMwLCBzZWNvbmQgcG9ydAorCQkgIDIgPSAvZGV2L3NjYzIJCVNlY29uZCBaODUzMCwgZmlyc3QgcG9ydAorCQkgIDMgPSAvZGV2L3NjYzMJCVNlY29uZCBaODUzMCwgc2Vjb25kIHBvcnQKKwkJICAgIC4uLgorCisJCUluIGEgcHJldmlvdXMgdmVyc2lvbiB0aGVzZSBkZXZpY2VzIHdlcmUgbmFtZWQKKwkJL2Rldi9zYzEgZm9yIC9kZXYvc2NjMCwgL2Rldi9zYzIgZm9yIC9kZXYvc2NjMSwgYW5kIHNvCisJCW9uLgorCisgMzQgYmxvY2sJRm91cnRoIElERSBoYXJkIGRpc2svQ0QtUk9NIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2hkZwkJTWFzdGVyOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCSA2NCA9IC9kZXYvaGRoCQlTbGF2ZTogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyAzNSBjaGFyCXRjbG1pZGkgTUlESSBkcml2ZXIKKwkJICAwID0gL2Rldi9taWRpMAlGaXJzdCBNSURJIHBvcnQsIGtlcm5lbCB0aW1lZAorCQkgIDEgPSAvZGV2L21pZGkxCVNlY29uZCBNSURJIHBvcnQsIGtlcm5lbCB0aW1lZAorCQkgIDIgPSAvZGV2L21pZGkyCVRoaXJkIE1JREkgcG9ydCwga2VybmVsIHRpbWVkCisJCSAgMyA9IC9kZXYvbWlkaTMJRm91cnRoIE1JREkgcG9ydCwga2VybmVsIHRpbWVkCisJCSA2NCA9IC9kZXYvcm1pZGkwCUZpcnN0IE1JREkgcG9ydCwgdW50aW1lZAorCQkgNjUgPSAvZGV2L3JtaWRpMQlTZWNvbmQgTUlESSBwb3J0LCB1bnRpbWVkCisJCSA2NiA9IC9kZXYvcm1pZGkyCVRoaXJkIE1JREkgcG9ydCwgdW50aW1lZAorCQkgNjcgPSAvZGV2L3JtaWRpMwlGb3VydGggTUlESSBwb3J0LCB1bnRpbWVkCisJCTEyOCA9IC9kZXYvc21wdGUwCUZpcnN0IE1JREkgcG9ydCwgU01QVEUgdGltZWQKKwkJMTI5ID0gL2Rldi9zbXB0ZTEJU2Vjb25kIE1JREkgcG9ydCwgU01QVEUgdGltZWQKKwkJMTMwID0gL2Rldi9zbXB0ZTIJVGhpcmQgTUlESSBwb3J0LCBTTVBURSB0aW1lZAorCQkxMzEgPSAvZGV2L3NtcHRlMwlGb3VydGggTUlESSBwb3J0LCBTTVBURSB0aW1lZAorIDM1IGJsb2NrCVNsb3cgbWVtb3J5IHJhbWRpc2sKKwkJICAwID0gL2Rldi9zbHJhbQlTbG93IG1lbW9yeSByYW1kaXNrCisKKyAzNiBjaGFyCU5ldGxpbmsgc3VwcG9ydAorCQkgIDAgPSAvZGV2L3JvdXRlCVJvdXRpbmcsIGRldmljZSB1cGRhdGVzLCBrZXJuZWwgdG8gdXNlcgorCQkgIDEgPSAvZGV2L3NraXAJCWVuU0tJUCBzZWN1cml0eSBjYWNoZSBjb250cm9sCisJCSAgMyA9IC9kZXYvZndtb25pdG9yCUZpcmV3YWxsIHBhY2tldCBjb3BpZXMKKwkJIDE2ID0gL2Rldi90YXAwCQlGaXJzdCBFdGhlcnRhcCBkZXZpY2UKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L3RhcDE1CTE2dGggRXRoZXJ0YXAgZGV2aWNlCisgMzYgYmxvY2sJTUNBIEVTREkgaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvZWRhCQlGaXJzdCBFU0RJIGRpc2sgd2hvbGUgZGlzaworCQkgNjQgPSAvZGV2L2VkYgkJU2Vjb25kIEVTREkgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBJREUgZGlza3MKKwkJKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyAzNyBjaGFyCUlERSB0YXBlCisJCSAgMCA9IC9kZXYvaHQwCQlGaXJzdCBJREUgdGFwZQorCQkgIDEgPSAvZGV2L2h0MQkJU2Vjb25kIElERSB0YXBlCisJCSAgICAuLi4KKwkJMTI4ID0gL2Rldi9uaHQwCQlGaXJzdCBJREUgdGFwZSwgbm8gcmV3aW5kLW9uLWNsb3NlCisJCTEyOSA9IC9kZXYvbmh0MQkJU2Vjb25kIElERSB0YXBlLCBubyByZXdpbmQtb24tY2xvc2UKKwkJICAgIC4uLgorCisJCUN1cnJlbnRseSwgb25seSBvbmUgSURFIHRhcGUgZHJpdmUgaXMgc3VwcG9ydGVkLgorCisgMzcgYmxvY2sJWm9ycm8gSUkgcmFtZGlzaworCQkgIDAgPSAvZGV2L3oycmFtCVpvcnJvIElJIHJhbWRpc2sKKworIDM4IGNoYXIJTXlyaWNvbSBQQ0kgTXlyaW5ldCBib2FyZAorCQkgIDAgPSAvZGV2L21sYW5haTAJRmlyc3QgTXlyaW5ldCBib2FyZAorCQkgIDEgPSAvZGV2L21sYW5haTEJU2Vjb25kIE15cmluZXQgYm9hcmQKKwkJICAgIC4uLgorCisJCVRoaXMgZGV2aWNlIGlzIHVzZWQgZm9yIHN0YXR1cyBxdWVyeSwgYm9hcmQgY29udHJvbAorCQlhbmQgInVzZXIgbGV2ZWwgcGFja2V0IEkvTy4iICBUaGlzIGJvYXJkIGlzIGFsc28KKwkJYWNjZXNzaWJsZSBhcyBhIHN0YW5kYXJkIG5ldHdvcmtpbmcgImV0aCIgZGV2aWNlLgorCisgMzggYmxvY2sJUmVzZXJ2ZWQgZm9yIExpbnV4L0FQKworCisgMzkgY2hhcglNTC0xNlAgZXhwZXJpbWVudGFsIEkvTyBib2FyZAorCQkgIDAgPSAvZGV2L21sMTZwYS1hMAlGaXJzdCBjYXJkLCBmaXJzdCBhbmFsb2cgY2hhbm5lbAorCQkgIDEgPSAvZGV2L21sMTZwYS1hMQlGaXJzdCBjYXJkLCBzZWNvbmQgYW5hbG9nIGNoYW5uZWwKKwkJICAgIC4uLgorCQkgMTUgPSAvZGV2L21sMTZwYS1hMTUJRmlyc3QgY2FyZCwgMTZ0aCBhbmFsb2cgY2hhbm5lbAorCQkgMTYgPSAvZGV2L21sMTZwYS1kCUZpcnN0IGNhcmQsIGRpZ2l0YWwgbGluZXMKKwkJIDE3ID0gL2Rldi9tbDE2cGEtYzAJRmlyc3QgY2FyZCwgZmlyc3QgY291bnRlci90aW1lcgorCQkgMTggPSAvZGV2L21sMTZwYS1jMQlGaXJzdCBjYXJkLCBzZWNvbmQgY291bnRlci90aW1lcgorCQkgMTkgPSAvZGV2L21sMTZwYS1jMglGaXJzdCBjYXJkLCB0aGlyZCBjb3VudGVyL3RpbWVyCisJCSAzMiA9IC9kZXYvbWwxNnBiLWEwCVNlY29uZCBjYXJkLCBmaXJzdCBhbmFsb2cgY2hhbm5lbAorCQkgMzMgPSAvZGV2L21sMTZwYi1hMQlTZWNvbmQgY2FyZCwgc2Vjb25kIGFuYWxvZyBjaGFubmVsCisJCSAgICAuLi4KKwkJIDQ3ID0gL2Rldi9tbDE2cGItYTE1CVNlY29uZCBjYXJkLCAxNnRoIGFuYWxvZyBjaGFubmVsCisJCSA0OCA9IC9kZXYvbWwxNnBiLWQJU2Vjb25kIGNhcmQsIGRpZ2l0YWwgbGluZXMKKwkJIDQ5ID0gL2Rldi9tbDE2cGItYzAJU2Vjb25kIGNhcmQsIGZpcnN0IGNvdW50ZXIvdGltZXIKKwkJIDUwID0gL2Rldi9tbDE2cGItYzEJU2Vjb25kIGNhcmQsIHNlY29uZCBjb3VudGVyL3RpbWVyCisJCSA1MSA9IC9kZXYvbWwxNnBiLWMyCVNlY29uZCBjYXJkLCB0aGlyZCBjb3VudGVyL3RpbWVyCisJCSAgICAgIC4uLgorIDM5IGJsb2NrCVJlc2VydmVkIGZvciBMaW51eC9BUCsKKworIDQwIGNoYXIJTWF0cm94IE1ldGVvciBmcmFtZSBncmFiYmVyIHsyLjZ9CisJCSAgMCA9IC9kZXYvbW1ldGZncmFiCU1hdHJveCBNZXRlb3IgZnJhbWUgZ3JhYmJlcgorIDQwIGJsb2NrCVN5cXVlc3QgRVoxMzUgcGFyYWxsZWwgcG9ydCByZW1vdmFibGUgZHJpdmUKKwkJICAwID0gL2Rldi9lemEJCVBhcmFsbGVsIEVaMTM1IGRyaXZlLCB3aG9sZSBkaXNrCisKKwkJVGhpcyBkZXZpY2UgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhCisJCWZ1dHVyZSB2ZXJzaW9uIG9mIExpbnV4LiAgSXQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aAorCQl0aGUgcGFyYWxsZWwgcG9ydCBJREUgZGlzayBkcml2ZXIgYXQgbWFqb3IgbnVtYmVyIDQ1LgorCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBJREUgZGlza3MKKwkJKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyA0MSBjaGFyCVlldCBBbm90aGVyIE1pY3JvIE1vbml0b3IKKwkJICAwID0gL2Rldi95YW1tCQlZZXQgQW5vdGhlciBNaWNybyBNb25pdG9yCisgNDEgYmxvY2sJTWljcm9Tb2x1dGlvbnMgQmFja1BhY2sgcGFyYWxsZWwgcG9ydCBDRC1ST00KKwkJICAwID0gL2Rldi9icGNkCQlCYWNrUGFjayBDRC1ST00KKworCQlUaGlzIGRldmljZSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEKKwkJZnV0dXJlIHZlcnNpb24gb2YgTGludXguICBJdCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoCisJCXRoZSBwYXJhbGxlbCBwb3J0IEFUQVBJIENELVJPTSBkcml2ZXIgYXQgbWFqb3IgbnVtYmVyIDQ2LgorCisgNDIgY2hhcglEZW1vL3NhbXBsZSB1c2UKKyA0MiBibG9jawlEZW1vL3NhbXBsZSB1c2UKKworCQlUaGlzIG51bWJlciBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIHNhbXBsZSBjb2RlLCBhcworCQl3ZWxsIGFzIGEgZ2VuZXJhbCAiZXhhbXBsZSIgZGV2aWNlIG51bWJlci4gIEl0CisJCXNob3VsZCBuZXZlciBiZSB1c2VkIGZvciBhIGRldmljZSBkcml2ZXIgdGhhdCBpcyBiZWluZworCQlkaXN0cmlidXRlZDsgZWl0aGVyIG9idGFpbiBhbiBvZmZpY2lhbCBudW1iZXIgb3IgdXNlCisJCXRoZSBsb2NhbC9leHBlcmltZW50YWwgcmFuZ2UuICBUaGUgc3VkZGVuIGFkZGl0aW9uIG9yCisJCXJlbW92YWwgb2YgYSBkcml2ZXIgd2l0aCB0aGlzIG51bWJlciBzaG91bGQgbm90IGNhdXNlCisJCWlsbCBlZmZlY3RzIHRvIHRoZSBzeXN0ZW0gKGJ1Z3MgZXhjZXB0ZWQuKQorCisJCUlOIFBBUlRJQ1VMQVIsIEFOWSBESVNUUklCVVRJT04gV0hJQ0ggQ09OVEFJTlMgQQorCQlERVZJQ0UgRFJJVkVSIFVTSU5HIE1BSk9SIE5VTUJFUiA0MiBJUyBOT05DT01QTElBTlQuCisKKyA0MyBjaGFyCWlzZG40bGludXggdmlydHVhbCBtb2RlbQorCQkgIDAgPSAvZGV2L3R0eUkwCUZpcnN0IHZpcnR1YWwgbW9kZW0KKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L3R0eUk2Mwk2NHRoIHZpcnR1YWwgbW9kZW0KKyA0MyBibG9jawlOZXR3b3JrIGJsb2NrIGRldmljZXMKKwkJICAwID0gL2Rldi9uYjAJCUZpcnN0IG5ldHdvcmsgYmxvY2sgZGV2aWNlCisJCSAgMSA9IC9kZXYvbmIxCQlTZWNvbmQgbmV0d29yayBibG9jayBkZXZpY2UKKwkJICAgIC4uLgorCisJCU5ldHdvcmsgQmxvY2sgRGV2aWNlIGlzIHNvbWVob3cgc2ltaWxhciB0byBsb29wYmFjaworCQlkZXZpY2VzOiBJZiB5b3UgcmVhZCBmcm9tIGl0LCBpdCBzZW5kcyBwYWNrZXQgYWNyb3NzCisJCW5ldHdvcmsgYXNraW5nIHNlcnZlciBmb3IgZGF0YS4gSWYgeW91IHdyaXRlIHRvIGl0LCBpdAorCQlzZW5kcyBwYWNrZXQgdGVsbGluZyBzZXJ2ZXIgdG8gd3JpdGUuIEl0IGNvdWxkIGJlIHVzZWQKKwkJdG8gbW91bnRpbmcgZmlsZXN5c3RlbXMgb3ZlciB0aGUgbmV0LCBzd2FwcGluZyBvdmVyCisJCXRoZSBuZXQsIGltcGxlbWVudGluZyBibG9jayBkZXZpY2UgaW4gdXNlcmxhbmQgZXRjLgorCisgNDQgY2hhcglpc2RuNGxpbnV4IHZpcnR1YWwgbW9kZW0gLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1aTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlJMAorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvY3VpNjMJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUk2MworIDQ0IGJsb2NrCUZsYXNoIFRyYW5zbGF0aW9uIExheWVyIChGVEwpIGZpbGVzeXN0ZW1zCisJCSAgMCA9IC9kZXYvZnRsYQkJRlRMIG9uIGZpcnN0IE1lbW9yeSBUZWNobm9sb2d5IERldmljZQorCQkgMTYgPSAvZGV2L2Z0bGIJCUZUTCBvbiBzZWNvbmQgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlCisJCSAzMiA9IC9kZXYvZnRsYwkJRlRMIG9uIHRoaXJkIE1lbW9yeSBUZWNobm9sb2d5IERldmljZQorCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvZnRscAkJRlRMIG9uIDE2dGggTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlIAorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhwZWN0IHRoYXQgdGhlIHBhcnRpdGlvbgorCQlsaW1pdCBpcyAxNSByYXRoZXIgdGhhbiA2MyBwZXIgZGlzayAoc2FtZSBhcyBTQ1NJLikKKworIDQ1IGNoYXIJaXNkbjRsaW51eCBJU0ROIEJSSSBkcml2ZXIKKwkJICAwID0gL2Rldi9pc2RuMAlGaXJzdCB2aXJ0dWFsIEIgY2hhbm5lbCByYXcgZGF0YQorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvaXNkbjYzCTY0dGggdmlydHVhbCBCIGNoYW5uZWwgcmF3IGRhdGEKKwkJIDY0ID0gL2Rldi9pc2RuY3RybDAJRmlyc3QgY2hhbm5lbCBjb250cm9sL2RlYnVnCisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi9pc2RuY3RybDYzCTY0dGggY2hhbm5lbCBjb250cm9sL2RlYnVnCisKKwkJMTI4ID0gL2Rldi9pcHBwMAlGaXJzdCBTeW5jUFBQIGRldmljZQorCQkgICAgLi4uCisJCTE5MSA9IC9kZXYvaXBwcDYzCTY0dGggU3luY1BQUCBkZXZpY2UKKworCQkyNTUgPSAvZGV2L2lzZG5pbmZvCUlTRE4gbW9uaXRvciBpbnRlcmZhY2UKKyA0NSBibG9jawlQYXJhbGxlbCBwb3J0IElERSBkaXNrIGRldmljZXMKKwkJICAwID0gL2Rldi9wZGEJCUZpcnN0IHBhcmFsbGVsIHBvcnQgSURFIGRpc2sKKwkJIDE2ID0gL2Rldi9wZGIJCVNlY29uZCBwYXJhbGxlbCBwb3J0IElERSBkaXNrCisJCSAzMiA9IC9kZXYvcGRjCQlUaGlyZCBwYXJhbGxlbCBwb3J0IElERSBkaXNrCisJCSA0OCA9IC9kZXYvcGRkCQlGb3VydGggcGFyYWxsZWwgcG9ydCBJREUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIHBhcnRpdGlvbgorCQlsaW1pdCBpcyAxNSByYXRoZXIgdGhhbiA2MyBwZXIgZGlzay4KKworIDQ2IGNoYXIJQ29tdHJvbCBSb2NrZXRwb3J0IHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5UjAJRmlyc3QgUm9ja2V0cG9ydCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5UjEJU2Vjb25kIFJvY2tldHBvcnQgcG9ydAorCQkgICAgLi4uCisgNDYgYmxvY2sJUGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00gZGV2aWNlcworCQkgIDAgPSAvZGV2L3BjZDAJCUZpcnN0IHBhcmFsbGVsIHBvcnQgQVRBUEkgQ0QtUk9NCisJCSAgMSA9IC9kZXYvcGNkMQkJU2Vjb25kIHBhcmFsbGVsIHBvcnQgQVRBUEkgQ0QtUk9NCisJCSAgMiA9IC9kZXYvcGNkMgkJVGhpcmQgcGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00KKwkJICAzID0gL2Rldi9wY2QzCQlGb3VydGggcGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00KKworIDQ3IGNoYXIJQ29tdHJvbCBSb2NrZXRwb3J0IHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXIwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5UjAKKwkJICAxID0gL2Rldi9jdXIxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5UjEKKwkJICAgIC4uLgorIDQ3IGJsb2NrCVBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzayBkZXZpY2VzCisJCSAgMCA9IC9kZXYvcGYwCQlGaXJzdCBwYXJhbGxlbCBwb3J0IEFUQVBJIGRpc2sKKwkJICAxID0gL2Rldi9wZjEJCVNlY29uZCBwYXJhbGxlbCBwb3J0IEFUQVBJIGRpc2sKKwkJICAyID0gL2Rldi9wZjIJCVRoaXJkIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzaworCQkgIDMgPSAvZGV2L3BmMwkJRm91cnRoIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzaworCisJCVRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciBmbG9wcHkgZGlza3MgYW5kIHNpbWlsYXIKKwkJZGV2aWNlcyBhbmQgaGVuY2UgZG9lcyBub3Qgc3VwcG9ydCBwYXJ0aXRpb25pbmcuCisKKyA0OCBjaGFyCVNETCBSSVNDb20gc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlMMAlGaXJzdCBSSVNDb20gcG9ydAorCQkgIDEgPSAvZGV2L3R0eUwxCVNlY29uZCBSSVNDb20gcG9ydAorCQkgICAgLi4uCisgNDggYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IGZpcnN0IGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMGQwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jMGQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMGQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlGb3IgcGFydGl0aW9ucyBhZGQ6CisJCSAgMCA9IC9kZXYvcmQvYz9kPwlXaG9sZSBkaXNrCisJCSAgMSA9IC9kZXYvcmQvYz9kP3AxCUZpcnN0IHBhcnRpdGlvbgorCQkgICAgLi4uCisJCSAgNyA9IC9kZXYvcmQvYz9kP3A3CVNldmVudGggcGFydGl0aW9uCisKKyA0OSBjaGFyCVNETCBSSVNDb20gc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1bDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlMMAorCQkgIDEgPSAvZGV2L2N1bDEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlMMQorCQkgICAgLi4uCisgNDkgYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IHNlY29uZCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzFkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzFkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzFkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKyA1MCBjaGFyCVJlc2VydmVkIGZvciBHTElOVAorCisgNTAgYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IHRoaXJkIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMmQwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jMmQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMmQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworIDUxIGNoYXIJQmF5Y29tIHJhZGlvIG1vZGVtIE9SIFJhZGlvIFRlY2ggQklNLVhYWC1SUzIzMiByYWRpbyBtb2RlbQorCQkgIDAgPSAvZGV2L2JjMAkJRmlyc3QgQmF5Y29tIHJhZGlvIG1vZGVtCisJCSAgMSA9IC9kZXYvYmMxCQlTZWNvbmQgQmF5Y29tIHJhZGlvIG1vZGVtCisJCSAgICAuLi4KKyA1MSBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgZm91cnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jM2QwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jM2QxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jM2QzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworIDUyIGNoYXIJU3BlbGxjYXN0ZXIgRGF0YUNvbW0vQlJJIElTRE4gY2FyZAorCQkgIDAgPSAvZGV2L2RjYnJpMAlGaXJzdCBEYXRhQ29tbSBjYXJkCisJCSAgMSA9IC9kZXYvZGNicmkxCVNlY29uZCBEYXRhQ29tbSBjYXJkCisJCSAgMiA9IC9kZXYvZGNicmkyCVRoaXJkIERhdGFDb21tIGNhcmQKKwkJICAzID0gL2Rldi9kY2JyaTMJRm91cnRoIERhdGFDb21tIGNhcmQKKyA1MiBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgZmlmdGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2M0ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2M0ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2M0ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisgNTMgY2hhcglCRE0gaW50ZXJmYWNlIGZvciByZW1vdGUgZGVidWdnaW5nIE1DNjgzeHggbWljcm9jb250cm9sbGVycworCQkgIDAgPSAvZGV2L3BkX2JkbTAJUEQgQkRNIGludGVyZmFjZSBvbiBscDAKKwkJICAxID0gL2Rldi9wZF9iZG0xCVBEIEJETSBpbnRlcmZhY2Ugb24gbHAxCisJCSAgMiA9IC9kZXYvcGRfYmRtMglQRCBCRE0gaW50ZXJmYWNlIG9uIGxwMgorCQkgIDQgPSAvZGV2L2ljZF9iZG0wCUlDRCBCRE0gaW50ZXJmYWNlIG9uIGxwMAorCQkgIDUgPSAvZGV2L2ljZF9iZG0xCUlDRCBCRE0gaW50ZXJmYWNlIG9uIGxwMQorCQkgIDYgPSAvZGV2L2ljZF9iZG0yCUlDRCBCRE0gaW50ZXJmYWNlIG9uIGxwMgorCisJCVRoaXMgZGV2aWNlIGlzIHVzZWQgZm9yIHRoZSBpbnRlcmZhY2luZyB0byB0aGUgTUM2ODN4eAorCQltaWNyb2NvbnRyb2xsZXJzIHZpYSBCYWNrZ3JvdW5kIERlYnVnIE1vZGUgYnkgdXNlIG9mIGEKKwkJUGFyYWxsZWwgUG9ydCBpbnRlcmZhY2UuIFBEIGlzIHRoZSBNb3Rvcm9sYSBQdWJsaWMKKwkJRG9tYWluIEludGVyZmFjZSBhbmQgSUNEIGlzIHRoZSBjb21tZXJjaWFsIGludGVyZmFjZQorCQlieSBQJkUuCisKKyA1MyBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgc2l4dGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2M1ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2M1ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2M1ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisgNTQgY2hhcglFbGVjdHJvY2FyZGlvZ25vc2lzIEhvbHRlciBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L2hvbHRlcjAJRmlyc3QgSG9sdGVyIHBvcnQKKwkJICAxID0gL2Rldi9ob2x0ZXIxCVNlY29uZCBIb2x0ZXIgcG9ydAorCQkgIDIgPSAvZGV2L2hvbHRlcjIJVGhpcmQgSG9sdGVyIHBvcnQKKworCQlBIGN1c3RvbSBzZXJpYWwgY2FyZCB1c2VkIGJ5IEVsZWN0cm9jYXJkaW9nbm9zaXMgU1JMCisJCTxtc2VyaXRhbkBvdHRvbmVsLnB1Yi5ybz4gdG8gdHJhbnNmZXIgZGF0YSBmcm9tIEhvbHRlcgorCQkyNC1ob3VyIGhlYXJ0IG1vbml0b3JpbmcgZXF1aXBtZW50LgorCisgNTQgYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IHNldmVudGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2M2ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2M2ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2M2ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisgNTUgY2hhcglEU1A1NjAwMSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IKKwkJICAwID0gL2Rldi9kc3A1NmsJRmlyc3QgRFNQNTYwMDEKKyA1NSBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgZWlndGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2M3ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2M3ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2M3ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisgNTYgY2hhcglBcHBsZSBEZXNrdG9wIEJ1cworCQkgIDAgPSAvZGV2L2FkYgkJQURCIGJ1cyBjb250cm9sCisKKwkJQWRkaXRpb25hbCBkZXZpY2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBudW1iZXIsIGFsbAorCQlzdGFydGluZyB3aXRoIC9kZXYvYWRiLgorCisgNTYgYmxvY2sJRmlmdGggSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRpCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZGoJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyA1NyBjaGFyCUhheWVzIEVTUCBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eVAwCUZpcnN0IEVTUCBwb3J0CisJCSAgMSA9IC9kZXYvdHR5UDEJU2Vjb25kIEVTUCBwb3J0CisJCSAgICAuLi4KKworIDU3IGJsb2NrCVNpeHRoIElERSBoYXJkIGRpc2svQ0QtUk9NIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L2hkawkJTWFzdGVyOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisJCSA2NCA9IC9kZXYvaGRsCQlTbGF2ZTogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciB0aGUgZmlyc3QKKwkJaW50ZXJmYWNlIChzZWUgbWFqb3IgbnVtYmVyIDMpLgorCisgNTggY2hhcglIYXllcyBFU1Agc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1cDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlQMAorCQkgIDEgPSAvZGV2L2N1cDEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlQMQorCQkgICAgLi4uCisgNTggYmxvY2sJUmVzZXJ2ZWQgZm9yIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZXIKKworIDU5IGNoYXIJc2YgZmlyZXdhbGwgcGFja2FnZQorCQkgIDAgPSAvZGV2L2ZpcmV3YWxsCUNvbW11bmljYXRpb24gd2l0aCBzZiBrZXJuZWwgbW9kdWxlCisKKyA1OSBibG9jawlHZW5lcmljIFBEQSBmaWxlc3lzdGVtIGRldmljZQorCQkgIDAgPSAvZGV2L3BkYTAJCUZpcnN0IFBEQSBkZXZpY2UKKwkJICAxID0gL2Rldi9wZGExCQlTZWNvbmQgUERBIGRldmljZQorCQkgICAgLi4uCisKKwkJVGhlIHBkYSBkZXZpY2VzIGFyZSB1c2VkIHRvIG1vdW50IGZpbGVzeXN0ZW1zIG9uCisJCXJlbW90ZSBwZGEncyAoYmFzaWNhbGx5IHNsb3cgaGFuZGhlbGQgbWFjaGluZXMgd2l0aAorCQlwcm9wcmlldGFyeSBPUydzIGFuZCBsaW1pdGVkIG1lbW9yeSBhbmQgc3RvcmFnZQorCQlydW5uaW5nIHNtYWxsIGZzIHRyYW5zbGF0aW9uIGRyaXZlcnMpIHRocm91Z2ggc2VyaWFsIC8KKwkJSVJEQSAvIHBhcmFsbGVsIGxpbmtzLgorCisJCU5BTUlORyBDT05GTElDVCAtLSBQUk9QT1NFRCBSRVZJU0VEIE5BTUUgL2Rldi9ycGRhMCBldGMKKworIDYwLTYzIGNoYXIJTE9DQUwvRVhQRVJJTUVOVEFMIFVTRQorIDYwLTYzIGJsb2NrCUxPQ0FML0VYUEVSSU1FTlRBTCBVU0UKKwkJQWxsb2NhdGVkIGZvciBsb2NhbC9leHBlcmltZW50YWwgdXNlLiAgRm9yIGRldmljZXMgbm90CisJCWFzc2lnbmVkIG9mZmljaWFsIG51bWJlcnMsIHRoZXNlIHJhbmdlcyBzaG91bGQgYmUKKwkJdXNlZCBpbiBvcmRlciB0byBhdm9pZCBjb25mbGljdGluZyB3aXRoIGZ1dHVyZSBhc3NpZ25tZW50cy4KKworIDY0IGNoYXIJRU5za2lwIGtlcm5lbCBlbmNyeXB0aW9uIHBhY2thZ2UKKwkJICAwID0gL2Rldi9lbnNraXAJQ29tbXVuaWNhdGlvbiB3aXRoIEVOc2tpcCBrZXJuZWwgbW9kdWxlCisKKyA2NCBibG9jawlTY3JhbWRpc2svRHJpdmVDcnlwdCBlbmNyeXB0ZWQgZGV2aWNlcworCQkgIDAgPSAvZGV2L3NjcmFtZGlzay9tYXN0ZXIgICAgTWFzdGVyIG5vZGUgZm9yIGlvY3RscworCQkgIDEgPSAvZGV2L3NjcmFtZGlzay8xICAgICAgICAgRmlyc3QgZW5jcnlwdGVkIGRldmljZQorCQkgIDIgPSAvZGV2L3NjcmFtZGlzay8yICAgICAgICAgU2Vjb25kIGVuY3J5cHRlZCBkZXZpY2UKKwkJICAuLi4KKwkJMjU1ID0gL2Rldi9zY3JhbWRpc2svMjU1ICAgICAgIDI1NXRoIGVuY3J5cHRlZCBkZXZpY2UKKworCQlUaGUgZmlsZW5hbWUgb2YgdGhlIGVuY3J5cHRlZCBjb250YWluZXIgYW5kIHRoZSBwYXNzd29yZHMKKwkJYXJlIHNlbnQgdmlhIGlvY3RscyAodXNpbmcgdGhlIHNkbW91bnQgdG9vbCkgdG8gdGhlIG1hc3RlcgorCQlub2RlIHdoaWNoIHRoZW4gYWN0aXZhdGVzIHRoZW0gdmlhIG9uZSBvZiB0aGUKKwkJL2Rldi9zY3JhbWRpc2sveCBub2RlcyBmb3IgbG9vcGJhY2sgbW91bnRpbmcgKGFsbCBoYW5kbGVkCisJCXRocm91Z2ggdGhlIHNkbW91bnQgdG9vbCkuCisKKwkJUmVxdWVzdGVkIGJ5OiBhbmR5QHNjcmFtZGlza2xpbnV4Lm9yZworCisgNjUgY2hhcglTdW5kYW5jZSAicGxpbmsiIFRyYW5zcHV0ZXIgYm9hcmRzIChvYnNvbGV0ZSwgdW51c2VkKQorCQkgIDAgPSAvZGV2L3BsaW5rMAlGaXJzdCBwbGluayBkZXZpY2UKKwkJICAxID0gL2Rldi9wbGluazEJU2Vjb25kIHBsaW5rIGRldmljZQorCQkgIDIgPSAvZGV2L3BsaW5rMglUaGlyZCBwbGluayBkZXZpY2UKKwkJICAzID0gL2Rldi9wbGluazMJRm91cnRoIHBsaW5rIGRldmljZQorCQkgNjQgPSAvZGV2L3JwbGluazAJRmlyc3QgcGxpbmsgZGV2aWNlLCByYXcKKwkJIDY1ID0gL2Rldi9ycGxpbmsxCVNlY29uZCBwbGluayBkZXZpY2UsIHJhdworCQkgNjYgPSAvZGV2L3JwbGluazIJVGhpcmQgcGxpbmsgZGV2aWNlLCByYXcKKwkJIDY3ID0gL2Rldi9ycGxpbmszCUZvdXJ0aCBwbGluayBkZXZpY2UsIHJhdworCQkxMjggPSAvZGV2L3BsaW5rMGQJRmlyc3QgcGxpbmsgZGV2aWNlLCBkZWJ1ZworCQkxMjkgPSAvZGV2L3BsaW5rMWQJU2Vjb25kIHBsaW5rIGRldmljZSwgZGVidWcKKwkJMTMwID0gL2Rldi9wbGluazJkCVRoaXJkIHBsaW5rIGRldmljZSwgZGVidWcKKwkJMTMxID0gL2Rldi9wbGluazNkCUZvdXJ0aCBwbGluayBkZXZpY2UsIGRlYnVnCisJCTE5MiA9IC9kZXYvcnBsaW5rMGQJRmlyc3QgcGxpbmsgZGV2aWNlLCByYXcsIGRlYnVnCisJCTE5MyA9IC9kZXYvcnBsaW5rMWQJU2Vjb25kIHBsaW5rIGRldmljZSwgcmF3LCBkZWJ1ZworCQkxOTQgPSAvZGV2L3JwbGluazJkCVRoaXJkIHBsaW5rIGRldmljZSwgcmF3LCBkZWJ1ZworCQkxOTUgPSAvZGV2L3JwbGluazNkCUZvdXJ0aCBwbGluayBkZXZpY2UsIHJhdywgZGVidWcKKworCQlUaGlzIGlzIGEgY29tbWVyY2lhbCBkcml2ZXI7IGNvbnRhY3QgSmFtZXMgSG93ZXMKKwkJPGp0aEBwcm9zaWcuZGVtb24uY28udWs+IGZvciBpbmZvcm1hdGlvbi4KKworIDY1IGJsb2NrCVNDU0kgZGlzayBkZXZpY2VzICgxNi0zMSkKKwkJICAwID0gL2Rldi9zZHEJCTE3dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZHIJCTE4dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9zZHMJCTE5dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L3NkYWYJCTMybmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNjYgY2hhcglZQVJDIFBvd2VyUEMgUENJIGNvcHJvY2Vzc29yIGNhcmQKKwkJICAwID0gL2Rldi95cHBjcGNpMAlGaXJzdCBZQVJDIGNhcmQKKwkJICAxID0gL2Rldi95cHBjcGNpMQlTZWNvbmQgWUFSQyBjYXJkCisJCSAgICAuLi4KKworIDY2IGJsb2NrCVNDU0kgZGlzayBkZXZpY2VzICgzMi00NykKKwkJICAwID0gL2Rldi9zZGFnCQkzM3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvc2RhaAkJMzR0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMzIgPSAvZGV2L3NkYWkJCTM1dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L3NkYXYJCTQ4bmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNjcgY2hhcglDb2RhIG5ldHdvcmsgZmlsZSBzeXN0ZW0KKwkJICAwID0gL2Rldi9jZnMwCQlDb2RhIGNhY2hlIG1hbmFnZXIKKworCQlTZWUgaHR0cDovL3d3dy5jb2RhLmNzLmNtdS5lZHUgZm9yIGluZm9ybWF0aW9uIGFib3V0IENvZGEuCisKKyA2NyBibG9jawlTQ1NJIGRpc2sgZGV2aWNlcyAoNDgtNjMpCisJCSAgMCA9IC9kZXYvc2RhdwkJNDl0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L3NkYXgJCTUwdGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9zZGF5CQk1MXN0IFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9zZGJsCQk2NHRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDY4IGNoYXIJQ0FQSSAyLjAgaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvY2FwaTIwCUNvbnRyb2wgZGV2aWNlCisJCSAgMSA9IC9kZXYvY2FwaTIwLjAwCUZpcnN0IENBUEkgMi4wIGFwcGxpY2F0aW9uCisJCSAgMiA9IC9kZXYvY2FwaTIwLjAxCVNlY29uZCBDQVBJIDIuMCBhcHBsaWNhdGlvbgorCQkgICAgLi4uCisJCSAyMCA9IC9kZXYvY2FwaTIwLjE5CTE5dGggQ0FQSSAyLjAgYXBwbGljYXRpb24KKworCQlJU0ROIENBUEkgMi4wIGRyaXZlciBmb3IgdXNlIHdpdGggQ0FQSSAyLjAKKwkJYXBwbGljYXRpb25zOyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIEFWTSBCMSBjYXJkLgorCisgNjggYmxvY2sJU0NTSSBkaXNrIGRldmljZXMgKDY0LTc5KQorCQkgIDAgPSAvZGV2L3NkYm0JCTY1dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZGJuCQk2NnRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAzMiA9IC9kZXYvc2RibwkJNjd0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvc2RjYgkJODB0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA2OSBjaGFyCU1BMTYgbnVtZXJpYyBhY2NlbGVyYXRvciBjYXJkCisJCSAgMCA9IC9kZXYvbWExNgkJQm9hcmQgbWVtb3J5IGFjY2VzcworCisgNjkgYmxvY2sJU0NTSSBkaXNrIGRldmljZXMgKDgwLTk1KQorCQkgIDAgPSAvZGV2L3NkY2MJCTgxc3QgU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9zZGNkCQk4Mm5kIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAzMiA9IC9kZXYvc2RjZQkJODN0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvc2RjcgkJOTZ0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA3MCBjaGFyCVNwZWxsQ2FzdGVyIFByb3RvY29sIFNlcnZpY2VzIEludGVyZmFjZQorCQkgIDAgPSAvZGV2L2Fwc2NmZwlDb25maWd1cmF0aW9uIGludGVyZmFjZQorCQkgIDEgPSAvZGV2L2Fwc2F1dGgJQXV0aGVudGljYXRpb24gaW50ZXJmYWNlCisJCSAgMiA9IC9kZXYvYXBzbG9nCUxvZ2dpbmcgaW50ZXJmYWNlCisJCSAgMyA9IC9kZXYvYXBzZGJnCURlYnVnZ2luZyBpbnRlcmZhY2UKKwkJIDY0ID0gL2Rldi9hcHNpc2RuCUlTRE4gY29tbWFuZCBpbnRlcmZhY2UKKwkJIDY1ID0gL2Rldi9hcHNhc3luYwlBc3luYyBjb21tYW5kIGludGVyZmFjZQorCQkxMjggPSAvZGV2L2Fwc21vbglNb25pdG9yIGludGVyZmFjZQorCisgNzAgYmxvY2sJU0NTSSBkaXNrIGRldmljZXMgKDk2LTExMSkKKwkJICAwID0gL2Rldi9zZGNzCQk5N3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvc2RjdAkJOTh0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgMzIgPSAvZGV2L3NkY3UJCTk5dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L3NkZGgJCTExMm5kIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDcxIGNoYXIJQ29tcHV0b25lIEludGVsbGlQb3J0IElJIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5RjAJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMCwgcG9ydCAwCisJCSAgMSA9IC9kZXYvdHR5RjEJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMCwgcG9ydCAxCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi90dHlGNjMJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMCwgcG9ydCA2MworCQkgNjQgPSAvZGV2L3R0eUY2NAlJbnRlbGxpUG9ydCBJSSBib2FyZCAxLCBwb3J0IDAKKwkJIDY1ID0gL2Rldi90dHlGNjUJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMSwgcG9ydCAxCisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi90dHlGMTI3CUludGVsbGlQb3J0IElJIGJvYXJkIDEsIHBvcnQgNjMKKwkJMTI4ID0gL2Rldi90dHlGMTI4CUludGVsbGlQb3J0IElJIGJvYXJkIDIsIHBvcnQgMAorCQkxMjkgPSAvZGV2L3R0eUYxMjkJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMiwgcG9ydCAxCisJCSAgICAuLi4KKwkJMTkxID0gL2Rldi90dHlGMTkxCUludGVsbGlQb3J0IElJIGJvYXJkIDIsIHBvcnQgNjMKKwkJMTkyID0gL2Rldi90dHlGMTkyCUludGVsbGlQb3J0IElJIGJvYXJkIDMsIHBvcnQgMAorCQkxOTMgPSAvZGV2L3R0eUYxOTMJSW50ZWxsaVBvcnQgSUkgYm9hcmQgMywgcG9ydCAxCisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi90dHlGMjU1CUludGVsbGlQb3J0IElJIGJvYXJkIDMsIHBvcnQgNjMKKworIDcxIGJsb2NrCVNDU0kgZGlzayBkZXZpY2VzICgxMTItMTI3KQorCQkgIDAgPSAvZGV2L3NkZGkJCTExM3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvc2RkagkJMTE0dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKwkJIDMyID0gL2Rldi9zZGRrCQkxMTV0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvc2RkeAkJMTI4dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNzIgY2hhcglDb21wdXRvbmUgSW50ZWxsaVBvcnQgSUkgc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1ZjAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGMAorCQkgIDEgPSAvZGV2L2N1ZjEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGMQorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvY3VmNjMJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUY2MworCQkgNjQgPSAvZGV2L2N1ZjY0CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGNjQKKwkJIDY1ID0gL2Rldi9jdWY2NQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjY1CisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi9jdWYxMjcJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUYxMjcKKwkJMTI4ID0gL2Rldi9jdWYxMjgJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUYxMjgKKwkJMTI5ID0gL2Rldi9jdWYxMjkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUYxMjkKKwkJICAgIC4uLgorCQkxOTEgPSAvZGV2L2N1ZjE5MQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjE5MQorCQkxOTIgPSAvZGV2L2N1ZjE5MglDYWxsb3V0IGRldmljZSBmb3IgdHR5RjE5MgorCQkxOTMgPSAvZGV2L2N1ZjE5MwlDYWxsb3V0IGRldmljZSBmb3IgdHR5RjE5MworCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvY3VmMjU1CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGMjU1CisKKyA3MiBibG9jawlDb21wYXEgSW50ZWxsaWdlbnQgRHJpdmUgQXJyYXksIGZpcnN0IGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9pZGEvYzBkMAlGaXJzdCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pZGEvYzBkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pZGEvYzBkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDczIGNoYXIJQ29tcHV0b25lIEludGVsbGlQb3J0IElJIHNlcmlhbCBjYXJkIC0gY29udHJvbCBkZXZpY2VzCisJCSAgMCA9IC9kZXYvaXAyaXBsMAlMb2Fkd2FyZSBkZXZpY2UgZm9yIGJvYXJkIDAKKwkJICAxID0gL2Rldi9pcDJzdGF0MAlTdGF0dXMgZGV2aWNlIGZvciBib2FyZCAwCisJCSAgNCA9IC9kZXYvaXAyaXBsMQlMb2Fkd2FyZSBkZXZpY2UgZm9yIGJvYXJkIDEKKwkJICA1ID0gL2Rldi9pcDJzdGF0MQlTdGF0dXMgZGV2aWNlIGZvciBib2FyZCAxCisJCSAgOCA9IC9kZXYvaXAyaXBsMglMb2Fkd2FyZSBkZXZpY2UgZm9yIGJvYXJkIDIKKwkJICA5ID0gL2Rldi9pcDJzdGF0MglTdGF0dXMgZGV2aWNlIGZvciBib2FyZCAyCisJCSAxMiA9IC9kZXYvaXAyaXBsMwlMb2Fkd2FyZSBkZXZpY2UgZm9yIGJvYXJkIDMKKwkJIDEzID0gL2Rldi9pcDJzdGF0MwlTdGF0dXMgZGV2aWNlIGZvciBib2FyZCAzCisKKyA3MyBibG9jawlDb21wYXEgSW50ZWxsaWdlbnQgRHJpdmUgQXJyYXksIHNlY29uZCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvaWRhL2MxZDAJRmlyc3QgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaWRhL2MxZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaWRhL2MxZDE1CTE2dGggbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA3NCBjaGFyCVNDSSBicmlkZ2UKKwkJICAwID0gL2Rldi9TQ0kvMAlTQ0kgZGV2aWNlIDAKKwkJICAxID0gL2Rldi9TQ0kvMQlTQ0kgZGV2aWNlIDEKKwkJICAgIC4uLgorCisJCUN1cnJlbnRseSBmb3IgRG9scGhpbiBJbnRlcmNvbm5lY3QgU29sdXRpb25zJyBQQ0ktU0NJCisJCWJyaWRnZS4KKworIDc0IGJsb2NrCUNvbXBhcSBJbnRlbGxpZ2VudCBEcml2ZSBBcnJheSwgdGhpcmQgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2lkYS9jMmQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2lkYS9jMmQxCVNlY29uZCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2lkYS9jMmQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNzUgY2hhcglTcGVjaWFsaXggSU84KyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eVcwCUZpcnN0IElPOCsgcG9ydCwgZmlyc3QgY2FyZAorCQkgIDEgPSAvZGV2L3R0eVcxCVNlY29uZCBJTzgrIHBvcnQsIGZpcnN0IGNhcmQKKwkJICAgIC4uLgorCQkgIDggPSAvZGV2L3R0eVc4CUZpcnN0IElPOCsgcG9ydCwgc2Vjb25kIGNhcmQKKwkJICAgIC4uLgorCisgNzUgYmxvY2sJQ29tcGFxIEludGVsbGlnZW50IERyaXZlIEFycmF5LCBmb3VydGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2lkYS9jM2QwCUZpcnN0IGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2lkYS9jM2QxCVNlY29uZCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2lkYS9jM2QxNQkxNnRoIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIGZvciBNeWxleAorCQlEQUM5NjAgKHNlZSBtYWpvciBudW1iZXIgNDgpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgNzYgY2hhcglTcGVjaWFsaXggSU84KyBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3V3MAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVcwCisJCSAgMSA9IC9kZXYvY3V3MQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVcxCisJCSAgICAuLi4KKwkJICA4ID0gL2Rldi9jdXc4CQlDYWxsb3V0IGRldmljZSBmb3IgdHR5VzgKKwkJICAgIC4uLgorCisgNzYgYmxvY2sJQ29tcGFxIEludGVsbGlnZW50IERyaXZlIEFycmF5LCBmaWZ0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvaWRhL2M0ZDAJRmlyc3QgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaWRhL2M0ZDEJU2Vjb25kIGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaWRhL2M0ZDE1CTE2dGggbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworIDc3IGNoYXIJQ29tU2NpcmUgUXVhbnR1bSBOb2lzZSBHZW5lcmF0b3IKKwkJICAwID0gL2Rldi9xbmcJCUNvbVNjaXJlIFF1YW50dW0gTm9pc2UgR2VuZXJhdG9yCisKKyA3NyBibG9jawlDb21wYXEgSW50ZWxsaWdlbnQgRHJpdmUgQXJyYXksIHNpeHRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9pZGEvYzVkMAlGaXJzdCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pZGEvYzVkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pZGEvYzVkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisgNzggY2hhcglQQU0gU29mdHdhcmUncyBtdWx0aW1vZGVtIGJvYXJkcworCQkgIDAgPSAvZGV2L3R0eU0wCUZpcnN0IFBBTSBtb2RlbQorCQkgIDEgPSAvZGV2L3R0eU0xCVNlY29uZCBQQU0gbW9kZW0KKwkJICAgIC4uLgorCisgNzggYmxvY2sJQ29tcGFxIEludGVsbGlnZW50IERyaXZlIEFycmF5LCBzZXZlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9pZGEvYzZkMAlGaXJzdCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pZGEvYzZkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pZGEvYzZkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCisgNzkgY2hhcglQQU0gU29mdHdhcmUncyBtdWx0aW1vZGVtIGJvYXJkcyAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VtMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eU0wCisJCSAgMSA9IC9kZXYvY3VtMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eU0xCisJCSAgICAuLi4KKworIDc5IGJsb2NrCUNvbXBhcSBJbnRlbGxpZ2VudCBEcml2ZSBBcnJheSwgZWlndGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L2lkYS9jN2QwCUZpcnN0IGxvZ2ljYWwgZHJpdmUgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2lkYS9jN2QxCVNlY29uZCBsb2dpY2FsIGRyaXZlIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2lkYS9jNzE1CTE2dGggbG9naWNhbCBkcml2ZSB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworIDgwIGNoYXIJUGhvdG9tZXRyaWNzIEFUMjAwIENDRCBjYW1lcmEKKwkJICAwID0gL2Rldi9hdDIwMAlQaG90b21ldHJpY3MgQVQyMDAgQ0NEIGNhbWVyYQorCisgODAgYmxvY2sJSTJPIGhhcmQgZGlzaworCQkgIDAgPSAvZGV2L2kyby9oZGEJRmlyc3QgSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZGIJU2Vjb25kIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2kyby9oZHAJMTZ0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDgxIGNoYXIJdmlkZW80bGludXgKKwkJICAwID0gL2Rldi92aWRlbzAJVmlkZW8gY2FwdHVyZS9vdmVybGF5IGRldmljZQorCQkgICAgLi4uCisJCSA2MyA9IC9kZXYvdmlkZW82MwlWaWRlbyBjYXB0dXJlL292ZXJsYXkgZGV2aWNlCisJCSA2NCA9IC9kZXYvcmFkaW8wCVJhZGlvIGRldmljZQorCQkgICAgLi4uCisJCTEyNyA9IC9kZXYvcmFkaW82MwlSYWRpbyBkZXZpY2UKKwkJMTkyID0gL2Rldi92dHgwCQlUZWxldGV4dCBkZXZpY2UKKwkJICAgIC4uLgorCQkyMjMgPSAvZGV2L3Z0eDMxCVRlbGV0ZXh0IGRldmljZQorCQkyMjQgPSAvZGV2L3ZiaTAJCVZlcnRpY2FsIGJsYW5rIGludGVycnVwdAorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvdmJpMzEJVmVydGljYWwgYmxhbmsgaW50ZXJydXB0CisKKyA4MSBibG9jawlJMk8gaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvaTJvL2hkcQkxN3RoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pMm8vaGRyCTE4dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaTJvL2hkYWYJMzJuZCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDgyIGNoYXIJV2lOUkFEaU8gY29tbXVuaWNhdGlvbnMgcmVjZWl2ZXIgY2FyZAorCQkgIDAgPSAvZGV2L3dpbnJhZGlvMAlGaXJzdCBXaU5SQURpTyBjYXJkCisJCSAgMSA9IC9kZXYvd2lucmFkaW8xCVNlY29uZCBXaU5SQURpTyBjYXJkCisJCSAgICAuLi4KKworCQlUaGUgZHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIG1heSBiZSBvYnRhaW5lZCBmcm9tCisJCWh0dHA6Ly93d3cucHJveGltaXR5LmNvbS5hdS9+YnJpYW4vd2lucmFkaW8vCisKKyA4MiBibG9jawlJMk8gaGFyZCBkaXNrCisJCSAgMCA9IC9kZXYvaTJvL2hkYWcJMzNyZCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvaTJvL2hkYWgJMzR0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pMm8vaGRhdgk0OHRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisgODMgY2hhcglNYXRyb3ggbWdhX3ZpZCB2aWRlbyBkcml2ZXIKKyAJCSAwID0gL2Rldi9tZ2FfdmlkMAkxc3QgdmlkZW8gY2FyZAorCQkgMSA9IC9kZXYvbWdhX3ZpZDEJMm5kIHZpZGVvIGNhcmQKKwkJIDIgPSAvZGV2L21nYV92aWQyCTNyZCB2aWRlbyBjYXJkCisJCSAgLi4uCisJICAgICAgICAxNSA9IC9kZXYvbWdhX3ZpZDE1CTE2dGggdmlkZW8gY2FyZAorCisgODMgYmxvY2sJSTJPIGhhcmQgZGlzaworCQkgIDAgPSAvZGV2L2kyby9oZGF3CTQ5dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZGF4CTUwdGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaTJvL2hkYmwJNjR0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDg0IGNoYXIJSWtvbiAxMDExWzU3XSBWZXJzYXRlYyBHcmVlbnNoZWV0IEludGVyZmFjZQorCQkgIDAgPSAvZGV2L2loY3AwCUZpcnN0IEdyZWVuc2hlZXQgcG9ydAorCQkgIDEgPSAvZGV2L2loY3AxCVNlY29uZCBHcmVlbnNoZWV0IHBvcnQKKworIDg0IGJsb2NrCUkyTyBoYXJkIGRpc2sKKwkJICAwID0gL2Rldi9pMm8vaGRibQk2NXRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pMm8vaGRibgk2NnRoIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2kyby9oZGNiCTgwdGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA4NSBjaGFyCUxpbnV4L1NHSSBzaGFyZWQgbWVtb3J5IGlucHV0IHF1ZXVlCisJCSAgMCA9IC9kZXYvc2htaXEJTWFzdGVyIHNoYXJlZCBpbnB1dCBxdWV1ZQorCQkgIDEgPSAvZGV2L3FjbnRsMAlGaXJzdCBkZXZpY2UgcHVzaGVkCisJCSAgMiA9IC9kZXYvcWNudGwxCVNlY29uZCBkZXZpY2UgcHVzaGVkCisJCSAgICAuLi4KKworIDg1IGJsb2NrCUkyTyBoYXJkIGRpc2sKKwkJICAwID0gL2Rldi9pMm8vaGRjYwk4MXN0IEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pMm8vaGRjZAk4Mm5kIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L2kyby9oZGNyCTk2dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA4NiBjaGFyCVNDU0kgbWVkaWEgY2hhbmdlcgorCQkgIDAgPSAvZGV2L3NjaDAJCUZpcnN0IFNDU0kgbWVkaWEgY2hhbmdlcgorCQkgIDEgPSAvZGV2L3NjaDEJCVNlY29uZCBTQ1NJIG1lZGlhIGNoYW5nZXIKKwkJICAgIC4uLgorCisgODYgYmxvY2sJSTJPIGhhcmQgZGlzaworCQkgIDAgPSAvZGV2L2kyby9oZGNzCTk3dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2kyby9oZGN0CTk4dGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvaTJvL2hkZGgJMTEydGggSTJPIGhhcmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA4NyBjaGFyCVNvbnkgQ29udHJvbC1BMSBzdGVyZW8gY29udHJvbCBidXMKKwkJICAwID0gL2Rldi9jb250cm9sYTAJRmlyc3QgZGV2aWNlIG9uIGNoYWluCisJCSAgMSA9IC9kZXYvY29udHJvbGExCVNlY29uZCBkZXZpY2Ugb24gY2hhaW4KKwkJICAgIC4uLgorCisgODcgYmxvY2sJSTJPIGhhcmQgZGlzaworCQkgIDAgPSAvZGV2L2kyby9oZGRpCTExM3JkIEkyTyBoYXJkIGRpc2ssIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9pMm8vaGRkagkxMTR0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pMm8vaGRkeAkxMjh0aCBJMk8gaGFyZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworIDg4IGNoYXIJQ09NWCBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L2NvbXgwCUNPTVggY2hhbm5lbCAwCisJCSAgMSA9IC9kZXYvY29teDEJQ09NWCBjaGFubmVsIDEKKwkJICAgIC4uLgorCisgODggYmxvY2sJU2V2ZW50aCBJREUgaGFyZCBkaXNrL0NELVJPTSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9oZG0JCU1hc3Rlcjogd2hvbGUgZGlzayAob3IgQ0QtUk9NKQorCQkgNjQgPSAvZGV2L2hkbgkJU2xhdmU6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIGZpcnN0CisJCWludGVyZmFjZSAoc2VlIG1ham9yIG51bWJlciAzKS4KKworIDg5IGNoYXIJSTJDIGJ1cyBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9pMmMtMAlGaXJzdCBJMkMgYWRhcHRlcgorCQkgIDEgPSAvZGV2L2kyYy0xCVNlY29uZCBJMkMgYWRhcHRlcgorCQkgICAgLi4uCisKKyA4OSBibG9jawlFaWdodGggSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRvCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZHAJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyA5MCBjaGFyCU1lbW9yeSBUZWNobm9sb2d5IERldmljZSAoUkFNLCBST00sIEZsYXNoKQorCQkgIDAgPSAvZGV2L210ZDAJCUZpcnN0IE1URCAocncpCisJCSAgMSA9IC9kZXYvbXRkcjAJRmlyc3QgTVREIChybykKKwkJICAgIC4uLgorCQkgMzAgPSAvZGV2L210ZDE1CTE2dGggTVREIChydykKKwkJIDMxID0gL2Rldi9tdGRyMTUJMTZ0aCBNVEQgKHJvKQorCisgOTAgYmxvY2sJTmludGggSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRxCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZHIJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyA5MSBjaGFyCUNBTi1CdXMgZGV2aWNlcworCQkgIDAgPSAvZGV2L2NhbjAJCUZpcnN0IENBTi1CdXMgY29udHJvbGxlcgorCQkgIDEgPSAvZGV2L2NhbjEJCVNlY29uZCBDQU4tQnVzIGNvbnRyb2xsZXIKKwkJICAgIC4uLgorCisgOTEgYmxvY2sJVGVudGggSURFIGhhcmQgZGlzay9DRC1ST00gaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvaGRzCQlNYXN0ZXI6IHdob2xlIGRpc2sgKG9yIENELVJPTSkKKwkJIDY0ID0gL2Rldi9oZHQJCVNsYXZlOiB3aG9sZSBkaXNrIChvciBDRC1ST00pCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIHRoZSBmaXJzdAorCQlpbnRlcmZhY2UgKHNlZSBtYWpvciBudW1iZXIgMykuCisKKyA5MiBjaGFyCVJlc2VydmVkIGZvciBpdGggS29tbXVuaWthdGlvbnN0ZWNobmlrIE1JQyBJU0ROIGNhcmQKKworIDkyIGJsb2NrCVBQREQgZW5jcnlwdGVkIGRpc2sgZHJpdmVyCisJCSAgMCA9IC9kZXYvcHBkZDAJRmlyc3QgZW5jcnlwdGVkIGRpc2sKKwkJICAxID0gL2Rldi9wcGRkMQlTZWNvbmQgZW5jcnlwdGVkIGRpc2sKKwkJICAgIC4uLgorCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKyA5MyBjaGFyCUlCTSBTbWFydCBDYXB0dXJlIENhcmQgZnJhbWUgZ3JhYmJlciB7Mi42fQorCQkgIDAgPSAvZGV2L2lzY2MwCUZpcnN0IFNtYXJ0IENhcHR1cmUgQ2FyZAorCQkgIDEgPSAvZGV2L2lzY2MxCVNlY29uZCBTbWFydCBDYXB0dXJlIENhcmQKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L2lzY2NjdGwwCUZpcnN0IFNtYXJ0IENhcHR1cmUgQ2FyZCBjb250cm9sCisJCTEyOSA9IC9kZXYvaXNjY2N0bDEJU2Vjb25kIFNtYXJ0IENhcHR1cmUgQ2FyZCBjb250cm9sCisJCSAgICAuLi4KKworIDkzIGJsb2NrCU5BTkQgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIgZmlsZXN5c3RlbQorCQkgIDAgPSAvZGV2L25mdGxhCUZpcnN0IE5GVEwgbGF5ZXIKKwkJIDE2ID0gL2Rldi9uZnRsYglTZWNvbmQgTkZUTCBsYXllcgorCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvbmZ0bHAJMTZ0aCBOVEZMIGxheWVyCisKKyA5NCBjaGFyCW1pcm9WSURFTyBEQzEwLzMwIGNhcHR1cmUvcGxheWJhY2sgZGV2aWNlIHsyLjZ9CisJCSAgMCA9IC9kZXYvZGN4eDAJRmlyc3QgY2FwdHVyZSBjYXJkCisJCSAgMSA9IC9kZXYvZGN4eDEJU2Vjb25kIGNhcHR1cmUgY2FyZAorCQkgICAgLi4uCisKKyA5NCBibG9jayBJQk0gUy8zOTAgREFTRCBibG9jayBzdG9yYWdlCisgICAgCQkgIDAgPSAvZGV2L2Rhc2RhIEZpcnN0IERBU0QgZGV2aWNlLCBtYWpvcgorICAgIAkJICAxID0gL2Rldi9kYXNkYTEgRmlyc3QgREFTRCBkZXZpY2UsIGJsb2NrIDEKKwkgICAgCSAgMiA9IC9kZXYvZGFzZGEyIEZpcnN0IERBU0QgZGV2aWNlLCBibG9jayAyCisgICAgCQkgIDMgPSAvZGV2L2Rhc2RhMyBGaXJzdCBEQVNEIGRldmljZSwgYmxvY2sgMworICAgIAkJICA0ID0gL2Rldi9kYXNkYiBTZWNvbmQgREFTRCBkZXZpY2UsIG1ham9yCisgICAgCQkgIDUgPSAvZGV2L2Rhc2RiMSBTZWNvbmQgREFTRCBkZXZpY2UsIGJsb2NrIDEKKyAgICAJCSAgNiA9IC9kZXYvZGFzZGIyIFNlY29uZCBEQVNEIGRldmljZSwgYmxvY2sgMgorICAgIAkJICA3ID0gL2Rldi9kYXNkYjMgU2Vjb25kIERBU0QgZGV2aWNlLCBibG9jayAzCisJCSAgICAuLi4KKworIDk1IGNoYXIJSVAgZmlsdGVyCisJCSAgMCA9IC9kZXYvaXBsCQlGaWx0ZXIgY29udHJvbCBkZXZpY2UvbG9nIGZpbGUKKwkJICAxID0gL2Rldi9pcG5hdAlOQVQgY29udHJvbCBkZXZpY2UvbG9nIGZpbGUKKwkJICAyID0gL2Rldi9pcHN0YXRlCVN0YXRlIGluZm9ybWF0aW9uIGxvZyBmaWxlCisJCSAgMyA9IC9kZXYvaXBhdXRoCUF1dGhlbnRpY2F0aW9uIGNvbnRyb2wgZGV2aWNlL2xvZyBmaWxlCisJCSAgICAuLi4JCQorCisgOTYgY2hhcglQYXJhbGxlbCBwb3J0IEFUQVBJIHRhcGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L3B0MAkJRmlyc3QgcGFyYWxsZWwgcG9ydCBBVEFQSSB0YXBlCisJCSAgMSA9IC9kZXYvcHQxCQlTZWNvbmQgcGFyYWxsZWwgcG9ydCBBVEFQSSB0YXBlCisJCSAgICAuLi4KKwkJMTI4ID0gL2Rldi9ucHQwCQlGaXJzdCBwLnAuIEFUQVBJIHRhcGUsIG5vIHJld2luZAorCQkxMjkgPSAvZGV2L25wdDEJCVNlY29uZCBwLnAuIEFUQVBJIHRhcGUsIG5vIHJld2luZAorCQkgICAgLi4uCisKKyA5NiBibG9jayBJbnZlcnNlIE5BTkQgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIKKwkJICAwID0gL2Rldi9pbmZ0bGEgRmlyc3QgSU5GVEwgbGF5ZXIKKwkJIDE2ID0gL2Rldi9pbmZ0bGIgU2Vjb25kIElORlRMIGxheWVyCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9pbmZ0bHAJMTZ0aCBJTlRGTCBsYXllcgorCisgOTcgY2hhcglQYXJhbGxlbCBwb3J0IGdlbmVyaWMgQVRBUEkgaW50ZXJmYWNlCisJCSAgMCA9IC9kZXYvcGcwCQlGaXJzdCBwYXJhbGxlbCBwb3J0IEFUQVBJIGRldmljZQorCQkgIDEgPSAvZGV2L3BnMQkJU2Vjb25kIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGV2aWNlCisJCSAgMiA9IC9kZXYvcGcyCQlUaGlyZCBwYXJhbGxlbCBwb3J0IEFUQVBJIGRldmljZQorCQkgIDMgPSAvZGV2L3BnMwkJRm91cnRoIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGV2aWNlCisKKwkJVGhlc2UgZGV2aWNlcyBzdXBwb3J0IHRoZSBzYW1lIEFQSSBhcyB0aGUgZ2VuZXJpYyBTQ1NJCisJCWRldmljZXMuCisKKyA5NyBibG9jawlQYWNrZXQgd3JpdGluZyBmb3IgQ0QvRFZEIGRldmljZXMKKwkJICAwID0gL2Rldi9wa3RjZHZkMAlGaXJzdCBwYWNrZXQtd3JpdGluZyBtb2R1bGUKKwkJICAxID0gL2Rldi9wa3RjZHZkMQlTZWNvbmQgcGFja2V0LXdyaXRpbmcgbW9kdWxlCisJCSAgICAuLi4KKworIDk4IGNoYXIJQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIChjb21lZGkpCisJCSAgMCA9IC9kZXYvY29tZWRpMAlGaXJzdCBjb21lZGkgZGV2aWNlCisJCSAgMSA9IC9kZXYvY29tZWRpMQlTZWNvbmQgY29tZWRpIGRldmljZQorCQkgICAgLi4uCisKKwkJU2VlIGh0dHA6Ly9zdG0ubGJsLmdvdi9jb21lZGkgb3IgaHR0cDovL3d3dy5sbHAuZnUtYmVybGluLmRlLy4KKworIDk4IGJsb2NrCVVzZXItbW9kZSB2aXJ0dWFsIGJsb2NrIGRldmljZQorCQkgIDAgPSAvZGV2L3ViZGEJCUZpcnN0IHVzZXItbW9kZSBibG9jayBkZXZpY2UKKwkJIDE2ID0gL2Rldi91ZGJiCQlTZWNvbmQgdXNlci1tb2RlIGJsb2NrIGRldmljZQorCQkgICAgLi4uCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworCQlUaGlzIGRldmljZSBpcyB1c2VkIGJ5IHRoZSB1c2VyLW1vZGUgdmlydHVhbCBrZXJuZWwgcG9ydC4KKworIDk5IGNoYXIJUmF3IHBhcmFsbGVsIHBvcnRzCisJCSAgMCA9IC9kZXYvcGFycG9ydDAJRmlyc3QgcGFyYWxsZWwgcG9ydAorCQkgIDEgPSAvZGV2L3BhcnBvcnQxCVNlY29uZCBwYXJhbGxlbCBwb3J0CisJCSAgICAuLi4KKworIDk5IGJsb2NrCUphdmFTdGF0aW9uIGZsYXNoIGRpc2sKKwkJICAwID0gL2Rldi9qc2ZkCQlKYXZhU3RhdGlvbiBmbGFzaCBkaXNrCisKKzEwMCBjaGFyCVRlbGVwaG9ueSBmb3IgTGludXgKKwkJICAwID0gL2Rldi9waG9uZTAJRmlyc3QgdGVsZXBob255IGRldmljZQorCQkgIDEgPSAvZGV2L3Bob25lMQlTZWNvbmQgdGVsZXBob255IGRldmljZQorCQkgICAgLi4uCisKKzEwMSBjaGFyCU1vdG9yb2xhIERTUCA1Nnh4eCBib2FyZAorCQkgIDAgPSAvZGV2L21kc3BzdGF0CVN0YXR1cyBpbmZvcm1hdGlvbgorCQkgIDEgPSAvZGV2L21kc3AxCUZpcnN0IERTUCBib2FyZCBJL08gY29udHJvbHMKKwkJICAgIC4uLgorCQkgMTYgPSAvZGV2L21kc3AxNgkxNnRoIERTUCBib2FyZCBJL08gY29udHJvbHMKKworMTAxIGJsb2NrCUFNSSBIeXBlckRpc2sgUkFJRCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvYW1pcmFpZC9hcjAJRmlyc3QgYXJyYXkgd2hvbGUgZGlzaworCQkgMTYgPSAvZGV2L2FtaXJhaWQvYXIxCVNlY29uZCBhcnJheSB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9hbWlyYWlkL2FyMTUJMTZ0aCBhcnJheSB3aG9sZSBkaXNrCisKKwkJRm9yIGVhY2ggZGV2aWNlLCBwYXJ0aXRpb25zIGFyZSBhZGRlZCBhczoKKwkJICAwID0gL2Rldi9hbWlyYWlkL2FyPwkgIFdob2xlIGRpc2sKKwkJICAxID0gL2Rldi9hbWlyYWlkL2FyP3AxICBGaXJzdCBwYXJ0aXRpb24KKwkJICAyID0gL2Rldi9hbWlyYWlkL2FyP3AyICBTZWNvbmQgcGFydGl0aW9uCisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi9hbWlyYWlkL2FyP3AxNSAxNXRoIHBhcnRpdGlvbgorCisxMDIgY2hhcglQaGlsaXBzIFNBQTUyNDkgVGVsZXRleHQgc2lnbmFsIGRlY29kZXIgezIuNn0KKwkJICAwID0gL2Rldi90bGswCQlGaXJzdCBUZWxldGV4dCBkZWNvZGVyCisJCSAgMSA9IC9kZXYvdGxrMQkJU2Vjb25kIFRlbGV0ZXh0IGRlY29kZXIKKwkJICAyID0gL2Rldi90bGsyCQlUaGlyZCBUZWxldGV4dCBkZWNvZGVyCisJCSAgMyA9IC9kZXYvdGxrMwkJRm91cnRoIFRlbGV0ZXh0IGRlY29kZXIKKworMTAyIGJsb2NrCUNvbXByZXNzZWQgYmxvY2sgZGV2aWNlCisJCSAgMCA9IC9kZXYvY2JkL2EJRmlyc3QgY29tcHJlc3NlZCBibG9jayBkZXZpY2UsIHdob2xlIGRldmljZQorCQkgMTYgPSAvZGV2L2NiZC9iCVNlY29uZCBjb21wcmVzc2VkIGJsb2NrIGRldmljZSwgd2hvbGUgZGV2aWNlCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jYmQvcAkxNnRoIGNvbXByZXNzZWQgYmxvY2sgZGV2aWNlLCB3aG9sZSBkZXZpY2UKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDE1LgorCisxMDMgY2hhcglBcmxhIG5ldHdvcmsgZmlsZSBzeXN0ZW0KKwkJICAwID0gL2Rldi9ubnBmczAJRmlyc3QgTk5QRlMgZGV2aWNlCisJCSAgMSA9IC9kZXYvbm5wZnMxCVNlY29uZCBOTlBGUyBkZXZpY2UKKworCQlBcmxhIGlzIGEgZnJlZSBjbG9uZSBvZiB0aGUgQW5kcmV3IEZpbGUgU3lzdGVtLCBBRlMuCisJCVRoZSBOTlBGUyBkZXZpY2UgZ2l2ZXMgdXNlciBtb2RlIGZpbGVzeXN0ZW0KKwkJaW1wbGVtZW50YXRpb25zIGEga2VybmVsIHByZXNlbmNlIGZvciBjYWNoaW5nIGFuZCBlYXN5CisJCW1vdW50aW5nLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QsCisJCXdyaXRlIHRvIDxhcmxhLWRyaW5rZXJzQHN0YWNrZW4ua3RoLnNlPiBvciBzZWUKKwkJaHR0cDovL3d3dy5zdGFja2VuLmt0aC5zZS9wcm9qZWN0L2FybGEvCisKKzEwMyBibG9jawlBdWRpdCBkZXZpY2UKKwkJICAwID0gL2Rldi9hdWRpdAlBdWRpdCBkZXZpY2UKKworMTA0IGNoYXIJRmxhc2ggQklPUyBzdXBwb3J0CisKKzEwNCBibG9jawlDb21wYXEgTmV4dCBHZW5lcmF0aW9uIERyaXZlIEFycmF5LCBmaXJzdCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvY2Npc3MvYzBkMAlGaXJzdCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvY2Npc3MvYzBkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvY2Npc3MvYzBkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKzEwNSBjaGFyCUNvbXRyb2wgVlMtMTAwMCBzZXJpYWwgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3R0eVYwCUZpcnN0IFZTLTEwMDAgcG9ydAorCQkgIDEgPSAvZGV2L3R0eVYxCVNlY29uZCBWUy0xMDAwIHBvcnQKKwkJICAgIC4uLgorCisxMDUgYmxvY2sJQ29tcGFxIE5leHQgR2VuZXJhdGlvbiBEcml2ZSBBcnJheSwgc2Vjb25kIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jMWQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jMWQxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jMWQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTA2IGNoYXIJQ29tdHJvbCBWUy0xMDAwIHNlcmlhbCBjb250cm9sbGVyIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXYwCQlGaXJzdCBWUy0xMDAwIHBvcnQKKwkJICAxID0gL2Rldi9jdXYxCQlTZWNvbmQgVlMtMTAwMCBwb3J0CisJCSAgICAuLi4KKworMTA2IGJsb2NrCUNvbXBhcSBOZXh0IEdlbmVyYXRpb24gRHJpdmUgQXJyYXksIHRoaXJkIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jMmQwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jMmQxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jMmQxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTA3IGNoYXIJM0RmeCBWb29kb28gR3JhcGhpY3MgZGV2aWNlCisJCSAgMCA9IC9kZXYvM2RmeAkJUHJpbWFyeSAzRGZ4IGdyYXBoaWNzIGRldmljZQorCisxMDcgYmxvY2sJQ29tcGFxIE5leHQgR2VuZXJhdGlvbiBEcml2ZSBBcnJheSwgZm91cnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jM2QwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jM2QxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jM2QxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTA4IGNoYXIJRGV2aWNlIGluZGVwZW5kZW50IFBQUCBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9wcHAJCURldmljZSBpbmRlcGVuZGVudCBQUFAgaW50ZXJmYWNlCisKKzEwOCBibG9jawlDb21wYXEgTmV4dCBHZW5lcmF0aW9uIERyaXZlIEFycmF5LCBmaWZ0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvY2Npc3MvYzRkMAlGaXJzdCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvY2Npc3MvYzRkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvY2Npc3MvYzRkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKzEwOSBjaGFyCVJlc2VydmVkIGZvciBsb2dpY2FsIHZvbHVtZSBtYW5hZ2VyCisKKzEwOSBibG9jawlDb21wYXEgTmV4dCBHZW5lcmF0aW9uIERyaXZlIEFycmF5LCBzaXh0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvY2Npc3MvYzVkMAlGaXJzdCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvY2Npc3MvYzVkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvY2Npc3MvYzVkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKzExMCBjaGFyCW1pcm9NRURJQSBTdXJyb3VuZCBib2FyZAorCQkgIDAgPSAvZGV2L3NybmQwCUZpcnN0IG1pcm9NRURJQSBTdXJyb3VuZCBib2FyZAorCQkgIDEgPSAvZGV2L3NybmQxCVNlY29uZCBtaXJvTUVESUEgU3Vycm91bmQgYm9hcmQKKwkJICAgIC4uLgorCisxMTAgYmxvY2sJQ29tcGFxIE5leHQgR2VuZXJhdGlvbiBEcml2ZSBBcnJheSwgc2V2ZW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvY2Npc3MvYzZkMAlGaXJzdCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAxNiA9IC9kZXYvY2Npc3MvYzZkMQlTZWNvbmQgbG9naWNhbCBkcml2ZSwgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvY2Npc3MvYzZkMTUJMTZ0aCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgZm9yIE15bGV4CisJCURBQzk2MCAoc2VlIG1ham9yIG51bWJlciA0OCkgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKzExMSBjaGFyCVBoaWxpcHMgU0FBNzE0Ni1iYXNlZCBhdWRpby92aWRlbyBjYXJkIHsyLjZ9CisJCSAgMCA9IC9kZXYvYXYwCQlGaXJzdCBBL1YgY2FyZAorCQkgIDEgPSAvZGV2L2F2MQkJU2Vjb25kIEEvViBjYXJkCisJCSAgICAuLi4KKworMTExIGJsb2NrCUNvbXBhcSBOZXh0IEdlbmVyYXRpb24gRHJpdmUgQXJyYXksIGVpZ3RoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9jY2lzcy9jN2QwCUZpcnN0IGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKwkJIDE2ID0gL2Rldi9jY2lzcy9jN2QxCVNlY29uZCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQwID0gL2Rldi9jY2lzcy9jN2QxNQkxNnRoIGxvZ2ljYWwgZHJpdmUsIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBmb3IgTXlsZXgKKwkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTEyIGNoYXIJSVNJIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5TTAJRmlyc3QgSVNJIHBvcnQKKwkJICAxID0gL2Rldi90dHlNMQlTZWNvbmQgSVNJIHBvcnQKKwkJICAgIC4uLgorCisJCVRoZXJlIGlzIGN1cnJlbnRseSBhIGRldmljZS1uYW1pbmcgY29uZmxpY3QgYmV0d2VlbgorCQl0aGVzZSBhbmQgUEFNIG11bHRpbW9kZW1zIChtYWpvciA3OCkuCisKKzExMiBibG9jawlJQk0gaVNlcmllcyB2aXJ0dWFsIGRpc2sKKwkJICAwID0gL2Rldi9pc2VyaWVzL3ZkYQlGaXJzdCB2aXJ0dWFsIGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9pc2VyaWVzL3ZkYglTZWNvbmQgdmlydHVhbCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjAwID0gL2Rldi9pc2VyaWVzL3ZkegkyNnRoIHZpcnR1YWwgZGlzaywgd2hvbGUgZGlzaworCQkyMDggPSAvZGV2L2lzZXJpZXMvdmRhYQkyN3RoIHZpcnR1YWwgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvaXNlcmllcy92ZGFmCTMybmQgdmlydHVhbCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyA3LgorCisxMTMgY2hhcglJU0kgc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1bTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlNMAorCQkgIDEgPSAvZGV2L2N1bTEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlNMQorCQkgICAgLi4uCisKKzExMyBibG9jawlJQk0gaVNlcmllcyB2aXJ0dWFsIENELVJPTQorCisJCSAgMCA9IC9kZXYvaXNlcmllcy92Y2RhCUZpcnN0IHZpcnR1YWwgQ0QtUk9NCisJCSAgMSA9IC9kZXYvaXNlcmllcy92Y2RiCVNlY29uZCB2aXJ0dWFsIENELVJPTQorCQkgICAgLi4uCisKKzExNCBjaGFyCVBpY3R1cmUgRWxlbWVudHMgSVNFIGJvYXJkCisJCSAgMCA9IC9kZXYvaXNlMAkJRmlyc3QgSVNFIGJvYXJkCisJCSAgMSA9IC9kZXYvaXNlMQkJU2Vjb25kIElTRSBib2FyZAorCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvaXNleDAJQ29udHJvbCBub2RlIGZvciBmaXJzdCBJU0UgYm9hcmQKKwkJMTI5ID0gL2Rldi9pc2V4MQlDb250cm9sIG5vZGUgZm9yIHNlY29uZCBJU0UgYm9hcmQKKwkJICAgIC4uLgorCisJCVRoZSBJU0UgYm9hcmQgaXMgYW4gZW1iZWRkZWQgY29tcHV0ZXIsIG9wdGltaXplZCBmb3IKKwkJaW1hZ2UgcHJvY2Vzc2luZy4gVGhlIC9kZXYvaXNlTiBub2RlcyBhcmUgdGhlIGdlbmVyYWwKKwkJSS9PIGFjY2VzcyB0byB0aGUgYm9hcmQsIHRoZSAvZGV2L2lzZXgwIG5vZGVzIGNvbW1hbmQKKwkJbm9kZXMgdXNlZCB0byBjb250cm9sIHRoZSBib2FyZC4KKworMTE0IGJsb2NrICAgICAgIElERSBCSU9TIHBvd2VyZWQgc29mdHdhcmUgUkFJRCBpbnRlcmZhY2VzIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICAgICAgUHJvbWlzZSBGYXN0cmFrCisKKyAgICAgICAgICAgICAgICAgIDAgPSAvZGV2L2F0YXJhaWQvZDAKKyAgICAgICAgICAgICAgICAgIDEgPSAvZGV2L2F0YXJhaWQvZDBwMQorICAgICAgICAgICAgICAgICAgMiA9IC9kZXYvYXRhcmFpZC9kMHAyCisgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L2F0YXJhaWQvZDEKKyAgICAgICAgICAgICAgICAgMTcgPSAvZGV2L2F0YXJhaWQvZDFwMQorICAgICAgICAgICAgICAgICAxOCA9IC9kZXYvYXRhcmFpZC9kMXAyCisgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNTUgPSAvZGV2L2F0YXJhaWQvZDE1cDE1CisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTE1IGNoYXIJVEkgbGluayBjYWJsZSBkZXZpY2VzICgxMTUgd2FzIGZvcm1lcmx5IHRoZSBjb25zb2xlIGRyaXZlciBzcGVha2VyKQorCQkgIDAgPSAvZGV2L3RpcGFyMCAgICBQYXJhbGxlbCBjYWJsZSBvbiBmaXJzdCBwYXJhbGxlbCBwb3J0CisJCSAgLi4uCisJCSAgNyA9IC9kZXYvdGlwYXI3ICAgIFBhcmFsbGVsIGNhYmxlIG9uIHNldmVudGggcGFyYWxsZWwgcG9ydAorCisJCSAgOCA9IC9kZXYvdGlzZXIwICAgIFNlcmlhbCBjYWJsZSBvbiBmaXJzdCBzZXJpYWwgcG9ydAorCQkgIC4uLgorCQkgMTUgPSAvZGV2L3Rpc2VyNyAgICBTZXJpYWwgY2FibGUgb24gc2V2ZW50aCBzZXJpYWwgcG9ydAorCisJCSAxNiA9IC9kZXYvdGl1c2IwICAgIEZpcnN0IFVTQiBjYWJsZQorCQkgIC4uLgorCQkgNDcgPSAvZGV2L3RpdXNiMzEgICAzMm5kIFVTQiBjYWJsZQorCisxMTUgYmxvY2sgICAgICAgTmV0V2FyZSAoTldGUykgRGV2aWNlcyAoMC0yNTUpCisKKyAgICAgICAgICAgICAgICBUaGUgTldGUyAoTmV0V2FyZSkgZGV2aWNlcyBhcmUgdXNlZCB0byBwcmVzZW50IGEKKyAgICAgICAgICAgICAgICBjb2xsZWN0aW9uIG9mIE5ldFdhcmUgTWlycm9yIEdyb3VwcyBvciBOZXRXYXJlCisgICAgICAgICAgICAgICAgUGFydGl0aW9ucyBhcyBhIGxvZ2ljYWwgc3RvcmFnZSBzZWdtZW50IGZvcgorICAgICAgICAgICAgICAgIHVzZSBpbiBtb3VudGluZyBOZXRXYXJlIHZvbHVtZXMuICBBIG1heGltdW0gb2YKKyAgICAgICAgICAgICAgICAyNTYgTmV0V2FyZSB2b2x1bWVzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICBtYWNoaW5lLgorCisgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2ptZXJrZXkvbndmcworCisgICAgICAgICAgICAgICAgMCA9IC9kZXYvbndmcy92MCAgICBGaXJzdCBOZXRXYXJlIChOV0ZTKSBMb2dpY2FsIFZvbHVtZQorICAgICAgICAgICAgICAgIDEgPSAvZGV2L253ZnMvdjEgICAgU2Vjb25kIE5ldFdhcmUgKE5XRlMpIExvZ2ljYWwgVm9sdW1lCisgICAgICAgICAgICAgICAgMiA9IC9kZXYvbndmcy92MiAgICBUaGlyZCBOZXRXYXJlIChOV0ZTKSBMb2dpY2FsIFZvbHVtZQorICAgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI1NSA9IC9kZXYvbndmcy92MjU1ICAgIExhc3QgTmV0V2FyZSAoTldGUykgTG9naWNhbCBWb2x1bWUKKworMTE2IGNoYXIJQWR2YW5jZWQgTGludXggU291bmQgRHJpdmVyIChBTFNBKQorCisxMTYgYmxvY2sgICAgICAgTWljcm9NZW1vcnkgYmF0dGVyeSBiYWNrZWQgUkFNIGFkYXB0ZXIgKE5WUkFNKQorICAgICAgICAgICAgICAgIFN1cHBvcnRzIDE2IGJvYXJkcywgMTUgcGFyaXRpb25zIGVhY2guCisgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGJ5IG5laWxiIGF0IGNzZS51bnN3LmVkdS5hdS4KKworCQkgMCA9IC9kZXYvdW1lbS9kMCAgICAgIFdob2xlIG9mIGZpcnN0IGJvYXJkCisJCSAxID0gL2Rldi91bWVtL2QwcDEgICAgRmlyc3QgcGFydGl0aW9uIG9mIGZpcnN0IGJvYXJkCisJCSAyID0gL2Rldi91bWVtL2QwcDIgICAgU2Vjb25kIHBhcnRpdGlvbiBvZiBmaXJzdCBib2FyZAorCQkxNSA9IC9kZXYvdW1lbS9kMHAxNSAgIDE1dGggcGFydGl0aW9uIG9mIGZpcnN0IGJvYXJkCisKKwkJMTYgPSAvZGV2L3VtZW0vZDEgICAgICBXaG9sZSBvZiBzZWNvbmQgYm9hcmQKKwkJMTcgPSAvZGV2L3VtZW0vZDFwMSAgICBGaXJzdCBwYXJ0aXRpb24gb2Ygc2Vjb25kIGJvYXJkCisJCSAgICAuLi4KKwkJMjU1PSAvZGV2L3VtZW0vZDE1cDE1ICAxNXRoIHBhcnRpdGlvbiBvZiAxNnRoIGJvYXJkLgorCisxMTcgY2hhcglDT1NBL1NSUCBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L2Nvc2EwYzAJMXN0IGJvYXJkLCAxc3QgY2hhbm5lbAorCQkgIDEgPSAvZGV2L2Nvc2EwYzEJMXN0IGJvYXJkLCAybmQgY2hhbm5lbAorCQkgICAgLi4uCisJCSAxNiA9IC9kZXYvY29zYTFjMAkybmQgYm9hcmQsIDFzdCBjaGFubmVsCisJCSAxNyA9IC9kZXYvY29zYTFjMQkybmQgYm9hcmQsIDJuZCBjaGFubmVsCisJCSAgICAuLi4KKworMTE3IGJsb2NrICAgICAgIEVudGVycHJpc2UgVm9sdW1lIE1hbmFnZW1lbnQgU3lzdGVtIChFVk1TKQorCisgICAgICAgICAgICAgICAgVGhlIEVWTVMgZHJpdmVyIHVzZXMgYSBsYXllcmVkLCBwbHVnLWluIG1vZGVsIHRvIHByb3ZpZGUKKyAgICAgICAgICAgICAgICB1bnBhcmFsbGVsZWQgZmxleGliaWxpdHkgYW5kIGV4dGVuc2liaWxpdHkgaW4gbWFuYWdpbmcKKyAgICAgICAgICAgICAgICBzdG9yYWdlLiAgVGhpcyBhbGxvd3MgZm9yIGVhc3kgZXhwYW5zaW9uIG9yIGN1c3RvbWl6YXRpb24KKyAgICAgICAgICAgICAgICBvZiB2YXJpb3VzIGxldmVscyBvZiB2b2x1bWUgbWFuYWdlbWVudC4gIFJlcXVlc3RlZCBieQorICAgICAgICAgICAgICAgIE1hcmsgUGVsb3F1aW4gKHBlbG9xdWluIGF0IHVzLmlibS5jb20pLgorCisgICAgICAgICAgICAgICAgTm90ZTogRVZNUyBwb3B1bGF0ZXMgYW5kIG1hbmFnZXMgYWxsIHRoZSBkZXZub2RlcyBpbgorICAgICAgICAgICAgICAgIC9kZXYvZXZtcy4KKworICAgICAgICAgICAgICAgIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZXZtcworCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9ldm1zL2Jsb2NrX2RldmljZSAgIEVWTVMgYmxvY2sgZGV2aWNlCisgICAgICAgICAgICAgICAgICAxID0gL2Rldi9ldm1zL2xlZ2FjeW5hbWUxICAgIEZpcnN0IEVWTVMgbGVnYWN5IGRldmljZQorICAgICAgICAgICAgICAgICAgMiA9IC9kZXYvZXZtcy9sZWdhY3luYW1lMiAgICBTZWNvbmQgRVZNUyBsZWdhY3kgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICBCb3RoIHJhbmdlcyBjYW4gZ3JvdyAoZG93biBvciB1cCkgdW50aWwgdGhleSBtZWV0LgorICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNTQgPSAvZGV2L2V2bXMvRVZNU25hbWUyICAgICAgU2Vjb25kIEVWTVMgbmF0aXZlIGRldmljZQorICAgICAgICAgICAgICAgIDI1NSA9IC9kZXYvZXZtcy9FVk1TbmFtZTEgICAgICBGaXJzdCBFVk1TIG5hdGl2ZSBkZXZpY2UKKworICAgICAgICAgICAgICAgIE5vdGU6IGxlZ2FjeW5hbWUocykgYXJlIGRlcml2ZWQgZnJvbSB0aGUgbm9ybWFsIGxlZ2FjeQorICAgICAgICAgICAgICAgIGRldmljZSBuYW1lcy4gIEZvciBleGFtcGxlLCAvZGV2L2hkYTUgd291bGQgYmVjb21lCisgICAgICAgICAgICAgICAgL2Rldi9ldm1zL2hkYTUuCisKKzExOCBjaGFyCUlCTSBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yCisJCSAgMCA9IC9kZXYvaWNhCVZpcnR1YWwgaW50ZXJmYWNlIHRvIGFsbCBJQk0gQ3J5cHRvIEFjY2VsZXJhdG9ycworCQkgIDEgPSAvZGV2L2ljYTAJSUJNQ0EgRGV2aWNlIDAKKwkJICAyID0gL2Rldi9pY2ExCUlCTUNBIERldmljZSAxCisJCSAgICAuLi4KKworMTE5IGNoYXIJVk13YXJlIHZpcnR1YWwgbmV0d29yayBjb250cm9sCisJCSAgMCA9IC9kZXYvdm5ldDAJMXN0IHZpcnR1YWwgbmV0d29yaworCQkgIDEgPSAvZGV2L3ZuZXQxCTJuZCB2aXJ0dWFsIG5ldHdvcmsKKwkJICAgIC4uLgorCisxMjAtMTI3IGNoYXIJTE9DQUwvRVhQRVJJTUVOVEFMIFVTRQorMTIwLTEyNyBibG9jawlMT0NBTC9FWFBFUklNRU5UQUwgVVNFCisJCUFsbG9jYXRlZCBmb3IgbG9jYWwvZXhwZXJpbWVudGFsIHVzZS4gIEZvciBkZXZpY2VzIG5vdAorCQlhc3NpZ25lZCBvZmZpY2lhbCBudW1iZXJzLCB0aGVzZSByYW5nZXMgc2hvdWxkIGJlCisJCXVzZWQgaW4gb3JkZXIgdG8gYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCBmdXR1cmUgYXNzaWdubWVudHMuCisKKzEyOC0xMzUgY2hhcglVbml4OTggUFRZIG1hc3RlcnMKKworCQlUaGVzZSBkZXZpY2VzIHNob3VsZCBub3QgaGF2ZSBjb3JyZXNwb25kaW5nIGRldmljZQorCQlub2RlczsgaW5zdGVhZCB0aGV5IHNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZQorCQkvZGV2L3B0bXggY2xvbmluZyBpbnRlcmZhY2UuCisKKworMTI4IGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgxMjgtMTQzKQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RkeSAgICAgICAgIDEyOXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGR6ICAgICAgICAgMTMwdGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkZWEgICAgICAgICAxMzF0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkZW4gICAgICAgICAxNDR0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworMTI5IGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgxNDQtMTU5KQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RlbyAgICAgICAgIDE0NXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGVwICAgICAgICAgMTQ2dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkZXEgICAgICAgICAxNDd0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkZmQgICAgICAgICAxNjB0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKzEzMCBjaGFyIAkoTWlzYyBkZXZpY2VzKQorCisxMzAgYmxvY2sgICAgICAgU0NTSSBkaXNrIGRldmljZXMgKDE2MC0xNzUpCisgICAgICAgICAgICAgICAgICAwID0gL2Rldi9zZGZlICAgICAgICAgMTYxc3QgU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMTYgPSAvZGV2L3NkZmYgICAgICAgICAxNjJuZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAzMiA9IC9kZXYvc2RmZyAgICAgICAgIDE2M3JkIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgIDI0MCA9IC9kZXYvc2RmdCAgICAgICAgIDE3NnRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTMxIGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgxNzYtMTkxKQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RmdSAgICAgICAgIDE3N3RoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGZ2ICAgICAgICAgMTc4dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkZncgICAgICAgICAxNzl0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkZ2ogICAgICAgICAxOTJuZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworMTMyIGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgxOTItMjA3KQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RnayAgICAgICAgIDE5M3JkIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGdsICAgICAgICAgMTk0dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkZ20gICAgICAgICAxOTV0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkZ3ogICAgICAgICAyMDh0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworMTMzIGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgyMDgtMjIzKQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RoYSAgICAgICAgIDIwOXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGhiICAgICAgICAgMjEwdGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkaGMgICAgICAgICAyMTF0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkaHAgICAgICAgICAyMjR0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworMTM0IGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgyMjQtMjM5KQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RocSAgICAgICAgIDIyNXRoIFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGhyICAgICAgICAgMjI2dGggU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkaHMgICAgICAgICAyMjd0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkaWYgICAgICAgICAyNDB0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworMTM1IGJsb2NrICAgICAgIFNDU0kgZGlzayBkZXZpY2VzICgyNDAtMjU1KQorICAgICAgICAgICAgICAgICAgMCA9IC9kZXYvc2RpZyAgICAgICAgIDI0MXN0IFNDU0kgZGlzayB3aG9sZSBkaXNrCisgICAgICAgICAgICAgICAgIDE2ID0gL2Rldi9zZGloICAgICAgICAgMjQybmQgU0NTSSBkaXNrIHdob2xlIGRpc2sKKyAgICAgICAgICAgICAgICAgMzIgPSAvZGV2L3NkaWggICAgICAgICAyNDNyZCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAyNDAgPSAvZGV2L3NkaXYgICAgICAgICAyNTZ0aCBTQ1NJIGRpc2sgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciBJREUKKwkJZGlza3MgKHNlZSBtYWpvciBudW1iZXIgMykgZXhjZXB0IHRoYXQgdGhlIGxpbWl0IG9uCisJCXBhcnRpdGlvbnMgaXMgMTUuCisKKworMTM2LTE0MyBjaGFyCVVuaXg5OCBQVFkgc2xhdmVzCisJCSAgMCA9IC9kZXYvcHRzLzAJRmlyc3QgVW5peDk4IHBzZXVkby1UVFkKKwkJICAxID0gL2Rldi9wdHMvMQlTZWNvbmQgVW5peDk4IHBlc3Vkby1UVFkKKwkJICAgIC4uLgorCisJCVRoZXNlIGRldmljZSBub2RlcyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd2l0aAorCQl0aGUgcHJvcGVyIHBlcm1pc3Npb25zIGFuZCBtb2RlcyBieSBtb3VudGluZyB0aGUKKwkJZGV2cHRzIGZpbGVzeXN0ZW0gb250byAvZGV2L3B0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZQorCQltb3VudCBvcHRpb25zIChkaXN0cmlidXRpb24gZGVwZW5kZW50LCBob3dldmVyLCBvbgorCQkqbW9zdCogZGlzdHJpYnV0aW9ucyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBhcmUKKwkJIm1vZGU9MDYyMCxnaWQ9PGdpZCBvZiB0aGUgInR0eSIgZ3JvdXA+Ii4pCisKKzEzNiBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgbmludGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2M4ZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2M4ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2M4ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisxMzcgYmxvY2sJTXlsZXggREFDOTYwIFBDSSBSQUlEIGNvbnRyb2xsZXI7IHRlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jOWQwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jOWQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jOWQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworMTM4IGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBlbGV2ZW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzEwZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MxMGQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMTBkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKzEzOSBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgdHdlbGZ0aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzExZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MxMWQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMTFkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKzE0MCBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgdGhpcnRlZW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzEyZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MxMmQxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMTJkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKzE0MSBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgZm91cnRlZW50aCBjb250cm9sbGVyCisJCSAgMCA9IC9kZXYvcmQvYzEzZDAJRmlyc3QgZGlzaywgd2hvbGUgZGlzaworCQkgIDggPSAvZGV2L3JkL2MxM2QxCVNlY29uZCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjQ4ID0gL2Rldi9yZC9jMTNkMzEJMzJuZCBkaXNrLCB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBhcyBmb3IgbWFqb3IgNDguCisKKzE0MiBibG9jawlNeWxleCBEQUM5NjAgUENJIFJBSUQgY29udHJvbGxlcjsgZmlmdGVlbnRoIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9yZC9jMTRkMAlGaXJzdCBkaXNrLCB3aG9sZSBkaXNrCisJCSAgOCA9IC9kZXYvcmQvYzE0ZDEJU2Vjb25kIGRpc2ssIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyNDggPSAvZGV2L3JkL2MxNGQzMQkzMm5kIGRpc2ssIHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGFzIGZvciBtYWpvciA0OC4KKworMTQzIGJsb2NrCU15bGV4IERBQzk2MCBQQ0kgUkFJRCBjb250cm9sbGVyOyBzaXh0ZWVudGggY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L3JkL2MxNWQwCUZpcnN0IGRpc2ssIHdob2xlIGRpc2sKKwkJICA4ID0gL2Rldi9yZC9jMTVkMQlTZWNvbmQgZGlzaywgd2hvbGUgZGlzaworCQkgICAgLi4uCisJCTI0OCA9IC9kZXYvcmQvYzE1ZDMxCTMybmQgZGlzaywgd2hvbGUgZGlzaworCisJCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgYXMgZm9yIG1ham9yIDQ4LgorCisxNDQgY2hhcglFbmNhcHN1bGF0ZWQgUFBQCisJCSAgMCA9IC9kZXYvcHBwb3gwCUZpcnN0IFBQUCBvdmVyIEV0aGVybmV0CisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi9wcHBveDYzCTY0dGggUFBQIG92ZXIgRXRoZXJuZXQKKworCQlUaGlzIGlzIHByaW1hcmlseSB1c2VkIGZvciBBRFNMLgorCisJCVRoZSBTU1QgNTEzNi1ETiBEZXZpY2VOZXQgaW50ZXJmYWNlIGRyaXZlciBoYXMgYmVlbgorCQlyZWxvY2F0ZWQgdG8gbWFqb3IgMTgzIGR1ZSB0byBhbiB1bmZvcnR1bmF0ZSBjb25mbGljdC4KKworMTQ0IGJsb2NrCUV4cGFuc2lvbiBBcmVhICMxIGZvciBtb3JlIG5vbi1kZXZpY2UgKGUuZy4gTkZTKSBtb3VudHMKKwkJICAwID0gbW91bnRlZCBkZXZpY2UgMjU2CisJCTI1NSA9IG1vdW50ZWQgZGV2aWNlIDUxMQorCisxNDUgY2hhcglTQU05NDA3LWJhc2VkIHNvdW5kY2FyZAorCQkgIDAgPSAvZGV2L3NhbTBfbWl4ZXIKKwkJICAxID0gL2Rldi9zYW0wX3NlcXVlbmNlcgorCQkgIDIgPSAvZGV2L3NhbTBfbWlkaTAwCisJCSAgMyA9IC9kZXYvc2FtMF9kc3AKKwkJICA0ID0gL2Rldi9zYW0wX2F1ZGlvCisJCSAgNiA9IC9kZXYvc2FtMF9zbmRzdGF0CisJCSAxOCA9IC9kZXYvc2FtMF9taWRpMDEKKwkJIDM0ID0gL2Rldi9zYW0wX21pZGkwMgorCQkgNTAgPSAvZGV2L3NhbTBfbWlkaTAzCisJCSA2NCA9IC9kZXYvc2FtMV9taXhlcgorCQkgICAgLi4uCisJCTEyOCA9IC9kZXYvc2FtMl9taXhlcgorCQkgICAgLi4uCisJCTE5MiA9IC9kZXYvc2FtM19taXhlcgorCQkgICAgLi4uCisKKwkJRGV2aWNlIGZ1bmN0aW9ucyBtYXRjaCBPU1MsIGJ1dCBvZmZlciBhIG51bWJlciBvZgorCQlhZGRvbnMsIHdoaWNoIGFyZSBzYW05NDA3IHNwZWNpZmljLiAgT1NTIGNhbiBiZQorCQlvcGVyYXRlZCBzaW11bHRhbmVvdXNseSwgdGFraW5nIGNhcmUgb2YgdGhlIGNvZGVjLgorCisxNDUgYmxvY2sJRXhwYW5zaW9uIEFyZWEgIzIgZm9yIG1vcmUgbm9uLWRldmljZSAoZS5nLiBORlMpIG1vdW50cworCQkgIDAgPSBtb3VudGVkIGRldmljZSA1MTIKKwkJMjU1ID0gbW91bnRlZCBkZXZpY2UgNzY3CisKKzE0NiBjaGFyCVNZU1RSQU0gU0NSQU1OZXQgbWlycm9yZWQtbWVtb3J5IG5ldHdvcmsKKwkJICAwID0gL2Rldi9zY3JhbW5ldDAJRmlyc3QgU0NSQU1OZXQgZGV2aWNlCisJCSAgMSA9IC9kZXYvc2NyYW1uZXQxCVNlY29uZCBTQ1JBTU5ldCBkZXZpY2UKKwkJICAgIC4uLgorCisxNDYgYmxvY2sJRXhwYW5zaW9uIEFyZWEgIzMgZm9yIG1vcmUgbm9uLWRldmljZSAoZS5nLiBORlMpIG1vdW50cworCQkgIDAgPSBtb3VudGVkIGRldmljZSA3NjgKKwkJMjU1ID0gbW91bnRlZCBkZXZpY2UgMTAyMworCisxNDcgY2hhcglBdXJlYWwgU2VtaWNvbmR1Y3RvciBWb3J0ZXggQXVkaW8gZGV2aWNlCisJCSAgMCA9IC9kZXYvYXVyZWFsMAlGaXJzdCBBdXJlYWwgVm9ydGV4CisJCSAgMSA9IC9kZXYvYXVyZWFsMQlTZWNvbmQgQXVyZWFsIFZvcnRleAorCQkgICAgLi4uCisKKzE0NyBibG9jawlEaXN0cmlidXRlZCBSZXBsaWNhdGVkIEJsb2NrIERldmljZSAoRFJCRCkKKwkJICAwID0gL2Rldi9kcmJkMAlGaXJzdCBEUkJEIGRldmljZQorCQkgIDEgPSAvZGV2L2RyYmQxCVNlY29uZCBEUkJEIGRldmljZQorCQkgICAgLi4uCisKKzE0OCBjaGFyCVRlY2hub2xvZ3kgQ29uY2VwdHMgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlUMAlGaXJzdCBUQ0wgcG9ydAorCQkgIDEgPSAvZGV2L3R0eVQxCVNlY29uZCBUQ0wgcG9ydAorCQkgICAgLi4uCisKKzE0OSBjaGFyCVRlY2hub2xvZ3kgQ29uY2VwdHMgc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1dDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlUMAorCQkgIDEgPSAvZGV2L2N1dDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlUMQorCQkgICAgLi4uCisKKzE1MCBjaGFyCVJlYWwtVGltZSBMaW51eCBGSUZPcworCQkgIDAgPSAvZGV2L3J0ZjAJCUZpcnN0IFJUTGludXggRklGTworCQkgIDEgPSAvZGV2L3J0ZjEJCVNlY29uZCBSVExpbnV4IEZJRk8KKwkJICAgIC4uLgorCisxNTEgY2hhcglEUFQgSTJPIFNtYXJ0UmFpZCBWIGNvbnRyb2xsZXIKKwkJICAwID0gL2Rldi9kcHRpMAlGaXJzdCBEUFQgSTJPIGFkYXB0ZXIKKwkJICAxID0gL2Rldi9kcHRpMQlTZWNvbmQgRFBUIEkyTyBhZGFwdGVyCisJCSAgICAuLi4KKworMTUyIGNoYXIJRXRoZXJEcml2ZSBDb250cm9sIERldmljZQorCQkgIDAgPSAvZGV2L2V0aGVyZC9jdGwJQ29ubmVjdC9EaXNjb25uZWN0IGFuIEV0aGVyRHJpdmUKKwkJICAxID0gL2Rldi9ldGhlcmQvZXJyCU1vbml0b3IgZXJyb3JzCisJCSAgMiA9IC9kZXYvZXRoZXJkL3JhdwlSYXcgQW9FIHBhY2tldCBtb25pdG9yCisKKzE1MiBibG9jawlFdGhlckRyaXZlIEJsb2NrIERldmljZXMKKwkJICAwID0gL2Rldi9ldGhlcmQvMAlFdGhlckRyaXZlIDAKKwkJICAgIC4uLgorCQkyNTUgPSAvZGV2L2V0aGVyZC8yNTUJRXRoZXJEcml2ZSAyNTUKKworMTUzIGNoYXIJU1BJIEJ1cyBJbnRlcmZhY2UgKHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBNaWNyb1dpcmUpCisJCSAgMCA9IC9kZXYvc3BpMAkJRmlyc3QgU1BJIGRldmljZSBvbiB0aGUgYnVzCisJCSAgMSA9IC9kZXYvc3BpMQkJU2Vjb25kIFNQSSBkZXZpY2Ugb24gdGhlIGJ1cworCQkgICAgLi4uCisJCSAxNSA9IC9kZXYvc3BpMTUJU2l4dGVlbnRoIFNQSSBkZXZpY2Ugb24gdGhlIGJ1cworCisxNTMgYmxvY2sJRW5oYW5jZWQgTWV0YWRpc2sgUkFJRCAoRU1EKSBzdG9yYWdlIHVuaXRzCisJCSAgMCA9IC9kZXYvZW1kLzAJRmlyc3QgdW5pdAorCQkgIDEgPSAvZGV2L2VtZC8wcDEJUGFydGl0aW9uIDEgb24gRmlyc3QgdW5pdAorCQkgIDIgPSAvZGV2L2VtZC8wcDIJUGFydGl0aW9uIDIgb24gRmlyc3QgdW5pdAorCQkgICAgLi4uCisJCSAxNSA9IC9kZXYvZW1kLzBwMTUJUGFydGl0aW9uIDE1IG9uIEZpcnN0IHVuaXQKKworCQkgMTYgPSAvZGV2L2VtZC8xCVNlY29uZCB1bml0CisJCSAzMiA9IC9kZXYvZW1kLzIJVGhpcmQgdW5pdAorCQkgICAgLi4uCisJCTI0MCA9IC9kZXYvZW1kLzE1CVNpeHRlZW50aCB1bml0CisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAxNS4KKworMTU0IGNoYXIJU3BlY2lhbGl4IFJJTyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eVNSMAlGaXJzdCBSSU8gcG9ydAorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvdHR5U1IyNTUJMjU2dGggUklPIHBvcnQKKworMTU1IGNoYXIJU3BlY2lhbGl4IFJJTyBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VzcjAJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNSMAorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvY3VzcjI1NQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U1IyNTUKKworMTU2IGNoYXIJU3BlY2lhbGl4IFJJTyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3R0eVNSMjU2CTI1N3RoIFJJTyBwb3J0CisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi90dHlTUjUxMQk1MTJ0aCBSSU8gcG9ydAorCisxNTcgY2hhcglTcGVjaWFsaXggUklPIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMKKwkJICAwID0gL2Rldi9jdXNyMjU2CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTUjI1NgorCQkgICAgLi4uCisJCTI1NSA9IC9kZXYvY3VzcjUxMQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U1I1MTEKKworMTU4IGNoYXIJRGlhbG9naWMgR2FtbWFMaW5rIGZheCBkcml2ZXIKKwkJICAwID0gL2Rldi9nZmF4MAlHYW1tYUxpbmsgY2hhbm5lbCAwCisJCSAgMSA9IC9kZXYvZ2ZheDEJR2FtbWFMaW5rIGNoYW5uZWwgMQorCQkgICAgLi4uCisKKzE1OSBjaGFyCVJFU0VSVkVECisxNTkgYmxvY2sJUkVTRVJWRUQKKworMTYwIGNoYXIJR2VuZXJhbCBQdXJwb3NlIEluc3RydW1lbnQgQnVzIChHUElCKQorCQkgIDAgPSAvZGV2L2dwaWIwCUZpcnN0IEdQSUIgYnVzCisJCSAgMSA9IC9kZXYvZ3BpYjEJU2Vjb25kIEdQSUIgYnVzCisJCSAgICAuLi4KKworMTYwIGJsb2NrICAgICAgIENhcm1lbCA4LXBvcnQgU0FUQSBEaXNrcyBvbiBGaXJzdCBDb250cm9sbGVyCisJCSAgMCA9IC9kZXYvY2FybWVsLzAgICAgIFNBVEEgZGlzayAwIHdob2xlIGRpc2sKKwkJICAxID0gL2Rldi9jYXJtZWwvMHAxICAgU0FUQSBkaXNrIDAgcGFydGl0aW9uIDEKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L2Nhcm1lbC8wcDMxICBTQVRBIGRpc2sgMCBwYXJ0aXRpb24gMzEKKworCQkgMzIgPSAvZGV2L2Nhcm1lbC8xICAgICBTQVRBIGRpc2sgMSB3aG9sZSBkaXNrCisJCSA2NCA9IC9kZXYvY2FybWVsLzIgICAgIFNBVEEgZGlzayAyIHdob2xlIGRpc2sKKwkJICAgIC4uLgorCQkyMjQgPSAvZGV2L2Nhcm1lbC83ICAgICBTQVRBIGRpc2sgNyB3aG9sZSBkaXNrCisKKwkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIElERQorCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KKwkJcGFydGl0aW9ucyBpcyAzMS4KKworMTYxIGNoYXIJSXJDT01NIGRldmljZXMgKElyREEgc2VyaWFsL3BhcmFsbGVsIGVtdWxhdGlvbikKKwkJICAwID0gL2Rldi9pcmNvbW0wCUZpcnN0IElyQ09NTSBkZXZpY2UKKwkJICAxID0gL2Rldi9pcmNvbW0xCVNlY29uZCBJckNPTU0gZGV2aWNlCisJCSAgICAuLi4KKwkJIDE2ID0gL2Rldi9pcmxwdDAJRmlyc3QgSXJMUFQgZGV2aWNlCisJCSAxNyA9IC9kZXYvaXJscHQxCVNlY29uZCBJckxQVCBkZXZpY2UKKwkJICAgIC4uLgorCisxNjEgYmxvY2sgICAgICAgQ2FybWVsIDgtcG9ydCBTQVRBIERpc2tzIG9uIFNlY29uZCBDb250cm9sbGVyCisJCSAgMCA9IC9kZXYvY2FybWVsLzggICAgIFNBVEEgZGlzayA4IHdob2xlIGRpc2sKKwkJICAxID0gL2Rldi9jYXJtZWwvOHAxICAgU0FUQSBkaXNrIDggcGFydGl0aW9uIDEKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L2Nhcm1lbC84cDMxICBTQVRBIGRpc2sgOCBwYXJ0aXRpb24gMzEKKworCQkgMzIgPSAvZGV2L2Nhcm1lbC85ICAgICBTQVRBIGRpc2sgOSB3aG9sZSBkaXNrCisJCSA2NCA9IC9kZXYvY2FybWVsLzEwICAgIFNBVEEgZGlzayAxMCB3aG9sZSBkaXNrCisJCSAgICAuLi4KKwkJMjI0ID0gL2Rldi9jYXJtZWwvMTUgICAgU0FUQSBkaXNrIDE1IHdob2xlIGRpc2sKKworCQlQYXJ0aXRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgSURFCisJCWRpc2tzIChzZWUgbWFqb3IgbnVtYmVyIDMpIGV4Y2VwdCB0aGF0IHRoZSBsaW1pdCBvbgorCQlwYXJ0aXRpb25zIGlzIDMxLiAKKworMTYyIGNoYXIJUmF3IGJsb2NrIGRldmljZSBpbnRlcmZhY2UKKwkJICAwID0gL2Rldi9yYXdjdGwJUmF3IEkvTyBjb250cm9sIGRldmljZQorCQkgIDEgPSAvZGV2L3Jhdy9yYXcxCUZpcnN0IHJhdyBJL08gZGV2aWNlCisJCSAgMiA9IC9kZXYvcmF3L3JhdzIJU2Vjb25kIHJhdyBJL08gZGV2aWNlCisJCSAgICAuLi4KKworMTYzIGNoYXIJVU5BU1NJR05FRCAod2FzIFJhZGlvIFRlY2ggQklNLVhYWC1SUzIzMiByYWRpbyBtb2RlbSAtIHNlZSA1MSkKKworMTY0IGNoYXIJQ2hhc2UgUmVzZWFyY2ggQVQvUENJLUZhc3Qgc2VyaWFsIGNhcmQKKwkJICAwID0gL2Rldi90dHlDSDAJQVQvUENJLUZhc3QgYm9hcmQgMCwgcG9ydCAwCisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi90dHlDSDE1CUFUL1BDSS1GYXN0IGJvYXJkIDAsIHBvcnQgMTUKKwkJIDE2ID0gL2Rldi90dHlDSDE2CUFUL1BDSS1GYXN0IGJvYXJkIDEsIHBvcnQgMAorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvdHR5Q0gzMQlBVC9QQ0ktRmFzdCBib2FyZCAxLCBwb3J0IDE1CisJCSAzMiA9IC9kZXYvdHR5Q0gzMglBVC9QQ0ktRmFzdCBib2FyZCAyLCBwb3J0IDAKKwkJICAgIC4uLgorCQkgNDcgPSAvZGV2L3R0eUNINDcJQVQvUENJLUZhc3QgYm9hcmQgMiwgcG9ydCAxNQorCQkgNDggPSAvZGV2L3R0eUNINDgJQVQvUENJLUZhc3QgYm9hcmQgMywgcG9ydCAwCisJCSAgICAuLi4KKwkJIDYzID0gL2Rldi90dHlDSDYzCUFUL1BDSS1GYXN0IGJvYXJkIDMsIHBvcnQgMTUKKworMTY1IGNoYXIJQ2hhc2UgUmVzZWFyY2ggQVQvUENJLUZhc3Qgc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1Y2gwCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlDSDAKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L2N1Y2g2MwlDYWxsb3V0IGRldmljZSBmb3IgdHR5Q0g2MworCisxNjYgY2hhcglBQ00gVVNCIG1vZGVtcworCQkgIDAgPSAvZGV2L3R0eUFDTTAJRmlyc3QgQUNNIG1vZGVtCisJCSAgMSA9IC9kZXYvdHR5QUNNMQlTZWNvbmQgQUNNIG1vZGVtCisJCSAgICAuLi4KKworMTY3IGNoYXIJQUNNIFVTQiBtb2RlbXMgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1YWNtMAlDYWxsb3V0IGRldmljZSBmb3IgdHR5QUNNMAorCQkgIDEgPSAvZGV2L2N1YWNtMQlDYWxsb3V0IGRldmljZSBmb3IgdHR5QUNNMQorCQkgICAgLi4uCisKKzE2OCBjaGFyCUVyYWNvbSBDU0E3MDAwIFBDSSBlbmNyeXB0aW9uIGFkYXB0b3IKKwkJICAwID0gL2Rldi9lY3NhMAlGaXJzdCBDU0E3MDAwCisJCSAgMSA9IC9kZXYvZWNzYTEJU2Vjb25kIENTQTcwMDAKKwkJICAgIC4uLgorCisxNjkgY2hhcglFcmFjb20gQ1NBODAwMCBQQ0kgZW5jcnlwdGlvbiBhZGFwdG9yCisJCSAgMCA9IC9kZXYvZWNzYTgtMAlGaXJzdCBDU0E4MDAwCisJCSAgMSA9IC9kZXYvZWNzYTgtMQlTZWNvbmQgQ1NBODAwMAorCQkgICAgLi4uCisKKzE3MCBjaGFyCUFNSSBNZWdhUkFDIHJlbW90ZSBhY2Nlc3MgY29udHJvbGxlcgorCQkgIDAgPSAvZGV2L21lZ2FyYWMwCUZpcnN0IE1lZ2FSQUMgY2FyZAorCQkgIDEgPSAvZGV2L21lZ2FyYWMxCVNlY29uZCBNZWdhUkFDIGNhcmQKKwkJICAgIC4uLgorCisxNzEgY2hhcglSZXNlcnZlZCBmb3IgSUVFRSAxMzk0IChGaXJld2lyZSkKKworCisxNzIgY2hhcglNb3hhIEludGVsbGlvIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5TVgwCUZpcnN0IE1veGEgcG9ydAorCQkgIDEgPSAvZGV2L3R0eU1YMQlTZWNvbmQgTW94YSBwb3J0CisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi90dHlNWDEyNwkxMjh0aCBNb3hhIHBvcnQKKwkJMTI4ID0gL2Rldi9tb3hhY3RsCU1veGEgY29udHJvbCBwb3J0CisKKzE3MyBjaGFyCU1veGEgSW50ZWxsaW8gc2VyaWFsIGNhcmQgLSBhbHRlcm5hdGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L2N1bXgwCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlNWDAKKwkJICAxID0gL2Rldi9jdW14MQlDYWxsb3V0IGRldmljZSBmb3IgdHR5TVgxCisJCSAgICAuLi4KKwkJMTI3ID0gL2Rldi9jdW14MTI3CUNhbGxvdXQgZGV2aWNlIGZvciB0dHlNWDEyNworCisxNzQgY2hhcglTbWFydElPIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5U0kwCUZpcnN0IFNtYXJ0SU8gcG9ydAorCQkgIDEgPSAvZGV2L3R0eVNJMQlTZWNvbmQgU21hcnRJTyBwb3J0CisJCSAgICAuLi4KKworMTc1IGNoYXIJU21hcnRJTyBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3VzaTAJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNJMAorCQkgIDEgPSAvZGV2L2N1c2kxCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTSTEKKwkJICAgIC4uLgorCisxNzYgY2hhcgluQ2lwaGVyIG5GYXN0IFBDSSBjcnlwdG8gYWNjZWxlcmF0b3IKKwkJICAwID0gL2Rldi9uZmFzdHBjaTAJRmlyc3QgbkZhc3QgUENJIGRldmljZQorCQkgIDEgPSAvZGV2L25mYXN0cGNpMQlGaXJzdCBuRmFzdCBQQ0kgZGV2aWNlCisJCSAgICAuLi4KKworMTc3IGNoYXIJVEkgUENJTHlueCBtZW1vcnkgc3BhY2VzCisJCSAgMCA9IC9kZXYvcGNpbHlueC9hdXgwCSBBVVggc3BhY2Ugb2YgZmlyc3QgUENJTHlueCBjYXJkCisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi9wY2lseW54L2F1eDE1IEFVWCBzcGFjZSBvZiAxNnRoIFBDSUx5bnggY2FyZAorCQkgMTYgPSAvZGV2L3BjaWx5bngvcm9tMAkgUk9NIHNwYWNlIG9mIGZpcnN0IFBDSUx5bnggY2FyZAorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvcGNpbHlueC9yb20xNSBST00gc3BhY2Ugb2YgMTZ0aCBQQ0lMeW54IGNhcmQKKwkJIDMyID0gL2Rldi9wY2lseW54L3JhbTAJIFJBTSBzcGFjZSBvZiBmaXJzdCBQQ0lMeW54IGNhcmQKKwkJICAgIC4uLgorCQkgNDcgPSAvZGV2L3BjaWx5bngvcmFtMTUgUkFNIHNwYWNlIG9mIDE2dGggUENJTHlueCBjYXJkCisKKzE3OCBjaGFyCUdpZ2FuZXQgY0xBTjF4eHggdmlydHVhbCBpbnRlcmZhY2UgYWRhcHRlcgorCQkgIDAgPSAvZGV2L2NsYW52aTAJRmlyc3QgY0xBTiBhZGFwdGVyCisJCSAgMSA9IC9kZXYvY2xhbnZpMQlTZWNvbmQgY0xBTiBhZGFwdGVyCisJCSAgICAuLi4KKworMTc5IGNoYXIJQ0N1YmUgRFZYQ2hpcC1iYXNlZCBQQ0kgcHJvZHVjdHMKKwkJICAwID0gL2Rldi9kdnhpcnEwCUZpcnN0IERWWCBkZXZpY2UKKwkJICAxID0gL2Rldi9kdnhpcnExCVNlY29uZCBEVlggZGV2aWNlCisJCSAgICAuLi4KKworMTgwIGNoYXIJVVNCIGRldmljZXMKKwkJICAwID0gL2Rldi91c2IvbHAwCUZpcnN0IFVTQiBwcmludGVyCisJCSAgICAuLi4KKwkJIDE1ID0gL2Rldi91c2IvbHAxNQkxNnRoIFVTQiBwcmludGVyCisJCSAxNiA9IC9kZXYvdXNiL21vdXNlMAlGaXJzdCBVU0IgbW91c2UKKwkJICAgIC4uLgorCQkgMzEgPSAvZGV2L3VzYi9tb3VzZTE1CTE2dGggVVNCIG1vdXNlCisJCSAzMiA9IC9kZXYvdXNiL2V6MAlGaXJzdCBVU0IgZmlybXdhcmUgbG9hZGVyCisJCSAgICAuLi4KKwkJIDQ3ID0gL2Rldi91c2IvZXoxNQkxNnRoIFVTQiBmaXJtd2FyZSBsb2FkZXIKKwkJIDQ4ID0gL2Rldi91c2Ivc2Nhbm5lcjAJRmlyc3QgVVNCIHNjYW5uZXIKKwkJICAgIC4uLgorCQkgNjMgPSAvZGV2L3VzYi9zY2FubmVyMTUgMTZ0aCBVU0Igc2Nhbm5lcgorCQkgNjQgPSAvZGV2L3VzYi9yaW81MDAJRGlhbW9uZCBSaW8gNTAwCisJCSA2NSA9IC9kZXYvdXNiL3VzYmxjZAlVU0JMQ0QgSW50ZXJmYWNlIChpbmZvQHVzYmxjZC5kZSkKKwkJIDY2ID0gL2Rldi91c2IvY3BhZDAJU3luYXB0aWNzIGNQYWQgKG1vdXNlL0xDRCkKKworMTgwIGJsb2NrCVVTQiBibG9jayBkZXZpY2VzCisJCTAgPSAvZGV2L3ViYQkJRmlyc3QgVVNCIGJsb2NrIGRldmljZQorCQk4ID0gL2Rldi91YmIJCVNlY29uZCBVU0IgYmxvY2sgZGV2aWNlCisJCTE2ID0gL2Rldi91YmMJCVRocmlkIFVTQiBibG9jayBkZXZpY2UKKwkJLi4uCisKKzE4MSBjaGFyCUNvbnJhZCBFbGVjdHJvbmljIHBhcmFsbGVsIHBvcnQgcmFkaW8gY2xvY2tzCisJCSAgMCA9IC9kZXYvcGNmY2xvY2swCUZpcnN0IENvbnJhZCByYWRpbyBjbG9jaworCQkgIDEgPSAvZGV2L3BjZmNsb2NrMQlTZWNvbmQgQ29ucmFkIHJhZGlvIGNsb2NrCisJCSAgICAuLi4KKworMTgyIGNoYXIJUGljdHVyZSBFbGVtZW50cyBUSFIyIGJpbmFyaXplcgorCQkgIDAgPSAvZGV2L3BldGhyMAlGaXJzdCBUSFIyIGJvYXJkCisJCSAgMSA9IC9kZXYvcGV0aHIxCVNlY29uZCBUSFIyIGJvYXJkCisJCSAgICAuLi4KKworMTgzIGNoYXIJU1NUIDUxMzYtRE4gRGV2aWNlTmV0IGludGVyZmFjZQorCQkgIDAgPSAvZGV2L3NzNTEzNmRuMAlGaXJzdCBEZXZpY2VOZXQgaW50ZXJmYWNlCisJCSAgMSA9IC9kZXYvc3M1MTM2ZG4xCVNlY29uZCBEZXZpY2VOZXQgaW50ZXJmYWNlCisJCSAgICAuLi4KKworCQlUaGlzIGRldmljZSB1c2VkIHRvIGJlIGFzc2lnbmVkIHRvIG1ham9yIG51bWJlciAxNDQuCisJCUl0IGhhZCB0byBiZSBtb3ZlZCBkdWUgdG8gYW4gdW5mb3J0dW5hdGUgY29uZmxpY3QuCisKKzE4NCBjaGFyCVBpY3R1cmUgRWxlbWVudHMnIHZpZGVvIHNpbXVsYXRvci9zZW5kZXIKKwkJICAwID0gL2Rldi9wZXZzczAJRmlyc3Qgc2VuZGVyIGJvYXJkCisJCSAgMSA9IC9kZXYvcGV2c3MxCVNlY29uZCBzZW5kZXIgYm9hcmQKKwkJICAgIC4uLgorCisxODUgY2hhcglJbnRlck1lenpvIGhpZ2ggYXZhaWxhYmlsaXR5IGZpbGUgc3lzdGVtCisJCSAgMCA9IC9kZXYvaW50ZXJtZXp6bzAJRmlyc3QgY2FjaGUgbWFuYWdlcgorCQkgIDEgPSAvZGV2L2ludGVybWV6em8xCVNlY29uZCBjYWNoZSBtYW5hZ2VyCisJCSAgICAuLi4KKworCQlTZWUgaHR0cDovL3d3dy5pbnRlci1tZXp6by5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisxODYgY2hhcglPYmplY3QtYmFzZWQgc3RvcmFnZSBjb250cm9sIGRldmljZQorCQkgIDAgPSAvZGV2L29iZDAJCUZpcnN0IG9iZCBjb250cm9sIGRldmljZQorCQkgIDEgPSAvZGV2L29iZDEJCVNlY29uZCBvYmQgY29udHJvbCBkZXZpY2UKKwkJICAgIC4uLgorCisJCVNlZSBmdHA6Ly9mdHAubHVzdHJlLm9yZy9wdWIvb2JkIGZvciBjb2RlIGFuZCBpbmZvcm1hdGlvbi4KKworMTg3IGNoYXIJREVTa2V5IGhhcmR3YXJlIGVuY3J5cHRpb24gZGV2aWNlCisJCSAgMCA9IC9kZXYvZGVza2V5MAlGaXJzdCBERVMga2V5CisJCSAgMSA9IC9kZXYvZGVza2V5MQlTZWNvbmQgREVTIGtleQorCQkgICAgLi4uCisKKzE4OCBjaGFyCVVTQiBzZXJpYWwgY29udmVydGVycworCQkgIDAgPSAvZGV2L3R0eVVTQjAJRmlyc3QgVVNCIHNlcmlhbCBjb252ZXJ0ZXIKKwkJICAxID0gL2Rldi90dHlVU0IxCVNlY29uZCBVU0Igc2VyaWFsIGNvbnZlcnRlcgorCQkgICAgLi4uCisKKzE4OSBjaGFyCVVTQiBzZXJpYWwgY29udmVydGVycyAtIGFsdGVybmF0ZSBkZXZpY2VzCisJCSAgMCA9IC9kZXYvY3V1c2IwCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlVU0IwCisJCSAgMSA9IC9kZXYvY3V1c2IxCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlVU0IxCisJCSAgICAuLi4KKworMTkwIGNoYXIJS2Fuc2FzIENpdHkgdHJhY2tlci90dW5lciBjYXJkCisJCSAgMCA9IC9kZXYva2N0dDAJRmlyc3QgS0NUL1QgY2FyZAorCQkgIDEgPSAvZGV2L2tjdHQxCVNlY29uZCBLQ1QvVCBjYXJkCisJCSAgICAuLi4KKworMTkxIGNoYXIJUmVzZXJ2ZWQgZm9yIFBDTUNJQQorCisxOTIgY2hhcglLZXJuZWwgcHJvZmlsaW5nIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L3Byb2ZpbGUJUHJvZmlsaW5nIGNvbnRyb2wgZGV2aWNlCisJCSAgMSA9IC9kZXYvcHJvZmlsZTAJUHJvZmlsaW5nIGRldmljZSBmb3IgQ1BVIDAKKwkJICAyID0gL2Rldi9wcm9maWxlMQlQcm9maWxpbmcgZGV2aWNlIGZvciBDUFUgMQorCQkgICAgLi4uCisKKzE5MyBjaGFyCUtlcm5lbCBldmVudC10cmFjaW5nIGludGVyZmFjZQorCQkgIDAgPSAvZGV2L3RyYWNlCVRyYWNpbmcgY29udHJvbCBkZXZpY2UKKwkJICAxID0gL2Rldi90cmFjZTAJVHJhY2luZyBkZXZpY2UgZm9yIENQVSAwCisJCSAgMiA9IC9kZXYvdHJhY2UxCVRyYWNpbmcgZGV2aWNlIGZvciBDUFUgMQorCQkgICAgLi4uCisKKzE5NCBjaGFyCWxpblZpZGVvU3RyZWFtcyAoTElOVlMpCisJCSAgMCA9IC9kZXYvbXZpZGVvL3N0YXR1czAJVmlkZW8gY29tcHJlc3Npb24gc3RhdHVzCisJCSAgMSA9IC9kZXYvbXZpZGVvL3N0cmVhbTAJVmlkZW8gc3RyZWFtCisJCSAgMiA9IC9kZXYvbXZpZGVvL2ZyYW1lMAlTaW5nbGUgY29tcHJlc3NlZCBmcmFtZQorCQkgIDMgPSAvZGV2L212aWRlby9yYXdmcmFtZTAJUmF3IHVuY29tcHJlc3NlZCBmcmFtZQorCQkgIDQgPSAvZGV2L212aWRlby9jb2RlYzAJRGlyZWN0IGNvZGVjIGFjY2VzcworCQkgIDUgPSAvZGV2L212aWRlby92aWRlbzRsaW51eDAJVmlkZW80TGludXggY29tcGF0aWJpbGl0eQorCisJCSAxNiA9IC9kZXYvbXZpZGVvL3N0YXR1czEJU2Vjb25kIGRldmljZQorCQkgICAgLi4uCisJCSAzMiA9IC9kZXYvbXZpZGVvL3N0YXR1czIJVGhpcmQgZGV2aWNlCisJCSAgICAuLi4KKwkJICAgIC4uLgorCQkyNDAgPSAvZGV2L212aWRlby9zdGF0dXMxNQkxNnRoIGRldmljZSAKKwkJICAgIC4uLgorCisxOTUgY2hhcglOdmlkaWEgZ3JhcGhpY3MgZGV2aWNlcworCQkgIDAgPSAvZGV2L252aWRpYTAJCUZpcnN0IE52aWRpYSBjYXJkCisJCSAgMSA9IC9kZXYvbnZpZGlhMQkJU2Vjb25kIE52aWRpYSBjYXJkCisJCSAgICAuLi4KKwkJMjU1ID0gL2Rldi9udmlkaWFjdGwJCU52aWRpYSBjYXJkIGNvbnRyb2wgZGV2aWNlCisKKzE5NiBjaGFyCVRvcm1lbnRhIFQxIGNhcmQKKwkJICAwID0gL2Rldi90b3IvMAkJTWFzdGVyIGNvbnRyb2wgY2hhbm5lbCBmb3IgYWxsIGNhcmRzCisJCSAgMSA9IC9kZXYvdG9yLzEJCUZpcnN0IERTMAorCQkgIDIgPSAvZGV2L3Rvci8yCQlTZWNvbmQgRFMwCisJCSAgICAuLi4KKwkJIDQ4ID0gL2Rldi90b3IvNDgJCTQ4dGggRFMwCisJCSA0OSA9IC9kZXYvdG9yLzQ5CQlGaXJzdCBwc2V1ZG8tY2hhbm5lbAorCQkgNTAgPSAvZGV2L3Rvci81MAkJU2Vjb25kIHBzZXVkby1jaGFubmVsCisJCSAgICAuLi4KKworMTk3IGNoYXIJT3BlblRORiB0cmFjaW5nIGZhY2lsaXR5CisJCSAgMCA9IC9kZXYvdG5mL3QwCQlUcmFjZSAwIGRhdGEgZXh0cmFjdGlvbgorCQkgIDEgPSAvZGV2L3RuZi90MQkJVHJhY2UgMSBkYXRhIGV4dHJhY3Rpb24KKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L3RuZi9zdGF0dXMJCVRyYWNpbmcgZmFjaWxpdHkgc3RhdHVzCisJCTEzMCA9IC9kZXYvdG5mL3RyYWNlCQlUcmFjaW5nIGRldmljZQorCisxOTggY2hhcglUb3RhbCBJbXBhY3QgVFBNUDIgcXVhZCBjb3Byb2Nlc3NvciBQQ0kgY2FyZAorCQkgIDAgPSAvZGV2L3RwbXAyLzAJCUZpcnN0IGNhcmQKKwkJICAxID0gL2Rldi90cG1wMi8xCQlTZWNvbmQgY2FyZAorCQkgICAgLi4uCisKKzE5OSBjaGFyCVZlcml0YXMgdm9sdW1lIG1hbmFnZXIgKFZ4Vk0pIHZvbHVtZXMKKwkJICAwID0gL2Rldi92eC9yZHNrLyovKgkJRmlyc3Qgdm9sdW1lCisJCSAgMSA9IC9kZXYvdngvcmRzay8qLyoJCVNlY29uZCB2b2x1bWUKKwkJICAgIC4uLgorCisxOTkgYmxvY2sJVmVyaXRhcyB2b2x1bWUgbWFuYWdlciAoVnhWTSkgdm9sdW1lcworCQkgIDAgPSAvZGV2L3Z4L2Rzay8qLyoJCUZpcnN0IHZvbHVtZQorCQkgIDEgPSAvZGV2L3Z4L2Rzay8qLyoJCVNlY29uZCB2b2x1bWUKKwkJICAgIC4uLgorCisJCVRoZSBuYW1lc3BhY2UgaW4gdGhlc2UgZGlyZWN0b3JpZXMgaXMgbWFpbnRhaW5lZCBieQorCQl0aGUgdXNlciBzcGFjZSBWeFZNIHNvZnR3YXJlLgorCisyMDAgY2hhcglWZXJpdGFzIFZ4Vk0gY29uZmlndXJhdGlvbiBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgIDAgPSAvZGV2L3Z4L2NvbmZpZwkJQ29uZmlndXJhdGlvbiBhY2Nlc3Mgbm9kZQorICAgICAgICAgICAgICAgICAgMSA9IC9kZXYvdngvdHJhY2UJCVZvbHVtZSBpL28gdHJhY2UgYWNjZXNzIG5vZGUKKyAgICAgICAgICAgICAgICAgIDIgPSAvZGV2L3Z4L2lvZAkJVm9sdW1lIGkvbyBkYWVtb24gYWNjZXNzIG5vZGUKKyAgICAgICAgICAgICAgICAgIDMgPSAvZGV2L3Z4L2luZm8JCVZvbHVtZSBpbmZvcm1hdGlvbiBhY2Nlc3Mgbm9kZQorICAgICAgICAgICAgICAgICAgNCA9IC9kZXYvdngvdGFzawkJVm9sdW1lIHRhc2tzIGFjY2VzcyBub2RlCisgICAgICAgICAgICAgICAgICA1ID0gL2Rldi92eC90YXNrbW9uCQlWb2x1bWUgdGFza3MgbW9uaXRvciBkYWVtb24KKworMjAxIGNoYXIJVmVyaXRhcyBWeFZNIGR5bmFtaWMgbXVsdGlwYXRoaW5nIGRyaXZlcgorCQkgIDAgPSAvZGV2L3Z4L3JkbXAvKgkJRmlyc3QgbXVsdGlwYXRoIGRldmljZQorCQkgIDEgPSAvZGV2L3Z4L3JkbXAvKgkJU2Vjb25kIG11bHRpcGF0aCBkZXZpY2UKKwkJICAgIC4uLgorMjAxIGJsb2NrCVZlcml0YXMgVnhWTSBkeW5hbWljIG11bHRpcGF0aGluZyBkcml2ZXIKKwkJICAwID0gL2Rldi92eC9kbXAvKgkJRmlyc3QgbXVsdGlwYXRoIGRldmljZQorCQkgIDEgPSAvZGV2L3Z4L2RtcC8qCQlTZWNvbmQgbXVsdGlwYXRoIGRldmljZQorCQkgICAgLi4uCisKKwkJVGhlIG5hbWVzcGFjZSBpbiB0aGVzZSBkaXJlY3RvcmllcyBpcyBtYWludGFpbmVkIGJ5CisJCXRoZSB1c2VyIHNwYWNlIFZ4Vk0gc29mdHdhcmUuCisKKzIwMiBjaGFyCUNQVSBtb2RlbC1zcGVjaWZpYyByZWdpc3RlcnMKKwkJICAwID0gL2Rldi9jcHUvMC9tc3IJCU1TUnMgb24gQ1BVIDAKKwkJICAxID0gL2Rldi9jcHUvMS9tc3IJCU1TUnMgb24gQ1BVIDEKKwkJICAgIC4uLgorCisyMDMgY2hhcglDUFUgQ1BVSUQgaW5mb3JtYXRpb24KKwkJICAwID0gL2Rldi9jcHUvMC9jcHVpZAkJQ1BVSUQgb24gQ1BVIDAKKwkJICAxID0gL2Rldi9jcHUvMS9jcHVpZAkJQ1BVSUQgb24gQ1BVIDEKKwkJICAgIC4uLgorCisyMDQgY2hhcglMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMKKwkJICAwID0gL2Rldi90dHlMVTAJCUxpbmtVcCBTeXN0ZW1zIEw3Mnh4IFVBUlQgLSBwb3J0IDAKKwkJICAxID0gL2Rldi90dHlMVTEJCUxpbmtVcCBTeXN0ZW1zIEw3Mnh4IFVBUlQgLSBwb3J0IDEKKwkJICAyID0gL2Rldi90dHlMVTIJCUxpbmtVcCBTeXN0ZW1zIEw3Mnh4IFVBUlQgLSBwb3J0IDIKKwkJICAzID0gL2Rldi90dHlMVTMJCUxpbmtVcCBTeXN0ZW1zIEw3Mnh4IFVBUlQgLSBwb3J0IDMKKwkJICA0ID0gL2Rldi90dHlGQjAJCUludGVsIEZvb3RicmlkZ2UgKEFSTSkKKwkJICA1ID0gL2Rldi90dHlTQTAJCVN0cm9uZ0FSTSBidWlsdGluIHNlcmlhbCBwb3J0IDAKKwkJICA2ID0gL2Rldi90dHlTQTEJCVN0cm9uZ0FSTSBidWlsdGluIHNlcmlhbCBwb3J0IDEKKwkJICA3ID0gL2Rldi90dHlTQTIJCVN0cm9uZ0FSTSBidWlsdGluIHNlcmlhbCBwb3J0IDIKKwkJICA4ID0gL2Rldi90dHlTQzAJCVNDSSBzZXJpYWwgcG9ydCAoU3VwZXJIKSAtIHBvcnQgMAorCQkgIDkgPSAvZGV2L3R0eVNDMQkJU0NJIHNlcmlhbCBwb3J0IChTdXBlckgpIC0gcG9ydCAxCisJCSAxMCA9IC9kZXYvdHR5U0MyCQlTQ0kgc2VyaWFsIHBvcnQgKFN1cGVySCkgLSBwb3J0IDIKKwkJIDExID0gL2Rldi90dHlTQzMJCVNDSSBzZXJpYWwgcG9ydCAoU3VwZXJIKSAtIHBvcnQgMworCQkgMTIgPSAvZGV2L3R0eUZXMAkJRmlybXdhcmUgY29uc29sZSAtIHBvcnQgMAorCQkgMTMgPSAvZGV2L3R0eUZXMQkJRmlybXdhcmUgY29uc29sZSAtIHBvcnQgMQorCQkgMTQgPSAvZGV2L3R0eUZXMgkJRmlybXdhcmUgY29uc29sZSAtIHBvcnQgMgorCQkgMTUgPSAvZGV2L3R0eUZXMwkJRmlybXdhcmUgY29uc29sZSAtIHBvcnQgMworCQkgMTYgPSAvZGV2L3R0eUFNMAkJQVJNICJBTUJBIiBzZXJpYWwgcG9ydCAwCisJCSAgICAuLi4KKwkJIDMxID0gL2Rldi90dHlBTTE1CQlBUk0gIkFNQkEiIHNlcmlhbCBwb3J0IDE1CisJCSAzMiA9IC9kZXYvdHR5REIwCQlEYXRhQm9vc3RlciBzZXJpYWwgcG9ydCAwCisJCSAgICAuLi4KKwkJIDM5ID0gL2Rldi90dHlEQjcJCURhdGFCb29zdGVyIHNlcmlhbCBwb3J0IDcKKwkJIDQwID0gL2Rldi90dHlTRzAJCVNHSSBBbHRpeCBjb25zb2xlIHBvcnQKKwkJIDQxID0gL2Rldi90dHlTTVgwCQlNb3Rvcm9sYSBpLk1YIC0gcG9ydCAwCisJCSA0MiA9IC9kZXYvdHR5U01YMQkJTW90b3JvbGEgaS5NWCAtIHBvcnQgMQorCQkgNDMgPSAvZGV2L3R0eVNNWDIJCU1vdG9yb2xhIGkuTVggLSBwb3J0IDIKKwkJIDQ0ID0gL2Rldi90dHlNTTAJCU1hcnZlbGwgTVBTQyAtIHBvcnQgMAorCQkgNDUgPSAvZGV2L3R0eU1NMQkJTWFydmVsbCBNUFNDIC0gcG9ydCAxCisJCSA0NiA9IC9kZXYvdHR5Q1BNMAkJUFBDIENQTSAoU0NDIG9yIFNNQykgLSBwb3J0IDAKKwkJICAgIC4uLgorCQkgNDcgPSAvZGV2L3R0eUNQTTUJCVBQQyBDUE0gKFNDQyBvciBTTUMpIC0gcG9ydCA1CisJCSA1MCA9IC9kZXYvdHR5SU9DNDAJCUFsdGl4IHNlcmlhbCBjYXJkCisJCSAgICAuLi4KKwkJIDgxID0gL2Rldi90dHlJT0M0MzEJCUFsdGl4IHNlcmlhbCBjYXJkCisJCSA4MiA9IC9kZXYvdHR5VlIwICAgICAgICAgICAgICAgTkVDIFZSNDEwMCBzZXJpZXMgU0lVCisJCSA4MyA9IC9kZXYvdHR5VlIxICAgICAgICAgICAgICAgTkVDIFZSNDEwMCBzZXJpZXMgRFNJVQorCisyMDUgY2hhcglMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMgKGFsdGVybmF0ZSBkZXZpY2UpCisJCSAgMCA9IC9kZXYvY3VsdTAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlMVTAKKwkJICAxID0gL2Rldi9jdWx1MQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUxVMQorCQkgIDIgPSAvZGV2L2N1bHUyCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5TFUyCisJCSAgMyA9IC9kZXYvY3VsdTMJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlMVTMKKwkJICA0ID0gL2Rldi9jdWZiMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUZCMAorCQkgIDUgPSAvZGV2L2N1c2EwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0EwCisJCSAgNiA9IC9kZXYvY3VzYTEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTQTEKKwkJICA3ID0gL2Rldi9jdXNhMgkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNBMgorCQkgIDggPSAvZGV2L2N1c2MwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0MwCisJCSAgOSA9IC9kZXYvY3VzYzEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTQzEKKwkJIDEwID0gL2Rldi9jdXNjMgkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNDMgorCQkgMTEgPSAvZGV2L2N1c2MzCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0MzCisJCSAxMiA9IC9kZXYvY3VmdzAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGVzAKKwkJIDEzID0gL2Rldi9jdWZ3MQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUZXMQorCQkgMTQgPSAvZGV2L2N1ZncyCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5RlcyCisJCSAxNSA9IC9kZXYvY3VmdzMJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlGVzMKKwkJIDE2ID0gL2Rldi9jdWFtMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUFNMAorCQkgICAgLi4uCisJCSAzMSA9IC9kZXYvY3VhbTE1CQlDYWxsb3V0IGRldmljZSBmb3IgdHR5QU0xNQorCQkgMzIgPSAvZGV2L2N1ZGIwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5REIwCisJCSAgICAuLi4KKwkJIDM5ID0gL2Rldi9jdWRiNwkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eURCNworCQkgNDAgPSAvZGV2L2N1c2cwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U0cwCisJCSA0MSA9IC9kZXYvdHR5Y3VzbXgwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5U01YMAorCQkgNDIgPSAvZGV2L3R0eWN1c214MQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVNNWDEKKwkJIDQzID0gL2Rldi90dHljdXNteDIJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlTTVgyCisJCSA0NiA9IC9kZXYvY3VjcG0wCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5Q1BNMAorCQkgICAgLi4uCisJCSA0OSA9IC9kZXYvY3VjcG01CQlDYWxsb3V0IGRldmljZSBmb3IgdHR5Q1BNNQorCQkgNTAgPSAvZGV2L2N1aW9jNDAJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlJT0M0MAorCQkgICAgLi4uCisJCSA4MSA9IC9kZXYvY3Vpb2M0MzEJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlJT0M0MzEKKwkJIDgyID0gL2Rldi9jdXZyMCAgICAgICAgICAgICAgICBDYWxsb3V0IGRldmljZSBmb3IgdHR5VlIwCisJCSA4MyA9IC9kZXYvY3V2cjEgICAgICAgICAgICAgICAgQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVZSMQorCisKKzIwNiBjaGFyCU9uU3RyZWFtIFNDLXgwIHRhcGUgZGV2aWNlcworCQkgIDAgPSAvZGV2L29zc3QwCQlGaXJzdCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMAorCQkgIDEgPSAvZGV2L29zc3QxCQlTZWNvbmQgT25TdHJlYW0gU0NTSSB0YXBlLCBtb2RlIDAKKwkJICAgIC4uLgorCQkgMzIgPSAvZGV2L29zc3QwbAkJRmlyc3QgT25TdHJlYW0gU0NTSSB0YXBlLCBtb2RlIDEKKwkJIDMzID0gL2Rldi9vc3N0MWwJCVNlY29uZCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMQorCQkgICAgLi4uCisJCSA2NCA9IC9kZXYvb3NzdDBtCQlGaXJzdCBPblN0cmVhbSBTQ1NJIHRhcGUsIG1vZGUgMgorCQkgNjUgPSAvZGV2L29zc3QxbQkJU2Vjb25kIE9uU3RyZWFtIFNDU0kgdGFwZSwgbW9kZSAyCisJCSAgICAuLi4KKwkJIDk2ID0gL2Rldi9vc3N0MGEJCUZpcnN0IE9uU3RyZWFtIFNDU0kgdGFwZSwgbW9kZSAzCisJCSA5NyA9IC9kZXYvb3NzdDFhCQlTZWNvbmQgT25TdHJlYW0gU0NTSSB0YXBlLCBtb2RlIDMKKwkJICAgIC4uLgorCQkxMjggPSAvZGV2L25vc3N0MAkJTm8gcmV3aW5kIHZlcnNpb24gb2YgL2Rldi9vc3N0MAorCQkxMjkgPSAvZGV2L25vc3N0MQkJTm8gcmV3aW5kIHZlcnNpb24gb2YgL2Rldi9vc3N0MQorCQkgICAgLi4uCisJCTE2MCA9IC9kZXYvbm9zc3QwbAkJTm8gcmV3aW5kIHZlcnNpb24gb2YgL2Rldi9vc3N0MGwKKwkJMTYxID0gL2Rldi9ub3NzdDFsCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QxbAorCQkgICAgLi4uCisJCTE5MiA9IC9kZXYvbm9zc3QwbQkJTm8gcmV3aW5kIHZlcnNpb24gb2YgL2Rldi9vc3N0MG0KKwkJMTkzID0gL2Rldi9ub3NzdDFtCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QxbQorCQkgICAgLi4uCisJCTIyNCA9IC9kZXYvbm9zc3QwYQkJTm8gcmV3aW5kIHZlcnNpb24gb2YgL2Rldi9vc3N0MGEKKwkJMjI1ID0gL2Rldi9ub3NzdDFhCQlObyByZXdpbmQgdmVyc2lvbiBvZiAvZGV2L29zc3QxYQorCQkgICAgLi4uCisKKwkJVGhlIE9uU3RyZWFtIFNDLXgwIFNDU0kgdGFwZXMgZG8gbm90IHN1cHBvcnQgdGhlCisJCXN0YW5kYXJkIFNDU0kgU0FTRCBjb21tYW5kIHNldCBhbmQgdGhlcmVmb3JlIG5lZWQKKwkJdGhlaXIgb3duIGRyaXZlciAib3NzdCIuIE5vdGUgdGhhdCB0aGUgSURFLCBVU0IgKGFuZAorCQltYXliZSBQYXJQb3J0KSB2ZXJzaW9ucyBtYXkgYmUgZHJpdmVuIHZpYSBpZGUtc2NzaSBvcgorCQl1c2Itc3RvcmFnZSBTQ1NJIGVtdWxhdGlvbiBhbmQgdGhpcyBvc3N0IGRldmljZSBhbmQKKwkJZHJpdmVyIGFzIHdlbGwuICBUaGUgQURSLXgwIGRyaXZlcyBhcmUgUUlDLTE1NworCQljb21wbGlhbnQgYW5kIGRvbid0IG5lZWQgb3NzdC4KKworMjA3IGNoYXIJQ29tcGFxIFByb0xpYW50IGhlYWx0aCBmZWF0dXJlIGluZGljYXRlCisJCSAgMCA9IC9kZXYvY3BxaGVhbHRoL2NwcXcJUmVkaXJlY3RvciBpbnRlcmZhY2UKKwkJICAxID0gL2Rldi9jcHFoZWFsdGgvY3JvbQlFSVNBIENST00KKwkJICAyID0gL2Rldi9jcHFoZWFsdGgvY2R0CURhdGEgVGFibGUKKwkJICAzID0gL2Rldi9jcHFoZWFsdGgvY2V2dAlFdmVudCBMb2cKKwkJICA0ID0gL2Rldi9jcHFoZWFsdGgvY2FzcglBdXRvbWF0aWMgU2VydmVyIFJlY292ZXJ5CisJCSAgNSA9IC9kZXYvY3BxaGVhbHRoL2NlY2MJRUNDIE1lbW9yeQorCQkgIDYgPSAvZGV2L2NwcWhlYWx0aC9jbWNhCU1hY2hpbmUgQ2hlY2sgQXJjaGl0ZWN0dXJlCisJCSAgNyA9IC9kZXYvY3BxaGVhbHRoL2Njc20JRGVwcmVjYXRlZCBDRFQKKwkJICA4ID0gL2Rldi9jcHFoZWFsdGgvY25taQlOTUkgSGFuZGxpbmcKKwkJICA5ID0gL2Rldi9jcHFoZWFsdGgvY3NzCVNpZGVzaG93IE1hbmFnZW1lbnQKKwkJIDEwID0gL2Rldi9jcHFoZWFsdGgvY3JhbQlDTU9TIGludGVyZmFjZQorCQkgMTEgPSAvZGV2L2NwcWhlYWx0aC9jcGNpCVBDSSBJUlEgaW50ZXJmYWNlCisKKzIwOCBjaGFyCVVzZXIgc3BhY2Ugc2VyaWFsIHBvcnRzCisJCSAgMCA9IC9kZXYvdHR5VTAJCUZpcnN0IHVzZXIgc3BhY2Ugc2VyaWFsIHBvcnQKKwkJICAxID0gL2Rldi90dHlVMQkJU2Vjb25kIHVzZXIgc3BhY2Ugc2VyaWFsIHBvcnQKKwkJICAgIC4uLgorCisyMDkgY2hhcglVc2VyIHNwYWNlIHNlcmlhbCBwb3J0cyAoYWx0ZXJuYXRlIGRldmljZXMpCisJCSAgMCA9IC9kZXYvY3V1MAkJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlVMAorCQkgIDEgPSAvZGV2L2N1dTEJCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5VTEKKwkJICAgIC4uLgorCisyMTAgY2hhcglTQkUsIEluYy4gc3luYy9hc3luYyBzZXJpYWwgY2FyZAorCQkgIDAgPSAvZGV2L3NiZWkvd3hjZmcwCQlDb25maWd1cmF0aW9uIGRldmljZSBmb3IgYm9hcmQgMAorCQkgIDEgPSAvZGV2L3NiZWkvZGxkMAkJRG93bmxvYWQgZGV2aWNlIGZvciBib2FyZCAwCisJCSAgMiA9IC9kZXYvc2JlaS93YW4wMAkJV0FOIGRldmljZSwgcG9ydCAwLCBib2FyZCAwCisJCSAgMyA9IC9kZXYvc2JlaS93YW4wMQkJV0FOIGRldmljZSwgcG9ydCAxLCBib2FyZCAwCisJCSAgNCA9IC9kZXYvc2JlaS93YW4wMgkJV0FOIGRldmljZSwgcG9ydCAyLCBib2FyZCAwCisJCSAgNSA9IC9kZXYvc2JlaS93YW4wMwkJV0FOIGRldmljZSwgcG9ydCAzLCBib2FyZCAwCisJCSAgNiA9IC9kZXYvc2JlaS93YW5jMDAJCVdBTiBjbG9uZSBkZXZpY2UsIHBvcnQgMCwgYm9hcmQgMAorCQkgIDcgPSAvZGV2L3NiZWkvd2FuYzAxCQlXQU4gY2xvbmUgZGV2aWNlLCBwb3J0IDEsIGJvYXJkIDAKKwkJICA4ID0gL2Rldi9zYmVpL3dhbmMwMgkJV0FOIGNsb25lIGRldmljZSwgcG9ydCAyLCBib2FyZCAwCisJCSAgOSA9IC9kZXYvc2JlaS93YW5jMDMJCVdBTiBjbG9uZSBkZXZpY2UsIHBvcnQgMywgYm9hcmQgMAorCQkgMTAgPSAvZGV2L3NiZWkvd3hjZmcxCQlDb25maWd1cmF0aW9uIGRldmljZSBmb3IgYm9hcmQgMQorCQkgMTEgPSAvZGV2L3NiZWkvZGxkMQkJRG93bmxvYWQgZGV2aWNlIGZvciBib2FyZCAxCisJCSAxMiA9IC9kZXYvc2JlaS93YW4xMAkJV0FOIGRldmljZSwgcG9ydCAwLCBib2FyZCAxCisJCSAxMyA9IC9kZXYvc2JlaS93YW4xMQkJV0FOIGRldmljZSwgcG9ydCAxLCBib2FyZCAxCisJCSAxNCA9IC9kZXYvc2JlaS93YW4xMgkJV0FOIGRldmljZSwgcG9ydCAyLCBib2FyZCAxCisJCSAxNSA9IC9kZXYvc2JlaS93YW4xMwkJV0FOIGRldmljZSwgcG9ydCAzLCBib2FyZCAxCisJCSAxNiA9IC9kZXYvc2JlaS93YW5jMTAJCVdBTiBjbG9uZSBkZXZpY2UsIHBvcnQgMCwgYm9hcmQgMQorCQkgMTcgPSAvZGV2L3NiZWkvd2FuYzExCQlXQU4gY2xvbmUgZGV2aWNlLCBwb3J0IDEsIGJvYXJkIDEKKwkJIDE4ID0gL2Rldi9zYmVpL3dhbmMxMgkJV0FOIGNsb25lIGRldmljZSwgcG9ydCAyLCBib2FyZCAxCisJCSAxOSA9IC9kZXYvc2JlaS93YW5jMTMJCVdBTiBjbG9uZSBkZXZpY2UsIHBvcnQgMywgYm9hcmQgMQorCQkgICAgLi4uCisKKwkJWWVzLCBlYWNoIGJvYXJkIGlzIHJlYWxseSBzcGFjZWQgMTAgKGRlY2ltYWwpIGFwYXJ0LgorCisyMTEgY2hhcglBZGRpbnVtIENQQ0kxNTAwIGRpZ2l0YWwgSS9PIGNhcmQKKwkJICAwID0gL2Rldi9hZGRpbnVtL2NwY2kxNTAwLzAJRmlyc3QgQ1BDSTE1MDAgY2FyZAorCQkgIDEgPSAvZGV2L2FkZGludW0vY3BjaTE1MDAvMQlTZWNvbmQgQ1BDSTE1MDAgY2FyZAorCQkgICAgLi4uCisKKzIxMiBjaGFyCUxpbnV4VFYub3JnIERWQiBkcml2ZXIgc3Vic3lzdGVtCisKKwkJICAwID0gL2Rldi9kdmIvYWRhcHRlcjAvdmlkZW8wICAgIGZpcnN0IHZpZGVvIGRlY29kZXIgb2YgZmlyc3QgY2FyZAorCQkgIDEgPSAvZGV2L2R2Yi9hZGFwdGVyMC9hdWRpbzAgICAgZmlyc3QgYXVkaW8gZGVjb2RlciBvZiBmaXJzdCBjYXJkCisJCSAgMiA9IC9kZXYvZHZiL2FkYXB0ZXIwL3NlYzAgICAgICAob2Jzb2xldGUvdW51c2VkKQorCQkgIDMgPSAvZGV2L2R2Yi9hZGFwdGVyMC9mcm9udGVuZDAgZmlyc3QgZnJvbnRlbmQgZGV2aWNlIG9mIGZpcnN0IGNhcmQKKwkJICA0ID0gL2Rldi9kdmIvYWRhcHRlcjAvZGVtdXgwICAgIGZpcnN0IGRlbXV4IGRldmljZSBvZiBmaXJzdCBjYXJkCisJCSAgNSA9IC9kZXYvZHZiL2FkYXB0ZXIwL2R2cjAgICAgICBmaXJzdCBkaWdpdGFsIHZpZGVvIHJlY29kZXIgZGV2aWNlIG9mIGZpcnN0IGNhcmQKKwkJICA2ID0gL2Rldi9kdmIvYWRhcHRlcjAvY2EwICAgICAgIGZpcnN0IGNvbW1vbiBhY2Nlc3MgcG9ydCBvZiBmaXJzdCBjYXJkCisJCSAgNyA9IC9kZXYvZHZiL2FkYXB0ZXIwL25ldDAgICAgICBmaXJzdCBuZXR3b3JrIGRldmljZSBvZiBmaXJzdCBjYXJkCisJCSAgOCA9IC9kZXYvZHZiL2FkYXB0ZXIwL29zZDAgICAgICBmaXJzdCBvbi1zY3JlZW4tZGlzcGxheSBkZXZpY2Ugb2YgZmlyc3QgY2FyZAorCQkgIDkgPSAvZGV2L2R2Yi9hZGFwdGVyMC92aWRlbzEgICAgc2Vjb25kIHZpZGVvIGRlY29kZXIgb2YgZmlyc3QgY2FyZAorCQkgICAgLi4uCisJCSA2NCA9IC9kZXYvZHZiL2FkYXB0ZXIxL3ZpZGVvMCAgICBmaXJzdCB2aWRlbyBkZWNvZGVyIG9mIHNlY29uZCBjYXJkCisJCSAgICAuLi4KKwkJMTI4ID0gL2Rldi9kdmIvYWRhcHRlcjIvdmlkZW8wICAgIGZpcnN0IHZpZGVvIGRlY29kZXIgb2YgdGhpcmQgY2FyZAorCQkgICAgLi4uCisJCTE5NiA9IC9kZXYvZHZiL2FkYXB0ZXIzL3ZpZGVvMCAgICBmaXJzdCB2aWRlbyBkZWNvZGVyIG9mIGZvdXJ0aCBjYXJkCisKKworMjE2IGNoYXIJVVNCIEJsdWVUb290aCBkZXZpY2VzCisJCSAgMCA9IC9kZXYvdHR5VUIwCQlGaXJzdCBVU0IgQmx1ZVRvb3RoIGRldmljZQorCQkgIDEgPSAvZGV2L3R0eVVCMQkJU2Vjb25kIFVTQiBCbHVlVG9vdGggZGV2aWNlCisJCSAgICAuLi4KKworMjE3IGNoYXIJVVNCIEJsdWVUb290aCBkZXZpY2VzIChhbHRlcm5hdGUgZGV2aWNlcykKKwkJICAwID0gL2Rldi9jdXViMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eVVCMAorCQkgIDEgPSAvZGV2L2N1dWIxCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5VUIxCisJCSAgICAuLi4KKworMjE4IGNoYXIJVGhlIExvZ2ljYWwgQ29tcGFueSBidXMgVW5pYnVzL1FidXMgYWRhcHRlcnMKKwkJICAwID0gL2Rldi9sb2dpY2FsY28vYmNpLzAJRmlyc3QgYnVzIGFkYXB0ZXIKKwkJICAxID0gL2Rldi9sb2dpY2FsY28vYmNpLzEJRmlyc3QgYnVzIGFkYXB0ZXIKKwkJICAgIC4uLgorCisyMTkgY2hhcglUaGUgTG9naWNhbCBDb21wYW55IERDSS0xMzAwIGRpZ2l0YWwgSS9PIGNhcmQKKwkJICAwID0gL2Rldi9sb2dpY2FsY28vZGNpMTMwMC8wCUZpcnN0IERDSS0xMzAwIGNhcmQKKwkJICAxID0gL2Rldi9sb2dpY2FsY28vZGNpMTMwMC8xCVNlY29uZCBEQ0ktMTMwMCBjYXJkCisJCSAgICAuLi4KKworMjIwIGNoYXIJTXlyaWNvbSBNeXJpbmV0ICJHTSIgYm9hcmQKKwkJICAwID0gL2Rldi9teXJpY29tL2dtMAkJRmlyc3QgTXlyaW5ldCBHTSBib2FyZAorCQkgIDEgPSAvZGV2L215cmljb20vZ21wMAkJRmlyc3QgYm9hcmQgInJvb3QgYWNjZXNzIgorCQkgIDIgPSAvZGV2L215cmljb20vZ20xCQlTZWNvbmQgTXlyaW5ldCBHTSBib2FyZAorCQkgIDMgPSAvZGV2L215cmljb20vZ21wMQkJU2Vjb25kIGJvYXJkICJyb290IGFjY2VzcyIKKwkJICAgIC4uLgorCisyMjEgY2hhcglWTUUgYnVzCisJCSAgMCA9IC9kZXYvYnVzL3ZtZS9tMAkJRmlyc3QgbWFzdGVyIGltYWdlCisJCSAgMSA9IC9kZXYvYnVzL3ZtZS9tMQkJU2Vjb25kIG1hc3RlciBpbWFnZQorCQkgIDIgPSAvZGV2L2J1cy92bWUvbTIJCVRoaXJkIG1hc3RlciBpbWFnZQorCQkgIDMgPSAvZGV2L2J1cy92bWUvbTMJCUZvdXJ0aCBtYXN0ZXIgaW1hZ2UKKwkJICA0ID0gL2Rldi9idXMvdm1lL3MwCQlGaXJzdCBzbGF2ZSBpbWFnZQorCQkgIDUgPSAvZGV2L2J1cy92bWUvczEJCVNlY29uZCBzbGF2ZSBpbWFnZQorCQkgIDYgPSAvZGV2L2J1cy92bWUvczIJCVRoaXJkIHNsYXZlIGltYWdlCisJCSAgNyA9IC9kZXYvYnVzL3ZtZS9zMwkJRm91cnRoIHNsYXZlIGltYWdlCisJCSAgOCA9IC9kZXYvYnVzL3ZtZS9jdGwJCUNvbnRyb2wKKworCQlJdCBpcyBleHBlY3RlZCB0aGF0IGFsbCBWTUUgYnVzIGRyaXZlcnMgd2lsbCB1c2UgdGhlCisJCXNhbWUgaW50ZXJmYWNlLiAgRm9yIGludGVyZmFjZSBkb2N1bWVudGF0aW9uIHNlZQorCQlodHRwOi8vd3d3LnZtZWxpbnV4Lm9yZy8uCisKKzIyNCBjaGFyCUEyMjMyIHNlcmlhbCBjYXJkCisJCSAgMCA9IC9kZXYvdHR5WTAJCUZpcnN0IEEyMjMyIHBvcnQKKwkJICAxID0gL2Rldi90dHlZMQkJU2Vjb25kIEEyMjMyIHBvcnQKKwkJICAgIC4uLgorCisyMjUgY2hhcglBMjIzMiBzZXJpYWwgY2FyZCAoYWx0ZXJuYXRlIGRldmljZXMpCisJCSAgMCA9IC9kZXYvY3V5MAkJCUNhbGxvdXQgZGV2aWNlIGZvciB0dHlZMAorCQkgIDEgPSAvZGV2L2N1eTEJCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5WTEKKwkJICAgIC4uLgorCisyMjYgY2hhcglEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkpCisJCSAgMCA9IC9kZXYvZHJpL2NhcmQwCQlGaXJzdCBncmFwaGljcyBjYXJkCisJCSAgMSA9IC9kZXYvZHJpL2NhcmQxCQlTZWNvbmQgZ3JhcGhpY3MgY2FyZAorCQkgICAgLi4uCisKKzIyNyBjaGFyCUlCTSAzMjcwIHRlcm1pbmFsIFVuaXggdHR5IGFjY2VzcworCQkgIDEgPSAvZGV2LzMyNzAvdHR5MQkJRmlyc3QgMzI3MCB0ZXJtaW5hbAorCQkgIDIgPSAvZGV2LzMyNzAvdHR5MgkJU2Vjb25kcyAzMjcwIHRlcm1pbmFsCisJCSAgICAuLi4KKworMjI4IGNoYXIJSUJNIDMyNzAgdGVybWluYWwgYmxvY2stbW9kZSBhY2Nlc3MKKwkJICAwID0gL2Rldi8zMjcwL3R1YgkJQ29udHJvbGxpbmcgaW50ZXJmYWNlCisJCSAgMSA9IC9kZXYvMzI3MC90dWIxCQlGaXJzdCAzMjcwIHRlcm1pbmFsCisJCSAgMiA9IC9kZXYvMzI3MC90dWIyCQlTZWNvbmQgMzI3MCB0ZXJtaW5hbAorCQkgICAgLi4uCisKKzIyOSBjaGFyCUlCTSBpU2VyaWVzIHZpcnR1YWwgY29uc29sZQorCQkgIDAgPSAvZGV2L2lzZXJpZXMvdnR0eTAJRmlyc3QgY29uc29sZSBwb3J0CisJCSAgMSA9IC9kZXYvaXNlcmllcy92dHR5MQlTZWNvbmQgY29uc29sZSBwb3J0CisJCSAgICAuLi4KKworMjMwIGNoYXIJSUJNIGlTZXJpZXMgdmlydHVhbCB0YXBlCisJCSAgMCA9IC9kZXYvaXNlcmllcy92dDAJCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAwCisJCSAgMSA9IC9kZXYvaXNlcmllcy92dDEJCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMAorCQkgICAgLi4uCisJCSAzMiA9IC9kZXYvaXNlcmllcy92dDBsCQlGaXJzdCB2aXJ0dWFsIHRhcGUsIG1vZGUgMQorCQkgMzMgPSAvZGV2L2lzZXJpZXMvdnQxbAkJU2Vjb25kIHZpcnR1YWwgdGFwZSwgbW9kZSAxCisJCSAgICAuLi4KKwkJIDY0ID0gL2Rldi9pc2VyaWVzL3Z0MG0JCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAyCisJCSA2NSA9IC9kZXYvaXNlcmllcy92dDFtCQlTZWNvbmQgdmlydHVhbCB0YXBlLCBtb2RlIDIKKwkJICAgIC4uLgorCQkgOTYgPSAvZGV2L2lzZXJpZXMvdnQwYQkJRmlyc3QgdmlydHVhbCB0YXBlLCBtb2RlIDMKKwkJIDk3ID0gL2Rldi9pc2VyaWVzL3Z0MWEJCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMworCQkgICAgICAuLi4KKwkJMTI4ID0gL2Rldi9pc2VyaWVzL252dDAJCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAwLCBubyByZXdpbmQKKwkJMTI5ID0gL2Rldi9pc2VyaWVzL252dDEJCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMCwgbm8gcmV3aW5kCisJCSAgICAuLi4KKwkJMTYwID0gL2Rldi9pc2VyaWVzL252dDBsCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAxLCBubyByZXdpbmQKKwkJMTYxID0gL2Rldi9pc2VyaWVzL252dDFsCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMSwgbm8gcmV3aW5kCisJCSAgICAuLi4KKwkJMTkyID0gL2Rldi9pc2VyaWVzL252dDBtCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAyLCBubyByZXdpbmQKKwkJMTkzID0gL2Rldi9pc2VyaWVzL252dDFtCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMiwgbm8gcmV3aW5kCisJCSAgICAuLi4KKwkJMjI0ID0gL2Rldi9pc2VyaWVzL252dDBhCUZpcnN0IHZpcnR1YWwgdGFwZSwgbW9kZSAzLCBubyByZXdpbmQKKwkJMjI1ID0gL2Rldi9pc2VyaWVzL252dDFhCVNlY29uZCB2aXJ0dWFsIHRhcGUsIG1vZGUgMywgbm8gcmV3aW5kCisJCSAgICAuLi4KKworCQkiTm8gcmV3aW5kIiByZWZlcnMgdG8gdGhlIG9taXNzaW9uIG9mIHRoZSBkZWZhdWx0CisJCWF1dG9tYXRpYyByZXdpbmQgb24gZGV2aWNlIGNsb3NlLiAgVGhlIE1UUkVXIG9yIE1UT0ZGTAorCQlpb2N0bCgpJ3MgY2FuIGJlIHVzZWQgdG8gcmV3aW5kIHRoZSB0YXBlIHJlZ2FyZGxlc3Mgb2YKKwkJdGhlIGRldmljZSB1c2VkIHRvIGFjY2VzcyBpdC4KKworMjMxIGNoYXIJSW5maW5pQmFuZCBNQUQKKwkJMCA9IC9kZXYvaW5maW5pYmFuZC91bWFkMAorCQkxID0gL2Rldi9pbmZpbmliYW5kL3VtYWQxCisJCSAuLi4KKworMjMyLTIzOQkJVU5BU1NJR05FRAorCisyNDAtMjU0IGNoYXIJTE9DQUwvRVhQRVJJTUVOVEFMIFVTRQorMjQwLTI1NCBibG9jawlMT0NBTC9FWFBFUklNRU5UQUwgVVNFCisJCUFsbG9jYXRlZCBmb3IgbG9jYWwvZXhwZXJpbWVudGFsIHVzZS4gIEZvciBkZXZpY2VzIG5vdAorCQlhc3NpZ25lZCBvZmZpY2lhbCBudW1iZXJzLCB0aGVzZSByYW5nZXMgc2hvdWxkIGJlCisJCXVzZWQgaW4gb3JkZXIgdG8gYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCBmdXR1cmUgYXNzaWdubWVudHMuCisKKzI1NSBjaGFyCVJFU0VSVkVECisyNTUgYmxvY2sJUkVTRVJWRUQKKworCQlUaGlzIG1ham9yIGlzIHJlc2VydmVkIHRvIGFzc2lzdCB0aGUgZXhwYW5zaW9uIHRvIGEKKwkJbGFyZ2VyIG51bWJlciBzcGFjZS4gIE5vIGRldmljZSBub2RlcyB3aXRoIHRoaXMgbWFqb3IKKwkJc2hvdWxkIGV2ZXIgYmUgY3JlYXRlZCBvbiB0aGUgZmlsZXN5c3RlbS4KKworICoqKioJQURESVRJT05BTCAvZGV2IERJUkVDVE9SWSBFTlRSSUVTCisKK1RoaXMgc2VjdGlvbiBkZXRhaWxzIGFkZGl0aW9uYWwgZW50cmllcyB0aGF0IHNob3VsZCBvciBtYXkgZXhpc3QgaW4KK3RoZSAvZGV2IGRpcmVjdG9yeS4gIEl0IGlzIHByZWZlcnJlZCB0aGF0IHN5bWJvbGljIGxpbmtzIHVzZSB0aGUgc2FtZQorZm9ybSAoYWJzb2x1dGUgb3IgcmVsYXRpdmUpIGFzIGlzIGluZGljYXRlZCBoZXJlLiAgTGlua3MgYXJlCitjbGFzc2lmaWVkIGFzICJoYXJkIiBvciAic3ltYm9saWMiIGRlcGVuZGluZyBvbiB0aGUgcHJlZmVycmVkIHR5cGUgb2YKK2xpbms7IGlmIHBvc3NpYmxlLCB0aGUgaW5kaWNhdGVkIHR5cGUgb2YgbGluayBzaG91bGQgYmUgdXNlZC4KKworCisJQ29tcHVsc29yeSBsaW5rcworCitUaGVzZSBsaW5rcyBzaG91bGQgZXhpc3Qgb24gYWxsIHN5c3RlbXM6CisKKy9kZXYvZmQJCS9wcm9jL3NlbGYvZmQJc3ltYm9saWMJRmlsZSBkZXNjcmlwdG9ycworL2Rldi9zdGRpbglmZC8wCQlzeW1ib2xpYwlzdGRpbiBmaWxlIGRlc2NyaXB0b3IKKy9kZXYvc3Rkb3V0CWZkLzEJCXN5bWJvbGljCXN0ZG91dCBmaWxlIGRlc2NyaXB0b3IKKy9kZXYvc3RkZXJyCWZkLzIJCXN5bWJvbGljCXN0ZGVyciBmaWxlIGRlc2NyaXB0b3IKKy9kZXYvbmZzZAlzb2Nrc3lzCQlzeW1ib2xpYwlSZXF1aXJlZCBieSBpQkNTLTIKKy9kZXYvWDBSCW51bGwJCXN5bWJvbGljCVJlcXVpcmVkIGJ5IGlCQ1MtMgorCitOb3RlOiAvZGV2L1gwUiBpcyA8bGV0dGVyIFg+LTxkaWdpdCAwPi08bGV0dGVyIFI+LgorCisJUmVjb21tZW5kZWQgbGlua3MKKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGVzZSBsaW5rcyBleGlzdCBvbiBhbGwgc3lzdGVtczoKKworL2Rldi9jb3JlCS9wcm9jL2tjb3JlCXN5bWJvbGljCUJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKy9kZXYvcmFtZGlzawlyYW0wCQlzeW1ib2xpYwlCYWNrd2FyZCBjb21wYXRpYmlsaXR5CisvZGV2L2Z0YXBlCXFmdDAJCXN5bWJvbGljCUJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKy9kZXYvYnR0djAJdmlkZW8wCQlzeW1ib2xpYwlCYWNrd2FyZCBjb21wYXRpYmlsaXR5CisvZGV2L3JhZGlvCXJhZGlvMAkJc3ltYm9saWMJQmFja3dhcmQgY29tcGF0aWJpbGl0eQorL2Rldi9pMm8qCS9kZXYvaTJvLyoJc3ltYm9saWMJQmFja3dhcmQgY29tcGF0aWJpbGl0eQorL2Rldi9zY2Q/CXNyPwkJaGFyZAkJQWx0ZXJuYXRlIFNDU0kgQ0QtUk9NIG5hbWUKKworCUxvY2FsbHkgZGVmaW5lZCBsaW5rcworCitUaGUgZm9sbG93aW5nIGxpbmtzIG1heSBiZSBlc3RhYmxpc2hlZCBsb2NhbGx5IHRvIGNvbmZvcm0gdG8gdGhlCitjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uICBUaGlzIGlzIG1lcmVseSBhIHRhYnVsYXRpb24gb2YgZXhpc3RpbmcKK3ByYWN0aWNlLCBhbmQgZG9lcyBub3QgY29uc3RpdHV0ZSBhIHJlY29tbWVuZGF0aW9uLiAgSG93ZXZlciwgaWYgdGhleQorZXhpc3QsIHRoZXkgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyB1c2VzLgorCisvZGV2L21vdXNlCW1vdXNlIHBvcnQJc3ltYm9saWMJQ3VycmVudCBtb3VzZSBkZXZpY2UKKy9kZXYvdGFwZQl0YXBlIGRldmljZQlzeW1ib2xpYwlDdXJyZW50IHRhcGUgZGV2aWNlCisvZGV2L2Nkcm9tCUNELVJPTSBkZXZpY2UJc3ltYm9saWMJQ3VycmVudCBDRC1ST00gZGV2aWNlCisvZGV2L2Nkd3JpdGVyCUNELXdyaXRlcglzeW1ib2xpYwlDdXJyZW50IENELXdyaXRlciBkZXZpY2UKKy9kZXYvc2Nhbm5lcglzY2FubmVyCQlzeW1ib2xpYwlDdXJyZW50IHNjYW5uZXIgZGV2aWNlCisvZGV2L21vZGVtCW1vZGVtIHBvcnQJc3ltYm9saWMJQ3VycmVudCBkaWFsb3V0IGRldmljZQorL2Rldi9yb290CXJvb3QgZGV2aWNlCXN5bWJvbGljCUN1cnJlbnQgcm9vdCBmaWxlc3lzdGVtCisvZGV2L3N3YXAJc3dhcCBkZXZpY2UJc3ltYm9saWMJQ3VycmVudCBzd2FwIGRldmljZQorCisvZGV2L21vZGVtIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYSBtb2RlbSB3aGljaCBzdXBwb3J0cyBkaWFsaW4gYXMKK3dlbGwgYXMgZGlhbG91dCwgYXMgaXQgdGVuZHMgdG8gY2F1c2UgbG9jayBmaWxlIHByb2JsZW1zLiAgSWYgaXQKK2V4aXN0cywgL2Rldi9tb2RlbSBzaG91bGQgcG9pbnQgdG8gdGhlIGFwcHJvcHJpYXRlIHByaW1hcnkgVFRZIGRldmljZQorKHRoZSB1c2Ugb2YgdGhlIGFsdGVybmF0ZSBjYWxsb3V0IGRldmljZXMgaXMgZGVwcmVjYXRlZCkuCisKK0ZvciBTQ1NJIGRldmljZXMsIC9kZXYvdGFwZSBhbmQgL2Rldi9jZHJvbSBzaG91bGQgcG9pbnQgdG8gdGhlCitgYGNvb2tlZCcnIGRldmljZXMgKC9kZXYvc3QqIGFuZCAvZGV2L3NyKiwgcmVzcGVjdGl2ZWx5KSwgd2hlcmVhcworL2Rldi9jZHdyaXRlciBhbmQgL2Rldi9zY2FubmVyIHNob3VsZCBwb2ludCB0byB0aGUgYXBwcm9wcmlhdGUgZ2VuZXJpYworU0NTSSBkZXZpY2VzICgvZGV2L3NnKikuCisKKy9kZXYvbW91c2UgbWF5IHBvaW50IHRvIGEgcHJpbWFyeSBzZXJpYWwgVFRZIGRldmljZSwgYSBoYXJkd2FyZSBtb3VzZQorZGV2aWNlLCBvciBhIHNvY2tldCBmb3IgYSBtb3VzZSBkcml2ZXIgcHJvZ3JhbSAoZS5nLiAvZGV2L2dwbWRhdGEpLgorCisJU29ja2V0cyBhbmQgcGlwZXMKKworTm9uLXRyYW5zaWVudCBzb2NrZXRzIGFuZCBuYW1lZCBwaXBlcyBtYXkgZXhpc3QgaW4gL2Rldi4gIENvbW1vbiBlbnRyaWVzIGFyZToKKworL2Rldi9wcmludGVyCXNvY2tldAkJbHBkIGxvY2FsIHNvY2tldAorL2Rldi9sb2cJc29ja2V0CQlzeXNsb2cgbG9jYWwgc29ja2V0CisvZGV2L2dwbWRhdGEJc29ja2V0CQlncG0gbW91c2UgbXVsdGlwbGV4ZXIKKworCU1vdW50IHBvaW50cworCitUaGUgZm9sbG93aW5nIG5hbWVzIGFyZSByZXNlcnZlZCBmb3IgbW91bnRpbmcgc3BlY2lhbCBmaWxlc3lzdGVtcwordW5kZXIgL2Rldi4gIFRoZXNlIHNwZWNpYWwgZmlsZXN5c3RlbXMgcHJvdmlkZSBrZXJuZWwgaW50ZXJmYWNlcyB0aGF0CitjYW5ub3QgYmUgcHJvdmlkZWQgd2l0aCBzdGFuZGFyZCBkZXZpY2Ugbm9kZXMuCisKKy9kZXYvcHRzCWRldnB0cwkJUFRZIHNsYXZlIGZpbGVzeXN0ZW0KKy9kZXYvc2htCXRtcGZzCQlQT1NJWCBzaGFyZWQgbWVtb3J5IG1haW50ZW5hbmNlIGFjY2VzcworCisgKioqKglURVJNSU5BTCBERVZJQ0VTCisKK1Rlcm1pbmFsLCBvciBUVFkgZGV2aWNlcyBhcmUgYSBzcGVjaWFsIGNsYXNzIG9mIGNoYXJhY3RlciBkZXZpY2VzLiAgQQordGVybWluYWwgZGV2aWNlIGlzIGFueSBkZXZpY2UgdGhhdCBjb3VsZCBhY3QgYXMgYSBjb250cm9sbGluZyB0ZXJtaW5hbAorZm9yIGEgc2Vzc2lvbjsgdGhpcyBpbmNsdWRlcyB2aXJ0dWFsIGNvbnNvbGVzLCBzZXJpYWwgcG9ydHMsIGFuZAorcHNldWRvdGVybWluYWxzIChQVFlzKS4KKworQWxsIHRlcm1pbmFsIGRldmljZXMgc2hhcmUgYSBjb21tb24gc2V0IG9mIGNhcGFiaWxpdGllcyBrbm93biBhcyBsaW5lCitkaWNpcGxpbmVzOyB0aGVzZSBpbmNsdWRlIHRoZSBjb21tb24gdGVybWluYWwgbGluZSBkaWNpcGxpbmUgYXMgd2VsbAorYXMgU0xJUCBhbmQgUFBQIG1vZGVzLgorCitBbGwgdGVybWluYWwgZGV2aWNlcyBhcmUgbmFtZWQgc2ltaWxhcmx5OyB0aGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlCituYW1pbmcgYW5kIHVzZSBvZiB0aGUgdmFyaW91cyB0eXBlcyBvZiBUVFlzLiAgTm90ZSB0aGF0IHRoZSBuYW1pbmcKK2NvbnZlbnRpb25zIGluY2x1ZGUgc2V2ZXJhbCBoaXN0b3JpY2FsIHdhcnRzOyBzb21lIG9mIHRoZXNlIGFyZQorTGludXgtc3BlY2lmaWMsIHNvbWUgd2VyZSBpbmhlcml0ZWQgZnJvbSBvdGhlciBzeXN0ZW1zLCBhbmQgc29tZQorcmVmbGVjdCBMaW51eCBvdXRncm93aW5nIGEgYm9ycm93ZWQgY29udmVudGlvbi4KKworQSBoYXNoIG1hcmsgKCMpIGluIGEgZGV2aWNlIG5hbWUgaXMgdXNlZCBoZXJlIHRvIGluZGljYXRlIGEgZGVjaW1hbAorbnVtYmVyIHdpdGhvdXQgbGVhZGluZyB6ZXJvZXMuCisKKwlWaXJ0dWFsIGNvbnNvbGVzIGFuZCB0aGUgY29uc29sZSBkZXZpY2UKKworVmlydHVhbCBjb25zb2xlcyBhcmUgZnVsbC1zY3JlZW4gdGVybWluYWwgZGlzcGxheXMgb24gdGhlIHN5c3RlbSB2aWRlbworbW9uaXRvci4gIFZpcnR1YWwgY29uc29sZXMgYXJlIG5hbWVkIC9kZXYvdHR5Iywgd2l0aCBudW1iZXJpbmcKK3N0YXJ0aW5nIGF0IC9kZXYvdHR5MTsgL2Rldi90dHkwIGlzIHRoZSBjdXJyZW50IHZpcnR1YWwgY29uc29sZS4KKy9kZXYvdHR5MCBpcyB0aGUgZGV2aWNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBzeXN0ZW0gdmlkZW8KK2NhcmQgb24gdGhvc2UgYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2VzCisoL2Rldi9mYiopIGFyZSBub3QgYXBwbGljYWJsZS4JRG8gbm90IHVzZSAvZGV2L2NvbnNvbGUKK2ZvciB0aGlzIHB1cnBvc2UuCisKK1RoZSBjb25zb2xlIGRldmljZSwgL2Rldi9jb25zb2xlLCBpcyB0aGUgZGV2aWNlIHRvIHdoaWNoIHN5c3RlbQorbWVzc2FnZXMgc2hvdWxkIGJlIHNlbnQsIGFuZCBvbiB3aGljaCBsb2dpbnMgc2hvdWxkIGJlIHBlcm1pdHRlZCBpbgorc2luZ2xlLXVzZXIgbW9kZS4gIFN0YXJ0aW5nIHdpdGggTGludXggMi4xLjcxLCAvZGV2L2NvbnNvbGUgaXMgbWFuYWdlZAorYnkgdGhlIGtlcm5lbDsgZm9yIHByZXZpb3VzIHZlcnNpb25zIGl0IHNob3VsZCBiZSBhIHN5bWJvbGljIGxpbmsgdG8KK2VpdGhlciAvZGV2L3R0eTAsIGEgc3BlY2lmaWMgdmlydHVhbCBjb25zb2xlIHN1Y2ggYXMgL2Rldi90dHkxLCBvciB0bworYSBzZXJpYWwgcG9ydCBwcmltYXJ5ICh0dHkqLCBub3QgY3UqKSBkZXZpY2UsIGRlcGVuZGluZyBvbiB0aGUKK2NvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4KKworCVNlcmlhbCBwb3J0cworCitTZXJpYWwgcG9ydHMgYXJlIFJTLTIzMiBzZXJpYWwgcG9ydHMgYW5kIGFueSBkZXZpY2Ugd2hpY2ggc2ltdWxhdGVzCitvbmUsIGVpdGhlciBpbiBoYXJkd2FyZSAoc3VjaCBhcyBpbnRlcm5hbCBtb2RlbXMpIG9yIGluIHNvZnR3YXJlIChzdWNoCithcyB0aGUgSVNETiBkcml2ZXIuKSAgVW5kZXIgTGludXgsIGVhY2ggc2VyaWFsIHBvcnRzIGhhcyB0d28gZGV2aWNlCituYW1lcywgdGhlIHByaW1hcnkgb3IgY2FsbGluIGRldmljZSBhbmQgdGhlIGFsdGVybmF0ZSBvciBjYWxsb3V0IG9uZS4KK0VhY2gga2luZCBvZiBkZXZpY2UgaXMgaW5kaWNhdGVkIGJ5IGEgZGlmZmVyZW50IGxldHRlci4JIEZvciBhbnkKK2xldHRlciBYLCB0aGUgbmFtZXMgb2YgdGhlIGRldmljZXMgYXJlIC9kZXYvdHR5WCMgYW5kIC9kZXYvY3V4IywKK3Jlc3BlY3RpdmVseTsgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgL2Rldi90dHlTIyBhbmQgL2Rldi90dHlDIworY29ycmVzcG9uZCB0byAvZGV2L2N1YSMgYW5kIC9kZXYvY3ViIy4JSW4gdGhlIGZ1dHVyZSwgaXQgc2hvdWxkIGJlCitleHBlY3RlZCB0aGF0IG11bHRpcGxlIGxldHRlcnMgd2lsbCBiZSB1c2VkOyBhbGwgbGV0dGVycyB3aWxsIGJlIHVwcGVyCitjYXNlIGZvciB0aGUgInR0eSIgZGV2aWNlIChlLmcuIC9kZXYvdHR5RFAjKSBhbmQgbG93ZXIgY2FzZSBmb3IgdGhlCisiY3UiIGRldmljZSAoZS5nLiAvZGV2L2N1ZHAjKS4KKworVGhlIG5hbWVzIC9kZXYvdHR5USMgYW5kIC9kZXYvY3VxIyBhcmUgcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZS4KKworVGhlIGFsdGVybmF0ZSBkZXZpY2VzIHByb3ZpZGUgZm9yIGtlcm5lbC1iYXNlZCBleGNsdXNpb24gYW5kIHNvbWV3aGF0CitkaWZmZXJlbnQgZGVmYXVsdHMgdGhhbiB0aGUgcHJpbWFyeSBkZXZpY2VzLiAgVGhlaXIgbWFpbiBwdXJwb3NlIGlzIHRvCithbGxvdyB0aGUgdXNlIG9mIHNlcmlhbCBwb3J0cyB3aXRoIHByb2dyYW1zIHdpdGggbm8gaW5oZXJlbnQgb3IgYnJva2VuCitzdXBwb3J0IGZvciBzZXJpYWwgcG9ydHMuICBUaGVpciB1c2UgaXMgZGVwcmVjYXRlZCwgYW5kIHRoZXkgbWF5IGJlCityZW1vdmVkIGZyb20gYSBmdXR1cmUgdmVyc2lvbiBvZiBMaW51eC4KKworQXJiaXRyYXRpb24gb2Ygc2VyaWFsIHBvcnRzIGlzIHByb3ZpZGVkIGJ5IHRoZSB1c2Ugb2YgbG9jayBmaWxlcyB3aXRoCit0aGUgbmFtZXMgL3Zhci9sb2NrL0xDSy4udHR5WCMuCSBUaGUgY29udGVudHMgb2YgdGhlIGxvY2sgZmlsZSBzaG91bGQKK2JlIHRoZSBQSUQgb2YgdGhlIGxvY2tpbmcgcHJvY2VzcyBhcyBhbiBBU0NJSSBudW1iZXIuCisKK0l0IGlzIGNvbW1vbiBwcmFjdGljZSB0byBpbnN0YWxsIGxpbmtzIHN1Y2ggYXMgL2Rldi9tb2RlbQord2hpY2ggcG9pbnQgdG8gc2VyaWFsIHBvcnRzLiAgSW4gb3JkZXIgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIGluIHRoZQorcHJlc2VuY2Ugb2YgdGhlc2UgbGlua3MsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgc29mdHdhcmUgY2hhc2UKK3N5bWxpbmtzIGFuZCBsb2NrIGFsbCBwb3NzaWJsZSBuYW1lczsgYWRkaXRpb25hbGx5LCBpdCBpcyByZWNvbW1lbmRlZAordGhhdCBhIGxvY2sgZmlsZSBiZSBpbnN0YWxsZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBhbHRlcm5hdGUKK2RldmljZS4JIEluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgbG9ja3MKK2FyZSBhY3F1aXJlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyLCBhbmQgcmVsZWFzZWQgaW4gdGhlIHJldmVyc2U6CisKKwkxLiBUaGUgc3ltYm9saWMgbGluayBuYW1lLCBpZiBhbnkgKC92YXIvbG9jay9MQ0suLm1vZGVtKQorCTIuIFRoZSAidHR5IiBuYW1lICgvdmFyL2xvY2svTENLLi50dHlTMikKKwkzLiBUaGUgYWx0ZXJuYXRlIGRldmljZSBuYW1lICgvdmFyL2xvY2svTENLLi5jdWEyKQorCitJbiB0aGUgY2FzZSBvZiBuZXN0ZWQgc3ltYm9saWMgbGlua3MsIHRoZSBsb2NrIGZpbGVzIHNob3VsZCBiZQoraW5zdGFsbGVkIGluIHRoZSBvcmRlciB0aGUgc3ltbGlua3MgYXJlIHJlc29sdmVkLgorCitVbmRlciBubyBjaXJjdW1zdGFuY2VzIHNob3VsZCBhbiBhcHBsaWNhdGlvbiBob2xkIGEgbG9jayB3aGlsZSB3YWl0aW5nCitmb3IgYW5vdGhlciB0byBiZSByZWxlYXNlZC4gIEluIGFkZGl0aW9uLCBhcHBsaWNhdGlvbnMgd2hpY2ggYXR0ZW1wdAordG8gY3JlYXRlIGxvY2sgZmlsZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGFsdGVybmF0ZSBkZXZpY2UgbmFtZXMKK3Nob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcgdXNlZCBvbiBhIG5vbi1zZXJpYWwKK3BvcnQgVFRZLCBmb3Igd2hpY2ggbm8gYWx0ZXJuYXRlIGRldmljZSB3b3VsZCBleGlzdC4KKworCVBzZXVkb3Rlcm1pbmFscyAoUFRZcykKKworUHNldWRvdGVybWluYWxzLCBvciBQVFlzLCBhcmUgdXNlZCB0byBjcmVhdGUgbG9naW4gc2Vzc2lvbnMgb3IgcHJvdmlkZQorb3RoZXIgY2FwYWJpbGl0aWVzIHJlcXVpcmluZyBhIFRUWSBsaW5lIGRpY2lwbGluZSAoaW5jbHVkaW5nIFNMSVAgb3IKK1BQUCBjYXBhYmlsaXR5KSB0byBhcmJpdHJhcnkgZGF0YS1nZW5lcmF0aW9uIHByb2Nlc3Nlcy4JIEVhY2ggUFRZIGhhcworYSBtYXN0ZXIgc2lkZSwgbmFtZWQgL2Rldi9wdHlbcC16YS1lXVswLTlhLWZdLCBhbmQgYSBzbGF2ZSBzaWRlLCBuYW1lZAorL2Rldi90dHlbcC16YS1lXVswLTlhLWZdLiAgVGhlIGtlcm5lbCBhcmJpdHJhdGVzIHRoZSB1c2Ugb2YgUFRZcyBieQorYWxsb3dpbmcgZWFjaCBtYXN0ZXIgc2lkZSB0byBiZSBvcGVuZWQgb25seSBvbmNlLgorCitPbmNlIHRoZSBtYXN0ZXIgc2lkZSBoYXMgYmVlbiBvcGVuZWQsIHRoZSBjb3JyZXNwb25kaW5nIHNsYXZlIGRldmljZQorY2FuIGJlIHVzZWQgaW4gdGhlIHNhbWUgbWFubmVyIGFzIGFueSBUVFkgZGV2aWNlLiAgVGhlIG1hc3RlciBhbmQKK3NsYXZlIGRldmljZXMgYXJlIGNvbm5lY3RlZCBieSB0aGUga2VybmVsLCBnZW5lcmF0aW5nIHRoZSBlcXVpdmFsZW50CitvZiBhIGJpZGlyZWN0aW9uYWwgcGlwZSB3aXRoIFRUWSBjYXBhYmlsaXRpZXMuCisKK1JlY2VudCB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVscyBhbmQgR05VIGxpYmMgY29udGFpbiBzdXBwb3J0IGZvcgordGhlIFN5c3RlbSBWL1VuaXg5OCBuYW1pbmcgc2NoZW1lIGZvciBQVFlzLCB3aGljaCBhc3NpZ25zIGEgY29tbW9uCitkZXZpY2UsIC9kZXYvcHRteCwgdG8gYWxsIHRoZSBtYXN0ZXJzIChvcGVuaW5nIGl0IHdpbGwgYXV0b21hdGljYWxseQorZ2l2ZSB5b3UgYSBwcmV2aW91c2x5IHVuYXNzaWduZWQgUFRZKSBhbmQgYSBzdWJkaXJlY3RvcnksIC9kZXYvcHRzLAorZm9yIHRoZSBzbGF2ZXM7IHRoZSBzbGF2ZXMgYXJlIG5hbWVkIHdpdGggZGVjaW1hbCBpbnRlZ2VycyAoL2Rldi9wdHMvIworaW4gb3VyIG5vdGF0aW9uKS4gIFRoaXMgcmVtb3ZlcyB0aGUgcHJvYmxlbSBvZiBleGhhdXN0aW5nIHRoZQorbmFtZXNwYWNlIGFuZCBlbmFibGVzIHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIGRldmljZQorbm9kZXMgZm9yIHRoZSBzbGF2ZXMgb24gZGVtYW5kIHVzaW5nIHRoZSAiZGV2cHRzIiBmaWxlc3lzdGVtLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZ2llcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vZGlnaWVwY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZ2llcGNhLnR4dApAQCAtMCwwICsxLDk4IEBACitOT1RFOiAgVGhpcyBkcml2ZXIgaXMgb2Jzb2xldGUuICBEaWdpIHByb3ZpZGVzIGEgMi42IGRyaXZlciAoZGdkbSkgYXQKK2h0dHA6Ly93d3cuZGlnaS5jb20gZm9yIFBDSSBjYXJkcy4gIFRoZXkgbm8gbG9uZ2VyIG1haW50YWluIHRoaXMgZHJpdmVyLAorYW5kIGhhdmUgbm8gMi42IGRyaXZlciBmb3IgSVNBIGNhcmRzLgorCitUaGlzIGRyaXZlciByZXF1aXJlcyBhIG51bWJlciBvZiB1c2VyLXNwYWNlIHRvb2xzLiAgVGhleSBjYW4gYmUgYXF1aXJlZCBmcm9tCitodHRwOi8vd3d3LmRpZ2kuY29tLCBidXQgb25seSB3b3JrcyB3aXRoIDIuNCBrZXJuZWxzLgorCisKK1RoZSBEaWdpIEludGwuIGVwY2EgZHJpdmVyLiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBEaWdpIEludGwuIGVwY2EgZHJpdmVyIGZvciBMaW51eCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGJvYXJkczoKKworRGlnaSBQQy9YZW0sIFBDL1hyLCBQQy9YZSwgUEMvWGksIFBDL1hldmUgCitEaWdpIEVJU0EvWGVtLCBQQ0kvWGVtLCBQQ0kvWHIgCisKK0xpbWl0YXRpb25zOgorLS0tLS0tLS0tLS0tCitDdXJyZW50bHkgdGhlIGRyaXZlciBvbmx5IGF1dG9wcm9iZXMgZm9yIHN1cHBvcnRlZCBQQ0kgYm9hcmRzLiAKKworVGhlIExpbnV4IE1BS0VERVYgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyYXRpbmcgdGhlIERpZ2lib2FyZAorRGV2aWNlcy4gIFVzZXJzIGV4ZWN1dGluZyBkaWdpQ29uZmlnIHRvIHNldHVwIEVJU0EgYW5kIFBDIHNlcmllcyBjYXJkcword2lsbCBoYXZlIHRoZWlyIGRldmljZSBub2RlcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkIChjdWQ/PyBmb3IgfkNMT0NBTCwKK2FuZCB0dHlEPz8gZm9yIENMT0NBTCkuICBVc2VycyB3aXNoaW5nIHRvIGJvb3QgdGhlaXIgYm9hcmQgZnJvbSB0aGUgTElMTworcHJvbXB0LCBvciB0aG9zZSB1c2VycyBib290aW5nIFBDSSBjYXJkcyBtYXkgdXNlIGJ1aWxkRElHSSB0byBjb25zdHJ1Y3QgCit0aGUgbmVjZXNzYXJ5IG5vZGVzLiAKKworTm90ZXM6CistLS0tLS0KK1RoaXMgZHJpdmVyIG1heSBiZSBjb25maWd1cmVkIHZpYSBMSUxPLiAgRm9yIHVzZXJzIHdobyBoYXZlIGFscmVhZHkgY29uZmlndXJlZAordGhlaXIgZHJpdmVyIHVzaW5nIGRpZ2lDb25maWcsIGNvbmZpZ3VyaW5nIGZyb20gTElMTyB3aWxsIG92ZXJyaWRlIHByZXZpb3VzIAorc2V0dGluZ3MuICBNdWx0aXBsZSBib2FyZHMgbWF5IGJlIGNvbmZpZ3VyZWQgYnkgaXNzdWluZyBtdWx0aXBsZSBMSUxPIGNvbW1hbmQgCitsaW5lcy4gIEZvciBleGFtcGxlcyBzZWUgdGhlIGJvdHRvbSBvZiB0aGlzIGRvY3VtZW50LgorCitEZXZpY2UgbmFtZXMgc3RhcnQgYXQgMCBhbmQgY29udGludWUgdXAuICBCZXdhcmUgb2YgdGhpcyBhcyBwcmV2aW91cyBEaWdpIAorZHJpdmVycyBzdGFydGVkIGRldmljZSBuYW1lcyB3aXRoIDEuCisKK1BDSSBib2FyZHMgYXJlIGF1dG8tZGV0ZWN0ZWQgYW5kIGNvbmZpZ3VyZWQgYnkgdGhlIGRyaXZlci4gIFBDSSBib2FyZHMgd2lsbAorYmUgYWxsb2NhdGVkIGRldmljZSBudW1iZXJzIChpbnRlcm5hbGx5KSBiZWdpbm5pbmcgd2l0aCB0aGUgbG93ZXN0IFBDSSBzbG90CitmaXJzdC4gIEluIG90aGVyIHdvcmRzIGEgUENJIGNhcmQgaW4gc2xvdCAzIHdpbGwgYWx3YXlzIGhhdmUgaGlnaGVyIGRldmljZQorbm9kZXMgdGhhbiBhIFBDSSBjYXJkIGluIHNsb3QgMS4gCisKK0xJTE8gY29uZmlnIGV4YW1wbGVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVc2luZyBMSUxPJ3MgQVBQRU5EIGNvbW1hbmQsIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBpZGVudGlmaWVycyBvciAKK2ludGVnZXJzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBzdXBwb3J0ZWQgYm9hcmRzLiAgVGhlIHNpeCB2YWx1ZXMgaW4gb3JkZXIgCithcmU6CisKKyAgIEVuYWJsZS9EaXNhYmxlIHRoaXMgY2FyZCBvciBPdmVycmlkZSwKKyAgIFR5cGUgb2YgY2FyZDogUEMvWGUgKEFjY2VsZVBvcnQpICgwKSwgUEMvWGV2ZSAoMSksIFBDL1hlbSBvciBQQy9YciAoMiksIAorICAgICAgICAgICAgICAgICBFSVNBL1hlbSAoMyksIFBDLzY0WGUgKDQpLCBQQy9YaSAoNSksIAorICAgRW5hYmxlL0Rpc2FibGUgYWx0ZXJuYXRlIHBpbiBhcnJhbmdlbWVudCwKKyAgIE51bWJlciBvZiBwb3J0cyBvbiB0aGlzIGNhcmQsCisgICBJL08gUG9ydCB3aGVyZSBjYXJkIGlzIGNvbmZpZ3VyZWQgKGluIEhFWCBpZiB1c2luZyBzdHJpbmcgaWRlbnRpZmllcnMpLAorICAgQmFzZSBvZiBtZW1vcnkgd2luZG93IChpbiBIRVggaWYgdXNpbmcgc3RyaW5nIGlkZW50aWZpZXJzKSwgCisKK05PVEUgOiBQQ0kgYm9hcmRzIGFyZSBhdXRvLWRldGVjdGVkIGFuZCBjb25maWd1cmVkLiAgRG8gbm90IGF0dGVtcHQgdG8gCitjb25maWd1cmUgUENJIGJvYXJkcyB3aXRoIHRoZSBMSUxPIGFwcGVuZCBjb21tYW5kLiAgSWYgeW91IHdpc2ggdG8gb3ZlcnJpZGUKK3ByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZGF0YSAoQXMgc2V0IGJ5IGRpZ2lDb25maWcpLCBidXQgeW91IGRvIG5vdCB3aXNoIHRvCitjb25maWd1cmUgYW55IHNwZWNpZmljIGNhcmQgKEV4YW1wbGUgaWYgdGhlcmUgYXJlIFBDSSBjYXJkcyBpbiB0aGUgc3lzdGVtKSAKK3RoZSBmb2xsb3dpbmcgb3ZlcnJpZGUgY29tbWFuZCB3aWxsIGFjY29tcGxpc2ggdGhpczoKKy0+IGFwcGVuZD0iZGlnaT0yIgorCitTYW1wbGVzOgorICAgYXBwZW5kPSJkaWdpZXBjYT1FLFBDL1hlLEQsMTYsMjAwLEQwMDAwIgorICAgICAgICAgICAgICAgICAgb3IKKyAgIGFwcGVuZD0iZGlnaT0xLDAsMCwxNiw1MTIsODUxOTY4IgorCitTdXBwb3J0aW5nIFRvb2xzOgorLS0tLS0tLS0tLS0tLS0tLS0KK1N1cHBvcnRpbmcgdG9vbHMgaW5jbHVkZSBkaWdpRGxvYWQsIGRpZ2lDb25maWcsIGJ1aWxkUENJLCBhbmQgZGl0dHkuICBTZWUKK2RyaXZlcnMvY2hhci9SRUFETUUuZXBjYSBmb3IgbW9yZSBkZXRhaWxzLiAgTm90ZSwKK3RoaXMgZHJpdmVyIFJFUVVJUkVTIHRoYXQgZGlnaURsb2FkIGJlIGV4ZWN1dGVkIHByaW9yIHRvIGl0IGJlaW5nIHVzZWQuIAorRmFpbHVyZSB0byBkbyB0aGlzIHdpbGwgcmVzdWx0IGluIGFuIEVOT0RFViBlcnJvci4KKworRG9jdW1lbnRhdGlvbjoKKy0tLS0tLS0tLS0tLS0tCitDb21wbGV0ZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHByb2R1Y3QgbWF5IGJlIGZvdW5kIGluIHRoZSB0b29sIHBhY2thZ2UuIAorCitTb3VyY2VzIG9mIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RpZ2kgSW50bC4gc3VwcG9ydCBzaXRlIGZvciB0aGlzIHByb2R1Y3Q6CisKKy0+ICBodHRwOi8vd3d3LmRpZ2kuY29tCisKK0Fja25vd2xlZGdtZW50czoKKy0tLS0tLS0tLS0tLS0tLS0KK011Y2ggb2YgdGhpcyB3b3JrIChBbmQgZXZlbiB0ZXh0KSB3YXMgZGVyaXZlZCBmcm9tIGEgc2ltaWxhciBkb2N1bWVudCAKK3N1cHBvcnRpbmcgdGhlIG9yaWdpbmFsIHB1YmxpYyBkb21haW4gRGlnaUJvYXJkIGRyaXZlciBDb3B5cmlnaHQgKEMpCisxOTk0LDE5OTUgVHJveSBEZSBKb25naC4gIE1hbnkgdGhhbmtzIHRvIENocmlzdG9waCBMYW1ldGVyIAorKGNocmlzdG9waEBsYW1ldGVyLmNvbSkgYW5kIE1pa2UgTWNMYWdhbiAobWlrZS5tY2xhZ2FuQGxpbnV4Lm9yZykgd2hvIGF1dGhvcmVkIAorYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBvcmlnaW5hbCBkb2N1bWVudC4gCisKK0NoYW5nZWxvZzoKKy0tLS0tLS0tLS0KKzEwLTI5LTA0OglVcGRhdGUgc3RhdHVzIG9mIGRyaXZlciwgcmVtb3ZlIGRlYWQgbGlua3MgaW4gZG9jdW1lbnQKKwkJSmFtZXMgTmVsc29uIDxqYW1lczQ3NjVAZ21haWwuY29tPgorCisyMDAwICg/KQlPcmlnaW5hbCBEb2N1bWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kbm90aWZ5LnR4dCBiL0RvY3VtZW50YXRpb24vZG5vdGlmeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4NGZjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZG5vdGlmeS50eHQKQEAgLTAsMCArMSw5OSBAQAorCQlMaW51eCBEaXJlY3RvcnkgTm90aWZpY2F0aW9uCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIFN0ZXBoZW4gUm90aHdlbGwgPHNmckBjYW5iLmF1dWcub3JnLmF1PgorCitUaGUgaW50ZW50aW9uIG9mIGRpcmVjdG9yeSBub3RpZmljYXRpb24gaXMgdG8gYWxsb3cgdXNlciBhcHBsaWNhdGlvbnMKK3RvIGJlIG5vdGlmaWVkIHdoZW4gYSBkaXJlY3RvcnksIG9yIGFueSBvZiB0aGUgZmlsZXMgaW4gaXQsIGFyZSBjaGFuZ2VkLgorVGhlIGJhc2ljIG1lY2hhbmlzbSBpbnZvbHZlcyB0aGUgYXBwbGljYXRpb24gcmVnaXN0ZXJpbmcgZm9yIG5vdGlmaWNhdGlvbgorb24gYSBkaXJlY3RvcnkgdXNpbmcgYSBmY250bCgyKSBjYWxsIGFuZCB0aGUgbm90aWZpY2F0aW9ucyB0aGVtc2VsdmVzCitiZWluZyBkZWxpdmVyZWQgdXNpbmcgc2lnbmFscy4KKworVGhlIGFwcGxpY2F0aW9uIGRlY2lkZXMgd2hpY2ggImV2ZW50cyIgaXQgd2FudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQuCitUaGUgY3VycmVudGx5IGRlZmluZWQgZXZlbnRzIGFyZToKKworCUROX0FDQ0VTUwlBIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSB3YXMgYWNjZXNzZWQgKHJlYWQpCisJRE5fTU9ESUZZCUEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IHdhcyBtb2RpZmllZCAod3JpdGUsdHJ1bmNhdGUpCisJRE5fQ1JFQVRFCUEgZmlsZSB3YXMgY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5CisJRE5fREVMRVRFCUEgZmlsZSB3YXMgdW5saW5rZWQgZnJvbSBkaXJlY3RvcnkKKwlETl9SRU5BTUUJQSBmaWxlIGluIHRoZSBkaXJlY3Rvcnkgd2FzIHJlbmFtZWQKKwlETl9BVFRSSUIJQSBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaGFkIGl0cyBhdHRyaWJ1dGVzCisJCQljaGFuZ2VkIChjaG1vZCxjaG93bikKKworVXN1YWxseSwgdGhlIGFwcGxpY2F0aW9uIG11c3QgcmVyZWdpc3RlciBhZnRlciBlYWNoIG5vdGlmaWNhdGlvbiwgYnV0CitpZiBETl9NVUxUSVNIT1QgaXMgb3InZWQgd2l0aCB0aGUgZXZlbnQgbWFzaywgdGhlbiB0aGUgcmVnaXN0cmF0aW9uIHdpbGwKK3JlbWFpbiB1bnRpbCBleHBsaWNpdGx5IHJlbW92ZWQgKGJ5IHJlZ2lzdGVyaW5nIGZvciBubyBldmVudHMpLgorCitCeSBkZWZhdWx0LCBTSUdJTyB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgcHJvY2VzcyBhbmQgbm8gb3RoZXIgdXNlZnVsCitpbmZvcm1hdGlvbi4gIEhvd2V2ZXIsIGlmIHRoZSBGX1NFVFNJRyBmY250bCgyKSBjYWxsIGlzIHVzZWQgdG8gbGV0IHRoZQora2VybmVsIGtub3cgd2hpY2ggc2lnbmFsIHRvIGRlbGl2ZXIsIGEgc2lnaW5mbyBzdHJ1Y3R1cmUgd2lsbCBiZSBwYXNzZWQgdG8KK3RoZSBzaWduYWwgaGFuZGxlciBhbmQgdGhlIHNpX2ZkIG1lbWJlciBvZiB0aGF0IHN0cnVjdHVyZSB3aWxsIGNvbnRhaW4gdGhlCitmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkLgorCitQcmVmZXJhYmx5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNob29zZSBvbmUgb2YgdGhlIHJlYWwgdGltZSBzaWduYWxzCisoU0lHUlRNSU4gKyA8bj4pIHNvIHRoYXQgdGhlIG5vdGlmaWNhdGlvbnMgbWF5IGJlIHF1ZXVlZC4gIFRoaXMgaXMKK2VzcGVjaWFsbHkgaW1wb3J0YW50IGlmIEROX01VTFRJU0hPVCBpcyBzcGVjaWZpZWQuICBOb3RlIHRoYXQgU0lHUlRNSU4KK2lzIG9mdGVuIGJsb2NrZWQsIHNvIGl0IGlzIGJldHRlciB0byB1c2UgKGF0IGxlYXN0KSBTSUdSVE1JTiArIDEuCisKK0ltcGxlbWVudGF0aW9uIGV4cGVjdGF0aW9ucyAoZmVhdHVyZXMgYW5kIGJ1Z3MgOi0pKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBub3RpZmljYXRpb24gc2hvdWxkIHdvcmsgZm9yIGFueSBsb2NhbCBhY2Nlc3MgdG8gZmlsZXMgZXZlbiBpZiB0aGUKK2FjdHVhbCBmaWxlIHN5c3RlbSBpcyBvbiBhIHJlbW90ZSBzZXJ2ZXIuICBUaGlzIGltcGxpZXMgdGhhdCByZW1vdGUKK2FjY2VzcyB0byBmaWxlcyBzZXJ2ZWQgYnkgbG9jYWwgdXNlciBtb2RlIHNlcnZlcnMgc2hvdWxkIGJlIG5vdGlmaWVkLgorQWxzbywgcmVtb3RlIGFjY2Vzc2VzIHRvIGZpbGVzIHNlcnZlZCBieSBhIGxvY2FsIGtlcm5lbCBORlMgc2VydmVyIHNob3VsZAorYmUgbm90aWZpZWQuCisKK0luIG9yZGVyIHRvIG1ha2UgdGhlIGltcGFjdCBvbiB0aGUgZmlsZSBzeXN0ZW0gY29kZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSwKK3RoZSBwcm9ibGVtIG9mIGhhcmQgbGlua3MgdG8gZmlsZXMgaGFzIGJlZW4gaWdub3JlZC4gIFNvIGlmIGEgZmlsZSAoeCkKK2V4aXN0cyBpbiB0d28gZGlyZWN0b3JpZXMgKGEgYW5kIGIpIHRoZW4gYSBjaGFuZ2UgdG8gdGhlIGZpbGUgdXNpbmcgdGhlCituYW1lICJhL3giIHNob3VsZCBiZSBub3RpZmllZCB0byBhIHByb2dyYW0gZXhwZWN0aW5nIG5vdGlmaWNhdGlvbnMgb24KK2RpcmVjdG9yeSAiYSIsIGJ1dCB3aWxsIG5vdCBiZSBub3RpZmllZCB0byBvbmUgZXhwZWN0aW5nIG5vdGlmaWNhdGlvbnMgb24KK2RpcmVjdG9yeSAiYiIuCisKK0Fsc28sIGZpbGVzIHRoYXQgYXJlIHVubGlua2VkLCB3aWxsIHN0aWxsIGNhdXNlIG5vdGlmaWNhdGlvbnMgaW4gdGhlCitsYXN0IGRpcmVjdG9yeSB0aGF0IHRoZXkgd2VyZSBsaW5rZWQgdG8uCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworRG5vdGlmeSBpcyBjb250cm9sbGVkIHZpYSB0aGUgQ09ORklHX0ROT1RJRlkgY29uZmlndXJhdGlvbiBvcHRpb24uICBXaGVuCitkaXNhYmxlZCwgZmNudGwoZmQsIEZfTk9USUZZLCAuLi4pIHdpbGwgcmV0dXJuIC1FSU5WQUwuCisKK0V4YW1wbGUKKy0tLS0tLS0KKworCSNkZWZpbmUgX0dOVV9TT1VSQ0UJLyogbmVlZGVkIHRvIGdldCB0aGUgZGVmaW5lcyAqLworCSNpbmNsdWRlIDxmY250bC5oPgkvKiBpbiBnbGliYyAyLjIgdGhpcyBoYXMgdGhlIG5lZWRlZAorCQkJCQkgICB2YWx1ZXMgZGVmaW5lZCAqLworCSNpbmNsdWRlIDxzaWduYWwuaD4KKwkjaW5jbHVkZSA8c3RkaW8uaD4KKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJCisJc3RhdGljIHZvbGF0aWxlIGludCBldmVudF9mZDsKKwkKKwlzdGF0aWMgdm9pZCBoYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCAqc2ksIHZvaWQgKmRhdGEpCisJeworCQlldmVudF9mZCA9IHNpLT5zaV9mZDsKKwl9CisJCisJaW50IG1haW4odm9pZCkKKwl7CisJCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworCQlpbnQgZmQ7CisJCQorCQlhY3Quc2Ffc2lnYWN0aW9uID0gaGFuZGxlcjsKKwkJc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKwkJYWN0LnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKwkJc2lnYWN0aW9uKFNJR1JUTUlOICsgMSwgJmFjdCwgTlVMTCk7CisJCQorCQlmZCA9IG9wZW4oIi4iLCBPX1JET05MWSk7CisJCWZjbnRsKGZkLCBGX1NFVFNJRywgU0lHUlRNSU4gKyAxKTsKKwkJZmNudGwoZmQsIEZfTk9USUZZLCBETl9NT0RJRll8RE5fQ1JFQVRFfEROX01VTFRJU0hPVCk7CisJCS8qIHdlIHdpbGwgbm93IGJlIG5vdGlmaWVkIGlmIGFueSBvZiB0aGUgZmlsZXMKKwkJICAgaW4gIi4iIGlzIG1vZGlmaWVkIG9yIG5ldyBmaWxlcyBhcmUgY3JlYXRlZCAqLworCQl3aGlsZSAoMSkgeworCQkJcGF1c2UoKTsKKwkJCXByaW50ZigiR290IGV2ZW50IG9uIGZkPSVkXG4iLCBldmVudF9mZCk7CisJCX0KKwl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9iaW5kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2JpbmRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZWM5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9iaW5kaW5nLnR4dApAQCAtMCwwICsxLDEwMiBAQAorCitEcml2ZXIgQmluZGluZworCitEcml2ZXIgYmluZGluZyBpcyB0aGUgcHJvY2VzcyBvZiBhc3NvY2lhdGluZyBhIGRldmljZSB3aXRoIGEgZGV2aWNlCitkcml2ZXIgdGhhdCBjYW4gY29udHJvbCBpdC4gQnVzIGRyaXZlcnMgaGF2ZSB0eXBpY2FsbHkgaGFuZGxlZCB0aGlzCitiZWNhdXNlIHRoZXJlIGhhdmUgYmVlbiBidXMtc3BlY2lmaWMgc3RydWN0dXJlcyB0byByZXByZXNlbnQgdGhlCitkZXZpY2VzIGFuZCB0aGUgZHJpdmVycy4gV2l0aCBnZW5lcmljIGRldmljZSBhbmQgZGV2aWNlIGRyaXZlcgorc3RydWN0dXJlcywgbW9zdCBvZiB0aGUgYmluZGluZyBjYW4gdGFrZSBwbGFjZSB1c2luZyBjb21tb24gY29kZS4KKworCitCdXMKK35+fgorCitUaGUgYnVzIHR5cGUgc3RydWN0dXJlIGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgZGV2aWNlcyB0aGF0IGFyZSBvbiB0aGF0IGJ1cwordHlwZSBpbiB0aGUgc3lzdGVtLiBXaGVuIGRldmljZV9yZWdpc3RlciBpcyBjYWxsZWQgZm9yIGEgZGV2aWNlLCBpdCBpcworaW5zZXJ0ZWQgaW50byB0aGUgZW5kIG9mIHRoaXMgbGlzdC4gVGhlIGJ1cyBvYmplY3QgYWxzbyBjb250YWlucyBhCitsaXN0IG9mIGFsbCBkcml2ZXJzIG9mIHRoYXQgYnVzIHR5cGUuIFdoZW4gZHJpdmVyX3JlZ2lzdGVyIGlzIGNhbGxlZAorZm9yIGEgZHJpdmVyLCBpdCBpcyBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgbGlzdC4gVGhlc2UgYXJlIHRoZQordHdvIGV2ZW50cyB3aGljaCB0cmlnZ2VyIGRyaXZlciBiaW5kaW5nLgorCisKK2RldmljZV9yZWdpc3Rlcgorfn5+fn5+fn5+fn5+fn5+CisKK1doZW4gYSBuZXcgZGV2aWNlIGlzIGFkZGVkLCB0aGUgYnVzJ3MgbGlzdCBvZiBkcml2ZXJzIGlzIGl0ZXJhdGVkIG92ZXIKK3RvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgaXQuIEluIG9yZGVyIHRvIGRldGVybWluZSB0aGF0LCB0aGUgZGV2aWNlCitJRCBvZiB0aGUgZGV2aWNlIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBkZXZpY2UgSURzIHRoYXQgdGhlIGRyaXZlcgorc3VwcG9ydHMuIFRoZSBmb3JtYXQgYW5kIHNlbWFudGljcyBmb3IgY29tcGFyaW5nIElEcyBpcyBidXMtc3BlY2lmaWMuIAorSW5zdGVhZCBvZiB0cnlpbmcgdG8gZGVyaXZlIGEgY29tcGxleCBzdGF0ZSBtYWNoaW5lIGFuZCBtYXRjaGluZworYWxnb3JpdGhtLCBpdCBpcyB1cCB0byB0aGUgYnVzIGRyaXZlciB0byBwcm92aWRlIGEgY2FsbGJhY2sgdG8gY29tcGFyZQorYSBkZXZpY2UgYWdhaW5zdCB0aGUgSURzIG9mIGEgZHJpdmVyLiBUaGUgYnVzIHJldHVybnMgMSBpZiBhIG1hdGNoIHdhcworZm91bmQ7IDAgb3RoZXJ3aXNlLgorCitpbnQgbWF0Y2goc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworCitJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUgZGV2aWNlJ3MgZHJpdmVyIGZpZWxkIGlzIHNldCB0byB0aGUgZHJpdmVyCithbmQgdGhlIGRyaXZlcidzIHByb2JlIGNhbGxiYWNrIGlzIGNhbGxlZC4gVGhpcyBnaXZlcyB0aGUgZHJpdmVyIGEKK2NoYW5jZSB0byB2ZXJpZnkgdGhhdCBpdCByZWFsbHkgZG9lcyBzdXBwb3J0IHRoZSBoYXJkd2FyZSwgYW5kIHRoYXQKK2l0J3MgaW4gYSB3b3JraW5nIHN0YXRlLiAKKworRGV2aWNlIENsYXNzCit+fn5+fn5+fn5+fn4KKworVXBvbiB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHByb2JlLCB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aAordGhlIGNsYXNzIHRvIHdoaWNoIGl0IGJlbG9uZ3MuIERldmljZSBkcml2ZXJzIGJlbG9uZyB0byBvbmUgYW5kIG9ubHkgb25lCitjbGFzcywgYW5kIHRoYXQgaXMgc2V0IGluIHRoZSBkcml2ZXIncyBkZXZjbGFzcyBmaWVsZC4gCitkZXZjbGFzc19hZGRfZGV2aWNlIGlzIGNhbGxlZCB0byBlbnVtZXJhdGUgdGhlIGRldmljZSB3aXRoaW4gdGhlIGNsYXNzCithbmQgYWN0dWFsbHkgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgY2xhc3MsIHdoaWNoIGhhcHBlbnMgd2l0aCB0aGUKK2NsYXNzJ3MgcmVnaXN0ZXJfZGV2IGNhbGxiYWNrLgorCitOT1RFOiBUaGUgZGV2aWNlIGNsYXNzIHN0cnVjdHVyZXMgYW5kIGNvcmUgcm91dGluZXMgdG8gbWFuaXB1bGF0ZSB0aGVtCithcmUgbm90IGluIHRoZSBtYWlubGluZSBrZXJuZWwsIHNvIHRoZSBkaXNjdXNzaW9uIGlzIHN0aWxsIGEgYml0CitzcGVjdWxhdGl2ZS4gCisKKworRHJpdmVyCit+fn5+fn4KKworV2hlbiBhIGRyaXZlciBpcyBhdHRhY2hlZCB0byBhIGRldmljZSwgdGhlIGRldmljZSBpcyBpbnNlcnRlZCBpbnRvIHRoZQorZHJpdmVyJ3MgbGlzdCBvZiBkZXZpY2VzLiAKKworCitzeXNmcworfn5+fn4KKworQSBzeW1saW5rIGlzIGNyZWF0ZWQgaW4gdGhlIGJ1cydzICdkZXZpY2VzJyBkaXJlY3RvcnkgdGhhdCBwb2ludHMgdG8KK3RoZSBkZXZpY2UncyBkaXJlY3RvcnkgaW4gdGhlIHBoeXNpY2FsIGhpZXJhcmNoeS4KKworQSBzeW1saW5rIGlzIGNyZWF0ZWQgaW4gdGhlIGRyaXZlcidzICdkZXZpY2VzJyBkaXJlY3RvcnkgdGhhdCBwb2ludHMKK3RvIHRoZSBkZXZpY2UncyBkaXJlY3RvcnkgaW4gdGhlIHBoeXNpY2FsIGhpZXJhcmNoeS4KKworQSBkaXJlY3RvcnkgZm9yIHRoZSBkZXZpY2UgaXMgY3JlYXRlZCBpbiB0aGUgY2xhc3MncyBkaXJlY3RvcnkuIEEKK3N5bWxpbmsgaXMgY3JlYXRlZCBpbiB0aGF0IGRpcmVjdG9yeSB0aGF0IHBvaW50cyB0byB0aGUgZGV2aWNlJ3MKK3BoeXNpY2FsIGxvY2F0aW9uIGluIHRoZSBzeXNmcyB0cmVlLiAKKworQSBzeW1saW5rIGNhbiBiZSBjcmVhdGVkICh0aG91Z2ggdGhpcyBpc24ndCBkb25lIHlldCkgaW4gdGhlIGRldmljZSdzCitwaHlzaWNhbCBkaXJlY3RvcnkgdG8gZWl0aGVyIGl0cyBjbGFzcyBkaXJlY3RvcnksIG9yIHRoZSBjbGFzcydzCit0b3AtbGV2ZWwgZGlyZWN0b3J5LiBPbmUgY2FuIGFsc28gYmUgY3JlYXRlZCB0byBwb2ludCB0byBpdHMgZHJpdmVyJ3MKK2RpcmVjdG9yeSBhbHNvLiAKKworCitkcml2ZXJfcmVnaXN0ZXIKK35+fn5+fn5+fn5+fn5+fgorCitUaGUgcHJvY2VzcyBpcyBhbG1vc3QgaWRlbnRpY2FsIGZvciB3aGVuIGEgbmV3IGRyaXZlciBpcyBhZGRlZC4gCitUaGUgYnVzJ3MgbGlzdCBvZiBkZXZpY2VzIGlzIGl0ZXJhdGVkIG92ZXIgdG8gZmluZCBhIG1hdGNoLiBEZXZpY2VzCit0aGF0IGFscmVhZHkgaGF2ZSBhIGRyaXZlciBhcmUgc2tpcHBlZC4gQWxsIHRoZSBkZXZpY2VzIGFyZSBpdGVyYXRlZAorb3ZlciwgdG8gYmluZCBhcyBtYW55IGRldmljZXMgYXMgcG9zc2libGUgdG8gdGhlIGRyaXZlci4KKworCitSZW1vdmFsCit+fn5+fn5+CisKK1doZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZCwgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgaXQgd2lsbCBldmVudHVhbGx5CitnbyB0byAwLiBXaGVuIGl0IGRvZXMsIHRoZSByZW1vdmUgY2FsbGJhY2sgb2YgdGhlIGRyaXZlciBpcyBjYWxsZWQuIEl0CitpcyByZW1vdmVkIGZyb20gdGhlIGRyaXZlcidzIGxpc3Qgb2YgZGV2aWNlcyBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudAorb2YgdGhlIGRyaXZlciBpcyBkZWNyZW1lbnRlZC4gQWxsIHN5bWxpbmtzIGJldHdlZW4gdGhlIHR3byBhcmUgcmVtb3ZlZC4KKworV2hlbiBhIGRyaXZlciBpcyByZW1vdmVkLCB0aGUgbGlzdCBvZiBkZXZpY2VzIHRoYXQgaXQgc3VwcG9ydHMgaXMKK2l0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgZHJpdmVyJ3MgcmVtb3ZlIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgZWFjaAorb25lLiBUaGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGF0IGxpc3QgYW5kIHRoZSBzeW1saW5rcyByZW1vdmVkLiAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvYnVzLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2J1cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2MmM3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2J1cy50eHQKQEAgLTAsMCArMSwxNjAgQEAKKworQnVzIFR5cGVzIAorCitEZWZpbml0aW9uCit+fn5+fn5+fn5+CisKK3N0cnVjdCBidXNfdHlwZSB7CisJY2hhcgkJCSogbmFtZTsKKworCXN0cnVjdCBzdWJzeXN0ZW0Jc3Vic3lzOworCXN0cnVjdCBrc2V0CQlkcml2ZXJzOworCXN0cnVjdCBrc2V0CQlkZXZpY2VzOworCisJc3RydWN0IGJ1c19hdHRyaWJ1dGUJKiBidXNfYXR0cnM7CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUJKiBkZXZfYXR0cnM7CisJc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUJKiBkcnZfYXR0cnM7CisKKwlpbnQJCSgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKKwlpbnQJCSgqaG90cGx1ZykgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqKmVudnAsIAorCQkJCSAgICBpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKTsKKwlpbnQJCSgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqIGRldiwgdTMyIHN0YXRlKTsKKwlpbnQJCSgqcmVzdW1lKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK307CisKK2ludCBidXNfcmVnaXN0ZXIoc3RydWN0IGJ1c190eXBlICogYnVzKTsKKworCitEZWNsYXJhdGlvbgorfn5+fn5+fn5+fn4KKworRWFjaCBidXMgdHlwZSBpbiB0aGUga2VybmVsIChQQ0ksIFVTQiwgZXRjKSBzaG91bGQgZGVjbGFyZSBvbmUgc3RhdGljCitvYmplY3Qgb2YgdGhpcyB0eXBlLiBUaGV5IG11c3QgaW5pdGlhbGl6ZSB0aGUgbmFtZSBmaWVsZCwgYW5kIG1heQorb3B0aW9uYWxseSBpbml0aWFsaXplIHRoZSBtYXRjaCBjYWxsYmFjay4KKworc3RydWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZSA9IHsKKyAgICAgICAubmFtZQk9ICJwY2kiLAorICAgICAgIC5tYXRjaAk9IHBjaV9idXNfbWF0Y2gsCit9OworCitUaGUgc3RydWN0dXJlIHNob3VsZCBiZSBleHBvcnRlZCB0byBkcml2ZXJzIGluIGEgaGVhZGVyIGZpbGU6CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlOworCisKK1JlZ2lzdHJhdGlvbgorfn5+fn5+fn5+fn5+CisKK1doZW4gYSBidXMgZHJpdmVyIGlzIGluaXRpYWxpemVkLCBpdCBjYWxscyBidXNfcmVnaXN0ZXIuIFRoaXMKK2luaXRpYWxpemVzIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMgaW4gdGhlIGJ1cyBvYmplY3QgYW5kIGluc2VydHMgaXQKK2ludG8gYSBnbG9iYWwgbGlzdCBvZiBidXMgdHlwZXMuIE9uY2UgdGhlIGJ1cyBvYmplY3QgaXMgcmVnaXN0ZXJlZCwgCit0aGUgZmllbGRzIGluIGl0IGFyZSB1c2FibGUgYnkgdGhlIGJ1cyBkcml2ZXIuIAorCisKK0NhbGxiYWNrcworfn5+fn5+fn5+CisKK21hdGNoKCk6IEF0dGFjaGluZyBEcml2ZXJzIHRvIERldmljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvcm1hdCBvZiBkZXZpY2UgSUQgc3RydWN0dXJlcyBhbmQgdGhlIHNlbWFudGljcyBmb3IgY29tcGFyaW5nCit0aGVtIGFyZSBpbmhlcmVudGx5IGJ1cy1zcGVjaWZpYy4gRHJpdmVycyB0eXBpY2FsbHkgZGVjbGFyZSBhbiBhcnJheQorb2YgZGV2aWNlIElEcyBvZiBkZXZpY2VzIHRoZXkgc3VwcG9ydCB0aGF0IHJlc2lkZSBpbiBhIGJ1cy1zcGVjaWZpYworZHJpdmVyIHN0cnVjdHVyZS4gCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBtYXRjaCBjYWxsYmFjayBpcyBwcm92aWRlIHRoZSBidXMgYW4gb3Bwb3J0dW5pdHkgdG8KK2RldGVybWluZSBpZiBhIHBhcnRpY3VsYXIgZHJpdmVyIHN1cHBvcnRzIGEgcGFydGljdWxhciBkZXZpY2UgYnkKK2NvbXBhcmluZyB0aGUgZGV2aWNlIElEcyB0aGUgZHJpdmVyIHN1cHBvcnRzIHdpdGggdGhlIGRldmljZSBJRCBvZiBhCitwYXJ0aWN1bGFyIGRldmljZSwgd2l0aG91dCBzYWNyaWZpY2luZyBidXMtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBvcgordHlwZS1zYWZldHkuIAorCitXaGVuIGEgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnVzLCB0aGUgYnVzJ3MgbGlzdCBvZiBkZXZpY2VzIGlzCitpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIG1hdGNoIGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgZWFjaCBkZXZpY2UgdGhhdAorZG9lcyBub3QgaGF2ZSBhIGRyaXZlciBhc3NvY2lhdGVkIHdpdGggaXQuIAorCisKKworRGV2aWNlIGFuZCBEcml2ZXIgTGlzdHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBsaXN0cyBvZiBkZXZpY2VzIGFuZCBkcml2ZXJzIGFyZSBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSBsb2NhbAorbGlzdHMgdGhhdCBtYW55IGJ1c2VzIGtlZXAuIFRoZXkgYXJlIGxpc3RzIG9mIHN0cnVjdCBkZXZpY2VzIGFuZAorc3RydWN0IGRldmljZV9kcml2ZXJzLCByZXNwZWN0aXZlbHkuIEJ1cyBkcml2ZXJzIGFyZSBmcmVlIHRvIHVzZSB0aGUKK2xpc3RzIGFzIHRoZXkgcGxlYXNlLCBidXQgY29udmVyc2lvbiB0byB0aGUgYnVzLXNwZWNpZmljIHR5cGUgbWF5IGJlCituZWNlc3NhcnkuIAorCitUaGUgTERNIGNvcmUgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgaXRlcmF0aW5nIG92ZXIgZWFjaCBsaXN0LgorCitpbnQgYnVzX2Zvcl9lYWNoX2RldihzdHJ1Y3QgYnVzX3R5cGUgKiBidXMsIHN0cnVjdCBkZXZpY2UgKiBzdGFydCwgdm9pZCAqIGRhdGEsCisJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CisKK2ludCBidXNfZm9yX2VhY2hfZHJ2KHN0cnVjdCBidXNfdHlwZSAqIGJ1cywgc3RydWN0IGRldmljZV9kcml2ZXIgKiBzdGFydCwgCisJCSAgICAgdm9pZCAqIGRhdGEsIGludCAoKmZuKShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCB2b2lkICopKTsKKworVGhlc2UgaGVscGVycyBpdGVyYXRlIG92ZXIgdGhlIHJlc3BlY3RpdmUgbGlzdCwgYW5kIGNhbGwgdGhlIGNhbGxiYWNrCitmb3IgZWFjaCBkZXZpY2Ugb3IgZHJpdmVyIGluIHRoZSBsaXN0LiBBbGwgbGlzdCBhY2Nlc3NlcyBhcmUKK3N5bmNocm9uaXplZCBieSB0YWtpbmcgdGhlIGJ1cydzIGxvY2sgKHJlYWQgY3VycmVudGx5KS4gVGhlIHJlZmVyZW5jZQorY291bnQgb24gZWFjaCBvYmplY3QgaW4gdGhlIGxpc3QgaXMgaW5jcmVtZW50ZWQgYmVmb3JlIHRoZSBjYWxsYmFjayBpcworY2FsbGVkOyBpdCBpcyBkZWNyZW1lbnRlZCBhZnRlciB0aGUgbmV4dCBvYmplY3QgaGFzIGJlZW4gb2J0YWluZWQuIFRoZQorbG9jayBpcyBub3QgaGVsZCB3aGVuIGNhbGxpbmcgdGhlIGNhbGxiYWNrLiAKKworCitzeXNmcworfn5+fn5+fn4KK1RoZXJlIGlzIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCAnYnVzJy4KKworRWFjaCBidXMgZ2V0cyBhIGRpcmVjdG9yeSBpbiB0aGUgYnVzIGRpcmVjdG9yeSwgYWxvbmcgd2l0aCB0d28gZGVmYXVsdAorZGlyZWN0b3JpZXM6CisKKwkvc3lzL2J1cy9wY2kvCisJfC0tIGRldmljZXMKKwlgLS0gZHJpdmVycworCitEcml2ZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnVzIGdldCBhIGRpcmVjdG9yeSBpbiB0aGUgYnVzJ3MgZHJpdmVycworZGlyZWN0b3J5OgorCisJL3N5cy9idXMvcGNpLworCXwtLSBkZXZpY2VzCisJYC0tIGRyaXZlcnMKKwkgICAgfC0tIEludGVsIElDSAorCSAgICB8LS0gSW50ZWwgSUNIIEpveXN0aWNrCisJICAgIHwtLSBhZ3BnYXJ0CisJICAgIGAtLSBlMTAwCisKK0VhY2ggZGV2aWNlIHRoYXQgaXMgZGlzY292ZXJlZCBvbiBhIGJ1cyBvZiB0aGF0IHR5cGUgZ2V0cyBhIHN5bWxpbmsgaW4KK3RoZSBidXMncyBkZXZpY2VzIGRpcmVjdG9yeSB0byB0aGUgZGV2aWNlJ3MgZGlyZWN0b3J5IGluIHRoZSBwaHlzaWNhbAoraGllcmFyY2h5OgorCisJL3N5cy9idXMvcGNpLworCXwtLSBkZXZpY2VzCisJfCAgIHwtLSAwMDowMC4wIC0+IC4uLy4uLy4uL3Jvb3QvcGNpMC8wMDowMC4wCisJfCAgIHwtLSAwMDowMS4wIC0+IC4uLy4uLy4uL3Jvb3QvcGNpMC8wMDowMS4wCisJfCAgIGAtLSAwMDowMi4wIC0+IC4uLy4uLy4uL3Jvb3QvcGNpMC8wMDowMi4wCisJYC0tIGRyaXZlcnMKKworCitFeHBvcnRpbmcgQXR0cmlidXRlcworfn5+fn5+fn5+fn5+fn5+fn5+fn4KK3N0cnVjdCBidXNfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBidXNfdHlwZSAqLCBjaGFyICogYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBidXNfdHlwZSAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOworfTsKKworQnVzIGRyaXZlcnMgY2FuIGV4cG9ydCBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBCVVNfQVRUUiBtYWNybyB0aGF0IHdvcmtzCitzaW1pbGFybHkgdG8gdGhlIERFVklDRV9BVFRSIG1hY3JvIGZvciBkZXZpY2VzLiBGb3IgZXhhbXBsZSwgYSBkZWZpbml0aW9uIAorbGlrZSB0aGlzOgorCitzdGF0aWMgQlVTX0FUVFIoZGVidWcsMDY0NCxzaG93X2RlYnVnLHN0b3JlX2RlYnVnKTsKKworaXMgZXF1aXZhbGVudCB0byBkZWNsYXJpbmc6CisKK3N0YXRpYyBidXNfYXR0cmlidXRlIGJ1c19hdHRyX2RlYnVnOworCitUaGlzIGNhbiB0aGVuIGJlIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBidXMncworc3lzZnMgZGlyZWN0b3J5IHVzaW5nOgorCitpbnQgYnVzX2NyZWF0ZV9maWxlKHN0cnVjdCBidXNfdHlwZSAqLCBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSAqKTsKK3ZvaWQgYnVzX3JlbW92ZV9maWxlKHN0cnVjdCBidXNfdHlwZSAqLCBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSAqKTsKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9jbGFzcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9jbGFzcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxZDg5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2NsYXNzLnR4dApAQCAtMCwwICsxLDE2MiBAQAorCitEZXZpY2UgQ2xhc3NlcworCisKK0ludHJvZHVjdGlvbgorfn5+fn5+fn5+fn5+CitBIGRldmljZSBjbGFzcyBkZXNjcmliZXMgYSB0eXBlIG9mIGRldmljZSwgbGlrZSBhbiBhdWRpbyBvciBuZXR3b3JrCitkZXZpY2UuIFRoZSBmb2xsb3dpbmcgZGV2aWNlIGNsYXNzZXMgaGF2ZSBiZWVuIGlkZW50aWZpZWQ6CisKKzxJbnNlcnQgTGlzdCBvZiBEZXZpY2UgQ2xhc3NlcyBIZXJlPgorCisKK0VhY2ggZGV2aWNlIGNsYXNzIGRlZmluZXMgYSBzZXQgb2Ygc2VtYW50aWNzIGFuZCBhIHByb2dyYW1taW5nIGludGVyZmFjZQordGhhdCBkZXZpY2VzIG9mIHRoYXQgY2xhc3MgYWRoZXJlIHRvLiBEZXZpY2UgZHJpdmVycyBhcmUgdGhlCitpbXBsZW1lbnRpb24gb2YgdGhhdCBwcm9ncmFtbWluZyBpbnRlcmZhY2UgZm9yIGEgcGFydGljdWxhciBkZXZpY2Ugb24KK2EgcGFydGljdWxhciBidXMuIAorCitEZXZpY2UgY2xhc3NlcyBhcmUgYWdub3N0aWMgd2l0aCByZXNwZWN0IHRvIHdoYXQgYnVzIGEgZGV2aWNlIHJlc2lkZXMKK29uLiAKKworCitQcm9ncmFtbWluZyBJbnRlcmZhY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGRldmljZSBjbGFzcyBzdHJ1Y3R1cmUgbG9va3MgbGlrZTogCisKKwordHlwZWRlZiBpbnQgKCpkZXZjbGFzc19hZGQpKHN0cnVjdCBkZXZpY2UgKik7Cit0eXBlZGVmIHZvaWQgKCpkZXZjbGFzc19yZW1vdmUpKHN0cnVjdCBkZXZpY2UgKik7CisKK3N0cnVjdCBkZXZpY2VfY2xhc3MgeworCWNoYXIJCQkqIG5hbWU7CisJcndsb2NrX3QJCWxvY2s7CisJdTMyCQkJZGV2bnVtOworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKworCXN0cnVjdCBsaXN0X2hlYWQJZHJpdmVyczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWludGZfbGlzdDsKKworCXN0cnVjdCBkcml2ZXJfZGlyX2VudHJ5CWRpcjsKKwlzdHJ1Y3QgZHJpdmVyX2Rpcl9lbnRyeQlkZXZpY2VfZGlyOworCXN0cnVjdCBkcml2ZXJfZGlyX2VudHJ5CWRyaXZlcl9kaXI7CisKKwlkZXZjbGFzc19hZGQJCWFkZF9kZXZpY2U7CisJZGV2Y2xhc3NfcmVtb3ZlCQlyZW1vdmVfZGV2aWNlOworfTsKKworQSB0eXBpY2FsIGRldmljZSBjbGFzcyBkZWZpbml0aW9uIHdvdWxkIGxvb2sgbGlrZTogCisKK3N0cnVjdCBkZXZpY2VfY2xhc3MgaW5wdXRfZGV2Y2xhc3MgPSB7CisgICAgICAgIC5uYW1lCQk9ICJpbnB1dCIsCisgICAgICAgIC5hZGRfZGV2aWNlCT0gaW5wdXRfYWRkX2RldmljZSwKKwkucmVtb3ZlX2RldmljZQk9IGlucHV0X3JlbW92ZV9kZXZpY2UsCit9OworCitFYWNoIGRldmljZSBjbGFzcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGV4cG9ydGVkIGluIGEgaGVhZGVyIGZpbGUgc28gaXQKK2NhbiBiZSB1c2VkIGJ5IGRyaXZlcnMsIGV4dGVuc2lvbnMgYW5kIGludGVyZmFjZXMuCisKK0RldmljZSBjbGFzc2VzIGFyZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aCB0aGUgY29yZSB1c2luZzogCisKK2ludCBkZXZjbGFzc19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2NsYXNzICogY2xzKTsKK3ZvaWQgZGV2Y2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2NsYXNzICogY2xzKTsKKworCitEZXZpY2VzCit+fn5+fn5+CitBcyBkZXZpY2VzIGFyZSBib3VuZCB0byBkcml2ZXJzLCB0aGV5IGFyZSBhZGRlZCB0byB0aGUgZGV2aWNlIGNsYXNzCit0aGF0IHRoZSBkcml2ZXIgYmVsb25ncyB0by4gQmVmb3JlIHRoZSBkcml2ZXIgbW9kZWwgY29yZSwgdGhpcyB3b3VsZAordHlwaWNhbGx5IGhhcHBlbiBkdXJpbmcgdGhlIGRyaXZlcidzIHByb2JlKCkgY2FsbGJhY2ssIG9uY2UgdGhlIGRldmljZQoraGFzIGJlZW4gaW5pdGlhbGl6ZWQuIEl0IG5vdyBoYXBwZW5zIGFmdGVyIHRoZSBwcm9iZSgpIGNhbGxiYWNrCitmaW5pc2hlcyBmcm9tIHRoZSBjb3JlLiAKKworVGhlIGRldmljZSBpcyBlbnVtZXJhdGVkIGluIHRoZSBjbGFzcy4gRWFjaCB0aW1lIGEgZGV2aWNlIGlzIGFkZGVkIHRvCit0aGUgY2xhc3MsIHRoZSBjbGFzcydzIGRldm51bSBmaWVsZCBpcyBpbmNyZW1lbnRlZCBhbmQgYXNzaWduZWQgdG8gdGhlCitkZXZpY2UuIFRoZSBmaWVsZCBpcyBuZXZlciBkZWNyZW1lbnRlZCwgc28gaWYgdGhlIGRldmljZSBpcyByZW1vdmVkCitmcm9tIHRoZSBjbGFzcyBhbmQgcmUtYWRkZWQsIGl0IHdpbGwgcmVjZWl2ZSBhIGRpZmZlcmVudCBlbnVtZXJhdGVkCit2YWx1ZS4gCisKK1RoZSBjbGFzcyBpcyBhbGxvd2VkIHRvIGNyZWF0ZSBhIGNsYXNzLXNwZWNpZmljIHN0cnVjdHVyZSBmb3IgdGhlCitkZXZpY2UgYW5kIHN0b3JlIGl0IGluIHRoZSBkZXZpY2UncyBjbGFzc19kYXRhIHBvaW50ZXIuIAorCitUaGVyZSBpcyBubyBsaXN0IG9mIGRldmljZXMgaW4gdGhlIGRldmljZSBjbGFzcy4gRWFjaCBkcml2ZXIgaGFzIGEKK2xpc3Qgb2YgZGV2aWNlcyB0aGF0IGl0IHN1cHBvcnRzLiBUaGUgZGV2aWNlIGNsYXNzIGhhcyBhIGxpc3Qgb2YKK2RyaXZlcnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGNsYXNzLiBUbyBhY2Nlc3MgYWxsIG9mIHRoZSBkZXZpY2VzIGluIHRoZQorY2xhc3MsIGl0ZXJhdGUgb3ZlciB0aGUgZGV2aWNlIGxpc3RzIG9mIGVhY2ggZHJpdmVyIGluIHRoZSBjbGFzcy4KKworCitEZXZpY2UgRHJpdmVycworfn5+fn5+fn5+fn5+fn4KK0RldmljZSBkcml2ZXJzIGFyZSBhZGRlZCB0byBkZXZpY2UgY2xhc3NlcyB3aGVuIHRoZXkgYXJlIHJlZ2lzdGVyZWQKK3dpdGggdGhlIGNvcmUuIEEgZHJpdmVyIHNwZWNpZmllcyB0aGUgY2xhc3MgaXQgYmVsb25ncyB0byBieSBzZXR0aW5nCit0aGUgc3RydWN0IGRldmljZV9kcml2ZXI6OmRldmNsYXNzIGZpZWxkLiAKKworCitzeXNmcyBkaXJlY3Rvcnkgc3RydWN0dXJlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVyZSBpcyBhIHRvcC1sZXZlbCBzeXNmcyBkaXJlY3RvcnkgbmFtZWQgJ2NsYXNzJy4gCisKK0VhY2ggY2xhc3MgZ2V0cyBhIGRpcmVjdG9yeSBpbiB0aGUgY2xhc3MgZGlyZWN0b3J5LCBhbG9uZyB3aXRoIHR3bworZGVmYXVsdCBzdWJkaXJlY3RvcmllczoKKworICAgICAgICBjbGFzcy8KKyAgICAgICAgYC0tIGlucHV0CisgICAgICAgICAgICB8LS0gZGV2aWNlcworICAgICAgICAgICAgYC0tIGRyaXZlcnMKKworCitEcml2ZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2xhc3MgZ2V0IGEgc3ltbGluayBpbiB0aGUgZHJpdmVycy8gZGlyZWN0b3J5IAordGhhdCBwb2ludHMgdG8gdGhlIGRyaXZlcidzIGRpcmVjdG9yeSAodW5kZXIgaXRzIGJ1cyBkaXJlY3RvcnkpOgorCisgICBjbGFzcy8KKyAgIGAtLSBpbnB1dAorICAgICAgIHwtLSBkZXZpY2VzCisgICAgICAgYC0tIGRyaXZlcnMKKyAgICAgICAgICAgYC0tIHVzYjp1c2JfbW91c2UgLT4gLi4vLi4vLi4vYnVzL2RyaXZlcnMvdXNiX21vdXNlLworCisKK0VhY2ggZGV2aWNlIGdldHMgYSBzeW1saW5rIGluIHRoZSBkZXZpY2VzLyBkaXJlY3RvcnkgdGhhdCBwb2ludHMgdG8gdGhlIAorZGV2aWNlJ3MgZGlyZWN0b3J5IGluIHRoZSBwaHlzaWNhbCBoaWVyYXJjaHk6CisKKyAgIGNsYXNzLworICAgYC0tIGlucHV0CisgICAgICAgfC0tIGRldmljZXMKKyAgICAgICB8ICAgYC0tIDEgLT4gLi4vLi4vLi4vcm9vdC9wY2kwLzAwOjFmLjAvdXNiX2J1cy8wMDoxZi4yLTE6MC8KKyAgICAgICBgLS0gZHJpdmVycworCisKK0V4cG9ydGluZyBBdHRyaWJ1dGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorc3RydWN0IGRldmNsYXNzX2F0dHJpYnV0ZSB7CisgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7CisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlX2NsYXNzICosIGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZV9jbGFzcyAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOworfTsKKworQ2xhc3MgZHJpdmVycyBjYW4gZXhwb3J0IGF0dHJpYnV0ZXMgdXNpbmcgdGhlIERFVkNMQVNTX0FUVFIgbWFjcm8gdGhhdCB3b3Jrcworc2ltaWxhcmx5IHRvIHRoZSBERVZJQ0VfQVRUUiBtYWNybyBmb3IgZGV2aWNlcy4gRm9yIGV4YW1wbGUsIGEgZGVmaW5pdGlvbiAKK2xpa2UgdGhpczoKKworc3RhdGljIERFVkNMQVNTX0FUVFIoZGVidWcsMDY0NCxzaG93X2RlYnVnLHN0b3JlX2RlYnVnKTsKKworaXMgZXF1aXZhbGVudCB0byBkZWNsYXJpbmc6CisKK3N0YXRpYyBkZXZjbGFzc19hdHRyaWJ1dGUgZGV2Y2xhc3NfYXR0cl9kZWJ1ZzsKKworVGhlIGJ1cyBkcml2ZXIgY2FuIGFkZCBhbmQgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSB0aGUgY2xhc3Mncworc3lzZnMgZGlyZWN0b3J5IHVzaW5nOgorCitpbnQgZGV2Y2xhc3NfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9jbGFzcyAqLCBzdHJ1Y3QgZGV2Y2xhc3NfYXR0cmlidXRlICopOwordm9pZCBkZXZjbGFzc19yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2NsYXNzICosIHN0cnVjdCBkZXZjbGFzc19hdHRyaWJ1dGUgKik7CisKK0luIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgZmlsZSB3aWxsIGJlIG5hbWVkICdkZWJ1ZycgaW4gcGxhY2VkIGluIHRoZQorY2xhc3MncyBkaXJlY3RvcnkgaW4gc3lzZnMuIAorCisKK0ludGVyZmFjZXMKK35+fn5+fn5+fn4KK1RoZXJlIG1heSBleGlzdCBtdWx0aXBsZSBtZWNoYW5pc21zIGZvciBhY2Nlc3NpbmcgdGhlIHNhbWUgZGV2aWNlIG9mIGEKK3BhcnRpY3VsYXIgY2xhc3MgdHlwZS4gRGV2aWNlIGludGVyZmFjZXMgZGVzY3JpYmUgdGhlc2UgbWVjaGFuaXNtcy4gCisKK1doZW4gYSBkZXZpY2UgaXMgYWRkZWQgdG8gYSBkZXZpY2UgY2xhc3MsIHRoZSBjb3JlIGF0dGVtcHRzIHRvIGFkZCBpdAordG8gZXZlcnkgaW50ZXJmYWNlIHRoYXQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZpY2UgY2xhc3MuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldmljZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZpY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2M1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZpY2UudHh0CkBAIC0wLDAgKzEsMTU0IEBACisKK1RoZSBCYXNpYyBEZXZpY2UgU3RydWN0dXJlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitzdHJ1Y3QgZGV2aWNlIHsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBnX2xpc3Q7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBidXNfbGlzdDsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkcml2ZXJfbGlzdDsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbnRmX2xpc3Q7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CisgICAgICAgIHN0cnVjdCBkZXZpY2UgICAqIHBhcmVudDsKKworICAgICAgICBjaGFyICAgIG5hbWVbREVWSUNFX05BTUVfU0laRV07CisgICAgICAgIGNoYXIgICAgYnVzX2lkW0JVU19JRF9TSVpFXTsKKworICAgICAgICBzcGlubG9ja190ICAgICAgbG9jazsKKyAgICAgICAgYXRvbWljX3QgICAgICAgIHJlZmNvdW50OworCisgICAgICAgIHN0cnVjdCBidXNfdHlwZSAqIGJ1czsKKyAgICAgICAgc3RydWN0IGRyaXZlcl9kaXJfZW50cnkgZGlyOworCisJdTMyCQljbGFzc19udW07CisKKyAgICAgICAgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICpkcml2ZXJfZGF0YTsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICpwbGF0Zm9ybV9kYXRhOworCisgICAgICAgIHUzMiAgICAgICAgICAgICBjdXJyZW50X3N0YXRlOworICAgICAgICB1bnNpZ25lZCBjaGFyICpzYXZlZF9zdGF0ZTsKKworICAgICAgICB2b2lkICAgICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqIGRldik7Cit9OworCitGaWVsZHMgCit+fn5+fn4KK2dfbGlzdDoJTm9kZSBpbiB0aGUgZ2xvYmFsIGRldmljZSBsaXN0LgorCitub2RlOglOb2RlIGluIGRldmljZSdzIHBhcmVudCdzIGNoaWxkcmVuIGxpc3QuCisKK2J1c19saXN0OiBOb2RlIGluIGRldmljZSdzIGJ1cydzIGRldmljZXMgbGlzdC4KKworZHJpdmVyX2xpc3Q6ICAgTm9kZSBpbiBkZXZpY2UncyBkcml2ZXIncyBkZXZpY2VzIGxpc3QuCisKK2ludGZfbGlzdDogICAgIExpc3Qgb2YgaW50Zl9kYXRhLiBUaGVyZSBpcyBvbmUgc3RydWN0dXJlIGFsbG9jYXRlZCBmb3IKKwkgICAgICAgZWFjaCBpbnRlcmZhY2UgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzLgorCitjaGlsZHJlbjogICAgICBMaXN0IG9mIGNoaWxkIGRldmljZXMuCisKK3BhcmVudDogICAgICAgICoqKiBGSVhNRSAqKioKKworbmFtZToJICAgICAgIEFTQ0lJIGRlc2NyaXB0aW9uIG9mIGRldmljZS4gCisJICAgICAgIEV4YW1wbGU6ICIgM0NvbSBDb3Jwb3JhdGlvbiAzYzkwNSAxMDBCYXNlVFggW0Jvb21lcmFuZ10iCisKK2J1c19pZDoJICAgICAgIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIGRldmljZSdzIGJ1cyBwb3NpdGlvbi4gVGhpcyAKKwkgICAgICAgZmllbGQgc2hvdWxkIGJlIGEgbmFtZSB1bmlxdWUgYWNyb3NzIGFsbCBkZXZpY2VzIG9uIHRoZQorCSAgICAgICBidXMgdHlwZSB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8uIAorCisJICAgICAgIEV4YW1wbGU6IFBDSSBidXNfaWRzIGFyZSBpbiB0aGUgZm9ybSBvZgorCSAgICAgICA8YnVzIG51bWJlcj46PHNsb3QgbnVtYmVyPi48ZnVuY3Rpb24gbnVtYmVyPiAKKwkgICAgICAgVGhpcyBuYW1lIGlzIHVuaXF1ZSBhY3Jvc3MgYWxsIFBDSSBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uCisKK2xvY2s6CSAgICAgICBTcGlubG9jayBmb3IgdGhlIGRldmljZS4gCisKK3JlZmNvdW50OiAgICAgIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgZGV2aWNlLgorCitidXM6CSAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBidXNfdHlwZSB0aGF0IGRldmljZSBiZWxvbmdzIHRvLgorCitkaXI6CSAgICAgICBEZXZpY2UncyBzeXNmcyBkaXJlY3RvcnkuCisKK2NsYXNzX251bTogICAgIENsYXNzLWVudW1lcmF0ZWQgdmFsdWUgb2YgdGhlIGRldmljZS4KKworZHJpdmVyOgkgICAgICAgUG9pbnRlciB0byBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB0aGF0IGNvbnRyb2xzIHRoZSBkZXZpY2UuCisKK2RyaXZlcl9kYXRhOiAgIERyaXZlci1zcGVjaWZpYyBkYXRhLgorCitwbGF0Zm9ybV9kYXRhOiBQbGF0Zm9ybSBkYXRhIHNwZWNpZmljIHRvIHRoZSBkZXZpY2UuCisKK2N1cnJlbnRfc3RhdGU6IEN1cnJlbnQgcG93ZXIgc3RhdGUgb2YgdGhlIGRldmljZS4KKworc2F2ZWRfc3RhdGU6ICAgUG9pbnRlciB0byBzYXZlZCBzdGF0ZSBvZiB0aGUgZGV2aWNlLiBUaGlzIGlzIHVzYWJsZSBieQorCSAgICAgICB0aGUgZGV2aWNlIGRyaXZlciBjb250cm9sbGluZyB0aGUgZGV2aWNlLgorCityZWxlYXNlOiAgICAgICBDYWxsYmFjayB0byBmcmVlIHRoZSBkZXZpY2UgYWZ0ZXIgYWxsIHJlZmVyZW5jZXMgaGF2ZSAKKwkgICAgICAgZ29uZSBhd2F5LiBUaGlzIHNob3VsZCBiZSBzZXQgYnkgdGhlIGFsbG9jYXRvciBvZiB0aGUgCisJICAgICAgIGRldmljZSAoaS5lLiB0aGUgYnVzIGRyaXZlciB0aGF0IGRpc2NvdmVyZWQgdGhlIGRldmljZSkuCisKKworUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBidXMgZHJpdmVyIHRoYXQgZGlzY292ZXJzIHRoZSBkZXZpY2UgdXNlcyB0aGlzIHRvIHJlZ2lzdGVyIHRoZQorZGV2aWNlIHdpdGggdGhlIGNvcmU6CisKK2ludCBkZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqIGRldik7CisKK1RoZSBidXMgc2hvdWxkIGluaXRpYWxpemUgdGhlIGZvbGxvd2luZyBmaWVsZHM6CisKKyAgICAtIHBhcmVudAorICAgIC0gbmFtZQorICAgIC0gYnVzX2lkCisgICAgLSBidXMKKworQSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb3JlIHdoZW4gaXRzIHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvCiswLiBUaGUgcmVmZXJlbmNlIGNvdW50IGNhbiBiZSBhZGp1c3RlZCB1c2luZzoKKworc3RydWN0IGRldmljZSAqIGdldF9kZXZpY2Uoc3RydWN0IGRldmljZSAqIGRldik7Cit2b2lkIHB1dF9kZXZpY2Uoc3RydWN0IGRldmljZSAqIGRldik7CisKK2dldF9kZXZpY2UoKSB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBkZXZpY2UgcGFzc2VkIHRvIGl0CitpZiB0aGUgcmVmZXJlbmNlIGlzIG5vdCBhbHJlYWR5IDAgKGlmIGl0J3MgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcKK3JlbW92ZWQgYWxyZWFkeSkuCisKK0EgZHJpdmVyIGNhbiBhY2Nlc3MgdGhlIGxvY2sgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgdXNpbmc6IAorCit2b2lkIGxvY2tfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwordm9pZCB1bmxvY2tfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworCisKK0F0dHJpYnV0ZXMKK35+fn5+fn5+fn4KK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHsKKyAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKK307CisKK0F0dHJpYnV0ZXMgb2YgZGV2aWNlcyBjYW4gYmUgZXhwb3J0ZWQgdmlhIGRyaXZlcnMgdXNpbmcgYSBzaW1wbGUKK3Byb2Nmcy1saWtlIGludGVyZmFjZS4gCisKK1BsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KK29uIGhvdyBzeXNmcyB3b3Jrcy4KKworQXR0cmlidXRlcyBhcmUgZGVjbGFyZWQgdXNpbmcgYSBtYWNybyBjYWxsZWQgREVWSUNFX0FUVFI6CisKKyNkZWZpbmUgREVWSUNFX0FUVFIobmFtZSxtb2RlLHNob3csc3RvcmUpCisKK0V4YW1wbGU6CisKK0RFVklDRV9BVFRSKHBvd2VyLDA2NDQsc2hvd19wb3dlcixzdG9yZV9wb3dlcik7CisKK1RoaXMgZGVjbGFyZXMgYSBzdHJ1Y3R1cmUgb2YgdHlwZSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuYW1lZAorJ2Rldl9hdHRyX3Bvd2VyJy4gVGhpcyBjYW4gdGhlbiBiZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB0aGUgZGV2aWNlJ3MKK2RpcmVjdG9yeSB1c2luZzoKKworaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogZW50cnkpOwordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKKworRXhhbXBsZToKKworZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwmZGV2X2F0dHJfcG93ZXIpOworZGV2aWNlX3JlbW92ZV9maWxlKGRldiwmZGV2X2F0dHJfcG93ZXIpOworCitUaGUgZmlsZSBuYW1lIHdpbGwgYmUgJ3Bvd2VyJyB3aXRoIGEgbW9kZSBvZiAwNjQ0ICgtcnctci0tci0tKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0NDc3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKQEAgLTAsMCArMSwyODcgQEAKKworRGV2aWNlIERyaXZlcnMKKworc3RydWN0IGRldmljZV9kcml2ZXIgeworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqIG5hbWU7CisgICAgICAgIHN0cnVjdCBidXNfdHlwZSAgICAgICAgICogYnVzOworCisgICAgICAgIHJ3bG9ja190ICAgICAgICAgICAgICAgIGxvY2s7CisgICAgICAgIGF0b21pY190ICAgICAgICAgICAgICAgIHJlZmNvdW50OworCisgICAgICAgIGxpc3RfdCAgICAgICAgICAgICAgICAgIGJ1c19saXN0OworICAgICAgICBsaXN0X3QgICAgICAgICAgICAgICAgICBkZXZpY2VzOworCisgICAgICAgIHN0cnVjdCBkcml2ZXJfZGlyX2VudHJ5IGRpcjsKKworICAgICAgICBpbnQgICAgICgqcHJvYmUpICAgICAgICAoc3RydWN0IGRldmljZSAqIGRldik7CisgICAgICAgIGludCAgICAgKCpyZW1vdmUpICAgICAgIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworICAgICAgICBpbnQgICAgICgqc3VzcGVuZCkgICAgICAoc3RydWN0IGRldmljZSAqIGRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpOworICAgICAgICBpbnQgICAgICgqcmVzdW1lKSAgICAgICAoc3RydWN0IGRldmljZSAqIGRldiwgdTMyIGxldmVsKTsKKworICAgICAgICB2b2lkICAgICgqcmVsZWFzZSkgICAgICAoc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworfTsKKworCisKK0FsbG9jYXRpb24KK35+fn5+fn5+fn4KKworRGV2aWNlIGRyaXZlcnMgYXJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMuIFRob3VnaCB0aGVyZSBtYXkKK2JlIG11bHRpcGxlIGRldmljZXMgaW4gYSBzeXN0ZW0gdGhhdCBhIGRyaXZlciBzdXBwb3J0cywgc3RydWN0CitkZXZpY2VfZHJpdmVyIHJlcHJlc2VudHMgdGhlIGRyaXZlciBhcyBhIHdob2xlIChub3QgYSBwYXJ0aWN1bGFyCitkZXZpY2UgaW5zdGFuY2UpLgorCitJbml0aWFsaXphdGlvbgorfn5+fn5+fn5+fn5+fn4KKworVGhlIGRyaXZlciBtdXN0IGluaXRpYWxpemUgYXQgbGVhc3QgdGhlIG5hbWUgYW5kIGJ1cyBmaWVsZHMuIEl0IHNob3VsZAorYWxzbyBpbml0aWFsaXplIHRoZSBkZXZjbGFzcyBmaWVsZCAod2hlbiBpdCBhcnJpdmVzKSwgc28gaXQgbWF5IG9idGFpbgordGhlIHByb3BlciBsaW5rYWdlIGludGVybmFsbHkuIEl0IHNob3VsZCBhbHNvIGluaXRpYWxpemUgYXMgbWFueSBvZgordGhlIGNhbGxiYWNrcyBhcyBwb3NzaWJsZSwgdGhvdWdoIGVhY2ggaXMgb3B0aW9uYWwuCisKK0RlY2xhcmF0aW9uCit+fn5+fn5+fn5+fgorCitBcyBzdGF0ZWQgYWJvdmUsIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9iamVjdHMgYXJlIHN0YXRpY2FsbHkKK2FsbG9jYXRlZC4gQmVsb3cgaXMgYW4gZXhhbXBsZSBkZWNsYXJhdGlvbiBvZiB0aGUgZWVwcm8xMDAKK2RyaXZlci4gVGhpcyBkZWNsYXJhdGlvbiBpcyBoeXBvdGhldGljYWwgb25seTsgaXQgcmVsaWVzIG9uIHRoZSBkcml2ZXIKK2JlaW5nIGNvbnZlcnRlZCBjb21wbGV0ZWx5IHRvIHRoZSBuZXcgbW9kZWwuIAorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZWVwcm8xMDBfZHJpdmVyID0geworICAgICAgIC5uYW1lCQk9ICJlZXBybzEwMCIsCisgICAgICAgLmJ1cwkJPSAmcGNpX2J1c190eXBlLAorICAgICAgIC5kZXZjbGFzcwk9ICZldGhlcm5ldF9kZXZjbGFzcywJLyogd2hlbiBpdCdzIGltcGxlbWVudGVkICovCisgICAgICAgCisgICAgICAgLnByb2JlCQk9IGVlcHJvMTAwX3Byb2JlLAorICAgICAgIC5yZW1vdmUJCT0gZWVwcm8xMDBfcmVtb3ZlLAorICAgICAgIC5zdXNwZW5kCQk9IGVlcHJvMTAwX3N1c3BlbmQsCisgICAgICAgLnJlc3VtZQkJPSBlZXBybzEwMF9yZXN1bWUsCit9OworCitNb3N0IGRyaXZlcnMgd2lsbCBub3QgYmUgYWJsZSB0byBiZSBjb252ZXJ0ZWQgY29tcGxldGVseSB0byB0aGUgbmV3Cittb2RlbCBiZWNhdXNlIHRoZSBidXMgdGhleSBiZWxvbmcgdG8gaGFzIGEgYnVzLXNwZWNpZmljIHN0cnVjdHVyZSB3aXRoCitidXMtc3BlY2lmaWMgZmllbGRzIHRoYXQgY2Fubm90IGJlIGdlbmVyYWxpemVkLiAKKworVGhlIG1vc3QgY29tbW9uIGV4YW1wbGUgb2YgdGhpcyBhcmUgZGV2aWNlIElEIHN0cnVjdHVyZXMuIEEgZHJpdmVyCit0eXBpY2FsbHkgZGVmaW5lcyBhbiBhcnJheSBvZiBkZXZpY2UgSURzIHRoYXQgaXQgc3VwcG9ydHMuIFRoZSBmb3JtYXQKK29mIHRoZXNlIHN0cnVjdHVyZXMgYW5kIHRoZSBzZW1hbnRpY3MgZm9yIGNvbXBhcmluZyBkZXZpY2UgSURzIGFyZQorY29tcGxldGVseSBidXMtc3BlY2lmaWMuIERlZmluaW5nIHRoZW0gYXMgYnVzLXNwZWNpZmljIGVudGl0aWVzIHdvdWxkCitzYWNyaWZpY2UgdHlwZS1zYWZldHksIHNvIHdlIGtlZXAgYnVzLXNwZWNpZmljIHN0cnVjdHVyZXMgYXJvdW5kLiAKKworQnVzLXNwZWNpZmljIGRyaXZlcnMgc2hvdWxkIGluY2x1ZGUgYSBnZW5lcmljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGluCit0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYnVzLXNwZWNpZmljIGRyaXZlci4gTGlrZSB0aGlzOgorCitzdHJ1Y3QgcGNpX2RyaXZlciB7CisgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX3RhYmxlOworICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyCSAgZHJpdmVyOworfTsKKworQSBkZWZpbml0aW9uIHRoYXQgaW5jbHVkZWQgYnVzLXNwZWNpZmljIGZpZWxkcyB3b3VsZCBsb29rIGxpa2UKKyh1c2luZyB0aGUgZWVwcm8xMDAgZHJpdmVyIGFnYWluKToKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVlcHJvMTAwX2RyaXZlciA9IHsKKyAgICAgICAuaWRfdGFibGUgICAgICAgPSBlZXBybzEwMF9wY2lfdGJsLAorICAgICAgIC5kcml2ZXIJICAgICAgID0geworCQkubmFtZQkJPSAiZWVwcm8xMDAiLAorCQkuYnVzCQk9ICZwY2lfYnVzX3R5cGUsCisJCS5kZXZjbGFzcwk9ICZldGhlcm5ldF9kZXZjbGFzcywJLyogd2hlbiBpdCdzIGltcGxlbWVudGVkICovCisJCS5wcm9iZQkJPSBlZXBybzEwMF9wcm9iZSwKKwkJLnJlbW92ZQkJPSBlZXBybzEwMF9yZW1vdmUsCisJCS5zdXNwZW5kCT0gZWVwcm8xMDBfc3VzcGVuZCwKKwkJLnJlc3VtZQkJPSBlZXBybzEwMF9yZXN1bWUsCisgICAgICAgfSwKK307CisKK1NvbWUgbWF5IGZpbmQgdGhlIHN5bnRheCBvZiBlbWJlZGRlZCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24gYXdrd2FyZCBvcgorZXZlbiBhIGJpdCB1Z2x5LiBTbyBmYXIsIGl0J3MgdGhlIGJlc3Qgd2F5IHdlJ3ZlIGZvdW5kIHRvIGRvIHdoYXQgd2Ugd2FudC4uLgorCitSZWdpc3RyYXRpb24KK35+fn5+fn5+fn5+fgorCitpbnQgZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKKworVGhlIGRyaXZlciByZWdpc3RlcnMgdGhlIHN0cnVjdHVyZSBvbiBzdGFydHVwLiBGb3IgZHJpdmVycyB0aGF0IGhhdmUKK25vIGJ1cy1zcGVjaWZpYyBmaWVsZHMgKGkuZS4gZG9uJ3QgaGF2ZSBhIGJ1cy1zcGVjaWZpYyBkcml2ZXIKK3N0cnVjdHVyZSksIHRoZXkgd291bGQgdXNlIGRyaXZlcl9yZWdpc3RlciBhbmQgcGFzcyBhIHBvaW50ZXIgdG8gdGhlaXIKK3N0cnVjdCBkZXZpY2VfZHJpdmVyIG9iamVjdC4gCisKK01vc3QgZHJpdmVycywgaG93ZXZlciwgd2lsbCBoYXZlIGEgYnVzLXNwZWNpZmljIHN0cnVjdHVyZSBhbmQgd2lsbAorbmVlZCB0byByZWdpc3RlciB3aXRoIHRoZSBidXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgcGNpX2RyaXZlcl9yZWdpc3Rlci4KKworSXQgaXMgaW1wb3J0YW50IHRoYXQgZHJpdmVycyByZWdpc3RlciB0aGVpciBkcml2ZXIgc3RydWN0dXJlIGFzIGVhcmx5IGFzCitwb3NzaWJsZS4gUmVnaXN0cmF0aW9uIHdpdGggdGhlIGNvcmUgaW5pdGlhbGl6ZXMgc2V2ZXJhbCBmaWVsZHMgaW4gdGhlCitzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvYmplY3QsIGluY2x1ZGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCB0aGUKK2xvY2suIFRoZXNlIGZpZWxkcyBhcmUgYXNzdW1lZCB0byBiZSB2YWxpZCBhdCBhbGwgdGltZXMgYW5kIG1heSBiZQordXNlZCBieSB0aGUgZGV2aWNlIG1vZGVsIGNvcmUgb3IgdGhlIGJ1cyBkcml2ZXIuCisKKworVHJhbnNpdGlvbiBCdXMgRHJpdmVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitCeSBkZWZpbmluZyB3cmFwcGVyIGZ1bmN0aW9ucywgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbCBjYW4gYmUKK21hZGUgZWFzaWVyLiBEcml2ZXJzIGNhbiBpZ25vcmUgdGhlIGdlbmVyaWMgc3RydWN0dXJlIGFsdG9nZXRoZXIgYW5kCitsZXQgdGhlIGJ1cyB3cmFwcGVyIGZpbGwgaW4gdGhlIGZpZWxkcy4gRm9yIHRoZSBjYWxsYmFja3MsIHRoZSBidXMgY2FuCitkZWZpbmUgZ2VuZXJpYyBjYWxsYmFja3MgdGhhdCBmb3J3YXJkIHRoZSBjYWxsIHRvIHRoZSBidXMtc3BlY2lmaWMKK2NhbGxiYWNrcyBvZiB0aGUgZHJpdmVycy4gCisKK1RoaXMgc29sdXRpb24gaXMgaW50ZW5kZWQgdG8gYmUgb25seSB0ZW1wb3JhcnkuIEluIG9yZGVyIHRvIGdldCBjbGFzcworaW5mb3JtYXRpb24gaW4gdGhlIGRyaXZlciwgdGhlIGRyaXZlcnMgbXVzdCBiZSBtb2RpZmllZCBhbnl3YXkuIFNpbmNlCitjb252ZXJ0aW5nIGRyaXZlcnMgdG8gdGhlIG5ldyBtb2RlbCBzaG91bGQgcmVkdWNlIHNvbWUgaW5mcmFzdHJ1Y3R1cmFsCitjb21wbGV4aXR5IGFuZCBjb2RlIHNpemUsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhleSBhcmUgY29udmVydGVkIGFzCitjbGFzcyBpbmZvcm1hdGlvbiBpcyBhZGRlZC4KKworQWNjZXNzCit+fn5+fn4KKworT25jZSB0aGUgb2JqZWN0IGhhcyBiZWVuIHJlZ2lzdGVyZWQsIGl0IG1heSBhY2Nlc3MgdGhlIGNvbW1vbiBmaWVsZHMgb2YKK3RoZSBvYmplY3QsIGxpa2UgdGhlIGxvY2sgYW5kIHRoZSBsaXN0IG9mIGRldmljZXMuIAorCitpbnQgZHJpdmVyX2Zvcl9lYWNoX2RldihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydiwgdm9pZCAqIGRhdGEsIAorCQkgICAgICAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgZGV2aWNlICogZGV2LCB2b2lkICogZGF0YSkpOworCitUaGUgZGV2aWNlcyBmaWVsZCBpcyBhIGxpc3Qgb2YgYWxsIHRoZSBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuIGJvdW5kIHRvCit0aGUgZHJpdmVyLiBUaGUgTERNIGNvcmUgcHJvdmlkZXMgYSBoZWxwZXIgZnVuY3Rpb24gdG8gb3BlcmF0ZSBvbiBhbGwKK3RoZSBkZXZpY2VzIGEgZHJpdmVyIGNvbnRyb2xzLiBUaGlzIGhlbHBlciBsb2NrcyB0aGUgZHJpdmVyIG9uIGVhY2gKK25vZGUgYWNjZXNzLCBhbmQgZG9lcyBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIG9uIGVhY2ggZGV2aWNlIGFzIGl0CithY2Nlc3NlcyBpdC4gCisKKworc3lzZnMKK35+fn5+CisKK1doZW4gYSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCwgYSBzeXNmcyBkaXJlY3RvcnkgaXMgY3JlYXRlZCBpbiBpdHMKK2J1cydzIGRpcmVjdG9yeS4gSW4gdGhpcyBkaXJlY3RvcnksIHRoZSBkcml2ZXIgY2FuIGV4cG9ydCBhbiBpbnRlcmZhY2UKK3RvIHVzZXJzcGFjZSB0byBjb250cm9sIG9wZXJhdGlvbiBvZiB0aGUgZHJpdmVyIG9uIGEgZ2xvYmFsIGJhc2lzOworZS5nLiB0b2dnbGluZyBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBkcml2ZXIuCisKK0EgZnV0dXJlIGZlYXR1cmUgb2YgdGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSBhICdkZXZpY2VzJyBkaXJlY3RvcnkuIFRoaXMKK2RpcmVjdG9yeSB3aWxsIGNvbnRhaW4gc3ltbGlua3MgdG8gdGhlIGRpcmVjdG9yaWVzIG9mIGRldmljZXMgaXQKK3N1cHBvcnRzLgorCisKKworQ2FsbGJhY2tzCit+fn5+fn5+fn4KKworCWludAkoKnByb2JlKQkoc3RydWN0IGRldmljZSAqIGRldik7CisKK3Byb2JlIGlzIGNhbGxlZCB0byB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiBhIGNlcnRhaW4gdHlwZSBvZgoraGFyZHdhcmUuIFRoaXMgaXMgY2FsbGVkIGR1cmluZyB0aGUgZHJpdmVyIGJpbmRpbmcgcHJvY2VzcywgYWZ0ZXIgdGhlCitidXMgaGFzIHZlcmlmaWVkIHRoYXQgdGhlIGRldmljZSBJRCBvZiBhIGRldmljZSBtYXRjaGVzIG9uZSBvZiB0aGUKK2RldmljZSBJRHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuIAorCitUaGlzIGNhbGxiYWNrIG9ubHkgdmVyaWZpZXMgdGhhdCB0aGVyZSBhY3R1YWxseSBpcyBzdXBwb3J0ZWQgaGFyZHdhcmUKK3ByZXNlbnQuIEl0IG1heSBhbGxvY2F0ZSBhIGRyaXZlci1zcGVjaWZpYyBzdHJ1Y3R1cmUsIGJ1dCBpdCBzaG91bGQKK25vdCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhhcmR3YXJlIGl0c2VsZi4gVGhlIGRldmljZS1zcGVjaWZpYworc3RydWN0dXJlIG1heSBiZSBzdG9yZWQgaW4gdGhlIGRldmljZSdzIGRyaXZlcl9kYXRhIGZpZWxkLiAKKworCWludAkoKmluaXQpCQkoc3RydWN0IGRldmljZSAqIGRldik7CisKK2luaXQgaXMgY2FsbGVkIGR1cmluZyB0aGUgYmluZGluZyBzdGFnZS4gSXQgaXMgY2FsbGVkIGFmdGVyIHByb2JlIGhhcworc3VjY2Vzc2Z1bGx5IHJldHVybmVkIGFuZCB0aGUgZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCBpdHMKK2NsYXNzLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZS4KKworCWludCAJKCpyZW1vdmUpCShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKworcmVtb3ZlIGlzIGNhbGxlZCB0byBkaXNzb2NpYXRlIGEgZHJpdmVyIHdpdGggYSBkZXZpY2UuIFRoaXMgbWF5IGJlCitjYWxsZWQgaWYgYSBkZXZpY2UgaXMgcGh5c2ljYWxseSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwgaWYgdGhlCitkcml2ZXIgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLCBvciBkdXJpbmcgYSByZWJvb3Qgc2VxdWVuY2UuIAorCitJdCBpcyB1cCB0byB0aGUgZHJpdmVyIHRvIGRldGVybWluZSBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgb3IKK25vdC4gSXQgc2hvdWxkIGZyZWUgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUKK2RldmljZTsgaS5lLiBhbnl0aGluZyBpbiB0aGUgZGV2aWNlJ3MgZHJpdmVyX2RhdGEgZmllbGQuIAorCitJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIHByZXNlbnQsIGl0IHNob3VsZCBxdWllc2NlIHRoZSBkZXZpY2UgYW5kIHBsYWNlCitpdCBpbnRvIGEgc3VwcG9ydGVkIGxvdy1wb3dlciBzdGF0ZS4KKworCWludAkoKnN1c3BlbmQpCShzdHJ1Y3QgZGV2aWNlICogZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCk7CisKK3N1c3BlbmQgaXMgY2FsbGVkIHRvIHB1dCB0aGUgZGV2aWNlIGluIGEgbG93IHBvd2VyIHN0YXRlLiBUaGVyZSBhcmUKK3NldmVyYWwgc3RhZ2VzIHRvIHN1Y2Nlc3NmdWxseSBzdXNwZW5kaW5nIGEgZGV2aWNlLCB3aGljaCBpcyBkZW5vdGVkIGluCit0aGUgQGxldmVsIHBhcmFtZXRlci4gQnJlYWtpbmcgdGhlIHN1c3BlbmQgdHJhbnNpdGlvbiBpbnRvIHNldmVyYWwKK3N0YWdlcyBhZmZvcmRzIHRoZSBwbGF0Zm9ybSBmbGV4aWJpbGl0eSBpbiBwZXJmb3JtaW5nIGRldmljZSBwb3dlcgorbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHRoZQordXNlci1kZWZpbmVkIHBvbGljeS4KKworU1VTUEVORF9OT1RJRlkgbm90aWZpZXMgdGhlIGRldmljZSB0aGF0IGEgc3VzcGVuZCB0cmFuc2l0aW9uIGlzIGFib3V0Cit0byBoYXBwZW4uIFRoaXMgaGFwcGVucyBvbiBzeXN0ZW0gcG93ZXIgc3RhdGUgdHJhbnNpdGlvbnMgdG8gdmVyaWZ5Cit0aGF0IGFsbCBkZXZpY2VzIGNhbiBzdWNjZXNzZnVsbHkgc3VzcGVuZC4KKworQSBkcml2ZXIgbWF5IGNob29zZSB0byBmYWlsIG9uIHRoaXMgY2FsbCwgd2hpY2ggc2hvdWxkIGNhdXNlIHRoZQorZW50aXJlIHN1c3BlbmQgdHJhbnNpdGlvbiB0byBmYWlsLiBBIGRyaXZlciBzaG91bGQgZmFpbCBvbmx5IGlmIGl0Citrbm93cyB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBub3QgYmUgYWJsZSB0byBiZSByZXN1bWVkIHByb3Blcmx5IHdoZW4gdGhlCitzeXN0ZW0gd2FrZXMgdXAgYWdhaW4uIEl0IGNvdWxkIGFsc28gZmFpbCBpZiBpdCBzb21laG93IGRldGVybWluZXMgaXQKK2lzIGluIHRoZSBtaWRkbGUgb2YgYW4gb3BlcmF0aW9uIHRvbyBpbXBvcnRhbnQgdG8gc3RvcC4KKworU1VTUEVORF9ESVNBQkxFIHRlbGxzIHRoZSBkZXZpY2UgdG8gc3RvcCBJL08gdHJhbnNhY3Rpb25zLiBXaGVuIGl0CitzdG9wcyB0cmFuc2FjdGlvbnMsIG9yIHdoYXQgaXQgc2hvdWxkIGRvIHdpdGggdW5maW5pc2hlZCB0cmFuc2FjdGlvbnMKK2lzIGEgcG9saWN5IG9mIHRoZSBkcml2ZXIuIEFmdGVyIHRoaXMgY2FsbCwgdGhlIGRyaXZlciBzaG91bGQgbm90CithY2NlcHQgYW55IG90aGVyIEkvTyByZXF1ZXN0cy4KKworU1VTUEVORF9TQVZFX1NUQVRFIHRlbGxzIHRoZSBkZXZpY2UgdG8gc2F2ZSB0aGUgY29udGV4dCBvZiB0aGUKK2hhcmR3YXJlLiBUaGlzIGluY2x1ZGVzIGFueSBidXMtc3BlY2lmaWMgaGFyZHdhcmUgc3RhdGUgYW5kCitkZXZpY2Utc3BlY2lmaWMgaGFyZHdhcmUgc3RhdGUuIEEgcG9pbnRlciB0byB0aGlzIHNhdmVkIHN0YXRlIGNhbiBiZQorc3RvcmVkIGluIHRoZSBkZXZpY2UncyBzYXZlZF9zdGF0ZSBmaWVsZC4KKworU1VTUEVORF9QT1dFUl9ET1dOIHRlbGxzIHRoZSBkcml2ZXIgdG8gcGxhY2UgdGhlIGRldmljZSBpbiB0aGUgbG93Citwb3dlciBzdGF0ZSByZXF1ZXN0ZWQuIAorCitXaGV0aGVyIHN1c3BlbmQgaXMgY2FsbGVkIHdpdGggYSBnaXZlbiBsZXZlbCBpcyBhIHBvbGljeSBvZiB0aGUKK3BsYXRmb3JtLiBTb21lIGxldmVscyBtYXkgYmUgb21pdHRlZDsgZHJpdmVycyBtdXN0IG5vdCBhc3N1bWUgdGhlCityZWNlcHRpb24gb2YgYW55IGxldmVsLiBIb3dldmVyLCBhbGwgbGV2ZWxzIG11c3QgYmUgY2FsbGVkIGluIHRoZQorb3JkZXIgYWJvdmU7IGkuZS4gbm90aWZpY2F0aW9uIHdpbGwgYWx3YXlzIGNvbWUgYmVmb3JlIGRpc2FibGluZzsKK2Rpc2FibGluZyB0aGUgZGV2aWNlIHdpbGwgY29tZSBiZWZvcmUgc3VzcGVuZGluZyB0aGUgZGV2aWNlLgorCitBbGwgY2FsbHMgYXJlIG1hZGUgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQsIGV4Y2VwdCBmb3IgdGhlCitTVVNQRU5EX1BPV0VSX0RPV04gbGV2ZWwuCisKKwlpbnQJKCpyZXN1bWUpCShzdHJ1Y3QgZGV2aWNlICogZGV2LCB1MzIgbGV2ZWwpOworCitSZXN1bWUgaXMgdXNlZCB0byBicmluZyBhIGRldmljZSBiYWNrIGZyb20gYSBsb3cgcG93ZXIgc3RhdGUuIExpa2UgdGhlCitzdXNwZW5kIHRyYW5zaXRpb24sIGl0IGhhcHBlbnMgaW4gc2V2ZXJhbCBzdGFnZXMuIAorCitSRVNVTUVfUE9XRVJfT04gdGVsbHMgdGhlIGRyaXZlciB0byBzZXQgdGhlIHBvd2VyIHN0YXRlIHRvIHRoZSBzdGF0ZQorYmVmb3JlIHRoZSBzdXNwZW5kIGNhbGwgKFRoZSBkZXZpY2UgY291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gaW4gYSBsb3cKK3Bvd2VyIHN0YXRlIGJlZm9yZSB0aGUgc3VzcGVuZCBjYWxsIHRvIHB1dCBpbiBhIGxvd2VyIHBvd2VyIHN0YXRlKS4gCisKK1JFU1VNRV9SRVNUT1JFX1NUQVRFIHRlbGxzIHRoZSBkcml2ZXIgdG8gcmVzdG9yZSB0aGUgc3RhdGUgc2F2ZWQgYnkKK3RoZSBTVVNQRU5EX1NBVkVfU1RBVEUgc3VzcGVuZCBjYWxsLiAKKworUkVTVU1FX0VOQUJMRSB0ZWxscyB0aGUgZHJpdmVyIHRvIHN0YXJ0IGFjY2VwdGluZyBJL08gdHJhbnNhY3Rpb25zCithZ2Fpbi4gRGVwZW5kaW5nIG9uIGRyaXZlciBwb2xpY3ksIHRoZSBkZXZpY2UgbWF5IGFscmVhZHkgaGF2ZSBwZW5kaW5nCitJL08gcmVxdWVzdHMuIAorCitSRVNVTUVfUE9XRVJfT04gaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gVGhlIG90aGVyIHJlc3VtZQorbGV2ZWxzIGFyZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIAorCitBcyB3aXRoIHRoZSB2YXJpb3VzIHN1c3BlbmQgc3RhZ2VzLCB0aGUgZHJpdmVyIG11c3Qgbm90IGFzc3VtZSB0aGF0Cithbnkgb3RoZXIgcmVzdW1lIGNhbGxzIGhhdmUgYmVlbiBvciB3aWxsIGJlIG1hZGUuIEVhY2ggY2FsbCBzaG91bGQgYmUKK3NlbGYtY29udGFpbmVkIGFuZCBub3QgZGVwZW5kZW50IG9uIGFueSBleHRlcm5hbCBzdGF0ZS4KKworCitBdHRyaWJ1dGVzCit+fn5+fn5+fn5+CitzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSB7CisgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7CisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjaGFyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOworICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZik7Cit9OworCitEZXZpY2UgZHJpdmVycyBjYW4gZXhwb3J0IGF0dHJpYnV0ZXMgdmlhIHRoZWlyIHN5c2ZzIGRpcmVjdG9yaWVzLiAKK0RyaXZlcnMgY2FuIGRlY2xhcmUgYXR0cmlidXRlcyB1c2luZyBhIERSSVZFUl9BVFRSIG1hY3JvIHRoYXQgd29ya3MKK2lkZW50aWNhbGx5IHRvIHRoZSBERVZJQ0VfQVRUUiBtYWNyby4gCisKK0V4YW1wbGU6CisKK0RSSVZFUl9BVFRSKGRlYnVnLDA2NDQsc2hvd19kZWJ1ZyxzdG9yZV9kZWJ1Zyk7CisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBkZWNsYXJpbmc6CisKK3N0cnVjdCBkcml2ZXJfYXR0cmlidXRlIGRyaXZlcl9hdHRyX2RlYnVnOworCitUaGlzIGNhbiB0aGVuIGJlIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZQorZHJpdmVyJ3MgZGlyZWN0b3J5IHVzaW5nOgorCitpbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwordm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9pbnRlcmZhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvaW50ZXJmYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY5MTJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvaW50ZXJmYWNlLnR4dApAQCAtMCwwICsxLDEyOSBAQAorCitEZXZpY2UgSW50ZXJmYWNlcworCitJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fgorCitEZXZpY2UgaW50ZXJmYWNlcyBhcmUgdGhlIGxvZ2ljYWwgaW50ZXJmYWNlcyBvZiBkZXZpY2UgY2xhc3NlcyB0aGF0IGNvcnJlbGF0ZQorZGlyZWN0bHkgdG8gdXNlcnNwYWNlIGludGVyZmFjZXMsIGxpa2UgZGV2aWNlIG5vZGVzLiAKKyAgIAorRWFjaCBkZXZpY2UgY2xhc3MgbWF5IGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyB0aHJvdWdoIHdoaWNoIHlvdSBjYW4gCithY2Nlc3MgdGhlIHNhbWUgZGV2aWNlLiBBbiBpbnB1dCBkZXZpY2UgbWF5IHN1cHBvcnQgdGhlIG1vdXNlIGludGVyZmFjZSwgCit0aGUgJ2V2ZGV2JyBpbnRlcmZhY2UsIGFuZCB0aGUgdG91Y2hzY3JlZW4gaW50ZXJmYWNlLiBBIFNDU0kgZGlzayB3b3VsZCAKK3N1cHBvcnQgdGhlIGRpc2sgaW50ZXJmYWNlLCB0aGUgU0NTSSBnZW5lcmljIGludGVyZmFjZSwgYW5kIHBvc3NpYmx5IGEgcmF3IAorZGV2aWNlIGludGVyZmFjZS4gCisKK0RldmljZSBpbnRlcmZhY2VzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzIHRoZXkgYmVsb25nIHRvLiBBcyBkZXZpY2VzCithcmUgYWRkZWQgdG8gdGhlIGNsYXNzLCB0aGV5IGFyZSBhZGRlZCB0byBlYWNoIGludGVyZmFjZSByZWdpc3RlcmVkIHdpdGgKK3RoZSBjbGFzcy4gVGhlIGludGVyZmFjZSBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgZGV2aWNlCitzdXBwb3J0cyB0aGUgaW50ZXJmYWNlIG9yIG5vdC4gCisKKworUHJvZ3JhbW1pbmcgSW50ZXJmYWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworc3RydWN0IGRldmljZV9pbnRlcmZhY2UgeworCWNoYXIJCQkqIG5hbWU7CisJcndsb2NrX3QJCWxvY2s7CisJdTMyCQkJZGV2bnVtOworCXN0cnVjdCBkZXZpY2VfY2xhc3MJKiBkZXZjbGFzczsKKworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgZHJpdmVyX2Rpcl9lbnRyeQlkaXI7CisKKwlpbnQgKCphZGRfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICopOworCWludCAoKmFkZF9kZXZpY2UpKHN0cnVjdCBpbnRmX2RhdGEgKik7Cit9OworCitpbnQgaW50ZXJmYWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2VfaW50ZXJmYWNlICopOwordm9pZCBpbnRlcmZhY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlX2ludGVyZmFjZSAqKTsKKworCitBbiBpbnRlcmZhY2UgbXVzdCBzcGVjaWZ5IHRoZSBkZXZpY2UgY2xhc3MgaXQgYmVsb25ncyB0by4gSXQgaXMgYWRkZWQKK3RvIHRoYXQgY2xhc3MncyBsaXN0IG9mIGludGVyZmFjZXMgb24gcmVnaXN0cmF0aW9uLgorCisKK0ludGVyZmFjZXMgY2FuIGJlIGFkZGVkIHRvIGEgZGV2aWNlIGNsYXNzIGF0IGFueSB0aW1lLiBXaGVuZXZlciBpdCBpcworYWRkZWQsIGVhY2ggZGV2aWNlIGluIHRoZSBjbGFzcyBpcyBwYXNzZWQgdG8gdGhlIGludGVyZmFjZSdzCithZGRfZGV2aWNlIGNhbGxiYWNrLiBXaGVuIGFuIGludGVyZmFjZSBpcyByZW1vdmVkLCBlYWNoIGRldmljZSBpcworcmVtb3ZlZCBmcm9tIHRoZSBpbnRlcmZhY2UuCisKKworRGV2aWNlcworfn5+fn5+fgorT25jZSBhIGRldmljZSBpcyBhZGRlZCB0byBhIGRldmljZSBjbGFzcywgaXQgaXMgYWRkZWQgdG8gZWFjaAoraW50ZXJmYWNlIHRoYXQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZpY2UgY2xhc3MuIFRoZSBjbGFzcworaXMgZXhwZWN0ZWQgdG8gcGxhY2UgYSBjbGFzcy1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBpbiAKK3N0cnVjdCBkZXZpY2U6OmNsYXNzX2RhdGEuIFRoZSBpbnRlcmZhY2UgY2FuIHVzZSB0aGF0IChhbG9uZyB3aXRoCitvdGhlciBmaWVsZHMgb2Ygc3RydWN0IGRldmljZSkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBkcml2ZXIKK2FuZC9vciBkZXZpY2Ugc3VwcG9ydCB0aGF0IHBhcnRpY3VsYXIgaW50ZXJmYWNlLgorCisKK0RhdGEKK35+fn4KKworc3RydWN0IGludGZfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBkZXZpY2VfaW50ZXJmYWNlCSogaW50ZjsKKwlzdHJ1Y3QgZGV2aWNlIAkJKiBkZXY7CisJdTMyCQkJaW50Zl9udW07Cit9OworCitpbnQgaW50ZXJmYWNlX2FkZF9kYXRhKHN0cnVjdCBpbnRlcmZhY2VfZGF0YSAqKTsKKworVGhlIGludGVyZmFjZSBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIGEgc3RydWN0IAoraW50Zl9kYXRhIGFuZCBjYWxsaW5nIGludGVyZmFjZV9hZGRfZGF0YSgpIHRvIGFkZCBpdCB0byB0aGUgZGV2aWNlJ3MgbGlzdAorb2YgaW50ZXJmYWNlcyBpdCBiZWxvbmdzIHRvLiBUaGlzIGxpc3Qgd2lsbCBiZSBpdGVyYXRlZCBvdmVyIHdoZW4gdGhlIGRldmljZQoraXMgcmVtb3ZlZCBmcm9tIHRoZSBjbGFzcyAoaW5zdGVhZCBvZiBhbGwgcG9zc2libGUgaW50ZXJmYWNlcyBmb3IgYSBjbGFzcykuCitUaGlzIHN0cnVjdHVyZSBzaG91bGQgcHJvYmFibHkgYmUgZW1iZWRkZWQgaW4gd2hhdGV2ZXIgcGVyLWRldmljZSBkYXRhIAorc3RydWN0dXJlIHRoZSBpbnRlcmZhY2UgaXMgYWxsb2NhdGluZyBhbnl3YXkuCisgICAKK0RldmljZXMgYXJlIGVudW1lcmF0ZWQgd2l0aGluIHRoZSBpbnRlcmZhY2UuIFRoaXMgaGFwcGVucyBpbiBpbnRlcmZhY2VfYWRkX2RhdGEoKQorYW5kIHRoZSBlbnVtZXJhdGVkIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgc3RydWN0IGludGZfZGF0YSBmb3IgdGhhdCBkZXZpY2UuIAorCitzeXNmcworfn5+fn4KK0VhY2ggaW50ZXJmYWNlIGlzIGdpdmVuIGEgZGlyZWN0b3J5IGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGRldmljZQorY2xhc3MgaXQgYmVsb25ncyB0bzoKKworSW50ZXJmYWNlcyBnZXQgYSBkaXJlY3RvcnkgaW4gdGhlIGNsYXNzJ3MgZGlyZWN0b3J5IGFzIHdlbGw6CisKKyAgIGNsYXNzLworICAgYC0tIGlucHV0CisgICAgICAgfC0tIGRldmljZXMKKyAgICAgICB8LS0gZHJpdmVycworICAgICAgIHwtLSBtb3VzZQorICAgICAgIGAtLSBldmRldgorCitXaGVuIGEgZGV2aWNlIGlzIGFkZGVkIHRvIHRoZSBpbnRlcmZhY2UsIGEgc3ltbGluayBpcyBjcmVhdGVkIHRoYXQgcG9pbnRzIAordG8gdGhlIGRldmljZSdzIGRpcmVjdG9yeSBpbiB0aGUgcGh5c2ljYWwgaGllcmFyY2h5OgorCisgICBjbGFzcy8KKyAgIGAtLSBpbnB1dAorICAgICAgIHwtLSBkZXZpY2VzCisgICAgICAgfCAgIGAtLSAxIC0+IC4uLy4uLy4uL3Jvb3QvcGNpMC8wMDoxZi4wL3VzYl9idXMvMDA6MWYuMi0xOjAvCisgICAgICAgfC0tIGRyaXZlcnMKKyAgICAgICB8ICAgYC0tIHVzYjp1c2JfbW91c2UgLT4gLi4vLi4vLi4vYnVzL2RyaXZlcnMvdXNiX21vdXNlLworICAgICAgIHwtLSBtb3VzZQorICAgICAgIHwgICBgLS0gMSAtPiAuLi8uLi8uLi9yb290L3BjaTAvMDA6MWYuMC91c2JfYnVzLzAwOjFmLjItMTowLworICAgICAgIGAtLSBldmRldgorICAgICAgICAgICBgLS0gMSAtPiAuLi8uLi8uLi9yb290L3BjaTAvMDA6MWYuMC91c2JfYnVzLzAwOjFmLjItMTowLworCisKK0Z1dHVyZSBQbGFucworfn5+fn5+fn5+fn5+CitBIGRldmljZSBpbnRlcmZhY2UgaXMgY29ycmVsYXRlZCBkaXJlY3RseSB3aXRoIGEgdXNlcnNwYWNlIGludGVyZmFjZQorZm9yIGEgZGV2aWNlLCBzcGVjaWZpY2FsbHkgYSBkZXZpY2Ugbm9kZS4gRm9yIGluc3RhbmNlLCBhIFNDU0kgZGlzaworZXhwb3NlcyBhdCBsZWFzdCB0d28gaW50ZXJmYWNlcyB0byB1c2Vyc3BhY2U6IHRoZSBzdGFuZGFyZCBTQ1NJIGRpc2sKK2ludGVyZmFjZSBhbmQgdGhlIFNDU0kgZ2VuZXJpYyBpbnRlcmZhY2UuIEl0IG1pZ2h0IGFsc28gZXhwb3J0IGEgcmF3CitkZXZpY2UgaW50ZXJmYWNlLiAKKworTWFueSBpbnRlcmZhY2VzIGhhdmUgYSBtYWpvciBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIGVhY2gKK2RldmljZSBnZXRzIGEgbWlub3IgbnVtYmVyLiBPciwgbXVsdGlwbGUgaW50ZXJmYWNlcyBtaWdodCBzaGFyZSBvbmUKK21ham9yIG51bWJlciwgYW5kIGVhY2ggd2lsbCByZWNlaXZlIGEgcmFuZ2Ugb2YgbWlub3IgbnVtYmVycyAobGlrZSBpbgordGhlIGNhc2Ugb2YgaW5wdXQgZGV2aWNlcykuCisKK1RoZXNlIG1ham9yIGFuZCBtaW5vciBudW1iZXJzIGNvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW50ZXJmYWNlCitzdHJ1Y3R1cmUuIE1ham9yIGFuZCBtaW5vciBhbGxvY2F0aW9ucyBjb3VsZCBoYXBwZW4gd2hlbiB0aGUgaW50ZXJmYWNlCitpcyByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzLCBvciB2aWEgYSBoZWxwZXIgZnVuY3Rpb24uIAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9vdmVydmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9vdmVydmlldy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NjI3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL292ZXJ2aWV3LnR4dApAQCAtMCwwICsxLDExNCBAQAorVGhlIExpbnV4IEtlcm5lbCBEZXZpY2UgTW9kZWwKKworUGF0cmljayBNb2NoZWwJPG1vY2hlbEBvc2RsLm9yZz4KKworMjYgQXVndXN0IDIwMDIKKworCitPdmVydmlldworfn5+fn5+fn4KKworVGhpcyBkcml2ZXIgbW9kZWwgaXMgYSB1bmlmaWNhdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnQsIGRpc3BhcmF0ZSBkcml2ZXIgbW9kZWxzCit0aGF0IGFyZSBjdXJyZW50bHkgaW4gdGhlIGtlcm5lbC4gSXQgaXMgaW50ZW5kZWQgdG8gYXVnbWVudCB0aGUKK2J1cy1zcGVjaWZpYyBkcml2ZXJzIGZvciBicmlkZ2VzIGFuZCBkZXZpY2VzIGJ5IGNvbnNvbGlkYXRpbmcgYSBzZXQgb2YgZGF0YQorYW5kIG9wZXJhdGlvbnMgaW50byBnbG9iYWxseSBhY2Nlc3NpYmxlIGRhdGEgc3RydWN0dXJlcy4KKworQ3VycmVudCBkcml2ZXIgbW9kZWxzIGltcGxlbWVudCBzb21lIHNvcnQgb2YgdHJlZS1saWtlIHN0cnVjdHVyZSAoc29tZXRpbWVzCitqdXN0IGEgbGlzdCkgZm9yIHRoZSBkZXZpY2VzIHRoZXkgY29udHJvbC4gQnV0LCB0aGVyZSBpcyBubyBsaW5rYWdlIGJldHdlZW4KK3RoZSBkaWZmZXJlbnQgYnVzIHR5cGVzLgorCitBIGNvbW1vbiBkYXRhIHN0cnVjdHVyZSBjYW4gcHJvdmlkZSB0aGlzIGxpbmthZ2Ugd2l0aCBsaXR0bGUgb3ZlcmhlYWQ6IHdoZW4gYQorYnVzIGRyaXZlciBkaXNjb3ZlcnMgYSBwYXJ0aWN1bGFyIGRldmljZSwgaXQgY2FuIGluc2VydCBpdCBpbnRvIHRoZSBnbG9iYWwKK3RyZWUgYXMgd2VsbCBhcyBpdHMgbG9jYWwgdHJlZS4gSW4gZmFjdCwgdGhlIGxvY2FsIHRyZWUgYmVjb21lcyBqdXN0IGEgc3Vic2V0CitvZiB0aGUgZ2xvYmFsIHRyZWUuCisKK0NvbW1vbiBkYXRhIGZpZWxkcyBjYW4gYWxzbyBiZSBtb3ZlZCBvdXQgb2YgdGhlIGxvY2FsIGJ1cyBtb2RlbHMgaW50byB0aGUKK2dsb2JhbCBtb2RlbC4gU29tZSBvZiB0aGUgbWFuaXB1bGF0aW9ucyBvZiB0aGVzZSBmaWVsZHMgY2FuIGFsc28gYmUKK2NvbnNvbGlkYXRlZC4gTW9zdCBsaWtlbHksIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgd2lsbCBiZWNvbWUgYSBzZXQKK29mIGhlbHBlciBmdW5jdGlvbnMsIHdoaWNoIHRoZSBidXMgZHJpdmVycyB3cmFwIGFyb3VuZCB0byBpbmNsdWRlIGFueQorYnVzLXNwZWNpZmljIGl0ZW1zLgorCitUaGUgY29tbW9uIGRldmljZSBhbmQgYnJpZGdlIGludGVyZmFjZSBjdXJyZW50bHkgcmVmbGVjdHMgdGhlIGdvYWxzIG9mIHRoZQorbW9kZXJuIFBDOiBuYW1lbHkgdGhlIGFiaWxpdHkgdG8gZG8gc2VhbWxlc3MgUGx1ZyBhbmQgUGxheSwgcG93ZXIgbWFuYWdlbWVudCwKK2FuZCBob3QgcGx1Zy4gKFRoZSBtb2RlbCBkaWN0YXRlZCBieSBJbnRlbCBhbmQgTWljcm9zb2Z0IChyZWFkOiBBQ1BJKSBlbnN1cmVzCit1cyB0aGF0IGFueSBkZXZpY2UgaW4gdGhlIHN5c3RlbSBtYXkgZml0IGFueSBvZiB0aGVzZSBjcml0ZXJpYS4pCisKK0luIHJlYWxpdHksIG5vdCBldmVyeSBidXMgd2lsbCBiZSBhYmxlIHRvIHN1cHBvcnQgc3VjaCBvcGVyYXRpb25zLiBCdXQsIG1vc3QKK2J1c2VzIHdpbGwgc3VwcG9ydCBhIG1ham9yaXR5IG9mIHRob3NlIG9wZXJhdGlvbnMsIGFuZCBhbGwgZnV0dXJlIGJ1c2VzIHdpbGwuCitJbiBvdGhlciB3b3JkcywgYSBidXMgdGhhdCBkb2Vzbid0IHN1cHBvcnQgYW4gb3BlcmF0aW9uIGlzIHRoZSBleGNlcHRpb24sCitpbnN0ZWFkIG9mIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisKKworRG93bnN0cmVhbSBBY2Nlc3MKK35+fn5+fn5+fn5+fn5+fn5+CisKK0NvbW1vbiBkYXRhIGZpZWxkcyBoYXZlIGJlZW4gbW92ZWQgb3V0IG9mIGluZGl2aWR1YWwgYnVzIGxheWVycyBpbnRvIGEgY29tbW9uCitkYXRhIHN0cnVjdHVyZS4gQnV0LCB0aGVzZSBmaWVsZHMgbXVzdCBzdGlsbCBiZSBhY2Nlc3NlZCBieSB0aGUgYnVzIGxheWVycywKK2FuZCBzb21ldGltZXMgYnkgdGhlIGRldmljZS1zcGVjaWZpYyBkcml2ZXJzLgorCitPdGhlciBidXMgbGF5ZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGRvIHdoYXQgaGFzIGJlZW4gZG9uZSBmb3IgdGhlIFBDSSBsYXllci4KK3N0cnVjdCBwY2lfZGV2IG5vdyBsb29rcyBsaWtlIHRoaXM6CisKK3N0cnVjdCBwY2lfZGV2IHsKKwkuLi4KKworCXN0cnVjdCBkZXZpY2UgZGV2aWNlOworfTsKKworTm90ZSBmaXJzdCB0aGF0IGl0IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLiBUaGlzIG1lYW5zIG9ubHkgb25lIGFsbG9jYXRpb24gb24KK2RldmljZSBkaXNjb3ZlcnkuIE5vdGUgYWxzbyB0aGF0IGl0IGlzIGF0IHRoZSBfZW5kXyBvZiBzdHJ1Y3QgcGNpX2Rldi4gVGhpcyBpcwordG8gbWFrZSBwZW9wbGUgdGhpbmsgYWJvdXQgd2hhdCB0aGV5J3JlIGRvaW5nIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdGhlIGJ1cworZHJpdmVyIGFuZCB0aGUgZ2xvYmFsIGRyaXZlcjsgYW5kIHRvIHByZXZlbnQgYWdhaW5zdCBtaW5kbGVzcyBjYXN0cyBiZXR3ZWVuCit0aGUgdHdvLgorCitUaGUgUENJIGJ1cyBsYXllciBmcmVlbHkgYWNjZXNzZXMgdGhlIGZpZWxkcyBvZiBzdHJ1Y3QgZGV2aWNlLiBJdCBrbm93cyBhYm91dAordGhlIHN0cnVjdHVyZSBvZiBzdHJ1Y3QgcGNpX2RldiwgYW5kIGl0IHNob3VsZCBrbm93IHRoZSBzdHJ1Y3R1cmUgb2Ygc3RydWN0CitkZXZpY2UuIFBDSSBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBnZW5lcmFsbHkgZG8gbm90IHRvdWNoIHRoZSBmaWVsZHMKK29mIHN0cnVjdCBkZXZpY2UuIE1vcmUgcHJlY2lzZWx5LCBkZXZpY2Utc3BlY2lmaWMgZHJpdmVycyBzaG91bGQgbm90IHRvdWNoCitmaWVsZHMgb2Ygc3RydWN0IGRldmljZSB1bmxlc3MgdGhlcmUgaXMgYSBzdHJvbmcgY29tcGVsbGluZyByZWFzb24gdG8gZG8gc28uCisKK1RoaXMgYWJzdHJhY3Rpb24gaXMgcHJldmVudGlvbiBvZiB1bm5lY2Vzc2FyeSBwYWluIGR1cmluZyB0cmFuc2l0aW9uYWwgcGhhc2VzLgorSWYgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNoYW5nZXMgb3IgaXMgcmVtb3ZlZCwgdGhlbiBldmVyeSBkb3duc3RyZWFtIGRyaXZlcgord2lsbCBicmVhay4gT24gdGhlIG90aGVyIGhhbmQsIGlmIG9ubHkgdGhlIGJ1cyBsYXllciAoYW5kIG5vdCB0aGUgZGV2aWNlCitsYXllcikgYWNjZXNzZXMgc3RydWN0IGRldmljZSwgaXQgaXMgb25seSB0aGF0IGxheWVyIHRoYXQgbmVlZHMgdG8gY2hhbmdlLgorCisKK1VzZXIgSW50ZXJmYWNlCit+fn5+fn5+fn5+fn5+fgorCitCeSB2aXJ0dWUgb2YgaGF2aW5nIGEgY29tcGxldGUgaGllcmFyY2hpY2FsIHZpZXcgb2YgYWxsIHRoZSBkZXZpY2VzIGluIHRoZQorc3lzdGVtLCBleHBvcnRpbmcgYSBjb21wbGV0ZSBoaWVyYXJjaGljYWwgdmlldyB0byB1c2Vyc3BhY2UgYmVjb21lcyByZWxhdGl2ZWx5CitlYXN5LiBUaGlzIGhhcyBiZWVuIGFjY29tcGxpc2hlZCBieSBpbXBsZW1lbnRpbmcgYSBzcGVjaWFsIHB1cnBvc2UgdmlydHVhbAorZmlsZSBzeXN0ZW0gbmFtZWQgc3lzZnMuIEl0IGlzIGhlbmNlIHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byBtb3VudCB0aGUKK3dob2xlIHN5c2ZzIGZpbGVzeXN0ZW0gYW55d2hlcmUgaW4gdXNlcnNwYWNlLgorCitUaGlzIGNhbiBiZSBkb25lIHBlcm1hbmVudGx5IGJ5IHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGVudHJ5IGludG8gdGhlCisvZXRjL2ZzdGFiICh1bmRlciB0aGUgcHJvdmlzaW9uIHRoYXQgdGhlIG1vdW50IHBvaW50IGRvZXMgZXhpc3QsIG9mIGNvdXJzZSk6CisKK25vbmUgICAgIAkvc3lzCXN5c2ZzICAgIGRlZmF1bHRzCQkwCTAKKworT3IgYnkgaGFuZCBvbiB0aGUgY29tbWFuZCBsaW5lOgorCisjIG1vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKKworV2hlbmV2ZXIgYSBkZXZpY2UgaXMgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgYSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBmb3IgaXQuCitUaGlzIGRpcmVjdG9yeSBtYXkgYmUgcG9wdWxhdGVkIGF0IGVhY2ggbGF5ZXIgb2YgZGlzY292ZXJ5IC0gdGhlIGdsb2JhbCBsYXllciwKK3RoZSBidXMgbGF5ZXIsIG9yIHRoZSBkZXZpY2UgbGF5ZXIuCisKK1RoZSBnbG9iYWwgbGF5ZXIgY3VycmVudGx5IGNyZWF0ZXMgdHdvIGZpbGVzIC0gJ25hbWUnIGFuZCAncG93ZXInLiBUaGUKK2Zvcm1lciBvbmx5IHJlcG9ydHMgdGhlIG5hbWUgb2YgdGhlIGRldmljZS4gVGhlIGxhdHRlciByZXBvcnRzIHRoZQorY3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgZGV2aWNlLiBJdCB3aWxsIGFsc28gYmUgdXNlZCB0byBzZXQgdGhlIGN1cnJlbnQKK3Bvd2VyIHN0YXRlLiAKKworVGhlIGJ1cyBsYXllciBtYXkgYWxzbyBjcmVhdGUgZmlsZXMgZm9yIHRoZSBkZXZpY2VzIGl0IGZpbmRzIHdoaWxlIHByb2JpbmcgdGhlCitidXMuIEZvciBleGFtcGxlLCB0aGUgUENJIGxheWVyIGN1cnJlbnRseSBjcmVhdGVzICdpcnEnIGFuZCAncmVzb3VyY2UnIGZpbGVzCitmb3IgZWFjaCBQQ0kgZGV2aWNlLgorCitBIGRldmljZS1zcGVjaWZpYyBkcml2ZXIgbWF5IGFsc28gZXhwb3J0IGZpbGVzIGluIGl0cyBkaXJlY3RvcnkgdG8gZXhwb3NlCitkZXZpY2Utc3BlY2lmaWMgZGF0YSBvciB0dW5hYmxlIGludGVyZmFjZXMuCisKK01vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c2ZzIGRpcmVjdG9yeSBsYXlvdXQgY2FuIGJlIGZvdW5kIGluCit0aGUgb3RoZXIgZG9jdW1lbnRzIGluIHRoaXMgZGlyZWN0b3J5IGFuZCBpbiB0aGUgZmlsZSAKK0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wbGF0Zm9ybS50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wbGF0Zm9ybS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlZTNlMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL3BsYXRmb3JtLnR4dApAQCAtMCwwICsxLDk5IEBACitQbGF0Zm9ybSBEZXZpY2VzIGFuZCBEcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1BsYXRmb3JtIGRldmljZXMKK35+fn5+fn5+fn5+fn5+fn4KK1BsYXRmb3JtIGRldmljZXMgYXJlIGRldmljZXMgdGhhdCB0eXBpY2FsbHkgYXBwZWFyIGFzIGF1dG9ub21vdXMKK2VudGl0aWVzIGluIHRoZSBzeXN0ZW0uIFRoaXMgaW5jbHVkZXMgbGVnYWN5IHBvcnQtYmFzZWQgZGV2aWNlcyBhbmQKK2hvc3QgYnJpZGdlcyB0byBwZXJpcGhlcmFsIGJ1c2VzLiAKKworCitQbGF0Zm9ybSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+CitEcml2ZXJzIGZvciBwbGF0Zm9ybSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgdmVyeSBzaW1wbGUgYW5kCit1bnN0cnVjdHVyZWQuIEVpdGhlciB0aGUgZGV2aWNlIHdhcyBwcmVzZW50IGF0IGEgcGFydGljdWxhciBJL08gcG9ydAorYW5kIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCwgb3IgaXQgd2FzIG5vdC4gVGhlcmUgd2FzIG5vIHBvc3NpYmlsaXR5CitvZiBob3RwbHVnZ2luZyBvciBhbHRlcm5hdGl2ZSBkaXNjb3ZlcnkgYmVzaWRlcyBwcm9iaW5nIGF0IGEgc3BlY2lmaWMKK0kvTyBhZGRyZXNzIGFuZCBleHBlY3RpbmcgYSBzcGVjaWZpYyByZXNwb25zZS4KKworCitPdGhlciBBcmNoaXRlY3R1cmVzLCBNb2Rlcm4gRmlybXdhcmUsIGFuZCBuZXcgUGxhdGZvcm1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVzZSBkZXZpY2VzIGFyZSBub3QgYWx3YXlzIGF0IHRoZSBsZWdhY3kgSS9PIHBvcnRzLiBUaGlzIGlzIHRydWUgb24KK290aGVyIGFyY2hpdGVjdHVyZXMgYW5kIG9uIHNvbWUgbW9kZXJuIGFyY2hpdGVjdHVyZXMuIEluIG1vc3QgY2FzZXMsCit0aGUgZHJpdmVycyBhcmUgbW9kaWZpZWQgdG8gZGlzY292ZXIgdGhlIGRldmljZXMgYXQgb3RoZXIgd2VsbC1rbm93bgorcG9ydHMgZm9yIHRoZSBnaXZlbiBwbGF0Zm9ybS4gSG93ZXZlciwgdGhlIGZpcm13YXJlIGluIHRoZXNlIHN5c3RlbXMKK2RvZXMgdXN1YWxseSBrbm93IHdoZXJlIGV4YWN0bHkgdGhlc2UgZGV2aWNlcyByZXNpZGUsIGFuZCBpbiBzb21lCitjYXNlcywgaXQncyB0aGUgb25seSB3YXkgb2YgZGlzY292ZXJpbmcgdGhlbS4gCisKKworVGhlIFBsYXRmb3JtIEJ1cworfn5+fn5+fn5+fn5+fn5+fgorQSBwbGF0Zm9ybSBidXMgaGFzIGJlZW4gY3JlYXRlZCB0byBkZWFsIHdpdGggdGhlc2UgaXNzdWVzLiBGaXJzdCBhbmQKK2ZvcmVtb3N0LCBpdCBncm91cHMgYWxsIHRoZSBsZWdhY3kgZGV2aWNlcyB1bmRlciBhIGNvbW1vbiBidXMsIGFuZAorZ2l2ZXMgdGhlbSBhIGNvbW1vbiBwYXJlbnQgaWYgdGhleSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAKKworQnV0LCBiZXNpZGVzIHRoZSBvcmdhbml6YXRpb25hbCBiZW5lZml0cywgdGhlIHBsYXRmb3JtIGJ1cyBjYW4gYWxzbworYWNjb21tb2RhdGUgZmlybXdhcmUtYmFzZWQgZW51bWVyYXRpb24uIAorCisKK0RldmljZSBEaXNjb3ZlcnkKK35+fn5+fn5+fn5+fn5+fn4KK1RoZSBwbGF0Zm9ybSBidXMgaGFzIG5vIGNvbmNlcHQgb2YgcHJvYmluZyBmb3IgZGV2aWNlcy4gRGV2aWNlcworZGlzY292ZXJ5IGlzIGxlZnQgdXAgdG8gZWl0aGVyIHRoZSBsZWdhY3kgZHJpdmVycyBvciB0aGUKK2Zpcm13YXJlLiBUaGVzZSBlbnRpdGllcyBhcmUgZXhwZWN0ZWQgdG8gbm90aWZ5IHRoZSBwbGF0Zm9ybSBvZgorZGV2aWNlcyB0aGF0IGl0IGRpc2NvdmVycyB2aWEgdGhlIGJ1cydzIGFkZCgpIGNhbGxiYWNrOgorCisJcGxhdGZvcm1fYnVzLmFkZChwYXJlbnQsYnVzX2lkKS4KKworCitCdXMgSURzCit+fn5+fn5+CitCdXMgSURzIGFyZSB0aGUgY2Fub25pY2FsIG5hbWVzIGZvciB0aGUgZGV2aWNlcy4gVGhlcmUgaXMgbm8gZ2xvYmFsbHkKK3N0YW5kYXJkIGFkZHJlc3NpbmcgbWVjaGFuaXNtIGZvciBsZWdhY3kgZGV2aWNlcy4gSW4gdGhlIElBLTMyIHdvcmxkLAord2UgaGF2ZSBQbnAgSURzIHRvIHVzZSwgYXMgd2VsbCBhcyB0aGUgbGVnYWN5IEkvTyBwb3J0cy4gSG93ZXZlciwKK25laXRoZXIgdGVsbCB3aGF0IHRoZSBkZXZpY2UgcmVhbGx5IGlzIG9yIGhhdmUgYW55IG1lYW5pbmcgb24gb3RoZXIKK3BsYXRmb3Jtcy4gCisKK1NpbmNlIGJvdGggUG5QIElEcyBhbmQgdGhlIGxlZ2FjeSBJL08gcG9ydHMgKGFuZCBvdGhlciBzdGFuZGFyZCBJL08KK3BvcnRzIGZvciBzcGVjaWZpYyBkZXZpY2VzKSBoYXZlIGEgMToxIG1hcHBpbmcsIHdlIG1hcCB0aGUKK3BsYXRmb3JtLXNwZWNpZmljIG5hbWUgb3IgaWRlbnRpZmllciB0byBhIGdlbmVyaWMgbmFtZSAoYXQgbGVhc3QKK3dpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGtlcm5lbCkuCisKK0ZvciBleGFtcGxlLCBhIHNlcmlhbCBkcml2ZXIgbWlnaHQgZmluZCBhIGRldmljZSBhdCBJL08gMHgzZjguIFRoZQorQUNQSSBmaXJtd2FyZSBtaWdodCBhbHNvIGRpc2NvdmVyIGEgZGV2aWNlIHdpdGggUG5QIElEIChfSElEKQorUE5QMDUwMS4gQm90aCBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIGRldmljZSBhbmQgc2hvdWxkIGJlIG1hcHBlZCB0byB0aGUKK2Nhbm9uaWNhbCBuYW1lICdzZXJpYWwnLiAKKworVGhlIGJ1c19pZCBmaWVsZCBzaG91bGQgYmUgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjYW5vbmljYWwgbmFtZSBhbmQKK3RoZSBpbnN0YW5jZSBvZiB0aGF0IHR5cGUgb2YgZGV2aWNlLiBGb3IgZXhhbXBsZSwgdGhlIGRldmljZSBhdCBJL08KK3BvcnQgMHgzZjggc2hvdWxkIGhhdmUgYSBidXNfaWQgb2YgInNlcmlhbDAiLiBUaGlzIHBsYWNlcyB0aGUKK3Jlc3BvbnNpYmlsaXR5IG9mIGVudW1lcmF0aW5nIGRldmljZXMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgdXAgdG8gdGhlCitkaXNjb3ZlcnkgbWVjaGFuaXNtLiBCdXQsIHRoZXkgYXJlIHRoZSBlbnRpdHkgdGhhdCBzaG91bGQga25vdyBiZXN0CisoYXMgb3Bwb3NlZCB0byB0aGUgcGxhdGZvcm0gYnVzIGRyaXZlcikuCisKKworRHJpdmVycyAKK35+fn5+fn4KK0RyaXZlcnMgZm9yIHBsYXRmb3JtIGRldmljZXMgc2hvdWxkIGhhdmUgYSBuYW1lIHRoYXQgaXMgdGhlIHNhbWUgYXMKK3RoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgZGV2aWNlcyB0aGV5IHN1cHBvcnQuIFRoaXMgYWxsb3dzIHRoZQorcGxhdGZvcm0gYnVzIGRyaXZlciB0byBkbyBzaW1wbGUgbWF0Y2hpbmcgd2l0aCB0aGUgYmFzaWMgZGF0YQorc3RydWN0dXJlcyB0byBkZXRlcm1pbmUgaWYgYSBkcml2ZXIgc3VwcG9ydHMgYSBjZXJ0YWluIGRldmljZS4gCisKK0ZvciBleGFtcGxlLCBhIGxlZ2FjeSBzZXJpYWwgZHJpdmVyIHNob3VsZCBoYXZlIGEgbmFtZSBvZiAnc2VyaWFsJyBhbmQKK3JlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBwbGF0Zm9ybSBidXMuIAorCisKK0RyaXZlciBCaW5kaW5nCit+fn5+fn5+fn5+fn5+fgorTGVnYWN5IGRyaXZlcnMgYXNzdW1lIHRoZXkgYXJlIGJvdW5kIHRvIHRoZSBkZXZpY2Ugb25jZSB0aGV5IHN0YXJ0IHVwCithbmQgcHJvYmUgYW4gSS9PIHBvcnQuIERpdm9yY2luZyB0aGVtIGZyb20gdGhpcyB3aWxsIGJlIGEgZGlmZmljdWx0Citwcm9jZXNzLiBIb3dldmVyLCB0aGF0IHNob3VsZG4ndCBwcmV2ZW50IHVzIGZyb20gaW1wbGVtZW50aW5nCitmaXJtd2FyZS1iYXNlZCBlbnVtZXJhdGlvbi4gCisKK1RoZSBmaXJtd2FyZSBzaG91bGQgbm90aWZ5IHRoZSBwbGF0Zm9ybSBidXMgYWJvdXQgZGV2aWNlcyBiZWZvcmUgdGhlCitsZWdhY3kgZHJpdmVycyBoYXZlIGhhZCBhIGNoYW5jZSB0byBsb2FkLiBPbmNlIHRoZSBkcml2ZXJzIGFyZSBsb2FkZWQsCit0aGV5IGRyaXZlciBtb2RlbCBjb3JlIHdpbGwgYXR0ZW1wdCB0byBiaW5kIHRoZSBkcml2ZXIgdG8gYW55CitwcmV2aW91c2x5LWRpc2NvdmVyZWQgZGV2aWNlcy4gT25jZSB0aGF0IGhhcyBoYXBwZW5lZCwgaXQgd2lsbCBiZSBmcmVlCit0byBkaXNjb3ZlciBhbnkgb3RoZXIgZGV2aWNlcyBpdCBwbGVhc2VzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wb3J0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL3BvcnRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmZlZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wb3J0aW5nLnR4dApAQCAtMCwwICsxLDQ0NSBAQAorCitQb3J0aW5nIERyaXZlcnMgdG8gdGhlIE5ldyBEcml2ZXIgTW9kZWwKKworUGF0cmljayBNb2NoZWwKKworNyBKYW51YXJ5IDIwMDMKKworCitPdmVydmlldworCitQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvKi50eHQgZm9yIGRlZmluaXRpb25zIG9mCit2YXJpb3VzIGRyaXZlciB0eXBlcyBhbmQgY29uY2VwdHMuIAorCitNb3N0IG9mIHRoZSB3b3JrIG9mIHBvcnRpbmcgZGV2aWNlcyBkcml2ZXJzIHRvIHRoZSBuZXcgbW9kZWwgaGFwcGVucworYXQgdGhlIGJ1cyBkcml2ZXIgbGF5ZXIuIFRoaXMgd2FzIGludGVudGlvbmFsLCB0byBtaW5pbWl6ZSB0aGUKK25lZ2F0aXZlIGVmZmVjdCBvbiBrZXJuZWwgZHJpdmVycywgYW5kIHRvIGFsbG93IGEgZ3JhZHVhbCB0cmFuc2l0aW9uCitvZiBidXMgZHJpdmVycy4KKworSW4gYSBudXRzaGVsbCwgdGhlIGRyaXZlciBtb2RlbCBjb25zaXN0cyBvZiBhIHNldCBvZiBvYmplY3RzIHRoYXQgY2FuCitiZSBlbWJlZGRlZCBpbiBsYXJnZXIsIGJ1cy1zcGVjaWZpYyBvYmplY3RzLiBGaWVsZHMgaW4gdGhlc2UgZ2VuZXJpYworb2JqZWN0cyBjYW4gcmVwbGFjZSBmaWVsZHMgaW4gdGhlIGJ1cy1zcGVjaWZpYyBvYmplY3RzLiAKKworVGhlIGdlbmVyaWMgb2JqZWN0cyBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZHJpdmVyIG1vZGVsIGNvcmUuIEJ5Citkb2luZyBzbywgdGhleSB3aWxsIGV4cG9ydGVkIHZpYSB0aGUgc3lzZnMgZmlsZXN5c3RlbS4gc3lzZnMgY2FuIGJlCittb3VudGVkIGJ5IGRvaW5nIAorCisJIyBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisKKworCitUaGUgUHJvY2VzcworCitTdGVwIDA6IFJlYWQgaW5jbHVkZS9saW51eC9kZXZpY2UuaCBmb3Igb2JqZWN0IGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gCisKK1N0ZXAgMTogUmVnaXN0ZXJpbmcgdGhlIGJ1cyBkcml2ZXIuIAorCisKKy0gRGVmaW5lIGEgc3RydWN0IGJ1c190eXBlIGZvciB0aGUgYnVzIGRyaXZlci4KKworc3RydWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZSA9IHsKKyAgICAgICAgLm5hbWUgICAgICAgICAgID0gInBjaSIsCit9OworCisKKy0gUmVnaXN0ZXIgdGhlIGJ1cyB0eXBlLgorICBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGJ1cyB0eXBlLAorICB3aGljaCBpcyB1c3VhbGx5IHRoZSBtb2R1bGVfaW5pdCgpLCBvciBlcXVpdmFsZW50LCBmdW5jdGlvbi4gCisKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9kcml2ZXJfaW5pdCh2b2lkKQoreworICAgICAgICByZXR1cm4gYnVzX3JlZ2lzdGVyKCZwY2lfYnVzX3R5cGUpOworfQorCitzdWJzeXNfaW5pdGNhbGwocGNpX2RyaXZlcl9pbml0KTsKKworCisgIFRoZSBidXMgdHlwZSBtYXkgYmUgdW5yZWdpc3RlcmVkIChpZiB0aGUgYnVzIGRyaXZlciBtYXkgYmUgY29tcGlsZWQKKyAgYXMgYSBtb2R1bGUpIGJ5IGRvaW5nOgorCisgICAgIGJ1c191bnJlZ2lzdGVyKCZwY2lfYnVzX3R5cGUpOworCisKKy0gRXhwb3J0IHRoZSBidXMgdHlwZSBmb3Igb3RoZXJzIHRvIHVzZS4gCisKKyAgT3RoZXIgY29kZSBtYXkgd2lzaCB0byByZWZlcmVuY2UgdGhlIGJ1cyB0eXBlLCBzbyBkZWNsYXJlIGl0IGluIGEgCisgIHNoYXJlZCBoZWFkZXIgZmlsZSBhbmQgZXhwb3J0IHRoZSBzeW1ib2wuCisKK0Zyb20gaW5jbHVkZS9saW51eC9wY2kuaDoKKworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGU7CisKKworRnJvbSBmaWxlIHRoZSBhYm92ZSBjb2RlIGFwcGVhcnMgaW46CisKK0VYUE9SVF9TWU1CT0wocGNpX2J1c190eXBlKTsKKworCisKKy0gVGhpcyB3aWxsIGNhdXNlIHRoZSBidXMgdG8gc2hvdyB1cCBpbiAvc3lzL2J1cy9wY2kvIHdpdGggdHdvCisgIHN1YmRpcmVjdG9yaWVzOiAnZGV2aWNlcycgYW5kICdkcml2ZXJzJy4KKworIyB0cmVlIC1kIC9zeXMvYnVzL3BjaS8KKy9zeXMvYnVzL3BjaS8KK3wtLSBkZXZpY2VzCitgLS0gZHJpdmVycworCisKKworU3RlcCAyOiBSZWdpc3RlcmluZyBEZXZpY2VzLiAKKworc3RydWN0IGRldmljZSByZXByZXNlbnRzIGEgc2luZ2xlIGRldmljZS4gSXQgbWFpbmx5IGNvbnRhaW5zIG1ldGFkYXRhCitkZXNjcmliaW5nIHRoZSByZWxhdGlvbnNoaXAgdGhlIGRldmljZSBoYXMgdG8gb3RoZXIgZW50aXRpZXMuIAorCisKKy0gRW1iZWRkIGEgc3RydWN0IGRldmljZSBpbiB0aGUgYnVzLXNwZWNpZmljIGRldmljZSB0eXBlLiAKKworCitzdHJ1Y3QgcGNpX2RldiB7CisgICAgICAgLi4uCisgICAgICAgc3RydWN0ICBkZXZpY2UgIGRldjsgICAgICAgICAgICAvKiBHZW5lcmljIGRldmljZSBpbnRlcmZhY2UgKi8KKyAgICAgICAuLi4KK307CisKKyAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZ2VuZXJpYyBkZXZpY2Ugbm90IGJlIHRoZSBmaXJzdCBpdGVtIGluIAorICB0aGUgc3RydWN0IHRvIGRpc2NvdXJhZ2UgcHJvZ3JhbW1lcnMgZnJvbSBkb2luZyBtaW5kbGVzcyBjYXN0cworICBiZXR3ZWVuIHRoZSBvYmplY3QgdHlwZXMuIEluc3RlYWQgbWFjcm9zLCBvciBpbmxpbmUgZnVuY3Rpb25zLAorICBzaG91bGQgYmUgY3JlYXRlZCB0byBjb252ZXJ0IGZyb20gdGhlIGdlbmVyaWMgb2JqZWN0IHR5cGUuCisKKworI2RlZmluZSB0b19wY2lfZGV2KG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNpX2RldiwgZGV2KQorCitvciAKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqIHRvX3BjaV9kZXYoc3RydWN0IGtvYmplY3QgKiBrb2JqKQoreworCXJldHVybiBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjaV9kZXYsIGRldik7Cit9CisKKyAgVGhpcyBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIHZlcmlmeSB0eXBlLXNhZmV0eSBvZiB0aGUgb3BlcmF0aW9ucyAKKyAgdGhhdCBhcmUgcGVyZm9ybWVkICh3aGljaCBpcyBHb29kKS4KKworCistIEluaXRpYWxpemUgdGhlIGRldmljZSBvbiByZWdpc3RyYXRpb24uCisKKyAgV2hlbiBkZXZpY2VzIGFyZSBkaXNjb3ZlcmVkIG9yIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnVzIHR5cGUsIHRoZSAKKyAgYnVzIGRyaXZlciBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgZ2VuZXJpYyBkZXZpY2UuIFRoZSBtb3N0IGltcG9ydGFudAorICB0aGluZ3MgdG8gaW5pdGlhbGl6ZSBhcmUgdGhlIGJ1c19pZCwgcGFyZW50LCBhbmQgYnVzIGZpZWxkcy4KKworICBUaGUgYnVzX2lkIGlzIGFuIEFTQ0lJIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBkZXZpY2UncyBhZGRyZXNzIG9uCisgIHRoZSBidXMuIFRoZSBmb3JtYXQgb2YgdGhpcyBzdHJpbmcgaXMgYnVzLXNwZWNpZmljLiBUaGlzIGlzCisgIG5lY2Vzc2FyeSBmb3IgcmVwcmVzZW50aW5nIGRldmljZXMgaW4gc3lzZnMuIAorCisgIHBhcmVudCBpcyB0aGUgcGh5c2ljYWwgcGFyZW50IG9mIHRoZSBkZXZpY2UuIEl0IGlzIGltcG9ydGFudCB0aGF0CisgIHRoZSBidXMgZHJpdmVyIHNldHMgdGhpcyBmaWVsZCBjb3JyZWN0bHkuIAorCisgIFRoZSBkcml2ZXIgbW9kZWwgbWFpbnRhaW5zIGFuIG9yZGVyZWQgbGlzdCBvZiBkZXZpY2VzIHRoYXQgaXQgdXNlcworICBmb3IgcG93ZXIgbWFuYWdlbWVudC4gVGhpcyBsaXN0IG11c3QgYmUgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQKKyAgZGV2aWNlcyBhcmUgc2h1dGRvd24gYmVmb3JlIHRoZWlyIHBoeXNpY2FsIHBhcmVudHMsIGFuZCB2aWNlIHZlcnNhLgorICBUaGUgb3JkZXIgb2YgdGhpcyBsaXN0IGlzIGRldGVybWluZWQgYnkgdGhlIHBhcmVudCBvZiByZWdpc3RlcmVkCisgIGRldmljZXMuCisKKyAgQWxzbywgdGhlIGxvY2F0aW9uIG9mIHRoZSBkZXZpY2UncyBzeXNmcyBkaXJlY3RvcnkgZGVwZW5kcyBvbiBhCisgIGRldmljZSdzIHBhcmVudC4gc3lzZnMgZXhwb3J0cyBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBtaXJyb3JzIAorICB0aGUgZGV2aWNlIGhpZXJhcmNoeS4gQWNjdXJhdGVseSBzZXR0aW5nIHRoZSBwYXJlbnQgZ3VhcmFudGVlcyB0aGF0CisgIHN5c2ZzIHdpbGwgYWNjdXJhdGVseSByZXByZXNlbnQgdGhlIGhpZXJhcmNoeS4KKworICBUaGUgZGV2aWNlJ3MgYnVzIGZpZWxkIGlzIGEgcG9pbnRlciB0byB0aGUgYnVzIHR5cGUgdGhlIGRldmljZQorICBiZWxvbmdzIHRvLiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdGhlIGJ1c190eXBlIHRoYXQgd2FzIGRlY2xhcmVkCisgIGFuZCBpbml0aWFsaXplZCBiZWZvcmUuIAorCisgIE9wdGlvbmFsbHksIHRoZSBidXMgZHJpdmVyIG1heSBzZXQgdGhlIGRldmljZSdzIG5hbWUgYW5kIHJlbGVhc2UKKyAgZmllbGRzLgorCisgIFRoZSBuYW1lIGZpZWxkIGlzIGFuIEFTQ0lJIHN0cmluZyBkZXNjcmliaW5nIHRoZSBkZXZpY2UsIGxpa2UKKworICAgICAiQVRJIFRlY2hub2xvZ2llcyBJbmMgUmFkZW9uIFFEIgorCisgIFRoZSByZWxlYXNlIGZpZWxkIGlzIGEgY2FsbGJhY2sgdGhhdCB0aGUgZHJpdmVyIG1vZGVsIGNvcmUgY2FsbHMgCisgIHdoZW4gdGhlIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gaXQgaGF2ZSAKKyAgYmVlbiByZWxlYXNlZC4gTW9yZSBvbiB0aGlzIGluIGEgbW9tZW50LgorCisKKy0gUmVnaXN0ZXIgdGhlIGRldmljZS4gCisKKyAgT25jZSB0aGUgZ2VuZXJpYyBkZXZpY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGl0IGNhbiBiZSByZWdpc3RlcmVkCisgIHdpdGggdGhlIGRyaXZlciBtb2RlbCBjb3JlIGJ5IGRvaW5nOgorCisgICAgICAgZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldik7CisKKyAgSXQgY2FuIGxhdGVyIGJlIHVucmVnaXN0ZXJlZCBieSBkb2luZzogCisKKyAgICAgICBkZXZpY2VfdW5yZWdpc3RlcigmZGV2LT5kZXYpOworCisgIFRoaXMgc2hvdWxkIGhhcHBlbiBvbiBidXNlcyB0aGF0IHN1cHBvcnQgaG90cGx1Z2dhYmxlIGRldmljZXMuIAorICBJZiBhIGJ1cyBkcml2ZXIgdW5yZWdpc3RlcnMgYSBkZXZpY2UsIGl0IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgZnJlZQorICBpdC4gSXQgc2hvdWxkIGluc3RlYWQgd2FpdCBmb3IgdGhlIGRyaXZlciBtb2RlbCBjb3JlIHRvIGNhbGwgdGhlIAorICBkZXZpY2UncyByZWxlYXNlIG1ldGhvZCwgdGhlbiBmcmVlIHRoZSBidXMtc3BlY2lmaWMgb2JqZWN0LiAKKyAgKFRoZXJlIG1heSBiZSBvdGhlciBjb2RlIHRoYXQgaXMgY3VycmVudGx5IHJlZmVyZW5jaW5nIHRoZSBkZXZpY2UKKyAgc3RydWN0dXJlLCBhbmQgaXQgd291bGQgYmUgcnVkZSB0byBmcmVlIHRoZSBkZXZpY2Ugd2hpbGUgdGhhdCBpcyAKKyAgaGFwcGVuaW5nKS4KKworCisgIFdoZW4gdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBhIGRpcmVjdG9yeSBpbiBzeXNmcyBpcyBjcmVhdGVkLiAKKyAgVGhlIFBDSSB0cmVlIGluIHN5c2ZzIGxvb2tzIGxpa2U6IAorCisvc3lzL2RldmljZXMvcGNpMC8KK3wtLSAwMDowMC4wCit8LS0gMDA6MDEuMAorfCAgIGAtLSAwMTowMC4wCit8LS0gMDA6MDIuMAorfCAgIGAtLSAwMjoxZi4wCit8ICAgICAgIGAtLSAwMzowMC4wCit8LS0gMDA6MWUuMAorfCAgIGAtLSAwNDowNC4wCit8LS0gMDA6MWYuMAorfC0tIDAwOjFmLjEKK3wgICB8LS0gaWRlMAorfCAgIHwgICB8LS0gMC4wCit8ICAgfCAgIGAtLSAwLjEKK3wgICBgLS0gaWRlMQorfCAgICAgICBgLS0gMS4wCit8LS0gMDA6MWYuMgorfC0tIDAwOjFmLjMKK2AtLSAwMDoxZi41CisKKyAgQWxzbywgc3ltbGlua3MgYXJlIGNyZWF0ZWQgaW4gdGhlIGJ1cydzICdkZXZpY2VzJyBkaXJlY3RvcnkKKyAgdGhhdCBwb2ludCB0byB0aGUgZGV2aWNlJ3MgZGlyZWN0b3J5IGluIHRoZSBwaHlzaWNhbCBoaWVyYXJjaHkuIAorCisvc3lzL2J1cy9wY2kvZGV2aWNlcy8KK3wtLSAwMDowMC4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowMC4wCit8LS0gMDA6MDEuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MDEuMAorfC0tIDAwOjAyLjAgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjAyLjAKK3wtLSAwMDoxZS4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDoxZS4wCit8LS0gMDA6MWYuMCAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MWYuMAorfC0tIDAwOjFmLjEgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjFmLjEKK3wtLSAwMDoxZi4yIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDoxZi4yCit8LS0gMDA6MWYuMyAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MWYuMworfC0tIDAwOjFmLjUgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjFmLjUKK3wtLSAwMTowMC4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowMS4wLzAxOjAwLjAKK3wtLSAwMjoxZi4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowMi4wLzAyOjFmLjAKK3wtLSAwMzowMC4wIC0+IC4uLy4uLy4uL2RldmljZXMvcGNpMC8wMDowMi4wLzAyOjFmLjAvMDM6MDAuMAorYC0tIDA0OjA0LjAgLT4gLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjFlLjAvMDQ6MDQuMAorCisKKworU3RlcCAzOiBSZWdpc3RlcmluZyBEcml2ZXJzLgorCitzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpcyBhIHNpbXBsZSBkcml2ZXIgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgYSBzZXQKK29mIG9wZXJhdGlvbnMgdGhhdCB0aGUgZHJpdmVyIG1vZGVsIGNvcmUgbWF5IGNhbGwuIAorCisKKy0gRW1iZWQgYSBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpbiB0aGUgYnVzLXNwZWNpZmljIGRyaXZlci4gCisKKyAgSnVzdCBsaWtlIHdpdGggZGV2aWNlcywgZG8gc29tZXRoaW5nIGxpa2U6CisKK3N0cnVjdCBwY2lfZHJpdmVyIHsKKyAgICAgICAuLi4KKyAgICAgICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAgICBkcml2ZXI7Cit9OworCisKKy0gSW5pdGlhbGl6ZSB0aGUgZ2VuZXJpYyBkcml2ZXIgc3RydWN0dXJlLiAKKworICBXaGVuIHRoZSBkcml2ZXIgcmVnaXN0ZXJzIHdpdGggdGhlIGJ1cyAoZS5nLiBkb2luZyBwY2lfcmVnaXN0ZXJfZHJpdmVyKCkpLAorICBpbml0aWFsaXplIHRoZSBuZWNlc3NhcnkgZmllbGRzIG9mIHRoZSBkcml2ZXI6IHRoZSBuYW1lIGFuZCBidXMKKyAgZmllbGRzLiAKKworCistIFJlZ2lzdGVyIHRoZSBkcml2ZXIuCisKKyAgQWZ0ZXIgdGhlIGdlbmVyaWMgZHJpdmVyIGhhcyBiZWVuIGluaXRpYWxpemVkLCBjYWxsCisKKwlkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKworICB0byByZWdpc3RlciB0aGUgZHJpdmVyIHdpdGggdGhlIGNvcmUuCisKKyAgV2hlbiB0aGUgZHJpdmVyIGlzIHVucmVnaXN0ZXJlZCBmcm9tIHRoZSBidXMsIHVucmVnaXN0ZXIgaXQgZnJvbSB0aGUKKyAgY29yZSBieSBkb2luZzoKKworICAgICAgICBkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworCisgIE5vdGUgdGhhdCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGRyaXZlciBoYXZlCisgIGdvbmUgYXdheS4gTm9ybWFsbHksIHRoZXJlIHdpbGwgbm90IGJlIGFueS4KKworCistIFN5c2ZzIHJlcHJlc2VudGF0aW9uLgorCisgIERyaXZlcnMgYXJlIGV4cG9ydGVkIHZpYSBzeXNmcyBpbiB0aGVpciBidXMncyAnZHJpdmVyJ3MgZGlyZWN0b3J5LiAKKyAgRm9yIGV4YW1wbGU6CisKKy9zeXMvYnVzL3BjaS9kcml2ZXJzLworfC0tIDNjNTl4Cit8LS0gRW5zb25pcSBBdWRpb1BDSQorfC0tIGFncGdhcnQtYW1kazcKK3wtLSBlMTAwCitgLS0gc2VyaWFsCisKKworU3RlcCA0OiBEZWZpbmUgR2VuZXJpYyBNZXRob2RzIGZvciBEcml2ZXJzLgorCitzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkZWZpbmVzIGEgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCB0aGUgZHJpdmVyIG1vZGVsCitjb3JlIGNhbGxzLiBNb3N0IG9mIHRoZXNlIG9wZXJhdGlvbnMgYXJlIHByb2JhYmx5IHNpbWlsYXIgdG8KK29wZXJhdGlvbnMgdGhlIGJ1cyBhbHJlYWR5IGRlZmluZXMgZm9yIGRyaXZlcnMsIGJ1dCB0YWtpbmcgZGlmZmVyZW50CitwYXJhbWV0ZXJzLiAKKworSXQgd291bGQgYmUgZGlmZmljdWx0IGFuZCB0ZWRpb3VzIHRvIGZvcmNlIGV2ZXJ5IGRyaXZlciBvbiBhIGJ1cyB0bworc2ltdWx0YW5lb3VzbHkgY29udmVydCB0aGVpciBkcml2ZXJzIHRvIGdlbmVyaWMgZm9ybWF0LiBJbnN0ZWFkLCB0aGUKK2J1cyBkcml2ZXIgc2hvdWxkIGRlZmluZSBzaW5nbGUgaW5zdGFuY2VzIG9mIHRoZSBnZW5lcmljIG1ldGhvZHMgdGhhdAorZm9yd2FyZCBjYWxsIHRvIHRoZSBidXMtc3BlY2lmaWMgZHJpdmVycy4gRm9yIGluc3RhbmNlOiAKKworCitzdGF0aWMgaW50IHBjaV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiBkZXYpCit7CisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKKyAgICAgICAgc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CisKKyAgICAgICAgaWYgKGRydikgeworICAgICAgICAgICAgICAgIGlmIChkcnYtPnJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRydi0+cmVtb3ZlKHBjaV9kZXYpOworICAgICAgICAgICAgICAgIHBjaV9kZXYtPmRyaXZlciA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworVGhlIGdlbmVyaWMgZHJpdmVyIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZXNlIG1ldGhvZHMgYmVmb3JlIGl0CitpcyByZWdpc3RlcmVkLiAKKworICAgICAgICAvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovCisgICAgICAgIGRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7CisgICAgICAgIGRydi0+ZHJpdmVyLmJ1cyA9ICZwY2lfYnVzX3R5cGU7CisgICAgICAgIGRydi0+ZHJpdmVyLnByb2JlID0gcGNpX2RldmljZV9wcm9iZTsKKyAgICAgICAgZHJ2LT5kcml2ZXIucmVzdW1lID0gcGNpX2RldmljZV9yZXN1bWU7CisgICAgICAgIGRydi0+ZHJpdmVyLnN1c3BlbmQgPSBwY2lfZGV2aWNlX3N1c3BlbmQ7CisgICAgICAgIGRydi0+ZHJpdmVyLnJlbW92ZSA9IHBjaV9kZXZpY2VfcmVtb3ZlOworCisgICAgICAgIC8qIHJlZ2lzdGVyIHdpdGggY29yZSAqLworICAgICAgICBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKworCitJZGVhbGx5LCB0aGUgYnVzIHNob3VsZCBvbmx5IGluaXRpYWxpemUgdGhlIGZpZWxkcyBpZiB0aGV5IGFyZSBub3QKK2FscmVhZHkgc2V0LiBUaGlzIGFsbG93cyB0aGUgZHJpdmVycyB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGdlbmVyaWMKK21ldGhvZHMuIAorCisKK1N0ZXAgNTogU3VwcG9ydCBnZW5lcmljIGRyaXZlciBiaW5kaW5nLiAKKworVGhlIG1vZGVsIGFzc3VtZXMgdGhhdCBhIGRldmljZSBvciBkcml2ZXIgY2FuIGJlIGR5bmFtaWNhbGx5CityZWdpc3RlcmVkIHdpdGggdGhlIGJ1cyBhdCBhbnkgdGltZS4gV2hlbiByZWdpc3RyYXRpb24gaGFwcGVucywKK2RldmljZXMgbXVzdCBiZSBib3VuZCB0byBhIGRyaXZlciwgb3IgZHJpdmVycyBtdXN0IGJlIGJvdW5kIHRvIGFsbAorZGV2aWNlcyB0aGF0IGl0IHN1cHBvcnRzLiAKKworQSBkcml2ZXIgdHlwaWNhbGx5IGNvbnRhaW5zIGEgbGlzdCBvZiBkZXZpY2UgSURzIHRoYXQgaXQgc3VwcG9ydHMuIFRoZQorYnVzIGRyaXZlciBjb21wYXJlcyB0aGVzZSBJRHMgdG8gdGhlIElEcyBvZiBkZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCBpdC4gCitUaGUgZm9ybWF0IG9mIHRoZSBkZXZpY2UgSURzLCBhbmQgdGhlIHNlbWFudGljcyBmb3IgY29tcGFyaW5nIHRoZW0gYXJlCitidXMtc3BlY2lmaWMsIHNvIHRoZSBnZW5lcmljIG1vZGVsIGRvZXMgYXR0ZW1wdCB0byBnZW5lcmFsaXplIHRoZW0uIAorCitJbnN0ZWFkLCBhIGJ1cyBtYXkgc3VwcGx5IGEgbWV0aG9kIGluIHN0cnVjdCBidXNfdHlwZSB0aGF0IGRvZXMgdGhlCitjb21wYXJpc29uOiAKKworICBpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworCittYXRjaCBzaG91bGQgcmV0dXJuICcxJyBpZiB0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBkZXZpY2UsIGFuZCAnMCcKK290aGVyd2lzZS4gCisKK1doZW4gYSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgdGhlIGJ1cydzIGxpc3Qgb2YgZHJpdmVycyBpcyBpdGVyYXRlZAorb3Zlci4gYnVzLT5tYXRjaCgpIGlzIGNhbGxlZCBmb3IgZWFjaCBvbmUgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4gCisKK1doZW4gYSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCwgdGhlIGJ1cydzIGxpc3Qgb2YgZGV2aWNlcyBpcyBpdGVyYXRlZAorb3Zlci4gYnVzLT5tYXRjaCgpIGlzIGNhbGxlZCBmb3IgZWFjaCBkZXZpY2UgdGhhdCBpcyBub3QgYWxyZWFkeQorY2xhaW1lZCBieSBhIGRyaXZlci4gCisKK1doZW4gYSBkZXZpY2UgaXMgc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIGEgZGV2aWNlLCBkZXZpY2UtPmRyaXZlciBpcworc2V0LCB0aGUgZGV2aWNlIGlzIGFkZGVkIHRvIGEgcGVyLWRyaXZlciBsaXN0IG9mIGRldmljZXMsIGFuZCBhCitzeW1saW5rIGlzIGNyZWF0ZWQgaW4gdGhlIGRyaXZlcidzIHN5c2ZzIGRpcmVjdG9yeSB0aGF0IHBvaW50cyB0byB0aGUKK2RldmljZSdzIHBoeXNpY2FsIGRpcmVjdG9yeToKKworL3N5cy9idXMvcGNpL2RyaXZlcnMvCit8LS0gM2M1OXgKK3wgICBgLS0gMDA6MGIuMCAtPiAuLi8uLi8uLi8uLi9kZXZpY2VzL3BjaTAvMDA6MGIuMAorfC0tIEVuc29uaXEgQXVkaW9QQ0kKK3wtLSBhZ3BnYXJ0LWFtZGs3Cit8ICAgYC0tIDAwOjAwLjAgLT4gLi4vLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjAwLjAKK3wtLSBlMTAwCit8ICAgYC0tIDAwOjBjLjAgLT4gLi4vLi4vLi4vLi4vZGV2aWNlcy9wY2kwLzAwOjBjLjAKK2AtLSBzZXJpYWwKKworCitUaGlzIGRyaXZlciBiaW5kaW5nIHNob3VsZCByZXBsYWNlIHRoZSBleGlzdGluZyBkcml2ZXIgYmluZGluZworbWVjaGFuaXNtIHRoZSBidXMgY3VycmVudGx5IHVzZXMuIAorCisKK1N0ZXAgNjogU3VwcGx5IGEgaG90cGx1ZyBjYWxsYmFjay4KKworV2hlbmV2ZXIgYSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkcml2ZXIgbW9kZWwgY29yZSwgdGhlCit1c2Vyc3BhY2UgcHJvZ3JhbSAvc2Jpbi9ob3RwbHVnIGlzIGNhbGxlZCB0byBub3RpZnkgdXNlcnNwYWNlLiAKK1VzZXJzIGNhbiBkZWZpbmUgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gYSBkZXZpY2UgaXMgaW5zZXJ0ZWQgb3IKK3JlbW92ZWQuIAorCitUaGUgZHJpdmVyIG1vZGVsIGNvcmUgcGFzc2VzIHNldmVyYWwgYXJndW1lbnRzIHRvIHVzZXJzcGFjZSB2aWEKK2Vudmlyb25tZW50IHZhcmlhYmxlcywgaW5jbHVkaW5nCisKKy0gQUNUSU9OOiBzZXQgdG8gJ2FkZCcgb3IgJ3JlbW92ZScKKy0gREVWUEFUSDogc2V0IHRvIHRoZSBkZXZpY2UncyBwaHlzaWNhbCBwYXRoIGluIHN5c2ZzLiAKKworQSBidXMgZHJpdmVyIG1heSBhbHNvIHN1cHBseSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHVzZXJzcGFjZSB0bworY29uc3VtZS4gVG8gZG8gdGhpcywgYSBidXMgbXVzdCBpbXBsZW1lbnQgdGhlICdob3RwbHVnJyBtZXRob2QgaW4KK3N0cnVjdCBidXNfdHlwZToKKworICAgICBpbnQgKCpob3RwbHVnKSAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgCisgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKTsKKworVGhpcyBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIC9zYmluL2hvdHBsdWcgaXMgZXhlY3V0ZWQuIAorCisKK1N0ZXAgNzogQ2xlYW5pbmcgdXAgdGhlIGJ1cyBkcml2ZXIuCisKK1RoZSBnZW5lcmljIGJ1cywgZGV2aWNlLCBhbmQgZHJpdmVyIHN0cnVjdHVyZXMgcHJvdmlkZSBzZXZlcmFsIGZpZWxkcwordGhhdCBjYW4gcmVwbGFjZSB0aG9zZSBkZWZpbmVkIHByaXZhdGVseSB0byB0aGUgYnVzIGRyaXZlci4gCisKKy0gRGV2aWNlIGxpc3QuCisKK3N0cnVjdCBidXNfdHlwZSBjb250YWlucyBhIGxpc3Qgb2YgYWxsIGRldmljZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBidXMKK3R5cGUuIFRoaXMgaW5jbHVkZXMgYWxsIGRldmljZXMgb24gYWxsIGluc3RhbmNlcyBvZiB0aGF0IGJ1cyB0eXBlLgorQW4gaW50ZXJuYWwgbGlzdCB0aGF0IHRoZSBidXMgdXNlcyBtYXkgYmUgcmVtb3ZlZCwgaW4gZmF2b3Igb2YgdXNpbmcKK3RoaXMgb25lLgorCitUaGUgY29yZSBwcm92aWRlcyBhbiBpdGVyYXRvciB0byBhY2Nlc3MgdGhlc2UgZGV2aWNlcy4gCisKK2ludCBidXNfZm9yX2VhY2hfZGV2KHN0cnVjdCBidXNfdHlwZSAqIGJ1cywgc3RydWN0IGRldmljZSAqIHN0YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBkYXRhLCBpbnQgKCpmbikoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKKworCistIERyaXZlciBsaXN0LgorCitzdHJ1Y3QgYnVzX3R5cGUgYWxzbyBjb250YWlucyBhIGxpc3Qgb2YgYWxsIGRyaXZlcnMgcmVnaXN0ZXJlZCB3aXRoCitpdC4gQW4gaW50ZXJuYWwgbGlzdCBvZiBkcml2ZXJzIHRoYXQgdGhlIGJ1cyBkcml2ZXIgbWFpbnRhaW5zIG1heSAKK2JlIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgdGhlIGdlbmVyaWMgb25lLiAKKworVGhlIGRyaXZlcnMgbWF5IGJlIGl0ZXJhdGVkIG92ZXIsIGxpa2UgZGV2aWNlczogCisKK2ludCBidXNfZm9yX2VhY2hfZHJ2KHN0cnVjdCBidXNfdHlwZSAqIGJ1cywgc3RydWN0IGRldmljZV9kcml2ZXIgKiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBkYXRhLCBpbnQgKCpmbikoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgdm9pZCAqKSk7CisKKworUGxlYXNlIHNlZSBkcml2ZXJzL2Jhc2UvYnVzLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworLSByd3NlbSAKKworc3RydWN0IGJ1c190eXBlIGNvbnRhaW5zIGFuIHJ3c2VtIHRoYXQgcHJvdGVjdHMgYWxsIGNvcmUgYWNjZXNzZXMgdG8KK3RoZSBkZXZpY2UgYW5kIGRyaXZlciBsaXN0cy4gVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgYnVzIGRyaXZlcgoraW50ZXJuYWxseSwgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIHRoZSBkZXZpY2Ugb3IgZHJpdmVyCitsaXN0cyB0aGUgYnVzIG1haW50YWlucy4gCisKKworLSBEZXZpY2UgYW5kIGRyaXZlciBmaWVsZHMuIAorCitTb21lIG9mIHRoZSBmaWVsZHMgaW4gc3RydWN0IGRldmljZSBhbmQgc3RydWN0IGRldmljZV9kcml2ZXIgZHVwbGljYXRlCitmaWVsZHMgaW4gdGhlIGJ1cy1zcGVjaWZpYyByZXByZXNlbnRhdGlvbnMgb2YgdGhlc2Ugb2JqZWN0cy4gRmVlbCBmcmVlCit0byByZW1vdmUgdGhlIGJ1cy1zcGVjaWZpYyBvbmVzIGFuZCBmYXZvciB0aGUgZ2VuZXJpYyBvbmVzLiBOb3RlCit0aG91Z2gsIHRoYXQgdGhpcyB3aWxsIGxpa2VseSBtZWFuIGZpeGluZyB1cCBhbGwgdGhlIGRyaXZlcnMgdGhhdAorcmVmZXJlbmNlIHRoZSBidXMtc3BlY2lmaWMgZmllbGRzICh0aG91Z2ggdGhvc2Ugc2hvdWxkIGFsbCBiZSAxLWxpbmUKK2NoYW5nZXMpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZGlidXNiIGIvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmRpYnVzYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTllOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmRpYnVzYgpAQCAtMCwwICsxLDI4NSBAQAorRG9jdW1lbnRhdGlvbiBmb3IgZGliMzAwMCogZnJvbnRlbmQgZHJpdmVycyBhbmQgZGlidXNiIGRldmljZSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKSwKKworZGlidXNiIGFuZCBkaWIzMDAwbWIvbWMgZHJpdmVycyBiYXNlZCBvbiBHUEwgY29kZSwgd2hpY2ggaGFzCisKK0NvcHlyaWdodCAoQykgMjAwNCBBbWF1cnkgRGVtb2wgZm9yIERpQmNvbSAoYWRlbW9sQGRpYmNvbS5mcikKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisKKworU3VwcG9ydGVkIGRldmljZXMgVVNCMS4xCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworUHJvZHVjZWQgYW5kIHJlc2VsbGVkIGJ5IFR3aW5oYW46CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gVHdpbmhhbkRUViBVU0ItVGVyIERWQi1UIERldmljZSAoVlA3MDQxKQorCWh0dHA6Ly93d3cudHdpbmhhbi5jb20vcHJvZHVjdF90ZXJyZXN0cmlhbF8zLmFzcAorCistIFR3aW5oYW5EVFYgTWFnaWMgQm94IChWUDcwNDFlKQorCWh0dHA6Ly93d3cudHdpbmhhbi5jb20vcHJvZHVjdF90ZXJyZXN0cmlhbF80LmFzcAorCistIEhBTUEgRFZCLVQgVVNCIGRldmljZQorCWh0dHA6Ly93d3cuaGFtYS5kZS9wb3J0YWwvYXJ0aWNsZUlkKjExMDYyMC9hY3Rpb24qMjU5OAorCistIENUUyBQb3J0YWJsZSAoQ2hpbmVzZSBUZWxldmlzaW9uIFN5c3RlbSkgKDIpCisJaHR0cDovL3d3dy4yY3RzLnR2L2N0c3BvcnRhYmxlLworCistIFVua25vd24gVVNCIERWQi1UIGRldmljZSB3aXRoIHZlbmRvciBJRCBIeXBlci1QYWx0ZWsKKworCitQcm9kdWNlZCBhbmQgcmVzZWxsZWQgYnkgS1dvcmxkOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gS1dvcmxkIFYtU3RyZWFtIFhQRVJUIERUViBEVkItVCBVU0IKKwlodHRwOi8vd3d3Lmt3b3JsZC5jb20udHcvZW4vcHJvZHVjdC9EVkJULVVTQi9EVkJULVVTQi5odG1sCisKKy0gSmV0V2F5IERUViBEVkItVCBVU0IKKwlodHRwOi8vd3d3LmpldHdheS5jb20udHcvZXZpc24vcHJvZHVjdC9sY2QtdHYvRFZULVVTQi9kdHYtdXNiLmh0bQorCistIEFEU1RlY2ggSW5zdGFudCBUViBEVkItVCBVU0IKKwlodHRwOi8vd3d3LmFkc3RlY2guY29tL3Byb2R1Y3RzL1BUVi0zMzMvaW50cm8vUFRWLTMzM19pbnRyby5hc3A/cGlkPVBUVi0zMzMKKworCitPdGhlcnM6CistLS0tLS0tCistIFVsdGltYSBFbGVjdHJvbmljL0FydGVjIFQxIFVTQiBUVkJPWCAoQU4yMTM1LCBBTjIyMzUsIEFOMjIzNSB3aXRoIFBhbmFzb25pYyBUdW5lcikKKwlodHRwOi8vODIuMTYxLjI0Ni4yNDkvcHJvZHVjdHMtdHZib3guaHRtbAorCistIENvbXBybyBWaWRlb21hdGUgRFZCLVUyMDAwIC0gRFZCLVQgVVNCICgyKQorCWh0dHA6Ly93d3cuY29tcHJvdXNhLmNvbS9wcm9kdWN0cy92bXUyMDAwLmh0bQorCistIEdyYW5kdGVjIFVTQiBEVkItVAorCWh0dHA6Ly93d3cuZ3JhbmQuY29tLnR3LworCistIEF2ZXJtZWRpYSBBdmVyVFYgRFZCVCBVU0IgKDIpCisJaHR0cDovL3d3dy5hdmVybWVkaWEuY29tLworCistIERpQmNvbSBVU0IgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKKworCitTdXBwb3J0ZWQgZGV2aWNlcyBVU0IyLjAKKz09PT09PT09PT09PT09PT09PT09PT09PQorLSBUd2luaGFuIE1hZ2ljQm94IElJICgyKQorCWh0dHA6Ly93d3cudHdpbmhhbi5jb20vcHJvZHVjdF90ZXJyZXN0cmlhbF83LmFzcAorCistIEhhbmZ0ZWsgVU1ULTAxMCAoMSkKKwlodHRwOi8vd3d3Lmdsb2JhbHNvdXJjZXMuY29tL3NpLzYwMDg4MTk3NTcwODIvUHJvZHVjdERldGFpbC9EaWdpdGFsLVRWL3Byb2R1Y3RfaWQtMTAwMDQ2NTI5CisKKy0gVHlwaG9vbi9ZYWt1bW8vSEFNQSBEVkItVCBtb2JpbGUgVVNCMi4wICgxKQorCWh0dHA6Ly93d3cueWFrdW1vLmRlL3Byb2R1a3RlL2luZGV4LnBocD9waWQ9MSZhZz1EVkItVAorCistIEFydGVjIFQxIFVTQiBUVkJPWCAoRlgyKSAoMikKKworLSBIYXVwcGF1Z2UgV2luVFYgTk9WQS1UIFVTQjIKKwlodHRwOi8vd3d3LmhhdXBwYXVnZS5jb20vCisKKy0gS1dvcmxkL0FEU1RlY2ggSW5zdGFudCBEVkItVCBVU0IyLjAgKERpQjMwMDBNLUIpCisKKy0gRGlCY29tIFVTQjIuMCBEVkItVCByZWZlcmVuY2UgZGV2aWNlIChub24tcHVibGljKQorCisxKSBJdCBpcyB3b3JraW5nIGFsbW9zdC4KKzIpIE5vIHRlc3QgcmVwb3J0cyByZWNlaXZlZCB5ZXQuCisKKworMC4gTkVXUzoKKyAgMjAwNS0wMi0xMSAtIGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBLV29ybGQvQURTVGVjaCBJbnN0YW50IERWQi1UIFVTQjIuMC4gVGhhbmtzIGEgbG90IHRvIEpvYWNoaW0gdm9uIENhcm9uCisgIDIwMDUtMDItMDIgLSBhZGRlZCBzdXBwb3J0IGZvciB0aGUgSGF1cHBhdWdlIFdpbi1UViBOb3ZhLVQgVVNCMgorICAyMDA1LTAxLTMxIC0gZGlzdG9ydGVkIHN0cmVhbWluZyBpcyBmaW5hbGx5IGdvbmUgZm9yIFVTQjEuMSBkZXZpY2VzCisgIDIwMDUtMDEtMTMgLSBtb3ZlZCB0aGUgbWlycm9yZWQgcGlkX2ZpbHRlcl90YWJsZSBiYWNrIHRvIGR2Yi1kaWJ1c2IKKyAgICAgICAgICAgICAtIGZpcnN0IGFsbW9zdCB3b3JraW5nIHZlcnNpb24gZm9yIEhhbmZUZWsgVU1ULTAxMAorICAgICAgICAgICAgIC0gZm91bmQgb3V0LCB0aGF0IFlha3Vtby9IQU1BL1R5cGhvb24gYXJlIHByZWRlc3NvcnMgb2YgdGhlIEhhbmZUZWsgVU1ULTAxMAorICAyMDA1LTAxLTEwIC0gcmVmYWN0b3JpbmcgY29tcGxldGVkLCBub3cgZXZlcnl0aGluZyBpcyB2ZXJ5IGRlbGlnaHRmdWwKKyAgICAgICAgICAgICAtIHR1bmVyIHF1aXJrcyBmb3Igc29tZSB3ZWlyZCBkZXZpY2VzIChBcnRlYyBUMSBBTjIyMzUgZGV2aWNlIGhhcyBzb21ldGltZXMgYQorICAgICAgICAgICAgICAgUGFuYXNvbmljIFR1bmVyIGFzc2VtYmxlZCkuIFR1bmVycHJvYmluZyBpbXBsZW1lbnRlZC4gVGhhbmtzIGEgbG90IHRvIEd1bm5hciBXaXR0aWNoLgorICAyMDA0LTEyLTI5IC0gYWZ0ZXIgc2V2ZXJhbCBkYXlzIG9mIHN0cnVnZ2xpbmcgYXJvdW5kIGJ1ZyBvZiBubyByZXR1cm5pbmcgVVJCcyBmaXhlZC4KKyAgMjAwNC0xMi0yNiAtIHJlZmFjdG9yZWQgdGhlIGRpYnVzYi1kcml2ZXIsIHNwbGl0dGVkIGludG8gc2VwYXJhdGUgZmlsZXMKKyAgICAgICAgICAgICAtIGkyYy1wcm9iaW5nIGVuYWJsZWQKKyAgMjAwNC0xMi0wNiAtIHBvc3NpYmlsaXR5IGZvciBkZW1vZCBpMmMtYWRkcmVzcyBwcm9iaW5nCisgICAgICAgICAgICAgLSBuZXcgdXNiIElEcyAoQ29tcHJvLEFydGVjKQorICAyMDA0LTExLTIzIC0gbWVyZ2VkIGNoYW5nZXMgZnJvbSBEaUIzMDAwTUNfdmVyMi4xCisgICAgICAgICAgICAgLSByZXZpc2VkIHRoZSBkZWJ1Z2dpbmcKKyAgICAgICAgICAgICAtIHBvc3NpYmlsaXR5IHRvIGRlbGl2ZXIgdGhlIGNvbXBsZXRlIFRTIGZvciBVU0IyLjAKKyAgMjAwNC0xMS0yMSAtIGZpcnN0IHdvcmtpbmcgdmVyc2lvbiBvZiB0aGUgZGliMzAwMG1jL3AgZnJvbnRlbmQgZHJpdmVyLgorICAyMDA0LTExLTEyIC0gYWRkZWQgYWRkaXRpb25hbCByZW1vdGUgY29udHJvbCBrZXlzLiBUaGFua3MgdG8gVXdlIEhhbmtlLgorICAyMDA0LTExLTA3IC0gYWRkZWQgcmVtb3RlIGNvbnRyb2wgc3VwcG9ydC4gVGhhbmtzIHRvIERhdmlkIE1hdHRoZXdzLgorICAyMDA0LTExLTA1IC0gYWRkZWQgc3VwcG9ydCBmb3IgYSBuZXcgZGV2aWNlcyAoR3JhbmR0ZWMvQXZlcm1lZGlhL0FydGVjKQorICAgICAgICAgICAgIC0gbWVyZ2VkIG15IGNoYW5nZXMgKGZvciBkaWIzMDAwbWIvZGlidXNiKSB0byB0aGUgRkVfUkVGQUNUT1JJTkcsIGJlY2F1c2UgaXQgYmVjYW1lIEhFQUQKKyAgICAgICAgICAgICAtIG1vdmVkIHRyYW5zZmVyIGNvbnRyb2wgKHBpZCBmaWx0ZXIsIGZpZm8gY29udHJvbCkgZnJvbSB1c2IgZHJpdmVyIHRvIGZyb250ZW5kLCBpdCBzZWVtcworICAgICAgICAgICAgICAgYmV0dGVyIHNldHRsZWQgdGhlcmUgKGFkZGVkIHhmZXJfb3BzLXN0cnVjdCkKKyAgICAgICAgICAgICAtIGNyZWF0ZWQgYSBjb21tb24gZmlsZXMgZm9yIGZyb250ZW5kcyAobWMvcC9tYikKKyAgMjAwNC0wOS0yOCAtIGFkZGVkIHN1cHBvcnQgZm9yIGEgbmV3IGRldmljZSAoVW5rb3duLCB2ZW5kb3IgSUQgaXMgSHlwZXItUGFsdGVrKQorICAyMDA0LTA5LTIwIC0gYWRkZWQgc3VwcG9ydCBmb3IgYSBuZXcgZGV2aWNlIChDb21wcm8gRFZCLVUyMDAwKSwgdGhhbmtzCisgICAgICAgICAgICAgICB0byBBbWF1cnkgRGVtb2wgZm9yIHJlcG9ydGluZworICAgICAgICAgICAgIC0gY2hhbmdlZCB1c2IgVFMgdHJhbnNmZXIgbWV0aG9kIChzZXZlcmFsIHVyYnMsIHN0b3BwaW5nIHRyYW5zZmVyCisgICAgICAgICAgICAgICBiZWZvcmUgc2V0dGluZyBhIG5ldyBwaWQpCisgIDIwMDQtMDktMTMgLSBhZGRlZCBzdXBwb3J0IGZvciBhIG5ldyBkZXZpY2UgKEFydGVjIFQxIFVTQiBUVkJPWCksIHRoYW5rcworICAgICAgICAgICAgICAgdG8gQ2hyaXN0aWFuIE1vdHNjaGtlIGZvciByZXBvcnRpbmcKKyAgMjAwNC0wOS0wNSAtIHJlbGVhc2VkIHRoZSBkaWJ1c2IgZGV2aWNlIGFuZCBkaWIzMDAwbWItZnJvbnRlbmQgZHJpdmVyCisKKyAgKG9sZCBuZXdzIGZvciB2cDcwNDEuYykKKyAgMjAwNC0wNy0xNSAtIGZvdW5kIG91dCwgYnkgYWNjaWRlbnQsIHRoYXQgdGhlIGRldmljZSBoYXMgYSBUVUE2MDEwWFMgZm9yCisgICAgICAgICAgICAgICBQTEwKKyAgMjAwNC0wNy0xMiAtIGZpZ3VyZWQgb3V0LCB0aGF0IHRoZSBkcml2ZXIgc2hvdWxkIGFsc28gd29yayB3aXRoIHRoZQorICAgICAgICAgICAgICAgQ1RTIFBvcnRhYmxlIChDaGluZXNlIFRlbGV2aXNpb24gU3lzdGVtKQorICAyMDA0LTA3LTA4IC0gZmlybXdhcmUtZXh0cmFjdGlvbi0yLjQyMi1wcm9ibGVtIHNvbHZlZCwgZHJpdmVyIGlzIG5vdyB3b3JraW5nCisgICAgICAgICAgICAgICBwcm9wZXJseSB3aXRoIGZpcm13YXJlIGV4dHJhY3RlZCBmcm9tIDIuNDIyCisJCQkgLSAjaWYgZm9yIDIuNi40IChkdmIpLCBjb21waWxlIGlzc3VlCisJCQkgLSBjaGFuZ2VkIGZpcm13YXJlIGhhbmRsaW5nLCBzZWUgdnA3MDQxLnR4dCBzZWMgMS4xCisgIDIwMDQtMDctMDIgLSBzb21lIHR1bmVyIG1vZGlmaWNhdGlvbnMsIHYwLjEsIGNsZWFudXBzLCBmaXJzdCBwdWJsaWMKKyAgMjAwNC0wNi0yOCAtIG5vdyB1c2luZyB0aGUgZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzLCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICBydW5zIGZpbmUgbm93CisgIDIwMDQtMDYtMjcgLSBhYmxlIHRvIHdhdGNoIGFuZCBzd2l0Y2hpbmcgY2hhbm5lbHMgKHByZS1hbHBoYSkKKyAgICAgICAgICAgICAtIG5vIHNlY3Rpb24gZmlsdGVyaW5nIHlldAorICAyMDA0LTA2LTA2IC0gZmlyc3QgVFMgcmVjZWl2ZWQsIGJ1dCBrZXJuZWwgb29wcyA6LworICAyMDA0LTA1LTE0IC0gZmlybXdhcmUgbG9hZGVyIGlzIHdvcmtpbmcKKyAgMjAwNC0wNS0xMSAtIHN0YXJ0IHdyaXRpbmcgdGhlIGRyaXZlcgorCisxLiBIb3cgdG8gdXNlPworTk9URTogVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCB1c2luZyBMaW51eCAyLjYuNi4sCitpdCBpcyB3b3JraW5nIHdpdGggMi42LjcgYW5kIGFib3ZlLgorCitMaW51eCAyLjQueCBzdXBwb3J0IGlzIG5vdCBwbGFubmVkLCBidXQgcGF0Y2hlcyBhcmUgdmVyeSB3ZWxjb21lLgorCitOT1RFOiBJJ20gdXNpbmcgRGViaWFuIHRlc3RpbmcsIHNvIHRoZSBmb2xsb3dpbmcgZXhwbGFpbmF0aW9uIChlc3BlY2lhbGx5Cit0aGUgaG90cGx1Zy1wYXRoKSBuZWVkbid0IG1hdGNoIHlvdXIgc3lzdGVtLCBidXQgcHJvYmFibHkgaXQgd2lsbCA6KS4KKworVGhlIGRyaXZlciBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIHNpbmNlIExpbnV4IDIuNi4xMC4KKworMS4xLiBGaXJtd2FyZQorCitUaGUgVVNCIGRyaXZlciBuZWVkcyB0byBkb3dubG9hZCBhIGZpcm13YXJlIHRvIHN0YXJ0IHdvcmtpbmcuCisKK1lvdSBjYW4gZWl0aGVyIHVzZSAiZ2V0X2R2Yl9maXJtd2FyZSBkaWJ1c2IiIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSBvciB5b3UKK2NhbiBnZXQgaXQgZGlyZWN0bHkgdmlhCisKK2ZvciBVU0IxLjEgKEFOMjEzNSkKK2h0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlL2R2Yi1kaWJ1c2ItNS4wLjAuMTEuZncKKworZm9yIFVTQjEuMSAoQU4yMjM1KSAoYSBmZXcgQXJ0ZWMgVDEgZGV2aWNlcykKK2h0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlL2R2Yi1kaWJ1c2ItYW4yMjM1LTEuZncKKworZm9yIFVTQjIuMCAoRlgyKSBIYXVwcGF1Z2UsIERpQmNvbQoraHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvZHZiLWRpYnVzYi02LjAuMC41LmZ3CisKK2ZvciBVU0IyLjAgQURTVGVjaC9Ld29ybGQgVVNCMi4wCitodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS9kdmItZGlidXNiLWFkc3RlY2gtdXNiMi0xLmZ3CisKK2ZvciBVU0IyLjAgSGFuZlRlaworaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvZHZiLWRpYnVzYi1hbjIyMzUtMS5mdworCisKKzEuMi4gQ29tcGlsaW5nCisKK1NpbmNlIHRoZSBkcml2ZXIgaXMgaW4gdGhlIGxpbnV4IGtlcm5lbCwgYWN0aXZhdGluZyB0aGUgZHJpdmVyIGluCit5b3VyIGZhdm9yaXRlIGNvbmZpZy1lbnZpcm9ubWVudCBzaG91bGQgc3VmZmljaWVudC4gSSByZWNvbW1lbmQKK3RvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBtb2R1bGUuIEhvdHBsdWcgZG9lcyB0aGUgcmVzdC4KKworMS4zLiBMb2FkaW5nIHRoZSBkcml2ZXJzCisKK0hvdHBsdWcgaXMgYWJsZSB0byBsb2FkIHRoZSBkcml2ZXIsIHdoZW4gaXQgaXMgbmVlZGVkIChiZWNhdXNlIHlvdSBwbHVnZ2VkCitpbiB0aGUgZGV2aWNlKS4KKworSWYgeW91IHdhbnQgdG8gZW5hYmxlIGRlYnVnIG91dHB1dCwgeW91IGhhdmUgdG8gbG9hZCB0aGUgZHJpdmVyIG1hbnVhbGx5IGFuZAorZnJvbSB3aXRoaW5nIHRoZSBkdmIta2VybmVsIGN2cyByZXBvc2l0b3J5LgorCitmaXJzdCBoYXZlIGEgbG9vaywgd2hpY2ggZGVidWcgbGV2ZWwgYXJlIGF2YWlsYWJsZToKKworbW9kaW5mbyBkaWIzMDAwbWIKK21vZGluZm8gZGliMzAwMC1jb21tb24KK21vZGluZm8gZGliMzAwMG1jCittb2RpbmZvIGR2Yi1kaWJ1c2IKKworbW9kcHJvYmUgZGliMzAwMC1jb21tb24gZGVidWc9PGxldmVsPgorbW9kcHJvYmUgZGliMzAwMG1iIGRlYnVnPTxsZXZlbD4KK21vZHByb2JlIGRpYjMwMDBtYyBkZWJ1Zz08bGV2ZWw+Cittb2Rwcm9iZSBkdmItZGlidXNiIGRlYnVnPTxsZXZlbD4KKworc2hvdWxkIGRvIHRoZSB0cmljay4KKworV2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHksIHRoZSBmaXJtd2FyZSBmaWxlIHdhcyBpbgordGhlIHJpZ2h0IHBsYWNlIGFuZCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCwgdGhlICJQb3dlciItTEVEIHNob3VsZCBiZQordHVybmVkIG9uLgorCitBdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgYmUgYWJsZSB0byBzdGFydCBhIGR2Yi1jYXBhYmxlIGFwcGxpY2F0aW9uLiBGb3IgbXlzZWxmCitJIHVzZWQgbXBsYXllciwgZHZic2NhbiwgdHphcCBhbmQga2F4dHYsIHRoZXkgYXJlIHdvcmtpbmcuIFVzaW5nIHRoZSBkZXZpY2UKK2luIHZkciBpcyB3b3JraW5nIG5vdyBhbHNvLgorCisyLiBLbm93biBwcm9ibGVtcyBhbmQgYnVncworCistIERvbid0IHJlbW92ZSB0aGUgVVNCIGRldmljZSB3aGlsZSBydW5uaW5nIGFuIERWQiBhcHBsaWNhdGlvbiwgeW91ciBzeXN0ZW0gd2lsbCBkaWUuCisKKzIuMS4gQWRkaW5nIHN1cHBvcnQgZm9yIGRldmljZXMKKworSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgcmFuZ2Ugb2YgZGV2aWNlcyBiYXNlZCBvbiB0aGUgRGlCY29tCityZWZlcmVuY2UgZGVzaWducy4gVGhpcyBpcyBiZWNhdXNlIHRoZSByZWZlcmVuY2UgZGVzaWduIG9mIERpQmNvbSBjYW4gYmUgc29sZAordG8gdGhpcmRzLCB3aXRob3V0IHRlbGxpbmcgRGlCY29tIChzbyBkb25lIHdpdGggdGhlIFR3aW5oYW4gVlA3MDQxIGFuZAordGhlIEhBTUEgZGV2aWNlKS4KKworV2hlbiB5b3UgdGhpbmsgeW91IGhhdmUgYSBkZXZpY2UgbGlrZSB0aGlzIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHJlY29nbml6ZXMgaXQsCitwbGVhc2Ugc2VuZCB0aGUgKioqKmxvYWQqLmluZiBhbmQgdGhlICoqKipjYXAqLmluZiBvZiB0aGUgV2luZG93cyBkcml2ZXIgdG8gbWUuCisKK1NvbWV0aW1lcyB0aGUgVmVuZG9yIG9yIFByb2R1Y3QgSUQgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmVzIG9mIFR3aW5oYW4sIGV2ZW4KK3Rob3VnaCBpdCBpcyBub3QgYSBUd2luaGFuIGRldmljZSAoZS5nLiBIQU1BKSwgdGhlbiBwbGVhc2Ugc2VuZCBtZSB0aGUgbmFtZQorb2YgdGhlIGRldmljZS4gSSB3aWxsIGFkZCBpdCB0byB0aGlzIGxpc3QgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGNsZWFyIHRvCitvdGhlcnMuCisKK0lmIHlvdSBhcmUgZmFtaWxhciB3aXRoIEMgeW91IGNhbiBhbHNvIGFkZCB0aGUgVklEIGFuZCBQSUQgb2YgdGhlIGRldmljZSB0bwordGhlIGR2Yi1kaWJ1c2ItY29yZS5jLWZpbGUgYW5kIGNyZWF0ZSBhIHBhdGNoIGFuZCBzZW5kIGl0IG92ZXIgdG8gbWUgb3IgdG8KK3RoZSBsaW51eC1kdmIgbWFpbGluZyBsaXN0LCBfYWZ0ZXJfIHlvdSBoYXZlIHRyaWVkIGNvbXBpbGluZyBhbmQgbW9kcHJvYmluZworaXQuCisKKzIuMi4gVVNCMS4xIEJhbmR3aWR0aCBsaW1pdGF0aW9uCisKK01vc3Qgb2YgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZGV2aWNlcyBhcmUgVVNCMS4xIGFuZCB0aHVzIHRoZXkgaGF2ZSBhCittYXhpbXVtIGJhbmR3aWR0aCBvZiBhYm91dCA1LTYgTUJpdC9zIHdoZW4gY29ubmVjdGVkIHRvIGEgVVNCMi4wIGh1Yi4KK1RoaXMgaXMgbm90IGVub3VnaCBmb3IgcmVjZWl2aW5nIHRoZSBjb21wbGV0ZSB0cmFuc3BvcnQgc3RyZWFtIG9mIGEKK0RWQi1UIGNoYW5uZWwgKHdoaWNoIGNhbiBiZSBhYm91dCAxNiBNQml0L3MpLiBOb3JtYWxseSB0aGlzIGlzIG5vdCBhCitwcm9ibGVtLCBpZiB5b3Ugb25seSB3YW50IHRvIHdhdGNoIFRWICh0aGlzIGRvZXMgbm90IGFwcGx5IGZvciBIRFRWKSwKK2J1dCB3YXRjaGluZyBhIGNoYW5uZWwgd2hpbGUgcmVjb3JkaW5nIGFub3RoZXIgY2hhbm5lbCBvbiB0aGUgc2FtZQorZnJlcXVlbmN5IHNpbXBseSBkb2VzIG5vdCB3b3JrIHZlcnkgd2VsbC4gVGhpcyBhcHBsaWVzIHRvIGFsbCBVU0IxLjEKK0RWQi1UIGRldmljZXMsIG5vdCBqdXN0IGRpYnVzYikKKworVXBkYXRlOiBGb3IgdGhlIFVTQjEuMSBhbmQgVkRSIHNvbWUgd29yayBoYXMgYmVlbiBkb25lIChwYXRjaGVzIGFuZCBjb21tZW50cworYXJlIHN0aWxsIHZlcnkgd2VsY29tZSkuIE1heWJlIHRoZSBwcm9ibGVtIGlzIHNvbHZlZCBpbiB0aGUgbWVhbnRpbWUgYmVjYXVzZSBJCitub3cgdXNlIHRoZSBkbXhfc3dfZmlsdGVyIGZ1bmN0aW9uIGluc3RlYWQgb2YgZG14X3N3X2ZpbHRlcl9wYWNrZXQuIEkgaG9wZSB0aGUKK2xpbnV4LWR2YiBzb2Z0d2FyZSBmaWx0ZXIgaXMgYWJsZSB0byBnZXQgdGhlIGJlc3Qgb2YgdGhlIGdhcmJsZWQgVFMuCisKK1RoZSBidWcsIHdoZXJlIHRoZSBUUyBpcyBkaXN0b3J0ZWQgYnkgYSBoZWF2eSB1c2FnZSBvZiB0aGUgZGV2aWNlIGlzIGdvbmUKK2RlZmluaXRlbHkuIEFsbCBkaWJ1c2ItZGV2aWNlcyBJIHdhcyB1c2luZyAoVHdpbmhhbiwgS3dvcmxkLCBEaUJjb20pIGFyZQord29ya2luZyBsaWtlIGNoYXJtIG5vdyB3aXRoIFZEUi4gU29tZXRpbWVzIEkgZXZlbiB3YXMgYWJsZSB0byByZWNvcmQgYSBjaGFubmVsCithbmQgd2F0Y2ggYW5vdGhlciBvbmUuCisKKzIuMy4gQ29tbWVudHMKKworUGF0Y2hlcywgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFyZSB2ZXJ5IHZlcnkgd2VsY29tZS4KKworMy4gQWNrbm93bGVkZ2VtZW50cworCUFtYXVyeSBEZW1vbCAoYWRlbW9sQGRpYmNvbS5mcikgYW5kIEZyYW5jb2lzIEthbm91bm5pa29mZiBmcm9tIERpQmNvbSBmb3IKKyAgICBwcm92aWRpbmcgc3BlY3MsIGNvZGUgYW5kIGhlbHAsIG9uIHdoaWNoIHRoZSBkdmItZGlidXNiLCBkaWIzMDAwbWIgYW5kCisgICAgZGliMzAwMG1jIGFyZSBiYXNlZC4KKworICAgRGF2aWQgTWF0dGhld3MgZm9yIGlkZW50aWZ5aW5nIGEgbmV3IGRldmljZSB0eXBlIChBcnRlYyBUMSB3aXRoIEFOMjIzNSkKKyAgICBhbmQgZm9yIGV4dGVuZGluZyBkaWJ1c2Igd2l0aCByZW1vdGUgY29udHJvbCBldmVudCBoYW5kbGluZy4gVGhhbmsgeW91LgorCisgICBBbGV4IFdvb2RzIGZvciBmcmVxdWVudGx5IGFuc3dlcmluZyBxdWVzdGlvbiBhYm91dCB1c2IgYW5kIGR2YgorICAgIHN0dWZmLCBhIGJpZyB0aGFuayB5b3UuCisKKyAgIEJlcm5kIFdhZ25lciBmb3IgaGVscGluZyB3aXRoIGh1Z2UgYnVnIHJlcG9ydHMgYW5kIGRpc2N1c3Npb25zLgorCisgICBHdW5uYXIgV2l0dGljaCBhbmQgSm9hY2hpbSB2b24gQ2Fyb24gZm9yIHRoZWlyIHRydXN0IGZvciBnaXZpbmcgbWUKKyAgICByb290LXNoZWxscyBvbiB0aGVpciBtYWNoaW5lcyB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgbmV3IGRldmljZXMuCisKKyAgIFNvbWUgZ3V5cyBvbiB0aGUgbGludXgtZHZiIG1haWxpbmcgbGlzdCBmb3IgZW5jb3VyYWdpbmcgbWUKKworICAgUGV0ZXIgU2NoaWxkbWFubiA+cGV0ZXIuc2NoaWxkbWFubi1ub3NwYW0tYXQtd2ViLmRlPCBmb3IgaGlzCisgICAgdXNlci1sZXZlbCBmaXJtd2FyZSBsb2FkZXIsIHdoaWNoIHNhdmVzIGEgbG90IG9mIHRpbWUKKyAgICAod2hlbiB3cml0aW5nIHRoZSB2cDcwNDEgZHJpdmVyKQorCisgICBVbGYgSGVybWVuYXUgZm9yIGhlbHBpbmcgbWUgb3V0IHdpdGggdHJhZGl0aW9uYWwgY2hpbmVzZS4KKworICAgQW5kcukgU21va3R1biBhbmQgQ2hyaXN0aWFuIEZy9m1tZWwgZm9yIHN1cHBvcnRpbmcgbWUgd2l0aAorICAgIGhhcmR3YXJlIGFuZCBsaXN0ZW5pbmcgdG8gbXkgcHJvYmxlbXMgdmVyeSBwYXRpZW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9hdmVybWVkaWEudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvYXZlcm1lZGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAyMGViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvYXZlcm1lZGlhLnR4dApAQCAtMCwwICsxLDMwNCBAQAorCitIT1dUTzogR2V0IEFuIEF2ZXJtZWRpYSBEVkItVCB3b3JraW5nIHVuZGVyIExpbnV4CisgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgVGFibGUgb2YgQ29udGVudHMKKyAgIEFzc3VtcHRpb25zIGFuZCBJbnRyb2R1Y3Rpb24KKyAgIFRoZSBBdmVybWVkaWEgRFZCLVQKKyAgIEdldHRpbmcgdGhlIGNhcmQgZ29pbmcKKyAgIFJlY2VpdmluZyBEVkItVCBpbiBBdXN0cmFsaWEKKyAgIEtub3duIExpbWl0YXRpb25zCisgICBGdXJ0aGVyIFVwZGF0ZQorCitBc3N1bXB0aW9ucyBhbmQgSW50cm9kdWN0aW9uCisKKyAgIEl0ICBpcyBhc3N1bWVkIHRoYXQgdGhlIHJlYWRlciB1bmRlcnN0YW5kcyB0aGUgYmFzaWMgc3RydWN0dXJlCisgICBvZiAgdGhlIExpbnV4IEtlcm5lbCBEVkIgZHJpdmVycyBhbmQgdGhlIGdlbmVyYWwgcHJpbmNpcGxlcyBvZgorICAgRGlnaXRhbCBUVi4KKworICAgT25lICBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gRGlnaXRhbCBUViBhbmQgQW5hbG9ndWUgVFYKKyAgIHRoYXQgIHRoZSAgdW53YXJ5ICAobGlrZSAgbXlzZWxmKSAgc2hvdWxkICBjb25zaWRlciAgaXMgIHRoYXQsCisgICBhbHRob3VnaCAgdGhlICBjb21wb25lbnQgIHN0cnVjdHVyZSAgb2YgYnVkZ2V0IERWQi1UIGNhcmRzIGFyZQorICAgc3Vic3RhbnRpYWxseSAgc2ltaWxhciAgdG8gQW5hbG9ndWUgVFYgY2FyZHMsIHRoZXkgZnVuY3Rpb24gaW4KKyAgIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IHdheXMuCisKKyAgIFRoZSAgcHVycG9zZSAgb2YgIGFuICBBbmFsb2d1ZSBUViBpcyB0byByZWNlaXZlIGFuZCBkaXNwbGF5IGFuCisgICBBbmFsb2d1ZSAgVGVsZXZpc2lvbiAgc2lnbmFsLiBBbiBBbmFsb2d1ZSBUViBzaWduYWwgKG90aGVyd2lzZQorICAga25vd24gIGFzICBjb21wb3NpdGUgIHZpZGVvKSAgaXMgIGFuICBhbmFsb2d1ZSAgZW5jb2RpbmcgIG9mIGEKKyAgIHNlcXVlbmNlICBvZiAgaW1hZ2UgZnJhbWVzICgyNSBwZXIgc2Vjb25kKSByYXN0ZXJpc2VkIHVzaW5nIGFuCisgICBpbnRlcmxhY2luZyAgIHRlY2huaXF1ZS4gICBJbnRlcmxhY2luZyAgdGFrZXMgIHR3byAgZmllbGRzICB0bworICAgcmVwcmVzZW50ICBvbmUgIGZyYW1lLiAgQ29tcHV0ZXJzIHRvZGF5IGFyZSBhdCB0aGVpciBiZXN0IHdoZW4KKyAgIGRlYWxpbmcgIHdpdGggIGRpZ2l0YWwgIHNpZ25hbHMsICBub3QgIGFuYWxvZ3VlICBzaWduYWxzIGFuZCBhCisgICBjb21wb3NpdGUgIHZpZGVvIHNpZ25hbCBpcyBhYm91dCBhcyBmYXIgcmVtb3ZlZCBmcm9tIGEgZGlnaXRhbAorICAgZGF0YSBzdHJlYW0gYXMgeW91IGNhbiBnZXQuIFRoZXJlZm9yZSwgYW4gQW5hbG9ndWUgVFYgY2FyZCBmb3IKKyAgIGEgUEMgaGFzIHRoZSBmb2xsb3dpbmcgcHVycG9zZToKKworICAgICAqIFR1bmUgdGhlIHJlY2VpdmVyIHRvIHJlY2VpdmUgYSBicm9hZGNhc3Qgc2lnbmFsCisgICAgICogZGVtb2R1bGF0ZSB0aGUgYnJvYWRjYXN0IHNpZ25hbAorICAgICAqIGRlbXVsdGlwbGV4ICB0aGUgIGFuYWxvZ3VlIHZpZGVvIHNpZ25hbCBhbmQgYW5hbG9ndWUgYXVkaW8KKyAgICAgICBzaWduYWwgIChub3RlIHNvbWUgY291bnRyaWVzIGVtcGxveSBhIGRpZ2l0YWwgYXVkaW8gc2lnbmFsCisgICAgICAgZW1iZWRkZWQgIHdpdGhpbiB0aGUgbW9kdWxhdGVkIGNvbXBvc2l0ZSBhbmFsb2d1ZSBzaWduYWwgLQorICAgICAgIE5JQ0FNLikKKyAgICAgKiBkaWdpdGl6ZSAgdGhlIGFuYWxvZ3VlIHZpZGVvIHNpZ25hbCBhbmQgbWFrZSB0aGUgcmVzdWx0aW5nCisgICAgICAgZGF0YXN0cmVhbSBhdmFpbGFibGUgdG8gdGhlIGRhdGEgYnVzLgorCisgICBUaGUgIGRpZ2l0YWwgIGRhdGFzdHJlYW0gZnJvbSBhbiBBbmFsb2d1ZSBUViBjYXJkIGlzIGdlbmVyYXRlZAorICAgYnkgIGNpcmN1aXRyeSBvbiB0aGUgY2FyZCBhbmQgaXMgb2Z0ZW4gcHJlc2VudGVkIHVuY29tcHJlc3NlZC4KKyAgIEZvciAgYSBQQUwgVFYgc2lnbmFsIGVuY29kZWQgYXQgYSByZXNvbHV0aW9uIG9mIDc2OHg1NzYgMjQtYml0CisgICBjb2xvciBwaXhlbHMgb3ZlciAyNSBmcmFtZXMgcGVyIHNlY29uZCAtIGEgZmFpciBhbW91bnQgb2YgZGF0YQorICAgaXMgIGdlbmVyYXRlZCBhbmQgbXVzdCBiZSBwcm9jZWVzZWQgYnkgdGhlIFBDIGJlZm9yZSBpdCBjYW4gYmUKKyAgIGRpc3BsYXllZCAgb24gdGhlIHZpZGVvIG1vbml0b3Igc2NyZWVuLiBTb21lIEFuYWxvZ3VlIFRWIGNhcmRzCisgICBmb3IgIFBDJ3MgIGhhdmUgIG9uYm9hcmQgIE1QRUcyICBlbmNvZGVycyB3aGljaCBwZXJtaXQgdGhlIHJhdworICAgZGlnaXRhbCAgZGF0YSAgc3RyZWFtICB0byBiZSBwcmVzZW50ZWQgdG8gdGhlIFBDIGluIGFuIGVuY29kZWQKKyAgIGFuZCAgY29tcHJlc3NlZCAgZm9ybSAgLSAgc2ltaWxhciAgdG8gdGhlIGZvcm0gdGhhdCBpcyB1c2VkIGluCisgICBEaWdpdGFsIFRWLgorCisgICBUaGUgIHB1cnBvc2Ugb2YgYSBzaW1wbGUgYnVkZ2V0IGRpZ2l0YWwgVFYgY2FyZCAoRFZCLVQsQyBvciBTKQorICAgaXMgdG8gc2ltcGx5OgorCisgICAgICogVHVuZSB0aGUgcmVjZWl2ZWQgdG8gcmVjZWl2ZSBhIGJyb2FkY2FzdCBzaWduYWwuCisgICAgICogRXh0cmFjdCAgdGhlIGVuY29kZWQgZGlnaXRhbCBkYXRhc3RyZWFtIGZyb20gdGhlIGJyb2FkY2FzdAorICAgICAgIHNpZ25hbC4KKyAgICAgKiBNYWtlICB0aGUgIGVuY29kZWQgZGlnaXRhbCBkYXRhc3RyZWFtIChNUEVHMikgYXZhaWxhYmxlIHRvCisgICAgICAgdGhlIGRhdGEgYnVzLgorCisgICBUaGUgIHNpZ25pZmljYW50ICBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBpcyB0aGF0IHRoZSB0dW5lcgorICAgb24gIHRoZSBhbmFsb2d1ZSBUViBjYXJkIHNwaXRzIG91dCBhbiBBbmFsb2d1ZSBzaWduYWwsIHdoZXJlYXMKKyAgIHRoZSAgdHVuZXIgIG9uICB0aGUgIGRpZ2l0YWwgIFRWICBjYXJkICBzcGl0cyBvdXQgYSBjb21wcmVzc2VkCisgICBlbmNvZGVkICAgZGlnaXRhbCAgIGRhdGFzdHJlYW0uICAgQXMgIHRoZSAgc2lnbmFsICBpcyAgYWxyZWFkeQorICAgZGlnaXRpc2VkLCAgaXQgIGlzICB0cml2aWFsICB0byBwYXNzIHRoaXMgZGF0YXN0cmVhbSB0byB0aGUgUEMKKyAgIGRhdGFidXMgIHdpdGggIG1pbmltYWwgIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBhbmQgdGhlbiBleHRyYWN0CisgICB0aGUgIGRpZ2l0YWwgIHZpZGVvICBhbmQgYXVkaW8gZGF0YXN0cmVhbXMgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgYXBwcm9wcmlhdGUgc29mdHdhcmUgb3IgaGFyZHdhcmUgZm9yIGRlY29kaW5nIGFuZCB2aWV3aW5nLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworVGhlIEF2ZXJtZWRpYSBEVkItVAorCisgICBUaGUgQXZlcm1lZGlhIERWQi1UIGlzIGEgYnVkZ2V0IFBDSSBEVkIgY2FyZC4gSXQgaGFzIDMgaW5wdXRzOgorCisgICAgICogUkYgVHVuZXIgSW5wdXQKKyAgICAgKiBDb21wb3NpdGUgVmlkZW8gSW5wdXQgKFJDQSBKYWNrKQorICAgICAqIFNWSURFTyBJbnB1dCAoTWluaS1ESU4pCisKKyAgIFRoZSAgUkYgIFR1bmVyICBJbnB1dCAgaXMgdGhlIGlucHV0IHRvIHRoZSB0dW5lciBtb2R1bGUgb2YgdGhlCisgICBjYXJkLiAgVGhlICBUdW5lciAgaXMgIG90aGVyd2lzZSBrbm93biBhcyB0aGUgIkZyb250ZW5kIiAuIFRoZQorICAgRnJvbnRlbmQgb2YgdGhlIEF2ZXJtZWRpYSBEVkItVCBpcyBhIE1pY3JvdHVuZSA3MjAyRC4gQSB0aW1lbHkKKyAgIHBvc3QgIHRvICB0aGUgIGxpbnV4LWR2YiAgbWFpbGluZyAgbGlzdCAgYXNjZXJ0YWluZWQgIHRoYXQgdGhlCisgICBNaWNyb3R1bmUgIDcyMDJEICBpcyAgc3VwcG9ydGVkICBieSB0aGUgc3A4ODd4IGRyaXZlciB3aGljaCBpcworICAgZm91bmQgaW4gdGhlIGR2Yi1odyBDVlMgbW9kdWxlLgorCisgICBUaGUgIERWQi1UIGNhcmQgaXMgYmFzZWQgYXJvdW5kIHRoZSBCVDg3OCBjaGlwIHdoaWNoIGlzIGEgdmVyeQorICAgY29tbW9uIG11bHRpbWVkaWEgYnJpZGdlIGFuZCBvZnRlbiBmb3VuZCBvbiBBbmFsb2d1ZSBUViBjYXJkcy4KKyAgIFRoZXJlIGlzIG5vIG9uLWJvYXJkIE1QRUcyIGRlY29kZXIsIHdoaWNoIG1lYW5zIHRoYXQgYWxsIE1QRUcyCisgICBkZWNvZGluZyAgbXVzdCAgYmUgZG9uZSBpbiBzb2Z0d2FyZSwgb3IgaWYgeW91IGhhdmUgb25lLCBvbiBhbgorICAgTVBFRzIgaGFyZHdhcmUgZGVjb2RpbmcgY2FyZCBvciBjaGlwc2V0LgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworR2V0dGluZyB0aGUgY2FyZCBnb2luZworCisgICBJbiBvcmRlciB0byBmaXJlIHVwIHRoZSBjYXJkLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCBhIG51bWJlcgorICAgb2YgbW9kdWxlcyBmcm9tIHRoZSBEVkIgZHJpdmVyIHNldC4gUHJpb3IgdG8gdGhpcyBpdCB3aWxsIGhhdmUKKyAgIGJlZW4gIG5lY2Vzc2FyeSB0byBkb3dubG9hZCB0aGVzZSBkcml2ZXJzIGZyb20gdGhlIGxpbnV4dHYgQ1ZTCisgICBzZXJ2ZXIgYW5kIGNvbXBpbGUgdGhlbSBzdWNjZXNzZnVsbHkuCisKKyAgIERlcGVuZGluZyBvbiB0aGUgY2FyZCdzIGZlYXR1cmUgc2V0LCB0aGUgRGV2aWNlIERyaXZlciBBUEkgZm9yCisgICBEVkIgdW5kZXIgTGludXggd2lsbCBleHBvc2Ugc29tZSBvZiB0aGUgZm9sbG93aW5nIGRldmljZSBmaWxlcworICAgaW4gdGhlIC9kZXYgdHJlZToKKworICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL2F1ZGlvMAorICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL2NhMAorICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL2RlbXV4MAorICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL2R2cjAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9mcm9udGVuZDAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9uZXQwCisgICAgICogL2Rldi9kdmIvYWRhcHRlcjAvb3NkMAorICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL3ZpZGVvMAorCisgICBUaGUgIHByaW1hcnkgIGRldmljZSAgbm9kZXMgdGhhdCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAoYXQgdGhpcworICAgc3RhZ2UpIGZvciB0aGUgQXZlcm1lZGlhIERWQi1UIGFyZToKKworICAgICAqIC9kZXYvZHZiL2FkYXB0ZXIwL2R2cjAKKyAgICAgKiAvZGV2L2R2Yi9hZGFwdGVyMC9mcm9udGVuZDAKKworICAgVGhlIGR2cjAgZGV2aWNlIG5vZGUgaXMgdXNlZCB0byByZWFkIHRoZSBNUEVHMiBEYXRhIFN0cmVhbSBhbmQKKyAgIHRoZSBmcm9udGVuZDAgbm9kZSBpcyB1c2VkIHRvIHR1bmUgdGhlIGZyb250ZW5kIHR1bmVyIG1vZHVsZS4KKworICAgQXQgIHRoaXMgIHN0YWdlLCAgaXQgIGhhcyAgbm90ICBiZWVuICBhYmxlICB0byAgYXNjZXJ0YWluICB0aGUKKyAgIGZ1bmN0aW9uYWxpdHkgIG9mIHRoZSByZW1haW5pbmcgZGV2aWNlIG5vZGVzIGluIHJlc3BlY3Qgb2YgdGhlCisgICBBdmVybWVkaWEgIERWQlQuICBIb3dldmVyLCAgZnVsbCAgZnVuY3Rpb25hbGl0eSAgaW4gcmVzcGVjdCBvZgorICAgdHVuaW5nLCAgcmVjZWl2aW5nICBhbmQgIHN1cHBseWluZyAgdGhlICBNUEVHMiAgZGF0YSBzdHJlYW0gaXMKKyAgIHBvc3NpYmxlICB3aXRoIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIuCisgICBJdCAgbWF5IGJlIHBvc3NpYmxlIHRoYXQgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZQorICAgZnJvbSAgdGhlICBjYXJkICAoaS5lLiAgdmlld2luZyB0aGUgYWRkaXRpb25hbCBhbmFsb2d1ZSBpbnB1dHMKKyAgIHRoYXQgIHRoZSBjYXJkIHByZXNlbnRzKSwgYnV0IHRoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCB5ZXQuIElmCisgICBJIGdldCBhcm91bmQgdG8gdGhpcywgSSdsbCB1cGRhdGUgdGhlIGRvY3VtZW50IHdpdGggd2hhdGV2ZXIgSQorICAgZmluZC4KKworICAgVG8gIHBvd2VyICB1cCAgdGhlICBjYXJkLCAgbG9hZCAgdGhlICBmb2xsb3dpbmcgbW9kdWxlcyBpbiB0aGUKKyAgIGZvbGxvd2luZyBvcmRlcjoKKworICAgICAqIGluc21vZCBkdmItY29yZS5vCisgICAgICogbW9kcHJvYmUgYnR0di5vCisgICAgICogaW5zbW9kIGJ0ODc4Lm8KKyAgICAgKiBpbnNtb2QgZHZiLWJ0OHh4Lm8KKyAgICAgKiBpbnNtb2Qgc3A4ODd4Lm8KKworICAgSW5zZXJ0aW9uICBvZiAgdGhlc2UgIG1vZHVsZXMgIGludG8gIHRoZSAgcnVubmluZyAga2VybmVsIHdpbGwKKyAgIGFjdGl2YXRlIHRoZSBhcHByb3ByaWF0ZSBEVkIgZGV2aWNlIG5vZGVzLiBJdCBpcyB0aGVuIHBvc3NpYmxlCisgICB0byBzdGFydCBhY2Nlc3NpbmcgdGhlIGNhcmQgd2l0aCB1dGlsaXRpZXMgc3VjaCBhcyBzY2FuLCB0emFwLAorICAgZHZic3RyZWFtIGV0Yy4KKworICAgVGhlIGZyb250ZW5kIG1vZHVsZSBzcDg4N3gubywgcmVxdWlyZXMgYW4gZXh0ZXJuYWwgICBmaXJtd2FyZS4KKyAgIFBsZWFzZSB1c2UgIHRoZSAgY29tbWFuZCAiZ2V0X2R2Yl9maXJtd2FyZSBzcDg4N3giIHRvIGRvd25sb2FkCisgICBpdC4gVGhlbiBjb3B5IGl0IHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUuCisKK1JlY2VpdmluZyBEVkItVCBpbiBBdXN0cmFsaWEKKworICAgSSAgaGF2ZSAgbm8gIGV4cGVyaWVuY2Ugb2YgRFZCLVQgaW4gb3RoZXIgY291bnRyaWVzIG90aGVyIHRoYW4KKyAgIEF1c3RyYWxpYSwgIHNvICBJIHdpbGwgYXR0ZW1wdCB0byBleHBsYWluIGhvdyBpdCB3b3JrcyBoZXJlIGluCisgICBNZWxib3VybmUgIGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBEVkItVAorICAgY2FyZC4KKworICAgVGhlICBEaWdpdGFsICBCcm9hZGNhc3RpbmcgIEF1c3RyYWxpYSAgd2Vic2l0ZSBoYXMgYSBSZWNlcHRpb24KKyAgIGxvY2F0b3J0b29sIHdoaWNoIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRyYW5zcG9uZGVyIGNoYW5uZWxzCisgICBhbmQgIGZyZXF1ZW5jaWVzLiAgTXkgIGxvY2FsICB0cmFuc21pdHRlciAgaGFwcGVucyB0byBiZSBNb3VudAorICAgRGFuZGVub25nLgorCisgICBUaGUgZnJlcXVlbmNpZXMgYnJvYWRjYXN0IGJ5IE1vdW50IERhbmRlbm9uZyBhcmU6CisKKyAgIFRhYmxlIDEuIFRyYW5zcG9uZGVyIEZyZXF1ZW5jaWVzIE1vdW50IERhbmRlbm9uZywgVmljLCBBdXMuCisgICBCcm9hZGNhc3RlciBDaGFubmVsIEZyZXF1ZW5jeQorICAgQUJDICAgICAgICAgVkhGIDEyICAyMjYuNSBNSHoKKyAgIFRFTiAgICAgICAgIFZIRiAxMSAgMjE5LjUgTUh6CisgICBOSU5FICAgICAgICBWSEYgOCAgIDE5MS42MjUgTUh6CisgICBTRVZFTiAgICAgICBWSEYgNiAgIDE3Ny41IE1IegorICAgU0JTICAgICAgICAgVUhGIDI5ICA1MzYuNSBNSHoKKworICAgVGhlIFNjYW4gdXRpbGl0eSBoYXMgYSBzZXQgb2YgY29tcGlsZWQtaW4gZGVmYXVsdHMgZm9yIHZhcmlvdXMKKyAgIGNvdW50cmllcyBhbmQgcmVnaW9ucywgYnV0IGlmIHRoZXkgZG8gbm90IHN1aXQsIG9yIGlmIHlvdSBoYXZlCisgICBhIHByZS1jb21waWxlZCBzY2FuIGJpbmFyeSwgeW91IGNhbiBzcGVjaWZ5IGEgZGF0YSBmaWxlIG9uIHRoZQorICAgY29tbWFuZCAgbGluZSB3aGljaCBjb250YWlucyB0aGUgdHJhbnNwb25kZXIgZnJlcXVlbmNpZXMuIEhlcmUKKyAgIGlzIGEgc2FtcGxlIGZpbGUgZm9yIHRoZSBhYm92ZSBjaGFubmVsIHRyYW5zcG9uZGVyczoKKyMgRGF0YSBmaWxlIGZvciBEVkIgc2NhbiBwcm9ncmFtCisjCisjIEMgRnJlcXVlbmN5IFN5bWJvbFJhdGUgRkVDIFFBTQorIyBTIEZyZXF1ZW5jeSBQb2xhcmlzYXRpb24gU3ltYm9sUmF0ZSBGRUMKKyMgVCBGcmVxdWVuY3kgQmFuZHdpZHRoIEZFQyBGRUMyIFFBTSBNb2RlIEd1YXJkIEhpZXIKK1QgMjI2NTAwMDAwIDdNSHogMi8zIE5PTkUgUUFNNjQgOGsgMS84IE5PTkUKK1QgMTkxNjI1MDAwIDdNSHogMi8zIE5PTkUgUUFNNjQgOGsgMS84IE5PTkUKK1QgMjE5NTAwMDAwIDdNSHogMi8zIE5PTkUgUUFNNjQgOGsgMS84IE5PTkUKK1QgMTc3NTAwMDAwIDdNSHogMi8zIE5PTkUgUUFNNjQgOGsgMS84IE5PTkUKK1QgNTM2NTAwMDAwIDdNSHogMi8zIE5PTkUgUUFNNjQgOGsgMS84IE5PTkUKKworICAgVGhlICAgZGVmYXVsdHMgICBmb3IgICB0aGUgIHRyYW5zcG9uZGVyICBmcmVxdWVuY3kgIGFuZCAgb3RoZXIKKyAgIG1vZHVsYXRpb24gcGFyYW1ldGVycyB3ZXJlIG9idGFpbmVkIGZyb20gd3d3LmRiYS5vcmcuYXUuCisKKyAgIFdoZW4gIFNjYW4gIHJ1bnMsIGl0IHdpbGwgb3V0cHV0IGNoYW5uZWxzLmNvbmYgaW5mb3JtYXRpb24gZm9yCisgICBhbnkgIGNoYW5uZWwncyB0cmFuc3BvbmRlcnMgd2hpY2ggdGhlIGNhcmQncyBmcm9udGVuZCBjYW4gbG9jaworICAgb250by4gIChpLmUuICBhbnkgIHdob3NlICBzaWduYWwgIGlzICBzdHJvbmcgIGVub3VnaCAgYXQgIHlvdXIKKyAgIGFudGVubmEpLgorCisgICBIZXJlJ3MgbXkgY2hhbm5lbHMuY29uZiBmaWxlIGZvciBhbnlvbmUgd2hvJ3MgaW50ZXJlc3RlZDoKK0FCQyBIRFRWOjIyNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18zXzQ6UUFNXzY0Cis6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORToyMzA3OjA6NTYwCitBQkMgVFYgTWVsYm91cm5lOjIyNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18zXworNDpRQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUKKzA6NTYxCitBQkMgVFYgMjoyMjY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfM180OlFBTV82NAorOlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDo1NjIKK0FCQyBUViAzOjIyNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18zXzQ6UUFNXzY0Cis6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjU2MworQUJDIFRWIDQ6MjI2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzNfNDpRQU1fNjQKKzpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxMjo2NTA6NTY0CitBQkMgRGlHIFJhZGlvOjIyNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18zXzQ6UQorQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTowOjIzMTE6NTYKKzYKK1RFTiBEaWdpdGFsOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjE1OAorNQorVEVOIERpZ2l0YWwgMToyMTk1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzNfNDpGRUNfMV8yOlEKK0FNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfMTY6SElFUkFSQ0hZX05PTkU6NTEyOjY1MDoxCis1ODYKK1RFTiBEaWdpdGFsIDI6MjE5NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzFfMjpRCitBTV82NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxMjo2NTA6MQorNTg3CitURU4gRGlnaXRhbCAzOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UQorQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjEKKzU4OAorVEVOIERpZ2l0YWw6MjE5NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzFfMjpRQU0KK182NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxMjo2NTA6MTU4Cis5CitURU4gRGlnaXRhbCA0OjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UQorQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjEKKzU5MAorVEVOIERpZ2l0YWw6MjE5NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzFfMjpRQU0KK182NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxMjo2NTA6MTU5CisxCitURU4gSEQ6MjE5NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzFfMjpRQU1fNjQ6VAorUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxNDowOjE1OTIKK1RFTiBEaWdpdGFsOjIxOTUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6NjUwOjE1OQorMworTmluZSBEaWdpdGFsOjE5MTYyNTAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzI6UUEKK01fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTM6NjYwOjEwCis3MgorTmluZSBEaWdpdGFsIEhEOjE5MTYyNTAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfM180OkZFQ18xXzIKKzpRQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV8xNjpISUVSQVJDSFlfTk9ORTo1MTI6MDoxCiswNzMKK05pbmUgR3VpZGU6MTkxNjI1MDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18zXzQ6RkVDXzFfMjpRQU1fCis2NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzE2OkhJRVJBUkNIWV9OT05FOjUxNDo2NzA6MTA3NAorNyBEaWdpdGFsOjE3NzUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UUFNXzYKKzQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjc2OTo3NzA6MTMyOAorNyBEaWdpdGFsIDE6MTc3NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRQU0KK182NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6NzY5Ojc3MDoxMzI5Cis3IERpZ2l0YWwgMjoxNzc1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlFBTQorXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORTo3Njk6NzcwOjEzMzAKKzcgRGlnaXRhbCAzOjE3NzUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UUFNCitfNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjc2OTo3NzA6MTMzMQorNyBIRCBEaWdpdGFsOjE3NzUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UUEKK01fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjgzMzo4MzQ6MTMzCisyCis3IFByb2dyYW0gR3VpZGU6MTc3NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMworOlFBTV82NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6ODY1Ojg2NjoKKzEzMzQKK1NCUyBIRDo1MzY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlFBTV82NDpUCitSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORToxMDI6MTAzOjc4NAorU0JTIERJR0lUQUwgMTo1MzY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlEKK0FNXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORToxNjE6ODE6Nzg1CitTQlMgRElHSVRBTCAyOjUzNjUwMDAwMDpJTlZFUlNJT05fT0ZGOkJBTkRXSURUSF83X01IWjpGRUNfMl8zOkZFQ18yXzM6UQorQU1fNjQ6VFJBTlNNSVNTSU9OX01PREVfOEs6R1VBUkRfSU5URVJWQUxfMV84OkhJRVJBUkNIWV9OT05FOjE2Mjo4Mzo3ODYKK1NCUyBFUEc6NTM2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRQU1fNjQ6CitUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6MTYzOjg1Ojc4NworU0JTIFJBRElPIDE6NTM2NTAwMDAwOklOVkVSU0lPTl9PRkY6QkFORFdJRFRIXzdfTUhaOkZFQ18yXzM6RkVDXzJfMzpRQU0KK182NDpUUkFOU01JU1NJT05fTU9ERV84SzpHVUFSRF9JTlRFUlZBTF8xXzg6SElFUkFSQ0hZX05PTkU6MDoyMDE6Nzk4CitTQlMgUkFESU8gMjo1MzY1MDAwMDA6SU5WRVJTSU9OX09GRjpCQU5EV0lEVEhfN19NSFo6RkVDXzJfMzpGRUNfMl8zOlFBTQorXzY0OlRSQU5TTUlTU0lPTl9NT0RFXzhLOkdVQVJEX0lOVEVSVkFMXzFfODpISUVSQVJDSFlfTk9ORTowOjIwMjo3OTkKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK0tub3duIExpbWl0YXRpb25zCisKKyAgIEF0ICBwcmVzZW50ICBJIGNhbiBzYXkgd2l0aCBjb25maWRlbmNlIHRoYXQgdGhlIGZyb250ZW5kIHR1bmVzCisgICB2aWEgL2Rldi9kdmIvYWRhcHRlcnt4fS9mcm9udGVuZDAgYW5kIHN1cHBsaWVzIGFuIE1QRUcyIHN0cmVhbQorICAgdmlhICAgL2Rldi9kdmIvYWRhcHRlcnt4fS9kdnIwLiAgIEkgICBoYXZlICAgbm90ICAgdGVzdGVkICB0aGUKKyAgIGZ1bmN0aW9uYWxpdHkgIG9mIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBjYXJkIHlldC4gSSB3aWxsIGRvIHNvCisgICBvdmVyIHRpbWUgYW5kIHVwZGF0ZSB0aGlzIGRvY3VtZW50LgorCisgICBUaGVyZSAgYXJlIHNvbWUgbGltaXRhdGlvbnMgaW4gdGhlIGkyYyBsYXllciBkdWUgdG8gYSByZXR1cm5lZAorICAgZXJyb3IgbWVzc2FnZSBpbmNvbnNpc3RlbmN5LiBBbHRob3VnaCB0aGlzIGdlbmVyYXRlcyBlcnJvcnMgaW4KKyAgIGRtZXNnICBhbmQgIHRoZSAgc3lzdGVtIGxvZ3MsIGl0IGRvZXMgbm90IGFwcGVhciB0byBhZmZlY3QgdGhlCisgICBhYmlsaXR5IG9mIHRoZSBmcm9udGVuZCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitGdXJ0aGVyIFVwZGF0ZQorCisgICBkdmJzdHJlYW0gIGFuZCAgVmlkZW9MQU4gIENsaWVudCBvbiB3aW5kb3dzIHdvcmtzIGEgdHJlYXQgd2l0aAorICAgRFZCLCAgaW4gIGZhY3QgIHRoaXMgIGlzICBjdXJyZW50bHkgIHNlcnZpbmcgYXMgbXkgbWFpbiB3YXkgb2YKKyAgIHZpZXdpbmcgIERWQi1UICBhdCAgdGhlICBtb21lbnQuICBBZGRpdGlvbmFsbHksIFZMQyBpcyBoYXBwaWx5CisgICBkZWNvZGluZyAgSERUViAgc2lnbmFscywgIGFsdGhvdWdoICB0aGUgUEMgaXMgZHJvcHBpbmcgdGhlIG9kZAorICAgZnJhbWUgaGVyZSBhbmQgdGhlcmUgLSBJIGFzc3VtZSBkdWUgdG8gcHJvY2Vzc2luZyBjYXBhYmlsaXR5IC0KKyAgIGFzIGFsbCB0aGUgZGVjb2RpbmcgaXMgYmVpbmcgZG9uZSB1bmRlciB3aW5kb3dzIGluIHNvZnR3YXJlLgorCisgICBNYW55ICB0aGFua3MgdG8gTmlnZWwgUGVhcnNvbiBmb3IgdGhlIHVwZGF0ZXMgdG8gdGhpcyBkb2N1bWVudAorICAgc2luY2UgdGhlIHJlY2VudCByZXZpc2lvbiBvZiB0aGUgZHJpdmVyLgorCisgICBKYW51YXJ5IDI5dGggMjAwNApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2FjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQKQEAgLTAsMCArMSw5MCBAQAorSG93IHRvIGdldCB0aGUgTmVidWxhLCBQQ1RWIGFuZCBUd2luaGFuIERTVCBjYXJkcyB3b3JraW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjbGFzcyBvZiBjYXJkcyBoYXMgYSBidDg3OGEgYXMgdGhlIFBDSSBpbnRlcmZhY2UsIGFuZAorcmVxdWlyZSB0aGUgYnR0diBkcml2ZXIuCisKK1BsZWFzZSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXJuaW5nIGFib3V0IHRoZSBidHR2IG1vZHVsZQorb3B0aW9ucyBiZWxvdyBmb3IgdGhlIERTVCBjYXJkLgorCisxKSBHZW5lcmFsIGluZm9ybWF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlc2UgZHJpdmVycyByZXF1aXJlIHRoZSBidHR2IGRyaXZlciB0byBwcm92aWRlIHRoZSBtZWFucyB0byBhY2Nlc3MKK3RoZSBpMmMgYnVzIGFuZCB0aGUgZ3BpbyBwaW5zIG9mIHRoZSBidDh4eCBjaGlwc2V0LgorCitCZWNhdXNlIG9mIHRoaXMsIHlvdSBuZWVkIHRvIGVuYWJsZQorIkRldmljZSBkcml2ZXJzIiA9PiAiTXVsdGltZWRpYSBkZXZpY2VzIgorICA9PiAiVmlkZW8gRm9yIExpbnV4IiA9PiAiQlQ4NDggVmlkZW8gRm9yIExpbnV4IgorCisyKSBMb2FkaW5nIE1vZHVsZXMKKz09PT09PT09PT09PT09PT09PQorCitJbiBnZW5lcmFsIHlvdSBuZWVkIHRvIGxvYWQgdGhlIGJ0dHYgZHJpdmVyLCB3aGljaCB3aWxsIGhhbmRsZSB0aGUgZ3BpbyBhbmQKK2kyYyBjb21tdW5pY2F0aW9uIGZvciB1cy4gTmV4dCB5b3UgbmVlZCB0aGUgY29tbW9uIGR2Yi1idDh4eCBkZXZpY2UgZHJpdmVyCithbmQgb25lIGZyb250ZW5kIGRyaXZlci4KKworVGhlIGJ0dHYgZHJpdmVyIHdpbGwgSEFORyBZT1VSIFNZU1RFTSBJRiBZT1UgRE8gTk9UIFNQRUNJRlkgVEhFIENPUlJFQ1QgCitDQVJEIElEIQorCisoSWYgeW91IGRvbid0IGdldCB5b3VyIGNhcmQgcnVubmluZyBhbmQgeW91IHN1c3BlY3QgdGhhdCB0aGUgY2FyZCBpZCB5b3UncmUKK3VzaW5nIGlzIHdyb25nLCBoYXZlIGEgbG9vayBhdCAiYnR0di1jYXJkcy5jIiBmb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGNhcmQKK2lkcy4pCisKK1BheSBhdHRlbnRpb24gdG8gZmFpbHVyZXMgd2hlbiB5b3UgbG9hZCB0aGUgZnJvbnRlbmQgZHJpdmVycworKGUuZy4gZG1lc2csIC92YXIvbG9nL21lc3NhZ2VzKS4KKworM2EpIE5lYnVsYSAvIFBpbm5hY2xlIFBDVFYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICQgbW9kcHJvYmUgYnR0diBpMmNfaHc9MSBjYXJkPTB4NjgKKyAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4CisgICAKK0ZvciBOZWJ1bGEgY2FyZHMgdXNlIHRoZSAibnh0NjAwMCIgZnJvbnRlbmQgZHJpdmVyOgorICAgJCBtb2Rwcm9iZSBueHQ2MDAwCisKK0ZvciBQaW5uYWNsZSBQQ1RWIGNhcmRzIHVzZSB0aGUgImN4MjQxMTAiIGZyb250ZW5kIGRyaXZlcjoKKyAgICQgbW9kcHJvYmUgY3gyNDExMAorCiszYikgVHdpbkhhbgorLS0tLS0tLS0tLS0KKworICAgJCBtb2Rwcm9iZSBidHR2IGkyY19odz0xIGNhcmQ9MHg3MQorICAgJCBtb2Rwcm9iZSBkdmItYnQ4eHgKKyAgICQgbW9kcHJvYmUgZHN0CisKK1RoZSB2YWx1ZSAweDcxIHdpbGwgb3ZlcnJpZGUgdGhlIFBDSSB0eXBlIGRldGVjdGlvbiBmb3IgZHZiLWJ0OHh4LCB3aGljaCAKK2lzIG5lY2Vzc2FyeSBmb3IgVHdpbkhhbiBjYXJkcy4jCisKK0lmIHlvdSdyZSBoYXZpbmcgYW4gb2xkZXIgY2FyZCAoYmx1ZSBjb2xvciBjaXJjdWl0KSBhbmQgY2FyZD0weDcxIGxvY2tzIHlvdXIKK21hY2hpbmUsIHRyeSB1c2luZyAweDY4LCB0b28uIElmIHRoYXQgZG9lcyBub3Qgd29yaywgYXNrIG9uIHRoZSBEVkIgbWFpbGluZyBsaXN0LgorCitUaGUgRFNUIG1vZHVsZSB0YWtlcyBhIGNvdXBsZSBvZiB1c2VmdWwgcGFyYW1ldGVycywgaW4gY2FzZSB0aGUKK2RzdCBkcml2ZXJzIGZhaWxzIHRvIGRldGVjdCB5b3VyIHR5cGUgb2YgY2FyZCBjb3JyZWN0bHkuCisKK2RzdF90eXBlIHRha2VzIHZhbHVlcyAwIChzYXRlbGxpdGUpLCAxICh0ZXJyZXN0aWFsIFRWKSwgMiAoY2FibGUpLgorCitkc3RfdHlwZV9mbGFncyB0YWtlcyBiaXQgY29tYmluZWQgdmFsdWVzOgorMSA9IG5ldyB0dW5lciB0eXBlIHBhY2tldHMuIFlvdSBjYW4gdXNlIHRoaXMgaWYgeW91ciBjYXJkIGlzIGRldGVjdGVkCisgICAgYW5kIHlvdSBoYXZlIGRlYnVnIGFuZCB5b3UgY29udGludWFsbHkgc2VlIHRoZSB0dW5lciBwYWNrZXRzIG5vdAorICAgIHdvcmtpbmcgKG1ha2Ugc3VyZSBub3QgYSBiYXNpYyBwcm9ibGVtIGxpa2UgZGlzaCBhbGlnbm1lbnQgZXRjLikKKworMiA9IFRTIDIwNC4gSWYgeW91ciBjYXJkIHR1bmVzIE9LLCBidXQgdGhlIHBpY3R1cmUgaXMgdGVycmlibGUsIHNlZW1pbmdseQorICAgIGJyZWFraW5nIHVwIGluIG9uZSBoYWxmIGNvbnRpbnVhbGx5LCBhbmQgY3JjIGZhaWxzIGEgbG90LCB0aGVuCisgICAgdGhpcyBpcyB3b3J0aCBhIHRyeSAob3IgdHJ5aW5nIHRvIHR1cm4gb2ZmKQorCis0ID0gaGFzIHN5bWRpdi4gU29tZSBjYXJkcywgbW9zdGx5IHdpdGhvdXQgbmV3IHR1bmVyIHBhY2tldHMsIHJlcXVpcmUKKyAgICBhIHN5bWJvbCBkaXZpc2lvbiBhbGdvcml0aG0uIERvZXNuJ3QgYXBwbHkgdG8gdGVycmVzdGlhbCBUVi4KKworWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB2YWx1ZSB0byBoYXZlIHRoZSBhdXRvZGV0ZWN0ZWQgdmFsdWVzIHR1cm5lZCBvZmYKKyhlLmcuIDApLiBUaGUgYXV0b2RlY3RlZCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnl0aGUgY2FyZHMgJ3Jlc3BvbnNlCitzdHJpbmcnIHdoaWNoIHlvdSBjYW4gc2VlIGluIHlvdXIgbG9ncyBlLmcuCisKK2RzdF9jaGVja19jaTogcmVjb2duaXplIERTVC1NT1QKKworb3IgCisKK2RzdF9jaGVja19jaTogdW5hYmxlIHRvIHJlY29nbml6ZSBEU1RYQ0kgb3IgU1RYQ0kKKworLS0KK0F1dGhvcnM6IFJpY2hhcmQgV2Fsa2VyLCBKYW1pZSBIb25hbiwgTWljaGFlbCBIdW5vbGQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2NhcmRzLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2NhcmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmRjNGVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvY2FyZHMudHh0CkBAIC0wLDAgKzEsODUgQEAKK0hhcmR3YXJlIHN1cHBvcnRlZCBieSB0aGUgbGludXh0di5vcmcgRFZCIGRyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBHZW5lcmFsbHksIHRoZSBEVkIgaGFyZHdhcmUgbWFudWZhY3R1cmVycyBmcmVxdWVudGx5IGNoYW5nZSB0aGUKKyAgZnJvbnRlbmRzIChpLmUuIHR1bmVyIC8gZGVtb2R1bGF0b3IgdW5pdHMpIHVzZWQsIHVzdWFsbHkgd2l0aG91dAorICBjaGFuZ2luZyB0aGUgcHJvZHVjdCBuYW1lLCByZXZpc2lvbiBudW1iZXIgb3Igc3BlY3MuIFNvbWUgY2FyZHMKKyAgYXJlIGFsc28gYXZhaWxhYmxlIGluIHZlcnNpb25zIHdpdGggZGlmZmVyZW50IGZyb250ZW5kcyBmb3IKKyAgRFZCLVMvRFZCLUMvRFZCLVQuIFRodXMgdGhlIGZyb250ZW5kIGRyaXZlcnMgYXJlIGxpc3RlZCBzZXBlcmF0ZWx5LgorCisgIE5vdGUgMTogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgZXZlcnkgZnJvbnRlbmQgZHJpdmVyIHdvcmtzCisgIG91dCBvZiB0aGUgYm94IHdpdGggZXZlcnkgY2FyZCwgYmVjYXVzZSBvZiBkaWZmZXJlbnQgd2lyaW5nLgorCisgIE5vdGUgMjogVGhlIGRlbW9kdWxhdG9yIGNoaXBzIGNhbiBiZSB1c2VkIHdpdGggYSB2YXJpZXR5IG9mCisgIHR1bmVyL1BMTCBjaGlwcywgYW5kIG5vdCBhbGwgY29tYmluYXRpb25zIGFyZSBzdXBwb3J0ZWQuIE9mdGVuCisgIHRoZSBkZW1vZHVsYXRvciBhbmQgdHVuZXIvUExMIGNoaXAgYXJlIGluc2lkZSBhIG1ldGFsIGJveCBmb3IKKyAgc2hpZWxkaW5nLCBhbmQgdGhlIHdob2xlIG1ldGFsIGJveCBoYXMgaXRzIG93biBwYXJ0IG51bWJlci4KKworCitvIEZyb250ZW5kcyBkcml2ZXJzOiAKKyAgLSBkdmJfZHVtbXlfZmU6IGZvciB0ZXN0aW5nLi4uCisgIERWQi1TOgorICAgLSB2ZXMxeDkzCQk6IEFscHMgQlNSVjIgKHZlczE4OTMgZGVtb2R1bGF0b3IpIGFuZCBkYm94MiAodmVzMTk5MykKKyAgIC0gY3gyNDExMAkJOiBDb25leGFudCBITTEyMjEvSE0xODExIChjeDI0MTEwIG9yIGN4MjQxMDYgZGVtb2QsIGN4MjQxMDggUExMKQorICAgLSBncnVuZGlnXzI5NTA0LTQ5MQk6IEdydW5kaWcgMjk1MDQtNDkxIChQaGlsaXBzIFREQTgwODMgZGVtb2R1bGF0b3IpLCB0c2E1NTIyIFBMTAorICAgLSBtdDMxMgkJOiBaYXJsaW5rIG10MzEyIG9yIE1pdGVsIHZwMzEwIGRlbW9kdWxhdG9yLCBzbDE5MzUgb3IgdHNhNTA1OSBQTEwKKyAgIC0gc3R2MDI5OQkJOiBBbHBzIEJTUlU2ICh0c2E1MDU5IFBMTCksIExHIFREUUItUzAweCAodHNhNTA1OSBQTEwpLAorICAgCQkJICBMRyBURFFGLVMwMDFGIChzbDE5MzUgUExMKSwgUGhpbGlwcyBTVTEyNzggKHR1YTYxMDAgUExMKSwgCisJCQkgIFBoaWxpcHMgU1UxMjc4U0ggKHRzYTUwNTkgUExMKSwgU2Ftc3VuZyBUQk1VMjQxMTJJTUIKKyAgRFZCLUM6CisgICAtIHZlczE4MjAJCTogdmFyaW91cyAodmVzMTgyMCBkZW1vZHVsYXRvciwgc3A1NjU5YyBvciBzcFhYWFggUExMKQorICAgLSBhdDc2YzY1MQkJOiBBdG1lbCBBVDc2YzY1MShCKSB3aXRoIERBVDcwMjEgUExMCisgIERWQi1UOgorICAgLSBhbHBzX3RkbGI3CQk6IEFscHMgVERMQjcgKHNwODg3MCBkZW1vZHVsYXRvciwgc3A1NjU5IFBMTCkKKyAgIC0gYWxwc190ZG1iNwkJOiBBbHBzIFRETUI3IChjeDIyNzAwIGRlbW9kdWxhdG9yKQorICAgLSBncnVuZGlnXzI5NTA0LTQwMQk6IEdydW5kaWcgMjk1MDQtNDAxIChMU0kgTDY0NzgxIGRlbW9kdWxhdG9yKSwgdHNhNTA2MCBQTEwKKyAgIC0gdGRhMTAwNHgJCTogUGhpbGlwcyB0ZGExMDA0NWggKHRkMTM0NCBvciB0ZG0xMzE2bCBQTEwpCisgICAtIG54dDYwMDAgCQk6IEFscHMgVERNRTcgKE1JVEVMIFNQNTY1OSBQTEwpLCBBbHBzIFRERUQ0IChUSSBBTFA1MTAgUExMKSwKKyAgICAgICAgICAgICAgIAkJICBDb210ZWNoIERWQlQtNmswNyAoU1A1NzMwIFBMTCkKKyAgICAgICAgICAgICAgIAkJICAoTnh0V2F2ZSBDb21tdW5pY2F0aW9ucyBOWFQ2MDAwIGRlbW9kdWxhdG9yKQorICAgLSBzcDg4N3gJCTogTWljcm90dW5lIDcyMDJECisgICAtIGRpYjMwMDBtYgk6IERpQmNvbSAzMDAwLU1CIGRlbW9kdWxhdG9yCisgIERWQi1TL0MvVDoKKyAgIC0gZHN0CQk6IFR3aW5IYW4gRFNUIEZyb250ZW5kCisKKworbyBDYXJkcyBiYXNlZCBvbiB0aGUgUGhpbGxpcHMgc2FhNzE0NiBtdWx0aW1lZGlhIFBDSSBicmlkZ2UgY2hpcDoKKyAgLSBUSSBBVjcxMTAgYmFzZWQgY2FyZHMgKGkuZS4gd2l0aCBoYXJkd2FyZSBNUEVHIGRlY29kZXIpOgorICAgIC0gU2llbWVucy9UZWNobm90cmVuZC9IYXVwcGF1Z2UgUENJIERWQiBjYXJkIHJldmlzaW9uIDEuMSwgMS4zLCAxLjUsIDEuNiwgMi4xCisgICAgICAoYWthIEhhdXBwYXVnZSBOZXh1cykKKyAgLSAiYnVkZ2V0IiBjYXJkcyAoaS5lLiB3aXRob3V0IGhhcmR3YXJlIE1QRUcgZGVjb2Rlcik6CisgICAgLSBUZWNobm90cmVuZCBCdWRnZXQgLyBIYXVwcGF1Z2UgV2luVFYtTm92YSBQQ0kgQ2FyZHMKKyAgICAtIFNBVEVMQ08gTXVsdGltZWRpYSBQQ0kKKyAgICAtIEtOQzEgRFZCLVMsIFR5cGhvb24gRFZCLVMsIFRlcnJhdGVjIENpbmVyZ3kgMTIwMCBEVkItUyAobm8gQ0kgc3VwcG9ydCkKKyAgICAtIFR5cGhvb24gRFZCLVMgYnVkZ2V0CisgICAgLSBGdWppdHN1LVNpZW1lbnMgQWN0aXZ5IERWQi1TIGJ1ZGdldCBjYXJkCisKK28gQ2FyZHMgYmFzZWQgb24gdGhlIEIyQzIgSW5jLiBGbGV4Q29wSUkvSUliL0lJSToKKyAgLSBUZWNobmlzYXQgU2t5U3RhcjIgUENJIERWQiBjYXJkIHJldmlzaW9uIDIuMywgMi42QiwgMi42QworCitvIENhcmRzIGJhc2VkIG9uIHRoZSBDb25leGFudCBCdDh4eCBQQ0kgYnJpZGdlOgorICAtIFBpbm5hY2xlIFBDVFYgU2F0IERWQgorICAtIE5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYKKyAgLSBUd2luSGFuIERTVAorICAtIEF2ZXJtZWRpYSBEVkItVAorCitvIFRlY2hub3RyZW5kIC8gSGF1cHBhdWdlIERWQiBVU0IgZGV2aWNlczoKKyAgLSBOb3ZhIFVTQgorICAtIERFQyAyMDAwLVQsIDMwMDAtUywgMjU0MC1UCisKK28gRGlCY29tIERWQi1UIFVTQiBiYXNlZCBkZXZpY2VzOgorICAtIFR3aW5oYW4gVmlzaW9uUGx1cyBWaXNpb25EVFYgVVNCLVRlciBEVkItVCBEZXZpY2UKKyAgLSBIQU1BIERWQi1UIFVTQiBkZXZpY2UKKyAgLSBDVFMgUG9ydGFibGUgKENoaW5lc2UgVGVsZXZpc2lvbiBTeXN0ZW0pCisgIC0gS1dvcmxkIFYtU3RyZWFtIFhQRVJUIERUViBEVkItVCBVU0IKKyAgLSBKZXRXYXkgRFRWIERWQi1UIFVTQgorICAtIEFEU1RlY2ggSW5zdGFudCBUViBEVkItVCBVU0IKKyAgLSBVbHRpbWEgRWxlY3Ryb25pYy9BcnRlYyBUMSBVU0IgVFZCT1ggKEFOMjEzNSBhbmQgQU4yMjM1KQorICAtIENvbXBybyBWaWRlb21hdGUgRFZCLVUyMDAwIC0gRFZCLVQgVVNCCisgIC0gR3JhbmR0ZWMgVVNCIERWQi1UCisgIC0gQXZlcm1lZGlhIEF2ZXJUViBEVkJUIFVTQgorICAtIERpQmNvbSBVU0IgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKKyAgLSBZYWt1bW8gRFZCLVQgbW9iaWxlIFVTQjIuMAorICAtIERpQmNvbSBVU0IyLjAgRFZCLVQgcmVmZXJlbmNlIGRldmljZSAobm9uLXB1YmxpYykKKworbyBFeHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIGFuYWxvZyBtb2R1bGUgb2YgdGhlIFNpZW1lbnMgRFZCLUMgUENJIGNhcmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2NvbnRyaWJ1dG9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDVjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jb250cmlidXRvcnMudHh0CkBAIC0wLDAgKzEsNzkgQEAKK1RoYW5rcyBnbyB0byB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3IgcGF0Y2hlcyBhbmQgY29udHJpYnV0aW9uczoKKworTWljaGFlbCBIdW5vbGQgPG0uaHVub2xkQGdteC5kZT4KKyAgZm9yIHRoZSBpbml0aWFsIHNhYTcxNDYgZHJpdmVyIGFuZCBpdCdzIHJlY2VudCBvdmVyaGF1bAorCitDaHJpc3RpYW4gVGhlaXNzCisgIGZvciBoaXMgd29yayBvbiB0aGUgaW5pdGlhbCBMaW51eCBEVkIgZHJpdmVyCisKK01hcmN1cyBNZXR6bGVyIDxtb2NtQG1ldHpsZXJicm9zLmRlPgorUmFscGggTWV0emxlciA8cmprbUBtZXR6bGVyYnJvcy5kZT4KKyAgZm9yIHRoZWlyIGNvbnRpbnVpbmcgd29yayBvbiB0aGUgRFZCIGRyaXZlcgorCitNaWNoYWVsIEhvbHp0IDxranVAZGViaWFuLm9yZz4KKyAgZm9yIGhpcyBjb250cmlidXRpb25zIHRvIHRoZSBkdmItbmV0IGRyaXZlcgorCitEaWVnbyBQaWNjaWFuaSA8ZC5waWNjaWFuaUBub3ZhY29tcC5pdD4KKyAgZm9yIEN5YmVyTG9naW4gZm9yIExpbnV4IHdoaWNoIGFsbG93cyBsb2dnaW5nIG9udG8gRU9OCisgIChpbiBjYXNlIHlvdSBhcmUgd29uZGVyaW5nIHdoZXJlIEN5YmVyTG9naW4gaXMsIEVPTiBjaGFuZ2VkIGl0cyBsb2dpbiAKKyAgcHJvY2VkdXJlIGFuZCBDeWJlckxvZ2luIGlzIG5vIGxvbmdlciB1c2VkLikKKworTWFydGluIFNjaGFsbGVyIDxtYXJ0aW5Ac211cmYuZnJhbmtlbi5kZT4KKyAgZm9yIHBhdGNoaW5nIHRoZSBjYWJsZSBjYXJkIGRlY29kZXIgZHJpdmVyCisKK0tsYXVzIFNjaG1pZGluZ2VyIDxLbGF1cy5TY2htaWRpbmdlckBjYWRzb2Z0LmRlPgorICBmb3IgdmFyaW91cyBmaXhlcyByZWdhcmRpbmcgdHVuaW5nLCBPU0QgYW5kIENJIHN0dWZmIGFuZCBoaXMgd29yayBvbiBWRFIKKworU3RldmUgQnJvd24gPHNicm93bkBjb3J0bGFuZC5jb20+CisgIGZvciBoaXMgQUZDIGtlcm5lbCB0aHJlYWQKKworQ2hyaXN0b3BoIE1hcnRpbiA8bWFydGluQHVuaS1tYWluei5kZT4KKyAgZm9yIGhpcyBMSVJDIGluZnJhcmVkIGhhbmRsZXIKKworQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAbGludXh0di5vcmc+CitEZW5uaXMgTm9lcm1hbm4gPGRlbm5pcy5ub2VybWFubkBub2VybmV0LmRlPgorRmVsaXggRG9ta2UgPHRtYmluY0BlbGl0ZWR2Yi5uZXQ+CitGbG9yaWFuIFNjaGlybWVyIDxqb2x0QHR1eGJveC5vcmc+CitSb25ueSBTdHJ1dHogPDNkZXNAZWxpdGVkdmIuZGU+CitXb2xmcmFtIEpvb3N0IDxkYm94MkBmcm9rYXNjaHdlaS5kZT4KKy4uLmFuZCBhbGwgdGhlIG90aGVyIGRib3gyIHBlb3BsZQorICBmb3IgbWFueSBidWdmaXhlcyBpbiB0aGUgZ2VuZXJpYyBEVkIgQ29yZSwgZnJvbnRlbmQgZHJpdmVycyBhbmQKKyAgdGhlaXIgd29yayBvbiB0aGUgZGJveDIgcG9ydCBvZiB0aGUgRFZCIGRyaXZlcgorCitPbGl2ZXIgRW5kcmlzcyA8by5lbmRyaXNzQGdteC5kZT4KKyAgZm9yIG1hbnkgYnVnZml4ZXMKKworQW5kcmV3IGRlIFF1aW5jZXkgPGFkcV9kdmJAbGlkc2tpYWxmLm5ldD4KKyAgZm9yIHRoZSB0ZGExMDA0eCBmcm9udGVuZCBkcml2ZXIsIGFuZCB2YXJpb3VzIGJ1Z2ZpeGVzCisKK1BldGVyIFNjaGlsZG1hbm4gPHBldGVyLnNjaGlsZG1hbm5Ad2ViLmRlPgorICBmb3IgdGhlIGRyaXZlciBmb3IgdGhlIFRlY2huaXNhdCBTa3lTdGFyMiBQQ0kgRFZCIGNhcmQKKworVmFkaW0gQ2F0YW5hIDxza3lzdGFyQG1vbGRvdmEuY2M+CitSb2JlcnRvIFJhZ3VzYSA8ci5yYWd1c2FAbGliZXJvLml0PgorQXVndXN0byBDYXJkb3NvIDxhdWd1c3RvQGNhcmhpbC5uZXQ+CisgIGZvciBhbGwgdGhlIHdvcmsgZm9yIHRoZSBGbGV4Q29wSUkgY2hpcHNldCBieSBCMkMyLEluYy4KKworRGF2b3IgRW1hcmQgPGVtYXJkQHNvZnRob21lLm5ldD4KKyAgZm9yIGhpcyB3b3JrIG9uIHRoZSBidWRnZXQgZHJpdmVycywgdGhlIGRlbXV4IGNvZGUsCisgIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHByb2JsZW1zLCAuLi4KKyAgCitIYW5zLUZyaWVkZXIgVm9ndCA8aGZ2b2d0QGFyY29yLmRlPgorICBmb3IgaGlzIHdvcmsgb24gY2FsY3VsYXRpbmcgYW5kIGNoZWNraW5nIHRoZSBjcmMncyBmb3IgdGhlCisgIFRlY2hub1RyZW5kL0hhdXBwYXVnZSBERUMgZHJpdmVyIGZpcm13YXJlCisKK01pY2hhZWwgRHJlaGVyIDxtaWNoYWVsQDVkb3QxLmRlPgorQW5kcmVhcyAncmFuZHknIFdlaW5iZXJnZXIKKyAgZm9yIHRoZSBzdXBwb3J0IG9mIHRoZSBGdWppdHN1LVNpZW1lbnMgQWN0aXZ5IGJ1ZGdldCBEVkItUworCitLZW5uZXRoIEFhZmz4eSA8a2UtYWFAZnJpc3VyZi5ubz4KKyAgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBUeXBob29uIERWQi1TIGJ1ZGdldCBjYXJkCisKK0VybnN0IFBlaW5saWNoIDxlLnBlaW5saWNoQGlub2RlLmF0PgorICBmb3IgdHVuaW5nL0RpU0VxQyBzdXBwb3J0IGZvciB0aGUgREVDIDMwMDAtcworCitQZXRlciBCZXV0bmVyIDxwLmJldXRuZXJAZ214Lm5ldD4KKyAgZm9yIHRoZSBJUiBjb2RlIGZvciB0aGUgdHR1c2ItZGVjIGRyaXZlcgorCisoSWYgeW91IHRoaW5rIHlvdSBzaG91bGQgYmUgaW4gdGhpcyBsaXN0LCBidXQgeW91IGFyZSBub3QsIGRyb3AgYQorIGxpbmUgdG8gdGhlIERWQiBtYWlsaW5nIGxpc3QpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9mYXEudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY1MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dApAQCAtMCwwICsxLDE2MCBAQAorU29tZSB2ZXJ5IGZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIGFib3V0IGxpbnV4dHYtZHZiCisKKzEuIFRoZSBzaWduYWwgc2VlbXMgdG8gZGllIGEgZmV3IHNlY29uZHMgYWZ0ZXIgdHVuaW5nLgorCisJSXQncyBub3QgYSBidWcsIGl0J3MgYSBmZWF0dXJlLiBCZWNhdXNlIHRoZSBmcm9udGVuZHMgaGF2ZQorCXNpZ25pZmljYW50IHBvd2VyIHJlcXVpcmVtZW50cyAoYW5kIGhlbmNlIGdldCB2ZXJ5IGhvdCksIHRoZXkKKwlhcmUgcG93ZXJlZCBkb3duIGlmIHRoZXkgYXJlIHVudXNlZCAoaS5lLiBpZiB0aGUgZnJvbnRlbmQgZGV2aWNlCisJaXMgY2xvc2VkKS4gVGhlIGR2Yi1jb3JlLm8gbW9kdWxlIHBhcmFtdGVyICJkdmJfc2h1dGRvd25fdGltZW91dCIKKwlhbGxvdyB5b3UgdG8gY2hhbmdlIHRoZSB0aW1lb3V0IChkZWZhdWx0IDUgc2Vjb25kcykuIFNldHRpbmcgdGhlCisJdGltZW91dCB0byAwIGRpc2FibGVzIHRoZSB0aW1lb3V0IGZlYXR1cmUuCisKKzIuIEhvdyBjYW4gSSB3YXRjaCBUVj8KKworCVRoZSBkcml2ZXIgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHNvbWUgc2ltcGxlIHV0aWxpdGllcyB3aGljaAorCWFyZSBtYWlubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIHRvIGRlbW9uc3RyYXRlIGhvdyB0aGUKKwlEVkIgQVBJIHdvcmtzLgorCisJRGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGhhdmUgYSBEVkItUywgRFZCLUMgb3IgRFZCLVQgY2FyZCwgdXNlCisJYXBwcy9zemFwL3N6YXAsIGN6YXAgb3IgdHphcC4gWW91IG11c3Qgc3VwcGx5IGEgY2hhbm5lbCBsaXN0CisJaW4gfi8uW3NjdF16YXAvY2hhbm5lbHMuY29uZi4gSWYgeW91IGFyZSBsdWNreSB5b3UgY2FuIGp1c3QgY29weQorCW9uZSBvZiB0aGUgc3VwcGxpZWQgY2hhbm5lbCBsaXN0cywgb3IgeW91IGNhbiBjcmVhdGUgYSBuZXcgb25lCisJYnkgcnVubmluZyBhcHBzL3NjYW4vc2Nhbi4gSWYgeW91IHJ1biBzY2FuIG9uIGFuIHVua25vd24gbmV0d29yaworCXlvdSBtaWdodCBoYXZlIHRvIHN1cHBseSBzb21lIHN0YXJ0IGRhdGEgaW4gYXBwcy9zY2FuL2luaXRpYWwuaC4KKworCUlmIHlvdSBoYXZlIGEgY2FyZCB3aXRoIGEgYnVpbHQtaW4gaGFyZHdhcmUgTVBFRy1kZWNvZGVyIHRoZQorCWRyaXZlcnMgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlICgvZGV2L3Y0bC92aWRlbzApIHdoaWNoCisJeW91IGNhbiB1c2UgdG8gd2F0Y2ggVFYgd2l0aCBhbnkgdjRsIGFwcGxpY2F0aW9uLiB4YXd0diBpcyBrbm93bgorCXRvIHdvcmsuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGNoYW5nZSBjaGFubmVscyB3aXRoIHhhd3R2LCB5b3UKKwloYXZlIHRvIHphcCB1c2luZyBbc2N0XXphcC4gSWYgeW91IHdhbnQgYSBuaWNlIGFwcGxpY2F0aW9uIGZvcgorCVRWIHdhdGNoaW5nIGFuZCByZWNvcmQvcGxheWJhY2ssIGhhdmUgYSBsb29rIGF0IFZEUi4KKworCUlmIHlvdXIgY2FyZCBkb2VzIG5vdCBoYXZlIGEgaGFyZHdhcmUgTVBFRyBkZWNvZGVyIHlvdSBuZWVkCisJYSBzb2Z0d2FyZSBNUEVHIGRlY29kZXIuIE1wbGF5ZXIgb3IgeGluZSBhcmUga25vd24gdG8gd29yay4KKwlOZXdzZmxhc2g6IE15dGhUViBhbHNvIGhhcyBEVkIgc3VwcG9ydCBub3cuCisJTm90ZTogT25seSB2ZXJ5IHJlY2VudCB2ZXJzaW9ucyBvZiBNcGxheWVyIGFuZCB4aW5lIGNhbiBkZWNvZGUuCisJTVBFRzIgdHJhbnNwb3J0IHN0cmVhbXMgKFRTKSBkaXJlY3RseS4gVGhlbiwgcnVuCisJJ1tzY3RdemFwIGNoYW5uZWxuYW1lIC1yJyBpbiBvbmUgeHRlcm0sIGFuZCBrZWVwIGl0IHJ1bm5pbmcsCisJYW5kIHN0YXJ0ICdtcGxheWVyIC0gPCAvZGV2L2R2Yi9hZGFwdGVyMC9kdnIwJyBvcgorCSd4aW5lIHN0ZGluOi8vbXBlZzIgPCAvZGV2L2R2Yi9hZGFwdGVyMC9kdnIwJyBpbiBhIHNlY29uZCB4dGVybS4KKwlUaGF0J3MgYWxsIGZhciBmcm9tIHBlcmZlY3QsIGJ1dCBpdCBzZWVtcyBubyBvbmUgaGFzIHdyaXR0ZW4KKwlhIG5pY2UgRFZCIGFwcGxpY2F0aW9uIHdoaWNoIGluY2x1ZGVzIGEgYnVpbHRpbiBzb2Z0d2FyZSBNUEVHCisJZGVjb2RlciB5ZXQuCisKKwlOZXdzZmxhc2g6IE5ld2VzdCB4aW5lIGRpcmVjdGx5IHN1cHBvcnRzIERWQi4gSnVzdCBjb3B5IHlvdXIKKwljaGFubmVscy5jb25mIHRvIH4vLnhpbmUgYW5kIHN0YXJ0ICd4aW5lIGR2YjovLycsIG9yIHNlbGVjdAorCXRoZSBEVkIgYnV0dG9uIGluIHRoZSB4aW5lIEdVSS4gQ2hhbm5lbCBzd2l0Y2hpbmcgd29ya3MgdXNpbmcgdGhlCisJbnVtcGFkIHBndXAvcGdkb3duIChOUDkgLyBOUDMpIGtleXMgdG8gc2Nyb2xsIHRocm91Z2ggdGhlIGNoYW5uZWwgb3NkCisJbWVudSBhbmQgcHJlc3NpbmcgbnVtcGFkLWVudGVyIHRvIHN3aXRjaCB0byB0aGUgc2VsZWN0ZWQgY2hhbm5lbC4KKworCU5vdGU6IE9sZGVyIHZlcnNpb25zIG9mIHhpbmUgYW5kIG1wbGF5ZXIgdW5kZXJzdGFuZCBNUEVHIHByb2dyYW0KKwlzdHJlYW1zIChQUykgb25seSwgYW5kIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisJdHMycHMgdG9vbCBmcm9tIHRoZSBNZXR6bGVyIEJyb3RoZXIncyBkdmItbXBlZ3Rvb2xzIHBhY2thZ2UuCisKKzMuIFdoaWNoIG90aGVyIERWQiBhcHBsaWNhdGlvbnMgZXhpc3Q/CisKKwlodHRwOi8vd3d3LmNhZHNvZnQuZGUvcGVvcGxlL2tscy92ZHIvCisJCUtsYXVzIFNjaG1pZGluZ2VyJ3MgVmlkZW8gRGlzayBSZWNvcmRlcgorCisJaHR0cDovL3d3dy5tZXR6bGVyYnJvcy5vcmcvZHZiLworCQlNZXR6bGVyIEJyb3MuIERWQiBkZXZlbG9wbWVudDsgYWx0ZXJuYXRlIGRyaXZlcnMgYW5kCisJCURWQiB1dGlsaXRpZXMsIGluY2x1ZGUgZHZiLW1wZWd0b29scyBhbmQgdHV4emFwLgorCisJaHR0cDovL3d3dy5saW51eHN0Yi5vcmcvCisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kdmJ0b29scy8KKwkJRGF2ZSBDaGFwbWFuJ3MgZHZidG9vbHMgcGFja2FnZSwgaW5jbHVkaW5nCisJCWR2YnN0cmVhbSBhbmQgZHZidHVuZQorCisJaHR0cDovL3d3dy5saW51eGR2Yi50di8KKwkJSGVubmluZyBIb2x0c2NobmVpZGVyJ3Mgc2l0ZSB3aXRoIG1hbnkgaW50ZXJlc3RpbmcKKwkJbGlua3MgYW5kIGRvY3MKKworCWh0dHA6Ly93d3cuZGJveDIuaW5mby8KKwkJTGludXhEVkIgb24gdGhlIGRCb3gyCisKKwlodHRwOi8vd3d3LnR1eGJveC5vcmcvCisJaHR0cDovL2N2cy50dXhib3gub3JnLworCQl0aGUgVHV4Qm94IENWUyBtYW55IGludGVyZXN0aW5nIERWQiBhcHBsaWNhdGlvbnMgYW5kIHRoZSBkQm94MgorCQlEVkIgc291cmNlCisKKwlodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2R2YnNhay8KKwkJRFZCIFN3aXNzIEFybXkgS25pZmUgbGlicmFyeSBhbmQgdXRpbGl0aWVzCisKKwlodHRwOi8vd3d3Lm5lbmllLm9yZy9taXNjL21wc3lzLworCQlNUFNZUzogYSBNUEVHMiBzeXN0ZW0gbGlicmFyeSBhbmQgdG9vbHMKKworCWh0dHA6Ly9tcGxheWVyaHEuaHUvCisJCW1wbGF5ZXIKKworCWh0dHA6Ly94aW5lLnNvdXJjZWZvcmdlLm5ldC8KKwlodHRwOi8veGluZWhxLmRlLworCQl4aW5lCisKKwlodHRwOi8vd3d3Lm15dGh0di5vcmcvCisJCU15dGhUViAtIGFuYWxvZyBUViBQVlIsIGJ1dCBub3cgd2l0aCBEVkIgc3VwcG9ydCwgdG9vCisJCSh3aXRoIHNvZnR3YXJlIE1QRUcgZGVjb2RlKQorCisJaHR0cDovL2R2YnNub29wLnNvdXJjZWZvcmdlLm5ldC8KKwkJRFZCIHNuaWZmZXIgcHJvZ3JhbSB0byBtb25pdG9yLCBhbmFseXplLCBkZWJ1ZywgZHVtcAorCQlvciB2aWV3IGR2Yi9tcGVnL2RzbS1jYy9taHAgc3RyZWFtIGluZm9ybWF0aW9uIChUUywKKwkJUEVTLCBTRUNUSU9OKQorCis0LiBDYW4ndCBnZXQgYSBzaWduYWwgdHVuZWQgY29ycmVjdGx5CisKKwlJZiB5b3UgYXJlIHVzaW5nIGEgVGVjaG5vdHJlbmQvSGF1cHBhdWdlIERWQi1DIGNhcmQgKndpdGhvdXQqIGFuYWxvZworCW1vZHVsZSwgeW91IG1pZ2h0IGhhdmUgdG8gdXNlIG1vZHVsZSBwYXJhbWV0ZXIgYWRhYz0tMSAoZHZiLXR0cGNpLm8pLgorCis1LiBUaGUgZHZiX25ldCBkZXZpY2UgZG9lc24ndCBnaXZlIG1lIGFueSBwYWNrZXRzIGF0IGFsbAorCisJUnVuIHRjcGR1bXAgb24gdGhlIGR2YjBfMCBpbnRlcmZhY2UuIFRoaXMgc2V0cyB0aGUgaW50ZXJmYWNlCisJaW50byBwcm9taXNjb3VzIG1vZGUgc28gaXQgYWNjZXB0cyBhbnkgcGFja2V0cyBmcm9tIHRoZSBQSUQKKwl5b3UgaGF2ZSBjb25maWd1cmVkIHdpdGggdGhlIGR2Ym5ldCB1dGlsaXR5LiBDaGVjayBpZiB0aGVyZQorCWFyZSBhbnkgcGFja2V0cyB3aXRoIHRoZSBJUCBhZGRyIGFuZCBNQUMgYWRkciB5b3UgaGF2ZQorCWNvbmZpZ3VyZWQgd2l0aCBpZmNvbmZpZy4KKworCUlmIHRjcGR1bXAgZG9lc24ndCBnaXZlIHlvdSBhbnkgb3V0cHV0LCBjaGVjayB0aGUgc3RhdGlzdGljcworCXdoaWNoIGlmY29uZmlnIG91dHB1dHMuIChOb3RlOiBJZiB0aGUgTUFDIGFkZHJlc3MgaXMgd3JvbmcsCisJZHZiX25ldCB3b24ndCBnZXQgYW55IGlucHV0OyB0aHVzIHlvdSBoYXZlIHRvIHJ1biB0Y3BkdW1wCisJYmVmb3JlIGNoZWNraW5nIHRoZSBzdGF0aXN0aWNzLikgSWYgdGhlcmUgYXJlIG5vIHBhY2tldHMgYXQKKwlhbGwgdGhlbiBtYXliZSB0aGUgUElEIGlzIHdyb25nLiBJZiB0aGVyZSBhcmUgZXJyb3IgcGFja2V0cywKKwl0aGVuIGVpdGhlciB0aGUgUElEIGlzIHdyb25nIG9yIHRoZSBzdHJlYW0gZG9lcyBub3QgY29uZm9ybSB0bworCXRoZSBNUEUgc3RhbmRhcmQgKEVOIDMwMSAxOTIsIGh0dHA6Ly93d3cuZXRzaS5vcmcvKS4gWW91IGNhbgorCXVzZSBlLmcuIGR2YnNub29wIGZvciBkZWJ1Z2dpbmcuCisKKzYuIFRoZSBkdmJfbmV0IGRldmljZSBkb2Vzbid0IGdpdmUgbWUgYW55IG11bHRpY2FzdCBwYWNrZXRzCisKKwlDaGVjayB5b3VyIHJvdXRlcyBpZiB0aGV5IGluY2x1ZGUgdGhlIG11bHRpY2FzdCBhZGRyZXNzIHJhbmdlLgorCUFkZGl0aW9uYWxseSBtYWtlIHN1cmUgdGhhdCAic291cmNlIHZhbGlkYXRpb24gYnkgcmV2ZXJzZWQgcGF0aAorCWxvb2t1cCIgaXMgZGlzYWJsZWQ6CisJICAkICJlY2hvIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9kdmIwL3JwX2ZpbHRlciIKKworNy4gV2hhdCB0aGUgaGVsbCBhcmUgYWxsIHRob3NlIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGxvYWRlZD8KKworCUZvciBhIGR2Yi10dHBjaSBhdjcxMTAgYmFzZWQgZnVsbC1mZWF0dXJlZCBjYXJkIHRoZSBmb2xsb3dpbmcKKwltb2R1bGVzIGFyZSBsb2FkZWQ6CisKKwktIHZpZGVvZGV2OiBWaWRlbzRMaW51eCBjb3JlIG1vZHVsZS4gVGhpcyBpcyB0aGUgYmFzZSBtb2R1bGUgdGhhdAorCSAgZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgImFuYWxvZyIgdHYgcGljdHVyZSBvZiB0aGUgYXY3MTEwIG1wZWcyCisJICBkZWNvZGVyLgorCisJLSB2NGwyLWNvbW1vbjogY29tbW9uIGZ1bmN0aW9ucyBmb3IgVmlkZW80TGludXgtMiBkcml2ZXJzCisKKwktIHY0bDEtY29tcGF0OiBiYWNrd2FyZCBjb21wYXRpYmxpdHkgbGF5ZXIgZm9yIFZpZGVvNExpbnV4LTEgbGVnYWN5CisJICBhcHBsaWNhdGlvbnMKKworCS0gZHZiLWNvcmU6IERWQiBjb3JlIG1vZHVsZS4gVGhpcyBwcm92aWRlcyB5b3Ugd2l0aCB0aGUKKwkgIC9kZXYvZHZiL2FkYXB0ZXIgZW50cmllcworCisJLSBzYWE3MTQ2OiBTQUE3MTQ2IGNvcmUgZHJpdmVyLiBUaGlzIGlzIG5lZWQgdG8gYWNjZXNzIGFueSBTQUE3MTQ2CisJICBiYXNlZCBjYXJkIGluIHlvdXIgc3lzdGVtLgorCisJLSBzYWE3MTQ2X3Z2OiBTQUE3MTQ2IHZpZGVvIGFuZCB2YmkgZnVuY3Rpb25zLiBUaGVzZSBhcmUgb25seSBuZWVkZWQKKwkgIGZvciBmdWxsLWZlYXR1cmVkIGNhcmRzLgorCisJLSB2aWRlby1idWY6IGNhcHR1cmUgaGVscGVyIG1vZHVsZSBmb3IgdGhlIHNhYTcxNDZfdnYgZHJpdmVyLiBUaGlzCisJICBvbmUgaXMgcmVzcG9uc2libGUgdG8gaGFuZGxlIGNhcHR1cmUgYnVmZmVycy4KKworCS0gZHZiLXR0cGNpOiBUaGUgbWFpbiBkcml2ZXIgZm9yIEFWNzExMCBiYXNlZCwgZnVsbC1mZWF0dWVkCisJICBEVkItUy9DL1QgY2FyZHMKKworZW9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmZkY2IzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpAQCAtMCwwICsxLDM5NyBAQAorIyEvdXNyL2Jpbi9wZXJsCisjICAgICBEVkIgZmlybXdhcmUgZXh0cmFjdG9yCisjCisjICAgICAoYykgMjAwNCBBbmRyZXcgZGUgUXVpbmNleQorIworIyAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjCisjICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK3VzZSBGaWxlOjpUZW1wIHF3LyB0ZW1wZGlyIC87Cit1c2UgSU86OkhhbmRsZTsKKworQGNvbXBvbmVudHMgPSAoICJzcDg4NzAiLCAic3A4ODd4IiwgInRkYTEwMDQ1IiwgInRkYTEwMDQ2IiwgImF2NzExMCIsICJkZWMyMDAwdCIsCisJCSJkZWMyNTQwdCIsICJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLAorCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIpOworCisjIENoZWNrIGFyZ3MKK3N5bnRheCgpIGlmIChzY2FsYXIoQEFSR1YpICE9IDEpOworJGNpZCA9ICRBUkdWWzBdOworCisjIERvIGl0IQorZm9yICgkaT0wOyAkaSA8IHNjYWxhcihAY29tcG9uZW50cyk7ICRpKyspIHsKKyAgICBpZiAoJGNpZCBlcSAkY29tcG9uZW50c1skaV0pIHsKKwkkb3V0ZmlsZSA9IGV2YWwoJGNpZCk7CisJZGllICRAIGlmICRAOworCXByaW50IFNUREVSUiAiRmlybXdhcmUgJG91dGZpbGUgZXh0cmFjdGVkIHN1Y2Nlc3NmdWxseS4gTm93IGNvcHkgaXQgdG8gZWl0aGVyIC9saWIvZmlybXdhcmUgb3IgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8gKGRlcGVuZGluZyBvbiB5b3VyIGhvdHBsdWcgdmVyc2lvbikuXG4iOworCWV4aXQoMCk7CisgICAgfQorfQorCisjIElmIHdlIGdldCBoZXJlLCBpdCB3YXNuJ3QgZm91bmQKK3ByaW50IFNUREVSUiAiVW5rbm93biBjb21wb25lbnQgXCIkY2lkXCJcbiI7CitzeW50YXgoKTsKKworCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlybXdhcmUtc3BlY2lmaWMgZXh0cmFjdGlvbiBzdWJyb3V0aW5lcworCitzdWIgc3A4ODcwIHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJ0dF9QcmVtaXVtXzIxN2cuemlwIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cudGVjaG5vdHJlbmQuZGUvbmV3LzIxN2cvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gIjUzOTcwZWMxN2E1Mzg5NDVhNmQ4Y2I2MDhhN2IzODk5IjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItZmUtc3A4ODcwLmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvc29mdHdhcmUvT0VNL0hFL0FwcC9ib290L1NDX01BSU4uTUMiLCAkaGFzaCk7CisgICAgY29weSgiJHRtcGRpci9zb2Z0d2FyZS9PRU0vSEUvQXBwL2Jvb3QvU0NfTUFJTi5NQyIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgc3A4ODd4IHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJEdmJ0MS4zLjU3LjYuemlwIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cuYXZlcm1lZGlhLmNvbS9zb2Z0d2FyZS8kc291cmNlZmlsZSI7CisgICAgbXkgJGNhYmZpbGUgPSAiRFZCVCBOZXQgIFZlcjEuMy41Ny42L2Rpc2sxL2RhdGExLmNhYiI7CisgICAgbXkgJGhhc2ggPSAiMjM3OTM4ZDUzYTdmODM0YzA1YzQyYjg5NGNhNjhhYzMiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi1mZS1zcDg4N3guZnciOworICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisgICAgY2hlY2t1bnNoaWVsZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICB1bnNoaWVsZCgiJHRtcGRpci8kY2FiZmlsZSIsICR0bXBkaXIpOworICAgIHZlcmlmeSgiJHRtcGRpci9aRW5nbGlzaC9zY19tYWluLm1jIiwgJGhhc2gpOworICAgIGNvcHkoIiR0bXBkaXIvWkVuZ2xpc2gvc2NfbWFpbi5tYyIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgdGRhMTAwNDUgeworICAgIG15ICRzb3VyY2VmaWxlID0gInR0X2J1ZGdldF8yMTdnLnppcCI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LnRlY2hub3RyZW5kLmRlL25ldy8yMTdnLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICIyMTA1ZmQ1YmYzNzg0MmZiY2RmYTRiZmQ1OGYzNTk0YSI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLWZlLXRkYTEwMDQ1LmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICBleHRyYWN0KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9QQ0kvQXBwL3R0bGNkYWNjLmRsbCIsIDB4MzdlZjksIDMwNTU1LCAiJHRtcGRpci9md3RtcCIpOworICAgIHZlcmlmeSgiJHRtcGRpci9md3RtcCIsICRoYXNoKTsKKyAgICBjb3B5KCIkdG1wZGlyL2Z3dG1wIiwgJG91dGZpbGUpOworCisgICAgJG91dGZpbGU7Cit9CisKK3N1YiB0ZGExMDA0NiB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAidHRfYnVkZ2V0XzIxN2cuemlwIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly93d3cudGVjaG5vdHJlbmQuZGUvbmV3LzIxN2cvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gImEyNWI1NzllMzcxMDlhZjYwZjRhMzZjMzc4OTM5NTdjIjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItZmUtdGRhMTAwNDYuZnciOworICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CisgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOworICAgIGV4dHJhY3QoIiR0bXBkaXIvc29mdHdhcmUvT0VNL1BDSS9BcHAvdHRsY2RhY2MuZGxsIiwgMHgzZjczMSwgMjQ0NzksICIkdG1wZGlyL2Z3dG1wIik7CisgICAgdmVyaWZ5KCIkdG1wZGlyL2Z3dG1wIiwgJGhhc2gpOworICAgIGNvcHkoIiR0bXBkaXIvZnd0bXAiLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIGF2NzExMCB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiZHZiLXR0cGNpLTAxLmZ3LTI2MWQiOworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gIjYwMzQzMWI2MjU5NzE1YThlODhmMzc2YTUzYjY0ZTJmIjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItdHRwY2ktMDEuZnciOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHZlcmlmeSgkc291cmNlZmlsZSwgJGhhc2gpOworICAgIGNvcHkoJHNvdXJjZWZpbGUsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgZGVjMjAwMHQgeworICAgIG15ICRzb3VyY2VmaWxlID0gImRlYzIxN2cuZXhlIjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9oYXVwcGF1Z2UubGlnaHRwYXRoLm5ldC9kZS8kc291cmNlZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiYmQ4NmY0NThjZWU0YThmMGE4Y2UyZDIwYzY2MjE1YTkiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi10dHVzYi1kZWMtMjAwMHQuZnciOworICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CisgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOworICAgIHZlcmlmeSgiJHRtcGRpci9zb2Z0d2FyZS9PRU0vU1RCL0FwcC9Cb290L1NUQl9QQ19ULmJpbiIsICRoYXNoKTsKKyAgICBjb3B5KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9TVEIvQXBwL0Jvb3QvU1RCX1BDX1QuYmluIiwgJG91dGZpbGUpOworCisgICAgJG91dGZpbGU7Cit9CisKK3N1YiBkZWMyNTQwdCB7CisgICAgbXkgJHNvdXJjZWZpbGUgPSAiZGVjMjE3Zy5leGUiOworICAgIG15ICR1cmwgPSAiaHR0cDovL2hhdXBwYXVnZS5saWdodHBhdGgubmV0L2RlLyRzb3VyY2VmaWxlIjsKKyAgICBteSAkaGFzaCA9ICI1M2U1OGY0ZjViNWMyOTMwYmVlZTc0YTc2ODFmZWQ5MiI7CisgICAgbXkgJG91dGZpbGUgPSAiZHZiLXR0dXNiLWRlYy0yNTQwdC5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgdmVyaWZ5KCIkdG1wZGlyL3NvZnR3YXJlL09FTS9TVEIvQXBwL0Jvb3QvU1RCX1BDX1guYmluIiwgJGhhc2gpOworICAgIGNvcHkoIiR0bXBkaXIvc29mdHdhcmUvT0VNL1NUQi9BcHAvQm9vdC9TVEJfUENfWC5iaW4iLCAkb3V0ZmlsZSk7CisKKyAgICAkb3V0ZmlsZTsKK30KKworc3ViIGRlYzMwMDBzIHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJkZWMyMTdnLmV4ZSI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vaGF1cHBhdWdlLmxpZ2h0cGF0aC5uZXQvZGUvJHNvdXJjZWZpbGUiOworICAgIG15ICRoYXNoID0gImIwMTNlY2VjZWE4M2Y0ZDZkOGQyYTI5YWM3YzFiNDQ4IjsKKyAgICBteSAkb3V0ZmlsZSA9ICJkdmItdHR1c2ItZGVjLTMwMDBzLmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHNvdXJjZWZpbGUsICR1cmwpOworICAgIHVuemlwKCRzb3VyY2VmaWxlLCAkdG1wZGlyKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvc29mdHdhcmUvT0VNL1NUQi9BcHAvQm9vdC9TVEJfUENfUy5iaW4iLCAkaGFzaCk7CisgICAgY29weSgiJHRtcGRpci9zb2Z0d2FyZS9PRU0vU1RCL0FwcC9Cb290L1NUQl9QQ19TLmJpbiIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgdnA3MDQxIHsKKyAgICBteSAkc291cmNlZmlsZSA9ICIyLjQyMi56aXAiOworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy50d2luaGFuLmNvbS9maWxlcy9kcml2ZXIvVVNCLVRlci8kc291cmNlZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiZTg4YzkzNzJkMWY2NjYwOWEzZTdiMDcyYzUzZmJjZmUiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi12cDcwNDEtMi40MjIuZnciOworICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyKERJUiA9PiAiL3RtcCIsIENMRUFOVVAgPT4gMSk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkc291cmNlZmlsZSwgJHVybCk7CisgICAgdW56aXAoJHNvdXJjZWZpbGUsICR0bXBkaXIpOworICAgIGV4dHJhY3QoIiR0bXBkaXIvVmlzaW9uRFRWL0RyaXZlcnMvV2luMksmWFAvVURUVGxvYWQuc3lzIiwgMTI1MDMsIDMwMzYsICIkdG1wZGlyL2Z3dG1wMSIpOworICAgIGV4dHJhY3QoIiR0bXBkaXIvVmlzaW9uRFRWL0RyaXZlcnMvV2luMksmWFAvVURUVGxvYWQuc3lzIiwgMjIwNywgMTAyNzQsICIkdG1wZGlyL2Z3dG1wMiIpOworCisgICAgbXkgJENNRCA9ICJcMDAwXDAwMVwwMDBcMjIyXDE3N1wwMDAiOworICAgIG15ICRQQUQgPSAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIjsKKyAgICBteSAoJEZXKTsKKyAgICBvcGVuICRGVywgIj4kdG1wZGlyL2Z3dG1wMyI7CisgICAgcHJpbnQgJEZXICIkQ01EXDAwMSRQQUQiOworICAgIHByaW50ICRGVyAiJENNRFwwMDEkUEFEIjsKKyAgICBhcHBlbmRmaWxlKCRGVywgIiR0bXBkaXIvZnd0bXAxIik7CisgICAgcHJpbnQgJEZXICIkQ01EXDAwMCRQQUQiOworICAgIHByaW50ICRGVyAiJENNRFwwMDEkUEFEIjsKKyAgICBhcHBlbmRmaWxlKCRGVywgIiR0bXBkaXIvZnd0bXAyIik7CisgICAgcHJpbnQgJEZXICIkQ01EXDAwMSRQQUQiOworICAgIHByaW50ICRGVyAiJENNRFwwMDAkUEFEIjsKKyAgICBjbG9zZSgkRlcpOworCisgICAgdmVyaWZ5KCIkdG1wZGlyL2Z3dG1wMyIsICRoYXNoKTsKKyAgICBjb3B5KCIkdG1wZGlyL2Z3dG1wMyIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgZGlidXNiIHsKKwlteSAkdXJsID0gImh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlL2R2Yi1kaWJ1c2ItNS4wLjAuMTEuZnciOworCW15ICRvdXRmaWxlID0gImR2Yi1kaWJ1c2ItNS4wLjAuMTEuZnciOworCW15ICRoYXNoID0gImZhNDkwMjk1YTUyNzM2MGNhMTZkY2RmMzIyNGNhMjQzIjsKKworCWNoZWNrc3RhbmRhcmQoKTsKKworCXdnZXRmaWxlKCRvdXRmaWxlLCAkdXJsKTsKKwl2ZXJpZnkoJG91dGZpbGUsJGhhc2gpOworCisJJG91dGZpbGU7Cit9CisKK3N1YiBueHQyMDAyIHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJCcm9hZGJhbmQ0UENfNF8yXzExLnppcCI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmJidGkudXMvZG93bmxvYWQvd2luZG93cy8kc291cmNlZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiYzZkMmVhNDdhOGY0NTZkODg3YWRhMGNmYjcxOGZmMmEiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi1mZS1ueHQyMDAyLmZ3IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworICAgIAorICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgdmVyaWZ5KCIkdG1wZGlyL1NreU5FVFUuc3lzIiwgJGhhc2gpOworICAgIGV4dHJhY3QoIiR0bXBkaXIvU2t5TkVUVS5zeXMiLCAzNzU4MzIsIDU5MDgsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCitzdWIgb3I1MTIxMSB7CisgICAgbXkgJGZ3ZmlsZSA9ICJkdmItZmUtb3I1MTIxMS5mdyI7CisgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyRmd2ZpbGUiOworICAgIG15ICRoYXNoID0gImQ4MzA5NDljNzcxYTI4OTUwNWJmOWVhZmMyMjVkNDkxIjsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRmd2ZpbGUsICR1cmwpOworICAgIHZlcmlmeSgkZndmaWxlLCAkaGFzaCk7CisKKyAgICAkZndmaWxlOworfQorCitzdWIgb3I1MTEzMl9xYW0geworICAgIG15ICRmd2ZpbGUgPSAiZHZiLWZlLW9yNTExMzItcWFtLmZ3IjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvJGZ3ZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiNzcwMmU4OTM4NjEyZGU0NmNjYWRmZTliNDEzY2IzYjUiOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJGZ3ZmlsZSwgJHVybCk7CisgICAgdmVyaWZ5KCRmd2ZpbGUsICRoYXNoKTsKKworICAgICRmd2ZpbGU7Cit9CisKK3N1YiBvcjUxMTMyX3ZzYiB7CisgICAgbXkgJGZ3ZmlsZSA9ICJkdmItZmUtb3I1MTEzMi12c2IuZnciOworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kZndmaWxlIjsKKyAgICBteSAkaGFzaCA9ICJjMTYyMDhlMDJmMzZmYzQzOWE1NTdhZDRjNjEzMzY0YSI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZndmaWxlLCAkdXJsKTsKKyAgICB2ZXJpZnkoJGZ3ZmlsZSwgJGhhc2gpOworCisgICAgJGZ3ZmlsZTsKK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVXRpbGl0aWVzCisKK3N1YiBjaGVja3N0YW5kYXJkIHsKKyAgICBpZiAoc3lzdGVtKCJ3aGljaCB1bnppcCA+IC9kZXYvbnVsbCAyPiYxIikpIHsKKwlkaWUgIlRoaXMgZmlybXdhcmUgcmVxdWlyZXMgdGhlIHVuemlwIGNvbW1hbmQgLSBzZWUgZnRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9VblppcC5odG1sXG4iOworICAgIH0KKyAgICBpZiAoc3lzdGVtKCJ3aGljaCBtZDVzdW0gPiAvZGV2L251bGwgMj4mMSIpKSB7CisJZGllICJUaGlzIGZpcm13YXJlIHJlcXVpcmVzIHRoZSBtZDVzdW0gY29tbWFuZCAtIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzL1xuIjsKKyAgICB9CisgICAgaWYgKHN5c3RlbSgid2hpY2ggd2dldCA+IC9kZXYvbnVsbCAyPiYxIikpIHsKKwlkaWUgIlRoaXMgZmlybXdhcmUgcmVxdWlyZXMgdGhlIHdnZXQgY29tbWFuZCAtIHNlZSBodHRwOi8vd2dldC5zdW5zaXRlLmRrL1xuIjsKKyAgICB9Cit9CisKK3N1YiBjaGVja3Vuc2hpZWxkIHsKKyAgICBpZiAoc3lzdGVtKCJ3aGljaCB1bnNoaWVsZCA+IC9kZXYvbnVsbCAyPiYxIikpIHsKKwlkaWUgIlRoaXMgZmlybXdhcmUgcmVxdWlyZXMgdGhlIHVuc2hpZWxkIGNvbW1hbmQgLSBzZWUgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zeW5jZS9cbiI7CisgICAgfQorfQorCitzdWIgd2dldGZpbGUgeworICAgIG15ICgkc291cmNlZmlsZSwgJHVybCkgPSBAXzsKKworICAgIGlmICghIC1mICRzb3VyY2VmaWxlKSB7CisJc3lzdGVtKCJ3Z2V0IC1PIFwiJHNvdXJjZWZpbGVcIiBcIiR1cmxcIiIpIGFuZCBkaWUgIndnZXQgZmFpbGVkIC0gdW5hYmxlIHRvIGRvd25sb2FkIGZpcm13YXJlIjsKKyAgICB9Cit9CisKK3N1YiB1bnppcCB7CisgICAgbXkgKCRzb3VyY2VmaWxlLCAkdG9kaXIpID0gQF87CisKKyAgICAkc3RhdHVzID0gc3lzdGVtKCJ1bnppcCAtcSAtbyAtZCBcIiR0b2RpclwiIFwiJHNvdXJjZWZpbGVcIiAyPi9kZXYvbnVsbCIgKTsKKyAgICBpZiAoKCgkc3RhdHVzID4+IDgpID4gMikgfHwgKCgkc3RhdHVzICYgMHhmZikgIT0gMCkpIHsKKwlkaWUgKCJ1bnppcCBmYWlsZWQgLSB1bmFibGUgdG8gZXh0cmFjdCBmaXJtd2FyZSIpOworICAgIH0KK30KKworc3ViIHVuc2hpZWxkIHsKKyAgICBteSAoJHNvdXJjZWZpbGUsICR0b2RpcikgPSBAXzsKKworICAgIHN5c3RlbSgidW5zaGllbGQgeCAtZCBcIiR0b2RpclwiIFwiJHNvdXJjZWZpbGVcIiA+IC9kZXYvbnVsbCIgKSBhbmQgZGllICgidW5zaGllbGQgZmFpbGVkIC0gdW5hYmxlIHRvIGV4dHJhY3QgZmlybXdhcmUiKTsKK30KKworc3ViIHZlcmlmeSB7CisgICAgbXkgKCRmaWxlbmFtZSwgJGhhc2gpID0gQF87CisgICAgbXkgKCR0ZXN0aGFzaCk7CisKKyAgICBvcGVuKENNRCwgIm1kNXN1bSBcIiRmaWxlbmFtZVwifCIpOworICAgICR0ZXN0aGFzaCA9IDxDTUQ+OworICAgICR0ZXN0aGFzaCA9fiAvKFthLXpBLVowLTldKikvOworICAgICR0ZXN0aGFzaCA9ICQxOworICAgIGNsb3NlIENNRDsKKyAgICBkaWUgIkhhc2ggb2YgZXh0cmFjdGVkIGZpbGUgZG9lcyBub3QgbWF0Y2ghXG4iIGlmICgkdGVzdGhhc2ggbmUgJGhhc2gpOworfQorCitzdWIgY29weSB7CisgICAgbXkgKCRmcm9tLCAkdG8pID0gQF87CisKKyAgICBzeXN0ZW0oImNwIC1mIFwiJGZyb21cIiBcIiR0b1wiIikgYW5kIGRpZSAoImNwIGZhaWxlZCIpOworfQorCitzdWIgZXh0cmFjdCB7CisgICAgbXkgKCRpbmZpbGUsICRvZmZzZXQsICRsZW5ndGgsICRvdXRmaWxlKSA9IEBfOworICAgIG15ICgkY2h1bmtsZW5ndGgsICRidWYsICRyY291bnQpOworCisgICAgb3BlbiBJTkZJTEUsICI8JGluZmlsZSI7CisgICAgb3BlbiBPVVRGSUxFLCAiPiRvdXRmaWxlIjsKKyAgICBzeXNzZWVrKElORklMRSwgJG9mZnNldCwgU0VFS19TRVQpOworICAgIHdoaWxlKCRsZW5ndGggPiAwKSB7CisJIyBDYWxjIGNodW5rIHNpemUKKwkkY2h1bmtsZW5ndGggPSAyMDQ4OworCSRjaHVua2xlbmd0aCA9ICRsZW5ndGggaWYgKCRjaHVua2xlbmd0aCA+ICRsZW5ndGgpOworCisJJHJjb3VudCA9IHN5c3JlYWQoSU5GSUxFLCAkYnVmLCAkY2h1bmtsZW5ndGgpOworCWRpZSAiUmFuIG91dCBvZiBkYXRhXG4iIGlmICgkcmNvdW50ICE9ICRjaHVua2xlbmd0aCk7CisJc3lzd3JpdGUoT1VURklMRSwgJGJ1Zik7CisJJGxlbmd0aCAtPSAkcmNvdW50OworICAgIH0KKyAgICBjbG9zZSBJTkZJTEU7CisgICAgY2xvc2UgT1VURklMRTsKK30KKworc3ViIGFwcGVuZGZpbGUgeworICAgIG15ICgkRkgsICRpbmZpbGUpID0gQF87CisgICAgbXkgKCRidWYpOworCisgICAgb3BlbiBJTkZJTEUsICI8JGluZmlsZSI7CisgICAgd2hpbGUoMSkgeworCSRyY291bnQgPSBzeXNyZWFkKElORklMRSwgJGJ1ZiwgMjA0OCk7CisJbGFzdCBpZiAoJHJjb3VudCA9PSAwKTsKKwlwcmludCAkRkggJGJ1ZjsKKyAgICB9CisgICAgY2xvc2UoSU5GSUxFKTsKK30KKworc3ViIHN5bnRheCgpIHsKKyAgICBwcmludCBTVERFUlIgInN5bnRheDogZ2V0X2R2Yl9maXJtd2FyZSA8Y29tcG9uZW50PlxuIjsKKyAgICBwcmludCBTVERFUlIgIlN1cHBvcnRlZCBjb21wb25lbnRzOlxuIjsKKyAgICBmb3IoJGk9MDsgJGkgPCBzY2FsYXIoQGNvbXBvbmVudHMpOyAkaSsrKSB7CisJcHJpbnQgU1RERVJSICJcdCIgLiAkY29tcG9uZW50c1skaV0gLiAiXG4iOworICAgIH0KKyAgICBleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvcmVhZG1lLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL3JlYWRtZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0Yzk4YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL3JlYWRtZS50eHQKQEAgLTAsMCArMSw1MiBAQAorTGludXggRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3QgKERWQikgc3Vic3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG1haW4gZGV2ZWxvcG1lbnQgc2l0ZSBhbmQgQ1ZTIHJlcG9zaXRvcnkgZm9yIHRoZXNlCitkcml2ZXJzIGlzIGh0dHA6Ly9saW51eHR2Lm9yZy8uCisKK1RoZSBkZXZlbG9wZXIgbWFpbGluZyBsaXN0IGxpbnV4LWR2YiBpcyBhbHNvIGhvc3RlZCB0aGVyZSwKK3NlZSBodHRwOi8vbGludXh0di5vcmcvbGlzdHMucGhwLiBQbGVhc2UgY2hlY2sKK3RoZSBhcmNoaXZlIGh0dHA6Ly9saW51eHR2Lm9yZy9waXBlcm1haWwvbGludXgtZHZiLworYW5kIHRoZSBXaWtpIGh0dHA6Ly9saW51eHR2Lm9yZy93aWtpLworYmVmb3JlIGFza2luZyBuZXdiaWUgcXVlc3Rpb25zIG9uIHRoZSBsaXN0LgorCitBUEkgZG9jdW1lbnRhdGlvbiwgdXRpbGl0aWVzIGFuZCB0ZXN0L2V4YW1wbGUgcHJvZ3JhbXMKK2FyZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgb2xkIGRyaXZlciBwYWNrYWdlIGZvciBMaW51eCAyLjQKKyhsaW51eHR2LWR2Yi0xLjAueC50YXIuZ3opLCBvciBmcm9tIENWUyAobW9kdWxlIERWQikuCitXZSBwbGFuIHRvIHNwbGl0IHRoaXMgaW50byBzZXBhcmF0ZSBwYWNrYWdlcywgYnV0IGl0J3Mgbm90CitiZWVuIGRvbmUgeWV0LgorCitodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzLworCitXaGF0J3MgaW5zaWRlIHRoaXMgZGlyZWN0b3J5OgorCisiY2FyZHMudHh0IiAKK2NvbnRhaW5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgaGFyZHdhcmUuCisKKyJjb250cmlidXRvcnMudHh0IgoraXMgdGhlIHdoby1pcy13aG8gb2YgRFZCIGRldmVsb3BtZW50CisKKyJmYXEudHh0IgorY29udGFpbnMgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgYW5kIHRoZWlyIGFuc3dlcnMuCisKKyJnZXRfZHZiX2Zpcm13YXJlIgorc2NyaXB0IHRvIGRvd25sb2FkIGFuZCBleHRyYWN0IGZpcm13YXJlIGZvciB0aG9zZSBkZXZpY2VzCit0aGF0IHJlcXVpcmUgaXQuCisKKyJ0dHVzYi1kZWMudHh0IgorY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGFib3V0IHRoZQorVFQgREVDMjAwMC9ERUMzMDAwIFVTQiBEVkIgaGFyZHdhcmUuCisKKyJidDh4eC50eHQiIAorY29udGFpbnMgZGV0YWlsZWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgdGhlCit2YXJpb3VzIGJ0OHh4IGJhc2VkICJidWRnZXQiIERWQiBjYXJkcworKE5lYnVsYSwgUGlubmFjbGUgUENUViwgVHdpbmhhbiBEU1QpCisKKyJSRUFETUUuZGlidXNiIgorY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYWRhcHRlcnMKK2Jhc2VkIG9uIERpQmNvbSByZWZlcmVuY2UgZGVzaWduLgorCisidWRldi50eHQiCitob3cgdG8gZ2V0IERWQiBhbmQgdWRldiB1cCBhbmQgcnVubmluZy4KKworR29vZCBsdWNrIGFuZCBoYXZlIGZ1biEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3R0dXNiLWRlYy50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi90dHVzYi1kZWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMWU5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi90dHVzYi1kZWMudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1RlY2hub1RyZW5kL0hhdXBwYXVnZSBERUMgVVNCIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0RyaXZlciBTdGF0dXMKKy0tLS0tLS0tLS0tLS0KKworU3VwcG9ydGVkOgorCURFQzIwMDAtdAorCURFQzI0NTAtdAorCURFQzMwMDAtcworCUxpbnV4IEtlcm5lbHMgMi40IGFuZCAyLjYKKwlWaWRlbyBTdHJlYW1pbmcKKwlBdWRpbyBTdHJlYW1pbmcKKwlTZWN0aW9uIEZpbHRlcnMKKwlDaGFubmVsIFphcHBpbmcKKwlIb3RwbHVnIGZpcm13YXJlIGxvYWRlciB1bmRlciAyLjYga2VybmVscworCitUbyBEbzoKKwlUdW5lciBzdGF0dXMgaW5mb3JtYXRpb24KKwlEVkIgbmV0d29yayBpbnRlcmZhY2UKKwlTdHJlYW1pbmcgdmlkZW8gUEMtPkRFQworCUNvbmF4IHN1cHBvcnQgZm9yIDI0NTAtdAorCitHZXR0aW5nIHRoZSBGaXJtd2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisiZ2V0X2R2Yl9maXJtd2FyZSBkZWMyMDAwdCIKKyJnZXRfZHZiX2Zpcm13YXJlIGRlYzI1NDB0IgorImdldF9kdmJfZmlybXdhcmUgZGVjMzAwMHMiCisKKworQ29tcGlsYXRpb24gTm90ZXMgZm9yIDIuNCBrZXJuZWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZvciAyLjQga2VybmVscyB0aGUgZmlybXdhcmUgZm9yIHRoZSBERUNzIGlzIGNvbXBpbGVkIGludG8gdGhlIGRyaXZlciBpdHNlbGYuCisKK0NvcHkgdGhlIHRocmVlIGZpbGVzIGRvd25sb2FkZWQgYWJvdmUgaW50byB0aGUgYnVpbGQtMi40IGRpcmVjdG9yeS4KKworCitIb3RwbHVnIEZpcm13YXJlIExvYWRpbmcgZm9yIDIuNiBrZXJuZWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGb3IgMi42IGtlcm5lbHMgdGhlIGZpcm13YXJlIGlzIGxvYWRlZCBhdCB0aGUgcG9pbnQgdGhhdCB0aGUgZHJpdmVyIG1vZHVsZSBpcworbG9hZGVkLiAgU2VlIGxpbnV4L0RvY3VtZW50YXRpb24vZHZiL2Zpcm13YXJlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQ29weSB0aGUgdGhyZWUgZmlsZXMgZG93bmxvYWRlZCBhYm92ZSBpbnRvIHRoZSAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3VkZXYudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvdWRldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlZTIyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL3VkZXYudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoZSBEVkIgc3Vic3lzdGVtIGN1cnJlbnRseSByZWdpc3RlcnMgdG8gdGhlIHN5c2ZzIHN1YnN5c3RlbSB1c2luZyB0aGUKKyJjbGFzc19zaW1wbGUiIGludGVyZmFjZS4KKworVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGJhc2ljIGluZm9ybWF0aW9ucyBsaWtlIG1vZHVsZSBsb2FkaW5nIHBhcmFtZXRlcnMKK2FyZSBwcmVzZW50ZWQgdGhyb3VnaCBzeXNmcy4gT3RoZXIgdGhpbmdzIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcgYXJlCitjdXJyZW50bHkgKm5vdCogYXZhaWxhYmxlLgorCitOZXZlcnRoZWxlc3MgaXQncyBub3cgcG9zc2libGUgdG8gYWRkIHByb3BlciB1ZGV2IHJ1bGVzIHNvIHRoYXQgdGhlCitEVkIgZGV2aWNlIG5vZGVzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuCisKK1dlIGFzc3VtZSB0aGF0IHlvdSBoYXZlIHVkZXYgYWxyZWFkeSB1cCBhbmQgcnVubmluZyBhbmQgdGhhdCBoYXZlIGJlZW4KK2NyZWF0aW5nIHRoZSBEVkIgZGV2aWNlIG5vZGVzIG1hbnVhbGx5IHVwIHRvIG5vdyBkdWUgdG8gdGhlIG1pc3Npbmcgc3lzZnMKK3N1cHBvcnQuCisKKzAuIERvbid0IGZvcmdldCB0byBkaXNhYmxlIHlvdXIgY3VycmVudCBtZXRob2Qgb2YgY3JlYXRpbmcgdGhlCitkZXZpY2Ugbm9kZXMgbWFudWFsbHkuCisKKzEuIFVuZm9ydHVuYXRlbHksIHlvdSdsbCBuZWVkIGEgaGVscGVyIHNjcmlwdCB0byB0cmFuc2Zvcm0gdGhlIGtlcm5lbAorc3lzZnMgZGV2aWNlIG5hbWUgaW50byB0aGUgd2VsbCBrbm93biBkdmIgYWRhcHRlciAvIGRldmljZSBuYW1pbmcgc2NoZW1lLgorVGhlIHNjcmlwdCBzaG91bGQgYmUgY2FsbGVkICJkdmIuc2giIGFuZCBzaG91bGQgYmUgcGxhY2VkIGludG8gYSBzY3JpcHQKK2RpciB3aGVyZSB1ZGV2IGNhbiBleGVjdXRlIGl0LCBtb3N0IGxpa2VseSAvZXRjL3VkZXYvc2NyaXB0cy8KKworU28sIGNyZWF0ZSBhIG5ldyBmaWxlIC9ldGMvdWRldi9zY3JpcHRzL2R2Yi5zaCBhbmQgYWRkIHRoZSBmb2xsb3dpbmc6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1zY2huaXBwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKy9iaW4vZWNobyAkMSB8IC9iaW4vc2VkIC1lICdzLGR2YlwoWzAtOV1cKVwuXChbXjAtOV0qXClcKFswLTldXCksZHZiL2FkYXB0ZXJcMS9cMlwzLCcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXNjaG5pcHAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9uJ3QgZm9yZ2V0IHRvIG1ha2UgdGhlIHNjcmlwdCBleGVjdXRhYmxlIHdpdGggImNobW9kIi4KKworMS4gWW91IG5lZWQgdG8gY3JlYXRlIGEgcHJvcGVyIHVkZXYgcnVsZSB0aGF0IHdpbGwgY3JlYXRlIHRoZSBkZXZpY2Ugbm9kZXMKK2xpa2UgeW91IGtub3cgdGhlbS4gQWxsIHJlYWwgZGlzdHJpYnV0aW9ucyBvdXQgdGhlcmUgc2NhbiB0aGUgL2V0Yy91ZGV2L3J1bGVzLmQKK2RpcmVjdG9yeSBmb3IgcnVsZSBmaWxlcy4gVGhlIG1haW4gdWRldiBjb25maWd1cmF0aW9uIGZpbGUgL2V0Yy91ZGV2L3VkZXYuY29uZgord2lsbCB0ZWxsIHlvdSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBydWxlcyBhcmUsIG1vc3QgbGlrZWx5IGl0J3MgL2V0Yy91ZGV2L3J1bGVzLmQvCisKK0NyZWF0ZSBhIG5ldyBydWxlIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnkgY2FsbGVkICJkdmIucnVsZSIgYW5kIGFkZCB0aGUgZm9sbG93aW5nIGxpbmU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1zY2huaXBwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitLRVJORUw9ImR2YioiLCBQUk9HUkFNPSIvZXRjL3VkZXYvc2NyaXB0cy9kdmIuc2ggJWsiLCBOQU1FPSIlYyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXNjaG5pcHAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgbW9yZSBjb250cm9sIG92ZXIgdGhlIGRldmljZSBub2RlcyAoZm9yIGV4YW1wbGUgYSBzcGVjaWFsIGdyb3VwIG1lbWJlcnNoaXApCitoYXZlIGEgbG9vayBhdCAibWFuIHVkZXYiLgorCitGb3IgZXZlcnkgZGV2aWNlIHRoYXQgcmVnaXN0ZXJzIHRvIHRoZSBzeXNmcyBzdWJzeXN0ZW0gd2l0aCBhICJkdmIiIHByZWZpeCwKK3RoZSBoZWxwZXIgc2NyaXB0IC9ldGMvdWRldi9zY3JpcHRzL2R2Yi5zaCBpcyBpbnZva2VkLCB3aGljaCB3aWxsIHRoZW4KK2NyZWF0ZSB0aGUgcHJvcGVyIGRldmljZSBub2RlIGluIHlvdXIgL2Rldi8gZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MGE4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Vhcmx5LXVzZXJzcGFjZS9SRUFETUUKQEAgLTAsMCArMSwxNTIgQEAKK0Vhcmx5IHVzZXJzcGFjZSBzdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitMYXN0IHVwZGF0ZTogMjAwNC0xMi0yMCB0bGgKKworCisiRWFybHkgdXNlcnNwYWNlIiBpcyBhIHNldCBvZiBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHRoYXQgcHJvdmlkZQordmFyaW91cyBwaWVjZXMgb2YgZnVuY3Rpb25hbGl0eSB0aGF0IGFyZSBpbXBvcnRhbnQgZW5vdWdoIHRvIGJlCithdmFpbGFibGUgd2hpbGUgYSBMaW51eCBrZXJuZWwgaXMgY29taW5nIHVwLCBidXQgdGhhdCBkb24ndCBuZWVkIHRvIGJlCitydW4gaW5zaWRlIHRoZSBrZXJuZWwgaXRzZWxmLgorCitJdCBjb25zaXN0cyBvZiBzZXZlcmFsIG1ham9yIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHM6CisKKy0gZ2VuX2luaXRfY3BpbywgYSBwcm9ncmFtIHRoYXQgYnVpbGRzIGEgY3Bpby1mb3JtYXQgYXJjaGl2ZQorICBjb250YWluaW5nIGEgcm9vdCBmaWxlc3lzdGVtIGltYWdlLiAgVGhpcyBhcmNoaXZlIGlzIGNvbXByZXNzZWQsIGFuZAorICB0aGUgY29tcHJlc3NlZCBpbWFnZSBpcyBsaW5rZWQgaW50byB0aGUga2VybmVsIGltYWdlLgorLSBpbml0cmFtZnMsIGEgY2h1bmsgb2YgY29kZSB0aGF0IHVucGFja3MgdGhlIGNvbXByZXNzZWQgY3BpbyBpbWFnZQorICBtaWR3YXkgdGhyb3VnaCB0aGUga2VybmVsIGJvb3QgcHJvY2Vzcy4KKy0ga2xpYmMsIGEgdXNlcnNwYWNlIEMgbGlicmFyeSwgY3VycmVudGx5IHBhY2thZ2VkIHNlcGFyYXRlbHksIHRoYXQgaXMKKyAgb3B0aW1pemVkIGZvciBjb3JyZWN0bmVzcyBhbmQgc21hbGwgc2l6ZS4KKworVGhlIGNwaW8gZmlsZSBmb3JtYXQgdXNlZCBieSBpbml0cmFtZnMgaXMgdGhlICJuZXdjIiAoYWthICJjcGlvIC1jIikKK2Zvcm1hdCwgYW5kIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgImJ1ZmZlci1mb3JtYXQudHh0Ii4gIFRoZXJlIGFyZQordHdvIHdheXMgdG8gYWRkIGFuIGVhcmx5IHVzZXJzcGFjZSBpbWFnZTogc3BlY2lmeSBhbiBleGlzdGluZyBjcGlvCithcmNoaXZlIHRvIGJlIHVzZWQgYXMgdGhlIGltYWdlIG9yIGhhdmUgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIGJ1aWxkCit0aGUgaW1hZ2UgZnJvbSBzcGVjaWZpY2F0aW9ucy4KKworQ1BJTyBBUkNISVZFIG1ldGhvZAorCitZb3UgY2FuIGNyZWF0ZSBhIGNwaW8gYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBlYXJseSB1c2Vyc3BhY2UgaW1hZ2UuCitZb3VyZSBjcGlvIGFyY2hpdmUgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSBhbmQgaXQKK3dpbGwgYmUgdXNlZCBkaXJlY3RseS4gIE9ubHkgYSBzaW5nbGUgY3BpbyBmaWxlIG1heSBiZSBzcGVjaWZpZWQgaW4KK0NPTkZJR19JTklUUkFNRlNfU09VUkNFIGFuZCBkaXJlY3RvcnkgYW5kIGZpbGUgbmFtZXMgYXJlIG5vdCBhbGxvd2VkIGluCitjb21iaW5hdGlvbiB3aXRoIGEgY3BpbyBhcmNoaXZlLgorCitJTUFHRSBCVUlMRElORyBtZXRob2QKKworVGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIGNhbiBhbHNvIGJ1aWxkIGFuIGVhcmx5IHVzZXJzcGFjZSBpbWFnZSBmcm9tCitzb3VyY2UgcGFydHMgcmF0aGVyIHRoYW4gc3VwcGx5aW5nIGEgY3BpbyBhcmNoaXZlLiAgVGhpcyBtZXRob2QgcHJvdmlkZXMKK2Egd2F5IHRvIGNyZWF0ZSBpbWFnZXMgd2l0aCByb290LW93bmVkIGZpbGVzIGV2ZW4gdGhvdWdoIHRoZSBpbWFnZSB3YXMKK2J1aWx0IGJ5IGFuIHVucHJpdmlsZWdlZCB1c2VyLgorCitUaGUgaW1hZ2UgaXMgc3BlY2lmaWVkIGFzIG9uZSBvciBtb3JlIHNvdXJjZXMgaW4KK0NPTkZJR19JTklUUkFNRlNfU09VUkNFLiAgU291cmNlcyBjYW4gYmUgZWl0aGVyIGRpcmVjdG9yaWVzIG9yIGZpbGVzIC0KK2NwaW8gYXJjaGl2ZXMgYXJlICpub3QqIGFsbG93ZWQgd2hlbiBidWlsZGluZyBmcm9tIHNvdXJjZXMuCisKK0Egc291cmNlIGRpcmVjdG9yeSB3aWxsIGhhdmUgaXQgYW5kIGFsbCBvZiBpdCdzIGNvbnRlbnRzIHBhY2thZ2VkLiAgVGhlCitzcGVjaWZpZWQgZGlyZWN0b3J5IG5hbWUgd2lsbCBiZSBtYXBwZWQgdG8gJy8nLiAgV2hlbiBwYWNrYWdpbmcgYQorZGlyZWN0b3J5LCBsaW1pdGVkIHVzZXIgYW5kIGdyb3VwIElEIHRyYW5zbGF0aW9uIGNhbiBiZSBwZXJmb3JtZWQuCitJTklUUkFNRlNfUk9PVF9VSUQgY2FuIGJlIHNldCB0byBhIHVzZXIgSUQgdGhhdCBuZWVkcyB0byBiZSBtYXBwZWQgdG8KK3VzZXIgcm9vdCAoMCkuICBJTklUUkFNRlNfUk9PVF9HSUQgY2FuIGJlIHNldCB0byBhIGdyb3VwIElEIHRoYXQgbmVlZHMKK3RvIGJlIG1hcHBlZCB0byBncm91cCByb290ICgwKS4KKworQSBzb3VyY2UgZmlsZSBtdXN0IGJlIGRpcmVjdGl2ZXMgaW4gdGhlIGZvcm1hdCByZXF1aXJlZCBieSB0aGUKK3Vzci9nZW5faW5pdF9jcGlvIHV0aWxpdHkgKHJ1biAndXNyL2dlbl9pbml0X2NwaW8gLS1oZWxwJyB0byBnZXQgdGhlCitmaWxlIGZvcm1hdCkuICBUaGUgZGlyZWN0aXZlcyBpbiB0aGUgZmlsZSB3aWxsIGJlIHBhc3NlZCBkaXJlY3RseSB0bwordXNyL2dlbl9pbml0X2NwaW8uCisKK1doZW4gYSBjb21iaW5hdGlvbiBvZiBkaXJlY3RvcmllcyBhbmQgZmlsZXMgYXJlIHNwZWNpZmllZCB0aGVuIHRoZQoraW5pdHJhbWZzIGltYWdlIHdpbGwgYmUgYW4gYWdncmVnYXRlIG9mIGFsbCBvZiB0aGVtLiAgSW4gdGhpcyB3YXkgYSB1c2VyCitjYW4gY3JlYXRlIGEgJ3Jvb3QtaW1hZ2UnIGRpcmVjdG9yeSBhbmQgaW5zdGFsbCBhbGwgZmlsZXMgaW50byBpdC4KK0JlY2F1c2UgZGV2aWNlLXNwZWNpYWwgZmlsZXMgY2Fubm90IGJlIGNyZWF0ZWQgYnkgYSB1bnByaXZpbGVnZWQgdXNlciwKK3NwZWNpYWwgZmlsZXMgY2FuIGJlIGxpc3RlZCBpbiBhICdyb290LWZpbGVzJyBmaWxlLiAgQm90aCAncm9vdC1pbWFnZScKK2FuZCAncm9vdC1maWxlcycgY2FuIGJlIGxpc3RlZCBpbiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRSBhbmQgYSBjb21wbGV0ZQorZWFybHkgdXNlcnNwYWNlIGltYWdlIGNhbiBiZSBidWlsdCBieSBhbiB1bnByaXZpbGVnZWQgdXNlci4KKworQXMgYSB0ZWNobmljYWwgbm90ZSwgd2hlbiBkaXJlY3RvcmllcyBhbmQgZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlCitlbnRpcmUgQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UgaXMgcGFzc2VkIHRvCitzY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaC4gIFRoaXMgbWVhbnMgdGhhdCBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRQorY2FuIHJlYWxseSBiZSBpbnRlcnByZXRlZCBhcyBhbnkgbGVnYWwgYXJndW1lbnQgdG8KK2dlbl9pbml0cmFtZnNfbGlzdC5zaC4gIElmIGEgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudCB0aGVuCit0aGUgY29udGVudHMgYXJlIHNjYW5uZWQsIHVpZC9naWQgdHJhbnNsYXRpb24gaXMgcGVyZm9ybWVkLCBhbmQKK3Vzci9nZW5faW5pdF9jcGlvIGZpbGUgZGlyZWN0aXZlcyBhcmUgb3V0cHV0LiAgSWYgYSBkaXJlY3RvcnkgaXMKK3NwZWNpZmllZCBhcyBhbiBhcnVnZW1udCB0byBzY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaCB0aGVuIHRoZQorY29udGVudHMgb2YgdGhlIGZpbGUgYXJlIHNpbXBseSBjb3BpZWQgdG8gdGhlIG91dHB1dC4gIEFsbCBvZiB0aGUgb3V0cHV0CitkaXJlY3RpdmVzIGZyb20gZGlyZWN0b3J5IHNjYW5uaW5nIGFuZCBmaWxlIGNvbnRlbnRzIGNvcHlpbmcgYXJlCitwcm9jZXNzZWQgYnkgdXNyL2dlbl9pbml0X2NwaW8uCisKK1NlZSBhbHNvICdzY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaCAtaCcuCisKK1doZXJlJ3MgdGhpcyBhbGwgbGVhZGluZz8KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGtsaWJjIGRpc3RyaWJ1dGlvbiBjb250YWlucyBzb21lIG9mIHRoZSBuZWNlc3Nhcnkgc29mdHdhcmUgdG8gbWFrZQorZWFybHkgdXNlcnNwYWNlIHVzZWZ1bC4gIFRoZSBrbGliYyBkaXN0cmlidXRpb24gaXMgY3VycmVudGx5CittYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUga2VybmVsLCBidXQgdGhpcyBtYXkgY2hhbmdlIGVhcmx5IGluCit0aGUgMi43IGVyYSAoaXQgbWlzc2VkIHRoZSBib2F0IGZvciAyLjUpLgorCitZb3UgY2FuIG9idGFpbiBzb21ld2hhdCBpbmZyZXF1ZW50IHNuYXBzaG90cyBvZiBrbGliYyBmcm9tCitmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgvbGlicy9rbGliYy8KKworRm9yIGFjdGl2ZSB1c2VycywgeW91IGFyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBrbGliYyBCaXRLZWVwZXIKK3JlcG9zaXRvcmllcywgYXQgaHR0cDovL2tsaWJjLmJrYml0cy5uZXQvCisKK1RoZSBzdGFuZGFsb25lIGtsaWJjIGRpc3RyaWJ1dGlvbiBjdXJyZW50bHkgcHJvdmlkZXMgdGhyZWUgY29tcG9uZW50cywKK2luIGFkZGl0aW9uIHRvIHRoZSBrbGliYyBsaWJyYXJ5OgorCistIGlwY29uZmlnLCBhIHByb2dyYW0gdGhhdCBjb25maWd1cmVzIG5ldHdvcmsgaW50ZXJmYWNlcy4gIEl0IGNhbgorICBjb25maWd1cmUgdGhlbSBzdGF0aWNhbGx5LCBvciB1c2UgREhDUCB0byBvYnRhaW4gaW5mb3JtYXRpb24KKyAgZHluYW1pY2FsbHkgKGFrYSAiSVAgYXV0b2NvbmZpZ3VyYXRpb24iKS4KKy0gbmZzbW91bnQsIGEgcHJvZ3JhbSB0aGF0IGNhbiBtb3VudCBhbiBORlMgZmlsZXN5c3RlbS4KKy0ga2luaXQsIHRoZSAiZ2x1ZSIgdGhhdCB1c2VzIGlwY29uZmlnIGFuZCBuZnNtb3VudCB0byByZXBsYWNlIHRoZSBvbGQKKyAgc3VwcG9ydCBmb3IgSVAgYXV0b2NvbmZpZywgbW91bnQgYSBmaWxlc3lzdGVtIG92ZXIgTkZTLCBhbmQgY29udGludWUKKyAgc3lzdGVtIGJvb3QgdXNpbmcgdGhhdCBmaWxlc3lzdGVtIGFzIHJvb3QuCisKK2tpbml0IGlzIGJ1aWx0IGFzIGEgc2luZ2xlIHN0YXRpY2FsbHkgbGlua2VkIGJpbmFyeSB0byBzYXZlIHNwYWNlLgorCitFdmVudHVhbGx5LCBzZXZlcmFsIG1vcmUgY2h1bmtzIG9mIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHdpbGwgaG9wZWZ1bGx5Cittb3ZlIHRvIGVhcmx5IHVzZXJzcGFjZToKKworLSBBbG1vc3QgYWxsIG9mIGluaXQvZG9fbW91bnRzKiAodGhlIGJlZ2lubmluZyBvZiB0aGlzIGlzIGFscmVhZHkgaW4KKyAgcGxhY2UpCistIEFDUEkgdGFibGUgcGFyc2luZworLSBJbnNlcnQgdW53aWVsZHkgc3Vic3lzdGVtIHRoYXQgZG9lc24ndCByZWFsbHkgbmVlZCB0byBiZSBpbiBrZXJuZWwKKyAgc3BhY2UgaGVyZQorCitJZiBraW5pdCBkb2Vzbid0IG1lZXQgeW91ciBjdXJyZW50IG5lZWRzIGFuZCB5b3UndmUgZ290IGJ5dGVzIHRvIGJ1cm4sCit0aGUga2xpYmMgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgc21hbGwgQm91cm5lLWNvbXBhdGlibGUgc2hlbGwgKGFzaCkKK2FuZCBhIG51bWJlciBvZiBvdGhlciB1dGlsaXRpZXMsIHNvIHlvdSBjYW4gcmVwbGFjZSBraW5pdCBhbmQgYnVpbGQKK2N1c3RvbSBpbml0cmFtZnMgaW1hZ2VzIHRoYXQgbWVldCB5b3VyIG5lZWRzIGV4YWN0bHkuCisKK0ZvciBxdWVzdGlvbnMgYW5kIGhlbHAsIHlvdSBjYW4gc2lnbiB1cCBmb3IgdGhlIGVhcmx5IHVzZXJzcGFjZQorbWFpbGluZyBsaXN0IGF0IGh0dHA6Ly93d3cuenl0b3IuY29tL21haWxtYW4vbGlzdGluZm8va2xpYmMKKworSG93IGRvZXMgaXQgd29yaz8KKz09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgaGFzIGN1cnJlbnRseSAzIHdheXMgdG8gbW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbToKKworYSkgYWxsIHJlcXVpcmVkIGRldmljZSBhbmQgZmlsZXN5c3RlbSBkcml2ZXJzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgbm8KKyAgIGluaXRyZC4gIGluaXQvbWFpbi5jOmluaXQoKSB3aWxsIGNhbGwgcHJlcGFyZV9uYW1lc3BhY2UoKSB0byBtb3VudCB0aGUKKyAgIGZpbmFsIHJvb3QgZmlsZXN5c3RlbSwgYmFzZWQgb24gdGhlIHJvb3Q9IG9wdGlvbiBhbmQgb3B0aW9uYWwgaW5pdD0gdG8gcnVuCisgICBzb21lIG90aGVyIGluaXQgYmluYXJ5IHRoYW4gbGlzdGVkIGF0IHRoZSBlbmQgb2YgaW5pdC9tYWluLmM6aW5pdCgpLgorCitiKSBzb21lIGRldmljZSBhbmQgZmlsZXN5c3RlbSBkcml2ZXJzIGJ1aWx0IGFzIG1vZHVsZXMgYW5kIHN0b3JlZCBpbiBhbgorICAgaW5pdHJkLiAgVGhlIGluaXRyZCBtdXN0IGNvbnRhaW4gYSBiaW5hcnkgJy9saW51eHJjJyB3aGljaCBpcyBzdXBwb3NlZCB0bworICAgbG9hZCB0aGVzZSBkcml2ZXIgbW9kdWxlcy4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gbW91bnQgdGhlIGZpbmFsIHJvb3QKKyAgIGZpbGVzeXN0ZW0gdmlhIGxpbnV4cmMgYW5kIHVzZSB0aGUgcGl2b3Rfcm9vdCBzeXNjYWxsLiAgVGhlIGluaXRyZCBpcworICAgbW91bnRlZCBhbmQgZXhlY3V0ZWQgdmlhIHByZXBhcmVfbmFtZXNwYWNlKCkuCisKK2MpIHVzaW5nIGluaXRyYW1mcy4gIFRoZSBjYWxsIHRvIHByZXBhcmVfbmFtZXNwYWNlKCkgbXVzdCBiZSBza2lwcGVkLgorICAgVGhpcyBtZWFucyB0aGF0IGEgYmluYXJ5IG11c3QgZG8gYWxsIHRoZSB3b3JrLiAgU2FpZCBiaW5hcnkgY2FuIGJlIHN0b3JlZAorICAgaW50byBpbml0cmFtZnMgZWl0aGVyIHZpYSBtb2RpZnlpbmcgdXNyL2dlbl9pbml0X2NwaW8uYyBvciB2aWEgdGhlIG5ldworICAgaW5pdHJkIGZvcm1hdCwgYW4gY3BpbyBhcmNoaXZlLiAgSXQgbXVzdCBiZSBjYWxsZWQgIi9pbml0Ii4gIFRoaXMgYmluYXJ5CisgICBpcyByZXNwb25zaWJsZSB0byBkbyBhbGwgdGhlIHRoaW5ncyBwcmVwYXJlX25hbWVzcGFjZSgpIHdvdWxkIGRvLgorCisgICBUbyByZW1haW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSAvaW5pdCBiaW5hcnkgd2lsbCBvbmx5IHJ1biBpZiBpdAorICAgY29tZXMgdmlhIGFuIGluaXRyYW1mcyBjcGlvIGFyY2hpdmUuICBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwKKyAgIGluaXQvbWFpbi5jOmluaXQoKSB3aWxsIHJ1biBwcmVwYXJlX25hbWVzcGFjZSgpIHRvIG1vdW50IHRoZSBmaW5hbCByb290CisgICBhbmQgZXhlYyBvbmUgb2YgdGhlIHByZWRlZmluZWQgaW5pdCBiaW5hcmllcy4KKworQnJ5YW4gTydTdWxsaXZhbiA8Ym9zQHNlcnBlbnRpbmUuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvYnVmZmVyLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2Vhcmx5LXVzZXJzcGFjZS9idWZmZXItZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZkN2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9lYXJseS11c2Vyc3BhY2UvYnVmZmVyLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxMTIgQEAKKwkJICAgICAgIGluaXRyYW1mcyBidWZmZXIgZm9ybWF0CisJCSAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICAgICBBbCBWaXJvLCBILiBQZXRlciBBbnZpbgorCQkgICAgICBMYXN0IHJldmlzaW9uOiAyMDAyLTAxLTEzCisKK1N0YXJ0aW5nIHdpdGgga2VybmVsIDIuNS54LCB0aGUgb2xkICJpbml0aWFsIHJhbWRpc2siIHByb3RvY29sIGlzCitnZXR0aW5nIHtyZXBsYWNlZC9jb21wbGVtZW50ZWR9IHdpdGggdGhlIG5ldyAiaW5pdGlhbCByYW1mcyIKKyhpbml0cmFtZnMpIHByb3RvY29sLiAgVGhlIGluaXRyYW1mcyBjb250ZW50cyBpcyBwYXNzZWQgdXNpbmcgdGhlIHNhbWUKK21lbW9yeSBidWZmZXIgcHJvdG9jb2wgdXNlZCBieSB0aGUgaW5pdHJkIHByb3RvY29sLCBidXQgdGhlIGNvbnRlbnRzCitpcyBkaWZmZXJlbnQuICBUaGUgaW5pdHJhbWZzIGJ1ZmZlciBjb250YWlucyBhbiBhcmNoaXZlIHdoaWNoIGlzCitleHBhbmRlZCBpbnRvIGEgcmFtZnMgZmlsZXN5c3RlbTsgdGhpcyBkb2N1bWVudCBkZXRhaWxzIHRoZSBmb3JtYXQgb2YKK3RoZSBpbml0cmFtZnMgYnVmZmVyIGZvcm1hdC4KKworVGhlIGluaXRyYW1mcyBidWZmZXIgZm9ybWF0IGlzIGJhc2VkIGFyb3VuZCB0aGUgIm5ld2MiIG9yICJjcmMiIENQSU8KK2Zvcm1hdHMsIGFuZCBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBjcGlvKDEpIHV0aWxpdHkuICBUaGUgY3BpbworYXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB1c2luZyBnemlwKDEpLiAgT25lIHZhbGlkIHZlcnNpb24gb2YgYW4KK2luaXRyYW1mcyBidWZmZXIgaXMgdGh1cyBhIHNpbmdsZSAuY3Bpby5neiBmaWxlLgorCitUaGUgZnVsbCBmb3JtYXQgb2YgdGhlIGluaXRyYW1mcyBidWZmZXIgaXMgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nCitncmFtbWFyLCB3aGVyZToKKwkqCWlzIHVzZWQgdG8gaW5kaWNhdGUgIjAgb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiIKKwkofCkJaW5kaWNhdGVzIGFsdGVybmF0aXZlcworCSsJaW5kaWNhdGVzIGNvbmNhdGVuYXRpb24KKwlHWklQKCkJaW5kaWNhdGVzIHRoZSBnemlwKDEpIG9mIHRoZSBvcGVyYW5kCisJQUxHTihuKQltZWFucyBwYWRkaW5nIHdpdGggbnVsbCBieXRlcyB0byBhbiBuLWJ5dGUgYm91bmRhcnkKKworCWluaXRyYW1mcyAgOj0gKCJcMCIgfCBjcGlvX2FyY2hpdmUgfCBjcGlvX2d6aXBfYXJjaGl2ZSkqCisKKwljcGlvX2d6aXBfYXJjaGl2ZSA6PSBHWklQKGNwaW9fYXJjaGl2ZSkKKworCWNwaW9fYXJjaGl2ZSA6PSBjcGlvX2ZpbGUqICsgKDxub3RoaW5nPiB8IGNwaW9fdHJhaWxlcikKKworCWNwaW9fZmlsZSA6PSBBTEdOKDQpICsgY3Bpb19oZWFkZXIgKyBmaWxlbmFtZSArICJcMCIgKyBBTEdOKDQpICsgZGF0YQorCisJY3Bpb190cmFpbGVyIDo9IEFMR04oNCkgKyBjcGlvX2hlYWRlciArICJUUkFJTEVSISEhXDAiICsgQUxHTig0KQorCisKK0luIGh1bWFuIHRlcm1zLCB0aGUgaW5pdHJhbWZzIGJ1ZmZlciBjb250YWlucyBhIGNvbGxlY3Rpb24gb2YKK2NvbXByZXNzZWQgYW5kL29yIHVuY29tcHJlc3NlZCBjcGlvIGFyY2hpdmVzIChpbiB0aGUgIm5ld2MiIG9yICJjcmMiCitmb3JtYXRzKTsgYXJiaXRyYXJ5IGFtb3VudHMgemVybyBieXRlcyAoZm9yIHBhZGRpbmcpIGNhbiBiZSBhZGRlZAorYmV0d2VlbiBtZW1iZXJzLgorCitUaGUgY3BpbyAiVFJBSUxFUiEhISIgZW50cnkgKGNwaW8gZW5kLW9mLWFyY2hpdmUpIGlzIG9wdGlvbmFsLCBidXQgaXMKK25vdCBpZ25vcmVkOyBzZWUgImhhbmRsaW5nIG9mIGhhcmQgbGlua3MiIGJlbG93LgorCitUaGUgc3RydWN0dXJlIG9mIHRoZSBjcGlvX2hlYWRlciBpcyBhcyBmb2xsb3dzIChhbGwgZmllbGRzIGNvbnRhaW4KK2hleGFkZWNpbWFsIEFTQ0lJIG51bWJlcnMgZnVsbHkgcGFkZGVkIHdpdGggJzAnIG9uIHRoZSBsZWZ0IHRvIHRoZQorZnVsbCB3aWR0aCBvZiB0aGUgZmllbGQsIGZvciBleGFtcGxlLCB0aGUgaW50ZWdlciA0NzgwIGlzIHJlcHJlc2VudGVkCitieSB0aGUgQVNDSUkgc3RyaW5nICIwMDAwMTJhYyIpOgorCitGaWVsZCBuYW1lICAgIEZpZWxkIHNpemUJIE1lYW5pbmcKK2NfbWFnaWMJICAgICAgNiBieXRlcwkJIFRoZSBzdHJpbmcgIjA3MDcwMSIgb3IgIjA3MDcwMiIKK2NfaW5vCSAgICAgIDggYnl0ZXMJCSBGaWxlIGlub2RlIG51bWJlcgorY19tb2RlCSAgICAgIDggYnl0ZXMJCSBGaWxlIG1vZGUgYW5kIHBlcm1pc3Npb25zCitjX3VpZAkgICAgICA4IGJ5dGVzCQkgRmlsZSB1aWQKK2NfZ2lkCSAgICAgIDggYnl0ZXMJCSBGaWxlIGdpZAorY19ubGluawkgICAgICA4IGJ5dGVzCQkgTnVtYmVyIG9mIGxpbmtzCitjX210aW1lCSAgICAgIDggYnl0ZXMJCSBNb2RpZmljYXRpb24gdGltZQorY19maWxlc2l6ZSAgICA4IGJ5dGVzCQkgU2l6ZSBvZiBkYXRhIGZpZWxkCitjX21hagkgICAgICA4IGJ5dGVzCQkgTWFqb3IgcGFydCBvZiBmaWxlIGRldmljZSBudW1iZXIKK2NfbWluCSAgICAgIDggYnl0ZXMJCSBNaW5vciBwYXJ0IG9mIGZpbGUgZGV2aWNlIG51bWJlcgorY19ybWFqCSAgICAgIDggYnl0ZXMJCSBNYWpvciBwYXJ0IG9mIGRldmljZSBub2RlIHJlZmVyZW5jZQorY19ybWluCSAgICAgIDggYnl0ZXMJCSBNaW5vciBwYXJ0IG9mIGRldmljZSBub2RlIHJlZmVyZW5jZQorY19uYW1lc2l6ZSAgICA4IGJ5dGVzCQkgTGVuZ3RoIG9mIGZpbGVuYW1lLCBpbmNsdWRpbmcgZmluYWwgXDAKK2NfY2hrc3VtICAgICAgOCBieXRlcwkJIENoZWNrc3VtIG9mIGRhdGEgZmllbGQgaWYgY19tYWdpYyBpcyAwNzA3MDI7CisJCQkJIG90aGVyd2lzZSB6ZXJvCisKK1RoZSBjX21vZGUgZmllbGQgbWF0Y2hlcyB0aGUgY29udGVudHMgb2Ygc3RfbW9kZSByZXR1cm5lZCBieSBzdGF0KDIpCitvbiBMaW51eCwgYW5kIGVuY29kZXMgdGhlIGZpbGUgdHlwZSBhbmQgZmlsZSBwZXJtaXNzaW9ucy4KKworVGhlIGNfZmlsZXNpemUgc2hvdWxkIGJlIHplcm8gZm9yIGFueSBmaWxlIHdoaWNoIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZQorb3Igc3ltbGluay4KKworVGhlIGNfY2hrc3VtIGZpZWxkIGNvbnRhaW5zIGEgc2ltcGxlIDMyLWJpdCB1bnNpZ25lZCBzdW0gb2YgYWxsIHRoZQorYnl0ZXMgaW4gdGhlIGRhdGEgZmllbGQuICBjcGlvKDEpIHJlZmVycyB0byB0aGlzIGFzICJjcmMiLCB3aGljaCBpcworY2xlYXJseSBpbmNvcnJlY3QgKGEgY3ljbGljIHJlZHVuZGFuY3kgY2hlY2sgaXMgYSBkaWZmZXJlbnQgYW5kCitzaWduaWZpY2FudGx5IHN0cm9uZ2VyIGludGVncml0eSBjaGVjayksIGhvd2V2ZXIsIHRoaXMgaXMgdGhlCithbGdvcml0aG0gdXNlZC4KKworSWYgdGhlIGZpbGVuYW1lIGlzICJUUkFJTEVSISEhIiB0aGlzIGlzIGFjdHVhbGx5IGFuIGVuZC1vZi1hcmNoaXZlCittYXJrZXI7IHRoZSBjX2ZpbGVzaXplIGZvciBhbiBlbmQtb2YtYXJjaGl2ZSBtYXJrZXIgbXVzdCBiZSB6ZXJvLgorCisKKyoqKiBIYW5kbGluZyBvZiBoYXJkIGxpbmtzCisKK1doZW4gYSBub25kaXJlY3Rvcnkgd2l0aCBjX25saW5rID4gMSBpcyBzZWVuLCB0aGUgKGNfbWFqLGNfbWluLGNfaW5vKQordHVwbGUgaXMgbG9va2VkIHVwIGluIGEgdHVwbGUgYnVmZmVyLiAgSWYgbm90IGZvdW5kLCBpdCBpcyBlbnRlcmVkIGluCit0aGUgdHVwbGUgYnVmZmVyIGFuZCB0aGUgZW50cnkgaXMgY3JlYXRlZCBhcyB1c3VhbDsgaWYgZm91bmQsIGEgaGFyZAorbGluayByYXRoZXIgdGhhbiBhIHNlY29uZCBjb3B5IG9mIHRoZSBmaWxlIGlzIGNyZWF0ZWQuICBJdCBpcyBub3QKK25lY2Vzc2FyeSAoYnV0IHBlcm1pdHRlZCkgdG8gaW5jbHVkZSBhIHNlY29uZCBjb3B5IG9mIHRoZSBmaWxlCitjb250ZW50czsgaWYgdGhlIGZpbGUgY29udGVudHMgaXMgbm90IGluY2x1ZGVkLCB0aGUgY19maWxlc2l6ZSBmaWVsZAorc2hvdWxkIGJlIHNldCB0byB6ZXJvIHRvIGluZGljYXRlIG5vIGRhdGEgc2VjdGlvbiBmb2xsb3dzLiAgSWYgZGF0YSBpcworcHJlc2VudCwgdGhlIHByZXZpb3VzIGluc3RhbmNlIG9mIHRoZSBmaWxlIGlzIG92ZXJ3cml0dGVuOyB0aGlzIGFsbG93cwordGhlIGRhdGEtY2FycnlpbmcgaW5zdGFuY2Ugb2YgYSBmaWxlIHRvIG9jY3VyIGFueXdoZXJlIGluIHRoZSBzZXF1ZW5jZQorKEdOVSBjcGlvIGlzIHJlcG9ydGVkIHRvIGF0dGFjaCB0aGUgZGF0YSB0byB0aGUgbGFzdCBpbnN0YW5jZSBvZiBhCitmaWxlIG9ubHkuKQorCitjX2ZpbGVzaXplIG11c3Qgbm90IGJlIHplcm8gZm9yIGEgc3ltbGluay4KKworV2hlbiBhICJUUkFJTEVSISEhIiBlbmQtb2YtYXJjaGl2ZSBtYXJrZXIgaXMgc2VlbiwgdGhlIHR1cGxlIGJ1ZmZlciBpcworcmVzZXQuICBUaGlzIHBlcm1pdHMgYXJjaGl2ZXMgd2hpY2ggYXJlIGdlbmVyYXRlZCBpbmRlcGVuZGVudGx5IHRvIGJlCitjb25jYXRlbmF0ZWQuCisKK1RvIGNvbWJpbmUgZmlsZSBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMgKHdpdGhvdXQgaGF2aW5nIHRvCityZWdlbmVyYXRlIHRoZSAoY19tYWosY19taW4sY19pbm8pIGZpZWxkcyksIHRoZXJlZm9yZSwgZWl0aGVyIG9uZSBvZgordGhlIGZvbGxvd2luZyB0ZWNobmlxdWVzIGNhbiBiZSB1c2VkOgorCithKSBTZXBhcmF0ZSB0aGUgZGlmZmVyZW50IGZpbGUgZGF0YSBzb3VyY2VzIHdpdGggYSAiVFJBSUxFUiEhISIKKyAgIGVuZC1vZi1hcmNoaXZlIG1hcmtlciwgb3IKKworYikgTWFrZSBzdXJlIGNfbmxpbmsgPT0gMSBmb3IgYWxsIG5vbmRpcmVjdG9yeSBlbnRyaWVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9laXNhLnR4dCBiL0RvY3VtZW50YXRpb24vZWlzYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4Mzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZWlzYS50eHQKQEAgLTAsMCArMSwyMDMgQEAKK0VJU0EgYnVzIHN1cHBvcnQgKE1hcmMgWnluZ2llciA8bWF6QHdpbGQtd2luZC5mci5ldS5vcmc+KQorCitUaGlzIGRvY3VtZW50IGdyb3VwcyByYW5kb20gbm90ZXMgYWJvdXQgcG9ydGluZyBFSVNBIGRyaXZlcnMgdG8gdGhlCituZXcgRUlTQS9zeXNmcyBBUEkuCisKK1N0YXJ0aW5nIGZyb20gdmVyc2lvbiAyLjUuNTksIHRoZSBFSVNBIGJ1cyBpcyBhbG1vc3QgZ2l2ZW4gdGhlIHNhbWUKK3N0YXR1cyBhcyBvdGhlciBtdWNoIG1vcmUgbWFpbnN0cmVhbSBidXNzZXMgc3VjaCBhcyBQQ0kgb3IgVVNCLiBUaGlzCitoYXMgYmVlbiBwb3NzaWJsZSB0aHJvdWdoIHN5c2ZzLCB3aGljaCBkZWZpbmVzIGEgbmljZSBlbm91Z2ggc2V0IG9mCithYnN0cmFjdGlvbnMgdG8gbWFuYWdlIGJ1c3NlcywgZGV2aWNlcyBhbmQgZHJpdmVycy4KKworQWx0aG91Z2ggdGhlIG5ldyBBUEkgaXMgcXVpdGUgc2ltcGxlIHRvIHVzZSwgY29udmVydGluZyBleGlzdGluZworZHJpdmVycyB0byB0aGUgbmV3IGluZnJhc3RydWN0dXJlIGlzIG5vdCBhbiBlYXN5IHRhc2sgKG1vc3RseSBiZWNhdXNlCitkZXRlY3Rpb24gY29kZSBpcyBnZW5lcmFsbHkgYWxzbyB1c2VkIHRvIHByb2JlIElTQSBjYXJkcykuIE1vcmVvdmVyLAorbW9zdCBFSVNBIGRyaXZlcnMgYXJlIGFtb25nIHRoZSBvbGRlc3QgTGludXggZHJpdmVycyBzbywgYXMgeW91IGNhbgoraW1hZ2luZSwgc29tZSBkdXN0IGhhcyBzZXR0bGVkIGhlcmUgb3ZlciB0aGUgeWVhcnMuCisKK1RoZSBFSVNBIGluZnJhc3RydWN0dXJlIGlzIG1hZGUgdXAgb2YgdGhyZWUgcGFydHMgOgorCisgICAgLSBUaGUgYnVzIGNvZGUgaW1wbGVtZW50cyBtb3N0IG9mIHRoZSBnZW5lcmljIGNvZGUuIEl0IGlzIHNoYXJlZAorICAgIGFtb25nIGFsbCB0aGUgYXJjaGl0ZWN0dXJlcyB0aGF0IHRoZSBFSVNBIGNvZGUgcnVucyBvbi4gSXQKKyAgICBpbXBsZW1lbnRzIGJ1cyBwcm9iaW5nIChkZXRlY3RpbmcgRUlTQSBjYXJkcyBhdmFpYmxlIG9uIHRoZSBidXMpLAorICAgIGFsbG9jYXRlcyBJL08gcmVzb3VyY2VzLCBhbGxvd3MgZmFuY3kgbmFtaW5nIHRocm91Z2ggc3lzZnMsIGFuZAorICAgIG9mZmVycyBpbnRlcmZhY2VzIGZvciBkcml2ZXIgdG8gcmVnaXN0ZXIuCisKKyAgICAtIFRoZSBidXMgcm9vdCBkcml2ZXIgaW1wbGVtZW50cyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZSBidXMgaGFyZHdhcmUKKyAgICBhbmQgdGhlIGdlbmVyaWMgYnVzIGNvZGUuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBkaXNjb3ZlcmluZyB0aGUKKyAgICBkZXZpY2UgaW1wbGVtZW50aW5nIHRoZSBidXMsIGFuZCBzZXR0aW5nIGl0IHVwIHRvIGJlIGxhdHRlciBwcm9iZWQKKyAgICBieSB0aGUgYnVzIGNvZGUuIFRoaXMgY2FuIGdvIGZyb20gc29tZXRoaW5nIGFzIHNpbXBsZSBhcyByZXNlcnZpbmcKKyAgICBhbiBJL08gcmVnaW9uIG9uIHg4NiwgdG8gdGhlIHJhdGhlciBtb3JlIGNvbXBsZXgsIGxpa2UgdGhlIGhwcGEKKyAgICBFSVNBIGNvZGUuIFRoaXMgaXMgdGhlIHBhcnQgdG8gaW1wbGVtZW50IGluIG9yZGVyIHRvIGhhdmUgRUlTQQorICAgIHJ1bm5pbmcgb24gYW4gIm5ldyIgcGxhdGZvcm0uCisKKyAgICAtIFRoZSBkcml2ZXIgb2ZmZXJzIHRoZSBidXMgYSBsaXN0IG9mIGRldmljZXMgdGhhdCBpdCBtYW5hZ2VzLCBhbmQKKyAgICBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgY2FsbGJhY2tzIHRvIHByb2JlIGFuZCByZWxlYXNlIGRldmljZXMKKyAgICB3aGVuZXZlciB0b2xkIHRvLgorCitFdmVyeSBmdW5jdGlvbi9zdHJ1Y3R1cmUgYmVsb3cgbGl2ZXMgaW4gPGxpbnV4L2Vpc2EuaD4sIHdoaWNoIGRlcGVuZHMKK2hlYXZpbHkgb24gPGxpbnV4L2RldmljZS5oPi4KKworKiogQnVzIHJvb3QgZHJpdmVyIDoKKworaW50IGVpc2Ffcm9vdF9yZWdpc3RlciAoc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QpOworCitUaGUgZWlzYV9yb290X3JlZ2lzdGVyIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGRldmljZSBhcyB0aGUKK3Jvb3Qgb2YgYW4gRUlTQSBidXMuIFRoZSBlaXNhX3Jvb3RfZGV2aWNlIHN0cnVjdHVyZSBob2xkcyBhIHJlZmVyZW5jZQordG8gdGhpcyBkZXZpY2UsIGFzIHdlbGwgYXMgc29tZSBwYXJhbWV0ZXJzIGZvciBwcm9iaW5nIHB1cnBvc2VzLgorCitzdHJ1Y3QgZWlzYV9yb290X2RldmljZSB7CisJc3RydWN0IGRldmljZSAgICpkZXY7CSAvKiBQb2ludGVyIHRvIGJyaWRnZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBsb25nICAgIGJ1c19iYXNlX2FkZHI7CisJaW50CQkgc2xvdHM7ICAvKiBNYXggc2xvdCBudW1iZXIgKi8KKwlpbnQJCSBmb3JjZV9wcm9iZTsgLyogUHJvYmUgZXZlbiB3aGVuIG5vIHNsb3QgMCAqLworCXU2NAkJIGRtYV9tYXNrOyAvKiBmcm9tIGJyaWRnZSBkZXZpY2UgKi8KKwlpbnQgICAgICAgICAgICAgIGJ1c19ucjsgLyogU2V0IGJ5IGVpc2Ffcm9vdF9yZWdpc3RlciAqLworCXN0cnVjdCByZXNvdXJjZSAgZWlzYV9yb290X3JlczsJLyogZGl0dG8gKi8KK307CisKK25vZGUgICAgICAgICAgOiB1c2VkIGZvciBlaXNhX3Jvb3RfcmVnaXN0ZXIgaW50ZXJuYWwgcHVycG9zZQorZGV2ICAgICAgICAgICA6IHBvaW50ZXIgdG8gdGhlIHJvb3QgZGV2aWNlCityZXMgICAgICAgICAgIDogcm9vdCBkZXZpY2UgSS9PIHJlc291cmNlCitidXNfYmFzZV9hZGRyIDogc2xvdCAwIGFkZHJlc3Mgb24gdGhpcyBidXMKK3Nsb3RzCSAgICAgIDogbWF4IHNsb3QgbnVtYmVyIHRvIHByb2JlCitmb3JjZV9wcm9iZSAgIDogUHJvYmUgZXZlbiB3aGVuIHNsb3QgMCBpcyBlbXB0eSAobm8gRUlTQSBtYWluYm9hcmQpCitkbWFfbWFzayAgICAgIDogRGVmYXVsdCBETUEgbWFzay4gVXN1YWx5IHRoZSBicmlkZ2UgZGV2aWNlIGRtYV9tYXNrLgorYnVzX25yCSAgICAgIDogdW5pcXVlIGJ1cyBpZCwgc2V0IGJ5IGVpc2Ffcm9vdF9yZWdpc3RlcgorCisqKiBEcml2ZXIgOgorCitpbnQgZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydik7Cit2b2lkIGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIgKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydik7CisKK0NsZWFyIGVub3VnaCA/CisKK3N0cnVjdCBlaXNhX2RldmljZV9pZCB7CisgICAgICAgIGNoYXIgc2lnW0VJU0FfU0lHX0xFTl07CisJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YTsKK307CisKK3N0cnVjdCBlaXNhX2RyaXZlciB7CisgICAgICAgIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCAqaWRfdGFibGU7CisgICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICAgICAgICAgZHJpdmVyOworfTsKKworaWRfdGFibGUJOiBhbiBhcnJheSBvZiBOVUxMIHRlcm1pbmF0ZWQgRUlTQSBpZCBzdHJpbmdzLAorCQkgIGZvbGxvd2VkIGJ5IGFuIGVtcHR5IHN0cmluZy4gRWFjaCBzdHJpbmcgY2FuCisJCSAgb3B0aW9ubmFseSBiZSBwYWlyZWQgd2l0aCBhIGRyaXZlci1kZXBlbmRhbnQgdmFsdWUKKwkJICAoZHJpdmVyX2RhdGEpLgorCitkcml2ZXIJCTogYSBnZW5lcmljIGRyaXZlciwgc3VjaCBhcyBkZXNjcmliZWQgaW4KKwkJICBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0LiBPbmx5IC5uYW1lLAorCQkgIC5wcm9iZSBhbmQgLnJlbW92ZSBtZW1iZXJzIGFyZSBtYW5kYXRvcnkuCisKK0FuIGV4YW1wbGUgaXMgdGhlIDNjNTl4IGRyaXZlciA6CisKK3N0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgdm9ydGV4X2Vpc2FfaWRzW10gPSB7CisJeyAiVENNNTkyMCIsIEVJU0FfM0M1OTJfT0ZGU0VUIH0sCisJeyAiVENNNTk3MCIsIEVJU0FfM0M1OTdfT0ZGU0VUIH0sCisJeyAiIiB9Cit9OworCitzdGF0aWMgc3RydWN0IGVpc2FfZHJpdmVyIHZvcnRleF9laXNhX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSB2b3J0ZXhfZWlzYV9pZHMsCisJLmRyaXZlciAgID0geworCQkubmFtZSAgICA9ICIzYzU5eCIsCisJCS5wcm9iZSAgID0gdm9ydGV4X2Vpc2FfcHJvYmUsCisJCS5yZW1vdmUgID0gdm9ydGV4X2Vpc2FfcmVtb3ZlCisJfQorfTsKKworKiogRGV2aWNlIDoKKworVGhlIHN5c2ZzIGZyYW1ld29yayBjYWxscyAucHJvYmUgYW5kIC5yZW1vdmUgZnVuY3Rpb25zIHVwb24gZGV2aWNlCitkaXNjb3ZlcnkgYW5kIHJlbW92YWwgKG5vdGUgdGhhdCB0aGUgLnJlbW92ZSBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZAord2hlbiBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUpLgorCitCb3RoIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIGEgcG9pbnRlciB0byBhICdzdHJ1Y3QgZGV2aWNlJywgd2hpY2ggaXMKK2VuY2Fwc3VsYXRlZCBpbiBhICdzdHJ1Y3QgZWlzYV9kZXZpY2UnIGRlc2NyaWJlZCBhcyBmb2xsb3dzIDoKKworc3RydWN0IGVpc2FfZGV2aWNlIHsKKyAgICAgICAgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGlkOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgc2xvdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgc3RhdGU7CisJdW5zaWduZWQgbG9uZyAgICAgICAgIGJhc2VfYWRkcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgICAgICAgcmVzW0VJU0FfTUFYX1JFU09VUkNFU107CisJdTY0ICAgICAgICAgICAgICAgICAgIGRtYV9tYXNrOworICAgICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgZGV2OyAvKiBnZW5lcmljIGRldmljZSAqLworfTsKKworaWQJOiBFSVNBIGlkLCBhcyByZWFkIGZyb20gZGV2aWNlLiBpZC5kcml2ZXJfZGF0YSBpcyBzZXQgZnJvbSB0aGUKKwkgIG1hdGNoaW5nIGRyaXZlciBFSVNBIGlkLgorc2xvdAk6IHNsb3QgbnVtYmVyIHdoaWNoIHRoZSBkZXZpY2Ugd2FzIGRldGVjdGVkIG9uCitzdGF0ZSAgIDogc2V0IG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UuIEN1cnJlbnQKKwkgIGZsYWdzIGFyZSBFSVNBX0NPTkZJR19FTkFCTEVEIGFuZCBFSVNBX0NPTkZJR19GT1JDRUQuCityZXMJOiBzZXQgb2YgZm91ciAyNTYgYnl0ZXMgSS9PIHJlZ2lvbnMgYWxsb2NhdGVkIHRvIHRoaXMgZGV2aWNlCitkbWFfbWFzazogRE1BIG1hc2sgc2V0IGZyb20gdGhlIHBhcmVudCBkZXZpY2UuCitkZXYJOiBnZW5lcmljIGRldmljZSAoc2VlIERvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldmljZS50eHQpCisKK1lvdSBjYW4gZ2V0IHRoZSAnc3RydWN0IGVpc2FfZGV2aWNlJyBmcm9tICdzdHJ1Y3QgZGV2aWNlJyB1c2luZyB0aGUKKyd0b19laXNhX2RldmljZScgbWFjcm8uCisKKyoqIE1pc2Mgc3R1ZmYgOgorCit2b2lkIGVpc2Ffc2V0X2RydmRhdGEgKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiwgdm9pZCAqZGF0YSk7CisKK1N0b3JlcyBkYXRhIGludG8gdGhlIGRldmljZSdzIGRyaXZlcl9kYXRhIGFyZWEuCisKK3ZvaWQgKmVpc2FfZ2V0X2RydmRhdGEgKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldik6CisKK0dldHMgdGhlIHBvaW50ZXIgcHJldmlvdXNseSBzdG9yZWQgaW50byB0aGUgZGV2aWNlJ3MgZHJpdmVyX2RhdGEgYXJlYS4KKworaW50IGVpc2FfZ2V0X3JlZ2lvbl9pbmRleCAodm9pZCAqYWRkcik7CisKK1JldHVybnMgdGhlIHJlZ2lvbiBudW1iZXIgKDAgPD0geCA8IEVJU0FfTUFYX1JFU09VUkNFUykgb2YgYSBnaXZlbgorYWRkcmVzcy4KKworKiogS2VybmVsIHBhcmFtZXRlcnMgOgorCitlaXNhX2J1cy5lbmFibGVfZGV2IDoKKworQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzbG90cyB0byBiZSBlbmFibGVkLCBldmVuIGlmIHRoZSBmaXJtd2FyZQorc2V0IHRoZSBjYXJkIGFzIGRpc2FibGVkLiBUaGUgZHJpdmVyIG11c3QgYmUgYWJsZSB0byBwcm9wZXJseQoraW5pdGlhbGl6ZSB0aGUgZGV2aWNlIGluIHN1Y2ggY29uZGl0aW9ucy4KKworZWlzYV9idXMuZGlzYWJsZV9kZXYgOgorCitBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHNsb3RzIHRvIGJlIGVuYWJsZWQsIGV2ZW4gaWYgdGhlIGZpcm13YXJlCitzZXQgdGhlIGNhcmQgYXMgZW5hYmxlZC4gVGhlIGRyaXZlciB3b24ndCBiZSBjYWxsZWQgdG8gaGFuZGxlIHRoaXMKK2RldmljZS4KKwordmlydHVhbF9yb290LmZvcmNlX3Byb2JlIDoKKworRm9yY2UgdGhlIHByb2JpbmcgY29kZSB0byBwcm9iZSBFSVNBIHNsb3RzIGV2ZW4gd2hlbiBpdCBjYW5ub3QgZmluZCBhbgorRUlTQSBjb21wbGlhbnQgbWFpbmJvYXJkIChub3RoaW5nIGFwcGVhcnMgb24gc2xvdCAwKS4gRGVmYXVsdGQgdG8gMAorKGRvbid0IGZvcmNlKSwgYW5kIHNldCB0byAxIChmb3JjZSBwcm9iaW5nKSB3aGVuIGVpdGhlcgorQ09ORklHX0FMUEhBX0pFTlNFTiBvciBDT05GSUdfRUlTQV9WTEJfUFJJTUlORyBhcmUgc2V0LgorCisqKiBSYW5kb20gbm90ZXMgOgorCitDb252ZXJ0aW5nIGFuIEVJU0EgZHJpdmVyIHRvIHRoZSBuZXcgQVBJIG1vc3RseSBpbnZvbHZlcyAqZGVsZXRpbmcqCitjb2RlIChzaW5jZSBwcm9iaW5nIGlzIG5vdyBpbiB0aGUgY29yZSBFSVNBIGNvZGUpLiBVbmZvcnR1bmF0ZWx5LCBtb3N0Citkcml2ZXJzIHNoYXJlIHRoZWlyIHByb2Jpbmcgcm91dGluZSBiZXR3ZWVuIElTQSwgTUNBIGFuZCBFSVNBLiBTcGVjaWFsCitjYXJlIG11c3QgYmUgdGFrZW4gd2hlbiByaXBwaW5nIG91dCB0aGUgRUlTQSBjb2RlLCBzbyBvdGhlciBidXNzZXMKK3dvbid0IHN1ZmZlciBmcm9tIHRoZXNlIHN1cmdpY2FsIHN0cmlrZXMuLi4KKworWW91ICptdXN0IG5vdCogZXhwZWN0IGFueSBFSVNBIGRldmljZSB0byBiZSBkZXRlY3RlZCB3aGVuIHJldHVybmluZworZnJvbSBlaXNhX2RyaXZlcl9yZWdpc3Rlciwgc2luY2UgdGhlIGNoYW5jZXMgYXJlIHRoYXQgdGhlIGJ1cyBoYXMgbm90Cit5ZXQgYmVlbiBwcm9iZWQuIEluIGZhY3QsIHRoYXQncyB3aGF0IGhhcHBlbnMgbW9zdCBvZiB0aGUgdGltZSAodGhlCitidXMgcm9vdCBkcml2ZXIgdXN1YWxseSBraWNrcyBpbiByYXRoZXIgbGF0ZSBpbiB0aGUgYm9vdCBwcm9jZXNzKS4KK1VuZm9ydHVuYXRlbHksIG1vc3QgZHJpdmVycyBhcmUgZG9pbmcgdGhlIHByb2JpbmcgYnkgdGhlbXNlbHZlcywgYW5kCitleHBlY3QgdG8gaGF2ZSBleHBsb3JlZCB0aGUgd2hvbGUgbWFjaGluZSB3aGVuIHRoZXkgZXhpdCB0aGVpciBwcm9iZQorcm91dGluZS4KKworRm9yIGV4YW1wbGUsIHN3aXRjaGluZyB5b3VyIGZhdm9yaXRlIEVJU0EgU0NTSSBjYXJkIHRvIHRoZSAiaG90cGx1ZyIKK21vZGVsIGlzICJ0aGUgcmlnaHQgdGhpbmciKHRtKS4KKworKiogVGhhbmtzIDoKKworSSdkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGhlbHAgOgorLSBYYXZpZXIgQmVuaWduaSBmb3IgbGVuZGluZyBtZSBhIHdvbmRlcmZ1bCBBbHBoYSBKZW5zZW4sCistIEphbWVzIEJvdHRvbWxleSwgSmVmZiBHYXJ6aWsgZm9yIGdldHRpbmcgdGhpcyBzdHVmZiBpbnRvIHRoZSBrZXJuZWwsCistIEFuZHJpZXMgQnJvdXdlciBmb3IgY29udHJpYnV0aW5nIG51bWVyb3VzIEVJU0EgaWRzLAorLSBDYXRyaW4gSm9uZXMgZm9yIGNvcGluZyB3aXRoIGZhciB0b28gbWFueSBtYWNoaW5lcyBhdCBob21lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9leGNlcHRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9leGNlcHRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDQzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2V4Y2VwdGlvbi50eHQKQEAgLTAsMCArMSwyOTIgQEAKKyAgICAgS2VybmVsIGxldmVsIGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBMaW51eCAyLjEuOAorICBDb21tZW50YXJ5IGJ5IEpvZXJnIFBvbW1uaXR6IDxqb2VyZ0ByYWxlaWdoLmlibS5jb20+CisKK1doZW4gYSBwcm9jZXNzIHJ1bnMgaW4ga2VybmVsIG1vZGUsIGl0IG9mdGVuIGhhcyB0byBhY2Nlc3MgdXNlciAKK21vZGUgbWVtb3J5IHdob3NlIGFkZHJlc3MgaGFzIGJlZW4gcGFzc2VkIGJ5IGFuIHVudHJ1c3RlZCBwcm9ncmFtLiAKK1RvIHByb3RlY3QgaXRzZWxmIHRoZSBrZXJuZWwgaGFzIHRvIHZlcmlmeSB0aGlzIGFkZHJlc3MuCisKK0luIG9sZGVyIHZlcnNpb25zIG9mIExpbnV4IHRoaXMgd2FzIGRvbmUgd2l0aCB0aGUgCitpbnQgdmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpIAorZnVuY3Rpb24uCisKK1RoaXMgZnVuY3Rpb24gdmVyaWZpZWQgdGhhdCB0aGUgbWVtb3J5IGFyZWEgc3RhcnRpbmcgYXQgYWRkcmVzcyAKK2FkZHIgYW5kIG9mIHNpemUgc2l6ZSB3YXMgYWNjZXNzaWJsZSBmb3IgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgCitpbiB0eXBlIChyZWFkIG9yIHdyaXRlKS4gVG8gZG8gdGhpcywgdmVyaWZ5X3JlYWQgaGFkIHRvIGxvb2sgdXAgdGhlIAordmlydHVhbCBtZW1vcnkgYXJlYSAodm1hKSB0aGF0IGNvbnRhaW5lZCB0aGUgYWRkcmVzcyBhZGRyLiBJbiB0aGUgCitub3JtYWwgY2FzZSAoY29ycmVjdGx5IHdvcmtpbmcgcHJvZ3JhbSksIHRoaXMgdGVzdCB3YXMgc3VjY2Vzc2Z1bC4gCitJdCBvbmx5IGZhaWxlZCBmb3IgYSBmZXcgYnVnZ3kgcHJvZ3JhbXMuIEluIHNvbWUga2VybmVsIHByb2ZpbGluZwordGVzdHMsIHRoaXMgbm9ybWFsbHkgdW5uZWVkZWQgdmVyaWZpY2F0aW9uIHVzZWQgdXAgYSBjb25zaWRlcmFibGUKK2Ftb3VudCBvZiB0aW1lLgorCitUbyBvdmVyY29tZSB0aGlzIHNpdHVhdGlvbiwgTGludXMgZGVjaWRlZCB0byBsZXQgdGhlIHZpcnR1YWwgbWVtb3J5IAoraGFyZHdhcmUgcHJlc2VudCBpbiBldmVyeSBMaW51eC1jYXBhYmxlIENQVSBoYW5kbGUgdGhpcyB0ZXN0LgorCitIb3cgZG9lcyB0aGlzIHdvcms/CisKK1doZW5ldmVyIHRoZSBrZXJuZWwgdHJpZXMgdG8gYWNjZXNzIGFuIGFkZHJlc3MgdGhhdCBpcyBjdXJyZW50bHkgbm90IAorYWNjZXNzaWJsZSwgdGhlIENQVSBnZW5lcmF0ZXMgYSBwYWdlIGZhdWx0IGV4Y2VwdGlvbiBhbmQgY2FsbHMgdGhlIAorcGFnZSBmYXVsdCBoYW5kbGVyIAorCit2b2lkIGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKKworaW4gYXJjaC9pMzg2L21tL2ZhdWx0LmMuIFRoZSBwYXJhbWV0ZXJzIG9uIHRoZSBzdGFjayBhcmUgc2V0IHVwIGJ5IAordGhlIGxvdyBsZXZlbCBhc3NlbWJseSBnbHVlIGluIGFyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUy4gVGhlIHBhcmFtZXRlcgorcmVncyBpcyBhIHBvaW50ZXIgdG8gdGhlIHNhdmVkIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2ssIGVycm9yX2NvZGUgCitjb250YWlucyBhIHJlYXNvbiBjb2RlIGZvciB0aGUgZXhjZXB0aW9uLgorCitkb19wYWdlX2ZhdWx0IGZpcnN0IG9idGFpbnMgdGhlIHVuYWNjZXNzaWJsZSBhZGRyZXNzIGZyb20gdGhlIENQVSAKK2NvbnRyb2wgcmVnaXN0ZXIgQ1IyLiBJZiB0aGUgYWRkcmVzcyBpcyB3aXRoaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyAKK3NwYWNlIG9mIHRoZSBwcm9jZXNzLCB0aGUgZmF1bHQgcHJvYmFibHkgb2NjdXJyZWQsIGJlY2F1c2UgdGhlIHBhZ2UgCit3YXMgbm90IHN3YXBwZWQgaW4sIHdyaXRlIHByb3RlY3RlZCBvciBzb21ldGhpbmcgc2ltaWxhci4gSG93ZXZlciwgCit3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgb3RoZXIgY2FzZTogdGhlIGFkZHJlc3MgaXMgbm90IHZhbGlkLCB0aGVyZSAKK2lzIG5vIHZtYSB0aGF0IGNvbnRhaW5zIHRoaXMgYWRkcmVzcy4gSW4gdGhpcyBjYXNlLCB0aGUga2VybmVsIGp1bXBzIAordG8gdGhlIGJhZF9hcmVhIGxhYmVsLiAKKworVGhlcmUgaXQgdXNlcyB0aGUgYWRkcmVzcyBvZiB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiAKKyhpLmUuIHJlZ3MtPmVpcCkgdG8gZmluZCBhbiBhZGRyZXNzIHdoZXJlIHRoZSBleGVjdXRpb24gY2FuIGNvbnRpbnVlIAorKGZpeHVwKS4gSWYgdGhpcyBzZWFyY2ggaXMgc3VjY2Vzc2Z1bCwgdGhlIGZhdWx0IGhhbmRsZXIgbW9kaWZpZXMgdGhlIAorcmV0dXJuIGFkZHJlc3MgKGFnYWluIHJlZ3MtPmVpcCkgYW5kIHJldHVybnMuIFRoZSBleGVjdXRpb24gd2lsbCAKK2NvbnRpbnVlIGF0IHRoZSBhZGRyZXNzIGluIGZpeHVwLgorCitXaGVyZSBkb2VzIGZpeHVwIHBvaW50IHRvPworCitTaW5jZSB3ZSBqdW1wIHRvIHRoZSBjb250ZW50cyBvZiBmaXh1cCwgZml4dXAgb2J2aW91c2x5IHBvaW50cyAKK3RvIGV4ZWN1dGFibGUgY29kZS4gVGhpcyBjb2RlIGlzIGhpZGRlbiBpbnNpZGUgdGhlIHVzZXIgYWNjZXNzIG1hY3Jvcy4gCitJIGhhdmUgcGlja2VkIHRoZSBnZXRfdXNlciBtYWNybyBkZWZpbmVkIGluIGluY2x1ZGUvYXNtL3VhY2Nlc3MuaCBhcyBhbgorZXhhbXBsZS4gVGhlIGRlZmluaXRpb24gaXMgc29tZXdoYXQgaGFyZCB0byBmb2xsb3csIHNvIGxldCdzIHBlZWsgYXQgCit0aGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciBhbmQgdGhlIGNvbXBpbGVyLiBJIHNlbGVjdGVkCit0aGUgZ2V0X3VzZXIgY2FsbCBpbiBkcml2ZXJzL2NoYXIvY29uc29sZS5jIGZvciBhIGRldGFpbGVkIGV4YW1pbmF0aW9uLgorCitUaGUgb3JpZ2luYWwgY29kZSBpbiBjb25zb2xlLmMgbGluZSAxNDA1OgorICAgICAgICBnZXRfdXNlcihjLCBidWYpOworCitUaGUgcHJlcHJvY2Vzc29yIG91dHB1dCAoZWRpdGVkIHRvIGJlY29tZSBzb21ld2hhdCByZWFkYWJsZSk6CisKKygKKyAgeyAgICAgICAgCisgICAgbG9uZyBfX2d1X2VyciA9IC0gMTQgLCBfX2d1X3ZhbCA9IDA7ICAgICAgICAKKyAgICBjb25zdCBfX3R5cGVvZl9fKCooICggIGJ1ZiApICkpICpfX2d1X2FkZHIgPSAoKGJ1ZikpOyAgICAgICAgCisgICAgaWYgKCgoKCgwICsgY3VycmVudF9zZXRbMF0pLT50c3Muc2VnbWVudCkgPT0gMHgxOCApICB8fCAKKyAgICAgICAoKChzaXplb2YoKihidWYpKSkgPD0gMHhDMDAwMDAwMFVMKSAmJiAKKyAgICAgICAoKHVuc2lnbmVkIGxvbmcpKF9fZ3VfYWRkciApIDw9IDB4QzAwMDAwMDBVTCAtIChzaXplb2YoKihidWYpKSkpKSkpICAgICAgICAKKyAgICAgIGRvIHsKKyAgICAgICAgX19ndV9lcnIgID0gMDsgICAgICAgIAorICAgICAgICBzd2l0Y2ggKChzaXplb2YoKihidWYpKSkpIHsgICAgICAgIAorICAgICAgICAgIGNhc2UgMTogCisgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgIAorICAgICAgICAgICAgICAiMTogICAgICBtb3YiICJiIiAiICUyLCUiICJiIiAiMVxuIiAgICAgICAgCisgICAgICAgICAgICAgICIyOlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIjM6ICAgICAgbW92bCAlMywlMFxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIHhvciIgImIiICIgJSIgImIiICIxLCUiICJiIiAiMVxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIGptcCAyYlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgLmFsaWduIDRcbiIgICAgICAgIAorICAgICAgICAgICAgICAiICAgICAgICAubG9uZyAxYiwzYlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIudGV4dCIgICAgICAgIDogIj1yIihfX2d1X2VyciksICI9cSIgKF9fZ3VfdmFsKTogIm0iKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggICBfX2d1X2FkZHIgICApKSApLCAiaSIoLSAxNCApLCAiMCIoICBfX2d1X2VyciAgKSkgOyAKKyAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAKKyAgICAgICAgICBjYXNlIDI6IAorICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCisgICAgICAgICAgICAgICIxOiAgICAgIG1vdiIgInciICIgJTIsJSIgInciICIxXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIjI6XG4iICAgICAgICAKKyAgICAgICAgICAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAgICAgIAorICAgICAgICAgICAgICAiMzogICAgICBtb3ZsICUzLCUwXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgeG9yIiAidyIgIiAlIiAidyIgIjEsJSIgInciICIxXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgam1wIDJiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAgICAgIAorICAgICAgICAgICAgICAiICAgICAgICAuYWxpZ24gNFxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIC5sb25nIDFiLDNiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIi50ZXh0IiAgICAgICAgOiAiPXIiKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDogIm0iKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggICBfX2d1X2FkZHIgICApKSApLCAiaSIoLSAxNCApLCAiMCIoICBfX2d1X2VyciAgKSk7IAorICAgICAgICAgICAgICBicmVhazsgICAgICAgIAorICAgICAgICAgIGNhc2UgNDogCisgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgIAorICAgICAgICAgICAgICAiMTogICAgICBtb3YiICJsIiAiICUyLCUiICIiICIxXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIjI6XG4iICAgICAgICAKKyAgICAgICAgICAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAgICAgIAorICAgICAgICAgICAgICAiMzogICAgICBtb3ZsICUzLCUwXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgeG9yIiAibCIgIiAlIiAiIiAiMSwlIiAiIiAiMVxuIiAgICAgICAgCisgICAgICAgICAgICAgICIgICAgICAgIGptcCAyYlxuIiAgICAgICAgCisgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIiAgICAgICAgLmFsaWduIDRcbiIgICAgICAgICIgICAgICAgIC5sb25nIDFiLDNiXG4iICAgICAgICAKKyAgICAgICAgICAgICAgIi50ZXh0IiAgICAgICAgOiAiPXIiKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDogIm0iKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggICBfX2d1X2FkZHIgICApKSApLCAiaSIoLSAxNCApLCAiMCIoX19ndV9lcnIpKTsgCisgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgCisgICAgICAgICAgZGVmYXVsdDogCisgICAgICAgICAgICAoX19ndV92YWwpID0gX19nZXRfdXNlcl9iYWQoKTsgICAgICAgIAorICAgICAgICB9ICAgICAgICAKKyAgICAgIH0gd2hpbGUgKDApIDsgICAgICAgIAorICAgICgoYykpID0gKF9fdHlwZW9mX18oKigoYnVmKSkpKV9fZ3VfdmFsOyAgICAgICAgCisgICAgX19ndV9lcnI7CisgIH0KKyk7CisKK1dPVyEgQmxhY2sgR0NDL2Fzc2VtYmx5IG1hZ2ljLiBUaGlzIGlzIGltcG9zc2libGUgdG8gZm9sbG93LCBzbyBsZXQncworc2VlIHdoYXQgY29kZSBnY2MgZ2VuZXJhdGVzOgorCisgPiAgICAgICAgIHhvcmwgJWVkeCwlZWR4CisgPiAgICAgICAgIG1vdmwgY3VycmVudF9zZXQsJWVheAorID4gICAgICAgICBjbXBsICQyNCw3ODgoJWVheCkgICAgICAgIAorID4gICAgICAgICBqZSAuTDE0MjQgICAgICAgIAorID4gICAgICAgICBjbXBsICQtMTA3Mzc0MTgyNSw2NCglZXNwKQorID4gICAgICAgICBqYSAuTDE0MjMgICAgICAgICAgICAgICAgCisgPiAuTDE0MjQ6CisgPiAgICAgICAgIG1vdmwgJWVkeCwlZWF4ICAgICAgICAgICAgICAgICAgICAgICAgCisgPiAgICAgICAgIG1vdmwgNjQoJWVzcCksJWVieAorID4gI0FQUAorID4gMTogICAgICBtb3ZiICglZWJ4KSwlZGwgICAgICAgICAgICAgICAgLyogdGhpcyBpcyB0aGUgYWN0dWFsIHVzZXIgYWNjZXNzICovCisgPiAyOgorID4gLnNlY3Rpb24gLmZpeHVwLCJheCIKKyA+IDM6ICAgICAgbW92bCAkLTE0LCVlYXgKKyA+ICAgICAgICAgeG9yYiAlZGwsJWRsCisgPiAgICAgICAgIGptcCAyYgorID4gLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKyA+ICAgICAgICAgLmFsaWduIDQKKyA+ICAgICAgICAgLmxvbmcgMWIsM2IKKyA+IC50ZXh0CisgPiAjTk9fQVBQCisgPiAuTDE0MjM6CisgPiAgICAgICAgIG1vdnpibCAlZGwsJWVzaQorCitUaGUgb3B0aW1pemVyIGRvZXMgYSBnb29kIGpvYiBhbmQgZ2l2ZXMgdXMgc29tZXRoaW5nIHdlIGNhbiBhY3R1YWxseSAKK3VuZGVyc3RhbmQuIENhbiB3ZT8gVGhlIGFjdHVhbCB1c2VyIGFjY2VzcyBpcyBxdWl0ZSBvYnZpb3VzLiBUaGFua3MgCit0byB0aGUgdW5pZmllZCBhZGRyZXNzIHNwYWNlIHdlIGNhbiBqdXN0IGFjY2VzcyB0aGUgYWRkcmVzcyBpbiB1c2VyIAorbWVtb3J5LiBCdXQgd2hhdCBkb2VzIHRoZSAuc2VjdGlvbiBzdHVmZiBkbz8/Pz8/CisKK1RvIHVuZGVyc3RhbmQgdGhpcyB3ZSBoYXZlIHRvIGxvb2sgYXQgdGhlIGZpbmFsIGtlcm5lbDoKKworID4gb2JqZHVtcCAtLXNlY3Rpb24taGVhZGVycyB2bWxpbnV4CisgPiAKKyA+IHZtbGludXg6ICAgICBmaWxlIGZvcm1hdCBlbGYzMi1pMzg2CisgPiAKKyA+IFNlY3Rpb25zOgorID4gSWR4IE5hbWUgICAgICAgICAgU2l6ZSAgICAgIFZNQSAgICAgICBMTUEgICAgICAgRmlsZSBvZmYgIEFsZ24KKyA+ICAgMCAudGV4dCAgICAgICAgIDAwMDk4ZjQwICBjMDEwMDAwMCAgYzAxMDAwMDAgIDAwMDAxMDAwICAyKio0CisgPiAgICAgICAgICAgICAgICAgICBDT05URU5UUywgQUxMT0MsIExPQUQsIFJFQURPTkxZLCBDT0RFCisgPiAgIDEgLmZpeHVwICAgICAgICAwMDAwMTZiYyAgYzAxOThmNDAgIGMwMTk4ZjQwICAwMDA5OWY0MCAgMioqMAorID4gICAgICAgICAgICAgICAgICAgQ09OVEVOVFMsIEFMTE9DLCBMT0FELCBSRUFET05MWSwgQ09ERQorID4gICAyIC5yb2RhdGEgICAgICAgMDAwMGYxMjcgIGMwMTlhNWZjICBjMDE5YTVmYyAgMDAwOWI1ZmMgIDIqKjIKKyA+ICAgICAgICAgICAgICAgICAgIENPTlRFTlRTLCBBTExPQywgTE9BRCwgUkVBRE9OTFksIERBVEEKKyA+ICAgMyBfX2V4X3RhYmxlICAgIDAwMDAxNWMwICBjMDFhOTcyNCAgYzAxYTk3MjQgIDAwMGFhNzI0ICAyKioyCisgPiAgICAgICAgICAgICAgICAgICBDT05URU5UUywgQUxMT0MsIExPQUQsIFJFQURPTkxZLCBEQVRBCisgPiAgIDQgLmRhdGEgICAgICAgICAwMDAwZWE1OCAgYzAxYWJjZjAgIGMwMWFiY2YwICAwMDBhYmNmMCAgMioqNAorID4gICAgICAgICAgICAgICAgICAgQ09OVEVOVFMsIEFMTE9DLCBMT0FELCBEQVRBCisgPiAgIDUgLmJzcyAgICAgICAgICAwMDAxOGUyMSAgYzAxYmE3NDggIGMwMWJhNzQ4ICAwMDBiYTc0OCAgMioqMgorID4gICAgICAgICAgICAgICAgICAgQUxMT0MKKyA+ICAgNiAuY29tbWVudCAgICAgIDAwMDAwZWM0ICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMGJhNzQ4ICAyKiowCisgPiAgICAgICAgICAgICAgICAgICBDT05URU5UUywgUkVBRE9OTFkKKyA+ICAgNyAubm90ZSAgICAgICAgIDAwMDAxMDY4ICAwMDAwMGVjNCAgMDAwMDBlYzQgIDAwMGJiNjBjICAyKiowCisgPiAgICAgICAgICAgICAgICAgICBDT05URU5UUywgUkVBRE9OTFkKKworVGhlcmUgYXJlIG9idmlvdXNseSAyIG5vbiBzdGFuZGFyZCBFTEYgc2VjdGlvbnMgaW4gdGhlIGdlbmVyYXRlZCBvYmplY3QKK2ZpbGUuIEJ1dCBmaXJzdCB3ZSB3YW50IHRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgdG8gb3VyIGNvZGUgaW4gdGhlCitmaW5hbCBrZXJuZWwgZXhlY3V0YWJsZToKKworID4gb2JqZHVtcCAtLWRpc2Fzc2VtYmxlIC0tc2VjdGlvbj0udGV4dCB2bWxpbnV4CisgPgorID4gYzAxN2U3ODUgPGRvX2Nvbl93cml0ZStjMT4geG9ybCAgICVlZHgsJWVkeAorID4gYzAxN2U3ODcgPGRvX2Nvbl93cml0ZStjMz4gbW92bCAgIDB4YzAxYzdiZWMsJWVheAorID4gYzAxN2U3OGMgPGRvX2Nvbl93cml0ZStjOD4gY21wbCAgICQweDE4LDB4MzE0KCVlYXgpCisgPiBjMDE3ZTc5MyA8ZG9fY29uX3dyaXRlK2NmPiBqZSAgICAgYzAxN2U3OWYgPGRvX2Nvbl93cml0ZStkYj4KKyA+IGMwMTdlNzk1IDxkb19jb25fd3JpdGUrZDE+IGNtcGwgICAkMHhiZmZmZmZmZiwweDQwKCVlc3AsMSkKKyA+IGMwMTdlNzlkIDxkb19jb25fd3JpdGUrZDk+IGphICAgICBjMDE3ZTdhNyA8ZG9fY29uX3dyaXRlK2UzPgorID4gYzAxN2U3OWYgPGRvX2Nvbl93cml0ZStkYj4gbW92bCAgICVlZHgsJWVheAorID4gYzAxN2U3YTEgPGRvX2Nvbl93cml0ZStkZD4gbW92bCAgIDB4NDAoJWVzcCwxKSwlZWJ4CisgPiBjMDE3ZTdhNSA8ZG9fY29uX3dyaXRlK2UxPiBtb3ZiICAgKCVlYngpLCVkbAorID4gYzAxN2U3YTcgPGRvX2Nvbl93cml0ZStlMz4gbW92emJsICVkbCwlZXNpCisKK1RoZSB3aG9sZSB1c2VyIG1lbW9yeSBhY2Nlc3MgaXMgcmVkdWNlZCB0byAxMCB4ODYgbWFjaGluZSBpbnN0cnVjdGlvbnMuCitUaGUgaW5zdHJ1Y3Rpb25zIGJyYWNrZXRlZCBpbiB0aGUgLnNlY3Rpb24gZGlyZWN0aXZlcyBhcmUgbm8gbG9uZ2VyCitpbiB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBwYXRoLiBUaGV5IGFyZSBsb2NhdGVkIGluIGEgZGlmZmVyZW50IHNlY3Rpb24gCitvZiB0aGUgZXhlY3V0YWJsZSBmaWxlOgorCisgPiBvYmpkdW1wIC0tZGlzYXNzZW1ibGUgLS1zZWN0aW9uPS5maXh1cCB2bWxpbnV4CisgPiAKKyA+IGMwMTk5ZmY1IDwuZml4dXArMTBiNT4gbW92bCAgICQweGZmZmZmZmYyLCVlYXgKKyA+IGMwMTk5ZmZhIDwuZml4dXArMTBiYT4geG9yYiAgICVkbCwlZGwKKyA+IGMwMTk5ZmZjIDwuZml4dXArMTBiYz4gam1wICAgIGMwMTdlN2E3IDxkb19jb25fd3JpdGUrZTM+CisKK0FuZCBmaW5hbGx5OgorID4gb2JqZHVtcCAtLWZ1bGwtY29udGVudHMgLS1zZWN0aW9uPV9fZXhfdGFibGUgdm1saW51eAorID4gCisgPiAgYzAxYWE3YzQgOTNjMDE3YzAgZTA5ZjE5YzAgOTdjMDE3YzAgOTljMDE3YzAgIC4uLi4uLi4uLi4uLi4uLi4KKyA+ICBjMDFhYTdkNCBmNmMyMTdjMCBlOTlmMTljMCBhNWU3MTdjMCBmNTlmMTljMCAgLi4uLi4uLi4uLi4uLi4uLgorID4gIGMwMWFhN2U0IDA4MGExOGMwIDAxYTAxOWMwIDBhMGExOGMwIDA0YTAxOWMwICAuLi4uLi4uLi4uLi4uLi4uCisKK29yIGluIGh1bWFuIHJlYWRhYmxlIGJ5dGUgb3JkZXI6CisKKyA+ICBjMDFhYTdjNCBjMDE3YzA5MyBjMDE5OWZlMCBjMDE3YzA5NyBjMDE3YzA5OSAgLi4uLi4uLi4uLi4uLi4uLgorID4gIGMwMWFhN2Q0IGMwMTdjMmY2IGMwMTk5ZmU5IGMwMTdlN2E1IGMwMTk5ZmY1ICAuLi4uLi4uLi4uLi4uLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHRoZSBpbnRlcmVzdGluZyBwYXJ0IQorID4gIGMwMWFhN2U0IGMwMTgwYTA4IGMwMTlhMDAxIGMwMTgwYTBhIGMwMTlhMDA0ICAuLi4uLi4uLi4uLi4uLi4uCisKK1doYXQgaGFwcGVuZWQ/IFRoZSBhc3NlbWJseSBkaXJlY3RpdmVzCisKKy5zZWN0aW9uIC5maXh1cCwiYXgiCisuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCit0b2xkIHRoZSBhc3NlbWJsZXIgdG8gbW92ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gdGhlIHNwZWNpZmllZAorc2VjdGlvbnMgaW4gdGhlIEVMRiBvYmplY3QgZmlsZS4gU28gdGhlIGluc3RydWN0aW9ucworMzogICAgICBtb3ZsICQtMTQsJWVheAorICAgICAgICB4b3JiICVkbCwlZGwKKyAgICAgICAgam1wIDJiCitlbmRlZCB1cCBpbiB0aGUgLmZpeHVwIHNlY3Rpb24gb2YgdGhlIG9iamVjdCBmaWxlIGFuZCB0aGUgYWRkcmVzc2VzCisgICAgICAgIC5sb25nIDFiLDNiCitlbmRlZCB1cCBpbiB0aGUgX19leF90YWJsZSBzZWN0aW9uIG9mIHRoZSBvYmplY3QgZmlsZS4gMWIgYW5kIDNiCithcmUgbG9jYWwgbGFiZWxzLiBUaGUgbG9jYWwgbGFiZWwgMWIgKDFiIHN0YW5kcyBmb3IgbmV4dCBsYWJlbCAxIAorYmFja3dhcmQpIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiB0aGF0IG1pZ2h0IGZhdWx0LCBpLmUuIAoraW4gb3VyIGNhc2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGxhYmVsIDEgaXMgYzAxN2U3YTU6Cit0aGUgb3JpZ2luYWwgYXNzZW1ibHkgY29kZTogPiAxOiAgICAgIG1vdmIgKCVlYngpLCVkbAorYW5kIGxpbmtlZCBpbiB2bWxpbnV4ICAgICA6ID4gYzAxN2U3YTUgPGRvX2Nvbl93cml0ZStlMT4gbW92YiAgICglZWJ4KSwlZGwKKworVGhlIGxvY2FsIGxhYmVsIDMgKGJhY2t3YXJkcyBhZ2FpbikgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvZGUgdG8gaGFuZGxlCit0aGUgZmF1bHQsIGluIG91ciBjYXNlIHRoZSBhY3R1YWwgdmFsdWUgaXMgYzAxOTlmZjU6Cit0aGUgb3JpZ2luYWwgYXNzZW1ibHkgY29kZTogPiAzOiAgICAgIG1vdmwgJC0xNCwlZWF4CithbmQgbGlua2VkIGluIHZtbGludXggICAgIDogPiBjMDE5OWZmNSA8LmZpeHVwKzEwYjU+IG1vdmwgICAkMHhmZmZmZmZmMiwlZWF4CisKK1RoZSBhc3NlbWJseSBjb2RlCisgPiAuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorID4gICAgICAgICAuYWxpZ24gNAorID4gICAgICAgICAubG9uZyAxYiwzYgorCitiZWNvbWVzIHRoZSB2YWx1ZSBwYWlyCisgPiAgYzAxYWE3ZDQgYzAxN2MyZjYgYzAxOTlmZTkgYzAxN2U3YTUgYzAxOTlmZjUgIC4uLi4uLi4uLi4uLi4uLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBedGhpcyBpcyBedGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFiICAgICAgIDNiIAorYzAxN2U3YTUsYzAxOTlmZjUgaW4gdGhlIGV4Y2VwdGlvbiB0YWJsZSBvZiB0aGUga2VybmVsLgorCitTbywgd2hhdCBhY3R1YWxseSBoYXBwZW5zIGlmIGEgZmF1bHQgZnJvbSBrZXJuZWwgbW9kZSB3aXRoIG5vIHN1aXRhYmxlCit2bWEgb2NjdXJzPworCisxLikgYWNjZXNzIHRvIGludmFsaWQgYWRkcmVzczoKKyA+IGMwMTdlN2E1IDxkb19jb25fd3JpdGUrZTE+IG1vdmIgICAoJWVieCksJWRsCisyLikgTU1VIGdlbmVyYXRlcyBleGNlcHRpb24KKzMuKSBDUFUgY2FsbHMgZG9fcGFnZV9mYXVsdAorNC4pIGRvIHBhZ2UgZmF1bHQgY2FsbHMgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSAocmVncy0+ZWlwID09IGMwMTdlN2E1KTsKKzUuKSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlIGxvb2tzIHVwIHRoZSBhZGRyZXNzIGMwMTdlN2E1IGluIHRoZQorICAgIGV4Y2VwdGlvbiB0YWJsZSAoaS5lLiB0aGUgY29udGVudHMgb2YgdGhlIEVMRiBzZWN0aW9uIF9fZXhfdGFibGUpIAorICAgIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIGZhdWx0IGhhbmRsZSBjb2RlIGMwMTk5ZmY1LgorNi4pIGRvX3BhZ2VfZmF1bHQgbW9kaWZpZXMgaXRzIG93biByZXR1cm4gYWRkcmVzcyB0byBwb2ludCB0byB0aGUgZmF1bHQgCisgICAgaGFuZGxlIGNvZGUgYW5kIHJldHVybnMuCis3LikgZXhlY3V0aW9uIGNvbnRpbnVlcyBpbiB0aGUgZmF1bHQgaGFuZGxpbmcgY29kZS4KKzguKSA4YSkgRUFYIGJlY29tZXMgLUVGQVVMVCAoPT0gLTE0KQorICAgIDhiKSBETCAgYmVjb21lcyB6ZXJvICh0aGUgdmFsdWUgd2UgInJlYWQiIGZyb20gdXNlciBzcGFjZSkKKyAgICA4YykgZXhlY3V0aW9uIGNvbnRpbnVlcyBhdCBsb2NhbCBsYWJlbCAyIChhZGRyZXNzIG9mIHRoZQorICAgICAgICBpbnN0cnVjdGlvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgZmF1bHRpbmcgdXNlciBhY2Nlc3MpLgorCitUaGUgc3RlcHMgOGEgdG8gOGMgaW4gYSBjZXJ0YWluIHdheSBlbXVsYXRlIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4KKworVGhhdCdzIGl0LCBtb3N0bHkuIElmIHlvdSBsb29rIGF0IG91ciBleGFtcGxlLCB5b3UgbWlnaHQgYXNrIHdoeQord2Ugc2V0IEVBWCB0byAtRUZBVUxUIGluIHRoZSBleGNlcHRpb24gaGFuZGxlciBjb2RlLiBXZWxsLCB0aGUKK2dldF91c2VyIG1hY3JvIGFjdHVhbGx5IHJldHVybnMgYSB2YWx1ZTogMCwgaWYgdGhlIHVzZXIgYWNjZXNzIHdhcworc3VjY2Vzc2Z1bCwgLUVGQVVMVCBvbiBmYWlsdXJlLiBPdXIgb3JpZ2luYWwgY29kZSBkaWQgbm90IHRlc3QgdGhpcworcmV0dXJuIHZhbHVlLCBob3dldmVyIHRoZSBpbmxpbmUgYXNzZW1ibHkgY29kZSBpbiBnZXRfdXNlciB0cmllcyB0bworcmV0dXJuIC1FRkFVTFQuIEdDQyBzZWxlY3RlZCBFQVggdG8gcmV0dXJuIHRoaXMgdmFsdWUuCisKK05PVEU6CitEdWUgdG8gdGhlIHdheSB0aGF0IHRoZSBleGNlcHRpb24gdGFibGUgaXMgYnVpbHQgYW5kIG5lZWRzIHRvIGJlIG9yZGVyZWQsCitvbmx5IHVzZSBleGNlcHRpb25zIGZvciBjb2RlIGluIHRoZSAudGV4dCBzZWN0aW9uLiAgQW55IG90aGVyIHNlY3Rpb24KK3dpbGwgY2F1c2UgdGhlIGV4Y2VwdGlvbiB0YWJsZSB0byBub3QgYmUgc29ydGVkIGNvcnJlY3RseSwgYW5kIHRoZQorZXhjZXB0aW9ucyB3aWxsIGZhaWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9mYi8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmU4OWFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi8wMC1JTkRFWApAQCAtMCwwICsxLDI1IEBACitJbmRleCBvZiBmaWxlcyBpbiBEb2N1bWVudGF0aW9uL2ZiLiAgSWYgeW91IHRoaW5rIHNvbWV0aGluZyBhYm91dCBmcmFtZQorYnVmZmVyIGRldmljZXMgbmVlZHMgYW4gZW50cnkgaGVyZSwgbmVlZHMgY29ycmVjdGlvbiBvciB5b3UndmUgd3JpdHRlbiBvbmUKK3BsZWFzZSBtYWlsIG1lLgorCQkJCSAgICBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgorCiswMC1JTkRFWAorCS0gdGhpcyBmaWxlCitmcmFtZWJ1ZmZlci50eHQKKwktIGludHJvZHVjdGlvbiB0byBmcmFtZSBidWZmZXIgZGV2aWNlcworaW50ZXJuYWxzLnR4dAorCS0gcXVpY2sgb3ZlcnZpZXcgb2YgZnJhbWUgYnVmZmVyIGRldmljZSBpbnRlcm5hbHMKK21vZGVkYi50eHQKKwktIGluZm8gb24gdGhlIHZpZGVvIG1vZGUgZGF0YWJhc2UKK2F0eTEyOGZiLnR4dAorCS0gaW5mbyBvbiB0aGUgQVRJIFJhZ2UxMjggZnJhbWUgYnVmZmVyIGRyaXZlcgorY2xnZW5mYi50eHQKKwktIGluZm8gb24gdGhlIENpcnJ1cyBMb2dpYyBmcmFtZSBidWZmZXIgZHJpdmVyCittYXRyb3hmYi50eHQKKwktIGluZm8gb24gdGhlIE1hdHJveCBmcmFtZSBidWZmZXIgZHJpdmVyCitwdnIyZmIudHh0CisJLSBpbmZvIG9uIHRoZSBQb3dlclZSIDIgZnJhbWUgYnVmZmVyIGRyaXZlcgordGdhZmIudHh0CisJLSBpbmZvIG9uIHRoZSBUR0EgKERFQ0NoaXAgMjEwMzApIGZyYW1lIGJ1ZmZlciBkcml2ZXIKK3Zlc2FmYi50eHQKKwktIGluZm8gb24gdGhlIFZFU0EgZnJhbWUgYnVmZmVyIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9hdHkxMjhmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2F0eTEyOGZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjkyNjJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9hdHkxMjhmYi50eHQKQEAgLTAsMCArMSw3MiBAQAorW1RoaXMgZmlsZSBpcyBjbG9uZWQgZnJvbSBWZXNhRkIvbWF0cm94ZmJdCisKK1doYXQgaXMgYXR5MTI4ZmI/Cis9PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgZHJpdmVyIGZvciBhIGdyYXBoaWMgZnJhbWVidWZmZXIgZm9yIEFUSSBSYWdlMTI4IGJhc2VkIGRldmljZXMKK29uIEludGVsIGFuZCBQUEMgYm94ZXMuCisKK0FkdmFudGFnZXM6CisKKyAqIEl0IHByb3ZpZGVzIGEgbmljZSBsYXJnZSBjb25zb2xlICgxMjggY29scyArIDQ4IGxpbmVzIHdpdGggMTAyNHg3NjgpCisgICB3aXRob3V0IHVzaW5nIHRpbnksIHVucmVhZGFibGUgZm9udHMuCisgKiBZb3UgY2FuIHJ1biBYRjY4X0ZCRGV2IG9uIHRvcCBvZiAvZGV2L2ZiMAorICogTW9zdCBpbXBvcnRhbnQ6IGJvb3QgbG9nbyA6LSkKKworRGlzYWR2YW50YWdlczoKKworICogZ3JhcGhpYyBtb2RlIGlzIHNsb3dlciB0aGFuIHRleHQgbW9kZS4uLiBidXQgeW91IHNob3VsZCBub3Qgbm90aWNlCisgICBpZiB5b3UgdXNlIHNhbWUgcmVzb2x1dGlvbiBhcyB5b3UgdXNlZCBpbiB0ZXh0bW9kZS4KKyAqIHN0aWxsIGV4cGVyaW1lbnRhbC4KKworCitIb3cgdG8gdXNlIGl0PworPT09PT09PT09PT09PT0KKworU3dpdGNoaW5nIG1vZGVzIGlzIGRvbmUgdXNpbmcgdGhlICB2aWRlbz1hdHkxMjhmYjo8cmVzb2x1dGlvbj4uLi4gbW9kZWRiCitib290IHBhcmFtZXRlciBvciB1c2luZyBgZmJzZXQnIHByb2dyYW0uCisKK1NlZSBEb2N1bWVudGF0aW9uL2ZiL21vZGVkYi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbW9kZWRiCityZXNvbHV0aW9ucy4KKworWW91IHNob3VsZCBjb21waWxlIGluIGJvdGggdmdhY29uICh0byBib290IGlmIHlvdSByZW1vdmUgeW91ciBSYWdlMTI4IGZyb20KK2JveCkgYW5kIGF0eTEyOGZiIChmb3IgZ3JhcGhpY3MgbW9kZSkuIFlvdSBzaG91bGQgbm90IGNvbXBpbGUtaW4gdmVzYWZiCit1bmxlc3MgeW91IGhhdmUgcHJpbWFyeSBkaXNwbGF5IG9uIG5vbi1SYWdlMTI4IFZCRTIuMCBkZXZpY2UgKHNlZSAKK0RvY3VtZW50YXRpb24vZmIvdmVzYWZiLnR4dCBmb3IgZGV0YWlscykuCisKKworWDExCis9PT0KKworWEY2OF9GQkRldiBzaG91bGQgZ2VuZXJhbGx5IHdvcmsgZmluZSwgYnV0IGl0IGlzIG5vbi1hY2NlbGVyYXRlZC4gQXMgb2YKK3RoaXMgZG9jdW1lbnQsIDggYW5kIDMyYnBwIHdvcmtzIGZpbmUuICBUaGVyZSBoYXZlIGJlZW4gcGFsZXR0ZSBpc3N1ZXMKK3doZW4gc3dpdGNoaW5nIGZyb20gWCB0byBjb25zb2xlIGFuZCBiYWNrIHRvIFguICBZb3Ugd2lsbCBoYXZlIHRvIHJlc3RhcnQKK1ggdG8gZml4IHRoaXMuCisKKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PQorCitZb3UgY2FuIHBhc3Mga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHZlc2FmYiB3aXRoCitgdmlkZW89YXR5MTI4ZmI6b3B0aW9uMSxvcHRpb24yOnZhbHVlMixvcHRpb24zJyAobXVsdGlwbGUgb3B0aW9ucyBzaG91bGQKK2JlIHNlcGFyYXRlZCBieSBjb21tYSwgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgZnJvbSBvcHRpb25zIGJ5IGA6JykuIAorQWNjZXB0ZWQgb3B0aW9uczoKKworbm9hY2NlbCAgLSBkbyBub3QgdXNlIGFjY2VsZXJhdGlvbiBlbmdpbmUuIEl0IGlzIGRlZmF1bHQuCithY2NlbCAgICAtIHVzZSBhY2NlbGVyYXRpb24gZW5naW5lLiBOb3QgZmluaXNoZWQuCit2bW9kZTp4ICAtIGNob29zZXMgUG93ZXJNYWNpbnRvc2ggdmlkZW8gbW9kZSA8eD4uIERlcHJlY2lhdGVkLgorY21vZGU6eCAgLSBjaG9vc2VzIFBvd2VyTWFjaW50b3NoIGNvbG91ciBtb2RlIDx4Pi4gRGVwcmVjaWF0ZWQuCis8WHhYQFg+ICAtIHNlbGVjdHMgc3RhcnR1cCB2aWRlb21vZGUuIFNlZSBtb2RlZGIudHh0IGZvciBkZXRhaWxlZAorCSAgIGV4cGxhbmF0aW9uLiBEZWZhdWx0IGlzIDY0MHg0ODB4OGJwcC4KKworCitMaW1pdGF0aW9ucworPT09PT09PT09PT0KKworVGhlcmUgYXJlIGtub3duIGFuZCB1bmtub3duIGJ1Z3MsIGZlYXR1cmVzIGFuZCBtaXNmZWF0dXJlcy4KK0N1cnJlbnRseSB0aGVyZSBhcmUgZm9sbG93aW5nIGtub3duIGJ1Z3M6CisgKyBUaGlzIGRyaXZlciBpcyBzdGlsbCBleHBlcmltZW50YWwgYW5kIGlzIG5vdCBmaW5pc2hlZC4gIFRvbyBtYW55CisgICBidWdzL2VycmF0YSB0byBsaXN0IGhlcmUuCisKKy0tCitCcmFkIERvdWdsYXMgPGJyYWRAbmVydW8uY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jaXJydXNmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2NpcnJ1c2ZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTQzNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9jaXJydXNmYi50eHQKQEAgLTAsMCArMSw5NyBAQAorCisJCUZyYW1lYnVmZmVyIGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGNoaXBzZXRzCisJCUNvcHlyaWdodCAxOTk5IEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKworCisKK3sganVzdCBhIGxpdHRsZSBzb21ldGhpbmcgdG8gZ2V0IHBlb3BsZSBnb2luZzsgY29udHJpYnV0b3JzIHdlbGNvbWUhIH0KKworCisKK0NoaXAgZmFtaWxpZXMgc3VwcG9ydGVkOgorCVNENjQKKwlQaWNjb2xvCisJUGljYXNzbworCVNwZWN0cnVtCisJQWxwaW5lIChHRC01NDN4LzR4KQorCVBpY2Fzc280IChHRC01NDQ2KQorCUdELTU0ODAKKwlMYWd1bmEgKEdELTU0NngpCisKK0J1cydzIHN1cHBvcnRlZDoKKwlQQ0kKKwlab3JybworCitBcmNoaXRlY3R1cmVzIHN1cHBvcnRlZDoKKwlpMzg2CisJQWxwaGEKKwlQUEMgKE1vdG9yb2xhIFBvd2Vyc3RhY2spCisJbTY4ayAoQW1pZ2EpCisKKworCitEZWZhdWx0IHZpZGVvIG1vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCitBdCB0aGUgbW9tZW50LCB0aGVyZSBhcmUgdHdvIGtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHN1cHBvcnRlZDoKKworbW9kZTo2NDB4NDgwCittb2RlOjgwMHg2MDAKKwlvcgorbW9kZToxMDI0eDc2OAorCitGdWxsIHN1cHBvcnQgZm9yIHN0YXJ0dXAgdmlkZW8gbW9kZXMgKG1vZGVkYikgd2lsbCBiZSBpbnRlZ3JhdGVkIHNvb24uCisKK1ZlcnNpb24gMS45LjkuMQorLS0tLS0tLS0tLS0tLS0tCisqIEZpeCBtZW1vcnkgZGV0ZWN0aW9uIGZvciA1MTJrQiBjYXNlCisqIDgwMHg2MDAgbW9kZQorKiBGaXhlZCB0aW1pbmdzCisqIEhpbnQgZm9yIEFYUDogVXNlIC1hY2NlbCBmYWxzZSAtdnlyZXMgLTEgd2hlbiBjaGFuZ2luZyByZXNvbHV0aW9uCisKKworVmVyc2lvbiAxLjkuNC40CistLS0tLS0tLS0tLS0tLS0KKyogUHJlbGltaW5hcnkgTGFndW5hIHN1cHBvcnQKKyogT3ZlcmhhdWwgY29sb3IgcmVnaXN0ZXIgcm91dGluZXMuCisqIEFzc29jaWF0ZWQgd2l0aCB0aGUgYWJvdmUsIGNvbnNvbGUgY29sb3JzIGFyZSBub3cgb2J0YWluZWQgZnJvbSBhIExVVAorICBjYWxsZWQgJ3BhbGV0dGUnIGluc3RlYWQgb2YgZnJvbSB0aGUgVkdBIHJlZ2lzdGVycy4gIFRoaXMgY29kZSB3YXMKKyAgbW9kZWxlZCBhZnRlciB0aGF0IGluIGF0eWZiIGFuZCBtYXRyb3hmYi4KKyogQ29kZSBjbGVhbnVwLCBhZGQgY29tbWVudHMuCisqIE92ZXJoYXVsIFNSMDcgaGFuZGxpbmcuCisqIEJ1ZyBmaXhlcy4KKworCitWZXJzaW9uIDEuOS40LjMKKy0tLS0tLS0tLS0tLS0tLQorKiBDb3JyZWN0bHkgc2V0IGRlZmF1bHQgc3RhcnR1cCB2aWRlbyBtb2RlLgorKiBEbyBub3Qgb3ZlcnJpZGUgcmFtIHNpemUgc2V0dGluZy4gIERlZmluZQorICBDTEdFTl9VU0VfSEFSRENPREVEX1JBTV9TRVRUSU5HUyBpZiB5b3UgX2RvXyB3YW50IHRvIG92ZXJyaWRlIHRoZSBSQU0KKyAgc2V0dGluZy4KKyogQ29tcGlsZSBmaXhlcyByZWxhdGVkIHRvIG5ldyAyLjMueCBJT1JFU09VUkNFX0lPW1BPUlRdIHN5bWJvbCBjaGFuZ2VzLgorKiBVc2UgbmV3IDIuMy54IHJlc291cmNlIGFsbG9jYXRpb24uCisqIFNvbWUgY29kZSBjbGVhbnVwLgorCisKK1ZlcnNpb24gMS45LjQuMgorLS0tLS0tLS0tLS0tLS0tCisqIENhc3RpbmcgZml4ZXMuCisqIEFzc2VydGlvbnMgbm8gbG9uZ2VyIGNhdXNlIGFuIG9vcHMgb24gcHVycG9zZS4KKyogQnVnIGZpeGVzLgorCisKK1ZlcnNpb24gMS45LjQuMQorLS0tLS0tLS0tLS0tLS0tCisqIEFkZCBjb21wYXRpYmlsaXR5IHN1cHBvcnQuICBOb3cgcmVxdWlyZXMgYSAyLjEueCwgMi4yLnggb3IgMi4zLngga2VybmVsLgorCisKK1ZlcnNpb24gMS45LjQKKy0tLS0tLS0tLS0tLS0KKyogU2V2ZXJhbCBlbmhhbmNlbWVudHMsIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludCwgYSBmZXcgYnVnZml4ZXMuCisqIFJlcXVpcmVzIGtlcm5lbCAyLjMuMTQtcHJlMSBvciBsYXRlci4KKworCitWZXJzaW9uIDEuOS4zCistLS0tLS0tLS0tLS0tCisqIEJ1bmRsZWQgd2l0aCBrZXJuZWwgMi4zLjE0LXByZTEgb3IgbGF0ZXIuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ZyYW1lYnVmZmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTBlNzgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9mcmFtZWJ1ZmZlci50eHQKQEAgLTAsMCArMSwzNDUgQEAKKwkJCVRoZSBGcmFtZSBCdWZmZXIgRGV2aWNlCisJCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWludGFpbmVkIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+CitMYXN0IHJldmlzZWQ6IE1heSAxMCwgMjAwMQorCisKKzAuIEludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGZvciB0aGUgZ3JhcGhpY3MgaGFyZHdhcmUuIEl0CityZXByZXNlbnRzIHRoZSBmcmFtZSBidWZmZXIgb2Ygc29tZSB2aWRlbyBoYXJkd2FyZSBhbmQgYWxsb3dzIGFwcGxpY2F0aW9uCitzb2Z0d2FyZSB0byBhY2Nlc3MgdGhlIGdyYXBoaWNzIGhhcmR3YXJlIHRocm91Z2ggYSB3ZWxsLWRlZmluZWQgaW50ZXJmYWNlLCBzbwordGhlIHNvZnR3YXJlIGRvZXNuJ3QgbmVlZCB0byBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgKGhhcmR3YXJlCityZWdpc3Rlcikgc3R1ZmYuCisKK1RoZSBkZXZpY2UgaXMgYWNjZXNzZWQgdGhyb3VnaCBzcGVjaWFsIGRldmljZSBub2RlcywgdXN1YWxseSBsb2NhdGVkIGluIHRoZQorL2RldiBkaXJlY3RvcnksIGkuZS4gL2Rldi9mYiouCisKKworMS4gVXNlcidzIFZpZXcgb2YgL2Rldi9mYioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20gdGhlIHVzZXIncyBwb2ludCBvZiB2aWV3LCB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBsb29rcyBqdXN0IGxpa2UgYW55CitvdGhlciBkZXZpY2UgaW4gL2Rldi4gSXQncyBhIGNoYXJhY3RlciBkZXZpY2UgdXNpbmcgbWFqb3IgMjk7IHRoZSBtaW5vcgorc3BlY2lmaWVzIHRoZSBmcmFtZSBidWZmZXIgbnVtYmVyLgorCitCeSBjb252ZW50aW9uLCB0aGUgZm9sbG93aW5nIGRldmljZSBub2RlcyBhcmUgdXNlZCAobnVtYmVycyBpbmRpY2F0ZSB0aGUgZGV2aWNlCittaW5vciBudW1iZXJzKToKKworICAgICAgMCA9IC9kZXYvZmIwCUZpcnN0IGZyYW1lIGJ1ZmZlcgorICAgICAgMSA9IC9kZXYvZmIxCVNlY29uZCBmcmFtZSBidWZmZXIKKwkgIC4uLgorICAgICAzMSA9IC9kZXYvZmIzMQkzMm5kIGZyYW1lIGJ1ZmZlcgorCitGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHlvdSBtYXkgd2FudCB0byBjcmVhdGUgdGhlIGZvbGxvd2luZyBzeW1ib2xpYworbGlua3M6CisKKyAgICAvZGV2L2ZiMGN1cnJlbnQgLT4gZmIwCisgICAgL2Rldi9mYjFjdXJyZW50IC0+IGZiMQorCithbmQgc28gb24uLi4KKworVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2VzIGFyZSBhbHNvIGBub3JtYWwnIG1lbW9yeSBkZXZpY2VzLCB0aGlzIG1lYW5zLCB5b3UgY2FuCityZWFkIGFuZCB3cml0ZSB0aGVpciBjb250ZW50cy4gWW91IGNhbiwgZm9yIGV4YW1wbGUsIG1ha2UgYSBzY3JlZW4gc25hcHNob3QgYnkKKworICBjcCAvZGV2L2ZiMCBteWZpbGUKKworVGhlcmUgYWxzbyBjYW4gYmUgbW9yZSB0aGFuIG9uZSBmcmFtZSBidWZmZXIgYXQgYSB0aW1lLCBlLmcuIGlmIHlvdSBoYXZlIGEKK2dyYXBoaWNzIGNhcmQgaW4gYWRkaXRpb24gdG8gdGhlIGJ1aWx0LWluIGhhcmR3YXJlLiBUaGUgY29ycmVzcG9uZGluZyBmcmFtZQorYnVmZmVyIGRldmljZXMgKC9kZXYvZmIwIGFuZCAvZGV2L2ZiMSBldGMuKSB3b3JrIGluZGVwZW5kZW50bHkuCisKK0FwcGxpY2F0aW9uIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSAoZS5nLiB0aGUgWCBzZXJ2ZXIpIHdpbGwKK3VzZSAvZGV2L2ZiMCBieSBkZWZhdWx0IChvbGRlciBzb2Z0d2FyZSB1c2VzIC9kZXYvZmIwY3VycmVudCkuIFlvdSBjYW4gc3BlY2lmeQorYW4gYWx0ZXJuYXRpdmUgZnJhbWUgYnVmZmVyIGRldmljZSBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorJEZSQU1FQlVGRkVSIHRvIHRoZSBwYXRoIG5hbWUgb2YgYSBmcmFtZSBidWZmZXIgZGV2aWNlLCBlLmcuIChmb3Igc2gvYmFzaAordXNlcnMpOgorCisgICAgZXhwb3J0IEZSQU1FQlVGRkVSPS9kZXYvZmIxCisKK29yIChmb3IgY3NoIHVzZXJzKToKKworICAgIHNldGVudiBGUkFNRUJVRkZFUiAvZGV2L2ZiMQorCitBZnRlciB0aGlzIHRoZSBYIHNlcnZlciB3aWxsIHVzZSB0aGUgc2Vjb25kIGZyYW1lIGJ1ZmZlci4KKworCisyLiBQcm9ncmFtbWVyJ3MgVmlldyBvZiAvZGV2L2ZiKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgeW91IGFscmVhZHkga25vdywgYSBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIGEgbWVtb3J5IGRldmljZSBsaWtlIC9kZXYvbWVtIGFuZAoraXQgaGFzIHRoZSBzYW1lIGZlYXR1cmVzLiBZb3UgY2FuIHJlYWQgaXQsIHdyaXRlIGl0LCBzZWVrIHRvIHNvbWUgbG9jYXRpb24gaW4KK2l0IGFuZCBtbWFwKCkgaXQgKHRoZSBtYWluIHVzYWdlKS4gVGhlIGRpZmZlcmVuY2UgaXMganVzdCB0aGF0IHRoZSBtZW1vcnkgdGhhdAorYXBwZWFycyBpbiB0aGUgc3BlY2lhbCBmaWxlIGlzIG5vdCB0aGUgd2hvbGUgbWVtb3J5LCBidXQgdGhlIGZyYW1lIGJ1ZmZlciBvZgorc29tZSB2aWRlbyBoYXJkd2FyZS4KKworL2Rldi9mYiogYWxzbyBhbGxvd3Mgc2V2ZXJhbCBpb2N0bHMgb24gaXQsIGJ5IHdoaWNoIGxvdHMgb2YgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBoYXJkd2FyZSBjYW4gYmUgcXVlcmllZCBhbmQgc2V0LiBUaGUgY29sb3IgbWFwIGhhbmRsaW5nIHdvcmtzIHZpYSBpb2N0bHMsCit0b28uIExvb2sgaW50byA8bGludXgvZmIuaD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCBpb2N0bHMgZXhpc3QgYW5kIG9uCit3aGljaCBkYXRhIHN0cnVjdHVyZXMgdGhleSB3b3JrLiBIZXJlJ3MganVzdCBhIGJyaWVmIG92ZXJ2aWV3OgorCisgIC0gWW91IGNhbiByZXF1ZXN0IHVuY2hhbmdlYWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUsIGxpa2UgbmFtZSwKKyAgICBvcmdhbml6YXRpb24gb2YgdGhlIHNjcmVlbiBtZW1vcnkgKHBsYW5lcywgcGFja2VkIHBpeGVscywgLi4uKSBhbmQgYWRkcmVzcworICAgIGFuZCBsZW5ndGggb2YgdGhlIHNjcmVlbiBtZW1vcnkuCisKKyAgLSBZb3UgY2FuIHJlcXVlc3QgYW5kIGNoYW5nZSB2YXJpYWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUsIGxpa2UKKyAgICB2aXNpYmxlIGFuZCB2aXJ0dWFsIGdlb21ldHJ5LCBkZXB0aCwgY29sb3IgbWFwIGZvcm1hdCwgdGltaW5nLCBhbmQgc28gb24uCisgICAgSWYgeW91IHRyeSB0byBjaGFuZ2UgdGhhdCBpbmZvcm1hdGlvbiwgdGhlIGRyaXZlciBtYXliZSB3aWxsIHJvdW5kIHVwIHNvbWUKKyAgICB2YWx1ZXMgdG8gbWVldCB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMgKG9yIHJldHVybiBFSU5WQUwgaWYgdGhhdCBpc24ndAorICAgIHBvc3NpYmxlKS4KKworICAtIFlvdSBjYW4gZ2V0IGFuZCBzZXQgcGFydHMgb2YgdGhlIGNvbG9yIG1hcC4gQ29tbXVuaWNhdGlvbiBpcyBkb25lIHdpdGggMTYKKyAgICBiaXRzIHBlciBjb2xvciBwYXJ0IChyZWQsIGdyZWVuLCBibHVlLCB0cmFuc3BhcmVuY3kpIHRvIHN1cHBvcnQgYWxsIAorICAgIGV4aXN0aW5nIGhhcmR3YXJlLiBUaGUgZHJpdmVyIGRvZXMgYWxsIHRoZSBjb21wdXRhdGlvbnMgbmVlZGVkIHRvIGFwcGx5IAorICAgIGl0IHRvIHRoZSBoYXJkd2FyZSAocm91bmQgaXQgZG93biB0byBsZXNzIGJpdHMsIG1heWJlIHRocm93IGF3YXkgCisgICAgdHJhbnNwYXJlbmN5KS4KKworQWxsIHRoaXMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbWFrZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFwcGxpY2F0aW9uIHByb2dyYW1zCitlYXNpZXIgYW5kIG1vcmUgcG9ydGFibGUuIEUuZy4gdGhlIFggc2VydmVyIHdvcmtzIGNvbXBsZXRlbHkgb24gL2Rldi9mYiogYW5kCit0aHVzIGRvZXNuJ3QgbmVlZCB0byBrbm93LCBmb3IgZXhhbXBsZSwgaG93IHRoZSBjb2xvciByZWdpc3RlcnMgb2YgdGhlIGNvbmNyZXRlCitoYXJkd2FyZSBhcmUgb3JnYW5pemVkLiBYRjY4X0ZCRGV2IGlzIGEgZ2VuZXJhbCBYIHNlcnZlciBmb3IgYml0bWFwcGVkLAordW5hY2NlbGVyYXRlZCB2aWRlbyBoYXJkd2FyZS4gVGhlIG9ubHkgdGhpbmcgdGhhdCBoYXMgdG8gYmUgYnVpbHQgaW50bworYXBwbGljYXRpb24gcHJvZ3JhbXMgaXMgdGhlIHNjcmVlbiBvcmdhbml6YXRpb24gKGJpdHBsYW5lcyBvciBjaHVua3kgcGl4ZWxzCitldGMuKSwgYmVjYXVzZSBpdCB3b3JrcyBvbiB0aGUgZnJhbWUgYnVmZmVyIGltYWdlIGRhdGEgZGlyZWN0bHkuCisKK0ZvciB0aGUgZnV0dXJlIGl0IGlzIHBsYW5uZWQgdGhhdCBmcmFtZSBidWZmZXIgZHJpdmVycyBmb3IgZ3JhcGhpY3MgY2FyZHMgYW5kCit0aGUgbGlrZSBjYW4gYmUgaW1wbGVtZW50ZWQgYXMga2VybmVsIG1vZHVsZXMgdGhhdCBhcmUgbG9hZGVkIGF0IHJ1bnRpbWUuIFN1Y2gKK2EgZHJpdmVyIGp1c3QgaGFzIHRvIGNhbGwgcmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBhbmQgc3VwcGx5IHNvbWUgZnVuY3Rpb25zLgorV3JpdGluZyBhbmQgZGlzdHJpYnV0aW5nIHN1Y2ggZHJpdmVycyBpbmRlcGVuZGVudGx5IGZyb20gdGhlIGtlcm5lbCB3aWxsIHNhdmUKK211Y2ggdHJvdWJsZS4uLgorCisKKzMuIEZyYW1lIEJ1ZmZlciBSZXNvbHV0aW9uIE1haW50ZW5hbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcmFtZSBidWZmZXIgcmVzb2x1dGlvbnMgYXJlIG1haW50YWluZWQgdXNpbmcgdGhlIHV0aWxpdHkgYGZic2V0Jy4gSXQgY2FuCitjaGFuZ2UgdGhlIHZpZGVvIG1vZGUgcHJvcGVydGllcyBvZiBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UuIEl0cyBtYWluIHVzYWdlIGlzCit0byBjaGFuZ2UgdGhlIGN1cnJlbnQgdmlkZW8gbW9kZSwgZS5nLiBkdXJpbmcgYm9vdCB1cCBpbiBvbmUgb2YgeW91ciAvZXRjL3JjLioKK29yIC9ldGMvaW5pdC5kLyogZmlsZXMuCisKK0Zic2V0IHVzZXMgYSB2aWRlbyBtb2RlIGRhdGFiYXNlIHN0b3JlZCBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgc28geW91IGNhbgorZWFzaWx5IGFkZCB5b3VyIG93biBtb2RlcyBhbmQgcmVmZXIgdG8gdGhlbSB3aXRoIGEgc2ltcGxlIGlkZW50aWZpZXIuCisKKworNC4gVGhlIFggU2VydmVyCistLS0tLS0tLS0tLS0tLS0KKworVGhlIFggc2VydmVyIChYRjY4X0ZCRGV2KSBpcyB0aGUgbW9zdCBub3RhYmxlIGFwcGxpY2F0aW9uIHByb2dyYW0gZm9yIHRoZSBmcmFtZQorYnVmZmVyIGRldmljZS4gU3RhcnRpbmcgd2l0aCBYRnJlZTg2IHJlbGVhc2UgMy4yLCB0aGUgWCBzZXJ2ZXIgaXMgcGFydCBvZgorWEZyZWU4NiBhbmQgaGFzIDIgbW9kZXM6CisKKyAgLSBJZiB0aGUgYERpc3BsYXknIHN1YnNlY3Rpb24gZm9yIHRoZSBgZmJkZXYnIGRyaXZlciBpbiB0aGUgL2V0Yy9YRjg2Q29uZmlnCisgICAgZmlsZSBjb250YWlucyBhCisKKwlNb2RlcyAiZGVmYXVsdCIKKworICAgIGxpbmUsIHRoZSBYIHNlcnZlciB3aWxsIHVzZSB0aGUgc2NoZW1lIGRpc2N1c3NlZCBhYm92ZSwgaS5lLiBpdCB3aWxsIHN0YXJ0CisgICAgdXAgaW4gdGhlIHJlc29sdXRpb24gZGV0ZXJtaW5lZCBieSAvZGV2L2ZiMCAob3IgJEZSQU1FQlVGRkVSLCBpZiBzZXQpLiBZb3UKKyAgICBzdGlsbCBoYXZlIHRvIHNwZWNpZnkgdGhlIGNvbG9yIGRlcHRoICh1c2luZyB0aGUgRGVwdGgga2V5d29yZCkgYW5kIHZpcnR1YWwKKyAgICByZXNvbHV0aW9uICh1c2luZyB0aGUgVmlydHVhbCBrZXl3b3JkKSB0aG91Z2guIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZQorICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBzdXBwbGllZCB3aXRoIFhGcmVlODYuIEl0J3MgdGhlIG1vc3Qgc2ltcGxlCisgICAgY29uZmlndXJhdGlvbiwgYnV0IGl0IGhhcyBzb21lIGxpbWl0YXRpb25zLgorCisgIC0gVGhlcmVmb3JlIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IHJlc29sdXRpb25zIGluIHRoZSAvZXRjL1hGODZDb25maWcKKyAgICBmaWxlLiBUaGlzIGFsbG93cyBmb3Igb24tdGhlLWZseSByZXNvbHV0aW9uIHN3aXRjaGluZyB3aGlsZSByZXRhaW5pbmcgdGhlCisgICAgc2FtZSB2aXJ0dWFsIGRlc2t0b3Agc2l6ZS4gVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgdGhhdCdzIHVzZWQgaXMgc3RpbGwKKyAgICAvZGV2L2ZiMGN1cnJlbnQgKG9yICRGUkFNRUJVRkZFUiksIGJ1dCB0aGUgYXZhaWxhYmxlIHJlc29sdXRpb25zIGFyZQorICAgIGRlZmluZWQgYnkgL2V0Yy9YRjg2Q29uZmlnIG5vdy4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IHlvdSBoYXZlIHRvCisgICAgc3BlY2lmeSB0aGUgdGltaW5ncyBpbiBhIGRpZmZlcmVudCBmb3JtYXQgKGJ1dCBgZmJzZXQgLXgnIG1heSBoZWxwKS4KKworVG8gdHVuZSBhIHZpZGVvIG1vZGUsIHlvdSBjYW4gdXNlIGZic2V0IG9yIHh2aWR0dW5lLiBOb3RlIHRoYXQgeHZpZHR1bmUgZG9lc24ndAord29yayAxMDAlIHdpdGggWEY2OF9GQkRldjogdGhlIHJlcG9ydGVkIGNsb2NrIHZhbHVlcyBhcmUgYWx3YXlzIGluY29ycmVjdC4KKworCis1LiBWaWRlbyBNb2RlIFRpbWluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIG1vbml0b3IgZHJhd3MgYW4gaW1hZ2Ugb24gdGhlIHNjcmVlbiBieSB1c2luZyBhbiBlbGVjdHJvbiBiZWFtICgzIGVsZWN0cm9uCitiZWFtcyBmb3IgY29sb3IgbW9kZWxzLCAxIGVsZWN0cm9uIGJlYW0gZm9yIG1vbm9jaHJvbWUgbW9uaXRvcnMpLiBUaGUgZnJvbnQgb2YKK3RoZSBzY3JlZW4gaXMgY292ZXJlZCBieSBhIHBhdHRlcm4gb2YgY29sb3JlZCBwaG9zcGhvcnMgKHBpeGVscykuIElmIGEgcGhvc3Bob3IKK2lzIGhpdCBieSBhbiBlbGVjdHJvbiwgaXQgZW1pdHMgYSBwaG90b24gYW5kIHRodXMgYmVjb21lcyB2aXNpYmxlLgorCitUaGUgZWxlY3Ryb24gYmVhbSBkcmF3cyBob3Jpem9udGFsIGxpbmVzIChzY2FubGluZXMpIGZyb20gbGVmdCB0byByaWdodCwgYW5kCitmcm9tIHRoZSB0b3AgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLiBCeSBtb2RpZnlpbmcgdGhlIGludGVuc2l0eSBvZiB0aGUKK2VsZWN0cm9uIGJlYW0sIHBpeGVscyB3aXRoIHZhcmlvdXMgY29sb3JzIGFuZCBpbnRlbnNpdGllcyBjYW4gYmUgc2hvd24uCisKK0FmdGVyIGVhY2ggc2NhbmxpbmUgdGhlIGVsZWN0cm9uIGJlYW0gaGFzIHRvIG1vdmUgYmFjayB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZQorc2NyZWVuIGFuZCB0byB0aGUgbmV4dCBsaW5lOiB0aGlzIGlzIGNhbGxlZCB0aGUgaG9yaXpvbnRhbCByZXRyYWNlLiBBZnRlciB0aGUKK3dob2xlIHNjcmVlbiAoZnJhbWUpIHdhcyBwYWludGVkLCB0aGUgYmVhbSBtb3ZlcyBiYWNrIHRvIHRoZSB1cHBlciBsZWZ0IGNvcm5lcjoKK3RoaXMgaXMgY2FsbGVkIHRoZSB2ZXJ0aWNhbCByZXRyYWNlLiBEdXJpbmcgYm90aCB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKK3JldHJhY2UsIHRoZSBlbGVjdHJvbiBiZWFtIGlzIHR1cm5lZCBvZmYgKGJsYW5rZWQpLgorCitUaGUgc3BlZWQgYXQgd2hpY2ggdGhlIGVsZWN0cm9uIGJlYW0gcGFpbnRzIHRoZSBwaXhlbHMgaXMgZGV0ZXJtaW5lZCBieSB0aGUKK2RvdGNsb2NrIGluIHRoZSBncmFwaGljcyBib2FyZC4gRm9yIGEgZG90Y2xvY2sgb2YgZS5nLiAyOC4zNzUxNiBNSHogKG1pbGxpb25zCitvZiBjeWNsZXMgcGVyIHNlY29uZCksIGVhY2ggcGl4ZWwgaXMgMzUyNDIgcHMgKHBpY29zZWNvbmRzKSBsb25nOgorCisgICAgMS8oMjguMzc1MTZFNiBIeikgPSAzNS4yNDJFLTkgcworCitJZiB0aGUgc2NyZWVuIHJlc29sdXRpb24gaXMgNjQweDQ4MCwgaXQgd2lsbCB0YWtlCisKKyAgICA2NDAqMzUuMjQyRS05IHMgPSAyMi41NTVFLTYgcworCit0byBwYWludCB0aGUgNjQwICh4cmVzKSBwaXhlbHMgb24gb25lIHNjYW5saW5lLiBCdXQgdGhlIGhvcml6b250YWwgcmV0cmFjZQorYWxzbyB0YWtlcyB0aW1lIChlLmcuIDI3MiBgcGl4ZWxzJyksIHNvIGEgZnVsbCBzY2FubGluZSB0YWtlcworCisgICAgKDY0MCsyNzIpKjM1LjI0MkUtOSBzID0gMzIuMTQxRS02IHMKKworV2UnbGwgc2F5IHRoYXQgdGhlIGhvcml6b250YWwgc2NhbnJhdGUgaXMgYWJvdXQgMzEga0h6OgorCisgICAgMS8oMzIuMTQxRS02IHMpID0gMzEuMTEzRTMgSHoKKworQSBmdWxsIHNjcmVlbiBjb3VudHMgNDgwICh5cmVzKSBsaW5lcywgYnV0IHdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIHZlcnRpY2FsCityZXRyYWNlIHRvbyAoZS5nLiA0OSBgbGluZXMnKS4gU28gYSBmdWxsIHNjcmVlbiB3aWxsIHRha2UKKworICAgICg0ODArNDkpKjMyLjE0MUUtNiBzID0gMTcuMDAyRS0zIHMKKworVGhlIHZlcnRpY2FsIHNjYW5yYXRlIGlzIGFib3V0IDU5IEh6OgorCisgICAgMS8oMTcuMDAyRS0zIHMpID0gNTguODE1IEh6CisKK1RoaXMgbWVhbnMgdGhlIHNjcmVlbiBkYXRhIGlzIHJlZnJlc2hlZCBhYm91dCA1OSB0aW1lcyBwZXIgc2Vjb25kLiBUbyBoYXZlIGEKK3N0YWJsZSBwaWN0dXJlIHdpdGhvdXQgdmlzaWJsZSBmbGlja2VyLCBWRVNBIHJlY29tbWVuZHMgYSB2ZXJ0aWNhbCBzY2FucmF0ZSBvZgorYXQgbGVhc3QgNzIgSHouIEJ1dCB0aGUgcGVyY2VpdmVkIGZsaWNrZXIgaXMgdmVyeSBodW1hbiBkZXBlbmRlbnQ6IHNvbWUgcGVvcGxlCitjYW4gdXNlIDUwIEh6IHdpdGhvdXQgYW55IHRyb3VibGUsIHdoaWxlIEknbGwgbm90aWNlIGlmIGl0J3MgbGVzcyB0aGFuIDgwIEh6LgorCitTaW5jZSB0aGUgbW9uaXRvciBkb2Vzbid0IGtub3cgd2hlbiBhIG5ldyBzY2FubGluZSBzdGFydHMsIHRoZSBncmFwaGljcyBib2FyZAord2lsbCBzdXBwbHkgYSBzeW5jaHJvbml6YXRpb24gcHVsc2UgKGhvcml6b250YWwgc3luYyBvciBoc3luYykgZm9yIGVhY2gKK3NjYW5saW5lLiAgU2ltaWxhcmx5IGl0IHN1cHBsaWVzIGEgc3luY2hyb25pemF0aW9uIHB1bHNlICh2ZXJ0aWNhbCBzeW5jIG9yCit2c3luYykgZm9yIGVhY2ggbmV3IGZyYW1lLiBUaGUgcG9zaXRpb24gb2YgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4gaXMKK2luZmx1ZW5jZWQgYnkgdGhlIG1vbWVudHMgYXQgd2hpY2ggdGhlIHN5bmNocm9uaXphdGlvbiBwdWxzZXMgb2NjdXIuCisKK1RoZSBmb2xsb3dpbmcgcGljdHVyZSBzdW1tYXJpemVzIGFsbCB0aW1pbmdzLiBUaGUgaG9yaXpvbnRhbCByZXRyYWNlIHRpbWUgaXMKK3RoZSBzdW0gb2YgdGhlIGxlZnQgbWFyZ2luLCB0aGUgcmlnaHQgbWFyZ2luIGFuZCB0aGUgaHN5bmMgbGVuZ3RoLCB3aGlsZSB0aGUKK3ZlcnRpY2FsIHJldHJhY2UgdGltZSBpcyB0aGUgc3VtIG9mIHRoZSB1cHBlciBtYXJnaW4sIHRoZSBsb3dlciBtYXJnaW4gYW5kIHRoZQordnN5bmMgbGVuZ3RoLgorCisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dXBwZXJfbWFyZ2luICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgICstLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS0tLS0tLS0tKy0tLS0tLS0rCisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICBsZWZ0ICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIHJpZ2h0ICAgfCBoc3luYyB8CisgIHwgIG1hcmdpbiAgIyAgICAgICAgICAgICAgICB8ICAgICAgIHhyZXMgICAgICAgICAgICAgICAgICMgIG1hcmdpbiAgfCAgbGVuICB8CisgIHw8LS0tLS0tLS0+IzwtLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiM8LS0tLS0tLS0+fDwtLS0tLT58CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8eXJlcyAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgICstLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLS0tLS0tLS0tKy0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB8bG93ZXJfbWFyZ2luICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dnN5bmNfbGVuICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rCisKK1RoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGV4cGVjdHMgYWxsIGhvcml6b250YWwgdGltaW5ncyBpbiBudW1iZXIgb2YgZG90Y2xvY2tzCisoaW4gcGljb3NlY29uZHMsIDFFLTEyIHMpLCBhbmQgdmVydGljYWwgdGltaW5ncyBpbiBudW1iZXIgb2Ygc2NhbmxpbmVzLgorCisKKzYuIENvbnZlcnRpbmcgWEZyZWU4NiB0aW1pbmcgdmFsdWVzIGluZm8gZnJhbWUgYnVmZmVyIGRldmljZSB0aW1pbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBYRnJlZTg2IG1vZGUgbGluZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAiODAweDYwMCIgICAgIDUwICAgICAgODAwICA4NTYgIDk3NiAxMDQwICAgIDYwMCAgNjM3ICA2NDMgIDY2NgorIDwgbmFtZSA+ICAgICBEQ0YgICAgICAgSFIgIFNIMSAgU0gyICBIRkwgICAgIFZSICBTVjEgIFNWMiAgVkZMCisKK1RoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHVzZXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CisKKyAgLSBwaXhjbG9jazogcGl4ZWwgY2xvY2sgaW4gcHMgKHBpY28gc2Vjb25kcykKKyAgLSBsZWZ0X21hcmdpbjogdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZQorICAtIHJpZ2h0X21hcmdpbjogdGltZSBmcm9tIHBpY3R1cmUgdG8gc3luYworICAtIHVwcGVyX21hcmdpbjogdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZQorICAtIGxvd2VyX21hcmdpbjogdGltZSBmcm9tIHBpY3R1cmUgdG8gc3luYworICAtIGhzeW5jX2xlbjogbGVuZ3RoIG9mIGhvcml6b250YWwgc3luYworICAtIHZzeW5jX2xlbjogbGVuZ3RoIG9mIHZlcnRpY2FsIHN5bmMKKworMSkgUGl4ZWxjbG9jazoKKyAgIHhmcmVlOiBpbiBNSHoKKyAgIGZiOiBpbiBwaWNvc2Vjb25kcyAocHMpCisKKyAgIHBpeGNsb2NrID0gMTAwMDAwMCAvIERDRgorCisyKSBob3Jpem9udGFsIHRpbWluZ3M6CisgICBsZWZ0X21hcmdpbiA9IEhGTCAtIFNIMgorICAgcmlnaHRfbWFyZ2luID0gU0gxIC0gSFIKKyAgIGhzeW5jX2xlbiA9IFNIMiAtIFNIMQorCiszKSB2ZXJ0aWNhbCB0aW1pbmdzOgorICAgdXBwZXJfbWFyZ2luID0gVkZMIC0gU1YyCisgICBsb3dlcl9tYXJnaW4gPSBTVjEgLSBWUgorICAgdnN5bmNfbGVuID0gU1YyIC0gU1YxCisKK0dvb2QgZXhhbXBsZXMgZm9yIFZFU0EgdGltaW5ncyBjYW4gYmUgZm91bmQgaW4gdGhlIFhGcmVlODYgc291cmNlIHRyZWUsCit1bmRlciAieGMvcHJvZ3JhbXMvWHNlcnZlci9ody94ZnJlZTg2L2RvYy9tb2RlREIudHh0Ii4KKworCis3LiBSZWZlcmVuY2VzCistLS0tLS0tLS0tLS0tCisKK0ZvciBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGFuZCBpdHMKK2FwcGxpY2F0aW9ucywgcGxlYXNlIHJlZmVyIHRvIHRoZSBMaW51eC1mYmRldiB3ZWJzaXRlOgorCisgICAgaHR0cDovL2xpbnV4LWZiZGV2LnNvdXJjZWZvcmdlLm5ldC8KKworYW5kIHRvIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjoKKworICAtIFRoZSBtYW51YWwgcGFnZXMgZm9yIGZic2V0OiBmYnNldCg4KSwgZmIubW9kZXMoNSkKKyAgLSBUaGUgbWFudWFsIHBhZ2VzIGZvciBYRnJlZTg2OiBYRjY4X0ZCRGV2KDEpLCBYRjg2Q29uZmlnKDQvNSkKKyAgLSBUaGUgbWlnaHR5IGtlcm5lbCBzb3VyY2VzOgorICAgICAgbyBsaW51eC9kcml2ZXJzL3ZpZGVvLworICAgICAgbyBsaW51eC9pbmNsdWRlL2xpbnV4L2ZiLmgKKyAgICAgIG8gbGludXgvaW5jbHVkZS92aWRlby8KKworCisKKzguIE1haWxpbmcgbGlzdAorLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBzZXZlcmFsIGZyYW1lIGJ1ZmZlciBkZXZpY2UgcmVsYXRlZCBtYWlsaW5nIGxpc3RzIGF0IFNvdXJjZUZvcmdlOgorICAtIGxpbnV4LWZiZGV2LWFubm91bmNlQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCwgZm9yIGFubm91bmNlbWVudHMsCisgIC0gbGludXgtZmJkZXYtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQsIGZvciBnZW5lcmljIHVzZXIgc3VwcG9ydCwKKyAgLSBsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQsIGZvciBwcm9qZWN0IGRldmVsb3BlcnMuCisKK1BvaW50IHlvdXIgd2ViIGJyb3dzZXIgdG8gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC1mYmRldi8gZm9yCitzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYW5kIGFyY2hpdmUgYnJvd3NpbmcuCisKKworOS4gRG93bmxvYWRpbmcKKy0tLS0tLS0tLS0tLS0tCisKK0FsbCBuZWNlc3NhcnkgZmlsZXMgY2FuIGJlIGZvdW5kIGF0CisKKyAgICBmdHA6Ly9mdHAudW5pLWVybGFuZ2VuLmRlL3B1Yi9MaW51eC9MT0NBTC82ODB4MC8KKworYW5kIG9uIGl0cyBtaXJyb3JzLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgZmJzZXQgY2FuIGJlIGZvdW5kIGF0CisKKyAgICBodHRwOi8vaG9tZS50dmQuYmUvY3IyNjg2NC9MaW51eC9mYmRldi8KKworICAKKzEwLiBDcmVkaXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKK1RoaXMgcmVhZG1lIHdhcyB3cml0dGVuIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiwgcGFydGx5IGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorYFgtZnJhbWVidWZmZXIuUkVBRE1FJyBieSBSb21hbiBIb2RlayBhbmQgTWFydGluIFNjaGFsbGVyLiBTZWN0aW9uIDYgd2FzCitwcm92aWRlZCBieSBGcmFuayBOZXVtYW5uLgorCitUaGUgZnJhbWUgYnVmZmVyIGRldmljZSBhYnN0cmFjdGlvbiB3YXMgZGVzaWduZWQgYnkgTWFydGluIFNjaGFsbGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbDgxMC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsODEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDY4YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbDgxMC50eHQKQEAgLTAsMCArMSwyNzIgQEAKK0ludGVsIDgxMC84MTUgRnJhbWVidWZmZXIgZHJpdmVyCisgCVRvbnkgRGFwbGFzIDxhZGFwbGFzQHBvbC5uZXQ+CisJaHR0cDovL2k4MTBmYi5zb3VyY2Vmb3JnZS5uZXQKKworCU1hcmNoIDE3LCAyMDAyCisKKwlGaXJzdCBSZWxlYXNlZDogSnVseSAyMDAxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EuIEludHJvZHVjdGlvbgorCVRoaXMgaXMgYSBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIHZhcmlvdXMgSW50ZWwgODEwLzgxNSBjb21wYXRpYmxlCitncmFwaGljcyBkZXZpY2VzLiAgVGhlc2Ugd291bGQgaW5jbHVkZToKKworCUludGVsIDgxMAorCUludGVsIDgxMEUKKwlJbnRlbCA4MTAtREMxMDAKKwlJbnRlbCA4MTUgSW50ZXJuYWwgZ3JhcGhpY3Mgb25seSwgMTAwTWh6IEZTQgorCUludGVsIDgxNSBJbnRlcm5hbCBncmFwaGljcyBvbmx5CisJSW50ZWwgODE1IEludGVybmFsIGdyYXBoaWNzIGFuZCBBR1AKKworQi4gIEZlYXR1cmVzCisKKyAgICAgICAgLSBDaG9pY2Ugb2YgdXNpbmcgRGlzY3JldGUgVmlkZW8gVGltaW5ncywgVkVTQSBHZW5lcmFsaXplZCBUaW1pbmcKKwkgIEZvcm11bGEsIG9yIGEgZnJhbWVidWZmZXIgc3BlY2lmaWMgZGF0YWJhc2UgdG8gc2V0IHRoZSB2aWRlbyBtb2RlCisKKwktIFN1cHBvcnRzIGEgdmFyaWFibGUgcmFuZ2Ugb2YgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcmVzb2x1dGlvbiwgYW5kCisJICB2ZXJ0aWNhbCByZWZyZXNoIHJhdGVzIGlmIHRoZSBWRVNBIEdlbmVyYWxpemVkIFRpbWluZyBGb3JtdWxhIGlzIAorCSAgZW5hYmxlZC4KKworICAgICAgICAtIFN1cHBvcnRzIGNvbG9yIGRlcHRocyBvZiA4LCAxNiwgMjQgYW5kIDMyIGJpdHMgcGVyIHBpeGVsCisKKwktIFN1cHBvcnRzIHBzZXVkb2NvbG9yLCBkaXJlY3Rjb2xvciwgb3IgdHJ1ZWNvbG9yIHZpc3VhbHMKKworICAgICAgICAtIEZ1bGwgYW5kIG9wdGltaXplZCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYXQgOCwgMTYgYW5kIDI0IGJwcAorCisJLSBSb2J1c3QgdmlkZW8gc3RhdGUgc2F2ZSBhbmQgcmVzdG9yZQorCisgICAgICAgIC0gTVRSUiBzdXBwb3J0IAorCisJLSBVdGlsaXplcyB1c2VyLWVudGVyZWQgbW9uaXRvciBzcGVjaWZpY2F0aW9ucyB0byBhdXRvbWF0aWNhbGx5CisJICBjYWxjdWxhdGUgcmVxdWlyZWQgdmlkZW8gbW9kZSBwYXJhbWV0ZXJzLgorCisJLSBDYW4gY29uY3VycmVudGx5IHJ1biB3aXRoIHhmcmVlODYgcnVubmluZyB3aXRoIG5hdGl2ZSBpODEwIGRyaXZlcnMgCisKKwktIEhhcmR3YXJlIEN1cnNvciBTdXBwb3J0CisgCitDLiAgTGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucworCQorICAgYS4gInZpZGVvPWk4MTBmYiIgIAorCWVuYWJsZXMgdGhlIGk4MTAgZHJpdmVyCisKKwlSZWNvbW1lbmRhdGlvbjogcmVxdWlyZWQKKyAKKyAgIGIuICJ4cmVzOjx2YWx1ZT4iICAKKwlzZWxlY3QgaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIHBpeGVscworCisJUmVjb21tZW5kYXRpb246IHVzZXIgcHJlZmVyZW5jZSAKKwkoZGVmYXVsdCA9IDY0MCkKKworICAgYy4gInlyZXM6PHZhbHVlPiIKKwlzZWxlY3QgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBzY2FubGluZXMuIElmIERpc2NyZXRlIFZpZGVvIFRpbWluZ3MKKwlpcyBlbmFibGVkLCB0aGlzIHdpbGwgYmUgaWdub3JlZCBhbmQgY29tcHV0ZWQgYXMgMyp4cmVzLzQuICAKKworCVJlY29tbWVuZGF0aW9uOiB1c2VyIHByZWZlcmVuY2UKKwkoZGVmYXVsdCA9IDQ4MCkKKwkJCisgICBkLiAidnlyZXM6PHZhbHVlPiIgCisJc2VsZWN0IHZpcnR1YWwgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBzY2FubGluZXMuIElmICgwKSBvciBub25lCisJaXMgc3BlY2lmaWVkLCB0aGlzIHdpbGwgYmUgY29tcHV0ZWQgYWdhaW5zdCBtYXhpbXVtIGF2YWlsYWJsZSBtZW1vcnkuIAorCisJUmVjb21tZW5kYXRpb246IGRvIG5vdCBzZXQKKwkoZGVmYXVsdCA9IDQ4MCkKKworICAgZS4gInZyYW06PHZhbHVlPiIKKwlzZWxlY3QgYW1vdW50IG9mIHN5c3RlbSBSQU0gaW4gTUIgdG8gYWxsb2NhdGUgZm9yIHRoZSB2aWRlbyBtZW1vcnkgCisKKwlSZWNvbW1lbmRhdGlvbjogMSAtIDQgTUIuCisJKGRlZmF1bHQgPSA0KQorCisgICBmLiAiYnBwOjx2YWx1ZT4iICAgCisJc2VsZWN0IGRlc2lyZWQgcGl4ZWwgZGVwdGggCisKKwlSZWNvbW1lbmRhdGlvbjogOAorCShkZWZhdWx0ID0gOCkKKworICAgZy4gImhzeW5jMS9oc3luYzI6PHZhbHVlPiIgCisJc2VsZWN0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIEhvcml6b250YWwgU3luYyBGcmVxdWVuY3kgb2YgdGhlIAorCW1vbml0b3IgaW4gS0h6LiAgSWYgYSB1c2luZyBhIGZpeGVkIGZyZXF1ZW5jeSBtb25pdG9yLCBoc3luYzEgbXVzdCAKKwliZSBlcXVhbCB0byBoc3luYzIuIAorCisJUmVjb21tZW5kYXRpb246IGNoZWNrIG1vbml0b3IgbWFudWFsIGZvciBjb3JyZWN0IHZhbHVlcworCWRlZmF1bHQgKDI5LzMwKQorCisgICBoLiAidnN5bmMxL3ZzeW5jMjo8dmFsdWU+IiAKKwlzZWxlY3QgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gVmVydGljYWwgU3luYyBGcmVxdWVuY3kgb2YgdGhlIG1vbml0b3IKKwlpbiBIei4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIG9wdGlvbiB0byBsb2NrIHlvdXIgbW9uaXRvcidzIHJlZnJlc2ggCisJcmF0ZS4KKworCVJlY29tbWVuZGF0aW9uOiBjaGVjayBtb25pdG9yIG1hbnVhbCBmb3IgY29ycmVjdCB2YWx1ZXMKKwkoZGVmYXVsdCA9IDYwLzYwKQorCisJSU1QT1JUQU5UOiAgSWYgeW91IG5lZWQgdG8gY2xhbXAgeW91ciB0aW1pbmdzLCB0cnkgdG8gZ2l2ZSBzb21lIAorCWxlZXdheSBmb3IgY29tcHV0YXRpb25hbCBlcnJvcnMgKG92ZXIvdW5kZXJmbG93cykuICBFeGFtcGxlOiBpZiAKKwl1c2luZyB2c3luYzEvdnN5bmMyID0gNjAvNjAsIG1ha2Ugc3VyZSBoc3luYzEvaHN5bmMyIGhhcyBhdCBsZWFzdAorCWEgMSB1bml0IGRpZmZlcmVuY2UsIGFuZCB2aWNlIHZlcnNhLgorCisgICBpLiAidm9mZnNldDo8dmFsdWU+IgkKKyAgICAgICAgc2VsZWN0IGF0IHdoYXQgb2Zmc2V0IGluIE1CIG9mIHRoZSBsb2dpY2FsIG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgCisJZnJhbWVidWZmZXIgbWVtb3J5LiAgVGhlIGludGVudCBpcyB0byBhdm9pZCB0aGUgbWVtb3J5IGJsb2NrcworCXVzZWQgYnkgc3RhbmRhcmQgZ3JhcGhpY3MgYXBwbGljYXRpb25zIChYRnJlZTg2KS4gIFRoZSBkZWZhdWx0CisgICAgICAgIG9mZnNldCAoMTYgTUIgZm9yIGEgNjRNQiBhcGVydHVyZSwgOCBNQiBmb3IgYSAzMk1CIGFwZXJ0dXJlKSB3aWxsCisgICAgICAgIGF2b2lkIFhGcmVlODYncyB1c2FnZSBhbmQgYWxsb3dzIHVwIHRvIDdNQi8xNU1CIG9mIGZyYW1lYnVmZmVyCisgICAgICAgIG1lbW9yeS4gIERlcGVuZGluZyBvbiB5b3VyIHVzYWdlLCBhZGp1c3QgdGhlIHZhbHVlIHVwIG9yIGRvd24sIAorCSgwIGZvciBtYXhpbXVtIHVzYWdlLCAzMS82MyBNQiBmb3IgdGhlIGxlYXN0IGFtb3VudCkuICBOb3RlLCBhbiAKKwlhcmJpdHJhcnkgc2V0dGluZyBtYXkgY29uZmxpY3Qgd2l0aCBYRnJlZTg2LgorCisJUmVjb21tZW5kYXRpb246IGRvIG5vdCBzZXQKKwkoZGVmYXVsdCA9IDggb3IgMTYgTUIpCisgICAgICAKKyAgIGouICJhY2NlbCIgCisJZW5hYmxlIHRleHQgYWNjZWxlcmF0aW9uLiAgVGhpcyBjYW4gYmUgZW5hYmxlZC9yZWVuYWJsZWQgYW55dGltZSAKKwlieSB1c2luZyAnZmJzZXQgLWFjY2VsIHRydWUvZmFsc2UnLiAKKworCVJlY29tbWVuZGF0aW9uOiBlbmFibGUKKwkoZGVmYXVsdCA9IG5vdCBzZXQpIAorCisgICBrLiAibXRyciIgCisJZW5hYmxlIE1UUlIuICBUaGlzIGFsbG93cyBkYXRhIHRyYW5zZmVycyB0byB0aGUgZnJhbWVidWZmZXIgbWVtb3J5CisJdG8gb2NjdXIgaW4gYnVyc3RzIHdoaWNoIGNhbiBzaWduaWZpY2FudGx5IGluY3JlYXNlIHBlcmZvcm1hbmNlLgorCU5vdCB2ZXJ5IGhlbHBmdWwgd2l0aCB0aGUgaTgxMC9pODE1IGJlY2F1c2Ugb2YgJ3NoYXJlZCBtZW1vcnknLiAKKworCVJlY29tbWVuZGF0aW9uOiBkbyBub3Qgc2V0CisJKGRlZmF1bHQgPSBub3Qgc2V0KSAKKworICAgbC4gImV4dHZnYSIKKwlpZiBzcGVjaWZpZWQsIHNlY29uZGFyeS9leHRlcm5hbCBWR0Egb3V0cHV0IHdpbGwgYWx3YXlzIGJlIGVuYWJsZWQuCisJVXNlZnVsIGlmIHRoZSBCSU9TIHR1cm5zIG9mZiB0aGUgVkdBIHBvcnQgd2hlbiBubyBtb25pdG9yIGlzIGF0dGFjaGVkLgorCVRoZSBleHRlcm5hbCBWR0EgbW9uaXRvciBjYW4gdGhlbiBiZSBhdHRhY2hlZCB3aXRob3V0IHJlYm9vdGluZy4gCisKKwlSZWNvbW1lbmRhdGlvbjogZG8gbm90IHNldAorCShkZWZhdWx0ID0gbm90IHNldCkKKwkKKyAgIG0uICJzeW5jIiAKKwlGb3JjZXMgdGhlIGhhcmR3YXJlIGVuZ2luZSB0byBkbyBhICJzeW5jIiBvciB3YWl0IGZvciB0aGUgaGFyZHdhcmUKKwl0byBmaW5pc2ggYmVmb3JlIHN0YXJ0aW5nIGFub3RoZXIgaW5zdHJ1Y3Rpb24uIFRoaXMgd2lsbCBwcm9kdWNlIGEgCisJbW9yZSBzdGFibGUgc2V0dXAsIGJ1dCB3aWxsIGJlIHNsb3dlci4KKworCVJlY29tbWVuZGF0aW9uOiBkbyBub3Qgc2V0CisJKGRlZmF1bHQgPSBub3Qgc2V0KQorCisgICBuLiAiZGNvbG9yIgorICAgICAgICBVc2UgZGlyZWN0Y29sb3IgdmlzdWFsIGluc3RlYWQgb2YgdHJ1ZWNvbG9yIGZvciBwaXhlbCBkZXB0aHMgZ3JlYXRlcgorCXRoYW4gOCBicHAuICBVc2VmdWwgZm9yIGNvbG9yIHR1bmluZywgc3VjaCBhcyBnYW1tYSBjb250cm9sLgorCisJUmVjb21tZW5kYXRpb246IGRvIG5vdCBzZXQKKwkoZGVmYXVsdCA9IG5vdCBzZXQpCisJCQkKK0QuIEtlcm5lbCBib290aW5nCisKK1NlcGFyYXRlIGVhY2ggb3B0aW9uL29wdGlvbi1wYWlyIGJ5IGNvbW1hcyAoLCkgYW5kIHRoZSBvcHRpb24gZnJvbSBpdHMgdmFsdWUKK3dpdGggYSBjb2xvbiAoOikgYXMgaW4gdGhlIGZvbGxvd2luZzoKKwordmlkZW89aTgxMGZiOm9wdGlvbjEsb3B0aW9uMjp2YWx1ZTIKKworU2FtcGxlIFVzYWdlCistLS0tLS0tLS0tLS0KKworSW4gL2V0Yy9saWxvLmNvbmYsIGFkZCB0aGUgbGluZToKKworYXBwZW5kPSJ2aWRlbz1pODEwZmI6dnJhbToyLHhyZXM6MTAyNCx5cmVzOjc2OCxicHA6OCxoc3luYzE6MzAsaHN5bmMyOjU1LCBcCisgICAgICAgIHZzeW5jMTo1MCx2c3luYzI6ODUsYWNjZWwsbXRyciIKKworVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIHRvIDEwMjR4NzY4IGF0IDhicHAuICBUaGUgZnJhbWVidWZmZXIKK3dpbGwgdXNlIDIgTUIgb2YgU3lzdGVtIFJBTS4gTVRSUiBzdXBwb3J0IHdpbGwgYmUgZW5hYmxlZC4gVGhlIHJlZnJlc2ggcmF0ZSAKK3dpbGwgYmUgY29tcHV0ZWQgYmFzZWQgb24gdGhlIGhzeW5jMS9oc3luYzIgYW5kIHZzeW5jMS92c3luYzIgdmFsdWVzLiAgCisKK0lNUE9SVEFOVDoKK1lvdSBtdXN0IGluY2x1ZGUgaHN5bmMxLCBoc3luYzIsIHZzeW5jMSBhbmQgdnN5bmMyIHRvIGVuYWJsZSB2aWRlbyBtb2RlcworYmV0dGVyIHRoYW4gNjQweDQ4MCBhdCA2MEh6LgorCitFLiAgTW9kdWxlIG9wdGlvbnMKKwkKKwlUaGUgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIGVzc2VudGlhbGx5IHNpbWlsYXIgdG8gdGhlIGtlcm5lbCAKK3BhcmFtZXRlcnMuIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCB5b3UgbmVlZCB0byBpbmNsdWRlIGEgQm9vbGVhbiB2YWx1ZSAKKygxIGZvciBUUlVFLCBhbmQgMCBmb3IgRkFMU0UpIGZvciB0aG9zZSBvcHRpb25zIHdoaWNoIGRvbid0IG5lZWQgYSB2YWx1ZS4gCisKK0V4YW1wbGUsIHRvIGVuYWJsZSBNVFJSLCBpbmNsdWRlICJtdHJyPTEiLgorCitTYW1wbGUgVXNhZ2UKKy0tLS0tLS0tLS0tLQorCitVc2luZyB0aGUgc2FtZSBzZXR1cCBhcyBkZXNjcmliZWQgYWJvdmUsIGxvYWQgdGhlIG1vZHVsZSBsaWtlIHRoaXM6CisKKwltb2Rwcm9iZSBpODEwZmIgdnJhbT0yIHhyZXM9MTAyNCBicHA9OCBoc3luYzE9MzAgaHN5bmMyPTU1IHZzeW5jMT01MCBcCisJICAgICAgICAgdnN5bmMyPTg1IGFjY2VsPTEgbXRycj0xCisKK09yIGp1c3QgYWRkIHRoZSBmb2xsb3dpbmcgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mCisKKwlvcHRpb25zIGk4MTBmYiB2cmFtPTIgeHJlcz0xMDI0IGJwcD0xNiBoc3luYzE9MzAgaHN5bmMyPTU1IHZzeW5jMT01MCBcCisJdnN5bmMyPTg1IGFjY2VsPTEgbXRycj0xCisKK2FuZCBqdXN0IGRvIGEgCisKKwltb2Rwcm9iZSBpODEwZmIKKworCitGLiAgU2V0dXAKKworCWEuIERvIHlvdXIgdXN1YWwgbWV0aG9kIG9mIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwuIAorCQorCW1ha2UgbWVudWNvbmZpZy94Y29uZmlnL2NvbmZpZworCisJYi4gVW5kZXIgIkNvZGUgTWF0dXJpdHkgT3B0aW9ucyIsIGVuYWJsZSAiUHJvbXB0IGZvciBleHBlcmltZW50YWwvCisJICAgaW5jb21wbGV0ZSBjb2RlL2RyaXZlcnMiLgorCisgCWMuIEVuYWJsZSBhZ3BnYXJ0IHN1cHBvcnQgZm9yIHRoZSBJbnRlbCA4MTAvODE1IG9uLWJvYXJkIGdyYXBoaWNzLgorCSAgIFRoaXMgaXMgcmVxdWlyZWQuICBUaGUgb3B0aW9uIGlzIHVuZGVyICJDaGFyYWN0ZXIgRGV2aWNlcyIKKworCWQuIFVuZGVyICJHcmFwaGljcyBTdXBwb3J0Iiwgc2VsZWN0ICJJbnRlbCA4MTAvODE1IiBlaXRoZXIgc3RhdGljYWxseQorCSAgIG9yIGFzIGEgbW9kdWxlLiAgQ2hvb3NlICJ1c2UgVkVTQSBHVEYgZm9yIHZpZGVvIHRpbWluZ3MiICBpZiB5b3UgCisJICAgbmVlZCB0byBtYXhpbWl6ZSB0aGUgY2FwYWJpbGl0eSBvZiB5b3VyIGRpc3BsYXkuICBUbyBiZSBvbiB0aGUgCisJICAgc2FmZSBzaWRlLCB5b3UgY2FuIGxlYXZlIHRoaXMgdW5zZWxlY3RlZC4gIAorICAKKyAgICAgICAgZS4gSWYgeW91IHdhbnQgYSBmcmFtZWJ1ZmZlciBjb25zb2xlLCBlbmFibGUgaXQgdW5kZXIgIkNvbnNvbGUgCisJICAgRHJpdmVycyIKKworCWYuIENvbXBpbGUgeW91ciBrZXJuZWwuIAorCSAgCQorCWcuIExvYWQgdGhlIGRyaXZlciBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbiBEIGFuZCBFLgorCQorCU9wdGlvbmFsOgkKKwloLiAgSWYgeW91IGFyZSBnb2luZyB0byBydW4gWEZyZWU4NiB3aXRoIGl0cyBuYXRpdmUgZHJpdmVycywgdGhlIAorCSAgICBzdGFuZGFyZCBYRnJlZTg2IDQuMS4wIGFuZCA0LjIuMCBkcml2ZXJzIHNob3VsZCB3b3JrIGFzIGlzLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUncyBhIGJ1ZyBpbiB0aGUgWEZyZWU4NiBpODEwIGRyaXZlcnMuICBJdCBhdHRlbXB0cyAKKwkgICAgdG8gdXNlIFhBQSBldmVuIHdoZW4gc3dpdGNoZWQgdG8gdGhlIGNvbnNvbGUuIFRoaXMgd2lsbCBjcmFzaAorCSAgICB5b3VyIHNlcnZlci4gSSBoYXZlIGEgZml4IGF0IHRoaXMgc2l0ZTogIAorCSAgICAKKwkgICAgaHR0cDovL2k4MTBmYi5zb3VyY2Vmb3JnZS5uZXQuICAKKworCSAgICBZb3UgY2FuIGVpdGhlciB1c2UgdGhlIHBhdGNoLCBvciBqdXN0IHJlcGxhY2UgCisJICAgIAorICAgICAgICAgICAgL3Vzci9YMTFSNi9saWIvbW9kdWxlcy9kcml2ZXJzL2k4MTBfZHJ2Lm8KKworCSAgICB3aXRoIHRoZSBvbmUgcHJvdmlkZWQgYXQgdGhlIHdlYnNpdGUuIAkKKworCWkuICBUcnkgdGhlIERpcmVjdEZCIChodHRwOi8vd3d3LmRpcmVjdGZiLm9yZykgKyB0aGUgaTgxMCBnZnhkcml2ZXIKKwkgICAgcGF0Y2ggdG8gc2VlIHRoZSBjaGlwc2V0IGluIGFjdGlvbiAob3IgaW5hY3Rpb24gOi0pLgorCitHLiAgQWNrbm93bGVkZ21lbnQ6CisJCisJMS4gIEdlZXJ0IFV5dHRlcmhvZXZlbiAtIGhpcyBleGNlbGxlbnQgaG93dG8gYW5kIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciBkcml2ZXIgY29kZSBtYWRlIHRoaXMgcG9zc2libGUuCisKKwkyLiAgSmVmZiBIYXJ0bWFubiBmb3IgaGlzIGFncGdhcnQgY29kZS4gIAorCisJMy4gIFRoZSBYIGRldmVsb3BlcnMuICBJbnNpZ2h0cyB3ZXJlIHByb3ZpZGVkIGp1c3QgYnkgcmVhZGluZyB0aGUKKwkgICAgWEZyZWU4NiBzb3VyY2UgY29kZS4KKworCTQuICBJbnRlbChjKS4gIEZvciB0aGlzIHZhbHVlLW9yaWVudGVkIGNoaXBzZXQgZHJpdmVyIGFuZCBmb3IKKyAgICAgICAgICAgIHByb3ZpZGluZyBkb2N1bWVudGF0aW9uLgorCisJNS4gTWF0dCBTb3R0ZWsuICBIaXMgaW5wdXRzIGFuZCBpZGVhcyAgaGVscGVkIGluIG1ha2luZyBzb21lCisJb3B0aW1pemF0aW9ucyBwb3NzaWJsZS4KKworSC4gIEhvbWUgUGFnZToKKworCUEgbW9yZSBjb21wbGV0ZSwgYW5kIHByb2JhYmx5IHVwZGF0ZWQgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgYXQKK2h0dHA6Ly9pODEwZmIuc291cmNlZm9yZ2UubmV0LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1RvbnkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9pbnRlcm5hbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9pbnRlcm5hbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmEyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ludGVybmFscy50eHQKQEAgLTAsMCArMSw4MiBAQAorCitUaGlzIGlzIGEgZmlyc3Qgc3RhcnQgZm9yIHNvbWUgZG9jdW1lbnRhdGlvbiBhYm91dCBmcmFtZSBidWZmZXIgZGV2aWNlCitpbnRlcm5hbHMuCisKK0dlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+LCAyMSBKdWx5IDE5OTgKK0phbWVzIFNpbW1vbnMgPGpzaW1tb25zQHVzZXIuc2YubmV0PiwgTm92IDI2IDIwMDIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCSAgICAqKiogIFNUUlVDVFVSRVMgVVNFRCBCWSBUSEUgRlJBTUUgQlVGRkVSIERFVklDRSBBUEkgICoqKgorCitUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgcGxheSBhIHJvbGUgaW4gdGhlIGdhbWUgb2YgZnJhbWUgYnVmZmVyIGRldmljZXMuIFRoZXkKK2FyZSBkZWZpbmVkIGluIDxsaW51eC9mYi5oPi4KKworMS4gT3V0c2lkZSB0aGUga2VybmVsICh1c2VyIHNwYWNlKQorCisgIC0gc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvCisKKyAgICBEZXZpY2UgaW5kZXBlbmRlbnQgdW5jaGFuZ2VhYmxlIGluZm9ybWF0aW9uIGFib3V0IGEgZnJhbWUgYnVmZmVyIGRldmljZSBhbmQKKyAgICBhIHNwZWNpZmljIHZpZGVvIG1vZGUuIFRoaXMgY2FuIGJlIG9idGFpbmVkIHVzaW5nIHRoZSBGQklPR0VUX0ZTQ1JFRU5JTkZPCisgICAgaW9jdGwuCisKKyAgLSBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KKworICAgIERldmljZSBpbmRlcGVuZGVudCBjaGFuZ2VhYmxlIGluZm9ybWF0aW9uIGFib3V0IGEgZnJhbWUgYnVmZmVyIGRldmljZSBhbmQgYQorICAgIHNwZWNpZmljIHZpZGVvIG1vZGUuIFRoaXMgY2FuIGJlIG9idGFpbmVkIHVzaW5nIHRoZSBGQklPR0VUX1ZTQ1JFRU5JTkZPCisgICAgaW9jdGwsIGFuZCB1cGRhdGVkIHdpdGggdGhlIEZCSU9QVVRfVlNDUkVFTklORk8gaW9jdGwuIElmIHlvdSB3YW50IHRvIHBhbgorICAgIHRoZSBzY3JlZW4gb25seSwgeW91IGNhbiB1c2UgdGhlIEZCSU9QQU5fRElTUExBWSBpb2N0bC4KKworICAtIHN0cnVjdCBmYl9jbWFwCisKKyAgICBEZXZpY2UgaW5kZXBlbmRlbnQgY29sb3JtYXAgaW5mb3JtYXRpb24uIFlvdSBjYW4gZ2V0IGFuZCBzZXQgdGhlIGNvbG9ybWFwCisgICAgdXNpbmcgdGhlIEZCSU9HRVRDTUFQIGFuZCBGQklPUFVUQ01BUCBpb2N0bHMuCisKKworMi4gSW5zaWRlIHRoZSBrZXJuZWwKKworICAtIHN0cnVjdCBmYl9pbmZvCisKKyAgICBHZW5lcmljIGluZm9ybWF0aW9uLCBBUEkgYW5kIGxvdyBsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGZyYW1lCisgICAgYnVmZmVyIGRldmljZSBpbnN0YW5jZSAoc2xvdCBudW1iZXIsIGJvYXJkIGFkZHJlc3MsIC4uLikuCisKKyAgLSBzdHJ1Y3QgYHBhcicKKworICAgIERldmljZSBkZXBlbmRlbnQgaW5mb3JtYXRpb24gdGhhdCB1bmlxdWVseSBkZWZpbmVzIHRoZSB2aWRlbyBtb2RlIGZvciB0aGlzCisgICAgcGFydGljdWxhciBwaWVjZSBvZiBoYXJkd2FyZS4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJICAgICoqKiAgVklTVUFMUyBVU0VEIEJZIFRIRSBGUkFNRSBCVUZGRVIgREVWSUNFIEFQSSAgKioqCisKKworTW9ub2Nocm9tZSAoRkJfVklTVUFMX01PTk8wMSBhbmQgRkJfVklTVUFMX01PTk8xMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VhY2ggcGl4ZWwgaXMgZWl0aGVyIGJsYWNrIG9yIHdoaXRlLgorCisKK1BzZXVkbyBjb2xvciAoRkJfVklTVUFMX1BTRVVET0NPTE9SIGFuZCBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgd2hvbGUgcGl4ZWwgdmFsdWUgaXMgZmVkIHRocm91Z2ggYSBwcm9ncmFtbWFibGUgbG9va3VwIHRhYmxlIHRoYXQgaGFzIG9uZQorY29sb3IgKGluY2x1ZGluZyByZWQsIGdyZWVuLCBhbmQgYmx1ZSBpbnRlbnNpdGllcykgZm9yIGVhY2ggcG9zc2libGUgcGl4ZWwKK3ZhbHVlLCBhbmQgdGhhdCBjb2xvciBpcyBkaXNwbGF5ZWQuCisKKworVHJ1ZSBjb2xvciAoRkJfVklTVUFMX1RSVUVDT0xPUikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcGl4ZWwgdmFsdWUgaXMgYnJva2VuIHVwIGludG8gcmVkLCBncmVlbiwgYW5kIGJsdWUgZmllbGRzLgorCisKK0RpcmVjdCBjb2xvciAoRkJfVklTVUFMX0RJUkVDVENPTE9SKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcGl4ZWwgdmFsdWUgaXMgYnJva2VuIHVwIGludG8gcmVkLCBncmVlbiwgYW5kIGJsdWUgZmllbGRzLCBlYWNoIG9mIHdoaWNoIAorYXJlIGxvb2tlZCB1cCBpbiBzZXBhcmF0ZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBsb29rdXAgdGFibGVzLgorCisKK0dyYXlzY2FsZSBkaXNwbGF5cworLS0tLS0tLS0tLS0tLS0tLS0tCitHcmF5c2NhbGUgYW5kIHN0YXRpYyBncmF5c2NhbGUgYXJlIHNwZWNpYWwgdmFyaWFudHMgb2YgcHNldWRvIGNvbG9yIGFuZCBzdGF0aWMKK3BzZXVkbyBjb2xvciwgd2hlcmUgdGhlIHJlZCwgZ3JlZW4gYW5kIGJsdWUgY29tcG9uZW50cyBhcmUgYWx3YXlzIGVxdWFsIHRvCitlYWNoIG90aGVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvbWF0cm94ZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkN2E2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL21hdHJveGZiLnR4dApAQCAtMCwwICsxLDQxNSBAQAorW1RoaXMgZmlsZSBpcyBjbG9uZWQgZnJvbSBWZXNhRkIuIFRoYW5rcyBnbyB0byBHZXJkIEtub3JyXQorCitXaGF0IGlzIG1hdHJveGZiPworPT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIGRyaXZlciBmb3IgYSBncmFwaGljIGZyYW1lYnVmZmVyIGZvciBNYXRyb3ggZGV2aWNlcyBvbgorQWxwaGEsIEludGVsIGFuZCBQUEMgYm94ZXMuCisKK0FkdmFudGFnZXM6CisKKyAqIEl0IHByb3ZpZGVzIGEgbmljZSBsYXJnZSBjb25zb2xlICgxMjggY29scyArIDQ4IGxpbmVzIHdpdGggMTAyNHg3NjgpCisgICB3aXRob3V0IHVzaW5nIHRpbnksIHVucmVhZGFibGUgZm9udHMuCisgKiBZb3UgY2FuIHJ1biBYRns2OCw4Nn1fRkJEZXYgb3IgWEZyZWU4NiBmYmRldiBkcml2ZXIgb24gdG9wIG9mIC9kZXYvZmIwCisgKiBNb3N0IGltcG9ydGFudDogYm9vdCBsb2dvIDotKQorCitEaXNhZHZhbnRhZ2VzOgorCisgKiBncmFwaGljIG1vZGUgaXMgc2xvd2VyIHRoYW4gdGV4dCBtb2RlLi4uIGJ1dCB5b3Ugc2hvdWxkIG5vdCBub3RpY2UKKyAgIGlmIHlvdSB1c2Ugc2FtZSByZXNvbHV0aW9uIGFzIHlvdSB1c2VkIGluIHRleHRtb2RlLgorCisKK0hvdyB0byB1c2UgaXQ/Cis9PT09PT09PT09PT09PQorCitTd2l0Y2hpbmcgbW9kZXMgaXMgZG9uZSB1c2luZyB0aGUgdmlkZW89bWF0cm94ZmI6dmVzYTouLi4gYm9vdCBwYXJhbWV0ZXIKK29yIHVzaW5nIGBmYnNldCcgcHJvZ3JhbS4KKworSWYgeW91IHdhbnQsIGZvciBleGFtcGxlLCBlbmFibGUgYSByZXNvbHV0aW9uIG9mIDEyODB4MTAyNHgyNGJwcCB5b3Ugc2hvdWxkCitwYXNzIHRvIHRoZSBrZXJuZWwgdGhpcyBjb21tYW5kIGxpbmU6ICJ2aWRlbz1tYXRyb3hmYjp2ZXNhOjB4MUJCIi4KKworWW91IHNob3VsZCBjb21waWxlIGluIGJvdGggdmdhY29uICh0byBib290IGlmIHlvdSByZW1vdmUgeW91IE1hdHJveCBmcm9tCitib3gpIGFuZCBtYXRyb3hmYiAoZm9yIGdyYXBoaWNzIG1vZGUpLiBZb3Ugc2hvdWxkIG5vdCBjb21waWxlLWluIHZlc2FmYgordW5sZXNzIHlvdSBoYXZlIHByaW1hcnkgZGlzcGxheSBvbiBub24tTWF0cm94IFZCRTIuMCBkZXZpY2UgKHNlZSAKK0RvY3VtZW50YXRpb24vZmIvdmVzYWZiLnR4dCBmb3IgZGV0YWlscykuCisKK0N1cnJlbnRseSBzdXBwb3J0ZWQgdmlkZW8gbW9kZXMgYXJlICh0aHJvdWdoIHZlc2E6Li4uIGludGVyZmFjZSwgUG93ZXJNYWMKK2hhcyBbYXMgYWRkb25dIGNvbXBhdGliaWxpdHkgY29kZSk6CisKKworW0dyYXBoaWMgbW9kZXNdCisKK2JwcCB8IDY0MHg0MDAgIDY0MHg0ODAgIDc2OHg1NzYgIDgwMHg2MDAgIDk2MHg3MjAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNCB8ICAgICAgICAgICAgMHgxMiAgICAgICAgICAgICAweDEwMiAgICAgICAgICAgIAorICA4IHwgIDB4MTAwICAgIDB4MTAxICAgIDB4MTgwICAgIDB4MTAzICAgIDB4MTg4ICAgCisgMTUgfCAgICAgICAgICAgMHgxMTAgICAgMHgxODEgICAgMHgxMTMgICAgMHgxODkgICAKKyAxNiB8ICAgICAgICAgICAweDExMSAgICAweDE4MiAgICAweDExNCAgICAweDE4QSAgIAorIDI0IHwgICAgICAgICAgIDB4MUIyICAgIDB4MTg0ICAgIDB4MUI1ICAgIDB4MThDICAgCisgMzIgfCAgICAgICAgICAgMHgxMTIgICAgMHgxODMgICAgMHgxMTUgICAgMHgxOEIgICAKKworCitbR3JhcGhpYyBtb2RlcyAoY29udGludWVkKV0KKworYnBwIHwgMTAyNHg3NjggMTE1Mng4NjQgMTI4MHgxMDI0IDE0MDh4MTA1NiAxNjAweDEyMDAKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDQgfCAgIDB4MTA0ICAgICAgICAgICAgIDB4MTA2CisgIDggfCAgIDB4MTA1ICAgIDB4MTkwICAgIDB4MTA3ICAgICAweDE5OCAgICAgMHgxMUMKKyAxNSB8ICAgMHgxMTYgICAgMHgxOTEgICAgMHgxMTkgICAgIDB4MTk5ICAgICAweDExRAorIDE2IHwgICAweDExNyAgICAweDE5MiAgICAweDExQSAgICAgMHgxOUEgICAgIDB4MTFFCisgMjQgfCAgIDB4MUI4ICAgIDB4MTk0ICAgIDB4MUJCICAgICAweDE5QyAgICAgMHgxQkYKKyAzMiB8ICAgMHgxMTggICAgMHgxOTMgICAgMHgxMUIgICAgIDB4MTlCCisKKworW1RleHQgbW9kZXNdCisKK3RleHQgfCA2NDB4NDAwICA2NDB4NDgwICAxMDU2eDM0NCAgMTA1Nng0MDAgIDEwNTZ4NDgwCistLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA4eDggfCAgMHgxQzAgICAgMHgxMDggICAgIDB4MTBBICAgICAweDEwQiAgICAgMHgxMEMKKzh4MTYgfCAyLCAzLCA3ICAgICAgICAgICAgICAgICAgICAgICAweDEwOQorCitZb3UgY2FuIGVudGVyIHRoZXNlIG51bWJlciBlaXRoZXIgaGV4YWRlY2ltYWwgKGxlYWRpbmcgYDB4Jykgb3IgZGVjaW1hbAorKDB4MTAwID0gMjU2KS4gWW91IGNhbiBhbHNvIHVzZSB2YWx1ZSArIDUxMiB0byBhY2hpZXZlIGNvbXBhdGliaWxpdHkKK3dpdGggeW91ciBvbGQgbnVtYmVyIHBhc3NlZCB0byB2ZXNhZmIuCisKK05vbi1saXN0ZWQgbnVtYmVyIGNhbiBiZSBhY2hpZXZlZCBieSBtb3JlIGNvbXBsaWNhdGVkIGNvbW1hbmQtbGluZSwgZm9yCitleGFtcGxlIDE2MDB4MTIwMHgzMmJwcCBjYW4gYmUgc3BlY2lmaWVkIGJ5IGB2aWRlbz1tYXRyb3hmYjp2ZXNhOjB4MTFDLGRlcHRoOjMyJy4KKworCitYMTEKKz09PQorCitYRns2OCw4Nn1fRkJEZXYgc2hvdWxkIHdvcmsganVzdCBmaW5lLCBidXQgaXQgaXMgbm9uLWFjY2VsZXJhdGVkLiBPbiBub24taW50ZWwKK2FyY2hpdGVjdHVyZXMgdGhlcmUgYXJlIHNvbWUgZ2xpdGNoZXMgZm9yIDI0YnBwIHZpZGVvbW9kZXMuIDgsIDE2IGFuZCAzMmJwcAord29ya3MgZmluZS4KKworUnVubmluZyBhbm90aGVyIChhY2NlbGVyYXRlZCkgWC1TZXJ2ZXIgbGlrZSBYRjg2X1NWR0Egd29ya3MgdG9vLiBCdXQgKGF0IGxlYXN0KQorWEZyZWUgc2VydmVycyBoYXZlIGJpZyB0cm91YmxlcyBpbiBtdWx0aWhlYWQgY29uZmlndXJhdGlvbnMgKGV2ZW4gb24gZmlyc3QKK2hlYWQsIG5vdCBldmVuIHRhbGtpbmcgYWJvdXQgc2Vjb25kKS4gUnVubmluZyBYRnJlZTg2IDQueCBhY2NlbGVyYXRlZCBtZ2EgCitkcml2ZXIgaXMgcG9zc2libGUsIGJ1dCB5b3UgbXVzdCBub3QgZW5hYmxlIERSSSAtIGlmIHlvdSBkbywgcmVzb2x1dGlvbiBhbmQKK2NvbG9yIGRlcHRoIG9mIHlvdXIgWCBkZXNrdG9wIG11c3QgbWF0Y2ggcmVzb2x1dGlvbiBhbmQgY29sb3IgZGVwdGhzIG9mIHlvdXIKK3ZpcnR1YWwgY29uc29sZXMsIG90aGVyd2lzZSBYIHdpbGwgY29ycnVwdCBhY2NlbGVyYXRvciBzZXR0aW5ncy4KKworCitTVkdBTGliCis9PT09PT09CisKK0RyaXZlciBjb250YWlucyBTVkdBTGliIGNvbXBhdGliaWxpdHkgY29kZS4gSXQgaXMgdHVybmVkIG9uIGJ5IGNob29zaW5nIHRleHR1YWwKK21vZGUgZm9yIGNvbnNvbGUuIFlvdSBjYW4gZG8gaXQgYXQgYm9vdCB0aW1lIGJ5IHVzaW5nIHZpZGVvbW9kZQorMiwzLDcsMHgxMDgtMHgxMEMgb3IgMHgxQzAuIEF0IHJ1bnRpbWUsIGBmYnNldCAtZGVwdGggMCcgZG9lcyB0aGlzIHdvcmsuCitVbmZvcnR1bmF0ZWx5LCBhZnRlciBTVkdBTGliIGFwcGxpY2F0aW9uIGV4aXRzLCBzY3JlZW4gY29udGVudHMgaXMgY29ycnVwdGVkLgorU3dpdGNoaW5nIHRvIGFub3RoZXIgY29uc29sZSBhbmQgYmFjayBmaXhlcyBpdC4gSSBob3BlIHRoYXQgaXQgaXMgU1ZHQUxpYidzCitwcm9ibGVtIGFuZCBub3QgbWluZSwgYnV0IEknbSBub3Qgc3VyZS4KKworCitDb25maWd1cmF0aW9uCis9PT09PT09PT09PT09CisKK1lvdSBjYW4gcGFzcyBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gbWF0cm94ZmIgd2l0aAorYHZpZGVvPW1hdHJveGZiOm9wdGlvbjEsb3B0aW9uMjp2YWx1ZTIsb3B0aW9uMycgKG11bHRpcGxlIG9wdGlvbnMgc2hvdWxkIGJlIAorc2VwYXJhdGVkIGJ5IGNvbW1hLCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBmcm9tIG9wdGlvbnMgYnkgYDonKS4gCitBY2NlcHRlZCBvcHRpb25zOgorCittZW06WCAgICAtIHNpemUgb2YgbWVtb3J5IChYIGNhbiBiZSBpbiBtZWdhYnl0ZXMsIGtpbG9ieXRlcyBvciBieXRlcykKKyAgICAgICAgICAgWW91IGNhbiBvbmx5IGRlY3JlYXNlIHZhbHVlIGRldGVybWluZWQgYnkgZHJpdmVyIGJlY2F1c2Ugb2YKKwkgICBpdCBhbHdheXMgcHJvYmUgZm9yIG1lbW9yeS4gRGVmYXVsdCBpcyB0byB1c2Ugd2hvbGUgZGV0ZWN0ZWQKKwkgICBtZW1vcnkgdXNhYmxlIGZvciBvbi1zY3JlZW4gZGlzcGxheSAoaS5lLiBtYXguIDggTUIpLgorZGlzYWJsZWQgLSBkbyBub3QgbG9hZCBkcml2ZXI7IHlvdSBjYW4gdXNlIGFsc28gYG9mZicsIGJ1dCBgZGlzYWJsZWQnCisgICAgICAgICAgIGlzIGhlcmUgdG9vLgorZW5hYmxlZCAgLSBsb2FkIGRyaXZlciwgaWYgeW91IGhhdmUgYHZpZGVvPW1hdHJveGZiOmRpc2FibGVkJyBpbiBMSUxPCisgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgaXQgYnkgdGhpcyAoeW91IGNhbm5vdCBvdmVycmlkZQorCSAgIGBvZmYnKS4gSXQgaXMgZGVmYXVsdC4KK25vYWNjZWwgIC0gZG8gbm90IHVzZSBhY2NlbGVyYXRpb24gZW5naW5lLiBJdCBkb2VzIG5vdCB3b3JrIG9uIEFscGhhcy4KK2FjY2VsICAgIC0gdXNlIGFjY2VsZXJhdGlvbiBlbmdpbmUuIEl0IGlzIGRlZmF1bHQuCitub3BhbiAgICAtIGNyZWF0ZSBpbml0aWFsIGNvbnNvbGVzIHdpdGggdnlyZXMgPSB5cmVzLCB0aHVzIGRpc2FibGluZyB2aXJ0dWFsCisgICAgICAgICAgIHNjcm9sbGluZy4KK3BhbiAgICAgIC0gY3JlYXRlIGluaXRpYWwgY29uc29sZXMgYXMgdGFsbCBhcyBwb3NzaWJsZSAodnlyZXMgPSBtZW1vcnkvdnhyZXMpLgorICAgICAgICAgICBJdCBpcyBkZWZhdWx0Lgorbm9wY2lyZXRyeSAtIGRpc2FibGUgUENJIHJldHJpZXMuIEl0IGlzIG5lZWRlZCBmb3Igc29tZSBicm9rZW4gY2hpcHNldHMsCisgICAgICAgICAgIGl0IGlzIGF1dG9kZXRlY3RlZCBmb3IgaW50ZWwncyA4MjQzNy4gSW4gdGhpcyBjYXNlIGRldmljZSBkb2VzCisJICAgbm90IGNvbXBseSB0byBQQ0kgMi4xIHNwZWNzIChpdCB3aWxsIG5vdCBndWFyYW50ZWUgdGhhdCBldmVyeQorCSAgIHRyYW5zYWN0aW9uIHRlcm1pbmF0ZSB3aXRoIHN1Y2Nlc3Mgb3IgcmV0cnkgaW4gMzIgUENMSykuCitwY2lyZXRyeSAtIGVuYWJsZSBQQ0kgcmV0cmllcy4gSXQgaXMgZGVmYXVsdCwgZXhjZXB0IGZvciBpbnRlbCdzIDgyNDM3Lgorbm92Z2EgICAgLSBkaXNhYmxlcyBWR0EgSS9PIHBvcnRzLiBJdCBpcyBkZWZhdWx0IGlmIEJJT1MgZGlkIG5vdCBlbmFibGUgZGV2aWNlLgorICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBvcHRpb24sIHNvbWUgYm9hcmRzIHRoZW4gZG8gbm90IHJlc3RhcnQKKwkgICB3aXRob3V0IHBvd2VyIG9mZi4KK3ZnYSAgICAgIC0gcHJlc2VydmUgc3RhdGUgb2YgVkdBIEkvTyBwb3J0cy4gSXQgaXMgZGVmYXVsdC4gRHJpdmVyIGRvZXMgbm90CisgICAgICAgICAgIGVuYWJsZSBWR0EgSS9PIGlmIEJJT1MgZGlkIG5vdCBpdCAoaXQgaXMgbm90IHNhZmUgdG8gZW5hYmxlIGl0IGluCisJICAgbW9zdCBjYXNlcykuCitub2Jpb3MgICAtIGRpc2FibGVzIEJJT1MgUk9NLiBJdCBpcyBkZWZhdWx0IGlmIEJJT1MgZGlkIG5vdCBlbmFibGUgQklPUyBpdHNlbGYuCisgICAgICAgICAgIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIG9wdGlvbiwgc29tZSBib2FyZHMgdGhlbiBkbyBub3QgcmVzdGFydAorCSAgIHdpdGhvdXQgcG93ZXIgb2ZmLgorYmlvcyAgICAgLSBwcmVzZXJ2ZSBzdGF0ZSBvZiBCSU9TIFJPTS4gSXQgaXMgZGVmYXVsdC4gRHJpdmVyIGRvZXMgbm90IGVuYWJsZQorICAgICAgICAgICBCSU9TIGlmIEJJT1Mgd2FzIG5vdCBlbmFibGVkIGJlZm9yZS4KK25vaW5pdCAgIC0gdGVsbHMgZHJpdmVyLCB0aGF0IGRldmljZXMgd2VyZSBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIHVzZQorICAgICAgICAgICBpdCBpZiB5b3UgaGF2ZSBHMTAwIGFuZC9vciBpZiBkcml2ZXIgY2Fubm90IGRldGVjdCBtZW1vcnksIHlvdSBzZWUKKwkgICBzdHJhbmdlIHBhdHRlcm4gb24gc2NyZWVuIGFuZCBzbyBvbi4gRGV2aWNlcyBub3QgZW5hYmxlZCBieSBCSU9TCisJICAgYXJlIHN0aWxsIGluaXRpYWxpemVkLiBJdCBpcyBkZWZhdWx0LgoraW5pdCAgICAgLSBkcml2ZXIgaW5pdGlhbGl6ZXMgZXZlcnkgZGV2aWNlIGl0IGtub3dzIGFib3V0LgorbWVtdHlwZSAgLSBzcGVjaWZpZXMgbWVtb3J5IHR5cGUsIGltcGxpZXMgJ2luaXQnLiBUaGlzIGlzIHZhbGlkIG9ubHkgZm9yIEcyMDAgCisgICAgICAgICAgIGFuZCBHNDAwIGFuZCBoYXMgZm9sbG93aW5nIG1lYW5pbmc6CisgICAgICAgICAgICAgRzIwMDogMCAtPiAyeDEyOEt4MzIgY2hpcHMsIDJNQiBvbmJvYXJkLCBwcm9iYWJseSBzZ3JhbQorICAgICAgICAgICAgICAgICAgIDEgLT4gMngxMjhLeDMyIGNoaXBzLCA0TUIgb25ib2FyZCwgcHJvYmFibHkgc2dyYW0KKyAgICAgICAgICAgICAgICAgICAyIC0+IDJ4MjU2S3gzMiBjaGlwcywgNE1CIG9uYm9hcmQsIHByb2JhYmx5IHNncmFtCisgICAgICAgICAgICAgICAgICAgMyAtPiAyeDI1Nkt4MzIgY2hpcHMsIDhNQiBvbmJvYXJkLCBwcm9iYWJseSBzZ3JhbQorICAgICAgICAgICAgICAgICAgIDQgLT4gMng1MTJLeDE2IGNoaXBzLCA4LzE2TUIgb25ib2FyZCwgcHJvYmFibHkgc2RyYW0gb25seQorICAgICAgICAgICAgICAgICAgIDUgLT4gc2FtZSBhcyBhYm92ZQorICAgICAgICAgICAgICAgICAgIDYgLT4gNHgxMjhLeDMyIGNoaXBzLCA0TUIgb25ib2FyZCwgcHJvYmFibHkgc2dyYW0KKyAgICAgICAgICAgICAgICAgICA3IC0+IDR4MTI4S3gzMiBjaGlwcywgOE1CIG9uYm9hcmQsIHByb2JhYmx5IHNncmFtCisgICAgICAgICAgICAgRzQwMDogMCAtPiAyeDUxMkt4MTYgU0RSQU0sIDE2LzMyTUIKKyAgICAgICAgICAgICAgICAgICAgICAgIDJ4NTEyS3gzMiBTR1JBTSwgMTYvMzJNQgorICAgICAgICAgICAgICAgICAgIDEgLT4gMngyNTZLeDMyIFNHUkFNLCA4LzE2TUIKKyAgICAgICAgICAgICAgICAgICAyIC0+IDR4MTI4S3gzMiBTR1JBTSwgOC8xNk1CCisgICAgICAgICAgICAgICAgICAgMyAtPiA0eDUxMkt4MzIgU0RSQU0sIDMyTUIKKyAgICAgICAgICAgICAgICAgICA0IC0+IDR4MjU2S3gzMiBTR1JBTSwgMTYvMzJNQgorICAgICAgICAgICAgICAgICAgIDUgLT4gMngxTXgzMiBTRFJBTSwgMzJNQgorICAgICAgICAgICAgICAgICAgIDYgLT4gcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICA3IC0+IHJlc2VydmVkCisgICAgICAgICAgIFlvdSBzaG91bGQgdXNlIHNkcmFtIG9yIHNncmFtIHBhcmFtZXRlciBpbiBhZGRpdGlvbiB0byBtZW10eXBlIAorICAgICAgICAgICBwYXJhbWV0ZXIuCitub210cnIgICAtIGRpc2FibGVzIHdyaXRlIGNvbWJpbmluZyBvbiBmcmFtZSBidWZmZXIuIFRoaXMgc2xvd3MgZG93biBkcml2ZXIgYnV0CisgICAgICAgICAgIHRoZXJlIGlzIHJlcG9ydGVkIG1pbm9yIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIEdVUyBETUEgYW5kIFhGcmVlCisJICAgdW5kZXIgaGlnaCBsb2FkcyBpZiB3cml0ZSBjb21iaW5pbmcgaXMgZW5hYmxlZCAoc291bmQgZHJvcG91dHMpLgorbXRyciAgICAgLSBlbmFibGVzIHdyaXRlIGNvbWJpbmluZyBvbiBmcmFtZSBidWZmZXIuIEl0IHNwZWVkcyB1cCB2aWRlbyBhY2Nlc3NlcworICAgICAgICAgICBtdWNoLiBJdCBpcyBkZWZhdWx0LiBZb3UgbXVzdCBoYXZlIE1UUlIgc3VwcG9ydCBlbmFibGVkIGluIGtlcm5lbAorCSAgIGFuZCB5b3VyIENQVSBtdXN0IGhhdmUgTVRSUiAoZi5lLiBQZW50aXVtIElJIGhhdmUgdGhlbSkuCitzZ3JhbSAgICAtIHRlbGxzIHRvIGRyaXZlciB0aGF0IHlvdSBoYXZlIEd4eDAgd2l0aCBTR1JBTSBtZW1vcnkuIEl0IGhhcyBubworICAgICAgICAgICBlZmZlY3Qgd2l0aG91dCBgaW5pdCcuCitzZHJhbSAgICAtIHRlbGxzIHRvIGRyaXZlciB0aGF0IHlvdSBoYXZlIEd4eDAgd2l0aCBTRFJBTSBtZW1vcnkuCisgICAgICAgICAgIEl0IGlzIGEgZGVmYXVsdC4KK2ludjI0ICAgIC0gY2hhbmdlIHRpbWluZ3MgcGFyYW1ldGVycyBmb3IgMjRicHAgbW9kZXMgb24gTWlsbGVuaXVtIGFuZAorICAgICAgICAgICBNaWxsZW5pdW0gSUkuIFNwZWNpZnkgdGhpcyBpZiB5b3Ugc2VlIHN0cmFuZ2UgY29sb3Igc2hhZG93cyBhcm91bmQKKwkgICBjaGFyYWN0ZXJzLgorbm9pbnYyNCAgLSB1c2Ugc3RhbmRhcmQgdGltaW5ncy4gSXQgaXMgdGhlIGRlZmF1bHQuCitpbnZlcnNlICAtIGludmVydCBjb2xvcnMgb24gc2NyZWVuIChmb3IgTENEIGRpc3BsYXlzKQorbm9pbnZlcnNlIC0gc2hvdyB0cnVlIGNvbG9ycyBvbiBzY3JlZW4uIEl0IGlzIGRlZmF1bHQuCitkZXY6WCAgICAtIGJpbmQgZHJpdmVyIHRvIGRldmljZSBYLiBEcml2ZXIgbnVtYmVycyBkZXZpY2UgZnJvbSAwIHVwIHRvIE4sCisgICAgICAgICAgIHdoZXJlIGRldmljZSAwIGlzIGZpcnN0IGBrbm93bicgZGV2aWNlIGZvdW5kLCAxIHNlY29uZCBhbmQgc28gb24uCisJICAgbHNwY2kgbGlzdHMgZGV2aWNlcyBpbiB0aGlzIG9yZGVyLgorCSAgIERlZmF1bHQgaXMgYGV2ZXJ5JyBrbm93biBkZXZpY2UgZm9yIGRyaXZlciB3aXRoIG11bHRpaGVhZCBzdXBwb3J0CisJICAgYW5kIGZpcnN0IHdvcmtpbmcgZGV2aWNlICh1c3VhbGx5IGRldjowKSBmb3IgZHJpdmVyIHdpdGhvdXQKKwkgICBtdWx0aWhlYWQgc3VwcG9ydC4KK25vaHdjdXJzb3IgLSBkaXNhYmxlcyBoYXJkd2FyZSBjdXJzb3IgKHVzZSBzb2Z0d2FyZSBjdXJzb3IgaW5zdGVhZCkuCitod2N1cnNvciAtIGVuYWJsZXMgaGFyZHdhcmUgY3Vyc29yLiBJdCBpcyBkZWZhdWx0LiBJZiB5b3UgYXJlIHVzaW5nCisgICAgICAgICAgIG5vbi1hY2NlbGVyYXRlZCBtb2RlIChgbm9hY2NlbCcgb3IgYGZic2V0IC1hY2NlbCBmYWxzZScpLCBzb2Z0d2FyZQorCSAgIGN1cnNvciBpcyB1c2VkIChleGNlcHQgZm9yIHRleHQgbW9kZSkuCitub2JsaW5rICAtIGRpc2FibGVzIGN1cnNvciBibGlua2luZy4gQ3Vyc29yIGluIHRleHQgbW9kZSBhbHdheXMgYmxpbmtzIChodworICAgICAgICAgICBsaW1pdGF0aW9uKS4KK2JsaW5rICAgIC0gZW5hYmxlcyBjdXJzb3IgYmxpbmtpbmcuIEl0IGlzIGRlZmF1bHQuCitub2Zhc3Rmb250IC0gZGlzYWJsZXMgZmFzdGZvbnQgZmVhdHVyZS4gSXQgaXMgZGVmYXVsdC4KK2Zhc3Rmb250OlggLSBlbmFibGVzIGZhc3Rmb250IGZlYXR1cmUuIFggc3BlY2lmaWVzIHNpemUgb2YgbWVtb3J5IHJlc2VydmVkIGZvcgorICAgICAgICAgICAgIGZvbnQgZGF0YSwgaXQgbXVzdCBiZSA+PSAoZm9udHdpZHRoKmZvbnRoZWlnaHQqY2hhcnNfaW5fZm9udCkvOC4KKwkgICAgIEl0IGlzIGZhc3RlciBvbiBHeDAwIHNlcmllcywgYnV0IHNsb3dlciBvbiBvbGRlciBjYXJkcy4KK2dyYXlzY2FsZSAtIGVuYWJsZSBncmF5c2NhbGUgc3VtbWluZy4gSXQgd29ya3MgaW4gUFNFVURPQ09MT1IgbW9kZXMgKHRleHQsCisgICAgICAgICAgICA0YnBwLCA4YnBwKS4gSW4gRElSRUNUQ09MT1IgbW9kZXMgaXQgaXMgbGltaXRlZCB0byBjaGFyYWN0ZXJzCisJICAgIGRpc3BsYXllZCB0aHJvdWdoIHB1dGMvcHV0Y3MuIERpcmVjdCBhY2Nlc3NlcyB0byBmcmFtZWJ1ZmZlcgorCSAgICBjYW4gcGFpbnQgY29sb3JzLgorbm9ncmF5c2NhbGUgLSBkaXNhYmxlIGdyYXlzY2FsZSBzdW1taW5nLiBJdCBpcyBkZWZhdWx0LgorY3Jvc3M0TUIgLSBlbmFibGVzIHRoYXQgcGl4ZWwgbGluZSBjYW4gY3Jvc3MgNE1CIGJvdW5kYXJ5LiBJdCBpcyBkZWZhdWx0IGZvcgorICAgICAgICAgICBub24tTWlsbGVuaXVtLgorbm9jcm9zczRNQiAtIHBpeGVsIGxpbmUgbXVzdCBub3QgY3Jvc3MgNE1CIGJvdW5kYXJ5LiBJdCBpcyBkZWZhdWx0IGZvcgorICAgICAgICAgICAgIE1pbGxlbml1bSBJIG9yIElJLCBiZWNhdXNlIG9mIHRoZXNlIGRldmljZXMgaGF2ZSBoYXJkd2FyZQorCSAgICAgbGltaXRhdGlvbnMgd2hpY2ggZG8gbm90IGFsbG93IHRoaXMuIEJ1dCB0aGlzIG9wdGlvbiBpcworCSAgICAgaW5jb21wYXRpYmxlIHdpdGggc29tZSAoaWYgbm90IGFsbCB5ZXQgcmVsZWFzZWQpIHZlcnNpb25zIG9mCisJICAgICBYRjg2X0ZCRGV2LgorZGZwICAgICAgLSBlbmFibGVzIGRpZ2l0YWwgZmxhdCBwYW5lbCBpbnRlcmZhY2UuIFRoaXMgb3B0aW9uIGlzIGluY29tcGF0aWJsZSB3aXRoCisgICAgICAgICAgIHNlY29uZGFyeSAoVFYpIG91dHB1dCAtIGlmIERGUCBpcyBhY3RpdmUsIFRWIG91dHB1dCBtdXN0IGJlCisJICAgaW5hY3RpdmUgYW5kIHZpY2UgdmVyc2EuIERGUCBhbHdheXMgdXNlcyBzYW1lIHRpbWluZyBhcyBwcmltYXJ5CisJICAgKG1vbml0b3IpIG91dHB1dC4KK2RmcDpYICAgIC0gdXNlIHNldHRpbmdzIFggZm9yIGRpZ2l0YWwgZmxhdCBwYW5lbCBpbnRlcmZhY2UuIFggaXMgbnVtYmVyIGZyb20KKyAgICAgICAgICAgMCB0byAweEZGLCBhbmQgbWVhbmluZyBvZiBlYWNoIGluZGl2aWR1YWwgYml0IGlzIGRlc2NyaWJlZCBpbgorCSAgIEc0MDAgbWFudWFsLCBpbiBkZXNjcmlwdGlvbiBvZiBEQUMgcmVnaXN0ZXIgMHgxRi4gRm9yIG5vcm1hbCBvcGVyYXRpb24KKwkgICB5b3Ugc2hvdWxkIHNldCBhbGwgYml0cyB0byB6ZXJvLCBleGNlcHQgbG93ZXN0IGJpdC4gVGhpcyBsb3dlc3QgYml0CisJICAgc2VsZWN0cyB3aG8gaXMgc291cmNlIG9mIGRpc3BsYXkgY2xvY2tzLCB3aGV0aGVyIEc0MDAsIG9yIHBhbmVsLgorCSAgIERlZmF1bHQgdmFsdWUgaXMgbm93IHJlYWQgYmFjayBmcm9tIGhhcmR3YXJlIC0gc28geW91IHNob3VsZCBzcGVjaWZ5CisJICAgdGhpcyB2YWx1ZSBvbmx5IGlmIHlvdSBhcmUgYWxzbyB1c2luZyBgaW5pdCcgcGFyYW1ldGVyLgorb3V0cHV0czpYWVogLSBzZXQgbWFwcGluZyBiZXR3ZWVuIENSVEMgYW5kIG91dHB1dHMuIEVhY2ggbGV0dGVyIGNhbiBoYXZlIHZhbHVlCisgICAgICAgICAgIG9mIDAgKGZvciBubyBDUlRDKSwgMSAoQ1JUQzEpIG9yIDIgKENSVEMyKSwgYW5kIGZpcnN0IGxldHRlciBjb3JyZXNwb25kcworCSAgIHRvIHByaW1hcnkgYW5hbG9nIG91dHB1dCwgc2Vjb25kIGxldHRlciB0byB0aGUgc2Vjb25kYXJ5IGFuYWxvZyBvdXRwdXQKKwkgICBhbmQgdGhpcmQgbGV0dGVyIHRvIHRoZSBEVkkgb3V0cHV0LiBEZWZhdWx0IHNldHRpbmcgaXMgMTAwIGZvcgorCSAgIGNhcmRzIGJlbG93IEc0MDAgb3IgRzQwMCB3aXRob3V0IERGUCwgMTAxIGZvciBHNDAwIHdpdGggREZQLCBhbmQKKwkgICAxMTEgZm9yIEc0NTAgYW5kIEc1NTAuIFlvdSBjYW4gc2V0IG1hcHBpbmcgb25seSBvbiBmaXJzdCBjYXJkLAorCSAgIHVzZSBtYXRyb3hzZXQgZm9yIHNldHRpbmcgdXAgb3RoZXIgZGV2aWNlcy4KK3Zlc2E6WCAgIC0gc2VsZWN0cyBzdGFydHVwIHZpZGVvbW9kZS4gWCBpcyBudW1iZXIgZnJvbSAwIHRvIDB4MUZGLCBzZWUgdGFibGUKKyAgICAgICAgICAgYWJvdmUgZm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBEZWZhdWx0IGlzIDY0MHg0ODB4OGJwcCBpZiBkcml2ZXIKKwkgICBoYXMgOGJwcCBzdXBwb3J0LiBPdGhlcndpc2UgZmlyc3QgYXZhaWxhYmxlIG9mIDY0MHgzNTB4NGJwcCwKKwkgICA2NDB4NDgweDE1YnBwLCA2NDB4NDgweDI0YnBwLCA2NDB4NDgweDMyYnBwIG9yIDgweDI1IHRleHQKKwkgICAoODB4MjUgdGV4dCBpcyBhbHdheXMgYXZhaWxhYmxlKS4KKworSWYgeW91IGFyZSBub3Qgc2F0aXNmaWVkIHdpdGggdmlkZW9tb2RlIHNlbGVjdGVkIGJ5IGB2ZXNhJyBvcHRpb24sIHlvdQorY2FuIG1vZGlmeSBpdCB3aXRoIHRoZXNlIG9wdGlvbnM6CisKK3hyZXM6WCAgIC0gaG9yaXpvbnRhbCByZXNvbHV0aW9uLCBpbiBwaXhlbHMuIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJworICAgICAgICAgICBvcHRpb24uCit5cmVzOlggICAtIHZlcnRpY2FsIHJlc29sdXRpb24sIGluIHBpeGVsIGxpbmVzLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScKKyAgICAgICAgICAgb3B0aW9uLgordXBwZXI6WCAgLSB0b3AgYm91bmRhcnk6IGxpbmVzIGJldHdlZW4gZW5kIG9mIFZTWU5DIHB1bHNlIGFuZCBzdGFydCBvZiBmaXJzdAorICAgICAgICAgICBwaXhlbCBsaW5lIG9mIHBpY3R1cmUuIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJyBvcHRpb24uCitsb3dlcjpYICAtIGJvdHRvbSBib3VuZGFyeTogbGluZXMgYmV0d2VlbiBlbmQgb2YgcGljdHVyZSBhbmQgc3RhcnQgb2YgVlNZTkMKKyAgICAgICAgICAgcHVsc2UuIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJyBvcHRpb24uCit2c2xlbjpYICAtIGxlbmd0aCBvZiBWU1lOQyBwdWxzZSwgaW4gbGluZXMuIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJworICAgICAgICAgICBvcHRpb24uCitsZWZ0OlggICAtIGxlZnQgYm91bmRhcnk6IHBpeGVscyBiZXR3ZWVuIGVuZCBvZiBIU1lOQyBwdWxzZSBhbmQgZmlyc3QgcGl4ZWwuCisgICAgICAgICAgIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJyBvcHRpb24uCityaWdodDpYICAtIHJpZ2h0IGJvdW5kYXJ5OiBwaXhlbHMgYmV0d2VlbiBlbmQgb2YgcGljdHVyZSBhbmQgc3RhcnQgb2YgSFNZTkMKKyAgICAgICAgICAgcHVsc2UuIERlZmF1bHQgaXMgZGVyaXZlZCBmcm9tIGB2ZXNhJyBvcHRpb24uCitoc2xlbjpYICAtIGxlbmd0aCBvZiBIU1lOQyBwdWxzZSwgaW4gcGl4ZWxzLiBEZWZhdWx0IGlzIGRlcml2ZWQgZnJvbSBgdmVzYScKKyAgICAgICAgICAgb3B0aW9uLgorcGl4Y2xvY2s6WCAtIGRvdGNsb2NrcywgaW4gcHMgKHBpY29zZWNvbmRzKS4gRGVmYXVsdCBpcyBkZXJpdmVkIGZyb20gYHZlc2EnCisgICAgICAgICAgICAgb3B0aW9uIGFuZCBmcm9tIGBmaCcgYW5kIGBmdicgb3B0aW9ucy4KK3N5bmM6WCAgIC0gc3luYy4gcHVsc2UgLSBiaXQgMCBpbnZlcnRzIEhTWU5DIHBvbGFyaXR5LCBiaXQgMSBWU1lOQyBwb2xhcml0eS4KKyAgICAgICAgICAgSWYgYml0IDMgKHZhbHVlIDB4MDgpIGlzIHNldCwgY29tcG9zaXRlIHN5bmMgaW5zdGVhZCBvZiBIU1lOQyBpcworCSAgIGdlbmVyYXRlZC4gSWYgYml0IDUgKHZhbHVlIDB4MjApIGlzIHNldCwgc3luYyBvbiBncmVlbiBpcyB0dXJuZWQgb24uCisJICAgRG8gbm90IGZvcmdldCB0aGF0IGlmIHlvdSB3YW50IHN5bmMgb24gZ3JlZW4sIHlvdSBhbHNvIHByb2JhYmx5CisJICAgd2FudCBjb21wb3NpdGUgc3luYy4KKwkgICBEZWZhdWx0IGRlcGVuZHMgb24gYHZlc2EnLgorZGVwdGg6WCAgLSBCaXRzIHBlciBwaXhlbDogMD10ZXh0LCA0LDgsMTUsMTYsMjQgb3IgMzIuIERlZmF1bHQgZGVwZW5kcyBvbgorICAgICAgICAgICBgdmVzYScuCisKK0lmIHlvdSBrbm93IGNhcGFiaWxpdGllcyBvZiB5b3VyIG1vbml0b3IsIHlvdSBjYW4gc3BlY2lmeSBzb21lIChvciBhbGwpIG9mCitgbWF4Y2xrJywgYGZoJyBhbmQgYGZ2Jy4gSW4gdGhpcyBjYXNlLCBgcGl4Y2xvY2snIGlzIGNvbXB1dGVkIHNvIHRoYXQKK3BpeGNsb2NrIDw9IG1heGNsaywgcmVhbF9maCA8PSBmaCBhbmQgcmVhbF9mdiA8PSBmdi4KKworbWF4Y2xrOlggLSBtYXhpbXVtIGRvdGNsb2NrLiBYIGNhbiBiZSBzcGVjaWZpZWQgaW4gTUh6LCBrSHogb3IgSHouIERlZmF1bHQgaXMKKyAgICAgICAgICAgYGRvbid0IGNhcmUnLgorZmg6WCAgICAgLSBtYXhpbXVtIGhvcml6b250YWwgc3luY2hyb25pemF0aW9uIGZyZXF1ZW5jeS4gWCBjYW4gYmUgc3BlY2lmaWVkCisgICAgICAgICAgIGluIGtIeiBvciBIei4gRGVmYXVsdCBpcyBgZG9uJ3QgY2FyZScuCitmdjpYICAgICAtIG1heGltdW0gdmVydGljYWwgZnJlcXVlbmN5LiBYIG11c3QgYmUgc3BlY2lmaWVkIGluIEh6LiBEZWZhdWx0IGlzCisgICAgICAgICAgIDcwIGZvciBtb2RlcyBkZXJpdmVkIGZyb20gYHZlc2EnIHdpdGggeXJlcyA8PSA0MDAsIDYwSHogZm9yCisJICAgeXJlcyA+IDQwMC4KKworCitMaW1pdGF0aW9ucworPT09PT09PT09PT0KKworVGhlcmUgYXJlIGtub3duIGFuZCB1bmtub3duIGJ1Z3MsIGZlYXR1cmVzIGFuZCBtaXNmZWF0dXJlcy4KK0N1cnJlbnRseSB0aGVyZSBhcmUgZm9sbG93aW5nIGtub3duIGJ1Z3M6CisgKyBTVkdBTGliIGRvZXMgbm90IHJlc3RvcmUgc2NyZWVuIG9uIGV4aXQKKyArIGdlbmVyaWMgZmJjb24tY2ZiWCBwcm9jZWR1cmVzIGRvIG5vdCB3b3JrIG9uIEFscGhhcy4gRHVlIHRvIHRoaXMsCisgICBgbm9hY2NlbCcgKGFuZCBjZmI0IGFjY2VsKSBkcml2ZXIgZG9lcyBub3Qgd29yayBvbiBBbHBoYS4gU28gZXZlcnlvbmUKKyAgIHdpdGggYWNjZXNzIHRvIC9kZXYvZmIqIG9uIEFscGhhIGNhbiBoYW5nIG1hY2hpbmUgKHlvdSBzaG91bGQgcmVzdHJpY3QKKyAgIGFjY2VzcyB0byAvZGV2L2ZiKiAtIGV2ZXJ5b25lIHdpdGggYWNjZXNzIHRvIHRoaXMgZGV2aWNlIGNhbiBkZXN0cm95CisgICB5b3VyIG1vbml0b3IsIGJlbGlldmUgbWUuLi4pLgorICsgMjRicHAgZG9lcyBub3Qgc3VwcG9ydCBjb3JyZWN0bHkgWEYtRkJEZXYgb24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzLgorICsgaW50ZXJsYWNlZCB0ZXh0IG1vZGUgaXMgbm90IHN1cHBvcnRlZDsgaXQgbG9va3MgbGlrZSBoYXJkd2FyZSBsaW1pdGF0aW9uLAorICAgYnV0IEknbSBub3Qgc3VyZS4KKyArIEd4eDAgU0dSQU0vU0RSQU0gaXMgbm90IGF1dG9kZXRlY3RlZC4KKyArIElmIHlvdSBhcmUgdXNpbmcgbW9yZSB0aGFuIG9uZSBmcmFtZWJ1ZmZlciBkZXZpY2UsIHlvdSBtdXN0IGJvb3Qga2VybmVsCisgICB3aXRoICd2aWRlbz1zY3JvbGxiYWNrOjAnLgorICsgbWF5YmUgbW9yZS4uLgorQW5kIGZvbGxvd2luZyBtaXNmZWF0dXJlczoKKyArIFNWR0FMaWIgZG9lcyBub3QgcmVzdG9yZSBzY3JlZW4gb24gZXhpdC4KKyArIHBpeGNsb2NrIGZvciB0ZXh0IG1vZGVzIGlzIGxpbWl0ZWQgYnkgaGFyZHdhcmUgdG8KKyAgICA4MyBNSHogb24gRzIwMAorICAgIDY2IE1IeiBvbiBNaWxsZW5uaXVtIEkKKyAgICA2MCBNSHogb24gTWlsbGVubml1bSBJSQorICAgQmVjYXVzZSBJIGhhdmUgbm8gYWNjZXNzIHRvIG90aGVyIGRldmljZXMsIEkgZG8gbm90IGtub3cgc3BlY2lmaWMKKyAgIGZyZXF1ZW5jaWVzIGZvciB0aGVtLiBTbyBkcml2ZXIgZG9lcyBub3QgY2hlY2sgdGhpcyBhbmQgYWxsb3dzIHlvdSB0bworICAgc2V0IGZyZXF1ZW5jeSBoaWdoZXIgdGhhdCB0aGlzLiBJdCBjYXVzZXMgc3BhcmtzLCBibGFjayBob2xlcyBhbmQgb3RoZXIKKyAgIHByZXR0eSBlZmZlY3RzIG9uIHNjcmVlbi4gRGV2aWNlIHdhcyBub3QgZGVzdHJveWVkIGR1cmluZyB0ZXN0cy4gOi0pCisgKyBteSBNaWxsZW5uaXVtIEcyMDAgb3NjaWxsYXRvciBoYXMgZnJlcXVlbmN5IHJhbmdlIGZyb20gMzUgTUh6IHRvIDM4MCBNSHoKKyAgIChhbmQgaXQgd29ya3Mgd2l0aCA4YnBwIG9uIGFib3V0IDMyMCBNSHogZG90Y2xvY2tzIChhbmQgY2hhbmdlZCBtY2xrKSkuCisgICBCdXQgTWF0cm94IHNheXMgb24gcHJvZHVjdCBzaGVldCB0aGF0IFZDTyBsaW1pdCBpcyA1MC0yNTAgTUh6LCBzbyBJIGJlbGlldmUKKyAgIHRoZW0gKG1heWJlIHRoYXQgY2hpcCBvdmVyaGVhdHMsIGJ1dCBpdCBoYXMgYSB2ZXJ5IGJpZyBjb29sZXIgKEcxMDAgaGFzCisgICBub25lKSwgc28gaXQgc2hvdWxkIHdvcmspLgorICsgc3BlY2lhbCBtaXhlZCB2aWRlby9ncmFwaGljcyB2aWRlb21vZGVzIG9mIE15c3RpcXVlIGFuZCBHeDAwIC0gMkc4VjE2IGFuZAorICAgRzE2VjE2IGFyZSBub3Qgc3VwcG9ydGVkCisgKyBjb2xvciBrZXlpbmcgaXMgbm90IHN1cHBvcnRlZAorICsgZmVhdHVyZSBjb25uZWN0b3Igb2YgTXlzdGlxdWUgYW5kIEd4MDAgaXMgc2V0IHRvIFZHQSBtb2RlIChpdCBpcyBkaXNhYmxlZAorICAgYnkgQklPUykKKyArIEREQyAobW9uaXRvciBkZXRlY3Rpb24pIGlzIHN1cHBvcnRlZCB0aHJvdWdoIGR1YWxoZWFkIGRyaXZlcgorICsgc29tZSBjaGVjayBmb3IgaW5wdXQgdmFsdWVzIGFyZSBub3Qgc28gc3RyaWN0IGhvdyBpdCBzaG91bGQgYmUgKHlvdSBjYW4KKyAgIHNwZWNpZnkgdnNsZW49NDAwMCBhbmQgc28gb24pLgorICsgbWF5YmUgbW9yZS4uLgorQW5kIGZvbGxvd2luZyBmZWF0dXJlczoKKyArIDRicHAgaXMgYXZhaWxhYmxlIG9ubHkgb24gTWlsbGVubml1bSBJIGFuZCBNaWxsZW5uaXVtIElJLiBJdCBpcyBoYXJkd2FyZQorICAgbGltaXRhdGlvbi4KKyArIHNlbGVjdGlvbiBiZXR3ZWVuIDE6NTo1OjUgYW5kIDU6Njo1IDE2YnBwIHZpZGVvbW9kZSBpcyBkb25lIGJ5IC1yZ2JhIAorICAgb3B0aW9uIG9mIGZic2V0OiAiZmJzZXQgLWRlcHRoIDE2IC1yZ2JhIDUsNSw1IiBzZWxlY3RzIDE6NTo1OjUsIGFueXRoaW5nCisgICBlbHNlIHNlbGVjdHMgNTo2OjUgbW9kZS4KKyArIHRleHQgbW9kZSB1c2VzIDYgYml0IFZHQSBwYWxldHRlIGluc3RlYWQgb2YgOCBiaXQgKG9uZSBvZiAyNjIxNDQgY29sb3JzCisgICBpbnN0ZWFkIG9mIG9uZSBvZiAxNk0gY29sb3JzKS4gSXQgaXMgZHVlIHRvIGhhcmR3YXJlIGxpbWl0YXRpb24gb2YgCisgICBNaWxsZW5uaXVtIEkvSUkgYW5kIFNWR0FMaWIgY29tcGF0aWJpbGl0eS4KKworCitCZW5jaG1hcmtzCis9PT09PT09PT09CitJdCBpcyB0aW1lIHRvIHJlZHJhdyB3aG9sZSBzY3JlZW4gMTAwMCB0aW1lcyBpbiAxMDI0eDc2OCwgNjBIei4gSXQgaXMKK3RpbWUgZm9yIGRyYXcgNjE0NDAwMCBjaGFyYWN0ZXJzIG9uIHNjcmVlbiB0aHJvdWdoIC9kZXYvdmNzYQorKGZvciAzMmJwcCBpdCBpcyBhYm91dCAzR0Igb2YgZGF0YSAoZXhhY3RseSAzMDAwIE1CKTsgZm9yIDh4MTYgZm9udCBpbiAKKzE2IHNlY29uZHMsIGkuZS4gMTg3IE1CcHMpLgorVGltZXMgd2VyZSBvYnRhaW5lZCBmcm9tIG9uZSBvbGRlciB2ZXJzaW9uIG9mIGRyaXZlciwgbm93IHRoZXkgYXJlIGFib3V0IDMlCitmYXN0ZXIsIGl0IGlzIGtlcm5lbC1zcGFjZSBvbmx5IHRpbWUgb24gUC1JSS8zNTAgTUh6LCBNaWxsZW5uaXVtIEkgaW4gMzMgTUh6CitQQ0kgc2xvdCwgRzIwMCBpbiBBR1AgMnggc2xvdC4gSSBkaWQgbm90IHRlc3QgdmdhY29uLgorCitOT0FDQ0VMCisgICAgICAgIDh4MTYgICAgICAgICAgICAgICAgIDEyeDIyCisgICAgICAgIE1pbGxlbm5pdW0gSSAgRzIwMCAgIE1pbGxlbm5pdW0gSSAgRzIwMAorOGJwcCAgICAxNi40MiAgICAgICAgIDkuNTQgICAxMi4zMyAgICAgICAgIDkuMTMKKzE2YnBwICAgMjEuMDAgICAgICAgIDE1LjcwICAgMTkuMTEgICAgICAgIDE1LjAyCisyNGJwcCAgIDM2LjY2ICAgICAgICAzNi42NiAgIDM1LjAwICAgICAgICAzNS4wMAorMzJicHAgICAzNS4wMCAgICAgICAgMzAuMDAgICAzMy44NSAgICAgICAgMjguNjYKKworQUNDRUwsIG5vZmFzdGZvbnQKKyAgICAgICAgOHgxNiAgICAgICAgICAgICAgICAgMTJ4MjIgICAgICAgICAgICAgICAgNngxMQorCU1pbGxlbm5pdW0gSSAgRzIwMCAgIE1pbGxlbm5pdW0gSSAgRzIwMCAgIE1pbGxlbm5pdW0gSSAgRzIwMAorOGJwcCAgICAgNy43OSAgICAgICAgIDcuMjQgICAxMy41NSAgICAgICAgIDcuNzggICAzMC4wMCAgICAgICAgMjEuMDEKKzE2YnBwICAgIDkuMTMgICAgICAgICA3Ljc4ICAgMTYuMTYgICAgICAgICA3Ljc4ICAgMzAuMDAgICAgICAgIDIxLjAxCisyNGJwcCAgIDE0LjE3ICAgICAgICAxMC43MiAgIDE4LjY5ICAgICAgICAxMC4yNCAgIDM0Ljk5ICAgICAgICAyMS4wMQorMzJicHAgICAxNi4xNQkgICAgIDE2LjE2ICAgMTguNzMgICAgICAgIDEzLjA5ICAgMzQuOTkgICAgICAgIDIxLjAxCisKK0FDQ0VMLCBmYXN0Zm9udAorICAgICAgICA4eDE2ICAgICAgICAgICAgICAgICAxMngyMiAgICAgICAgICAgICAgICA2eDExCisJTWlsbGVubml1bSBJICBHMjAwICAgTWlsbGVubml1bSBJICBHMjAwICAgTWlsbGVubml1bSBJICBHMjAwCis4YnBwICAgICA4LjQxICAgICAgICAgNi4wMSAgICA2LjU0ICAgICAgICAgNC4zNyAgIDE2LjAwICAgICAgICAxMC41MQorMTZicHAgICAgOS41NCAgICAgICAgIDkuMTIgICAgOC43NiAgICAgICAgIDYuMTcgICAxNy41MiAgICAgICAgMTQuMDEKKzI0YnBwICAgMTUuMDAgICAgICAgIDEyLjM2ICAgMTEuNjcgICAgICAgIDEwLjAwICAgMjIuMDEgICAgICAgIDE4LjMyCiszMmJwcCAgIDE2LjE4ICAgICAgICAxOC4yOSogIDEyLjcxICAgICAgICAxMi43NCAgIDI0LjQ0ICAgICAgICAyMS4wMAorCitURVhUCisgICAgICAgIDh4MTYKKwlNaWxsZW5uaXVtIEkgIEcyMDAKK1RFWFQgICAgIDMuMjkgICAgICAgICAxLjUwCisKKyogWWVzLCBpdCBpcyBzbG93ZXIgdGhhbiBNaWxsZW5uaXVtIEkuCisKKworRHVhbGhlYWQgRzQwMAorPT09PT09PT09PT09PQorRHJpdmVyIHN1cHBvcnRzIGR1YWxoZWFkIEc0MDAgd2l0aCBzb21lIGxpbWl0YXRpb25zOgorICsgc2Vjb25kYXJ5IGhlYWQgc2hhcmVzIHZpZGVvbWVtb3J5IHdpdGggcHJpbWFyeSBoZWFkLiBJdCBpcyBub3QgcHJvYmxlbQorICAgaWYgeW91IGhhdmUgMzJNQiBvZiB2aWRlb3JhbSwgYnV0IGlmIHlvdSBoYXZlIG9ubHkgMTZNQiwgeW91IG1heSBoYXZlCisgICB0byB0aGluayB0d2ljZSBiZWZvcmUgY2hvb3NpbmcgdmlkZW9tb2RlIChmb3IgZXhhbXBsZSB0d2ljZSAxODgweDE0NDB4MzJicHAKKyAgIGlzIG5vdCBwb3NzaWJsZSkuCisgKyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbiwgc2Vjb25kYXJ5IGhlYWQgY2FuIHVzZSBvbmx5IDE2IGFuZCAzMmJwcAorICAgdmlkZW9tb2Rlcy4KKyArIHNlY29uZGFyeSBoZWFkIGlzIG5vdCBhY2NlbGVyYXRlZC4gVGhlcmUgd2VyZSBiYWQgcHJvYmxlbXMgd2l0aCBhY2NlbGVyYXRlZAorICAgWEZyZWUgd2hlbiBzZWNvbmRhcnkgaGVhZCB1c2VkIHRvIHVzZSBhY2NlbGVyYXRpb24uCisgKyBzZWNvbmRhcnkgaGVhZCBhbHdheXMgcG93ZXJ1cHMgaW4gNjQweDQ4MEA2MC0zMiB2aWRlb21vZGUuIFlvdSBoYXZlIHRvIHVzZQorICAgZmJzZXQgdG8gY2hhbmdlIHRoaXMgbW9kZS4KKyArIHNlY29uZGFyeSBoZWFkIGFsd2F5cyBwb3dlcnVwcyBpbiBtb25pdG9yIG1vZGUuIFlvdSBoYXZlIHRvIHVzZSBmYm1hdHJveHNldAorICAgdG8gY2hhbmdlIGl0IHRvIFRWIG1vZGUuIEFsc28sIHlvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCA1MjUgbGluZXMgZm9yCisgICBOVFNDIG91dHB1dCBhbmQgNjI1IGxpbmVzIGZvciBQQUwgb3V0cHV0LgorICsga2VybmVsIGlzIG5vdCBmdWxseSBtdWx0aWhlYWQgcmVhZHkuIFNvIHNvbWUgdGhpbmdzIGFyZSBpbXBvc3NpYmxlIHRvIGRvLgorICsgaWYgeW91IGNvbXBpbGVkIGl0IGFzIG1vZHVsZSwgeW91IG11c3QgaW5zZXJ0IGkyYy1tYXRyb3hmYiwgbWF0cm94ZmJfbWF2ZW4KKyAgIGFuZCBtYXRyb3hmYl9jcnRjMiBpbnRvIGtlcm5lbC4KKworCitEdWFsaGVhZCBHNDUwCis9PT09PT09PT09PT09CitEcml2ZXIgc3VwcG9ydHMgZHVhbGhlYWQgRzQ1MCB3aXRoIHNvbWUgbGltaXRhdGlvbnM6CisgKyBzZWNvbmRhcnkgaGVhZCBzaGFyZXMgdmlkZW9tZW1vcnkgd2l0aCBwcmltYXJ5IGhlYWQuIEl0IGlzIG5vdCBwcm9ibGVtCisgICBpZiB5b3UgaGF2ZSAzMk1CIG9mIHZpZGVvcmFtLCBidXQgaWYgeW91IGhhdmUgb25seSAxNk1CLCB5b3UgbWF5IGhhdmUKKyAgIHRvIHRoaW5rIHR3aWNlIGJlZm9yZSBjaG9vc2luZyB2aWRlb21vZGUuCisgKyBkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbiwgc2Vjb25kYXJ5IGhlYWQgY2FuIHVzZSBvbmx5IDE2IGFuZCAzMmJwcAorICAgdmlkZW9tb2Rlcy4KKyArIHNlY29uZGFyeSBoZWFkIGlzIG5vdCBhY2NlbGVyYXRlZC4KKyArIHNlY29uZGFyeSBoZWFkIGFsd2F5cyBwb3dlcnVwcyBpbiA2NDB4NDgwQDYwLTMyIHZpZGVvbW9kZS4gWW91IGhhdmUgdG8gdXNlCisgICBmYnNldCB0byBjaGFuZ2UgdGhpcyBtb2RlLgorICsgVFYgb3V0cHV0IGlzIG5vdCBzdXBwb3J0ZWQKKyArIGtlcm5lbCBpcyBub3QgZnVsbHkgbXVsdGloZWFkIHJlYWR5LCBzbyBzb21lIHRoaW5ncyBhcmUgaW1wb3NzaWJsZSB0byBkby4KKyArIGlmIHlvdSBjb21waWxlZCBpdCBhcyBtb2R1bGUsIHlvdSBtdXN0IGluc2VydCBtYXRyb3hmYl9nNDUwIGFuZCBtYXRyb3hmYl9jcnRjMgorICAgaW50byBrZXJuZWwuCisJCistLQorUGV0ciBWYW5kcm92ZWMgPHZhbmRyb3ZlQHZjLmN2dXQuY3o+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL21vZGVkYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL21vZGVkYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0NDU4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvbW9kZWRiLnR4dApAQCAtMCwwICsxLDYxIEBACisKKworCQkJbW9kZWRiIGRlZmF1bHQgdmlkZW8gbW9kZSBzdXBwb3J0CisKKworQ3VycmVudGx5IGFsbCBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnMgaGF2ZSB0aGVpciBvd24gdmlkZW8gbW9kZSBkYXRhYmFzZXMsCit3aGljaCBpcyBhIG1lc3MgYW5kIGEgd2FzdGUgb2YgcmVzb3VyY2VzLiBUaGUgbWFpbiBpZGVhIG9mIG1vZGVkYiBpcyB0byBoYXZlCisKKyAgLSBvbmUgcm91dGluZSB0byBwcm9iZSBmb3IgdmlkZW8gbW9kZXMsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGFsbCBmcmFtZSBidWZmZXIKKyAgICBkZXZpY2VzCisgIC0gb25lIGdlbmVyaWMgdmlkZW8gbW9kZSBkYXRhYmFzZSB3aXRoIGEgZmFpciBhbW91bnQgb2Ygc3RhbmRhcmQgdmlkZW9tb2RlcworICAgICh0YWtlbiBmcm9tIFhGcmVlODYpCisgIC0gdGhlIHBvc3NpYmlsaXR5IHRvIHN1cHBseSB5b3VyIG93biBtb2RlIGRhdGFiYXNlIGZvciBncmFwaGljcyBoYXJkd2FyZSB0aGF0CisgICAgbmVlZHMgbm9uLXN0YW5kYXJkIG1vZGVzLCBsaWtlIGFtaWZiIGFuZCBNYWMgZnJhbWUgYnVmZmVyIGRyaXZlcnMgKHdoaWNoCisgICAgdXNlIG1hY21vZGVzLmMpCisKK1doZW4gYSBmcmFtZSBidWZmZXIgZGV2aWNlIHJlY2VpdmVzIGEgdmlkZW89IG9wdGlvbiBpdCBkb2Vzbid0IGtub3csIGl0IHNob3VsZAorY29uc2lkZXIgdGhhdCB0byBiZSBhIHZpZGVvIG1vZGUgb3B0aW9uLiBJZiBubyBmcmFtZSBidWZmZXIgZGV2aWNlIGlzIHNwZWNpZmllZAoraW4gYSB2aWRlbz0gb3B0aW9uLCBmYm1lbSBjb25zaWRlcnMgdGhhdCB0byBiZSBhIGdsb2JhbCB2aWRlbyBtb2RlIG9wdGlvbi4KKworVmFsaWQgbW9kZSBzcGVjaWZpZXJzIChtb2RlX29wdGlvbiBhcmd1bWVudCk6CisKKyAgICA8eHJlcz54PHlyZXM+Wy08YnBwPl1bQDxyZWZyZXNoPl0KKyAgICA8bmFtZT5bLTxicHA+XVtAPHJlZnJlc2g+XQorCit3aXRoIDx4cmVzPiwgPHlyZXM+LCA8YnBwPiBhbmQgPHJlZnJlc2g+IGRlY2ltYWwgbnVtYmVycyBhbmQgPG5hbWU+IGEgc3RyaW5nLgorVGhpbmdzIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzIGFyZSBvcHRpb25hbC4KKworVG8gZmluZCBhIHN1aXRhYmxlIHZpZGVvIG1vZGUsIHlvdSBqdXN0IGNhbGwKKworaW50IF9faW5pdCBmYl9maW5kX21vZGUoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbW9kZV9vcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpkYiwgdW5zaWduZWQgaW50IGRic2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRlZmF1bHRfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZWZhdWx0X2JwcCkKKword2l0aCBkYi9kYnNpemUgeW91ciBub24tc3RhbmRhcmQgdmlkZW8gbW9kZSBkYXRhYmFzZSwgb3IgTlVMTCB0byB1c2UgdGhlCitzdGFuZGFyZCB2aWRlbyBtb2RlIGRhdGFiYXNlLgorCitmYl9maW5kX21vZGUoKSBmaXJzdCB0cmllcyB0aGUgc3BlY2lmaWVkIHZpZGVvIG1vZGUgKG9yIGFueSBtb2RlIHRoYXQgbWF0Y2hlcywKK2UuZy4gdGhlcmUgY2FuIGJlIG11bHRpcGxlIDY0MHg0ODAgbW9kZXMsIGVhY2ggb2YgdGhlbSBpcyB0cmllZCkuIElmIHRoYXQKK2ZhaWxzLCB0aGUgZGVmYXVsdCBtb2RlIGlzIHRyaWVkLiBJZiB0aGF0IGZhaWxzLCBpdCB3YWxrcyBvdmVyIGFsbCBtb2Rlcy4KKworVG8gc3BlY2lmeSBhIHZpZGVvIG1vZGUgYXQgYm9vdHVwLCB1c2UgdGhlIGZvbGxvd2luZyBib290IG9wdGlvbnM6CisgICAgdmlkZW89PGRyaXZlcj46PHhyZXM+eDx5cmVzPlstPGJwcD5dW0ByZWZyZXNoXQorCit3aGVyZSA8ZHJpdmVyPiBpcyBhIG5hbWUgZnJvbSB0aGUgdGFibGUgYmVsb3cuICBWYWxpZCBkZWZhdWx0IG1vZGVzIGNhbiBiZQorZm91bmQgaW4gbGludXgvZHJpdmVycy92aWRlby9tb2RlZGIuYy4gIENoZWNrIHlvdXIgZHJpdmVyJ3MgZG9jdW1lbnRhdGlvbi4KK1RoZXJlIG1heSBiZSBtb3JlIG1vZGVzLgorCisgICAgRHJpdmVycyB0aGF0IHN1cHBvcnQgbW9kZWRiIGJvb3Qgb3B0aW9ucworICAgIEJvb3QgTmFtZQkgIENhcmRzIFN1cHBvcnRlZAorCisgICAgYW1pZmIJLSBBbWlnYSBjaGlwc2V0IGZyYW1lIGJ1ZmZlcgorICAgIGF0eTEyOGZiCS0gQVRJIFJhZ2UxMjggLyBQcm8gZnJhbWUgYnVmZmVyCisgICAgYXR5ZmIJLSBBVEkgTWFjaDY0IGZyYW1lIGJ1ZmZlcgorICAgIHRkZnhmYgktIDNEIEZ4IGZyYW1lIGJ1ZmZlcgorICAgIHRyaWRlbnRmYgktIFRyaWRlbnQgKEN5YmVyKWJsYWRlIGNoaXBzZXQgZnJhbWUgYnVmZmVyCisKK0JUVywgb25seSBhIGZldyBkcml2ZXJzIHVzZSB0aGlzIGF0IHRoZSBtb21lbnQuIE90aGVycyBhcmUgdG8gZm9sbG93CisoZmVlbCBmcmVlIHRvIHNlbmQgcGF0Y2hlcykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3B2cjJmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3B2cjJmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmNmMyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvcHZyMmZiLnR4dApAQCAtMCwwICsxLDYxIEBACiskSWQ6IHB2cjJmYi50eHQsdiAxLjEgMjAwMS8wNS8yNCAwNTowOToxNiBtcmJyb3duIEV4cCAkCisKK1doYXQgaXMgcHZyMmZiPworPT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIFBvd2VyVlIgMiBiYXNlZCBncmFwaGljcyBmcmFtZSBidWZmZXJzLCBzdWNoIGFzIHRoZQorb25lIGZvdW5kIGluIHRoZSBEcmVhbWNhc3QuCisKK0FkdmFudGFnZXM6CisKKyAqIEl0IHByb3ZpZGVzIGEgbmljZSBsYXJnZSBjb25zb2xlICgxMjggY29scyArIDQ4IGxpbmVzIHdpdGggMTAyNHg3NjgpCisgICB3aXRob3V0IHVzaW5nIHRpbnksIHVucmVhZGFibGUgZm9udHMuCisgKiBZb3UgY2FuIHJ1biBYRjg2X0ZCRGV2IG9uIHRvcCBvZiAvZGV2L2ZiMAorICogTW9zdCBpbXBvcnRhbnQ6IGJvb3QgbG9nbyA6LSkKKworRGlzYWR2YW50YWdlczoKKworICogRHJpdmVyIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRoZSBEcmVhbWNhc3QgUG93ZXJWUiAyIGltcGxlbWVudGF0aW9uCisgICBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCisKK0NvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT0KKworWW91IGNhbiBwYXNzIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byBwdnIyZmIgd2l0aAorYHZpZGVvPXB2cjJmYjpvcHRpb24xLG9wdGlvbjI6dmFsdWUyLG9wdGlvbjMnIChtdWx0aXBsZSBvcHRpb25zIHNob3VsZCBiZQorc2VwYXJhdGVkIGJ5IGNvbW1hLCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBmcm9tIG9wdGlvbnMgYnkgYDonKS4KK0FjY2VwdGVkIG9wdGlvbnM6CisKK2ZvbnQ6WCAgICAtIGRlZmF1bHQgZm9udCB0byB1c2UuIEFsbCBmb250cyBhcmUgc3VwcG9ydGVkLCBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgICBTVU4xMngyMiBmb250IHdoaWNoIGlzIHZlcnkgbmljZSBhdCBoaWdoIHJlc29sdXRpb25zLgorCittb2RlOlggICAgLSBkZWZhdWx0IHZpZGVvIG1vZGUuIFRoZSBmb2xsb3dpbmcgdmlkZW8gbW9kZXMgYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgICAgIDY0MHgyNDAtNjAsIDY0MHg0ODAtNjAuCisJICAgIAorICAgICAgICAgICAgTm90ZTogdGhlIDY0MHgyNDAgbW9kZSBpcyBjdXJyZW50bHkgYnJva2VuLCBhbmQgc2hvdWxkIG5vdCBiZQorICAgICAgICAgICAgdXNlZCBmb3IgYW55IHJlYXNvbi4gSXQgaXMgb25seSBtZW50aW9uZWQgYXMgYSByZWZlcmVuY2UuCisKK2ludmVyc2UgICAtIGludmVydCBjb2xvcnMgb24gc2NyZWVuIChmb3IgTENEIGRpc3BsYXlzKQorCitub210cnIgICAgLSBkaXNhYmxlcyB3cml0ZSBjb21iaW5pbmcgb24gZnJhbWUgYnVmZmVyLiBUaGlzIHNsb3dzIGRvd24gZHJpdmVyCisgICAgICAgICAgICBidXQgdGhlcmUgaXMgcmVwb3J0ZWQgbWlub3IgaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gR1VTIERNQSBhbmQKKyAgICAgICAgICAgIFhGcmVlIHVuZGVyIGhpZ2ggbG9hZHMgaWYgd3JpdGUgY29tYmluaW5nIGlzIGVuYWJsZWQgKHNvdW5kCisgICAgICAgICAgICBkcm9wb3V0cykuIE1UUlIgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHN5c3RlbXMgdGhhdCBoYXZlIGl0CisgICAgICAgICAgICBjb25maWd1cmVkIGFuZCB0aGF0IHN1cHBvcnQgaXQuCisKK2NhYmxlOlggICAtIGNhYmxlIHR5cGUuIFRoaXMgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOiB2Z2EsIHJnYiwgYW5kCisgICAgICAgICAgICBjb21wb3NpdGUuIElmIG5vbmUgaXMgc3BlY2lmaWVkLCB3ZSBndWVzcy4KKworb3V0cHV0OlggIC0gb3V0cHV0IHR5cGUuIFRoaXMgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOiBwYWwsIG50c2MsIGFuZAorICAgICAgICAgICAgdmdhLiBJZiBub25lIGlzIHNwZWNpZmllZCwgd2UgZ3Vlc3MuCisKK1gxMQorPT09CisKK1hGODZfRkJEZXYgc2hvdWxkIHdvcmssIGluIHRoZW9yeS4gQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nIGl0IGlzCit0b3RhbGx5IHVudGVzdGVkIGFuZCBtYXkgb3IgbWF5IG5vdCBldmVuIHBvcnRyYXkgdGhlIGJlZ2lubmluZ3Mgb2YKK3dvcmtpbmcuIElmIHlvdSBlbmQgdXAgdGVzdGluZyB0aGlzLCBwbGVhc2UgbGV0IG1lIGtub3chCisKKy0tCitQYXVsIE11bmR0IDxsZXRoYWxAbGludXhkYy5vcmc+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvcHhhZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9weGFmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5Yjg1MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvcHhhZmIudHh0CkBAIC0wLDAgKzEsNTQgQEAKK0RyaXZlciBmb3IgUFhBMjV4IExDRCBjb250cm9sbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucywgZWl0aGVyIHZpYQorb3B0aW9ucz08T1BUSU9OUz4gd2hlbiBtb2R1bGFyIG9yIHZpZGVvPXB4YWZiOjxPUFRJT05TPiB3aGVuIGJ1aWx0IGluLgorCitGb3IgZXhhbXBsZToKKwltb2Rwcm9iZSBweGFmYiBvcHRpb25zPW1vZGU6NjQweDQ4MC04LHBhc3NpdmUKK29yIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCisJdmlkZW89cHhhZmI6bW9kZTo2NDB4NDgwLTgscGFzc2l2ZQorCittb2RlOlhSRVN4WVJFU1stQlBQXQorCVhSRVMgPT0gTENDUjFfUFBMICsgMQorCVlSRVMgPT0gTExDUjJfTFBQICsgMQorCQlUaGUgcmVzb2x1dGlvbiBvZiB0aGUgZGlzcGxheSBpbiBwaXhlbHMKKwlCUFAgPT0gVGhlIGJpdCBkZXB0aC4gVmFsaWQgdmFsdWVzIGFyZSAxLCAyLCA0LCA4IGFuZCAxNi4KKworcGl4Y2xvY2s6UElYQ0xPQ0sKKwlQaXhlbCBjbG9jayBpbiBwaWNvc2Vjb25kcworCitsZWZ0OkxFRlQgPT0gTENDUjFfQkxXICsgMQorcmlnaHQ6UklHSFQgPT0gTENDUjFfRUxXICsgMQoraHN5bmNsZW46SFNZTkMgPT0gTENDUjFfSFNXICsgMQordXBwZXI6VVBQRVIgPT0gTENDUjJfQkZXCitsb3dlcjpMT1dFUiA9PSBMQ0NSMl9FRlIKK3ZzeW5jbGVuOlZTWU5DID09IExDQ1IyX1ZTVyArIDEKKwlEaXNwbGF5IG1hcmdpbnMgYW5kIHN5bmMgdGltZXMKKworY29sb3IgfCBtb25vID0+IExDQ1IwX0NNUworCXVtbS4uLgorCithY3RpdmUgfCBwYXNzaXZlID0+IExDQ1IwX1BBUworCUFjdGl2ZSAoVEZUKSBvciBQYXNzaXZlIChTVE4pIGRpc3BsYXkKKworc2luZ2xlIHwgZHVhbCA9PiBMQ0NSMF9TRFMKKwlTaW5nbGUgb3IgZHVhbCBwYW5lbCBwYXNzaXZlIGRpc3BsYXkKKworNHBpeCB8IDhwaXggPT4gTENDUjBfRFBECisJNCBvciA4IHBpeGVsIG1vbm9jaHJvbWUgc2luZ2xlIHBhbmVsIGRhdGEKKworaHN5bmM6SFNZTkMKK3ZzeW5jOlZTWU5DCisJSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc3luYy4gMCA9PiBhY3RpdmUgbG93LCAxID0+IGFjdGl2ZQorCWhpZ2guCisKK2RwYzpEUEMKKwlEb3VibGUgcGl4ZWwgY2xvY2suIDE9PnRydWUsIDA9PmZhbHNlCisKK291dHB1dGVuOlBPTEFSSVRZCisJT3V0cHV0IEVuYWJsZSBQb2xhcml0eS4gMCA9PiBhY3RpdmUgbG93LCAxID0+IGFjdGl2ZSBoaWdoCisKK3BpeGNsb2NrcG9sOlBPTEFSSVRZCisJcGl4ZWwgY2xvY2sgcG9sYXJpdHkKKwkwID0+IGZhbGxpbmcgZWRnZSwgMSA9PiByaXNpbmcgZWRnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9zYTExMDBmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3NhMTEwMGZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWI0MjIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9zYTExMDBmYi50eHQKQEAgLTAsMCArMSwzOSBAQAorW1RoaXMgZmlsZSBpcyBjbG9uZWQgZnJvbSBWZXNhRkIvbWF0cm94ZmJdCisKK1doYXQgaXMgc2ExMTAwZmI/Cis9PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgZHJpdmVyIGZvciBhIGdyYXBoaWMgZnJhbWVidWZmZXIgZm9yIHRoZSBTQS0xMTAwIExDRAorY29udHJvbGxlci4KKworQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PT0KKworRm9yIG1vc3QgY29tbW9uIHBhc3NpdmUgZGlzcGxheXMsIGdpdmluZyB0aGUgb3B0aW9uCisKK3ZpZGVvPXNhMTEwMGZiOmJwcDo8dmFsdWU+LGxjY3IwOjx2YWx1ZT4sbGNjcjE6PHZhbHVlPixsY2NyMjo8dmFsdWU+LGxjY3IzOjx2YWx1ZT4KKworb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgc2hvdWxkIGJlIGVub3VnaCB0byBjb25maWd1cmUgdGhlCitjb250cm9sbGVyLiBUaGUgYml0cyBwZXIgcGl4ZWwgKGJwcCkgdmFsdWUgc2hvdWxkIGJlIDQsIDgsIDEyLCBvcgorMTYuIExDQ1IgdmFsdWVzIGFyZSBkaXNwbGF5LXNwZWNpZmljIGFuZCBzaG91bGQgYmUgY29tcHV0ZWQgYXMKK2RvY3VtZW50ZWQgaW4gdGhlIFNBLTExMDAgRGV2ZWxvcGVyJ3MgTWFudWFsLCBTZWN0aW9uIDExLjcuIER1YWwtcGFuZWwKK2Rpc3BsYXlzIGFyZSBzdXBwb3J0ZWQgYXMgbG9uZyBhcyB0aGUgU0RTIGJpdCBpcyBzZXQgaW4gTENDUjA7IEdQSU88OToyPgorYXJlIHVzZWQgZm9yIHRoZSBsb3dlciBwYW5lbC4KKworRm9yIGFjdGl2ZSBkaXNwbGF5cyBvciBkaXNwbGF5cyByZXF1aXJpbmcgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uCisoY29udHJvbGxpbmcgYmFja2xpZ2h0cywgcG93ZXJpbmcgb24gdGhlIExDRCwgZXRjLiksIHRoZSBjb21tYW5kIGxpbmUKK29wdGlvbnMgbWF5IG5vdCBiZSBlbm91Z2ggdG8gY29uZmlndXJlIHRoZSBkaXNwbGF5LiBBZGRpbmcgc2VjdGlvbnMgdG8KK3NhMTEwMGZiX2luaXRfZmJpbmZvKCksIHNhMTEwMGZiX2FjdGl2YXRlX3ZhcigpLAorc2ExMTAwZmJfZGlzYWJsZV9sY2RfY29udHJvbGxlcigpLCBhbmQgc2ExMTAwZmJfZW5hYmxlX2xjZF9jb250cm9sbGVyKCkKK3dpbGwgcHJvYmFibHkgYmUgbmVjZXNzYXJ5LgorCitBY2NlcHRlZCBvcHRpb25zOgorCiticHA6PHZhbHVlPglDb25maWd1cmUgZm9yIDx2YWx1ZT4gYml0cyBwZXIgcGl4ZWwKK2xjY3IwOjx2YWx1ZT4JQ29uZmlndXJlIExDRCBjb250cm9sIHJlZ2lzdGVyIDAgKDExLjcuMykKK2xjY3IxOjx2YWx1ZT4JQ29uZmlndXJlIExDRCBjb250cm9sIHJlZ2lzdGVyIDEgKDExLjcuNCkKK2xjY3IyOjx2YWx1ZT4JQ29uZmlndXJlIExDRCBjb250cm9sIHJlZ2lzdGVyIDIgKDExLjcuNSkKK2xjY3IzOjx2YWx1ZT4JQ29uZmlndXJlIExDRCBjb250cm9sIHJlZ2lzdGVyIDMgKDExLjcuNikKKworLS0KK01hcmsgSHVhbmcgPG1odWFuZ0BsaXZldG95LmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvc2lzZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9zaXNmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1MGM1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvc2lzZmIudHh0CkBAIC0wLDAgKzEsMTU4IEBACisKK1doYXQgaXMgc2lzZmI/Cis9PT09PT09PT09PT09PQorCitzaXNmYiBpcyBhIGZyYW1lYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIFNpUyAoU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMpCitncmFwaGljcyBjaGlwcy4gU3VwcG9ydGVkIGFyZToKKworLSBTaVMgMzAwIHNlcmllczogU2lTIDMwMC8zMDUsIDU0MCwgNjMwKFMpLCA3MzAoUykKKy0gU2lTIDMxNSBzZXJpZXM6IFNpUyAzMTUvSC9QUk8sIDU1eCwgKE0pNjV4LCA3NDAsIChNKTY2MShGL00pWCwgKE0pNzQxKEdYKQorLSBTaVMgMzMwIHNlcmllczogU2lTIDMzMCAoIlhhYnJlIiksIChNKTc2MAorCisKK1doeSBkbyBJIG5lZWQgYSBmcmFtZWJ1ZmZlciBkcml2ZXI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzaXNmYiBpcyBlZy4gdXNlZnVsIGlmIHlvdSB3YW50IGEgaGlnaC1yZXNvbHV0aW9uIHRleHQgY29uc29sZS4gQmVzaWRlcyB0aGF0LAorc2lzZmIgaXMgcmVxdWlyZWQgdG8gcnVuIERpcmVjdEZCICh3aGljaCBjb21lcyB3aXRoIGFuIGFkZGl0aW9uYWwsIGRlZGljYXRlZAorZHJpdmVyIGZvciB0aGUgMzE1IHNlcmllcykuCisKK09uIHRoZSAzMDAgc2VyaWVzLCBzaXNmYiBvbiBrZXJuZWxzIG9sZGVyIHRoYW4gMi42LjMgZnVydGhlcm1vcmUgcGxheXMgYW4KK2ltcG9ydGFudCByb2xlIGluIGNvbm5lY3Rpb24gd2l0aCBEUk0vRFJJOiBTaXNmYiBtYW5hZ2VzIHRoZSBtZW1vcnkgaGVhcAordXNlZCBieSBEUk0vRFJJIGZvciAzRCB0ZXh0dXJlIGFuZCBvdGhlciBkYXRhLiBUaGlzIG1lbW9yeSBtYW5hZ2VtZW50IGlzCityZXF1aXJlZCBmb3IgdXNpbmcgRFJJL0RSTS4KKworS2VybmVscyA+PSBhcm91bmQgMi42LjMgZG8gbm90IG5lZWQgc2lzZmIgYW55IGxvbmdlciBmb3IgRFJJL0RSTSBtZW1vcnkKK21hbmFnZW1lbnQuIFRoZSBTaVMgRFJNIGRyaXZlciBoYXMgYmVlbiB1cGRhdGVkIGFuZCBmZWF0dXJlcyBhIG1lbW9yeSBtYW5hZ2VyCitvZiBpdHMgb3duICh3aGljaCB3aWxsIGJlIHVzZWQgaWYgc2lzZmIgaXMgbm90IGNvbXBpbGVkKS4gU28gdW5sZXNzIHlvdSB3YW50CithIGdyYXBoaWNhbCBjb25zb2xlLCB5b3UgZG9uJ3QgbmVlZCBzaXNmYiBvbiBrZXJuZWxzID49Mi42LjMuCisKK1NpZGVub3RlOiBTaW5jZSB0aGlzIHNlZW1zIHRvIGJlIGEgY29tbW9ubHkgbWFkZSBtaXN0YWtlOiBzaXNmYiBhbmQgdmVzYWZiCitjYW5ub3QgYmUgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWUhIERvIG9ubHkgc2VsZWN0IG9uZSBvZiB0aGVtIGluIHlvdXIga2VybmVsCitjb25maWd1cmF0aW9uLgorCisKK0hvdyBhcmUgcGFyYW1ldGVycyBwYXNzZWQgdG8gc2lzZmI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXZWxsLCBpdCBkZXBlbmRzOiBJZiBjb21waWxlZCBzdGF0aWNhbGx5IGludG8gdGhlIGtlcm5lbCwgdXNlIGxpbG8ncyBhcHBlbmQKK3N0YXRlbWVudCB0byBhZGQgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFBsZWFzZSBzZWUgbGlsbydzCisob3IgR1JVQidzKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiBJZiBzaXNmYiBpcyBhIGtlcm5lbCBtb2R1bGUsCitwYXJhbWV0ZXJzIGFyZSBnaXZlbiB3aXRoIHRoZSBtb2Rwcm9iZSAob3IgaW5zbW9kKSBjb21tYW5kLgorCitFeGFtcGxlIGZvciBzaXNmYiBhcyBwYXJ0IG9mIHRoZSBzdGF0aWMga2VybmVsOiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIKK2xpbG8uY29uZjoKKworICAgICBhcHBlbmQ9InZpZGVvPXNpc2ZiOm1vZGU6MTAyNHg3Njh4MTYsbWVtOjEyMjg4LHJhdGU6NzUiCisKK0V4YW1wbGUgZm9yIHNpc2ZiIGFzIGEgbW9kdWxlOiBTdGFydCBzaXNmYiBieSB0eXBpbmcKKworICAgICBtb2Rwcm9iZSBzaXNmYiBtb2RlPTEwMjR4NzY4eDE2IHJhdGU9NzUgbWVtPTEyMjg4CisKK0EgY29tbW9uIG1pc3Rha2UgaXMgdGhhdCBmb2xrcyB1c2UgYSB3cm9uZyBwYXJhbWV0ZXIgZm9ybWF0IHdoZW4gdXNpbmcgdGhlCitkcml2ZXIgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBQbGVhc2Ugbm90ZTogSWYgY29tcGlsZWQgaW50byB0aGUga2VybmVsLAordGhlIHBhcmFtZXRlciBmb3JtYXQgaXMgdmlkZW89c2lzZmI6bW9kZTpub25lIG9yIHZpZGVvPXNpc2ZiOm1vZGU6MTAyNHg3Njh4MTYKKyhvciB3aGF0ZXZlciBtb2RlIHlvdSB3YW50IHRvIHVzZSwgYWx0ZXJuYXRpdmVseSB1c2luZyBhbnkgb3RoZXIgZm9ybWF0CitkZXNjcmliZWQgYWJvdmUgb3IgdGhlIHZlc2Ega2V5d29yZCBpbnN0ZWFkIG9mIG1vZGUpLiBJZiBjb21waWxlZCBhcyBhIG1vZHVsZSwKK3RoZSBwYXJhbWV0ZXIgZm9ybWF0IHJlYWRzIG1vZGU9bm9uZSBvciBtb2RlPTEwMjR4NzY4eDE2IChvciB3aGF0ZXZlciBtb2RlIHlvdQord2FudCB0byB1c2UpLiBVc2luZyBhICI9IiBmb3IgYSAiOiIgKGFuZCB2aWNlIHZlcnNhKSBpcyBhIGh1Z2UgZGlmZmVyZW5jZSEKK0FkZGl0aW9uYWxseTogSWYgeW91IGdpdmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCB0byB0aGUgaW4ta2VybmVsIHNpc2ZiLCB0aGUKK2FyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIHdpdGggIiwiLiBGb3IgZXhhbXBsZToKKworICAgdmlkZW89c2lzZmI6bW9kZToxMDI0eDc2OHgxNixyYXRlOjc1LG1lbToxMjI4OAorCisKK0hvdyBkbyBJIHVzZSBpdD8KKz09PT09PT09PT09PT09PT0KKworUHJlZmFjZSBzdGF0ZW1lbnQ6IFRoaXMgZmlsZSBvbmx5IGNvdmVycyB2ZXJ5IGxpdHRsZSBvZiB0aGUgZHJpdmVyJ3MKK2NhcGFiaWxpdGllcyBhbmQgZmVhdHVyZXMuIFBsZWFzZSByZWZlciB0byB0aGUgYXV0aG9yJ3MgYW5kIG1haW50YWluZXIncword2Vic2l0ZSBhdCBodHRwOi8vd3d3LndpbmlzY2hob2Zlci5uZXQvbGludXhzaXN2Z2Euc2h0bWwgZm9yIG1vcmUKK2luZm9ybWF0aW9uLiBBZGRpdGlvbmFsbHksICJtb2RpbmZvIHNpc2ZiIiBnaXZlcyBhbiBvdmVydmlldyBvdmVyIGFsbAorc3VwcG9ydGVkIG9wdGlvbnMgaW5jbHVkaW5nIHNvbWUgZXhwbGFuYXRpb24uCisKK1RoZSBkZXNpcmVkIGRpc3BsYXkgbW9kZSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBrZXl3b3JkICJtb2RlIiB3aXRoCithIHBhcmFtZXRlciBpbiBvbmUgb2YgdGhlIGZvbGx3aW5nIGZvcm1hdHM6CisgIC0gWHhZeERlcHRoIG9yCisgIC0gWHhZLURlcHRoIG9yCisgIC0gWHhZLURlcHRoQFJhdGUgb3IKKyAgLSBYeFkKKyAgLSBvciBzaW1wbHkgdXNlIHRoZSBWRVNBIG1vZGUgbnVtYmVyIGluIGhleGFkZWNpbWFsIG9yIGRlY2ltYWwuCisKK0ZvciBleGFtcGxlOiAxMDI0eDc2OHgxNiwgMTAyNHg3NjgtMTZANzUsIDEyODB4MTAyNC0xNi4gSWYgbm8gZGVwdGggaXMKK3NwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gOC4gSWYgbm8gcmF0ZSBpcyBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gNjBIei4gRGVwdGggMzIKK21lYW5zIDI0Yml0IGNvbG9yIGRlcHRoIChidXQgMzIgYml0IGZyYW1lYnVmZmVyIGRlcHRoLCB3aGljaCBpcyBub3QgcmVsZXZhbnQKK3RvIHRoZSB1c2VyKS4KKworQWRkaXRpb25hbGx5LCBzaXNmYiB1bmRlcnN0YW5kcyB0aGUga2V5d29yZCAidmVzYSIgZm9sbG93ZWQgYnkgYSBWRVNBIG1vZGUKK251bWJlciBpbiBkZWNpbWFsIG9yIGhleGFkZWNpbWFsLiBGb3IgZXhhbXBsZTogdmVzYT03OTEgb3IgdmVzYT0weDExNy4gUGxlYXNlCit1c2UgZWl0aGVyICJtb2RlIiBvciAidmVzYSIgYnV0IG5vdCBib3RoLgorCitMaW51eCAyLjQgb25seTogSWYgbm8gbW9kZSBpcyBnaXZlbiwgc2lzZmIgZGVmYXVsdHMgdG8gIm5vIG1vZGUiIChtb2RlPW5vbmUpIGlmCitjb21waWxlZCBhcyBhIG1vZHVsZTsgaWYgc2lzZmIgaXMgc3RhdGljYWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGl0CitkZWZhdWx0cyB0byA4MDB4NjAweDggdW5sZXNzIENSVDIgdHlwZSBpcyBMQ0QsIGluIHdoaWNoIGNhc2UgdGhlIExDRCdzIG5hdGl2ZQorcmVzb2x1dGlvbiBpcyB1c2VkLiBJZiB5b3Ugd2FudCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgbW9kZSwgdXNlIHRoZSBmYnNldAorc2hlbGwgY29tbWFuZC4KKworTGludXggMi42IG9ubHk6IElmIG5vIG1vZGUgaXMgZ2l2ZW4sIHNpc2ZiIGRlZmF1bHRzIHRvIDgwMHg2MDB4OCB1bmxlc3MgQ1JUMgordHlwZSBpcyBMQ0QsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gdGhlIExDRCdzIG5hdGl2ZSByZXNvbHV0aW9uLiBJZgoreW91IHdhbnQgdG8gc3dpdGNoIHRvIGFub3RoZXIgbW9kZSwgdXNlIHRoZSBzdHR5IHNoZWxsIGNvbW1hbmQuCisKK1lvdSBzaG91bGQgY29tcGlsZSBpbiBib3RoIHZnYWNvbiAodG8gYm9vdCBpZiB5b3UgcmVtb3ZlIHlvdSBTaVMgY2FyZCBmcm9tCit5b3VyIHN5c3RlbSkgYW5kIHNpc2ZiIChmb3IgZ3JhcGhpY3MgbW9kZSkuIFVuZGVyIExpbnV4IDIuNiwgYWxzbyAiRnJhbWVidWZmZXIKK2NvbnNvbGUgc3VwcG9ydCIgKGZiY29uKSBpcyBuZWVkZWQgZm9yIGEgZ3JhcGhpY2FsIGNvbnNvbGUuCisKK1lvdSBzaG91bGQgKm5vdCogY29tcGlsZS1pbiB2ZXNhZmIuIEFuZCBwbGVhc2UgZG8gbm90IHVzZSB0aGUgInZnYT0iIGtleXdvcmQKK2luIGxpbG8ncyBvciBncnViJ3MgY29uZmlndXJhdGlvbiBmaWxlOyBtb2RlIHNlbGVjdGlvbiBpcyBkb25lIHVzaW5nIHRoZQorIm1vZGUiIG9yICJ2ZXNhIiBrZXl3b3JkcyBhcyBhIHBhcmFtZXRlci4gU2VlIGFib3ZlIGFuZCBiZWxvdy4KKworCitYMTEKKz09PQorCitJZiB1c2luZyBYRnJlZTg2IG9yIFgub3JnLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCB1c2UgdGhlICJmYmRldiIKK2RyaXZlciBidXQgdGhlIGRlZGljYXRlZCAic2lzIiBYIGRyaXZlci4gVGhlICJzaXMiIFggZHJpdmVyIGFuZCBzaXNmYiBhcmUKK2RldmVsb3BlZCBieSB0aGUgc2FtZSBwZXJzb24gKFRob21hcyBXaW5pc2NoaG9mZXIpIGFuZCBjb29wZXJhdGUgd2VsbCB3aXRoCitlYWNoIG90aGVyLgorCisKK1NWR0FMaWIKKz09PT09PT0KKworU1ZHQUxpYiwgaWYgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSwgbmV2ZXIgcmVzdG9yZXMgdGhlIHNjcmVlbgorY29ycmVjdGx5LCBlc3BlY2lhbGx5IG9uIGxhcHRvcHMgb3IgaWYgdGhlIG91dHB1dCBkZXZpY2VzIGFyZSBMQ0Qgb3IgVFYuCitUaGVyZWZvcmUsIHVzZSB0aGUgY2hpcHNldCAiRkJERVYiIGluIFNWR0FMaWIgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIG1ha2UKK1NWR0FMaWIgdXNlIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIG1vZGUgc3dpdGNoZXMgYW5kIHJlc3RvcmF0aW9uLgorCisKK0NvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT0KKworKFNvbWUpIGFjY2VwdGVkIG9wdGlvbnM6CisKK29mZiAgICAgIC0gRGlzYWJsZSBzaXNmYi4gVGhpcyBvcHRpb24gaXMgb25seSB1bmRlcnN0b29kIGlmIHNpc2ZiIGlzCisgICAgICAgICAgIGluLWtlcm5lbCwgbm90IGEgbW9kdWxlLgorbWVtOlggICAgLSBzaXplIG9mIG1lbW9yeSBmb3IgdGhlIGNvbnNvbGUsIHJlc3Qgd2lsbCBiZSB1c2VkIGZvciBEUkkvRFJNLiBYCisgICAgICAgICAgIGlzIGluIGtpbG9ieXRlcy4gT24gMzAwIHNlcmllcywgdGhlIGRlZmF1bHQgaXMgNDA5NiwgODE5MiBvcgorCSAgIDE2Mzg0IChlYWNoIGluIGtpbG9ieXRlKSBkZXBlbmRpbmcgb24gaG93IG11Y2ggdmlkZW8gcmFtIHRoZSBjYXJkCisgICAgICAgICAgIGhhcy4gT24gMzE1LzMzMCBzZXJpZXMsIHRoZSBkZWZhdWx0IGlzIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSByYW0KKwkgICAoc2luY2UgRFJJL0RSTSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGVzZSBjaGlwc2V0cykuCitub2FjY2VsICAtIGRvIG5vdCB1c2UgMkQgYWNjZWxlcmF0aW9uIGVuZ2luZS4gKERlZmF1bHQ6IHVzZSBhY2NlbGVyYXRpb24pCitub3lwYW4gICAtIGRpc2FibGUgeS1wYW5uaW5nIGFuZCBzY3JvbGwgYnkgcmVkcmF3aW5nIHRoZSBlbnRpcmUgc2NyZWVuLgorICAgICAgICAgICBUaGlzIGlzIG11Y2ggc2xvd2VyIHRoYW4geS1wYW5uaW5nLiAoRGVmYXVsdDogdXNlIHktcGFubmluZykKK3Zlc2E6WCAgIC0gc2VsZWN0cyBzdGFydHVwIHZpZGVvbW9kZS4gWCBpcyBudW1iZXIgZnJvbSAwIHRvIDB4MUZGIGFuZAorICAgICAgICAgICByZXByZXNlbnRzIHRoZSBWRVNBIG1vZGUgbnVtYmVyIChjYW4gYmUgZ2l2ZW4gaW4gZGVjaW1hbCBvcgorCSAgIGhleGFkZWNpbWFsIGZvcm0sIHRoZSBsYXR0ZXIgcHJlZml4ZWQgd2l0aCAiMHgiKS4KK21vZGU6WCAgIC0gc2VsZWN0cyBzdGFydHVwIHZpZGVvbW9kZS4gUGxlYXNlIHNlZSBhYm92ZSBmb3IgdGhlIGZvcm1hdCBvZgorICAgICAgICAgICAiWCIuCisKK0Jvb2xlYW4gb3B0aW9ucyBzdWNoIGFzICJub2FjY2VsIiBvciAibm95cGFuIiBhcmUgdG8gYmUgZ2l2ZW4gd2l0aG91dCBhCitwYXJhbWV0ZXIgaWYgc2lzZmIgaXMgaW4ta2VybmVsIChmb3IgZXhhbXBsZSAidmlkZW89c2lzZmI6bm95cGFuKS4gSWYKK3Npc2ZiIGlzIGEgbW9kdWxlLCB0aGVzZSBhcmUgdG8gYmUgc2V0IHRvIDEgKGZvciBleGFtcGxlICJtb2Rwcm9iZSBzaXNmYgorbm95cGFuPTEiKS4KKworLS0KK1Rob21hcyBXaW5pc2NoaG9mZXIgPHRob21hc0B3aW5pc2NoaG9mZXIubmV0PgorTWF5IDI3LCAyMDA0CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9zc3RmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3NzdGZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjhkN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9zc3RmYi50eHQKQEAgLTAsMCArMSwxNzQgQEAKKworSW50cm9kdWN0aW9uCisKKwkgIFRoaXMgaXMgYSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgM2RmeCcgVm9vZG9vIEdyYXBoaWNzIAorCShha2Egdm9vZG9vIDEsIGFrYSBzc3QxKSBhbmQgVm9vZG9vsiAoYWthIFZvb2RvbyAyLCBha2EgQ1ZHKSBiYXNlZCAKKwl2aWRlbyBib2FyZHMuIEl0J3MgaGlnaGx5IGV4cGVyaW1lbnRhbCBjb2RlLCBidXQgaXMgZ3VhcmFudGVlZCB0byB3b3JrCisJb24gbXkgY29tcHV0ZXIsIHdpdGggbXkgIk1heGkgR2FtZXIgM0QiIGFuZCAiTWF4aSBHYW1lciAzZLIiIGJvYXJkcywKKwlhbmQgd2l0aCBtZSAiYmV0d2VlbiBjaGFpciBhbmQga2V5Ym9hcmQiLiBTb21lIHBlb3BsZSB0ZXN0ZWQgb3RoZXIKKwljb21iaW5hdGlvbnMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgd29ya3MuCisJICBUaGUgbWFpbiBwYWdlIGlzIGxvY2F0ZWQgYXQgPGh0dHA6Ly9zc3RmYi5zb3VyY2Vmb3JnZS5uZXQ+LCBhbmQgaWYKKwl5b3Ugd2FudCB0aGUgbGF0ZXN0IHZlcnNpb24sIGNoZWNrIG91dCB0aGUgQ1ZTLCBhcyB0aGUgZHJpdmVyIGlzIGEgd29yaworCWluIHByb2dyZXNzLCBJIGZlZWwgdW5jb21mb3J0YWJsZSB3aXRoIHJlbGVhc2luZyB0YXJiYWxscyBvZiBzb21ldGhpbmcKKwlub3QgY29tcGxldGVseSB3b3JraW5nLi4uRG9uJ3Qgd29ycnksIGl0J3Mgc3RpbGwgbW9yZSB0aGFuIHVzZWFibGUKKwkoSSBlYXQgbXkgb3duIGRvZyBmb29kKQorCisJICBQbGVhc2UgcmVhZCB0aGUgQnVnIHNlY3Rpb24sIGFuZCByZXBvcnQgYW55IHN1Y2Nlc3Mgb3IgZmFpbHVyZSB0byBtZQorCShHaG96bGFuZSBUb3VtaSA8Z3RvdW1pQGxhcG9zdGUubmV0PikuCisJICBCVFcsIElmIHlvdSBoYXZlIG9ubHkgb25lIG1vbml0b3IgLCBhbmQgeW91IGRvbid0IGZlZWwgbGlrZSBwbGF5aW5nCisJd2l0aCB0aGUgdmdhIHBhc3N0aHJvdSBjYWJsZSwgSSBjYW4gb25seSBzdWdnZXN0IGJvcnJvd2luZyBhIHNjcmVlbgorCXNvbWV3aGVyZS4uLiAKKworCitJbnN0YWxsYXRpb24gCisKKwkgIFRoaXMgZHJpdmVyIChzaG91bGQpIHdvcmsgb24gaXg4Niwgd2l0aCAibGF0ZSIgMi4yLngga2VybmVsICh0ZXN0ZWQKKwl3aXRoIHggPSAxOSkgYW5kICJyZWNlbnQiIDIuNC54IGtlcm5lbCwgYXMgYSBtb2R1bGUgb3IgY29tcGlsZWQgaW4uCisJICBJdCBoYXMgYmVlbiBpbmNsdWRlZCBpbiBtYWluc3RyZWFtIGtlcm5lbCBzaW5jZSB0aGUgaW5mYW1vdXMgMi40LjEwLgorCSAgWW91IGNhbiBhcHBseSB0aGUgcGF0Y2hlcyBmb3VuZCBpbiBzc3RmYi9rZXJuZWwvKi0yLnsyfDR9LngucGF0Y2gsCisJYW5kIGNvcHkgc3N0ZmIuYyB0byBsaW51eC9kcml2ZXJzL3ZpZGVvLywgb3IgYXBwbHkgYSBzaW5nbGUgcGF0Y2gsIAorCXNzdGZiL3BhdGNoLTIuezJ8NH0ueC1zc3RmYi15eW1tZGQgdG8geW91ciBsaW51eCBzb3VyY2UgdHJlZS4KKworCSAgVGhlbiBjb25maWd1cmUgeW91ciBrZXJuZWwgYXMgdXN1YWw6IGNob29zZSAibSIgb3IgInkiIHRvIDNEZnggVm9vZG9vCisJR3JhcGhpY3MgaW4gc2VjdGlvbiAiY29uc29sZSIuIENvbXBpbGUsIGluc3RhbGwsIGhhdmUgZnVuLi4uIGFuZCBwbGVhc2UKKwlkcm9wIG1lIGEgcmVwb3J0IDopCisKKworTW9kdWxlIFVzYWdlCisJCisJV2FybmluZ3MuCisJIyBZb3Ugc2hvdWxkIHJlYWQgY29tcGxldGVseSB0aGlzIHNlY3Rpb24gYmVmb3JlIGlzc3VpbmcgYW55IGNvbW1hbmQuCisJIyBJZiB5b3UgaGF2ZSBvbmx5IG9uZSBtb25pdG9yIHRvIHBsYXkgd2l0aCwgb25jZSB5b3UgaW5zbW9kIHRoZQorCSAgbW9kdWxlLCB0aGUgM2RmeCB0YWtlcyBjb250cm9sIG9mIHRoZSBvdXRwdXQsIHNvIHlvdSdsbCBoYXZlIHRvCisJICBwbHVnIHRoZSBtb25pdG9yIHRvIHRoZSAibm9ybWFsIiB2aWRlbyBib2FyZCBpbiBvcmRlciB0byBpc3N1ZQorCSAgdGhlIGNvbW1hbmRzLCBvciB5b3UgY2FuIGJsaW5kbHkgdXNlIHNzdF9kYmdfdmdhcGFzcworICAgICAgICAgIGluIHRoZSB0b29scyBkaXJlY3RvcnkgKFNlZSBUb29scykuIFRoZSBsYXRlc3Qgc29sdXRpb24gaXMgcGFzcyB0aGUKKwkgIHBhcmFtZXRlciB2Z2FwYXNzPTEgd2hlbiBpbnNtb2RkaW5nIHRoZSBkcml2ZXIuIChTZWUgS2VybmVsL01vZHVsZXMKKwkgIE9wdGlvbnMpCisKKwlNb2R1bGUgaW5zZXJ0aW9uOgorCSMgaW5zbW9kIHNzdGZiLm8KKwkgIHlvdSBzaG91bGQgc2VlIHNvbWUgc3RyYW5nZSBvdXRwdXQgZnJvbWUgdGhlIGJvYXJkOiAKKwkgIGEgYmlnIGJsdWUgc3F1YXJlLCBhIGdyZWVuIGFuZCBhIHJlZCBzbWFsbCBzcXVhcmVzIGFuZCBhIHZlcnRpY2FsCisJICB3aGl0ZSByZWN0YW5nbGUuIHdoeSA/IHRoZSBmdW5jdGlvbidzIG5hbWUgaXMgc2VsZiBleHBsYW5hdG9yeSA6CisJICAic3N0ZmJfdGVzdCgpIi4uLgorCSAgKGlmIHlvdSBkb24ndCBoYXZlIGEgc2Vjb25kIG1vbml0b3IsIHlvdSdsbCBoYXZlIHRvIHBsdWcgeW91ciBtb25pdG9yCisJICBkaXJlY3RlbHkgdG8gdGhlIDJEIHZpZGVvY2FyZCB0byBzZWUgd2hhdCB5b3UncmUgdHlwaW5nKQorCSMgY29uMmZiIC9kZXYvZmJ4IC9kZXYvdHR5eAorCSAgYmluZCBhIHR0eSB0byB0aGUgbmV3IGZyYW1lIGJ1ZmZlci4gaWYgeW91IGFscmVhZHkgaGF2ZSBhIGZyYW1lCisJICBidWZmZXIgZHJpdmVyLCB0aGUgdm9vZG9vIGZiIHdpbGwgbGlrZWx5IGJlIC9kZXYvZmIxLiBpZiBub3QsIAorCSAgdGhlIGRldmljZSB3aWxsIGJlIC9kZXYvZmIwLiBZb3UgY2FuIGNoZWNrIHRoaXMgYnkgZG9pbmcgYSAKKwkgIGNhdCAvcHJvYy9mYi4gWW91IGNhbiBmaW5kIGEgY29weSBvZiBjb24yZmIgaW4gdG9vbHMvIGRpcmVjdG9yeS4KKwkgIGlmIHlvdSBkb24ndCBoYXZlIGFub3RoZXIgZmIgZGV2aWNlLCB0aGlzIHN0ZXAgaXMgc3VwZXJmbHVvdXMsCisJICBhcyB0aGUgY29uc29sZSBzdWJzeXN0ZW0gYXV0b21hZ2ljYWx5IGJpbmRzIHR0eXMgdG8gdGhlIGZiLgorCSMgc3dpdGNoIHRvIHRoZSB2aXJ0dWFsIGNvbnNvbGUgeW91IGp1c3QgbWFwcGVkLiAidGFkYWFhIiAuLi4KKworCU1vZHVsZSByZW1vdmFsOgorCSMgY29uMmZiIC9kZXYvZmJ4IC9kZXYvdHR5eAorCSAgYmluZCB0aGUgdHR5IHRvIHRoZSBvbGQgZnJhbWUgYnVmZmVyIHNvIHRoZSBtb2R1bGUgY2FuIGJlIHJlbW92ZWQuCisJICAoaG93IGRvZXMgaXQgd29yayB3aXRoIHZnYWNvbiA/IHNob3J0IGFuc3dlciA6IGl0IGRvZXNuJ3Qgd29yaykKKwkjIHJtbW9kIHNzdGZiCisKKworS2VybmVsL01vZHVsZXMgT3B0aW9ucworCisJWW91IGNhbiBwYXNzIHNvbWUgb3Rpb25zIHRvIHNzdGZiIG1vZHVsZSwgYW5kIHZpYSB0aGUga2VybmVsIGNvbW1hbmQKKwlsaW5lIHdoZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbiA6CisJZm9yIG1vZHVsZSA6IGluc21vZCBzc3RmYi5vIG9wdGlvbjE9dmFsdWUxIG9wdGlvbjI9dmFsdWUyIC4uLgorCWluIGtlcm5lbCA6ICB2aWRlbz1zc3RmYjpvcHRpb24xLG9wdGlvbjI6dmFsdWUyLG9wdGlvbjMgLi4uCisJCisJc3N0ZmIgc3VwcG9ydHMgdGhlIGZvbG93aW5nIG9wdGlvbnMgOgorCitNb2R1bGUJCUtlcm5lbAkJRGVzY3JpcHRpb24KKwordmdhcGFzcz0wCXZnYW5vcGFzcwlFbmFibGUgb3IgZGlzYWJsZSBWR0EgcGFzc3Rocm91IGNhYmxlLgordmdhcGFzcz0xCXZnYXBhc3MJCVdoZW4gZW5hYmxlZCwgdGhlIG1vbml0b3Igd2lsbCBnZXQgdGhlIHNpZ25hbAorCQkJCWZyb20gdGhlIFZHQSBib2FyZCBhbmQgbm90IGZyb20gdGhlIHZvb2Rvby4KKwkJCQlEZWZhdWx0OiBub3Bhc3MKKworbWVtPXgJCW1lbTp4CQlGb3JjZSBmcmFtZSBidWZmZXIgbWVtb3J5IGluIE1pQgorCQkJCWFsbG93ZWQgdmFsdWVzOiAwLCAxLCAyLCA0LgorCQkJCURlZmF1bHQ6IDAgKD0gYXV0b2RldGVjdCkKKworaW52ZXJzZT0xCWludmVyc2UJCVN1cHBvc2VkIHRvIGVuYWJsZSBpbnZlcnNlIGNvbnNvbGUuCisJCQkJZG9lc24ndCB3b3JrIHlldC4uLgorCitjbGlwcGluZz0xCWNsaXBwaW5nCUVuYWJsZSBvciBkaXNhYmxlIGNsaXBwaW5nLgorY2xpcHBpbmc9MAlub2NsaXBwaW5nCVdpdGggY2xpcHBpbmcgZW5hYmxlZCwgYWxsIG9mZnNjcmVlbgorCQkJCXJlYWRzIGFuZCB3cml0ZXMgYXJlIGRpc2dhcmRlZC4KKwkJCQlEZWZhdWx0OiBlbmFibGUgY2xpcHBpbmcuCisKK2dmeGNsaz14CWdmeGNsazp4CUZvcmNlIGdyYXBoaWMgY2xvY2sgZnJlcXVlbmN5IChpbiBNSHopLgorCQkJCUJlIGNhcmVmdWxsIHdpdGggdGhpcyBvcHRpb24sIGl0IG1heSBiZQorCQkJCURBTkdFUk9VUy4KKwkJCQlEZWZhdWx0OiBhdXRvIAorCQkJCQk1ME1oeiBmb3IgVm9vZG9vIDEsCisJCQkJCTc1TUh6IGZvciBWb29kb28gMi4gCisKK3Nsb3dwY2k9MQlmYXN0cGNpCQlFbmFibGUgb3IgZGlzYWJsZSBmYXN0IFBDSSByZWFkL3dyaXRlcy4KK3Nsb3dwY2k9MQlzbG93cGNpCQlEZWZhdWx0IDogZmFzdHBjaQorCitkZXY9eAkJZGV2OngJCUF0dGFjaCB0aGUgZHJpdmVyIHRvIGRldmljZSBudW1iZXIgeC4KKwkJCQkwIGlzIHRoZSBmaXJzdCBjb21wYXRpYmxlIGJvYXJkIChpbiAKKwkJCQlsc3BjaSBvcmRlcikKKworVG9vbHMKKworCVRoZXNlIHRvb2xzIGFyZSBtb3N0bHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgYnV0IHlvdSBjYW4gCisJZmluZCBzb21lIG9mIHRoZXNlIGludGVyZXN0aW5nIDoKKwkgLSBjb24yZmIgLCBtYXBzIGEgdHR5IHRvIGEgZmJyYW1lYnVmZmVyIC4KKwkJY29uMmZiIC9kZXYvZmIxIC9kZXYvdHR5NQorCSAtIHNzdF9kYmdfdmdhcGFzcyAsIGNoYW5nZXMgdmdhIHBhc3N0aHJvdS4gWW91IGhhdmUgdG8gcmVjb21waWxlIHRoZQorCWRyaXZlciB3aXRoIFNTVF9ERUJVRyBhbmQgU1NUX0RFQlVHX0lPQ1RMIHNldCB0byAxCisJCXNzdF9kYmdfdmdhcGFzcyAvZGV2L2ZiMSAxIChlbmFibGVzIHZnYSBjYWJsZSkKKwkJc3N0X2RiZ192Z2FwYXNzIC9kZXYvZmIxIDAgKGRpc2FibGVzIHZnYSBjYWJsZSkKKwkgLSBnbGlkZV9yZXNldCAsIHJlc2V0cyB0aGUgdm9vZG9vIHVzaW5nIGdsaWRlCisJCXVzZSB0aGlzIGFmdGVyIHJtbW9kaW5nIHNzdGZiLCBpZiB0aGUgbW9kdWxlIHJlZnVzZXMgdG8KKwkJcmVpbnNlcnQgLgorCitCdWdzCisKKwktIERPIE5PVCB1c2UgZ2xpZGUgd2hpbGUgdGhlIHNzdGZiIG1vZHVsZSBpcyBpbiwgeW91J2xsIG1vc3QgbGlrZWx5CisJaGFuZyB5b3VyIGNvbXB1dGVyLgorCS0gSWYgeW91IHNlZSBzb21lIGFydGVmYWN0cyAocGl4ZWxzIG5vdCBjbGVhbmluZyBhbmQgc3R1ZmYgbGlrZSB0aGF0KSwgCisJdHJ5IHR1cm5pbmcgb2ZmIGNsaXBwaW5nIChjbGlwcGluZz0wKSwgYW5kL29yIHVzaW5nIHNsb3dwY2kKKwktIHRoZSBkcml2ZXIgZG9uJ3QgZGV0ZWN0IHRoZSA0TWIgZnJhbWUgYnVmZmVyIHZvb2Rvb3MsIGl0IHNlZW1zIHRoYXQKKwl0aGUgMiBsYXN0IE1icyB3cmFwIGFyb3VuZC4gbG9va2luZyBpbnRvIHRoYXQgLgorCS0gVGhlIGRyaXZlciBpcyAxNiBicHAgb25seSwgMjQvMzIgd29uJ3Qgd29yay4KKwktIFRoZSBkcml2ZXIgaXMgbm90IHlvdXJfZmF2b3JpdGVfdG95LXNhZmUuIHRoaXMgaW5jbHVkZXMgU01QLi4uCisgICAgICAgICAgW0FjdHVhbGx5IGZyb20gaW5zcGVjdGlvbiBpdCBzZWVtcyB0byBiZSBzYWZlIC0gQWxhbl0KKwktIHdoZW4gdXNpbmcgWEZyZWU4NiBGQmRldiAoWCBvdmVyIGZiZGV2KSB5b3UgbWF5IHNlZSBzdHJhbmdlIGNvbG9yCisJcGF0dGVybnMgYXQgdGhlIGJvcmRlciBvZiB5b3VyIHdpbmRvd3MgKHRoZSBwaXhlbHMgbG9zZSB0aGUgbG93ZXN0CisJYnl0ZSAtPiBiYXNpY2FseSB0aGUgYmx1ZSBjb21wb25lbnQgbmQgc29tZSBvZiB0aGUgZ3JlZW4pIC4gSSdtIHVuYWJsZQorCXRvIHJlcHJvZHVjZSB0aGlzIHdpdGggWEZyZWU4Ni0zLjMsIGJ1dCBvbmUgb2YgdGhlIHRlc3RlcnMgaGFzIHRoaXMKKwlwcm9ibGVtIHdpdGggWEZyZWU4Ni00LiBhcHBhcmVudGx5IHJlY2VudCBYZnJlZTg2LTQueCBzb2x2ZSB0aGlzCisJcHJvYmxlbS4KKwktIEkgZGlkbid0IHJlYWxseSB0ZXN0IGNoYW5naW5nIHRoZSBwYWxldHRlLCBzbyB5b3UgbWF5IGZpbmQgc29tZSB3ZWlyZAorCXRoaW5ncyB3aGVuIHBsYXlpbmcgd2l0aCB0aGF0LgorCS0gU29tZXRpbWVzIHRoZSBkcml2ZXIgd2lsbCBub3QgcmVjb2duaXNlIHRoZSBEQUMgLCBhbmQgdGhlCisgICAgICAgIGluaXRpYWxpc2F0aW9uIHdpbGwgZmFpbC4gdGhpcyBpcyBzcGVjaWZpY2FseSB0cnVlIGZvcgorCXZvb2RvbyAyIGJvYXJkcyAsIGJ1dCBpdCBzaG91bGQgYmUgc29sdmVkIGluIHJlY2VudCB2ZXJzaW9ucy4gcGxlYXNlCisJY29udGFjdCBtZSAuCisJLSB0aGUgMjQvMzIgaXMgbm90IGxpa2VseSB0byB3b3JrIGFueXRpbWUgc29vbiAsIGtub3dpbmcgdGhhdCB0aGUKKwloYXJkd2FyZSBkb2VzIC4uLiB1bnVzdWFsIHRoaWdzIGluIDI0LzMyIGJwcAorCS0gV2hlbiB1c2VkIHdpdGggYW50aGVyIHZpZGVvIGJvYXJkLCBjdXJyZW50IGxpbWl0YXRpb25zIG9mIGxpbnV4CisJY29uc29sZSBzdWJzeXN0ZW0gY2FuIGNhdXNlIHNvbWUgdHJvdWJsZXMsIHNwZWNpZmljYWx5LCB5b3Ugc2hvdWxkCisJZGlzYWJsZSBzb2Z0d2FyZSBzY3JvbGxiYWNrICwgYXMgaXQgY2FuIG9vcHMgYmFkbHkgLi4uCisKK1RvZG8KKworCS0gR2V0IHJpZCBvZiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLgorCS0gQnV5IG1vcmUgY29mZmVlLgorCS0gdGVzdC9wb3J0IHRvIG90aGVyIGFyY2guCisJLSB0cnkgdG8gYWRkIHBhbm5pbmcgdXNpbmcgdHdlZWtzIHdpdGggZnJvbnQgYW5kIGJhY2sgYnVmZmVyIC4KKwktIHRyeSB0byBpbXBsZW1lbnQgYWNjZWwgb24gdm9vZG9vMiAsIHRoaXMgYm9hcmQgY2FuIGFjdHVhbHkgZG8gYSAKKwkgIGxvdCBpbiAyRCBldmVuIGlmIGl0IHdhcyBzb2xkIGFzIGEgM0Qgb25seSBib2FyZCAuLi4KKworZ2hvei4KKworLS0gCitHaG96bGFuZSBUb3VtaSA8Z3RvdW1pQGxhcG9zdGUubmV0PgorCisKKyREYXRlOiAyMDAyLzA1LzA5IDIwOjExOjQ1ICQKK2h0dHA6Ly9zc3RmYi5zb3VyY2Vmb3JnZS5uZXQvUkVBRE1FCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3RnYWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdGdhZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MDA4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3RnYWZiLnR4dApAQCAtMCwwICsxLDY5IEBACiskSWQ6IHRnYWZiLnR4dCx2IDEuMS4yLjIgMjAwMC8wNC8wNCAwNjo1MDoxOCBtYXRvIEV4cCAkCisKK1doYXQgaXMgdGdhZmI/Cis9PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhIGRyaXZlciBmb3IgREVDQ2hpcCAyMTAzMCBiYXNlZCBncmFwaGljcyBmcmFtZWJ1ZmZlcnMsIGEuay5hLiBUR0EKK2NhcmRzLCB3aGljaCBhcmUgdXN1YWxseSBmb3VuZCBpbiBvbGRlciBEaWdpdGFsIEFscGhhIHN5c3RlbXMuIFRoZQorZm9sbG93aW5nIG1vZGVscyBhcmUgc3VwcG9ydGVkOgorCitaTHhQLUUxICg4YnBwLCAyIE1CIFZSQU0pCitaTHhQLUUyICgzMmJwcCwgOCBNQiBWUkFNKQorWkx4UC1FMyAoMzJicHAsIDE2IE1CIFZSQU0sIFpidWZmZXIpCisKK1RoaXMgdmVyc2lvbiBpcyBhbiBhbG1vc3QgY29tcGxldGUgcmV3cml0ZSBvZiB0aGUgY29kZSB3cml0dGVuIGJ5IEdlZXJ0CitVeXR0ZXJob2V2ZW4sIHdoaWNoIHdhcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgVEdBIGNvbnNvbGUgY29kZSB3cml0dGVuIGJ5CitKYXkgRXN0YWJyb29rLgorCitNYWpvciBuZXcgZmVhdHVyZXMgc2luY2UgTGludXggMi4wLng6CisKKyAqIFN1cHBvcnQgZm9yIG11bHRpcGxlIHJlc29sdXRpb25zCisgKiBTdXBwb3J0IGZvciBmaXhlZC1mcmVxdWVuY3kgYW5kIG90aGVyIG9kZGJhbGwgbW9uaXRvcnMgCisgICAoYnkgYWxsb3dpbmcgdGhlIHZpZGVvIG1vZGUgdG8gYmUgc2V0IGF0IGJvb3QgdGltZSkKKworVXNlci12aXNpYmxlIGNoYW5nZXMgc2luY2UgTGludXggMi4yLng6CisKKyAqIFN5bmMtb24tZ3JlZW4gaXMgbm93IGhhbmRsZWQgcHJvcGVybHkKKyAqIE1vcmUgdXNlZnVsIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgb24gYm9vdHVwCisgICAodGhpcyBoZWxwcyBpZiBwZW9wbGUgcnVuIGludG8gcHJvYmxlbXMpCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90ICh5ZXQpIHN1cHBvcnQgdGhlIFRHQTIgZmFtaWx5IG9mIGZyYW1lYnVmZmVycywgc28gdGhlCitQb3dlclN0b3JtIDNEMzAvNEQyMCAoYWxzbyBrbm93biBhcyBQQlhHQikgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuIFRoZXNlCitjYW4gaG93ZXZlciBiZSB1c2VkIHdpdGggdGhlIHN0YW5kYXJkIFZHQSBUZXh0IENvbnNvbGUgZHJpdmVyLgorCisKK0NvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT0KKworWW91IGNhbiBwYXNzIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0Z2FmYiB3aXRoCitgdmlkZW89dGdhZmI6b3B0aW9uMSxvcHRpb24yOnZhbHVlMixvcHRpb24zJyAobXVsdGlwbGUgb3B0aW9ucyBzaG91bGQgYmUKK3NlcGFyYXRlZCBieSBjb21tYSwgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgZnJvbSBvcHRpb25zIGJ5IGA6JykuCitBY2NlcHRlZCBvcHRpb25zOgorCitmb250OlggICAgLSBkZWZhdWx0IGZvbnQgdG8gdXNlLiBBbGwgZm9udHMgYXJlIHN1cHBvcnRlZCwgaW5jbHVkaW5nIHRoZQorICAgICAgICAgICAgU1VOMTJ4MjIgZm9udCB3aGljaCBpcyB2ZXJ5IG5pY2UgYXQgaGlnaCByZXNvbHV0aW9ucy4KKworbW9kZTpYICAgIC0gZGVmYXVsdCB2aWRlbyBtb2RlLiBUaGUgZm9sbG93aW5nIHZpZGVvIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgICAgICA2NDB4NDgwLTYwLCA4MDB4NjAwLTU2LCA2NDB4NDgwLTcyLCA4MDB4NjAwLTYwLCA4MDB4NjAwLTcyLCAKKwkgICAgMTAyNHg3NjgtNjAsIDExNTJ4ODY0LTYwLCAxMDI0eDc2OC03MCwgMTAyNHg3NjgtNzYsCisJICAgIDExNTJ4ODY0LTcwLCAxMjgweDEwMjQtNjEsIDEwMjR4NzY4LTg1LCAxMjgweDEwMjQtNzAsCisJICAgIDExNTJ4ODY0LTg0LCAxMjgweDEwMjQtNzYsIDEyODB4MTAyNC04NQorIAorCitLbm93biBJc3N1ZXMKKz09PT09PT09PT09PQorCitUaGUgWEZyZWU4NiBGQkRldiBzZXJ2ZXIgaGFzIGJlZW4gcmVwb3J0ZWQgbm90IHRvIHdvcmssIHNpbmNlIHRnYWZiIGRvZXNuJ3QgZG8KK21tYXAoKS4gUnVubmluZyB0aGUgc3RhbmRhcmQgWEY4Nl9UR0Egc2VydmVyIGZyb20gWEZyZWU4NiAzLjMueCB3b3JrcyBmaW5lIGZvcgorbWUsIGhvd2V2ZXIgdGhpcyBzZXJ2ZXIgZG9lcyBub3QgZG8gYWNjZWxlcmF0aW9uLCB3aGljaCBtYWtlIGNlcnRhaW4gb3BlcmF0aW9ucworcXVpdGUgc2xvdy4gU3VwcG9ydCBmb3IgYWNjZWxlcmF0aW9uIGlzIGJlaW5nIHByb2dyZXNzaXZlbHkgaW50ZWdyYXRlZCBpbgorWEZyZWU4NiA0LnguCisKK1doZW4gcnVubmluZyB0Z2FmYiBpbiByZXNvbHV0aW9ucyBoaWdoZXIgdGhhbiA2NDB4NDgwLCBvbiBzd2l0Y2hpbmcgVkNzIGZyb20KK3RnYWZiIHRvIFhGODZfVEdBIDMuMy54LCB0aGUgZW50aXJlIHNjcmVlbiBpcyBub3QgcmUtZHJhd24gYW5kIG11c3QgYmUgbWFudWFsbHkKK3JlZnJlc2hlZC4gVGhpcyBpcyBhbiBYIHNlcnZlciBwcm9ibGVtLCBub3QgYSB0Z2FmYiBwcm9ibGVtLCBhbmQgaXMgZml4ZWQgaW4KK1hGcmVlODYgNC4wLgorCitFbmpveSEKKworTWFydGluIEx1Y2luYSA8bWF0b0Brb3RlbG5hLnNrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi90cmlkZW50ZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi90cmlkZW50ZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNmM4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3RyaWRlbnRmYi50eHQKQEAgLTAsMCArMSw1NCBAQAorVHJpZGVudGZiIGlzIGEgZnJhbWVidWZmZXIgZHJpdmVyIGZvciBzb21lIFRyaWRlbnQgY2hpcCBiYXNlZCBjYXJkcy4KKworVGhlIGZvbGxvd2luZyBsaXN0IG9mIGNoaXBzIGlzIHRob3VnaHQgdG8gYmUgc3VwcG9ydGVkIGFsdGhvdWdoIG5vdCBhbGwgYXJlCit0ZXN0ZWQ6CisKK3Rob3NlIGZyb20gdGhlIEltYWdlIHNlcmllcyB3aXRoIEN5YmVyIGluIHRoZWlyIG5hbWVzIC0gYWNjZWxlcmF0ZWQKK3Rob3NlIHdpdGggQmxhZGUgaW4gdGhlaXIgbmFtZXMgKEJsYWRlM0QsQ3liZXJCbGFkZS4uLikgLSBhY2NlbGVyYXRlZAordGhlIG5ld2VyIEN5YmVyQmxhZGVYUCBmYW1pbHkgIC0gbm9uYWNjZWxlcmF0ZWQKKworT25seSBQQ0kvQUdQIGJhc2VkIGNhcmRzIGFyZSBzdXBwb3J0ZWQsIG5vbmUgb2YgdGhlIG9sZGVyIFRyaWRlbnRzLgorCitIb3cgdG8gdXNlIGl0PworPT09PT09PT09PT09PT0KKworV2hlbiBib290aW5nIHlvdSBjYW4gcGFzcyB0aGUgdmlkZW8gcGFyYW1ldGVyLgordmlkZW89dHJpZGVudGZiCisKK1RoZSBwYXJhbWV0ZXJzIGZvciB0cmlkZW50ZmIgYXJlIGNvbmNhdGVuYXRlZCB3aXRoIGEgJzonIGFzIGluIHRoaXMgZXhhbXBsZS4KKwordmlkZW89dHJpZGVudGZiOjgwMHg2MDAsYnBwPTE2LG5vYWNjZWwKKworVGhlIHNlY29uZCBsZXZlbCBwYXJhbWV0ZXJzIHRoYXQgdHJpZGVudGZiIHVuZGVyc3RhbmRzIGFyZToKKworbm9hY2NlbCAtIHR1cm5zIG9mZiBhY2NlbGVyYXRpb24gKHdoZW4gaXQgZG9lc24ndCB3b3JrIGZvciB5b3VyIGNhcmQpCithY2NlbCAtIGZvcmNlIHRleHQgYWNjZWxlcmF0aW9uIChmb3IgYm9hcmRzIHdoaWNoIGJ5IGRlZmF1bHQgYXJlIG5vYWNjZWxlZCkKKworZnAJLSB1c2UgZmxhdCBwYW5lbCByZWxhdGVkIHN0dWZmCitjcnQgCS0gYXNzdW1lIG1vbml0b3IgaXMgcHJlc2VudCBpbnN0ZWFkIG9mIGZwCisKK2NlbnRlciAJLSBmb3IgZmxhdCBwYW5lbHMgYW5kIHJlc29sdXRpb25zIHNtYWxsZXIgdGhhbiBuYXRpdmUgc2l6ZSBjZW50ZXIgdGhlCisJICBpbWFnZSwgb3RoZXJ3aXNlIHVzZQorc3RyZXRjaAorCittZW1zaXplIC0gaW50ZWdlciB2YWx1ZSBpbiBLYiwgdXNlIGlmIHlvdXIgY2FyZCdzIG1lbW9yeSBzaXplIGlzIG1pc2RldGVjdGVkLgorCSAgbG9vayBhdCB0aGUgZHJpdmVyIG91dHB1dCB0byBzZWUgd2hhdCBpdCBzYXlzIHdoZW4gaW5pdGlhbGl6aW5nLgorbWVtZGlmZiAtIGludGVnZXIgdmFsdWUgaW4gS2Isc2hvdWxkIGJlIG5vbnplcm8gaWYgeW91ciBjYXJkIHJlcG9ydHMKKwkgIG1vcmUgbWVtb3J5IHRoYW4gaXQgYWN0dWFsbHkgaGFzLkZvciBpbnN0YW5jZSBtaW5lIGlzIDE5MksgbGVzcyB0aGFuCisJICBkZXRlY3Rpb24gc2F5cyBpbiBhbGwgdGhyZWUgQklPUyBzZWxlY3RhYmxlIHNpdHVhdGlvbnMgMk0sIDRNLCA4TS4KKwkgIE9ubHkgdXNlIGlmIHlvdXIgdmlkZW8gbWVtb3J5IGlzIHRha2VuIGZyb20gbWFpbiBtZW1vcnkgaGVuY2Ugb2YKKwkgIGNvbmZpZ3VyYWJsZSBzaXplLk90aGVyd2lzZSB1c2UgbWVtc2l6ZS4KKwkgIElmIGluIHNvbWUgbW9kZXMgd2hpY2ggYmFyZWx5IGZpdCB0aGUgbWVtb3J5IHlvdSBzZWUgZ2FyYmFnZSBhdCB0aGUgYm90dG9tCisJICB0aGlzIG1pZ2h0IGhlbHAgYnkgbm90IGxldHRpbmcgY2hhbmdlIHRvIHRoYXQgbW9kZSBhbnltb3JlLgorCituYXRpdmV4IC0gdGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZmxhdCBwYW5lbC5JZiB5b3Uga25vdyBpdCAodXN1YWxseSAxMDI0CisJICA4MDAgb3IgMTI4MCkgYW5kIGl0IGlzIG5vdCB3aGF0IHRoZSBkcml2ZXIgc2VlbXMgdG8gZGV0ZWN0IHVzZSBpdC4KKworYnBwICAtIGJpdHMgcGVyIHBpeGVsICg4LDE2IG9yIDMyKQorbW9kZSAtIGEgbW9kZSBuYW1lIGxpa2UgODAweDYwMCAoYXMgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vZmIvbW9kZWRiLnR4dCkKKworVXNpbmcgaW5zYW5lIHZhbHVlcyBmb3IgdGhlIGFib3ZlIHBhcmFtZXRlcnMgd2lsbCBwcm9iYWJseSByZXN1bHQgaW4gZHJpdmVyCittaXNiZWhhdmlvdXIgc28gdGFrZSBjYXJlKGZvciBpbnN0YW5jZSBtZW1zaXplPTEyMzQ1Njc4IG9yIG1lbWRpZmY9MjM3ODQgb3IKK25hdGl2ZXg9OTMpCisKK0NvbnRhY3Q6IGphbmlAYXN0ZWNobml4LnJvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3Zlc2FmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3Zlc2FmYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0ZTJmNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmIvdmVzYWZiLnR4dApAQCAtMCwwICsxLDE2NyBAQAorCitXaGF0IGlzIHZlc2FmYj8KKz09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgZ2VuZXJpYyBkcml2ZXIgZm9yIGEgZ3JhcGhpYyBmcmFtZWJ1ZmZlciBvbiBpbnRlbCBib3hlcy4KKworVGhlIGlkZWEgaXMgc2ltcGxlOiAgVHVybiBvbiBncmFwaGljcyBtb2RlIGF0IGJvb3QgdGltZSB3aXRoIHRoZSBoZWxwCitvZiB0aGUgQklPUywgYW5kIHVzZSB0aGlzIGFzIGZyYW1lYnVmZmVyIGRldmljZSAvZGV2L2ZiMCwgbGlrZSB0aGUgbTY4aworKGFuZCBvdGhlcikgcG9ydHMgZG8uCisKK1RoaXMgbWVhbnMgd2UgZGVjaWRlIGF0IGJvb3QgdGltZSB3aGVuZXZlciB3ZSB3YW50IHRvIHJ1biBpbiB0ZXh0IG9yCitncmFwaGljcyBtb2RlLiAgU3dpdGNoaW5nIG1vZGUgbGF0ZXIgb24gKGluIHByb3RlY3RlZCBtb2RlKSBpcworaW1wb3NzaWJsZTsgQklPUyBjYWxscyB3b3JrIGluIHJlYWwgbW9kZSBvbmx5LiAgVkVTQSBCSU9TIEV4dGVuc2lvbnMKK1ZlcnNpb24gMi4wIGFyZSByZXF1aXJlZCwgYmVjYXVzZSB3ZSBuZWVkIGEgbGluZWFyIGZyYW1lIGJ1ZmZlci4KKworQWR2YW50YWdlczoKKworICogSXQgcHJvdmlkZXMgYSBuaWNlIGxhcmdlIGNvbnNvbGUgKDEyOCBjb2xzICsgNDggbGluZXMgd2l0aCAxMDI0eDc2OCkKKyAgIHdpdGhvdXQgdXNpbmcgdGlueSwgdW5yZWFkYWJsZSBmb250cy4KKyAqIFlvdSBjYW4gcnVuIFhGNjhfRkJEZXYgb24gdG9wIG9mIC9kZXYvZmIwICg9PiBub24tYWNjZWxlcmF0ZWQgWDExCisgICBzdXBwb3J0IGZvciBldmVyeSBWQkUgMi4wIGNvbXBsaWFudCBncmFwaGljcyBib2FyZCkuCisgKiBNb3N0IGltcG9ydGFudDogYm9vdCBsb2dvIDotKQorCitEaXNhZHZhbnRhZ2VzOgorCisgKiBncmFwaGljIG1vZGUgaXMgc2xvd2VyIHRoYW4gdGV4dCBtb2RlLi4uCisKKworSG93IHRvIHVzZSBpdD8KKz09PT09PT09PT09PT09CisKK1N3aXRjaGluZyBtb2RlcyBpcyBkb25lIHVzaW5nIHRoZSB2Z2E9Li4uIGJvb3QgcGFyYW1ldGVyLiAgUmVhZAorRG9jdW1lbnRhdGlvbi9zdmdhLnR4dCBmb3IgZGV0YWlscy4KKworWW91IHNob3VsZCBjb21waWxlIGluIGJvdGggdmdhY29uIChmb3IgdGV4dCBtb2RlKSBhbmQgdmVzYWZiIChmb3IKK2dyYXBoaWNzIG1vZGUpLiBXaGljaCBvZiB0aGVtIHRha2VzIG92ZXIgdGhlIGNvbnNvbGUgZGVwZW5kcyBvbgord2hlbmV2ZXIgdGhlIHNwZWNpZmllZCBtb2RlIGlzIHRleHQgb3IgZ3JhcGhpY3MuCisKK1RoZSBncmFwaGljIG1vZGVzIGFyZSBOT1QgaW4gdGhlIGxpc3Qgd2hpY2ggeW91IGdldCBpZiB5b3UgYm9vdCB3aXRoCit2Z2E9YXNrIGFuZCBoaXQgcmV0dXJuLiBUaGUgbW9kZSB5b3Ugd2lzaCB0byB1c2UgaXMgZGVyaXZlZCBmcm9tIHRoZQorVkVTQSBtb2RlIG51bWJlci4gSGVyZSBhcmUgdGhvc2UgVkVTQSBtb2RlIG51bWJlcnM6CisKKyAgICB8IDY0MHg0ODAgIDgwMHg2MDAgIDEwMjR4NzY4IDEyODB4MTAyNAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyNTYgfCAgMHgxMDEgICAgMHgxMDMgICAgMHgxMDUgICAgMHgxMDcgICAKKzMyayB8ICAweDExMCAgICAweDExMyAgICAweDExNiAgICAweDExOSAgIAorNjRrIHwgIDB4MTExICAgIDB4MTE0ICAgIDB4MTE3ICAgIDB4MTFBICAgCisxNk0gfCAgMHgxMTIgICAgMHgxMTUgICAgMHgxMTggICAgMHgxMUIgICAKKworVGhlIHZpZGVvIG1vZGUgbnVtYmVyIG9mIHRoZSBMaW51eCBrZXJuZWwgaXMgdGhlIFZFU0EgbW9kZSBudW1iZXIgcGx1cworMHgyMDAuCisgCisgTGludXhfa2VybmVsX21vZGVfbnVtYmVyID0gVkVTQV9tb2RlX251bWJlciArIDB4MjAwCisKK1NvIHRoZSB0YWJsZSBmb3IgdGhlIEtlcm5lbCBtb2RlIG51bWJlcnMgYXJlOgorCisgICAgfCA2NDB4NDgwICA4MDB4NjAwICAxMDI0eDc2OCAxMjgweDEwMjQKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMjU2IHwgIDB4MzAxICAgIDB4MzAzICAgIDB4MzA1ICAgIDB4MzA3ICAgCiszMmsgfCAgMHgzMTAgICAgMHgzMTMgICAgMHgzMTYgICAgMHgzMTkgICAKKzY0ayB8ICAweDMxMSAgICAweDMxNCAgICAweDMxNyAgICAweDMxQSAgIAorMTZNIHwgIDB4MzEyICAgIDB4MzE1ICAgIDB4MzE4ICAgIDB4MzFCICAgCisKK1RvIGVuYWJsZSBvbmUgb2YgdGhvc2UgbW9kZXMgeW91IGhhdmUgdG8gc3BlY2lmeSAidmdhPWFzayIgaW4gdGhlCitsaWxvLmNvbmYgZmlsZSBhbmQgcmVydW4gTElMTy4gVGhlbiB5b3UgY2FuIHR5cGUgaW4gdGhlIGRlc2lyZWQKK21vZGUgYXQgdGhlICJ2Z2E9YXNrIiBwcm9tcHQuIEZvciBleGFtcGxlIGlmIHlvdSBsaWtlIHRvIHVzZSAKKzEwMjR4NzY4eDI1NiBjb2xvcnMgeW91IGhhdmUgdG8gc2F5ICIzMDUiIGF0IHRoaXMgcHJvbXB0LgorCitJZiB0aGlzIGRvZXMgbm90IHdvcmssIHRoaXMgbWlnaHQgYmUgYmVjYXVzZSB5b3VyIEJJT1MgZG9lcyBub3Qgc3VwcG9ydAorbGluZWFyIGZyYW1lYnVmZmVycyBvciBiZWNhdXNlIGl0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBtb2RlIGF0IGFsbC4KK0V2ZW4gaWYgeW91ciBib2FyZCBkb2VzLCBpdCBtaWdodCBiZSB0aGUgQklPUyB3aGljaCBkb2VzIG5vdC4gIFZFU0EgQklPUworRXh0ZW5zaW9ucyB2Mi4wIGFyZSByZXF1aXJlZCwgMS4yIGlzIE5PVCBzdWZmaWNpZW50LiAgWW91IHdpbGwgZ2V0IGEKKyJiYWQgbW9kZSBudW1iZXIiIG1lc3NhZ2UgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCisKKzEuIE5vdGU6IExJTE8gY2Fubm90IGhhbmRsZSBoZXgsIGZvciBib290aW5nIGRpcmVjdGx5IHdpdGggCisgICAgICAgICAidmdhPW1vZGUtbnVtYmVyIiB5b3UgaGF2ZSB0byB0cmFuc2Zvcm0gdGhlIG51bWJlcnMgdG8gZGVjaW1hbC4KKzIuIE5vdGU6IFNvbWUgbmV3ZXIgdmVyc2lvbnMgb2YgTElMTyBhcHBlYXIgdG8gd29yayB3aXRoIHRob3NlIGhleCB2YWx1ZXMsCisgICAgICAgICBpZiB5b3Ugc2V0IHRoZSAweCBpbiBmcm9udCBvZiB0aGUgbnVtYmVycy4KKworWDExCis9PT0KKworWEY2OF9GQkRldiBzaG91bGQgd29yayBqdXN0IGZpbmUsIGJ1dCBpdCBpcyBub24tYWNjZWxlcmF0ZWQuICBSdW5uaW5nCithbm90aGVyIChhY2NlbGVyYXRlZCkgWC1TZXJ2ZXIgbGlrZSBYRjg2X1NWR0EgbWlnaHQgb3IgbWlnaHQgbm90IHdvcmsuCitJdCBkZXBlbmRzIG9uIFgtU2VydmVyIGFuZCBncmFwaGljcyBib2FyZC4KKworVGhlIFgtU2VydmVyIG11c3QgcmVzdG9yZSB0aGUgdmlkZW8gbW9kZSBjb3JyZWN0bHksIGVsc2UgeW91IGVuZCB1cAord2l0aCBhIGJyb2tlbiBjb25zb2xlIChhbmQgdmVzYWZiIGNhbm5vdCBkbyBhbnl0aGluZyBhYm91dCB0aGlzKS4KKworCitSZWZyZXNoIHJhdGVzCis9PT09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgdGhlIHZlc2FmYiB2aWRlbyBtb2RlIGFuZC9vciB0aW1pbmdzIGFmdGVyCitib290aW5nIGxpbnV4LiAgSWYgeW91IGFyZSBub3QgaGFwcHkgd2l0aCB0aGUgNjAgSHogcmVmcmVzaCByYXRlLCB5b3UKK2hhdmUgdGhlc2Ugb3B0aW9uczoKKworICogY29uZmlndXJlIGFuZCBsb2FkIHRoZSBET1MtVG9vbHMgZm9yIHlvdXIgdGhlIGdyYXBoaWNzIGJvYXJkIChpZgorICAgYXZhaWxhYmxlKSBhbmQgYm9vdCBsaW51eCB3aXRoIGxvYWRsaW4uCisgKiB1c2UgYSBuYXRpdmUgZHJpdmVyIChtYXRyb3hmYi9hdHlmYikgaW5zdGVhZCBpZiB2ZXNhZmIuICBJZiBub25lCisgICBpcyBhdmFpbGFibGUsIHdyaXRlIGEgbmV3IG9uZSEKKyAqIFZCRSAzLjAgbWlnaHQgd29yayB0b28uICBJIGhhdmUgbmVpdGhlciBhIGdmeCBib2FyZCB3aXRoIFZCRSAzLjAKKyAgIHN1cHBvcnQgbm9yIHRoZSBzcGVjcywgc28gSSBoYXZlIG5vdCBjaGVja2VkIHRoaXMgeWV0LgorCisKK0NvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT0KKworVGhlIFZFU0EgQklPUyBwcm92aWRlcyBwcm90ZWN0ZWQgbW9kZSBpbnRlcmZhY2UgZm9yIGNoYW5naW5nCitzb21lIHBhcmFtZXRlcnMuICB2ZXNhZmIgY2FuIHVzZSBpdCBmb3IgcGFsZXR0ZSBjaGFuZ2VzIGFuZAordG8gcGFuIHRoZSBkaXNwbGF5LiAgSXQgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IGJlY2F1c2UgaXQKK3NlZW1zIG5vdCB0byB3b3JrIHdpdGggc29tZSBCSU9TIHZlcnNpb25zLCBidXQgdGhlcmUgYXJlIG9wdGlvbnMKK3RvIHR1cm4gaXQgb24uCisKK1lvdSBjYW4gcGFzcyBvcHRpb25zIHRvIHZlc2FmYiB1c2luZyAidmlkZW89dmVzYWZiOm9wdGlvbiIgb24KK3RoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiAgTXVsdGlwbGUgb3B0aW9ucyBzaG91bGQgYmUgc2VwYXJhdGVkCitieSBjb21tYSwgbGlrZSB0aGlzOiAidmlkZW89dmVzYWZiOnlwYW4saW52ZXJzIgorCitBY2NlcHRlZCBvcHRpb25zOgorCitpbnZlcnMJbm8gY29tbWVudC4uLgorCit5cGFuCWVuYWJsZSBkaXNwbGF5IHBhbm5pbmcgdXNpbmcgdGhlIFZFU0EgcHJvdGVjdGVkIG1vZGUgCisJaW50ZXJmYWNlLiAgVGhlIHZpc2libGUgc2NyZWVuIGlzIGp1c3QgYSB3aW5kb3cgb2YgdGhlCisJdmlkZW8gbWVtb3J5LCBjb25zb2xlIHNjcm9sbGluZyBpcyBkb25lIGJ5IGNoYW5naW5nIHRoZQorCXN0YXJ0IG9mIHRoZSB3aW5kb3cuCisJcHJvOgkqIHNjcm9sbGluZyAoZnVsbHNjcmVlbikgaXMgZmFzdCwgYmVjYXVzZSB0aGVyZSBpcworCQkgIG5vIG5lZWQgdG8gY29weSBhcm91bmQgZGF0YS4KKwkJKiBZb3UnbGwgZ2V0IHNjcm9sbGJhY2sgKHRoZSBTaGlmdC1QZ1VwIHRoaW5nKSwKKwkJICB0aGUgdmlkZW8gbWVtb3J5IGNhbiBiZSB1c2VkIGFzIHNjcm9sbGJhY2sgYnVmZmVyCisJa29udHJhOiAqIHNjcm9sbGluZyBvbmx5IHBhcnRzIG9mIHRoZSBzY3JlZW4gY2F1c2VzIHNvbWUKKwkJICB1Z2x5IGZsaWNrZXIgZWZmZWN0cyAoYm9vdCBsb2dvIGZsaWNrZXJzIGZvcgorCQkgIGV4YW1wbGUpLgorCit5d3JhcAlTYW1lIGFzIHlwYW4sIGJ1dCBhc3N1bWVzIHlvdXIgZ2Z4IGJvYXJkIGNhbiB3cmFwLWFyb3VuZCAKKwl0aGUgdmlkZW8gbWVtb3J5IChpLmUuIHN0YXJ0cyByZWFkaW5nIGZyb20gdG9wIGlmIGl0CisJcmVhY2hlcyB0aGUgZW5kIG9mIHZpZGVvIG1lbW9yeSkuICBGYXN0ZXIgdGhhbiB5cGFuLgorCityZWRyYXcJc2Nyb2xsIGJ5IHJlZHJhd2luZyB0aGUgYWZmZWN0ZWQgcGFydCBvZiB0aGUgc2NyZWVuLCB0aGlzCisJaXMgdGhlIHNhZmUgKGFuZCBzbG93KSBkZWZhdWx0LgorCisKK3ZnYXBhbAlVc2UgdGhlIHN0YW5kYXJkIHZnYSByZWdpc3RlcnMgZm9yIHBhbGV0dGUgY2hhbmdlcy4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0LgorcG1pcGFsCVVzZSB0aGUgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNlIGZvciBwYWxldHRlIGNoYW5nZXMuCisKK210cnIJc2V0dXAgbWVtb3J5IHR5cGUgcmFuZ2UgcmVnaXN0ZXJzIGZvciB0aGUgdmVzYWZiIGZyYW1lYnVmZmVyLgorCit2cmVtYXA6bgorICAgICAgICByZW1hcCAnbicgTWlCIG9mIHZpZGVvIFJBTS4gSWYgMCBvciBub3Qgc3BlY2lmaWVkLCByZW1hcCBtZW1vcnkKKwlhY2NvcmRpbmcgdG8gdmlkZW8gbW9kZS4gKDIuNS42NiBwYXRjaC9pZGVhIGJ5IEFudG9uaW5vIERhcGxhcworCXJldmVyc2VkIHRvIGdpdmUgb3ZlcnJpZGUgcG9zc2liaWxpdHkgKGFsbG9jYXRlIG1vcmUgZmIgbWVtb3J5CisJdGhhbiB0aGUga2VybmVsIHdvdWxkKSB0byAyLjQgYnkgdG1iQGlraS5maSkKKwordnRvdGFsOm4KKyAgICAgICAgaWYgdGhlIHZpZGVvIEJJT1Mgb2YgeW91ciBjYXJkIGluY29ycmVjdGx5IGRldGVybWluZXMgdGhlIHRvdGFsCisgICAgICAgIGFtb3VudCBvZiB2aWRlbyBSQU0sIHVzZSB0aGlzIG9wdGlvbiB0byBvdmVycmlkZSB0aGUgQklPUyAoaW4gTWlCKS4KKworSGF2ZSBmdW4hCisKKyAgR2VyZAorCistLQorR2VyZCBLbm9yciA8a3JheGVsQGdvbGRiYWNoLmluLWJlcmxpbi5kZT4KKworTWlub3IgKG1vc3RseSB0eXBvKSBjaGFuZ2VzIAorYnkgTmljbyBTY2htb2lnbCA8c2NobW9pZ2xAcnVtbXMudW5pLW1hbm5oZWltLmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjFmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTAsMCArMSw0MiBAQAorVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgZmlsZXMgYW5kIGZlYXR1cmVzIHRoYXQgYXJlIGdvaW5nIHRvIGJlCityZW1vdmVkIGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuICBFdmVyeSBlbnRyeSBzaG91bGQgY29udGFpbiB3aGF0CitleGFjdGx5IGlzIGdvaW5nIGF3YXksIHdoeSBpdCBpcyBoYXBwZW5pbmcsIGFuZCB3aG8gaXMgZ29pbmcgdG8gYmUgZG9pbmcKK3RoZSB3b3JrLiAgV2hlbiB0aGUgZmVhdHVyZSBpcyByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCwgaXQgc2hvdWxkIGFsc28KK2JlIHJlbW92ZWQgZnJvbSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglkZXZmcworV2hlbjoJSnVseSAyMDA1CitGaWxlczoJZnMvZGV2ZnMvKiwgaW5jbHVkZS9saW51eC9kZXZmc19mcyouaCBhbmQgYXNzb3J0ZWQgZGV2ZnMKKwlmdW5jdGlvbiBjYWxscyB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdHJlZQorV2h5OglJdCBoYXMgYmVlbiB1bm1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIHllYXJzLCBoYXMgdW5maXhhYmxlCisJcmFjZXMsIGNvbnRhaW5zIGEgbmFtaW5nIHBvbGljeSB3aXRoaW4gdGhlIGtlcm5lbCB0aGF0IGlzCisJYWdhaW5zdCB0aGUgTFNCLCBhbmQgY2FuIGJlIHJlcGxhY2VkIGJ5IHVzaW5nIHVkZXYuCitXaG86CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglBQ1BJIFM0YmlvcyBzdXBwb3J0CitXaGVuOglNYXkgMjAwNQorV2h5OglOb29uZSB1c2VzIGl0LCBhbmQgaXQgcHJvYmFibHkgZG9lcyBub3Qgd29yaywgYW55d2F5LiBzd3N1c3AgaXMKKwlmYXN0ZXIsIG1vcmUgcmVsaWFibGUsIGFuZCBwZW9wbGUgYXJlIGFjdHVhbGx5IHVzaW5nIGl0LgorV2hvOglQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglQQ0kgTmFtZSBEYXRhYmFzZSAoQ09ORklHX1BDSV9OQU1FUykKK1doZW46CUp1bHkgMjAwNQorV2h5OglJdCBibG9hdHMgdGhlIGtlcm5lbCB1bm5lY2Vzc2FyaWx5LCBhbmQgaXMgaGFuZGxlZCBieSB1c2Vyc3BhY2UgYmV0dGVyCisJKHBjaXV0aWxzIHN1cHBvcnRzIGl0LikgIFdpbGwgZWxpbWluYXRlIHRoZSBuZWVkIHRvIHRyeSB0byBrZWVwIHRoZQorCXBjaS5pZHMgZmlsZSBpbiBzeW5jIHdpdGggdGhlIHNmLm5ldCBkYXRhYmFzZSBhbGwgb2YgdGhlIHRpbWUuCitXaG86CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0Oglpb19yZW1hcF9wYWdlX3JhbmdlKCkgKG1hY3JvIG9yIGZ1bmN0aW9uKQorV2hlbjoJU2VwdGVtYmVyIDIwMDUKK1doeToJUmVwbGFjZWQgYnkgaW9fcmVtYXBfcGZuX3JhbmdlKCkgd2hpY2ggYWxsb3dzIG1vcmUgbWVtb3J5IHNwYWNlCisJYWRkcmVzc2FiaWx0eSAoYnkgdXNpbmcgYSBwZm4pIGFuZCBzdXBwb3J0cyBzcGFyYyAmIHNwYXJjNjQKKwlpb3NwYWNlIGFzIHBhcnQgb2YgdGhlIHBmbi4KK1dobzoJUmFuZHkgRHVubGFwIDxyZGR1bmxhcEBvc2RsLm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZmJhYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCkBAIC0wLDAgKzEsNTAgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUgKGluZm8gb24gc29tZSBvZiB0aGUgZmlsZXN5c3RlbXMgc3VwcG9ydGVkIGJ5IGxpbnV4KS4KK0xvY2tpbmcKKwktIGluZm8gb24gbG9ja2luZyBydWxlcyBhcyB0aGV5IHBlcnRhaW4gdG8gTGludXggVkZTLgorYWRmcy50eHQKKwktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBBY29ybiBBZHZhbmNlZCBEaXNjIEZpbGluZyBTeXN0ZW0uCithZmZzLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIEFtaWdhIEZhc3QgRmlsZSBTeXN0ZW0uCitiZnMudHh0CisJLSBpbmZvIGZvciB0aGUgU0NPIFVuaXhXYXJlIEJvb3QgRmlsZXN5c3RlbSAoQkZTKS4KK2NpZnMudHh0CisJLSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0lGUyBmaWxlc3lzdGVtCitjb2RhLnR4dAorCS0gZGVzY3JpcHRpb24gb2YgdGhlIENPREEgZmlsZXN5c3RlbS4KK2NyYW1mcy50eHQKKwktIGluZm8gb24gdGhlIGNyYW0gZmlsZXN5c3RlbSBmb3Igc21hbGwgc3RvcmFnZSAoUk9NcyBldGMpCitkZXZmcy8KKwktIGRpcmVjdG9yeSBjb250YWluaW5nIGRldmZzIGRvY3VtZW50YXRpb24uCitleHQyLnR4dAorCS0gaW5mbywgbW91bnQgb3B0aW9ucyBhbmQgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBFeHQyIGZpbGVzeXN0ZW0uCitmYXRfY3ZmLnR4dAorCS0gaW5mbyBvbiB0aGUgQ29tcHJlc3NlZCBWb2x1bWUgRmlsZXMgZXh0ZW5zaW9uIHRvIHRoZSBGQVQgZmlsZXN5c3RlbQoraHBmcy50eHQKKwktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBPUy8yIEhQRlMuCitpc29mcy50eHQKKwktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBJU08gOTY2MCAoQ0RST00pIGZpbGVzeXN0ZW0uCitqZnMudHh0CisJLSBpbmZvIGFuZCBtb3VudCBvcHRpb25zIGZvciB0aGUgSkZTIGZpbGVzeXN0ZW0uCituY3Bmcy50eHQKKwktIGluZm8gb24gTm92ZWxsIE5ldHdhcmUodG0pIGZpbGVzeXN0ZW0gdXNpbmcgTkNQIHByb3RvY29sLgorbnRmcy50eHQKKwktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBOVEZTIGZpbGVzeXN0ZW0gKFdpbmRvd3MgTlQpLgorcHJvYy50eHQKKwktIGluZm8gb24gTGludXgncyAvcHJvYyBmaWxlc3lzdGVtLgorcm9tZnMudHh0CisJLSBEZXNjcmlwdGlvbiBvZiB0aGUgUk9NRlMgZmlsZXN5c3RlbS4KK3NtYmZzLnR4dAorCS0gaW5mbyBvbiB1c2luZyBmaWxlc3lzdGVtcyB3aXRoIHRoZSBTTUIgcHJvdG9jb2wgKFdpbmRvd3MgMy4xMSBhbmQgTlQpCitzeXN2LWZzLnR4dAorCS0gaW5mbyBvbiB0aGUgU3lzdGVtVi9WNy9YZW5peC9Db2hlcmVudCBmaWxlc3lzdGVtLgordWRmLnR4dAorCS0gaW5mbyBhbmQgbW91bnQgb3B0aW9ucyBmb3IgdGhlIFVERiBmaWxlc3lzdGVtLgordWZzLnR4dAorCS0gaW5mbyBvbiB0aGUgdWZzIGZpbGVzeXN0ZW0uCit2ZmF0LnR4dAorCS0gaW5mbyBvbiB1c2luZyB0aGUgVkZBVCBmaWxlc3lzdGVtIHVzZWQgaW4gV2luZG93cyBOVCBhbmQgV2luZG93cyA5NQordmZzLnR4dAorCS0gT3ZlcnZpZXcgb2YgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0KK3hmcy50eHQKKwktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9FeHBvcnRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEwNDdlMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvRXhwb3J0aW5nCkBAIC0wLDAgKzEsMTc2IEBACisKK01ha2luZyBGaWxlc3lzdGVtcyBFeHBvcnRhYmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNb3N0IGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyByZXF1aXJlIGEgZGVudHJ5IChvciB0d28pIGFzIGEgc3RhcnRpbmcKK3BvaW50LiAgTG9jYWwgYXBwbGljYXRpb25zIGhhdmUgYSByZWZlcmVuY2UtY291bnRlZCBob2xkIG9uIHN1aXRhYmxlCitkZW50cnlzIHZpYSBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgb3IgY3dkL3Jvb3QuICBIb3dldmVyIHJlbW90ZQorYXBwbGljYXRpb25zIHRoYXQgYWNjZXNzIGEgZmlsZXN5c3RlbSB2aWEgYSByZW1vdGUgZmlsZXN5c3RlbSBwcm90b2NvbAorc3VjaCBhcyBORlMgbWF5IG5vdCBiZSBhYmxlIHRvIGhvbGQgc3VjaCBhIHJlZmVyZW5jZSwgYW5kIHNvIG5lZWQgYQorZGlmZmVyZW50IHdheSB0byByZWZlciB0byBhIHBhcnRpY3VsYXIgZGVudHJ5LiAgQXMgdGhlIGFsdGVybmF0aXZlCitmb3JtIG9mIHJlZmVyZW5jZSBuZWVkcyB0byBiZSBzdGFibGUgYWNyb3NzIHJlbmFtZXMsIHRydW5jYXRlcywgYW5kCitzZXJ2ZXItcmVib290IChhbW9uZyBvdGhlciB0aGluZ3MsIHRob3VnaCB0aGVzZSB0ZW5kIHRvIGJlIHRoZSBtb3N0Citwcm9ibGVtYXRpYyksIHRoZXJlIGlzIG5vIHNpbXBsZSBhbnN3ZXIgbGlrZSAnZmlsZW5hbWUnLgorCitUaGUgbWVjaGFuaXNtIGRpc2N1c3NlZCBoZXJlIGFsbG93cyBlYWNoIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gdG8KK3NwZWNpZnkgaG93IHRvIGdlbmVyYXRlIGFuIG9wYXF1ZSAob3V0IHNpZGUgb2YgdGhlIGZpbGVzeXN0ZW0pIGJ5dGUKK3N0cmluZyBmb3IgYW55IGRlbnRyeSwgYW5kIGhvdyB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGRlbnRyeSBmb3IgYW55CitnaXZlbiBvcGFxdWUgYnl0ZSBzdHJpbmcuCitUaGlzIGJ5dGUgc3RyaW5nIHdpbGwgYmUgY2FsbGVkIGEgImZpbGVoYW5kbGUgZnJhZ21lbnQiIGFzIGl0Citjb3JyZXNwb25kcyB0byBwYXJ0IG9mIGFuIE5GUyBmaWxlaGFuZGxlLgorCitBIGZpbGVzeXN0ZW0gd2hpY2ggc3VwcG9ydHMgdGhlIG1hcHBpbmcgYmV0d2VlbiBmaWxlaGFuZGxlIGZyYWdtZW50cworYW5kIGRlbnRyeXMgd2lsbCBiZSB0ZXJtZWQgImV4cG9ydGFibGUiLgorCisKKworRGNhY2hlIElzc3VlcworLS0tLS0tLS0tLS0tLQorCitUaGUgZGNhY2hlIG5vcm1hbGx5IGNvbnRhaW5zIGEgcHJvcGVyIHByZWZpeCBvZiBhbnkgZ2l2ZW4gZmlsZXN5c3RlbQordHJlZS4gIFRoaXMgbWVhbnMgdGhhdCBpZiBhbnkgZmlsZXN5c3RlbSBvYmplY3QgaXMgaW4gdGhlIGRjYWNoZSwgdGhlbgorYWxsIG9mIHRoZSBhbmNlc3RvcnMgb2YgdGhhdCBmaWxlc3lzdGVtIG9iamVjdCBhcmUgYWxzbyBpbiB0aGUgZGNhY2hlLgorQXMgbm9ybWFsIGFjY2VzcyBpcyBieSBmaWxlbmFtZSB0aGlzIHByZWZpeCBpcyBjcmVhdGVkIG5hdHVyYWxseSBhbmQKK21haW50YWluZWQgZWFzaWx5IChieSBlYWNoIG9iamVjdCBtYWludGFpbmluZyBhIHJlZmVyZW5jZSBjb3VudCBvbgoraXRzIHBhcmVudCkuCisKK0hvd2V2ZXIgd2hlbiBvYmplY3RzIGFyZSBpbmNsdWRlZCBpbnRvIHRoZSBkY2FjaGUgYnkgaW50ZXJwcmV0aW5nIGEKK2ZpbGVoYW5kbGUgZnJhZ21lbnQsIHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiBhIHBhdGggcHJlZml4Citmb3IgdGhlIG9iamVjdC4gIFRoaXMgbGVhZHMgdG8gdHdvIHJlbGF0ZWQgYnV0IGRpc3RpbmN0IGZlYXR1cmVzIG9mCit0aGUgZGNhY2hlIHRoYXQgYXJlIG5vdCBuZWVkZWQgZm9yIG5vcm1hbCBmaWxlc3lzdGVtIGFjY2Vzcy4KKworMS8gVGhlIGRjYWNoZSBtdXN0IHNvbWV0aW1lcyBjb250YWluIG9iamVjdHMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlCisgICBwcm9wZXIgcHJlZml4LiBpLmUgdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byB0aGUgcm9vdC4KKzIvIFRoZSBkY2FjaGUgbXVzdCBiZSBwcmVwYXJlZCBmb3IgYSBuZXdseSBmb3VuZCAodmlhIC0+bG9va3VwKSBkaXJlY3RvcnkKKyAgIHRvIGFscmVhZHkgaGF2ZSBhIChub24tY29ubmVjdGVkKSBkZW50cnksIGFuZCBtdXN0IGJlIGFibGUgdG8gbW92ZQorICAgdGhhdCBkZW50cnkgaW50byBwbGFjZSAoYmFzZWQgb24gdGhlIHBhcmVudCBhbmQgbmFtZSBpbiB0aGUKKyAgIC0+bG9va3VwKS4gICBUaGlzIGlzIHBhcnRpY3VsYXJseSBuZWVkZWQgZm9yIGRpcmVjdG9yaWVzIGFzCisgICBpdCBpcyBhIGRjYWNoZSBpbnZhcmlhbnQgdGhhdCBkaXJlY3RvcmllcyBvbmx5IGhhdmUgb25lIGRlbnRyeS4KKworVG8gaW1wbGVtZW50IHRoZXNlIGZlYXR1cmVzLCB0aGUgZGNhY2hlIGhhczoKKworYS8gQSBkZW50cnkgZmxhZyBEQ0FDSEVfRElTQ09OTkVDVEVEIHdoaWNoIGlzIHNldCBvbgorICAgYW55IGRlbnRyeSB0aGF0IG1pZ2h0IG5vdCBiZSBwYXJ0IG9mIHRoZSBwcm9wZXIgcHJlZml4LgorICAgVGhpcyBpcyBzZXQgd2hlbiBhbm9ueW1vdXMgZGVudHJpZXMgYXJlIGNyZWF0ZWQsIGFuZCBjbGVhcmVkIHdoZW4gYQorICAgZGVudHJ5IGlzIG5vdGljZWQgdG8gYmUgYSBjaGlsZCBvZiBhIGRlbnRyeSB3aGljaCBpcyBpbiB0aGUgcHJvcGVyCisgICBwcmVmaXguIAorCitiLyBBIHBlci1zdXBlcmJsb2NrIGxpc3QgInNfYW5vbiIgb2YgZGVudHJpZXMgd2hpY2ggYXJlIHRoZSByb290cyBvZgorICAgc3VidHJlZXMgdGhhdCBhcmUgbm90IGluIHRoZSBwcm9wZXIgcHJlZml4LiAgVGhlc2UgZGVudHJpZXMsIGFzCisgICB3ZWxsIGFzIHRoZSBwcm9wZXIgcHJlZml4LCBuZWVkIHRvIGJlIHJlbGVhc2VkIGF0IHVubW91bnQgdGltZS4gIEFzCisgICB0aGVzZSBkZW50cmllcyB3aWxsIG5vdCBiZSBoYXNoZWQsIHRoZXkgYXJlIGxpbmtlZCB0b2dldGhlciBvbiB0aGUKKyAgIGRfaGFzaCBsaXN0X2hlYWQuCisKK2MvIEhlbHBlciByb3V0aW5lcyB0byBhbGxvY2F0ZSBhbm9ueW1vdXMgZGVudHJpZXMsIGFuZCB0byBoZWxwIGF0dGFjaAorICAgbG9vc2UgZGlyZWN0b3J5IGRlbnRyaWVzIGF0IGxvb2t1cCB0aW1lLiBUaGV5IGFyZToKKyAgICBkX2FsbG9jX2Fub24oaW5vZGUpIHdpbGwgcmV0dXJuIGEgZGVudHJ5IGZvciB0aGUgZ2l2ZW4gaW5vZGUuCisgICAgICBJZiB0aGUgaW5vZGUgYWxyZWFkeSBoYXMgYSBkZW50cnksIG9uZSBvZiB0aG9zZSBpcyByZXR1cm5lZC4KKyAgICAgIElmIGl0IGRvZXNuJ3QsIGEgbmV3IGFub255bW91cyAoSVNfUk9PVCBhbmQKKyAgICAgICAgRENBQ0hFX0RJU0NPTk5FQ1RFRCkgZGVudHJ5IGlzIGFsbG9jYXRlZCBhbmQgYXR0YWNoZWQuCisgICAgICBJbiB0aGUgY2FzZSBvZiBhIGRpcmVjdG9yeSwgY2FyZSBpcyB0YWtlbiB0aGF0IG9ubHkgb25lIGRlbnRyeQorICAgICAgY2FuIGV2ZXIgYmUgYXR0YWNoZWQuCisgICAgZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSkgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBhCisgICAgICBkZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBwYXJlbnQgYXMgdGhlIGdpdmVuIGRlbnRyeSwgYW5kCisgICAgICB3aGljaCByZWZlcnMgdG8gdGhlIGdpdmVuIGlub2RlLgorICAgICAgSWYgdGhlIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZCBhbHJlYWR5IGhhcyBhIGRlbnRyeSwgdGhlbiB0aGF0CisgICAgICBkZW50cnkgaXMgZF9tb3ZlZCBvdmVyIHRoZSBnaXZlbiBkZW50cnkuCisgICAgICBJZiB0aGUgcGFzc2VkIGRlbnRyeSBnZXRzIGF0dGFjaGVkLCBjYXJlIGlzIHRha2VuIHRoYXQgdGhpcyBpcworICAgICAgbXV0dWFsbHkgZXhjbHVzaXZlIHRvIGEgZF9hbGxvY19hbm9uIG9wZXJhdGlvbi4KKyAgICAgIElmIHRoZSBwYXNzZWQgZGVudHJ5IGlzIHVzZWQsIE5VTEwgaXMgcmV0dXJuZWQsIGVsc2UgdGhlIHVzZWQKKyAgICAgIGRlbnRyeSBpcyByZXR1cm5lZC4gIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGNhbGxpbmcgcGF0dGVybiBvZgorICAgICAgLT5sb29rdXAuCisgIAorIAorRmlsZXN5c3RlbSBJc3N1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBhIGZpbGVzeXN0ZW0gdG8gYmUgZXhwb3J0YWJsZSBpdCBtdXN0OgorIAorICAgMS8gcHJvdmlkZSB0aGUgZmlsZWhhbmRsZSBmcmFnbWVudCByb3V0aW5lcyBkZXNjcmliZWQgYmVsb3cuCisgICAyLyBtYWtlIHN1cmUgdGhhdCBkX3NwbGljZV9hbGlhcyBpcyB1c2VkIHJhdGhlciB0aGFuIGRfYWRkCisgICAgICB3aGVuIC0+bG9va3VwIGZpbmRzIGFuIGlub2RlIGZvciBhIGdpdmVuIHBhcmVudCBhbmQgbmFtZS4KKyAgICAgIFR5cGljYWxseSB0aGUgLT5sb29rdXAgcm91dGluZSB3aWxsIGVuZDoKKwkJaWYgKGlub2RlKQorCQkJcmV0dXJuIGRfc3BsaWNlKGlub2RlLCBkZW50cnkpOworCQlkX2FkZChkZW50cnksIGlub2RlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisKKworICBBIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uIGRlY2xhcmVzIHRoYXQgaW5zdGFuY2VzIG9mIHRoZSBmaWxlc3lzdGVtCithcmUgZXhwb3J0YWJsZSBieSBzZXR0aW5nIHRoZSBzX2V4cG9ydF9vcCBmaWVsZCBpbiB0aGUgc3RydWN0CitzdXBlcl9ibG9jay4gIFRoaXMgZmllbGQgbXVzdCBwb2ludCB0byBhICJzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMiCitzdHJ1Y3Qgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYmUgZnVsbCBvZiBOVUxMcywgdGhvdWdoIG5vcm1hbGx5IGF0CitsZWFzdCBnZXRfcGFyZW50IHdpbGwgYmUgc2V0LgorCisgVGhlIHByaW1hcnkgb3BlcmF0aW9ucyBhcmUgZGVjb2RlX2ZoIGFuZCBlbmNvZGVfZmguICAKK2RlY29kZV9maCB0YWtlcyBhIGZpbGVoYW5kbGUgZnJhZ21lbnQgYW5kIHRyaWVzIHRvIGZpbmQgb3IgY3JlYXRlIGEKK2RlbnRyeSBmb3IgdGhlIG9iamVjdCByZWZlcnJlZCB0byBieSB0aGUgZmlsZWhhbmRsZS4KK2VuY29kZV9maCB0YWtlcyBhIGRlbnRyeSBhbmQgY3JlYXRlcyBhIGZpbGVoYW5kbGUgZnJhZ21lbnQgd2hpY2ggY2FuCitsYXRlciBiZSB1c2VkIHRvIGZpbmQvY3JlYXRlIGEgZGVudHJ5IGZvciB0aGUgc2FtZSBvYmplY3QuCisKK2RlY29kZV9maCB3aWxsIHByb2JhYmx5IG1ha2UgdXNlIG9mICJmaW5kX2V4cG9ydGVkX2RlbnRyeSIuCitUaGlzIGZ1bmN0aW9uIGxpdmVzIGluIHRoZSAiZXhwb3J0ZnMiIG1vZHVsZSB3aGljaCBhIGZpbGVzeXN0ZW0gZG9lcworbm90IG5lZWQgdW5sZXNzIGl0IGlzIGJlaW5nIGV4cG9ydGVkLiAgU28gcmF0aGVyIHRoYXQgY2FsbGluZworZmluZF9leHBvcnRlZF9kZW50cnkgZGlyZWN0bHksIGVhY2ggZmlsZXN5c3RlbSBzaG91bGQgY2FsbCBpdCB0aHJvdWdoCit0aGUgZmluZF9leHBvcnRlZF9kZW50cnkgcG9pbnRlciBpbiBpdCdzIGV4cG9ydF9vcGVyYXRpb25zIHRhYmxlLgorVGhpcyBmaWVsZCBpcyBzZXQgY29ycmVjdGx5IGJ5IHRoZSBleHBvcnRpbmcgYWdlbnQgKGUuZy4gbmZzZCkgd2hlbiBhCitmaWxlc3lzdGVtIGlzIGV4cG9ydGVkLCBhbmQgYmVmb3JlIGFueSBleHBvcnQgb3BlcmF0aW9ucyBhcmUgY2FsbGVkLgorCitmaW5kX2V4cG9ydGVkX2RlbnRyeSBuZWVkcyB0aHJlZSBzdXBwb3J0IGZ1bmN0aW9ucyBmcm9tIHRoZQorZmlsZXN5c3RlbToKKyAgZ2V0X25hbWUuICBXaGVuIGdpdmVuIGEgcGFyZW50IGRlbnRyeSBhbmQgYSBjaGlsZCBkZW50cnksIHRoaXMKKyAgICBzaG91bGQgZmluZCBhIG5hbWUgaW4gdGhlIGRpcmVjdG9yeSBpZGVudGlmaWVkIGJ5IHRoZSBwYXJlbnQKKyAgICBkZW50cnksIHdoaWNoIGxlYWRzIHRvIHRoZSBvYmplY3QgaWRlbnRpZmllZCBieSB0aGUgY2hpbGQgZGVudHJ5LgorICAgIElmIG5vIGdldF9uYW1lIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMKKyAgICBwcm92aWRlZCB3aGljaCB1c2VzIHZmc19yZWFkZGlyIHRvIGZpbmQgcG90ZW50aWFsIG5hbWVzLCBhbmQKKyAgICBtYXRjaGVzIGlub2RlIG51bWJlcnMgdG8gZmluZCB0aGUgY29ycmVjdCBtYXRjaC4KKworICBnZXRfcGFyZW50LiAgV2hlbiBnaXZlbiBhIGRlbnRyeSBmb3IgYSBkaXJlY3RvcnksIHRoaXMgc2hvdWxkIHJldHVybiAKKyAgICBhIGRlbnRyeSBmb3IgdGhlIHBhcmVudC4gIFF1aXRlIHBvc3NpYmx5IHRoZSBwYXJlbnQgZGVudHJ5IHdpbGwKKyAgICBoYXZlIGJlZW4gYWxsb2NhdGVkIGJ5IGRfYWxsb2NfYW5vbi4gIAorICAgIFRoZSBkZWZhdWx0IGdldF9wYXJlbnQgZnVuY3Rpb24ganVzdCByZXR1cm5zIGFuIGVycm9yIHNvIGFueQorICAgIGZpbGVoYW5kbGUgbG9va3VwIHRoYXQgcmVxdWlyZXMgZmluZGluZyBhIHBhcmVudCB3aWxsIGZhaWwuCisgICAgLT5sb29rdXAoIi4uIikgaXMgKm5vdCogdXNlZCBhcyBhIGRlZmF1bHQgYXMgaXQgY2FuIGxlYXZlICIuLiIKKyAgICBlbnRyaWVzIGluIHRoZSBkY2FjaGUgd2hpY2ggYXJlIHRvbyBtZXNzeSB0byB3b3JrIHdpdGguCisKKyAgZ2V0X2RlbnRyeS4gIFdoZW4gZ2l2ZW4gYW4gb3BhcXVlIGRhdHVtLCB0aGlzIHNob3VsZCBmaW5kIHRoZQorICAgIGltcGxpZWQgb2JqZWN0IGFuZCBjcmVhdGUgYSBkZW50cnkgZm9yIGl0IChwb3NzaWJseSB3aXRoCisgICAgZF9hbGxvY19hbm9uKS4gCisgICAgVGhlIG9wYXF1ZSBkYXR1bSBpcyB3aGF0ZXZlciBpcyBwYXNzZWQgZG93biBieSB0aGUgZGVjb2RlX2ZoCisgICAgZnVuY3Rpb24sIGFuZCBpcyBvZnRlbiBzaW1wbHkgYSBmcmFnbWVudCBvZiB0aGUgZmlsZWhhbmRsZQorICAgIGZyYWdtZW50LgorICAgIGRlY29kZV9maCBwYXNzZXMgdHdvIGRhdHVtcyB0aHJvdWdoIGZpbmRfZXhwb3J0ZWRfZGVudHJ5LiAgT25lIHRoYXQgCisgICAgc2hvdWxkIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHRhcmdldCBvYmplY3QsIGFuZCBvbmUgdGhhdCBjYW4gYmUKKyAgICB1c2VkIHRvIGlkZW50aWZ5IHRoZSBvYmplY3QncyBwYXJlbnQsIHNob3VsZCB0aGF0IGJlIG5lY2Vzc2FyeS4KKyAgICBUaGUgZGVmYXVsdCBnZXRfZGVudHJ5IGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZGF0dW0gY29udGFpbnMgYW4KKyAgICBpbm9kZSBudW1iZXIgYW5kIGEgZ2VuZXJhdGlvbiBudW1iZXIsIGFuZCBpdCBhdHRlbXB0cyB0byBnZXQgdGhlCisgICAgaW5vZGUgdXNpbmcgImlnZXQiIGFuZCBjaGVjayBpdCdzIHZhbGlkaXR5IGJ5IG1hdGNoaW5nIHRoZQorICAgIGdlbmVyYXRpb24gbnVtYmVyLiAgQSBmaWxlc3lzdGVtIHNob3VsZCBvbmx5IGRlcGVuZCBvbiB0aGUgZGVmYXVsdAorICAgIGlmIGlnZXQgY2FuIHNhZmVseSBiZSB1c2VkIHRoaXMgd2F5LgorCitJZiBkZWNvZGVfZmggYW5kL29yIGVuY29kZV9maCBhcmUgbGVmdCBhcyBOVUxMLCB0aGVuIGRlZmF1bHQKK2ltcGxlbWVudGF0aW9ucyBhcmUgdXNlZC4gIFRoZXNlIGRlZmF1bHRzIGFyZSBzdWl0YWJsZSBmb3IgZXh0MiBhbmQgCitleHRyZW1lbHkgc2ltaWxhciBmaWxlc3lzdGVtcyAobGlrZSBleHQzKS4KKworVGhlIGRlZmF1bHQgZW5jb2RlX2ZoIGNyZWF0ZXMgYSBmaWxlaGFuZGxlIGZyYWdtZW50IGZyb20gdGhlIGlub2RlCitudW1iZXIgYW5kIGdlbmVyYXRpb24gbnVtYmVyIG9mIHRoZSB0YXJnZXQgdG9nZXRoZXIgd2l0aCB0aGUgaW5vZGUKK251bWJlciBhbmQgZ2VuZXJhdGlvbiBudW1iZXIgb2YgdGhlIHBhcmVudCAoaWYgdGhlIHBhcmVudCBpcworcmVxdWlyZWQpLgorCitUaGUgZGVmYXVsdCBkZWNvZGVfZmggZXh0cmFjdCB0aGUgdGFyZ2V0IGFuZCBwYXJlbnQgZGF0dW1zIGZyb20gdGhlCitmaWxlaGFuZGxlIGFzc3VtaW5nIHRoZSBmb3JtYXQgdXNlZCBieSB0aGUgZGVmYXVsdCBlbmNvZGVfZmggYW5kCitwYXNzZWQgdGhlbSB0byBmaW5kX2V4cG9ydGVkX2RlbnRyeS4KKworCitBIGZpbGVoYW5kbGUgZnJhZ21lbnQgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2YgMSBvciBtb3JlIDRieXRlIHdvcmRzLAordG9nZXRoZXIgd2l0aCBhIG9uZSBieXRlICJ0eXBlIi4KK1RoZSBkZWNvZGVfZmggcm91dGluZSBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGUgc3RhdGVkIHNpemUgdGhhdCBpcworcGFzc2VkIHRvIGl0LiAgVGhpcyBzaXplIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgb3JpZ2luYWwgZmlsZWhhbmRsZQorZ2VuZXJhdGVkIGJ5IGVuY29kZV9maCwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGhhdmUgYmVlbiBwYWRkZWQgd2l0aAorbnVscy4gIFJhdGhlciwgdGhlIGVuY29kZV9maCByb3V0aW5lIHNob3VsZCBjaG9vc2UgYSAidHlwZSIgd2hpY2gKK2luZGljYXRlcyB0aGUgZGVjb2RlX2ZoIGhvdyBtdWNoIG9mIHRoZSBmaWxlaGFuZGxlIGlzIHZhbGlkLCBhbmQgaG93CitpdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQuCisKKyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM0YmFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC0wLDAgKzEsNTE1IEBACisJVGhlIHRleHQgYmVsb3cgZGVzY3JpYmVzIHRoZSBsb2NraW5nIHJ1bGVzIGZvciBWRlMtcmVsYXRlZCBtZXRob2RzLgorSXQgaXMgKGJlbGlldmVkIHRvIGJlKSB1cC10by1kYXRlLiAqUGxlYXNlKiwgaWYgeW91IGNoYW5nZSBhbnl0aGluZyBpbgorcHJvdG90eXBlcyBvciBsb2NraW5nIHByb3RvY29scyAtIHVwZGF0ZSB0aGlzIGZpbGUuIEFuZCB1cGRhdGUgdGhlIHJlbGV2YW50CitpbnN0YW5jZXMgaW4gdGhlIHRyZWUsIGRvbid0IGxlYXZlIHRoYXQgdG8gbWFpbnRhaW5lcnMgb2YgZmlsZXN5c3RlbXMvZGV2aWNlcy8KK2V0Yy4gQXQgdGhlIHZlcnkgbGVhc3QsIHB1dCB0aGUgbGlzdCBvZiBkdWJpb3VzIGNhc2VzIGluIHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorRG9uJ3QgdHVybiBpdCBpbnRvIGxvZyAtIG1haW50YWluZXJzIG9mIG91dC1vZi10aGUtdHJlZSBjb2RlIGFyZSBzdXBwb3NlZCB0bworYmUgYWJsZSB0byB1c2UgZGlmZigxKS4KKwlUaGluZyBjdXJyZW50bHkgbWlzc2luZyBoZXJlOiBzb2NrZXQgb3BlcmF0aW9ucy4gQWxleGV5PworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVudHJ5X29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb3RvdHlwZXM6CisJaW50ICgqZF9yZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICosIGludCk7CisJaW50ICgqZF9oYXNoKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKwlpbnQgKCpkX2NvbXBhcmUpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOworCWludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOworCXZvaWQgKCpkX3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7CisJdm9pZCAoKmRfaXB1dCkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CisKK2xvY2tpbmcgcnVsZXM6CisJbm9uZSBoYXZlIEJLTAorCQlkY2FjaGVfbG9jawlyZW5hbWVfbG9jawktPmRfbG9jawltYXkgYmxvY2sKK2RfcmV2YWxpZGF0ZToJbm8JCW5vCQlubwkJeWVzCitkX2hhc2gJCW5vCQlubwkJbm8JCXllcworZF9jb21wYXJlOglubwkJeWVzCQlubwkJbm8gCitkX2RlbGV0ZToJeWVzCQlubwkJeWVzCQlubworZF9yZWxlYXNlOglubwkJbm8JCW5vCQl5ZXMKK2RfaXB1dDoJCW5vCQlubwkJbm8JCXllcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW5vZGVfb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCitwcm90b3R5cGVzOgorCWludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CisJc3RydWN0IGRlbnRyeSAqICgqbG9va3VwKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkCithdGEgKik7CisJaW50ICgqbGluaykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixjb25zdCBjaGFyICopOworCWludCAoKm1rZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCk7CisJaW50ICgqcm1kaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKm1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCxkZXZfdCk7CisJaW50ICgqcmVuYW1lKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKKwkJCXN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLGludCk7CisJaW50ICgqZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CisJdm9pZCAoKnRydW5jYXRlKSAoc3RydWN0IGlub2RlICopOworCWludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworCWludCAoKnNldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKKwlpbnQgKCpnZXRhdHRyKSAoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOworCWludCAoKnNldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosY29uc3Qgdm9pZCAqLHNpemVfdCxpbnQpOworCXNzaXplX3QgKCpnZXR4YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CisJc3NpemVfdCAoKmxpc3R4YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBzaXplX3QpOworCWludCAoKnJlbW92ZXhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICopOworCitsb2NraW5nIHJ1bGVzOgorCWFsbCBtYXkgYmxvY2ssIG5vbmUgaGF2ZSBCS0wKKwkJaV9zZW0oaW5vZGUpCitsb29rdXA6CQl5ZXMKK2NyZWF0ZToJCXllcworbGluazoJCXllcyAoYm90aCkKK21rbm9kOgkJeWVzCitzeW1saW5rOgl5ZXMKK21rZGlyOgkJeWVzCit1bmxpbms6CQl5ZXMgKGJvdGgpCitybWRpcjoJCXllcyAoYm90aCkJKHNlZSBiZWxvdykKK3JlbmFtZToJCXllcyAoYWxsKQkoc2VlIGJlbG93KQorcmVhZGxpbms6CW5vCitmb2xsb3dfbGluazoJbm8KK3RydW5jYXRlOgl5ZXMJCShzZWUgYmVsb3cpCitzZXRhdHRyOgl5ZXMKK3Blcm1pc3Npb246CW5vCitnZXRhdHRyOglubworc2V0eGF0dHI6CXllcworZ2V0eGF0dHI6CW5vCitsaXN0eGF0dHI6CW5vCityZW1vdmV4YXR0cjoJeWVzCisJQWRkaXRpb25hbGx5LCAtPnJtZGlyKCksIC0+dW5saW5rKCkgYW5kIC0+cmVuYW1lKCkgaGF2ZSAtPmlfc2VtIG9uCit2aWN0aW0uCisJY3Jvc3MtZGlyZWN0b3J5IC0+cmVuYW1lKCkgaGFzIChwZXItc3VwZXJibG9jaykgLT5zX3Zmc19yZW5hbWVfc2VtLgorCS0+dHJ1bmNhdGUoKSBpcyBuZXZlciBjYWxsZWQgZGlyZWN0bHkgLSBpdCdzIGEgY2FsbGJhY2ssIG5vdCBhCittZXRob2QuIEl0J3MgY2FsbGVkIGJ5IHZtdHJ1bmNhdGUoKSAtIGxpYnJhcnkgZnVuY3Rpb24gbm9ybWFsbHkgdXNlZCBieQorLT5zZXRhdHRyKCkuIExvY2tpbmcgaW5mb3JtYXRpb24gYWJvdmUgYXBwbGllcyB0byB0aGF0IGNhbGwgKGkuZS4gaXMKK2luaGVyaXRlZCBmcm9tIC0+c2V0YXR0cigpIC0gdm10cnVuY2F0ZSgpIGlzIHVzZWQgd2hlbiBBVFRSX1NJWkUgaGFkIGJlZW4KK3Bhc3NlZCkuCisKK1NlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RpcmVjdG9yeS1sb2NraW5nIGZvciBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24KK29mIHRoZSBsb2NraW5nIHNjaGVtZSBmb3IgZGlyZWN0b3J5IG9wZXJhdGlvbnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBlcl9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwlzdHJ1Y3QgaW5vZGUgKigqYWxsb2NfaW5vZGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworCXZvaWQgKCpkZXN0cm95X2lub2RlKShzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKnJlYWRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2RlICopOworCWludCAoKndyaXRlX2lub2RlKSAoc3RydWN0IGlub2RlICosIGludCk7CisJdm9pZCAoKnB1dF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZHJvcF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZGVsZXRlX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCpwdXRfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisJdm9pZCAoKndyaXRlX3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCWludCAoKnN5bmNfZnMpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KTsKKwl2b2lkICgqd3JpdGVfc3VwZXJfbG9ja2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCXZvaWQgKCp1bmxvY2tmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwlpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtzdGF0ZnMgKik7CisJaW50ICgqcmVtb3VudF9mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKKwl2b2lkICgqY2xlYXJfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKnVtb3VudF9iZWdpbikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKwlpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CisJc3NpemVfdCAoKnF1b3RhX3JlYWQpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworCXNzaXplX3QgKCpxdW90YV93cml0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCk7CisKK2xvY2tpbmcgcnVsZXM6CisJQWxsIG1heSBibG9jay4KKwkJCUJLTAlzX2xvY2sJc191bW91bnQKK2FsbG9jX2lub2RlOgkJbm8Jbm8Jbm8KK2Rlc3Ryb3lfaW5vZGU6CQlubworcmVhZF9pbm9kZToJCW5vCQkJCShzZWUgYmVsb3cpCitkaXJ0eV9pbm9kZToJCW5vCQkJCShtdXN0IG5vdCBzbGVlcCkKK3dyaXRlX2lub2RlOgkJbm8KK3B1dF9pbm9kZToJCW5vCitkcm9wX2lub2RlOgkJbm8JCQkJISEhaW5vZGVfbG9jayEhIQorZGVsZXRlX2lub2RlOgkJbm8KK3B1dF9zdXBlcjoJCXllcwl5ZXMJbm8KK3dyaXRlX3N1cGVyOgkJbm8JeWVzCXJlYWQKK3N5bmNfZnM6CQlubwlubwlyZWFkCit3cml0ZV9zdXBlcl9sb2NrZnM6CT8KK3VubG9ja2ZzOgkJPworc3RhdGZzOgkJCW5vCW5vCW5vCityZW1vdW50X2ZzOgkJbm8JeWVzCW1heWJlCQkoc2VlIGJlbG93KQorY2xlYXJfaW5vZGU6CQlubwordW1vdW50X2JlZ2luOgkJeWVzCW5vCW5vCitzaG93X29wdGlvbnM6CQlubwkJCQkodmZzbW91bnQtPnNlbSkKK3F1b3RhX3JlYWQ6CQlubwlubwlubwkJKHNlZSBiZWxvdykKK3F1b3RhX3dyaXRlOgkJbm8Jbm8Jbm8JCShzZWUgYmVsb3cpCisKKy0+cmVhZF9pbm9kZSgpIGlzIG5vdCBhIG1ldGhvZCAtIGl0J3MgYSBjYWxsYmFjayB1c2VkIGluIGlnZXQoKS4KKy0+cmVtb3VudF9mcygpIHdpbGwgaGF2ZSB0aGUgc191bW91bnQgbG9jayBpZiBpdCdzIGFscmVhZHkgbW91bnRlZC4KK1doZW4gY2FsbGVkIGZyb20gZ2V0X3NiX3NpbmdsZSwgaXQgZG9lcyBOT1QgaGF2ZSB0aGUgc191bW91bnQgbG9jay4KKy0+cXVvdGFfcmVhZCgpIGFuZCAtPnF1b3RhX3dyaXRlKCkgZnVuY3Rpb25zIGFyZSBib3RoIGd1YXJhbnRlZWQgdG8KK2JlIHRoZSBvbmx5IG9uZXMgb3BlcmF0aW5nIG9uIHRoZSBxdW90YSBmaWxlIGJ5IHRoZSBxdW90YSBjb2RlICh2aWEKK2RxaW9fc2VtKSAodW5sZXNzIGFuIGFkbWluIHJlYWxseSB3YW50cyB0byBzY3JldyB1cCBzb21ldGhpbmcgYW5kCit3cml0ZXMgdG8gcXVvdGEgZmlsZXMgd2l0aCBxdW90YXMgb24pLiBGb3Igb3RoZXIgZGV0YWlscyBhYm91dCBsb2NraW5nCitzZWUgYWxzbyBkcXVvdF9vcGVyYXRpb25zIHNlY3Rpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaWxlX3N5c3RlbV90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKigqZ2V0X3NiKSAoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwgaW50LAorCQkJY29uc3QgY2hhciAqLCB2b2lkICopOworCXZvaWQgKCpraWxsX3NiKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworbG9ja2luZyBydWxlczoKKwkJbWF5IGJsb2NrCUJLTAorZ2V0X3NiCQl5ZXMJCXllcwora2lsbF9zYgkJeWVzCQl5ZXMKKworLT5nZXRfc2IoKSByZXR1cm5zIGVycm9yIG9yIGEgbG9ja2VkIHN1cGVyYmxvY2sgKGV4Y2x1c2l2ZSBvbiAtPnNfdW1vdW50KS4KKy0+a2lsbF9zYigpIHRha2VzIGEgd3JpdGUtbG9ja2VkIHN1cGVyYmxvY2ssIGRvZXMgYWxsIHNodXRkb3duIHdvcmsgb24gaXQsCit1bmxvY2tzIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCWludCAoKndyaXRlcGFnZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKKwlpbnQgKCpyZWFkcGFnZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKik7CisJaW50ICgqc3luY19wYWdlKShzdHJ1Y3QgcGFnZSAqKTsKKwlpbnQgKCp3cml0ZXBhZ2VzKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CisJaW50ICgqc2V0X3BhZ2VfZGlydHkpKHN0cnVjdCBwYWdlICpwYWdlKTsKKwlpbnQgKCpyZWFkcGFnZXMpKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcyk7CisJaW50ICgqcHJlcGFyZV93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKwlpbnQgKCpjb21taXRfd3JpdGUpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CisJc2VjdG9yX3QgKCpibWFwKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzZWN0b3JfdCk7CisJaW50ICgqaW52YWxpZGF0ZXBhZ2UpIChzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCpyZWxlYXNlcGFnZSkgKHN0cnVjdCBwYWdlICosIGludCk7CisJaW50ICgqZGlyZWN0X0lPKShpbnQsIHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2Vncyk7CisKK2xvY2tpbmcgcnVsZXM6CisJQWxsIGV4Y2VwdCBzZXRfcGFnZV9kaXJ0eSBtYXkgYmxvY2sKKworCQkJQktMCVBhZ2VMb2NrZWQocGFnZSkKK3dyaXRlcGFnZToJCW5vCXllcywgdW5sb2NrcyAoc2VlIGJlbG93KQorcmVhZHBhZ2U6CQlubwl5ZXMsIHVubG9ja3MKK3N5bmNfcGFnZToJCW5vCW1heWJlCit3cml0ZXBhZ2VzOgkJbm8KK3NldF9wYWdlX2RpcnR5CQlubwlubworcmVhZHBhZ2VzOgkJbm8KK3ByZXBhcmVfd3JpdGU6CQlubwl5ZXMKK2NvbW1pdF93cml0ZToJCW5vCXllcworYm1hcDoJCQl5ZXMKK2ludmFsaWRhdGVwYWdlOgkJbm8JeWVzCityZWxlYXNlcGFnZToJCW5vCXllcworZGlyZWN0X0lPOgkJbm8KKworCS0+cHJlcGFyZV93cml0ZSgpLCAtPmNvbW1pdF93cml0ZSgpLCAtPnN5bmNfcGFnZSgpIGFuZCAtPnJlYWRwYWdlKCkKK21heSBiZSBjYWxsZWQgZnJvbSB0aGUgcmVxdWVzdCBoYW5kbGVyICgvZGV2L2xvb3ApLgorCisJLT5yZWFkcGFnZSgpIHVubG9ja3MgdGhlIHBhZ2UsIGVpdGhlciBzeW5jaHJvbm91c2x5IG9yIHZpYSBJL08KK2NvbXBsZXRpb24uCisKKwktPnJlYWRwYWdlcygpIHBvcHVsYXRlcyB0aGUgcGFnZWNhY2hlIHdpdGggdGhlIHBhc3NlZCBwYWdlcyBhbmQgc3RhcnRzCitJL08gYWdhaW5zdCB0aGVtLiAgVGhleSBjb21lIHVubG9ja2VkIHVwb24gSS9PIGNvbXBsZXRpb24uCisKKwktPndyaXRlcGFnZSgpIGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczogZm9yICJtZW1vcnkgY2xlYW5zaW5nIiBhbmQgZm9yCisic3luYyIuICBUaGVzZSBhcmUgcXVpdGUgZGlmZmVyZW50IG9wZXJhdGlvbnMgYW5kIHRoZSBiZWhhdmlvdXIgbWF5IGRpZmZlcgorZGVwZW5kaW5nIHVwb24gdGhlIG1vZGUuCisKK0lmIHdyaXRlcGFnZSBpcyBjYWxsZWQgZm9yIHN5bmMgKHdiYy0+c3luY19tb2RlICE9IFdCQ19TWU5DX05PTkUpIHRoZW4KK2l0ICptdXN0KiBzdGFydCBJL08gYWdhaW5zdCB0aGUgcGFnZSwgZXZlbiBpZiB0aGF0IHdvdWxkIGludm9sdmUKK2Jsb2NraW5nIG9uIGluLXByb2dyZXNzIEkvTy4KKworSWYgd3JpdGVwYWdlIGlzIGNhbGxlZCBmb3IgbWVtb3J5IGNsZWFuc2luZyAoc3luY19tb2RlID09CitXQkNfU1lOQ19OT05FKSB0aGVuIGl0cyByb2xlIGlzIHRvIGdldCBhcyBtdWNoIHdyaXRlb3V0IHVuZGVyd2F5IGFzCitwb3NzaWJsZS4gIFNvIHdyaXRlcGFnZSBzaG91bGQgdHJ5IHRvIGF2b2lkIGJsb2NraW5nIGFnYWluc3QKK2N1cnJlbnRseS1pbi1wcm9ncmVzcyBJL08uCisKK0lmIHRoZSBmaWxlc3lzdGVtIGlzIG5vdCBjYWxsZWQgZm9yICJzeW5jIiBhbmQgaXQgZGV0ZXJtaW5lcyB0aGF0IGl0Cit3b3VsZCBuZWVkIHRvIGJsb2NrIGFnYWluc3QgaW4tcHJvZ3Jlc3MgSS9PIHRvIGJlIGFibGUgdG8gc3RhcnQgbmV3IEkvTworYWdhaW5zdCB0aGUgcGFnZSB0aGUgZmlsZXN5c3RlbSBzaG91bGQgcmVkaXJ0eSB0aGUgcGFnZSB3aXRoCityZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSgpLCB0aGVuIHVubG9jayB0aGUgcGFnZSBhbmQgcmV0dXJuIHplcm8uCitUaGlzIG1heSBhbHNvIGJlIGRvbmUgdG8gYXZvaWQgaW50ZXJuYWwgZGVhZGxvY2tzLCBidXQgcmFyZWx5LgorCitJZiB0aGUgZmlsZXN5dGVtIGlzIGNhbGxlZCBmb3Igc3luYyB0aGVuIGl0IG11c3Qgd2FpdCBvbiBhbnkKK2luLXByb2dyZXNzIEkvTyBhbmQgdGhlbiBzdGFydCBuZXcgSS9PLgorCitUaGUgZmlsZXN5c3RlbSBzaG91bGQgdW5sb2NrIHRoZSBwYWdlIHN5bmNocm9ub3VzbHksIGJlZm9yZSByZXR1cm5pbmcKK3RvIHRoZSBjYWxsZXIuCisKK1VubGVzcyB0aGUgZmlsZXN5c3RlbSBpcyBnb2luZyB0byByZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSgpLCB1bmxvY2sgdGhlIHBhZ2UKK2FuZCByZXR1cm4gemVybywgd3JpdGVwYWdlICptdXN0KiBydW4gc2V0X3BhZ2Vfd3JpdGViYWNrKCkgYWdhaW5zdCB0aGUgcGFnZSwKK2ZvbGxvd2VkIGJ5IHVubG9ja2luZyBpdC4gIE9uY2Ugc2V0X3BhZ2Vfd3JpdGViYWNrKCkgaGFzIGJlZW4gcnVuIGFnYWluc3QgdGhlCitwYWdlLCB3cml0ZSBJL08gY2FuIGJlIHN1Ym1pdHRlZCBhbmQgdGhlIHdyaXRlIEkvTyBjb21wbGV0aW9uIGhhbmRsZXIgbXVzdCBydW4KK2VuZF9wYWdlX3dyaXRlYmFjaygpIG9uY2UgdGhlIEkvTyBpcyBjb21wbGV0ZS4gIElmIG5vIEkvTyBpcyBzdWJtaXR0ZWQsIHRoZQorZmlsZXN5c3RlbSBtdXN0IHJ1biBlbmRfcGFnZV93cml0ZWJhY2soKSBhZ2FpbnN0IHRoZSBwYWdlIGJlZm9yZSByZXR1cm5pbmcgZnJvbQord3JpdGVwYWdlLgorCitUaGF0IGlzOiBhZnRlciAyLjUuMTIsIHBhZ2VzIHdoaWNoIGFyZSB1bmRlciB3cml0ZW91dCBhcmUgKm5vdCogbG9ja2VkLiAgTm90ZSwKK2lmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHRoZSBwYWdlIHRvIGJlIGxvY2tlZCBkdXJpbmcgd3JpdGVvdXQsIHRoYXQgaXMgb2ssIHRvbywKK3RoZSBwYWdlIGlzIGFsbG93ZWQgdG8gYmUgdW5sb2NrZWQgYXQgYW55IHBvaW50IGluIHRpbWUgYmV0d2VlbiB0aGUgY2FsbHMgdG8KK3NldF9wYWdlX3dyaXRlYmFjaygpIGFuZCBlbmRfcGFnZV93cml0ZWJhY2soKS4KKworTm90ZSwgZmFpbHVyZSB0byBydW4gZWl0aGVyIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCkgb3IgdGhlIGNvbWJpbmF0aW9uIG9mCitzZXRfcGFnZV93cml0ZWJhY2soKS9lbmRfcGFnZV93cml0ZWJhY2soKSBvbiBhIHBhZ2Ugc3VibWl0dGVkIHRvIHdyaXRlcGFnZQord2lsbCBsZWF2ZSB0aGUgcGFnZSBpdHNlbGYgbWFya2VkIGNsZWFuIGJ1dCBpdCB3aWxsIGJlIHRhZ2dlZCBhcyBkaXJ0eSBpbiB0aGUKK3JhZGl4IHRyZWUuICBUaGlzIGluY29oZXJlbmN5IGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBoYXJkLXRvLWRlYnVnIHByb2JsZW1zCitpbiB0aGUgZmlsZXN5c3RlbSBsaWtlIGhhdmluZyBkaXJ0eSBpbm9kZXMgYXQgdW1vdW50IGFuZCBsb3Npbmcgd3JpdHRlbiBkYXRhLgorCisJLT5zeW5jX3BhZ2UoKSBsb2NraW5nIHJ1bGVzIGFyZSBub3Qgd2VsbC1kZWZpbmVkIC0gdXN1YWxseSBpdCBpcyBjYWxsZWQKK3dpdGggbG9jayBvbiBwYWdlLCBidXQgdGhhdCBpcyBub3QgZ3VhcmFudGVlZC4gQ29uc2lkZXJpbmcgdGhlIGN1cnJlbnRseQorZXhpc3RpbmcgaW5zdGFuY2VzIG9mIHRoaXMgbWV0aG9kIC0+c3luY19wYWdlKCkgaXRzZWxmIGRvZXNuJ3QgbG9vaword2VsbC1kZWZpbmVkLi4uCisKKwktPndyaXRlcGFnZXMoKSBpcyB1c2VkIGZvciBwZXJpb2RpYyB3cml0ZWJhY2sgYW5kIGZvciBzeXNjYWxsLWluaXRpYXRlZAorc3luYyBvcGVyYXRpb25zLiAgVGhlIGFkZHJlc3Nfc3BhY2Ugc2hvdWxkIHN0YXJ0IEkvTyBhZ2FpbnN0IGF0IGxlYXN0CisqbnJfdG9fd3JpdGUgcGFnZXMuICAqbnJfdG9fd3JpdGUgbXVzdCBiZSBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwYWdlIHdoaWNoIGlzCit3cml0dGVuLiAgVGhlIGFkZHJlc3Nfc3BhY2UgaW1wbGVtZW50YXRpb24gbWF5IHdyaXRlIG1vcmUgKG9yIGxlc3MpIHBhZ2VzCit0aGFuICpucl90b193cml0ZSBhc2tzIGZvciwgYnV0IGl0IHNob3VsZCB0cnkgdG8gYmUgcmVhc29uYWJseSBjbG9zZS4gIElmCitucl90b193cml0ZSBpcyBOVUxMLCBhbGwgZGlydHkgcGFnZXMgbXVzdCBiZSB3cml0dGVuLgorCit3cml0ZXBhZ2VzIHNob3VsZCBfb25seV8gd3JpdGUgcGFnZXMgd2hpY2ggYXJlIHByZXNlbnQgb24KK21hcHBpbmctPmlvX3BhZ2VzLgorCisJLT5zZXRfcGFnZV9kaXJ0eSgpIGlzIGNhbGxlZCBmcm9tIHZhcmlvdXMgcGxhY2VzIGluIHRoZSBrZXJuZWwKK3doZW4gdGhlIHRhcmdldCBwYWdlIGlzIG1hcmtlZCBhcyBuZWVkaW5nIHdyaXRlYmFjay4gIEl0IG1heSBiZSBjYWxsZWQKK3VuZGVyIHNwaW5sb2NrIChpdCBjYW5ub3QgYmxvY2spIGFuZCBpcyBzb21ldGltZXMgY2FsbGVkIHdpdGggdGhlIHBhZ2UKK25vdCBsb2NrZWQuCisKKwktPmJtYXAoKSBpcyBjdXJyZW50bHkgdXNlZCBieSBsZWdhY3kgaW9jdGwoKSAoRklCTUFQKSBwcm92aWRlZCBieSBzb21lCitmaWxlc3lzdGVtcyBhbmQgYnkgdGhlIHN3YXBwZXIuIFRoZSBsYXR0ZXIgd2lsbCBldmVudHVhbGx5IGdvIGF3YXkuIEFsbAoraW5zdGFuY2VzIGRvIG5vdCBhY3R1YWxseSBuZWVkIHRoZSBCS0wuIFBsZWFzZSwga2VlcCBpdCB0aGF0IHdheSBhbmQgZG9uJ3QKK2JyZWVkIG5ldyBjYWxsZXJzLgorCisJLT5pbnZhbGlkYXRlcGFnZSgpIGlzIGNhbGxlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIG11c3QgYXR0ZW1wdCB0byBkcm9wCitzb21lIG9yIGFsbCBvZiB0aGUgYnVmZmVycyBmcm9tIHRoZSBwYWdlIHdoZW4gaXQgaXMgYmVpbmcgdHJ1bmNhdGVkLiAgSXQKK3JldHVybnMgemVybyBvbiBzdWNjZXNzLiAgSWYgLT5pbnZhbGlkYXRlcGFnZSBpcyB6ZXJvLCB0aGUga2VybmVsIHVzZXMKK2Jsb2NrX2ludmFsaWRhdGVwYWdlKCkgaW5zdGVhZC4KKworCS0+cmVsZWFzZXBhZ2UoKSBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIGlzIGFib3V0IHRvIHRyeSB0byBkcm9wIHRoZQorYnVmZmVycyBmcm9tIHRoZSBwYWdlIGluIHByZXBhcmF0aW9uIGZvciBmcmVlaW5nIGl0LiAgSXQgcmV0dXJucyB6ZXJvIHRvCitpbmRpY2F0ZSB0aGF0IHRoZSBidWZmZXJzIGFyZSAob3IgbWF5IGJlKSBmcmVlYWJsZS4gIElmIC0+cmVsZWFzZXBhZ2UgaXMgemVybywKK3RoZSBrZXJuZWwgYXNzdW1lcyB0aGF0IHRoZSBmcyBoYXMgbm8gcHJpdmF0ZSBpbnRlcmVzdCBpbiB0aGUgYnVmZmVycy4KKworCU5vdGU6IGN1cnJlbnRseSBhbG1vc3QgYWxsIGluc3RhbmNlcyBvZiBhZGRyZXNzX3NwYWNlIG1ldGhvZHMgYXJlCit1c2luZyBCS0wgZm9yIGludGVybmFsIHNlcmlhbGl6YXRpb24gYW5kIHRoYXQncyBvbmUgb2YgdGhlIHdvcnN0IHNvdXJjZXMKK29mIGNvbnRlbnRpb24uIE5vcm1hbGx5IHRoZXkgYXJlIGNhbGxpbmcgbGlicmFyeSBmdW5jdGlvbnMgKGluIGZzL2J1ZmZlci5jKQorYW5kIHBhc3MgZm9vX2dldF9ibG9jaygpIGFzIGEgY2FsbGJhY2sgKG9uIGxvY2FsIGJsb2NrLWJhc2VkIGZpbGVzeXN0ZW1zLAoraW5kZWVkKS4gQktMIGlzIG5vdCBuZWVkZWQgZm9yIGxpYnJhcnkgc3R1ZmYgYW5kIGlzIHVzdWFsbHkgdGFrZW4gYnkKK2Zvb19nZXRfYmxvY2soKS4gSXQncyBhbiBvdmVya2lsbCwgc2luY2UgYmxvY2sgYml0bWFwcyBjYW4gYmUgcHJvdGVjdGVkIGJ5CitpbnRlcm5hbCBmcyBsb2NraW5nIGFuZCByZWFsIGNyaXRpY2FsIGFyZWFzIGFyZSBtdWNoIHNtYWxsZXIgdGhhbiB0aGUgYXJlYXMKK2ZpbGVzeXN0ZW1zIHByb3RlY3Qgbm93LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaWxlX2xvY2tfb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb3RvdHlwZXM6CisJdm9pZCAoKmZsX2luc2VydCkoc3RydWN0IGZpbGVfbG9jayAqKTsJLyogbG9jayBpbnNlcnRpb24gY2FsbGJhY2sgKi8KKwl2b2lkICgqZmxfcmVtb3ZlKShzdHJ1Y3QgZmlsZV9sb2NrICopOwkvKiBsb2NrIHJlbW92YWwgY2FsbGJhY2sgKi8KKwl2b2lkICgqZmxfY29weV9sb2NrKShzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CisJdm9pZCAoKmZsX3JlbGVhc2VfcHJpdmF0ZSkoc3RydWN0IGZpbGVfbG9jayAqKTsKKworCitsb2NraW5nIHJ1bGVzOgorCQkJQktMCW1heSBibG9jaworZmxfaW5zZXJ0OgkJeWVzCW5vCitmbF9yZW1vdmU6CQl5ZXMJbm8KK2ZsX2NvcHlfbG9jazoJCXllcwlubworZmxfcmVsZWFzZV9wcml2YXRlOgl5ZXMJeWVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGxvY2tfbWFuYWdlcl9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwlpbnQgKCpmbF9jb21wYXJlX293bmVyKShzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CisJdm9pZCAoKmZsX25vdGlmeSkoc3RydWN0IGZpbGVfbG9jayAqKTsgIC8qIHVuYmxvY2sgY2FsbGJhY2sgKi8KKwl2b2lkICgqZmxfY29weV9sb2NrKShzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CisJdm9pZCAoKmZsX3JlbGVhc2VfcHJpdmF0ZSkoc3RydWN0IGZpbGVfbG9jayAqKTsKKwl2b2lkICgqZmxfYnJlYWspKHN0cnVjdCBmaWxlX2xvY2sgKik7IC8qIGJyZWFrX2xlYXNlIGNhbGxiYWNrICovCisKK2xvY2tpbmcgcnVsZXM6CisJCQlCS0wJbWF5IGJsb2NrCitmbF9jb21wYXJlX293bmVyOgl5ZXMJbm8KK2ZsX25vdGlmeToJCXllcwlubworZmxfY29weV9sb2NrOgkJeWVzCW5vCitmbF9yZWxlYXNlX3ByaXZhdGU6CXllcwl5ZXMKK2ZsX2JyZWFrOgkJeWVzCW5vCisKKwlDdXJyZW50bHkgb25seSBORlNEIGFuZCBOTE0gcHJvdmlkZSBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcy4gTm9uZSBvZiB0aGUKK3RoZW0gYmxvY2suIElmIHlvdSBoYXZlIG91dC1vZi10cmVlIGluc3RhbmNlcyAtIHBsZWFzZSwgc2hvdyB1cC4gTG9ja2luZworaW4gdGhhdCBhcmVhIHdpbGwgY2hhbmdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJ1ZmZlcl9oZWFkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCXZvaWQgKCpiX2VuZF9pbykoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKTsKKworbG9ja2luZyBydWxlczoKKwljYWxsZWQgZnJvbSBpbnRlcnJ1cHRzLiBJbiBvdGhlciB3b3JkcywgZXh0cmVtZSBjYXJlIGlzIG5lZWRlZCBoZXJlLgorYmggaXMgbG9ja2VkLCBidXQgdGhhdCdzIGFsbCB3YXJyYW50aWVzIHdlIGhhdmUgaGVyZS4gQ3VycmVudGx5IG9ubHkgUkFJRDEsCitoaWdobWVtLCBmcy9idWZmZXIuYywgYW5kIGZzL250ZnMvYW9wcy5jIGFyZSBwcm92aWRpbmcgdGhlc2UuIEJsb2NrIGRldmljZXMKK2NhbGwgdGhpcyBtZXRob2QgdXBvbiB0aGUgSU8gY29tcGxldGlvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJsb2NrX2RldmljZV9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcm90b3R5cGVzOgorCWludCAoKm9wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqbWVkaWFfY2hhbmdlZCkgKHN0cnVjdCBnZW5kaXNrICopOworCWludCAoKnJldmFsaWRhdGVfZGlzaykgKHN0cnVjdCBnZW5kaXNrICopOworCitsb2NraW5nIHJ1bGVzOgorCQkJQktMCWJkX3NlbQorb3BlbjoJCQl5ZXMJeWVzCityZWxlYXNlOgkJeWVzCXllcworaW9jdGw6CQkJeWVzCW5vCittZWRpYV9jaGFuZ2VkOgkJbm8Jbm8KK3JldmFsaWRhdGVfZGlzazoJbm8Jbm8KKworVGhlIGxhc3QgdHdvIGFyZSBjYWxsZWQgb25seSBmcm9tIGNoZWNrX2Rpc2tfY2hhbmdlKCkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaWxlX29wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwlsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CisJc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKKwlzc2l6ZV90ICgqYWlvX3JlYWQpIChzdHJ1Y3Qga2lvY2IgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworCXNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworCXNzaXplX3QgKCphaW9fd3JpdGUpIChzdHJ1Y3Qga2lvY2IgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LAorCQkJbG9mZl90KTsKKwlpbnQgKCpyZWFkZGlyKSAoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOworCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CisJaW50ICgqaW9jdGwpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJdW5zaWduZWQgbG9uZyk7CisJbG9uZyAoKnVubG9ja2VkX2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKwlsb25nICgqY29tcGF0X2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCptbWFwKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworCWludCAoKm9wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisJaW50ICgqZmx1c2gpIChzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCWludCAoKmZzeW5jKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQgZGF0YXN5bmMpOworCWludCAoKmFpb19mc3luYykgKHN0cnVjdCBraW9jYiAqLCBpbnQgZGF0YXN5bmMpOworCWludCAoKmZhc3luYykgKGludCwgc3RydWN0IGZpbGUgKiwgaW50KTsKKwlpbnQgKCpsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworCXNzaXplX3QgKCpyZWFkdikgKHN0cnVjdCBmaWxlICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBsb25nLAorCQkJbG9mZl90ICopOworCXNzaXplX3QgKCp3cml0ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywKKwkJCWxvZmZfdCAqKTsKKwlzc2l6ZV90ICgqc2VuZGZpbGUpIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCByZWFkX2FjdG9yX3QsCisJCQl2b2lkIF9fdXNlciAqKTsKKwlzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQsIHNpemVfdCwKKwkJCWxvZmZfdCAqLCBpbnQpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfdW5tYXBwZWRfYXJlYSkoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZywKKwkJCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCWludCAoKmNoZWNrX2ZsYWdzKShpbnQpOworCWludCAoKmRpcl9ub3RpZnkpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcpOworfTsKKworbG9ja2luZyBydWxlczoKKwlBbGwgZXhjZXB0IC0+cG9sbCgpIG1heSBibG9jay4KKwkJCUJLTAorbGxzZWVrOgkJCW5vCShzZWUgYmVsb3cpCityZWFkOgkJCW5vCithaW9fcmVhZDoJCW5vCit3cml0ZToJCQlubworYWlvX3dyaXRlOgkJbm8KK3JlYWRkaXI6IAkJbm8KK3BvbGw6CQkJbm8KK2lvY3RsOgkJCXllcwkoc2VlIGJlbG93KQordW5sb2NrZWRfaW9jdGw6CQlubwkoc2VlIGJlbG93KQorY29tcGF0X2lvY3RsOgkJbm8KK21tYXA6CQkJbm8KK29wZW46CQkJbWF5YmUJKHNlZSBiZWxvdykKK2ZsdXNoOgkJCW5vCityZWxlYXNlOgkJbm8KK2ZzeW5jOgkJCW5vCShzZWUgYmVsb3cpCithaW9fZnN5bmM6CQlubworZmFzeW5jOgkJCXllcwkoc2VlIGJlbG93KQorbG9jazoJCQl5ZXMKK3JlYWR2OgkJCW5vCit3cml0ZXY6CQkJbm8KK3NlbmRmaWxlOgkJbm8KK3NlbmRwYWdlOgkJbm8KK2dldF91bm1hcHBlZF9hcmVhOglubworY2hlY2tfZmxhZ3M6CQlubworZGlyX25vdGlmeToJCW5vCisKKy0+bGxzZWVrKCkgbG9ja2luZyBoYXMgbW92ZWQgZnJvbSBsbHNlZWsgdG8gdGhlIGluZGl2aWR1YWwgbGxzZWVrCitpbXBsZW1lbnRhdGlvbnMuICBJZiB5b3VyIGZzIGlzIG5vdCB1c2luZyBnZW5lcmljX2ZpbGVfbGxzZWVrLCB5b3UKK25lZWQgdG8gYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgYXBwcm9wcmlhdGUgbG9ja3MgaW4geW91ciAtPmxsc2VlaygpLgorRm9yIG1hbnkgZmlsZXN5c3RlbXMsIGl0IGlzIHByb2JhYmx5IHNhZmUgdG8gYWNxdWlyZSB0aGUgaW5vZGUKK3NlbWFwaG9yZS4gIE5vdGUgc29tZSBmaWxlc3lzdGVtcyAoaS5lLiByZW1vdGUgb25lcykgcHJvdmlkZSBubworcHJvdGVjdGlvbiBmb3IgaV9zaXplIHNvIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoZSBCS0wuCisKKy0+b3BlbigpIGxvY2tpbmcgaXMgaW4tdHJhbnNpdDogYmlnIGxvY2sgcGFydGlhbGx5IG1vdmVkIGludG8gdGhlIG1ldGhvZHMuCitUaGUgb25seSBleGNlcHRpb24gaXMgLT5vcGVuKCkgaW4gdGhlIGluc3RhbmNlcyBvZiBmaWxlX29wZXJhdGlvbnMgdGhhdCBuZXZlcgorZW5kIHVwIGluIC0+aV9mb3AvLT5wcm9jX2ZvcHMsIGkuZS4gb25lcyB0aGF0IGJlbG9uZyB0byBjaGFyYWN0ZXIgZGV2aWNlcworKGNocmRldl9vcGVuKCkgdGFrZXMgbG9jayBiZWZvcmUgcmVwbGFjaW5nIC0+Zl9vcCBhbmQgY2FsbGluZyB0aGUgc2Vjb25kYXJ5CittZXRob2QuIEFzIHNvb24gYXMgd2UgZml4IHRoZSBoYW5kbGluZyBvZiBtb2R1bGUgcmVmZXJlbmNlIGNvdW50ZXJzIGFsbAoraW5zdGFuY2VzIG9mIC0+b3BlbigpIHdpbGwgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIEJLTC4KKworTm90ZTogZXh0Ml9yZWxlYXNlKCkgd2FzICp0aGUqIHNvdXJjZSBvZiBjb250ZW50aW9uIG9uIGZzLWludGVuc2l2ZQorbG9hZHMgYW5kIGRyb3BwaW5nIEJLTCBvbiAtPnJlbGVhc2UoKSBoZWxwcyB0byBnZXQgcmlkIG9mIHRoYXQgKHdlIHN0aWxsCitncmFiIEJLTCBmb3IgY2FzZXMgd2hlbiB3ZSBjbG9zZSBhIGZpbGUgdGhhdCBoYWQgYmVlbiBvcGVuZWQgci93LCBidXQgdGhhdAorY2FuIGFuZCBzaG91bGQgYmUgZG9uZSB1c2luZyB0aGUgaW50ZXJuYWwgbG9ja2luZyB3aXRoIHNtYWxsZXIgY3JpdGljYWwgYXJlYXMpLgorQ3VycmVudCB3b3JzdCBvZmZlbmRlciBpcyBleHQyX2dldF9ibG9jaygpLi4uCisKKy0+ZmFzeW5jKCkgaXMgYSBtZXNzLiBUaGlzIGFyZWEgbmVlZHMgYSBiaWcgY2xlYW51cCBhbmQgdGhhdCB3aWxsIHByb2JhYmx5CithZmZlY3QgbG9ja2luZy4KKworLT5yZWFkZGlyKCkgYW5kIC0+aW9jdGwoKSBvbiBkaXJlY3RvcmllcyBtdXN0IGJlIGNoYW5nZWQuIElkZWFsbHkgd2Ugd291bGQKK21vdmUgLT5yZWFkZGlyKCkgdG8gaW5vZGVfb3BlcmF0aW9ucyBhbmQgdXNlIGEgc2VwYXJhdGUgbWV0aG9kIGZvciBkaXJlY3RvcnkKKy0+aW9jdGwoKSBvciBraWxsIHRoZSBsYXR0ZXIgY29tcGxldGVseS4gT25lIG9mIHRoZSBwcm9ibGVtcyBpcyB0aGF0IGZvcgorYW55dGhpbmcgdGhhdCByZXNlbWJsZXMgdW5pb24tbW91bnQgd2Ugd29uJ3QgaGF2ZSBhIHN0cnVjdCBmaWxlIGZvciBhbGwKK2NvbXBvbmVudHMuIEFuZCB0aGVyZSBhcmUgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIGlzIGEgbWVzcy4uLgorCistPmlvY3RsKCkgb24gcmVndWxhciBmaWxlcyBpcyBzdXBlcmNlZGVkIGJ5IHRoZSAtPnVubG9ja2VkX2lvY3RsKCkgdGhhdAorZG9lc24ndCB0YWtlIHRoZSBCS0wuCisKKy0+cmVhZCBvbiBkaXJlY3RvcmllcyBwcm9iYWJseSBtdXN0IGdvIGF3YXkgLSB3ZSBzaG91bGQganVzdCBlbmZvcmNlIC1FSVNESVIKK2luIHN5c19yZWFkKCkgYW5kIGZyaWVuZHMuCisKKy0+ZnN5bmMoKSBoYXMgaV9zZW0gb24gaW5vZGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkcXVvdF9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Byb3RvdHlwZXM6CisJaW50ICgqaW5pdGlhbGl6ZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworCWludCAoKmRyb3ApIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqYWxsb2Nfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCwgaW50KTsKKwlpbnQgKCphbGxvY19pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCpmcmVlX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOworCWludCAoKmZyZWVfaW5vZGUpIChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqdHJhbnNmZXIpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOworCWludCAoKndyaXRlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOworCWludCAoKmFjcXVpcmVfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CisJaW50ICgqcmVsZWFzZV9kcXVvdCkgKHN0cnVjdCBkcXVvdCAqKTsKKwlpbnQgKCptYXJrX2RpcnR5KSAoc3RydWN0IGRxdW90ICopOworCWludCAoKndyaXRlX2luZm8pIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKKworVGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW50ZW5kZWQgdG8gYmUgbW9yZSBvciBsZXNzIHdyYXBwaW5nIGZ1bmN0aW9ucyB0aGF0IGVuc3VyZQorYSBwcm9wZXIgbG9ja2luZyB3cnQgdGhlIGZpbGVzeXN0ZW0gYW5kIGNhbGwgdGhlIGdlbmVyaWMgcXVvdGEgb3BlcmF0aW9ucy4KKworV2hhdCBmaWxlc3lzdGVtIHNob3VsZCBleHBlY3QgZnJvbSB0aGUgZ2VuZXJpYyBxdW90YSBmdW5jdGlvbnM6CisKKwkJRlMgcmVjdXJzaW9uCUhlbGQgbG9ja3Mgd2hlbiBjYWxsZWQKK2luaXRpYWxpemU6CXllcwkJbWF5YmUgZHFvbm9mZl9zZW0KK2Ryb3A6CQl5ZXMJCS0KK2FsbG9jX3NwYWNlOgktPm1hcmtfZGlydHkoKQktCithbGxvY19pbm9kZToJLT5tYXJrX2RpcnR5KCkJLQorZnJlZV9zcGFjZToJLT5tYXJrX2RpcnR5KCkJLQorZnJlZV9pbm9kZToJLT5tYXJrX2RpcnR5KCkJLQordHJhbnNmZXI6CXllcwkJLQord3JpdGVfZHF1b3Q6CXllcwkJZHFvbm9mZl9zZW0gb3IgZHFwdHJfc2VtCithY3F1aXJlX2RxdW90Ogl5ZXMJCWRxb25vZmZfc2VtIG9yIGRxcHRyX3NlbQorcmVsZWFzZV9kcXVvdDoJeWVzCQlkcW9ub2ZmX3NlbSBvciBkcXB0cl9zZW0KK21hcmtfZGlydHk6CW5vCQktCit3cml0ZV9pbmZvOgl5ZXMJCWRxb25vZmZfc2VtCisKK0ZTIHJlY3Vyc2lvbiBtZWFucyBjYWxsaW5nIC0+cXVvdGFfcmVhZCgpIGFuZCAtPnF1b3RhX3dyaXRlKCkgZnJvbSBzdXBlcmJsb2NrCitvcGVyYXRpb25zLgorCistPmFsbG9jX3NwYWNlKCksIC0+YWxsb2NfaW5vZGUoKSwgLT5mcmVlX3NwYWNlKCksIC0+ZnJlZV9pbm9kZSgpIGFyZSBjYWxsZWQKK29ubHkgZGlyZWN0bHkgYnkgdGhlIGZpbGVzeXN0ZW0gYW5kIGRvIG5vdCBjYWxsIGFueSBmcyBmdW5jdGlvbnMgb25seQordGhlIC0+bWFya19kaXJ0eSgpIG9wZXJhdGlvbi4KKworTW9yZSBkZXRhaWxzIGFib3V0IHF1b3RhIGxvY2tpbmcgY2FuIGJlIGZvdW5kIGluIGZzL2RxdW90LmMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB2bV9vcGVyYXRpb25zX3N0cnVjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJvdG90eXBlczoKKwl2b2lkICgqb3Blbikoc3RydWN0IHZtX2FyZWFfc3RydWN0Kik7CisJdm9pZCAoKmNsb3NlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqKTsKKwlzdHJ1Y3QgcGFnZSAqKCpub3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCosIHVuc2lnbmVkIGxvbmcsIGludCAqKTsKKworbG9ja2luZyBydWxlczoKKwkJQktMCW1tYXBfc2VtCitvcGVuOgkJbm8JeWVzCitjbG9zZToJCW5vCXllcworbm9wYWdlOgkJbm8JeWVzCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQlEdWJpb3VzIHN0dWZmCisKKyhpZiB5b3UgYnJlYWsgc29tZXRoaW5nIG9yIG5vdGljZSB0aGF0IGl0IGlzIGJyb2tlbiBhbmQgZG8gbm90IGZpeCBpdCB5b3Vyc2VsZgorLSBhdCBsZWFzdCBwdXQgaXQgaGVyZSkKKworaXBjL3NobS5jOjpzaG1fZGVsZXRlKCkgLSBtYXkgbmVlZCBCS0wuCistPnJlYWQoKSBhbmQgLT53cml0ZSgpIGluIG1hbnkgZHJpdmVycyBhcmUgKHByb2JhYmx5KSBtaXNzaW5nIEJLTC4KK2RyaXZlcnMvc2dpL2NoYXIvZ3JhcGhpY3MuYzo6c2dpX2dyYXBoaWNzX25vcGFnZSgpIC0gbWF5IG5lZWQgQktMLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWRmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwYWJiMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWRmcy50eHQKQEAgLTAsMCArMSw1NyBAQAorTW91bnQgb3B0aW9ucyBmb3IgQURGUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIHVpZD1ubm4JQWxsIGZpbGVzIGluIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBvd25lZCBieQorCQl1c2VyIGlkIG5ubi4gIERlZmF1bHQgMCAocm9vdCkuCisgIGdpZD1ubm4JQWxsIGZpbGVzIGluIHRoZSBwYXJ0aXRpb24gd2lsbGJlIGluIGdyb3VwCisJCW5ubi4gIERlZmF1bHQgMCAocm9vdCkuCisgIG93bm1hc2s9bm5uCVRoZSBwZXJtaXNzaW9uIG1hc2sgZm9yIEFERlMgJ293bmVyJyBwZXJtaXNzaW9ucworCQl3aWxsIGJlIG5ubi4gIERlZmF1bHQgMDcwMC4KKyAgb3RobWFzaz1ubm4JVGhlIHBlcm1pc3Npb24gbWFzayBmb3IgQURGUyAnb3RoZXInIHBlcm1pc3Npb25zCisJCXdpbGwgYmUgbm5uLiAgRGVmYXVsdCAwMDc3LgorCitNYXBwaW5nIG9mIEFERlMgcGVybWlzc2lvbnMgdG8gTGludXggcGVybWlzc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEFERlMgcGVybWlzc2lvbnMgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nOgorCisJT3duZXIgcmVhZAorCU93bmVyIHdyaXRlCisJT3RoZXIgcmVhZAorCU90aGVyIHdyaXRlCisKKyAgKEluIG9sZGVyIHZlcnNpb25zLCBhbiAnZXhlY3V0ZScgcGVybWlzc2lvbiBkaWQgZXhpc3QsIGJ1dCB0aGlzCisgICBkb2VzIG5vdCBob2xkIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlIExpbnV4ICdleGVjdXRlJyBwZXJtaXNzaW9uCisgICBhbmQgaXMgbm93IG9ic29sZXRlKS4KKworICBUaGUgbWFwcGluZyBpcyBwZXJmb3JtZWQgYXMgZm9sbG93czoKKworCU93bmVyIHJlYWQJCQkJLT4gLXItLXItLXItLQorCU93bmVyIHdyaXRlCQkJCS0+IC0tdy0tdy0tLXcKKwlPd25lciByZWFkIGFuZCBmaWxldHlwZSBVbml4RXhlYwktPiAtLS14LS14LS14CisgICAgVGhlc2UgYXJlIHRoZW4gbWFza2VkIGJ5IG93bm1hc2ssIGVnIDcwMAktPiAtcnd4LS0tLS0tCisJUG9zc2libGUgb3duZXIgbW9kZSBwZXJtaXNzaW9ucwkJLT4gLXJ3eC0tLS0tLQorCisJT3RoZXIgcmVhZAkJCQktPiAtci0tci0tci0tCisJT3RoZXIgd3JpdGUJCQkJLT4gLS13LS13LS13LQorCU90aGVyIHJlYWQgYW5kIGZpbGV0eXBlIFVuaXhFeGVjCS0+IC0tLXgtLXgtLXgKKyAgICBUaGVzZSBhcmUgdGhlbiBtYXNrZWQgYnkgb3RobWFzaywgZWcgMDc3CS0+IC0tLS1yd3hyd3gKKwlQb3NzaWJsZSBvdGhlciBtb2RlIHBlcm1pc3Npb25zCQktPiAtLS0tcnd4cnd4CisKKyAgSGVuY2UsIHdpdGggdGhlIGRlZmF1bHQgbWFza3MsIGlmIGEgZmlsZSBpcyBvd25lciByZWFkL3dyaXRlLCBhbmQKKyAgbm90IGEgVW5peEV4ZWMgZmlsZXR5cGUsIHRoZW4gdGhlIHBlcm1pc3Npb25zIHdpbGwgYmU6CisKKwkJCS1ydy0tLS0tLS0KKworICBIb3dldmVyLCBpZiB0aGUgbWFza3Mgd2VyZSBvd25tYXNrPTA3NzAsb3RobWFzaz0wMDA3LCB0aGVuIHRoaXMgd291bGQKKyAgYmUgbW9kaWZpZWQgdG86CisJCQktcnctcnctLS0tCisKKyAgVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gd2hhdCB5b3UgY2FuIGRvIHdpdGggdGhlc2UgbWFza3MuICBZb3UgbWF5CisgIHdpc2ggdGhhdCBlaXRoZXIgcmVhZCBiaXRzIGdpdmUgcmVhZCBhY2Nlc3MgdG8gdGhlIGZpbGUgZm9yIGFsbCwgYnV0CisgIGtlZXAgdGhlIGRlZmF1bHQgd3JpdGUgcHJvdGVjdGlvbiAob3dubWFzaz0wNzU1LG90aG1hc2s9MDU3Nyk6CisKKwkJCS1ydy1yLS1yLS0KKworICBZb3UgY2FuIHRoZXJlZm9yZSB0YWlsb3IgdGhlIHBlcm1pc3Npb24gdHJhbnNsYXRpb24gdG8gd2hhdGV2ZXIgeW91CisgIGRlc2lyZSB0aGUgcGVybWlzc2lvbnMgc2hvdWxkIGJlIHVuZGVyIExpbnV4LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjOTczOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZmcy50eHQKQEAgLTAsMCArMSwyMTkgQEAKK092ZXJ2aWV3IG9mIEFtaWdhIEZpbGVzeXN0ZW1zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3QgYWxsIHZhcmlldGllcyBvZiB0aGUgQW1pZ2EgZmlsZXN5c3RlbXMgYXJlIHN1cHBvcnRlZCBmb3IgcmVhZGluZyBhbmQKK3dyaXRpbmcuIFRoZSBBbWlnYSBjdXJyZW50bHkga25vd3Mgc2l4IGRpZmZlcmVudCBmaWxlc3lzdGVtczoKKworRE9TXDAJCVRoZSBvbGQgb3Igb3JpZ2luYWwgZmlsZXN5c3RlbSwgbm90IHJlYWxseSBzdWl0ZWQgZm9yCisJCWhhcmQgZGlza3MgYW5kIG5vcm1hbGx5IG5vdCB1c2VkIG9uIHRoZW0sIGVpdGhlci4KKwkJU3VwcG9ydGVkIHJlYWQvd3JpdGUuCisKK0RPU1wxCQlUaGUgb3JpZ2luYWwgRmFzdCBGaWxlIFN5c3RlbS4gU3VwcG9ydGVkIHJlYWQvd3JpdGUuCisKK0RPU1wyCQlUaGUgb2xkICJpbnRlcm5hdGlvbmFsIiBmaWxlc3lzdGVtLiBJbnRlcm5hdGlvbmFsIG1lYW5zIHRoYXQKKwkJYSBidWcgaGFzIGJlZW4gZml4ZWQgc28gdGhhdCBhY2NlbnRlZCAoImludGVybmF0aW9uYWwiKSBsZXR0ZXJzCisJCWluIGZpbGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFzIHRoZXkgb3VnaHQgdG8gYmUuCisJCVN1cHBvcnRlZCByZWFkL3dyaXRlLgorCitET1NcMwkJVGhlICJpbnRlcm5hdGlvbmFsIiBGYXN0IEZpbGUgU3lzdGVtLiAgU3VwcG9ydGVkIHJlYWQvd3JpdGUuCisKK0RPU1w0CQlUaGUgb3JpZ2luYWwgZmlsZXN5c3RlbSB3aXRoIGRpcmVjdG9yeSBjYWNoZS4gVGhlIGRpcmVjdG9yeQorCQljYWNoZSBzcGVlZHMgdXAgZGlyZWN0b3J5IGFjY2Vzc2VzIG9uIGZsb3BwaWVzIGNvbnNpZGVyYWJseSwKKwkJYnV0IHNsb3dzIGRvd24gZmlsZSBjcmVhdGlvbi9kZWxldGlvbi4gRG9lc24ndCBtYWtlIG11Y2gKKwkJc2Vuc2Ugb24gaGFyZCBkaXNrcy4gU3VwcG9ydGVkIHJlYWQgb25seS4KKworRE9TXDUJCVRoZSBGYXN0IEZpbGUgU3lzdGVtIHdpdGggZGlyZWN0b3J5IGNhY2hlLiBTdXBwb3J0ZWQgcmVhZCBvbmx5LgorCitBbGwgb2YgdGhlIGFib3ZlIGZpbGVzeXN0ZW1zIGFsbG93IGJsb2NrIHNpemVzIGZyb20gNTEyIHRvIDMySyBieXRlcy4KK1N1cHBvcnRlZCBibG9jayBzaXplcyBhcmU6IDUxMiwgMTAyNCwgMjA0OCBhbmQgNDA5NiBieXRlcy4gTGFyZ2VyIGJsb2Nrcworc3BlZWQgdXAgYWxtb3N0IGV2ZXJ5dGhpbmcgYXQgdGhlIGV4cGVuc2Ugb2Ygd2FzdGVkIGRpc2sgc3BhY2UuIFRoZSBzcGVlZAorZ2FpbiBhYm92ZSA0SyBzZWVtcyBub3QgcmVhbGx5IHdvcnRoIHRoZSBwcmljZSwgc28geW91IGRvbid0IGxvc2UgdG9vCittdWNoIGhlcmUsIGVpdGhlci4KKworVGhlIG11RlMgKG11bHRpIHVzZXIgRmlsZSBTeXN0ZW0pIGVxdWl2YWxlbnRzIG9mIHRoZSBhYm92ZSBmaWxlIHN5c3RlbXMKK2FyZSBzdXBwb3J0ZWQsIHRvby4KKworTW91bnQgb3B0aW9ucyBmb3IgdGhlIEFGRlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3Byb3RlY3QJCUlmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHByb3RlY3Rpb24gYml0cyBjYW5ub3QgYmUgYWx0ZXJlZC4KKworc2V0dWlkWz11aWRdCVRoaXMgc2V0cyB0aGUgb3duZXIgb2YgYWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUgZmlsZQorCQlzeXN0ZW0gdG8gdWlkIG9yIHRoZSB1aWQgb2YgdGhlIGN1cnJlbnQgdXNlciwgcmVzcGVjdGl2ZWx5LgorCitzZXRnaWRbPWdpZF0JU2FtZSBhcyBhYm92ZSwgYnV0IGZvciBnaWQuCisKK21vZGU9bW9kZQlTZXRzIHRoZSBtb2RlIGZsYWdzIHRvIHRoZSBnaXZlbiAob2N0YWwpIHZhbHVlLCByZWdhcmRsZXNzCisJCW9mIHRoZSBvcmlnaW5hbCBwZXJtaXNzaW9ucy4gRGlyZWN0b3JpZXMgd2lsbCBnZXQgYW4geAorCQlwZXJtaXNzaW9uIGlmIHRoZSBjb3JyZXNwb25kaW5nIHIgYml0IGlzIHNldC4KKwkJVGhpcyBpcyB1c2VmdWwgc2luY2UgbW9zdCBvZiB0aGUgcGxhaW4gQW1pZ2FPUyBmaWxlcworCQl3aWxsIG1hcCB0byA2MDAuCisKK3Jlc2VydmVkPW51bQlTZXRzIHRoZSBudW1iZXIgb2YgcmVzZXJ2ZWQgYmxvY2tzIGF0IHRoZSBzdGFydCBvZiB0aGUKKwkJcGFydGl0aW9uIHRvIG51bS4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRoaXMgb3B0aW9uLgorCQlEZWZhdWx0IGlzIDIuCisKK3Jvb3Q9YmxvY2sJU2V0cyB0aGUgYmxvY2sgbnVtYmVyIG9mIHRoZSByb290IGJsb2NrLiBUaGlzIHNob3VsZCBuZXZlcgorCQliZSBuZWNlc3NhcnkuCisKK2JzPWJsa3NpemUJU2V0cyB0aGUgYmxvY2tzaXplIHRvIGJsa3NpemUuIFZhbGlkIGJsb2NrIHNpemVzIGFyZSA1MTIsCisJCTEwMjQsIDIwNDggYW5kIDQwOTYuIExpa2UgdGhlIHJvb3Qgb3B0aW9uLCB0aGlzIHNob3VsZAorCQluZXZlciBiZSBuZWNlc3NhcnksIGFzIHRoZSBhZmZzIGNhbiBmaWd1cmUgaXQgb3V0IGl0c2VsZi4KKworcXVpZXQJCVRoZSBmaWxlIHN5c3RlbSB3aWxsIG5vdCByZXR1cm4gYW4gZXJyb3IgZm9yIGRpc2FsbG93ZWQKKwkJbW9kZSBjaGFuZ2VzLgorCit2ZXJib3NlCQlUaGUgdm9sdW1lIG5hbWUsIGZpbGUgc3lzdGVtIHR5cGUgYW5kIGJsb2NrIHNpemUgd2lsbAorCQliZSB3cml0dGVuIHRvIHRoZSBzeXNsb2cgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLgorCittdWZzCQlUaGUgZmlsZXN5c3RlbSBpcyByZWFsbHkgYSBtdUZTLCBhbHNvIGl0IGRvZXNuJ3QKKwkJaWRlbnRpZnkgaXRzZWxmIGFzIG9uZS4gVGhpcyBvcHRpb24gaXMgbmVjZXNzYXJ5IGlmCisJCXRoZSBmaWxlc3lzdGVtIHdhc24ndCBmb3JtYXR0ZWQgYXMgbXVGUywgYnV0IGlzIHVzZWQKKwkJYXMgb25lLgorCitwcmVmaXg9cGF0aAlQYXRoIHdpbGwgYmUgcHJlZml4ZWQgdG8gZXZlcnkgYWJzb2x1dGUgcGF0aCBuYW1lIG9mCisJCXN5bWJvbGljIGxpbmtzIG9uIGFuIEFGRlMgcGFydGl0aW9uLiBEZWZhdWx0ID0gIi8iLgorCQkoU2VlIGJlbG93LikKKwordm9sdW1lPW5hbWUJV2hlbiBzeW1ib2xpYyBsaW5rcyB3aXRoIGFuIGFic29sdXRlIHBhdGggYXJlIGNyZWF0ZWQKKwkJb24gYW4gQUZGUyBwYXJ0aXRpb24sIG5hbWUgd2lsbCBiZSBwcmVwZW5kZWQgYXMgdGhlCisJCXZvbHVtZSBuYW1lLiBEZWZhdWx0ID0gIiIgKGVtcHR5IHN0cmluZykuCisJCShTZWUgYmVsb3cuKQorCitIYW5kbGluZyBvZiB0aGUgVXNlcnMvR3JvdXBzIGFuZCBwcm90ZWN0aW9uIGZsYWdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FtaWdhIC0+IExpbnV4OgorCitUaGUgQW1pZ2EgcHJvdGVjdGlvbiBmbGFncyBSV0VEUldFREhTUEFSV0VEIGFyZSBoYW5kbGVkIGFzIGZvbGxvd3M6CisKKyAgLSBSIG1hcHMgdG8gciBmb3IgdXNlciwgZ3JvdXAgYW5kIG90aGVycy4gT24gZGlyZWN0b3JpZXMsIFIgaW1wbGllcyB4LgorCisgIC0gSWYgYm90aCBXIGFuZCBEIGFyZSBhbGxvd2VkLCB3IHdpbGwgYmUgc2V0LgorCisgIC0gRSBtYXBzIHRvIHguCisKKyAgLSBIIGFuZCBQIGFyZSBhbHdheXMgcmV0YWluZWQgYW5kIGlnbm9yZWQgdW5kZXIgTGludXguCisKKyAgLSBBIGlzIGFsd2F5cyByZXNldCB3aGVuIGEgZmlsZSBpcyB3cml0dGVuIHRvLgorCitVc2VyIGlkIGFuZCBncm91cCBpZCB3aWxsIGJlIHVzZWQgdW5sZXNzIHNldFtndV1pZCBhcmUgZ2l2ZW4gYXMgbW91bnQKK29wdGlvbnMuIFNpbmNlIG1vc3Qgb2YgdGhlIEFtaWdhIGZpbGUgc3lzdGVtcyBhcmUgc2luZ2xlIHVzZXIgc3lzdGVtcwordGhleSB3aWxsIGJlIG93bmVkIGJ5IHJvb3QuIFRoZSByb290IGRpcmVjdG9yeSAodGhlIG1vdW50IHBvaW50KSBvZiB0aGUKK0FtaWdhIGZpbGVzeXN0ZW0gd2lsbCBiZSBvd25lZCBieSB0aGUgdXNlciB3aG8gYWN0dWFsbHkgbW91bnRzIHRoZQorZmlsZXN5c3RlbSAodGhlIHJvb3QgZGlyZWN0b3J5IGRvZXNuJ3QgaGF2ZSB1aWQvZ2lkIGZpZWxkcykuCisKK0xpbnV4IC0+IEFtaWdhOgorCitUaGUgTGludXggcnd4cnd4cnd4IGZpbGUgbW9kZSBpcyBoYW5kbGVkIGFzIGZvbGxvd3M6CisKKyAgLSByIHBlcm1pc3Npb24gd2lsbCBzZXQgUiBmb3IgdXNlciwgZ3JvdXAgYW5kIG90aGVycy4KKworICAtIHcgcGVybWlzc2lvbiB3aWxsIHNldCBXIGFuZCBEIGZvciB1c2VyLCBncm91cCBhbmQgb3RoZXJzLgorCisgIC0geCBwZXJtaXNzaW9uIG9mIHRoZSB1c2VyIHdpbGwgc2V0IEUgZm9yIHBsYWluIGZpbGVzLgorCisgIC0gQWxsIG90aGVyIGZsYWdzIChzdWlkLCBzZ2lkLCAuLi4pIGFyZSBpZ25vcmVkIGFuZCB3aWxsCisgICAgbm90IGJlIHJldGFpbmVkLgorICAgIAorTmV3bHkgY3JlYXRlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2lsbCBnZXQgdGhlIHVzZXIgYW5kIGdyb3VwIElECitvZiB0aGUgY3VycmVudCB1c2VyIGFuZCBhIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSB1bWFzay4KKworU3ltYm9saWMgbGlua3MKKz09PT09PT09PT09PT09CisKK0FsdGhvdWdoIHRoZSBBbWlnYSBhbmQgTGludXggZmlsZSBzeXN0ZW1zIHJlc2VtYmxlIGVhY2ggb3RoZXIsIHRoZXJlCithcmUgc29tZSwgbm90IGFsd2F5cyBzdWJ0bGUsIGRpZmZlcmVuY2VzLiBPbmUgb2YgdGhlbSBiZWNvbWVzIGFwcGFyZW50Cit3aXRoIHN5bWJvbGljIGxpbmtzLiBXaGlsZSBMaW51eCBoYXMgYSBmaWxlIHN5c3RlbSB3aXRoIGV4YWN0bHkgb25lCityb290IGRpcmVjdG9yeSwgdGhlIEFtaWdhIGhhcyBhIHNlcGFyYXRlIHJvb3QgZGlyZWN0b3J5IGZvciBlYWNoCitmaWxlIHN5c3RlbSAoZm9yIGV4YW1wbGUsIHBhcnRpdGlvbiwgZmxvcHB5IGRpc2ssIC4uLikuIFdpdGggdGhlIEFtaWdhLAordGhlc2UgZW50aXRpZXMgYXJlIGNhbGxlZCAidm9sdW1lcyIuIFRoZXkgaGF2ZSBzeW1ib2xpYyBuYW1lcyB3aGljaAorY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZW0uIFRodXMsIHN5bWJvbGljIGxpbmtzIGNhbiBwb2ludCB0byBhCitkaWZmZXJlbnQgdm9sdW1lLiBBRkZTIHR1cm5zIHRoZSB2b2x1bWUgbmFtZSBpbnRvIGEgZGlyZWN0b3J5IG5hbWUKK2FuZCBwcmVwZW5kcyB0aGUgcHJlZml4IHBhdGggKHNlZSBwcmVmaXggb3B0aW9uKSB0byBpdC4KKworRXhhbXBsZToKK1lvdSBtb3VudCBhbGwgeW91ciBBbWlnYSBwYXJ0aXRpb25zIHVuZGVyIC9hbWlnYS88dm9sdW1lPiAod2hlcmUKKzx2b2x1bWU+IGlzIHRoZSBuYW1lIG9mIHRoZSB2b2x1bWUpLCBhbmQgeW91IGdpdmUgdGhlIG9wdGlvbgorInByZWZpeD0vYW1pZ2EvIiB3aGVuIG1vdW50aW5nIGFsbCB5b3VyIEFGRlMgcGFydGl0aW9ucy4gKFRoZXkKK21pZ2h0IGJlICJVc2VyIiwgIldCIiBhbmQgIkdyYXBoaWNzIiwgdGhlIG1vdW50IHBvaW50cyAvYW1pZ2EvVXNlciwKKy9hbWlnYS9XQiBhbmQgL2FtaWdhL0dyYXBoaWNzKS4gQSBzeW1ib2xpYyBsaW5rIHJlZmVycmluZyB0bworIlVzZXI6c2MvaW5jbHVkZS9kb3MvZG9zLmgiIHdpbGwgYmUgZm9sbG93ZWQgdG8KKyIvYW1pZ2EvVXNlci9zYy9pbmNsdWRlL2Rvcy9kb3MuaCIuCisKK0V4YW1wbGVzCis9PT09PT09PQorCitDb21tYW5kIGxpbmU6CisgICAgbW91bnQgIEFyY2hpdmUvQW1pZ2EvV29ya2JlbmNoMy4xLmFkZiAvbW50IC10IGFmZnMgLW8gbG9vcCx2ZXJib3NlCisgICAgbW91bnQgIC9kZXYvc2RhMyAvQW1pZ2EgLXQgYWZmcworCisvZXRjL2ZzdGFiIGVudHJ5OgorICAgIC9kZXYvc2RiNQkvYW1pZ2EvV29ya2JlbmNoICAgIGFmZnMgICAgbm9hdXRvLHVzZXIsZXhlYyx2ZXJib3NlIDAgMAorCitJTVBPUlRBTlQgTk9URQorPT09PT09PT09PT09PT0KKworSWYgeW91IGJvb3QgV2luZG93cyA5NSAoZG9uJ3Qga25vdyBhYm91dCAzLngsIDk4IGFuZCBOVCkgd2hpbGUgeW91CitoYXZlIGFuIEFtaWdhIGhhcmRkaXNrIGNvbm5lY3RlZCB0byB5b3VyIFBDLCBpdCB3aWxsIG92ZXJ3cml0ZQordGhlIGJ5dGVzIDB4MDBkYy4uMHgwMGRmIG9mIGJsb2NrIDAgd2l0aCBnYXJiYWdlLCB0aHVzIGludmFsaWRhdGluZwordGhlIFJpZ2lkIERpc2sgQmxvY2suIFNoZWVyIGx1Y2sgaGFzIGl0IHRoYXQgdGhpcyBpcyBhbiB1bnVzZWQKK2FyZWEgb2YgdGhlIFJEQiwgc28gb25seSB0aGUgY2hlY2tzdW0gZG9lc24ndCBtYXRjaCBhbnltb3JlLgorTGludXggd2lsbCBpZ25vcmUgdGhpcyBnYXJiYWdlIGFuZCByZWNvZ25pemUgdGhlIFJEQiBhbnl3YXksIGJ1dAorYmVmb3JlIHlvdSBjb25uZWN0IHRoYXQgZHJpdmUgdG8geW91ciBBbWlnYSBhZ2FpbiwgeW91IG11c3QKK3Jlc3RvcmUgb3IgcmVwYWlyIHlvdXIgUkRCLiBTbyBwbGVhc2UgZG8gbWFrZSBhIGJhY2t1cCBjb3B5IG9mIGl0CitiZWZvcmUgYm9vdGluZyBXaW5kb3dzIQorCitJZiB0aGUgZGFtYWdlIGlzIGFscmVhZHkgZG9uZSwgdGhlIGZvbGxvd2luZyBzaG91bGQgZml4IHRoZSBSREIKKyh3aGVyZSA8ZGlzaz4gaXMgdGhlIGRldmljZSBuYW1lKS4KK0RPIEFUIFlPVVIgT1dOIFJJU0s6CisKKyAgZGQgaWY9L2Rldi88ZGlzaz4gb2Y9cmRiLnRtcCBjb3VudD0xCisgIGNwIHJkYi50bXAgcmRiLmZpeGVkCisgIGRkIGlmPS9kZXYvemVybyBvZj1yZGIuZml4ZWQgYnM9MSBzZWVrPTIyMCBjb3VudD00CisgIGRkIGlmPXJkYi5maXhlZCBvZj0vZGV2LzxkaXNrPgorCitCdWdzLCBSZXN0cmljdGlvbnMsIENhdmVhdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitRdWl0ZSBhIGZldyB0aGluZ3MgbWF5IG5vdCB3b3JrIGFzIGFkdmVydGlzZWQuIE5vdCBldmVyeXRoaW5nIGlzCit0ZXN0ZWQsIHRob3VnaCBzZXZlcmFsIGh1bmRyZWQgTUIgaGF2ZSBiZWVuIHJlYWQgYW5kIHdyaXR0ZW4gdXNpbmcKK3RoaXMgZnMuIEZvciBhIG1vc3QgdXAtdG8tZGF0ZSBsaXN0IG9mIGJ1Z3MgcGxlYXNlIGNvbnN1bHQKK2ZzL2FmZnMvQ2hhbmdlcy4KKworRmlsZW5hbWVzIGFyZSB0cnVuY2F0ZWQgdG8gMzAgY2hhcmFjdGVycyB3aXRob3V0IHdhcm5pbmcgKHRoaXMKK2NhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGNvbXBpbGUtdGltZSBvcHRpb24gQUZGU19OT19UUlVOQ0FURQoraW4gaW5jbHVkZS9saW51eC9hbWlnYWZmcy5oKS4KKworQ2FzZSBpcyBpZ25vcmVkIGJ5IHRoZSBhZmZzIGluIGZpbGVuYW1lIG1hdGNoaW5nLCBidXQgTGludXggc2hlbGxzCitkbyBjYXJlIGFib3V0IHRoZSBjYXNlLiBFeGFtcGxlICh3aXRoIC93YiBiZWluZyBhbiBhZmZzIG1vdW50ZWQgZnMpOgorICAgIHJtIC93Yi9XUk9OR0NBU0UKK3dpbGwgcmVtb3ZlIC9tbnQvd3JvbmdjYXNlLCBidXQKKyAgICBybSAvd2IvV1IqCit3aWxsIG5vdCBzaW5jZSB0aGUgbmFtZXMgYXJlIG1hdGNoZWQgYnkgdGhlIHNoZWxsLgorCitUaGUgYmxvY2sgYWxsb2NhdGlvbiBpcyBkZXNpZ25lZCBmb3IgaGFyZCBkaXNrIHBhcnRpdGlvbnMuIElmIG1vcmUKK3RoYW4gMSBwcm9jZXNzIHdyaXRlcyB0byBhIChzbWFsbCkgZGlza2V0dGUsIHRoZSBibG9ja3MgYXJlIGFsbG9jYXRlZAoraW4gYW4gdWdseSB3YXkgKGJ1dCB0aGUgcmVhbCBBRkZTIGRvZXNuJ3QgZG8gbXVjaCBiZXR0ZXIpLiBUaGlzCitpcyBhbHNvIHRydWUgd2hlbiBzcGFjZSBnZXRzIHRpZ2h0LgorCitZb3UgY2Fubm90IGV4ZWN1dGUgcHJvZ3JhbXMgb24gYW4gT0ZTIChPbGQgRmlsZSBTeXN0ZW0pLCBzaW5jZSB0aGUKK3Byb2dyYW0gZmlsZXMgY2Fubm90IGJlIG1lbW9yeSBtYXBwZWQgZHVlIHRvIHRoZSA0ODggYnl0ZSBibG9ja3MuCitGb3IgdGhlIHNhbWUgcmVhc29uIHlvdSBjYW5ub3QgbW91bnQgYW4gaW1hZ2Ugb24gc3VjaCBhIGZpbGVzeXN0ZW0KK3ZpYSB0aGUgbG9vcGJhY2sgZGV2aWNlLgorCitUaGUgYml0bWFwIHZhbGlkIGZsYWcgaW4gdGhlIHJvb3QgYmxvY2sgbWF5IG5vdCBiZSBhY2N1cmF0ZSB3aGVuIHRoZQorc3lzdGVtIGNyYXNoZXMgd2hpbGUgYW4gYWZmcyBwYXJ0aXRpb24gaXMgbW91bnRlZC4gVGhlcmUncyBjdXJyZW50bHkKK25vIHdheSB0byBmaXggYSBnYXJibGVkIGZpbGVzeXN0ZW0gd2l0aG91dCBhbiBBbWlnYSAoZGlzayB2YWxpZGF0b3IpCitvciBtYW51YWxseSAod2hvIHdvdWxkIGRvIHRoaXM/KS4gTWF5YmUgbGF0ZXIuCisKK0lmIHlvdSBtb3VudCBhZmZzIHBhcnRpdGlvbnMgb24gc3lzdGVtIHN0YXJ0dXAsIHlvdSBtYXkgd2FudCB0byB0ZWxsCitmc2NrIHRoYXQgdGhlIGZzIHNob3VsZCBub3QgYmUgY2hlY2tlZCAocGxhY2UgYSAnMCcgaW4gdGhlIHNpeHRoIGZpZWxkCitvZiAvZXRjL2ZzdGFiKS4KKworSXQncyBub3QgcG9zc2libGUgdG8gcmVhZCBmbG9wcHkgZGlza3Mgd2l0aCBhIG5vcm1hbCBQQyBvciB3b3Jrc3RhdGlvbgorZHVlIHRvIGFuIGluY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBBbWlnYSBmbG9wcHkgY29udHJvbGxlci4KKworSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGFuIEFtaWdhIEVtdWxhdG9yIGZvciBMaW51eCwgbG9vayBhdAorCitodHRwOi8vd3d3LXVzZXJzLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGUvfmNydXgvdWFlLmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQyMzdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMudHh0CkBAIC0wLDAgKzEsMTU1IEBACisJCQkgICAgIGtBRlM6IEFGUyBGSUxFU1lTVEVNCisJCQkgICAgID09PT09PT09PT09PT09PT09PT09CisKK0FCT1VUCis9PT09PQorCitUaGlzIGZpbGVzeXN0ZW0gcHJvdmlkZXMgYSBmYWlybHkgc2ltcGxlIEFGUyBmaWxlc3lzdGVtIGRyaXZlci4gSXQgaXMgdW5kZXIKK2RldmVsb3BtZW50IGFuZCBvbmx5IHByb3ZpZGVzIHZlcnkgYmFzaWMgZmFjaWxpdGllcy4gSXQgZG9lcyBub3QgeWV0IHN1cHBvcnQKK3RoZSBmb2xsb3dpbmcgQUZTIGZlYXR1cmVzOgorCisJKCopIFdyaXRlIHN1cHBvcnQuCisJKCopIENvbW11bmljYXRpb25zIHNlY3VyaXR5LgorCSgqKSBMb2NhbCBjYWNoaW5nLgorCSgqKSBwaW9jdGwoKSBzeXN0ZW0gY2FsbC4KKwkoKikgQXV0b21hdGljIG1vdW50aW5nIG9mIGVtYmVkZGVkIG1vdW50cG9pbnRzLgorCisKK1VTQUdFCis9PT09PQorCitXaGVuIGluc2VydGluZyB0aGUgZHJpdmVyIG1vZHVsZXMgdGhlIHJvb3QgY2VsbCBtdXN0IGJlIHNwZWNpZmllZCBhbG9uZyB3aXRoIGEKK2xpc3Qgb2Ygdm9sdW1lIGxvY2F0aW9uIHNlcnZlciBJUCBhZGRyZXNzZXM6CisKKwlpbnNtb2QgcnhycGMubworCWluc21vZCBrYWZzLm8gcm9vdGNlbGw9Y2FtYnJpZGdlLnJlZGhhdC5jb206MTcyLjE2LjE4LjczOjE3Mi4xNi4xOC45MQorCitUaGUgZmlyc3QgbW9kdWxlIGlzIGEgZHJpdmVyIGZvciB0aGUgUnhSUEMgcmVtb3RlIG9wZXJhdGlvbiBwcm90b2NvbCwgYW5kIHRoZQorc2Vjb25kIGlzIHRoZSBhY3R1YWwgZmlsZXN5c3RlbSBkcml2ZXIgZm9yIHRoZSBBRlMgZmlsZXN5c3RlbS4KKworT25jZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZCwgbW9yZSBtb2R1bGVzIGNhbiBiZSBhZGRlZCBieSB0aGUgZm9sbG93aW5nCitwcm9jZWR1cmU6CisKKwllY2hvIGFkZCBncmFuZC5jZW50cmFsLm9yZyAxOC43LjE0Ljg4OjEyOC4yLjE5MS4yMjQgPi9wcm9jL2ZzL2Fmcy9jZWxscworCitXaGVyZSB0aGUgcGFyYW1ldGVycyB0byB0aGUgImFkZCIgY29tbWFuZCBhcmUgdGhlIG5hbWUgb2YgYSBjZWxsIGFuZCBhIGxpc3Qgb2YKK3ZvbHVtZSBsb2NhdGlvbiBzZXJ2ZXJzIHdpdGhpbiB0aGF0IGNlbGwuCisKK0ZpbGVzeXN0ZW1zIGNhbiBiZSBtb3VudGVkIGFueXdoZXJlIGJ5IGNvbW1hbmRzIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworCW1vdW50IC10IGFmcyAiJWNhbWJyaWRnZS5yZWRoYXQuY29tOnJvb3QuYWZzLiIgL2FmcworCW1vdW50IC10IGFmcyAiI2NhbWJyaWRnZS5yZWRoYXQuY29tOnJvb3QuY2VsbC4iIC9hZnMvY2FtYnJpZGdlCisJbW91bnQgLXQgYWZzICIjcm9vdC5hZnMuIiAvYWZzCisJbW91bnQgLXQgYWZzICIjcm9vdC5jZWxsLiIgL2Fmcy9jYW1icmlkZ2UKKworICBOQjogV2hlbiB1c2luZyB0aGlzIG9uIExpbnV4IDIuNCwgdGhlIG1vdW50IGNvbW1hbmQgaGFzIHRvIGJlIGRpZmZlcmVudCwKKyAgICAgIHNpbmNlIHRoZSBmaWxlc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGRldmljZSBuYW1lIGFyZ3VtZW50OgorCisJbW91bnQgLXQgYWZzIG5vbmUgL2FmcyAtb3ZvbD0iI3Jvb3QuYWZzLiIKKworV2hlcmUgdGhlIGluaXRpYWwgY2hhcmFjdGVyIGlzIGVpdGhlciBhIGhhc2ggb3IgYSBwZXJjZW50IHN5bWJvbCBkZXBlbmRpbmcgb24KK3doZXRoZXIgeW91IGRlZmluaXRlbHkgd2FudCBhIFIvVyB2b2x1bWUgKGhhc2gpIG9yIHdoZXRoZXIgeW91J2QgcHJlZmVyIGEgUi9PCit2b2x1bWUsIGJ1dCBhcmUgd2lsbGluZyB0byB1c2UgYSBSL1cgdm9sdW1lIGluc3RlYWQgKHBlcmNlbnQpLgorCitUaGUgbmFtZSBvZiB0aGUgdm9sdW1lIGNhbiBiZSBzdWZmaXhlcyB3aXRoICIuYmFja3VwIiBvciAiLnJlYWRvbmx5IiB0bworc3BlY2lmeSBjb25uZWN0aW9uIHRvIG9ubHkgdm9sdW1lcyBvZiB0aG9zZSB0eXBlcy4KKworVGhlIG5hbWUgb2YgdGhlIGNlbGwgaXMgb3B0aW9uYWwsIGFuZCBpZiBub3QgZ2l2ZW4gZHVyaW5nIGEgbW91bnQsIHRoZW4gdGhlCituYW1lZCB2b2x1bWUgd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhlIGNlbGwgc3BlY2lmaWVkIGR1cmluZyBpbnNtb2QuCisKK0FkZGl0aW9uYWwgY2VsbHMgY2FuIGJlIGFkZGVkIHRocm91Z2ggL3Byb2MgKHNlZSBsYXRlciBzZWN0aW9uKS4KKworCitNT1VOVFBPSU5UUworPT09PT09PT09PT0KKworQUZTIGhhcyBhIGNvbmNlcHQgb2YgbW91bnRwb2ludHMuIFRoZXNlIGFyZSBzcGVjaWFsbHkgZm9ybWF0dGVkIHN5bWJvbGljIGxpbmtzCisob2YgdGhlIHNhbWUgZm9ybSBhcyB0aGUgImRldmljZSBuYW1lIiBwYXNzZWQgdG8gbW91bnQpLiBrQUZTIHByZXNlbnRzIHRoZXNlCit0byB0aGUgdXNlciBhcyBkaXJlY3RvcmllcyB0aGF0IGhhdmUgc3BlY2lhbCBwcm9wZXJ0aWVzOgorCisgICgqKSBUaGV5IGNhbm5vdCBiZSBsaXN0ZWQuIFJ1bm5pbmcgYSBwcm9ncmFtIGxpa2UgImxzIiBvbiB0aGVtIHdpbGwgaW5jdXIgYW4KKyAgICAgIEVSRU1PVEUgZXJyb3IgKE9iamVjdCBpcyByZW1vdGUpLgorCisgICgqKSBPdGhlciBvYmplY3RzIGNhbid0IGJlIGxvb2tlZCB1cCBpbnNpZGUgb2YgdGhlbS4gVGhpcyBhbHNvIGluY3VycyBhbgorICAgICAgRVJFTU9URSBlcnJvci4KKworICAoKikgVGhleSBjYW4gYmUgcXVlcmllZCB3aXRoIHRoZSByZWFkbGluaygpIHN5c3RlbSBjYWxsLCB3aGljaCB3aWxsIHJldHVybgorICAgICAgdGhlIG5hbWUgb2YgdGhlIG1vdW50cG9pbnQgdG8gd2hpY2ggdGhleSBwb2ludC4gVGhlICJyZWFkbGluayIgcHJvZ3JhbQorICAgICAgd2lsbCBhbHNvIHdvcmsuCisKKyAgKCopIFRoZXkgY2FuIGJlIG1vdW50ZWQgb24gKHdoaWNoIHN5bWJvbGljIGxpbmtzIGNhbid0KS4KKworCitQUk9DIEZJTEVTWVNURU0KKz09PT09PT09PT09PT09PQorCitUaGUgcnhycGMgbW9kdWxlIGNyZWF0ZXMgYSBudW1iZXIgb2YgZmlsZXMgaW4gdmFyaW91cyBwbGFjZXMgaW4gdGhlIC9wcm9jCitmaWxlc3lzdGVtOgorCisgICgqKSBGaXJzdGx5LCBzb21lIGluZm9ybWF0aW9uIGZpbGVzIGFyZSBtYWRlIGF2YWlsYWJsZSBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKKyAgICAgICIvcHJvYy9uZXQvcnhycGMvIi4gVGhlc2UgbGlzdCB0aGUgZXh0YW50IHRyYW5zcG9ydCBlbmRwb2ludCwgcGVlciwKKyAgICAgIGNvbm5lY3Rpb24gYW5kIGNhbGwgcmVjb3Jkcy4KKworICAoKikgU2Vjb25kbHksIHNvbWUgY29udHJvbCBmaWxlcyBhcmUgbWFkZSBhdmFpbGFibGUgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCisgICAgICAiL3Byb2Mvc3lzL3J4cnBjLyIuIEN1cnJlbnRseSwgYWxsIHRoZXNlIGZpbGVzIGNhbiBiZSB1c2VkIGZvciBpcyB0bworICAgICAgdHVybiBvbiB2YXJpb3VzIGxldmVscyBvZiB0cmFjaW5nLgorCitUaGUgQUZTIG1vZHVsZXMgY3JlYXRlcyBhICIvcHJvYy9mcy9hZnMvIiBkaXJlY3RvcnkgYW5kIHBvcHVsYXRlcyBpdDoKKworICAoKikgQSAiY2VsbHMiIGZpbGUgdGhhdCBsaXN0cyBjZWxscyBjdXJyZW50bHkga25vd24gdG8gdGhlIGFmcyBtb2R1bGUuCisKKyAgKCopIEEgZGlyZWN0b3J5IHBlciBjZWxsIHRoYXQgY29udGFpbnMgZmlsZXMgdGhhdCBsaXN0IHZvbHVtZSBsb2NhdGlvbgorICAgICAgc2VydmVycywgdm9sdW1lcywgYW5kIGFjdGl2ZSBzZXJ2ZXJzIGtub3duIHdpdGhpbiB0aGF0IGNlbGwuCisKKworVEhFIENFTEwgREFUQUJBU0UKKz09PT09PT09PT09PT09PT09CisKK1RoZSBmaWxlc3lzdGVtIG1haW50YWlucyBhbiBpbnRlcm5hbCBkYXRhYmFzZSBvZiBhbGwgdGhlIGNlbGxzIGl0IGtub3dzIGFuZAordGhlIElQIGFkZHJlc3NlcyBvZiB0aGUgdm9sdW1lIGxvY2F0aW9uIHNlcnZlcnMgZm9yIHRob3NlIGNlbGxzLiBUaGUgY2VsbCB0bword2hpY2ggdGhlIGNvbXB1dGVyIGJlbG9uZ3MgaXMgYWRkZWQgdG8gdGhlIGRhdGFiYXNlIHdoZW4gaW5zbW9kIGlzIHBlcmZvcm1lZAorYnkgdGhlICJyb290Y2VsbD0iIGFyZ3VtZW50LgorCitGdXJ0aGVyIGNlbGxzIGNhbiBiZSBhZGRlZCBieSBjb21tYW5kcyBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6CisKKwllY2hvIGFkZCBDRUxMTkFNRSBWTEFERFJbOlZMQUREUl1bOlZMQUREUl0uLi4gPi9wcm9jL2ZzL2Fmcy9jZWxscworCWVjaG8gYWRkIGdyYW5kLmNlbnRyYWwub3JnIDE4LjcuMTQuODg6MTI4LjIuMTkxLjIyNCA+L3Byb2MvZnMvYWZzL2NlbGxzCisKK05vIG90aGVyIGNlbGwgZGF0YWJhc2Ugb3BlcmF0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoaXMgdGltZS4KKworCitFWEFNUExFUworPT09PT09PT0KKworSGVyZSdzIHdoYXQgSSB1c2UgdG8gdGVzdCB0aGlzLiBTb21lIG9mIHRoZSBuYW1lcyBhbmQgSVAgYWRkcmVzc2VzIGFyZSBsb2NhbAordG8gbXkgaW50ZXJuYWwgRE5TLiBNeSAicm9vdC5hZnMiIHBhcnRpdGlvbiBoYXMgYSBtb3VudCBwb2ludCB3aXRoaW4gaXQgZm9yCitzb21lIHB1YmxpYyB2b2x1bWVzIHZvbHVtZXMuCisKK2luc21vZCAtUyAvdG1wL3J4cnBjLm8gCitpbnNtb2QgLVMgL3RtcC9rYWZzLm8gcm9vdGNlbGw9Y2FtYnJpZGdlLnJlZGhhdC5jb206MTcyLjE2LjE4LjczOjE3Mi4xNi4xOC45MQorCittb3VudCAtdCBhZnMgXCVyb290LmFmcy4gL2FmcworbW91bnQgLXQgYWZzIFwlY2FtYnJpZGdlLnJlZGhhdC5jb206cm9vdC5jZWxsLiAvYWZzL2NhbWJyaWRnZS5yZWRoYXQuY29tLworCitlY2hvIGFkZCBncmFuZC5jZW50cmFsLm9yZyAxOC43LjE0Ljg4OjEyOC4yLjE5MS4yMjQgPiAvcHJvYy9mcy9hZnMvY2VsbHMgCittb3VudCAtdCBhZnMgIiNncmFuZC5jZW50cmFsLm9yZzpyb290LmNlbGwuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnLworbW91bnQgLXQgYWZzICIjZ3JhbmQuY2VudHJhbC5vcmc6cm9vdC5hcmNoaXZlLiIgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9hcmNoaXZlCittb3VudCAtdCBhZnMgIiNncmFuZC5jZW50cmFsLm9yZzpyb290LmNvbnRyaWIuIiAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL2NvbnRyaWIKK21vdW50IC10IGFmcyAiI2dyYW5kLmNlbnRyYWwub3JnOnJvb3QuZG9jLiIgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9kb2MKK21vdW50IC10IGFmcyAiI2dyYW5kLmNlbnRyYWwub3JnOnJvb3QucHJvamVjdC4iIC9hZnMvZ3JhbmQuY2VudHJhbC5vcmcvcHJvamVjdAorbW91bnQgLXQgYWZzICIjZ3JhbmQuY2VudHJhbC5vcmc6cm9vdC5zZXJ2aWNlLiIgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9zZXJ2aWNlCittb3VudCAtdCBhZnMgIiNncmFuZC5jZW50cmFsLm9yZzpyb290LnNvZnR3YXJlLiIgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9zb2Z0d2FyZQorbW91bnQgLXQgYWZzICIjZ3JhbmQuY2VudHJhbC5vcmc6cm9vdC51c2VyLiIgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy91c2VyCisKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3VzZXIKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL3NvZnR3YXJlCit1bW91bnQgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9zZXJ2aWNlCit1bW91bnQgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9wcm9qZWN0Cit1bW91bnQgL2Fmcy9ncmFuZC5jZW50cmFsLm9yZy9kb2MKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL2NvbnRyaWIKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnL2FyY2hpdmUKK3Vtb3VudCAvYWZzL2dyYW5kLmNlbnRyYWwub3JnCit1bW91bnQgL2Fmcy9jYW1icmlkZ2UucmVkaGF0LmNvbQordW1vdW50IC9hZnMKK3JtbW9kIGthZnMKK3JtbW9kIHJ4cnBjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9tb3VudC1zdXBwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b21vdW50LXN1cHBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YzY1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9tb3VudC1zdXBwb3J0LnR4dApAQCAtMCwwICsxLDExOCBAQAorU3VwcG9ydCBpcyBhdmFpbGFibGUgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgd2lzaCB0byBkbyBhdXRvbW91bnRpbmcgc3VwcG9ydCAoc3VjaAorYXMga0FGUyB3aGljaCBjYW4gYmUgZm91bmQgaW4gZnMvYWZzLykuIFRoaXMgZmFjaWxpdHkgaW5jbHVkZXMgYWxsb3dpbmcKK2luLWtlcm5lbCBtb3VudHMgdG8gYmUgcGVyZm9ybWVkIGFuZCBtb3VudHBvaW50IGRlZ3JhZGF0aW9uIHRvIGJlCityZXF1ZXN0ZWQuIFRoZSBsYXR0ZXIgY2FuIGFsc28gYmUgcmVxdWVzdGVkIGJ5IHVzZXJzcGFjZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09CitJTi1LRVJORUwgQVVUT01PVU5USU5HCis9PT09PT09PT09PT09PT09PT09PT09CisKK0EgZmlsZXN5c3RlbSBjYW4gbm93IG1vdW50IGFub3RoZXIgZmlsZXN5c3RlbSBvbiBvbmUgb2YgaXRzIGRpcmVjdG9yaWVzIGJ5IHRoZQorZm9sbG93aW5nIHByb2NlZHVyZToKKworICgxKSBHaXZlIHRoZSBkaXJlY3RvcnkgYSBmb2xsb3dfbGluaygpIG9wZXJhdGlvbi4KKworICAgICBXaGVuIHRoZSBkaXJlY3RvcnkgaXMgYWNjZXNzZWQsIHRoZSBmb2xsb3dfbGluayBvcCB3aWxsIGJlIGNhbGxlZCwgYW5kCisgICAgIGl0IHdpbGwgYmUgcHJvdmlkZWQgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIG1vdW50cG9pbnQgaW4gdGhlIG5hbWVpZGF0YQorICAgICBzdHJ1Y3R1cmUgKHZmc21vdW50IGFuZCBkZW50cnkpLgorCisgKDIpIEhhdmUgdGhlIGZvbGxvd19saW5rKCkgb3AgZG8gdGhlIGZvbGxvd2luZyBzdGVwczoKKworICAgICAoYSkgQ2FsbCBkb19rZXJuX21vdW50KCkgdG8gY2FsbCB0aGUgYXBwcm9wcmlhdGUgZmlsZXN5c3RlbSB0byBzZXQgdXAgYQorICAgICAgICAgc3VwZXJibG9jayBhbmQgZ2FpbiBhIHZmc21vdW50IHN0cnVjdHVyZSByZXByZXNlbnRpbmcgaXQuCisKKyAgICAgKGIpIENvcHkgdGhlIG5hbWVpZGF0YSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCBhbmQgc3Vic3RpdHV0ZSB0aGUgZGVudHJ5CisJIGFyZ3VtZW50IGludG8gaXQgdGhlIGNvcHkuCisKKyAgICAgKGMpIENhbGwgZG9fYWRkX21vdW50KCkgdG8gaW5zdGFsbCB0aGUgbmV3IHZmc21vdW50IGludG8gdGhlIG5hbWVzcGFjZSdzCisJIG1vdW50cG9pbnQgdHJlZSwgdGh1cyBtYWtpbmcgaXQgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UuIFVzZSB0aGUKKwkgbmFtZWlkYXRhIHNldCB1cCBpbiAoYikgYXMgdGhlIGRlc3RpbmF0aW9uLgorCisJIElmIHRoZSBtb3VudHBvaW50IHdpbGwgYmUgYXV0b21hdGljYWxseSBleHBpcmVkLCB0aGVuIGRvX2FkZF9tb3VudCgpCisJIHNob3VsZCBhbHNvIGJlIGdpdmVuIHRoZSBsb2NhdGlvbiBvZiBhbiBleHBpcmF0aW9uIGxpc3QgKHNlZSBmdXJ0aGVyCisJIGRvd24pLgorCisgICAgIChkKSBSZWxlYXNlIHRoZSBwYXRoIGluIHRoZSBuYW1laWRhdGEgYXJndW1lbnQgYW5kIHN1YnN0aXR1dGUgaW4gdGhlIG5ldworCSB2ZnNtb3VudCBhbmQgaXRzIHJvb3QgZGVudHJ5LiBUaGUgcmVmIGNvdW50cyBvbiB0aGVzZSB3aWxsIG5lZWQKKwkgaW5jcmVtZW50aW5nLgorCitUaGVuIGZyb20gdXNlcnNwYWNlLCB5b3UgY2FuIGp1c3QgZG8gc29tZXRoaW5nIGxpa2U6CisKKwlbcm9vdEBhbmRyb21lZGEgcm9vdF0jIG1vdW50IC10IGFmcyBcI3Jvb3QuYWZzLiAvYWZzCisJW3Jvb3RAYW5kcm9tZWRhIHJvb3RdIyBscyAvYWZzCisJYXNkICBjYW1icmlkZ2UgIGNhbWJyaWRnZS5yZWRoYXQuY29tICBncmFuZC5jZW50cmFsLm9yZworCVtyb290QGFuZHJvbWVkYSByb290XSMgbHMgL2Fmcy9jYW1icmlkZ2UKKwlhZnNkb2MKKwlbcm9vdEBhbmRyb21lZGEgcm9vdF0jIGxzIC9hZnMvY2FtYnJpZGdlL2Fmc2RvYy8KKwlDaGFuZ2VMb2cgIGh0bWwgIExJQ0VOU0UgIHBkZiAgUkVMTk9URVMtMS4yLjIKKworQW5kIHRoZW4gaWYgeW91IGxvb2sgaW4gdGhlIG1vdW50cG9pbnQgY2F0YWxvZ3VlLCB5b3UnbGwgc2VlIHNvbWV0aGluZyBsaWtlOgorCisJW3Jvb3RAYW5kcm9tZWRhIHJvb3RdIyBjYXQgL3Byb2MvbW91bnRzCisJLi4uCisJI3Jvb3QuYWZzLiAvYWZzIGFmcyBydyAwIDAKKwkjcm9vdC5jZWxsLiAvYWZzL2NhbWJyaWRnZS5yZWRoYXQuY29tIGFmcyBydyAwIDAKKwkjYWZzZG9jLiAvYWZzL2NhbWJyaWRnZS5yZWRoYXQuY29tL2Fmc2RvYyBhZnMgcncgMCAwCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CitBVVRPTUFUSUMgTU9VTlRQT0lOVCBFWFBJUlkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBdXRvbWF0aWMgZXhwaXJhdGlvbiBvZiBtb3VudHBvaW50cyBpcyBlYXN5LCBwcm92aWRlZCB5b3UndmUgbW91bnRlZCB0aGUKK21vdW50cG9pbnQgdG8gYmUgZXhwaXJlZCBpbiB0aGUgYXV0b21vdW50aW5nIHByb2NlZHVyZSBvdXRsaW5lZCBhYm92ZS4KKworVG8gZG8gZXhwaXJhdGlvbiwgeW91IG5lZWQgdG8gZm9sbG93IHRoZXNlIHN0ZXBzOgorCisgKDMpIENyZWF0ZSBhdCBsZWFzdCBvbmUgbGlzdCBvZmYgd2hpY2ggdGhlIHZmc21vdW50cyB0byBiZSBleHBpcmVkIGNhbiBiZQorICAgICBodW5nLiBBY2Nlc3MgdG8gdGhpcyBsaXN0IHdpbGwgYmUgZ292ZXJuZWQgYnkgdGhlIHZmc21vdW50X2xvY2suCisKKyAoNCkgSW4gc3RlcCAoMmMpIGFib3ZlLCB0aGUgY2FsbCB0byBkb19hZGRfbW91bnQoKSBzaG91bGQgYmUgcHJvdmlkZWQgd2l0aCBhCisgICAgIHBvaW50ZXIgdG8gdGhpcyBsaXN0LiBJdCB3aWxsIGhhbmcgdGhlIHZmc21vdW50IG9mZiBvZiBpdCBpZiBpdCBzdWNjZWVkcy4KKworICg1KSBXaGVuIHlvdSB3YW50IG1vdW50cG9pbnRzIHRvIGJlIGV4cGlyZWQsIGNhbGwgbWFya19tb3VudHNfZm9yX2V4cGlyeSgpCisgICAgIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgbGlzdC4gVGhpcyB3aWxsIHByb2Nlc3MgdGhlIGxpc3QsIG1hcmtpbmcgZXZlcnkKKyAgICAgdmZzbW91bnQgdGhlcmVvbiBmb3IgcG90ZW50aWFsIGV4cGlyeSBvbiB0aGUgbmV4dCBjYWxsLgorCisgICAgIElmIGEgdmZzbW91bnQgd2FzIGFscmVhZHkgZmxhZ2dlZCBmb3IgZXhwaXJ5LCBhbmQgaWYgaXRzIHVzYWdlIGNvdW50IGlzIDEKKyAgICAgKGl0J3Mgb25seSByZWZlcmVuY2VkIGJ5IGl0cyBwYXJlbnQgdmZzbW91bnQpLCB0aGVuIGl0IHdpbGwgYmUgZGVsZXRlZAorICAgICBmcm9tIHRoZSBuYW1lc3BhY2UgYW5kIHRocm93biBhd2F5IChlZmZlY3RpdmVseSB1bm1vdW50ZWQpLgorCisgICAgIEl0IG1heSBwcm92ZSBzaW1wbGVzdCB0byBzaW1wbHkgY2FsbCB0aGlzIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLCB1c2luZworICAgICBzb21lIHNvcnQgb2YgdGltZWQgZXZlbnQgdG8gZHJpdmUgaXQuCisKK1RoZSBleHBpcmF0aW9uIGZsYWcgaXMgY2xlYXJlZCBieSBjYWxscyB0byBtbnRwdXQuIFRoaXMgbWVhbnMgdGhhdCBleHBpcmF0aW9uCit3aWxsIG9ubHkgaGFwcGVuIG9uIHRoZSBzZWNvbmQgZXhwaXJhdGlvbiByZXF1ZXN0IGFmdGVyIHRoZSBsYXN0IHRpbWUgdGhlCittb3VudHBvaW50IHdhcyBhY2Nlc3NlZC4KKworSWYgYSBtb3VudHBvaW50IGlzIG1vdmVkLCBpdCBnZXRzIHJlbW92ZWQgZnJvbSB0aGUgZXhwaXJhdGlvbiBsaXN0LiBJZiBhIGJpbmQKK21vdW50IGlzIG1hZGUgb24gYW4gZXhwaXJhYmxlIG1vdW50LCB0aGUgbmV3IHZmc21vdW50IHdpbGwgbm90IGJlIG9uIHRoZQorZXhwaXJhdGlvbiBsaXN0IGFuZCB3aWxsIG5vdCBleHBpcmUuCisKK0lmIGEgbmFtZXNwYWNlIGlzIGNvcGllZCwgYWxsIG1vdW50cG9pbnRzIGNvbnRhaW5lZCB0aGVyZWluIHdpbGwgYmUgY29waWVkLAorYW5kIHRoZSBjb3BpZXMgb2YgdGhvc2UgdGhhdCBhcmUgb24gYW4gZXhwaXJhdGlvbiBsaXN0IHdpbGwgYmUgYWRkZWQgdG8gdGhlCitzYW1lIGV4cGlyYXRpb24gbGlzdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PQorVVNFUlNQQUNFIERSSVZFTiBFWFBJUlkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0FzIGFuIGFsdGVybmF0aXZlLCBpdCBpcyBwb3NzaWJsZSBmb3IgdXNlcnNwYWNlIHRvIHJlcXVlc3QgZXhwaXJ5IG9mIGFueQorbW91bnRwb2ludCAodGhvdWdoIHNvbWUgd2lsbCBiZSByZWplY3RlZCAtIHRoZSBjdXJyZW50IHByb2Nlc3MncyBpZGVhIG9mIHRoZQorcm9vdGZzIGZvciBleGFtcGxlKS4gSXQgZG9lcyB0aGlzIGJ5IHBhc3NpbmcgdGhlIE1OVF9FWFBJUkUgZmxhZyB0bwordW1vdW50KCkuIFRoaXMgZmxhZyBpcyBjb25zaWRlcmVkIGluY29tcGF0aWJsZSB3aXRoIE1OVF9GT1JDRSBhbmQgTU5UX0RFVEFDSC4KKworSWYgdGhlIG1vdW50cG9pbnQgaW4gcXVlc3Rpb24gaXMgaW4gcmVmZXJlbmNlZCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbgordW1vdW50KCkgb3IgaXRzIHBhcmVudCBtb3VudHBvaW50LCBhbiBFQlVTWSBlcnJvciB3aWxsIGJlIHJldHVybmVkIGFuZCB0aGUKK21vdW50cG9pbnQgd2lsbCBub3QgYmUgbWFya2VkIGZvciBleHBpcmF0aW9uIG9yIHVubW91bnRlZC4KKworSWYgdGhlIG1vdW50cG9pbnQgd2FzIG5vdCBhbHJlYWR5IG1hcmtlZCBmb3IgZXhwaXJ5IGF0IHRoYXQgdGltZSwgYW4gRUFHQUlOCitlcnJvciB3aWxsIGJlIGdpdmVuIGFuZCBpdCB3b24ndCBiZSB1bm1vdW50ZWQuCisKK090aGVyd2lzZSBpZiBpdCB3YXMgYWxyZWFkeSBtYXJrZWQgYW5kIGl0IHdhc24ndCByZWZlcmVuY2VkLCB1bm1vdW50aW5nIHdpbGwKK3Rha2UgcGxhY2UgYXMgdXN1YWwuCisKK0FnYWluLCB0aGUgZXhwaXJhdGlvbiBmbGFnIGlzIGNsZWFyZWQgZXZlcnkgdGltZSBhbnl0aGluZyBvdGhlciB0aGFuIHVtb3VudCgpCitsb29rcyBhdCBhIG1vdW50cG9pbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzdhN2IxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnR4dApAQCAtMCwwICsxLDExNyBAQAorQmVPUyBmaWxlc3lzdGVtIGZvciBMaW51eAorCitEb2N1bWVudCBsYXN0IHVwZGF0ZWQ6IERlYyA2LCAyMDAxCisKK1dBUk5JTkcKKz09PT09PT0KK01ha2Ugc3VyZSB5b3UgdW5kZXJzdGFuZCB0aGF0IHRoaXMgaXMgYWxwaGEgc29mdHdhcmUuICBUaGlzIG1lYW5zIHRoYXQgdGhlCitpbXBsZW1lbnRhdGlvbiBpcyBuZWl0aGVyIGNvbXBsZXRlIG5vciB3ZWxsLXRlc3RlZC4gCisKK0kgRElTQ0xBSU0gQUxMIFJFU1BPTlNJQklMVFkgRk9SIEFOWSBQT1NTSUJMRSBCQUQgRUZGRUNUUyBPRiBUSElTIENPREUhCisKK0xJQ0VOU0UKKz09PT09CitUaGlzIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAKK1NlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgbGljZW5zZS4KK09yIHRoZSBHTlUgd2Vic2l0ZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sPgorCitBVVRIT1IKKz09PT09CitUaGUgbGFyZ2VzdCBwYXJ0IG9mIHRoZSBjb2RlIHdyaXR0ZW4gYnkgV2lsbCBEeXNvbiA8d2lsbF9keXNvbkBwb2JveC5jb20+CitIZSBoYXMgYmVlbiB3b3JraW5nIG9uIHRoZSBjb2RlIHNpbmNlIEF1ZyAxMywgMjAwMS4gU2VlIHRoZSBjaGFuZ2Vsb2cgZm9yCitkZXRhaWxzLgorCitPcmlnaW5hbCBBdXRob3I6IE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4KK0hpcyBvcnJpZ2luYWwgY29kZSBjYW4gc3RpbGwgYmUgZm91bmQgYXQ6Cis8aHR0cDovL2hwLnZlY3Rvci5jby5qcC9hdXRob3JzL1ZBMDA4MDMwL2Jmcy8+CitEb2VzIGFueW9uZSBrbm93IG9mIGEgbW9yZSBjdXJyZW50IGVtYWlsIGFkZHJlc3MgZm9yIE1ha290bz8gSGUgZG9lc24ndAorcmVzcG9uZCB0byB0aGUgYWRkcmVzcyBnaXZlbiBhYm92ZS4uLgorCitDdXJyZW50IG1haW50YWluZXI6IFNlcmdleSBTLiBLb3N0eWxpb3YgPHJhdGhhbWFoYXRhQHBocDQucnU+CisKK1dIQVQgSVMgVEhJUyBEUklWRVI/Cis9PT09PT09PT09PT09PT09PT0KK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIG5hdGl2ZSBmaWxlc3lzdGVtIG9mIEJlT1MgPGh0dHA6Ly93d3cuYmUuY29tLz4KK2ZvciB0aGUgbGludXggMi40LjEgYW5kIGxhdGVyIGtlcm5lbHMuIEN1cnJlbnRseSBpdCBpcyBhIHJlYWQtb25seQoraW1wbGVtZW50YXRpb24uCisKK1doaWNoIGlzIGl0LCBCRlMgb3IgQkVGUz8KKz09PT09PT09PT09PT09PT0KK0JlLCBJbmMgc2FpZCwgIkJlT1MgRmlsZXN5c3RlbSBpcyBvZmZpY2lhbGx5IGNhbGxlZCBCRlMsIG5vdCBCZUZTIi4gCitCdXQgVW5peHdhcmUgQm9vdCBGaWxlc3lzdGVtIGlzIGNhbGxlZCBiZnMsIHRvby4gQW5kIHRoZXkgYXJlIGFscmVhZHkgaW4KK3RoZSBrZXJuZWwuIEJlY2F1c2Ugb2YgdGhpcyBuYW1laW5nIGNvbmZsaWN0LCBvbiBMaW51eCB0aGUgQmVPUworZmlsZXN5c3RlbSBpcyBjYWxsZWQgYmVmcy4KKworSE9XIFRPIElOU1RBTEwKKz09PT09PT09PT09PT09CitzdGVwIDEuICBJbnN0YWxsIHRoZSBCZUZTICBwYXRjaCBpbnRvIHRoZSBzb3VyY2UgY29kZSB0cmVlIG9mIGxpbnV4LgorCitBcHBseSB0aGUgcGF0Y2hmaWxlIHRvIHlvdXIga2VybmVsIHNvdXJjZSB0cmVlLgorQXNzdW1pbmcgdGhhdCB5b3VyIGtlcm5lbCBzb3VyY2UgaXMgaW4gL2Zvby9iYXIvbGludXggYW5kIHRoZSBwYXRjaGZpbGUKK2lzIGNhbGxlZCBwYXRjaC1iZWZzLXh4eCwgeW91IHdvdWxkIGRvIHRoZSBmb2xsb3dpbmc6CisKKwljZCAvZm9vL2Jhci9saW51eAorCXBhdGNoIC1wMSA8IC9wYXRoL3RvL3BhdGNoLWJlZnMteHh4CisKK2lmIHRoZSBwYXRjaGluZyBzdGVwIGZhaWxzIChpLmUuIHRoZXJlIGFyZSByZWplY3RlZCBodW5rcyksIHlvdSBjYW4gdHJ5IHRvCitmaWd1cmUgaXQgb3V0IHlvdXJzZWxmIChpdCBzaG91bGRuJ3QgYmUgaGFyZCksIG9yIG1haWwgdGhlIG1haW50YWluZXIgCisoV2lsbCBEeXNvbiA8d2lsbF9keXNvbkBwb2JveC5jb20+KSBmb3IgaGVscC4KKworc3RlcCAyLiAgQ29uZmlndXJldGlvbiAmIG1ha2Uga2VybmVsCisKK1RoZSBsaW51eCBrZXJuZWwgaGFzIG1hbnkgY29tcGlsZS10aW1lIG9wdGlvbnMuIE1vc3Qgb2YgdGhlbSBhcmUgYmV5b25kIHRoZQorc2NvcGUgb2YgdGhpcyBkb2N1bWVudC4gSSBzdWdnZXN0IHRoZSBLZXJuZWwtSE9XVE8gZG9jdW1lbnQgYXMgYSBnb29kIGdlbmVyYWwKK3JlZmVyZW5jZSBvbiB0aGlzIHRvcGljLiA8aHR0cDovL3d3dy5saW51eC5jb20vaG93dG8vS2VybmVsLUhPV1RPLmh0bWw+CisKK0hvd2V2ZXIsIHRvIHVzZSB0aGUgQmVGUyBtb2R1bGUsIHlvdSBtdXN0IGVuYWJsZSBpdCBhdCBjb25maWd1cmUgdGltZS4KKworCWNkIC9mb28vYmFyL2xpbnV4CisJbWFrZSBtZW51Y29uZmlnIChvciB4Y29uZmlnKQorCitUaGUgQmVGUyBtb2R1bGUgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiB0aGUgbGludXgga2VybmVsLCBzbyB5b3UgbXVzdCBmaXJzdAorZW5hYmxlIHN1cHBvcnQgZm9yIGV4cGVyaW1lbnRhbCBjb2RlIHVuZGVyIHRoZSAiQ29kZSBtYXR1cml0eSBsZXZlbCIgbWVudS4KKworVGhlbiwgdW5kZXIgdGhlICJGaWxlc3lzdGVtcyIgbWVudSB3aWxsIGJlIGFuIG9wdGlvbiBjYWxsZWQgIkJlRlMKK2ZpbGVzeXN0ZW0gKGV4cGVyaW1lbnRhbCkiLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBFbmFibGUgdGhhdCBvcHRpb24KKyhpdCBpcyBmaW5lIHRvIG1ha2UgaXQgYSBtb2R1bGUpLgorCitTYXZlIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHRoZW4gYnVpbGQgeW91ciBrZXJuZWwuCisKK3N0ZXAgMy4gIEluc3RhbGwKKworU2VlIHRoZSBrZXJuZWwgaG93dG8gPGh0dHA6Ly93d3cubGludXguY29tL2hvd3RvL0tlcm5lbC1IT1dUTy5odG1sPiBmb3IKK2luc3RydWN0aW9ucyBvbiB0aGlzIGNyaXRpY2FsIHN0ZXAuCisKK1VTSU5HIEJGUworPT09PT09PT09CitUbyB1c2UgdGhlIEJlT1MgZmlsZXN5c3RlbSwgdXNlIGZpbGVzeXN0ZW0gdHlwZSAnYmVmcycuCisKK2V4KQorICAgIG1vdW50IC10IGJlZnMgL2Rldi9mZDAgL2Jlb3MKKworTU9VTlQgT1BUSU9OUworPT09PT09PT09PT09PQordWlkPW5ubiAgICAgICAgQWxsIGZpbGVzIGluIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBvd25lZCBieSB1c2VyIGlkIG5ubi4KK2dpZD1ubm4JICAgICAgIEFsbCBmaWxlcyBpbiB0aGUgcGFydGl0aW9uIHdpbGwgYmUgaW4gZ3JvdXAgbm5uLgoraW9jaGFyc2V0PXh4eCAgVXNlIHh4eCBhcyB0aGUgbmFtZSBvZiB0aGUgTkxTIHRyYW5zbGF0aW9uIHRhYmxlLgorZGVidWcgICAgICAgICAgVGhlIGRyaXZlciB3aWxsIG91dHB1dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gdGhlIHN5c2xvZy4KKworSE9XIFRPIEdFVCBMQVNURVNUIFZFUlNJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsYXRlc3QgdmVyc2lvbiBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGF0OgorPGh0dHA6Ly9iZWZzLWRyaXZlci5zb3VyY2Vmb3JnZS5uZXQvPgorCitBTlkgS05PV04gQlVHUz8KKz09PT09PT09PT09CitBcyBvZiBKYW4gMjAsIDIwMDI6CisJCisJTm9uZQorCitTUEVDSUFMIFRIQU5LUworPT09PT09PT09PT09PT0KK0RvbWluaWMgR2lhbXBhbG8gLi4uIFdyaXRpbmcgIlByYWN0aWNhbCBmaWxlIHN5c3RlbSBkZXNpZ24gd2l0aCBCZSBmaWxlc3lzdGVtIgorSGlyb3l1a2kgWWFtYWRhICAuLi4gVGVzdGluZyBMaW51eFBQQy4KKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg0MWUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0CkBAIC0wLDAgKzEsNTcgQEAKK0JGUyBGSUxFU1lTVEVNIEZPUiBMSU5VWAorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBCRlMgZmlsZXN5c3RlbSBpcyB1c2VkIGJ5IFNDTyBVbml4V2FyZSBPUyBmb3IgdGhlIC9zdGFuZCBzbGljZSwgd2hpY2gKK3VzdWFsbHkgY29udGFpbnMgdGhlIGtlcm5lbCBpbWFnZSBhbmQgYSBmZXcgb3RoZXIgZmlsZXMgcmVxdWlyZWQgZm9yIHRoZQorYm9vdCBwcm9jZXNzLgorCitJbiBvcmRlciB0byBhY2Nlc3MgL3N0YW5kIHBhcnRpdGlvbiB1bmRlciBMaW51eCB5b3Ugb2J2aW91c2x5IG5lZWQgdG8KK2tub3cgdGhlIHBhcnRpdGlvbiBudW1iZXIgYW5kIHRoZSBrZXJuZWwgbXVzdCBzdXBwb3J0IFVuaXhXYXJlIGRpc2sgc2xpY2VzCisoQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBjb25maWcgb3B0aW9uKS4gSG93ZXZlciBCRlMgc3VwcG9ydCBkb2VzIG5vdAorZGVwZW5kIG9uIGhhdmluZyBVbml4V2FyZSBkaXNrbGFiZWwgc3VwcG9ydCBiZWNhdXNlIG9uZSBjYW4gYWxzbyBtb3VudAorQkZTIGZpbGVzeXN0ZW0gdmlhIGxvb3BiYWNrOgorCisjIGxvc2V0dXAgL2Rldi9sb29wMCBzdGFuZC5pbWcKKyMgbW91bnQgLXQgYmZzIC9kZXYvbG9vcDAgL21udC9zdGFuZAorCit3aGVyZSBzdGFuZC5pbWcgaXMgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGltYWdlIG9mIEJGUyBmaWxlc3lzdGVtLiAKK1doZW4geW91IGhhdmUgZmluaXNoZWQgdXNpbmcgaXQgYW5kIHVtb3VudGVkIHlvdSBuZWVkIHRvIGFsc28gZGVhbGxvY2F0ZQorL2Rldi9sb29wMCBkZXZpY2UgYnk6CisKKyMgbG9zZXR1cCAtZCAvZGV2L2xvb3AwCisKK1lvdSBjYW4gc2ltcGxpZnkgbW91bnRpbmcgYnkganVzdCB0eXBpbmc6CisKKyMgbW91bnQgLXQgYmZzIC1vIGxvb3Agc3RhbmQuaW1nIC9tbnQvc3RhbmQKKwordGhpcyB3aWxsIGFsbG9jYXRlIHRoZSBmaXJzdCBhdmFpbGFibGUgbG9vcGJhY2sgZGV2aWNlIChhbmQgbG9hZCBsb29wLm8gCitrZXJuZWwgbW9kdWxlIGlmIG5lY2Vzc2FyeSkgYXV0b21hdGljYWxseS4gSWYgdGhlIGxvb3BiYWNrIGRyaXZlciBpcyBub3QKK2xvYWRlZCBhdXRvbWF0aWNhbGx5LCBtYWtlIHN1cmUgdGhhdCB5b3VyIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIGttb2QgCitzdXBwb3J0IChDT05GSUdfS01PRCkgZW5hYmxlZC4gQmV3YXJlIHRoYXQgdW1vdW50IHdpbGwgbm90CitkZWFsbG9jYXRlIC9kZXYvbG9vcE4gZGV2aWNlIGlmIC9ldGMvbXRhYiBmaWxlIG9uIHlvdXIgc3lzdGVtIGlzIGEKK3N5bWJvbGljIGxpbmsgdG8gL3Byb2MvbW91bnRzLiBZb3Ugd2lsbCBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IHVzaW5nCisiLWQiIHN3aXRjaCBvZiBsb3NldHVwKDgpLiBSZWFkIGxvc2V0dXAoOCkgbWFucGFnZSBmb3IgbW9yZSBpbmZvLgorCitUbyBjcmVhdGUgdGhlIEJGUyBpbWFnZSB1bmRlciBVbml4V2FyZSB5b3UgbmVlZCB0byBmaW5kIG91dCBmaXJzdCB3aGljaAorc2xpY2UgY29udGFpbnMgaXQuIFRoZSBjb21tYW5kIHBydHZ0b2MoMU0pIGlzIHlvdXIgZnJpZW5kOgorCisjIHBydHZ0b2MgL2Rldi9yZHNrL2MwYjB0MGQwczAKKworKGFzc3VtaW5nIHlvdXIgcm9vdCBkaXNrIGlzIG9uIHRhcmdldD0wLCBsdW49MCwgYnVzPTAsIGNvbnRyb2xsZXI9MCkuIFRoZW4geW91Citsb29rIGZvciB0aGUgc2xpY2Ugd2l0aCB0YWcgIlNUQU5EIiwgd2hpY2ggaXMgdXN1YWxseSBzbGljZSAxMC4gV2l0aCB0aGlzCitpbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSBkZCgxKSB0byBjcmVhdGUgdGhlIEJGUyBpbWFnZToKKworIyB1bW91bnQgL3N0YW5kCisjIGRkIGlmPS9kZXYvcmRzay9jMGIwdDBkMHNhIG9mPXN0YW5kLmltZyBicz01MTIKKworSnVzdCBpbiBjYXNlLCB5b3UgY2FuIHZlcmlmeSB0aGF0IHlvdSBoYXZlIGRvbmUgdGhlIHJpZ2h0IHRoaW5nIGJ5IGNoZWNraW5nCit0aGUgbWFnaWMgbnVtYmVyOgorCisjIG9kIC1BZCAtdHg0IHN0YW5kLmltZyB8IG1vcmUKKworVGhlIGZpcnN0IDQgYnl0ZXMgc2hvdWxkIGJlIDB4MWJhZGZhY2UuCisKK0lmIHlvdSBoYXZlIGFueSBwYXRjaGVzLCBxdWVzdGlvbnMgb3Igc3VnZ2VzdGlvbnMgcmVnYXJkaW5nIHRoaXMgQkZTCitpbXBsZW1lbnRhdGlvbiBwbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yOgorCitUaWdyYW4gQS4gQWl2YXppYW4gPHRpZ3JhbkB2ZXJpdGFzLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2lmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NpZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Y2M5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NpZnMudHh0CkBAIC0wLDAgKzEsNTEgQEAKKyAgVGhpcyBpcyB0aGUgY2xpZW50IFZGUyBtb2R1bGUgZm9yIHRoZSBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0KKyAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrIAorICAoU01CKSBwcm90b2NvbCwgdGhlIG5hdGl2ZSBmaWxlIHNoYXJpbmcgbWVjaGFuaXNtIGZvciBtb3N0IGVhcmx5CisgIFBDIG9wZXJhdGluZyBzeXN0ZW1zLiAgQ0lGUyBpcyBmdWxseSBzdXBwb3J0ZWQgYnkgY3VycmVudCBuZXR3b3JrCisgIGZpbGUgc2VydmVycyBzdWNoIGFzIFdpbmRvd3MgMjAwMCwgV2luZG93cyAyMDAzIChpbmNsdWRpbmcgIAorICBXaW5kb3dzIFhQKSBhcyB3ZWxsIGJ5IFNhbWJhICh3aGljaCBwcm92aWRlcyBleGNlbGxlbnQgQ0lGUworICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLCBzbworICB0aGlzIG5ldHdvcmsgZmlsZXN5c3RlbSBjbGllbnQgY2FuIG1vdW50IHRvIGEgd2lkZSB2YXJpZXR5IG9mCisgIHNlcnZlcnMuICBUaGUgc21iZnMgbW9kdWxlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhpcyBjaWZzIG1vZHVsZQorICBmb3IgbW91bnRpbmcgdG8gb2xkZXIgU01CIHNlcnZlcnMgc3VjaCBhcyBPUy8yLiAgVGhlIHNtYmZzIGFuZCBjaWZzCisgIG1vZHVsZXMgY2FuIGNvZXhpc3QgYW5kIGRvIG5vdCBjb25mbGljdC4gIFRoZSBDSUZTIFZGUyBmaWxlc3lzdGVtCisgIG1vZHVsZSBpcyBkZXNpZ25lZCB0byB3b3JrIHdlbGwgd2l0aCBzZXJ2ZXJzIHRoYXQgaW1wbGVtZW50IHRoZQorICBuZXdlciB2ZXJzaW9ucyAoZGlhbGVjdHMpIG9mIHRoZSBTTUIvQ0lGUyBwcm90b2NvbCBzdWNoIGFzIFNhbWJhLCAKKyAgdGhlIHByb2dyYW0gd3JpdHRlbiBieSBBbmRyZXcgVHJpZGdlbGwgdGhhdCB0dXJucyBhbnkgVW5peCBob3N0IAorICBpbnRvIGEgU01CL0NJRlMgZmlsZSBzZXJ2ZXIuCisKKyAgVGhlIGludGVudCBvZiB0aGlzIG1vZHVsZSBpcyB0byBwcm92aWRlIHRoZSBtb3N0IGFkdmFuY2VkIG5ldHdvcmsKKyAgZmlsZSBzeXN0ZW0gZnVuY3Rpb24gZm9yIENJRlMgY29tcGxpYW50IHNlcnZlcnMsIGluY2x1ZGluZyBiZXR0ZXIKKyAgUE9TSVggY29tcGxpYW5jZSwgc2VjdXJlIHBlci11c2VyIHNlc3Npb24gZXN0YWJsaXNobWVudCwgaGlnaAorICBwZXJmb3JtYW5jZSBzYWZlIGRpc3RyaWJ1dGVkIGNhY2hpbmcgKG9wbG9jayksIG9wdGlvbmFsIHBhY2tldAorICBzaWduaW5nLCBsYXJnZSBmaWxlcywgVW5pY29kZSBzdXBwb3J0IGFuZCBvdGhlciBpbnRlcm5hdGlvbmFsaXphdGlvbgorICBpbXByb3ZlbWVudHMuIFNpbmNlIGJvdGggU2FtYmEgc2VydmVyIGFuZCB0aGlzIGZpbGVzeXN0ZW0gY2xpZW50IHN1cHBvcnQKKyAgdGhlIENJRlMgVW5peCBleHRlbnNpb25zLCB0aGUgY29tYmluYXRpb24gY2FuIHByb3ZpZGUgYSByZWFzb25hYmxlIAorICBhbHRlcm5hdGl2ZSB0byBORlN2NCBmb3IgZmlsZXNlcnZpbmcgaW4gc29tZSBMaW51eCB0byBMaW51eCBlbnZpcm9ubWVudHMsCisgIG5vdCBqdXN0IGluIExpbnV4IHRvIFdpbmRvd3MgZW52aXJvbm1lbnRzLgorCisgIFRoaXMgZmlsZXN5c3RlbSBoYXMgYW4gb3B0aW9uYWwgbW91bnQgdXRpbGl0eSAobW91bnQuY2lmcykgdGhhdCBjYW4KKyAgYmUgb2J0YWluZWQgZnJvbSB0aGUgcHJvamVjdCBwYWdlIGFuZCBpbnN0YWxsZWQgaW4gdGhlIHBhdGggaW4gdGhlIHNhbWUKKyAgZGlyZWN0b3J5IHdpdGggdGhlIG90aGVyIG1vdW50IGhlbHBlcnMgKHN1Y2ggYXMgbW91bnQuc21iZnMpLiAKKyAgTW91bnRpbmcgdXNpbmcgdGhlIGNpZnMgZmlsZXN5c3RlbSB3aXRob3V0IGluc3RhbGxpbmcgdGhlIG1vdW50IGhlbHBlcgorICByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSBzZXJ2ZXIncyBpcCBhZGRyZXNzLgorCisgIEZvciBMaW51eCAyLjQ6CisgICAgbW91bnQgLy9hbnl0aGluZy9oZXJlIC9tbnRfdGFyZ2V0IC1vCisgICAgICAgICAgICB1c2VyPXVzZXJuYW1lLHBhc3M9cGFzc3dvcmQsdW5jPS8vaXBfYWRkcmVzc19vZl9zZXJ2ZXIvc2hhcmVuYW1lCisKKyAgRm9yIExpbnV4IDIuNTogCisgICAgbW91bnQgLy9pcF9hZGRyZXNzX29mX3NlcnZlci9zaGFyZW5hbWUgL21udF90YXJnZXQgLW8gdXNlcj11c2VybmFtZSwgcGFzcz1wYXNzd29yZAorCisKKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG1vZHVsZSBzZWUgdGhlIHByb2plY3QgcGFnZSBhdAorCisgICAgICBodHRwOi8vdXMxLnNhbWJhLm9yZy9zYW1iYS9MaW51eF9DSUZTX2NsaWVudC5odG1sIAorCisgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENJRlMgc2VlOgorCisgICAgICBodHRwOi8vd3d3LnNuaWEub3JnL3RlY2hfYWN0aXZpdGllcy9DSUZTCisKKyAgb3IgdGhlIFNhbWJhIHNpdGU6CisgICAgIAorICAgICAgaHR0cDovL3d3dy5zYW1iYS5vcmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29kYS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NvZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzExMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NvZGEudHh0CkBAIC0wLDAgKzEsMTY3MyBAQAorTk9URTogCitUaGlzIGlzIG9uZSBvZiB0aGUgdGVjaG5pY2FsIGRvY3VtZW50cyBkZXNjcmliaW5nIGEgY29tcG9uZW50IG9mCitDb2RhIC0tIHRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjbGllbnQga2VybmVsLVZlbnVzIGludGVyZmFjZS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb246CisgIGh0dHA6Ly93d3cuY29kYS5jcy5jbXUuZWR1CitGb3IgdXNlciBsZXZlbCBzb2Z0d2FyZSBuZWVkZWQgdG8gcnVuIENvZGE6CisgIGZ0cDovL2Z0cC5jb2RhLmNzLmNtdS5lZHUKKworVG8gcnVuIENvZGEgeW91IG5lZWQgdG8gZ2V0IGEgdXNlciBsZXZlbCBjYWNoZSBtYW5hZ2VyIGZvciB0aGUgY2xpZW50LAorbmFtZWQgVmVudXMsIGFzIHdlbGwgYXMgdG9vbHMgdG8gbWFuaXB1bGF0ZSBBQ0xzLCB0byBsb2cgaW4sIGV0Yy4gIFRoZQorY2xpZW50IG5lZWRzIHRvIGhhdmUgdGhlIENvZGEgZmlsZXN5c3RlbSBzZWxlY3RlZCBpbiB0aGUga2VybmVsCitjb25maWd1cmF0aW9uLgorCitUaGUgc2VydmVyIG5lZWRzIGEgdXNlciBsZXZlbCBzZXJ2ZXIgYW5kIGF0IHByZXNlbnQgZG9lcyBub3QgZGVwZW5kIG9uCitrZXJuZWwgc3VwcG9ydC4KKworCisKKworCisKKworICBUaGUgVmVudXMga2VybmVsIGludGVyZmFjZQorICBQZXRlciBKLiBCcmFhbQorICB2MS4wLCBOb3YgOSwgMTk5NworCisgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmVudXMgYW5kIGtlcm5lbAorICBsZXZlbCBmaWxlc3lzdGVtIGNvZGUgbmVlZGVkIGZvciB0aGUgb3BlcmF0aW9uIG9mIHRoZSBDb2RhIGZpbGUgc3lzLQorICB0ZW0uICBUaGlzIGRvY3VtZW50IHZlcnNpb24gaXMgbWVhbnQgdG8gZGVzY3JpYmUgdGhlIGN1cnJlbnQgaW50ZXJmYWNlCisgICh2ZXJzaW9uIDEuMCkgYXMgd2VsbCBhcyBpbXByb3ZlbWVudHMgd2UgZW52aXNhZ2UuCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICBUYWJsZSBvZiBDb250ZW50cworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIDEuIEludHJvZHVjdGlvbgorCisgIDIuIFNlcnZpY2luZyBDb2RhIGZpbGVzeXN0ZW0gY2FsbHMKKworICAzLiBUaGUgbWVzc2FnZSBsYXllcgorCisgICAgIDMuMSBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzCisKKyAgNC4gVGhlIGludGVyZmFjZSBhdCB0aGUgY2FsbCBsZXZlbAorCisgICAgIDQuMSBEYXRhIHN0cnVjdHVyZXMgc2hhcmVkIGJ5IHRoZSBrZXJuZWwgYW5kIFZlbnVzCisgICAgIDQuMiBUaGUgcGlvY3RsIGludGVyZmFjZQorICAgICA0LjMgcm9vdAorICAgICA0LjQgbG9va3VwCisgICAgIDQuNSBnZXRhdHRyCisgICAgIDQuNiBzZXRhdHRyCisgICAgIDQuNyBhY2Nlc3MKKyAgICAgNC44IGNyZWF0ZQorICAgICA0LjkgbWtkaXIKKyAgICAgNC4xMCBsaW5rCisgICAgIDQuMTEgc3ltbGluaworICAgICA0LjEyIHJlbW92ZQorICAgICA0LjEzIHJtZGlyCisgICAgIDQuMTQgcmVhZGxpbmsKKyAgICAgNC4xNSBvcGVuCisgICAgIDQuMTYgY2xvc2UKKyAgICAgNC4xNyBpb2N0bAorICAgICA0LjE4IHJlbmFtZQorICAgICA0LjE5IHJlYWRkaXIKKyAgICAgNC4yMCB2Z2V0CisgICAgIDQuMjEgZnN5bmMKKyAgICAgNC4yMiBpbmFjdGl2ZQorICAgICA0LjIzIHJkd3IKKyAgICAgNC4yNCBvZHltb3VudAorICAgICA0LjI1IG9keV9sb29rdXAKKyAgICAgNC4yNiBvZHlfZXhwYW5kCisgICAgIDQuMjcgcHJlZmV0Y2gKKyAgICAgNC4yOCBzaWduYWwKKworICA1LiBUaGUgbWluaWNhY2hlIGFuZCBkb3duY2FsbHMKKworICAgICA1LjEgSU5WQUxJREFURQorICAgICA1LjIgRkxVU0gKKyAgICAgNS4zIFBVUkdFVVNFUgorICAgICA1LjQgWkFQRklMRQorICAgICA1LjUgWkFQRElSCisgICAgIDUuNiBaQVBWTk9ERQorICAgICA1LjcgUFVSR0VGSUQKKyAgICAgNS44IFJFUExBQ0UKKworICA2LiBJbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cAorCisgICAgIDYuMSBSZXF1aXJlbWVudHMKKworCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgMHdwYWdlCisKKyAgMQgxLgguICBJCEluCG50CHRyCHJvCG9kCGR1CHVjCGN0CHRpCGlvCG9uCG4KKworCisKKyAgQSBrZXkgY29tcG9uZW50IGluIHRoZSBDb2RhIERpc3RyaWJ1dGVkIEZpbGUgU3lzdGVtIGlzIHRoZSBjYWNoZQorICBtYW5hZ2VyLCBfCFZfCGVfCG5fCHVfCHMuCisKKworICBXaGVuIHByb2Nlc3NlcyBvbiBhIENvZGEgZW5hYmxlZCBzeXN0ZW0gYWNjZXNzIGZpbGVzIGluIHRoZSBDb2RhCisgIGZpbGVzeXN0ZW0sIHJlcXVlc3RzIGFyZSBkaXJlY3RlZCBhdCB0aGUgZmlsZXN5c3RlbSBsYXllciBpbiB0aGUKKyAgb3BlcmF0aW5nIHN5c3RlbS4gVGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBjb21tdW5pY2F0ZSB3aXRoIFZlbnVzIHRvCisgIHNlcnZpY2UgdGhlIHJlcXVlc3QgZm9yIHRoZSBwcm9jZXNzLiAgVmVudXMgbWFuYWdlcyBhIHBlcnNpc3RlbnQKKyAgY2xpZW50IGNhY2hlIGFuZCBtYWtlcyByZW1vdGUgcHJvY2VkdXJlIGNhbGxzIHRvIENvZGEgZmlsZSBzZXJ2ZXJzIGFuZAorICByZWxhdGVkIHNlcnZlcnMgKHN1Y2ggYXMgYXV0aGVudGljYXRpb24gc2VydmVycykgdG8gc2VydmljZSB0aGVzZQorICByZXF1ZXN0cyBpdCByZWNlaXZlcyBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgV2hlbiBWZW51cyBoYXMKKyAgc2VydmljZWQgYSByZXF1ZXN0IGl0IHJlcGxpZXMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2l0aCBhcHByb3ByaWF0ZQorICByZXR1cm4gY29kZXMsIGFuZCBvdGhlciBkYXRhIHJlbGF0ZWQgdG8gdGhlIHJlcXVlc3QuICBPcHRpb25hbGx5IHRoZQorICBrZXJuZWwgc3VwcG9ydCBmb3IgQ29kYSBtYXkgbWFpbnRhaW4gYSBtaW5pY2FjaGUgb2YgcmVjZW50bHkgcHJvY2Vzc2VkCisgIHJlcXVlc3RzIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgaW50ZXJhY3Rpb25zIHdpdGggVmVudXMuICBWZW51cworICBwb3NzZXNzZXMgdGhlIGZhY2lsaXR5IHRvIGluZm9ybSB0aGUga2VybmVsIHdoZW4gZWxlbWVudHMgZnJvbSBpdHMKKyAgbWluaWNhY2hlIGFyZSBubyBsb25nZXIgdmFsaWQuCisKKyAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgcHJlY2lzZWx5IHRoaXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZQorICBrZXJuZWwgYW5kIFZlbnVzLiAgVGhlIGRlZmluaXRpb25zIG9mIHNvIGNhbGxlZCB1cGNhbGxzIGFuZCBkb3duY2FsbHMKKyAgd2lsbCBiZSBnaXZlbiB3aXRoIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgdGhleSBoYW5kbGUuIFdlIHNoYWxsIGFsc28KKyAgZGVzY3JpYmUgdGhlIHNlbWFudGljIGludmFyaWFudHMgcmVzdWx0aW5nIGZyb20gdGhlIGNhbGxzLgorCisgIEhpc3RvcmljYWxseSBDb2RhIHdhcyBpbXBsZW1lbnRlZCBpbiBhIEJTRCBmaWxlIHN5c3RlbSBpbiBNYWNoIDIuNi4KKyAgVGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIFZlbnVzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgQlNECisgIFZGUyBpbnRlcmZhY2UuICBTaW1pbGFyIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQsIGFuZCB0aGUgZm9ybWF0IG9mCisgIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm5lZCBkYXRhIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgQlNEIFZGUy4gIFRoaXMKKyAgbGVhZHMgdG8gYW4gYWxtb3N0IG5hdHVyYWwgZW52aXJvbm1lbnQgZm9yIGltcGxlbWVudGluZyBhIGtlcm5lbC1sZXZlbAorICBmaWxlc3lzdGVtIGRyaXZlciBmb3IgQ29kYSBpbiBhIEJTRCBzeXN0ZW0uICBIb3dldmVyLCBvdGhlciBvcGVyYXRpbmcKKyAgc3lzdGVtcyBzdWNoIGFzIExpbnV4IGFuZCBXaW5kb3dzIDk1IGFuZCBOVCBoYXZlIHZpcnR1YWwgZmlsZXN5c3RlbQorICB3aXRoIGRpZmZlcmVudCBpbnRlcmZhY2VzLgorCisgIFRvIGltcGxlbWVudCBDb2RhIG9uIHRoZXNlIHN5c3RlbXMgc29tZSByZXZlcnNlIGVuZ2luZWVyaW5nIG9mIHRoZQorICBWZW51cy9LZXJuZWwgcHJvdG9jb2wgaXMgbmVjZXNzYXJ5LiAgQWxzbyBpdCBjYW1lIHRvIGxpZ2h0IHRoYXQgb3RoZXIKKyAgc3lzdGVtcyBjb3VsZCBwcm9maXQgc2lnbmlmaWNhbnRseSBmcm9tIGNlcnRhaW4gc21hbGwgb3B0aW1pemF0aW9ucworICBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgcHJvdG9jb2wuIFRvIGZhY2lsaXRhdGUgdGhpcyB3b3JrIGFzIHdlbGwgYXMKKyAgdG8gbWFrZSBmdXR1cmUgcG9ydHMgZWFzaWVyLCBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmVudXMgYW5kIHRoZQorICBrZXJuZWwgc2hvdWxkIGJlIGRvY3VtZW50ZWQgaW4gZ3JlYXQgZGV0YWlsLiAgVGhpcyBpcyB0aGUgYWltIG9mIHRoaXMKKyAgZG9jdW1lbnQuCisKKyAgMHdwYWdlCisKKyAgMggyLgguICBTCFNlCGVyCHJ2CHZpCGljCGNpCGluCG5nCGcgQwhDbwhvZAhkYQhhIGYIZmkIaWwIbGUIZXMIc3kIeXMIc3QIdGUIZW0IbSBjCGNhCGFsCGxsCGxzCHMKKworICBUaGUgc2VydmljZSBvZiBhIHJlcXVlc3QgZm9yIGEgQ29kYSBmaWxlIHN5c3RlbSBzZXJ2aWNlIG9yaWdpbmF0ZXMgaW4KKyAgYSBwcm9jZXNzIFAIUCB3aGljaCBhY2Nlc3NpbmcgYSBDb2RhIGZpbGUuIEl0IG1ha2VzIGEgc3lzdGVtIGNhbGwgd2hpY2gKKyAgdHJhcHMgdG8gdGhlIE9TIGtlcm5lbC4gRXhhbXBsZXMgb2Ygc3VjaCBjYWxscyB0cmFwcGluZyB0byB0aGUga2VybmVsCisgIGFyZSBfCHJfCGVfCGFfCGRfCCwgXwh3XwhyXwhpXwh0XwhlXwgsIF8Ib18IcF8IZV8Ibl8ILCBfCGNfCGxfCG9fCHNfCGVfCCwgXwhjXwhyXwhlXwhhXwh0XwhlXwgsIF8IbV8Ia18IZF8IaV8Icl8ILCBfCHJfCG1fCGRfCGlfCHJfCCwgXwhjXwhoXwhtXwhvXwhkIGluIGEgVW5peAorICBjb250ZXh0LiAgU2ltaWxhciBjYWxscyBleGlzdCBpbiB0aGUgV2luMzIgZW52aXJvbm1lbnQsIGFuZCBhcmUgbmFtZWQKKyAgXwhDXwhyXwhlXwhhXwh0XwhlXwhGXwhpXwhsXwhlXwgsIC4KKworICBHZW5lcmFsbHkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcyB0aGUgcmVxdWVzdCBpbiBhIHZpcnR1YWwKKyAgZmlsZXN5c3RlbSAoVkZTKSBsYXllciwgd2hpY2ggaXMgbmFtZWQgSS9PIE1hbmFnZXIgaW4gTlQgYW5kIElGUworICBtYW5hZ2VyIGluIFdpbmRvd3MgOTUuICBUaGUgVkZTIGlzIHJlc3BvbnNpYmxlIGZvciBwYXJ0aWFsIHByb2Nlc3NpbmcKKyAgb2YgdGhlIHJlcXVlc3QgYW5kIGZvciBsb2NhdGluZyB0aGUgc3BlY2lmaWMgZmlsZXN5c3RlbShzKSB3aGljaCB3aWxsCisgIHNlcnZpY2UgcGFydHMgb2YgdGhlIHJlcXVlc3QuICBVc3VhbGx5IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGF0aAorICBhc3Npc3RzIGluIGxvY2F0aW5nIHRoZSBjb3JyZWN0IEZTIGRyaXZlcnMuICBTb21ldGltZXMgYWZ0ZXIgZXh0ZW5zaXZlCisgIHByZS1wcm9jZXNzaW5nLCB0aGUgVkZTIHN0YXJ0cyBpbnZva2luZyBleHBvcnRlZCByb3V0aW5lcyBpbiB0aGUgRlMKKyAgZHJpdmVyLiAgVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIEZTIHNwZWNpZmljIHByb2Nlc3Npbmcgb2YgdGhlCisgIHJlcXVlc3Qgc3RhcnRzLCBhbmQgaGVyZSB0aGUgQ29kYSBzcGVjaWZpYyBrZXJuZWwgY29kZSBjb21lcyBpbnRvCisgIHBsYXkuCisKKyAgVGhlIEZTIGxheWVyIGZvciBDb2RhIG11c3QgZXhwb3NlIGFuZCBpbXBsZW1lbnQgc2V2ZXJhbCBpbnRlcmZhY2VzLgorICBGaXJzdCBhbmQgZm9yZW1vc3QgdGhlIFZGUyBtdXN0IGJlIGFibGUgdG8gbWFrZSBhbGwgbmVjZXNzYXJ5IGNhbGxzIHRvCisgIHRoZSBDb2RhIEZTIGxheWVyLCBzbyB0aGUgQ29kYSBGUyBkcml2ZXIgbXVzdCBleHBvc2UgdGhlIFZGUyBpbnRlcmZhY2UKKyAgYXMgYXBwbGljYWJsZSBpbiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVGhlc2UgZGlmZmVyIHZlcnkgc2lnbmlmaWNhbnRseQorICBhbW9uZyBvcGVyYXRpbmcgc3lzdGVtcywgYnV0IHNoYXJlIGZlYXR1cmVzIHN1Y2ggYXMgZmFjaWxpdGllcyB0bworICByZWFkL3dyaXRlIGFuZCBjcmVhdGUgYW5kIHJlbW92ZSBvYmplY3RzLiAgVGhlIENvZGEgRlMgbGF5ZXIgc2VydmljZXMKKyAgc3VjaCBWRlMgcmVxdWVzdHMgYnkgaW52b2tpbmcgb25lIG9yIG1vcmUgd2VsbCBkZWZpbmVkIHNlcnZpY2VzCisgIG9mZmVyZWQgYnkgdGhlIGNhY2hlIG1hbmFnZXIgVmVudXMuICBXaGVuIHRoZSByZXBsaWVzIGZyb20gVmVudXMgaGF2ZQorICBjb21lIGJhY2sgdG8gdGhlIEZTIGRyaXZlciwgc2VydmljaW5nIG9mIHRoZSBWRlMgY2FsbCBjb250aW51ZXMgYW5kCisgIGZpbmlzaGVzIHdpdGggYSByZXBseSB0byB0aGUga2VybmVsJ3MgVkZTLiBGaW5hbGx5IHRoZSBWRlMgbGF5ZXIKKyAgcmV0dXJucyB0byB0aGUgcHJvY2Vzcy4KKworICBBcyBhIHJlc3VsdCBvZiB0aGlzIGRlc2lnbiBhIGJhc2ljIGludGVyZmFjZSBleHBvc2VkIGJ5IHRoZSBGUyBkcml2ZXIKKyAgbXVzdCBhbGxvdyBWZW51cyB0byBtYW5hZ2UgbWVzc2FnZSB0cmFmZmljLiAgSW4gcGFydGljdWxhciBWZW51cyBtdXN0CisgIGJlIGFibGUgdG8gcmV0cmlldmUgYW5kIHBsYWNlIG1lc3NhZ2VzIGFuZCB0byBiZSBub3RpZmllZCBvZiB0aGUKKyAgYXJyaXZhbCBvZiBhIG5ldyBtZXNzYWdlLiBUaGUgbm90aWZpY2F0aW9uIG11c3QgYmUgdGhyb3VnaCBhIG1lY2hhbmlzbQorICB3aGljaCBkb2VzIG5vdCBibG9jayBWZW51cyBzaW5jZSBWZW51cyBtdXN0IGF0dGVuZCB0byBvdGhlciB0YXNrcyBldmVuCisgIHdoZW4gbm8gbWVzc2FnZXMgYXJlIHdhaXRpbmcgb3IgYmVpbmcgcHJvY2Vzc2VkLgorCisKKworCisKKworICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlcyBvZiB0aGUgQ29kYSBGUyBEcml2ZXIKKworICBGdXJ0aGVybW9yZSB0aGUgRlMgbGF5ZXIgcHJvdmlkZXMgZm9yIGEgc3BlY2lhbCBwYXRoIG9mIGNvbW11bmljYXRpb24KKyAgYmV0d2VlbiBhIHVzZXIgcHJvY2VzcyBhbmQgVmVudXMsIGNhbGxlZCB0aGUgcGlvY3RsIGludGVyZmFjZS4gVGhlCisgIHBpb2N0bCBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgQ29kYSBzcGVjaWZpYyBzZXJ2aWNlcywgc3VjaCBhcworICByZXF1ZXN0aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJzaXN0ZW50IGNhY2hlIG1hbmFnZWQgYnkKKyAgVmVudXMuIEhlcmUgdGhlIGludm9sdmVtZW50IG9mIHRoZSBrZXJuZWwgaXMgbWluaW1hbC4gIEl0IGlkZW50aWZpZXMKKyAgdGhlIGNhbGxpbmcgcHJvY2VzcyBhbmQgcGFzc2VzIHRoZSBpbmZvcm1hdGlvbiBvbiB0byBWZW51cy4gIFdoZW4KKyAgVmVudXMgcmVwbGllcyB0aGUgcmVzcG9uc2UgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlciBpbiB1bm1vZGlmaWVkCisgIGZvcm0uCisKKyAgRmluYWxseSBWZW51cyBhbGxvd3MgdGhlIGtlcm5lbCBGUyBkcml2ZXIgdG8gY2FjaGUgdGhlIHJlc3VsdHMgZnJvbQorICBjZXJ0YWluIHNlcnZpY2VzLiAgVGhpcyBpcyBkb25lIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBjb250ZXh0IHN3aXRjaGVzCisgIGFuZCByZXN1bHRzIGluIGFuIGVmZmljaWVudCBzeXN0ZW0uICBIb3dldmVyLCBWZW51cyBtYXkgYWNxdWlyZQorICBpbmZvcm1hdGlvbiwgZm9yIGV4YW1wbGUgZnJvbSB0aGUgbmV0d29yayB3aGljaCBpbXBsaWVzIHRoYXQgY2FjaGVkCisgIGluZm9ybWF0aW9uIG11c3QgYmUgZmx1c2hlZCBvciByZXBsYWNlZC4gVmVudXMgdGhlbiBtYWtlcyBhIGRvd25jYWxsCisgIHRvIHRoZSBDb2RhIEZTIGxheWVyIHRvIHJlcXVlc3QgZmx1c2hlcyBvciB1cGRhdGVzIGluIHRoZSBjYWNoZS4gIFRoZQorICBrZXJuZWwgRlMgZHJpdmVyIGhhbmRsZXMgc3VjaCByZXF1ZXN0cyBzeW5jaHJvbm91c2x5LgorCisgIEFtb25nIHRoZXNlIGludGVyZmFjZXMgdGhlIFZGUyBpbnRlcmZhY2UgYW5kIHRoZSBmYWNpbGl0eSB0byBwbGFjZSwKKyAgcmVjZWl2ZSBhbmQgYmUgbm90aWZpZWQgb2YgbWVzc2FnZXMgYXJlIHBsYXRmb3JtIHNwZWNpZmljLiAgV2Ugd2lsbAorICBub3QgZ28gaW50byB0aGUgY2FsbHMgZXhwb3J0ZWQgdG8gdGhlIFZGUyBsYXllciBidXQgd2Ugd2lsbCBzdGF0ZSB0aGUKKyAgcmVxdWlyZW1lbnRzIG9mIHRoZSBtZXNzYWdlIGV4Y2hhbmdlIG1lY2hhbmlzbS4KKworICAwd3BhZ2UKKworICAzCDMuCC4gIFQIVGgIaGUIZSBtCG1lCGVzCHNzCHNhCGFnCGdlCGUgbAhsYQhheQh5ZQhlcghyCisKKworCisgIEF0IHRoZSBsb3dlc3QgbGV2ZWwgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBWZW51cyBhbmQgdGhlIEZTIGRyaXZlcgorICBwcm9jZWVkcyB0aHJvdWdoIG1lc3NhZ2VzLiAgVGhlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcworICByZXF1ZXN0aW5nIENvZGEgZmlsZSBzZXJ2aWNlIGFuZCBWZW51cyByZWxpZXMgb24gYmxvY2tpbmcgYW5kIHdha2luZworICB1cCBwcm9jZXNzZXMuICBUaGUgQ29kYSBGUyBkcml2ZXIgcHJvY2Vzc2VzIFZGUy0gYW5kIHBpb2N0bC1yZXF1ZXN0cworICBvbiBiZWhhbGYgb2YgYSBwcm9jZXNzIFAsIGNyZWF0ZXMgbWVzc2FnZXMgZm9yIFZlbnVzLCBhd2FpdHMgcmVwbGllcworICBhbmQgZmluYWxseSByZXR1cm5zIHRvIHRoZSBjYWxsZXIuICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGV4Y2hhbmdlCisgIG9mIG1lc3NhZ2VzIGlzIHBsYXRmb3JtIHNwZWNpZmljLCBidXQgdGhlIHNlbWFudGljcyBoYXZlIChzbyBmYXIpCisgIGFwcGVhcmVkIHRvIGJlIGdlbmVyYWxseSBhcHBsaWNhYmxlLiAgRGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIGJ5IHRoZQorICBGUyBEcml2ZXIgaW4ga2VybmVsIG1lbW9yeSBvbiBiZWhhbGYgb2YgUCBhbmQgY29waWVkIHRvIHVzZXIgbWVtb3J5IGluCisgIFZlbnVzLgorCisgIFRoZSBGUyBEcml2ZXIgd2hpbGUgc2VydmljaW5nIFAgbWFrZXMgdXBjYWxscyB0byBWZW51cy4gIFN1Y2ggYW4KKyAgdXBjYWxsIGlzIGRpc3BhdGNoZWQgdG8gVmVudXMgYnkgY3JlYXRpbmcgYSBtZXNzYWdlIHN0cnVjdHVyZS4gIFRoZQorICBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGlkZW50aWZpY2F0aW9uIG9mIFAsIHRoZSBtZXNzYWdlIHNlcXVlbmNlCisgIG51bWJlciwgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgYW5kIGEgcG9pbnRlciB0byB0aGUgZGF0YSBpbiBrZXJuZWwKKyAgbWVtb3J5IGZvciB0aGUgcmVxdWVzdC4gIFNpbmNlIHRoZSBkYXRhIGJ1ZmZlciBpcyByZS11c2VkIHRvIGhvbGQgdGhlCisgIHJlcGx5IGZyb20gVmVudXMsIHRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBzaXplIG9mIHRoZSByZXBseS4gIEEgZmxhZ3MKKyAgZmllbGQgaXMgdXNlZCBpbiB0aGUgbWVzc2FnZSB0byBwcmVjaXNlbHkgcmVjb3JkIHRoZSBzdGF0dXMgb2YgdGhlCisgIG1lc3NhZ2UuICBBZGRpdGlvbmFsIHBsYXRmb3JtIGRlcGVuZGVudCBzdHJ1Y3R1cmVzIGludm9sdmUgcG9pbnRlcnMgdG8KKyAgZGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVzc2FnZSBvbiBxdWV1ZXMgYW5kIHBvaW50ZXJzIHRvCisgIHN5bmNocm9uaXphdGlvbiBvYmplY3RzLiAgSW4gdGhlIHVwY2FsbCByb3V0aW5lIHRoZSBtZXNzYWdlIHN0cnVjdHVyZQorICBpcyBmaWxsZWQgaW4sIGZsYWdzIGFyZSBzZXQgdG8gMCwgYW5kIGl0IGlzIHBsYWNlZCBvbiB0aGUgXwhwXwhlXwhuXwhkXwhpXwhuXwhnCisgIHF1ZXVlLiAgVGhlIHJvdXRpbmUgY2FsbGluZyB1cGNhbGwgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlCisgIGRhdGEgYnVmZmVyOyBpdHMgc3RydWN0dXJlIHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKyAgQSBmYWNpbGl0eSBtdXN0IGV4aXN0IHRvIG5vdGlmeSBWZW51cyB0aGF0IHRoZSBtZXNzYWdlIGhhcyBiZWVuCisgIGNyZWF0ZWQsIGFuZCBpbXBsZW1lbnRlZCB1c2luZyBhdmFpbGFibGUgc3luY2hyb25pemF0aW9uIG9iamVjdHMgaW4KKyAgdGhlIE9TLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBkb25lIGluIHRoZSB1cGNhbGwgY29udGV4dCBvZiB0aGUgcHJvY2VzcworICBQLiBXaGVuIHRoZSBtZXNzYWdlIGlzIG9uIHRoZSBwZW5kaW5nIHF1ZXVlLCBwcm9jZXNzIFAgY2Fubm90IHByb2NlZWQKKyAgaW4gdXBjYWxsLiAgVGhlIChrZXJuZWwgbW9kZSkgcHJvY2Vzc2luZyBvZiBQIGluIHRoZSBmaWxlc3lzdGVtCisgIHJlcXVlc3Qgcm91dGluZSBtdXN0IGJlIHN1c3BlbmRlZCB1bnRpbCBWZW51cyBoYXMgcmVwbGllZC4gIFRoZXJlZm9yZQorICB0aGUgY2FsbGluZyB0aHJlYWQgaW4gUCBpcyBibG9ja2VkIGluIHVwY2FsbC4gIEEgcG9pbnRlciBpbiB0aGUKKyAgbWVzc2FnZSBzdHJ1Y3R1cmUgd2lsbCBsb2NhdGUgdGhlIHN5bmNocm9uaXphdGlvbiBvYmplY3Qgb24gd2hpY2ggUCBpcworICBzbGVlcGluZy4KKworICBWZW51cyBkZXRlY3RzIHRoZSBub3RpZmljYXRpb24gdGhhdCBhIG1lc3NhZ2UgaGFzIGFycml2ZWQsIGFuZCB0aGUgRlMKKyAgZHJpdmVyIGFsbG93IFZlbnVzIHRvIHJldHJpZXZlIHRoZSBtZXNzYWdlIHdpdGggYSBnZXRtc2dfZnJvbV9rZXJuZWwKKyAgY2FsbC4gVGhpcyBhY3Rpb24gZmluaXNoZXMgaW4gdGhlIGtlcm5lbCBieSBwdXR0aW5nIHRoZSBtZXNzYWdlIG9uIHRoZQorICBxdWV1ZSBvZiBwcm9jZXNzaW5nIG1lc3NhZ2VzIGFuZCBzZXR0aW5nIGZsYWdzIHRvIFJFQUQuICBWZW51cyBpcworICBwYXNzZWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhIGJ1ZmZlci4gVGhlIGdldG1zZ19mcm9tX2tlcm5lbCBjYWxsCisgIG5vdyByZXR1cm5zIGFuZCBWZW51cyBwcm9jZXNzZXMgdGhlIHJlcXVlc3QuCisKKyAgQXQgc29tZSBsYXRlciBwb2ludCB0aGUgRlMgZHJpdmVyIHJlY2VpdmVzIGEgbWVzc2FnZSBmcm9tIFZlbnVzLAorICBuYW1lbHkgd2hlbiBWZW51cyBjYWxscyBzZW5kbXNnX3RvX2tlcm5lbC4gIEF0IHRoaXMgbW9tZW50IHRoZSBDb2RhIEZTCisgIGRyaXZlciBsb29rcyBhdCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2UgYW5kIGRlY2lkZXMgaWY6CisKKworICArCG8gIHRoZSBtZXNzYWdlIGlzIGEgcmVwbHkgZm9yIGEgc3VzcGVuZGVkIHRocmVhZCBQLiAgSWYgc28gaXQgcmVtb3ZlcworICAgICB0aGUgbWVzc2FnZSBmcm9tIHRoZSBwcm9jZXNzaW5nIHF1ZXVlIGFuZCBtYXJrcyB0aGUgbWVzc2FnZSBhcworICAgICBXUklUVEVOLiAgRmluYWxseSwgdGhlIEZTIGRyaXZlciB1bmJsb2NrcyBQIChzdGlsbCBpbiB0aGUga2VybmVsCisgICAgIG1vZGUgY29udGV4dCBvZiBWZW51cykgYW5kIHRoZSBzZW5kbXNnX3RvX2tlcm5lbCBjYWxsIHJldHVybnMgdG8KKyAgICAgVmVudXMuICBUaGUgcHJvY2VzcyBQIHdpbGwgYmUgc2NoZWR1bGVkIGF0IHNvbWUgcG9pbnQgYW5kIGNvbnRpbnVlcworICAgICBwcm9jZXNzaW5nIGl0cyB1cGNhbGwgd2l0aCB0aGUgZGF0YSBidWZmZXIgcmVwbGFjZWQgd2l0aCB0aGUgcmVwbHkKKyAgICAgZnJvbSBWZW51cy4KKworICArCG8gIFRoZSBtZXNzYWdlIGlzIGEgXwhkXwhvXwh3XwhuXwhjXwhhXwhsXwhsLiAgQSBkb3duY2FsbCBpcyBhIHJlcXVlc3QgZnJvbSBWZW51cyB0bworICAgICB0aGUgRlMgRHJpdmVyLiBUaGUgRlMgZHJpdmVyIHByb2Nlc3NlcyB0aGUgcmVxdWVzdCBpbW1lZGlhdGVseQorICAgICAodXN1YWxseSBhIGNhY2hlIGV2aWN0aW9uIG9yIHJlcGxhY2VtZW50KSBhbmQgd2hlbiBpdCBmaW5pc2hlcworICAgICBzZW5kbXNnX3RvX2tlcm5lbCByZXR1cm5zLgorCisgIE5vdyBQIGF3YWtlcyBhbmQgY29udGludWVzIHByb2Nlc3NpbmcgdXBjYWxsLiAgVGhlcmUgYXJlIHNvbWUKKyAgc3VidGxldGllcyB0byB0YWtlIGFjY291bnQgb2YuIEZpcnN0IFAgd2lsbCBkZXRlcm1pbmUgaWYgaXQgd2FzIHdva2VuCisgIHVwIGluIHVwY2FsbCBieSBhIHNpZ25hbCBmcm9tIHNvbWUgb3RoZXIgc291cmNlIChmb3IgZXhhbXBsZSBhbgorICBhdHRlbXB0IHRvIHRlcm1pbmF0ZSBQKSBvciBhcyBpcyBub3JtYWxseSB0aGUgY2FzZSBieSBWZW51cyBpbiBpdHMKKyAgc2VuZG1zZ190b19rZXJuZWwgY2FsbC4gIEluIHRoZSBub3JtYWwgY2FzZSwgdGhlIHVwY2FsbCByb3V0aW5lIHdpbGwKKyAgZGVhbGxvY2F0ZSB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgYW5kIHJldHVybi4gIFRoZSBGUyByb3V0aW5lIGNhbiBwcm9jZWVkCisgIHdpdGggaXRzIHByb2Nlc3NpbmcuCisKKworCisKKworCisKKyAgICAgICAgICAgICAgICAgICAgICBTbGVlcGluZyBhbmQgSVBDIGFycmFuZ2VtZW50cworCisgIEluIGNhc2UgUCBpcyB3b2tlbiB1cCBieSBhIHNpZ25hbCBhbmQgbm90IGJ5IFZlbnVzLCBpdCB3aWxsIGZpcnN0IGxvb2sKKyAgYXQgdGhlIGZsYWdzIGZpZWxkLiAgSWYgdGhlIG1lc3NhZ2UgaXMgbm90IHlldCBSRUFELCB0aGUgcHJvY2VzcyBQIGNhbgorICBoYW5kbGUgaXRzIHNpZ25hbCB3aXRob3V0IG5vdGlmeWluZyBWZW51cy4gIElmIFZlbnVzIGhhcyBSRUFELCBhbmQKKyAgdGhlIHJlcXVlc3Qgc2hvdWxkIG5vdCBiZSBwcm9jZXNzZWQsIFAgY2FuIHNlbmQgVmVudXMgYSBzaWduYWwgbWVzc2FnZQorICB0byBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBkaXNyZWdhcmQgdGhlIHByZXZpb3VzIG1lc3NhZ2UuICBTdWNoCisgIHNpZ25hbHMgYXJlIHB1dCBpbiB0aGUgcXVldWUgYXQgdGhlIGhlYWQsIGFuZCByZWFkIGZpcnN0IGJ5IFZlbnVzLiAgSWYKKyAgdGhlIG1lc3NhZ2UgaXMgYWxyZWFkeSBtYXJrZWQgYXMgV1JJVFRFTiBpdCBpcyB0b28gbGF0ZSB0byBzdG9wIHRoZQorICBwcm9jZXNzaW5nLiAgVGhlIFZGUyByb3V0aW5lIHdpbGwgbm93IGNvbnRpbnVlLiAgKC0tIElmIGEgVkZTIHJlcXVlc3QKKyAgaW52b2x2ZXMgbW9yZSB0aGFuIG9uZSB1cGNhbGwsIHRoaXMgY2FuIGxlYWQgdG8gY29tcGxpY2F0ZWQgc3RhdGUsIGFuCisgIGV4dHJhIGZpZWxkICJoYW5kbGVfc2lnbmFscyIgY291bGQgYmUgYWRkZWQgaW4gdGhlIG1lc3NhZ2Ugc3RydWN0dXJlCisgIHRvIGluZGljYXRlIHBvaW50cyBvZiBubyByZXR1cm4gaGF2ZSBiZWVuIHBhc3NlZC4tLSkKKworCisKKyAgMwgzLgguMQgxLgguICBJCEltCG1wCHBsCGxlCGVtCG1lCGVuCG50CHRhCGF0CHRpCGlvCG9uCG4gZAhkZQhldAh0YQhhaQhpbAhscwhzCisKKyAgVGhlIFVuaXggaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZWNoYW5pc20gaGFzIGJlZW4gdGhyb3VnaCB0aGUKKyAgaW1wbGVtZW50YXRpb24gb2YgYSBjaGFyYWN0ZXIgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBDb2RhLiAgVmVudXMKKyAgcmV0cmlldmVzIG1lc3NhZ2VzIGJ5IGRvaW5nIGEgcmVhZCBvbiB0aGUgZGV2aWNlLCByZXBsaWVzIGFyZSBzZW50CisgIHdpdGggYSB3cml0ZSBhbmQgbm90aWZpY2F0aW9uIGlzIHRocm91Z2ggdGhlIHNlbGVjdCBzeXN0ZW0gY2FsbCBvbiB0aGUKKyAgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZGV2aWNlLiAgVGhlIHByb2Nlc3MgUCBpcyBrZXB0IHdhaXRpbmcgb24gYW4KKyAgaW50ZXJydXB0aWJsZSB3YWl0IHF1ZXVlIG9iamVjdC4KKworICBJbiBXaW5kb3dzIE5UIGFuZCB0aGUgRFBNSSBXaW5kb3dzIDk1IGltcGxlbWVudGF0aW9uIGEgRGV2aWNlSW9Db250cm9sCisgIGNhbGwgaXMgdXNlZC4gIFRoZSBEZXZpY2VJb0NvbnRyb2wgY2FsbCBpcyBkZXNpZ25lZCB0byBjb3B5IGJ1ZmZlcnMKKyAgZnJvbSB1c2VyIG1lbW9yeSB0byBrZXJuZWwgbWVtb3J5IHdpdGggT1BDT0RFUy4gVGhlIHNlbmRtc2dfdG9fa2VybmVsCisgIGlzIGlzc3VlZCBhcyBhIHN5bmNocm9ub3VzIGNhbGwsIHdoaWxlIHRoZSBnZXRtc2dfZnJvbV9rZXJuZWwgY2FsbCBpcworICBhc3luY2hyb25vdXMuICBXaW5kb3dzIEV2ZW50T2JqZWN0cyBhcmUgdXNlZCBmb3Igbm90aWZpY2F0aW9uIG9mCisgIG1lc3NhZ2UgYXJyaXZhbC4gIFRoZSBwcm9jZXNzIFAgaXMga2VwdCB3YWl0aW5nIG9uIGEgS2VybmVsRXZlbnQKKyAgb2JqZWN0IGluIE5UIGFuZCBhIHNlbWFwaG9yZSBpbiBXaW5kb3dzIDk1LgorCisgIDB3cGFnZQorCisgIDQINC4ILiAgVAhUaAhoZQhlIGkIaW4IbnQIdGUIZXIIcmYIZmEIYWMIY2UIZSBhCGF0CHQgdAh0aAhoZQhlIGMIY2EIYWwIbGwIbCBsCGxlCGV2CHZlCGVsCGwKKworCisgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHVwY2FsbHMgYSBDb2RhIEZTIGRyaXZlciBjYW4gbWFrZSB0byBWZW51cy4KKyAgRWFjaCBvZiB0aGVzZSB1cGNhbGxzIG1ha2UgdXNlIG9mIHR3byBzdHJ1Y3R1cmVzOiBpbnB1dEFyZ3MgYW5kCisgIG91dHB1dEFyZ3MuICAgSW4gcHNldWRvIEJORiBmb3JtIHRoZSBzdHJ1Y3R1cmVzIHRha2UgdGhlIGZvbGxvd2luZworICBmb3JtOgorCisKKyAgc3RydWN0IGlucHV0QXJncyB7CisgICAgICB1X2xvbmcgb3Bjb2RlOworICAgICAgdV9sb25nIHVuaXF1ZTsgICAgIC8qIEtlZXAgbXVsdGlwbGUgb3V0c3RhbmRpbmcgbXNncyBkaXN0aW5jdCAqLworICAgICAgdV9zaG9ydCBwaWQ7ICAgICAgICAgICAgICAgICAvKiBDb21tb24gdG8gYWxsICovCisgICAgICB1X3Nob3J0IHBnaWQ7ICAgICAgICAgICAgICAgIC8qIENvbW1vbiB0byBhbGwgKi8KKyAgICAgIHN0cnVjdCBDb2RhQ3JlZCBjcmVkOyAgICAgICAgLyogQ29tbW9uIHRvIGFsbCAqLworCisgICAgICA8dW5pb24gImluIiBvZiBjYWxsIGRlcGVuZGVudCBwYXJ0cyBvZiBpbnB1dEFyZ3M+CisgIH07CisKKyAgc3RydWN0IG91dHB1dEFyZ3MgeworICAgICAgdV9sb25nIG9wY29kZTsKKyAgICAgIHVfbG9uZyB1bmlxdWU7ICAgICAgIC8qIEtlZXAgbXVsdGlwbGUgb3V0c3RhbmRpbmcgbXNncyBkaXN0aW5jdCAqLworICAgICAgdV9sb25nIHJlc3VsdDsKKworICAgICAgPHVuaW9uICJvdXQiIG9mIGNhbGwgZGVwZW5kZW50IHBhcnRzIG9mIGlucHV0QXJncz4KKyAgfTsKKworCisKKyAgQmVmb3JlIGdvaW5nIG9uIGxldCB1cyBlbHVjaWRhdGUgdGhlIHJvbGUgb2YgdGhlIHZhcmlvdXMgZmllbGRzLiBUaGUKKyAgaW5wdXRBcmdzIHN0YXJ0IHdpdGggdGhlIG9wY29kZSB3aGljaCBkZWZpbmVzIHRoZSB0eXBlIG9mIHNlcnZpY2UKKyAgcmVxdWVzdGVkIGZyb20gVmVudXMuIFRoZXJlIGFyZSBhcHByb3hpbWF0ZWx5IDMwIHVwY2FsbHMgYXQgcHJlc2VudAorICB3aGljaCB3ZSB3aWxsIGRpc2N1c3MuICAgVGhlIHVuaXF1ZSBmaWVsZCBsYWJlbHMgdGhlIGlucHV0QXJnIHdpdGggYQorICB1bmlxdWUgbnVtYmVyIHdoaWNoIHdpbGwgaWRlbnRpZnkgdGhlIG1lc3NhZ2UgdW5pcXVlbHkuICBBIHByb2Nlc3MgYW5kCisgIHByb2Nlc3MgZ3JvdXAgaWQgYXJlIHBhc3NlZC4gIEZpbmFsbHkgdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSBjYWxsZXIKKyAgYXJlIGluY2x1ZGVkLgorCisgIEJlZm9yZSBkZWx2aW5nIGludG8gdGhlIHNwZWNpZmljIGNhbGxzIHdlIG5lZWQgdG8gZGlzY3VzcyBhIHZhcmlldHkgb2YKKyAgZGF0YSBzdHJ1Y3R1cmVzIHNoYXJlZCBieSB0aGUga2VybmVsIGFuZCBWZW51cy4KKworCisKKworICA0CDQuCC4xCDEuCC4gIEQIRGEIYXQIdGEIYSBzCHN0CHRyCHJ1CHVjCGN0CHR1CHVyCHJlCGVzCHMgcwhzaAhoYQhhcghyZQhlZAhkIGIIYnkIeSB0CHRoCGhlCGUgawhrZQhlcghybghuZQhlbAhsIGEIYW4IbmQIZCBWCFZlCGVuCG51CHVzCHMKKworCisgIFRoZSBDb2RhQ3JlZCBzdHJ1Y3R1cmUgZGVmaW5lcyBhIHZhcmlldHkgb2YgdXNlciBhbmQgZ3JvdXAgaWRzIGFzCisgIHRoZXkgYXJlIHNldCBmb3IgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gVGhlIHZ1aWRfdCBhbmQgZ3VpZF90IGFyZSAzMiBiaXQKKyAgdW5zaWduZWQgaW50ZWdlcnMuICBJdCBhbHNvIGRlZmluZXMgZ3JvdXAgbWVtYmVyc2hpcCBpbiBhbiBhcnJheS4gIE9uCisgIFVuaXggdGhlIENvZGFDcmVkIGhhcyBwcm92ZW4gc3VmZmljaWVudCB0byBpbXBsZW1lbnQgZ29vZCBzZWN1cml0eQorICBzZW1hbnRpY3MgZm9yIENvZGEgYnV0IHRoZSBzdHJ1Y3R1cmUgbWF5IGhhdmUgdG8gdW5kZXJnbyBtb2RpZmljYXRpb24KKyAgZm9yIHRoZSBXaW5kb3dzIGVudmlyb25tZW50IHdoZW4gdGhlc2UgbWF0dXJlLgorCisgIHN0cnVjdCBDb2RhQ3JlZCB7CisgICAgICB2dWlkX3QgY3JfdWlkLCBjcl9ldWlkLCBjcl9zdWlkLCBjcl9mc3VpZDsgLyogUmVhbCwgZWZmZWN0aXZlLCBzZXQsIGZzIHVpZCovCisgICAgICB2Z2lkX3QgY3JfZ2lkLCBjcl9lZ2lkLCBjcl9zZ2lkLCBjcl9mc2dpZDsgLyogc2FtZSBmb3IgZ3JvdXBzICovCisgICAgICB2Z2lkX3QgY3JfZ3JvdXBzW05HUk9VUFNdOyAgICAgICAgLyogR3JvdXAgbWVtYmVyc2hpcCBmb3IgY2FsbGVyICovCisgIH07CisKKworCisgIE4ITk8IT1QIVEUIRSBJdCBpcyBxdWVzdGlvbmFibGUgaWYgd2UgbmVlZCBDb2RhQ3JlZHMgaW4gVmVudXMuIEZpbmFsbHkgVmVudXMKKyAgZG9lc24ndCBrbm93IGFib3V0IGdyb3VwcywgYWx0aG91Z2ggaXQgZG9lcyBjcmVhdGUgZmlsZXMgd2l0aCB0aGUKKyAgZGVmYXVsdCB1aWQvZ2lkLiAgUGVyaGFwcyB0aGUgbGlzdCBvZiBncm91cCBtZW1iZXJzaGlwIGlzIHN1cGVyZmx1b3VzLgorCisKKyAgVGhlIG5leHQgaXRlbSBpcyB0aGUgZnVuZGFtZW50YWwgaWRlbnRpZmllciB1c2VkIHRvIGlkZW50aWZ5IENvZGEKKyAgZmlsZXMsIHRoZSBWaWNlRmlkLiAgQSBmaWQgb2YgYSBmaWxlIHVuaXF1ZWx5IGRlZmluZXMgYSBmaWxlIG9yCisgIGRpcmVjdG9yeSBpbiB0aGUgQ29kYSBmaWxlc3lzdGVtIHdpdGhpbiBhIF8IY18IZV8IbF8IbC4gICAoLS0gQSBfCGNfCGVfCGxfCGwgaXMgYQorICBncm91cCBvZiBDb2RhIHNlcnZlcnMgYWN0aW5nIHVuZGVyIHRoZSBhZWdpcyBvZiBhIHNpbmdsZSBzeXN0ZW0KKyAgY29udHJvbCBtYWNoaW5lIG9yIFNDTS4gU2VlIHRoZSBDb2RhIEFkbWluaXN0cmF0aW9uIG1hbnVhbCBmb3IgYQorICBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcm9sZSBvZiB0aGUgU0NNLi0tKQorCisKKyAgdHlwZWRlZiBzdHJ1Y3QgVmljZUZpZCB7CisgICAgICBWb2x1bWVJZCBWb2x1bWU7CisgICAgICBWbm9kZUlkIFZub2RlOworICAgICAgVW5pcXVlX3QgVW5pcXVlOworICB9IFZpY2VGaWQ7CisKKworCisgIEVhY2ggb2YgdGhlIGNvbnN0aXR1ZW50IGZpZWxkczogVm9sdW1lSWQsIFZub2RlSWQgYW5kIFVuaXF1ZV90IGFyZQorICB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlcnMuICBXZSBlbnZpc2FnZSB0aGF0IGEgZnVydGhlciBmaWVsZCB3aWxsIG5lZWQKKyAgdG8gYmUgcHJlZml4ZWQgdG8gaWRlbnRpZnkgdGhlIENvZGEgY2VsbDsgdGhpcyB3aWxsIHByb2JhYmx5IHRha2UgdGhlCisgIGZvcm0gb2YgYSBJcHY2IHNpemUgSVAgYWRkcmVzcyBuYW1pbmcgdGhlIENvZGEgY2VsbCB0aHJvdWdoIEROUy4KKworICBUaGUgbmV4dCBpbXBvcnRhbnQgc3RydWN0dXJlIHNoYXJlZCBiZXR3ZWVuIFZlbnVzIGFuZCB0aGUga2VybmVsIGlzCisgIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBmaWxlLiAgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0bworICBleGNoYW5nZSBpbmZvcm1hdGlvbi4gIEl0IGhhcyByb29tIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBzdWNoIGFzCisgIHN1cHBvcnQgZm9yIGRldmljZSBmaWxlcyAoY3VycmVudGx5IG5vdCBwcmVzZW50IGluIENvZGEpLgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICBzdHJ1Y3QgY29kYV92YXR0ciB7CisgICAgICAgICAgZW51bSBjb2RhX3Z0eXBlIHZhX3R5cGU7ICAgICAgICAvKiB2bm9kZSB0eXBlIChmb3IgY3JlYXRlKSAqLworICAgICAgICAgIHVfc2hvcnQgICAgICAgICB2YV9tb2RlOyAgICAgICAgLyogZmlsZXMgYWNjZXNzIG1vZGUgYW5kIHR5cGUgKi8KKyAgICAgICAgICBzaG9ydCAgICAgICAgICAgdmFfbmxpbms7ICAgICAgIC8qIG51bWJlciBvZiByZWZlcmVuY2VzIHRvIGZpbGUgKi8KKyAgICAgICAgICB2dWlkX3QgICAgICAgICAgdmFfdWlkOyAgICAgICAgIC8qIG93bmVyIHVzZXIgaWQgKi8KKyAgICAgICAgICB2Z2lkX3QgICAgICAgICAgdmFfZ2lkOyAgICAgICAgIC8qIG93bmVyIGdyb3VwIGlkICovCisgICAgICAgICAgbG9uZyAgICAgICAgICAgIHZhX2ZzaWQ7ICAgICAgICAvKiBmaWxlIHN5c3RlbSBpZCAoZGV2IGZvciBub3cpICovCisgICAgICAgICAgbG9uZyAgICAgICAgICAgIHZhX2ZpbGVpZDsgICAgICAvKiBmaWxlIGlkICovCisgICAgICAgICAgdV9xdWFkX3QgICAgICAgIHZhX3NpemU7ICAgICAgICAvKiBmaWxlIHNpemUgaW4gYnl0ZXMgKi8KKyAgICAgICAgICBsb25nICAgICAgICAgICAgdmFfYmxvY2tzaXplOyAgIC8qIGJsb2Nrc2l6ZSBwcmVmZXJyZWQgZm9yIGkvbyAqLworICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB2YV9hdGltZTsgICAgICAgLyogdGltZSBvZiBsYXN0IGFjY2VzcyAqLworICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB2YV9tdGltZTsgICAgICAgLyogdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiAqLworICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB2YV9jdGltZTsgICAgICAgLyogdGltZSBmaWxlIGNoYW5nZWQgKi8KKyAgICAgICAgICB1X2xvbmcgICAgICAgICAgdmFfZ2VuOyAgICAgICAgIC8qIGdlbmVyYXRpb24gbnVtYmVyIG9mIGZpbGUgKi8KKyAgICAgICAgICB1X2xvbmcgICAgICAgICAgdmFfZmxhZ3M7ICAgICAgIC8qIGZsYWdzIGRlZmluZWQgZm9yIGZpbGUgKi8KKyAgICAgICAgICBkZXZfdCAgICAgICAgICAgdmFfcmRldjsgICAgICAgIC8qIGRldmljZSBzcGVjaWFsIGZpbGUgcmVwcmVzZW50cyAqLworICAgICAgICAgIHVfcXVhZF90ICAgICAgICB2YV9ieXRlczsgICAgICAgLyogYnl0ZXMgb2YgZGlzayBzcGFjZSBoZWxkIGJ5IGZpbGUgKi8KKyAgICAgICAgICB1X3F1YWRfdCAgICAgICAgdmFfZmlsZXJldjsgICAgIC8qIGZpbGUgbW9kaWZpY2F0aW9uIG51bWJlciAqLworICAgICAgICAgIHVfaW50ICAgICAgICAgICB2YV92YWZsYWdzOyAgICAgLyogb3BlcmF0aW9ucyBmbGFncywgc2VlIGJlbG93ICovCisgICAgICAgICAgbG9uZyAgICAgICAgICAgIHZhX3NwYXJlOyAgICAgICAvKiByZW1haW4gcXVhZCBhbGlnbmVkICovCisgIH07CisKKworCisKKyAgNAg0LgguMggyLgguICBUCFRoCGhlCGUgcAhwaQhpbwhvYwhjdAh0bAhsIGkIaW4IbnQIdGUIZXIIcmYIZmEIYWMIY2UIZQorCisKKyAgQ29kYSBzcGVjaWZpYyByZXF1ZXN0cyBjYW4gYmUgbWFkZSBieSBhcHBsaWNhdGlvbiB0aHJvdWdoIHRoZSBwaW9jdGwKKyAgaW50ZXJmYWNlLiBUaGUgcGlvY3RsIGlzIGltcGxlbWVudGVkIGFzIGFuIG9yZGluYXJ5IGlvY3RsIG9uIGEKKyAgZmljdGl0aW91cyBmaWxlIC9jb2RhLy5DT05UUk9MLiAgVGhlIHBpb2N0bCBjYWxsIG9wZW5zIHRoaXMgZmlsZSwgZ2V0cworICBhIGZpbGUgaGFuZGxlIGFuZCBtYWtlcyB0aGUgaW9jdGwgY2FsbC4gRmluYWxseSBpdCBjbG9zZXMgdGhlIGZpbGUuCisKKyAgVGhlIGtlcm5lbCBpbnZvbHZlbWVudCBpbiB0aGlzIGlzIGxpbWl0ZWQgdG8gcHJvdmlkaW5nIHRoZSBmYWNpbGl0eSB0bworICBvcGVuIGFuZCBjbG9zZSBhbmQgcGFzcyB0aGUgaW9jdGwgbWVzc2FnZSBfCGFfCG5fCGQgdG8gdmVyaWZ5IHRoYXQgYSBwYXRoIGluCisgIHRoZSBwaW9jdGwgZGF0YSBidWZmZXJzIGlzIGEgZmlsZSBpbiBhIENvZGEgZmlsZXN5c3RlbS4KKworICBUaGUga2VybmVsIGlzIGhhbmRlZCBhIGRhdGEgcGFja2V0IG9mIHRoZSBmb3JtOgorCisgICAgICBzdHJ1Y3QgeworICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgICAgICAgc3RydWN0IFZpY2VJb2N0bCB2aWRhdGE7CisgICAgICAgICAgaW50IGZvbGxvdzsKKyAgICAgIH0gZGF0YTsKKworCisKKyAgd2hlcmUKKworCisgIHN0cnVjdCBWaWNlSW9jdGwgeworICAgICAgICAgIGNhZGRyX3QgaW4sIG91dDsgICAgICAgIC8qIERhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaW4sIG9yIG91dCAqLworICAgICAgICAgIHNob3J0IGluX3NpemU7ICAgICAgICAgIC8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIDw9IDJLICovCisgICAgICAgICAgc2hvcnQgb3V0X3NpemU7ICAgICAgICAgLyogTWF4aW11bSBzaXplIG9mIG91dHB1dCBidWZmZXIsIDw9IDJLICovCisgIH07CisKKworCisgIFRoZSBwYXRoIG11c3QgYmUgYSBDb2RhIGZpbGUsIG90aGVyd2lzZSB0aGUgaW9jdGwgdXBjYWxsIHdpbGwgbm90IGJlCisgIG1hZGUuCisKKyAgTghOTwhPVAhURQhFICBUaGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb2RlIGFyZSBhIG1lc3MuICBXZSBuZWVkIHRvIGNsZWFuIHRoaXMKKyAgdXAuCisKKyAgV2Ugbm93IHByb2NlZWQgdG8gZG9jdW1lbnQgdGhlIGluZGl2aWR1YWwgY2FsbHM6CisKKyAgMHdwYWdlCisKKyAgNAg0LgguMwgzLgguICByCHJvCG9vCG90CHQKKworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbiBlbXB0eQorCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yb290X291dCB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICB9IGNmc19yb290OworCisKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gVGhpcyBjYWxsIGlzIG1hZGUgdG8gVmVudXMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZgorICB0aGUgQ29kYSBmaWxlc3lzdGVtLiBJZiB0aGUgcmVzdWx0IGlzIHplcm8sIHRoZSBjZnNfcm9vdCBzdHJ1Y3R1cmUKKyAgY29udGFpbnMgdGhlIFZpY2VGaWQgb2YgdGhlIHJvb3Qgb2YgdGhlIENvZGEgZmlsZXN5c3RlbS4gSWYgYSBub24temVybworICByZXN1bHQgaXMgZ2VuZXJhdGVkLCBpdHMgdmFsdWUgaXMgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZXJyb3IgY29kZQorICBpbmRpY2F0aW5nIHRoZSBkaWZmaWN1bHR5IFZlbnVzIGVuY291bnRlcmVkIGluIGxvY2F0aW5nIHRoZSByb290IG9mCisgIHRoZSBDb2RhIGZpbGVzeXN0ZW0uCisKKyAgMHdwYWdlCisKKyAgNAg0LgguNAg0LgguICBsCGxvCG9vCG9rCGt1CHVwCHAKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBGaW5kIHRoZSBWaWNlRmlkIGFuZCB0eXBlIG9mIGFuIG9iamVjdCBpbiBhIGRpcmVjdG9yeSBpZiBpdAorICBleGlzdHMuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgIGNmc19sb29rdXBfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkICAgICBWRmlkOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqbmFtZTsgICAgICAgICAgLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworICAgICAgICAgICAgICAgIH0gY2ZzX2xvb2t1cDsKKworCisKKyAgICAgbwhvdQh1dAh0CisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2xvb2t1cF9vdXQgeworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGludCB2dHlwZTsKKyAgICAgICAgICAgICAgICB9IGNmc19sb29rdXA7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIGNhbGwgaXMgbWFkZSB0byBkZXRlcm1pbmUgdGhlIFZpY2VGaWQgYW5kIGZpbGV0eXBlIG9mCisgIGEgZGlyZWN0b3J5IGVudHJ5LiAgVGhlIGRpcmVjdG9yeSBlbnRyeSByZXF1ZXN0ZWQgY2FycmllcyBuYW1lIG5hbWUKKyAgYW5kIFZlbnVzIHdpbGwgc2VhcmNoIHRoZSBkaXJlY3RvcnkgaWRlbnRpZmllZCBieSBjZnNfbG9va3VwX2luLlZGaWQuCisgIFRoZSByZXN1bHQgbWF5IGluZGljYXRlIHRoYXQgdGhlIG5hbWUgZG9lcyBub3QgZXhpc3QsIG9yIHRoYXQKKyAgZGlmZmljdWx0eSB3YXMgZW5jb3VudGVyZWQgaW4gZmluZGluZyBpdCAoZS5nLiBkdWUgdG8gZGlzY29ubmVjdGlvbikuCisgIElmIHRoZSByZXN1bHQgaXMgemVybywgdGhlIGZpZWxkIGNmc19sb29rdXBfb3V0LlZGaWQgY29udGFpbnMgdGhlCisgIHRhcmdldHMgVmljZUZpZCBhbmQgY2ZzX2xvb2t1cF9vdXQudnR5cGUgdGhlIGNvZGFfdnR5cGUgZ2l2aW5nIHRoZQorICB0eXBlIG9mIG9iamVjdCB0aGUgbmFtZSBkZXNpZ25hdGVzLgorCisgIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgaXMgYW4gOCBiaXQgY2hhcmFjdGVyIHN0cmluZyBvZiBtYXhpbXVtIGxlbmd0aAorICBDRlNfTUFYTkFNTEVOLCBjdXJyZW50bHkgc2V0IHRvIDI1NiAoaW5jbHVkaW5nIGEgMCB0ZXJtaW5hdG9yLikKKworICBJdCBpcyBleHRyZW1lbHkgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBWZW51cyBiaXR3aXNlIG9ycyB0aGUgZmllbGQKKyAgY2ZzX2xvb2t1cC52dHlwZSB3aXRoIENGU19OT0NBQ0hFIHRvIGluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBzaG91bGQKKyAgbm90IGJlIHB1dCBpbiB0aGUga2VybmVsIG5hbWUgY2FjaGUuCisKKyAgTghOTwhPVAhURQhFIFRoZSB0eXBlIG9mIHRoZSB2dHlwZSBpcyBjdXJyZW50bHkgd3JvbmcuICBJdCBzaG91bGQgYmUKKyAgY29kYV92dHlwZS4gTGludXggZG9lcyBub3QgdGFrZSBub3RlIG9mIENGU19OT0NBQ0hFLiAgSXQgc2hvdWxkLgorCisgIDB3cGFnZQorCisgIDQINC4ILjUINS4ILiAgZwhnZQhldAh0YQhhdAh0dAh0cghyCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgR2V0IHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsZS4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfZ2V0YXR0cl9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsgLyogWFhYWFggKi8KKyAgICAgICAgICAgICAgICB9IGNmc19nZXRhdHRyOworCisKKworICAgICBvCG91CHV0CHQKKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfZ2V0YXR0cl9vdXQgeworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworICAgICAgICAgICAgICAgIH0gY2ZzX2dldGF0dHI7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIGNhbGwgcmV0dXJucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5CisgIGZpZC4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMgRXJyb3JzIGNhbiBvY2N1ciBpZiB0aGUgb2JqZWN0IHdpdGggZmlkIGRvZXMgbm90IGV4aXN0LCBpcworICB1bmFjY2Vzc2libGUgb3IgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gZmV0Y2gKKyAgYXR0cmlidXRlcy4KKworICBOCE5vCG90CHRlCGUgTWFueSBrZXJuZWwgRlMgZHJpdmVycyAoTGludXgsIE5UIGFuZCBXaW5kb3dzIDk1KSBuZWVkIHRvIGFjcXVpcmUKKyAgdGhlIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUgRmlkIGZvciB0aGUgaW5zdGFudGlhdGlvbiBvZiBhbiBpbnRlcm5hbAorICAiaW5vZGUiIG9yICJGaWxlSGFuZGxlIi4gIEEgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnQgaW4gcGVyZm9ybWFuY2Ugb24KKyAgc3VjaCBzeXN0ZW1zIGNvdWxkIGJlIG1hZGUgYnkgY29tYmluaW5nIHRoZSBfCGxfCG9fCG9fCGtfCHVfCHAgYW5kIF8IZ18IZV8IdF8IYV8IdF8IdF8IciBjYWxscworICBib3RoIGF0IHRoZSBWZW51cy9rZXJuZWwgaW50ZXJhY3Rpb24gbGV2ZWwgYW5kIGF0IHRoZSBSUEMgbGV2ZWwuCisKKyAgVGhlIHZhdHRyIHN0cnVjdHVyZSBpbmNsdWRlZCBpbiB0aGUgaW5wdXQgYXJndW1lbnRzIGlzIHN1cGVyZmx1b3VzIGFuZAorICBzaG91bGQgYmUgcmVtb3ZlZC4KKworICAwd3BhZ2UKKworICA0CDQuCC42CDYuCC4gIHMIc2UIZXQIdGEIYXQIdHQIdHIIcgorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFNldCB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbGUuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3NldGF0dHJfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgICAgICAgICAgICAgfSBjZnNfc2V0YXR0cjsKKworCisKKworICAgICBvCG91CHV0CHQKKyAgICAgICAgZW1wdHkKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gVGhlIHN0cnVjdHVyZSBhdHRyIGlzIGZpbGxlZCB3aXRoIGF0dHJpYnV0ZXMgdG8gYmUgY2hhbmdlZAorICBpbiBCU0Qgc3R5bGUuICBBdHRyaWJ1dGVzIG5vdCB0byBiZSBjaGFuZ2VkIGFyZSBzZXQgdG8gLTEsIGFwYXJ0IGZyb20KKyAgdnR5cGUgd2hpY2ggaXMgc2V0IHRvIFZOT04uIE90aGVyIGFyZSBzZXQgdG8gdGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkLgorICBUaGUgb25seSBhdHRyaWJ1dGVzIHdoaWNoIHRoZSBGUyBkcml2ZXIgbWF5IHJlcXVlc3QgdG8gY2hhbmdlIGFyZSB0aGUKKyAgbW9kZSwgb3duZXIsIGdyb3VwaWQsIGF0aW1lLCBtdGltZSBhbmQgY3RpbWUuICBUaGUgcmV0dXJuIHZhbHVlCisgIGluZGljYXRlcyBzdWNjZXNzIG9yIGZhaWx1cmUuCisKKyAgRQhFcghycghybwhvcghycwhzIEEgdmFyaWV0eSBvZiBlcnJvcnMgY2FuIG9jY3VyLiAgVGhlIG9iamVjdCBtYXkgbm90IGV4aXN0LCBtYXkKKyAgYmUgaW5hY2Nlc3NpYmxlLCBvciBwZXJtaXNzaW9uIG1heSBub3QgYmUgZ3JhbnRlZCBieSBWZW51cy4KKworICAwd3BhZ2UKKworICA0CDQuCC43CDcuCC4gIGEIYWMIY2MIY2UIZXMIc3MIcworCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5CisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2FjY2Vzc19pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGludCBmbGFnczsKKyAgICAgICAgICAgICAgICB9IGNmc19hY2Nlc3M7CisKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBlbXB0eQorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBWZXJpZnkgaWYgYWNjZXNzIHRvIHRoZSBvYmplY3QgaWRlbnRpZmllZCBieSBWRmlkIGZvcgorICBvcGVyYXRpb25zIGRlc2NyaWJlZCBieSBmbGFncyBpcyBwZXJtaXR0ZWQuICBUaGUgcmVzdWx0IGluZGljYXRlcyBpZgorICBhY2Nlc3Mgd2lsbCBiZSBncmFudGVkLiAgSXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgQ29kYSB1c2VzCisgIEFDTHMgdG8gZW5mb3JjZSBwcm90ZWN0aW9uIGFuZCB0aGF0IHVsdGltYXRlbHkgdGhlIHNlcnZlcnMsIG5vdCB0aGUKKyAgY2xpZW50cyBlbmZvcmNlIHRoZSBzZWN1cml0eSBvZiB0aGUgc3lzdGVtLiAgVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGwKKyAgd2lsbCBkZXBlbmQgb24gd2hldGhlciBhIF8IdF8Ib18Ia18IZV8IbiBpcyBoZWxkIGJ5IHRoZSB1c2VyLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBUaGUgb2JqZWN0IG1heSBub3QgZXhpc3QsIG9yIHRoZSBBQ0wgZGVzY3JpYmluZyB0aGUgcHJvdGVjdGlvbgorICBtYXkgbm90IGJlIGFjY2Vzc2libGUuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguOAg4LgguICBjCGNyCHJlCGVhCGF0CHRlCGUKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBJbnZva2VkIHRvIGNyZWF0ZSBhIGZpbGUKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfY3JlYXRlX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworICAgICAgICAgICAgICAgICAgICBpbnQgZXhjbDsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGU7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpuYW1lOyAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfY3JlYXRlOworCisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19jcmVhdGVfb3V0IHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworICAgICAgICAgICAgICAgIH0gY2ZzX2NyZWF0ZTsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuICBUaGlzIHVwY2FsbCBpcyBpbnZva2VkIHRvIHJlcXVlc3QgY3JlYXRpb24gb2YgYSBmaWxlLgorICBUaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpZGVudGlmaWVkIGJ5IFZGaWQsIGl0cyBuYW1lCisgIHdpbGwgYmUgbmFtZSwgYW5kIHRoZSBtb2RlIHdpbGwgYmUgbW9kZS4gIElmIGV4Y2wgaXMgc2V0IGFuIGVycm9yIHdpbGwKKyAgYmUgcmV0dXJuZWQgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuICBJZiB0aGUgc2l6ZSBmaWVsZCBpbiBhdHRyIGlzCisgIHNldCB0byB6ZXJvIHRoZSBmaWxlIHdpbGwgYmUgdHJ1bmNhdGVkLiAgVGhlIHVpZCBhbmQgZ2lkIG9mIHRoZSBmaWxlCisgIGFyZSBzZXQgYnkgY29udmVydGluZyB0aGUgQ29kYUNyZWQgdG8gYSB1aWQgdXNpbmcgYSBtYWNybyBDUlRPVUlECisgICh0aGlzIG1hY3JvIGlzIHBsYXRmb3JtIGRlcGVuZGVudCkuICBVcG9uIHN1Y2Nlc3MgdGhlIFZGaWQgYW5kCisgIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGUgYXJlIHJldHVybmVkLiAgVGhlIENvZGEgRlMgRHJpdmVyIHdpbGwgbm9ybWFsbHkKKyAgaW5zdGFudGlhdGUgYSB2bm9kZSwgaW5vZGUgb3IgZmlsZSBoYW5kbGUgYXQga2VybmVsIGxldmVsIGZvciB0aGUgbmV3CisgIG9iamVjdC4KKworCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBBIHZhcmlldHkgb2YgZXJyb3JzIGNhbiBvY2N1ci4gUGVybWlzc2lvbnMgbWF5IGJlIGluc3VmZmljaWVudC4KKyAgSWYgdGhlIG9iamVjdCBleGlzdHMgYW5kIGlzIG5vdCBhIGZpbGUgdGhlIGVycm9yIEVJU0RJUiBpcyByZXR1cm5lZAorICB1bmRlciBVbml4LgorCisgIE4ITk8IT1QIVEUIRSBUaGUgcGFja2luZyBvZiBwYXJhbWV0ZXJzIGlzIHZlcnkgaW5lZmZpY2llbnQgYW5kIGFwcGVhcnMgdG8KKyAgaW5kaWNhdGUgY29uZnVzaW9uIGJldHdlZW4gdGhlIHN5c3RlbSBjYWxsIGNyZWF0IGFuZCB0aGUgVkZTIG9wZXJhdGlvbgorICBjcmVhdGUuIFRoZSBWRlMgb3BlcmF0aW9uIGNyZWF0ZSBpcyBvbmx5IGNhbGxlZCB0byBjcmVhdGUgbmV3IG9iamVjdHMuCisgIFRoaXMgY3JlYXRlIGNhbGwgZGlmZmVycyBmcm9tIHRoZSBVbml4IG9uZSBpbiB0aGF0IGl0IGlzIG5vdCBpbnZva2VkCisgIHRvIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gVGhlIHRydW5jYXRlIGFuZCBleGNsdXNpdmUgb3B0aW9ucywKKyAgdG9nZXRoZXIgd2l0aCB0aGUgbW9kZSwgY291bGQgc2ltcGx5IGJlIHBhcnQgb2YgdGhlIG1vZGUgYXMgaXQgaXMKKyAgdW5kZXIgVW5peC4gIFRoZXJlIHNob3VsZCBiZSBubyBmbGFncyBhcmd1bWVudDsgdGhpcyBpcyB1c2VkIGluIG9wZW4KKyAgKDIpIHRvIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBmb3IgUkVBRCBvciBXUklURSBtb2RlLgorCisgIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIHJldHVybmVkIHRvbywgc2luY2UgdGhlIHNpemUKKyAgYW5kIG10aW1lIGNoYW5nZWQuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguOQg5LgguICBtCG1rCGtkCGRpCGlyCHIKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5LgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19ta2Rpcl9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpuYW1lOyAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfbWtkaXI7CisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19ta2Rpcl9vdXQgeworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgICAgICAgICAgICAgICAgfSBjZnNfbWtkaXI7CisKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgY2FsbCBpcyBzaW1pbGFyIHRvIGNyZWF0ZSBidXQgY3JlYXRlcyBhIGRpcmVjdG9yeS4KKyAgT25seSB0aGUgbW9kZSBmaWVsZCBpbiB0aGUgaW5wdXQgcGFyYW1ldGVycyBpcyB1c2VkIGZvciBjcmVhdGlvbi4KKyAgVXBvbiBzdWNjZXNzZnVsIGNyZWF0aW9uLCB0aGUgYXR0ciByZXR1cm5lZCBjb250YWlucyB0aGUgYXR0cmlidXRlcyBvZgorICB0aGUgbmV3IGRpcmVjdG9yeS4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMgQXMgZm9yIGNyZWF0ZS4KKworICBOCE5PCE9UCFRFCEUgVGhlIGlucHV0IHBhcmFtZXRlciBzaG91bGQgYmUgY2hhbmdlZCB0byBtb2RlIGluc3RlYWQgb2YKKyAgYXR0cmlidXRlcy4KKworICBUaGUgYXR0cmlidXRlcyBvZiB0aGUgcGFyZW50IHNob3VsZCBiZSByZXR1cm5lZCBzaW5jZSB0aGUgc2l6ZSBhbmQKKyAgbXRpbWUgY2hhbmdlcy4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDEwCDAuCC4gIGwIbGkIaW4IbmsIaworCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IENyZWF0ZSBhIGxpbmsgdG8gYW4gZXhpc3RpbmcgZmlsZS4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfbGlua19pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgc291cmNlRmlkOyAgICAgICAgICAvKiBjbm9kZSB0byBsaW5rICp0byogKi8KKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBkZXN0RmlkOyAgICAgICAgICAgIC8qIERpcmVjdG9yeSBpbiB3aGljaCB0byBwbGFjZSBsaW5rICovCisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICp0bmFtZTsgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfbGluazsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIGVtcHR5CisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFRoaXMgY2FsbCBjcmVhdGVzIGEgbGluayB0byB0aGUgc291cmNlRmlkIGluIHRoZSBkaXJlY3RvcnkKKyAgaWRlbnRpZmllZCBieSBkZXN0RmlkIHdpdGggbmFtZSB0bmFtZS4gIFRoZSBzb3VyY2UgbXVzdCByZXNpZGUgaW4gdGhlCisgIHRhcmdldCdzIHBhcmVudCwgaS5lLiB0aGUgc291cmNlIG11c3QgYmUgaGF2ZSBwYXJlbnQgZGVzdEZpZCwgaS5lLiBDb2RhCisgIGRvZXMgbm90IHN1cHBvcnQgY3Jvc3MgZGlyZWN0b3J5IGhhcmQgbGlua3MuICBPbmx5IHRoZSByZXR1cm4gdmFsdWUgaXMKKyAgcmVsZXZhbnQuICBJdCBpbmRpY2F0ZXMgc3VjY2VzcyBvciB0aGUgdHlwZSBvZiBmYWlsdXJlLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBUaGUgdXN1YWwgZXJyb3JzIGNhbiBvY2N1ci4wd3BhZ2UKKworICA0CDQuCC4xCDExCDEuCC4gIHMIc3kIeW0IbWwIbGkIaW4IbmsIaworCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfc3ltbGlua19pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7ICAgICAgICAgIC8qIERpcmVjdG9yeSB0byBwdXQgc3ltbGluayBpbiAqLworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAqc3JjbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKnRuYW1lOworICAgICAgICAgICAgICAgIH0gY2ZzX3N5bWxpbms7CisKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBub25lCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsuIFRoZSBsaW5rIGlzIHRvIGJlIHBsYWNlZCBpbiB0aGUKKyAgZGlyZWN0b3J5IGlkZW50aWZpZWQgYnkgVkZpZCBhbmQgbmFtZWQgdG5hbWUuICBJdCBzaG91bGQgcG9pbnQgdG8gdGhlCisgIHBhdGhuYW1lIHNyY25hbWUuICBUaGUgYXR0cmlidXRlcyBvZiB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QgYXJlIHRvCisgIGJlIHNldCB0byBhdHRyLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBzaG91bGQgYmUgcmV0dXJuZWQgc2luY2UKKyAgaXRzIHNpemUgY2hhbmdlZC4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDEyCDIuCC4gIHIIcmUIZW0IbW8Ib3YIdmUIZQorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFJlbW92ZSBhIGZpbGUKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfcmVtb3ZlX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKm5hbWU7ICAgICAgICAgIC8qIFBsYWNlIGhvbGRlciBmb3IgZGF0YS4gKi8KKyAgICAgICAgICAgICAgICB9IGNmc19yZW1vdmU7CisKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBub25lCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuICBSZW1vdmUgZmlsZSBuYW1lZCBjZnNfcmVtb3ZlX2luLm5hbWUgaW4gZGlyZWN0b3J5CisgIGlkZW50aWZpZWQgYnkgICBWRmlkLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZGlyZWN0b3J5IHNob3VsZCBiZSByZXR1cm5lZCBzaW5jZSBpdHMKKyAgbXRpbWUgYW5kIHNpemUgbWF5IGNoYW5nZS4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDEzCDMuCC4gIHIIcm0IbWQIZGkIaXIIcgorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFJlbW92ZSBhIGRpcmVjdG9yeQorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19ybWRpcl9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpuYW1lOyAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfcm1kaXI7CisKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBub25lCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIFJlbW92ZSB0aGUgZGlyZWN0b3J5IHdpdGggbmFtZSBuYW1lIGZyb20gdGhlIGRpcmVjdG9yeQorICBpZGVudGlmaWVkIGJ5IFZGaWQuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHNob3VsZCBiZSByZXR1cm5lZCBzaW5jZQorICBpdHMgbXRpbWUgYW5kIHNpemUgbWF5IGNoYW5nZS4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDE0CDQuCC4gIHIIcmUIZWEIYWQIZGwIbGkIaW4IbmsIaworCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFJlYWQgdGhlIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluay4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfcmVhZGxpbmtfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgfSBjZnNfcmVhZGxpbms7CisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yZWFkbGlua19vdXQgeworICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgICAgIGRhdGE7ICAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfcmVhZGxpbms7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIHJvdXRpbmUgcmVhZHMgdGhlIGNvbnRlbnRzIG9mIHN5bWJvbGljIGxpbmsKKyAgaWRlbnRpZmllZCBieSBWRmlkIGludG8gdGhlIGJ1ZmZlciBkYXRhLiAgVGhlIGJ1ZmZlciBkYXRhIG11c3QgYmUgYWJsZQorICB0byBob2xkIGFueSBuYW1lIHVwIHRvIENGU19NQVhOQU1MRU4gKFBBVEggb3IgTkFNPz8pLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcyBObyB1bnVzdWFsIGVycm9ycy4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDE1CDUuCC4gIG8Ib3AIcGUIZW4IbgorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IE9wZW4gYSBmaWxlLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19vcGVuX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCAgICAgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzOworICAgICAgICAgICAgICAgIH0gY2ZzX29wZW47CisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19vcGVuX291dCB7CisgICAgICAgICAgICAgICAgICAgIGRldl90ICAgICAgIGRldjsKKyAgICAgICAgICAgICAgICAgICAgaW5vX3QgICAgICAgaW5vZGU7CisgICAgICAgICAgICAgICAgfSBjZnNfb3BlbjsKKworCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuICBUaGlzIHJlcXVlc3QgYXNrcyBWZW51cyB0byBwbGFjZSB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5CisgIFZGaWQgaW4gaXRzIGNhY2hlIGFuZCB0byBub3RlIHRoYXQgdGhlIGNhbGxpbmcgcHJvY2VzcyB3aXNoZXMgdG8gb3BlbgorICBpdCB3aXRoIGZsYWdzIGFzIGluIG9wZW4oMikuICBUaGUgcmV0dXJuIHZhbHVlIHRvIHRoZSBrZXJuZWwgZGlmZmVycworICBmb3IgVW5peCBhbmQgV2luZG93cyBzeXN0ZW1zLiAgRm9yIFVuaXggc3lzdGVtcyB0aGUgQ29kYSBGUyBEcml2ZXIgaXMKKyAgaW5mb3JtZWQgb2YgdGhlIGRldmljZSBhbmQgaW5vZGUgbnVtYmVyIG9mIHRoZSBjb250YWluZXIgZmlsZSBpbiB0aGUKKyAgZmllbGRzIGRldiBhbmQgaW5vZGUuICBGb3IgV2luZG93cyB0aGUgcGF0aCBvZiB0aGUgY29udGFpbmVyIGZpbGUgaXMKKyAgcmV0dXJuZWQgdG8gdGhlIGtlcm5lbC4KKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIEN1cnJlbnRseSB0aGUgY2ZzX29wZW5fb3V0IHN0cnVjdHVyZSBpcyBub3QgcHJvcGVybHkgYWRhcHRlZCB0bworICBkZWFsIHdpdGggdGhlIFdpbmRvd3MgY2FzZS4gIEl0IG1pZ2h0IGJlIGJlc3QgdG8gaW1wbGVtZW50IHR3bworICB1cGNhbGxzLCBvbmUgdG8gb3BlbiBhaW1pbmcgYXQgYSBjb250YWluZXIgZmlsZSBuYW1lLCB0aGUgb3RoZXIgYXQgYQorICBjb250YWluZXIgZmlsZSBpbm9kZS4KKworICAwd3BhZ2UKKworICA0CDQuCC4xCDE2CDYuCC4gIGMIY2wIbG8Ib3MIc2UIZQorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IENsb3NlIGEgZmlsZSwgdXBkYXRlIGl0IG9uIHRoZSBzZXJ2ZXJzLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19jbG9zZV9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGludCBmbGFnczsKKyAgICAgICAgICAgICAgICB9IGNmc19jbG9zZTsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gQ2xvc2UgdGhlIGZpbGUgaWRlbnRpZmllZCBieSBWRmlkLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGUgZmxhZ3MgYXJndW1lbnQgaXMgYm9ndXMgYW5kIG5vdCB1c2VkLiAgSG93ZXZlciwgVmVudXMnIGNvZGUKKyAgaGFzIHJvb20gdG8gZGVhbCB3aXRoIGFuIGV4ZWNwIGlucHV0IGZpZWxkLCBwcm9iYWJseSB0aGlzIGZpZWxkIHNob3VsZAorICBiZSB1c2VkIHRvIGluZm9ybSBWZW51cyB0aGF0IHRoZSBmaWxlIHdhcyBjbG9zZWQgYnV0IGlzIHN0aWxsIG1lbW9yeQorICBtYXBwZWQgZm9yIGV4ZWN1dGlvbi4gIFRoZXJlIGFyZSBjb21tZW50cyBhYm91dCBmZXRjaGluZyB2ZXJzdXMgbm90CisgIGZldGNoaW5nIHRoZSBkYXRhIGluIFZlbnVzIHZwcm9jX3Zmc2NhbGxzLiAgVGhpcyBzZWVtcyBzaWxseS4gIElmIGEKKyAgZmlsZSBpcyBiZWluZyBjbG9zZWQsIHRoZSBkYXRhIGluIHRoZSBjb250YWluZXIgZmlsZSBpcyB0byBiZSB0aGUgbmV3CisgIGRhdGEuICBIZXJlIGFnYWluIHRoZSBleGVjcCBmbGFnIG1pZ2h0IGJlIGluIHBsYXkgdG8gY3JlYXRlIGNvbmZ1c2lvbjoKKyAgY3VycmVudGx5IFZlbnVzIG1pZ2h0IHRoaW5rIGEgZmlsZSBjYW4gYmUgZmx1c2hlZCBmcm9tIHRoZSBjYWNoZSB3aGVuCisgIGl0IGlzIHN0aWxsIG1lbW9yeSBtYXBwZWQuICBUaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMQgxNwg3LgguICBpCGlvCG9jCGN0CHRsCGwKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBEbyBhbiBpb2N0bCBvbiBhIGZpbGUuIFRoaXMgaW5jbHVkZXMgdGhlIHBpb2N0bCBpbnRlcmZhY2UuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX2lvY3RsX2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgICAgICBpbnQgY21kOworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgICAgICBpbnQgcndmbGFnOworICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhOyAgICAgICAgICAgICAgICAgLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworICAgICAgICAgICAgICAgIH0gY2ZzX2lvY3RsOworCisKKworICAgICBvCG91CHV0CHQKKworCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19pb2N0bF9vdXQgeworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgICAgICBjYWRkcl90ICAgICBkYXRhOyAgICAgICAgICAgLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworICAgICAgICAgICAgICAgIH0gY2ZzX2lvY3RsOworCisKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gRG8gYW4gaW9jdGwgb3BlcmF0aW9uIG9uIGEgZmlsZS4gIFRoZSBjb21tYW5kLCBsZW4gYW5kCisgIGRhdGEgYXJndW1lbnRzIGFyZSBmaWxsZWQgYXMgdXN1YWwuICBmbGFncyBpcyBub3QgdXNlZCBieSBWZW51cy4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgQW5vdGhlciBib2d1cyBwYXJhbWV0ZXIuICBmbGFncyBpcyBub3QgdXNlZC4gIFdoYXQgaXMgdGhlCisgIGJ1c2luZXNzIGFib3V0IFBSRUZFVENISU5HIGluIHRoZSBWZW51cyBjb2RlPworCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMQgxOAg4LgguICByCHJlCGVuCG5hCGFtCG1lCGUKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBSZW5hbWUgYSBmaWQuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3JlbmFtZV9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIHNvdXJjZUZpZDsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKnNyY25hbWU7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgZGVzdEZpZDsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgKmRlc3RuYW1lOworICAgICAgICAgICAgICAgIH0gY2ZzX3JlbmFtZTsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gIFJlbmFtZSB0aGUgb2JqZWN0IHdpdGggbmFtZSBzcmNuYW1lIGluIGRpcmVjdG9yeQorICBzb3VyY2VGaWQgdG8gZGVzdG5hbWUgaW4gZGVzdEZpZC4gICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgbmFtZXMKKyAgc3JjbmFtZSBhbmQgZGVzdG5hbWUgYXJlIDAgdGVybWluYXRlZCBzdHJpbmdzLiAgU3RyaW5ncyBpbiBVbml4CisgIGtlcm5lbHMgYXJlIG5vdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIDB3cGFnZQorCisgIDQINC4ILjEIMTkIOS4ILiAgcghyZQhlYQhhZAhkZAhkaQhpcghyCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgUmVhZCBkaXJlY3RvcnkgZW50cmllcy4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfcmVhZGRpcl9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgICAgIFZGaWQ7CisgICAgICAgICAgICAgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICAgICAgICB9IGNmc19yZWFkZGlyOworCisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19yZWFkZGlyX291dCB7CisgICAgICAgICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAgICAgICBjYWRkcl90ICAgICBkYXRhOyAgICAgICAgICAgLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworICAgICAgICAgICAgICAgIH0gY2ZzX3JlYWRkaXI7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBSZWFkIGRpcmVjdG9yeSBlbnRyaWVzIGZyb20gVkZpZCBzdGFydGluZyBhdCBvZmZzZXQgYW5kCisgIHJlYWQgYXQgbW9zdCBjb3VudCBieXRlcy4gIFJldHVybnMgdGhlIGRhdGEgaW4gZGF0YSBhbmQgcmV0dXJucworICB0aGUgc2l6ZSBpbiBzaXplLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGlzIGNhbGwgaXMgbm90IHVzZWQuICBSZWFkZGlyIG9wZXJhdGlvbnMgZXhwbG9pdCBjb250YWluZXIKKyAgZmlsZXMuICBXZSB3aWxsIHJlLWV2YWx1YXRlIHRoaXMgZHVyaW5nIHRoZSBkaXJlY3RvcnkgcmV2YW1wIHdoaWNoIGlzCisgIGFib3V0IHRvIHRha2UgcGxhY2UuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyMAgwLgguICB2CHZnCGdlCGV0CHQKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBpbnN0cnVjdHMgVmVudXMgdG8gZG8gYW4gRlNEQi0+R2V0LgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc192Z2V0X2luIHsKKyAgICAgICAgICAgICAgICAgICAgVmljZUZpZCBWRmlkOworICAgICAgICAgICAgICAgIH0gY2ZzX3ZnZXQ7CisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc192Z2V0X291dCB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICAgICAgaW50IHZ0eXBlOworICAgICAgICAgICAgICAgIH0gY2ZzX3ZnZXQ7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIHVwY2FsbCBhc2tzIFZlbnVzIHRvIGRvIGEgZ2V0IG9wZXJhdGlvbiBvbiBhbiBmc29iagorICBsYWJlbGxlZCBieSBWRmlkLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGlzIG9wZXJhdGlvbiBpcyBub3QgdXNlZC4gIEhvd2V2ZXIsIGl0IGlzIGV4dHJlbWVseSB1c2VmdWwKKyAgc2luY2UgaXQgY2FuIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHJlYWQvd3JpdGUgbWVtb3J5IG1hcHBlZCBmaWxlcy4KKyAgVGhlc2UgY2FuIGJlICJwaW5uZWQiIGluIHRoZSBWZW51cyBjYWNoZSB1c2luZyB2Z2V0IGFuZCByZWxlYXNlZCB3aXRoCisgIGluYWN0aXZlLgorCisgIDB3cGFnZQorCisgIDQINC4ILjIIMjEIMS4ILiAgZghmcwhzeQh5bghuYwhjCisKKworICBTCFN1CHVtCG1tCG1hCGFyCHJ5CHkgVGVsbCBWZW51cyB0byB1cGRhdGUgdGhlIFJWTSBhdHRyaWJ1dGVzIG9mIGEgZmlsZS4KKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICBpCGluCG4KKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfZnN5bmNfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgfSBjZnNfZnN5bmM7CisKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBub25lCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuIEFzayBWZW51cyB0byB1cGRhdGUgUlZNIGF0dHJpYnV0ZXMgb2Ygb2JqZWN0IFZGaWQuIFRoaXMKKyAgc2hvdWxkIGJlIGNhbGxlZCBhcyBwYXJ0IG9mIGtlcm5lbCBsZXZlbCBmc3luYyB0eXBlIGNhbGxzLiAgVGhlCisgIHJlc3VsdCBpbmRpY2F0ZXMgaWYgdGhlIHN5bmNpbmcgd2FzIHN1Y2Nlc3NmdWwuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIExpbnV4IGRvZXMgbm90IGltcGxlbWVudCB0aGlzIGNhbGwuIEl0IHNob3VsZC4KKworICAwd3BhZ2UKKworICA0CDQuCC4yCDIyCDIuCC4gIGkIaW4IbmEIYWMIY3QIdGkIaXYIdmUIZQorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFRlbGwgVmVudXMgYSB2bm9kZSBpcyBubyBsb25nZXIgaW4gdXNlLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IGNmc19pbmFjdGl2ZV9pbiB7CisgICAgICAgICAgICAgICAgICAgIFZpY2VGaWQgVkZpZDsKKyAgICAgICAgICAgICAgICB9IGNmc19pbmFjdGl2ZTsKKworCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vbmUKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gVGhpcyBvcGVyYXRpb24gcmV0dXJucyBFT1BOT1RTVVBQLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGlzIHNob3VsZCBwZXJoYXBzIGJlIHJlbW92ZWQuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyMwgzLgguICByCHJkCGR3CHdyCHIKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBSZWFkIG9yIHdyaXRlIGZyb20gYSBmaWxlCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY2ZzX3Jkd3JfaW4geworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkICAgICBWRmlkOworICAgICAgICAgICAgICAgICAgICBpbnQgcndmbGFnOworICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGludCBpb2ZsYWc7CisgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgICAgIGRhdGE7ICAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBjZnNfcmR3cjsKKworCisKKworICAgICBvCG91CHV0CHQKKworICAgICAgICAgICAgICAgIHN0cnVjdCBjZnNfcmR3cl9vdXQgeworICAgICAgICAgICAgICAgICAgICBpbnQgcndmbGFnOworICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgICAgIGRhdGE7ICAgLyogUGxhY2UgaG9sZGVyIGZvciBkYXRhLiAqLworICAgICAgICAgICAgICAgIH0gY2ZzX3Jkd3I7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIHVwY2FsbCBhc2tzIFZlbnVzIHRvIHJlYWQgb3Igd3JpdGUgZnJvbSBhIGZpbGUuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIEl0IHNob3VsZCBiZSByZW1vdmVkIHNpbmNlIGl0IGlzIGFnYWluc3QgdGhlIENvZGEgcGhpbG9zb3BoeSB0aGF0CisgIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBuZXZlciByZWFjaCBWZW51cy4gIEkgaGF2ZSBiZWVuIHRvbGQgdGhlCisgIG9wZXJhdGlvbiBkb2VzIG5vdCB3b3JrLiAgSXQgaXMgbm90IGN1cnJlbnRseSB1c2VkLgorCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyNAg0LgguICBvCG9kCGR5CHltCG1vCG91CHVuCG50CHQKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBBbGxvd3MgbW91bnRpbmcgbXVsdGlwbGUgQ29kYSAiZmlsZXN5c3RlbXMiIG9uIG9uZSBVbml4IG1vdW50CisgIHBvaW50LgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbgorCisgICAgICAgICAgICAgICAgc3RydWN0IG9keV9tb3VudF9pbiB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpuYW1lOyAgICAgICAgICAvKiBQbGFjZSBob2xkZXIgZm9yIGRhdGEuICovCisgICAgICAgICAgICAgICAgfSBvZHlfbW91bnQ7CisKKworCisgICAgIG8Ib3UIdXQIdAorCisgICAgICAgICAgICAgICAgc3RydWN0IG9keV9tb3VudF9vdXQgeworICAgICAgICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgICAgICAgfSBvZHlfbW91bnQ7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiAgQXNrcyBWZW51cyB0byByZXR1cm4gdGhlIHJvb3RmaWQgb2YgYSBDb2RhIHN5c3RlbSBuYW1lZAorICBuYW1lLiAgVGhlIGZpZCBpcyByZXR1cm5lZCBpbiBWRmlkLgorCisgIEUIRXIIcnIIcm8Ib3IIcnMIcworCisgIE4ITk8IT1QIVEUIRSBUaGlzIGNhbGwgd2FzIHVzZWQgYnkgRGF2aWQgZm9yIGR5bmFtaWMgc2V0cy4gIEl0IHNob3VsZCBiZQorICByZW1vdmVkIHNpbmNlIGl0IGNhdXNlcyBhIGp1bmdsZSBvZiBwb2ludGVycyBpbiB0aGUgVkZTIG1vdW50aW5nIGFyZWEuCisgIEl0IGlzIG5vdCB1c2VkIGJ5IENvZGEgcHJvcGVyLiAgQ2FsbCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgVmVudXMuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyNQg1LgguICBvCG9kCGR5CHlfCF9sCGxvCG9vCG9rCGt1CHVwCHAKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBMb29rcyB1cCBzb21ldGhpbmcuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgaQhpbghuIGlycmVsZXZhbnQKKworCisgICAgIG8Ib3UIdXQIdAorICAgICAgICBpcnJlbGV2YW50CisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuCisKKyAgRQhFcghycghybwhvcghycwhzCisKKyAgTghOTwhPVAhURQhFIEd1dCBpdC4gQ2FsbCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgVmVudXMuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyNgg2LgguICBvCG9kCGR5CHlfCF9lCGV4CHhwCHBhCGFuCG5kCGQKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBleHBhbmRzIHNvbWV0aGluZyBpbiBhIGR5bmFtaWMgc2V0LgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbiBpcnJlbGV2YW50CisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIGlycmVsZXZhbnQKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgR3V0IGl0LiAgQ2FsbCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgVmVudXMuCisKKyAgMHdwYWdlCisKKyAgNAg0LgguMggyNwg3LgguICBwCHByCHJlCGVmCGZlCGV0CHRjCGNoCGgKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeSBQcmVmZXRjaCBhIGR5bmFtaWMgc2V0LgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbiBOb3QgZG9jdW1lbnRlZC4KKworICAgICBvCG91CHV0CHQKKyAgICAgICAgTm90IGRvY3VtZW50ZWQuCisKKyAgRAhEZQhlcwhzYwhjcghyaQhpcAhwdAh0aQhpbwhvbghuICBWZW51cyB3b3JrZXIuY2MgaGFzIHN1cHBvcnQgZm9yIHRoaXMgY2FsbCwgYWx0aG91Z2ggaXQgaXMKKyAgbm90ZWQgdGhhdCBpdCBkb2Vzbid0IHdvcmsuICBOb3Qgc3VycHJpc2luZywgc2luY2UgdGhlIGtlcm5lbCBkb2VzIG5vdAorICBoYXZlIHN1cHBvcnQgZm9yIGl0LiAoT0RZX1BSRUZFVENIIGlzIG5vdCBhIGRlZmluZWQgb3BlcmF0aW9uKS4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMKKworICBOCE5PCE9UCFRFCEUgR3V0IGl0LiBJdCBpc24ndCB3b3JraW5nIGFuZCBpc24ndCB1c2VkIGJ5IENvZGEuCisKKworICAwd3BhZ2UKKworICA0CDQuCC4yCDI4CDguCC4gIHMIc2kIaWcIZ24IbmEIYWwIbAorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFNlbmQgVmVudXMgYSBzaWduYWwgYWJvdXQgYW4gdXBjYWxsLgorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgIGkIaW4IbiBub25lCisKKyAgICAgbwhvdQh1dAh0CisgICAgICAgIG5vdCBhcHBsaWNhYmxlLgorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiAgVGhpcyBpcyBhbiBvdXQtb2YtYmFuZCB1cGNhbGwgdG8gVmVudXMgdG8gaW5mb3JtIFZlbnVzCisgIHRoYXQgdGhlIGNhbGxpbmcgcHJvY2VzcyByZWNlaXZlZCBhIHNpZ25hbCBhZnRlciBWZW51cyByZWFkIHRoZQorICBtZXNzYWdlIGZyb20gdGhlIGlucHV0IHF1ZXVlLiAgVmVudXMgaXMgc3VwcG9zZWQgdG8gY2xlYW4gdXAgdGhlCisgIG9wZXJhdGlvbi4KKworICBFCEVyCHJyCHJvCG9yCHJzCHMgTm8gcmVwbHkgaXMgZ2l2ZW4uCisKKyAgTghOTwhPVAhURQhFIFdlIG5lZWQgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCBWZW51cyBuZWVkcyB0byBjbGVhbiB1cCBhbmQgaWYKKyAgaXQgaXMgZG9pbmcgdGhpcyBjb3JyZWN0bHkuICBBbHNvIHdlIG5lZWQgdG8gaGFuZGxlIG11bHRpcGxlIHVwY2FsbAorICBwZXIgc3lzdGVtIGNhbGwgc2l0dWF0aW9ucyBjb3JyZWN0bHkuICBJdCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8ga25vdworICB3aGF0IHN0YXRlIGNoYW5nZXMgaW4gVmVudXMgdGFrZSBwbGFjZSBhZnRlciBhbiB1cGNhbGwgZm9yIHdoaWNoIHRoZQorICBrZXJuZWwgaXMgcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyBWZW51cyB0byBjbGVhbiB1cCAoZS5nLiBvcGVuCisgIGRlZmluaXRlbHkgaXMgc3VjaCBhIHN0YXRlIGNoYW5nZSwgYnV0IG1hbnkgb3RoZXJzIGFyZSBtYXliZSBub3QpLgorCisgIDB3cGFnZQorCisgIDUINS4ILiAgVAhUaAhoZQhlIG0IbWkIaW4IbmkIaWMIY2EIYWMIY2gIaGUIZSBhCGFuCG5kCGQgZAhkbwhvdwh3bghuYwhjYQhhbAhsbAhscwhzCisKKworICBUaGUgQ29kYSBGUyBEcml2ZXIgY2FuIGNhY2hlIHJlc3VsdHMgb2YgbG9va3VwIGFuZCBhY2Nlc3MgdXBjYWxscywgdG8KKyAgbGltaXQgdGhlIGZyZXF1ZW5jeSBvZiB1cGNhbGxzLiAgVXBjYWxscyBjYXJyeSBhIHByaWNlIHNpbmNlIGEgcHJvY2VzcworICBjb250ZXh0IHN3aXRjaCBuZWVkcyB0byB0YWtlIHBsYWNlLiAgVGhlIGNvdW50ZXJwYXJ0IG9mIGNhY2hpbmcgdGhlCisgIGluZm9ybWF0aW9uIGlzIHRoYXQgVmVudXMgd2lsbCBub3RpZnkgdGhlIEZTIERyaXZlciB0aGF0IGNhY2hlZAorICBlbnRyaWVzIG11c3QgYmUgZmx1c2hlZCBvciByZW5hbWVkLgorCisgIFRoZSBrZXJuZWwgY29kZSBnZW5lcmFsbHkgaGFzIHRvIG1haW50YWluIGEgc3RydWN0dXJlIHdoaWNoIGxpbmtzIHRoZQorICBpbnRlcm5hbCBmaWxlIGhhbmRsZXMgKGNhbGxlZCB2bm9kZXMgaW4gQlNELCBpbm9kZXMgaW4gTGludXggYW5kCisgIEZpbGVIYW5kbGVzIGluIFdpbmRvd3MpIHdpdGggdGhlIFZpY2VGaWQncyB3aGljaCBWZW51cyBtYWludGFpbnMuICBUaGUKKyAgcmVhc29uIGlzIHRoYXQgZnJlcXVlbnQgdHJhbnNsYXRpb25zIGJhY2sgYW5kIGZvcnRoIGFyZSBuZWVkZWQgaW4KKyAgb3JkZXIgdG8gbWFrZSB1cGNhbGxzIGFuZCB1c2UgdGhlIHJlc3VsdHMgb2YgdXBjYWxscy4gIFN1Y2ggbGlua2luZworICBvYmplY3RzIGFyZSBjYWxsZWQgYwhjbghubwhvZAhkZQhlcwhzLgorCisgIFRoZSBjdXJyZW50IG1pbmljYWNoZSBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBjYWNoZSBlbnRyaWVzIHdoaWNoIHJlY29yZAorICB0aGUgZm9sbG93aW5nOgorCisgIDEuIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisKKyAgMi4gdGhlIGNub2RlIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb2JqZWN0CisKKyAgMy4gYSBsaXN0IG9mIENvZGFDcmVkJ3MgZm9yIHdoaWNoIHRoZSBsb29rdXAgaXMgcGVybWl0dGVkLgorCisgIDQuIHRoZSBjbm9kZSBvZiB0aGUgb2JqZWN0CisKKyAgVGhlIGxvb2t1cCBjYWxsIGluIHRoZSBDb2RhIEZTIERyaXZlciBtYXkgcmVxdWVzdCB0aGUgY25vZGUgb2YgdGhlCisgIGRlc2lyZWQgb2JqZWN0IGZyb20gdGhlIGNhY2hlLCBieSBwYXNzaW5nIGl0cyBuYW1lLCBkaXJlY3RvcnkgYW5kIHRoZQorICBDb2RhQ3JlZCdzIG9mIHRoZSBjYWxsZXIuICBUaGUgY2FjaGUgd2lsbCByZXR1cm4gdGhlIGNub2RlIG9yIGluZGljYXRlCisgIHRoYXQgaXQgY2Fubm90IGJlIGZvdW5kLiAgVGhlIENvZGEgRlMgRHJpdmVyIG11c3QgYmUgY2FyZWZ1bCB0bworICBpbnZhbGlkYXRlIGNhY2hlIGVudHJpZXMgd2hlbiBpdCBtb2RpZmllcyBvciByZW1vdmVzIG9iamVjdHMuCisKKyAgV2hlbiBWZW51cyBvYnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgaW5kaWNhdGVzIHRoYXQgY2FjaGUgZW50cmllcyBhcmUKKyAgbm8gbG9uZ2VyIHZhbGlkLCBpdCB3aWxsIG1ha2UgYSBkb3duY2FsbCB0byB0aGUga2VybmVsLiAgRG93bmNhbGxzIGFyZQorICBpbnRlcmNlcHRlZCBieSB0aGUgQ29kYSBGUyBEcml2ZXIgYW5kIGxlYWQgdG8gY2FjaGUgaW52YWxpZGF0aW9ucyBvZgorICB0aGUga2luZCBkZXNjcmliZWQgYmVsb3cuICBUaGUgQ29kYSBGUyBEcml2ZXIgZG9lcyBub3QgcmV0dXJuIGFuIGVycm9yCisgIHVubGVzcyB0aGUgZG93bmNhbGwgZGF0YSBjb3VsZCBub3QgYmUgcmVhZCBpbnRvIGtlcm5lbCBtZW1vcnkuCisKKworICA1CDUuCC4xCDEuCC4gIEkISU4ITlYIVkEIQUwITEkISUQIREEIQVQIVEUIRQorCisKKyAgTm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHRoaXMgY2FsbC4KKworCisgIDUINS4ILjIIMi4ILiAgRghGTAhMVQhVUwhTSAhICisKKworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcyBOb25lCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IEZsdXNoIHRoZSBuYW1lIGNhY2hlIGVudGlyZWx5LgorCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBWZW51cyBpc3N1ZXMgdGhpcyBjYWxsIHVwb24gc3RhcnR1cCBhbmQgd2hlbiBpdCBkaWVzLiBUaGlzCisgIGlzIHRvIHByZXZlbnQgc3RhbGUgY2FjaGUgaW5mb3JtYXRpb24gYmVpbmcgaGVsZC4gIFNvbWUgb3BlcmF0aW5nCisgIHN5c3RlbXMgYWxsb3cgdGhlIGtlcm5lbCBuYW1lIGNhY2hlIHRvIGJlIHN3aXRjaGVkIG9mZiBkeW5hbWljYWxseS4KKyAgV2hlbiB0aGlzIGlzIGRvbmUsIHRoaXMgZG93bmNhbGwgaXMgbWFkZS4KKworCisgIDUINS4ILjMIMy4ILiAgUAhQVQhVUghSRwhHRQhFVQhVUwhTRQhFUghSCisKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICAgICAgIHN0cnVjdCBjZnNfcHVyZ2V1c2VyX291dCB7LyogQ0ZTX1BVUkdFVVNFUiBpcyBhIHZlbnVzLT5rZXJuZWwgY2FsbCAqLworICAgICAgICAgICAgICBzdHJ1Y3QgQ29kYUNyZWQgY3JlZDsKKyAgICAgICAgICB9IGNmc19wdXJnZXVzZXI7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBSZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIGNhY2hlIGNhcnJ5aW5nIHRoZSBDcmVkLiAgVGhpcworICBjYWxsIGlzIGlzc3VlZCB3aGVuIHRva2VucyBmb3IgYSB1c2VyIGV4cGlyZSBvciBhcmUgZmx1c2hlZC4KKworCisgIDUINS4ILjQINC4ILiAgWghaQQhBUAhQRghGSQhJTAhMRQhFCisKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICAgICAgIHN0cnVjdCBjZnNfemFwZmlsZV9vdXQgeyAgLyogQ0ZTX1pBUEZJTEUgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICAgICAgICAgICAgVmljZUZpZCBDb2RhRmlkOworICAgICAgICAgIH0gY2ZzX3phcGZpbGU7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBSZW1vdmUgYWxsIGVudHJpZXMgd2hpY2ggaGF2ZSB0aGUgKGRpciB2bm9kZSwgbmFtZSkgcGFpci4KKyAgVGhpcyBpcyBpc3N1ZWQgYXMgYSByZXN1bHQgb2YgYW4gaW52YWxpZGF0aW9uIG9mIGNhY2hlZCBhdHRyaWJ1dGVzIG9mCisgIGEgdm5vZGUuCisKKyAgTghOTwhPVAhURQhFIENhbGwgaXMgbm90IG5hbWVkIGNvcnJlY3RseSBpbiBOZXRCU0QgYW5kIE1hY2guICBUaGUgbWluaWNhY2hlCisgIHphcGZpbGUgcm91dGluZSB0YWtlcyBkaWZmZXJlbnQgYXJndW1lbnRzLiBMaW51eCBkb2VzIG5vdCBpbXBsZW1lbnQKKyAgdGhlIGludmFsaWRhdGlvbiBvZiBhdHRyaWJ1dGVzIGNvcnJlY3RseS4KKworCisKKyAgNQg1LgguNQg1LgguICBaCFpBCEFQCFBECERJCElSCFIKKworCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgICAgICAgc3RydWN0IGNmc196YXBkaXJfb3V0IHsgICAvKiBDRlNfWkFQRElSIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisgICAgICAgICAgICAgIFZpY2VGaWQgQ29kYUZpZDsKKyAgICAgICAgICB9IGNmc196YXBkaXI7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBSZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIGNhY2hlIGx5aW5nIGluIGEgZGlyZWN0b3J5CisgIENvZGFGaWQsIGFuZCBhbGwgY2hpbGRyZW4gb2YgdGhpcyBkaXJlY3RvcnkuIFRoaXMgY2FsbCBpcyBpc3N1ZWQgd2hlbgorICBWZW51cyByZWNlaXZlcyBhIGNhbGxiYWNrIG9uIHRoZSBkaXJlY3RvcnkuCisKKworICA1CDUuCC42CDYuCC4gIFoIWkEIQVAIUFYIVk4ITk8IT0QIREUIRQorCisKKworICBBCEFyCHJnCGd1CHVtCG1lCGVuCG50CHRzCHMKKworICAgICAgICAgIHN0cnVjdCBjZnNfemFwdm5vZGVfb3V0IHsgLyogQ0ZTX1pBUFZOT0RFIGlzIGEgdmVudXMtPmtlcm5lbCBjYWxsICovCisgICAgICAgICAgICAgIHN0cnVjdCBDb2RhQ3JlZCBjcmVkOworICAgICAgICAgICAgICBWaWNlRmlkIFZGaWQ7CisgICAgICAgICAgfSBjZnNfemFwdm5vZGU7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBSZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIGNhY2hlIGNhcnJ5aW5nIHRoZSBjcmVkIGFuZCBWRmlkCisgIGFzIGluIHRoZSBhcmd1bWVudHMuIFRoaXMgZG93bmNhbGwgaXMgcHJvYmFibHkgbmV2ZXIgaXNzdWVkLgorCisKKyAgNQg1LgguNwg3LgguICBQCFBVCFVSCFJHCEdFCEVGCEZJCElECEQKKworCisgIFMIU3UIdW0IbW0IbWEIYXIIcnkIeQorCisgIEEIQXIIcmcIZ3UIdW0IbWUIZW4IbnQIdHMIcworCisgICAgICAgICAgc3RydWN0IGNmc19wdXJnZWZpZF9vdXQgeyAvKiBDRlNfUFVSR0VGSUQgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICAgICAgICAgICAgVmljZUZpZCBDb2RhRmlkOworICAgICAgICAgIH0gY2ZzX3B1cmdlZmlkOworCisKKworICBECERlCGVzCHNjCGNyCHJpCGlwCHB0CHRpCGlvCG9uCG4gRmx1c2ggdGhlIGF0dHJpYnV0ZSBmb3IgdGhlIGZpbGUuIElmIGl0IGlzIGEgZGlyIChvZGQKKyAgdm5vZGUpLCBwdXJnZSBpdHMgY2hpbGRyZW4gZnJvbSB0aGUgbmFtZWNhY2hlIGFuZCByZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUKKyAgbmFtZWNhY2hlLgorCisKKworICA1CDUuCC44CDguCC4gIFIIUkUIRVAIUEwITEEIQUMIQ0UIRQorCisKKyAgUwhTdQh1bQhtbQhtYQhhcghyeQh5IFJlcGxhY2UgdGhlIEZpZCdzIGZvciBhIGNvbGxlY3Rpb24gb2YgbmFtZXMuCisKKyAgQQhBcghyZwhndQh1bQhtZQhlbghudAh0cwhzCisKKyAgICAgICAgICBzdHJ1Y3QgY2ZzX3JlcGxhY2Vfb3V0IHsgLyogY2ZzX3JlcGxhY2UgaXMgYSB2ZW51cy0+a2VybmVsIGNhbGwgKi8KKyAgICAgICAgICAgICAgVmljZUZpZCBOZXdGaWQ7CisgICAgICAgICAgICAgIFZpY2VGaWQgT2xkRmlkOworICAgICAgICAgIH0gY2ZzX3JlcGxhY2U7CisKKworCisgIEQIRGUIZXMIc2MIY3IIcmkIaXAIcHQIdGkIaW8Ib24IbiBUaGlzIHJvdXRpbmUgcmVwbGFjZXMgYSBWaWNlRmlkIGluIHRoZSBuYW1lIGNhY2hlIHdpdGgKKyAgYW5vdGhlci4gIEl0IGlzIGFkZGVkIHRvIGFsbG93IFZlbnVzIGR1cmluZyByZWludGVncmF0aW9uIHRvIHJlcGxhY2UKKyAgbG9jYWxseSBhbGxvY2F0ZWQgdGVtcCBmaWRzIHdoaWxlIGRpc2Nvbm5lY3RlZCB3aXRoIGdsb2JhbCBmaWRzIGV2ZW4KKyAgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50cyBvbiB0aG9zZSBmaWRzIGFyZSBub3QgemVyby4KKworICAwd3BhZ2UKKworICA2CDYuCC4gIEkISW4IbmkIaXQIdGkIaWEIYWwIbGkIaXoIemEIYXQIdGkIaW8Ib24IbiBhCGFuCG5kCGQgYwhjbAhsZQhlYQhhbghudQh1cAhwCisKKworICBUaGlzIHNlY3Rpb24gZ2l2ZXMgYnJpZWYgaGludHMgYXMgdG8gZGVzaXJhYmxlIGZlYXR1cmVzIGZvciB0aGUgQ29kYQorICBGUyBEcml2ZXIgYXQgc3RhcnR1cCBhbmQgdXBvbiBzaHV0ZG93biBvciBWZW51cyBmYWlsdXJlcy4gIEJlZm9yZQorICBlbnRlcmluZyB0aGUgZGlzY3Vzc2lvbiBpdCBpcyB1c2VmdWwgdG8gcmVwZWF0IHRoYXQgdGhlIENvZGEgRlMgRHJpdmVyCisgIG1haW50YWlucyB0aGUgZm9sbG93aW5nIGRhdGE6CisKKworICAxLiBtZXNzYWdlIHF1ZXVlcworCisgIDIuIGNub2RlcworCisgIDMuIG5hbWUgY2FjaGUgZW50cmllcworCisgICAgIFRoZSBuYW1lIGNhY2hlIGVudHJpZXMgYXJlIGVudGlyZWx5IHByaXZhdGUgdG8gdGhlIGRyaXZlciwgc28gdGhleQorICAgICBjYW4gZWFzaWx5IGJlIG1hbmlwdWxhdGVkLiAgIFRoZSBtZXNzYWdlIHF1ZXVlcyB3aWxsIGdlbmVyYWxseSBoYXZlCisgICAgIGNsZWFyIHBvaW50cyBvZiBpbml0aWFsaXphdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uICBUaGUgY25vZGVzIGFyZQorICAgICBtdWNoIG1vcmUgZGVsaWNhdGUuICBVc2VyIHByb2Nlc3NlcyBob2xkIHJlZmVyZW5jZSBjb3VudHMgaW4gQ29kYQorICAgICBmaWxlc3lzdGVtcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byBjbGVhbiB1cCB0aGUgY25vZGVzLgorCisgIEl0IGNhbiBleHBlY3QgcmVxdWVzdHMgdGhyb3VnaDoKKworICAxLiB0aGUgbWVzc2FnZSBzdWJzeXN0ZW0KKworICAyLiB0aGUgVkZTIGxheWVyCisKKyAgMy4gcGlvY3RsIGludGVyZmFjZQorCisgICAgIEN1cnJlbnRseSB0aGUgXwhwXwhpXwhvXwhjXwh0XwhsIHBhc3NlcyB0aHJvdWdoIHRoZSBWRlMgZm9yIENvZGEgc28gd2UgY2FuCisgICAgIHRyZWF0IHRoZXNlIHNpbWlsYXJseS4KKworCisgIDYINi4ILjEIMS4ILiAgUghSZQhlcQhxdQh1aQhpcghyZQhlbQhtZQhlbghudAh0cwhzCisKKworICBUaGUgZm9sbG93aW5nIHJlcXVpcmVtZW50cyBzaG91bGQgYmUgYWNjb21tb2RhdGVkOgorCisgIDEuIFRoZSBtZXNzYWdlIHF1ZXVlcyBzaG91bGQgaGF2ZSBvcGVuIGFuZCBjbG9zZSByb3V0aW5lcy4gIE9uIFVuaXgKKyAgICAgdGhlIG9wZW5pbmcgb2YgdGhlIGNoYXJhY3RlciBkZXZpY2VzIGFyZSBzdWNoIHJvdXRpbmVzLgorCisgICsIbyAgQmVmb3JlIG9wZW5pbmcsIG5vIG1lc3NhZ2VzIGNhbiBiZSBwbGFjZWQuCisKKyAgKwhvICBPcGVuaW5nIHdpbGwgcmVtb3ZlIGFueSBvbGQgbWVzc2FnZXMgc3RpbGwgcGVuZGluZy4KKworICArCG8gIENsb3NlIHdpbGwgbm90aWZ5IGFueSBzbGVlcGluZyBwcm9jZXNzZXMgdGhhdCB0aGVpciB1cGNhbGwgY2Fubm90CisgICAgIGJlIGNvbXBsZXRlZC4KKworICArCG8gIENsb3NlIHdpbGwgZnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgbWVzc2FnZSBxdWV1ZXMuCisKKworICAyLiBBdCBvcGVuIHRoZSBuYW1lY2FjaGUgc2hhbGwgYmUgaW5pdGlhbGl6ZWQgdG8gZW1wdHkgc3RhdGUuCisKKyAgMy4gQmVmb3JlIHRoZSBtZXNzYWdlIHF1ZXVlcyBhcmUgb3BlbiwgYWxsIFZGUyBvcGVyYXRpb25zIHdpbGwgZmFpbC4KKyAgICAgRm9ydHVuYXRlbHkgdGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgbWFraW5nIHN1cmUgdGhhbiBtb3VudGluZyB0aGUKKyAgICAgQ29kYSBmaWxlc3lzdGVtIGNhbm5vdCBzdWNjZWVkIGJlZm9yZSBvcGVuaW5nLgorCisgIDQuIEFmdGVyIGNsb3Npbmcgb2YgdGhlIHF1ZXVlcywgbm8gVkZTIG9wZXJhdGlvbnMgY2FuIHN1Y2NlZWQuICBIZXJlCisgICAgIG9uZSBuZWVkcyB0byBiZSBjYXJlZnVsLCBzaW5jZSBhIGZldyBvcGVyYXRpb25zIChsb29rdXAsCisgICAgIHJlYWQvd3JpdGUsIHJlYWRkaXIpIGNhbiBwcm9jZWVkIHdpdGhvdXQgdXBjYWxscy4gIFRoZXNlIG11c3QgYmUKKyAgICAgZXhwbGljaXRseSBibG9ja2VkLgorCisgIDUuIFVwb24gY2xvc2luZyB0aGUgbmFtZWNhY2hlIHNoYWxsIGJlIGZsdXNoZWQgYW5kIGRpc2FibGVkLgorCisgIDYuIEFsbCBtZW1vcnkgaGVsZCBieSBjbm9kZXMgY2FuIGJlIGZyZWVkIHdpdGhvdXQgcmVseWluZyBvbiB1cGNhbGxzLgorCisgIDcuIFVubW91bnRpbmcgdGhlIGZpbGUgc3lzdGVtIGNhbiBiZSBkb25lIHdpdGhvdXQgcmVseWluZyBvbiB1cGNhbGxzLgorCisgIDguIE1vdW50aW5nIHRoZSBDb2RhIGZpbGVzeXN0ZW0gc2hvdWxkIGZhaWwgZ3JhY2VmdWxseSBpZiBWZW51cyBjYW5ub3QKKyAgICAgZ2V0IHRoZSByb290ZmlkIG9yIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByb290ZmlkLiAgVGhlIGxhdHRlciBpcworICAgICBiZXN0IGltcGxlbWVudGVkIGJ5IFZlbnVzIGZldGNoaW5nIHRoZXNlIG9iamVjdHMgYmVmb3JlIGF0dGVtcHRpbmcKKyAgICAgdG8gbW91bnQuCisKKyAgTghOTwhPVAhURQhFICBOZXRCU0QgaW4gcGFydGljdWxhciBidXQgYWxzbyBMaW51eCBoYXZlIG5vdCBpbXBsZW1lbnRlZCB0aGUKKyAgYWJvdmUgcmVxdWlyZW1lbnRzIGZ1bGx5LiAgRm9yIHNtb290aCBvcGVyYXRpb24gdGhpcyBuZWVkcyB0byBiZQorICBjb3JyZWN0ZWQuCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NyYW1mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NyYW1mcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmNTNmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY3JhbWZzLnR4dApAQCAtMCwwICsxLDc2IEBACisKKwlDcmFtZnMgLSBjcmFtIGEgZmlsZXN5c3RlbSBvbnRvIGEgc21hbGwgUk9NCisKK2NyYW1mcyBpcyBkZXNpZ25lZCB0byBiZSBzaW1wbGUgYW5kIHNtYWxsLCBhbmQgdG8gY29tcHJlc3MgdGhpbmdzIHdlbGwuIAorCitJdCB1c2VzIHRoZSB6bGliIHJvdXRpbmVzIHRvIGNvbXByZXNzIGEgZmlsZSBvbmUgcGFnZSBhdCBhIHRpbWUsIGFuZAorYWxsb3dzIHJhbmRvbSBwYWdlIGFjY2Vzcy4gIFRoZSBtZXRhLWRhdGEgaXMgbm90IGNvbXByZXNzZWQsIGJ1dCBpcworZXhwcmVzc2VkIGluIGEgdmVyeSB0ZXJzZSByZXByZXNlbnRhdGlvbiB0byBtYWtlIGl0IHVzZSBtdWNoIGxlc3MKK2Rpc2tzcGFjZSB0aGFuIHRyYWRpdGlvbmFsIGZpbGVzeXN0ZW1zLiAKKworWW91IGNhbid0IHdyaXRlIHRvIGEgY3JhbWZzIGZpbGVzeXN0ZW0gKG1ha2luZyBpdCBjb21wcmVzc2libGUgYW5kCitjb21wYWN0IGFsc28gbWFrZXMgaXQgX3ZlcnlfIGhhcmQgdG8gdXBkYXRlIG9uLXRoZS1mbHkpLCBzbyB5b3UgaGF2ZSB0bworY3JlYXRlIHRoZSBkaXNrIGltYWdlIHdpdGggdGhlICJta2NyYW1mcyIgdXRpbGl0eS4KKworCitVc2FnZSBOb3RlcworLS0tLS0tLS0tLS0KKworRmlsZSBzaXplcyBhcmUgbGltaXRlZCB0byBsZXNzIHRoYW4gMTZNQi4KKworTWF4aW11bSBmaWxlc3lzdGVtIHNpemUgaXMgYSBsaXR0bGUgb3ZlciAyNTZNQi4gIChUaGUgbGFzdCBmaWxlIG9uIHRoZQorZmlsZXN5c3RlbSBpcyBhbGxvd2VkIHRvIGV4dGVuZCBwYXN0IDI1Nk1CLikKKworT25seSB0aGUgbG93IDggYml0cyBvZiBnaWQgYXJlIHN0b3JlZC4gIFRoZSBjdXJyZW50IHZlcnNpb24gb2YKK21rY3JhbWZzIHNpbXBseSB0cnVuY2F0ZXMgdG8gOCBiaXRzLCB3aGljaCBpcyBhIHBvdGVudGlhbCBzZWN1cml0eQoraXNzdWUuCisKK0hhcmQgbGlua3MgYXJlIHN1cHBvcnRlZCwgYnV0IGhhcmQgbGlua2VkIGZpbGVzCit3aWxsIHN0aWxsIGhhdmUgYSBsaW5rIGNvdW50IG9mIDEgaW4gdGhlIGNyYW1mcyBpbWFnZS4KKworQ3JhbWZzIGRpcmVjdG9yaWVzIGhhdmUgbm8gYC4nIG9yIGAuLicgZW50cmllcy4gIERpcmVjdG9yaWVzIChsaWtlCitldmVyeSBvdGhlciBmaWxlIG9uIGNyYW1mcykgYWx3YXlzIGhhdmUgYSBsaW5rIGNvdW50IG9mIDEuICAoVGhlcmUncworbm8gbmVlZCB0byB1c2UgLW5vbGVhZiBpbiBgZmluZCcsIGJ0dy4pCisKK05vIHRpbWVzdGFtcHMgYXJlIHN0b3JlZCBpbiBhIGNyYW1mcywgc28gdGhlc2UgZGVmYXVsdCB0byB0aGUgZXBvY2gKKygxOTcwIEdNVCkuICBSZWNlbnRseS1hY2Nlc3NlZCBmaWxlcyBtYXkgaGF2ZSB1cGRhdGVkIHRpbWVzdGFtcHMsIGJ1dAordGhlIHVwZGF0ZSBsYXN0cyBvbmx5IGFzIGxvbmcgYXMgdGhlIGlub2RlIGlzIGNhY2hlZCBpbiBtZW1vcnksIGFmdGVyCit3aGljaCB0aGUgdGltZXN0YW1wIHJldmVydHMgdG8gMTk3MCwgaS5lLiBtb3ZlcyBiYWNrd2FyZHMgaW4gdGltZS4KKworQ3VycmVudGx5LCBjcmFtZnMgbXVzdCBiZSB3cml0dGVuIGFuZCByZWFkIHdpdGggYXJjaGl0ZWN0dXJlcyBvZiB0aGUKK3NhbWUgZW5kaWFubmVzcywgYW5kIGNhbiBiZSByZWFkIG9ubHkgYnkga2VybmVscyB3aXRoIFBBR0VfQ0FDSEVfU0laRQorPT0gNDA5Ni4gIEF0IGxlYXN0IHRoZSBsYXR0ZXIgb2YgdGhlc2UgaXMgYSBidWcsIGJ1dCBpdCBoYXNuJ3QgYmVlbgorZGVjaWRlZCB3aGF0IHRoZSBiZXN0IGZpeCBpcy4gIEZvciB0aGUgbW9tZW50IGlmIHlvdSBoYXZlIGxhcmdlciBwYWdlcworeW91IGNhbiBqdXN0IGNoYW5nZSB0aGUgI2RlZmluZSBpbiBta2NyYW1mcy5jLCBzbyBsb25nIGFzIHlvdSBkb24ndAorbWluZCB0aGUgZmlsZXN5c3RlbSBiZWNvbWluZyB1bnJlYWRhYmxlIHRvIGZ1dHVyZSBrZXJuZWxzLgorCisKK0ZvciAvdXNyL3NoYXJlL21hZ2ljCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCiswCXVsZWxvbmcJMHgyOGNkM2Q0NQlMaW51eCBjcmFtZnMgb2Zmc2V0IDAKKz40CXVsZWxvbmcJeAkJc2l6ZSAlZAorPjgJdWxlbG9uZwl4CQlmbGFncyAweCV4Cis+MTIJdWxlbG9uZwl4CQlmdXR1cmUgMHgleAorPjE2CXN0cmluZwk+XDAJCXNpZ25hdHVyZSAiJS4xNnMiCis+MzIJdWxlbG9uZwl4CQlmc2lkLmNyYyAweCV4Cis+MzYJdWxlbG9uZwl4CQlmc2lkLmVkaXRpb24gJWQKKz40MAl1bGVsb25nCXgJCWZzaWQuYmxvY2tzICVkCis+NDQJdWxlbG9uZwl4CQlmc2lkLmZpbGVzICVkCis+NDgJc3RyaW5nCT5cMAkJbmFtZSAiJS4xNnMiCis1MTIJdWxlbG9uZwkweDI4Y2QzZDQ1CUxpbnV4IGNyYW1mcyBvZmZzZXQgNTEyCis+NTE2CXVsZWxvbmcJeAkJc2l6ZSAlZAorPjUyMAl1bGVsb25nCXgJCWZsYWdzIDB4JXgKKz41MjQJdWxlbG9uZwl4CQlmdXR1cmUgMHgleAorPjUyOAlzdHJpbmcJPlwwCQlzaWduYXR1cmUgIiUuMTZzIgorPjU0NAl1bGVsb25nCXgJCWZzaWQuY3JjIDB4JXgKKz41NDgJdWxlbG9uZwl4CQlmc2lkLmVkaXRpb24gJWQKKz41NTIJdWxlbG9uZwl4CQlmc2lkLmJsb2NrcyAlZAorPjU1Ngl1bGVsb25nCXgJCWZzaWQuZmlsZXMgJWQKKz41NjAJc3RyaW5nCT5cMAkJbmFtZSAiJS4xNnMiCisKKworSGFja2VyIE5vdGVzCistLS0tLS0tLS0tLS0KKworU2VlIGZzL2NyYW1mcy9SRUFETUUgZm9yIGZpbGVzeXN0ZW0gbGF5b3V0IGFuZCBpbXBsZW1lbnRhdGlvbiBub3Rlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvQ2hhbmdlTG9nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhYmE1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMTk3NyBAQAorLyogLSotIGF1dG8tZmlsbCAtKi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEKKworLSBjcmVhdGlvbiBvZiBkZXZmcworCistIG1vZGlmaWVkIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgdG8gc3VwcG9ydCBkZXZmcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIKKworLSBidWcgZml4IHdpdGggbWFudWFsIGlub2RlIGNyZWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MworCistIGJ1Z2ZpeGVzCisKKy0gZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKKworLSBjcmVhdGVkIGEgY291cGxlIG9mIHNjcmlwdHMgKG9uZSB0byBzYXZlJnJlc3RvcmUgYSBkZXZmcyBhbmQgdGhlCisgIG90aGVyIHRvIHNldCB1cCBjb21wYXRpYmlsaXR5IHN5bWxpbmtzKQorCistIGRldmZzIHN1cHBvcnQgZm9yIFNDU0kgZGlzY3MuIE5ldyBuYW1lIGZvcm1hdCBpczogc2RfaEhjQ2lJbEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY0CisKKy0gYnVnZml4IGZvciB0aGUgZGlyZWN0b3J5IHJlYWRpbmcgY29kZQorCistIGJ1Z2ZpeCBmb3IgY29tcGlsYXRpb24gd2l0aCBrZXJuZWxkCisKKy0gZGV2ZnMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBoYXJkIGRpc2NzCisKKy0gcmF0aW9uYWxpc2F0aW9uIG9mIHRoZSB2YXJpb3VzIHdhdGNoZG9nIGRyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1CisKKy0gc3VwcG9ydCBmb3IgbW91bnRpbmcgZGlyZWN0bHkgZnJvbSBlbnRyaWVzIGluIHRoZSBkZXZmcyAoaXQgZG9lc24ndAorICBuZWVkIHRvIGJlIG1vdW50ZWQgdG8gZG8gdGhpcyksIGluY2x1ZGluZyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICBNb3VudGluZyBvZiBzd2FwIHBhcnRpdGlvbnMgYWxzbyB3b3Jrcy4gSGVuY2UsIG5vdyBpZiB5b3Ugc2V0CisgIENPTkZJR19ERVZGU19PTkxZIHRvICdZJyB0aGVuIHlvdSB3b24ndCBiZSBhYmxlIHRvIGFjY2VzcyB5b3VyIGRpc2NzCisgIHZpYSBvcmRpbmFyeSBkZXZpY2Ugbm9kZXMuIE5hdHVyYWxseSwgdGhlIGRlZmF1bHQgaXMgJ04nIHNvIHRoYXQgeW91CisgIGNhbiBzdGlsbCB1c2UgeW91ciBvbGQgZGV2aWNlIG5vZGVzLiAgSWYgeW91IHdhbnQgdG8gbW91bnQgZnJvbSBkZXZmcworICBlbnRyaWVzLCBtYWtlIHN1cmUgeW91IHVzZTogYXBwZW5kID0gInJvb3Q9L2Rldi9zZF8uLi4iIGluIHlvdXIKKyAgbGlsby5jb25mLiBJdCBzZWVtcyBMSUxPIGxvb2tzIGZvciB0aGUgZGV2aWNlIG51bWJlciAobWFqb3ImbWlub3IpCisgIGFuZCB3cml0ZXMgdGhhdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UgOi0oIAorCistIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBtZW1vcnkgZGV2aWNlcyAoL2Rldi9udWxsLCAvZGV2L3plcm8sIC9kZXYvZnVsbAorICBhbmQgc28gb24pLiBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NgorCistIHN1cHBvcnQgZm9yIHN1YmRpcmVjdG9yaWVzCisKKy0gc3VwcG9ydCBmb3Igc3ltYm9saWMgbGlua3MgKGNyZWF0ZWQgYnkgZGV2ZnNfbWtfc3ltbGluaygpLCBubworICBzdXBwb3J0IHlldCBmb3IgY3JlYXRpb24gdmlhIHN5bWxpbmsoMikpCisKKy0gU0NTSSBkaXNjIG5hbWluZyBub3cgY2FzdCBpbiBzdG9uZSwgd2l0aCB0aGUgZm9ybWF0OgorICAvZGV2L3NkL2MwYjF0MnUzCWNvbnRyb2xsZXI9MCwgYnVzPTEsIElEPTIsIExVTj0zLCB3aG9sZSBkaXNjCisgIC9kZXYvc2QvYzBiMXQydTNwNAljb250cm9sbGVyPTAsIGJ1cz0xLCBJRD0yLCBMVU49MywgNHRoIHBhcnRpdGlvbgorCistIGxvb3AgZGV2aWNlcyBub3cgYXBwZWFyIGluIGRldmZzCisKKy0gdHR5IGRldmljZXMsIGNvbnNvbGUsIHNlcmlhbCBwb3J0cywgZXRjLiBub3cgYXBwZWFyIGluIGRldmZzCisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBidWdzIHdpdGggbW91bnRpbmcgZGV2ZnMtb25seSBkZXZpY2VzIG5vdyBmaXhlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjcKKworLSBTQ1NJIENELVJPTVMsIHRhcGVzIGFuZCBnZW5lcmljIGRldmljZXMgbm93IGFwcGVhciBpbiBkZXZmcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjgKKworLSBidWdmaXggd2l0aCBuby1yZXdpbmQgU0NTSSB0YXBlcworCistIFJBTURJU0NzIG5vdyBhcHBlYXIgaW4gZGV2ZnMKKworLSBiZXR0ZXIgY2xlYW5pbmcgdXAgb2YgZGV2ZnMgZW50cmllcyBjcmVhdGVkIGJ5IHZhcmlvdXMgbW9kdWxlcworCistIGludGVyZmFjZSBjaGFuZ2UgdG8gPGRldmZzX3JlZ2lzdGVyPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjkKKworLSB0aGUgdjggcGF0Y2ggd2FzIGNvcnJ1cHRlZCBzb21laG93LCB3aGljaCB3b3VsZCBhZmZlY3QgdGhlIHBhdGNoIGZvcgorICBsaW51eC9mcy9maWxlc3lzdGVtcy5jCisgIEkndmUgYWxzbyBmaXhlZCB0aGUgdjggcGF0Y2ggZmlsZSBvbiB0aGUgV1dXCisKKy0gTWV0YURldmljZXMgKC9kZXYvbWQqKSBzaG91bGQgbm93IGFwcGVhciBpbiBkZXZmcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwCisKKy0gYnVnZml4IGluIG1ldGEgZGV2aWNlIHN1cHBvcnQgZm9yIGRldmZzCisKKy0gY3JlYXRlZCB0aGlzIENoYW5nZUxvZyBmaWxlCisKKy0gYWRkZWQgZGV2ZnMgc3VwcG9ydCB0byB0aGUgZmxvcHB5IGRyaXZlcgorCistIGFkZGVkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHNvY2tldHMgaW4gYSBkZXZmcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExCisKKy0gYWRkZWQgREVWRlNfRkxfSElERV9VTlJFRyBmbGFnCisKKy0gaW5jb3Jwb3JhdGVkIGJldHRlciBwYXRjaCBmb3IgdHR5bmFtZSgpIGluIGxpYmMgNS40LjQzIGZyb20gSC5KLiBMdS4KKworLSBpbnRlcmZhY2UgY2hhbmdlIHRvIDxkZXZmc19ta19zeW1saW5rPgorCistIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHN5bWxpbmtzIHdpdGggc3ltbGluaygyKQorCistIHBhcmFsbGVsIHBvcnQgcHJpbnRlciAoL2Rldi9scCopIG5vdyBhcHBlYXJzIGluIGRldmZzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTIKKworLSBhZGRlZCBpbm9kZSBjaGVjayB0byA8ZGV2ZnNfZmlsbF9maWxlPiBmdW5jdGlvbgorCistIGltcHJvdmVkIGRldmZzIHN1cHBvcnQgd2hlbiBtb3VudGluZyBmcm9tIGRldmZzCisKKy0gYWRkZWQgY2FsbCB0byA8PHJlbGVhc2U+PiBvcGVyYXRpb24gd2hlbiByZW1vdmluZyBzd2FwIGFyZWFzIG9uCisgIGRldmZzIGRldmljZXMKKworLSBpbmNyZWFzZWQgTlJfU1VQRVIgdG8gMTI4IHRvIHN1cHBvcnQgbGFyZ2UgbnVtYmVycyBvZiBkZXZmcyBtb3VudHMKKyAgKGZvciBjaHJvb3QoMikgZ2FvbHMpCisKKy0gZml4ZWQgYnVnIGluIFNDU0kgZGlzYyBzdXBwb3J0OiB3YXMgZ2VuZXJhdGluZyBpbmNvcnJlY3QgbWlub3JzIGlmCisgIFNDU0kgSUQncyBkaWQgbm90IHN0YXJ0IGF0IDAgYW5kIGluY3JlYXNlIGJ5IDEKKworLSBzdXBwb3J0IHN5bWxpbmsgdHJhdmVyc2FsIHdoZW4gbW91bnRpbmcgcm9vdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzCisKKy0gYWRkZWQgZGV2ZnMgc3VwcG9ydCB0byBzb3VuZGNhcmQgZHJpdmVyCisgIFRoYW5rcyB0byBFcmljIER1bWFzIDxkdW1hc0BsaW51eC5ldS5vcmc+IGFuZAorICBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBhZGRlZCBkZXZmcyBzdXBwb3J0IHRvIHRoZSBqb3lzdGljayBkcml2ZXIKKworLSBsb29wIGRyaXZlciBub3cgaGFzIGl0J3Mgb3duIHN1YmRpcmVjdG9yeSAiL2Rldi9sb29wLyIKKworLSBjcmVhdGVkIDxkZXZmc19nZXRfZmxhZ3M+IGFuZCA8ZGV2ZnNfc2V0X2ZsYWdzPiBmdW5jdGlvbnMKKworLSBmaXggcHJvYmxlbSB3aXRoIFNDU0kgZGlzYyBjb21wYXRpYmlsaXR5IG5hbWVzIChzZHthLGIsYyxkLGUsZn0pCisgIHdoaWNoIGFzc3VtZXMgSUQncyBzdGFydCBhdCAwIGFuZCBpbmNyZWFzZSBieSAxLiBBbHNvIG9ubHkgY3JlYXRlCisgIGRldmZzIGVudHJpZXMgZm9yIFNDU0kgZGlzYyBwYXJ0aXRpb25zIHdoaWNoIGFjdHVhbGx5IGV4aXN0CisgIFNob3cgbmV3IG5hbWVzIGluIHBhcnRpdGlvbiBjaGVjaworICBUaGFua3MgdG8gSmFrdWIgSmVsaW5layA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNAorCistIGJ1ZyBmaXggaW4gZmxvcHB5IGRyaXZlcjogd291bGQgbm90IGNvbXBpbGUgd2l0aG91dAorICBDT05GSUdfREVWRlNfRlM9J1knCisgIFRoYW5rcyB0byBKdXJnZW4gQm90eiA8amJvdHpAbm92YS5ib3R6Lm9yZz4KKworLSBidWcgZml4IGluIGxvb3AgZHJpdmVyCisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBkbyBub3QgY3JlYXRlIGRldmZzIGVudHJpZXMgZm9yIHByaW50ZXJzIG5vdCBjb25maWd1cmVkCisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBkbyBub3QgY3JlYXRlIGRldmZzIGVudHJpZXMgZm9yIHNlcmlhbCBwb3J0cyBub3QgcHJlc2VudAorICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gZW5zdXJlIDx0dHlfcmVnaXN0ZXJfZGV2ZnM+IGlzIGV4cG9ydGVkIGZyb20gdHR5X2lvLmMKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGFsbG93IHVucmVnaXN0ZXJpbmcgb2YgZGV2ZnMgc3ltbGluayBlbnRyaWVzCisKKy0gZml4ZWQgYnVnIGluIFNDU0kgZGlzYyBuYW1pbmcgaW50cm9kdWNlZCBpbiBsYXN0IHBhdGNoIHZlcnNpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNQorCistIHBvcnRlZCB0byBrZXJuZWwgMi4xLjgxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTYKKworLSBjcmVhdGVkIDxkZXZmc19zZXRfc3ltbGlua19kZXN0aW5hdGlvbj4gZnVuY3Rpb24KKworLSBtb3ZlZCBERVZGU19TVVBFUl9NQUdJQyBpbnRvIGhlYWRlciBmaWxlCisKKy0gYWRkZWQgREVWRlNfRkxfSElERSBmbGFnCisKKy0gY3JlYXRlZCA8ZGV2ZnNfZ2V0X21hal9taW4+CisKKy0gY3JlYXRlZCA8ZGV2ZnNfZ2V0X2hhbmRsZV9mcm9tX2lub2RlPgorCistIGZpeGVkIGJ1Z3MgaW4gc2VhcmNoaW5nIGJ5IG1ham9yJm1pbm9yCisKKy0gY2hhbmdlZCBpbnRlcmZhY2UgdG8gPGRldmZzX3VucmVnaXN0ZXI+LCA8ZGV2ZnNfZmlsbF9maWxlPiBhbmQKKyAgPGRldmZzX2ZpbmRfaGFuZGxlPgorCistIGZpeGVkIGlub2RlIHRpbWVzIHdoZW4gc3ltbGluayBjcmVhdGVkIHdpdGggc3ltbGluaygyKQorCistIGNoYW5nZSB0dHkgZHJpdmVyIHRvIGRvIGF1dG8tY3JlYXRpb24gb2YgZGV2ZnMgZW50cmllcworICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gZml4ZWQgYnVnIGluIGdlbmhkLmM6IHdob2xlIGRpc2MgKG5vbi1TQ1NJKSB3YXMgbm90IHJlZ2lzdGVyZWQgdG8KKyAgZGV2ZnMKKworLSB1cGRhdGVkIGxpYmMgNS40LjQzIHBhdGNoIGZvciB0dHluYW1lKCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNworCistIGFkZGVkIENPTkZJR19ERVZGU19UVFlfQ09NUEFUCisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBidWdmaXggaW4gZGV2ZnMgc3VwcG9ydCBmb3IgZHJpdmVycy9jaGFyL2xwLmMKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIGNsZWFuIHVwIHNlcmlhbCBkcml2ZXIgc28gdGhhdCBQQ01DSUEgZGV2aWNlcyB1bnJlZ2lzdGVyIGNvcnJlY3RseQorICBUaGFua3MgdG8gQy4gU2NvdHQgQW5hbmlhbiA8Y2FuYW5pYW5AYWx1bW5pLnByaW5jZXRvbi5lZHU+CisKKy0gZml4ZWQgYnVnIGluIGdlbmhkLmM6IHdob2xlIGRpc2MgKG5vbi1TQ1NJKSB3YXMgbm90IHJlZ2lzdGVyZWQgdG8KKyAgZGV2ZnMgW3dhcyBtaXNzaW5nIGluIHBhdGNoIHYxNl0KKworLSB1cGRhdGVkIGxpYmMgNS40LjQzIHBhdGNoIGZvciB0dHluYW1lKCkgW3dhcyBtaXNzaW5nIGluIHBhdGNoIHYxNl0KKworLSBhbGwgU0NTSSBkZXZpY2VzIG5vdyByZWdpc3RlcmVkIGluIC9kZXYvc2cKKworLSBzdXBwb3J0IHJlbW92YWwgb2YgZGV2ZnMgZW50cmllcyB2aWEgdW5saW5rKDIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTgKKworLSBhZGRlZCBmbG9wcHkvP3U3MjAgZmxvcHB5IGVudHJ5CisKKy0gZml4ZWQga2VybmVsZCBzdXBwb3J0IGZvciBlbnRyaWVzIGluIGRldmZzIHN1YmRpcmVjdG9yaWVzCisKKy0gaW5jb3Jwb3JhdGVkIGxhdGVzdCBwYXRjaCBmb3IgdHR5bmFtZSgpIGluIGxpYmMgNS40LjQzIGZyb20gSC5KLiBMdS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOQorCistIGJ1ZyBmaXggd2hlbiBsb29raW5nIHVwIHVucmVnaXN0ZXJlZCBlbnRyaWVzOiBrZXJuZWxkIHdhcyBub3QgY2FsbGVkCisKKy0gZml4ZXMgZm9yIGtlcm5lbCAyLjEuODYgKG5vdyByZXF1aXJlcyAyLjEuODYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjAKKworLSBvbmx5IGNyZWF0ZSBhdmFpbGFibGUgZmxvcHB5IGVudHJpZXMKKyAgVGhhbmtzIHRvIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogPGFua3J5QGdyZWVuLm1pZi5wZy5nZGEucGw+CisKKy0gbmV3IElERSBuYW1pbmcgc2NoZW1lIGZvbGxvd2luZyBTQ1NJIGZvcm1hdCAoaS5lLiAvZGV2L2lkL2MwYjB0MHUwcDEKKyAgaW5zdGVhZCBvZiAvZGV2L2hkYTEpCisgIFRoYW5rcyB0byBBbmRyemVqIEtyenlzenRvZm93aWN6IDxhbmtyeUBncmVlbi5taWYucGcuZ2RhLnBsPgorCistIG5ldyBYVCBkaXNjIG5hbWluZyBzY2hlbWUgZm9sbG93aW5nIFNDU0kgZm9ybWF0IChpLmUuIC9kZXYveGQvYzB0MHAxCisgIGluc3RlYWQgb2YgL2Rldi94ZGExKQorICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KKworLSBuZXcgbm9uLXN0YW5kYXJkIENELVJPTSBuYW1lcyAoaS5lLiAvZGV2L3NicC9jI3QjKQorICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KKworLSBhbGxvdyBzeW1saW5rIHRyYXZlcnNhbCB3aGVuIG1vdW50aW5nIHRoZSByb290IGZpbGVzeXN0ZW0KKworLSBDcmVhdGUgZW50cmllcyBmb3IgTUQgZGV2aWNlcyBhdCBNRCBpbml0CisgIFRoYW5rcyB0byBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95NUBjYXB3YXkuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxCisKKy0gcG9ydGVkIHRvIGtlcm5lbCAyLjEuOTEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMgorCistIFNDU0kgaG9zdCBudW1iZXIgcGF0Y2ggKCJzY3NpaG9zdHM9IiBrZXJuZWwgb3B0aW9uKQorICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMworCistIEZpeGVkIHBlcnNpc3RlbmNlIGJ1ZyB3aXRoIGRldmljZSBudW1iZXJzIGZvciBtYW51YWxseSBjcmVhdGVkCisgIGRldmljZSBmaWxlcworCistIEZpeGVkIHByb2JsZW0gd2l0aCByZWNyZWF0aW5nIHN5bWxpbmtzIHdpdGggZGlmZmVyZW50IGNvbnRlbnQKKworLSBBZGRlZCBDT05GSUdfREVWRlNfTU9VTlQgKG1vdW50IGRldmZzIG9uIC9kZXYgYXQgYm9vdCB0aW1lKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjI0CisKKy0gU3dpdGNoZWQgZnJvbSBDT05GSUdfS0VSTkVMRCB0byBDT05GSUdfS01PRDogbW9kdWxlIGF1dG9sb2FkaW5nCisgIHNob3VsZCBub3cgd29yayBhZ2FpbgorCistIEhpZGUgZW50cmllcyB3aGljaCBhcmUgbWFudWFsbHkgdW5saW5rZWQKKworLSBBbHdheXMgaW52YWxpZGF0ZSBkZXZmcyBkZW50cnkgY2FjaGUgd2hlbiByZWdpc3RlcmluZyBlbnRyaWVzCisKKy0gU3VwcG9ydCByZW1vdmFsIG9mIGRldmZzIGRpcmVjdG9yaWVzIHZpYSBybWRpcigyKQorCistIEVuc3VyZSBkaXJlY3RvcmllcyBjcmVhdGVkIGJ5IDxkZXZmc19ta19kaXI+IGFyZSB2aXNpYmxlCisKKy0gRGVmYXVsdCBubyBhY2Nlc3MgZm9yICJvdGhlciIgZm9yIGZsb3BweSBkZXZpY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyNQorCistIFVwZGF0ZXMgdG8gQ1JFRElUUyBmaWxlIGFuZCBtaW5vciBJREUgbnVtYmVyaW5nIGNoYW5nZQorICBUaGFua3MgdG8gQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiA8YW5rcnlAZ3JlZW4ubWlmLnBnLmdkYS5wbD4KKworLSBJbnZhbGlkYXRlIGRldmZzIGRlbnRyeSBjYWNoZSB3aGVuIG1ha2luZyBkaXJlY3RvcmllcworCistIEludmFsaWRhdGUgZGV2ZnMgZGVudHJ5IGNhY2hlIHdoZW4gcmVtb3ZpbmcgZW50cmllcworCistIE1vcmUgaW5mb3JtYXRpdmUgbWVzc2FnZSBpZiByb290IEZTIG1vdW50IGZhaWxzIHdoZW4gZGV2ZnMKKyAgY29uZmlndXJlZAorCistIEZpeGVkIHBlcnNpc3RlbmNlIGJ1ZyB3aXRoIGZpZm9zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjYKKworLSBwb3J0ZWQgdG8ga2VybmVsIDIuMS45NworCistIENoYW5nZWQgc2VyaWFsIGRpcmVjdG9yeSBmcm9tICIvZGV2L3NlcmlhbCIgdG8gIi9kZXYvdHRzIiBhbmQKKyAgIi9kZXYvY29uc29sZXMiIHRvICIvZGV2L3ZjIiB0byBiZSBtb3JlIGZyaWVuZGx5IHRvIG5ldyBwcm9jcHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyNworCistIEFkZGVkIHN1cHBvcnQgZm9yIElERTQgYW5kIElERTUKKyAgVGhhbmtzIHRvIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogPGFua3J5QGdyZWVuLm1pZi5wZy5nZGEucGw+CisKKy0gRG9jdW1lbnRlZCAic2NzaWhvc3RzPSIgYm9vdCBwYXJhbWV0ZXIKKworLSBQcmludCBwcm9jZXNzIGNvbW1hbmQgd2hlbiBkZWJ1Z2dpbmcga2VybmVsZC9rbW9kCisKKy0gQWRkZWQgZGVidWdnaW5nIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyL2NoYW5nZSBvcGVyYXRpb25zCisKKy0gQWRkZWQgImRldmZzPSIgYm9vdCBvcHRpb25zCisKKy0gSGlkZSB1bnJlZ2lzdGVyZWQgZW50cmllcyBieSBkZWZhdWx0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjgKKworLSBObyBsb25nZXIgbG9jay91bmxvY2sgc3VwZXJibG9jayBpbiA8ZGV2ZnNfcHV0X3N1cGVyPiAoY29wZSB3aXRoCisgIHJlY2VudCBWRlMgaW50ZXJmYWNlIGNoYW5nZSkKKworLSBEbyBub3QgYXV0b21hdGljYWxseSBjaGFuZ2Ugb3duZXJzaGlwL3Byb3RlY3Rpb24gb2YgL2Rldi90dHkKKworLSBEcm9wIG5lZ2F0aXZlIGRlbnRyaWVzIHdoZW4gdGhleSBhcmUgcmVsZWFzZWQKKworLSBNYW5hZ2UgZGNhY2hlIG1vcmUgZWZmaWNpZW50bHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyOQorCistIEFkZGVkIERFVkZTX0ZMX0FVVE9fREVWTlVNIGZsYWcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzMAorCistIE5vIGxvbmdlciBzZXQgdW5uZWNlc3NhcnkgbWV0aG9kcworCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjk5LXByZTMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzMQorCistIEFkZGVkIFBJRCBkaXNwbGF5IHRvIDxjYWxsX2tlcm5lbGQ+IGRlYnVnZ2luZyBtZXNzYWdlCisKKy0gQWRkZWQgImRpcmVhZCIgYW5kICJkaXdyaXRlIiBvcHRpb25zCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTAyCisKKy0gRml4ZWQgcGVyc2lzdGVuY2UgcHJvYmxlbSB3aXRoIHBlcm1pc3Npb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MzIKKworLSBGaXhlZCBkZXZmcyBzdXBwb3J0IGluIGRyaXZlcnMvYmxvY2svbWQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjMzCisKKy0gU3VwcG9ydCBsZWdhY3kgZGV2aWNlIG5vZGVzCisKKy0gRml4ZWQgYnVnIHdoZXJlIHJlY3JlYXRlZCBpbm9kZXMgd2VyZSBoaWRkZW4KKworLSBOZXcgSURFIG5hbWluZyBzY2hlbWU6IGV2ZXJ5dGhpbmcgaXMgdW5kZXIgL2Rldi9pZGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzNAorCistIEltcHJvdmVkIGRlYnVnZ2luZyBpbiA8Z2V0X3Zmc19pbm9kZT4KKworLSBQcmV2ZW50IGR1cGxpY2F0ZSBjYWxscyB0byA8ZGV2ZnNfbWtfZGlyPiBpbiBTQ1NJIGxheWVyCisKKy0gTm8gbG9uZ2VyIGZyZWUgb2xkIGRlbnRyaWVzIGluIDxkZXZmc19ta19kaXI+CisKKy0gRnJlZSBhbGwgZGVudHJpZXMgZm9yIGEgZ2l2ZW4gZW50cnkgd2hlbiBkZWxldGluZyBpbm9kZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzNQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEwNSAoc291bmQgZHJpdmVyIGNoYW5nZXMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MzYKKworLSBGaXhlZCBzb3VuZCBkcml2ZXIgcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjM3CisKKy0gTWlub3IgZG9jdW1lbnRhdGlvbiB0d2Vha3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzOAorCistIE1vcmUgZG9jdW1lbnRhdGlvbiB0d2Vha3MKKworLSBGaXggZm9yIHNvdW5kIGRyaXZlciBwb3J0CisKKy0gUmVtb3ZlZCB0dHluYW1lLXBhdGNoIChncmFiIGxpYmMgNS40LjQ0IGluc3RlYWQpCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTA3LXByZTIgKGxvb3AgZHJpdmVyIGZpeCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYzOQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEwNyAoaGQuYyBodW5rIGJyb2tlIGR1ZSB0byBzcGVsbGluZyAiZml4ZXMiKS4gU2lnaAorCistIFJlbW92ZWQgbWFueSAjaWZkZWYncywgcmVwbGFjZWQgd2l0aCB0cmlja2VyeSBpbiBpbmNsdWRlL2RldmZzX2ZzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY0MAorCistIEZpeCBmb3Igc291bmQgZHJpdmVyIHBvcnQKKworLSBMaW1pdCBhdXRvLWRldmljZSBudW1iZXJpbmcgdG8gbWFqb3JzIDEyOCB0byAyMzkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY0MQorCistIEZpeGVkIGlub2RlIHRpbWVzIHBlcnNpc3RlbmNlIHByb2JsZW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY0MgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEwOCAoZHJpdmVycy9zY3NpL2hvc3RzLmMgaHVuayBicm9rZSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY0MworCistIEZpeGVkIHNwZWxsaW5nIGluIDxkZXZmc19yZWFkbGluaz4gZGVidWcKKworLSBGaXhlZCBidWcgaW4gPGRldmZzX3NldHVwPiBwYXJzaW5nICJkaWxvb2t1cCIKKworLSBNb3JlICNpZmRlZidzIHJlbW92ZWQKKworLSBTdXBwb3J0ZWQgU3BhcmMga2V5Ym9hcmQgKC9kZXYva2JkKQorCistIFN1cHBvcnRlZCBEU1A1NjAwMSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IgKC9kZXYvZHNwNTZrKQorCistIFN1cHBvcnRlZCBBcHBsZSBEZXNrdG9wIEJ1cyAoL2Rldi9hZGIpCisKKy0gU3VwcG9ydGVkIENvZGEgbmV0d29yayBmaWxlIHN5c3RlbSAoL2Rldi9jZnMqKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ0CisKKy0gRml4ZWQgZGV2ZnMgaW5vZGUgbGVhayB3aGVuIG1hbnVhbGx5IHJlY3JlYXRpbmcgaW5vZGVzCisKKy0gRml4ZWQgcGVybWlzc2lvbiBwZXJzaXN0ZW5jZSBwcm9ibGVtIHdoZW4gcmVjcmVhdGluZyBpbm9kZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY0NQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjExMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ2CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTEyLXByZTEKKworLSBSZW1vdmVkIGhhcm1sZXNzICJ1bnVzZWQgdmFyaWFibGUiIGNvbXBpbGVyIHdhcm5pbmcKKworLSBGaXhlZCBtb2RlcyBmb3IgbWFudWFsbHkgcmVjcmVhdGVkIGRldmljZSBub2RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ3CisKKy0gQWRkZWQgTlVMTCBkZXZmcyBpbm9kZSB3YXJuaW5nIGluIDxkZXZmc19yZWFkX2lub2RlPgorCistIEZvcmNlIGFsbCBpbm9kZSBubGluayB2YWx1ZXMgdG8gMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ4CisKKy0gQWRkZWQgImRpbWtub2QiIG9wdGlvbgorCistIFNldCBpbm9kZSBubGluayB0byAwIHdoZW4gZnJlZWluZyBkZW50cmllcworCistIEFkZGVkIHN1cHBvcnQgZm9yIHZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGRldmljZXMgKC9kZXYvdmNzKikKKyAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+CisKKy0gRml4ZWQgbW9kZXMgZm9yIG1hbnVhbGx5IHJlY3JlYXRlZCBzeW1saW5rcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjQ5CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTEzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NTAKKworLSBGaXhlZCBidWdzIGluIHJlY3JlYXRlZCBkaXJlY3RvcmllcyBhbmQgc3ltbGlua3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1MQorCistIEltcHJvdmVkIHJvYnVzdG5lc3Mgb2YgcmMuZGV2ZnMgc2NyaXB0CisgIFRoYW5rcyB0byBSb2RlcmljaCBTY2h1cHAgPHJzY2hAZXhwZXJ0ZWFtLmRlPgorCistIEZpeGVkIGJ1Z3MgaW4gcmVjcmVhdGVkIGRldmljZSBub2RlcworCistIEZpeGVkIGJ1ZyBpbiBjdXJyZW50bHkgdW51c2VkIDxkZXZmc19nZXRfaGFuZGxlX2Zyb21faW5vZGU+CisKKy0gRGVmaW5lZCBuZXcgPGRldmZzX2hhbmRsZV90PiB0eXBlCisKKy0gSW1wcm92ZWQgZGVidWdnaW5nIHdoZW4gZ2V0dGluZyBlbnRyaWVzCisKKy0gRml4ZWQgYnVnIHdoZXJlIGRpcmVjdG9yaWVzIGNvdWxkIGJlIGVtcHRpZWQKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1MgorCistIFJlcGxhY2VkIGR1bW15IC5lcG9jaCBpbm9kZSB3aXRoIC5kZXZmc2QgY2hhcmFjdGVyIGRldmljZQorCistIE1vZGlmaWVkIHJjLmRldmZzIHRvIHRha2UgYWNjb3VudCBvZiBhYm92ZSBjaGFuZ2UKKworLSBSZW1vdmVkIHNwdXJpb3VzIGRyaXZlciB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gQ09ORklHX0RFVkZTX0ZTPW4KKworLSBJbXBsZW1lbnRlZCBkZXZmc2QgcHJvdG9jb2wgcmV2aXNpb24gMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjUzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTE2IChrbW9kIGNoYW5nZSBicm9rZSBodW5rKQorCistIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscAorCistIFRlc3QgYW5kIHR0eSBwYXR0ZXJuIHBhdGNoIGZvciByYy5kZXZmcyBzY3JpcHQKKyAgVGhhbmtzIHRvIFJvZGVyaWNoIFNjaHVwcCA8cnNjaEBleHBlcnRlYW0uZGU+CisKKy0gQWRkZWQgc29vdGhpbmcgbWVzc2FnZSB0byB3YXJuaW5nIGluIDxkZXZmc19kX2lwdXQ+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NTQKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMTcKKworLSBGaXhlZCBkZWZhdWx0IHBlcm1pc3Npb25zIGluIHNvdW5kIGRyaXZlcgorCistIEFkZGVkIHN1cHBvcnQgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2VzICgvZGV2L2ZiKikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1NQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjExOQorCistIFVzZSBHQ0MgZXh0ZW5zaW9ucyBmb3Igc3RydWN0dXJlIGluaXRpYWxpc2F0aW9ucworCistIEltcGxlbWVudGVkIGFzeW5jIG9wZW4gbm90aWZpY2F0aW9uCisKKy0gSW5jcmVtZW50ZWQgZGV2ZnNkIHByb3RvY29sIHJldmlzaW9uIHRvIDEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1NgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyMC1wcmUzCisKKy0gTW92ZWQgYXN5bmMgb3BlbiBub3RpZmljYXRpb24gdG8gZW5kIG9mIDxkZXZmc19vcGVuPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjU3CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTIxCisKKy0gUHJlcGVuZGVkICIvZGV2LyIgdG8gbW9kdWxlIGxvYWQgcmVxdWVzdAorCistIFJlbmFtZWQgPGNhbGxfa2VybmVsZD4gdG8gPGNhbGxfa21vZD4KKworLSBDcmVhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYgZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjU4CisKKy0gRml4ZWQgdHlwbyAiQVlTTkMiIC0+ICJBU1lOQyIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY1OQorCistIEFkZGVkIG9wZW4gZmxhZyBmb3IgZmlsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2MAorCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyMy1wcmUyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NjEKKworLSBTZXQgaV9ibG9ja3M9MCBhbmQgaV9ibGtzaXplPTEwMjQgaW4gPGRldmZzX3JlYWRfaW5vZGU+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NjIKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2MworCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNC1wcmUyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NjQKKworLSBGaXhlZCBVbml4OTggcHR5IHN1cHBvcnQKKworLSBJbmNyZWFzZWQgYnVmZmVyIHNpemUgaW4gPGdldF9wYXJ0aXRpb25fbGlzdD4gdG8gYXZvaWQgY3Jhc2ggYW5kCisgIGJ1cm4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2NQorCistIE1vcmUgVW5peDk4IHB0eSBzdXBwb3J0IGZpeGVzCisKKy0gQWRkZWQgdGVzdCBmb3IgZW1wdHkgPDxuYW1lPj4gaW4gPGRldmZzX2ZpbmRfaGFuZGxlPgorCistIFJlbmFtZWQgPGdlbmVyYXRlX3BhdGg+IHRvIDxkZXZmc19nZW5lcmF0ZV9wYXRoPiBhbmQgcHVibGlzaGVkCisKKy0gQ3JlYXRlZCAvZGV2L3Jvb3Qgc3ltbGluaworICBUaGFua3MgdG8gUm9kZXJpY2ggU2NodXBwIDxyc2NoQEV4cGVyVGVhbS5kZT4KKyAgd2l0aCBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMgYnkgbWUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2NgorCistIFlldCBtb3JlIFVuaXg5OCBwdHkgc3VwcG9ydCBmaXhlcyAobm93IHRlc3RlZCkKKworLSBDcmVhdGVkIDxkZXZmc19nZXRfZm9wcz4KKworLSBTdXBwb3J0IG1lZGlhIGNoYW5nZSBjaGVja3Mgd2hlbiBDT05GSUdfREVWRlNfT05MWT15CisKKy0gQWJvbGlzaGVkIFVuaXg5OC1zdHlsZSBQVFkgbmFtZXMgZm9yIG9sZCBQVFkgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjY3CisKKy0gQWRkZWQgaW5saW5lIGRlY2xhcmF0aW9uIGZvciBkdW1teSA8ZGV2ZnNfZ2VuZXJhdGVfcGF0aD4KKworLSBSZW1vdmVkIHNwdXJpb3VzICJ1bmFibGUgdG8gcmVnaXN0ZXIuLi4gaW4gZGV2ZnMiIG1lc3NhZ2VzIHdoZW4KKyAgQ09ORklHX0RFVkZTX0ZTPW4KKworLSBGaXhlZCBtaXNjLiBkZXZpY2VzIHdoZW4gQ09ORklHX0RFVkZTX0ZTPW4KKworLSBMaW1pdCBhdXRvLWRldmljZSBudW1iZXJpbmcgdG8gbWFqb3JzIDE0NCB0byAyMzkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY2OAorCistIEhpZGUgdW5vcGVuZWQgdmlydHVhbCBjb25zb2xlcyBmcm9tIGRpcmVjdG9yeSBsaXN0aW5ncworCistIEFkZGVkIHN1cHBvcnQgZm9yIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjY5CisKKy0gRml4IGZvciBDT05GSUdfVlQ9bgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjcwCisKKy0gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLU9TUy9GcmVlIHNvdW5kIGNhcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzEKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMjYtcHJlMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjcyCisKKy0gI2lmZGVmJ3MgZm9yIENPTkZJR19ERVZGU19ESVNBQkxFX09MRF9OQU1FUyByZW1vdmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzMKKworLSBDT05GSUdfREVWRlNfRElTQUJMRV9PTERfTkFNRVMgcmVwbGFjZWQgd2l0aCAibm9jb21wYXQiIGJvb3Qgb3B0aW9uCisKKy0gQ09ORklHX0RFVkZTX0JPT1RfT1BUSU9OUyByZW1vdmVkOiBib290IG9wdGlvbnMgYWx3YXlzIGF2YWlsYWJsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjc0CisKKy0gUmVtb3ZlZCBDT05GSUdfREVWRlNfTU9VTlQgYW5kICJtb3VudCIgYm9vdCBvcHRpb24gYW5kIHJlcGxhY2VkIHdpdGgKKyAgIm5vbW91bnQiIGJvb3Qgb3B0aW9uCisKKy0gRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKy0gVXBkYXRlZCBzYW1wbGUgbW9kdWxlcy5jb25mCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzUKKworLSBVcGRhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYKKworLSBSZW1vdW50IGRldmZzIGFmdGVyIGluaXRyZCBmaW5pc2hlcworCistIFBvcnRlZCB0byBrZXJuZWwgMi4xLjEyNworCistIEFkZGVkIHN1cHBvcnQgZm9yIElTRE4KKyAgVGhhbmtzIHRvIENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3k1QGNhcHdheS5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzYKKworLSBVcGRhdGVkIGFuIGVtYWlsIGFkZHJlc3MgaW4gQ2hhbmdlTG9nCisKKy0gQ09ORklHX0RFVkZTX09OTFkgcmVwbGFjZWQgd2l0aCAib25seSIgYm9vdCBvcHRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY3NworCistIEFkZGVkIERFVkZTX0ZMX1JFTU9WQUJMRSBmbGFnCisKKy0gQ2hlY2sgZm9yIGRpc2MgY2hhbmdlIHdoZW4gbGlzdGluZyBkaXJlY3RvcmllcyB3aXRoIHJlbW92YWJsZSBtZWRpYQorICBkZXZpY2VzCisKKy0gVXNlIERFVkZTX0ZMX1JFTU9WQUJMRSBpbiBzZC5jCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2NzgKKworLSBPbmx5IGNhbGwgPHNjYW5fZGlyX2Zvcl9yZW1vdmFibGU+IG9uIGZpcnN0IGNhbGwgdG8gPGRldmZzX3JlYWRkaXI+CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTI5LXByZTUKKworLSBJU0ROIHN1cHBvcnQgaW1wcm92ZW1lbnRzCisgIFRoYW5rcyB0byBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95NUBjYXB3YXkuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjc5CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjEuMTMwCisKKy0gUmVuYW1lZCBtaXNjZGV2aWNlICJhcG0iIHRvICJhcG1fYmlvcyIgdG8gYmUgY29uc2lzdGVudCB3aXRoCisgIGRldmljZXMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODAKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMzEKKworLSBVcGRhdGVkIDxkZXZmc19ybWRpcj4gZm9yIFZGUyBjaGFuZ2UgaW4gMi4xLjEzMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjgxCisKKy0gRml4ZWQgcGVybWlzc2lvbnMgb24gL2Rldi9wdG14Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2ODIKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMS4xMzItcHJlNAorCistIENoYW5nZWQgaW5pdGlhbCBwZXJtaXNzaW9ucyBvbiAvZGV2L3B0cy8qCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfbWtfY29tcGF0PgorCistIEFkZGVkICJzeW1saW5rcyIgYm9vdCBvcHRpb24KKworLSBDaGFuZ2VkIGRldmZzX3JlZ2lzdGVyX2Jsa2RldigpIGJhY2sgdG8gcmVnaXN0ZXJfYmxrZGV2KCkgZm9yIElERQorCistIENoZWNrIGZvciBwYXJ0aXRpb25zIG9uIHJlbW92YWJsZSBtZWRpYSBpbiA8ZGV2ZnNfbG9va3VwPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjgzCisKKy0gRml4ZWQgc3VwcG9ydCBmb3IgcmFtZGlzYyB3aGVuIHVzaW5nIHN0cmluZy1iYXNlZCByb290IEZTIG5hbWUKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMi4wLXByZTEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY4NAorCistIFBvcnRlZCB0byBrZXJuZWwgMi4yLjAtcHJlNworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjg1CisKKy0gQ29tcGlsZSBmaXhlcyBmb3IgZHJpdmVyL3NvdW5kL3NvdW5kX2NvbW1vbi5jIChub24tbW9kdWxlKSBhbmQKKyAgZHJpdmVycy9pc2RuL2lzZG5fY29tbW9uLmMKKyAgVGhhbmtzIHRvIENocmlzdG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3k1QGNhcHdheS5jb20+CisKKy0gQWRkZWQgc3VwcG9ydCBmb3IgcmVnaXN0ZXJpbmcgcmVndWxhciBmaWxlcworCistIENyZWF0ZWQgPGRldmZzX3NldF9maWxlX3NpemU+CisKKy0gQWRkZWQgL2Rldi9jcHUvbXRyciBhcyBhbiBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UgdG8gL3Byb2MvbXRycgorCistIFVwZGF0ZSBkZXZmcyBpbm9kZXMgZnJvbSBlbnRyaWVzIGlmIG5vdCBjaGFuZ2VkIHRocm91Z2ggRlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY4NgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4yLjAtcHJlOQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjg3CisKKy0gRml4ZWQgYnVnIHdoZW4gbW91bnRpbmcgbm9uLWRldmZzIGRldmljZXMgaW4gYSBkZXZmcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjg4CisKKy0gRml4ZWQgPGRldmZzX2ZpbGxfZmlsZT4gdG8gb25seSBpbml0aWFsaXNlIHRlbXBvcmFyeSBpbm9kZXMKKworLSBUcmFwIGZvciBOVUxMIGZvcHMgaW4gPGRldmZzX3JlZ2lzdGVyPgorCistIFJldHVybiAtRU5PREVWIGluIDxkZXZmc19maWxsX2ZpbGU+IGZvciBub24tZHJpdmVyIGlub2RlcworCistIEZpeGVkIGJ1ZyB3aGVuIHVuc3dhcHBpbmcgbm9uLWRldmZzIGRldmljZXMgaW4gYSBkZXZmcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjg5CisKKy0gU3dpdGNoZWQgdG8gQyBkYXRhIHR5cGVzIGluIGluY2x1ZGUvbGludXgvZGV2ZnNfZnMuaAorCistIFN3aXRjaGVkIGZyb20gUEFUSF9NQVggdG8gREVWRlNfUEFUSExFTgorCistIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9tb2R1bGVzLmNvbmYgdG8gdGFrZSBhY2NvdW50CisgIG9mIHJldmVyc2Ugc2Nhbm5pbmcgKCEpIGJ5IG1vZHByb2JlCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjkwCisKKy0gQ09ORklHX0RFVkZTX0RJU0FCTEVfT0xEX1RUWV9OQU1FUyByZXBsYWNlZCB3aXRoICJub3R0eWNvbXBhdCIgYm9vdAorICBvcHRpb24KKworLSBDT05GSUdfREVWRlNfVFRZX0NPTVBBVCByZW1vdmVkOiBleGlzdGluZyAic3ltbGlua3MiIGJvb3Qgb3B0aW9uIG5vdworICBjb250cm9scyB0aGlzLiBUaGlzIG1lYW5zIHlvdSBtdXN0IGhhdmUgbGliYyA1LjQuNDQgb3IgbGF0ZXIsIG9yIGEKKyAgcmVjZW50IHZlcnNpb24gb2YgbGliYyA2IGlmIHlvdSB1c2UgdGhlICJzeW1saW5rcyIgb3B0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OTEKKworLSBTd2l0Y2ggZnJvbSA8ZGV2ZnNfbWtfc3ltbGluaz4gdG8gPGRldmZzX21rX2NvbXBhdD4gaW4KKyAgZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jIHRvIGZpeCBwcm9ibGVtcyB3aXRoIE1pZG5pZ2h0IENvbW1hbmRlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjkyCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjIuMi1wcmU1Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OTMKKworLSBNb2RpZmllZCA8c2RfbmFtZT4gaW4gZHJpdmVycy9zY3NpL3NkLmMgdG8gY29wZSB3aXRoIGRldmljZXMgdGhhdAorICBkb24ndCBleGlzdCAod2hpY2ggaGFwcGVucyB3aXRoIG5ldyBSQUlEIGF1dG9zdGFydCBjb2RlIHByaW50aygpcykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5NAorCistIEZpeGVkIGJ1ZyBpbiBqb3lzdGljayBkcml2ZXI6IG9ubHkgZmlyc3Qgam95c3RpY2sgd2FzIHJlZ2lzdGVyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5NQorCistIEZpeGVkIGFub3RoZXIgYnVnIGluIGpveXN0aWNrIGRyaXZlcgorCistIEZpeGVkIDxkZXZmc2RfcmVhZD4gdG8gbm90IG92ZXJydW4gZXZlbnQgYnVmZmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2OTYKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMi41LTIKKworLSBDcmVhdGVkIDxkZXZmc19hdXRvX3VucmVnaXN0ZXI+CisKKy0gRml4ZWQgYnVnczogY29tcGF0aWJpbGl0eSBlbnRyaWVzIHdlcmUgbm90IHVucmVnaXN0ZXJlZCBmb3I6CisgICAgbG9vcCBkcml2ZXIKKyAgICBmbG9wcHkgZHJpdmVyCisgICAgUkFNRElTQyBkcml2ZXIKKyAgICBJREUgdGFwZSBkcml2ZXIKKyAgICBTQ1NJIENELVJPTSBkcml2ZXIKKyAgICBTQ1NJIEhERCBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5NworCistIEZpeGVkIGJ1Z3M6IGNvbXBhdGliaWxpdHkgZW50cmllcyB3ZXJlIG5vdCB1bnJlZ2lzdGVyZWQgZm9yOgorICAgIEFMU0Egc291bmQgZHJpdmVyCisgICAgcGFydGl0aW9ucyBpbiBnZW5lcmljIGRpc2MgZHJpdmVyCisKKy0gRG9uJ3QgcmV0dXJuIHVucmVnaXN0cmVkIGVudHJpZXMgaW4gPGRldmZzX2ZpbmRfaGFuZGxlPgorCistIFBhbmljIGluIDxkZXZmc191bnJlZ2lzdGVyPiBpZiBlbnRyeSB1bnJlZ2lzdGVyZWQKKworLSBEb24ndCBwYW5pYyBpbiA8ZGV2ZnNfYXV0b191bnJlZ2lzdGVyPiBmb3IgZHVwbGljYXRlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjk4CisKKy0gRG9uJ3QgdW5yZWdpc3RlciBhbHJlYWR5IHVucmVnaXN0ZXJlZCBlbnRyaWVzIGluIDx1bnJlZ2lzdGVyPgorCistIFJlZ2lzdGVyIGVudHJ5IGluIDxzZF9kZXRlY3Q+CisKKy0gVW5yZWdpc3RlciBlbnRyeSBpbiA8c2RfZGV0YWNoPgorCistIENoYW5nZWQgdG8gPGRldmZzXypyZWdpc3Rlcl9jaHJkZXY+IGluIGRyaXZlcnMvY2hhci90dHlfaW8uYworCistIFBvcnRlZCB0byBrZXJuZWwgMi4yLjcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHY5OQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4yLjgKKworLSBGaXhlZCBidWcgaW4gZHJpdmVycy9zY3NpL3NkLmMgd2hlbiA+MTYgU0NTSSBkaXNjcworCistIERpc2FibGUgd2FybmluZyBtZXNzYWdlcyB3aGVuIHVuYWJsZSB0byByZWFkIHBhcnRpdGlvbiB0YWJsZSBmb3IKKyAgcmVtb3ZhYmxlIG1lZGlhCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTAwCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMS1wcmU1CisKKy0gQWRkZWQgIm9vcHMtb24tcGFuaWMiIGJvb3Qgb3B0aW9uCisKKy0gSW1wcm92ZWQgZGVidWdnaW5nIGluIDxkZXZmc19yZWdpc3Rlcj4gYW5kIDxkZXZmc191bnJlZ2lzdGVyPgorCistIFJlZ2lzdGVyIGVudHJ5IGluIDxzcl9kZXRlY3Q+CisKKy0gVW5yZWdpc3RlciBlbnRyeSBpbiA8c3JfZGV0YWNoPgorCistIFJlZ2lzdGVyIGVudHJ5IGluIDxzZ19kZXRlY3Q+CisKKy0gVW5yZWdpc3RlciBlbnRyeSBpbiA8c2dfZGV0YWNoPgorCistIEFkZGVkIHN1cHBvcnQgZm9yIEFMU0EgZHJpdmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwMQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDIKKworLSBVcGRhdGUgc2VyaWFsIGRyaXZlciB0byByZWdpc3RlciBQQ01DSUEgZW50cmllcworICBUaGFua3MgdG8gUm9jaC1BbGV4YW5kcmUgTm9taW5lLUJlZ3VpbiA8cm9jaEBzYW1hcmthbmQuaW5maW5pLmZyPgorCistIFVwZGF0ZWQgYW4gZW1haWwgYWRkcmVzcyBpbiBDaGFuZ2VMb2cKKworLSBIaWRlIHZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGVudHJpZXMgZnJvbSBkaXJlY3RvcnkgbGlzdGluZ3Mgd2hlbgorICBjb3JyZXNwb25kaW5nIGNvbnNvbGUgZGV2aWNlIGlzIG5vdCBvcGVuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTAzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEwNAorCistIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHNvbWUgZnVuY3Rpb25zCisKKy0gQWRkZWQgImRvYyIgdGFyZ2V0IHRvIGZzL2RldmZzL01ha2VmaWxlCisKKy0gQWRkZWQgInY0bCIgZGlyZWN0b3J5IGZvciB2aWRlbzRsaW51eCBkZXZpY2VzCisKKy0gUmVwbGFjZWQgY2FsbCB0byA8ZGV2ZnNfdW5yZWdpc3Rlcj4gaW4gPHNkX2RldGFjaD4gd2l0aCBjYWxsIHRvCisgIDxkZXZmc19yZWdpc3Rlcl9wYXJ0aXRpb25zPgorCistIE1vdmVkIHJlZ2lzdHJhdGlvbiBmb3Igc3IgYW5kIHNnIGRyaXZlcnMgZnJvbSBkZXRlY3QoKSB0byBhdHRhY2goKQorICBtZXRob2RzCisKKy0gUmVnaXN0ZXIgZW50cmllcyBpbiA8c3RfYXR0YWNoPiBhbmQgdW5yZWdpc3RlciBpbiA8c3RfZGV0YWNoPgorCistIFdvcmsgYXJvdW5kIElERSBkcml2ZXIgdHJlYXRpbmcgQ0QtUk9NIGFzIGdlbmRpc2sKKworLSBVc2UgPHNlZD4gaW5zdGVhZCBvZiA8dHI+IGluIHJjLmRldmZzCisKKy0gVXBkYXRlZCBUb0RvIGxpc3QKKworLSBSZW1vdmVkICJvb3BzLW9uLXBhbmljIiBib290IG9wdGlvbjogbm93IGFsd2F5cyBPb3BzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTA1CisKKy0gVW5yZWdpc3RlciBTQ1NJIGhvc3QgZnJvbSA8c2NzaV9ob3N0X25vX2xpc3Q+IGluIDxzY3NpX3VucmVnaXN0ZXI+CisgIFRoYW5rcyB0byBab2x04W4gQvZzevZybelueWkgPHpib3N6b3JAbWFpbC5leHRlcm5ldC5odT4KKworLSBEb24ndCBzYXZlIC9kZXYvbG9nIGluIHJjLmRldmZzCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNC1wcmUxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTA2CisKKy0gRml4ZWQgc2lsbHkgdHlwbyBpbiBkcml2ZXJzL3Njc2kvc3QuYworCistIEltcHJvdmVkIGRlYnVnZ2luZyBpbiA8ZGV2ZnNfcmVnaXN0ZXI+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTA3CisKKy0gQWRkZWQgImRpdW5saW5rIiBhbmQgIm5va21vZCIgYm9vdCBvcHRpb25zCisKKy0gUmVtb3ZlZCBzdXBlcmZsdW91cyB3YXJuaW5nIG1lc3NhZ2UgaW4gPGRldmZzX2RfaXB1dD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDgKKworLSBSZW1vdmUgZW50cmllcyB3aGVuIHVubG9hZGluZyBzb3VuZCBtb2R1bGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMDkKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy42LXByZTIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTAKKworLSBUb29rIGFjY291bnQgb2YgY2hhbmdlIHRvIDxkX2FsbG9jX3Jvb3Q+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTExCisKKy0gQ3JlYXRlZCBzZXBhcmF0ZSBldmVudCBxdWV1ZSBmb3IgZWFjaCBtb3VudGVkIGRldmZzCisKKy0gUmVtb3ZlZCA8ZGV2ZnNfaW52YWxpZGF0ZV9kY2FjaGU+CisKKy0gQ3JlYXRlZCBuZXcgaW9jdGwoKXMgZm9yIGRldmZzZAorCistIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byAzCisKKy0gRml4ZWQgYnVnIHdoZW4gcmUtY3JlYXRpbmcgZGlyZWN0b3JpZXM6IGNvbnRlbnRzIHdlcmUgbG9zdAorCistIEJsb2NrIGFjY2VzcyB0byBpbm9kZXMgdW50aWwgZGV2ZnNkIHVwZGF0ZXMgcGVybWlzc2lvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTIKKworLSBNb2RpZmllZCBwYXRjaCBzbyBpdCBhcHBsaWVzIGFnYWluc3QgMi4zLjUgYW5kIDIuMy42CisKKy0gVXBkYXRlZCBhbiBlbWFpbCBhZGRyZXNzIGluIENoYW5nZUxvZworCistIERvIG5vdCBhdXRvbWF0aWNhbGx5IGNoYW5nZSBvd25lcnNoaXAvcHJvdGVjdGlvbiBvZiAvZGV2L3R0eTxuPgorCistIFVwZGF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZgorCistIFN3aXRjaGVkIHRvIHNlbmRpbmcgcHJvY2VzcyB1aWQvZ2lkIHRvIGRldmZzZAorCistIFJlbmFtZWQgPGNhbGxfa21vZD4gdG8gPHRyeV9tb2Rsb2FkPgorCistIEFkZGVkIERFVkZTRF9OT1RJRllfTE9PS1VQIGV2ZW50CisKKy0gQWRkZWQgREVWRlNEX05PVElGWV9DSEFOR0UgZXZlbnQKKworLSBBZGRlZCBERVZGU0RfTk9USUZZX0NSRUFURSBldmVudAorCistIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byA0CisKKy0gTW92ZWQga2VybmVsLXNwZWNpZmljIHN0dWZmIHRvIGluY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy45CisKKy0gUmVzdHJpY3RlZCBwZXJtaXNzaW9ucyBvbiBzb21lIGJsb2NrIGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTQKKworLSBBZGRlZCBzdXBwb3J0IGZvciAvZGV2L25ldGxpbmsKKyAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+CisKKy0gUmV0dXJuIEVJU0RJUiByYXRoZXIgdGhhbiBFSU5WQUwgZm9yIHJlYWQoMikgb24gZGlyZWN0b3JpZXMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExNQorCistIEFkZGVkIHN1cHBvcnQgZm9yIGFsbCByZW1haW5pbmcgY2hhcmFjdGVyIGRldmljZXMKKyAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+CisKKy0gQ2xlYW5lZCB1cCBuZXRsaW5rIHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMTYKKworLSBBZGRlZCBzdXBwb3J0IGZvciAvZGV2L3BhcnBvcnQlZAorICBUaGFua3MgdG8gVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+CisKKy0gRml4ZWQgcGFyYWxsZWwgcG9ydCBBVEFQSSB0YXBlIGRyaXZlcgorCistIEZpeGVkIEF0YXJpIFNMTSBsYXNlciBwcmludGVyIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExNworCistIEFkZGVkIHN1cHBvcnQgZm9yIENPU0EgY2FyZAorICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBGaXhlZCBkcml2ZXJzL2NoYXIvcHBkZXYuYzogbWlzc2luZyAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCistIEZpeGVkIGRyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWluaXQuYworICBUaGFua3MgdG8gVmxhZGltaXIgUG9wb3YgPG1hc2hncmFkQHVzYS5uZXQ+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTE4CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMTUtcHJlMworCistIEZpeGVkIGJ1ZyBpbiBsb29wIGRyaXZlcgorCistIFVucmVnaXN0ZXIgL2Rldi9scCVkIGVudHJpZXMgaW4gZHJpdmVycy9jaGFyL2xwLmMKKyAgVGhhbmtzIHRvIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BkczIucGcuZ2RhLnBsPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjExOQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjE2Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTIwCisKKy0gRml4ZWQgYnVnIGluIGRyaXZlcnMvc2NzaS9zY3NpLmMKKworLSBBZGRlZCAvZGV2L3BwcAorICBUaGFua3MgdG8gRGVubmlzIEhvdSA8c21pbGF4QG1pbmRtZWxkLnlpLm9yZz4KKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4xNworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyMQorCistIEZpeGVkIGJ1ZyBpbiBkcml2ZXJzL2Jsb2NrL2xvb3AuYworCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjE4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTIyCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMTkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjMKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4yMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyNAorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjIxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTI1CisKKy0gQ3JlYXRlZCA8ZGV2ZnNfZ2V0X2luZm8+LCA8ZGV2ZnNfc2V0X2luZm8+LAorICA8ZGV2ZnNfZ2V0X2ZpcnN0X2NoaWxkPiBhbmQgPGRldmZzX2dldF9uZXh0X3NpYmxpbmc+CisgIEFkZGVkIDw8ZGlyPj4gcGFyYW1ldGVyIHRvIDxkZXZmc19yZWdpc3Rlcj4sIDxkZXZmc19ta19jb21wYXQ+LAorICA8ZGV2ZnNfbWtfZGlyPiBhbmQgPGRldmZzX2ZpbmRfaGFuZGxlPgorICBXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBGaXhlZCBhcHBhcmVudCBidWcgaW4gQ09TQSBkcml2ZXIKKworLSBSZS1pbnN0YXRlZCAic2NzaWhvc3RzPSIgYm9vdCBvcHRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMjYKKworLSBBbHdheXMgY3JlYXRlIC9kZXYvcHRzIGlmIENPTkZJR19VTklYOThfUFRZUz15CisKKy0gRml4ZWQgY2FsbCB0byA8ZGV2ZnNfbWtfZGlyPiBpbiBkcml2ZXJzL2Jsb2NrL2lkZS1kaXNrLmMKKyAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+CisKKy0gQWxsb3cgbXVsdGlwbGUgdW5yZWdpc3RyYXRpb25zCisKKy0gQ3JlYXRlZCAvZGV2L3Njc2kgaGllcmFyY2h5CisgIFdvcmsgc3BvbnNvcmVkIGJ5IFNHSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEyNworCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBObyBsb25nZXIgZGlzYWJsZSBkZXZwdHMgaWYgZGV2ZnMgZW5hYmxlZCAoY2F2ZWF0IGVtcHRvcikKKworLSBBZGRlZCBmbGFncyBhcnJheSB0byBzdHJ1Y3QgZ2VuZGlzayBhbmQgcmVtb3ZlZCBjb2RlIGZyb20KKyAgZHJpdmVycy9zY3NpL3NkLmMKKworLSBDcmVhdGVkIC9kZXYvZGlzY3MgaGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTI4CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIENyZWF0ZWQgL2Rldi9jZHJvbXMgaGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTI5CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBzb3VuZCBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHByaW50ZXIgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciB2aWRlbzRsaW51eCBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHBhcmFsbGVsIHBvcnQgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBmcmFtZSBidWZmZXIgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzMAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBBZGRlZCBtYWpvciBhbmQgbWlub3IgbnVtYmVyIHRvIGRldmZzZCBwcm90b2NvbAorCistIEluY3JlbWVudGVkIGRldmZzZCBwcm90b2NvbCByZXZpc2lvbiB0byA1CisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIFNvdW5kQmxhc3RlciBDRC1ST01zCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIG5ldGxpbmsgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIGdlbmVyaWMgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIHRhcGUgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjEzMQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBTdXBwb3J0IGluZm8gcG9pbnRlciBmb3IgYWxsIGRldmZzIGVudHJ5IHR5cGVzCisKKy0gQWRkZWQgPDxpbmZvPj4gcGFyYW1ldGVyIHRvIDxkZXZmc19ta19kaXI+IGFuZCA8ZGV2ZnNfbWtfc3ltbGluaz4KKworLSBSZW1vdmVkIC9kZXYvc3QgaGllcmFyY2h5CisKKy0gUmVtb3ZlZCAvZGV2L3NnIGhpZXJhcmNoeQorCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBsb29wIGRldmljZXMKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgSURFIHRhcGUgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBTQ1NJIENELVJPTXMKKworLSBSZW1vdmVkIC9kZXYvc3IgaGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTMyCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBmbG9wcHkgZGV2aWNlcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBSQU1ESVNDcworCistIFJlbW92ZWQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvciBtZXRhLWRldmljZXMKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgU0NTSSBkaXNjcworCistIENyZWF0ZWQgPGRldmZzX21ha2Vfcm9vdD4KKworLSBSZW1vdmVkIC9kZXYvc2QgaGllcmFyY2h5CisKKy0gU3VwcG9ydCAiLi4vIiB3aGVuIHNlYXJjaGluZyBkZXZmcyBuYW1lc3BhY2UKKworLSBDcmVhdGVkIC9kZXYvaWRlL2hvc3QqIGhpZXJhcmNoeQorCistIFN1cHBvcnRlZCBJREUgaGFyZCBkaXNjcyBpbiAvZGV2L2lkZS9ob3N0KiBoaWVyYXJjaHkKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgZW50cmllcyBmb3IgSURFIGRpc2NzCisKKy0gUmVtb3ZlZCAvZGV2L2lkZS9oZCBoaWVyYXJjaHkKKworLSBTdXBwb3J0ZWQgSURFIENELVJPTXMgaW4gL2Rldi9pZGUvaG9zdCogaGllcmFyY2h5CisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIElERSBDRC1ST01zCisKKy0gUmVtb3ZlZCAvZGV2L2lkZS9jZCBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzMKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfZ2V0X3VucmVnaXN0ZXJfc2xhdmU+CisKKy0gRml4ZWQgYnVnIGluIGZzL3BhcnRpdGlvbnMvY2hlY2suYyB3aGVuIHJlc2Nhbm5pbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzQKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlZCAvZGV2L3NkLCAvZGV2L3NyLCAvZGV2L3N0IGFuZCAvZGV2L3NnIGRpcmVjdG9yaWVzCisKKy0gUmVtb3ZlZCAvZGV2L2lkZS9oZCBkaXJlY3RvcnkKKworLSBFeHBvcnRlZCA8ZGV2ZnNfZ2V0X3BhcmVudD4KKworLSBDcmVhdGVkIDxkZXZmc19yZWdpc3Rlcl90YXBlPiBhbmQgL2Rldi90YXBlcyBoaWVyYXJjaHkKKworLSBSZW1vdmVkIC9kZXYvaWRlL210IGhpZXJhcmNoeQorCistIFJlbW92ZWQgL2Rldi9pZGUvZmQgaGllcmFyY2h5CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuMjUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzUKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHZpcnR1YWwgY29uc29sZSBjYXB0dXJlIGRldmljZXMKKworLSBSZW1vdmVkIHVudXNlZCA8ZGV2ZnNfc2V0X3N5bWxpbmtfZGVzdGluYXRpb24+CisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIHNlcmlhbCBkZXZpY2VzCisKKy0gUmVtb3ZlZCBjb21wYXRpYmlsaXR5IGVudHJpZXMgZm9yIGNvbnNvbGUgZGV2aWNlcworCistIERvIG5vdCBoaWRlIGVudHJpZXMgZnJvbSBkZXZmc2Qgb3IgY2hpbGRyZW4KKworLSBSZW1vdmVkIERFVkZTX0ZMX1RUWV9DT01QQVQgZmxhZworCistIFJlbW92ZWQgIm5vdHR5Y29tcGF0IiBib290IG9wdGlvbgorCistIFJlbW92ZWQgPGRldmZzX21rX2NvbXBhdD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzYKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gTW92ZWQgQlNEIHB0eSBkZXZpY2VzIHRvIC9kZXYvcHR5CisKKy0gQWRkZWQgREVWRlNfRkxfV0FJVCBmbGFnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTM3CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFJlYWxseSBmaXhlZCBidWcgaW4gZnMvcGFydGl0aW9ucy9jaGVjay5jIHdoZW4gcmVzY2FubmluZworCistIFN1cHBvcnQgbmV3ICJkaXNjIiBuYW1pbmcgc2NoZW1lIGluIDxnZXRfcmVtb3ZhYmxlX3BhcnRpdGlvbj4KKworLSBBbGxvdyBOVUxMIGZvcHMgaW4gPGRldmZzX3JlZ2lzdGVyPgorCistIFJlbW92ZWQgcmVkdW5kYW50IG5hbWUgZnVuY3Rpb25zIGluIFNDU0kgZGlzYyBhbmQgSURFIGRyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzgKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRml4ZWQgb2xkIGJ1Z3MgaW4gZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYywgZHJpdmVycy9jaGFyL3RwcWljMDIuYywKKyAgZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBhbmQgZHJpdmVycy9zY3NpL3Njc2kuYworICBUaGFua3MgdG8gU2VyZ2V5IEt1YnVzaGluIDxrc2lAa3NpLWxpbnV4LmNvbT4KKworLSBGYWxsIGJhY2sgdG8gbWFqb3IgdGFibGUgaWYgTlVMTCBmb3BzIGdpdmVuIHRvIDxkZXZmc19yZWdpc3Rlcj4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxMzkKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQ29ycmVjdGVkIGFuZCBtb3ZlZCA8Z2V0X2Jsa2ZvcHM+IGFuZCA8Z2V0X2NocmZvcHM+IGRlY2xhcmF0aW9ucworICBmcm9tIGFyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyB0byBpbmNsdWRlL2xpbnV4L2ZzLmgKKworLSBSZW1vdmVkIG5hbWUgZnVuY3Rpb24gZnJvbSBzdHJ1Y3QgZ2VuZGlzaworCistIFVwZGF0ZWQgZGV2ZnMgRkFRCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQwCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjI3Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQxCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEJ1ZyBmaXggaW4gYXJjaC9tNjhrL2F0YXJpL2pveXN0aWNrLmMKKworLSBNb3ZlZCBJU0ROIGFuZCBjYXBpIGRldmljZXMgdG8gL2Rldi9pc2RuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQyCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEJ1ZyBmaXggaW4gZHJpdmVycy9ibG9jay9pZGUtcHJvYmUuYyAocGF0Y2ggY29uZnVzaW9uKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE0MworCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBCdWcgZml4IGluIGRyaXZlcnMvYmxvY2svYmxrcGcuYzpwYXJ0aXRpb25fbmFtZSgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQ0CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjI5CisKKy0gUmVtb3ZlZCBjYWxscyB0byA8ZGV2ZnNfcmVnaXN0ZXI+IGZyb20gY2R1MzFhLCBjbTIwNiwgbWNkIGFuZCBtY2R4CisgIENELVJPTSBkcml2ZXJzOiBnZW5lcmljIGRyaXZlciBoYW5kbGVzIHRoaXMgbm93CisKKy0gTW92ZWQgam95c3RpY2sgZGV2aWNlcyB0byAvZGV2L2pveXN0aWNrcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE0NQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zMC1wcmUzCisKKy0gUmVnaXN0ZXIgd2hvbGUtZGlzYyBlbnRyeSBldmVuIGZvciBpbnZhbGlkIHBhcnRpdGlvbiB0YWJsZXMKKworLSBGaXhlZCBidWcgaW4gbW91bnRpbmcgcm9vdCBGUyB3aGVuIGluaXRyZCBlbmFibGVkCisKKy0gRml4ZWQgZGV2aWNlIGVudHJ5IGxlYWsgd2l0aCBJREUgQ0QtUk9NcworCistIEZpeGVkIGNvbXBpbGUgcHJvYmxlbSB3aXRoIGRyaXZlcnMvaXNkbi9pc2RuX2NvbW1vbi5jCisKKy0gTW92ZWQgQ09TQSBkZXZpY2VzIHRvIC9kZXYvY29zYQorCistIFN1cHBvcnQgZmlmb3Mgd2hlbiB1bnJlZ2lzdGVyaW5nCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfcmVnaXN0ZXJfc2VyaWVzPiBhbmQgdXNlZCBpbiBtYW55IGRyaXZlcnMKKworLSBNb3ZlZCBDb2RhIGRldmljZXMgdG8gL2Rldi9jb2RhCisKKy0gTW92ZWQgcGFyYWxsZWwgcG9ydCBJREUgdGFwZXMgdG8gL2Rldi9wdAorCistIE1vdmVkIHBhcmFsbGVsIHBvcnQgSURFIGdlbmVyaWMgZGV2aWNlcyB0byAvZGV2L3BnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQ2CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFJlbW92ZWQgb2Jzb2xldGUgREVWRlNfRkxfQ09NUEFUIGFuZCBERVZGU19GTF9UT0xFUkFOVCBmbGFncworCistIEZpeGVkIGNvbXBpbGUgcHJvYmxlbSB3aXRoIGZzL2NvZGEvcHNkZXYuYworCistIFJlaW5zdGF0ZSBjaGFuZ2UgdG8gPGRldmZzX3JlZ2lzdGVyX2Jsa2Rldj4gaW4KKyAgZHJpdmVycy9ibG9jay9pZGUtcHJvYmUuYyBub3cgdGhhdCBmcy9pc29mcy9pbm9kZS5jIGlzIGZpeGVkCisKKy0gU3dpdGNoZWQgdG8gPGRldmZzX3JlZ2lzdGVyX2Jsa2Rldj4gaW4gZHJpdmVycy9ibG9jay9mbG9wcHkuYywKKyAgZHJpdmVycy9zY3NpL3NyLmMgYW5kIGRyaXZlcnMvYmxvY2svbWQuYworCistIE1vdmVkIERBQzk2MCBkZXZpY2VzIHRvIC9kZXYvZGFjOTYwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQ3CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjMyLXByZTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNDgKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUmVtb3ZlZCBrbW9kIHN1cHBvcnQ6IHVzZSBkZXZmc2QgaW5zdGVhZAorCistIE1vdmVkIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyIGRldmljZXMgdG8gL2Rldi9taXNjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTQ5CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEVuc3VyZSBpbmNsdWRlL2xpbnV4L2pveXN0aWNrLmggaXMgT0sgZm9yIHVzZXItc3BhY2UKKworLSBJbXByb3ZlZCBkZWJ1Z2dpbmcgaW4gPGdldF92ZnNfaW5vZGU+CisKKy0gRW5zdXJlIGRlbnRyaWVzIGNyZWF0ZWQgYnkgZGV2ZnNkIHdpbGwgYmUgY2xlYW5lZCB1cAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1MAorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1MQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBQb3J0ZWQgdG8ga2VybmVsIDIuMy4zNS1wcmUxCisKKy0gQ3JlYXRlZCA8ZGV2ZnNfZ2V0X25hbWU+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTUyCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFVwZGF0ZWQgc2FtcGxlIG1vZHVsZXMuY29uZgorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjM2LXByZTEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTMKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDIKKworLSBSZW1vdmVkIDxkZXZmc19maWxsX2ZpbGU+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTU0CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFRvb2sgYWNjb3VudCBvZiBkZXZpY2UgbnVtYmVyIGNoYW5nZXMgZm9yIC9kZXYvZmIqCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTU1CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjQzLXByZTgKKworLSBNb3ZlZCAvZGV2L3R0eTAgdG8gL2Rldi92Yy8wCisKKy0gTW92ZWQgc2VxdWVuY2UgbnVtYmVyIGZvcm1hdHRpbmcgZnJvbSA8X3R0eV9tYWtlX25hbWU+IHRvIGRyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTYKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRml4ZWQgYnJlYWthZ2UgaW4gZHJpdmVycy9zY3NpL3NkLmMgZHVlIHRvIHJlY2VudCBTQ1NJIGNoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTcKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNTgKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjMuNDYtcHJlMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE1OQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBGaXhlZCBkcml2ZXJzL2Jsb2NrL21kLmMKKyAgVGhhbmtzIHRvIE1pa2UgR2FsYnJhaXRoIDxtaWtlZ0B3ZWlkZW4uZGU+CisKKy0gRG9jdW1lbnRhdGlvbiBmaXhlcworCistIE1vdmVkIGRldmljZSByZWdpc3RyYXRpb24gZnJvbSA8bHBfaW5pdD4gdG8gPGxwX3JlZ2lzdGVyPgorICBUaGFua3MgdG8gVGltIFdhdWdoIDx0d2F1Z2hAcmVkaGF0LmNvbT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjAKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRml4ZWQgZHJpdmVycy9jaGFyL2pveXN0aWNrL2pveXN0aWNrLmMKKyAgVGhhbmtzIHRvIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisKKy0gRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKy0gRml4ZWQgYXJjaC9pMzg2L2tlcm5lbC9tdHJyLmMgaWYgcHJvY2ZzIGFuZCBkZXZmcyBub3QgZW5hYmxlZAorCistIEZpeGVkIGRyaXZlcnMvY2hhci9zdGFsbGlvbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTYxCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFJlbW92ZSAvZGV2L2lkZSB3aGVuIGlkZS1tb2QgaXMgdW5sb2FkZWQKKworLSBGaXhlZCBidWcgaW4gZHJpdmVycy9ibG9jay9pZGUtcHJvYmUuYyB3aGVuIHNlY29uZGFyeSBidXQgbm8gcHJpbWFyeQorCistIEFkZGVkIERFVkZTX0ZMX05PX1BFUlNJU1RFTkNFIGZsYWcKKworLSBVc2VkIG5ldyBERVZGU19GTF9OT19QRVJTSVNURU5DRSBmbGFnIGZvciBVbml4OTggcHR5IHNsYXZlcworCistIFJlbW92ZWQgdW5uZWNlc3NhcnkgY2FsbCB0byA8dXBkYXRlX2RldmZzX2lub2RlX2Zyb21fZW50cnk+IGluCisgIDxkZXZmc19yZWFkZGlyPgorCistIE9ubHkgc2V0IGF1dG8tb3duZXJzaGlwIGZvciAvZGV2L3B0eS9zKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2MgorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBTZXQgaW5vZGUtPmlfc2l6ZSB0byBjb3JyZWN0IHNpemUgZm9yIHN5bWxpbmtzCisgIFRoYW5rcyB0byBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAZ29vcC5vcmc+CisKKy0gT25seSBnaXZlIGxvb2t1cCgpIG1ldGhvZCB0byBkaXJlY3RvcmllcyB0byBjb21wbHkgd2l0aCBuZXcgVkZTCisgIGFzc3VtcHRpb25zCisKKy0gUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzIGluIHN5bWxpbmsgbWV0aG9kcworCistIERvbid0IGtpbGwgZXhpc3RpbmcgYmxvY2sgb3BzIGluIDxkZXZmc19yZWFkX2lub2RlPgorCistIFJlc3RvcmUgYXV0by1vd25lcnNoaXAgZm9yIC9kZXYvcHR5L20qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTYzCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIERvbid0IGNyZWF0ZSBtaXNzaW5nIGRpcmVjdG9yaWVzIGluIDxkZXZmc19maW5kX2hhbmRsZT4KKworLSBSZW1vdmVkIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvbWstZGV2bGlua3MKKworLSBVcGRhdGVkIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTY0CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIEZpeGVkIENPTkZJR19ERVZGUyBicmVha2FnZSBpbiBkcml2ZXJzL2NoYXIvc2VyaWFsLmMgaW50cm9kdWNlZCBpbgorICBsaW51eC0yLjMuOTktcHJlNi03Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTY1CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFBvcnRlZCB0byBrZXJuZWwgMi4zLjk5LXByZTYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjYKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gQWRkZWQgQ09ORklHX0RFVkZTX01PVU5UCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTY3CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZXZmcy9SRUFETUUKKworLSBVcGRhdGVkIHNhbXBsZSBtb2R1bGVzLmNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNjgKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gRGlzYWJsZWQgbXVsdGktbW91bnQgY2FwYWJpbGl0eSAodXNlIFZGUyBiaW5kaW5ncyBpbnN0ZWFkKQorCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE2OQorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBSZW1vdmVkIG11bHRpLW1vdW50IGNvZGUKKworLSBSZW1vdmVkIGNvbXBhdGliaWxpdHkgbWFjcm9zOiBWRlMgaGFzIGNoYW5nZWQgdG9vIG11Y2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzAKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gTWVyZ2VkIGRldmZzIGlub2RlIGludG8gZGV2ZnMgZW50cnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzEKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gVXBkYXRlZCBzYW1wbGUgbW9kdWxlcy5jb25mCisKKy0gUmVtb3ZlZCBkZWFkIGNvZGUgaW4gPGRldmZzX3JlZ2lzdGVyPiB3aGljaCB1c2VkIHRvIGNhbGwKKyAgPGZyZWVfZGVudHJpZXM+CisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjQuMC10ZXN0Mi1wcmUzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTcyCisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIENoYW5nZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19yZWdpc3Rlcj4KKworLSBDaGFuZ2VkIGludGVyZmFjZSB0byA8ZGV2ZnNfcmVnaXN0ZXJfc2VyaWVzPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3MworCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBTaW1wbGlmaWVkIGludGVyZmFjZSB0byA8ZGV2ZnNfbWtfc3ltbGluaz4KKworLSBTaW1wbGlmaWVkIGludGVyZmFjZSB0byA8ZGV2ZnNfbWtfZGlyPgorCistIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDxkZXZmc19maW5kX2hhbmRsZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzQKKworV29yayBzcG9uc29yZWQgYnkgU0dJCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTc1CisKK1dvcmsgc3BvbnNvcmVkIGJ5IFNHSQorCistIERvY0Jvb2sgdXBkYXRlIGZvciBmcy9kZXZmcy9iYXNlLmMKKyAgVGhhbmtzIHRvIFRpbSBXYXVnaCA8dHdhdWdoQHJlZGhhdC5jb20+CisKKy0gUmVtb3ZlZCBzdGFsZSBmcy90dW5uZWwuYyAod2FzIG5ldmVyIHVzZWQgb3IgY29tcGxldGVkKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE3NgorCitXb3JrIHNwb25zb3JlZCBieSBTR0kKKworLSBVcGRhdGVkIFRvRG8gbGlzdAorCistIFJlbW92ZWQgc2FtcGxlIG1vZHVsZXMuY29uZjogbm93IGRpc3RyaWJ1dGVkIHdpdGggZGV2ZnNkCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjQuMC10ZXN0My1wcmU0ICh3aGljaCBoYWQgZGV2ZnMtcGF0Y2gtdjE3NCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxNzcKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBEb2N1bWVudGF0aW9uIGNsZWFudXBzCisKKy0gRW5zdXJlIDxkZXZmc19nZW5lcmF0ZV9wYXRoPiB0ZXJtaW5hdGVzIHN0cmluZyBmb3Igcm9vdCBlbnRyeQorICBUaGFua3MgdG8gVGltIEphbnNlbiA8dGltQHRqYW5zZW4uZGU+CisKKy0gRXhwb3J0ZWQgPGRldmZzX2dldF9uYW1lPiB0byBtb2R1bGVzCisKKy0gTWFrZSA8ZGV2ZnNfbWtfc3ltbGluaz4gc2VuZCBldmVudHMgdG8gZGV2ZnNkCisKKy0gQ2xlYW5lZCB1cCBvcHRpb24gcHJvY2Vzc2luZyBpbiA8ZGV2ZnNfc2V0dXA+CisKKy0gRml4ZWQgYnVncyBpbiBoYW5kbGluZyBzeW1saW5rczogY291bGQgbGVhayBvciBjYXVzZSBPb3BzCisKKy0gQ2xlYW5lZCB1cCBkaXJlY3RvcnkgaGFuZGxpbmcgYnkgc2VwYXJhdGluZyBmb3BzCisgIFRoYW5rcyB0byBBbGV4YW5kZXIgVmlybyA8dmlyb0BwYXJjZWxmYXJjZS5saW51eC50aGVwbGFuZXQuY28udWs+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTc4CisKKy0gRml4ZWQgaGFuZGxpbmcgb2YgaW52ZXJ0ZWQgb3B0aW9ucyBpbiA8ZGV2ZnNfc2V0dXA+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTc5CisKKy0gQWRqdXN0ZWQgPHRyeV9tb2Rsb2FkPiB0byBhY2NvdW50IGZvciA8ZGV2ZnNfZ2VuZXJhdGVfcGF0aD4gZml4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTgwCisKKy0gRml4ZWQgIUNPTkZJR19ERVZGU19GUyBzdHViIGRlY2xhcmF0aW9uIG9mIDxkZXZmc19nZXRfaW5mbz4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODEKKworLSBBbnN3ZXJlZCBxdWVzdGlvbiBwb3NlZCBieSBBbCBWaXJvIGFuZCByZW1vdmVkIGhpcyBjb21tZW50cyBmcm9tIDxkZXZmc19vcGVuPgorCistIE1vdmVkIHNldHRpbmcgb2YgcmVnaXN0ZXJlZCBmbGFnIGFmdGVyIG90aGVyIGZpZWxkcyBhcmUgY2hhbmdlZAorCistIEZpeGVkIHJhY2UgYmV0d2VlbiA8ZGV2ZnNkX2Nsb3NlPiBhbmQgPGRldmZzZF9ub3RpZnlfb25lPgorCistIEdsb2JhbCBWRlMgY2hhbmdlcyBhZGRlZCBib2d1cyBCS0wgdG8gZGV2ZnNkX2Nsb3NlKCk6IHJlbW92ZWQKKworLSBXaWRlbmVkIGxvY2tpbmcgaW4gPGRldmZzX3JlYWRsaW5rPiBhbmQgPGRldmZzX2ZvbGxvd19saW5rPgorCistIFJlcGxhY2VkIDxkZXZmc2RfcmVhZD4gc3RhY2sgdXNhZ2Ugd2l0aCA8ZGV2ZnNkX2lvY3RsPiBrbWFsbG9jCisKKy0gU2ltcGxpZmllZCBsb2NraW5nIGluIDxkZXZmc2RfaW9jdGw+IGFuZCBmaXhlZCBtZW1vcnkgbGVhaworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4MgorCistIENyZWF0ZWQgPGRldmZzXyphbGxvY19tYWpvcj4gYW5kIDxkZXZmc18qYWxsb2NfZGV2bnVtPgorCistIFJlbW92ZWQgYnJva2VuIGRldm51bSBhbGxvY2F0aW9uIGFuZCB1c2UgPGRldmZzX2FsbG9jX2Rldm51bT4KKworLSBGaXhlZCBvbGQgZGV2bnVtIGxlYWsgYnkgY2FsbGluZyBuZXcgPGRldmZzX2RlYWxsb2NfZGV2bnVtPgorCistIENyZWF0ZWQgPGRldmZzXyphbGxvY191bmlxdWVfbnVtYmVyPgorCistIEZpeGVkIG51bWJlciBsZWFrIGZvciAvZGV2L2Nkcm9tcy9jZHJvbSVkCisKKy0gRml4ZWQgbnVtYmVyIGxlYWsgZm9yIC9kZXYvZGlzY3MvZGlzYyVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTgzCisKKy0gRml4ZWQgYnVnIGluIDxkZXZmc19zZXR1cD4gd2hpY2ggY291bGQgaGFuZyBib290IHByb2Nlc3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODQKKworLSBEb2N1bWVudGF0aW9uIHR5cG8gZml4IGZvciBmcy9kZXZmcy91dGlsLmMKKworLSBGaXhlZCBkcml2ZXJzL2NoYXIvc3RhbGxpb24uYyBmb3IgZGV2ZnMKKworLSBBZGRlZCBERVZGU0RfTk9USUZZX0RFTEVURSBldmVudAorCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorCistIFJlbW92ZWQgI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+IGZyb20gZnMvZGV2ZnMvYmFzZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTg1CisKKy0gTWFkZSA8YmxvY2tfc2VtYXBob3JlPiBhbmQgPGNoYXJfc2VtYXBob3JlPiBpbiBmcy9kZXZmcy91dGlsLmMKKyAgcHJpdmF0ZQorCistIEZpeGVkIGlub2RlIHRhYmxlIHJhY2VzIGJ5IHJlbW92aW5nIGl0IGFuZCB1c2luZyBpbm9kZS0+dS5nZW5lcmljX2lwCisgIGluc3RlYWQKKworLSBNb3ZlZCA8ZGV2ZnNfcmVhZF9pbm9kZT4gaW50byA8Z2V0X3Zmc19pbm9kZT4KKworLSBNb3ZlZCA8ZGV2ZnNfd3JpdGVfaW5vZGU+IGludG8gPGRldmZzX25vdGlmeV9jaGFuZ2U+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTg2CisKKy0gRml4ZWQgcmFjZSBpbiA8ZGV2ZnNfZG9fc3ltbGluaz4gZm9yIHVuaS1wcm9jZXNzb3IKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxODcKKworLSBGaXhlZCBkcml2ZXJzL2NoYXIvc3RhbGxpb24uYyBmb3IgZGV2ZnMKKworLSBGaXhlZCBkcml2ZXJzL2NoYXIvcm9ja2V0LmMgZm9yIGRldmZzCisKKy0gRml4ZWQgYnVnIGluIDxkZXZmc19hbGxvY191bmlxdWVfbnVtYmVyPjogbGltaXRlZCB0byAxMjggbnVtYmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4OAorCistIFVwZGF0ZWQgbWFqb3IgbWFza3MgaW4gZnMvZGV2ZnMvdXRpbC5jIHVwIHRvIExpbnVzJyAibm8gbmV3IG1ham9ycyIKKyAgcHJvY2xhbWF0aW9uLiBCbG9jazogd2VyZSAxMjYgbm93IDEyMiBmcmVlLCBjaGFyOiB3ZXJlIDI2IG5vdyAxOSBmcmVlCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gUmVtb3ZlZCByZW1uYW50IG9mIG11bHRpLW1vdW50IHN1cHBvcnQgaW4gPGRldmZzX21rbm9kPgorCistIFJlbW92ZWQgdW51c2VkIERFVkZTX0ZMX1NIT1dfVU5SRUcgZmxhZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE4OQorCistIFJlbW92ZWQgbmxpbmsgZmllbGQgZnJvbSBzdHJ1Y3QgZGV2ZnNfaW5vZGUKKworLSBSZW1vdmVkIGF1dG8tb3duZXJzaGlwIGZvciAvZGV2L3B0eS8qIChCU0QgcHR5cykgYW5kIHVzZWQKKyAgREVWRlNfRkxfQ1VSUkVOVF9PV05FUnxERVZGU19GTF9OT19QRVJTSVNURU5DRSBmb3IgL2Rldi9wdHkvcyogKGp1c3QKKyAgbGlrZSBVbml4OTggcHR5IHNsYXZlcykgYW5kIG1hZGUgL2Rldi9wdHkvbSogcnctcnctcnctIGFjY2VzcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjE5MAorCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorCistIFJlcGxhY2VkIEJLTCB3aXRoIGdsb2JhbCByd3NlbSB0byBwcm90ZWN0IHN5bWxpbmsgZGF0YSAocXVpY2sgYW5kCisgIGRpcnR5IGhhY2spCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTkxCisKKy0gUmVwbGFjZWQgZ2xvYmFsIHJ3c2VtIGZvciBzeW1saW5rIHdpdGggcGVyLWxpbmsgcmVmY291bnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTIKKworLSBSZW1vdmVkIHVubmVjZXNzYXJ5ICNpZmRlZiBDT05GSUdfREVWRlNfRlMgZnJvbSBhcmNoL2kzODYva2VybmVsL210cnIuYworCistIFBvcnRlZCB0byBrZXJuZWwgMi40LjEwLXByZTExCisKKy0gU2V0IGlub2RlLT5pX21hcHBpbmctPmFfb3BzIGZvciBibG9jayBub2RlcyBpbiA8Z2V0X3Zmc19pbm9kZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTMKKworLSBXZW50IGJhY2sgdG8gZ2xvYmFsIHJ3c2VtIGZvciBzeW1saW5rcyAocmVmY291bnQgc2NoZW1lIG5vIGdvb2QpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTk0CisKKy0gRml4ZWQgb3ZlcnJ1biBpbiA8ZGV2ZnNfbGluaz4gYnkgcmVtb3ZpbmcgZnVuY3Rpb24gKG5vdCBuZWVkZWQpCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTk1CisKKy0gRml4ZWQgYnVmZmVyIHVuZGVycnVuIGluIDx0cnlfbW9kbG9hZD4KKworLSBNb3ZlZCBkb3duX3JlYWQoKSBmcm9tIDxzZWFyY2hfZm9yX2VudHJ5X2luX2Rpcj4gdG8gPGZpbmRfZW50cnk+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTk2CisKKy0gRml4ZWQgcmFjZSBpbiA8ZGV2ZnNkX2lvY3RsPiB3aGVuIHNldHRpbmcgZXZlbnQgbWFzaworICBUaGFua3MgdG8gS2FyaSBIdXJ0dGEgPGh1cnR0YUBsZWlqYS5taC5mbWkuZmk+CisKKy0gQXZvaWQgZGVhZGxvY2sgaW4gPGRldmZzX2ZvbGxvd19saW5rPiBieSB1c2luZyB0ZW1wb3JhcnkgYnVmZmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTk3CisKKy0gRmlyc3QgcmVsZWFzZSBvZiBuZXcgbG9ja2luZyBjb2RlIGZvciBkZXZmcyBjb3JlICh2MS4wKQorCistIEZpeGVkIGJ1ZyBpbiBkcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYxOTgKKworLSBEaXNjYXJkIHRlbXBvcmFyeSBidWZmZXIsIG5vdyB1c2UgIiVzIiBmb3IgZGVudHJ5IG5hbWVzCisKKy0gRG9uJ3QgZ2VuZXJhdGUgcGF0aCBpbiA8dHJ5X21vZGxvYWQ+OiB1c2UgZmFrZSBlbnRyeSBpbnN0ZWFkCisKKy0gVXNlICJleGlzdGluZyIgZGlyZWN0b3J5IGluIDxfZGV2ZnNfbWFrZV9wYXJlbnRfZm9yX2xlYWY+CisKKy0gVXNlIHNsYWIgY2FjaGUgcmF0aGVyIHRoYW4gZml4ZWQgYnVmZmVyIGZvciBkZXZmc2QgZXZlbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MTk5CisKKy0gUmVtb3ZlZCBvYnNvbGV0ZSB1c2FnZSBvZiBERVZGU19GTF9OT19QRVJTSVNURU5DRQorCistIFNlbmQgREVWRlNEX05PVElGWV9SRUdJU1RFUkVEIGV2ZW50cyBpbiA8ZGV2ZnNfbWtfZGlyPgorCistIEZpeGVkIGxvY2tpbmcgYnVnIGluIDxkZXZmc19kX3JldmFsaWRhdGVfd2FpdD4gZHVlIHRvIHR5cG8KKworLSBEbyBub3Qgc2VuZCBDUkVBVEUsIENIQU5HRSwgQVNZTkNfT1BFTiBvciBERUxFVEUgZXZlbnRzIGZyb20gZGV2ZnNkCisgIG9yIGNoaWxkcmVuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjAwCisKKy0gUG9ydGVkIHRvIGtlcm5lbCAyLjUuMS1wcmUyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjAxCisKKy0gRml4ZWQgYnVnIGluIDxkZXZmc2RfcmVhZD46IHdhcyBkZXJlZmVyZW5jaW5nIGZyZWVkIHBvaW50ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDIKKworLSBGaXhlZCBidWcgaW4gPGRldmZzZF9jbG9zZT46IHdhcyBkZXJlZmVyZW5jaW5nIGZyZWVkIHBvaW50ZXIKKworLSBBZGRlZCBwcm9jZXNzIGdyb3VwIGNoZWNrIGZvciBkZXZmc2QgcHJpdmlsZWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwMworCistIFVzZSBTTEFCX0FUT01JQyBpbiA8ZGV2ZnNkX25vdGlmeV9kZT4gZnJvbSA8ZGV2ZnNfZF9kZWxldGU+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjA0CisKKy0gUmVtb3ZlZCBsb25nIG9ic29sZXRlIHJjLmRldmZzCisKKy0gUmV0dXJuIG9sZCBlbnRyeSBpbiA8ZGV2ZnNfbWtfZGlyPiBmb3IgMi40Lngga2VybmVscworCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorCistIEluY3JlbWVudCByZWZjb3VudCBvbiBtb2R1bGUgaW4gPGNoZWNrX2Rpc2NfY2hhbmdlZD4KKworLSBDcmVhdGVkIDxkZXZmc19nZXRfaGFuZGxlPiBhbmQgZXhwb3J0ZWQgPGRldmZzX3B1dD4KKworLSBJbmNyZW1lbnQgcmVmY291bnQgb24gbW9kdWxlIGluIDxkZXZmc19nZXRfb3BzPgorCistIENyZWF0ZWQgPGRldmZzX3B1dF9vcHM+IGFuZCB1c2VkIHdoZXJlIG5lZWRlZCB0byBmaXggcmFjZXMKKworLSBBZGRlZCBjbGFyaWZ5aW5nIGNvbW1lbnRzIGluIHJlc3BvbnNlIHRvIHByZWxpbWluYXJ5IEVNQyBjb2RlIHJldmlldworCistIEFkZGVkIHBvaXNvbmluZyB0byA8ZGV2ZnNfcHV0PgorCistIEltcHJvdmVkIGRlYnVnZ2luZyBtZXNzYWdlcworCistIEZpeGVkIHVucmVnaXN0ZXIgYnVncyBpbiBkcml2ZXJzL21kL2x2bS1mcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjA1CisKKy0gQ29ycmVjdGVkIChtYWRlIHVzZWZ1bCkgZGVidWdnaW5nIG1lc3NhZ2UgaW4gPHVucmVnaXN0ZXI+CisKKy0gTW92ZWQgPGttZW1fY2FjaGVfY3JlYXRlPiBpbiA8bW91bnRfZGV2ZnNfZnM+IHRvIDxpbml0X2RldmZzX2ZzPgorCistIEZpeGVkIGRyaXZlcnMvbWQvbHZtLWZzLmMgdG8gY3JlYXRlICJsdm0iIGVudHJ5CisKKy0gQWRkZWQgbWFnaWMgbnVtYmVyIHRvIGd1YXJkIGFnYWluc3Qgc2NyaWJibGluZyBkcml2ZXJzCisKKy0gT25seSByZXR1cm4gb2xkIGVudHJ5IGluIDxkZXZmc19ta19kaXI+IGlmIGEgZGlyZWN0b3J5CisKKy0gRGVmaW5lZCBtYWNyb3MgZm9yIGVycm9yIGFuZCBkZWJ1ZyBtZXNzYWdlcworCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwNgorCistIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIENvbXBhcSBjcHFhcnJheSBjb250cm9sbGVycworCistIEZpeGVkIChyYXJlLCBvbGQpIHJhY2UgaW4gPGRldmZzX2xvb2t1cD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMDcKKworLSBGaXhlZCBkZWFkbG9jayBidWcgaW4gPGRldmZzX2RfcmV2YWxpZGF0ZV93YWl0PgorCistIFRhZyBWRlMgZGVsZXRhYmxlIGluIDxkZXZmc19ta19zeW1saW5rPiBpZiBoYW5kbGUgaWdub3JlZAorCistIFVwZGF0ZWQgUkVBRE1FIGZyb20gbWFzdGVyIEhUTUwgZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIwOAorCistIEFkZGVkIEtFUk5fKiB0byByZW1haW5pbmcgbWVzc2FnZXMKKworLSBDbGVhbmVkIHVwIGRlY2xhcmF0aW9uIG9mIDxzdGF0X3JlYWQ+CisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjA5CisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gUmVtb3ZlZCBzaWxlbnRseSBpbnRyb2R1Y2VkIGNhbGxzIHRvIGxvY2tfa2VybmVsKCkgYW5kCisgIHVubG9ja19rZXJuZWwoKSBkdWUgdG8gcmVjZW50IFZGUyBsb2NraW5nIGNoYW5nZXMuIEJLTCBpc24ndAorICByZXF1aXJlZCBpbiBkZXZmcyAKKworLSBDaGFuZ2VkIDxkZXZmc19ybWRpcj4gdG8gYWxsb3cgbGF0ZXIgYWRkaXRpb25zIGlmIG5vdCB5ZXQgZW1wdHkKKworLSBBZGRlZCBjYWxscyB0byA8ZGV2ZnNfcmVnaXN0ZXJfcGFydGl0aW9ucz4gaW4gZHJpdmVycy9ibG9jay9ibGtwYy5jCisgIDxhZGRfcGFydGl0aW9uPiBhbmQgPGRlbF9wYXJ0aXRpb24+CisKKy0gRml4ZWQgYnVnIGluIDxkZXZmc19hbGxvY191bmlxdWVfbnVtYmVyPjogd2FzIGNsZWFyaW5nIGJleW9uZAorICBiaXRmaWVsZAorCistIEZpeGVkIGJpdGZpZWxkIGRhdGEgdHlwZSBmb3IgPGRldmZzXyphbGxvY19kZXZudW0+CisKKy0gTWFkZSBtYWpvciBiaXRmaWVsZCB0eXBlIGFuZCBpbml0aWFsaXNlciA2NCBiaXQgc2FmZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxMAorCistIFVwZGF0ZWQgZnMvZGV2ZnMvdXRpbC5jIHRvIGZpeCBzaGlmdCB3YXJuaW5nIG9uIDY0IGJpdCBtYWNoaW5lcworICBUaGFua3MgdG8gQW50b24gQmxhbmNoYXJkIDxhbnRvbkBzYW1iYS5vcmc+CisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjExCisKKy0gRG8gbm90IHB1dCBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlciBkZXZpY2VzIGluIC9kZXYvbWlzYyBpZiB0aGV5CisgIHNwZWNpZnkgdGhlaXIgb3duIGRpcmVjdG9yeSAoaS5lLiBjb250YWluIGEgJy8nIGNoYXJhY3RlcikKKworLSBDb3BpZWQgbWFjcm8gZm9yIGVycm9yIG1lc3NhZ2VzIGZyb20gZnMvZGV2ZnMvYmFzZS5jIHRvCisgIGZzL2RldmZzL3V0aWwuYyBhbmQgbWFkZSB1c2Ugb2YgdGhpcyBtYWNybworCistIFJlbW92ZWQgMi40LnggY29tcGF0aWJpbGl0eSBjb2RlIGZyb20gZnMvZGV2ZnMvYmFzZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjEyCisKKy0gQWRkZWQgQktMIHRvIDxkZXZmc19vcGVuPiBiZWNhdXNlIGRyaXZlcnMgc3RpbGwgbmVlZCBpdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxMworCistIFByb3RlY3RlZCA8c2Nhbl9kaXJfZm9yX3JlbW92YWJsZT4gYW5kIDxnZXRfcmVtb3ZhYmxlX3BhcnRpdGlvbj4KKyAgZnJvbSBjaGFuZ2luZyBkaXJlY3RvcnkgY29udGVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMTQKKworLSBTd2l0Y2hlZCB0byBJU08gQyBzdHJ1Y3R1cmUgZmllbGQgaW5pdGlhbGlzZXJzCisKKy0gU3dpdGNoIHRvIHNldF9jdXJyZW50X3N0YXRlKCkgYW5kIG1vdmUgYmVmb3JlIGFkZF93YWl0X3F1ZXVlKCkKKworLSBVcGRhdGVkIFJFQURNRSBmcm9tIG1hc3RlciBIVE1MIGZpbGUKKworLSBGaXhlZCBkZXZmcyBlbnRyeSBsZWFrIGluIDxkZXZmc19yZWFkZGlyPiB3aGVuICpyZWFkZGlyIGZhaWxzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBwYXRjaCB2MjE1CisKKy0gQ3JlYXRlZCA8ZGV2ZnNfZmluZF9hbmRfdW5yZWdpc3Rlcj4KKworLSBTd2l0Y2hlZCBtYW55IGZ1bmN0aW9ucyBmcm9tIDxkZXZmc19maW5kX2hhbmRsZT4gdG8KKyAgPGRldmZzX2ZpbmRfYW5kX3VucmVnaXN0ZXI+CisKKy0gU3dpdGNoZWQgbWFueSBmdW5jdGlvbnMgZnJvbSA8ZGV2ZnNfZmluZF9oYW5kbGU+IHRvIDxkZXZmc19nZXRfaGFuZGxlPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxNgorCistIFN3aXRjaGVkIGFyY2gvaWE2NC9zbi9pby9oY2wuYyBmcm9tIDxkZXZmc19maW5kX2hhbmRsZT4gdG8KKyAgPGRldmZzX2dldF9oYW5kbGU+CisKKy0gUmVtb3ZlZCBkZXByZWNhdGVkIDxkZXZmc19maW5kX2hhbmRsZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIHBhdGNoIHYyMTcKKworLSBFeHBvcnRlZCA8ZGV2ZnNfZmluZF9hbmRfdW5yZWdpc3Rlcj4gYW5kIDxkZXZmc19vbmx5PiB0byBtb2R1bGVzCisKKy0gVXBkYXRlZCBSRUFETUUgZnJvbSBtYXN0ZXIgSFRNTCBmaWxlCisKKy0gRml4ZWQgbW9kdWxlIHVubG9hZCByYWNlIGluIDxkZXZmc19vcGVuPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgcGF0Y2ggdjIxOAorCistIFJlbW92ZWQgREVWRlNfRkxfQVVUT19PV05FUiBmbGFnCisKKy0gU3dpdGNoZWQgbGluZ2VyaW5nIHN0cnVjdHVyZSBmaWVsZCBpbml0aWFsaXNlciB0byBJU08gQworCistIEFkZGVkIGxvY2tpbmcgd2hlbiBzZXR0aW5nL2NsZWFyaW5nIGZsYWdzCisKKy0gRG9jdW1lbnRhdGlvbiBmaXggaW4gZnMvZGV2ZnMvdXRpbC5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1JFQURNRSBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MzY2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1JFQURNRQpAQCAtMCwwICsxLDE5NjQgQEAKK0RldmZzIChEZXZpY2UgRmlsZSBTeXN0ZW0pIEZBUQorCisKK0xpbnV4IERldmZzIChEZXZpY2UgRmlsZSBTeXN0ZW0pIEZBUQorUmljaGFyZCBHb29jaAorMjAtQVVHLTIwMDIKKworCitEb2N1bWVudCBsYW5ndWFnZXM6CisKKworCisKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEU6IHRoZSBtYXN0ZXIgY29weSBvZiB0aGlzIGRvY3VtZW50IGlzIGF2YWlsYWJsZSBvbmxpbmUgYXQ6CisKK2h0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvZGV2ZnMuaHRtbAorYW5kIGxvb2tzIG11Y2ggYmV0dGVyIHRoYW4gdGhlIHRleHQgdmVyc2lvbiBkaXN0cmlidXRlZCB3aXRoIHRoZQora2VybmVsIHNvdXJjZXMuIEEgbWlycm9yIHNpdGUgaXMgYXZhaWxhYmxlIGF0OgorCitodHRwOi8vd3d3LnJhcy51Y2FsZ2FyeS5jYS9+cmdvb2NoL2xpbnV4L2RvY3MvZGV2ZnMuaHRtbAorCitUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbmFsIGRhZW1vbiB0aGF0IG1heSBiZSB1c2VkIHdpdGggZGV2ZnMuIFlvdSBjYW4KK2ZpbmQgb3V0IG1vcmUgYWJvdXQgaXQgYXQ6CisKK2h0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4LworCitBIG1haWxpbmcgbGlzdCBpcyBhdmFpbGFibGUgd2hpY2ggeW91IG1heSBzdWJzY3JpYmUgdG8uIFNlbmQKK2VtYWlsCit0byBtYWpvcmRvbW9Ab3NzLnNnaS5jb20gd2l0aCB0aGUgZm9sbG93aW5nIGxpbmUgaW4gdGhlCitib2R5IG9mIHRoZSBtZXNzYWdlOgorc3Vic2NyaWJlIGRldmZzCitUbyB1bnN1YnNjcmliZSwgc2VuZCB0aGUgbWVzc2FnZSBib2R5OgordW5zdWJzY3JpYmUgZGV2ZnMKK2luc3RlYWQuIFRoZSBsaXN0IGlzIGFyY2hpdmVkIGF0CisKK2h0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9kZXZmcy9hcmNoaXZlLy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29udGVudHMKKworCitXaGF0IGlzIGl0PworCitXaHkgZG8gaXQ/CisKK1dobyBlbHNlIGRvZXMgaXQ/CisKK0hvdyBpdCB3b3JrcworCitPcGVyYXRpb25hbCBpc3N1ZXMgKGVzc2VudGlhbCByZWFkaW5nKQorCitJbnN0cnVjdGlvbnMgZm9yIHRoZSBpbXBhdGllbnQKK1Blcm1pc3Npb25zIHBlcnNpc3RlbmNlIGFjcm9zcyByZWJvb3RzCitEZWFsaW5nIHdpdGggZHJpdmVycyB3aXRob3V0IGRldmZzIHN1cHBvcnQKK0FsbCB0aGUgd2F5IHdpdGggRGV2ZnMKK090aGVyIElzc3VlcworS2VybmVsIE5hbWluZyBTY2hlbWUKK0RldmZzZCBOYW1pbmcgU2NoZW1lCitPbGQgQ29tcGF0aWJpbGl0eSBOYW1lcworU0NTSSBIb3N0IFByb2JpbmcgSXNzdWVzCisKKworCitEZXZpY2UgZHJpdmVycyBjdXJyZW50bHkgcG9ydGVkCisKK0FsbG9jYXRpb24gb2YgRGV2aWNlIE51bWJlcnMKKworUXVlc3Rpb25zIGFuZCBBbnN3ZXJzCisKK01ha2luZyB0aGluZ3Mgd29yaworQWx0ZXJuYXRpdmVzIHRvIGRldmZzCitXaGF0IEkgZG9uJ3QgbGlrZSBhYm91dCBkZXZmcworSG93IHRvIHJlcG9ydCBidWdzCitTdHJhbmdlIGtlcm5lbCBtZXNzYWdlcworQ29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBkZXZmc2QKKworCitPdGhlciByZXNvdXJjZXMKKworVHJhbnNsYXRpb25zIG9mIHRoaXMgZG9jdW1lbnQKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1doYXQgaXMgaXQ/CisKK0RldmZzIGlzIGFuIGFsdGVybmF0aXZlIHRvICJyZWFsIiBjaGFyYWN0ZXIgYW5kIGJsb2NrIHNwZWNpYWwgZGV2aWNlcworb24geW91ciByb290IGZpbGVzeXN0ZW0uIEtlcm5lbCBkZXZpY2UgZHJpdmVycyBjYW4gcmVnaXN0ZXIgZGV2aWNlcyBieQorbmFtZSByYXRoZXIgdGhhbiBtYWpvciBhbmQgbWlub3IgbnVtYmVycy4gVGhlc2UgZGV2aWNlcyB3aWxsIGFwcGVhciBpbgorZGV2ZnMgYXV0b21hdGljYWxseSwgd2l0aCB3aGF0ZXZlciBkZWZhdWx0IG93bmVyc2hpcCBhbmQKK3Byb3RlY3Rpb24gdGhlIGRyaXZlciBzcGVjaWZpZWQuIEEgZGFlbW9uIChkZXZmc2QpIGNhbiBiZSB1c2VkIHRvCitvdmVycmlkZSB0aGVzZSBkZWZhdWx0cy4gRGV2ZnMgaGFzIGJlZW4gaW4gdGhlIGtlcm5lbCBzaW5jZSAyLjMuNDYuCisKK05PVEUgdGhhdCBkZXZmcyBpcyBlbnRpcmVseSBvcHRpb25hbC4gSWYgeW91IHByZWZlciB0aGUgb2xkCitkaXNjLWJhc2VkIGRldmljZSBub2RlcywgdGhlbiBzaW1wbHkgbGVhdmUgQ09ORklHX0RFVkZTX0ZTPW4gKHRoZQorZGVmYXVsdCkuIEluIHRoaXMgY2FzZSwgbm90aGluZyB3aWxsIGNoYW5nZS4gIEFMU08gTk9URSB0aGF0IGlmIHlvdSBkbworZW5hYmxlIGRldmZzLCB0aGUgZGVmYXVsdHMgYXJlIHN1Y2ggdGhhdCBmdWxsIGNvbXBhdGliaWxpdHkgaXMKK21haW50YWluZWQgd2l0aCB0aGUgb2xkIGRldmljZXMgbmFtZXMuCisKK1RoZXJlIGFyZSB0d28gYXNwZWN0cyB0byBkZXZmczogb25lIGlzIHRoZSB1bmRlcmx5aW5nIGRldmljZQorbmFtZXNwYWNlLCB3aGljaCBpcyBhIG5hbWVzcGFjZSBqdXN0IGxpa2UgYW55IG1vdW50ZWQgZmlsZXN5c3RlbS4gVGhlCitvdGhlciBhc3BlY3QgaXMgdGhlIGZpbGVzeXN0ZW0gY29kZSB3aGljaCBwcm92aWRlcyBhIHZpZXcgb2YgdGhlCitkZXZpY2UgbmFtZXNwYWNlLiBUaGUgcmVhc29uIEkgbWFrZSBhIGRpc3RpbmN0aW9uIGlzIGJlY2F1c2UgZGV2ZnMKK2NhbiBiZSBtb3VudGVkIG1hbnkgdGltZXMsIHdpdGggZWFjaCBtb3VudCBzaG93aW5nIHRoZSBzYW1lIGRldmljZQorbmFtZXNwYWNlLiBDaGFuZ2VzIG1hZGUgYXJlIGdsb2JhbCB0byBhbGwgbW91bnRlZCBkZXZmcyBmaWxlc3lzdGVtcy4KK0Fsc28sIGJlY2F1c2UgdGhlIGRldmZzIG5hbWVzcGFjZSBleGlzdHMgd2l0aG91dCBhbnkgZGV2ZnMgbW91bnRzLCB5b3UKK2NhbiBlYXNpbHkgbW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbSBieSByZWZlcnJpbmcgdG8gYW4gZW50cnkgaW4gdGhlCitkZXZmcyBuYW1lc3BhY2UuCisKKworVGhlIGNvc3Qgb2YgZGV2ZnMgaXMgYSBzbWFsbCBpbmNyZWFzZSBpbiBrZXJuZWwgY29kZSBzaXplIGFuZCBtZW1vcnkKK3VzYWdlLiBBYm91dCA3IHBhZ2VzIG9mIGNvZGUgKHNvbWUgb2YgdGhhdCBpbiBfX2luaXQgc2VjdGlvbnMpIGFuZCA3MgorYnl0ZXMgZm9yIGVhY2ggZW50cnkgaW4gdGhlIG5hbWVzcGFjZS4gQSBtb2Rlc3Qgc3lzdGVtIGhhcyBvbmx5IGEKK2NvdXBsZSBvZiBodW5kcmVkIGRldmljZSBlbnRyaWVzLCBzbyB0aGlzIGNvc3RzIGEgZmV3IG1vcmUKK3BhZ2VzLiBDb21wYXJlIHRoaXMgd2l0aCB0aGUgc3VnZ2VzdGlvbiB0byBwdXQgL2RldiBvbiBhIDxhCitocmVmPSIjd2h5LWZhcS1yYW1kaXNjIj5yYW1kaXNjLgorCitPbiBhIHR5cGljYWwgbWFjaGluZSwgdGhlIGNvc3QgaXMgdW5kZXIgMC4yIHBlcmNlbnQuIE9uIGEgbW9kZXN0CitzeXN0ZW0gd2l0aCA2NCBNQnl0ZXMgb2YgUkFNLCB0aGUgY29zdCBpcyB1bmRlciAwLjEgcGVyY2VudC4gIFRoZQorYWNjdXNhdGlvbnMgb2YgImJsb2F0d2FyZSIgbGV2ZWxsZWQgYXQgZGV2ZnMgYXJlIG5vdCBqdXN0aWZpZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworV2h5IGRvIGl0PworCitUaGVyZSBhcmUgc2V2ZXJhbCBwcm9ibGVtcyB0aGF0IGRldmZzIGFkZHJlc3Nlcy4gU29tZSBvZiB0aGVzZQorcHJvYmxlbXMgYXJlIG1vcmUgc2VyaW91cyB0aGFuIG90aGVycyAoZGVwZW5kaW5nIG9uIHlvdXIgcG9pbnQgb2YKK3ZpZXcpLCBhbmQgc29tZSBjYW4gYmUgc29sdmVkIHdpdGhvdXQgZGV2ZnMuIEhvd2V2ZXIsIHRoZSB0b3RhbGl0eSBvZgordGhlc2UgcHJvYmxlbXMgcmVhbGx5IGNhbGxzIG91dCBmb3IgZGV2ZnMuCisKK1RoZSBjaG9pY2UgaXMgYSBwYXRjaHdvcmsgb2YgaW5lZmZpY2llbnQgdXNlciBzcGFjZSBzb2x1dGlvbnMsIHdoaWNoCithcmUgY29tcGxleCBhbmQgbGlrZWx5IHRvIGJlIGZyYWdpbGUsIG9yIHRvIHVzZSBhIHNpbXBsZSBhbmQgZWZmaWNpZW50CitkZXZmcyB3aGljaCBpcyByb2J1c3QuCisKK1RoZXJlIGhhdmUgYmVlbiBtYW55IGNvdW50ZXItcHJvcG9zYWxzIHRvIGRldmZzLCBhbGwgc2Vla2luZyB0bworcHJvdmlkZSBzb21lIG9mIHRoZSBiZW5lZml0cyB3aXRob3V0IGFjdHVhbGx5IGltcGxlbWVudGluZyBkZXZmcy4gU28KK2ZhciB0aGVyZSBoYXMgYmVlbiBhbiBhYnNlbmNlIG9mIGNvZGUgYW5kIG5vIHByb3Bvc2VkIGFsdGVybmF0aXZlIGhhcworYmVlbiBhYmxlIHRvIHByb3ZpZGUgYWxsIHRoZSBmZWF0dXJlcyB0aGF0IGRldmZzIGRvZXMuIEZ1cnRoZXIsCithbHRlcm5hdGl2ZSBwcm9wb3NhbHMgcmVxdWlyZSBmYXIgbW9yZSBjb21wbGV4aXR5IGluIHVzZXItc3BhY2UgKGFuZAorc3RpbGwgZGVsaXZlciBsZXNzIGZ1bmN0aW9uYWxpdHkgdGhhbiBkZXZmcykuIFNvbWUgcGVvcGxlIGhhdmUgdGhlCittYW50cmEgb2YgcmVkdWNpbmcgImtlcm5lbCBibG9hdCIsIGJ1dCBkb24ndCBjb25zaWRlciB0aGUgZWZmZWN0cyBvbgordXNlci1zcGFjZS4KKworQSBnb29kIHNvbHV0aW9uIGxpbWl0cyB0aGUgdG90YWwgY29tcGxleGl0eSBvZiBrZXJuZWwtc3BhY2UgYW5kCit1c2VyLXNwYWNlLgorCisKK01ham9yJm1pbm9yIGFsbG9jYXRpb24KKworVGhlIGV4aXN0aW5nIHNjaGVtZSByZXF1aXJlcyB0aGUgYWxsb2NhdGlvbiBvZiBtYWpvciBhbmQgbWlub3IgZGV2aWNlCitudW1iZXJzIGZvciBlYWNoIGFuZCBldmVyeSBkZXZpY2UuIFRoaXMgbWVhbnMgdGhhdCBhIGNlbnRyYWwKK2NvLW9yZGluYXRpbmcgYXV0aG9yaXR5IGlzIHJlcXVpcmVkIHRvIGlzc3VlIHRoZXNlIGRldmljZSBudW1iZXJzCisodW5sZXNzIHlvdSdyZSBkZXZlbG9waW5nIGEgInByaXZhdGUiIGRldmljZSBkcml2ZXIpLCBpbiBvcmRlciB0bworcHJlc2VydmUgdW5pcXVlbmVzcy4gRGV2ZnMgc2hpZnRzIHRoZSBidXJkZW4gdG8gYSBuYW1lc3BhY2UuIFRoaXMgbWF5Citub3Qgc2VlbSBsaWtlIGEgaHVnZSBiZW5lZml0LCBidXQgYWN0dWFsbHkgaXQgaXMuIFNpbmNlIGRyaXZlciBhdXRob3JzCit3aWxsIG5hdHVyYWxseSBjaG9vc2UgYSBkZXZpY2UgbmFtZSB3aGljaCByZWZsZWN0cyB0aGUgZnVuY3Rpb25hbGl0eQorb2YgdGhlIGRldmljZSwgdGhlcmUgaXMgZmFyIGxlc3MgcG90ZW50aWFsIGZvciBuYW1lc3BhY2UgY29uZmxpY3QuCitTb2x2aW5nIHRoaXMgcmVxdWlyZXMgYSBrZXJuZWwgY2hhbmdlLgorCisvZGV2IG1hbmFnZW1lbnQKKworQmVjYXVzZSB5b3UgY3VycmVudGx5IGFjY2VzcyBkZXZpY2VzIHRocm91Z2ggZGV2aWNlIG5vZGVzLCB0aGVzZSBtdXN0CitiZSBjcmVhdGVkIGJ5IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvci4gRm9yIHN0YW5kYXJkIGRldmljZXMgeW91IGNhbgordXN1YWxseSBmaW5kIGEgTUFLRURFViBwcm9ncmFtbWUgd2hpY2ggY3JlYXRlcyBhbGwgdGhlc2UgKGh1bmRyZWRzISkKK29mIG5vZGVzLiBUaGlzIG1lYW5zIHRoYXQgY2hhbmdlcyBpbiB0aGUga2VybmVsIG11c3QgYmUgcmVmbGVjdGVkIGJ5CitjaGFuZ2VzIGluIHRoZSBNQUtFREVWIHByb2dyYW1tZSwgb3IgZWxzZSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IKK2NyZWF0ZXMgZGV2aWNlIG5vZGVzIGJ5IGhhbmQuCisKK1RoZSBiYXNpYyBwcm9ibGVtIGlzIHRoYXQgdGhlcmUgYXJlIHR3byBzZXBhcmF0ZSBkYXRhYmFzZXMgb2YKK21ham9yIGFuZCBtaW5vciBudW1iZXJzLiBPbmUgaXMgaW4gdGhlIGtlcm5lbCBhbmQgb25lIGlzIGluIC9kZXYgKG9yCitpbiBhIE1BS0VERVYgcHJvZ3JhbW1lLCBpZiB5b3Ugd2FudCB0byBsb29rIGF0IGl0IHRoYXQgd2F5KS4gVGhpcyBpcworZHVwbGljYXRpb24gb2YgaW5mb3JtYXRpb24sIHdoaWNoIGlzIG5vdCBnb29kIHByYWN0aWNlLgorU29sdmluZyB0aGlzIHJlcXVpcmVzIGEga2VybmVsIGNoYW5nZS4KKworL2RldiBncm93dGgKKworQSB0eXBpY2FsIC9kZXYgaGFzIG92ZXIgMTIwMCBub2RlcyEgTW9zdCBvZiB0aGVzZSBkZXZpY2VzIHNpbXBseSBkb24ndAorZXhpc3QgYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IGF2YWlsYWJsZS4gQSBodWdlIC9kZXYgaW5jcmVhc2VzIHRoZQordGltZSB0byBhY2Nlc3MgZGV2aWNlcyAoSSdtIGp1c3QgcmVmZXJyaW5nIHRvIHRoZSBkZW50cnkgbG9va3VwIHRpbWVzCithbmQgdGhlIHRpbWUgdGFrZW4gdG8gcmVhZCBpbm9kZXMgb2ZmIGRpc2M6IHRoZSBuZXh0IHN1YnNlY3Rpb24gc2hvd3MKK3NvbWUgbW9yZSBob3Jyb3JzKS4KKworQW4gZXhhbXBsZSBvZiBob3cgYmlnIC9kZXYgY2FuIGdyb3cgaXMgaWYgd2UgY29uc2lkZXIgU0NTSSBkZXZpY2VzOgorCitob3N0ICAgICAgICAgICA2ICBiaXRzICAoc2F5IHVwIHRvIDY0IGhvc3RzIG9uIGEgcmVhbGx5IGJpZyBtYWNoaW5lKQorY2hhbm5lbCAgICAgICAgNCAgYml0cyAgKHNheSB1cCB0byAxNiBTQ1NJIGJ1c2VzIHBlciBob3N0KQoraWQgICAgICAgICAgICAgNCAgYml0cworbHVuICAgICAgICAgICAgMyAgYml0cworcGFydGl0aW9uICAgICAgNiAgYml0cworVE9UQUwgICAgICAgICAgMjMgYml0cworCisKK1RoaXMgcmVxdWlyZXMgOCBNZWdhICgxMDI0KjEwMjQpIGlub2RlcyBpZiB3ZSB3YW50IHRvIHN0b3JlIGFsbAorcG9zc2libGUgZGV2aWNlIG5vZGVzLiBFdmVuIGlmIHdlIHNjcmFwIGV2ZXJ5dGhpbmcgYnV0IGlkLHBhcnRpdGlvbgorYW5kIGFzc3VtZSBhIHNpbmdsZSBob3N0IGFkYXB0ZXIgd2l0aCBhIHNpbmdsZSBTQ1NJIGJ1cyBhbmQgb25seSBvbmUKK2xvZ2ljYWwgdW5pdCBwZXIgU0NTSSB0YXJnZXQgKGlkKSwgdGhhdCdzIHN0aWxsIDEwIGJpdHMgb3IgMTAyNAoraW5vZGVzLiBFYWNoIFZGUyBpbm9kZSB0YWtlcyBhcm91bmQgMjU2IGJ5dGVzIChrZXJuZWwgMi4xLjc4KSwgc28KK3RoYXQncyAyNTYga0J5dGVzIG9mIGlub2RlIHN0b3JhZ2Ugb24gZGlzYyAoYXNzdW1pbmcgcmVhbCBpbm9kZXMgdGFrZQorYSBzaW1pbGFyIGFtb3VudCBvZiBzcGFjZSBhcyBWRlMgaW5vZGVzKS4gVGhpcyBpcyBhY3R1YWxseSBub3Qgc28gYmFkLAorYmVjYXVzZSBkaXNjIGlzIGNoZWFwIHRoZXNlIGRheXMuIEVtYmVkZGVkIHN5c3RlbXMgd291bGQgY2FyZSBhYm91dAorMjU2IGtCeXRlcyBvZiAvZGV2IGlub2RlcywgYnV0IHlvdSBjb3VsZCBhcmd1ZSB0aGF0IGVtYmVkZGVkIHN5c3RlbXMKK3dvdWxkIGhhdmUgaGFuZC10dW5lZCAvZGV2IGRpcmVjdG9yaWVzLiBJJ3ZlIGhhZCB0byBkbyBqdXN0IHRoYXQgb24gbXkKK2VtYmVkZGVkIHN5c3RlbXMsIGJ1dCBJIHdvdWxkIHJhdGhlciBqdXN0IGxlYXZlIGl0IHRvIGRldmZzLgorCitBbm90aGVyIGlzc3VlIGlzIHRoZSB0aW1lIHRha2VuIHRvIGxvb2t1cCBhbiBpbm9kZSB3aGVuIGZpcnN0CityZWZlcmVuY2VkLiBOb3Qgb25seSBkb2VzIHRoaXMgdGFrZSB0aW1lIGluIHNjYW5uaW5nIHRocm91Z2ggYSBsaXN0IGluCittZW1vcnksIGJ1dCBhbHNvIHRoZSBzZWVrIHRpbWVzIHRvIHJlYWQgdGhlIGlub2RlcyBvZmYgZGlzYy4KK1RoaXMgY291bGQgYmUgc29sdmVkIGluIHVzZXItc3BhY2UgdXNpbmcgYSBjbGV2ZXIgcHJvZ3JhbW1lIHdoaWNoCitzY2FubmVkIHRoZSBrZXJuZWwgbG9ncyBhbmQgZGVsZXRlZCAvZGV2IGVudHJpZXMgd2hpY2ggYXJlIG5vdAorYXZhaWxhYmxlIGFuZCBjcmVhdGVkIHRoZW0gd2hlbiB0aGV5IHdlcmUgYXZhaWxhYmxlLiBUaGlzIHByb2dyYW1tZQord291bGQgbmVlZCB0byBiZSBydW4gZXZlcnkgdGltZSBhIG5ldyBtb2R1bGUgd2FzIGxvYWRlZCwgd2hpY2ggd291bGQKK3Nsb3cgdGhpbmdzIGRvd24gYSBsb3QuCisKK1RoZXJlIGlzIGFuIGV4aXN0aW5nIHByb2dyYW1tZSBjYWxsZWQgc2NzaWRldiB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkKK2NyZWF0ZSBkZXZpY2Ugbm9kZXMgZm9yIFNDU0kgZGV2aWNlcy4gSXQgY2FuIGRvIHRoaXMgYnkgc2Nhbm5pbmcgZmlsZXMKK2luIC9wcm9jL3Njc2kuIFVuZm9ydHVuYXRlbHksIHRvIGV4dGVuZCB0aGlzIGlkZWEgdG8gb3RoZXIgZGV2aWNlCitub2RlcyB3b3VsZCByZXF1aXJlIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZHJpdmVycyAoc28KK3RoZXkgdG9vIHdvdWxkIHByb3ZpZGUgaW5mb3JtYXRpb24gaW4gL3Byb2MpLiBUaGlzIGlzIGEgbm9uLXRyaXZpYWwKK2NoYW5nZSAoSSBzaG91bGQga25vdzogZGV2ZnMgaGFzIGhhZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhcikuIE9uY2UKK3lvdSBnbyB0byB0aGlzIG11Y2ggZWZmb3J0LCB5b3UgbWF5IGFzIHdlbGwgdXNlIGRldmZzIGl0c2VsZiAod2hpY2gKK2Fsc28gcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlvbikuICBGdXJ0aGVybW9yZSwgc3VjaCBhIHN5c3RlbSB3b3VsZAorbGlrZWx5IGJlIGltcGxlbWVudGVkIGluIGFuIGFkLWhvYyBmYXNoaW9uLCBhcyBkaWZmZXJlbnQgZHJpdmVycyB3aWxsCitwcm92aWRlIHRoZWlyIGluZm9ybWF0aW9uIGluIGRpZmZlcmVudCB3YXlzLgorCitEZXZmcyBpcyBtdWNoIGNsZWFuZXIsIGJlY2F1c2UgaXQgKG5hdHVyYWxseSkgaGFzIGEgdW5pZm9ybSBtZWNoYW5pc20KK3RvIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbjogdGhlIGRldmljZSBub2RlcyB0aGVtc2VsdmVzIQorCisKK05vZGUgdG8gZHJpdmVyIGZpbGVfb3BlcmF0aW9ucyB0cmFuc2xhdGlvbgorCitUaGVyZSBpcyBhbiBpbXBvcnRhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3YXkgZGlzYy1iYXNlZCBjaGFyYWN0ZXIKK2FuZCBibG9jayBub2RlcyBhbmQgZGV2ZnMgZW50cmllcyBtYWtlIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYW4gZW50cnkKK2luIC9kZXYgYW5kIHRoZSBhY3R1YWwgZGV2aWNlIGRyaXZlci4KKworV2l0aCB0aGUgY3VycmVudCA4IGJpdCBtYWpvciBhbmQgbWlub3IgbnVtYmVycyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuCitkaXNjLWJhc2VkIGMmYiBub2RlcyBhbmQgcGVyLW1ham9yIGRyaXZlcnMgaXMgZG9uZSB0aHJvdWdoIGEKK2ZpeGVkLWxlbmd0aCB0YWJsZSBvZiAxMjggZW50cmllcy4gVGhlIHZhcmlvdXMgZmlsZXN5c3RlbSB0eXBlcyBzZXQKK3RoZSBpbm9kZSBvcGVyYXRpb25zIGZvciBjJmIgbm9kZXMgdG8ge2NocixibGt9ZGV2X2lub2RlX29wZXJhdGlvbnMsCitzbyB3aGVuIGEgZGV2aWNlIGlzIG9wZW5lZCBhIGZldyBxdWljayBsZXZlbHMgb2YgaW5kaXJlY3Rpb24gYnJpbmcgdXMKK3RvIHRoZSBkcml2ZXIgZmlsZV9vcGVyYXRpb25zLgorCitGb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXIgZGV2aWNlcyBhIHNlY29uZCBzdGVwIGlzIHJlcXVpcmVkOiB0aGVyZQoraXMgYSBzY2FuIGZvciB0aGUgZHJpdmVyIGVudHJ5IHdpdGggdGhlIHNhbWUgbWlub3IgbnVtYmVyIGFzIHRoZSBmaWxlCit0aGF0IHdhcyBvcGVuZWQsIGFuZCB0aGUgYXBwcm9wcmlhdGUgbWlub3Igb3BlbiBtZXRob2QgaXMgY2FsbGVkLiBUaGlzCitzY2FubmluZyBpcyBkb25lICpldmVyeSB0aW1lKiB5b3Ugb3BlbiBhIGRldmljZSBub2RlLiBQb3RlbnRpYWxseSwgeW91CittYXkgYmUgc2VhcmNoaW5nIHRocm91Z2ggZG96ZW5zIG9mIG1pc2MuIGVudHJpZXMgYmVmb3JlIHlvdSBmaW5kIHlvdXIKK29wZW4gbWV0aG9kLiBXaGlsZSBub3QgYW4gZW5vcm1vdXMgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIHRoaXMgZG9lcworc2VlbSBwb2ludGxlc3MuCisKK0xpbnV4ICptdXN0KiBtb3ZlIGJleW9uZCB0aGUgOCBiaXQgbWFqb3IgYW5kIG1pbm9yIGJhcnJpZXIsCitzb21laG93LiBJZiB3ZSBzaW1wbHkgaW5jcmVhc2UgZWFjaCB0byAxNiBiaXRzLCB0aGVuIHRoZSBpbmRleGluZworc2NoZW1lIHVzZWQgZm9yIG1ham9yIGRyaXZlciBsb29rdXAgYmVjb21lcyB1bnRlbmFibGUsIGJlY2F1c2UgdGhlCittYWpvciB0YWJsZXMgKG9uZSBlYWNoIGZvciBjaGFyYWN0ZXIgYW5kIGJsb2NrIGRldmljZXMpIHdvdWxkIG5lZWQgdG8KK2JlIDY0IGsgZW50cmllcyBsb25nICg1MTIga0J5dGVzIG9uIHg4NiwgMSBNQnl0ZSBmb3IgNjQgYml0CitzeXN0ZW1zKS4gU28gd2Ugd291bGQgaGF2ZSB0byB1c2UgYSBzY2hlbWUgbGlrZSB0aGF0IHVzZWQgZm9yCittaXNjZWxsYW5lb3VzIGNoYXJhY3RlciBkZXZpY2VzLCB3aGljaCBtZWFucyB0aGUgc2VhcmNoIHRpbWUgZ29lcyB1cAorbGluZWFybHkgd2l0aCB0aGUgYXZlcmFnZSBudW1iZXIgb2YgbWFqb3IgZGV2aWNlIGRyaXZlcnMgb24geW91cgorc3lzdGVtLiBOb3QgYWxsICJkZXZpY2VzIiBhcmUgaGFyZHdhcmUsIHNvbWUgYXJlIGhpZ2hlci1sZXZlbCBkcml2ZXJzCitsaWtlIEtHSSwgc28geW91IGNhbiBnZXQgbW9yZSAiZGV2aWNlcyIgd2l0aG91dCBhZGRpbmcgaGFyZHdhcmUKK1lvdSBjYW4gaW1wcm92ZSB0aGlzIGJ5IGNyZWF0aW5nIGFuIG9yZGVyZWQgKGJhbGFuY2VkOi0pCitiaW5hcnkgdHJlZSwgaW4gd2hpY2ggY2FzZSB5b3VyIHNlYXJjaCB0aW1lIGJlY29tZXMgbG9nKE4pLgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgaGFzaGluZyB0byBzcGVlZCB1cCB0aGUgc2VhcmNoLgorQnV0IHdoeSBkbyB0aGF0IHNlYXJjaCBhdCBhbGwgaWYgeW91IGRvbid0IGhhdmUgdG8/IE9uY2UgYWdhaW4sIGl0CitzZWVtcyBwb2ludGxlc3MuCisKK05vdGUgdGhhdCBkZXZmcyBkb2Vzbid0IHVzZSB0aGUgbWFqb3ImbWlub3Igc3lzdGVtLiBGb3IgZGV2ZnMKK2VudHJpZXMsIHRoZSBjb25uZWN0aW9uIGlzIGRvbmUgd2hlbiB5b3UgbG9va3VwIHRoZSAvZGV2IGVudHJ5LiBXaGVuCitkZXZmc19yZWdpc3RlcigpIGlzIGNhbGxlZCwgYW4gaW50ZXJuYWwgdGFibGUgaXMgYXBwZW5kZWQgd2hpY2ggaGFzCit0aGUgZW50cnkgbmFtZSBhbmQgdGhlIGZpbGVfb3BlcmF0aW9ucy4gSWYgdGhlIGRlbnRyeSBjYWNoZSBkb2Vzbid0CitoYXZlIHRoZSAvZGV2IGVudHJ5IGFscmVhZHksIHRoaXMgaW50ZXJuYWwgdGFibGUgaXMgc2Nhbm5lZCB0byBnZXQgdGhlCitmaWxlX29wZXJhdGlvbnMsIGFuZCBhbiBpbm9kZSBpcyBjcmVhdGVkLiBJZiB0aGUgZGVudHJ5IGNhY2hlIGFscmVhZHkKK2hhcyB0aGUgZW50cnksIHRoZXJlIGlzICpubyBsb29rdXAgdGltZSogKG90aGVyIHRoYW4gdGhlIGRlbnRyeSBzY2FuCitpdHNlbGYsIGJ1dCB3ZSBjYW4ndCBhdm9pZCB0aGF0IGFueXdheSwgYW5kIGJlc2lkZXMgTGludXggZGVudHJpZXMKK2NyZWFtIG90aGVyIE9TJ3Mgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVtOi0pLiBGdXJ0aGVybW9yZSwgdGhlIG51bWJlciBvZgorbm9kZSBlbnRyaWVzIGluIGEgZGV2ZnMgaXMgb25seSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXZpY2UKK2VudHJpZXMsIG5vdCB0aGUgbnVtYmVyIG9mICpjb25jZWl2YWJsZSogZW50cmllcy4gRXZlbiBpZiB5b3UgcmVtb3ZlCit1bm5lY2Vzc2FyeSBlbnRyaWVzIGluIGEgZGlzYy1iYXNlZCAvZGV2LCB0aGUgbnVtYmVyIG9mIGNvbmNlaXZhYmxlCitlbnRyaWVzIHJlbWFpbnMgdGhlIHNhbWU6IHlvdSBqdXN0IGxpbWl0IHlvdXJzZWxmIGluIG9yZGVyIHRvIHNhdmUKK3NwYWNlLgorCitEZXZmcyBwcm92aWRlcyBhIGZhc3QgY29ubmVjdGlvbiBiZXR3ZWVuIGEgVkZTIG5vZGUgYW5kIHRoZSBkZXZpY2UKK2RyaXZlciwgaW4gYSBzY2FsYWJsZSB3YXkuCisKKy9kZXYgYXMgYSBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdG9vbAorCitSaWdodCBub3cgL2RldiBjb250YWlucyBhIGxpc3Qgb2YgY29uY2VpdmFibGUgZGV2aWNlcywgbW9zdCBvZiB3aGljaCBJCitkb24ndCBoYXZlLiBEZXZmcyBvbmx5IHNob3dzIHRob3NlIGRldmljZXMgYXZhaWxhYmxlIG9uIG15CitzeXN0ZW0uIFRoaXMgbWVhbnMgdGhhdCBsaXN0aW5nIC9kZXYgaXMgYSBoYW5keSB3YXkgb2YgY2hlY2tpbmcgd2hhdAorZGV2aWNlcyBhcmUgYXZhaWxhYmxlLgorCitNYWpvciZtaW5vciBzaXplCisKK0V4aXN0aW5nIG1ham9yIGFuZCBtaW5vciBudW1iZXJzIGFyZSBsaW1pdGVkIHRvIDggYml0cyBlYWNoLiBUaGlzIGlzCitub3cgYSBsaW1pdGluZyBmYWN0b3IgZm9yIHNvbWUgZHJpdmVycywgcGFydGljdWxhcmx5IHRoZSBTQ1NJIGRpc2MKK2RyaXZlciwgd2hpY2ggY29uc3VtZXMgYSBzaW5nbGUgbWFqb3IgbnVtYmVyLiBPbmx5IDE2IGRpc2NzIGFyZQorc3VwcG9ydGVkLCBhbmQgZWFjaCBkaXNjIG1heSBoYXZlIG9ubHkgMTUgcGFydGl0aW9ucy4gTWF5YmUgdGhpcyBpc24ndAorYSBwcm9ibGVtIGZvciB5b3UsIGJ1dCBzb21lIG9mIHVzIGFyZSBidWlsZGluZyBodWdlIExpbnV4IHN5c3RlbXMgd2l0aAorZGlzYyBhcnJheXMuIFdpdGggZGV2ZnMgYW4gYXJiaXRyYXJ5IHBvaW50ZXIgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aAorZWFjaCBkZXZpY2UgZW50cnksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGdpdmUgYW4gZWZmZWN0aXZlIDMyIGJpdAorZGV2aWNlIGlkZW50aWZpZXIgKGkuZS4gdGhhdCdzIGxpa2UgaGF2aW5nIGEgMzIgYml0IG1pbm9yCitudW1iZXIpLiBTaW5jZSB0aGlzIGlzIHByaXZhdGUgdG8gdGhlIGtlcm5lbCwgdGhlcmUgYXJlIG5vIEMgbGlicmFyeQorY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hpY2ggeW91IHdvdWxkIGhhdmUgd2l0aCBpbmNyZWFzaW5nIG1ham9yIGFuZAorbWlub3IgbnVtYmVyIHNpemVzLiBTZWUgdGhlIHNlY3Rpb24gb24gIkFsbG9jYXRpb24gb2YgRGV2aWNlIE51bWJlcnMiCitmb3IgZGV0YWlscyBvbiBtYWludGFpbmluZyBjb21wYXRpYmlsaXR5IHdpdGggdXNlcnNwYWNlLgorCitTb2x2aW5nIHRoaXMgcmVxdWlyZXMgYSBrZXJuZWwgY2hhbmdlLgorCitTaW5jZSB3cml0aW5nIHRoaXMsIHRoZSBrZXJuZWwgaGFzIGJlZW4gbW9kaWZpZWQgc28gdGhhdCB0aGUgU0NTSSBkaXNjCitkcml2ZXIgaGFzIG1vcmUgbWFqb3IgbnVtYmVycyBhbGxvY2F0ZWQgdG8gaXQgYW5kIG5vdyBzdXBwb3J0cyB1cCB0bworMTI4IGRpc2NzLiBTaW5jZSB0aGVzZSBtYWpvciBudW1iZXJzIGFyZSBub24tY29udGlndW91cyAoYSByZXN1bHQgb2YKK3VucGxhbm5lZCBleHBhbnNpb24pLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgYSBsaXR0bGUgbW9yZSBjdW1iZXJzb21lCit0aGFuIG9yaWdpbmFsbHkuCisKK0p1c3QgbGlrZSB0aGUgY2hhbmdlcyB0byBJUHY0IHRvIGZpeCBpbXBlbmRpbmcgbGltaXRhdGlvbnMgaW4gdGhlCithZGRyZXNzIHNwYWNlLCBwZW9wbGUgZmluZCB3YXlzIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMuIEluIHRoZSBsb25nCitydW4sIGhvd2V2ZXIsIHNvbHV0aW9ucyBsaWtlIElQdjYgb3IgZGV2ZnMgY2FuJ3QgYmUgcHV0IG9mZiBmb3JldmVyLgorCitSZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtCisKK0hhdmluZyB5b3VyIGRldmljZSBub2RlcyBvbiB0aGUgcm9vdCBmaWxlc3lzdGVtIG1lYW5zIHRoYXQgeW91IGNhbid0CitvcGVyYXRlIHByb3Blcmx5IHdpdGggYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtLiBUaGlzIGlzIGJlY2F1c2UgeW91Cit3YW50IHRvIGNoYW5nZSBvd25lcnNoaXBzIGFuZCBwcm90ZWN0aW9ucyBvZiB0dHkgZGV2aWNlcy4gRXhpc3RpbmcKK3ByYWN0aWNlIHByZXZlbnRzIHlvdSB1c2luZyBhIENELVJPTSBhcyB5b3VyIHJvb3QgZmlsZXN5c3RlbSBmb3IgYQorKnJlYWwqIHN5c3RlbS4gU3VyZSwgeW91IGNhbiBib290IG9mZiBhIENELVJPTSwgYnV0IHlvdSBjYW4ndCBjaGFuZ2UKK3R0eSBvd25lcnNoaXBzLCBzbyBpdCdzIG9ubHkgZ29vZCBmb3IgaW5zdGFsbGluZy4KKworQWxzbywgeW91IGNhbid0IHVzZSBhIHNoYXJlZCBORlMgcm9vdCBmaWxlc3lzdGVtIGZvciBhIGNsdXN0ZXIgb2YKK2Rpc2NsZXNzIExpbnV4IG1hY2hpbmVzIChoYXZpbmcgdHR5IG93bmVyc2hpcHMgY2hhbmdlZCBvbiBhIGNvbW1vbgorL2RldiBpcyBub3QgZ29vZCkuIE5vciBjYW4geW91IGVtYmVkIHlvdXIgcm9vdCBmaWxlc3lzdGVtIGluIGEKK1JPTS1GUy4KKworWW91IGNhbiBnZXQgYXJvdW5kIHRoaXMgYnkgY3JlYXRpbmcgYSBSQU1ESVNDIGF0IGJvb3QgdGltZSwgbWFraW5nCithbiBleHQyIGZpbGVzeXN0ZW0gaW4gaXQsIG1vdW50aW5nIGl0IHNvbWV3aGVyZSBhbmQgY29weWluZyB0aGUKK2NvbnRlbnRzIG9mIC9kZXYgaW50byBpdCwgdGhlbiB1bm1vdW50aW5nIGl0IGFuZCBtb3VudGluZyBpdCBvdmVyCisvZGV2LgorCitBIGRldmZzIGlzIGEgY2xlYW5lciB3YXkgb2Ygc29sdmluZyB0aGlzLgorCitOb24tVW5peCByb290IGZpbGVzeXN0ZW0KKworTm9uLVVuaXggZmlsZXN5c3RlbXMgKHN1Y2ggYXMgTlRGUykgY2FuJ3QgYmUgdXNlZCBmb3IgYSByb290CitmaWxlc3lzdGVtIGJlY2F1c2UgdGhleSB2YXJpb3VzbHkgZG9uJ3Qgc3VwcG9ydCBjaGFyYWN0ZXIgYW5kIGJsb2NrCitzcGVjaWFsIGZpbGVzIG9yIHN5bWJvbGljIGxpbmtzLiBZb3UgY2FuJ3QgaGF2ZSBhIHNlcGFyYXRlIGRpc2MtYmFzZWQKK29yIFJBTURJU0MtYmFzZWQgZmlsZXN5c3RlbSBtb3VudGVkIG9uIC9kZXYgYmVjYXVzZSB5b3UgbmVlZCBkZXZpY2UKK25vZGVzIGJlZm9yZSB5b3UgY2FuIG1vdW50IHRoZXNlLiBEZXZmcyBjYW4gYmUgbW91bnRlZCB3aXRob3V0IGFueQorZGV2aWNlIG5vZGVzLiBEZXZsaW5rcyB3b24ndCB3b3JrIGJlY2F1c2Ugc3ltbGlua3MgYXJlbid0IHN1cHBvcnRlZC4KK0FuIGFsdGVybmF0aXZlIHNvbHV0aW9uIGlzIHRvIHVzZSBpbml0cmQgdG8gbW91bnQgYSBSQU1ESVNDIGluaXRpYWwKK3Jvb3QgZmlsZXN5c3RlbSAod2hpY2ggaXMgcG9wdWxhdGVkIHdpdGggYSBtaW5pbWFsIHNldCBvZiBkZXZpY2UKK25vZGVzKSwgYW5kIHRoZW4gY29uc3RydWN0IGEgbmV3IC9kZXYgaW4gYW5vdGhlciBSQU1ESVNDLCBhbmQgZmluYWxseQorc3dpdGNoIHRvIHlvdXIgbm9uLVVuaXggcm9vdCBmaWxlc3lzdGVtLiBUaGlzIHJlcXVpcmVzIGNsZXZlciBib290CitzY3JpcHRzIGFuZCBhIGZyYWdpbGUgYW5kIGNvbmNlcHR1YWxseSBjb21wbGV4IGJvb3QgcHJvY2VkdXJlLgorCitEZXZmcyBzb2x2ZXMgdGhpcyBpbiBhIHJvYnVzdCBhbmQgY29uY2VwdHVhbGx5IHNpbXBsZSB3YXkuCisKK1BUWSBzZWN1cml0eQorCitDdXJyZW50IHBzZXVkby10dHkgKHB0eSkgZGV2aWNlcyBhcmUgb3duZWQgYnkgcm9vdCBhbmQgcmVhZC13cml0YWJsZQorYnkgZXZlcnlvbmUuIFRoZSB1c2VyIG9mIGEgcHR5LXBhaXIgY2Fubm90IGNoYW5nZQorb3duZXJzaGlwL3Byb3RlY3Rpb25zIHdpdGhvdXQgYmVpbmcgc3VpZC1yb290LgorCitUaGlzIGNvdWxkIGJlIHNvbHZlZCB3aXRoIGEgc2VjdXJlIHVzZXItc3BhY2UgZGFlbW9uIHdoaWNoIHJ1bnMgYXMKK3Jvb3QgYW5kIGRvZXMgdGhlIGFjdHVhbCBjcmVhdGlvbiBvZiBwdHktcGFpcnMuIFN1Y2ggYSBkYWVtb24gd291bGQKK3JlcXVpcmUgbW9kaWZpY2F0aW9uIHRvICpldmVyeSogcHJvZ3JhbW1lIHRoYXQgd2FudHMgdG8gdXNlIHRoaXMgbmV3CittZWNoYW5pc20uIEl0IGFsc28gc2xvd3MgZG93biBjcmVhdGlvbiBvZiBwdHktcGFpcnMuCisKK0FuIGFsdGVybmF0aXZlIGlzIHRvIGNyZWF0ZSBhIG5ldyBvcGVuX3B0eSgpIHN5c2NhbGwgd2hpY2ggZG9lcyBtdWNoCit0aGUgc2FtZSB0aGluZyBhcyB0aGUgdXNlci1zcGFjZSBkYWVtb24uIE9uY2UgYWdhaW4sIHRoaXMgcmVxdWlyZXMKK21vZGlmaWNhdGlvbnMgdG8gcHR5LWhhbmRsaW5nIHByb2dyYW1tZXMuCisKK1RoZSBkZXZmcyBzb2x1dGlvbiBhbGxvd3MgYSBkZXZpY2UgZHJpdmVyIHRvICJ0YWciIGNlcnRhaW4gZGV2aWNlCitmaWxlcyBzbyB0aGF0IHdoZW4gYW4gdW5vcGVuZWQgZGV2aWNlIGlzIG9wZW5lZCwgdGhlIG93bmVyc2hpcHMgYXJlCitjaGFuZ2VkIHRvIHRoZSBjdXJyZW50IGV1aWQgYW5kIGVnaWQgb2YgdGhlIG9wZW5pbmcgcHJvY2VzcywgYW5kIHRoZQorcHJvdGVjdGlvbnMgYXJlIGNoYW5nZWQgdG8gdGhlIGRlZmF1bHQgcmVnaXN0ZXJlZCBieSB0aGUgZHJpdmVyLiBXaGVuCit0aGUgZGV2aWNlIGlzIGNsb3NlZCBvd25lcnNoaXAgaXMgc2V0IGJhY2sgdG8gcm9vdCBhbmQgcHJvdGVjdGlvbnMgYXJlCitzZXQgYmFjayB0byByZWFkLXdyaXRlIGZvciBldmVyeWJvZHkuIE5vIHByb2dyYW1tZSBuZWVkIGJlIGNoYW5nZWQuCitUaGUgZGV2cHRzIGZpbGVzeXN0ZW0gcHJvdmlkZXMgdGhpcyBhdXRvLW93bmVyc2hpcCBmZWF0dXJlIGZvciBVbml4OTgKK3B0eXMuIEl0IGRvZXNuJ3Qgc3VwcG9ydCBvbGQtc3R5bGUgcHR5IGRldmljZXMsIG5vciBkb2VzIGl0IGhhdmUgYWxsCit0aGUgb3RoZXIgZmVhdHVyZXMgb2YgZGV2ZnMuCisKK0ludGVsbGlnZW50IGRldmljZSBtYW5hZ2VtZW50CisKK0RldmZzIGltcGxlbWVudHMgYSBzaW1wbGUgeWV0IHBvd2VyZnVsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uIHdpdGgKK2EgZGV2aWNlIG1hbmFnZW1lbnQgZGFlbW9uIChkZXZmc2QpIHdoaWNoIHJ1bnMgaW4gdXNlciBzcGFjZS4gSXQgaXMKK3Bvc3NpYmxlIHRvIHNlbmQgYSBtZXNzYWdlIChlaXRoZXIgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSkgdG8KK2RldmZzZCBvbiBhbnkgZXZlbnQsIHN1Y2ggYXMgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIG9mIGRldmljZQorZW50cmllcywgb3BlbmluZyBhbmQgY2xvc2luZyBkZXZpY2VzLCBsb29raW5nIHVwIGlub2Rlcywgc2Nhbm5pbmcKK2RpcmVjdG9yaWVzIGFuZCBtb3JlLiBUaGlzIGhhcyBtYW55IHBvc3NpYmlsaXRpZXMuIFNvbWUgb2YgdGhlc2UgYXJlCithbHJlYWR5IGltcGxlbWVudGVkLiBTZWU6CisKKworaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvCisKK0RldmljZSBlbnRyeSByZWdpc3RyYXRpb24gZXZlbnRzIGNhbiBiZSB1c2VkIGJ5IGRldmZzZCB0byBjaGFuZ2UKK3Blcm1pc3Npb25zIG9mIG5ld2x5LWNyZWF0ZWQgZGV2aWNlIG5vZGVzLiBUaGlzIGlzIG9uZSBtZWNoYW5pc20gdG8KK2NvbnRyb2wgZGV2aWNlIHBlcm1pc3Npb25zLgorCitEZXZpY2UgZW50cnkgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGV2ZW50cyBjYW4gYmUgdXNlZCB0byBydW4KK3Byb2dyYW1tZXMgb3Igc2NyaXB0cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGF1dG9tYXRpYyBtb3VudGluZworb2YgZmlsZXN5c3RlbXMgd2hlbiBhIG5ldyBibG9jayBkZXZpY2UgbWVkaWEgaXMgaW5zZXJ0ZWQgaW50byB0aGUKK2RyaXZlLgorCitBc3luY2hyb25vdXMgZGV2aWNlIG9wZW4gYW5kIGNsb3NlIGV2ZW50cyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKK2NsZXZlciBwZXJtaXNzaW9ucyBtYW5hZ2VtZW50LiBGb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgb24KKy9kZXYvZHNwIGRvIG5vdCBhbGxvdyBldmVyeWJvZHkgdG8gcmVhZCBmcm9tIHRoZSBkZXZpY2UuIFRoaXMgaXMKK3NlbnNpYmxlLCBhcyB5b3UgZG9uJ3Qgd2FudCBzb21lIHJlbW90ZSB1c2VyIHJlY29yZGluZyB3aGF0IHlvdSBzYXkgYXQKK3lvdXIgY29uc29sZS4gSG93ZXZlciwgdGhlIGNvbnNvbGUgdXNlciBpcyBhbHNvIHByZXZlbnRlZCBmcm9tCityZWNvcmRpbmcuIFRoaXMgYmVoYXZpb3VyIGlzIG5vdCBkZXNpcmFibGUuIFdpdGggYXN5bmNocm9ub3VzIGRldmljZQorb3BlbiBhbmQgY2xvc2UgZXZlbnRzLCB5b3UgY2FuIGhhdmUgZGV2ZnNkIHJ1biBhIHByb2dyYW1tZSBvciBzY3JpcHQKK3doZW4gY29uc29sZSBkZXZpY2VzIGFyZSBvcGVuZWQgdG8gY2hhbmdlIHRoZSBvd25lcnNoaXBzIGZvciAqb3RoZXIqCitkZXZpY2Ugbm9kZXMgKHN1Y2ggYXMgL2Rldi9kc3ApLiBPbiBjbG9zdXJlLCB5b3UgY2FuIHJ1biBhIGRpZmZlcmVudAorc2NyaXB0IHRvIHJlc3RvcmUgcGVybWlzc2lvbnMuIEFuIGFkdmFudGFnZSBvZiB0aGlzIHNjaGVtZSBvdmVyCittb2RpZnlpbmcgdGhlIEMgbGlicmFyeSB0dHkgaGFuZGxpbmcgaXMgdGhhdCB0aGlzIHdvcmtzIGV2ZW4gaWYgeW91cgorcHJvZ3JhbW1lIGNyYXNoZXMgKGhvdyBtYW55IHRpbWVzIGhhdmUgeW91IHNlZW4gdGhlIHV0bXAgZGF0YWJhc2Ugd2l0aAorbGluZ2VyaW5nIGVudHJpZXMgZm9yIG5vbi1leGlzdGVudCBsb2dpbnM/KS4KKworU3luY2hyb25vdXMgZGV2aWNlIG9wZW4gZXZlbnRzIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gaW50ZWxsaWdlbnQKK2RldmljZSBhY2Nlc3MgcHJvdGVjdGlvbnMuIEJlZm9yZSB0aGUgZGV2aWNlIGRyaXZlciBvcGVuKCkgbWV0aG9kIGlzCitjYWxsZWQsIHRoZSBkYWVtb24gbXVzdCBmaXJzdCB2YWxpZGF0ZSB0aGUgb3BlbiBhdHRlbXB0LCBieSBydW5uaW5nIGFuCitleHRlcm5hbCBwcm9ncmFtbWUgb3Igc2NyaXB0LiBUaGlzIGlzIGZhciBtb3JlIGZsZXhpYmxlIHRoYW4gYWNjZXNzCitjb250cm9sIGxpc3RzLCBhcyBhY2Nlc3MgY2FuIGJlIGRldGVybWluZWQgb24gdGhlIGJhc2lzIG9mIG90aGVyCitzeXN0ZW0gY29uZGl0aW9ucyBpbnN0ZWFkIG9mIGp1c3QgdGhlIFVJRCBhbmQgR0lELgorCitJbm9kZSBsb29rdXAgZXZlbnRzIGNhbiBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBtb2R1bGUgYXV0b2xvYWQKK3JlcXVlc3RzLiBJbnN0ZWFkIG9mIHVzaW5nIGttb2QgZGlyZWN0bHksIHRoZSBldmVudCBpcyBzZW50IHRvCitkZXZmc2Qgd2hpY2ggY2FuIGltcGxlbWVudCBhbiBhcmJpdHJhcnkgYXV0aGVudGljYXRpb24gYmVmb3JlIGxvYWRpbmcKK3RoZSBtb2R1bGUgaXRzZWxmLgorCitJbm9kZSBsb29rdXAgZXZlbnRzIGNhbiBhbHNvIGJlIHVzZWQgdG8gY29uc3RydWN0IGFyYml0cmFyeQorbmFtZXNwYWNlcywgd2l0aG91dCBoYXZpbmcgdG8gcmVzb3J0IHRvIHBvcHVsYXRpbmcgZGV2ZnMgd2l0aCBzeW1saW5rcwordG8gZGV2aWNlcyB0aGF0IGRvbid0IGV4aXN0LgorCitTcGVjdWxhdGl2ZSBEZXZpY2UgU2Nhbm5pbmcKKworQ29uc2lkZXIgYW4gYXBwbGljYXRpb24gKGxpa2UgY2RwYXJhbm9pYSkgdGhhdCB3YW50cyB0byBmaW5kIGFsbAorQ0QtUk9NIGRldmljZXMgb24gdGhlIHN5c3RlbSAoU0NTSSwgSURFIGFuZCBvdGhlciB0eXBlcyksIHdoZXRoZXIgb3IKK25vdCB0aGVpciByZXNwZWN0aXZlIG1vZHVsZXMgYXJlIGxvYWRlZC4gVGhlIGFwcGxpY2F0aW9uIG11c3QKK3NwZWN1bGF0aXZlbHkgb3BlbiBjZXJ0YWluIGRldmljZSBub2RlcyAoc3VjaCBhcyAvZGV2L3NyMCBmb3IgdGhlIFNDU0kKK0NELVJPTXMpIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGUgbW9kdWxlIGlzIGxvYWRlZC4gVGhpcyByZXF1aXJlcwordGhhdCBhbGwgTGludXggZGlzdHJpYnV0aW9ucyBmb2xsb3cgdGhlIHN0YW5kYXJkIGRldmljZSBuYW1pbmcgc2NoZW1lCisobGFzdCB0aW1lIEkgbG9va2VkIFJlZEhhdCBkaWQgdGhpbmdzIGRpZmZlcmVudGx5KS4gRGV2ZnMgc29sdmVzIHRoZQorbmFtaW5nIHByb2JsZW0uCisKK1RoZSBzYW1lIGFwcGxpY2F0aW9uIGFsc28gd2FudHMgdG8gc2VlIHdoaWNoIGRldmljZXMgYXJlIGFjdHVhbGx5CithdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gV2l0aCB0aGUgZXhpc3Rpbmcgc3lzdGVtIGl0IG5lZWRzIHRvIHJlYWQgdGhlCisvZGV2IGRpcmVjdG9yeSBhbmQgc3BlY3VsYXRpdmVseSBvcGVuIGVhY2ggL2Rldi9zciogZGV2aWNlIHRvCitkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBleGlzdHMgb3Igbm90LiBXaXRoIGEgbGFyZ2UgL2RldiB0aGlzIGlzIGFuCitpbmVmZmljaWVudCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIG1hbnkgL2Rldi9zciogbm9kZXMuIEEKK3NvbHV0aW9uIGxpa2Ugc2NzaWRldiBjb3VsZCByZWR1Y2UgdGhlIG51bWJlciBvZiAvZGV2L3NyKiBlbnRyaWVzIChidXQKK29mIGNvdXJzZSB0aGF0IGFsc28gcmVxdWlyZXMgYWxsIHRoYXQgaW5lZmZpY2llbnQgZGlyZWN0b3J5IHNjYW5uaW5nKS4KKworV2l0aCBkZXZmcywgdGhlIGFwcGxpY2F0aW9uIGNhbiBvcGVuIHRoZSAvZGV2L3NyIGRpcmVjdG9yeQorKHdoaWNoIHRyaWdnZXJzIHRoZSBtb2R1bGUgYXV0b2xvYWRpbmcgaWYgcmVxdWlyZWQpLCBhbmQgcHJvY2VlZCB0bworcmVhZCAvZGV2L3NyLiBTaW5jZSBvbmx5IHRoZSBhdmFpbGFibGUgZGV2aWNlcyB3aWxsIGhhdmUKK2VudHJpZXMsIHRoZXJlIGFyZSBubyBpbmVmZmljZW5jaWVzIGluIGRpcmVjdG9yeSBzY2FubmluZyBvciBkZXZpY2UKK29wZW5pbmdzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaG8gZWxzZSBkb2VzIGl0PworCitGcmVlQlNEIGhhcyBhIGRldmZzIGltcGxlbWVudGF0aW9uLiBTb2xhcmlzIGFuZCBBSVggZWFjaCBoYXZlIGEKK3BzZXVkby1kZXZmcyAoc29tZXRoaW5nIGFraW4gdG8gc2NzaWRldiBidXQgZm9yIGFsbCBkZXZpY2VzLCB3aXRoIHNvbWUKK3Vuc3BlY2lmaWVkIGtlcm5lbCBzdXBwb3J0KS4gQmVPUywgUGxhbjkgYW5kIFFOWCBhbHNvIGhhdmUgaXQuIFNHSSdzCitJUklYIDYuNCBhbmQgYWJvdmUgYWxzbyBoYXZlIGEgZGV2aWNlIGZpbGVzeXN0ZW0uCisKK1doaWxlIHdlIHNob3VsZG4ndCBqdXN0IGF1dG9tYXRpY2FsbHkgZG8gc29tZXRoaW5nIGJlY2F1c2Ugb3RoZXJzIGRvCitpdCwgd2Ugc2hvdWxkIG5vdCBpZ25vcmUgdGhlIHdvcmsgb2Ygb3RoZXJzIGVpdGhlci4gRnJlZUJTRCBoYXMgYSBsb3QKK29mIGNvbXBldGVudCBwZW9wbGUgd29ya2luZyBvbiBpdCwgc28gdGhlaXIgb3BpbmlvbiBzaG91bGQgbm90IGJlCitibGl0aGVseSBpZ25vcmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0hvdyBpdCB3b3JrcworCitSZWdpc3RlcmluZyBkZXZpY2UgZW50cmllcworCitGb3IgZXZlcnkgZW50cnkgKGRldmljZSBub2RlKSBpbiBhIGRldmZzLWJhc2VkIC9kZXYgYSBkcml2ZXIgbXVzdCBjYWxsCitkZXZmc19yZWdpc3RlcigpLiBUaGlzIGFkZHMgdGhlIG5hbWUgb2YgdGhlIGRldmljZSBlbnRyeSwgdGhlCitmaWxlX29wZXJhdGlvbnMgc3RydWN0dXJlIHBvaW50ZXIgYW5kIGEgZmV3IG90aGVyIHRoaW5ncyB0byBhbgoraW50ZXJuYWwgdGFibGUuIERldmljZSBlbnRyaWVzIG1heSBiZSBhZGRlZCBhbmQgcmVtb3ZlZCBhdCBhbnkKK3RpbWUuIFdoZW4gYSBkZXZpY2UgZW50cnkgaXMgcmVnaXN0ZXJlZCwgaXQgYXV0b21hZ2ljYWxseSBhcHBlYXJzIGluCithbnkgbW91bnRlZCBkZXZmcycuCisKK0lub2RlIGxvb2t1cAorCitXaGVuIGEgbG9va3VwIG9wZXJhdGlvbiBvbiBhbiBlbnRyeSBpcyBwZXJmb3JtZWQgYW5kIGlmIHRoZXJlIGlzIG5vCitkcml2ZXIgaW5mb3JtYXRpb24gZm9yIHRoYXQgZW50cnkgZGV2ZnMgd2lsbCBhdHRlbXB0IHRvIGNhbGwKK2RldmZzZC4gSWYgc3RpbGwgbm8gZHJpdmVyIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCB0aGVuIGEgbmVnYXRpdmUKK2RlbnRyeSBpcyB5aWVsZGVkIGFuZCB0aGUgbmV4dCBzdGFnZSBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlCitWRlMgKHN1Y2ggYXMgY3JlYXRlKCkgb3IgbWtub2QoKSBpbm9kZSBtZXRob2RzKS4gSWYgZHJpdmVyIGluZm9ybWF0aW9uCitjYW4gYmUgZm91bmQsIGFuIGlub2RlIGlzIGNyZWF0ZWQgKGlmIG9uZSBkb2VzIG5vdCBleGlzdCBhbHJlYWR5KSBhbmQKK2FsbCBpcyB3ZWxsLgorCitNYW51YWxseSBjcmVhdGluZyBkZXZpY2Ugbm9kZXMKKworVGhlIG1rbm9kKCkgbWV0aG9kIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuIG9yZGluYXJ5IG5hbWVkIHBpcGUgaW4gdGhlCitkZXZmcywgb3IgeW91IGNhbiBjcmVhdGUgYSBjaGFyYWN0ZXIgb3IgYmxvY2sgc3BlY2lhbCBpbm9kZSBpZiBvbmUKK2RvZXMgbm90IGFscmVhZHkgZXhpc3QuIFlvdSBtYXkgd2lzaCB0byBjcmVhdGUgYSBjaGFyYWN0ZXIgb3IgYmxvY2sKK3NwZWNpYWwgaW5vZGUgc28gdGhhdCB5b3UgY2FuIHNldCBwZXJtaXNzaW9ucyBhbmQgb3duZXJzaGlwLiBMYXRlciwgaWYKK2EgZGV2aWNlIGRyaXZlciByZWdpc3RlcnMgYW4gZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUKK3Blcm1pc3Npb25zLCBvd25lcnNoaXAgYW5kIHRpbWVzIGFyZSByZXRhaW5lZC4gVGhpcyBpcyBob3cgeW91IGNhbiBzZXQKK3RoZSBwcm90ZWN0aW9ucyBvbiBhIGRldmljZSBldmVuIGJlZm9yZSB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gT25jZSB5b3UKK2NyZWF0ZSBhbiBpbm9kZSBpdCBhcHBlYXJzIGluIHRoZSBkaXJlY3RvcnkgbGlzdGluZy4KKworVW5yZWdpc3RlcmluZyBkZXZpY2UgZW50cmllcworCitBIGRldmljZSBkcml2ZXIgY2FsbHMgZGV2ZnNfdW5yZWdpc3RlcigpIHRvIHVucmVnaXN0ZXIgYW4gZW50cnkuCisKK0Nocm9vdCgpIGdhb2xzCisKKzIuMi54IGtlcm5lbHMKKworVGhlIHNlbWFudGljcyBvZiBpbm9kZSBjcmVhdGlvbiBhcmUgZGlmZmVyZW50IHdoZW4gZGV2ZnMgaXMgbW91bnRlZAord2l0aCB0aGUgImV4cGxpY2l0IiBvcHRpb24uIE5vdywgd2hlbiBhIGRldmljZSBlbnRyeSBpcyByZWdpc3RlcmVkLCBpdAord2lsbCBub3QgYXBwZWFyIHVudGlsIHlvdSB1c2UgbWtub2QoKSB0byBjcmVhdGUgdGhlIGRldmljZS4gSXQgZG9lc24ndAorbWF0dGVyIGlmIHlvdSBta25vZCgpIGJlZm9yZSBvciBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aAorZGV2ZnNfcmVnaXN0ZXIoKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBiZWhhdmlvdXIgaXMgdG8gc3VwcG9ydAorY2hyb290KDIpIGdhb2xzLCB3aGVyZSB5b3Ugd2FudCB0byBtb3VudCBhIG1pbmltYWwgZGV2ZnMgaW5zaWRlIHRoZQorZ2FvbC4gT25seSB0aGUgZGV2aWNlcyB5b3Ugc3BlY2lmaWNhbGx5IHdhbnQgdG8gYmUgYXZhaWxhYmxlICh0aHJvdWdoCit5b3VyIG1rbm9kKCkgc2V0dXApIHdpbGwgYmUgYWNjZXNzaWJsZS4KKworMi40Lngga2VybmVscworCitBcyBvZiBrZXJuZWwgMi4zLjk5LCB0aGUgVkZTIGhhcyBoYWQgdGhlIGFiaWxpdHkgdG8gcmViaW5kIHBhcnRzIG9mCit0aGUgZ2xvYmFsIGZpbGVzeXN0ZW0gbmFtZXNwYWNlIGludG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBuYW1lc3BhY2UuCitUaGlzIG5vdyB3b3JrcyBldmVuIGF0IHRoZSBsZWFmLW5vZGUgbGV2ZWwsIHdoaWNoIG1lYW5zIHRoYXQKK2luZGl2aWR1YWwgZmlsZXMgYW5kIGRldmljZSBub2RlcyBtYXkgYmUgYm91bmQgaW50byBvdGhlciBwYXJ0cyBvZiB0aGUKK25hbWVzcGFjZS4gVGhpcyBpcyBsaWtlIG1ha2luZyBsaW5rcywgYnV0IGJldHRlciwgYmVjYXVzZSBpdCB3b3JrcworYWNyb3NzIGZpbGVzeXN0ZW1zICh1bmxpa2UgaGFyZCBsaW5rcykgYW5kIHdvcmtzIHRocm91Z2ggY2hyb290KCkKK2dhb2xzICh1bmxpa2Ugc3ltYm9saWMgbGlua3MpLgorCitCZWNhdXNlIG9mIHRoZXNlIGltcHJvdmVtZW50cyB0byB0aGUgVkZTLCB0aGUgbXVsdGktbW91bnQgY2FwYWJpbGl0eQoraW4gZGV2ZnMgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGFkbWluaXN0cmF0b3IgbWF5IGNyZWF0ZSBhIG1pbmltYWwKK2RldmljZSB0cmVlIGluc2lkZSBhIGNocm9vdCgyKSBnYW9sIGJ5IHVzaW5nIFZGUyBiaW5kaW5ncy4gQXMgdGhpcworcHJvdmlkZXMgbW9zdCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIGRldmZzIG11bHRpLW1vdW50IGNhcGFiaWxpdHksIEkKK3JlbW92ZWQgdGhlIG11bHRpLW1vdW50IHN1cHBvcnQgY29kZSAoYWZ0ZXIgaXNzdWluZyBhbiBSRkMpLiBUaGlzCit5aWVsZGVkIGNvZGUgc2l6ZSByZWR1Y3Rpb25zIGFuZCBzaW1wbGlmaWNhdGlvbnMuCisKK0lmIHlvdSB3YW50IHRvIGNvbnN0cnVjdCBhIG1pbmltYWwgY2hyb290KCkgZ2FvbCwgdGhlIGZvbGxvd2luZworY29tbWFuZCBzaG91bGQgc3VmZmljZToKKworbW91bnQgLS1iaW5kIC9kZXYvbnVsbCAvZ2FvbC9kZXYvbnVsbAorCisKK1JlcGVhdCBmb3Igb3RoZXIgZGV2aWNlIG5vZGVzIHlvdSB3YW50IHRvIGV4cG9zZS4gU2ltcGxlIQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK09wZXJhdGlvbmFsIGlzc3VlcworCisKK0luc3RydWN0aW9ucyBmb3IgdGhlIGltcGF0aWVudAorCitOb2JvZHkgbGlrZXMgcmVhZGluZyBkb2N1bWVudGF0aW9uLiBQZW9wbGUganVzdCB3YW50IHRvIGdldCBpbiB0aGVyZQorYW5kIHBsYXkuIFNvIHRoaXMgc2VjdGlvbiB0ZWxscyB5b3UgcXVpY2tseSB0aGUgc3RlcHMgeW91IG5lZWQgdG8gdGFrZQordG8gcnVuIHdpdGggZGV2ZnMgbW91bnRlZCBvdmVyIC9kZXYuIFNraXAgdGhlc2Ugc3RlcHMgYW5kIHlvdSB3aWxsIGVuZAordXAgd2l0aCBhIG5lYXJseSB1bmJvb3RhYmxlIHN5c3RlbS4gU3Vic2VxdWVudCBzZWN0aW9ucyBkZXNjcmliZSB0aGUKK2lzc3VlcyBpbiBtb3JlIGRldGFpbCwgYW5kIGRpc2N1c3Mgbm9uLWVzc2VudGlhbCBjb25maWd1cmF0aW9uCitvcHRpb25zLgorCitEZXZmc2QKK09LLCBpZiB5b3UncmUgcmVhZGluZyB0aGlzLCBJIGFzc3VtZSB5b3Ugd2FudCB0byBwbGF5IHdpdGgKK2RldmZzLiBGaXJzdCB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0IC91c3Ivc3JjL2xpbnV4IGNvbnRhaW5zIGEKK3JlY2VudCBrZXJuZWwgc291cmNlIHRyZWUuIFRoZW4geW91IG5lZWQgdG8gY29tcGlsZSBkZXZmc2QsIHRoZSBkZXZpY2UKK21hbmFnZW1lbnQgZGFlbW9uLCBhdmFpbGFibGUgYXQKKworaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvLgorQmVjYXVzZSB0aGUga2VybmVsIGhhcyBhIG5hbWluZyBzY2hlbWUKK3doaWNoIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgbmFtaW5nIHNjaGVtZSwgeW91IG5lZWQgdG8KK2luc3RhbGwgZGV2ZnNkIHNvIHRoYXQgc29mdHdhcmUgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCB1c2UgdGhlCitvbGQgbmFtaW5nIHNjaGVtZSB3aWxsIG5vdCBicmVhay4KKworQ29tcGlsZSBhbmQgaW5zdGFsbCBkZXZmc2QuIFlvdSB3aWxsIGJlIHByb3ZpZGVkIHdpdGggYSBkZWZhdWx0Citjb25maWd1cmF0aW9uIGZpbGUgL2V0Yy9kZXZmc2QuY29uZiB3aGljaCB3aWxsIHByb3ZpZGUKK2NvbXBhdGliaWxpdHkgc3ltbGlua3MgZm9yIHRoZSBvbGQgbmFtaW5nIHNjaGVtZS4gRG9uJ3QgY2hhbmdlIHRoaXMKK2NvbmZpZyBmaWxlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gRXZlbiBpZiB5b3UgdGhpbmsgeW91CitkbyBrbm93IHdoYXQgeW91J3JlIGRvaW5nLCBkb24ndCBjaGFuZ2UgaXQgdW50aWwgeW91J3ZlIGZvbGxvd2VkIGFsbAordGhlIHN0ZXBzIGJlbG93IGFuZCBib290ZWQgYSBkZXZmcy1lbmFibGVkIHN5c3RlbSBhbmQgdmVyaWZpZWQgdGhhdCBpdAord29ya3MuCisKK05vdyBlZGl0IHlvdXIgbWFpbiBzeXN0ZW0gYm9vdCBzY3JpcHQgc28gdGhhdCBkZXZmc2QgaXMgc3RhcnRlZCBhdCB0aGUKK3ZlcnkgYmVnaW5uaW5nIChiZWZvcmUgYW55IGZpbGVzeXN0ZW0KK2NoZWNrcykuIC9ldGMvcmMuZC9yYy5zeXNpbml0IGlzIG9mdGVuIHRoZSBtYWluIGJvb3Qgc2NyaXB0CitvbiBzeXN0ZW1zIHdpdGggU3lzVi1zdHlsZSBib290IHNjcmlwdHMuIE9uIHN5c3RlbXMgd2l0aCBCU0Qtc3R5bGUKK2Jvb3Qgc2NyaXB0cyBpdCBpcyBvZnRlbiAvZXRjL3JjLiBBbHNvIGNoZWNrCisvc2Jpbi9yYy4KKworTk9URSB0aGF0IHRoZSBsaW5lIHlvdSBwdXQgaW50byB0aGUgYm9vdAorc2NyaXB0IHNob3VsZCBiZSBleGFjdGx5OgorCisvc2Jpbi9kZXZmc2QgL2RldgorCitETyBOT1QgdXNlIHNvbWUgc3BlY2lhbCBkYWVtb24tbGF1bmNoaW5nCitwcm9ncmFtbWUsIG90aGVyd2lzZSB0aGUgYm9vdCBzY3JpcHQgbWF5IG5vdCB3YWl0IGZvciBkZXZmc2QgdG8gZmluaXNoCitpbml0aWFsaXNpbmcuCisKK1N5c3RlbSBMaWJyYXJpZXMKK1RoZXJlIG1heSBzdGlsbCBiZSBzb21lIHByb2JsZW1zIGJlY2F1c2Ugb2YgYnJva2VuIHNvZnR3YXJlIG1ha2luZworYXNzdW1wdGlvbnMgYWJvdXQgZGV2aWNlIG5hbWVzLiBJbiBwYXJ0aWN1bGFyLCBzb21lIHNvZnR3YXJlIGRvZXMgbm90CitoYW5kbGUgZGV2aWNlcyB3aGljaCBhcmUgc3ltYm9saWMgbGlua3MuIElmIHlvdSBhcmUgcnVubmluZyBhIGxpYmMgNQorYmFzZWQgc3lzdGVtLCBpbnN0YWxsIGxpYmMgNS40LjQ0IChpZiB5b3UgaGF2ZSBsaWJjIDUuNC40NiwgZ28gYmFjayB0bworbGliYyA1LjQuNDQsIHdoaWNoIGlzIGFjdHVhbGx5IGNvcnJlY3QpLiBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBnbGliYworYmFzZWQgc3lzdGVtLCBtYWtlIHN1cmUgeW91IGhhdmUgZ2xpYmMgMi4xLjMgb3IgbGF0ZXIuCisKKy9ldGMvc2VjdXJldHR5CitQQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzKSBpcyBzdXBwb3NlZCB0byBiZSBhIGZsZXhpYmxlCittZWNoYW5pc20gZm9yIHByb3ZpZGluZyBiZXR0ZXIgdXNlciBhdXRoZW50aWNhdGlvbiBhbmQgYWNjZXNzIHRvCitzZXJ2aWNlcy4gVW5mb3J0dW5hdGVseSwgaXQncyBhbHNvIGZyYWdpbGUsIGNvbXBsZXggYW5kIHVuZG9jdW1lbnRlZAorKGNoZWNrIG91dCBSZWRIYXQgNi4xLCBhbmQgcHJvYmFibHkgb3RoZXIgZGlzdHJpYnV0aW9ucyBhcyB3ZWxsKS4gUEFNCitoYXMgcHJvYmxlbXMgd2l0aCBzeW1ib2xpYyBsaW5rcy4gQXBwZW5kIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91cgorL2V0Yy9zZWN1cmV0dHkgZmlsZToKKwordmMvMQordmMvMgordmMvMwordmMvNAordmMvNQordmMvNgordmMvNwordmMvOAorCitUaGlzIHdpbGwgbm90IHdlYWtlbiBzZWN1cml0eS4gSWYgeW91IGhhdmUgYSB2ZXJzaW9uIG9mIHV0aWwtbGludXgKK2VhcmxpZXIgdGhhbiAyLjEwLmgsIHBsZWFzZSB1cGdyYWRlIHRvIDIuMTAuaCBvciBsYXRlci4gSWYgeW91CithYnNvbHV0ZWx5IGNhbm5vdCB1cGdyYWRlLCB0aGVuIGFsc28gYXBwZW5kIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8KK3lvdXIgL2V0Yy9zZWN1cmV0dHkgZmlsZToKKworMQorMgorMworNAorNQorNgorNworOAorCitUaGlzIG1heSBwb3RlbnRpYWxseSB3ZWFrZW4gc2VjdXJpdHkgYnkgYWxsb3dpbmcgcm9vdCBsb2dpbnMgb3ZlciB0aGUKK25ldHdvcmsgKGEgcGFzc3dvcmQgaXMgc3RpbGwgcmVxdWlyZWQsIHRob3VnaCkuIEhvd2V2ZXIsIHNpbmNlIHRoZXJlCithcmUgcHJvYmxlbXMgd2l0aCBkZWFsaW5nIHdpdGggc3ltbGlua3MsIEknbSBzdXNwaWNpb3VzIG9mIHRoZSBsZXZlbAorb2Ygc2VjdXJpdHkgb2ZmZXJlZCBpbiBhbnkgY2FzZS4KKworWEZyZWU4NgorV2hpbGUgbm90IGVzc2VudGlhbCwgaXQncyBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byB1cGdyYWRlIHRvIFhGcmVlODYKKzQuMCwgYXMgcGF0Y2hlcyB3ZW50IGluIHRvIG1ha2UgaXQgbW9yZSBkZXZmcy1mcmllbmRseS4gSWYgeW91IGRvbid0LAoreW91J2xsIHByb2JhYmx5IG5lZWQgdG8gYXBwbHkgdGhlIGZvbGxvd2luZyBwYXRjaCB0bworL2V0Yy9zZWN1cml0eS9jb25zb2xlLnBlcm1zIHNvIHRoYXQgb3JkaW5hcnkgdXNlcnMgY2FuIHJ1bgorc3RhcnR4LiBOb3RlIHRoYXQgbm90IGFsbCBkaXN0cmlidXRpb25zIGhhdmUgdGhpcyBmaWxlIChlLmcuIERlYmlhbiksCitzbyBpZiBpdCdzIG5vdCBwcmVzZW50LCBkb24ndCB3b3JyeSBhYm91dCBpdC4KKworLS0tIC9ldGMvc2VjdXJpdHkvY29uc29sZS5wZXJtcy5vcmlnICAgIFNhdCBBcHIgMTcgMTY6MjY6NDcgMTk5OSAKKysrKyAvZXRjL3NlY3VyaXR5L2NvbnNvbGUucGVybXMgRnJpIEZlYiAyNSAyMzo1Mzo1NSAyMDAwIAorQEAgLTE0LDcgKzE0LDcgQEAgCisgIyBtYW4gNSBjb25zb2xlLnBlcm1zIAorCisgIyBmaWxlIGNsYXNzZXMgLS0gdGhlc2UgYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgCistPGNvbnNvbGU+PXR0eVswLTldWzAtOV0qIDpbMC05XVwuWzAtOV0gOlswLTldIAorKzxjb25zb2xlPj10dHlbMC05XVswLTldKiB2Yy9bMC05XVswLTldKiA6WzAtOV1cLlswLTldIDpbMC05XSAKKworICMgZGV2aWNlIGNsYXNzZXMgLS0gdGhlc2UgYXJlIHNoZWxsLXN0eWxlIGdsb2JzIAorIDxmbG9wcHk+PS9kZXYvZmRbMC0xXSogCisKK0lmIHRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseSwgdGhlbiBjaGFuZ2UgdGhlIGxpbmU6CisKKzxjb25zb2xlPj10dHlbMC05XVswLTldKiA6WzAtOV1cLlswLTldIDpbMC05XQorCit3aXRoOgorCis8Y29uc29sZT49dHR5WzAtOV1bMC05XSogdmMvWzAtOV1bMC05XSogOlswLTldXC5bMC05XSA6WzAtOV0KKworCitEaXNhYmxlIGRldnB0cworSSd2ZSBoYWQgYSByZXBvcnQgb2YgZGV2cHRzIG1vdW50ZWQgb24gL2Rldi9wdHMgbm90IHdvcmtpbmcKK2NvcnJlY3RseS4gU2luY2UgZGV2ZnMgd2lsbCBhbHNvIG1hbmFnZSAvZGV2L3B0cywgdGhlcmUgaXMgbm8KK25lZWQgdG8gbW91bnQgZGV2cHRzIGFzIHdlbGwuIFlvdSBzaG91bGQgZWl0aGVyIGVkaXQgeW91cgorL2V0Yy9mc3RhYiBzbyBkZXZwdHMgaXMgbm90IG1vdW50ZWQsIG9yIGRpc2FibGUgZGV2cHRzIGZyb20KK3lvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24uCisKK1Vuc3VwcG9ydGVkIGRyaXZlcnMKK05vdCBhbGwgZHJpdmVycyBoYXZlIGRldmZzIHN1cHBvcnQuIElmIHlvdSBkZXBlbmQgb24gb25lIG9mIHRoZXNlCitkcml2ZXJzLCB5b3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSBhIHNjcmlwdCBvciB0YXJmaWxlIHRoYXQgeW91IGNhbiB1c2UKK2F0IGJvb3QgdGltZSB0byBjcmVhdGUgZGV2aWNlIG5vZGVzIGFzIGFwcHJvcHJpYXRlLiBUaGVyZSBpcyBhCitzZWN0aW9uIHdoaWNoIGRlc2NyaWJlcyB0aGlzLiBBbm90aGVyCitzZWN0aW9uIGxpc3RzIHRoZSBkcml2ZXJzIHdoaWNoIGhhdmUKK2RldmZzIHN1cHBvcnQuCisKKy9kZXYvbW91c2UKKworTWFueSBkaXNyaWJ1dGlvbnMgY29uZmlndXJlIC9kZXYvbW91c2UgdG8gYmUgdGhlIG1vdXNlIGRldmljZQorZm9yIFhGcmVlODYgYW5kIEdQTS4gSSBhY3R1YWxseSB0aGluayB0aGlzIGlzIGEgYmFkIGlkZWEsIGJlY2F1c2UgaXQKK2FkZHMgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbi4gV2hlbiBsb29raW5nIGF0IGEgY29uZmlnIGZpbGUsIGlmCit5b3Ugc2VlIC9kZXYvbW91c2UgeW91J3JlIGxlZnQgd29uZGVyaW5nIHdoaWNoIG1vdXNlCitpcyBiZWluZyByZWZlcnJlZCB0by4gSGVuY2UgSSByZWNvbW1lbmQgcHV0dGluZyB0aGUgYWN0dWFsIG1vdXNlCitkZXZpY2UgKGZvciBleGFtcGxlIC9kZXYvcHNhdXgpIGludG8geW91cgorL2V0Yy9YMTEvWEY4NkNvbmZpZyBmaWxlIChhbmQgc2ltaWxhcmx5IGZvciB0aGUgR1BNCitjb25maWd1cmF0aW9uIGZpbGUpLgorCitBbHRlcm5hdGl2ZWx5LCB1c2UgdGhlIHNhbWUgdGVjaG5pcXVlIHVzZWQgZm9yIHVuc3VwcG9ydGVkIGRyaXZlcnMKK2Rlc2NyaWJlZCBhYm92ZS4KKworVGhlIEtlcm5lbAorRmluYWxseSwgeW91IG5lZWQgdG8gbWFrZSBzdXJlIGRldmZzIGlzIGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwuIFNldAorQ09ORklHX0VYUEVSSU1FTlRBTD15LCBDT05GSUdfREVWRlNfRlM9eSBhbmQgQ09ORklHX0RFVkZTX01PVU5UPXkgYnkKK3VzaW5nIGZhdm91cml0ZSBjb25maWd1cmF0aW9uIHRvb2wgKGkuZS4gbWFrZSBjb25maWcgb3IKK21ha2UgeGNvbmZpZykgYW5kIHRoZW4gbWFrZSBjbGVhbiBhbmQgdGhlbiByZWNvbXBpbGUgeW91ciBrZXJuZWwgYW5kIAorbW9kdWxlcy4gQXQgYm9vdCwgZGV2ZnMgd2lsbCBiZSBtb3VudGVkIG9udG8gL2Rldi4KKworSWYgeW91IGVuY291bnRlciBwcm9ibGVtcyBib290aW5nIChmb3IgZXhhbXBsZSBpZiB5b3UgZm9yZ290IGEKK2NvbmZpZ3VyYXRpb24gc3RlcCksIHlvdSBjYW4gcGFzcyBkZXZmcz1ub21vdW50IGF0IHRoZSBrZXJuZWwKK2Jvb3QgY29tbWFuZCBsaW5lLiBUaGlzIHdpbGwgcHJldmVudCB0aGUga2VybmVsIGZyb20gbW91bnRpbmcgZGV2ZnMgYXQKK2Jvb3QgdGltZSBvbnRvIC9kZXYuCisKK0luIGdlbmVyYWwsIGEga2VybmVsIGJ1aWx0IHdpdGggQ09ORklHX0RFVkZTX0ZTPXkgYnV0IHdpdGhvdXQgbW91bnRpbmcKK2RldmZzIG9udG8gL2RldiBpcyBjb21wbGV0ZWx5IHNhZmUsIGFuZCByZXF1aXJlcyBubworY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBPbmUgZXhjZXB0aW9uIHRvIHRha2Ugbm90ZSBvZiBpcyB3aGVuCitMQUJFTD0gZGlyZWN0aXZlcyBhcmUgdXNlZCBpbiAvZXRjL2ZzdGFiLiBJbiB0aGlzCitjYXNlIHlvdSB3aWxsIGJlIHVuYWJsZSB0byBib290IHByb3Blcmx5LiBUaGlzIGlzIGJlY2F1c2UgdGhlCittb3VudCg4KSBwcm9ncmFtbWUgdXNlcyAvcHJvYy9wYXJ0aXRpb25zIGFzIHBhcnQgb2YKK3RoZSB2b2x1bWUgbGFiZWwgc2VhcmNoIHByb2Nlc3MsIGFuZCB0aGUgZGV2aWNlIG5hbWVzIGl0IGZpbmRzIGFyZSBub3QKK2F2YWlsYWJsZSwgYmVjYXVzZSBzZXR0aW5nIENPTkZJR19ERVZGU19GUz15IGNoYW5nZXMgdGhlIG5hbWVzIGluCisvcHJvYy9wYXJ0aXRpb25zLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBkZXZmcyBpcyBtb3VudGVkLgorCitOb3cgeW91J3ZlIGZpbmlzaGVkIGFsbCB0aGUgc3RlcHMgcmVxdWlyZWQuIFlvdSdyZSBub3cgcmVhZHkgdG8gYm9vdAoreW91ciBzaGlueSBuZXcga2VybmVsLiBFbmpveS4KKworQ2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24KKworT0ssIHlvdSd2ZSBub3cgYm9vdGVkIGEgZGV2ZnMtZW5hYmxlZCBzeXN0ZW0sIGFuZCBldmVyeXRoaW5nIHdvcmtzLgorTm93IHlvdSBtYXkgZmVlbCBsaWtlIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uIChjb21tb24gdGFyZ2V0cyBhcmUKKy9ldGMvZnN0YWIgYW5kIC9ldGMvZGV2ZnNkLmNvbmYpLiBTaW5jZSB5b3UgaGF2ZSBhCitzeXN0ZW0gdGhhdCB3b3JrcywgaWYgeW91IG1ha2UgYW55IGNoYW5nZXMgYW5kIGl0IGRvZXNuJ3Qgd29yaywgeW91Citub3cga25vdyB0aGF0IHlvdSBvbmx5IGhhdmUgdG8gcmVzdG9yZSB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gdGhlCitkZWZhdWx0IGFuZCBpdCB3aWxsIHdvcmsgYWdhaW4uCisKKworUGVybWlzc2lvbnMgcGVyc2lzdGVuY2UgYWNyb3NzIHJlYm9vdHMKKworSWYgeW91IGRvbid0IHVzZSBta25vZCgyKSB0byBjcmVhdGUgYSBkZXZpY2UgZmlsZSwgbm9yIHVzZSBjaG1vZCgyKSBvcgorY2hvd24oMikgdG8gY2hhbmdlIHRoZSBvd25lcnNoaXBzL3Blcm1pc3Npb25zLCB0aGUgaW5vZGUgY3RpbWUgd2lsbAorcmVtYWluIGF0IDAgKHRoZSBlcG9jaCwgMTIgYW0sIDEtSkFOLTE5NzAsIEdNVCkuIEFueXRoaW5nIHdpdGggYSBjdGltZQorbGF0ZXIgdGhhbiB0aGlzIGhhcyBoYWQgaXQncyBvd25lcnNoaXAvcGVybWlzc2lvbnMgY2hhbmdlZC4gSGVuY2UsIGEKK3NpbXBsZSBzY3JpcHQgb3IgcHJvZ3JhbW1lIG1heSBiZSB1c2VkIHRvIHRhciB1cCBhbGwgY2hhbmdlZCBpbm9kZXMsCitwcmlvciB0byBzaHV0ZG93bi4gQWx0aG91Z2ggZWZmZWN0aXZlLCBtYW55IGNvbnNpZGVyIHRoaXMgYXBwcm9hY2ggYQora2x1ZGdlLgorCitBIG11Y2ggYmV0dGVyIGFwcHJvYWNoIGlzIHRvIHVzZSBkZXZmc2QgdG8gc2F2ZSBhbmQgcmVzdG9yZQorcGVybWlzc2lvbnMuIEl0IG1heSBiZSBjb25maWd1cmVkIHRvIHJlY29yZCBjaGFuZ2VzIGluIHBlcm1pc3Npb25zIGFuZAord2lsbCBzYXZlIHRoZW0gaW4gYSBkYXRhYmFzZSAoaW4gZmFjdCBhIGRpcmVjdG9yeSB0cmVlKSwgYW5kIHJlc3RvcmUKK3RoZXNlIHVwb24gYm9vdC4gVGhpcyBpcyBhbiBlZmZpY2llbnQgbWV0aG9kIGFuZCByZXN1bHRzIGluIGltbWVkaWF0ZQorc2F2aW5nIG9mIGN1cnJlbnQgcGVybWlzc2lvbnMgKHVubGlrZSB0aGUgdGFyIGFwcHJvYWNoLCB3aGljaCBzYXZlcworcGVybWlzc2lvbnMgYXQgc29tZSB1bnNwZWNpZmllZCBmdXR1cmUgdGltZSkuCisKK1RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSBzdXBwbGllZCB3aXRoIGRldmZzZCBoYXMgY29uZmlnIGVudHJpZXMKK3doaWNoIHlvdSBtYXkgdW5jb21tZW50IHRvIGVuYWJsZSBwZXJzaXN0ZW5jZSBtYW5hZ2VtZW50LgorCitJZiB5b3UgZGVjaWRlIHRvIHVzZSB0aGUgdGFyIGFwcHJvYWNoIGFueXdheSwgYmUgYXdhcmUgdGhhdCB0YXIgd2lsbAorZmlyc3QgdW5saW5rKDIpIGFuIGlub2RlIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBkZXZpY2Ugbm9kZS4gVGhlCit1bmxpbmsoMikgaGFzIHRoZSBlZmZlY3Qgb2YgYnJlYWtpbmcgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBhIGRldmZzCitlbnRyeSBhbmQgdGhlIGRldmljZSBkcml2ZXIuIElmIHlvdSB1c2UgdGhlICJkZXZmcz1vbmx5IiBib290IG9wdGlvbiwKK3lvdSBsb3NlIGFjY2VzcyB0byB0aGUgZGV2aWNlIGRyaXZlciwgcmVxdWlyaW5nIHlvdSB0byByZWxvYWQgdGhlCittb2R1bGUuIEkgY29uc2lkZXIgdGhpcyBhIGJ1ZyBpbiB0YXIgKHRoZXJlIGlzIG5vIHJlYWwgbmVlZCB0bwordW5saW5rKDIpIHRoZSBpbm9kZSBmaXJzdCkuCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGRldmZzZCB0byBwcm92aWRlIG1vcmUgc29waGlzdGljYXRlZAorbWFuYWdlbWVudCBvZiBkZXZpY2UgcGVybWlzc2lvbnMuIFlvdSBjYW4gdXNlIGRldmZzZCB0byBzdG9yZQorcGVybWlzc2lvbnMgZm9yIHdob2xlIGdyb3VwcyBvZiBkZXZpY2VzIHdpdGggYSBzaW5nbGUgY29uZmlndXJhdGlvbgorZW50cnksIHJhdGhlciB0aGFuIHRoZSBjb252ZW50aW9uYWwgc2luZ2xlIGVudHJ5IHBlciBkZXZpY2UgZW50cnkuCisKK1Blcm1pc3Npb25zIGRhdGFiYXNlIHN0b3JlZCBpbiBtb3VudGVkLW92ZXIgL2RldgorCitJZiB5b3Ugd2lzaCB0byBzYXZlIGFuZCByZXN0b3JlIHlvdXIgZGV2aWNlIHBlcm1pc3Npb25zIGludG8gdGhlCitkaXNjLWJhc2VkIC9kZXYgd2hpbGUgc3RpbGwgbW91bnRpbmcgZGV2ZnMgb250byAvZGV2Cit5b3UgbWF5IGRvIHNvLiBUaGlzIHJlcXVpcmVzIGEgMi40Lngga2VybmVsIChpbiBmYWN0LCAyLjMuOTkgb3IKK2xhdGVyKSwgd2hpY2ggaGFzIHRoZSBWRlMgYmluZGluZyBmYWNpbGl0eS4gWW91IG5lZWQgdG8gZG8gdGhlCitmb2xsb3dpbmcgdG8gc2V0IHRoaXMgdXA6CisKKworCittYWtlIHN1cmUgdGhlIGtlcm5lbCBkb2VzIG5vdCBtb3VudCBkZXZmcyBhdCBib290IHRpbWUKKworCittYWtlIHN1cmUgeW91IGhhdmUgYSBjb3JyZWN0IC9kZXYvY29uc29sZSBlbnRyeSBpbiB5b3VyCityb290IGZpbGUtc3lzdGVtICh3aGVyZSB5b3VyIGRpc2MtYmFzZWQgL2RldiBsaXZlcykKKworY3JlYXRlIHRoZSAvZGV2LXN0YXRlIGRpcmVjdG9yeQorCisKK2FkZCB0aGUgZm9sbG93aW5nIGxpbmVzIG5lYXIgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHlvdXIgYm9vdAorc2NyaXB0czoKKworbW91bnQgLS1iaW5kIC9kZXYgL2Rldi1zdGF0ZQorbW91bnQgLXQgZGV2ZnMgbm9uZSAvZGV2CitkZXZmc2QgL2RldgorCisKKworCithZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIC9ldGMvZGV2ZnNkLmNvbmYgZmlsZToKKworUkVHSVNURVIJXnB0W3N5XQkJSUdOT1JFCitDUkVBVEUJCV5wdFtzeV0JCUlHTk9SRQorQ0hBTkdFCQlecHRbc3ldCQlJR05PUkUKK0RFTEVURQkJXnB0W3N5XQkJSUdOT1JFCitSRUdJU1RFUgkuKgkJQ09QWQkvZGV2LXN0YXRlLyRkZXZuYW1lICRkZXZwYXRoCitDUkVBVEUJCS4qCQlDT1BZCSRkZXZwYXRoIC9kZXYtc3RhdGUvJGRldm5hbWUKK0NIQU5HRQkJLioJCUNPUFkJJGRldnBhdGggL2Rldi1zdGF0ZS8kZGV2bmFtZQorREVMRVRFCQkuKgkJQ0ZVTkNUSU9OIEdMT0JBTCB1bmxpbmsgL2Rldi1zdGF0ZS8kZGV2bmFtZQorUkVTVE9SRQkJL2Rldi1zdGF0ZQorCitOb3RlIHRoYXQgdGhlIHNhbXBsZSBkZXZmc2QuY29uZiBmaWxlIGNvbnRhaW5zIHRoZXNlIGxpbmVzLAorYXMgd2VsbCBhcyBvdGhlciBzYW1wbGUgY29uZmlndXJhdGlvbnMgeW91IG1heSBmaW5kIHVzZWZ1bC4gU2VlIHRoZQorZGV2ZnNkIGRpc3RyaWJ1dGlvbgorCisKK3JlYm9vdC4KKworCisKKworUGVybWlzc2lvbnMgZGF0YWJhc2Ugc3RvcmVkIGluIG5vcm1hbCBkaXJlY3RvcnkKKworSWYgeW91IGFyZSB1c2luZyBhbiBvbGRlciBrZXJuZWwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IFZGUyBiaW5kaW5nLAordGhlbiB5b3Ugd29uJ3QgYmUgYWJsZSB0byBoYXZlIHRoZSBwZXJtaXNzaW9ucyBkYXRhYmFzZSBpbiBhCittb3VudGVkLW92ZXIgL2Rldi4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCB1c2UgYSByZWd1bGFyCitkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGRhdGFiYXNlLiBUaGUgc2FtcGxlIC9ldGMvZGV2ZnNkLmNvbmYKK2ZpbGUgYWJvdmUgbWF5IHN0aWxsIGJlIHVzZWQuIFlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIHRoZQorL2Rldi1zdGF0ZSBkaXJlY3RvcnkgcHJpb3IgdG8gaW5zdGFsbGluZyBkZXZmc2QuIElmIHlvdSBoYXZlCitvbGQgcGVybWlzc2lvbnMgaW4gL2RldiwgdGhlbiBqdXN0IGNvcHkgKG9yIG1vdmUpIHRoZSBkZXZpY2UKK25vZGVzIG92ZXIgdG8gdGhlIG5ldyBkaXJlY3RvcnkuCisKK1doaWNoIG1ldGhvZCBpcyBiZXR0ZXI/CisKK1RoZSBiZXN0IG1ldGhvZCBpcyB0byBoYXZlIHRoZSBwZXJtaXNzaW9ucyBkYXRhYmFzZSBzdG9yZWQgaW4gdGhlCittb3VudGVkLW92ZXIgL2Rldi4gVGhpcyBpcyBiZWNhdXNlIHlvdSB3aWxsIG5vdCBuZWVkIHRvIGNvcHkKK2RldmljZSBub2RlcyBvdmVyIHRvIC9kZXYtc3RhdGUsIGFuZCBiZWNhdXNlIGl0IGFsbG93cyB5b3UgdG8KK3N3aXRjaCBiZXR3ZWVuIGRldmZzIGFuZCBub24tZGV2ZnMga2VybmVscywgd2l0aG91dCByZXF1aXJpbmcgeW91IHRvCitjb3B5IHBlcm1pc3Npb25zIGJldHdlZW4gL2Rldi1zdGF0ZSAoZm9yIGRldmZzKSBhbmQKKy9kZXYgKGZvciBub24tZGV2ZnMpLgorCisKK0RlYWxpbmcgd2l0aCBkcml2ZXJzIHdpdGhvdXQgZGV2ZnMgc3VwcG9ydAorCitDdXJyZW50bHksIG5vdCBhbGwgZGV2aWNlIGRyaXZlcnMgaW4gdGhlIGtlcm5lbCBoYXZlIGJlZW4gbW9kaWZpZWQgdG8KK3VzZSBkZXZmcy4gRGV2aWNlIGRyaXZlcnMgd2hpY2ggZG8gbm90IHlldCBoYXZlIGRldmZzIHN1cHBvcnQgd2lsbCBub3QKK2F1dG9tYWdpY2FsbHkgYXBwZWFyIGluIGRldmZzLiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBkZXZpY2Ugbm9kZXMKK2ZvciB0aGVzZSBkcml2ZXJzIGlzIHRvIHVucGFjayBhIHRhcmZpbGUgY29udGFpbmluZyB0aGUgcmVxdWlyZWQKK2RldmljZSBub2Rlcy4gWW91IGNhbiBkbyB0aGlzIGluIHlvdXIgYm9vdCBzY3JpcHRzLiBBbGwgeW91ciBkcml2ZXJzCit3aWxsIG5vdyB3b3JrIGFzIGJlZm9yZS4KKworSG9wZWZ1bGx5IGZvciBtb3N0IHBlb3BsZSBkZXZmcyB3aWxsIGhhdmUgZW5vdWdoIHN1cHBvcnQgc28gdGhhdCB0aGV5CitjYW4gbW91bnQgZGV2ZnMgZGlyZWN0bHkgb3ZlciAvZGV2IHdpdGhvdXQgbG9zaW5nIG1vc3QgZnVuY3Rpb25hbGl0eQorKGkuZS4gbG9zaW5nIGFjY2VzcyB0byB2YXJpb3VzIGRldmljZXMpLiBBcyBvZiAyMi1KQU4tMTk5OCAoZGV2ZnMKK3BhdGNoIHZlcnNpb24gMTApIEkgYW0gbm93IHJ1bm5pbmcgdGhpcyB3YXkuIEFsbCB0aGUgZGV2aWNlcyBJIGhhdmUKK2FyZSBhdmFpbGFibGUgaW4gZGV2ZnMsIHNvIEkgZG9uJ3QgbG9zZSBhbnl0aGluZy4KKworV0FSTklORzogaWYgeW91ciBjb25maWd1cmF0aW9uIHJlcXVpcmVzIHRoZSBvbGQtc3R5bGUgZGV2aWNlIG5hbWVzCisoaS5lLiAvZGV2L2hkYTEgb3IgL2Rldi9zZGExKSwgeW91IG11c3QgaW5zdGFsbCBkZXZmc2QgYW5kIGNvbmZpZ3VyZQoraXQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSBlbnRyaWVzLiBJdCBpcyBhbG1vc3QgY2VydGFpbiB0aGF0IHlvdQord2lsbCByZXF1aXJlIHRoaXMuIE5vdGUgdGhhdCB0aGUga2VybmVsIGNyZWF0ZXMgYSBjb21wYXRpYmlsaXR5IGVudHJ5Citmb3IgdGhlIHJvb3QgZGV2aWNlLCBzbyB5b3UgZG9uJ3QgbmVlZCBpbml0cmQuCisKK05vdGUgdGhhdCB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8gbW91bnQgZGV2cHRzIGlmIHlvdSB1c2UgVW5peDk4IFBUWXMsCithcyBkZXZmcyBjYW4gbWFuYWdlIC9kZXYvcHRzIGl0c2VsZi4gVGhpcyBzYXZlcyB5b3Ugc29tZSBSQU0sIGFzIHlvdQorZG9uJ3QgbmVlZCB0byBjb21waWxlIGFuZCBpbnN0YWxsIGRldnB0cy4gTm90ZSB0aGF0IHNvbWUgdmVyc2lvbnMgb2YKK2dsaWJjIGhhdmUgYSBidWcgd2l0aCBVbml4OTggcHR5IGhhbmRsaW5nIG9uIGRldmZzIHN5c3RlbXMuIENvbnRhY3QKK3RoZSBnbGliYyBtYWludGFpbmVycyBmb3IgYSBmaXguIEdsaWJjIDIuMS4zIGhhcyB0aGUgZml4LgorCitOb3RlIGFsc28gdGhhdCBhcGFydCBmcm9tIGVkaXRpbmcgL2V0Yy9mc3RhYiwgb3RoZXIgdGhpbmdzIHdpbGwgbmVlZAordG8gYmUgY2hhbmdlZCBpZiB5b3UgKmRvbid0KiBpbnN0YWxsIGRldmZzZC4gU29tZSBzb2Z0d2FyZSAobGlrZSB0aGUgWAorc2VydmVyKSBoYXJkLXdpcmUgZGV2aWNlIG5hbWVzIGluIHRoZWlyIHNvdXJjZS4gSXQgcmVhbGx5IGlzIG11Y2gKK2Vhc2llciB0byBpbnN0YWxsIGRldmZzZCBzbyB0aGF0IGNvbXBhdGliaWxpdHkgZW50cmllcyBhcmUgY3JlYXRlZC4KK1lvdSBjYW4gdGhlbiBzbG93bHkgbWlncmF0ZSB5b3VyIHN5c3RlbSB0byB1c2luZyB0aGUgbmV3IGRldmljZSBuYW1lcworKGZvciBleGFtcGxlLCBieSBzdGFydGluZyB3aXRoIC9ldGMvZnN0YWIpLCBhbmQgdGhlbiBsaW1pdGluZyB0aGUKK2NvbXBhdGliaWxpdHkgZW50cmllcyB0aGF0IGRldmZzZCBjcmVhdGVzLgorCitJRiBZT1UgQ09ORklHVVJFIFRPIE1PVU5UIERFVkZTIEFUIEJPT1QsIE1BS0UgU1VSRSBZT1UgSU5TVEFMTCBERVZGU0QKK0JFRk9SRSBZT1UgQk9PVCBBIERFVkZTLUVOQUJMRUQgS0VSTkVMIQorCitOb3cgdGhhdCBkZXZmcyBoYXMgZ29uZSBpbnRvIHRoZSAyLjMuNDYga2VybmVsLCBJJ20gZ2V0dGluZyBhIGxvdCBvZgorcmVwb3J0cyBiYWNrLiBNYW55IG9mIHRoZXNlIGFyZSBiZWNhdXNlIHBlb3BsZSBhcmUgdHJ5aW5nIHRvIHJ1bgord2l0aG91dCBkZXZmc2QsIGFuZCBoZW5jZSBzb21lIHRoaW5ncyBicmVhay4gUGxlYXNlIGp1c3QgcnVuIGRldmZzZCBpZgordGhpbmdzIGJyZWFrLiBJIHdhbnQgdG8gY29uY2VudHJhdGUgb24gcmVhbCBidWdzIHJhdGhlciB0aGFuCittaXNjb25maWd1cmF0aW9uIHByb2JsZW1zIGF0IHRoZSBtb21lbnQuIElmIHBlb3BsZSBhcmUgd2lsbGluZyB0byBmaXgKK2J1Z3MvZmFsc2UgYXNzdW1wdGlvbnMgaW4gb3RoZXIgY29kZSAoaS5lLiBnbGliYywgWCBzZXJ2ZXIpIGFuZCBzdWJtaXQKK3RoYXQgdG8gdGhlIHJlc3BlY3RpdmUgbWFpbnRhaW5lcnMsIHRoYXQgd291bGQgYmUgZ3JlYXQuCisKKworQWxsIHRoZSB3YXkgd2l0aCBEZXZmcworCitUaGUgZGV2ZnMga2VybmVsIHBhdGNoIGNyZWF0ZXMgYSByYXRpb25hbGlzZWQgZGV2aWNlIHRyZWUuIEFzIHN0YXRlZAorYWJvdmUsIGlmIHlvdSB3YW50IHRvIGtlZXAgdXNpbmcgdGhlIG9sZCAvZGV2IG5hbWluZyBzY2hlbWUsCit5b3UganVzdCBuZWVkIHRvIGNvbmZpZ3VyZSBkZXZmc2QgYXBwb3ByaWF0ZWx5IChzZWUgdGhlIG1hbgorcGFnZSkuIFBlb3BsZSB3aG8gcHJlZmVyIHRoZSBvbGQgbmFtZXMgY2FuIGlnbm9yZSB0aGlzIHNlY3Rpb24uIEZvcgordGhvc2Ugb2YgdXMgd2hvIGxpa2UgdGhlIHJhdGlvbmFsaXNlZCBuYW1lcyBhbmQgYW4gdW5jbHV0dGVyZWQKKy9kZXYsIHJlYWQgb24uCisKK0lmIHlvdSBkb24ndCBydW4gZGV2ZnNkLCBvciBkb24ndCBlbmFibGUgY29tcGF0aWJpbGl0eSBlbnRyeQorbWFuYWdlbWVudCwgdGhlbiB5b3Ugd2lsbCBoYXZlIHRvIGNvbmZpZ3VyZSB5b3VyIHN5c3RlbSB0byB1c2UgdGhlIG5ldworbmFtZXMuIEZvciBleGFtcGxlLCB5b3Ugd2lsbCB0aGVuIG5lZWQgdG8gZWRpdCB5b3VyCisvZXRjL2ZzdGFiIHRvIHVzZSB0aGUgbmV3IGRpc2MgbmFtaW5nIHNjaGVtZS4gSWYgeW91IHdhbnQgdG8KK2JlIGFibGUgdG8gYm9vdCBub24tZGV2ZnMga2VybmVscywgeW91IHdpbGwgbmVlZCBjb21wYXRpYmlsaXR5CitzeW1saW5rcyBpbiB0aGUgdW5kZXJseWluZyBkaXNjLWJhc2VkIC9kZXYgcG9pbnRpbmcgYmFjayB0bwordGhlIG9sZC1zdHlsZSBuYW1lcyBmb3Igd2hlbiB5b3UgYm9vdCBhIGtlcm5lbCB3aXRob3V0IGRldmZzLgorCitZb3UgY2FuIHNlbGVjdGl2ZWx5IGRlY2lkZSB3aGljaCBkZXZpY2VzIHlvdSB3YW50IGNvbXBhdGliaWxpdHkKK2VudHJpZXMgZm9yLiBGb3IgZXhhbXBsZSwgeW91IG1heSBvbmx5IHdhbnQgY29tcGF0aWJpbGl0eSBlbnRyaWVzIGZvcgorQlNEIHBzZXVkby10ZXJtaW5hbCBkZXZpY2VzIChvdGhlcndpc2UgeW91J2xsIGhhdmUgdG8gcGF0Y2ggeW91IEMKK2xpYnJhcnkgb3IgdXNlIFVuaXg5OCBwdHlzIGluc3RlYWQpLiBJdCdzIGp1c3QgYSBtYXR0ZXIgb2YgcHV0dGluZyBpbgordGhlIGNvcnJlY3QgcmVndWxhciBleHByZXNzaW9uIGludG8gL2Rldi9kZXZmc2QuY29uZi4KKworVGhlcmUgYXJlIG90aGVyIGNob2ljZXMgb2YgbmFtaW5nIHNjaGVtZXMgdGhhdCB5b3UgbWF5IHByZWZlci4gRm9yCitleGFtcGxlLCBJIGRvbid0IHVzZSB0aGUga2VybmVsLXN1cHBsaWVkCituYW1lcywgYmVjYXVzZSB0aGV5IGFyZSB0b28gdmVyYm9zZS4gQSBjb21tb24gbWlzY29uY2VwdGlvbiBpcwordGhhdCB0aGUga2VybmVsLXN1cHBsaWVkIG5hbWVzIGFyZSBtZWFudCB0byBiZSB1c2VkIGRpcmVjdGx5IGluCitjb25maWd1cmF0aW9uIGZpbGVzLiBUaGlzIGlzIG5vdCB0aGUgY2FzZS4gVGhleSBhcmUgZGVzaWduZWQgdG8KK3JlZmxlY3QgdGhlIGxheW91dCBvZiB0aGUgZGV2aWNlcyBhdHRhY2hlZCBhbmQgdG8gcHJvdmlkZSBlYXN5CitjbGFzc2lmaWNhdGlvbi4KKworSWYgeW91IGxpa2UgdGhlIGtlcm5lbC1zdXBwbGllZCBuYW1lcywgdGhhdCdzIGZpbmUuIElmIHlvdSBkb24ndCB0aGVuCit5b3Ugc2hvdWxkIGJlIHVzaW5nIGRldmZzZCB0byBjb25zdHJ1Y3QgYSBuYW1lc3BhY2UgbW9yZSB0byB5b3VyCitsaWtpbmcuIERldmZzZCBoYXMgYnVpbHQtaW4gY29kZSB0byBjb25zdHJ1Y3QgYQorbmFtZXNwYWNlIHRoYXQgaXMgYm90aCBsb2dpY2FsIGFuZCBlYXN5IHRvCittYW5hZ2UuIEluIGVzc2VuY2UsIGl0IGNyZWF0ZXMgYSBjb252ZW5pZW50IGFiYnJldmlhdGlvbiBvZiB0aGUKK2tlcm5lbC1zdXBwbGllZCBuYW1lc3BhY2UuCisKK1lvdSBhcmUgb2YgY291cnNlIGZyZWUgdG8gYnVpbGQgeW91ciBvd24gbmFtZXNwYWNlLiBEZXZmc2QgaGFzIGFsbCB0aGUKK2luZnJhc3RydWN0dXJlIHJlcXVpcmVkIHRvIG1ha2UgdGhpcyBlYXN5IGZvciB5b3UuIEFsbCB5b3UgbmVlZCBkbyBpcword3JpdGUgYSBzY3JpcHQuIFlvdSBjYW4gZXZlbiB3cml0ZSBzb21lIEMgY29kZSBhbmQgZGV2ZnNkIGNhbiBsb2FkIHRoZQorc2hhcmVkIG9iamVjdCBhcyBhIGNhbGxhYmxlIGV4dGVuc2lvbi4KKworCitPdGhlciBJc3N1ZXMKKworVGhlIGluaXQgcHJvZ3JhbW1lCitBbm90aGVyIHRoaW5nIHRvIHRha2Ugbm90ZSBvZiBpcyB3aGV0aGVyIHlvdXIgaW5pdCBwcm9ncmFtbWUKK2NyZWF0ZXMgYSBVbml4IHNvY2tldCAvZGV2L3RlbGluaXQuIFNvbWUgdmVyc2lvbnMgb2YgaW5pdAorY3JlYXRlIC9kZXYvdGVsaW5pdCBzbyB0aGF0IHRoZSB0ZWxpbml0IHByb2dyYW1tZSBjYW4KK2NvbW11bmljYXRlIHdpdGggdGhlIGluaXQgcHJvY2Vzcy4gSWYgeW91IGhhdmUgc3VjaCBhIHN5c3RlbSB5b3UgbmVlZAordG8gbWFrZSBzdXJlIHRoYXQgZGV2ZnMgaXMgbW91bnRlZCBvdmVyIC9kZXYgKmJlZm9yZSogaW5pdAorc3RhcnRzLiBJbiBvdGhlciB3b3JkcywgeW91IGNhbid0IGxlYXZlIHRoZSBtb3VudGluZyBvZiBkZXZmcyB0bworL2V0Yy9yYywgc2luY2UgdGhpcyBpcyBleGVjdXRlZCBhZnRlciBpbml0LiBPdGhlcgordmVyc2lvbnMgb2YgaW5pdCByZXF1aXJlIGEgbmFtZWQgcGlwZSAvZGV2L2luaXRjdGwKK3doaWNoIG11c3QgZXhpc3QgKmJlZm9yZSogaW5pdCBzdGFydHMuIE9uY2UgYWdhaW4sIHlvdSBuZWVkIHRvCittb3VudCBkZXZmcyBhbmQgdGhlbiBjcmVhdGUgdGhlIG5hbWVkIHBpcGUgKmJlZm9yZSogaW5pdAorc3RhcnRzLgorCitUaGUgZGVmYXVsdCBiZWhhdmlvdXIgbm93IGlzIG5vdCB0byBtb3VudCBkZXZmcyBvbnRvIC9kZXYgYXQKK2Jvb3QgdGltZSBmb3IgMi4zLnggYW5kIGxhdGVyIGtlcm5lbHMuIFlvdSBjYW4gY29ycmVjdCB0aGlzIHdpdGggdGhlCisiZGV2ZnM9bW91bnQiIGJvb3Qgb3B0aW9uLiBUaGlzIHNvbHZlcyBhbnkgcHJvYmxlbXMgd2l0aCBpbml0LAorYW5kIGFsc28gcHJldmVudHMgdGhlIGRyZWFkZWQ6CisKK0Nhbm5vdCBvcGVuIGluaXRpYWwgY29uc29sZQorCittZXNzYWdlLiBGb3IgMi4yLngga2VybmVscyB3aGVyZSB5b3UgbmVlZCB0byBhcHBseSB0aGUgZGV2ZnMgcGF0Y2gsCit0aGUgZGVmYXVsdCBpcyB0byBtb3VudC4KKworSWYgeW91IGhhdmUgYXV0b21hdGljIG1vdW50aW5nIG9mIGRldmZzIG9udG8gL2RldiB0aGVuIHlvdQorbWF5IG5lZWQgdG8gY3JlYXRlIC9kZXYvaW5pdGN0bCBpbiB5b3VyIGJvb3Qgc2NyaXB0cy4gVGhlCitmb2xsb3dpbmcgbGluZXMgc2hvdWxkIHN1ZmZpY2U6CisKK21rbm9kIC9kZXYvaW5pdGN0bCBwCitraWxsIC1TSUdVU1IxIDEgICAgICAgIyB0ZWxsIGluaXQgdGhhdCAvZGV2L2luaXRjdGwgbm93IGV4aXN0cworCitBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUga2VybmVsIHRvIG1vdW50IGRldmZzIG9udG8KKy9kZXYgdGhlbiB5b3UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIGlzIGEKK2d1aWRlbGluZSBmb3IgaG93IHRvIGdldCBhcm91bmQgL2Rldi9pbml0Y3RsIHByb2JsZW1zOgorCisjIGNkIC9zYmluCisjIG12IGluaXQgaW5pdC5yZWFsCisjIGNhdCA+IGluaXQKKyMhIC9iaW4vc2gKK21vdW50IC1uIC10IGRldmZzIG5vbmUgL2RldgorbWtub2QgL2Rldi9pbml0Y3RsIHAKK2V4ZWMgL3NiaW4vaW5pdC5yZWFsICQqCitbY29udHJvbC1EXQorIyBjaG1vZCBhK3ggaW5pdAorCitOb3RlIHRoYXQgbmV3ZXIgdmVyc2lvbnMgb2YgaW5pdCBjcmVhdGUgL2Rldi9pbml0Y3RsCithdXRvbWF0aWNhbGx5LCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgorCitNb2R1bGUgYXV0b2xvYWRpbmcKK1lvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIGRldmZzZCB0byBlbmFibGUgbW9kdWxlCithdXRvbG9hZGluZy4gVGhlIGZvbGxvd2luZyBsaW5lcyBzaG91bGQgYmUgcGxhY2VkIGluIHlvdXIKKy9ldGMvZGV2ZnNkLmNvbmYgZmlsZToKKworTE9PS1VQCS4qCQlNT0RMT0FECisKKworQXMgb2YgZGV2ZnNkLXYxLjMuMTAsIGEgZ2VuZXJpYyAvZXRjL21vZHVsZXMuZGV2ZnMKK2NvbmZpZ3VyYXRpb24gZmlsZSBpcyBpbnN0YWxsZWQsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1PRExPQUQKK2FjdGlvbi4gVGhpcyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCBjb25maWd1cmF0aW9ucy4gSWYgeW91CityZXF1aXJlIGZ1cnRoZXIgY29uZmlndXJhdGlvbiwgZWRpdCB5b3VyIC9ldGMvbW9kdWxlcy5jb25mCitmaWxlLiBUaGUgd2F5IG1vZHVsZSBhdXRvbG9hZGluZyB3b3JrIHdpdGggZGV2ZnMgaXM6CisKKworYSBwcm9jZXNzIGF0dGVtcHRzIHRvIGxvb2t1cCBhIGRldmljZSBub2RlIChlLmcuIC9kZXYvZnJlZCkKKworCitpZiB0aGF0IGRldmljZSBub2RlIGRvZXMgbm90IGV4aXN0LCB0aGUgZnVsbCBwYXRobmFtZSBpcyBwYXNzZWQgdG8KK2RldmZzZCBhcyBhIHN0cmluZworCisKK2RldmZzZCB3aWxsIHBhc3MgdGhlIHN0cmluZyB0byB0aGUgbW9kcHJvYmUgcHJvZ3JhbW1lIChwcm92aWRlZCB0aGUKK2NvbmZpZ3VyYXRpb24gbGluZSBzaG93biBhYm92ZSBpcyBwcmVzZW50KSwgYW5kIHNwZWNpZmllcyB0aGF0CisvZXRjL21vZHVsZXMuZGV2ZnMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorCisKKy9ldGMvbW9kdWxlcy5kZXZmcyBpbmNsdWRlcyAvZXRjL21vZHVsZXMuY29uZiB0bworYWNjZXNzIGxvY2FsIGNvbmZpZ3VyYXRpb25zCisKK21vZHByb2JlIHdpbGwgc2VhcmNoIGl0J3MgY29uZmlndXJhdGlvbiBmaWxlcywgbG9va2luZyBmb3IgYW4gYWxpYXMKK3RoYXQgdHJhbnNsYXRlcyB0aGUgcGF0aG5hbWUgaW50byBhIG1vZHVsZSBuYW1lCisKKwordGhlIHRyYW5zbGF0ZWQgcGF0aG5hbWUgaXMgdGhlbiB1c2VkIHRvIGxvYWQgdGhlIG1vZHVsZS4KKworCitJZiB5b3Ugd2FudGVkIGEgbG9va3VwIG9mIC9kZXYvZnJlZCB0byBsb2FkIHRoZQorbXltb2QgbW9kdWxlLCB5b3Ugd291bGQgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24KK2xpbmUgaW4gL2V0Yy9tb2R1bGVzLmNvbmY6CisKK2FsaWFzICAgIC9kZXYvZnJlZCAgICBteW1vZAorCitUaGUgL2V0Yy9tb2R1bGVzLmRldmZzIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm92aWRlcyBtYW55IHN1Y2gKK2FsaWFzZXMgZm9yIHN0YW5kYXJkIGRldmljZSBuYW1lcy4gSWYgeW91IGxvb2sgY2xvc2VseSBhdCB0aGlzIGZpbGUsCit5b3Ugd2lsbCBub3RlIHRoYXQgc29tZSBtb2R1bGVzIHJlcXVpcmUgbXVsdGlwbGUgYWxpYXMgY29uZmlndXJhdGlvbgorbGluZXMuIFRoaXMgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBtb2R1bGUgYXV0b2xvYWRpbmcgZm9yIG9sZCBhbmQgbmV3CitkZXZpY2UgbmFtZXMuCisKK01vdW50aW5nIHJvb3Qgb2ZmIGEgZGV2ZnMgZGV2aWNlCitJZiB5b3Ugd2lzaCB0byBtb3VudCByb290IG9mZiBhIGRldmZzIGRldmljZSB3aGVuIHlvdSBwYXNzIHRoZQorImRldmZzPW9ubHkiIGJvb3Qgb3B0aW9uLCB0aGVuIHlvdSBuZWVkIHRvIHBhc3MgaW4gdGhlCisicm9vdD08ZGV2aWNlPiIgb3B0aW9uIHRvIHRoZSBrZXJuZWwgd2hlbiBib290aW5nLiBJZiB5b3UgdXNlCitMSUxPLCB0aGVuIHlvdSBtdXN0IGhhdmUgdGhpcyBpbiBsaWxvLmNvbmY6CisKK2FwcGVuZCA9ICJyb290PTxkZXZpY2U+IgorCitTdXJwcmlzZWQ/IFllcCwgc28gd2FzIEkuIEl0IHR1cm5zIG91dCBpZiB5b3UgaGF2ZSAoYXMgbW9zdCBwZW9wbGUKK2RvKToKKworcm9vdCA9IDxkZXZpY2U+CisKKwordGhlbiBMSUxPIHdpbGwgZGV0ZXJtaW5lIHRoZSBkZXZpY2UgbnVtYmVyIG9mIDxkZXZpY2U+IGFuZCB3aWxsCit3cml0ZSB0aGF0IGRldmljZSBudW1iZXIgaW50byBhIHNwZWNpYWwgcGxhY2UgaW4gdGhlIGtlcm5lbCBpbWFnZQorYmVmb3JlIHN0YXJ0aW5nIHRoZSBrZXJuZWwsIGFuZCB0aGUga2VybmVsIHdpbGwgdXNlIHRoYXQgZGV2aWNlIG51bWJlcgordG8gbW91bnQgdGhlIHJvb3QgZmlsZXN5c3RlbS4gU28sIHVzaW5nIHRoZSAiYXBwZW5kIiB2YXJpZXR5IGVuc3VyZXMKK3RoYXQgTElMTyBwYXNzZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBkZXZpY2UgYXMgYSBzdHJpbmcsIHdoaWNoIGRldmZzCitjYW4gdGhlbiB1c2UuCisKK05vdGUgdGhhdCB0aGlzIGlzbid0IGFuIGlzc3VlIGlmIHlvdSBkb24ndCBwYXNzICJkZXZmcz1vbmx5Ii4KKworVFRZIGlzc3VlcworVGhlIHR0eW5hbWUoMykgZnVuY3Rpb24gaW4gc29tZSB2ZXJzaW9ucyBvZiB0aGUgQyBsaWJyYXJ5IG1ha2VzCitmYWxzZSBhc3N1bXB0aW9ucyBhYm91dCBkZXZpY2UgZW50cmllcyB3aGljaCBhcmUgc3ltYm9saWMgbGlua3MuICBUaGUKK3R0eSgxKSBwcm9ncmFtbWUgaXMgb25lIHRoYXQgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uLiAgSSd2ZQord3JpdHRlbiBhIHBhdGNoIHRvIGxpYmMgNS40LjQzIHdoaWNoIGZpeGVzIHRoaXMuIFRoaXMgaGFzIGJlZW4KK2luY2x1ZGVkIGluIGxpYmMgNS40LjQ0IGFuZCBhIHNpbWlsYXIgZml4IGlzIGluIGdsaWJjIDIuMS4zLgorCisKK0tlcm5lbCBOYW1pbmcgU2NoZW1lCisKK1RoZSBrZXJuZWwgcHJvdmlkZXMgYSBkZWZhdWx0IG5hbWluZyBzY2hlbWUuIFRoaXMgc2NoZW1lIGlzIGRlc2lnbmVkCit0byBtYWtlIGl0IGVhc3kgdG8gc2VhcmNoIGZvciBzcGVjaWZpYyBkZXZpY2VzIG9yIGRldmljZSB0eXBlcywgYW5kIHRvCit2aWV3IHRoZSBhdmFpbGFibGUgZGV2aWNlcy4gU29tZSBkZXZpY2UgdHlwZXMgKHN1Y2ggYXMgaGFyZCBkaXNjcyksCitoYXZlIGEgZGlyZWN0b3J5IG9mIGVudHJpZXMsIG1ha2luZyBpdCBlYXN5IHRvIHNlZSB3aGF0IGRldmljZXMgb2YKK3RoYXQgY2xhc3MgYXJlIGF2YWlsYWJsZS4gT2Z0ZW4sIHRoZSBlbnRyaWVzIGFyZSBzeW1ib2xpYyBsaW5rcyBpbnRvIGEKK2RpcmVjdG9yeSB0cmVlIHRoYXQgcmVmbGVjdHMgdGhlIHRvcG9sb2d5IG9mIGF2YWlsYWJsZSBkZXZpY2VzLiBUaGUKK3RvcG9sb2dpY2FsIHRyZWUgaXMgdXNlZnVsIGZvciBmaW5kaW5nIGhvdyB5b3VyIGRldmljZXMgYXJlIGFycmFuZ2VkLgorCitCZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIG5hbWluZyBzY2hlbWVzIGZvciB0aGUgbW9zdCBjb21tb24gZHJpdmVycy4gQQorbGlzdCBvZiByZXNlcnZlZCBkZXZpY2UgbmFtZXMgaXMKK2F2YWlsYWJsZSBmb3IgcmVmZXJlbmNlLiBQbGVhc2Ugc2VuZCBlbWFpbCB0bworcmdvb2NoQGF0bmYuY3Npcm8uYXUgdG8gb2J0YWluIGFuIGFsbG9jYXRpb24uIFBsZWFzZSBiZQorcGF0aWVudCAodGhlIG1haW50YWluZXIgaXMgYnVzeSkuIEFuIGFsdGVybmF0aXZlIG5hbWUgbWF5IGJlIGFsbG9jYXRlZAoraW5zdGVhZCBvZiB0aGUgcmVxdWVzdGVkIG5hbWUsIGF0IHRoZSBkaXNjcmV0aW9uIG9mIHRoZSBtYWludGFpbmVyLgorCitEaXNjIERldmljZXMKKworQWxsIGRpc2NzLCB3aGV0aGVyIFNDU0ksIElERSBvciB3aGF0ZXZlciwgYXJlIHBsYWNlZCB1bmRlciB0aGUKKy9kZXYvZGlzY3MgaGllcmFyY2h5OgorCisJL2Rldi9kaXNjcy9kaXNjMAlmaXJzdCBkaXNjCisJL2Rldi9kaXNjcy9kaXNjMQlzZWNvbmQgZGlzYworCisKK0VhY2ggb2YgdGhlc2UgZW50cmllcyBpcyBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIGRpcmVjdG9yeSBmb3IgdGhhdAorZGV2aWNlLiBUaGUgZGV2aWNlIGRpcmVjdG9yeSBjb250YWluczoKKworCWRpc2MJZm9yIHRoZSB3aG9sZSBkaXNjCisJcGFydCoJZm9yIGluZGl2aWR1YWwgcGFydGl0aW9ucworCisKK0NELVJPTSBEZXZpY2VzCisKK0FsbCBDRC1ST01zLCB3aGV0aGVyIFNDU0ksIElERSBvciB3aGF0ZXZlciwgYXJlIHBsYWNlZCB1bmRlciB0aGUKKy9kZXYvY2Ryb21zIGhpZXJhcmNoeToKKworCS9kZXYvY2Ryb21zL2Nkcm9tMAlmaXJzdCBDRC1ST00KKwkvZGV2L2Nkcm9tcy9jZHJvbTEJc2Vjb25kIENELVJPTQorCisKK0VhY2ggb2YgdGhlc2UgZW50cmllcyBpcyBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIHJlYWwgZGV2aWNlIGVudHJ5IGZvcgordGhhdCBkZXZpY2UuCisKK1RhcGUgRGV2aWNlcworCitBbGwgdGFwZXMsIHdoZXRoZXIgU0NTSSwgSURFIG9yIHdoYXRldmVyLCBhcmUgcGxhY2VkIHVuZGVyIHRoZQorL2Rldi90YXBlcyBoaWVyYXJjaHk6CisKKwkvZGV2L3RhcGVzL3RhcGUwCWZpcnN0IHRhcGUKKwkvZGV2L3RhcGVzL3RhcGUxCXNlY29uZCB0YXBlCisKKworRWFjaCBvZiB0aGVzZSBlbnRyaWVzIGlzIGEgc3ltYm9saWMgbGluayB0byB0aGUgZGlyZWN0b3J5IGZvciB0aGF0CitkZXZpY2UuIFRoZSBkZXZpY2UgZGlyZWN0b3J5IGNvbnRhaW5zOgorCisJbXQJCQlmb3IgbW9kZSAwCisJbXRsCQkJZm9yIG1vZGUgMQorCW10bQkJCWZvciBtb2RlIDIKKwltdGEJCQlmb3IgbW9kZSAzCisJbXRuCQkJZm9yIG1vZGUgMCwgbm8gcmV3aW5kCisJbXRsbgkJCWZvciBtb2RlIDEsIG5vIHJld2luZAorCW10bW4JCQlmb3IgbW9kZSAyLCBubyByZXdpbmQKKwltdGFuCQkJZm9yIG1vZGUgMywgbm8gcmV3aW5kCisKKworU0NTSSBEZXZpY2VzCisKK1RvIHVuaXF1ZWx5IGlkZW50aWZ5IGFueSBTQ1NJIGRldmljZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nCitpbmZvcm1hdGlvbjoKKworICBjb250cm9sbGVyCShob3N0IGFkYXB0ZXIpCisgIGJ1cwkJKFNDU0kgY2hhbm5lbCkKKyAgdGFyZ2V0CShTQ1NJIElEKQorICB1bml0CQkoTG9naWNhbCBVbml0IE51bWJlcikKKworCitBbGwgU0NTSSBkZXZpY2VzIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi9zY3NpIChhc3N1bWluZyBkZXZmcworaXMgbW91bnRlZCBvbiAvZGV2KS4gSGVuY2UsIGEgU0NTSSBkZXZpY2Ugd2l0aCB0aGUgZm9sbG93aW5nCitwYXJhbWV0ZXJzOiBjPTEsYj0yLHQ9Myx1PTQgd291bGQgYXBwZWFyIGFzOgorCisJL2Rldi9zY3NpL2hvc3QxL2J1czIvdGFyZ2V0My9sdW40CWRldmljZSBkaXJlY3RvcnkKKworCitJbnNpZGUgdGhpcyBkaXJlY3RvcnksIGEgbnVtYmVyIG9mIGRldmljZSBlbnRyaWVzIG1heSBiZSBjcmVhdGVkLAorZGVwZW5kaW5nIG9uIHdoaWNoIFNDU0kgZGV2aWNlLXR5cGUgZHJpdmVycyB3ZXJlIGluc3RhbGxlZC4KKworU2VlIHRoZSBzZWN0aW9uIG9uIHRoZSBkaXNjIG5hbWluZyBzY2hlbWUgdG8gc2VlIHdoYXQgZW50cmllcyB0aGUgU0NTSQorZGlzYyBkcml2ZXIgY3JlYXRlcy4KKworU2VlIHRoZSBzZWN0aW9uIG9uIHRoZSB0YXBlIG5hbWluZyBzY2hlbWUgdG8gc2VlIHdoYXQgZW50cmllcyB0aGUgU0NTSQordGFwZSBkcml2ZXIgY3JlYXRlcy4KKworVGhlIFNDU0kgQ0QtUk9NIGRyaXZlciBjcmVhdGVzOgorCisJY2QKKworCitUaGUgU0NTSSBnZW5lcmljIGRyaXZlciBjcmVhdGVzOgorCisJZ2VuZXJpYworCisKK0lERSBEZXZpY2VzCisKK1RvIHVuaXF1ZWx5IGlkZW50aWZ5IGFueSBJREUgZGV2aWNlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcKK2luZm9ybWF0aW9uOgorCisgIGNvbnRyb2xsZXIKKyAgYnVzCQkoYWthLiBwcmltYXJ5L3NlY29uZGFyeSkKKyAgdGFyZ2V0CShha2EuIG1hc3Rlci9zbGF2ZSkKKyAgdW5pdAorCisKK0FsbCBJREUgZGV2aWNlcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYvaWRlLCBhbmQgdXNlcyBhIHNpbWlsYXIKK25hbWluZyBzY2hlbWUgdG8gdGhlIFNDU0kgc3Vic3lzdGVtLgorCitYVCBIYXJkIERpc2NzCisKK0FsbCBYVCBkaXNjcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYveGQuIFRoZSBmaXJzdCBYVCBkaXNjIGhhcwordGhlIGRpcmVjdG9yeSAvZGV2L3hkL2Rpc2MwLgorCitUVFkgZGV2aWNlcworCitUaGUgdHR5IGRldmljZXMgbm93IGFwcGVhciBhczoKKworICBOZXcgbmFtZSAgICAgICAgICAgICAgICAgICBPbGQtbmFtZSAgICAgICAgICAgICAgICAgICBEZXZpY2UgVHlwZQorICAtLS0tLS0tLSAgICAgICAgICAgICAgICAgICAtLS0tLS0tLSAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLQorICAvZGV2L3R0cy97MCwxLC4uLn0gICAgICAgICAvZGV2L3R0eVN7MCwxLC4uLn0gICAgICAgICBTZXJpYWwgcG9ydHMKKyAgL2Rldi9jdWEvezAsMSwuLi59ICAgICAgICAgL2Rldi9jdWF7MCwxLC4uLn0gICAgICAgICAgQ2FsbCBvdXQgZGV2aWNlcworICAvZGV2L3ZjLzAgICAgICAgICAgICAgICAgICAvZGV2L3R0eSAgICAgICAgICAgICAgICAgICBDdXJyZW50IHZpcnR1YWwgY29uc29sZQorICAvZGV2L3ZjL3sxLDIsLi4ufSAgICAgICAgICAvZGV2L3R0eXsxLi4uNjN9ICAgICAgICAgICBWaXJ0dWFsIGNvbnNvbGVzCisgIC9kZXYvdmNjL3swLDEsLi4ufSAgICAgICAgIC9kZXYvdmNzezEuLi42M30gICAgICAgICAgIFZpcnR1YWwgY29uc29sZXMKKyAgL2Rldi9wdHkvbXswLDEsLi4ufSAgICAgICAgL2Rldi9wdHlwPz8gICAgICAgICAgICAgICAgUFRZIG1hc3RlcnMKKyAgL2Rldi9wdHkvc3swLDEsLi4ufSAgICAgICAgL2Rldi90dHlwPz8gICAgICAgICAgICAgICAgUFRZIHNsYXZlcworCisKK1JBTURJU0NTCisKK1RoZSBSQU1ESVNDUyBhcmUgcGxhY2VkIGluIHRoZWlyIG93biBkaXJlY3RvcnksIGFuZCBhcmUgbmFtZWQgdGh1czoKKworICAvZGV2L3JkL3swLDEsMiwuLi59CisKKworTWV0YSBEZXZpY2VzCisKK1RoZSBtZXRhIGRldmljZXMgYXJlIHBsYWNlZCBpbiB0aGVpciBvd24gZGlyZWN0b3J5LCBhbmQgYXJlIG5hbWVkCit0aHVzOgorCisgIC9kZXYvbWQvezAsMSwyLC4uLn0KKworCitGbG9wcHkgZGlzY3MKKworRmxvcHB5IGRpc2NzIGFyZSBwbGFjZWQgaW4gdGhlIC9kZXYvZmxvcHB5IGRpcmVjdG9yeS4KKworTG9vcCBkZXZpY2VzCisKK0xvb3AgZGV2aWNlcyBhcmUgcGxhY2VkIGluIHRoZSAvZGV2L2xvb3AgZGlyZWN0b3J5LgorCitTb3VuZCBkZXZpY2VzCisKK1NvdW5kIGRldmljZXMgYXJlIHBsYWNlZCBpbiB0aGUgL2Rldi9zb3VuZCBkaXJlY3RvcnkKKyhhdWRpbywgc2VxdWVuY2VyLCAuLi4pLgorCisKK0RldmZzZCBOYW1pbmcgU2NoZW1lCisKK0RldmZzZCBwcm92aWRlcyBhIG5hbWluZyBzY2hlbWUgd2hpY2ggaXMgYSBjb252ZW5pZW50IGFiYnJldmlhdGlvbiBvZgordGhlIGtlcm5lbC1zdXBwbGllZCBuYW1lc3BhY2UuIEluIHNvbWUKK2Nhc2VzLCB0aGUga2VybmVsLXN1cHBsaWVkIG5hbWluZyBzY2hlbWUgaXMgcXVpdGUgY29udmVuaWVudCwgc28KK2RldmZzZCBkb2VzIG5vdCBwcm92aWRlIGFub3RoZXIgbmFtaW5nIHNjaGVtZS4gVGhlIGNvbnZlbmllbmNlIG5hbWVzCit0aGF0IGRldmZzZCBjcmVhdGVzIGFyZSBpbiBmYWN0IHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcmlnaW5hbCBkZXZmcwora2VybmVsIHBhdGNoIGNyZWF0ZWQgKGJlZm9yZSBMaW51cyBtYW5kYXRlZCB0aGUgQmlnIE5hbWUKK0NoYW5nZSkuIFRoZXNlIGFyZSByZWZlcnJlZCB0byBhcyAibmV3IGNvbXBhdGliaWxpdHkgZW50cmllcyIuCisKK0luIG9yZGVyIHRvIGNvbmZpZ3VyZSBkZXZmc2QgdG8gY3JlYXRlIHRoZXNlIGNvbnZlbmllbmNlIG5hbWVzLCB0aGUKK2ZvbGxvd2luZyBsaW5lcyBzaG91bGQgYmUgcGxhY2VkIGluIHlvdXIgL2V0Yy9kZXZmc2QuY29uZjoKKworUkVHSVNURVIJLioJCU1LTkVXQ09NUEFUCitVTlJFR0lTVEVSCS4qCQlSTU5FV0NPTVBBVAorCitUaGlzIHdpbGwgY2F1c2UgZGV2ZnNkIHRvIGNyZWF0ZSAoYW5kIGRlc3Ryb3kpIHN5bWJvbGljIGxpbmtzIHdoaWNoCitwb2ludCB0byB0aGUga2VybmVsLXN1cHBsaWVkIG5hbWVzLgorCitTQ1NJIEhhcmQgRGlzY3MKKworQWxsIFNDU0kgZGlzY3MgYXJlIHBsYWNlZCB1bmRlciAvZGV2L3NkIChhc3N1bWluZyBkZXZmcyBpcworbW91bnRlZCBvbiAvZGV2KS4gSGVuY2UsIGEgU0NTSSBkaXNjIHdpdGggdGhlIGZvbGxvd2luZworcGFyYW1ldGVyczogYz0xLGI9Mix0PTMsdT00IHdvdWxkIGFwcGVhciBhczoKKworCS9kZXYvc2QvYzFiMnQzdTQJZm9yIHRoZSB3aG9sZSBkaXNjCisJL2Rldi9zZC9jMWIydDN1NHA1CWZvciB0aGUgNXRoIHBhcnRpdGlvbgorCS9kZXYvc2QvYzFiMnQzdTRwNXM2CWZvciB0aGUgNnRoIHNsaWNlIGluIHRoZSA1dGggcGFydGl0aW9uCisKKworU0NTSSBUYXBlcworCitBbGwgU0NTSSB0YXBlcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYvc3QuIEEgc2ltaWxhciBuYW1pbmcKK3NjaGVtZSBpcyB1c2VkIGFzIGZvciBTQ1NJIGRpc2NzLiBBIFNDU0kgdGFwZSB3aXRoIHRoZQorcGFyYW1ldGVyczpjPTEsYj0yLHQ9Myx1PTQgd291bGQgYXBwZWFyIGFzOgorCisJL2Rldi9zdC9jMWIydDN1NG0wCWZvciBtb2RlIDAKKwkvZGV2L3N0L2MxYjJ0M3U0bTEJZm9yIG1vZGUgMQorCS9kZXYvc3QvYzFiMnQzdTRtMglmb3IgbW9kZSAyCisJL2Rldi9zdC9jMWIydDN1NG0zCWZvciBtb2RlIDMKKwkvZGV2L3N0L2MxYjJ0M3U0bTBuCWZvciBtb2RlIDAsIG5vIHJld2luZAorCS9kZXYvc3QvYzFiMnQzdTRtMW4JZm9yIG1vZGUgMSwgbm8gcmV3aW5kCisJL2Rldi9zdC9jMWIydDN1NG0ybglmb3IgbW9kZSAyLCBubyByZXdpbmQKKwkvZGV2L3N0L2MxYjJ0M3U0bTNuCWZvciBtb2RlIDMsIG5vIHJld2luZAorCisKK1NDU0kgQ0QtUk9NcworCitBbGwgU0NTSSBDRC1ST01zIGFyZSBwbGFjZWQgdW5kZXIgL2Rldi9zci4gQSBzaW1pbGFyIG5hbWluZworc2NoZW1lIGlzIHVzZWQgYXMgZm9yIFNDU0kgZGlzY3MuIEEgU0NTSSBDRC1ST00gd2l0aCB0aGUKK3BhcmFtZXRlcnM6Yz0xLGI9Mix0PTMsdT00IHdvdWxkIGFwcGVhciBhczoKKworCS9kZXYvc3IvYzFiMnQzdTQKKworCitTQ1NJIEdlbmVyaWMgRGV2aWNlcworCitUaGUgZ2VuZXJpYyAoYWthLiByYXcpIGludGVyZmFjZSBmb3IgYWxsIFNDU0kgZGV2aWNlcyBhcmUgcGxhY2VkIHVuZGVyCisvZGV2L3NnLiBBIHNpbWlsYXIgbmFtaW5nIHNjaGVtZSBpcyB1c2VkIGFzIGZvciBTQ1NJIGRpc2NzLiBBCitTQ1NJIGdlbmVyaWMgZGV2aWNlIHdpdGggdGhlIHBhcmFtZXRlcnM6Yz0xLGI9Mix0PTMsdT00IHdvdWxkIGFwcGVhcgorYXM6CisKKwkvZGV2L3NnL2MxYjJ0M3U0CisKKworSURFIEhhcmQgRGlzY3MKKworQWxsIElERSBkaXNjcyBhcmUgcGxhY2VkIHVuZGVyIC9kZXYvaWRlL2hkLCB1c2luZyBhIHNpbWlsYXIKK2NvbnZlbnRpb24gdG8gU0NTSSBkaXNjcy4gVGhlIGZvbGxvd2luZyBtYXBwaW5ncyBleGlzdCBiZXR3ZWVuIHRoZSBuZXcKK2FuZCB0aGUgb2xkIG5hbWVzOgorCisJL2Rldi9oZGEJL2Rldi9pZGUvaGQvYzBiMHQwdTAKKwkvZGV2L2hkYgkvZGV2L2lkZS9oZC9jMGIwdDF1MAorCS9kZXYvaGRjCS9kZXYvaWRlL2hkL2MwYjF0MHUwCisJL2Rldi9oZGQJL2Rldi9pZGUvaGQvYzBiMXQxdTAKKworCitJREUgVGFwZXMKKworQSBzaW1pbGFyIG5hbWluZyBzY2hlbWUgaXMgdXNlZCBhcyBmb3IgSURFIGRpc2NzLiBUaGUgZW50cmllcyB3aWxsCithcHBlYXIgaW4gdGhlIC9kZXYvaWRlL210IGRpcmVjdG9yeS4KKworSURFIENELVJPTQorCitBIHNpbWlsYXIgbmFtaW5nIHNjaGVtZSBpcyB1c2VkIGFzIGZvciBJREUgZGlzY3MuIFRoZSBlbnRyaWVzIHdpbGwKK2FwcGVhciBpbiB0aGUgL2Rldi9pZGUvY2QgZGlyZWN0b3J5LgorCitJREUgRmxvcHBpZXMKKworQSBzaW1pbGFyIG5hbWluZyBzY2hlbWUgaXMgdXNlZCBhcyBmb3IgSURFIGRpc2NzLiBUaGUgZW50cmllcyB3aWxsCithcHBlYXIgaW4gdGhlIC9kZXYvaWRlL2ZkIGRpcmVjdG9yeS4KKworWFQgSGFyZCBEaXNjcworCitBbGwgWFQgZGlzY3MgYXJlIHBsYWNlZCB1bmRlciAvZGV2L3hkLiBUaGUgZmlyc3QgWFQgZGlzYword291bGQgYXBwZWFyIGFzIC9kZXYveGQvYzB0MC4KKworCitPbGQgQ29tcGF0aWJpbGl0eSBOYW1lcworCitUaGUgb2xkIGNvbXBhdGliaWxpdHkgbmFtZXMgYXJlIHRoZSBsZWdhY3kgZGV2aWNlIG5hbWVzLCBzdWNoIGFzCisvZGV2L2hkYSwgL2Rldi9zZGEsIC9kZXYvcnRjIGFuZCBzbyBvbi4KK0RldmZzZCBjYW4gYmUgY29uZmlndXJlZCB0byBjcmVhdGUgY29tcGF0aWJpbGl0eSBzeW1saW5rcyBzbyB0aGF0IHlvdQorbWF5IGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkIG5hbWVzIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc28KK3RoYXQgb2xkIGFwcGxpY2F0aW9ucyB3aWxsIGNvbnRpbnVlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KKworSW4gb3JkZXIgdG8gY29uZmlndXJlIGRldmZzZCB0byBjcmVhdGUgdGhlc2UgbGVnYWN5IG5hbWVzLCB0aGUKK2ZvbGxvd2luZyBsaW5lcyBzaG91bGQgYmUgcGxhY2VkIGluIHlvdXIgL2V0Yy9kZXZmc2QuY29uZjoKKworUkVHSVNURVIJLioJCU1LT0xEQ09NUEFUCitVTlJFR0lTVEVSCS4qCQlSTU9MRENPTVBBVAorCitUaGlzIHdpbGwgY2F1c2UgZGV2ZnNkIHRvIGNyZWF0ZSAoYW5kIGRlc3Ryb3kpIHN5bWJvbGljIGxpbmtzIHdoaWNoCitwb2ludCB0byB0aGUga2VybmVsLXN1cHBsaWVkIG5hbWVzLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRGV2aWNlIGRyaXZlcnMgY3VycmVudGx5IHBvcnRlZAorCistIEFsbCBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlciBkZXZpY2VzIHN1cHBvcnQgZGV2ZnMgKHRoaXMgaXMgZG9uZQorICB0cmFuc3BhcmVudGx5IHRocm91Z2ggbWlzY19yZWdpc3RlcigpKQorCistIFNDU0kgZGlzY3MgYW5kIGdlbmVyaWMgaGFyZCBkaXNjcworCistIENoYXJhY3RlciBtZW1vcnkgZGV2aWNlcyAobnVsbCwgemVybywgZnVsbCBhbmQgc28gb24pCisgIFRoYW5rcyB0byBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBMb29wIGRldmljZXMgKC9kZXYvbG9vcD8pCisgCistIFRUWSBkZXZpY2VzIChjb25zb2xlLCBzZXJpYWwgcG9ydHMsIHRlcm1pbmFscyBhbmQgcHNldWRvLXRlcm1pbmFscykKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIFNDU0kgdGFwZXMgKC9kZXYvc2NzaSBhbmQgL2Rldi90YXBlcykKKworLSBTQ1NJIENELVJPTXMgKC9kZXYvc2NzaSBhbmQgL2Rldi9jZHJvbXMpCisKKy0gU0NTSSBnZW5lcmljIGRldmljZXMgKC9kZXYvc2NzaSkKKworLSBSQU1ESVNDUyAoL2Rldi9yYW0/KQorCistIE1ldGEgRGV2aWNlcyAoL2Rldi9tZCopCisKKy0gRmxvcHB5IGRpc2NzICgvZGV2L2Zsb3BweSkKKworLSBQYXJhbGxlbCBwb3J0IHByaW50ZXJzICgvZGV2L3ByaW50ZXJzKQorCistIFNvdW5kIGRldmljZXMgKC9kZXYvc291bmQpCisgIFRoYW5rcyB0byBFcmljIER1bWFzIDxkdW1hc0BsaW51eC5ldS5vcmc+IGFuZAorICBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKworLSBKb3lzdGlja3MgKC9kZXYvam95c3RpY2tzKQorCistIFNwYXJjIGtleWJvYXJkICgvZGV2L2tiZCkKKworLSBEU1A1NjAwMSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IgKC9kZXYvZHNwNTZrKQorCistIEFwcGxlIERlc2t0b3AgQnVzICgvZGV2L2FkYikKKworLSBDb2RhIG5ldHdvcmsgZmlsZSBzeXN0ZW0gKC9kZXYvY2ZzKikKKworLSBWaXJ0dWFsIGNvbnNvbGUgY2FwdHVyZSBkZXZpY2VzICgvZGV2L3ZjYykKKyAgVGhhbmtzIHRvIERlbm5pcyBIb3UgPHNtaWxheEBtaW5kbWVsZC55aS5vcmc+CisKKy0gRnJhbWUgYnVmZmVyIGRldmljZXMgKC9kZXYvZmIpCisKKy0gVmlkZW8gY2FwdHVyZSBkZXZpY2VzICgvZGV2L3Y0bCkKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0FsbG9jYXRpb24gb2YgRGV2aWNlIE51bWJlcnMKKworRGV2ZnMgYWxsb3dzIHlvdSB0byB3cml0ZSBhIGRyaXZlciB3aGljaCBkb2Vzbid0IG5lZWQgdG8gYWxsb2NhdGUgYQorZGV2aWNlIG51bWJlciAobWFqb3ImbWlub3IgbnVtYmVycykgZm9yIHRoZSBpbnRlcm5hbCBvcGVyYXRpb24gb2YgdGhlCitrZXJuZWwuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiB1c2Vyc3BhY2UgcHJvZ3JhbW1lcyB0aGF0IHVzZQordGhlIGRldmljZSBudW1iZXIgYXMgYSB1bmlxdWUgaGFuZGxlIGZvciBhIGRldmljZS4gQW4gZXhhbXBsZSBpcyB0aGUKK2ZpbmQgcHJvZ3JhbW1lLCB3aGljaCB1c2VzIGRldmljZSBudW1iZXJzIHRvIGRldGVybWluZSB3aGV0aGVyCithbiBpbm9kZSBpcyBvbiBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIHRoYW4gYW5vdGhlciBpbm9kZS4gVGhlIGRldmljZQorbnVtYmVyIHVzZWQgaXMgdGhlIG9uZSBmb3IgdGhlIGJsb2NrIGRldmljZSB3aGljaCBhIGZpbGVzeXN0ZW0gaXMKK3VzaW5nLiBUbyBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggdXNlcnNwYWNlIHByb2dyYW1tZXMsIGJsb2NrCitkZXZpY2VzIHVzaW5nIGRldmZzIG5lZWQgdG8gaGF2ZSB1bmlxdWUgZGV2aWNlIG51bWJlcnMgYWxsb2NhdGVkIHRvCit0aGVtLiBGdXJ0aGVybW9yZSwgUE9TSVggc3BlY2lmaWVzIGRldmljZSBudW1iZXJzLCBzbyBzb21lIGtpbmQgb2YKK2RldmljZSBudW1iZXIgbmVlZHMgdG8gYmUgcHJlc2VudGVkIHRvIHVzZXJzcGFjZS4KKworVGhlIHNpbXBsZXN0IG9wdGlvbiAoZXNwZWNpYWxseSB3aGVuIHBvcnRpbmcgZHJpdmVycyB0byBkZXZmcykgaXMgdG8KK2tlZXAgdXNpbmcgdGhlIG9sZCBtYWpvciBhbmQgbWlub3IgbnVtYmVycy4gRGV2ZnMgd2lsbCB0YWtlIHdoYXRldmVyCit2YWx1ZXMgYXJlIGdpdmVuIGZvciBtYWpvciZtaW5vciBhbmQgcGFzcyB0aGVtIG9udG8gdXNlcnNwYWNlLgorCitUaGlzIGRldmljZSBudW1iZXIgaXMgYSAxNiBiaXQgbnVtYmVyLCBzbyB0aGlzIGxlYXZlcyBwbGVudHkgb2Ygc3BhY2UKK2ZvciBsYXJnZSBudW1iZXJzIG9mIGRpc2NzIGFuZCBwYXJ0aXRpb25zLiBUaGlzIHNjaGVtZSBjYW4gYWxzbyBiZQordXNlZCBmb3IgY2hhcmFjdGVyIGRldmljZXMsIGluIHBhcnRpY3VsYXIgdGhlIHR0eSBkZXZpY2VzLCB3aGljaCBhcmUKK2N1cnJlbnRseSBsaW1pdGVkIHRvIDI1NiBwc2V1ZG8tdHR5cyAodGhpcyBsaW1pdHMgdGhlIHRvdGFsIG51bWJlciBvZgorc2ltdWx0YW5lb3VzIHh0ZXJtcyBhbmQgcmVtb3RlIGxvZ2lucykuICBOb3RlIHRoYXQgdGhlIGRldmljZSBudW1iZXIKK2lzIGxpbWl0ZWQgdG8gdGhlIHJhbmdlIDM2ODY0LTYxNDM5IChtYWpvcnMgMTQ0LTIzOSksIGluIG9yZGVyIHRvCithdm9pZCBhbnkgcG9zc2libGUgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcgb2ZmaWNpYWwgYWxsb2NhdGlvbnMuCisKK1BsZWFzZSBub3RlIHRoYXQgdXNpbmcgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJsb2NrIGRldmljZSBudW1iZXJzIG1heQorYnJlYWsgdGhlIE5GUyBkYWVtb25zIChib3RoIHVzZXIgYW5kIGtlcm5lbCBtb2RlKSwgd2hpY2ggZXhwZWN0IGRldl90Citmb3IgYSBnaXZlbiBkZXZpY2UgdG8gYmUgY29uc3RhbnQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgcmVtb3RlIG1vdW50cy4KKworQSBmaW5hbCBub3RlIG9uIHRoaXMgc2NoZW1lOiBzaW5jZSBpdCBkb2Vzbid0IGluY3JlYXNlIHRoZSBzaXplIG9mCitkZXZpY2UgbnVtYmVycywgdGhlcmUgYXJlIG5vIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggdXNlcnNwYWNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1F1ZXN0aW9ucyBhbmQgQW5zd2VycworCisKK01ha2luZyB0aGluZ3Mgd29yaworQWx0ZXJuYXRpdmVzIHRvIGRldmZzCitXaGF0IEkgZG9uJ3QgbGlrZSBhYm91dCBkZXZmcworSG93IHRvIHJlcG9ydCBidWdzCitTdHJhbmdlIGtlcm5lbCBtZXNzYWdlcworQ29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBkZXZmc2QKKworCisKK01ha2luZyB0aGluZ3Mgd29yaworCitIZXJlIGFyZSBzb21lIGNvbW1vbiBxdWVzdGlvbnMgYW5kIGFuc3dlcnMuCisKKworCitEZXZmc2QgZG9lc24ndCBzdGFydAorCitNYWtlIHN1cmUgeW91IGhhdmUgY29tcGlsZWQgYW5kIGluc3RhbGxlZCBkZXZmc2QKK01ha2Ugc3VyZSBkZXZmc2QgaXMgYmVpbmcgc3RhcnRlZCBmcm9tIHlvdXIgYm9vdAorc2NyaXB0cworTWFrZSBzdXJlIHlvdSBoYXZlIGNvbmZpZ3VyZWQgeW91ciBrZXJuZWwgdG8gZW5hYmxlIGRldmZzIChzZWUKK2JlbG93KQorTWFrZSBzdXJlIGRldmZzIGlzIG1vdW50ZWQgKHNlZSBiZWxvdykKKworCitEZXZmc2QgaXMgbm90IG1hbmFnaW5nIGFsbCBteSBwZXJtaXNzaW9ucworCitNYWtlIHN1cmUgeW91IGFyZSBjYXB0dXJpbmcgdGhlIGFwcHJvcHJpYXRlIGV2ZW50cy4gRm9yIGV4YW1wbGUsCitkZXZpY2UgZW50cmllcyBjcmVhdGVkIGJ5IHRoZSBrZXJuZWwgZ2VuZXJhdGUgUkVHSVNURVIgZXZlbnRzLAorYnV0IHRob3NlIGNyZWF0ZWQgYnkgZGV2ZnNkIGdlbmVyYXRlIENSRUFURSBldmVudHMuCisKKworRGV2ZnNkIGlzIG5vdCBjYXB0dXJpbmcgYWxsIFJFR0lTVEVSIGV2ZW50cworCitTZWUgdGhlIHByZXZpb3VzIGVudHJ5OiB5b3UgbWF5IG5lZWQgdG8gY2FwdHVyZSBDUkVBVEUgZXZlbnRzLgorCisKK1ggd2lsbCBub3Qgc3RhcnQKKworTWFrZSBzdXJlIHlvdSBmb2xsb3dlZCB0aGUgc3RlcHMgCitvdXRsaW5lZCBhYm92ZS4KKworCitXaHkgZG9uJ3QgbXkgbmV0d29yayBkZXZpY2VzIGFwcGVhciBpbiBkZXZmcz8KKworVGhpcyBpcyBub3QgYSBidWcuIE5ldHdvcmsgZGV2aWNlcyBoYXZlIHRoZWlyIG93biwgY29tcGxldGVseSBzZXBhcmF0ZQorbmFtZXNwYWNlLiBUaGV5IGFyZSBhY2Nlc3NlZCB2aWEgc29ja2V0KDIpIGFuZAorc2V0c29ja29wdCgyKSBjYWxscywgYW5kIHRodXMgcmVxdWlyZSBubyBkZXZpY2Ugbm9kZXMuIEkgaGF2ZQorcmFpc2VkIHRoZSBwb3NzaWJpbHR5IG9mIG1vdmluZyBuZXR3b3JrIGRldmljZXMgaW50byB0aGUgZGV2aWNlCituYW1lc3BhY2UsIGJ1dCBoYXZlIGhhZCBubyByZXNwb25zZS4KKworCitIb3cgY2FuIEkgdGVzdCBpZiBJIGhhdmUgZGV2ZnMgY29tcGlsZWQgaW50byBteSBrZXJuZWw/CisKK0FsbCBmaWxlc3lzdGVtcyBidWlsdC1pbiBvciBjdXJyZW50bHkgbG9hZGVkIGFyZSBsaXN0ZWQgaW4KKy9wcm9jL2ZpbGVzeXN0ZW1zLiBJZiB5b3Ugc2VlIGEgZGV2ZnMgZW50cnksIHRoZW4KK3lvdSBrbm93IHRoYXQgZGV2ZnMgd2FzIGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwuIElmIHlvdSBoYXZlCitjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgcmVidWlsdCB5b3VyIGtlcm5lbCwgdGhlbiBkZXZmcyB3aWxsIGJlCitidWlsdC1pbi4gSWYgeW91IHRoaW5rIHlvdSd2ZSBjb25maWd1cmVkIGl0IGluLCBidXQKKy9wcm9jL2ZpbGVzeXN0ZW1zIGRvZXNuJ3Qgc2hvdyBpdCwgeW91J3ZlIG1hZGUgYSBtaXN0YWtlLgorQ29tbW9uIG1pc3Rha2VzIGluY2x1ZGU6CisKK1VzaW5nIGEgMi4yLngga2VybmVsIHdpdGhvdXQgYXBwbHlpbmcgdGhlIGRldmZzIHBhdGNoIChpZiB5b3UKK2Rvbid0IGtub3cgaG93IHRvIHBhdGNoIHlvdXIga2VybmVsLCB1c2UgMi40LnggaW5zdGVhZCwgZG9uJ3QgYm90aGVyCithc2tpbmcgbWUgaG93IHRvIHBhdGNoKQorRm9yZ2V0dGluZyB0byBzZXQgQ09ORklHX0VYUEVSSU1FTlRBTD15CitGb3JnZXR0aW5nIHRvIHNldCBDT05GSUdfREVWRlNfRlM9eQorRm9yZ2V0dGluZyB0byBzZXQgQ09ORklHX0RFVkZTX01PVU5UPXkgKGlmIHlvdSB3YW50IGRldmZzCit0byBiZSBhdXRvbWF0aWNhbGx5IG1vdW50ZWQgYXQgYm9vdCkKK0VkaXRpbmcgeW91ciAuY29uZmlnIG1hbnVhbGx5LCBpbnN0ZWFkIG9mIHVzaW5nIG1ha2UKK2NvbmZpZyBvciBtYWtlIHhjb25maWcKK0ZvcmdldHRpbmcgdG8gcnVuIG1ha2UgZGVwOyBtYWtlIGNsZWFuIGFmdGVyIGNoYW5naW5nIHRoZQorY29uZmlndXJhdGlvbiBhbmQgYmVmb3JlIGNvbXBpbGluZworRm9yZ2V0dGluZyB0byBjb21waWxlIHlvdXIga2VybmVsIGFuZCBtb2R1bGVzCitGb3JnZXR0aW5nIHRvIGluc3RhbGwgeW91ciBrZXJuZWwKK0ZvcmdldHRpbmcgdG8gaW5zdGFsbCB5b3VyIG1vZHVsZXMKKworUGxlYXNlIGNoZWNrIHR3aWNlIHRoYXQgeW91J3ZlIGRvbmUgYWxsIHRoZXNlIHN0ZXBzIGJlZm9yZSBzZW5kaW5nIGluCithIGJ1ZyByZXBvcnQuCisKKworCitIb3cgY2FuIEkgdGVzdCBpZiBkZXZmcyBpcyBtb3VudGVkIG9uIC9kZXY/CisKK1RoZSBkZXZpY2UgZmlsZXN5c3RlbSB3aWxsIGFsd2F5cyBjcmVhdGUgYW4gZW50cnkgY2FsbGVkCisiLmRldmZzZCIsIHdoaWNoIGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGFlbW9uLiBFdmVuCitpZiB0aGUgZGFlbW9uIGlzIG5vdCBydW5uaW5nLCB0aGlzIGVudHJ5IHdpbGwgZXhpc3QuIFRlc3RpbmcgZm9yIHRoZQorZXhpc3RlbmNlIG9mIHRoaXMgZW50cnkgaXMgdGhlIGFwcHJvdmVkIG1ldGhvZCBvZiBkZXRlcm1pbmluZyBpZiBkZXZmcworaXMgbW91bnRlZCBvciBub3QuIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiBlbnRyeSAoaS5lLiByZWd1bGFyIGZpbGUsCitjaGFyYWN0ZXIgZGV2aWNlLCBuYW1lZCBwaXBlLCBldGMuKSBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBPbmx5Cit0aGUgZXhpc3RlbmNlIG9mIHRoZSBlbnRyeSBzaG91bGQgYmUgcmVsaWVkIHVwb24uCisKKworV2hlbiBJIHN0YXJ0IGRldmZzZCwgSSBzZWUgdGhlIGVycm9yOgorRXJyb3Igb3BlbmluZyBmaWxlOiAiLmRldmZzZCIgICBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5PworCitUaGlzIG1lYW5zIHRoYXQgZGV2ZnMgaXMgbm90IG1vdW50ZWQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBkZXZmcyBtb3VudGVkLgorCisKK0hvdyBkbyBJIG1vdW50IGRldmZzPworCitGaXJzdCBtYWtlIHN1cmUgeW91IGhhdmUgZGV2ZnMgY29tcGlsZWQgaW50byB5b3VyIGtlcm5lbCAoc2VlCithYm92ZSkuIFRoZW4geW91IHdpbGwgZWl0aGVyIG5lZWQgdG86CisKK3NldCBDT05GSUdfREVWRlNfTU9VTlQ9eSBpbiB5b3VyIGtlcm5lbCBjb25maWcKK3Bhc3MgZGV2ZnM9bW91bnQgdG8geW91ciBib290IGxvYWRlcgorbW91bnQgZGV2ZnMgbWFudWFsbHkgaW4geW91ciBib290IHNjcmlwdHMgd2l0aDoKK21vdW50IC10IG5vbmUgZGV2ZnMgL2RldgorCisKKworTW91bnQgYnkgdm9sdW1lIExBQkVMPTxsYWJlbD4gZG9lc24ndCB3b3JrIHdpdGgKK2RldmZzCisKK01vc3QgcHJvYmFibHkgeW91IGFyZSBub3QgbW91bnRpbmcgZGV2ZnMgb250byAvZGV2LiBXaGF0CitoYXBwZW5zIGlzIHRoYXQgaWYgeW91ciBrZXJuZWwgY29uZmlnIGhhcyBDT05GSUdfREVWRlNfRlM9eQordGhlbiB0aGUgY29udGVudHMgb2YgL3Byb2MvcGFydGl0aW9ucyB3aWxsIGhhdmUgdGhlIGRldmZzCituYW1lcyAoc3VjaCBhcyBzY3NpL2hvc3QwL2J1czAvdGFyZ2V0MC9sdW4wL3BhcnQxKS4gVGhlCitjb250ZW50cyBvZiAvcHJvYy9wYXJ0aXRpb25zIGFyZSB1c2VkIGJ5IG1vdW50KDgpIHdoZW4KK21vdW50aW5nIGJ5IHZvbHVtZSBsYWJlbC4gSWYgZGV2ZnMgaXMgbm90IG1vdW50ZWQgb24gL2RldiwKK3RoZW4gbW91bnQoOCkgd2lsbCBmYWlsIHRvIGZpbmQgZGV2aWNlcy4gVGhlIHNvbHV0aW9uIGlzIHRvCittYWtlIHN1cmUgdGhhdCBkZXZmcyBpcyBtb3VudGVkIG9uIC9kZXYuIFNlZSBhYm92ZSBmb3IgaG93IHRvCitkbyB0aGF0LgorCisKK0kgaGF2ZSBleHRyYSBvciBpbmNvcnJlY3QgZW50cmllcyBpbiAvZGV2CisKK1lvdSBtYXkgaGF2ZSBzdGFsZSBlbnRyaWVzIGluIHlvdXIgZGV2LXN0YXRlIGFyZWEuIENoZWNrIGZvciBhCitSRVNUT1JFIGNvbmZpZ3VyYXRpb24gbGluZSBpbiB5b3VyIGRldmZzZCBjb25maWd1cmF0aW9uCisodHlwaWNhbGx5IC9ldGMvZGV2ZnNkLmNvbmYpLiBJZiB5b3UgaGF2ZSB0aGlzIGxpbmUsIGNoZWNrCit0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZm9yIHN0YWxlIGVudHJpZXMuIFJlbW92ZQorYW55IGVudHJpZXMgd2hpY2ggYXJlIGluY29ycmVjdCwgdGhlbiByZWJvb3QuCisKKworSSBnZXQgIlVuYWJsZSB0byBvcGVuIGluaXRpYWwgY29uc29sZSIgbWVzc2FnZXMgYXQgYm9vdAorCitUaGlzIHVzdWFsbHkgaGFwcGVucyB3aGVuIHlvdSBkb24ndCBoYXZlIGRldmZzIGF1dG9tb3VudGVkIG9udG8KKy9kZXYgYXQgYm9vdCB0aW1lLCBhbmQgdGhlcmUgaXMgbm8gdmFsaWQKKy9kZXYvY29uc29sZSBlbnRyeSBvbiB5b3VyIHJvb3QgZmlsZS1zeXN0ZW0uIENyZWF0ZSBhIHZhbGlkCisvZGV2L2NvbnNvbGUgZGV2aWNlIG5vZGUuCisKKworCisKKworQWx0ZXJuYXRpdmVzIHRvIGRldmZzCisKK0kndmUgYXR0ZW1wdGVkIHRvIGNvbGxhdGUgYWxsIHRoZSBhbnRpLWRldmZzIHByb3Bvc2FscyBhbmQgZXhwbGFpbgordGhlaXIgbGltaXRhdGlvbnMuIFVuZGVyIGNvbnN0cnVjdGlvbi4KKworCitXaHkgbm90IGp1c3QgcGFzcyBkZXZpY2UgY3JlYXRlL3JlbW92ZSBldmVudHMgdG8gYSBkYWVtb24/CisKK0hlcmUgdGhlIHN1Z2dlc3Rpb24gaXMgdG8gZGV2ZWxvcCBhbiBBUEkgaW4gdGhlIGtlcm5lbCBzbyB0aGF0IGRldmljZXMKK2NhbiByZWdpc3RlciBjcmVhdGUgYW5kIHJlbW92ZSBldmVudHMsIGFuZCBhIGRhZW1vbiBsaXN0ZW5zIGZvciB0aG9zZQorZXZlbnRzLiBUaGUgZGFlbW9uIHdvdWxkIHRoZW4gcG9wdWxhdGUvZGVwb3B1bGF0ZSAvZGV2ICh3aGljaAorcmVzaWRlcyBvbiBkaXNjKS4KKworVGhpcyBoYXMgc2V2ZXJhbCBsaW1pdGF0aW9uczoKKworCitpdCBvbmx5IHdvcmtzIGZvciBtb2R1bGVzIGxvYWRlZCBhbmQgdW5sb2FkZWQgKG9yIGRldmljZXMgaW5zZXJ0ZWQKK2FuZCByZW1vdmVkKSBhZnRlciB0aGUga2VybmVsIGhhcyBmaW5pc2hlZCBib290aW5nLiBXaXRob3V0IGEgZGF0YWJhc2UKK29mIGV2ZW50cywgdGhlcmUgaXMgbm8gd2F5IHRoZSBkYWVtb24gY291bGQgZnVsbHkgcG9wdWxhdGUKKy9kZXYKKworCitpZiB5b3UgYWRkIGEgZGF0YWJhc2UgdG8gdGhpcyBzY2hlbWUsIHRoZSBxdWVzdGlvbiBpcyB0aGVuIGhvdyB0bworcHJlc2VudCB0aGF0IGRhdGFiYXNlIHRvIHVzZXItc3BhY2UuIElmIHlvdSBtYWtlIGl0IGEgbGlzdCBvZiBzdHJpbmdzCit3aXRoIGVtYmVkZGVkIGV2ZW50IGNvZGVzIHdoaWNoIGFyZSBwYXNzZWQgdGhyb3VnaCBhIHBpcGUgdG8gdGhlCitkYWVtb24sIHRoZW4gdGhpcyBpcyBvbmx5IG9mIHVzZSB0byB0aGUgZGFlbW9uLiBJIHdvdWxkIGFyZ3VlIHRoYXQgdGhlCituYXR1cmFsIHdheSB0byBwcmVzZW50IHRoaXMgZGF0YSBpcyB2aWEgYSBmaWxlc3lzdGVtIChzaW5jZSBtYW55IG9mCit0aGUgZXZlbnRzIHdpbGwgYmUgb2YgYSBoaWVyYXJjaGljYWwgbmF0dXJlKSwgc3VjaCBhcyBkZXZmcy4KK1ByZXNlbnRpbmcgdGhlIGRhdGEgYXMgYSBmaWxlc3lzdGVtIG1ha2VzIGl0IGVhc3kgZm9yIHRoZSB1c2VyIHRvIHNlZQord2hhdCBpcyBhdmFpbGFibGUgYW5kIGFsc28gbWFrZXMgaXQgZWFzeSB0byB3cml0ZSBzY3JpcHRzIHRvIHNjYW4gdGhlCisiZGF0YWJhc2UiCisKKwordGhlIHRpZ2h0IGJpbmRpbmcgYmV0d2VlbiBkZXZpY2Ugbm9kZXMgYW5kIGRyaXZlcnMgaXMgbm8gbG9uZ2VyCitwb3NzaWJsZSAocmVxdWlyaW5nIHRoZSBvdGhlcndpc2UgcGVyZmVjdGx5IGF2b2lkYWJsZQordGFibGUgbG9va3VwcykKKworCit5b3UgY2Fubm90IGNhdGNoIGlub2RlIGxvb2t1cCBldmVudHMgb24gL2RldiB3aGljaCBtZWFucwordGhhdCBtb2R1bGUgYXV0b2xvYWRpbmcgcmVxdWlyZXMgZGV2aWNlIG5vZGVzIHRvIGJlIGNyZWF0ZWQuIFRoaXMgaXMgYQorcHJvYmxlbSwgcGFydGljdWxhcmx5IGZvciBkcml2ZXJzIHdoZXJlIG9ubHkgYSBmZXcgaW5vZGVzIGFyZSBjcmVhdGVkCitmcm9tIGEgcG90ZW50aWFsbHkgbGFyZ2Ugc2V0CisKKwordGhpcyB0ZWNobmlxdWUgY2FuJ3QgYmUgdXNlZCB3aGVuIHRoZSByb290IEZTIGlzIG1vdW50ZWQKK3JlYWQtb25seQorCisKKworCitKdXN0IGltcGxlbWVudCBhIGJldHRlciBzY3NpZGV2CisKK1RoaXMgc3VnZ2VzdGlvbiBpbnZvbHZlcyB0YWtpbmcgdGhlIHNjc2lkZXYgcHJvZ3JhbW1lIGFuZAorZXh0ZW5kaW5nIGl0IHRvIHNjYW4gZm9yIGFsbCBkZXZpY2VzLCBub3QganVzdCBTQ1NJIGRldmljZXMuIFRoZQorc2NzaWRldiBwcm9ncmFtbWUgd29ya3MgYnkgc2Nhbm5pbmcgL3Byb2Mvc2NzaQorCitQcm9ibGVtczoKKworCit0aGUga2VybmVsIGRvZXMgbm90IGN1cnJlbnRseSBwcm92aWRlIGEgbGlzdCBvZiBhbGwgZGV2aWNlcworYXZhaWxhYmxlLiBOb3QgYWxsIGRyaXZlcnMgcmVnaXN0ZXIgZW50cmllcyBpbiAvcHJvYyBvcgorZ2VuZXJhdGUga2VybmVsIG1lc3NhZ2VzCisKKwordGhlcmUgaXMgbm8gdW5pZm9ybSBtZWNoYW5pc20gdG8gcmVnaXN0ZXIgZGV2aWNlcyBvdGhlciB0aGFuIHRoZQorZGV2ZnMgQVBJCisKKworaW1wbGVtZW50aW5nIHN1Y2ggYW4gQVBJIGlzIHRoZW4gdGhlIHNhbWUgYXMgdGhlCitwcm9wb3NhbCBhYm92ZQorCisKKworCitQdXQgL2RldiBvbiBhIHJhbWRpc2MKKworVGhpcyBzdWdnZXN0aW9uIGludm9sdmVzIGNyZWF0aW5nIGEgcmFtZGlzYyBhbmQgcG9wdWxhdGluZyBpdCB3aXRoCitkZXZpY2Ugbm9kZXMgYW5kIHRoZW4gbW91bnRpbmcgaXQgb3ZlciAvZGV2LgorCitQcm9ibGVtczoKKworCisKK3RoaXMgZG9lc24ndCBoZWxwIHdoZW4gbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSwgc2luY2UgeW91CitzdGlsbCBuZWVkIGEgZGV2aWNlIG5vZGUgdG8gZG8gdGhhdAorCisKK2lmIHlvdSB3YW50IHRvIHVzZSB0aGlzIHRlY2huaXF1ZSBmb3IgdGhlIHJvb3QgZGV2aWNlIG5vZGUgYXMKK3dlbGwsIHlvdSBuZWVkIHRvIHVzZSBpbml0cmQuIFRoaXMgY29tcGxpY2F0ZXMgdGhlIGJvb3Rpbmcgc2VxdWVuY2UKK2FuZCBtYWtlcyBpdCBzaWduaWZpY2FudGx5IGhhcmRlciB0byBhZG1pbmlzdGVyIGFuZCBjb25maWd1cmUuIFRoZQoraW5pdHJkIGlzIGVzc2VudGlhbGx5IG9wYXF1ZSwgcm9iYmluZyB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3Igb2YgZWFzeQorY29uZmlndXJhdGlvbgorCisKK2luc3VmZmljaWVudCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgdG8gY29ycmVjdGx5IHBvcHVsYXRlIHRoZQorcmFtZGlzYy4gU28gd2UgY29tZSBiYWNrIHRvIHRoZQorcHJvcG9zYWwgYWJvdmUgdG8gInNvbHZlIiB0aGlzCisKKworYSByYW1kaXNjLWJhc2VkIHNvbHV0aW9uIHdvdWxkIHRha2UgbW9yZSBrZXJuZWwgbWVtb3J5LCBzaW5jZSB0aGUKK2JhY2tpbmcgc3RvcmUgd291bGQgYmUgKGF0IGJlc3QpIG5vcm1hbCBWRlMgaW5vZGVzIGFuZCBkZW50cmllcywgd2hpY2gKK3Rha2UgMjg0IGJ5dGVzIGFuZCAxMTIgYnl0ZXMsIHJlc3BlY3RpdmVseSwgZm9yIGVhY2ggZW50cnkuIENvbXBhcmUKK3RoYXQgdG8gNzIgYnl0ZXMgZm9yIGRldmZzCisKKworCisKK0RvIG5vdGhpbmc6IHRoZXJlJ3Mgbm8gcHJvYmxlbQorCitTb21ldGltZXMgcGVvcGxlIGNhbiBiZSBoZWFyZCB0byBjbGFpbSB0aGF0IHRoZSBleGlzdGluZyBzY2hlbWUgaXMKK2ZpbmUuIFRoaXMgaXMgd2hhdCB0aGV5J3JlIGlnbm9yaW5nOgorCisKK2RldmljZSBudW1iZXIgc2l6ZSAoOCBiaXRzIGVhY2ggZm9yIG1ham9yIGFuZCBtaW5vcikgaXMgYSByZWFsCitsaW1pdGF0aW9uLCBhbmQgbXVzdCBiZSBmaXhlZCBzb21laG93LiBTeXN0ZW1zIHdpdGggbGFyZ2UgbnVtYmVycyBvZgorU0NTSSBkZXZpY2VzLCBmb3IgZXhhbXBsZSwgd2lsbCBjb250aW51ZSB0byBjb25zdW1lIHRoZSByZW1haW5pbmcKK3VuYWxsb2NhdGVkIG1ham9yIG51bWJlcnMuIFVTQiB3aWxsIGFsc28gbmVlZCB0byBwdXNoIGJleW9uZCB0aGUgOCBiaXQKK21pbm9yIGxpbWl0YXRpb24KKworCitzaW1wbHkgaW5jcmVhc2luZyB0aGUgZGV2aWNlIG51bWJlciBzaXplIGlzIGluc3VmZmljaWVudC4gQXBhcnQKK2Zyb20gY2F1c2luZyBhIGxvdCBvZiBwYWluLCBpdCBkb2Vzbid0IHNvbHZlIHRoZSBtYW5hZ2VtZW50IGlzc3Vlcworb2YgYSAvZGV2IHdpdGggdGhvdXNhbmRzIG9yIG1vcmUgZGV2aWNlIG5vZGVzCisKKworaWdub3JpbmcgdGhlIHByb2JsZW0gb2YgYSBodWdlIC9kZXYgd2lsbCBub3QgbWFrZSBpdCBnbworYXdheSwgYW5kIGRpc21pc3NlcyB0aGUgbGVnaXRpbWFjeSBvZiBhIGxhcmdlIG51bWJlciBvZiBwZW9wbGUgd2hvCit3YW50IGEgZHluYW1pYyAvZGV2CisKKwordGhlIHN0YW5kYXJkIHJlc3BvbnNlIHRoZW4gYmVjb21lczogIndyaXRlIGEgZGV2aWNlIG1hbmFnZW1lbnQKK2RhZW1vbiIsIHdoaWNoIGJyaW5ncyB1cyBiYWNrIHRvIHRoZQorcHJvcG9zYWwgYWJvdmUKKworCisKKworV2hhdCBJIGRvbid0IGxpa2UgYWJvdXQgZGV2ZnMKKworSGVyZSBhcmUgc29tZSBjb21tb24gY29tcGxhaW50cyBhYm91dCBkZXZmcywgYW5kIHNvbWUgc3VnZ2VzdGlvbnMgYW5kCitzb2x1dGlvbnMgdGhhdCBtYXkgbWFrZSBpdCBtb3JlIHBhbGF0YWJsZSBmb3IgeW91LiBJIGNhbid0IHBsZWFzZQorZXZlcnlib2R5LCBidXQgSSBkbyB0cnkgOi0pCisKK0kgaGF0ZSB0aGUgbmFtaW5nIHNjaGVtZQorCitGaXJzdCwgcmVtZW1iZXIgdGhhdCBubyBuYW1pbmcgc2NoZW1lIHdpbGwgcGxlYXNlIGV2ZXJ5Ym9keS4gWW91IGhhdGUKK3RoZSBzY2hlbWUsIG90aGVycyBsb3ZlIGl0LiBXaG8ncyB0byBzYXkgd2hvJ3MgcmlnaHQgYW5kIHdobydzIHdyb25nPworVWx0aW1hdGVseSwgdGhlIHBlcnNvbiB3aG8gd3JpdGVzIHRoZSBjb2RlIGdldHMgdG8gY2hvb3NlLCBhbmQgd2hhdAorZXhpc3RzIG5vdyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjaG9pY2VzIG1hZGUgYnkgdGhlCitkZXZmcyBhdXRob3IgYW5kIHRoZQora2VybmVsIG1haW50YWluZXIgKExpbnVzKS4KKworSG93ZXZlciwgbm90IGFsbCBpcyBsb3N0LiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gbmFtaW5nCitzY2hlbWUsIGl0IGlzIGEgc2ltcGxlIG1hdHRlciB0byB3cml0ZSBhIHN0YW5kYWxvbmUgc2NyaXB0LCBoYWNrCitkZXZmc2QsIG9yIHdyaXRlIGEgc2NyaXB0IGNhbGxlZCBieSBkZXZmc2QuIFlvdSBjYW4gY3JlYXRlIHdoYXRldmVyCituYW1pbmcgc2NoZW1lIHlvdSBsaWtlLgorCitGdXJ0aGVyLCBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIHRyYWNlcyBvZiB0aGUgZGV2ZnMgbmFtaW5nIHNjaGVtZQorZnJvbSAvZGV2LCB5b3UgY2FuIG1vdW50IGRldmZzIGVsc2V3aGVyZSAoc2F5CisvZGV2ZnMpIGFuZCBwb3B1bGF0ZSAvZGV2IHdpdGggbGlua3MgaW50bworL2RldmZzLiBUaGlzIHBvcHVsYXRpb24gY2FuIGJlIGF1dG9tYXRlZCB1c2luZyBkZXZmc2QgaWYgeW91Cit3aXNoLgorCitZb3UgY2FuIGV2ZW4gdXNlIHRoZSBWRlMgYmluZGluZyBmYWNpbGl0eSB0byBtYWtlIHRoZSBsaW5rcywgcmF0aGVyCit0aGFuIHVzaW5nIHN5bWJvbGljIGxpbmtzLiBUaGlzIHdheSwgeW91IGRvbid0IGV2ZW4gaGF2ZSB0byBzZWUgdGhlCisiZGVzdGluYXRpb24iIG9mIHRoZXNlIHN5bWJvbGljIGxpbmtzLgorCitEZXZmcyBwdXRzIHBvbGljeSBpbnRvIHRoZSBrZXJuZWwKKworVGhlcmUncyBhbHJlYWR5IHBvbGljeSBpbiB0aGUga2VybmVsLiBEZXZpY2UgbnVtYmVycyBhcmUgaW4gZmFjdAorcG9saWN5ICh3aHkgc2hvdWxkIHRoZSBrZXJuZWwgZGljdGF0ZSB3aGF0IGRldmljZSBudW1iZXJzIEkgdXNlPykuCitGYWNlIGl0LCBzb21lIHBvbGljeSBoYXMgdG8gYmUgaW4gdGhlIGtlcm5lbC4gVGhlIHJlYWwgZGlmZmVyZW5jZQorYmV0d2VlbiBkZXZpY2UgbmFtZXMgYXMgcG9saWN5IGFuZCBkZXZpY2UgbnVtYmVycyBhcyBwb2xpY3kgaXMgdGhhdAorbm8gb25lIHdpbGwgdXNlIGRldmljZSBudW1iZXJzIGRpcmVjdGx5LCBiZWNhdXNlIGRldmljZQorbnVtYmVycyBhcmUgZGV2b2lkIG9mIG1lYW5pbmcgdG8gaHVtYW5zIGFuZCBhcmUgdWdseS4gQXQgbGVhc3Qgd2l0aAordGhlIGRldmZzIGRldmljZSBuYW1lcywgKGV2ZW4gdGhvdWdoIHlvdSBjYW4gYWRkIHlvdXIgb3duIG5hbWluZworc2NoZW1lKSBzb21lIHBlb3BsZSB3aWxsIHVzZSB0aGUgZGV2ZnMtc3VwcGxpZWQgbmFtZXMgZGlyZWN0bHkuIFRoaXMKK29mZmVuZHMgc29tZSBwZW9wbGUgOi0pCisKK0RldmZzIGlzIGJsb2F0d2FyZQorCitUaGlzIGlzIG5vdCBldmVuIHJlbW90ZWx5IHRydWUuIEFzIHNob3duIGFib3ZlLAorYm90aCBjb2RlIGFuZCBkYXRhIHNpemUgYXJlIHF1aXRlIG1vZGVzdC4KKworCitIb3cgdG8gcmVwb3J0IGJ1Z3MKKworSWYgeW91IGhhdmUgKG9yIHRoaW5rIHlvdSBoYXZlKSBhIGJ1ZyB3aXRoIGRldmZzLCBwbGVhc2UgZm9sbG93IHRoZQorc3RlcHMgYmVsb3c6CisKKworCittYWtlIHN1cmUgeW91IGhhdmUgZW5hYmxlZCBkZWJ1Z2dpbmcgb3V0cHV0IHdoZW4gY29uZmlndXJpbmcgeW91cgora2VybmVsLiBZb3Ugd2lsbCBuZWVkIHRvIHNldCAoYXQgbGVhc3QpIHRoZSBmb2xsb3dpbmcgY29uZmlnIG9wdGlvbnM6CisKK0NPTkZJR19ERVZGU19ERUJVRz15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TTEFCPXkKKworCisKK3BsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGxhdGVzdCBkZXZmcyBwYXRjaGVzIGFwcGxpZWQuIFRoZQorbGF0ZXN0IGtlcm5lbCB2ZXJzaW9uIG1pZ2h0IG5vdCBoYXZlIHRoZSBsYXRlc3QgZGV2ZnMgcGF0Y2hlcyBhcHBsaWVkCit5ZXQgKExpbnVzIGlzIHZlcnkgYnVzeSkKKworCitzYXZlIGEgY29weSBvZiB5b3VyIGNvbXBsZXRlIGtlcm5lbCBsb2dzIChwcmVmZXJhYmx5IGJ5Cit1c2luZyB0aGUgZG1lc2cgcHJvZ3JhbW1lKSBmb3IgbGF0ZXIgaW5jbHVzaW9uIGluIHlvdXIgYnVnCityZXBvcnQuIFlvdSBtYXkgbmVlZCB0byB1c2UgdGhlIC1zIHN3aXRjaCB0byBpbmNyZWFzZSB0aGUKK2ludGVybmFsIGJ1ZmZlciBzaXplIHNvIHlvdSBjYW4gY2FwdHVyZSBhbGwgdGhlIGJvb3QgbWVzc2FnZXMuCitEb24ndCBlZGl0IG9yIHRyaW0gdGhlIGRtZXNnIG91dHB1dAorCisKKworCit0cnkgYm9vdGluZyB3aXRoIGRldmZzPWRhbGwgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYm9vdAorY29tbWFuZCBsaW5lIChyZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9uIHlvdXIgYm9vdGxvYWRlciBvbiBob3cgdG8gZG8KK3RoaXMpLCBhbmQgc2F2ZSB0aGUgcmVzdWx0IHRvIGEgZmlsZS4gVGhpcyBtYXkgYmUgcXVpdGUgdmVyYm9zZSwgYW5kCitpdCBtYXkgb3ZlcmZsb3cgdGhlIG1lc3NhZ2VzIGJ1ZmZlciwgYnV0IHRyeSB0byBnZXQgYXMgbXVjaCBvZiBpdCBhcworeW91IGNhbgorCisKK2lmIHlvdSBnZXQgYW4gT29wcywgcnVuIGtzeW1vb3BzIHRvIGRlY29kZSBpdCBzbyB0aGF0IHRoZQorbmFtZXMgb2YgdGhlIG9mZmVuZGluZyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkLiBBIG5vbi1kZWNvZGVkIE9vcHMgaXMKK3ByZXR0eSB1c2VsZXNzCisKKworc2VuZCBhIGNvcHkgb2YgeW91ciBkZXZmc2QgY29uZmlndXJhdGlvbiBmaWxlKHMpCisKK3NlbmQgdGhlIGJ1ZyByZXBvcnQgdG8gbWUgZmlyc3QuCitEb24ndCBleHBlY3QgdGhhdCBJIHdpbGwgc2VlIGl0IGlmIHlvdSBwb3N0IGl0IHRvIHRoZSBsaW51eC1rZXJuZWwKK21haWxpbmcgbGlzdC4gSW5jbHVkZSBhbGwgdGhlIGluZm9ybWF0aW9uIGxpc3RlZCBhYm92ZSwgcGx1cworYW55dGhpbmcgZWxzZSB0aGF0IHlvdSB0aGluayBtaWdodCBiZSByZWxldmFudC4gUHV0IHRoZSBzdHJpbmcKK2RldmZzIHNvbWV3aGVyZSBpbiB0aGUgc3ViamVjdCBsaW5lLCBzbyBteSBtYWlsIGZpbHRlcnMgbWFyaworaXQgYXMgdXJnZW50CisKKworCisKK0hlcmUgaXMgYSBnZW5lcmFsIGd1aWRlIG9uIGhvdyB0byBhc2sgcXVlc3Rpb25zIGluIGEgd2F5IHRoYXQgZ3JlYXRseQoraW1wcm92ZXMgeW91ciBjaGFuY2VzIG9mIGdldHRpbmcgYSByZXBseToKKworaHR0cDovL3d3dy50dXhlZG8ub3JnL35lc3IvZmFxcy9zbWFydC1xdWVzdGlvbnMuaHRtbC4gSWYgeW91IGhhdmUKK2EgYnVnIHRvIHJlcG9ydCwgeW91IHNob3VsZCBhbHNvIHJlYWQKKworaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9idWdzLmh0bWwuCisKKworU3RyYW5nZSBrZXJuZWwgbWVzc2FnZXMKKworWW91IG1heSBzZWUgZGV2ZnMtcmVsYXRlZCBtZXNzYWdlcyBpbiB5b3VyIGtlcm5lbCBsb2dzLiBCZWxvdyBhcmUgc29tZQorbWVzc2FnZXMgYW5kIHdoYXQgdGhleSBtZWFuIChhbmQgd2hhdCB5b3Ugc2hvdWxkIGRvIGFib3V0IHRoZW0sIGlmCithbnl0aGluZykuCisKKworCitkZXZmc19yZWdpc3RlcihmcmVkKTogY291bGQgbm90IGFwcGVuZCB0byBwYXJlbnQsIGVycjogLTE3CisKK1lvdSBuZWVkIHRvIGNoZWNrIHdoYXQgdGhlIGVycm9yIGNvZGUgbWVhbnMsIGJ1dCB1c3VhbGx5IDE3IG1lYW5zCitFRVhJU1QuIFRoaXMgbWVhbnMgdGhhdCBhIGRyaXZlciBhdHRlbXB0ZWQgdG8gY3JlYXRlIGFuIGVudHJ5CitmcmVkIGluIGEgZGlyZWN0b3J5LCBidXQgdGhlcmUgYWxyZWFkeSB3YXMgYW4gZW50cnkgd2l0aCB0aGF0CituYW1lLiBUaGlzIGlzIG9mdGVuIGNhdXNlZCBieSBmbGF3ZWQgYm9vdCBzY3JpcHRzIHdoaWNoIHVudGFyIGEgYnVuY2gKK29mIGlub2RlcyBpbnRvIC9kZXYsIGFzIGEgd2F5IHRvIHJlc3RvcmUgcGVybWlzc2lvbnMuIFRoaXMKK21lc3NhZ2UgaXMgaGFybWxlc3MsIGFzIHRoZSBkZXZpY2Ugbm9kZXMgd2lsbCBzdGlsbAorcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGRyaXZlciAodW5sZXNzIHlvdSB1c2UgdGhlIGRldmZzPW9ubHkKK2Jvb3Qgb3B0aW9uLCB3aGljaCBpcyBvbmx5IGZvciBkZWRpY2F0ZWQgc291bHM6LSkuIElmIHlvdSB3YW50IHRvIGdldAorcmlkIG9mIHRoZXNlIGFubm95aW5nIG1lc3NhZ2VzLCB1cGdyYWRlIHRvIGRldmZzZC12MS4zLjIwIGFuZCB1c2UgdGhlCityZWNvbW1lbmRlZCBSRVNUT1JFIGRpcmVjdGl2ZSB0byByZXN0b3JlIHBlcm1pc3Npb25zLgorCisKK2RldmZzX21rX2RpcihiaWxsKTogdXNpbmcgb2xkIGVudHJ5IGluIGRpcjogYzE4MDg3MjQgIiIKKworVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBtZXNzYWdlIGFib3ZlLCBleGNlcHQgdGhhdCBhIGRyaXZlciBhdHRlbXB0ZWQKK3RvIGNyZWF0ZSBhIGRpcmVjdG9yeSBuYW1lZCBiaWxsLCBhbmQgdGhlIHBhcmVudCBkaXJlY3RvcnkKK2hhcyBhbiBlbnRyeSB3aXRoIHRoZSBzYW1lIG5hbWUuIEluIHRoaXMgY2FzZSwgdG8gZW5zdXJlIHRoYXQgZHJpdmVycworY29udGludWUgdG8gd29yayBwcm9wZXJseSwgdGhlIG9sZCBlbnRyeSBpcyByZS11c2VkIGFuZCBnaXZlbiB0byB0aGUKK2RyaXZlci4gSW4gMi41IGtlcm5lbHMsIHRoZSBkcml2ZXIgaXMgZ2l2ZW4gYSBOVUxMIGVudHJ5LCBhbmQgdGh1cywKK3VuZGVyIHJhcmUgY2lyY3Vtc3RhbmNlcywgbWF5IG5vdCBjcmVhdGUgdGhlIHJlcXVpcmUgZGV2aWNlIG5vZGVzLgorVGhlIHNvbHV0aW9uIGlzIHRoZSBzYW1lIGFzIGFib3ZlLgorCisKKworCisKK0NvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZGV2ZnNkCisKK1VzdWFsbHksIHlvdSBjYW4gY29tcGlsZSBkZXZmc2QganVzdCBieSB0eXBpbmcgaW4KK21ha2UgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnksIGZvbGxvd2VkIGJ5IGEgbWFrZQoraW5zdGFsbCAoYXMgcm9vdCkuIFNvbWV0aW1lcywgeW91IG1heSBoYXZlIHByb2JsZW1zLCBwYXJ0aWN1bGFybHkKK29uIGJyb2tlbiBjb25maWd1cmF0aW9ucy4KKworCisKK2Vycm9yIG1lc3NhZ2VzIHJlbGF0aW5nIHRvIERFVkZTRF9OT1RJRllfREVMRVRFCisKK1RoaXMgaGFwcGVuZWQgYmVjYXVzZSB5b3UgaGF2ZSBhbiBhbmNpZW50IHNldCBvZiBrZXJuZWwgaGVhZGVycworaW5zdGFsbGVkIGluIC91c3IvaW5jbHVkZS9saW51eCBvciAvdXNyL3NyYy9saW51eC4KK0luc3RhbGwga2VybmVsIDIuNC4xMCBvciBsYXRlci4gWW91IG1heSBuZWVkIHRvIHBhc3MgdGhlCitLRVJORUxfRElSIHZhcmlhYmxlIHRvIG1ha2UgKGlmIHlvdSBkaWQgbm90IGluc3RhbGwKK3RoZSBuZXcga2VybmVsIHNvdXJjZXMgYXMgL3Vzci9zcmMvbGludXgpLCBvciB5b3UgbWF5IGNvcHkKK3RoZSBkZXZmc19mcy5oIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBpbnRvCisvdXNyL2luY2x1ZGUvbGludXguCisKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworT3RoZXIgcmVzb3VyY2VzCisKKworCitEb3VnbGFzIEdpbGJlcnQgaGFzIHdyaXR0ZW4gYSB1c2VmdWwgZG9jdW1lbnQgYXQKKworaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL2RldmZzX3Njc2kuaHRtbCB3aGljaAorZXhwbG9yZXMgdGhlIFNDU0kgc3Vic3lzdGVtIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGV2ZnMKKworCitEb3VnbGFzIEdpbGJlcnQgaGFzIHdyaXR0ZW4gYW5vdGhlciB1c2VmdWwgZG9jdW1lbnQgYXQKKworaHR0cDovL3d3dy50b3JxdWUubmV0L3Njc2kvU0NTSS0yLjQtSE9XVE8vIHdoaWNoCitkaXNjdXNzZXMgdGhlIExpbnV4IFNDU0kgc3Vic3lzdGVtIGluIDIuNC4KKworCitKb2hhbm5lcyBFcmRmZWx0IGhhcyBzdGFydGVkIGEgZGlzY3Vzc2lvbiBwYXBlciBvbiBMaW51eCBhbmQKK2hvdC1zd2FwIGRldmljZXMsIGRlc2NyaWJpbmcgd2hhdCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBmb3IgYSBzY2FsYWJsZQorc29sdXRpb24gYW5kIGhvdyBhbmQgd2h5IGhlJ3MgdXNlZCBkZXZmcytkZXZmc2QuIE5vdGUgdGhhdCB0aGlzIGlzIGFuCitlYXJseSBkcmFmdCBvbmx5LCBhdmFpbGFibGUgaW4gcGxhaW4gdGV4dCBmb3JtIGF0OgorCitodHRwOi8vam9oYW5uZXMuZXJkZmVsdC5jb20vaG90c3dhcC50eHQuCitKb2hhbm5lcyBoYXMgcHJvbWlzZWQgYSBIVE1MIHZlcnNpb24gd2lsbCBmb2xsb3cuCisKKworSSBwcmVzZW50ZWQgYW4gaW52aXRlZCAKK3BhcGVyCithdCB0aGUKKworMm5kIEFubnVhbCBTdG9yYWdlIE1hbmFnZW1lbnQgV29ya3Nob3AgaGVsZCBpbiBNaWFtaWEsIEZsb3JpZGEsCitVLlMuQS4gaW4gT2N0b2JlciAyMDAwLgorCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1RyYW5zbGF0aW9ucyBvZiB0aGlzIGRvY3VtZW50CisKK1RoaXMgZG9jdW1lbnQgaGFzIGJlZW4gdHJhbnNsYXRlZCBpbnRvIG90aGVyIGxhbmd1YWdlcy4KKworCisKKworVGhlIGRvY3VtZW50IG1hc3RlciAoaW4gRW5nbGlzaCkgYnkgcmdvb2NoQGF0bmYuY3Npcm8uYXUgaXMKK2F2YWlsYWJsZSBhdAorCitodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL2RldmZzLmh0bWwKKworCisKK0EgS29yZWFuIHRyYW5zbGF0aW9uIGJ5IHZpYXRvcmlzQG5vd251cmkubmV0IGlzIGF2YWlsYWJsZSBhdAorCitodHRwOi8veW91ci5kZXN0aW55LnBlLmtyL2RldmZzL2RldmZzLmh0bWwKKworCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01vc3QgZmxhZ3MgY291cnRlc3kgb2YgSVRBJ3MgCitGbGFncyBvZiBBbGwgQ291bnRyaWVzCit1c2VkIHdpdGggcGVybWlzc2lvbi4gCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1RvRG8gYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL1RvRG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkNWE4ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvVG9EbwpAQCAtMCwwICsxLDQwIEBACisJCURldmljZSBGaWxlIFN5c3RlbSAoZGV2ZnMpIFRvRG8gTGlzdAorCisJCVJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgorCisJCQkgICAgICAzLUpVTC0yMDAwCisKK1RoaXMgaXMgYSBsaXN0IG9mIHRoaW5ncyB0byBiZSBkb25lIGZvciBiZXR0ZXIgZGV2ZnMgc3VwcG9ydCBpbiB0aGUKK0xpbnV4IGtlcm5lbC4gSWYgeW91J2QgbGlrZSB0byBjb250cmlidXRlIHRvIHRoZSBkZXZmcywgcGxlYXNlIGhhdmUgYQorbG9vayBhdCB0aGlzIGxpc3QgZm9yIGFueXRoaW5nIHRoYXQgaXMgdW5hbGxvY2F0ZWQuIEFsc28sIGlmIHRoZXJlIGFyZQoraXRlbXMgbWlzc2luZyAoc3VyZWx5KSwgcGxlYXNlIGNvbnRhY3QgbWUgc28gSSBjYW4gYWRkIHRoZW0gdG8gdGhlCitsaXN0IChwcmVmZXJhYmx5IHdpdGggeW91ciBuYW1lIGF0dGFjaGVkIHRvIHRoZW06LSkuCisKKworLSA+MjU2IHB0eXMKKyAgVGhhbmtzIHRvIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgorCistIEFtaWdhIGZsb3BweSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svYW1pZmxvcC5jKQorCistIEF0YXJpIGZsb3BweSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svYXRhZmxvcC5jKQorCistIFNXSU0zIChTdXBlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lIDMpIGZsb3BweSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svc3dpbTMuYykKKworLSBBbWlnYSBab3Jyb0lJIHJhbWRpc2MgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL3oycmFtLmMpCisKKy0gUGFyYWxsZWwgcG9ydCBBVEFQSSBDRC1ST00gKGRyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jKQorCistIFBhcmFsbGVsIHBvcnQgQVRBUEkgZmxvcHB5IChkcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jKQorCistIEFQMTAwMCBibG9jayBkcml2ZXIgKGRyaXZlcnMvYXAxMDAwL2FwLmMsIGRyaXZlcnMvYXAxMDAwL2Rkdi5jKQorCistIEFyY2hpbWVkZXMgZmxvcHB5IChkcml2ZXJzL2Fjb3JuL2Jsb2NrL2ZkMTc3Mi5jKQorCistIE1GTSBoYXJkIGRyaXZlIChkcml2ZXJzL2Fjb3JuL2Jsb2NrL21mbWhkLmMpCisKKy0gSTJPIGJsb2NrIGRldmljZSAoZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYykKKworLSBTVC1SQU0gZGV2aWNlIChhcmNoL202OGsvYXRhcmkvc3RyYW0uYykKKworLSBSYXcgZGV2aWNlcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL2Jvb3Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvYm9vdC1vcHRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmM2QzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RldmZzL2Jvb3Qtb3B0aW9ucwpAQCAtMCwwICsxLDY1IEBACisvKiAtKi0gYXV0by1maWxsIC0qLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkJRGV2aWNlIEZpbGUgU3lzdGVtIChkZXZmcykgQm9vdCBPcHRpb25zCisKKwkJUmljaGFyZCBHb29jaCA8cmdvb2NoQGF0bmYuY3Npcm8uYXU+CisKKwkJCSAgICAgIDE4LUFVRy0yMDAxCisKKworV2hlbiBDT05GSUdfREVWRlNfREVCVUcgaXMgZW5hYmxlZCwgeW91IGNhbiBwYXNzIHNldmVyYWwgYm9vdCBvcHRpb25zCit0byB0aGUga2VybmVsIHRvIGRlYnVnIGRldmZzLiBUaGUgYm9vdCBvcHRpb25zIGFyZSBwcmVmaXhlZCBieQorImRldmZzPSIsIGFuZCBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gU3BhY2VzIGFyZSBub3QgYWxsb3dlZC4gVGhlCitzeW50YXggbG9va3MgbGlrZSB0aGlzOgorCitkZXZmcz08b3B0aW9uMT4sPG9wdGlvbjI+LDxvcHRpb24zPgorCithbmQgc28gb24uIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudGVkIHRvIHR1cm4gb24gZGVidWdnaW5nIGZvciBtb2R1bGUKK2xvYWQgcmVxdWVzdHMgYW5kIGRldmljZSByZWdpc3RyYXRpb24sIHlvdSB3b3VsZCBkbzoKKworZGV2ZnM9ZG1vZCxkcmVnCisKK1lvdSBtYXkgcHJlZml4ICJubyIgdG8gYW55IG9wdGlvbi4gVGhpcyB3aWxsIGludmVydCB0aGUgb3B0aW9uLgorCisKK0RlYnVnZ2luZyBPcHRpb25zCis9PT09PT09PT09PT09PT09PQorCitUaGVzZSByZXF1aXJlcyBDT05GSUdfREVWRlNfREVCVUcgdG8gYmUgZW5hYmxlZC4KK05vdGUgdGhhdCBhbGwgZGVidWdnaW5nIG9wdGlvbnMgaGF2ZSAnZCcgYXMgdGhlIGZpcnN0IGNoYXJhY3Rlci4gQnkKK2RlZmF1bHQgYWxsIG9wdGlvbnMgYXJlIG9mZi4gQWxsIGRlYnVnZ2luZyBvdXRwdXQgaXMgc2VudCB0byB0aGUKK2tlcm5lbCBsb2dzLiBUaGUgZGVidWdnaW5nIG9wdGlvbnMgZG8gbm90IHRha2UgZWZmZWN0IHVudGlsIHRoZSBkZXZmcwordmVyc2lvbiBtZXNzYWdlIGFwcGVhcnMgKGp1c3QgcHJpb3IgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbSBiZWluZworbW91bnRlZCkuCisKK1RoZXNlIGFyZSB0aGUgb3B0aW9uczoKKworZG1vZAkJcHJpbnQgbW9kdWxlIGxvYWQgcmVxdWVzdHMgdG8gPHJlcXVlc3RfbW9kdWxlPgorCitkcmVnCQlwcmludCBkZXZpY2UgcmVnaXN0ZXIgcmVxdWVzdHMgdG8gPGRldmZzX3JlZ2lzdGVyPgorCitkdW5yZWcJCXByaW50IGRldmljZSB1bnJlZ2lzdGVyIHJlcXVlc3RzIHRvIDxkZXZmc191bnJlZ2lzdGVyPgorCitkY2hhbmdlCQlwcmludCBkZXZpY2UgY2hhbmdlIHJlcXVlc3RzIHRvIDxkZXZmc19zZXRfZmxhZ3M+CisKK2RpbG9va3VwCXByaW50IGlub2RlIGxvb2t1cCByZXF1ZXN0cworCitkaWdldAkJcHJpbnQgVkZTIGlub2RlIGFsbG9jYXRpb25zCisKK2RpdW5saW5rCXByaW50IGlub2RlIHVubGlua3MKKworZGljaGFuZ2UJcHJpbnQgaW5vZGUgY2hhbmdlcworCitkaW1rbm9kCQlwcmludCBjYWxscyB0byBta25vZCgyKQorCitkYWxsCQlzb21lIGRlYnVnZ2luZyB0dXJuZWQgb24KKworCitPdGhlciBPcHRpb25zCis9PT09PT09PT09PT09CisKK1RoZXNlIGNvbnRyb2wgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGRldmZzLiBUaGUgb3B0aW9ucyBhcmU6CisKK21vdW50CQltb3VudCBkZXZmcyBvbnRvIC9kZXYgYXQgYm9vdCB0aW1lCisKK29ubHkJCWRpc2FibGUgbm9uLWRldmZzIGRldmljZSBub2RlcyBmb3IgZGV2ZnMtY2FwYWJsZSBkcml2ZXJzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RpcmVjdG9yeS1sb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kaXJlY3RvcnktbG9ja2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDM4MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kaXJlY3RvcnktbG9ja2luZwpAQCAtMCwwICsxLDExMyBAQAorCUxvY2tpbmcgc2NoZW1lIHVzZWQgZm9yIGRpcmVjdG9yeSBvcGVyYXRpb25zIGlzIGJhc2VkIG9uIHR3bwora2luZHMgb2YgbG9ja3MgLSBwZXItaW5vZGUgKC0+aV9zZW0pIGFuZCBwZXItZmlsZXN5c3RlbSAoLT5zX3Zmc19yZW5hbWVfc2VtKS4KKworCUZvciBvdXIgcHVycG9zZXMgYWxsIG9wZXJhdGlvbnMgZmFsbCBpbiA1IGNsYXNzZXM6CisKKzEpIHJlYWQgYWNjZXNzLiAgTG9ja2luZyBydWxlczogY2FsbGVyIGxvY2tzIGRpcmVjdG9yeSB3ZSBhcmUgYWNjZXNzaW5nLgorCisyKSBvYmplY3QgY3JlYXRpb24uICBMb2NraW5nIHJ1bGVzOiBzYW1lIGFzIGFib3ZlLgorCiszKSBvYmplY3QgcmVtb3ZhbC4gIExvY2tpbmcgcnVsZXM6IGNhbGxlciBsb2NrcyBwYXJlbnQsIGZpbmRzIHZpY3RpbSwKK2xvY2tzIHZpY3RpbSBhbmQgY2FsbHMgdGhlIG1ldGhvZC4KKworNCkgcmVuYW1lKCkgdGhhdCBpcyBfbm90XyBjcm9zcy1kaXJlY3RvcnkuICBMb2NraW5nIHJ1bGVzOiBjYWxsZXIgbG9ja3MKK3RoZSBwYXJlbnQsIGZpbmRzIHNvdXJjZSBhbmQgdGFyZ2V0LCBpZiB0YXJnZXQgYWxyZWFkeSBleGlzdHMgLSBsb2NrcyBpdAorYW5kIHRoZW4gY2FsbHMgdGhlIG1ldGhvZC4KKworNSkgbGluayBjcmVhdGlvbi4gIExvY2tpbmcgcnVsZXM6CisJKiBsb2NrIHBhcmVudAorCSogY2hlY2sgdGhhdCBzb3VyY2UgaXMgbm90IGEgZGlyZWN0b3J5CisJKiBsb2NrIHNvdXJjZQorCSogY2FsbCB0aGUgbWV0aG9kLgorCis2KSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lLiAgVGhlIHRyaWNraWVzdCBpbiB0aGUgd2hvbGUgYnVuY2guICBMb2NraW5nCitydWxlczoKKwkqIGxvY2sgdGhlIGZpbGVzeXN0ZW0KKwkqIGxvY2sgcGFyZW50cyBpbiAiYW5jZXN0b3JzIGZpcnN0IiBvcmRlci4KKwkqIGZpbmQgc291cmNlIGFuZCB0YXJnZXQuCisJKiBpZiBvbGQgcGFyZW50IGlzIGVxdWFsIHRvIG9yIGlzIGEgZGVzY2VuZGVudCBvZiB0YXJnZXQKKwkJZmFpbCB3aXRoIC1FTk9URU1QVFkKKwkqIGlmIG5ldyBwYXJlbnQgaXMgZXF1YWwgdG8gb3IgaXMgYSBkZXNjZW5kZW50IG9mIHNvdXJjZQorCQlmYWlsIHdpdGggLUVMT09QCisJKiBpZiB0YXJnZXQgZXhpc3RzIC0gbG9jayBpdC4KKwkqIGNhbGwgdGhlIG1ldGhvZC4KKworCitUaGUgcnVsZXMgYWJvdmUgb2J2aW91c2x5IGd1YXJhbnRlZSB0aGF0IGFsbCBkaXJlY3RvcmllcyB0aGF0IGFyZSBnb2luZyB0byBiZQorcmVhZCwgbW9kaWZpZWQgb3IgcmVtb3ZlZCBieSBtZXRob2Qgd2lsbCBiZSBsb2NrZWQgYnkgY2FsbGVyLgorCisKK0lmIG5vIGRpcmVjdG9yeSBpcyBpdHMgb3duIGFuY2VzdG9yLCB0aGUgc2NoZW1lIGFib3ZlIGlzIGRlYWRsb2NrLWZyZWUuCitQcm9vZjoKKworCUZpcnN0IG9mIGFsbCwgYXQgYW55IG1vbWVudCB3ZSBoYXZlIGEgcGFydGlhbCBvcmRlcmluZyBvZiB0aGUKK29iamVjdHMgLSBBIDwgQiBpZmYgQSBpcyBhbiBhbmNlc3RvciBvZiBCLgorCisJVGhhdCBvcmRlcmluZyBjYW4gY2hhbmdlLiAgSG93ZXZlciwgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorCisoMSkgaWYgb2JqZWN0IHJlbW92YWwgb3Igbm9uLWNyb3NzLWRpcmVjdG9yeSByZW5hbWUgaG9sZHMgbG9jayBvbiBBIGFuZAorICAgIGF0dGVtcHRzIHRvIGFjcXVpcmUgbG9jayBvbiBCLCBBIHdpbGwgcmVtYWluIHRoZSBwYXJlbnQgb2YgQiB1bnRpbCB3ZQorICAgIGFjcXVpcmUgdGhlIGxvY2sgb24gQi4gIChQcm9vZjogb25seSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lIGNhbiBjaGFuZ2UKKyAgICB0aGUgcGFyZW50IG9mIG9iamVjdCBhbmQgaXQgd291bGQgaGF2ZSB0byBsb2NrIHRoZSBwYXJlbnQpLgorCisoMikgaWYgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZSBob2xkcyB0aGUgbG9jayBvbiBmaWxlc3lzdGVtLCBvcmRlciB3aWxsIG5vdAorICAgIGNoYW5nZSB1bnRpbCByZW5hbWUgYWNxdWlyZXMgYWxsIGxvY2tzLiAgKFByb29mOiBvdGhlciBjcm9zcy1kaXJlY3RvcnkKKyAgICByZW5hbWVzIHdpbGwgYmUgYmxvY2tlZCBvbiBmaWxlc3lzdGVtIGxvY2sgYW5kIHdlIGRvbid0IHN0YXJ0IGNoYW5naW5nCisgICAgdGhlIG9yZGVyIHVudGlsIHdlIGhhZCBhY3F1aXJlZCBhbGwgbG9ja3MpLgorCisoMykgYW55IG9wZXJhdGlvbiBob2xkcyBhdCBtb3N0IG9uZSBsb2NrIG9uIG5vbi1kaXJlY3Rvcnkgb2JqZWN0IGFuZAorICAgIHRoYXQgbG9jayBpcyBhY3F1aXJlZCBhZnRlciBhbGwgb3RoZXIgbG9ja3MuICAoUHJvb2Y6IHNlZSBkZXNjcmlwdGlvbnMKKyAgICBvZiBvcGVyYXRpb25zKS4KKworCU5vdyBjb25zaWRlciB0aGUgbWluaW1hbCBkZWFkbG9jay4gIEVhY2ggcHJvY2VzcyBpcyBibG9ja2VkIG9uCithdHRlbXB0IHRvIGFjcXVpcmUgc29tZSBsb2NrIGFuZCBhbHJlYWR5IGhvbGRzIGF0IGxlYXN0IG9uZSBsb2NrLiAgTGV0J3MKK2NvbnNpZGVyIHRoZSBzZXQgb2YgY29udGVuZGVkIGxvY2tzLiAgRmlyc3Qgb2YgYWxsLCBmaWxlc3lzdGVtIGxvY2sgaXMKK25vdCBjb250ZW5kZWQsIHNpbmNlIGFueSBwcm9jZXNzIGJsb2NrZWQgb24gaXQgaXMgbm90IGhvbGRpbmcgYW55IGxvY2tzLgorVGh1cyBhbGwgcHJvY2Vzc2VzIGFyZSBibG9ja2VkIG9uIC0+aV9zZW0uCisKKwlOb24tZGlyZWN0b3J5IG9iamVjdHMgYXJlIG5vdCBjb250ZW5kZWQgZHVlIHRvICgzKS4gIFRodXMgbGluaworY3JlYXRpb24gY2FuJ3QgYmUgYSBwYXJ0IG9mIGRlYWRsb2NrIC0gaXQgY2FuJ3QgYmUgYmxvY2tlZCBvbiBzb3VyY2UKK2FuZCBpdCBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgaG9sZCBhbnkgbG9ja3MuCisKKwlBbnkgY29udGVuZGVkIG9iamVjdCBpcyBlaXRoZXIgaGVsZCBieSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lIG9yCitoYXMgYSBjaGlsZCB0aGF0IGlzIGFsc28gY29udGVuZGVkLiAgSW5kZWVkLCBzdXBwb3NlIHRoYXQgaXQgaXMgaGVsZCBieQorb3BlcmF0aW9uIG90aGVyIHRoYW4gY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZS4gIFRoZW4gdGhlIGxvY2sgdGhpcyBvcGVyYXRpb24KK2lzIGJsb2NrZWQgb24gYmVsb25ncyB0byBjaGlsZCBvZiB0aGF0IG9iamVjdCBkdWUgdG8gKDEpLgorCisJSXQgbWVhbnMgdGhhdCBvbmUgb2YgdGhlIG9wZXJhdGlvbnMgaXMgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZS4KK090aGVyd2lzZSB0aGUgc2V0IG9mIGNvbnRlbmRlZCBvYmplY3RzIHdvdWxkIGJlIGluZmluaXRlIC0gZWFjaCBvZiB0aGVtCit3b3VsZCBoYXZlIGEgY29udGVuZGVkIGNoaWxkIGFuZCB3ZSBoYWQgYXNzdW1lZCB0aGF0IG5vIG9iamVjdCBpcyBpdHMKK293biBkZXNjZW5kZW50LiAgTW9yZW92ZXIsIHRoZXJlIGlzIGV4YWN0bHkgb25lIGNyb3NzLWRpcmVjdG9yeSByZW5hbWUKKyhzZWUgYWJvdmUpLgorCisJQ29uc2lkZXIgdGhlIG9iamVjdCBibG9ja2luZyB0aGUgY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZS4gIE9uZQorb2YgaXRzIGRlc2NlbmRlbnRzIGlzIGxvY2tlZCBieSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lIChvdGhlcndpc2Ugd2UKK3dvdWxkIGFnYWluIGhhdmUgYW4gaW5maW5pdGUgc2V0IG9mIG9mIGNvbnRlbmRlZCBvYmplY3RzKS4gIEJ1dCB0aGF0CittZWFucyB0aGF0IGNyb3NzLWRpcmVjdG9yeSByZW5hbWUgaXMgdGFraW5nIGxvY2tzIG91dCBvZiBvcmRlci4gIER1ZQordG8gKDIpIHRoZSBvcmRlciBoYWRuJ3QgY2hhbmdlZCBzaW5jZSB3ZSBoYWQgYWNxdWlyZWQgZmlsZXN5c3RlbSBsb2NrLgorQnV0IGxvY2tpbmcgcnVsZXMgZm9yIGNyb3NzLWRpcmVjdG9yeSByZW5hbWUgZ3VhcmFudGVlIHRoYXQgd2UgZG8gbm90Cit0cnkgdG8gYWNxdWlyZSBsb2NrIG9uIGRlc2NlbmRlbnQgYmVmb3JlIHRoZSBsb2NrIG9uIGFuY2VzdG9yLgorQ29udHJhZGljdGlvbi4gIEkuZS4gIGRlYWRsb2NrIGlzIGltcG9zc2libGUuICBRLkUuRC4KKworCisJVGhlc2Ugb3BlcmF0aW9ucyBhcmUgZ3VhcmFudGVlZCB0byBhdm9pZCBsb29wIGNyZWF0aW9uLiAgSW5kZWVkLAordGhlIG9ubHkgb3BlcmF0aW9uIHRoYXQgY291bGQgaW50cm9kdWNlIGxvb3BzIGlzIGNyb3NzLWRpcmVjdG9yeSByZW5hbWUuCitTaW5jZSB0aGUgb25seSBuZXcgKHBhcmVudCwgY2hpbGQpIHBhaXIgYWRkZWQgYnkgcmVuYW1lKCkgaXMgKG5ldyBwYXJlbnQsCitzb3VyY2UpLCBzdWNoIGxvb3Agd291bGQgaGF2ZSB0byBjb250YWluIHRoZXNlIG9iamVjdHMgYW5kIHRoZSByZXN0IG9mIGl0Cit3b3VsZCBoYXZlIHRvIGV4aXN0IGJlZm9yZSByZW5hbWUoKS4gIEkuZS4gYXQgdGhlIG1vbWVudCBvZiBsb29wIGNyZWF0aW9uCityZW5hbWUoKSByZXNwb25zaWJsZSBmb3IgdGhhdCB3b3VsZCBiZSBob2xkaW5nIGZpbGVzeXN0ZW0gbG9jayBhbmQgbmV3IHBhcmVudAord291bGQgaGF2ZSB0byBiZSBlcXVhbCB0byBvciBhIGRlc2NlbmRlbnQgb2Ygc291cmNlLiAgQnV0IHRoYXQgbWVhbnMgdGhhdAorbmV3IHBhcmVudCBoYWQgYmVlbiBlcXVhbCB0byBvciBhIGRlc2NlbmRlbnQgb2Ygc291cmNlIHNpbmNlIHRoZSBtb21lbnQgd2hlbgord2UgaGFkIGFjcXVpcmVkIGZpbGVzeXN0ZW0gbG9jayBhbmQgcmVuYW1lKCkgd291bGQgZmFpbCB3aXRoIC1FTE9PUCBpbiB0aGF0CitjYXNlLgorCisJV2hpbGUgdGhpcyBsb2NraW5nIHNjaGVtZSB3b3JrcyBmb3IgYXJiaXRyYXJ5IERBR3MsIGl0IHJlbGllcyBvbgorYWJpbGl0eSB0byBjaGVjayB0aGF0IGRpcmVjdG9yeSBpcyBhIGRlc2NlbmRlbnQgb2YgYW5vdGhlciBvYmplY3QuICBDdXJyZW50CitpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgZGlyZWN0b3J5IGdyYXBoIGlzIGEgdHJlZS4gIFRoaXMgYXNzdW1wdGlvbiBpcworYWxzbyBwcmVzZXJ2ZWQgYnkgYWxsIG9wZXJhdGlvbnMgKGNyb3NzLWRpcmVjdG9yeSByZW5hbWUgb24gYSB0cmVlIHRoYXQgd291bGQKK25vdCBpbnRyb2R1Y2UgYSBjeWNsZSB3aWxsIGxlYXZlIGl0IGEgdHJlZSBhbmQgbGluaygpIGZhaWxzIGZvciBkaXJlY3RvcmllcykuCisKKwlOb3RpY2UgdGhhdCAiZGlyZWN0b3J5IiBpbiB0aGUgYWJvdmUgPT0gImFueXRoaW5nIHRoYXQgbWlnaHQgaGF2ZQorY2hpbGRyZW4iLCBzbyBpZiB3ZSBhcmUgZ29pbmcgdG8gaW50cm9kdWNlIGh5YnJpZCBvYmplY3RzIHdlIHdpbGwgbmVlZAorZWl0aGVyIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmsoMikgZG9lc24ndCB3b3JrIGZvciB0aGVtIG9yIHRvIG1ha2UgY2hhbmdlcworaW4gaXNfc3ViZGlyKCkgdGhhdCB3b3VsZCBtYWtlIGl0IHdvcmsgZXZlbiBpbiBwcmVzZW5jZSBvZiBzdWNoIGJlYXN0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Y2I5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CkBAIC0wLDAgKzEsMzgzIEBACisKK1RoZSBTZWNvbmQgRXh0ZW5kZWQgRmlsZXN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2V4dDIgd2FzIG9yaWdpbmFsbHkgcmVsZWFzZWQgaW4gSmFudWFyeSAxOTkzLiAgV3JpdHRlbiBieSBSXCdlbXkgQ2FyZCwKK1RoZW9kb3JlIFRzJ28gYW5kIFN0ZXBoZW4gVHdlZWRpZSwgaXQgd2FzIGEgbWFqb3IgcmV3cml0ZSBvZiB0aGUKK0V4dGVuZGVkIEZpbGVzeXN0ZW0uICBJdCBpcyBjdXJyZW50bHkgc3RpbGwgKEFwcmlsIDIwMDEpIHRoZSBwcmVkb21pbmFudAorZmlsZXN5c3RlbSBpbiB1c2UgYnkgTGludXguICBUaGVyZSBhcmUgYWxzbyBpbXBsZW1lbnRhdGlvbnMgYXZhaWxhYmxlCitmb3IgTmV0QlNELCBGcmVlQlNELCB0aGUgR05VIEhVUkQsIFdpbmRvd3MgOTUvOTgvTlQsIE9TLzIgYW5kIFJJU0MgT1MuCisKK09wdGlvbnMKKz09PT09PT0KKworTW9zdCBkZWZhdWx0cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlsZXN5c3RlbSBzdXBlcmJsb2NrLCBhbmQgY2FuIGJlCitzZXQgdXNpbmcgdHVuZTJmcyg4KS4gS2VybmVsLWRldGVybWluZWQgZGVmYXVsdHMgYXJlIGluZGljYXRlZCBieSAoKikuCisKK2JzZGRmCQkJKCopCU1ha2VzIGBkZicgYWN0IGxpa2UgQlNELgorbWluaXhkZgkJCQlNYWtlcyBgZGYnIGFjdCBsaWtlIE1pbml4LgorCitjaGVjawkJCQlDaGVjayBibG9jayBhbmQgaW5vZGUgYml0bWFwcyBhdCBtb3VudCB0aW1lCisJCQkJKHJlcXVpcmVzIENPTkZJR19FWFQyX0NIRUNLKS4KK2NoZWNrPW5vbmUsIG5vY2hlY2sJKCopCURvbid0IGRvIGV4dHJhIGNoZWNraW5nIG9mIGJpdG1hcHMgb24gbW91bnQKKwkJCQkoY2hlY2s9bm9ybWFsIGFuZCBjaGVjaz1zdHJpY3Qgb3B0aW9ucyByZW1vdmVkKQorCitkZWJ1ZwkJCQlFeHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgc2VudCB0byB0aGUKKwkJCQlrZXJuZWwgc3lzbG9nLiAgVXNlZnVsIGZvciBkZXZlbG9wZXJzLgorCitlcnJvcnM9Y29udGludWUJCQlLZWVwIGdvaW5nIG9uIGEgZmlsZXN5c3RlbSBlcnJvci4KK2Vycm9ycz1yZW1vdW50LXJvCQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KK2Vycm9ycz1wYW5pYwkJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KKworZ3JwaWQsIGJzZGdyb3VwcwkJR2l2ZSBvYmplY3RzIHRoZSBzYW1lIGdyb3VwIElEIGFzIHRoZWlyIHBhcmVudC4KK25vZ3JwaWQsIHN5c3Zncm91cHMJCU5ldyBvYmplY3RzIGhhdmUgdGhlIGdyb3VwIElEIG9mIHRoZWlyIGNyZWF0b3IuCisKK25vdWlkMzIJCQkJVXNlIDE2LWJpdCBVSURzIGFuZCBHSURzLgorCitvbGRhbGxvYwkJCUVuYWJsZSB0aGUgb2xkIGJsb2NrIGFsbG9jYXRvci4gT3Jsb3Ygc2hvdWxkCisJCQkJaGF2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UsIHdlJ2QgbGlrZSB0byBnZXQgc29tZQorCQkJCWZlZWRiYWNrIGlmIGl0J3MgdGhlIGNvbnRyYXJ5IGZvciB5b3UuCitvcmxvdgkJCSgqKQlVc2UgdGhlIE9ybG92IGJsb2NrIGFsbG9jYXRvci4KKwkJCQkoU2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzE0NjMzLyBhbmQKKwkJCQlodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8xNDQ0Ni8uKQorCityZXN1aWQ9bgkJCVRoZSB1c2VyIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KK3Jlc2dpZD1uCQkJVGhlIGdyb3VwIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKworc2I9bgkJCQlVc2UgYWx0ZXJuYXRlIHN1cGVyYmxvY2sgYXQgdGhpcyBsb2NhdGlvbi4KKwordXNlcl94YXR0cgkJCUVuYWJsZSAidXNlci4iIFBPU0lYIEV4dGVuZGVkIEF0dHJpYnV0ZXMKKwkJCQkocmVxdWlyZXMgQ09ORklHX0VYVDJfRlNfWEFUVFIpLgorCQkJCVNlZSBhbHNvIGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQKK25vdXNlcl94YXR0cgkJCURvbid0IHN1cHBvcnQgInVzZXIuIiBleHRlbmRlZCBhdHRyaWJ1dGVzLgorCithY2wJCQkJRW5hYmxlIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIHN1cHBvcnQKKwkJCQkocmVxdWlyZXMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMKS4KKwkJCQlTZWUgYWxzbyBodHRwOi8vYWNsLmJlc3RiaXRzLmF0Citub2FjbAkJCQlEb24ndCBzdXBwb3J0IFBPU0lYIEFDTHMuCisKK25vYmgJCQkJRG8gbm90IGF0dGFjaCBidWZmZXJfaGVhZHMgdG8gZmlsZSBwYWdlY2FjaGUuCisKK2dycHF1b3RhLG5vcXVvdGEscXVvdGEsdXNycXVvdGEJUXVvdGEgb3B0aW9ucyBhcmUgc2lsZW50bHkgaWdub3JlZCBieSBleHQyLgorCisKK1NwZWNpZmljYXRpb24KKz09PT09PT09PT09PT0KKworZXh0MiBzaGFyZXMgbWFueSBwcm9wZXJ0aWVzIHdpdGggdHJhZGl0aW9uYWwgVW5peCBmaWxlc3lzdGVtcy4gIEl0IGhhcwordGhlIGNvbmNlcHRzIG9mIGJsb2NrcywgaW5vZGVzIGFuZCBkaXJlY3Rvcmllcy4gIEl0IGhhcyBzcGFjZSBpbiB0aGUKK3NwZWNpZmljYXRpb24gZm9yIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSwgZnJhZ21lbnRzLCB1bmRlbGV0aW9uIGFuZAorY29tcHJlc3Npb24gdGhvdWdoIHRoZXNlIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIChzb21lIGFyZSBhdmFpbGFibGUgYXMKK3NlcGFyYXRlIHBhdGNoZXMpLiAgVGhlcmUgaXMgYWxzbyBhIHZlcnNpb25pbmcgbWVjaGFuaXNtIHRvIGFsbG93IG5ldworZmVhdHVyZXMgKHN1Y2ggYXMgam91cm5hbGxpbmcpIHRvIGJlIGFkZGVkIGluIGEgbWF4aW1hbGx5IGNvbXBhdGlibGUKK21hbm5lci4KKworQmxvY2tzCistLS0tLS0KKworVGhlIHNwYWNlIGluIHRoZSBkZXZpY2Ugb3IgZmlsZSBpcyBzcGxpdCB1cCBpbnRvIGJsb2Nrcy4gIFRoZXNlIGFyZQorYSBmaXhlZCBzaXplLCBvZiAxMDI0LCAyMDQ4IG9yIDQwOTYgYnl0ZXMgKDgxOTIgYnl0ZXMgb24gQWxwaGEgc3lzdGVtcyksCit3aGljaCBpcyBkZWNpZGVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4gIFNtYWxsZXIgYmxvY2tzIG1lYW4KK2xlc3Mgd2FzdGVkIHNwYWNlIHBlciBmaWxlLCBidXQgcmVxdWlyZSBzbGlnaHRseSBtb3JlIGFjY291bnRpbmcgb3ZlcmhlYWQsCithbmQgYWxzbyBpbXBvc2Ugb3RoZXIgbGltaXRzIG9uIHRoZSBzaXplIG9mIGZpbGVzIGFuZCB0aGUgZmlsZXN5c3RlbS4KKworQmxvY2sgR3JvdXBzCistLS0tLS0tLS0tLS0KKworQmxvY2tzIGFyZSBjbHVzdGVyZWQgaW50byBibG9jayBncm91cHMgaW4gb3JkZXIgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24KK2FuZCBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIGhlYWQgc2Vla2luZyB3aGVuIHJlYWRpbmcgYSBsYXJnZSBhbW91bnQKK29mIGNvbnNlY3V0aXZlIGRhdGEuICBJbmZvcm1hdGlvbiBhYm91dCBlYWNoIGJsb2NrIGdyb3VwIGlzIGtlcHQgaW4gYQorZGVzY3JpcHRvciB0YWJsZSBzdG9yZWQgaW4gdGhlIGJsb2NrKHMpIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzdXBlcmJsb2NrLgorVHdvIGJsb2NrcyBuZWFyIHRoZSBzdGFydCBvZiBlYWNoIGdyb3VwIGFyZSByZXNlcnZlZCBmb3IgdGhlIGJsb2NrIHVzYWdlCitiaXRtYXAgYW5kIHRoZSBpbm9kZSB1c2FnZSBiaXRtYXAgd2hpY2ggc2hvdyB3aGljaCBibG9ja3MgYW5kIGlub2RlcworYXJlIGluIHVzZS4gIFNpbmNlIGVhY2ggYml0bWFwIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgYmxvY2ssIHRoaXMgbWVhbnMKK3RoYXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIGJsb2NrIGdyb3VwIGlzIDggdGltZXMgdGhlIHNpemUgb2YgYSBibG9jay4KKworVGhlIGJsb2NrKHMpIGZvbGxvd2luZyB0aGUgYml0bWFwcyBpbiBlYWNoIGJsb2NrIGdyb3VwIGFyZSBkZXNpZ25hdGVkCithcyB0aGUgaW5vZGUgdGFibGUgZm9yIHRoYXQgYmxvY2sgZ3JvdXAgYW5kIHRoZSByZW1haW5kZXIgYXJlIHRoZSBkYXRhCitibG9ja3MuICBUaGUgYmxvY2sgYWxsb2NhdGlvbiBhbGdvcml0aG0gYXR0ZW1wdHMgdG8gYWxsb2NhdGUgZGF0YSBibG9ja3MKK2luIHRoZSBzYW1lIGJsb2NrIGdyb3VwIGFzIHRoZSBpbm9kZSB3aGljaCBjb250YWlucyB0aGVtLgorCitUaGUgU3VwZXJibG9jaworLS0tLS0tLS0tLS0tLS0KKworVGhlIHN1cGVyYmxvY2sgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvZgordGhlIGZpbGluZyBzeXN0ZW0uICBUaGUgcHJpbWFyeSBjb3B5IG9mIHRoZSBzdXBlcmJsb2NrIGlzIHN0b3JlZCBhdCBhbgorb2Zmc2V0IG9mIDEwMjQgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSwgYW5kIGl0IGlzIGVzc2VudGlhbAordG8gbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0uICBTaW5jZSBpdCBpcyBzbyBpbXBvcnRhbnQsIGJhY2t1cCBjb3BpZXMgb2YKK3RoZSBzdXBlcmJsb2NrIGFyZSBzdG9yZWQgaW4gYmxvY2sgZ3JvdXBzIHRocm91Z2hvdXQgdGhlIGZpbGVzeXN0ZW0uCitUaGUgZmlyc3QgdmVyc2lvbiBvZiBleHQyIChyZXZpc2lvbiAwKSBzdG9yZXMgYSBjb3B5IGF0IHRoZSBzdGFydCBvZgorZXZlcnkgYmxvY2sgZ3JvdXAsIGFsb25nIHdpdGggYmFja3VwcyBvZiB0aGUgZ3JvdXAgZGVzY3JpcHRvciBibG9jayhzKS4KK0JlY2F1c2UgdGhpcyBjYW4gY29uc3VtZSBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2Ygc3BhY2UgZm9yIGxhcmdlCitmaWxlc3lzdGVtcywgbGF0ZXIgcmV2aXNpb25zIGNhbiBvcHRpb25hbGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mIGJhY2t1cAorY29waWVzIGJ5IG9ubHkgcHV0dGluZyBiYWNrdXBzIGluIHNwZWNpZmljIGdyb3VwcyAodGhpcyBpcyB0aGUgc3BhcnNlCitzdXBlcmJsb2NrIGZlYXR1cmUpLiAgVGhlIGdyb3VwcyBjaG9zZW4gYXJlIDAsIDEgYW5kIHBvd2VycyBvZiAzLCA1IGFuZCA3LgorCitUaGUgaW5mb3JtYXRpb24gaW4gdGhlIHN1cGVyYmxvY2sgY29udGFpbnMgZmllbGRzIHN1Y2ggYXMgdGhlIHRvdGFsCitudW1iZXIgb2YgaW5vZGVzIGFuZCBibG9ja3MgaW4gdGhlIGZpbGVzeXN0ZW0gYW5kIGhvdyBtYW55IGFyZSBmcmVlLAoraG93IG1hbnkgaW5vZGVzIGFuZCBibG9ja3MgYXJlIGluIGVhY2ggYmxvY2sgZ3JvdXAsIHdoZW4gdGhlIGZpbGVzeXN0ZW0KK3dhcyBtb3VudGVkIChhbmQgaWYgaXQgd2FzIGNsZWFubHkgdW5tb3VudGVkKSwgd2hlbiBpdCB3YXMgbW9kaWZpZWQsCit3aGF0IHZlcnNpb24gb2YgdGhlIGZpbGVzeXN0ZW0gaXQgaXMgKHNlZSB0aGUgUmV2aXNpb25zIHNlY3Rpb24gYmVsb3cpCithbmQgd2hpY2ggT1MgY3JlYXRlZCBpdC4KKworSWYgdGhlIGZpbGVzeXN0ZW0gaXMgcmV2aXNpb24gMSBvciBoaWdoZXIsIHRoZW4gdGhlcmUgYXJlIGV4dHJhIGZpZWxkcywKK3N1Y2ggYXMgYSB2b2x1bWUgbmFtZSwgYSB1bmlxdWUgaWRlbnRpZmljYXRpb24gbnVtYmVyLCB0aGUgaW5vZGUgc2l6ZSwKK2FuZCBzcGFjZSBmb3Igb3B0aW9uYWwgZmlsZXN5c3RlbSBmZWF0dXJlcyB0byBzdG9yZSBjb25maWd1cmF0aW9uIGluZm8uCisKK0FsbCBmaWVsZHMgaW4gdGhlIHN1cGVyYmxvY2sgKGFzIGluIGFsbCBvdGhlciBleHQyIHN0cnVjdHVyZXMpIGFyZSBzdG9yZWQKK29uIHRoZSBkaXNjIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbyBhIGZpbGVzeXN0ZW0gaXMgcG9ydGFibGUgYmV0d2VlbgorbWFjaGluZXMgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB3aGF0IG1hY2hpbmUgaXQgd2FzIGNyZWF0ZWQgb24uCisKK0lub2RlcworLS0tLS0tCisKK1RoZSBpbm9kZSAoaW5kZXggbm9kZSkgaXMgYSBmdW5kYW1lbnRhbCBjb25jZXB0IGluIHRoZSBleHQyIGZpbGVzeXN0ZW0uCitFYWNoIG9iamVjdCBpbiB0aGUgZmlsZXN5c3RlbSBpcyByZXByZXNlbnRlZCBieSBhbiBpbm9kZS4gIFRoZSBpbm9kZQorc3RydWN0dXJlIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrcyB3aGljaCBjb250YWluIHRoZQorZGF0YSBoZWxkIGluIHRoZSBvYmplY3QgYW5kIGFsbCBvZiB0aGUgbWV0YWRhdGEgYWJvdXQgYW4gb2JqZWN0IGV4Y2VwdAoraXRzIG5hbWUuICBUaGUgbWV0YWRhdGEgYWJvdXQgYW4gb2JqZWN0IGluY2x1ZGVzIHRoZSBwZXJtaXNzaW9ucywgb3duZXIsCitncm91cCwgZmxhZ3MsIHNpemUsIG51bWJlciBvZiBibG9ja3MgdXNlZCwgYWNjZXNzIHRpbWUsIGNoYW5nZSB0aW1lLAorbW9kaWZpY2F0aW9uIHRpbWUsIGRlbGV0aW9uIHRpbWUsIG51bWJlciBvZiBsaW5rcywgZnJhZ21lbnRzLCB2ZXJzaW9uCisoZm9yIE5GUykgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKEVBcykgYW5kL29yIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKS4KKworVGhlcmUgYXJlIHNvbWUgcmVzZXJ2ZWQgZmllbGRzIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGluIHRoZSBpbm9kZQorc3RydWN0dXJlIGFuZCBzZXZlcmFsIHdoaWNoIGFyZSBvdmVybG9hZGVkLiAgT25lIGZpZWxkIGlzIHJlc2VydmVkIGZvciB0aGUKK2RpcmVjdG9yeSBBQ0wgaWYgdGhlIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZCBhbHRlcm5hdGVseSBmb3IgdGhlIHRvcCAzMgorYml0cyBvZiB0aGUgZmlsZSBzaXplIGlmIHRoZSBpbm9kZSBpcyBhIHJlZ3VsYXIgZmlsZSAoYWxsb3dpbmcgZmlsZSBzaXplcworbGFyZ2VyIHRoYW4gMkdCKS4gIFRoZSB0cmFuc2xhdG9yIGZpZWxkIGlzIHVudXNlZCB1bmRlciBMaW51eCwgYnV0IGlzIHVzZWQKK2J5IHRoZSBIVVJEIHRvIHJlZmVyZW5jZSB0aGUgaW5vZGUgb2YgYSBwcm9ncmFtIHdoaWNoIHdpbGwgYmUgdXNlZCB0bworaW50ZXJwcmV0IHRoaXMgb2JqZWN0LiAgTW9zdCBvZiB0aGUgcmVtYWluaW5nIHJlc2VydmVkIGZpZWxkcyBoYXZlIGJlZW4KK3VzZWQgdXAgZm9yIGJvdGggTGludXggYW5kIHRoZSBIVVJEIGZvciBsYXJnZXIgb3duZXIgYW5kIGdyb3VwIGZpZWxkcywKK1RoZSBIVVJEIGFsc28gaGFzIGEgbGFyZ2VyIG1vZGUgZmllbGQgc28gaXQgdXNlcyBhbm90aGVyIG9mIHRoZSByZW1haW5pbmcKK2ZpZWxkcyB0byBzdG9yZSB0aGUgZXh0cmEgbW9yZSBiaXRzLgorCitUaGVyZSBhcmUgcG9pbnRlcnMgdG8gdGhlIGZpcnN0IDEyIGJsb2NrcyB3aGljaCBjb250YWluIHRoZSBmaWxlJ3MgZGF0YQoraW4gdGhlIGlub2RlLiAgVGhlcmUgaXMgYSBwb2ludGVyIHRvIGFuIGluZGlyZWN0IGJsb2NrICh3aGljaCBjb250YWlucworcG9pbnRlcnMgdG8gdGhlIG5leHQgc2V0IG9mIGJsb2NrcyksIGEgcG9pbnRlciB0byBhIGRvdWJseS1pbmRpcmVjdAorYmxvY2sgKHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGluZGlyZWN0IGJsb2NrcykgYW5kIGEgcG9pbnRlciB0byBhCit0cmVibHktaW5kaXJlY3QgYmxvY2sgKHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGRvdWJseS1pbmRpcmVjdCBibG9ja3MpLgorCitUaGUgZmxhZ3MgZmllbGQgY29udGFpbnMgc29tZSBleHQyLXNwZWNpZmljIGZsYWdzIHdoaWNoIGFyZW4ndCBjYXRlcmVkCitmb3IgYnkgdGhlIHN0YW5kYXJkIGNobW9kIGZsYWdzLiAgVGhlc2UgZmxhZ3MgY2FuIGJlIGxpc3RlZCB3aXRoIGxzYXR0cgorYW5kIGNoYW5nZWQgd2l0aCB0aGUgY2hhdHRyIGNvbW1hbmQsIGFuZCBhbGxvdyBzcGVjaWZpYyBmaWxlc3lzdGVtCitiZWhhdmlvdXIgb24gYSBwZXItZmlsZSBiYXNpcy4gIFRoZXJlIGFyZSBmbGFncyBmb3Igc2VjdXJlIGRlbGV0aW9uLAordW5kZWxldGFibGUsIGNvbXByZXNzaW9uLCBzeW5jaHJvbm91cyB1cGRhdGVzLCBpbW11dGFiaWxpdHksIGFwcGVuZC1vbmx5LAorZHVtcGFibGUsIG5vLWF0aW1lLCBpbmRleGVkIGRpcmVjdG9yaWVzLCBhbmQgZGF0YS1qb3VybmFsaW5nLiAgTm90IGFsbAorb2YgdGhlc2UgYXJlIHN1cHBvcnRlZCB5ZXQuCisKK0RpcmVjdG9yaWVzCistLS0tLS0tLS0tLQorCitBIGRpcmVjdG9yeSBpcyBhIGZpbGVzeXN0ZW0gb2JqZWN0IGFuZCBoYXMgYW4gaW5vZGUganVzdCBsaWtlIGEgZmlsZS4KK0l0IGlzIGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBmaWxlIGNvbnRhaW5pbmcgcmVjb3JkcyB3aGljaCBhc3NvY2lhdGUKK2VhY2ggbmFtZSB3aXRoIGFuIGlub2RlIG51bWJlci4gIExhdGVyIHJldmlzaW9ucyBvZiB0aGUgZmlsZXN5c3RlbSBhbHNvCitlbmNvZGUgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCAoZmlsZSwgZGlyZWN0b3J5LCBzeW1saW5rLCBkZXZpY2UsIGZpZm8sCitzb2NrZXQpIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNoZWNrIHRoZSBpbm9kZSBpdHNlbGYgZm9yIHRoaXMgaW5mb3JtYXRpb24KKyhzdXBwb3J0IGZvciB0YWtpbmcgYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSBkb2VzIG5vdCB5ZXQgZXhpc3QgaW4KK0dsaWJjIDIuMikuCisKK1RoZSBpbm9kZSBhbGxvY2F0aW9uIGNvZGUgdHJpZXMgdG8gYXNzaWduIGlub2RlcyB3aGljaCBhcmUgaW4gdGhlIHNhbWUKK2Jsb2NrIGdyb3VwIGFzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhleSBhcmUgZmlyc3QgY3JlYXRlZC4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZXh0MiB1c2VzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHRvIHN0b3JlCit0aGUgZmlsZW5hbWVzIGluIHRoZSBkaXJlY3Rvcnk7IGEgcGVuZGluZyBlbmhhbmNlbWVudCB1c2VzIGhhc2hpbmcgb2YgdGhlCitmaWxlbmFtZXMgdG8gYWxsb3cgbG9va3VwIHdpdGhvdXQgdGhlIG5lZWQgdG8gc2NhbiB0aGUgZW50aXJlIGRpcmVjdG9yeS4KKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbmV2ZXIgcmVtb3ZlcyBlbXB0eSBkaXJlY3RvcnkgYmxvY2tzIG9uY2UgdGhleQoraGF2ZSBiZWVuIGFsbG9jYXRlZCB0byBob2xkIG1vcmUgZmlsZXMuCisKK1NwZWNpYWwgZmlsZXMKKy0tLS0tLS0tLS0tLS0KKworU3ltYm9saWMgbGlua3MgYXJlIGFsc28gZmlsZXN5c3RlbSBvYmplY3RzIHdpdGggaW5vZGVzLiAgVGhleSBkZXNlcnZlCitzcGVjaWFsIG1lbnRpb24gYmVjYXVzZSB0aGUgZGF0YSBmb3IgdGhlbSBpcyBzdG9yZWQgd2l0aGluIHRoZSBpbm9kZQoraXRzZWxmIGlmIHRoZSBzeW1saW5rIGlzIGxlc3MgdGhhbiA2MCBieXRlcyBsb25nLiAgSXQgdXNlcyB0aGUgZmllbGRzCit3aGljaCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIHN0b3JlIHRoZSBwb2ludGVycyB0byBkYXRhIGJsb2Nrcy4KK1RoaXMgaXMgYSB3b3J0aHdoaWxlIG9wdGltaXNhdGlvbiBhcyBpdCB3ZSBhdm9pZCBhbGxvY2F0aW5nIGEgZnVsbAorYmxvY2sgZm9yIHRoZSBzeW1saW5rLCBhbmQgbW9zdCBzeW1saW5rcyBhcmUgbGVzcyB0aGFuIDYwIGNoYXJhY3RlcnMgbG9uZy4KKworQ2hhcmFjdGVyIGFuZCBibG9jayBzcGVjaWFsIGRldmljZXMgbmV2ZXIgaGF2ZSBkYXRhIGJsb2NrcyBhc3NpZ25lZCB0bwordGhlbS4gIEluc3RlYWQsIHRoZWlyIGRldmljZSBudW1iZXIgaXMgc3RvcmVkIGluIHRoZSBpbm9kZSwgYWdhaW4gcmV1c2luZwordGhlIGZpZWxkcyB3aGljaCB3b3VsZCBiZSB1c2VkIHRvIHBvaW50IHRvIHRoZSBkYXRhIGJsb2Nrcy4KKworUmVzZXJ2ZWQgU3BhY2UKKy0tLS0tLS0tLS0tLS0tCisKK0luIGV4dDIsIHRoZXJlIGlzIGEgbWVjaGFuaXNtIGZvciByZXNlcnZpbmcgYSBjZXJ0YWluIG51bWJlciBvZiBibG9ja3MKK2ZvciBhIHBhcnRpY3VsYXIgdXNlciAobm9ybWFsbHkgdGhlIHN1cGVyLXVzZXIpLiAgVGhpcyBpcyBpbnRlbmRlZCB0bworYWxsb3cgZm9yIHRoZSBzeXN0ZW0gdG8gY29udGludWUgZnVuY3Rpb25pbmcgZXZlbiBpZiBub24tcHJpdmVsZWdlZCB1c2VycworZmlsbCB1cCBhbGwgdGhlIHNwYWNlIGF2YWlsYWJsZSB0byB0aGVtICh0aGlzIGlzIGluZGVwZW5kZW50IG9mIGZpbGVzeXN0ZW0KK3F1b3RhcykuICBJdCBhbHNvIGtlZXBzIHRoZSBmaWxlc3lzdGVtIGZyb20gZmlsbGluZyB1cCBlbnRpcmVseSB3aGljaAoraGVscHMgY29tYmF0IGZyYWdtZW50YXRpb24uCisKK0ZpbGVzeXN0ZW0gY2hlY2sKKy0tLS0tLS0tLS0tLS0tLS0KKworQXQgYm9vdCB0aW1lLCBtb3N0IHN5c3RlbXMgcnVuIGEgY29uc2lzdGVuY3kgY2hlY2sgKGUyZnNjaykgb24gdGhlaXIKK2ZpbGVzeXN0ZW1zLiAgVGhlIHN1cGVyYmxvY2sgb2YgdGhlIGV4dDIgZmlsZXN5c3RlbSBjb250YWlucyBzZXZlcmFsCitmaWVsZHMgd2hpY2ggaW5kaWNhdGUgd2hldGhlciBmc2NrIHNob3VsZCBhY3R1YWxseSBydW4gKHNpbmNlIGNoZWNraW5nCit0aGUgZmlsZXN5c3RlbSBhdCBib290IGNhbiB0YWtlIGEgbG9uZyB0aW1lIGlmIGl0IGlzIGxhcmdlKS4gIGZzY2sgd2lsbAorcnVuIGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQsIGlmIHRoZSBtYXhpbXVtIG1vdW50Citjb3VudCBoYXMgYmVlbiBleGNlZWRlZCBvciBpZiB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gY2hlY2tzIGhhcyBiZWVuCitleGNlZWRlZC4KKworRmVhdHVyZSBDb21wYXRpYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbXBhdGliaWxpdHkgZmVhdHVyZSBtZWNoYW5pc20gdXNlZCBpbiBleHQyIGlzIHNvcGhpc3RpY2F0ZWQuCitJdCBzYWZlbHkgYWxsb3dzIGZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIHRoZSBmaWxlc3lzdGVtLCB3aXRob3V0Cit1bm5lY2Vzc2FyaWx5IHNhY3JpZmljaW5nIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiB0aGUKK2ZpbGVzeXN0ZW0gY29kZS4gIFRoZSBmZWF0dXJlIGNvbXBhdGliaWxpdHkgbWVjaGFuaXNtIGlzIG5vdCBzdXBwb3J0ZWQgYnkKK3RoZSBvcmlnaW5hbCByZXZpc2lvbiAwIChFWFQyX0dPT0RfT0xEX1JFVikgb2YgZXh0MiwgYnV0IHdhcyBpbnRyb2R1Y2VkIGluCityZXZpc2lvbiAxLiAgVGhlcmUgYXJlIHRocmVlIDMyLWJpdCBmaWVsZHMsIG9uZSBmb3IgY29tcGF0aWJsZSBmZWF0dXJlcworKENPTVBBVCksIG9uZSBmb3IgcmVhZC1vbmx5IGNvbXBhdGlibGUgKFJPX0NPTVBBVCkgZmVhdHVyZXMgYW5kIG9uZSBmb3IKK2luY29tcGF0aWJsZSAoSU5DT01QQVQpIGZlYXR1cmVzLgorCitUaGVzZSBmZWF0dXJlIGZsYWdzIGhhdmUgc3BlY2lmaWMgbWVhbmluZ3MgZm9yIHRoZSBrZXJuZWwgYXMgZm9sbG93czoKKworQSBDT01QQVQgZmxhZyBpbmRpY2F0ZXMgdGhhdCBhIGZlYXR1cmUgaXMgcHJlc2VudCBpbiB0aGUgZmlsZXN5c3RlbSwKK2J1dCB0aGUgb24tZGlzayBmb3JtYXQgaXMgMTAwJSBjb21wYXRpYmxlIHdpdGggb2xkZXIgb24tZGlzayBmb3JtYXRzLCBzbworYSBrZXJuZWwgd2hpY2ggZGlkbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhpcyBmZWF0dXJlIGNvdWxkIHJlYWQvd3JpdGUKK3RoZSBmaWxlc3lzdGVtIHdpdGhvdXQgYW55IGNoYW5jZSBvZiBjb3JydXB0aW5nIHRoZSBmaWxlc3lzdGVtIChvciBldmVuCittYWtpbmcgaXQgaW5jb25zaXN0ZW50KS4gIFRoaXMgaXMgZXNzZW50aWFsbHkganVzdCBhIGZsYWcgd2hpY2ggc2F5cworInRoaXMgZmlsZXN5c3RlbSBoYXMgYSAoaGlkZGVuKSBmZWF0dXJlIiB0aGF0IHRoZSBrZXJuZWwgb3IgZTJmc2NrIG1heQord2FudCB0byBiZSBhd2FyZSBvZiAobW9yZSBvbiBlMmZzY2sgYW5kIGZlYXR1cmUgZmxhZ3MgbGF0ZXIpLiAgVGhlIGV4dDMKK0hBU19KT1VSTkFMIGZlYXR1cmUgaXMgYSBDT01QQVQgZmxhZyBiZWNhdXNlIHRoZSBleHQzIGpvdXJuYWwgaXMgc2ltcGx5CithIHJlZ3VsYXIgZmlsZSB3aXRoIGRhdGEgYmxvY2tzIGluIGl0IHNvIHRoZSBrZXJuZWwgZG9lcyBub3QgbmVlZCB0bwordGFrZSBhbnkgc3BlY2lhbCBub3RpY2Ugb2YgaXQgaWYgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGV4dDMgam91cm5hbGluZy4KKworQW4gUk9fQ09NUEFUIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIG9uLWRpc2sgZm9ybWF0IGlzIDEwMCUgY29tcGF0aWJsZQord2l0aCBvbGRlciBvbi1kaXNrIGZvcm1hdHMgZm9yIHJlYWRpbmcgKGkuZS4gdGhlIGZlYXR1cmUgZG9lcyBub3QgY2hhbmdlCit0aGUgdmlzaWJsZSBvbi1kaXNrIGZvcm1hdCkuICBIb3dldmVyLCBhbiBvbGQga2VybmVsIHdyaXRpbmcgdG8gc3VjaCBhCitmaWxlc3lzdGVtIHdvdWxkL2NvdWxkIGNvcnJ1cHQgdGhlIGZpbGVzeXN0ZW0sIHNvIHRoaXMgaXMgcHJldmVudGVkLiBUaGUKK21vc3QgY29tbW9uIHN1Y2ggZmVhdHVyZSwgU1BBUlNFX1NVUEVSLCBpcyBhbiBST19DT01QQVQgZmVhdHVyZSBiZWNhdXNlCitzcGFyc2UgZ3JvdXBzIGFsbG93IGZpbGUgZGF0YSBibG9ja3Mgd2hlcmUgc3VwZXJibG9jay9ncm91cCBkZXNjcmlwdG9yCitiYWNrdXBzIHVzZWQgdG8gbGl2ZSwgYW5kIGV4dDJfZnJlZV9ibG9ja3MoKSByZWZ1c2VzIHRvIGZyZWUgdGhlc2UgYmxvY2tzLAord2hpY2ggd291bGQgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgYml0bWFwcy4gIEFuIG9sZCBrZXJuZWwgd291bGQgYWxzbworZ2V0IGFuIGVycm9yIGlmIGl0IHRyaWVkIHRvIGZyZWUgYSBzZXJpZXMgb2YgYmxvY2tzIHdoaWNoIGNyb3NzZWQgYSBncm91cAorYm91bmRhcnksIGJ1dCB0aGlzIGlzIGEgbGVnaXRpbWF0ZSBsYXlvdXQgaW4gYSBTUEFSU0VfU1VQRVIgZmlsZXN5c3RlbS4KKworQW4gSU5DT01QQVQgZmxhZyBpbmRpY2F0ZXMgdGhlIG9uLWRpc2sgZm9ybWF0IGhhcyBjaGFuZ2VkIGluIHNvbWUKK3dheSB0aGF0IG1ha2VzIGl0IHVucmVhZGFibGUgYnkgb2xkZXIga2VybmVscywgb3Igd291bGQgb3RoZXJ3aXNlCitjYXVzZSBhIHByb2JsZW0gaWYgYW4gb2xkIGtlcm5lbCB0cmllZCB0byBtb3VudCBpdC4gIEZJTEVUWVBFIGlzIGFuCitJTkNPTVBBVCBmbGFnIGJlY2F1c2Ugb2xkZXIga2VybmVscyB3b3VsZCB0aGluayBhIGZpbGVuYW1lIHdhcyBsb25nZXIKK3RoYW4gMjU2IGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIGxlYWQgdG8gY29ycnVwdCBkaXJlY3RvcnkgbGlzdGluZ3MuCitUaGUgQ09NUFJFU1NJT04gZmxhZyBpcyBhbiBvYnZpb3VzIElOQ09NUEFUIGZsYWcgLSBpZiB0aGUga2VybmVsCitkb2Vzbid0IHVuZGVyc3RhbmQgY29tcHJlc3Npb24sIHlvdSB3b3VsZCBqdXN0IGdldCBnYXJiYWdlIGJhY2sgZnJvbQorcmVhZCgpIGluc3RlYWQgb2YgaXQgYXV0b21hdGljYWxseSBkZWNvbXByZXNzaW5nIHlvdXIgZGF0YS4gIFRoZSBleHQzCitSRUNPVkVSIGZsYWcgaXMgbmVlZGVkIHRvIHByZXZlbnQgYSBrZXJuZWwgd2hpY2ggZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUKK2V4dDMgam91cm5hbCBmcm9tIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtIHdpdGhvdXQgcmVwbGF5aW5nIHRoZSBqb3VybmFsLgorCitGb3IgZTJmc2NrLCBpdCBuZWVkcyB0byBiZSBtb3JlIHN0cmljdCB3aXRoIHRoZSBoYW5kbGluZyBvZiB0aGVzZQorZmxhZ3MgdGhhbiB0aGUga2VybmVsLiAgSWYgaXQgZG9lc24ndCB1bmRlcnN0YW5kIEFOWSBvZiB0aGUgQ09NUEFULAorUk9fQ09NUEFULCBvciBJTkNPTVBBVCBmbGFncyBpdCB3aWxsIHJlZnVzZSB0byBjaGVjayB0aGUgZmlsZXN5c3RlbSwKK2JlY2F1c2UgaXQgaGFzIG5vIHdheSBvZiB2ZXJpZnlpbmcgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgaXMgdmFsaWQKK29yIG5vdC4gIEFsbG93aW5nIGUyZnNjayB0byBzdWNjZWVkIG9uIGEgZmlsZXN5c3RlbSB3aXRoIGFuIHVua25vd24KK2ZlYXR1cmUgaXMgYSBmYWxzZSBzZW5zZSBvZiBzZWN1cml0eSBmb3IgdGhlIHVzZXIuICBSZWZ1c2luZyB0byBjaGVjaworYSBmaWxlc3lzdGVtIHdpdGggdW5rbm93biBmZWF0dXJlcyBpcyBhIGdvb2QgaW5jZW50aXZlIGZvciB0aGUgdXNlciB0bwordXBkYXRlIHRvIHRoZSBsYXRlc3QgZTJmc2NrLiAgVGhpcyBhbHNvIG1lYW5zIHRoYXQgYW55b25lIGFkZGluZyBmZWF0dXJlCitmbGFncyB0byBleHQyIGFsc28gbmVlZHMgdG8gdXBkYXRlIGUyZnNjayB0byB2ZXJpZnkgdGhlc2UgZmVhdHVyZXMuCisKK01ldGFkYXRhCistLS0tLS0tLQorCitJdCBpcyBmcmVxdWVudGx5IGNsYWltZWQgdGhhdCB0aGUgZXh0MiBpbXBsZW1lbnRhdGlvbiBvZiB3cml0aW5nCithc3luY2hyb25vdXMgbWV0YWRhdGEgaXMgZmFzdGVyIHRoYW4gdGhlIGZmcyBzeW5jaHJvbm91cyBtZXRhZGF0YQorc2NoZW1lIGJ1dCBsZXNzIHJlbGlhYmxlLiAgQm90aCBtZXRob2RzIGFyZSBlcXVhbGx5IHJlc29sdmFibGUgYnkgdGhlaXIKK3Jlc3BlY3RpdmUgZnNjayBwcm9ncmFtcy4KKworSWYgeW91J3JlIGV4Y2VwdGlvbmFsbHkgcGFyYW5vaWQsIHRoZXJlIGFyZSAzIHdheXMgb2YgbWFraW5nIG1ldGFkYXRhCit3cml0ZXMgc3luY2hyb25vdXMgb24gZXh0MjoKKworcGVyLWZpbGUgaWYgeW91IGhhdmUgdGhlIHByb2dyYW0gc291cmNlOiB1c2UgdGhlIE9fU1lOQyBmbGFnIHRvIG9wZW4oKQorcGVyLWZpbGUgaWYgeW91IGRvbid0IGhhdmUgdGhlIHNvdXJjZTogdXNlICJjaGF0dHIgK1MiIG9uIHRoZSBmaWxlCitwZXItZmlsZXN5c3RlbTogYWRkIHRoZSAic3luYyIgb3B0aW9uIHRvIG1vdW50IChvciBpbiAvZXRjL2ZzdGFiKQorCit0aGUgZmlyc3QgYW5kIGxhc3QgYXJlIG5vdCBleHQyIHNwZWNpZmljIGJ1dCBkbyBmb3JjZSB0aGUgbWV0YWRhdGEgdG8KK2JlIHdyaXR0ZW4gc3luY2hyb25vdXNseS4gIFNlZSBhbHNvIEpvdXJuYWxpbmcgYmVsb3cuCisKK0xpbWl0YXRpb25zCistLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdmFyaW91cyBsaW1pdHMgaW1wb3NlZCBieSB0aGUgb24tZGlzayBsYXlvdXQgb2YgZXh0Mi4gIE90aGVyCitsaW1pdHMgYXJlIGltcG9zZWQgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGtlcm5lbCBjb2RlLgorTWFueSBvZiB0aGUgbGltaXRzIGFyZSBkZXRlcm1pbmVkIGF0IHRoZSB0aW1lIHRoZSBmaWxlc3lzdGVtIGlzIGZpcnN0CitjcmVhdGVkLCBhbmQgZGVwZW5kIHVwb24gdGhlIGJsb2NrIHNpemUgY2hvc2VuLiAgVGhlIHJhdGlvIG9mIGlub2RlcyB0bworZGF0YSBibG9ja3MgaXMgZml4ZWQgYXQgZmlsZXN5c3RlbSBjcmVhdGlvbiB0aW1lLCBzbyB0aGUgb25seSB3YXkgdG8KK2luY3JlYXNlIHRoZSBudW1iZXIgb2YgaW5vZGVzIGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBmaWxlc3lzdGVtLgorTm8gdG9vbHMgY3VycmVudGx5IGV4aXN0IHdoaWNoIGNhbiBjaGFuZ2UgdGhlIHJhdGlvIG9mIGlub2RlcyB0byBibG9ja3MuCisKK01vc3Qgb2YgdGhlc2UgbGltaXRzIGNvdWxkIGJlIG92ZXJjb21lIHdpdGggc2xpZ2h0IGNoYW5nZXMgaW4gdGhlIG9uLWRpc2sKK2Zvcm1hdCBhbmQgdXNpbmcgYSBjb21wYXRpYmlsaXR5IGZsYWcgdG8gc2lnbmFsIHRoZSBmb3JtYXQgY2hhbmdlIChhdAordGhlIGV4cGVuc2Ugb2Ygc29tZSBjb21wYXRpYmlsaXR5KS4KKworRmlsZXN5c3RlbSBibG9jayBzaXplOiAgICAgMWtCICAgICAgICAya0IgICAgICAgIDRrQiAgICAgICAgOGtCCisKK0ZpbGUgc2l6ZSBsaW1pdDogICAgICAgICAgMTZHQiAgICAgIDI1NkdCICAgICAyMDQ4R0IgICAgIDIwNDhHQgorRmlsZXN5c3RlbSBzaXplIGxpbWl0OiAgMjA0N0dCICAgICA4MTkyR0IgICAgMTYzODRHQiAgICAzMjc2OEdCCisKK1RoZXJlIGlzIGEgMi40IGtlcm5lbCBsaW1pdCBvZiAyMDQ4R0IgZm9yIGEgc2luZ2xlIGJsb2NrIGRldmljZSwgc28gbm8KK2ZpbGVzeXN0ZW0gbGFyZ2VyIHRoYW4gdGhhdCBjYW4gYmUgY3JlYXRlZCBhdCB0aGlzIHRpbWUuICBUaGVyZSBpcyBhbHNvCithbiB1cHBlciBsaW1pdCBvbiB0aGUgYmxvY2sgc2l6ZSBpbXBvc2VkIGJ5IHRoZSBwYWdlIHNpemUgb2YgdGhlIGtlcm5lbCwKK3NvIDhrQiBibG9ja3MgYXJlIG9ubHkgYWxsb3dlZCBvbiBBbHBoYSBzeXN0ZW1zIChhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcword2hpY2ggc3VwcG9ydCBsYXJnZXIgcGFnZXMpLgorCitUaGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvZiAzMjc2OCBzdWJkaXJlY3RvcmllcyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuCisKK1RoZXJlIGlzIGEgInNvZnQiIHVwcGVyIGxpbWl0IG9mIGFib3V0IDEwLTE1ayBmaWxlcyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkKK3dpdGggdGhlIGN1cnJlbnQgbGluZWFyIGxpbmtlZC1saXN0IGRpcmVjdG9yeSBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgbGltaXQKK3N0ZW1zIGZyb20gcGVyZm9ybWFuY2UgcHJvYmxlbXMgd2hlbiBjcmVhdGluZyBhbmQgZGVsZXRpbmcgKGFuZCBhbHNvCitmaW5kaW5nKSBmaWxlcyBpbiBzdWNoIGxhcmdlIGRpcmVjdG9yaWVzLiAgVXNpbmcgYSBoYXNoZWQgZGlyZWN0b3J5IGluZGV4CisodW5kZXIgZGV2ZWxvcG1lbnQpIGFsbG93cyAxMDBrLTFNKyBmaWxlcyBpbiBhIHNpbmdsZSBkaXJlY3Rvcnkgd2l0aG91dAorcGVyZm9ybWFuY2UgcHJvYmxlbXMgKGFsdGhvdWdoIFJBTSBzaXplIGJlY29tZXMgYW4gaXNzdWUgYXQgdGhpcyBwb2ludCkuCisKK1RoZSAobWVhbmluZ2xlc3MpIGFic29sdXRlIHVwcGVyIGxpbWl0IG9mIGZpbGVzIGluIGEgc2luZ2xlIGRpcmVjdG9yeQorKGltcG9zZWQgYnkgdGhlIGZpbGUgc2l6ZSwgdGhlIHJlYWxpc3RpYyBsaW1pdCBpcyBvYnZpb3VzbHkgbXVjaCBsZXNzKQoraXMgb3ZlciAxMzAgdHJpbGxpb24gZmlsZXMuICBJdCB3b3VsZCBiZSBoaWdoZXIgZXhjZXB0IHRoZXJlIGFyZSBub3QKK2Vub3VnaCA0LWNoYXJhY3RlciBuYW1lcyB0byBtYWtlIHVwIHVuaXF1ZSBkaXJlY3RvcnkgZW50cmllcywgc28gdGhleQoraGF2ZSB0byBiZSA4IGNoYXJhY3RlciBmaWxlbmFtZXMsIGV2ZW4gdGhlbiB3ZSBhcmUgZmFpcmx5IGNsb3NlIHRvCitydW5uaW5nIG91dCBvZiB1bmlxdWUgZmlsZW5hbWVzLgorCitKb3VybmFsaW5nCistLS0tLS0tLS0tCisKK0Egam91cm5hbGluZyBleHRlbnNpb24gdG8gdGhlIGV4dDIgY29kZSBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgU3RlcGhlbgorVHdlZWRpZS4gIEl0IGF2b2lkcyB0aGUgcmlza3Mgb2YgbWV0YWRhdGEgY29ycnVwdGlvbiBhbmQgdGhlIG5lZWQgdG8KK3dhaXQgZm9yIGUyZnNjayB0byBjb21wbGV0ZSBhZnRlciBhIGNyYXNoLCB3aXRob3V0IHJlcXVpcmluZyBhIGNoYW5nZQordG8gdGhlIG9uLWRpc2sgZXh0MiBsYXlvdXQuICBJbiBhIG51dHNoZWxsLCB0aGUgam91cm5hbCBpcyBhIHJlZ3VsYXIKK2ZpbGUgd2hpY2ggc3RvcmVzIHdob2xlIG1ldGFkYXRhIChhbmQgb3B0aW9uYWxseSBkYXRhKSBibG9ja3MgdGhhdCBoYXZlCitiZWVuIG1vZGlmaWVkLCBwcmlvciB0byB3cml0aW5nIHRoZW0gaW50byB0aGUgZmlsZXN5c3RlbS4gIFRoaXMgbWVhbnMKK2l0IGlzIHBvc3NpYmxlIHRvIGFkZCBhIGpvdXJuYWwgdG8gYW4gZXhpc3RpbmcgZXh0MiBmaWxlc3lzdGVtIHdpdGhvdXQKK3RoZSBuZWVkIGZvciBkYXRhIGNvbnZlcnNpb24uCisKK1doZW4gY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSAoZS5nLiBhIGZpbGUgaXMgcmVuYW1lZCkgdGhleSBhcmUgc3RvcmVkIGluCithIHRyYW5zYWN0aW9uIGluIHRoZSBqb3VybmFsIGFuZCBjYW4gZWl0aGVyIGJlIGNvbXBsZXRlIG9yIGluY29tcGxldGUgYXQKK3RoZSB0aW1lIG9mIGEgY3Jhc2guICBJZiBhIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlIGF0IHRoZSB0aW1lIG9mIGEgY3Jhc2gKKyhvciBpbiB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSBkb2VzIG5vdCBjcmFzaCksIHRoZW4gYW55IGJsb2NrcworaW4gdGhhdCB0cmFuc2FjdGlvbiBhcmUgZ3VhcmFudGVlZCB0byByZXByZXNlbnQgYSB2YWxpZCBmaWxlc3lzdGVtIHN0YXRlLAorYW5kIGFyZSBjb3BpZWQgaW50byB0aGUgZmlsZXN5c3RlbS4gIElmIGEgdHJhbnNhY3Rpb24gaXMgaW5jb21wbGV0ZSBhdAordGhlIHRpbWUgb2YgdGhlIGNyYXNoLCB0aGVuIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBvZiBjb25zaXN0ZW5jeSBmb3IKK3RoZSBibG9ja3MgaW4gdGhhdCB0cmFuc2FjdGlvbiBzbyB0aGV5IGFyZSBkaXNjYXJkZWQgKHdoaWNoIG1lYW5zIGFueQorZmlsZXN5c3RlbSBjaGFuZ2VzIHRoZXkgcmVwcmVzZW50IGFyZSBhbHNvIGxvc3QpLgorQ2hlY2sgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dCBpZiB5b3Ugd2FudCB0byByZWFkIG1vcmUgYWJvdXQKK2V4dDMgYW5kIGpvdXJuYWxpbmcuCisKK1JlZmVyZW5jZXMKKz09PT09PT09PT0KKworVGhlIGtlcm5lbCBzb3VyY2UJZmlsZTovdXNyL3NyYy9saW51eC9mcy9leHQyLworZTJmc3Byb2dzIChlMmZzY2spCWh0dHA6Ly9lMmZzcHJvZ3Muc291cmNlZm9yZ2UubmV0LworRGVzaWduICYgSW1wbGVtZW50YXRpb24JaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvZXh0MmludHJvLmh0bWwKK0pvdXJuYWxpbmcgKGV4dDMpCWZ0cDovL2Z0cC51ay5saW51eC5vcmcvcHViL2xpbnV4L3NjdC9mcy9qZnMvCitIYXNoZWQgRGlyZWN0b3JpZXMJaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL35waGlsbGlwcy9odHJlZS8KK0ZpbGVzeXN0ZW0gUmVzaXppbmcJaHR0cDovL2V4dDJyZXNpemUuc291cmNlZm9yZ2UubmV0LworQ29tcHJlc3Npb24gKCopCQlodHRwOi8vd3d3Lm5ldHNwYWNlLm5ldC5hdS9+cmVpdGVyL2UyY29tcHIvCisKK0ltcGxlbWVudGF0aW9ucyBmb3I6CitXaW5kb3dzIDk1Lzk4L05ULzIwMDAJaHR0cDovL3VyYW51cy5pdC5zd2luLmVkdS5hdS9+am4vbGludXgvRXhwbG9yZTJmcy5odG0KK1dpbmRvd3MgOTUgKCopCQlodHRwOi8vd3d3LnlpcHRvbi5kZW1vbi5jby51ay9jb250ZW50Lmh0bWwjRlNERVhUMgorRE9TIGNsaWVudCAoKikJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCitPUy8yCQkJaHR0cDovL3BlcnNvLndhbmFkb28uZnIvbWF0dGhpZXUud2lsbG0vZXh0Mi1vczIvCitSSVNDIE9TIGNsaWVudAkJZnRwOi8vZnRwLmJhcm5ldC5hYy51ay9wdWIvYWNvcm4vYXJtbGludXgvaXNjYWZzLworCisoKikgbm8gbG9uZ2VyIGFjdGl2ZWx5IGRldmVsb3BlZC9zdXBwb3J0ZWQgKGFzIG9mIEFwciAyMDAxKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiN2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTAsMCArMSwxODMgQEAKKworRXh0MyBGaWxlc3lzdGVtCis9PT09PT09PT09PT09PT0KKworZXh0MyB3YXMgb3JpZ2luYWxseSByZWxlYXNlZCBpbiBTZXB0ZW1iZXIgMTk5OS4gV3JpdHRlbiBieSBTdGVwaGVuIFR3ZWVkaWUKK2ZvciAyLjIgYnJhbmNoLCBhbmQgcG9ydGVkIHRvIDIuNCBrZXJuZWxzIGJ5IFBldGVyIEJyYWFtLCBBbmRyZWFzIERpbGdlciwgCitBbmRyZXcgTW9ydG9uLCBBbGV4YW5kZXIgVmlybywgVGVkIFRzJ28gYW5kIFN0ZXBoZW4gVHdlZWRpZS4KKworZXh0MyBpcyBleHQyIGZpbGVzeXN0ZW0gZW5oYW5jZWQgd2l0aCBqb3VybmFsbGluZyBjYXBhYmlsaXRpZXMuIAorCitPcHRpb25zCis9PT09PT09CisKK1doZW4gbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtLCB0aGUgZm9sbG93aW5nIG9wdGlvbiBhcmUgYWNjZXB0ZWQ6CisoKikgPT0gZGVmYXVsdAorCitqb3VuYWw9dXBkYXRlCQlVcGRhdGUgdGhlIGV4dDMgZmlsZSBzeXN0ZW0ncyBqb3VybmFsIHRvIHRoZSAKKwkJCWN1cnJlbnQgZm9ybWF0LgorCitqb3VybmFsPWludW0JCVdoZW4gYSBqb3VybmFsIGFscmVhZHkgZXhpc3RzLCB0aGlzIG9wdGlvbiBpcyAKKwkJCWlnbm9yZWQuIE90aGVyd2lzZSwgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKKwkJCXRoZSBpbm9kZSB3aGljaCB3aWxsIHJlcHJlc2VudCB0aGUgZXh0MyBmaWxlCisJCQlzeXN0ZW0ncyBqb3VybmFsIGZpbGUuCisKK25vbG9hZAkJCURvbid0IGxvYWQgdGhlIGpvdXJuYWwgb24gbW91bnRpbmcuCisKK2RhdGE9am91cm5hbAkJQWxsIGRhdGEgYXJlIGNvbW1pdHRlZCBpbnRvIHRoZSBqb3VybmFsIHByaW9yCisJCQl0byBiZWluZyB3cml0dGVuIGludG8gdGhlIG1haW4gZmlsZSBzeXN0ZW0uCisKK2RhdGE9b3JkZXJlZAkoKikJQWxsIGRhdGEgYXJlIGZvcmNlZCBkaXJlY3RseSBvdXQgdG8gdGhlIG1haW4gZmlsZQorCQkJc3lzdGVtIHByaW9yIHRvIGl0cyBtZXRhZGF0YSBiZWluZyBjb21taXR0ZWQgdG8KKwkJCXRoZSBqb3VybmFsLgorCitkYXRhPXdyaXRlYmFjawkJRGF0YSBvcmRlcmluZyBpcyBub3QgcHJlc2VydmVkLCBkYXRhIG1heSBiZQorCQkJd3JpdHRlbiBpbnRvIHRoZSBtYWluIGZpbGUgc3lzdGVtIGFmdGVyIGl0cworCQkJbWV0YWRhdGEgaGFzIGJlZW4gY29tbWl0dGVkIHRvIHRoZSBqb3VybmFsLgorCitjb21taXQ9bnJzZWMJKCopCUV4dDMgY2FuIGJlIHRvbGQgdG8gc3luYyBhbGwgaXRzIGRhdGEgYW5kIG1ldGFkYXRhCisJCQlldmVyeSAnbnJzZWMnIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUgc2Vjb25kcy4KKwkJCVRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgbG9zZSB5b3VyIHBvd2VyLCB5b3Ugd2lsbCBsb3NlLAorCQkJYXMgbXVjaCwgdGhlIGxhdGVzdCA1IHNlY29uZHMgb2Ygd29yayAoeW91ciBmaWxlc3lzdGVtCisJCQl3aWxsIG5vdCBiZSBkYW1hZ2VkIHRob3VnaCwgdGhhbmtzIHRvIGpvdXJuYWxpbmcpLiBUaGlzCisJCQlkZWZhdWx0IHZhbHVlIChvciBhbnkgbG93IHZhbHVlKSB3aWxsIGh1cnQgcGVyZm9ybWFuY2UsCisJCQlidXQgaXQncyBnb29kIGZvciBkYXRhLXNhZmV0eS4gU2V0dGluZyBpdCB0byAwIHdpbGwKKwkJCWhhdmUgdGhlIHNhbWUgZWZmZWN0IHRoYW4gbGVhdmluZyB0aGUgZGVmYXVsdCA1IHNlYy4KKwkJCVNldHRpbmcgaXQgdG8gdmVyeSBsYXJnZSB2YWx1ZXMgd2lsbCBpbXByb3ZlCisJCQlwZXJmb3JtYW5jZS4KKworYmFycmllcj0xCQlUaGlzIGVuYWJsZXMvZGlzYWJsZXMgYmFycmllcnMuIGJhcnJpZXI9MCBkaXNhYmxlcyBpdCwKKwkJCWJhcnJpZXI9MSBlbmFibGVzIGl0LgorCitvcmxvdgkJKCopCVRoaXMgZW5hYmxlcyB0aGUgbmV3IE9ybG92IGJsb2NrIGFsbG9jYXRvci4gSXQncyBlbmFibGVkCisJCQlieSBkZWZhdWx0LgorCitvbGRhbGxvYwkJVGhpcyBkaXNhYmxlcyB0aGUgT3Jsb3YgYmxvY2sgYWxsb2NhdG9yIGFuZCBlbmFibGVzIHRoZQorCQkJb2xkIGJsb2NrIGFsbG9jYXRvci4gT3Jsb3Ygc2hvdWxkIGhhdmUgYmV0dGVyIHBlcmZvcm1hbmNlLAorCQkJd2UnZCBsaWtlIHRvIGdldCBzb21lIGZlZWRiYWNrIGlmIGl0J3MgdGhlIGNvbnRyYXJ5IGZvcgorCQkJeW91LgorCit1c2VyX3hhdHRyCSgqKQlFbmFibGVzIFBPU0lYIEV4dGVuZGVkIEF0dHJpYnV0ZXMuIEl0J3MgZW5hYmxlZCBieQorCQkJZGVmYXVsdCwgaG93ZXZlciB5b3UgbmVlZCB0byBjb25maWZ1cmUgaXRzIHN1cHBvcnQKKwkJCShDT05GSUdfRVhUM19GU19YQVRUUikuIFRoaXMgaXMgbmVjY2VzYXJ5IGlmIHlvdSB3YW50CisJCQl0byB1c2UgUE9TSVggQWNjZXMgQ29udHJvbCBMaXN0cyBzdXBwb3J0LiBZb3UgY2FuIHZpc2l0CisJCQlodHRwOi8vYWNsLmJlc3RiaXRzLmF0IHRvIGtub3cgbW9yZSBhYm91dCBQT1NJWCBFeHRlbmRlZAorCQkJYXR0cmlidXRlcy4KKworbm91c2VyX3hhdHRyCQlEaXNhYmxlcyBQT1NJWCBFeHRlbmRlZCBBdHRyaWJ1dGVzLgorCithY2wJCSgqKQlFbmFibGVzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIHN1cHBvcnQuIFRoaXMgaXMKKwkJCWVuYWJsZWQgYnkgZGVmYXVsdCwgaG93ZXZlciB5b3UgbmVlZCB0byBjb25maWd1cmUKKwkJCWl0cyBzdXBwb3J0IChDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wpLiBJZiB5b3Ugd2FudAorCQkJdG8ga25vdyBtb3JlIGFib3V0IEFDTHMgdmlzaXQgaHR0cDovL2FjbC5iZXN0Yml0cy5hdAorCitub2FjbAkJCVRoaXMgb3B0aW9uIGRpc2FibGVzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3Qgc3VwcG9ydC4KKworcmVzZXJ2YXRpb24KKworbm9yZXNlcnZhdGlvbgorCityZXNpemU9CisKK2JzZGRmIAkJKCopCU1ha2UgJ2RmJyBhY3QgbGlrZSBCU0QuCittaW5peGRmCQkJTWFrZSAnZGYnIGFjdCBsaWtlIE1pbml4LgorCitjaGVjaz1ub25lCQlEb24ndCBkbyBleHRyYSBjaGVja2luZyBvZiBiaXRtYXBzIG9uIG1vdW50Lgorbm9jaGVjawkJCisKK2RlYnVnCQkJRXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gc3lzbG9nLgorCitlcnJvcnM9cmVtb3VudC1ybygqKQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KK2Vycm9ycz1jb250aW51ZQkJS2VlcCBnb2luZyBvbiBhIGZpbGVzeXN0ZW0gZXJyb3IuCitlcnJvcnM9cGFuaWMJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KKworZ3JwaWQJCQlHaXZlIG9iamVjdHMgdGhlIHNhbWUgZ3JvdXAgSUQgYXMgdGhlaXIgY3JlYXRvci4KK2JzZGdyb3VwcwkJCisKK25vZ3JwaWQJCSgqKQlOZXcgb2JqZWN0cyBoYXZlIHRoZSBncm91cCBJRCBvZiB0aGVpciBjcmVhdG9yLgorc3lzdmdyb3VwcworCityZXNnaWQ9bgkJVGhlIGdyb3VwIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKworcmVzdWlkPW4JCVRoZSB1c2VyIElEIHdoaWNoIG1heSB1c2UgdGhlIHJlc2VydmVkIGJsb2Nrcy4KKworc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgorCitxdW90YQkJCVF1b3RhIG9wdGlvbnMgYXJlIGN1cnJlbnRseSBzaWxlbnRseSBpZ25vcmVkLgorbm9xdW90YQkJCShzZWUgZnMvZXh0My9zdXBlci5jLCBsaW5lIDU5NCkKK2dycHF1b3RhCit1c3JxdW90YQorCisKK1NwZWNpZmljYXRpb24KKz09PT09PT09PT09PT0KK2V4dDMgc2hhcmVzIGFsbCBkaXNrIGltcGxlbWVudGF0aW9uIHdpdGggZXh0MiBmaWxlc3lzdGVtLCBhbmQgYWRkCit0cmFuc2FjdGlvbnMgY2FwYWJpbGl0aWVzIHRvIGV4dDIuICBKb3VybmFsaW5nIGlzIGRvbmUgYnkgdGhlCitKb3VybmFsaW5nIGJsb2NrIGRldmljZSBsYXllci4KKworSm91cm5hbGluZyBCbG9jayBEZXZpY2UgbGF5ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgSm91cm5hbGluZyBCbG9jayBEZXZpY2UgbGF5ZXIgKEpCRCkgaXNuJ3QgZXh0MyBzcGVjaWZpYy4gIEl0IHdhcworZGVzaWduIHRvIGFkZCBqb3VybmFsaW5nIGNhcGFiaWxpdGllcyBvbiBhIGJsb2NrIGRldmljZS4gIFRoZSBleHQzCitmaWxlc3lzdGVtIGNvZGUgd2lsbCBpbmZvcm0gdGhlIEpCRCBvZiBtb2RpZmljYXRpb25zIGl0IGlzIHBlcmZvcm1pbmcKKyhDYWxsIGEgdHJhbnNhY3Rpb24pLiAgdGhlIGpvdXJuYWwgc3VwcG9ydCB0aGUgdHJhbnNhY3Rpb25zIHN0YXJ0IGFuZAorc3RvcCwgYW5kIGluIGNhc2Ugb2YgY3Jhc2gsIHRoZSBqb3VybmFsIGNhbiByZXBsYXllZCB0aGUgdHJhbnNhY3Rpb25zCit0byBwdXQgdGhlIHBhcnRpdGlvbiBvbiBhIGNvbnNpc3RlbnQgc3RhdGUgZmFzdGx5LgorCitoYW5kbGVzIHJlcHJlc2VudCBhIHNpbmdsZSBhdG9taWMgdXBkYXRlIHRvIGEgZmlsZXN5c3RlbS4gIEpCRCBjYW4KK2hhbmRsZSBleHRlcm5hbCBqb3VybmFsIG9uIGEgYmxvY2sgZGV2aWNlLgorCitEYXRhIE1vZGUKKy0tLS0tLS0tLQorVGhlcmUncyAzIGRpZmZlcmVudCBkYXRhIG1vZGVzOgorCisqIHdyaXRlYmFjayBtb2RlCitJbiBkYXRhPXdyaXRlYmFjayBtb2RlLCBleHQzIGRvZXMgbm90IGpvdXJuYWwgZGF0YSBhdCBhbGwuICBUaGlzIG1vZGUKK3Byb3ZpZGVzIGEgc2ltaWxhciBsZXZlbCBvZiBqb3VybmFsaW5nIGFzIFhGUywgSkZTLCBhbmQgUmVpc2VyRlMgaW4gaXRzCitkZWZhdWx0IG1vZGUgLSBtZXRhZGF0YSBqb3VybmFsaW5nLiAgQSBjcmFzaCtyZWNvdmVyeSBjYW4gY2F1c2UKK2luY29ycmVjdCBkYXRhIHRvIGFwcGVhciBpbiBmaWxlcyB3aGljaCB3ZXJlIHdyaXR0ZW4gc2hvcnRseSBiZWZvcmUgdGhlCitjcmFzaC4gIFRoaXMgbW9kZSB3aWxsIHR5cGljYWxseSBwcm92aWRlIHRoZSBiZXN0IGV4dDMgcGVyZm9ybWFuY2UuCisKKyogb3JkZXJlZCBtb2RlCitJbiBkYXRhPW9yZGVyZWQgbW9kZSwgZXh0MyBvbmx5IG9mZmljaWFsbHkgam91cm5hbHMgbWV0YWRhdGEsIGJ1dCBpdAorbG9naWNhbGx5IGdyb3VwcyBtZXRhZGF0YSBhbmQgZGF0YSBibG9ja3MgaW50byBhIHNpbmdsZSB1bml0IGNhbGxlZCBhCit0cmFuc2FjdGlvbi4gIFdoZW4gaXQncyB0aW1lIHRvIHdyaXRlIHRoZSBuZXcgbWV0YWRhdGEgb3V0IHRvIGRpc2ssIHRoZQorYXNzb2NpYXRlZCBkYXRhIGJsb2NrcyBhcmUgd3JpdHRlbiBmaXJzdC4gIEluIGdlbmVyYWwsIHRoaXMgbW9kZQorcGVyZm9ybSBzbGlnaHRseSBzbG93ZXIgdGhhbiB3cml0ZWJhY2sgYnV0IHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4KK2pvdXJuYWwgbW9kZS4KKworKiBqb3VybmFsIG1vZGUKK2RhdGE9am91cm5hbCBtb2RlIHByb3ZpZGVzIGZ1bGwgZGF0YSBhbmQgbWV0YWRhdGEgam91cm5hbGluZy4gIEFsbCBuZXcKK2RhdGEgaXMgd3JpdHRlbiB0byB0aGUgam91cm5hbCBmaXJzdCwgYW5kIHRoZW4gdG8gaXRzIGZpbmFsIGxvY2F0aW9uLiAKK0luIHRoZSBldmVudCBvZiBhIGNyYXNoLCB0aGUgam91cm5hbCBjYW4gYmUgcmVwbGF5ZWQsIGJyaW5naW5nIGJvdGgKK2RhdGEgYW5kIG1ldGFkYXRhIGludG8gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyBtb2RlIGlzIHRoZSBzbG93ZXN0CitleGNlcHQgd2hlbiBkYXRhIG5lZWRzIHRvIGJlIHJlYWQgZnJvbSBhbmQgd3JpdHRlbiB0byBkaXNrIGF0IHRoZSBzYW1lCit0aW1lIHdoZXJlIGl0IG91dHBlcmZvcm0gYWxsIG90aGVycyBtb2RlLgorCitDb21wYXRpYmlsaXR5CistLS0tLS0tLS0tLS0tCisKK0V4dDIgcGFydGl0aW9ucyBjYW4gYmUgZWFzaWx5IGNvbnZlcnQgdG8gZXh0Mywgd2l0aCBgdHVuZTJmcyAtaiA8ZGV2PmAuCitFeHQzIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBFeHQyLiAgRXh0MyBwYXJ0aXRpb25zIGNhbiBlYXNpbHkgYmUKK21vdW50ZWQgYXMgRXh0Mi4KKworRXh0ZXJuYWwgVG9vbHMKKz09PT09PT09PT09PT09CitzZWUgbWFudWFsIHBhZ2VzIHRvIGtub3cgbW9yZS4KKwordHVuZTJmczogCWNyZWF0ZSBhIGV4dDMgam91cm5hbCBvbiBhIGV4dDIgcGFydGl0aW9uIHdpdGggdGhlIC1qIGZsYWdzCitta2UyZnM6IAljcmVhdGUgYSBleHQzIHBhcnRpdGlvbiB3aXRoIHRoZSAtaiBmbGFncworZGVidWdmczogCWV4dDIgYW5kIGV4dDMgZmlsZSBzeXN0ZW0gZGVidWdnZXIKKworUmVmZXJlbmNlcworPT09PT09PT09PQorCitrZXJuZWwgc291cmNlOglmaWxlOi91c3Ivc3JjL2xpbnV4L2ZzL2V4dDMKKwkJZmlsZTovdXNyL3NyYy9saW51eC9mcy9qYmQKKworcHJvZ3JhbXM6IAlodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldAorCit1c2VmdWwgbGluazoKKwkJaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L2V4dDMvZXh0My11c2FnZS5odG1sCisJCWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KKwkJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM4LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9oZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGZhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2hmcy50eHQKQEAgLTAsMCArMSw4MyBAQAorCitNYWNpbnRvc2ggSEZTIEZpbGVzeXN0ZW0gZm9yIExpbnV4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0hGUyBzdGFuZHMgZm9yIGBgSGllcmFyY2hpY2FsIEZpbGUgU3lzdGVtJycgYW5kIGlzIHRoZSBmaWxlc3lzdGVtIHVzZWQKK2J5IHRoZSBNYWMgUGx1cyBhbmQgYWxsIGxhdGVyIE1hY2ludG9zaCBtb2RlbHMuICBFYXJsaWVyIE1hY2ludG9zaAorbW9kZWxzIHVzZWQgTUZTIChgYE1hY2ludG9zaCBGaWxlIFN5c3RlbScnKSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCwKK01hY09TIDguMSBhbmQgbmV3ZXIgc3VwcG9ydCBhIGZpbGVzeXN0ZW0gY2FsbGVkIEhGUysgdGhhdCdzIHNpbWlsYXIgdG8KK0hGUyBidXQgaXMgZXh0ZW5kZWQgaW4gdmFyaW91cyBhcmVhcy4gIFVzZSB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGRyaXZlcgordG8gYWNjZXNzIHN1Y2ggZmlsZXN5c3RlbXMgZnJvbSBMaW51eC4KKworCitNb3VudCBvcHRpb25zCis9PT09PT09PT09PT09CisKK1doZW4gbW91bnRpbmcgYW4gSEZTIGZpbGVzeXN0ZW0sIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWNjZXB0ZWQ6CisKKyAgY3JlYXRvcj1jY2NjLCB0eXBlPWNjY2MKKwlTcGVjaWZpZXMgdGhlIGNyZWF0b3IvdHlwZSB2YWx1ZXMgYXMgc2hvd24gYnkgdGhlIE1hY09TIGZpbmRlcgorCXVzZWQgZm9yIGNyZWF0aW5nIG5ldyBmaWxlcy4gIERlZmF1bHQgdmFsdWVzOiAnPz8/PycuCisKKyAgdWlkPW4sIGdpZD1uCisgIAlTcGVjaWZpZXMgdGhlIHVzZXIvZ3JvdXAgdGhhdCBvd25zIGFsbCBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbXMuCisJRGVmYXVsdDogIHVzZXIvZ3JvdXAgaWQgb2YgdGhlIG1vdW50aW5nIHByb2Nlc3MuCisKKyAgZGlyX3VtYXNrPW4sIGZpbGVfdW1hc2s9biwgdW1hc2s9bgorCVNwZWNpZmllcyB0aGUgdW1hc2sgdXNlZCBmb3IgYWxsIGZpbGVzICwgYWxsIGRpcmVjdG9yaWVzIG9yIGFsbAorCWZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gIERlZmF1bHRzIHRvIHRoZSB1bWFzayBvZiB0aGUgbW91bnRpbmcgcHJvY2Vzcy4KKworICBzZXNzaW9uPW4KKyAgCVNlbGVjdCB0aGUgQ0RST00gc2Vzc2lvbiB0byBtb3VudCBhcyBIRlMgZmlsZXN5c3RlbS4gIERlZmF1bHRzIHRvCisJbGVhdmluZyB0aGF0IGRlY2lzaW9uIHRvIHRoZSBDRFJPTSBkcml2ZXIuICBUaGlzIG9wdGlvbiB3aWxsIGZhaWwKKwl3aXRoIGFueXRoaW5nIGJ1dCBhIENEUk9NIGFzIHVuZGVybHlpbmcgZGV2aWNlcy4KKworICBwYXJ0PW4KKyAgCVNlbGVjdCBwYXJ0aXRpb24gbnVtYmVyIG4gZnJvbSB0aGUgZGV2aWNlcy4gIERvZXMgb25seSBtYWtlcworCXNlbnNlIGZvciBDRFJPTVMgYmVjYXVzZSB0aGV5IGNhbid0IGJlIHBhcnRpdGlvbmVkIHVuZGVyIExpbnV4LgorCUZvciBkaXNrIGRldmljZXMgdGhlIGdlbmVyaWMgcGFydGl0aW9uIHBhcnNpbmcgY29kZSBkb2VzIHRoaXMKKwlmb3IgdXMuICBEZWZhdWx0cyB0byBub3QgcGFyc2luZyB0aGUgcGFydGl0aW9uIHRhYmxlIGF0IGFsbC4KKworICBxdWlldAorICAJSWdub3JlIGludmFsaWQgbW91bnQgb3B0aW9ucyBpbnN0ZWFkIG9mIGNvbXBsYWluaW5nLgorCisKK1dyaXRpbmcgdG8gSEZTIEZpbGVzeXN0ZW1zCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitIRlMgaXMgbm90IGEgVU5JWCBmaWxlc3lzdGVtLCB0aHVzIGl0IGRvZXMgbm90IGhhdmUgdGhlIHVzdWFsIGZlYXR1cmVzIHlvdSdkCitleHBlY3Q6CisKKyBvIFlvdSBjYW4ndCBtb2RpZnkgdGhlIHNldC11aWQsIHNldC1naWQsIHN0aWNreSBvciBleGVjdXRhYmxlIGJpdHMgb3IgdGhlIHVpZAorICAgYW5kIGdpZCBvZiBmaWxlcy4KKyBvIFlvdSBjYW4ndCBjcmVhdGUgaGFyZC0gb3Igc3ltbGlua3MsIGRldmljZSBmaWxlcywgc29ja2V0cyBvciBGSUZPcy4KKworSEZTIGRvZXMgb24gdGhlIG90aGVyIGhhdmUgdGhlIGNvbmNlcHRzIG9mIG11bHRpcGxlIGZvcmtzIHBlciBmaWxlLiAgVGhlc2UKK25vbi1zdGFuZGFyZCBmb3JrcyBhcmUgcmVwcmVzZW50ZWQgYXMgaGlkZGVuIGFkZGl0aW9uYWwgZmlsZXMgaW4gdGhlIG5vcm1hbAorZmlsZXN5c3RlbXMgbmFtZXNwYWNlIHdoaWNoIGlzIGtpbmQgb2YgYSBjbHVkZ2UgYW5kIG1ha2VzIHRoZSBzZW1hbnRpY3MgZm9yCit0aGUgYSBsaXR0bGUgc3RyYW5nZToKKworIG8gWW91IGNhbid0IGNyZWF0ZSwgZGVsZXRlIG9yIHJlbmFtZSByZXNvdXJjZSBmb3JrcyBvZiBmaWxlcyBvciB0aGUKKyAgIEZpbmRlcidzIG1ldGFkYXRhLgorIG8gVGhleSBhcmUgaG93ZXZlciBjcmVhdGVkICh3aXRoIGRlZmF1bHQgdmFsdWVzKSwgZGVsZXRlZCBhbmQgcmVuYW1lZAorICAgYWxvbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGZvcmsgb3IgZGlyZWN0b3J5LgorIG8gQ29weWluZyBmaWxlcyB0byBhIGRpZmZlcmVudCBmaWxlc3lzdGVtIHdpbGwgbG9vc2UgdGhvc2UgYXR0cmlidXRlcworICAgdGhhdCBhcmUgZXNzZW50aWFsIGZvciBNYWNPUyB0byB3b3JrLgorCisKK0NyZWF0aW5nIEhGUyBmaWxlc3lzdGVtcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGhmc3V0aWxzIHBhY2thZ2UgZnJvbSBSb2JlcnQgTGVzbGllIGNvbnRhaW5zIGEgcHJvZ3JhbSBjYWxsZWQKK2hmb3JtYXQgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgSEZTIGZpbGVzeXN0ZW0uIFNlZQorPGh0dHA6Ly93d3cubWFycy5vcmcvaG9tZS9yb2IvcHJvai9oZnMvPiBmb3IgZGV0YWlscy4KKworCitDcmVkaXRzCis9PT09PT09CisKK1RoZSBIRlMgZHJpdmVycyB3YXMgd3JpdHRlbiBieSBQYXVsIEguIEhhcmdyb3ZlYSAoaGFyZ3JvdmVAc2NjbS5TdGFuZm9yZC5FRFUpCithbmQgaXMgbm93IG1haW50YWluZWQgYnkgUm9tYW4gWmlwcGVsIChyb21hbkBhcmRpc3RlY2guY29tKSBhdCBBcmRpcworVGVjaG5vbG9naWVzLgorUm9tYW4gcmV3cm90ZSBsYXJnZSBwYXJ0cyBvZiB0aGUgY29kZSBhbmQgYnJvdWdodCBpbiBidHJlZSByb3V0aW5lcyBkZXJpdmVkCitmcm9tIEJyYWQgQm95ZXIncyBoZnNwbHVzIGRyaXZlciAoYWxzbyBtYWludGFpbmVkIGJ5IFJvbWFuIG5vdykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2hwZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9ocGZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RjMzYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9ocGZzLnR4dApAQCAtMCwwICsxLDI5NiBAQAorUmVhZC9Xcml0ZSBIUEZTIDIuMDkKKzE5OTgtMjAwNCwgTWlrdWxhcyBQYXRvY2thCisKK2VtYWlsOiBtaWt1bGFzQGFydGF4Lmthcmxpbi5tZmYuY3VuaS5jegoraG9tZXBhZ2U6IGh0dHA6Ly9hcnRheC5rYXJsaW4ubWZmLmN1bmkuY3ovfm1pa3VsYXMvdnlwbG9keS9ocGZzL2luZGV4LWUuY2dpCisKK0NSRURJVFM6CitDaHJpcyBTbWl0aCwgMTk5Mywgb3JpZ2luYWwgcmVhZC1vbmx5IEhQRlMsIHNvbWUgY29kZSBhbmQgaHBmcyBzdHJ1Y3R1cmVzIGZpbGUKKwlpcyB0YWtlbiBmcm9tIGl0CitKYWNxdWVzIEdlbGluYXMsIE1TRG9zIG1tYXAsIEluc3BpcmVkIGJ5IGZzL25mcy9tbWFwLmMgKEpvbiBUb21icyAxNSBBdWcgMTk5MykKK1dlcm5lciBBbG1lc2JlcmdlciwgMTk5MiwgMTk5MywgTVNEb3Mgb3B0aW9uIHBhcnNlciAmIENSL0xGIGNvbnZlcnNpb24KKworTW91bnQgb3B0aW9ucworCit1aWQ9eHh4LGdpZD14eHgsdW1hc2s9eHh4IChkZWZhdWx0IHVpZD1naWQ9MCB1bWFzaz1kZWZhdWx0X3N5c3RlbV91bWFzaykKKwlTZXQgb3duZXIvZ3JvdXAvbW9kZSBmb3IgZmlsZXMgdGhhdCBkbyBub3QgaGF2ZSBpdCBzcGVjaWZpZWQgaW4gZXh0ZW5kZWQKKwlhdHRyaWJ1dGVzLiBNb2RlIGlzIGludmVydGVkIHVtYXNrIC0gZm9yIGV4YW1wbGUgdW1hc2sgMDI3IGdpdmVzIG93bmVyCisJYWxsIHBlcm1pc3Npb24sIGdyb3VwIHJlYWQgcGVybWlzc2lvbiBhbmQgYW55Ym9keSBlbHNlIG5vIGFjY2Vzcy4gTm90ZQorCXRoYXQgZm9yIGZpbGVzIG1vZGUgaXMgYW5kZWQgd2l0aCAwNjY2LiBJZiB5b3Ugd2FudCBmaWxlcyB0byBoYXZlICd4JworCXJpZ2h0cywgeW91IG11c3QgdXNlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCitjYXNlPWxvd2VyLGFzaXMgKGRlZmF1bHQgYXNpcykKKwlGaWxlIG5hbWUgbG93ZXJjYXNpbmcgaW4gcmVhZGRpci4KK2NvbnY9YmluYXJ5LHRleHQsYXV0byAoZGVmYXVsdCBiaW5hcnkpCisJQ1IvTEYgLT4gTEYgY29udmVyc2lvbiwgaWYgYXV0bywgZGVjaXNpb24gaXMgbWFkZSBhY2NvcmRpbmcgdG8gZXh0ZW5zaW9uCisJLSB0aGVyZSBpcyBhIGxpc3Qgb2YgdGV4dCBleHRlbnNpb25zIChJIHRoaW5nIGl0J3MgYmV0dGVyIHRvIG5vdCBjb252ZXJ0CisJdGV4dCBmaWxlIHRoYW4gdG8gZGFtYWdlIGJpbmFyeSBmaWxlKS4gSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoYXQgbGlzdCwKKwljaGFuZ2UgaXQgaW4gdGhlIHNvdXJjZS4gT3JpZ2luYWwgcmVhZG9ubHkgSFBGUyBjb250YWluZWQgc29tZSBzdHJhbmdlCisJaGV1cmlzdGljIGFsZ29yaXRobSB0aGF0IEkgcmVtb3ZlZC4gSSB0aGluZyBpdCdzIGRhbmdlciB0byBsZXQgdGhlCisJY29tcHV0ZXIgZGVjaWRlIHdoZXRoZXIgZmlsZSBpcyB0ZXh0IG9yIGJpbmFyeS4gRm9yIGV4YW1wbGUsIERKR1BQCisJYmluYXJpZXMgY29udGFpbiBzbWFsbCB0ZXh0IG1lc3NhZ2UgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhleSBjb3VsZCBiZQorCW1pc2lkZW50aWZpZWQgYW5kIGRhbWFnZWQgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLgorY2hlY2s9bm9uZSxub3JtYWwsc3RyaWN0IChkZWZhdWx0IG5vcm1hbCkKKwlDaGVjayBsZXZlbC4gU2VsZWN0aW5nIG5vbmUgd2lsbCBjYXVzZSBvbmx5IGxpdHRsZSBzcGVlZHVwIGFuZCBiaWcKKwlkYW5nZXIuIEkgdHJpZWQgdG8gd3JpdGUgaXQgc28gdGhhdCBpdCB3b24ndCBjcmFzaCBpZiBjaGVjaz1ub3JtYWwgb24KKwljb3JydXB0ZWQgZmlsZXN5c3RlbXMuIGNoZWNrPXN0cmljdCBtZWFucyBtYW55IHN1cGVyZmx1b3VzIGNoZWNrcyAtCisJdXNlZCBmb3IgZGVidWdnaW5nIChmb3IgZXhhbXBsZSBpdCBjaGVja3MgaWYgZmlsZSBpcyBhbGxvY2F0ZWQgaW4KKwliaXRtYXBzIHdoZW4gYWNjZXNzaW5nIGl0KS4KK2Vycm9ycz1jb250aW51ZSxyZW1vdW50LXJvLHBhbmljIChkZWZhdWx0IHJlbW91bnQtcm8pCisJQmVoYXZpb3VyIHdoZW4gZmlsZXN5c3RlbSBlcnJvcnMgZm91bmQuCitjaGtkc2s9bm8sZXJyb3JzLGFsd2F5cyAoZGVmYXVsdCBlcnJvcnMpCisJV2hlbiB0byBtYXJrIGZpbGVzeXN0ZW0gZGlydHkgc28gdGhhdCBPUy8yIGNoZWNrcyBpdC4KK2Vhcz1ubyxybyxydyAoZGVmYXVsdCBydykKKwlXaGF0IHRvIGRvIHdpdGggZXh0ZW5kZWQgYXR0cmlidXRlcy4gJ25vJyAtIGlnbm9yZSB0aGVtIGFuZCB1c2UgYWx3YXlzCisJdmFsdWVzIHNwZWNpZmllZCBpbiB1aWQvZ2lkL21vZGUgb3B0aW9ucy4gJ3JvJyAtIHJlYWQgZXh0ZW5kZWQKKwlhdHRyaWJ1dGVzIGJ1dCBkbyBub3QgY3JlYXRlIHRoZW0uICdydycgLSBjcmVhdGUgZXh0ZW5kZWQgYXR0cmlidXRlcworCXdoZW4geW91IHVzZSBjaG1vZC9jaG93bi9jaGdycC9ta25vZC9sbiAtcyBvbiB0aGUgZmlsZXN5c3RlbS4KK3RpbWVzaGlmdD0oLSlubm4gKGRlZmF1bHQgMCkKKwlTaGlmdHMgdGhlIHRpbWUgYnkgbm5uIHNlY29uZHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugc2VlIHVuZGVyIGxpbnV4CisJb25lIGhvdXIgbW9yZSwgdGhhbiB1bmRlciBvcy8yLCB1c2UgdGltZXNoaWZ0PS0zNjAwLgorCisKK0ZpbGUgbmFtZXMKKworQXMgaW4gT1MvMiwgZmlsZW5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlLiBIb3dldmVyLCBzaGVsbCB0aGlua3MgdGhhdCBuYW1lcworYXJlIGNhc2Ugc2Vuc2l0aXZlLCBzbyBmb3IgZXhhbXBsZSB3aGVuIHlvdSBjcmVhdGUgYSBmaWxlIEZPTywgeW91IGNhbiB1c2UKKydjYXQgRk9PJywgJ2NhdCBGb28nLCAnY2F0IGZvbycgb3IgJ2NhdCBGKicgYnV0IG5vdCAnY2F0IGYqJy4gTm90ZSwgdGhhdCB5b3UKK2Fsc28gd29uJ3QgYmUgYWJsZSB0byBjb21waWxlIGxpbnV4IGtlcm5lbCAoYW5kIG1heWJlIG90aGVyIHRoaW5ncykgb24gSFBGUworYmVjYXVzZSBrZXJuZWwgY3JlYXRlcyBkaWZmZXJlbnQgZmlsZXMgd2l0aCBuYW1lcyBsaWtlIGJvb3RzZWN0LlMgYW5kCitib290c2VjdC5zLiBXaGVuIHNlYXJjaGluZyBmb3IgZmlsZSB0aGF0cyBuYW1lIGhhcyBjaGFyYWN0ZXJzID49IDEyOCwgY29kZXBhZ2VzCithcmUgdXNlZCAtIHNlZSBiZWxvdy4KK09TLzIgaWdub3JlcyBkb3RzIGFuZCBzcGFjZXMgYXQgdGhlIGVuZCBvZiBmaWxlIG5hbWUsIHNvIHRoaXMgZHJpdmVyIGRvZXMgYXMKK3dlbGwuIElmIHlvdSBjcmVhdGUgJ2EuIC4uLicsIHRoZSBmaWxlICdhJyB3aWxsIGJlIGNyZWF0ZWQsIGJ1dCB5b3UgY2FuIHN0aWxsCithY2Nlc3MgaXQgdW5kZXIgbmFtZXMgJ2EuJywgJ2EuLicsICdhIC4gIC4gLiAnIGV0Yy4KKworCitFeHRlbmRlZCBhdHRyaWJ1dGVzCisKK09uIEhQRlMgcGFydGl0aW9ucywgT1MvMiBjYW4gYXNzb2NpYXRlIHRvIGVhY2ggZmlsZSBhIHNwZWNpYWwgaW5mb3JtYXRpb24gY2FsbGVkCitleHRlbmRlZCBhdHRyaWJ1dGVzLiBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBwYWlycyBvZiAoa2V5LHZhbHVlKSB3aGVyZSBrZXkgaXMKK2FuIGFzY2lpIHN0cmluZyBpZGVudGlmeWluZyB0aGF0IGF0dHJpYnV0ZSBhbmQgdmFsdWUgaXMgYW55IHN0cmluZyBvZiBieXRlcyBvZgordmFyaWFibGUgbGVuZ3RoLiBPUy8yIHN0b3JlcyB3aW5kb3cgYW5kIGljb24gcG9zaXRpb25zIGFuZCBmaWxlIHR5cGVzIHRoZXJlLiBTbword2h5IG5vdCB1c2UgaXQgZm9yIHVuaXgtc3BlY2lmaWMgaW5mbyBsaWtlIGZpbGUgb3duZXIgb3IgYWNjZXNzIHJpZ2h0cz8gVGhpcworZHJpdmVyIGNhbiBkbyBpdC4gSWYgeW91IGNob3duL2NoZ3JwL2NobW9kIG9uIGEgaHBmcyBwYXJ0aXRpb24sIGV4dGVuZGVkCithdHRyaWJ1dGVzIHdpdGgga2V5cyAiVUlEIiwgIkdJRCIgb3IgIk1PREUiIGFuZCAyLWJ5dGUgdmFsdWVzIGFyZSBjcmVhdGVkLiBPbmx5Cit0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgdGhvc2UgdmFsdWUgZGlmZmVycyBmcm9tIGRlZmF1bHRzIHNwZWNpZmllZCBpbiBtb3VudAorb3B0aW9ucyBhcmUgY3JlYXRlZC4gT25jZSBjcmVhdGVkLCB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmV2ZXIgZGVsZXRlZCwKK3RoZXkncmUganVzdCBjaGFuZ2VkLiBJdCBtZWFucyB0aGF0IHdoZW4geW91ciBkZWZhdWx0IHVpZD0wIGFuZCB5b3UgdHlwZQorc29tZXRoaW5nIGxpa2UgJ2Nob3duIGx1c2VyIGZpbGU7IGNob3duIHJvb3QgZmlsZScgdGhlIGZpbGUgd2lsbCBjb250YWluCitleHRlbmRlZCBhdHRyaWJ1dGUgVUlEPTAuIEFuZCB3aGVuIHlvdSB1bW91bnQgdGhlIGZzIGFuZCBtb3VudCBpdCBhZ2FpbiB3aXRoCit1aWQ9bHVzZXJfdWlkLCB0aGUgZmlsZSB3aWxsIGJlIHN0aWxsIG93bmVkIGJ5IHJvb3QhIElmIHlvdSBjaG1vZCBmaWxlIHRvIDQ0NCwKK2V4dGVuZGVkIGF0dHJpYnV0ZSAiTU9ERSIgd2lsbCBub3QgYmUgc2V0LCB0aGlzIHNwZWNpYWwgY2FzZSBpcyBkb25lIGJ5IHNldHRpbmcKK3JlYWQtb25seSBmbGFnLiBXaGVuIHlvdSBta25vZCBhIGJsb2NrIG9yIGNoYXIgZGV2aWNlLCBiZXNpZGVzICJNT0RFIiwgdGhlCitzcGVjaWFsIDQtYnl0ZSBleHRlbmRlZCBhdHRyaWJ1dGUgIkRFViIgd2lsbCBiZSBjcmVhdGVkIGNvbnRhaW5pbmcgdGhlIGRldmljZQorbnVtYmVyLiBDdXJyZW50bHkgdGhpcyBkcml2ZXIgY2Fubm90IHJlc2l6ZSBleHRlbmRlZCBhdHRyaWJ1dGVzIC0gaXQgbWVhbnMKK3RoYXQgaWYgc29tZWJvZHkgKEkgZG9uJ3Qga25vdyB3aG8/KSBoYXMgc2V0ICJVSUQiLCAiR0lEIiwgIk1PREUiIG9yICJERVYiCithdHRyaWJ1dGVzIHdpdGggZGlmZmVyZW50IHNpemVzLCB0aGV5IHdvbid0IGJlIHJld3JpdHRlbiBhbmQgY2hhbmdpbmcgdGhlc2UKK3ZhbHVlcyBkb2Vzbid0IHdvcmsuCisKKworU3ltbGlua3MKKworWW91IGNhbiBkbyBzeW1saW5rcyBvbiBIUEZTIHBhcnRpdGlvbiwgc3ltbGlua3MgYXJlIGFjaGlldmVkIGJ5IHNldHRpbmcgZXh0ZW5kZWQKK2F0dHJpYnV0ZSBuYW1lZCAiU1lNTElOSyIgd2l0aCBzeW1saW5rIHZhbHVlLiBMaWtlIG9uIGV4dDIsIHlvdSBjYW4gY2hvd24gYW5kCitjaGdycCBzeW1saW5rcyBidXQgSSBkb24ndCBrbm93IHdoYXQgaXMgaXQgZ29vZCBmb3IuIGNobW9kaW5nIHN5bWxpbmsgcmVzdWx0cworaW4gY2htb2RpbmcgZmlsZSB3aGVyZSBzeW1saW5rIHBvaW50cy4gVGhlc2Ugc3ltbGlua3MgYXJlIGp1c3QgZm9yIExpbnV4IHVzZSBhbmQKK2luY29tcGF0aWJsZSB3aXRoIE9TLzIuIE9TLzIgUG1TaGVsbCBzeW1saW5rcyBhcmUgbm90IHN1cHBvcnRlZCBiZWNhdXNlIHRoZXkgYXJlCitzdG9yZWQgaW4gdmVyeSBjcmF6eSB3YXkuIFRoZXkgdHJpZWQgdG8gZG8gaXQgc28gdGhhdCBsaW5rIGNoYW5nZXMgd2hlbiBmaWxlIGlzCittb3ZlZCAuLi4gc29tZXRpbWVzIGl0IHdvcmtzLiBCdXQgdGhlIGxpbmsgaXMgcGFydGx5IHN0b3JlZCBpbiBkaXJlY3RvcnkKK2V4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIHBhcnRseSBpbiBPUzJTWVMuSU5JLiBJIGRvbid0IHdhbnQgKGFuZCBkb24ndCBrbm93IGhvdykKK3RvIGFuYWx5emUgb3IgY2hhbmdlIE9TMlNZUy5JTkkuCisKKworQ29kZXBhZ2VzCisKK0hQRlMgY2FuIGNvbnRhaW4gc2V2ZXJhbCB1cHBlcmNhc2luZyB0YWJsZXMgZm9yIHNldmVyYWwgY29kZXBhZ2VzIGFuZCBlYWNoCitmaWxlIGhhcyBhIHBvaW50ZXIgdG8gY29kZXBhZ2UgaXQncyBuYW1lIGlzIGluLiBIb3dldmVyIE9TLzIgd2FzIGNyZWF0ZWQgaW4KK0FtZXJpY2Egd2hlcmUgcGVvcGxlIGRvbid0IGNhcmUgbXVjaCBhYm91dCBjb2RlcGFnZXMgYW5kIHNvIG11bHRpcGxlIGNvZGVwYWdlcworc3VwcG9ydCBpcyBxdWl0ZSBidWdneS4gSSBoYXZlIEN6ZWNoIE9TLzIgd29ya2luZyBpbiBjb2RlcGFnZSA4NTIgb24gbXkgZGlzay4KK09uY2UgSSBib290ZWQgRW5nbGlzaCBPUy8yIHdvcmtpbmcgaW4gY3AgODUwIGFuZCBJIGNyZWF0ZWQgYSBmaWxlIG9uIG15IDg1MgorcGFydGl0aW9uLiBJdCBtYXJrZWQgZmlsZSBuYW1lIGNvZGVwYWdlIGFzIDg1MCAtIGdvb2QuIEJ1dCB3aGVuIEkgYWdhaW4gYm9vdGVkCitDemVjaCBPUy8yLCB0aGUgZmlsZSB3YXMgY29tcGxldGVseSBpbmFjY2Vzc2libGUgdW5kZXIgYW55IG5hbWUuIEl0IHNlZW1zIHRoYXQKK09TLzIgdXBwZXJjYXNlcyB0aGUgc2VhcmNoIHBhdHRlcm4gd2l0aCBpdHMgc3lzdGVtIGNvZGUgcGFnZSAoODUyKSBhbmQgZmlsZQorbmFtZSBpdCdzIGNvbXBhcmluZyB0byB3aXRoIGl0cyBjb2RlIHBhZ2UgKDg1MCkuIFRoZXNlIGNvdWxkIG5ldmVyIG1hdGNoLiBJcyBpdAorcmVhbGx5IHdoYXQgSUJNIGRldmVsb3BlcnMgd2FudGVkPyBCdXQgcHJvYmxlbXMgY29udGludWVkLiBXaGVuIEkgY3JlYXRlZCBpbgorQ3plY2ggT1MvMiBhbm90aGVyIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnksIHRoYXQgZmlsZSB3YXMgaW5hY2Nlc3NpYmxlIHRvby4gT1MvMgorcHJvYmFibHkgdXNlcyBkaWZmZXJlbnQgdXBwZXJjYXNpbmcgbWV0aG9kIHdoZW4gc2VhcmNoaW5nIHdoZXJlIHRvIHBsYWNlIGEgZmlsZQorKG5vdGUsIHRoYXQgZmlsZXMgaW4gSFBGUyBkaXJlY3RvcnkgbXVzdCBiZSBzb3J0ZWQpIGFuZCB3aGVuIHNlYXJjaGluZyBmb3IKK2EgZmlsZS4gRmluYWxseSB3aGVuIEkgb3BlbmVkIHRoaXMgZGlyZWN0b3J5IGluIFBtU2hlbGwsIFBtU2hlbGwgY3Jhc2hlZCAodGhlCitmdW5ueSB0aGluZyB3YXMgdGhhdCwgd2hlbiByZWJvb3RlZCwgUG1TaGVsbCB0cmllZCB0byByZW9wZW4gdGhpcyBkaXJlY3RvcnkKK2FnYWluIDotKS4gY2hrZHNrIGhhcHBpbHkgaWdub3JlcyB0aGVzZSBlcnJvcnMgYW5kIG9ubHkgbG93LWxldmVsIGRpc2sKK21vZGlmaWNhdGlvbiBzYXZlZCBtZS4gIE5ldmVyIG1peCBkaWZmZXJlbnQgbGFuZ3VhZ2UgdmVyc2lvbnMgb2YgT1MvMiBvbiBvbmUKK3N5c3RlbSBhbHRob3VnaCBIUEZTIHdhcyBkZXNpZ25lZCB0byBhbGxvdyB0aGF0LgorT0ssIEkgY291bGQgaW1wbGVtZW50IGNvbXBsZXggY29kZXBhZ2Ugc3VwcG9ydCB0byB0aGlzIGRyaXZlciBidXQgSSB0aGluayBpdAord291bGQgY2F1c2UgbW9yZSBwcm9ibGVtcyB0aGFuIGJlbmVmaXQgd2l0aCBzdWNoIGJ1Z2d5IGltcGxlbWVudGF0aW9uIGluIE9TLzIuCitTbyB0aGlzIGRyaXZlciBzaW1wbHkgdXNlcyBmaXJzdCBjb2RlcGFnZSBpdCBmaW5kcyBmb3IgdXBwZXJjYXNpbmcgYW5kCitsb3dlcmNhc2luZyBubyBtYXR0ZXIgd2hhdCdzIGZpbGUgY29kZXBhZ2UgaW5kZXguIFVzdWFsbHkgYWxsIGZpbGUgbmFtZXMgYXJlIGluCit0aGlzIGNvZGVwYWdlIC0gaWYgeW91IGRvbid0IHRyeSB0byBkbyB3aGF0IEkgZGVzY3JpYmVkIGFib3ZlIDotKQorCisKK0tub3duIGJ1Z3MKKworSFBGUzM4NiBvbiBPUy8yIHNlcnZlciBpcyBub3Qgc3VwcG9ydGVkLiBIUEZTMzg2IGluc3RhbGxlZCBvbiBub3JtYWwgT1MvMiBjbGllbnQKK3Nob3VsZCB3b3JrLiBJZiB5b3UgaGF2ZSBPUy8yIHNlcnZlciwgdXNlIG9ubHkgcmVhZC1vbmx5IG1vZGUuIEkgZG9uJ3Qga25vdyBob3cKK3RvIGhhbmRsZSBzb21lIEhQRlMzODYgc3RydWN0dXJlcyBsaWtlIGFjY2VzcyBjb250cm9sIGxpc3Qgb3IgZXh0ZW5kZWQgcGVybQorbGlzdCwgSSBkb24ndCBrbm93IGhvdyB0byBkZWxldGUgdGhlbSB3aGVuIGZpbGUgaXMgZGVsZXRlZCBhbmQgaG93IHRvIG5vdAorb3ZlcndyaXRlIHRoZW0gd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzLiBTZW5kIG1lIHNvbWUgaW5mbyBvbiB0aGVzZSBzdHJ1Y3R1cmVzCithbmQgSSdsbCBtYWtlIGl0LiBIb3dldmVyLCB0aGlzIGRyaXZlciBzaG91bGQgZGV0ZWN0IHByZXNlbmNlIG9mIEhQRlMzODYKK3N0cnVjdHVyZXMsIHJlbW91bnQgcmVhZC1vbmx5IGFuZCBub3QgZGVzdHJveSB0aGVtIChJIGhvcGUpLgorCitXaGVuIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcywgdGhleSB3aWxsIGJlIHRydW5jYXRlZAorYW5kIG5vIGVycm9yIGlzIHJldHVybmVkLgorCitPUy8yIGNhbid0IGFjY2VzcyBmaWxlcyBpZiB0aGUgcGF0aCBpcyBsb25nZXIgdGhhbiBhYm91dCAyNTYgY2hhcnMgYnV0IHRoaXMKK2RyaXZlciBhbGxvd3MgeW91IHRvIGRvIGl0LiBjaGtkc2sgaWdub3JlcyBzdWNoIGVycm9ycy4KKworU29tZXRpbWVzIHlvdSB3b24ndCBiZSBhYmxlIHRvIGRlbGV0ZSBzb21lIGZpbGVzIG9uIGEgdmVyeSBmdWxsIGZpbGVzeXN0ZW0KKyhyZXR1cm5pbmcgZXJyb3IgRU5PU1BDKS4gVGhhdCdzIGJlY2F1c2UgZmlsZSBpbiBub24tbGVhZiBub2RlIGluIGRpcmVjdG9yeSB0cmVlCisob25lIGRpcmVjdG9yeSwgaWYgaXQncyBsYXJnZSwgaGFzIGRpcmVudHMgaW4gdHJlZSBvbiBIUEZTKSBtdXN0IGJlIHJlcGxhY2VkCit3aXRoIGFub3RoZXIgbm9kZSB3aGVuIGRlbGV0ZWQuIEFuZCB0aGF0IG5ldyBmaWxlIG1pZ2h0IGhhdmUgbGFyZ2VyIG5hbWUgdGhhbgordGhlIG9sZCBvbmUgc28gdGhlIG5ldyBuYW1lIGRvZXNuJ3QgZml0IGluIGRpcmVjdG9yeSBub2RlIChkbm9kZSkuIEFuZCB0aGF0Cit3b3VsZCByZXN1bHQgaW4gZGlyZWN0b3J5IHRyZWUgc3BsaXR0aW5nLCB0aGF0IHRha2VzIGRpc2sgc3BhY2UuIFdvcmthcm91bmQgaXMKK3RvIGRlbGV0ZSBvdGhlciBmaWxlcyB0aGF0IGFyZSBsZWFmIChwcm9iYWJpbGl0eSB0aGF0IHRoZSBmaWxlIGlzIG5vbi1sZWFmIGlzCithYm91dCAxLzUwKSBvciB0byB0cnVuY2F0ZSBmaWxlIGZpcnN0IHRvIG1ha2Ugc29tZSBzcGFjZS4KK1lvdSBlbmNvdW50ZXIgdGhpcyBwcm9ibGVtIG9ubHkgaWYgeW91IGhhdmUgbWFueSBkaXJlY3RvcmllcyBzbyB0aGF0CitwcmVhbGxvY2F0ZWQgZGlyZWN0b3J5IGJhbmQgaXMgZnVsbCBpLmUuCisJbnVtYmVyX29mX2RpcmVjdG9yaWVzIC8gc2l6ZV9vZl9maWxlc3lzdGVtX2luX21iID4gNC4KKworWW91IGNhbid0IGRlbGV0ZSBvcGVuIGRpcmVjdG9yaWVzLgorCitZb3UgY2FuJ3QgcmVuYW1lIG92ZXIgZGlyZWN0b3JpZXMgKHdoYXQgaXMgaXQgZ29vZCBmb3I/KS4KKworUmVuYW1pbmcgZmlsZXMgc28gdGhhdCBvbmx5IGNhc2UgY2hhbmdlcyBkb2Vzbid0IHdvcmsuIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGl0CitidXQgdmZzIGRvZXNuJ3QuIFNvbWV0aGluZyBsaWtlICdtdiBmaWxlIEZJTEUnIHdvbid0IHdvcmsuCisKK0FsbCBhdGltZXMgYW5kIGRpcmVjdG9yeSBtdGltZXMgYXJlIG5vdCB1cGRhdGVkLiBUaGF0J3MgYmVjYXVzZSBvZiBwZXJmb3JtYW5jZQorcmVhc29ucy4gSWYgeW91IGV4dHJlbWVseSB3aXNoIHRvIHVwZGF0ZSB0aGVtLCBsZXQgbWUga25vdywgSSdsbCB3cml0ZSBpdCAoYnV0CitpdCB3aWxsIGJlIHNsb3cpLgorCitXaGVuIHRoZSBzeXN0ZW0gaXMgb3V0IG9mIG1lbW9yeSBhbmQgc3dhcCwgaXQgbWF5IHNsaWdodGx5IGNvcnJ1cHQgZmlsZXN5c3RlbQorKGxvc3QgZmlsZXMsIHVuYmFsYW5jZWQgZGlyZWN0b3JpZXMpLiAoSSBndWVzcyBhbGwgZmlsZXN5c3RlbSBtYXkgZG8gaXQpLgorCitXaGVuIGNvbXBpbGVkLCB5b3UgZ2V0IHdhcm5pbmc6IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzbid0IGEgcHJvdG90eXBlLiBEb2VzCithbnlib2R5IGtub3cgd2hhdCBkb2VzIGl0IG1lYW4/CisKKworV2hhdCBkb2VzICJ1bmJhbGFuY2VkIHRyZWUiIG1lc3NhZ2UgbWVhbj8KKworT2xkIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGNyZWF0ZWQgc29tZXRpbWVzIHVuYmFsYW5jZWQgZG5vZGUgdHJlZXMuIE9TLzIKK2Noa2RzayBkb2Vzbid0IHNjcmVhbSBpZiB0aGUgdHJlZSBpcyB1bmJhbGFuY2VkIChhbmQgc29tZXRpbWVzIGNyZWF0ZXMKK3VuYmFsYW5jZWQgdHJlZXMgdG9vIDotKSBidXQgYm90aCBIUEZTIGFuZCBIUEZTMzg2IGNvbnRhaW4gYnVnIHRoYXQgaXQgcmFyZWx5CitjcmFzaGVzIHdoZW4gdGhlIHRyZWUgaXMgbm90IGJhbGFuY2VkLiBUaGlzIGRyaXZlciBoYW5kbGVzIHVuYmFsYW5jZWQgdHJlZXMKK2NvcnJlY3RseSBhbmQgd3JpdGVzIHdhcm5pbmcgaWYgaXQgZmluZHMgdGhlbS4gSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIHRoaXMgaXMKK3Byb2JhYmx5IGJlY2F1c2Ugb2YgZGlyZWN0b3JpZXMgY3JlYXRlZCB3aXRoIG9sZCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgorV29ya2Fyb3VuZCBpcyB0byBtb3ZlIGFsbCBmaWxlcyBmcm9tIHRoYXQgZGlyZWN0b3J5IHRvIGFub3RoZXIgYW5kIHRoZW4gYmFjaworYWdhaW4uIERvIGl0IGluIExpbnV4LCBub3QgT1MvMiEgSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UgaW4gZGlyZWN0b3J5IHRoYXQgaXMKK3dob2xlIGNyZWF0ZWQgYnkgdGhpcyBkcml2ZXIsIGl0IGlzIEJVRyAtIGxldCBtZSBrbm93IGFib3V0IGl0LgorCisKK0J1Z3MgaW4gT1MvMgorCitXaGVuIHlvdSBoYXZlIHR3byAob3IgbW9yZSkgbG9zdCBkaXJlY3RvcmllcyBwb2ludGluZyBlYWNoIHRvIG90aGVyLCBjaGtkc2sKK2xvY2tzIHVwIHdoZW4gcmVwYWlyaW5nIGZpbGVzeXN0ZW0uCisKK1NvbWV0aW1lcyAoSSB0aGluayBpdCdzIHJhbmRvbSkgd2hlbiB5b3UgY3JlYXRlIGEgZmlsZSB3aXRoIG9uZS1jaGFyIG5hbWUgdW5kZXIKK09TLzIsIE9TLzIgbWFya3MgaXQgYXMgJ2xvbmcnLiBjaGtkc2sgdGhlbiByZW1vdmVzIHRoaXMgZmxhZyBzYXlpbmcgIk1pbm9yIGZzCitlcnJvciBjb3JyZWN0ZWQiLgorCitGaWxlIG5hbWVzIGxpa2UgImEgLmIiIGFyZSBtYXJrZWQgYXMgJ2xvbmcnIGJ5IE9TLzIgYnV0IGNoa2RzayAiY29ycmVjdHMiIGl0IGFuZAorbWFya3MgdGhlbSBhcyBzaG9ydCAoYW5kIHdyaXRlcyAibWlub3IgZnMgZXJyb3IgY29ycmVjdGVkIikuIFRoaXMgYnVnIGlzIG5vdCBpbgorSFBGUzM4Ni4KKworQ29kZXBhZ2UgYnVncyBkZXNjcmliZWQgYWJvdmUuCisKK0lmIHlvdSBkb24ndCBpbnN0YWxsIGZpeHBhY2tzLCB0aGVyZSBhcmUgbWFueSwgbWFueSBtb3JlLi4uCisKKworSGlzdG9yeQorCiswLjkwIEZpcnN0IHB1YmxpYyByZWxlYXNlCiswLjkxIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBzaG9vdGluZyB0byBtZW1vcnkgd2hlbiB3cml0ZV9pbm9kZSB3YXMgY2FsbGVkIG9uCisJb3BlbiBpbm9kZSAocmFyZWx5IGhhcHBlbmVkKQorMC45MiBGaXhlZCBhIGxpdHRsZSBtZW1vcnkgbGVhayBpbiBmcmVlaW5nIGRpcmVjdG9yeSBpbm9kZXMKKzAuOTMgRml4ZWQgYnVnIHRoYXQgbG9ja2VkIHVwIHRoZSBtYWNoaW5lIHdoZW4gdGhlcmUgd2VyZSB0b28gbWFueSBmaWxlbmFtZXMKKwl3aXRoIGZpcnN0IDE1IGNoYXJhY3RlcnMgc2FtZQorICAgICBGaXhlZCB3cml0ZV9maWxlIHRvIHplcm8gZmlsZSB3aGVuIHdyaXRpbmcgYmVoaW5kIGZpbGUgZW5kCiswLjk0IEZpeGVkIGEgbGl0dGxlIG1lbW9yeSBsZWFrIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBidXN5IGZpbGUgb3IgZGlyZWN0b3J5CiswLjk1IEZpeGVkIGEgYnVnIHRoYXQgaV9ocGZzX3BhcmVudF9kaXIgd2FzIG5vdCB1cGRhdGVkIHdoZW4gbW92aW5nIGZpbGVzCisxLjkwIEZpcnN0IHZlcnNpb24gZm9yIDIuMS4xeHgga2VybmVscworMS45MSBGaXhlZCBhIGJ1ZyB0aGF0IGNoa19zZWN0b3JzIGZhaWxlZCB3aGVuIHNlY3RvcnMgd2VyZSBhdCB0aGUgZW5kIG9mIGRpc2sKKyAgICAgRml4ZWQgYSByYWNlLWNvbmRpdGlvbiB3aGVuIHdyaXRlX2lub2RlIGlzIGNhbGxlZCB3aGlsZSBkZWxldGluZyBmaWxlCisgICAgIEZpeGVkIGEgYnVnIHRoYXQgY291bGQgcG9zc2libHkgaGFwcGVuICh3aXRoIHZlcnkgbG93IHByb2JhYmlsaXR5KSB3aGVuCisgICAgIAl1c2luZyAweGZmIGluIGZpbGVuYW1lcworICAgICBSZXdyaXR0ZW4gbG9ja2luZyB0byBhdm9pZCByYWNlLWNvbmRpdGlvbnMKKyAgICAgTW91bnQgb3B0aW9uICdlYXMnIG5vdyB3b3JrcworICAgICBGc3luYyBubyBsb25nZXIgcmV0dXJucyBlcnJvcgorICAgICBGaWxlcyBiZWdpbm5pbmcgd2l0aCAnLicgYXJlIG1hcmtlZCBoaWRkZW4KKyAgICAgUmVtb3VudCBzdXBwb3J0IGFkZGVkCisgICAgIEFsbG9jIGlzIG5vdCBzbyBzbG93IHdoZW4gZmlsZXN5c3RlbSBiZWNvbWVzIGZ1bGwKKyAgICAgQXRpbWVzIGFyZSBubyBtb3JlIHVwZGF0ZWQgYmVjYXVzZSBpdCBzbG93cyBkb3duIG9wZXJhdGlvbgorICAgICBDb2RlIGNsZWFudXAgKHJlbW92ZWQgYWxsIGNvbW1lbnRlZCBkZWJ1ZyBwcmludHMpCisxLjkyIENvcnJlY3RlZCBhIGJ1ZyB3aGVuIHN5bmMgd2FzIGNhbGxlZCBqdXN0IGJlZm9yZSBjbG9zaW5nIGZpbGUKKzEuOTMgTW9kaWZpZWQsIHNvIHRoYXQgaXQgd29ya3Mgd2l0aCBrZXJuZWxzID49IDIuMS4xMzEsIEkgZG9uJ3Qga25vdyBpZiBpdAorCXdvcmtzIHdpdGggcHJldmlvdXMgdmVyc2lvbnMKKyAgICAgRml4ZWQgYSBwb3NzaWJsZSBwcm9ibGVtIHdpdGggZGlza3MgPiA2NEcgKGJ1dCBJIGRvbid0IGhhdmUgb25lLCBzbyBJIGNhbid0CisgICAgIAl0ZXN0IGl0KQorICAgICBGaXhlZCBhIGZpbGUgb3ZlcmZsb3cgYXQgMkcKKyAgICAgQWRkZWQgbmV3IG9wdGlvbiAndGltZXNoaWZ0JworICAgICBDaGFuZ2VkIGJlaGF2aW91ciBvbiBIUEZTMzg2OiBJdCBpcyBub3cgcG9zc2libGUgdG8gb3BlcmF0ZSBvbiBIUEZTMzg2IGluCisgICAgIAlyZWFkLW9ubHkgbW9kZQorICAgICBGaXhlZCBhIGJ1ZyB0aGF0IHNsb3dlZCBkb3duIGFsbG9jIGFuZCBwcmV2ZW50ZWQgYWxsb2NhdGluZyAxMDAlIHNwYWNlCisgICAgIAkodGhpcyBidWcgd2FzIG5vdCBkZXN0cnVjdGl2ZSkKKzEuOTQgQWRkZWQgd29ya2Fyb3VuZCBmb3Igb25lIGJ1ZyBpbiBMaW51eAorICAgICBGaXhlZCBvbmUgYnVmZmVyIGxlYWsKKyAgICAgRml4ZWQgc29tZSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIGxhcmdlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGJ1dCBpdCdzIHN0aWxsCisJbm90IDEwMCUgb2ssIEkgaGF2ZSBubyBpbmZvIG9uIGl0IGFuZCBPUy8yIGRvZXNuJ3Qgd2FudCB0byBjcmVhdGUgdGhlbSkKKyAgICAgUmV3cml0dGVuIGFsbG9jYXRpb24KKyAgICAgRml4ZWQgYSBidWcgd2l0aCBpX2Jsb2NrcyAoZHUgc29tZXRpbWVzIGRpZG4ndCBkaXNwbGF5IGNvcnJlY3QgdmFsdWVzKQorICAgICBEaXJlY3RvcmllcyBoYXZlIG5vIGxvbmdlciBhcmNoaXZlIGF0dHJpYnV0ZSBzZXQgKHNvbWUgcHJvZ3JhbXMgZG9uJ3QgbGlrZQorCWl0KQorICAgICBGaXhlZCBhIGJ1ZyB0aGF0IGl0IHNldCBiYWRseSBvbmUgZmxhZyBpbiBsYXJnZSBhbm9kZSB0cmVlIChpdCB3YXMgbm90CisJZGVzdHJ1Y3RpdmUpCisxLjk1IEZpeGVkIG9uZSBidWZmZXIgbGVhaywgdGhhdCBjb3VsZCBoYXBwZW4gb24gY29ycnVwdGVkIGZpbGVzeXN0ZW0KKyAgICAgRml4ZWQgb25lIGJ1ZyBpbiBhbGxvY2F0aW9uIGluIDEuOTQKKzEuOTYgQWRkZWQgd29ya2Fyb3VuZCBmb3Igb25lIGJ1ZyBpbiBPUy8yIChIUEZTIGxvY2tlZCB1cCwgSFBGUzM4NiByZXBvcnRlZAorCWVycm9yIHNvbWV0aW1lcyB3aGVuIG9wZW5pbmcgZGlyZWN0b3JpZXMgaW4gUE1TSEVMTCkKKyAgICAgRml4ZWQgYSBwb3NzaWJsZSBiaXRtYXAgcmFjZQorICAgICBGaXhlZCBwb3NzaWJsZSBwcm9ibGVtIG9uIGxhcmdlIGRpc2tzCisgICAgIFlvdSBjYW4gbm93IGRlbGV0ZSBvcGVuIGZpbGVzCisgICAgIEZpeGVkIGEgbm9uZGVzdHJ1Y3RpdmUgcmFjZSBpbiByZW5hbWUKKzEuOTcgU3VwcG9ydCBmb3IgSFBGUyB2MyAob24gbGFyZ2UgcGFydGl0aW9ucykKKyAgICAgRml4ZWQgYSBidWcgdGhhdCBpdCBkaWRuJ3QgYWxsb3cgY3JlYXRpb24gb2YgZmlsZXMgPiAxMjhNIChpdCBzaG91bGQgYmUgMkcpCisxLjk3LjEgQ2hhbmdlZCBuYW1lcyBvZiBnbG9iYWwgc3ltYm9scworICAgICAgIEZpeGVkIGEgYnVnIHdoZW4gY2htb2Rpbmcgb3IgY2hvd25pbmcgcm9vdCBkaXJlY3RvcnkKKzEuOTggRml4ZWQgYSBkZWFkbG9jayB3aGVuIHVzaW5nIG9sZF9yZWFkZGlyCisgICAgIEJldHRlciBkaXJlY3RvcnkgaGFuZGxpbmc7IHdvcmthcm91bmQgZm9yICJ1bmJhbGFuY2VkIHRyZWUiIGJ1ZyBpbiBPUy8yCisxLjk5IENvcnJlY3RlZCBhIHBvc3NpYmxlIHByb2JsZW0gd2hlbiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2Ugd2hpbGUgZGVsZXRpbmcKKwlmaWxlCisgICAgIE5vdyBpdCB0cmllcyB0byB0cnVuY2F0ZSB0aGUgZmlsZSBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2Ugd2hlbiBkZWxldGluZworICAgICBSZW1vdmVkIGEgbG90IG9mIHJlZHVuZGFudCBjb2RlCisyLjAwIEZpeGVkIGEgYnVnIGluIHJlbmFtZSAoaXQgd2FzIHRoZXJlIHNpbmNlIDEuOTYpCisgICAgIEJldHRlciBhbnRpLWZyYWdtZW50YXRpb24gc3RyYXRlZ3kKKzIuMDEgRml4ZWQgcHJvYmxlbSB3aXRoIGRpcmVjdG9yeSBsaXN0aW5nIG92ZXIgTkZTCisgICAgIERpcmVjdG9yeSBsc2VlayBub3cgY2hlY2tzIGZvciBwcm9wZXIgcGFyYW1ldGVycworICAgICBGaXhlZCByYWNlLWNvbmRpdGlvbiBpbiBidWZmZXIgY29kZSAtIGl0IGlzIGluIGFsbCBmaWxlc3lzdGVtcyBpbiBMaW51eDsKKyAgICAgICAgd2hlbiByZWFkaW5nIGRldmljZSAoY2F0IC9kZXYvaGRhKSB3aGlsZSBjcmVhdGluZyBmaWxlcyBvbiBpdCwgZmlsZXMKKyAgICAgICAgY291bGQgYmUgZGFtYWdlZAorMi4wMiBXb3Jhcm91bmQgZm9yIGJ1ZyBpbiBicmVhZGEgaW4gTGludXguIGJyZWFkYSBjb3VsZCBjYXVzZSBhY2Nlc3NlcyBiZXlvbmQKKyAgICAgICAgZW5kIG9mIHBhcnRpdGlvbgorMi4wMyBDaGFyLCBibG9jayBkZXZpY2VzIGFuZCBwaXBlcyBhcmUgY29ycmVjdGx5IGNyZWF0ZWQKKyAgICAgRml4ZWQgbm9uLWNyYXNoaW5nIHJhY2UgaW4gdW5saW5rIChBbGV4YW5kZXIgVmlybykKKyAgICAgTm93IGl0IHdvcmtzIHdpdGggSmFwYW5lc2UgdmVyc2lvbiBvZiBPUy8yCisyLjA0IEZpeGVkIGVycm9yIHdoZW4gZnRydW5jYXRlIHVzZWQgdG8gZXh0ZW5kIGZpbGUKKzIuMDUgRml4ZWQgY3Jhc2ggd2hlbiBnb3QgbW91bnQgcGFyYW1ldGVycyB3aXRob3V0ID0KKyAgICAgRml4ZWQgY3Jhc2ggd2hlbiBhbGxvY2F0aW9uIG9mIGFub2RlIGZhaWxlZCBkdWUgdG8gZnVsbCBkaXNrCisgICAgIEZpeGVkIHNvbWUgY3Jhc2hlcyB3aGVuIGJsb2NrIGlvIG9yIGlub2RlIGFsbG9jYXRpb24gZmFpbGVkCisyLjA2IEZpeGVkIHNvbWUgY3Jhc2ggb24gY29ycnVwdGVkIGRpc2sgc3RydWN0dXJlcworICAgICBCZXR0ZXIgYWxsb2NhdGlvbiBzdHJhdGVneQorICAgICBSZXNjaGVkdWxlIHBvaW50cyBhZGRlZCBzbyB0aGF0IGl0IGRvZXNuJ3QgbG9jayBDUFUgbG9uZyB0aW1lCisgICAgIEl0IHNob3VsZCB3b3JrIGluIHJlYWQtb25seSBtb2RlIG9uIFdhcnAgU2VydmVyCisyLjA3IE1vcmUgZml4ZXMgZm9yIFdhcnAgU2VydmVyLiBOb3cgaXQgcmVhbGx5IHdvcmtzCisyLjA4IENyZWF0aW5nIG5ldyBmaWxlcyBpcyBub3Qgc28gc2xvdyBvbiBsYXJnZSBkaXNrcworICAgICBBbiBhdHRlbXB0IHRvIHN5bmMgZGVsZXRlZCBmaWxlIGRvZXMgbm90IGdlbmVyYXRlIGZpbGVzeXN0ZW0gZXJyb3IKKzIuMDkgRml4ZWQgZXJyb3Igb24gZXh0cmVtbHkgZnJhZ21lbnRlZCBmaWxlcworCisKKyB2aW06IHNldCB0ZXh0d2lkdGg9ODA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGExMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnR4dApAQCAtMCwwICsxLDM4IEBACitNb3VudCBvcHRpb25zIHRoYXQgYXJlIHRoZSBzYW1lIGFzIGZvciBtc2RvcyBhbmQgdmZhdCBwYXJ0aXRpb25zLgorCisgIGdpZD1ubm4JQWxsIGZpbGVzIGluIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBpbiBncm91cCBubm4uCisgIHVpZD1ubm4JQWxsIGZpbGVzIGluIHRoZSBwYXJ0aXRpb24gd2lsbCBiZSBvd25lZCBieSB1c2VyIGlkIG5ubi4KKyAgdW1hc2s9bm5uCVRoZSBwZXJtaXNzaW9uIG1hc2sgKHNlZSB1bWFzaygxKSkgZm9yIHRoZSBwYXJ0aXRpb24uCisKK01vdW50IG9wdGlvbnMgdGhhdCBhcmUgdGhlIHNhbWUgYXMgdmZhdCBwYXJ0aXRpb25zLiBUaGVzZSBhcmUgb25seSB1c2VmdWwKK3doZW4gdXNpbmcgZGlzY3MgZW5jb2RlZCB1c2luZyBNaWNyb3NvZnQncyBKb2xpZXQgZXh0ZW5zaW9ucy4KKyAgaW9jaGFyc2V0PW5hbWUgQ2hhcmFjdGVyIHNldCB0byB1c2UgZm9yIGNvbnZlcnRpbmcgZnJvbSBVbmljb2RlIHRvCisJCUFTQ0lJLiAgSm9saWV0IGZpbGVuYW1lcyBhcmUgc3RvcmVkIGluIFVuaWNvZGUgZm9ybWF0LCBidXQKKwkJVW5peCBmb3IgdGhlIG1vc3QgcGFydCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBVbmljb2RlLgorCQlUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbiBvZiBkb2luZyBVVEY4IHRyYW5zbGF0aW9ucyB3aXRoIHRoZQorCQl1dGY4IG9wdGlvbi4KKyAgdXRmOCAgICAgICAgICBFbmNvZGUgVW5pY29kZSBuYW1lcyBpbiBVVEY4IGZvcm1hdC4gRGVmYXVsdCBpcyBuby4KKworTW91bnQgb3B0aW9ucyB1bmlxdWUgdG8gdGhlIGlzb2ZzIGZpbGVzeXN0ZW0uCisgIGJsb2NrPTUxMiAgICAgU2V0IHRoZSBibG9jayBzaXplIGZvciB0aGUgZGlzayB0byA1MTIgYnl0ZXMKKyAgYmxvY2s9MTAyNCAgICBTZXQgdGhlIGJsb2NrIHNpemUgZm9yIHRoZSBkaXNrIHRvIDEwMjQgYnl0ZXMKKyAgYmxvY2s9MjA0OCAgICBTZXQgdGhlIGJsb2NrIHNpemUgZm9yIHRoZSBkaXNrIHRvIDIwNDggYnl0ZXMKKyAgY2hlY2s9cmVsYXhlZCBNYXRjaGVzIGZpbGVuYW1lcyB3aXRoIGRpZmZlcmVudCBjYXNlcworICBjaGVjaz1zdHJpY3QgIE1hdGNoZXMgb25seSBmaWxlbmFtZXMgd2l0aCB0aGUgZXhhY3Qgc2FtZSBjYXNlCisgIGNydWZ0ICAgICAgICAgVHJ5IHRvIGhhbmRsZSBiYWRseSBmb3JtYXR0ZWQgQ0RzLgorICBtYXA9b2ZmICAgICAgIERvIG5vdCBtYXAgbm9uLVJvY2sgUmlkZ2UgZmlsZW5hbWVzIHRvIGxvd2VyIGNhc2UKKyAgbWFwPW5vcm1hbCAgICBNYXAgbm9uLVJvY2sgUmlkZ2UgZmlsZW5hbWVzIHRvIGxvd2VyIGNhc2UKKyAgbWFwPWFjb3JuICAgICBBcyBtYXA9bm9ybWFsIGJ1dCBhbHNvIGFwcGx5IEFjb3JuIGV4dGVuc2lvbnMgaWYgcHJlc2VudAorICBtb2RlPXh4eCAgICAgIFNldHMgdGhlIHBlcm1pc3Npb25zIG9uIGZpbGVzIHRvIHh4eAorICBub2pvbGlldCAgICAgIElnbm9yZSBKb2xpZXQgZXh0ZW5zaW9ucyBpZiB0aGV5IGFyZSBwcmVzZW50LgorICBub3JvY2sgICAgICAgIElnbm9yZSBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgaWYgdGhleSBhcmUgcHJlc2VudC4KKyAgdW5oaWRlICAgICAgICBTaG93IGhpZGRlbiBmaWxlcy4KKyAgc2Vzc2lvbj14ICAgICBTZWxlY3QgbnVtYmVyIG9mIHNlc3Npb24gb24gbXVsdGlzZXNzaW9uIENECisgIHNic2VjdG9yPXh4eCAgU2Vzc2lvbiBiZWdpbnMgZnJvbSBzZWN0b3IgeHh4CisKK1JlY29tbWVuZGVkIGRvY3VtZW50cyBhYm91dCBJU08gOTY2MCBzdGFuZGFyZCBhcmUgbG9jYXRlZCBhdDoKK2h0dHA6Ly93d3cueS1hZGFnaW8uY29tL3B1YmxpYy9zdGFuZGFyZHMvaXNvX2Nkcm9tci90b2NvbnQuaHRtCitmdHA6Ly9mdHAuZWNtYS5jaC9lY21hLXN0L0VjbWEtMTE5LnBkZgorUXVvdGluZyBmcm9tIHRoZSBQREYgIlRoaXMgMm5kIEVkaXRpb24gb2YgU3RhbmRhcmQgRUNNQS0xMTkgaXMgdGVjaG5pY2FsbHkgCitpZGVudGljYWwgd2l0aCBJU08gOTY2MC4iLCBzbyBpdCBpcyBhIHZhbGlkIGFuZCBncmF0aXMgc3Vic3RpdHV0ZSBvZiB0aGUKK29mZmljaWFsIElTTyBzcGVjaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9qZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9qZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTkyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2pmcy50eHQKQEAgLTAsMCArMSwzNSBAQAorSUJNJ3MgSm91cm5hbGVkIEZpbGUgU3lzdGVtIChKRlMpIGZvciBMaW51eAorCitKRlMgSG9tZXBhZ2U6ICBodHRwOi8vamZzLnNvdXJjZWZvcmdlLm5ldC8KKworVGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisKK2lvY2hhcnNldD1uYW1lCUNoYXJhY3RlciBzZXQgdG8gdXNlIGZvciBjb252ZXJ0aW5nIGZyb20gVW5pY29kZSB0bworCQlBU0NJSS4gIFRoZSBkZWZhdWx0IGlzIHRvIGRvIG5vIGNvbnZlcnNpb24uICBVc2UKKwkJaW9jaGFyc2V0PXV0ZjggZm9yIFVURjggdHJhbnNsYXRpb25zLiAgVGhpcyByZXF1aXJlcworCQlDT05GSUdfTkxTX1VURjggdG8gYmUgc2V0IGluIHRoZSBrZXJuZWwgLmNvbmZpZyBmaWxlLgorCQlpb2NoYXJzZXQ9bm9uZSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZXhwbGljaXRseS4KKworcmVzaXplPXZhbHVlCVJlc2l6ZSB0aGUgdm9sdW1lIHRvIDx2YWx1ZT4gYmxvY2tzLiAgSkZTIG9ubHkgc3VwcG9ydHMKKwkJZ3Jvd2luZyBhIHZvbHVtZSwgbm90IHNocmlua2luZyBpdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkKKwkJdmFsaWQgZHVyaW5nIGEgcmVtb3VudCwgd2hlbiB0aGUgdm9sdW1lIGlzIG1vdW50ZWQKKwkJcmVhZC13cml0ZS4gIFRoZSByZXNpemUga2V5d29yZCB3aXRoIG5vIHZhbHVlIHdpbGwgZ3JvdworCQl0aGUgdm9sdW1lIHRvIHRoZSBmdWxsIHNpemUgb2YgdGhlIHBhcnRpdGlvbi4KKworbm9pbnRlZ3JpdHkJRG8gbm90IHdyaXRlIHRvIHRoZSBqb3VybmFsLiAgVGhlIHByaW1hcnkgdXNlIG9mIHRoaXMgb3B0aW9uCisJCWlzIHRvIGFsbG93IGZvciBoaWdoZXIgcGVyZm9ybWFuY2Ugd2hlbiByZXN0b3JpbmcgYSB2b2x1bWUKKwkJZnJvbSBiYWNrdXAgbWVkaWEuICBUaGUgaW50ZWdyaXR5IG9mIHRoZSB2b2x1bWUgaXMgbm90CisJCWd1YXJhbnRlZWQgaWYgdGhlIHN5c3RlbSBhYm5vcm1hbGx5IGFiZW5kcy4KKworaW50ZWdyaXR5CURlZmF1bHQuICBDb21taXQgbWV0YWRhdGEgY2hhbmdlcyB0byB0aGUgam91cm5hbC4gIFVzZSB0aGlzCisJCW9wdGlvbiB0byByZW1vdW50IGEgdm9sdW1lIHdoZXJlIHRoZSBub2ludGVncml0eSBvcHRpb24gd2FzCisJCXByZXZpb3VzbHkgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHJlc3RvcmUgbm9ybWFsIGJlaGF2aW9yLgorCitlcnJvcnM9Y29udGludWUJCUtlZXAgZ29pbmcgb24gYSBmaWxlc3lzdGVtIGVycm9yLgorZXJyb3JzPXJlbW91bnQtcm8JRGVmYXVsdC4gUmVtb3VudCB0aGUgZmlsZXN5c3RlbSByZWFkLW9ubHkgb24gYW4gZXJyb3IuCitlcnJvcnM9cGFuaWMJCVBhbmljIGFuZCBoYWx0IHRoZSBtYWNoaW5lIGlmIGFuIGVycm9yIG9jY3Vycy4KKworUGxlYXNlIHNlbmQgYnVncywgY29tbWVudHMsIGNhcmRzIGFuZCBsZXR0ZXJzIHRvIHNoYWdneUBhdXN0aW4uaWJtLmNvbS4KKworVGhlIEpGUyBtYWlsaW5nIGxpc3QgY2FuIGJlIHN1YnNjcmliZWQgdG8gYnkgdXNpbmcgdGhlIGxpbmsgbGFiZWxlZAorIk1haWwgbGlzdCBTdWJzY3JpYmUiIGF0IG91ciB3ZWIgcGFnZSBodHRwOi8vamZzLnNvdXJjZWZvcmdlLm5ldC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uY3Bmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyYzMwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmNwZnMudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1RoZSBuY3BmcyBmaWxlc3lzdGVtIHVuZGVyc3RhbmRzIHRoZSBOQ1AgcHJvdG9jb2wsIGRlc2lnbmVkIGJ5IHRoZQorTm92ZWxsIENvcnBvcmF0aW9uIGZvciB0aGVpciBOZXRXYXJlKHRtKSBwcm9kdWN0LiAgTkNQIGlzIGZ1bmN0aW9uYWxseQorc2ltaWxhciB0byB0aGUgTkZTIHVzZWQgaW4gdGhlIFRDUC9JUCBjb21tdW5pdHkuCitUbyBtb3VudCBhIE5ldFdhcmUgZmlsZXN5c3RlbSwgeW91IG5lZWQgYSBzcGVjaWFsIG1vdW50IHByb2dyYW0sIHdoaWNoCitjYW4gYmUgZm91bmQgaW4gdGhlIG5jcGZzIHBhY2thZ2UuICBUaGUgaG9tZSBzaXRlIGZvciBuY3BmcyBpcworZnRwLmd3ZGcuZGUvcHViL2xpbnV4L21pc2MvbmNwZnMsIGJ1dCBzdW5zaXRlIGFuZCBpdHMgbWFueSBtaXJyb3JzCit3aWxsIGhhdmUgaXQgYXMgd2VsbC4KKworUmVsYXRlZCBwcm9kdWN0cyBhcmUgbGlud2FyZSBhbmQgbWFyc19ud2UsIHdoaWNoIHdpbGwgZ2l2ZSBMaW51eCBwYXJ0aWFsCitOZXRXYXJlIHNlcnZlciBmdW5jdGlvbmFsaXR5LiAgTGlud2FyZSdzIGhvbWUgc2l0ZSBpcwora2xva2FuLnNoLmN2dXQuY3ovcHViL2xpbnV4L2xpbndhcmU7IG1hcnNfbndlIGNhbiBiZSBmb3VuZCBvbgorZnRwLmd3ZGcuZGUvcHViL2xpbnV4L21pc2MvbmNwZnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODliNDQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtMCwwICsxLDYzMCBAQAorVGhlIExpbnV4IE5URlMgZmlsZXN5c3RlbSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworVGFibGUgb2YgY29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKy0gT3ZlcnZpZXcKKy0gV2ViIHNpdGUKKy0gRmVhdHVyZXMKKy0gU3VwcG9ydGVkIG1vdW50IG9wdGlvbnMKKy0gS25vd24gYnVncyBhbmQgKG1pcy0pZmVhdHVyZXMKKy0gVXNpbmcgTlRGUyB2b2x1bWUgYW5kIHN0cmlwZSBzZXRzCisgIC0gVGhlIERldmljZS1NYXBwZXIgZHJpdmVyCisgIC0gVGhlIFNvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIKKyAgLSBMaW1pdGlhdGlvbnMgd2hlbiB1c2luZyB0aGUgTUQgZHJpdmVyCistIENoYW5nZUxvZworCisKK092ZXJ2aWV3Cis9PT09PT09PQorCitMaW51eC1OVEZTIGNvbWVzIHdpdGggYSBudW1iZXIgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyBrbm93biBhcyBudGZzcHJvZ3MuCitUaGVzZSBpbmNsdWRlIG1rbnRmcywgYSBmdWxsLWZlYXR1cmVkIG50ZnMgZmlsZSBzeXN0ZW0gZm9ybWF0IHV0aWxpdHksCitudGZzdW5kZWxldGUgdXNlZCBmb3IgcmVjb3ZlcmluZyBmaWxlcyB0aGF0IHdlcmUgdW5pbnRlbnRpb25hbGx5IGRlbGV0ZWQKK2Zyb20gYW4gTlRGUyB2b2x1bWUgYW5kIG50ZnNyZXNpemUgd2hpY2ggaXMgdXNlZCB0byByZXNpemUgYW4gTlRGUyBwYXJ0aXRpb24uCitTZWUgdGhlIHdlYiBzaXRlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUbyBtb3VudCBhbiBOVEZTIDEuMi8zLnggKFdpbmRvd3MgTlQ0LzIwMDAvWFAvMjAwMykgdm9sdW1lLCB1c2UgdGhlIGZpbGUKK3N5c3RlbSB0eXBlICdudGZzJy4gIFRoZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHJlYWQtb25seSBtb2RlICh3aXRoIG5vCitmYXVsdC10b2xlcmFuY2UsIGVuY3J5cHRpb24gb3Igam91cm5hbGxpbmcpIGFuZCB2ZXJ5IGxpbWl0ZWQsIGJ1dCBzYWZlLCB3cml0ZQorc3VwcG9ydC4KKworRm9yIGZhdWx0IHRvbGVyYW5jZSBhbmQgcmFpZCBzdXBwb3J0IChpLmUuIHZvbHVtZSBhbmQgc3RyaXBlIHNldHMpLCB5b3UgY2FuCit1c2UgdGhlIGtlcm5lbCdzIFNvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIuICBTZWUgc2VjdGlvbiAiVXNpbmcgU29mdHdhcmUgUkFJRAord2l0aCBOVEZTIiBmb3IgZGV0YWlscy4KKworCitXZWIgc2l0ZQorPT09PT09PT0KKworVGhlcmUgaXMgcGxlbnR5IG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIGxpbnV4LW50ZnMgd2ViIHNpdGUKK2F0IGh0dHA6Ly9saW51eC1udGZzLnNvdXJjZWZvcmdlLm5ldC8KKworVGhlIHdlYiBzaXRlIGhhcyBhIGxvdCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgY29tcHJlaGVuc2l2ZQorRkFRLCBkb2N1bWVudGF0aW9uIG9uIHRoZSBOVEZTIG9uLWRpc2sgZm9ybWF0LCBpbmZvcm1haXRvbiBvbiB0aGUgTGludXgtTlRGUwordXNlcnNwYWNlIHV0aWxpdGllcywgZXRjLgorCisKK0ZlYXR1cmVzCis9PT09PT09PQorCistIFRoaXMgaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBOVEZTIGRyaXZlciB0aGF0IHVzZWQgdG8gYmUgaW4gdGhlIGtlcm5lbC4KKyAgVGhpcyBuZXcgZHJpdmVyIGltcGxlbWVudHMgTlRGUyByZWFkIHN1cHBvcnQgYW5kIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50CisgIHRvIHRoZSBvbGQgbnRmcyBkcml2ZXIuCistIFRoZSBuZXcgZHJpdmVyIGhhcyBmdWxsIHN1cHBvcnQgZm9yIHNwYXJzZSBmaWxlcyBvbiBOVEZTIDMueCB2b2x1bWVzIHdoaWNoCisgIHRoZSBvbGQgZHJpdmVyIGlzbid0IGhhcHB5IHdpdGguCistIFRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIGV4ZWN1dGlvbiBvZiBiaW5hcmllcyBkdWUgdG8gbW1hcCgpIG5vdyBiZWluZworICBzdXBwb3J0ZWQuCistIFRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIGxvb3BiYWNrIG1vdW50aW5nIG9mIGZpbGVzIG9uIE5URlMgd2hpY2ggaXMgdXNlZCBieQorICBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgdG8gZW5hYmxlIHRoZSB1c2VyIHRvIHJ1biBMaW51eCBmcm9tIGFuIE5URlMKKyAgcGFydGl0aW9uIGJ5IGNyZWF0aW5nIGEgbGFyZ2UgZmlsZSB3aGlsZSBpbiBXaW5kb3dzIGFuZCB0aGVuIGxvb3BiYWNrCisgIG1vdW50aW5nIHRoZSBmaWxlIHdoaWxlIGluIExpbnV4IGFuZCBjcmVhdGluZyBhIExpbnV4IGZpbGVzeXN0ZW0gb24gaXQgdGhhdAorICBpcyB1c2VkIHRvIGluc3RhbGwgTGludXggb24gaXQuCistIEEgY29tcGFyaXNvbiBvZiB0aGUgdHdvIGRyaXZlcnMgdXNpbmc6CisJdGltZSBmaW5kIC4gLXR5cGUgZiAtZXhlYyBtZDVzdW0gInt9IiBcOworICBydW4gdGhyZWUgdGltZXMgaW4gc2VxdWVuY2Ugd2l0aCBlYWNoIGRyaXZlciAoYWZ0ZXIgYSByZWJvb3QpIG9uIGEgMS40R2lCCisgIE5URlMgcGFydGl0aW9uLCBzaG93ZWQgdGhlIG5ldyBkcml2ZXIgdG8gYmUgMjAlIGZhc3RlciBpbiB0b3RhbCB0aW1lIGVsYXBzZWQKKyAgKGZyb20gOTo0MyBtaW51dGVzIG9uIGF2ZXJhZ2UgZG93biB0byA3OjUzKS4gIFRoZSB0aW1lIHNwZW50IGluIHVzZXIgc3BhY2UKKyAgd2FzIHVuY2hhbmdlZCBidXQgdGhlIHRpbWUgc3BlbnQgaW4gdGhlIGtlcm5lbCB3YXMgZGVjcmVhc2VkIGJ5IGEgZmFjdG9yIG9mCisgIDIuNSAoZnJvbSA4NSBDUFUgc2Vjb25kcyBkb3duIHRvIDMzKS4KKy0gVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHNob3J0IGZpbGUgbmFtZXMgaW4gZ2VuZXJhbC4gIEZvciBiYWNrd2FyZHMKKyAgY29tcGF0aWJpbGl0eSwgd2UgaW1wbGVtZW50IGFjY2VzcyB0byBmaWxlcyB1c2luZyB0aGVpciBzaG9ydCBmaWxlIG5hbWVzIGlmCisgIHRoZXkgZXhpc3QuICBUaGUgZHJpdmVyIHdpbGwgbm90IGNyZWF0ZSBzaG9ydCBmaWxlIG5hbWVzIGhvd2V2ZXIsIGFuZCBhCisgIHJlbmFtZSB3aWxsIGRpc2NhcmQgYW55IGV4aXN0aW5nIHNob3J0IGZpbGUgbmFtZS4KKy0gVGhlIG5ldyBkcml2ZXIgc3VwcG9ydHMgZXhwb3J0aW5nIG9mIG1vdW50ZWQgTlRGUyB2b2x1bWVzIHZpYSBORlMuCistIFRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIGFzeW5jIGlvIChhaW8pLgorLSBUaGUgbmV3IGRyaXZlciBzdXBwb3J0cyBmc3luYygyKSwgZmRhdGFzeW5jKDIpLCBhbmQgbXN5bmMoMikuCistIFRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIHJlYWR2KDIpIGFuZCB3cml0ZXYoMikuCistIFRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIGFjY2VzcyB0aW1lIHVwZGF0ZXMgKGluY2x1ZGluZyBtdGltZSBhbmQgY3RpbWUpLgorCisKK1N1cHBvcnRlZCBtb3VudCBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PQorCitJbiBhZGRpdGlvbiB0byB0aGUgZ2VuZXJpYyBtb3VudCBvcHRpb25zIGRlc2NyaWJlZCBieSB0aGUgbWFudWFsIHBhZ2UgZm9yIHRoZQorbW91bnQgY29tbWFuZCAobWFuIDggbW91bnQsIGFsc28gc2VlIG1hbiA1IGZzdGFiKSwgdGhlIE5URlMgZHJpdmVyIHN1cHBvcnRzIHRoZQorZm9sbG93aW5nIG1vdW50IG9wdGlvbnM6CisKK2lvY2hhcnNldD1uYW1lCQlEZXByZWNhdGVkIG9wdGlvbi4gIFN0aWxsIHN1cHBvcnRlZCBidXQgcGxlYXNlIHVzZQorCQkJbmxzPW5hbWUgaW4gdGhlIGZ1dHVyZS4gIFNlZSBkZXNjcmlwdGlvbiBmb3IgbmxzPW5hbWUuCisKK25scz1uYW1lCQlDaGFyYWN0ZXIgc2V0IHRvIHVzZSB3aGVuIHJldHVybmluZyBmaWxlIG5hbWVzLgorCQkJVW5saWtlIFZGQVQsIE5URlMgc3VwcHJlc3NlcyBuYW1lcyB0aGF0IGNvbnRhaW4KKwkJCXVuY29udmVydGlibGUgY2hhcmFjdGVycy4gIE5vdGUgdGhhdCBtb3N0IGNoYXJhY3RlcgorCQkJc2V0cyBjb250YWluIGluc3VmZmljaWVudCBjaGFyYWN0ZXJzIHRvIHJlcHJlc2VudCBhbGwKKwkJCXBvc3NpYmxlIFVuaWNvZGUgY2hhcmFjdGVycyB0aGF0IGNhbiBleGlzdCBvbiBOVEZTLgorCQkJVG8gYmUgc3VyZSB5b3UgYXJlIG5vdCBtaXNzaW5nIGFueSBmaWxlcywgeW91IGFyZQorCQkJYWR2aXNlZCB0byB1c2UgbmxzPXV0Zjggd2hpY2ggaXMgY2FwYWJsZSBvZgorCQkJcmVwcmVzZW50aW5nIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuCisKK3V0Zjg9PGJvb2w+CQlPcHRpb24gbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEN1cnJlbnRseSBtYXBwZWQgdG8KKwkJCW5scz11dGY4IGJ1dCBwbGVhc2UgdXNlIG5scz11dGY4IGluIHRoZSBmdXR1cmUgYW5kCisJCQltYWtlIHN1cmUgdXRmOCBpcyBjb21waWxlZCBlaXRoZXIgYXMgbW9kdWxlIG9yIGludG8KKwkJCXRoZSBrZXJuZWwuICBTZWUgZGVzY3JpcHRpb24gZm9yIG5scz1uYW1lLgorCit1aWQ9CitnaWQ9Cit1bWFzaz0JCQlQcm92aWRlIGRlZmF1bHQgb3duZXIsIGdyb3VwLCBhbmQgYWNjZXNzIG1vZGUgbWFzay4KKwkJCVRoZXNlIG9wdGlvbnMgd29yayBhcyBkb2N1bWVudGVkIGluIG1vdW50KDgpLiAgQnkKKwkJCWRlZmF1bHQsIHRoZSBmaWxlcy9kaXJlY3RvcmllcyBhcmUgb3duZWQgYnkgcm9vdCBhbmQKKwkJCWhlL3NoZSBoYXMgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMsIGFzIHdlbGwgYXMKKwkJCWJyb3dzZSBwZXJtaXNzaW9uIGZvciBkaXJlY3Rvcmllcy4gIE5vIG9uZSBlbHNlIGhhcyBhbnkKKwkJCWFjY2VzcyBwZXJtaXNzaW9ucy4gIEkuZS4gdGhlIG1vZGUgb24gYWxsIGZpbGVzIGlzIGJ5CisJCQlkZWZhdWx0IHJ3LS0tLS0tLSBhbmQgZm9yIGRpcmVjdG9yaWVzIHJ3eC0tLS0tLSwgYQorCQkJY29uc2VxdWVuY2Ugb2YgdGhlIGRlZmF1bHQgZm1hc2s9MDE3NyBhbmQgZG1hc2s9MDA3Ny4KKwkJCVVzaW5nIGEgdW1hc2sgb2YgemVybyB3aWxsIGdyYW50IGFsbCBwZXJtaXNzaW9ucyB0bworCQkJZXZlcnlvbmUsIGkuZS4gYWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aWxsIGhhdmUgbW9kZQorCQkJcnd4cnd4cnd4LgorCitmbWFzaz0KK2RtYXNrPQkJCUluc3RlYWQgb2Ygc3BlY2lmeWluZyB1bWFzayB3aGljaCBhcHBsaWVzIGJvdGggdG8KKwkJCWZpbGVzIGFuZCBkaXJlY3RvcmllcywgZm1hc2sgYXBwbGllcyBvbmx5IHRvIGZpbGVzIGFuZAorCQkJZG1hc2sgb25seSB0byBkaXJlY3Rvcmllcy4KKworc2xvcHB5PTxCT09MPgkJSWYgc2xvcHB5IGlzIHNwZWNpZmllZCwgaWdub3JlIHVua25vd24gbW91bnQgb3B0aW9ucy4KKwkJCU90aGVyd2lzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gYWJvcnQgbW91bnQgaWYKKwkJCWFueSB1bmtub3duIG9wdGlvbnMgYXJlIGZvdW5kLgorCitzaG93X3N5c19maWxlcz08Qk9PTD4JSWYgc2hvd19zeXNfZmlsZXMgaXMgc3BlY2lmaWVkLCBzaG93IHRoZSBzeXN0ZW0gZmlsZXMKKwkJCWluIGRpcmVjdG9yeSBsaXN0aW5ncy4gIE90aGVyd2lzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKKwkJCWlzIHRvIGhpZGUgdGhlIHN5c3RlbSBmaWxlcy4KKwkJCU5vdGUgdGhhdCBldmVuIHdoZW4gc2hvd19zeXNfZmlsZXMgaXMgc3BlY2lmaWVkLCAiJE1GVCIKKwkJCXdpbGwgbm90IGJlIHZpc2libGUgZHVlIHRvIGJ1Z3MvbWlzLWZlYXR1cmVzIGluIGdsaWJjLgorCQkJRnVydGhlciwgbm90ZSB0aGF0IGlycmVzcGVjdGl2ZSBvZiBzaG93X3N5c19maWxlcywgYWxsCisJCQlmaWxlcyBhcmUgYWNjZXNzaWJsZSBieSBuYW1lLCBpLmUuIHlvdSBjYW4gYWx3YXlzIGRvCisJCQkibHMgLWwgXCRVcENhc2UiIGZvciBleGFtcGxlIHRvIHNwZWNpZmljYWxseSBzaG93IHRoZQorCQkJc3lzdGVtIGZpbGUgY29udGFpbmluZyB0aGUgVW5pY29kZSB1cGNhc2UgdGFibGUuCisKK2Nhc2Vfc2Vuc2l0aXZlPTxCT09MPglJZiBjYXNlX3NlbnNpdGl2ZSBpcyBzcGVjaWZpZWQsIHRyZWF0IGFsbCBmaWxlIG5hbWVzIGFzCisJCQljYXNlIHNlbnNpdGl2ZSBhbmQgY3JlYXRlIGZpbGUgbmFtZXMgaW4gdGhlIFBPU0lYCisJCQluYW1lc3BhY2UuICBPdGhlcndpc2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHRyZWF0CisJCQlmaWxlIG5hbWVzIGFzIGNhc2UgaW5zZW5zaXRpdmUgYW5kIHRvIGNyZWF0ZSBmaWxlIG5hbWVzCisJCQlpbiB0aGUgV0lOMzIvTE9ORyBuYW1lIHNwYWNlLiAgTm90ZSwgdGhlIExpbnV4IE5URlMKKwkJCWRyaXZlciB3aWxsIG5ldmVyIGNyZWF0ZSBzaG9ydCBmaWxlIG5hbWVzIGFuZCB3aWxsCisJCQlyZW1vdmUgdGhlbSBvbiByZW5hbWUvZGVsZXRlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGxvbmcKKwkJCWZpbGUgbmFtZS4KKwkJCU5vdGUgdGhhdCBmaWxlcyByZW1haW4gYWNjZXNzaWJsZSB2aWEgdGhlaXIgc2hvcnQgZmlsZQorCQkJbmFtZSwgaWYgaXQgZXhpc3RzLiAgSWYgY2FzZV9zZW5zaXRpdmUsIHlvdSB3aWxsIG5lZWQKKwkJCXRvIHByb3ZpZGUgdGhlIGNvcnJlY3QgY2FzZSBvZiB0aGUgc2hvcnQgZmlsZSBuYW1lLgorCitlcnJvcnM9b3B0CQlXaGF0IHRvIGRvIHdoZW4gY3JpdGljYWwgZmlsZSBzeXN0ZW0gZXJyb3JzIGFyZSBmb3VuZC4KKwkJCUZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHVzZWQgZm9yICJvcHQiOgorCQkJICBjb250aW51ZTogREVGQVVMVCwgdHJ5IHRvIGNsZWFuLXVwIGFzIG11Y2ggYXMKKwkJCQkgICAgcG9zc2libGUsIGUuZy4gbWFya2luZyBhIGNvcnJ1cHQgaW5vZGUgYXMKKwkJCQkgICAgYmFkIHNvIGl0IGlzIG5vIGxvbmdlciBhY2Nlc3NlZCwgYW5kIHRoZW4KKwkJCQkgICAgY29udGludWUuCisJCQkgIHJlY292ZXI6ICBBdCBwcmVzZW50IG9ubHkgc3VwcG9ydGVkIGlzIHJlY292ZXJ5IG9mCisJCQkJICAgIHRoZSBib290IHNlY3RvciBmcm9tIHRoZSBiYWNrdXAgY29weS4KKwkJCQkgICAgSWYgcmVhZC1vbmx5IG1vdW50LCB0aGUgcmVjb3ZlcnkgaXMgZG9uZQorCQkJCSAgICBpbiBtZW1vcnkgb25seSBhbmQgbm90IHdyaXR0ZW4gdG8gZGlzay4KKwkJCU5vdGUgdGhhdCB0aGUgb3B0aW9ucyBhcmUgYWRkaXRpdmUsIGkuZS4gc3BlY2lmeWluZzoKKwkJCSAgIGVycm9ycz1jb250aW51ZSxlcnJvcnM9cmVjb3ZlcgorCQkJbWVhbnMgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gcmVjb3ZlciBhbmQgaWYgdGhhdAorCQkJZmFpbHMgaXQgd2lsbCBjbGVhbi11cCBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZAorCQkJY29udGludWUuCisKK21mdF96b25lX211bHRpcGxpZXI9CVNldCB0aGUgTUZUIHpvbmUgbXVsdGlwbGllciBmb3IgdGhlIHZvbHVtZSAodGhpcworCQkJc2V0dGluZyBpcyBub3QgcGVyc2lzdGVudCBhY3Jvc3MgbW91bnRzIGFuZCBjYW4gYmUKKwkJCWNoYW5nZWQgZnJvbSBtb3VudCB0byBtb3VudCBidXQgY2Fubm90IGJlIGNoYW5nZWQgb24KKwkJCXJlbW91bnQpLiAgVmFsdWVzIG9mIDEgdG8gNCBhcmUgYWxsb3dlZCwgMSBiZWluZyB0aGUKKwkJCWRlZmF1bHQuICBUaGUgTUZUIHpvbmUgbXVsdGlwbGllciBkZXRlcm1pbmVzIGhvdyBtdWNoCisJCQlzcGFjZSBpcyByZXNlcnZlZCBmb3IgdGhlIE1GVCBvbiB0aGUgdm9sdW1lLiAgSWYgYWxsCisJCQlvdGhlciBzcGFjZSBpcyB1c2VkIHVwLCB0aGVuIHRoZSBNRlQgem9uZSB3aWxsIGJlCisJCQlzaHJ1bmsgZHluYW1pY2FsbHksIHNvIHRoaXMgaGFzIG5vIGltcGFjdCBvbiB0aGUKKwkJCWFtb3VudCBvZiBmcmVlIHNwYWNlLiAgSG93ZXZlciwgaXQgY2FuIGhhdmUgYW4gaW1wYWN0CisJCQlvbiBwZXJmb3JtYW5jZSBieSBhZmZlY3RpbmcgZnJhZ21lbnRhdGlvbiBvZiB0aGUgTUZULgorCQkJSW4gZ2VuZXJhbCB1c2UgdGhlIGRlZmF1bHQuICBJZiB5b3UgaGF2ZSBhIGxvdCBvZiBzbWFsbAorCQkJZmlsZXMgdGhlbiB1c2UgYSBoaWdoZXIgdmFsdWUuICBUaGUgdmFsdWVzIGhhdmUgdGhlCisJCQlmb2xsb3dpbmcgbWVhbmluZzoKKwkJCSAgICAgIFZhbHVlCSAgICAgTUZUIHpvbmUgc2l6ZSAoJSBvZiB2b2x1bWUgc2l6ZSkKKwkJCQkxCQkxMi41JQorCQkJCTIJCTI1JQorCQkJCTMJCTM3LjUlCisJCQkJNAkJNTAlCisJCQlOb3RlIHRoaXMgb3B0aW9uIGlzIGlycmVsZXZhbnQgZm9yIHJlYWQtb25seSBtb3VudHMuCisKKworS25vd24gYnVncyBhbmQgKG1pcy0pZmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0gVGhlIGxpbmsgY291bnQgb24gZWFjaCBkaXJlY3RvcnkgaW5vZGUgZW50cnkgaXMgc2V0IHRvIDEsIGR1ZSB0byBMaW51eCBub3QKKyAgc3VwcG9ydGluZyBkaXJlY3RvcnkgaGFyZCBsaW5rcy4gIFRoaXMgbWF5IHdlbGwgY29uZnVzZSBzb21lIHVzZXIgc3BhY2UKKyAgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgZGlyZWN0b3J5IG5hbWVzIHdpbGwgaGF2ZSB0aGUgc2FtZSBpbm9kZSBudW1iZXJzLgorICBUaGlzIGFsc28gc3BlZWRzIHVwIG50ZnNfcmVhZF9pbm9kZSgpIGltbWVuc2VseS4gIEFuZCB3ZSBoYXZlbid0IGZvdW5kIGFueQorICBwcm9ibGVtcyB3aXRoIHRoaXMgYXBwcm9hY2ggc28gZmFyLiAgSWYgeW91IGZpbmQgYSBwcm9ibGVtIHdpdGggdGhpcywgcGxlYXNlCisgIGxldCB1cyBrbm93LgorCisKK1BsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzL2NvbW1lbnRzL2ZlZWRiYWNrL2FidXNlIHRvIHRoZSBMaW51eC1OVEZTIGRldmVsb3BtZW50CitsaXN0IGF0IHNvdXJjZWZvcmdlOiBsaW51eC1udGZzLWRldkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworCitVc2luZyBOVEZTIHZvbHVtZSBhbmQgc3RyaXBlIHNldHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGb3Igc3VwcG9ydCBvZiB2b2x1bWUgYW5kIHN0cmlwZSBzZXRzLCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlIGtlcm5lbCdzCitEZXZpY2UtTWFwcGVyIGRyaXZlciBvciB0aGUga2VybmVsJ3MgU29mdHdhcmUgUkFJRCAvIE1EIGRyaXZlci4gIFRoZSBmb3JtZXIgaXMKK3RoZSByZWNvbW1lbmRlZCBvbmUgdG8gdXNlIGZvciBsaW5lYXIgcmFpZC4gIEJ1dCB0aGUgbGF0dGVyIGlzIHJlcXVpcmVkIGZvcgorcmFpZCBsZXZlbCA1LiAgRm9yIHN0cmlwaW5nIGFuZCBtaXJyb3JpbmcsIGVpdGhlciBkcml2ZXIgc2hvdWxkIHdvcmsgZmluZS4KKworCitUaGUgRGV2aWNlLU1hcHBlciBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSBhIHRhYmxlIG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZSB2b2x1bWUvc3RyaXBlIHNldCBhbmQKK2hvdyB0aGV5IGZpdCB0b2dldGhlciBhbmQgbG9hZCB0aGlzIGludG8gdGhlIGtlcm5lbCB1c2luZyB0aGUgZG1zZXR1cCB1dGlsaXR5Cisoc2VlIG1hbiA4IGRtc2V0dXApLgorCitMaW5lYXIgdm9sdW1lIHNldHMsIGkuZS4gbGluZWFyIHJhaWQsIGhhcyBiZWVuIHRlc3RlZCBhbmQgd29ya3MgZmluZS4gIEV2ZW4KK3Rob3VnaCB1bnRlc3RlZCwgdGhlcmUgaXMgbm8gcmVhc29uIHdoeSBzdHJpcGUgc2V0cywgaS5lLiByYWlkIGxldmVsIDAsIGFuZAorbWlycm9ycywgaS5lLiByYWlkIGxldmVsIDEgc2hvdWxkIG5vdCB3b3JrLCB0b28uICBTdHJpcGVzIHdpdGggcGFyaXR5LCBpLmUuCityYWlkIGxldmVsIDUsIHVuZm9ydHVuYXRlbHkgY2Fubm90IHdvcmsgeWV0IGJlY2F1c2UgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUKK0RldmljZS1NYXBwZXIgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgcmFpZCBsZXZlbCA1LiAgWW91IG1heSBiZSBhYmxlIHRvIHVzZSB0aGUKK1NvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIgZm9yIHJhaWQgbGV2ZWwgNSwgc2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIGRldGFpbHMuCisKK1RvIGNyZWF0ZSB0aGUgdGFibGUgZGVzY3JpYmluZyB5b3VyIHZvbHVtZSB5b3Ugd2lsbCBuZWVkIHRvIGtub3cgZWFjaCBvZiBpdHMKK2NvbXBvbmVudHMgYW5kIHRoZWlyIHNpemVzIGluIHNlY3RvcnMsIGkuZS4gbXVsdGlwbGVzIG9mIDUxMi1ieXRlIGJsb2Nrcy4KKworRm9yIE5UNCBmYXVsdCB0b2xlcmFudCB2b2x1bWVzIHlvdSBjYW4gb2J0YWluIHRoZSBzaXplcyB1c2luZyBmZGlzay4gIFNvIGZvcgorZXhhbXBsZSBpZiBvbmUgb2YgeW91ciBwYXJ0aXRpb25zIGlzIC9kZXYvaGRhMiB5b3Ugd291bGQgZG86CisKKyQgZmRpc2sgLXVsIC9kZXYvaGRhCisKK0Rpc2sgL2Rldi9oZGE6IDgxLjkgR0IsIDgxOTY0MzAyMzM2IGJ5dGVzCisyNTUgaGVhZHMsIDYzIHNlY3RvcnMvdHJhY2ssIDk5NjQgY3lsaW5kZXJzLCB0b3RhbCAxNjAwODY1Mjggc2VjdG9ycworVW5pdHMgPSBzZWN0b3JzIG9mIDEgKiA1MTIgPSA1MTIgYnl0ZXMKKworICAgRGV2aWNlIEJvb3QgICAgICBTdGFydCAgICAgICAgIEVuZCAgICAgIEJsb2NrcyAgIElkICBTeXN0ZW0KKyAgIC9kZXYvaGRhMSAgICogICAgICAgICAgNjMgICAgIDQyMDkwMjkgICAgIDIxMDQ0ODMrICA4MyAgTGludXgKKyAgIC9kZXYvaGRhMiAgICAgICAgIDQyMDkwMzAgICAgMzc3Njg4MTQgICAgMTY3Nzk4OTIrICA4NiAgTlRGUworICAgL2Rldi9oZGEzICAgICAgICAzNzc2ODgxNSAgICA0NjE3MDgwOSAgICAgNDIwMDk5NysgIDgzICBMaW51eAorCitBbmQgeW91IHdvdWxkIGtub3cgdGhhdCAvZGV2L2hkYTIgaGFzIGEgc2l6ZSBvZiAzNzc2ODgxNCAtIDQyMDkwMzAgKyAxID0KKzMzNTU5Nzg1IHNlY3RvcnMuCisKK0ZvciBXaW4yayBhbmQgbGF0ZXIgZHluYW1pYyBkaXNrcywgeW91IGNhbiBmb3IgZXhhbXBsZSB1c2UgdGhlIGxkbWluZm8gdXRpbGl0eQord2hpY2ggaXMgcGFydCBvZiB0aGUgTGludXggTERNIHRvb2xzICh0aGUgbGF0ZXN0IHZlcnNpb24gYXQgdGhlIHRpbWUgb2YKK3dyaXRpbmcgaXMgbGludXgtbGRtLTAuMC44LnRhci5iejIpLiAgWW91IGNhbiBkb3dubG9hZCBpdCBmcm9tOgorCWh0dHA6Ly9saW51eC1udGZzLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZHMuaHRtbAorU2ltcGx5IGV4dHJhY3QgdGhlIGRvd25sb2FkZWQgYXJjaGl2ZSAodGFyIHh2amYgbGludXgtbGRtLTAuMC44LnRhci5iejIpLCBnbworaW50byBpdCAoY2QgbGludXgtbGRtLTAuMC44KSBhbmQgY2hhbmdlIHRvIHRoZSB0ZXN0IGRpcmVjdG9yeSAoY2QgdGVzdCkuICBZb3UKK3dpbGwgZmluZCB0aGUgcHJlY29tcGlsZWQgKGkzODYpIGxkbWluZm8gdXRpbGl0eSB0aGVyZS4gIE5PVEU6IFlvdSB3aWxsIG5vdCBiZQorYWJsZSB0byBjb21waWxlIHRoaXMgeW91cnNlbGYgZWFzaWx5IHNvIHVzZSB0aGUgYmluYXJ5IHZlcnNpb24hCisKK1RoZW4geW91IHdvdWxkIHVzZSBsZG1pbmZvIGluIGR1bXAgbW9kZSB0byBvYnRhaW4gdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbjoKKworJCAuL2xkbWluZm8gLS1kdW1wIC9kZXYvaGRhCisKK1RoaXMgd291bGQgZHVtcCB0aGUgTERNIGRhdGFiYXNlIGZvdW5kIG9uIC9kZXYvaGRhIHdoaWNoIGRlc2NyaWJlcyBhbGwgb2YgeW91cgorZHluYW1pYyBkaXNrcyBhbmQgYWxsIHRoZSB2b2x1bWVzIG9uIHRoZW0uICBBdCB0aGUgYm90dG9tIHlvdSB3aWxsIHNlZSB0aGUKK1ZPTFVNRSBERUZJTklUSU9OUyBzZWN0aW9uIHdoaWNoIGlzIGFsbCB5b3UgcmVhbGx5IG5lZWQuICBZb3UgbWF5IG5lZWQgdG8gbG9vaworZnVydGhlciBhYm92ZSB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIGRpc2tzIGluIHRoZSB2b2x1bWUgZGVmaW5pdGlvbnMgaXMKK3doaWNoIGRldmljZSBpbiBMaW51eC4gIEhpbnQ6IFJ1biBsZG1pbmZvIG9uIGVhY2ggb2YgeW91ciBkeW5hbWljIGRpc2tzIGFuZAorbG9vayBhdCB0aGUgRGlzayBJZCBjbG9zZSB0byB0aGUgdG9wIG9mIHRoZSBvdXRwdXQgZm9yIGVhY2ggKHRoZSBQUklWQVRFIEhFQURFUgorc2VjdGlvbikuICBZb3UgY2FuIHRoZW4gZmluZCB0aGVzZSBEaXNrIElkcyBpbiB0aGUgVkJMSyBEQVRBQkFTRSBzZWN0aW9uIGluIHRoZQorPERpc2s+IGNvbXBvbmVudHMgd2hlcmUgeW91IHdpbGwgZ2V0IHRoZSBMRE0gTmFtZSBmb3IgdGhlIGRpc2sgdGhhdCBpcyBmb3VuZCBpbgordGhlIFZPTFVNRSBERUZJTklUSU9OUyBzZWN0aW9uLgorCitOb3RlIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgdGhlIExETSBkcml2ZXIgaW4gdGhlIExpbnV4IGtlcm5lbC4gIElmIHlvdXIKK2Rpc3RyaWJ1dGlvbiBkaWQgbm90IGVuYWJsZSBpdCwgeW91IHdpbGwgbmVlZCB0byByZWNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGl0CitlbmFibGVkLiAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgTERNIHBhcnRpdGlvbnMgb24gZWFjaCBkZXZpY2UgYXQgYm9vdCB0aW1lLiAgWW91Cit3b3VsZCB0aGVuIHVzZSB0aG9zZSBkZXZpY2VzIChmb3IgL2Rldi9oZGEgdGhleSB3b3VsZCBiZSAvZGV2L2hkYTEsIDIsIDMsIGV0YykKK2luIHRoZSBEZXZpY2UtTWFwcGVyIHRhYmxlLgorCitZb3UgY2FuIGFsc28gYnlwYXNzIHVzaW5nIHRoZSBMRE0gZHJpdmVyIGJ5IHVzaW5nIHRoZSBtYWluIGRldmljZSAoZS5nLgorL2Rldi9oZGEpIGFuZCB0aGVuIHVzaW5nIHRoZSBvZmZzZXRzIG9mIHRoZSBMRE0gcGFydGl0aW9ucyBpbnRvIHRoaXMgZGV2aWNlIGFzCit0aGUgIlN0YXJ0IHNlY3RvciBvZiBkZXZpY2UiIHdoZW4gY3JlYXRpbmcgdGhlIHRhYmxlLiAgT25jZSBhZ2FpbiBsZG1pbmZvIHdvdWxkCitnaXZlIHlvdSB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiB0byBkbyB0aGlzLgorCitBc3N1bWluZyB5b3Uga25vdyBhbGwgeW91ciBkZXZpY2VzIGFuZCB0aGVpciBzaXplcyB0aGluZ3MgYXJlIGVhc3kuCisKK0ZvciBhIGxpbmVhciByYWlkIHRoZSB0YWJsZSB3b3VsZCBsb29rIGxpa2UgdGhpcyAobm90ZSBhbGwgdmFsdWVzIGFyZSBpbgorNTEyLWJ5dGUgc2VjdG9ycyk6CisKKy0tLSBjdXQgaGVyZSAtLS0KKyMgT2Zmc2V0IGludG8JU2l6ZSBvZiB0aGlzCVJhaWQgdHlwZQlEZXZpY2UJCVN0YXJ0IHNlY3RvcgorIyB2b2x1bWUJZGV2aWNlCQkJCQkJb2YgZGV2aWNlCiswCQkxMDI4MTYxCQlsaW5lYXIJCS9kZXYvaGRhMQkwCisxMDI4MTYxCQkzOTAzNzYyCQlsaW5lYXIJCS9kZXYvaGRiMgkwCis0OTMxOTIzCQkyMTAzMjExCQlsaW5lYXIJCS9kZXYvaGRjMQkwCistLS0gY3V0IGhlcmUgLS0tCisKK0ZvciBhIHN0cmlwZWQgdm9sdW1lLCBpLmUuIHJhaWQgbGV2ZWwgMCwgeW91IHdpbGwgbmVlZCB0byBrbm93IHRoZSBjaHVuayBzaXplCit5b3UgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSB2b2x1bWUuICBXaW5kb3dzIHVzZXMgNjRraUIgYXMgdGhlIGRlZmF1bHQsIHNvIGl0Cit3aWxsIHByb2JhYmx5IGJlIHRoaXMgdW5sZXNzIHlvdSBjaGFuZ2VzIHRoZSBkZWZhdWx0cyB3aGVuIGNyZWF0aW5nIHRoZSBhcnJheS4KKworRm9yIGEgcmFpZCBsZXZlbCAwIHRoZSB0YWJsZSB3b3VsZCBsb29rIGxpa2UgdGhpcyAobm90ZSBhbGwgdmFsdWVzIGFyZSBpbgorNTEyLWJ5dGUgc2VjdG9ycyk6CisKKy0tLSBjdXQgaGVyZSAtLS0KKyMgT2Zmc2V0ICAgU2l6ZQkgICAgUmFpZCAgICAgTnVtYmVyICAgQ2h1bmsgIDFzdCAgICAgICAgU3RhcnQJMm5kCSAgU3RhcnQKKyMgaW50byAgICAgb2YgdGhlICAgdHlwZSAgICAgb2YJICAgICAgc2l6ZSAgIERldmljZQlpbglEZXZpY2UJICBpbgorIyB2b2x1bWUgICB2b2x1bWUJICAgICBzdHJpcGVzCQkJZGV2aWNlCQkgIGRldmljZQorMAkgICAyMDU2MzIwICBzdHJpcGVkICAyCSAgICAgIDEyOCAgICAvZGV2L2hkYTEJMAkvZGV2L2hkYjEgMAorLS0tIGN1dCBoZXJlIC0tLQorCitJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHR3byBkZXZpY2VzLCBqdXN0IGFkZCBlYWNoIG9mIHRoZW0gdG8gdGhlIGVuZCBvZiB0aGUKK2xpbmUuCisKK0ZpbmFsbHksIGZvciBhIG1pcnJvcmVkIHZvbHVtZSwgaS5lLiByYWlkIGxldmVsIDEsIHRoZSB0YWJsZSB3b3VsZCBsb29rIGxpa2UKK3RoaXMgKG5vdGUgYWxsIHZhbHVlcyBhcmUgaW4gNTEyLWJ5dGUgc2VjdG9ycyk6CisKKy0tLSBjdXQgaGVyZSAtLS0KKyMgT2ZzIFNpemUgICBSYWlkICAgTG9nICBOdW1iZXIgUmVnaW9uIFNob3VsZCBOdW1iZXIgU291cmNlICBTdGFydCBUYWdldCAgU3RhcnQKKyMgaW4gIG9mIHRoZSB0eXBlICAgdHlwZSBvZiBsb2cgc2l6ZSAgIHN5bmM/ICBvZiAgICAgRGV2aWNlICBpbiAgICBEZXZpY2UgaW4KKyMgdm9sIHZvbHVtZQkJIHBhcmFtcwkJICAgICBtaXJyb3JzCSAgICAgRGV2aWNlCSAgRGV2aWNlCiswICAgIDIwNTYzMjAgbWlycm9yIGNvcmUgMgkxNiAgICAgbm9zeW5jIDIJICAgL2Rldi9oZGExIDAgICAvZGV2L2hkYjEgMAorLS0tIGN1dCBoZXJlIC0tLQorCitJZiB5b3UgYXJlIG1pcnJvcmluZyB0byBtdWx0aXBsZSBkZXZpY2VzIHlvdSBjYW4gc3BlY2lmeSBmdXJ0aGVyIHRhcmdldHMgYXQgdGhlCitlbmQgb2YgdGhlIGxpbmUuCisKK05vdGUgdGhlICJTaG91bGQgc3luYz8iIHBhcmFtZXRlciAibm9zeW5jIiBtZWFucyB0aGF0IHRoZSB0d28gbWlycm9ycyBhcmUKK2FscmVhZHkgaW4gc3luYyB3aGljaCB3aWxsIGJlIHRoZSBjYXNlIG9uIGEgY2xlYW4gc2h1dGRvd24gb2YgV2luZG93cy4gIElmIHRoZQorbWlycm9ycyBhcmUgbm90IGNsZWFuLCB5b3UgY2FuIHNwZWNpZnkgdGhlICJzeW5jIiBvcHRpb24gaW5zdGVhZCBvZiAibm9zeW5jIgorYW5kIHRoZSBEZXZpY2UtTWFwcGVyIGRyaXZlciB3aWxsIHRoZW4gY29weSB0aGUgZW50aXJleSBvZiB0aGUgIlNvdXJjZSBEZXZpY2UiCit0byB0aGUgIlRhcmdldCBEZXZpY2UiIG9yIGlmIHlvdSBzcGVjaWZpZWQgbXVsdGlwbGVkIHRhcmdldCBkZXZpY2VzIHRvIGFsbCBvZgordGhlbS4KKworT25jZSB5b3UgaGF2ZSB5b3VyIHRhYmxlLCBzYXZlIGl0IGluIGEgZmlsZSBzb21ld2hlcmUgKGUuZy4gL2V0Yy9udGZzdm9sdW1lMSksCithbmQgaGFuZCBpdCBvdmVyIHRvIGRtc2V0dXAgdG8gd29yayB3aXRoLCBsaWtlIHNvOgorCiskIGRtc2V0dXAgY3JlYXRlIG15dm9sdW1lMSAvZXRjL250ZnN2b2x1bWUxCisKK1lvdSBjYW4gb2J2aW91c2x5IHJlcGxhY2UgIm15dm9sdW1lMSIgd2l0aCB3aGF0ZXZlciBuYW1lIHlvdSBsaWtlLgorCitJZiBpdCBhbGwgd29ya2VkLCB5b3Ugd2lsbCBub3cgaGF2ZSB0aGUgZGV2aWNlIC9kZXYvZGV2aWNlLW1hcHBlci9teXZvbHVtZTEKK3doaWNoIHlvdSBjYW4gdGhlbiBqdXN0IHVzZSBhcyBhbiBhcmd1bWVudCB0byB0aGUgbW91bnQgY29tbWFuZCBhcyB1c3VhbCB0bworbW91bnQgdGhlIG50ZnMgdm9sdW1lLiAgRm9yIGV4YW1wbGU6CisKKyQgbW91bnQgLXQgbnRmcyAtbyBybyAvZGV2L2RldmljZS1tYXBwZXIvbXl2b2x1bWUxIC9tbnQvbXl2b2wxCisKKyhZb3UgbmVlZCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSAvbW50L215dm9sMSBmaXJzdCBhbmQgb2YgY291cnNlIHlvdSBjYW4gdXNlCithbnl0aGluZyB5b3UgbGlrZSBpbnN0ZWFkIG9mIC9tbnQvbXl2b2wxIGFzIGxvbmcgYXMgaXQgaXMgYW4gZXhpc3RpbmcKK2RpcmVjdG9yeS4pCisKK0l0IGlzIGFkdmlzYWJsZSB0byBkbyB0aGUgbW91bnQgcmVhZC1vbmx5IHRvIHNlZSBpZiB0aGUgdm9sdW1lIGhhcyBiZWVuIHNldHVwCitjb3JyZWN0bHkgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGNhdXNpbmcgZGFtYWdlIHRvIHRoZSBkYXRhIG9uIHRoZSBudGZzCit2b2x1bWUuCisKKworVGhlIFNvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFsdGVybmF0aXZlIHRvIHVzaW5nIHRoZSBEZXZpY2UtTWFwcGVyIGRyaXZlciBpcyB0byB1c2UgdGhlIGtlcm5lbCdzCitTb2Z0d2FyZSBSQUlEIC8gTUQgZHJpdmVyLiAgRm9yIHdoaWNoIHlvdSBuZWVkIHRvIHNldCB1cCB5b3VyIC9ldGMvcmFpZHRhYgorYXBwcm9wcmlhdGVseSAoc2VlIG1hbiA1IHJhaWR0YWIpLgorCitMaW5lYXIgdm9sdW1lIHNldHMsIGkuZS4gbGluZWFyIHJhaWQsIGFzIHdlbGwgYXMgc3RyaXBlIHNldHMsIGkuZS4gcmFpZCBsZXZlbAorMCwgaGF2ZSBiZWVuIHRlc3RlZCBhbmQgd29yayBmaW5lICh0aG91Z2ggc2VlIHNlY3Rpb24gIkxpbWl0aWF0aW9ucyB3aGVuIHVzaW5nCit0aGUgTUQgZHJpdmVyIHdpdGggTlRGUyB2b2x1bWVzIiBlc3BlY2lhbGx5IGlmIHlvdSB3YW50IHRvIHVzZSBsaW5lYXIgcmFpZCkuCitFdmVuIHRob3VnaCB1bnRlc3RlZCwgdGhlcmUgaXMgbm8gcmVhc29uIHdoeSBtaXJyb3JzLCBpLmUuIHJhaWQgbGV2ZWwgMSwgYW5kCitzdHJpcGVzIHdpdGggcGFyaXR5LCBpLmUuIHJhaWQgbGV2ZWwgNSwgc2hvdWxkIG5vdCB3b3JrLCB0b28uCisKK1lvdSBoYXZlIHRvIHVzZSB0aGUgInBlcnNpc3RlbnQtc3VwZXJibG9jayAwIiBvcHRpb24gZm9yIGVhY2ggcmFpZC1kaXNrIGluIHRoZQorTlRGUyB2b2x1bWUvc3RyaXBlIHlvdSBhcmUgY29uZmlndXJpbmcgaW4gL2V0Yy9yYWlkdGFiIGFzIHRoZSBwZXJzaXN0ZW50CitzdXBlcmJsb2NrIHVzZWQgYnkgdGhlIE1EIGRyaXZlciB3b3VsZCBkYW1hbmdlIHRoZSBOVEZTIHZvbHVtZS4KKworV2luZG93cyBieSBkZWZhdWx0IHVzZXMgYSBzdHJpcGUgY2h1bmsgc2l6ZSBvZiA2NGssIHNvIHlvdSBwcm9iYWJseSB3YW50IHRoZQorImNodW5rLXNpemUgNjRrIiBvcHRpb24gZm9yIGVhY2ggcmFpZC1kaXNrLCB0b28uCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIHN0cmlwZSBzZXQgY29uc2lzdGluZyBvZiB0d28gcGFydGl0aW9ucyAvZGV2L2hkYTUKK2FuZCAvZGV2L2hkYjEgeW91ciAvZXRjL3JhaWR0YWIgd291bGQgbG9vayBsaWtlIHRoaXM6CisKK3JhaWRkZXYgL2Rldi9tZDAKKwlyYWlkLWxldmVsCTAKKwluci1yYWlkLWRpc2tzCTIKKwluci1zcGFyZS1kaXNrcwkwCisJcGVyc2lzdGVudC1zdXBlcmJsb2NrCTAKKwljaHVuay1zaXplCTY0aworCWRldmljZQkJL2Rldi9oZGE1CisJcmFpZC1kaXNrCTAKKwlkZXZpY2UJCS9kZXYvaGRiMQorCXJhaWQtZGlzbAkxCisKK0ZvciBsaW5lYXIgcmFpZCwganVzdCBjaGFuZ2UgdGhlIHJhaWQtbGV2ZWwgYWJvdmUgdG8gInJhaWQtbGV2ZWwgbGluZWFyIiwgZm9yCittaXJyb3JzLCBjaGFuZ2UgaXQgdG8gInJhaWQtbGV2ZWwgMSIsIGFuZCBmb3Igc3RyaXBlIHNldHMgd2l0aCBwYXJpdHksIGNoYW5nZQoraXQgdG8gInJhaWQtbGV2ZWwgNSIuCisKK05vdGUgZm9yIHN0cmlwZSBzZXRzIHdpdGggcGFyaXR5IHlvdSB3aWxsIGFsc28gbmVlZCB0byB0ZWxsIHRoZSBNRCBkcml2ZXIKK3doaWNoIHBhcml0eSBhbGdvcml0aG0gdG8gdXNlIGJ5IHNwZWNpZnlpbmcgdGhlIG9wdGlvbiAicGFyaXR5LWFsZ29yaXRobQord2hpY2giLCB3aGVyZSB5b3UgbmVlZCB0byByZXBsYWNlICJ3aGljaCIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtIHRvCit1c2UgKHNlZSBtYW4gNSByYWlkdGFiIGZvciBhdmFpbGFibGUgYWxnb3JpdGhtcykgYW5kIHlvdSB3aWxsIGhhdmUgdG8gdHJ5IHRoZQorZGlmZmVyZW50IGF2YWlsYWJsZSBhbGdvcml0aG1zIHVudGlsIHlvdSBmaW5kIG9uZSB0aGF0IHdvcmtzLiAgTWFrZSBzdXJlIHlvdQorYXJlIHdvcmtpbmcgcmVhZC1vbmx5IHdoZW4gcGxheWluZyB3aXRoIHRoaXMgYXMgeW91IG1heSBkYW1hZ2UgeW91ciBkYXRhCitvdGhlcndpc2UuICBJZiB5b3UgZmluZCB3aGljaCBhbGdvcml0aG0gd29ya3MgcGxlYXNlIGxldCB1cyBrbm93IChlbWFpbCB0aGUKK2xpbnV4LW50ZnMgZGV2ZWxvcGVycyBsaXN0IGxpbnV4LW50ZnMtZGV2QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCBvciBkcm9wIGluIG9uCitJUkMgaW4gY2hhbm5lbCAjbnRmcyBvbiB0aGUgaXJjLmZyZWVub2RlLm5ldCBuZXR3b3JrKSBzbyB3ZSBjYW4gdXBkYXRlIHRoaXMKK2RvY3VtZW50YXRpb24uCisKK09uY2UgdGhlIHJhaWR0YWIgaXMgc2V0dXAsIHJ1biBmb3IgZXhhbXBsZSByYWlkMHJ1biAtYSB0byBzdGFydCBhbGwgZGV2aWNlcyBvcgorcmFpZDBydW4gL2Rldi9tZDAgdG8gc3RhcnQgYSBwYXJ0aWN1bGFyIG1kIGRldmljZSwgaW4gdGhpcyBjYXNlIC9kZXYvbWQwLgorCitUaGVuIGp1c3QgdXNlIHRoZSBtb3VudCBjb21tYW5kIGFzIHVzdWFsIHRvIG1vdW50IHRoZSBudGZzIHZvbHVtZSB1c2luZyBmb3IKK2V4YW1wbGU6CW1vdW50IC10IG50ZnMgLW8gcm8gL2Rldi9tZDAgL21udC9teW50ZnN2b2x1bWUKKworSXQgaXMgYWR2aXNhYmxlIHRvIGRvIHRoZSBtb3VudCByZWFkLW9ubHkgdG8gc2VlIGlmIHRoZSBtZCB2b2x1bWUgaGFzIGJlZW4KK3NldHVwIGNvcnJlY3RseSB0byBhdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgY2F1c2luZyBkYW1hZ2UgdG8gdGhlIGRhdGEgb24gdGhlCitudGZzIHZvbHVtZS4KKworCitMaW1pdGlhdGlvbnMgd2hlbiB1c2luZyB0aGUgU29mdHdhcmUgUkFJRCAvIE1EIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXNpbmcgdGhlIG1kIGRyaXZlciB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IGlmIGFueSBvZiB5b3VyIE5URlMgcGFydGl0aW9ucyBoYXZlCithbiBvZGQgbnVtYmVyIG9mIHNlY3RvcnMuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBsaW5lYXIgcmFpZCBhcyBhbGwKK2RhdGEgYWZ0ZXIgdGhlIGZpcnN0IHBhcnRpdGlvbiB3aXRoIGFuIG9kZCBudW1iZXIgb2Ygc2VjdG9ycyB3aWxsIGJlIG9mZnNldCBieQorb25lIG9yIG1vcmUgc2VjdG9ycyBzbyBpZiB5b3UgbW91bnQgc3VjaCBhIHBhcnRpdGlvbiB3aXRoIHdyaXRlIHN1cHBvcnQgeW91Cit3aWxsIGNhdXNlIG1hc3NpdmUgZGFtYWdlIHRvIHRoZSBkYXRhIG9uIHRoZSB2b2x1bWUgd2hpY2ggd2lsbCBvbmx5IGJlY29tZQorYXBwYXJlbnQgd2hlbiB5b3UgdHJ5IHRvIHVzZSB0aGUgdm9sdW1lIGFnYWluIHVuZGVyIFdpbmRvd3MuCisKK1NvIHdoZW4gdXNpbmcgbGluZWFyIHJhaWQsIG1ha2Ugc3VyZSB0aGF0IGFsbCB5b3VyIHBhcnRpdGlvbnMgaGF2ZSBhbiBldmVuCitudW1iZXIgb2Ygc2VjdG9ycyBCRUZPUkUgYXR0ZW1wdGluZyB0byB1c2UgaXQuICBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEKKworRXZlbiBiZXR0ZXIgaXMgdG8gc2ltcGx5IHVzZSB0aGUgRGV2aWNlLU1hcHBlciBmb3IgbGluZWFyIHJhaWQgYW5kIHRoZW4geW91IGRvCitub3QgaGF2ZSB0aGlzIHByb2JsZW0gd2l0aCBvZGQgbnVtYmVycyBvZiBzZWN0b3JzLgorCisKK0NoYW5nZUxvZworPT09PT09PT09CisKK05vdGUsIGEgdGVjaG5pY2FsIENoYW5nZUxvZyBhaW1lZCBhdCBrZXJuZWwgaGFja2VycyBpcyBpbiBmcy9udGZzL0NoYW5nZUxvZy4KKworMi4xLjIyOgorCS0gSW1wcm92ZSBoYW5kbGluZyBvZiBudGZzIHZvbHVtZXMgd2l0aCBlcnJvcnMuCisJLSBGaXggdmFyaW91cyBidWdzIGFuZCByYWNlIGNvbmRpdGlvbnMuCisyLjEuMjE6CisJLSBGaXggc2V2ZXJhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHZhcmlvdXMgb3RoZXIgYnVncy4KKwktIE1hbnkgaW50ZXJuYWwgY2xlYW51cHMsIGNvZGUgcmVvcmdhbml6YXRpb24sIG9wdGltaXphdGlvbnMsIGFuZCBtZnQKKwkgIGFuZCBpbmRleCByZWNvcmQgd3JpdGluZyBjb2RlIHJld3JpdHRlbiB0byBmaXQgaW4gd2l0aCB0aGUgY2hhbmdlcy4KKwktIFVwZGF0ZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0IHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworCSAgdXNlIHRoZSBEZXZpY2UtTWFwcGVyIGRyaXZlciB3aXRoIE5URlMgZnRkaXNrL0xETSByYWlkLgorMi4xLjIwOgorCS0gRml4IHR3byBzdHVwaWQgYnVncyBpbnRyb2R1Y2VkIGluIDIuMS4xOCByZWxlYXNlLgorMi4xLjE5OgorCS0gTWlub3IgYnVnZml4IGluIGhhbmRsaW5nIG9mIHRoZSBkZWZhdWx0IHVwY2FzZSB0YWJsZS4KKwktIE1hbnkgaW50ZXJuYWwgY2xlYW51cHMgYW5kIGltcHJvdmVtZW50cy4gIE1hbnkgdGhhbmtzIHRvIExpbnVzCisJICBUb3J2YWxkcyBhbmQgQWwgVmlybyBmb3IgdGhlIGhlbHAgYW5kIGFkdmljZSB3aXRoIHRoZSBzcGFyc2UKKwkgIGFubm90YXRpb25zIGFuZCBjbGVhbnVwcy4KKzIuMS4xODoKKwktIEZpeCBzY2hlZHVsaW5nIGxhdGVuY2llcyBhdCBtb3VudCB0aW1lLiAgKEluZ28gTW9sbmFyKQorCS0gRml4IGVuZGlhbm5lc3MgYnVnIGluIGEgbGl0dGxlIHRyYXZlcnNlZCBwb3J0aW9uIG9mIHRoZSBhdHRyaWJ1dGUKKwkgIGxvb2t1cCBjb2RlLgorMi4xLjE3OgorCS0gRml4IGJ1Z3MgaW4gbW91bnQgdGltZSBlcnJvciBjb2RlIHBhdGhzLgorMi4xLjE2OgorCS0gSW1wbGVtZW50IGFjY2VzcyB0aW1lIHVwZGF0ZXMgKGluY2x1ZGluZyBtdGltZSBhbmQgY3RpbWUpLgorCS0gSW1wbGVtZW50IGZzeW5jKDIpLCBmZGF0YXN5bmMoMiksIGFuZCBtc3luYygyKSBzeXN0ZW0gY2FsbHMuCisJLSBFbmFibGUgdGhlIHJlYWR2KDIpIGFuZCB3cml0ZXYoMikgc3lzdGVtIGNhbGxzLgorCS0gRW5hYmxlIGFjY2VzcyB2aWEgdGhlIGFzeW5jaHJvbm91cyBpbyAoYWlvKSBBUEkgYnkgYWRkaW5nIHN1cHBvcnQgZm9yCisJICB0aGUgYWlvX3JlYWQoMykgYW5kIGFpb193cml0ZSgzKSBmdW5jdGlvbnMuCisyLjEuMTU6CisJLSBJbnZhbGlkYXRlIHF1b3RhcyB3aGVuIChyZSltb3VudGluZyByZWFkLXdyaXRlLgorCSAgTk9URTogIFRoaXMgbm93IG9ubHkgbGVhdmUgdXNlciBzcGFjZSBqb3VybmFsbGluZyBvbiB0aGUgc2lkZS4gIChTZWUKKwkgIG5vdGUgZm9yIHZlcnNpb24gMi4xLjEzLCBiZWxvdy4pCisyLjEuMTQ6CisJLSBGaXggYW4gTkZTZCBjYXVzZWQgZGVhZGxvY2sgcmVwb3J0ZWQgYnkgc2V2ZXJhbCB1c2Vycy4KKzIuMS4xMzoKKwktIEltcGxlbWVudCB3cml0aW5nIG9mIGlub2RlcyAoYWNjZXNzIHRpbWUgdXBkYXRlcyBhcmUgbm90IGltcGxlbWVudGVkCisJICB5ZXQgc28gbW91bnRpbmcgd2l0aCAtbyBub2F0aW1lLG5vZGlyYXRpbWUgaXMgZW5mb3JjZWQpLgorCS0gRW5hYmxlIHdyaXRpbmcgb3V0IG9mIHJlc2lkZW50IGZpbGVzIHNvIHlvdSBjYW4gbm93IG92ZXJ3cml0ZSBhbnkKKwkgIHVuY29tcHJlc3NlZCwgdW5lbmNyeXB0ZWQsIG5vbnNwYXJzZSBmaWxlIGFzIGxvbmcgYXMgeW91IGRvIG5vdAorCSAgY2hhbmdlIHRoZSBmaWxlIHNpemUuCisJLSBBZGQgaG91c2VrZWVwaW5nIG9mIG50ZnMgc3lzdGVtIGZpbGVzIHNvIHRoYXQgbnRmc2ZpeCBubyBsb25nZXIgbmVlZHMKKwkgIHRvIGJlIHJ1biBhZnRlciB3cml0aW5nIHRvIGFuIE5URlMgdm9sdW1lLgorCSAgTk9URTogIFRoaXMgc3RpbGwgbGVhdmVzIHF1b3RhIHRyYWNraW5nIGFuZCB1c2VyIHNwYWNlIGpvdXJuYWxsaW5nIG9uCisJICB0aGUgc2lkZSBidXQgdGhleSBzaG91bGQgbm90IGNhdXNlIGRhdGEgY29ycnVwdGlvbi4gIEluIHRoZSB3b3JzdAorCSAgY2FzZSB0aGUgY2hhcmdlZCBxdW90YXMgd2lsbCBiZSBvdXQgb2YgZGF0ZSAoJFF1b3RhKSBhbmQgc29tZQorCSAgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtaWdodCBnZXQgY29uZnVzZWQgZHVlIHRvIHRoZSBvdXQgb2YgZGF0ZQorCSAgdXNlcnNwYWNlIGpvdXJuYWwgKCRVc25Kcm5sKS4KKzIuMS4xMjoKKwktIEZpeCB0aGUgc2Vjb25kIGZpeCB0byB0aGUgZGVjb21wcmVzc2lvbiBlbmdpbmUgZnJvbSB0aGUgMi4xLjkgcmVsZWFzZQorCSAgYW5kIHNvbWUgZnVydGhlciBpbnRlcm5hbHMgY2xlYW51cHMuCisyLjEuMTE6CisJLSBEcml2ZXIgaW50ZXJuYWwgY2xlYW51cHMuCisyLjEuMTA6CisJLSBGb3JjZSByZWFkLW9ubHkgKHJlKW1vdW50aW5nIG9mIHZvbHVtZXMgd2l0aCB1bnN1cHBvcnRlZCB2b2x1bWUKKwkgIGZsYWdzIGFuZCB2YXJpb3VzIGNsZWFudXBzLgorMi4xLjk6CisJLSBGaXggdHdvIGJ1Z3MgaW4gaGFuZGxpbmcgb2YgY29ybmVyIGNhc2VzIGluIHRoZSBkZWNvbXByZXNzaW9uIGVuZ2luZS4KKzIuMS44OgorCS0gUmVhZCB0aGUgJE1GVCBtaXJyb3IgYW5kIGNvbXBhcmUgaXQgdG8gdGhlICRNRlQgYW5kIGlmIHRoZSB0d28gZG8gbm90CisJICBtYXRjaCwgZm9yY2UgYSByZWFkLW9ubHkgbW91bnQgYW5kIGRvIG5vdCBhbGxvdyByZWFkLXdyaXRlIHJlbW91bnRzLgorCS0gUmVhZCBhbmQgcGFyc2UgdGhlICRMb2dGaWxlIGpvdXJuYWwgYW5kIGlmIGl0IGluZGljYXRlcyB0aGF0IHRoZQorCSAgdm9sdW1lIHdhcyBub3Qgc2h1dGRvd24gY2xlYW5seSwgZm9yY2UgYSByZWFkLW9ubHkgbW91bnQgYW5kIGRvIG5vdAorCSAgYWxsb3cgcmVhZC13cml0ZSByZW1vdW50cy4gIElmIHRoZSAkTG9nRmlsZSBpbmRpY2F0ZXMgYSBjbGVhbgorCSAgc2h1dGRvd24gYW5kIGEgcmVhZC13cml0ZSAocmUpbW91bnQgaXMgcmVxdWVzdGVkLCBlbXB0eSAkTG9nRmlsZSB0bworCSAgZW5zdXJlIHRoYXQgV2luZG93cyBjYW5ub3QgY2F1c2UgZGF0YSBjb3JydXB0aW9uIGJ5IHJlcGxheWluZyBhIHN0YWxlCisJICBqb3VybmFsIGFmdGVyIExpbnV4IGhhcyB3cml0dGVuIHRvIHRoZSB2b2x1bWUuCisJLSBJbXByb3ZlIHRpbWUgaGFuZGxpbmcgc28gdGhhdCB0aGUgTlRGUyB0aW1lIGlzIGZ1bGx5IHByZXNlcnZlZCB3aGVuCisJICBjb252ZXJ0ZWQgdG8ga2VybmVsIHRpbWUgYW5kIG9ubHkgdXAgdG8gOTkgbmFuby1zZWNvbmRzIGFyZSBsb3N0IHdoZW4KKwkgIGtlcm5lbCB0aW1lIGlzIGNvbnZlcnRlZCB0byBOVEZTIHRpbWUuCisyLjEuNzoKKwktIEVuYWJsZSBORlMgZXhwb3J0aW5nIG9mIG1vdW50ZWQgTlRGUyB2b2x1bWVzLgorMi4xLjY6CisJLSBGaXggbWlub3IgYnVnIGluIGhhbmRsaW5nIG9mIGNvbXByZXNzZWQgZGlyZWN0b3JpZXMgdGhhdCBmaXhlcyB0aGUKKwkgIGVycm9uZW91cyAiZHUiIGFuZCAic3RhdCIgb3V0cHV0IHBlb3BsZSByZXBvcnRlZC4KKzIuMS41OgorCS0gTWlub3IgYnVnIGZpeCBpbiBhdHRyaWJ1dGUgbGlzdCBhdHRyaWJ1dGUgaGFuZGxpbmcgdGhhdCBmaXhlcyB0aGUKKwkgIEkvTyBlcnJvcnMgb24gImxzIiBvZiBjZXJ0YWluIGZyYWdtZW50ZWQgZmlsZXMgZm91bmQgYnkgYXQgbGVhc3QgdHdvCisJICBwZW9wbGUgcnVubmluZyBXaW5kb3dzIFhQLgorMi4xLjQ6CisJLSBNaW5vciB1cGRhdGUgYWxsb3dpbmcgY29tcGlsYXRpb24gd2l0aCBhbGwgZ2NjIHZlcnNpb25zICh3ZWxsLCB0aGUKKwkgIG9uZXMgdGhlIGtlcm5lbCBjYW4gYmUgY29tcGlsZWQgd2l0aCBhbnl3YXkpLgorMi4xLjM6CisJLSBNYWpvciBidWcgZml4ZXMgZm9yIHJlYWRpbmcgZmlsZXMgYW5kIHZvbHVtZXMgaW4gY29ybmVyIGNhc2VzIHdoaWNoCisJICB3ZXJlIGJlaW5nIGhpdCBieSBXaW5kb3dzIDJrL1hQIHVzZXJzLgorMi4xLjI6CisJLSBNYWpvciBidWcgZml4ZXMgYWxldmlhdGluZyB0aGUgaGFuZ3MgaW4gc3RhdGZzIGV4cGVyaWVuY2VkIGJ5IHNvbWUKKwkgIHVzZXJzLgorMi4xLjE6CisJLSBVcGRhdGUgaGFuZGxpbmcgb2YgY29tcHJlc3NlZCBmaWxlcyBzbyBwZW9wbGUgbm8gbG9uZ2VyIGdldCB0aGUKKwkgIGZyZXF1ZW50bHkgcmVwb3J0ZWQgd2FybmluZyBtZXNzYWdlcyBhYm91dCBpbml0aWFsaXplZF9zaXplICE9CisJICBkYXRhX3NpemUuCisyLjEuMDoKKwktIEFkZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZGV2ZWxvcG1lbnRhbCB3cml0ZSBzdXBwb3J0LgorCS0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBmaWxlIG92ZXJ3cml0aW5nLiAoV3JpdGVzIHRvIHJlc2lkZW50IGZpbGVzCisJICBhcmUgbm90IHdyaXR0ZW4gb3V0IHRvIGRpc2sgeWV0LCBzbyBhdm9pZCB3cml0aW5nIHRvIGZpbGVzIHNtYWxsZXIKKwkgIHRoYW4gYWJvdXQgMWtpQi4pCisJLSBJbnRlcmNlcHQvYWJvcnQgY2hhbmdlcyBpbiBmaWxlIHNpemUgYXMgdGhleSBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KKzIuMC4yNToKKwktIE1pbm9yIGJ1Z2ZpeGVzIGluIGVycm9yIGNvZGUgcGF0aHMgYW5kIHNtYWxsIGNsZWFudXBzLgorMi4wLjI0OgorCS0gU21hbGwgaW50ZXJuYWwgY2xlYW51cHMuCisJLSBTdXBwb3J0IGZvciBzZW5kZmlsZSBzeXN0ZW0gY2FsbC4gKENocmlzdG9waCBIZWxsd2lnKQorMi4wLjIzOgorCS0gTWFzc2l2ZSBpbnRlcm5hbCBsb2NraW5nIGNoYW5nZXMgdG8gbWZ0IHJlY29yZCBsb2NraW5nLiBGaXhlcworCSAgdmFyaW91cyByYWNlIGNvbmRpdGlvbnMgYW5kIGRlYWRsb2Nrcy4KKwktIEZpeCBudGZzIG92ZXIgbG9vcGJhY2sgZm9yIGNvbXByZXNzZWQgZmlsZXMgYnkgYWRkaW5nIGFuCisJICBvcHRpbWl6YXRpb24gYmFycmllci4gKGdjYyB3YXMgc2NyZXdpbmcgdXAgb3RoZXJ3aXNlID8pCisJVGhhbmtzIGdvIHRvIENocmlzdG9waCBIZWxsd2lnIGZvciBwb2ludGluZyB0aGVzZSB0d28gb3V0OgorCS0gUmVtb3ZlIG5vdyB1bnVzZWQgZnVuY3Rpb24gZnMvbnRmcy9tYWxsb2MuaDo6dm1hbGxvY19ub2ZzKCkuCisJLSBGaXggbnRmc19mcmVlKCkgZm9yIGlhNjQgYW5kIHBhcmlzYy4KKzIuMC4yMjoKKwktIFNtYWxsIGludGVybmFsIGNsZWFudXBzLgorMi4wLjIxOgorCVRoZXNlIG9ubHkgYWZmZWN0IDMyLWJpdCBhcmNoaXRlY3R1cmVzOgorCS0gQ2hlY2sgZm9yLCBhbmQgcmVmdXNlIHRvIG1vdW50IHRvbyBsYXJnZSB2b2x1bWVzIChtYXhpbXVtIGlzIDJUaUIpLgorCS0gQ2hlY2sgZm9yLCBhbmQgcmVmdXNlIHRvIG9wZW4gdG9vIGxhcmdlIGZpbGVzIGFuZCBkaXJlY3RvcmllcworCSAgKG1heGltdW0gaXMgMTZUaUIpLgorMi4wLjIwOgorCS0gU3VwcG9ydCBub24tcmVzaWRlbnQgZGlyZWN0b3J5IGluZGV4IGJpdG1hcHMuIFRoaXMgbWVhbnMgd2Ugbm93IGNvcGUKKwkgIHdpdGggaHVnZSBkaXJlY3RvcmllcyB3aXRob3V0IHByb2JsZW1zLgorCS0gRml4IGEgcGFnZSBsZWFrIHRoYXQgbWFuaWZlc3RlZCBpdHNlbGYgaW4gc29tZSBjYXNlcyB3aGVuIHJlYWRpbmcKKwkgIGRpcmVjdG9yeSBjb250ZW50cy4KKwktIEludGVybmFsIGNsZWFudXBzLgorMi4wLjE5OgorCS0gRml4IHJhY2UgY29uZGl0aW9uIGFuZCBpbXByb3ZlbWVudHMgaW4gYmxvY2sgaS9vIGludGVyZmFjZS4KKwktIE9wdGltaXphdGlvbiB3aGVuIHJlYWRpbmcgY29tcHJlc3NlZCBmaWxlcy4KKzIuMC4xODoKKwktIEZpeCByYWNlIGNvbmRpdGlvbiBpbiByZWFkaW5nIG9mIGNvbXByZXNzZWQgZmlsZXMuCisyLjAuMTc6CisJLSBDbGVhbnVwcyBhbmQgb3B0aW1pemF0aW9ucy4KKzIuMC4xNjoKKwktIEZpeCBzdHVwaWQgYnVnIGludHJvZHVjZWQgaW4gMi4wLjE1IGluIG5ldyBhdHRyaWJ1dGUgaW5vZGUgQVBJLgorCS0gQmlnIGludGVybmFsIGNsZWFudXAgcmVwbGFjaW5nIHRoZSBtZnRibXAgYWNjZXNzIGhhY2tzIGJ5IHVzaW5nIHRoZQorCSAgbmV3IGF0dHJpYnV0ZSBpbm9kZSBBUEkgaW5zdGVhZC4KKzIuMC4xNToKKwktIEJ1ZyBmaXggaW4gcGFyc2luZyBvZiByZW1vdW50IG9wdGlvbnMuCisJLSBJbnRlcm5hbCBjaGFuZ2VzIGltcGxlbWVudGluZyBhdHRyaWJ1dGUgKGZha2UpIGlub2RlcyBhbGxvd2luZyBhbGwKKwkgIGF0dHJpYnV0ZSBpL28gdG8gZ28gdmlhIHRoZSBwYWdlIGNhY2hlIGFuZCB0byB1c2UgYWxsIHRoZSBub3JtYWwKKwkgIHZmcy9tbSBmdW5jdGlvbmFsaXR5LgorMi4wLjE0OgorCS0gSW50ZXJuYWwgY2hhbmdlcyBpbXByb3ZpbmcgcnVuIGxpc3QgbWVyZ2luZyBjb2RlIGFuZCBtaW5vciBsb2NraW5nCisJICBjaGFuZ2UgdG8gbm90IHJlbHkgb24gQktMIGluIG50ZnNfc3RhdGZzKCkuCisyLjAuMTM6CisJLSBJbnRlcm5hbCBjaGFuZ2VzIHRvd2FyZHMgdXNpbmcgaWdldDVfbG9ja2VkKCkgaW4gcHJlcGFyYXRpb24gZm9yCisJICBmYWtlIGlub2RlcyBhbmQgc21hbGwgY2xlYW51cHMgdG8gbnRmc192b2x1bWUgc3RydWN0dXJlLgorMi4wLjEyOgorCS0gSW50ZXJuYWwgY2xlYW51cHMgaW4gYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIG1hZGUgcG9zc2libGUgYnkgdGhlCisJICBjaGFuZ2VzIGludHJvZHVjZWQgaW4gdGhlIHByZXZpb3VzIHJlbGVhc2UuCisyLjAuMTE6CisJLSBJbnRlcm5hbCB1cGRhdGVzIGFuZCBjbGVhbnVwcyBpbnRyb2R1Y2luZyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzCisJICBmYWtlIGlub2RlIGJhc2VkIGF0dHJpYnV0ZSBpL28uCisyLjAuMTA6CisJLSBNaWNyb3NvZnQgc2F5cyB0aGF0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbm9kZXMgaXMgMl4zMiAtIDEuIFVwZGF0ZQorCSAgdGhlIGRyaXZlciBhY2NvcmRpbmdseSB0byBvbmx5IHVzZSAzMi1iaXRzIHRvIHN0b3JlIGlub2RlIG51bWJlcnMgb24KKwkgIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiBUaGlzIGltcHJvdmVzIHRoZSBzcGVlZCBvZiB0aGUgZHJpdmVyIGEgbGl0dGxlLgorMi4wLjk6CisJLSBDaGFuZ2UgZGVjb21wcmVzc2lvbiBlbmdpbmUgdG8gdXNlIGEgc2luZ2xlIGJ1ZmZlci4gVGhpcyBzaG91bGQgbm90CisJICBhZmZlY3QgcGVyZm9ybWFuY2UgZXhjZXB0IHBlcmhhcHMgb24gdGhlIG1vc3QgaGVhdnkgaS9vIG9uIFNNUAorCSAgc3lzdGVtcyB3aGVuIGFjY2Vzc2luZyBtdWx0aXBsZSBjb21wcmVzc2VkIGZpbGVzIGZyb20gbXVsdGlwbGUKKwkgIGRldmljZXMgc2ltdWx0YW5lb3VzbHkuCisJLSBNaW5vciB1cGRhdGVzIGFuZCBjbGVhbnVwcy4KKzIuMC44OgorCS0gUmVtb3ZlIG5vdyBvYnNvbGV0ZSBzaG93X2lub2RlcyBhbmQgcG9zaXggbW91bnQgb3B0aW9uKHMpLgorCS0gUmVzdG9yZSBzaG93X3N5c19maWxlcyBtb3VudCBvcHRpb24uCisJLSBBZGQgbmV3IG1vdW50IG9wdGlvbiBjYXNlX3NlbnNpdGl2ZSwgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkcml2ZXIKKwkgIHRyZWF0cyBmaWxlIG5hbWVzIGFzIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdC4KKwktIE1vc3RseSBkcm9wIHN1cHBvcnQgZm9yIHNob3J0IGZpbGUgbmFtZXMgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorCSAgd2Ugb25seSBzdXBwb3J0IGFjY2Vzc2luZyBmaWxlcyB2aWEgdGhlaXIgc2hvcnQgZmlsZSBuYW1lIGlmIG9uZQorCSAgZXhpc3RzKS4KKwktIEZpeCBkY2FjaGUgYWxpYXNpbmcgaXNzdWVzIHdydCBzaG9ydC9sb25nIGZpbGUgbmFtZXMuCisJLSBDbGVhbnVwcyBhbmQgbWlub3IgZml4ZXMuCisyLjAuNzoKKwktIEp1c3QgY2xlYW51cHMuCisyLjAuNjoKKwktIE1ham9yIGJ1Z2ZpeCB0byBtYWtlIGNvbXBhdGlibGUgd2l0aCBvdGhlciBrZXJuZWwgY2hhbmdlcy4gVGhpcyBmaXhlcworCSAgdGhlIGhhbmdzL29vcHNlcyBvbiB1bW91bnQuCisJLSBMb2NraW5nIGNsZWFudXAgaW4gZGlyZWN0b3J5IG9wZXJhdGlvbnMgKHJlbW92ZSBCS0wgdXNhZ2UpLgorMi4wLjU6CisJLSBNYWpvciBidWZmZXIgb3ZlcmZsb3cgYnVnIGZpeC4KKwktIE1pbm9yIGNsZWFudXBzIGFuZCB1cGRhdGVzIGZvciBrZXJuZWwgMi41LjEyLgorMi4wLjQ6CisJLSBDbGVhbnVwcyBhbmQgdXBkYXRlcyBmb3Iga2VybmVsIDIuNS4xMS4KKzIuMC4zOgorCS0gU21hbGwgYnVnIGZpeGVzLCBjbGVhbnVwcywgYW5kIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KKzIuMC4yOgorCS0gVXNlIGRlZmF1bHQgZm1hc2sgb2YgMDE3NyBzbyB0aGF0IGZpbGVzIGFyZSBubyBleGVjdXRhYmxlIGJ5IGRlZmF1bHQuCisJICBJZiB5b3Ugd2FudCBvd25lciBleGVjdXRhYmxlIGZpbGVzLCBqdXN0IHVzZSBmbWFzaz0wMDc3LgorCS0gVXBkYXRlIGZvciBrZXJuZWwgMi41LjkgYnV0IHByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKwkgIGtlcm5lbCAyLjUuNy4KKwktIE1pbm9yIGJ1ZyBmaXhlcywgY2xlYW51cHMsIGFuZCB1cGRhdGVzLgorMi4wLjE6CisJLSBNaW5vciB1cGRhdGVzLCBwcmltYXJpbHkgc2V0IHRoZSBleGVjdXRhYmxlIGJpdCBieSBkZWZhdWx0IG9uIGZpbGVzCisJICBzbyB0aGV5IGNhbiBiZSBleGVjdXRlZC4KKzIuMC4wOgorCS0gU3RhcnRlZCBDaGFuZ2VMb2cuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjM4ODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCkBAIC0wLDAgKzEsMjY2IEBACitDaGFuZ2VzIHNpbmNlIDIuNS4wOgorCistLS0gCitbcmVjb21tZW5kZWRdCisKK05ldyBoZWxwZXJzOiBzYl9icmVhZCgpLCBzYl9nZXRibGsoKSwgc2JfZmluZF9nZXRfYmxvY2soKSwgc2V0X2JoKCksCisJc2Jfc2V0X2Jsb2Nrc2l6ZSgpIGFuZCBzYl9taW5fYmxvY2tzaXplKCkuCisKK1VzZSB0aGVtLgorCisoc2JfZmluZF9nZXRfYmxvY2soKSByZXBsYWNlcyAyLjQncyBnZXRfaGFzaF90YWJsZSgpKQorCistLS0gCitbcmVjb21tZW5kZWRdCisKK05ldyBtZXRob2RzOiAtPmFsbG9jX2lub2RlKCkgYW5kIC0+ZGVzdHJveV9pbm9kZSgpLgorCitSZW1vdmUgaW5vZGUtPnUuZm9vX2lub2RlX2kKK0RlY2xhcmUKKwlzdHJ1Y3QgZm9vX2lub2RlX2luZm8geworCQkvKiBmcy1wcml2YXRlIHN0dWZmICovCisJCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CisJfTsKKwlzdGF0aWMgaW5saW5lIHN0cnVjdCBmb29faW5vZGVfaW5mbyAqRk9PX0koc3RydWN0IGlub2RlICppbm9kZSkKKwl7CisJCXJldHVybiBsaXN0X2VudHJ5KGlub2RlLCBzdHJ1Y3QgZm9vX2lub2RlX2luZm8sIHZmc19pbm9kZSk7CisJfQorCitVc2UgRk9PX0koaW5vZGUpIGluc3RlYWQgb2YgJmlub2RlLT51LmZvb19pbm9kZV9pOworCitBZGQgZm9vX2FsbG9jX2lub2RlKCkgYW5kIGZvb19kZXN0b3J5X2lub2RlKCkgLSB0aGUgZm9ybWVyIHNob3VsZCBhbGxvY2F0ZQorZm9vX2lub2RlX2luZm8gYW5kIHJldHVybiB0aGUgYWRkcmVzcyBvZiAtPnZmc19pbm9kZSwgdGhlIGxhdHRlciBzaG91bGQgZnJlZQorRk9PX0koaW5vZGUpIChzZWUgaW4tdHJlZSBmaWxlc3lzdGVtcyBmb3IgZXhhbXBsZXMpLgorCitNYWtlIHRoZW0gLT5hbGxvY19pbm9kZSBhbmQgLT5kZXN0cm95X2lub2RlIGluIHlvdXIgc3VwZXJfb3BlcmF0aW9ucy4KKworS2VlcCBpbiBtaW5kIHRoYXQgbm93IHlvdSBuZWVkIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZGF0YSAtCit0eXBpY2FsbHkgaW4gLT5yZWFkX2lub2RlKCkgYW5kIGFmdGVyIGdldHRpbmcgYW4gaW5vZGUgZnJvbSBuZXdfaW5vZGUoKS4KKworQXQgc29tZSBwb2ludCB0aGF0IHdpbGwgYmVjb21lIG1hbmRhdG9yeS4KKworLS0tCitbbWFuZGF0b3J5XQorCitDaGFuZ2Ugb2YgZmlsZV9zeXN0ZW1fdHlwZSBtZXRob2QgKC0+cmVhZF9zdXBlciB0byAtPmdldF9zYikKKworLT5yZWFkX3N1cGVyKCkgaXMgbm8gbW9yZS4gIERpdHRvIGZvciBERUNMQVJFX0ZTVFlQRSBhbmQgREVDTEFSRV9GU1RZUEVfREVWLgorCitUdXJuIHlvdXIgZm9vX3JlYWRfc3VwZXIoKSBpbnRvIGEgZnVuY3Rpb24gdGhhdCB3b3VsZCByZXR1cm4gMCBpbiBjYXNlIG9mCitzdWNjZXNzIGFuZCBuZWdhdGl2ZSBudW1iZXIgaW4gY2FzZSBvZiBlcnJvciAoLUVJTlZBTCB1bmxlc3MgeW91IGhhdmUgbW9yZQoraW5mb3JtYXRpdmUgZXJyb3IgdmFsdWUgdG8gcmVwb3J0KS4gIENhbGwgaXQgZm9vX2ZpbGxfc3VwZXIoKS4gIE5vdyBkZWNsYXJlCisKK3N0cnVjdCBzdXBlcl9ibG9jayBmb29fZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAorCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGdldF9zYl9iZGV2KGZzX3R5cGUsIGZsYWdzLCBkZXZfbmFtZSwgZGF0YSwgZXh0Ml9maWxsX3N1cGVyKTsKK30KKworKG9yIHNpbWlsYXIgd2l0aCBzL2JkZXYvbm9kZXYvIG9yIHMvYmRldi9zaW5nbGUvLCBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YKK2ZpbGVzeXN0ZW0pLgorCitSZXBsYWNlIERFQ0xBUkVfRlNUWVBFLi4uIHdpdGggZXhwbGljaXQgaW5pdGlhbGl6ZXIgYW5kIGhhdmUgLT5nZXRfc2Igc2V0IGFzCitmb29fZ2V0X3NiLgorCistLS0KK1ttYW5kYXRvcnldCisKK0xvY2tpbmcgY2hhbmdlOiAtPnNfdmZzX3JlbmFtZV9zZW0gaXMgdGFrZW4gb25seSBieSBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lcy4KK01vc3QgbGlrZWx5IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nLCBidXQgaWYgeW91IHJlbGllZCBvbgorZ2xvYmFsIGV4Y2x1c2lvbiBiZXR3ZWVuIHJlbmFtZXMgZm9yIHNvbWUgaW50ZXJuYWwgcHVycG9zZSAtIHlvdSBuZWVkIHRvCitjaGFuZ2UgeW91ciBpbnRlcm5hbCBsb2NraW5nLiAgT3RoZXJ3aXNlIGV4Y2x1c2lvbiB3YXJyYW50aWVzIHJlbWFpbiB0aGUKK3NhbWUgKGkuZS4gcGFyZW50cyBhbmQgdmljdGltIGFyZSBsb2NrZWQsIGV0Yy4pLgorCistLS0KK1tpbmZvcm1hdGlvbmFsXQorCitOb3cgd2UgaGF2ZSB0aGUgZXhjbHVzaW9uIGJldHdlZW4gLT5sb29rdXAoKSBhbmQgZGlyZWN0b3J5IHJlbW92YWwgKGJ5CistPnJtZGlyKCkgYW5kIC0+cmVuYW1lKCkpLiAgSWYgeW91IHVzZWQgdG8gbmVlZCB0aGF0IGV4Y2x1c2lvbiBhbmQgZG8KK2l0IGJ5IGludGVybmFsIGxvY2tpbmcgKG1vc3Qgb2YgZmlsZXN5c3RlbXMgY291bGRuJ3QgY2FyZSBsZXNzKSAtIHlvdQorY2FuIHJlbGF4IHlvdXIgbG9ja2luZy4KKworLS0tCitbbWFuZGF0b3J5XQorCistPmxvb2t1cCgpLCAtPnRydW5jYXRlKCksIC0+Y3JlYXRlKCksIC0+dW5saW5rKCksIC0+bWtub2QoKSwgLT5ta2RpcigpLAorLT5ybWRpcigpLCAtPmxpbmsoKSwgLT5sc2VlaygpLCAtPnN5bWxpbmsoKSwgLT5yZW5hbWUoKQorYW5kIC0+cmVhZGRpcigpIGFyZSBjYWxsZWQgd2l0aG91dCBCS0wgbm93LiAgR3JhYiBpdCBvbiBlbnRyeSwgZHJvcCB1cG9uIHJldHVybgorLSB0aGF0IHdpbGwgZ3VhcmFudGVlIHRoZSBzYW1lIGxvY2tpbmcgeW91IHVzZWQgdG8gaGF2ZS4gIElmIHlvdXIgbWV0aG9kIG9yIGl0cworcGFydHMgZG8gbm90IG5lZWQgQktMIC0gYmV0dGVyIHlldCwgbm93IHlvdSBjYW4gc2hpZnQgbG9ja19rZXJuZWwoKSBhbmQKK3VubG9ja19rZXJuZWwoKSBzbyB0aGF0IHRoZXkgd291bGQgcHJvdGVjdCBleGFjdGx5IHdoYXQgbmVlZHMgdG8gYmUKK3Byb3RlY3RlZC4KKworLS0tCitbbWFuZGF0b3J5XQorCitCS0wgaXMgYWxzbyBtb3ZlZCBmcm9tIGFyb3VuZCBzYiBvcGVyYXRpb25zLiAgLT53cml0ZV9zdXBlcigpIElzIG5vdyBjYWxsZWQgCit3aXRob3V0IEJLTCBoZWxkLiAgQktMIHNob3VsZCBoYXZlIGJlZW4gc2hpZnRlZCBpbnRvIGluZGl2aWR1YWwgZnMgc2Jfb3AKK2Z1bmN0aW9ucy4gIElmIHlvdSBkb24ndCBuZWVkIGl0LCByZW1vdmUgaXQuICAKKworLS0tCitbaW5mb3JtYXRpb25hbF0KKworY2hlY2sgZm9yIC0+bGluaygpIHRhcmdldCBub3QgYmVpbmcgYSBkaXJlY3RvcnkgaXMgZG9uZSBieSBjYWxsZXJzLiAgRmVlbAorZnJlZSB0byBkcm9wIGl0Li4uCisKKy0tLQorW2luZm9ybWF0aW9uYWxdCisKKy0+bGluaygpIGNhbGxlcnMgaG9sZCAtPmlfc2VtIG9uIHRoZSBvYmplY3Qgd2UgYXJlIGxpbmtpbmcgdG8uICBTb21lIG9mIHlvdXIKK3Byb2JsZW1zIG1pZ2h0IGJlIG92ZXIuLi4KKworLS0tCitbbWFuZGF0b3J5XQorCituZXcgZmlsZV9zeXN0ZW1fdHlwZSBtZXRob2QgLSBraWxsX3NiKHN1cGVyYmxvY2spLiAgSWYgeW91IGFyZSBjb252ZXJ0aW5nCithbiBleGlzdGluZyBmaWxlc3lzdGVtLCBzZXQgaXQgYWNjb3JkaW5nIHRvIC0+ZnNfZmxhZ3M6CisJRlNfUkVRVUlSRVNfREVWCQktCWtpbGxfYmxvY2tfc3VwZXIKKwlGU19MSVRURVIJCS0Ja2lsbF9saXR0ZXJfc3VwZXIKKwluZWl0aGVyCQkJLQlraWxsX2Fub25fc3VwZXIKK0ZTX0xJVFRFUiBpcyBnb25lIC0ganVzdCByZW1vdmUgaXQgZnJvbSBmc19mbGFncy4KKworLS0tCitbbWFuZGF0b3J5XQorCisJRlNfU0lOR0xFIGlzIGdvbmUgKGFjdHVhbGx5LCB0aGF0IGhhZCBoYXBwZW5lZCBiYWNrIHdoZW4gLT5nZXRfc2IoKQord2VudCBpbiAtIGFuZCBoYWRuJ3QgYmVlbiBkb2N1bWVudGVkIDstLykuICBKdXN0IHJlbW92ZSBpdCBmcm9tIGZzX2ZsYWdzCisoYW5kIHNlZSAtPmdldF9zYigpIGVudHJ5IGZvciBvdGhlciBhY3Rpb25zKS4KKworLS0tCitbbWFuZGF0b3J5XQorCistPnNldGF0dHIoKSBpcyBjYWxsZWQgd2l0aG91dCBCS0wgbm93LiAgQ2FsbGVyIF9hbHdheXNfIGhvbGRzIC0+aV9zZW0sIHNvCit3YXRjaCBmb3IgLT5pX3NlbS1ncmFiYmluZyBjb2RlIHRoYXQgbWlnaHQgYmUgdXNlZCBieSB5b3VyIC0+c2V0YXR0cigpLgorQ2FsbGVycyBvZiBub3RpZnlfY2hhbmdlKCkgbmVlZCAtPmlfc2VtIG5vdy4KKworLS0tCitbcmVjb21tZW5kZWRdCisKK05ldyBzdXBlcl9ibG9jayBmaWVsZCAic3RydWN0IGV4cG9ydF9vcGVyYXRpb25zICpzX2V4cG9ydF9vcCIgZm9yCitleHBsaWNpdCBzdXBwb3J0IGZvciBleHBvcnRpbmcsIGUuZy4gdmlhIE5GUy4gIFRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkKK2RvY3VtZW50ZWQgYXQgaXRzIGRlY2xhcmF0aW9uIGluIGluY2x1ZGUvbGludXgvZnMuaCwgYW5kIGluCitEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0V4cG9ydGluZy4KKworQnJpZWZseSBpdCBhbGxvd3MgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGRlY29kZV9maCBhbmQgZW5jb2RlX2ZoIG9wZXJhdGlvbnMKK3RvIGVuY29kZSBhbmQgZGVjb2RlIGZpbGVoYW5kbGVzLCBhbmQgYWxsb3dzIHRoZSBmaWxlc3lzdGVtIHRvIHVzZQorYSBzdGFuZGFyZCBoZWxwZXIgZnVuY3Rpb24gZm9yIGRlY29kZV9maCwgYW5kIHByb3ZpZGUgZmlsZS1zeXN0ZW0gc3BlY2lmaWMKK3N1cHBvcnQgZm9yIHRoaXMgaGVscGVyLCBwYXJ0aWN1bGFybHkgZ2V0X3BhcmVudC4KKworSXQgaXMgcGxhbm5lZCB0aGF0IHRoaXMgd2lsbCBiZSByZXF1aXJlZCBmb3IgZXhwb3J0aW5nIG9uY2UgdGhlIGNvZGUKK3NldHRsZXMgZG93biBhIGJpdC4KKworW21hbmRhdG9yeV0KKworc19leHBvcnRfb3AgaXMgbm93IHJlcXVpcmVkIGZvciBleHBvcnRpbmcgYSBmaWxlc3lzdGVtLgoraXNvZnMsIGV4dDIsIGV4dDMsIHJlc2llcmZzLCBmYXQKK2NhbiBiZSB1c2VkIGFzIGV4YW1wbGVzIG9mIHZlcnkgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorCistLS0KK1ttYW5kYXRvcnldCisKK2lnZXQ0KCkgYW5kIHRoZSByZWFkX2lub2RlMiBjYWxsYmFjayBoYXZlIGJlZW4gc3VwZXJzZWRlZCBieSBpZ2V0NV9sb2NrZWQoKQord2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlLAorCisgICAgc3RydWN0IGlub2RlICppZ2V0NV9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sCisJCQkJaW50ICgqdGVzdCkoc3RydWN0IGlub2RlICosIHZvaWQgKiksCisJCQkJaW50ICgqc2V0KShzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqKSwKKwkJCQl2b2lkICpkYXRhKTsKKworJ3Rlc3QnIGlzIGFuIGFkZGl0aW9uYWwgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aGVuIHRoZSBpbm9kZQorbnVtYmVyIGlzIG5vdCBzdWZmaWNpZW50IHRvIGlkZW50aWZ5IHRoZSBhY3R1YWwgZmlsZSBvYmplY3QuICdzZXQnCitzaG91bGQgYmUgYSBub24tYmxvY2tpbmcgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aG9zZSBwYXJ0cyBvZiBhCituZXdseSBjcmVhdGVkIGlub2RlIHRvIGFsbG93IHRoZSB0ZXN0IGZ1bmN0aW9uIHRvIHN1Y2NlZWQuICdkYXRhJyBpcworcGFzc2VkIGFzIGFuIG9wYXF1ZSB2YWx1ZSB0byBib3RoIHRlc3QgYW5kIHNldCBmdW5jdGlvbnMuCisKK1doZW4gdGhlIGlub2RlIGhhcyBiZWVuIGNyZWF0ZWQgYnkgaWdldDVfbG9ja2VkKCksIGl0IHdpbGwgYmUgcmV0dXJuZWQgd2l0aAordGhlIElfTkVXIGZsYWcgc2V0IGFuZCB3aWxsIHN0aWxsIGJlIGxvY2tlZC4gcmVhZF9pbm9kZSBoYXMgbm90IGJlZW4KK2NhbGxlZCBzbyB0aGUgZmlsZSBzeXN0ZW0gc3RpbGwgaGFzIHRvIGZpbmFsaXplIHRoZSBpbml0aWFsaXphdGlvbi4gT25jZQordGhlIGlub2RlIGlzIGluaXRpYWxpemVkIGl0IG11c3QgYmUgdW5sb2NrZWQgYnkgY2FsbGluZyB1bmxvY2tfbmV3X2lub2RlKCkuCisKK1RoZSBmaWxlc3lzdGVtIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIChhbmQgcG9zc2libHkgdGVzdGluZykgaV9pbm8KK3doZW4gYXBwcm9wcmlhdGUuIFRoZXJlIGlzIGFsc28gYSBzaW1wbGVyIGlnZXRfbG9ja2VkIGZ1bmN0aW9uIHRoYXQKK2p1c3QgdGFrZXMgdGhlIHN1cGVyYmxvY2sgYW5kIGlub2RlIG51bWJlciBhcyBhcmd1bWVudHMgYW5kIGRvZXMgdGhlCit0ZXN0IGFuZCBzZXQgZm9yIHlvdS4KKworZS5nLgorICAgICAgIGlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7CisgICAgICAgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpIHsKKyAgICAgICAgICAgICAgIHJlYWRfaW5vZGVfZnJvbV9kaXNrKGlub2RlKTsKKyAgICAgICAgICAgICAgIHVubG9ja19uZXdfaW5vZGUoaW5vZGUpOworICAgICAgIH0KKworLS0tCitbcmVjb21tZW5kZWRdCisKKy0+Z2V0YXR0cigpIGZpbmFsbHkgZ2V0dGluZyB1c2VkLiAgU2VlIGluc3RhbmNlcyBpbiBuZnMsIG1pbml4LCBldGMuCisKKy0tLQorW21hbmRhdG9yeV0KKworLT5yZXZhbGlkYXRlKCkgaXMgZ29uZS4gIElmIHlvdXIgZmlsZXN5c3RlbSBoYWQgaXQgLSBwcm92aWRlIC0+Z2V0YXR0cigpCithbmQgbGV0IGl0IGNhbGwgd2hhdGV2ZXIgeW91IGhhZCBhcyAtPnJldmxpZGF0ZSgpICsgKGZvciBzeW1saW5rcyB0aGF0CitoYWQgLT5yZXZhbGlkYXRlKCkpIGFkZCBjYWxscyBpbiAtPmZvbGxvd19saW5rKCkvLT5yZWFkbGluaygpLgorCistLS0KK1ttYW5kYXRvcnldCisKKy0+ZF9wYXJlbnQgY2hhbmdlcyBhcmUgbm90IHByb3RlY3RlZCBieSBCS0wgYW55bW9yZS4gIFJlYWQgYWNjZXNzIGlzIHNhZmUKK2lmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisJKiBmaWxlc3lzdGVtIGhhcyBubyBjcm9zcy1kaXJlY3RvcnkgcmVuYW1lKCkKKwkqIGRjYWNoZV9sb2NrIGlzIGhlbGQKKwkqIHdlIGtub3cgdGhhdCBwYXJlbnQgaGFkIGJlZW4gbG9ja2VkIChlLmcuIHdlIGFyZSBsb29raW5nIGF0CistPmRfcGFyZW50IG9mIC0+bG9va3VwKCkgYXJndW1lbnQpLgorCSogd2UgYXJlIGNhbGxlZCBmcm9tIC0+cmVuYW1lKCkuCisJKiB0aGUgY2hpbGQncyAtPmRfbG9jayBpcyBoZWxkCitBdWRpdCB5b3VyIGNvZGUgYW5kIGFkZCBsb2NraW5nIGlmIG5lZWRlZC4gIE5vdGljZSB0aGF0IGFueSBwbGFjZSB0aGF0IGlzCitub3QgcHJvdGVjdGVkIGJ5IHRoZSBjb25kaXRpb25zIGFib3ZlIGlzIHJpc2t5IGV2ZW4gaW4gdGhlIG9sZCB0cmVlIC0geW91CitoYWQgYmVlbiByZWx5aW5nIG9uIEJLTCBhbmQgdGhhdCdzIHByb25lIHRvIHNjcmV3dXBzLiAgT2xkIHRyZWUgaGFkIHF1aXRlCithIGZldyBob2xlcyBvZiB0aGF0IGtpbmQgLSB1bnByb3RlY3RlZCBhY2Nlc3MgdG8gLT5kX3BhcmVudCBsZWFkaW5nIHRvCithbnl0aGluZyBmcm9tIG9vcHMgdG8gc2lsZW50IG1lbW9yeSBjb3JydXB0aW9uLgorCistLS0KK1ttYW5kYXRvcnldCisKKwlGU19OT01PVU5UIGlzIGdvbmUuICBJZiB5b3UgdXNlIGl0IC0ganVzdCBzZXQgTVNfTk9VU0VSIGluIGZsYWdzCisoc2VlIHJvb3RmcyBmb3Igb25lIGtpbmQgb2Ygc29sdXRpb24gYW5kIGJkZXYvc29ja2V0L3BpcGUgZm9yIGFub3RoZXIpLgorCistLS0KK1tyZWNvbW1lbmRlZF0KKworCVVzZSBiZGV2X3JlYWRfb25seShiZGV2KSBpbnN0ZWFkIG9mIGlzX3JlYWRfb25seShrZGV2KS4gIFRoZSBsYXR0ZXIKK2lzIHN0aWxsIGFsaXZlLCBidXQgb25seSBiZWNhdXNlIG9mIHRoZSBtZXNzIGluIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMuCitBcyBzb29uIGFzIGl0IGdldHMgZml4ZWQgaXNfcmVhZF9vbmx5KCkgd2lsbCBkaWUuCisKKy0tLQorW21hbmRhdG9yeV0KKworLT5wZXJtaXNzaW9uKCkgaXMgY2FsbGVkIHdpdGhvdXQgQktMIG5vdy4gR3JhYiBpdCBvbiBlbnRyeSwgZHJvcCB1cG9uCityZXR1cm4gLSB0aGF0IHdpbGwgZ3VhcmFudGVlIHRoZSBzYW1lIGxvY2tpbmcgeW91IHVzZWQgdG8gaGF2ZS4gIElmCit5b3VyIG1ldGhvZCBvciBpdHMgcGFydHMgZG8gbm90IG5lZWQgQktMIC0gYmV0dGVyIHlldCwgbm93IHlvdSBjYW4KK3NoaWZ0IGxvY2tfa2VybmVsKCkgYW5kIHVubG9ja19rZXJuZWwoKSBzbyB0aGF0IHRoZXkgd291bGQgcHJvdGVjdAorZXhhY3RseSB3aGF0IG5lZWRzIHRvIGJlIHByb3RlY3RlZC4KKworLS0tCitbbWFuZGF0b3J5XQorCistPnN0YXRmcygpIGlzIG5vdyBjYWxsZWQgd2l0aG91dCBCS0wgaGVsZC4gIEJLTCBzaG91bGQgaGF2ZSBiZWVuCitzaGlmdGVkIGludG8gaW5kaXZpZHVhbCBmcyBzYl9vcCBmdW5jdGlvbnMgd2hlcmUgaXQncyBub3QgY2xlYXIgdGhhdAoraXQncyBzYWZlIHRvIHJlbW92ZSBpdC4gIElmIHlvdSBkb24ndCBuZWVkIGl0LCByZW1vdmUgaXQuCisKKy0tLQorW21hbmRhdG9yeV0KKworCWlzX3JlYWRfb25seSgpIGlzIGdvbmU7IHVzZSBiZGV2X3JlYWRfb25seSgpIGluc3RlYWQuCisKKy0tLQorW21hbmRhdG9yeV0KKworCWRlc3Ryb3lfYnVmZmVycygpIGlzIGdvbmU7IHVzZSBpbnZhbGlkYXRlX2JkZXYoKS4KKworLS0tCitbbWFuZGF0b3J5XQorCisJZnN5bmNfZGV2KCkgaXMgZ29uZTsgdXNlIGZzeW5jX2JkZXYoKS4gIE5PVEU6IGx2bSBicmVha2FnZSBpcworZGVsaWJlcmF0ZTsgYXMgc29vbiBhcyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICogaXMgcHJvcGFnYXRlZCBpbiBhIHJlYXNvbmFibGUKK3dheSBieSB0aGF0IGNvZGUgZml4aW5nIHdpbGwgYmVjb21lIHRyaXZpYWw7IHVudGlsIHRoZW4gbm90aGluZyBjYW4gYmUKK2RvbmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmU4NWMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMCwwICsxLDE5NDAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICBUIEggRSAgL3Byb2MgICBGIEkgTCBFIFMgWSBTIFQgRSBNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy9wcm9jL3N5cyAgICAgICAgIFRlcnJlaG9uIEJvd2RlbiA8dGVycmVob25AcGFjYmVsbC5uZXQ+ICAgICAgICBPY3RvYmVyIDcgMTk5OQorICAgICAgICAgICAgICAgICAgQm9kbyBCYXVlciA8YmJAcmljb2NoZXQubmV0PgorCisyLjQueCB1cGRhdGUJICBKb3JnZSBOZXJpbiA8Y29tYW5kYW50ZUB6YXJhbGludXguY29tPiAgICAgIE5vdmVtYmVyIDE0IDIwMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVmVyc2lvbiAxLjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsIHZlcnNpb24gMi4yLjEyCisJCQkJCSAgICAgIEtlcm5lbCB2ZXJzaW9uIDIuNC4wLXRlc3QxMS1wcmU0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGFibGUgb2YgQ29udGVudHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgMCAgICAgUHJlZmFjZQorICAwLjEJSW50cm9kdWN0aW9uL0NyZWRpdHMKKyAgMC4yCUxlZ2FsIFN0dWZmCisKKyAgMQlDb2xsZWN0aW5nIFN5c3RlbSBJbmZvcm1hdGlvbgorICAxLjEJUHJvY2Vzcy1TcGVjaWZpYyBTdWJkaXJlY3RvcmllcworICAxLjIJS2VybmVsIGRhdGEKKyAgMS4zCUlERSBkZXZpY2VzIGluIC9wcm9jL2lkZQorICAxLjQJTmV0d29ya2luZyBpbmZvIGluIC9wcm9jL25ldAorICAxLjUJU0NTSSBpbmZvCisgIDEuNglQYXJhbGxlbCBwb3J0IGluZm8gaW4gL3Byb2MvcGFycG9ydAorICAxLjcJVFRZIGluZm8gaW4gL3Byb2MvdHR5CisgIDEuOAlNaXNjZWxsYW5lb3VzIGtlcm5lbCBzdGF0aXN0aWNzIGluIC9wcm9jL3N0YXQKKworICAyCU1vZGlmeWluZyBTeXN0ZW0gUGFyYW1ldGVycworICAyLjEJL3Byb2Mvc3lzL2ZzIC0gRmlsZSBzeXN0ZW0gZGF0YQorICAyLjIJL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIC0gTWlzY2VsbGFuZW91cyBiaW5hcnkgZm9ybWF0cworICAyLjMJL3Byb2Mvc3lzL2tlcm5lbCAtIGdlbmVyYWwga2VybmVsIHBhcmFtZXRlcnMKKyAgMi40CS9wcm9jL3N5cy92bSAtIFRoZSB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0KKyAgMi41CS9wcm9jL3N5cy9kZXYgLSBEZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVycworICAyLjYJL3Byb2Mvc3lzL3N1bnJwYyAtIFJlbW90ZSBwcm9jZWR1cmUgY2FsbHMKKyAgMi43CS9wcm9jL3N5cy9uZXQgLSBOZXR3b3JraW5nIHN0dWZmCisgIDIuOAkvcHJvYy9zeXMvbmV0L2lwdjQgLSBJUFY0IHNldHRpbmdzCisgIDIuOQlBcHBsZXRhbGsKKyAgMi4xMAlJUFgKKyAgMi4xMQkvcHJvYy9zeXMvZnMvbXF1ZXVlIC0gUE9TSVggbWVzc2FnZSBxdWV1ZXMgZmlsZXN5c3RlbQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ByZWZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiswLjEgSW50cm9kdWN0aW9uL0NyZWRpdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50YXRpb24gaXMgIHBhcnQgb2YgYSBzb29uIChvciAgc28gd2UgaG9wZSkgdG8gYmUgIHJlbGVhc2VkIGJvb2sgb24KK3RoZSBTdVNFICBMaW51eCBkaXN0cmlidXRpb24uIEFzICB0aGVyZSBpcyAgbm8gY29tcGxldGUgZG9jdW1lbnRhdGlvbiAgZm9yIHRoZQorL3Byb2MgZmlsZSBzeXN0ZW0gYW5kIHdlJ3ZlIHVzZWQgIG1hbnkgZnJlZWx5IGF2YWlsYWJsZSBzb3VyY2VzIHRvIHdyaXRlIHRoZXNlCitjaGFwdGVycywgaXQgIHNlZW1zIG9ubHkgZmFpciAgdG8gZ2l2ZSB0aGUgd29yayAgYmFjayB0byB0aGUgIExpbnV4IGNvbW11bml0eS4KK1RoaXMgd29yayBpcyAgYmFzZWQgb24gdGhlIDIuMi4qICBrZXJuZWwgdmVyc2lvbiBhbmQgdGhlICB1cGNvbWluZyAyLjQuKi4gSSdtCithZnJhaWQgaXQncyBzdGlsbCBmYXIgZnJvbSBjb21wbGV0ZSwgYnV0IHdlICBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLiBBcyBmYXIgYXMKK3dlIGtub3csIGl0IGlzIHRoZSBmaXJzdCAnYWxsLWluLW9uZScgZG9jdW1lbnQgYWJvdXQgdGhlIC9wcm9jIGZpbGUgc3lzdGVtLiBJdAoraXMgZm9jdXNlZCAgb24gdGhlIEludGVsICB4ODYgaGFyZHdhcmUsICBzbyBpZiB5b3UgIGFyZSBsb29raW5nIGZvciAgUFBDLCBBUk0sCitTUEFSQywgQVhQLCBldGMuLCBmZWF0dXJlcywgeW91IHByb2JhYmx5ICB3b24ndCBmaW5kIHdoYXQgeW91IGFyZSBsb29raW5nIGZvci4KK0l0IGFsc28gb25seSBjb3ZlcnMgSVB2NCBuZXR3b3JraW5nLCBub3QgSVB2NiBub3Igb3RoZXIgcHJvdG9jb2xzIC0gc29ycnkuIEJ1dAorYWRkaXRpb25zIGFuZCBwYXRjaGVzICBhcmUgd2VsY29tZSBhbmQgd2lsbCAgYmUgYWRkZWQgdG8gdGhpcyAgZG9jdW1lbnQgaWYgeW91CittYWlsIHRoZW0gdG8gQm9kby4KKworV2UnZCBsaWtlICB0byAgdGhhbmsgQWxhbiBDb3gsIFJpayB2YW4gUmllbCwgYW5kIEFsZXhleSBLdXpuZXRzb3YgYW5kIGEgbG90IG9mCitvdGhlciBwZW9wbGUgZm9yIGhlbHAgY29tcGlsaW5nIHRoaXMgZG9jdW1lbnRhdGlvbi4gV2UnZCBhbHNvIGxpa2UgdG8gZXh0ZW5kIGEKK3NwZWNpYWwgdGhhbmsgIHlvdSB0byBBbmRpIEtsZWVuIGZvciBkb2N1bWVudGF0aW9uLCB3aGljaCB3ZSByZWxpZWQgb24gaGVhdmlseQordG8gY3JlYXRlICB0aGlzICBkb2N1bWVudCwgIGFzIHdlbGwgYXMgdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaGUgcHJvdmlkZWQuCitUaGFua3MgdG8gIGV2ZXJ5Ym9keSAgZWxzZSAgd2hvIGNvbnRyaWJ1dGVkIHNvdXJjZSBvciBkb2NzIHRvIHRoZSBMaW51eCBrZXJuZWwKK2FuZCBoZWxwZWQgY3JlYXRlIGEgZ3JlYXQgcGllY2Ugb2Ygc29mdHdhcmUuLi4gOikKKworSWYgeW91ICBoYXZlICBhbnkgY29tbWVudHMsIGNvcnJlY3Rpb25zIG9yIGFkZGl0aW9ucywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvCitjb250YWN0IEJvZG8gIEJhdWVyICBhdCAgYmJAcmljb2NoZXQubmV0LiAgV2UnbGwgIGJlIGhhcHB5IHRvIGFkZCB0aGVtIHRvIHRoaXMKK2RvY3VtZW50LgorCitUaGUgICBsYXRlc3QgICB2ZXJzaW9uICAgIG9mICAgdGhpcyAgIGRvY3VtZW50ICAgaXMgICAgYXZhaWxhYmxlICAgb25saW5lICAgYXQKK2h0dHA6Ly9za2Fyby5uaWdodGNyYXdsZXIuY29tL35iYi9Eb2NzL1Byb2MgYXMgSFRNTCB2ZXJzaW9uLgorCitJZiAgdGhlIGFib3ZlICBkaXJlY3Rpb24gZG9lcyAgbm90IHdvcmtzICBmb3IgeW91LCAgeXB1IGNvdWxkICB0cnkgdGhlICBrZXJuZWwKK21haWxpbmcgIGxpc3QgIGF0ICBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnICBhbmQvb3IgdHJ5ICB0byAgcmVhY2ggIG1lICBhdAorY29tYW5kYW50ZUB6YXJhbGludXguY29tLgorCiswLjIgTGVnYWwgU3R1ZmYKKy0tLS0tLS0tLS0tLS0tLQorCitXZSBkb24ndCAgZ3VhcmFudGVlICB0aGUgIGNvcnJlY3RuZXNzICBvZiB0aGlzIGRvY3VtZW50LCBhbmQgaWYgeW91IGNvbWUgdG8gdXMKK2NvbXBsYWluaW5nIGFib3V0ICBob3cgIHlvdSAgc2NyZXdlZCAgdXAgIHlvdXIgIHN5c3RlbSAgYmVjYXVzZSAgb2YgIGluY29ycmVjdAorZG9jdW1lbnRhdGlvbiwgd2Ugd29uJ3QgZmVlbCByZXNwb25zaWJsZS4uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NIQVBURVIgMTogQ09MTEVDVElORyBTWVNURU0gSU5GT1JNQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIFRoaXMgQ2hhcHRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEludmVzdGlnYXRpbmcgIHRoZSAgcHJvcGVydGllcyAgb2YgIHRoZSAgcHNldWRvICBmaWxlICBzeXN0ZW0gIC9wcm9jIGFuZCBpdHMKKyAgYWJpbGl0eSB0byBwcm92aWRlIGluZm9ybWF0aW9uIG9uIHRoZSBydW5uaW5nIExpbnV4IHN5c3RlbQorKiBFeGFtaW5pbmcgL3Byb2MncyBzdHJ1Y3R1cmUKKyogVW5jb3ZlcmluZyAgdmFyaW91cyAgaW5mb3JtYXRpb24gIGFib3V0IHRoZSBrZXJuZWwgYW5kIHRoZSBwcm9jZXNzZXMgcnVubmluZworICBvbiB0aGUgc3lzdGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitUaGUgcHJvYyAgZmlsZSAgc3lzdGVtIGFjdHMgYXMgYW4gaW50ZXJmYWNlIHRvIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUKK2tlcm5lbC4gSXQgIGNhbiAgYmUgIHVzZWQgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHRvIGNoYW5nZQorY2VydGFpbiBrZXJuZWwgcGFyYW1ldGVycyBhdCBydW50aW1lIChzeXNjdGwpLgorCitGaXJzdCwgd2UnbGwgIHRha2UgIGEgIGxvb2sgIGF0IHRoZSByZWFkLW9ubHkgcGFydHMgb2YgL3Byb2MuIEluIENoYXB0ZXIgMiwgd2UKK3Nob3cgeW91IGhvdyB5b3UgY2FuIHVzZSAvcHJvYy9zeXMgdG8gY2hhbmdlIHNldHRpbmdzLgorCisxLjEgUHJvY2Vzcy1TcGVjaWZpYyBTdWJkaXJlY3RvcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRpcmVjdG9yeSAgL3Byb2MgIGNvbnRhaW5zICAoYW1vbmcgb3RoZXIgdGhpbmdzKSBvbmUgc3ViZGlyZWN0b3J5IGZvciBlYWNoCitwcm9jZXNzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbSwgd2hpY2ggaXMgbmFtZWQgYWZ0ZXIgdGhlIHByb2Nlc3MgSUQgKFBJRCkuCisKK1RoZSBsaW5rICBzZWxmICBwb2ludHMgIHRvICB0aGUgIHByb2Nlc3MgcmVhZGluZyB0aGUgZmlsZSBzeXN0ZW0uIEVhY2ggcHJvY2Vzcworc3ViZGlyZWN0b3J5IGhhcyB0aGUgZW50cmllcyBsaXN0ZWQgaW4gVGFibGUgMS0xLgorCisKK1RhYmxlIDEtMTogUHJvY2VzcyBzcGVjaWZpYyBlbnRyaWVzIGluIC9wcm9jIAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRmlsZSAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGNtZGxpbmUgQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAKKyBjcHUJIEN1cnJlbnQgYW5kIGxhc3QgY3B1IGluIHdpY2ggaXQgd2FzIGV4ZWN1dGVkCQkoMi40KShzbXApCisgY3dkCSBMaW5rIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgZW52aXJvbiBWYWx1ZXMgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzICAgICAgCisgZXhlCSBMaW5rIHRvIHRoZSBleGVjdXRhYmxlIG9mIHRoaXMgcHJvY2VzcworIGZkICAgICAgRGlyZWN0b3J5LCB3aGljaCBjb250YWlucyBhbGwgZmlsZSBkZXNjcmlwdG9ycyAKKyBtYXBzCSBNZW1vcnkgbWFwcyB0byBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcwkJKDIuNCkKKyBtZW0gICAgIE1lbW9yeSBoZWxkIGJ5IHRoaXMgcHJvY2VzcyAgICAgICAgICAgICAgICAgICAgCisgcm9vdAkgTGluayB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9jZXNzCisgc3RhdCAgICBQcm9jZXNzIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHN0YXRtICAgUHJvY2VzcyBtZW1vcnkgc3RhdHVzIGluZm9ybWF0aW9uICAgICAgICAgICAgICAKKyBzdGF0dXMgIFByb2Nlc3Mgc3RhdHVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0gICAgICAgICAgCisgd2NoYW4gICBJZiBDT05GSUdfS0FMTFNZTVMgaXMgc2V0LCBhIHByZS1kZWNvZGVkIHdjaGFuCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworRm9yIGV4YW1wbGUsIHRvIGdldCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIG9mIGEgcHJvY2VzcywgYWxsIHlvdSBoYXZlIHRvIGRvIGlzCityZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6CisKKyAgPmNhdCAvcHJvYy9zZWxmL3N0YXR1cyAKKyAgTmFtZTogICBjYXQgCisgIFN0YXRlOiAgUiAocnVubmluZykgCisgIFBpZDogICAgNTQ1MiAKKyAgUFBpZDogICA3NDMgCisgIFRyYWNlclBpZDogICAgICAwCQkJCQkJKDIuNCkKKyAgVWlkOiAgICA1MDEgICAgIDUwMSAgICAgNTAxICAgICA1MDEgCisgIEdpZDogICAgMTAwICAgICAxMDAgICAgIDEwMCAgICAgMTAwIAorICBHcm91cHM6IDEwMCAxNCAxNiAKKyAgVm1TaXplOiAgICAgMTExMiBrQiAKKyAgVm1MY2s6ICAgICAgICAgMCBrQiAKKyAgVm1SU1M6ICAgICAgIDM0OCBrQiAKKyAgVm1EYXRhOiAgICAgICAyNCBrQiAKKyAgVm1TdGs6ICAgICAgICAxMiBrQiAKKyAgVm1FeGU6ICAgICAgICAgOCBrQiAKKyAgVm1MaWI6ICAgICAgMTA0NCBrQiAKKyAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwIAorICBTaWdCbGs6IDAwMDAwMDAwMDAwMDAwMDAgCisgIFNpZ0lnbjogMDAwMDAwMDAwMDAwMDAwMCAKKyAgU2lnQ2d0OiAwMDAwMDAwMDAwMDAwMDAwIAorICBDYXBJbmg6IDAwMDAwMDAwZmZmZmZlZmYgCisgIENhcFBybTogMDAwMDAwMDAwMDAwMDAwMCAKKyAgQ2FwRWZmOiAwMDAwMDAwMDAwMDAwMDAwIAorCisKK1RoaXMgc2hvd3MgeW91IG5lYXJseSB0aGUgc2FtZSBpbmZvcm1hdGlvbiB5b3Ugd291bGQgZ2V0IGlmIHlvdSB2aWV3ZWQgaXQgd2l0aAordGhlIHBzICBjb21tYW5kLiAgSW4gIGZhY3QsICBwcyAgdXNlcyAgdGhlICBwcm9jICBmaWxlICBzeXN0ZW0gIHRvICBvYnRhaW4gaXRzCitpbmZvcm1hdGlvbi4gVGhlICBzdGF0bSAgZmlsZSAgY29udGFpbnMgIG1vcmUgIGRldGFpbGVkICBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK3Byb2Nlc3MgbWVtb3J5IHVzYWdlLiBJdHMgc2V2ZW4gZmllbGRzIGFyZSBleHBsYWluZWQgaW4gVGFibGUgMS0yLgorCisKK1RhYmxlIDEtMjogQ29udGVudHMgb2YgdGhlIHN0YXRtIGZpbGVzIChhcyBvZiAyLjYuOC1yYzMpCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWVsZCAgICBDb250ZW50Cisgc2l6ZSAgICAgdG90YWwgcHJvZ3JhbSBzaXplIChwYWdlcykJCShzYW1lIGFzIFZtU2l6ZSBpbiBzdGF0dXMpCisgcmVzaWRlbnQgc2l6ZSBvZiBtZW1vcnkgcG9ydGlvbnMgKHBhZ2VzKQkoc2FtZSBhcyBWbVJTUyBpbiBzdGF0dXMpCisgc2hhcmVkICAgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgYXJlIHNoYXJlZAkoaS5lLiBiYWNrZWQgYnkgYSBmaWxlKQorIHRycyAgICAgIG51bWJlciBvZiBwYWdlcyB0aGF0IGFyZSAnY29kZScJKG5vdCBpbmNsdWRpbmcgbGliczsgYnJva2VuLAorCQkJCQkJCWluY2x1ZGVzIGRhdGEgc2VnbWVudCkKKyBscnMgICAgICBudW1iZXIgb2YgcGFnZXMgb2YgbGlicmFyeQkJKGFsd2F5cyAwIG9uIDIuNikKKyBkcnMgICAgICBudW1iZXIgb2YgcGFnZXMgb2YgZGF0YS9zdGFjawkJKGluY2x1ZGluZyBsaWJzOyBicm9rZW4sCisJCQkJCQkJaW5jbHVkZXMgbGlicmFyeSB0ZXh0KQorIGR0ICAgICAgIG51bWJlciBvZiBkaXJ0eSBwYWdlcwkJCShhbHdheXMgMCBvbiAyLjYpCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworMS4yIEtlcm5lbCBkYXRhCistLS0tLS0tLS0tLS0tLS0KKworU2ltaWxhciB0byAgdGhlICBwcm9jZXNzIGVudHJpZXMsIHRoZSBrZXJuZWwgZGF0YSBmaWxlcyBnaXZlIGluZm9ybWF0aW9uIGFib3V0Cit0aGUgcnVubmluZyBrZXJuZWwuIFRoZSBmaWxlcyB1c2VkIHRvIG9idGFpbiB0aGlzIGluZm9ybWF0aW9uIGFyZSBjb250YWluZWQgaW4KKy9wcm9jIGFuZCAgYXJlICBsaXN0ZWQgIGluIFRhYmxlIDEtMy4gTm90IGFsbCBvZiB0aGVzZSB3aWxsIGJlIHByZXNlbnQgaW4geW91cgorc3lzdGVtLiBJdCAgZGVwZW5kcyAgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCB0aGUgbG9hZGVkIG1vZHVsZXMsIHdoaWNoCitmaWxlcyBhcmUgdGhlcmUsIGFuZCB3aGljaCBhcmUgbWlzc2luZy4KKworVGFibGUgMS0zOiBLZXJuZWwgaW5mbyBpbiAvcHJvYyAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgYXBtICAgICAgICAgQWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCBpbmZvICAgICAgICAgICAgICAgICAgICAKKyBidWRkeWluZm8gICBLZXJuZWwgbWVtb3J5IGFsbG9jYXRvciBpbmZvcm1hdGlvbiAoc2VlIHRleHQpCSgyLjUpCisgYnVzICAgICAgICAgRGlyZWN0b3J5IGNvbnRhaW5pbmcgYnVzIHNwZWNpZmljIGluZm9ybWF0aW9uICAgICAKKyBjbWRsaW5lICAgICBLZXJuZWwgY29tbWFuZCBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGNwdWluZm8gICAgIEluZm8gYWJvdXQgdGhlIENQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgZGV2aWNlcyAgICAgQXZhaWxhYmxlIGRldmljZXMgKGJsb2NrIGFuZCBjaGFyYWN0ZXIpICAgICAgICAgICAKKyBkbWEgICAgICAgICBVc2VkIERNUyBjaGFubmVscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGZpbGVzeXN0ZW1zIFN1cHBvcnRlZCBmaWxlc3lzdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgZHJpdmVyCSAgICAgVmFyaW91cyBkcml2ZXJzIGdyb3VwZWQgaGVyZSwgY3VycmVudGx5IHJ0YyAoMi40KQorIGV4ZWNkb21haW5zIEV4ZWNkb21haW5zLCByZWxhdGVkIHRvIHNlY3VyaXR5CQkJKDIuNCkKKyBmYgkgICAgIEZyYW1lIEJ1ZmZlciBkZXZpY2VzCQkJCSgyLjQpCisgZnMJICAgICBGaWxlIHN5c3RlbSBwYXJhbWV0ZXJzLCBjdXJyZW50bHkgbmZzL2V4cG9ydHMJKDIuNCkKKyBpZGUgICAgICAgICBEaXJlY3RvcnkgY29udGFpbmluZyBpbmZvIGFib3V0IHRoZSBJREUgc3Vic3lzdGVtIAorIGludGVycnVwdHMgIEludGVycnVwdCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaW9tZW0JICAgICBNZW1vcnkgbWFwCQkJCQkJKDIuNCkKKyBpb3BvcnRzICAgICBJL08gcG9ydCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGlycQkgICAgIE1hc2tzIGZvciBpcnEgdG8gY3B1IGFmZmluaXR5CQkJKDIuNCkoc21wPykKKyBpc2FwbnAJICAgICBJU0EgUG5QIChQbHVnJlBsYXkpIEluZm8JCQkJKDIuNCkKKyBrY29yZSAgICAgICBLZXJuZWwgY29yZSBpbWFnZSAoY2FuIGJlIEVMRiBvciBBLk9VVChkZXByZWNhdGVkIGluIDIuNCkpICAgCisga21zZyAgICAgICAgS2VybmVsIG1lc3NhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBrc3ltcyAgICAgICBLZXJuZWwgc3ltYm9sIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGxvYWRhdmcgICAgIExvYWQgYXZlcmFnZSBvZiBsYXN0IDEsIDUgJiAxNSBtaW51dGVzICAgICAgICAgICAgICAgIAorIGxvY2tzICAgICAgIEtlcm5lbCBsb2NrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbWVtaW5mbyAgICAgTWVtb3J5IGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBtaXNjICAgICAgICBNaXNjZWxsYW5lb3VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG1vZHVsZXMgICAgIExpc3Qgb2YgbG9hZGVkIG1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbW91bnRzICAgICAgTW91bnRlZCBmaWxlc3lzdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBuZXQgICAgICAgICBOZXR3b3JraW5nIGluZm8gKHNlZSB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgIAorIHBhcnRpdGlvbnMgIFRhYmxlIG9mIHBhcnRpdGlvbnMga25vd24gdG8gdGhlIHN5c3RlbSAgICAgICAgICAgCisgcGNpCSAgICAgRGVwcmVjaWF0ZWQgaW5mbyBvZiBQQ0kgYnVzIChuZXcgd2F5IC0+IC9wcm9jL2J1cy9wY2kvLCAKKyAgICAgICAgICAgICBkZWNvdXBsZWQgYnkgbHNwY2kJCQkJCSgyLjQpCisgcnRjICAgICAgICAgUmVhbCB0aW1lIGNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzY3NpICAgICAgICBTQ1NJIGluZm8gKHNlZSB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHNsYWJpbmZvICAgIFNsYWIgcG9vbCBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc3RhdCAgICAgICAgT3ZlcmFsbCBzdGF0aXN0aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzd2FwcyAgICAgICBTd2FwIHNwYWNlIHV0aWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHN5cyAgICAgICAgIFNlZSBjaGFwdGVyIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc3lzdmlwYyAgICAgSW5mbyBvZiBTeXNWSVBDIFJlc291cmNlcyAobXNnLCBzZW0sIHNobSkJCSgyLjQpCisgdHR5CSAgICAgSW5mbyBvZiB0dHkgZHJpdmVycworIHVwdGltZSAgICAgIFN5c3RlbSB1cHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdmVyc2lvbiAgICAgS2VybmVsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyB2aWRlbwkgICAgIGJ0dHYgaW5mbyBvZiB2aWRlbyByZXNvdXJjZXMJCQkoMi40KQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1lvdSBjYW4sICBmb3IgIGV4YW1wbGUsICBjaGVjayAgd2hpY2ggaW50ZXJydXB0cyBhcmUgY3VycmVudGx5IGluIHVzZSBhbmQgd2hhdAordGhleSBhcmUgdXNlZCBmb3IgYnkgbG9va2luZyBpbiB0aGUgZmlsZSAvcHJvYy9pbnRlcnJ1cHRzOgorCisgID4gY2F0IC9wcm9jL2ludGVycnVwdHMgCisgICAgICAgICAgICAgQ1BVMCAgICAgICAgCisgICAgMDogICAgODcyODgxMCAgICAgICAgICBYVC1QSUMgIHRpbWVyIAorICAgIDE6ICAgICAgICA4OTUgICAgICAgICAgWFQtUElDICBrZXlib2FyZCAKKyAgICAyOiAgICAgICAgICAwICAgICAgICAgIFhULVBJQyAgY2FzY2FkZSAKKyAgICAzOiAgICAgNTMxNjk1ICAgICAgICAgIFhULVBJQyAgYWhhMTUyeCAKKyAgICA0OiAgICAyMDE0MTMzICAgICAgICAgIFhULVBJQyAgc2VyaWFsIAorICAgIDU6ICAgICAgNDQ0MDEgICAgICAgICAgWFQtUElDICBwY25ldF9jcyAKKyAgICA4OiAgICAgICAgICAyICAgICAgICAgIFhULVBJQyAgcnRjIAorICAgMTE6ICAgICAgICAgIDggICAgICAgICAgWFQtUElDICBpODIzNjUgCisgICAxMjogICAgIDE4MjkxOCAgICAgICAgICBYVC1QSUMgIFBTLzIgTW91c2UgCisgICAxMzogICAgICAgICAgMSAgICAgICAgICBYVC1QSUMgIGZwdSAKKyAgIDE0OiAgICAxMjMyMjY1ICAgICAgICAgIFhULVBJQyAgaWRlMCAKKyAgIDE1OiAgICAgICAgICA3ICAgICAgICAgIFhULVBJQyAgaWRlMSAKKyAgTk1JOiAgICAgICAgICAwIAorCitJbiAyLjQuKiBhIGNvdXBsZSBvZiBsaW5lcyB3aGVyZSBhZGRlZCB0byB0aGlzIGZpbGUgTE9DICYgRVJSICh0aGlzIHRpbWUgaXMgdGhlCitvdXRwdXQgb2YgYSBTTVAgbWFjaGluZSk6CisKKyAgPiBjYXQgL3Byb2MvaW50ZXJydXB0cyAKKworICAgICAgICAgICAgIENQVTAgICAgICAgQ1BVMSAgICAgICAKKyAgICAwOiAgICAxMjQzNDk4ICAgIDEyMTQ1NDggICAgSU8tQVBJQy1lZGdlICB0aW1lcgorICAgIDE6ICAgICAgIDg5NDkgICAgICAgODk1OCAgICBJTy1BUElDLWVkZ2UgIGtleWJvYXJkCisgICAgMjogICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIFhULVBJQyAgY2FzY2FkZQorICAgIDU6ICAgICAgMTEyODYgICAgICAxMDE2MSAgICBJTy1BUElDLWVkZ2UgIHNvdW5kYmxhc3RlcgorICAgIDg6ICAgICAgICAgIDEgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIHJ0YworICAgIDk6ICAgICAgMjc0MjIgICAgICAyNzQwNyAgICBJTy1BUElDLWVkZ2UgIDNjNTAzCisgICAxMjogICAgIDExMzY0NSAgICAgMTEzODczICAgIElPLUFQSUMtZWRnZSAgUFMvMiBNb3VzZQorICAgMTM6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGZwdQorICAgMTQ6ICAgICAgMjI0OTEgICAgICAyNDAxMiAgICBJTy1BUElDLWVkZ2UgIGlkZTAKKyAgIDE1OiAgICAgICAyMTgzICAgICAgIDI0MTUgICAgSU8tQVBJQy1lZGdlICBpZGUxCisgICAxNzogICAgICAzMDU2NCAgICAgIDMwNDE0ICAgSU8tQVBJQy1sZXZlbCAgZXRoMAorICAgMTg6ICAgICAgICAxNzcgICAgICAgIDE2NCAgIElPLUFQSUMtbGV2ZWwgIGJ0dHYKKyAgTk1JOiAgICAyNDU3OTYxICAgIDI0NTc5NTkgCisgIExPQzogICAgMjQ1Nzg4MiAgICAyNDU3ODgxIAorICBFUlI6ICAgICAgIDIxNTUKKworTk1JIGlzIGluY3JlbWVudGVkIGluIHRoaXMgY2FzZSBiZWNhdXNlIGV2ZXJ5IHRpbWVyIGludGVycnVwdCBnZW5lcmF0ZXMgYSBOTUkKKyhOb24gTWFza2FibGUgSW50ZXJydXB0KSB3aGljaCBpcyB1c2VkIGJ5IHRoZSBOTUkgV2F0Y2hkb2cgdG8gZGV0ZWN0IGxvY2t1cHMuCisKK0xPQyBpcyB0aGUgbG9jYWwgaW50ZXJydXB0IGNvdW50ZXIgb2YgdGhlIGludGVybmFsIEFQSUMgb2YgZXZlcnkgQ1BVLgorCitFUlIgaXMgaW5jcmVtZW50ZWQgaW4gdGhlIGNhc2Ugb2YgZXJyb3JzIGluIHRoZSBJTy1BUElDIGJ1cyAodGhlIGJ1cyB0aGF0Citjb25uZWN0cyB0aGUgQ1BVcyBpbiBhIFNNUCBzeXN0ZW0uIFRoaXMgbWVhbnMgdGhhdCBhbiBlcnJvciBoYXMgYmVlbiBkZXRlY3RlZCwKK3RoZSBJTy1BUElDIGF1dG9tYXRpY2FsbHkgcmV0cnkgdGhlIHRyYW5zbWlzc2lvbiwgc28gaXQgc2hvdWxkIG5vdCBiZSBhIGJpZworcHJvYmxlbSwgYnV0IHlvdSBzaG91bGQgcmVhZCB0aGUgU01QLUZBUS4KKworSW4gdGhpcyBjb250ZXh0IGl0IGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIG5vdGUgdGhlIG5ldyBpcnEgZGlyZWN0b3J5IGluIDIuNC4KK0l0IGNvdWxkIGJlIHVzZWQgdG8gc2V0IElSUSB0byBDUFUgYWZmaW5pdHksIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuICJob29rIiBhbgorSVJRIHRvIG9ubHkgb25lIENQVSwgb3IgdG8gZXhjbHVkZSBhIENQVSBvZiBoYW5kbGluZyBJUlFzLiBUaGUgY29udGVudHMgb2YgdGhlCitpcnEgc3ViZGlyIGlzIG9uZSBzdWJkaXIgZm9yIGVhY2ggSVJRLCBhbmQgb25lIGZpbGU7IHByb2ZfY3B1X21hc2sKKworRm9yIGV4YW1wbGUgCisgID4gbHMgL3Byb2MvaXJxLworICAwICAxMCAgMTIgIDE0ICAxNiAgMTggIDIgIDQgIDYgIDggIHByb2ZfY3B1X21hc2sKKyAgMSAgMTEgIDEzICAxNSAgMTcgIDE5ICAzICA1ICA3ICA5CisgID4gbHMgL3Byb2MvaXJxLzAvCisgIHNtcF9hZmZpbml0eQorCitUaGUgY29udGVudHMgb2YgdGhlIHByb2ZfY3B1X21hc2sgZmlsZSBhbmQgZWFjaCBzbXBfYWZmaW5pdHkgZmlsZSBmb3IgZWFjaCBJUlEKK2lzIHRoZSBzYW1lIGJ5IGRlZmF1bHQ6CisKKyAgPiBjYXQgL3Byb2MvaXJxLzAvc21wX2FmZmluaXR5IAorICBmZmZmZmZmZgorCitJdCdzIGEgYml0bWFzaywgaW4gd2ljaCB5b3UgY2FuIHNwZWNpZnkgd2ljaCBDUFVzIGNhbiBoYW5kbGUgdGhlIElSUSwgeW91IGNhbgorc2V0IGl0IGJ5IGRvaW5nOgorCisgID4gZWNobyAxID4gL3Byb2MvaXJxL3Byb2ZfY3B1X21hc2sKKworVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZpcnN0IENQVSB3aWxsIGhhbmRsZSB0aGUgSVJRLCBidXQgeW91IGNhbiBhbHNvIGVjaG8gNQord2ljaCBtZWFucyB0aGF0IG9ubHkgdGhlIGZpcnN0IGFuZCBmb3VydGggQ1BVIGNhbiBoYW5kbGUgdGhlIElSUS4KKworVGhlIHdheSBJUlFzIGFyZSByb3V0ZWQgaXMgaGFuZGxlZCBieSB0aGUgSU8tQVBJQywgYW5kIGl0J3MgUm91bmQgUm9iaW4KK2JldHdlZW4gYWxsIHRoZSBDUFVzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGhhbmRsZSBpdC4gQXMgdXN1YWwgdGhlIGtlcm5lbCBoYXMKK21vcmUgaW5mbyB0aGFuIHlvdSBhbmQgZG9lcyBhIGJldHRlciBqb2IgdGhhbiB5b3UsIHNvIHRoZSBkZWZhdWx0cyBhcmUgdGhlCitiZXN0IGNob2ljZSBmb3IgYWxtb3N0IGV2ZXJ5b25lLgorCitUaGVyZSBhcmUgIHRocmVlICBtb3JlICBpbXBvcnRhbnQgc3ViZGlyZWN0b3JpZXMgaW4gL3Byb2M6IG5ldCwgc2NzaSwgYW5kIHN5cy4KK1RoZSBnZW5lcmFsICBydWxlICBpcyAgdGhhdCAgdGhlICBjb250ZW50cywgIG9yICBldmVuICB0aGUgIGV4aXN0ZW5jZSBvZiB0aGVzZQorZGlyZWN0b3JpZXMsIGRlcGVuZCAgb24geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbi4gSWYgU0NTSSBpcyBub3QgZW5hYmxlZCwgdGhlCitkaXJlY3Rvcnkgc2NzaSAgbWF5ICBub3QgIGV4aXN0LiBUaGUgc2FtZSBpcyB0cnVlIHdpdGggdGhlIG5ldCwgd2hpY2ggaXMgdGhlcmUKK29ubHkgd2hlbiBuZXR3b3JraW5nIHN1cHBvcnQgaXMgcHJlc2VudCBpbiB0aGUgcnVubmluZyBrZXJuZWwuCisKK1RoZSBzbGFiaW5mbyAgZmlsZSAgZ2l2ZXMgIGluZm9ybWF0aW9uICBhYm91dCAgbWVtb3J5IHVzYWdlIGF0IHRoZSBzbGFiIGxldmVsLgorTGludXggdXNlcyAgc2xhYiAgcG9vbHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFib3ZlIHBhZ2UgbGV2ZWwgaW4gdmVyc2lvbiAyLjIuCitDb21tb25seSB1c2VkICBvYmplY3RzICBoYXZlICB0aGVpciAgb3duICBzbGFiICBwb29sIChzdWNoIGFzIG5ldHdvcmsgYnVmZmVycywKK2RpcmVjdG9yeSBjYWNoZSwgYW5kIHNvIG9uKS4KKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKz4gY2F0IC9wcm9jL2J1ZGR5aW5mbworCitOb2RlIDAsIHpvbmUgICAgICBETUEgICAgICAwICAgICAgNCAgICAgIDUgICAgICA0ICAgICAgNCAgICAgIDMgLi4uCitOb2RlIDAsIHpvbmUgICBOb3JtYWwgICAgICAxICAgICAgMCAgICAgIDAgICAgICAxICAgIDEwMSAgICAgIDggLi4uCitOb2RlIDAsIHpvbmUgIEhpZ2hNZW0gICAgICAyICAgICAgMCAgICAgIDAgICAgICAxICAgICAgMSAgICAgIDAgLi4uCisKK01lbW9yeSBmcmFnbWVudGF0aW9uIGlzIGEgcHJvYmxlbSB1bmRlciBzb21lIHdvcmtsb2FkcywgYW5kIGJ1ZGR5aW5mbyBpcyBhIAordXNlZnVsIHRvb2wgZm9yIGhlbHBpbmcgZGlhZ25vc2UgdGhlc2UgcHJvYmxlbXMuICBCdWRkeWluZm8gd2lsbCBnaXZlIHlvdSBhIAorY2x1ZSBhcyB0byBob3cgYmlnIGFuIGFyZWEgeW91IGNhbiBzYWZlbHkgYWxsb2NhdGUsIG9yIHdoeSBhIHByZXZpb3VzCithbGxvY2F0aW9uIGZhaWxlZC4KKworRWFjaCBjb2x1bW4gcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIG9mIGEgY2VydGFpbiBvcmRlciB3aGljaCBhcmUgCithdmFpbGFibGUuICBJbiB0aGlzIGNhc2UsIHRoZXJlIGFyZSAwIGNodW5rcyBvZiAyXjAqUEFHRV9TSVpFIGF2YWlsYWJsZSBpbiAKK1pPTkVfRE1BLCA0IGNodW5rcyBvZiAyXjEqUEFHRV9TSVpFIGluIFpPTkVfRE1BLCAxMDEgY2h1bmtzIG9mIDJeNCpQQUdFX1NJWkUgCithdmFpbGFibGUgaW4gWk9ORV9OT1JNQUwsIGV0Yy4uLiAKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK21lbWluZm86CisKK1Byb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGRpc3RyaWJ1dGlvbiBhbmQgdXRpbGl6YXRpb24gb2YgbWVtb3J5LiAgVGhpcwordmFyaWVzIGJ5IGFyY2hpdGVjdHVyZSBhbmQgY29tcGlsZSBvcHRpb25zLiAgVGhlIGZvbGxvd2luZyBpcyBmcm9tIGEKKzE2R0IgUElJSSwgd2hpY2ggaGFzIGhpZ2htZW0gZW5hYmxlZC4gIFlvdSBtYXkgbm90IGhhdmUgYWxsIG9mIHRoZXNlIGZpZWxkcy4KKworPiBjYXQgL3Byb2MvbWVtaW5mbworCisKK01lbVRvdGFsOiAgICAgMTYzNDQ5NzIga0IKK01lbUZyZWU6ICAgICAgMTM2MzQwNjQga0IKK0J1ZmZlcnM6ICAgICAgICAgIDM2NTYga0IKK0NhY2hlZDogICAgICAgIDExOTU3MDgga0IKK1N3YXBDYWNoZWQ6ICAgICAgICAgIDAga0IKK0FjdGl2ZTogICAgICAgICA4OTE2MzYga0IKK0luYWN0aXZlOiAgICAgIDEwNzcyMjQga0IKK0hpZ2hUb3RhbDogICAgMTU1OTc1Mjgga0IKK0hpZ2hGcmVlOiAgICAgMTM2Mjk2MzIga0IKK0xvd1RvdGFsOiAgICAgICA3NDc0NDQga0IKK0xvd0ZyZWU6ICAgICAgICAgIDQ0MzIga0IKK1N3YXBUb3RhbDogICAgICAgICAgIDAga0IKK1N3YXBGcmVlOiAgICAgICAgICAgIDAga0IKK0RpcnR5OiAgICAgICAgICAgICA5Njgga0IKK1dyaXRlYmFjazogICAgICAgICAgIDAga0IKK01hcHBlZDogICAgICAgICAyODAzNzIga0IKK1NsYWI6ICAgICAgICAgICA2ODQwNjgga0IKK0NvbW1pdExpbWl0OiAgIDc2Njk3OTYga0IKK0NvbW1pdHRlZF9BUzogICAxMDAwNTYga0IKK1BhZ2VUYWJsZXM6ICAgICAgMjQ0NDgga0IKK1ZtYWxsb2NUb3RhbDogICAxMTIyMTYga0IKK1ZtYWxsb2NVc2VkOiAgICAgICA0Mjgga0IKK1ZtYWxsb2NDaHVuazogICAxMTEwODgga0IKKworICAgIE1lbVRvdGFsOiBUb3RhbCB1c2FibGUgcmFtIChpLmUuIHBoeXNpY2FsIHJhbSBtaW51cyBhIGZldyByZXNlcnZlZAorICAgICAgICAgICAgICBiaXRzIGFuZCB0aGUga2VybmVsIGJpbmFyeSBjb2RlKQorICAgICBNZW1GcmVlOiBUaGUgc3VtIG9mIExvd0ZyZWUrSGlnaEZyZWUKKyAgICAgQnVmZmVyczogUmVsYXRpdmVseSB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgcmF3IGRpc2sgYmxvY2tzCisgICAgICAgICAgICAgIHNob3VsZG4ndCBnZXQgdHJlbWVuZG91c2x5IGxhcmdlICgyME1CIG9yIHNvKQorICAgICAgQ2FjaGVkOiBpbi1tZW1vcnkgY2FjaGUgZm9yIGZpbGVzIHJlYWQgZnJvbSB0aGUgZGlzayAodGhlCisgICAgICAgICAgICAgIHBhZ2VjYWNoZSkuICBEb2Vzbid0IGluY2x1ZGUgU3dhcENhY2hlZAorICBTd2FwQ2FjaGVkOiBNZW1vcnkgdGhhdCBvbmNlIHdhcyBzd2FwcGVkIG91dCwgaXMgc3dhcHBlZCBiYWNrIGluIGJ1dAorICAgICAgICAgICAgICBzdGlsbCBhbHNvIGlzIGluIHRoZSBzd2FwZmlsZSAoaWYgbWVtb3J5IGlzIG5lZWRlZCBpdAorICAgICAgICAgICAgICBkb2Vzbid0IG5lZWQgdG8gYmUgc3dhcHBlZCBvdXQgQUdBSU4gYmVjYXVzZSBpdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgIGluIHRoZSBzd2FwZmlsZS4gVGhpcyBzYXZlcyBJL08pCisgICAgICBBY3RpdmU6IE1lbW9yeSB0aGF0IGhhcyBiZWVuIHVzZWQgbW9yZSByZWNlbnRseSBhbmQgdXN1YWxseSBub3QKKyAgICAgICAgICAgICAgcmVjbGFpbWVkIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KKyAgICBJbmFjdGl2ZTogTWVtb3J5IHdoaWNoIGhhcyBiZWVuIGxlc3MgcmVjZW50bHkgdXNlZC4gIEl0IGlzIG1vcmUKKyAgICAgICAgICAgICAgZWxpZ2libGUgdG8gYmUgcmVjbGFpbWVkIGZvciBvdGhlciBwdXJwb3NlcworICAgSGlnaFRvdGFsOgorICAgIEhpZ2hGcmVlOiBIaWdobWVtIGlzIGFsbCBtZW1vcnkgYWJvdmUgfjg2ME1CIG9mIHBoeXNpY2FsIG1lbW9yeQorICAgICAgICAgICAgICBIaWdobWVtIGFyZWFzIGFyZSBmb3IgdXNlIGJ5IHVzZXJzcGFjZSBwcm9ncmFtcywgb3IKKyAgICAgICAgICAgICAgZm9yIHRoZSBwYWdlY2FjaGUuICBUaGUga2VybmVsIG11c3QgdXNlIHRyaWNrcyB0byBhY2Nlc3MKKyAgICAgICAgICAgICAgdGhpcyBtZW1vcnksIG1ha2luZyBpdCBzbG93ZXIgdG8gYWNjZXNzIHRoYW4gbG93bWVtLgorICAgIExvd1RvdGFsOgorICAgICBMb3dGcmVlOiBMb3dtZW0gaXMgbWVtb3J5IHdoaWNoIGNhbiBiZSB1c2VkIGZvciBldmVyeXRoaW5nIHRoYXQKKyAgICAgICAgICAgICAgaGlnaG1lbSBjYW4gYmUgdXNlZCBmb3IsIGJ1dCBpdCBpcyBhbHNvIGF2YWlsYmxlIGZvciB0aGUKKyAgICAgICAgICAgICAga2VybmVsJ3MgdXNlIGZvciBpdHMgb3duIGRhdGEgc3RydWN0dXJlcy4gIEFtb25nIG1hbnkKKyAgICAgICAgICAgICAgb3RoZXIgdGhpbmdzLCBpdCBpcyB3aGVyZSBldmVyeXRoaW5nIGZyb20gdGhlIFNsYWIgaXMKKyAgICAgICAgICAgICAgYWxsb2NhdGVkLiAgQmFkIHRoaW5ncyBoYXBwZW4gd2hlbiB5b3UncmUgb3V0IG9mIGxvd21lbS4KKyAgIFN3YXBUb3RhbDogdG90YWwgYW1vdW50IG9mIHN3YXAgc3BhY2UgYXZhaWxhYmxlCisgICAgU3dhcEZyZWU6IE1lbW9yeSB3aGljaCBoYXMgYmVlbiBldmljdGVkIGZyb20gUkFNLCBhbmQgaXMgdGVtcG9yYXJpbHkKKyAgICAgICAgICAgICAgb24gdGhlIGRpc2sKKyAgICAgICBEaXJ0eTogTWVtb3J5IHdoaWNoIGlzIHdhaXRpbmcgdG8gZ2V0IHdyaXR0ZW4gYmFjayB0byB0aGUgZGlzaworICAgV3JpdGViYWNrOiBNZW1vcnkgd2hpY2ggaXMgYWN0aXZlbHkgYmVpbmcgd3JpdHRlbiBiYWNrIHRvIHRoZSBkaXNrCisgICAgICBNYXBwZWQ6IGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBtbWFwZWQsIHN1Y2ggYXMgbGlicmFyaWVzCisgICAgICAgICAgICAgIFNsYWI6IGluLWtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgY2FjaGUKKyBDb21taXRMaW1pdDogQmFzZWQgb24gdGhlIG92ZXJjb21taXQgcmF0aW8gKCd2bS5vdmVyY29tbWl0X3JhdGlvJyksCisgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiAgbWVtb3J5IGN1cnJlbnRseSBhdmFpbGFibGUgdG8KKyAgICAgICAgICAgICAgYmUgYWxsb2NhdGVkIG9uIHRoZSBzeXN0ZW0uIFRoaXMgbGltaXQgaXMgb25seSBhZGhlcmVkIHRvCisgICAgICAgICAgICAgIGlmIHN0cmljdCBvdmVyY29tbWl0IGFjY291bnRpbmcgaXMgZW5hYmxlZCAobW9kZSAyIGluCisgICAgICAgICAgICAgICd2bS5vdmVyY29tbWl0X21lbW9yeScpLgorICAgICAgICAgICAgICBUaGUgQ29tbWl0TGltaXQgaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKKyAgICAgICAgICAgICAgQ29tbWl0TGltaXQgPSAoJ3ZtLm92ZXJjb21taXRfcmF0aW8nICogUGh5c2ljYWwgUkFNKSArIFN3YXAKKyAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG9uIGEgc3lzdGVtIHdpdGggMUcgb2YgcGh5c2ljYWwgUkFNIGFuZCA3RworICAgICAgICAgICAgICBvZiBzd2FwIHdpdGggYSBgdm0ub3ZlcmNvbW1pdF9yYXRpb2Agb2YgMzAgaXQgd291bGQKKyAgICAgICAgICAgICAgeWllbGQgYSBDb21taXRMaW1pdCBvZiA3LjNHLgorICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIG1lbW9yeSBvdmVyY29tbWl0IGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgaW4gdm0vb3ZlcmNvbW1pdC1hY2NvdW50aW5nLgorQ29tbWl0dGVkX0FTOiBUaGUgYW1vdW50IG9mIG1lbW9yeSBwcmVzZW50bHkgYWxsb2NhdGVkIG9uIHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgIFRoZSBjb21taXR0ZWQgbWVtb3J5IGlzIGEgc3VtIG9mIGFsbCBvZiB0aGUgbWVtb3J5IHdoaWNoCisgICAgICAgICAgICAgIGhhcyBiZWVuIGFsbG9jYXRlZCBieSBwcm9jZXNzZXMsIGV2ZW4gaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgICAgICAgICAgICJ1c2VkIiBieSB0aGVtIGFzIG9mIHlldC4gQSBwcm9jZXNzIHdoaWNoIG1hbGxvYygpJ3MgMUcKKyAgICAgICAgICAgICAgb2YgbWVtb3J5LCBidXQgb25seSB0b3VjaGVzIDMwME0gb2YgaXQgd2lsbCBvbmx5IHNob3cgdXAKKyAgICAgICAgICAgICAgYXMgdXNpbmcgMzAwTSBvZiBtZW1vcnkgZXZlbiBpZiBpdCBoYXMgdGhlIGFkZHJlc3Mgc3BhY2UKKyAgICAgICAgICAgICAgYWxsb2NhdGVkIGZvciB0aGUgZW50aXJlIDFHLiBUaGlzIDFHIGlzIG1lbW9yeSB3aGljaCBoYXMKKyAgICAgICAgICAgICAgYmVlbiAiY29tbWl0dGVkIiB0byBieSB0aGUgVk0gYW5kIGNhbiBiZSB1c2VkIGF0IGFueSB0aW1lCisgICAgICAgICAgICAgIGJ5IHRoZSBhbGxvY2F0aW5nIGFwcGxpY2F0aW9uLiBXaXRoIHN0cmljdCBvdmVyY29tbWl0CisgICAgICAgICAgICAgIGVuYWJsZWQgb24gdGhlIHN5c3RlbSAobW9kZSAyIGluICd2bS5vdmVyY29tbWl0X21lbW9yeScpLAorICAgICAgICAgICAgICBhbGxvY2F0aW9ucyB3aGljaCB3b3VsZCBleGNlZWQgdGhlIENvbW1pdExpbWl0IChkZXRhaWxlZAorICAgICAgICAgICAgICBhYm92ZSkgd2lsbCBub3QgYmUgcGVybWl0dGVkLiBUaGlzIGlzIHVzZWZ1bCBpZiBvbmUgbmVlZHMKKyAgICAgICAgICAgICAgdG8gZ3VhcmFudGVlIHRoYXQgcHJvY2Vzc2VzIHdpbGwgbm90IGZhaWwgZHVlIHRvIGxhY2sgb2YKKyAgICAgICAgICAgICAgbWVtb3J5IG9uY2UgdGhhdCBtZW1vcnkgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAgUGFnZVRhYmxlczogYW1vdW50IG9mIG1lbW9yeSBkZWRpY2F0ZWQgdG8gdGhlIGxvd2VzdCBsZXZlbCBvZiBwYWdlCisgICAgICAgICAgICAgIHRhYmxlcy4KK1ZtYWxsb2NUb3RhbDogdG90YWwgc2l6ZSBvZiB2bWFsbG9jIG1lbW9yeSBhcmVhCisgVm1hbGxvY1VzZWQ6IGFtb3VudCBvZiB2bWFsbG9jIGFyZWEgd2hpY2ggaXMgdXNlZAorVm1hbGxvY0NodW5rOiBsYXJnZXN0IGNvbnRpZ2lvdXMgYmxvY2sgb2Ygdm1hbGxvYyBhcmVhIHdoaWNoIGlzIGZyZWUKKworCisxLjMgSURFIGRldmljZXMgaW4gL3Byb2MvaWRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdWJkaXJlY3RvcnkgL3Byb2MvaWRlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFsbCBJREUgZGV2aWNlcyBvZiB3aGljaAordGhlIGtlcm5lbCAgaXMgIGF3YXJlLiAgVGhlcmUgaXMgb25lIHN1YmRpcmVjdG9yeSBmb3IgZWFjaCBJREUgY29udHJvbGxlciwgdGhlCitmaWxlIGRyaXZlcnMgIGFuZCBhIGxpbmsgZm9yIGVhY2ggSURFIGRldmljZSwgcG9pbnRpbmcgdG8gdGhlIGRldmljZSBkaXJlY3RvcnkKK2luIHRoZSBjb250cm9sbGVyIHNwZWNpZmljIHN1YnRyZWUuCisKK1RoZSBmaWxlICBkcml2ZXJzICBjb250YWlucyBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcml2ZXJzIHVzZWQgZm9yIHRoZQorSURFIGRldmljZXM6CisKKyAgPiBjYXQgL3Byb2MvaWRlL2RyaXZlcnMKKyAgaWRlLWNkcm9tIHZlcnNpb24gNC41MworICBpZGUtZGlzayB2ZXJzaW9uIDEuMDgKKworTW9yZSBkZXRhaWxlZCAgaW5mb3JtYXRpb24gIGNhbiAgYmUgIGZvdW5kICBpbiAgdGhlICBjb250cm9sbGVyICBzcGVjaWZpYworc3ViZGlyZWN0b3JpZXMuIFRoZXNlICBhcmUgIG5hbWVkICBpZGUwLCAgaWRlMSAgYW5kICBzbyAgb24uICBFYWNoICBvZiAgdGhlc2UKK2RpcmVjdG9yaWVzIGNvbnRhaW5zIHRoZSBmaWxlcyBzaG93biBpbiB0YWJsZSAxLTQuCisKKworVGFibGUgMS00OiBJREUgY29udHJvbGxlciBpbmZvIGluICAvcHJvYy9pZGUvaWRlPyAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGNoYW5uZWwgSURFIGNoYW5uZWwgKDAgb3IgMSkgICAgICAgICAgICAgICAgICAgIAorIGNvbmZpZyAgQ29uZmlndXJhdGlvbiAob25seSBmb3IgUENJL0lERSBicmlkZ2UpIAorIG1hdGUgICAgTWF0ZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG1vZGVsICAgVHlwZS9DaGlwc2V0IG9mIElERSBjb250cm9sbGVyICAgICAgICAgIAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0VhY2ggZGV2aWNlICBjb25uZWN0ZWQgIHRvICBhICBjb250cm9sbGVyICBoYXMgIGEgc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluIHRoZQorY29udHJvbGxlcnMgZGlyZWN0b3J5LiAgVGhlICBmaWxlcyAgbGlzdGVkIGluIHRhYmxlIDEtNSBhcmUgY29udGFpbmVkIGluIHRoZXNlCitkaXJlY3Rvcmllcy4KKworCitUYWJsZSAxLTU6IElERSBkZXZpY2UgaW5mb3JtYXRpb24gCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBjYWNoZSAgICAgICAgICAgIFRoZSBjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBjYXBhY2l0eSAgICAgICAgIENhcGFjaXR5IG9mIHRoZSBtZWRpdW0gKGluIDUxMkJ5dGUgYmxvY2tzKSAKKyBkcml2ZXIgICAgICAgICAgIGRyaXZlciBhbmQgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAKKyBnZW9tZXRyeSAgICAgICAgIHBoeXNpY2FsIGFuZCBsb2dpY2FsIGdlb21ldHJ5ICAgICAgICAgICAgICAKKyBpZGVudGlmeSAgICAgICAgIGRldmljZSBpZGVudGlmeSBibG9jayAgICAgICAgICAgICAgICAgICAgICAKKyBtZWRpYSAgICAgICAgICAgIG1lZGlhIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBtb2RlbCAgICAgICAgICAgIGRldmljZSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzZXR0aW5ncyAgICAgICAgIGRldmljZSBzZXR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBzbWFydF90aHJlc2hvbGRzIElERSBkaXNrIG1hbmFnZW1lbnQgdGhyZXNob2xkcyAgICAgICAgICAgICAKKyBzbWFydF92YWx1ZXMgICAgIElERSBkaXNrIG1hbmFnZW1lbnQgdmFsdWVzICAgICAgICAgICAgICAgICAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUaGUgbW9zdCAgaW50ZXJlc3RpbmcgIGZpbGUgaXMgc2V0dGluZ3MuIFRoaXMgZmlsZSBjb250YWlucyBhIG5pY2Ugb3ZlcnZpZXcgb2YKK3RoZSBkcml2ZSBwYXJhbWV0ZXJzOgorCisgICMgY2F0IC9wcm9jL2lkZS9pZGUwL2hkYS9zZXR0aW5ncyAKKyAgbmFtZSAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgICAgIG1pbiAgICAgICAgICAgICBtYXggICAgICAgICAgICAgbW9kZSAKKyAgLS0tLSAgICAgICAgICAgICAgICAgICAgLS0tLS0gICAgICAgICAgIC0tLSAgICAgICAgICAgICAtLS0gICAgICAgICAgICAgLS0tLSAKKyAgYmlvc19jeWwgICAgICAgICAgICAgICAgNTI2ICAgICAgICAgICAgIDAgICAgICAgICAgICAgICA2NTUzNSAgICAgICAgICAgcncgCisgIGJpb3NfaGVhZCAgICAgICAgICAgICAgIDI1NSAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMjU1ICAgICAgICAgICAgIHJ3IAorICBiaW9zX3NlY3QgICAgICAgICAgICAgICA2MyAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDYzICAgICAgICAgICAgICBydyAKKyAgYnJlYWRhX3JlYWRhaGVhZCAgICAgICAgNCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAxMjcgICAgICAgICAgICAgcncgCisgIGJzd2FwICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIHIgCisgIGZpbGVfcmVhZGFoZWFkICAgICAgICAgIDcyICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMjA5NzE1MSAgICAgICAgIHJ3IAorICBpb18zMmJpdCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDMgICAgICAgICAgICAgICBydyAKKyAga2VlcHNldHRpbmdzICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgcncgCisgIG1heF9rYl9wZXJfcmVxdWVzdCAgICAgIDEyMiAgICAgICAgICAgICAxICAgICAgICAgICAgICAgMTI3ICAgICAgICAgICAgIHJ3IAorICBtdWx0Y291bnQgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDggICAgICAgICAgICAgICBydyAKKyAgbmljZTEgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgcncgCisgIG5vd2VyciAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIHJ3IAorICBwaW9fbW9kZSAgICAgICAgICAgICAgICB3cml0ZS1vbmx5ICAgICAgMCAgICAgICAgICAgICAgIDI1NSAgICAgICAgICAgICB3IAorICBzbG93ICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBydyAKKyAgdW5tYXNraXJxICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgcncgCisgIHVzaW5nX2RtYSAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIHJ3IAorCisKKzEuNCBOZXR3b3JraW5nIGluZm8gaW4gL3Byb2MvbmV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3ViZGlyZWN0b3J5ICAvcHJvYy9uZXQgIGZvbGxvd3MgIHRoZSAgdXN1YWwgIHBhdHRlcm4uIFRhYmxlIDEtNiBzaG93cyB0aGUKK2FkZGl0aW9uYWwgdmFsdWVzICB5b3UgIGdldCAgZm9yICBJUCAgdmVyc2lvbiA2IGlmIHlvdSBjb25maWd1cmUgdGhlIGtlcm5lbCB0bworc3VwcG9ydCB0aGlzLiBUYWJsZSAxLTcgbGlzdHMgdGhlIGZpbGVzIGFuZCB0aGVpciBtZWFuaW5nLgorCisKK1RhYmxlIDEtNjogSVB2NiBpbmZvIGluIC9wcm9jL25ldCAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdWRwNiAgICAgICBVRFAgc29ja2V0cyAoSVB2NikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyB0Y3A2ICAgICAgIFRDUCBzb2NrZXRzIChJUHY2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHJhdzYgICAgICAgUmF3IGRldmljZSBzdGF0aXN0aWNzIChJUHY2KSAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaWdtcDYgICAgICBJUCBtdWx0aWNhc3QgYWRkcmVzc2VzLCB3aGljaCB0aGlzIGhvc3Qgam9pbmVkIChJUHY2KSAKKyBpZl9pbmV0NiAgIExpc3Qgb2YgSVB2NiBpbnRlcmZhY2UgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgIAorIGlwdjZfcm91dGUgS2VybmVsIHJvdXRpbmcgdGFibGUgZm9yIElQdjYgICAgICAgICAgICAgICAgICAgICAgICAgCisgcnQ2X3N0YXRzICBHbG9iYWwgSVB2NiByb3V0aW5nIHRhYmxlcyBzdGF0aXN0aWNzICAgICAgICAgICAgICAgICAKKyBzb2Nrc3RhdDYgIFNvY2tldCBzdGF0aXN0aWNzIChJUHY2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHNubXA2ICAgICAgU25tcCBkYXRhIChJUHY2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworCitUYWJsZSAxLTc6IE5ldHdvcmsgaW5mbyBpbiAvcHJvYy9uZXQgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBGaWxlICAgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBhcnAgICAgICAgICAgIEtlcm5lbCAgQVJQIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBkZXYgICAgICAgICAgIG5ldHdvcmsgZGV2aWNlcyB3aXRoIHN0YXRpc3RpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBkZXZfbWNhc3QgICAgIHRoZSBMYXllcjIgbXVsdGljYXN0IGdyb3VwcyBhIGRldmljZSBpcyBsaXN0ZW5pbmcgdG9vCisgICAgICAgICAgICAgICAoaW50ZXJmYWNlIGluZGV4LCBsYWJlbCwgbnVtYmVyIG9mIHJlZmVyZW5jZXMsIG51bWJlciBvZiBib3VuZAorICAgICAgICAgICAgICAgYWRkcmVzc2VzKS4gCisgZGV2X3N0YXQgICAgICBuZXR3b3JrIGRldmljZSBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaXBfZndjaGFpbnMgICBGaXJld2FsbCBjaGFpbiBsaW5rYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaXBfZnduYW1lcyAgICBGaXJld2FsbCBjaGFpbiBuYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaXBfbWFzcSAgICAgICBEaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbWFzcXVlcmFkaW5nIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgCisgaXBfbWFzcXVlcmFkZSBNYWpvciBtYXNxdWVyYWRpbmcgdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbmV0c3RhdCAgICAgICBOZXR3b3JrIHN0YXRpc3RpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgcmF3ICAgICAgICAgICByYXcgZGV2aWNlIHN0YXRpc3RpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgcm91dGUgICAgICAgICBLZXJuZWwgcm91dGluZyB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgcnBjICAgICAgICAgICBEaXJlY3RvcnkgY29udGFpbmluZyBycGMgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgcnRfY2FjaGUgICAgICBSb3V0aW5nIGNhY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc25tcCAgICAgICAgICBTTk1QIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgc29ja3N0YXQgICAgICBTb2NrZXQgc3RhdGlzdGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdGNwICAgICAgICAgICBUQ1AgIHNvY2tldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdHJfcmlmICAgICAgICBUb2tlbiByaW5nIFJJRiByb3V0aW5nIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdWRwICAgICAgICAgICBVRFAgc29ja2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgdW5peCAgICAgICAgICBVTklYIGRvbWFpbiBzb2NrZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgd2lyZWxlc3MgICAgICBXaXJlbGVzcyBpbnRlcmZhY2UgZGF0YSAoV2F2ZWxhbiBldGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaWdtcCAgICAgICAgICBJUCBtdWx0aWNhc3QgYWRkcmVzc2VzLCB3aGljaCB0aGlzIGhvc3Qgam9pbmVkICAgICAgICAgICAgICAgICAgCisgcHNjaGVkICAgICAgICBHbG9iYWwgcGFja2V0IHNjaGVkdWxlciBwYXJhbWV0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgbmV0bGluayAgICAgICBMaXN0IG9mIFBGX05FVExJTksgc29ja2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaXBfbXJfdmlmcyAgICBMaXN0IG9mIG11bHRpY2FzdCB2aXJ0dWFsIGludGVyZmFjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgaXBfbXJfY2FjaGUgICBMaXN0IG9mIG11bHRpY2FzdCByb3V0aW5nIGNhY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWW91IGNhbiAgdXNlICB0aGlzICBpbmZvcm1hdGlvbiAgdG8gc2VlIHdoaWNoIG5ldHdvcmsgZGV2aWNlcyBhcmUgYXZhaWxhYmxlIGluCit5b3VyIHN5c3RlbSBhbmQgaG93IG11Y2ggdHJhZmZpYyB3YXMgcm91dGVkIG92ZXIgdGhvc2UgZGV2aWNlczoKKworICA+IGNhdCAvcHJvYy9uZXQvZGV2IAorICBJbnRlci18UmVjZWl2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxbLi4uIAorICAgZmFjZSB8Ynl0ZXMgICAgcGFja2V0cyBlcnJzIGRyb3AgZmlmbyBmcmFtZSBjb21wcmVzc2VkIG11bHRpY2FzdHxbLi4uIAorICAgICAgbG86ICA5MDgxODggICA1NTk2ICAgICAwICAgIDAgICAgMCAgICAgMCAgICAgICAgICAwICAgICAgICAgMCBbLi4uICAgICAgICAgCisgICAgcHBwMDoxNTQ3NTE0MCAgMjA3MjEgICA0MTAgICAgMCAgICAwICAgNDEwICAgICAgICAgIDAgICAgICAgICAwIFsuLi4gIAorICAgIGV0aDA6ICA2MTQ1MzAgICA3MDg1ICAgICAwICAgIDAgICAgMCAgICAgMCAgICAgICAgICAwICAgICAgICAgMSBbLi4uIAorICAgCisgIC4uLl0gVHJhbnNtaXQgCisgIC4uLl0gYnl0ZXMgICAgcGFja2V0cyBlcnJzIGRyb3AgZmlmbyBjb2xscyBjYXJyaWVyIGNvbXByZXNzZWQgCisgIC4uLl0gIDkwODE4OCAgICAgNTU5NiAgICAwICAgIDAgICAgMCAgICAgMCAgICAgICAwICAgICAgICAgIDAgCisgIC4uLl0gMTM3NTEwMyAgICAxNzQwNSAgICAwICAgIDAgICAgMCAgICAgMCAgICAgICAwICAgICAgICAgIDAgCisgIC4uLl0gMTcwMzk4MSAgICAgNTUzNSAgICAwICAgIDAgICAgMCAgICAgMyAgICAgICAwICAgICAgICAgIDAgCisKK0luIGFkZGl0aW9uLCBlYWNoIENoYW5uZWwgQm9uZCBpbnRlcmZhY2UgaGFzIGl0J3Mgb3duIGRpcmVjdG9yeS4gIEZvcgorZXhhbXBsZSwgdGhlIGJvbmQwIGRldmljZSB3aWxsIGhhdmUgYSBkaXJlY3RvcnkgY2FsbGVkIC9wcm9jL25ldC9ib25kMC8uCitJdCB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gdGhhdCBpcyBzcGVjaWZpYyB0byB0aGF0IGJvbmQsIHN1Y2ggYXMgdGhlCitjdXJyZW50IHNsYXZlcyBvZiB0aGUgYm9uZCwgdGhlIGxpbmsgc3RhdHVzIG9mIHRoZSBzbGF2ZXMsIGFuZCBob3cKK21hbnkgdGltZXMgdGhlIHNsYXZlcyBsaW5rIGhhcyBmYWlsZWQuCisKKzEuNSBTQ1NJIGluZm8KKy0tLS0tLS0tLS0tLS0KKworSWYgeW91ICBoYXZlICBhICBTQ1NJICBob3N0IGFkYXB0ZXIgaW4geW91ciBzeXN0ZW0sIHlvdSdsbCBmaW5kIGEgc3ViZGlyZWN0b3J5CituYW1lZCBhZnRlciAgdGhlIGRyaXZlciBmb3IgdGhpcyBhZGFwdGVyIGluIC9wcm9jL3Njc2kuIFlvdSdsbCBhbHNvIHNlZSBhIGxpc3QKK29mIGFsbCByZWNvZ25pemVkIFNDU0kgZGV2aWNlcyBpbiAvcHJvYy9zY3NpOgorCisgID5jYXQgL3Byb2Mvc2NzaS9zY3NpIAorICBBdHRhY2hlZCBkZXZpY2VzOiAKKyAgSG9zdDogc2NzaTAgQ2hhbm5lbDogMDAgSWQ6IDAwIEx1bjogMDAgCisgICAgVmVuZG9yOiBJQk0gICAgICBNb2RlbDogREdIUzA5VSAgICAgICAgICBSZXY6IDAzRTAgCisgICAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAzIAorICBIb3N0OiBzY3NpMCBDaGFubmVsOiAwMCBJZDogMDYgTHVuOiAwMCAKKyAgICBWZW5kb3I6IFBJT05FRVIgIE1vZGVsOiBDRC1ST00gRFItVTA2UyAgIFJldjogMS4wNCAKKyAgICBUeXBlOiAgIENELVJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIgCisKKworVGhlIGRpcmVjdG9yeSAgbmFtZWQgIGFmdGVyICB0aGUgZHJpdmVyIGhhcyBvbmUgZmlsZSBmb3IgZWFjaCBhZGFwdGVyIGZvdW5kIGluCit0aGUgc3lzdGVtLiAgVGhlc2UgIGZpbGVzICBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250cm9sbGVyLCBpbmNsdWRpbmcKK3RoZSB1c2VkICBJUlEgIGFuZCAgdGhlICBJTyAgYWRkcmVzcyByYW5nZS4gVGhlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBzaG93biBpcworZGVwZW5kZW50IG9uICB0aGUgYWRhcHRlciB5b3UgdXNlLiBUaGUgZXhhbXBsZSBzaG93cyB0aGUgb3V0cHV0IGZvciBhbiBBZGFwdGVjCitBSEEtMjk0MCBTQ1NJIGFkYXB0ZXI6CisKKyAgPiBjYXQgL3Byb2Mvc2NzaS9haWM3eHh4LzAgCisgICAKKyAgQWRhcHRlYyBBSUM3eHh4IGRyaXZlciB2ZXJzaW9uOiA1LjEuMTkvMy4yLjQgCisgIENvbXBpbGUgT3B0aW9uczogCisgICAgVENRIEVuYWJsZWQgQnkgRGVmYXVsdCA6IERpc2FibGVkIAorICAgIEFJQzdYWFhfUFJPQ19TVEFUUyAgICAgOiBEaXNhYmxlZCAKKyAgICBBSUM3WFhYX1JFU0VUX0RFTEFZICAgIDogNSAKKyAgQWRhcHRlciBDb25maWd1cmF0aW9uOiAKKyAgICAgICAgICAgICBTQ1NJIEFkYXB0ZXI6IEFkYXB0ZWMgQUhBLTI5NFggVWx0cmEgU0NTSSBob3N0IGFkYXB0ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhIFdpZGUgQ29udHJvbGxlciAKKyAgICAgIFBDSSBNTUFQZWQgSS9PIEJhc2U6IDB4ZWIwMDEwMDAgCisgICBBZGFwdGVyIFNFRVBST00gQ29uZmlnOiBTRUVQUk9NIGZvdW5kIGFuZCB1c2VkLiAKKyAgICAgICAgQWRhcHRlYyBTQ1NJIEJJT1M6IEVuYWJsZWQgCisgICAgICAgICAgICAgICAgICAgICAgSVJROiAxMCAKKyAgICAgICAgICAgICAgICAgICAgIFNDQnM6IEFjdGl2ZSAwLCBNYXggQWN0aXZlIDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVkIDE1LCBIVyAxNiwgUGFnZSAyNTUgCisgICAgICAgICAgICAgICBJbnRlcnJ1cHRzOiAxNjAzMjggCisgICAgICAgIEJJT1MgQ29udHJvbCBXb3JkOiAweDE4YjYgCisgICAgIEFkYXB0ZXIgQ29udHJvbCBXb3JkOiAweDAwNWIgCisgICAgIEV4dGVuZGVkIFRyYW5zbGF0aW9uOiBFbmFibGVkIAorICBEaXNjb25uZWN0IEVuYWJsZSBGbGFnczogMHhmZmZmIAorICAgICAgIFVsdHJhIEVuYWJsZSBGbGFnczogMHgwMDAxIAorICAgVGFnIFF1ZXVlIEVuYWJsZSBGbGFnczogMHgwMDAwIAorICBPcmRlcmVkIFF1ZXVlIFRhZyBGbGFnczogMHgwMDAwIAorICBEZWZhdWx0IFRhZyBRdWV1ZSBEZXB0aDogOCAKKyAgICAgIFRhZ2dlZCBRdWV1ZSBCeSBEZXZpY2UgYXJyYXkgZm9yIGFpYzd4eHggaG9zdCBpbnN0YW5jZSAwOiAKKyAgICAgICAgezI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NX0gCisgICAgICBBY3R1YWwgcXVldWUgZGVwdGggcGVyIGRldmljZSBmb3IgYWljN3h4eCBob3N0IGluc3RhbmNlIDA6IAorICAgICAgICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMX0gCisgIFN0YXRpc3RpY3M6IAorICAoc2NzaTA6MDowOjApIAorICAgIERldmljZSB1c2luZyBXaWRlL1N5bmMgdHJhbnNmZXJzIGF0IDQwLjAgTUJ5dGUvc2VjLCBvZmZzZXQgOCAKKyAgICBUcmFuc2luZm8gc2V0dGluZ3M6IGN1cnJlbnQoMTIvOC8xLzApLCBnb2FsKDEyLzgvMS8wKSwgdXNlcigxMi8xNS8xLzApIAorICAgIFRvdGFsIHRyYW5zZmVycyAxNjAxNTEgKDc0NTc3IHJlYWRzIGFuZCA4NTU3NCB3cml0ZXMpIAorICAoc2NzaTA6MDo2OjApIAorICAgIERldmljZSB1c2luZyBOYXJyb3cvU3luYyB0cmFuc2ZlcnMgYXQgNS4wIE1CeXRlL3NlYywgb2Zmc2V0IDE1IAorICAgIFRyYW5zaW5mbyBzZXR0aW5nczogY3VycmVudCg1MC8xNS8wLzApLCBnb2FsKDUwLzE1LzAvMCksIHVzZXIoNTAvMTUvMC8wKSAKKyAgICBUb3RhbCB0cmFuc2ZlcnMgMCAoMCByZWFkcyBhbmQgMCB3cml0ZXMpIAorCisKKzEuNiBQYXJhbGxlbCBwb3J0IGluZm8gaW4gL3Byb2MvcGFycG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaXJlY3RvcnkgIC9wcm9jL3BhcnBvcnQgIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbGxlbCBwb3J0cyBvZgoreW91ciBzeXN0ZW0uICBJdCAgaGFzICBvbmUgIHN1YmRpcmVjdG9yeSAgZm9yICBlYWNoIHBvcnQsIG5hbWVkIGFmdGVyIHRoZSBwb3J0CitudW1iZXIgKDAsMSwyLC4uLikuCisKK1RoZXNlIGRpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGZvdXIgZmlsZXMgc2hvd24gaW4gVGFibGUgMS04LgorCisKK1RhYmxlIDEtODogRmlsZXMgaW4gL3Byb2MvcGFycG9ydCAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGF1dG9wcm9iZSBBbnkgSUVFRS0xMjg0IGRldmljZSBJRCBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIGFjcXVpcmVkLiAgICAgICAgIAorIGRldmljZXMgICBsaXN0IG9mIHRoZSBkZXZpY2UgZHJpdmVycyB1c2luZyB0aGF0IHBvcnQuIEEgKyB3aWxsIGFwcGVhciBieSB0aGUKKyAgICAgICAgICAgbmFtZSBvZiB0aGUgZGV2aWNlIGN1cnJlbnRseSB1c2luZyB0aGUgcG9ydCAoaXQgbWlnaHQgbm90IGFwcGVhcgorICAgICAgICAgICBhZ2FpbnN0IGFueSkuIAorIGhhcmR3YXJlICBQYXJhbGxlbCBwb3J0J3MgYmFzZSBhZGRyZXNzLCBJUlEgbGluZSBhbmQgRE1BIGNoYW5uZWwuICAgICAgICAgICAgIAorIGlycSAgICAgICBJUlEgdGhhdCBwYXJwb3J0IGlzIHVzaW5nIGZvciB0aGF0IHBvcnQuIFRoaXMgaXMgaW4gYSBzZXBhcmF0ZQorICAgICAgICAgICBmaWxlIHRvIGFsbG93IHlvdSB0byBhbHRlciBpdCBieSB3cml0aW5nIGEgbmV3IHZhbHVlIGluIChJUlEKKyAgICAgICAgICAgbnVtYmVyIG9yIG5vbmUpLiAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisxLjcgVFRZIGluZm8gaW4gL3Byb2MvdHR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luZm9ybWF0aW9uIGFib3V0ICB0aGUgIGF2YWlsYWJsZSAgYW5kIGFjdHVhbGx5IHVzZWQgdHR5J3MgY2FuIGJlIGZvdW5kIGluIHRoZQorZGlyZWN0b3J5IC9wcm9jL3R0eS5Zb3UnbGwgIGZpbmQgIGVudHJpZXMgIGZvciBkcml2ZXJzIGFuZCBsaW5lIGRpc2NpcGxpbmVzIGluCit0aGlzIGRpcmVjdG9yeSwgYXMgc2hvd24gaW4gVGFibGUgMS05LgorCisKK1RhYmxlIDEtOTogRmlsZXMgaW4gL3Byb2MvdHR5IAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRmlsZSAgICAgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGRyaXZlcnMgICAgICAgbGlzdCBvZiBkcml2ZXJzIGFuZCB0aGVpciB1c2FnZSAgICAgICAgICAgICAgICAKKyBsZGlzY3MgICAgICAgIHJlZ2lzdGVyZWQgbGluZSBkaXNjaXBsaW5lcyAgICAgICAgICAgICAgICAgICAgCisgZHJpdmVyL3NlcmlhbCB1c2FnZSBzdGF0aXN0aWMgYW5kIHN0YXR1cyBvZiBzaW5nbGUgdHR5IGxpbmVzIAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RvIHNlZSAgd2hpY2ggIHR0eSdzICBhcmUgIGN1cnJlbnRseSBpbiB1c2UsIHlvdSBjYW4gc2ltcGx5IGxvb2sgaW50byB0aGUgZmlsZQorL3Byb2MvdHR5L2RyaXZlcnM6CisKKyAgPiBjYXQgL3Byb2MvdHR5L2RyaXZlcnMgCisgIHB0eV9zbGF2ZSAgICAgICAgICAgIC9kZXYvcHRzICAgICAgMTM2ICAgMC0yNTUgcHR5OnNsYXZlIAorICBwdHlfbWFzdGVyICAgICAgICAgICAvZGV2L3B0bSAgICAgIDEyOCAgIDAtMjU1IHB0eTptYXN0ZXIgCisgIHB0eV9zbGF2ZSAgICAgICAgICAgIC9kZXYvdHR5cCAgICAgICAzICAgMC0yNTUgcHR5OnNsYXZlIAorICBwdHlfbWFzdGVyICAgICAgICAgICAvZGV2L3B0eSAgICAgICAgMiAgIDAtMjU1IHB0eTptYXN0ZXIgCisgIHNlcmlhbCAgICAgICAgICAgICAgIC9kZXYvY3VhICAgICAgICA1ICAgNjQtNjcgc2VyaWFsOmNhbGxvdXQgCisgIHNlcmlhbCAgICAgICAgICAgICAgIC9kZXYvdHR5UyAgICAgICA0ICAgNjQtNjcgc2VyaWFsIAorICAvZGV2L3R0eTAgICAgICAgICAgICAvZGV2L3R0eTAgICAgICAgNCAgICAgICAwIHN5c3RlbTp2dG1hc3RlciAKKyAgL2Rldi9wdG14ICAgICAgICAgICAgL2Rldi9wdG14ICAgICAgIDUgICAgICAgMiBzeXN0ZW0gCisgIC9kZXYvY29uc29sZSAgICAgICAgIC9kZXYvY29uc29sZSAgICA1ICAgICAgIDEgc3lzdGVtOmNvbnNvbGUgCisgIC9kZXYvdHR5ICAgICAgICAgICAgIC9kZXYvdHR5ICAgICAgICA1ICAgICAgIDAgc3lzdGVtOi9kZXYvdHR5IAorICB1bmtub3duICAgICAgICAgICAgICAvZGV2L3R0eSAgICAgICAgNCAgICAxLTYzIGNvbnNvbGUgCisKKworMS44IE1pc2NlbGxhbmVvdXMga2VybmVsIHN0YXRpc3RpY3MgaW4gL3Byb2Mvc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWYXJpb3VzIHBpZWNlcyAgIG9mICBpbmZvcm1hdGlvbiBhYm91dCAga2VybmVsIGFjdGl2aXR5ICBhcmUgIGF2YWlsYWJsZSBpbiB0aGUKKy9wcm9jL3N0YXQgZmlsZS4gIEFsbCAgb2YgIHRoZSBudW1iZXJzIHJlcG9ydGVkICBpbiAgdGhpcyBmaWxlIGFyZSAgYWdncmVnYXRlcworc2luY2UgdGhlIHN5c3RlbSBmaXJzdCBib290ZWQuICBGb3IgYSBxdWljayBsb29rLCBzaW1wbHkgY2F0IHRoZSBmaWxlOgorCisgID4gY2F0IC9wcm9jL3N0YXQKKyAgY3B1ICAyMjU1IDM0IDIyOTAgMjI2MjU1NjMgNjI5MCAxMjcgNDU2CisgIGNwdTAgMTEzMiAzNCAxNDQxIDExMzExNzE4IDM2NzUgMTI3IDQzOAorICBjcHUxIDExMjMgMCA4NDkgMTEzMTM4NDUgMjYxNCAwIDE4CisgIGludHIgMTE0OTMwNTQ4IDExMzE5OTc4OCAzIDAgNSAyNjMgMCA0IFsuLi4gbG90cyBtb3JlIG51bWJlcnMgLi4uXQorICBjdHh0IDE5OTA0NzMKKyAgYnRpbWUgMTA2MjE5MTM3NgorICBwcm9jZXNzZXMgMjkxNQorICBwcm9jc19ydW5uaW5nIDEKKyAgcHJvY3NfYmxvY2tlZCAwCisKK1RoZSB2ZXJ5IGZpcnN0ICAiY3B1IiBsaW5lIGFnZ3JlZ2F0ZXMgdGhlICBudW1iZXJzIGluIGFsbCAgb2YgdGhlIG90aGVyICJjcHVOIgorbGluZXMuICBUaGVzZSBudW1iZXJzIGlkZW50aWZ5IHRoZSBhbW91bnQgb2YgdGltZSB0aGUgQ1BVIGhhcyBzcGVudCBwZXJmb3JtaW5nCitkaWZmZXJlbnQga2luZHMgb2Ygd29yay4gIFRpbWUgdW5pdHMgYXJlIGluIFVTRVJfSFogKHR5cGljYWxseSBodW5kcmVkdGhzIG9mIGEKK3NlY29uZCkuICBUaGUgbWVhbmluZ3Mgb2YgdGhlIGNvbHVtbnMgYXJlIGFzIGZvbGxvd3MsIGZyb20gbGVmdCB0byByaWdodDoKKworLSB1c2VyOiBub3JtYWwgcHJvY2Vzc2VzIGV4ZWN1dGluZyBpbiB1c2VyIG1vZGUKKy0gbmljZTogbmljZWQgcHJvY2Vzc2VzIGV4ZWN1dGluZyBpbiB1c2VyIG1vZGUKKy0gc3lzdGVtOiBwcm9jZXNzZXMgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlCistIGlkbGU6IHR3aWRkbGluZyB0aHVtYnMKKy0gaW93YWl0OiB3YWl0aW5nIGZvciBJL08gdG8gY29tcGxldGUKKy0gaXJxOiBzZXJ2aWNpbmcgaW50ZXJydXB0cworLSBzb2Z0aXJxOiBzZXJ2aWNpbmcgc29mdGlycXMKKworVGhlICJpbnRyIiBsaW5lIGdpdmVzIGNvdW50cyBvZiBpbnRlcnJ1cHRzICBzZXJ2aWNlZCBzaW5jZSBib290IHRpbWUsIGZvciBlYWNoCitvZiB0aGUgIHBvc3NpYmxlIHN5c3RlbSBpbnRlcnJ1cHRzLiAgIFRoZSBmaXJzdCAgY29sdW1uICBpcyB0aGUgIHRvdGFsIG9mICBhbGwKK2ludGVycnVwdHMgc2VydmljZWQ7IGVhY2ggIHN1YnNlcXVlbnQgY29sdW1uIGlzIHRoZSAgdG90YWwgZm9yIHRoYXQgcGFydGljdWxhcgoraW50ZXJydXB0LgorCitUaGUgImN0eHQiIGxpbmUgZ2l2ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBjb250ZXh0IHN3aXRjaGVzIGFjcm9zcyBhbGwgQ1BVcy4KKworVGhlICJidGltZSIgbGluZSBnaXZlcyAgdGhlIHRpbWUgYXQgd2hpY2ggdGhlICBzeXN0ZW0gYm9vdGVkLCBpbiBzZWNvbmRzIHNpbmNlCit0aGUgVW5peCBlcG9jaC4KKworVGhlICJwcm9jZXNzZXMiIGxpbmUgZ2l2ZXMgdGhlIG51bWJlciAgb2YgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzIGNyZWF0ZWQsIHdoaWNoCitpbmNsdWRlcyAoYnV0ICBpcyBub3QgbGltaXRlZCAgdG8pIHRob3NlICBjcmVhdGVkIGJ5ICBjYWxscyB0byB0aGUgIGZvcmsoKSBhbmQKK2Nsb25lKCkgc3lzdGVtIGNhbGxzLgorCitUaGUgICJwcm9jc19ydW5uaW5nIiBsaW5lIGdpdmVzIHRoZSAgbnVtYmVyIG9mIHByb2Nlc3NlcyAgY3VycmVudGx5IHJ1bm5pbmcgb24KK0NQVXMuCisKK1RoZSAgICJwcm9jc19ibG9ja2VkIiBsaW5lIGdpdmVzICB0aGUgIG51bWJlciBvZiAgcHJvY2Vzc2VzIGN1cnJlbnRseSBibG9ja2VkLAord2FpdGluZyBmb3IgSS9PIHRvIGNvbXBsZXRlLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgL3Byb2MgZmlsZSBzeXN0ZW0gc2VydmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBydW5uaW5nIHN5c3RlbS4gSXQgbm90IG9ubHkKK2FsbG93cyBhY2Nlc3MgdG8gcHJvY2VzcyBkYXRhIGJ1dCBhbHNvIGFsbG93cyB5b3UgdG8gcmVxdWVzdCB0aGUga2VybmVsIHN0YXR1cworYnkgcmVhZGluZyBmaWxlcyBpbiB0aGUgaGllcmFyY2h5LgorCitUaGUgZGlyZWN0b3J5ICBzdHJ1Y3R1cmUgIG9mIC9wcm9jIHJlZmxlY3RzIHRoZSB0eXBlcyBvZiBpbmZvcm1hdGlvbiBhbmQgbWFrZXMKK2l0IGVhc3ksIGlmIG5vdCBvYnZpb3VzLCB3aGVyZSB0byBsb29rIGZvciBzcGVjaWZpYyBkYXRhLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ0hBUFRFUiAyOiBNT0RJRllJTkcgU1lTVEVNIFBBUkFNRVRFUlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIFRoaXMgQ2hhcHRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIE1vZGlmeWluZyBrZXJuZWwgcGFyYW1ldGVycyBieSB3cml0aW5nIGludG8gZmlsZXMgZm91bmQgaW4gL3Byb2Mvc3lzCisqIEV4cGxvcmluZyB0aGUgZmlsZXMgd2hpY2ggbW9kaWZ5IGNlcnRhaW4gcGFyYW1ldGVycworKiBSZXZpZXcgb2YgdGhlIC9wcm9jL3N5cyBmaWxlIHRyZWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0EgdmVyeSAgaW50ZXJlc3RpbmcgcGFydCBvZiAvcHJvYyBpcyB0aGUgZGlyZWN0b3J5IC9wcm9jL3N5cy4gVGhpcyBpcyBub3Qgb25seQorYSBzb3VyY2UgIG9mICBpbmZvcm1hdGlvbiwgIGl0IGFsc28gYWxsb3dzIHlvdSB0byBjaGFuZ2UgcGFyYW1ldGVycyB3aXRoaW4gdGhlCitrZXJuZWwuIEJlICB2ZXJ5ICBjYXJlZnVsICB3aGVuIGF0dGVtcHRpbmcgdGhpcy4gWW91IGNhbiBvcHRpbWl6ZSB5b3VyIHN5c3RlbSwKK2J1dCB5b3UgIGNhbiAgYWxzbyAgY2F1c2UgIGl0ICB0byAgY3Jhc2guICBOZXZlciAgYWx0ZXIga2VybmVsIHBhcmFtZXRlcnMgb24gYQorcHJvZHVjdGlvbiBzeXN0ZW0uICBTZXQgIHVwICBhICBkZXZlbG9wbWVudCBtYWNoaW5lIGFuZCB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0CitldmVyeXRoaW5nIHdvcmtzICB0aGUgIHdheSAgeW91IHdhbnQgaXQgdG8uIFlvdSBtYXkgaGF2ZSBubyBhbHRlcm5hdGl2ZSBidXQgdG8KK3JlYm9vdCB0aGUgbWFjaGluZSBvbmNlIGFuIGVycm9yIGhhcyBiZWVuIG1hZGUuCisKK1RvIGNoYW5nZSAgYSAgdmFsdWUsICBzaW1wbHkgIGVjaG8gIHRoZSBuZXcgdmFsdWUgaW50byB0aGUgZmlsZS4gQW4gZXhhbXBsZSBpcworZ2l2ZW4gYmVsb3cgIGluIHRoZSBzZWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbSBkYXRhLiBZb3UgbmVlZCB0byBiZSByb290IHRvIGRvCit0aGlzLiBZb3UgIGNhbiAgY3JlYXRlICB5b3VyICBvd24gIGJvb3Qgc2NyaXB0IHRvIHBlcmZvcm0gdGhpcyBldmVyeSB0aW1lIHlvdXIKK3N5c3RlbSBib290cy4KKworVGhlIGZpbGVzICBpbiAvcHJvYy9zeXMgY2FuIGJlIHVzZWQgdG8gZmluZSB0dW5lIGFuZCBtb25pdG9yIG1pc2NlbGxhbmVvdXMgYW5kCitnZW5lcmFsIHRoaW5ncyAgaW4gIHRoZSBvcGVyYXRpb24gb2YgdGhlIExpbnV4IGtlcm5lbC4gU2luY2Ugc29tZSBvZiB0aGUgZmlsZXMKK2NhbiBpbmFkdmVydGVudGx5ICBkaXNydXB0ICB5b3VyICBzeXN0ZW0sICBpdCAgaXMgIGFkdmlzYWJsZSAgdG8gIHJlYWQgIGJvdGgKK2RvY3VtZW50YXRpb24gYW5kICBzb3VyY2UgIGJlZm9yZSBhY3R1YWxseSBtYWtpbmcgYWRqdXN0bWVudHMuIEluIGFueSBjYXNlLCBiZQordmVyeSBjYXJlZnVsICB3aGVuICB3cml0aW5nICB0byAgYW55ICBvZiB0aGVzZSBmaWxlcy4gVGhlIGVudHJpZXMgaW4gL3Byb2MgbWF5CitjaGFuZ2Ugc2xpZ2h0bHkgYmV0d2VlbiB0aGUgMi4xLiogYW5kIHRoZSAyLjIga2VybmVsLCBzbyBpZiB0aGVyZSBpcyBhbnkgZG91YnQKK3JldmlldyB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaW4gdGhlIGRpcmVjdG9yeSAvdXNyL3NyYy9saW51eC9Eb2N1bWVudGF0aW9uLgorVGhpcyBjaGFwdGVyICBpcyAgaGVhdmlseSAgYmFzZWQgIG9uIHRoZSBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIHRoZSBwcmUgMi4yCitrZXJuZWxzLCBhbmQgYmVjYW1lIHBhcnQgb2YgaXQgaW4gdmVyc2lvbiAyLjIuMSBvZiB0aGUgTGludXgga2VybmVsLgorCisyLjEgL3Byb2Mvc3lzL2ZzIC0gRmlsZSBzeXN0ZW0gZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzdWJkaXJlY3RvcnkgIGNvbnRhaW5zICBzcGVjaWZpYyAgZmlsZSBzeXN0ZW0sIGZpbGUgaGFuZGxlLCBpbm9kZSwgZGVudHJ5CithbmQgcXVvdGEgaW5mb3JtYXRpb24uCisKK0N1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy9mczoKKworZGVudHJ5LXN0YXRlCistLS0tLS0tLS0tLS0KKworU3RhdHVzIG9mICB0aGUgIGRpcmVjdG9yeSAgY2FjaGUuICBTaW5jZSAgZGlyZWN0b3J5ICBlbnRyaWVzICBhcmUgIGR5bmFtaWNhbGx5CithbGxvY2F0ZWQgYW5kICBkZWFsbG9jYXRlZCwgIHRoaXMgIGZpbGUgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHN0YXR1cy4gSXQgaG9sZHMKK3NpeCB2YWx1ZXMsIGluIHdoaWNoIHRoZSBsYXN0IHR3byBhcmUgbm90IHVzZWQgYW5kIGFyZSBhbHdheXMgemVyby4gVGhlIG90aGVycworYXJlIGxpc3RlZCBpbiB0YWJsZSAyLTEuCisKKworVGFibGUgMi0xOiBTdGF0dXMgZmlsZXMgb2YgdGhlIGRpcmVjdG9yeSBjYWNoZSAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIEZpbGUgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG5yX2RlbnRyeSAgQWxtb3N0IGFsd2F5cyB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIG5yX3VudXNlZCAgTnVtYmVyIG9mIHVudXNlZCBjYWNoZSBlbnRyaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIGFnZV9saW1pdCAgCisgICAgICAgICAgICBpbiBzZWNvbmRzIGFmdGVyIHRoZSBlbnRyeSBtYXkgYmUgcmVjbGFpbWVkLCB3aGVuIG1lbW9yeSBpcyBzaG9ydCAKKyB3YW50X3BhZ2VzIGludGVybmFsbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitkcXVvdC1uciBhbmQgZHF1b3QtbWF4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaWxlIGRxdW90LW1heCBzaG93cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2FjaGVkIGRpc2sgcXVvdGEgZW50cmllcy4KKworVGhlIGZpbGUgIGRxdW90LW5yICBzaG93cyAgdGhlICBudW1iZXIgb2YgYWxsb2NhdGVkIGRpc2sgcXVvdGEgZW50cmllcyBhbmQgdGhlCitudW1iZXIgb2YgZnJlZSBkaXNrIHF1b3RhIGVudHJpZXMuCisKK0lmIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNhY2hlZCBkaXNrIHF1b3RhcyBpcyB2ZXJ5IGxvdyBhbmQgeW91IGhhdmUgYSBsYXJnZQorbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBzeXN0ZW0gdXNlcnMsIHlvdSBtaWdodCB3YW50IHRvIHJhaXNlIHRoZSBsaW1pdC4KKworZmlsZS1uciBhbmQgZmlsZS1tYXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBrZXJuZWwgIGFsbG9jYXRlcyBmaWxlIGhhbmRsZXMgZHluYW1pY2FsbHksIGJ1dCBkb2Vzbid0IGZyZWUgdGhlbSBhZ2FpbiBhdAordGhpcyB0aW1lLgorCitUaGUgdmFsdWUgIGluICBmaWxlLW1heCAgZGVub3RlcyAgdGhlICBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGhhbmRsZXMgdGhhdCB0aGUKK0xpbnV4IGtlcm5lbCB3aWxsIGFsbG9jYXRlLiBXaGVuIHlvdSBnZXQgYSBsb3Qgb2YgZXJyb3IgbWVzc2FnZXMgYWJvdXQgcnVubmluZworb3V0IG9mICBmaWxlIGhhbmRsZXMsIHlvdSBtaWdodCB3YW50IHRvIHJhaXNlIHRoaXMgbGltaXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisxMCUgb2YgIFJBTSBpbiBraWxvYnl0ZXMuICBUbyAgY2hhbmdlIGl0LCBqdXN0ICB3cml0ZSB0aGUgbmV3IG51bWJlciAgaW50byB0aGUKK2ZpbGU6CisKKyAgIyBjYXQgL3Byb2Mvc3lzL2ZzL2ZpbGUtbWF4IAorICA0MDk2IAorICAjIGVjaG8gODE5MiA+IC9wcm9jL3N5cy9mcy9maWxlLW1heCAKKyAgIyBjYXQgL3Byb2Mvc3lzL2ZzL2ZpbGUtbWF4IAorICA4MTkyIAorCisKK1RoaXMgbWV0aG9kICBvZiAgcmV2aXNpb24gIGlzICB1c2VmdWwgIGZvciAgYWxsIGN1c3RvbWl6YWJsZSBwYXJhbWV0ZXJzIG9mIHRoZQora2VybmVsIC0gc2ltcGx5IGVjaG8gdGhlIG5ldyB2YWx1ZSB0byB0aGUgY29ycmVzcG9uZGluZyBmaWxlLgorCitIaXN0b3JpY2FsbHksIHRoZSB0aHJlZSB2YWx1ZXMgaW4gZmlsZS1uciBkZW5vdGVkIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGZpbGUKK2hhbmRsZXMsICB0aGUgbnVtYmVyIG9mICBhbGxvY2F0ZWQgYnV0ICB1bnVzZWQgZmlsZSAgaGFuZGxlcywgYW5kICB0aGUgbWF4aW11bQorbnVtYmVyIG9mIGZpbGUgaGFuZGxlcy4gTGludXggMi42IGFsd2F5cyAgcmVwb3J0cyAwIGFzIHRoZSBudW1iZXIgb2YgZnJlZSBmaWxlCitoYW5kbGVzIC0tIHRoaXMgIGlzIG5vdCBhbiBlcnJvciwgIGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgIG51bWJlciBvZiBhbGxvY2F0ZWQKK2ZpbGUgaGFuZGxlcyBleGFjdGx5IG1hdGNoZXMgdGhlIG51bWJlciBvZiB1c2VkIGZpbGUgaGFuZGxlcy4KKworQXR0ZW1wdHMgdG8gIGFsbG9jYXRlIG1vcmUgIGZpbGUgZGVzY3JpcHRvcnMgdGhhbiAgZmlsZS1tYXggYXJlICByZXBvcnRlZCB3aXRoCitwcmludGssIGxvb2sgZm9yICJWRlM6IGZpbGUtbWF4IGxpbWl0IDxudW1iZXI+IHJlYWNoZWQiLgorCitpbm9kZS1zdGF0ZSBhbmQgaW5vZGUtbnIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBpbm9kZS1uciBjb250YWlucyB0aGUgZmlyc3QgdHdvIGl0ZW1zIGZyb20gaW5vZGUtc3RhdGUsIHNvIHdlJ2xsIHNraXAKK3RvIHRoYXQgZmlsZS4uLgorCitpbm9kZS1zdGF0ZSBjb250YWlucyAgdHdvICBhY3R1YWwgbnVtYmVycyBhbmQgZml2ZSBkdW1teSB2YWx1ZXMuIFRoZSBudW1iZXJzCithcmUgbnJfaW5vZGVzIGFuZCBucl9mcmVlX2lub2RlcyAoaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSkuCisKK25yX2lub2Rlcworfn5+fn5+fn5+CisKK0Rlbm90ZXMgdGhlICBudW1iZXIgIG9mICBpbm9kZXMgdGhlIHN5c3RlbSBoYXMgYWxsb2NhdGVkLiBUaGlzIG51bWJlciB3aWxsCitncm93IGFuZCBzaHJpbmsgZHluYW1pY2FsbHkuCisKK25yX2ZyZWVfaW5vZGVzCistLS0tLS0tLS0tLS0tLQorCitSZXByZXNlbnRzIHRoZSAgbnVtYmVyIG9mIGZyZWUgaW5vZGVzLiBJZS4gVGhlIG51bWJlciBvZiBpbnVzZSBpbm9kZXMgaXMKKyhucl9pbm9kZXMgLSBucl9mcmVlX2lub2RlcykuCisKK3N1cGVyLW5yIGFuZCBzdXBlci1tYXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4sIHN1cGVyICBibG9jayBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIGtlcm5lbCwgYnV0IG5vdCBmcmVlZC4gVGhlCitmaWxlIHN1cGVyLW1heCAgY29udGFpbnMgIHRoZSAgbWF4aW11bSAgbnVtYmVyICBvZiBzdXBlciBibG9jayBoYW5kbGVycywgd2hlcmUKK3N1cGVyLW5yIHNob3dzIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFsbG9jYXRlZCBvbmVzLgorCitFdmVyeSBtb3VudGVkIGZpbGUgc3lzdGVtIG5lZWRzIGEgc3VwZXIgYmxvY2ssIHNvIGlmIHlvdSBwbGFuIHRvIG1vdW50IGxvdHMgb2YKK2ZpbGUgc3lzdGVtcywgeW91IG1heSB3YW50IHRvIGluY3JlYXNlIHRoZXNlIG51bWJlcnMuCisKK2Fpby1uciBhbmQgYWlvLW1heC1ucgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fpby1uciBpcyB0aGUgcnVubmluZyB0b3RhbCBvZiB0aGUgbnVtYmVyIG9mIGV2ZW50cyBzcGVjaWZpZWQgb24gdGhlCitpb19zZXR1cCBzeXN0ZW0gY2FsbCBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgYWlvIGNvbnRleHRzLiAgSWYgYWlvLW5yCityZWFjaGVzIGFpby1tYXgtbnIgdGhlbiBpb19zZXR1cCB3aWxsIGZhaWwgd2l0aCBFQUdBSU4uICBOb3RlIHRoYXQKK3JhaXNpbmcgYWlvLW1heC1uciBkb2VzIG5vdCByZXN1bHQgaW4gdGhlIHByZS1hbGxvY2F0aW9uIG9yIHJlLXNpemluZworb2YgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCisKKzIuMiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgLSBNaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZXNpZGVzIHRoZXNlICBmaWxlcywgdGhlcmUgaXMgdGhlIHN1YmRpcmVjdG9yeSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MuIFRoaXMKK2hhbmRsZXMgdGhlIGtlcm5lbCBzdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzLgorCitCaW5mbXRfbWlzYyBwcm92aWRlcyAgdGhlIGFiaWxpdHkgdG8gcmVnaXN0ZXIgYWRkaXRpb25hbCBiaW5hcnkgZm9ybWF0cyB0byB0aGUKK0tlcm5lbCB3aXRob3V0ICBjb21waWxpbmcgIGFuIGFkZGl0aW9uYWwgbW9kdWxlL2tlcm5lbC4gVGhlcmVmb3JlLCBiaW5mbXRfbWlzYworbmVlZHMgdG8gIGtub3cgbWFnaWMgbnVtYmVycyBhdCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gb2YgdGhlCitiaW5hcnkuCisKK0l0IHdvcmtzIGJ5IG1haW50YWluaW5nIGEgbGlua2VkIGxpc3Qgb2Ygc3RydWN0cyB0aGF0IGNvbnRhaW4gYSBkZXNjcmlwdGlvbiBvZgorYSBiaW5hcnkgIGZvcm1hdCwgIGluY2x1ZGluZyAgYSAgbWFnaWMgIHdpdGggc2l6ZSAob3IgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiksCitvZmZzZXQgYW5kICBtYXNrLCAgYW5kICB0aGUgIGludGVycHJldGVyIG5hbWUuIE9uIHJlcXVlc3QgaXQgaW52b2tlcyB0aGUgZ2l2ZW4KK2ludGVycHJldGVyIHdpdGggIHRoZSAgb3JpZ2luYWwgIHByb2dyYW0gIGFzICBhcmd1bWVudCwgIGFzICBiaW5mbXRfamF2YSAgYW5kCitiaW5mbXRfZW04NiBhbmQgIGJpbmZtdF9teiAgZG8uICBTaW5jZSBiaW5mbXRfbWlzYyBkb2VzIG5vdCBkZWZpbmUgYW55IGRlZmF1bHQKK2JpbmFyeS1mb3JtYXRzLCB5b3UgaGF2ZSB0byByZWdpc3RlciBhbiBhZGRpdGlvbmFsIGJpbmFyeS1mb3JtYXQuCisKK1RoZXJlIGFyZSB0d28gZ2VuZXJhbCBmaWxlcyBpbiBiaW5mbXRfbWlzYyBhbmQgb25lIGZpbGUgcGVyIHJlZ2lzdGVyZWQgZm9ybWF0LgorVGhlIHR3byBnZW5lcmFsIGZpbGVzIGFyZSByZWdpc3RlciBhbmQgc3RhdHVzLgorCitSZWdpc3RlcmluZyBhIG5ldyBiaW5hcnkgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSBmb3JtYXQgeW91IGhhdmUgdG8gaXNzdWUgdGhlIGNvbW1hbmQKKworICBlY2hvIDpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ID4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyIAorCisKKword2l0aCBhcHByb3ByaWF0ZSAgbmFtZSAodGhlIG5hbWUgZm9yIHRoZSAvcHJvYy1kaXIgZW50cnkpLCBvZmZzZXQgKGRlZmF1bHRzIHRvCiswLCBpZiAgb21pdHRlZCksICBtYWdpYywgbWFzayAod2hpY2ggY2FuIGJlIG9taXR0ZWQsIGRlZmF1bHRzIHRvIGFsbCAweGZmKSBhbmQKK2xhc3QgYnV0ICBub3QgIGxlYXN0LCAgdGhlICBpbnRlcnByZXRlciB0aGF0IGlzIHRvIGJlIGludm9rZWQgKGZvciBleGFtcGxlIGFuZAordGVzdGluZyAvYmluL2VjaG8pLiAgVHlwZSAgY2FuIGJlIE0gZm9yIHVzdWFsIG1hZ2ljIG1hdGNoaW5nIG9yIEUgZm9yIGZpbGVuYW1lCitleHRlbnNpb24gbWF0Y2hpbmcgKGdpdmUgZXh0ZW5zaW9uIGluIHBsYWNlIG9mIG1hZ2ljKS4KKworQ2hlY2sgb3IgcmVzZXQgdGhlIHN0YXR1cyBvZiB0aGUgYmluYXJ5IGZvcm1hdCBoYW5kbGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91ICBkbyBhIGNhdCBvbiB0aGUgZmlsZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2Mvc3RhdHVzLCB5b3Ugd2lsbCBnZXQgdGhlCitjdXJyZW50IHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZCkgb2YgYmluZm10X21pc2MuIENoYW5nZSB0aGUgc3RhdHVzIGJ5IGVjaG9pbmcKKzAgKGRpc2FibGVzKSAgb3IgIDEgIChlbmFibGVzKSAgb3IgIC0xICAoY2F1dGlvbjogIHRoaXMgIGNsZWFycyBhbGwgcHJldmlvdXNseQorcmVnaXN0ZXJlZCBiaW5hcnkgIGZvcm1hdHMpICB0byBzdGF0dXMuIEZvciBleGFtcGxlIGVjaG8gMCA+IHN0YXR1cyB0byBkaXNhYmxlCitiaW5mbXRfbWlzYyAodGVtcG9yYXJpbHkpLgorCitTdGF0dXMgb2YgYSBzaW5nbGUgaGFuZGxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRWFjaCByZWdpc3RlcmVkICBoYW5kbGVyIGhhcyBhbiBlbnRyeSBpbiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MuIFRoZXNlIGZpbGVzCitwZXJmb3JtIHRoZSAgc2FtZSBmdW5jdGlvbiBhcyBzdGF0dXMsIGJ1dCB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBhY3R1YWwKK2JpbmFyeSBmb3JtYXQuICBCeSAgY2F0aW5nIHRoaXMgZmlsZSwgeW91IGFsc28gcmVjZWl2ZSBhbGwgcmVsYXRlZCBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGludGVycHJldGVyL21hZ2ljIG9mIHRoZSBiaW5mbXQuCisKK0V4YW1wbGUgdXNhZ2Ugb2YgYmluZm10X21pc2MgKGVtdWxhdGUgYmluZm10X2phdmEpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGNkIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAgCisgIGVjaG8gJzpKYXZhOk06Olx4Y2FceGZlXHhiYVx4YmU6Oi91c3IvbG9jYWwvamF2YS9iaW4vamF2YXdyYXBwZXI6JyA+IHJlZ2lzdGVyICAKKyAgZWNobyAnOkhUTUw6RTo6aHRtbDo6L3Vzci9sb2NhbC9qYXZhL2Jpbi9hcHBsZXR2aWV3ZXI6JyA+IHJlZ2lzdGVyICAKKyAgZWNobyAnOkFwcGxldDpNOjo8IS0tYXBwbGV0OjovdXNyL2xvY2FsL2phdmEvYmluL2FwcGxldHZpZXdlcjonID4gcmVnaXN0ZXIgCisgIGVjaG8gJzpERVhFOk06Olx4MGVERVg6Oi91c3IvYmluL2Rvc2V4ZWM6JyA+IHJlZ2lzdGVyIAorCisKK1RoZXNlIGZvdXIgIGxpbmVzICBhZGQgIHN1cHBvcnQgIGZvciAgSmF2YSAgZXhlY3V0YWJsZXMgYW5kIEphdmEgYXBwbGV0cyAobGlrZQorYmluZm10X2phdmEsIGFkZGl0aW9uYWxseSAgcmVjb2duaXppbmcgdGhlIC5odG1sIGV4dGVuc2lvbiB3aXRoIG5vIG5lZWQgdG8gcHV0Cis8IS0tYXBwbGV0PiB0byAgZXZlcnkgIGFwcGxldCAgZmlsZSkuICBZb3UgIGhhdmUgIHRvICBpbnN0YWxsICB0aGUgSkRLIGFuZCB0aGUKK3NoZWxsLXNjcmlwdCAvdXNyL2xvY2FsL2phdmEvYmluL2phdmF3cmFwcGVyICB0b28uICBJdCAgd29ya3MgIGFyb3VuZCAgdGhlCiticm9rZW5uZXNzIG9mICB0aGUgSmF2YSBmaWxlbmFtZSBoYW5kbGluZy4gVG8gYWRkIGEgSmF2YSBiaW5hcnksIGp1c3QgY3JlYXRlIGEKK2xpbmsgdG8gdGhlIGNsYXNzLWZpbGUgc29tZXdoZXJlIGluIHRoZSBwYXRoLgorCisyLjMgL3Byb2Mvc3lzL2tlcm5lbCAtIGdlbmVyYWwga2VybmVsIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRpcmVjdG9yeSAgcmVmbGVjdHMgIGdlbmVyYWwgIGtlcm5lbCAgYmVoYXZpb3JzLiBBcyBJJ3ZlIHNhaWQgYmVmb3JlLCB0aGUKK2NvbnRlbnRzIGRlcGVuZCAgb24gIHlvdXIgIGNvbmZpZ3VyYXRpb24uICBIZXJlIHlvdSdsbCBmaW5kIHRoZSBtb3N0IGltcG9ydGFudAorZmlsZXMsIGFsb25nIHdpdGggZGVzY3JpcHRpb25zIG9mIHdoYXQgdGhleSBtZWFuIGFuZCBob3cgdG8gdXNlIHRoZW0uCisKK2FjY3QKKy0tLS0KKworVGhlIGZpbGUgY29udGFpbnMgdGhyZWUgdmFsdWVzOyBoaWdod2F0ZXIsIGxvd3dhdGVyLCBhbmQgZnJlcXVlbmN5LgorCitJdCBleGlzdHMgIG9ubHkgIHdoZW4gIEJTRC1zdHlsZSAgcHJvY2VzcyAgYWNjb3VudGluZyBpcyBlbmFibGVkLiBUaGVzZSB2YWx1ZXMKK2NvbnRyb2wgaXRzIGJlaGF2aW9yLiBJZiB0aGUgZnJlZSBzcGFjZSBvbiB0aGUgZmlsZSBzeXN0ZW0gd2hlcmUgdGhlIGxvZyBsaXZlcworZ29lcyBiZWxvdyAgbG93d2F0ZXIgIHBlcmNlbnRhZ2UsICBhY2NvdW50aW5nICBzdXNwZW5kcy4gIElmICBpdCAgZ29lcyAgYWJvdmUKK2hpZ2h3YXRlciBwZXJjZW50YWdlLCAgYWNjb3VudGluZyAgcmVzdW1lcy4gRnJlcXVlbmN5IGRldGVybWluZXMgaG93IG9mdGVuIHlvdQorY2hlY2sgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlICh2YWx1ZSBpcyBpbiBzZWNvbmRzKS4gRGVmYXVsdCBzZXR0aW5ncyBhcmU6IDQsCisyLCBhbmQgIDMwLiAgVGhhdCBpcywgc3VzcGVuZCBhY2NvdW50aW5nIGlmIHRoZXJlIGlzIGxlc3MgdGhhbiAyIHBlcmNlbnQgZnJlZTsKK3Jlc3VtZSBpdCAgaWYgd2UgaGF2ZSBhIHZhbHVlIG9mIDMgb3IgbW9yZSBwZXJjZW50OyBjb25zaWRlciBpbmZvcm1hdGlvbiBhYm91dAordGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHZhbGlkIGZvciAzMCBzZWNvbmRzCisKK2N0cmwtYWx0LWRlbAorLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIHZhbHVlIGluIHRoaXMgZmlsZSBpcyAwLCBjdHJsLWFsdC1kZWwgaXMgdHJhcHBlZCBhbmQgc2VudCB0byB0aGUgaW5pdAorcHJvZ3JhbSB0byAgaGFuZGxlIGEgZ3JhY2VmdWwgcmVzdGFydC4gSG93ZXZlciwgd2hlbiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGF0Cit6ZXJvLCBMaW51eCdzICByZWFjdGlvbiAgdG8gIHRoaXMga2V5IGNvbWJpbmF0aW9uIHdpbGwgYmUgYW4gaW1tZWRpYXRlIHJlYm9vdCwKK3dpdGhvdXQgc3luY2luZyBpdHMgZGlydHkgYnVmZmVycy4KKworW05PVEVdCisgICAgV2hlbiBhICBwcm9ncmFtICAobGlrZSAgZG9zZW11KSAgaGFzICB0aGUgIGtleWJvYXJkICBpbiAgcmF3ICBtb2RlLCAgdGhlCisgICAgY3RybC1hbHQtZGVsIGlzICBpbnRlcmNlcHRlZCAgYnkgIHRoZSAgcHJvZ3JhbSAgYmVmb3JlIGl0IGV2ZXIgcmVhY2hlcyB0aGUKKyAgICBrZXJuZWwgdHR5ICBsYXllciwgIGFuZCAgaXQgaXMgdXAgdG8gdGhlIHByb2dyYW0gdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aAorICAgIGl0LgorCitkb21haW5uYW1lIGFuZCBob3N0bmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZmlsZXMgIGNhbiAgYmUgY29udHJvbGxlZCB0byBzZXQgdGhlIE5JUyBkb21haW5uYW1lIGFuZCBob3N0bmFtZSBvZiB5b3VyCitib3guIEZvciB0aGUgY2xhc3NpYyBkYXJrc3Rhci5mcm9wLm9yZyBhIHNpbXBsZToKKworICAjIGVjaG8gImRhcmtzdGFyIiA+IC9wcm9jL3N5cy9rZXJuZWwvaG9zdG5hbWUgCisgICMgZWNobyAiZnJvcC5vcmciID4gL3Byb2Mvc3lzL2tlcm5lbC9kb21haW5uYW1lIAorCisKK3dvdWxkIHN1ZmZpY2UgdG8gc2V0IHlvdXIgaG9zdG5hbWUgYW5kIE5JUyBkb21haW5uYW1lLgorCitvc3JlbGVhc2UsIG9zdHlwZSBhbmQgdmVyc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG5hbWVzIG1ha2UgaXQgcHJldHR5IG9idmlvdXMgd2hhdCB0aGVzZSBmaWVsZHMgY29udGFpbjoKKworICA+IGNhdCAvcHJvYy9zeXMva2VybmVsL29zcmVsZWFzZSAKKyAgMi4yLjEyIAorICAgCisgID4gY2F0IC9wcm9jL3N5cy9rZXJuZWwvb3N0eXBlIAorICBMaW51eCAKKyAgIAorICA+IGNhdCAvcHJvYy9zeXMva2VybmVsL3ZlcnNpb24gCisgICM0IEZyaSBPY3QgMSAxMjo0MToxNCBQRFQgMTk5OSAKKworCitUaGUgZmlsZXMgIG9zcmVsZWFzZSBhbmQgb3N0eXBlIHNob3VsZCBiZSBjbGVhciBlbm91Z2guIFZlcnNpb24gbmVlZHMgYSBsaXR0bGUKK21vcmUgY2xhcmlmaWNhdGlvbi4gIFRoZSAgIzQgbWVhbnMgdGhhdCB0aGlzIGlzIHRoZSA0dGgga2VybmVsIGJ1aWx0IGZyb20gdGhpcworc291cmNlIGJhc2UgYW5kIHRoZSBkYXRlIGFmdGVyIGl0IGluZGljYXRlcyB0aGUgdGltZSB0aGUga2VybmVsIHdhcyBidWlsdC4gVGhlCitvbmx5IHdheSB0byB0dW5lIHRoZXNlIHZhbHVlcyBpcyB0byByZWJ1aWxkIHRoZSBrZXJuZWwuCisKK3BhbmljCistLS0tLQorCitUaGUgdmFsdWUgIGluICB0aGlzICBmaWxlICByZXByZXNlbnRzICB0aGUgIG51bWJlciBvZiBzZWNvbmRzIHRoZSBrZXJuZWwgd2FpdHMKK2JlZm9yZSByZWJvb3RpbmcgIG9uICBhICBwYW5pYy4gIFdoZW4gIHlvdSAgdXNlICB0aGUgIHNvZnR3YXJlICB3YXRjaGRvZywgIHRoZQorcmVjb21tZW5kZWQgc2V0dGluZyAgaXMgIDYwLiBJZiBzZXQgdG8gMCwgdGhlIGF1dG8gcmVib290IGFmdGVyIGEga2VybmVsIHBhbmljCitpcyBkaXNhYmxlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgc2V0dGluZy4KKworcHJpbnRrCistLS0tLS0KKworVGhlIGZvdXIgdmFsdWVzIGluIHByaW50ayBkZW5vdGUKKyogY29uc29sZV9sb2dsZXZlbCwKKyogZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsLAorKiBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWwgYW5kCisqIGRlZmF1bHRfY29uc29sZV9sb2dsZXZlbAorcmVzcGVjdGl2ZWx5LgorCitUaGVzZSB2YWx1ZXMgIGluZmx1ZW5jZSAgcHJpbnRrKCkgIGJlaGF2aW9yICB3aGVuICBwcmludGluZyAgb3IgIGxvZ2dpbmcgZXJyb3IKK21lc3NhZ2VzLCB3aGljaCAgY29tZSAgZnJvbSAgaW5zaWRlICB0aGUgIGtlcm5lbC4gIFNlZSAgc3lzbG9nKDIpICBmb3IgIG1vcmUKK2luZm9ybWF0aW9uIG9uIHRoZSBkaWZmZXJlbnQgbG9nIGxldmVscy4KKworY29uc29sZV9sb2dsZXZlbAorLS0tLS0tLS0tLS0tLS0tLQorCitNZXNzYWdlcyB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhpcyB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuCisKK2RlZmF1bHRfbWVzc2FnZV9sZXZlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01lc3NhZ2VzIHdpdGhvdXQgYW4gZXhwbGljaXQgcHJpb3JpdHkgd2lsbCBiZSBwcmludGVkIHdpdGggdGhpcyBwcmlvcml0eS4KKworbWluaW11bV9jb25zb2xlX2xvZ2xldmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWluaW11bSAoaGlnaGVzdCkgdmFsdWUgdG8gd2hpY2ggdGhlIGNvbnNvbGVfbG9nbGV2ZWwgY2FuIGJlIHNldC4KKworZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVmYXVsdCB2YWx1ZSBmb3IgY29uc29sZV9sb2dsZXZlbC4KKworc2ctYmlnLWJ1ZmYKKy0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSAgc2hvd3MgIHRoZSBzaXplIG9mIHRoZSBnZW5lcmljIFNDU0kgKHNnKSBidWZmZXIuIEF0IHRoaXMgcG9pbnQsIHlvdQorY2FuJ3QgdHVuZSAgaXQgIHlldCwgIGJ1dCAgeW91ICBjYW4gIGNoYW5nZSAgaXQgIGF0ICBjb21waWxlICB0aW1lICBieSBlZGl0aW5nCitpbmNsdWRlL3Njc2kvc2cuaCBhbmQgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIFNHX0JJR19CVUZGLgorCitJZiB5b3UgdXNlIGEgc2Nhbm5lciB3aXRoIFNBTkUgKFNjYW5uZXIgQWNjZXNzIE5vdyBFYXN5KSB5b3UgbWlnaHQgd2FudCB0byBzZXQKK3RoaXMgdG8gYSBoaWdoZXIgdmFsdWUuIFJlZmVyIHRvIHRoZSBTQU5FIGRvY3VtZW50YXRpb24gb24gdGhpcyBpc3N1ZS4KKworbW9kcHJvYmUKKy0tLS0tLS0tCisKK1RoZSBsb2NhdGlvbiAgd2hlcmUgIHRoZSAgbW9kcHJvYmUgIGJpbmFyeSAgaXMgIGxvY2F0ZWQuICBUaGUga2VybmVsIHVzZXMgdGhpcworcHJvZ3JhbSB0byBsb2FkIG1vZHVsZXMgb24gZGVtYW5kLgorCit1bmtub3duX25taV9wYW5pYworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHZhbHVlIGluIHRoaXMgZmlsZSBhZmZlY3RzIGJlaGF2aW9yIG9mIGhhbmRsaW5nIE5NSS4gV2hlbiB0aGUgdmFsdWUgaXMKK25vbi16ZXJvLCB1bmtub3duIE5NSSBpcyB0cmFwcGVkIGFuZCB0aGVuIHBhbmljIG9jY3Vycy4gQXQgdGhhdCB0aW1lLCBrZXJuZWwKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQgb24gY29uc29sZS4KKworTk1JIHN3aXRjaCB0aGF0IG1vc3QgSUEzMiBzZXJ2ZXJzIGhhdmUgZmlyZXMgdW5rbm93biBOTUkgdXAsIGZvciBleGFtcGxlLgorSWYgYSBzeXN0ZW0gaGFuZ3MgdXAsIHRyeSBwcmVzc2luZyB0aGUgTk1JIHN3aXRjaC4KKworW05PVEVdCisgICBUaGlzIGZ1bmN0aW9uIGFuZCBvcHJvZmlsZSBzaGFyZSBhIE5NSSBjYWxsYmFjay4gVGhlcmVmb3JlIHRoaXMgZnVuY3Rpb24KKyAgIGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gb3Byb2ZpbGUgaXMgYWN0aXZhdGVkLgorICAgQW5kIE5NSSB3YXRjaGRvZyB3aWxsIGJlIGRpc2FibGVkIHdoZW4gdGhlIHZhbHVlIGluIHRoaXMgZmlsZSBpcyBzZXQgdG8KKyAgIG5vbi16ZXJvLgorCisKKzIuNCAvcHJvYy9zeXMvdm0gLSBUaGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZXMgIGluICB0aGlzIGRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byB0dW5lIHRoZSBvcGVyYXRpb24gb2YgdGhlIHZpcnR1YWwKK21lbW9yeSAoVk0pICBzdWJzeXN0ZW0gIG9mICB0aGUgIExpbnV4ICBrZXJuZWwuCisKK3Zmc19jYWNoZV9wcmVzc3VyZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnRyb2xzIHRoZSB0ZW5kZW5jeSBvZiB0aGUga2VybmVsIHRvIHJlY2xhaW0gdGhlIG1lbW9yeSB3aGljaCBpcyB1c2VkIGZvcgorY2FjaGluZyBvZiBkaXJlY3RvcnkgYW5kIGlub2RlIG9iamVjdHMuCisKK0F0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHZmc19jYWNoZV9wcmVzc3VyZT0xMDAgdGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8KK3JlY2xhaW0gZGVudHJpZXMgYW5kIGlub2RlcyBhdCBhICJmYWlyIiByYXRlIHdpdGggcmVzcGVjdCB0byBwYWdlY2FjaGUgYW5kCitzd2FwY2FjaGUgcmVjbGFpbS4gIERlY3JlYXNpbmcgdmZzX2NhY2hlX3ByZXNzdXJlIGNhdXNlcyB0aGUga2VybmVsIHRvIHByZWZlcgordG8gcmV0YWluIGRlbnRyeSBhbmQgaW5vZGUgY2FjaGVzLiAgSW5jcmVhc2luZyB2ZnNfY2FjaGVfcHJlc3N1cmUgYmV5b25kIDEwMAorY2F1c2VzIHRoZSBrZXJuZWwgdG8gcHJlZmVyIHRvIHJlY2xhaW0gZGVudHJpZXMgYW5kIGlub2Rlcy4KKworZGlydHlfYmFja2dyb3VuZF9yYXRpbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKK3RoZSBwZGZsdXNoIGJhY2tncm91bmQgd3JpdGViYWNrIGRhZW1vbiB3aWxsIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5IGRhdGEuCisKK2RpcnR5X3JhdGlvCistLS0tLS0tLS0tLS0tLS0tLQorCitDb250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKK2EgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5CitkYXRhLgorCitkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwZGZsdXNoIHdyaXRlYmFjayBkYWVtb25zIHdpbGwgcGVyaW9kaWNhbGx5IHdha2UgdXAgYW5kIHdyaXRlIGBvbGQnIGRhdGEKK291dCB0byBkaXNrLiAgVGhpcyB0dW5hYmxlIGV4cHJlc3NlcyB0aGUgaW50ZXJ2YWwgYmV0d2VlbiB0aG9zZSB3YWtldXBzLCBpbgorMTAwJ3RocyBvZiBhIHNlY29uZC4KKworU2V0dGluZyB0aGlzIHRvIHplcm8gZGlzYWJsZXMgcGVyaW9kaWMgd3JpdGViYWNrIGFsdG9nZXRoZXIuCisKK2RpcnR5X2V4cGlyZV9jZW50aXNlY3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0dW5hYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHdoZW4gZGlydHkgZGF0YSBpcyBvbGQgZW5vdWdoIHRvIGJlIGVsaWdpYmxlCitmb3Igd3JpdGVvdXQgYnkgdGhlIHBkZmx1c2ggZGFlbW9ucy4gIEl0IGlzIGV4cHJlc3NlZCBpbiAxMDAndGhzIG9mIGEgc2Vjb25kLiAKK0RhdGEgd2hpY2ggaGFzIGJlZW4gZGlydHkgaW4tbWVtb3J5IGZvciBsb25nZXIgdGhhbiB0aGlzIGludGVydmFsIHdpbGwgYmUKK3dyaXR0ZW4gb3V0IG5leHQgdGltZSBhIHBkZmx1c2ggZGFlbW9uIHdha2VzIHVwLgorCitsZWdhY3lfdmFfbGF5b3V0CistLS0tLS0tLS0tLS0tLS0tCisKK0lmIG5vbi16ZXJvLCB0aGlzIHN5c2N0bCBkaXNhYmxlcyB0aGUgbmV3IDMyLWJpdCBtbWFwIG1tYXAgbGF5b3V0IC0gdGhlIGtlcm5lbAord2lsbCB1c2UgdGhlIGxlZ2FjeSAoMi40KSBsYXlvdXQgZm9yIGFsbCBwcm9jZXNzZXMuCisKK2xvd2VyX3pvbmVfcHJvdGVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBzb21lIHNwZWNpYWxpc2VkIHdvcmtsb2FkcyBvbiBoaWdobWVtIG1hY2hpbmVzIGl0IGlzIGRhbmdlcm91cyBmb3IKK3RoZSBrZXJuZWwgdG8gYWxsb3cgcHJvY2VzcyBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlICJsb3dtZW0iCit6b25lLiAgVGhpcyBpcyBiZWNhdXNlIHRoYXQgbWVtb3J5IGNvdWxkIHRoZW4gYmUgcGlubmVkIHZpYSB0aGUgbWxvY2soKQorc3lzdGVtIGNhbGwsIG9yIGJ5IHVuYXZhaWxhYmlsaXR5IG9mIHN3YXBzcGFjZS4KKworQW5kIG9uIGxhcmdlIGhpZ2htZW0gbWFjaGluZXMgdGhpcyBsYWNrIG9mIHJlY2xhaW1hYmxlIGxvd21lbSBtZW1vcnkKK2NhbiBiZSBmYXRhbC4KKworU28gdGhlIExpbnV4IHBhZ2UgYWxsb2NhdG9yIGhhcyBhIG1lY2hhbmlzbSB3aGljaCBwcmV2ZW50cyBhbGxvY2F0aW9ucword2hpY2ggX2NvdWxkXyB1c2UgaGlnaG1lbSBmcm9tIHVzaW5nIHRvbyBtdWNoIGxvd21lbS4gIFRoaXMgbWVhbnMgdGhhdAorYSBjZXJ0YWluIGFtb3VudCBvZiBsb3dtZW0gaXMgZGVmZW5kZWQgZnJvbSB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcKK2NhcHR1cmVkIGludG8gcGlubmVkIHVzZXIgbWVtb3J5LgorCisoVGhlIHNhbWUgYXJndW1lbnQgYXBwbGllcyB0byB0aGUgb2xkIDE2IG1lZ2FieXRlIElTQSBETUEgcmVnaW9uLiAgVGhpcworbWVjaGFuaXNtIHdpbGwgYWxzbyBkZWZlbmQgdGhhdCByZWdpb24gZnJvbSBhbGxvY2F0aW9ucyB3aGljaCBjb3VsZCB1c2UKK2hpZ2htZW0gb3IgbG93bWVtKS4KKworVGhlIGBsb3dlcl96b25lX3Byb3RlY3Rpb24nIHR1bmFibGUgZGV0ZXJtaW5lcyBob3cgYWdncmVzc2l2ZSB0aGUga2VybmVsIGlzCitpbiBkZWZlbmRpbmcgdGhlc2UgbG93ZXIgem9uZXMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvIC0gbm8KK3Byb3RlY3Rpb24gYXQgYWxsLgorCitJZiB5b3UgaGF2ZSBhIG1hY2hpbmUgd2hpY2ggdXNlcyBoaWdobWVtIG9yIElTQSBETUEgYW5kIHlvdXIKK2FwcGxpY2F0aW9ucyBhcmUgdXNpbmcgbWxvY2soKSwgb3IgaWYgeW91IGFyZSBydW5uaW5nIHdpdGggbm8gc3dhcCB0aGVuCit5b3UgcHJvYmFibHkgc2hvdWxkIGluY3JlYXNlIHRoZSBsb3dlcl96b25lX3Byb3RlY3Rpb24gc2V0dGluZy4KKworVGhlIHVuaXRzIG9mIHRoaXMgdHVuYWJsZSBhcmUgZmFpcmx5IHZhZ3VlLiAgSXQgaXMgYXBwcm94aW1hdGVseSBlcXVhbAordG8gIm1lZ2FieXRlcyIuICBTbyBzZXR0aW5nIGxvd2VyX3pvbmVfcHJvdGVjdGlvbj0xMDAgd2lsbCBwcm90ZWN0IGFyb3VuZCAxMDAKK21lZ2FieXRlcyBvZiB0aGUgbG93bWVtIHpvbmUgZnJvbSB1c2VyIGFsbG9jYXRpb25zLiAgSXQgd2lsbCBhbHNvIG1ha2UKK3Rob3NlIDEwMCBtZWdhYnl0ZXMgdW5hdmFsaWFibGUgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgYW5kIGJ5CitwYWdlY2FjaGUsIHNvIHRoZXJlIGlzIGEgY29zdC4KKworVGhlIGVmZmVjdHMgb2YgdGhpcyB0dW5hYmxlIG1heSBiZSBvYnNlcnZlZCBieSBtb25pdG9yaW5nCisvcHJvYy9tZW1pbmZvOkxvd0ZyZWUuICBXcml0ZSBhIHNpbmdsZSBodWdlIGZpbGUgYW5kIG9ic2VydmUgdGhlIHBvaW50CithdCB3aGljaCBMb3dGcmVlIGNlYXNlcyB0byBmYWxsLgorCitBIHJlYXNvbmFibGUgdmFsdWUgZm9yIGxvd2VyX3pvbmVfcHJvdGVjdGlvbiBpcyAxMDAuCisKK3BhZ2UtY2x1c3RlcgorLS0tLS0tLS0tLS0tCisKK3BhZ2UtY2x1c3RlciBjb250cm9scyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIGFyZSB3cml0dGVuIHRvIHN3YXAgaW4KK2Egc2luZ2xlIGF0dGVtcHQuICBUaGUgc3dhcCBJL08gc2l6ZS4KKworSXQgaXMgYSBsb2dhcml0aG1pYyB2YWx1ZSAtIHNldHRpbmcgaXQgdG8gemVybyBtZWFucyAiMSBwYWdlIiwgc2V0dGluZworaXQgdG8gMSBtZWFucyAiMiBwYWdlcyIsIHNldHRpbmcgaXQgdG8gMiBtZWFucyAiNCBwYWdlcyIsIGV0Yy4KKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhyZWUgKGVpZ2h0IHBhZ2VzIGF0IGEgdGltZSkuICBUaGVyZSBtYXkgYmUgc29tZQorc21hbGwgYmVuZWZpdHMgaW4gdHVuaW5nIHRoaXMgdG8gYSBkaWZmZXJlbnQgdmFsdWUgaWYgeW91ciB3b3JrbG9hZCBpcworc3dhcC1pbnRlbnNpdmUuCisKK292ZXJjb21taXRfbWVtb3J5CistLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgIGNvbnRhaW5zICBvbmUgIHZhbHVlLiAgVGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaXMgdXNlZCB0byBkZWNpZGUgaWYKK3RoZXJlJ3MgZW5vdWdoICBtZW1vcnk6ICBpZiAgdGhlICB2YWx1ZSBvZiBvdmVyY29tbWl0X21lbW9yeSBpcyBwb3NpdGl2ZSwgdGhlbgordGhlcmUncyBhbHdheXMgIGVub3VnaCAgbWVtb3J5LiBUaGlzIGlzIGEgdXNlZnVsIGZlYXR1cmUsIHNpbmNlIHByb2dyYW1zIG9mdGVuCittYWxsb2MoKSBodWdlICBhbW91bnRzICBvZiAgbWVtb3J5ICdqdXN0IGluIGNhc2UnLCB3aGlsZSB0aGV5IG9ubHkgdXNlIGEgc21hbGwKK3BhcnQgb2YgIGl0LiAgTGVhdmluZyAgdGhpcyB2YWx1ZSBhdCAwIHdpbGwgbGVhZCB0byB0aGUgZmFpbHVyZSBvZiBzdWNoIGEgaHVnZQorbWFsbG9jKCksIHdoZW4gaW4gZmFjdCB0aGUgc3lzdGVtIGhhcyBlbm91Z2ggbWVtb3J5IGZvciB0aGUgcHJvZ3JhbSB0byBydW4uCisKK09uIHRoZSAgb3RoZXIgIGhhbmQsICBlbmFibGluZyB0aGlzIGZlYXR1cmUgY2FuIGNhdXNlIHlvdSB0byBydW4gb3V0IG9mIG1lbW9yeQorYW5kIHRocmFzaCB0aGUgc3lzdGVtIHRvIGRlYXRoLCBzbyBsYXJnZSBhbmQvb3IgaW1wb3J0YW50IHNlcnZlcnMgd2lsbCB3YW50IHRvCitzZXQgdGhpcyB2YWx1ZSB0byAwLgorCitucl9odWdlcGFnZXMgYW5kIGh1Z2V0bGJfc2htX2dyb3VwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25yX2h1Z2VwYWdlcyBjb25maWd1cmVzIG51bWJlciBvZiBodWdldGxiIHBhZ2UgcmVzZXJ2ZWQgZm9yIHRoZSBzeXN0ZW0uCisKK2h1Z2V0bGJfc2htX2dyb3VwIGNvbnRhaW5zIGdyb3VwIGlkIHRoYXQgaXMgYWxsb3dlZCB0byBjcmVhdGUgU3lzViBzaGFyZWQKK21lbW9yeSBzZWdtZW50IHVzaW5nIGh1Z2V0bGIgcGFnZS4KKworbGFwdG9wX21vZGUKKy0tLS0tLS0tLS0tCisKK2xhcHRvcF9tb2RlIGlzIGEga25vYiB0aGF0IGNvbnRyb2xzICJsYXB0b3AgbW9kZSIuIEFsbCB0aGUgdGhpbmdzIHRoYXQgYXJlCitjb250cm9sbGVkIGJ5IHRoaXMga25vYiBhcmUgZGlzY3Vzc2VkIGluIERvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0LgorCitibG9ja19kdW1wCistLS0tLS0tLS0tCisKK2Jsb2NrX2R1bXAgZW5hYmxlcyBibG9jayBJL08gZGVidWdnaW5nIHdoZW4gc2V0IHRvIGEgbm9uemVybyB2YWx1ZS4gTW9yZQoraW5mb3JtYXRpb24gb24gYmxvY2sgSS9PIGRlYnVnZ2luZyBpcyBpbiBEb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dC4KKworc3dhcF90b2tlbl90aW1lb3V0CistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGNvbnRhaW5zIHZhbGlkIGhvbGQgdGltZSBvZiBzd2FwIG91dCBwcm90ZWN0aW9uIHRva2VuLiBUaGUgTGludXgKK1ZNIGhhcyB0b2tlbiBiYXNlZCB0aHJhc2hpbmcgY29udHJvbCBtZWNoYW5pc20gYW5kIHVzZXMgdGhlIHRva2VuIHRvIHByZXZlbnQKK3VubmVjZXNzYXJ5IHBhZ2UgZmF1bHRzIGluIHRocmFzaGluZyBzaXR1YXRpb24uIFRoZSB1bml0IG9mIHRoZSB2YWx1ZSBpcworc2Vjb25kLiBUaGUgdmFsdWUgd291bGQgYmUgdXNlZnVsIHRvIHR1bmUgdGhyYXNoaW5nIGJlaGF2aW9yLgorCisyLjUgL3Byb2Mvc3lzL2RldiAtIERldmljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1cnJlbnRseSB0aGVyZSBpcyBvbmx5IHN1cHBvcnQgZm9yIENEUk9NIGRyaXZlcywgYW5kIGZvciB0aG9zZSwgdGhlcmUgaXMgb25seQorb25lIHJlYWQtb25seSAgZmlsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDRC1ST00gZHJpdmVzIGF0dGFjaGVkIHRvCit0aGUgc3lzdGVtOgorCisgID5jYXQgL3Byb2Mvc3lzL2Rldi9jZHJvbS9pbmZvIAorICBDRC1ST00gaW5mb3JtYXRpb24sIElkOiBjZHJvbS5jIDIuNTUgMTk5OS8wNC8yNSAKKyAgIAorICBkcml2ZSBuYW1lOiAgICAgICAgICAgICBzcjAgICAgIGhkYiAKKyAgZHJpdmUgc3BlZWQ6ICAgICAgICAgICAgMzIgICAgICA0MCAKKyAgZHJpdmUgIyBvZiBzbG90czogICAgICAgMSAgICAgICAwIAorICBDYW4gY2xvc2UgdHJheTogICAgICAgICAxICAgICAgIDEgCisgIENhbiBvcGVuIHRyYXk6ICAgICAgICAgIDEgICAgICAgMSAKKyAgQ2FuIGxvY2sgdHJheTogICAgICAgICAgMSAgICAgICAxIAorICBDYW4gY2hhbmdlIHNwZWVkOiAgICAgICAxICAgICAgIDEgCisgIENhbiBzZWxlY3QgZGlzazogICAgICAgIDAgICAgICAgMSAKKyAgQ2FuIHJlYWQgbXVsdGlzZXNzaW9uOiAgMSAgICAgICAxIAorICBDYW4gcmVhZCBNQ046ICAgICAgICAgICAxICAgICAgIDEgCisgIFJlcG9ydHMgbWVkaWEgY2hhbmdlZDogIDEgICAgICAgMSAKKyAgQ2FuIHBsYXkgYXVkaW86ICAgICAgICAgMSAgICAgICAxIAorCisKK1lvdSBzZWUgdHdvIGRyaXZlcywgc3IwIGFuZCBoZGIsIGFsb25nIHdpdGggYSBsaXN0IG9mIHRoZWlyIGZlYXR1cmVzLgorCisyLjYgL3Byb2Mvc3lzL3N1bnJwYyAtIFJlbW90ZSBwcm9jZWR1cmUgY2FsbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRpcmVjdG9yeSAgY29udGFpbnMgZm91ciBmaWxlcywgd2hpY2ggZW5hYmxlIG9yIGRpc2FibGUgZGVidWdnaW5nIGZvciB0aGUKK1JQQyBmdW5jdGlvbnMgTkZTLCBORlMtZGFlbW9uLCBSUEMgYW5kIE5MTS4gVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSAwLiBUaGV5IGNhbgorYmUgc2V0IHRvIG9uZSB0byB0dXJuIGRlYnVnZ2luZyBvbi4gKFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAgZm9yIGVhY2gpCisKKzIuNyAvcHJvYy9zeXMvbmV0IC0gTmV0d29ya2luZyBzdHVmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbnRlcmZhY2UgIHRvICB0aGUgIG5ldHdvcmtpbmcgIHBhcnRzICBvZiAgdGhlICBrZXJuZWwgIGlzICBsb2NhdGVkICBpbgorL3Byb2Mvc3lzL25ldC4gVGFibGUgIDItMyAgc2hvd3MgYWxsIHBvc3NpYmxlIHN1YmRpcmVjdG9yaWVzLiBZb3UgbWF5IHNlZSBvbmx5Citzb21lIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB5b3VyIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uCisKKworVGFibGUgMi0zOiBTdWJkaXJlY3RvcmllcyBpbiAvcHJvYy9zeXMvbmV0IAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRGlyZWN0b3J5IENvbnRlbnQgICAgICAgICAgICAgRGlyZWN0b3J5ICBDb250ZW50ICAgICAgICAgICAgCisgY29yZSAgICAgIEdlbmVyYWwgcGFyYW1ldGVyICAgYXBwbGV0YWxrICBBcHBsZXRhbGsgcHJvdG9jb2wgCisgdW5peCAgICAgIFVuaXggZG9tYWluIHNvY2tldHMgbmV0cm9tICAgICBORVQvUk9NICAgICAgICAgICAgCisgODAyICAgICAgIEU4MDIgcHJvdG9jb2wgICAgICAgYXgyNSAgICAgICBBWDI1ICAgICAgICAgICAgICAgCisgZXRoZXJuZXQgIEV0aGVybmV0IHByb3RvY29sICAgcm9zZSAgICAgICBYLjI1IFBMUCBsYXllciAgICAgCisgaXB2NCAgICAgIElQIHZlcnNpb24gNCAgICAgICAgeDI1ICAgICAgICBYLjI1IHByb3RvY29sICAgICAgCisgaXB4ICAgICAgIElQWCAgICAgICAgICAgICAgICAgdG9rZW4tcmluZyBJQk0gdG9rZW4gcmluZyAgICAgCisgYnJpZGdlICAgIEJyaWRnaW5nICAgICAgICAgICAgZGVjbmV0ICAgICBERUMgbmV0ICAgICAgICAgICAgCisgaXB2NiAgICAgIElQIHZlcnNpb24gNiAgICAgICAgICAgICAgICAgICAKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitXZSB3aWxsICBjb25jZW50cmF0ZSAgb24gSVAgbmV0d29ya2luZyBoZXJlLiBTaW5jZSBBWDE1LCBYLjI1LCBhbmQgREVDIE5ldCBhcmUKK29ubHkgbWlub3IgcGxheWVycyBpbiB0aGUgTGludXggd29ybGQsIHdlJ2xsIHNraXAgdGhlbSBpbiB0aGlzIGNoYXB0ZXIuIFlvdSdsbAorZmluZCBzb21lICBzaG9ydCAgaW5mbyBvbiBBcHBsZXRhbGsgYW5kIElQWCBmdXJ0aGVyIG9uIGluIHRoaXMgY2hhcHRlci4gUmV2aWV3Cit0aGUgb25saW5lICBkb2N1bWVudGF0aW9uICBhbmQgdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgZGV0YWlsZWQgdmlldyBvZiB0aGUKK3BhcmFtZXRlcnMgZm9yICB0aG9zZSAgcHJvdG9jb2xzLiAgSW4gIHRoaXMgIHNlY3Rpb24gIHdlJ2xsICBkaXNjdXNzICB0aGUKK3N1YmRpcmVjdG9yaWVzIHByaW50ZWQgIGluICBib2xkIGxldHRlcnMgaW4gdGhlIHRhYmxlIGFib3ZlLiBBcyBkZWZhdWx0IHZhbHVlcworYXJlIHN1aXRhYmxlIGZvciBtb3N0IG5lZWRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoYW5nZSB0aGVzZSB2YWx1ZXMuCisKKy9wcm9jL3N5cy9uZXQvY29yZSAtIE5ldHdvcmsgY29yZSBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitybWVtX2RlZmF1bHQKKy0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgaW4gYnl0ZXMuCisKK3JtZW1fbWF4CistLS0tLS0tLQorCitUaGUgbWF4aW11bSByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KKword21lbV9kZWZhdWx0CistLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgc2V0dGluZyAoaW4gYnl0ZXMpIG9mIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIuCisKK3dtZW1fbWF4CistLS0tLS0tLQorCitUaGUgbWF4aW11bSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KKworbWVzc2FnZV9idXJzdCBhbmQgbWVzc2FnZV9jb3N0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgcGFyYW1ldGVycyAgYXJlIHVzZWQgdG8gbGltaXQgdGhlIHdhcm5pbmcgbWVzc2FnZXMgd3JpdHRlbiB0byB0aGUga2VybmVsCitsb2cgZnJvbSAgdGhlICBuZXR3b3JraW5nICBjb2RlLiAgVGhleSAgZW5mb3JjZSAgYSAgcmF0ZSAgbGltaXQgIHRvICBtYWtlICBhCitkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2sgIGltcG9zc2libGUuIEEgaGlnaGVyIG1lc3NhZ2VfY29zdCBmYWN0b3IsIHJlc3VsdHMgaW4KK2Zld2VyIG1lc3NhZ2VzIHRoYXQgd2lsbCBiZSB3cml0dGVuLiBNZXNzYWdlX2J1cnN0IGNvbnRyb2xzIHdoZW4gbWVzc2FnZXMgd2lsbAorYmUgZHJvcHBlZC4gIFRoZSAgZGVmYXVsdCAgc2V0dGluZ3MgIGxpbWl0ICB3YXJuaW5nIG1lc3NhZ2VzIHRvIG9uZSBldmVyeSBmaXZlCitzZWNvbmRzLgorCituZXRkZXZfbWF4X2JhY2tsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitNYXhpbXVtIG51bWJlciAgb2YgIHBhY2tldHMsICBxdWV1ZWQgIG9uICB0aGUgIElOUFVUICBzaWRlLCB3aGVuIHRoZSBpbnRlcmZhY2UKK3JlY2VpdmVzIHBhY2tldHMgZmFzdGVyIHRoYW4ga2VybmVsIGNhbiBwcm9jZXNzIHRoZW0uCisKK29wdG1lbV9tYXgKKy0tLS0tLS0tLS0KKworTWF4aW11bSBhbmNpbGxhcnkgYnVmZmVyIHNpemUgYWxsb3dlZCBwZXIgc29ja2V0LiBBbmNpbGxhcnkgZGF0YSBpcyBhIHNlcXVlbmNlCitvZiBzdHJ1Y3QgY21zZ2hkciBzdHJ1Y3R1cmVzIHdpdGggYXBwZW5kZWQgZGF0YS4KKworL3Byb2Mvc3lzL25ldC91bml4IC0gUGFyYW1ldGVycyBmb3IgVW5peCBkb21haW4gc29ja2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgIG9ubHkgIHR3byAgZmlsZXMgIGluIHRoaXMgc3ViZGlyZWN0b3J5LiBUaGV5IGNvbnRyb2wgdGhlIGRlbGF5cyBmb3IKK2RlbGV0aW5nIGFuZCBkZXN0cm95aW5nIHNvY2tldCBkZXNjcmlwdG9ycy4KKworMi44IC9wcm9jL3N5cy9uZXQvaXB2NCAtIElQVjQgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lQIHZlcnNpb24gIDQgIGlzICBzdGlsbCB0aGUgbW9zdCB1c2VkIHByb3RvY29sIGluIFVuaXggbmV0d29ya2luZy4gSXQgd2lsbCBiZQorcmVwbGFjZWQgYnkgIElQIHZlcnNpb24gNiBpbiB0aGUgbmV4dCBjb3VwbGUgb2YgeWVhcnMsIGJ1dCBmb3IgdGhlIG1vbWVudCBpdCdzCit0aGUgZGUgIGZhY3RvICBzdGFuZGFyZCAgZm9yICB0aGUgIGludGVybmV0ICBhbmQgIGlzICB1c2VkICBpbiBtb3N0IG5ldHdvcmtpbmcKK2Vudmlyb25tZW50cyBhcm91bmQgIHRoZSAgd29ybGQuICBCZWNhdXNlICBvZiB0aGUgaW1wb3J0YW5jZSBvZiB0aGlzIHByb3RvY29sLAord2UnbGwgaGF2ZSBhIGRlZXBlciBsb29rIGludG8gdGhlIHN1YnRyZWUgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBJUHY0CitzdWJzeXN0ZW0gb2YgdGhlIExpbnV4IGtlcm5lbC4KKworTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZW50cmllcyBpbiAvcHJvYy9zeXMvbmV0L2lwdjQuCisKK0lDTVAgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0KKworaWNtcF9lY2hvX2lnbm9yZV9hbGwgYW5kIGljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUdXJuIG9uICgxKSBvciBvZmYgKDApLCBpZiB0aGUga2VybmVsIHNob3VsZCBpZ25vcmUgYWxsIElDTVAgRUNITyByZXF1ZXN0cywgb3IKK2p1c3QgdGhvc2UgdG8gYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzLgorCitQbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdSBhY2NlcHQgSUNNUCBlY2hvIHJlcXVlc3RzIHdpdGggYSBicm9hZGNhc3QvbXVsdGlcLWNhc3QKK2Rlc3RpbmF0aW9uIGFkZHJlc3MgIHlvdXIgIG5ldHdvcmsgIG1heSAgYmUgIHVzZWQgYXMgYW4gZXhwbG9kZXIgZm9yIGRlbmlhbCBvZgorc2VydmljZSBwYWNrZXQgZmxvb2RpbmcgYXR0YWNrcyB0byBvdGhlciBob3N0cy4KKworaWNtcF9kZXN0dW5yZWFjaF9yYXRlLCBpY21wX2VjaG9yZXBseV9yYXRlLCBpY21wX3BhcmFtcHJvYl9yYXRlIGFuZCBpY21wX3RpbWVleGVlZF9yYXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2V0cyBsaW1pdHMgIGZvciAgc2VuZGluZyAgSUNNUCAgcGFja2V0cyAgdG8gc3BlY2lmaWMgdGFyZ2V0cy4gQSB2YWx1ZSBvZiB6ZXJvCitkaXNhYmxlcyBhbGwgIGxpbWl0aW5nLiAgQW55ICBwb3NpdGl2ZSAgdmFsdWUgc2V0cyB0aGUgbWF4aW11bSBwYWNrYWdlIHJhdGUgaW4KK2h1bmRyZWR0aCBvZiBhIHNlY29uZCAob24gSW50ZWwgc3lzdGVtcykuCisKK0lQIHNldHRpbmdzCistLS0tLS0tLS0tLQorCitpcF9hdXRvY29uZmlnCistLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgbnVtYmVyIG9uZSBpZiB0aGUgaG9zdCByZWNlaXZlZCBpdHMgSVAgY29uZmlndXJhdGlvbiBieQorUkFSUCwgQk9PVFAsIERIQ1Agb3IgYSBzaW1pbGFyIG1lY2hhbmlzbS4gT3RoZXJ3aXNlIGl0IGlzIHplcm8uCisKK2lwX2RlZmF1bHRfdHRsCistLS0tLS0tLS0tLS0tLQorCitUVEwgKFRpbWUgIFRvICBMaXZlKSBmb3IgSVB2NCBpbnRlcmZhY2VzLiBUaGlzIGlzIHNpbXBseSB0aGUgbWF4aW11bSBudW1iZXIgb2YKK2hvcHMgYSBwYWNrZXQgbWF5IHRyYXZlbC4KKworaXBfZHluYWRkcgorLS0tLS0tLS0tLQorCitFbmFibGUgZHluYW1pYyAgc29ja2V0ICBhZGRyZXNzIHJld3JpdGluZyBvbiBpbnRlcmZhY2UgYWRkcmVzcyBjaGFuZ2UuIFRoaXMgaXMKK3VzZWZ1bCBmb3IgZGlhbHVwIGludGVyZmFjZSB3aXRoIGNoYW5naW5nIElQIGFkZHJlc3Nlcy4KKworaXBfZm9yd2FyZAorLS0tLS0tLS0tLQorCitFbmFibGUgb3IgIGRpc2FibGUgZm9yd2FyZGluZyBvZiBJUCBwYWNrYWdlcyBiZXR3ZWVuIGludGVyZmFjZXMuIENoYW5naW5nIHRoaXMKK3ZhbHVlIHJlc2V0cyAgYWxsIG90aGVyIHBhcmFtZXRlcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIFRoZXkgZGlmZmVyIGlmIHRoZQora2VybmVsIGlzIGNvbmZpZ3VyZWQgYXMgaG9zdCBvciByb3V0ZXIuCisKK2lwX2xvY2FsX3BvcnRfcmFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmFuZ2Ugb2YgIHBvcnRzICB1c2VkICBieSAgVENQICBhbmQgVURQIHRvIGNob29zZSB0aGUgbG9jYWwgcG9ydC4gQ29udGFpbnMgdHdvCitudW1iZXJzLCB0aGUgIGZpcnN0ICBudW1iZXIgIGlzIHRoZSBsb3dlc3QgcG9ydCwgdGhlIHNlY29uZCBudW1iZXIgdGhlIGhpZ2hlc3QKK2xvY2FsIHBvcnQuICBEZWZhdWx0ICBpcyAgMTAyNC00OTk5LiAgU2hvdWxkICBiZSAgY2hhbmdlZCAgdG8gIDMyNzY4LTYxMDAwIGZvcgoraGlnaC11c2FnZSBzeXN0ZW1zLgorCitpcF9ub19wbXR1X2Rpc2MKKy0tLS0tLS0tLS0tLS0tLQorCitHbG9iYWwgc3dpdGNoICB0byAgdHVybiAgcGF0aCAgTVRVICBkaXNjb3Zlcnkgb2ZmLiBJdCBjYW4gYWxzbyBiZSBzZXQgb24gYSBwZXIKK3NvY2tldCBiYXNpcyBieSB0aGUgYXBwbGljYXRpb25zIG9yIG9uIGEgcGVyIHJvdXRlIGJhc2lzLgorCitpcF9tYXNxX2RlYnVnCistLS0tLS0tLS0tLS0tCisKK0VuYWJsZS9kaXNhYmxlIGRlYnVnZ2luZyBvZiBJUCBtYXNxdWVyYWRpbmcuCisKK0lQIGZyYWdtZW50YXRpb24gc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaXBmcmFnX2hpZ2hfdHJhc2ggYW5kIGlwZnJhZ19sb3dfdHJhc2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01heGltdW0gbWVtb3J5ICB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIGlwZnJhZ19oaWdoX3RocmVzaCBieXRlcworb2YgbWVtb3J5ICBpcyAgYWxsb2NhdGVkICBmb3IgIHRoaXMgIHB1cnBvc2UsICB0aGUgIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzCitwYWNrZXRzIHVudGlsIGlwZnJhZ19sb3dfdGhyZXNoIGlzIHJlYWNoZWQuCisKK2lwZnJhZ190aW1lCistLS0tLS0tLS0tLQorCitUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCisKK1RDUCBzZXR0aW5ncworLS0tLS0tLS0tLS0tCisKK3RjcF9lY24KKy0tLS0tLS0KKworVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSB1c2Ugb2YgdGhlIEVDTiBiaXQgaW4gdGhlIElQdjQgaGVhZGVycywgdGhpcyBpcyBhIG5ldworZmVhdHVyZSBhYm91dCBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiwgYnV0IHNvbWUgcm91dGVycyBhbmQgZmlyZXdhbGxzCitibG9jayB0cmFmaWMgdGhhdCBoYXMgdGhpcyBiaXQgc2V0LCBzbyBpdCBjb3VsZCBiZSBuZWNlc3NhcnkgdG8gZWNobyAwIHRvCisvcHJvYy9zeXMvbmV0L2lwdjQvdGNwX2VjbiwgaWYgeW91IHdhbnQgdG8gdGFsayB0byB0aGlzIHNpdGVzLiBGb3IgbW9yZSBpbmZvCit5b3UgY291bGQgcmVhZCBSRkMyNDgxLgorCit0Y3BfcmV0cmFuc19jb2xsYXBzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuIE9uIHJldHJhbnNtaXQsIHRyeSB0byBzZW5kCitsYXJnZXIgcGFja2V0cyB0byB3b3JrIGFyb3VuZCBidWdzIGluIGNlcnRhaW4gVENQIHN0YWNrcy4gQ2FuIGJlIHR1cm5lZCBvZmYgYnkKK3NldHRpbmcgaXQgdG8gemVyby4KKwordGNwX2tlZXBhbGl2ZV9wcm9iZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK051bWJlciBvZiAga2VlcCAgYWxpdmUgIHByb2JlcyAgVENQICBzZW5kcyAgb3V0LCAgdW50aWwgIGl0ICBkZWNpZGVzICB0aGF0IHRoZQorY29ubmVjdGlvbiBpcyBicm9rZW4uCisKK3RjcF9rZWVwYWxpdmVfdGltZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hvdyBvZnRlbiAgVENQICBzZW5kcyBvdXQga2VlcCBhbGl2ZSBtZXNzYWdlcywgd2hlbiBrZWVwIGFsaXZlIGlzIGVuYWJsZWQuIFRoZQorZGVmYXVsdCBpcyAyIGhvdXJzLgorCit0Y3Bfc3luX3JldHJpZXMKKy0tLS0tLS0tLS0tLS0tLQorCitOdW1iZXIgb2YgIHRpbWVzICBpbml0aWFsICBTWU5zICBmb3IgIGEgIFRDUCAgY29ubmVjdGlvbiAgYXR0ZW1wdCAgd2lsbCAgYmUKK3JldHJhbnNtaXR0ZWQuIFNob3VsZCAgbm90ICBiZSAgaGlnaGVyICB0aGFuIDI1NS4gVGhpcyBpcyBvbmx5IHRoZSB0aW1lb3V0IGZvcgorb3V0Z29pbmcgY29ubmVjdGlvbnMsICBmb3IgIGluY29taW5nICBjb25uZWN0aW9ucyB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXRzIGlzCitkZWZpbmVkIGJ5IHRjcF9yZXRyaWVzMS4KKwordGNwX3NhY2sKKy0tLS0tLS0tCisKK0VuYWJsZSBzZWxlY3QgYWNrbm93bGVkZ21lbnRzIGFmdGVyIFJGQzIwMTguCisKK3RjcF90aW1lc3RhbXBzCistLS0tLS0tLS0tLS0tLQorCitFbmFibGUgdGltZXN0YW1wcyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCisKK3RjcF9zdGR1cmcKKy0tLS0tLS0tLS0KKworRW5hYmxlIHRoZSAgc3RyaWN0ICBSRkM3OTMgaW50ZXJwcmV0YXRpb24gb2YgdGhlIFRDUCB1cmdlbnQgcG9pbnRlciBmaWVsZC4gVGhlCitkZWZhdWx0IGlzICB0byAgdXNlICB0aGUgIEJTRCAgY29tcGF0aWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdXJnZW50IHBvaW50ZXIKK3BvaW50aW5nIHRvIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSB1cmdlbnQgZGF0YS4gVGhlIFJGQzc5MyBpbnRlcnByZXRhdGlvbiBpcwordG8gaGF2ZSAgaXQgIHBvaW50ICB0byAgdGhlIGxhc3QgYnl0ZSBvZiB1cmdlbnQgZGF0YS4gRW5hYmxpbmcgdGhpcyBvcHRpb24gbWF5CitsZWFkIHRvIGludGVyb3BlcmF0aWJpbGl0eSBwcm9ibGVtcy4gRGlzYWJsZWQgYnkgZGVmYXVsdC4KKwordGNwX3N5bmNvb2tpZXMKKy0tLS0tLS0tLS0tLS0tCisKK09ubHkgdmFsaWQgIHdoZW4gIHRoZSAga2VybmVsICB3YXMgIGNvbXBpbGVkICB3aXRoIENPTkZJR19TWU5DT09LSUVTLiBTZW5kIG91dAorc3luY29va2llcyB3aGVuICB0aGUgIHN5biBiYWNrbG9nIHF1ZXVlIG9mIGEgc29ja2V0IG92ZXJmbG93cy4gVGhpcyBpcyB0byB3YXJkCitvZmYgdGhlIGNvbW1vbiAnc3luIGZsb29kIGF0dGFjaycuIERpc2FibGVkIGJ5IGRlZmF1bHQuCisKK05vdGUgdGhhdCAgdGhlICBjb25jZXB0ICBvZiBhIHNvY2tldCBiYWNrbG9nIGlzIGFiYW5kb25lZC4gVGhpcyBtZWFucyB0aGUgcGVlcgorbWF5IG5vdCAgcmVjZWl2ZSAgcmVsaWFibGUgIGVycm9yICBtZXNzYWdlcyAgZnJvbSAgYW4gIG92ZXIgbG9hZGVkIHNlcnZlciB3aXRoCitzeW5jb29raWVzIGVuYWJsZWQuCisKK3RjcF93aW5kb3dfc2NhbGluZworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VuYWJsZSB3aW5kb3cgc2NhbGluZyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCisKK3RjcF9maW5fdGltZW91dAorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsZW5ndGggIG9mICB0aW1lICBpbiAgc2Vjb25kcyAgaXQgIHRha2VzIHRvIHJlY2VpdmUgYSBmaW5hbCBGSU4gYmVmb3JlIHRoZQorc29ja2V0IGlzICBhbHdheXMgIGNsb3NlZC4gIFRoaXMgIGlzICBzdHJpY3RseSAgYSAgdmlvbGF0aW9uICBvZiAgdGhlICBUQ1AKK3NwZWNpZmljYXRpb24sIGJ1dCByZXF1aXJlZCB0byBwcmV2ZW50IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MuCisKK3RjcF9tYXhfa2FfcHJvYmVzCistLS0tLS0tLS0tLS0tLS0tLQorCitJbmRpY2F0ZXMgaG93ICBtYW55ICBrZWVwIGFsaXZlIHByb2JlcyBhcmUgc2VudCBwZXIgc2xvdyB0aW1lciBydW4uIFNob3VsZCBub3QKK2JlIHNldCB0b28gaGlnaCB0byBwcmV2ZW50IGJ1cnN0cy4KKwordGNwX21heF9zeW5fYmFja2xvZworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMZW5ndGggb2YgIHRoZSBwZXIgc29ja2V0IGJhY2tsb2cgcXVldWUuIFNpbmNlIExpbnV4IDIuMiB0aGUgYmFja2xvZyBzcGVjaWZpZWQKK2luIGxpc3RlbigyKSAgb25seSAgc3BlY2lmaWVzICB0aGUgIGxlbmd0aCAgb2YgIHRoZSAgYmFja2xvZyAgcXVldWUgb2YgYWxyZWFkeQorZXN0YWJsaXNoZWQgc29ja2V0cy4gV2hlbiBtb3JlIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJyaXZlIExpbnV4IHN0YXJ0cyB0byBkcm9wCitwYWNrZXRzLiBXaGVuICBzeW5jb29raWVzICBhcmUgIGVuYWJsZWQgdGhlIHBhY2tldHMgYXJlIHN0aWxsIGFuc3dlcmVkIGFuZCB0aGUKK21heGltdW0gcXVldWUgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC4KKwordGNwX3JldHJpZXMxCistLS0tLS0tLS0tLS0KKworRGVmaW5lcyBob3cgIG9mdGVuICBhbiAgYW5zd2VyICB0byAgYSAgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyByZXRyYW5zbWl0dGVkCitiZWZvcmUgZ2l2aW5nIHVwLgorCit0Y3BfcmV0cmllczIKKy0tLS0tLS0tLS0tLQorCitEZWZpbmVzIGhvdyBvZnRlbiBhIFRDUCBwYWNrZXQgaXMgcmV0cmFuc21pdHRlZCBiZWZvcmUgZ2l2aW5nIHVwLgorCitJbnRlcmZhY2Ugc3BlY2lmaWMgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGUgZGlyZWN0b3J5IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mIHlvdSdsbCBmaW5kIG9uZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2gKK2ludGVyZmFjZSB0aGUgIHN5c3RlbSAga25vd3MgYWJvdXQgYW5kIG9uZSBkaXJlY3RvcnkgY2FsbHMgYWxsLiBDaGFuZ2VzIGluIHRoZQorYWxsIHN1YmRpcmVjdG9yeSAgYWZmZWN0ICBhbGwgIGludGVyZmFjZXMsICB3aGVyZWFzICBjaGFuZ2VzICBpbiAgdGhlICBvdGhlcgorc3ViZGlyZWN0b3JpZXMgYWZmZWN0ICBvbmx5ICBvbmUgIGludGVyZmFjZS4gIEFsbCAgZGlyZWN0b3JpZXMgIGhhdmUgIHRoZSBzYW1lCitlbnRyaWVzOgorCithY2NlcHRfcmVkaXJlY3RzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3dpdGNoICBkZWNpZGVzICBpZiB0aGUga2VybmVsIGFjY2VwdHMgSUNNUCByZWRpcmVjdCBtZXNzYWdlcyBvciBub3QuIFRoZQorZGVmYXVsdCBpcyAneWVzJyBpZiB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgZm9yIGEgcmVndWxhciBob3N0IGFuZCAnbm8nIGZvciBhCityb3V0ZXIgY29uZmlndXJhdGlvbi4KKworYWNjZXB0X3NvdXJjZV9yb3V0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaG91bGQgc291cmNlICByb3V0ZWQgIHBhY2thZ2VzICBiZSAgYWNjZXB0ZWQgIG9yICBkZWNsaW5lZC4gIFRoZSAgZGVmYXVsdCAgaXMKK2RlcGVuZGVudCBvbiAgdGhlICBrZXJuZWwgIGNvbmZpZ3VyYXRpb24uICBJdCdzICd5ZXMnIGZvciByb3V0ZXJzIGFuZCAnbm8nIGZvcgoraG9zdHMuCisKK2Jvb3RwX3JlbGF5Cit+fn5+fn5+fn5+fgorCitBY2NlcHQgcGFja2V0cyAgd2l0aCBzb3VyY2UgYWRkcmVzcyAwLmIuYy5kIHdpdGggZGVzdGluYXRpb25zIG5vdCB0byB0aGlzIGhvc3QKK2FzIGxvY2FsIG9uZXMuIEl0IGlzIHN1cHBvc2VkIHRoYXQgYSBCT09UUCByZWxheSBkYWVtb24gd2lsbCBjYXRjaCBhbmQgZm9yd2FyZAorc3VjaCBwYWNrZXRzLgorCitUaGUgZGVmYXVsdCAgaXMgIDAsICBzaW5jZSB0aGlzIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIHlldCAoa2VybmVsIHZlcnNpb24KKzIuMi4xMikuCisKK2ZvcndhcmRpbmcKKy0tLS0tLS0tLS0KKworRW5hYmxlIG9yIGRpc2FibGUgSVAgZm9yd2FyZGluZyBvbiB0aGlzIGludGVyZmFjZS4KKworbG9nX21hcnRpYW5zCistLS0tLS0tLS0tLS0KKworTG9nIHBhY2tldHMgd2l0aCBzb3VyY2UgYWRkcmVzc2VzIHdpdGggbm8ga25vd24gcm91dGUgdG8ga2VybmVsIGxvZy4KKworbWNfZm9yd2FyZGluZworLS0tLS0tLS0tLS0tLQorCitEbyBtdWx0aWNhc3Qgcm91dGluZy4gVGhlIGtlcm5lbCBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIENPTkZJR19NUk9VVEUgYW5kIGEKK211bHRpY2FzdCByb3V0aW5nIGRhZW1vbiBpcyByZXF1aXJlZC4KKworcHJveHlfYXJwCistLS0tLS0tLS0KKworRG9lcyAoMSkgb3IgZG9lcyBub3QgKDApIHBlcmZvcm0gcHJveHkgQVJQLgorCitycF9maWx0ZXIKKy0tLS0tLS0tLQorCitJbnRlZ2VyIHZhbHVlIGRldGVybWluZXMgaWYgYSBzb3VyY2UgdmFsaWRhdGlvbiBzaG91bGQgYmUgbWFkZS4gMSBtZWFucyB5ZXMsIDAKK21lYW5zIG5vLiAgRGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxvY2FsL2Jyb2FkY2FzdCBhZGRyZXNzIHNwb29maW5nIGlzIGFsd2F5cworb24uCisKK0lmIHlvdSAgc2V0IHRoaXMgdG8gMSBvbiBhIHJvdXRlciB0aGF0IGlzIHRoZSBvbmx5IGNvbm5lY3Rpb24gZm9yIGEgbmV0d29yayB0bwordGhlIG5ldCwgIGl0ICB3aWxsICBwcmV2ZW50ICBzcG9vZmluZyAgYXR0YWNrcyAgYWdhaW5zdCB5b3VyIGludGVybmFsIG5ldHdvcmtzCisoZXh0ZXJuYWwgYWRkcmVzc2VzICBjYW4gIHN0aWxsICBiZSAgc3Bvb2ZlZCksIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGFkZGl0aW9uYWwKK2ZpcmV3YWxsIHJ1bGVzLgorCitzZWN1cmVfcmVkaXJlY3RzCistLS0tLS0tLS0tLS0tLS0tCisKK0FjY2VwdCBJQ01QICByZWRpcmVjdCAgbWVzc2FnZXMgIG9ubHkgIGZvciBnYXRld2F5cywgbGlzdGVkIGluIGRlZmF1bHQgZ2F0ZXdheQorbGlzdC4gRW5hYmxlZCBieSBkZWZhdWx0LgorCitzaGFyZWRfbWVkaWEKKy0tLS0tLS0tLS0tLQorCitJZiBpdCAgaXMgIG5vdCAgc2V0ICB0aGUga2VybmVsIGRvZXMgbm90IGFzc3VtZSB0aGF0IGRpZmZlcmVudCBzdWJuZXRzIG9uIHRoaXMKK2RldmljZSBjYW4gY29tbXVuaWNhdGUgZGlyZWN0bHkuIERlZmF1bHQgc2V0dGluZyBpcyAneWVzJy4KKworc2VuZF9yZWRpcmVjdHMKKy0tLS0tLS0tLS0tLS0tCisKK0RldGVybWluZXMgd2hldGhlciB0byBzZW5kIElDTVAgcmVkaXJlY3RzIHRvIG90aGVyIGhvc3RzLgorCitSb3V0aW5nIHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaXJlY3RvcnkgIC9wcm9jL3N5cy9uZXQvaXB2NC9yb3V0ZSAgY29udGFpbnMgIHNldmVyYWwgIGZpbGUgIHRvICBjb250cm9sCityb3V0aW5nIGlzc3Vlcy4KKworZXJyb3JfYnVyc3QgYW5kIGVycm9yX2Nvc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlICBwYXJhbWV0ZXJzICBhcmUgdXNlZCB0byBsaW1pdCBob3cgbWFueSBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIHRvIAorc2VuZCAgZnJvbSAgdGhlICBob3N0ICBpbiBxdWVzdGlvbi4gSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBtZXNzYWdlcyBhcmUgCitzZW50ICB3aGVuICB3ZSBjYW4gbm90IHJlYWNoIHRoZSBuZXh0IGhvcCwgd2hpbGUgdHJ5aW5nIHRvIHRyYW5zbWl0IGEgcGFja2V0LiAKK0l0ICB3aWxsIGFsc28gcHJpbnQgc29tZSBlcnJvciBtZXNzYWdlcyB0byBrZXJuZWwgbG9ncyBpZiBzb21lb25lIGlzIGlnbm9yaW5nIAorb3VyICAgSUNNUCAgcmVkaXJlY3RzLiAgVGhlICBoaWdoZXIgIHRoZSAgZXJyb3JfY29zdCAgZmFjdG9yICBpcywgIHRoZSAgZmV3ZXIgCitkZXN0aW5hdGlvbiAgdW5yZWFjaGFibGUgIGFuZCBlcnJvciBtZXNzYWdlcyB3aWxsIGJlIGxldCB0aHJvdWdoLiBFcnJvcl9idXJzdCAKK2NvbnRyb2xzICB3aGVuICBkZXN0aW5hdGlvbiAgdW5yZWFjaGFibGUgIG1lc3NhZ2VzIGFuZCBlcnJvciBtZXNzYWdlcyB3aWxsIGJlCitkcm9wcGVkLiBUaGUgZGVmYXVsdCBzZXR0aW5ncyBsaW1pdCB3YXJuaW5nIG1lc3NhZ2VzIHRvIGZpdmUgZXZlcnkgc2Vjb25kLgorCitmbHVzaAorLS0tLS0KKworV3JpdGluZyB0byB0aGlzIGZpbGUgcmVzdWx0cyBpbiBhIGZsdXNoIG9mIHRoZSByb3V0aW5nIGNhY2hlLgorCitnY19lbGFzdGljaXR5LCBnY19pbnRlcnZhbCwgZ2NfbWluX2ludGVydmFsX21zLCBnY190aW1lb3V0LCBnY190aHJlc2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWYWx1ZXMgdG8gIGNvbnRyb2wgIHRoZSAgZnJlcXVlbmN5ICBhbmQgIGJlaGF2aW9yICBvZiAgdGhlICBnYXJiYWdlIGNvbGxlY3Rpb24KK2FsZ29yaXRobSBmb3IgdGhlIHJvdXRpbmcgY2FjaGUuIGdjX21pbl9pbnRlcnZhbCBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZAorYnkgZ2NfbWluX2ludGVydmFsX21zLgorCisKK21heF9zaXplCistLS0tLS0tLQorCitNYXhpbXVtIHNpemUgIG9mICB0aGUgcm91dGluZyBjYWNoZS4gT2xkIGVudHJpZXMgd2lsbCBiZSBwdXJnZWQgb25jZSB0aGUgY2FjaGUKK3JlYWNoZWQgaGFzIHRoaXMgc2l6ZS4KKworbWF4X2RlbGF5LCBtaW5fZGVsYXkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlbGF5cyBmb3IgZmx1c2hpbmcgdGhlIHJvdXRpbmcgY2FjaGUuCisKK3JlZGlyZWN0X2xvYWQsIHJlZGlyZWN0X251bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZhY3RvcnMgd2hpY2ggIGRldGVybWluZSAgaWYgIG1vcmUgSUNQTSByZWRpcmVjdHMgc2hvdWxkIGJlIHNlbnQgdG8gYSBzcGVjaWZpYworaG9zdC4gTm8gIHJlZGlyZWN0cyAgd2lsbCBiZSBzZW50IG9uY2UgdGhlIGxvYWQgbGltaXQgb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mCityZWRpcmVjdHMgaGFzIGJlZW4gcmVhY2hlZC4KKworcmVkaXJlY3Rfc2lsZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaW1lb3V0IGZvciByZWRpcmVjdHMuIEFmdGVyIHRoaXMgcGVyaW9kIHJlZGlyZWN0cyB3aWxsIGJlIHNlbnQgYWdhaW4sIGV2ZW4gaWYKK3RoaXMgaGFzIGJlZW4gc3RvcHBlZCwgYmVjYXVzZSB0aGUgbG9hZCBvciBudW1iZXIgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KKworTmV0d29yayBOZWlnaGJvciBoYW5kbGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXR0aW5ncyBhYm91dCBob3cgdG8gaGFuZGxlIGNvbm5lY3Rpb25zIHdpdGggZGlyZWN0IG5laWdoYm9ycyAobm9kZXMgYXR0YWNoZWQKK3RvIHRoZSBzYW1lIGxpbmspIGNhbiBiZSBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IC9wcm9jL3N5cy9uZXQvaXB2NC9uZWlnaC4KKworQXMgd2UgIHNhdyAgaXQgIGluICB0aGUgIGNvbmYgZGlyZWN0b3J5LCB0aGVyZSBpcyBhIGRlZmF1bHQgc3ViZGlyZWN0b3J5IHdoaWNoCitob2xkcyB0aGUgIGRlZmF1bHQgIHZhbHVlcywgYW5kIG9uZSBkaXJlY3RvcnkgZm9yIGVhY2ggaW50ZXJmYWNlLiBUaGUgY29udGVudHMKK29mIHRoZSAgZGlyZWN0b3JpZXMgIGFyZSBpZGVudGljYWwsIHdpdGggdGhlIHNpbmdsZSBleGNlcHRpb24gdGhhdCB0aGUgZGVmYXVsdAorc2V0dGluZ3MgY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gc2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBwYXJhbWV0ZXJzLgorCitJbiB0aGUgaW50ZXJmYWNlIGRpcmVjdG9yaWVzIHlvdSdsbCBmaW5kIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKworYmFzZV9yZWFjaGFibGVfdGltZSwgYmFzZV9yZWFjaGFibGVfdGltZV9tcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGJhc2UgIHZhbHVlICB1c2VkIGZvciBjb21wdXRpbmcgdGhlIHJhbmRvbSByZWFjaGFibGUgdGltZSB2YWx1ZSBhcyBzcGVjaWZpZWQKK2luIFJGQzI0NjEuCisKK0V4cHJlc3Npb24gb2YgYmFzZV9yZWFjaGFibGVfdGltZSwgd2hpY2ggaXMgZGVwcmVjYXRlZCwgaXMgaW4gc2Vjb25kcy4KK0V4cHJlc3Npb24gb2YgYmFzZV9yZWFjaGFibGVfdGltZV9tcyBpcyBpbiBtaWxsaXNlY29uZHMuCisKK3JldHJhbnNfdGltZSwgcmV0cmFuc190aW1lX21zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGltZSBiZXR3ZWVuIHJldHJhbnNtaXR0ZWQgTmVpZ2hib3IgU29saWNpdGF0aW9uIG1lc3NhZ2VzLgorVXNlZCBmb3IgYWRkcmVzcyByZXNvbHV0aW9uIGFuZCB0byBkZXRlcm1pbmUgaWYgYSBuZWlnaGJvciBpcwordW5yZWFjaGFibGUuCisKK0V4cHJlc3Npb24gb2YgcmV0cmFuc190aW1lLCB3aGljaCBpcyBkZXByZWNhdGVkLCBpcyBpbiAxLzEwMCBzZWNvbmRzIChmb3IKK0lQdjQpIG9yIGluIGppZmZpZXMgKGZvciBJUHY2KS4KK0V4cHJlc3Npb24gb2YgcmV0cmFuc190aW1lX21zIGlzIGluIG1pbGxpc2Vjb25kcy4KKwordW5yZXNfcWxlbgorLS0tLS0tLS0tLQorCitNYXhpbXVtIHF1ZXVlICBsZW5ndGggIGZvciBhIHBlbmRpbmcgYXJwIHJlcXVlc3QgLSB0aGUgbnVtYmVyIG9mIHBhY2tldHMgd2hpY2gKK2FyZSBhY2NlcHRlZCBmcm9tIG90aGVyIGxheWVycyB3aGlsZSB0aGUgQVJQIGFkZHJlc3MgaXMgc3RpbGwgcmVzb2x2ZWQuCisKK2FueWNhc3RfZGVsYXkKKy0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBmb3IgIHJhbmRvbSAgZGVsYXkgIG9mICBhbnN3ZXJzICB0byAgbmVpZ2hib3Igc29saWNpdGF0aW9uIG1lc3NhZ2VzIGluCitqaWZmaWVzICgxLzEwMCAgc2VjKS4gTm90IHlldCBpbXBsZW1lbnRlZCAoTGludXggZG9lcyBub3QgaGF2ZSBhbnljYXN0IHN1cHBvcnQKK3lldCkuCisKK3VjYXN0X3NvbGljaXQKKy0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBmb3IgdW5pY2FzdCBzb2xpY2l0YXRpb24uCisKK21jYXN0X3NvbGljaXQKKy0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBmb3IgbXVsdGljYXN0IHNvbGljaXRhdGlvbi4KKworZGVsYXlfZmlyc3RfcHJvYmVfdGltZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWxheSBmb3IgIHRoZSAgZmlyc3QgIHRpbWUgIHByb2JlICBpZiAgdGhlICBuZWlnaGJvciAgaXMgIHJlYWNoYWJsZS4gIChzZWUKK2djX3N0YWxlX3RpbWUpCisKK2xvY2t0aW1lCistLS0tLS0tLQorCitBbiBBUlAvbmVpZ2hib3IgIGVudHJ5ICBpcyBvbmx5IHJlcGxhY2VkIHdpdGggYSBuZXcgb25lIGlmIHRoZSBvbGQgaXMgYXQgbGVhc3QKK2xvY2t0aW1lIG9sZC4gVGhpcyBwcmV2ZW50cyBBUlAgY2FjaGUgdGhyYXNoaW5nLgorCitwcm94eV9kZWxheQorLS0tLS0tLS0tLS0KKworTWF4aW11bSB0aW1lICAocmVhbCAgdGltZSBpcyByYW5kb20gWzAuLnByb3h5dGltZV0pIGJlZm9yZSBhbnN3ZXJpbmcgdG8gYW4gQVJQCityZXF1ZXN0IGZvciAgd2hpY2ggIHdlIGhhdmUgYW4gcHJveHkgQVJQIGVudHJ5LiBJbiBzb21lIGNhc2VzLCB0aGlzIGlzIHVzZWQgdG8KK3ByZXZlbnQgbmV0d29yayBmbG9vZGluZy4KKworcHJveHlfcWxlbgorLS0tLS0tLS0tLQorCitNYXhpbXVtIHF1ZXVlIGxlbmd0aCBvZiB0aGUgZGVsYXllZCBwcm94eSBhcnAgdGltZXIuIChzZWUgcHJveHlfZGVsYXkpLgorCithcHBfc29sY2l0CistLS0tLS0tLS0tCisKK0RldGVybWluZXMgdGhlICBudW1iZXIgb2YgcmVxdWVzdHMgdG8gc2VuZCB0byB0aGUgdXNlciBsZXZlbCBBUlAgZGFlbW9uLiBVc2UgMAordG8gdHVybiBvZmYuCisKK2djX3N0YWxlX3RpbWUKKy0tLS0tLS0tLS0tLS0KKworRGV0ZXJtaW5lcyBob3cgIG9mdGVuICB0byAgY2hlY2sgIGZvciBzdGFsZSBBUlAgZW50cmllcy4gQWZ0ZXIgYW4gQVJQIGVudHJ5IGlzCitzdGFsZSBpdCAgd2lsbCAgYmUgcmVzb2x2ZWQgYWdhaW4gKHdoaWNoIGlzIHVzZWZ1bCB3aGVuIGFuIElQIGFkZHJlc3MgbWlncmF0ZXMKK3RvIGFub3RoZXIgIG1hY2hpbmUpLiAgV2hlbiAgdWNhc3Rfc29saWNpdCBpcyBncmVhdGVyIHRoYW4gMCBpdCBmaXJzdCB0cmllcyB0bworc2VuZCBhbiAgQVJQICBwYWNrZXQgIGRpcmVjdGx5ICB0byAgdGhlICBrbm93biAgaG9zdCAgV2hlbiAgdGhhdCAgZmFpbHMgIGFuZAorbWNhc3Rfc29saWNpdCBpcyBncmVhdGVyIHRoYW4gMCwgYW4gQVJQIHJlcXVlc3QgaXMgYnJvYWRjYXN0ZWQuCisKKzIuOSBBcHBsZXRhbGsKKy0tLS0tLS0tLS0tLS0KKworVGhlIC9wcm9jL3N5cy9uZXQvYXBwbGV0YWxrICBkaXJlY3RvcnkgIGhvbGRzIHRoZSBBcHBsZXRhbGsgY29uZmlndXJhdGlvbiBkYXRhCit3aGVuIEFwcGxldGFsayBpcyBsb2FkZWQuIFRoZSBjb25maWd1cmFibGUgcGFyYW1ldGVycyBhcmU6CisKK2FhcnAtZXhwaXJ5LXRpbWUKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFtb3VudCAgb2YgIHRpbWUgIHdlIGtlZXAgYW4gQVJQIGVudHJ5IGJlZm9yZSBleHBpcmluZyBpdC4gVXNlZCB0byBhZ2Ugb3V0CitvbGQgaG9zdHMuCisKK2FhcnAtcmVzb2x2ZS10aW1lCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYW1vdW50IG9mIHRpbWUgd2Ugd2lsbCBzcGVuZCB0cnlpbmcgdG8gcmVzb2x2ZSBhbiBBcHBsZXRhbGsgYWRkcmVzcy4KKworYWFycC1yZXRyYW5zbWl0LWxpbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIHJldHJhbnNtaXQgYSBxdWVyeSBiZWZvcmUgZ2l2aW5nIHVwLgorCithYXJwLXRpY2stdGltZQorLS0tLS0tLS0tLS0tLS0KKworQ29udHJvbHMgdGhlIHJhdGUgYXQgd2hpY2ggZXhwaXJlcyBhcmUgY2hlY2tlZC4KKworVGhlIGRpcmVjdG9yeSAgL3Byb2MvbmV0L2FwcGxldGFsayAgaG9sZHMgdGhlIGxpc3Qgb2YgYWN0aXZlIEFwcGxldGFsayBzb2NrZXRzCitvbiBhIG1hY2hpbmUuCisKK1RoZSBmaWVsZHMgIGluZGljYXRlICB0aGUgRERQIHR5cGUsIHRoZSBsb2NhbCBhZGRyZXNzIChpbiBuZXR3b3JrOm5vZGUgZm9ybWF0KQordGhlIHJlbW90ZSAgYWRkcmVzcywgIHRoZSAgc2l6ZSBvZiB0aGUgdHJhbnNtaXQgcGVuZGluZyBxdWV1ZSwgdGhlIHNpemUgb2YgdGhlCityZWNlaXZlZCBxdWV1ZSAgKGJ5dGVzIHdhaXRpbmcgZm9yIGFwcGxpY2F0aW9ucyB0byByZWFkKSB0aGUgc3RhdGUgYW5kIHRoZSB1aWQKK293bmluZyB0aGUgc29ja2V0LgorCisvcHJvYy9uZXQvYXRhbGtfaWZhY2UgbGlzdHMgIGFsbCAgdGhlICBpbnRlcmZhY2VzICBjb25maWd1cmVkIGZvciBhcHBsZXRhbGsuSXQKK3Nob3dzIHRoZSAgbmFtZSAgb2YgdGhlIGludGVyZmFjZSwgaXRzIEFwcGxldGFsayBhZGRyZXNzLCB0aGUgbmV0d29yayByYW5nZSBvbgordGhhdCBhZGRyZXNzICAob3IgIG5ldHdvcmsgbnVtYmVyIGZvciBwaGFzZSAxIG5ldHdvcmtzKSwgYW5kIHRoZSBzdGF0dXMgb2YgdGhlCitpbnRlcmZhY2UuCisKKy9wcm9jL25ldC9hdGFsa19yb3V0ZSBsaXN0cyAgZWFjaCAga25vd24gIG5ldHdvcmsgIHJvdXRlLiAgSXQgbGlzdHMgdGhlIHRhcmdldAorKG5ldHdvcmspIHRoYXQgdGhlIHJvdXRlIGxlYWRzIHRvLCB0aGUgcm91dGVyIChtYXkgYmUgZGlyZWN0bHkgY29ubmVjdGVkKSwgdGhlCityb3V0ZSBmbGFncywgYW5kIHRoZSBkZXZpY2UgdGhlIHJvdXRlIGlzIHVzaW5nLgorCisyLjEwIElQWAorLS0tLS0tLS0KKworVGhlIElQWCBwcm90b2NvbCBoYXMgbm8gdHVuYWJsZSB2YWx1ZXMgaW4gcHJvYy9zeXMvbmV0LgorCitUaGUgSVBYICBwcm90b2NvbCAgZG9lcywgIGhvd2V2ZXIsICBwcm92aWRlICBwcm9jL25ldC9pcHguIFRoaXMgbGlzdHMgZWFjaCBJUFgKK3NvY2tldCBnaXZpbmcgIHRoZSAgbG9jYWwgIGFuZCAgcmVtb3RlICBhZGRyZXNzZXMgIGluICBOb3ZlbGwgIGZvcm1hdCAodGhhdCBpcworbmV0d29yazpub2RlOnBvcnQpLiBJbiAgYWNjb3JkYW5jZSAgd2l0aCAgdGhlICBzdHJhbmdlICBOb3ZlbGwgIHRyYWRpdGlvbiwKK2V2ZXJ5dGhpbmcgYnV0IHRoZSBwb3J0IGlzIGluIGhleC4gTm90X0Nvbm5lY3RlZCBpcyBkaXNwbGF5ZWQgZm9yIHNvY2tldHMgdGhhdAorYXJlIG5vdCAgdGllZCB0byBhIHNwZWNpZmljIHJlbW90ZSBhZGRyZXNzLiBUaGUgVHggYW5kIFJ4IHF1ZXVlIHNpemVzIGluZGljYXRlCit0aGUgbnVtYmVyICBvZiAgYnl0ZXMgIHBlbmRpbmcgIGZvciAgdHJhbnNtaXNzaW9uICBhbmQgIHJlY2VwdGlvbi4gIFRoZSAgc3RhdGUKK2luZGljYXRlcyB0aGUgIHN0YXRlICB0aGUgIHNvY2tldCAgaXMgIGluIGFuZCB0aGUgdWlkIGlzIHRoZSBvd25pbmcgdWlkIG9mIHRoZQorc29ja2V0LgorCitUaGUgL3Byb2MvbmV0L2lweF9pbnRlcmZhY2UgIGZpbGUgbGlzdHMgYWxsIElQWCBpbnRlcmZhY2VzLiBGb3IgZWFjaCBpbnRlcmZhY2UKK2l0IGdpdmVzICB0aGUgbmV0d29yayBudW1iZXIsIHRoZSBub2RlIG51bWJlciwgYW5kIGluZGljYXRlcyBpZiB0aGUgbmV0d29yayBpcwordGhlIHByaW1hcnkgIG5ldHdvcmsuICBJdCAgYWxzbyAgaW5kaWNhdGVzICB3aGljaCAgZGV2aWNlICBpdCAgaXMgYm91bmQgdG8gKG9yCitJbnRlcm5hbCBmb3IgIGludGVybmFsICBuZXR3b3JrcykgIGFuZCAgdGhlICBGcmFtZSAgVHlwZSBpZiBhcHByb3ByaWF0ZS4gTGludXgKK3N1cHBvcnRzIDgwMi4zLCAgODAyLjIsICA4MDIuMiAgU05BUCAgYW5kIERJWCAoQmx1ZSBCb29rKSBldGhlcm5ldCBmcmFtaW5nIGZvcgorSVBYLgorCitUaGUgL3Byb2MvbmV0L2lweF9yb3V0ZSAgdGFibGUgIGhvbGRzICBhIGxpc3Qgb2YgSVBYIHJvdXRlcy4gRm9yIGVhY2ggcm91dGUgaXQKK2dpdmVzIHRoZSAgZGVzdGluYXRpb24gIG5ldHdvcmssIHRoZSByb3V0ZXIgbm9kZSAob3IgRGlyZWN0bHkpIGFuZCB0aGUgbmV0d29yaworYWRkcmVzcyBvZiB0aGUgcm91dGVyIChvciBDb25uZWN0ZWQpIGZvciBpbnRlcm5hbCBuZXR3b3Jrcy4KKworMi4xMSAvcHJvYy9zeXMvZnMvbXF1ZXVlIC0gUE9TSVggbWVzc2FnZSBxdWV1ZXMgZmlsZXN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgIm1xdWV1ZSIgIGZpbGVzeXN0ZW0gcHJvdmlkZXMgIHRoZSBuZWNlc3Nhcnkga2VybmVsIGZlYXR1cmVzIHRvIGVuYWJsZSB0aGUKK2NyZWF0aW9uIG9mIGEgIHVzZXIgc3BhY2UgIGxpYnJhcnkgdGhhdCAgaW1wbGVtZW50cyAgdGhlICBQT1NJWCBtZXNzYWdlIHF1ZXVlcworQVBJIChhcyBub3RlZCBieSB0aGUgIE1TRyB0YWcgaW4gdGhlICBQT1NJWCAxMDAzLjEtMjAwMSB2ZXJzaW9uICBvZiB0aGUgU3lzdGVtCitJbnRlcmZhY2VzIHNwZWNpZmljYXRpb24uKQorCitUaGUgIm1xdWV1ZSIgZmlsZXN5c3RlbSBjb250YWlucyB2YWx1ZXMgZm9yIGRldGVybWluaW5nL3NldHRpbmcgIHRoZSBhbW91bnQgb2YKK3Jlc291cmNlcyB1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KKworL3Byb2Mvc3lzL2ZzL21xdWV1ZS9xdWV1ZXNfbWF4IGlzIGEgcmVhZC93cml0ZSAgZmlsZSBmb3IgIHNldHRpbmcvZ2V0dGluZyAgdGhlCittYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlIHF1ZXVlcyBhbGxvd2VkIG9uIHRoZSBzeXN0ZW0uCisKKy9wcm9jL3N5cy9mcy9tcXVldWUvbXNnX21heCAgaXMgIGEgIHJlYWQvd3JpdGUgZmlsZSAgZm9yICBzZXR0aW5nL2dldHRpbmcgIHRoZQorbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gYSBxdWV1ZSB2YWx1ZS4gIEluIGZhY3QgaXQgaXMgdGhlIGxpbWl0aW5nIHZhbHVlCitmb3IgYW5vdGhlciAodXNlcikgbGltaXQgd2hpY2ggaXMgc2V0IGluIG1xX29wZW4gaW52b2NhdGlvbi4gVGhpcyBhdHRyaWJ1dGUgb2YKK2EgcXVldWUgbXVzdCBiZSBsZXNzIG9yIGVxdWFsIHRoZW4gbXNnX21heC4KKworL3Byb2Mvc3lzL2ZzL21xdWV1ZS9tc2dzaXplX21heCBpcyAgYSByZWFkL3dyaXRlICBmaWxlIGZvciBzZXR0aW5nL2dldHRpbmcgdGhlCittYXhpbXVtICBtZXNzYWdlIHNpemUgdmFsdWUgKGl0IGlzIGV2ZXJ5ICBtZXNzYWdlIHF1ZXVlJ3MgYXR0cmlidXRlIHNldCBkdXJpbmcKK2l0cyBjcmVhdGlvbikuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdW1tYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRhaW4gYXNwZWN0cyAgb2YgIGtlcm5lbCAgYmVoYXZpb3IgIGNhbiBiZSBtb2RpZmllZCBhdCBydW50aW1lLCB3aXRob3V0IHRoZQorbmVlZCB0byAgcmVjb21waWxlICB0aGUga2VybmVsLCBvciBldmVuIHRvIHJlYm9vdCB0aGUgc3lzdGVtLiBUaGUgZmlsZXMgaW4gdGhlCisvcHJvYy9zeXMgdHJlZSAgY2FuICBub3Qgb25seSBiZSByZWFkLCBidXQgYWxzbyBtb2RpZmllZC4gWW91IGNhbiB1c2UgdGhlIGVjaG8KK2NvbW1hbmQgdG8gd3JpdGUgdmFsdWUgaW50byB0aGVzZSBmaWxlcywgdGhlcmVieSBjaGFuZ2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncworb2YgdGhlIGtlcm5lbC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yb21mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JvbWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDJhN2IyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yb21mcy50eHQKQEAgLTAsMCArMSwxODcgQEAKK1JPTUZTIC0gUk9NIEZJTEUgU1lTVEVNCisKK1RoaXMgaXMgYSBxdWl0ZSBkdW1iLCByZWFkIG9ubHkgZmlsZXN5c3RlbSwgbWFpbmx5IGZvciBpbml0aWFsIFJBTQorZGlza3Mgb2YgaW5zdGFsbGF0aW9uIGRpc2tzLiAgSXQgaGFzIGdyb3duIHVwIGJ5IHRoZSBuZWVkIG9mIGhhdmluZworbW9kdWxlcyBsaW5rZWQgYXQgYm9vdCB0aW1lLiAgVXNpbmcgdGhpcyBmaWxlc3lzdGVtLCB5b3UgZ2V0IGEgdmVyeQorc2ltaWxhciBmZWF0dXJlLCBhbmQgZXZlbiB0aGUgcG9zc2liaWxpdHkgb2YgYSBzbWFsbCBrZXJuZWwsIHdpdGggYQorZmlsZSBzeXN0ZW0gd2hpY2ggZG9lc24ndCB0YWtlIHVwIHVzZWZ1bCBtZW1vcnkgZnJvbSB0aGUgcm91dGVyCitmdW5jdGlvbnMgaW4gdGhlIGJhc2VtZW50IG9mIHlvdXIgb2ZmaWNlLgorCitGb3IgY29tcGFyaXNvbiwgYm90aCB0aGUgb2xkZXIgbWluaXggYW5kIHhpYWZzICh0aGUgbGF0dGVyIGlzIG5vdworZGVmdW5jdCkgZmlsZXN5c3RlbXMsIGNvbXBpbGVkIGFzIG1vZHVsZSBuZWVkIG1vcmUgdGhhbiAyMDAwMCBieXRlcywKK3doaWxlIHJvbWZzIGlzIGxlc3MgdGhhbiBhIHBhZ2UsIGFib3V0IDQwMDAgYnl0ZXMgKGFzc3VtaW5nIGk1ODYKK2NvZGUpLiAgVW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucywgdGhlIG1zZG9zIGZpbGVzeXN0ZW0gd291bGQgbmVlZAorYWJvdXQgMzBLIChhbmQgZG9lcyBub3Qgc3VwcG9ydCBkZXZpY2Ugbm9kZXMgb3Igc3ltbGlua3MpLCB3aGlsZSB0aGUKK25mcyBtb2R1bGUgd2l0aCBuZnNyb290IGlzIGFib3V0IDU3Sy4gIEZ1cnRoZXJtb3JlLCBhcyBhIGJpdCB1bmZhaXIKK2NvbXBhcmlzb24sIGFuIGFjdHVhbCByZXNjdWUgZGlzayB1c2VkIHVwIDMyMDIgYmxvY2tzIHdpdGggZXh0Miwgd2hpbGUKK3dpdGggcm9tZnMsIGl0IG5lZWRlZCAzMDc5IGJsb2Nrcy4KKworVG8gY3JlYXRlIHN1Y2ggYSBmaWxlIHN5c3RlbSwgeW91J2xsIG5lZWQgYSB1c2VyIHByb2dyYW0gbmFtZWQKK2dlbnJvbWZzLiAgSXQgaXMgYXZhaWxhYmxlIHZpYSBhbm9ueW1vdXMgZnRwIG9uIHN1bnNpdGUudW5jLmVkdSBhbmQKK2l0cyBtaXJyb3JzLCBpbiB0aGUgL3B1Yi9MaW51eC9zeXN0ZW0vcmVjb3ZlcnkvIGRpcmVjdG9yeS4KKworQXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJvbWZzIGNvdWxkIGJlIGFsc28gdXNlZCAoc3BhY2UtZWZmaWNpZW50bHkpIG9uCit2YXJpb3VzIHJlYWQtb25seSBtZWRpYSwgbGlrZSAoRSlFUFJPTSBkaXNrcyBpZiBzb21lb25lIHdpbGwgaGF2ZSB0aGUKK21vdGl2YXRpb24uLiA6KQorCitIb3dldmVyLCB0aGUgbWFpbiBwdXJwb3NlIG9mIHJvbWZzIGlzIHRvIGhhdmUgYSB2ZXJ5IHNtYWxsIGtlcm5lbCwKK3doaWNoIGhhcyBvbmx5IHRoaXMgZmlsZXN5c3RlbSBsaW5rZWQgaW4sIGFuZCB0aGVuIGNhbiBsb2FkIGFueSBtb2R1bGUKK2xhdGVyLCB3aXRoIHRoZSBjdXJyZW50IG1vZHVsZSB1dGlsaXRpZXMuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHJ1bgorc29tZSBwcm9ncmFtIHRvIGRlY2lkZSBpZiB5b3UgbmVlZCBTQ1NJIGRldmljZXMsIGFuZCBldmVuIElERSBvcgorZmxvcHB5IGRyaXZlcyBjYW4gYmUgbG9hZGVkIGxhdGVyIGlmIHlvdSB1c2UgdGhlICJpbml0cmQiLS1pbml0aWFsCitSQU0gZGlzay0tZmVhdHVyZSBvZiB0aGUga2VybmVsLiAgVGhpcyB3b3VsZCBub3QgYmUgcmVhbGx5IG5ld3MKK2ZsYXNoLCBidXQgd2l0aCByb21mcywgeW91IGNhbiBldmVuIHNwYXJlIG9mZiB5b3VyIGV4dDIgb3IgbWluaXggb3IKK21heWJlIGV2ZW4gYWZmcyBmaWxlc3lzdGVtIHVudGlsIHlvdSByZWFsbHkga25vdyB0aGF0IHlvdSBuZWVkIGl0LgorCitGb3IgZXhhbXBsZSwgYSBkaXN0cmlidXRpb24gYm9vdCBkaXNrIGNhbiBjb250YWluIG9ubHkgdGhlIGNkIGRpc2sKK2RyaXZlcnMgKGFuZCBwb3NzaWJseSB0aGUgU0NTSSBkcml2ZXJzKSwgYW5kIHRoZSBJU08gOTY2MCBmaWxlc3lzdGVtCittb2R1bGUuICBUaGUga2VybmVsIGNhbiBiZSBzbWFsbCBlbm91Z2gsIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBvdGhlcgorZmlsZXN5c3RlbXMsIGxpa2UgdGhlIHF1aXRlIGxhcmdlIGV4dDJmcyBtb2R1bGUsIHdoaWNoIGNhbiB0aGVuIGJlCitsb2FkZWQgb2ZmIHRoZSBDRCBhdCBhIGxhdGVyIHN0YWdlIG9mIHRoZSBpbnN0YWxsYXRpb24uICBBbm90aGVyIHVzZQord291bGQgYmUgZm9yIGEgcmVjb3ZlcnkgZGlzaywgd2hlbiB5b3UgYXJlIHJlaW5zdGFsbGluZyBhIHdvcmtzdGF0aW9uCitmcm9tIHRoZSBuZXR3b3JrLCBhbmQgeW91IHdpbGwgaGF2ZSBhbGwgdGhlIHRvb2xzL21vZHVsZXMgYXZhaWxhYmxlCitmcm9tIGEgbmVhcmJ5IHNlcnZlciwgc28geW91IGRvbid0IHdhbnQgdG8gY2FycnkgdHdvIGRpc2tzIGZvciB0aGlzCitwdXJwb3NlLCBqdXN0IGJlY2F1c2UgaXQgd29uJ3QgZml0IGludG8gZXh0Mi4KKworcm9tZnMgb3BlcmF0ZXMgb24gYmxvY2sgZGV2aWNlcyBhcyB5b3UgY2FuIGV4cGVjdCwgYW5kIHRoZSB1bmRlcmx5aW5nCitzdHJ1Y3R1cmUgaXMgdmVyeSBzaW1wbGUuICBFdmVyeSBhY2Nlc3NpYmxlIHN0cnVjdHVyZSBiZWdpbnMgb24gMTYKK2J5dGUgYm91bmRhcmllcyBmb3IgZmFzdCBhY2Nlc3MuICBUaGUgbWluaW11bSBzcGFjZSBhIGZpbGUgd2lsbCB0YWtlCitpcyAzMiBieXRlcyAodGhpcyBpcyBhbiBlbXB0eSBmaWxlLCB3aXRoIGEgbGVzcyB0aGFuIDE2IGNoYXJhY3RlcgorbmFtZSkuICBUaGUgbWF4aW11bSBvdmVyaGVhZCBmb3IgYW55IG5vbi1lbXB0eSBmaWxlIGlzIHRoZSBoZWFkZXIsIGFuZAordGhlIDE2IGJ5dGUgcGFkZGluZyBmb3IgdGhlIG5hbWUgYW5kIHRoZSBjb250ZW50cywgYWxzbyAxNisxNCsxNSA9IDQ1CitieXRlcy4gIFRoaXMgaXMgcXVpdGUgcmFyZSBob3dldmVyLCBzaW5jZSBtb3N0IGZpbGUgbmFtZXMgYXJlIGxvbmdlcgordGhhbiAzIGJ5dGVzLCBhbmQgc2hvcnRlciB0aGFuIDE1IGJ5dGVzLgorCitUaGUgbGF5b3V0IG9mIHRoZSBmaWxlc3lzdGVtIGlzIHRoZSBmb2xsb3dpbmc6CisKK29mZnNldAkgICAgY29udGVudAorCisJKy0tLSstLS0rLS0tKy0tLSsKKyAgMAl8IC0gfCByIHwgbyB8IG0gfCAgXAorCSstLS0rLS0tKy0tLSstLS0rCVRoZSBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiB0aG9zZSBieXRlcworICA0CXwgMSB8IGYgfCBzIHwgLSB8ICAvCShpLmUuICItcm9tMWZzLSIpCisJKy0tLSstLS0rLS0tKy0tLSsKKyAgOAl8ICAgZnVsbCBzaXplCXwJVGhlIG51bWJlciBvZiBhY2Nlc3NpYmxlIGJ5dGVzIGluIHRoaXMgZnMuCisJKy0tLSstLS0rLS0tKy0tLSsKKyAxMgl8ICAgIGNoZWNrc3VtCXwJVGhlIGNoZWNrc3VtIG9mIHRoZSBGSVJTVCA1MTIgQllURVMuCisJKy0tLSstLS0rLS0tKy0tLSsKKyAxNgl8IHZvbHVtZSBuYW1lCXwJVGhlIHplcm8gdGVybWluYXRlZCBuYW1lIG9mIHRoZSB2b2x1bWUsCisJOiAgICAgICAgICAgICAgIDoJcGFkZGVkIHRvIDE2IGJ5dGUgYm91bmRhcnkuCisJKy0tLSstLS0rLS0tKy0tLSsKKyB4eAl8ICAgICBmaWxlCXwKKwk6ICAgIGhlYWRlcnMJOgorCitFdmVyeSBtdWx0aSBieXRlIHZhbHVlICgzMiBiaXQgd29yZHMsIEknbGwgdXNlIHRoZSBsb25nd29yZHMgdGVybSBmcm9tCitub3cgb24pIG11c3QgYmUgaW4gYmlnIGVuZGlhbiBvcmRlci4KKworVGhlIGZpcnN0IGVpZ2h0IGJ5dGVzIGlkZW50aWZ5IHRoZSBmaWxlc3lzdGVtLCBldmVuIGZvciB0aGUgY2FzdWFsCitpbnNwZWN0b3IuICBBZnRlciB0aGF0LCBpbiB0aGUgM3JkIGxvbmd3b3JkLCBpdCBjb250YWlucyB0aGUgbnVtYmVyIG9mCitieXRlcyBhY2Nlc3NpYmxlIGZyb20gdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZXN5c3RlbS4gIFRoZSA0dGggbG9uZ3dvcmQKK2lzIHRoZSBjaGVja3N1bSBvZiB0aGUgZmlyc3QgNTEyIGJ5dGVzIChvciB0aGUgbnVtYmVyIG9mIGJ5dGVzCithY2Nlc3NpYmxlLCB3aGljaGV2ZXIgaXMgc21hbGxlcikuICBUaGUgYXBwbGllZCBhbGdvcml0aG0gaXMgdGhlIHNhbWUKK2FzIGluIHRoZSBBRkZTIGZpbGVzeXN0ZW0sIG5hbWVseSBhIHNpbXBsZSBzdW0gb2YgdGhlIGxvbmd3b3JkcworKGFzc3VtaW5nIGJpZ2VuZGlhbiBxdWFudGl0aWVzIGFnYWluKS4gIEZvciBkZXRhaWxzLCBwbGVhc2UgY29uc3VsdAordGhlIHNvdXJjZS4gIFRoaXMgYWxnb3JpdGhtIHdhcyBjaG9zZW4gYmVjYXVzZSBhbHRob3VnaCBpdCdzIG5vdCBxdWl0ZQorcmVsaWFibGUsIGl0IGRvZXMgbm90IHJlcXVpcmUgYW55IHRhYmxlcywgYW5kIGl0IGlzIHZlcnkgc2ltcGxlLgorCitUaGUgZm9sbG93aW5nIGJ5dGVzIGFyZSBub3cgcGFydCBvZiB0aGUgZmlsZSBzeXN0ZW07IGVhY2ggZmlsZSBoZWFkZXIKK211c3QgYmVnaW4gb24gYSAxNiBieXRlIGJvdW5kYXJ5LgorCitvZmZzZXQJICAgIGNvbnRlbnQKKworICAgICAJKy0tLSstLS0rLS0tKy0tLSsKKyAgMAl8IG5leHQgZmlsZWhkcnxYfAlUaGUgb2Zmc2V0IG9mIHRoZSBuZXh0IGZpbGUgaGVhZGVyCisJKy0tLSstLS0rLS0tKy0tLSsJICAoemVybyBpZiBubyBtb3JlIGZpbGVzKQorICA0CXwgICBzcGVjLmluZm8JfAlJbmZvIGZvciBkaXJlY3Rvcmllcy9oYXJkIGxpbmtzL2RldmljZXMKKwkrLS0tKy0tLSstLS0rLS0tKworICA4CXwgICAgIHNpemUgICAgICB8CVRoZSBzaXplIG9mIHRoaXMgZmlsZSBpbiBieXRlcworCSstLS0rLS0tKy0tLSstLS0rCisgMTIJfCAgIGNoZWNrc3VtCXwJQ292ZXJpbmcgdGhlIG1ldGEgZGF0YSwgaW5jbHVkaW5nIHRoZSBmaWxlCisJKy0tLSstLS0rLS0tKy0tLSsJICBuYW1lLCBhbmQgcGFkZGluZworIDE2CXwgZmlsZSBuYW1lICAgICB8CVRoZSB6ZXJvIHRlcm1pbmF0ZWQgbmFtZSBvZiB0aGUgZmlsZSwKKwk6ICAgICAgICAgICAgICAgOglwYWRkZWQgdG8gMTYgYnl0ZSBib3VuZGFyeQorCSstLS0rLS0tKy0tLSstLS0rCisgeHgJfCBmaWxlIGRhdGEJfAorCToJCToKKworU2luY2UgdGhlIGZpbGUgaGVhZGVycyBiZWdpbiBhbHdheXMgYXQgYSAxNiBieXRlIGJvdW5kYXJ5LCB0aGUgbG93ZXN0Cis0IGJpdHMgd291bGQgYmUgYWx3YXlzIHplcm8gaW4gdGhlIG5leHQgZmlsZWhkciBwb2ludGVyLiAgVGhlc2UgZm91cgorYml0cyBhcmUgdXNlZCBmb3IgdGhlIG1vZGUgaW5mb3JtYXRpb24uICBCaXRzIDAuLjIgc3BlY2lmeSB0aGUgdHlwZSBvZgordGhlIGZpbGU7IHdoaWxlIGJpdCA0IHNob3dzIGlmIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUgb3Igbm90LiAgVGhlCitwZXJtaXNzaW9ucyBhcmUgYXNzdW1lZCB0byBiZSB3b3JsZCByZWFkYWJsZSwgaWYgdGhpcyBiaXQgaXMgbm90IHNldCwKK2FuZCB3b3JsZCBleGVjdXRhYmxlIGlmIGl0IGlzOyBleGNlcHQgdGhlIGNoYXJhY3RlciBhbmQgYmxvY2sgZGV2aWNlcywKK3RoZXkgYXJlIG5ldmVyIGFjY2Vzc2libGUgZm9yIG90aGVyIHRoYW4gb3duZXIuICBUaGUgb3duZXIgb2YgZXZlcnkKK2ZpbGUgaXMgdXNlciBhbmQgZ3JvdXAgMCwgdGhpcyBzaG91bGQgbmV2ZXIgYmUgYSBwcm9ibGVtIGZvciB0aGUKK2ludGVuZGVkIHVzZS4gIFRoZSBtYXBwaW5nIG9mIHRoZSA4IHBvc3NpYmxlIHZhbHVlcyB0byBmaWxlIHR5cGVzIGlzCit0aGUgZm9sbG93aW5nOgorCisJICBtYXBwaW5nCQlzcGVjLmluZm8gbWVhbnMKKyAwCWhhcmQgbGluawlsaW5rIGRlc3RpbmF0aW9uIFtmaWxlIGhlYWRlcl0KKyAxCWRpcmVjdG9yeQlmaXJzdCBmaWxlJ3MgaGVhZGVyCisgMglyZWd1bGFyIGZpbGUJdW51c2VkLCBtdXN0IGJlIHplcm8gW01CWl0KKyAzCXN5bWJvbGljIGxpbmsJdW51c2VkLCBNQlogKGZpbGUgZGF0YSBpcyB0aGUgbGluayBjb250ZW50KQorIDQJYmxvY2sgZGV2aWNlCTE2LzE2IGJpdHMgbWFqb3IvbWlub3IgbnVtYmVyCisgNQljaGFyIGRldmljZQkJICAgIC0gIiAtCisgNglzb2NrZXQJCXVudXNlZCwgTUJaCisgNwlmaWZvCQl1bnVzZWQsIE1CWgorCitOb3RlIHRoYXQgaGFyZCBsaW5rcyBhcmUgc3BlY2lmaWNhbGx5IG1hcmtlZCBpbiB0aGlzIGZpbGVzeXN0ZW0sIGJ1dAordGhleSB3aWxsIGJlaGF2ZSBhcyB5b3UgY2FuIGV4cGVjdCAoaS5lLiBzaGFyZSB0aGUgaW5vZGUgbnVtYmVyKS4KK05vdGUgYWxzbyB0aGF0IGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gbm90IGNyZWF0ZSBoYXJkIGxpbmsKK2xvb3BzLCBhbmQgY3JlYXRpbmcgYWxsIHRoZSAuIGFuZCAuLiBsaW5rcyBmb3IgZGlyZWN0b3JpZXMuICBUaGlzIGlzCitub3JtYWxseSBkb25lIGNvcnJlY3RseSBieSB0aGUgZ2Vucm9tZnMgcHJvZ3JhbS4gIFBsZWFzZSByZWZyYWluIGZyb20KK3VzaW5nIHRoZSBleGVjdXRhYmxlIGJpdHMgZm9yIHNwZWNpYWwgcHVycG9zZXMgb24gdGhlIHNvY2tldCBhbmQgZmlmbworc3BlY2lhbCBmaWxlcywgdGhleSBtYXkgaGF2ZSBvdGhlciB1c2VzIGluIHRoZSBmdXR1cmUuICBBZGRpdGlvbmFsbHksCitwbGVhc2UgcmVtZW1iZXIgdGhhdCBvbmx5IHJlZ3VsYXIgZmlsZXMsIGFuZCBzeW1saW5rcyBhcmUgc3VwcG9zZWQgdG8KK2hhdmUgYSBub256ZXJvIHNpemUgZmllbGQ7IHRoZXkgY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZQorZGlyZWN0bHkgYWZ0ZXIgdGhlIChwYWRkZWQpIGZpbGUgbmFtZS4KKworQW5vdGhlciB0aGluZyB0byBub3RlIGlzIHRoYXQgcm9tZnMgd29ya3Mgb24gZmlsZSBoZWFkZXJzIGFuZCBkYXRhCithbGlnbmVkIHRvIDE2IGJ5dGUgYm91bmRhcmllcywgYnV0IG1vc3QgaGFyZHdhcmUgZGV2aWNlcyBhbmQgdGhlIGJsb2NrCitkZXZpY2UgZHJpdmVycyBhcmUgdW5hYmxlIHRvIGNvcGUgd2l0aCBzbWFsbGVyIHRoYW4gYmxvY2stc2l6ZWQgZGF0YS4KK1RvIG92ZXJjb21lIHRoaXMgbGltaXRhdGlvbiwgdGhlIHdob2xlIHNpemUgb2YgdGhlIGZpbGUgc3lzdGVtIG11c3QgYmUKK3BhZGRlZCB0byBhbiAxMDI0IGJ5dGUgYm91bmRhcnkuCisKK0lmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyBvciBzdWdnZXN0aW9ucyBjb25jZXJuaW5nIHRoaXMgZmlsZSBzeXN0ZW0sCitwbGVhc2UgY29udGFjdCBtZS4gIEhvd2V2ZXIsIHRoaW5rIHR3aWNlIGJlZm9yZSB3YW50aW5nIG1lIHRvIGFkZAorZmVhdHVyZXMgYW5kIGNvZGUsIGJlY2F1c2UgdGhlIHByaW1hcnkgYW5kIG1vc3QgaW1wb3J0YW50IGFkdmFudGFnZSBvZgordGhpcyBmaWxlIHN5c3RlbSBpcyB0aGUgc21hbGwgY29kZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBkb24ndCBiZQorYWxhcm1lZCwgSSdtIG5vdCBnZXR0aW5nIHRoYXQgbXVjaCByb21mcyByZWxhdGVkIG1haWwuICBOb3cgSSBjYW4KK3VuZGVyc3RhbmQgd2h5IEF2ZXJ5IHdyb3RlIHBvZW1zIGluIHRoZSBBUkNuZXQgZG9jcyB0byBnZXQgc29tZSBtb3JlCitmZWVkYmFjay4gOikKKworcm9tZnMgaGFzIGFsc28gYSBtYWlsaW5nIGxpc3QsIGFuZCB0byBkYXRlLCBpdCBoYXNuJ3QgcmVjZWl2ZWQgYW55Cit0cmFmZmljLCBzbyB5b3UgYXJlIHdlbGNvbWUgdG8gam9pbiBpdCB0byBkaXNjdXNzIHlvdXIgaWRlYXMuIDopCisKK0l0J3MgcnVuIGJ5IGV6bWxtLCBzbyB5b3UgY2FuIHN1YnNjcmliZSB0byBpdCBieSBzZW5kaW5nIGEgbWVzc2FnZQordG8gcm9tZnMtc3Vic2NyaWJlQHNoYWRvdy5iYW5raS5odSwgdGhlIGNvbnRlbnQgaXMgaXJyZWxldmFudC4KKworUGVuZGluZyBpc3N1ZXM6CisKKy0gUGVybWlzc2lvbnMgYW5kIG93bmVyIGluZm9ybWF0aW9uIGFyZSBwcmV0dHkgZXNzZW50aWFsIGZlYXR1cmVzIG9mIGEKK1VuKnggbGlrZSBzeXN0ZW0sIGJ1dCByb21mcyBkb2VzIG5vdCBwcm92aWRlIHRoZSBmdWxsIHBvc3NpYmlsaXRpZXMuCitJIGhhdmUgbmV2ZXIgZm91bmQgdGhpcyBsaW1pdGluZywgYnV0IG90aGVycyBtaWdodC4KKworLSBUaGUgZmlsZSBzeXN0ZW0gaXMgcmVhZCBvbmx5LCBzbyBpdCBjYW4gYmUgdmVyeSBzbWFsbCwgYnV0IGluIGNhc2UKK29uZSB3b3VsZCB3YW50IHRvIHdyaXRlIF9hbnl0aGluZ18gdG8gYSBmaWxlIHN5c3RlbSwgaGUgc3RpbGwgbmVlZHMKK2Egd3JpdGFibGUgZmlsZSBzeXN0ZW0sIHRodXMgbmVnYXRpbmcgdGhlIHNpemUgYWR2YW50YWdlcy4gIFBvc3NpYmxlCitzb2x1dGlvbnM6IGltcGxlbWVudCB3cml0ZSBhY2Nlc3MgYXMgYSBjb21waWxlLXRpbWUgb3B0aW9uLCBvciBhIG5ldywKK3NpbWlsYXJseSBzbWFsbCB3cml0YWJsZSBmaWxlc3lzdGVtIGZvciBSQU0gZGlza3MuCisKKy0gU2luY2UgdGhlIGZpbGVzIGFyZSBvbmx5IHJlcXVpcmVkIHRvIGhhdmUgYWxpZ25tZW50IG9uIGEgMTYgYnl0ZQorYm91bmRhcnksIGl0IGlzIGN1cnJlbnRseSBwb3NzaWJseSBzdWJvcHRpbWFsIHRvIHJlYWQgb3IgZXhlY3V0ZSBmaWxlcworZnJvbSB0aGUgZmlsZXN5c3RlbS4gIEl0IG1pZ2h0IGJlIHJlc29sdmVkIGJ5IHJlb3JkZXJpbmcgZmlsZSBkYXRhIHRvCitoYXZlIG1vc3Qgb2YgaXQgKGkuZS4gZXhjZXB0IHRoZSBzdGFydCBhbmQgdGhlIGVuZCkgbGF5aW5nIGF0ICJuYXR1cmFsIgorYm91bmRhcmllcywgdGh1cyBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBkaXJlY3RseSBtYXAgYSBiaWcgcG9ydGlvbiBvZgordGhlIGZpbGUgY29udGVudHMgdG8gdGhlIG1tIHN1YnN5c3RlbS4KKworLSBDb21wcmVzc2lvbiBtaWdodCBiZSBhbiB1c2VmdWwgZmVhdHVyZSwgYnV0IG1lbW9yeSBpcyBxdWl0ZSBhCitsaW1pdGluZyBmYWN0b3IgaW4gbXkgZXllcy4KKworLSBXaGVyZSBpdCBpcyB1c2VkPworCistIERvZXMgaXQgd29yayBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYW4gaW50ZWwgYW5kIG1vdG9yb2xhPworCisKK0hhdmUgZnVuLAorSmFub3MgRmFya2FzIDxjaGV4dW1Ac2hhZG93LmJhbmtpLmh1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zbWJmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NtYmZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjczZWYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zbWJmcy50eHQKQEAgLTAsMCArMSw4IEBACitTbWJmcyBpcyBhIGZpbGVzeXN0ZW0gdGhhdCBpbXBsZW1lbnRzIHRoZSBTTUIgcHJvdG9jb2wsIHdoaWNoIGlzIHRoZQorcHJvdG9jb2wgdXNlZCBieSBXaW5kb3dzIGZvciBXb3JrZ3JvdXBzLCBXaW5kb3dzIDk1IGFuZCBXaW5kb3dzIE5ULgorU21iZnMgd2FzIGluc3BpcmVkIGJ5IFNhbWJhLCB0aGUgcHJvZ3JhbSB3cml0dGVuIGJ5IEFuZHJldyBUcmlkZ2VsbAordGhhdCB0dXJucyBhbnkgVW5peCBob3N0IGludG8gYSBmaWxlIHNlcnZlciBmb3IgRE9TIG9yIFdpbmRvd3MgY2xpZW50cy4KKworU21iZnMgaXMgYSBTTUIgY2xpZW50LCBidXQgdXNlcyBwYXJ0cyBvZiBzYW1iYSBmb3IgaXQncyBvcGVyYXRpb24uIEZvcgorbW9yZSBpbmZvIG9uIHNhbWJhLCBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbiwgcGxlYXNlIGdvIHRvCitodHRwOi8vd3d3LnNhbWJhLm9yZy8gYW5kIHRoZW4gb24gdG8geW91ciBuZWFyZXN0IG1pcnJvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTdkMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0CkBAIC0wLDAgKzEsODggQEAKK0FjY2Vzc2luZyBQQ0kgZGV2aWNlIHJlc291cmNlcyB0aHJvdWdoIHN5c2ZzCisKK3N5c2ZzLCB1c3VhbGx5IG1vdW50ZWQgYXQgL3N5cywgcHJvdmlkZXMgYWNjZXNzIHRvIFBDSSByZXNvdXJjZXMgb24gcGxhdGZvcm1zCit0aGF0IHN1cHBvcnQgaXQuICBGb3IgZXhhbXBsZSwgYSBnaXZlbiBidXMgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKyAgICAgL3N5cy9kZXZpY2VzL3BjaTAwMDA6MTcKKyAgICAgfC0tIDAwMDA6MTc6MDAuMAorICAgICB8ICAgfC0tIGNsYXNzCisgICAgIHwgICB8LS0gY29uZmlnCisgICAgIHwgICB8LS0gZGV0YWNoX3N0YXRlCisgICAgIHwgICB8LS0gZGV2aWNlCisgICAgIHwgICB8LS0gaXJxCisgICAgIHwgICB8LS0gbG9jYWxfY3B1cworICAgICB8ICAgfC0tIHJlc291cmNlCisgICAgIHwgICB8LS0gcmVzb3VyY2UwCisgICAgIHwgICB8LS0gcmVzb3VyY2UxCisgICAgIHwgICB8LS0gcmVzb3VyY2UyCisgICAgIHwgICB8LS0gcm9tCisgICAgIHwgICB8LS0gc3Vic3lzdGVtX2RldmljZQorICAgICB8ICAgfC0tIHN1YnN5c3RlbV92ZW5kb3IKKyAgICAgfCAgIGAtLSB2ZW5kb3IKKyAgICAgYC0tIGRldGFjaF9zdGF0ZQorCitUaGUgdG9wbW9zdCBlbGVtZW50IGRlc2NyaWJlcyB0aGUgUENJIGRvbWFpbiBhbmQgYnVzIG51bWJlci4gIEluIHRoaXMgY2FzZSwKK3RoZSBkb21haW4gbnVtYmVyIGlzIDAwMDAgYW5kIHRoZSBidXMgbnVtYmVyIGlzIDE3IChib3RoIHZhbHVlcyBhcmUgaW4gaGV4KS4KK1RoaXMgYnVzIGNvbnRhaW5zIGEgc2luZ2xlIGZ1bmN0aW9uIGRldmljZSBpbiBzbG90IDAuICBUaGUgZG9tYWluIGFuZCBidXMKK251bWJlcnMgYXJlIHJlcHJvZHVjZWQgZm9yIGNvbnZlbmllbmNlLiAgVW5kZXIgdGhlIGRldmljZSBkaXJlY3RvcnkgYXJlIHNldmVyYWwKK2ZpbGVzLCBlYWNoIHdpdGggdGhlaXIgb3duIGZ1bmN0aW9uLgorCisgICAgICAgZmlsZQkJICAgZnVuY3Rpb24KKyAgICAgICAtLS0tCQkgICAtLS0tLS0tLQorICAgICAgIGNsYXNzCQkgICBQQ0kgY2xhc3MgKGFzY2lpLCBybykKKyAgICAgICBjb25maWcJCSAgIFBDSSBjb25maWcgc3BhY2UgKGJpbmFyeSwgcncpCisgICAgICAgZGV0YWNoX3N0YXRlCSAgIGNvbm5lY3Rpb24gc3RhdHVzIChib29sLCBydykKKyAgICAgICBkZXZpY2UJCSAgIFBDSSBkZXZpY2UgKGFzY2lpLCBybykKKyAgICAgICBpcnEJCSAgIElSUSBudW1iZXIgKGFzY2lpLCBybykKKyAgICAgICBsb2NhbF9jcHVzCSAgIG5lYXJieSBDUFUgbWFzayAoY3B1bWFzaywgcm8pCisgICAgICAgcmVzb3VyY2UJCSAgIFBDSSByZXNvdXJjZSBob3N0IGFkZHJlc3NlcyAoYXNjaWksIHJvKQorICAgICAgIHJlc291cmNlMC4uTgkgICBQQ0kgcmVzb3VyY2UgTiwgaWYgcHJlc2VudCAoYmluYXJ5LCBtbWFwKQorICAgICAgIHJvbQkJICAgUENJIFJPTSByZXNvdXJjZSwgaWYgcHJlc2VudCAoYmluYXJ5LCBybykKKyAgICAgICBzdWJzeXN0ZW1fZGV2aWNlCSAgIFBDSSBzdWJzeXN0ZW0gZGV2aWNlIChhc2NpaSwgcm8pCisgICAgICAgc3Vic3lzdGVtX3ZlbmRvcgkgICBQQ0kgc3Vic3lzdGVtIHZlbmRvciAoYXNjaWksIHJvKQorICAgICAgIHZlbmRvcgkJICAgUENJIHZlbmRvciAoYXNjaWksIHJvKQorCisgIHJvIC0gcmVhZCBvbmx5IGZpbGUKKyAgcncgLSBmaWxlIGlzIHJlYWRhYmxlIGFuZCB3cml0YWJsZQorICBtbWFwIC0gZmlsZSBpcyBtbWFwYWJsZQorICBhc2NpaSAtIGZpbGUgY29udGFpbnMgYXNjaWkgdGV4dAorICBiaW5hcnkgLSBmaWxlIGNvbnRhaW5zIGJpbmFyeSBkYXRhCisgIGNwdW1hc2sgLSBmaWxlIGNvbnRhaW5zIGEgY3B1bWFzayB0eXBlCisKK1RoZSByZWFkIG9ubHkgZmlsZXMgYXJlIGluZm9ybWF0aW9uYWwsIHdyaXRlcyB0byB0aGVtIHdpbGwgYmUgaWdub3JlZC4KK1dyaXRhYmxlIGZpbGVzIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGUgZGV2aWNlIChlLmcuIGNoYW5naW5nCitjb25maWcgc3BhY2UsIGRldGFjaGluZyBhIGRldmljZSkuICBtbWFwYWJsZSBmaWxlcyBhcmUgYXZhaWxhYmxlIHZpYSBhbgorbW1hcCBvZiB0aGUgZmlsZSBhdCBvZmZzZXQgMCBhbmQgY2FuIGJlIHVzZWQgdG8gZG8gYWN0dWFsIGRldmljZSBwcm9ncmFtbWluZworZnJvbSB1c2Vyc3BhY2UuICBOb3RlIHRoYXQgc29tZSBwbGF0Zm9ybXMgZG9uJ3Qgc3VwcG9ydCBtbWFwcGluZyBvZiBjZXJ0YWluCityZXNvdXJjZXMsIHNvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFueSBhdHRlbXB0ZWQgbW1hcC4KKworQWNjZXNzaW5nIGxlZ2FjeSByZXNvdXJjZXMgdGhyb3VnaCBzeXNmcworCitMZWdhY3kgSS9PIHBvcnQgYW5kIElTQSBtZW1vcnkgcmVzb3VyY2VzIGFyZSBhbHNvIHByb3ZpZGVkIGluIHN5c2ZzIGlmIHRoZQordW5kZXJseWluZyBwbGF0Zm9ybSBzdXBwb3J0cyB0aGVtLiAgVGhleSdyZSBsb2NhdGVkIGluIHRoZSBQQ0kgY2xhc3MgaGVpcmFyY2h5LAorZS5nLgorCisJL3N5cy9jbGFzcy9wY2lfYnVzLzAwMDA6MTcvCisJfC0tIGJyaWRnZSAtPiAuLi8uLi8uLi9kZXZpY2VzL3BjaTAwMDA6MTcKKwl8LS0gY3B1YWZmaW5pdHkKKwl8LS0gbGVnYWN5X2lvCisJYC0tIGxlZ2FjeV9tZW0KKworVGhlIGxlZ2FjeV9pbyBmaWxlIGlzIGEgcmVhZC93cml0ZSBmaWxlIHRoYXQgY2FuIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zIHRvCitkbyBsZWdhY3kgcG9ydCBJL08uICBUaGUgYXBwbGljYXRpb24gc2hvdWxkIG9wZW4gdGhlIGZpbGUsIHNlZWsgdG8gdGhlIGRlc2lyZWQKK3BvcnQgKGUuZy4gMHgzZTgpIGFuZCBkbyBhIHJlYWQgb3IgYSB3cml0ZSBvZiAxLCAyIG9yIDQgYnl0ZXMuICBUaGUgbGVnYWN5X21lbQorZmlsZSBzaG91bGQgYmUgbW1hcHBlZCB3aXRoIGFuIG9mZnNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZW1vcnkgb2Zmc2V0CitkZXNpcmVkLCBlLmcuIDB4YTAwMDAgZm9yIHRoZSBWR0EgZnJhbWUgYnVmZmVyLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiB0aGVuCitzaW1wbHkgZGVyZWZlcmVuY2UgdGhlIHJldHVybmVkIHBvaW50ZXIgKGFmdGVyIGNoZWNraW5nIGZvciBlcnJvcnMgb2YgY291cnNlKQordG8gYWNjZXNzIGxlZ2FjeSBtZW1vcnkgc3BhY2UuCisKK1N1cHBvcnRpbmcgUENJIGFjY2VzcyBvbiBuZXcgcGxhdGZvcm1zCisKK0luIG9yZGVyIHRvIHN1cHBvcnQgUENJIHJlc291cmNlIG1hcHBpbmcgYXMgZGVzY3JpYmVkIGFib3ZlLCBMaW51eCBwbGF0Zm9ybQorY29kZSBtdXN0IGRlZmluZSBIQVZFX1BDSV9NTUFQIGFuZCBwcm92aWRlIGEgcGNpX21tYXBfcGFnZV9yYW5nZSBmdW5jdGlvbi4KK1BsYXRmb3JtcyBhcmUgZnJlZSB0byBvbmx5IHN1cHBvcnQgc3Vic2V0cyBvZiB0aGUgbW1hcCBmdW5jdGlvbmFsaXR5LCBidXQKK3VzZWZ1bCByZXR1cm4gY29kZXMgc2hvdWxkIGJlIHByb3ZpZGVkLgorCitMZWdhY3kgcmVzb3VyY2VzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIEhBVkVfUENJX0xFR0FDWSBkZWZpbmUuICBQbGF0Zm9ybXMKK3dpc2hpbmcgdG8gc3VwcG9ydCBsZWdhY3kgZnVuY3Rpb25hbGl0eSBzaG91bGQgZGVmaW5lIGl0IGFuZCBwcm92aWRlCitwY2lfbGVnYWN5X3JlYWQsIHBjaV9sZWdhY3lfd3JpdGUgYW5kIHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlIGZ1bmN0aW9ucy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjZjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dApAQCAtMCwwICsxLDM0MSBAQAorCitzeXNmcyAtIF9UaGVfIGZpbGVzeXN0ZW0gZm9yIGV4cG9ydGluZyBrZXJuZWwgb2JqZWN0cy4gCisKK1BhdHJpY2sgTW9jaGVsCTxtb2NoZWxAb3NkbC5vcmc+CisKKzEwIEphbnVhcnkgMjAwMworCisKK1doYXQgaXQgaXM6Cit+fn5+fn5+fn5+fgorCitzeXNmcyBpcyBhIHJhbS1iYXNlZCBmaWxlc3lzdGVtIGluaXRpYWxseSBiYXNlZCBvbiByYW1mcy4gSXQgcHJvdmlkZXMKK2EgbWVhbnMgdG8gZXhwb3J0IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMsIHRoZWlyIGF0dHJpYnV0ZXMsIGFuZCB0aGUgCitsaW5rYWdlcyBiZXR3ZWVuIHRoZW0gdG8gdXNlcnNwYWNlLiAKKworc3lzZnMgaXMgdGllZCBpbmhlcmVudGx5IHRvIHRoZSBrb2JqZWN0IGluZnJhc3RydWN0dXJlLiBQbGVhc2UgcmVhZAorRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBjb25jZXJuaW5nIHRoZSBrb2JqZWN0CitpbnRlcmZhY2UuIAorCisKK1VzaW5nIHN5c2ZzCit+fn5+fn5+fn5+fgorCitzeXNmcyBpcyBhbHdheXMgY29tcGlsZWQgaW4uIFlvdSBjYW4gYWNjZXNzIGl0IGJ5IGRvaW5nOgorCisgICAgbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cyAKKworCitEaXJlY3RvcnkgQ3JlYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fgorCitGb3IgZXZlcnkga29iamVjdCB0aGF0IGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLCBhIGRpcmVjdG9yeSBpcworY3JlYXRlZCBmb3IgaXQgaW4gc3lzZnMuIFRoYXQgZGlyZWN0b3J5IGlzIGNyZWF0ZWQgYXMgYSBzdWJkaXJlY3RvcnkKK29mIHRoZSBrb2JqZWN0J3MgcGFyZW50LCBleHByZXNzaW5nIGludGVybmFsIG9iamVjdCBoaWVyYXJjaGllcyB0bwordXNlcnNwYWNlLiBUb3AtbGV2ZWwgZGlyZWN0b3JpZXMgaW4gc3lzZnMgcmVwcmVzZW50IHRoZSBjb21tb24KK2FuY2VzdG9ycyBvZiBvYmplY3QgaGllcmFyY2hpZXM7IGkuZS4gdGhlIHN1YnN5c3RlbXMgdGhlIG9iamVjdHMKK2JlbG9uZyB0by4gCisKK1N5c2ZzIGludGVybmFsbHkgc3RvcmVzIHRoZSBrb2JqZWN0IHRoYXQgb3ducyB0aGUgZGlyZWN0b3J5IGluIHRoZQorLT5kX2ZzZGF0YSBwb2ludGVyIG9mIHRoZSBkaXJlY3RvcnkncyBkZW50cnkuIFRoaXMgYWxsb3dzIHN5c2ZzIHRvIGRvCityZWZlcmVuY2UgY291bnRpbmcgZGlyZWN0bHkgb24gdGhlIGtvYmplY3Qgd2hlbiB0aGUgZmlsZSBpcyBvcGVuZWQgYW5kCitjbG9zZWQuIAorCisKK0F0dHJpYnV0ZXMKK35+fn5+fn5+fn4KKworQXR0cmlidXRlcyBjYW4gYmUgZXhwb3J0ZWQgZm9yIGtvYmplY3RzIGluIHRoZSBmb3JtIG9mIHJlZ3VsYXIgZmlsZXMgaW4KK3RoZSBmaWxlc3lzdGVtLiBTeXNmcyBmb3J3YXJkcyBmaWxlIEkvTyBvcGVyYXRpb25zIHRvIG1ldGhvZHMgZGVmaW5lZAorZm9yIHRoZSBhdHRyaWJ1dGVzLCBwcm92aWRpbmcgYSBtZWFucyB0byByZWFkIGFuZCB3cml0ZSBrZXJuZWwKK2F0dHJpYnV0ZXMuCisKK0F0dHJpYnV0ZXMgc2hvdWxkIGJlIEFTQ0lJIHRleHQgZmlsZXMsIHByZWZlcmFibHkgd2l0aCBvbmx5IG9uZSB2YWx1ZQorcGVyIGZpbGUuIEl0IGlzIG5vdGVkIHRoYXQgaXQgbWF5IG5vdCBiZSBlZmZpY2llbnQgdG8gY29udGFpbiBvbmx5Cit2YWx1ZSBwZXIgZmlsZSwgc28gaXQgaXMgc29jaWFsbHkgYWNjZXB0YWJsZSB0byBleHByZXNzIGFuIGFycmF5IG9mCit2YWx1ZXMgb2YgdGhlIHNhbWUgdHlwZS4gCisKK01peGluZyB0eXBlcywgZXhwcmVzc2luZyBtdWx0aXBsZSBsaW5lcyBvZiBkYXRhLCBhbmQgZG9pbmcgZmFuY3kKK2Zvcm1hdHRpbmcgb2YgZGF0YSBpcyBoZWF2aWx5IGZyb3duZWQgdXBvbi4gRG9pbmcgdGhlc2UgdGhpbmdzIG1heSBnZXQKK3lvdSBwdWJsaWNhbGx5IGh1bWlsaWF0ZWQgYW5kIHlvdXIgY29kZSByZXdyaXR0ZW4gd2l0aG91dCBub3RpY2UuIAorCisKK0FuIGF0dHJpYnV0ZSBkZWZpbml0aW9uIGlzIHNpbXBseToKKworc3RydWN0IGF0dHJpYnV0ZSB7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICogbmFtZTsKKyAgICAgICAgbW9kZV90ICAgICAgICAgICAgICAgICAgbW9kZTsKK307CisKKworaW50IHN5c2ZzX2NyZWF0ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIpOwordm9pZCBzeXNmc19yZW1vdmVfZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyKTsKKworCitBIGJhcmUgYXR0cmlidXRlIGNvbnRhaW5zIG5vIG1lYW5zIHRvIHJlYWQgb3Igd3JpdGUgdGhlIHZhbHVlIG9mIHRoZQorYXR0cmlidXRlLiBTdWJzeXN0ZW1zIGFyZSBlbmNvdXJhZ2VkIHRvIGRlZmluZSB0aGVpciBvd24gYXR0cmlidXRlCitzdHJ1Y3R1cmUgYW5kIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGF0dHJpYnV0ZXMgZm9yCithIHNwZWNpZmljIG9iamVjdCB0eXBlLiAKKworRm9yIGV4YW1wbGUsIHRoZSBkcml2ZXIgbW9kZWwgZGVmaW5lcyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBsaWtlOgorCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB7CisgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7CisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjaGFyICogYnVmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmKTsKK307CisKK2ludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7CisKK0l0IGFsc28gZGVmaW5lcyB0aGlzIGhlbHBlciBmb3IgZGVmaW5pbmcgZGV2aWNlIGF0dHJpYnV0ZXM6IAorCisjZGVmaW5lIERFVklDRV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgICAgICBcCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0geyAgICAgICAgICAgIFwKKyAgICAgICAgLmF0dHIgPSB7Lm5hbWUgID0gX19zdHJpbmdpZnkoX25hbWUpICwgLm1vZGUgICA9IF9tb2RlIH0sICAgICAgXAorICAgICAgICAuc2hvdyAgID0gX3Nob3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5zdG9yZSAgPSBfc3RvcmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKK0ZvciBleGFtcGxlLCBkZWNsYXJpbmcKKworc3RhdGljIERFVklDRV9BVFRSKGZvbywwNjQ0LHNob3dfZm9vLHN0b3JlX2Zvbyk7CisKK2lzIGVxdWl2YWxlbnQgdG8gZG9pbmc6CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mb28gPSB7CisgICAgICAgLmF0dHIJPSB7CisJCS5uYW1lID0gImZvbyIsCisJCS5tb2RlID0gMDY0NCwKKwl9LAorCS5zaG93ID0gc2hvd19mb28sCisJLnN0b3JlID0gc3RvcmVfZm9vLAorfTsKKworCitTdWJzeXN0ZW0tU3BlY2lmaWMgQ2FsbGJhY2tzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gYSBzdWJzeXN0ZW0gZGVmaW5lcyBhIG5ldyBhdHRyaWJ1dGUgdHlwZSwgaXQgbXVzdCBpbXBsZW1lbnQgYQorc2V0IG9mIHN5c2ZzIG9wZXJhdGlvbnMgZm9yIGZvcndhcmRpbmcgcmVhZCBhbmQgd3JpdGUgY2FsbHMgdG8gdGhlCitzaG93IGFuZCBzdG9yZSBtZXRob2RzIG9mIHRoZSBhdHRyaWJ1dGUgb3duZXJzLiAKKworc3RydWN0IHN5c2ZzX29wcyB7CisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRlICosY2hhciAqKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLHN0cnVjdCBhdHRyaWJ1dGUgKixjb25zdCBjaGFyICopOworfTsKKworWyBTdWJzeXN0ZW1zIHNob3VsZCBoYXZlIGFscmVhZHkgZGVmaW5lZCBhIHN0cnVjdCBrb2JqX3R5cGUgYXMgYQorZGVzY3JpcHRvciBmb3IgdGhpcyB0eXBlLCB3aGljaCBpcyB3aGVyZSB0aGUgc3lzZnNfb3BzIHBvaW50ZXIgaXMKK3N0b3JlZC4gU2VlIHRoZSBrb2JqZWN0IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIF0KKworV2hlbiBhIGZpbGUgaXMgcmVhZCBvciB3cml0dGVuLCBzeXNmcyBjYWxscyB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kCitmb3IgdGhlIHR5cGUuIFRoZSBtZXRob2QgdGhlbiB0cmFuc2xhdGVzIHRoZSBnZW5lcmljIHN0cnVjdCBrb2JqZWN0CithbmQgc3RydWN0IGF0dHJpYnV0ZSBwb2ludGVycyB0byB0aGUgYXBwcm9wcmlhdGUgcG9pbnRlciB0eXBlcywgYW5kCitjYWxscyB0aGUgYXNzb2NpYXRlZCBtZXRob2RzLiAKKworCitUbyBpbGx1c3RyYXRlOgorCisjZGVmaW5lIHRvX2Rldl9hdHRyKF9hdHRyKSBjb250YWluZXJfb2YoX2F0dHIsc3RydWN0IGRldmljZV9hdHRyaWJ1dGUsYXR0cikKKyNkZWZpbmUgdG9fZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKQorCitzdGF0aWMgc3NpemVfdAorZGV2X2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICogYnVmKQoreworICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGRldl9hdHRyID0gdG9fZGV2X2F0dHIoYXR0cik7CisgICAgICAgIHN0cnVjdCBkZXZpY2UgKiBkZXYgPSB0b19kZXYoa29iaik7CisgICAgICAgIHNzaXplX3QgcmV0ID0gMDsKKworICAgICAgICBpZiAoZGV2X2F0dHItPnNob3cpCisgICAgICAgICAgICAgICAgcmV0ID0gZGV2X2F0dHItPnNob3coZGV2LGJ1Zik7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKKworCitSZWFkaW5nL1dyaXRpbmcgQXR0cmlidXRlIERhdGEKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUbyByZWFkIG9yIHdyaXRlIGF0dHJpYnV0ZXMsIHNob3coKSBvciBzdG9yZSgpIG1ldGhvZHMgbXVzdCBiZQorc3BlY2lmaWVkIHdoZW4gZGVjbGFyaW5nIHRoZSBhdHRyaWJ1dGUuIFRoZSBtZXRob2QgdHlwZXMgc2hvdWxkIGJlIGFzCitzaW1wbGUgYXMgdGhvc2UgZGVmaW5lZCBmb3IgZGV2aWNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNoYXIgKiBidWYpOworICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNvbnN0IGNoYXIgKiBidWYpOworCitJT1csIHRoZXkgc2hvdWxkIHRha2Ugb25seSBhbiBvYmplY3QgYW5kIGEgYnVmZmVyIGFzIHBhcmFtZXRlcnMuIAorCisKK3N5c2ZzIGFsbG9jYXRlcyBhIGJ1ZmZlciBvZiBzaXplIChQQUdFX1NJWkUpIGFuZCBwYXNzZXMgaXQgdG8gdGhlCittZXRob2QuIFN5c2ZzIHdpbGwgY2FsbCB0aGUgbWV0aG9kIGV4YWN0bHkgb25jZSBmb3IgZWFjaCByZWFkIG9yCit3cml0ZS4gVGhpcyBmb3JjZXMgdGhlIGZvbGxvd2luZyBiZWhhdmlvciBvbiB0aGUgbWV0aG9kCitpbXBsZW1lbnRhdGlvbnM6IAorCistIE9uIHJlYWQoMiksIHRoZSBzaG93KCkgbWV0aG9kIHNob3VsZCBmaWxsIHRoZSBlbnRpcmUgYnVmZmVyLiAKKyAgUmVjYWxsIHRoYXQgYW4gYXR0cmlidXRlIHNob3VsZCBvbmx5IGJlIGV4cG9ydGluZyBvbmUgdmFsdWUsIG9yIGFuCisgIGFycmF5IG9mIHNpbWlsYXIgdmFsdWVzLCBzbyB0aGlzIHNob3VsZG4ndCBiZSB0aGF0IGV4cGVuc2l2ZS4gCisKKyAgVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGRvIHBhcnRpYWwgcmVhZHMgYW5kIHNlZWtzIGFyYml0cmFyaWx5IG92ZXIKKyAgdGhlIGVudGlyZSBmaWxlIGF0IHdpbGwuIAorCistIE9uIHdyaXRlKDIpLCBzeXNmcyBleHBlY3RzIHRoZSBlbnRpcmUgYnVmZmVyIHRvIGJlIHBhc3NlZCBkdXJpbmcgdGhlCisgIGZpcnN0IHdyaXRlLiBTeXNmcyB0aGVuIHBhc3NlcyB0aGUgZW50aXJlIGJ1ZmZlciB0byB0aGUgc3RvcmUoKQorICBtZXRob2QuIAorICAKKyAgV2hlbiB3cml0aW5nIHN5c2ZzIGZpbGVzLCB1c2Vyc3BhY2UgcHJvY2Vzc2VzIHNob3VsZCBmaXJzdCByZWFkIHRoZQorICBlbnRpcmUgZmlsZSwgbW9kaWZ5IHRoZSB2YWx1ZXMgaXQgd2lzaGVzIHRvIGNoYW5nZSwgdGhlbiB3cml0ZSB0aGUKKyAgZW50aXJlIGJ1ZmZlciBiYWNrLiAKKworICBBdHRyaWJ1dGUgbWV0aG9kIGltcGxlbWVudGF0aW9ucyBzaG91bGQgb3BlcmF0ZSBvbiBhbiBpZGVudGljYWwKKyAgYnVmZmVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB2YWx1ZXMuIAorCitPdGhlciBub3RlczoKKworLSBUaGUgYnVmZmVyIHdpbGwgYWx3YXlzIGJlIFBBR0VfU0laRSBieXRlcyBpbiBsZW5ndGguIE9uIGkzODYsIHRoaXMKKyAgaXMgNDA5Ni4gCisKKy0gc2hvdygpIG1ldGhvZHMgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgaW50byB0aGUKKyAgYnVmZmVyLiBUaGlzIGlzIHRoZSByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4KKworLSBzaG93KCkgc2hvdWxkIGFsd2F5cyB1c2Ugc25wcmludGYoKS4gCisKKy0gc3RvcmUoKSBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBmcm9tIHRoZSBidWZmZXIuIFRoaXMKKyAgY2FuIGJlIGRvbmUgdXNpbmcgc3RybGVuKCkuCisKKy0gc2hvdygpIG9yIHN0b3JlKCkgY2FuIGFsd2F5cyByZXR1cm4gZXJyb3JzLiBJZiBhIGJhZCB2YWx1ZSBjb21lcworICB0aHJvdWdoLCBiZSBzdXJlIHRvIHJldHVybiBhbiBlcnJvci4KKworLSBUaGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgbWV0aG9kcyB3aWxsIGJlIHBpbm5lZCBpbiBtZW1vcnkgdmlhIHN5c2ZzCisgIHJlZmVyZW5jaW5nIGNvdW50aW5nIGl0cyBlbWJlZGRlZCBvYmplY3QuIEhvd2V2ZXIsIHRoZSBwaHlzaWNhbCAKKyAgZW50aXR5IChlLmcuIGRldmljZSkgdGhlIG9iamVjdCByZXByZXNlbnRzIG1heSBub3QgYmUgcHJlc2VudC4gQmUgCisgIHN1cmUgdG8gaGF2ZSBhIHdheSB0byBjaGVjayB0aGlzLCBpZiBuZWNlc3NhcnkuIAorCisKK0EgdmVyeSBzaW1wbGUgKGFuZCBuYWl2ZSkgaW1wbGVtZW50YXRpb24gb2YgYSBkZXZpY2UgYXR0cmlidXRlIGlzOgorCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqIGRldiwgY2hhciAqIGJ1ZikKK3sKKyAgICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCIlc1xuIixkZXYtPm5hbWUpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9uYW1lKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNvbnN0IGNoYXIgKiBidWYpCit7CisJc3NjYW5mKGJ1ZiwiJTIwcyIsZGV2LT5uYW1lKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLFNfSVJVR08sc2hvd19uYW1lLHN0b3JlX25hbWUpOworCisKKyhOb3RlIHRoYXQgdGhlIHJlYWwgaW1wbGVtZW50YXRpb24gZG9lc24ndCBhbGxvdyB1c2Vyc3BhY2UgdG8gc2V0IHRoZSAKK25hbWUgZm9yIGEgZGV2aWNlLikKKworCitUb3AgTGV2ZWwgRGlyZWN0b3J5IExheW91dAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHN5c2ZzIGRpcmVjdG9yeSBhcnJhbmdlbWVudCBleHBvc2VzIHRoZSByZWxhdGlvbnNoaXAgb2Yga2VybmVsCitkYXRhIHN0cnVjdHVyZXMuIAorCitUaGUgdG9wIGxldmVsIHN5c2ZzIGRpcmV0b3J5IGxvb2tzIGxpa2U6CisKK2Jsb2NrLworYnVzLworY2xhc3MvCitkZXZpY2VzLworZmlybXdhcmUvCituZXQvCisKK2RldmljZXMvIGNvbnRhaW5zIGEgZmlsZXN5c3RlbSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGV2aWNlIHRyZWUuIEl0IG1hcHMKK2RpcmVjdGx5IHRvIHRoZSBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIHRyZWUsIHdoaWNoIGlzIGEgaGllcmFyY2h5IG9mCitzdHJ1Y3QgZGV2aWNlLiAKKworYnVzLyBjb250YWlucyBmbGF0IGRpcmVjdG9yeSBsYXlvdXQgb2YgdGhlIHZhcmlvdXMgYnVzIHR5cGVzIGluIHRoZQora2VybmVsLiBFYWNoIGJ1cydzIGRpcmVjdG9yeSBjb250YWlucyB0d28gc3ViZGlyZWN0b3JpZXM6CisKKwlkZXZpY2VzLworCWRyaXZlcnMvCisKK2RldmljZXMvIGNvbnRhaW5zIHN5bWxpbmtzIGZvciBlYWNoIGRldmljZSBkaXNjb3ZlcmVkIGluIHRoZSBzeXN0ZW0KK3RoYXQgcG9pbnQgdG8gdGhlIGRldmljZSdzIGRpcmVjdG9yeSB1bmRlciByb290Ly4KKworZHJpdmVycy8gY29udGFpbnMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggZGV2aWNlIGRyaXZlciB0aGF0IGlzIGxvYWRlZAorZm9yIGRldmljZXMgb24gdGhhdCBwYXJ0aWN1bGFyIGJ1cyAodGhpcyBhc3N1bWVzIHRoYXQgZHJpdmVycyBkbyBub3QKK3NwYW4gbXVsdGlwbGUgYnVzIHR5cGVzKS4KKworCitNb3JlIGluZm9ybWF0aW9uIGNhbiBkcml2ZXItbW9kZWwgc3BlY2lmaWMgZmVhdHVyZXMgY2FuIGJlIGZvdW5kIGluCitEb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC8uIAorCisKK1RPRE86IEZpbmlzaCB0aGlzIHNlY3Rpb24uCisKKworQ3VycmVudCBJbnRlcmZhY2VzCit+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBpbnRlcmZhY2UgbGF5ZXJzIGN1cnJlbnRseSBleGlzdCBpbiBzeXNmczoKKworCistIGRldmljZXMgKGluY2x1ZGUvbGludXgvZGV2aWNlLmgpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdHJ1Y3R1cmU6CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHsKKyAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKKyAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNoYXIgKiBidWYpOworICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIGNvbnN0IGNoYXIgKiBidWYpOworfTsKKworRGVjbGFyaW5nOgorCitERVZJQ0VfQVRUUihfbmFtZSxfc3RyLF9tb2RlLF9zaG93LF9zdG9yZSk7CisKK0NyZWF0aW9uL1JlbW92YWw6CisKK2ludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIpOwordm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyKTsKKworCistIGJ1cyBkcml2ZXJzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0cnVjdHVyZToKKworc3RydWN0IGJ1c19hdHRyaWJ1dGUgeworICAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICAgICAgICBhdHRyOworICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGJ1c190eXBlICosIGNoYXIgKiBidWYpOworICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBidXNfdHlwZSAqLCBjb25zdCBjaGFyICogYnVmKTsKK307CisKK0RlY2xhcmluZzoKKworQlVTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitDcmVhdGlvbi9SZW1vdmFsOgorCitpbnQgYnVzX2NyZWF0ZV9maWxlKHN0cnVjdCBidXNfdHlwZSAqLCBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSAqKTsKK3ZvaWQgYnVzX3JlbW92ZV9maWxlKHN0cnVjdCBidXNfdHlwZSAqLCBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSAqKTsKKworCistIGRldmljZSBkcml2ZXJzIChpbmNsdWRlL2xpbnV4L2RldmljZS5oKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RydWN0dXJlOgorCitzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSB7CisgICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgICAgICAgIGF0dHI7CisgICAgICAgIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjaGFyICogYnVmKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjb25zdCBjaGFyICogYnVmKTsKK307CisKK0RlY2xhcmluZzoKKworRFJJVkVSX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitDcmVhdGlvbi9SZW1vdmFsOgorCitpbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwordm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXN2LWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzdi1mcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNzIyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzdi1mcy50eHQKQEAgLTAsMCArMSwzOCBAQAorVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFN5c3RlbVYvQ29oZXJlbnQgZmlsZXN5c3RlbSBmb3IgTGludXguCitJdCBpbXBsZW1lbnRzIGFsbCBvZgorICAtIFhlbml4IEZTLAorICAtIFN5c3RlbVYvMzg2IEZTLAorICAtIENvaGVyZW50IEZTLgorCitUaGlzIGlzIHZlcnNpb24gYmV0YSA0LgorCitUbyBpbnN0YWxsOgorKiBBbnN3ZXIgdGhlICdTeXN0ZW0gViBhbmQgQ29oZXJlbnQgZmlsZXN5c3RlbSBzdXBwb3J0JyBxdWVzdGlvbiB3aXRoICd5JworICB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwuCisqIFRvIG1vdW50IGEgZGlzayBvciBhIHBhcnRpdGlvbiwgdXNlCisgICAgbW91bnQgWy1yXSAtdCBzeXN2IGRldmljZSBtb3VudHBvaW50CisgIFRoZSBmaWxlIHN5c3RlbSB0eXBlIG5hbWVzCisgICAgICAgICAgICAgICAtdCBzeXN2CisgICAgICAgICAgICAgICAtdCB4ZW5peAorICAgICAgICAgICAgICAgLXQgY29oZXJlbnQKKyAgbWF5IGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5LCBidXQgdGhlIGxhc3QgdHdvIHdpbGwgZXZlbnR1YWxseSBkaXNhcHBlYXIuCisKK0J1Z3MgaW4gdGhlIHByZXNlbnQgaW1wbGVtZW50YXRpb246CistIENvaGVyZW50IEZTOgorICAtIFRoZSAiZnJlZSBsaXN0IGludGVybGVhdmUiIG46bSBpcyBjdXJyZW50bHkgaWdub3JlZC4KKyAgLSBPbmx5IGZpbGUgc3lzdGVtcyB3aXRoIG5vIGZpbGVzeXN0ZW0gbmFtZSBhbmQgbm8gcGFjayBuYW1lIGFyZSByZWNvZ25pemVkLgorICAoU2VlIENvaGVyZW50ICJtYW4gbWtmcyIgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UgZmVhdHVyZXMuKQorLSBTeXN0ZW1WIFJlbGVhc2UgMiBGUzoKKyAgVGhlIHN1cGVyYmxvY2sgaXMgb25seSBzZWFyY2hlZCBpbiB0aGUgYmxvY2tzIDksIDE1LCAxOCwgd2hpY2gKKyAgY29ycmVzcG9uZHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0cmFjayAxIG9uIGZsb3BweSBkaXNrcy4gTm8gc3VwcG9ydAorICBmb3IgdGhpcyBGUyBvbiBoYXJkIGRpc2sgeWV0LgorCisKK1BsZWFzZSByZXBvcnQgYW55IGJ1Z3MgYW5kIHN1Z2dlc3Rpb25zIHRvCisgIEJydW5vIEhhaWJsZSA8aGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKyAgUGFzY2FsIEhhaWJsZSA8aGFpYmxlQGl6Zm0udW5pLXN0dXR0Z2FydC5kZT4KKyAgS3J6eXN6dG9mIEcuIEJhcmFub3dza2kgPGtnYkBtYW5qYWsua25tLm9yZy5wbD4KKworQnJ1bm8gSGFpYmxlCis8aGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdlMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy50eHQKQEAgLTAsMCArMSwxMDAgQEAKK1RtcGZzIGlzIGEgZmlsZSBzeXN0ZW0gd2hpY2gga2VlcHMgYWxsIGZpbGVzIGluIHZpcnR1YWwgbWVtb3J5LgorCisKK0V2ZXJ5dGhpbmcgaW4gdG1wZnMgaXMgdGVtcG9yYXJ5IGluIHRoZSBzZW5zZSB0aGF0IG5vIGZpbGVzIHdpbGwgYmUKK2NyZWF0ZWQgb24geW91ciBoYXJkIGRyaXZlLiBJZiB5b3UgdW5tb3VudCBhIHRtcGZzIGluc3RhbmNlLAorZXZlcnl0aGluZyBzdG9yZWQgdGhlcmVpbiBpcyBsb3N0LgorCit0bXBmcyBwdXRzIGV2ZXJ5dGhpbmcgaW50byB0aGUga2VybmVsIGludGVybmFsIGNhY2hlcyBhbmQgZ3Jvd3MgYW5kCitzaHJpbmtzIHRvIGFjY29tbW9kYXRlIHRoZSBmaWxlcyBpdCBjb250YWlucyBhbmQgaXMgYWJsZSB0byBzd2FwCit1bm5lZWRlZCBwYWdlcyBvdXQgdG8gc3dhcCBzcGFjZS4gSXQgaGFzIG1heGltdW0gc2l6ZSBsaW1pdHMgd2hpY2ggY2FuCitiZSBhZGp1c3RlZCBvbiB0aGUgZmx5IHZpYSAnbW91bnQgLW8gcmVtb3VudCAuLi4nCisKK0lmIHlvdSBjb21wYXJlIGl0IHRvIHJhbWZzICh3aGljaCB3YXMgdGhlIHRlbXBsYXRlIHRvIGNyZWF0ZSB0bXBmcykKK3lvdSBnYWluIHN3YXBwaW5nIGFuZCBsaW1pdCBjaGVja2luZy4gQW5vdGhlciBzaW1pbGFyIHRoaW5nIGlzIHRoZSBSQU0KK2Rpc2sgKC9kZXYvcmFtKiksIHdoaWNoIHNpbXVsYXRlcyBhIGZpeGVkIHNpemUgaGFyZCBkaXNrIGluIHBoeXNpY2FsCitSQU0sIHdoZXJlIHlvdSBoYXZlIHRvIGNyZWF0ZSBhbiBvcmRpbmFyeSBmaWxlc3lzdGVtIG9uIHRvcC4gUmFtZGlza3MKK2Nhbm5vdCBzd2FwIGFuZCB5b3UgZG8gbm90IGhhdmUgdGhlIHBvc3NpYmlsaXR5IHRvIHJlc2l6ZSB0aGVtLiAKKworU2luY2UgdG1wZnMgbGl2ZXMgY29tcGxldGVseSBpbiB0aGUgcGFnZSBjYWNoZSBhbmQgb24gc3dhcCwgYWxsIHRtcGZzCitwYWdlcyBjdXJyZW50bHkgaW4gbWVtb3J5IHdpbGwgc2hvdyB1cCBhcyBjYWNoZWQuIEl0IHdpbGwgbm90IHNob3cgdXAKK2FzIHNoYXJlZCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBGdXJ0aGVyIG9uIHlvdSBjYW4gY2hlY2sgdGhlIGFjdHVhbAorUkFNK3N3YXAgdXNlIG9mIGEgdG1wZnMgaW5zdGFuY2Ugd2l0aCBkZigxKSBhbmQgZHUoMSkuCisKKwordG1wZnMgaGFzIHRoZSBmb2xsb3dpbmcgdXNlczoKKworMSkgVGhlcmUgaXMgYWx3YXlzIGEga2VybmVsIGludGVybmFsIG1vdW50IHdoaWNoIHlvdSB3aWxsIG5vdCBzZWUgYXQKKyAgIGFsbC4gVGhpcyBpcyB1c2VkIGZvciBzaGFyZWQgYW5vbnltb3VzIG1hcHBpbmdzIGFuZCBTWVNWIHNoYXJlZAorICAgbWVtb3J5LiAKKworICAgVGhpcyBtb3VudCBkb2VzIG5vdCBkZXBlbmQgb24gQ09ORklHX1RNUEZTLiBJZiBDT05GSUdfVE1QRlMgaXMgbm90CisgICBzZXQsIHRoZSB1c2VyIHZpc2libGUgcGFydCBvZiB0bXBmcyBpcyBub3QgYnVpbGQuIEJ1dCB0aGUgaW50ZXJuYWwKKyAgIG1lY2hhbmlzbXMgYXJlIGFsd2F5cyBwcmVzZW50LgorCisyKSBnbGliYyAyLjIgYW5kIGFib3ZlIGV4cGVjdHMgdG1wZnMgdG8gYmUgbW91bnRlZCBhdCAvZGV2L3NobSBmb3IKKyAgIFBPU0lYIHNoYXJlZCBtZW1vcnkgKHNobV9vcGVuLCBzaG1fdW5saW5rKS4gQWRkaW5nIHRoZSBmb2xsb3dpbmcKKyAgIGxpbmUgdG8gL2V0Yy9mc3RhYiBzaG91bGQgdGFrZSBjYXJlIG9mIHRoaXM6CisKKwl0bXBmcwkvZGV2L3NobQl0bXBmcwlkZWZhdWx0cwkwIDAKKworICAgUmVtZW1iZXIgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgdGhhdCB5b3UgaW50ZW5kIHRvIG1vdW50IHRtcGZzIG9uCisgICBpZiBuZWNlc3NhcnkgKC9kZXYvc2htIGlzIGF1dG9tYWdpY2FsbHkgY3JlYXRlZCBpZiB5b3UgdXNlIGRldmZzKS4KKworICAgVGhpcyBtb3VudCBpcyBfbm90XyBuZWVkZWQgZm9yIFNZU1Ygc2hhcmVkIG1lbW9yeS4gVGhlIGludGVybmFsCisgICBtb3VudCBpcyB1c2VkIGZvciB0aGF0LiAoSW4gdGhlIDIuMyBrZXJuZWwgdmVyc2lvbnMgaXQgd2FzCisgICBuZWNlc3NhcnkgdG8gbW91bnQgdGhlIHByZWRlY2Vzc29yIG9mIHRtcGZzIChzaG0gZnMpIHRvIHVzZSBTWVNWCisgICBzaGFyZWQgbWVtb3J5KQorCiszKSBTb21lIHBlb3BsZSAoaW5jbHVkaW5nIG1lKSBmaW5kIGl0IHZlcnkgY29udmVuaWVudCB0byBtb3VudCBpdAorICAgZS5nLiBvbiAvdG1wIGFuZCAvdmFyL3RtcCBhbmQgaGF2ZSBhIGJpZyBzd2FwIHBhcnRpdGlvbi4gQW5kIG5vdworICAgbG9vcCBtb3VudHMgb2YgdG1wZnMgZmlsZXMgZG8gd29yaywgc28gbWtpbml0cmQgc2hpcHBlZCBieSBtb3N0CisgICBkaXN0cmlidXRpb25zIHNob3VsZCBzdWNjZWVkIHdpdGggYSB0bXBmcyAvdG1wLgorCis0KSBBbmQgcHJvYmFibHkgYSBsb3QgbW9yZSBJIGRvIG5vdCBrbm93IGFib3V0IDotKQorCisKK3RtcGZzIGhhcyB0aHJlZSBtb3VudCBvcHRpb25zIGZvciBzaXppbmc6CisKK3NpemU6ICAgICAgVGhlIGxpbWl0IG9mIGFsbG9jYXRlZCBieXRlcyBmb3IgdGhpcyB0bXBmcyBpbnN0YW5jZS4gVGhlIAorICAgICAgICAgICBkZWZhdWx0IGlzIGhhbGYgb2YgeW91ciBwaHlzaWNhbCBSQU0gd2l0aG91dCBzd2FwLiBJZiB5b3UKKyAgICAgICAgICAgb3ZlcnNpemUgeW91ciB0bXBmcyBpbnN0YW5jZXMgdGhlIG1hY2hpbmUgd2lsbCBkZWFkbG9jaworICAgICAgICAgICBzaW5jZSB0aGUgT09NIGhhbmRsZXIgd2lsbCBub3QgYmUgYWJsZSB0byBmcmVlIHRoYXQgbWVtb3J5LgorbnJfYmxvY2tzOiBUaGUgc2FtZSBhcyBzaXplLCBidXQgaW4gYmxvY2tzIG9mIFBBR0VfQ0FDSEVfU0laRS4KK25yX2lub2RlczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGlub2RlcyBmb3IgdGhpcyBpbnN0YW5jZS4gVGhlIGRlZmF1bHQKKyAgICAgICAgICAgaXMgaGFsZiBvZiB0aGUgbnVtYmVyIG9mIHlvdXIgcGh5c2ljYWwgUkFNIHBhZ2VzLCBvciAob24gYQorICAgICAgICAgICBhIG1hY2hpbmUgd2l0aCBoaWdobWVtKSB0aGUgbnVtYmVyIG9mIGxvd21lbSBSQU0gcGFnZXMsCisgICAgICAgICAgIHdoaWNoZXZlciBpcyB0aGUgbG93ZXIuCisKK1RoZXNlIHBhcmFtZXRlcnMgYWNjZXB0IGEgc3VmZml4IGssIG0gb3IgZyBmb3Iga2lsbywgbWVnYSBhbmQgZ2lnYSBhbmQKK2NhbiBiZSBjaGFuZ2VkIG9uIHJlbW91bnQuICBUaGUgc2l6ZSBwYXJhbWV0ZXIgYWxzbyBhY2NlcHRzIGEgc3VmZml4ICUKK3RvIGxpbWl0IHRoaXMgdG1wZnMgaW5zdGFuY2UgdG8gdGhhdCBwZXJjZW50YWdlIG9mIHlvdXIgcGh5c2ljYWwgUkFNOgordGhlIGRlZmF1bHQsIHdoZW4gbmVpdGhlciBzaXplIG5vciBucl9ibG9ja3MgaXMgc3BlY2lmaWVkLCBpcyBzaXplPTUwJQorCitJZiBib3RoIG5yX2Jsb2NrcyAob3Igc2l6ZSkgYW5kIG5yX2lub2RlcyBhcmUgc2V0IHRvIDAsIG5laXRoZXIgYmxvY2tzCitub3IgaW5vZGVzIHdpbGwgYmUgbGltaXRlZCBpbiB0aGF0IGluc3RhbmNlLiAgSXQgaXMgZ2VuZXJhbGx5IHVud2lzZSB0bworbW91bnQgd2l0aCBzdWNoIG9wdGlvbnMsIHNpbmNlIGl0IGFsbG93cyBhbnkgdXNlciB3aXRoIHdyaXRlIGFjY2VzcyB0bwordXNlIHVwIGFsbCB0aGUgbWVtb3J5IG9uIHRoZSBtYWNoaW5lOyBidXQgZW5oYW5jZXMgdGhlIHNjYWxhYmlsaXR5IG9mCit0aGF0IGluc3RhbmNlIGluIGEgc3lzdGVtIHdpdGggbWFueSBjcHVzIG1ha2luZyBpbnRlbnNpdmUgdXNlIG9mIGl0LgorCisKK1RvIHNwZWNpZnkgdGhlIGluaXRpYWwgcm9vdCBkaXJlY3RvcnkgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBtb3VudAorb3B0aW9uczoKKworbW9kZToJVGhlIHBlcm1pc3Npb25zIGFzIGFuIG9jdGFsIG51bWJlcgordWlkOglUaGUgdXNlciBpZCAKK2dpZDoJVGhlIGdyb3VwIGlkCisKK1RoZXNlIG9wdGlvbnMgZG8gbm90IGhhdmUgYW55IGVmZmVjdCBvbiByZW1vdW50LiBZb3UgY2FuIGNoYW5nZSB0aGVzZQorcGFyYW1ldGVycyB3aXRoIGNobW9kKDEpLCBjaG93bigxKSBhbmQgY2hncnAoMSkgb24gYSBtb3VudGVkIGZpbGVzeXN0ZW0uCisKKworU28gJ21vdW50IC10IHRtcGZzIC1vIHNpemU9MTBHLG5yX2lub2Rlcz0xMGssbW9kZT03MDAgdG1wZnMgL215dG1wZnMnCit3aWxsIGdpdmUgeW91IHRtcGZzIGluc3RhbmNlIG9uIC9teXRtcGZzIHdoaWNoIGNhbiBhbGxvY2F0ZSAxMEdCCitSQU0vU1dBUCBpbiAxMDI0MCBpbm9kZXMgYW5kIGl0IGlzIG9ubHkgYWNjZXNzaWJsZSBieSByb290LgorCisKK0F1dGhvcjoKKyAgIENocmlzdG9waCBSb2hsYW5kIDxjckBzYXAuY29tPiwgMS4xMi4wMQorVXBkYXRlZDoKKyAgIEh1Z2ggRGlja2lucyA8aHVnaEB2ZXJpdGFzLmNvbT4sIDAxIFNlcHRlbWJlciAyMDA0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyMTNiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dApAQCAtMCwwICsxLDU3IEBACisqCisqIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dAorKgorVURGIEZpbGVzeXN0ZW0gdmVyc2lvbiAwLjkuOC4xCisKK0lmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgd2l0aCByZWFkaW5nIFVERiBkaXNjcyB1c2luZyB0aGlzIGRyaXZlciwKK3BsZWFzZSByZXBvcnQgdGhlbSB0byBsaW51eF91ZGZAaHBlc2pyby5mYy5ocC5jb20sIHdoaWNoIGlzIHRoZQorZGV2ZWxvcGVyJ3MgbGlzdC4KKworV3JpdGUgc3VwcG9ydCByZXF1aXJlcyBhIGJsb2NrIGRyaXZlciB3aGljaCBzdXBwb3J0cyB3cml0aW5nLiBUaGUgY3VycmVudAorc2NzaSBhbmQgaWRlIGNkcm9tIGRyaXZlcnMgZG8gbm90IHN1cHBvcnQgd3JpdGluZy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKwlnaWQ9CQlTZXQgdGhlIGRlZmF1bHQgZ3JvdXAuCisJdW1hc2s9CQlTZXQgdGhlIGRlZmF1bHQgdW1hc2suCisJdWlkPQkJU2V0IHRoZSBkZWZhdWx0IHVzZXIuCisJYnM9CQlTZXQgdGhlIGJsb2NrIHNpemUuCisJdW5oaWRlCQlTaG93IG90aGVyd2lzZSBoaWRkZW4gZmlsZXMuCisJdW5kZWxldGUJU2hvdyBkZWxldGVkIGZpbGVzIGluIGxpc3RzLgorCWFkaW5pY2IJCUVtYmVkIGRhdGEgaW4gdGhlIGlub2RlIChkZWZhdWx0KQorCW5vYWRpbmljYglEb24ndCBlbWJlZCBkYXRhIGluIHRoZSBpbm9kZQorCXNob3J0YWQJCVVzZSBzaG9ydCBhZCdzCisJbG9uZ2FkCQlVc2UgbG9uZyBhZCdzIChkZWZhdWx0KQorCW5vc3RyaWN0CVVuc2V0IHN0cmljdCBjb25mb3JtYW5jZQorCWlvY2hhcnNldD0JU2V0IHRoZSBOTFMgY2hhcmFjdGVyIHNldAorCitUaGUgcmVtYWluaW5nIGFyZSBmb3IgZGVidWdnaW5nIGFuZCBkaXNhc3RlciByZWNvdmVyeToKKworCW5vdnJzCQlTa2lwIHZvbHVtZSBzZXF1ZW5jZSByZWNvZ25pdGlvbiAKKworVGhlIGZvbGxvd2luZyBleHBlY3QgYSBvZmZzZXQgZnJvbSAwLgorCisJc2Vzc2lvbj0JU2V0IHRoZSBDRFJPTSBzZXNzaW9uIChkZWZhdWx0PSBsYXN0IHNlc3Npb24pCisJYW5jaG9yPQkJT3ZlcnJpZGUgc3RhbmRhcmQgYW5jaG9yIGxvY2F0aW9uLiAoZGVmYXVsdD0gMjU2KQorCXZvbHVtZT0JCU92ZXJyaWRlIHRoZSBWb2x1bWVEZXNjIGxvY2F0aW9uLiAodW51c2VkKQorCXBhcnRpdGlvbj0JT3ZlcnJpZGUgdGhlIFBhcnRpdGlvbkRlc2MgbG9jYXRpb24uICh1bnVzZWQpCisJbGFzdGJsb2NrPQlTZXQgdGhlIGxhc3QgYmxvY2sgb2YgdGhlIGZpbGVzeXN0ZW0vCisKK1RoZSBmb2xsb3dpbmcgZXhwZWN0IGEgb2Zmc2V0IGZyb20gdGhlIHBhcnRpdGlvbiByb290LgorCisJZmlsZXNldD0JT3ZlcnJpZGUgdGhlIGZpbGVzZXQgYmxvY2sgbG9jYXRpb24uICh1bnVzZWQpCisJcm9vdGRpcj0JT3ZlcnJpZGUgdGhlIHJvb3QgZGlyZWN0b3J5IGxvY2F0aW9uLiAodW51c2VkKQorCQkJV0FSTklORzogb3ZlcnJpZGluZyB0aGUgcm9vdGRpciB0byBhIG5vbi1kaXJlY3RvcnkgbWF5CisJCQkJeWllbGQgaGlnaGx5IHVucHJlZGljdGFibGUgcmVzdWx0cy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCB0b29sc2V0IHNlZToKKwlodHRwOi8vbGludXgtdWRmLnNvdXJjZWZvcmdlLm5ldC8KKworRG9jdW1lbnRhdGlvbiBvbiBVREYgYW5kIEVDTUEgMTY3IGlzIGF2YWlsYWJsZSBGUkVFIGZyb206CisJaHR0cDovL3d3dy5vc3RhLm9yZy8KKwlodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvCisKK0JlbiBGZW5uZW1hIDxiZmVubmVtYUBmYWxjb24uY3NjLmNhbHBvbHkuZWR1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWE1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Vmcy50eHQKQEAgLTAsMCArMSw2MSBAQAorVVNJTkcgVUZTCis9PT09PT09PT0KKworbW91bnQgLXQgdWZzIC1vIHVmc3R5cGU9dHlwZV9vZl91ZnMgZGV2aWNlIGRpcgorCisKK1VGUyBPUFRJT05TCis9PT09PT09PT09PQorCit1ZnN0eXBlPXR5cGVfb2ZfdWZzCisJVUZTIGlzIGEgZmlsZSBzeXN0ZW0gd2lkZWx5IHVzZWQgaW4gZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zLgorCVRoZSBwcm9ibGVtIGFyZSBkaWZmZXJlbmNlcyBhbW9uZyBpbXBsZW1lbnRhdGlvbnMuIEZlYXR1cmVzIG9mCisJc29tZSBpbXBsZW1lbnRhdGlvbnMgYXJlIHVuZG9jdW1lbnRlZCwgc28gaXRzIGhhcmQgdG8gcmVjb2duaXplCisJdHlwZSBvZiB1ZnMgYXV0b21hdGljYWxseS4gVGhhdCdzIHdoeSB1c2VyIG11c3Qgc3BlY2lmeSB0eXBlIG9mIAorCXVmcyBtYW51YWxseSBieSBtb3VudCBvcHRpb24gdWZzdHlwZS4gUG9zc2libGUgdmFsdWVzIGFyZToKKworCW9sZAlvbGQgZm9ybWF0IG9mIHVmcworCQlkZWZhdWx0IHZhbHVlLCBzdXBwb3J0ZWQgYXMgcmVhZC1vbmx5CisKKwk0NGJzZAl1c2VkIGluIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRAorCQlzdXBwb3J0ZWQgYXMgcmVhZC13cml0ZQorCisJdWZzMiAgICB1c2VkIGluIEZyZWVCU0QgNS54CisJCXN1cHBvcnRlZCBhcyByZWFkLW9ubHkKKworCTV4YnNkCXN5bm9ueW0gZm9yIHVmczIKKworCXN1bgl1c2VkIGluIFN1bk9TIChTb2xhcmlzKQorCQlzdXBwb3J0ZWQgYXMgcmVhZC13cml0ZQorCisJc3VueDg2CXVzZWQgaW4gU3VuT1MgZm9yIEludGVsIChTb2xhcmlzeDg2KQorCQlzdXBwb3J0ZWQgYXMgcmVhZC13cml0ZQorCisJaHAJdXNlZCBpbiBIUC1VWAorCQlzdXBwb3J0ZWQgYXMgcmVhZC1vbmx5CisKKwluZXh0c3RlcAorCQl1c2VkIGluIE5leHRTdGVwCisJCXN1cHBvcnRlZCBhcyByZWFkLW9ubHkKKworCW5leHRzdGVwLWNkCisJCXVzZWQgZm9yIE5leHRTdGVwIENEUk9NcyAoYmxvY2tfc2l6ZSA9PSAyMDQ4KQorCQlzdXBwb3J0ZWQgYXMgcmVhZC1vbmx5CisKKwlvcGVuc3RlcAorCQl1c2VkIGluIE9wZW5TdGVwCisJCXN1cHBvcnRlZCBhcyByZWFkLW9ubHkKKworCitQT1NTSUJMRSBQUk9CTEVNUworPT09PT09PT09PT09PT09PT0KKworVGhlcmUgaXMgc3RpbGwgYnVnIGluIHJlYWxsb2NhdGlvbiBvZiBmcmFnbWVudCwgaW4gZmlsZSBmcy91ZnMvYmFsbG9jLmMsIAorbGluZSAzNjQuIEJ1dCBpdCBzZWVtcyB3b3JraW5nIG9uIGN1cnJlbnQgYnVmZmVyIGNhY2hlIGNvbmZpZ3VyYXRpb24uCisKKworQlVHIFJFUE9SVFMKKz09PT09PT09PT09CisKK0FueSB1ZnMgYnVnIHJlcG9ydCB5b3UgY2FuIHNlbmQgdG8gZGFuaWVsLnBpcmtsQGVtYWlsLmN6IChkbyBub3Qgc2VuZCAKK3BhcnRpdGlvbiB0YWJsZXMgYnVnIHJlcG9ydHMuKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhZDIwYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKQEAgLTAsMCArMSwyMzEgQEAKK1VTSU5HIFZGQVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHVzZSB0aGUgdmZhdCBmaWxlc3lzdGVtLCB1c2UgdGhlIGZpbGVzeXN0ZW0gdHlwZSAndmZhdCcuICBpLmUuCisgIG1vdW50IC10IHZmYXQgL2Rldi9mZDAgL21udAorCitObyBzcGVjaWFsIHBhcnRpdGlvbiBmb3JtYXR0ZXIgaXMgcmVxdWlyZWQuICBta2Rvc2ZzIHdpbGwgd29yayBmaW5lCitpZiB5b3Ugd2FudCB0byBmb3JtYXQgZnJvbSB3aXRoaW4gTGludXguCisKK1ZGQVQgTU9VTlQgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordW1hc2s9IyMjICAgICAtLSBUaGUgcGVybWlzc2lvbiBtYXNrIChmb3IgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLCBzZWUgdW1hc2soMSkpLgorICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0aGUgdW1hc2sgb2YgY3VycmVudCBwcm9jZXNzLgorCitkbWFzaz0jIyMgICAgIC0tIFRoZSBwZXJtaXNzaW9uIG1hc2sgZm9yIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRoZSB1bWFzayBvZiBjdXJyZW50IHByb2Nlc3MuCisKK2ZtYXNrPSMjIyAgICAgLS0gVGhlIHBlcm1pc3Npb24gbWFzayBmb3IgZmlsZXMuCisgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRoZSB1bWFzayBvZiBjdXJyZW50IHByb2Nlc3MuCisKK2NvZGVwYWdlPSMjIyAgLS0gU2V0cyB0aGUgY29kZXBhZ2UgbnVtYmVyIGZvciBjb252ZXJ0aW5nIHRvIHNob3J0bmFtZQorCQkgY2hhcmFjdGVycyBvbiBGQVQgZmlsZXN5c3RlbS4KKwkJIEJ5IGRlZmF1bHQsIEZBVF9ERUZBVUxUX0NPREVQQUdFIHNldHRpbmcgaXMgdXNlZC4KKworaW9jaGFyc2V0PW5hbWUgLS0gQ2hhcmFjdGVyIHNldCB0byB1c2UgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiB0aGUKKwkJIGVuY29kaW5nIGlzIHVzZWQgZm9yIHVzZXIgdmlzaWJsZSBmaWxlbmFtZSBhbmQgMTYgYml0CisJCSBVbmljb2RlIGNoYXJhY3RlcnMuIExvbmcgZmlsZW5hbWVzIGFyZSBzdG9yZWQgb24gZGlzaworCQkgaW4gVW5pY29kZSBmb3JtYXQsIGJ1dCBVbml4IGZvciB0aGUgbW9zdCBwYXJ0IGRvZXNuJ3QKKwkJIGtub3cgaG93IHRvIGRlYWwgd2l0aCBVbmljb2RlLgorCQkgQnkgZGVmYXVsdCwgRkFUX0RFRkFVTFRfSU9DSEFSU0VUIHNldHRpbmcgaXMgdXNlZC4KKworCQkgVGhlcmUgaXMgYWxzbyBhbiBvcHRpb24gb2YgZG9pbmcgVVRGOCB0cmFuc2xhdGlvbnMKKwkJIHdpdGggdGhlIHV0Zjggb3B0aW9uLgorCisJCSBOT1RFOiAiaW9jaGFyc2V0PXV0ZjgiIGlzIG5vdCByZWNvbW1lbmRlZC4gSWYgdW5zdXJlLAorCQkgeW91IHNob3VsZCBjb25zaWRlciB0aGUgZm9sbG93aW5nIG9wdGlvbiBpbnN0ZWFkLgorCit1dGY4PTxib29sPiAgIC0tIFVURjggaXMgdGhlIGZpbGVzeXN0ZW0gc2FmZSB2ZXJzaW9uIG9mIFVuaWNvZGUgdGhhdAorCQkgaXMgdXNlZCBieSB0aGUgY29uc29sZS4gIEl0IGNhbiBiZSBiZSBlbmFibGVkIGZvciB0aGUKKwkJIGZpbGVzeXN0ZW0gd2l0aCB0aGlzIG9wdGlvbi4gSWYgJ3VuaV94bGF0ZScgZ2V0cyBzZXQsCisJCSBVVEY4IGdldHMgZGlzYWJsZWQuCisKK3VuaV94bGF0ZT08Ym9vbD4gLS0gVHJhbnNsYXRlIHVuaGFuZGxlZCBVbmljb2RlIGNoYXJhY3RlcnMgdG8gc3BlY2lhbAorCQkgZXNjYXBlZCBzZXF1ZW5jZXMuICBUaGlzIHdvdWxkIGxldCB5b3UgYmFja3VwIGFuZAorCQkgcmVzdG9yZSBmaWxlbmFtZXMgdGhhdCBhcmUgY3JlYXRlZCB3aXRoIGFueSBVbmljb2RlCisJCSBjaGFyYWN0ZXJzLiAgVW50aWwgTGludXggc3VwcG9ydHMgVW5pY29kZSBmb3IgcmVhbCwKKwkJIHRoaXMgZ2l2ZXMgeW91IGFuIGFsdGVybmF0aXZlLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwKKwkJIGEgJz8nIGlzIHVzZWQgd2hlbiBubyB0cmFuc2xhdGlvbiBpcyBwb3NzaWJsZS4gIFRoZQorCQkgZXNjYXBlIGNoYXJhY3RlciBpcyAnOicgYmVjYXVzZSBpdCBpcyBvdGhlcndpc2UKKwkJIGlsbGVnYWwgb24gdGhlIHZmYXQgZmlsZXN5c3RlbS4gIFRoZSBlc2NhcGUgc2VxdWVuY2UKKwkJIHRoYXQgZ2V0cyB1c2VkIGlzICc6JyBhbmQgdGhlIGZvdXIgZGlnaXRzIG9mIGhleGFkZWNpbWFsCisJCSB1bmljb2RlLgorCitub251bXRhaWw9PGJvb2w+IC0tIFdoZW4gY3JlYXRpbmcgOC4zIGFsaWFzZXMsIG5vcm1hbGx5IHRoZSBhbGlhcyB3aWxsCisgICAgICAgICAgICAgICAgIGVuZCBpbiAnfjEnIG9yIHRpbGRlIGZvbGxvd2VkIGJ5IHNvbWUgbnVtYmVyLiAgSWYgdGhpcworICAgICAgICAgICAgICAgICBvcHRpb24gaXMgc2V0LCB0aGVuIGlmIHRoZSBmaWxlbmFtZSBpcyAKKyAgICAgICAgICAgICAgICAgImxvbmdmaWxlbmFtZS50eHQiIGFuZCAibG9uZ2ZpbGUudHh0IiBkb2VzIG5vdAorICAgICAgICAgICAgICAgICBjdXJyZW50bHkgZXhpc3QgaW4gdGhlIGRpcmVjdG9yeSwgJ2xvbmdmaWxlLnR4dCcgd2lsbAorICAgICAgICAgICAgICAgICBiZSB0aGUgc2hvcnQgYWxpYXMgaW5zdGVhZCBvZiAnbG9uZ2ZpfjEudHh0Jy4gCisgICAgICAgICAgICAgICAgICAKK3F1aWV0ICAgICAgICAgLS0gU3RvcHMgcHJpbnRpbmcgY2VydGFpbiB3YXJuaW5nIG1lc3NhZ2VzLgorCitjaGVjaz1zfHJ8biAgIC0tIENhc2Ugc2Vuc2l0aXZpdHkgY2hlY2tpbmcgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgczogc3RyaWN0LCBjYXNlIHNlbnNpdGl2ZQorICAgICAgICAgICAgICAgICByOiByZWxheGVkLCBjYXNlIGluc2Vuc2l0aXZlCisgICAgICAgICAgICAgICAgIG46IG5vcm1hbCwgZGVmYXVsdCBzZXR0aW5nLCBjdXJyZW50bHkgY2FzZSBpbnNlbnNpdGl2ZQorCitzaG9ydG5hbWU9bG93ZXJ8d2luOTV8d2lubnR8bWl4ZWQKKwkgICAgICAtLSBTaG9ydG5hbWUgZGlzcGxheS9jcmVhdGUgc2V0dGluZy4KKwkJIGxvd2VyOiBjb252ZXJ0IHRvIGxvd2VyY2FzZSBmb3IgZGlzcGxheSwKKwkJCWVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgY3JlYXRlLgorCQkgd2luOTU6IGVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgZGlzcGxheS9jcmVhdGUuCisJCSB3aW5udDogZW11bGF0ZSB0aGUgV2luZG93cyBOVCBydWxlIGZvciBkaXNwbGF5L2NyZWF0ZS4KKwkJIG1peGVkOiBlbXVsYXRlIHRoZSBXaW5kb3dzIE5UIHJ1bGUgZm9yIGRpc3BsYXksCisJCQllbXVsYXRlIHRoZSBXaW5kb3dzIDk1IHJ1bGUgZm9yIGNyZWF0ZS4KKwkJIERlZmF1bHQgc2V0dGluZyBpcyBgbG93ZXInLgorCis8Ym9vbD46IDAsMSx5ZXMsbm8sdHJ1ZSxmYWxzZQorCitUT0RPCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIE5lZWQgdG8gZ2V0IHJpZCBvZiB0aGUgcmF3IHNjYW5uaW5nIHN0dWZmLiAgSW5zdGVhZCwgYWx3YXlzIHVzZQorICBhIGdldCBuZXh0IGRpcmVjdG9yeSBlbnRyeSBhcHByb2FjaC4gIFRoZSBvbmx5IHRoaW5nIGxlZnQgdGhhdCB1c2VzCisgIHJhdyBzY2FubmluZyBpcyB0aGUgZGlyZWN0b3J5IHJlbmFtaW5nIGNvZGUuCisKKworUE9TU0lCTEUgUFJPQkxFTVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogdmZhdF92YWxpZF9sb25nbmFtZSBkb2VzIG5vdCBwcm9wZXJseSBjaGVja2VkIHJlc2VydmVkIG5hbWVzLgorKiBXaGVuIGEgdm9sdW1lIG5hbWUgaXMgdGhlIHNhbWUgYXMgYSBkaXJlY3RvcnkgbmFtZSBpbiB0aGUgcm9vdAorICBkaXJlY3Rvcnkgb2YgdGhlIGZpbGVzeXN0ZW0sIHRoZSBkaXJlY3RvcnkgbmFtZSBzb21ldGltZXMgc2hvd3MKKyAgdXAgYXMgYW4gZW1wdHkgZmlsZS4KKyogYXV0b2NvbnYgb3B0aW9uIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5LgorCitCVUcgUkVQT1JUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIHRoZSBWRkFUIGZpbGVzeXN0ZW0sIG1haWwgYnVnIHJlcG9ydHMgdG8KK2NoYWZmZWVAYm1yYy5jcy5iZXJrZWxleS5lZHUuICBQbGVhc2Ugc3BlY2lmeSB0aGUgZmlsZW5hbWUKK2FuZCB0aGUgb3BlcmF0aW9uIHRoYXQgZ2F2ZSB5b3UgdHJvdWJsZS4KKworVEVTVCBTVUlURQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IHBsYW4gdG8gbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgdmZhdCBmaWxlc3lzdGVtLCBwbGVhc2UKK2dldCB0aGUgdGVzdCBzdWl0ZSB0aGF0IGNvbWVzIHdpdGggdGhlIHZmYXQgZGlzdHJpYnV0aW9uIGF0CisKKyAgaHR0cDovL2JtcmMuYmVya2VsZXkuZWR1L3Blb3BsZS9jaGFmZmVlL3ZmYXQuaHRtbAorCitUaGlzIHRlc3RzIHF1aXRlIGEgZmV3IHBhcnRzIG9mIHRoZSB2ZmF0IGZpbGVzeXN0ZW0gYW5kIGFkZGl0aW9uYWwKK3Rlc3RzIGZvciBuZXcgZmVhdHVyZXMgb3IgdW50ZXN0ZWQgZmVhdHVyZXMgd291bGQgYmUgYXBwcmVjaWF0ZWQuCisKK05PVEVTIE9OIFRIRSBTVFJVQ1RVUkUgT0YgVEhFIFZGQVQgRklMRVNZU1RFTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKFRoaXMgZG9jdW1lbnRhdGlvbiB3YXMgcHJvdmlkZWQgYnkgR2FsZW4gQy4gSHVudCA8Z2NodW50QGNzLnJvY2hlc3Rlci5lZHU+CisgYW5kIGxpZ2h0bHkgYW5ub3RhdGVkIGJ5IEdvcmRvbiBDaGFmZmVlKS4KKworVGhpcyBkb2N1bWVudCBwcmVzZW50cyBhIHZlcnkgcm91Z2gsIHRlY2huaWNhbCBvdmVydmlldyBvZiBteQora25vd2xlZGdlIG9mIHRoZSBleHRlbmRlZCBGQVQgZmlsZSBzeXN0ZW0gdXNlZCBpbiBXaW5kb3dzIE5UIDMuNSBhbmQKK1dpbmRvd3MgOTUuICBJIGRvbid0IGd1YXJhbnRlZSB0aGF0IGFueSBvZiB0aGUgZm9sbG93aW5nIGlzIGNvcnJlY3QsCitidXQgaXQgYXBwZWFycyB0byBiZSBzby4KKworVGhlIGV4dGVuZGVkIEZBVCBmaWxlIHN5c3RlbSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBGQVQKK2ZpbGUgc3lzdGVtIHVzZWQgaW4gRE9TIHZlcnNpb25zIHVwIHRvIGFuZCBpbmNsdWRpbmcgNi4yMjM0MTAyMzk4NDcKKzotKS4gIFRoZSBzaWduaWZpY2FudCBjaGFuZ2UgaGFzIGJlZW4gdGhlIGFkZGl0aW9uIG9mIGxvbmcgZmlsZSBuYW1lcy4KK1RoZXNlIG5hbWVzIHN1cHBvcnQgdXAgdG8gMjU1IGNoYXJhY3RlcnMgaW5jbHVkaW5nIHNwYWNlcyBhbmQgbG93ZXIKK2Nhc2UgY2hhcmFjdGVycyBhcyBvcHBvc2VkIHRvIHRoZSB0cmFkaXRpb25hbCA4LjMgc2hvcnQgbmFtZXMuCisKK0hlcmUgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0cmFkaXRpb25hbCBGQVQgZW50cnkgaW4gdGhlIGN1cnJlbnQKK1dpbmRvd3MgOTUgZmlsZXN5c3RlbToKKworICAgICAgICBzdHJ1Y3QgZGlyZWN0b3J5IHsgLy8gU2hvcnQgOC4zIG5hbWVzIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmFtZVs4XTsgICAgICAgICAgLy8gZmlsZSBuYW1lIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXh0WzNdOyAgICAgICAgICAgLy8gZmlsZSBleHRlbnNpb24gCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhdHRyOyAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUgYnl0ZSAKKwkJdW5zaWduZWQgY2hhciBsY2FzZTsJCS8vIENhc2UgZm9yIGJhc2UgYW5kIGV4dGVuc2lvbgorCQl1bnNpZ25lZCBjaGFyIGN0aW1lX21zOwkJLy8gQ3JlYXRpb24gdGltZSwgbWlsbGlzZWNvbmRzCisJCXVuc2lnbmVkIGNoYXIgY3RpbWVbMl07CQkvLyBDcmVhdGlvbiB0aW1lCisJCXVuc2lnbmVkIGNoYXIgY2RhdGVbMl07CQkvLyBDcmVhdGlvbiBkYXRlCisJCXVuc2lnbmVkIGNoYXIgYWRhdGVbMl07CQkvLyBMYXN0IGFjY2VzcyBkYXRlCisJCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMl07CS8vIHJlc2VydmVkIHZhbHVlcyAoaWdub3JlZCkgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0aW1lWzJdOyAgICAgICAgICAvLyB0aW1lIHN0YW1wIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0ZVsyXTsgICAgICAgICAgLy8gZGF0ZSBzdGFtcCAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0YXJ0WzJdOyAgICAgICAgIC8vIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsgICAgICAgICAgLy8gc2l6ZSBvZiB0aGUgZmlsZSAKKyAgICAgICAgfTsKKworVGhlIGxjYXNlIGZpZWxkIHNwZWNpZmllcyBpZiB0aGUgYmFzZSBhbmQvb3IgdGhlIGV4dGVuc2lvbiBvZiBhbiA4LjMKK25hbWUgc2hvdWxkIGJlIGNhcGl0YWxpemVkLiAgVGhpcyBmaWVsZCBkb2VzIG5vdCBzZWVtIHRvIGJlIHVzZWQgYnkKK1dpbmRvd3MgOTUgYnV0IGl0IGlzIHVzZWQgYnkgV2luZG93cyBOVC4gIFRoZSBjYXNlIG9mIGZpbGVuYW1lcyBpcyBub3QKK2NvbXBsZXRlbHkgY29tcGF0aWJsZSBmcm9tIFdpbmRvd3MgTlQgdG8gV2luZG93cyA5NS4gIEl0IGlzIG5vdCBjb21wbGV0ZWx5Citjb21wYXRpYmxlIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbiwgaG93ZXZlci4gIEZpbGVuYW1lcyB0aGF0IGZpdCBpbgordGhlIDguMyBuYW1lc3BhY2UgYW5kIGFyZSB3cml0dGVuIG9uIFdpbmRvd3MgTlQgdG8gYmUgbG93ZXJjYXNlIHdpbGwKK3Nob3cgdXAgYXMgdXBwZXJjYXNlIG9uIFdpbmRvd3MgOTUuCisKK05vdGUgdGhhdCB0aGUgInN0YXJ0IiBhbmQgInNpemUiIHZhbHVlcyBhcmUgYWN0dWFsbHkgbGl0dGxlCitlbmRpYW4gaW50ZWdlciB2YWx1ZXMuICBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZSBmaWVsZHMgaW4gdGhpcworc3RydWN0dXJlIGFyZSBwdWJsaWMga25vd2xlZGdlIGFuZCBjYW4gYmUgZm91bmQgZWxzZXdoZXJlLgorCitXaXRoIHRoZSBleHRlbmRlZCBGQVQgc3lzdGVtLCBNaWNyb3NvZnQgaGFzIGluc2VydGVkIGV4dHJhCitkaXJlY3RvcnkgZW50cmllcyBmb3IgYW55IGZpbGVzIHdpdGggZXh0ZW5kZWQgbmFtZXMuICAoQW55IG5hbWUgd2hpY2gKK2xlZ2FsbHkgZml0cyB3aXRoaW4gdGhlIG9sZCA4LjMgZW5jb2Rpbmcgc2NoZW1lIGRvZXMgbm90IGhhdmUgZXh0cmEKK2VudHJpZXMuKSAgSSBjYWxsIHRoZXNlIGV4dHJhIGVudHJpZXMgc2xvdHMuICBCYXNpY2FsbHksIGEgc2xvdCBpcyBhCitzcGVjaWFsbHkgZm9ybWF0dGVkIGRpcmVjdG9yeSBlbnRyeSB3aGljaCBob2xkcyB1cCB0byAxMyBjaGFyYWN0ZXJzIG9mCithIGZpbGUncyBleHRlbmRlZCBuYW1lLiAgVGhpbmsgb2Ygc2xvdHMgYXMgYWRkaXRpb25hbCBsYWJlbGluZyBmb3IgdGhlCitkaXJlY3RvcnkgZW50cnkgb2YgdGhlIGZpbGUgdG8gd2hpY2ggdGhleSBjb3JyZXNwb25kLiAgTWljcm9zb2Z0CitwcmVmZXJzIHRvIHJlZmVyIHRvIHRoZSA4LjMgZW50cnkgZm9yIGEgZmlsZSBhcyBpdHMgYWxpYXMgYW5kIHRoZQorZXh0ZW5kZWQgc2xvdCBkaXJlY3RvcnkgZW50cmllcyBhcyB0aGUgZmlsZSBuYW1lLiAKKworVGhlIEMgc3RydWN0dXJlIGZvciBhIHNsb3QgZGlyZWN0b3J5IGVudHJ5IGZvbGxvd3M6CisKKyAgICAgICAgc3RydWN0IHNsb3QgeyAvLyBVcCB0byAxMyBjaGFyYWN0ZXJzIG9mIGEgbG9uZyBuYW1lIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaWQ7ICAgICAgICAgICAgICAgLy8gc2VxdWVuY2UgbnVtYmVyIGZvciBzbG90IAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmFtZTBfNFsxMF07ICAgICAgLy8gZmlyc3QgNSBjaGFyYWN0ZXJzIGluIG5hbWUgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhdHRyOyAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUgYnl0ZQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ7ICAgICAgICAgLy8gYWx3YXlzIDAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlhc19jaGVja3N1bTsgICAvLyBjaGVja3N1bSBmb3IgOC4zIGFsaWFzIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmFtZTVfMTBbMTJdOyAgICAgLy8gNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhcnRbMl07ICAgICAgICAgLy8gc3RhcnRpbmcgY2x1c3RlciBudW1iZXIKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWUxMV8xMls0XTsgICAgIC8vIGxhc3QgMiBjaGFyYWN0ZXJzIGluIG5hbWUKKyAgICAgICAgfTsKKworSWYgdGhlIGxheW91dCBvZiB0aGUgc2xvdHMgbG9va3MgYSBsaXR0bGUgb2RkLCBpdCdzIG9ubHkKK2JlY2F1c2Ugb2YgTWljcm9zb2Z0J3MgZWZmb3J0cyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkCitzb2Z0d2FyZS4gIFRoZSBzbG90cyBtdXN0IGJlIGRpc2d1aXNlZCB0byBwcmV2ZW50IG9sZCBzb2Z0d2FyZSBmcm9tCitwYW5pY2tpbmcuICBUbyB0aGlzIGVuZCwgYSBudW1iZXIgb2YgbWVhc3VyZXMgYXJlIHRha2VuOgorCisgICAgICAgIDEpIFRoZSBhdHRyaWJ1dGUgYnl0ZSBmb3IgYSBzbG90IGRpcmVjdG9yeSBlbnRyeSBpcyBhbHdheXMgc2V0CisgICAgICAgICAgIHRvIDB4MGYuICBUaGlzIGNvcnJlc3BvbmRzIHRvIGFuIG9sZCBkaXJlY3RvcnkgZW50cnkgd2l0aAorICAgICAgICAgICBhdHRyaWJ1dGVzIG9mICJoaWRkZW4iLCAic3lzdGVtIiwgInJlYWQtb25seSIsIGFuZCAidm9sdW1lCisgICAgICAgICAgIGxhYmVsIi4gIE1vc3Qgb2xkIHNvZnR3YXJlIHdpbGwgaWdub3JlIGFueSBkaXJlY3RvcnkKKyAgICAgICAgICAgZW50cmllcyB3aXRoIHRoZSAidm9sdW1lIGxhYmVsIiBiaXQgc2V0LiAgUmVhbCB2b2x1bWUgbGFiZWwKKyAgICAgICAgICAgZW50cmllcyBkb24ndCBoYXZlIHRoZSBvdGhlciB0aHJlZSBiaXRzIHNldC4KKworICAgICAgICAyKSBUaGUgc3RhcnRpbmcgY2x1c3RlciBpcyBhbHdheXMgc2V0IHRvIDAsIGFuIGltcG9zc2libGUKKyAgICAgICAgICAgdmFsdWUgZm9yIGEgRE9TIGZpbGUuCisKK0JlY2F1c2UgdGhlIGV4dGVuZGVkIEZBVCBzeXN0ZW0gaXMgYmFja3dhcmQgY29tcGF0aWJsZSwgaXQgaXMKK3Bvc3NpYmxlIGZvciBvbGQgc29mdHdhcmUgdG8gbW9kaWZ5IGRpcmVjdG9yeSBlbnRyaWVzLiAgTWVhc3VyZXMgbXVzdAorYmUgdGFrZW4gdG8gZW5zdXJlIHRoZSB2YWxpZGl0eSBvZiBzbG90cy4gIEFuIGV4dGVuZGVkIEZBVCBzeXN0ZW0gY2FuCit2ZXJpZnkgdGhhdCBhIHNsb3QgZG9lcyBpbiBmYWN0IGJlbG9uZyB0byBhbiA4LjMgZGlyZWN0b3J5IGVudHJ5IGJ5Cit0aGUgZm9sbG93aW5nOgorCisgICAgICAgIDEpIFBvc2l0aW9uaW5nLiAgU2xvdHMgZm9yIGEgZmlsZSBhbHdheXMgaW1tZWRpYXRlbHkgcHJvY2VlZAorICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIDguMyBkaXJlY3RvcnkgZW50cnkuICBJbiBhZGRpdGlvbiwgZWFjaAorICAgICAgICAgICBzbG90IGhhcyBhbiBpZCB3aGljaCBtYXJrcyBpdHMgb3JkZXIgaW4gdGhlIGV4dGVuZGVkIGZpbGUKKyAgICAgICAgICAgbmFtZS4gIEhlcmUgaXMgYSB2ZXJ5IGFiYnJldmlhdGVkIHZpZXcgb2YgYW4gOC4zIGRpcmVjdG9yeQorICAgICAgICAgICBlbnRyeSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgbG9uZyBuYW1lIHNsb3RzIGZvciB0aGUgZmlsZQorICAgICAgICAgICAiTXkgQmlnIEZpbGUuRXh0ZW5zaW9uIHdoaWNoIGlzIGxvbmciOgorCisgICAgICAgICAgICAgICAgPHByb2NlZWRpbmcgZmlsZXMuLi4+CisgICAgICAgICAgICAgICAgPHNsb3QgIzMsIGlkID0gMHg0MywgY2hhcmFjdGVycyA9ICJoIGlzIGxvbmciPgorICAgICAgICAgICAgICAgIDxzbG90ICMyLCBpZCA9IDB4MDIsIGNoYXJhY3RlcnMgPSAieHRlbnNpb24gd2hpYyI+CisgICAgICAgICAgICAgICAgPHNsb3QgIzEsIGlkID0gMHgwMSwgY2hhcmFjdGVycyA9ICJNeSBCaWcgRmlsZS5FIj4KKyAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5IGVudHJ5LCBuYW1lID0gIk1ZQklHRklMLkVYVCI+CisKKyAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBzbG90cyBhcmUgc3RvcmVkIGZyb20gbGFzdCB0byBmaXJzdC4gIFNsb3RzCisgICAgICAgICAgIGFyZSBudW1iZXJlZCBmcm9tIDEgdG8gTi4gIFRoZSBOdGggc2xvdCBpcyBvcidlZCB3aXRoIDB4NDAKKyAgICAgICAgICAgdG8gbWFyayBpdCBhcyB0aGUgbGFzdCBvbmUuCisKKyAgICAgICAgMikgQ2hlY2tzdW0uICBFYWNoIHNsb3QgaGFzIGFuICJhbGlhc19jaGVja3N1bSIgdmFsdWUuICBUaGUKKyAgICAgICAgICAgY2hlY2tzdW0gaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSA4LjMgbmFtZSB1c2luZyB0aGUKKyAgICAgICAgICAgZm9sbG93aW5nIGFsZ29yaXRobToKKworICAgICAgICAgICAgICAgIGZvciAoc3VtID0gaSA9IDA7IGkgPCAxMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gPSAoKChzdW0mMSk8PDcpfCgoc3VtJjB4ZmUpPj4xKSkgKyBuYW1lW2ldCisgICAgICAgICAgICAgICAgfQorCisJMykgSWYgdGhlcmUgaXMgZnJlZSBzcGFjZSBpbiB0aGUgZmluYWwgc2xvdCwgYSBVbmljb2RlIE5VTEwgKDB4MDAwMCkgCisJICAgaXMgc3RvcmVkIGFmdGVyIHRoZSBmaW5hbCBjaGFyYWN0ZXIuICBBZnRlciB0aGF0LCBhbGwgdW51c2VkIAorCSAgIGNoYXJhY3RlcnMgaW4gdGhlIGZpbmFsIHNsb3QgYXJlIHNldCB0byBVbmljb2RlIDB4RkZGRi4KKworRmluYWxseSwgbm90ZSB0aGF0IHRoZSBleHRlbmRlZCBuYW1lIGlzIHN0b3JlZCBpbiBVbmljb2RlLiAgRWFjaCBVbmljb2RlCitjaGFyYWN0ZXIgdGFrZXMgdHdvIGJ5dGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzE4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTAsMCArMSw2NzEgQEAKKy8qIC0qLSBhdXRvLWZpbGwgLSotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCQlPdmVydmlldyBvZiB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbQorCisJCVJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PgorCisJCQkgICAgICA1LUpVTC0xOTk5CisKKworQ29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGRvY3VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VhY2ggc2VjdGlvbiBpbiB0aGlzIGRvY3VtZW50IHdpbGwgaGF2ZSB0aGUgc3RyaW5nICI8c2VjdGlvbj4iIGF0IHRoZQorcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBzZWN0aW9uIHRpdGxlLiBFYWNoIHN1YnNlY3Rpb24gd2lsbCBoYXZlCisiPHN1YnNlY3Rpb24+IiBhdCB0aGUgcmlnaHQtaGFuZCBzaWRlLiBUaGVzZSBzdHJpbmdzIGFyZSBtZWFudCB0byBtYWtlCitpdCBlYXNpZXIgdG8gc2VhcmNoIHRocm91Z2ggdGhlIGRvY3VtZW50LgorCitOT1RFIHRoYXQgdGhlIG1hc3RlciBjb3B5IG9mIHRoaXMgZG9jdW1lbnQgaXMgYXZhaWxhYmxlIG9ubGluZSBhdDoKK2h0dHA6Ly93d3cuYXRuZi5jc2lyby5hdS9+cmdvb2NoL2xpbnV4L2RvY3MvdmZzLnR4dAorCisKK1doYXQgaXMgaXQ/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbj4KKz09PT09PT09PT09CisKK1RoZSBWaXJ0dWFsIEZpbGUgU3lzdGVtIChvdGhlcndpc2Uga25vd24gYXMgdGhlIFZpcnR1YWwgRmlsZXN5c3RlbQorU3dpdGNoKSBpcyB0aGUgc29mdHdhcmUgbGF5ZXIgaW4gdGhlIGtlcm5lbCB0aGF0IHByb3ZpZGVzIHRoZQorZmlsZXN5c3RlbSBpbnRlcmZhY2UgdG8gdXNlcnNwYWNlIHByb2dyYW1zLiBJdCBhbHNvIHByb3ZpZGVzIGFuCithYnN0cmFjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCB3aGljaCBhbGxvd3MgZGlmZmVyZW50IGZpbGVzeXN0ZW0KK2ltcGxlbWVudGF0aW9ucyB0byBjby1leGlzdC4KKworCitBIFF1aWNrIExvb2sgQXQgSG93IEl0IFdvcmtzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIHRoaXMgc2VjdGlvbiBJJ2xsIGJyaWVmbHkgZGVzY3JpYmUgaG93IHRoaW5ncyB3b3JrLCBiZWZvcmUKK2xhdW5jaGluZyBpbnRvIHRoZSBkZXRhaWxzLiBJJ2xsIHN0YXJ0IHdpdGggZGVzY3JpYmluZyB3aGF0IGhhcHBlbnMKK3doZW4gdXNlciBwcm9ncmFtcyBvcGVuIGFuZCBtYW5pcHVsYXRlIGZpbGVzLCBhbmQgdGhlbiBsb29rIGZyb20gdGhlCitvdGhlciB2aWV3IHdoaWNoIGlzIGhvdyBhIGZpbGVzeXN0ZW0gaXMgc3VwcG9ydGVkIGFuZCBzdWJzZXF1ZW50bHkKK21vdW50ZWQuCisKK09wZW5pbmcgYSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Vic2VjdGlvbj4KKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBWRlMgaW1wbGVtZW50cyB0aGUgb3BlbigyKSwgc3RhdCgyKSwgY2htb2QoMikgYW5kIHNpbWlsYXIgc3lzdGVtCitjYWxscy4gVGhlIHBhdGhuYW1lIGFyZ3VtZW50IGlzIHVzZWQgYnkgdGhlIFZGUyB0byBzZWFyY2ggdGhyb3VnaCB0aGUKK2RpcmVjdG9yeSBlbnRyeSBjYWNoZSAoZGVudHJ5IGNhY2hlIG9yICJkY2FjaGUiKS4gVGhpcyBwcm92aWRlcyBhIHZlcnkKK2Zhc3QgbG9vay11cCBtZWNoYW5pc20gdG8gdHJhbnNsYXRlIGEgcGF0aG5hbWUgKGZpbGVuYW1lKSBpbnRvIGEKK3NwZWNpZmljIGRlbnRyeS4KKworQW4gaW5kaXZpZHVhbCBkZW50cnkgdXN1YWxseSBoYXMgYSBwb2ludGVyIHRvIGFuIGlub2RlLiBJbm9kZXMgYXJlIHRoZQordGhpbmdzIHRoYXQgbGl2ZSBvbiBkaXNjIGRyaXZlcywgYW5kIGNhbiBiZSByZWd1bGFyIGZpbGVzICh5b3Uga25vdzoKK3Rob3NlIHRoaW5ncyB0aGF0IHlvdSB3cml0ZSBkYXRhIGludG8pLCBkaXJlY3RvcmllcywgRklGT3MgYW5kIG90aGVyCitiZWFzdHMuIERlbnRyaWVzIGxpdmUgaW4gUkFNIGFuZCBhcmUgbmV2ZXIgc2F2ZWQgdG8gZGlzYzogdGhleSBleGlzdAorb25seSBmb3IgcGVyZm9ybWFuY2UuIElub2RlcyBsaXZlIG9uIGRpc2MgYW5kIGFyZSBjb3BpZWQgaW50byBtZW1vcnkKK3doZW4gcmVxdWlyZWQuIExhdGVyIGFueSBjaGFuZ2VzIGFyZSB3cml0dGVuIGJhY2sgdG8gZGlzYy4gVGhlIGlub2RlCit0aGF0IGxpdmVzIGluIFJBTSBpcyBhIFZGUyBpbm9kZSwgYW5kIGl0IGlzIHRoaXMgd2hpY2ggdGhlIGRlbnRyeQorcG9pbnRzIHRvLiBBIHNpbmdsZSBpbm9kZSBjYW4gYmUgcG9pbnRlZCB0byBieSBtdWx0aXBsZSBkZW50cmllcworKHRoaW5rIGFib3V0IGhhcmRsaW5rcykuCisKK1RoZSBkY2FjaGUgaXMgbWVhbnQgdG8gYmUgYSB2aWV3IGludG8geW91ciBlbnRpcmUgZmlsZXNwYWNlLiBVbmxpa2UKK0xpbnVzLCBtb3N0IG9mIHVzIGxvc2VycyBjYW4ndCBmaXQgZW5vdWdoIGRlbnRyaWVzIGludG8gUkFNIHRvIGNvdmVyCithbGwgb2Ygb3VyIGZpbGVzcGFjZSwgc28gdGhlIGRjYWNoZSBoYXMgYml0cyBtaXNzaW5nLiBJbiBvcmRlciB0bworcmVzb2x2ZSB5b3VyIHBhdGhuYW1lIGludG8gYSBkZW50cnksIHRoZSBWRlMgbWF5IGhhdmUgdG8gcmVzb3J0IHRvCitjcmVhdGluZyBkZW50cmllcyBhbG9uZyB0aGUgd2F5LCBhbmQgdGhlbiBsb2FkaW5nIHRoZSBpbm9kZS4gVGhpcyBpcworZG9uZSBieSBsb29raW5nIHVwIHRoZSBpbm9kZS4KKworVG8gbG9vayB1cCBhbiBpbm9kZSAodXN1YWxseSByZWFkIGZyb20gZGlzYykgcmVxdWlyZXMgdGhhdCB0aGUgVkZTCitjYWxscyB0aGUgbG9va3VwKCkgbWV0aG9kIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlub2RlLiBUaGlzIG1ldGhvZAoraXMgaW5zdGFsbGVkIGJ5IHRoZSBzcGVjaWZpYyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIHRoYXQgdGhlIGlub2RlCitsaXZlcyBpbi4gVGhlcmUgd2lsbCBiZSBtb3JlIG9uIHRoaXMgbGF0ZXIuCisKK09uY2UgdGhlIFZGUyBoYXMgdGhlIHJlcXVpcmVkIGRlbnRyeSAoYW5kIGhlbmNlIHRoZSBpbm9kZSksIHdlIGNhbiBkbworYWxsIHRob3NlIGJvcmluZyB0aGluZ3MgbGlrZSBvcGVuKDIpIHRoZSBmaWxlLCBvciBzdGF0KDIpIGl0IHRvIHBlZWsKK2F0IHRoZSBpbm9kZSBkYXRhLiBUaGUgc3RhdCgyKSBvcGVyYXRpb24gaXMgZmFpcmx5IHNpbXBsZTogb25jZSB0aGUKK1ZGUyBoYXMgdGhlIGRlbnRyeSwgaXQgcGVla3MgYXQgdGhlIGlub2RlIGRhdGEgYW5kIHBhc3NlcyBzb21lIG9mIGl0CitiYWNrIHRvIHVzZXJzcGFjZS4KKworT3BlbmluZyBhIGZpbGUgcmVxdWlyZXMgYW5vdGhlciBvcGVyYXRpb246IGFsbG9jYXRpb24gb2YgYSBmaWxlCitzdHJ1Y3R1cmUgKHRoaXMgaXMgdGhlIGtlcm5lbC1zaWRlIGltcGxlbWVudGF0aW9uIG9mIGZpbGUKK2Rlc2NyaXB0b3JzKS4gVGhlIGZyZXNobHkgYWxsb2NhdGVkIGZpbGUgc3RydWN0dXJlIGlzIGluaXRpYWxpc2VkIHdpdGgKK2EgcG9pbnRlciB0byB0aGUgZGVudHJ5IGFuZCBhIHNldCBvZiBmaWxlIG9wZXJhdGlvbiBtZW1iZXIgZnVuY3Rpb25zLgorVGhlc2UgYXJlIHRha2VuIGZyb20gdGhlIGlub2RlIGRhdGEuIFRoZSBvcGVuKCkgZmlsZSBtZXRob2QgaXMgdGhlbgorY2FsbGVkIHNvIHRoZSBzcGVjaWZpYyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIGNhbiBkbyBpdCdzIHdvcmsuIFlvdQorY2FuIHNlZSB0aGF0IHRoaXMgaXMgYW5vdGhlciBzd2l0Y2ggcGVyZm9ybWVkIGJ5IHRoZSBWRlMuCisKK1RoZSBmaWxlIHN0cnVjdHVyZSBpcyBwbGFjZWQgaW50byB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGZvciB0aGUKK3Byb2Nlc3MuCisKK1JlYWRpbmcsIHdyaXRpbmcgYW5kIGNsb3NpbmcgZmlsZXMgKGFuZCBvdGhlciBhc3NvcnRlZCBWRlMgb3BlcmF0aW9ucykKK2lzIGRvbmUgYnkgdXNpbmcgdGhlIHVzZXJzcGFjZSBmaWxlIGRlc2NyaXB0b3IgdG8gZ3JhYiB0aGUgYXBwcm9wcmlhdGUKK2ZpbGUgc3RydWN0dXJlLCBhbmQgdGhlbiBjYWxsaW5nIHRoZSByZXF1aXJlZCBmaWxlIHN0cnVjdHVyZSBtZXRob2QKK2Z1bmN0aW9uIHRvIGRvIHdoYXRldmVyIGlzIHJlcXVpcmVkLgorCitGb3IgYXMgbG9uZyBhcyB0aGUgZmlsZSBpcyBvcGVuLCBpdCBrZWVwcyB0aGUgZGVudHJ5ICJvcGVuIiAoaW4gdXNlKSwKK3doaWNoIGluIHR1cm4gbWVhbnMgdGhhdCB0aGUgVkZTIGlub2RlIGlzIHN0aWxsIGluIHVzZS4KKworQWxsIFZGUyBzeXN0ZW0gY2FsbHMgKGkuZS4gb3BlbigyKSwgc3RhdCgyKSwgcmVhZCgyKSwgd3JpdGUoMiksCitjaG1vZCgyKSBhbmQgc28gb24pIGFyZSBjYWxsZWQgZnJvbSBhIHByb2Nlc3MgY29udGV4dC4gWW91IHNob3VsZAorYXNzdW1lIHRoYXQgdGhlc2UgY2FsbHMgYXJlIG1hZGUgd2l0aG91dCBhbnkga2VybmVsIGxvY2tzIGJlaW5nCitoZWxkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHByb2Nlc3NlcyBtYXkgYmUgZXhlY3V0aW5nIHRoZSBzYW1lIHBpZWNlIG9mCitmaWxlc3lzdGVtIG9yIGRyaXZlciBjb2RlIGF0IHRoZSBzYW1lIHRpbWUsIG9uIGRpZmZlcmVudAorcHJvY2Vzc29ycy4gWW91IHNob3VsZCBlbnN1cmUgdGhhdCBhY2Nlc3MgdG8gc2hhcmVkIHJlc291cmNlcyBpcworcHJvdGVjdGVkIGJ5IGFwcHJvcHJpYXRlIGxvY2tzLgorCitSZWdpc3RlcmluZyBhbmQgTW91bnRpbmcgYSBGaWxlc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1YnNlY3Rpb24+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIHN1cHBvcnQgYSBuZXcga2luZCBvZiBmaWxlc3lzdGVtIGluIHRoZSBrZXJuZWwsIGFsbCB5b3UKK25lZWQgdG8gZG8gaXMgY2FsbCByZWdpc3Rlcl9maWxlc3lzdGVtKCkuIFlvdSBwYXNzIGEgc3RydWN0dXJlCitkZXNjcmliaW5nIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uIChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSkKK3doaWNoIGlzIHRoZW4gYWRkZWQgdG8gYW4gaW50ZXJuYWwgdGFibGUgb2Ygc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLiBZb3UKK2NhbiBkbzoKKworJSBjYXQgL3Byb2MvZmlsZXN5c3RlbXMKKwordG8gc2VlIHdoYXQgZmlsZXN5c3RlbXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0uCisKK1doZW4gYSByZXF1ZXN0IGlzIG1hZGUgdG8gbW91bnQgYSBibG9jayBkZXZpY2Ugb250byBhIGRpcmVjdG9yeSBpbgoreW91ciBmaWxlc3BhY2UgdGhlIFZGUyB3aWxsIGNhbGwgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBmb3IgdGhlCitzcGVjaWZpYyBmaWxlc3lzdGVtLiBUaGUgZGVudHJ5IGZvciB0aGUgbW91bnQgcG9pbnQgd2lsbCB0aGVuIGJlCit1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSByb290IGlub2RlIGZvciB0aGUgbmV3IGZpbGVzeXN0ZW0uCisKK0l0J3Mgbm93IHRpbWUgdG8gbG9vayBhdCB0aGluZ3MgaW4gbW9yZSBkZXRhaWwuCisKKworc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uPgorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmliZXMgdGhlIGZpbGVzeXN0ZW0uIEFzIG9mIGtlcm5lbCAyLjEuOTksIHRoZSBmb2xsb3dpbmcKK21lbWJlcnMgYXJlIGRlZmluZWQ6CisKK3N0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBmc19mbGFnczsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKigqcmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICosIGludCk7CisJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiBuZXh0OworfTsKKworICBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlsZXN5c3RlbSB0eXBlLCBzdWNoIGFzICJleHQyIiwgImlzbzk2NjAiLAorCSJtc2RvcyIgYW5kIHNvIG9uCisKKyAgZnNfZmxhZ3M6IHZhcmlvdXMgZmxhZ3MgKGkuZS4gRlNfUkVRVUlSRVNfREVWLCBGU19OT19EQ0FDSEUsIGV0Yy4pCisKKyAgcmVhZF9zdXBlcjogdGhlIG1ldGhvZCB0byBjYWxsIHdoZW4gYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcworCWZpbGVzeXN0ZW0gc2hvdWxkIGJlIG1vdW50ZWQKKworICBuZXh0OiBmb3IgaW50ZXJuYWwgVkZTIHVzZTogeW91IHNob3VsZCBpbml0aWFsaXNlIHRoaXMgdG8gTlVMTAorCitUaGUgcmVhZF9zdXBlcigpIG1ldGhvZCBoYXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYjogdGhlIHN1cGVyYmxvY2sgc3RydWN0dXJlLiBUaGlzIGlzIHBhcnRpYWxseQorCWluaXRpYWxpc2VkIGJ5IHRoZSBWRlMgYW5kIHRoZSByZXN0IG11c3QgYmUgaW5pdGlhbGlzZWQgYnkgdGhlCisJcmVhZF9zdXBlcigpIG1ldGhvZAorCisgIHZvaWQgKmRhdGE6IGFyYml0cmFyeSBtb3VudCBvcHRpb25zLCB1c3VhbGx5IGNvbWVzIGFzIGFuIEFTQ0lJCisJc3RyaW5nCisKKyAgaW50IHNpbGVudDogd2hldGhlciBvciBub3QgdG8gYmUgc2lsZW50IG9uIGVycm9yCisKK1RoZSByZWFkX3N1cGVyKCkgbWV0aG9kIG11c3QgZGV0ZXJtaW5lIGlmIHRoZSBibG9jayBkZXZpY2Ugc3BlY2lmaWVkCitpbiB0aGUgc3VwZXJibG9jayBjb250YWlucyBhIGZpbGVzeXN0ZW0gb2YgdGhlIHR5cGUgdGhlIG1ldGhvZAorc3VwcG9ydHMuIE9uIHN1Y2Nlc3MgdGhlIG1ldGhvZCByZXR1cm5zIHRoZSBzdXBlcmJsb2NrIHBvaW50ZXIsIG9uCitmYWlsdXJlIGl0IHJldHVybnMgTlVMTC4KKworVGhlIG1vc3QgaW50ZXJlc3RpbmcgbWVtYmVyIG9mIHRoZSBzdXBlcmJsb2NrIHN0cnVjdHVyZSB0aGF0IHRoZQorcmVhZF9zdXBlcigpIG1ldGhvZCBmaWxscyBpbiBpcyB0aGUgInNfb3AiIGZpZWxkLiBUaGlzIGlzIGEgcG9pbnRlciB0bworYSAic3RydWN0IHN1cGVyX29wZXJhdGlvbnMiIHdoaWNoIGRlc2NyaWJlcyB0aGUgbmV4dCBsZXZlbCBvZiB0aGUKK2ZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uCisKKworc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uPgorPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmliZXMgaG93IHRoZSBWRlMgY2FuIG1hbmlwdWxhdGUgdGhlIHN1cGVyYmxvY2sgb2YgeW91cgorZmlsZXN5c3RlbS4gQXMgb2Yga2VybmVsIDIuMS45OSwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgorCitzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CisJdm9pZCAoKnJlYWRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqd3JpdGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKwl2b2lkICgqcHV0X2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCpkcm9wX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCpkZWxldGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJaW50ICgqbm90aWZ5X2NoYW5nZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworCXZvaWQgKCpwdXRfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisJdm9pZCAoKndyaXRlX3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOworCWludCAoKnN0YXRmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qgc3RhdGZzICosIGludCk7CisJaW50ICgqcmVtb3VudF9mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKKwl2b2lkICgqY2xlYXJfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7Cit9OworCitBbGwgbWV0aG9kcyBhcmUgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2tzIGJlaW5nIGhlbGQsIHVubGVzcyBvdGhlcndpc2UKK25vdGVkLiBUaGlzIG1lYW5zIHRoYXQgbW9zdCBtZXRob2RzIGNhbiBibG9jayBzYWZlbHkuIEFsbCBtZXRob2RzIGFyZQorb25seSBjYWxsZWQgZnJvbSBhIHByb2Nlc3MgY29udGV4dCAoaS5lLiBub3QgZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorb3IgYm90dG9tIGhhbGYpLgorCisgIHJlYWRfaW5vZGU6IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZWFkIGEgc3BlY2lmaWMgaW5vZGUgZnJvbSB0aGUKKwltb3VudGVkIGZpbGVzeXN0ZW0uIFRoZSAiaV9pbm8iIG1lbWJlciBpbiB0aGUgInN0cnVjdCBpbm9kZSIKKwl3aWxsIGJlIGluaXRpYWxpc2VkIGJ5IHRoZSBWRlMgdG8gaW5kaWNhdGUgd2hpY2ggaW5vZGUgdG8KKwlyZWFkLiBPdGhlciBtZW1iZXJzIGFyZSBmaWxsZWQgaW4gYnkgdGhpcyBtZXRob2QKKworICB3cml0ZV9pbm9kZTogdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIFZGUyBuZWVkcyB0byB3cml0ZSBhbgorCWlub2RlIHRvIGRpc2MuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd3JpdGUKKwlzaG91bGQgYmUgc3luY2hyb25vdXMgb3Igbm90LCBub3QgYWxsIGZpbGVzeXN0ZW1zIGNoZWNrIHRoaXMgZmxhZy4KKworICBwdXRfaW5vZGU6IGNhbGxlZCB3aGVuIHRoZSBWRlMgaW5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbm9kZQorCWNhY2hlLiBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbAorCisgIGRyb3BfaW5vZGU6IGNhbGxlZCB3aGVuIHRoZSBsYXN0IGFjY2VzcyB0byB0aGUgaW5vZGUgaXMgZHJvcHBlZCwKKwl3aXRoIHRoZSBpbm9kZV9sb2NrIHNwaW5sb2NrIGhlbGQuCisKKwlUaGlzIG1ldGhvZCBzaG91bGQgYmUgZWl0aGVyIE5VTEwgKG5vcm1hbCB1bml4IGZpbGVzeXN0ZW0KKwlzZW1hbnRpY3MpIG9yICJnZW5lcmljX2RlbGV0ZV9pbm9kZSIgKGZvciBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdAorCXdhbnQgdG8gY2FjaGUgaW5vZGVzIC0gY2F1c2luZyAiZGVsZXRlX2lub2RlIiB0byBhbHdheXMgYmUKKwljYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgaV9ubGluaykKKworCVRoZSAiZ2VuZXJpY19kZWxldGVfaW5vZGUoKSIgYmVoYXZpb3VyIGlzIGVxdWl2YWxlbnQgdG8gdGhlCisJb2xkIHByYWN0aWNlIG9mIHVzaW5nICJmb3JjZV9kZWxldGUiIGluIHRoZSBwdXRfaW5vZGUoKSBjYXNlLAorCWJ1dCBkb2VzIG5vdCBoYXZlIHRoZSByYWNlcyB0aGF0IHRoZSAiZm9yY2VfZGVsZXRlKCkiIGFwcHJvYWNoCisJaGFkLiAKKworICBkZWxldGVfaW5vZGU6IGNhbGxlZCB3aGVuIHRoZSBWRlMgd2FudHMgdG8gZGVsZXRlIGFuIGlub2RlCisKKyAgbm90aWZ5X2NoYW5nZTogY2FsbGVkIHdoZW4gVkZTIGlub2RlIGF0dHJpYnV0ZXMgYXJlIGNoYW5nZWQuIElmIHRoaXMKKwlpcyBOVUxMIHRoZSBWRlMgZmFsbHMgYmFjayB0byB0aGUgd3JpdGVfaW5vZGUoKSBtZXRob2QuIFRoaXMKKwlpcyBjYWxsZWQgd2l0aCB0aGUga2VybmVsIGxvY2sgaGVsZAorCisgIHB1dF9zdXBlcjogY2FsbGVkIHdoZW4gdGhlIFZGUyB3aXNoZXMgdG8gZnJlZSB0aGUgc3VwZXJibG9jaworCShpLmUuIHVubW91bnQpLiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBzdXBlcmJsb2NrIGxvY2sgaGVsZAorCisgIHdyaXRlX3N1cGVyOiBjYWxsZWQgd2hlbiB0aGUgVkZTIHN1cGVyYmxvY2sgbmVlZHMgdG8gYmUgd3JpdHRlbiB0bworCWRpc2MuIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsCisKKyAgc3RhdGZzOiBjYWxsZWQgd2hlbiB0aGUgVkZTIG5lZWRzIHRvIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MuIFRoaXMKKwlpcyBjYWxsZWQgd2l0aCB0aGUga2VybmVsIGxvY2sgaGVsZAorCisgIHJlbW91bnRfZnM6IGNhbGxlZCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIHJlbW91bnRlZC4gVGhpcyBpcyBjYWxsZWQKKwl3aXRoIHRoZSBrZXJuZWwgbG9jayBoZWxkCisKKyAgY2xlYXJfaW5vZGU6IGNhbGxlZCB0aGVuIHRoZSBWRlMgY2xlYXJzIHRoZSBpbm9kZS4gT3B0aW9uYWwKKworVGhlIHJlYWRfaW5vZGUoKSBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gdGhlICJpX29wIgorZmllbGQuIFRoaXMgaXMgYSBwb2ludGVyIHRvIGEgInN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIiB3aGljaAorZGVzY3JpYmVzIHRoZSBtZXRob2RzIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBpbmRpdmlkdWFsIGlub2Rlcy4KKworCitzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24+Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaWJlcyBob3cgdGhlIFZGUyBjYW4gbWFuaXB1bGF0ZSBhbiBpbm9kZSBpbiB5b3VyCitmaWxlc3lzdGVtLiBBcyBvZiBrZXJuZWwgMi4xLjk5LCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIGRlZmluZWQ6CisKK3N0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHsKKwlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICogZGVmYXVsdF9maWxlX29wczsKKwlpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50KTsKKwlpbnQgKCpsb29rdXApIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCp1bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKnN5bWxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosY29uc3QgY2hhciAqKTsKKwlpbnQgKCpta2RpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOworCWludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpta25vZCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQsZGV2X3QpOworCWludCAoKnJlbmFtZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCisJCQlzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLGludCk7CisJc3RydWN0IGRlbnRyeSAqICgqZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CisJaW50ICgqcmVhZHBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKwlpbnQgKCp3cml0ZXBhZ2UpIChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworCWludCAoKmJtYXApIChzdHJ1Y3QgaW5vZGUgKixpbnQpOworCXZvaWQgKCp0cnVuY2F0ZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwlpbnQgKCpwZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICosIGludCk7CisJaW50ICgqc21hcCkgKHN0cnVjdCBpbm9kZSAqLGludCk7CisJaW50ICgqdXBkYXRlcGFnZSkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIGNvbnN0IGNoYXIgKiwKKwkJCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQsIGludCk7CisJaW50ICgqcmV2YWxpZGF0ZSkgKHN0cnVjdCBkZW50cnkgKik7Cit9OworCitBZ2FpbiwgYWxsIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrcyBiZWluZyBoZWxkLCB1bmxlc3MKK290aGVyd2lzZSBub3RlZC4KKworICBkZWZhdWx0X2ZpbGVfb3BzOiB0aGlzIGlzIGEgcG9pbnRlciB0byBhICJzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIgorCXdoaWNoIGRlc2NyaWJlcyBob3cgdG8gb3BlbiBhbmQgdGhlbiBtYW5pcHVsYXRlIG9wZW4gZmlsZXMKKworICBjcmVhdGU6IGNhbGxlZCBieSB0aGUgb3BlbigyKSBhbmQgY3JlYXQoMikgc3lzdGVtIGNhbGxzLiBPbmx5CisJcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCByZWd1bGFyIGZpbGVzLiBUaGUgZGVudHJ5IHlvdQorCWdldCBzaG91bGQgbm90IGhhdmUgYW4gaW5vZGUgKGkuZS4gaXQgc2hvdWxkIGJlIGEgbmVnYXRpdmUKKwlkZW50cnkpLiBIZXJlIHlvdSB3aWxsIHByb2JhYmx5IGNhbGwgZF9pbnN0YW50aWF0ZSgpIHdpdGggdGhlCisJZGVudHJ5IGFuZCB0aGUgbmV3bHkgY3JlYXRlZCBpbm9kZQorCisgIGxvb2t1cDogY2FsbGVkIHdoZW4gdGhlIFZGUyBuZWVkcyB0byBsb29rIHVwIGFuIGlub2RlIGluIGEgcGFyZW50CisJZGlyZWN0b3J5LiBUaGUgbmFtZSB0byBsb29rIGZvciBpcyBmb3VuZCBpbiB0aGUgZGVudHJ5LiBUaGlzCisJbWV0aG9kIG11c3QgY2FsbCBkX2FkZCgpIHRvIGluc2VydCB0aGUgZm91bmQgaW5vZGUgaW50byB0aGUKKwlkZW50cnkuIFRoZSAiaV9jb3VudCIgZmllbGQgaW4gdGhlIGlub2RlIHN0cnVjdHVyZSBzaG91bGQgYmUKKwlpbmNyZW1lbnRlZC4gSWYgdGhlIG5hbWVkIGlub2RlIGRvZXMgbm90IGV4aXN0IGEgTlVMTCBpbm9kZQorCXNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBkZW50cnkgKHRoaXMgaXMgY2FsbGVkIGEgbmVnYXRpdmUKKwlkZW50cnkpLiBSZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBmcm9tIHRoaXMgcm91dGluZSBtdXN0IG9ubHkKKwliZSBkb25lIG9uIGEgcmVhbCBlcnJvciwgb3RoZXJ3aXNlIGNyZWF0aW5nIGlub2RlcyB3aXRoIHN5c3RlbQorCWNhbGxzIGxpa2UgY3JlYXRlKDIpLCBta25vZCgyKSwgbWtkaXIoMikgYW5kIHNvIG9uIHdpbGwgZmFpbC4KKwlJZiB5b3Ugd2lzaCB0byBvdmVybG9hZCB0aGUgZGVudHJ5IG1ldGhvZHMgdGhlbiB5b3Ugc2hvdWxkCisJaW5pdGlhbGlzZSB0aGUgImRfZG9wIiBmaWVsZCBpbiB0aGUgZGVudHJ5OyB0aGlzIGlzIGEgcG9pbnRlcgorCXRvIGEgc3RydWN0ICJkZW50cnlfb3BlcmF0aW9ucyIuCisJVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIGRpcmVjdG9yeSBpbm9kZSBzZW1hcGhvcmUgaGVsZAorCisgIGxpbms6IGNhbGxlZCBieSB0aGUgbGluaygyKSBzeXN0ZW0gY2FsbC4gT25seSByZXF1aXJlZCBpZiB5b3Ugd2FudAorCXRvIHN1cHBvcnQgaGFyZCBsaW5rcy4gWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBjYWxsCisJZF9pbnN0YW50aWF0ZSgpIGp1c3QgYXMgeW91IHdvdWxkIGluIHRoZSBjcmVhdGUoKSBtZXRob2QKKworICB1bmxpbms6IGNhbGxlZCBieSB0aGUgdW5saW5rKDIpIHN5c3RlbSBjYWxsLiBPbmx5IHJlcXVpcmVkIGlmIHlvdQorCXdhbnQgdG8gc3VwcG9ydCBkZWxldGluZyBpbm9kZXMKKworICBzeW1saW5rOiBjYWxsZWQgYnkgdGhlIHN5bWxpbmsoMikgc3lzdGVtIGNhbGwuIE9ubHkgcmVxdWlyZWQgaWYgeW91CisJd2FudCB0byBzdXBwb3J0IHN5bWxpbmtzLiBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNhbGwKKwlkX2luc3RhbnRpYXRlKCkganVzdCBhcyB5b3Ugd291bGQgaW4gdGhlIGNyZWF0ZSgpIG1ldGhvZAorCisgIG1rZGlyOiBjYWxsZWQgYnkgdGhlIG1rZGlyKDIpIHN5c3RlbSBjYWxsLiBPbmx5IHJlcXVpcmVkIGlmIHlvdSB3YW50CisJdG8gc3VwcG9ydCBjcmVhdGluZyBzdWJkaXJlY3Rvcmllcy4gWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0bworCWNhbGwgZF9pbnN0YW50aWF0ZSgpIGp1c3QgYXMgeW91IHdvdWxkIGluIHRoZSBjcmVhdGUoKSBtZXRob2QKKworICBybWRpcjogY2FsbGVkIGJ5IHRoZSBybWRpcigyKSBzeXN0ZW0gY2FsbC4gT25seSByZXF1aXJlZCBpZiB5b3Ugd2FudAorCXRvIHN1cHBvcnQgZGVsZXRpbmcgc3ViZGlyZWN0b3JpZXMKKworICBta25vZDogY2FsbGVkIGJ5IHRoZSBta25vZCgyKSBzeXN0ZW0gY2FsbCB0byBjcmVhdGUgYSBkZXZpY2UgKGNoYXIsCisJYmxvY2spIGlub2RlIG9yIGEgbmFtZWQgcGlwZSAoRklGTykgb3Igc29ja2V0LiBPbmx5IHJlcXVpcmVkCisJaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjcmVhdGluZyB0aGVzZSB0eXBlcyBvZiBpbm9kZXMuIFlvdQorCXdpbGwgcHJvYmFibHkgbmVlZCB0byBjYWxsIGRfaW5zdGFudGlhdGUoKSBqdXN0IGFzIHlvdSB3b3VsZAorCWluIHRoZSBjcmVhdGUoKSBtZXRob2QKKworICByZWFkbGluazogY2FsbGVkIGJ5IHRoZSByZWFkbGluaygyKSBzeXN0ZW0gY2FsbC4gT25seSByZXF1aXJlZCBpZgorCXlvdSB3YW50IHRvIHN1cHBvcnQgcmVhZGluZyBzeW1ib2xpYyBsaW5rcworCisgIGZvbGxvd19saW5rOiBjYWxsZWQgYnkgdGhlIFZGUyB0byBmb2xsb3cgYSBzeW1ib2xpYyBsaW5rIHRvIHRoZQorCWlub2RlIGl0IHBvaW50cyB0by4gT25seSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBzdXBwb3J0CisJc3ltYm9saWMgbGlua3MKKworCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24+Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGVzY3JpYmVzIGhvdyB0aGUgVkZTIGNhbiBtYW5pcHVsYXRlIGFuIG9wZW4gZmlsZS4gQXMgb2Yga2VybmVsCisyLjEuOTksIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7CisJbG9mZl90ICgqbGxzZWVrKSAoc3RydWN0IGZpbGUgKiwgbG9mZl90LCBpbnQpOworCXNzaXplX3QgKCpyZWFkKSAoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKKwlzc2l6ZV90ICgqd3JpdGUpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOworCWludCAoKnJlYWRkaXIpIChzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CisJdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKKwlpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCWludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKwlpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworCWludCAoKmZzeW5jKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKKwlpbnQgKCpmYXN5bmMpIChzdHJ1Y3QgZmlsZSAqLCBpbnQpOworCWludCAoKmNoZWNrX21lZGlhX2NoYW5nZSkgKGtkZXZfdCBkZXYpOworCWludCAoKnJldmFsaWRhdGUpIChrZGV2X3QgZGV2KTsKKwlpbnQgKCpsb2NrKSAoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworfTsKKworQWdhaW4sIGFsbCBtZXRob2RzIGFyZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9ja3MgYmVpbmcgaGVsZCwgdW5sZXNzCitvdGhlcndpc2Ugbm90ZWQuCisKKyAgbGxzZWVrOiBjYWxsZWQgd2hlbiB0aGUgVkZTIG5lZWRzIHRvIG1vdmUgdGhlIGZpbGUgcG9zaXRpb24gaW5kZXgKKworICByZWFkOiBjYWxsZWQgYnkgcmVhZCgyKSBhbmQgcmVsYXRlZCBzeXN0ZW0gY2FsbHMKKworICB3cml0ZTogY2FsbGVkIGJ5IHdyaXRlKDIpIGFuZCByZWxhdGVkIHN5c3RlbSBjYWxscworCisgIHJlYWRkaXI6IGNhbGxlZCB3aGVuIHRoZSBWRlMgbmVlZHMgdG8gcmVhZCB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzCisKKyAgcG9sbDogY2FsbGVkIGJ5IHRoZSBWRlMgd2hlbiBhIHByb2Nlc3Mgd2FudHMgdG8gY2hlY2sgaWYgdGhlcmUgaXMKKwlhY3Rpdml0eSBvbiB0aGlzIGZpbGUgYW5kIChvcHRpb25hbGx5KSBnbyB0byBzbGVlcCB1bnRpbCB0aGVyZQorCWlzIGFjdGl2aXR5LiBDYWxsZWQgYnkgdGhlIHNlbGVjdCgyKSBhbmQgcG9sbCgyKSBzeXN0ZW0gY2FsbHMKKworICBpb2N0bDogY2FsbGVkIGJ5IHRoZSBpb2N0bCgyKSBzeXN0ZW0gY2FsbAorCisgIG1tYXA6IGNhbGxlZCBieSB0aGUgbW1hcCgyKSBzeXN0ZW0gY2FsbAorCisgIG9wZW46IGNhbGxlZCBieSB0aGUgVkZTIHdoZW4gYW4gaW5vZGUgc2hvdWxkIGJlIG9wZW5lZC4gV2hlbiB0aGUgVkZTCisJb3BlbnMgYSBmaWxlLCBpdCBjcmVhdGVzIGEgbmV3ICJzdHJ1Y3QgZmlsZSIgYW5kIGluaXRpYWxpc2VzCisJdGhlICJmX29wIiBmaWxlIG9wZXJhdGlvbnMgbWVtYmVyIHdpdGggdGhlICJkZWZhdWx0X2ZpbGVfb3BzIgorCWZpZWxkIGluIHRoZSBpbm9kZSBzdHJ1Y3R1cmUuIEl0IHRoZW4gY2FsbHMgdGhlIG9wZW4gbWV0aG9kCisJZm9yIHRoZSBuZXdseSBhbGxvY2F0ZWQgZmlsZSBzdHJ1Y3R1cmUuIFlvdSBtaWdodCB0aGluayB0aGF0CisJdGhlIG9wZW4gbWV0aG9kIHJlYWxseSBiZWxvbmdzIGluICJzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyIsCisJYW5kIHlvdSBtYXkgYmUgcmlnaHQuIEkgdGhpbmsgaXQncyBkb25lIHRoZSB3YXkgaXQgaXMgYmVjYXVzZQorCWl0IG1ha2VzIGZpbGVzeXN0ZW1zIHNpbXBsZXIgdG8gaW1wbGVtZW50LiBUaGUgb3BlbigpIG1ldGhvZAorCWlzIGEgZ29vZCBwbGFjZSB0byBpbml0aWFsaXNlIHRoZSAicHJpdmF0ZV9kYXRhIiBtZW1iZXIgaW4gdGhlCisJZmlsZSBzdHJ1Y3R1cmUgaWYgeW91IHdhbnQgdG8gcG9pbnQgdG8gYSBkZXZpY2Ugc3RydWN0dXJlCisKKyAgcmVsZWFzZTogY2FsbGVkIHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGFuIG9wZW4gZmlsZSBpcyBjbG9zZWQKKworICBmc3luYzogY2FsbGVkIGJ5IHRoZSBmc3luYygyKSBzeXN0ZW0gY2FsbAorCisgIGZhc3luYzogY2FsbGVkIGJ5IHRoZSBmY250bCgyKSBzeXN0ZW0gY2FsbCB3aGVuIGFzeW5jaHJvbm91cworCShub24tYmxvY2tpbmcpIG1vZGUgaXMgZW5hYmxlZCBmb3IgYSBmaWxlCisKK05vdGUgdGhhdCB0aGUgZmlsZSBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgc3BlY2lmaWMKK2ZpbGVzeXN0ZW0gaW4gd2hpY2ggdGhlIGlub2RlIHJlc2lkZXMuIFdoZW4gb3BlbmluZyBhIGRldmljZSBub2RlCisoY2hhcmFjdGVyIG9yIGJsb2NrIHNwZWNpYWwpIG1vc3QgZmlsZXN5c3RlbXMgd2lsbCBjYWxsIHNwZWNpYWwKK3N1cHBvcnQgcm91dGluZXMgaW4gdGhlIFZGUyB3aGljaCB3aWxsIGxvY2F0ZSB0aGUgcmVxdWlyZWQgZGV2aWNlCitkcml2ZXIgaW5mb3JtYXRpb24uIFRoZXNlIHN1cHBvcnQgcm91dGluZXMgcmVwbGFjZSB0aGUgZmlsZXN5c3RlbSBmaWxlCitvcGVyYXRpb25zIHdpdGggdGhvc2UgZm9yIHRoZSBkZXZpY2UgZHJpdmVyLCBhbmQgdGhlbiBwcm9jZWVkIHRvIGNhbGwKK3RoZSBuZXcgb3BlbigpIG1ldGhvZCBmb3IgdGhlIGZpbGUuIFRoaXMgaXMgaG93IG9wZW5pbmcgYSBkZXZpY2UgZmlsZQoraW4gdGhlIGZpbGVzeXN0ZW0gZXZlbnR1YWxseSBlbmRzIHVwIGNhbGxpbmcgdGhlIGRldmljZSBkcml2ZXIgb3BlbigpCittZXRob2QuIE5vdGUgdGhlIGRldmZzICh0aGUgRGV2aWNlIEZpbGVTeXN0ZW0pIGhhcyBhIG1vcmUgZGlyZWN0IHBhdGgKK2Zyb20gZGV2aWNlIG5vZGUgdG8gZGV2aWNlIGRyaXZlciAodGhpcyBpcyBhbiB1bm9mZmljaWFsIGtlcm5lbAorcGF0Y2gpLgorCisKK0RpcmVjdG9yeSBFbnRyeSBDYWNoZSAoZGNhY2hlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbj4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaWJlcyBob3cgYSBmaWxlc3lzdGVtIGNhbiBvdmVybG9hZCB0aGUgc3RhbmRhcmQgZGVudHJ5CitvcGVyYXRpb25zLiBEZW50cmllcyBhbmQgdGhlIGRjYWNoZSBhcmUgdGhlIGRvbWFpbiBvZiB0aGUgVkZTIGFuZCB0aGUKK2luZGl2aWR1YWwgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuIERldmljZSBkcml2ZXJzIGhhdmUgbm8gYnVzaW5lc3MKK2hlcmUuIFRoZXNlIG1ldGhvZHMgbWF5IGJlIHNldCB0byBOVUxMLCBhcyB0aGV5IGFyZSBlaXRoZXIgb3B0aW9uYWwgb3IKK3RoZSBWRlMgdXNlcyBhIGRlZmF1bHQuIEFzIG9mIGtlcm5lbCAyLjEuOTksIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUKK2RlZmluZWQ6CisKK3N0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CisJaW50ICgqZF9yZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKmRfaGFzaCkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CisJaW50ICgqZF9jb21wYXJlKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKKwl2b2lkICgqZF9kZWxldGUpKHN0cnVjdCBkZW50cnkgKik7CisJdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsKKwl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKK307CisKKyAgZF9yZXZhbGlkYXRlOiBjYWxsZWQgd2hlbiB0aGUgVkZTIG5lZWRzIHRvIHJldmFsaWRhdGUgYSBkZW50cnkuIFRoaXMKKwlpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuYW1lIGxvb2stdXAgZmluZHMgYSBkZW50cnkgaW4gdGhlCisJZGNhY2hlLiBNb3N0IGZpbGVzeXN0ZW1zIGxlYXZlIHRoaXMgYXMgTlVMTCwgYmVjYXVzZSBhbGwgdGhlaXIKKwlkZW50cmllcyBpbiB0aGUgZGNhY2hlIGFyZSB2YWxpZAorCisgIGRfaGFzaDogY2FsbGVkIHdoZW4gdGhlIFZGUyBhZGRzIGEgZGVudHJ5IHRvIHRoZSBoYXNoIHRhYmxlCisKKyAgZF9jb21wYXJlOiBjYWxsZWQgd2hlbiBhIGRlbnRyeSBzaG91bGQgYmUgY29tcGFyZWQgd2l0aCBhbm90aGVyCisKKyAgZF9kZWxldGU6IGNhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhIGRlbnRyeSBpcworCWRlbGV0ZWQuIFRoaXMgbWVhbnMgbm8tb25lIGlzIHVzaW5nIHRoZSBkZW50cnksIGhvd2V2ZXIgaXQgaXMKKwlzdGlsbCB2YWxpZCBhbmQgaW4gdGhlIGRjYWNoZQorCisgIGRfcmVsZWFzZTogY2FsbGVkIHdoZW4gYSBkZW50cnkgaXMgcmVhbGx5IGRlYWxsb2NhdGVkCisKKyAgZF9pcHV0OiBjYWxsZWQgd2hlbiBhIGRlbnRyeSBsb3NlcyBpdHMgaW5vZGUgKGp1c3QgcHJpb3IgdG8gaXRzCisJYmVpbmcgZGVhbGxvY2F0ZWQpLiBUaGUgZGVmYXVsdCB3aGVuIHRoaXMgaXMgTlVMTCBpcyB0aGF0IHRoZQorCVZGUyBjYWxscyBpcHV0KCkuIElmIHlvdSBkZWZpbmUgdGhpcyBtZXRob2QsIHlvdSBtdXN0IGNhbGwKKwlpcHV0KCkgeW91cnNlbGYKKworRWFjaCBkZW50cnkgaGFzIGEgcG9pbnRlciB0byBpdHMgcGFyZW50IGRlbnRyeSwgYXMgd2VsbCBhcyBhIGhhc2ggbGlzdAorb2YgY2hpbGQgZGVudHJpZXMuIENoaWxkIGRlbnRyaWVzIGFyZSBiYXNpY2FsbHkgbGlrZSBmaWxlcyBpbiBhCitkaXJlY3RvcnkuCisKK0RpcmVjdG9yeSBFbnRyeSBDYWNoZSBBUElzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGRlZmluZWQgd2hpY2ggcGVybWl0IGEgZmlsZXN5c3RlbSB0bworbWFuaXB1bGF0ZSBkZW50cmllczoKKworICBkZ2V0OiBvcGVuIGEgbmV3IGhhbmRsZSBmb3IgYW4gZXhpc3RpbmcgZGVudHJ5ICh0aGlzIGp1c3QgaW5jcmVtZW50cworCXRoZSB1c2FnZSBjb3VudCkKKworICBkcHV0OiBjbG9zZSBhIGhhbmRsZSBmb3IgYSBkZW50cnkgKGRlY3JlbWVudHMgdGhlIHVzYWdlIGNvdW50KS4gSWYKKwl0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gMCwgdGhlICJkX2RlbGV0ZSIgbWV0aG9kIGlzIGNhbGxlZAorCWFuZCB0aGUgZGVudHJ5IGlzIHBsYWNlZCBvbiB0aGUgdW51c2VkIGxpc3QgaWYgdGhlIGRlbnRyeSBpcworCXN0aWxsIGluIGl0cyBwYXJlbnRzIGhhc2ggbGlzdC4gUHV0dGluZyB0aGUgZGVudHJ5IG9uIHRoZQorCXVudXNlZCBsaXN0IGp1c3QgbWVhbnMgdGhhdCBpZiB0aGUgc3lzdGVtIG5lZWRzIHNvbWUgUkFNLCBpdAorCWdvZXMgdGhyb3VnaCB0aGUgdW51c2VkIGxpc3Qgb2YgZGVudHJpZXMgYW5kIGRlYWxsb2NhdGVzIHRoZW0uCisJSWYgdGhlIGRlbnRyeSBoYXMgYWxyZWFkeSBiZWVuIHVuaGFzaGVkIGFuZCB0aGUgdXNhZ2UgY291bnQKKwlkcm9wcyB0byAwLCBpbiB0aGlzIGNhc2UgdGhlIGRlbnRyeSBpcyBkZWFsbG9jYXRlZCBhZnRlciB0aGUKKwkiZF9kZWxldGUiIG1ldGhvZCBpcyBjYWxsZWQKKworICBkX2Ryb3A6IHRoaXMgdW5oYXNoZXMgYSBkZW50cnkgZnJvbSBpdHMgcGFyZW50cyBoYXNoIGxpc3QuIEEKKwlzdWJzZXF1ZW50IGNhbGwgdG8gZHB1dCgpIHdpbGwgZGVsbG9jYXRlIHRoZSBkZW50cnkgaWYgaXRzCisJdXNhZ2UgY291bnQgZHJvcHMgdG8gMAorCisgIGRfZGVsZXRlOiBkZWxldGUgYSBkZW50cnkuIElmIHRoZXJlIGFyZSBubyBvdGhlciBvcGVuIHJlZmVyZW5jZXMgdG8KKwl0aGUgZGVudHJ5IHRoZW4gdGhlIGRlbnRyeSBpcyB0dXJuZWQgaW50byBhIG5lZ2F0aXZlIGRlbnRyeQorCSh0aGUgZF9pcHV0KCkgbWV0aG9kIGlzIGNhbGxlZCkuIElmIHRoZXJlIGFyZSBvdGhlcgorCXJlZmVyZW5jZXMsIHRoZW4gZF9kcm9wKCkgaXMgY2FsbGVkIGluc3RlYWQKKworICBkX2FkZDogYWRkIGEgZGVudHJ5IHRvIGl0cyBwYXJlbnRzIGhhc2ggbGlzdCBhbmQgdGhlbiBjYWxscworCWRfaW5zdGFudGlhdGUoKQorCisgIGRfaW5zdGFudGlhdGU6IGFkZCBhIGRlbnRyeSB0byB0aGUgYWxpYXMgaGFzaCBsaXN0IGZvciB0aGUgaW5vZGUgYW5kCisJdXBkYXRlcyB0aGUgImRfaW5vZGUiIG1lbWJlci4gVGhlICJpX2NvdW50IiBtZW1iZXIgaW4gdGhlCisJaW5vZGUgc3RydWN0dXJlIHNob3VsZCBiZSBzZXQvaW5jcmVtZW50ZWQuIElmIHRoZSBpbm9kZQorCXBvaW50ZXIgaXMgTlVMTCwgdGhlIGRlbnRyeSBpcyBjYWxsZWQgYSAibmVnYXRpdmUKKwlkZW50cnkiLiBUaGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IGNhbGxlZCB3aGVuIGFuIGlub2RlIGlzCisJY3JlYXRlZCBmb3IgYW4gZXhpc3RpbmcgbmVnYXRpdmUgZGVudHJ5CisKKyAgZF9sb29rdXA6IGxvb2sgdXAgYSBkZW50cnkgZ2l2ZW4gaXRzIHBhcmVudCBhbmQgcGF0aCBuYW1lIGNvbXBvbmVudAorCUl0IGxvb2tzIHVwIHRoZSBjaGlsZCBvZiB0aGF0IGdpdmVuIG5hbWUgZnJvbSB0aGUgZGNhY2hlCisJaGFzaCB0YWJsZS4gSWYgaXQgaXMgZm91bmQsIHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQKKwlhbmQgdGhlIGRlbnRyeSBpcyByZXR1cm5lZC4gVGhlIGNhbGxlciBtdXN0IHVzZSBkX3B1dCgpCisJdG8gZnJlZSB0aGUgZGVudHJ5IHdoZW4gaXQgZmluaXNoZXMgdXNpbmcgaXQuCisKKworUkNVLWJhc2VkIGRjYWNoZSBsb2NraW5nIG1vZGVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gbWFueSB3b3JrbG9hZHMsIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb24gb24gZGNhY2hlIGlzCit0byBsb29rIHVwIGEgZGVudHJ5LCBnaXZlbiBhIHBhcmVudCBkZW50cnkgYW5kIHRoZSBuYW1lCitvZiB0aGUgY2hpbGQuIFR5cGljYWxseSwgZm9yIGV2ZXJ5IG9wZW4oKSwgc3RhdCgpIGV0Yy4sCit0aGUgZGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhdGhuYW1lIHdpbGwgYmUgbG9va2VkCit1cCBieSB3YWxraW5nIHRoZSB0cmVlIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGNvbXBvbmVudAorb2YgdGhlIHBhdGhuYW1lIGFuZCB1c2luZyB0aGF0IGRlbnRyeSBhbG9uZyB3aXRoIHRoZSBuZXh0Citjb21wb25lbnQgdG8gbG9vayB1cCB0aGUgbmV4dCBsZXZlbCBhbmQgc28gb24uIFNpbmNlIGl0CitpcyBhIGZyZXF1ZW50IG9wZXJhdGlvbiBmb3Igd29ya2xvYWRzIGxpa2UgbXVsdGl1c2VyCitlbnZpcm9ubWVudHMgYW5kIHdlYnNlcnZlcnMsIGl0IGlzIGltcG9ydGFudCB0byBvcHRpbWl6ZQordGhpcyBwYXRoLgorCitQcmlvciB0byAyLjUuMTAsIGRjYWNoZV9sb2NrIHdhcyBhY3F1aXJlZCBpbiBkX2xvb2t1cCBhbmQgdGh1cworaW4gZXZlcnkgY29tcG9uZW50IGR1cmluZyBwYXRoIGxvb2stdXAuIFNpbmNlIDIuNS4xMCBvbndhcmRzLAorZmFzdHdhbGsgYWxnb3JpdGhtIGNoYW5nZWQgdGhpcyBieSBob2xkaW5nIHRoZSBkY2FjaGVfbG9jaworYXQgdGhlIGJlZ2lubmluZyBhbmQgd2Fsa2luZyBhcyBtYW55IGNhY2hlZCBwYXRoIGNvbXBvbmVudAorZGVudHJpZXMgYXMgcG9zc2libGUuIFRoaXMgc2lnbmZpY2FudGx5IGRlY3JlYXNlcyB0aGUgbnVtYmVyCitvZiBhY3F1aXNpdGlvbiBvZiBkY2FjaGVfbG9jay4gSG93ZXZlciBpdCBhbHNvIGluY3JlYXNlcyB0aGUKK2xvY2sgaG9sZCB0aW1lIHNpZ25maWNhbnRseSBhbmQgYWZmZWN0cyBwZXJmb3JtYW5jZSBpbiBsYXJnZQorU01QIG1hY2hpbmVzLiBTaW5jZSAyLjUuNjIga2VybmVsLCBkY2FjaGUgaGFzIGJlZW4gdXNpbmcKK2EgbmV3IGxvY2tpbmcgbW9kZWwgdGhhdCB1c2VzIFJDVSB0byBtYWtlIGRjYWNoZSBsb29rLXVwCitsb2NrLWZyZWUuCisKK1RoZSBjdXJyZW50IGRjYWNoZSBsb2NraW5nIG1vZGVsIGlzIG5vdCB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBleGlzdGluZworZGNhY2hlIGxvY2tpbmcgbW9kZWwuIFByaW9yIHRvIDIuNS42MiBrZXJuZWwsIGRjYWNoZV9sb2NrCitwcm90ZWN0ZWQgdGhlIGhhc2ggY2hhaW4sIGRfY2hpbGQsIGRfYWxpYXMsIGRfbHJ1IGxpc3RzIGFzIHdlbGwKK2FzIGRfaW5vZGUgYW5kIHNldmVyYWwgb3RoZXIgdGhpbmdzIGxpa2UgbW91bnQgbG9vay11cC4gUkNVLWJhc2VkCitjaGFuZ2VzIGFmZmVjdCBvbmx5IHRoZSB3YXkgdGhlIGhhc2ggY2hhaW4gaXMgcHJvdGVjdGVkLiBGb3IgZXZlcnl0aGluZworZWxzZSB0aGUgZGNhY2hlX2xvY2sgbXVzdCBiZSB0YWtlbiBmb3IgYm90aCB0cmF2ZXJzaW5nIGFzIHdlbGwgYXMKK3VwZGF0aW5nLiBUaGUgaGFzaCBjaGFpbiB1cGRhdGlvbnMgdG9vIHRha2UgdGhlIGRjYWNoZV9sb2NrLgorVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgd2F5IGRfbG9va3VwIHRyYXZlcnNlcyB0aGUgaGFzaCBjaGFpbiwKK2l0IGRvZXNuJ3QgYWNxdWlyZSB0aGUgZGNhY2hlX2xvY2sgZm9yIHRoaXMgYW5kIHJlbHkgb24gUkNVIHRvCitlbnN1cmUgdGhhdCB0aGUgZGVudHJ5IGhhcyBub3QgYmVlbiAqZnJlZWQqLgorCisKK0RjYWNoZSBsb2NraW5nIGRldGFpbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZvciBtYW55IG11bHRpLXVzZXIgd29ya2xvYWRzLCBvcGVuKCkgYW5kIHN0YXQoKSBvbiBmaWxlcyBhcmUKK3ZlcnkgZnJlcXVlbnRseSBvY2N1cnJpbmcgb3BlcmF0aW9ucy4gQm90aCBpbnZvbHZlIHdhbGtpbmcKK29mIHBhdGggbmFtZXMgdG8gZmluZCB0aGUgZGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlCitjb25jZXJuZWQgZmlsZS4gSW4gMi40IGtlcm5lbCwgZGNhY2hlX2xvY2sgd2FzIGhlbGQKK2R1cmluZyBsb29rLXVwIG9mIGVhY2ggcGF0aCBjb21wb25lbnQuIENvbnRlbnRpb24gYW5kCitjYWNoZWxpbmUgYm91bmNpbmcgb2YgdGhpcyBnbG9iYWwgbG9jayBjYXVzZWQgc2lnbmlmaWNhbnQKK3NjYWxhYmlsaXR5IHByb2JsZW1zLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVCitpbiBsaW51eCBrZXJuZWwsIHRoaXMgd2FzIHdvcmtlZCBhcm91bmQgYnkgbWFraW5nCit0aGUgbG9vay11cCBvZiBwYXRoIGNvbXBvbmVudHMgZHVyaW5nIHBhdGggd2Fsa2luZyBsb2NrLWZyZWUuCisKKworU2FmZSBsb2NrLWZyZWUgbG9vay11cCBvZiBkY2FjaGUgaGFzaCB0YWJsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitEY2FjaGUgaXMgYSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIHdpdGggdGhlIGhhc2ggdGFibGUgZW50cmllcworYWxzbyBsaW5rZWQgdG9nZXRoZXIgaW4gb3RoZXIgbGlzdHMuIEluIDIuNCBrZXJuZWwsIGRjYWNoZV9sb2NrCitwcm90ZWN0ZWQgYWxsIHRoZSBsaXN0cy4gV2UgYXBwbGllZCBSQ1Ugb25seSBvbiBoYXNoIGNoYWluCit3YWxraW5nLiBUaGUgcmVzdCBvZiB0aGUgbGlzdHMgYXJlIHN0aWxsIHByb3RlY3RlZCBieSBkY2FjaGVfbG9jay4KK1NvbWUgb2YgdGhlIGltcG9ydGFudCBjaGFuZ2VzIGFyZSA6CisKKzEuIFRoZSBkZWxldGlvbiBmcm9tIGhhc2ggY2hhaW4gaXMgZG9uZSB1c2luZyBobGlzdF9kZWxfcmN1KCkgbWFjcm8gd2hpY2gKKyAgIGRvZXNuJ3QgaW5pdGlhbGl6ZSBuZXh0IHBvaW50ZXIgb2YgdGhlIGRlbGV0ZWQgZGVudHJ5IGFuZCB0aGlzCisgICBhbGxvd3MgdXMgdG8gd2FsayBzYWZlbHkgbG9jay1mcmVlIHdoaWxlIGEgZGVsZXRpb24gaXMgaGFwcGVuaW5nLgorCisyLiBJbnNlcnRpb24gb2YgYSBkZW50cnkgaW50byB0aGUgaGFzaCB0YWJsZSBpcyBkb25lIHVzaW5nCisgICBobGlzdF9hZGRfaGVhZF9yY3UoKSB3aGljaCB0YWtlIGNhcmUgb2Ygb3JkZXJpbmcgdGhlIHdyaXRlcyAtCisgICB0aGUgd3JpdGVzIHRvIHRoZSBkZW50cnkgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgZGVudHJ5CisgICBpcyBpbnNlcnRlZC4gVGhpcyB3b3JrcyBpbiBjb25qdWN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCkKKyAgIHdoaWxlIHdhbGtpbmcgdGhlIGhhc2ggY2hhaW4uIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQKKyAgIGFsbCBpbml0aWFsaXphdGlvbiB0byB0aGUgZGVudHJ5IG11c3QgYmUgZG9uZSBiZWZvcmUgaGxpc3RfYWRkX2hlYWRfcmN1KCkKKyAgIHNpbmNlIHdlIGRvbid0IGhhdmUgZGNhY2hlX2xvY2sgcHJvdGVjdGlvbiB3aGlsZSB0cmF2ZXJzaW5nCisgICB0aGUgaGFzaCBjaGFpbi4gVGhpcyBpc24ndCBkaWZmZXJlbnQgZnJvbSB0aGUgZXhpc3RpbmcgY29kZS4KKworMy4gVGhlIGRlbnRyeSBsb29rZWQgdXAgd2l0aG91dCBob2xkaW5nIGRjYWNoZV9sb2NrIGJ5IGNhbm5vdCBiZQorICAgcmV0dXJuZWQgZm9yIHdhbGtpbmcgaWYgaXQgaXMgdW5oYXNoZWQuIEl0IHRoZW4gbWF5IGhhdmUgYSBOVUxMCisgICBkX2lub2RlIG9yIG90aGVyIGJvZ29zaXR5IHNpbmNlIFJDVSBkb2Vzbid0IHByb3RlY3QgdGhlIG90aGVyCisgICBmaWVsZHMgaW4gdGhlIGRlbnRyeS4gV2UgdGhlcmVmb3JlIHVzZSBhIGZsYWcgRENBQ0hFX1VOSEFTSEVEIHRvCisgICBpbmRpY2F0ZSB1bmhhc2hlZCAgZGVudHJpZXMgYW5kIHVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYQorICAgcGVyLWRlbnRyeSBsb2NrIChkX2xvY2spLiBPbmNlIGxvb2tlZCB1cCB3aXRob3V0IHRoZSBkY2FjaGVfbG9jaywKKyAgIHdlIGFjcXVpcmUgdGhlIHBlci1kZW50cnkgbG9jayAoZF9sb2NrKSBhbmQgY2hlY2sgaWYgdGhlCisgICBkZW50cnkgaXMgdW5oYXNoZWQuIElmIHNvLCB0aGUgbG9vay11cCBpcyBmYWlsZWQuIElmIG5vdCwgdGhlCisgICByZWZlcmVuY2UgY291bnQgb2YgdGhlIGRlbnRyeSBpcyBpbmNyZWFzZWQgYW5kIHRoZSBkZW50cnkgaXMgcmV0dXJuZWQuCisKKzQuIE9uY2UgYSBkZW50cnkgaXMgbG9va2VkIHVwLCBpdCBtdXN0IGJlIGVuc3VyZWQgZHVyaW5nIHRoZSBwYXRoCisgICB3YWxrIGZvciB0aGF0IGNvbXBvbmVudCBpdCBkb2Vzbid0IGdvIGF3YXkuIEluIHByZS0yLjUuMTAgY29kZSwKKyAgIHRoaXMgd2FzIGRvbmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZGVudHJ5LiBkY2FjaGVfcmN1IGRvZXMKKyAgIHRoZSBzYW1lLiAgSW4gc29tZSBzZW5zZSwgZGNhY2hlX3JjdSBwYXRoIHdhbGtpbmcgbG9va3MgbGlrZQorICAgdGhlIHByZS0yLjUuMTAgdmVyc2lvbi4KKworNS4gQWxsIGRlbnRyeSBoYXNoIGNoYWluIHVwZGF0aW9ucyBtdXN0IHRha2UgdGhlIGRjYWNoZV9sb2NrIGFzIHdlbGwgYXMKKyAgIHRoZSBwZXItZGVudHJ5IGxvY2sgaW4gdGhhdCBvcmRlci4gZHB1dCgpIGRvZXMgdGhpcyB0byBlbnN1cmUKKyAgIHRoYXQgYSBkZW50cnkgdGhhdCBoYXMganVzdCBiZWVuIGxvb2tlZCB1cCBpbiBhbm90aGVyIENQVQorICAgZG9lc24ndCBnZXQgZGVsZXRlZCBiZWZvcmUgZGdldCgpIGNhbiBiZSBkb25lIG9uIGl0LgorCis2LiBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRvIHJlZmVyZW5jZSBjb3VudGluZyBvZiBSQ1UgcHJvdGVjdGVkCisgICBvYmplY3RzLiBPbmUgc3VjaCBleGFtcGxlIGlzIGluIGlwdjQgcm91dGUgY2FjaGUgd2hlcmUKKyAgIGRlZmVycmVkIGZyZWVpbmcgKHVzaW5nIGNhbGxfcmN1KCkpIGlzIGRvbmUgYXMgc29vbiBhcworICAgdGhlIHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvIHplcm8uIFRoaXMgY2Fubm90IGJlIGRvbmUgaW4KKyAgIHRoZSBjYXNlIG9mIGRlbnRyaWVzIGJlY2F1c2UgdGVhcmluZyBkb3duIG9mIGRlbnRyaWVzCisgICByZXF1aXJlIGJsb2NraW5nIChkZW50cnlfaXB1dCgpKSB3aGljaCBpc24ndCBzdXBwb3J0ZWQgZnJvbQorICAgUkNVIGNhbGxiYWNrcy4gSW5zdGVhZCwgdGVhcmluZyBkb3duIG9mIGRlbnRyaWVzIGhhcHBlbgorICAgc3luY2hyb25vdXNseSBpbiBkcHV0KCksIGJ1dCBhY3R1YWwgZnJlZWluZyBoYXBwZW5zIGxhdGVyCisgICB3aGVuIFJDVSBncmFjZSBwZXJpb2QgaXMgb3Zlci4gVGhpcyBhbGxvd3Mgc2FmZSBsb2NrLWZyZWUKKyAgIHdhbGtpbmcgb2YgdGhlIGhhc2ggY2hhaW5zLCBidXQgYSBtYXRjaGVkIGRlbnRyeSBtYXkgaGF2ZQorICAgYmVlbiBwYXJ0aWFsbHkgdG9ybiBkb3duLiBUaGUgY2hlY2tpbmcgb2YgRENBQ0hFX1VOSEFTSEVECisgICBmbGFnIHdpdGggZF9sb2NrIGhlbGQgZGV0ZWN0cyBzdWNoIGRlbnRyaWVzIGFuZCBwcmV2ZW50cworICAgdGhlbSBmcm9tIGJlaW5nIHJldHVybmVkIGZyb20gbG9vay11cC4KKworCitNYWludGFpbmluZyBQT1NJWCByZW5hbWUgc2VtYW50aWNzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NpbmNlIGxvb2stdXAgb2YgZGVudHJpZXMgaXMgbG9jay1mcmVlLCBpdCBjYW4gcmFjZSBhZ2FpbnN0CithIGNvbmN1cnJlbnQgcmVuYW1lIG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsIGR1cmluZyByZW5hbWUKK29mIGZpbGUgQSB0byBCLCBsb29rLXVwIG9mIGVpdGhlciBBIG9yIEIgbXVzdCBzdWNjZWVkLgorU28sIGlmIGxvb2stdXAgb2YgQiBoYXBwZW5zIGFmdGVyIEEgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQoraGFzaCBjaGFpbiBidXQgbm90IGFkZGVkIHRvIHRoZSBuZXcgaGFzaCBjaGFpbiwgaXQgbWF5IGZhaWwuCitBbHNvLCBhIGNvbXBhcmlzb24gd2hpbGUgdGhlIG5hbWUgaXMgYmVpbmcgd3JpdHRlbiBjb25jdXJyZW50bHkKK2J5IGEgcmVuYW1lIG1heSByZXN1bHQgaW4gZmFsc2UgcG9zaXRpdmUgbWF0Y2hlcyB2aW9sYXRpbmcKK3JlbmFtZSBzZW1hbnRpY3MuICBJc3N1ZXMgcmVsYXRlZCB0byByYWNlIHdpdGggcmVuYW1lIGFyZQoraGFuZGxlZCBhcyBkZXNjcmliZWQgYmVsb3cgOgorCisxLiBMb29rLXVwIGNhbiBiZSBkb25lIGluIHR3byB3YXlzIC0gZF9sb29rdXAoKSB3aGljaCBpcyBzYWZlCisgICBmcm9tIHNpbXVsdGFuZW91cyByZW5hbWVzIGFuZCBfX2RfbG9va3VwKCkgd2hpY2ggaXMgbm90LgorICAgSWYgX19kX2xvb2t1cCgpIGZhaWxzLCBpdCBtdXN0IGJlIGZvbGxvd2VkIHVwIGJ5IGEgZF9sb29rdXAoKQorICAgdG8gY29ycmVjdGx5IGRldGVybWluZSB3aGV0aGVyIGEgZGVudHJ5IGlzIGluIHRoZSBoYXNoIHRhYmxlCisgICBvciBub3QuIGRfbG9va3VwKCkgcHJvdGVjdHMgbG9vay11cHMgdXNpbmcgYSBzZXF1ZW5jZQorICAgbG9jayAocmVuYW1lX2xvY2spLgorCisyLiBUaGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggYSBkZW50cnkgKGRfbmFtZSkgbWF5IGJlIGNoYW5nZWQgaWYKKyAgIGEgcmVuYW1lIGlzIGFsbG93ZWQgdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5LiBUbyBhdm9pZCBtZW1jbXAoKQorICAgaW4gX19kX2xvb2t1cCgpIGdvIG91dCBvZiBib3VuZHMgZHVlIHRvIGEgcmVuYW1lIGFuZCBmYWxzZQorICAgcG9zaXRpdmUgY29tcGFyaXNvbiwgdGhlIG5hbWUgY29tcGFyaXNvbiBpcyBkb25lIHdoaWxlIGhvbGRpbmcgdGhlCisgICBwZXItZGVudHJ5IGxvY2suIFRoaXMgcHJldmVudHMgY29uY3VycmVudCByZW5hbWVzIGR1cmluZyB0aGlzCisgICBvcGVyYXRpb24uCisKKzMuIEhhc2ggdGFibGUgd2Fsa2luZyBkdXJpbmcgbG9vay11cCBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBidWNrZXQgYXMKKyAgIHRoZSBjdXJyZW50IGRlbnRyeSBpcyBtb3ZlZCB0byBhIGRpZmZlcmVudCBidWNrZXQgZHVlIHRvIHJlbmFtZS4KKyAgIEJ1dCB3ZSB1c2UgaGxpc3RzIGluIGRjYWNoZSBoYXNoIHRhYmxlIGFuZCB0aGV5IGFyZSBudWxsLXRlcm1pbmF0ZWQuCisgICBTbywgZXZlbiBpZiBhIGRlbnRyeSBtb3ZlcyB0byBhIGRpZmZlcmVudCBidWNrZXQsIGhhc2ggY2hhaW4KKyAgIHdhbGsgd2lsbCB0ZXJtaW5hdGUuIFt3aXRoIGEgbGlzdF9oZWFkIGxpc3QsIGl0IG1heSBub3Qgc2luY2UKKyAgIHRlcm1pbmF0aW9uIGlzIHdoZW4gdGhlIGxpc3RfaGVhZCBpbiB0aGUgb3JpZ2luYWwgYnVja2V0IGlzIHJlYWNoZWRdLgorICAgU2luY2Ugd2UgcmVkbyB0aGUgZF9wYXJlbnQgY2hlY2sgYW5kIGNvbXBhcmUgbmFtZSB3aGlsZSBob2xkaW5nCisgICBkX2xvY2ssIGxvY2stZnJlZSBsb29rLXVwIHdpbGwgbm90IHJhY2UgYWdhaW5zdCBkX21vdmUoKS4KKworNC4gVGhlcmUgY2FuIGJlIGEgdGhlb3JpdGljYWwgcmFjZSB3aGVuIGEgZGVudHJ5IGtlZXBzIGNvbWluZyBiYWNrCisgICB0byBvcmlnaW5hbCBidWNrZXQgZHVlIHRvIGRvdWJsZSBtb3Zlcy4gRHVlIHRvIHRoaXMgbG9vay11cCBtYXkKKyAgIGNvbnNpZGVyIHRoYXQgaXQgaGFzIG5ldmVyIG1vdmVkIGFuZCBjYW4gZW5kIHVwIGluIGEgaW5maW5pdGUgbG9vcC4KKyAgIEJ1dCB0aGlzIGlzIG5vdCBhbnkgd29yc2UgdGhhdCB0aGVvcml0aWNhbCBsaXZlbG9ja3Mgd2UgYWxyZWFkeQorICAgaGF2ZSBpbiB0aGUga2VybmVsLgorCisKK0ltcG9ydGFudCBndWlkZWxpbmVzIGZvciBmaWxlc3lzdGVtIGRldmVsb3BlcnMgcmVsYXRlZCB0byBkY2FjaGVfcmN1Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBFeGlzdGluZyBkY2FjaGUgaW50ZXJmYWNlcyAocHJlLTIuNS42MikgZXhwb3J0ZWQgdG8gZmlsZXN5c3RlbQorICAgZG9uJ3QgY2hhbmdlLiBPbmx5IGRjYWNoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzLiBIb3dldmVyCisgICBmaWxlc3lzdGVtcyAqbXVzdCBub3QqIGRlbGV0ZSBmcm9tIHRoZSBkZW50cnkgaGFzaCBjaGFpbnMgZGlyZWN0bHkKKyAgIHVzaW5nIHRoZSBsaXN0IG1hY3JvcyBsaWtlIGFsbG93ZWQgZWFybGllci4gVGhleSBtdXN0IHVzZSBkY2FjaGUKKyAgIEFQSXMgbGlrZSBkX2Ryb3AoKSBvciBfX2RfZHJvcCgpIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLgorCisyLiBkX2ZsYWdzIGlzIG5vdyBwcm90ZWN0ZWQgYnkgYSBwZXItZGVudHJ5IGxvY2sgKGRfbG9jaykuIEFsbAorICAgYWNjZXNzIHRvIGRfZmxhZ3MgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgaXQuCisKKzMuIEZvciBhIGhhc2hlZCBkZW50cnksIGNoZWNraW5nIG9mIGRfY291bnQgbmVlZHMgdG8gYmUgcHJvdGVjdGVkCisgICBieSBkX2xvY2suCisKKworUGFwZXJzIGFuZCBvdGhlciBkb2N1bWVudGF0aW9uIG9uIGRjYWNoZSBsb2NraW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gU2NhbGluZyBkY2FjaGUgd2l0aCBSQ1UgKGh0dHA6Ly9saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD03MTI0KS4KKworMi4gaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvbG9ja2luZy9kY2FjaGUvZGNhY2hlLmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Q1ZDBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMudHh0CkBAIC0wLDAgKzEsMTg4IEBACisKK1RoZSBTR0kgWEZTIEZpbGVzeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT0KKworWEZTIGlzIGEgaGlnaCBwZXJmb3JtYW5jZSBqb3VybmFsaW5nIGZpbGVzeXN0ZW0gd2hpY2ggb3JpZ2luYXRlZAorb24gdGhlIFNHSSBJUklYIHBsYXRmb3JtLiAgSXQgaXMgY29tcGxldGVseSBtdWx0aS10aHJlYWRlZCwgY2FuCitzdXBwb3J0IGxhcmdlIGZpbGVzIGFuZCBsYXJnZSBmaWxlc3lzdGVtcywgZXh0ZW5kZWQgYXR0cmlidXRlcywKK3ZhcmlhYmxlIGJsb2NrIHNpemVzLCBpcyBleHRlbnQgYmFzZWQsIGFuZCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mCitCdHJlZXMgKGRpcmVjdG9yaWVzLCBleHRlbnRzLCBmcmVlIHNwYWNlKSB0byBhaWQgYm90aCBwZXJmb3JtYW5jZQorYW5kIHNjYWxhYmlsaXR5LgorCitSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMveGZzLworZm9yIGZ1cnRoZXIgZGV0YWlscy4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgb24tZGlzayBjb21wYXRpYmxlCit3aXRoIHRoZSBJUklYIHZlcnNpb24gb2YgWEZTLgorCisKK01vdW50IE9wdGlvbnMKKz09PT09PT09PT09PT0KKworV2hlbiBtb3VudGluZyBhbiBYRlMgZmlsZXN5c3RlbSwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhY2NlcHRlZC4KKworICBiaW9zaXplPXNpemUKKwlTZXRzIHRoZSBwcmVmZXJyZWQgYnVmZmVyZWQgSS9PIHNpemUgKGRlZmF1bHQgc2l6ZSBpcyA2NEspLgorCSJzaXplIiBtdXN0IGJlIGV4cHJlc3NlZCBhcyB0aGUgbG9nYXJpdGhtIChiYXNlMikgb2YgdGhlCisJZGVzaXJlZCBJL08gc2l6ZS4KKwlWYWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZSAxNCB0aHJvdWdoIDE2LCBpbmNsdXNpdmUKKwkoaS5lLiAxNkssIDMySywgYW5kIDY0SyBieXRlcykuICBPbiBtYWNoaW5lcyB3aXRoIGEgNEsKKwlwYWdlc2l6ZSwgMTMgKDhLIGJ5dGVzKSBpcyBhbHNvIGEgdmFsaWQgc2l6ZS4KKwlUaGUgcHJlZmVycmVkIGJ1ZmZlcmVkIEkvTyBzaXplIGNhbiBhbHNvIGJlIGFsdGVyZWQgb24gYW4KKwlpbmRpdmlkdWFsIGZpbGUgYmFzaXMgdXNpbmcgdGhlIGlvY3RsKDIpIHN5c3RlbSBjYWxsLgorCisgIGlrZWVwL25vaWtlZXAKKwlXaGVuIGlub2RlIGNsdXN0ZXJzIGFyZSBlbXB0aWVkIG9mIGlub2Rlcywga2VlcCB0aGVtIGFyb3VuZAorCW9uIHRoZSBkaXNrIChpa2VlcCkgLSB0aGlzIGlzIHRoZSB0cmFkaXRpb25hbCBYRlMgYmVoYXZpb3VyCisJYW5kIGlzIHN0aWxsIHRoZSBkZWZhdWx0IGZvciBub3cuICBVc2luZyB0aGUgbm9pa2VlcCBvcHRpb24sCisJaW5vZGUgY2x1c3RlcnMgYXJlIHJldHVybmVkIHRvIHRoZSBmcmVlIHNwYWNlIHBvb2wuCisKKyAgbG9nYnVmcz12YWx1ZQorCVNldCB0aGUgbnVtYmVyIG9mIGluLW1lbW9yeSBsb2cgYnVmZmVycy4gIFZhbGlkIG51bWJlcnMgcmFuZ2UKKwlmcm9tIDItOCBpbmNsdXNpdmUuCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgOCBidWZmZXJzIGZvciBmaWxlc3lzdGVtcyB3aXRoIGEKKwlibG9ja3NpemUgb2YgNjRLLCA0IGJ1ZmZlcnMgZm9yIGZpbGVzeXN0ZW1zIHdpdGggYSBibG9ja3NpemUKKwlvZiAzMkssIDMgYnVmZmVycyBmb3IgZmlsZXN5c3RlbXMgd2l0aCBhIGJsb2Nrc2l6ZSBvZiAxNksKKwlhbmQgMiBidWZmZXJzIGZvciBhbGwgb3RoZXIgY29uZmlndXJhdGlvbnMuICBJbmNyZWFzaW5nIHRoZQorCW51bWJlciBvZiBidWZmZXJzIG1heSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvbiBzb21lIHdvcmtsb2FkcworCWF0IHRoZSBjb3N0IG9mIHRoZSBtZW1vcnkgdXNlZCBmb3IgdGhlIGFkZGl0aW9uYWwgbG9nIGJ1ZmZlcnMKKwlhbmQgdGhlaXIgYXNzb2NpYXRlZCBjb250cm9sIHN0cnVjdHVyZXMuCisKKyAgbG9nYnNpemU9dmFsdWUKKwlTZXQgdGhlIHNpemUgb2YgZWFjaCBpbi1tZW1vcnkgbG9nIGJ1ZmZlci4KKwlTaXplIG1heSBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIG9yIGluIGtpbG9ieXRlcyB3aXRoIGEgImsiIHN1ZmZpeC4KKwlWYWxpZCBzaXplcyBmb3IgdmVyc2lvbiAxIGFuZCB2ZXJzaW9uIDIgbG9ncyBhcmUgMTYzODQgKDE2aykgYW5kIAorCTMyNzY4ICgzMmspLiAgVmFsaWQgc2l6ZXMgZm9yIHZlcnNpb24gMiBsb2dzIGFsc28gaW5jbHVkZSAKKwk2NTUzNiAoNjRrKSwgMTMxMDcyICgxMjhrKSBhbmQgMjYyMTQ0ICgyNTZrKS4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbWFjaGluZXMgd2l0aCBtb3JlIHRoYW4gMzJNQiBvZiBtZW1vcnkKKwlpcyAzMjc2OCwgbWFjaGluZXMgd2l0aCBsZXNzIG1lbW9yeSB1c2UgMTYzODQgYnkgZGVmYXVsdC4KKworICBsb2dkZXY9ZGV2aWNlIGFuZCBydGRldj1kZXZpY2UKKwlVc2UgYW4gZXh0ZXJuYWwgbG9nIChtZXRhZGF0YSBqb3VybmFsKSBhbmQvb3IgcmVhbC10aW1lIGRldmljZS4KKwlBbiBYRlMgZmlsZXN5c3RlbSBoYXMgdXAgdG8gdGhyZWUgcGFydHM6IGEgZGF0YSBzZWN0aW9uLCBhIGxvZworCXNlY3Rpb24sIGFuZCBhIHJlYWwtdGltZSBzZWN0aW9uLiAgVGhlIHJlYWwtdGltZSBzZWN0aW9uIGlzCisJb3B0aW9uYWwsIGFuZCB0aGUgbG9nIHNlY3Rpb24gY2FuIGJlIHNlcGFyYXRlIGZyb20gdGhlIGRhdGEKKwlzZWN0aW9uIG9yIGNvbnRhaW5lZCB3aXRoaW4gaXQuCisKKyAgbm9hbGlnbgorCURhdGEgYWxsb2NhdGlvbnMgd2lsbCBub3QgYmUgYWxpZ25lZCBhdCBzdHJpcGUgdW5pdCBib3VuZGFyaWVzLgorCisgIG5vYXRpbWUKKwlBY2Nlc3MgdGltZXN0YW1wcyBhcmUgbm90IHVwZGF0ZWQgd2hlbiBhIGZpbGUgaXMgcmVhZC4KKworICBub3JlY292ZXJ5CisJVGhlIGZpbGVzeXN0ZW0gd2lsbCBiZSBtb3VudGVkIHdpdGhvdXQgcnVubmluZyBsb2cgcmVjb3ZlcnkuCisJSWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCwgaXQgaXMgbGlrZWx5IHRvCisJYmUgaW5jb25zaXN0ZW50IHdoZW4gbW91bnRlZCBpbiAibm9yZWNvdmVyeSIgbW9kZS4KKwlTb21lIGZpbGVzIG9yIGRpcmVjdG9yaWVzIG1heSBub3QgYmUgYWNjZXNzaWJsZSBiZWNhdXNlIG9mIHRoaXMuCisJRmlsZXN5c3RlbXMgbW91bnRlZCAibm9yZWNvdmVyeSIgbXVzdCBiZSBtb3VudGVkIHJlYWQtb25seSBvcgorCXRoZSBtb3VudCB3aWxsIGZhaWwuCisKKyAgbm91dWlkCisJRG9uJ3QgY2hlY2sgZm9yIGRvdWJsZSBtb3VudGVkIGZpbGUgc3lzdGVtcyB1c2luZyB0aGUgZmlsZSBzeXN0ZW0gdXVpZC4KKwlUaGlzIGlzIHVzZWZ1bCB0byBtb3VudCBMVk0gc25hcHNob3Qgdm9sdW1lcy4KKworICBvc3luY2lzb3N5bmMKKwlNYWtlIE9fU1lOQyB3cml0ZXMgaW1wbGVtZW50IHRydWUgT19TWU5DLiAgV0lUSE9VVCB0aGlzIG9wdGlvbiwKKwlMaW51eCBYRlMgYmVoYXZlcyBhcyBpZiBhbiAib3N5bmNpc2RzeW5jIiBvcHRpb24gaXMgdXNlZCwKKwl3aGljaCB3aWxsIG1ha2Ugd3JpdGVzIHRvIGZpbGVzIG9wZW5lZCB3aXRoIHRoZSBPX1NZTkMgZmxhZyBzZXQKKwliZWhhdmUgYXMgaWYgdGhlIE9fRFNZTkMgZmxhZyBoYWQgYmVlbiB1c2VkIGluc3RlYWQuCisJVGhpcyBjYW4gcmVzdWx0IGluIGJldHRlciBwZXJmb3JtYW5jZSB3aXRob3V0IGNvbXByb21pc2luZworCWRhdGEgc2FmZXR5LgorCUhvd2V2ZXIgaWYgdGhpcyBvcHRpb24gaXMgbm90IGluIGVmZmVjdCwgdGltZXN0YW1wIHVwZGF0ZXMgZnJvbQorCU9fU1lOQyB3cml0ZXMgY2FuIGJlIGxvc3QgaWYgdGhlIHN5c3RlbSBjcmFzaGVzLgorCUlmIHRpbWVzdGFtcCB1cGRhdGVzIGFyZSBjcml0aWNhbCwgdXNlIHRoZSBvc3luY2lzb3N5bmMgb3B0aW9uLgorCisgIHF1b3RhL3VzcnF1b3RhL3Vxbm9lbmZvcmNlCisJVXNlciBkaXNrIHF1b3RhIGFjY291bnRpbmcgZW5hYmxlZCwgYW5kIGxpbWl0cyAob3B0aW9uYWxseSkKKwllbmZvcmNlZC4KKworICBncnBxdW90YS9ncW5vZW5mb3JjZQorCUdyb3VwIGRpc2sgcXVvdGEgYWNjb3VudGluZyBlbmFibGVkIGFuZCBsaW1pdHMgKG9wdGlvbmFsbHkpCisJZW5mb3JjZWQuCisKKyAgc3VuaXQ9dmFsdWUgYW5kIHN3aWR0aD12YWx1ZQorCVVzZWQgdG8gc3BlY2lmeSB0aGUgc3RyaXBlIHVuaXQgYW5kIHdpZHRoIGZvciBhIFJBSUQgZGV2aWNlIG9yCisJYSBzdHJpcGUgdm9sdW1lLiAgInZhbHVlIiBtdXN0IGJlIHNwZWNpZmllZCBpbiA1MTItYnl0ZSBibG9jaworCXVuaXRzLgorCUlmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBmaWxlc3lzdGVtIHdhcyBtYWRlIG9uCisJYSBzdHJpcGUgdm9sdW1lIG9yIHRoZSBzdHJpcGUgd2lkdGggb3IgdW5pdCB3ZXJlIHNwZWNpZmllZCBmb3IKKwl0aGUgUkFJRCBkZXZpY2UgYXQgbWtmcyB0aW1lLCB0aGVuIHRoZSBtb3VudCBzeXN0ZW0gY2FsbCB3aWxsCisJcmVzdG9yZSB0aGUgdmFsdWUgZnJvbSB0aGUgc3VwZXJibG9jay4gIEZvciBmaWxlc3lzdGVtcyB0aGF0CisJYXJlIG1hZGUgZGlyZWN0bHkgb24gUkFJRCBkZXZpY2VzLCB0aGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkCisJdG8gb3ZlcnJpZGUgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzdXBlcmJsb2NrIGlmIHRoZSB1bmRlcmx5aW5nCisJZGlzayBsYXlvdXQgY2hhbmdlcyBhZnRlciB0aGUgZmlsZXN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkLgorCVRoZSAic3dpZHRoIiBvcHRpb24gaXMgcmVxdWlyZWQgaWYgdGhlICJzdW5pdCIgb3B0aW9uIGhhcyBiZWVuCisJc3BlY2lmaWVkLCBhbmQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSAic3VuaXQiIHZhbHVlLgorCitzeXNjdGxzCis9PT09PT09CisKK1RoZSBmb2xsb3dpbmcgc3lzY3RscyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgWEZTIGZpbGVzeXN0ZW06CisKKyAgZnMueGZzLnN0YXRzX2NsZWFyCQkoTWluOiAwICBEZWZhdWx0OiAwICBNYXg6IDEpCisJU2V0dGluZyB0aGlzIHRvICIxIiBjbGVhcnMgYWNjdW11bGF0ZWQgWEZTIHN0YXRpc3RpY3MgCisJaW4gL3Byb2MvZnMveGZzL3N0YXQuICBJdCB0aGVuIGltbWVkaWF0ZWx5IHJlc2V0cyB0byAiMCIuCisgIAorICBmcy54ZnMueGZzc3luY2RfY2VudGlzZWNzCShNaW46IDEwMCAgRGVmYXVsdDogMzAwMCAgTWF4OiA3MjAwMDApCisgIAlUaGUgaW50ZXJ2YWwgYXQgd2hpY2ggdGhlIHhmc3N5bmNkIHRocmVhZCBmbHVzaGVzIG1ldGFkYXRhCisgIAlvdXQgdG8gZGlzay4gIFRoaXMgdGhyZWFkIHdpbGwgZmx1c2ggbG9nIGFjdGl2aXR5IG91dCwgYW5kCisgIAlkbyBzb21lIHByb2Nlc3Npbmcgb24gdW5saW5rZWQgaW5vZGVzLgorCisgIGZzLnhmcy54ZnNidWZkX2NlbnRpc2VjcwkoTWluOiA1MCAgRGVmYXVsdDogMTAwCU1heDogMzAwMCkKKwlUaGUgaW50ZXJ2YWwgYXQgd2hpY2ggeGZzYnVmZCBzY2FucyB0aGUgZGlydHkgbWV0YWRhdGEgYnVmZmVycyBsaXN0LgorCisgIGZzLnhmcy5hZ2VfYnVmZmVyX2NlbnRpc2VjcwkoTWluOiAxMDAgIERlZmF1bHQ6IDE1MDAgIE1heDogNzIwMDAwKQorCVRoZSBhZ2UgYXQgd2hpY2ggeGZzYnVmZCBmbHVzaGVzIGRpcnR5IG1ldGFkYXRhIGJ1ZmZlcnMgdG8gZGlzay4KKworICBmcy54ZnMuZXJyb3JfbGV2ZWwJCShNaW46IDAgIERlZmF1bHQ6IDMgIE1heDogMTEpCisJQSB2b2x1bWUga25vYiBmb3IgZXJyb3IgcmVwb3J0aW5nIHdoZW4gaW50ZXJuYWwgZXJyb3JzIG9jY3VyLgorCVRoaXMgd2lsbCBnZW5lcmF0ZSBkZXRhaWxlZCBtZXNzYWdlcyAmIGJhY2t0cmFjZXMgZm9yIGZpbGVzeXN0ZW0KKwlzaHV0ZG93bnMsIGZvciBleGFtcGxlLiAgQ3VycmVudCB0aHJlc2hvbGQgdmFsdWVzIGFyZToKKworCQlYRlNfRVJSTEVWRUxfT0ZGOiAgICAgICAwCisJCVhGU19FUlJMRVZFTF9MT1c6ICAgICAgIDEKKwkJWEZTX0VSUkxFVkVMX0hJR0g6ICAgICAgNQorCisgIGZzLnhmcy5wYW5pY19tYXNrCQkoTWluOiAwICBEZWZhdWx0OiAwICBNYXg6IDEyNykKKwlDYXVzZXMgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHRvIGNhbGwgQlVHKCkuIFZhbHVlIGlzIGEgYml0bWFzazsgCisJQU5EIHRvZ2V0aGVyIHRoZSB0YWdzIHdoaWNoIHJlcHJlc2VudCBlcnJvcnMgd2hpY2ggc2hvdWxkIGNhdXNlIHBhbmljczoKKwkKKwkJWEZTX05PX1BUQUcgICAgICAgICAgICAgICAgICAgICAwCisJCVhGU19QVEFHX0lGTFVTSCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCQlYRlNfUFRBR19MT0dSRVMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKwkJWEZTX1BUQUdfQUlMREVMRVRFICAgICAgICAgICAgICAweDAwMDAwMDA0CisJCVhGU19QVEFHX0VSUk9SX1JFUE9SVCAgICAgICAgICAgMHgwMDAwMDAwOAorCQlYRlNfUFRBR19TSFVURE9XTl9DT1JSVVBUICAgICAgIDB4MDAwMDAwMTAKKwkJWEZTX1BUQUdfU0hVVERPV05fSU9FUlJPUiAgICAgICAweDAwMDAwMDIwCisJCVhGU19QVEFHX1NIVVRET1dOX0xPR0VSUk9SICAgICAgMHgwMDAwMDA0MAorCisJVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgkJCisKKyAgZnMueGZzLmlyaXhfc3ltbGlua19tb2RlCShNaW46IDAgIERlZmF1bHQ6IDAgIE1heDogMSkKKwlDb250cm9scyB3aGV0aGVyIHN5bWxpbmtzIGFyZSBjcmVhdGVkIHdpdGggbW9kZSAwNzc3IChkZWZhdWx0KQorCW9yIHdoZXRoZXIgdGhlaXIgbW9kZSBpcyBhZmZlY3RlZCBieSB0aGUgdW1hc2sgKGlyaXggbW9kZSkuCisKKyAgZnMueGZzLmlyaXhfc2dpZF9pbmhlcml0CShNaW46IDAgIERlZmF1bHQ6IDAgIE1heDogMSkKKwlDb250cm9scyBmaWxlcyBjcmVhdGVkIGluIFNHSUQgZGlyZWN0b3JpZXMuCisJSWYgdGhlIGdyb3VwIElEIG9mIHRoZSBuZXcgZmlsZSBkb2VzIG5vdCBtYXRjaCB0aGUgZWZmZWN0aXZlIGdyb3VwCisJSUQgb3Igb25lIG9mIHRoZSBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcyBvZiB0aGUgcGFyZW50IGRpciwgdGhlIAorCUlTR0lEIGJpdCBpcyBjbGVhcmVkIGlmIHRoZSBpcml4X3NnaWRfaW5oZXJpdCBjb21wYXRpYmlsaXR5IHN5c2N0bCAKKwlpcyBzZXQuCisKKyAgZnMueGZzLnJlc3RyaWN0X2Nob3duCQkoTWluOiAwICBEZWZhdWx0OiAxICBNYXg6IDEpCisgIAlDb250cm9scyB3aGV0aGVyIHVucHJpdmlsZWdlZCB1c2VycyBjYW4gdXNlIGNob3duIHRvICJnaXZlIGF3YXkiCisJYSBmaWxlIHRvIGFub3RoZXIgdXNlci4KKworICBmcy54ZnMuaW5oZXJpdF9zeW5jCQkoTWluOiAwICBEZWZhdWx0OiAxICBNYXggMSkKKwlTZXR0aW5nIHRoaXMgdG8gIjEiIHdpbGwgY2F1c2UgdGhlICJzeW5jIiBmbGFnIHNldCAKKwlieSB0aGUgY2hhdHRyKDEpIGNvbW1hbmQgb24gYSBkaXJlY3RvcnkgdG8gYmUKKwlpbmhlcml0ZWQgYnkgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuCisKKyAgZnMueGZzLmluaGVyaXRfbm9kdW1wCQkoTWluOiAwICBEZWZhdWx0OiAxICBNYXggMSkKKwlTZXR0aW5nIHRoaXMgdG8gIjEiIHdpbGwgY2F1c2UgdGhlICJub2R1bXAiIGZsYWcgc2V0IAorCWJ5IHRoZSBjaGF0dHIoMSkgY29tbWFuZCBvbiBhIGRpcmVjdG9yeSB0byBiZQorCWluaGVyaXRlZCBieSBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeS4KKworICBmcy54ZnMuaW5oZXJpdF9ub2F0aW1lCShNaW46IDAgIERlZmF1bHQ6IDEgIE1heCAxKQorCVNldHRpbmcgdGhpcyB0byAiMSIgd2lsbCBjYXVzZSB0aGUgIm5vYXRpbWUiIGZsYWcgc2V0IAorCWJ5IHRoZSBjaGF0dHIoMSkgY29tbWFuZCBvbiBhIGRpcmVjdG9yeSB0byBiZQorCWluaGVyaXRlZCBieSBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlODM2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvUkVBRE1FCkBAIC0wLDAgKzEsMTI0IEBACisKKyByZXF1ZXN0X2Zpcm13YXJlKCkgaG90cGx1ZyBpbnRlcmZhY2U6CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQ29weXJpZ2h0IChDKSAyMDAzIE1hbnVlbCBFc3RyYWRhIFNhaW56IDxyYW50eUBkZWJpYW4ub3JnPgorCisgV2h5OgorIC0tLQorCisgVG9kYXksIHRoZSBtb3N0IGV4dGVuZGVkIHdheSB0byB1c2UgZmlybXdhcmUgaW4gdGhlIExpbnV4IGtlcm5lbCBpcyBsaW5raW5nCisgaXQgc3RhdGljYWxseSBpbiBhIGhlYWRlciBmaWxlLiBXaGljaCBoYXMgcG9saXRpY2FsIGFuZCB0ZWNobmljYWwgaXNzdWVzOgorCisgIDEpIFNvbWUgZmlybXdhcmUgaXMgbm90IGxlZ2FsIHRvIHJlZGlzdHJpYnV0ZS4KKyAgMikgVGhlIGZpcm13YXJlIG9jY3VwaWVzIG1lbW9yeSBwZXJtYW5lbnRseSwgZXZlbiB0aG91Z2ggaXQgb2Z0ZW4gaXMganVzdAorICAgICB1c2VkIG9uY2UuCisgIDMpIFNvbWUgcGVvcGxlLCBsaWtlIHRoZSBEZWJpYW4gY3Jvd2QsIGRvbid0IGNvbnNpZGVyIHNvbWUgZmlybXdhcmUgZnJlZQorICAgICBlbm91Z2ggYW5kIHJlbW92ZSBlbnRpcmUgZHJpdmVycyAoZS5nLjoga2V5c3BhbikuCisKKyBIaWdoIGxldmVsIGJlaGF2aW9yIChtaXhlZCk6CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisga2VybmVsKGRyaXZlcik6IGNhbGxzIHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAkRklSTVdBUkUsIGRldmljZSkKKworIHVzZXJzcGFjZToKKyAJLSAvc3lzL2NsYXNzL2Zpcm13YXJlL3h4eC97bG9hZGluZyxkYXRhfSBhcHBlYXIuCisJLSBob3RwbHVnIGdldHMgY2FsbGVkIHdpdGggYSBmaXJtd2FyZSBpZGVudGlmaWVyIGluICRGSVJNV0FSRQorCSAgYW5kIHRoZSB1c3VhbCBob3RwbHVnIGVudmlyb25tZW50LgorCQktIGhvdHBsdWc6IGVjaG8gMSA+IC9zeXMvY2xhc3MvZmlybXdhcmUveHh4L2xvYWRpbmcKKworIGtlcm5lbDogRGlzY2FyZCBhbnkgcHJldmlvdXMgcGFydGlhbCBsb2FkLgorCisgdXNlcnNwYWNlOgorCQktIGhvdHBsdWc6IGNhdCBhcHByb3ByaWF0ZV9maXJtd2FyZV9pbWFnZSA+IFwKKwkJCQkJL3N5cy9jbGFzcy9maXJtd2FyZS94eHgvZGF0YQorCisga2VybmVsOiBncm93cyBhIGJ1ZmZlciBpbiBQQUdFX1NJWkUgaW5jcmVtZW50cyB0byBob2xkIHRoZSBpbWFnZSBhcyBpdAorCSBjb21lcyBpbi4KKworIHVzZXJzcGFjZToKKwkJLSBob3RwbHVnOiBlY2hvIDAgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL3h4eC9sb2FkaW5nCisKKyBrZXJuZWw6IHJlcXVlc3RfZmlybXdhcmUoKSByZXR1cm5zIGFuZCB0aGUgZHJpdmVyIGhhcyB0aGUgZmlybXdhcmUKKwkgaW1hZ2UgaW4gZndfZW50cnktPntkYXRhLHNpemV9LiBJZiBzb21ldGhpbmcgd2VudCB3cm9uZworCSByZXF1ZXN0X2Zpcm13YXJlKCkgcmV0dXJucyBub24temVybyBhbmQgZndfZW50cnkgaXMgc2V0IHRvCisJIE5VTEwuCisKKyBrZXJuZWwoZHJpdmVyKTogRHJpdmVyIGNvZGUgY2FsbHMgcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSkgcmVsZWFzaW5nCisJCSB0aGUgZmlybXdhcmUgaW1hZ2UgYW5kIGFueSByZWxhdGVkIHJlc291cmNlLgorCisgSGlnaCBsZXZlbCBiZWhhdmlvciAoZHJpdmVyIGNvZGUpOgorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSBpZihyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgJEZJUk1XQVJFLCBkZXZpY2UpID09IDApCisJIAljb3B5X2Z3X3RvX2RldmljZShmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOworCSByZWxlYXNlKGZ3X2VudHJ5KTsKKworIFNhbXBsZS9zaW1wbGUgaG90cGx1ZyBzY3JpcHQ6CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJIyBCb3RoICRERVZQQVRIIGFuZCAkRklSTVdBUkUgYXJlIGFscmVhZHkgcHJvdmlkZWQgaW4gdGhlIGVudmlyb25tZW50LgorCisJSE9UUExVR19GV19ESVI9L3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8KKworCWVjaG8gMSA+IC9zeXMvJERFVlBBVEgvbG9hZGluZworCWNhdCAkSE9UUExVR19GV19ESVIvJEZJUk1XQVJFID4gL3N5c2ZzLyRERVZQQVRIL2RhdGEKKwllY2hvIDAgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKKworIFJhbmRvbSBub3RlczoKKyA9PT09PT09PT09PT0KKworIC0gImVjaG8gLTEgPiAvc3lzL2NsYXNzL2Zpcm13YXJlL3h4eC9sb2FkaW5nIiB3aWxsIGNhbmNlbCB0aGUgbG9hZCBhdAorICAgb25jZSBhbmQgbWFrZSByZXF1ZXN0X2Zpcm13YXJlKCkgcmV0dXJuIHdpdGggZXJyb3IuCisKKyAtIGZpcm13YXJlX2RhdGFfcmVhZCgpIGFuZCBmaXJtd2FyZV9sb2FkaW5nX3Nob3coKSBhcmUganVzdCBwcm92aWRlZAorICAgZm9yIHRlc3RpbmcgYW5kIGNvbXBsZXRlbmVzcywgdGhleSBhcmUgbm90IGNhbGxlZCBpbiBub3JtYWwgdXNlLgorCisgLSBUaGVyZSBpcyBhbHNvIC9zeXMvY2xhc3MvZmlybXdhcmUvdGltZW91dCB3aGljaCBob2xkcyBhIHRpbWVvdXQgaW4KKyAgIHNlY29uZHMgZm9yIHRoZSB3aG9sZSBsb2FkIG9wZXJhdGlvbi4KKworIC0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoKSBpcyBhbHNvIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZSBpbgorICAgbm9uLXVzZXIgY29udGV4dHMuCisKKworIGFib3V0IGluLWtlcm5lbCBwZXJzaXN0ZW5jZToKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGFzIGV4cGxhaW5lZCBiZWxvdywgaXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8ga2VlcAorIGZpcm13YXJlIGltYWdlcyBpbiBub24tc3dhcHBhYmxlIGtlcm5lbCBtZW1vcnkgb3IgZXZlbiBpbiB0aGUga2VybmVsIGltYWdlCisgKHByb2JhYmx5IHdpdGhpbiBpbml0cmFtZnMpLgorCisgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuCisKKyAtIFdoeSBPUFRJT05BTCBpbi1rZXJuZWwgcGVyc2lzdGVuY2UgbWF5IGJlIGEgZ29vZCBpZGVhIHNvbWV0aW1lczoKKyAKKwktIElmIHRoZSBkZXZpY2UgdGhhdCBuZWVkcyB0aGUgZmlybXdhcmUgaXMgbmVlZGVkIHRvIGFjY2VzcyB0aGUKKwkgIGZpbGVzeXN0ZW0uIFdoZW4gdXBvbiBzb21lIGVycm9yIHRoZSBkZXZpY2UgaGFzIHRvIGJlIHJlc2V0IGFuZCB0aGUKKwkgIGZpcm13YXJlIHJlbG9hZGVkLCBpdCB3b24ndCBiZSBwb3NzaWJsZSB0byBnZXQgaXQgZnJvbSB1c2Vyc3BhY2UuCisJICBlLmcuOgorCQktIEEgZGlza2xlc3MgY2xpZW50IHdpdGggYSBuZXR3b3JrIGNhcmQgdGhhdCBuZWVkcyBmaXJtd2FyZS4KKwkJLSBUaGUgZmlsZXN5c3RlbSBpcyBzdG9yZWQgaW4gYSBkaXNrIGJlaGluZCBhbiBzY3NpIGRldmljZQorCQkgIHRoYXQgbmVlZHMgZmlybXdhcmUuCisJLSBSZXBsYWNpbmcgYnVnZ3kgRFNEVC9TU0RUIEFDUEkgdGFibGVzIG9uIGJvb3QuCisJICBOb3RlOiB0aGlzIHdvdWxkIHJlcXVpcmUgdGhlIHBlcnNpc3RlbnQgb2JqZWN0cyB0byBiZSBpbmNsdWRlZAorCSAgd2l0aGluIHRoZSBrZXJuZWwgaW1hZ2UsIHByb2JhYmx5IHdpdGhpbiBpbml0cmFtZnMuCisJICAKKyAgIEFuZCB0aGUgc2FtZSBkZXZpY2UgY2FuIGJlIG5lZWRlZCB0byBhY2Nlc3MgdGhlIGZpbGVzeXN0ZW0gb3Igbm90IGRlcGVuZGluZworICAgb24gdGhlIHNldHVwLCBzbyBJIHRoaW5rIHRoYXQgdGhlIGNob2ljZSBvbiB3aGF0IGZpcm13YXJlIHRvIG1ha2UKKyAgIHBlcnNpc3RlbnQgc2hvdWxkIGJlIGxlZnQgdG8gdXNlcnNwYWNlLgorCisgLSBXaHkgcmVnaXN0ZXJfZmlybXdhcmUoKStfX2luaXQgY2FuIGJlIHVzZWZ1bDoKKyAJLSBGb3IgYm9vdCBkZXZpY2VzIG5lZWRpbmcgZmlybXdhcmUuCisJLSBUbyBtYWtlIHRoZSB0cmFuc2l0aW9uIGVhc2llcjoKKwkJVGhlIGZpcm13YXJlIGNhbiBiZSBkZWNsYXJlZCBfX2luaXQgYW5kIHJlZ2lzdGVyX2Zpcm13YXJlKCkKKwkJY2FsbGVkIG9uIG1vZHVsZV9pbml0LiBUaGVuIHRoZSBmaXJtd2FyZSBpcyB3YXJyYW50ZWQgdG8gYmUKKwkJdGhlcmUgZXZlbiBpZiAiZmlybXdhcmUgaG90cGx1ZyB1c2Vyc3BhY2UiIGlzIG5vdCB0aGVyZSB5ZXQgb3IKKwkJaXQgZG9lc24ndCB5ZXQgcHJvdmlkZSB0aGUgbmVlZGVkIGZpcm13YXJlLgorCQlPbmNlIHRoZSBmaXJtd2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGluIHVzZXJzcGFjZSwgaXQgY2FuIGJlCisJCXJlbW92ZWQgZnJvbSB0aGUga2VybmVsLiBPciBtYWRlIG9wdGlvbmFsIChDT05GSUdfLipfRklSTVdBUkUpLgorCisJSW4gZWl0aGVyIGNhc2UsIGlmIGZpcm13YXJlIGhvdHBsdWcgc3VwcG9ydCBpcyB0aGVyZSwgaXQgY2FuIG1vdmUgdGhlCisJZmlybXdhcmUgb3V0IG9mIGtlcm5lbCBtZW1vcnkgaW50byB0aGUgcmVhbCBmaWxlc3lzdGVtIGZvciBsYXRlcgorCXVzYWdlLgorCisJTm90ZTogSWYgcGVyc2lzdGVuY2UgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIGluaXRyYW1mcywKKwlyZWdpc3Rlcl9maXJtd2FyZSgpIG1heSBub3QgYmUgYXBwcm9wcmlhdGUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjNTZhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogZmlybXdhcmVfc2FtcGxlX2RyaXZlci5jIC0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWFudWVsIEVzdHJhZGEgU2FpbnogPHJhbnR5QGRlYmlhbi5vcmc+CisgKgorICogU2FtcGxlIGNvZGUgb24gaG93IHRvIHVzZSByZXF1ZXN0X2Zpcm13YXJlKCkgZnJvbSBkcml2ZXJzLgorICoKKyAqIE5vdGUgdGhhdCByZWdpc3Rlcl9maXJtd2FyZSgpIGlzIGN1cnJlbnRseSB1c2VsZXNzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAibGludXgvZmlybXdhcmUuaCIKKworI2RlZmluZSBXRV9DQU5fTkVFRF9GSVJNV0FSRV9CRUZPUkVfVVNFUlNQQUNFX0lTX0FWQUlMQUJMRQorI2lmZGVmIFdFX0NBTl9ORUVEX0ZJUk1XQVJFX0JFRk9SRV9VU0VSU1BBQ0VfSVNfQVZBSUxBQkxFCitjaGFyIF9faW5pdCBpbmtlcm5lbF9maXJtd2FyZVtdID0gImxldCdzIHNheSB0aGF0IHRoaXMgaXMgZmlybXdhcmVcbiI7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBkZXZpY2UgZ2hvc3RfZGV2aWNlID0geworCS5uYW1lICAgICAgPSAiR2hvc3QgRGV2aWNlIiwKKwkuYnVzX2lkICAgID0gImdob3N0MCIsCit9OworCisKK3N0YXRpYyB2b2lkIHNhbXBsZV9maXJtd2FyZV9sb2FkKGNoYXIgKmZpcm13YXJlLCBpbnQgc2l6ZSkKK3sKKwl1OCBidWZbc2l6ZSsxXTsKKwltZW1jcHkoYnVmLCBmaXJtd2FyZSwgc2l6ZSk7CisJYnVmW3NpemVdID0gJ1wwJzsKKwlwcmludGsoImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IGZpcm13YXJlOiAlc1xuIiwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2FtcGxlX3Byb2JlX2RlZmF1bHQodm9pZCkKK3sKKwkvKiB1c2VzIHRoZSBkZWZhdWx0IG1ldGhvZCB0byBnZXQgdGhlIGZpcm13YXJlICovCisgICAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJcHJpbnRrKCJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiBhIGdob3N0IGRldmljZSBnb3QgaW5zZXJ0ZWQgOilcbiIpOworCisgICAgICAgIGlmKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UpIT0wKQorCXsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogRmlybXdhcmUgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsKKwl9CisJCisJc2FtcGxlX2Zpcm13YXJlX2xvYWQoZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCisJLyogZmluaXNoIHNldHRpbmcgdXAgdGhlIGRldmljZSAqLworfQorc3RhdGljIHZvaWQgc2FtcGxlX3Byb2JlX3NwZWNpZmljKHZvaWQpCit7CisJLyogVXNlcyBzb21lIHNwZWNpZmljIGhvdHBsdWcgc3VwcG9ydCB0byBnZXQgdGhlIGZpcm13YXJlIGZyb20KKwkgKiB1c2Vyc3BhY2UgIGRpcmVjdGx5IGludG8gdGhlIGhhcmR3YXJlLCBvciB2aWEgc29tZSBzeXNmcyBmaWxlICovCisKKwkvKiBOT1RFOiBUaGlzIGN1cnJlbnRseSBkb2Vzbid0IHdvcmsgKi8KKworCXByaW50aygiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogYSBnaG9zdCBkZXZpY2UgZ290IGluc2VydGVkIDopXG4iKTsKKworICAgICAgICBpZihyZXF1ZXN0X2Zpcm13YXJlKE5VTEwsICJzYW1wbGVfZHJpdmVyX2Z3IiwgJmdob3N0X2RldmljZSkhPTApCisJeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiBGaXJtd2FyZSBsb2FkIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisJCisJLyogcmVxdWVzdF9maXJtd2FyZSBibG9ja3MgdW50aWwgdXNlcnNwYWNlIGZpbmlzaGVkLCBzbyBhdAorCSAqIHRoaXMgcG9pbnQgdGhlIGZpcm13YXJlIHNob3VsZCBiZSBhbHJlYWR5IGluIHRoZSBkZXZpY2UgKi8KKworCS8qIGZpbmlzaCBzZXR0aW5nIHVwIHRoZSBkZXZpY2UgKi8KK30KK3N0YXRpYyB2b2lkIHNhbXBsZV9wcm9iZV9hc3luY19jb250KGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCit7CisJaWYoIWZ3KXsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogZmlybXdhcmUgbG9hZCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKCJmaXJtd2FyZV9zYW1wbGVfZHJpdmVyOiBkZXZpY2UgcG9pbnRlciBcIiVzXCJcbiIsCisJICAgICAgIChjaGFyICopY29udGV4dCk7CisJc2FtcGxlX2Zpcm13YXJlX2xvYWQoZnctPmRhdGEsIGZ3LT5zaXplKTsKK30KK3N0YXRpYyB2b2lkIHNhbXBsZV9wcm9iZV9hc3luYyh2b2lkKQoreworCS8qIExldCdzIHNheSB0aGF0IEkgY2FuJ3Qgc2xlZXAgKi8KKwlpbnQgZXJyb3I7CisJZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCAoVEhJU19NT0RVTEUsCisJCQkJCSAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UsCisJCQkJCSAibXkgZGV2aWNlIHBvaW50ZXIiLAorCQkJCQkgc2FtcGxlX3Byb2JlX2FzeW5jX2NvbnQpOworCWlmKGVycm9yKXsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgICAgImZpcm13YXJlX3NhbXBsZV9kcml2ZXI6IgorCQkgICAgICAgIiByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCBmYWlsZWRcbiIpOworCX0KK30KKworc3RhdGljIGludCBzYW1wbGVfaW5pdCh2b2lkKQoreworI2lmZGVmIFdFX0NBTl9ORUVEX0ZJUk1XQVJFX0JFRk9SRV9VU0VSU1BBQ0VfSVNfQVZBSUxBQkxFCisJcmVnaXN0ZXJfZmlybXdhcmUoInNhbXBsZV9kcml2ZXJfZnciLCBpbmtlcm5lbF9maXJtd2FyZSwKKwkJCSAgc2l6ZW9mKGlua2VybmVsX2Zpcm13YXJlKSk7CisjZW5kaWYKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmZ2hvc3RfZGV2aWNlKTsKKwkvKiBzaW5jZSB0aGVyZSBpcyBubyByZWFsIGhhcmR3YXJlIGluc2VydGlvbiBJIGp1c3QgY2FsbCB0aGUKKwkgKiBzYW1wbGUgcHJvYmUgZnVuY3Rpb25zIGhlcmUgKi8KKwlzYW1wbGVfcHJvYmVfc3BlY2lmaWMoKTsKKwlzYW1wbGVfcHJvYmVfZGVmYXVsdCgpOworCXNhbXBsZV9wcm9iZV9hc3luYygpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNhbXBsZV9leGl0KHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0IChzYW1wbGVfaW5pdCk7Cittb2R1bGVfZXhpdCAoc2FtcGxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVhYjJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIGZpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jIC0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWFudWVsIEVzdHJhZGEgU2FpbnogPHJhbnR5QGRlYmlhbi5vcmc+CisgKgorICogTk9URTogVGhpcyBpcyBqdXN0IGEgcHJvYmUgb2YgY29uY2VwdCwgaWYgeW91IHRoaW5rIHRoYXQgeW91ciBkcml2ZXIgd291bGQKKyAqIGJlIHdlbGwgc2VydmVkIGJ5IHRoaXMgbWVjaGFuaXNtIHBsZWFzZSBjb250YWN0IG1lIGZpcnN0LgorICoKKyAqIERPTidUIFVTRSBUSElTIENPREUgQVMgSVMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKworTU9EVUxFX0FVVEhPUigiTWFudWVsIEVzdHJhZGEgU2FpbnogPHJhbnR5QGRlYmlhbi5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhhY2tpc2ggc2FtcGxlIGZvciB1c2luZyBmaXJtd2FyZSBjbGFzcyBkaXJlY3RseSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGFzc19kZXZpY2UgKnRvX2NsYXNzX2RldihzdHJ1Y3Qga29iamVjdCAqb2JqKQoreworCXJldHVybiBjb250YWluZXJfb2Yob2JqLHN0cnVjdCBjbGFzc19kZXZpY2Usa29iaik7Cit9CitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqdG9fY2xhc3NfZGV2X2F0dHIoc3RydWN0IGF0dHJpYnV0ZSAqX2F0dHIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihfYXR0cixzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSxhdHRyKTsKK30KKworaW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0cik7CitpbnQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyKTsKKworc3RydWN0IGZpcm13YXJlX3ByaXYgeworCWNoYXIgZndfaWRbRklSTVdBUkVfTkFNRV9NQVhdOworCXMzMiBsb2FkaW5nOjI7CisJdTMyIGFib3J0OjE7Cit9OworCitleHRlcm4gc3RydWN0IGNsYXNzIGZpcm13YXJlX2NsYXNzOworCitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9sb2FkaW5nX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBmd19wcml2LT5sb2FkaW5nKTsKK30KK3N0YXRpYyBzc2l6ZV90IGZpcm13YXJlX2xvYWRpbmdfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKKwlpbnQgcHJldl9sb2FkaW5nID0gZndfcHJpdi0+bG9hZGluZzsKKworCWZ3X3ByaXYtPmxvYWRpbmcgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCQorCXN3aXRjaChmd19wcml2LT5sb2FkaW5nKXsKKwljYXNlIC0xOgorCQkvKiBhYm9ydCBsb2FkIGFuIHBhbmljICovCisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogc2V0dXAgbG9hZCAqLworCQlicmVhazsKKwljYXNlIDA6CisJCWlmKHByZXZfbG9hZGluZz09MSl7CisJCQkvKiBmaW5pc2ggbG9hZCBhbmQgZ2V0IHRoZSBkZXZpY2UgYmFjayB0byB3b3JraW5nCisJCQkgKiBzdGF0ZSAqLworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihsb2FkaW5nLCAwNjQ0LAorCQkJIGZpcm13YXJlX2xvYWRpbmdfc2hvdywgZmlybXdhcmVfbG9hZGluZ19zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGZpcm13YXJlX2RhdGFfcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IHRvX2NsYXNzX2Rldihrb2JqKTsKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisKKwkvKiByZWFkIGZyb20gdGhlIGRldmljZXMgZmlybXdhcmUgbWVtb3J5ICovCisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9kYXRhX3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IHRvX2NsYXNzX2Rldihrb2JqKTsKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisKKwkvKiB3cml0ZSB0byB0aGUgZGV2aWNlcyBmaXJtd2FyZSBtZW1vcnkgKi8KKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBmaXJtd2FyZV9hdHRyX2RhdGEgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiZGF0YSIsIC5tb2RlID0gMDY0NH0sCisJLnNpemUgPSAwLAorCS5yZWFkID0gZmlybXdhcmVfZGF0YV9yZWFkLAorCS53cml0ZSA9IGZpcm13YXJlX2RhdGFfd3JpdGUsCit9Oworc3RhdGljIGludCBmd19zZXR1cF9jbGFzc19kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAorCQkJCSBjb25zdCBjaGFyICpmd19uYW1lLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmlybXdhcmVfcHJpdiksCisJCQkJCQlHRlBfS0VSTkVMKTsKKworCWlmKCFmd19wcml2KXsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldChmd19wcml2LCAwLCBzaXplb2YoKmZ3X3ByaXYpKTsKKwltZW1zZXQoY2xhc3NfZGV2LCAwLCBzaXplb2YoKmNsYXNzX2RldikpOworCisJc3RybmNweShmd19wcml2LT5md19pZCwgZndfbmFtZSwgRklSTVdBUkVfTkFNRV9NQVgpOworCWZ3X3ByaXYtPmZ3X2lkW0ZJUk1XQVJFX05BTUVfTUFYLTFdID0gJ1wwJzsKKworCXN0cm5jcHkoY2xhc3NfZGV2LT5jbGFzc19pZCwgZGV2aWNlLT5idXNfaWQsIEJVU19JRF9TSVpFKTsKKwljbGFzc19kZXYtPmNsYXNzX2lkW0JVU19JRF9TSVpFLTFdID0gJ1wwJzsKKwljbGFzc19kZXYtPmRldiA9IGRldmljZTsKKworCWNsYXNzX2Rldi0+Y2xhc3MgPSAmZmlybXdhcmVfY2xhc3MsCisJY2xhc3Nfc2V0X2RldmRhdGEoY2xhc3NfZGV2LCBmd19wcml2KTsKKwlyZXR2YWwgPSBjbGFzc19kZXZpY2VfcmVnaXN0ZXIoY2xhc3NfZGV2KTsKKwlpZiAocmV0dmFsKXsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2xhc3NfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3JfZnJlZV9md19wcml2OworCX0KKworCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmY2xhc3NfZGV2LT5rb2JqLCAmZmlybXdhcmVfYXR0cl9kYXRhKTsKKwlpZiAocmV0dmFsKXsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyb3JfdW5yZWdfY2xhc3NfZGV2OworCX0KKworCXJldHZhbCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGFzc19kZXYsCisJCQkJCSAgJmNsYXNzX2RldmljZV9hdHRyX2xvYWRpbmcpOworCWlmIChyZXR2YWwpeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUgZmFpbGVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJZ290byBlcnJvcl9yZW1vdmVfZGF0YTsKKwl9CisKKwlnb3RvIG91dDsKKwkKK2Vycm9yX3JlbW92ZV9kYXRhOgorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY2xhc3NfZGV2LT5rb2JqLCAmZmlybXdhcmVfYXR0cl9kYXRhKTsKK2Vycm9yX3VucmVnX2NsYXNzX2RldjoKKwljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihjbGFzc19kZXYpOworZXJyb3JfZnJlZV9md19wcml2OgorCWtmcmVlKGZ3X3ByaXYpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CitzdGF0aWMgdm9pZCBmd19yZW1vdmVfY2xhc3NfZGV2aWNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldikKK3sKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbG9hZGluZyk7CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZjbGFzc19kZXYtPmtvYmosICZmaXJtd2FyZV9hdHRyX2RhdGEpOworCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKGNsYXNzX2Rldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIG15X2RldmljZSA9IHsKKwkubmFtZSAgICAgID0gIlNhbXBsZSBEZXZpY2UiLAorCS5idXNfaWQgICAgPSAibXlfZGV2MCIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBmaXJtd2FyZV9zYW1wbGVfaW5pdCh2b2lkKQoreworCWludCBlcnJvcjsKKworCWRldmljZV9pbml0aWFsaXplKCZteV9kZXZpY2UpOworCWNsYXNzX2RldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGFzc19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZighY2xhc3NfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gZndfc2V0dXBfY2xhc3NfZGV2aWNlKGNsYXNzX2RldiwgIm15X2Zpcm13YXJlX2ltYWdlIiwKKwkJCQkgICAgICAmbXlfZGV2aWNlKTsKKwlpZihlcnJvcil7CisJCWtmcmVlKGNsYXNzX2Rldik7CisJCXJldHVybiBlcnJvcjsKKwl9CisgICAgICAgIHJldHVybiAwOworCit9CitzdGF0aWMgdm9pZCBfX2V4aXQgZmlybXdhcmVfc2FtcGxlX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7CisJZndfcmVtb3ZlX2NsYXNzX2RldmljZShjbGFzc19kZXYpOworCWtmcmVlKGZ3X3ByaXYpOworCWtmcmVlKGNsYXNzX2Rldik7Cit9Cittb2R1bGVfaW5pdChmaXJtd2FyZV9zYW1wbGVfaW5pdCk7Cittb2R1bGVfZXhpdChmaXJtd2FyZV9zYW1wbGVfZXhpdCk7CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvaG90cGx1Zy1zY3JpcHQgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTAxMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0CkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCisjIFNpbXBsZSBob3RwbHVnIHNjcmlwdCBzYW1wbGU6CisjIAorIyBCb3RoICRERVZQQVRIIGFuZCAkRklSTVdBUkUgYXJlIGFscmVhZHkgcHJvdmlkZWQgaW4gdGhlIGVudmlyb25tZW50LgorCitIT1RQTFVHX0ZXX0RJUj0vdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlLworCitlY2hvIDEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKK2NhdCAkSE9UUExVR19GV19ESVIvJEZJUk1XQVJFID4gL3N5cy8kREVWUEFUSC9kYXRhCitlY2hvIDAgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKKworIyBUbyBjYW5jZWwgdGhlIGxvYWQgaW4gY2FzZSBvZiBlcnJvcjoKKyMKKyMJZWNobyAtMSA+IC9zeXMvJERFVlBBVEgvbG9hZGluZworIwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbG9wcHkudHh0IGIvRG9jdW1lbnRhdGlvbi9mbG9wcHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYjEwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Zsb3BweS50eHQKQEAgLTAsMCArMSwyNDUgQEAKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGZsb3BweSBkcml2ZXIuCisKK0ZBUSBsaXN0OgorPT09PT09PT09CisKKyBBIEZBUSBsaXN0IG1heSBiZSBmb3VuZCBpbiB0aGUgZmR1dGlscyBwYWNrYWdlIChzZWUgYmVsb3cpLCBhbmQgYWxzbworYXQgaHR0cDovL2ZkdXRpbHMubGludXgubHUvRkFRLmh0bWwKKworCitMSUxPIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoVGhpbmtwYWQgdXNlcnMsIHJlYWQgdGhpcykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgVGhlIGZsb3BweSBkcml2ZXIgaXMgY29uZmlndXJlZCB1c2luZyB0aGUgJ2Zsb3BweT0nIG9wdGlvbiBpbgorbGlsby4gVGhpcyBvcHRpb24gY2FuIGJlIHR5cGVkIGF0IHRoZSBib290IHByb21wdCwgb3IgZW50ZXJlZCBpbiB0aGUKK2xpbG8gY29uZmlndXJhdGlvbiBmaWxlLgorCisgRXhhbXBsZTogSWYgeW91ciBrZXJuZWwgaXMgY2FsbGVkIGxpbnV4LTIuNi45LCB0eXBlIHRoZSBmb2xsb3dpbmcgbGluZQorYXQgdGhlIGxpbG8gYm9vdCBwcm9tcHQgKGlmIHlvdSBoYXZlIGEgdGhpbmtwYWQpOgorCisgbGludXgtMi42LjkgZmxvcHB5PXRoaW5rcGFkCisKK1lvdSBtYXkgYWxzbyBlbnRlciB0aGUgZm9sbG93aW5nIGxpbmUgaW4gL2V0Yy9saWxvLmNvbmYsIGluIHRoZSBkZXNjcmlwdGlvbgorb2YgbGludXgtMi42Ljk6CisKKyBhcHBlbmQgPSAiZmxvcHB5PXRoaW5rcGFkIgorCisgU2V2ZXJhbCBmbG9wcHkgcmVsYXRlZCBvcHRpb25zIG1heSBiZSBnaXZlbiwgZXhhbXBsZToKKworIGxpbnV4LTIuNi45IGZsb3BweT1kYXJpbmcgZmxvcHB5PXR3b19mZGMKKyBhcHBlbmQgPSAiZmxvcHB5PWRhcmluZyBmbG9wcHk9dHdvX2ZkYyIKKworIElmIHlvdSBnaXZlIG9wdGlvbnMgYm90aCBpbiB0aGUgbGlsbyBjb25maWcgZmlsZSBhbmQgb24gdGhlIGJvb3QKK3Byb21wdCwgdGhlIG9wdGlvbiBzdHJpbmdzIG9mIGJvdGggcGxhY2VzIGFyZSBjb25jYXRlbmF0ZWQsIHRoZSBib290Citwcm9tcHQgb3B0aW9ucyBjb21pbmcgbGFzdC4gVGhhdCdzIHdoeSB0aGVyZSBhcmUgYWxzbyBvcHRpb25zIHRvCityZXN0b3JlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorCisKK01vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIElmIHlvdSB1c2UgdGhlIGZsb3BweSBkcml2ZXIgYXMgYSBtb2R1bGUsIHVzZSB0aGUgZm9sbG93aW5nIHN5bnRheDoKK21vZHByb2JlIGZsb3BweSA8b3B0aW9ucz4KKworRXhhbXBsZToKKyBtb2Rwcm9iZSBmbG9wcHkgb21uaWJvb2sgbWVzc2FnZXMKKworIElmIHlvdSBuZWVkIGNlcnRhaW4gb3B0aW9ucyBlbmFibGVkIGV2ZXJ5IHRpbWUgeW91IGxvYWQgdGhlIGZsb3BweSBkcml2ZXIsCit5b3UgY2FuIHB1dDoKKworIG9wdGlvbnMgZmxvcHB5IG9tbmlib29rIG1lc3NhZ2VzCisKK2luIC9ldGMvbW9kcHJvYmUuY29uZi4KKworCisgVGhlIGZsb3BweSBkcml2ZXIgcmVsYXRlZCBvcHRpb25zIGFyZToKKworIGZsb3BweT1hc3VzX3BjaQorCVNldHMgdGhlIGJpdCBtYXNrIHRvIGFsbG93IG9ubHkgdW5pdHMgMCBhbmQgMS4gKGRlZmF1bHQpCisKKyBmbG9wcHk9ZGFyaW5nCisJVGVsbHMgdGhlIGZsb3BweSBkcml2ZXIgdGhhdCB5b3UgaGF2ZSBhIHdlbGwgYmVoYXZlZCBmbG9wcHkgY29udHJvbGxlci4KKwlUaGlzIGFsbG93cyBtb3JlIGVmZmljaWVudCBhbmQgc21vb3RoZXIgb3BlcmF0aW9uLCBidXQgbWF5IGZhaWwgb24KKwljZXJ0YWluIGNvbnRyb2xsZXJzLiBUaGlzIG1heSBzcGVlZCB1cCBjZXJ0YWluIG9wZXJhdGlvbnMuCisKKyBmbG9wcHk9MCxkYXJpbmcKKwlUZWxscyB0aGUgZmxvcHB5IGRyaXZlciB0aGF0IHlvdXIgZmxvcHB5IGNvbnRyb2xsZXIgc2hvdWxkIGJlIHVzZWQKKwl3aXRoIGNhdXRpb24uCisKKyBmbG9wcHk9b25lX2ZkYworCVRlbGxzIHRoZSBmbG9wcHkgZHJpdmVyIHRoYXQgeW91IGhhdmUgb25seSBvbmUgZmxvcHB5IGNvbnRyb2xsZXIuCisJKGRlZmF1bHQpCisKKyBmbG9wcHk9dHdvX2ZkYworIGZsb3BweT08YWRkcmVzcz4sdHdvX2ZkYworCVRlbGxzIHRoZSBmbG9wcHkgZHJpdmVyIHRoYXQgeW91IGhhdmUgdHdvIGZsb3BweSBjb250cm9sbGVycy4KKwlUaGUgc2Vjb25kIGZsb3BweSBjb250cm9sbGVyIGlzIGFzc3VtZWQgdG8gYmUgYXQgPGFkZHJlc3M+LgorCVRoaXMgb3B0aW9uIGlzIG5vdCBuZWVkZWQgaWYgdGhlIHNlY29uZCBjb250cm9sbGVyIGlzIGF0IGFkZHJlc3MKKwkweDM3MCwgYW5kIGlmIHlvdSB1c2UgdGhlICdjbW9zJyBvcHRpb24uCisKKyBmbG9wcHk9dGhpbmtwYWQKKwlUZWxscyB0aGUgZmxvcHB5IGRyaXZlciB0aGF0IHlvdSBoYXZlIGEgVGhpbmtwYWQuIFRoaW5rcGFkcyB1c2UgYW4KKwlpbnZlcnRlZCBjb252ZW50aW9uIGZvciB0aGUgZGlzayBjaGFuZ2UgbGluZS4KKworIGZsb3BweT0wLHRoaW5rcGFkCisJVGVsbHMgdGhlIGZsb3BweSBkcml2ZXIgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBhIFRoaW5rcGFkLgorCisgZmxvcHB5PW9tbmlib29rCisgZmxvcHB5PW5vZG1hCisJVGVsbHMgdGhlIGZsb3BweSBkcml2ZXIgbm90IHRvIHVzZSBEbWEgZm9yIGRhdGEgdHJhbnNmZXJzLgorCVRoaXMgaXMgbmVlZGVkIG9uIEhQIE9tbmlib29rcywgd2hpY2ggZG9uJ3QgaGF2ZSBhIHdvcmthYmxlCisJRE1BIGNoYW5uZWwgZm9yIHRoZSBmbG9wcHkgZHJpdmVyLiBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWZ1bAorCWlmIHlvdSBmcmVxdWVudGx5IGdldCAiVW5hYmxlIHRvIGFsbG9jYXRlIERNQSBtZW1vcnkiIG1lc3NhZ2VzLgorCUluZGVlZCwgZG1hIG1lbW9yeSBuZWVkcyB0byBiZSBjb250aW51b3VzIGluIHBoeXNpY2FsIG1lbW9yeSwKKwlhbmQgaXMgdGh1cyBoYXJkZXIgdG8gZmluZCwgd2hlcmVhcyBub24tZG1hIGJ1ZmZlcnMgbWF5IGJlCisJYWxsb2NhdGVkIGluIHZpcnR1YWwgbWVtb3J5LiBIb3dldmVyLCBJIGFkdmlzZSBhZ2FpbnN0IHRoaXMgaWYKKwl5b3UgaGF2ZSBhbiBGREMgd2l0aG91dCBhIEZJRk8gKDgyNzJBIG9yIDgyMDcyKS4gODIwNzJBIGFuZAorCWxhdGVyIGFyZSBPSy4gWW91IGFsc28gbmVlZCBhdCBsZWFzdCBhIDQ4NiB0byB1c2Ugbm9kbWEuCisJSWYgeW91IHVzZSBub2RtYSBtb2RlLCBJIHN1Z2dlc3QgeW91IGFsc28gc2V0IHRoZSBGSUZPCisJdGhyZXNob2xkIHRvIDEwIG9yIGxvd2VyLCBpbiBvcmRlciB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGRhdGEKKwl0cmFuc2ZlciBpbnRlcnJ1cHRzLgorCisJSWYgeW91IGhhdmUgYSBGSUZPLWFibGUgRkRDLCB0aGUgZmxvcHB5IGRyaXZlciBhdXRvbWF0aWNhbGx5CisJZmFsbHMgYmFjayBvbiBub24gRE1BIG1vZGUgaWYgbm8gRE1BLWFibGUgbWVtb3J5IGNhbiBiZSBmb3VuZC4KKwlJZiB5b3Ugd2FudCB0byBhdm9pZCB0aGlzLCBleHBsaWNpdGx5IGFzayBmb3IgJ3llc2RtYScuCisKKyBmbG9wcHk9eWVzZG1hCisJVGVsbHMgdGhlIGZsb3BweSBkcml2ZXIgdGhhdCBhIHdvcmthYmxlIERNQSBjaGFubmVsIGlzIGF2YWlsYWJsZS4KKwkoZGVmYXVsdCkKKworIGZsb3BweT1ub2ZpZm8KKwlEaXNhYmxlcyB0aGUgRklGTyBlbnRpcmVseS4gVGhpcyBpcyBuZWVkZWQgaWYgeW91IGdldCAiQnVzCisJbWFzdGVyIGFyYml0cmF0aW9uIGVycm9yIiBtZXNzYWdlcyBmcm9tIHlvdXIgRXRoZXJuZXQgY2FyZCAob3IKKwlmcm9tIG90aGVyIGRldmljZXMpIHdoaWxlIGFjY2Vzc2luZyB0aGUgZmxvcHB5LgorCisgZmxvcHB5PXVzZWZpZm8KKwlFbmFibGVzIHRoZSBGSUZPLiAoZGVmYXVsdCkKKworIGZsb3BweT08dGhyZXNob2xkPixmaWZvX2RlcHRoCisJU2V0cyB0aGUgRklGTyB0aHJlc2hvbGQuIFRoaXMgaXMgbW9zdGx5IHJlbGV2YW50IGluIERNQQorCW1vZGUuIElmIHRoaXMgaXMgaGlnaGVyLCB0aGUgZmxvcHB5IGRyaXZlciB0b2xlcmF0ZXMgbW9yZQorCWludGVycnVwdCBsYXRlbmN5LCBidXQgaXQgdHJpZ2dlcnMgbW9yZSBpbnRlcnJ1cHRzIChpLmUuIGl0CisJaW1wb3NlcyBtb3JlIGxvYWQgb24gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSkuIElmIHRoaXMgaXMKKwlsb3dlciwgdGhlIGludGVycnVwdCBsYXRlbmN5IHNob3VsZCBiZSBsb3dlciB0b28gKGZhc3RlcgorCXByb2Nlc3NvcikuIFRoZSBiZW5lZml0IG9mIGEgbG93ZXIgdGhyZXNob2xkIGlzIGxlc3MKKwlpbnRlcnJ1cHRzLgorCisJVG8gdHVuZSB0aGUgZmlmbyB0aHJlc2hvbGQsIHN3aXRjaCBvbiBvdmVyL3VuZGVycnVuIG1lc3NhZ2VzCisJdXNpbmcgJ2Zsb3BweWNvbnRyb2wgLS1tZXNzYWdlcycuIFRoZW4gYWNjZXNzIGEgZmxvcHB5CisJZGlzay4gSWYgeW91IGdldCBhIGh1Z2UgYW1vdW50IG9mICJPdmVyL1VuZGVycnVuIC0gcmV0cnlpbmciCisJbWVzc2FnZXMsIHRoZW4gdGhlIGZpZm8gdGhyZXNob2xkIGlzIHRvbyBsb3cuIFRyeSB3aXRoIGEKKwloaWdoZXIgdmFsdWUsIHVudGlsIHlvdSBvbmx5IGdldCBhbiBvY2Nhc2lvbmFsIE92ZXIvVW5kZXJydW4uCisJSXQgaXMgYSBnb29kIGlkZWEgdG8gY29tcGlsZSB0aGUgZmxvcHB5IGRyaXZlciBhcyBhIG1vZHVsZQorCXdoZW4gZG9pbmcgdGhpcyB0dW5pbmcuIEluZGVlZCwgaXQgYWxsb3dzIHRvIHRyeSBkaWZmZXJlbnQKKwlmaWZvIHZhbHVlcyB3aXRob3V0IHJlYm9vdGluZyB0aGUgbWFjaGluZSBmb3IgZWFjaCB0ZXN0LiBOb3RlCisJdGhhdCB5b3UgbmVlZCB0byBkbyAnZmxvcHB5Y29udHJvbCAtLW1lc3NhZ2VzJyBldmVyeSB0aW1lIHlvdQorCXJlLWluc2VydCB0aGUgbW9kdWxlLgorCisJVXN1YWxseSwgdHVuaW5nIHRoZSBmaWZvIHRocmVzaG9sZCBzaG91bGQgbm90IGJlIG5lZWRlZCwgYXMKKwl0aGUgZGVmYXVsdCAoMHhhKSBpcyByZWFzb25hYmxlLgorCisgZmxvcHB5PTxkcml2ZT4sPHR5cGU+LGNtb3MKKwlTZXRzIHRoZSBDTU9TIHR5cGUgb2YgPGRyaXZlPiB0byA8dHlwZT4uIFRoaXMgaXMgbWFuZGF0b3J5IGlmCisJeW91IGhhdmUgbW9yZSB0aGFuIHR3byBmbG9wcHkgZHJpdmVzIChvbmx5IHR3byBjYW4gYmUKKwlkZXNjcmliZWQgaW4gdGhlIHBoeXNpY2FsIENNT1MpLCBvciBpZiB5b3VyIEJJT1MgdXNlcworCW5vbi1zdGFuZGFyZCBDTU9TIHR5cGVzLiBUaGUgQ01PUyB0eXBlcyBhcmU6CisKKwkJMCAtIFVzZSB0aGUgdmFsdWUgb2YgdGhlIHBoeXNpY2FsIENNT1MKKwkJMSAtIDUgMS80IERECisJCTIgLSA1IDEvNCBIRAorCQkzIC0gMyAxLzIgREQKKwkJNCAtIDMgMS8yIEhECisJCTUgLSAzIDEvMiBFRAorCQk2IC0gMyAxLzIgRUQKKwkgICAgICAgMTYgLSB1bmtub3duIG9yIG5vdCBpbnN0YWxsZWQKKworCShOb3RlOiB0aGVyZSBhcmUgdHdvIHZhbGlkIHR5cGVzIGZvciBFRCBkcml2ZXMuIFRoaXMgaXMgYmVjYXVzZSA1IHdhcworCWluaXRpYWxseSBjaG9zZW4gdG8gcmVwcmVzZW50IGZsb3BweSAqdGFwZXMqLCBhbmQgNiBmb3IgRUQgZHJpdmVzLgorCUFNSSBpZ25vcmVkIHRoaXMsIGFuZCB1c2VkIDUgZm9yIEVEIGRyaXZlcy4gVGhhdCdzIHdoeSB0aGUgZmxvcHB5CisJZHJpdmVyIGhhbmRsZXMgYm90aC4pCisKKyBmbG9wcHk9dW5leHBlY3RlZF9pbnRlcnJ1cHRzCisJUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiBhbiB1bmV4cGVjdGVkIGludGVycnVwdCBpcyByZWNlaXZlZC4KKwkoZGVmYXVsdCkKKworIGZsb3BweT1ub191bmV4cGVjdGVkX2ludGVycnVwdHMKKyBmbG9wcHk9TDQwU1gKKwlEb24ndCBwcmludCBhIG1lc3NhZ2Ugd2hlbiBhbiB1bmV4cGVjdGVkIGludGVycnVwdCBpcyByZWNlaXZlZC4gVGhpcworCWlzIG5lZWRlZCBvbiBJQk0gTDQwU1ggbGFwdG9wcyBpbiBjZXJ0YWluIHZpZGVvIG1vZGVzLiAoVGhlcmUgc2VlbXMKKwl0byBiZSBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHZpZGVvIGFuZCBmbG9wcHkuIFRoZSB1bmV4cGVjdGVkCisJaW50ZXJydXB0cyBhZmZlY3Qgb25seSBwZXJmb3JtYW5jZSwgYW5kIGNhbiBiZSBzYWZlbHkgaWdub3JlZC4pCisKKyBmbG9wcHk9YnJva2VuX2RjbAorCURvbid0IHVzZSB0aGUgZGlzayBjaGFuZ2UgbGluZSwgYnV0IGFzc3VtZSB0aGF0IHRoZSBkaXNrIHdhcworCWNoYW5nZWQgd2hlbmV2ZXIgdGhlIGRldmljZSBub2RlIGlzIHJlb3BlbmVkLiBOZWVkZWQgb24gc29tZQorCWJveGVzIHdoZXJlIHRoZSBkaXNrIGNoYW5nZSBsaW5lIGlzIGJyb2tlbiBvciB1bnN1cHBvcnRlZC4KKwlUaGlzIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIHN0b3BnYXAgbWVhc3VyZSwgaW5kZWVkIGl0IG1ha2VzCisJZmxvcHB5IG9wZXJhdGlvbiBsZXNzIGVmZmljaWVudCBkdWUgdG8gdW5uZWVkZWQgY2FjaGUKKwlmbHVzaGluZ3MsIGFuZCBzbGlnaHRseSBtb3JlIHVucmVsaWFibGUuIFBsZWFzZSB2ZXJpZnkgeW91cgorCWNhYmxlLCBjb25uZWN0aW9uIGFuZCBqdW1wZXIgc2V0dGluZ3MgaWYgeW91IGhhdmUgYW55IERDTAorCXByb2JsZW1zLiBIb3dldmVyLCBzb21lIG9sZGVyIGRyaXZlcywgYW5kIGFsc28gc29tZSBsYXB0b3BzCisJYXJlIGtub3duIG5vdCB0byBoYXZlIGEgRENMLgorCisgZmxvcHB5PWRlYnVnCisJUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzLgorCisgZmxvcHB5PW1lc3NhZ2VzCisJUHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyBmb3Igc29tZSBvcGVyYXRpb25zIChkaXNrIGNoYW5nZQorCW5vdGlmaWNhdGlvbnMsIHdhcm5pbmdzIGFib3V0IG92ZXIgYW5kIHVuZGVycnVucywgYW5kIGFib3V0CisJYXV0b2RldGVjdGlvbikuCisKKyBmbG9wcHk9c2lsZW50X2RjbF9jbGVhcgorCVVzZXMgYSBsZXNzIG5vaXN5IHdheSB0byBjbGVhciB0aGUgZGlzayBjaGFuZ2UgbGluZSAod2hpY2gKKwlkb2Vzbid0IGludm9sdmUgc2Vla3MpLiBJbXBsaWVkIGJ5ICdkYXJpbmcnIG9wdGlvbi4KKworIGZsb3BweT08bnI+LGlycQorCVNldHMgdGhlIGZsb3BweSBJUlEgdG8gPG5yPiBpbnN0ZWFkIG9mIDYuCisKKyBmbG9wcHk9PG5yPixkbWEKKwlTZXRzIHRoZSBmbG9wcHkgRE1BIGNoYW5uZWwgdG8gPG5yPiBpbnN0ZWFkIG9mIDIuCisKKyBmbG9wcHk9c2xvdworCVVzZSBQUy8yIHN0ZXBwaW5nIHJhdGU6CisJICIgUFMvMiBmbG9wcGllcyBoYXZlIG11Y2ggc2xvd2VyIHN0ZXAgcmF0ZXMgdGhhbiByZWd1bGFyIGZsb3BwaWVzLgorCSAgIEl0J3MgYmVlbiByZWNvbW1lbmRlZCB0aGF0IHRha2UgYWJvdXQgMS80IG9mIHRoZSBkZWZhdWx0IHNwZWVkCisJICAgaW4gc29tZSBtb3JlIGV4dHJlbWUgY2FzZXMuIgorCisKK1N1cHBvcnRpbmcgdXRpbGl0aWVzIGFuZCBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb246Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIG9mIHRoZSBmbG9wcHkgZHJpdmVyIGNhbiBiZSBjb25maWd1cmVkIGF0CitydW50aW1lLiBVdGlsaXRpZXMgd2hpY2ggZG8gdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIGZkdXRpbHMgcGFja2FnZS4KK1RoaXMgcGFja2FnZSBhbHNvIGNvbnRhaW5zIGEgbmV3IHZlcnNpb24gb2YgbXRvb2xzIHdoaWNoIGFsbG93cyB0bworYWNjZXNzIGhpZ2ggY2FwYWNpdHkgZGlza3MgKHVwIHRvIDE5OTJLIG9uIGEgaGlnaCBkZW5zaXR5IDMgMS8yIGRpc2shKS4KK0l0IGFsc28gY29udGFpbnMgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBmbG9wcHkgZHJpdmVyLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gY2FuIGJlIGZvdW5kIGF0IGZkdXRpbHMgaG9tZXBhZ2U6CisgaHR0cDovL2ZkdXRpbHMubGludXgubHUKKworVGhlIGZkdXRpbHMtNS40IHJlbGVhc2UgY2FuIGJlIGZvdW5kIGF0OgorIGh0dHA6Ly9mZHV0aWxzLmxpbnV4Lmx1L2ZkdXRpbHMtNS40LnNyYy50YXIuZ3oKKyBodHRwOi8vd3d3LnR1eC5vcmcvcHViL2tuYWZmL2ZkdXRpbHMvZmR1dGlscy01LjQuc3JjLnRhci5negorIGZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvdXRpbHMvZGlzay1tYW5hZ2VtZW50L2ZkdXRpbHMtNS40LnNyYy50YXIuZ3oKKworUmVwb3J0aW5nIHByb2JsZW1zIGFib3V0IHRoZSBmbG9wcHkgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIElmIHlvdSBoYXZlIGEgcXVlc3Rpb24gb3IgYSBidWcgcmVwb3J0IGFib3V0IHRoZSBmbG9wcHkgZHJpdmVyLCBtYWlsCittZSBhdCBBbGFpbi5LbmFmZkBwb2JveGVzLmNvbSAuIElmIHlvdSBwb3N0IHRvIFVzZW5ldCwgcHJlZmVyYWJseSB1c2UKK2NvbXAub3MubGludXguaGFyZHdhcmUuIEFzIHRoZSB2b2x1bWUgaW4gdGhlc2UgZ3JvdXBzIGlzIHJhdGhlciBoaWdoLAorYmUgc3VyZSB0byBpbmNsdWRlIHRoZSB3b3JkICJmbG9wcHkiIChvciAiRkxPUFBZIikgaW4gdGhlIHN1YmplY3QKK2xpbmUuICBJZiB0aGUgcmVwb3J0ZWQgcHJvYmxlbSBoYXBwZW5zIHdoZW4gbW91bnRpbmcgZmxvcHB5IGRpc2tzLCBiZQorc3VyZSB0byBtZW50aW9uIGFsc28gdGhlIHR5cGUgb2YgdGhlIGZpbGVzeXN0ZW0gaW4gdGhlIHN1YmplY3QgbGluZS4KKworIEJlIHN1cmUgdG8gcmVhZCB0aGUgRkFRIGJlZm9yZSBtYWlsaW5nL3Bvc3RpbmcgYW55IGJ1ZyByZXBvcnRzIQorCisgQWxhaW4KKworQ2hhbmdlbG9nCis9PT09PT09PT0KKworMTAtMzAtMjAwNCA6CUNsZWFudXAsIHVwZGF0aW5nLCBhZGQgcmVmZXJlbmNlIHRvIG1vZHVsZSBjb25maWd1cmF0aW9uLgorCQlKYW1lcyBOZWxzb24gPGphbWVzNDc2NUBnbWFpbC5jb20+CisKKzYtMy0yMDAwIDoJT3JpZ2luYWwgRG9jdW1lbnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnRhcGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mdGFwZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4YmIzMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnRhcGUudHh0CkBAIC0wLDAgKzEsMzA3IEBACitJbnRybworPT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyBzb21lIGlzc3VlcyBpbnZvbHZlZCB3aGVuIHVzaW5nIHRoZSAiZnRhcGUiCitmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyIHRoYXQgY29tZXMgd2l0aCB0aGUgTGludXgga2VybmVsLgorCitmdGFwZSBoYXMgYSBob21lIHBhZ2UgYXQKKworaHR0cDovL2Z0YXBlLmRvdC1oZWluZS5kZS8KKword2hpY2ggY29udGFpbnMgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBmdGFwZS4gUGxlYXNlIGNyb3NzIGNoZWNrCit0aGlzIFdXVyBhZGRyZXNzIGFnYWluc3QgdGhlIGFkZHJlc3MgZ2l2ZW4gKGlmIGFueSkgaW4gdGhlIE1BSU5UQUlORVJTCitmaWxlIGxvY2F0ZWQgaW4gdGhlIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UKK3RyZWUuCisKK05PVEU6IFRoaXMgaXMgYW4gdW5tYWludGFpbmVkIHNldCBvZiBkcml2ZXJzLCBhbmQgaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yay4KK0lmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB0YWtpbmcgb3ZlciBtYWludGVuYW5jZSwgY29udGFjdCBDbGF1cy1KdXN0dXMgSGVpbmUKKzxjaEBkb3QtaGVpbmUuZGU+LCB0aGUgZm9ybWVyIG1haW50YWluZXIuCisKK0NvbnRlbnRzCis9PT09PT09PQorCitBIG1pbnVzIDE6IEZ0YXBlIGRvY3VtZW50YXRpb24KKworQS4gQ2hhbmdlcworICAgMS4gR29hbAorICAgMi4gSS9PIEJsb2NrIFNpemUKKyAgIDMuIFdyaXRlIEFjY2VzcyB3aGVuIG5vdCBhdCBFT0QgKEVuZCBPZiBEYXRhKSBvciBCT1QgKEJlZ2luIE9mIFRhcGUpCisgICA0LiBGb3JtYXR0aW5nCisgICA1LiBJbnRlcmNoYW5naW5nIGNhcnRyaWRnZXMgd2l0aCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcworCitCLiBEZWJ1Z2dpbmcgT3V0cHV0CisgICAxLiBJbnRyb2R1Y3Rpb24KKyAgIDIuIFR1bmluZyB0aGUgZGVidWdnaW5nIG91dHB1dAorCitDLiBCb290IGFuZCBsb2FkIHRpbWUgY29uZmlndXJhdGlvbgorICAgMS4gU2V0dGluZyBib290IHRpbWUgcGFyYW1ldGVycworICAgMi4gTW9kdWxlIGxvYWQgdGltZSBwYXJhbWV0ZXJzCisgICAzLiBGdGFwZSBib290LSBhbmQgbG9hZCB0aW1lIG9wdGlvbnMKKyAgIDQuIEV4YW1wbGUga2VybmVsIHBhcmFtZXRlciBzZXR0aW5nCisgICA1LiBFeGFtcGxlIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGluZworCitELiBTdXBwb3J0IGFuZCBjb250YWN0cworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0EgbWludXMgMS4gRnRhcGUgZG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VubHVja2lseSwgdGhlIGZ0YXBlLUhPV1RPIGlzIG91dCBvZiBkYXRlLiBUaGlzIHJlYWxseSBuZWVkcyB0byBiZQorY2hhbmdlZC4gVXAgdG8gZGF0ZSBkb2N1bWVudGF0aW9uIGFzIHdlbGwgYXMgcmVjZW50IGRldmVsb3BtZW50Cit2ZXJzaW9ucyBvZiBmdGFwZSBhbmQgdXNlZnVsIGxpbmtzIHRvIHJlbGF0ZWQgdG9waWNzIGNhbiBiZSBmb3VuZCBhdAordGhlIGZ0YXBlIGhvbWUgcGFnZSBhdAorCitodHRwOi8vZnRhcGUuZG90LWhlaW5lLmRlLworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0EuIENoYW5nZXMKKz09PT09PT09PT0KKworMS4gR29hbAorICAgfn5+fgorICAgVGhlIGdvYWwgb2YgYWxsIHRoYXQgaW5jb21wYXRpYmlsaXRpZXMgd2FzIHRvIGdpdmUgZnRhcGUgYW4gaW50ZXJmYWNlCisgICB0aGF0IHJlc2VtYmxlcyB0aGUgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IFNDU0kgdGFwZSBkcml2ZXMgYXMgY2xvc2UKKyAgIGFzIHBvc3NpYmxlLiBUaHVzIGFueSBVbml4IGJhY2t1cCBwcm9ncmFtIHRoYXQgaXMga25vd24gdG8gd29yaworICAgd2l0aCBTQ1NJIHRhcGUgZHJpdmVzIHNob3VsZCBhbHNvIHdvcmsuCisKKyAgIFRoZSBjb25jZXB0IG9mIGEgZml4ZWQgYmxvY2sgc2l6ZSBmb3IgcmVhZC93cml0ZSB0cmFuc2ZlcnMgaXMKKyAgIHJhdGhlciB1bnJlbGF0ZWQgdG8gdGhpcyBTQ1NJIHRhcGUgY29tcGF0aWJpbGl0eSBhdCB0aGUgZmlsZSBzeXN0ZW0KKyAgIGludGVyZmFjZSBsZXZlbC4gSXQgZGV2ZWxvcGVkIG91dCBvZiBhIGZlYXR1cmUgb2YgemZ0YXBlLCBhCisgICBibG9jayB3aXNlIHVzZXIgdHJhbnNwYXJlbnQgb24tdGhlLWZseSBjb21wcmVzc2lvbi4gVGhhdCBjb21wcmVzc2lvbgorICAgc3VwcG9ydCB3aWxsIG5vdCBiZSBkcm9wcGVkIGluIGZ1dHVyZSByZWxlYXNlcyBmb3IgY29tcGF0aWJpbGl0eQorICAgcmVhc29ucyB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIG9mIHpmdGFwZS4KKworMi4gSS9PIEJsb2NrIFNpemUKKyAgIH5+fn5+fn5+fn5+fn5+CisgICBUaGUgYmxvY2sgc2l6ZSBkZWZhdWx0cyB0byAxMGsgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBvZgorICAgR05VIHRhci4KKworICAgVGhlIGJsb2NrIHNpemUgY2FuIGJlIHR1bmVkIGVpdGhlciBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3IKKyAgIGF0IHJ1bnRpbWUgd2l0aCB0aGUgTVRJT0NUT1AgaW9jdGwgdXNpbmcgdGhlIE1UU0VUQkxLIG9wZXJhdGlvbgorICAgKGkuZS4gZG8gIm10IC1mIC9kZXYvcWZ0MCIgc2V0YmxrICNCTEtTWikuIEEgYmxvY2sgc2l6ZSBvZiAwCisgICBzd2l0Y2hlcyB0byB2YXJpYWJsZSBibG9jayBzaXplIG1vZGUgaS5lLiAibXQgc2V0YmxrIDAiIHN3aXRjaGVzCisgICBvZmYgdGhlIGJsb2NrIHNpemUgcmVzdHJpY3Rpb24uIEhvd2V2ZXIsIHRoaXMgZGlzYWJsZXMgemZ0YXBlJ3MKKyAgIGJ1aWx0IGluIG9uLXRoZS1mbHkgY29tcHJlc3Npb24gd2hpY2ggZG9lc24ndCB3b3JrIHdpdGggdmFyaWFibGUKKyAgIGJsb2NrIHNpemUgbW9kZS4KKworICAgVGhlIEJMS1NaIHBhcmFtZXRlciBtdXN0IGJlIGdpdmVuIGFzIGEgYnl0ZSBjb3VudCBhbmQgbXVzdCBiZSBhCisgICBtdWx0aXBsZSBvZiAzMmsgb3IgMCwgaS5lLiB1c2UgIm10IHNldGJsayAzMjc2OCIgdG8gc3dpdGNoIHRvIGEKKyAgIGJsb2NrIHNpemUgb2YgMzJrLgorCisgICBUaGUgdHlwaWNhbCBzeW1wdG9tIG9mIGEgYmxvY2sgc2l6ZSBtaXNtYXRjaCBpcyBhbiAiaW52YWxpZAorICAgYXJndW1lbnQiIGVycm9yIG1lc3NhZ2UuCisKKzMuIFdyaXRlIEFjY2VzcyB3aGVuIG5vdCBhdCBFT0QgKEVuZCBPZiBEYXRhKSBvciBCT1QgKEJlZ2luIE9mIFRhcGUpCisgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICAgemZ0YXBlICh0aGUgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlIG9mIGZ0YXBlLTMueCkgZGVuaWVzIHdyaXRlIGFjY2VzcworICAgdG8gdGhlIHRhcGUgY2FydHJpZGdlIHdoZW4gaXQgaXNuJ3QgcG9zaXRpb25lZCBlaXRoZXIgYXQgQk9UIG9yCisgICBFT0QuCisKKzQuIEZvcm1hdHRpbmcKKyAgIH5+fn5+fn5+fn4KKyAgIGZ0YXBlIERPRVMgc3VwcG9ydCBmb3JtYXR0aW5nIG9mIGZsb3BweSB0YXBlIGNhcnRyaWRnZXMuIFlvdSBuZWVkIHRoZQorICAgYGZ0Zm9ybWF0JyBwcm9ncmFtIHRoYXQgaXMgc2hpcHBlZCB3aXRoIHRoZSBtb2R1bGVzIHZlcnNpb24gb2YgZnRhcGUuCisgICBQbGVhc2UgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBmdGFwZSBmcm9tCisKKyAgIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgva2VybmVsL3RhcGVzCisKKyAgIG9yIGZyb20gdGhlIGZ0YXBlIGhvbWUgcGFnZSBhdAorCisgICBodHRwOi8vZnRhcGUuZG90LWhlaW5lLmRlLworCisgICBgZnRmb3JtYXQnIGlzIGNvbnRhaW5lZCBpbiB0aGUgYC4vY29udHJpYi8nIHN1YmRpcmVjdG9yeSBvZiB0aGF0CisgICBzZXBhcmF0ZSBmdGFwZSBwYWNrYWdlLgorCis1LiBJbnRlcmNoYW5naW5nIGNhcnRyaWRnZXMgd2l0aCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcworICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICAgVGhlIGludGVybmFsIGVtdWxhdGlvbiBvZiBVbml4IHRhcGUgZGV2aWNlIGZpbGUgbWFya3MgaGFzIGNoYW5nZWQKKyAgIGNvbXBsZXRlbHkuIGZ0YXBlIG5vdyB1c2VzIHRoZSB2b2x1bWUgdGFibGUgc2VnbWVudCBhcyBzcGVjaWZpZWQKKyAgIGJ5IHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwLzExMyBzdGFuZGFyZHMgdG8gZW11bGF0ZSBmaWxlIG1hcmtzLiBBcworICAgYSBjb25zZXF1ZW5jZSB0aGVyZSBpcyBsaW1pdGVkIHN1cHBvcnQgdG8gaW50ZXJjaGFuZ2UgY2FydHJpZGdlcworICAgd2l0aCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKworICAgVG8gYmUgbW9yZSBwcmVjaXNlOiBmdGFwZSB3aWxsIGRldGVjdCB2b2x1bWVzIHdyaXR0ZW4gYnkgb3RoZXIgT1MncworICAgcHJvZ3JhbXMgYW5kIG90aGVyIE9TJ3MgcHJvZ3JhbXMgd2lsbCBkZXRlY3Qgdm9sdW1lcyB3cml0dGVuIGJ5CisgICBmdGFwZS4KKworICAgSG93ZXZlciwgaXQgaXNuJ3QgcG9zc2libGUgdG8gZXh0cmFjdCB0aGUgZGF0YSBkdW1wZWQgdG8gdGhlIHRhcGUKKyAgIGJ5IHNvbWUgTVNET1MgcHJvZ3JhbSB3aXRoIGZ0YXBlLiBUaGlzIGV4Y2VlZHMgdGhlIHNjb3BlIG9mIGEKKyAgIGtlcm5lbCBkZXZpY2UgZHJpdmVyLiBJZiB5b3UgbmVlZCBzdWNoIGZ1bmN0aW9uYWxpdHksIHRoZW4gZ28gYWhlYWQKKyAgIGFuZCB3cml0ZSBhIHVzZXIgc3BhY2UgdXRpbGl0eSB0aGF0IGlzIGFibGUgdG8gZG8gdGhhdC4gZnRhcGUgYWxyZWFkeQorICAgcHJvdmlkZXMgYWxsIGtlcm5lbCBsZXZlbCBzdXBwb3J0IG5lY2Vzc2FyeSB0byBkbyB0aGF0LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0IuIERlYnVnZ2luZyBPdXRwdXQKKyAgID09PT09PT09PT09PT09PT0KKworMS4gSW50cm9kdWN0aW9uCisgICB+fn5+fn5+fn5+fn4KKyAgIFRoZSBmdGFwZSBkcml2ZXIgY2FuIGJlIHZlcnkgbm9pc3kgaW4gdGhhdCBpcyBjYW4gcHJpbnQgbG90cyBvZgorICAgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHRoZSBrZXJuZWwgbG9nIGZpbGVzIGFuZCB0aGUgc3lzdGVtIGNvbnNvbGUuCisgICBXaGlsZSB0aGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGl0IG1pZ2h0IGJlIGFubm95aW5nIGR1cmluZworICAgbm9ybWFsIHVzZSBhbmQgZW5sYXJnZXMgdGhlIHNpemUgb2YgdGhlIGRyaXZlciBieSBzZXZlcmFsIGtpbG9ieXRlcy4KKworICAgVG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBkcml2ZXIgeW91IGNhbiB0cmltIHRoZSBtYXhpbWFsIGFtb3VudCBvZgorICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uIFBsZWFzZQorICAgcmVmZXIgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNjcmlwdCBhbmQgaXRzIG9uLWxpbmUgaGVscAorICAgZnVuY3Rpb25hbGl0eS4KKworICAgVGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IG1hcHMgdG8gdGhlICJ0cmFjaW5nIiBib290IHRpbWUKKyAgIG9wdGlvbiBhbmQgdGhlICJmdF90cmFjaW5nIiBtb2R1bGVzIG9wdGlvbiBhcyBmb2xsb3dzOgorCisgICAwICAgICAgICAgICAgICBidWdzCisgICAxICAgICAgICAgICAgICArIGVycm9ycyAod2l0aCBjYWxsLXN0YWNrIGR1bXApCisgICAyICAgICAgICAgICAgICArIHdhcm5pbmdzCisgICAzICAgICAgICAgICAgICArIGluZm9ybWF0aW9uCisgICA0ICAgICAgICAgICAgICArIG1vcmUgaW5mb3JtYXRpb24KKyAgIDUgICAgICAgICAgICAgICsgcHJvZ3JhbSBmbG93CisgICA2ICAgICAgICAgICAgICArIGZkYy9kbWEgaW5mbworICAgNyAgICAgICAgICAgICAgKyBkYXRhIGZsb3cKKyAgIDggICAgICAgICAgICAgICsgZXZlcnl0aGluZyBlbHNlCisKKzIuIFR1bmluZyB0aGUgZGVidWdnaW5nIG91dHB1dAorICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgICBUbyByZWR1Y2UgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IHByaW50ZWQgdG8gdGhlIHN5c3RlbQorICAgY29uc29sZSB5b3UgY2FuCisKKyAgIGkpICB0cmltIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGF0IHJ1bi10aW1lIHdpdGgKKworICAgICAgIG10IC1mIC9kZXYvbnFmdDAgc2V0ZGVuc2l0eSAjREJHTFZMCisKKyAgICAgICB3aGVyZSAiI0RCR0xWTCIgaXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5CisKKyAgIGlpKSB0cmltIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGF0IG1vZHVsZSBsb2FkIHRpbWUgd2l0aAorCisgICAgICAgbW9kcHJvYmUgZnRhcGUgZnRfdHJhY2luZz0jREJHTFZMCisKKyAgICAgICBPZiBjb3Vyc2UsIHRoaXMgYXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgZnRhcGUgdG8gYmUKKyAgICAgICBjb21waWxlZCBhcyBhIG1vZHVsZS4KKworICAgaWlpKSB0cmltIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGR1cmluZyBzeXN0ZW0gYm9vdCB0aW1lLiBBZGQgdGhlCisgICAgICAgZm9sbG93aW5nIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lOgorCisgICAgICAgZnRhcGU9I0RCR0xWTCx0cmFjaW5nCisKKyAgICAgICBQbGVhc2UgcmVmZXIgYWxzbyB0byB0aGUgbmV4dCBzZWN0aW9uIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0bworICAgICAgIHNldCBib290IHRpbWUgcGFyYW1ldGVycy4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDLiBCb290IGFuZCBsb2FkIHRpbWUgY29uZmlndXJhdGlvbgorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gU2V0dGluZyBib290IHRpbWUgcGFyYW1ldGVycworICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fiAKKyAgIEFzc3VtaW5nIHRoYXQgeW91IHVzZSBsaWxvLCB0aGUgTEkpbnV4IExPKWFkZXIsIGJvb3QgdGltZSBrZXJuZWwKKyAgIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBieSBhZGRpbmcgYSBsaW5lCisKKyAgIGFwcGVuZCBzb21lX2tlcm5lbF9ib290X3RpbWVfcGFyYW1ldGVyCisKKyAgIHRvIGAvZXRjL2xpbG8uY29uZicgb3IgYXQgcmVhbCBib290IHRpbWUgYnkgdHlwaW5nIGluIHRoZSBvcHRpb25zCisgICBhdCB0aGUgcHJvbXB0IHByb3ZpZGVkIGJ5IExJTE8uIEkgY2FuJ3QgZ2l2ZSB5b3UgYWR2aWNlIG9uIGhvdyB0bworICAgc3BlY2lmeSB0aG9zZSBwYXJhbWV0ZXJzIHdpdGggb3RoZXIgbG9hZGVycyBhcyBJIGRvbid0IHVzZSB0aGVtLgorCisgICBGb3IgZnRhcGUsIGVhY2ggInNvbWVfa2VybmVsX2Jvb3RfdGltZV9wYXJhbWV0ZXIiIGxvb2tzIGxpa2UKKyAgICJmdGFwZT12YWx1ZSxvcHRpb24iLiBBcyBhbiBleGFtcGxlLCB0aGUgZGVidWdnaW5nIG91dHB1dCBjYW4gYmUKKyAgIGluY3JlYXNlZCB3aXRoCisKKyAgIGZ0YXBlPTQsdHJhY2luZworCisgICBOT1RFOiB0aGUgdmFsdWUgcHJlY2VkZXMgdGhlIG9wdGlvbiBuYW1lLgorCisyLiBNb2R1bGUgbG9hZCB0aW1lIHBhcmFtZXRlcnMKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICAgTW9kdWxlIHBhcmFtZXRlcnMgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgZGlyZWN0bHkgd2hlbiBpbnZva2luZworICAgdGhlIHByb2dyYW0gJ21vZHByb2JlJyBhdCB0aGUgc2hlbGwgcHJvbXB0OgorCisgICBtb2Rwcm9iZSBmdGFwZSBmdF90cmFjaW5nPTQKKworICAgb3IgYnkgZWRpdGluZyB0aGUgZmlsZSBgL2V0Yy9tb2Rwcm9iZS5jb25mJyBpbiB3aGljaCBjYXNlIHRoZXkgdGFrZQorICAgZWZmZWN0IGVhY2ggdGltZSB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIHdpdGggYG1vZHByb2JlJyAocGxlYXNlCisgICByZWZlciB0byB0aGUgcmVzcGVjdGl2ZSBtYW51YWwgcGFnZXMpLiBUaHVzLCB5b3Ugc2hvdWxkIGFkZCBhIGxpbmUKKworICAgb3B0aW9ucyBmdGFwZSBmdF90cmFjaW5nPTQKKworICAgdG8gYC9ldGMvbW9kcHJvYmUuY29uZmAgaWYgeW91IGludGVuZCB0byBpbmNyZWFzZSB0aGUgZGVidWdnaW5nCisgICBvdXRwdXQgb2YgdGhlIGRyaXZlci4KKworCiszLiBGdGFwZSBib290LSBhbmQgbG9hZCB0aW1lIG9wdGlvbnMKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgICBpLiAgIENvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG91dHB1dAorICAgICAgICBEQkdMVkwgaGFzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOC4KKworICAgICAgICBtb2R1bGUgICAgICAgICAgICAgICAgIHwgIGtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBmdF90cmFjaW5nPURCR0xWTCAgICAgIHwgIGZ0YXBlPURCR0xWTCx0cmFjaW5nCisKKyAgIGlpLiAgSGFyZHdhcmUgc2V0dXAKKwlCQVNFIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgeW91ciBmbG9wcHkgZGlzayBjb250cm9sbGVyLAorICAgICAgICBJUlEgYW5kIERNQSBnaXZlIGl0cyBpbnRlcnJ1cHQgYW5kIERNQSBjaGFubmVsLCByZXNwZWN0aXZlbHkuCisgICAgICAgIEJPT0wgaXMgYW4gaW50ZWdlciwgIjAiIG1lYW5zICJubyI7IGFueSBvdGhlciB2YWx1ZSBtZWFucworCSJ5ZXMiLiBZb3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGFueXRoaW5nIGlmIGNvbm5lY3RpbmcgeW91ciB0YXBlCisgICAgICAgIGRyaXZlIHRvIHRoZSBzdGFuZGFyZCBmbG9wcHkgZGlzayBjb250cm9sbGVyLiBBbGwgb2YgdGhlc2UKKwl2YWx1ZXMgaGF2ZSByZWFzb25hYmxlIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgY2FuIGJlIG1vZGlmaWVkCisJZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpLmUuIHdoaWxlIHJ1bm5pbmcgIm1ha2UgY29uZmlnIiwKKwkibWFrZSBtZW51Y29uZmlnIiBvciAibWFrZSB4Y29uZmlnIiBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeQorCW9mIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIHRyZWUuIFBsZWFzZSByZWZlciBhbHNvIHRvIHRoZSBvbgorCWxpbmUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBkdXJpbmcgdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbgorCXByb2Nlc3MuCisKKwlmdF9wcm9iZV9mYzEwIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHlvdSB3aXNoIGZvciBmdGFwZSB0bworCXByb2JlIGZvciBhIENvbG9yYWRvIEZDLTEwIG9yIEZDLTIwIGNvbnRyb2xsZXIuCisKKwlmdF9tYWNoMiBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2lzaCBmb3IgZnRhcGUgdG8gcHJvYmUKKwlmb3IgYSBNb3VudGFpbiBNQUNILTIgY29udHJvbGxlci4KKworICAgICAgICBtb2R1bGUgICAgICAgICAgICAgICAgIHwgIGtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBmdF9mZGNfYmFzZT1CQVNFICAgICAgIHwgIGZ0YXBlPUJBU0UsaW9wb3J0CisgICAgICAgIGZ0X2ZkY19pcnE9SVJRICAgICAgICAgfCAgZnRhcGU9SVJRLGlycQorICAgICAgICBmdF9mZGNfZG1hPURNQSAgICAgICAgIHwgIGZ0YXBlPURNQSxkbWEKKyAgICAgICAgZnRfcHJvYmVfZmMxMD1CT09MICAgICB8ICBmdGFwZT1CT09MLGZjMTAKKyAgICAgICAgZnRfbWFjaDI9Qk9PTCAgICAgICAgICB8ICBmdGFwZT1CT09MLG1hY2gyCisgICAgICAgIGZ0X2ZkY190aHJlc2hvbGQ9VEhSICAgfCAgZnRhcGU9VEhSLHRocmVzaG9sZAorICAgICAgICBmdF9mZGNfcmF0ZV9saW1pdD1SQVRFIHwgIGZ0YXBlPVJBVEUsZGF0YXJhdGUKKworNC4gRXhhbXBsZSBrZXJuZWwgcGFyYW1ldGVyIHNldHRpbmcKKyAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IAorICAgVG8gY29uZmlndXJlIGZ0YXBlIHRvIHByb2JlIGZvciBhIENvbG9yYWRvIEZDLTEwL0ZDLTIwIGNvbnRyb2xsZXIKKyAgIGFuZCB0byBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQgYSBsaXR0bGUgYml0LCBhZGQKKyAgIHRoZSBmb2xsb3dpbmcgbGluZSB0byBgL2V0Yy9saWxvLmNvbmYnOgorCisgICBhcHBlbmQgZnRhcGU9MSxmYzEwIGZ0YXBlPTQsdHJhY2luZworCis1LiBFeGFtcGxlIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGluZworICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIFRvIGRvIHRoZSBzYW1lLCBidXQgd2l0aCBmdGFwZSBjb21waWxlZCBhcyBhIGxvYWRhYmxlIGtlcm5lbAorICAgbW9kdWxlLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGAvZXRjL21vZHByb2JlLmNvbmYnOgorCisgICBvcHRpb25zIGZ0YXBlIGZ0X3Byb2JlX2ZjMTA9MSBmdF90cmFjaW5nPTQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitELiBTdXBwb3J0IGFuZCBjb250YWN0cworICAgPT09PT09PT09PT09PT09PT09PT0KKworICAgRnRhcGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGVyZSBpcworICAgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgdGhpcyBzb2Z0d2FyZS4gSG93ZXZlciwgeW91IGNhbiByZWFjaAorICAgdGhlIGN1cnJlbnQgbWFpbnRhaW5lciBvZiB0aGUgZnRhcGUgcGFja2FnZSB1bmRlciB0aGUgZW1haWwgYWRkcmVzcworICAgZ2l2ZW4gaW4gdGhlIE1BSU5UQUlORVJTIGZpbGUgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUgdG9wIGxldmVsCisgICBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhlcmUgeW91J2xsIGZpbmQgYWxzbworICAgdGhlIHJlbGV2YW50IG1haWxpbmcgbGlzdCB0byB1c2UgYXMgYSBkaXNjdXNzaW9uIGZvcnVtIGFuZCB0aGUgd2ViCisgICBwYWdlIHRvIHF1ZXJ5IGZvciB0aGUgbW9zdCByZWNlbnQgZG9jdW1lbnRhdGlvbiwgcmVsYXRlZCB3b3JrIGFuZAorICAgZGV2ZWxvcG1lbnQgdmVyc2lvbnMgb2YgZnRhcGUuCisKKyAgIENoYW5nZWxvZzoKKyAgID09PT09PT09PT0KKworfjE5OTY6CQlPcmlnaW5hbCBEb2N1bWVudAorCisxMC0yNC0yMDA0OglHZW5lcmFsIGNsZWFudXAgYW5kIHVwZGF0aW5nLCBub3RpbmcgYWRkaXRpb25hbCBtb2R1bGUgb3B0aW9ucy4KKwkJSmFtZXMgTmVsc29uIDxqYW1lczQ3NjVAZ21haWwuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9SRUFETUUudHh0IGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODRmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L1JFQURNRS50eHQKQEAgLTAsMCArMSw1MSBAQAorCQkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJICAgICAgIEZ1aml0c3UgRlItViBMSU5VWCBET0NVTUVOVEFUSU9OCisJCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkb2N1bWVudGF0aW9uIGZvciB0aGUgRnVqaXRzdSBGUi1WIENQVSBhcmNoaXRlY3R1cmUKK3BvcnQgb2YgTGludXguCisKK1RoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFyZSBhdmFpbGFibGU6CisKKyAoKikgZmVhdHVyZXMudHh0CisKKyAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgYmFzaWMgZmVhdHVyZXMgaW5oZXJlbnQgaW4gdGhpcyBhcmNoaXRlY3R1cmUgcG9ydC4KKworCisgKCopIGNvbmZpZ3VyaW5nLnR4dAorCisgICAgIEEgc3VtbWFyeSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHBhcnRpY3VsYXIgdG8gdGhpcyBhcmNoaXRlY3R1cmUuCisKKworICgqKSBib290aW5nLnR4dAorCisgICAgIEEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGJvb3QgdGhlIGtlcm5lbCBpbWFnZSBhbmQgYSBzdW1tYXJ5IG9mIHRoZSBrZXJuZWwKKyAgICAgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKworICgqKSBnZGJzdHViLnR4dAorCisgICAgIEEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGRlYnVnIHRoZSBrZXJuZWwgdXNpbmcgR0RCIGF0dGFjaGVkIGJ5IHNlcmlhbAorICAgICBwb3J0LCBhbmQgYSBzdW1tYXJ5IG9mIHRoZSBzZXJ2aWNlcyBhdmFpbGFibGUuCisKKworICgqKSBtbXUtbGF5b3V0LnR4dAorCisgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhlIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1lbW9yeSBsYXlvdXQgdXNlZCBpbiB0aGUKKyAgICAgTU1VIGxpbnV4IGtlcm5lbCwgYW5kIHRoZSByZWdpc3RlcnMgdXNlZCB0byBzdXBwb3J0IGl0LgorCisKKyAoKikgZ2RiaW5pdAorCisgICAgIEFuIGV4YW1wbGUgLmdkYmluaXQgZmlsZSBmb3IgdXNlIHdpdGggR0RCLiBJdCBpbmNsdWRlcyBtYWNyb3MgZm9yIHZpZXdpbmcKKyAgICAgTU1VIHN0YXRlIG9uIHRoZSBGUjQ1MS4gU2VlIG1tdS1sYXlvdXQudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKyAoKikgY2xvY2sudHh0CisKKyAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgQ1BVIGNsb2NrIHNjYWxpbmcgaW50ZXJmYWNlLgorCisKKyAoKikgYXRvbWljLW9wcy50eHQKKworICAgICBBIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUgRlItViBrZXJuZWwncyBhdG9taWMgb3BlcmF0aW9ucyB3b3JrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9hdG9taWMtb3BzLnR4dCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYXRvbWljLW9wcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2MzhlOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYXRvbWljLW9wcy50eHQKQEAgLTAsMCArMSwxMzQgQEAKKwkJCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkgICAgICAgRlVKSVRTVSBGUi1WIEtFUk5FTCBBVE9NSUMgT1BFUkFUSU9OUworCQkJICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT24gdGhlIEZSLVYgQ1BVcywgdGhlcmUgaXMgb25seSBvbmUgYXRvbWljIFJlYWQtTW9kaWZ5LVdyaXRlIG9wZXJhdGlvbjogdGhlIFNXQVAvU1dBUEkKK2luc3RydWN0aW9uLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsb25lIGNhbid0IGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKworICgqKSBBdG9taWMgYWRkIHRvIG1lbW9yeQorCisgKCopIEF0b21pYyBzdWJ0cmFjdCBmcm9tIG1lbW9yeQorCisgKCopIEF0b21pYyBiaXQgbW9kaWZpY2F0aW9uIChzZXQsIGNsZWFyIG9yIGludmVydCkKKworICgqKSBBdG9taWMgY29tcGFyZSBhbmQgZXhjaGFuZ2UKKworT24gc3VjaCBDUFVzLCB0aGUgc3RhbmRhcmQgd2F5IG9mIGVtdWxhdGluZyBzdWNoIG9wZXJhdGlvbnMgaW4gdW5pcHJvY2Vzc29yIG1vZGUgaXMgdG8gZGlzYWJsZQoraW50ZXJydXB0cywgYnV0IG9uIHRoZSBGUi1WIENQVXMsIG1vZGlmeWluZyB0aGUgUFNSIHRha2VzIGEgbG90IG9mIGNsb2NrIGN5Y2xlcywgYW5kIGl0IGhhcyB0byBiZQorZG9uZSB0d2ljZS4gVGhpcyBtZWFucyB0aGUgQ1BVIHJ1bnMgZm9yIGEgcmVsYXRpdmVseSBsb25nIHRpbWUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLAorcG90ZW50aWFsbHkgaGF2aW5nIGEgZ3JlYXQgZWZmZWN0IG9uIGludGVycnVwdCBsYXRlbmN5LgorCisKKz09PT09PT09PT09PT0KK05FVyBBTEdPUklUSE0KKz09PT09PT09PT09PT0KKworVG8gZ2V0IGFyb3VuZCB0aGlzLCB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSBoYXMgYmVlbiBpbXBsZW1lbnRlZC4gSXQgb3BlcmF0ZXMgaW4gYSB3YXkgc2ltaWxhciB0bwordGhlIExML1NDIGluc3RydWN0aW9uIHBhaXJzIHN1cHBvcnRlZCBvbiBhIG51bWJlciBvZiBwbGF0Zm9ybXMuCisKKyAoKikgVGhlIENDQ1IuQ0MzIHJlZ2lzdGVyIGlzIHJlc2VydmVkIHdpdGhpbiB0aGUga2VybmVsIHRvIGFjdCBhcyBhbiBhdG9taWMgbW9kaWZ5IGFib3J0IGZsYWcuCisKKyAoKikgSW4gdGhlIGV4Y2VwdGlvbiBwcm9sb2d1ZXMgcnVuIG9uIGtlcm5lbC0+a2VybmVsIGVudHJ5LCBDQ0NSLkNDMyBpcyBzZXQgdG8gMCAoVW5kZWZpbmVkCisgICAgIHN0YXRlKS4KKworICgqKSBBbGwgYXRvbWljIG9wZXJhdGlvbnMgY2FuIHRoZW4gYmUgYnJva2VuIGRvd24gaW50byB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKKworICAgICAoMSkgU2V0IElDQzMuWiB0byB0cnVlIGFuZCBzZXQgQ0MzIHRvIFRydWUgKE9SQ0MvQ0tFUS9PUkNSKS4KKworICAgICAoMikgTG9hZCB0aGUgdmFsdWUgY3VycmVudGx5IGluIHRoZSBtZW1vcnkgdG8gYmUgbW9kaWZpZWQgaW50byBhIHJlZ2lzdGVyLgorCisgICAgICgzKSBNYWtlIGNoYW5nZXMgdG8gdGhlIHZhbHVlLgorCisgICAgICg0KSBJZiBDQzMgaXMgc3RpbGwgVHJ1ZSwgc2ltdWx0YW5lb3VzbHkgYW5kIGF0b21pY2FsbHkgKGJ5IFZMSVcgcGFja2luZyk6CisKKwkgKGEpIFN0b3JlIHRoZSBtb2RpZmllZCB2YWx1ZSBiYWNrIHRvIG1lbW9yeS4KKworCSAoYikgU2V0IElDQzMuWiB0byBmYWxzZSAoQ09SQ0Mgb24gR1IyOSBpcyBzdWZmaWNpZW50IGZvciB0aGlzIC0gR1IyOSBob2xkcyB0aGUgY3VycmVudAorCSAgICAgdGFzayBwb2ludGVyIGluIHRoZSBrZXJuZWwsIGFuZCBzbyBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi16ZXJvKS4KKworICAgICAoNSkgSWYgSUNDMy5aIGlzIHN0aWxsIHRydWUsIGdvIGJhY2sgdG8gc3RlcCAoMSkuCisKK1RoaXMgd29ya3MgaW4gYSBub24tU01QIGVudmlyb25tZW50IGJlY2F1c2UgYW55IGludGVycnVwdCBvciBvdGhlciBleGNlcHRpb24gdGhhdCBoYXBwZW5zIGJldHdlZW4KK3N0ZXBzICgxKSBhbmQgKDQpIHdpbGwgc2V0IENDMyB0byB0aGUgVW5kZWZpbmVkLCB0aHVzIGFib3J0aW5nIHRoZSBzdG9yZSBpbiAoNGEpLCBhbmQgY2F1c2luZyB0aGUKK2NvbmRpdGlvbiBpbiBJQ0MzIHRvIHJlbWFpbiB3aXRoIHRoZSBaIGZsYWcgc2V0LCB0aHVzIGNhdXNpbmcgc3RlcCAoNSkgdG8gbG9vcCBiYWNrIHRvIHN0ZXAgKDEpLgorCisKK1RoaXMgYWxnb3JpdGhtIHN1ZmZlcnMgZnJvbSB0d28gcHJvYmxlbXM6CisKKyAoMSkgVGhlIGNvbmRpdGlvbiBDQ0NSLkNDMyBpcyBjbGVhcmVkIHVuY29uZGl0aW9uYWxseSBieSBhbiBleGNlcHRpb24sIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIG9yCisgICAgIG5vdCBhbnkgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIHRhcmdldCBtZW1vcnkgbG9jYXRpb24gZHVyaW5nIHRoYXQgZXhjZXB0aW9uLgorCisgKDIpIFRoZSBicmFuY2ggZnJvbSBzdGVwICg1KSBiYWNrIHRvIHN0ZXAgKDEpIG1heSBoYXZlIHRvIGhhcHBlbiBtb3JlIHRoYW4gb25jZSB1bnRpbCB0aGUgc3RvcmUKKyAgICAgbWFuYWdlcyB0byB0YWtlIHBsYWNlLiBJbiB0aGVvcnksIHRoaXMgbG9vcCBjb3VsZCBjeWNsZSBmb3JldmVyIGJlY2F1c2UgdGhlcmUgYXJlIHRvbyBtYW55CisgICAgIGludGVycnVwdHMgY29taW5nIGluLCBidXQgaXQncyB1bmxpa2VseS4KKworCis9PT09PT09CitFWEFNUExFCis9PT09PT09CisKK1Rha2luZyBhbiBleGFtcGxlIGZyb20gaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oOgorCisJc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQorCXsKKwkJdW5zaWduZWQgbG9uZyB2YWw7CisKKwkJYXNtKCIwOgkJCQkJCVxuIgorCitJdCBzdGFydHMgYnkgc2V0dGluZyBJQ0MzLlogdG8gdHJ1ZSBmb3IgbGF0ZXIgdXNlLCBhbmQgYWxzbyB0cmFuc2Zvcm1pbmcgdGhhdCBpbnRvIENDMyBiZWluZyBpbiB0aGUKK1RydWUgc3RhdGUuCisKKwkJICAgICIJb3JjYwkJZ3IwLGdyMCxncjAsaWNjMwlcbiIJPC0tICgxKQorCQkgICAgIglja2VxCQlpY2MzLGNjNwkJXG4iCTwtLSAoMSkKKworVGhlbiBpdCBkb2VzIHRoZSBsb2FkLiBOb3RlIHRoYXQgdGhlIGZpbmFsIHBoYXNlIG9mIHN0ZXAgKDEpIGlzIGRvbmUgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUKK2xvYWQuIFRoZSBWTElXIHBhY2tpbmcgZW5zdXJlcyB0aGV5IGFyZSBkb25lIHNpbXVsdGFuZW91c2x5LiBUaGUgIi5wIiBvbiB0aGUgbG9hZCBtdXN0IG5vdCBiZQorcmVtb3ZlZCB3aXRob3V0IHN3YXBwaW5nIHRoZSBvcmRlciBvZiB0aGVzZSB0d28gaW5zdHJ1Y3Rpb25zLgorCisJCSAgICAiCWxkLnAJCSVNMCwlMQkJCVxuIgk8LS0gKDIpCisJCSAgICAiCW9yY3IJCWNjNyxjYzcsY2MzCQlcbiIJPC0tICgxKQorCitUaGVuIHRoZSBwcm9wb3NlZCBtb2RpZmljYXRpb24gaXMgZ2VuZXJhdGVkLiBOb3RlIHRoYXQgdGhlIG9sZCB2YWx1ZSBjYW4gYmUgcmV0YWluZWQgaWYgcmVxdWlyZWQKKyhzdWNoIGFzIGluIHRlc3RfYW5kX3NldF9iaXQoKSkuCisKKwkJICAgICIJYWRkJUkyCQklMSwlMiwlMQkJXG4iCTwtLSAoMykKKworVGhlbiBpdCBhdHRlbXB0cyB0byBzdG9yZSB0aGUgdmFsdWUgYmFjaywgY29udGluZ2VudCBvbiBubyBleGNlcHRpb24gaGF2aW5nIGNsZWFyZWQgQ0MzIHNpbmNlIGl0Cit3YXMgc2V0IHRvIFRydWUuCisKKwkJICAgICIJY3N0LnAJCSUxLCVNMAkJLGNjMywjMQlcbiIJPC0tICg0YSkKKworSXQgc2ltdWx0YW5lb3VzbHkgcmVjb3JkcyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBzdG9yZSBpbiBJQ0MzLlouCisKKwkJICAgICIJY29yY2MJCWdyMjksZ3IyOSxncjAJLGNjMywjMQlcbiIJPC0tICg0YikKKworU3VjaCB0aGF0IHRoZSBicmFuY2ggY2FuIHRoZW4gYmUgdGFrZW4gaWYgdGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4KKworCQkgICAgIgliZXEJCWljYzMsIzAsMGIJCVxuIgk8LS0gKDUpCisJCSAgICA6ICIrVSIodi0+Y291bnRlciksICI9JnIiKHZhbCkKKwkJICAgIDogIk5QciIoaSkKKwkJICAgIDogIm1lbW9yeSIsICJjYzciLCAiY2MzIiwgImljYzMiCisJCSAgICApOworCisJCXJldHVybiB2YWw7CisJfQorCisKKz09PT09PT09PT09PT0KK0NPTkZJR1VSQVRJT04KKz09PT09PT09PT09PT0KKworVGhlIGF0b21pYyBvcHMgaW1wbGVtZW50YXRpb24gY2FuIGJlIG1hZGUgaW5saW5lIG9yIG91dC1vZi1saW5lIGJ5IGNoYW5naW5nIHRoZQorQ09ORklHX0ZSVl9PVVRPRkxJTkVfQVRPTUlDX09QUyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBNYWtpbmcgaXQgb3V0LW9mLWxpbmUgaGFzIGEgbnVtYmVyIG9mCithZHZhbnRhZ2VzOgorCisgLSBUaGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBtYXkgYmUgc21hbGxlcgorIC0gRGVidWdnaW5nIGlzIGVhc2llciBhcyBhdG9taWMgb3BzIGNhbiBqdXN0IGJlIHN0ZXBwZWQgb3ZlciBhbmQgdGhleSBjYW4gYmUgYnJlYWtwb2ludGVkCisKK0tlZXBpbmcgaXQgaW5saW5lIGFsc28gaGFzIGEgbnVtYmVyIG9mIGFkdmFudGFnZXM6CisKKyAtIFRoZSByZXN1bHRpbmcga2VybmVsIG1heSBiZSBGYXN0ZXIKKyAgIC0gbm8gb3V0LW9mLWxpbmUgZnVuY3Rpb24gY2FsbHMgbmVlZCB0byBiZSBtYWRlCisgICAtIHRoZSBjb21waWxlciBkb2Vzbid0IGhhdmUgaGFsZiBpdHMgcmVnaXN0ZXJzIGNsb2JiZXJlZCBieSBtYWtpbmcgYSBjYWxsCisKK1RoZSBvdXQtb2YtbGluZSBpbXBsZW1lbnRhdGlvbnMgbGl2ZSBpbiBhcmNoL2Zydi9saWIvYXRvbWljLW9wcy5TLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9ib290aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYm9vdGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyMjkwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvYm9vdGluZy50eHQKQEAgLTAsMCArMSwxODEgQEAKKwkJCSAgPT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICBCT09USU5HIEZSLVYgTElOVVggS0VSTkVMCisJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT0KKworPT09PT09PT09PT09PT09PT09PT09PQorUFJPVklESU5HIEEgRklMRVNZU1RFTQorPT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCBvZiBhbGwsIGEgcm9vdCBmaWxlc3lzdGVtIG11c3QgYmUgbWFkZSBhdmFpbGFibGUuIFRoaXMgY2FuIGJlIGRvbmUgaW4KK29uZSBvZiB0d28gd2F5czoKKworICAoMSkgTkZTIEV4cG9ydAorCisgICAgICBBIGZpbGVzeXN0ZW0gc2hvdWxkIGJlIGNvbnN0cnVjdGVkIGluIGEgZGlyZWN0b3J5IG9uIGFuIE5GUyBzZXJ2ZXIgdGhhdAorICAgICAgdGhlIHRhcmdldCBib2FyZCBjYW4gcmVhY2guIFRoaXMgZGlyZWN0b3J5IHNob3VsZCB0aGVuIGJlIE5GUyBleHBvcnRlZAorICAgICAgc3VjaCB0aGF0IHRoZSB0YXJnZXQgYm9hcmQgY2FuIHJlYWQgYW5kIHdyaXRlIGludG8gaXQgYXMgcm9vdC4KKworICAoMikgRmxhc2ggRmlsZXN5c3RlbSAoSkZGUzIgUmVjb21tZW5kZWQpCisKKyAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGltYWdlIG11c3QgYmUgc3RvcmVkIG9yIGJ1aWx0IHVwIG9uIGZsYXNoIGJlZm9yZSBpdAorICAgICAgY2FuIGJlIHVzZWQuIEEgY29tcGxldGUgaW1hZ2UgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBta2ZzLmpmZnMyIG9yCisgICAgICBzaW1pbGFyIHByb2dyYW0gYW5kIHRoZW4gZG93bmxvYWRlZCBhbmQgc3RvcmVkIGludG8gZmxhc2ggYnkgUmVkQm9vdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT0KK0xPQURJTkcgVEhFIEtFUk5FTCBJTUFHRQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgd2lsbCBuZWVkIHRvIGJlIGxvYWRlZCBpbnRvIFJBTSBieSBSZWRCb290IChvciBieSBzb21lIGFsdGVybmF0aXZlCitib290IGxvYWRlcikgYmVmb3JlIGl0IGNhbiBiZSBydW4uIFRoZSBrZXJuZWwgaW1hZ2UgKGFyY2gvZnJ2L2Jvb3QvSW1hZ2UpIG1heQorYmUgbG9hZGVkIGluIG9uZSBvZiB0aHJlZSB3YXlzOgorCisgICgxKSBMb2FkIGZyb20gRmxhc2gKKworICAgICAgVGhpcyBpcyB0aGUgc2ltcGxlc3QuIFJlZEJvb3QgY2FuIHN0b3JlIGFuIGltYWdlIGluIHRoZSBmbGFzaCAoc2VlIHRoZQorICAgICAgUmVkQm9vdCBkb2N1bWVudGF0aW9uKSBhbmQgdGhlbiBsb2FkIGl0IGJhY2sgaW50byBSQU0uIFJlZEJvb3Qga2VlcHMKKyAgICAgIHRyYWNrIG9mIHRoZSBsb2FkIGFkZHJlc3MsIGVudHJ5IHBvaW50IGFuZCBzaXplLCBzbyB0aGUgY29tbWFuZCB0byBkbworICAgICAgdGhpcyBpcyBzaW1wbHk6CisKKwlmaXMgbG9hZCBsaW51eAorCisgICAgICBUaGUgaW1hZ2UgaXMgdGhlbiByZWFkeSB0byBiZSBleGVjdXRlZC4KKworICAoMikgTG9hZCBieSBURlRQCisKKyAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGRvd25sb2FkIGEgcmF3IGJpbmFyeSBrZXJuZWwgaW1hZ2UgZnJvbSB0aGUKKyAgICAgIGRlZmF1bHQgc2VydmVyIChhcyBuZWdvdGlhdGVkIGJ5IEJPT1RQKSBhbmQgc3RvcmUgaXQgaW50byBSQU06CisKKwlsb2FkIC1iIDB4MDAxMDAwMDAgLXIgL3RmdHBib290L2ltYWdlLmJpbgorCisgICAgICBUaGUgaW1hZ2UgaXMgdGhlbiByZWFkeSB0byBiZSBleGVjdXRlZC4KKworICAoMykgTG9hZCBieSBZLU1vZGVtCisKKyAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGRvd25sb2FkIGEgcmF3IGJpbmFyeSBrZXJuZWwgaW1hZ2UgYWNyb3NzIHRoZQorICAgICAgc2VyaWFsIHBvcnQgdGhhdCBSZWRCb290IGlzIGN1cnJlbnRseSB1c2luZzoKKworCWxvYWQgLW0geW1vZGVtIC1iIDB4MDAxMDAwMDAgLXIgekltYWdlCisKKyAgICAgIFRoZSBzZXJpYWwgY2xpZW50IChzdWNoIGFzIG1pbmljb20pIG11c3QgdGhlbiBiZSB0b2xkIHRvIHRyYW5zbWl0IHRoZQorICAgICAgcHJvZ3JhbSBieSBZLU1vZGVtLgorCisgICAgICBXaGVuIGZpbmlzaGVkLCB0aGUgaW1hZ2Ugd2lsbCB0aGVuIGJlIHJlYWR5IHRvIGJlIGV4ZWN1dGVkLgorCisKKz09PT09PT09PT09PT09PT09PQorQk9PVElORyBUSEUgS0VSTkVMCis9PT09PT09PT09PT09PT09PT0KKworQm9vdCB0aGUgaW1hZ2Ugd2l0aCB0aGUgZm9sbG93aW5nIFJlZEJvb3QgY29tbWFuZDoKKworCWV4ZWMgLWMgIjxDTURMSU5FPiIgMHgwMDEwMDAwMAorCitGb3IgZXhhbXBsZToKKworCWV4ZWMgLWMgImNvbnNvbGU9dHR5U00wLDExNTIwMCBpcD06Ojo6OmRoY3Agcm9vdD0vZGV2L210ZGJsb2NrMiBydyIKKworVGhpcyB3aWxsIHN0YXJ0IHRoZSBrZXJuZWwgcnVubmluZy4gTm90ZSB0aGF0IGlmIHRoZSBHREItc3R1YiBpcyBjb21waWxlZCBpbiwKK3RoZW4gdGhlIGtlcm5lbCB3aWxsIGltbWVkaWF0ZWx5IHdhaXQgZm9yIEdEQiB0byBjb25uZWN0IG92ZXIgc2VyaWFsIGJlZm9yZQorZG9pbmcgYW55dGhpbmcgZWxzZS4gU2VlIHRoZSBzZWN0aW9uIG9uIGtlcm5lbCBkZWJ1Z2dpbmcgd2l0aCBHREIuCisKK1RoZSBrZXJuZWwgY29tbWFuZCBsaW5lIDxDTURMSU5FPiB0ZWxscyB0aGUga2VybmVsIHdoZXJlIGl0cyBjb25zb2xlIGlzIGFuZAoraG93IHRvIGZpbmQgaXRzIHJvb3QgZmlsZXN5c3RlbS4gVGhpcyBpcyBtYWRlIHVwIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cywKK3NlcGFyYXRlZCBieSBzcGFjZXM6CisKKyAgKCopIGNvbnNvbGU9dHR5Uzx4PlssPGJhdWQ+WzxwYXJpdHk+WzxiaXRzPls8Zmxvdz5dXV1dCisKKyAgICAgIFRoaXMgc3BlY2lmaWVzIHRoYXQgdGhlIHN5c3RlbSBjb25zb2xlIHNob3VsZCBvdXRwdXQgdGhyb3VnaCBvbi1jaGlwCisgICAgICBzZXJpYWwgcG9ydCA8eD4gKHdoaWNoIGNhbiBiZSAiMCIgb3IgIjEiKS4KKworICAgICAgPGJhdWQ+IGlzIGEgc3RhbmRhcmQgYmF1ZCByYXRlIGJldHdlZW4gMTIwMCBhbmQgMTE1MjAwIChkZWZhdWx0IDk2MDApLgorCisgICAgICA8cGFyaXR5PiBpcyBhIHBhcml0eSBzZXR0aW5nIG9mICJOIiwgIk8iLCAiRSIsICJNIiBvciAiUyIgZm9yIE5vbmUsIE9kZCwKKyAgICAgIEV2ZW4sIE1hcmsgb3IgU3BhY2UuICJOb25lIiBpcyB0aGUgZGVmYXVsdC4KKworICAgICAgPHN0b3A+IGlzICI3IiBvciAiOCIgZm9yIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgY2hhcmFjdGVyLiAiOCIgaXMgdGhlCisgICAgICBkZWZhdWx0LgorCisgICAgICA8Zmxvdz4gaXMgInIiIHRvIHVzZSBmbG93IGNvbnRyb2wgKFhDVFMgb24gc2VyaWFsIHBvcnQgMiBvbmx5KS4gVGhlCisgICAgICBkZWZhdWx0IGlzIHRvIG5vdCB1c2UgZmxvdyBjb250cm9sLgorCisgICAgICBGb3IgZXhhbXBsZToKKworCWNvbnNvbGU9dHR5UzAsMTE1MjAwCisKKyAgICAgIFRvIHVzZSB0aGUgZmlyc3Qgb24tY2hpcCBzZXJpYWwgcG9ydCBhdCBiYXVkIHJhdGUgMTE1MjAwLCBubyBwYXJpdHksIDgKKyAgICAgIGJpdHMsIGFuZCBubyBmbG93IGNvbnRyb2wuCisKKyAgKCopIHJvb3Q9L2Rldi88eHh4eD4KKworICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIGRldmljZSB1cG9uIHdoaWNoIHRoZSByb290IGZpbGVzeXN0ZW0gcmVzaWRlcy4gRm9yCisgICAgICBleGFtcGxlOgorCisJL2Rldi9uZnMJTkZTIHJvb3QgZmlsZXN5c3RlbQorCS9kZXYvbXRkYmxvY2szCUZvdXJ0aCBSZWRCb290IHBhcnRpdGlvbiBvbiB0aGUgU3lzdGVtIEZsYXNoCisKKyAgKCopIHJ3CisKKyAgICAgIFN0YXJ0IHdpdGggdGhlIHJvb3QgZmlsZXN5c3RlbSBtb3VudGVkIFJlYWQvV3JpdGUuCisKKyAgVGhlIHJlbWFpbmluZyBjb21wb25lbnRzIGFyZSBhbGwgb3B0aW9uYWw6CisKKyAgKCopIGlwPTxpcD46Ojo6PGhvc3Q+OjxpZmFjZT46PGNmZz4KKworICAgICAgQ29uZmlndXJlIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gSWYgPGNmZz4gaXMgIm9mZiIgdGhlbiA8aXA+IHNob3VsZAorICAgICAgc3BlY2lmeSB0aGUgSVAgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlIDxpZmFjZT4uIDxob3N0PiBwcm92aWRlCisgICAgICB0aGUgaG9zdG5hbWUgZm9yIHRoZSBkZXZpY2UuCisKKyAgICAgIElmIDxjZmc+IGlzICJib290cCIgb3IgImRoY3AiLCB0aGVuIGFsbCBvZiB0aGVzZSBwYXJhbWV0ZXJzIHdpbGwgYmUKKyAgICAgIGRpc2NvdmVyZWQgYnkgY29uc3VsdGluZyBhIEJPT1RQIG9yIERIQ1Agc2VydmVyLgorCisgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZSB1c2VkOgorCisJaXA9MTkyLjE2OC43My4xMjo6OjpmcnY6ZXRoMDpvZmYKKworICAgICAgVGhpcyBzZXRzIHRoZSBJUCBhZGRyZXNzIG9uIHRoZSBWREsgbW90aGVyYm9hcmQgUlRMODAyOSBldGhlcm5ldCBjaGlwc2V0CisgICAgICAoZXRoMCkgdG8gYmUgMTkyLjE2OC43My4xMiwgYW5kIHNldHMgdGhlIGJvYXJkJ3MgaG9zdG5hbWUgdG8gYmUgImZydiIuCisKKyAgKCopIG5mc3Jvb3Q9PHNlcnZlcj46PGRpcj5bLHY8dmVycz5dCisKKyAgICAgIFRoaXMgaXMgbWFuZGF0b3J5IGlmICJyb290PS9kZXYvbmZzIiBpcyBnaXZlbiBhcyBhbiBvcHRpb24uIEl0IHRlbGxzIHRoZQorICAgICAga2VybmVsIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyIHByb3ZpZGluZyBpdHMgcm9vdCBmaWxlc3lzdGVtLAorICAgICAgYW5kIHRoZSBwYXRobmFtZSBvbiB0aGF0IHNlcnZlciBvZiB0aGUgZmlsZXN5c3RlbS4KKworICAgICAgVGhlIE5GUyB2ZXJzaW9uIHRvIHVzZSBjYW4gYWxzbyBiZSBzcGVjaWZpZWQuIHYyIGFuZCB2MyBhcmUgc3VwcG9ydGVkIGJ5CisgICAgICBMaW51eC4KKworICAgICAgRm9yIGV4YW1wbGU6CisKKwluZnNyb290PTE5Mi4xNjguNzMuMTovbmZzcm9vdC1mcnYKKworICAoKikgcHJvZmlsZT0xCisKKyAgICAgIFR1cm5zIG9uIHRoZSBrZXJuZWwgcHJvZmlsZXIgKGFjY2Vzc2libGUgdGhyb3VnaCAvcHJvYy9wcm9maWxlKS4KKworICAoKikgY29uc29sZT1nZGIwCisKKyAgICAgIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlICJjb25zb2xlPXR0eVMuLi4iIGxpc3RlZAorICAgICAgYWJvdmUuIEkgdGVsbHMgdGhlIGtlcm5lbCB0byBwYXNzIHRoZSBjb25zb2xlIG91dHB1dCB0byBHREIgaWYgdGhlCisgICAgICBnZGJzdHViIGlzIGNvbXBpbGVkIGluIHRvIHRoZSBrZXJuZWwuCisKKyAgICAgIElmIHRoaXMgaXMgdXNlZCwgdGhlbiB0aGUgZ2Ric3R1YiBwYXNzZXMgdGhlIHRleHQgdG8gR0RCLCB3aGljaCB0aGVuCisgICAgICBzaW1wbHkgZHVtcHMgaXQgdG8gaXRzIHN0YW5kYXJkIG91dHB1dC4KKworICAoKikgbWVtPTx4eHg+TQorCisgICAgICBOb3JtYWxseSB0aGUga2VybmVsIHdpbGwgd29yayBvdXQgaG93IG11Y2ggU0RSQU0gaXQgaGFzIGJ5IHJlYWRpbmcgdGhlCisgICAgICBTRFJBTSBjb250cm9sbGVyIHJlZ2lzdGVycy4gVGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoaXMKKyAgICAgIG9wdGlvbi4gVGhpcyBhbGxvd3MgdGhlIGtlcm5lbCB0byBiZSB0b2xkIHRoYXQgaXQgaGFzIDx4eHg+IG1lZ2FieXRlcyBvZgorICAgICAgbWVtb3J5IGF2YWlsYWJsZS4KKworICAoKikgaW5pdD08cHJvZz4gWzxhcmc+IFs8YXJnPiBbPGFyZz4gLi4uXV1dCisKKyAgICAgIFRoaXMgdGVsbHMgdGhlIGtlcm5lbCB3aGF0IHByb2dyYW0gdG8gcnVuIGluaXRpYWxseS4gQnkgZGVmYXVsdCB0aGlzIGlzCisgICAgICAvc2Jpbi9pbml0LCBidXQgL3NiaW4vc2FzaCBvciAvYmluL3NoIGFyZSBjb21tb24gYWx0ZXJuYXRpdmVzLgorCisgICgqKSB2ZGM9Li4uCisKKyAgICAgIFRoaXMgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIE1COTM0OTMgY29tcGFuaW9uIGNoaXAgdmlzdWFsIGRpc3BsYXkKKyAgICAgIGRyaXZlci4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2Z1aml0c3UvbWI5MzQ5My92ZGMudHh0IGZvciBtb3JlCisgICAgICBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvY2xvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9jbG9jay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZDM1MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvY2xvY2sudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0Nsb2NrIHNjYWxpbmcKKy0tLS0tLS0tLS0tLS0KKworVGhlIGtlcm5lbCBzdXBwb3J0cyBzY2FsaW5nIG9mIENMQ0suQ01PREUsIENMQ0suQ00gYW5kIENMS0MuUDAgY2xvY2sKK3JlZ2lzdGVycy4gSWYgYnVpbHQgd2l0aCBDT05GSUdfUE0gYW5kIENPTkZJR19TWVNDVEwgb3B0aW9ucyBlbmFibGVkLCBmb3VyCitleHRyYSBmaWxlcyB3aWxsIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IC9wcm9jL3N5cy9wbS8uIFJlYWRpbmcgdGhlc2UgZmlsZXMKK3dpbGwgc2hvdzoKKworICAgICAgcDAJCS0tIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFAwIGJpdCBpbiBDTEtDIHJlZ2lzdGVyLgorICAgICAgY20JCS0tIGN1cnJlbnQgdmFsdWUgb2YgdGhlIENNIGJpdHMgaW4gQ0xLQyByZWdpc3Rlci4KKyAgICAgIGNtb2RlCQktLSBjdXJyZW50IHZhbHVlIG9mIHRoZSBDTU9ERSBiaXRzIGluIENMS0MgcmVnaXN0ZXIuCisKK09uIGFsbCBib2FyZHMsIHRoZSAncDAnIGZpbGUgc2hvdWxkIGFsc28gYmUgd3JpdGFibGUsIGFuZCBlaXRoZXIgJzEnIG9yICcwJworY2FuIGJlIHJld3JpdHRlbiwgdG8gc2V0IG9yIGNsZWFyIHRoZSBDTEtDX1AwIGJpdCByZXNwZWN0aXZlbHksIGhlbmNlCitjb250cm9sbGluZyB3aGV0aGVyIHRoZSByZXNvdXJjZSBidXMgcmF0ZSBjbG9jayBpcyBoYWx2ZWQuCisKK1RoZSAnY20nIGZpbGUgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIG9uIGFsbCBib2FyZHMuICcwJyBjYW4gYmUgd3JpdHRlbiB0byBpdAordG8gc2hpZnQgdGhlIGJvYXJkIGludG8gSGlnaC1TcGVlZCBtb2RlIChub3JtYWwpLCBhbmQgJzEnIGNhbiBiZSB3cml0dGVuIHRvCitzaGlmdCB0aGUgYm9hcmQgaW50byBNZWRpdW0tU3BlZWQgbW9kZS4gU2VsZWN0aW5nIExvdy1TcGVlZCBtb2RlIGlzIG5vdAorc3VwcG9ydGVkIGJ5IHRoaXMgaW50ZXJmYWNlLCBldmVuIHRob3VnaCBzb21lIENQVXMgZG8gc3VwcG9ydCBpdC4KKworT24gdGhlIGJvYXJkcyB3aXRoIEZSNDA1IENQVSAoaS5lLiBDQjYwIGFuZCBDQjcwKSwgdGhlICdjbW9kZScgZmlsZSBpcyBhbHNvCit3cml0YWJsZSwgYWxsb3dpbmcgdGhlIENQVSBjb3JlIHNwZWVkIChhbmQgb3RoZXIgY2xvY2sgc3BlZWRzKSB0byBiZQorY29udHJvbGxlZCBmcm9tIHVzZXJzcGFjZS4KKworCitEZXRlcm1pbmluZyBjdXJyZW50IGFuZCBwb3NzaWJsZSBzZXR0aW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGN1cnJlbnQgc3RhdGUgYW5kIHRoZSBhdmFpbGFibGUgbWFza3MgY2FuIGJlIGZvdW5kIGluIC9wcm9jL2NwdWluZm8uIEZvcgorZXhhbXBsZSwgb24gdGhlIENCNzA6CisKKwkjIGNhdCAvcHJvYy9jcHVpbmZvCisJQ1BVLVNlcmllczogICAgIGZyNDAwCisJQ1BVLUNvcmU6ICAgICAgIGZyNDA1LCBncjAtMzEsIEJFLCBDQ0NSCisJQ1BVOiAgICAgICAgICAgIG1iOTM0MDUKKwlNTVU6ICAgICAgICAgICAgUHJvdAorCUZQLU1lZGlhOiAgICAgICBmcjAtMzEsIE1lZGlhCisJU3lzdGVtOiAgICAgICAgIG1iOTMwOTEtY2I3MCwgbWI5MzA5MC1tYjAwCisJUE0tQ29udHJvbHM6ICAgIGNtb2RlPTB4ZDMxZiwgY209MHgzLCBwMD0weDMsIHN1c3BlbmQ9MHg5CisJUE0tU3RhdHVzOiAgICAgIGNtb2RlPTMsIGNtPTAsIHAwPTAKKwlDbG9jay1JbjogICAgICAgNTAuMDAgTUh6CisJQ2xvY2stQ29yZTogICAgIDMwMC4wMCBNSHoKKwlDbG9jay1TRFJBTTogICAgMTAwLjAwIE1IegorCUNsb2NrLUNCdXM6ICAgICAxMDAuMDAgTUh6CisJQ2xvY2stUmVzOiAgICAgIDUwLjAwIE1IegorCUNsb2NrLUV4dDogICAgICA1MC4wMCBNSHoKKwlDbG9jay1EU1U6ICAgICAgMjUuMDAgTUh6CisJQm9nb01pcHM6ICAgICAgIDMwMC4wMAorCitBbmQgb24gdGhlIFBESywgdGhlIFBNIGxpbmVzIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOgorCisJUE0tQ29udHJvbHM6ICAgIGNtPTB4MywgcDA9MHgzLCBzdXNwZW5kPTB4OQorCVBNLVN0YXR1czogICAgICBjbW9kZT05LCBjbT0wLCBwMD0wCisKK1RoZSBQTS1Db250cm9scyBsaW5lLCBpZiBwcmVzZW50LCB3aWxsIGluZGljYXRlIHdoaWNoIC9wcm9jL3N5cy9wbSBmaWxlcyBjYW4KK2JlIHNldCB0byB3aGF0IHZhbHVlcy4gVGhlIHNwZWNpZmljYXRpb24gdmFsdWVzIGFyZSBiaXRtYXNrczsgc28sIGZvciBleGFtcGxlLAorInN1c3BlbmQ9MHg5IiBpbmRpY2F0ZXMgdGhhdCAwIGFuZCAzIGNhbiBiZSB3cml0dGVuIHZhbGlkbHkgdG8KKy9wcm9jL3N5cy9wbS9zdXNwZW5kLgorCitUaGUgUE0tQ29udHJvbHMgbGluZSB3aWxsIG9ubHkgYmUgcHJlc2VudCBpZiBDT05GSUdfUE0gaXMgY29uZmlndXJlZCB0byBZLgorCitUaGUgUE0tU3RhdHVzIGxpbmUgaW5kaWNhdGVzIHdoaWNoIGNsb2NrIGNvbnRyb2xzIGFyZSBzZXQgdG8gd2hpY2ggdmFsdWUuIElmCit0aGUgZmlsZSBjYW4gYmUgcmVhZCwgdGhlbiB0aGUgc3VzcGVuZCB2YWx1ZSBtdXN0IGJlIDAsIGFuZCBzbyB0aGF0J3Mgbm90CitpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvY29uZmlndXJpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9jb25maWd1cmluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlNzZhMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvY29uZmlndXJpbmcudHh0CkBAIC0wLDAgKzEsMTI1IEBACisJCSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkgICBGVUpJVFNVIEZSLVYgTElOVVggS0VSTkVMIENPTkZJR1VSQVRJT04KKwkJICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09PT09PT09PT09PT09PT09PQorQ09ORklHVVJBVElPTiBPUFRJT05TCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG1vc3QgaW1wb3J0YW50IHNldHRpbmcgaXMgaW4gdGhlICJNTVUgc3VwcG9ydCBvcHRpb25zIiB0YWIgKHRoZSBmaXJzdAorcHJlc2VudGVkIGluIHRoZSBjb25maWd1cmF0aW9uIHRvb2xzIGF2YWlsYWJsZSk6CisKKyAoKikgIktlcm5lbCBUeXBlIgorCisgICAgIFRoaXMgb3B0aW9ucyBhbGxvd3Mgc2VsZWN0aW9uIG9mIG5vcm1hbCwgTU1VLXJlcXVpcmluZyBsaW51eCwgYW5kIHVDbGludXgKKyAgICAgKHdoaWNoIGRvZXNuJ3QgcmVxdWlyZSBhbiBNTVUgYW5kIGRvZXNuJ3QgaGF2ZSBpbnRlci1wcm9jZXNzIHByb3RlY3Rpb24pLgorCitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc2V0dGluZ3MgaW4gdGhlICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiIHNlY3Rpb24gb2YKK3RoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4KKworICgqKSAiQ1BVIgorCisgICAgIFRoZSByZWdpc3RlciBhbmQgaW5zdHJ1Y3Rpb24gc2V0cyBhdCB0aGUgY29yZSBvZiB0aGUgcHJvY2Vzc29yLiBUaGlzIGNhbgorICAgICBvbmx5IGJlIHNldCB0byAiRlI0MHgvNDV4LzU1eCIgYXQgdGhlIG1vbWVudCAtIGJ1dCB0aGlzIHBlcm1pdHMgdXNhZ2Ugb2YKKyAgICAgdGhlIGtlcm5lbCB3aXRoIE1COTMwOTEgQ0IxMCwgQ0IxMSwgQ0IzMCwgQ0I0MSwgQ0I2MCwgQ0I3MCBhbmQgQ0I0NTEKKyAgICAgQ1BVIGJvYXJkcywgYW5kIHdpdGggdGhlIE1COTMwOTMgUERLIGJvYXJkLgorCisgKCopICJTeXN0ZW0iCisKKyAgICAgVGhpcyBvcHRpb24gYWxsb3dzIGEgY2hvaWNlIG9mIGJhc2ljIHN5c3RlbS4gVGhpcyBnb3Zlcm5zIHRoZSBwZXJpcGhlcmFscworICAgICB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUuCisKKyAoKikgIk1vdGhlcmJvYXJkIgorCisgICAgIFRoaXMgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIG1vdGhlcmJvYXJkIGJlaW5nIHVzZWQsIGFuZCB0aGUgcGVyaXBoZXJhbHMKKyAgICAgdXBvbiBpdC4gQ3VycmVudGx5IG9ubHkgIk1COTMwOTAtTUIwMCIgY2FuIGJlIHNldCBoZXJlLgorCisgKCopICJEZWZhdWx0IGNhY2hlLXdyaXRlIG1vZGUiCisKKyAgICAgVGhpcyBjb250cm9scyB0aGUgaW5pdGlhbCBkYXRhIGNhY2hlIHdyaXRlIG1hbmFnZW1lbnQgbW9kZS4gQnkgZGVmYXVsdAorICAgICBXcml0ZS1UaHJvdWdoIGlzIHNlbGVjdGVkLCBidXQgV3JpdGUtQmFjayAoQ29weS1CYWNrKSBjYW4gYWxzbyBiZQorICAgICBzZWxlY3RlZC4gVGhpcyBjYW4gYmUgY2hhbmdlZCBkeW5hbWljYWxseSBvbmNlIHRoZSBrZXJuZWwgaXMgcnVubmluZyAoc2VlCisgICAgIGZlYXR1cmVzLnR4dCkuCisKK1RoZXJlIGFyZSBzb21lIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlICJHZW5lcmFsCitTZXR1cCIgc2VjdGlvbiBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG9vOgorCisgKCopICJSZXNlcnZlIG1lbW9yeSB1bmNhY2hlZCBmb3IgKFBDSSkgRE1BIgorCisgICAgIFRoaXMgcmVxdWVzdHMgdGhhdCBhIHVDbGludXgga2VybmVsIHNldCBhc2lkZSBzb21lIG1lbW9yeSBpbiBhbiB1bmNhY2hlZAorICAgICB3aW5kb3cgZm9yIHRoZSB1c2UgYXMgY29uc2lzdGVudCBETUEgbWVtb3J5IChtYWlubHkgZm9yIFBDSSkuIEF0IGxlYXN0IGEKKyAgICAgbWVnYWJ5dGUgd2lsbCBiZSBhbGxvY2F0ZWQgaW4gdGhpcyB3YXksIHBvc3NpYmx5IG1vcmUuIEFueSBtZW1vcnkgc28KKyAgICAgcmVzZXJ2ZWQgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGZvciBub3JtYWwgYWxsb2NhdGlvbnMuCisKKyAoKikgIktlcm5lbCBzdXBwb3J0IGZvciBFTEYtRkRQSUMgYmluYXJpZXMiCisKKyAgICAgVGhpcyBlbmFibGVzIHRoZSBiaW5hcnktZm9ybWF0IGRyaXZlciBmb3IgdGhlIG5ldyBGRFBJQyBFTEYgYmluYXJpZXMgdGhhdAorICAgICB0aGlzIHBsYXRmb3JtIG5vcm1hbGx5IHVzZXMuIFRoZXNlIGJpbmFyaWVzIGFyZSB0b3RhbGx5IHJlbG9jYXRhYmxlIC0KKyAgICAgdGhlaXIgc2VwYXJhdGUgc2VjdGlvbnMgY2FuIHJlbG9jYXRlZCBpbmRlcGVuZGVudGx5LCBhbGxvd2luZyB0aGVtIHRvIGJlCisgICAgIHNoYXJlZCBvbiB1Q2xpbnV4IHdoZXJlIHBvc3NpYmxlLiBUaGlzIHNob3VsZCBub3JtYWxseSBiZSBlbmFibGVkLgorCisgKCopICJLZXJuZWwgaW1hZ2UgcHJvdGVjdGlvbiIKKworICAgICBUaGlzIG1ha2VzIHRoZSBwcm90ZWN0aW9uIHJlZ2lzdGVyIGdvdmVybmluZyBhY2Nlc3MgdG8gdGhlIGNvcmUga2VybmVsCisgICAgIGltYWdlIHByb2hpYml0IGFjY2VzcyBieSB1c2Vyc3BhY2UgcHJvZ3JhbXMuIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbgorICAgICB1Q2xpbnV4IG9ubHkuCisKK1RoZXJlIGFyZSBhbHNvIGEgbnVtYmVyIG9mIHNldHRpbmdzIGluIHRoZSAiS2VybmVsIEhhY2tpbmciIHNlY3Rpb24gb2YgdGhlCitrZXJuZWwgY29uZmlndXJhdGlvbiBlc3BlY2lhbGx5IGZvciBkZWJ1Z2dpbmcgYSBrZXJuZWwgb24gdGhpcworYXJjaGl0ZWN0dXJlLiBTZWUgdGhlICJnZGJzdHViLnR4dCIgZmlsZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhvc2UuCisKKworPT09PT09PT09PT09PT09PT09PT09PQorREVGQVVMVCBDT05GSUdVUkFUSU9OUworPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUga2VybmVsIHNvdXJjZXMgaW5jbHVkZSBhIG51bWJlciBvZiBleGFtcGxlIGRlZmF1bHQgY29uZmlndXJhdGlvbnM6CisKKyAoKikgZGVmY29uZmlnLW1iOTMwOTEKKworICAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQjkzMDkxLVZESyB3aXRoIGJvdGggQ1BVIGJvYXJkIGFuZAorICAgICBNQjkzMDkwLU1CMDAgbW90aGVyYm9hcmQgcnVubmluZyB1Q2xpbnV4LgorCisKKyAoKikgZGVmY29uZmlnLW1iOTMwOTEtZmIKKworICAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQjkzMDkxLVZESyB3aXRoIENQVSBib2FyZCwKKyAgICAgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkLCBhbmQgREFWIGJvYXJkIHJ1bm5pbmcgdUNsaW51eC4KKyAgICAgSW5jbHVkZXMgZnJhbWVidWZmZXIgZHJpdmVyLgorCisKKyAoKikgZGVmY29uZmlnLW1iOTMwOTMKKworICAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQjkzMDkzLVBESyBib2FyZCBydW5uaW5nIHVDbGludXguCisKKworICgqKSBkZWZjb25maWctY2I3MC1zdGFuZGFsb25lCisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5MS1WREsgd2l0aCBvbmx5IENCNzAgQ1BVIGJvYXJkCisgICAgIHJ1bm5pbmcgdUNsaW51eC4gVGhpcyB3aWxsIHVzZSB0aGUgQ0I3MCdzIERNOTAwMCBmb3IgbmV0d29yayBhY2Nlc3MuCisKKworICgqKSBkZWZjb25maWctbW11CisKKyAgICAgRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgTUI5MzA5MS1WREsgd2l0aCBib3RoIENCNDUxIENQVSBib2FyZCBhbmQKKyAgICAgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkIHJ1bm5pbmcgTU1VIGxpbnV4LgorCisgKCopIGRlZmNvbmZpZy1tbXUtYXVkaW8KKworICAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQjkzMDkxLVZESyB3aXRoIENCNDUxIENQVSBib2FyZCwgREFWCisgICAgIGJvYXJkLCBhbmQgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkIHJ1bm5pbmcgTU1VIGxpbnV4LiBJbmNsdWRlcworICAgICBhdWRpbyBkcml2ZXIuCisKKyAoKikgZGVmY29uZmlnLW1tdS1mYgorCisgICAgIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1COTMwOTEtVkRLIHdpdGggQ0I0NTEgQ1BVIGJvYXJkLCBEQVYKKyAgICAgYm9hcmQsIGFuZCBNQjkzMDkwLU1CMDAgbW90aGVyYm9hcmQgcnVubmluZyBNTVUgbGludXguIEluY2x1ZGVzCisgICAgIGZyYW1lYnVmZmVyIGRyaXZlci4KKworICgqKSBkZWZjb25maWctbW11LXN0YW5kYWxvbmUKKworICAgICBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQjkzMDkxLVZESyB3aXRoIG9ubHkgQ0I0NTEgQ1BVIGJvYXJkCisgICAgIHJ1bm5pbmcgTU1VIGxpbnV4LgorCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9mZWF0dXJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2ZlYXR1cmVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTIwYzBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9mZWF0dXJlcy50eHQKQEAgLTAsMCArMSwzMTAgQEAKKwkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSBGVUpJVFNVIEZSLVYgTElOVVggRkVBVFVSRVMKKwkJCSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBrZXJuZWwgcG9ydCBoYXMgYSBudW1iZXIgb2YgZmVhdHVyZXMgb2Ygd2hpY2ggdGhlIHVzZXIgc2hvdWxkIGJlIGF3YXJlOgorCisgKCopIExpbnV4IGFuZCB1Q2xpbnV4CisKKyAgICAgVGhlIEZSLVYgYXJjaGl0ZWN0dXJlIHBvcnQgc3VwcG9ydHMgYm90aCBub3JtYWwgTU1VIGxpbnV4IGFuZCB1Q2xpbnV4IG91dAorICAgICBvZiB0aGUgc2FtZSBzb3VyY2VzLgorCisKKyAoKikgQ1BVIHN1cHBvcnQKKworICAgICBTdXBwb3J0IGZvciB0aGUgRlI0MDEsIEZSNDAzLCBGUjQwNSwgRlI0NTEgYW5kIEZSNTU1IENQVXMgc2hvdWxkIHdvcmsgd2l0aAorICAgICB0aGUgc2FtZSB1Q2xpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uLgorCisgICAgIEluIG5vcm1hbCAoTU1VKSBMaW51eCBtb2RlLCBvbmx5IHRoZSBGUjQ1MSBDUFUgd2lsbCB3b3JrIGFzIHRoYXQgaXMgdGhlCisgICAgIG9ubHkgb25lIHdpdGggYSBzdWl0YWJseSBmZWF0dXJlZCBDUFUuCisKKyAgICAgVGhlIGtlcm5lbCBpcyB3cml0dGVuIGFuZCBjb21waWxlZCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgb25seSB0aGUKKyAgICAgYm90dG9tIDMyIEdSIHJlZ2lzdGVycyBhbmQgbm8gRlIgcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBieSB0aGUga2VybmVsCisgICAgIGl0c2VsZiwgaG93ZXZlciBhbGwgZXh0cmEgdXNlcnNwYWNlIHJlZ2lzdGVycyB3aWxsIGJlIHNhdmVkIG9uIGNvbnRleHQKKyAgICAgc3dpdGNoLiBOb3RlIHRoYXQgc2luY2UgbW9zdCBDUFVzIGNhbid0IHN1cHBvcnQgbGF6eSBzd2l0Y2hpbmcsIG5vIGF0dGVtcHQKKyAgICAgaXMgbWFkZSB0byBkbyBsYXp5IHJlZ2lzdGVyIHNhdmluZyB3aGVyZSB0aGF0IHdvdWxkIGJlIHBvc3NpYmxlIChGUjU1NQorICAgICBvbmx5IGN1cnJlbnRseSkuCisKKworICgqKSBCb2FyZCBzdXBwb3J0CisKKyAgICAgVGhlIGJvYXJkIG9uIHdoaWNoIHRoZSBrZXJuZWwgd2lsbCBydW4gY2FuIGJlIGNvbmZpZ3VyZWQgb24gdGhlICJQcm9jZXNzb3IKKyAgICAgdHlwZSBhbmQgZmVhdHVyZXMiIGNvbmZpZ3VyYXRpb24gdGFiLgorCisgICAgIFNldCB0aGUgU3lzdGVtIHRvICJNQjkzMDkzLVBESyIgdG8gYm9vdCBmcm9tIHRoZSBNQjkzMDkzIChGUjQwMykgUERLLgorCisgICAgIFNldCB0aGUgU3lzdGVtIHRvICJNQjkzMDkxLVZESyIgdG8gYm9vdCBmcm9tIHRoZSBDQjExLCBDQjMwLCBDQjQxLCBDQjYwLAorICAgICBDQjcwIG9yIENCNDUxIFZESyBib2FyZHMuIFNldCB0aGUgTW90aGVyYm9hcmQgc2V0dGluZyB0byAiTUI5MzA5MC1NQjAwIiB0bworICAgICBib290IHdpdGggdGhlIHN0YW5kYXJkIEFUQTkwNTkwQiBWREsgbW90aGVyYm9hcmQsIGFuZCBzZXQgaXQgdG8gIk5vbmUiIHRvCisgICAgIGJvb3Qgd2l0aG91dCBhbnkgbW90aGVyYm9hcmQuCisKKworICgqKSBCaW5hcnkgRm9ybWF0cworCisgICAgIFRoZSBvbmx5IHVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0IHN1cHBvcnRlZCBpcyBGRFBJQyBFTEYuIE5vcm1hbCBFTEYsIEZMQVQKKyAgICAgYW5kIEFPVVQgYmluYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgorCisgICAgIEZEUElDIEVMRiBzdXBwb3J0cyBzaGFyZWQgbGlicmFyeSBhbmQgcHJvZ3JhbSBpbnRlcnByZXRlciBmYWNpbGl0aWVzLgorCisKKyAoKikgU2NoZWR1bGVyIFNwZWVkCisKKyAgICAgVGhlIGtlcm5lbCBzY2hlZHVsZXIgcnVucyBhdCAxMDBIeiBpcnJlc3BlY3RpdmUgb2YgdGhlIGNsb2NrIHNwZWVkIG9uIHRoaXMKKyAgICAgYXJjaGl0ZWN0dXJlLiBUaGlzIHZhbHVlIGlzIHNldCBpbiBhc20vcGFyYW0uaCAoc2VlIHRoZSBIWiBtYWNybyBkZWZpbmVkCisgICAgIHRoZXJlKS4KKworCisgKCopIE5vcm1hbCAoTU1VKSBMaW51eCBNZW1vcnkgTGF5b3V0LgorCisgICAgIFNlZSBtbXUtbGF5b3V0LnR4dCBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbm9ybWFsIGxpbnV4CisgICAgIG1lbW9yeSBsYXlvdXQKKworICAgICBTZWUgaW5jbHVkZS9hc20tZnJ2L21lbS1sYXlvdXQuaCBmb3IgY29uc3RhbnRzIHBlcnRhaW5pbmcgdG8gdGhlIG1lbW9yeQorICAgICBsYXlvdXQuCisKKyAgICAgU2VlIGluY2x1ZGUvYXNtLWZydi9tYi1yZWdzLmggZm9yIHRoZSBjb25zdGFudHMgcGVydGFpbmluZyB0byB0aGUgSS9PIGJ1cworICAgICBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uCisKKworICgqKSB1Q2xpbnV4IE1lbW9yeSBMYXlvdXQKKworICAgICBUaGUgbWVtb3J5IGxheW91dCB1c2VkIGJ5IHRoZSB1Q2xpbnV4IGtlcm5lbCBpcyBhcyBmb2xsb3dzOgorCisJMHgwMDAwMDAwMCAtIDB4MDAwMDBGRkYJCU51bGwgcG9pbnRlciBjYXRjaCBwYWdlCisJMHgyMDAwMDAwMCAtIDB4MjAwRkZGRkYgQ1MyIyAgICBbUERLXSBGUEdBCisJMHhDMDAwMDAwMCAtIDB4Q0ZGRkZGRkYJCVNEUkFNCisJMHhDMDAwMDAwMAkJCUJhc2Ugb2YgTGludXgga2VybmVsIGltYWdlCisJMHhFMDAwMDAwMCAtIDB4RUZGRkZGRkYJQ1MyIwlbVkRLXSBTTEJVUy9QQ0kgd2luZG93CisJMHhGMDAwMDAwMCAtIDB4RjBGRkZGRkYJQ1M1IwlNQjkzNDkzIENTQyBhcmVhIChEQVYgZGF1Z2h0ZXIgYm9hcmQpCisJMHhGMTAwMDAwMCAtIDB4RjFGRkZGRkYJQ1M3IwlbQ0I3MC9DQjQ1MV0gQ1BVLWNhcmQgUENNQ0lBIHBvcnQgc3BhY2UKKwkweEZDMDAwMDAwIC0gMHhGQzBGRkZGRglDUzEjCVtWREtdIE1CODY5NDMgY29uZmlnIHNwYWNlCisJMHhGQzEwMDAwMCAtIDB4RkMxRkZGRkYJQ1M2IwlbQ0I3MC9DQjQ1MV0gQ1BVLWNhcmQgRE05MDAwIE5JQyBzcGFjZQorCTB4RkMxMDAwMDAgLSAweEZDMUZGRkZGCUNTNiMJW1BES10gQVg4ODc5NiBOSUMgc3BhY2UKKwkweEZDMjAwMDAwIC0gMHhGQzJGRkZGRglDUzMjCU1COTM0OTMgQ1NSIGFyZWEgKERBViBkYXVnaHRlciBib2FyZCkKKwkweEZEMDAwMDAwIC0gMHhGREZGRkZGRglDUzQjCVtDQjcwL0NCNDUxXSBDUFUtY2FyZCBleHRyYSBmbGFzaCBzcGFjZQorCTB4RkUwMDAwMDAgLSAweEZFRkZGRkZGCQlJbnRlcm5hbCBDUFUgcGVyaXBoZXJhbHMKKwkweEZGMDAwMDAwIC0gMHhGRjFGRkZGRglDUzAjCUZsYXNoIDEKKwkweEZGMjAwMDAwIC0gMHhGRjNGRkZGRglDUzAjCUZsYXNoIDIKKwkweEZGQzAwMDAwIC0gMHhGRkMwMDAxRglDUzAjCVtWREtdIEZQR0EKKworICAgICBUaGUga2VybmVsIHJlYWRzIHRoZSBzaXplIG9mIHRoZSBTRFJBTSBmcm9tIHRoZSBtZW1vcnkgYnVzIGNvbnRyb2xsZXIKKyAgICAgcmVnaXN0ZXJzIGJ5IGRlZmF1bHQuCisKKyAgICAgVGhlIGtlcm5lbCBpbml0aWFsaXNhdGlvbiBjb2RlICgxKSBhZGp1c3RzIHRoZSBTRFJBTSBiYXNlIGFkZHJlc3NlcyB0bworICAgICBtb3ZlIHRoZSBTRFJBTSB0byBkZXNpcmVkIGFkZHJlc3MsICgyKSBtb3ZlcyB0aGUga2VybmVsIGltYWdlIGRvd24gdG8gdGhlCisgICAgIGJvdHRvbSBvZiBTRFJBTSwgKDMpIGFkanVzdHMgdGhlIGJ1cyBjb250cm9sbGVyIHJlZ2lzdGVycyB0byBtb3ZlIEkvTworICAgICB3aW5kb3dzLCBhbmQgKDQpIHJlYXJyYW5nZXMgdGhlIHByb3RlY3Rpb24gcmVnaXN0ZXJzIHRvIHByb3RlY3QgYWxsIG9mCisgICAgIHRoaXMuCisKKyAgICAgVGhlIHJlYXNvbnMgZm9yIGRvaW5nIHRoaXMgYXJlOiAoMSkgdGhlIHBhZ2UgYXQgYWRkcmVzcyAwIHNob3VsZCBiZQorICAgICBpbmFjY2Vzc2libGUgc28gdGhhdCBOVUxMIHBvaW50ZXIgZXJyb3JzIGNhbiBiZSBjYXVnaHQ7IGFuZCAoMikgdGhlIGJvdHRvbQorICAgICB0aHJlZSBxdWFydGVycyBhcmUgbGVmdCB1bm9jY3VwaWVkIHNvIHRoYXQgYW4gRlItViBDUFUgd2l0aCBhbiBNTVUgY2FuIHVzZQorICAgICBpdCBmb3IgdmlydHVhbCB1c2Vyc3BhY2UgbWFwcGluZ3MuCisKKyAgICAgU2VlIGluY2x1ZGUvYXNtLWZydi9tZW0tbGF5b3V0LmggZm9yIGNvbnN0YW50cyBwZXJ0YWluaW5nIHRvIHRoZSBtZW1vcnkKKyAgICAgbGF5b3V0LgorCisgICAgIFNlZSBpbmNsdWRlL2FzbS1mcnYvbWItcmVncy5oIGZvciB0aGUgY29uc3RhbnRzIHBlcnRhaW5pbmcgdG8gdGhlIEkvTyBidXMKKyAgICAgY29udHJvbGxlciBjb25maWd1cmF0aW9uLgorCisKKyAoKikgdUNsaW51eCBNZW1vcnkgUHJvdGVjdGlvbgorCisgICAgIEEgREFNUFIgcmVnaXN0ZXIgaXMgdXNlZCB0byBjb3ZlciB0aGUgZW50aXJlIHJlZ2lvbiB1c2VkIGZvciBJL08KKyAgICAgKDB4RTAwMDAwMDAgLSAweEZGRkZGRkZGKS4gVGhpcyBwZXJtaXRzIHRoZSBrZXJuZWwgdG8gbWFrZSB1bmNhY2hlZAorICAgICBhY2Nlc3NlcyB0byB0aGlzIHJlZ2lvbi4gVXNlcnNwYWNlIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYWNjZXNzIGl0LgorCisgICAgIFRoZSBEQU1QUi9JQU1QUiBwcm90ZWN0aW9uIHJlZ2lzdGVycyBub3QgaW4gdXNlIGZvciBhbnkgb3RoZXIgcHVycG9zZSBhcmUKKyAgICAgdGlsZWQgb3ZlciB0aGUgdG9wIG9mIHRoZSBTRFJBTSBzdWNoIHRoYXQ6CisKKwkoMSkgVGhlIGNvcmUga2VybmVsIGltYWdlIGlzIGNvdmVyZWQgYnkgYXMgc21hbGwgYSB0aWxlIGFzIHBvc3NpYmxlCisgICAgICAgICAgICBncmFudGluZyBvbmx5IHRoZSBrZXJuZWwgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGRhdGEsIHdoaWxzdAorICAgICAgICAgICAgbWFraW5nIHN1cmUgbm8gU0RSQU0gaXMgYWN0dWFsbHkgbWFkZSB1bmF2YWlsYWJsZSBieSB0aGlzIGFwcHJvYWNoLgorCisJKDIpIEFsbCBvdGhlciB0aWxlcyBhcmUgYXJyYW5nZWQgdG8gcGVybWl0IHVzZXJzcGFjZSBhY2Nlc3MgdG8gdGhlIHJlc3QKKyAgICAgICAgICAgIG9mIHRoZSBTRFJBTS4KKworICAgICBCYXJyaW5nIHBvaW50ICgxKSwgdGhlcmUgaXMgbm90aGluZyB0byBwcm90ZWN0IGtlcm5lbCBkYXRhIGFnYWluc3QKKyAgICAgdXNlcnNwYWNlIGRhbWFnZSAtIGJ1dCB0aGlzIGlzIHVDbGludXguCisKKworICgqKSBFeGNlcHRpb25zIGFuZCBGaXh1cHMKKworICAgICBTaW5jZSB0aGUgRlI0MHggYW5kIEZSNTV4IENQVXMgdGhhdCBkbyBub3QgaGF2ZSBmdWxsIE1NVXMgZ2VuZXJhdGUKKyAgICAgaW1wcmVjaXNlIGRhdGEgZXJyb3IgZXhjZXB0aW9ucywgdGhlcmUgYXJlIGN1cnJlbnRseSBubyBhdXRvbWF0aWMgZml4dXAKKyAgICAgc2VydmljZXMgYXZhaWxhYmxlIGluIHVDbGludXguIFRoaXMgaW5jbHVkZXMgbWlzYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisgICAgIGZpeHVwcy4KKworICAgICBVc2Vyc3BhY2UgRUZBVUxUIGVycm9ycyBjYW4gYmUgdHJhcHBlZCBieSBpc3N1aW5nIGEgTUVNQkFSIGluc3RydWN0aW9uIGFuZAorICAgICBmb3JjaW5nIHRoZSBmYXVsdCB0byBoYXBwZW4gdGhlcmUuCisKKyAgICAgT24gdGhlIEZSNDUxLCBob3dldmVyLCBkYXRhIGV4Y2VwdGlvbnMgYXJlIG1vc3RseSBwcmVjaXNlLCBhbmQgc28KKyAgICAgZXhjZXB0aW9uIGZpeHVwIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkIGFzIG5vcm1hbC4KKworCisgKCopIFVzZXJzcGFjZSBCcmVha3BvaW50cworCisgICAgIFRoZSBwdHJhY2UoKSBzeXN0ZW0gY2FsbCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHVzZXJzcGFjZSBkZWJ1Z2dpbmcKKyAgICAgZmVhdHVyZXM6CisKKwkoMSkgSGFyZHdhcmUgYXNzaXN0ZWQgc2luZ2xlIHN0ZXAuCisKKwkoMikgQnJlYWtwb2ludCB2aWEgdGhlIEZSLVYgIkJSRUFLIiBpbnN0cnVjdGlvbi4KKworCSgzKSBCcmVha3BvaW50IHZpYSB0aGUgRlItViAiVElSQSBHUjAsICMxIiBpbnN0cnVjdGlvbi4KKworCSg0KSBTeXNjYWxsIGVudHJ5L2V4aXQgdHJhcC4KKworICAgICBFYWNoIG9mIHRoZSBhYm92ZSBnZW5lcmF0ZXMgYSBTSUdUUkFQLgorCisKKyAoKikgT24tQ2hpcCBTZXJpYWwgUG9ydHMKKworICAgICBUaGUgRlItViBvbi1jaGlwIHNlcmlhbCBwb3J0cyBhcmUgbWFkZSBhdmFpbGFibGUgYXMgdHR5UzAgYW5kIHR0eVMxLiBOb3RlCisgICAgIHRoYXQgaWYgdGhlIEdEQiBzdHViIGlzIGNvbXBpbGVkIGluLCB0dHlTMSB3aWxsIG5vdCBhY3R1YWxseSBiZSBhdmFpbGFibGUKKyAgICAgYXMgaXQgd2lsbCBiZSBiZWluZyB1c2VkIGZvciB0aGUgR0RCIHN0dWIuCisKKyAgICAgVGhlc2UgcG9ydHMgY2FuIGJlIG1hZGUgYnk6CisKKwlta25vZCAvZGV2L3R0eVMwIGMgNCA2NAorCW1rbm9kIC9kZXYvdHR5UzEgYyA0IDY1CisKKworICgqKSBNYXNrYWJsZSBJbnRlcnJ1cHRzCisKKyAgICAgTGV2ZWwgMTUgKE5vbi1tYXNrYWJsZSkgaW50ZXJydXB0cyBhcmUgZGVhbHQgd2l0aCBieSB0aGUgR0RCIHN0dWIgaWYKKyAgICAgcHJlc2VudCwgYW5kIGNhdXNlIGEgcGFuaWMgaWYgbm90LiBJZiB0aGUgR0RCIHN0dWIgaXMgcHJlc2VudCwgdHR5UzEncworICAgICBpbnRlcnJ1cHRzIGFyZSByYXRlZCBhdCBsZXZlbCAxNS4KKworICAgICBBbGwgb3RoZXIgaW50ZXJydXB0cyBhcmUgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgc2V0IG9mIGF2YWlsYWJsZSBwcmlvcml0aWVzCisgICAgIHNvIHRoYXQgbm8gSVJRcyBhcmUgc2hhcmVkIHdoZXJlIHBvc3NpYmxlLiBUaGUgYXJjaCBpbnRlcnJ1cHQgaGFuZGxpbmcKKyAgICAgcm91dGluZXMgYXR0ZW1wdCB0byBkaXNlbnRhbmdsZSB0aGUgdmFyaW91cyBzb3VyY2VzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZQorICAgICBDUFUncyBvd24gbXVsdGlwbGV4b3IsIGFuZCB0aG9zZSBvbiBvZmYtQ1BVIHBlcmlwaGVyYWxzLgorCisKKyAoKikgQWNjZXNzaW5nIFBDSSBEZXZpY2VzCisKKyAgICAgV2hlcmUgUENJIGlzIGF2YWlsYWJsZSwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gZGVhbGluZyB3aXRoIGRyaXZlcnMgdGhhdAorICAgICBhY2Nlc3MgUENJIGRldmljZXMuIFBDSSBkZXZpY2VzIHByZXNlbnQgdGhlaXIgZGF0YSBpbiBsaXR0bGUtZW5kaWFuIGZvcm0sCisgICAgIGJ1dCB0aGUgQ1BVIHNlZXMgaXQgaW4gYmlnLWVuZGlhbiBmb3JtLiBUaGUgbWFjcm9zIGluIGFzbS9pby5oIHRyeSB0byBnZXQKKyAgICAgdGhpcyByaWdodCwgYnV0IG1heSBub3QgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMuLi4KKworCisgKCopIEF4ODg3OTYgRXRoZXJuZXQgRHJpdmVyCisKKyAgICAgVGhlIE1COTMwOTMgUERLIGJvYXJkIGhhcyBhbiBBeDg4Nzk2IGV0aGVybmV0IGNoaXBzZXQgKGFuIE5FMjAwMCBjbG9uZSkuIEEKKyAgICAgZHJpdmVyIGhhcyBiZWVuIHdyaXR0ZW4gdG8gZGVhbCBzcGVjaWZpY2FsbHkgd2l0aCB0aGlzLiBUaGUgZHJpdmVyCisgICAgIHByb3ZpZGVzIE1JSSBzZXJ2aWNlcyBmb3IgdGhlIGNhcmQuCisKKyAgICAgVGhlIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCBieSBydW5uaW5nIG1ha2UgeGNvbmZpZywgYW5kIGdvaW5nIHRvOgorCisJKCopIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKwkgICAgLSB0dXJuIG9uICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IgorCSAgICAoKikgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisJCS0gdHVybiBvbiAiRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpIgorCQktIHR1cm4gb24gIkFYODg3OTYgTkUyMDAwIGNvbXBhdGlibGUgY2hpcHNldCIKKworICAgICBUaGUgZHJpdmVyIGNhbiBiZSBmb3VuZCBpbjoKKworCWRyaXZlcnMvbmV0L2F4ODg3OTYuYworCWluY2x1ZGUvYXNtL2F4ODg3OTYuaAorCisKKyAoKikgV29ya1JBTSBEcml2ZXIKKworICAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNoYXJhY3RlciBkZXZpY2UgdGhhdCBwZXJtaXRzIGFjY2VzcyB0byB0aGUgV29ya1JBTQorICAgICB0aGF0IGNhbiBiZSBmb3VuZCBvbiB0aGUgRlI0NTEgQ1BVLiBFYWNoIHBhZ2UgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGEKKyAgICAgc2VwYXJhdGUgbWlub3IgbnVtYmVyLCB0aGVyZWJ5IHBlcm1pdHRpbmcgZWFjaCBwYWdlIHRvIGhhdmUgaXRzIG93bgorICAgICBmaWxlc3lzdGVtIHBlcm1pc3Npb25zIHNldCBvbiB0aGUgZGV2aWNlIGZpbGUuCisKKyAgICAgVGhlIGRldmljZSBmaWxlcyBzaG91bGQgYmU6CisKKwlta25vZCAvZGV2L2Zydi93b3JrcmFtMCBjIDI0MCAwCisJbWtub2QgL2Rldi9mcnYvd29ya3JhbTEgYyAyNDAgMQorCW1rbm9kIC9kZXYvZnJ2L3dvcmtyYW0yIGMgMjQwIDIKKwkuLi4KKworICAgICBUaGUgZHJpdmVyIHdpbGwgbm90IHBlcm1pdCB0aGUgb3BlbmluZyBvZiBhbnkgZGV2aWNlIGZpbGUgdGhhdCBkb2VzIG5vdAorICAgICBjb3JyZXNwb25kIHRvIGF0IGxlYXN0IGEgcGFydGlhbCBwYWdlIG9mIFdvcmtSQU0uIFNvIHRoZSBmaXJzdCBkZXZpY2UgZmlsZQorICAgICBpcyB0aGUgb25seSBvbmUgYXZhaWxhYmxlIG9uIHRoZSBGUjQ1MS4gSWYgYW55IG90aGVyIENQVSBpcyBkZXRlY3RlZCwgbm9uZQorICAgICBvZiB0aGUgZGV2aWNlcyB3aWxsIGJlIG9wZW5hYmxlLgorCisgICAgIFRoZSBkZXZpY2VzIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIHJlYWQsIHdyaXRlIGFuZCBsbHNlZWssIGFuZCBjYW4gYWxzbyBiZQorICAgICBtbWFwcGVkLiBJZiB0aGV5J3JlIG1tYXBwZWQsIHRoZXkgd2lsbCBvbmx5IG1hcCBhdCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgMHg3ZThubm5ubiBhZGRyZXNzIG9uIGxpbnV4IGFuZCBhdCB0aGUgMHhmZThubm5ubiBhZGRyZXNzIG9uIHVDbGludXguIElmCisgICAgIE1BUF9GSVhFRCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYXBwcm9wcmlhdGUgYWRkcmVzcyB3aWxsIGJlIGNob3NlbiBhbnl3YXkuCisKKyAgICAgVGhlIG1hcHBpbmdzIG11c3QgYmUgTUFQX1NIQVJFRCBub3QgTUFQX1BSSVZBVEUsIGFuZCBtdXN0IG5vdCBiZQorICAgICBQUk9UX0VYRUMuIFRoZXkgbXVzdCBhbHNvIHN0YXJ0IGF0IGZpbGUgb2Zmc2V0IDAsIGFuZCBtdXN0IG5vdCBiZSBsb25nZXIKKyAgICAgdGhhbiBvbmUgcGFnZSBpbiBzaXplLgorCisgICAgIFRoaXMgZHJpdmVyIGNhbiBiZSBjb25maWd1cmVkIGJ5IHJ1bm5pbmcgbWFrZSB4Y29uZmlnLCBhbmQgZ29pbmcgdG86CisKKwkoKikgQ2hhcmFjdGVyIGRldmljZXMKKwkgICAgLSB0dXJuIG9uICJGdWppdHN1IEZSLVYgQ1BVIFdvcmtSQU0gc3VwcG9ydCIKKworCisgKCopIER5bmFtaWMgZGF0YSBjYWNoZSB3cml0ZSBtb2RlIGNoYW5naW5nCisKKyAgICAgSXQgaXMgcG9zc2libGUgdG8gdmlldyBhbmQgdG8gY2hhbmdlIHRoZSBkYXRhIGNhY2hlJ3Mgd3JpdGUgbW9kZSB0aHJvdWdoCisgICAgIHRoZSAvcHJvYy9zeXMvZnJ2L2NhY2hlLW1vZGUgZmlsZSB3aGlsZSB0aGUga2VybmVsIGlzIHJ1bm5pbmcuIFRoZXJlIGFyZQorICAgICB0d28gbW9kZXMgYXZhaWxhYmxlOgorCisJTkFNRQlNRUFOSU5HCisJPT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJd3RocnUJRGF0YSBjYWNoZSBpcyBpbiBXcml0ZS1UaHJvdWdoIG1vZGUKKwl3YmFjawlEYXRhIGNhY2hlIGlzIGluIFdyaXRlLUJhY2svQ29weS1CYWNrIG1vZGUKKworICAgICBUbyByZWFkIHRoZSBjYWNoZSBtb2RlOgorCisJIyBjYXQgL3Byb2Mvc3lzL2Zydi9jYWNoZS1tb2RlCisJd3RocnUKKworICAgICBUbyBjaGFuZ2UgdGhlIGNhY2hlIG1vZGU6CisKKwkjIGVjaG8gd2JhY2sgPi9wcm9jL3N5cy9mcnYvY2FjaGUtbW9kZQorCSMgY2F0IC9wcm9jL3N5cy9mcnYvY2FjaGUtbW9kZQorCXdiYWNrCisKKworICgqKSBNTVUgQ29udGV4dCBJRHMgYW5kIFBpbm5pbmcKKworICAgICBPbiBNTVUgTGludXggdGhlIENQVSBzdXBwb3J0cyB0aGUgY29uY2VwdCBvZiBhIGNvbnRleHQgSUQgaW4gaXRzIE1NVSB0bworICAgICBtYWtlIGl0IG1vcmUgZWZmaWNpZW50IChUTEIgZW50cmllcyBhcmUgbGFiZWxsZWQgd2l0aCBhIGNvbnRleHQgSUQgdG8gbGluaworICAgICB0aGVtIHRvIHNwZWNpZmljIHRhc2tzKS4KKworICAgICBOb3JtYWxseSBvbmNlIGEgY29udGV4dCBJRCBpcyBhbGxvY2F0ZWQsIGl0IHdpbGwgcmVtYWluIGFmZml4ZWQgdG8gYSB0YXNrCisgICAgIG9yIENMT05FX1ZNJ2QgZ3JvdXAgb2YgdGFza3MgZm9yIGFzIGxvbmcgYXMgaXQgZXhpc3RzLiBIb3dldmVyLCBzaW5jZSB0aGUKKyAgICAga2VybmVsIGlzIGNhcGFibGUgb2Ygc3VwcG9ydGluZyBtb3JlIHRhc2tzIHRoYW4gdGhlcmUgYXJlIHBvc3NpYmxlIElECisgICAgIG51bWJlcnMsIHRoZSBrZXJuZWwgd2lsbCBwYXNzIGNvbnRleHQgSURzIGZyb20gb25lIHRhc2sgdG8gYW5vdGhlciBpZgorICAgICB0aGVyZSBhcmUgaW5zdWZmaWNpZW50IGF2YWlsYWJsZS4KKworICAgICBUaGUgY29udGV4dCBJRCBjdXJyZW50bHkgaW4gdXNlIGJ5IGEgdGFzayBjYW4gYmUgdmlld2VkIGluIC9wcm9jOgorCisJIyBncmVwIENYTlIgL3Byb2MvMS9zdGF0dXMKKwlDWE5SOiAxCisKKyAgICAgTm90ZSB0aGF0IGtlcm5lbCB0aHJlYWRzIGRvIG5vdCBoYXZlIGEgdXNlcnNwYWNlIGNvbnRleHQsIGFuZCBzbyB3aWxsIG5vdAorICAgICBzaG93IGEgQ1hOUiBlbnRyeSBpbiB0aGF0IGZpbGUuCisKKyAgICAgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBob3dldmVyLCBpdCBpcyBkZXNpcmFibGUgdG8gcGluIGEgY29udGV4dCBJRCBvbgorICAgICBhIHByb2Nlc3Mgc3VjaCB0aGF0IHRoZSBrZXJuZWwgd29uJ3QgcGFzcyBpdCBvbi4gVGhpcyBjYW4gYmUgZG9uZSBieQorICAgICB3cml0aW5nIHRoZSBwcm9jZXNzIElEIG9mIHRoZSB0YXJnZXQgcHJvY2VzcyB0byBhIHNwZWNpYWwgZmlsZToKKworCSMgZWNobyAxNyA+L3Byb2Mvc3lzL2Zydi9waW4tY3hucgorCisgICAgIFJlYWRpbmcgZnJvbSB0aGUgZmlsZSB3aWxsIHRoZW4gc2hvdyB0aGUgY29udGV4dCBJRCBwaW5uZWQuCisKKwkjIGNhdCAvcHJvYy9zeXMvZnJ2L3Bpbi1jeG5yCisJNAorCisgICAgIFRoZSBjb250ZXh0IElEIHdpbGwgcmVtYWluIHBpbm5lZCBhcyBsb25nIGFzIGFueSBwcm9jZXNzIGlzIHVzaW5nIHRoYXQKKyAgICAgY29udGV4dCwgaS5lLjogd2hlbiB0aGUgYWxsIHRoZSBzdWJzY3JpYmluZyBwcm9jZXNzZXMgaGF2ZSBleGl0ZWQgb3IKKyAgICAgZXhlYydkOyBvciB3aGVuIGFuIHVucGlubmluZyByZXF1ZXN0IGhhcHBlbnM6CisKKwkjIGVjaG8gMCA+L3Byb2Mvc3lzL2Zydi9waW4tY3hucgorCisgICAgIFdoZW4gdGhlcmUgaXNuJ3QgYSBwaW5uZWQgY29udGV4dCwgdGhlIGZpbGUgc2hvd3MgLTE6CisKKwkjIGNhdCAvcHJvYy9zeXMvZnJ2L3Bpbi1jeG5yCisJLTEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2RiaW5pdCBiL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvZ2RiaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTUxN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9nZGJpbml0CkBAIC0wLDAgKzEsMTAyIEBACitzZXQgcmVtb3RlYnJlYWsgMQorCitkZWZpbmUgX2FtcgorCitwcmludGYgIkFNUnggICAgICAgICAgIERBTVIgICAgICAgICAgICAgICAgICAgIElBTVIgICAgICAgICBcbiIKK3ByaW50ZiAiPT09PSAgID09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PVxuIgorcHJpbnRmICJhbXIwIDogTDolMDhseCBQOiUwOGx4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHgwXS5MLF9fZGVidWdfbW11LmRhbXJbMHgwXS5QLF9fZGVidWdfbW11LmlhbXJbMHgwXS5MLF9fZGVidWdfbW11LmlhbXJbMHgwXS5QCitwcmludGYgImFtcjEgOiBMOiUwOGx4IFA6JTA4bHggOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweDFdLkwsX19kZWJ1Z19tbXUuZGFtclsweDFdLlAsX19kZWJ1Z19tbXUuaWFtclsweDFdLkwsX19kZWJ1Z19tbXUuaWFtclsweDFdLlAKK3ByaW50ZiAiYW1yMiA6IEw6JTA4bHggUDolMDhseCA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4Ml0uTCxfX2RlYnVnX21tdS5kYW1yWzB4Ml0uUCxfX2RlYnVnX21tdS5pYW1yWzB4Ml0uTCxfX2RlYnVnX21tdS5pYW1yWzB4Ml0uUAorcHJpbnRmICJhbXIzIDogTDolMDhseCBQOiUwOGx4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHgzXS5MLF9fZGVidWdfbW11LmRhbXJbMHgzXS5QLF9fZGVidWdfbW11LmlhbXJbMHgzXS5MLF9fZGVidWdfbW11LmlhbXJbMHgzXS5QCitwcmludGYgImFtcjQgOiBMOiUwOGx4IFA6JTA4bHggOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweDRdLkwsX19kZWJ1Z19tbXUuZGFtclsweDRdLlAsX19kZWJ1Z19tbXUuaWFtclsweDRdLkwsX19kZWJ1Z19tbXUuaWFtclsweDRdLlAKK3ByaW50ZiAiYW1yNSA6IEw6JTA4bHggUDolMDhseCA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4NV0uTCxfX2RlYnVnX21tdS5kYW1yWzB4NV0uUCxfX2RlYnVnX21tdS5pYW1yWzB4NV0uTCxfX2RlYnVnX21tdS5pYW1yWzB4NV0uUAorcHJpbnRmICJhbXI2IDogTDolMDhseCBQOiUwOGx4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHg2XS5MLF9fZGVidWdfbW11LmRhbXJbMHg2XS5QLF9fZGVidWdfbW11LmlhbXJbMHg2XS5MLF9fZGVidWdfbW11LmlhbXJbMHg2XS5QCitwcmludGYgImFtcjcgOiBMOiUwOGx4IFA6JTA4bHggOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweDddLkwsX19kZWJ1Z19tbXUuZGFtclsweDddLlAsX19kZWJ1Z19tbXUuaWFtclsweDddLkwsX19kZWJ1Z19tbXUuaWFtclsweDddLlAKKworcHJpbnRmICJhbXI4IDogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHg4XS5MLF9fZGVidWdfbW11LmRhbXJbMHg4XS5QCitwcmludGYgImFtcjkgOiBMOiUwOGx4IFA6JTA4bHhcbiIsX19kZWJ1Z19tbXUuZGFtclsweDldLkwsX19kZWJ1Z19tbXUuZGFtclsweDldLlAKK3ByaW50ZiAiYW1yMTA6IEw6JTA4bHggUDolMDhseFxuIixfX2RlYnVnX21tdS5kYW1yWzB4YV0uTCxfX2RlYnVnX21tdS5kYW1yWzB4YV0uUAorcHJpbnRmICJhbXIxMTogTDolMDhseCBQOiUwOGx4XG4iLF9fZGVidWdfbW11LmRhbXJbMHhiXS5MLF9fZGVidWdfbW11LmRhbXJbMHhiXS5QCisKK2VuZAorCisKK2RlZmluZSBfdGxiCitwcmludGYgInRsYlsweDAwXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDBdLkwsX19kZWJ1Z19tbXUudGxiWzB4MF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDBdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgwXS5QCitwcmludGYgInRsYlsweDAxXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDFdLkwsX19kZWJ1Z19tbXUudGxiWzB4MV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxXS5QCitwcmludGYgInRsYlsweDAyXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDJdLkwsX19kZWJ1Z19tbXUudGxiWzB4Ml0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyXS5QCitwcmludGYgInRsYlsweDAzXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDNdLkwsX19kZWJ1Z19tbXUudGxiWzB4M10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzXS5QCitwcmludGYgInRsYlsweDA0XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDRdLkwsX19kZWJ1Z19tbXUudGxiWzB4NF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDRdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg0XS5QCitwcmludGYgInRsYlsweDA1XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg1XS5QCitwcmludGYgInRsYlsweDA2XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDZdLkwsX19kZWJ1Z19tbXUudGxiWzB4Nl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDZdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg2XS5QCitwcmludGYgInRsYlsweDA3XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDddLkwsX19kZWJ1Z19tbXUudGxiWzB4N10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDddLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg3XS5QCitwcmludGYgInRsYlsweDA4XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDhdLkwsX19kZWJ1Z19tbXUudGxiWzB4OF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDhdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg4XS5QCitwcmludGYgInRsYlsweDA5XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDldLkwsX19kZWJ1Z19tbXUudGxiWzB4OV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDldLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHg5XS5QCitwcmludGYgInRsYlsweDBhXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweGFdLkwsX19kZWJ1Z19tbXUudGxiWzB4YV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweGFdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhhXS5QCitwcmludGYgInRsYlsweDBiXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweGJdLkwsX19kZWJ1Z19tbXUudGxiWzB4Yl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweGJdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhiXS5QCitwcmludGYgInRsYlsweDBjXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweGNdLkwsX19kZWJ1Z19tbXUudGxiWzB4Y10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweGNdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhjXS5QCitwcmludGYgInRsYlsweDBkXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweGRdLkwsX19kZWJ1Z19tbXUudGxiWzB4ZF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweGRdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhkXS5QCitwcmludGYgInRsYlsweDBlXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweGVdLkwsX19kZWJ1Z19tbXUudGxiWzB4ZV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweGVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhlXS5QCitwcmludGYgInRsYlsweDBmXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweGZdLkwsX19kZWJ1Z19tbXUudGxiWzB4Zl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweGZdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHhmXS5QCitwcmludGYgInRsYlsweDEwXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDEwXS5MLF9fZGVidWdfbW11LnRsYlsweDEwXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTBdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxMF0uUAorcHJpbnRmICJ0bGJbMHgxMV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxMV0uTCxfX2RlYnVnX21tdS50bGJbMHgxMV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDExXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTFdLlAKK3ByaW50ZiAidGxiWzB4MTJdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MTJdLkwsX19kZWJ1Z19tbXUudGxiWzB4MTJdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxMl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDEyXS5QCitwcmludGYgInRsYlsweDEzXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDEzXS5MLF9fZGVidWdfbW11LnRsYlsweDEzXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTNdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxM10uUAorcHJpbnRmICJ0bGJbMHgxNF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxNF0uTCxfX2RlYnVnX21tdS50bGJbMHgxNF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE0XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTRdLlAKK3ByaW50ZiAidGxiWzB4MTVdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MTVdLkwsX19kZWJ1Z19tbXUudGxiWzB4MTVdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxNV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE1XS5QCitwcmludGYgInRsYlsweDE2XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDE2XS5MLF9fZGVidWdfbW11LnRsYlsweDE2XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTZdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxNl0uUAorcHJpbnRmICJ0bGJbMHgxN106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxN10uTCxfX2RlYnVnX21tdS50bGJbMHgxN10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE3XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTddLlAKK3ByaW50ZiAidGxiWzB4MThdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MThdLkwsX19kZWJ1Z19tbXUudGxiWzB4MThdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxOF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDE4XS5QCitwcmludGYgInRsYlsweDE5XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDE5XS5MLF9fZGVidWdfbW11LnRsYlsweDE5XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MTldLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxOV0uUAorcHJpbnRmICJ0bGJbMHgxYV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxYV0uTCxfX2RlYnVnX21tdS50bGJbMHgxYV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFhXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWFdLlAKK3ByaW50ZiAidGxiWzB4MWJdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MWJdLkwsX19kZWJ1Z19tbXUudGxiWzB4MWJdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxYl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFiXS5QCitwcmludGYgInRsYlsweDFjXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDFjXS5MLF9fZGVidWdfbW11LnRsYlsweDFjXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWNdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxY10uUAorcHJpbnRmICJ0bGJbMHgxZF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgxZF0uTCxfX2RlYnVnX21tdS50bGJbMHgxZF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFkXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWRdLlAKK3ByaW50ZiAidGxiWzB4MWVdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MWVdLkwsX19kZWJ1Z19tbXUudGxiWzB4MWVdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxZV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDFlXS5QCitwcmludGYgInRsYlsweDFmXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDFmXS5MLF9fZGVidWdfbW11LnRsYlsweDFmXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MWZdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgxZl0uUAorcHJpbnRmICJ0bGJbMHgyMF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyMF0uTCxfX2RlYnVnX21tdS50bGJbMHgyMF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDIwXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjBdLlAKK3ByaW50ZiAidGxiWzB4MjFdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjFdLkwsX19kZWJ1Z19tbXUudGxiWzB4MjFdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyMV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDIxXS5QCitwcmludGYgInRsYlsweDIyXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDIyXS5MLF9fZGVidWdfbW11LnRsYlsweDIyXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjJdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyMl0uUAorcHJpbnRmICJ0bGJbMHgyM106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyM10uTCxfX2RlYnVnX21tdS50bGJbMHgyM10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDIzXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjNdLlAKK3ByaW50ZiAidGxiWzB4MjRdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjRdLkwsX19kZWJ1Z19tbXUudGxiWzB4MjRdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyNF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI0XS5QCitwcmludGYgInRsYlsweDI1XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDI1XS5MLF9fZGVidWdfbW11LnRsYlsweDI1XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyNV0uUAorcHJpbnRmICJ0bGJbMHgyNl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyNl0uTCxfX2RlYnVnX21tdS50bGJbMHgyNl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI2XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjZdLlAKK3ByaW50ZiAidGxiWzB4MjddOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MjddLkwsX19kZWJ1Z19tbXUudGxiWzB4MjddLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyN10uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI3XS5QCitwcmludGYgInRsYlsweDI4XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDI4XS5MLF9fZGVidWdfbW11LnRsYlsweDI4XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjhdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyOF0uUAorcHJpbnRmICJ0bGJbMHgyOV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyOV0uTCxfX2RlYnVnX21tdS50bGJbMHgyOV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDI5XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MjldLlAKK3ByaW50ZiAidGxiWzB4MmFdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MmFdLkwsX19kZWJ1Z19tbXUudGxiWzB4MmFdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyYV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJhXS5QCitwcmludGYgInRsYlsweDJiXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDJiXS5MLF9fZGVidWdfbW11LnRsYlsweDJiXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmJdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyYl0uUAorcHJpbnRmICJ0bGJbMHgyY106ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyY10uTCxfX2RlYnVnX21tdS50bGJbMHgyY10uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJjXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmNdLlAKK3ByaW50ZiAidGxiWzB4MmRdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MmRdLkwsX19kZWJ1Z19tbXUudGxiWzB4MmRdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyZF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJkXS5QCitwcmludGYgInRsYlsweDJlXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDJlXS5MLF9fZGVidWdfbW11LnRsYlsweDJlXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmVdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgyZV0uUAorcHJpbnRmICJ0bGJbMHgyZl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgyZl0uTCxfX2RlYnVnX21tdS50bGJbMHgyZl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDJmXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MmZdLlAKK3ByaW50ZiAidGxiWzB4MzBdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzBdLkwsX19kZWJ1Z19tbXUudGxiWzB4MzBdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzMF0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDMwXS5QCitwcmludGYgInRsYlsweDMxXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDMxXS5MLF9fZGVidWdfbW11LnRsYlsweDMxXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzFdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzMV0uUAorcHJpbnRmICJ0bGJbMHgzMl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzMl0uTCxfX2RlYnVnX21tdS50bGJbMHgzMl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDMyXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzJdLlAKK3ByaW50ZiAidGxiWzB4MzNdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzNdLkwsX19kZWJ1Z19tbXUudGxiWzB4MzNdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzM10uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDMzXS5QCitwcmludGYgInRsYlsweDM0XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDM0XS5MLF9fZGVidWdfbW11LnRsYlsweDM0XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzRdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzNF0uUAorcHJpbnRmICJ0bGJbMHgzNV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzNV0uTCxfX2RlYnVnX21tdS50bGJbMHgzNV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM1XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzVdLlAKK3ByaW50ZiAidGxiWzB4MzZdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzZdLkwsX19kZWJ1Z19tbXUudGxiWzB4MzZdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzNl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM2XS5QCitwcmludGYgInRsYlsweDM3XTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDM3XS5MLF9fZGVidWdfbW11LnRsYlsweDM3XS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzddLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzN10uUAorcHJpbnRmICJ0bGJbMHgzOF06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzOF0uTCxfX2RlYnVnX21tdS50bGJbMHgzOF0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM4XS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4MzhdLlAKK3ByaW50ZiAidGxiWzB4MzldOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4MzldLkwsX19kZWJ1Z19tbXUudGxiWzB4MzldLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzOV0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDM5XS5QCitwcmludGYgInRsYlsweDNhXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDNhXS5MLF9fZGVidWdfbW11LnRsYlsweDNhXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2FdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzYV0uUAorcHJpbnRmICJ0bGJbMHgzYl06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzYl0uTCxfX2RlYnVnX21tdS50bGJbMHgzYl0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNiXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2JdLlAKK3ByaW50ZiAidGxiWzB4M2NdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4M2NdLkwsX19kZWJ1Z19tbXUudGxiWzB4M2NdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzY10uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNjXS5QCitwcmludGYgInRsYlsweDNkXTogJTA4bHggJTA4bHggICUwOGx4ICUwOGx4XG4iLF9fZGVidWdfbW11LnRsYlsweDNkXS5MLF9fZGVidWdfbW11LnRsYlsweDNkXS5QLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2RdLkwsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzZF0uUAorcHJpbnRmICJ0bGJbMHgzZV06ICUwOGx4ICUwOGx4ICAlMDhseCAlMDhseFxuIixfX2RlYnVnX21tdS50bGJbMHgzZV0uTCxfX2RlYnVnX21tdS50bGJbMHgzZV0uUCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNlXS5MLF9fZGVidWdfbW11LnRsYlsweDQwKzB4M2VdLlAKK3ByaW50ZiAidGxiWzB4M2ZdOiAlMDhseCAlMDhseCAgJTA4bHggJTA4bHhcbiIsX19kZWJ1Z19tbXUudGxiWzB4M2ZdLkwsX19kZWJ1Z19tbXUudGxiWzB4M2ZdLlAsX19kZWJ1Z19tbXUudGxiWzB4NDArMHgzZl0uTCxfX2RlYnVnX21tdS50bGJbMHg0MCsweDNmXS5QCitlbmQKKworCitkZWZpbmUgX3BnZAorcCAocGdkX3RbMHg0MF0pKihwZ2RfdCopKF9fZGVidWdfbW11LmRhbXJbMHgzXS5MKQorZW5kCisKK2RlZmluZSBfcHRkX2kKK3AgKHB0ZV90WzB4MTAwMF0pKihwdGVfdCopKF9fZGVidWdfbW11LmRhbXJbMHg0XS5MKQorZW5kCisKK2RlZmluZSBfcHRkX2QKK3AgKHB0ZV90WzB4MTAwMF0pKihwdGVfdCopKF9fZGVidWdfbW11LmRhbXJbMHg1XS5MKQorZW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L2dkYnN0dWIudHh0IGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9nZGJzdHViLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U1YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mdWppdHN1L2Zydi9nZGJzdHViLnR4dApAQCAtMCwwICsxLDEzMCBAQAorCQkJICAgICA9PT09PT09PT09PT09PT09PT09PQorCQkJICAgICBERUJVR0dJTkcgRlItViBMSU5VWAorCQkJICAgICA9PT09PT09PT09PT09PT09PT09PQorCisKK1RoZSBrZXJuZWwgY29udGFpbnMgYSBHREIgc3R1YiB0aGF0IHRhbGtzIEdEQiByZW1vdGUgcHJvdG9jb2wgYWNyb3NzIGEgc2VyaWFsCitwb3J0LiBUaGlzIHBlcm1pdHMgR0RCIHRvIHNpbmdsZSBzdGVwIHRocm91Z2ggdGhlIGtlcm5lbCwgc2V0IGJyZWFrcG9pbnRzIGFuZAordHJhcCBleGNlcHRpb25zIHRoYXQgaGFwcGVuIGluIGtlcm5lbCBzcGFjZSBhbmQgaW50ZXJydXB0IGV4ZWN1dGlvbi4gSXQgYWxzbworcGVybWl0cyB0aGUgTk1JIGludGVycnVwdCBidXR0b24gb3Igc2VyaWFsIHBvcnQgZXZlbnRzIHRvIGp1bXAgdGhlIGtlcm5lbCBpbnRvCit0aGUgZGVidWdnZXIuCisKK09uIHRoZSBDUFVzIHRoYXQgaGF2ZSBvbi1jaGlwIFVBUlRzIChGUjQwMCwgRlI0MDMsIEZSNDA1LCBGUjU1NSksIHRoZQorR0RCIHN0dWIgaGlqYWNrcyBhIHNlcmlhbCBwb3J0IGZvciBpdHMgb3duIHB1cnBvc2VzLCBhbmQgbWFrZXMgaXQKK2dlbmVyYXRlIGxldmVsIDE1IGludGVycnVwdHMgKE5NSSkuIFRoZSBrZXJuZWwgcHJvcGVyIGNhbm5vdCBzZWUgdGhlIHNlcmlhbAorcG9ydCBpbiBxdWVzdGlvbiB1bmRlciB0aGVzZSBjb25kaXRpb25zLgorCitPbiB0aGUgTUI5MzA5MS1WREsgQ1BVIGJvYXJkcywgdGhlIEdEQiBzdHViIHVzZXMgVUFSVDEsIHdoaWNoIHdvdWxkIG90aGVyd2lzZQorYmUgL2Rldi90dHlTMS4gT24gdGhlIE1COTMwOTMtUERLLCB0aGUgR0RCIHN0dWIgdXNlcyBVQVJUMC4gVGhlcmVmb3JlLCBvbiB0aGUKK1BESyB0aGVyZSBpcyBubyBleHRlcm5hbGx5IGFjY2Vzc2libGUgc2VyaWFsIHBvcnQgYW5kIHRoZSBzZXJpYWwgcG9ydCB0bword2hpY2ggdGhlIHRvdWNoIHNjcmVlbiBpcyBhdHRhY2hlZCBiZWNvbWVzIC9kZXYvdHR5UzAuCisKK05vdGUgdGhhdCB0aGUgR0RCIHN0dWIgcnVucyBlbnRpcmVseSB3aXRoaW4gQ1BVIGRlYnVnIG1vZGUsIGFuZCBzbyBzaG91bGQgbm90CitpbmN1ciBhbnkgZXhjZXB0aW9ucyBvciBpbnRlcnJ1cHRzIHdoaWxzdCBpdCBpcyBhY3RpdmUuIEluIHBhcnRpY3VsYXIsIG5vdGUKK3RoYXQgdGhlIGNsb2NrIHdpbGwgbG9zZSB0aW1lIHNpbmNlIGl0IGlzIGltcGxlbWVudGVkIGluIHNvZnR3YXJlLgorCisKKz09PT09PT09PT09PT09PT09PQorS0VSTkVMIFBSRVBBUkFUSU9OCis9PT09PT09PT09PT09PT09PT0KKworRmlyc3RseSwgYSBkZWJ1Z2dhYmxlIGtlcm5lbCBtdXN0IGJlIGJ1aWx0LiBUbyBkbyB0aGlzLCB1bnBhY2sgdGhlIGtlcm5lbCB0cmVlCithbmQgY29weSB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3aXNoIHRvIHVzZSB0byAuY29uZmlnLiBUaGVuIHJlY29uZmlndXJlCit0aGUgZm9sbG93aW5nIHRoaW5ncyBvbiB0aGUgIktlcm5lbCBIYWNraW5nIiB0YWI6CisKKyAgKCopICJJbmNsdWRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiIKKworICAgICAgU2V0IHRoaXMgdG8gIlkiLiBUaGlzIGNhdXNlcyBhbGwgQyBhbmQgQXNzZW1ibHkgZmlsZXMgdG8gYmUgY29tcGlsZWQKKyAgICAgIHRvIGluY2x1ZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorCisgICgqKSAiSW4ta2VybmVsIEdEQiBzdHViIgorCisgICAgICBTZXQgdGhpcyB0byAiWSIuIFRoaXMgY2F1c2VzIHRoZSBHREIgc3R1YiB0byBiZSBjb21waWxlZCBpbnRvIHRoZQorICAgICAga2VybmVsLgorCisgICgqKSAiSW1tZWRpYXRlIGFjdGl2YXRpb24iCisKKyAgICAgIFNldCB0aGlzIHRvICJZIiBpZiB5b3Ugd2FudCB0aGUgR0RCIHN0dWIgdG8gYWN0aXZhdGUgYXMgc29vbiBhcyBwb3NzaWJsZQorICAgICAgYW5kIHdhaXQgZm9yIEdEQiB0byBjb25uZWN0LiBUaGlzIGFsbG93cyB5b3UgdG8gc3RhcnQgdHJhY2luZyByaWdodCBmcm9tCisgICAgICB0aGUgYmVnaW5uaW5nIG9mIHN0YXJ0X2tlcm5lbCgpIGluIGluaXQvbWFpbi5jLgorCisgICgqKSAiQ29uc29sZSB0aHJvdWdoIEdEQiBzdHViIgorCisgICAgICBTZXQgdGhpcyB0byAiWSIgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byB1c2UgImNvbnNvbGU9Z2RiMCIgb24gdGhlCisgICAgICBjb21tYW5kIGxpbmUuIFRoYXQgdGVsbHMgdGhlIGtlcm5lbCB0byBwYXNzIHN5c3RlbSBjb25zb2xlIG1lc3NhZ2VzIHRvCisgICAgICBHREIgKHdoaWNoIHRoZW4gcHJpbnRzIHRoZW0gb24gaXRzIHN0YW5kYXJkIG91dHB1dCkuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKyAgICAgIGRlYnVnZ2luZyB0aGUgc2VyaWFsIGRyaXZlcnMgdGhhdCdkIG90aGVyd2lzZSBiZSB1c2VkIHRvIHBhc3MgY29uc29sZQorICAgICAgbWVzc2FnZXMgdG8gdGhlIG91dHNpZGUgd29ybGQuCisKK1RoZW4gYnVpbGQgYXMgdXN1YWwsIGRvd25sb2FkIHRvIHRoZSBib2FyZCBhbmQgZXhlY3V0ZS4gTm90ZSB0aGF0IGlmCisiSW1tZWRpYXRlIGFjdGl2YXRpb24iIHdhcyBzZWxlY3RlZCwgdGhlbiB0aGUga2VybmVsIHdpbGwgd2FpdCBmb3IgR0RCIHRvCithdHRhY2guIElmIG5vdCwgdGhlbiB0aGUga2VybmVsIHdpbGwgYm9vdCBpbW1lZGlhdGVseSBhbmQgR0RCIHdpbGwgaGF2ZSB0bworaW50ZXJ1cHQgaXQgb3Igd2FpdCBmb3IgYW4gZXhjZXB0aW9uIHRvIG9jY3VyIGlmIGJlZm9yZSBkb2luZyBhbnl0aGluZyB3aXRoCit0aGUga2VybmVsLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT0KK0tFUk5FTCBERUJVR0dJTkcgV0lUSCBHREIKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2V0IHRoZSBzZXJpYWwgcG9ydCBvbiB0aGUgY29tcHV0ZXIgdGhhdCdzIGdvaW5nIHRvIHJ1biBHREIgdG8gdGhlIGFwcHJvcHJpYXRlCitiYXVkIHJhdGUuIEFzc3VtaW5nIHRoZSBib2FyZCdzIGRlYnVnIHBvcnQgaXMgY29ubmVjdGVkIHRvIHR0eVMwL0NPTTEgb24gdGhlCitjb21wdXRlciBkb2luZyB0aGUgZGVidWdnaW5nOgorCisJc3R0eSAtRiAvZGV2L3R0eVMwIDExNTIwMAorCitUaGVuIHN0YXJ0IEdEQiBpbiB0aGUgYmFzZSBvZiB0aGUga2VybmVsIHRyZWU6CisKKwlmcnYtdWNsaW51eC1nZGIgbGludXgJCVt1Q2xpbnV4XQorCitPcjoKKworCWZydi11Y2xpbnV4LWdkYiB2bWxpbnV4CQlbTU1VIGxpbnV4XQorCitXaGVuIHRoZSBwcm9tcHQgYXBwZWFyczoKKworCUdOVSBnZGIgZnJ2LTAzMTAyNAorCUNvcHlyaWdodCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCUdEQiBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHlvdSBhcmUKKwl3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorCVR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgorCVRoZXJlIGlzIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIEdEQi4gIFR5cGUgInNob3cgd2FycmFudHkiIGZvciBkZXRhaWxzLgorCVRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICItLWhvc3Q9aTY4Ni1wYy1saW51eC1nbnUgLS10YXJnZXQ9ZnJ2LXVjbGludXgiLi4uCisJKGdkYikKKworQXR0YWNoIHRvIHRoZSBib2FyZCBsaWtlIHRoaXM6CisKKyAgICAgICAgKGdkYikgdGFyZ2V0IHJlbW90ZSAvZGV2L3R0eVMwCisJUmVtb3RlIGRlYnVnZ2luZyB1c2luZyAvZGV2L3R0eVMwCisJc3RhcnRfa2VybmVsICgpIGF0IGluaXQvbWFpbi5jOjM5NQorCShnZGIpCisKK1RoaXMgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIGZyb20gdGhlIHNvdXJjZSB0b28uIFRoZSBrZXJuZWwgY2FuCit0aGVuIGJlIGRlYnVnZ2VkIGFsbW9zdCBhcyBpZiBpdCdzIGFueSBvdGhlciBwcm9ncmFtLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOVEVSUlVQVElORyBUSEUgUlVOTklORyBLRVJORUwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGtlcm5lbCBjYW4gYmUgaW50ZXJydXB0ZWQgd2hpbHN0IGl0IGlzIHJ1bm5pbmcsIGNhdXNpbmcgYSBqdW1wIGJhY2sgdG8gdGhlCitHREIgc3R1YiBhbmQgdGhlIGRlYnVnZ2VyOgorCisgICgqKSBQcmVzc2luZyBDdHJsLUMgaW4gR0RCLiBUaGlzIHdpbGwgY2F1c2UgR0RCIHRvIHRyeSBhbmQgaW50ZXJydXB0IHRoZQorICAgICAga2VybmVsIGJ5IHNlbmRpbmcgYW4gUlMyMzIgQlJFQUsgb3ZlciB0aGUgc2VyaWFsIGxpbmUgdG8gdGhlIEdEQgorICAgICAgc3R1Yi4gVGhpcyB3aWxsIChtb3N0bHkpIGltbWVkaWF0ZWx5IGludGVycnVwdCB0aGUga2VybmVsIGFuZCByZXR1cm4gaXQKKyAgICAgIHRvIHRoZSBkZWJ1Z2dlci4KKworICAoKikgUHJlc3NpbmcgdGhlIE5NSSBidXR0b24gb24gdGhlIGJvYXJkIHdpbGwgYWxzbyBjYXVzZSBhIGp1bXAgaW50byB0aGUKKyAgICAgIGRlYnVnZ2VyLgorCisgICgqKSBTZXR0aW5nIGEgc29mdHdhcmUgYnJlYWtwb2ludC4gVGhpcyBzZXRzIGEgYnJlYWsgaW5zdHJ1Y3Rpb24gYXQgdGhlCisgICAgICBkZXNpcmVkIGxvY2F0aW9uIHdoaWNoIHRoZSBHREIgc3R1YiB0aGVuIHRyYXBzIHRoZSBleGNlcHRpb24gZm9yLgorCisgICgqKSBTZXR0aW5nIGEgaGFyZHdhcmUgYnJlYWtwb2ludC4gVGhlIEdEQiBzdHViIGlzIGNhcGFibGUgb2YgdXNpbmcgdGhlIElCQVIKKyAgICAgIGFuZCBEQkFSIHJlZ2lzdGVycyB0byBhc3Npc3QgZGVidWdnaW5nLgorCitGdXJ0aGVybW9yZSwgdGhlIEdEQiBzdHViIHdpbGwgaW50ZXJjZXB0IGEgbnVtYmVyIG9mIGV4Y2VwdGlvbnMgYXV0b21hdGljYWxseQoraWYgdGhleSBhcmUgY2F1c2VkIGJ5IGtlcm5lbCBleGVjdXRpb24uIEl0IHdpbGwgYWxzbyBpbnRlcmNlcHQgQlVHKCkgbWFjcm8KK2ludm9rYXRpb24uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnVqaXRzdS9mcnYvbW11LWxheW91dC50eHQgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L21tdS1sYXlvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGNjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Z1aml0c3UvZnJ2L21tdS1sYXlvdXQudHh0CkBAIC0wLDAgKzEsMzA2IEBACisJCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJCSBGUjQ1MSBNTVUgTElOVVggTUVNT1JZIE1BTkFHRU1FTlQKKwkJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09PT09PT09PQorTU1VIEhBUkRXQVJFCis9PT09PT09PT09PT0KKworRlI0NTEgTU1VIExpbnV4IHB1dHMgdGhlIE1NVSBpbnRvIEVEQVQgbW9kZSB3aGlsc3QgcnVubmluZy4gVGhpcyBtZWFucyB0aGF0IGl0IHVzZXMgYm90aCB0aGUgU0FUCityZWdpc3RlcnMgYW5kIHRoZSBEQVQgVExCIHRvIHBlcmZvcm0gYWRkcmVzcyB0cmFuc2xhdGlvbi4KKworVGhlcmUgYXJlIDggSUFNTFIvSUFNUFIgcmVnaXN0ZXIgcGFpcnMgYW5kIDE2IERBTUxSL0RBTVBSIHJlZ2lzdGVyIHBhaXJzIGZvciBTQVQgbW9kZS4KKworSW4gREFUIG1vZGUsIHRoZXJlIGlzIGFsc28gYSBUTEIgb3JnYW5pc2VkIGluIGNhY2hlIGZvcm1hdCBhcyA2NCBsaW5lcyB4IDIgd2F5cy4gRWFjaCBsaW5lIHNwYW5zIGEKKzE2S0IgcmFuZ2Ugb2YgYWRkcmVzc2VzLCBidXQgY2FuIG1hdGNoIGEgbGFyZ2VyIHJlZ2lvbi4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01FTU9SWSBNQU5BR0VNRU5UIFJFR0lTVEVSUworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NlcnRhaW4gY29udHJvbCByZWdpc3RlcnMgYXJlIHVzZWQgYnkgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lczoKKworCVJFR0lTVEVSUwkJVVNBR0UKKwk9PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJSUFNUjAsIERBTVIwCQlLZXJuZWwgaW1hZ2UgYW5kIGRhdGEgbWFwcGluZ3MKKwlJQU1SMSwgREFNUjEJCUZpcnN0LWNoYW5jZSBUTEIgbG9va3VwIG1hcHBpbmcKKwlEQU1SMgkJCVBhZ2UgYXR0YWNobWVudCBmb3IgY2FjaGUgZmx1c2ggYnkgcGFnZQorCURBTVIzCQkJQ3VycmVudCBQR0QgbWFwcGluZworCVNDUjAsIERBTVI0CQlJbnN0cnVjdGlvbiBUTEIgUEdFL1BURCBjYWNoZQorCVNDUjEsIERBTVI1CQlEYXRhIFRMQiBQR0UvUFREIGNhY2hlCisJREFNUjYtMTAJCWttYXBfYXRvbWljKCkgbWFwcGluZ3MKKwlEQU1SMTEJCQlJL08gbWFwcGluZworCUNYTlIJCQltbV9zdHJ1Y3QgY29udGV4dCBJRAorCVRUQlIJCQlQYWdlIGRpcmVjdG9yeSAoUEdEKSBwb2ludGVyIChwaHlzaWNhbCBhZGRyZXNzKQorCisKKz09PT09PT09PT09PT09PT09PT09PQorR0VORVJBTCBNRU1PUlkgTEFZT1VUCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHBoeXNpY2FsIG1lbW9yeSBsYXlvdXQgaXMgYXMgZm9sbG93czoKKworICBQSFlTSUNBTCBBRERSRVNTCUNPTlRST0xMRVIJREVWSUNFCisgID09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIDAwMDAwMDAwIC0gQkZGRkZGRkYJU0RSQU0JCVNEUkFNIGFyZWEKKyAgRTAwMDAwMDAgLSBFRkZGRkZGRglMLUJVUyBDUzIjCVZESyBTTEJVUy9QQ0kgd2luZG93CisgIEYwMDAwMDAwIC0gRjBGRkZGRkYJTC1CVVMgQ1M1IwlNQjkzNDkzIENTQyBhcmVhIChEQVYgZGF1Z2h0ZXIgYm9hcmQpCisgIEYxMDAwMDAwIC0gRjFGRkZGRkYJTC1CVVMgQ1M3IwkoQ0I3MCBDUFUtY2FyZCBQQ01DSUEgcG9ydCBJL08gc3BhY2UpCisgIEZDMDAwMDAwIC0gRkMwRkZGRkYJTC1CVVMgQ1MxIwlWREsgTUI4Njk0MyBjb25maWcgc3BhY2UKKyAgRkMxMDAwMDAgLSBGQzFGRkZGRglMLUJVUyBDUzYjCURNOTAwMCBOSUMgSS9PIHNwYWNlCisgIEZDMjAwMDAwIC0gRkMyRkZGRkYJTC1CVVMgQ1MzIwlNQjkzNDkzIENTUiBhcmVhIChEQVYgZGF1Z2h0ZXIgYm9hcmQpCisgIEZEMDAwMDAwIC0gRkRGRkZGRkYJTC1CVVMgQ1M0IwkoQ0I3MCBDUFUtY2FyZCBleHRyYSBmbGFzaCBzcGFjZSkKKyAgRkUwMDAwMDAgLSBGRUZGRkZGRgkJCUludGVybmFsIENQVSBwZXJpcGhlcmFscworICBGRjAwMDAwMCAtIEZGMUZGRkZGCUwtQlVTIENTMCMJRmxhc2ggMQorICBGRjIwMDAwMCAtIEZGM0ZGRkZGCUwtQlVTIENTMCMJRmxhc2ggMgorICBGRkMwMDAwMCAtIEZGQzAwMDFGCUwtQlVTIENTMCMJRlBHQQorCitUaGUgdmlydHVhbCBtZW1vcnkgbGF5b3V0IGlzOgorCisgIFZJUlRVQUwgQUREUkVTUyAgICBQSFlTSUNBTAlUUkFOU0xBVE9SCUZMQUdTCVNJWkUJT0NDVVBBVElPTgorICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT0JPT09PT09PT09PT09PT0JPT09PT09PQk9PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIDAwMDA0MDAwLUJGRkZGRkZGICB2YXJpb3VzCVRMQix4QU1SMQlELU4tPz9WCTNHQglVc2Vyc3BhY2UKKyAgQzAwMDAwMDAtQ0ZGRkZGRkYgIDAwMDAwMDAwCXhBTVBSMAkJLUwtUy0tVgkyNTZNQglLZXJuZWwgaW1hZ2UgYW5kIGRhdGEKKyAgRDAwMDAwMDAtRDdGRkZGRkYgIHZhcmlvdXMJVExCLHhBTVIxCUQtTlM/P1YJMTI4TUIJdm1hbGxvYyBhcmVhCisgIEQ4MDAwMDAwLURCRkZGRkZGICB2YXJpb3VzCVRMQix4QU1SMQlELU5TPz9WCTY0TUIJa21hcCgpIGFyZWEKKyAgREMwMDAwMDAtRENGRkZGRkYgIHZhcmlvdXMJVExCCQkJMU1CCVNlY29uZGFyeSBrbWFwX2F0b21pYygpIGZyYW1lCisgIEREMDAwMDAwLUREMjdGRkZGICB2YXJpb3VzCURBTVIJCQkxNjBLQglQcmltYXJ5IGttYXBfYXRvbWljKCkgZnJhbWUKKyAgREQwNDAwMDAJCQlEQU1SMi9JQU1SMgktTC1TLS1WCXBhZ2UJUGFnZSBjYWNoZSBmbHVzaCBhdHRhY2htZW50IHBvaW50CisgIEREMDgwMDAwCQkJREFNUjMJCS1MLVNDLVYJcGFnZQlQYWdlIERpcmVjdG9yeSAoUEdEKQorICBERDBDMDAwMAkJCURBTVI0CQktTC1TQy1WCXBhZ2UJQ2FjaGVkIGluc24gVExCIFBhZ2UgVGFibGUgbG9va3VwCisgIEREMTAwMDAwCQkJREFNUjUJCS1MLVNDLVYJcGFnZQlDYWNoZWQgZGF0YSBUTEIgUGFnZSBUYWJsZSBsb29rdXAKKyAgREQxNDAwMDAJCQlEQU1SNgkJLUwtUy0tVglwYWdlCWttYXBfYXRvbWljKEtNX0JPVU5DRV9SRUFEKQorICBERDE4MDAwMAkJCURBTVI3CQktTC1TLS1WCXBhZ2UJa21hcF9hdG9taWMoS01fU0tCX1NVTlJQQ19EQVRBKQorICBERDFDMDAwMAkJCURBTVI4CQktTC1TLS1WCXBhZ2UJa21hcF9hdG9taWMoS01fU0tCX0RBVEFfU09GVElSUSkKKyAgREQyMDAwMDAJCQlEQU1SOQkJLUwtUy0tVglwYWdlCWttYXBfYXRvbWljKEtNX1VTRVIwKQorICBERDI0MDAwMAkJCURBTVIxMAkJLUwtUy0tVglwYWdlCWttYXBfYXRvbWljKEtNX1VTRVIxKQorICBFMDAwMDAwMC1GRkZGRkZGRiAgRTAwMDAwMDAJREFNUjExCQktTC1TQy1WCTUxMk1CCUkvTyByZWdpb24KKworSUFNUFIxIGFuZCBEQU1QUjEgYXJlIHVzZWQgYXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBUTEIuCisKKworPT09PT09PT09PT09PT09PT09PT0KK0tNQVAgQU5EIEtNQVBfQVRPTUlDCis9PT09PT09PT09PT09PT09PT09PQorCitUbyBhY2Nlc3MgcGFnZXMgaW4gdGhlIHBhZ2UgY2FjaGUgKHdoaWNoIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBpZiBoaWdobWVtIGlzIGF2YWlsYWJsZSksCit0aGUga2VybmVsIGNhbGxzIGttYXAoKSwgZG9lcyB0aGUgYWNjZXNzIGFuZCB0aGVuIGNhbGxzIGt1bm1hcCgpOyBvciBpdCBjYWxscyBrbWFwX2F0b21pYygpLCBkb2VzCit0aGUgYWNjZXNzIGFuZCB0aGVuIGNhbGxzIGt1bm1hcF9hdG9taWMoKS4KKwora21hcCgpIGNyZWF0ZXMgYW4gYXR0YWNobWVudCBiZXR3ZWVuIGFuIGFyYml0cmFyeSBpbmFjY2Vzc2libGUgcGFnZSBhbmQgYSByYW5nZSBvZiB2aXJ0dWFsCithZGRyZXNzZXMgYnkgaW5zdGFsbGluZyBhIFBURSBpbiBhIHNwZWNpYWwgcGFnZSB0YWJsZS4gVGhlIGtlcm5lbCBjYW4gdGhlbiBhY2Nlc3MgdGhpcyBwYWdlIGFzIGl0Cit3aWxscy4gV2hlbiBpdCdzIGZpbmlzaGVkLCB0aGUga2VybmVsIGNhbGxzIGt1bm1hcCgpIHRvIGNsZWFyIHRoZSBQVEUuCisKK2ttYXBfYXRvbWljKCkgZG9lcyBzb21ldGhpbmcgc2xpZ2h0bHkgZGlmZmVyZW50LiBJbiB0aGUgaW50ZXJlc3RzIG9mIHNwZWVkLCBpdCBjaG9vc2VzIG9uZSBvZiB0d28KK3N0cmF0ZWdpZXM6CisKKyAoMSkgSWYgcG9zc2libGUsIGttYXBfYXRvbWljKCkgYXR0YWNoZXMgdGhlIHJlcXVlc3RlZCBwYWdlIHRvIG9uZSBvZiBEQU1QUjUgdGhyb3VnaCBEQU1QUjEwCisgICAgIHJlZ2lzdGVyIHBhaXJzOyBhbmQgdGhlIG1hdGNoaW5nIGt1bm1hcF9hdG9taWMoKSBjbGVhcnMgdGhlIERBTVBSLiBUaGlzIG1ha2VzIGhpZ2ggbWVtb3J5CisgICAgIHN1cHBvcnQgcmVhbGx5IGZhc3QgYXMgdGhlcmUncyBubyBuZWVkIHRvIGZsdXNoIHRoZSBUTEIgb3IgbW9kaWZ5IHRoZSBwYWdlIHRhYmxlcy4gVGhlIERBTUxSCisgICAgIHJlZ2lzdGVycyBiZWluZyB1c2VkIGZvciB0aGlzIGFyZSBwcmVzZXQgZHVyaW5nIGJvb3QgYW5kIGRvbid0IGNoYW5nZSBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUKKyAgICAgcHJvY2Vzcy4gVGhlcmUncyBhIGRpcmVjdCBtYXBwaW5nIGJldHdlZW4gdGhlIGZpcnN0IGZldyBrbWFwX2F0b21pYygpIHR5cGVzLCBEQU1SIG51bWJlciBhbmQKKyAgICAgdmlydHVhbCBhZGRyZXNzIHNsb3QuCisKKyAgICAgSG93ZXZlciwgdGhlcmUgYXJlIG1vcmUga21hcF9hdG9taWMoKSB0eXBlcyBkZWZpbmVkIHRoYW4gdGhlcmUgYXJlIERBTVIgcmVnaXN0ZXJzIGF2YWlsYWJsZSwKKyAgICAgc28gd2UgZmFsbCBiYWNrIHRvOgorCisgKDIpIGttYXBfYXRvbWljKCkgdXNlcyBhIHNsb3QgaW4gdGhlIHNlY29uZGFyeSBmcmFtZSAoZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBwYXJhbWV0ZXIpLCBhbmQgdGhlbgorICAgICBsb2NrcyBhbiBlbnRyeSBpbiB0aGUgVExCIHRvIHRyYW5zbGF0ZSB0aGF0IHNsb3QgdG8gdGhlIHNwZWNpZmllZCBwYWdlLiBUaGUgbnVtYmVyIG9mIHNsb3RzIGlzCisgICAgIG9idmlvdXNseSBsaW1pdGVkLCBhbmQgdGhlaXIgcG9zaXRpb25zIGFyZSBjb250cm9sbGVkIHN1Y2ggdGhhdCBlYWNoIHNsb3QgaXMgbWF0Y2hlZCBieSBhCisgICAgIGRpZmZlcmVudCBsaW5lIGluIHRoZSBUTEIuIGt1bm1hcCgpIGVqZWN0cyB0aGUgZW50cnkgZnJvbSB0aGUgVExCLgorCitOb3RlIHRoYXQgdGhlIGZpcnN0IHRocmVlIGttYXAgYXRvbWljIHR5cGVzIGFyZSByZWFsbHkganVzdCBkZWNsYXJlZCBhcyBwbGFjZWhvbGRlcnMuIFRoZSBEQU1QUgorcmVnaXN0ZXJzIGludm9sdmVkIGFyZSBhY3R1YWxseSBtb2RpZmllZCBkaXJlY3RseS4KKworQWxzbyBub3RlIHRoYXQga21hcCgpIGl0c2VsZiBtYXkgc2xlZXAsIGttYXBfYXRvbWljKCkgbWF5IG5ldmVyIHNsZWVwIGFuZCBib3RoIGFsd2F5cyBzdWNjZWVkOworZnVydGhlcm1vcmUsIGEgZHJpdmVyIHVzaW5nIGttYXAoKSBtYXkgc2xlZXAgYmVmb3JlIGNhbGxpbmcga3VubWFwKCksIGJ1dCBtYXkgbm90IHNsZWVwIGJlZm9yZQorY2FsbGluZyBrdW5tYXBfYXRvbWljKCkgaWYgaXQgaGFkIHByZXZpb3VzbHkgY2FsbGVkIGttYXBfYXRvbWljKCkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVVNJTkcgTU9SRSBUSEFOIDI1Nk1CIE9GIE1FTU9SWQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUga2VybmVsIGNhbm5vdCBhY2Nlc3MgbW9yZSB0aGFuIDI1Nk1CIG9mIG1lbW9yeSBkaXJlY3RseS4gVGhlIHBoeXNpY2FsIGxheW91dCwgaG93ZXZlciwgcGVybWl0cwordXAgdG8gM0dCIG9mIFNEUkFNIChwb3NzaWJseSAzLjI1R0IpIHRvIGJlIG1hZGUgYXZhaWxhYmxlLiBCeSB1c2luZyBDT05GSUdfSElHSE1FTSwgdGhlIGtlcm5lbCBjYW4KK2FsbG93IHVzZXJzcGFjZSAoYnkgd2F5IG9mIHBhZ2UgdGFibGVzKSBhbmQgaXRzZWxmIChieSB3YXkgb2Yga21hcCkgdG8gZGVhbCB3aXRoIHRoZSBtZW1vcnkKK2FsbG9jYXRpb24uCisKK0V4dGVybmFsIGRldmljZXMgY2FuLCBvZiBjb3Vyc2UsIHN0aWxsIERNQSB0byBhbmQgZnJvbSBhbGwgb2YgdGhlIFNEUkFNLCBldmVuIGlmIHRoZSBrZXJuZWwgY2FuJ3QKK3NlZSBpdCBkaXJlY3RseS4gVGhlIGtlcm5lbCB0cmFuc2xhdGVzIHBhZ2UgcmVmZXJlbmNlcyBpbnRvIHJlYWwgYWRkcmVzc2VzIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZQorZGV2aWNlcy4KKworCis9PT09PT09PT09PT09PT09PT09CitQQUdFIFRBQkxFIFRPUE9MT0dZCis9PT09PT09PT09PT09PT09PT09CisKK1RoZSBwYWdlIHRhYmxlcyBhcmUgYXJyYW5nZWQgaW4gMi1sYXllciBmb3JtYXQuIFRoZXJlIGlzIGEgbWlkZGxlIGxheWVyIChQTUQpIHRoYXQgd291bGQgYmUgdXNlZCBpbgorMy1sYXllciBmb3JtYXQgdGFibGVzIGJ1dCB0aGF0IGlzIGZvbGRlZCBpbnRvIHRoZSB0b3AgbGF5ZXIgKFBHRCkgYW5kIHNvIGNvbnN1bWVzIG5vIGV4dHJhIG1lbW9yeQorb3IgcHJvY2Vzc2luZyBwb3dlci4KKworICArLS0tLS0tKyAgICAgUEdEICAgIFBNRAorICB8IFRUQlIgfC0tLT4rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKy0tLS0tLSsgICAgfCAgICAgIHwgICAgICA6IFNURSB8CisgICAgICAgICAgICAgIHwgUEdFMCB8IFBNRTAgOiBTVEUgfAorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICBQYWdlIFRhYmxlCisgICAgICAgICAgICAgIHwgICAgICB8ICAgICAgOiBTVEUgLS0tLS0tLS0tLS0tLS0+Ky0tLS0tLS0tKyArMHgwMDAwCisgICAgICAgICAgICAgIHwgUEdFMSB8IFBNRTAgOiBTVEUgLS0tLS0tLS0tLS0rICAgfCBQVEUwICAgfAorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIC0tLS0tLS0rICAgfCAgICstLS0tLS0tLSsKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgfCAgIHwgICB8IFBURTYzICB8CisgICAgICAgICAgICAgIHwgICAgICB8ICAgICAgOiBTVEUgfCAgICAgIHwgICArLS0+Ky0tLS0tLS0tKyArMHgwMTAwCisgICAgICAgICAgICAgIHwgUEdFMiB8IFBNRTAgOiBTVEUgfCAgICAgIHwgICAgICAgfCBQVEU2NCAgfAorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIHwgICAgICB8ICAgICAgICstLS0tLS0tLSsKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgfCAgICAgICB8IFBURTEyNyB8CisgICAgICAgICAgICAgIHwgICAgICB8ICAgICAgOiBTVEUgfCAgICAgICstLS0tLS0+Ky0tLS0tLS0tKyArMHgwMjAwCisgICAgICAgICAgICAgIHwgUEdFMyB8IFBNRTAgOiBTVEUgfCAgICAgICAgICAgICAgfCBQVEUxMjggfAorICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIDogU1RFIHwgICAgICAgICAgICAgICstLS0tLS0tLSsKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICB8IFBURTE5MSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tKyArMHgwMzAwCisKK0VhY2ggUGFnZSBEaXJlY3RvcnkgKFBHRCkgaXMgMTZLQiAocGFnZSBzaXplKSBpbiBzaXplIGFuZCBpcyBkaXZpZGVkIGludG8gNjQgZW50cmllcyAoUEdFcykuIEVhY2gKK1BHRSBjb250YWlucyBvbmUgUGFnZSBNaWQgRGlyZWN0b3J5IChQTUQpLgorCitFYWNoIFBNRCBpcyAyNTYgYnl0ZXMgaW4gc2l6ZSBhbmQgY29udGFpbnMgYSBzaW5nbGUgZW50cnkgKFBNRSkuIEVhY2ggUE1FIGhvbGRzIDY0IEZSNDUxIE1NVQorc2VnbWVudCB0YWJsZSBlbnRyaWVzIG9mIDQgYnl0ZXMgYXBpZWNlLiBFYWNoIFBNRSAicG9pbnRzIHRvIiBhIHBhZ2UgdGFibGUuIEluIHByYWN0aWNlLCBlYWNoIFNURQorcG9pbnRzIHRvIGEgc3Vic2V0IG9mIHRoZSBwYWdlIHRhYmxlLCB0aGUgZmlyc3QgdG8gUFQrMHgwMDAwLCB0aGUgc2Vjb25kIHRvIFBUKzB4MDEwMCwgdGhlIHRoaXJkIHRvCitQVCsweDIwMCwgYW5kIHNvIG9uLgorCitFYWNoIFBHRSBhbmQgUE1FIGNvdmVycyA2NE1CIG9mIHRoZSB0b3RhbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCisKK0VhY2ggUGFnZSBUYWJsZSAoUFREKSBpcyAxNktCIChwYWdlIHNpemUpIGluIHNpemUsIGFuZCBpcyBkaXZpZGVkIGludG8gNDA5NiBlbnRyaWVzIChQVEVzKS4gRWFjaAorZW50cnkgY2FuIHBvaW50IHRvIG9uZSAxNktCIHBhZ2UuIEluIHByYWN0aWNlLCBlYWNoIExpbnV4IHBhZ2UgdGFibGUgaXMgc3ViZGl2aWRlZCBpbnRvIDY0IEZSNDUxCitNTVUgcGFnZSB0YWJsZXMuIEJ1dCB0aGV5IGFyZSBhbGwgZ3JvdXBlZCB0b2dldGhlciB0byBtYWtlIG1hbmFnZW1lbnQgZWFzaWVyLCBpbiBwYXJ0aWN1bGFyIHJtYXAKK3N1cHBvcnQgaXMgdGhlbiB0cml2aWFsLgorCitHcm91cGluZyBwYWdlIHRhYmxlcyBpbiB0aGlzIGZhc2hpb24gbWFrZXMgUEdFIGNhY2hpbmcgaW4gU0NSMC9TQ1IxIG1vcmUgZWZmaWNpZW50IGJlY2F1c2UgdGhlCitjb3ZlcmFnZSBvZiB0aGUgY2FjaGVkIGl0ZW0gaXMgZ3JlYXRlci4KKworUGFnZSB0YWJsZXMgZm9yIHRoZSB2bWFsbG9jIGFyZWEgYXJlIGFsbG9jYXRlZCBhdCBib290IHRpbWUgYW5kIHNoYXJlZCBiZXR3ZWVuIGFsbCBtbV9zdHJ1Y3RzLgorCisKKz09PT09PT09PT09PT09PT09CitVU0VSIFNQQUNFIExBWU9VVAorPT09PT09PT09PT09PT09PT0KKworRm9yIE1NVSBjYXBhYmxlIExpbnV4LCB0aGUgcmVnaW9ucyB1c2Vyc3BhY2UgY29kZSBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgYXJlIGtlcHQgZW50aXJlbHkgc2VwYXJhdGUKK2Zyb20gdGhvc2UgZGVkaWNhdGVkIHRvIHRoZSBrZXJuZWw6CisKKwlWSVJUVUFMIEFERFJFU1MgICAgU0laRSAgIFBVUlBPU0UKKwk9PT09PT09PT09PT09PT09PSAgPT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJMDAwMDAwMDAtMDAwMDNmZmYgIDRLQiAgICBOVUxMIHBvaW50ZXIgYWNjZXNzIHRyYXAKKwkwMDAwNDAwMC0wMWZmZmZmZiAgfjMyTUIgIGxvd2VyIG1tYXAgc3BhY2UgKGdyb3dzIHVwKQorCTAyMDAwMDAwLTAyMWZmZmZmICAyTUIgICAgU3RhY2sgc3BhY2UgKGdyb3dzIGRvd24gZnJvbSB0b3ApCisJMDIyMDAwMDAtbm5ubm5ubm4gICAgICAgICBFeGVjdXRhYmxlIG1hcHBpbmcKKyAgICAgICAgbm5ubm5ubm4tICAgICAgICAgICAgICAgICBicmsgc3BhY2UgKGdyb3dzIHVwKQorCSAgICAgICAgLWJmZmZmZmZmICAgICAgICAgdXBwZXIgbW1hcCBzcGFjZSAoZ3Jvd3MgZG93bikKKworVGhpcyBpcyBzbyBhcnJhbmdlZCBzbyBhcyB0byBtYWtlIGJlc3QgdXNlIG9mIHRoZSAxNktCIHBhZ2UgdGFibGVzIGFuZCB0aGUgd2F5IGluIHdoaWNoIFBHRXMvUE1FcworYXJlIGNhY2hlZCBieSB0aGUgVExCIGhhbmRsZXIuIFRoZSBsb3dlciBtbWFwIHNwYWNlIGlzIGZpbGxlZCBmaXJzdCwgYW5kIHRoZW4gdGhlIHVwcGVyIG1tYXAgc3BhY2UKK2lzIGZpbGxlZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitHREItU1RVQiBNTVUgREVCVUdHSU5HIFNFUlZJQ0VTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBnZGItc3R1YiBpbmNsdWRlZCBpbiB0aGlzIGtlcm5lbCBwcm92aWRlcyBhIG51bWJlciBvZiBzZXJ2aWNlcyB0byBhaWQgaW4gdGhlIGRlYnVnZ2luZyBvZiBNTVUKK3JlbGF0ZWQga2VybmVsIHNlcnZpY2VzOgorCisgKCopIEV2ZXJ5IHRpbWUgdGhlIGtlcm5lbCBzdG9wcywgY2VydGFpbiBzdGF0ZSBpbmZvcm1hdGlvbiBpcyBkdW1wZWQgaW50byBfX2RlYnVnX21tdS4gVGhpcworICAgICB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIGFyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jLiBOb3RlIHRoYXQgdGhlIGdkYmluaXQgZmlsZSBpbiB0aGlzCisgICAgIGRpcmVjdG9yeSBoYXMgc29tZSB1c2VmdWwgbWFjcm9zIGZvciBkZWFsaW5nIHdpdGggdGhpcy4KKworICAgICAoKikgX19kZWJ1Z19tbXUudGxiW10KKworCSBUaGlzIHJlY2VpdmVzIHRoZSBjdXJyZW50IFRMQiBjb250ZW50cy4gVGhpcyBjYW4gYmUgdmlld2VkIHdpdGggdGhlIF90bGIgR0RCIG1hY3JvOgorCisJCShnZGIpIF90bGIKKwkJdGxiWzB4MDBdOiAwMTAwMDAwNSAwMDcxODIwMyAgMDEwMDAwMDIgMDA3MTgyMDMKKwkJdGxiWzB4MDFdOiAwMTAwNDAwMiAwMDZkNDIwMSAgMDEwMDQwMDUgMDA2ZDQyMDMKKwkJdGxiWzB4MDJdOiAwMTAwODAwMiAwMDZkMDIwMSAgMDEwMDgwMDYgMDAwMDQyMDAKKwkJdGxiWzB4MDNdOiAwMTAwYzAwNiAwMDdmNDIwMiAgMDEwMGMwMDIgMDA2NGMyMDIKKwkJdGxiWzB4MDRdOiAwMTExMDAwNSAwMDc3NDIwMSAgMDExMTAwMDIgMDA3NzQyMDEKKwkJdGxiWzB4MDVdOiAwMTExNDAwNSAwMDc3MDIwMSAgMDExMTQwMDIgMDA3NzAyMDEKKwkJdGxiWzB4MDZdOiAwMTExODAwMiAwMDc2YzIwMSAgMDExMTgwMDUgMDA3NmMyMDEKKwkJLi4uCisJCXRsYlsweDNkXTogMDEwZjQwMDIgMDA3OTAyMDAgIDAwMWY0MDAyIDAwNTRjYTAyCisJCXRsYlsweDNlXTogMDEwZjgwMDUgMDA3OGMyMDEgIDAxMGY4MDAyIDAwNzhjMjAxCisJCXRsYlsweDNmXTogMDAxZmMwMDIgMDA1NmNhMDEgIDAwMWZjMDA1IDAwNTM4YTAxCisKKyAgICAgKCopIF9fZGVidWdfbW11LmlhbXJbXQorICAgICAoKikgX19kZWJ1Z19tbXUuZGFtcltdCisKKwkgVGhlc2UgcmVjZWl2ZSB0aGUgY3VycmVudCBJQU1SIGFuZCBEQU1SIGNvbnRlbnRzLiBUaGVzZSBjYW4gYmUgdmlld2VkIHdpdGggd2l0aCB0aGUgX2FtcgorCSBHREIgbWFjcm86CisKKwkJKGdkYikgX2FtcgorCQlBTVJ4ICAgICAgICAgICBEQU1SICAgICAgICAgICAgICAgICAgICBJQU1SCisJCT09PT0gICA9PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT0KKwkJYW1yMCA6IEw6YzAwMDAwMDAgUDowMDAwMGNiOSA6IEw6YzAwMDAwMDAgUDowMDAwMDRiOQorCQlhbXIxIDogTDowMTA3MDAwNSBQOjAwNmY5MjAzIDogTDowMTAyYzAwNSBQOjAwNmExMjAxCisJCWFtcjIgOiBMOmQ4ZDAwMDAwIFA6MDAwMDAwMDAgOiBMOmQ4ZDAwMDAwIFA6MDAwMDAwMDAKKwkJYW1yMyA6IEw6ZDhkMDQwMDAgUDowMDUzNGMwZCA6IEw6MDAwMDAwMDAgUDowMDAwMDAwMAorCQlhbXI0IDogTDpkOGQwODAwMCBQOjAwNTU0YzBkIDogTDowMDAwMDAwMCBQOjAwMDAwMDAwCisJCWFtcjUgOiBMOmQ4ZDBjMDAwIFA6MDA1NTRjMGQgOiBMOjAwMDAwMDAwIFA6MDAwMDAwMDAKKwkJYW1yNiA6IEw6ZDhkMTAwMDAgUDowMDAwMDAwMCA6IEw6MDAwMDAwMDAgUDowMDAwMDAwMAorCQlhbXI3IDogTDpkOGQxNDAwMCBQOjAwMDAwMDAwIDogTDowMDAwMDAwMCBQOjAwMDAwMDAwCisJCWFtcjggOiBMOmQ4ZDE4MDAwIFA6MDAwMDAwMDAKKwkJYW1yOSA6IEw6ZDhkMWMwMDAgUDowMDAwMDAwMAorCQlhbXIxMDogTDpkOGQyMDAwMCBQOjAwMDAwMDAwCisJCWFtcjExOiBMOmUwMDAwMDAwIFA6ZTAwMDBjY2QKKworICgqKSBUaGUgY3VycmVudCB0YXNrJ3MgcGFnZSBkaXJlY3RvcnkgaXMgYm91bmQgdG8gREFNUjMuCisKKyAgICAgVGhpcyBjYW4gYmUgdmlld2VkIHdpdGggdGhlIF9wZ2QgR0RCIG1hY3JvOgorCisJKGdkYikgX3BnZAorCSQzID0ge3twZ2UgPSB7e3N0ZSA9IHsweDU1NDAwMSwgMHg1NTQxMDEsIDB4NTU0MjAxLCAweDU1NDMwMSwgMHg1NTQ0MDEsCisJCSAgMHg1NTQ1MDEsIDB4NTU0NjAxLCAweDU1NDcwMSwgMHg1NTQ4MDEsIDB4NTU0OTAxLCAweDU1NGEwMSwKKwkJICAweDU1NGIwMSwgMHg1NTRjMDEsIDB4NTU0ZDAxLCAweDU1NGUwMSwgMHg1NTRmMDEsIDB4NTU1MDAxLAorCQkgIDB4NTU1MTAxLCAweDU1NTIwMSwgMHg1NTUzMDEsIDB4NTU1NDAxLCAweDU1NTUwMSwgMHg1NTU2MDEsCisJCSAgMHg1NTU3MDEsIDB4NTU1ODAxLCAweDU1NTkwMSwgMHg1NTVhMDEsIDB4NTU1YjAxLCAweDU1NWMwMSwKKwkJICAweDU1NWQwMSwgMHg1NTVlMDEsIDB4NTU1ZjAxLCAweDU1NjAwMSwgMHg1NTYxMDEsIDB4NTU2MjAxLAorCQkgIDB4NTU2MzAxLCAweDU1NjQwMSwgMHg1NTY1MDEsIDB4NTU2NjAxLCAweDU1NjcwMSwgMHg1NTY4MDEsCisJCSAgMHg1NTY5MDEsIDB4NTU2YTAxLCAweDU1NmIwMSwgMHg1NTZjMDEsIDB4NTU2ZDAxLCAweDU1NmUwMSwKKwkJICAweDU1NmYwMSwgMHg1NTcwMDEsIDB4NTU3MTAxLCAweDU1NzIwMSwgMHg1NTczMDEsIDB4NTU3NDAxLAorCQkgIDB4NTU3NTAxLCAweDU1NzYwMSwgMHg1NTc3MDEsIDB4NTU3ODAxLCAweDU1NzkwMSwgMHg1NTdhMDEsCisJCSAgMHg1NTdiMDEsIDB4NTU3YzAxLCAweDU1N2QwMSwgMHg1NTdlMDEsIDB4NTU3ZjAxfX19fSwge3BnZSA9IHt7CisJCXN0ZSA9IHsweDAgPHJlcGVhdHMgNjQgdGltZXM+fX19fSA8cmVwZWF0cyA1MSB0aW1lcz4sIHtwZ2UgPSB7e3N0ZSA9IHsKKwkJICAweDI0ODAwMSwgMHgyNDgxMDEsIDB4MjQ4MjAxLCAweDI0ODMwMSwgMHgyNDg0MDEsIDB4MjQ4NTAxLAorCQkgIDB4MjQ4NjAxLCAweDI0ODcwMSwgMHgyNDg4MDEsIDB4MjQ4OTAxLCAweDI0OGEwMSwgMHgyNDhiMDEsCisJCSAgMHgyNDhjMDEsIDB4MjQ4ZDAxLCAweDI0OGUwMSwgMHgyNDhmMDEsIDB4MjQ5MDAxLCAweDI0OTEwMSwKKwkJICAweDI0OTIwMSwgMHgyNDkzMDEsIDB4MjQ5NDAxLCAweDI0OTUwMSwgMHgyNDk2MDEsIDB4MjQ5NzAxLAorCQkgIDB4MjQ5ODAxLCAweDI0OTkwMSwgMHgyNDlhMDEsIDB4MjQ5YjAxLCAweDI0OWMwMSwgMHgyNDlkMDEsCisJCSAgMHgyNDllMDEsIDB4MjQ5ZjAxLCAweDI0YTAwMSwgMHgyNGExMDEsIDB4MjRhMjAxLCAweDI0YTMwMSwKKwkJICAweDI0YTQwMSwgMHgyNGE1MDEsIDB4MjRhNjAxLCAweDI0YTcwMSwgMHgyNGE4MDEsIDB4MjRhOTAxLAorCQkgIDB4MjRhYTAxLCAweDI0YWIwMSwgMHgyNGFjMDEsIDB4MjRhZDAxLCAweDI0YWUwMSwgMHgyNGFmMDEsCisJCSAgMHgyNGIwMDEsIDB4MjRiMTAxLCAweDI0YjIwMSwgMHgyNGIzMDEsIDB4MjRiNDAxLCAweDI0YjUwMSwKKwkJICAweDI0YjYwMSwgMHgyNGI3MDEsIDB4MjRiODAxLCAweDI0YjkwMSwgMHgyNGJhMDEsIDB4MjRiYjAxLAorCQkgIDB4MjRiYzAxLCAweDI0YmQwMSwgMHgyNGJlMDEsIDB4MjRiZjAxfX19fSwge3BnZSA9IHt7c3RlID0geworCQkgIDB4MCA8cmVwZWF0cyA2NCB0aW1lcz59fX19IDxyZXBlYXRzIDExIHRpbWVzPn0KKworICgqKSBUaGUgUFREIGxhc3QgdXNlZCBieSB0aGUgaW5zdHJ1Y3Rpb24gVExCIG1pc3MgaGFuZGxlciBpcyBhdHRhY2hlZCB0byBEQU1SNC4KKyAoKikgVGhlIFBURCBsYXN0IHVzZWQgYnkgdGhlIGRhdGEgVExCIG1pc3MgaGFuZGxlciBpcyBhdHRhY2hlZCB0byBEQU1SNS4KKworICAgICBUaGVzZSBjYW4gYmUgdmlld2VkIHdpdGggdGhlIF9wdGRfaSBhbmQgX3B0ZF9kIEdEQiBtYWNyb3M6CisKKwkoZ2RiKSBfcHRkX2QKKwkkNSA9IHt7cHRlID0gMHgwfSA8cmVwZWF0cyAxMjcgdGltZXM+LCB7cHRlID0gMHg1MzliMDF9LCB7CisJICAgIHB0ZSA9IDB4MH0gPHJlcGVhdHMgODk2IHRpbWVzPiwge3B0ZSA9IDB4NzE5MzAzfSwge3B0ZSA9IDB4NmQ1MzAzfSwgeworCSAgICBwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwgeworCSAgICBwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LCB7cHRlID0gMHg2YTEzMDN9LCB7CisJICAgIHB0ZSA9IDB4MH0gPHJlcGVhdHMgMTIgdGltZXM+LCB7cHRlID0gMHg3MDkzMDN9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sCisJICB7cHRlID0gMHg2ZmQzMDN9LCB7cHRlID0gMHg2ZjkzMDN9LCB7cHRlID0gMHg2ZjUzMDN9LCB7cHRlID0gMHgwfSwgeworCSAgICBwdGUgPSAweDZlZDMwM30sIHtwdGUgPSAweDUzMWIwMX0sIHtwdGUgPSAweDUwZGIwMX0sIHsKKwkgICAgcHRlID0gMHgwfSA8cmVwZWF0cyAxMyB0aW1lcz4sIHtwdGUgPSAweDUzMDN9LCB7cHRlID0gMHg3ZjUzMDN9LCB7CisJICAgIHB0ZSA9IDB4NTA5YjAxfSwge3B0ZSA9IDB4NTA1YjAxfSwge3B0ZSA9IDB4N2M5MzAzfSwge3B0ZSA9IDB4N2I5MzAzfSwgeworCSAgICBwdGUgPSAweDdiNTMwM30sIHtwdGUgPSAweDdiMTMwM30sIHtwdGUgPSAweDdhZDMwM30sIHtwdGUgPSAweDB9LCB7CisJICAgIHB0ZSA9IDB4MH0sIHtwdGUgPSAweDdhMTMwM30sIHtwdGUgPSAweDB9LCB7cHRlID0gMHg3OTUzMDN9LCB7cHRlID0gMHgwfSwgeworCSAgICBwdGUgPSAweDc4ZDMwM30sIHtwdGUgPSAweDB9LCB7cHRlID0gMHgwfSwge3B0ZSA9IDB4MH0sIHtwdGUgPSAweDB9LCB7CisJICAgIHB0ZSA9IDB4MH0sIHtwdGUgPSAweDc3NTMwM30sIHtwdGUgPSAweDc3MTMwM30sIHtwdGUgPSAweDc2ZDMwM30sIHsKKwkgICAgcHRlID0gMHgwfSwge3B0ZSA9IDB4NzY1MzAzfSwge3B0ZSA9IDB4N2M1MzAzfSwge3B0ZSA9IDB4NTAxYjAxfSwgeworCSAgICBwdGUgPSAweDRmMWIwMX0sIHtwdGUgPSAweDRlZGIwMX0sIHtwdGUgPSAweDB9LCB7cHRlID0gMHg0ZjliMDF9LCB7CisJICAgIHB0ZSA9IDB4NGZkYjAxfSwge3B0ZSA9IDB4MH0gPHJlcGVhdHMgMjk5MiB0aW1lcz59CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hheWVzLWVzcC50eHQgYi9Eb2N1bWVudGF0aW9uL2hheWVzLWVzcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliNWQ1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaGF5ZXMtZXNwLnR4dApAQCAtMCwwICsxLDE1NCBAQAorSEFZRVMgRVNQIERSSVZFUiBWRVJTSU9OIDIuMQorCitBIGJpZyB0aGFua3MgdG8gdGhlIHBlb3BsZSBhdCBIYXllcywgZXNwZWNpYWxseSBBbGFuIEFkYW1zb24uICBUaGVpciBzdXBwb3J0CitoYXMgZW5hYmxlZCBtZSB0byBwcm92aWRlIGVuaGFuY2VtZW50cyB0byB0aGUgZHJpdmVyLgorCitQbGVhc2UgcmVwb3J0IHlvdXIgZXhwZXJpZW5jZXMgd2l0aCB0aGlzIGRyaXZlciB0byBtZSAoYXJvYmluc29Abnl4Lm5ldCkuICBJCithbSBsb29raW5nIGZvciBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmZWVkYmFjay4KKworKioqIElNUE9SVEFOVCBDSEFOR0VTIEZPUiAyLjEgKioqCitTdXBwb3J0IGZvciBQSU8gbW9kZS4gIEZpdmUgc2l0dWF0aW9ucyB3aWxsIGNhdXNlIFBJTyBtb2RlIHRvIGJlIHVzZWQ6CisxKSBBIG11bHRpcG9ydCBjYXJkIGlzIGRldGVjdGVkLiAgUElPIG1vZGUgd2lsbCBhbHdheXMgYmUgdXNlZC4gICg4IHBvcnQgY2FyZHMKK2RvIG5vdCBzdXBwb3J0IERNQSkuCisyKSBUaGUgRE1BIGNoYW5uZWwgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUgKGFueXRoaW5nIG90aGVyIHRoYW4gMSBvciAzKS4KKzMpIFRoZSBETUEgYnVmZmVyL2NoYW5uZWwgY291bGQgbm90IGJlIGFsbG9jYXRlZC4gIFRoZSBwb3J0IHdpbGwgcmV2ZXJ0IHRvIFBJTworbW9kZSB1bnRpbCBpdCBpcyByZW9wZW5lZC4KKzQpIExlc3MgdGhhbiBhIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgbmVlZCB0byBiZSB0cmFuc2ZlcnJlZCB0by9mcm9tIHRoZQorRklGT3MuICBQSU8gbW9kZSB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgdHJhbnNmZXIgb25seS4KKzUpIEEgcG9ydCBuZWVkcyB0byBkbyBhIERNQSB0cmFuc2ZlciBhbmQgYW5vdGhlciBwb3J0IGlzIGFscmVhZHkgdXNpbmcgdGhlCitETUEgY2hhbm5lbC4gIFBJTyBtb2RlIHdpbGwgYmUgdXNlZCBmb3IgdGhhdCB0cmFuc2ZlciBvbmx5LgorCitTaW5jZSB0aGUgSGF5ZXMgRVNQIHNlZW1zIHRvIGNvbmZsaWN0IHdpdGggb3RoZXIgY2FyZHMgKG5vdGFibHkgc291bmQgY2FyZHMpCit3aGVuIHVzaW5nIERNQSwgRE1BIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4gIFRvIHVzZSBETUEsIGl0IG11c3QgYmUgdHVybmVkCitvbiBleHBsaWNpdGx5LCBlaXRoZXIgd2l0aCB0aGUgImRtYT0iIG9wdGlvbiBkZXNjcmliZWQgYmVsb3cgb3Igd2l0aAorc2V0c2VyaWFsLiAgQSBtdWx0aXBvcnQgY2FyZCBjYW4gYmUgZm9yY2VkIGludG8gRE1BIG1vZGUgYnkgdXNpbmcgc2V0c2VyaWFsOworaG93ZXZlciwgbW9zdCBtdWx0aXBvcnQgY2FyZHMgZG9uJ3Qgc3VwcG9ydCBETUEuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiBzZXRzZXJpYWwgYWxsb3dzIHRoZSBlbmhhbmNlZCBjb25maWd1cmF0aW9uIG9mIHRoZSBFU1AKK2NhcmQgdG8gYmUgdmlld2VkIGFuZCBtb2RpZmllZC4KKyoqKgorCitUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIGZpbGVzIG5lZWRlZCB0byBjb21waWxlIGEgbW9kdWxlIHRvIHN1cHBvcnQgdGhlIEhheWVzCitFU1AgY2FyZC4gIFRoZSBkcml2ZXJzIGFyZSBiYXNpY2FsbHkgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBzZXJpYWwgZHJpdmVycy4KKworRmVhdHVyZXM6CisKKy0gVXNlcyB0aGUgZW5oYW5jZWQgbW9kZSBvZiB0aGUgRVNQIGNhcmQsIGFsbG93aW5nIGEgd2lkZXIgcmFuZ2Ugb2YKKyAgaW50ZXJydXB0cyBhbmQgZmVhdHVyZXMgdGhhbiBjb21wYXRpYmlsaXR5IG1vZGUKKy0gVXNlcyBETUEgYW5kIDE2IGJpdCBQSU8gbW9kZSB0byB0cmFuc2ZlciBkYXRhIHRvIGFuZCBmcm9tIHRoZSBFU1AncyBGSUZPcywKKyAgcmVkdWNpbmcgQ1BVIGxvYWQKKy0gU3VwcG9ydHMgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHBvcnRzCisKKworSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhlIElSUXMgdG8gdXNlIGNhbiBiZSBzcGVjaWZpZWQgYnkKK3VzaW5nIHRoZSBpcnE9IG9wdGlvbi4gIFRoZSBmb3JtYXQgaXM6CisKK2lycT1bMHgxMDBdLFsweDE0MF0sWzB4MTgwXSxbMHgyMDBdLFsweDI0MF0sWzB4MjgwXSxbMHgzMDBdLFsweDM4MF0KKworVGhlIGFkZHJlc3MgaW4gYnJhY2tldHMgaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2FyZC4gIFRoZSBJUlEgb2YKK25vbmV4aXN0ZW50IGNhcmRzIGNhbiBiZSBzZXQgdG8gMC4gIElmIGFuIElSUSBvZiBhIGNhcmQgdGhhdCBkb2VzIGV4aXN0IGlzIHNldAordG8gMCwgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gZ3Vlc3MgYXQgdGhlIGNvcnJlY3QgSVJRLiAgRm9yIGV4YW1wbGUsIHRvIHNldAordGhlIElSUSBvZiB0aGUgY2FyZCBhdCBhZGRyZXNzIDB4MzAwIHRvIDEyLCB0aGUgaW5zbW9kIGNvbW1hbmQgd291bGQgYmU6CisKK2luc21vZCBlc3AgaXJxPTAsMCwwLDAsMCwwLDEyLDAKKworVGhlIGN1c3RvbSBkaXZpc29yIGNhbiBiZSBzZXQgYnkgdXNpbmcgdGhlIGRpdmlzb3I9IG9wdGlvbi4gIFRoZSBmb3JtYXQgaXMgdGhlCitzYW1lIGFzIGZvciB0aGUgaXJxPSBvcHRpb24uICBFYWNoIGRpdmlzb3IgdmFsdWUgaXMgYSBzZXJpZXMgb2YgaGV4IGRpZ2l0cywKK3dpdGggZWFjaCBkaWdpdCByZXByZXNlbnRpbmcgdGhlIGRpdmlzb3IgdG8gdXNlIGZvciBhIGNvcnJlc3BvbmRpbmcgcG9ydC4gIFRoZQorZGl2aXNvciB2YWx1ZSBpcyBjb25zdHJ1Y3RlZCBSSUdIVCBUTyBMRUZULiAgU3BlY2lmeWluZyBhIG5vbnplcm8gZGl2aXNvciB2YWx1ZQord2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgc3BkX2N1c3QgZmxhZy4gIFRvIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciB0byB1c2UgZm9yCithIGNlcnRhaW4gYmF1ZCByYXRlLCBkaXZpZGUgdGhlIHBvcnQncyBiYXNlIGJhdWQgKGdlbmVyYWxseSA5MjE2MDApIGJ5IHRoZQorZGVzaXJlZCByYXRlLiAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgZGl2aXNvciBvZiB0aGUgcHJpbWFyeSBwb3J0IGF0IDB4MzAwIHRvCis0IGFuZCB0aGUgZGl2aXNvciBvZiB0aGUgc2Vjb25kYXJ5IHBvcnQgYXQgMHgzMDggdG8gOCwgdGhlIGluc21vZCBjb21tYW5kIHdvdWxkCitiZToKKworaW5zbW9kIGVzcCBkaXZpc29yPTAsMCwwLDAsMCwwLDB4ODQsMAorCitUaGUgZG1hPSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBETUEgY2hhbm5lbC4gIFRoZSBjaGFubmVsIGNhbiBiZSBlaXRoZXIKKzEgb3IgMy4gIFNwZWNpZnlpbmcgYW55IG90aGVyIHZhbHVlIHdpbGwgZm9yY2UgdGhlIGRyaXZlciB0byB1c2UgUElPIG1vZGUuCitGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSBETUEgY2hhbm5lbCB0byAzLCB0aGUgaW5zbW9kIGNvbW1hbmQgd291bGQgYmU6CisKK2luc21vZCBlc3AgZG1hPTMKKworVGhlIHJ4X3RyaWdnZXI9IGFuZCB0eF90cmlnZ2VyPSBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgRklGTyB0cmlnZ2VyCitsZXZlbHMuICBUaGV5IHNwZWNpZnkgd2hlbiB0aGUgRVNQIGNhcmQgc2hvdWxkIHNlbmQgYW4gaW50ZXJydXB0LiAgTGFyZ2VyCit2YWx1ZXMgd2lsbCBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGludGVycnVwdHM7IGhvd2V2ZXIsIGEgdmFsdWUgdG9vIGhpZ2ggbWF5CityZXN1bHQgaW4gZGF0YSBsb3NzLiAgVmFsaWQgdmFsdWVzIGFyZSAxIHRocm91Z2ggMTAyMywgd2l0aCA3NjggYmVpbmcgdGhlCitkZWZhdWx0LiAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgcmVjZWl2ZSB0cmlnZ2VyIGxldmVsIHRvIDUxMiBieXRlcyBhbmQgdGhlCit0cmFuc21pdCB0cmlnZ2VyIGxldmVsIHRvIDcwMCBieXRlcywgdGhlIGluc21vZCBjb21tYW5kIHdvdWxkIGJlOgorCitpbnNtb2QgZXNwIHJ4X3RyaWdnZXI9NTEyIHR4X3RyaWdnZXI9NzAwCisKK1RoZSBmbG93X29mZj0gYW5kIGZsb3dfb249IG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBoYXJkd2FyZSBmbG93IG9mZi8KK2Zsb3cgb24gbGV2ZWxzLiAgVGhlIGZsb3cgb24gbGV2ZWwgbXVzdCBiZSBsb3dlciB0aGFuIHRoZSBmbG93IG9mZiBsZXZlbCwgYW5kCit0aGUgZmxvdyBvZmYgbGV2ZWwgc2hvdWxkIGJlIGhpZ2hlciB0aGFuIHJ4X3RyaWdnZXIuICBWYWxpZCB2YWx1ZXMgYXJlIDEKK3Rocm91Z2ggMTAyMywgd2l0aCAxMDE2IGJlaW5nIHRoZSBkZWZhdWx0IGZsb3cgb2ZmIGxldmVsIGFuZCA5NDQgYmVpbmcgdGhlCitkZWZhdWx0IGZsb3cgb24gbGV2ZWwuICBGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSBmbG93IG9mZiBsZXZlbCB0byAxMDAwIGJ5dGVzCithbmQgdGhlIGZsb3cgb24gbGV2ZWwgdG8gOTM1IGJ5dGVzLCB0aGUgaW5zbW9kIGNvbW1hbmQgd291bGQgYmU6CisKK2luc21vZCBlc3AgZmxvd19vZmY9MTAwMCBmbG93X29uPTkzNQorCitUaGUgcnhfdGltZW91dD0gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcmVjZWl2ZSB0aW1lb3V0IHZhbHVlLiAgVGhpcwordmFsdWUgaW5kaWNhdGVzIGhvdyBsb25nIGFmdGVyIHJlY2VpdmluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgdGhhdCB0aGUgRVNQIGNhcmQKK3Nob3VsZCB3YWl0IGJlZm9yZSBzaWduYWxsaW5nIGFuIGludGVycnVwdC4gIFZhbGlkIHZhbHVlcyBhcmUgMCB0aG91Z2ggMjU1LAord2l0aCAxMjggYmVpbmcgdGhlIGRlZmF1bHQuICBBIHZhbHVlIHRvbyBoaWdoIHdpbGwgaW5jcmVhc2UgbGF0ZW5jeSwgYW5kIGEKK3ZhbHVlIHRvbyBsb3cgd2lsbCBjYXVzZSB1bm5lY2Vzc2FyeSBpbnRlcnJ1cHRzLiAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUKK3JlY2VpdmUgdGltZW91dCB0byAyNTUsIHRoZSBpbnNtb2QgY29tbWFuZCB3b3VsZCBiZToKKworaW5zbW9kIGVzcCByeF90aW1lb3V0PTI1NQorCitUaGUgcGlvX3RocmVzaG9sZD0gb3B0aW9uIHNldHMgdGhlIHRocmVzaG9sZCAoaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMpIGZvcgordXNpbmcgUElPIG1vZGUgaW5zdGVhZCBvZiBETUEgbW9kZS4gIEZvciBleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIDMyLAordHJhbnNmZXJzIG9mIDMyIGJ5dGVzIG9yIGxlc3Mgd2lsbCBhbHdheXMgdXNlIFBJTyBtb2RlLgorCitpbnNtb2QgZXNwIHBpb190aHJlc2hvbGQ9MzIKKworTXVsdGlwbGUgb3B0aW9ucyBjYW4gYmUgbGlzdGVkIG9uIHRoZSBpbnNtb2QgY29tbWFuZCBsaW5lIGJ5IHNlcGFyYXRpbmcgZWFjaAorb3B0aW9uIHdpdGggYSBzcGFjZS4gIEZvciBleGFtcGxlOgorCitpbnNtb2QgZXNwIGRtYT0zIHRyaWdnZXI9NTEyCisKK1RoZSBlc3AgbW9kdWxlIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCB3aGVuIG5lZWRlZC4gIFRvIGNhdXNlIHRoaXMgdG8KK2hhcHBlbiwgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mIChyZXBsYWNpbmcgdGhlIGxhc3QgbGluZQord2l0aCBvcHRpb25zIGZvciB5b3VyIGNvbmZpZ3VyYXRpb24pOgorCithbGlhcyBjaGFyLW1ham9yLTU3IGVzcAorYWxpYXMgY2hhci1tYWpvci01OCBlc3AKK29wdGlvbnMgZXNwIGlycT0wLDAsMCwwLDAsMCwzLDAgZGl2aXNvcj0wLDAsMCwwLDAsMCwweDQsMAorCitZb3UgbWF5IGFsc28gbmVlZCB0byBydW4gJ2RlcG1vZCAtYScuCisKK0RldmljZXMgbXVzdCBiZSBjcmVhdGVkIG1hbnVhbGx5LiAgVG8gY3JlYXRlIHRoZSBkZXZpY2VzLCBub3RlIHRoZSBvdXRwdXQgZnJvbQordGhlIG1vZHVsZSBhZnRlciBpdCBpcyBpbnNlcnRlZC4gIFRoZSBvdXRwdXQgd2lsbCBhcHBlYXIgaW4gdGhlIGxvY2F0aW9uIHdoZXJlCitrZXJuZWwgbWVzc2FnZXMgdXN1YWxseSBhcHBlYXIgKHVzdWFsbHkgL3Zhci9hZG0vbWVzc2FnZXMpLiAgQ3JlYXRlIHR3byBkZXZpY2VzCitmb3IgZWFjaCAndHR5JyBtZW50aW9uZWQsIG9uZSB3aXRoIG1ham9yIG9mIDU3IGFuZCB0aGUgb3RoZXIgd2l0aCBtYWpvciBvZiA1OC4KK1RoZSBtaW5vciBudW1iZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSB0dHkgbnVtYmVyIHJlcG9ydGVkLiAgVGhlIGNvbW1hbmRzCit3b3VsZCBiZSAocmVwbGFjZSA/IHdpdGggdGhlIHR0eSBudW1iZXIpOgorCitta25vZCAvZGV2L3R0eVA/IGMgNTcgPworbWtub2QgL2Rldi9jdXA/IGMgNTggPworCitGb3IgZXhhbXBsZSwgaWYgdGhlIGZvbGxvd2luZyBsaW5lIGFwcGVhcnM6CisKK09jdCAyNCAxODoxNzoyMyB0ZWNobm8ga2VybmVsOiB0dHlQOCBhdCAweDAxNDAgKGlycSA9IDMpIGlzIGFuIEVTUCBwcmltYXJ5IHBvcnQKKworLi4udHdvIGRldmljZXMgc2hvdWxkIGJlIGNyZWF0ZWQ6CisKK21rbm9kIC9kZXYvdHR5UDggYyA1NyA4Citta25vZCAvZGV2L2N1cDggYyA1OCA4CisKK1lvdSBtYXkgbmVlZCB0byBzZXQgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBkZXZpY2VzOgorCitjaG1vZCA2NjYgL2Rldi90dHlQKgorY2htb2QgNjY2IC9kZXYvY3VwKgorCitUaGUgRVNQIG1vZHVsZSBhbmQgdGhlIHNlcmlhbCBtb2R1bGUgc2hvdWxkIG5vdCBjb25mbGljdCAodGhleSBjYW4gYmUgdXNlZCBhdAordGhlIHNhbWUgdGltZSkuICBBZnRlciB0aGUgRVNQIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQgdGhlIHBvcnRzIG9uIHRoZSBFU1AgY2FyZAord2lsbCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZSBieSB0aGUgc2VyaWFsIGRyaXZlci4KKworSWYgSS9PIGVycm9ycyBhcmUgZXhwZXJpZW5jZWQgd2hlbiBhY2Nlc3NpbmcgdGhlIHBvcnQsIGNoZWNrIGZvciBJUlEgYW5kIERNQQorY29uZmxpY3RzICgnY2F0IC9wcm9jL2ludGVycnVwdHMnIGFuZCAnY2F0IC9wcm9jL2RtYScgZm9yIGEgbGlzdCBvZiBJUlFzIGFuZAorRE1BcyBjdXJyZW50bHkgaW4gdXNlKS4KKworRW5qb3khCitBbmRyZXcgSi4gUm9iaW5zb24gPGFyb2JpbnNvQG55eC5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hpZ2h1aWQudHh0IGIvRG9jdW1lbnRhdGlvbi9oaWdodWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzMzOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9oaWdodWlkLnR4dApAQCAtMCwwICsxLDc5IEBACitOb3RlcyBvbiB0aGUgY2hhbmdlIGZyb20gMTYtYml0IFVJRHMgdG8gMzItYml0IFVJRHM6CisKKy0ga2VybmVsIGNvZGUgTVVTVCB0YWtlIGludG8gYWNjb3VudCBfX2tlcm5lbF91aWRfdCBhbmQgX19rZXJuZWxfdWlkMzJfdAorICB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UgaW4gYW4gaW9jdGwgb3IgZGF0YQorICBzdHJ1Y3R1cmUuCisKKy0ga2VybmVsIGNvZGUgc2hvdWxkIHVzZSB1aWRfdCBhbmQgZ2lkX3QgaW4ga2VybmVsLXByaXZhdGUgc3RydWN0dXJlcyBhbmQKKyAgY29kZS4KKworV2hhdCdzIGxlZnQgdG8gYmUgZG9uZSBmb3IgMzItYml0IFVJRHMgb24gYWxsIExpbnV4IGFyY2hpdGVjdHVyZXM6CisKKy0gRGlzayBxdW90YXMgaGF2ZSBhbiBpbnRlcmVzdGluZyBsaW1pdGF0aW9uIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlCisgIG1heGltdW0gVUlEL0dJRC4gVGhleSBhcmUgbGltaXRlZCBieSB0aGUgbWF4aW11bSBmaWxlIHNpemUgb24gdGhlCisgIHVuZGVybHlpbmcgZmlsZXN5c3RlbSwgYmVjYXVzZSBxdW90YSByZWNvcmRzIGFyZSB3cml0dGVuIGF0IG9mZnNldHMKKyAgY29ycmVzcG9uZGluZyB0byB0aGUgVUlEIGluIHF1ZXN0aW9uLgorICBGdXJ0aGVyIGludmVzdGlnYXRpb24gaXMgbmVlZGVkIHRvIHNlZSBpZiB0aGUgcXVvdGEgc3lzdGVtIGNhbiBjb3BlCisgIHByb3Blcmx5IHdpdGggaHVnZSBVSURzLiBJZiBpdCBjYW4gZGVhbCB3aXRoIDY0LWJpdCBmaWxlIG9mZnNldHMgb24gYWxsIAorICBhcmNoaXRlY3R1cmVzLCB0aGlzIHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLgorCistIERlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBrZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHN5c3RlbQorICBhY2NvdW50aW5nIGZpbGUsIG9yIGlmIHdlIHNob3VsZCBicmVhayBpdCBhcyB0aGUgY29tbWVudHMgc3VnZ2VzdAorICAoY3VycmVudGx5LCB0aGUgb2xkIDE2LWJpdCBVSUQgYW5kIEdJRCBhcmUgc3RpbGwgd3JpdHRlbiB0byBkaXNrLCBhbmQKKyAgcGFydCBvZiB0aGUgZm9ybWVyIHBhZCBzcGFjZSBpcyB1c2VkIHRvIHN0b3JlIHNlcGFyYXRlIDMyLWJpdCBVSUQgYW5kCisgIEdJRCkKKworLSBOZWVkIHRvIHZhbGlkYXRlIHRoYXQgT1MgZW11bGF0aW9uIGNhbGxzIHRoZSAxNi1iaXQgVUlECisgIGNvbXBhdGliaWxpdHkgc3lzY2FsbHMsIGlmIHRoZSBPUyBiZWluZyBlbXVsYXRlZCB1c2VkIDE2LWJpdCBVSURzLCBvcgorICB1c2VzIHRoZSAzMi1iaXQgVUlEIHN5c3RlbSBjYWxscyBwcm9wZXJseSBvdGhlcndpc2UuCisKKyAgVGhpcyBhZmZlY3RzIGF0IGxlYXN0OgorCVN1bk9TIGVtdWxhdGlvbgorCVNvbGFyaXMgZW11bGF0aW9uCisJaUJDUyBvbiBJbnRlbAorCisJc3BhcmMzMiBlbXVsYXRpb24gb24gc3BhcmM2NAorCShuZWVkIHRvIHN1cHBvcnQgd2hhdGV2ZXIgbmV3IDMyLWJpdCBVSUQgc3lzdGVtIGNhbGxzIGFyZSBhZGRlZCB0bworCXNwYXJjMzIpCisKKy0gVmFsaWRhdGUgdGhhdCBhbGwgZmlsZXN5c3RlbXMgYmVoYXZlIHByb3Blcmx5LgorCisgIEF0IHByZXNlbnQsIDMyLWJpdCBVSURzIF9zaG91bGRfIHdvcmsgZm9yOgorCWV4dDIKKwl1ZnMKKwlpc29mcworCW5mcworCWNvZGEKKwl1ZGYKKworICBJb2N0bCgpIGZpeHVwcyBoYXZlIGJlZW4gbWFkZSBmb3I6CisJbmNwZnMKKwlzbWJmcworCisgIEZpbGVzeXN0ZW1zIHdpdGggc2ltcGxlIGZpeHVwcyB0byBwcmV2ZW50IDE2LWJpdCBVSUQgd3JhcGFyb3VuZDoKKwltaW5peAorCXN5c3YKKwlxbng0CisKKyAgT3RoZXIgZmlsZXN5c3RlbXMgaGF2ZSBub3QgYmVlbiBjaGVja2VkIHlldC4KKworLSBUaGUgbmNwZnMgYW5kIHNtcGZzIGZpbGVzeXN0ZW1zIGNhbiBub3QgcHJlc2VudGx5IHVzZSAzMi1iaXQgVUlEcyBpbgorICBhbGwgaW9jdGwoKXMuIFNvbWUgbmV3IGlvY3RsKClzIGhhdmUgYmVlbiBhZGRlZCB3aXRoIDMyLWJpdCBVSURzLCBidXQKKyAgbW9yZSBhcmUgbmVlZGVkLiAoYXMgd2VsbCBhcyBuZXcgdXNlcjwtPmtlcm5lbCBkYXRhIHN0cnVjdHVyZXMpCisKKy0gVGhlIEVMRiBjb3JlIGR1bXAgZm9ybWF0IG9ubHkgc3VwcG9ydHMgMTYtYml0IFVJRHMgb24gYXJtLCBpMzg2LCBtNjhrLAorICBzaCwgYW5kIHNwYXJjMzIuIEZpeGluZyB0aGlzIGlzIHByb2JhYmx5IG5vdCB0aGF0IGltcG9ydGFudCwgYnV0IHdvdWxkCisgIHJlcXVpcmUgYWRkaW5nIGEgbmV3IEVMRiBzZWN0aW9uLgorCistIFRoZSBpb2N0bCgpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGluLWtlcm5lbCBORlMgc2VydmVyIG9ubHkgc3VwcG9ydAorICAxNi1iaXQgVUlEcyBvbiBhcm0sIGkzODYsIG02OGssIHNoLCBhbmQgc3BhcmMzMi4KKworLSBtYWtlIHN1cmUgdGhhdCB0aGUgVUlEIG1hcHBpbmcgZmVhdHVyZSBvZiBBWDI1IG5ldHdvcmtpbmcgd29ya3MgcHJvcGVybHkKKyAgKGl0IHNob3VsZCBiZSBzYWZlIGJlY2F1c2UgaXQncyBhbHdheXMgdXNlZCBhIDMyLWJpdCBpbnRlZ2VyIHRvCisgIGNvbW11bmljYXRlIGJldHdlZW4gdXNlciBhbmQga2VybmVsKQorCisKK0NocmlzIFdpbmcKK3dpbmdjQHVtaWNoLmVkdQorCitsYXN0IHVwZGF0ZWQ6IEphbnVhcnkgMTEsIDIwMDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHBldC50eHQgYi9Eb2N1bWVudGF0aW9uL2hwZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2NjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hwZXQudHh0CkBAIC0wLDAgKzEsMjk4IEBACisJCUhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIERyaXZlciBmb3IgTGludXgKKworVGhlIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIChIUEVUKSBoYXJkd2FyZSBpcyB0aGUgZnV0dXJlIHJlcGxhY2VtZW50IGZvciB0aGUgODI1NCBhbmQgUmVhbAorVGltZSBDbG9jayAoUlRDKSBwZXJpb2RpYyB0aW1lciBmdW5jdGlvbmFsaXR5LiAgRWFjaCBIUEVUIGNhbiBoYXZlIHVwIHR3byAzMiB0aW1lcnMuICBJdCBpcyBwb3NzaWJsZQordG8gY29uZmlndXJlIHRoZSBmaXJzdCB0d28gdGltZXJzIGFzIGxlZ2FjeSByZXBsYWNlbWVudHMgZm9yIDgyNTQgYW5kIFJUQyBwZXJpb2RpYy4gIEEgc3BlY2lmaWNhdGlvbgorZG9uZSBieSBJTlRFTCBhbmQgTWljcm9zb2Z0IGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmludGVsLmNvbS9sYWJzL3BsYXRjb21wL2hwZXQvaHBldHNwZWMuaHRtLgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGRldGVjdGlvbiBvZiBIUEVUIGRyaXZlciBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgSFBFVCBiZWZvcmUgdGhlCitkcml2ZXIgbW9kdWxlX2luaXQgcm91dGluZSBpcyBjYWxsZWQuICBUaGlzIGVuYWJsZXMgcGxhdGZvcm0gY29kZSB3aGljaCB1c2VzIHRpbWVyIDAgb3IgMSBhcyB0aGUKK21haW4gdGltZXIgdG8gaW50ZXJjZXB0IEhQRVQgaW5pdGlhbGl6YXRpb24uICBBbiBleGFtcGxlIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24gY2FuIGJlIGZvdW5kIGluCithcmNoL2kzODYva2VybmVsL3RpbWVfaHBldC5jLgorCitUaGUgZHJpdmVyIHByb3ZpZGVzIHR3byBBUElzIHdoaWNoIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIEFQSSBmb3VuZCBpbiB0aGUgcnRjLmMgZHJpdmVyLgorVGhlcmUgaXMgYSB1c2VyIHNwYWNlIEFQSSBhbmQgYSBrZXJuZWwgc3BhY2UgQVBJLiAgQW4gZXhhbXBsZSB1c2VyIHNwYWNlIHByb2dyYW0gaXMgcHJvdmlkZWQKK2JlbG93LgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHBldC5oPgorCisKK2V4dGVybiB2b2lkIGhwZXRfb3Blbl9jbG9zZShpbnQsIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIHZvaWQgaHBldF9pbmZvKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X3BvbGwoaW50LCBjb25zdCBjaGFyICoqKTsKK2V4dGVybiB2b2lkIGhwZXRfZmFzeW5jKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X3JlYWQoaW50LCBjb25zdCBjaGFyICoqKTsKKworI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK3N0cnVjdCBocGV0X2NvbW1hbmQgeworCWNoYXIJCSpjb21tYW5kOworCXZvaWQJCSgqZnVuYykoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndik7Cit9IGhwZXRfY29tbWFuZFtdID0geworCXsKKwkJIm9wZW4tY2xvc2UiLAorCQlocGV0X29wZW5fY2xvc2UKKwl9LAorCXsKKwkJImluZm8iLAorCQlocGV0X2luZm8KKwl9LAorCXsKKwkJInBvbGwiLAorCQlocGV0X3BvbGwKKwl9LAorCXsKKwkJImZhc3luYyIsCisJCWhwZXRfZmFzeW5jCisJfSwKK307CisKK2ludAorbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQoreworCWludAlpOworCisJYXJnYy0tOworCWFyZ3YrKzsKKworCWlmICghYXJnYykgeworCQlmcHJpbnRmKHN0ZGVyciwgIi1ocGV0OiByZXF1aXJlcyBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YgKGhwZXRfY29tbWFuZCkgLyBzaXplb2YgKGhwZXRfY29tbWFuZFswXSkpOyBpKyspCisJCWlmICghc3RyY21wKGFyZ3ZbMF0sIGhwZXRfY29tbWFuZFtpXS5jb21tYW5kKSkgeworCQkJYXJnYy0tOworCQkJYXJndisrOworCQkJZnByaW50ZihzdGRlcnIsICItaHBldDogZXhlY3V0aW5nICVzXG4iLAorCQkJCWhwZXRfY29tbWFuZFtpXS5jb21tYW5kKTsKKwkJCWhwZXRfY29tbWFuZFtpXS5mdW5jKGFyZ2MsIGFyZ3YpOworCQkJcmV0dXJuIDA7CisJCX0KKworCWZwcmludGYoc3RkZXJyLCAiZG9faHBldDogY29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWRcbiIsIGFyZ3ZbMF0pOworCisJcmV0dXJuIC0xOworfQorCit2b2lkCitocGV0X29wZW5fY2xvc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludAlmZDsKKworCWlmIChhcmdjICE9IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IGRldmljZS1uYW1lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZkID0gb3Blbihhcmd2WzBdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IG9wZW4gZmFpbGVkXG4iKTsKKwllbHNlCisJCWNsb3NlKGZkKTsKKworCXJldHVybjsKK30KKwordm9pZAoraHBldF9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKK30KKwordm9pZAoraHBldF9wb2xsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkOworCXN0cnVjdCBwb2xsZmQJCXBmZDsKKwlzdHJ1Y3QgaHBldF9pbmZvCWluZm87CisJc3RydWN0IHRpbWV2YWwJCXN0diwgZXR2OworCXN0cnVjdCB0aW1lem9uZQkJdHo7CisJbG9uZwkJCXVzZWM7CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlcSA9IGF0b2koYXJndlsxXSk7CisJaXRlcmF0aW9ucyA9IGF0b2koYXJndlsyXSk7CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogb3BlbiBvZiAlcyBmYWlsZWRcbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogSFBFVF9JUlFGUkVRIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JTkZPLCAmaW5mbykgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBmYWlsZWQgdG8gZ2V0IGluZm9cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7CisKKwlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBIUEVUX0VQSSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW9jdGwoZmQsIEhQRVRfSUVfT04sIDApIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbCwgSFBFVF9JRV9PTiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwZmQuZmQgPSBmZDsKKwlwZmQuZXZlbnRzID0gUE9MTElOOworCisJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworCQlwZmQucmV2ZW50cyA9IDA7CisJCWdldHRpbWVvZmRheSgmc3R2LCAmdHopOworCQlpZiAocG9sbCgmcGZkLCAxLCAtMSkgPCAwKQorCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHBvbGwgZmFpbGVkXG4iKTsKKwkJZWxzZSB7CisJCQlsb25nIAlkYXRhOworCisJCQlnZXR0aW1lb2ZkYXkoJmV0diwgJnR6KTsKKwkJCXVzZWMgPSBzdHYudHZfc2VjICogMTAwMDAwMCArIHN0di50dl91c2VjOworCQkJdXNlYyA9IChldHYudHZfc2VjICogMTAwMDAwMCArIGV0di50dl91c2VjKSAtIHVzZWM7CisKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJocGV0X3BvbGw6IGV4cGlyZWQgdGltZSA9IDB4JWx4XG4iLCB1c2VjKTsKKworCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHJldmVudHMgPSAweCV4XG4iLAorCQkJCXBmZC5yZXZlbnRzKTsKKworCQkJaWYgKHJlYWQoZmQsICZkYXRhLCBzaXplb2YoZGF0YSkpICE9IHNpemVvZihkYXRhKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiByZWFkIGZhaWxlZFxuIik7CisJCQl9CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IGRhdGEgMHglbHhcbiIsCisJCQkJCWRhdGEpOworCQl9CisJfQorCitvdXQ6CisJY2xvc2UoZmQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBocGV0X3NpZ2lvX2NvdW50OworCitzdGF0aWMgdm9pZAoraHBldF9zaWdpbyhpbnQgdmFsKQoreworCWZwcmludGYoc3RkZXJyLCAiaHBldF9zaWdpbzogY2FsbGVkXG4iKTsKKwlocGV0X3NpZ2lvX2NvdW50Kys7Cit9CisKK3ZvaWQKK2hwZXRfZmFzeW5jKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkLCB2YWx1ZTsKKwlzaWdfdAkJCW9sZHNpZzsKKwlzdHJ1Y3QgaHBldF9pbmZvCWluZm87CisKKwlocGV0X3NpZ2lvX2NvdW50ID0gMDsKKwlmZCA9IC0xOworCisJaWYgKChvbGRzaWcgPSBzaWduYWwoU0lHSU8sIGhwZXRfc2lnaW8pKSA9PSBTSUdfRVJSKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZhaWxlZCB0byBzZXQgc2lnbmFsIGhhbmRsZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisKKworCWlmICgoZmNudGwoZmQsIEZfU0VUT1dOLCBnZXRwaWQoKSkgPT0gMSkgfHwKKwkJKCh2YWx1ZSA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgPT0gMSkgfHwKKwkJKGZjbnRsKGZkLCBGX1NFVEZMLCB2YWx1ZSB8IE9fQVNZTkMpID09IDEpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZjbnRsIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZyZXEgPSBhdG9pKGFyZ3ZbMV0pOworCWl0ZXJhdGlvbnMgPSBhdG9pKGFyZ3ZbMl0pOworCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBIUEVUX0lSUUZSRVEgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lORk8sICZpbmZvKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZmFpbGVkIHRvIGdldCBpbmZvXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7CisKKwlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IEhQRVRfRVBJIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JRV9PTiwgMCkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmMsIEhQRVRfSUVfT04gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworCQkodm9pZCkgcGF1c2UoKTsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogY291bnQgPSAlZFxuIiwgaHBldF9zaWdpb19jb3VudCk7CisJfQorCitvdXQ6CisJc2lnbmFsKFNJR0lPLCBvbGRzaWcpOworCisJaWYgKGZkID49IDApCisJCWNsb3NlKGZkKTsKKworCXJldHVybjsKK30KKworVGhlIGtlcm5lbCBBUEkgaGFzIHRocmVlIGludGVyZmFjZXMgZXhwb3J0ZWQgZnJvbSB0aGUgZHJpdmVyOgorCisJaHBldF9yZWdpc3RlcihzdHJ1Y3QgaHBldF90YXNrICp0cCwgaW50IHBlcmlvZGljKQorCWhwZXRfdW5yZWdpc3RlcihzdHJ1Y3QgaHBldF90YXNrICp0cCkKKwlocGV0X2NvbnRyb2woc3RydWN0IGhwZXRfdGFzayAqdHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCitUaGUga2VybmVsIG1vZHVsZSB1c2luZyB0aGlzIGludGVyZmFjZSBmaWxscyBpbiB0aGUgaHRfZnVuYyBhbmQgaHRfZGF0YSBtZW1iZXJzIG9mIHRoZQoraHBldF90YXNrIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyBocGV0X3JlZ2lzdGVyLiAgaHBldF9jb250cm9sIHNpbXBseSB2ZWN0b3JzIHRvIHRoZSBocGV0X2lvY3RsCityb3V0aW5lIGFuZCBoYXMgdGhlIHNhbWUgY29tbWFuZHMgYW5kIHJlc3BlY3RpdmUgYXJndW1lbnRzIGFzIHRoZSB1c2VyIEFQSS4gIGhwZXRfdW5yZWdpc3RlcgoraXMgdXNlZCB0byB0ZXJtaW5hdGUgdXNhZ2Ugb2YgdGhlIEhQRVQgdGltZXIgcmVzZXJ2ZWQgYnkgaHBldF9yZWdpc3Rlci4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3X3JhbmRvbS50eHQgYi9Eb2N1bWVudGF0aW9uL2h3X3JhbmRvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1OGMzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdfcmFuZG9tLnR4dApAQCAtMCwwICsxLDY5IEBACisJSGFyZHdhcmUgZHJpdmVyIGZvciBJbnRlbC9BTUQvVklBIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9ycyAoUk5HKQorCUNvcHlyaWdodCAyMDAwLDIwMDEgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorCUNvcHlyaWdodCAyMDAwLDIwMDEgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQG1hbmRyYWtlc29mdC5jb20+CisKK0ludHJvZHVjdGlvbjoKKworCVRoZSBod19yYW5kb20gZGV2aWNlIGRyaXZlciBpcyBzb2Z0d2FyZSB0aGF0IG1ha2VzIHVzZSBvZiBhCisJc3BlY2lhbCBoYXJkd2FyZSBmZWF0dXJlIG9uIHlvdXIgQ1BVIG9yIG1vdGhlcmJvYXJkLAorCWEgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKFJORykuCisKKwlJbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhpcyBkZXZpY2UgZHJpdmVyLCB5b3UKKwlzaG91bGQgZG93bmxvYWQgdGhlIHN1cHBvcnQgc29mdHdhcmUgYXMgd2VsbC4gIERvd25sb2FkIHRoZQorCWxhdGVzdCB2ZXJzaW9uIG9mIHRoZSAicm5nLXRvb2xzIiBwYWNrYWdlIGZyb20gdGhlCisJaHdfcmFuZG9tIGRyaXZlcidzIG9mZmljaWFsIFdlYiBzaXRlOgorCisJCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC8KKworQWJvdXQgdGhlIEludGVsIFJORyBoYXJkd2FyZSwgZnJvbSB0aGUgZmlybXdhcmUgaHViIGRhdGFzaGVldDoKKworCVRoZSBGaXJtd2FyZSBIdWIgaW50ZWdyYXRlcyBhIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChSTkcpCisJdXNpbmcgdGhlcm1hbCBub2lzZSBnZW5lcmF0ZWQgZnJvbSBpbmhlcmVudGx5IHJhbmRvbSBxdWFudHVtCisJbWVjaGFuaWNhbCBwcm9wZXJ0aWVzIG9mIHNpbGljb24uIFdoZW4gbm90IGdlbmVyYXRpbmcgbmV3IHJhbmRvbQorCWJpdHMgdGhlIFJORyBjaXJjdWl0cnkgd2lsbCBlbnRlciBhIGxvdyBwb3dlciBzdGF0ZS4gSW50ZWwgd2lsbAorCXByb3ZpZGUgYSBiaW5hcnkgc29mdHdhcmUgZHJpdmVyIHRvIGdpdmUgdGhpcmQgcGFydHkgc29mdHdhcmUKKwlhY2Nlc3MgdG8gb3VyIFJORyBmb3IgdXNlIGFzIGEgc2VjdXJpdHkgZmVhdHVyZS4gQXQgdGhpcyB0aW1lLAorCXRoZSBSTkcgaXMgb25seSB0byBiZSB1c2VkIHdpdGggYSBzeXN0ZW0gaW4gYW4gT1MtcHJlc2VudCBzdGF0ZS4KKworVGhlb3J5IG9mIG9wZXJhdGlvbjoKKworCUNoYXJhY3RlciBkcml2ZXIuICBVc2luZyB0aGUgc3RhbmRhcmQgb3BlbigpCisJYW5kIHJlYWQoKSBzeXN0ZW0gY2FsbHMsIHlvdSBjYW4gcmVhZCByYW5kb20gZGF0YSBmcm9tCisJdGhlIGhhcmR3YXJlIFJORyBkZXZpY2UuICBUaGlzIGRhdGEgaXMgTk9UIENIRUNLRUQgYnkgYW55CisJZml0bmVzcyB0ZXN0cywgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGJvZ3VzIChpZiB0aGUKKwloYXJkd2FyZSBpcyBmYXVsdHkgb3IgaGFzIGJlZW4gdGFtcGVyZWQgd2l0aCkuICBEYXRhIGlzIG9ubHkKKwlvdXRwdXQgaWYgdGhlIGhhcmR3YXJlICJoYXMtZGF0YSIgZmxhZyBpcyBzZXQsIGJ1dCBuZXZlcnRoZWxlc3MKKwlhIHNlY3VyaXR5LWNvbnNjaW91cyBwZXJzb24gd291bGQgcnVuIGZpdG5lc3MgdGVzdHMgb24gdGhlCisJZGF0YSBiZWZvcmUgYXNzdW1pbmcgaXQgaXMgdHJ1bHkgcmFuZG9tLgorCisJL2Rldi9od3JhbmRvbSBpcyBjaGFyIGRldmljZSBtYWpvciAxMCwgbWlub3IgMTgzLgorCitEcml2ZXIgbm90ZXM6CisKKwkqIEZJWE1FOiBzdXBwb3J0IHBvbGwoMikKKworCU5PVEU6IHJlcXVlc3RfbWVtX3JlZ2lvbiB3YXMgcmVtb3ZlZCwgZm9yIHR3byByZWFzb25zOgorCTEpIE9ubHkgb25lIFJORyBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIDIpIFRoZSBsb2NhdGlvbgorCXVzZWQgYnkgdGhlIFJORyBpcyBhIGZpeGVkIGxvY2F0aW9uIGluIE1NSU8tYWRkcmVzc2FibGUgbWVtb3J5LAorCTMpIHVzZXJzIHdpdGggcHJvcGVybHkgd29ya2luZyBCSU9TIGU4MjAgaGFuZGxpbmcgd2lsbCBhbHdheXMKKwloYXZlIHRoZSByZWdpb24gaW4gd2hpY2ggdGhlIFJORyBpcyBsb2NhdGVkIHJlc2VydmVkLCBzbworCXJlcXVlc3RfbWVtX3JlZ2lvbiBjYWxscyBhbHdheXMgZmFpbCBmb3IgcHJvcGVyIHNldHVwcy4KKwlIb3dldmVyLCBmb3IgcGVvcGxlIHdobyB1c2UgbWVtPVhYLCBCSU9TIGU4MjAgaW5mb3JtYXRpb24gaXMKKwktbm90LSBpbiAvcHJvYy9pb21lbSwgYW5kIHJlcXVlc3RfbWVtX3JlZ2lvbihSTkdfQUREUikgY2FuCisJc3VjY2VlZC4KKworRHJpdmVyIGRldGFpbHM6CisKKwlCYXNlZCBvbjoKKwlJbnRlbCA4MjgwMkFCLzgyODAyQUMgRmlybXdhcmUgSHViIChGV0gpIERhdGFzaGVldAorCQlNYXkgMTk5OSBPcmRlciBOdW1iZXI6IDI5MDY1OC0wMDIgUgorCisJSW50ZWwgODI4MDIgRmlybXdhcmUgSHViOiBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgorCVByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsCisJCURlY2VtYmVyIDE5OTkgT3JkZXIgTnVtYmVyOiAyOTgwMjktMDAxIFIKKworCUludGVsIDgyODAyIEZpcm13YXJlIEhVQiBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBEcml2ZXIKKwlDb3B5cmlnaHQgKGMpIDIwMDAgTWF0dCBTb3R0ZWsgPG1zb3R0ZWtAcXVpa25ldC5jb20+CisKKwlTcGVjaWFsIHRoYW5rcyB0byBNYXR0IFNvdHRlay4gIEkgZGlkIHRoZSAiZ3V0cyIsIGhlCisJZGlkIHRoZSAiYnJhaW5zIiBhbmQgYWxsIHRoZSB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjNiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUKQEAgLTAsMCArMSw0MiBAQAorS2VybmVsIGRyaXZlciBpMmMtYWxpMTUzNQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogQWNlciBMYWJzLCBJbmMuIEFMSSAxNTM1IChzb3V0aCBicmlkZ2UpCisgICAgRGF0YXNoZWV0OiBOb3cgdW5kZXIgTkRBCisJaHR0cDovL3d3dy5hbGkuY29tLnR3L2VuZy9zdXBwb3J0L2RhdGFzaGVldF9yZXF1ZXN0LnBocAorCitBdXRob3JzOgorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sIAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiwKKwlEYW4gRWF0b24gPGRhbi5lYXRvbkByb2NrZXRsb2dpeC5jb20+LAorCVN0ZXBoZW4gUm91c3NldDxzdGVwaGVuLnJvdXNzZXRAcm9ja2V0bG9naXguY29tPgorCQkJCQkJCQkJCQkJCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU01CIEhvc3QgY29udHJvbGxlciBvbiBBY2VyIExhYnMgSW5jLiAoQUxJKQorTTE1MzUgU291dGggQnJpZGdlLgorCitUaGUgTTE1MzUgaXMgYSBTb3V0aCBicmlkZ2UgZm9yIHBvcnRhYmxlIHN5c3RlbXMuIEl0IGlzIHZlcnkgc2ltaWxhciB0byB0aGUKK00xNXgzIFNvdXRoIGJyaWRnZXMgYWxzbyBwcm9kdWNlZCBieSBBY2VyIExhYnMgSW5jLiAgU29tZSBvZiB0aGUgcmVnaXN0ZXJzCit3aXRoaW4gdGhlIHBhcnQgaGF2ZSBtb3ZlZCBhbmQgc29tZSBoYXZlIGJlZW4gcmVkZWZpbmVkIHNsaWdodGx5LgorQWRkaXRpb25hbGx5LCB0aGUgc2VxdWVuY2luZyBvZiB0aGUgU01CdXMgdHJhbnNhY3Rpb25zIGhhcyBiZWVuIG1vZGlmaWVkIHRvCitiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2VxdWVuY2luZyByZWNvbW1lbmRlZCBieSB0aGUgbWFudWZhY3R1cmVyIGFuZAorb2JzZXJ2ZWQgdGhyb3VnaCB0ZXN0aW5nLiAgVGhlc2UgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIGluIHRoaXMgZHJpdmVyIGFuZAorY2FuIGJlIGlkZW50aWZpZWQgYnkgY29tcGFyaW5nIHRoaXMgZHJpdmVyIHRvIHRoZSBpMmMtYWxpMTV4MyBkcml2ZXIuIEZvcgorYW4gb3ZlcnZpZXcgb2YgdGhlc2UgY2hpcHMgc2VlIGh0dHA6Ly93d3cuYWNlcmxhYnMuY29tCisKK1RoZSBTTUIgY29udHJvbGxlciBpcyBwYXJ0IG9mIHRoZSBNNzEwMSBkZXZpY2UsIHdoaWNoIGlzIGFuIEFDUEktY29tcGxpYW50CitQb3dlciBNYW5hZ2VtZW50IFVuaXQgKFBNVSkuCisKK1RoZSB3aG9sZSBNNzEwMSBkZXZpY2UgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoZSBTTUIgdG8gd29yay4gWW91IGNhbid0CitqdXN0IGVuYWJsZSB0aGUgU01CIGFsb25lLiBUaGUgU01CIGFuZCB0aGUgQUNQSSBoYXZlIHNlcGFyYXRlIEkvTyBzcGFjZXMuCitXZSBtYWtlIHN1cmUgdGhhdCB0aGUgU01CIGlzIGVuYWJsZWQuIFdlIGxlYXZlIHRoZSBBQ1BJIGFsb25lLgorCisKK0ZlYXR1cmVzCistLS0tLS0tLQorCitUaGlzIGRyaXZlciBjb250cm9scyB0aGUgU01CIEhvc3Qgb25seS4gVGhpcyBkcml2ZXIgZG9lcyBub3QgdXNlCitpbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YWQ0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMKQEAgLTAsMCArMSwyNyBAQAorS2VybmVsIGRyaXZlciBpMmMtYWxpMTU2MworCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogQWNlciBMYWJzLCBJbmMuIEFMSSAxNTYzIChzb3V0aCBicmlkZ2UpCisgICAgRGF0YXNoZWV0OiBOb3cgdW5kZXIgTkRBCisJaHR0cDovL3d3dy5hbGkuY29tLnR3L2VuZy9zdXBwb3J0L2RhdGFzaGVldF9yZXF1ZXN0LnBocAorCitBdXRob3I6IFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAZGlnaXRhbGltcGxhbnQub3JnPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgU01CIEhvc3QgY29udHJvbGxlciBvbiBBY2VyIExhYnMgSW5jLiAoQUxJKQorTTE1NjMgU291dGggQnJpZGdlLgorCitGb3IgYW4gb3ZlcnZpZXcgb2YgdGhlc2UgY2hpcHMgc2VlIGh0dHA6Ly93d3cuYWNlcmxhYnMuY29tCisKK1RoZSBNMTU2MyBzb3V0aGJyaWRnZSBpcyBkZWNlcHRpdmVseSBzaW1pbGFyIHRvIHRoZSBNMTUzMywgd2l0aCBhIGZldworbm90YWJsZSBleGNlcHRpb25zLiBPbmUgb2YgdGhvc2UgaGFwcGVucyB0byBiZSB0aGUgZmFjdCB0aGV5IHVwZ3JhZGVkIHRoZQoraTJjIGNvcmUgdG8gYmUgU01CdXMgMi4wIGNvbXBsaWFudCwgYW5kIGhhcHBlbnMgdG8gYmUgYWxtb3N0IGlkZW50aWNhbCB0bwordGhlIGkyYyBjb250cm9sbGVyIGZvdW5kIGluIHRoZSBJbnRlbCA4MDEgc291dGggYnJpZGdlcy4gCisKK0ZlYXR1cmVzCistLS0tLS0tLQorCitUaGlzIGRyaXZlciBjb250cm9scyB0aGUgU01CIEhvc3Qgb25seS4gVGhpcyBkcml2ZXIgZG9lcyBub3QgdXNlCitpbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjhkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMKQEAgLTAsMCArMSwxMTIgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWFsaTE1eDMKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIEFjZXIgTGFicywgSW5jLiBBTEkgMTUzMyBhbmQgMTU0M0MgKHNvdXRoIGJyaWRnZSkKKyAgICBEYXRhc2hlZXQ6IE5vdyB1bmRlciBOREEKKwlodHRwOi8vd3d3LmFsaS5jb20udHcvZW5nL3N1cHBvcnQvZGF0YXNoZWV0X3JlcXVlc3QucGhwCisKK0F1dGhvcnM6CisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwgCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCitNb2R1bGUgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KKworKiBmb3JjZV9hZGRyOiBpbnQKKyAgSW5pdGlhbGl6ZSB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBpMmMgY29udHJvbGxlcgorCisKK05vdGVzCistLS0tLQorCitUaGUgZm9yY2VfYWRkciBwYXJhbWV0ZXIgaXMgdXNlZnVsIGZvciBib2FyZHMgdGhhdCBkb24ndCBzZXQgdGhlIGFkZHJlc3MgaW4KK3RoZSBCSU9TLiBEb2VzIG5vdCBkbyBhIFBDSSBmb3JjZTsgdGhlIGRldmljZSBtdXN0IHN0aWxsIGJlIHByZXNlbnQgaW4KK2xzcGNpLiBEb24ndCB1c2UgdGhpcyB1bmxlc3MgdGhlIGRyaXZlciBjb21wbGFpbnMgdGhhdCB0aGUgYmFzZSBhZGRyZXNzIGlzCitub3Qgc2V0LgorCitFeGFtcGxlOiAnbW9kcHJvYmUgaTJjLWFsaTE1eDMgZm9yY2VfYWRkcj0weGU4MDAnCisKK1NNQnVzIHBlcmlvZGljYWxseSBoYW5ncyBvbiBBU1VTIFA1QSBtb3RoZXJib2FyZHMgYW5kIGNhbiBvbmx5IGJlIGNsZWFyZWQKK2J5IGEgcG93ZXIgY3ljbGUuIENhdXNlIHVua25vd24gKHNlZSBJc3N1ZXMgYmVsb3cpLgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBTTUIgSG9zdCBjb250cm9sbGVyIG9uIEFjZXIgTGFicyBJbmMuIChBTEkpCitNMTU0MSBhbmQgTTE1NDNDIFNvdXRoIEJyaWRnZXMuCisKK1RoZSBNMTU0M0MgaXMgYSBTb3V0aCBicmlkZ2UgZm9yIGRlc2t0b3Agc3lzdGVtcy4KK1RoZSBNMTU0MSBpcyBhIFNvdXRoIGJyaWRnZSBmb3IgcG9ydGFibGUgc3lzdGVtcy4KK1RoZXkgYXJlIHBhcnQgb2YgdGhlIGZvbGxvd2luZyBBTEkgY2hpcHNldHM6CisgICAKKyAqICJBbGFkZGluIFBybyAyIiBpbmNsdWRlcyB0aGUgTTE2MjEgU2xvdCAxIE5vcnRoIGJyaWRnZSB3aXRoIEFHUCBhbmQgCisgCQkxMDBNSHogQ1BVIEZyb250IFNpZGUgYnVzCisgKiAiQWxhZGRpbiBWIiBpbmNsdWRlcyB0aGUgTTE1NDEgU29ja2V0IDcgTm9ydGggYnJpZGdlIHdpdGggQUdQIGFuZCAxMDBNSHogCisgCQlDUFUgRnJvbnQgU2lkZSBidXMKKyAgIFNvbWUgQWxhZGRpbiBWIG1vdGhlcmJvYXJkczoKKwlBc3VzIFA1QQorCUF0cmVuZCBBVEMtNTIyMAorCUJDTS9HVkMgVlAxNTQxCisJQmlvc3RhciBNNUFMQQorCUdpZ2FieXRlIEdBLTVBWCAoKiogR2VuZXJhbGx5IGRvZXNuJ3Qgd29yayBiZWNhdXNlIHRoZSBCSU9TIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgdGhlIDcxMDEgZGV2aWNlISAqKikKKwlJd2lsbCBYQTEwMCBQbHVzCisJTWljcm9uaWNzIEMyMDAKKwlNaWNyb3N0YXIgKE1TSSkgTVMtNTE2OQorCisgICogIkFsYWRkaW4gSVYiIGluY2x1ZGVzIHRoZSBNMTU0MSBTb2NrZXQgNyBOb3J0aCBicmlkZ2UKKyAgIAkJd2l0aCBob3N0IGJ1cyB1cCB0byA4My4zIE1Iei4KKworRm9yIGFuIG92ZXJ2aWV3IG9mIHRoZXNlIGNoaXBzIHNlZSBodHRwOi8vd3d3LmFjZXJsYWJzLmNvbS4gQXQgdGhpcyB0aW1lIHRoZQorZnVsbCBkYXRhIHNoZWV0cyBvbiB0aGUgd2ViIHNpdGUgYXJlIHBhc3N3b3JkIHByb3RlY3RlZCwgaG93ZXZlciBpZiB5b3UKK2NvbnRhY3QgdGhlIEFMSSBvZmZpY2UgaW4gU2FuIEpvc2UgdGhleSBtYXkgZ2l2ZSB5b3UgdGhlIHBhc3N3b3JkLgorCitUaGUgTTE1MzMvTTE1NDNDIGRldmljZXMgYXBwZWFyIGFzIEZPVVIgc2VwYXJhdGUgZGV2aWNlcyBvbiB0aGUgUENJIGJ1cy4gQW4KK291dHB1dCBvZiBsc3BjaSB3aWxsIHNob3cgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworICAwMDowMi4wIFVTQiBDb250cm9sbGVyOiBBY2VyIExhYm9yYXRvcmllcyBJbmMuIE01MjM3IChyZXYgMDMpCisgIDAwOjAzLjAgQnJpZGdlOiBBY2VyIExhYm9yYXRvcmllcyBJbmMuIE03MTAxICAgICAgPD0gVEhJUyBJUyBUSEUgT05FIFdFIE5FRUQKKyAgMDA6MDcuMCBJU0EgYnJpZGdlOiBBY2VyIExhYm9yYXRvcmllcyBJbmMuIE0xNTMzIChyZXYgYzMpCisgIDAwOjBmLjAgSURFIGludGVyZmFjZTogQWNlciBMYWJvcmF0b3JpZXMgSW5jLiBNNTIyOSAocmV2IGMxKQorCisqKiBJTVBPUlRBTlQgKioKKyoqIElmIHlvdSBoYXZlIGEgTTE1MzMgb3IgTTE1NDNDIG9uIHRoZSBib2FyZCBhbmQgeW91IGdldAorKiogImFsaTE1eDM6IEVycm9yOiBDYW4ndCBkZXRlY3QgYWxpMTV4MyEiCisqKiB0aGVuIHJ1biBsc3BjaS4KKyoqIElmIHlvdSBzZWUgdGhlIDE1MzMgYW5kIDUyMjkgZGV2aWNlcyBidXQgTk9UIHRoZSA3MTAxIGRldmljZSwKKyoqIHRoZW4geW91IG11c3QgZW5hYmxlIEFDUEksIHRoZSBQTVUsIFNNQiwgb3Igc29tZXRoaW5nIHNpbWlsYXIKKyoqIGluIHRoZSBCSU9TLiAKKyoqIFRoZSBkcml2ZXIgd29uJ3Qgd29yayBpZiBpdCBjYW4ndCBmaW5kIHRoZSBNNzEwMSBkZXZpY2UuCisKK1RoZSBTTUIgY29udHJvbGxlciBpcyBwYXJ0IG9mIHRoZSBNNzEwMSBkZXZpY2UsIHdoaWNoIGlzIGFuIEFDUEktY29tcGxpYW50CitQb3dlciBNYW5hZ2VtZW50IFVuaXQgKFBNVSkuCisKK1RoZSB3aG9sZSBNNzEwMSBkZXZpY2UgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoZSBTTUIgdG8gd29yay4gWW91IGNhbid0CitqdXN0IGVuYWJsZSB0aGUgU01CIGFsb25lLiBUaGUgU01CIGFuZCB0aGUgQUNQSSBoYXZlIHNlcGFyYXRlIEkvTyBzcGFjZXMuCitXZSBtYWtlIHN1cmUgdGhhdCB0aGUgU01CIGlzIGVuYWJsZWQuIFdlIGxlYXZlIHRoZSBBQ1BJIGFsb25lLgorCitGZWF0dXJlcyAKKy0tLS0tLS0tIAorCitUaGlzIGRyaXZlciBjb250cm9scyB0aGUgU01CIEhvc3Qgb25seS4gVGhlIFNNQiBTbGF2ZQorY29udHJvbGxlciBvbiB0aGUgTTE1WDMgaXMgbm90IGVuYWJsZWQuIFRoaXMgZHJpdmVyIGRvZXMgbm90IHVzZQoraW50ZXJydXB0cy4KKworCitJc3N1ZXMKKy0tLS0tLQorCitUaGlzIGRyaXZlciByZXF1ZXN0cyB0aGUgSS9PIHNwYWNlIGZvciBvbmx5IHRoZSBTTUIKK3JlZ2lzdGVycy4gSXQgZG9lc24ndCB1c2UgdGhlIEFDUEkgcmVnaW9uLgorCitPbiB0aGUgQVNVUyBQNUEgbW90aGVyYm9hcmQsIHRoZXJlIGFyZSBzZXZlcmFsIHJlcG9ydHMgdGhhdAordGhlIFNNQnVzIHdpbGwgaGFuZyBhbmQgdGhpcyBjYW4gb25seSBiZSByZXNvbHZlZCBieQorcG93ZXJpbmcgb2ZmIHRoZSBjb21wdXRlci4gSXQgYXBwZWFycyB0byBiZSB3b3JzZSB3aGVuIHRoZSBib2FyZAorZ2V0cyBob3QsIGZvciBleGFtcGxlIHVuZGVyIGhlYXZ5IENQVSBsb2FkLCBvciBpbiB0aGUgc3VtbWVyLgorVGhlcmUgbWF5IGJlIGVsZWN0cmljYWwgcHJvYmxlbXMgb24gdGhpcyBib2FyZC4KK09uIHRoZSBQNUEsIHRoZSBXODM3ODFEIHNlbnNvciBjaGlwIGlzIG9uIGJvdGggdGhlIElTQSBhbmQKK1NNQnVzLiBUaGVyZWZvcmUgdGhlIFNNQnVzIGhhbmdzIGNhbiBnZW5lcmFsbHkgYmUgYXZvaWRlZAorYnkgYWNjZXNzaW5nIHRoZSBXODM3ODFEIG9uIHRoZSBJU0EgYnVzIG9ubHkuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kNzU2IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmMzA4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kNzU2CkBAIC0wLDAgKzEsMjUgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLWFtZDc1NgorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogQU1EIDc1NgorICAqIEFNRCA3NjYKKyAgKiBBTUQgNzY4CisgICogQU1EIDgxMTEKKyAgICBEYXRhc2hlZXRzOiBQdWJsaWNseSBhdmFpbGFibGUgb24gQU1EIHdlYnNpdGUKKworICAqIG5WaWRpYSBuRm9yY2UKKyAgICBEYXRhc2hlZXQ6IFVuYXZhaWxhYmxlCisKK0F1dGhvcnM6CisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+IAorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFNRCA3NTYsIDc2NiwgNzY4IGFuZCA4MTExIFBlcmlwaGVyYWwgQnVzCitDb250cm9sbGVycywgYW5kIHRoZSBuVmlkaWEgbkZvcmNlLgorCitOb3RlIHRoYXQgZm9yIHRoZSA4MTExLCB0aGVyZSBhcmUgdHdvIFNNQnVzIGFkYXB0ZXJzLiBUaGUgU01CdXMgMS4wIGFkYXB0ZXIKK2lzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgYW5kIHRoZSBTTUJ1cyAyLjAgYWRhcHRlciBpcyBzdXBwb3J0ZWQgYnkgdGhlCitpMmMtYW1kODExMSBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyOTRlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kODExMQpAQCAtMCwwICsxLDQxIEBACitLZXJuZWwgZHJpdmVyIGkyYy1hZG04MTExCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgICAqIEFNRC04MTExIFNNQnVzIDIuMCBQQ0kgaW50ZXJmYWNlCisKK0RhdGFzaGVldHM6CisJQU1EIGRhdGFzaGVldCBub3QgeWV0IGF2YWlsYWJsZSwgYnV0IGFsbW9zdCBldmVyeXRoaW5nIGNhbiBiZSBmb3VuZAorCWluIHB1YmxpY2FsbHkgYXZhaWxhYmxlIEFDUEkgMi4wIHNwZWNpZmljYXRpb24sIHdoaWNoIHRoZSBhZGFwdGVyIAorCWZvbGxvd3MuCisKK0F1dGhvcjogVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK0lmIHlvdSBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczoKKworMDA6MDcuMiBTTUJ1czogQWR2YW5jZWQgTWljcm8gRGV2aWNlcyBbQU1EXSBBTUQtODExMSBTTUJ1cyAyLjAgKHJldiAwMikKKyAgICAgICAgU3Vic3lzdGVtOiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzIFtBTURdIEFNRC04MTExIFNNQnVzIDIuMAorICAgICAgICBGbGFnczogbWVkaXVtIGRldnNlbCwgSVJRIDE5CisgICAgICAgIEkvTyBwb3J0cyBhdCBkNDAwIFtzaXplPTMyXQorCitpbiB5b3VyICdsc3BjaSAtdicsIHRoZW4gdGhpcyBkcml2ZXIgaXMgZm9yIHlvdXIgY2hpcHNldC4KKworUHJvY2VzcyBDYWxsIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvcnRlZC4KKworU01CdXMgMi4wIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvcnRlZC4gQm90aCBQRUMgYW5kIGJsb2NrIHByb2Nlc3MgY2FsbCBzdXBwb3J0IGlzIGltcGxlbWVudGVkLiBTbGF2ZQorbW9kZSBvciBob3N0IG5vdGlmaWNhdGlvbiBhcmUgbm90IHlldCBpbXBsZW1lbnRlZC4KKworTm90ZXMKKy0tLS0tCisKK05vdGUgdGhhdCBmb3IgdGhlIDgxMTEsIHRoZXJlIGFyZSB0d28gU01CdXMgYWRhcHRlcnMuIFRoZSBTTUJ1cyAyLjAgYWRhcHRlcgoraXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBhbmQgdGhlIFNNQnVzIDEuMCBhZGFwdGVyIGlzIHN1cHBvcnRlZCBieSB0aGUKK2kyYy1hbWQ3NTYgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNGIyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKQEAgLTAsMCArMSw4MCBAQAorS2VybmVsIGRyaXZlciBpMmMtaTgwMQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogSW50ZWwgODI4MDFBQSBhbmQgODI4MDFBQiAoSUNIIGFuZCBJQ0gwIC0gcGFydCBvZiB0aGUKKyAgICAnODEwJyBhbmQgJzgxMEUnIGNoaXBzZXRzKQorICAqIEludGVsIDgyODAxQkEgKElDSDIgLSBwYXJ0IG9mIHRoZSAnODE1RScgY2hpcHNldCkKKyAgKiBJbnRlbCA4MjgwMUNBL0NBTSAoSUNIMykKKyAgKiBJbnRlbCA4MjgwMURCIChJQ0g0KSAoSFcgUEVDIHN1cHBvcnRlZCwgMzIgYnl0ZSBidWZmZXIgbm90IHN1cHBvcnRlZCkKKyAgKiBJbnRlbCA4MjgwMUVCL0VSIChJQ0g1KSAoSFcgUEVDIHN1cHBvcnRlZCwgMzIgYnl0ZSBidWZmZXIgbm90IHN1cHBvcnRlZCkKKyAgKiBJbnRlbCA2MzAwRVNCCisgICogSW50ZWwgODI4MDFGQi9GUi9GVy9GUlcgKElDSDYpCisgICogSW50ZWwgSUNINworICAgIERhdGFzaGVldHM6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSW50ZWwgd2Vic2l0ZQorCitBdXRob3JzOiAKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LCAKKwlNYXJrIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+CisKKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZm9yY2VfYWRkcjogaW50CisgIEZvcmNpYmx5IGVuYWJsZSB0aGUgSUNIIGF0IHRoZSBnaXZlbiBhZGRyZXNzLiBFWFRSRU1FTFkgREFOR0VST1VTIQorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGUgSUNIIChwcm9wZXJseSBrbm93biBhcyB0aGUgODI4MDFBQSksIElDSDAgKDgyODAxQUIpLCBJQ0gyICg4MjgwMUJBKSwKK0lDSDMgKDgyODAxQ0EvQ0FNKSBhbmQgbGF0ZXIgZGV2aWNlcyBhcmUgSW50ZWwgY2hpcHMgdGhhdCBhcmUgYSBwYXJ0IG9mCitJbnRlbCdzICc4MTAnIGNoaXBzZXQgZm9yIENlbGVyb24tYmFzZWQgUENzLCAnODEwRScgY2hpcHNldCBmb3IKK1BlbnRpdW0tYmFzZWQgUENzLCAnODE1RScgY2hpcHNldCwgYW5kIG90aGVycy4KKworVGhlIElDSCBjaGlwcyBjb250YWluIGF0IGxlYXN0IFNFVkVOIHNlcGFyYXRlIFBDSSBmdW5jdGlvbnMgaW4gVFdPIGxvZ2ljYWwKK1BDSSBkZXZpY2VzLiBBbiBvdXRwdXQgb2YgbHNwY2kgd2lsbCBzaG93IHNvbWV0aGluZyBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nOgorCisgIDAwOjFlLjAgUENJIGJyaWRnZTogSW50ZWwgQ29ycG9yYXRpb246IFVua25vd24gZGV2aWNlIDI0MTggKHJldiAwMSkKKyAgMDA6MWYuMCBJU0EgYnJpZGdlOiBJbnRlbCBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgMjQxMCAocmV2IDAxKQorICAwMDoxZi4xIElERSBpbnRlcmZhY2U6IEludGVsIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAyNDExIChyZXYgMDEpCisgIDAwOjFmLjIgVVNCIENvbnRyb2xsZXI6IEludGVsIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAyNDEyIChyZXYgMDEpCisgIDAwOjFmLjMgVW5rbm93biBjbGFzcyBbMGMwNV06IEludGVsIENvcnBvcmF0aW9uOiBVbmtub3duIGRldmljZSAyNDEzIChyZXYgMDEpCisKK1RoZSBTTUJ1cyBjb250cm9sbGVyIGlzIGZ1bmN0aW9uIDMgaW4gZGV2aWNlIDFmLiBDbGFzcyAwYzA1IGlzIFNNQnVzIFNlcmlhbAorQ29udHJvbGxlci4KKworSWYgeW91IGRvIE5PVCBzZWUgdGhlIDI0eDMgZGV2aWNlIGF0IGZ1bmN0aW9uIDMsIGFuZCB5b3UgY2FuJ3QgZmlndXJlIG91dAorYW55IHdheSBpbiB0aGUgQklPUyB0byBlbmFibGUgaXQsCisKK1RoZSBJQ0ggY2hpcHMgYXJlIHF1aXRlIHNpbWlsYXIgdG8gSW50ZWwncyBQSUlYNCBjaGlwLCBhdCBsZWFzdCBpbiB0aGUKK1NNQnVzIGNvbnRyb2xsZXIuCisKK1NlZSB0aGUgZmlsZSBpMmMtcGlpeDQgZm9yIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKworCitQcm9jZXNzIENhbGwgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90IHN1cHBvcnRlZC4KKworCitJMkMgQmxvY2sgUmVhZCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KKworCitTTUJ1cyAyLjAgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDgyODAxREIgKElDSDQpIGFuZCBsYXRlciBjaGlwcyBzdXBwb3J0IHNldmVyYWwgU01CdXMgMi4wIGZlYXR1cmVzLgorCisqKioqKioqKioqKioqKioqKioqKioqCitUaGUgbG1fc2Vuc29ycyBwcm9qZWN0IGdyYXRlZnVsbHkgYWNrbm93bGVkZ2VzIHRoZSBzdXBwb3J0IG9mIFRleGFzCitJbnN0cnVtZW50cyBpbiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlci4KKworVGhlIGxtX3NlbnNvcnMgcHJvamVjdCBncmF0ZWZ1bGx5IGFja25vd2xlZGdlcyB0aGUgc3VwcG9ydCBvZiBJbnRlbCBpbiB0aGUKK2RldmVsb3BtZW50IG9mIFNNQnVzIDIuMCAvIElDSDQgZmVhdHVyZXMgb2YgdGhpcyBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MTAgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0NGViMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgxMApAQCAtMCwwICsxLDQ2IEBACitLZXJuZWwgZHJpdmVyIGkyYy1pODEwCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBJbnRlbCA4MjgxMCwgODI4MTAtREMxMDAsIDgyODEwRSwgYW5kIDgyODE1IChHTUNIKQorCitBdXRob3JzOiAKKwlGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCAKKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LAorICAgICAgICBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sCisJUmFscGggTWV0emxlciA8cmprbUB0aHAudW5pLWtvZWxuLmRlPiwKKwlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+CisKK01haW4gY29udGFjdDogTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgorCitEZXNjcmlwdGlvbiAKKy0tLS0tLS0tLS0tIAorCitXQVJOSU5HOiBJZiB5b3UgaGF2ZSBhbiAnODEwJyBvciAnODE1JyBtb3RoZXJib2FyZCwgeW91ciBzdGFuZGFyZCBJMkMKK3RlbXBlcmF0dXJlIHNlbnNvcnMgYXJlIG1vc3QgbGlrZWx5IG9uIHRoZSA4MDEncyBJMkMgYnVzLiBZb3Ugd2FudCB0aGUKK2kyYy1pODAxIGRyaXZlciBmb3IgdGhvc2UsIG5vdCB0aGlzIGRyaXZlci4KKworTm93IGZvciB0aGUgaTJjLWk4MTAuLi4KKworVGhlIEdNQ0ggY2hpcCBjb250YWlucyB0d28gSTJDIGludGVyZmFjZXMuCisKK1RoZSBmaXJzdCBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgRERDIChEYXRhIERpc3BsYXkgQ2hhbm5lbCkgd2hpY2ggaXMgYQorc2VyaWFsIGNoYW5uZWwgdGhyb3VnaCB0aGUgVkdBIG1vbml0b3IgY29ubmVjdG9yIHRvIGEgRERDLWNvbXBsaWFudAorbW9uaXRvci4gVGhpcyBpbnRlcmZhY2UgaXMgZGVmaW5lZCBieSB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzCitBc3NvY2lhdGlvbiAoVkVTQSkuIFRoZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UgYXQKK2h0dHA6Ly93d3cudmVzYS5vcmcgLgorCitUaGUgc2Vjb25kIGludGVyZmFjZSBpcyBhIGdlbmVyYWwtcHVycG9zZSBJMkMgYnVzLiBJdCBtYXkgYmUgY29ubmVjdGVkIHRvIGEKK1RWLW91dCBjaGlwIHN1Y2ggYXMgdGhlIEJUODY5IG9yIHBvc3NpYmx5IHRvIGEgZGlnaXRhbCBmbGF0LXBhbmVsIGRpc3BsYXkuCisKK0ZlYXR1cmVzCistLS0tLS0tLSAKKworQm90aCBidXNzZXMgdXNlIHRoZSBpMmMtYWxnby1iaXQgZHJpdmVyIGZvciAnYml0IGJhbmdpbmcnCithbmQgc3VwcG9ydCBmb3Igc3BlY2lmaWMgdHJhbnNhY3Rpb25zIGlzIHByb3ZpZGVkIGJ5IGkyYy1hbGdvLWJpdC4KKworSXNzdWVzCistLS0tLS0KKworSWYgeW91IGVuYWJsZSBidXMgdGVzdGluZyBpbiBpMmMtYWxnby1iaXQgKGluc21vZCBpMmMtYWxnby1iaXQgYml0X3Rlc3Q9MSksCit0aGUgdGVzdCBtYXkgZmFpbDsgaWYgc28sIHRoZSBpMmMtaTgxMCBkcml2ZXIgd29uJ3QgYmUgaW5zZXJ0ZWQuIEhvd2V2ZXIsCit3ZSB0aGluayB0aGlzIGhhcyBiZWVuIGZpeGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzllMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIKQEAgLTAsMCArMSw0MSBAQAorS2VybmVsIGRyaXZlciBpMmMtbmZvcmNlMgorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogbkZvcmNlMiBNQ1AgICAgICAgICAgICAgICAgMTBkZTowMDY0IAorICAqIG5Gb3JjZTIgVWx0cmEgNDAwIE1DUCAgICAgIDEwZGU6MDA4NCAKKyAgKiBuRm9yY2UzIFBybzE1MCBNQ1AgICAgICAgICAxMGRlOjAwRDQgCisgICogbkZvcmNlMyAyNTBHYiBNQ1AgICAgICAgICAgMTBkZTowMEU0IAorICAqIG5Gb3JjZTQgTUNQCSAgICAgICAJICAgICAgIDEwZGU6MDA1MgorCitEYXRhc2hlZXQ6IG5vdCBwdWJsaWNhbGx5IGF2YWlsYWJsZSwgYnV0IHNlZW1zIHRvIGJlIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgIEFNRC04MTExIFNNQnVzIDIuMCBhZGFwdGVyLgorCitBdXRob3JzOgorCUhhbnMtRnJpZWRlciBWb2d0IDxoZnZvZ3RAYXJjb3IuZGU+LCAKKwlUaG9tYXMgTGVpYm9sZCA8dGhvbWFzQHBseC5jb20+LCAKKyAgICAgICAgUGF0cmljayBEcmVrZXIgPHBhdHJpY2tAZHJla2VyLmRlPgorCQorRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK2kyYy1uZm9yY2UyIGlzIGEgZHJpdmVyIGZvciB0aGUgU01CdXNlcyBpbmNsdWRlZCBpbiB0aGUgblZpZGlhIG5Gb3JjZTIgTUNQLgorCitJZiB5b3VyICdsc3BjaSAtdicgbGlzdGluZyBzaG93cyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nLAorCiswMDowMS4xIFNNQnVzOiBuVmlkaWEgQ29ycG9yYXRpb246IFVua25vd24gZGV2aWNlIDAwNjQgKHJldiBhMikKKyAgICAgICAgU3Vic3lzdGVtOiBBc3VzdGVrIENvbXB1dGVyLCBJbmMuOiBVbmtub3duIGRldmljZSAwYzExCisgICAgICAgIEZsYWdzOiA2Nk1oeiwgZmFzdCBkZXZzZWwsIElSUSA1CisgICAgICAgIEkvTyBwb3J0cyBhdCBjMDAwIFtzaXplPTMyXQorICAgICAgICBDYXBhYmlsaXRpZXM6IDxhdmFpbGFibGUgb25seSB0byByb290PgorCit0aGVuIHRoaXMgZHJpdmVyIHNob3VsZCBzdXBwb3J0IHRoZSBTTUJ1c2VzIG9mIHlvdXIgbW90aGVyYm9hcmQuCisKKworTm90ZXMKKy0tLS0tCisKK1RoZSBTTUJ1cyBhZGFwdGVyIGluIHRoZSBuRm9yY2UyIGNoaXBzZXQgc2VlbXMgdG8gYmUgdmVyeSBzaW1pbGFyIHRvIHRoZQorU01CdXMgMi4wIGFkYXB0ZXIgaW4gdGhlIEFNRC04MTExIHNvdXRoYnJpZGdlLiBIb3dldmVyLCBJIGNvdWxkIG9ubHkgZ2V0Cit0aGUgZHJpdmVyIHRvIHdvcmsgd2l0aCBkaXJlY3QgSS9PIGFjY2Vzcywgd2hpY2ggaXMgZGlmZmVyZW50IHRvIHRoZSBFQworaW50ZXJmYWNlIG9mIHRoZSBBTUQtODExMS4gVGVzdGVkIG9uIEFzdXMgQTdOOFguIFRoZSBBQ1BJIERTRFQgdGFibGUgb2YgdGhlCitBc3VzIEE3TjhYIGxpc3RzIHR3byBTTUJ1c2VzLCBib3RoIG9mIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxZDAwOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydApAQCAtMCwwICsxLDE1NCBAQAorS2VybmVsIGRyaXZlciBpMmMtcGFycG9ydAorCitBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiAKKworVGhpcyBpcyBhIHVuaWZpZWQgZHJpdmVyIGZvciBzZXZlcmFsIGkyYy1vdmVyLXBhcmFsbGVsLXBvcnQgYWRhcHRlcnMsCitzdWNoIGFzIHRoZSBvbmVzIG1hZGUgYnkgUGhpbGlwcywgVmVsbGVtYW4gb3IgRUxWLiBUaGlzIGRyaXZlciBpcworbWVhbnQgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIG9sZGVyLCBpbmRpdmlkdWFsIGRyaXZlcnM6CisgKiBpMmMtcGhpbGlwcy1wYXIKKyAqIGkyYy1lbHYKKyAqIGkyYy12ZWxsZW1hbgorICogdmlkZW8vaTJjLXBhcnBvcnQgKE5PVCB0aGUgc2FtZSBhcyB0aGlzIG9uZSwgZGVkaWNhdGVkIHRvIGhvbWUgYnJldworICAgICAgICAgICAgICAgICAgICAgIHRlbGV0ZXh0IGFkYXB0ZXJzKQorCitJdCBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorICogUGhpbGlwcyBhZGFwdGVyCisgKiBob21lIGJyZXcgdGVsZXRleHQgYWRhcHRlcgorICogVmVsbGVtYW4gSzgwMDAgYWRhcHRlcgorICogRUxWIGFkYXB0ZXIKKyAqIEFuYWxvZyBEZXZpY2VzIGV2YWx1YXRpb24gYm9hcmRzIChBRE0xMDI1LCBBRE0xMDMwLCBBRE0xMDMxLCBBRE0xMDMyKQorCitUaGVzZSBkZXZpY2VzIHVzZSBkaWZmZXJlbnQgcGlub3V0IGNvbmZpZ3VyYXRpb25zLCBzbyB5b3UgaGF2ZSB0byB0ZWxsCit0aGUgZHJpdmVyIHdoYXQgeW91IGhhdmUsIHVzaW5nIHRoZSB0eXBlIG1vZHVsZSBwYXJhbWV0ZXIuIFRoZXJlIGlzIG5vCit3YXkgdG8gYXV0b2RldGVjdCB0aGUgZGV2aWNlcy4gU3VwcG9ydCBmb3IgZGlmZmVyZW50IHBpbm91dCBjb25maWd1cmF0aW9ucworY2FuIGJlIGVhc2lseSBhZGRlZCB3aGVuIG5lZWRlZC4KKworCitCdWlsZGluZyB5b3VyIG93biBhZGFwdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGJ1aWxkIHlvdSBvd24gaTJjLW92ZXItcGFyYWxsZWwtcG9ydCBhZGFwdGVyLCBoZXJlIGlzCithIHNhbXBsZSBlbGVjdHJvbmljcyBzY2hlbWEgKGNyZWRpdHMgZ28gdG8gU3lsdmFpbiBNdW5hdXQpOgorCitEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQworU2lkZSAgICAgICAgICBfX19fX19fX19fX19fX19fX19fVmRkICgrKSAgICAgICAgICAgICAgICAgICAgU2lkZQorICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgfAorICAgICAgICAgICAgICAtLS0gIC0tLSAgICAgICAtLS0KKyAgICAgICAgICAgICAgfCB8ICB8IHwgICAgICAgfCB8CisgICAgICAgICAgICAgIHxSfCAgfFJ8ICAgICAgIHxSfAorICAgICAgICAgICAgICB8IHwgIHwgfCAgICAgICB8IHwKKyAgICAgICAgICAgICAgLS0tICAtLS0gICAgICAgLS0tCisgICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgIHwgICAgL3wgICB8CitTQ0wgIC0tLS0tLS0tLS14LS0tLS0tLS1vIHwtLS0tLS0tLS0tLXgtLS0tLS0tLS0tLS0tLS0tLS0tICBwaW4gMgorICAgICAgICAgICAgICAgICAgICB8ICAgIFx8ICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgIHxcICAgIHwgICAgICAgfAorU0RBICAtLS0tLS0tLS0teC0tLS14LS0tfCBvLS0teC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgcGluIDEzCisgICAgICAgICAgICAgICB8ICAgICAgICB8LyAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICAgIC98ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAtLS0tLS0tLS1vIHwtLS0tLS0tLS0tLS0tLS0teC0tLS0tLS0tLS0tLS0tICBwaW4gMworICAgICAgICAgICAgICAgICAgICAgICAgIFx8ICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxSfCAgfFJ8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0gIC0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjICAjIyMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTkQgIEdORAorICAgICAgICAKK1JlbWFya3M6CisgLSBUaGlzIGlzIHRoZSBleGFjdCBwaW5vdXQgYW5kIGVsZWN0cm9uaWNzIHVzZWQgb24gdGhlIEFuYWxvZyBEZXZpY2VzCisgICBldmFsdWF0aW9uIGJvYXJkcy4KKyAgICAgICAgICAgICAgICAgICAvfAorIC0gQWxsIGludmVydGVycyAtbyB8LSBtdXN0IGJlIDc0SEMwNSwgdGhleSBtdXN0IGJlIG9wZW4gY29sbGVjdG9yIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICBcfAorIC0gQWxsIHJlc2l0b3JzIGFyZSAxMGsuCisgLSBQaW5zIDE4LTI1IG9mIHRoZSBwYXJhbGxlbCBwb3J0IGNvbm5lY3RlZCB0byBHTkQuCisgLSBQaW5zIDQtOSAoRDItRDcpIGNvdWxkIGJlIHVzZWQgYXMgVkREIGlzIHRoZSBkcml2ZXIgZHJpdmVzIHRoZW0gaGlnaC4KKyAgIFRoZSBBRE0xMDMyIGV2YWx1YXRpb24gYm9hcmQgdXNlcyBENC1ENy4gQmV3YXJlIHRoYXQgdGhlIGFtb3VudCBvZgorICAgY3VycmVudCB5b3UgY2FuIGRyYXcgZnJvbSB0aGUgcGFyYWxsZWwgcG9ydCBpcyBsaW1pdGVkLiBBbHNvIG5vdGUgdGhhdAorICAgYWxsIGNvbm5lY3RlZCBsaW5lcyBNVVNUIEJFIGRyaXZlbiBhdCB0aGUgc2FtZSBzdGF0ZSwgZWxzZSB5b3UnbGwgc2hvcnQKKyAgIGNpcmN1aXQgdGhlIG91dHB1dCBidWZmZXJzISBTbyBwbHVnZ2luZyB0aGUgSTJDIGFkYXB0ZXIgYWZ0ZXIgbG9hZGluZworICAgdGhlIGkyYy1wYXJwb3J0IG1vZHVsZSBtaWdodCBiZSBhIGdvb2Qgc2FmZXR5IHNpbmNlIGRhdGEgbGluZSBzdGF0ZQorICAgcHJpb3IgdG8gaW5pdCBtYXkgYmUgdW5rbm93bi4gCisgLSBUaGlzIGlzIDVWIQorIC0gT2J2aW91c2x5IHlvdSBjYW5ub3QgcmVhZCBTQ0wgKHNvIGl0J3Mgbm90IHJlYWxseSBzdGFuZGFyZC1jb21wbGlhbnQpLgorICAgUHJldHR5IGVhc3kgdG8gYWRkLCBqdXN0IGNvcHkgdGhlIFNEQSBwYXJ0IGFuZCB1c2UgYW5vdGhlciBpbnB1dCBwaW4uCisgICBUaGF0IHdvdWxkIGdpdmUgKEVMViBjb21wYXRpYmxlIHBpbm91dCk6CisKKworRGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEMKK1NpZGUgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fVmRkICgrKSAgICAgICAgIFNpZGUKKyAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAtLS0gIC0tLSAgICAgICAgICAtLS0gIC0tLQorICAgICAgICAgICAgICB8IHwgIHwgfCAgICAgICAgICB8IHwgIHwgfAorICAgICAgICAgICAgICB8UnwgIHxSfCAgICAgICAgICB8UnwgIHxSfAorICAgICAgICAgICAgICB8IHwgIHwgfCAgICAgICAgICB8IHwgIHwgfAorICAgICAgICAgICAgICAtLS0gIC0tLSAgICAgICAgICAtLS0gIC0tLQorICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICB8ICAgIHwgICAgICB8XCAgICB8ICAgIHwKK1NDTCAgLS0tLS0tLS0tLXgtLS0tLS0tLXgtLXwgby0tLXgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHBpbiAxNQorICAgICAgICAgICAgICAgICAgICB8ICAgfCAgfC8gICAgICAgICB8IAorICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgL3wgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgIC0tLW8gfC0tLS0tLS0tLS0tLS14LS0tLS0tLS0tLS0tLS0gIHBpbiAyCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgXHwgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICB8XCAgICAgICAgIHwgICAgfAorU0RBICAtLS0tLS0tLS0tLS0tLS14LS0teC0tfCBvLS0tLS0tLS14LS0tLS0tLS0tLS0tLS0tLS0tLSAgcGluIDEwCisgICAgICAgICAgICAgICAgICAgICAgICB8ICB8LyAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAvfCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAtLS1vIHwtLS0tLS0tLS0tLS0tLS0tLS14LS0tLS0tLS0tICBwaW4gMworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx8ICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAtLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8UnwgIHxSfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjICAjIyMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdORCAgR05ECisKKworSWYgcG9zc2libGUsIHlvdSBzaG91bGQgdXNlIHRoZSBzYW1lIHBpbm91dCBjb25maWd1cmF0aW9uIGFzIGV4aXN0aW5nCithZGFwdGVycyBkbywgc28geW91IHdvbid0IGV2ZW4gaGF2ZSB0byBjaGFuZ2UgdGhlIGNvZGUuCisKKworU2ltaWxhciAoYnV0IGRpZmZlcmVudCkgZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpcyBOT1QgdGhlIHNhbWUgYXMgdGhlIGkyYy1wcG9ydCBkcml2ZXIgZm91bmQgaW4gdGhlIGkyYworcGFja2FnZS4gVGhlIGkyYy1wcG9ydCBkcml2ZXIgbWFrZXMgdXNlIG9mIG1vZGVybiBwYXJhbGxlbCBwb3J0IGZlYXR1cmVzIHNvCit0aGF0IHlvdSBkb24ndCBuZWVkIGFkZGl0aW9uYWwgZWxlY3Ryb25pY3MuIEl0IGhhcyBvdGhlciByZXN0cmljdGlvbnMKK2hvd2V2ZXIsIGFuZCB3YXMgbm90IHBvcnRlZCB0byBMaW51eCAyLjYgKHlldCkuCisKK1RoaXMgZHJpdmVyIGlzIGFsc28gTk9UIHRoZSBzYW1lIGFzIHRoZSBpMmMtcGNmLWVwcCBkcml2ZXIgZm91bmQgaW4gdGhlCitsbV9zZW5zb3JzIHBhY2thZ2UuIFRoZSBpMmMtcGNmLWVwcCBkcml2ZXIgZG9lc24ndCB1c2UgdGhlIHBhcmFsbGVsIHBvcnQgYXMKK2FuIEkyQyBidXMgZGlyZWN0bHkuIEluc3RlYWQsIGl0IHVzZXMgaXQgdG8gY29udHJvbCBhbiBleHRlcm5hbCBJMkMgYnVzCittYXN0ZXIuIFRoYXQgZHJpdmVyIHdhcyBub3QgcG9ydGVkIHRvIExpbnV4IDIuNiAoeWV0KSBlaXRoZXIuCisKKworTGVnYWN5IGRvY3VtZW50YXRpb24gZm9yIFZlbGxlbWFuIGFkYXB0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzZWZ1bCBsaW5rczoKK1ZlbGxlbWFuICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudmVsbGVtYW4uYmUvCitWZWxsZW1hbiBLODAwMCBIb3d0byAgICBodHRwOi8vaG93dG8uaHRsdzE2LmFjLmF0L2s4MDAwLWhvd3RvLmh0bWwKKworVGhlIHByb2plY3QgaGFzIGxlYWQgdG8gbmV3IGxpYnMgZm9yIHRoZSBWZWxsZW1hbiBLODAwMCBhbmQgSzgwMDU6CisgIExJQks4MDAwIHYxLjk5LjEgYW5kIExJQks4MDA1IHYwLjIxCitXaXRoIHRoZXNlIGxpYnMsIHlvdSBjYW4gY29udHJvbCB0aGUgSzgwMDAgaW50ZXJmYWNlIGNhcmQgYW5kIHRoZSBLODAwNQorc3RlcHBlciBtb3RvciBjYXJkIHdpdGggdGhlIHNpbXBsZSBjb21tYW5kcyB3aGljaCBhcmUgaW4gdGhlIG9yaWdpbmFsCitWZWxsZW1hbiBzb2Z0d2FyZSwgbGlrZSBTZXRJT2NoYW5uZWwsIFJlYWRBRGNoYW5uZWwsIFNlbmRTdGVwQ0NXRnVsbCBhbmQKK21hbnkgbW9yZSwgdXNpbmcgL2Rldi92ZWxsZW1hbi4KKyAgaHR0cDovL2hvbWUud2FuYWRvby5ubC9oaWhpaGkvbGliazgwMDAuaHRtCisgIGh0dHA6Ly9ob21lLndhbmFkb28ubmwvaGloaWhpL2xpYms4MDA1Lmh0bQorICBodHRwOi8vc3RydXl2ZS5taW5lLm51OjgwODAvaW5kZXgucGhwP2Jsb2NrPWs4MDAwCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliazgwMDUvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3NDM2NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodApAQCAtMCwwICsxLDExIEBACitLZXJuZWwgZHJpdmVyIGkyYy1wYXJwb3J0LWxpZ2h0CisKK0F1dGhvcjogSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+IAorCitUaGlzIGRyaXZlciBpcyBhIGxpZ2h0IHZlcnNpb24gb2YgaTJjLXBhcnBvcnQuIEl0IGRvZXNuJ3QgZGVwZW5kICAgICAgICAKK29uIHRoZSBwYXJwb3J0IGRyaXZlciwgYW5kIHVzZXMgZGlyZWN0IEkvTyBhY2Nlc3MgaW5zdGVhZC4gVGhpcyBtaWdodCBiZQorcHJlZmVyZWQgb24gZW1iZWRkZWQgc3lzdGVtcyB3aGVyZSB3YXN0aW5nIG1lbW9yeSBmb3IgdGhlIGNsZWFuIGJ1dCBoZWF2eQorcGFycG9ydCBoYW5kbGluZyBpcyBub3QgYW4gb3B0aW9uLiBUaGUgZHJhd2JhY2sgaXMgYSByZWR1Y2VkIHBvcnRhYmlsaXR5CithbmQgdGhlIGltcG9zc2liaWxpdHkgdG8gZGFpc3ktY2hhaW4gb3RoZXIgcGFyYWxsZWwgcG9ydCBkZXZpY2VzLiAgICAgICAgICAgICAgICAgCisgIAorUGxlYXNlIHNlZSBpMmMtcGFycG9ydCBmb3IgZG9jdW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmM4ZjRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wY2EtaXNhCkBAIC0wLDAgKzEsMjMgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXBjYS1pc2EKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorVGhpcyBkcml2ZXIgc3VwcG9ydHMgSVNBIGJvYXJkcyB1c2luZyB0aGUgUGhpbGlwcyBQQ0EgOTU2NCAKK1BhcmFsbGVsIGJ1cyB0byBJMkMgYnVzIGNvbnRyb2xsZXIgCisKK0F1dGhvcjogSWFuIENhbXBiZWxsIDxpY2FtcGJlbGxAYXJjb20uY29tPiwgQXJjb20gQ29udHJvbCBTeXN0ZW1zIAorCitNb2R1bGUgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KKworKiBiYXNlIGludAorIEkvTyBiYXNlIGFkZHJlc3MKKyogaXJxIGludAorIElSUSBpbnRlcnJ1cHQgCisqIGNsb2NrIGludCAKKyBDbG9jayByYXRlIGFzIGRlc2NyaWJlZCBpbiB0YWJsZSAxIG9mIFBDQTk1NjQgZGF0YXNoZWV0CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBJU0EgYm9hcmRzIHVzaW5nIHRoZSBQaGlsaXBzIFBDQSA5NTY0IAorUGFyYWxsZWwgYnVzIHRvIEkyQyBidXMgY29udHJvbGxlciAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NmI0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CkBAIC0wLDAgKzEsNzIgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXBpaXg0CisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBJbnRlbCA4MjM3MUFCIFBJSVg0IGFuZCBQSUlYNEUKKyAgKiBJbnRlbCA4MjQ0M01YICg0NDBNWCkKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSW50ZWwgd2Vic2l0ZQorICAqIFNlcnZlcldvcmtzIE9TQjQsIENTQjUgYW5kIENTQjYgc291dGhicmlkZ2VzCisgICAgRGF0YXNoZWV0OiBPbmx5IGF2YWlsYWJsZSB2aWEgTkRBIGZyb20gU2VydmVyV29ya3MKKyAgKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgKFNNU0MpIFNMQzkwRTY2IChWaWN0b3J5NjYpIHNvdXRoYnJpZGdlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIFNNU0Mgd2Vic2l0ZSBodHRwOi8vd3d3LnNtc2MuY29tCisKK0F1dGhvcnM6IAorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KKwlQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+CisKKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZm9yY2U6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIFBJSVg0LiBEQU5HRVJPVVMhCisqIGZvcmNlX2FkZHI6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIFBJSVg0IGF0IHRoZSBnaXZlbiBhZGRyZXNzLiBFWFRSRU1FTFkgREFOR0VST1VTIQorKiBmaXhfaHN0Y2ZnOiBpbnQKKyAgRml4IGNvbmZpZyByZWdpc3Rlci4gTmVlZGVkIG9uIHNvbWUgYm9hcmRzIChGb3JjZSBDUENJNzM1KS4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIFBJSVg0IChwcm9wZXJseSBrbm93biBhcyB0aGUgODIzNzFBQikgaXMgYW4gSW50ZWwgY2hpcCB3aXRoIGEgbG90IG9mCitmdW5jdGlvbmFsaXR5LiBBbW9uZyBvdGhlciB0aGluZ3MsIGl0IGltcGxlbWVudHMgdGhlIFBDSSBidXMuIE9uZSBvZiBpdHMKK21pbm9yIGZ1bmN0aW9ucyBpcyBpbXBsZW1lbnRpbmcgYSBTeXN0ZW0gTWFuYWdlbWVudCBCdXMuIFRoaXMgaXMgYSB0cnVlIAorU01CdXMgLSB5b3UgY2FuIG5vdCBhY2Nlc3MgaXQgb24gSTJDIGxldmVscy4gVGhlIGdvb2QgbmV3cyBpcyB0aGF0IGl0CituYXRpdmVseSB1bmRlcnN0YW5kcyBTTUJ1cyBjb21tYW5kcyBhbmQgeW91IGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0Cit0aW1pbmcgcHJvYmxlbXMuIFRoZSBiYWQgbmV3cyBpcyB0aGF0IG5vbi1TTUJ1cyBkZXZpY2VzIGNvbm5lY3RlZCB0byBpdCBjYW4KK2NvbmZ1c2UgaXQgbWlnaHRpbHkuIFllcywgdGhpcyBpcyBrbm93biB0byBoYXBwZW4uLi4KKworRG8gJ2xzcGNpIC12JyBhbmQgc2VlIHdoZXRoZXIgaXQgY29udGFpbnMgYW4gZW50cnkgbGlrZSB0aGlzOgorCiswMDAwOjAwOjAyLjMgQnJpZGdlOiBJbnRlbCBDb3JwLiA4MjM3MUFCL0VCL01CIFBJSVg0IEFDUEkgKHJldiAwMikKKwkgICAgIEZsYWdzOiBtZWRpdW0gZGV2c2VsLCBJUlEgOQorCitCdXMgYW5kIGRldmljZSBudW1iZXJzIG1heSBkaWZmZXIsIGJ1dCB0aGUgZnVuY3Rpb24gbnVtYmVyIG11c3QgYmUKK2lkZW50aWNhbCAobGlrZSBtYW55IFBDSSBkZXZpY2VzLCB0aGUgUElJWDQgaW5jb3Jwb3JhdGVzIGEgbnVtYmVyIG9mCitkaWZmZXJlbnQgJ2Z1bmN0aW9ucycsIHdoaWNoIGNhbiBiZSBjb25zaWRlcmVkIGFzIHNlcGFyYXRlIGRldmljZXMpLiBJZiB5b3UKK2ZpbmQgc3VjaCBhbiBlbnRyeSwgeW91IGhhdmUgYSBQSUlYNCBTTUJ1cyBjb250cm9sbGVyLgorCitPbiBzb21lIGNvbXB1dGVycyAobW9zdCBub3RhYmx5LCBzb21lIERlbGxzKSwgdGhlIFNNQnVzIGlzIGRpc2FibGVkIGJ5CitkZWZhdWx0LiBJZiB5b3UgdXNlIHRoZSBpbnNtb2QgcGFyYW1ldGVyICdmb3JjZT0xJywgdGhlIGtlcm5lbCBtb2R1bGUgd2lsbAordHJ5IHRvIGVuYWJsZSBpdC4gVEhJUyBJUyBWRVJZIERBTkdFUk9VUyEgSWYgdGhlIEJJT1MgZGlkIG5vdCBzZXQgdXAgYQorY29ycmVjdCBhZGRyZXNzIGZvciB0aGlzIG1vZHVsZSwgeW91IGNvdWxkIGdldCBpbiBiaWcgdHJvdWJsZSAocmVhZDoKK2NyYXNoZXMsIGRhdGEgY29ycnVwdGlvbiwgZXRjLikuIFRyeSB0aGlzIG9ubHkgYXMgYSBsYXN0IHJlc29ydCAodHJ5IEJJT1MKK3VwZGF0ZXMgZmlyc3QsIGZvciBleGFtcGxlKSwgYW5kIGJhY2t1cCBmaXJzdCEgQW4gZXZlbiBtb3JlIGRhbmdlcm91cworb3B0aW9uIGlzICdmb3JjZV9hZGRyPTxJT1BPUlQ+Jy4gVGhpcyB3aWxsIG5vdCBvbmx5IGVuYWJsZSB0aGUgUElJWDQgbGlrZQorJ2ZvcmNlJyBmb2VzLCBidXQgaXQgd2lsbCBhbHNvIHNldCBhIG5ldyBiYXNlIEkvTyBwb3J0IGFkZHJlc3MuIFRoZSBTTUJ1cworcGFydHMgb2YgdGhlIFBJSVg0IG5lZWRzIGEgcmFuZ2Ugb2YgOCBvZiB0aGVzZSBhZGRyZXNzZXMgdG8gZnVuY3Rpb24KK2NvcnJlY3RseS4gSWYgdGhlc2UgYWRkcmVzc2VzIGFyZSBhbHJlYWR5IHJlc2VydmVkIGJ5IHNvbWUgb3RoZXIgZGV2aWNlLAoreW91IHdpbGwgZ2V0IGludG8gYmlnIHRyb3VibGUhIERPTidUIFVTRSBUSElTIElGIFlPVSBBUkUgTk9UIFZFUlkgU1VSRQorQUJPVVQgV0hBVCBZT1UgQVJFIERPSU5HIQorCitUaGUgUElJWDRFIGlzIGp1c3QgYW4gbmV3IHZlcnNpb24gb2YgdGhlIFBJSVg0OyBpdCBpcyBzdXBwb3J0ZWQgYXMgd2VsbC4KK1RoZSBQSUlYL1BJSVgzIGRvZXMgbm90IGltcGxlbWVudCBhbiBTTUJ1cyBvciBJMkMgYnVzLCBzbyB5b3UgY2FuJ3QgdXNlCit0aGlzIGRyaXZlciBvbiB0aG9zZSBtYWluYm9hcmRzLgorCitUaGUgU2VydmVyV29ya3MgU291dGhicmlkZ2VzLCB0aGUgSW50ZWwgNDQwTVgsIGFuZCB0aGUgVmljdG9yeTc2NiBhcmUKK2lkZW50aWNhbCB0byB0aGUgUElJWDQgaW4gSTJDL1NNQnVzIHN1cHBvcnQuCisKK0EgZmV3IE9TQjQgc291dGhicmlkZ2VzIGFyZSBrbm93biB0byBiZSBtaXNjb25maWd1cmVkIGJ5IHRoZSBCSU9TLiBJbiB0aGlzCitjYXNlLCB5b3UgaGF2ZSB5b3UgdXNlIHRoZSBmaXhfaHN0Y2ZnIG1vZHVsZSBwYXJhbWV0ZXIuIERvIG5vdCB1c2UgaXQKK3VubGVzcyB5b3Uga25vdyB5b3UgaGF2ZSB0bywgYmVjYXVzZSBpbiBzb21lIGNhc2VzIGl0IGFsc28gYnJlYWtzCitjb25maWd1cmF0aW9uIG9uIHNvdXRoYnJpZGdlcyB0aGF0IGRvbid0IG5lZWQgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzY4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZQpAQCAtMCwwICsxLDIzIEBACitLZXJuZWwgZHJpdmVyIGkyYy1wcm9zYXZhZ2UKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorCQorCVMzL1ZJQSBLTTI2Ni9WVDgzNzUgYWthIFByb1NhdmFnZTggCisJUzMvVklBIEtNMTMzL1ZUODM2NSBha2EgU2F2YWdlNCAKKworQXV0aG9yOiBIZW5rIFZlcmdvbmV0IDxoZW5rQGdvZC5keW5kbnMub3JnPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIFNhdmFnZTQgY2hpcHMgY29udGFpbiB0d28gSTJDIGludGVyZmFjZXMgKGFrYSBhIEkyQyAnbWFzdGVyJyBvcgorJ2hvc3QnKS4gCisKK1RoZSBmaXJzdCBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgRERDIChEYXRhIERpc3BsYXkgQ2hhbm5lbCkgd2hpY2ggaXMgYQorc2VyaWFsIGNoYW5uZWwgdGhyb3VnaCB0aGUgVkdBIG1vbml0b3IgY29ubmVjdG9yIHRvIGEgRERDLWNvbXBsaWFudAorbW9uaXRvci4gVGhpcyBpbnRlcmZhY2UgaXMgZGVmaW5lZCBieSB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzCitBc3NvY2lhdGlvbiAoVkVTQSkuIFRoZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UgYXQKK2h0dHA6Ly93d3cudmVzYS5vcmcgLiBUaGUgc2Vjb25kIGludGVyZmFjZSBpcyBhIGdlbmVyYWwtcHVycG9zZSBJMkMgYnVzLgorCitVc2VmdWxsIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgVFYgRW5jb2RlciBjaGlwcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlY2NlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNhdmFnZTQKQEAgLTAsMCArMSwyNiBAQAorS2VybmVsIGRyaXZlciBpMmMtc2F2YWdlNAorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogU2F2YWdlNAorICAqIFNhdmFnZTIwMDAKKworQXV0aG9yczogCisJQWxleGFuZGVyIFdvbGQgPGF3b2xkQGJpZ2Zvb3QuY29tPiwKKwlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+IAorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIFNhdmFnZTQgY2hpcHMgY29udGFpbiB0d28gSTJDIGludGVyZmFjZXMgKGFrYSBhIEkyQyAnbWFzdGVyJworb3IgJ2hvc3QnKS4gCisKK1RoZSBmaXJzdCBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgRERDIChEYXRhIERpc3BsYXkgQ2hhbm5lbCkgd2hpY2ggaXMgYQorc2VyaWFsIGNoYW5uZWwgdGhyb3VnaCB0aGUgVkdBIG1vbml0b3IgY29ubmVjdG9yIHRvIGEgRERDLWNvbXBsaWFudAorbW9uaXRvci4gVGhpcyBpbnRlcmZhY2UgaXMgZGVmaW5lZCBieSB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzCitBc3NvY2lhdGlvbiAoVkVTQSkuIFRoZSBzdGFuZGFyZHMgYXJlIGF2YWlsYWJsZSBmb3IgcHVyY2hhc2UgYXQKK2h0dHA6Ly93d3cudmVzYS5vcmcgLiBUaGUgRERDIGJ1cyBpcyBub3QgeWV0IHN1cHBvcnRlZCBiZWNhdXNlIGl0cyByZWdpc3RlcgoraXMgbm90IGRpcmVjdGx5IG1lbW9yeS1tYXBwZWQuCisKK1RoZSBzZWNvbmQgaW50ZXJmYWNlIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIEkyQyBidXMuIFRoaXMgaXMgdGhlIG9ubHkKK2ludGVyZmFjZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBhdCB0aGUgbW9tZW50LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczU1OTUgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczU1OTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0N2RiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NQpAQCAtMCwwICsxLDU5IEBACitLZXJuZWwgZHJpdmVyIGkyYy1zaXM1NTk1CisKK0F1dGhvcnM6IAorCUZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCisgICAgICAgIE1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4sCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiAKKworU3VwcG9ydGVkIGFkYXB0ZXJzOgorICAqIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAuIFNpUzU1OTUgU291dGhicmlkZ2UKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycC4gc2l0ZS4KKworTm90ZTogYWxsIGhhdmUgbWZyLiBJRCAweDEwMzkuIAorCisgICBTVVBQT1JURUQgICAgICAgICAgICBQQ0kgSUQgICAgICAgICAgIAorICAgICAgICA1NTk1ICAgICAgICAgICAgMDAwOCAKKyAKKyAgIE5vdGU6IHRoZXNlIGNoaXBzIGNvbnRhaW4gYSAwMDA4IGRldmljZSB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgCisgICAgICAgICA1NTk1LiBXZSByZWNvZ25pemUgdGhlc2UgYnkgdGhlIHByZXNlbmNlIG9mIHRoZSBsaXN0ZWQgCisgICAgICAgICAiYmxhY2tsaXN0IiBQQ0kgSUQgYW5kIHJlZnVzZSB0byBsb2FkLiAKKyAKKyAgIE5PVCBTVVBQT1JURUQgICAgICAgIFBDSSBJRCAgICAgICAgICBCTEFDS0xJU1QgUENJIElEICAgICAgICAgCisgICAgICAgICA1NDAgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDU0MCAKKyAgICAgICAgIDU1MCAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNTUwIAorICAgICAgICA1NTEzICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDU1MTEgCisgICAgICAgIDU1ODEgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgNTU5NyAKKyAgICAgICAgNTU4MiAgICAgICAgICAgIDAwMDggICAgICAgICAgICA1NTk3IAorICAgICAgICA1NTk3ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDU1OTcgCisgICAgICAgIDU1OTggICAgICAgICAgICAwMDA4ICAgICAgICAgICAgNTU5Ny81NTk4IAorICAgICAgICAgNjMwICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA2MzAgCisgICAgICAgICA2NDUgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDY0NSAKKyAgICAgICAgIDY0NiAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNjQ2IAorICAgICAgICAgNjQ4ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA2NDggCisgICAgICAgICA2NTAgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDY1MCAKKyAgICAgICAgIDY1MSAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNjUxIAorICAgICAgICAgNzMwICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA3MzAgCisgICAgICAgICA3MzUgICAgICAgICAgICAwMDA4ICAgICAgICAgICAgMDczNSAKKyAgICAgICAgIDc0NSAgICAgICAgICAgIDAwMDggICAgICAgICAgICAwNzQ1IAorICAgICAgICAgNzQ2ICAgICAgICAgICAgMDAwOCAgICAgICAgICAgIDA3NDYgCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIGZvcmNlX2FkZHI9MHhhZGRyCVNldCB0aGUgSS9PIGJhc2UgYWRkcmVzcy4gVXNlZnVsIGZvciBib2FyZHMKKwkJCXRoYXQgZG9uJ3Qgc2V0IHRoZSBhZGRyZXNzIGluIHRoZSBCSU9TLiBEb2VzIG5vdCBkbyBhCisJCQlQQ0kgZm9yY2U7IHRoZSBkZXZpY2UgbXVzdCBzdGlsbCBiZSBwcmVzZW50IGluIGxzcGNpLgorCQkJRG9uJ3QgdXNlIHRoaXMgdW5sZXNzIHRoZSBkcml2ZXIgY29tcGxhaW5zIHRoYXQgdGhlCisJCQliYXNlIGFkZHJlc3MgaXMgbm90IHNldC4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK2kyYy1zaXM1NTk1IGlzIGEgdHJ1ZSBTTUJ1cyBob3N0IGRyaXZlciBmb3IgbW90aGVyYm9hcmRzIHdpdGggdGhlIFNpUzU1OTUKK3NvdXRoYnJpZGdlcy4KKworV0FSTklORzogSWYgeW91IGFyZSB0cnlpbmcgdG8gYWNjZXNzIHRoZSBpbnRlZ3JhdGVkIHNlbnNvcnMgb24gdGhlIFNpUzU1OTUKK2NoaXAsIHlvdSB3YW50IHRoZSBzaXM1NTk1IGRyaXZlciBmb3IgdGhvc2UsIG5vdCB0aGlzIGRyaXZlci4gVGhpcyBkcml2ZXIKK2lzIGEgQlVTIGRyaXZlciwgbm90IGEgQ0hJUCBkcml2ZXIuIEEgQlVTIGRyaXZlciBpcyB1c2VkIGJ5IG90aGVyIENISVAKK2RyaXZlcnMgdG8gYWNjZXNzIGNoaXBzIG9uIHRoZSBidXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM2MzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjYTY4OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjMwCkBAIC0wLDAgKzEsNDkgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXNpczYzMAorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycCAoU2lTKQorCTYzMCBjaGlwc2V0IChEYXRhc2hlZXQ6IGF2YWlsYWJsZSBhdCBodHRwOi8vYW1hbHlzaC5iZWkudC1vbmxpbmUuZGUvZG9jcy9TSVMvKQorCTczMCBjaGlwc2V0CisgICogUG9zc2libGUgb3RoZXIgU2lTIGNoaXBzZXRzID8KKworQXV0aG9yOiBBbGV4YW5kZXIgTWFseXNoIDxhbWFseXNoQHdlYi5kZT4KKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZm9yY2UgPSBbMXwwXSBGb3JjaWJseSBlbmFibGUgdGhlIFNJUzYzMC4gREFOR0VST1VTIQorCQlUaGlzIGNhbiBiZSBpbnRlcmVzdGluZyBmb3IgY2hpcHNldHMgbm90IG5hbWVkCisJCWFib3ZlIHRvIGNoZWNrIGlmIGl0IHdvcmtzIGZvciB5b3UgY2hpcHNldCwgYnV0IERBTkdFUk9VUyEKKwkJCisqIGhpZ2hfY2xvY2sgPSBbMXwwXSBGb3JjaWJseSBzZXQgSG9zdCBNYXN0ZXIgQ2xvY2sgdG8gNTZLSHogKGRlZmF1bHQsIAorCQkJd2hhdCB5b3VyIEJJT1MgdXNlKS4gREFOR0VST1VTISBUaGlzIHNob3VsZCBiZSBhIGJpdCAKKwkJCWZhc3RlciwgYnV0IGZyZWV6ZSBzb21lIHN5c3RlbXMgKGkuZS4gbXkgTGFwdG9wKS4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBTTUJ1cyBvbmx5IGRyaXZlciBpcyBrbm93biB0byB3b3JrIG9uIG1vdGhlcmJvYXJkcyB3aXRoIHRoZSBhYm92ZQorbmFtZWQgY2hpcHNldHMuCisKK0lmIHlvdSBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczoKKworMDA6MDAuMCBIb3N0IGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gNjMwIEhvc3QgKHJldiAzMSkKKzAwOjAxLjAgSVNBIGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gODVDNTAzLzU1MTMKKworb3IgbGlrZSB0aGlzOgorCiswMDowMC4wIEhvc3QgYnJpZGdlOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXSA3MzAgSG9zdCAocmV2IDAyKQorMDA6MDEuMCBJU0EgYnJpZGdlOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXSA4NUM1MDMvNTUxMworCitpbiB5b3VyICdsc3BjaScgb3V0cHV0ICwgdGhlbiB0aGlzIGRyaXZlciBpcyBmb3IgeW91ciBjaGlwc2V0LgorCitUaGFuayBZb3UKKy0tLS0tLS0tLQorUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPgorLSB0ZXN0aW5nIFNpUzczMCBzdXBwb3J0CitNYXJrIE0uIEhvZmZtYW4gPG1ob2ZmbWFuQGxpZ2h0bGluay5jb20+CistIGJ1ZyBmaXhlcworIAorVG8gYW55b25lIGVsc2Ugd2hpY2ggSSBmb3Jnb3QgaGVyZSA7KSwgdGhhbmtzIQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczY5eCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtc2lzNjl4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTQ4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczY5eApAQCAtMCwwICsxLDczIEBACitLZXJuZWwgZHJpdmVyIGkyYy1zaXM5NngKKworUmVwbGFjZXMgMi40LnggaTJjLXNpczY0NQorCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycCAoU2lTKQorICAgIEFueSBjb21iaW5hdGlvbiBvZiB0aGVzZSBob3N0IGJyaWRnZXM6CisJNjQ1LCA2NDVEWCAoYWthIDY0NiksIDY0OCwgNjUwLCA2NTEsIDY1NSwgNzM1LCA3NDUsIDc0NgorICAgIGFuZCB0aGVzZSBzb3V0aCBicmlkZ2VzOgorICAgIAk5NjEsIDk2MiwgOTYzKEwpIAorCitBdXRob3I6IE1hcmsgTS4gSG9mZm1hbiA8bWhvZmZtYW5AbGlnaHRsaW5rLmNvbT4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgU01CdXMgb25seSBkcml2ZXIgaXMga25vd24gdG8gd29yayBvbiBtb3RoZXJib2FyZHMgd2l0aCB0aGUgYWJvdmUKK25hbWVkIGNoaXBzZXQgY29tYmluYXRpb25zLiBUaGUgZHJpdmVyIHdhcyBkZXZlbG9wZWQgd2l0aG91dCBiZW5lZml0IG9mIGEKK3Byb3BlciBkYXRhc2hlZXQgZnJvbSBTaVMuIFRoZSBTTUJ1cyByZWdpc3RlcnMgYXJlIGFzc3VtZWQgY29tcGF0aWJsZSB3aXRoCit0aG9zZSBvZiB0aGUgU2lTNjMwLCBhbHRob3VnaCB0aGV5IGFyZSBsb2NhdGVkIGluIGEgY29tcGxldGVseSBkaWZmZXJlbnQKK3BsYWNlLiBUaGFua3MgdG8gQWxleGFuZGVyIE1hbHlzaCA8YW1hbHlzaEB3ZWIuZGU+IGZvciBwcm92aWRpbmcgdGhlCitTaVM2MzAgZGF0YXNoZWV0IChhbmQgIGRyaXZlcikuCisKK1RoZSBjb21tYW5kICJsc3BjaSIgYXMgcm9vdCBzaG91bGQgcHJvZHVjZSBzb21ldGhpbmcgbGlrZSB0aGVzZSBsaW5lczoKKworMDA6MDAuMCBIb3N0IGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU106IFVua25vd24gZGV2aWNlIDA2NDUKKzAwOjAyLjAgSVNBIGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gODVDNTAzLzU1MTMKKzAwOjAyLjEgU01CdXM6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdOiBVbmtub3duIGRldmljZSAwMDE2CisKK29yIHBlcmhhcHMgdGhpcy4uLgorCiswMDowMC4wIEhvc3QgYnJpZGdlOiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXTogVW5rbm93biBkZXZpY2UgMDY0NSAKKzAwOjAyLjAgSVNBIGJyaWRnZTogU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU106IFVua25vd24gZGV2aWNlIDA5NjEKKzAwOjAyLjEgU01CdXM6IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIFtTaVNdOiBVbmtub3duIGRldmljZSAwMDE2CisKKyhrZXJuZWwgdmVyc2lvbnMgbGF0ZXIgdGhhbiAyLjQuMTggbWF5IGZpbGwgaW4gdGhlICJVbmtub3duInMpCisKK0lmIHlvdSBjYW50IHNlZSBpdCBwbGVhc2UgbG9vayBvbiBxdWlya19zaXNfOTZ4X3NtYnVzCisoZHJpdmVycy9wY2kvcXVpcmtzLmMpIChhbHNvIGlmIHNvdXRoYnJpZGdlIGRldGVjdGlvbiBmYWlscykKKworSSBzdXNwZWN0IHRoYXQgdGhpcyBkcml2ZXIgY291bGQgYmUgbWFkZSB0byB3b3JrIGZvciB0aGUgZm9sbG93aW5nIFNpUworY2hpcHNldHMgYXMgd2VsbDogNjM1LCBhbmQgNjM1VC4gSWYgYW55b25lIG93bnMgYSBib2FyZCB3aXRoIHRob3NlIGNoaXBzCitBTkQgaXMgd2lsbGluZyB0byByaXNrIGNyYXNoaW5nICYgYnVybmluZyBhbiBvdGhlcndpc2Ugd2VsbC1iZWhhdmVkIGtlcm5lbAoraW4gdGhlIG5hbWUgb2YgcHJvZ3Jlc3MuLi4gcGxlYXNlIGNvbnRhY3QgbWUgYXQgPG1ob2ZmbWFuQGxpZ2h0bGluay5jb20+IG9yCit2aWEgdGhlIHByb2plY3QncyBtYWlsaW5nIGxpc3Q6IDxzZW5zb3JzQHN0aW1weS5uZXRyb2VkZ2UuY29tPi4gIFBsZWFzZQorc2VuZCBidWcgcmVwb3J0cyBhbmQvb3Igc3VjY2VzcyBzdG9yaWVzIGFzIHdlbGwuCisKKworVE8gRE9zCistLS0tLS0KKworKiBUaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgU01CdXMgYmxvY2sgcmVhZHMvd3JpdGVzOyBJIG1heSBhZGQgdGhlbSBpZiBhCitzY2VuYXJpbyBpcyBmb3VuZCB3aGVyZSB0aGV5J3JlIG5lZWRlZC4KKworCitUaGFuayBZb3UKKy0tLS0tLS0tLQorCitNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+CisgLSBkZXNpZ24gaGludHMgYW5kIGJ1ZyBmaXhlcworQWxleGFuZGVyIE1heWxzaCA8YW1hbHlzaEB3ZWIuZGU+CisgLSBkaXR0bywgcGx1cyBhbiBpbXBvcnRhbnQgZGF0YXNoZWV0Li4uIGFsbW9zdCB0aGUgb25lIEkgcmVhbGx5IHdhbnRlZAorSGFucy1H/G50ZXIgTPx0a2UgVXBodWVzIDxoZ19sdUB0LW9ubGluZS5kZT4KKyAtIHBhdGNoIGZvciBTaVM3MzUKK1JvYmVydCBad2VydXMgPGFyemllQGRkcy5ubD4KKyAtIHRlc3RpbmcgZm9yIFNpUzY0NURYCitLaWFudXNjaCBTYXlhaCBLYXJhZGppIDxraWFudXNjaEBzay10ZWNoLm5ldD4KKyAtIHBhdGNoIGZvciBTaVM2NDVEWC85NjIKK0tlbiBIZWFseQorIC0gcGF0Y2ggZm9yIFNpUzY1NQorCitUbyBhbnlvbmUgZWxzZSB3aG8gaGFzIHdyaXR0ZW4gdy8gZmVlZGJhY2ssIHRoYW5rcyEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWVkZmUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWEKQEAgLTAsMCArMSwzNCBAQAorS2VybmVsIGRyaXZlciBpMmMtdmlhCisKK1N1cHBvcnRlZCBhZGFwdGVyczoKKyAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbkMuIFZUODJDNTg2QgorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBWSUEgd2Vic2l0ZQorCitBdXRob3I6IEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworaTJjLXZpYSBpcyBhbiBpMmMgYnVzIGRyaXZlciBmb3IgbW90aGVyYm9hcmRzIHdpdGggVklBIGNoaXBzZXQuCisKK1RoZSBmb2xsb3dpbmcgVklBIHBjaSBjaGlwc2V0cyBhcmUgc3VwcG9ydGVkOgorIC0gTVZQMywgVlAzLCBWUDIvOTcsIFZQWC85NyAKKyAtIG90aGVycyB3aXRoIFNvdXRoIGJyaWRnZSBWVDgyQzU4NkIKKworWW91ciBsc3BjaSBsaXN0aW5nIG11c3Qgc2hvdyB0aGlzIDoKKworIEJyaWRnZTogVklBIFRlY2hub2xvZ2llcywgSW5jLiBWVDgyQzU4NkIgQUNQSSAocmV2IDEwKQorCisgICAgUHJvYmxlbXM/CisgCisgUTogWW91IGhhdmUgVlQ4MkM1ODZCIG9uIHRoZSBtb3RoZXJib2FyZCwgYnV0IG5vdCBpbiB0aGUgbGlzdGluZy4gCisgCisgQTogR28gdG8geW91ciBCSU9TIHNldHVwLCBzZWN0aW9uIFBDSSBkZXZpY2VzIG9yIHNpbWlsYXIuCisgICAgVHVybiBVU0Igc3VwcG9ydCBvbiwgYW5kIHRyeSBhZ2Fpbi4gCisKKyBROiBObyBlcnJvciBtZXNzYWdlcywgYnV0IHN0aWxsIGkyYyBkb2Vzbid0IHNlZW0gdG8gd29yay4KKworIEE6IFRoaXMgY2FuIGhhcHBlbi4gVGhpcyBkcml2ZXIgdXNlcyB0aGUgcGlucyBWSUEgcmVjb21tZW5kcyBpbiB0aGVpcgorICAgIGRhdGFzaGVldHMsIGJ1dCB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRoZSBtb3RoZXJib2FyZCBtYW51ZmFjdHVyZXIKKyAgICBjYW4gYWN0dWFsbHkgd2lyZSB0aGUgbGluZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyZjVhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvCkBAIC0wLDAgKzEsNDcgQEAKK0tlcm5lbCBkcml2ZXIgaTJjLXZpYXBybworCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogVklBIFRlY2hub2xvZ2llcywgSW5jLiBWVDgyQzU5NkEvQgorICAgIERhdGFzaGVldDogU29tZXRpbWVzIGF2YWlsYWJsZSBhdCB0aGUgVklBIHdlYnNpdGUKKworICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MkM2ODZBL0IgCisgICAgRGF0YXNoZWV0OiBTb21ldGltZXMgYXZhaWxhYmxlIGF0IHRoZSBWSUEgd2Vic2l0ZQorCisgICogVklBIFRlY2hub2xvZ2llcywgSW5jLiBWVDgyMzEsIFZUODIzMywgVlQ4MjMzQSwgVlQ4MjM1LCBWVDgyMzcKKyAgICBEYXRhc2hlZXQ6IGF2YWlsYWJsZSBvbiByZXF1ZXN0IGZyb20gVmlhCisKK0F1dGhvcnM6CisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgIAorCVBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sIAorCUt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwgCisJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiAKKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogZm9yY2U6IGludAorICBGb3JjaWJseSBlbmFibGUgdGhlIFNNQnVzIGNvbnRyb2xsZXIuIERBTkdFUk9VUyEKKyogZm9yY2VfYWRkcjogaW50CisgIEZvcmNpYmx5IGVuYWJsZSB0aGUgU01CdXMgYXQgdGhlIGdpdmVuIGFkZHJlc3MuIEVYVFJFTUVMWSBEQU5HRVJPVVMhCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitpMmMtdmlhcHJvIGlzIGEgdHJ1ZSBTTUJ1cyBob3N0IGRyaXZlciBmb3IgbW90aGVyYm9hcmRzIHdpdGggb25lIG9mIHRoZQorc3VwcG9ydGVkIFZJQSBzb3V0aGJyaWRnZXMuCisKK1lvdXIgbHNwY2kgLW4gbGlzdGluZyBtdXN0IHNob3cgb25lIG9mIHRoZXNlIDoKKworIGRldmljZSAxMTA2OjMwNTAgICAoVlQ4MkM1OTYgZnVuY3Rpb24gMykKKyBkZXZpY2UgMTEwNjozMDUxICAgKFZUODJDNTk2IGZ1bmN0aW9uIDMpCisgZGV2aWNlIDExMDY6MzA1NyAgIChWVDgyQzY4NiBmdW5jdGlvbiA0KQorIGRldmljZSAxMTA2OjMwNzQgICAoVlQ4MjMzKQorIGRldmljZSAxMTA2OjMxNDcgICAoVlQ4MjMzQSkKKyBkZXZpY2UgMTEwNjo4MjM1ICAgKFZUODIzMSkKKyBkZXZpZGUgMTEwNjozMTc3ICAgKFZUODIzNSkKKyBkZXZpZGUgMTEwNjozMjI3ICAgKFZUODIzNykKKworSWYgbm9uZSBvZiB0aGVzZSBzaG93IHVwLCB5b3Ugc2hvdWxkIGxvb2sgaW4gdGhlIEJJT1MgZm9yIHNldHRpbmdzIGxpa2UKK2VuYWJsZSBBQ1BJIC8gU01CdXMgb3IgZXZlbiBVU0IuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12b29kb28zIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12b29kb28zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDkwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMKQEAgLTAsMCArMSw2MiBAQAorS2VybmVsIGRyaXZlciBpMmMtdm9vZG9vMworCitTdXBwb3J0ZWQgYWRhcHRlcnM6CisgICogM2RmeCBWb29kb28zIGJhc2VkIGNhcmRzCisgICogVm9vZG9vIEJhbnNoZWUgYmFzZWQgY2FyZHMKKworQXV0aG9yczogCisJRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgCisJUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwgCisJUmFscGggTWV0emxlciA8cmprbUB0aHAudW5pLWtvZWxuLmRlPiwKKwlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+CisKK01haW4gY29udGFjdDogUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPgorCQorVGhlIGNvZGUgaXMgYmFzZWQgdXBvbiBSYWxwaCdzIHRlc3QgY29kZSAoaGUgZGlkIHRoZSBoYXJkIHN0dWZmIDsnKQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIDNkZnggVm9vZG9vMyBjaGlwIGNvbnRhaW5zIHR3byBJMkMgaW50ZXJmYWNlcyAoYWthIGEgSTJDICdtYXN0ZXInIG9yCisnaG9zdCcpLiAKKworVGhlIGZpcnN0IGludGVyZmFjZSBpcyB1c2VkIGZvciBEREMgKERhdGEgRGlzcGxheSBDaGFubmVsKSB3aGljaCBpcyBhCitzZXJpYWwgY2hhbm5lbCB0aHJvdWdoIHRoZSBWR0EgbW9uaXRvciBjb25uZWN0b3IgdG8gYSBEREMtY29tcGxpYW50Cittb25pdG9yLiBUaGlzIGludGVyZmFjZSBpcyBkZWZpbmVkIGJ5IHRoZSBWaWRlbyBFbGVjdHJvbmljcyBTdGFuZGFyZHMKK0Fzc29jaWF0aW9uIChWRVNBKS4gVGhlIHN0YW5kYXJkcyBhcmUgYXZhaWxhYmxlIGZvciBwdXJjaGFzZSBhdAoraHR0cDovL3d3dy52ZXNhLm9yZyAuCisKK1RoZSBzZWNvbmQgaW50ZXJmYWNlIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIEkyQyBidXMuIFRoZSBpbnRlbnQgYnkgM2RmeCB3YXMKK3RvIGFsbG93IG1hbnVmYWN0dXJlcnMgdG8gYWRkIGV4dHJhIGNoaXBzIHRvIHRoZSB2aWRlbyBjYXJkIHN1Y2ggYXMgYQorVFYtb3V0IGNoaXAgc3VjaCBhcyB0aGUgQlQ4Njkgb3IgcG9zc2libHkgZXZlbiBJMkMgYmFzZWQgdGVtcGVyYXR1cmUKK3NlbnNvcnMgbGlrZSB0aGUgQURNMTAyMSBvciBMTTc1LgorCitTdGFiaWxpdHkKKy0tLS0tLS0tLQorCitTZWVtcyB0byBiZSBzdGFibGUgb24gdGhlIHRlc3QgbWFjaGluZSwgYnV0IG5lZWRzIG1vcmUgdGVzdGluZyBvbiBvdGhlcgorbWFjaGluZXMuIFNpbXVsdGFuZW91cyBhY2Nlc3NlcyBvZiB0aGUgRERDIGFuZCBJMkMgYnVzc2VzIG1heSBjYXVzZSBlcnJvcnMuCisKK1N1cHBvcnRlZCBEZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLQorCitTcGVjaWZpY2FsbHksIHRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIGFuZCB0ZXN0ZWQgb24gdGhlICczZGZ4IFZvb2RvbzMgQUdQCiszMDAwJyB3aGljaCBoYXMgYSB0di1vdXQgZmVhdHVyZSAocy12aWRlbyBvciBjb21wb3NpdGUpLiAgQWNjb3JkaW5nIHRvIHRoZQorZG9jcyBhbmQgZGlzY3Vzc2lvbnMsIHRoaXMgY29kZSBzaG91bGQgd29yayBmb3IgYW55IFZvb2RvbzMgYmFzZWQgY2FyZHMgYXMKK3dlbGwgYXMgVm9vZG9vIEJhbnNoZWUgYmFzZWQgY2FyZHMuICBUaGUgRERDIGludGVyZmFjZSBoYXMgYmVlbiB0ZXN0ZWQgb24gYQorVm9vZG9vIEJhbnNoZWUgY2FyZC4KKwkKK0lzc3VlcworLS0tLS0tCisKK1Byb2JhYmx5IG1hbnksIGJ1dCBpdCBzZWVtcyB0byB3b3JrIE9LIG9uIG15IHN5c3RlbS4gOicpCisKKworRXh0ZXJuYWwgRGV2aWNlIENvbm5lY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkaWdpdGFsIHZpZGVvIGlucHV0IGp1bXBlcnMgZ2l2ZSBhdmFpbGFiaWxpdHkgdG8gdGhlIEkyQyBidXMuIAorU3BlY2lmaWNhbGx5LCBwaW5zIDEzIGFuZCAyNSAoYm90dG9tIHJvdyBtaWRkbGUsIGFuZCBib3R0b20gcmlnaHQtZW5kKSBhcmUgICAgIAordGhlIEkyQyBjbG9jayBhbmQgSTJDIGRhdGEgbGluZXMsIHJlc3BlY3RpdmVseS4gKzVWIGFuZCBHTkQgYXJlIHByb2JhYmx5CithbHNvIGVhc2lseSBhdmFpbGFibGUgbWFraW5nIHRoZSBhZGRpdGlvbiBvZiBleHRyYSBJMkMvU01CdXMgZGV2aWNlcyBlYXN5Cit0byBpbXBsZW1lbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYiBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9zY3gyMDBfYWNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YzhjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYgpAQCAtMCwwICsxLDE0IEBACitLZXJuZWwgZHJpdmVyIHNjeDIwMF9hY2IKKworQXV0aG9yOiBDaHJpc3RlciBXZWluaWdlbCA8d2luZ2VsQG5hbm8tc3lzdGVtLmNvbT4KKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogYmFzZTogaW50CisgIEJhc2UgYWRkcmVzc2VzIGZvciB0aGUgQUNDRVNTLmJ1cyBjb250cm9sbGVycworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIEFDQ0VTUy5idXMgY29udHJvbGxlcnMgb2YgYSBTQ3gyMDAgcHJvY2Vzc29yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvc21zYzQ3YjM5Ny50eHQgYi9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9zbXNjNDdiMzk3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODllZGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvY2hpcHMvc21zYzQ3YjM5Ny50eHQKQEAgLTAsMCArMSwxNDYgQEAKK05vdmVtYmVyIDIzLCAyMDA0CisKK1RoZSBmb2xsb3dpbmcgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgdGhlIFNNU0MgTFBDNDdCMzk3LU5DIHNlbnNvciBjaGlwCisoZm9yIHdoaWNoIHRoZXJlIGlzIG5vIHB1YmxpYyBkYXRhc2hlZXQgYXZhaWxhYmxlKS4gIFRoaXMgZG9jdW1lbnQgd2FzCitwcm92aWRlZCBieSBDcmFpZyBLZWxseSAoSW4tU3RvcmUgQnJvYWRjYXN0IE5ldHdvcmspIGFuZCBlZGl0ZWQvY29ycmVjdGVkCitieSBNYXJrIE0uIEhvZmZtYW4gPG1ob2ZmbWFuQGxpZ2h0bGluay5jb20+LgorCisqICogKiAqICoKKworTWV0aG9kcyBmb3IgZGV0ZWN0aW5nIHRoZSBIUCBTSU8gYW5kIHJlYWRpbmcgdGhlIHRoZXJtYWwgZGF0YSBvbiBhIGRjNzEwMC4KKworVGhlIHRoZXJtYWwgaW5mb3JtYXRpb24gb24gdGhlIGRjNzEwMCBpcyBjb250YWluZWQgaW4gdGhlIFNJTyBIYXJkd2FyZSBNb25pdG9yCisoSFdNKS4gIFRoZSBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NlZCB0aHJvdWdoIGFuIGluZGV4L2RhdGEgcGFpci4gIFRoZSBpbmRleC9kYXRhCitwYWlyIGlzIGxvY2F0ZWQgYXQgdGhlIEhXTSBCYXNlIEFkZHJlc3MgKyAwIGFuZCB0aGUgSFdNIEJhc2UgQWRkcmVzcyArIDEuICBUaGUKK0hXTSBCYXNlIGFkZHJlc3MgY2FuIGJlIG9idGFpbmVkIGZyb20gTG9naWNhbCBEZXZpY2UgOCwgcmVnaXN0ZXJzIDB4NjAgKE1TQikKK2FuZCAweDYxIChMU0IpLiAgQ3VycmVudGx5IHdlIGFyZSB1c2luZyAweDQ4MCBmb3IgdGhlIEhXTSBCYXNlIEFkZHJlc3MgYW5kCisweDQ4MCBhbmQgMHg0ODEgZm9yIHRoZSBpbmRleC9kYXRhIHBhaXIuCisKK1JlYWRpbmcgdGVtcGVyYXR1cmUgaW5mb3JtYXRpb24uCitUaGUgdGVtcGVyYXR1cmUgaW5mb3JtYXRpb24gaXMgbG9jYXRlZCBpbiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyczoKK1RlbXAxCQkweDI1CShDdXJyZW50bHksIHRoaXMgcmVmbGVjdHMgdGhlIENQVSB0ZW1wIG9uIGFsbCBzeXN0ZW1zKS4KK1RlbXAyCQkweDI2CitUZW1wMwkJMHgyNworVGVtcDQJCTB4ODAKKworUHJvZ3JhbW1pbmcgRXhhbXBsZQorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byByZWFkIHRoZSBIV00gdGVtcGVyYXR1cmUgcmVnaXN0ZXJzOgorTU9WCURYLDQ4MEgKK01PVglBWCwyNUgKK09VVAlEWCxBTAorTU9WCURYLDQ4MUgKK0lOCUFMLERYCisKK0FMIGNvbnRhaW5zIHRoZSBkYXRhIGluIGhleCwgdGhlIHRlbXBlcmF0dXJlIGluIENlbHNpdXMgaXMgdGhlIGRlY2ltYWwKK2VxdWl2YWxlbnQuCisKK0V4OiBJZiBBTCBjb250YWlucyAweDJBLCB0aGUgdGVtcGVyYXR1cmUgaXMgNDIgZGVncmVlcyBDLgorCitSZWFkaW5nIHRhY2ggaW5mb3JtYXRpb24uCitUaGUgZmFuIHNwZWVkIGluZm9ybWF0aW9uIGlzIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyByZWdpc3RlcnM6CisJCUxTQglNU0IKK1RhY2gxCQkweDI4CTB4MjkJKEN1cnJlbnRseSwgdGhpcyByZWZsZWN0cyB0aGUgQ1BVCisJCQkJZmFuIHNwZWVkIG9uIGFsbCBzeXN0ZW1zKS4KK1RhY2gyCQkweDJBCTB4MkIKK1RhY2gzCQkweDJDCTB4MkQKK1RhY2g0CQkweDJFCTB4MkYKKworSW1wb3J0YW50ISEhCitSZWFkaW5nIHRoZSB0YWNoIExTQiBsb2NrcyB0aGUgdGFjaCBNU0IuCitUaGUgTFNCIE11c3QgYmUgcmVhZCBmaXJzdC4KKworSG93IHRvIGNvbnZlcnQgdGhlIHRhY2ggcmVhZGluZyB0byBSUE0uCitUaGUgdGFjaCByZWFkaW5nIChUQ291bnQpIGlzIGdpdmVuIGJ5OiAgKFRhY2ggTVNCICogMjU2KSArIChUYWNoIExTQikKK1RoZSBTSU8gY291bnRzIHRoZSBudW1iZXIgb2YgOTBrSHogKDExLjExMXVzKSBwdWxzZXMgcGVyIHJldm9sdXRpb24uCitSUE0gPSA2MC8oVENvdW50ICogMTEuMTExdXMpCisKK0V4YW1wbGU6CitSZWcgMHgyOCA9IDB4OUIKK1JlZyAweDI5ID0gMHgwOAorCitUQ291bnQgPSAweDg5QiA9IDIyMDMKKworUlBNID0gNjAgLyAoMjIwMyAqIDExLjExMTExIEUtNikgPSAyNDUxIFJQTQorCitPYnRhaW5pbmcgdGhlIFNJTyB2ZXJzaW9uLgorCitDT05GSUdVUkFUSU9OIFNFUVVFTkNFCitUbyBwcm9ncmFtIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycywgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBtdXN0IGJlIGZvbGxvd2VkOgorMS4gRW50ZXIgQ29uZmlndXJhdGlvbiBNb2RlCisyLiBDb25maWd1cmUgdGhlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzCiszLiBFeGl0IENvbmZpZ3VyYXRpb24gTW9kZS4KKworRW50ZXIgQ29uZmlndXJhdGlvbiBNb2RlCitUbyBwbGFjZSB0aGUgY2hpcCBpbnRvIHRoZSBDb25maWd1cmF0aW9uIFN0YXRlIFRoZSBjb25maWcga2V5ICgweDU1KSBpcyB3cml0dGVuCit0byB0aGUgQ09ORklHIFBPUlQgKDB4MkUpLiAKKworQ29uZmlndXJhdGlvbiBNb2RlCitJbiBjb25maWd1cmF0aW9uIG1vZGUsIHRoZSBJTkRFWCBQT1JUIGlzIGxvY2F0ZWQgYXQgdGhlIENPTkZJRyBQT1JUIGFkZHJlc3MgYW5kCit0aGUgREFUQSBQT1JUIGlzIGF0IElOREVYIFBPUlQgYWRkcmVzcyArIDEuCisKK1RoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpbiB0d28gc3RlcHM6IAorYS4JV3JpdGUgdGhlIGluZGV4IG9mIHRoZSBMb2dpY2FsIERldmljZSBOdW1iZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorCShpLmUuLCAweDA3KSB0byB0aGUgSU5ERVggUE9SVCBhbmQgdGhlbiB3cml0ZSB0aGUgbnVtYmVyIG9mIHRoZQorCWRlc2lyZWQgbG9naWNhbCBkZXZpY2UgdG8gdGhlIERBVEEgUE9SVC4KKworYi4JV3JpdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbiByZWdpc3RlciB3aXRoaW4gdGhlCisJbG9naWNhbCBkZXZpY2UgdG8gdGhlIElOREVYIFBPUlQgYW5kIHRoZW4gd3JpdGUgb3IgcmVhZCB0aGUgY29uZmlnLQorCXVyYXRpb24gcmVnaXN0ZXIgdGhyb3VnaCB0aGUgREFUQSBQT1JULiAgCisKK05vdGU6IElmIGFjY2Vzc2luZyB0aGUgR2xvYmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzLCBzdGVwIChhKSBpcyBub3QgcmVxdWlyZWQuCisKK0V4aXQgQ29uZmlndXJhdGlvbiBNb2RlCitUbyBleGl0IHRoZSBDb25maWd1cmF0aW9uIFN0YXRlIHRoZSB3cml0ZSAweEFBIHRvIHRoZSBDT05GSUcgUE9SVCAoMHgyRSkuCitUaGUgY2hpcCByZXR1cm5zIHRvIHRoZSBSVU4gU3RhdGUuICAoVGhpcyBpcyBpbXBvcnRhbnQpLgorCitQcm9ncmFtbWluZyBFeGFtcGxlCitUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHJlYWQgdGhlIFNJTyBEZXZpY2UgSUQgbG9jYXRlZCBhdCAweDIwCisKKzsgRU5URVIgQ09ORklHVVJBVElPTiBNT0RFICAgCitNT1YJRFgsMDJFSAorTU9WCUFYLDA1NUgKK09VVAlEWCxBTAorOyBHTE9CQUwgQ09ORklHVVJBVElPTiAgUkVHSVNURVIgCitNT1YJRFgsMDJFSAorTU9WCUFMLDIwSAorT1VUCURYLEFMIAorOyBSRUFEIFRIRSBEQVRBCitNT1YJRFgsMDJGSAorSU4JQUwsRFgKKzsgRVhJVCBDT05GSUdVUkFUSU9OIE1PREUgICAgIAorTU9WCURYLDAyRUgKK01PVglBWCwwQUFICitPVVQJRFgsQUwKKworVGhlIHJlZ2lzdGVycyBvZiBpbnRlcmVzdCBmb3IgaWRlbnRpZnlpbmcgdGhlIFNJTyBvbiB0aGUgZGM3MTAwIGFyZSBEZXZpY2UgSUQKKygweDIwKSBhbmQgRGV2aWNlIFJldiAgKDB4MjEpLgorCitUaGUgRGV2aWNlIElEIHdpbGwgcmVhZCAwWDZGCitUaGUgRGV2aWNlIFJldiBjdXJyZW50bHkgcmVhZHMgMHgwMQorCitPYnRhaW5pbmcgdGhlIEhXTSBCYXNlIEFkZHJlc3MuCitUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHJlYWQgdGhlIEhXTSBCYXNlIEFkZHJlc3MgbG9jYXRlZCBpbgorTG9naWNhbCBEZXZpY2UgOC4KKworOyBFTlRFUiBDT05GSUdVUkFUSU9OIE1PREUgICAKK01PVglEWCwwMkVICitNT1YJQVgsMDU1SAorT1VUCURYLEFMCis7IENPTkZJR1VSRSBSRUdJU1RFUiBDUkUwLCAgIAorOyBMT0dJQ0FMIERFVklDRSA4ICAgICAgICAgICAKK01PVglEWCwwMkVICitNT1YJQUwsMDdICitPVVQJRFgsQUwgO1BvaW50IHRvIExEIyBDb25maWcgUmVnCitNT1YJRFgsMDJGSAorTU9WCUFMLCAwOEgKK09VVAlEWCxBTDtQb2ludCB0byBMb2dpY2FsIERldmljZSA4Cis7CitNT1YJRFgsMDJFSCAKK01PVglBTCw2MEgKK09VVAlEWCxBTAk7IFBvaW50IHRvIEhXTSBCYXNlIEFkZHIgTVNCCitNT1YJRFgsMDJGSAorSU4JQUwsRFgJOyBHZXQgTVNCIG9mIEhXTSBCYXNlIEFkZHIKKzsgRVhJVCBDT05GSUdVUkFUSU9OIE1PREUgICAgIAorTU9WCURYLDAyRUgKK01PVglBWCwwQUFICitPVVQJRFgsQUwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2Rldi1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2kyYy9kZXYtaW50ZXJmYWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZDZjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9kZXYtaW50ZXJmYWNlCkBAIC0wLDAgKzEsMTQ2IEBACitVc3VhbGx5LCBpMmMgZGV2aWNlcyBhcmUgY29udHJvbGxlZCBieSBhIGtlcm5lbCBkcml2ZXIuIEJ1dCBpdCBpcyBhbHNvCitwb3NzaWJsZSB0byBhY2Nlc3MgYWxsIGRldmljZXMgb24gYW4gYWRhcHRlciBmcm9tIHVzZXJzcGFjZSwgdGhyb3VnaAordGhlIC9kZXYgaW50ZXJmYWNlLiBZb3UgbmVlZCB0byBsb2FkIG1vZHVsZSBpMmMtZGV2IGZvciB0aGlzLgorCitFYWNoIHJlZ2lzdGVyZWQgaTJjIGFkYXB0ZXIgZ2V0cyBhIG51bWJlciwgY291bnRpbmcgZnJvbSAwLiBZb3UgY2FuCitleGFtaW5lIC9zeXMvY2xhc3MvaTJjLWRldi8gdG8gc2VlIHdoYXQgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHdoaWNoIGFkYXB0ZXIuCitJMkMgZGV2aWNlIGZpbGVzIGFyZSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgZGV2aWNlIG51bWJlciA4OQorYW5kIGEgbWlub3IgZGV2aWNlIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBudW1iZXIgYXNzaWduZWQgYXMgCitleHBsYWluZWQgYWJvdmUuIFRoZXkgc2hvdWxkIGJlIGNhbGxlZCAiaTJjLSVkIiAoaTJjLTAsIGkyYy0xLCAuLi4sIAoraTJjLTEwLCAuLi4pLiBBbGwgMjU2IG1pbm9yIGRldmljZSBudW1iZXJzIGFyZSByZXNlcnZlZCBmb3IgaTJjLgorCisKK0MgZXhhbXBsZQorPT09PT09PT09CisKK1NvIGxldCdzIHNheSB5b3Ugd2FudCB0byBhY2Nlc3MgYW4gaTJjIGFkYXB0ZXIgZnJvbSBhIEMgcHJvZ3JhbS4gVGhlCitmaXJzdCB0aGluZyB0byBkbyBpcyBgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPiIgYW5kICIjaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPi4gCitZZXMsIEkga25vdywgeW91IHNob3VsZCBuZXZlciBpbmNsdWRlIGtlcm5lbCBoZWFkZXIgZmlsZXMsIGJ1dCB1bnRpbCBnbGliYyAKK2tub3dzIGFib3V0IGkyYywgdGhlcmUgaXMgbm90IG11Y2ggY2hvaWNlLgorCitOb3csIHlvdSBoYXZlIHRvIGRlY2lkZSB3aGljaCBhZGFwdGVyIHlvdSB3YW50IHRvIGFjY2Vzcy4gWW91IHNob3VsZAoraW5zcGVjdCAvc3lzL2NsYXNzL2kyYy1kZXYvIHRvIGRlY2lkZSB0aGlzLiBBZGFwdGVyIG51bWJlcnMgYXJlIGFzc2lnbmVkCitzb21ld2hhdCBkeW5hbWljYWxseSwgc28geW91IGNhbiBub3QgZXZlbiBhc3N1bWUgL2Rldi9pMmMtMCBpcyB0aGUKK2ZpcnN0IGFkYXB0ZXIuCisKK05leHQgdGhpbmcsIG9wZW4gdGhlIGRldmljZSBmaWxlLCBhcyBmb2xsb3dzOgorICBpbnQgZmlsZTsKKyAgaW50IGFkYXB0ZXJfbnIgPSAyOyAvKiBwcm9iYWJseSBkeW5hbWljYWxseSBkZXRlcm1pbmVkICovCisgIGNoYXIgZmlsZW5hbWVbMjBdOworICAKKyAgc3ByaW50ZihmaWxlbmFtZSwiL2Rldi9pMmMtJWQiLGFkYXB0ZXJfbnIpOworICBpZiAoKGZpbGUgPSBvcGVuKGZpbGVuYW1lLE9fUkRXUikpIDwgMCkgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOyB5b3UgY2FuIGNoZWNrIGVycm5vIHRvIHNlZSB3aGF0IHdlbnQgd3JvbmcgKi8KKyAgICBleGl0KDEpOworICB9CisKK1doZW4geW91IGhhdmUgb3BlbmVkIHRoZSBkZXZpY2UsIHlvdSBtdXN0IHNwZWNpZnkgd2l0aCB3aGF0IGRldmljZQorYWRkcmVzcyB5b3Ugd2FudCB0byBjb21tdW5pY2F0ZToKKyAgaW50IGFkZHIgPSAweDQwOyAvKiBUaGUgSTJDIGFkZHJlc3MgKi8KKyAgaWYgKGlvY3RsKGZpbGUsSTJDX1NMQVZFLGFkZHIpIDwgMCkgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOyB5b3UgY2FuIGNoZWNrIGVycm5vIHRvIHNlZSB3aGF0IHdlbnQgd3JvbmcgKi8KKyAgICBleGl0KDEpOworICB9CisKK1dlbGwsIHlvdSBhcmUgYWxsIHNldCB1cCBub3cuIFlvdSBjYW4gbm93IHVzZSBTTUJ1cyBjb21tYW5kcyBvciBwbGFpbgorSTJDIHRvIGNvbW11bmljYXRlIHdpdGggeW91ciBkZXZpY2UuIFNNQnVzIGNvbW1hbmRzIGFyZSBwcmVmZXJyZWQgaWYKK3RoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlbS4gQm90aCBhcmUgaWxsdXN0cmF0ZWQgYmVsb3cuCisgIF9fdTggcmVnaXN0ZXIgPSAweDEwOyAvKiBEZXZpY2UgcmVnaXN0ZXIgdG8gYWNjZXNzICovCisgIF9fczMyIHJlczsKKyAgY2hhciBidWZbMTBdOworICAvKiBVc2luZyBTTUJ1cyBjb21tYW5kcyAqLworICByZXMgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoZmlsZSxyZWdpc3Rlcik7CisgIGlmIChyZXMgPCAwKSB7CisgICAgLyogRVJST1IgSEFORExJTkc6IGkyYyB0cmFuc2FjdGlvbiBmYWlsZWQgKi8KKyAgfSBlbHNlIHsKKyAgICAvKiByZXMgY29udGFpbnMgdGhlIHJlYWQgd29yZCAqLworICB9CisgIC8qIFVzaW5nIEkyQyBXcml0ZSwgZXF1aXZhbGVudCBvZiAKKyAgICAgICAgICAgaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShmaWxlLHJlZ2lzdGVyLDB4NjU0MykgKi8KKyAgYnVmWzBdID0gcmVnaXN0ZXI7CisgIGJ1ZlsxXSA9IDB4NDM7CisgIGJ1ZlsyXSA9IDB4NjU7CisgIGlmICggd3JpdGUoZmlsZSxidWYsMykgIT0gMykgeworICAgIC8qIEVSUk9SIEhBTkRMSU5HOiBpMmMgdHJhbnNhY3Rpb24gZmFpbGVkICovCisgIH0KKyAgLyogVXNpbmcgSTJDIFJlYWQsIGVxdWl2YWxlbnQgb2YgaTJjX3NtYnVzX3JlYWRfYnl0ZShmaWxlKSAqLworICBpZiAocmVhZChmaWxlLGJ1ZiwxKSAhPSAxKSB7CisgICAgLyogRVJST1IgSEFORExJTkc6IGkyYyB0cmFuc2FjdGlvbiBmYWlsZWQgKi8KKyAgfSBlbHNlIHsKKyAgICAvKiBidWZbMF0gY29udGFpbnMgdGhlIHJlYWQgYnl0ZSAqLworICB9CisKK0lNUE9SVEFOVDogYmVjYXVzZSBvZiB0aGUgdXNlIG9mIGlubGluZSBmdW5jdGlvbnMsIHlvdSAqaGF2ZSogdG8gdXNlCisnLU8nIG9yIHNvbWUgdmFyaWF0aW9uIHdoZW4geW91IGNvbXBpbGUgeW91ciBwcm9ncmFtIQorCisKK0Z1bGwgaW50ZXJmYWNlIGRlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIElPQ1RMcyBhcmUgZGVmaW5lZCBhbmQgZnVsbHkgc3VwcG9ydGVkIAorKHNlZSBhbHNvIGkyYy1kZXYuaCBhbmQgaTJjLmgpOgorCitpb2N0bChmaWxlLEkyQ19TTEFWRSxsb25nIGFkZHIpCisgIENoYW5nZSBzbGF2ZSBhZGRyZXNzLiBUaGUgYWRkcmVzcyBpcyBwYXNzZWQgaW4gdGhlIDcgbG93ZXIgYml0cyBvZiB0aGUKKyAgYXJndW1lbnQgKGV4Y2VwdCBmb3IgMTAgYml0IGFkZHJlc3NlcywgcGFzc2VkIGluIHRoZSAxMCBsb3dlciBiaXRzIGluIHRoaXMKKyAgY2FzZSkuCisKK2lvY3RsKGZpbGUsSTJDX1RFTkJJVCxsb25nIHNlbGVjdCkKKyAgU2VsZWN0cyB0ZW4gYml0IGFkZHJlc3NlcyBpZiBzZWxlY3Qgbm90IGVxdWFscyAwLCBzZWxlY3RzIG5vcm1hbCA3IGJpdAorICBhZGRyZXNzZXMgaWYgc2VsZWN0IGVxdWFscyAwLiBEZWZhdWx0IDAuCisKK2lvY3RsKGZpbGUsSTJDX1BFQyxsb25nIHNlbGVjdCkKKyAgU2VsZWN0cyBTTUJ1cyBQRUMgKHBhY2tldCBlcnJvciBjaGVja2luZykgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uCisgIGlmIHNlbGVjdCBub3QgZXF1YWxzIDAsIGRpc2FibGVzIGlmIHNlbGVjdCBlcXVhbHMgMC4gRGVmYXVsdCAwLgorICBVc2VkIG9ubHkgZm9yIFNNQnVzIHRyYW5zYWN0aW9ucy4KKworaW9jdGwoZmlsZSxJMkNfRlVOQ1MsdW5zaWduZWQgbG9uZyAqZnVuY3MpCisgIEdldHMgdGhlIGFkYXB0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgcHV0cyBpdCBpbiAqZnVuY3MuCisKK2lvY3RsKGZpbGUsSTJDX1JEV1Isc3RydWN0IGkyY19pb2N0bF9yZHdyX2RhdGEgKm1zZ3NldCkKKworICBEbyBjb21iaW5lZCByZWFkL3dyaXRlIHRyYW5zYWN0aW9uIHdpdGhvdXQgc3RvcCBpbiBiZXR3ZWVuLgorICBUaGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGkyY19pb2N0bF9yZHdyX2RhdGEgeworCisgICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNnczsgIC8qIHB0ciB0byBhcnJheSBvZiBzaW1wbGUgbWVzc2FnZXMgKi8KKyAgICAgIGludCBubXNnczsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGV4Y2hhbmdlICovCisgIH0KKworICBUaGUgbXNnc1tdIHRoZW1zZWx2ZXMgY29udGFpbiBmdXJ0aGVyIHBvaW50ZXJzIGludG8gZGF0YSBidWZmZXJzLgorICBUaGUgZnVuY3Rpb24gd2lsbCB3cml0ZSBvciByZWFkIGRhdGEgdG8gb3IgZnJvbSB0aGF0IGJ1ZmZlcnMgZGVwZW5kaW5nCisgIG9uIHdoZXRoZXIgdGhlIEkyQ19NX1JEIGZsYWcgaXMgc2V0IGluIGEgcGFydGljdWxhciBtZXNzYWdlIG9yIG5vdC4KKyAgVGhlIHNsYXZlIGFkZHJlc3MgYW5kIHdoZXRoZXIgdG8gdXNlIHRlbiBiaXQgYWRkcmVzcyBtb2RlIGhhcyB0byBiZQorICBzZXQgaW4gZWFjaCBtZXNzYWdlLCBvdmVycmlkaW5nIHRoZSB2YWx1ZXMgc2V0IHdpdGggdGhlIGFib3ZlIGlvY3RsJ3MuCisKKworT3RoZXIgdmFsdWVzIGFyZSBOT1Qgc3VwcG9ydGVkIGF0IHRoaXMgbW9tZW50LCBleGNlcHQgZm9yIEkyQ19TTUJVUywKK3doaWNoIHlvdSBzaG91bGQgbmV2ZXIgZGlyZWN0bHkgY2FsbDsgaW5zdGVhZCwgdXNlIHRoZSBhY2Nlc3MgZnVuY3Rpb25zCitiZWxvdy4KKworWW91IGNhbiBkbyBwbGFpbiBpMmMgdHJhbnNhY3Rpb25zIGJ5IHVzaW5nIHJlYWQoMikgYW5kIHdyaXRlKDIpIGNhbGxzLgorWW91IGRvIG5vdCBuZWVkIHRvIHBhc3MgdGhlIGFkZHJlc3MgYnl0ZTsgaW5zdGVhZCwgc2V0IGl0IHRocm91Z2gKK2lvY3RsIEkyQ19TTEFWRSBiZWZvcmUgeW91IHRyeSB0byBhY2Nlc3MgdGhlIGRldmljZS4KKworWW91IGNhbiBkbyBTTUJ1cyBsZXZlbCB0cmFuc2FjdGlvbnMgKHNlZSBkb2N1bWVudGF0aW9uIGZpbGUgc21idXMtcHJvdG9jb2wgCitmb3IgZGV0YWlscykgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgX19zMzIgaTJjX3NtYnVzX3dyaXRlX3F1aWNrKGludCBmaWxlLCBfX3U4IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZShpbnQgZmlsZSk7CisgIF9fczMyIGkyY19zbWJ1c193cml0ZV9ieXRlKGludCBmaWxlLCBfX3U4IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGludCBmaWxlLCBfX3U4IGNvbW1hbmQpOworICBfX3MzMiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGludCBmaWxlLCBfX3U4IGNvbW1hbmQsIF9fdTggdmFsdWUpOworICBfX3MzMiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoaW50IGZpbGUsIF9fdTggY29tbWFuZCk7CisgIF9fczMyIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoaW50IGZpbGUsIF9fdTggY29tbWFuZCwgX191MTYgdmFsdWUpOworICBfX3MzMiBpMmNfc21idXNfcHJvY2Vzc19jYWxsKGludCBmaWxlLCBfX3U4IGNvbW1hbmQsIF9fdTE2IHZhbHVlKTsKKyAgX19zMzIgaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShpbnQgZmlsZSwgX191OCBjb21tYW5kLCBfX3U4ICp2YWx1ZXMpOworICBfX3MzMiBpMmNfc21idXNfd3JpdGVfYmxvY2tfZGF0YShpbnQgZmlsZSwgX191OCBjb21tYW5kLCBfX3U4IGxlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggKnZhbHVlcyk7CitBbGwgdGhlc2UgdHJhbnNhY3Rpb25zIHJldHVybiAtMSBvbiBmYWlsdXJlOyB5b3UgY2FuIHJlYWQgZXJybm8gdG8gc2VlCit3aGF0IGhhcHBlbmVkLiBUaGUgJ3dyaXRlJyB0cmFuc2FjdGlvbnMgcmV0dXJuIDAgb24gc3VjY2VzczsgdGhlCisncmVhZCcgdHJhbnNhY3Rpb25zIHJldHVybiB0aGUgcmVhZCB2YWx1ZSwgZXhjZXB0IGZvciByZWFkX2Jsb2NrLCB3aGljaAorcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZWFkLiBUaGUgYmxvY2sgYnVmZmVycyBuZWVkIG5vdCBiZSBsb25nZXIKK3RoYW4gMzIgYnl0ZXMuCisKK1RoZSBhYm92ZSBmdW5jdGlvbnMgYXJlIGFsbCBtYWNyb3MsIHRoYXQgcmVzb2x2ZSB0byBjYWxscyB0byB0aGUKK2kyY19zbWJ1c19hY2Nlc3MgZnVuY3Rpb24sIHRoYXQgb24gaXRzIHR1cm4gY2FsbHMgYSBzcGVjaWZpYyBpb2N0bAord2l0aCB0aGUgZGF0YSBpbiBhIHNwZWNpZmljIGZvcm1hdC4gUmVhZCB0aGUgc291cmNlIGNvZGUgaWYgeW91Cit3YW50IHRvIGtub3cgd2hhdCBoYXBwZW5zIGJlaGluZCB0aGUgc2NyZWVucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2Z1bmN0aW9uYWxpdHkgYi9Eb2N1bWVudGF0aW9uL2kyYy9mdW5jdGlvbmFsaXR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzhhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9mdW5jdGlvbmFsaXR5CkBAIC0wLDAgKzEsMTM1IEBACitJTlRST0RVQ1RJT04KKy0tLS0tLS0tLS0tLQorCitCZWNhdXNlIG5vdCBldmVyeSBJMkMgb3IgU01CdXMgYWRhcHRlciBpbXBsZW1lbnRzIGV2ZXJ5dGhpbmcgaW4gdGhlIAorSTJDIHNwZWNpZmljYXRpb25zLCBhIGNsaWVudCBjYW4gbm90IHRydXN0IHRoYXQgZXZlcnl0aGluZyBpdCBuZWVkcworaXMgaW1wbGVtZW50ZWQgd2hlbiBpdCBpcyBnaXZlbiB0aGUgb3B0aW9uIHRvIGF0dGFjaCB0byBhbiBhZGFwdGVyOgordGhlIGNsaWVudCBuZWVkcyBzb21lIHdheSB0byBjaGVjayB3aGV0aGVyIGFuIGFkYXB0ZXIgaGFzIHRoZSBuZWVkZWQKK2Z1bmN0aW9uYWxpdHkuIAorCisKK0ZVTkNUSU9OQUxJVFkgQ09OU1RBTlRTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgdGhlIG1vc3QgdXAtdG8tZGF0ZSBsaXN0IG9mIGZ1bmN0aW9uYWxpdHkgY29uc3RhbnRzLCBwbGVhc2UgY2hlY2sKKzxsaW51eC9pMmMuaD4hCisKKyAgSTJDX0ZVTkNfSTJDICAgICAgICAgICAgICAgICAgICBQbGFpbiBpMmMtbGV2ZWwgY29tbWFuZHMgKFB1cmUgU01CdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVycyB0eXBpY2FsbHkgY2FuIG5vdCBkbyB0aGVzZSkKKyAgSTJDX0ZVTkNfMTBCSVRfQUREUiAgICAgICAgICAgICBIYW5kbGVzIHRoZSAxMC1iaXQgYWRkcmVzcyBleHRlbnNpb25zCisgIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HICAgICAgS25vd3MgYWJvdXQgdGhlIEkyQ19NX1JFVl9ESVJfQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfTV9SRVZfRElSX0FERFIgYW5kIEkyQ19NX1JFVl9ESVJfTk9TVEFSVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICh3aGljaCBtb2RpZnkgdGhlIGkyYyBwcm90b2NvbCEpCisgIEkyQ19GVU5DX1NNQlVTX1FVSUNLICAgICAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgd3JpdGVfcXVpY2sgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfYnl0ZSBjb21tYW5kCisgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgd3JpdGVfYnl0ZSBjb21tYW5kCisgIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ieXRlX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX2J5dGVfZGF0YSBjb21tYW5kCisgIEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF93b3JkX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX2J5dGVfZGF0YSBjb21tYW5kCisgIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTCAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcHJvY2Vzc19jYWxsIGNvbW1hbmQKKyAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2Jsb2NrX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX2Jsb2NrX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSyAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfaTJjX2Jsb2NrX2RhdGEgY29tbWFuZAorICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgIEhhbmRsZXMgdGhlIFNNQnVzIHdyaXRlX2kyY19ibG9ja19kYXRhIGNvbW1hbmQKKworQSBmZXcgY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBmbGFncyBhcmUgYWxzbyBkZWZpbmVkIGZvciB5b3VyIGNvbnZlbmllbmNlOgorCisgIEkyQ19GVU5DX1NNQlVTX0JZVEUgICAgICAgICAgICAgSGFuZGxlcyB0aGUgU01CdXMgcmVhZF9ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdyaXRlX2J5dGUgY29tbWFuZHMKKyAgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBICAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2J5dGVfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3cml0ZV9ieXRlX2RhdGEgY29tbWFuZHMKKyAgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBICAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX3dvcmRfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3cml0ZV93b3JkX2RhdGEgY29tbWFuZHMKKyAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQSAgICAgICBIYW5kbGVzIHRoZSBTTUJ1cyByZWFkX2Jsb2NrX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd3JpdGVfYmxvY2tfZGF0YSBjb21tYW5kcworICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sgICAgICAgIEhhbmRsZXMgdGhlIFNNQnVzIHJlYWRfaTJjX2Jsb2NrX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd3JpdGVfaTJjX2Jsb2NrX2RhdGEgY29tbWFuZHMKKyAgSTJDX0ZVTkNfU01CVVNfRU1VTCAgICAgICAgICAgICBIYW5kbGVzIGFsbCBTTUJ1cyBjb21tYW5kcyB0aGFuIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtdWxhdGVkIGJ5IGEgcmVhbCBJMkMgYWRhcHRlciAodXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHJhbnNwYXJlbnQgZW11bGF0aW9uIGxheWVyKQorCisKK0FMR09SSVRITS9BREFQVEVSIElNUExFTUVOVEFUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHlvdSB3cml0ZSBhIG5ldyBhbGdvcml0aG0gZHJpdmVyLCB5b3Ugd2lsbCBoYXZlIHRvIGltcGxlbWVudCBhCitmdW5jdGlvbiBjYWxsYmFjayBgZnVuY3Rpb25hbGl0eScsIHRoYXQgZ2V0cyBhbiBpMmNfYWRhcHRlciBzdHJ1Y3R1cmUKK3BvaW50ZXIgYXMgaXRzIG9ubHkgcGFyYW1ldGVyOgorCisgIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHsKKwkvKiBNYW55IG90aGVyIHRoaW5ncyBvZiBjb3Vyc2U7IGNoZWNrIDxsaW51eC9pMmMuaD4hICovCisJdTMyICgqZnVuY3Rpb25hbGl0eSkgKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKKyAgfQorCitBIHR5cGljYWxseSBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbiBiZWxvdywgZnJvbSBpMmMtYWxnby1iaXQuYzoKKworICBzdGF0aWMgdTMyIGJpdF9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKKyAgeworCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfMTBCSVRfQUREUiB8IAorCSAgICAgICBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORzsKKyAgfQorCisKKworQ0xJRU5UIENIRUNLSU5HCistLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIGEgY2xpZW50IHRyaWVzIHRvIGF0dGFjaCB0byBhbiBhZGFwdGVyLCBvciBldmVuIGRvIHRlc3RzIHRvIGNoZWNrCit3aGV0aGVyIG9uZSBvZiB0aGUgZGV2aWNlcyBpdCBzdXBwb3J0cyBpcyBwcmVzZW50IG9uIGFuIGFkYXB0ZXIsIGl0IHNob3VsZAorY2hlY2sgd2hldGhlciB0aGUgbmVlZGVkIGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudC4gVGhlcmUgYXJlIHR3byBmdW5jdGlvbnMKK2RlZmluZWQgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBmdW5jdGlvbmFsaXR5IGhvb2sKK2luIHRoZSBhbGdvcml0aG0gc3RydWN0dXJlIGRpcmVjdGx5OgorCisgIC8qIFJldHVybiB0aGUgZnVuY3Rpb25hbGl0eSBtYXNrICovCisgIGV4dGVybiB1MzIgaTJjX2dldF9mdW5jdGlvbmFsaXR5IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOworCisgIC8qIFJldHVybiAxIGlmIGFkYXB0ZXIgc3VwcG9ydHMgZXZlcnl0aGluZyB3ZSBuZWVkLCAwIGlmIG5vdC4gKi8KKyAgZXh0ZXJuIGludCBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eSAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MzIgZnVuYyk7CisKK1RoaXMgaXMgYSB0eXBpY2FsIHdheSB0byB1c2UgdGhlc2UgZnVuY3Rpb25zIChmcm9tIHRoZSB3cml0aW5nLWNsaWVudHMKK2RvY3VtZW50KToKKyAgaW50IGZvb19kZXRlY3RfY2xpZW50KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywgaW50IGtpbmQpCisgIHsKKwkvKiBEZWZpbmUgbmVlZGVkIHZhcmlhYmxlcyAqLworCisJLyogQXMgdGhlIHZlcnkgZmlyc3QgYWN0aW9uLCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBhZGFwdGVyIGhhcyB0aGUKKwkgICBuZWVkZWQgZnVuY3Rpb25hbGl0eTogd2UgbmVlZCB0aGUgU01CdXMgcmVhZF93b3JkX2RhdGEsCisgICAgICAgICAgIHdyaXRlX3dvcmRfZGF0YSBhbmQgd3JpdGVfYnl0ZSBmdW5jdGlvbnMgaW4gdGhpcyBleGFtcGxlLiAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlcixJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKSkKKwkJZ290byBFUlJPUjA7CisKKwkvKiBOb3cgd2UgY2FuIGRvIHRoZSByZWFsIGRldGVjdGlvbiAqLworCisJRVJST1IwOgorCQkvKiBSZXR1cm4gYW4gZXJyb3IgKi8KKyAgfQorCisKKworQ0hFQ0tJTkcgVEhST1VHSCAvREVWCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHRyeSB0byBhY2Nlc3MgYW4gYWRhcHRlciBmcm9tIGEgdXNlcnNwYWNlIHByb2dyYW0sIHlvdSB3aWxsIGhhdmUKK3RvIHVzZSB0aGUgL2RldiBpbnRlcmZhY2UuIFlvdSB3aWxsIHN0aWxsIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGUKK2Z1bmN0aW9uYWxpdHkgeW91IG5lZWQgaXMgc3VwcG9ydGVkLCBvZiBjb3Vyc2UuIFRoaXMgaXMgZG9uZSB1c2luZwordGhlIEkyQ19GVU5DUyBpb2N0bC4gQW4gZXhhbXBsZSwgYWRhcHRlZCBmcm9tIHRoZSBsbV9zZW5zb3JzIGkyY19kZXRlY3QKK3Byb2dyYW0sIGlzIGJlbG93OgorCisgIGludCBmaWxlOworICBpZiAoZmlsZSA9IG9wZW4oIi9kZXYvaTJjLTAiLE9fUkRXUikgPCAwKSB7CisJLyogU29tZSBraW5kIG9mIGVycm9yIGhhbmRsaW5nICovCisJZXhpdCgxKTsKKyAgfQorICBpZiAoaW9jdGwoZmlsZSxJMkNfRlVOQ1MsJmZ1bmNzKSA8IDApIHsKKwkvKiBTb21lIGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgKi8KKwlleGl0KDEpOworICB9CisgIGlmICghIChmdW5jcyAmIEkyQ19GVU5DX1NNQlVTX1FVSUNLKSkgeworCS8qIE9vcHMsIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0eSAoU01CdXMgd3JpdGVfcXVpY2sgZnVuY3Rpb24pIGlzCisgICAgICAgICAgIG5vdCBhdmFpbGFibGUhICovCisJZXhpdCgxKTsKKyAgfQorICAvKiBOb3cgaXQgaXMgc2FmZSB0byB1c2UgdGhlIFNNQnVzIHdyaXRlX3F1aWNrIGNvbW1hbmQgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbCBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDAyMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaTJjLXByb3RvY29sCkBAIC0wLDAgKzEsNzYgQEAKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBpMmMgcHJvdG9jb2wuIE9yIHdpbGwsIHdoZW4gaXQgaXMgZmluaXNoZWQgOi0pCisKK0tleSB0byBzeW1ib2xzCis9PT09PT09PT09PT09PQorCitTICAgICAoMSBiaXQpIDogU3RhcnQgYml0CitQICAgICAoMSBiaXQpIDogU3RvcCBiaXQKK1JkL1dyICgxIGJpdCkgOiBSZWFkL1dyaXRlIGJpdC4gUmQgZXF1YWxzIDEsIFdyIGVxdWFscyAwLgorQSwgTkEgKDEgYml0KSA6IEFjY2VwdCBhbmQgcmV2ZXJzZSBhY2NlcHQgYml0LiAKK0FkZHIgICg3IGJpdHMpOiBJMkMgNyBiaXQgYWRkcmVzcy4gTm90ZSB0aGF0IHRoaXMgY2FuIGJlIGV4cGFuZGVkIGFzIHVzdWFsIHRvIAorICAgICAgICAgICAgICAgIGdldCBhIDEwIGJpdCBJMkMgYWRkcmVzcy4KK0NvbW0gICg4IGJpdHMpOiBDb21tYW5kIGJ5dGUsIGEgZGF0YSBieXRlIHdoaWNoIG9mdGVuIHNlbGVjdHMgYSByZWdpc3RlciBvbgorICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UuCitEYXRhICAoOCBiaXRzKTogQSBwbGFpbiBkYXRhIGJ5dGUuIFNvbWV0aW1lcywgSSB3cml0ZSBEYXRhTG93LCBEYXRhSGlnaAorICAgICAgICAgICAgICAgIGZvciAxNiBiaXQgZGF0YS4KK0NvdW50ICg4IGJpdHMpOiBBIGRhdGEgYnl0ZSBjb250YWluaW5nIHRoZSBsZW5ndGggb2YgYSBibG9jayBvcGVyYXRpb24uCisKK1suLl06IERhdGEgc2VudCBieSBJMkMgZGV2aWNlLCBhcyBvcHBvc2VkIHRvIGRhdGEgc2VudCBieSB0aGUgaG9zdCBhZGFwdGVyLgorCisKK1NpbXBsZSBzZW5kIHRyYW5zYWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgY29ycmVzcG9uZHMgdG8gaTJjX21hc3Rlcl9zZW5kLgorCisgIFMgQWRkciBXciBbQV0gRGF0YSBbQV0gRGF0YSBbQV0gLi4uIFtBXSBEYXRhIFtBXSBQCisKKworU2ltcGxlIHJlY2VpdmUgdHJhbnNhY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvcnJlc3BvbmRzIHRvIGkyY19tYXN0ZXJfcmVjdgorCisgIFMgQWRkciBSZCBbQV0gW0RhdGFdIEEgW0RhdGFdIEEgLi4uIEEgW0RhdGFdIE5BIFAKKworCitDb21iaW5lZCB0cmFuc2FjdGlvbnMKKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgY29ycmVzcG9uZHMgdG8gaTJjX3RyYW5zZmVyCisKK1RoZXkgYXJlIGp1c3QgbGlrZSB0aGUgYWJvdmUgdHJhbnNhY3Rpb25zLCBidXQgaW5zdGVhZCBvZiBhIHN0b3AgYml0IFAKK2Egc3RhcnQgYml0IFMgaXMgc2VudCBhbmQgdGhlIHRyYW5zYWN0aW9uIGNvbnRpbnVlcy4gQW4gZXhhbXBsZSBvZgorYSBieXRlIHJlYWQsIGZvbGxvd2VkIGJ5IGEgYnl0ZSB3cml0ZToKKworICBTIEFkZHIgUmQgW0FdIFtEYXRhXSBOQSBTIEFkZHIgV3IgW0FdIERhdGEgW0FdIFAKKworCitNb2RpZmllZCB0cmFuc2FjdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PQorCitXZSBoYXZlIGZvdW5kIHNvbWUgSTJDIGRldmljZXMgdGhhdCBuZWVkcyB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6CisKKyAgRmxhZyBJMkNfTV9OT1NUQVJUOiAKKyAgICBJbiBhIGNvbWJpbmVkIHRyYW5zYWN0aW9uLCBubyAnUyBBZGRyIFdyL1JkIFtBXScgaXMgZ2VuZXJhdGVkIGF0IHNvbWUKKyAgICBwb2ludC4gRm9yIGV4YW1wbGUsIHNldHRpbmcgSTJDX01fTk9TVEFSVCBvbiB0aGUgc2Vjb25kIHBhcnRpYWwgbWVzc2FnZQorICAgIGdlbmVyYXRlcyBzb21ldGhpbmcgbGlrZToKKyAgICAgIFMgQWRkciBSZCBbQV0gW0RhdGFdIE5BIERhdGEgW0FdIFAKKyAgICBJZiB5b3Ugc2V0IHRoZSBJMkNfTV9OT1NUQVJUIHZhcmlhYmxlIGZvciB0aGUgZmlyc3QgcGFydGlhbCBtZXNzYWdlLAorICAgIHdlIGRvIG5vdCBnZW5lcmF0ZSBBZGRyLCBidXQgd2UgZG8gZ2VuZXJhdGUgdGhlIHN0YXJ0Yml0IFMuIFRoaXMgd2lsbAorICAgIHByb2JhYmx5IGNvbmZ1c2UgYWxsIG90aGVyIGNsaWVudHMgb24geW91ciBidXMsIHNvIGRvbid0IHRyeSB0aGlzLgorCisgIEZsYWdzIEkyQ19NX1JFVl9ESVJfQUREUgorICAgIFRoaXMgdG9nZ2xlcyB0aGUgUmQvV3IgZmxhZy4gVGhhdCBpcywgaWYgeW91IHdhbnQgdG8gZG8gYSB3cml0ZSwgYnV0CisgICAgbmVlZCB0byBlbWl0IGFuIFJkIGluc3RlYWQgb2YgYSBXciwgb3IgdmljZSB2ZXJzYSwgeW91IHNldCB0aGlzCisgICAgZmxhZy4gRm9yIGV4YW1wbGU6CisgICAgICBTIEFkZHIgUmQgW0FdIERhdGEgW0FdIERhdGEgW0FdIC4uLiBbQV0gRGF0YSBbQV0gUAorCisgIEZsYWdzIEkyQ19NX0lHTk9SRV9OQUsKKyAgICBOb3JtYWxseSBtZXNzYWdlIGlzIGludGVycnVwdGVkIGltbWVkaWF0ZWx5IGlmIHRoZXJlIGlzIFtOQV0gZnJvbSB0aGUKKyAgICBjbGllbnQuIFNldHRpbmcgdGhpcyBmbGFnIHRyZWF0cyBhbnkgW05BXSBhc6BbQV0sIGFuZCBhbGwgb2YKKyAgICBtZXNzYWdlIGlzIHNlbnQuCisgICAgVGhlc2UgbWVzc2FnZXMgbWF5IHN0aWxsIGZhaWwgdG8gU0NMIGxvLT5oaSB0aW1lb3V0LgorCisgIEZsYWdzIEkyQ19NX05PX1JEX0FDSworICAgIEluIGEgcmVhZCBtZXNzYWdlLCBtYXN0ZXIgQS9OQSBiaXQgaXMgc2tpcHBlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViIGIvRG9jdW1lbnRhdGlvbi9pMmMvaTJjLXN0dWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkY2IxMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViCkBAIC0wLDAgKzEsMzggQEAKK01PRFVMRTogaTJjLXN0dWIKKworREVTQ1JJUFRJT046CisKK1RoaXMgbW9kdWxlIGlzIGEgdmVyeSBzaW1wbGUgZmFrZSBJMkMvU01CdXMgZHJpdmVyLiAgSXQgaW1wbGVtZW50cyBmb3VyCit0eXBlcyBvZiBTTUJ1cyBjb21tYW5kczogd3JpdGUgcXVpY2ssIChyL3cpIGJ5dGUsIChyL3cpIGJ5dGUgZGF0YSwgYW5kCisoci93KSB3b3JkIGRhdGEuCisKK05vIGhhcmR3YXJlIGlzIG5lZWRlZCBub3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kdWxlLiAgSXQgd2lsbCBhY2NlcHQgd3JpdGUKK3F1aWNrIGNvbW1hbmRzIHRvIGFsbCBhZGRyZXNzZXM7IGl0IHdpbGwgcmVzcG9uZCB0byB0aGUgb3RoZXIgY29tbWFuZHMgKGFsc28KK3RvIGFsbCBhZGRyZXNzZXMpIGJ5IHJlYWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIGFuIGFycmF5IGluIG1lbW9yeS4gIEl0IHdpbGwKK2Fsc28gc3BhbSB0aGUga2VybmVsIGxvZ3MgZm9yIGV2ZXJ5IGNvbW1hbmQgaXQgaGFuZGxlcy4KKworQSBwb2ludGVyIHJlZ2lzdGVyIHdpdGggYXV0by1pbmNyZW1lbnQgaXMgaW1wbGVtZW50ZWQgZm9yIGFsbCBieXRlCitvcGVyYXRpb25zLiAgVGhpcyBhbGxvd3MgZm9yIGNvbnRpbnVvdXMgYnl0ZSByZWFkcyBsaWtlIHRob3NlIHN1cHBvcnRlZCBieQorRUVQUk9NcywgYW1vbmcgb3RoZXJzLgorCitUaGUgdHlwaWNhbCB1c2UtY2FzZSBpcyBsaWtlIHRoaXM6CisJMS4gbG9hZCB0aGlzIG1vZHVsZQorCTIuIHVzZSBpMmNzZXQgKGZyb20gbG1fc2Vuc29ycyBwcm9qZWN0KSB0byBwcmUtbG9hZCBzb21lIGRhdGEKKwkzLiBsb2FkIHRoZSB0YXJnZXQgc2Vuc29ycyBjaGlwIGRyaXZlciBtb2R1bGUKKwk0LiBvYnNlcnZlIGl0cyBiZWhhdmlvciBpbiB0aGUga2VybmVsIGxvZworCitDQVZFQVRTOgorCitUaGVyZSBhcmUgaW5kZXBlbmRlbnQgYXJyYXlzIGZvciBieXRlL2RhdGEgYW5kIHdvcmQvZGF0YSBjb21tYW5kcy4gIERlcGVuZGluZworb24gaWYvaG93IGEgdGFyZ2V0IGRyaXZlciBtaXhlcyB0aGVtLCB5b3UnbGwgbmVlZCB0byBiZSBjYXJlZnVsLgorCitJZiB5b3VyIHRhcmdldCBkcml2ZXIgcG9sbHMgc29tZSBieXRlIG9yIHdvcmQgd2FpdGluZyBmb3IgaXQgdG8gY2hhbmdlLCB0aGUKK3N0dWIgY291bGQgbG9jayBpdCB1cC4gIFVzZSBpMmNzZXQgdG8gdW5sb2NrIGl0LgorCitJZiB0aGUgaGFyZHdhcmUgZm9yIHlvdXIgZHJpdmVyIGhhcyBiYW5rZWQgcmVnaXN0ZXJzIChlLmcuIFdpbmJvbmQgc2Vuc29ycworY2hpcHMpIHRoaXMgbW9kdWxlIHdpbGwgbm90IHdvcmsgd2VsbCAtIGFsdGhvdWdoIGl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvCitzdXBwb3J0IHRoYXQgcHJldHR5IGVhc2lseS4KKworSWYgeW91IHNwYW0gaXQgaGFyZCBlbm91Z2gsIHByaW50ayBjYW4gYmUgbG9zc3kuICBUaGlzIG1vZHVsZSByZWFsbHkgd2FudHMKK3NvbWV0aGluZyBsaWtlIHJlbGF5ZnMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3BvcnRpbmctY2xpZW50cyBiL0RvY3VtZW50YXRpb24vaTJjL3BvcnRpbmctY2xpZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQwNDkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvcG9ydGluZy1jbGllbnRzCkBAIC0wLDAgKzEsMTMzIEBACitSZXZpc2lvbiA0LCAyMDA0LTAzLTMwCitKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KK0dyZWcgS0ggPGdyZWdAa3JvYWguY29tPgorCitUaGlzIGlzIGEgZ3VpZGUgb24gaG93IHRvIGNvbnZlcnQgSTJDIGNoaXAgZHJpdmVycyBmcm9tIExpbnV4IDIuNCB0bworTGludXggMi42LiBJIGhhdmUgYmVlbiB1c2luZyBleGlzdGluZyBkcml2ZXJzIChsbTc1LCBsbTc4KSBhcyBleGFtcGxlcy4KK1RoZW4gSSBjb252ZXJ0ZWQgYSBkcml2ZXIgbXlzZWxmIChsbTgzKSBhbmQgdXBkYXRlZCB0aGlzIGRvY3VtZW50LgorCitUaGVyZSBhcmUgdHdvIHNldHMgb2YgcG9pbnRzIGJlbG93LiBUaGUgZmlyc3Qgc2V0IGNvbmNlcm5zIHRlY2huaWNhbAorY2hhbmdlcy4gVGhlIHNlY29uZCBzZXQgY29uY2VybnMgY29kaW5nIHBvbGljeS4gQm90aCBhcmUgbWFuZGF0b3J5LgorCitBbHRob3VnaCByZWFkaW5nIHRoaXMgZ3VpZGUgd2lsbCBoZWxwIHlvdSBwb3J0aW5nIGRyaXZlcnMsIEkgc3VnZ2VzdAoreW91IGtlZXAgYW4gZXllIG9uIGFuIGFscmVhZHkgcG9ydGVkIGRyaXZlciB3aGlsZSBwb3J0aW5nIHlvdXIgb3duCitkcml2ZXIuIFRoaXMgd2lsbCBoZWxwIHlvdSBhIGxvdCB1bmRlcnN0YW5kaW5nIHdoYXQgdGhpcyBndWlkZQorZXhhY3RseSBtZWFucy4gQ2hvb3NlIHRoZSBjaGlwIGRyaXZlciB0aGF0IGlzIHRoZSBtb3JlIHNpbWlsYXIgdG8KK3lvdXJzIGZvciBiZXN0IHJlc3VsdHMuCisKK1RlY2huaWNhbCBjaGFuZ2VzOgorCisqIFtJbmNsdWRlc10gR2V0IHJpZCBvZiAidmVyc2lvbi5oIi4gUmVwbGFjZSA8bGludXgvaTJjLXByb2MuaD4gd2l0aAorICA8bGludXgvaTJjLXNlbnNvci5oPi4gSW5jbHVkZXMgdHlwaWNhbGx5IGxvb2sgbGlrZSB0aGF0OgorICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisgICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L2kyYy1zZW5zb3IuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L2kyYy12aWQuaD4JLyogaWYgeW91IG5lZWQgVlJNIHN1cHBvcnQgKi8KKyAgI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogaWYgeW91IGhhdmUgSS9PIG9wZXJhdGlvbnMgKi8KKyAgUGxlYXNlIHJlc3BlY3QgdGhpcyBpbmNsdXNpb24gb3JkZXIuIFNvbWUgZXh0cmEgaGVhZGVycyBtYXkgYmUKKyAgcmVxdWlyZWQgZm9yIGEgZ2l2ZW4gZHJpdmVyIChlLmcuICJsbTc1LmgiKS4KKworKiBbQWRkcmVzc2VzXSBTRU5TT1JTX0kyQ19FTkQgYmVjb21lcyBJMkNfQ0xJRU5UX0VORCwgU0VOU09SU19JU0FfRU5ECisgIGJlY29tZXMgSTJDX0NMSUVOVF9JU0FfRU5ELgorCisqIFtDbGllbnQgZGF0YV0gR2V0IHJpZCBvZiBzeXNjdGxfaWQuIFRyeSB1c2luZyBzdGFuZGFyZCBuYW1lcyBmb3IKKyAgcmVnaXN0ZXIgdmFsdWVzIChmb3IgZXhhbXBsZSwgdGVtcF9vcyBiZWNvbWVzIHRlbXBfbWF4KS4gWW91J3JlCisgIHN0aWxsIHJlbGF0aXZlbHkgZnJlZSBoZXJlLCBidXQgeW91ICpoYXZlKiB0byBmb2xsb3cgdGhlIHN0YW5kYXJkCisgIG5hbWVzIGZvciBzeXNmcyBmaWxlcyAoc2VlIHRoZSBTeXNjdGwgc2VjdGlvbiBiZWxvdykuCisKKyogW0Z1bmN0aW9uIHByb3RvdHlwZXNdIFRoZSBkZXRlY3QgZnVuY3Rpb25zIGxvc2VzIGl0cyBmbGFncworICBwYXJhbWV0ZXIuIFN5c2N0bCAoZS5nLiBsbTc1X3RlbXApIGFuZCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucworICBhcmUgb2ZmIHRoZSBsaXN0IG9mIHByb3RvdHlwZXMuIFRoaXMgdXN1YWxseSBsZWF2ZXMgZml2ZQorICBwcm90b3R5cGVzOgorICBzdGF0aWMgaW50IGxtNzVfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKKyAgc3RhdGljIGludCBsbTc1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAorICAgICAgaW50IGtpbmQpOworICBzdGF0aWMgdm9pZCBsbTc1X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworICBzdGF0aWMgaW50IGxtNzVfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKKyAgc3RhdGljIHZvaWQgbG03NV91cGRhdGVfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCisqIFtTeXNjdGxdIEFsbCBzeXNjdGwgc3R1ZmYgaXMgb2YgY291cnNlIGdvbmUgKGRlZmluZXMsIGN0bF90YWJsZQorICBhbmQgZnVuY3Rpb25zKS4gSW5zdGVhZCwgeW91IGhhdmUgdG8gZGVmaW5lIHNob3cgYW5kIHNldCBmdW5jdGlvbnMgZm9yCisgIGVhY2ggc3lzZnMgZmlsZS4gT25seSBkZWZpbmUgc2V0IGZvciB3cml0YWJsZSB2YWx1ZXMuIFRha2UgYSBsb29rIGF0IGFuCisgIGV4aXN0aW5nIDIuNiBkcml2ZXIgZm9yIGRldGFpbHMgKGxtNzggZm9yIGV4YW1wbGUpLiBEb24ndCBmb3JnZXQKKyAgdG8gZGVmaW5lIHRoZSBhdHRyaWJ1dGVzIGZvciBlYWNoIGZpbGUgKHRoaXMgaXMgdGhhdCBzdGVwIHRoYXQKKyAgbGlua3MgY2FsbGJhY2sgZnVuY3Rpb25zKS4gVXNlIHRoZSBmaWxlIG5hbWVzIHNwZWNpZmllZCBpbgorICBEb2N1bWVudGF0aW9uL2kyYy9zeXNmcy1pbnRlcmZhY2UgZm9yIHRoZSBpbmRpdmlkdWFsIGZpbGVzLiBBbHNvCisgIGNvbnZlcnQgdGhlIHVuaXRzIHRoZXNlIGZpbGVzIHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgb25lcy4KKyAgSWYgeW91IG5lZWQgdG8gYWRkIGEgbmV3IHR5cGUgb2YgZmlsZSwgcGxlYXNlIGRpc2N1c3MgaXQgb24gdGhlCisgIHNlbnNvcnMgbWFpbGluZyBsaXN0IDxzZW5zb3JzQHN0aW1weS5uZXRyb2VkZ2UuY29tPiBieSBwcm92aWRpbmcgYQorICBwYXRjaCB0byB0aGUgRG9jdW1lbnRhdGlvbi9pMmMvc3lzZnMtaW50ZXJmYWNlIGZpbGUuCisKKyogW0F0dGFjaF0gRm9yIEkyQyBkcml2ZXJzLCB0aGUgYXR0YWNoIGZ1bmN0aW9uIHNob3VsZCBtYWtlIHN1cmUKKyAgdGhhdCB0aGUgYWRhcHRlcidzIGNsYXNzIGhhcyBJMkNfQ0xBU1NfSFdNT04sIHVzaW5nIHRoZQorICBmb2xsb3dpbmcgY29uc3RydWN0OgorICBpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCisgICAgICAgICAgcmV0dXJuIDA7CisgIElTQS1vbmx5IGRyaXZlcnMgb2YgY291cnNlIGRvbid0IG5lZWQgdGhpcy4KKworKiBbRGV0ZWN0XSBBcyBtZW50aW9uZWQgZWFybGllciwgdGhlIGZsYWdzIHBhcmFtZXRlciBpcyBnb25lLgorICBUaGUgdHlwZV9uYW1lIGFuZCBjbGllbnRfbmFtZSBzdHJpbmdzIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZQorICBuYW1lIHN0cmluZywgd2hpY2ggd2lsbCBiZSBmaWxsZWQgd2l0aCBhIGxvd2VyY2FzZSwgc2hvcnQgc3RyaW5nCisgICh0eXBpY2FsbHkgdGhlIGRyaXZlciBuYW1lLCBlLmcuICJsbTc1IikuCisgIEluIGkyYy1vbmx5IGRyaXZlcnMsIGRyb3AgdGhlIGkyY19pc19pc2FfYWRhcHRlciBjaGVjaywgaXQncworICB1c2VsZXNzLgorICBUaGUgZXJyb3JOIGxhYmVscyBhcmUgcmVkdWNlZCB0byB0aGUgbnVtYmVyIG5lZWRlZC4gSWYgdGhhdCBudW1iZXIKKyAgaXMgMiAoaTJjLW9ubHkgZHJpdmVycyksIGl0IGlzIGFkdmlzZWQgdGhhdCB0aGUgbGFiZWxzIGFyZSBuYW1lZAorICBleGl0IGFuZCBleGl0X2ZyZWUuIEZvciBpMmMraXNhIGRyaXZlcnMsIGxhYmVscyBzaG91bGQgYmUgbmFtZWQKKyAgRVJST1IwLCBFUlJPUjEgYW5kIEVSUk9SMi4gRG9uJ3QgZm9yZ2V0IHRvIHByb3Blcmx5IHNldCBlcnIgYmVmb3JlCisgIGp1bXBpbmcgdG8gZXJyb3IgbGFiZWxzLiBCeSB0aGUgd2F5LCBsYWJlbHMgc2hvdWxkIGJlIGxlZnQtYWxpZ25lZC4KKyAgVXNlIG1lbXNldCB0byBmaWxsIHRoZSBjbGllbnQgYW5kIGRhdGEgYXJlYSB3aXRoIDB4MDAuCisgIFVzZSBpMmNfc2V0X2NsaWVudGRhdGEgdG8gc2V0IHRoZSBjbGllbnQgZGF0YSAoYXMgb3Bwb3NlZCB0bworICBhIGRpcmVjdCBhY2Nlc3MgdG8gY2xpZW50LT5kYXRhKS4KKyAgVXNlIHN0cmxjcHkgaW5zdGVhZCBvZiBzdHJjcHkgdG8gY29weSB0aGUgY2xpZW50IG5hbWUuCisgIFJlcGxhY2UgdGhlIHN5c2N0bCBkaXJlY3RvcnkgcmVnaXN0cmF0aW9uIGJ5IGNhbGxzIHRvCisgIGRldmljZV9jcmVhdGVfZmlsZS4gTW92ZSB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJlZm9yZSBhbnkKKyAgc3lzZnMgZmlsZSBjcmVhdGlvbi4KKyAgRHJvcCBjbGllbnQtPmlkLgorCisqIFtJbml0XSBMaW1pdHMgbXVzdCBub3QgYmUgc2V0IGJ5IHRoZSBkcml2ZXIgKGNhbiBiZSBkb25lIGxhdGVyIGluCisgIHVzZXItc3BhY2UpLiBDaGlwIHNob3VsZCBub3QgYmUgcmVzZXQgZGVmYXVsdCAoYWx0aG91Z2ggYSBtb2R1bGUKKyAgcGFyYW1ldGVyIG1heSBiZSB1c2VkIHRvIGZvcmNlIGlzKSwgYW5kIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZQorICBsaW1pdGVkIHRvIHRoZSBzdHJpY3RseSBuZWNlc3Nhcnkgc3RlcHMuCisKKyogW0RldGFjaF0gR2V0IHJpZCBvZiBkYXRhLCByZW1vdmUgdGhlIGNhbGwgdG8KKyAgaTJjX2RlcmVnaXN0ZXJfZW50cnkuCisKKyogW1VwZGF0ZV0gRG9uJ3QgYWNjZXNzIGNsaWVudC0+ZGF0YSBkaXJlY3RseSwgdXNlCisgIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpIGluc3RlYWQuCisKKyogW0ludGVyZmFjZV0gSW5pdCBmdW5jdGlvbiBzaG91bGQgbm90IHByaW50IGFueXRoaW5nLiBNYWtlIHN1cmUKKyAgdGhlcmUgaXMgYSBNT0RVTEVfTElDRU5TRSgpIGxpbmUsIGF0IHRoZSBib3R0b20gb2YgdGhlIGZpbGUKKyAgKGFmdGVyIE1PRFVMRV9BVVRIT1IoKSBhbmQgTU9EVUxFX0RFU0NSSVBUSU9OKCksIGluIHRoaXMgb3JkZXIpLgorCitDb2RpbmcgcG9saWN5OgorCisqIFtDb3B5cmlnaHRdIFVzZSAoQyksIG5vdCAoYyksIGZvciBjb3B5cmlnaHQuCisKKyogW0RlYnVnL2xvZ10gR2V0IHJpZCBvZiAjaWZkZWYgREVCVUcvI2VuZGlmIGNvbnN0cnVjdHMgd2hlbmV2ZXIgeW91CisgIGNhbi4gQ2FsbHMgdG8gcHJpbnRrL3ByX2RlYnVnIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYXJlIHJlcGxhY2VkCisgIGJ5IGNhbGxzIHRvIGRldl9kYmcuIEhlcmUgaXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gY2FsbCBpdCAodGFrZW4KKyAgZnJvbSBsbTc1X2RldGVjdCk6CisgIGRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgbG03NSB1cGRhdGVcbiIpOworICBSZXBsYWNlIG90aGVyIHByaW50ayBjYWxscyB3aXRoIHRoZSBkZXZfaW5mbywgZGV2X2VyciBvciBkZXZfd2FybgorICBmdW5jdGlvbiwgYXMgYXBwcm9wcmlhdGUuCisKKyogW0NvbnN0YW50c10gQ29uc3RhbnRzIGRlZmluZXMgKHJlZ2lzdGVycywgY29udmVyc2lvbnMsIGluaXRpYWwKKyAgdmFsdWVzKSBzaG91bGQgYmUgYWxpZ25lZC4gVGhpcyBncmVhdGx5IGltcHJvdmVzIHJlYWRhYmlsaXR5LgorICBTYW1lIGdvZXMgZm9yIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMuIEFsaWdubWVudHMgYXJlIGFjaGlldmVkIGJ5IHRoZQorICBtZWFucyBvZiB0YWJzLCBub3Qgc3BhY2VzLiBSZW1lbWJlciB0aGF0IHRhYnMgYXJlIHNldCB0byA4IGluIHRoZQorICBMaW51eCBrZXJuZWwgY29kZS4KKworKiBbU3RydWN0dXJlIGRlZmluaXRpb25dIFRoZSBuYW1lIGZpZWxkIHNob3VsZCBiZSBzdGFuZGFyZGl6ZWQuIEFsbAorICBsb3dlcmNhc2UgYW5kIGFzIHNpbXBsZSBhcyB0aGUgZHJpdmVyIG5hbWUgaXRzZWxmIChlLmcuICJsbTc1IikuCisKKyogW0xheW91dF0gQXZvaWQgZXh0cmEgZW1wdHkgbGluZXMgYmV0d2VlbiBjb21tZW50cyBhbmQgd2hhdCB0aGV5CisgIGNvbW1lbnQuIFJlc3BlY3QgdGhlIGNvZGluZyBzdHlsZSAoc2VlIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUpLAorICBpbiBwYXJ0aWN1bGFyIHdoZW4gaXQgY29tZXMgdG8gcGxhY2luZyBjdXJseSBicmFjZXMuCisKKyogW0NvbW1lbnRzXSBNYWtlIHN1cmUgdGhhdCBubyBjb21tZW50IHJlZmVycyB0byBhIGZpbGUgdGhhdCBpc24ndAorICBwYXJ0IG9mIHRoZSBMaW51eCBzb3VyY2UgdHJlZSAodHlwaWNhbGx5IGRvYy9jaGlwcy88Y2hpcCBuYW1lPiksCisgIGFuZCB0aGF0IHJlbWFpbmluZyBjb21tZW50cyBzdGlsbCBtYXRjaCB0aGUgY29kZS4gTWVyZ2luZyBjb21tZW50CisgIGxpbmVzIHdoZW4gcG9zc2libGUgaXMgZW5jb3VyYWdlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sIGIvRG9jdW1lbnRhdGlvbi9pMmMvc21idXMtcHJvdG9jb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNWU1YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCkBAIC0wLDAgKzEsMjE2IEBACitTTUJ1cyBQcm90b2NvbCBTdW1tYXJ5Cis9PT09PT09PT09PT09PT09PT09PT09CitUaGUgZm9sbG93aW5nIGlzIGEgc3VtbWFyeSBvZiB0aGUgU01CdXMgcHJvdG9jb2wuIEl0IGFwcGxpZXMgdG8KK2FsbCByZXZpc2lvbnMgb2YgdGhlIHByb3RvY29sICgxLjAsIDEuMSwgYW5kIDIuMCkuCitDZXJ0YWluIHByb3RvY29sIGZlYXR1cmVzIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5Cit0aGlzIHBhY2thZ2UgYXJlIGJyaWVmbHkgZGVzY3JpYmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KKworU29tZSBhZGFwdGVycyB1bmRlcnN0YW5kIG9ubHkgdGhlIFNNQnVzIChTeXN0ZW0gTWFuYWdlbWVudCBCdXMpIHByb3RvY29sLAord2hpY2ggaXMgYSBzdWJzZXQgZnJvbSB0aGUgSTJDIHByb3RvY29sLiBGb3J0dW5hdGVseSwgbWFueSBkZXZpY2VzIHVzZQorb25seSB0aGUgc2FtZSBzdWJzZXQsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHB1dCB0aGVtIG9uIGFuIFNNQnVzLgorSWYgeW91IHdyaXRlIGEgZHJpdmVyIGZvciBzb21lIEkyQyBkZXZpY2UsIHBsZWFzZSB0cnkgdG8gdXNlIHRoZSBTTUJ1cworY29tbWFuZHMgaWYgYXQgYWxsIHBvc3NpYmxlIChpZiB0aGUgZGV2aWNlIHVzZXMgb25seSB0aGF0IHN1YnNldCBvZiB0aGUKK0kyQyBwcm90b2NvbCkuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHRoZSBkZXZpY2UgZHJpdmVyIG9uIGJvdGgKK1NNQnVzIGFkYXB0ZXJzIGFuZCBJMkMgYWRhcHRlcnMgKHRoZSBTTUJ1cyBjb21tYW5kIHNldCBpcyBhdXRvbWF0aWNhbGx5Cit0cmFuc2xhdGVkIHRvIEkyQyBvbiBJMkMgYWRhcHRlcnMsIGJ1dCBwbGFpbiBJMkMgY29tbWFuZHMgY2FuIG5vdCBiZQoraGFuZGxlZCBhdCBhbGwgb24gbW9zdCBwdXJlIFNNQnVzIGFkYXB0ZXJzKS4KKworQmVsb3cgaXMgYSBsaXN0IG9mIFNNQnVzIGNvbW1hbmRzLgorCitLZXkgdG8gc3ltYm9scworPT09PT09PT09PT09PT0KKworUyAgICAgKDEgYml0KSA6IFN0YXJ0IGJpdAorUCAgICAgKDEgYml0KSA6IFN0b3AgYml0CitSZC9XciAoMSBiaXQpIDogUmVhZC9Xcml0ZSBiaXQuIFJkIGVxdWFscyAxLCBXciBlcXVhbHMgMC4KK0EsIE5BICgxIGJpdCkgOiBBY2NlcHQgYW5kIHJldmVyc2UgYWNjZXB0IGJpdC4gCitBZGRyICAoNyBiaXRzKTogSTJDIDcgYml0IGFkZHJlc3MuIE5vdGUgdGhhdCB0aGlzIGNhbiBiZSBleHBhbmRlZCBhcyB1c3VhbCB0byAKKyAgICAgICAgICAgICAgICBnZXQgYSAxMCBiaXQgSTJDIGFkZHJlc3MuCitDb21tICAoOCBiaXRzKTogQ29tbWFuZCBieXRlLCBhIGRhdGEgYnl0ZSB3aGljaCBvZnRlbiBzZWxlY3RzIGEgcmVnaXN0ZXIgb24KKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlLgorRGF0YSAgKDggYml0cyk6IEEgcGxhaW4gZGF0YSBieXRlLiBTb21ldGltZXMsIEkgd3JpdGUgRGF0YUxvdywgRGF0YUhpZ2gKKyAgICAgICAgICAgICAgICBmb3IgMTYgYml0IGRhdGEuCitDb3VudCAoOCBiaXRzKTogQSBkYXRhIGJ5dGUgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIGEgYmxvY2sgb3BlcmF0aW9uLgorCitbLi5dOiBEYXRhIHNlbnQgYnkgSTJDIGRldmljZSwgYXMgb3Bwb3NlZCB0byBkYXRhIHNlbnQgYnkgdGhlIGhvc3QgYWRhcHRlci4KKworCitTTUJ1cyBXcml0ZSBRdWljaworPT09PT09PT09PT09PT09PT0KKworVGhpcyBzZW5kcyBhIHNpbmdsZSBiaXQgdG8gdGhlIGRldmljZSwgYXQgdGhlIHBsYWNlIG9mIHRoZSBSZC9XciBiaXQuCitUaGVyZSBpcyBubyBlcXVpdmFsZW50IFJlYWQgUXVpY2sgY29tbWFuZC4KKworQSBBZGRyIFJkL1dyIFtBXSBQCisKKworU01CdXMgUmVhZCBCeXRlCis9PT09PT09PT09PT09PT0KKworVGhpcyByZWFkcyBhIHNpbmdsZSBieXRlIGZyb20gYSBkZXZpY2UsIHdpdGhvdXQgc3BlY2lmeWluZyBhIGRldmljZQorcmVnaXN0ZXIuIFNvbWUgZGV2aWNlcyBhcmUgc28gc2ltcGxlIHRoYXQgdGhpcyBpbnRlcmZhY2UgaXMgZW5vdWdoOyBmb3IKK290aGVycywgaXQgaXMgYSBzaG9ydGhhbmQgaWYgeW91IHdhbnQgdG8gcmVhZCB0aGUgc2FtZSByZWdpc3RlciBhcyBpbgordGhlIHByZXZpb3VzIFNNQnVzIGNvbW1hbmQuCisKK1MgQWRkciBSZCBbQV0gW0RhdGFdIE5BIFAKKworCitTTUJ1cyBXcml0ZSBCeXRlCis9PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHJldmVyc2Ugb2YgUmVhZCBCeXRlOiBpdCBzZW5kcyBhIHNpbmdsZSBieXRlIHRvIGEgZGV2aWNlLgorU2VlIFJlYWQgQnl0ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUyBBZGRyIFdyIFtBXSBEYXRhIFtBXSBQCisKKworU01CdXMgUmVhZCBCeXRlIERhdGEKKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIGEgZGV2aWNlLCBmcm9tIGEgZGVzaWduYXRlZCByZWdpc3Rlci4KK1RoZSByZWdpc3RlciBpcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgQ29tbSBieXRlLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIFMgQWRkciBSZCBbQV0gW0RhdGFdIE5BIFAKKworCitTTUJ1cyBSZWFkIFdvcmQgRGF0YQorPT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb21tYW5kIGlzIHZlcnkgbGlrZSBSZWFkIEJ5dGUgRGF0YTsgYWdhaW4sIGRhdGEgaXMgcmVhZCBmcm9tIGEKK2RldmljZSwgZnJvbSBhIGRlc2lnbmF0ZWQgcmVnaXN0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgQ29tbQorYnl0ZS4gQnV0IHRoaXMgdGltZSwgdGhlIGRhdGEgaXMgYSBjb21wbGV0ZSB3b3JkICgxNiBiaXRzKS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBTIEFkZHIgUmQgW0FdIFtEYXRhTG93XSBBIFtEYXRhSGlnaF0gTkEgUAorCisKK1NNQnVzIFdyaXRlIEJ5dGUgRGF0YQorPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgd3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gYSBkZXZpY2UsIHRvIGEgZGVzaWduYXRlZCByZWdpc3Rlci4gVGhlCityZWdpc3RlciBpcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgQ29tbSBieXRlLiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZgordGhlIFJlYWQgQnl0ZSBEYXRhIGNvbW1hbmQuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YSBbQV0gUAorCisKK1NNQnVzIFdyaXRlIFdvcmQgRGF0YQorPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIG9wcG9zaXRlIG9wZXJhdGlvbiBvZiB0aGUgUmVhZCBXb3JkIERhdGEgY29tbWFuZC4gMTYgYml0cworb2YgZGF0YSBpcyByZWFkIGZyb20gYSBkZXZpY2UsIGZyb20gYSBkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgCitzcGVjaWZpZWQgdGhyb3VnaCB0aGUgQ29tbSBieXRlLiAKKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBEYXRhTG93IFtBXSBEYXRhSGlnaCBbQV0gUAorCisKK1NNQnVzIFByb2Nlc3MgQ2FsbAorPT09PT09PT09PT09PT09PT09CisKK1RoaXMgY29tbWFuZCBzZWxlY3RzIGEgZGV2aWNlIHJlZ2lzdGVyICh0aHJvdWdoIHRoZSBDb21tIGJ5dGUpLCBzZW5kcworMTYgYml0cyBvZiBkYXRhIHRvIGl0LCBhbmQgcmVhZHMgMTYgYml0cyBvZiBkYXRhIGluIHJldHVybi4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSBEYXRhTG93IFtBXSBEYXRhSGlnaCBbQV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgQWRkciBSZCBbQV0gW0RhdGFMb3ddIEEgW0RhdGFIaWdoXSBOQSBQCisKKworU01CdXMgQmxvY2sgUmVhZAorPT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgcmVhZHMgYSBibG9jayBvZiB1cCB0byAzMiBieXRlcyBmcm9tIGEgZGV2aWNlLCBmcm9tIGEgCitkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4gVGhlIGFtb3VudAorb2YgZGF0YSBpcyBzcGVjaWZpZWQgYnkgdGhlIGRldmljZSBpbiB0aGUgQ291bnQgYnl0ZS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSAKKyAgICAgICAgICAgUyBBZGRyIFJkIFtBXSBbQ291bnRdIEEgW0RhdGFdIEEgW0RhdGFdIEEgLi4uIEEgW0RhdGFdIE5BIFAKKworCitTTUJ1cyBCbG9jayBXcml0ZQorPT09PT09PT09PT09PT09PT0KKworVGhlIG9wcG9zaXRlIG9mIHRoZSBCbG9jayBSZWFkIGNvbW1hbmQsIHRoaXMgd3JpdGVzIHVwIHRvIDMyIGJ5dGVzIHRvIAorYSBkZXZpY2UsIHRvIGEgZGVzaWduYXRlZCByZWdpc3RlciB0aGF0IGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZQorQ29tbSBieXRlLiBUaGUgYW1vdW50IG9mIGRhdGEgaXMgc3BlY2lmaWVkIGluIHRoZSBDb3VudCBieXRlLgorCitTIEFkZHIgV3IgW0FdIENvbW0gW0FdIENvdW50IFtBXSBEYXRhIFtBXSBEYXRhIFtBXSAuLi4gW0FdIERhdGEgW0FdIFAKKworCitTTUJ1cyBCbG9jayBQcm9jZXNzIENhbGwKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitTTUJ1cyBCbG9jayBQcm9jZXNzIENhbGwgd2FzIGludHJvZHVjZWQgaW4gUmV2aXNpb24gMi4wIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorCitUaGlzIGNvbW1hbmQgc2VsZWN0cyBhIGRldmljZSByZWdpc3RlciAodGhyb3VnaCB0aGUgQ29tbSBieXRlKSwgc2VuZHMKKzEgdG8gMzEgYnl0ZXMgb2YgZGF0YSB0byBpdCwgYW5kIHJlYWRzIDEgdG8gMzEgYnl0ZXMgb2YgZGF0YSBpbiByZXR1cm4uCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gQ291bnQgW0FdIERhdGEgW0FdIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIEFkZHIgUmQgW0FdIFtDb3VudF0gQSBbRGF0YV0gLi4uIEEgUAorCisKK1NNQnVzIEhvc3QgTm90aWZ5Cis9PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgaXMgc2VudCBmcm9tIGEgU01CdXMgZGV2aWNlIGFjdGluZyBhcyBhIG1hc3RlciB0byB0aGUKK1NNQnVzIGhvc3QgYWN0aW5nIGFzIGEgc2xhdmUuCitJdCBpcyB0aGUgc2FtZSBmb3JtIGFzIFdyaXRlIFdvcmQsIHdpdGggdGhlIGNvbW1hbmQgY29kZSByZXBsYWNlZCBieSB0aGUKK2FsZXJ0aW5nIGRldmljZSdzIGFkZHJlc3MuCisKK1tTXSBbSG9zdEFkZHJdIFtXcl0gQSBbRGV2QWRkcl0gQSBbRGF0YUxvd10gQSBbRGF0YUhpZ2hdIEEgW1BdCisKKworUGFja2V0IEVycm9yIENoZWNraW5nIChQRUMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BhY2tldCBFcnJvciBDaGVja2luZyB3YXMgaW50cm9kdWNlZCBpbiBSZXZpc2lvbiAxLjEgb2YgdGhlIHNwZWNpZmljYXRpb24uCisKK1BFQyBhZGRzIGEgQ1JDLTggZXJyb3ItY2hlY2tpbmcgYnl0ZSB0byBhbGwgdHJhbnNmZXJzLgorCisKK0FkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCAoQVJQKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sIHdhcyBpbnRyb2R1Y2VkIGluIFJldmlzaW9uIDIuMCBvZgordGhlIHNwZWNpZmljYXRpb24uIEl0IGlzIGEgaGlnaGVyLWxheWVyIHByb3RvY29sIHdoaWNoIHVzZXMgdGhlCittZXNzYWdlcyBhYm92ZS4KKworQVJQIGFkZHMgZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBkeW5hbWljIGFkZHJlc3MgYXNzaWdubWVudCB0bwordGhlIHByb3RvY29sLiBBbGwgQVJQIGNvbW11bmljYXRpb25zIHVzZSBzbGF2ZSBhZGRyZXNzIDB4NjEgYW5kCityZXF1aXJlIFBFQyBjaGVja3N1bXMuCisKKworSTJDIEJsb2NrIFRyYW5zYWN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PQorVGhlIGZvbGxvd2luZyBJMkMgYmxvY2sgdHJhbnNhY3Rpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitTTUJ1cyBsYXllciBhbmQgYXJlIGRlc2NyaWJlZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCitJMkMgYmxvY2sgdHJhbnNhY3Rpb25zIGRvIG5vdCBsaW1pdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkCitidXQgdGhlIFNNQnVzIGxheWVyIHBsYWNlcyBhIGxpbWl0IG9mIDMyIGJ5dGVzLgorCisKK0kyQyBCbG9jayBSZWFkCis9PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgcmVhZHMgYSBibG9jayBvZiBieXRlcyBmcm9tIGEgZGV2aWNlLCBmcm9tIGEgCitkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIENvbW0gYnl0ZS4KKworUyBBZGRyIFdyIFtBXSBDb21tIFtBXSAKKyAgICAgICAgICAgUyBBZGRyIFJkIFtBXSBbRGF0YV0gQSBbRGF0YV0gQSAuLi4gQSBbRGF0YV0gTkEgUAorCisKK0kyQyBCbG9jayBSZWFkICgyIENvbW0gYnl0ZXMpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgcmVhZHMgYSBibG9jayBvZiBieXRlcyBmcm9tIGEgZGV2aWNlLCBmcm9tIGEgCitkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIHR3byBDb21tIGJ5dGVzLgorCitTIEFkZHIgV3IgW0FdIENvbW0xIFtBXSBDb21tMiBbQV0gCisgICAgICAgICAgIFMgQWRkciBSZCBbQV0gW0RhdGFdIEEgW0RhdGFdIEEgLi4uIEEgW0RhdGFdIE5BIFAKKworCitJMkMgQmxvY2sgV3JpdGUKKz09PT09PT09PT09PT09PQorCitUaGUgb3Bwb3NpdGUgb2YgdGhlIEJsb2NrIFJlYWQgY29tbWFuZCwgdGhpcyB3cml0ZXMgYnl0ZXMgdG8gCithIGRldmljZSwgdG8gYSBkZXNpZ25hdGVkIHJlZ2lzdGVyIHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlCitDb21tIGJ5dGUuIE5vdGUgdGhhdCBjb21tYW5kIGxlbmd0aHMgb2YgMCwgMiwgb3IgbW9yZSBieXRlcyBhcmUKK3N1cHBvcnRlZCBhcyB0aGV5IGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGRhdGEuCisKK1MgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YSBbQV0gRGF0YSBbQV0gLi4uIFtBXSBEYXRhIFtBXSBQCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvc3VtbWFyeSBiL0RvY3VtZW50YXRpb24vaTJjL3N1bW1hcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkZGU4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3N1bW1hcnkKQEAgLTAsMCArMSw3NSBAQAorVGhpcyBpcyBhbiBleHBsYW5hdGlvbiBvZiB3aGF0IGkyYyBpcywgYW5kIHdoYXQgaXMgc3VwcG9ydGVkIGluIHRoaXMgcGFja2FnZS4KKworSTJDIGFuZCBTTUJ1cworPT09PT09PT09PT09PQorCitJMkMgKHByb25vdW5jZTogSSBzcXVhcmVkIEMpIGlzIGEgcHJvdG9jb2wgZGV2ZWxvcGVkIGJ5IFBoaWxpcHMuIEl0IGlzIGEgCitzbG93IHR3by13aXJlIHByb3RvY29sICgxMC00MDAga0h6KSwgYnV0IGl0IHN1ZmZpY2VzIGZvciBtYW55IHR5cGVzIG9mIAorZGV2aWNlcy4KKworU01CdXMgKFN5c3RlbSBNYW5hZ2VtZW50IEJ1cykgaXMgYSBzdWJzZXQgb2YgdGhlIEkyQyBwcm90b2NvbC4gTWFueQorbW9kZXJuIG1haW5ib2FyZHMgaGF2ZSBhIFN5c3RlbSBNYW5hZ2VtZW50IEJ1cy4gVGhlcmUgYXJlIGEgbG90IG9mIAorZGV2aWNlcyB3aGljaCBjYW4gYmUgY29ubmVjdGVkIHRvIGEgU01CdXM7IHRoZSBtb3N0IG5vdGFibGUgYXJlIG1vZGVybiAKK21lbW9yeSBjaGlwcyB3aXRoIEVFUFJPTSBtZW1vcmllcyBhbmQgY2hpcHMgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcuCisKK0JlY2F1c2UgdGhlIFNNQnVzIGlzIGp1c3QgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIGdlbmVyYWxpemVkIEkyQyBidXMsIHdlCitjYW4gc2ltdWxhdGUgdGhlIFNNQnVzIHByb3RvY29sIG9uIHBsYWluIEkyQyBidXNzZXMuIFRoZSByZXZlcnNlIGlzCityZWdyZXRmdWxseSBpbXBvc3NpYmxlLgorCisKK1Rlcm1pbm9sb2d5Cis9PT09PT09PT09PQorCitXaGVuIHdlIHRhbGsgYWJvdXQgSTJDLCB3ZSB1c2UgdGhlIGZvbGxvd2luZyB0ZXJtczoKKyAgQnVzICAgIC0+IEFsZ29yaXRobQorICAgICAgICAgICAgQWRhcHRlcgorICBEZXZpY2UgLT4gRHJpdmVyCisgICAgICAgICAgICBDbGllbnQKKworQW4gQWxnb3JpdGhtIGRyaXZlciBjb250YWlucyBnZW5lcmFsIGNvZGUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYSB3aG9sZSBjbGFzcworb2YgSTJDIGFkYXB0ZXJzLiBFYWNoIHNwZWNpZmljIGFkYXB0ZXIgZHJpdmVyIGRlcGVuZHMgb24gb25lIGFsZ29yaXRobQorZHJpdmVyLgorQSBEcml2ZXIgZHJpdmVyICh5ZXMsIHRoaXMgc291bmRzIHJpZGljdWxvdXMsIHNvcnJ5KSBjb250YWlucyB0aGUgZ2VuZXJhbAorY29kZSB0byBhY2Nlc3Mgc29tZSB0eXBlIG9mIGRldmljZS4gRWFjaCBkZXRlY3RlZCBkZXZpY2UgZ2V0cyBpdHMgb3duCitkYXRhIGluIHRoZSBDbGllbnQgc3RydWN0dXJlLiBVc3VhbGx5LCBEcml2ZXIgYW5kIENsaWVudCBhcmUgbW9yZSBjbG9zZWx5CitpbnRlZ3JhdGVkIHRoYW4gQWxnb3JpdGhtIGFuZCBBZGFwdGVyLgorCitGb3IgYSBnaXZlbiBjb25maWd1cmF0aW9uLCB5b3Ugd2lsbCBuZWVkIGEgZHJpdmVyIGZvciB5b3VyIEkyQyBidXMgKHVzdWFsbHkKK2Egc2VwYXJhdGUgQWRhcHRlciBhbmQgQWxnb3JpdGhtIGRyaXZlciksIGFuZCBkcml2ZXJzIGZvciB5b3VyIEkyQyBkZXZpY2VzCisodXN1YWxseSBvbmUgZHJpdmVyIGZvciBlYWNoIGRldmljZSkuIFRoZXJlIGFyZSBubyBJMkMgZGV2aWNlIGRyaXZlcnMKK2luIHRoaXMgcGFja2FnZS4gU2VlIHRoZSBsbV9zZW5zb3JzIHByb2plY3QgaHR0cDovL3d3dy5sbS1zZW5zb3JzLm51Citmb3IgZGV2aWNlIGRyaXZlcnMuCisKKworSW5jbHVkZWQgQnVzIERyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09CitOb3RlIHRoYXQgb25seSBzdGFibGUgZHJpdmVycyBhcmUgcGF0Y2hlZCBpbnRvIHRoZSBrZXJuZWwgYnkgJ21rcGF0Y2gnLgorCisKK0Jhc2UgbW9kdWxlcworLS0tLS0tLS0tLS0tCisKK2kyYy1jb3JlOiBUaGUgYmFzaWMgSTJDIGNvZGUsIGluY2x1ZGluZyB0aGUgL3Byb2MvYnVzL2kyYyogaW50ZXJmYWNlCitpMmMtZGV2OiAgVGhlIC9kZXYvaTJjLSogaW50ZXJmYWNlCitpMmMtcHJvYzogVGhlIC9wcm9jL3N5cy9kZXYvc2Vuc29ycyBpbnRlcmZhY2UgZm9yIGRldmljZSAoY2xpZW50KSBkcml2ZXJzCisKK0FsZ29yaXRobSBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCitpMmMtYWxnby04eHg6ICAgIEFuIGFsZ29yaXRobSBmb3IgQ1BNJ3MgSTJDIGRldmljZSBpbiBNb3Rvcm9sYSA4eHggcHJvY2Vzc29ycyAoTk9UIEJVSUxUIEJZIERFRkFVTFQpCitpMmMtYWxnby1iaXQ6ICAgIEEgYml0LWJhbmdpbmcgYWxnb3JpdGhtCitpMmMtYWxnby1wY2Y6ICAgIEEgUENGIDg1ODQgc3R5bGUgYWxnb3JpdGhtCitpMmMtYWxnby1pYm1fb2NwOiBBbiBhbGdvcml0aG0gZm9yIHRoZSBJMkMgZGV2aWNlIGluIElCTSA0eHggcHJvY2Vzc29ycyAoTk9UIEJVSUxUIEJZIERFRkFVTFQpCisKK0FkYXB0ZXIgZHJpdmVycworLS0tLS0tLS0tLS0tLS0tCisKK2kyYy1lbGVrdG9yOiAgICAgRWxla3RvciBJU0EgY2FyZCAodXNlcyBpMmMtYWxnby1wY2YpCitpMmMtZWx2OiAgICAgICAgIEVMViBwYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKHVzZXMgaTJjLWFsZ28tYml0KQoraTJjLXBjZi1lcHA6ICAgICBQQ0Y4NTg0IG9uIGEgRVBQIHBhcmFsbGVsIHBvcnQgKHVzZXMgaTJjLWFsZ28tcGNmKSAoTk9UIG1rcGF0Y2hlZCkKK2kyYy1waGlsaXBzLXBhcjogUGhpbGlwcyBzdHlsZSBwYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKHVzZXMgaTJjLWFsZ28tYml0KQoraTJjLWFkYXAtaWJtX29jcDogSUJNIDR4eCBwcm9jZXNzb3IgSTJDIGRldmljZSAodXNlcyBpMmMtYWxnby1pYm1fb2NwKSAoTk9UIEJVSUxUIEJZIERFRkFVTFQpCitpMmMtcHBvcnQ6ICAgICAgIFByaW1pdGl2ZSBwYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKHVzZXMgaTJjLWFsZ28tYml0KQoraTJjLXJweDogICAgICAgICBSUFggYm9hcmQgTW90b3JvbGEgOHh4IEkyQyBkZXZpY2UgKHVzZXMgaTJjLWFsZ28tOHh4KSAoTk9UIEJVSUxUIEJZIERFRkFVTFQpCitpMmMtdmVsbGVtYW46ICAgIFZlbGxlbWFuIEs4MDAwIHBhcmFsbGVsIHBvcnQgYWRhcHRlciAodXNlcyBpMmMtYWxnby1iaXQpCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3N5c2ZzLWludGVyZmFjZSBiL0RvY3VtZW50YXRpb24vaTJjL3N5c2ZzLWludGVyZmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDY0MDA1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvc3lzZnMtaW50ZXJmYWNlCkBAIC0wLDAgKzEsMjc0IEBACitOYW1pbmcgYW5kIGRhdGEgZm9ybWF0IHN0YW5kYXJkcyBmb3Igc3lzZnMgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGlic2Vuc29ycyBsaWJyYXJ5IG9mZmVycyBhbiBpbnRlcmZhY2UgdG8gdGhlIHJhdyBzZW5zb3JzIGRhdGEKK3Rocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gU2VlIGxpYnNlbnNvcnMgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGZvcgorbW9yZSBmdXJ0aGVyIGluZm9ybWF0aW9uLiBBcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnQsIGxpYnNlbnNvcnMKKyhmcm9tIGxtX3NlbnNvcnMgMi44LjMpIGlzIGhlYXZpbHkgY2hpcC1kZXBlbmRhbnQuIEFkZGluZyBvciB1cGRhdGluZworc3VwcG9ydCBmb3IgYW55IGdpdmVuIGNoaXAgcmVxdWlyZXMgbW9kaWZ5aW5nIHRoZSBsaWJyYXJ5J3MgY29kZS4KK1RoaXMgaXMgYmVjYXVzZSBsaWJzZW5zb3JzIHdhcyB3cml0dGVuIGZvciB0aGUgcHJvY2ZzIGludGVyZmFjZQorb2xkZXIga2VybmVsIG1vZHVsZXMgd2VyZSB1c2luZywgd2hpY2ggd2Fzbid0IHN0YW5kYXJkaXplZCBlbm91Z2guCitSZWNlbnQgdmVyc2lvbnMgb2YgbGlic2Vuc29ycyAoZnJvbSBsbV9zZW5zb3JzIDIuOC4yIGFuZCBsYXRlcikgaGF2ZQorc3VwcG9ydCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZSwgdGhvdWdoLgorCitUaGUgbmV3IHN5c2ZzIGludGVyZmFjZSB3YXMgZGVzaWduZWQgdG8gYmUgYXMgY2hpcC1pbmRlcGVuZGFudCBhcworcG9zc2libGUuCisKK05vdGUgdGhhdCBtb3RoZXJib2FyZHMgdmFyeSB3aWRlbHkgaW4gdGhlIGNvbm5lY3Rpb25zIHRvIHNlbnNvciBjaGlwcy4KK1RoZXJlIGlzIG5vIHN0YW5kYXJkIHRoYXQgZW5zdXJlcywgZm9yIGV4YW1wbGUsIHRoYXQgdGhlIHNlY29uZAordGVtcGVyYXR1cmUgc2Vuc29yIGlzIGNvbm5lY3RlZCB0byB0aGUgQ1BVLCBvciB0aGF0IHRoZSBzZWNvbmQgZmFuIGlzIG9uCit0aGUgQ1BVLiBBbHNvLCBzb21lIHZhbHVlcyByZXBvcnRlZCBieSB0aGUgY2hpcHMgbmVlZCBzb21lIGNvbXB1dGF0aW9uCitiZWZvcmUgdGhleSBtYWtlIGZ1bGwgc2Vuc2UuIEZvciBleGFtcGxlLCBtb3N0IGNoaXBzIGNhbiBvbmx5IG1lYXN1cmUKK3ZvbHRhZ2VzIGJldHdlZW4gMCBhbmQgKzRWLiBPdGhlciB2b2x0YWdlcyBhcmUgc2NhbGVkIGJhY2sgaW50byB0aGF0CityYW5nZSB1c2luZyBleHRlcm5hbCByZXNpc3RvcnMuIFNpbmNlIHRoZSB2YWx1ZXMgb2YgdGhlc2UgcmVzaXN0b3JzCitjYW4gY2hhbmdlIGZyb20gbW90aGVyYm9hcmQgdG8gbW90aGVyYm9hcmQsIHRoZSBjb252ZXJzaW9ucyBjYW5ub3QgYmUKK2hhcmQgY29kZWQgaW50byB0aGUgZHJpdmVyIGFuZCBoYXZlIHRvIGJlIGRvbmUgaW4gdXNlciBzcGFjZS4KKworRm9yIHRoaXMgcmVhc29uLCBldmVuIGlmIHdlIGFpbSBhdCBhIGNoaXAtaW5kZXBlbmRhbnQgbGlic2Vuc29ycywgaXQgd2lsbAorc3RpbGwgcmVxdWlyZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSAoZS5nLiAvZXRjL3NlbnNvcnMuY29uZikgZm9yIHByb3BlcgordmFsdWVzIGNvbnZlcnNpb24sIGxhYmVsaW5nIG9mIGlucHV0cyBhbmQgaGlkaW5nIG9mIHVudXNlZCBpbnB1dHMuCisKK0FuIGFsdGVybmF0aXZlIG1ldGhvZCB0aGF0IHNvbWUgcHJvZ3JhbXMgdXNlIGlzIHRvIGFjY2VzcyB0aGUgc3lzZnMKK2ZpbGVzIGRpcmVjdGx5LiBUaGlzIGRvY3VtZW50IGJyaWVmbHkgZGVzY3JpYmVzIHRoZSBzdGFuZGFyZHMgdGhhdCB0aGUKK2RyaXZlcnMgZm9sbG93LCBzbyB0aGF0IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gY2FuIHNjYW4gZm9yIGVudHJpZXMgYW5kCithY2Nlc3MgdGhpcyBkYXRhIGluIGEgc2ltcGxlIGFuZCBjb25zaXN0ZW50IHdheS4gVGhhdCBzYWlkLCBzdWNoIHByb2dyYW1zCit3aWxsIGhhdmUgdG8gaW1wbGVtZW50IGNvbnZlcnNpb24sIGxhYmVsaW5nIGFuZCBoaWRpbmcgb2YgaW5wdXRzLiBGb3IKK3RoaXMgcmVhc29uLCBpdCBpcyBzdGlsbCBub3QgcmVjb21tZW5kZWQgdG8gYnlwYXNzIHRoZSBsaWJyYXJ5LgorCitJZiB5b3UgYXJlIGRldmVsb3BpbmcgYSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gcGxlYXNlIHNlbmQgdXMgZmVlZGJhY2sgb24KK3RoaXMgc3RhbmRhcmQuCisKK05vdGUgdGhhdCB0aGlzIHN0YW5kYXJkIGlzbid0IGNvbXBsZXRlbHkgZXN0YWJsaXNoZWQgeWV0LCBzbyBpdCBpcyBzdWJqZWN0Cit0byBjaGFuZ2VzLCBldmVuIGltcG9ydGFudCBvbmVzLiBPbmUgbW9yZSByZWFzb24gdG8gdXNlIHRoZSBsaWJyYXJ5IGluc3RlYWQKK29mIGFjY2Vzc2luZyBzeXNmcyBmaWxlcyBkaXJlY3RseS4KKworRWFjaCBjaGlwIGdldHMgaXRzIG93biBkaXJlY3RvcnkgaW4gdGhlIHN5c2ZzIC9zeXMvZGV2aWNlcyB0cmVlLiAgVG8KK2ZpbmQgYWxsIHNlbnNvciBjaGlwcywgaXQgaXMgZWFzaWVyIHRvIGZvbGxvdyB0aGUgc3ltbGlua3MgZnJvbQorL3N5cy9pMmMvZGV2aWNlcy8KKworQWxsIHN5c2ZzIHZhbHVlcyBhcmUgZml4ZWQgcG9pbnQgbnVtYmVycy4gIFRvIGdldCB0aGUgdHJ1ZSB2YWx1ZSBvZiBzb21lCitvZiB0aGUgdmFsdWVzLCB5b3Ugc2hvdWxkIGRpdmlkZSBieSB0aGUgc3BlY2lmaWVkIHZhbHVlLgorCitUaGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBwZXIgZmlsZSwgdW5saWtlIHRoZSBvbGRlciAvcHJvYyBzcGVjaWZpY2F0aW9uLgorVGhlIGNvbW1vbiBzY2hlbWUgZm9yIGZpbGVzIG5hbWluZyBpczogPHR5cGU+PG51bWJlcj5fPGl0ZW0+LiBVc3VhbAordHlwZXMgZm9yIHNlbnNvciBjaGlwcyBhcmUgImluIiAodm9sdGFnZSksICJ0ZW1wIiAodGVtcGVyYXR1cmUpIGFuZAorImZhbiIgKGZhbikuIFVzdWFsIGl0ZW1zIGFyZSAiaW5wdXQiIChtZWFzdXJlZCB2YWx1ZSksICJtYXgiIChoaWdoCit0aHJlc2hvbGQsICJtaW4iIChsb3cgdGhyZXNob2xkKS4gTnVtYmVyaW5nIHVzdWFsbHkgc3RhcnRzIGZyb20gMSwKK2V4Y2VwdCBmb3Igdm9sdGFnZXMgd2hpY2ggc3RhcnQgZnJvbSAwIChiZWNhdXNlIG1vc3QgZGF0YSBzaGVldHMgdXNlCit0aGlzKS4gQSBudW1iZXIgaXMgYWx3YXlzIHVzZWQgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGJlIHByZXNlbnQgbW9yZQordGhhbiBvbmNlLCBldmVuIGlmIHRoZXJlIGlzIGEgc2luZ2xlIGVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUgb24gdGhlCitzcGVjaWZpYyBjaGlwLiBPdGhlciBmaWxlcyBkbyBub3QgcmVmZXIgdG8gYSBzcGVjaWZpYyBlbGVtZW50LCBzbwordGhleSBoYXZlIGEgc2ltcGxlIG5hbWUsIGFuZCBubyBudW1iZXIuCisKK0FsYXJtcyBhcmUgZGlyZWN0IGluZGljYXRpb25zIHJlYWQgZnJvbSB0aGUgY2hpcHMuIFRoZSBkcml2ZXJzIGRvIE5PVAorbWFrZSBjb21wYXJpc29ucyBvZiByZWFkaW5ncyB0byB0aHJlc2hvbGRzLiBUaGlzIGFsbG93cyB2aW9sYXRpb25zCitiZXR3ZWVuIHJlYWRpbmdzIHRvIGJlIGNhdWdodCBhbmQgYWxhcm1lZC4gVGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYW4KK2FsYXJtIChmb3IgZXhhbXBsZSwgd2hldGhlciBhIHRocmVzaG9sZCBtdXN0IGJlIG1ldCBvciBtdXN0IGJlIGV4Y2VlZGVkCit0byBjYXVzZSBhbiBhbGFybSkgaXMgY2hpcC1kZXBlbmRlbnQuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqKioqKioqKioqKioKKyogVm9sdGFnZXMgKgorKioqKioqKioqKioqCisKK2luWzAtOF1fbWluCVZvbHRhZ2UgbWluIHZhbHVlLgorCQlVbml0OiBtaWxsaXZvbHQKKwkJUmVhZC9Xcml0ZQorCQkKK2luWzAtOF1fbWF4CVZvbHRhZ2UgbWF4IHZhbHVlLgorCQlVbml0OiBtaWxsaXZvbHQKKwkJUmVhZC9Xcml0ZQorCQkKK2luWzAtOF1faW5wdXQJVm9sdGFnZSBpbnB1dCB2YWx1ZS4KKwkJVW5pdDogbWlsbGl2b2x0CisJCVJlYWQgb25seQorCQlBY3R1YWwgdm9sdGFnZSBkZXBlbmRzIG9uIHRoZSBzY2FsaW5nIHJlc2lzdG9ycyBvbiB0aGUKKwkJbW90aGVyYm9hcmQsIGFzIHJlY29tbWVuZGVkIGluIHRoZSBjaGlwIGRhdGFzaGVldC4KKwkJVGhpcyB2YXJpZXMgYnkgY2hpcCBhbmQgYnkgbW90aGVyYm9hcmQuCisJCUJlY2F1c2Ugb2YgdGhpcyB2YXJpYXRpb24sIHZhbHVlcyBhcmUgZ2VuZXJhbGx5IE5PVCBzY2FsZWQKKwkJYnkgdGhlIGNoaXAgZHJpdmVyLCBhbmQgbXVzdCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKwkJSG93ZXZlciwgc29tZSBkcml2ZXJzIChub3RhYmx5IGxtODcgYW5kIHZpYTY4NmEpCisJCWRvIHNjYWxlLCB3aXRoIHZhcmlvdXMgZGVncmVlcyBvZiBzdWNjZXNzLgorCQlUaGVzZSBkcml2ZXJzIHdpbGwgb3V0cHV0IHRoZSBhY3R1YWwgdm9sdGFnZS4KKworCQlUeXBpY2FsIHVzYWdlOgorCQkJaW4wXyoJQ1BVICMxIHZvbHRhZ2UgKG5vdCBzY2FsZWQpCisJCQlpbjFfKglDUFUgIzIgdm9sdGFnZSAobm90IHNjYWxlZCkKKwkJCWluMl8qCTMuM1Ygbm9taW5hbCAobm90IHNjYWxlZCkKKwkJCWluM18qCTUuMFYgbm9taW5hbCAoc2NhbGVkKQorCQkJaW40XyoJMTIuMFYgbm9taW5hbCAoc2NhbGVkKQorCQkJaW41XyoJLTEyLjBWIG5vbWluYWwgKHNjYWxlZCkKKwkJCWluNl8qCS01LjBWIG5vbWluYWwgKHNjYWxlZCkKKwkJCWluN18qCXZhcmllcworCQkJaW44XyoJdmFyaWVzCisKK2NwdVswLTFdX3ZpZAlDUFUgY29yZSByZWZlcmVuY2Ugdm9sdGFnZS4KKwkJVW5pdDogbWlsbGl2b2x0CisJCVJlYWQgb25seS4KKwkJTm90IGFsd2F5cyBjb3JyZWN0LgorCit2cm0JCVZvbHRhZ2UgUmVndWxhdG9yIE1vZHVsZSB2ZXJzaW9uIG51bWJlci4gCisJCVJlYWQgb25seS4KKwkJVHdvIGRpZ2l0IG51bWJlciwgZmlyc3QgaXMgbWFqb3IgdmVyc2lvbiwgc2Vjb25kIGlzCisJCW1pbm9yIHZlcnNpb24uCisJCUFmZmVjdHMgdGhlIHdheSB0aGUgZHJpdmVyIGNhbGN1bGF0ZXMgdGhlIENQVSBjb3JlIHJlZmVyZW5jZQorCQl2b2x0YWdlIGZyb20gdGhlIHZpZCBwaW5zLgorCisKKyoqKioqKioqCisqIEZhbnMgKgorKioqKioqKioKKworZmFuWzEtM11fbWluCUZhbiBtaW5pbXVtIHZhbHVlCisJCVVuaXQ6IHJldm9sdXRpb24vbWluIChSUE0pCisJCVJlYWQvV3JpdGUuCisKK2ZhblsxLTNdX2lucHV0CUZhbiBpbnB1dCB2YWx1ZS4KKwkJVW5pdDogcmV2b2x1dGlvbi9taW4gKFJQTSkKKwkJUmVhZCBvbmx5LgorCitmYW5bMS0zXV9kaXYJRmFuIGRpdmlzb3IuCisJCUludGVnZXIgdmFsdWUgaW4gcG93ZXJzIG9mIHR3byAoMSwgMiwgNCwgOCwgMTYsIDMyLCA2NCwgMTI4KS4KKwkJU29tZSBjaGlwcyBvbmx5IHN1cHBvcnQgdmFsdWVzIDEsIDIsIDQgYW5kIDguCisJCU5vdGUgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGFuIGludGVybmFsIGNsb2NrIGRpdmlzb3IsIHdoaWNoCisJCWFmZmVjdHMgdGhlIG1lYXN1cmFibGUgc3BlZWQgcmFuZ2UsIG5vdCB0aGUgcmVhZCB2YWx1ZS4KKworKioqKioqKgorKiBQV00gKgorKioqKioqKgorCitwd21bMS0zXQlQdWxzZSB3aWR0aCBtb2R1bGF0aW9uIGZhbiBjb250cm9sLgorCQlJbnRlZ2VyIHZhbHVlIGluIHRoZSByYW5nZSAwIHRvIDI1NQorCQlSZWFkL1dyaXRlCisJCTI1NSBpcyBtYXggb3IgMTAwJS4KKworcHdtWzEtM11fZW5hYmxlCisJCVN3aXRjaCBQV00gb24gYW5kIG9mZi4KKwkJTm90IGFsd2F5cyBwcmVzZW50IGV2ZW4gaWYgZmFuKl9wd20gaXMuCisJCTAgdG8gdHVybiBvZmYKKwkJMSB0byB0dXJuIG9uIGluIG1hbnVhbCBtb2RlCisJCTIgdG8gdHVybiBvbiBpbiBhdXRvbWF0aWMgbW9kZQorCQlSZWFkL1dyaXRlCisKK3B3bVsxLSpdX2F1dG9fY2hhbm5lbHNfdGVtcAorCQlTZWxlY3Qgd2hpY2ggdGVtcGVyYXR1cmUgY2hhbm5lbHMgYWZmZWN0IHRoaXMgUFdNIG91dHB1dCBpbgorCQlhdXRvIG1vZGUuIEJpdGZpZWxkLCAxIGlzIHRlbXAxLCAyIGlzIHRlbXAyLCA0IGlzIHRlbXAzIGV0Yy4uLgorCQlXaGljaCB2YWx1ZXMgYXJlIHBvc3NpYmxlIGRlcGVuZCBvbiB0aGUgY2hpcCB1c2VkLgorCitwd21bMS0qXV9hdXRvX3BvaW50WzEtKl1fcHdtCitwd21bMS0qXV9hdXRvX3BvaW50WzEtKl1fdGVtcAorcHdtWzEtKl1fYXV0b19wb2ludFsxLSpdX3RlbXBfaHlzdAorCQlEZWZpbmUgdGhlIFBXTSB2cyB0ZW1wZXJhdHVyZSBjdXJ2ZS4gTnVtYmVyIG9mIHRyaXAgcG9pbnRzIGlzCisJCWNoaXAtZGVwZW5kZW50LiBVc2UgdGhpcyBmb3IgY2hpcHMgd2hpY2ggYXNzb2NpYXRlIHRyaXAgcG9pbnRzCisJCXRvIFBXTSBvdXRwdXQgY2hhbm5lbHMuCisKK09SCisKK3RlbXBbMS0qXV9hdXRvX3BvaW50WzEtKl1fcHdtCit0ZW1wWzEtKl1fYXV0b19wb2ludFsxLSpdX3RlbXAKK3RlbXBbMS0qXV9hdXRvX3BvaW50WzEtKl1fdGVtcF9oeXN0CisJCURlZmluZSB0aGUgUFdNIHZzIHRlbXBlcmF0dXJlIGN1cnZlLiBOdW1iZXIgb2YgdHJpcCBwb2ludHMgaXMKKwkJY2hpcC1kZXBlbmRlbnQuIFVzZSB0aGlzIGZvciBjaGlwcyB3aGljaCBhc3NvY2lhdGUgdHJpcCBwb2ludHMKKwkJdG8gdGVtcGVyYXR1cmUgY2hhbm5lbHMuCisKKworKioqKioqKioqKioqKioqKgorKiBUZW1wZXJhdHVyZXMgKgorKioqKioqKioqKioqKioqKgorCit0ZW1wWzEtM11fdHlwZQlTZW5zb3IgdHlwZSBzZWxlY3Rpb24uCisJCUludGVnZXJzIDEsIDIsIDMgb3IgdGhlcm1pc3RvciBCZXRhIHZhbHVlICgzNDM1KQorCQlSZWFkL1dyaXRlLgorCQkxOiBQSUkvQ2VsZXJvbiBEaW9kZQorCQkyOiAzOTA0IHRyYW5zaXN0b3IKKwkJMzogdGhlcm1hbCBkaW9kZQorCQlOb3QgYWxsIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYnkgYWxsIGNoaXBzCisKK3RlbXBbMS00XV9tYXgJVGVtcGVyYXR1cmUgbWF4IHZhbHVlLgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCVJlYWQvV3JpdGUgdmFsdWUuCisKK3RlbXBbMS0zXV9taW4JVGVtcGVyYXR1cmUgbWluIHZhbHVlLgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCVJlYWQvV3JpdGUgdmFsdWUuCisKK3RlbXBbMS0zXV9tYXhfaHlzdAorCQlUZW1wZXJhdHVyZSBoeXN0ZXJlc2lzIHZhbHVlIGZvciBtYXggbGltaXQuCisJCVVuaXQ6IG1pbGxpZGVncmVlIENlbGNpdXMKKwkJTXVzdCBiZSByZXBvcnRlZCBhcyBhbiBhYnNvbHV0ZSB0ZW1wZXJhdHVyZSwgTk9UIGEgZGVsdGEKKwkJZnJvbSB0aGUgbWF4IHZhbHVlLgorCQlSZWFkL1dyaXRlIHZhbHVlLgorCit0ZW1wWzEtNF1faW5wdXQgVGVtcGVyYXR1cmUgaW5wdXQgdmFsdWUuCisJCVVuaXQ6IG1pbGxpZGVncmVlIENlbGNpdXMKKwkJUmVhZCBvbmx5IHZhbHVlLgorCit0ZW1wWzEtNF1fY3JpdAlUZW1wZXJhdHVyZSBjcml0aWNhbCB2YWx1ZSwgdHlwaWNhbGx5IGdyZWF0ZXIgdGhhbgorCQljb3JyZXNwb25kaW5nIHRlbXBfbWF4IHZhbHVlcy4KKwkJVW5pdDogbWlsbGlkZWdyZWUgQ2VsY2l1cworCQlSZWFkL1dyaXRlIHZhbHVlLgorCit0ZW1wWzEtMl1fY3JpdF9oeXN0CisJCVRlbXBlcmF0dXJlIGh5c3RlcmVzaXMgdmFsdWUgZm9yIGNyaXRpY2FsIGxpbWl0LgorCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxjaXVzCisJCU11c3QgYmUgcmVwb3J0ZWQgYXMgYW4gYWJzb2x1dGUgdGVtcGVyYXR1cmUsIE5PVCBhIGRlbHRhCisJCWZyb20gdGhlIGNyaXRpY2FsIHZhbHVlLgorCQlSZWFkL1dyaXRlIHZhbHVlLgorCisJCUlmIHRoZXJlIGFyZSBtdWx0aXBsZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCB0ZW1wMV8qIGlzCisJCWdlbmVyYWxseSB0aGUgc2Vuc29yIGluc2lkZSB0aGUgY2hpcCBpdHNlbGYsCisJCXJlcG9ydGVkIGFzICJtb3RoZXJib2FyZCB0ZW1wZXJhdHVyZSIuICB0ZW1wMl8qIHRvCisJCXRlbXA0XyogYXJlIGdlbmVyYWxseSBzZW5zb3JzIGV4dGVybmFsIHRvIHRoZSBjaGlwCisJCWl0c2VsZiwgZm9yIGV4YW1wbGUgdGhlIHRoZXJtYWwgZGlvZGUgaW5zaWRlIHRoZSBDUFUgb3IKKwkJYSB0aGVybWlzdG9yIG5lYXJieS4KKworCisqKioqKioqKioqKioKKyogQ3VycmVudHMgKgorKioqKioqKioqKioqCisKK05vdGUgdGhhdCBubyBrbm93biBjaGlwIHByb3ZpZGVzIGN1cnJlbnQgbWVhc3VyZW1lbnRzIGFzIG9mIHdyaXRpbmcsCitzbyB0aGlzIHBhcnQgaXMgdGhlb3JldGljYWwsIHNvIHRvIHNheS4KKworY3VyclsxLW5dX21heAlDdXJyZW50IG1heCB2YWx1ZQorCQlVbml0OiBtaWxsaWFtcGVyZQorCQlSZWFkL1dyaXRlLgorCitjdXJyWzEtbl1fbWluCUN1cnJlbnQgbWluIHZhbHVlLgorCQlVbml0OiBtaWxsaWFtcGVyZQorCQlSZWFkL1dyaXRlLgorCitjdXJyWzEtbl1faW5wdXQJQ3VycmVudCBpbnB1dCB2YWx1ZQorCQlVbml0OiBtaWxsaWFtcGVyZQorCQlSZWFkIG9ubHkuCisKKworKioqKioqKioqCisqIE90aGVyICoKKyoqKioqKioqKgorCithbGFybXMJCUFsYXJtIGJpdG1hc2suCisJCVJlYWQgb25seS4KKwkJSW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiBvbmUgdG8gZm91ciBieXRlcy4KKwkJQSAnMScgYml0IG1lYW5zIGFuIGFsYXJtLgorCQlDaGlwcyBzaG91bGQgYmUgcHJvZ3JhbW1lZCBmb3IgJ2NvbXBhcmF0b3InIG1vZGUgc28gdGhhdAorCQl0aGUgYWxhcm0gd2lsbCAnY29tZSBiYWNrJyBhZnRlciB5b3UgcmVhZCB0aGUgcmVnaXN0ZXIKKwkJaWYgaXQgaXMgc3RpbGwgdmFsaWQuCisJCUdlbmVyYWxseSBhIGRpcmVjdCByZXByZXNlbnRhdGlvbiBvZiBhIGNoaXAncyBpbnRlcm5hbAorCQlhbGFybSByZWdpc3RlcnM7IHRoZXJlIGlzIG5vIHN0YW5kYXJkIGZvciB0aGUgcG9zaXRpb24KKwkJb2YgaW5kaXZpZHVhbCBiaXRzLgorCQlCaXRzIGFyZSBkZWZpbmVkIGluIGtlcm5lbC9pbmNsdWRlL3NlbnNvcnMuaC4KKworYmVlcF9lbmFibGUJQmVlcC9pbnRlcnJ1cHQgZW5hYmxlCisJCTAgdG8gZGlzYWJsZS4KKwkJMSB0byBlbmFibGUuCisJCVJlYWQvV3JpdGUKKworYmVlcF9tYXNrCUJpdG1hc2sgZm9yIGJlZXAuCisJCVNhbWUgZm9ybWF0IGFzICdhbGFybXMnIHdpdGggdGhlIHNhbWUgYml0IGxvY2F0aW9ucy4KKwkJUmVhZC9Xcml0ZQorCitlZXByb20JCVJhdyBFRVBST00gZGF0YSBpbiBiaW5hcnkgZm9ybS4KKwkJUmVhZCBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvdGVuLWJpdC1hZGRyZXNzZXMgYi9Eb2N1bWVudGF0aW9uL2kyYy90ZW4tYml0LWFkZHJlc3NlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDAwNzRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvdGVuLWJpdC1hZGRyZXNzZXMKQEAgLTAsMCArMSwyMiBAQAorVGhlIEkyQyBwcm90b2NvbCBrbm93cyBhYm91dCB0d28ga2luZHMgb2YgZGV2aWNlIGFkZHJlc3Nlczogbm9ybWFsIDcgYml0IAorYWRkcmVzc2VzLCBhbmQgYW4gZXh0ZW5kZWQgc2V0IG9mIDEwIGJpdCBhZGRyZXNzZXMuIFRoZSBzZXRzIG9mIGFkZHJlc3NlcworZG8gbm90IGludGVyc2VjdDogdGhlIDcgYml0IGFkZHJlc3MgMHgxMCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIDEwIGJpdAorYWRkcmVzcyAweDEwICh0aG91Z2ggYSBzaW5nbGUgZGV2aWNlIGNvdWxkIHJlc3BvbmQgdG8gYm90aCBvZiB0aGVtKS4gWW91CitzZWxlY3QgYSAxMCBiaXQgYWRkcmVzcyBieSBhZGRpbmcgYW4gZXh0cmEgYnl0ZSBhZnRlciB0aGUgYWRkcmVzcworYnl0ZToKKyAgUyBBZGRyNyBSZC9XciAuLi4uICAKK2JlY29tZXMKKyAgUyAxMTExMCBBZGRyMTAgUmQvV3IKK1MgaXMgdGhlIHN0YXJ0IGJpdCwgUmQvV3IgdGhlIHJlYWQvd3JpdGUgYml0LCBhbmQgaWYgeW91IGNvdW50IHRoZSBudW1iZXIKK29mIGJpdHMsIHlvdSB3aWxsIHNlZSB0aGUgdGhlcmUgYXJlIDggYWZ0ZXIgdGhlIFMgYml0IGZvciA3IGJpdCBhZGRyZXNzZXMsCithbmQgMTYgYWZ0ZXIgdGhlIFMgYml0IGZvciAxMCBiaXQgYWRkcmVzc2VzLgorCitXQVJOSU5HISBUaGUgY3VycmVudCAxMCBiaXQgYWRkcmVzcyBzdXBwb3J0IGlzIEVYUEVSSU1FTlRBTC4gVGhlcmUgYXJlIAorc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIGNvZGUgdGhhdCB3aWxsIGNhdXNlIFNFVkVSRSBQUk9CTEVNUyB3aXRoIDEwIGJpdAorYWRkcmVzc2VzLCBldmVuIHRob3VnaCB0aGVyZSBpcyBzb21lIGJhc2ljIGhhbmRsaW5nIGFuZCBob29rcy4gQWxzbywKK2FsbW9zdCBubyBzdXBwb3J0ZWQgYWRhcHRlciBoYW5kbGVzIHRoZSAxMCBiaXQgYWRkcmVzc2VzIGNvcnJlY3RseS4KKworQXMgc29vbiBhcyBhIHJlYWwgMTAgYml0IGFkZHJlc3MgZGV2aWNlIGlzIHNwb3R0ZWQgJ2luIHRoZSB3aWxkJywgd2UKK2NhbiBhbmQgd2lsbCBhZGQgcHJvcGVyIHN1cHBvcnQuIFJpZ2h0IG5vdywgMTAgYml0IGFkZHJlc3MgZGV2aWNlcworYXJlIGRlZmluZWQgYnkgdGhlIEkyQyBwcm90b2NvbCwgYnV0IHdlIGhhdmUgbmV2ZXIgc2VlbiBhIHNpbmdsZSBkZXZpY2UKK3doaWNoIHN1cHBvcnRzIHRoZW0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyNzUxMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwpAQCAtMCwwICsxLDgxNiBAQAorVGhpcyBpcyBhIHNtYWxsIGd1aWRlIGZvciB0aG9zZSB3aG8gd2FudCB0byB3cml0ZSBrZXJuZWwgZHJpdmVycyBmb3IgSTJDCitvciBTTUJ1cyBkZXZpY2VzLgorCitUbyBzZXQgdXAgYSBkcml2ZXIsIHlvdSBuZWVkIHRvIGRvIHNldmVyYWwgdGhpbmdzLiBTb21lIGFyZSBvcHRpb25hbCwgYW5kCitzb21lIHRoaW5ncyBjYW4gYmUgZG9uZSBzbGlnaHRseSBvciBjb21wbGV0ZWx5IGRpZmZlcmVudC4gVXNlIHRoaXMgYXMgYQorZ3VpZGUsIG5vdCBhcyBhIHJ1bGUgYm9vayEKKworCitHZW5lcmFsIHJlbWFya3MKKz09PT09PT09PT09PT09PQorCitUcnkgdG8ga2VlcCB0aGUga2VybmVsIG5hbWVzcGFjZSBhcyBjbGVhbiBhcyBwb3NzaWJsZS4gVGhlIGJlc3Qgd2F5IHRvCitkbyB0aGlzIGlzIHRvIHVzZSBhIHVuaXF1ZSBwcmVmaXggZm9yIGFsbCBnbG9iYWwgc3ltYm9scy4gVGhpcyBpcyAKK2VzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBleHBvcnRlZCBzeW1ib2xzLCBidXQgaXQgaXMgYSBnb29kIGlkZWEgdG8gZG8KK2l0IGZvciBub24tZXhwb3J0ZWQgc3ltYm9scyB0b28uIFdlIHdpbGwgdXNlIHRoZSBwcmVmaXggYGZvb18nIGluIHRoaXMKK3R1dG9yaWFsLCBhbmQgYEZPT18nIGZvciBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCisKK1RoZSBkcml2ZXIgc3RydWN0dXJlCis9PT09PT09PT09PT09PT09PT09PQorCitVc3VhbGx5LCB5b3Ugd2lsbCBpbXBsZW1lbnQgYSBzaW5nbGUgZHJpdmVyIHN0cnVjdHVyZSwgYW5kIGluc3RhbnRpYXRlCithbGwgY2xpZW50cyBmcm9tIGl0LiBSZW1lbWJlciwgYSBkcml2ZXIgc3RydWN0dXJlIGNvbnRhaW5zIGdlbmVyYWwgYWNjZXNzIAorcm91dGluZXMsIGEgY2xpZW50IHN0cnVjdHVyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBsaWtlIHRoZSBhY3R1YWwgSTJDCithZGRyZXNzLgorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZm9vX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gIkZvbyB2ZXJzaW9uIDIuMyBkcml2ZXIiLAorCS5pZAkJPSBJMkNfRFJJVkVSSURfRk9PLCAvKiBmcm9tIGkyYy1pZC5oLCBvcHRpb25hbCAqLworCS5mbGFncwkJPSBJMkNfREZfTk9USUZZLAorCS5hdHRhY2hfYWRhcHRlcgk9ICZmb29fYXR0YWNoX2FkYXB0ZXIsCisJLmRldGFjaF9jbGllbnQJPSAmZm9vX2RldGFjaF9jbGllbnQsCisJLmNvbW1hbmQJPSAmZm9vX2NvbW1hbmQgLyogbWF5IGJlIE5VTEwgKi8KK30KKyAKK1RoZSBuYW1lIGNhbiBiZSBjaG9zZW4gZnJlZWx5LCBhbmQgbWF5IGJlIHVwdG8gNDAgY2hhcmFjdGVycyBsb25nLiBQbGVhc2UKK3VzZSBzb21ldGhpbmcgZGVzY3JpcHRpdmUgaGVyZS4KKworSWYgdXNlZCwgdGhlIGlkIHNob3VsZCBiZSBhIHVuaXF1ZSBJRC4gVGhlIHJhbmdlIDB4ZjAwMCB0byAweGZmZmYgaXMKK3Jlc2VydmVkIGZvciBsb2NhbCB1c2UsIGFuZCB5b3UgY2FuIHVzZSBvbmUgb2YgdGhvc2UgdW50aWwgeW91IHN0YXJ0CitkaXN0cmlidXRpbmcgdGhlIGRyaXZlciwgYXQgd2hpY2ggdGltZSB5b3Ugc2hvdWxkIGNvbnRhY3QgdGhlIGkyYyBhdXRob3JzCit0byBnZXQgeW91ciBvd24gSUQocykuIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHlvdSBkb24ndCBuZWVkIGFuIElECithdCBhbGwgc28geW91IGNhbiBqdXN0IG9taXQgaXQuCisKK0Rvbid0IHdvcnJ5IGFib3V0IHRoZSBmbGFncyBmaWVsZDsganVzdCBwdXQgSTJDX0RGX05PVElGWSBpbnRvIGl0LiBUaGlzCittZWFucyB0aGF0IHlvdXIgZHJpdmVyIHdpbGwgYmUgbm90aWZpZWQgd2hlbiBuZXcgYWRhcHRlcnMgYXJlIGZvdW5kLgorVGhpcyBpcyBhbG1vc3QgYWx3YXlzIHdoYXQgeW91IHdhbnQuCisKK0FsbCBvdGhlciBmaWVsZHMgYXJlIGZvciBjYWxsLWJhY2sgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgZXhwbGFpbmVkIAorYmVsb3cuCisKK1RoZXJlIHVzZSB0byBiZSB0d28gYWRkaXRpb25hbCBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3R1cmUsIGluY191c2UgZXQgZGVjX3VzZSwKK2ZvciBtb2R1bGUgdXNhZ2UgY291bnQsIGJ1dCB0aGVzZSBmaWVsZHMgd2VyZSBvYnNvbGV0ZWQgYW5kIHJlbW92ZWQuCisKKworRXh0cmEgY2xpZW50IGRhdGEKKz09PT09PT09PT09PT09PT09CisKK1RoZSBjbGllbnQgc3RydWN0dXJlIGhhcyBhIHNwZWNpYWwgYGRhdGEnIGZpZWxkIHRoYXQgY2FuIHBvaW50IHRvIGFueQorc3RydWN0dXJlIGF0IGFsbC4gWW91IGNhbiB1c2UgdGhpcyB0byBrZWVwIGNsaWVudC1zcGVjaWZpYyBkYXRhLiBZb3UKK2RvIG5vdCBhbHdheXMgbmVlZCB0aGlzLCBidXQgZXNwZWNpYWxseSBmb3IgYHNlbnNvcnMnIGRyaXZlcnMsIGl0IGNhbgorYmUgdmVyeSB1c2VmdWwuCisKK0FuIGV4YW1wbGUgc3RydWN0dXJlIGlzIGJlbG93LgorCisgIHN0cnVjdCBmb29fZGF0YSB7CisgICAgc3RydWN0IHNlbWFwaG9yZSBsb2NrOyAvKiBGb3IgSVNBIGFjY2VzcyBpbiBgc2Vuc29ycycgZHJpdmVycy4gKi8KKyAgICBpbnQgc3lzY3RsX2lkOyAgICAgICAgIC8qIFRvIGtlZXAgdGhlIC9wcm9jIGRpcmVjdG9yeSBlbnRyeSBmb3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc2Vuc29ycycgZHJpdmVycy4gKi8KKyAgICBlbnVtIGNoaXBzIHR5cGU7ICAgICAgIC8qIFRvIGtlZXAgdGhlIGNoaXBzIHR5cGUgZm9yIGBzZW5zb3JzJyBkcml2ZXJzLiAqLworICAgCisgICAgLyogQmVjYXVzZSB0aGUgaTJjIGJ1cyBpcyBzbG93LCBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gY2FjaGUgdGhlIHJlYWQKKyAgICAgICBpbmZvcm1hdGlvbiBvZiBhIGNoaXAgZm9yIHNvbWUgdGltZSAoZm9yIGV4YW1wbGUsIDEgb3IgMiBzZWNvbmRzKS4KKyAgICAgICBJdCBkZXBlbmRzIG9mIGNvdXJzZSBvbiB0aGUgZGV2aWNlIHdoZXRoZXIgdGhpcyBpcyByZWFsbHkgd29ydGh3aGlsZQorICAgICAgIG9yIGV2ZW4gc2Vuc2libGUuICovCisgICAgc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsgLyogV2hlbiB3ZSBhcmUgcmVhZGluZyBsb3RzIG9mIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgcHJvY2VzcyBzaG91bGQgbm90IHVwZGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvdyBpbmZvcm1hdGlvbiAqLworICAgIGNoYXIgdmFsaWQ7ICAgICAgICAgICAgICAgICAgIC8qICE9IDAgaWYgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkLiAqLworICAgIHVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAgIC8qIEluIGppZmZpZXMgKi8KKyAgICAvKiBBZGQgdGhlIHJlYWQgaW5mb3JtYXRpb24gaGVyZSB0b28gKi8KKyAgfTsKKworCitBY2Nlc3NpbmcgdGhlIGNsaWVudAorPT09PT09PT09PT09PT09PT09PT0KKworTGV0J3Mgc2F5IHdlIGhhdmUgYSB2YWxpZCBjbGllbnQgc3RydWN0dXJlLiBBdCBzb21lIHRpbWUsIHdlIHdpbGwgbmVlZAordG8gZ2F0aGVyIGluZm9ybWF0aW9uIGZyb20gdGhlIGNsaWVudCwgb3Igd3JpdGUgbmV3IGluZm9ybWF0aW9uIHRvIHRoZQorY2xpZW50LiBIb3cgd2Ugd2lsbCBleHBvcnQgdGhpcyBpbmZvcm1hdGlvbiB0byB1c2VyLXNwYWNlIGlzIGxlc3MgCitpbXBvcnRhbnQgYXQgdGhpcyBtb21lbnQgKHBlcmhhcHMgd2UgZG8gbm90IG5lZWQgdG8gZG8gdGhpcyBhdCBhbGwgZm9yCitzb21lIG9ic2N1cmUgY2xpZW50cykuIEJ1dCB3ZSBuZWVkIGdlbmVyaWMgcmVhZGluZyBhbmQgd3JpdGluZyByb3V0aW5lcy4KKworSSBoYXZlIGZvdW5kIGl0IHVzZWZ1bCB0byBkZWZpbmUgZm9vX3JlYWQgYW5kIGZvb193cml0ZSBmdW5jdGlvbiBmb3IgdGhpcy4KK0ZvciBzb21lIGNhc2VzLCBpdCB3aWxsIGJlIGVhc2llciB0byBjYWxsIHRoZSBpMmMgZnVuY3Rpb25zIGRpcmVjdGx5LAorYnV0IG1hbnkgY2hpcHMgaGF2ZSBzb21lIGtpbmQgb2YgcmVnaXN0ZXItdmFsdWUgaWRlYSB0aGF0IGNhbiBlYXNpbHkKK2JlIGVuY2Fwc3VsYXRlZC4gQWxzbywgc29tZSBjaGlwcyBoYXZlIGJvdGggSVNBIGFuZCBJMkMgaW50ZXJmYWNlcywgYW5kCitpdCB1c2VmdWwgdG8gYWJzdHJhY3QgZnJvbSB0aGlzIChvbmx5IGZvciBgc2Vuc29ycycgZHJpdmVycykuCisKK1RoZSBiZWxvdyBmdW5jdGlvbnMgYXJlIHNpbXBsZSBleGFtcGxlcywgYW5kIHNob3VsZCBub3QgYmUgY29waWVkCitsaXRlcmFsbHkuCisKKyAgaW50IGZvb19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKKyAgeworICAgIGlmIChyZWcgPCAweDEwKSAvKiBieXRlLXNpemVkIHJlZ2lzdGVyICovCisgICAgICByZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCxyZWcpOworICAgIGVsc2UgLyogd29yZC1zaXplZCByZWdpc3RlciAqLworICAgICAgcmV0dXJuIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQscmVnKTsKKyAgfQorCisgIGludCBmb29fd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpCisgIHsKKyAgICBpZiAocmVnID09IDB4MTApIC8qIEltcG9zc2libGUgdG8gd3JpdGUgLSBkcml2ZXIgZXJyb3IhICovIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChyZWcgPCAweDEwKSAvKiBieXRlLXNpemVkIHJlZ2lzdGVyICovCisgICAgICByZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQscmVnLHZhbHVlKTsKKyAgICBlbHNlIC8qIHdvcmQtc2l6ZWQgcmVnaXN0ZXIgKi8KKyAgICAgIHJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCxyZWcsdmFsdWUpOworICB9CisKK0ZvciBzZW5zb3JzIGNvZGUsIHlvdSBtYXkgaGF2ZSB0byBjb3BlIHdpdGggSVNBIHJlZ2lzdGVycyB0b28uIFNvbWV0aGluZworbGlrZSB0aGUgYmVsb3cgb2Z0ZW4gd29ya3MuIE5vdGUgdGhlIGxvY2tpbmchIAorCisgIGludCBmb29fcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCisgIHsKKyAgICBpbnQgcmVzOworICAgIGlmIChpMmNfaXNfaXNhX2NsaWVudChjbGllbnQpKSB7CisgICAgICBkb3duKCYoKChzdHJ1Y3QgZm9vX2RhdGEgKikgKGNsaWVudC0+ZGF0YSkpIC0+IGxvY2spKTsKKyAgICAgIG91dGJfcChyZWcsY2xpZW50LT5hZGRyICsgRk9PX0FERFJfUkVHX09GRlNFVCk7CisgICAgICByZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyBGT09fREFUQV9SRUdfT0ZGU0VUKTsKKyAgICAgIHVwKCYoKChzdHJ1Y3QgZm9vX2RhdGEgKikgKGNsaWVudC0+ZGF0YSkpIC0+IGxvY2spKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfSBlbHNlCisgICAgICByZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCxyZWcpOworICB9CisKK1dyaXRpbmcgaXMgZG9uZSB0aGUgc2FtZSB3YXkuCisKKworUHJvYmluZyBhbmQgYXR0YWNoaW5nCis9PT09PT09PT09PT09PT09PT09PT0KKworTW9zdCBpMmMgZGV2aWNlcyBjYW4gYmUgcHJlc2VudCBvbiBzZXZlcmFsIGkyYyBhZGRyZXNzZXM7IGZvciBzb21lIHRoaXMKK2lzIGRldGVybWluZWQgaW4gaGFyZHdhcmUgKGJ5IHNvbGRlcmluZyBzb21lIGNoaXAgcGlucyB0byBWY2Mgb3IgR3JvdW5kKSwKK2ZvciBvdGhlcnMgdGhpcyBjYW4gYmUgY2hhbmdlZCBpbiBzb2Z0d2FyZSAoYnkgd3JpdGluZyB0byBzcGVjaWZpYyBjbGllbnQKK3JlZ2lzdGVycykuIFNvbWUgZGV2aWNlcyBhcmUgdXN1YWxseSBvbiBhIHNwZWNpZmljIGFkZHJlc3MsIGJ1dCBub3QgYWx3YXlzOworYW5kIHNvbWUgYXJlIGV2ZW4gbW9yZSB0cmlja3kuIFNvIHlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gc2NhbiBzZXZlcmFsCitpMmMgYWRkcmVzc2VzIGZvciB5b3VyIGNsaWVudHMsIGFuZCBkbyBzb21lIHNvcnQgb2YgZGV0ZWN0aW9uIHRvIHNlZQord2hldGhlciBpdCBpcyBhY3R1YWxseSBhIGRldmljZSBzdXBwb3J0ZWQgYnkgeW91ciBkcml2ZXIuCisKK1RvIGdpdmUgdGhlIHVzZXIgYSBtYXhpbXVtIG9mIHBvc3NpYmlsaXRpZXMsIHNvbWUgZGVmYXVsdCBtb2R1bGUgcGFyYW1ldGVycworYXJlIGRlZmluZWQgdG8gaGVscCBkZXRlcm1pbmUgd2hhdCBhZGRyZXNzZXMgYXJlIHNjYW5uZWQuIFNldmVyYWwgbWFjcm9zCithcmUgZGVmaW5lZCBpbiBpMmMuaCB0byBoZWxwIHlvdSBzdXBwb3J0IHRoZW0sIGFzIHdlbGwgYXMgYSBnZW5lcmljCitkZXRlY3Rpb24gYWxnb3JpdGhtLgorCitZb3UgZG8gbm90IGhhdmUgdG8gdXNlIHRoaXMgcGFyYW1ldGVyIGludGVyZmFjZTsgYnV0IGRvbid0IHRyeSB0byB1c2UKK2Z1bmN0aW9uIGkyY19wcm9iZSgpIChvciBpMmNfZGV0ZWN0KCkpIGlmIHlvdSBkb24ndC4KKworTk9URTogSWYgeW91IHdhbnQgdG8gd3JpdGUgYSBgc2Vuc29ycycgZHJpdmVyLCB0aGUgaW50ZXJmYWNlIGlzIHNsaWdodGx5CisgICAgICBkaWZmZXJlbnQhIFNlZSBiZWxvdy4KKworCisKK1Byb2JpbmcgY2xhc3NlcyAoaTJjKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiBhcyBsaXN0cyBvZiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcnMuIExpc3RzIGFyZQordGVybWluYXRlZCBieSBJMkNfQ0xJRU5UX0VORC4KK1RoZSBmb2xsb3dpbmcgbGlzdHMgYXJlIHVzZWQgaW50ZXJuYWxseToKKworICBub3JtYWxfaTJjOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuIAorICAgICBBIGxpc3Qgb2YgSTJDIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCisgICBub3JtYWxfaTJjX3JhbmdlOiBmaWxsZWQgaW4gYnkgdGhlIG1vZHVsZSB3cml0ZXIuCisgICAgIEEgbGlzdCBvZiBwYWlycyBvZiBJMkMgYWRkcmVzc2VzLCBlYWNoIHBhaXIgYmVpbmcgYW4gaW5jbHVzaXZlIHJhbmdlIG9mCisgICAgIGFkZHJlc3NlcyB3aGljaCBzaG91bGQgbm9ybWFsbHkgYmUgZXhhbWluZWQuCisgICBwcm9iZTogaW5zbW9kIHBhcmFtZXRlci4gCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoLTEgZm9yIGFueSBJMkMgYnVzKSwgCisgICAgIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3MuIFRoZXNlIGFkZHJlc3NlcyBhcmUgYWxzbyBwcm9iZWQsIGFzIGlmIHRoZXkgCisgICAgIHdlcmUgaW4gdGhlICdub3JtYWwnIGxpc3QuCisgICBwcm9iZV9yYW5nZTogaW5zbW9kIHBhcmFtZXRlci4gCisgICAgIEEgbGlzdCBvZiB0cmlwbGVzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyICgtMSBmb3IgYW55IEkyQyBidXMpLCAKKyAgICAgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJlIGFkZHJlc3Nlcy4gIFRoZXNlIGZvcm0gYW4gaW5jbHVzaXZlIHJhbmdlIG9mIAorICAgICBhZGRyZXNzZXMgdGhhdCBhcmUgYWxzbyBwcm9iZWQsIGFzIGlmIHRoZXkgd2VyZSBpbiB0aGUgJ25vcm1hbCcgbGlzdC4KKyAgIGlnbm9yZTogaW5zbW9kIHBhcmFtZXRlci4KKyAgICAgQSBsaXN0IG9mIHBhaXJzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyICgtMSBmb3IgYW55IEkyQyBidXMpLCAKKyAgICAgdGhlIHNlY29uZCBpcyB0aGUgSTJDIGFkZHJlc3MuIFRoZXNlIGFkZHJlc3NlcyBhcmUgbmV2ZXIgcHJvYmVkLiAKKyAgICAgVGhpcyBwYXJhbWV0ZXIgb3ZlcnJ1bGVzICdub3JtYWwnIGFuZCAncHJvYmUnLCBidXQgbm90IHRoZSAnZm9yY2UnIGxpc3RzLgorICAgaWdub3JlX3JhbmdlOiBpbnNtb2QgcGFyYW1ldGVyLiAKKyAgICAgQSBsaXN0IG9mIHRyaXBsZXMuIFRoZSBmaXJzdCB2YWx1ZSBpcyBhIGJ1cyBudW1iZXIgKC0xIGZvciBhbnkgSTJDIGJ1cyksIAorICAgICB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmUgYWRkcmVzc2VzLiBUaGVzZSBmb3JtIGFuIGluY2x1c2l2ZSByYW5nZSBvZiAKKyAgICAgSTJDIGFkZHJlc3NlcyB0aGF0IGFyZSBuZXZlciBwcm9iZWQuCisgICAgIFRoaXMgcGFyYW1ldGVyIG92ZXJydWxlcyAnbm9ybWFsJyBhbmQgJ3Byb2JlJywgYnV0IG5vdCB0aGUgJ2ZvcmNlJyBsaXN0cy4KKyAgIGZvcmNlOiBpbnNtb2QgcGFyYW1ldGVyLiAKKyAgICAgQSBsaXN0IG9mIHBhaXJzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyICgtMSBmb3IgYW55IEkyQyBidXMpLAorICAgICB0aGUgc2Vjb25kIGlzIHRoZSBJMkMgYWRkcmVzcy4gQSBkZXZpY2UgaXMgYmxpbmRseSBhc3N1bWVkIHRvIGJlIG9uCisgICAgIHRoZSBnaXZlbiBhZGRyZXNzLCBubyBwcm9iaW5nIGlzIGRvbmUuIAorCitGb3J0dW5hdGVseSwgYXMgYSBtb2R1bGUgd3JpdGVyLCB5b3UganVzdCBoYXZlIHRvIGRlZmluZSB0aGUgYG5vcm1hbCcgCithbmQvb3IgYG5vcm1hbF9yYW5nZScgcGFyYW1ldGVycy4gVGhlIGNvbXBsZXRlIGRlY2xhcmF0aW9uIGNvdWxkIGxvb2sKK2xpa2UgdGhpczoKKworICAvKiBTY2FuIDB4MjAgdG8gMHgyZiwgMHgzNywgYW5kIDB4NDAgdG8gMHg0ZiAqLworICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM3LEkyQ19DTElFTlRfRU5EIH07IAorICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY19yYW5nZVtdID0geyAweDIwLCAweDJmLCAweDQwLCAweDRmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQgfTsKKworICAvKiBNYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLworICBJMkNfQ0xJRU5UX0lOU01PRDsKKworTm90ZSB0aGF0IHlvdSAqaGF2ZSogdG8gY2FsbCB0aGUgdHdvIGRlZmluZWQgdmFyaWFibGVzIGBub3JtYWxfaTJjJyBhbmQKK2Bub3JtYWxfaTJjX3JhbmdlJywgd2l0aG91dCBhbnkgcHJlZml4IQorCisKK1Byb2JpbmcgY2xhc3NlcyAoc2Vuc29ycykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdyaXRlIGEgYHNlbnNvcnMnIGRyaXZlciwgeW91IHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBpbnRlcmZhY2UuCitBcyB3ZWxsIGFzIEkyQyBhZGRyZXNzZXMsIHdlIGhhdmUgdG8gY29wZSB3aXRoIElTQSBhZGRyZXNzZXMuIEFsc28sIHdlCit1c2UgYSBlbnVtIG9mIGNoaXAgdHlwZXMuIERvbid0IGZvcmdldCB0byBpbmNsdWRlIGBzZW5zb3JzLmgnLgorCitUaGUgZm9sbG93aW5nIGxpc3RzIGFyZSB1c2VkIGludGVybmFsbHkuIFRoZXkgYXJlIGFsbCBsaXN0cyBvZiBpbnRlZ2Vycy4KKworICAgbm9ybWFsX2kyYzogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLiBUZXJtaW5hdGVkIGJ5IFNFTlNPUlNfSTJDX0VORC4KKyAgICAgQSBsaXN0IG9mIEkyQyBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLgorICAgbm9ybWFsX2kyY19yYW5nZTogZmlsbGVkIGluIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLiBUZXJtaW5hdGVkIGJ5IAorICAgICBTRU5TT1JTX0kyQ19FTkQKKyAgICAgQSBsaXN0IG9mIHBhaXJzIG9mIEkyQyBhZGRyZXNzZXMsIGVhY2ggcGFpciBiZWluZyBhbiBpbmNsdXNpdmUgcmFuZ2Ugb2YKKyAgICAgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3JtYWxseSBiZSBleGFtaW5lZC4KKyAgIG5vcm1hbF9pc2E6IGZpbGxlZCBpbiBieSB0aGUgbW9kdWxlIHdyaXRlci4gVGVybWluYXRlZCBieSBTRU5TT1JTX0lTQV9FTkQuCisgICAgIEEgbGlzdCBvZiBJU0EgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3JtYWxseSBiZSBleGFtaW5lZC4KKyAgIG5vcm1hbF9pc2FfcmFuZ2U6IGZpbGxlZCBpbiBieSB0aGUgbW9kdWxlIHdyaXRlci4gVGVybWluYXRlZCBieSAKKyAgICAgU0VOU09SU19JU0FfRU5ECisgICAgIEEgbGlzdCBvZiB0cmlwbGVzLiBUaGUgZmlyc3QgdHdvIGVsZW1lbnRzIGFyZSBJU0EgYWRkcmVzc2VzLCBiZWluZyBhbgorICAgICByYW5nZSBvZiBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIGV4YW1pbmVkLiBUaGUgdGhpcmQgaXMgdGhlCisgICAgIG1vZHVsbyBwYXJhbWV0ZXI6IG9ubHkgYWRkcmVzc2VzIHdoaWNoIGFyZSAwIG1vZHVsZSB0aGlzIHZhbHVlIHJlbGF0aXZlCisgICAgIHRvIHRoZSBmaXJzdCBhZGRyZXNzIG9mIHRoZSByYW5nZSBhcmUgYWN0dWFsbHkgY29uc2lkZXJlZC4KKyAgIHByb2JlOiBpbnNtb2QgcGFyYW1ldGVyLiBJbml0aWFsaXplIHRoaXMgbGlzdCB3aXRoIFNFTlNPUlNfSTJDX0VORCB2YWx1ZXMuCisgICAgIEEgbGlzdCBvZiBwYWlycy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBpcyB0aGUgYWRkcmVzcy4gVGhlc2UKKyAgICAgYWRkcmVzc2VzIGFyZSBhbHNvIHByb2JlZCwgYXMgaWYgdGhleSB3ZXJlIGluIHRoZSAnbm9ybWFsJyBsaXN0LgorICAgcHJvYmVfcmFuZ2U6IGluc21vZCBwYXJhbWV0ZXIuIEluaXRpYWxpemUgdGhpcyBsaXN0IHdpdGggU0VOU09SU19JMkNfRU5EIAorICAgICB2YWx1ZXMuCisgICAgIEEgbGlzdCBvZiB0cmlwbGVzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyIChTRU5TT1JTX0lTQV9CVVMgZm9yCisgICAgIHRoZSBJU0EgYnVzLCAtMSBmb3IgYW55IEkyQyBidXMpLCB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmUgYWRkcmVzc2VzLiAKKyAgICAgVGhlc2UgZm9ybSBhbiBpbmNsdXNpdmUgcmFuZ2Ugb2YgYWRkcmVzc2VzIHRoYXQgYXJlIGFsc28gcHJvYmVkLCBhcworICAgICBpZiB0aGV5IHdlcmUgaW4gdGhlICdub3JtYWwnIGxpc3QuCisgICBpZ25vcmU6IGluc21vZCBwYXJhbWV0ZXIuIEluaXRpYWxpemUgdGhpcyBsaXN0IHdpdGggU0VOU09SU19JMkNfRU5EIHZhbHVlcy4KKyAgICAgQSBsaXN0IG9mIHBhaXJzLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyIChTRU5TT1JTX0lTQV9CVVMgZm9yCisgICAgIHRoZSBJU0EgYnVzLCAtMSBmb3IgYW55IEkyQyBidXMpLCB0aGUgc2Vjb25kIGlzIHRoZSBJMkMgYWRkcmVzcy4gVGhlc2UKKyAgICAgYWRkcmVzc2VzIGFyZSBuZXZlciBwcm9iZWQuIFRoaXMgcGFyYW1ldGVyIG92ZXJydWxlcyAnbm9ybWFsJyBhbmQgCisgICAgICdwcm9iZScsIGJ1dCBub3QgdGhlICdmb3JjZScgbGlzdHMuCisgICBpZ25vcmVfcmFuZ2U6IGluc21vZCBwYXJhbWV0ZXIuIEluaXRpYWxpemUgdGhpcyBsaXN0IHdpdGggU0VOU09SU19JMkNfRU5EIAorICAgICAgdmFsdWVzLgorICAgICBBIGxpc3Qgb2YgdHJpcGxlcy4gVGhlIGZpcnN0IHZhbHVlIGlzIGEgYnVzIG51bWJlciAoU0VOU09SU19JU0FfQlVTIGZvcgorICAgICB0aGUgSVNBIGJ1cywgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBhbmQgdGhpcmQgYXJlIGFkZHJlc3Nlcy4gCisgICAgIFRoZXNlIGZvcm0gYW4gaW5jbHVzaXZlIHJhbmdlIG9mIEkyQyBhZGRyZXNzZXMgdGhhdCBhcmUgbmV2ZXIgcHJvYmVkLgorICAgICBUaGlzIHBhcmFtZXRlciBvdmVycnVsZXMgJ25vcm1hbCcgYW5kICdwcm9iZScsIGJ1dCBub3QgdGhlICdmb3JjZScgbGlzdHMuCisKK0Fsc28gdXNlZCBpcyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gc2Vuc29yc19mb3JjZV9kYXRhIHN0cnVjdHVyZXM6CisgICBmb3JjZV9kYXRhOiBpbnNtb2QgcGFyYW1ldGVycy4gQSBsaXN0LCBlbmRpbmcgd2l0aCBhbiBlbGVtZW50IG9mIHdoaWNoCisgICAgIHRoZSBmb3JjZSBmaWVsZCBpcyBOVUxMLgorICAgICBFYWNoIGVsZW1lbnQgY29udGFpbnMgdGhlIHR5cGUgb2YgY2hpcCBhbmQgYSBsaXN0IG9mIHBhaXJzLgorICAgICBUaGUgZmlyc3QgdmFsdWUgaXMgYSBidXMgbnVtYmVyIChTRU5TT1JTX0lTQV9CVVMgZm9yIHRoZSBJU0EgYnVzLCAKKyAgICAgLTEgZm9yIGFueSBJMkMgYnVzKSwgdGhlIHNlY29uZCBpcyB0aGUgYWRkcmVzcy4gCisgICAgIFRoZXNlIGFyZSBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQgdG8gaW5zbW9kIHZhcmlhYmxlcyBvZiB0aGUgZm9ybQorICAgICBmb3JjZV9mb28uCisKK1NvIHdlIGhhdmUgYSBnZW5lcmljIGluc21vZCB2YXJpYWJsZWQgYGZvcmNlJywgYW5kIGNoaXAtc3BlY2lmaWMgdmFyaWFibGVzCitgZm9yY2VfQ0hJUE5BTUUnLgorCitGb3J0dW5hdGVseSwgYXMgYSBtb2R1bGUgd3JpdGVyLCB5b3UganVzdCBoYXZlIHRvIGRlZmluZSB0aGUgYG5vcm1hbCcgCithbmQvb3IgYG5vcm1hbF9yYW5nZScgcGFyYW1ldGVycywgYW5kIGRlZmluZSB3aGF0IGNoaXAgbmFtZXMgYXJlIHVzZWQuIAorVGhlIGNvbXBsZXRlIGRlY2xhcmF0aW9uIGNvdWxkIGxvb2sgbGlrZSB0aGlzOgorICAvKiBTY2FuIGkyYyBhZGRyZXNzZXMgMHgyMCB0byAweDJmLCAweDM3LCBhbmQgMHg0MCB0byAweDRmCisgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7MHgzNyxTRU5TT1JTX0kyQ19FTkR9OworICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY19yYW5nZVtdID0gezB4MjAsMHgyZiwweDQwLDB4NGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VOU09SU19JMkNfRU5EfTsKKyAgLyogU2NhbiBJU0EgYWRkcmVzcyAweDI5MCAqLworICBzdGF0aWMgdW5zaWduZWQgaW50IG5vcm1hbF9pc2FbXSA9IHsweDAyOTAsU0VOU09SU19JU0FfRU5EfTsKKyAgc3RhdGljIHVuc2lnbmVkIGludCBub3JtYWxfaXNhX3JhbmdlW10gPSB7U0VOU09SU19JU0FfRU5EfTsKKworICAvKiBEZWZpbmUgY2hpcHMgZm9vIGFuZCBiYXIsIGFzIHdlbGwgYXMgYWxsIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCB0aGluZ3MgKi8KKyAgU0VOU09SU19JTlNNT0RfMihmb28sYmFyKTsKKworSWYgeW91IGhhdmUgb25lIGNoaXAsIHlvdSB1c2UgbWFjcm8gU0VOU09SU19JTlNNT0RfMShjaGlwKSwgaWYgeW91IGhhdmUgMgoreW91IHVzZSBtYWNybyBTRU5TT1JTX0lOU01PRF8yKGNoaXAxLGNoaXAyKSwgZXRjLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8KK2JvdGhlciB3aXRoIGNoaXAgdHlwZXMsIHlvdSBjYW4gdXNlIFNFTlNPUlNfSU5TTU9EXzAuCisKK0EgZW51bSBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYXMgZm9sbG93czoKKyAgZW51bSBjaGlwcyB7IGFueV9jaGlwLCBjaGlwMSwgY2hpcDIsIC4uLiB9CisKKworQXR0YWNoaW5nIHRvIGFuIGFkYXB0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW5ldmVyIGEgbmV3IGFkYXB0ZXIgaXMgaW5zZXJ0ZWQsIG9yIGZvciBhbGwgYWRhcHRlcnMgaWYgdGhlIGRyaXZlciBpcworYmVpbmcgcmVnaXN0ZXJlZCwgdGhlIGNhbGxiYWNrIGF0dGFjaF9hZGFwdGVyKCkgaXMgY2FsbGVkLiBOb3cgaXMgdGhlCit0aW1lIHRvIGRldGVybWluZSB3aGF0IGRldmljZXMgYXJlIHByZXNlbnQgb24gdGhlIGFkYXB0ZXIsIGFuZCB0byByZWdpc3RlcgorYSBjbGllbnQgZm9yIGVhY2ggb2YgdGhlbS4KKworVGhlIGF0dGFjaF9hZGFwdGVyIGNhbGxiYWNrIGlzIHJlYWxseSBlYXN5OiB3ZSBqdXN0IGNhbGwgdGhlIGdlbmVyaWMKK2RldGVjdGlvbiBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiB3aWxsIHNjYW4gdGhlIGJ1cyBmb3IgdXMsIHVzaW5nIHRoZQoraW5mb3JtYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbGlzdHMgZXhwbGFpbmVkIGFib3ZlLiBJZiBhIGRldmljZSBpcworZGV0ZWN0ZWQgYXQgYSBzcGVjaWZpYyBhZGRyZXNzLCBhbm90aGVyIGNhbGxiYWNrIGlzIGNhbGxlZC4KKworICBpbnQgZm9vX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKKyAgeworICAgIHJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwmYWRkcl9kYXRhLCZmb29fZGV0ZWN0X2NsaWVudCk7CisgIH0KKworRm9yIGBzZW5zb3JzJyBkcml2ZXJzLCB1c2UgdGhlIGkyY19kZXRlY3QgZnVuY3Rpb24gaW5zdGVhZDoKKyAgCisgIGludCBmb29fYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorICB7IAorICAgIHJldHVybiBpMmNfZGV0ZWN0KGFkYXB0ZXIsJmFkZHJfZGF0YSwmZm9vX2RldGVjdF9jbGllbnQpOworICB9CisKK1JlbWVtYmVyLCBzdHJ1Y3R1cmUgYGFkZHJfZGF0YScgaXMgZGVmaW5lZCBieSB0aGUgbWFjcm9zIGV4cGxhaW5lZCBhYm92ZSwKK3NvIHlvdSBkbyBub3QgaGF2ZSB0byBkZWZpbmUgaXQgeW91cnNlbGYuCisKK1RoZSBpMmNfcHJvYmUgb3IgaTJjX2RldGVjdCBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGZvb19kZXRlY3RfY2xpZW50CitmdW5jdGlvbiBvbmx5IGZvciB0aG9zZSBpMmMgYWRkcmVzc2VzIHRoYXQgYWN0dWFsbHkgaGF2ZSBhIGRldmljZSBvbgordGhlbSAodW5sZXNzIGEgYGZvcmNlJyBwYXJhbWV0ZXIgd2FzIHVzZWQpLiBJbiBhZGRpdGlvbiwgYWRkcmVzc2VzIHRoYXQKK2FyZSBhbHJlYWR5IGluIHVzZSAoYnkgc29tZSBvdGhlciByZWdpc3RlcmVkIGNsaWVudCkgYXJlIHNraXBwZWQuCisKKworVGhlIGRldGVjdCBjbGllbnQgZnVuY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZXRlY3QgY2xpZW50IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgb3IgaTJjX2RldGVjdC4KK1RoZSBga2luZCcgcGFyYW1ldGVyIGNvbnRhaW5zIDAgaWYgdGhpcyBjYWxsIGlzIGR1ZSB0byBhIGBmb3JjZScKK3BhcmFtZXRlciwgYW5kIC0xIG90aGVyd2lzZSAoZm9yIGkyY19kZXRlY3QsIGl0IGNvbnRhaW5zIDAgaWYKK3RoaXMgY2FsbCBpcyBkdWUgdG8gdGhlIGdlbmVyaWMgYGZvcmNlJyBwYXJhbWV0ZXIsIGFuZCB0aGUgY2hpcCB0eXBlCitudW1iZXIgaWYgaXQgaXMgZHVlIHRvIGEgc3BlY2lmaWMgYGZvcmNlJyBwYXJhbWV0ZXIpLgorCitCZWxvdywgc29tZSB0aGluZ3MgYXJlIG9ubHkgbmVlZGVkIGlmIHRoaXMgaXMgYSBgc2Vuc29ycycgZHJpdmVyLiBUaG9zZQorcGFydHMgYXJlIGJldHdlZW4gLyogU0VOU09SUyBPTkxZIFNUQVJUICovIGFuZCAvKiBTRU5TT1JTIE9OTFkgRU5EICovCittYXJrZXJzLiAKKworVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSByZXR1cm4gYW4gZXJyb3IgKGFueSB2YWx1ZSAhPSAwKSBpZiB0aGVyZSBpcworc29tZSByZWFzb24gd2h5IG5vIG1vcmUgZGV0ZWN0aW9uIHNob3VsZCBiZSBkb25lIGFueW1vcmUuIElmIHRoZQorZGV0ZWN0aW9uIGp1c3QgZmFpbHMgZm9yIHRoaXMgYWRkcmVzcywgcmV0dXJuIDAuCisKK0ZvciBub3csIHlvdSBjYW4gaWdub3JlIHRoZSBgZmxhZ3MnIHBhcmFtZXRlci4gSXQgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2UuCisKKyAgaW50IGZvb19kZXRlY3RfY2xpZW50KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGludCBraW5kKQorICB7CisgICAgaW50IGVyciA9IDA7CisgICAgaW50IGk7CisgICAgc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7CisgICAgc3RydWN0IGZvb19kYXRhICpkYXRhOworICAgIGNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIiI7IC8qIEZvciBub24tYHNlbnNvcnMnIGRyaXZlcnMsIHB1dCB0aGUgcmVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgaGVyZSEgKi8KKyAgIAorICAgIC8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQuCisgICAgICAgUGxlYXNlIHN1YnN0aXR1dGUgdGhlIHRoaW5ncyB5b3UgbmVlZCBoZXJlISAKKyAgICAgICBGb3IgYHNlbnNvcnMnIGRyaXZlcnMsIGFkZCBgISBpc19pc2EgJiYnIHRvIHRoZSBpZiBzdGF0ZW1lbnQgKi8KKyAgICBpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKSkKKyAgICAgICBnb3RvIEVSUk9SMDsKKworICAgIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLworICAgIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9ICIiOworICAgIGludCBpc19pc2EgPSBpMmNfaXNfaXNhX2FkYXB0ZXIoYWRhcHRlcik7CisKKyAgICBpZiAoaXNfaXNhKSB7CisKKyAgICAgIC8qIElmIHRoaXMgY2xpZW50IGNhbid0IGJlIG9uIHRoZSBJU0EgYnVzIGF0IGFsbCwgd2UgY2FuIHN0b3Agbm93CisgICAgICAgICAoY2FsbCBgZ290byBFUlJPUjAnKS4gQnV0IGZvciBraWNrcywgd2Ugd2lsbCBhc3N1bWUgaXQgaXMgYWxsCisgICAgICAgICByaWdodC4gKi8KKworICAgICAgLyogRGlzY2FyZCBpbW1lZGlhdGVseSBpZiB0aGlzIElTQSByYW5nZSBpcyBhbHJlYWR5IHVzZWQgKi8KKyAgICAgIGlmIChjaGVja19yZWdpb24oYWRkcmVzcyxGT09fRVhURU5UKSkKKyAgICAgICAgZ290byBFUlJPUjA7CisKKyAgICAgIC8qIFByb2JlIHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgb24gdGhpcyBhZGRyZXNzLgorICAgICAgICAgU29tZSBleGFtcGxlIGNvZGUgaXMgYmVsb3csIGJ1dCB5b3Ugd2lsbCBoYXZlIHRvIGFkYXB0IHRoaXMKKyAgICAgICAgIGZvciB5b3VyIG93biBkcml2ZXIgKi8KKworICAgICAgaWYgKGtpbmQgPCAwKSAvKiBPbmx5IGlmIG5vIGZvcmNlIHBhcmFtZXRlciB3YXMgdXNlZCAqLyB7CisgICAgICAgIC8qIFdlIG1heSBuZWVkIGxvbmcgdGltZW91dHMgYXQgbGVhc3QgZm9yIHNvbWUgY2hpcHMuICovCisgICAgICAgICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KKyAgICAgICAgaSA9IGluYl9wKGFkZHJlc3MgKyAxKTsKKyAgICAgICAgaWYgKGluYl9wKGFkZHJlc3MgKyAyKSAhPSBpKQorICAgICAgICAgIGdvdG8gRVJST1IwOworICAgICAgICBpZiAoaW5iX3AoYWRkcmVzcyArIDMpICE9IGkpCisgICAgICAgICAgZ290byBFUlJPUjA7CisgICAgICAgIGlmIChpbmJfcChhZGRyZXNzICsgNykgIT0gaSkKKyAgICAgICAgICBnb3RvIEVSUk9SMDsKKyAgICAgICAgI3VuZGVmIFJFQUxMWV9TTE9XX0lPCisKKyAgICAgICAgLyogTGV0J3MganVzdCBob3BlIG5vdGhpbmcgYnJlYWtzIGhlcmUgKi8KKyAgICAgICAgaSA9IGluYl9wKGFkZHJlc3MgKyA1KSAmIDB4N2Y7CisgICAgICAgIG91dGJfcCh+aSAmIDB4N2YsYWRkcmVzcys1KTsKKyAgICAgICAgaWYgKChpbmJfcChhZGRyZXNzICsgNSkgJiAweDdmKSAhPSAofmkgJiAweDdmKSkgeworICAgICAgICAgIG91dGJfcChpLGFkZHJlc3MrNSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgRU5EICovCisKKyAgICAvKiBPSy4gRm9yIG5vdywgd2UgcHJlc3VtZSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50LiBXZSBub3cgY3JlYXRlIHRoZQorICAgICAgIGNsaWVudCBzdHJ1Y3R1cmUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBmaWxsIGl0IGNvbXBsZXRlbHkgeWV0LgorICAgICAgIEJ1dCBpdCBhbGxvd3MgdXMgdG8gYWNjZXNzIHNldmVyYWwgaTJjIGZ1bmN0aW9ucyBzYWZlbHkgKi8KKyAgICAKKyAgICAvKiBOb3RlIHRoYXQgd2UgcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBmb29fZGF0YSB0b28uIElmIHlvdSBkb24ndAorICAgICAgIG5lZWQgaXQsIHJlbW92ZSBpdC4gV2UgZG8gaXQgaGVyZSB0byBoZWxwIHRvIGxlc3NlbiBtZW1vcnkKKyAgICAgICBmcmFnbWVudGF0aW9uLiAqLworICAgIGlmICghIChuZXdfY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZm9vX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKSkpIHsKKyAgICAgIGVyciA9IC1FTk9NRU07CisgICAgICBnb3RvIEVSUk9SMDsKKyAgICB9CisKKyAgICAvKiBUaGlzIGlzIHRyaWNreSwgYnV0IGl0IHdpbGwgc2V0IHRoZSBkYXRhIHRvIHRoZSByaWdodCB2YWx1ZS4gKi8KKyAgICBjbGllbnQtPmRhdGEgPSBuZXdfY2xpZW50ICsgMTsKKyAgICBkYXRhID0gKHN0cnVjdCBmb29fZGF0YSAqKSAoY2xpZW50LT5kYXRhKTsKKworICAgIG5ld19jbGllbnQtPmFkZHIgPSBhZGRyZXNzOworICAgIG5ld19jbGllbnQtPmRhdGEgPSBkYXRhOworICAgIG5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworICAgIG5ld19jbGllbnQtPmRyaXZlciA9ICZmb29fZHJpdmVyOworICAgIG5ld19jbGllbnQtPmZsYWdzID0gMDsKKworICAgIC8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uIElmIG5vIGBmb3JjZScgcGFyYW1ldGVyIGlzIHVzZWQuICovCisKKyAgICAvKiBGaXJzdCwgdGhlIGdlbmVyaWMgZGV0ZWN0aW9uIChpZiBhbnkpLCB0aGF0IGlzIHNraXBwZWQgaWYgYW55IGZvcmNlCisgICAgICAgcGFyYW1ldGVyIHdhcyB1c2VkLiAqLworICAgIGlmIChraW5kIDwgMCkgeworICAgICAgLyogVGhlIGJlbG93IGlzIG9mIGNvdXJzZSBib2d1cyAqLworICAgICAgaWYgKGZvb19yZWFkKG5ld19jbGllbnQsRk9PX1JFR19HRU5FUklDKSAhPSBGT09fR0VORVJJQ19WQUxVRSkKKyAgICAgICAgIGdvdG8gRVJST1IxOworICAgIH0KKworICAgIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLworCisgICAgLyogTmV4dCwgc3BlY2lmaWMgZGV0ZWN0aW9uLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBgc2Vuc29ycycKKyAgICAgICBkZXZpY2VzLiAqLworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUuIE5vdCBuZWVkZWQgaWYgYSBgZm9yY2VfQ0hJUFRZUEUnIHBhcmFtZXRlcgorICAgICAgIHdhcyB1c2VkLiAqLworICAgIGlmIChraW5kIDw9IDApIHsKKyAgICAgIGkgPSBmb29fcmVhZChuZXdfY2xpZW50LEZPT19SRUdfQ0hJUFRZUEUpOworICAgICAgaWYgKGkgPT0gRk9PX1RZUEVfMSkgCisgICAgICAgIGtpbmQgPSBjaGlwMTsgLyogQXMgZGVmaW5lZCBpbiB0aGUgZW51bSAqLworICAgICAgZWxzZSBpZiAoaSA9PSBGT09fVFlQRV8yKQorICAgICAgICBraW5kID0gY2hpcDI7CisgICAgICBlbHNlIHsKKyAgICAgICAgcHJpbnRrKCJmb286IElnbm9yaW5nICdmb3JjZScgcGFyYW1ldGVyIGZvciB1bmtub3duIGNoaXAgYXQgIgorICAgICAgICAgICAgICAgImFkYXB0ZXIgJWQsIGFkZHJlc3MgMHglMDJ4XG4iLGkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLGFkZHJlc3MpOworICAgICAgICBnb3RvIEVSUk9SMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBOb3cgc2V0IHRoZSB0eXBlIGFuZCBjaGlwIG5hbWVzICovCisgICAgaWYgKGtpbmQgPT0gY2hpcDEpIHsKKyAgICAgIHR5cGVfbmFtZSA9ICJjaGlwMSI7IC8qIEZvciAvcHJvYyBlbnRyeSAqLworICAgICAgY2xpZW50X25hbWUgPSAiQ0hJUCAxIjsKKyAgICB9IGVsc2UgaWYgKGtpbmQgPT0gY2hpcDIpIHsKKyAgICAgIHR5cGVfbmFtZSA9ICJjaGlwMiI7IC8qIEZvciAvcHJvYyBlbnRyeSAqLworICAgICAgY2xpZW50X25hbWUgPSAiQ0hJUCAyIjsKKyAgICB9CisgICAKKyAgICAvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCisgICAgaWYgKGlzX2lzYSkKKyAgICAgIHJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsRk9PX0VYVEVOVCx0eXBlX25hbWUpOworCisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMuICovCisgICAgc3RyY3B5KG5ld19jbGllbnQtPm5hbWUsY2xpZW50X25hbWUpOworCisgICAgLyogU0VOU09SUyBPTkxZIEJFR0lOICovCisgICAgZGF0YS0+dHlwZSA9IGtpbmQ7CisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgZGF0YS0+dmFsaWQgPSAwOyAvKiBPbmx5IGlmIHlvdSB1c2UgdGhpcyBmaWVsZCAqLworICAgIGluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgLyogT25seSBpZiB5b3UgdXNlIHRoaXMgZmllbGQgKi8KKworICAgIC8qIEFueSBvdGhlciBpbml0aWFsaXphdGlvbnMgaW4gZGF0YSBtdXN0IGJlIGRvbmUgaGVyZSB0b28uICovCisKKyAgICAvKiBUZWxsIHRoZSBpMmMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCisgICAgaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCisgICAgICBnb3RvIEVSUk9SMzsKKworICAgIC8qIFNFTlNPUlMgT05MWSBCRUdJTiAqLworICAgIC8qIFJlZ2lzdGVyIGEgbmV3IGRpcmVjdG9yeSBlbnRyeSB3aXRoIG1vZHVsZSBzZW5zb3JzLiBTZWUgYmVsb3cgZm9yCisgICAgICAgdGhlIGB0ZW1wbGF0ZScgc3RydWN0dXJlLiAqLworICAgIGlmICgoaSA9IGkyY19yZWdpc3Rlcl9lbnRyeShuZXdfY2xpZW50LCB0eXBlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb29fZGlyX3RhYmxlX3RlbXBsYXRlLFRISVNfTU9EVUxFKSkgPCAwKSB7CisgICAgICBlcnIgPSBpOworICAgICAgZ290byBFUlJPUjQ7CisgICAgfQorICAgIGRhdGEtPnN5c2N0bF9pZCA9IGk7CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgRU5EICovCisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIGNhbiB3cml0ZSBkZWZhdWx0IHZhbHVlcyB0byB0aGUgY2xpZW50IHJlZ2lzdGVycywgaWYKKyAgICAgICBuZWVkZWQuICovCisgICAgZm9vX2luaXRfY2xpZW50KG5ld19jbGllbnQpOworICAgIHJldHVybiAwOworCisgICAgLyogT0ssIHRoaXMgaXMgbm90IGV4YWN0bHkgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSwgdXN1YWxseS4gQnV0IGl0IGlzCisgICAgICAgdmVyeSBjb2RlLWVmZmljaWVudCBpbiB0aGlzIGNhc2UuICovCisKKyAgICBFUlJPUjQ6CisgICAgICBpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKKyAgICBFUlJPUjM6CisgICAgRVJST1IyOgorICAgIC8qIFNFTlNPUlMgT05MWSBTVEFSVCAqLworICAgICAgaWYgKGlzX2lzYSkKKyAgICAgICAgcmVsZWFzZV9yZWdpb24oYWRkcmVzcyxGT09fRVhURU5UKTsKKyAgICAvKiBTRU5TT1JTIE9OTFkgRU5EICovCisgICAgRVJST1IxOgorICAgICAga2ZyZWUobmV3X2NsaWVudCk7CisgICAgRVJST1IwOgorICAgICAgcmV0dXJuIGVycjsKKyAgfQorCisKK1JlbW92aW5nIHRoZSBjbGllbnQKKz09PT09PT09PT09PT09PT09PT0KKworVGhlIGRldGFjaF9jbGllbnQgY2FsbCBiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgY2xpZW50IHNob3VsZCBiZQorcmVtb3ZlZC4gSXQgbWF5IGFjdHVhbGx5IGZhaWwsIGJ1dCBvbmx5IHdoZW4gcGFuaWNraW5nLiBUaGlzIGNvZGUgaXMKK211Y2ggc2ltcGxlciB0aGFuIHRoZSBhdHRhY2htZW50IGNvZGUsIGZvcnR1bmF0ZWx5IQorCisgIGludCBmb29fZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorICB7CisgICAgaW50IGVycixpOworCisgICAgLyogU0VOU09SUyBPTkxZIFNUQVJUICovCisgICAgLyogRGVyZWdpc3RlciB3aXRoIHRoZSBgaTJjLXByb2MnIG1vZHVsZS4gKi8KKyAgICBpMmNfZGVyZWdpc3Rlcl9lbnRyeSgoKHN0cnVjdCBsbTc4X2RhdGEgKikoY2xpZW50LT5kYXRhKSktPnN5c2N0bF9pZCk7CisgICAgLyogU0VOU09SUyBPTkxZIEVORCAqLworCisgICAgLyogVHJ5IHRvIGRldGFjaCB0aGUgY2xpZW50IGZyb20gaTJjIHNwYWNlICovCisgICAgaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkgeworICAgICAgcHJpbnRrKCJmb28ubzogQ2xpZW50IGRlcmVnaXN0cmF0aW9uIGZhaWxlZCwgY2xpZW50IG5vdCBkZXRhY2hlZC5cbiIpOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBTRU5TT1JTIE9OTFkgU1RBUlQgKi8KKyAgICBpZiBpMmNfaXNfaXNhX2NsaWVudChjbGllbnQpCisgICAgICByZWxlYXNlX3JlZ2lvbihjbGllbnQtPmFkZHIsTE03OF9FWFRFTlQpOworICAgIC8qIFNFTlNPUlMgT05MWSBFTkQgKi8KKworICAgIGtmcmVlKGNsaWVudCk7IC8qIEZyZWVzIGNsaWVudCBkYXRhIHRvbywgaWYgYWxsb2NhdGVkIGF0IHRoZSBzYW1lIHRpbWUgKi8KKyAgICByZXR1cm4gMDsKKyAgfQorCisKK0luaXRpYWxpemluZyB0aGUgbW9kdWxlIG9yIGtlcm5lbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gdGhlIGtlcm5lbCBpcyBib290ZWQsIG9yIHdoZW4geW91ciBmb28gZHJpdmVyIG1vZHVsZSBpcyBpbnNlcnRlZCwgCit5b3UgaGF2ZSB0byBkbyBzb21lIGluaXRpYWxpemluZy4gRm9ydHVuYXRlbHksIGp1c3QgYXR0YWNoaW5nIChyZWdpc3RlcmluZykKK3RoZSBkcml2ZXIgbW9kdWxlIGlzIHVzdWFsbHkgZW5vdWdoLgorCisgIC8qIEtlZXAgdHJhY2sgb2YgaG93IGZhciB3ZSBnb3QgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIElmIHNldmVyYWwKKyAgICAgdGhpbmdzIGhhdmUgdG8gaW5pdGlhbGl6ZWQsIGFuZCB3ZSBmYWlsIGhhbGZ3YXksIG9ubHkgdGhvc2UgdGhpbmdzCisgICAgIGhhdmUgdG8gYmUgY2xlYW5lZCB1cCEgKi8KKyAgc3RhdGljIGludCBfX2luaXRkYXRhIGZvb19pbml0aWFsaXplZCA9IDA7CisKKyAgc3RhdGljIGludCBfX2luaXQgZm9vX2luaXQodm9pZCkKKyAgeworICAgIGludCByZXM7CisgICAgcHJpbnRrKCJmb28gdmVyc2lvbiAlcyAoJXMpXG4iLEZPT19WRVJTSU9OLEZPT19EQVRFKTsKKyAgICAKKyAgICBpZiAoKHJlcyA9IGkyY19hZGRfZHJpdmVyKCZmb29fZHJpdmVyKSkpIHsKKyAgICAgIHByaW50aygiZm9vOiBEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZCwgbW9kdWxlIG5vdCBpbnNlcnRlZC5cbiIpOworICAgICAgZm9vX2NsZWFudXAoKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGZvb19pbml0aWFsaXplZCArKzsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHZvaWQgZm9vX2NsZWFudXAodm9pZCkKKyAgeworICAgIGlmIChmb29faW5pdGlhbGl6ZWQgPT0gMSkgeworICAgICAgaWYgKChyZXMgPSBpMmNfZGVsX2RyaXZlcigmZm9vX2RyaXZlcikpKSB7CisgICAgICAgIHByaW50aygiZm9vOiBEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZCwgbW9kdWxlIG5vdCByZW1vdmVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGZvb19pbml0aWFsaXplZCAtLTsKKyAgICB9CisgIH0KKworICAvKiBTdWJzdGl0dXRlIHlvdXIgb3duIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MgKi8KKyAgTU9EVUxFX0FVVEhPUigiRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiIKKyAgTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEJhcmYgSW5jLiBGb28gSTJDIGRldmljZXMiKTsKKworICBtb2R1bGVfaW5pdChmb29faW5pdCk7CisgIG1vZHVsZV9leGl0KGZvb19jbGVhbnVwKTsKKworTm90ZSB0aGF0IHNvbWUgZnVuY3Rpb25zIGFyZSBtYXJrZWQgYnkgYF9faW5pdCcsIGFuZCBzb21lIGRhdGEgc3RydWN0dXJlcworYnkgYF9faW5pdF9kYXRhJy4gIEhvc2UgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGNhbiBiZSByZW1vdmVkIGFmdGVyCitrZXJuZWwgYm9vdGluZyAob3IgbW9kdWxlIGxvYWRpbmcpIGlzIGNvbXBsZXRlZC4KKworQ29tbWFuZCBmdW5jdGlvbgorPT09PT09PT09PT09PT09PQorCitBIGdlbmVyaWMgaW9jdGwtbGlrZSBmdW5jdGlvbiBjYWxsIGJhY2sgaXMgc3VwcG9ydGVkLiBZb3Ugd2lsbCBzZWxkb20KK25lZWQgdGhpcy4gWW91IG1heSBldmVuIHNldCBpdCB0byBOVUxMLgorCisgIC8qIE5vIGNvbW1hbmRzIGRlZmluZWQgKi8KKyAgaW50IGZvb19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKKyAgeworICAgIHJldHVybiAwOworICB9CisKKworU2VuZGluZyBhbmQgcmVjZWl2aW5nCis9PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IHdhbnQgdG8gY29tbXVuaWNhdGUgd2l0aCB5b3VyIGRldmljZSwgdGhlcmUgYXJlIHNldmVyYWwgZnVuY3Rpb25zCit0byBkbyB0aGlzLiBZb3UgY2FuIGZpbmQgYWxsIG9mIHRoZW0gaW4gaTJjLmguCisKK0lmIHlvdSBjYW4gY2hvb3NlIGJldHdlZW4gcGxhaW4gaTJjIGNvbW11bmljYXRpb24gYW5kIFNNQnVzIGxldmVsCitjb21tdW5pY2F0aW9uLCBwbGVhc2UgdXNlIHRoZSBsYXN0LiBBbGwgYWRhcHRlcnMgdW5kZXJzdGFuZCBTTUJ1cyBsZXZlbAorY29tbWFuZHMsIGJ1dCBvbmx5IHNvbWUgb2YgdGhlbSB1bmRlcnN0YW5kIHBsYWluIGkyYyEKKworCitQbGFpbiBpMmMgY29tbXVuaWNhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBleHRlcm4gaW50IGkyY19tYXN0ZXJfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqLGNvbnN0IGNoYXIqICxpbnQpOworICBleHRlcm4gaW50IGkyY19tYXN0ZXJfcmVjdihzdHJ1Y3QgaTJjX2NsaWVudCAqLGNoYXIqICxpbnQpOworCitUaGVzZSByb3V0aW5lcyByZWFkIGFuZCB3cml0ZSBzb21lIGJ5dGVzIGZyb20vdG8gYSBjbGllbnQuIFRoZSBjbGllbnQKK2NvbnRhaW5zIHRoZSBpMmMgYWRkcmVzcywgc28geW91IGRvIG5vdCBoYXZlIHRvIGluY2x1ZGUgaXQuIFRoZSBzZWNvbmQKK3BhcmFtZXRlciBjb250YWlucyB0aGUgYnl0ZXMgdGhlIHJlYWQvd3JpdGUsIHRoZSB0aGlyZCB0aGUgbGVuZ3RoIG9mIHRoZQorYnVmZmVyLiBSZXR1cm5lZCBpcyB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZWFkL3dyaXR0ZW4uCisgIAorICBleHRlcm4gaW50IGkyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0pOworCitUaGlzIHNlbmRzIGEgc2VyaWVzIG9mIG1lc3NhZ2VzLiBFYWNoIG1lc3NhZ2UgY2FuIGJlIGEgcmVhZCBvciB3cml0ZSwKK2FuZCB0aGV5IGNhbiBiZSBtaXhlZCBpbiBhbnkgd2F5LiBUaGUgdHJhbnNhY3Rpb25zIGFyZSBjb21iaW5lZDogbm8KK3N0b3AgYml0IGlzIHNlbnQgYmV0d2VlbiB0cmFuc2FjdGlvbi4gVGhlIGkyY19tc2cgc3RydWN0dXJlIGNvbnRhaW5zCitmb3IgZWFjaCBtZXNzYWdlIHRoZSBjbGllbnQgYWRkcmVzcywgdGhlIG51bWJlciBvZiBieXRlcyBvZiB0aGUgbWVzc2FnZQorYW5kIHRoZSBtZXNzYWdlIGRhdGEgaXRzZWxmLgorCitZb3UgY2FuIHJlYWQgdGhlIGZpbGUgYGkyYy1wcm90b2NvbCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCithY3R1YWwgaTJjIHByb3RvY29sLgorCisKK1NNQnVzIGNvbW11bmljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBleHRlcm4gczMyIGkyY19zbWJ1c194ZmVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwdGVyLCB1MTYgYWRkciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEpOworCisgIFRoaXMgaXMgdGhlIGdlbmVyaWMgU01CdXMgZnVuY3Rpb24uIEFsbCBmdW5jdGlvbnMgYmVsb3cgYXJlIGltcGxlbWVudGVkCisgIGluIHRlcm1zIG9mIGl0LiBOZXZlciB1c2UgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEKKworCisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3F1aWNrKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IHZhbHVlKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IGNvbW1hbmQpOworICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCBjb21tYW5kKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTE2IHZhbHVlKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcyk7CisKK1RoZXNlIG9uZXMgd2VyZSByZW1vdmVkIGluIExpbnV4IDIuNi4xMCBiZWNhdXNlIHRoZXkgaGFkIG5vIHVzZXJzLCBidXQgY291bGQKK2JlIGFkZGVkIGJhY2sgbGF0ZXIgaWYgbmVlZGVkOgorCisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggKnZhbHVlcyk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZXMpOworICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqdmFsdWVzKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfcHJvY2Vzc19jYWxsKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTE2IHZhbHVlKTsKKyAgZXh0ZXJuIHMzMiBpMmNfc21idXNfYmxvY2tfcHJvY2Vzc19jYWxsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1OCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqdmFsdWVzKQorCitBbGwgdGhlc2UgdHJhbnNhY3Rpb25zIHJldHVybiAtMSBvbiBmYWlsdXJlLiBUaGUgJ3dyaXRlJyB0cmFuc2FjdGlvbnMgCityZXR1cm4gMCBvbiBzdWNjZXNzOyB0aGUgJ3JlYWQnIHRyYW5zYWN0aW9ucyByZXR1cm4gdGhlIHJlYWQgdmFsdWUsIGV4Y2VwdCAKK2ZvciByZWFkX2Jsb2NrLCB3aGljaCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHJlYWQuIFRoZSBibG9jayBidWZmZXJzIAorbmVlZCBub3QgYmUgbG9uZ2VyIHRoYW4gMzIgYnl0ZXMuCisKK1lvdSBjYW4gcmVhZCB0aGUgZmlsZSBgc21idXMtcHJvdG9jb2wnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorYWN0dWFsIFNNQnVzIHByb3RvY29sLgorCisKK0dlbmVyYWwgcHVycG9zZSByb3V0aW5lcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JlbG93IGFsbCBnZW5lcmFsIHB1cnBvc2Ugcm91dGluZXMgYXJlIGxpc3RlZCwgdGhhdCB3ZXJlIG5vdCBtZW50aW9uZWQKK2JlZm9yZS4KKworICAvKiBUaGlzIGNhbGwgcmV0dXJucyBhIHVuaXF1ZSBsb3cgaWRlbnRpZmllciBmb3IgZWFjaCByZWdpc3RlcmVkIGFkYXB0ZXIsCisgICAqIG9yIC0xIGlmIHRoZSBhZGFwdGVyIHdhcyBub3QgcmVnaXN0ZXJlZC4KKyAgICovCisgIGV4dGVybiBpbnQgaTJjX2FkYXB0ZXJfaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKTsKKworCitUaGUgc2Vuc29ycyBzeXNjdGwvcHJvYyBpbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gb25seSBhcHBsaWVzIGlmIHlvdSB3cml0ZSBgc2Vuc29ycycgZHJpdmVycy4KKworRWFjaCBzZW5zb3JzIGRyaXZlciBjcmVhdGVzIGEgZGlyZWN0b3J5IGluIC9wcm9jL3N5cy9kZXYvc2Vuc29ycyBmb3IgZWFjaAorcmVnaXN0ZXJlZCBjbGllbnQuIFRoZSBkaXJlY3RvcnkgaXMgY2FsbGVkIHNvbWV0aGluZyBsaWtlIGZvby1pMmMtNC02NS4KK1RoZSBzZW5zb3JzIG1vZHVsZSBoZWxwcyB5b3UgdG8gZG8gdGhpcyBhcyBlYXNpbHkgYXMgcG9zc2libGUuCisKK1RoZSB0ZW1wbGF0ZQorLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdG8gZGVmaW5lIGEgY3RsX3RhYmxlIHRlbXBsYXRlLiBUaGlzIHRlbXBsYXRlIHdpbGwgYXV0b21hdGljYWxseQorYmUgY29waWVkIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHN0cnVjdHVyZSBhbmQgZmlsbGVkIGluIHdoZXJlIG5lY2Vzc2FyeSB3aGVuCit5b3UgY2FsbCBzZW5zb3JzX3JlZ2lzdGVyX2VudHJ5LgorCitGaXJzdCwgSSB3aWxsIGdpdmUgYW4gZXhhbXBsZSBkZWZpbml0aW9uLgorICBzdGF0aWMgY3RsX3RhYmxlIGZvb19kaXJfdGFibGVfdGVtcGxhdGVbXSA9IHsKKyAgICB7IEZPT19TWVNDVExfRlVOQzEsICJmdW5jMSIsIE5VTEwsIDAsIDA2NDQsIE5VTEwsICZpMmNfcHJvY19yZWFsLAorICAgICAgJmkyY19zeXNjdGxfcmVhbCxOVUxMLCZmb29fZnVuYyB9LAorICAgIHsgRk9PX1NZU0NUTF9GVU5DMiwgImZ1bmMyIiwgTlVMTCwgMCwgMDY0NCwgTlVMTCwgJmkyY19wcm9jX3JlYWwsCisgICAgICAmaTJjX3N5c2N0bF9yZWFsLE5VTEwsJmZvb19mdW5jIH0sCisgICAgeyBGT09fU1lTQ1RMX0RBVEEsICJkYXRhIiwgTlVMTCwgMCwgMDY0NCwgTlVMTCwgJmkyY19wcm9jX3JlYWwsCisgICAgICAmaTJjX3N5c2N0bF9yZWFsLE5VTEwsJmZvb19kYXRhIH0sCisgICAgeyAwIH0KKyAgfTsKKworSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRocmVlIGVudHJpZXMgYXJlIGRlZmluZWQuIFRoZXkgY2FuIGVpdGhlciBiZQorYWNjZXNzZWQgdGhyb3VnaCB0aGUgL3Byb2MgaW50ZXJmYWNlLCBpbiB0aGUgL3Byb2Mvc3lzL2Rldi9zZW5zb3JzLyoKK2RpcmVjdG9yaWVzLCBhcyBmaWxlcyBuYW1lZCBmdW5jMSwgZnVuYzIgYW5kIGRhdGEsIG9yIGFsdGVybmF0aXZlbHkgCit0aHJvdWdoIHRoZSBzeXNjdGwgaW50ZXJmYWNlLCBpbiB0aGUgYXBwcm9wcmlhdGUgdGFibGUsIHdpdGggaWRlbnRpZmllcnMKK0ZPT19TWVNDVExfRlVOQzEsIEZPT19TWVNDVExfRlVOQzIgYW5kIEZPT19TWVNDVExfREFUQS4KKworVGhlIHRoaXJkLCBzaXh0aCBhbmQgbmludGggcGFyYW1ldGVycyBzaG91bGQgYWx3YXlzIGJlIE5VTEwsIGFuZCB0aGUKK2ZvdXJ0aCBzaG91bGQgYWx3YXlzIGJlIDAuIFRoZSBmaWZ0aCBpcyB0aGUgbW9kZSBvZiB0aGUgL3Byb2MgZmlsZTsKKzA2NDQgaXMgc2FmZSwgYXMgdGhlIGZpbGUgd2lsbCBiZSBvd25lZCBieSByb290OnJvb3QuIAorCitUaGUgc2V2ZW50aCBhbmQgZWlnaHRoIHBhcmFtZXRlcnMgc2hvdWxkIGJlICZpMmNfcHJvY19yZWFsIGFuZAorJmkyY19zeXNjdGxfcmVhbCBpZiB5b3Ugd2FudCB0byBleHBvcnQgbGlzdHMgb2YgcmVhbHMgKHNjYWxlZAoraW50ZWdlcnMpLiBZb3UgY2FuIGFsc28gdXNlIHlvdXIgb3duIGZ1bmN0aW9uIGZvciB0aGVtLCBhcyB1c3VhbC4KK0ZpbmFsbHksIHRoZSBsYXN0IHBhcmFtZXRlciBpcyB0aGUgY2FsbC1iYWNrIHRvIGdhdGhlciB0aGUgZGF0YQorKHNlZSBiZWxvdykgaWYgeW91IHVzZSB0aGUgKl9wcm9jX3JlYWwgZnVuY3Rpb25zLiAKKworCitHYXRoZXJpbmcgdGhlIGRhdGEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY2FsbCBiYWNrIGZ1bmN0aW9ucyAoZm9vX2Z1bmMgYW5kIGZvb19kYXRhIGluIHRoZSBhYm92ZSBleGFtcGxlKQorY2FuIGJlIGNhbGxlZCBpbiBzZXZlcmFsIHdheXM7IHRoZSBvcGVyYXRpb24gcGFyYW1ldGVyIGRldGVybWluZXMKK3doYXQgc2hvdWxkIGJlIGRvbmU6CisKKyAgKiBJZiBvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfSU5GTywgeW91IG11c3QgcmV0dXJuIHRoZQorICAgIG1hZ25pdHVkZSAoc2NhbGluZykgaW4gbnJlbHNfbWFnOworICAqIElmIG9wZXJhdGlvbiA9PSBTRU5TT1JTX1BST0NfUkVBTF9SRUFELCB5b3UgbXVzdCByZWFkIGluZm9ybWF0aW9uCisgICAgZnJvbSB0aGUgY2hpcCBhbmQgcmV0dXJuIGl0IGluIHJlc3VsdHMuIFRoZSBudW1iZXIgb2YgaW50ZWdlcnMKKyAgICB0byBkaXNwbGF5IHNob3VsZCBiZSBwdXQgaW4gbnJlbHNfbWFnOworICAqIElmIG9wZXJhdGlvbiA9PSBTRU5TT1JTX1BST0NfUkVBTF9XUklURSwgeW91IG11c3Qgd3JpdGUgdGhlCisgICAgc3VwcGxpZWQgaW5mb3JtYXRpb24gdG8gdGhlIGNoaXAuIG5yZWxzX21hZyB3aWxsIGNvbnRhaW4gdGhlIG51bWJlcgorICAgIG9mIGludGVnZXJzLCByZXN1bHRzIHRoZSBpbnRlZ2VycyB0aGVtc2VsdmVzLgorCitUaGUgKl9wcm9jX3JlYWwgZnVuY3Rpb25zIHdpbGwgZGlzcGxheSB0aGUgZWxlbWVudHMgYXMgcmVhbHMgZm9yIHRoZQorL3Byb2MgaW50ZXJmYWNlLiBJZiB5b3Ugc2V0IHRoZSBtYWduaXR1ZGUgdG8gMiwgYW5kIHN1cHBseSAzNDUgZm9yCitTRU5TT1JTX1BST0NfUkVBTF9SRUFELCBpdCB3b3VsZCBkaXNwbGF5IDMuNDU7IGFuZCBpZiB0aGUgdXNlciB3b3VsZAord3JpdGUgNDUuNiB0byB0aGUgL3Byb2MgZmlsZSwgaXQgd291bGQgYmUgcmV0dXJuZWQgYXMgNDU2MCBmb3IKK1NFTlNPUlNfUFJPQ19SRUFMX1dSSVRFLiBBIG1hZ25pdHVkZSBtYXkgZXZlbiBiZSBuZWdhdGl2ZSEKKworQW4gZXhhbXBsZSBmdW5jdGlvbjoKKworICAvKiBGT09fRlJPTV9SRUcgYW5kIEZPT19UT19SRUcgdHJhbnNsYXRlIGJldHdlZW4gc2NhbGVkIHZhbHVlcyBhbmQKKyAgICAgcmVnaXN0ZXIgdmFsdWVzLiBOb3RlIHRoZSB1c2Ugb2YgdGhlIHJlYWQgY2FjaGUuICovCisgIHZvaWQgZm9vX2luKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBvcGVyYXRpb24sIGludCBjdGxfbmFtZSwgCisgICAgICAgICAgICAgIGludCAqbnJlbHNfbWFnLCBsb25nICpyZXN1bHRzKQorICB7CisgICAgc3RydWN0IGZvb19kYXRhICpkYXRhID0gY2xpZW50LT5kYXRhOworICAgIGludCBuciA9IGN0bF9uYW1lIC0gRk9PX1NZU0NUTF9GVU5DMTsgLyogcmVkdWNlIHRvIDAgdXB3YXJkcyAqLworICAgIAorICAgIGlmIChvcGVyYXRpb24gPT0gU0VOU09SU19QUk9DX1JFQUxfSU5GTykKKyAgICAgICpucmVsc19tYWcgPSAyOworICAgIGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBTRU5TT1JTX1BST0NfUkVBTF9SRUFEKSB7CisgICAgICAvKiBVcGRhdGUgdGhlIHJlYWRpbmdzIGNhY2hlIChpZiBuZWNlc3NhcnkpICovCisgICAgICBmb29fdXBkYXRlX2NsaWVudChjbGllbnQpOworICAgICAgLyogR2V0IHRoZSByZWFkaW5ncyBmcm9tIHRoZSBjYWNoZSAqLworICAgICAgcmVzdWx0c1swXSA9IEZPT19GUk9NX1JFRyhkYXRhLT5mb29fZnVuY19iYXNlW25yXSk7CisgICAgICByZXN1bHRzWzFdID0gRk9PX0ZST01fUkVHKGRhdGEtPmZvb19mdW5jX21vcmVbbnJdKTsKKyAgICAgIHJlc3VsdHNbMl0gPSBGT09fRlJPTV9SRUcoZGF0YS0+Zm9vX2Z1bmNfcmVhZG9ubHlbbnJdKTsKKyAgICAgICpucmVsc19tYWcgPSAyOworICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IFNFTlNPUlNfUFJPQ19SRUFMX1dSSVRFKSB7CisgICAgICBpZiAoKm5yZWxzX21hZyA+PSAxKSB7CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY2FjaGUgKi8KKyAgICAgICAgZGF0YS0+Zm9vX2Jhc2VbbnJdID0gRk9PX1RPX1JFRyhyZXN1bHRzWzBdKTsKKyAgICAgICAgLyogVXBkYXRlIHRoZSBjaGlwICovCisgICAgICAgIGZvb193cml0ZV92YWx1ZShjbGllbnQsRk9PX1JFR19GVU5DX0JBU0UobnIpLGRhdGEtPmZvb19iYXNlW25yXSk7CisgICAgICB9CisgICAgICBpZiAoKm5yZWxzX21hZyA+PSAyKSB7CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgY2FjaGUgKi8KKyAgICAgICAgZGF0YS0+Zm9vX21vcmVbbnJdID0gRk9PX1RPX1JFRyhyZXN1bHRzWzFdKTsKKyAgICAgICAgLyogVXBkYXRlIHRoZSBjaGlwICovCisgICAgICAgIGZvb193cml0ZV92YWx1ZShjbGllbnQsRk9PX1JFR19GVU5DX01PUkUobnIpLGRhdGEtPmZvb19tb3JlW25yXSk7CisgICAgICB9CisgICAgfQorICB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhNmRkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJvL1JFQURNRQpAQCAtMCwwICsxLDYzIEBACisKKwlMaW51eCBJMk8gU3VwcG9ydAkoYykgQ29weXJpZ2h0IDE5OTkgUmVkIEhhdCBTb2Z0d2FyZQorCQkJCQlhbmQgb3RoZXJzLgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworQVVUSE9SUyAoc28gZmFyKQorCitBbGFuIENveCwgQnVpbGRpbmcgTnVtYmVyIFRocmVlIEx0ZC4KKwlDb3JlIGNvZGUsIFNDU0kgYW5kIEJsb2NrIE9TTXMKKworU3RldmUgUmFsc3RvbiwgTFNJIExvZ2ljIENvcnAuCisJRGVidWdnaW5nIFNDU0kgYW5kIEJsb2NrIE9TTQorCitEZWVwYWsgU2F4ZW5hLCBJbnRlbCBDb3JwLgorCVZhcmlvdXMgY29yZS9ibG9jayBleHRlbnNpb25zCisJL3Byb2MgaW50ZXJmYWNlLCBidWcgZml4ZXMKKwlJb2N0bCBpbnRlcmZhY2VzIGZvciBjb250cm9sCisJRGVidWdnaW5nIExBTiBPU00KKworUGhpbGlwIFJ1bXBmCisJRml4ZWQgYXNzb3J0ZWQgZHVtYiBTTVAgbG9ja2luZyBidWdzCisKK0p1aGEgU2lldmFuZW4sIFVuaXZlcnNpdHkgb2YgSGVsc2lua2kgRmlubGFuZAorCUxBTiBPU00gY29kZQorCS9wcm9jIGludGVyZmFjZSB0byBMQU4gY2xhc3MKKwlCdWcgZml4ZXMKKwlDb3JlIGNvZGUgZXh0ZW5zaW9ucworCitBdXZvIEjka2tpbmVuLCBVbml2ZXJzaXR5IG9mIEhlbHNpbmtpIEZpbmxhbmQKKwlMQU4gT1NNIGNvZGUKKwkvUHJvYyBpbnRlcmZhY2UgdG8gTEFOIGNsYXNzCisJQnVnIGZpeGVzCisJQ29yZSBjb2RlIGV4dGVuc2lvbnMKKworVGFuZWxpIFbkaORrYW5nYXMsIFVuaXZlcnNpdHkgb2YgSGVsc2lua2kgRmlubGFuZAorCUZpeGVzIHRvIGkyb19jb25maWcKKworQ1JFRElUUworCisJVGhpcyB3b3JrIHdhcyBtYWRlIHBvc3NpYmxlIGJ5CisKK1JlZCBIYXQgU29mdHdhcmUKKwlGdW5kaW5nIGZvciB0aGUgQnVpbGRpbmcgIzMgcGFydCBvZiB0aGUgcHJvamVjdAorCitTeW1iaW9zIExvZ2ljIChOb3cgTFNJKQorCUhvc3QgYWRhcHRlcnMsIGhpbnRzLCBrbm93biB0byB3b3JrIHBsYXRmb3JtcyB3aGVuIEkgaGl0CisJY29tcGF0aWJpbGl0eSBwcm9ibGVtcworCitCb3hIaWxsIENvcnBvcmF0aW9uCisJTG9hbiBvZiBpbml0aWFsIEZpYnJlQ2hhbm5lbCBkaXNrIGFycmF5IHVzZWQgZm9yIGRldmVsb3BtZW50IHdvcmsuCisKK0V1cm9wZWFuIENvbWlzc2lvbgorCUZ1bmRpbmcgdGhlIHdvcmsgZG9uZSBieSB0aGUgVW5pdmVyc2l0eSBvZiBIZWxzaW5raQorCitTeXNLb25uZWN0CisgICAgICAgIExvYW4gb2YgRkRESSBhbmQgR2lnYWJpdCBFdGhlcm5ldCBjYXJkcworCitBU1VTVGVLCisgICAgICAgIExvYW4gb2YgSTJPIG1vdGhlcmJvYXJkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyby9pb2N0bCBiL0RvY3VtZW50YXRpb24vaTJvL2lvY3RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTc0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyby9pb2N0bApAQCAtMCwwICsxLDM5NCBAQAorCitMaW51eCBJMk8gVXNlciBTcGFjZSBJbnRlcmZhY2UKK3JldiAwLjMgLSAwNC8yMC85OQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorT3JpZ2luYWxseSB3cml0dGVuIGJ5IERlZXBhayBTYXhlbmEoZGVlcGFrQHBsZXhpdHkubmV0KQorQ3VycmVudGx5IG1haW50YWluZWQgYnkgRGVlcGFrIFNheGVuYShkZWVwYWtAcGxleGl0eS5uZXQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJLiBJbnRyb2R1Y3Rpb24KKworVGhlIExpbnV4IEkyTyBzdWJzeXN0ZW0gcHJvdmlkZXMgYSBzZXQgb2YgaW9jdGwoKSBjb21tYW5kcyB0aGF0IGNhbiBiZQordXRpbGl6ZWQgYnkgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMgdG8gY29tbXVuaWNhdGUgd2l0aCBJT1BzIGFuZCBkZXZpY2VzCitvbiBpbmRpdmlkdWFsIElPUHMuIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgc3BlY2lmaWMgaW9jdGwoKSBjb21tYW5kcwordGhhdCBhcmUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBleGFtcGxlcyBvZiB0aGVpciB1c2VzLgorCitUaGlzIGRvY3VtZW50IGFzc3VtZXMgdGhlIHJlYWRlciBpcyBmYW1pbGlhciB3aXRoIG9yIGhhcyBhY2Nlc3MgdG8gdGhlCitJMk8gc3BlY2lmaWNhdGlvbiBhcyBubyBJMk8gbWVzc2FnZSBwYXJhbWV0ZXJzIGFyZSBvdXRsaW5lZC4gIEZvciBpbmZvcm1hdGlvbgorb24gdGhlIHNwZWNpZmljYXRpb24sIHNlZSBodHRwOi8vd3d3Lmkyb3NpZy5vcmcKKworVGhpcyBkb2N1bWVudCBhbmQgdGhlIEkyTyB1c2VyIHNwYWNlIGludGVyZmFjZSBhcmUgY3VycmVudGx5IG1haW50YWluZWQKK2J5IERlZXBhayBTYXhlbmEuICBQbGVhc2Ugc2VuZCBhbGwgY29tbWVudHMsIGVycmF0YSwgYW5kIGJ1ZyBmaXhlcyB0bworZGVlcGFrQGNzb2NpZXR5LnB1cmR1ZS5lZHUKKworSUkuIElPUCBBY2Nlc3MKKworQWNjZXNzIHRvIHRoZSBJMk8gc3Vic3lzdGVtIGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIGRldmljZSBmaWxlIG5hbWVkCisvZGV2L2kyby9jdGwuICBUaGlzIGZpbGUgaXMgYSBjaGFyYWN0ZXIgZmlsZSB3aXRoIG1ham9yIG51bWJlciAxMCBhbmQgbWlub3IKK251bWJlciAxNjYuICBJdCBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgbWtub2QgL2Rldi9pMm8vY3RsIGMgMTAgMTY2CisKK0lJSS4gRGV0ZXJtaW5pbmcgdGhlIElPUCBDb3VudAorCisgICBTWU5PUFNJUworCisgICBpb2N0bChmZCwgSTJPR0VUSU9QUywgIGludCAqY291bnQpOworCisgICB1OCBjb3VudFtNQVhfSTJPX0NPTlRST0xMRVJTXTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzeXN0ZW0ncyBhY3RpdmUgSU9QIHRhYmxlLiAgY291bnQgc2hvdWxkCisgICBwb2ludCB0byBhIGJ1ZmZlciBjb250YWluaW5nIE1BWF9JMk9fQ09OVFJPTExFUlMgZW50cmllcy4gIFVwb24KKyAgIHJldHVybmluZywgZWFjaCBlbnRyeSB3aWxsIGNvbnRhaW4gYSBub24temVybyB2YWx1ZSBpZiB0aGUgZ2l2ZW4KKyAgIElPUCB1bml0IGlzIGFjdGl2ZSwgYW5kIE5VTEwgaWYgaXQgaXMgaW5hY3RpdmUgb3Igbm9uLWV4aXN0ZW50LgorCisgICBSRVRVUk4gVkFMVUUuCisKKyAgIFJldHVybnMgMCBpZiBubyBlcnJvcnMgb2NjdXIsIGFuZCAtMSBvdGhlcndpc2UuICBJZiBhbiBlcnJvciBvY2N1cnMsCisgICBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGVseToKKworICAgICBFRkFVTFQgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisKK0lWLiBHZXR0aW5nIEhhcmR3YXJlIFJlc291cmNlIFRhYmxlCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9IUlRHRVQsIHN0cnVjdCBpMm9fY21kX2hydCAqaHJ0KTsKKworICAgICAgc3RydWN0IGkyb19jbWRfaHJ0bGN0CisgICAgICB7CisgICAgICAgICB1MzIgICBpb3A7ICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB2b2lkICAqcmVzYnVmOyAgLyogQnVmZmVyIGZvciByZXN1bHQgKi8KKyAgICAgICAgIHUzMiAgICpyZXNsZW47ICAvKiBCdWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgICB9OworCisgICBERVNDUklQVElPTgorCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIEhhcmR3YXJlIFJlc291cmNlIFRhYmxlIG9mIHRoZSBJT1Agc3BlY2lmaWVkCisgICBieSBocnQtPmlvcCBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgaHJ0LT5yZXNidWYuIFRoZSBhY3R1YWwgc2l6ZSBvZgorICAgdGhlIGRhdGEgaXMgd3JpdHRlbiBpbnRvICooaHJ0LT5yZXNsZW4pLgorCisgICBSRVRVUk5TCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIG5vIGVycm9ycyBvY2N1ci4gSWYgYW4gZXJyb3Igb2NjdXJzLCAtMQorICAgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCBhcHByb3ByaWF0ZWx5OgorCisgICAgICBFRkFVTFQgICAgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisgICAgICBFTlhJTyAgICAgICBJbnZhbGlkIElPUCBudW1iZXIKKyAgICAgIEVOT0JVRlMgICAgIEJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiAgSWYgdGhpcyBvY2N1cnMsIHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCBpcyB3cml0dGVuIGludG8gKihocnQtPnJlc2xlbikKKworVi4gR2V0dGluZyBMb2dpY2FsIENvbmZpZ3VyYXRpb24gVGFibGUKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT0xDVEdFVCwgc3RydWN0IGkyb19jbWRfbGN0ICpsY3QpOworCisgICAgICBzdHJ1Y3QgaTJvX2NtZF9ocnRsY3QKKyAgICAgIHsKKyAgICAgICAgIHUzMiAgIGlvcDsgICAgICAvKiBJT1AgdW5pdCBudW1iZXIgKi8KKyAgICAgICAgIHZvaWQgICpyZXNidWY7ICAvKiBCdWZmZXIgZm9yIHJlc3VsdCAqLworICAgICAgICAgdTMyICAgKnJlc2xlbjsgIC8qIEJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICAgIH07CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgTG9naWNhbCBDb25maWd1cmF0aW9uIFRhYmxlIG9mIHRoZSBJT1Agc3BlY2lmaWVkCisgICBieSBsY3QtPmlvcCBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgbGN0LT5yZXNidWYuIFRoZSBhY3R1YWwgc2l6ZSBvZgorICAgdGhlIGRhdGEgaXMgd3JpdHRlbiBpbnRvICoobGN0LT5yZXNsZW4pLgorCisgICBSRVRVUk5TCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIG5vIGVycm9ycyBvY2N1ci4gSWYgYW4gZXJyb3Igb2NjdXJzLCAtMQorICAgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCBhcHByb3ByaWF0ZWx5OgorCisgICAgICBFRkFVTFQgICAgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisgICAgICBFTlhJTyAgICAgICBJbnZhbGlkIElPUCBudW1iZXIKKyAgICAgIEVOT0JVRlMgICAgIEJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiAgSWYgdGhpcyBvY2N1cnMsIHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCBpcyB3cml0dGVuIGludG8gKihsY3QtPnJlc2xlbikKKworVkkuIFNldHR0aW5nIFBhcmFtZXRlcnMKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT1BBUk1TRVQsIHN0cnVjdCBpMm9fcGFybV9zZXRnZXQgKm9wcyk7CisKKyAgICAgIHN0cnVjdCBpMm9fY21kX3BzZXRnZXQKKyAgICAgIHsKKyAgICAgICAgIHUzMiAgIGlvcDsgICAgICAvKiBJT1AgdW5pdCBudW1iZXIgKi8KKyAgICAgICAgIHUzMiAgIHRpZDsgICAgICAvKiBUYXJnZXQgZGV2aWNlIFRJRCAqLworICAgICAgICAgdm9pZCAgKm9wYnVmOyAgIC8qIE9wZXJhdGlvbiBMaXN0IGJ1ZmZlciAqLworICAgICAgICAgdTMyICAgb3BsZW47ICAgIC8qIE9wZXJhdGlvbiBMaXN0IGJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICAgICAgIHZvaWQgICpyZXNidWY7ICAvKiBSZXN1bHQgTGlzdCBidWZmZXIgKi8KKyAgICAgICAgIHUzMiAgICpyZXNsZW47ICAvKiBSZXN1bHQgTGlzdCBidWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgICB9OworCisgICBERVNDUklQVElPTgorCisgICBUaGlzIGZ1bmN0aW9uIHBvc3RzIGEgVXRpbFBhcmFtc1NldCBtZXNzYWdlIHRvIHRoZSBkZXZpY2UgaWRlbnRpZmllZAorICAgYnkgb3BzLT5pb3AgYW5kIG9wcy0+dGlkLiAgVGhlIG9wZXJhdGlvbiBsaXN0IGZvciB0aGUgbWVzc2FnZSBpcworICAgc2VudCB0aHJvdWdoIHRoZSBvcHMtPm9wYnVmIGJ1ZmZlciwgYW5kIHRoZSByZXN1bHQgbGlzdCBpcyB3cml0dGVuCisgICBpbnRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBvcHMtPnJlc2J1Zi4gIFRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgIHdyaXR0ZW4gaXMgcGxhY2VkIGludG8gKihvcHMtPnJlc2xlbikuCisKKyAgIFJFVFVSTlMKKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZGF0YSB3cml0dGVuIGludG8KKyAgIG9wcy0+cmVzYnVmIGlmIG5vIGVycm9ycyBvY2N1ci4gIElmIGFuIGVycm9yIG9jY3VycywgLTEgaXMgcmV0dXJuZWQKKyAgIGFuZCBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGx5OgorCisgICAgICBFRkFVTFQgICAgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisgICAgICBFTlhJTyAgICAgICBJbnZhbGlkIElPUCBudW1iZXIKKyAgICAgIEVOT0JVRlMgICAgIEJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiAgSWYgdGhpcyBvY2N1cnMsIHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCBpcyB3cml0dGVuIGludG8gKihvcHMtPnJlc2xlbikKKyAgICAgIEVUSU1FRE9VVCAgIFRpbWVvdXQgd2FpdGluZyBmb3IgcmVwbHkgbWVzc2FnZQorICAgICAgRU5PTUVNICAgICAgS2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisKKyAgIEEgcmV0dXJuIHZhbHVlIG9mIDAgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSB2YWx1ZSB3YXMgYWN0dWFsbHkKKyAgIGNoYW5nZWQgcHJvcGVybHkgb24gdGhlIElPUC4gIFRoZSB1c2VyIHNob3VsZCBjaGVjayB0aGUgcmVzdWx0CisgICBsaXN0IHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgc3RhdHVzIG9mIHRoZSB0cmFuc2FjdGlvbi4KKworVklJLiBHZXR0aW5nIFBhcmFtZXRlcnMKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT1BBUk1HRVQsIHN0cnVjdCBpMm9fcGFybV9zZXRnZXQgKm9wcyk7CisKKyAgICAgIHN0cnVjdCBpMm9fcGFybV9zZXRnZXQKKyAgICAgIHsKKyAgICAgICAgIHUzMiAgIGlvcDsgICAgICAvKiBJT1AgdW5pdCBudW1iZXIgKi8KKyAgICAgICAgIHUzMiAgIHRpZDsgICAgICAvKiBUYXJnZXQgZGV2aWNlIFRJRCAqLworICAgICAgICAgdm9pZCAgKm9wYnVmOyAgIC8qIE9wZXJhdGlvbiBMaXN0IGJ1ZmZlciAqLworICAgICAgICAgdTMyICAgb3BsZW47ICAgIC8qIE9wZXJhdGlvbiBMaXN0IGJ1ZmZlciBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICAgICAgIHZvaWQgICpyZXNidWY7ICAvKiBSZXN1bHQgTGlzdCBidWZmZXIgKi8KKyAgICAgICAgIHUzMiAgICpyZXNsZW47ICAvKiBSZXN1bHQgTGlzdCBidWZmZXIgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgICB9OworCisgICBERVNDUklQVElPTgorCisgICBUaGlzIGZ1bmN0aW9uIHBvc3RzIGEgVXRpbFBhcmFtc0dldCBtZXNzYWdlIHRvIHRoZSBkZXZpY2UgaWRlbnRpZmllZAorICAgYnkgb3BzLT5pb3AgYW5kIG9wcy0+dGlkLiAgVGhlIG9wZXJhdGlvbiBsaXN0IGZvciB0aGUgbWVzc2FnZSBpcworICAgc2VudCB0aHJvdWdoIHRoZSBvcHMtPm9wYnVmIGJ1ZmZlciwgYW5kIHRoZSByZXN1bHQgbGlzdCBpcyB3cml0dGVuCisgICBpbnRvIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBvcHMtPnJlc2J1Zi4gIFRoZSBhY3R1YWwgc2l6ZSBvZiBkYXRhCisgICB3cml0dGVuIGlzIHBsYWNlZCBpbnRvICoob3BzLT5yZXNsZW4pLgorCisgICBSRVRVUk5TCisKKyAgICAgIEVGQVVMVCAgICAgIEludmFsaWQgdXNlciBzcGFjZSBwb2ludGVyIHdhcyBwYXNzZWQKKyAgICAgIEVOWElPICAgICAgIEludmFsaWQgSU9QIG51bWJlcgorICAgICAgRU5PQlVGUyAgICAgQnVmZmVyIG5vdCBsYXJnZSBlbm91Z2guICBJZiB0aGlzIG9jY3VycywgdGhlIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICBidWZmZXIgbGVuZ3RoIGlzIHdyaXR0ZW4gaW50byAqKG9wcy0+cmVzbGVuKQorICAgICAgRVRJTUVET1VUICAgVGltZW91dCB3YWl0aW5nIGZvciByZXBseSBtZXNzYWdlCisgICAgICBFTk9NRU0gICAgICBLZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKworICAgQSByZXR1cm4gdmFsdWUgb2YgMCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHZhbHVlIHdhcyBhY3R1YWxseQorICAgcHJvcGVybHkgcmV0cmVpdmVkLiAgVGhlIHVzZXIgc2hvdWxkIGNoZWNrIHRoZSByZXN1bHQgbGlzdAorICAgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBzdGF0dXMgb2YgdGhlIHRyYW5zYWN0aW9uLgorCitWSUlJLiBEb3dubG9hZGluZyBTb2Z0d2FyZQorCisgICBTWU5PUFNJUworCisgICBpb2N0bChmZCwgSTJPU1dETCwgc3RydWN0IGkyb19zd194ZmVyICpzdyk7CisKKyAgICAgIHN0cnVjdCBpMm9fc3dfeGZlcgorICAgICAgeworICAgICAgICAgdTMyICAgaW9wOyAgICAgICAvKiBJT1AgdW5pdCBudW1iZXIgKi8KKyAgICAgICAgIHU4ICAgIGZsYWdzOyAgICAgLyogRG93bmxvYWRGbGFncyBmaWVsZCAqLworICAgICAgICAgdTggICAgc3dfdHlwZTsgICAvKiBTb2Z0d2FyZSB0eXBlICovCisgICAgICAgICB1MzIgICBzd19pZDsgICAgIC8qIFNvZnR3YXJlIElEICovCisgICAgICAgICB2b2lkICAqYnVmOyAgICAgIC8qIFBvaW50ZXIgdG8gc29mdHdhcmUgYnVmZmVyICovCisgICAgICAgICB1MzIgICAqc3dsZW47ICAgIC8qIExlbmd0aCBvZiBzb2Z0d2FyZSBidWZmZXIgKi8KKyAgICAgICAgIHUzMiAgICptYXhmcmFnOyAgLyogTnVtYmVyIG9mIGZyYWdtZW50cyAqLworICAgICAgICAgdTMyICAgKmN1cmZyYWc7ICAvKiBDdXJyZW50IGZyYWdtZW50IG51bWJlciAqLworICAgICAgfTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgYSBzb2Z0d2FyZSBmcmFnbWVudCBwb2ludGVkIGJ5IHN3LT5idWYKKyAgIHRvIHRoZSBpb3AgaWRlbnRpZmllZCBieSBzdy0+aW9wLiBUaGUgRG93bmxvYWRGbGFncywgU3dJRCwgU3dUeXBlCisgICBhbmQgU3dTaXplIGZpZWxkcyBvZiB0aGUgRXhlY1N3RG93bmxvYWQgbWVzc2FnZSBhcmUgZmlsbGVkIGluIHdpdGgKKyAgIHRoZSB2YWx1ZXMgb2Ygc3ctPmZsYWdzLCBzdy0+c3dfaWQsIHN3LT5zd190eXBlIGFuZCAqKHN3LT5zd2xlbikuCisKKyAgIFRoZSBmcmFnbWVudHMgX211c3RfIGJlIHNlbnQgaW4gb3JkZXIgYW5kIGJlIDhLIGluIHNpemUuIFRoZSBsYXN0CisgICBmcmFnbWVudCBfbWF5XyBiZSBzaG9ydGVyLCBob3dldmVyLiBUaGUga2VybmVsIHdpbGwgY29tcHV0ZSBpdHMKKyAgIHNpemUgYmFzZWQgb24gaW5mb3JtYXRpb24gaW4gdGhlIHN3LT5zd2xlbiBmaWVsZC4KKworICAgUGxlYXNlIG5vdGUgdGhhdCBTVyB0cmFuc2ZlcnMgY2FuIHRha2UgYSBsb25nIHRpbWUuCisKKyAgIFJFVFVSTlMKKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgbm8gZXJyb3JzIG9jY3VyLiBJZiBhbiBlcnJvciBvY2N1cnMsIC0xCisgICBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMgc2V0IGFwcHJvcHJpYXRseToKKworICAgICAgRUZBVUxUICAgICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisgICAgICBFVElNRURPVVQgICBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlcGx5IG1lc3NhZ2UKKyAgICAgIEVOT01FTSAgICAgIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorCitJWC4gVXBsb2FkaW5nIFNvZnR3YXJlCisKKyAgIFNZTk9QU0lTCisKKyAgIGlvY3RsKGZkLCBJMk9TV1VMLCBzdHJ1Y3QgaTJvX3N3X3hmZXIgKnN3KTsKKworICAgICAgc3RydWN0IGkyb19zd194ZmVyCisgICAgICB7CisgICAgICAgICB1MzIgICBpb3A7ICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB1OCAgICBmbGFnczsgCSAvKiBVcGxvYWRGbGFncyAqLworICAgICAgICAgdTggICAgc3dfdHlwZTsgIC8qIFNvZnR3YXJlIHR5cGUgKi8KKyAgICAgICAgIHUzMiAgIHN3X2lkOyAgICAvKiBTb2Z0d2FyZSBJRCAqLworICAgICAgICAgdm9pZCAgKmJ1ZjsgICAgIC8qIFBvaW50ZXIgdG8gc29mdHdhcmUgYnVmZmVyICovCisgICAgICAgICB1MzIgICAqc3dsZW47ICAgLyogTGVuZ3RoIG9mIHNvZnR3YXJlIGJ1ZmZlciAqLworICAgICAgICAgdTMyICAgKm1heGZyYWc7IC8qIE51bWJlciBvZiBmcmFnbWVudHMgKi8KKyAgICAgICAgIHUzMiAgICpjdXJmcmFnOyAvKiBDdXJyZW50IGZyYWdtZW50IG51bWJlciAqLworICAgICAgfTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiB1cGxvYWRzIGEgc29mdHdhcmUgZnJhZ21lbnQgZnJvbSB0aGUgSU9QIGlkZW50aWZpZWQKKyAgIGJ5IHN3LT5pb3AsIHN3LT5zd190eXBlLCBzdy0+c3dfaWQgYW5kIG9wdGlvbmFsbHkgc3ctPnN3bGVuIGZpZWxkcy4KKyAgIFRoZSBVcGxvYWRGbGFncywgU3dJRCwgU3dUeXBlIGFuZCBTd1NpemUgZmllbGRzIG9mIHRoZSBFeGVjU3dVcGxvYWQKKyAgIG1lc3NhZ2UgYXJlIGZpbGxlZCBpbiB3aXRoIHRoZSB2YWx1ZXMgb2Ygc3ctPmZsYWdzLCBzdy0+c3dfaWQsCisgICBzdy0+c3dfdHlwZSBhbmQgKihzdy0+c3dsZW4pLgorCisgICBUaGUgZnJhZ21lbnRzIF9tdXN0XyBiZSByZXF1ZXN0ZWQgaW4gb3JkZXIgYW5kIGJlIDhLIGluIHNpemUuIFRoZQorICAgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBtZW1vcnkgcG9pbnRlZCBieSBzdy0+YnVmLiBUaGUKKyAgIGxhc3QgZnJhZ21lbnQgX21heV8gYmUgc2hvcnRlci4KKworICAgUGxlYXNlIG5vdGUgdGhhdCBTVyB0cmFuc2ZlcnMgY2FuIHRha2UgYSBsb25nIHRpbWUuCisKKyAgIFJFVFVSTlMKKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgbm8gZXJyb3JzIG9jY3VyLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCAtMQorICAgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCBhcHByb3ByaWF0bHk6CisKKyAgICAgIEVGQVVMVCAgICAgIEludmFsaWQgdXNlciBzcGFjZSBwb2ludGVyIHdhcyBwYXNzZWQKKyAgICAgIEVOWElPICAgICAgIEludmFsaWQgSU9QIG51bWJlcgorICAgICAgRVRJTUVET1VUICAgVGltZW91dCB3YWl0aW5nIGZvciByZXBseSBtZXNzYWdlCisgICAgICBFTk9NRU0gICAgICBLZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKworWC4gUmVtb3ZpbmcgU29mdHdhcmUKKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT1NXREVMLCBzdHJ1Y3QgaTJvX3N3X3hmZXIgKnN3KTsKKworICAgICAgc3RydWN0IGkyb19zd194ZmVyCisgICAgICB7CisgICAgICAgICB1MzIgICBpb3A7ICAgICAgLyogSU9QIHVuaXQgbnVtYmVyICovCisgICAgICAgICB1OCAgICBmbGFnczsgCSAvKiBSZW1vdmVGbGFncyAqLworICAgICAgICAgdTggICAgc3dfdHlwZTsgIC8qIFNvZnR3YXJlIHR5cGUgKi8KKyAgICAgICAgIHUzMiAgIHN3X2lkOyAgICAvKiBTb2Z0d2FyZSBJRCAqLworICAgICAgICAgdm9pZCAgKmJ1ZjsgICAgIC8qIFVudXNlZCAqLworICAgICAgICAgdTMyICAgKnN3bGVuOyAgIC8qIExlbmd0aCBvZiB0aGUgc29mdHdhcmUgZGF0YSAqLworICAgICAgICAgdTMyICAgKm1heGZyYWc7IC8qIFVudXNlZCAqLworICAgICAgICAgdTMyICAgKmN1cmZyYWc7IC8qIFVudXNlZCAqLworICAgICAgfTsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIHNvZnR3YXJlIGZyb20gdGhlIElPUCBpZGVudGlmaWVkIGJ5IHN3LT5pb3AuCisgICBUaGUgUmVtb3ZlRmxhZ3MsIFN3SUQsIFN3VHlwZSBhbmQgU3dTaXplIGZpZWxkcyBvZiB0aGUgRXhlY1N3UmVtb3ZlIG1lc3NhZ2UKKyAgIGFyZSBmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWVzIG9mIHN3LT5mbGFncywgc3ctPnN3X2lkLCBzdy0+c3dfdHlwZSBhbmQKKyAgICooc3ctPnN3bGVuKS4gR2l2ZSB6ZXJvIGluICooc3ctPmxlbikgaWYgdGhlIHZhbHVlIGlzIHVua25vd24uIElPUCB1c2VzCisgICAqKHN3LT5zd2xlbikgdmFsdWUgdG8gdmVyaWZ5IGNvcnJlY3QgaWRlbnRpY2F0aW9uIG9mIHRoZSBtb2R1bGUgdG8gcmVtb3ZlLgorICAgVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBtb2R1bGUgaXMgd3JpdHRlbiBpbnRvICooc3ctPnN3bGVuKS4KKworICAgUkVUVVJOUworCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBubyBlcnJvcnMgb2NjdXIuICBJZiBhbiBlcnJvciBvY2N1cnMsIC0xCisgICBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMgc2V0IGFwcHJvcHJpYXRseToKKworICAgICAgRUZBVUxUICAgICAgSW52YWxpZCB1c2VyIHNwYWNlIHBvaW50ZXIgd2FzIHBhc3NlZAorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisgICAgICBFVElNRURPVVQgICBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlcGx5IG1lc3NhZ2UKKyAgICAgIEVOT01FTSAgICAgIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorCitYLiBWYWxpZGF0aW5nIENvbmZpZ3VyYXRpb24KKworICAgU1lOT1BTSVMKKworICAgaW9jdGwoZmQsIEkyT1ZBTElEQVRFLCBpbnQgKmlvcCk7CisJdTMyIGlvcDsKKworICAgREVTQ1JJUFRJT04KKworICAgVGhpcyBmdW5jdGlvbiBwb3N0cyBhbiBFeGVjQ29uZmlnVmFsaWRhdGUgbWVzc2FnZSB0byB0aGUgY29udHJvbGxlcgorICAgaWRlbnRpZmllZCBieSBpb3AuIFRoaXMgbWVzc2FnZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudAorICAgY29uZmlndXJhdGlvbiBpcyBhY2NlcHRlZC4gVGhlIGlvcCBjaGFuZ2VzIHRoZSBzdGF0dXMgb2Ygc3VzcGVjdCBkcml2ZXJzCisgICB0byB2YWxpZCBhbmQgbWF5IGRlbGV0ZSBvbGQgZHJpdmVycyBmcm9tIGl0cyBzdG9yZS4KKworICAgUkVUVVJOUworCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBubyBlcnJvIG9jY3VyLiAgSWYgYW4gZXJyb3Igb2NjdXJzLCAtMSBpcworICAgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCBhcHByb3ByaWF0bHk6CisKKyAgICAgIEVUSU1FRE9VVCAgIFRpbWVvdXQgd2FpdGluZyBmb3IgcmVwbHkgbWVzc2FnZQorICAgICAgRU5YSU8gICAgICAgSW52YWxpZCBJT1AgbnVtYmVyCisKK1hJLiBDb25maWd1cmF0aW9uIERpYWxvZworCisgICBTWU5PUFNJUworCisgICBpb2N0bChmZCwgSTJPSFRNTCwgc3RydWN0IGkyb19odG1sICpodHF1ZXJ5KTsKKyAgICAgIHN0cnVjdCBpMm9faHRtbAorICAgICAgeworICAgICAgICAgdTMyICAgaW9wOyAgICAgIC8qIElPUCB1bml0IG51bWJlciAqLworICAgICAgICAgdTMyICAgdGlkOyAgICAgIC8qIFRhcmdldCBkZXZpY2UgSUQgKi8KKyAgICAgICAgIHUzMiAgIHBhZ2U7ICAgICAvKiBIVE1MIHBhZ2UgKi8KKyAgICAgICAgIHZvaWQgICpyZXNidWY7ICAvKiBCdWZmZXIgZm9yIHJlcGx5IEhUTUwgcGFnZSAqLworICAgICAgICAgdTMyICAgKnJlc2xlbjsgIC8qIExlbmd0aCBpbiBieXRlcyBvZiByZXBseSBidWZmZXIgKi8KKyAgICAgICAgIHZvaWQgICpxYnVmOyAgICAvKiBQb2ludGVyIHRvIEhUVFAgcXVlcnkgc3RyaW5nICovCisgICAgICAgICB1MzIgICBxbGVuOyAgICAgLyogTGVuZ3RoIGluIGJ5dGVzIG9mIHF1ZXJ5IHN0cmluZyBidWZmZXIgKi8KKyAgICAgIH07CisKKyAgIERFU0NSSVBUSU9OCisKKyAgIFRoaXMgZnVuY3Rpb24gcG9zdHMgYW4gVXRpbENvbmZpZ0RpYWxvZyBtZXNzYWdlIHRvIHRoZSBkZXZpY2UgaWRlbnRpZmllZAorICAgYnkgaHRxdWVyeS0+aW9wIGFuZCBodHF1ZXJ5LT50aWQuICBUaGUgcmVxdWVzdGVkIEhUTUwgcGFnZSBudW1iZXIgaXMKKyAgIHByb3ZpZGVkIGJ5IHRoZSBodHF1ZXJ5LT5wYWdlIGZpZWxkLCBhbmQgdGhlIHJlc3VsdGFudCBkYXRhIGlzIHN0b3JlZAorICAgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGh0cXVlcnktPnJlc2J1Zi4gIElmIHRoZXJlIGlzIGFuIEhUVFAgcXVlcnkKKyAgIHN0cmluZyB0aGF0IGlzIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZSwgaXQgc2hvdWxkIGJlIHNlbnQgaW4gdGhlIGJ1ZmZlcgorICAgcG9pbnRlZCB0byBieSBodHF1ZXJ5LT5xYnVmLiAgSWYgdGhlcmUgaXMgbm8gcXVlcnkgc3RyaW5nLCB0aGlzIGZpZWxkCisgICBzaG91bGQgYmUgc2V0IHRvIE5VTEwuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgcmVwbHkgcmVjZWl2ZWQgaXMgd3JpdHRlbgorICAgaW50byAqKGh0cXVlcnktPnJlc2xlbikuCisKKyAgIFJFVFVSTlMKKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgbm8gZXJyb3Igb2NjdXIuIElmIGFuIGVycm9yIG9jY3VycywgLTEKKyAgIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgYXBwcm9wcmlhdGx5OgorCisgICAgICBFRkFVTFQgICAgICBJbnZhbGlkIHVzZXIgc3BhY2UgcG9pbnRlciB3YXMgcGFzc2VkCisgICAgICBFTlhJTyAgICAgICBJbnZhbGlkIElPUCBudW1iZXIKKyAgICAgIEVOT0JVRlMgICAgIEJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiAgSWYgdGhpcyBvY2N1cnMsIHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCBpcyB3cml0dGVuIGludG8gKihvcHMtPnJlc2xlbikKKyAgICAgIEVUSU1FRE9VVCAgIFRpbWVvdXQgd2FpdGluZyBmb3IgcmVwbHkgbWVzc2FnZQorICAgICAgRU5PTUVNICAgICAgS2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisKK1hJSS4gRXZlbnRzCisKKyAgICBJbiB0aGUgcHJvY2VzcyBvZiBkZXRlcm1pbmluZyB0aGlzLiAgQ3VycmVudCBpZGVhIGlzIHRvIGhhdmUgdXNlCisgICAgdGhlIHNlbGVjdCgpIGludGVyZmFjZSB0byBhbGxvdyB1c2VyIGFwcHMgdG8gcGVyaW9kaWNhbGx5IHBvbGwKKyAgICB0aGUgL2Rldi9pMm8vY3RsIGRldmljZSBmb3IgZXZlbnRzLiAgV2hlbiBzZWxlY3QoKSBub3RpZmllcyB0aGUgdXNlcgorICAgIHRoYXQgYW4gZXZlbnQgaXMgYXZhaWxhYmxlLCB0aGUgdXNlciB3b3VsZCBjYWxsIHJlYWQoKSB0byByZXRyaWV2ZQorICAgIGEgbGlzdCBvZiBhbGwgdGhlIGV2ZW50cyB0aGF0IGFyZSBwZW5kaW5nIGZvciB0aGUgc3BlY2lmaWMgZGV2aWNlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmV2aXNpb24gSGlzdG9yeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmV2IDAuMSAtIDA0LzAxLzk5CistIEluaXRpYWwgcmV2aXNpb24KKworUmV2IDAuMiAtIDA0LzA2Lzk5CistIENoYW5nZWQgcmV0dXJuIHZhbHVlcyB0byBtYXRjaCBVTklYIGlvY3RsKCkgc3RhbmRhcmQuICBPbmx5IHJldHVybiB2YWx1ZXMKKyAgYXJlIDAgYW5kIC0xLiAgQWxsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCBlcnJuby4KKy0gQWRkZWQgc3VtbWFyeSBvZiBwcm9wb3NlZCBwb3NzaWJsZSBldmVudCBpbnRlcmZhY2VzCisKK1JldiAwLjMgLSAwNC8yMC85OQorLSBDaGFuZ2VkIGFsbCBpb2N0bHMoKSB0byB1c2UgcG9pbnRlcnMgdG8gdXNlciBkYXRhIGluc3RlYWQgb2YgYWN0dWFsIGRhdGEKKy0gVXBkYXRlZCBlcnJvciB2YWx1ZXMgdG8gbWF0Y2ggdGhlIGNvZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzVlNjllCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L0lPLUFQSUMudHh0CkBAIC0wLDAgKzEsMTE3IEBACitNb3N0IChhbGwpIEludGVsLU1QIGNvbXBsaWFudCBTTVAgYm9hcmRzIGhhdmUgdGhlIHNvLWNhbGxlZCAnSU8tQVBJQycsCit3aGljaCBpcyBhbiBlbmhhbmNlZCBpbnRlcnJ1cHQgY29udHJvbGxlciwgaXQgZW5hYmxlcyB1cyB0byByb3V0ZQoraGFyZHdhcmUgaW50ZXJydXB0cyB0byBtdWx0aXBsZSBDUFVzLCBvciB0byBDUFUgZ3JvdXBzLgorCitMaW51eCBzdXBwb3J0cyBhbGwgdmFyaWFudHMgb2YgY29tcGxpYW50IFNNUCBib2FyZHMsIGluY2x1ZGluZyBvbmVzIHdpdGgKK211bHRpcGxlIElPLUFQSUNzLiAobXVsdGlwbGUgSU8tQVBJQ3MgYXJlIHVzZWQgaW4gaGlnaC1lbmQgc2VydmVycyB0bworZGlzdHJpYnV0ZSBJUlEgbG9hZCBmdXJ0aGVyKS4KKworVGhlcmUgYXJlIChhIGZldykga25vd24gYnJlYWthZ2VzIGluIGNlcnRhaW4gb2xkZXIgYm9hcmRzLCB3aGljaCBidWdzIGFyZQordXN1YWxseSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBrZXJuZWwuIElmIHlvdXIgTVAtY29tcGxpYW50IFNNUCBib2FyZCBkb2VzCitub3QgYm9vdCBMaW51eCwgdGhlbiBjb25zdWx0IHRoZSBsaW51eC1zbXAgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGZpcnN0LgorCitJZiB5b3VyIGJveCBib290cyBmaW5lIHdpdGggZW5hYmxlZCBJTy1BUElDIElSUXMsIHRoZW4geW91cgorL3Byb2MvaW50ZXJydXB0cyB3aWxsIGxvb2sgbGlrZSB0aGlzIG9uZToKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KKyAgaGVsbDp+PiBjYXQgL3Byb2MvaW50ZXJydXB0cworICAgICAgICAgICAgIENQVTAKKyAgICAwOiAgICAxMzYwMjkzICAgIElPLUFQSUMtZWRnZSAgdGltZXIKKyAgICAxOiAgICAgICAgICA0ICAgIElPLUFQSUMtZWRnZSAga2V5Ym9hcmQKKyAgICAyOiAgICAgICAgICAwICAgICAgICAgIFhULVBJQyAgY2FzY2FkZQorICAgMTM6ICAgICAgICAgIDEgICAgICAgICAgWFQtUElDICBmcHUKKyAgIDE0OiAgICAgICAxNDQ4ICAgIElPLUFQSUMtZWRnZSAgaWRlMAorICAgMTY6ICAgICAgMjgyMzIgICBJTy1BUElDLWxldmVsICBJbnRlbCBFdGhlckV4cHJlc3MgUHJvIDEwLzEwMCBFdGhlcm5ldAorICAgMTc6ICAgICAgNTEzMDQgICBJTy1BUElDLWxldmVsICBldGgwCisgIE5NSTogICAgICAgICAgMAorICBFUlI6ICAgICAgICAgIDAKKyAgaGVsbDp+PgorICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzb21lIGludGVycnVwdHMgYXJlIHN0aWxsIGxpc3RlZCBhcyAnWFQgUElDJywgYnV0IHRoaXMgaXMgbm90IGEgcHJvYmxlbSwKK25vbmUgb2YgdGhvc2UgSVJRIHNvdXJjZXMgaXMgcGVyZm9ybWFuY2UtY3JpdGljYWwuCisKKworaW4gdGhlIHVubGlrZWx5IGNhc2UgdGhhdCB5b3VyIGJvYXJkIGRvZXMgbm90IGNyZWF0ZSBhIHdvcmtpbmcgbXAtdGFibGUsCit5b3UgY2FuIHVzZSB0aGUgcGlycT0gYm9vdCBwYXJhbWV0ZXIgdG8gJ2hhbmQtY29uc3RydWN0JyBJUlEgZW50cmllcy4gVGhpcworaXMgbm9udHJpdmlhbCB0aG91Z2ggYW5kIGNhbm5vdCBiZSBhdXRvbWF0ZWQuIE9uZSBzYW1wbGUgL2V0Yy9saWxvLmNvbmYKK2VudHJ5OgorCisJYXBwZW5kPSJwaXJxPTE1LDExLDEwIgorCit0aGUgYWN0dWFsIG51bWJlcnMgZGVwZW5kIG9uIHlvdXIgc3lzdGVtLCBvbiB5b3VyIFBDSSBjYXJkcyBhbmQgb24gdGhlaXIKK1BDSSBzbG90IHBvc2l0aW9uLiBVc3VhbGx5IFBDSSBzbG90cyBhcmUgJ2RhaXN5IGNoYWluZWQnIGJlZm9yZSB0aGV5IGFyZQorY29ubmVjdGVkIHRvIHRoZSBQQ0kgY2hpcHNldCBJUlEgcm91dGluZyBmYWNpbGl0eSAodGhlIGluY29taW5nIFBJUlExLTQKK2xpbmVzKToKKworICAgICAgICAgICAgICAgLC0uICAgICAgICAsLS4gICAgICAgICwtLiAgICAgICAgLC0uICAgICAgICAsLS4KKyAgICAgUElSUTQgLS0tLXwgfC0uICAgICwtfCB8LS4gICAgLC18IHwtLiAgICAsLXwgfC0tLS0tLS0tfCB8CisgICAgICAgICAgICAgICB8U3wgIFwgIC8gIHxTfCAgXCAgLyAgfFN8ICBcICAvICB8U3wgICAgICAgIHxTfAorICAgICBQSVJRMyAtLS0tfGx8LS4gYC8tLS18bHwtLiBgLy0tLXxsfC0uIGAvLS0tfGx8LS0tLS0tLS18bHwKKyAgICAgICAgICAgICAgIHxvfCAgXC8gICAgfG98ICBcLyAgICB8b3wgIFwvICAgIHxvfCAgICAgICAgfG98CisgICAgIFBJUlEyIC0tLS18dHwtLi9gLS0tLXx0fC0uL2AtLS0tfHR8LS4vYC0tLS18dHwtLS0tLS0tLXx0fAorICAgICAgICAgICAgICAgfDF8IC9cICAgICB8MnwgL1wgICAgIHwzfCAvXCAgICAgfDR8ICAgICAgICB8NXwKKyAgICAgUElSUTEgLS0tLXwgfC0gIGAtLS0tfCB8LSAgYC0tLS18IHwtICBgLS0tLXwgfC0tLS0tLS0tfCB8CisgICAgICAgICAgICAgICBgLScgICAgICAgIGAtJyAgICAgICAgYC0nICAgICAgICBgLScgICAgICAgIGAtJworCitldmVyeSBQQ0kgY2FyZCBlbWl0cyBhIFBDSSBJUlEsIHdoaWNoIGNhbiBiZSBJTlRBLElOVEIsSU5UQyxJTlREOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLC0uCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5URC0tfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFN8CisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UQy0tfGx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98CisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UQi0tfHR8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHh8CisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UQS0tfCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0nCisKK1RoZXNlIElOVEEtRCBQQ0kgSVJRcyBhcmUgYWx3YXlzICdsb2NhbCB0byB0aGUgY2FyZCcsIHRoZWlyIHJlYWwgbWVhbmluZworZGVwZW5kcyBvbiB3aGljaCBzbG90IHRoZXkgYXJlIGluLiBJZiB5b3UgbG9vayBhdCB0aGUgZGFpc3kgY2hhaW5pbmcgZGlhZ3JhbSwKK2EgY2FyZCBpbiBzbG90NCwgaXNzdWluZyBJTlRBIElSUSwgaXQgd2lsbCBlbmQgdXAgYXMgYSBzaWduYWwgb24gUElSUTIgb2YKK3RoZSBQQ0kgY2hpcHNldC4gTW9zdCBjYXJkcyBpc3N1ZSBJTlRBLCB0aGlzIGNyZWF0ZXMgb3B0aW1hbCBkaXN0cmlidXRpb24KK2JldHdlZW4gdGhlIFBJUlEgbGluZXMuIChkaXN0cmlidXRpbmcgSVJRIHNvdXJjZXMgcHJvcGVybHkgaXMgbm90IGEKK25lY2Vzc2l0eSwgUENJIElSUXMgY2FuIGJlIHNoYXJlZCBhdCB3aWxsLCBidXQgaXQncyBhIGdvb2QgZm9yIHBlcmZvcm1hbmNlCit0byBoYXZlIG5vbiBzaGFyZWQgaW50ZXJydXB0cykuIFNsb3Q1IHNob3VsZCBiZSB1c2VkIGZvciB2aWRlb2NhcmRzLCB0aGV5CitkbyBub3QgdXNlIGludGVycnVwdHMgbm9ybWFsbHksIHRodXMgdGhleSBhcmUgbm90IGRhaXN5IGNoYWluZWQgZWl0aGVyLgorCitzbyBpZiB5b3UgaGF2ZSB5b3VyIFNDU0kgY2FyZCAoSVJRMTEpIGluIFNsb3QxLCBUdWxpcCBjYXJkIChJUlE5KSBpbgorU2xvdDIsIHRoZW4geW91J2xsIGhhdmUgdG8gc3BlY2lmeSB0aGlzIHBpcnE9IGxpbmU6CisKKwlhcHBlbmQ9InBpcnE9MTEsOSIKKwordGhlIGZvbGxvd2luZyBzY3JpcHQgdHJpZXMgdG8gZmlndXJlIG91dCBzdWNoIGEgZGVmYXVsdCBwaXJxPSBsaW5lIGZyb20KK3lvdXIgUENJIGNvbmZpZ3VyYXRpb246CisKKwllY2hvIC1uIHBpcnE9OyBlY2hvIGBzY2FucGNpIHwgZ3JlcCBUX0wgfCBjdXQgLWM1Ni1gIHwgc2VkICdzLyAvLC9nJworCitub3RlIHRoYXQgdGhpcyBzY3JpcHQgd29udCB3b3JrIGlmIHlvdSBoYXZlIHNraXBwZWQgYSBmZXcgc2xvdHMgb3IgaWYgeW91cgorYm9hcmQgZG9lcyBub3QgZG8gZGVmYXVsdCBkYWlzeS1jaGFpbmluZy4gKG9yIHRoZSBJTy1BUElDIGhhcyB0aGUgUElSUSBwaW5zCitjb25uZWN0ZWQgaW4gc29tZSBzdHJhbmdlIHdheSkuIEUuZy4gaWYgaW4gdGhlIGFib3ZlIGNhc2UgeW91IGhhdmUgeW91ciBTQ1NJCitjYXJkIChJUlExMSkgaW4gU2xvdDMsIGFuZCBoYXZlIFNsb3QxIGVtcHR5OgorCisJYXBwZW5kPSJwaXJxPTAsOSwxMSIKKworW3ZhbHVlICcwJyBpcyBhIGdlbmVyaWMgJ3BsYWNlaG9sZGVyJywgcmVzZXJ2ZWQgZm9yIGVtcHR5IChvciBub24tSVJRIGVtaXR0aW5nKQorc2xvdHMuXQorCitnZW5lcmFsbHksIGl0J3MgYWx3YXlzIHBvc3NpYmxlIHRvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IHBpcnE9IHNldHRpbmdzLCBqdXN0CitwZXJtdXRlIGFsbCBJUlEgbnVtYmVycyBwcm9wZXJseSAuLi4gaXQgd2lsbCB0YWtlIHNvbWUgdGltZSB0aG91Z2guIEFuCisnaW5jb3JyZWN0JyBwaXJxIGxpbmUgd2lsbCBjYXVzZSB0aGUgYm9vdGluZyBwcm9jZXNzIHRvIGhhbmcsIG9yIGEgZGV2aWNlCit3b24ndCBmdW5jdGlvbiBwcm9wZXJseSAoaWYgaXQncyBpbnNlcnRlZCBhcyBlZy4gYSBtb2R1bGUpLgorCitJZiB5b3UgaGF2ZSAyIFBDSSBidXNlcywgdGhlbiB5b3UgY2FuIHVzZSB1cCB0byA4IHBpcnEgdmFsdWVzLiBBbHRob3VnaCBzdWNoCitib2FyZHMgdGVuZCB0byBoYXZlIGEgZ29vZCBjb25maWd1cmF0aW9uLgorCitCZSBwcmVwYXJlZCB0aGF0IGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHlvdSBuZWVkIHNvbWUgc3RyYW5nZSBwaXJxIGxpbmU6CisKKwlhcHBlbmQ9InBpcnE9MCwwLDAsMCwwLDAsOSwxMSIKKwordXNlIHNtYXJ0IHRyeS1hbmQtZXJyIHRlY2huaXF1ZXMgdG8gZmluZCBvdXQgdGhlIGNvcnJlY3QgcGlycSBsaW5lIC4uLgorCitnb29kIGx1Y2sgYW5kIG1haWwgdG8gbGludXgtc21wQHZnZXIua2VybmVsLm9yZyBvcgorbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyBpZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgdGhhdCBhcmUgbm90IGNvdmVyZWQKK2J5IHRoaXMgZG9jdW1lbnQuCisKKy0tIG1pbmdvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQ4ZjBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0CkBAIC0wLDAgKzEsNDQxIEBACisJCSAgICAgVEhFIExJTlVYL0kzODYgQk9PVCBQUk9UT0NPTAorCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+CisJCQlMYXN0IHVwZGF0ZSAyMDAyLTAxLTAxCisKK09uIHRoZSBpMzg2IHBsYXRmb3JtLCB0aGUgTGludXgga2VybmVsIHVzZXMgYSByYXRoZXIgY29tcGxpY2F0ZWQgYm9vdAorY29udmVudGlvbi4gIFRoaXMgaGFzIGV2b2x2ZWQgcGFydGlhbGx5IGR1ZSB0byBoaXN0b3JpY2FsIGFzcGVjdHMsIGFzCit3ZWxsIGFzIHRoZSBkZXNpcmUgaW4gdGhlIGVhcmx5IGRheXMgdG8gaGF2ZSB0aGUga2VybmVsIGl0c2VsZiBiZSBhCitib290YWJsZSBpbWFnZSwgdGhlIGNvbXBsaWNhdGVkIFBDIG1lbW9yeSBtb2RlbCBhbmQgZHVlIHRvIGNoYW5nZWQKK2V4cGVjdGF0aW9ucyBpbiB0aGUgUEMgaW5kdXN0cnkgY2F1c2VkIGJ5IHRoZSBlZmZlY3RpdmUgZGVtaXNlIG9mCityZWFsLW1vZGUgRE9TIGFzIGEgbWFpbnN0cmVhbSBvcGVyYXRpbmcgc3lzdGVtLgorCitDdXJyZW50bHksIGZvdXIgdmVyc2lvbnMgb2YgdGhlIExpbnV4L2kzODYgYm9vdCBwcm90b2NvbCBleGlzdC4KKworT2xkIGtlcm5lbHM6CXpJbWFnZS9JbWFnZSBzdXBwb3J0IG9ubHkuICBTb21lIHZlcnkgZWFybHkga2VybmVscworCQltYXkgbm90IGV2ZW4gc3VwcG9ydCBhIGNvbW1hbmQgbGluZS4KKworUHJvdG9jb2wgMi4wMDoJKEtlcm5lbCAxLjMuNzMpIEFkZGVkIGJ6SW1hZ2UgYW5kIGluaXRyZCBzdXBwb3J0LCBhcworCQl3ZWxsIGFzIGEgZm9ybWFsaXplZCB3YXkgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUKKwkJYm9vdCBsb2FkZXIgYW5kIHRoZSBrZXJuZWwuICBzZXR1cC5TIG1hZGUgcmVsb2NhdGFibGUsCisJCWFsdGhvdWdoIHRoZSB0cmFkaXRpb25hbCBzZXR1cCBhcmVhIHN0aWxsIGFzc3VtZWQKKwkJd3JpdGFibGUuCisKK1Byb3RvY29sIDIuMDE6CShLZXJuZWwgMS4zLjc2KSBBZGRlZCBhIGhlYXAgb3ZlcnJ1biB3YXJuaW5nLgorCitQcm90b2NvbCAyLjAyOgkoS2VybmVsIDIuNC4wLXRlc3QzLXByZTMpIE5ldyBjb21tYW5kIGxpbmUgcHJvdG9jb2wuCisJCUxvd2VyIHRoZSBjb252ZW50aW9uYWwgbWVtb3J5IGNlaWxpbmcuCU5vIG92ZXJ3cml0ZQorCQlvZiB0aGUgdHJhZGl0aW9uYWwgc2V0dXAgYXJlYSwgdGh1cyBtYWtpbmcgYm9vdGluZworCQlzYWZlIGZvciBzeXN0ZW1zIHdoaWNoIHVzZSB0aGUgRUJEQSBmcm9tIFNNTSBvciAzMi1iaXQKKwkJQklPUyBlbnRyeSBwb2ludHMuICB6SW1hZ2UgZGVwcmVjYXRlZCBidXQgc3RpbGwKKwkJc3VwcG9ydGVkLgorCitQcm90b2NvbCAyLjAzOgkoS2VybmVsIDIuNC4xOC1wcmUxKSBFeHBsaWNpdGx5IG1ha2VzIHRoZSBoaWdoZXN0IHBvc3NpYmxlCisJCWluaXRyZCBhZGRyZXNzIGF2YWlsYWJsZSB0byB0aGUgYm9vdGxvYWRlci4KKworCisqKioqIE1FTU9SWSBMQVlPVVQKKworVGhlIHRyYWRpdGlvbmFsIG1lbW9yeSBtYXAgZm9yIHRoZSBrZXJuZWwgbG9hZGVyLCB1c2VkIGZvciBJbWFnZSBvcgorekltYWdlIGtlcm5lbHMsIHR5cGljYWxseSBsb29rcyBsaWtlOgorCisJfAkJCSB8CiswQTAwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBSZXNlcnZlZCBmb3IgQklPUwkgfAlEbyBub3QgdXNlLiAgUmVzZXJ2ZWQgZm9yIEJJT1MgRUJEQS4KKzA5QTAwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgIFN0YWNrL2hlYXAvY21kbGluZQkgfAlGb3IgdXNlIGJ5IHRoZSBrZXJuZWwgcmVhbC1tb2RlIGNvZGUuCiswOTgwMDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsJCisJfCAgS2VybmVsIHNldHVwCQkgfAlUaGUga2VybmVsIHJlYWwtbW9kZSBjb2RlLgorMDkwMjAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgS2VybmVsIGJvb3Qgc2VjdG9yCSB8CVRoZSBrZXJuZWwgbGVnYWN5IGJvb3Qgc2VjdG9yLgorMDkwMDAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCAgUHJvdGVjdGVkLW1vZGUga2VybmVsIHwJVGhlIGJ1bGsgb2YgdGhlIGtlcm5lbCBpbWFnZS4KKzAxMDAwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgIEJvb3QgbG9hZGVyCQkgfAk8LSBCb290IHNlY3RvciBlbnRyeSBwb2ludCAwMDAwOjdDMDAKKzAwMTAwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXwgIFJlc2VydmVkIGZvciBNQlIvQklPUyB8CiswMDA4MDAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8ICBUeXBpY2FsbHkgdXNlZCBieSBNQlIgfAorMDAwNjAwCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIAorCXwgIEJJT1MgdXNlIG9ubHkJIHwKKzAwMDAwMAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1doZW4gdXNpbmcgYnpJbWFnZSwgdGhlIHByb3RlY3RlZC1tb2RlIGtlcm5lbCB3YXMgcmVsb2NhdGVkIHRvCisweDEwMDAwMCAoImhpZ2ggbWVtb3J5IiksIGFuZCB0aGUga2VybmVsIHJlYWwtbW9kZSBibG9jayAoYm9vdCBzZWN0b3IsCitzZXR1cCwgYW5kIHN0YWNrL2hlYXApIHdhcyBtYWRlIHJlbG9jYXRhYmxlIHRvIGFueSBhZGRyZXNzIGJldHdlZW4KKzB4MTAwMDAgYW5kIGVuZCBvZiBsb3cgbWVtb3J5LglVbmZvcnR1bmF0ZWx5LCBpbiBwcm90b2NvbHMgMi4wMCBhbmQKKzIuMDEgdGhlIGNvbW1hbmQgbGluZSBpcyBzdGlsbCByZXF1aXJlZCB0byBsaXZlIGluIHRoZSAweDlYWFhYIG1lbW9yeQorcmFuZ2UsIGFuZCB0aGF0IG1lbW9yeSByYW5nZSBpcyBzdGlsbCBvdmVyd3JpdHRlbiBieSB0aGUgZWFybHkga2VybmVsLgorVGhlIDIuMDIgcHJvdG9jb2wgcmVzb2x2ZXMgdGhhdCBwcm9ibGVtLgorCitJdCBpcyBkZXNpcmFibGUgdG8ga2VlcCB0aGUgIm1lbW9yeSBjZWlsaW5nIiAtLSB0aGUgaGlnaGVzdCBwb2ludCBpbgorbG93IG1lbW9yeSB0b3VjaGVkIGJ5IHRoZSBib290IGxvYWRlciAtLSBhcyBsb3cgYXMgcG9zc2libGUsIHNpbmNlCitzb21lIG5ld2VyIEJJT1NlcyBoYXZlIGJlZ3VuIHRvIGFsbG9jYXRlIHNvbWUgcmF0aGVyIGxhcmdlIGFtb3VudHMgb2YKK21lbW9yeSwgY2FsbGVkIHRoZSBFeHRlbmRlZCBCSU9TIERhdGEgQXJlYSwgbmVhciB0aGUgdG9wIG9mIGxvdworbWVtb3J5LgkgVGhlIGJvb3QgbG9hZGVyIHNob3VsZCB1c2UgdGhlICJJTlQgMTJoIiBCSU9TIGNhbGwgdG8gdmVyaWZ5Citob3cgbXVjaCBsb3cgbWVtb3J5IGlzIGF2YWlsYWJsZS4KKworVW5mb3J0dW5hdGVseSwgaWYgSU5UIDEyaCByZXBvcnRzIHRoYXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgaXMgdG9vCitsb3csIHRoZXJlIGlzIHVzdWFsbHkgbm90aGluZyB0aGUgYm9vdCBsb2FkZXIgY2FuIGRvIGJ1dCB0byByZXBvcnQgYW4KK2Vycm9yIHRvIHRoZSB1c2VyLiAgVGhlIGJvb3QgbG9hZGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgZGVzaWduZWQgdG8KK3Rha2UgdXAgYXMgbGl0dGxlIHNwYWNlIGluIGxvdyBtZW1vcnkgYXMgaXQgcmVhc29uYWJseSBjYW4uICBGb3IKK3pJbWFnZSBvciBvbGQgYnpJbWFnZSBrZXJuZWxzLCB3aGljaCBuZWVkIGRhdGEgd3JpdHRlbiBpbnRvIHRoZQorMHg5MDAwMCBzZWdtZW50LCB0aGUgYm9vdCBsb2FkZXIgc2hvdWxkIG1ha2Ugc3VyZSBub3QgdG8gdXNlIG1lbW9yeQorYWJvdmUgdGhlIDB4OUEwMDAgcG9pbnQ7IHRvbyBtYW55IEJJT1NlcyB3aWxsIGJyZWFrIGFib3ZlIHRoYXQgcG9pbnQuCisKKworKioqKiBUSEUgUkVBTC1NT0RFIEtFUk5FTCBIRUFERVIKKworSW4gdGhlIGZvbGxvd2luZyB0ZXh0LCBhbmQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCBib290IHNlcXVlbmNlLCAiYQorc2VjdG9yIiByZWZlcnMgdG8gNTEyIGJ5dGVzLiAgSXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGFjdHVhbCBzZWN0b3IKK3NpemUgb2YgdGhlIHVuZGVybHlpbmcgbWVkaXVtLgorCitUaGUgZmlyc3Qgc3RlcCBpbiBsb2FkaW5nIGEgTGludXgga2VybmVsIHNob3VsZCBiZSB0byBsb2FkIHRoZQorcmVhbC1tb2RlIGNvZGUgKGJvb3Qgc2VjdG9yIGFuZCBzZXR1cCBjb2RlKSBhbmQgdGhlbiBleGFtaW5lIHRoZQorZm9sbG93aW5nIGhlYWRlciBhdCBvZmZzZXQgMHgwMWYxLiAgVGhlIHJlYWwtbW9kZSBjb2RlIGNhbiB0b3RhbCB1cCB0bworMzJLLCBhbHRob3VnaCB0aGUgYm9vdCBsb2FkZXIgbWF5IGNob29zZSB0byBsb2FkIG9ubHkgdGhlIGZpcnN0IHR3bworc2VjdG9ycyAoMUspIGFuZCB0aGVuIGV4YW1pbmUgdGhlIGJvb3R1cCBzZWN0b3Igc2l6ZS4KKworVGhlIGhlYWRlciBsb29rcyBsaWtlOgorCitPZmZzZXQJUHJvdG8JTmFtZQkJTWVhbmluZworL1NpemUKKworMDFGMS8xCUFMTAlzZXR1cF9zZWN0cwlUaGUgc2l6ZSBvZiB0aGUgc2V0dXAgaW4gc2VjdG9ycworMDFGMi8yCUFMTAlyb290X2ZsYWdzCUlmIHNldCwgdGhlIHJvb3QgaXMgbW91bnRlZCByZWFkb25seQorMDFGNC8yCUFMTAlzeXNzaXplCQlETyBOT1QgVVNFIC0gZm9yIGJvb3RzZWN0LlMgdXNlIG9ubHkKKzAxRjYvMglBTEwJc3dhcF9kZXYJRE8gTk9UIFVTRSAtIG9ic29sZXRlCiswMUY4LzIJQUxMCXJhbV9zaXplCURPIE5PVCBVU0UgLSBmb3IgYm9vdHNlY3QuUyB1c2Ugb25seQorMDFGQS8yCUFMTAl2aWRfbW9kZQlWaWRlbyBtb2RlIGNvbnRyb2wKKzAxRkMvMglBTEwJcm9vdF9kZXYJRGVmYXVsdCByb290IGRldmljZSBudW1iZXIKKzAxRkUvMglBTEwJYm9vdF9mbGFnCTB4QUE1NSBtYWdpYyBudW1iZXIKKzAyMDAvMgkyLjAwKwlqdW1wCQlKdW1wIGluc3RydWN0aW9uCiswMjAyLzQJMi4wMCsJaGVhZGVyCQlNYWdpYyBzaWduYXR1cmUgIkhkclMiCiswMjA2LzIJMi4wMCsJdmVyc2lvbgkJQm9vdCBwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZAorMDIwOC80CTIuMDArCXJlYWxtb2RlX3N3dGNoCUJvb3QgbG9hZGVyIGhvb2sgKHNlZSBiZWxvdykKKzAyMEMvMgkyLjAwKwlzdGFydF9zeXMJVGhlIGxvYWQtbG93IHNlZ21lbnQgKDB4MTAwMCkgKG9ic29sZXRlKQorMDIwRS8yCTIuMDArCWtlcm5lbF92ZXJzaW9uCVBvaW50ZXIgdG8ga2VybmVsIHZlcnNpb24gc3RyaW5nCiswMjEwLzEJMi4wMCsJdHlwZV9vZl9sb2FkZXIJQm9vdCBsb2FkZXIgaWRlbnRpZmllcgorMDIxMS8xCTIuMDArCWxvYWRmbGFncwlCb290IHByb3RvY29sIG9wdGlvbiBmbGFncworMDIxMi8yCTIuMDArCXNldHVwX21vdmVfc2l6ZQlNb3ZlIHRvIGhpZ2ggbWVtb3J5IHNpemUgKHVzZWQgd2l0aCBob29rcykKKzAyMTQvNAkyLjAwKwljb2RlMzJfc3RhcnQJQm9vdCBsb2FkZXIgaG9vayAoc2VlIGJlbG93KQorMDIxOC80CTIuMDArCXJhbWRpc2tfaW1hZ2UJaW5pdHJkIGxvYWQgYWRkcmVzcyAoc2V0IGJ5IGJvb3QgbG9hZGVyKQorMDIxQy80CTIuMDArCXJhbWRpc2tfc2l6ZQlpbml0cmQgc2l6ZSAoc2V0IGJ5IGJvb3QgbG9hZGVyKQorMDIyMC80CTIuMDArCWJvb3RzZWN0X2tsdWRnZQlETyBOT1QgVVNFIC0gZm9yIGJvb3RzZWN0LlMgdXNlIG9ubHkKKzAyMjQvMgkyLjAxKwloZWFwX2VuZF9wdHIJRnJlZSBtZW1vcnkgYWZ0ZXIgc2V0dXAgZW5kCiswMjI2LzIJTi9BCXBhZDEJCVVudXNlZAorMDIyOC80CTIuMDIrCWNtZF9saW5lX3B0cgkzMi1iaXQgcG9pbnRlciB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZQorMDIyQy80CTIuMDMrCWluaXRyZF9hZGRyX21heAlIaWdoZXN0IGxlZ2FsIGluaXRyZCBhZGRyZXNzCisKK0ZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgdGhlIHNldHVwX3NlY3RzIGZpZWxkIGNvbnRhaW5zIDAsIHRoZQorcmVhbCB2YWx1ZSBpcyA0LgorCitJZiB0aGUgIkhkclMiICgweDUzNzI2NDQ4KSBtYWdpYyBudW1iZXIgaXMgbm90IGZvdW5kIGF0IG9mZnNldCAweDIwMiwKK3RoZSBib290IHByb3RvY29sIHZlcnNpb24gaXMgIm9sZCIuICBMb2FkaW5nIGFuIG9sZCBrZXJuZWwsIHRoZQorZm9sbG93aW5nIHBhcmFtZXRlcnMgc2hvdWxkIGJlIGFzc3VtZWQ6CisKKwlJbWFnZSB0eXBlID0gekltYWdlCisJaW5pdHJkIG5vdCBzdXBwb3J0ZWQKKwlSZWFsLW1vZGUga2VybmVsIG11c3QgYmUgbG9jYXRlZCBhdCAweDkwMDAwLgorCitPdGhlcndpc2UsIHRoZSAidmVyc2lvbiIgZmllbGQgY29udGFpbnMgdGhlIHByb3RvY29sIHZlcnNpb24sCitlLmcuIHByb3RvY29sIHZlcnNpb24gMi4wMSB3aWxsIGNvbnRhaW4gMHgwMjAxIGluIHRoaXMgZmllbGQuICBXaGVuCitzZXR0aW5nIGZpZWxkcyBpbiB0aGUgaGVhZGVyLCB5b3UgbXVzdCBtYWtlIHN1cmUgb25seSB0byBzZXQgZmllbGRzCitzdXBwb3J0ZWQgYnkgdGhlIHByb3RvY29sIHZlcnNpb24gaW4gdXNlLgorCitUaGUgImtlcm5lbF92ZXJzaW9uIiBmaWVsZCwgaWYgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSwgY29udGFpbnMgYQorcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZCBodW1hbi1yZWFkYWJsZSBrZXJuZWwgdmVyc2lvbiBudW1iZXIKK3N0cmluZywgbGVzcyAweDIwMC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUga2VybmVsIHZlcnNpb24gdG8KK3RoZSB1c2VyLiAgVGhpcyB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuICgweDIwMCpzZXR1cF9zZWN0cykuICBGb3IKK2V4YW1wbGUsIGlmIHRoaXMgdmFsdWUgaXMgc2V0IHRvIDB4MWMwMCwgdGhlIGtlcm5lbCB2ZXJzaW9uIG51bWJlcgorc3RyaW5nIGNhbiBiZSBmb3VuZCBhdCBvZmZzZXQgMHgxZTAwIGluIHRoZSBrZXJuZWwgZmlsZS4gIFRoaXMgaXMgYQordmFsaWQgdmFsdWUgaWYgYW5kIG9ubHkgaWYgdGhlICJzZXR1cF9zZWN0cyIgZmllbGQgY29udGFpbnMgdGhlIHZhbHVlCisxNCBvciBoaWdoZXIuCisKK01vc3QgYm9vdCBsb2FkZXJzIHdpbGwgc2ltcGx5IGxvYWQgdGhlIGtlcm5lbCBhdCBpdHMgdGFyZ2V0IGFkZHJlc3MKK2RpcmVjdGx5LiAgU3VjaCBib290IGxvYWRlcnMgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgZmlsbGluZyBpbgorbW9zdCBvZiB0aGUgZmllbGRzIGluIHRoZSBoZWFkZXIuICBUaGUgZm9sbG93aW5nIGZpZWxkcyBzaG91bGQgYmUKK2ZpbGxlZCBvdXQsIGhvd2V2ZXI6CisKKyAgdmlkX21vZGU6CisJUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiBvbiBTUEVDSUFMIENPTU1BTkQgTElORSBPUFRJT05TLgorCisgIHR5cGVfb2ZfbG9hZGVyOgorCUlmIHlvdXIgYm9vdCBsb2FkZXIgaGFzIGFuIGFzc2lnbmVkIGlkIChzZWUgdGFibGUgYmVsb3cpLCBlbnRlcgorCTB4VFYgaGVyZSwgd2hlcmUgVCBpcyBhbiBpZGVudGlmaWVyIGZvciB0aGUgYm9vdCBsb2FkZXIgYW5kIFYgaXMKKwlhIHZlcnNpb24gbnVtYmVyLiAgT3RoZXJ3aXNlLCBlbnRlciAweEZGIGhlcmUuCisKKwlBc3NpZ25lZCBib290IGxvYWRlciBpZHM6CisJMCAgTElMTworCTEgIExvYWRsaW4KKwkyICBib290c2VjdC1sb2FkZXIKKwkzICBTWVNMSU5VWAorCTQgIEV0aGVyQm9vdAorCTUgIEVMSUxPCisJNyAgR1J1QgorCTggIFUtQk9PVAorCisJUGxlYXNlIGNvbnRhY3QgPGhwYUB6eXRvci5jb20+IGlmIHlvdSBuZWVkIGEgYm9vdGxvYWRlciBJRAorCXZhbHVlIGFzc2lnbmVkLgorCisgIGxvYWRmbGFncywgaGVhcF9lbmRfcHRyOgorCUlmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGlzIDIuMDEgb3IgaGlnaGVyLCBlbnRlciB0aGUKKwlvZmZzZXQgbGltaXQgb2YgdGhlIHNldHVwIGhlYXAgaW50byBoZWFwX2VuZF9wdHIgYW5kIHNldCB0aGUKKwkweDgwIGJpdCAoQ0FOX1VTRV9IRUFQKSBvZiBsb2FkZmxhZ3MuICBoZWFwX2VuZF9wdHIgYXBwZWFycyB0bworCWJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiBzZXR1cCAob2Zmc2V0IDB4MDIwMCkuCisKKyAgc2V0dXBfbW92ZV9zaXplOiAKKwlXaGVuIHVzaW5nIHByb3RvY29sIDIuMDAgb3IgMi4wMSwgaWYgdGhlIHJlYWwgbW9kZQorCWtlcm5lbCBpcyBub3QgbG9hZGVkIGF0IDB4OTAwMDAsIGl0IGdldHMgbW92ZWQgdGhlcmUgbGF0ZXIgaW4KKwl0aGUgbG9hZGluZyBzZXF1ZW5jZS4gIEZpbGwgaW4gdGhpcyBmaWVsZCBpZiB5b3Ugd2FudAorCWFkZGl0aW9uYWwgZGF0YSAoc3VjaCBhcyB0aGUga2VybmVsIGNvbW1hbmQgbGluZSkgbW92ZWQgaW4KKwlhZGRpdGlvbiB0byB0aGUgcmVhbC1tb2RlIGtlcm5lbCBpdHNlbGYuCisKKyAgcmFtZGlza19pbWFnZSwgcmFtZGlza19zaXplOgorCUlmIHlvdXIgYm9vdCBsb2FkZXIgaGFzIGxvYWRlZCBhbiBpbml0aWFsIHJhbWRpc2sgKGluaXRyZCksCisJc2V0IHJhbWRpc2tfaW1hZ2UgdG8gdGhlIDMyLWJpdCBwb2ludGVyIHRvIHRoZSByYW1kaXNrIGRhdGEKKwlhbmQgdGhlIHJhbWRpc2tfc2l6ZSB0byB0aGUgc2l6ZSBvZiB0aGUgcmFtZGlzayBkYXRhLgorCisJVGhlIGluaXRyZCBzaG91bGQgdHlwaWNhbGx5IGJlIGxvY2F0ZWQgYXMgaGlnaCBpbiBtZW1vcnkgYXMKKwlwb3NzaWJsZSwgYXMgaXQgbWF5IG90aGVyd2lzZSBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIGVhcmx5CisJa2VybmVsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgkgSG93ZXZlciwgaXQgbXVzdCBuZXZlciBiZQorCWxvY2F0ZWQgYWJvdmUgdGhlIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBpbml0cmRfYWRkcl9tYXgKKwlmaWVsZC4JVGhlIGluaXRyZCBzaG91bGQgYmUgYXQgbGVhc3QgNEsgcGFnZSBhbGlnbmVkLgorCisgIGNtZF9saW5lX3B0cjoKKwlJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBpcyAyLjAyIG9yIGhpZ2hlciwgdGhpcyBpcyBhIDMyLWJpdAorCXBvaW50ZXIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBUaGUga2VybmVsIGNvbW1hbmQgbGluZQorCWNhbiBiZSBsb2NhdGVkIGFueXdoZXJlIGJldHdlZW4gdGhlIGVuZCBvZiBzZXR1cCBhbmQgMHhBMDAwMC4KKwlGaWxsIGluIHRoaXMgZmllbGQgZXZlbiBpZiB5b3VyIGJvb3QgbG9hZGVyIGRvZXMgbm90IHN1cHBvcnQgYQorCWNvbW1hbmQgbGluZSwgaW4gd2hpY2ggY2FzZSB5b3UgY2FuIHBvaW50IHRoaXMgdG8gYW4gZW1wdHkKKwlzdHJpbmcgKG9yIGJldHRlciB5ZXQsIHRvIHRoZSBzdHJpbmcgImF1dG8iLikgIElmIHRoaXMgZmllbGQKKwlpcyBsZWZ0IGF0IHplcm8sIHRoZSBrZXJuZWwgd2lsbCBhc3N1bWUgdGhhdCB5b3VyIGJvb3QgbG9hZGVyCisJZG9lcyBub3Qgc3VwcG9ydCB0aGUgMi4wMisgcHJvdG9jb2wuCisKKyAgcmFtZGlza19tYXg6CisJVGhlIG1heGltdW0gYWRkcmVzcyB0aGF0IG1heSBiZSBvY2N1cGllZCBieSB0aGUgaW5pdHJkCisJY29udGVudHMuICBGb3IgYm9vdCBwcm90b2NvbHMgMi4wMiBvciBlYXJsaWVyLCB0aGlzIGZpZWxkIGlzCisJbm90IHByZXNlbnQsIGFuZCB0aGUgbWF4aW11bSBhZGRyZXNzIGlzIDB4MzdGRkZGRkYuICAoVGhpcworCWFkZHJlc3MgaXMgZGVmaW5lZCBhcyB0aGUgYWRkcmVzcyBvZiB0aGUgaGlnaGVzdCBzYWZlIGJ5dGUsIHNvCisJaWYgeW91ciByYW1kaXNrIGlzIGV4YWN0bHkgMTMxMDcyIGJ5dGVzIGxvbmcgYW5kIHRoaXMgZmllbGQgaXMKKwkweDM3RkZGRkZGLCB5b3UgY2FuIHN0YXJ0IHlvdXIgcmFtZGlzayBhdCAweDM3RkUwMDAwLikKKworCisqKioqIFRIRSBLRVJORUwgQ09NTUFORCBMSU5FCisKK1RoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGhhcyBiZWNvbWUgYW4gaW1wb3J0YW50IHdheSBmb3IgdGhlIGJvb3QKK2xvYWRlciB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBrZXJuZWwuICBTb21lIG9mIGl0cyBvcHRpb25zIGFyZSBhbHNvCityZWxldmFudCB0byB0aGUgYm9vdCBsb2FkZXIgaXRzZWxmLCBzZWUgInNwZWNpYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMiCitiZWxvdy4KKworVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHVwIHRvIDI1NQorY2hhcmFjdGVycyBsb25nLCBwbHVzIHRoZSBmaW5hbCBudWxsLgorCitJZiB0aGUgYm9vdCBwcm90b2NvbCB2ZXJzaW9uIGlzIDIuMDIgb3IgbGF0ZXIsIHRoZSBhZGRyZXNzIG9mIHRoZQora2VybmVsIGNvbW1hbmQgbGluZSBpcyBnaXZlbiBieSB0aGUgaGVhZGVyIGZpZWxkIGNtZF9saW5lX3B0ciAoc2VlCithYm92ZS4pCisKK0lmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGlzICpub3QqIDIuMDIgb3IgaGlnaGVyLCB0aGUga2VybmVsCitjb21tYW5kIGxpbmUgaXMgZW50ZXJlZCB1c2luZyB0aGUgZm9sbG93aW5nIHByb3RvY29sOgorCisJQXQgb2Zmc2V0IDB4MDAyMCAod29yZCksICJjbWRfbGluZV9tYWdpYyIsIGVudGVyIHRoZSBtYWdpYworCW51bWJlciAweEEzM0YuCisKKwlBdCBvZmZzZXQgMHgwMDIyICh3b3JkKSwgImNtZF9saW5lX29mZnNldCIsIGVudGVyIHRoZSBvZmZzZXQKKwlvZiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAocmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZQorCXJlYWwtbW9kZSBrZXJuZWwpLgorCQorCVRoZSBrZXJuZWwgY29tbWFuZCBsaW5lICptdXN0KiBiZSB3aXRoaW4gdGhlIG1lbW9yeSByZWdpb24KKwljb3ZlcmVkIGJ5IHNldHVwX21vdmVfc2l6ZSwgc28geW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGlzCisJZmllbGQuCisKKworKioqKiBTQU1QTEUgQk9PVCBDT05GSUdVUkFUSU9OCisKK0FzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24sIGFzc3VtZSB0aGUgZm9sbG93aW5nIGxheW91dCBvZiB0aGUgcmVhbAorbW9kZSBzZWdtZW50OgorCisJMHgwMDAwLTB4N0ZGRglSZWFsIG1vZGUga2VybmVsCisJMHg4MDAwLTB4OEZGRglTdGFjayBhbmQgaGVhcAorCTB4OTAwMC0weDkwRkYJS2VybmVsIGNvbW1hbmQgbGluZQorCitTdWNoIGEgYm9vdCBsb2FkZXIgc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBoZWFkZXI6CisKKwl1bnNpZ25lZCBsb25nIGJhc2VfcHRyOwkvKiBiYXNlIGFkZHJlc3MgZm9yIHJlYWwtbW9kZSBzZWdtZW50ICovCisKKwlpZiAoIHNldHVwX3NlY3RzID09IDAgKSB7CisJCXNldHVwX3NlY3RzID0gNDsKKwl9CisKKwlpZiAoIHByb3RvY29sID49IDB4MDIwMCApIHsKKwkJdHlwZV9vZl9sb2FkZXIgPSA8dHlwZSBjb2RlPjsKKwkJaWYgKCBsb2FkaW5nX2luaXRyZCApIHsKKwkJCXJhbWRpc2tfaW1hZ2UgPSA8aW5pdHJkX2FkZHJlc3M+OworCQkJcmFtZGlza19zaXplID0gPGluaXRyZF9zaXplPjsKKwkJfQorCQlpZiAoIHByb3RvY29sID49IDB4MDIwMSApIHsKKwkJCWhlYXBfZW5kX3B0ciA9IDB4OTAwMCAtIDB4MjAwOworCQkJbG9hZGZsYWdzIHw9IDB4ODA7IC8qIENBTl9VU0VfSEVBUCAqLworCQl9CisJCWlmICggcHJvdG9jb2wgPj0gMHgwMjAyICkgeworCQkJY21kX2xpbmVfcHRyID0gYmFzZV9wdHIgKyAweDkwMDA7CisJCX0gZWxzZSB7CisJCQljbWRfbGluZV9tYWdpYwk9IDB4QTMzRjsKKwkJCWNtZF9saW5lX29mZnNldCA9IDB4OTAwMDsKKwkJCXNldHVwX21vdmVfc2l6ZSA9IDB4OTEwMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFZlcnkgb2xkIGtlcm5lbCAqLworCisJCWNtZF9saW5lX21hZ2ljCT0gMHhBMzNGOworCQljbWRfbGluZV9vZmZzZXQgPSAweDkwMDA7CisKKwkJLyogQSB2ZXJ5IG9sZCBrZXJuZWwgTVVTVCBoYXZlIGl0cyByZWFsLW1vZGUgY29kZQorCQkgICBsb2FkZWQgYXQgMHg5MDAwMCAqLworCisJCWlmICggYmFzZV9wdHIgIT0gMHg5MDAwMCApIHsKKwkJCS8qIENvcHkgdGhlIHJlYWwtbW9kZSBrZXJuZWwgKi8KKwkJCW1lbWNweSgweDkwMDAwLCBiYXNlX3B0ciwgKHNldHVwX3NlY3RzKzEpKjUxMik7CisJCQkvKiBDb3B5IHRoZSBjb21tYW5kIGxpbmUgKi8KKwkJCW1lbWNweSgweDk5MDAwLCBiYXNlX3B0cisweDkwMDAsIDI1Nik7CisKKwkJCWJhc2VfcHRyID0gMHg5MDAwMDsJCSAvKiBSZWxvY2F0ZWQgKi8KKwkJfQorCisJCS8qIEl0IGlzIHJlY29tbWVuZGVkIHRvIGNsZWFyIG1lbW9yeSB1cCB0byB0aGUgMzJLIG1hcmsgKi8KKwkJbWVtc2V0KDB4OTAwMDAgKyAoc2V0dXBfc2VjdHMrMSkqNTEyLCAwLAorCQkgICAgICAgKDY0LShzZXR1cF9zZWN0cysxKSkqNTEyKTsKKwl9CisKKworKioqKiBMT0FESU5HIFRIRSBSRVNUIE9GIFRIRSBLRVJORUwKKworVGhlIG5vbi1yZWFsLW1vZGUga2VybmVsIHN0YXJ0cyBhdCBvZmZzZXQgKHNldHVwX3NlY3RzKzEpKjUxMiBpbiB0aGUKK2tlcm5lbCBmaWxlIChhZ2FpbiwgaWYgc2V0dXBfc2VjdHMgPT0gMCB0aGUgcmVhbCB2YWx1ZSBpcyA0LikgIEl0CitzaG91bGQgYmUgbG9hZGVkIGF0IGFkZHJlc3MgMHgxMDAwMCBmb3IgSW1hZ2UvekltYWdlIGtlcm5lbHMgYW5kCisweDEwMDAwMCBmb3IgYnpJbWFnZSBrZXJuZWxzLgorCitUaGUga2VybmVsIGlzIGEgYnpJbWFnZSBrZXJuZWwgaWYgdGhlIHByb3RvY29sID49IDIuMDAgYW5kIHRoZSAweDAxCitiaXQgKExPQURfSElHSCkgaW4gdGhlIGxvYWRmbGFncyBmaWVsZCBpcyBzZXQ6CisKKwlpc19iekltYWdlID0gKHByb3RvY29sID49IDB4MDIwMCkgJiYgKGxvYWRmbGFncyAmIDB4MDEpOworCWxvYWRfYWRkcmVzcyA9IGlzX2J6SW1hZ2UgPyAweDEwMDAwMCA6IDB4MTAwMDA7CisKK05vdGUgdGhhdCBJbWFnZS96SW1hZ2Uga2VybmVscyBjYW4gYmUgdXAgdG8gNTEySyBpbiBzaXplLCBhbmQgdGh1cyB1c2UKK3RoZSBlbnRpcmUgMHgxMDAwMC0weDkwMDAwIHJhbmdlIG9mIG1lbW9yeS4gIFRoaXMgbWVhbnMgaXQgaXMgcHJldHR5CittdWNoIGEgcmVxdWlyZW1lbnQgZm9yIHRoZXNlIGtlcm5lbHMgdG8gbG9hZCB0aGUgcmVhbC1tb2RlIHBhcnQgYXQKKzB4OTAwMDAuICBiekltYWdlIGtlcm5lbHMgYWxsb3cgbXVjaCBtb3JlIGZsZXhpYmlsaXR5LgorCisKKyoqKiogU1BFQ0lBTCBDT01NQU5EIExJTkUgT1BUSU9OUworCitJZiB0aGUgY29tbWFuZCBsaW5lIHByb3ZpZGVkIGJ5IHRoZSBib290IGxvYWRlciBpcyBlbnRlcmVkIGJ5IHRoZQordXNlciwgdGhlIHVzZXIgbWF5IGV4cGVjdCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHdvcmsuCitUaGV5IHNob3VsZCBub3JtYWxseSBub3QgYmUgZGVsZXRlZCBmcm9tIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGV2ZW4KK3Rob3VnaCBub3QgYWxsIG9mIHRoZW0gYXJlIGFjdHVhbGx5IG1lYW5pbmdmdWwgdG8gdGhlIGtlcm5lbC4gIEJvb3QKK2xvYWRlciBhdXRob3JzIHdobyBuZWVkIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIHRoZSBib290Citsb2FkZXIgaXRzZWxmIHNob3VsZCBnZXQgdGhlbSByZWdpc3RlcmVkIGluCitEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCB0byBtYWtlIHN1cmUgdGhleSB3aWxsIG5vdAorY29uZmxpY3Qgd2l0aCBhY3R1YWwga2VybmVsIG9wdGlvbnMgbm93IG9yIGluIHRoZSBmdXR1cmUuCisKKyAgdmdhPTxtb2RlPgorCTxtb2RlPiBoZXJlIGlzIGVpdGhlciBhbiBpbnRlZ2VyIChpbiBDIG5vdGF0aW9uLCBlaXRoZXIKKwlkZWNpbWFsLCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwpIG9yIG9uZSBvZiB0aGUgc3RyaW5ncworCSJub3JtYWwiIChtZWFuaW5nIDB4RkZGRiksICJleHQiIChtZWFuaW5nIDB4RkZGRSkgb3IgImFzayIKKwkobWVhbmluZyAweEZGRkQpLiAgVGhpcyB2YWx1ZSBzaG91bGQgYmUgZW50ZXJlZCBpbnRvIHRoZQorCXZpZF9tb2RlIGZpZWxkLCBhcyBpdCBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgYmVmb3JlIHRoZSBjb21tYW5kCisJbGluZSBpcyBwYXJzZWQuCisKKyAgbWVtPTxzaXplPgorCTxzaXplPiBpcyBhbiBpbnRlZ2VyIGluIEMgbm90YXRpb24gb3B0aW9uYWxseSBmb2xsb3dlZCBieSBLLCBNCisJb3IgRyAobWVhbmluZyA8PCAxMCwgPDwgMjAgb3IgPDwgMzApLiAgVGhpcyBzcGVjaWZpZXMgdGhlIGVuZAorCW9mIG1lbW9yeSB0byB0aGUga2VybmVsLiBUaGlzIGFmZmVjdHMgdGhlIHBvc3NpYmxlIHBsYWNlbWVudAorCW9mIGFuIGluaXRyZCwgc2luY2UgYW4gaW5pdHJkIHNob3VsZCBiZSBwbGFjZWQgbmVhciBlbmQgb2YKKwltZW1vcnkuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiBvcHRpb24gdG8gKmJvdGgqIHRoZSBrZXJuZWwgYW5kCisJdGhlIGJvb3Rsb2FkZXIhCisKKyAgaW5pdHJkPTxmaWxlPgorCUFuIGluaXRyZCBzaG91bGQgYmUgbG9hZGVkLiAgVGhlIG1lYW5pbmcgb2YgPGZpbGU+IGlzCisJb2J2aW91c2x5IGJvb3Rsb2FkZXItZGVwZW5kZW50LCBhbmQgc29tZSBib290IGxvYWRlcnMKKwkoZS5nLiBMSUxPKSBkbyBub3QgaGF2ZSBzdWNoIGEgY29tbWFuZC4KKworSW4gYWRkaXRpb24sIHNvbWUgYm9vdCBsb2FkZXJzIGFkZCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gdGhlCit1c2VyLXNwZWNpZmllZCBjb21tYW5kIGxpbmU6CisKKyAgQk9PVF9JTUFHRT08ZmlsZT4KKwlUaGUgYm9vdCBpbWFnZSB3aGljaCB3YXMgbG9hZGVkLiAgQWdhaW4sIHRoZSBtZWFuaW5nIG9mIDxmaWxlPgorCWlzIG9idmlvdXNseSBib290bG9hZGVyLWRlcGVuZGVudC4KKworICBhdXRvCisJVGhlIGtlcm5lbCB3YXMgYm9vdGVkIHdpdGhvdXQgZXhwbGljaXQgdXNlciBpbnRlcnZlbnRpb24uCisKK0lmIHRoZXNlIG9wdGlvbnMgYXJlIGFkZGVkIGJ5IHRoZSBib290IGxvYWRlciwgaXQgaXMgaGlnaGx5CityZWNvbW1lbmRlZCB0aGF0IHRoZXkgYXJlIGxvY2F0ZWQgKmZpcnN0KiwgYmVmb3JlIHRoZSB1c2VyLXNwZWNpZmllZAorb3IgY29uZmlndXJhdGlvbi1zcGVjaWZpZWQgY29tbWFuZCBsaW5lLiAgT3RoZXJ3aXNlLCAiaW5pdD0vYmluL3NoIgorZ2V0cyBjb25mdXNlZCBieSB0aGUgImF1dG8iIG9wdGlvbi4KKworCisqKioqIFJVTk5JTkcgVEhFIEtFUk5FTAorCitUaGUga2VybmVsIGlzIHN0YXJ0ZWQgYnkganVtcGluZyB0byB0aGUga2VybmVsIGVudHJ5IHBvaW50LCB3aGljaCBpcworbG9jYXRlZCBhdCAqc2VnbWVudCogb2Zmc2V0IDB4MjAgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHJlYWwgbW9kZQora2VybmVsLiAgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBsb2FkZWQgeW91ciByZWFsLW1vZGUga2VybmVsIGNvZGUgYXQKKzB4OTAwMDAsIHRoZSBrZXJuZWwgZW50cnkgcG9pbnQgaXMgOTAyMDowMDAwLgorCitBdCBlbnRyeSwgZHMgPSBlcyA9IHNzIHNob3VsZCBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIHJlYWwtbW9kZQora2VybmVsIGNvZGUgKDB4OTAwMCBpZiB0aGUgY29kZSBpcyBsb2FkZWQgYXQgMHg5MDAwMCksIHNwIHNob3VsZCBiZQorc2V0IHVwIHByb3Blcmx5LCBub3JtYWxseSBwb2ludGluZyB0byB0aGUgdG9wIG9mIHRoZSBoZWFwLCBhbmQKK2ludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkLiAgRnVydGhlcm1vcmUsIHRvIGd1YXJkIGFnYWluc3QgYnVncyBpbgordGhlIGtlcm5lbCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgYm9vdCBsb2FkZXIgc2V0cyBmcyA9IGdzID0gZHMgPQorZXMgPSBzcy4KKworSW4gb3VyIGV4YW1wbGUgZnJvbSBhYm92ZSwgd2Ugd291bGQgZG86CisKKwkvKiBOb3RlOiBpbiB0aGUgY2FzZSBvZiB0aGUgIm9sZCIga2VybmVsIHByb3RvY29sLCBiYXNlX3B0ciBtdXN0CisJICAgYmUgPT0gMHg5MDAwMCBhdCB0aGlzIHBvaW50OyBzZWUgdGhlIHByZXZpb3VzIHNhbXBsZSBjb2RlICovCisKKwlzZWcgPSBiYXNlX3B0ciA+PiA0OworCisJY2xpKCk7CS8qIEVudGVyIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCEgKi8KKworCS8qIFNldCB1cCB0aGUgcmVhbC1tb2RlIGtlcm5lbCBzdGFjayAqLworCV9TUyA9IHNlZzsKKwlfU1AgPSAweDkwMDA7CS8qIExvYWQgU1AgaW1tZWRpYXRlbHkgYWZ0ZXIgbG9hZGluZyBTUyEgKi8KKworCV9EUyA9IF9FUyA9IF9GUyA9IF9HUyA9IHNlZzsKKwlqbXBfZmFyKHNlZysweDIwLCAwKTsJLyogUnVuIHRoZSBrZXJuZWwgKi8KKworSWYgeW91ciBib290IHNlY3RvciBhY2Nlc3NlcyBhIGZsb3BweSBkcml2ZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8KK3N3aXRjaCBvZmYgdGhlIGZsb3BweSBtb3RvciBiZWZvcmUgcnVubmluZyB0aGUga2VybmVsLCBzaW5jZSB0aGUKK2tlcm5lbCBib290IGxlYXZlcyBpbnRlcnJ1cHRzIG9mZiBhbmQgdGh1cyB0aGUgbW90b3Igd2lsbCBub3QgYmUKK3N3aXRjaGVkIG9mZiwgZXNwZWNpYWxseSBpZiB0aGUgbG9hZGVkIGtlcm5lbCBoYXMgdGhlIGZsb3BweSBkcml2ZXIgYXMKK2EgZGVtYW5kLWxvYWRlZCBtb2R1bGUhCisKKworKioqKiBBRFZBTkNFRCBCT09UIFRJTUUgSE9PS1MKKworSWYgdGhlIGJvb3QgbG9hZGVyIHJ1bnMgaW4gYSBwYXJ0aWN1bGFybHkgaG9zdGlsZSBlbnZpcm9ubWVudCAoc3VjaCBhcworTE9BRExJTiwgd2hpY2ggcnVucyB1bmRlciBET1MpIGl0IG1heSBiZSBpbXBvc3NpYmxlIHRvIGZvbGxvdyB0aGUKK3N0YW5kYXJkIG1lbW9yeSBsb2NhdGlvbiByZXF1aXJlbWVudHMuICBTdWNoIGEgYm9vdCBsb2FkZXIgbWF5IHVzZSB0aGUKK2ZvbGxvd2luZyBob29rcyB0aGF0LCBpZiBzZXQsIGFyZSBpbnZva2VkIGJ5IHRoZSBrZXJuZWwgYXQgdGhlCithcHByb3ByaWF0ZSB0aW1lLiAgVGhlIHVzZSBvZiB0aGVzZSBob29rcyBzaG91bGQgcHJvYmFibHkgYmUKK2NvbnNpZGVyZWQgYW4gYWJzb2x1dGVseSBsYXN0IHJlc29ydCEKKworSU1QT1JUQU5UOiBBbGwgdGhlIGhvb2tzIGFyZSByZXF1aXJlZCB0byBwcmVzZXJ2ZSAlZXNwLCAlZWJwLCAlZXNpIGFuZAorJWVkaSBhY3Jvc3MgaW52b2NhdGlvbi4KKworICByZWFsbW9kZV9zd3RjaDoKKwlBIDE2LWJpdCByZWFsIG1vZGUgZmFyIHN1YnJvdXRpbmUgaW52b2tlZCBpbW1lZGlhdGVseSBiZWZvcmUKKwllbnRlcmluZyBwcm90ZWN0ZWQgbW9kZS4gIFRoZSBkZWZhdWx0IHJvdXRpbmUgZGlzYWJsZXMgTk1JLCBzbworCXlvdXIgcm91dGluZSBzaG91bGQgcHJvYmFibHkgZG8gc28sIHRvby4KKworICBjb2RlMzJfc3RhcnQ6CisJQSAzMi1iaXQgZmxhdC1tb2RlIHJvdXRpbmUgKmp1bXBlZCogdG8gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCisJdHJhbnNpdGlvbiB0byBwcm90ZWN0ZWQgbW9kZSwgYnV0IGJlZm9yZSB0aGUga2VybmVsIGlzCisJdW5jb21wcmVzc2VkLiAgTm8gc2VnbWVudHMsIGV4Y2VwdCBDUywgYXJlIHNldCB1cDsgeW91IHNob3VsZAorCXNldCB0aGVtIHVwIHRvIEtFUk5FTF9EUyAoMHgxOCkgeW91cnNlbGYuCisKKwlBZnRlciBjb21wbGV0aW5nIHlvdXIgaG9vaywgeW91IHNob3VsZCBqdW1wIHRvIHRoZSBhZGRyZXNzCisJdGhhdCB3YXMgaW4gdGhpcyBmaWVsZCBiZWZvcmUgeW91ciBib290IGxvYWRlciBvdmVyd3JvdGUgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kzODYvdXNiLWxlZ2FjeS1zdXBwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni91c2ItbGVnYWN5LXN1cHBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTRjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kzODYvdXNiLWxlZ2FjeS1zdXBwb3J0LnR4dApAQCAtMCwwICsxLDQ0IEBACitVU0IgTGVnYWN5IHN1cHBvcnQKK35+fn5+fn5+fn5+fn5+fn5+fgorCitWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PiwgSmFudWFyeSAyMDA0CisKKworQWxzbyBrbm93biBhcyAiVVNCIEtleWJvYXJkIiBvciAiVVNCIE1vdXNlIHN1cHBvcnQiIGluIHRoZSBCSU9TIFNldHVwIGlzIGEKK2ZlYXR1cmUgdGhhdCBhbGxvd3Mgb25lIHRvIHVzZSB0aGUgVVNCIG1vdXNlIGFuZCBrZXlib2FyZCBhcyBpZiB0aGV5IHdlcmUKK3RoZWlyIGNsYXNzaWMgUFMvMiBjb3VudGVycGFydHMuICBUaGlzIG1lYW5zIG9uZSBjYW4gdXNlIGFuIFVTQiBrZXlib2FyZCB0bwordHlwZSBpbiBMSUxPIGZvciBleGFtcGxlLgorCitJdCBoYXMgc2V2ZXJhbCBkcmF3YmFja3MsIHRob3VnaDoKKworMSkgT24gc29tZSBtYWNoaW5lcywgdGhlIGVtdWxhdGVkIFBTLzIgbW91c2UgdGFrZXMgb3ZlciBldmVuIHdoZW4gbm8gVVNCCisgICBtb3VzZSBpcyBwcmVzZW50IGFuZCBhIHJlYWwgUFMvMiBtb3VzZSBpcyBwcmVzZW50LiAgSW4gdGhhdCBjYXNlIHRoZSBleHRyYQorICAgZmVhdHVyZXMgKHdoZWVsLCBleHRyYSBidXR0b25zLCB0b3VjaHBhZCBtb2RlKSBvZiB0aGUgcmVhbCBQUy8yIG1vdXNlIG1heQorICAgbm90IGJlIGF2YWlsYWJsZS4KKworMikgSWYgQ09ORklHX0hJR0hNRU02NEcgaXMgZW5hYmxlZCwgdGhlIFBTLzIgbW91c2UgZW11bGF0aW9uIGNhbiBjYXVzZQorICAgc3lzdGVtIGNyYXNoZXMsIGJlY2F1c2UgdGhlIFNNTSBCSU9TIGlzIG5vdCBleHBlY3RpbmcgdG8gYmUgaW4gUEFFIG1vZGUuCisgICBUaGUgSW50ZWwgRTc1MDUgaXMgYSB0eXBpY2FsIG1hY2hpbmUgd2hlcmUgdGhpcyBoYXBwZW5zLgorCiszKSBJZiBBTUQ2NCA2NC1iaXQgbW9kZSBpcyBlbmFibGVkLCBhZ2FpbiBzeXN0ZW0gY3Jhc2hlcyBvZnRlbiBoYXBwZW4sCisgICBiZWNhdXNlIHRoZSBTTU0gQklPUyBpc24ndCBleHBlY3RpbmcgdGhlIENQVSB0byBiZSBpbiA2NC1iaXQgbW9kZS4gIFRoZQorICAgQklPUyBtYW51ZmFjdHVyZXJzIG9ubHkgdGVzdCB3aXRoIFdpbmRvd3MsIGFuZCBXaW5kb3dzIGRvZXNuJ3QgZG8gNjQtYml0CisgICB5ZXQuCisKK1NvbHV0aW9uczoKKworUHJvYmxlbSAxKSBjYW4gYmUgc29sdmVkIGJ5IGxvYWRpbmcgdGhlIFVTQiBkcml2ZXJzIHByaW9yIHRvIGxvYWRpbmcgdGhlCitQUy8yIG1vdXNlIGRyaXZlci4gU2luY2UgdGhlIFBTLzIgbW91c2UgZHJpdmVyIGlzIGluIDIuNiBjb21waWxlZCBpbnRvCit0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSwgdGhpcyBtZWFucyB0aGUgVVNCIGRyaXZlcnMgbmVlZCB0byBiZQorY29tcGlsZWQtaW4sIHRvby4KKworUHJvYmxlbSAyKSBjYW4gY3VycmVudGx5IG9ubHkgYmUgc29sdmVkIGJ5IGVpdGhlciBkaXNhYmxpbmcgSElHSE1FTTY0RworaW4gdGhlIGtlcm5lbCBjb25maWcgb3IgVVNCIExlZ2FjeSBzdXBwb3J0IGluIHRoZSBCSU9TLiBBIEJJT1MgdXBkYXRlCitjb3VsZCBoZWxwLCBidXQgc28gZmFyIG5vIHN1Y2ggdXBkYXRlIGV4aXN0cy4KKworUHJvYmxlbSAzKSBpcyB1c3VhbGx5IGZpeGVkIGJ5IGEgQklPUyB1cGRhdGUuIENoZWNrIHRoZSBib2FyZAorbWFudWZhY3R1cmVycyB3ZWIgc2l0ZS4gSWYgYW4gdXBkYXRlIGlzIG5vdCBhdmFpbGFibGUsIGRpc2FibGUgVVNCCitMZWdhY3kgc3VwcG9ydCBpbiB0aGUgQklPUy4gSWYgdGhpcyBhbG9uZSBkb2Vzbid0IGhlbHAsIHRyeSBhbHNvIGFkZGluZworaWRsZT1wb2xsIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGUgQklPUyBtYXkgYmUgZW50ZXJpbmcgdGhlIFNNTQorb24gdGhlIEhMVCBpbnN0cnVjdGlvbiBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kzODYvemVyby1wYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni96ZXJvLXBhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YzA1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2kzODYvemVyby1wYWdlLnR4dApAQCAtMCwwICsxLDg0IEBACitTdW1tYXJ5IG9mIGJvb3RfcGFyYW1zIGxheW91dCAoa2VybmVsIHBvaW50IG9mIHZpZXcpCisgICAgICggY29sbGVjdGVkIGJ5IEhhbnMgTGVybWVuIGFuZCBNYXJ0aW4gTWFyZXMgKQorIAorVGhlIGNvbnRlbnRzIG9mIGJvb3RfcGFyYW1zIGFyZSB1c2VkIHRvIHBhc3MgcGFyYW1ldGVycyBmcm9tIHRoZQorMTYtYml0IHJlYWxtb2RlIGNvZGUgb2YgdGhlIGtlcm5lbCB0byB0aGUgMzItYml0IHBhcnQuIFJlZmVyZW5jZXMvc2V0dGluZ3MKK3RvIGl0IG1haW5seSBhcmUgaW46CisKKyAgYXJjaC9pMzg2L2Jvb3Qvc2V0dXAuUworICBhcmNoL2kzODYvYm9vdC92aWRlby5TCisgIGFyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCisgIGFyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYworIAorCitPZmZzZXQJVHlwZQkJRGVzY3JpcHRpb24KKy0tLS0tLSAgLS0tLQkJLS0tLS0tLS0tLS0KKyAgICAwCTMyIGJ5dGVzCXN0cnVjdCBzY3JlZW5faW5mbywgU0NSRUVOX0lORk8KKwkJCUFUVEVOVElPTiwgb3ZlcmxhcHMgdGhlIGZvbGxvd2luZyAhISEKKyAgICAyCXVuc2lnbmVkIHNob3J0CUVYVF9NRU1fSywgZXh0ZW5kZWQgbWVtb3J5IHNpemUgaW4gS2IgKGZyb20gaW50IDB4MTUpCisgMHgyMAl1bnNpZ25lZCBzaG9ydAlDTF9NQUdJQywgY29tbWFuZGxpbmUgbWFnaWMgbnVtYmVyICg9MHhBMzNGKQorIDB4MjIJdW5zaWduZWQgc2hvcnQJQ0xfT0ZGU0VULCBjb21tYW5kbGluZSBvZmZzZXQKKwkJCUFkZHJlc3Mgb2YgY29tbWFuZGxpbmUgaXMgY2FsY3VsYXRlZDoKKwkJCSAgMHg5MDAwMCArIGNvbnRlbnRzIG9mIENMX09GRlNFVAorCQkJKG9ubHkgdGFrZW4sIHdoZW4gQ0xfTUFHSUMgPSAweEEzM0YpCisgMHg0MAkyMCBieXRlcwlzdHJ1Y3QgYXBtX2Jpb3NfaW5mbywgQVBNX0JJT1NfSU5GTworIDB4NjAJMTYgYnl0ZXMJSW50ZWwgU3BlZWRTdGVwIChJU1QpIEJJT1Mgc3VwcG9ydCBpbmZvcm1hdGlvbgorIDB4ODAJMTYgYnl0ZXMJaGQwLWRpc2stcGFyYW1ldGVyIGZyb20gaW50dmVjdG9yIDB4NDEKKyAweDkwCTE2IGJ5dGVzCWhkMS1kaXNrLXBhcmFtZXRlciBmcm9tIGludHZlY3RvciAweDQ2CisKKyAweGEwCTE2IGJ5dGVzCVN5c3RlbSBkZXNjcmlwdGlvbiB0YWJsZSB0cnVuY2F0ZWQgdG8gMTYgYnl0ZXMuCisJCQkoIHN0cnVjdCBzeXNfZGVzY190YWJsZV9zdHJ1Y3QgKQorIDB4YjAgLSAweDEzZgkJRnJlZS4gQWRkIG1vcmUgcGFyYW1ldGVycyBoZXJlIGlmIHlvdSByZWFsbHkgbmVlZCB0aGVtLgorIDB4MTQwLSAweDFiZQkJRURJRF9JTkZPIFZpZGVvIG1vZGUgc2V0dXAKKworMHgxYzQJdW5zaWduZWQgbG9uZwlFRkkgc3lzdGVtIHRhYmxlIHBvaW50ZXIKKzB4MWM4CXVuc2lnbmVkIGxvbmcJRUZJIG1lbW9yeSBkZXNjcmlwdG9yIHNpemUKKzB4MWNjCXVuc2lnbmVkIGxvbmcJRUZJIG1lbW9yeSBkZXNjcmlwdG9yIHZlcnNpb24KKzB4MWQwCXVuc2lnbmVkIGxvbmcJRUZJIG1lbW9yeSBkZXNjcmlwdG9yIG1hcCBwb2ludGVyCisweDFkNAl1bnNpZ25lZCBsb25nCUVGSSBtZW1vcnkgZGVzY3JpcHRvciBtYXAgc2l6ZQorMHgxZTAJdW5zaWduZWQgbG9uZwlBTFRfTUVNX0ssIGFsdGVybmF0aXZlIG1lbSBjaGVjaywgaW4gS2IKKzB4MWU4CWNoYXIJCW51bWJlciBvZiBlbnRyaWVzIGluIEU4MjBNQVAgKGJlbG93KQorMHgxZTkJdW5zaWduZWQgY2hhcgludW1iZXIgb2YgZW50cmllcyBpbiBFRERCVUYgKGJlbG93KQorMHgxZWEJdW5zaWduZWQgY2hhcgludW1iZXIgb2YgZW50cmllcyBpbiBFRERfTUJSX1NJR19CVUZGRVIgKGJlbG93KQorMHgxZjEJY2hhcgkJc2l6ZSBvZiBzZXR1cC5TLCBudW1iZXIgb2Ygc2VjdG9ycworMHgxZjIJdW5zaWduZWQgc2hvcnQJTU9VTlRfUk9PVF9SRE9OTFkgKGlmICE9MCkKKzB4MWY0CXVuc2lnbmVkIHNob3J0CXNpemUgb2YgY29tcHJlc3NlZCBrZXJuZWwtcGFydCBpbiB0aGUKKwkJCShiKXpJbWFnZS1maWxlIChpbiAxNiBieXRlIHVuaXRzLCByb3VuZGVkIHVwKQorMHgxZjYJdW5zaWduZWQgc2hvcnQJc3dhcF9kZXYgKHVudXNlZCBBRkFJSykKKzB4MWY4CXVuc2lnbmVkIHNob3J0CVJBTURJU0tfRkxBR1MKKzB4MWZhCXVuc2lnbmVkIHNob3J0CVZHQS1Nb2RlIChvbGQgb25lKQorMHgxZmMJdW5zaWduZWQgc2hvcnQJT1JJR19ST09UX0RFViAoaGlnaD1NYWpvciwgbG93PW1pbm9yKQorMHgxZmYJY2hhcgkJQVVYX0RFVklDRV9JTkZPCisKKzB4MjAwCXNob3J0IGp1bXAgdG8gc3RhcnQgb2Ygc2V0dXAgY29kZSBha2EgInJlc2VydmVkIiBmaWVsZC4KKzB4MjAyCTQgYnl0ZXMJCVNpZ25hdHVyZSBmb3IgU0VUVVAtaGVhZGVyLCA9IkhkclMiCisweDIwNgl1bnNpZ25lZCBzaG9ydAlWZXJzaW9uIG51bWJlciBvZiBoZWFkZXIgZm9ybWF0CisJCQlDdXJyZW50IHZlcnNpb24gaXMgMHgwMjAxLi4uCisweDIwOAk4IGJ5dGVzCQkodXNlZCBieSBzZXR1cC5TIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYm9vdCBsb2FkZXJzLAorCQkJIGxvb2sgdGhlcmUpCisweDIxMAljaGFyCQlMT0FERVJfVFlQRSwgPSAwLCBvbGQgb25lCisJCQllbHNlIGl0IGlzIHNldCBieSB0aGUgbG9hZGVyOgorCQkJMHhUVjogVD0wIGZvciBMSUxPCisJCQkJMSBmb3IgTG9hZGxpbgorCQkJCTIgZm9yIGJvb3RzZWN0LWxvYWRlcgorCQkJCTMgZm9yIFNZU0xJTlVYCisJCQkJNCBmb3IgRVRIRVJCT09UCisJCQkJViA9IHZlcnNpb24KKzB4MjExCWNoYXIJCWxvYWRmbGFnczoKKwkJCWJpdDAgPSAxOiBrZXJuZWwgaXMgbG9hZGVkIGhpZ2ggKGJ6SW1hZ2UpCisJCQliaXQ3ID0gMTogSGVhcCBhbmQgcG9pbnRlciAoc2VlIGJlbG93KSBzZXQgYnkgYm9vdAorCQkJCSAgbG9hZGVyLgorMHgyMTIJdW5zaWduZWQgc2hvcnQJKHNldHVwLlMpCisweDIxNAl1bnNpZ25lZCBsb25nCUtFUk5FTF9TVEFSVCwgd2hlcmUgdGhlIGxvYWRlciBzdGFydGVkIHRoZSBrZXJuZWwKKzB4MjE4CXVuc2lnbmVkIGxvbmcJSU5JVFJEX1NUQVJULCBhZGRyZXNzIG9mIGxvYWRlZCByYW1kaXNrIGltYWdlCisweDIxYwl1bnNpZ25lZCBsb25nCUlOSVRSRF9TSVpFLCBzaXplIGluIGJ5dGVzIG9mIHJhbWRpc2sgaW1hZ2UKKzB4MjIwCTQgYnl0ZXMJCShzZXR1cC5TKQorMHgyMjQJdW5zaWduZWQgc2hvcnQJc2V0dXAuUyBoZWFwIGVuZCBwb2ludGVyCisweDIyNiAgIHVuc2lnbmVkIHNob3J0CXplcm9fcGFkCisweDIyOCAgIHVuc2lnbmVkIGxvbmcJY21kX2xpbmVfcHRyCisweDIyYyAgIHVuc2lnbmVkIGxvbmcJcmFtZGlza19tYXgKKzB4MjMwICAgMTYgYnl0ZXMgCXRyYW1wb2xpbmUKKzB4MjkwIC0gMHgyY2YJCUVERF9NQlJfU0lHX0JVRkZFUiAoZWRkLlMpCisweDJkMCAtIDB4NjAwCQlFODIwTUFQCisweDYwMCAtIDB4N2ZmCQlFRERCVUYgKGVkZC5TKSBmb3IgZGlzayBzaWduYXR1cmUgcmVhZCBzZWN0b3IKKzB4NjAwIC0gMHg3ZWIJCUVEREJVRiAoZWRkLlMpIGZvciBlZGQgZGF0YQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L0lSUS1yZWRpci50eHQgYi9Eb2N1bWVudGF0aW9uL2lhNjQvSVJRLXJlZGlyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2JkNzIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L0lSUS1yZWRpci50eHQKQEAgLTAsMCArMSw2OSBAQAorSVJRIGFmZmluaXR5IG9uIElBNjQgcGxhdGZvcm1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDA3LjAxLjIwMDIsIEVyaWNoIEZvY2h0IDxlZm9jaHRAZXNzLm5lYy5kZT4KKworCitCeSB3cml0aW5nIHRvIC9wcm9jL2lycS9JUlEjL3NtcF9hZmZpbml0eSB0aGUgaW50ZXJydXB0IHJvdXRpbmcgY2FuIGJlCitjb250cm9sbGVkLiBUaGUgYmVoYXZpb3Igb24gSUE2NCBwbGF0Zm9ybXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20KK3RoYXQgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vSVJRLWFmZmluaXR5LnR4dCBmb3IgaTM4NiBzeXN0ZW1zLgorCitCZWNhdXNlIG9mIHRoZSB1c2FnZSBvZiBTQVBJQyBtb2RlIGFuZCBwaHlzaWNhbCBkZXN0aW5hdGlvbiBtb2RlIHRoZQorSVJRIHRhcmdldCBpcyBvbmUgcGFydGljdWxhciBDUFUgYW5kIGNhbm5vdCBiZSBhIG1hc2sgb2Ygc2V2ZXJhbAorQ1BVcy4gT25seSB0aGUgZmlyc3Qgbm9uLXplcm8gYml0IGlzIHRha2VuIGludG8gYWNjb3VudC4KKworCitVc2FnZSBleGFtcGxlczoKKworVGhlIHRhcmdldCBDUFUgaGFzIHRvIGJlIHNwZWNpZmllZCBhcyBhIGhleGFkZWNpbWFsIENQVSBtYXNrLiBUaGUKK2ZpcnN0IG5vbi16ZXJvIGJpdCBpcyB0aGUgc2VsZWN0ZWQgQ1BVLiBUaGlzIGZvcm1hdCBoYXMgYmVlbiBrZXB0IGZvcgorY29tcGF0aWJpbGl0eSByZWFzb25zIHdpdGggaTM4Ni4KKworU2V0IHRoZSBkZWxpdmVyeSBtb2RlIG9mIGludGVycnVwdCA0MSB0byBmaXhlZCBhbmQgcm91dGUgdGhlCitpbnRlcnJ1cHRzIHRvIENQVSAjMyAobG9naWNhbCBDUFUgbnVtYmVyKSAoMl4zPTB4MDgpOgorICAgICBlY2hvICI4IiA+L3Byb2MvaXJxLzQxL3NtcF9hZmZpbml0eQorCitTZXQgdGhlIGRlZmF1bHQgcm91dGUgZm9yIElSUSBudW1iZXIgNDEgdG8gQ1BVIDYgaW4gbG93ZXN0IHByaW9yaXR5CitkZWxpdmVyeSBtb2RlIChyZWRpcmVjdGFibGUpOgorICAgICBlY2hvICJyIDQwIiA+L3Byb2MvaXJxLzQxL3NtcF9hZmZpbml0eQorCitUaGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kCisgICAgIGNhdCAvcHJvYy9pcnEvSVJRIy9zbXBfYWZmaW5pdHkKK2dpdmVzIHRoZSB0YXJnZXQgQ1BVIG1hc2sgZm9yIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0IHZlY3Rvci4gSWYgdGhlIENQVQorbWFzayBpcyBwcmVjZWRlZCBieSB0aGUgY2hhcmFjdGVyICJyIiwgdGhlIGludGVycnVwdCBpcyByZWRpcmVjdGFibGUKKyhpLmUuIGxvd2VzdCBwcmlvcml0eSBtb2RlIHJvdXRpbmcgaXMgdXNlZCksIG90aGVyd2lzZSBpdHMgcm91dGUgaXMKK2ZpeGVkLgorCisKKworSW5pdGlhbGl6YXRpb24gYW5kIGRlZmF1bHQgYmVoYXZpb3I6CisKK0lmIHRoZSBwbGF0Zm9ybSBmZWF0dXJlcyBJUlEgcmVkaXJlY3Rpb24gKGluZm8gcHJvdmlkZWQgYnkgU0FMKSBhbGwKK0lPLVNBUElDIGludGVycnVwdHMgYXJlIGluaXRpYWxpemVkIHdpdGggQ1BVIzAgYXMgdGhlaXIgZGVmYXVsdCB0YXJnZXQKK2FuZCB0aGUgcm91dGluZyBpcyB0aGUgc28gY2FsbGVkICJsb3dlc3QgcHJpb3JpdHkgbW9kZSIgKGFjdHVhbGx5CitmaXhlZCBTQVBJQyBtb2RlIHdpdGggaGludCkuIFRoZSBYVFAgY2hpcHNldCByZWdpc3RlcnMgYXJlIHVzZWQgYXMgaGludHMKK2ZvciB0aGUgSVJRIHJvdXRpbmcuIEN1cnJlbnRseSBpbiBMaW51eCBYVFAgcmVnaXN0ZXJzIGNhbiBoYXZlIHRocmVlCit2YWx1ZXM6CisJLSBtaW5pbWFsIGZvciBhbiBpZGxlIHRhc2ssCisJLSBub3JtYWwgaWYgYW55IG90aGVyIHRhc2sgcnVucywKKwktIG1heGltYWwgaWYgdGhlIENQVSBpcyBnb2luZyB0byBiZSBzd2l0Y2hlZCBvZmYuCitUaGUgSVJRIGlzIHJvdXRlZCB0byB0aGUgQ1BVIHdpdGggbG93ZXN0IFhUUCByZWdpc3RlciB2YWx1ZSwgdGhlCitzZWFyY2ggYmVnaW5zIGF0IHRoZSBkZWZhdWx0IENQVS4gVGhlcmVmb3JlIG1vc3Qgb2YgdGhlIGludGVycnVwdHMKK3dpbGwgYmUgaGFuZGxlZCBieSBDUFUgIzAuCisKK0lmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IGZlYXR1cmUgaW50ZXJydXB0IHJlZGlyZWN0aW9uIElPU0FQSUMgZml4ZWQKK3JvdXRpbmcgaXMgdXNlZC4gVGhlIHRhcmdldCBDUFVzIGFyZSBkaXN0cmlidXRlZCBpbiBhIHJvdW5kIHJvYmluCittYW5uZXIuIElSUXMgd2lsbCBiZSByb3V0ZWQgb25seSB0byB0aGUgc2VsZWN0ZWQgdGFyZ2V0IENQVXMuIENoZWNrCit3aXRoCisgICAgICAgIGNhdCAvcHJvYy9pbnRlcnJ1cHRzCisKKworCitDb21tZW50czoKKworT24gbGFyZ2UgKG11bHRpLW5vZGUpIHN5c3RlbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gcm91dGUgdGhlIElSUXMgdG8KK3RoZSBub2RlIHRvIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBpcyBjb25uZWN0ZWQuCitGb3Igc3lzdGVtcyBsaWtlIHRoZSBORUMgQXp1c0Egd2UgZ2V0IElSUSBub2RlLWFmZmluaXR5IGZvciBmcmVlLiBUaGlzCitpcyBiZWNhdXNlIHVzdWFsbHkgdGhlIGNoaXBzZXRzIG9uIGVhY2ggbm9kZSByZWRpcmVjdCB0aGUgaW50ZXJydXB0cworb25seSB0byB0aGVpciBvd24gQ1BVcyAoYXMgdGhleSBjYW5ub3Qgc2VlIHRoZSBYVFAgcmVnaXN0ZXJzIG9uIHRoZQorb3RoZXIgbm9kZXMpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9pYTY0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE3ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L1JFQURNRQpAQCAtMCwwICsxLDQzIEBACisgICAgICAgIExpbnV4IGtlcm5lbCByZWxlYXNlIDIuNC54eCBmb3IgdGhlIElBLTY0IFBsYXRmb3JtCisKKyAgIFRoZXNlIGFyZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgTGludXggdmVyc2lvbiAyLjQgZm9yIElBLTY0CisgICBwbGF0Zm9ybS4gIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gSUEtNjQKKyAgIE9OTFksIHRvIGdldCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eCBrZXJuZWwgYWxzbworICAgcmVhZCB0aGUgb3JpZ2luYWwgTGludXggUkVBRE1FIHByb3ZpZGVkIHdpdGggdGhlIGtlcm5lbC4KKworSU5TVEFMTElORyB0aGUga2VybmVsOgorCisgLSBJQS02NCBrZXJuZWwgaW5zdGFsbGF0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBvdGhlciBwbGF0Zm9ybXMsIHNlZQorICAgb3JpZ2luYWwgUkVBRE1FIGZvciBkZXRhaWxzLgorCisKK1NPRlRXQVJFIFJFUVVJUkVNRU5UUworCisgICBDb21waWxpbmcgYW5kIHJ1bm5pbmcgdGhpcyBrZXJuZWwgcmVxdWlyZXMgYW4gSUEtNjQgY29tcGxpYW50IEdDQworICAgY29tcGlsZXIuICBBbmQgdmFyaW91cyBzb2Z0d2FyZSBwYWNrYWdlcyBhbHNvIGNvbXBpbGVkIHdpdGggYW4KKyAgIElBLTY0IGNvbXBsaWFudCBHQ0MgY29tcGlsZXIuCisKKworQ09ORklHVVJJTkcgdGhlIGtlcm5lbDoKKworICAgQ29uZmlndXJhdGlvbiBpcyB0aGUgc2FtZSwgc2VlIG9yaWdpbmFsIFJFQURNRSBmb3IgZGV0YWlscy4KKworCitDT01QSUxJTkcgdGhlIGtlcm5lbDoKKworIC0gQ29tcGlsaW5nIHRoaXMga2VybmVsIGRvZXNuJ3QgZGlmZmVyIGZyb20gb3RoZXIgcGxhdGZvcm0gc28gcmVhZAorICAgdGhlIG9yaWdpbmFsIFJFQURNRSBmb3IgZGV0YWlscyBCVVQgbWFrZSBzdXJlIHlvdSBoYXZlIGFuIElBLTY0CisgICBjb21wbGlhbnQgR0NDIGNvbXBpbGVyLgorCitJQS02NCBTUEVDSUZJQ1MKKworIC0gR2VuZXJhbCBpc3N1ZXM6CisKKyAgICBvIEhhcmRseSBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIGhhcyBiZWVuIGRvbmUuIE9idmlvdXMgdGFyZ2V0cworICAgICAgaW5jbHVkZSB0aGUgbGlicmFyeSByb3V0aW5lcyAoSVAgY2hlY2tzdW0sIGV0Yy4pLiBMZXNzCisgICAgICBvYnZpb3VzIHRhcmdldHMgaW5jbHVkZSBtYWtpbmcgc3VyZSB3ZSBkb24ndCBmbHVzaCB0aGUgVExCCisgICAgICBuZWVkbGVzc2x5LCBldGMuCisKKyAgICBvIFNNUCBsb2NrcyBjbGVhbnVwL29wdGltaXphdGlvbgorCisgICAgbyBJQTMyIHN1cHBvcnQuICBDdXJyZW50bHkgZXhwZXJpbWVudGFsLiAgSXQgbW9zdGx5IHdvcmtzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L2VmaXJ0Yy50eHQgYi9Eb2N1bWVudGF0aW9uL2lhNjQvZWZpcnRjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGUyYzFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2VmaXJ0Yy50eHQKQEAgLTAsMCArMSwxMjggQEAKK0VGSSBSZWFsIFRpbWUgQ2xvY2sgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTLiBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+CitNYXJjaCAyMDAwCisKK0kvIEludHJvZHVjdGlvbgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZWZpcnRjLmMgZHJpdmVyIGhhcyBwcm92aWRlZCBmb3IKK3RoZSBJQS02NCBwbGF0Zm9ybS4gCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgZHJpdmVyIGlzIHRvIHN1cHBseSBhbiBBUEkgZm9yIGtlcm5lbCBhbmQgdXNlciBhcHBsaWNhdGlvbnMKK3RvIGdldCBhY2Nlc3MgdG8gdGhlIFRpbWUgU2VydmljZSBvZmZlcmVkIGJ5IEVGSSB2ZXJzaW9uIDAuOTIuCisKK0VGSSBwcm92aWRlcyA0IGNhbGxzIG9uZSBjYW4gbWFrZSBvbmNlIHRoZSBPUyBpcyBib290ZWQ6IEdldFRpbWUoKSwKK1NldFRpbWUoKSwgR2V0V2FrZXVwVGltZSgpLCBTZXRXYWtldXBUaW1lKCkgd2hpY2ggYXJlIGFsbCBzdXBwb3J0ZWQgYnkgdGhpcworZHJpdmVyLiBXZSBkZXNjcmliZSB0aG9zZSBjYWxscyBhcyB3ZWxsIHRoZSBkZXNpZ24gb2YgdGhlIGRyaXZlciBpbiB0aGUKK2ZvbGxvd2luZyBzZWN0aW9ucy4KKworSUkvIERlc2lnbiBEZWNpc2lvbnMKKworVGhlIG9yaWdpbmFsIGlkZWFzIHdhcyB0byBwcm92aWRlIGEgdmVyeSBzaW1wbGUgZHJpdmVyIHRvIGdldCBhY2Nlc3MgdG8sIAorYXQgZmlyc3QsIHRoZSB0aW1lIG9mIGRheSBzZXJ2aWNlLiBUaGlzIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGFjY2VzcywgaW4gYSAKK3BvcnRhYmxlIHdheSwgdGhlIENNT1MgY2xvY2suIEEgcHJvZ3JhbSBsaWtlIC9zYmluL2h3Y2xvY2sgdXNlcyBzdWNoIGEgY2xvY2sgCit0byBpbml0aWFsaXplIHRoZSBzeXN0ZW0gdmlldyBvZiB0aGUgdGltZSBkdXJpbmcgYm9vdC4KKworQmVjYXVzZSB3ZSB3YW50ZWQgdG8gbWluaW1pemUgdGhlIGltcGFjdCBvbiBleGlzdGluZyB1c2VyLWxldmVsIGFwcHMgdXNpbmcKK3RoZSBDTU9TIGNsb2NrLCB3ZSBkZWNpZGVkIHRvIGV4cG9zZSBhbiBBUEkgdGhhdCB3YXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBvbmUKK3VzZWQgdG9kYXkgd2l0aCB0aGUgbGVnYWN5IFJUQyBkcml2ZXIgKGRyaXZlci9jaGFyL3J0Yy5jKS4gSG93ZXZlciwgYmVjYXVzZSAKK0VGSSBwcm92aWRlcyBhIHNpbXBsZXIgc2VydmljZXMsIG5vdCBhbGwgYWxsIGlvY3RsKCkgYXJlIGF2YWlsYWJsZS4gQWxzbworbmV3IGlvY3RsKClzIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIGZvciB0aGluZ3MgdGhhdCBFRkkgcHJvdmlkZXMgYnV0IG5vdCB0aGUgCitsZWdhY3kuCisKK0VGSSB1c2VzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheSBvZiByZXByZXNlbnRpbmcgdGhlIHRpbWUsIG5vdGljZWFibHkKK3RoZSByZWZlcmVuY2UgZGF0ZSBpcyBkaWZmZXJlbnQuIFllYXIgaXMgdGhlIHVzaW5nIHRoZSBmdWxsIDQtZGlnaXQgZm9ybWF0LgorVGhlIEVwb2NoIGlzIEphbnVhcnkgMXN0IDE5OTguIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgZG9uJ3QKK2V4cG9zZSB0aGlzIG5ldyB3YXkgb2YgcmVwcmVzZW50aW5nIHRpbWUuIEluc3RlYWQgd2UgdXNlIHNvbWV0aGluZyB2ZXJ5IAorc2ltaWxhciB0byB0aGUgc3RydWN0IHRtLCBpLmUuIHN0cnVjdCBydGNfdGltZSwgYXMgdXNlZCBieSBod2Nsb2NrLgorT25lIG9mIHRoZSByZWFzb25zIGZvciBkb2luZyBpdCB0aGlzIHdheSBpcyB0byBhbGxvdyBmb3IgRUZJIHRvIHN0aWxsIGV2b2x2ZQord2l0aG91dCBuZWNlc3NhcmlseSBpbXBhY3RpbmcgYW55IG9mIHRoZSB1c2VyIGFwcGxpY2F0aW9ucy4gVGhlIGRlY291cGxpbmcKK2VuYWJsZXMgZmxleGliaWxpdHkgYW5kIHBlcm1pdHMgd3JpdGluZyB3cmFwcGVyIGNvZGUgaXMgbmNhc2UgdGhpbmdzIGNoYW5nZS4KKworVGhlIGRyaXZlciBleHBvc2VzIHR3byBpbnRlcmZhY2VzLCBvbmUgdmlhIHRoZSBkZXZpY2UgZmlsZSBhbmQgYSBzZXQgb2YKK2lvY3RsKClzLiBUaGUgb3RoZXIgaXMgcmVhZC1vbmx5IHZpYSB0aGUgL3Byb2MgZmlsZXN5c3RlbS4gCisKK0FzIG9mIHRvZGF5IHdlIGRvbid0IG9mZmVyIGEgL3Byb2Mvc3lzIGludGVyZmFjZS4KKworVG8gYWxsb3cgZm9yIGEgdW5pZm9ybSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbGVnYWN5IFJUQyBhbmQgRUZJIHRpbWUgc2VydmljZSwKK3dlIGhhdmUgY3JlYXRlZCB0aGUgaW5jbHVkZS9saW51eC9ydGMuaCBoZWFkZXIgZmlsZSB0byBjb250YWluIG9ubHkgdGhlIAorInB1YmxpYyIgQVBJIG9mIHRoZSB0d28gZHJpdmVycy4gIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGxlZ2FjeSBSVEMgYXJlIHN0aWxsIAoraW4gaW5jbHVkZS9saW51eC9tYzE0NjgxOHJ0Yy5oLgorCisgCitJSUkvIFRpbWUgb2YgZGF5IHNlcnZpY2UKKworVGhlIHBhcnQgb2YgdGhlIGRyaXZlciBnaXZlcyBhY2Nlc3MgdG8gdGhlIHRpbWUgb2YgZGF5IHNlcnZpY2Ugb2YgRUZJLgorVHdvIGlvY3RsKClzLCBjb21wYXRpYmxlIHdpdGggdGhlIGxlZ2FjeSBSVEMgY2FsbHM6CisKKwlSZWFkIHRoZSBDTU9TIGNsb2NrOiBpb2N0bChkLCBSVENfUkRfVElNRSwgJnJ0Yyk7CisKKwlXcml0ZSB0aGUgQ01PUyBjbG9jazogaW9jdGwoZCwgUlRDX1NFVF9USU1FLCAmcnRjKTsKKworVGhlIHJ0YyBpcyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSBkZWZpbmVkIGluIHJ0Yy5oIHdoaWNoIGlzIGNsb3NlCit0byBhIHN0cnVjdCB0bToKKworc3RydWN0IHJ0Y190aW1lIHsKKyAgICAgICAgaW50IHRtX3NlYzsKKyAgICAgICAgaW50IHRtX21pbjsKKyAgICAgICAgaW50IHRtX2hvdXI7CisgICAgICAgIGludCB0bV9tZGF5OworICAgICAgICBpbnQgdG1fbW9uOworICAgICAgICBpbnQgdG1feWVhcjsKKyAgICAgICAgaW50IHRtX3dkYXk7CisgICAgICAgIGludCB0bV95ZGF5OworICAgICAgICBpbnQgdG1faXNkc3Q7Cit9OworCitUaGUgZHJpdmVyIHRha2VzIGNhcmUgb2YgY29udmVydGluZyBiYWNrIGFuIGZvcnRoIGJldHdlZW4gdGhlIEVGSSB0aW1lIGFuZAordGhpcyBmb3JtYXQuCisKK1Rob3NlIHR3byBpb2N0bCgpcyBjYW4gYmUgZXhlcmNpc2VkIHdpdGggdGhlIGh3Y2xvY2sgY29tbWFuZDoKKworRm9yIHJlYWRpbmc6CisjIC9zYmluL2h3Y2xvY2sgLS1zaG93CitNb24gTWFyICA2IDE1OjMyOjMyIDIwMDAgIC0wLjkxMDI0OCBzZWNvbmRzCisKK0ZvciBzZXR0aW5nOgorIyAvc2Jpbi9od2Nsb2NrIC0tc3lzdG9oYworCitSb290IHByaXZpbGVnZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZSB0aW1lIG9mIGRheS4KKworSVYvIFdha2V1cCBBbGFybSBzZXJ2aWNlCisKK0VGSSBwcm92aWRlcyBhbiBBUEkgYnkgd2hpY2ggb25lIGNhbiBwcm9ncmFtIHdoZW4gYSBtYWNoaW5lIHNob3VsZCB3YWtldXAsCitpLmUuIHJlYm9vdC4gVGhpcyBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBhbGFybSBwcm92aWRlZCBieSB0aGUgbGVnYWN5CitSVEMgd2hpY2ggaXMgc29tZSBraW5kIG9mIGludGVydmFsIHRpbWVyIGFsYXJtLiBGb3IgdGhpcyByZWFzb24gd2UgZG9uJ3QgdXNlCit0aGUgc2FtZSBpb2N0bCgpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBzZXJ2aWNlLiBJbnN0ZWFkIHdlIGhhdmUKK2ludHJvZHVjZWQgMiBuZXdzIGlvY3RsKClzIHRvIHRoZSBpbnRlcmZhY2Ugb2YgYW4gUlRDLiAKKworV2UgaGF2ZSBhZGRlZCAyIG5ldyBpb2N0bCgpcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgRUZJIGRyaXZlcjoKKworCVJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFsYXJtCisJaW9jdGwoZCwgUlRDX1dLTEFNX1JELCAmd2t0KQorCisJU2V0IHRoZSBhbGFybSBvciBjaGFuZ2UgaXRzIHN0YXR1cworCWlvY3RsKGQsIFJUQ19XS0FMTV9TRVQsICZ3a3QpCisKK1RoZSB3a3Qgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBhIHN0cnVjdCBydGNfdGltZSArIDIgZXh0cmEgZmllbGRzIHRvIGdldCAKK3N0YXR1cyBpbmZvcm1hdGlvbjoKKwkKK3N0cnVjdCBydGNfd2thbHJtIHsKKworICAgICAgICB1bnNpZ25lZCBjaGFyIGVuYWJsZWQ7IC8qID0xIGlmIGFsYXJtIGlzIGVuYWJsZWQgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciBwZW5kaW5nOyAvKiA9MSBpZiBhbGFybSBpcyBwZW5kaW5nICAqLworCisgICAgICAgIHN0cnVjdCBydGNfdGltZSB0aW1lOworfSAKKworQXMgb2YgdG9kYXksIG5vbmUgb2YgdGhlIGV4aXN0aW5nIHVzZXItbGV2ZWwgYXBwcyBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCitIb3dldmVyIHdyaXRpbmcgc3VjaCBhIHByb2dyYW0gc2hvdWxkIGJlIGhhcmQgYnkgc2ltcGx5IHVzaW5nIHRob3NlIHR3byAKK2lvY3RsKCkuIAorCitSb290IHByaXZpbGVnZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZSBhbGFybS4KKworVi8gUmVmZXJlbmNlcy4KKworQ2hlY2tvdXQgdGhlIGZvbGxvd2luZyBXZWIgc2l0ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBFRkk6CisKK2h0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tL3RlY2hub2xvZ3kvZWZpLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L2ZzeXMudHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L2ZzeXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZGExODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lhNjQvZnN5cy50eHQKQEAgLTAsMCArMSwyODYgQEAKKy0qLU1vZGU6IG91dGxpbmUtKi0KKworCQlMaWdodC13ZWlnaHQgU3lzdGVtIENhbGxzIGZvciBJQS02NAorCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICAgICAgU3RhcnRlZDogMTMtSmFuLTIwMDMKKwkJICAgIExhc3QgdXBkYXRlOiAyNy1TZXAtMjAwMworCisJICAgICAgICAgICAgICBEYXZpZCBNb3NiZXJnZXItVGFuZworCQkgICAgICA8ZGF2aWRtQGhwbC5ocC5jb20+CisKK1VzaW5nIHRoZSAiZXBjIiBpbnN0cnVjdGlvbiBlZmZlY3RpdmVseSBpbnRyb2R1Y2VzIGEgbmV3IG1vZGUgb2YKK2V4ZWN1dGlvbiB0byB0aGUgaWE2NCBsaW51eCBrZXJuZWwuICBXZSBjYWxsIHRoaXMgbW9kZSB0aGUKKyJmc3lzLW1vZGUiLiAgVG8gcmVjYXAsIHRoZSBub3JtYWwgc3RhdGVzIG9mIGV4ZWN1dGlvbiBhcmU6CisKKyAgLSBrZXJuZWwgbW9kZToKKwlCb3RoIHRoZSByZWdpc3RlciBzdGFjayBhbmQgdGhlIG1lbW9yeSBzdGFjayBoYXZlIGJlZW4KKwlzd2l0Y2hlZCBvdmVyIHRvIGtlcm5lbCBtZW1vcnkuICBUaGUgdXNlci1sZXZlbCBzdGF0ZSBpcyBzYXZlZAorCWluIGEgcHQtcmVncyBzdHJ1Y3R1cmUgYXQgdGhlIHRvcCBvZiB0aGUga2VybmVsIG1lbW9yeSBzdGFjay4KKworICAtIHVzZXIgbW9kZToKKwlCb3RoIHRoZSByZWdpc3RlciBzdGFjayBhbmQgdGhlIGtlcm5lbCBzdGFjayBhcmUgaW4KKwl1c2VyIG1lbW9yeS4gIFRoZSB1c2VyLWxldmVsIHN0YXRlIGlzIGNvbnRhaW5lZCBpbiB0aGUKKwlDUFUgcmVnaXN0ZXJzLgorCisgIC0gYmFuayAwIGludGVycnVwdGlvbi1oYW5kbGluZyBtb2RlOgorCVRoaXMgaXMgdGhlIG5vbi1pbnRlcnJ1cHRpYmxlIHN0YXRlIHdoaWNoIGFsbAorCWludGVycnVwdGlvbi1oYW5kbGVycyBzdGFydCBleGVjdXRpb24gaW4uICBUaGUgdXNlci1sZXZlbAorCXN0YXRlIHJlbWFpbnMgaW4gdGhlIENQVSByZWdpc3RlcnMgYW5kIHNvbWUga2VybmVsIHN0YXRlIG1heQorCWJlIHN0b3JlZCBpbiBiYW5rIDAgb2YgcmVnaXN0ZXJzIHIxNi1yMzEuCisKK0luIGNvbnRyYXN0LCBmc3lzLW1vZGUgaGFzIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzOgorCisgIC0gZXhlY3V0aW9uIGlzIGF0IHByaXZpbGVnZSBsZXZlbCAwIChtb3N0LXByaXZpbGVnZWQpCisKKyAgLSBDUFUgcmVnaXN0ZXJzIG1heSBjb250YWluIGEgbWl4dHVyZSBvZiB1c2VyLWxldmVsIGFuZCBrZXJuZWwtbGV2ZWwKKyAgICBzdGF0ZSAoaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBrZXJuZWwgdG8gZW5zdXJlIHRoYXQgbm8KKyAgICBzZWN1cml0eS1zZW5zaXRpdmUga2VybmVsLWxldmVsIHN0YXRlIGlzIGxlYWtlZCBiYWNrIHRvCisgICAgdXNlci1sZXZlbCkKKworICAtIGV4ZWN1dGlvbiBpcyBpbnRlcnJ1cHRpYmxlIGFuZCBwcmVlbXB0aWJsZSAoYW4gZnN5cy1tb2RlIGhhbmRsZXIKKyAgICBjYW4gZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBhdm9pZCBhbGwgb3RoZXIgaW50ZXJydXB0aW9uLXNvdXJjZXMKKyAgICB0byBhdm9pZCBwcmVlbXB0aW9uKQorCisgIC0gbmVpdGhlciB0aGUgbWVtb3J5LXN0YWNrIG5vciB0aGUgcmVnaXN0ZXItc3RhY2sgY2FuIGJlIHRydXN0ZWQgd2hpbGUKKyAgICBpbiBmc3lzLW1vZGUgKHRoZXkgcG9pbnQgdG8gdGhlIHVzZXItbGV2ZWwgc3RhY2tzLCB3aGljaCBtYXkKKyAgICBiZSBpbnZhbGlkLCBvciBjb21wbGV0ZWx5IGJvZ3VzIGFkZHJlc3NlcykKKworSW4gc3VtbWFyeSwgZnN5cy1tb2RlIGlzIG11Y2ggbW9yZSBzaW1pbGFyIHRvIHJ1bm5pbmcgaW4gdXNlci1tb2RlCit0aGFuIGl0IGlzIHRvIHJ1bm5pbmcgaW4ga2VybmVsLW1vZGUuICBPZiBjb3Vyc2UsIGdpdmVuIHRoYXQgdGhlCitwcml2aWxlZ2UgbGV2ZWwgaXMgYXQgbGV2ZWwgMCwgdGhpcyBtZWFucyB0aGF0IGZzeXMtbW9kZSByZXF1aXJlcyBzb21lCitjYXJlIChzZWUgYmVsb3cpLgorCisKKyogSG93IHRvIHRlbGwgZnN5cy1tb2RlCisKK0xpbnV4IG9wZXJhdGVzIGluIGZzeXMtbW9kZSB3aGVuIChhKSB0aGUgcHJpdmlsZWdlIGxldmVsIGlzIDAgKG1vc3QKK3ByaXZpbGVnZWQpIGFuZCAoYikgdGhlIHN0YWNrcyBoYXZlIE5PVCBiZWVuIHN3aXRjaGVkIHRvIGtlcm5lbCBtZW1vcnkKK3lldC4gIEZvciBjb252ZW5pZW5jZSwgdGhlIGhlYWRlciBmaWxlIDxhc20taWE2NC9wdHJhY2UuaD4gcHJvdmlkZXMKK3RocmVlIG1hY3JvczoKKworCXVzZXJfbW9kZShyZWdzKQorCXVzZXJfc3RhY2sodGFzayxyZWdzKQorCWZzeXNfbW9kZSh0YXNrLHJlZ3MpCisKK1RoZSAicmVncyIgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgcHRfcmVncyBzdHJ1Y3R1cmUuICBUaGUgInRhc2siCithcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIHRhc2sgc3RydWN0dXJlIHRvIHdoaWNoIHRoZSAicmVncyIKK3BvaW50ZXIgYmVsb25ncyB0by4gIHVzZXJfbW9kZSgpIHJldHVybnMgVFJVRSBpZiB0aGUgQ1BVIHN0YXRlIHBvaW50ZWQKK3RvIGJ5ICJyZWdzIiB3YXMgZXhlY3V0aW5nIGluIHVzZXIgbW9kZSAocHJpdmlsZWdlIGxldmVsIDMpLgordXNlcl9zdGFjaygpIHJldHVybnMgVFJVRSBpZiB0aGUgc3RhdGUgcG9pbnRlZCB0byBieSAicmVncyIgd2FzCitleGVjdXRpbmcgb24gdGhlIHVzZXItbGV2ZWwgc3RhY2socykuICBGaW5hbGx5LCBmc3lzX21vZGUoKSByZXR1cm5zCitUUlVFIGlmIHRoZSBDUFUgc3RhdGUgcG9pbnRlZCB0byBieSAicmVncyIgd2FzIGV4ZWN1dGluZyBpbiBmc3lzLW1vZGUuCitUaGUgZnN5c19tb2RlKCkgbWFjcm8gaXMgZXF1aXZhbGVudCB0byB0aGUgZXhwcmVzc2lvbjoKKworCSF1c2VyX21vZGUocmVncykgJiYgdXNlcl9zdGFjayh0YXNrLHJlZ3MpCisKKyogSG93IHRvIHdyaXRlIGFuIGZzeXNjYWxsIGhhbmRsZXIKKworVGhlIGZpbGUgYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMgY29udGFpbnMgYSB0YWJsZSBvZiBmc3lzY2FsbC1oYW5kbGVycworKGZzeXNjYWxsX3RhYmxlKS4gIFRoaXMgdGFibGUgY29udGFpbnMgb25lIGVudHJ5IGZvciBlYWNoIHN5c3RlbSBjYWxsLgorQnkgZGVmYXVsdCwgYSBzeXN0ZW0gY2FsbCBpcyBoYW5kbGVkIGJ5IGZzeXNfZmFsbGJhY2tfc3lzY2FsbCgpLiAgVGhpcworcm91dGluZSB0YWtlcyBjYXJlIG9mIGVudGVyaW5nIChmdWxsKSBrZXJuZWwgbW9kZSBhbmQgY2FsbGluZyB0aGUKK25vcm1hbCBMaW51eCBzeXN0ZW0gY2FsbCBoYW5kbGVyLiAgRm9yIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHN5c3RlbQorY2FsbHMsIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIGEgaGFuZC10dW5lZCBmc3lzY2FsbF9oYW5kbGVyLiAgRm9yCitleGFtcGxlLCBmc3lzLlMgY29udGFpbnMgZnN5c19nZXRwaWQoKSwgd2hpY2ggaXMgYSBoYW5kLXR1bmVkIHZlcnNpb24KK29mIHRoZSBnZXRwaWQoKSBzeXN0ZW0gY2FsbC4KKworVGhlIGVudHJ5IGFuZCBleGl0LXN0YXRlIG9mIGFuIGZzeXNjYWxsIGhhbmRsZXIgaXMgYXMgZm9sbG93czoKKworKiogTWFjaGluZSBzdGF0ZSBvbiBlbnRyeSB0byBmc3lzY2FsbCBoYW5kbGVyOgorCisgLSByMTAJICA9IDAKKyAtIHIxMQkgID0gc2F2ZWQgYXIucGZzIChhIHVzZXItbGV2ZWwgdmFsdWUpCisgLSByMTUJICA9IHN5c3RlbSBjYWxsIG51bWJlcgorIC0gcjE2CSAgPSAiY3VycmVudCIgdGFzayBwb2ludGVyIChpbiBub3JtYWwga2VybmVsLW1vZGUsIHRoaXMgaXMgaW4gcjEzKQorIC0gcjMyLXIzOSA9IHN5c3RlbSBjYWxsIGFyZ3VtZW50cworIC0gYjYJICA9IHJldHVybiBhZGRyZXNzIChhIHVzZXItbGV2ZWwgdmFsdWUpCisgLSBhci5wZnMgPSBwcmV2aW91cyBmcmFtZS1zdGF0ZSAoYSB1c2VyLWxldmVsIHZhbHVlKQorIC0gUFNSLmJlID0gY2xlYXJlZCB0byB6ZXJvIChpLmUuLCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIgaXMgaW4gZWZmZWN0KQorIC0gYWxsIG90aGVyIHJlZ2lzdGVycyBtYXkgY29udGFpbiB2YWx1ZXMgcGFzc2VkIGluIGZyb20gdXNlci1tb2RlCisKKyoqIFJlcXVpcmVkIG1hY2hpbmUgc3RhdGUgb24gZXhpdCB0byBmc3lzY2FsbCBoYW5kbGVyOgorCisgLSByMTEJICA9IHNhdmVkIGFyLnBmcyAoYXMgcGFzc2VkIGludG8gdGhlIGZzeXNjYWxsIGhhbmRsZXIpCisgLSByMTUJICA9IHN5c3RlbSBjYWxsIG51bWJlciAoYXMgcGFzc2VkIGludG8gdGhlIGZzeXNjYWxsIGhhbmRsZXIpCisgLSByMzItcjM5ID0gc3lzdGVtIGNhbGwgYXJndW1lbnRzIChhcyBwYXNzZWQgaW50byB0aGUgZnN5c2NhbGwgaGFuZGxlcikKKyAtIGI2CSAgPSByZXR1cm4gYWRkcmVzcyAoYXMgcGFzc2VkIGludG8gdGhlIGZzeXNjYWxsIGhhbmRsZXIpCisgLSBhci5wZnMgPSBwcmV2aW91cyBmcmFtZS1zdGF0ZSAoYXMgcGFzc2VkIGludG8gdGhlIGZzeXNjYWxsIGhhbmRsZXIpCisKK0ZzeXNjYWxsIGhhbmRsZXJzIGNhbiBleGVjdXRlIHdpdGggdmVyeSBsaXR0bGUgb3ZlcmhlYWQsIGJ1dCB3aXRoIHRoYXQKK3NwZWVkIGNvbWVzIGEgc2V0IG9mIHJlc3RyaWN0aW9uczoKKworIG8gRnN5c2NhbGwtaGFuZGxlcnMgTVVTVCBjaGVjayBmb3IgYW55IHBlbmRpbmcgd29yayBpbiB0aGUgZmxhZ3MKKyAgIG1lbWJlciBvZiB0aGUgdGhyZWFkLWluZm8gc3RydWN0dXJlIGFuZCBpZiBhbnkgb2YgdGhlCisgICBUSUZfQUxMV09SS19NQVNLIGZsYWdzIGFyZSBzZXQsIHRoZSBoYW5kbGVyIG5lZWRzIHRvIGZhbGwgYmFjayBvbgorICAgZG9pbmcgYSBmdWxsIHN5c3RlbSBjYWxsIChieSBjYWxsaW5nIGZzeXNfZmFsbGJhY2tfc3lzY2FsbCkuCisKKyBvIEZzeXNjYWxsLWhhbmRsZXJzIE1VU1QgcHJlc2VydmUgaW5jb21pbmcgYXJndW1lbnRzIChyMzItcjM5LCByMTEsCisgICByMTUsIGI2LCBhbmQgYXIucGZzKSBiZWNhdXNlIHRoZXkgd2lsbCBiZSBuZWVkZWQgaW4gY2FzZSBvZiBhCisgICBzeXN0ZW0gY2FsbCByZXN0YXJ0LiAgT2YgY291cnNlLCBhbGwgInByZXNlcnZlZCIgcmVnaXN0ZXJzIGFsc28KKyAgIG11c3QgYmUgcHJlc2VydmVkLCBpbiBhY2NvcmRhbmNlIHRvIHRoZSBub3JtYWwgY2FsbGluZyBjb252ZW50aW9ucy4KKworIG8gRnN5c2NhbGwtaGFuZGxlcnMgTVVTVCBjaGVjayBhcmd1bWVudCByZWdpc3RlcnMgZm9yIGNvbnRhaW5pbmcgYQorICAgTmFUIHZhbHVlIGJlZm9yZSB1c2luZyB0aGVtIGluIGFueSB3YXkgdGhhdCBjb3VsZCB0cmlnZ2VyIGEKKyAgIE5hVC1jb25zdW1wdGlvbiBmYXVsdC4gIElmIGEgc3lzdGVtIGNhbGwgYXJndW1lbnQgaXMgZm91bmQgdG8KKyAgIGNvbnRhaW4gYSBOYVQgdmFsdWUsIGFuIGZzeXNjYWxsLWhhbmRsZXIgbWF5IHJldHVybiBpbW1lZGlhdGVseQorICAgd2l0aCByOD1FSU5WQUwsIHIxMD0tMS4KKworIG8gRnN5c2NhbGwtaGFuZGxlcnMgTVVTVCBOT1QgdXNlIHRoZSAiYWxsb2MiIGluc3RydWN0aW9uIG9yIHBlcmZvcm0KKyAgIGFueSBvdGhlciBvcGVyYXRpb24gdGhhdCB3b3VsZCB0cmlnZ2VyIG1hbmRhdG9yeSBSU0UKKyAgIChyZWdpc3Rlci1zdGFjayBlbmdpbmUpIHRyYWZmaWMuCisKKyBvIEZzeXNjYWxsLWhhbmRsZXJzIE1VU1QgTk9UIHdyaXRlIHRvIGFueSBzdGFja2VkIHJlZ2lzdGVycyBiZWNhdXNlCisgICBpdCBpcyBub3Qgc2FmZSB0byBhc3N1bWUgdGhhdCB1c2VyLWxldmVsIGNhbGxlZCBhIGhhbmRsZXIgd2l0aCB0aGUKKyAgIHByb3BlciBudW1iZXIgb2YgYXJndW1lbnRzLgorCisgbyBGc3lzY2FsbC1oYW5kbGVycyBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBhY2Nlc3NpbmcgcGVyLUNQVSB2YXJpYWJsZXM6CisgICB1bmxlc3MgcHJvcGVyIHNhZmUtZ3VhcmRzIGFyZSB0YWtlbiAoZS5nLiwgaW50ZXJydXB0aW9ucyBhcmUgYXZvaWRlZCksCisgICBleGVjdXRpb24gbWF5IGJlIHByZS1lbXB0ZWQgYW5kIHJlc3VtZWQgb24gYW5vdGhlciBDUFUgYXQgYW55IGdpdmVuCisgICB0aW1lLgorCisgbyBGc3lzY2FsbC1oYW5kbGVycyBtdXN0IGJlIGNhcmVmdWwgbm90IHRvIGxlYWsgc2Vuc2l0aXZlIGtlcm5lbCcKKyAgIGluZm9ybWF0aW9uIGJhY2sgdG8gdXNlci1sZXZlbC4gIEluIHBhcnRpY3VsYXIsIGJlZm9yZSByZXR1cm5pbmcgdG8KKyAgIHVzZXItbGV2ZWwsIGNhcmUgbmVlZHMgdG8gYmUgdGFrZW4gdG8gY2xlYXIgYW55IHNjcmF0Y2ggcmVnaXN0ZXJzCisgICB0aGF0IGNvdWxkIGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uIChub3RlIHRoYXQgdGhlIGN1cnJlbnQKKyAgIHRhc2sgcG9pbnRlciBpcyBub3QgY29uc2lkZXJlZCBzZW5zaXRpdmU6IGl0J3MgYWxyZWFkeSBleHBvc2VkCisgICB0aHJvdWdoIGFyLms2KS4KKworIG8gRnN5c2NhbGwtaGFuZGxlcnMgTVVTVCBOT1QgYWNjZXNzIHVzZXItbWVtb3J5IHdpdGhvdXQgZmlyc3QKKyAgIHZhbGlkYXRpbmcgYWNjZXNzLXBlcm1pc3Npb24gKHRoaXMgY2FuIGJlIGRvbmUgdHlwaWNhbGx5IHZpYQorICAgcHJvYmUuci5mYXVsdCBhbmQvb3IgcHJvYmUudy5mYXVsdCkgYW5kIHdpdGhvdXQgZ3VhcmRpbmcgYWdhaW5zdAorICAgbWVtb3J5IGFjY2VzcyBleGNlcHRpb25zICh0aGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIEVYKCkgbWFjcm9zCisgICBkZWZpbmVkIGJ5IGFzbW1hY3JvLmgpLgorCitUaGUgYWJvdmUgcmVzdHJpY3Rpb25zIG1heSBzZWVtIGRyYWNvbmlhbiwgYnV0IHJlbWVtYmVyIHRoYXQgaXQncworcG9zc2libGUgdG8gdHJhZGUgb2ZmIHNvbWUgb2YgdGhlIHJlc3RyaWN0aW9ucyBieSBwYXlpbmcgYSBzbGlnaHRseQoraGlnaGVyIG92ZXJoZWFkLiAgRm9yIGV4YW1wbGUsIGlmIGFuIGZzeXNjYWxsLWhhbmRsZXIgY291bGQgYmVuZWZpdAorZnJvbSB0aGUgc2hhZG93IHJlZ2lzdGVyIGJhbmssIGl0IGNvdWxkIHRlbXBvcmFyaWx5IGRpc2FibGUgUFNSLmkgYW5kCitQU1IuaWMsIHN3aXRjaCB0byBiYW5rIDAgKGJzdy4wKSBhbmQgdGhlbiB1c2UgdGhlIHNoYWRvdyByZWdpc3RlcnMgYXMKK25lZWRlZC4gIEluIG90aGVyIHdvcmRzLCBmb2xsb3dpbmcgdGhlIGFib3ZlIHJ1bGVzIHlpZWxkcyBleHRyZW1lbHkKK2Zhc3Qgc3lzdGVtIGNhbGwgZXhlY3V0aW9uICh3aGlsZSBmdWxseSBwcmVzZXJ2aW5nIHN5c3RlbSBjYWxsCitzZW1hbnRpY3MpLCBidXQgdGhlcmUgaXMgYWxzbyBhIGxvdCBvZiBmbGV4aWJpbGl0eSBpbiBoYW5kbGluZyBtb3JlCitjb21wbGljYXRlZCBjYXNlcy4KKworKiBTaWduYWwgaGFuZGxpbmcKKworVGhlIGRlbGl2ZXJ5IG9mIChhc3luY2hyb25vdXMpIHNpZ25hbHMgbXVzdCBiZSBkZWxheWVkIHVudGlsIGZzeXMtbW9kZQoraXMgZXhpdGVkLiAgVGhpcyBpcyBhY29tcGxpc2hlZCB3aXRoIHRoZSBoZWxwIG9mIHRoZSBsb3dlci1wcml2aWxlZ2UKK3RyYW5zZmVyIHRyYXA6IGFyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jOmRvX25vdGlmeV9yZXN1bWVfdXNlcigpCitjaGVja3Mgd2hldGhlciB0aGUgaW50ZXJydXB0ZWQgdGFzayB3YXMgaW4gZnN5cy1tb2RlIGFuZCwgaWYgc28sIHNldHMKK1BTUi5scCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIFdoZW4gZnN5cy1tb2RlIGlzIGV4aXRlZCB2aWEgdGhlCisiYnIucmV0IiBpbnN0cnVjdGlvbiB0aGF0IGxvd2VycyB0aGUgcHJpdmlsZWdlIGxldmVsLCBhIHRyYXAgd2lsbAorb2NjdXIuICBUaGUgdHJhcCBoYW5kbGVyIGNsZWFycyBQU1IubHAgYWdhaW4gYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuCitUaGUga2VybmVsIGV4aXQgcGF0aCB0aGVuIGNoZWNrcyBmb3IgYW5kIGRlbGl2ZXJzIGFueSBwZW5kaW5nIHNpZ25hbHMuCisKKyogUFNSIEhhbmRsaW5nCisKK1RoZSAiZXBjIiBpbnN0cnVjdGlvbiBkb2Vzbid0IGNoYW5nZSB0aGUgY29udGVudHMgb2YgUFNSIGF0IGFsbC4gIFRoaXMKK2lzIGluIGNvbnRyYXN0IHRvIGEgcmVndWxhciBpbnRlcnJ1cHRpb24sIHdoaWNoIGNsZWFycyBhbG1vc3QgYWxsCitiaXRzLiAgQmVjYXVzZSBvZiB0aGF0LCBzb21lIGNhcmUgbmVlZHMgdG8gYmUgdGFrZW4gdG8gZW5zdXJlIHRoaW5ncword29yayBhcyBleHBlY3RlZC4gIFRoZSBmb2xsb3dpbmcgZGlzY3Vzc2lvbiBkZXNjcmliZXMgaG93IGVhY2ggUFNSIGJpdAoraXMgaGFuZGxlZC4KKworUFNSLmJlCUNsZWFyZWQgd2hlbiBlbnRlcmluZyBmc3lzLW1vZGUuICBBIHNybHouZCBpbnN0cnVjdGlvbiBpcyB1c2VkCisJdG8gZW5zdXJlIHRoZSBDUFUgaXMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlIGJlZm9yZSB0aGUgZmlyc3QKKwlsb2FkL3N0b3JlIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkLiAgUFNSLmJlIGlzIG5vcm1hbGx5IE5PVAorCXJlc3RvcmVkIHVwb24gcmV0dXJuIGZyb20gYW4gZnN5cy1tb2RlIGhhbmRsZXIuICBJbiBvdGhlcgorCXdvcmRzLCB1c2VyLWxldmVsIGNvZGUgbXVzdCBub3QgcmVseSBvbiBQU1IuYmUgYmVpbmcgcHJlc2VydmVkCisJYWNyb3NzIGEgc3lzdGVtIGNhbGwuCitQU1IudXAJVW5jaGFuZ2VkLgorUFNSLmFjCVVuY2hhbmdlZC4KK1BTUi5tZmwgVW5jaGFuZ2VkLiAgTm90ZTogZnN5cy1tb2RlIGhhbmRsZXJzIG11c3Qgbm90IHdyaXRlLXJlZ2lzdGVycyEKK1BTUi5tZmgJVW5jaGFuZ2VkLiAgTm90ZTogZnN5cy1tb2RlIGhhbmRsZXJzIG11c3Qgbm90IHdyaXRlLXJlZ2lzdGVycyEKK1BTUi5pYwlVbmNoYW5nZWQuICBOb3RlOiBmc3lzLW1vZGUgaGFuZGxlcnMgY2FuIGNsZWFyIHRoZSBiaXQsIGlmIG5lZWRlZC4KK1BTUi5pCVVuY2hhbmdlZC4gIE5vdGU6IGZzeXMtbW9kZSBoYW5kbGVycyBjYW4gY2xlYXIgdGhlIGJpdCwgaWYgbmVlZGVkLgorUFNSLnBrCVVuY2hhbmdlZC4KK1BTUi5kdAlVbmNoYW5nZWQuCitQU1IuZGZsCVVuY2hhbmdlZC4gIE5vdGU6IGZzeXMtbW9kZSBoYW5kbGVycyBtdXN0IG5vdCB3cml0ZS1yZWdpc3RlcnMhCitQU1IuZGZoCVVuY2hhbmdlZC4gIE5vdGU6IGZzeXMtbW9kZSBoYW5kbGVycyBtdXN0IG5vdCB3cml0ZS1yZWdpc3RlcnMhCitQU1Iuc3AJVW5jaGFuZ2VkLgorUFNSLnBwCVVuY2hhbmdlZC4KK1BTUi5kaQlVbmNoYW5nZWQuCitQU1Iuc2kJVW5jaGFuZ2VkLgorUFNSLmRiCVVuY2hhbmdlZC4gIFRoZSBrZXJuZWwgcHJldmVudHMgdXNlci1sZXZlbCBmcm9tIHNldHRpbmcgYSBoYXJkd2FyZQorCWJyZWFrcG9pbnQgdGhhdCB0cmlnZ2VycyBhdCBhbnkgcHJpdmlsZWdlIGxldmVsIG90aGVyIHRoYW4gMyAodXNlci1tb2RlKS4KK1BTUi5scAlVbmNoYW5nZWQuCitQU1IudGIJTGF6eSByZWRpcmVjdC4gIElmIGEgdGFrZW4tYnJhbmNoIHRyYXAgb2NjdXJzIHdoaWxlIGluCisJZnN5cy1tb2RlLCB0aGUgdHJhcC1oYW5kbGVyIG1vZGlmaWVzIHRoZSBzYXZlZCBtYWNoaW5lIHN0YXRlCisJc3VjaCB0aGF0IGV4ZWN1dGlvbiByZXN1bWVzIGluIHRoZSBnYXRlIHBhZ2UgYXQKKwlzeXNjYWxsX3ZpYV9icmVhaygpLCB3aXRoIHByaXZpbGVnZSBsZXZlbCAzLiAgTm90ZTogdGhlCisJdGFrZW4gYnJhbmNoIHdvdWxkIG9jY3VyIG9uIHRoZSBicmFuY2ggaW52b2tpbmcgdGhlCisJZnN5c2NhbGwtaGFuZGxlciwgYXQgd2hpY2ggcG9pbnQsIGJ5IGRlZmluaXRpb24sIGEgc3lzY2FsbAorCXJlc3RhcnQgaXMgc3RpbGwgc2FmZS4gIElmIHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgaW52YWxpZCwKKwl0aGUgZnN5cy1tb2RlIGhhbmRsZXIgd2lsbCByZXR1cm4gZGlyZWN0bHkgdG8gdXNlci1sZXZlbC4gIFRoaXMKKwlyZXR1cm4gd2lsbCB0cmlnZ2VyIGEgdGFrZW4tYnJhbmNoIHRyYXAsIGJ1dCBzaW5jZSB0aGUgdHJhcCBpcworCXRha2VuIF9hZnRlcl8gcmVzdG9yaW5nIHRoZSBwcml2aWxlZ2UgbGV2ZWwsIHRoZSBDUFUgaGFzIGFscmVhZHkKKwlsZWZ0IGZzeXMtbW9kZSwgc28gbm8gc3BlY2lhbCB0cmVhdG1lbnQgaXMgbmVlZGVkLgorUFNSLnJ0CVVuY2hhbmdlZC4KK1BTUi5jcGwJQ2xlYXJlZCB0byAwLgorUFNSLmlzCVVuY2hhbmdlZCAoZ3VhcmFudGVlZCB0byBiZSAwIG9uIGVudHJ5IHRvIHRoZSBnYXRlIHBhZ2UpLgorUFNSLm1jCVVuY2hhbmdlZC4KK1BTUi5pdAlVbmNoYW5nZWQgKGd1YXJhbnRlZWQgdG8gYmUgMSkuCitQU1IuaWQJVW5jaGFuZ2VkLiAgTm90ZTogdGhlIGlhNjQgbGludXgga2VybmVsIG5ldmVyIHNldHMgdGhpcyBiaXQuCitQU1IuZGEJVW5jaGFuZ2VkLiAgTm90ZTogdGhlIGlhNjQgbGludXgga2VybmVsIG5ldmVyIHNldHMgdGhpcyBiaXQuCitQU1IuZGQJVW5jaGFuZ2VkLiAgTm90ZTogdGhlIGlhNjQgbGludXgga2VybmVsIG5ldmVyIHNldHMgdGhpcyBiaXQuCitQU1Iuc3MJTGF6eSByZWRpcmVjdC4gIElmIHNldCwgImVwYyIgd2lsbCBjYXVzZSBhIFNpbmdsZSBTdGVwIFRyYXAgdG8KKwliZSB0YWtlbi4gIFRoZSB0cmFwIGhhbmRsZXIgdGhlbiBtb2RpZmllcyB0aGUgc2F2ZWQgbWFjaGluZQorCXN0YXRlIHN1Y2ggdGhhdCBleGVjdXRpb24gcmVzdW1lcyBpbiB0aGUgZ2F0ZSBwYWdlIGF0CisJc3lzY2FsbF92aWFfYnJlYWsoKSwgd2l0aCBwcml2aWxlZ2UgbGV2ZWwgMy4KK1BTUi5yaQlVbmNoYW5nZWQuCitQU1IuZWQJVW5jaGFuZ2VkLiAgTm90ZTogVGhpcyBiaXQgY291bGQgb25seSBoYXZlIGFuIGVmZmVjdCBpZiBhbiBmc3lzLW1vZGUKKwloYW5kbGVyIHBlcmZvcm1lZCBhIHNwZWN1bGF0aXZlIGxvYWQgdGhhdCBnZXRzIE5hVHRlZC4gIElmIHNvLCB0aGlzCisJd291bGQgYmUgdGhlIG5vcm1hbCAmIGV4cGVjdGVkIGJlaGF2aW9yLCBzbyBubyBzcGVjaWFsIHRyZWF0bWVudCBpcworCW5lZWRlZC4KK1BTUi5ibglVbmNoYW5nZWQuICBOb3RlOiBmc3lzLW1vZGUgaGFuZGxlcnMgbWF5IGNsZWFyIHRoZSBiaXQsIGlmIG5lZWRlZC4KKwlEb2luZyBzbyByZXF1aXJlcyBjbGVhcmluZyBQU1IuaSBhbmQgUFNSLmljIGFzIHdlbGwuCitQU1IuaWEJVW5jaGFuZ2VkLiAgTm90ZTogdGhlIGlhNjQgbGludXgga2VybmVsIG5ldmVyIHNldHMgdGhpcyBiaXQuCisKKyogVXNpbmcgZmFzdCBzeXN0ZW0gY2FsbHMKKworVG8gdXNlIGZhc3Qgc3lzdGVtIGNhbGxzLCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIG5lZWQgc2ltcGx5IGNhbGwKK19fa2VybmVsX3N5c2NhbGxfdmlhX2VwYygpLiAgRm9yIGV4YW1wbGUKKworLS0gZXhhbXBsZSBmZ2V0dGltZW9mZGF5KCkgY2FsbCAtLQorLS0gZmdldHRpbWVvZmRheS5TIC0tCisKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKworR0xPQkFMX0VOVFJZKGZnZXR0aW1lb2ZkYXkpCisucHJvbG9ndWUKKy5zYXZlIGFyLnBmcywgcjExCittb3YgcjExID0gYXIucGZzCisuYm9keSAKKworbW92IHIyID0gMHhhMDAwMDAwMDAwMDIwNjYwOzsgIC8vIGdhdGUgYWRkcmVzcyAKKwkJCSAgICAgICAvLyBmb3VuZCBieSBpbnNwZWN0aW9uIG9mIFN5c3RlbS5tYXAgZm9yIHRoZSAKKwkJCSAgICAgICAvLyBfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMoKSBmdW5jdGlvbi4gIFNlZQorCQkJICAgICAgIC8vIGJlbG93IGZvciBob3cgdG8gZG8gdGhpcyBmb3IgcmVhbC4KKworbW92IGI3ID0gcjIKK21vdiByMTUgPSAxMDg3CQkgICAgICAgLy8gZ2V0dGltZW9mZGF5IHN5c2NhbGwKKzs7Citici5jYWxsLnNwdGsubWFueSBiNiA9IGI3Cis7OworCisucmVzdG9yZSBzcAorCittb3YgYXIucGZzID0gcjExCitici5yZXQuc3B0ay5tYW55IHJwOzsJICAgICAgLy8gcmV0dXJuIHRvIGNhbGxlcgorRU5EKGZnZXR0aW1lb2ZkYXkpCisKKy0tIGVuZCBmZ2V0dGltZW9mZGF5LlMgLS0KKworSW4gcmVhbGl0eSwgZ2V0dGluZyB0aGUgZ2F0ZSBhZGRyZXNzIGlzIGFjY29tcGxpc2hlZCBieSB0d28gZXh0cmEKK3ZhbHVlcyBwYXNzZWQgdmlhIHRoZSBFTEYgYXV4aWxpYXJ5IHZlY3RvciAoaW5jbHVkZS9hc20taWE2NC9lbGYuaCkKKworIG8gQVRfU1lTSU5GTyA6IGlzIHRoZSBhZGRyZXNzIG9mIF9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYygpCisgbyBBVF9TWVNJTkZPX0VIRFIgOiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUga2VybmVsIGdhdGUgRUxGIERTTworCitUaGUgRUxGIERTTyBpcyBhIHByZS1saW5rZWQgbGlicmFyeSB0aGF0IGlzIG1hcHBlZCBpbiBieSB0aGUga2VybmVsIGF0Cit0aGUgZ2F0ZSBwYWdlLiAgSXQgaXMgYSBwcm9wZXIgRUxGIHNoYXJlZCBvYmplY3Qgc28sIHdpdGggYSBkeW5hbWljCitsb2FkZXIgdGhhdCByZWNvZ25pc2VzIHRoZSBsaWJyYXJ5LCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBjYWxscyB0bwordGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gaXQgYXMgd2l0aCBhbnkgb3RoZXIgc2hhcmVkIGxpYnJhcnkuCitBVF9TWVNJTkZPIHBvaW50cyBpbnRvIHRoZSBrZXJuZWwgRFNPIGF0IHRoZQorX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjKCkgZnVuY3Rpb24gZm9yIGhpc3RvcmljYWwgcmVhc29ucyAoaXQgd2FzCit1c2VkIGJlZm9yZSB0aGUga2VybmVsIERTTykgYW5kIGFzIGEgY29udmVuaWVuY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQvc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9zZXJpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MWViNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lhNjQvc2VyaWFsLnR4dApAQCAtMCwwICsxLDE0NCBAQAorU0VSSUFMIERFVklDRSBOQU1JTkcKKworICAgIEFzIG9mIDIuNi4xMCwgc2VyaWFsIGRldmljZXMgb24gaWE2NCBhcmUgbmFtZWQgYmFzZWQgb24gdGhlCisgICAgb3JkZXIgb2YgQUNQSSBhbmQgUENJIGVudW1lcmF0aW9uLiAgVGhlIGZpcnN0IGRldmljZSBpbiB0aGUKKyAgICBBQ1BJIG5hbWVzcGFjZSAoaWYgYW55KSBiZWNvbWVzIC9kZXYvdHR5UzAsIHRoZSBzZWNvbmQgYmVjb21lcworICAgIC9kZXYvdHR5UzEsIGV0Yy4sIGFuZCBQQ0kgZGV2aWNlcyBhcmUgbmFtZWQgc2VxdWVudGlhbGx5CisgICAgc3RhcnRpbmcgYWZ0ZXIgdGhlIEFDUEkgZGV2aWNlcy4KKworICAgIFByaW9yIHRvIDIuNi4xMCwgdGhlcmUgd2VyZSBjb25mdXNpbmcgZXhjZXB0aW9ucyB0byB0aGlzOgorCisJLSBGaXJtd2FyZSBvbiBzb21lIG1hY2hpbmVzIChtb3N0bHkgZnJvbSBIUCkgcHJvdmlkZXMgYW4gSENEUAorCSAgdGFibGVbMV0gdGhhdCB0ZWxscyB0aGUga2VybmVsIGFib3V0IGRldmljZXMgdGhhdCBjYW4gYmUgdXNlZAorCSAgYXMgYSBzZXJpYWwgY29uc29sZS4gIElmIHRoZSB1c2VyIHNwZWNpZmllZCAiY29uc29sZT10dHlTMCIKKwkgIG9yIHRoZSBFRkkgQ29uT3V0IHBhdGggY29udGFpbmVkIG9ubHkgVUFSVCBkZXZpY2VzLCB0aGUKKwkgIGtlcm5lbCByZWdpc3RlcmVkIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBIQ0RQIGFzCisJICAvZGV2L3R0eVMwLgorCisJLSBJZiB0aGVyZSB3YXMgbm8gSENEUCwgd2UgYXNzdW1lZCB0aGVyZSB3ZXJlIFVBUlRzIGF0IHRoZQorCSAgbGVnYWN5IENPTSBwb3J0IGFkZHJlc3NlcyAoSS9PIHBvcnRzIDB4M2Y4IGFuZCAweDJmOCksIHNvCisJICB0aGUga2VybmVsIHJlZ2lzdGVyZWQgdGhvc2UgYXMgL2Rldi90dHlTMCBhbmQgL2Rldi90dHlTMS4KKworICAgIEFueSBhZGRpdGlvbmFsIEFDUEkgb3IgUENJIGRldmljZXMgd2VyZSByZWdpc3RlcmVkIHNlcXVlbnRpYWxseQorICAgIGFmdGVyIC9kZXYvdHR5UzAgYXMgdGhleSB3ZXJlIGRpc2NvdmVyZWQuCisKKyAgICBXaXRoIGFuIEhDRFAsIGRldmljZSBuYW1lcyBjaGFuZ2VkIGRlcGVuZGluZyBvbiBFRkkgY29uZmlndXJhdGlvbgorICAgIGFuZCAiY29uc29sZT0iIGFyZ3VtZW50cy4gIFdpdGhvdXQgYW4gSENEUCwgZGV2aWNlIG5hbWVzIGRpZG4ndAorICAgIGNoYW5nZSwgYnV0IHdlIHJlZ2lzdGVyZWQgZGV2aWNlcyB0aGF0IG1pZ2h0IG5vdCByZWFsbHkgZXhpc3QuCisKKyAgICBGb3IgZXhhbXBsZSwgYW4gSFAgcngxNjAwIHdpdGggYSBzaW5nbGUgYnVpbHQtaW4gc2VyaWFsIHBvcnQKKyAgICAoZGVzY3JpYmVkIGluIHRoZSBBQ1BJIG5hbWVzcGFjZSkgcGx1cyBhbiBNUFsyXSAoYSBQQ0kgZGV2aWNlKSBoYXMKKyAgICB0aGVzZSBwb3J0czoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZS0yLjYuMTAgICAgICBwcmUtMi42LjEwCisgICAgICAgICAgICAgICAgICAgIE1NSU8gICAgICAgICAoRUZJIGNvbnNvbGUgICAgKEVGSSBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgYWRkcmVzcyAgICAgICAgb24gYnVpbHRpbikgICAgIG9uIE1QIHBvcnQpICAgIDIuNi4xMAorICAgICAgICAgICAgICAgICAgPT09PT09PT09PSAgICAgID09PT09PT09PT0gICAgICA9PT09PT09PT09ICAgICA9PT09PT0KKyAgICAgIGJ1aWx0aW4gICAgIDB4ZmY1ZTAwMDAgICAgICAgIHR0eVMwICAgICAgICAgICB0dHlTMSAgICAgICAgIHR0eVMwCisgICAgICBNUCBVUFMgICAgICAweGY4MDMxMDAwICAgICAgICB0dHlTMSAgICAgICAgICAgdHR5UzIgICAgICAgICB0dHlTMQorICAgICAgTVAgQ29uc29sZSAgMHhmODAzMDAwMCAgICAgICAgdHR5UzIgICAgICAgICAgIHR0eVMwICAgICAgICAgdHR5UzIKKyAgICAgIE1QIDIgICAgICAgIDB4ZjgwMzAwMTAgICAgICAgIHR0eVMzICAgICAgICAgICB0dHlTMyAgICAgICAgIHR0eVMzCisgICAgICBNUCAzICAgICAgICAweGY4MDMwMDM4ICAgICAgICB0dHlTNCAgICAgICAgICAgdHR5UzQgICAgICAgICB0dHlTNAorCitDT05TT0xFIFNFTEVDVElPTgorCisgICAgRUZJIGtub3dzIHdoYXQgeW91ciBjb25zb2xlIGRldmljZXMgYXJlLCBidXQgaXQgZG9lc24ndCB0ZWxsIHRoZQorICAgIGtlcm5lbCBxdWl0ZSBlbm91Z2ggdG8gYWN0dWFsbHkgbG9jYXRlIHRoZW0uICBUaGUgRElHNjQgSENEUAorICAgIHRhYmxlWzFdIGRvZXMgdGVsbCB0aGUga2VybmVsIHdoZXJlIHBvdGVudGlhbCBzZXJpYWwgY29uc29sZQorICAgIGRldmljZXMgYXJlLCBidXQgbm90IGFsbCBmaXJtd2FyZSBzdXBwbGllcyBpdC4gIEFsc28sIEVGSSBzdXBwb3J0cworICAgIG11bHRpcGxlIHNpbXVsdGFuZW91cyBjb25zb2xlcyBhbmQgZG9lc24ndCB0ZWxsIHRoZSBrZXJuZWwgd2hpY2gKKyAgICBzaG91bGQgYmUgdGhlICJwcmltYXJ5IiBvbmUuCisKKyAgICBTbyBob3cgZG8geW91IHRlbGwgTGludXggd2hpY2ggY29uc29sZSBkZXZpY2UgdG8gdXNlPworCisJLSBJZiB5b3VyIGZpcm13YXJlIHN1cHBsaWVzIHRoZSBIQ0RQLCBpdCBpcyBzaW1wbGVzdCB0bworCSAgY29uZmlndXJlIEVGSSB3aXRoIGEgc2luZ2xlIGRldmljZSAoZWl0aGVyIGEgVUFSVCBvciBhIFZHQQorCSAgY2FyZCkgYXMgdGhlIGNvbnNvbGUuICBUaGVuIHlvdSBkb24ndCBuZWVkIHRvIHRlbGwgTGludXgKKwkgIGFueXRoaW5nOyB0aGUga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIEVGSSBjb25zb2xlLgorCisJICAoVGhpcyB3b3JrcyBvbmx5IGluIDIuNi42IG9yIGxhdGVyOyBwcmlvciB0byB0aGF0IHlvdSBoYWQKKwkgIHRvIHNwZWNpZnkgImNvbnNvbGU9dHR5UzAiIHRvIGdldCBhIHNlcmlhbCBjb25zb2xlLikKKworCS0gV2l0aG91dCBhbiBIQ0RQLCBMaW51eCBkZWZhdWx0cyB0byBhIFZHQSBjb25zb2xlIHVubGVzcyB5b3UKKwkgIHNwZWNpZnkgYSAiY29uc29sZT0iIGFyZ3VtZW50LgorCisgICAgTk9URTogRG9uJ3QgYXNzdW1lIHRoYXQgYSBzZXJpYWwgY29uc29sZSBkZXZpY2Ugd2lsbCBiZSAvZGV2L3R0eVMwLgorICAgIEl0IG1pZ2h0IGJlIHR0eVMxLCB0dHlTMiwgZXRjLiAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBhcHByb3ByaWF0ZQorICAgIGVudHJpZXMgaW4gL2V0Yy9pbml0dGFiIChmb3IgZ2V0dHkpIGFuZCAvZXRjL3NlY3VyZXR0eSAodG8gYWxsb3cKKyAgICByb290IGxvZ2luKS4KKworRUFSTFkgU0VSSUFMIENPTlNPTEUKKworICAgIFRoZSBrZXJuZWwgY2FuJ3Qgc3RhcnQgdXNpbmcgYSBzZXJpYWwgY29uc29sZSB1bnRpbCBpdCBrbm93cyB3aGVyZQorICAgIHRoZSBkZXZpY2UgbGl2ZXMuICBOb3JtYWxseSB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZHJpdmVyIGVudW1lcmF0ZXMKKyAgICBhbGwgdGhlIHNlcmlhbCBkZXZpY2VzLCB3aGljaCBjYW4gaGFwcGVuIGEgbWludXRlIG9yIG1vcmUgYWZ0ZXIgdGhlCisgICAga2VybmVsIHN0YXJ0cyBib290aW5nLgorCisgICAgMi42LjEwIGFuZCBsYXRlciBrZXJuZWxzIGhhdmUgYW4gImVhcmx5IHVhcnQiIGRyaXZlciB0aGF0IHdvcmtzCisgICAgdmVyeSBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLiAgVGhlIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlCisgICAgdGhpcyBpZiB0aGUgdXNlciBzdXBwbGllcyBhbiBhcmd1bWVudCBsaWtlICJjb25zb2xlPXVhcnQsaW8sMHgzZjgiLAorICAgIG9yIGlmIHRoZSBFRkkgY29uc29sZSBwYXRoIGNvbnRhaW5zIG9ubHkgYSBVQVJUIGRldmljZSBhbmQgdGhlCisgICAgZmlybXdhcmUgc3VwcGxpZXMgYW4gSENEUC4KKworVFJPVUJMRVNIT09USU5HIFNFUklBTCBDT05TT0xFIFBST0JMRU1TCisKKyAgICBObyBrZXJuZWwgb3V0cHV0IGFmdGVyIGVsaWxvIHByaW50cyAiVW5jb21wcmVzc2luZyBMaW51eC4uLiBkb25lIjoKKworCS0gWW91IHNwZWNpZmllZCAiY29uc29sZT10dHlTMCIgYnV0IExpbnV4IGNoYW5nZWQgdGhlIGRldmljZQorCSAgdG8gd2hpY2ggdHR5UzAgcmVmZXJzLiAgQ29uZmlndXJlIGV4YWN0bHkgb25lIEVGSSBjb25zb2xlCisJICBkZXZpY2VbM10gYW5kIHJlbW92ZSB0aGUgImNvbnNvbGU9IiBvcHRpb24uCisKKwktIFRoZSBFRkkgY29uc29sZSBwYXRoIGNvbnRhaW5zIGJvdGggYSBWR0EgZGV2aWNlIGFuZCBhIFVBUlQuCisJICBFRkkgYW5kIGVsaWxvIHVzZSBib3RoLCBidXQgTGludXggZGVmYXVsdHMgdG8gVkdBLiAgUmVtb3ZlCisJICB0aGUgVkdBIGRldmljZSBmcm9tIHRoZSBFRkkgY29uc29sZSBwYXRoWzNdLgorCisJLSBNdWx0aXBsZSBVQVJUcyBzZWxlY3RlZCBhcyBFRkkgY29uc29sZSBkZXZpY2VzLiAgRUZJIGFuZAorCSAgZWxpbG8gdXNlIGFsbCBzZWxlY3RlZCBkZXZpY2VzLCBidXQgTGludXggdXNlcyBvbmx5IG9uZS4KKwkgIE1ha2Ugc3VyZSBvbmx5IG9uZSBVQVJUIGlzIHNlbGVjdGVkIGluIHRoZSBFRkkgY29uc29sZQorCSAgcGF0aFszXS4KKworCS0gWW91J3JlIGNvbm5lY3RlZCB0byBhbiBIUCBNUCBwb3J0WzJdIGJ1dCBoYXZlIGEgbm9uLU1QIFVBUlQKKwkgIHNlbGVjdGVkIGFzIEVGSSBjb25zb2xlIGRldmljZS4gIEVGSSB1c2VzIHRoZSBNUCBhcyBhCisJICBjb25zb2xlIGRldmljZSBldmVuIHdoZW4gaXQgaXNuJ3QgZXhwbGljaXRseSBzZWxlY3RlZC4KKwkgIEVpdGhlciBtb3ZlIHRoZSBjb25zb2xlIGNhYmxlIHRvIHRoZSBub24tTVAgVUFSVCwgb3IgY2hhbmdlCisJICB0aGUgRUZJIGNvbnNvbGUgcGF0aFszXSB0byB0aGUgTVAgVUFSVC4KKworICAgIExvbmcgcGF1c2UgKDYwKyBzZWNvbmRzKSBiZXR3ZWVuICJVbmNvbXByZXNzaW5nIExpbnV4Li4uIGRvbmUiIGFuZAorICAgIHN0YXJ0IG9mIGtlcm5lbCBvdXRwdXQ6CisKKwktIE5vIGVhcmx5IGNvbnNvbGUgYmVjYXVzZSB5b3UgdXNlZCAiY29uc29sZT10dHlTPG4+Ii4gIFJlbW92ZQorCSAgdGhlICJjb25zb2xlPSIgb3B0aW9uIGlmIHlvdXIgZmlybXdhcmUgc3VwcGxpZXMgYW4gSENEUC4KKworCS0gSWYgeW91IGRvbid0IGhhdmUgYW4gSENEUCwgdGhlIGtlcm5lbCBkb2Vzbid0IGtub3cgd2hlcmUKKwkgIHlvdXIgY29uc29sZSBsaXZlcyB1bnRpbCB0aGUgZHJpdmVyIGRpc2NvdmVycyBzZXJpYWwKKwkgIGRldmljZXMuICBVc2UgImNvbnNvbGU9dWFydCwgaW8sMHgzZjgiIChvciBhcHByb3ByaWF0ZQorCSAgYWRkcmVzcyBmb3IgeW91ciBtYWNoaW5lKS4KKworICAgIEtlcm5lbCBhbmQgaW5pdCBzY3JpcHQgb3V0cHV0IHdvcmtzIGZpbmUsIGJ1dCBubyAibG9naW46IiBwcm9tcHQ6CisKKwktIEFkZCBnZXR0eSBlbnRyeSB0byAvZXRjL2luaXR0YWIgZm9yIGNvbnNvbGUgdHR5LiAgTG9vayBmb3IKKwkgIHRoZSAiQWRkaW5nIGNvbnNvbGUgb24gdHR5UzxuPiIgbWVzc2FnZSB0aGF0IHRlbGxzIHlvdSB3aGljaAorCSAgZGV2aWNlIGlzIHRoZSBjb25zb2xlLgorCisgICAgImxvZ2luOiIgcHJvbXB0LCBidXQgY2FuJ3QgbG9naW4gYXMgcm9vdDoKKworCS0gQWRkIGVudHJ5IHRvIC9ldGMvc2VjdXJldHR5IGZvciBjb25zb2xlIHR0eS4KKworCisKK1sxXSBodHRwOi8vd3d3LmRpZzY0Lm9yZy9zcGVjaWZpY2F0aW9ucy9ESUc2NF9QQ0RQdjIwLnBkZgorICAgIFRoZSB0YWJsZSB3YXMgb3JpZ2luYWxseSBkZWZpbmVkIGFzIHRoZSAiSENEUCIgZm9yICJIZWFkbGVzcworICAgIENvbnNvbGUvRGVidWcgUG9ydC4iICBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIHRoZSAiUENEUCIgZm9yCisgICAgIlByaW1hcnkgQ29uc29sZSBhbmQgRGVidWcgUG9ydCBEZXZpY2VzLiIKKworWzJdIFRoZSBIUCBNUCAobWFuYWdlbWVudCBwcm9jZXNzb3IpIGlzIGEgUENJIGRldmljZSB0aGF0IHByb3ZpZGVzCisgICAgc2V2ZXJhbCBVQVJUcy4gIE9uZSBvZiB0aGUgVUFSVHMgaXMgb2Z0ZW4gdXNlZCBhcyBhIGNvbnNvbGU7IHRoZQorICAgIEVGSSBCb290IE1hbmFnZXIgaWRlbnRpZmllcyBpdCBhcyAiQWNwaShIV1AwMDAyLDcwMCkvUGNpKC4uLikvVWFydCIuCisgICAgVGhlIGV4dGVybmFsIGNvbm5lY3Rpb24gaXMgdXN1YWxseSBhIDI1LXBpbiBjb25uZWN0b3IsIGFuZCBhCisgICAgc3BlY2lhbCBkb25nbGUgY29udmVydHMgdGhhdCB0byB0aHJlZSA5LXBpbiBjb25uZWN0b3JzLCBvbmUgb2YKKyAgICB3aGljaCBpcyBsYWJlbGxlZCAiQ29uc29sZS4iCisKK1szXSBFRkkgY29uc29sZSBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHVzaW5nIHRoZSBFRkkgQm9vdCBNYW5hZ2VyCisgICAgIkJvb3Qgb3B0aW9uIG1haW50ZW5hbmNlIiBtZW51LiAgWW91IG1heSBoYXZlIHRvIGludGVycnVwdCB0aGUKKyAgICBib290IHNlcXVlbmNlIHRvIHVzZSB0aGlzIG1lbnUsIGFuZCB5b3Ugd2lsbCBoYXZlIHRvIHJlc2V0IHRoZQorICAgIGJveCBhZnRlciBjaGFuZ2luZyBjb25zb2xlIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2libS1hY3BpLnR4dCBiL0RvY3VtZW50YXRpb24vaWJtLWFjcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzdiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2libS1hY3BpLnR4dApAQCAtMCwwICsxLDQ3NCBAQAorCQkgICAgSUJNIFRoaW5rUGFkIEFDUEkgRXh0cmFzIERyaXZlcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAwLjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOCBOb3ZlbWJlciAyMDA0CisKKyAgICAgICAgICAgICAgIEJvcmlzbGF2IERlaWFub3YgPGJvcmlzbGF2QHVzZXJzLnNmLm5ldD4KKwkJICAgICAgaHR0cDovL2libS1hY3BpLnNmLm5ldC8KKworCitUaGlzIGlzIGEgTGludXggQUNQSSBkcml2ZXIgZm9yIHRoZSBJQk0gVGhpbmtQYWQgbGFwdG9wcy4gSXQgYWltcyB0bworc3VwcG9ydCB2YXJpb3VzIGZlYXR1cmVzIG9mIHRoZXNlIGxhcHRvcHMgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaAordGhlIEFDUEkgZnJhbWV3b3JrIGJ1dCBub3Qgb3RoZXJ3aXNlIHN1cHBvcnRlZCBieSB0aGUgZ2VuZXJpYyBMaW51eAorQUNQSSBkcml2ZXJzLgorCisKK1N0YXR1cworLS0tLS0tCisKK1RoZSBmZWF0dXJlcyBjdXJyZW50bHkgc3VwcG9ydGVkIGFyZSB0aGUgZm9sbG93aW5nIChzZWUgYmVsb3cgZm9yCitkZXRhaWxlZCBkZXNjcmlwdGlvbik6CisKKwktIEZuIGtleSBjb21iaW5hdGlvbnMKKwktIEJsdWV0b290aCBlbmFibGUgYW5kIGRpc2FibGUKKwktIHZpZGVvIG91dHB1dCBzd2l0Y2hpbmcsIGV4cGFuc2lvbiBjb250cm9sCQorCS0gVGhpbmtMaWdodCBvbiBhbmQgb2ZmCisJLSBsaW1pdGVkIGRvY2tpbmcgYW5kIHVuZG9ja2luZworCS0gVWx0cmFCYXkgZWplY3QKKwktIEV4cGVyaW1lbnRhbDogQ01PUyBjb250cm9sCisJLSBFeHBlcmltZW50YWw6IExFRCBjb250cm9sCisJLSBFeHBlcmltZW50YWw6IEFDUEkgc291bmRzCisKK0EgY29tcGF0aWJpbGl0eSB0YWJsZSBieSBtb2RlbCBhbmQgZmVhdHVyZSBpcyBtYWludGFpbmVkIG9uIHRoZSB3ZWIKK3NpdGUsIGh0dHA6Ly9pYm0tYWNwaS5zZi5uZXQvLiBJIGFwcHJlY2lhdGUgYW55IHN1Y2Nlc3Mgb3IgZmFpbHVyZQorcmVwb3J0cywgZXNwZWNpYWxseSBpZiB0aGV5IGFkZCB0byBvciBjb3JyZWN0IHRoZSBjb21wYXRpYmlsaXR5IHRhYmxlLgorUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpbiB5b3VyIHJlcG9ydDoKKworCS0gVGhpbmtQYWQgbW9kZWwgbmFtZQorCS0gYSBjb3B5IG9mIHlvdXIgRFNEVCwgZnJvbSAvcHJvYy9hY3BpL2RzZHQKKwktIHdoaWNoIGRyaXZlciBmZWF0dXJlcyB3b3JrIGFuZCB3aGljaCBkb24ndAorCS0gdGhlIG9ic2VydmVkIGJlaGF2aW9yIG9mIG5vbi13b3JraW5nIGZlYXR1cmVzCisKK0FueSBvdGhlciBjb21tZW50cyBvciBwYXRjaGVzIGFyZSBhbHNvIG1vcmUgdGhhbiB3ZWxjb21lLgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgY29tcGlsaW5nIHRoaXMgZHJpdmVyIGFzIGluY2x1ZGVkIGluIHRoZSBMaW51eCBrZXJuZWwKK3NvdXJjZXMsIHNpbXBseSBlbmFibGUgdGhlIENPTkZJR19BQ1BJX0lCTSBvcHRpb24gKFBvd2VyIE1hbmFnZW1lbnQgLworQUNQSSAvIElCTSBUaGlua1BhZCBMYXB0b3AgRXh0cmFzKS4gVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcworaG93IHRvIGluc3RhbGwgdGhpcyBkcml2ZXIgd2hlbiBkb3dubG9hZGVkIGZyb20gdGhlIHdlYiBzaXRlLgorCitGaXJzdCwgeW91IG5lZWQgdG8gZ2V0IGEga2VybmVsIHdpdGggQUNQSSBzdXBwb3J0IHVwIGFuZCBydW5uaW5nLgorUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9hY3BpLnNvdXJjZWZvcmdlLm5ldC8gZm9yIGhlbHAgd2l0aCB0aGlzCitzdGVwLiBIb3cgc3VjY2Vzc2Z1bCB5b3Ugd2lsbCBiZSBkZXBlbmRzIGEgbG90IG9uIHlvdSBUaGlua1BhZCBtb2RlbCwKK3RoZSBrZXJuZWwgeW91IGFyZSB1c2luZyBhbmQgYW55IGFkZGl0aW9uYWwgcGF0Y2hlcyBhcHBsaWVkLiBUaGUKK2tlcm5lbCBwcm92aWRlZCB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uIG1heSBub3QgYmUgZ29vZCBlbm91Z2guIEkKK25lZWRlZCB0byBjb21waWxlIGEgMi42Ljcga2VybmVsIHdpdGggdGhlIDIwMDQwNzE1IEFDUEkgcGF0Y2ggdG8gZ2V0CitBQ1BJIHdvcmtpbmcgcmVsaWFibHkgb24gbXkgVGhpbmtQYWQgWDQwLiBPbGQgVGhpbmtQYWQgbW9kZWxzIG1heSBub3QKK2JlIHN1cHBvcnRlZCBhdCBhbGwuCisKK0Fzc3VtaW5nIHlvdSBoYXZlIHRoZSBiYXNpYyBBQ1BJIHN1cHBvcnQgd29ya2luZyAoZS5nLiB5b3UgY2FuIHNlZSB0aGUKKy9wcm9jL2FjcGkgZGlyZWN0b3J5KSwgZm9sbG93IHRoZSBmb2xsb3dpbmcgc3RlcHMgdG8gaW5zdGFsbCB0aGlzCitkcml2ZXI6CisKKwktIHVucGFjayB0aGUgYXJjaGl2ZToKKworCQl0YXIgeHp2ZiBpYm0tYWNwaS14LnkudGFyLmd6OyBjZCBpYm0tYWNwaS14LnkKKworCS0gY29tcGlsZSB0aGUgZHJpdmVyOgorCisJCW1ha2UKKworCS0gaW5zdGFsbCB0aGUgbW9kdWxlIGluIHlvdXIga2VybmVsIG1vZHVsZXMgZGlyZWN0b3J5OgorCisJCW1ha2UgaW5zdGFsbAorCisJLSBsb2FkIHRoZSBtb2R1bGU6CisKKwkJbW9kcHJvYmUgaWJtX2FjcGkKKworQWZ0ZXIgbG9hZGluZyB0aGUgbW9kdWxlLCBjaGVjayB0aGUgImRtZXNnIiBvdXRwdXQgZm9yIGFueSBlcnJvciBtZXNzYWdlcy4KKworCitGZWF0dXJlcworLS0tLS0tLS0KKworVGhlIGRyaXZlciBjcmVhdGVzIHRoZSAvcHJvYy9hY3BpL2libSBkaXJlY3RvcnkuIFRoZXJlIGlzIGEgZmlsZSB1bmRlcgordGhhdCBkaXJlY3RvcnkgZm9yIGVhY2ggZmVhdHVyZSBkZXNjcmliZWQgYmVsb3cuIE5vdGUgdGhhdCB3aGlsZSB0aGUKK2RyaXZlciBpcyBzdGlsbCBpbiB0aGUgYWxwaGEgc3RhZ2UsIHRoZSBleGFjdCBwcm9jIGZpbGUgZm9ybWF0IGFuZAorY29tbWFuZHMgc3VwcG9ydGVkIGJ5IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGlzIGd1YXJhbnRlZWQgdG8gY2hhbmdlCitmcmVxdWVudGx5LgorCitEcml2ZXIgVmVyc2lvbiAtLSAvcHJvYy9hY3BpL2libS9kcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgbmFtZSBhbmQgdmVyc2lvbi4gTm8gY29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhpcyBmaWxlLgorCitIb3QgS2V5cyAtLSAvcHJvYy9hY3BpL2libS9ob3RrZXkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRob3V0IHRoaXMgZHJpdmVyLCBvbmx5IHRoZSBGbi1GNCBrZXkgKHNsZWVwIGJ1dHRvbikgZ2VuZXJhdGVzIGFuCitBQ1BJIGV2ZW50LiBXaXRoIHRoZSBkcml2ZXIgbG9hZGVkLCB0aGUgaG90a2V5IGZlYXR1cmUgZW5hYmxlZCBhbmQgdGhlCittYXNrIHNldCAoc2VlIGJlbG93KSwgdGhlIHZhcmlvdXMgaG90IGtleXMgZ2VuZXJhdGUgQUNQSSBldmVudHMgaW4gdGhlCitmb2xsb3dpbmcgZm9ybWF0OgorCisJaWJtL2hvdGtleSBIS0VZIDAwMDAwMDgwIDAwMDB4eHh4CisKK1RoZSBsYXN0IGZvdXIgZGlnaXRzIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBrZXkgY29tYmluYXRpb24gcHJlc3NlZC4KK0FsbCBsYWJlbGVkIEZuLUZ4IGtleSBjb21iaW5hdGlvbnMgZ2VuZXJhdGUgZGlzdGluY3QgZXZlbnRzLiBJbgorYWRkaXRpb24sIHRoZSBsaWQgbWljcm9zd2l0Y2ggYW5kIHNvbWUgZG9ja2luZyBzdGF0aW9uIGJ1dHRvbnMgbWF5CithbHNvIGdlbmVyYXRlIHN1Y2ggZXZlbnRzLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoaXMgZmlsZToKKworCWVjaG8gZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGVuYWJsZSB0aGUgaG90IGtleXMgZmVhdHVyZQorCWVjaG8gZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBkaXNhYmxlIHRoZSBob3Qga2V5cyBmZWF0dXJlCisJZWNobyAweGZmZmYgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZW5hYmxlIGFsbCBwb3NzaWJsZSBob3Qga2V5cworCWVjaG8gMHgwMDAwID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGRpc2FibGUgYWxsIHBvc3NpYmxlIGhvdCBrZXlzCisJLi4uIGFueSBvdGhlciA0LWhleC1kaWdpdCBtYXNrIC4uLgorCWVjaG8gcmVzZXQgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gcmVzdG9yZSB0aGUgb3JpZ2luYWwgbWFzaworCitUaGUgYml0IG1hc2sgYWxsb3dzIHNvbWUgY29udHJvbCBvdmVyIHdoaWNoIGhvdCBrZXlzIGdlbmVyYXRlIEFDUEkKK2V2ZW50cy4gTm90IGFsbCBiaXRzIGluIHRoZSBtYXNrIGNhbiBiZSBtb2RpZmllZC4gTm90IGFsbCBiaXRzIHRoYXQKK2NhbiBiZSBtb2RpZmllZCBkbyBhbnl0aGluZy4gTm90IGFsbCBob3Qga2V5cyBjYW4gYmUgaW5kaXZpZHVhbGx5Citjb250cm9sbGVkIGJ5IHRoZSBtYXNrLiBNb3N0IHJlY2VudCBUaGlua1BhZCBtb2RlbHMgaG9ub3IgdGhlCitmb2xsb3dpbmcgYml0cyAoYXNzdW1pbmcgdGhlIGhvdCBrZXlzIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZCk6CisKKwlrZXkJYml0CWJlaGF2aW9yIHdoZW4gc2V0CWJlaGF2aW9yIHdoZW4gdW5zZXQKKworCUZuLUYzCQkJYWx3YXlzIGdlbmVyYXRlcyBBQ1BJIGV2ZW50CisJRm4tRjQJCQlhbHdheXMgZ2VuZXJhdGVzIEFDUEkgZXZlbnQKKwlGbi1GNQkwMDEwCWdlbmVyYXRlIEFDUEkgZXZlbnQJZW5hYmxlL2Rpc2FibGUgQmx1ZXRvb3RoCisJRm4tRjcJMDA0MAlnZW5lcmF0ZSBBQ1BJIGV2ZW50CXN3aXRjaCBMQ0QgYW5kIGV4dGVybmFsIGRpc3BsYXkKKwlGbi1GOAkwMDgwCWdlbmVyYXRlIEFDUEkgZXZlbnQJZXhwYW5kIHNjcmVlbiBvciBub25lCisJRm4tRjkJMDEwMAlnZW5lcmF0ZSBBQ1BJIGV2ZW50CW5vbmUKKwlGbi1GMTIJCQlhbHdheXMgZ2VuZXJhdGVzIEFDUEkgZXZlbnQKKworU29tZSBtb2RlbHMgZG8gbm90IHN1cHBvcnQgYWxsIG9mIHRoZSBhYm92ZS4gRm9yIGV4YW1wbGUsIHRoZSBUMzAgZG9lcworbm90IHN1cHBvcnQgRm4tRjUgYW5kIEZuLUY5LiBPdGhlciBtb2RlbHMgZG8gbm90IHN1cHBvcnQgdGhlIG1hc2sgYXQKK2FsbC4gT24gdGhvc2UgbW9kZWxzLCBob3Qga2V5cyBjYW5ub3QgYmUgY29udHJvbGxlZCBpbmRpdmlkdWFsbHkuCisKK05vdGUgdGhhdCBlbmFibGluZyBBQ1BJIGV2ZW50cyBmb3Igc29tZSBrZXlzIHByZXZlbnRzIHRoZWlyIGRlZmF1bHQKK2JlaGF2aW9yLiBGb3IgZXhhbXBsZSwgaWYgZXZlbnRzIGZvciBGbi1GNSBhcmUgZW5hYmxlZCwgdGhhdCBrZXkgd2lsbAorbm8gbG9uZ2VyIGVuYWJsZS9kaXNhYmxlIEJsdWV0b290aCBieSBpdHNlbGYuIFRoaXMgY2FuIHN0aWxsIGJlIGRvbmUKK2Zyb20gYW4gYWNwaWQgaGFuZGxlciBmb3IgdGhlIGlibS9ob3RrZXkgZXZlbnQuCisKK05vdGUgYWxzbyB0aGF0IG5vdCBhbGwgRm4ga2V5IGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkIHRocm91Z2gKK0FDUEkuIEZvciBleGFtcGxlLCBvbiB0aGUgWDQwLCB0aGUgYnJpZ2h0bmVzcywgdm9sdW1lIGFuZCAiQWNjZXNzIElCTSIKK2J1dHRvbnMgZG8gbm90IGdlbmVyYXRlIEFDUEkgZXZlbnRzIGV2ZW4gd2l0aCB0aGlzIGRyaXZlci4gVGhleSAqY2FuKgorYmUgdXNlZCB0aHJvdWdoIHRoZSAiVGhpbmtQYWQgQnV0dG9ucyIgdXRpbGl0eSwgc2VlCitodHRwOi8vd3d3Lm5vbmdudS5vcmcvdHBiLworCitCbHVldG9vdGggLS0gL3Byb2MvYWNwaS9pYm0vYmx1ZXRvb3RoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmVhdHVyZSBzaG93cyB0aGUgcHJlc2VuY2UgYW5kIGN1cnJlbnQgc3RhdGUgb2YgYSBCbHVldG9vdGgKK2RldmljZS4gSWYgQmx1ZXRvb3RoIGlzIGluc3RhbGxlZCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUgdXNlZDoKKworCWVjaG8gZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vYmx1ZXRvb3RoCisJZWNobyBkaXNhYmxlID4gL3Byb2MvYWNwaS9pYm0vYmx1ZXRvb3RoCisKK1ZpZGVvIG91dHB1dCBjb250cm9sIC0tIC9wcm9jL2FjcGkvaWJtL3ZpZGVvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZlYXR1cmUgYWxsb3dzIGNvbnRyb2wgb3ZlciB0aGUgZGV2aWNlcyB1c2VkIGZvciB2aWRlbyBvdXRwdXQgLQorTENELCBDUlQgb3IgRFZJIChpZiBhdmFpbGFibGUpLiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CisKKwllY2hvIGxjZF9lbmFibGUgPiAvcHJvYy9hY3BpL2libS92aWRlbworCWVjaG8gbGNkX2Rpc2FibGUgPiAvcHJvYy9hY3BpL2libS92aWRlbworCWVjaG8gY3J0X2VuYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyBjcnRfZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyBkdmlfZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKwllY2hvIGR2aV9kaXNhYmxlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKwllY2hvIGF1dG9fZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKwllY2hvIGF1dG9fZGlzYWJsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisJZWNobyBleHBhbmRfdG9nZ2xlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKwllY2hvIHZpZGVvX3N3aXRjaCA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCisKK0VhY2ggdmlkZW8gb3V0cHV0IGRldmljZSBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBpbmRpdmlkdWFsbHkuCitSZWFkaW5nIC9wcm9jL2FjcGkvaWJtL3ZpZGVvIHNob3dzIHRoZSBzdGF0dXMgb2YgZWFjaCBkZXZpY2UuCisKK0F1dG9tYXRpYyB2aWRlbyBzd2l0Y2hpbmcgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuICBXaGVuIGF1dG9tYXRpYwordmlkZW8gc3dpdGNoaW5nIGlzIGVuYWJsZWQsIGNlcnRhaW4gZXZlbnRzIChlLmcuIG9wZW5pbmcgdGhlIGxpZCwKK2RvY2tpbmcgb3IgdW5kb2NraW5nKSBjYXVzZSB0aGUgdmlkZW8gb3V0cHV0IGRldmljZSB0byBjaGFuZ2UKK2F1dG9tYXRpY2FsbHkuIFdoaWxlIHRoaXMgY2FuIGJlIHVzZWZ1bCwgaXQgYWxzbyBjYXVzZXMgZmxpY2tlcmluZworYW5kLCBvbiB0aGUgWDQwLCB2aWRlbyBjb3JydXB0aW9uLiBCeSBkaXNhYmxpbmcgYXV0b21hdGljIHN3aXRjaGluZywKK3RoZSBmbGlja2VyaW5nIG9yIHZpZGVvIGNvcnJ1cHRpb24gY2FuIGJlIGF2b2lkZWQuCisKK1RoZSB2aWRlb19zd2l0Y2ggY29tbWFuZCBjeWNsZXMgdGhyb3VnaCB0aGUgYXZhaWxhYmxlIHZpZGVvIG91dHB1dHMKKyhpdCBzdW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIEZuLUY3KS4KKworVmlkZW8gZXhwYW5zaW9uIGNhbiBiZSB0b2dnbGVkIHRocm91Z2ggdGhpcyBmZWF0dXJlLiBUaGlzIGNvbnRyb2xzCit3aGV0aGVyIHRoZSBkaXNwbGF5IGlzIGV4cGFuZGVkIHRvIGZpbGwgdGhlIGVudGlyZSBMQ0Qgc2NyZWVuIHdoZW4gYQorbW9kZSB3aXRoIGxlc3MgdGhhbiBmdWxsIHJlc29sdXRpb24gaXMgdXNlZC4gTm90ZSB0aGF0IHRoZSBjdXJyZW50Cit2aWRlbyBleHBhbnNpb24gc3RhdHVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkIHRocm91Z2ggdGhpcyBmZWF0dXJlLgorCitOb3RlIHRoYXQgb24gbWFueSBtb2RlbHMgKHBhcnRpY3VsYXJseSB0aG9zZSB1c2luZyBSYWRlb24gZ3JhcGhpY3MKK2NoaXBzKSB0aGUgWCBkcml2ZXIgY29uZmlndXJlcyB0aGUgdmlkZW8gY2FyZCBpbiBhIHdheSB3aGljaCBwcmV2ZW50cworRm4tRjcgZnJvbSB3b3JraW5nLiBUaGlzIGFsc28gZGlzYWJsZXMgdGhlIHZpZGVvIG91dHB1dCBzd2l0Y2hpbmcKK2ZlYXR1cmVzIG9mIHRoaXMgZHJpdmVyLCBhcyBpdCB1c2VzIHRoZSBzYW1lIEFDUEkgbWV0aG9kcyBhcworRm4tRjcuIFZpZGVvIHN3aXRjaGluZyBvbiB0aGUgY29uc29sZSBzaG91bGQgc3RpbGwgd29yay4KKworVGhpbmtMaWdodCBjb250cm9sIC0tIC9wcm9jL2FjcGkvaWJtL2xpZ2h0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBUaGlua0xpZ2h0IGNhbiBiZSBmb3VuZCBpbiB0aGlzIGZpbGUuIEEgZmV3Cittb2RlbHMgd2hpY2ggZG8gbm90IG1ha2UgdGhlIHN0YXR1cyBhdmFpbGFibGUgd2lsbCBzaG93IGl0IGFzCisidW5rbm93biIuIFRoZSBhdmFpbGFibGUgY29tbWFuZHMgYXJlOgorCisJZWNobyBvbiAgPiAvcHJvYy9hY3BpL2libS9saWdodAorCWVjaG8gb2ZmID4gL3Byb2MvYWNwaS9pYm0vbGlnaHQKKworRG9ja2luZyAvIFVuZG9ja2luZyAtLSAvcHJvYy9hY3BpL2libS9kb2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9ja2luZyBhbmQgdW5kb2NraW5nIChlLmcuIHdpdGggdGhlIFg0IFVsdHJhQmFzZSkgcmVxdWlyZXMgc29tZQorYWN0aW9ucyB0byBiZSB0YWtlbiBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBzYWZlbHkgbWFrZSBvciBicmVhawordGhlIGVsZWN0cmljYWwgY29ubmVjdGlvbnMgd2l0aCB0aGUgZG9jay4KKworVGhlIGRvY2tpbmcgZmVhdHVyZSBvZiB0aGlzIGRyaXZlciBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBBQ1BJIGV2ZW50czoKKworCWlibS9kb2NrIEdEQ0sgMDAwMDAwMDMgMDAwMDAwMDEgLS0gZWplY3QgcmVxdWVzdAorCWlibS9kb2NrIEdEQ0sgMDAwMDAwMDMgMDAwMDAwMDIgLS0gdW5kb2NrZWQKKwlpYm0vZG9jayBHRENLIDAwMDAwMDAwIDAwMDAwMDAzIC0tIGRvY2tlZAorCitOT1RFOiBUaGVzZSBldmVudHMgd2lsbCBvbmx5IGJlIGdlbmVyYXRlZCBpZiB0aGUgbGFwdG9wIHdhcyBkb2NrZWQKK3doZW4gb3JpZ2luYWxseSBib290ZWQuIFRoaXMgaXMgZHVlIHRvIHRoZSBjdXJyZW50IGxhY2sgb2Ygc3VwcG9ydCBmb3IKK2hvdCBwbHVnZ2luZyBvZiBkZXZpY2VzIGluIHRoZSBMaW51eCBBQ1BJIGZyYW1ld29yay4gSWYgdGhlIGxhcHRvcCB3YXMKK2Jvb3RlZCB3aGlsZSBub3QgaW4gdGhlIGRvY2ssIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBpcyBzaG93biBpbiB0aGUKK2xvZ3M6ICJpYm1fYWNwaTogZG9jayBkZXZpY2Ugbm90IHByZXNlbnQiLiBObyBkb2NrLXJlbGF0ZWQgZXZlbnRzIGFyZQorZ2VuZXJhdGVkIGJ1dCB0aGUgZG9jayBhbmQgdW5kb2NrIGNvbW1hbmRzIGRlc2NyaWJlZCBiZWxvdyBzdGlsbAord29yay4gVGhleSBjYW4gYmUgZXhlY3V0ZWQgbWFudWFsbHkgb3IgdHJpZ2dlcmVkIGJ5IEZuIGtleQorY29tYmluYXRpb25zIChzZWUgdGhlIGV4YW1wbGUgYWNwaWQgY29uZmlndXJhdGlvbiBmaWxlcyBpbmNsdWRlZCBpbgordGhlIGRyaXZlciB0YXJiYWxsIHBhY2thZ2UgYXZhaWxhYmxlIG9uIHRoZSB3ZWIgc2l0ZSkuCisKK1doZW4gdGhlIGVqZWN0IHJlcXVlc3QgYnV0dG9uIG9uIHRoZSBkb2NrIGlzIHByZXNzZWQsIHRoZSBmaXJzdCBldmVudAorYWJvdmUgaXMgZ2VuZXJhdGVkLiBUaGUgaGFuZGxlciBmb3IgdGhpcyBldmVudCBzaG91bGQgaXNzdWUgdGhlCitmb2xsb3dpbmcgY29tbWFuZDoKKworCWVjaG8gdW5kb2NrID4gL3Byb2MvYWNwaS9pYm0vZG9jaworCitBZnRlciB0aGUgTEVEIG9uIHRoZSBkb2NrIGdvZXMgb2ZmLCBpdCBpcyBzYWZlIHRvIGVqZWN0IHRoZSBsYXB0b3AuCitOb3RlOiBpZiB5b3UgcHJlc3NlZCB0aGlzIGtleSBieSBtaXN0YWtlLCBnbyBhaGVhZCBhbmQgZWplY3QgdGhlCitsYXB0b3AsIHRoZW4gZG9jayBpdCBiYWNrIGluLiBPdGhlcndpc2UsIHRoZSBkb2NrIG1heSBub3QgZnVuY3Rpb24gYXMKK2V4cGVjdGVkLgorCitXaGVuIHRoZSBsYXB0b3AgaXMgZG9ja2VkLCB0aGUgdGhpcmQgZXZlbnQgYWJvdmUgaXMgZ2VuZXJhdGVkLiBUaGUKK2hhbmRsZXIgZm9yIHRoaXMgZXZlbnQgc2hvdWxkIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBmdWxseQorZW5hYmxlIHRoZSBkb2NrOgorCisJZWNobyBkb2NrID4gL3Byb2MvYWNwaS9pYm0vZG9jaworCitUaGUgY29udGVudHMgb2YgdGhlIC9wcm9jL2FjcGkvaWJtL2RvY2sgZmlsZSBzaG93cyB0aGUgY3VycmVudCBzdGF0dXMKK29mIHRoZSBkb2NrLCBhcyBwcm92aWRlZCBieSB0aGUgQUNQSSBmcmFtZXdvcmsuCisKK1RoZSBkb2NraW5nIHN1cHBvcnQgaW4gdGhpcyBkcml2ZXIgZG9lcyBub3QgdGFrZSBjYXJlIG9mIGVuYWJsaW5nIG9yCitkaXNhYmxpbmcgYW55IG90aGVyIGRldmljZXMgeW91IG1heSBoYXZlIGF0dGFjaGVkIHRvIHRoZSBkb2NrLiBGb3IKK2V4YW1wbGUsIGEgQ0QgZHJpdmUgcGx1Z2dlZCBpbnRvIHRoZSBVbHRyYUJhc2UgbmVlZHMgdG8gYmUgZGlzYWJsZWQgb3IKK2VuYWJsZWQgc2VwYXJhdGVseS4gU2VlIHRoZSBwcm92aWRlZCBleGFtcGxlIGFjcGlkIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2ZvciBob3cgdGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkLgorCitUaGVyZSBpcyBubyBzdXBwb3J0IHlldCBmb3IgUENJIGRldmljZXMgdGhhdCBtYXkgYmUgYXR0YWNoZWQgdG8gYQorZG9ja2luZyBzdGF0aW9uLCBlLmcuIGluIHRoZSBUaGlua1BhZCBEb2NrIElJLiBUaGUgZHJpdmVyIGN1cnJlbnRseQorZG9lcyBub3QgcmVjb2duaXplLCBlbmFibGUgb3IgZGlzYWJsZSBzdWNoIGRldmljZXMuIFRoaXMgbWVhbnMgdGhhdAordGhlIG9ubHkgZG9ja2luZyBzdGF0aW9ucyBjdXJyZW50bHkgc3VwcG9ydGVkIGFyZSB0aGUgWC1zZXJpZXMKK1VsdHJhQmFzZSBkb2NrcyBhbmQgImR1bWIiIHBvcnQgcmVwbGljYXRvcnMgbGlrZSB0aGUgTWluaSBEb2NrICh0aGUKK2xhdHRlciBkb24ndCBuZWVkIGFueSBBQ1BJIHN1cHBvcnQsIGFjdHVhbGx5KS4KKworVWx0cmFCYXkgRWplY3QgLS0gL3Byb2MvYWNwaS9pYm0vYmF5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW5zZXJ0aW5nIG9yIGVqZWN0aW5nIGFuIFVsdHJhQmF5IGRldmljZSByZXF1aXJlcyBzb21lIGFjdGlvbnMgdG8gYmUKK3Rha2VuIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIHNhZmVseSBtYWtlIG9yIGJyZWFrIHRoZSBlbGVjdHJpY2FsCitjb25uZWN0aW9ucyB3aXRoIHRoZSBkZXZpY2UuCisKK1RoaXMgZmVhdHVyZSBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBBQ1BJIGV2ZW50czoKKworCWlibS9iYXkgTVNUUiAwMDAwMDAwMyAwMDAwMDAwMCAtLSBlamVjdCByZXF1ZXN0CisJaWJtL2JheSBNU1RSIDAwMDAwMDAxIDAwMDAwMDAwIC0tIGVqZWN0IGxldmVyIGluc2VydGVkCisKK05PVEU6IFRoZXNlIGV2ZW50cyB3aWxsIG9ubHkgYmUgZ2VuZXJhdGVkIGlmIHRoZSBVbHRyYUJheSB3YXMgcHJlc2VudAord2hlbiB0aGUgbGFwdG9wIHdhcyBvcmlnaW5hbGx5IGJvb3RlZCAob24gdGhlIFggc2VyaWVzLCB0aGUgVWx0cmFCYXkKK2lzIGluIHRoZSBkb2NrLCBzbyBpdCBtYXkgbm90IGJlIHByZXNlbnQgaWYgdGhlIGxhcHRvcCB3YXMgdW5kb2NrZWQpLgorVGhpcyBpcyBkdWUgdG8gdGhlIGN1cnJlbnQgbGFjayBvZiBzdXBwb3J0IGZvciBob3QgcGx1Z2dpbmcgb2YgZGV2aWNlcworaW4gdGhlIExpbnV4IEFDUEkgZnJhbWV3b3JrLiBJZiB0aGUgbGFwdG9wIHdhcyBib290ZWQgd2l0aG91dCB0aGUKK1VsdHJhQmF5LCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgaXMgc2hvd24gaW4gdGhlIGxvZ3M6ICJpYm1fYWNwaTogYmF5CitkZXZpY2Ugbm90IHByZXNlbnQiLiBObyBiYXktcmVsYXRlZCBldmVudHMgYXJlIGdlbmVyYXRlZCBidXQgdGhlIGVqZWN0Citjb21tYW5kIGRlc2NyaWJlZCBiZWxvdyBzdGlsbCB3b3Jrcy4gSXQgY2FuIGJlIGV4ZWN1dGVkIG1hbnVhbGx5IG9yCit0cmlnZ2VyZWQgYnkgYSBob3Qga2V5IGNvbWJpbmF0aW9uLgorCitTbGlkaW5nIHRoZSBlamVjdCBsZXZlciBnZW5lcmF0ZXMgdGhlIGZpcnN0IGV2ZW50IHNob3duIGFib3ZlLiBUaGUKK2hhbmRsZXIgZm9yIHRoaXMgZXZlbnQgc2hvdWxkIHRha2Ugd2hhdGV2ZXIgYWN0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvCitzaHV0IGRvd24gdGhlIGRldmljZSBpbiB0aGUgVWx0cmFCYXkgKGUuZy4gY2FsbCBpZGVjdGwpLCB0aGVuIGlzc3VlCit0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKwllY2hvIGVqZWN0ID4gL3Byb2MvYWNwaS9pYm0vYmF5CisKK0FmdGVyIHRoZSBMRUQgb24gdGhlIFVsdHJhQmF5IGdvZXMgb2ZmLCBpdCBpcyBzYWZlIHRvIHB1bGwgb3V0IHRoZQorZGV2aWNlLgorCitXaGVuIHRoZSBlamVjdCBsZXZlciBpcyBpbnNlcnRlZCwgdGhlIHNlY29uZCBldmVudCBhYm92ZSBpcworZ2VuZXJhdGVkLiBUaGUgaGFuZGxlciBmb3IgdGhpcyBldmVudCBzaG91bGQgdGFrZSB3aGF0ZXZlciBhY3Rpb25zIGFyZQorbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgVWx0cmFCYXkgZGV2aWNlIChlLmcuIGNhbGwgaWRlY3RsKS4KKworVGhlIGNvbnRlbnRzIG9mIHRoZSAvcHJvYy9hY3BpL2libS9iYXkgZmlsZSBzaG93cyB0aGUgY3VycmVudCBzdGF0dXMKK29mIHRoZSBVbHRyYUJheSwgYXMgcHJvdmlkZWQgYnkgdGhlIEFDUEkgZnJhbWV3b3JrLgorCitFeHBlcmltZW50YWwgRmVhdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBtYXJrZWQgZXhwZXJpbWVudGFsIGJlY2F1c2UgdXNpbmcgdGhlbQoraW52b2x2ZXMgZ3Vlc3NpbmcgdGhlIGNvcnJlY3QgdmFsdWVzIG9mIHNvbWUgcGFyYW1ldGVycy4gR3Vlc3NpbmcKK2luY29ycmVjdGx5IG1heSBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMgbGlrZSBjcmFzaGluZyB5b3VyCitUaGlua1BhZC4gVVNFIFRIRVNFIFdJVEggQ0FVVElPTiEgVG8gYWN0aXZhdGUgdGhlbSwgeW91J2xsIG5lZWQgdG8KK3N1cHBseSB0aGUgZXhwZXJpbWVudGFsPTEgcGFyYW1ldGVyIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLgorCitFeHBlcmltZW50YWw6IENNT1MgY29udHJvbCAtIC9wcm9jL2FjcGkvaWJtL2Ntb3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZlYXR1cmUgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBBQ1BJIGZpcm13YXJlIHRvIGNvbnRyb2wgdGhlCitUaGlua0xpZ2h0IG9uIG1vc3QgbmV3ZXIgVGhpbmtQYWQgbW9kZWxzLiBJdCBhcHBlYXJzIHRoYXQgaXQgY2FuIGFsc28KK2NvbnRyb2wgTENEIGJyaWdodG5lc3MsIHNvdW5kcyB2b2x1bWUgYW5kIG1vcmUsIGJ1dCBvbmx5IG9uIHNvbWUKK21vZGVscy4KKworVGhlIGNvbW1hbmRzIGFyZSBub24tbmVnYXRpdmUgaW50ZWdlciBudW1iZXJzOgorCisJZWNobyAwID4vcHJvYy9hY3BpL2libS9jbW9zCisJZWNobyAxID4vcHJvYy9hY3BpL2libS9jbW9zCisJZWNobyAyID4vcHJvYy9hY3BpL2libS9jbW9zCisJLi4uCisKK1RoZSByYW5nZSBvZiBudW1iZXJzIHdoaWNoIGFyZSB1c2VkIGludGVybmFsbHkgYnkgdmFyaW91cyBtb2RlbHMgaXMgMAordG8gMjEsIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgbnVtYmVycyBvdXRzaWRlIHRoaXMgcmFuZ2UgaGF2ZQoraW50ZXJlc3RpbmcgYmVoYXZpb3IuIEhlcmUgaXMgdGhlIGJlaGF2aW9yIG9uIHRoZSBYNDAgKHRwYiBpcyB0aGUKK1RoaW5rUGFkIEJ1dHRvbnMgdXRpbGl0eSk6CisKKwkwIC0gbm8gZWZmZWN0IGJ1dCB0cGIgcmVwb3J0cyAiVm9sdW1lIGRvd24iCisJMSAtIG5vIGVmZmVjdCBidXQgdHBiIHJlcG9ydHMgIlZvbHVtZSB1cCIKKwkyIC0gbm8gZWZmZWN0IGJ1dCB0cGIgcmVwb3J0cyAiTXV0ZSBvbiIKKwkzIC0gc2ltdWxhdGUgcHJlc3NpbmcgdGhlICJBY2Nlc3MgSUJNIiBidXR0b24KKwk0IC0gTENEIGJyaWdodG5lc3MgdXAKKwk1IC0gTENEIGJyaWdodG5lc3MgZG93bgorCTExIC0gdG9nZ2xlIHNjcmVlbiBleHBhbnNpb24KKwkxMiAtIFRoaW5rTGlnaHQgb24KKwkxMyAtIFRoaW5rTGlnaHQgb2ZmCisJMTQgLSBubyBlZmZlY3QgYnV0IHRwYiByZXBvcnRzIFRoaW5rTGlnaHQgc3RhdHVzIGNoYW5nZQorCitJZiB5b3UgdHJ5IHRoaXMgZmVhdHVyZSwgcGxlYXNlIHNlbmQgbWUgYSByZXBvcnQgc2ltaWxhciB0byB0aGUKK2Fib3ZlLiBPbiBtb2RlbHMgd2hpY2ggYWxsb3cgY29udHJvbCBvZiBMQ0QgYnJpZ2h0bmVzcyBvciBzb3VuZAordm9sdW1lLCBJJ2QgbGlrZSB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBhbiB1c2VyLWZyaWVuZGx5Cit3YXksIGJ1dCBmaXJzdCBJIG5lZWQgYSB3YXkgdG8gaWRlbnRpZnkgdGhlIG1vZGVscyB3aGljaCB0aGlzIGlzCitwb3NzaWJsZS4KKworRXhwZXJpbWVudGFsOiBMRUQgY29udHJvbCAtIC9wcm9jL2FjcGkvaWJtL0xFRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIG9mIHRoZSBMRUQgaW5kaWNhdG9ycyBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHRoaXMgZmVhdHVyZS4gVGhlCithdmFpbGFibGUgY29tbWFuZHMgYXJlOgorCisJZWNobyA8bGVkIG51bWJlcj4gb24gPi9wcm9jL2FjcGkvaWJtL2xlZAorCWVjaG8gPGxlZCBudW1iZXI+IG9mZiA+L3Byb2MvYWNwaS9pYm0vbGVkCisJZWNobyA8bGVkIG51bWJlcj4gYmxpbmsgPi9wcm9jL2FjcGkvaWJtL2xlZAorCitUaGUgPGxlZCBudW1iZXI+IHBhcmFtZXRlciBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiBUaGUgcmFuZ2Ugb2YgTEVECitudW1iZXJzIHVzZWQgaW50ZXJuYWxseSBieSB2YXJpb3VzIG1vZGVscyBpcyAwIHRvIDcgYnV0IGl0J3MgcG9zc2libGUKK3RoYXQgbnVtYmVycyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIGFsc28gdmFsaWQuIEhlcmUgaXMgdGhlIG1hcHBpbmcgb24KK3RoZSBYNDA6CisKKwkwIC0gcG93ZXIKKwkxIC0gYmF0dGVyeSAob3JhbmdlKQorCTIgLSBiYXR0ZXJ5IChncmVlbikKKwkzIC0gVWx0cmFCYXNlCisJNCAtIFVsdHJhQmF5CisJNyAtIHN0YW5kYnkKKworQWxsIG9mIHRoZSBhYm92ZSBjYW4gYmUgdHVybmVkIG9uIGFuZCBvZmYgYW5kIGNhbiBiZSBtYWRlIHRvIGJsaW5rLgorCitJZiB5b3UgdHJ5IHRoaXMgZmVhdHVyZSwgcGxlYXNlIHNlbmQgbWUgYSByZXBvcnQgc2ltaWxhciB0byB0aGUKK2Fib3ZlLiBJJ2QgbGlrZSB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBhbiB1c2VyLWZyaWVuZGx5IHdheSwKK2J1dCBmaXJzdCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHdoaWNoIG51bWJlcnMgY29ycmVzcG9uZCB0byB3aGljaAorTEVEcyBvbiB2YXJpb3VzIG1vZGVscy4KKworRXhwZXJpbWVudGFsOiBBQ1BJIHNvdW5kcyAtIC9wcm9jL2FjcGkvaWJtL2JlZXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBCRUVQIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIEFDUEkgZmlybXdhcmUgdG8gcHJvdmlkZQorYXVkaWJsZSBhbGVydHMgaW4gdmFyaW91cyBzaXR1dGF0aW9uLiBUaGlzIGZlYXR1cmUgYWxsb3dzIHRoZSBzYW1lCitzb3VuZHMgdG8gYmUgdHJpZ2dlcmVkIG1hbnVhbGx5LgorCitUaGUgY29tbWFuZHMgYXJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG51bWJlcnM6CisKKwllY2hvIDAgPi9wcm9jL2FjcGkvaWJtL2JlZXAKKwllY2hvIDEgPi9wcm9jL2FjcGkvaWJtL2JlZXAKKwllY2hvIDIgPi9wcm9jL2FjcGkvaWJtL2JlZXAKKwkuLi4KKworVGhlIHJhbmdlIG9mIG51bWJlcnMgd2hpY2ggYXJlIHVzZWQgaW50ZXJuYWxseSBieSB2YXJpb3VzIG1vZGVscyBpcyAwCit0byAxNywgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBudW1iZXJzIG91dHNpZGUgdGhpcyByYW5nZSBhcmUgYWxzbwordmFsaWQuIEhlcmUgaXMgdGhlIGJlaGF2aW9yIG9uIHRoZSBYNDA6CisKKwkyIC0gdHdvIGJlZXBzLCBwYXVzZSwgdGhpcmQgYmVlcAorCTMgLSBzaW5nbGUgYmVlcAorCTQgLSAidW5hYmxlIgkKKwk1IC0gc2luZ2xlIGJlZXAKKwk2IC0gIkFDL0RDIgorCTcgLSBoaWdoLXBpdGNoZWQgYmVlcAorCTkgLSB0aHJlZSBzaG9ydCBiZWVwcworCTEwIC0gdmVyeSBsb25nIGJlZXAKKwkxMiAtIGxvdy1waXRjaGVkIGJlZXAKKworKEkndmUgb25seSBiZWVuIGFibGUgdG8gaWRlbnRpZnkgYSBjb3VwbGUgb2YgdGhlbSkuCisKK0lmIHlvdSB0cnkgdGhpcyBmZWF0dXJlLCBwbGVhc2Ugc2VuZCBtZSBhIHJlcG9ydCBzaW1pbGFyIHRvIHRoZQorYWJvdmUuIEknZCBsaWtlIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGFuIHVzZXItZnJpZW5kbHkgd2F5LAorYnV0IGZpcnN0IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgd2hpY2ggbnVtYmVycyBjb3JyZXNwb25kIHRvIHdoaWNoCitzb3VuZHMgb24gdmFyaW91cyBtb2RlbHMuCisKKworTXVsdGlwbGUgQ29tbWFuZCwgTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK011bHRpcGxlIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoZSBwcm9jIGZpbGVzIGluIG9uZSBzaG90IGJ5CitzZXBhcmF0aW5nIHRoZW0gd2l0aCBjb21tYXMsIGZvciBleGFtcGxlOgorCisJZWNobyBlbmFibGUsMHhmZmZmID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5CisJZWNobyBsY2RfZGlzYWJsZSxjcnRfZW5hYmxlID4gL3Byb2MvYWNwaS9pYm0vdmlkZW8KKworQ29tbWFuZHMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIHdoZW4gbG9hZGluZyB0aGUgaWJtX2FjcGkgbW9kdWxlLCBmb3IKK2V4YW1wbGU6CisKKwltb2Rwcm9iZSBpYm1fYWNwaSBob3RrZXk9ZW5hYmxlLDB4ZmZmZiB2aWRlbz1hdXRvX2Rpc2FibGUKKworCitFeGFtcGxlIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQUNQSSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbgord2l0aCBhIHVzZXItc3BhY2UgZGFlbW9uLCBhY3BpZC4gVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoaXMKK2RhZW1vbiBjb250cm9sIHdoYXQgYWN0aW9ucyBhcmUgdGFrZW4gaW4gcmVzcG9uc2UgdG8gdmFyaW91cyBBQ1BJCitldmVudHMuIEFuIGV4YW1wbGUgc2V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGluY2x1ZGVkIGluIHRoZQorY29uZmlnLyBkaXJlY3Rvcnkgb2YgdGhlIHRhcmJhbGwgcGFja2FnZSBhdmFpbGFibGUgb24gdGhlIHdlYgorc2l0ZS4gTm90ZSB0aGF0IHRoZXNlIGFyZSBwcm92aWRlZCBmb3IgaWxsdXN0cmF0aW9uIHB1cnBvc2VzIG9ubHkgYW5kCittYXkgbmVlZCB0byBiZSBhZGFwdGVkIHRvIHlvdXIgcGFydGljdWxhciBzZXR1cC4KKworVGhlIGZvbGxvd2luZyB1dGlsaXR5IHNjcmlwdHMgYXJlIHVzZWQgYnkgdGhlIGV4YW1wbGUgYWN0aW9uCitzY3JpcHRzIChpbmNsdWRlZCB3aXRoIGlibS1hY3BpIGZvciBjb21wbGV0ZW5lc3MpOgorCisJL3Vzci9sb2NhbC9zYmluL2lkZWN0bCAtLSBmcm9tIHRoZSBoZHBhcm0gc291cmNlIGRpc3RyaWJ1dGlvbiwKKwkJc2VlIGh0dHA6Ly93d3cuaWJpYmxpby5vcmcvcHViL0xpbnV4L3N5c3RlbS9oYXJkd2FyZQorCS91c3IvbG9jYWwvc2Jpbi9sYXB0b3BfbW9kZSAtLSBmcm9tIHRoZSBMaW51eCBrZXJuZWwgc291cmNlCisJCWRpc3RyaWJ1dGlvbiwgc2VlIERvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0CisJL3NiaW4vc2VydmljZSAtLSBjb21lcyB3aXRoIFJlZGhhdC9GZWRvcmEgZGlzdHJpYnV0aW9ucworCitUb2FuIFQgTmd1eWVuIDxudHRAY29udHJvbC51Y2hpY2Fnby5lZHU+IGhhcyB3cml0dGVuIGEgU3VTRSBwb3dlcnNhdmUKK3NjcmlwdCBmb3IgdGhlIFgyMCwgaW5jbHVkZWQgaW4gY29uZmlnL3Vzci9zYmluL2libV9ob3RrZXlzX1gyMAorCitIZW5yaWsgQnJpeCBBbmRlcnNlbiA8YnJpeEBnZW50b28ub3JnPiBoYXMgd3JpdHRlbiBhIEdlbnRvbyBBQ1BJIGV2ZW50CitoYW5kbGVyIHNjcmlwdCBmb3IgdGhlIFgzMS4gWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20KK2h0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+YnJpeC9maWxlcy94MzEuc2gKKworRGF2aWQgU2Nod2Vpa2VydCA8ZHdzQGVlLmV0aC5jaD4gaGFzIHdyaXR0ZW4gYW4gYWx0ZXJuYXRpdmUgYmxhbmsuc2gKK3NjcmlwdCB3aGljaCB3b3JrcyBvbiBEZWJpYW4gc3lzdGVtcywgaW5jbHVkZWQgaW4KK2NvbmZpZ3MvZXRjL2FjcGkvYWN0aW9ucy9ibGFuay1kZWJpYW4uc2gKKworCitUT0RPCistLS0tCisKK0knZCBsaWtlIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGJ1dCBoYXZlbid0IHlldCBmb3VuZCB0aGUKK3RpbWUgYW5kL29yIEkgZG9uJ3QgeWV0IGtub3cgaG93IHRvIGltcGxlbWVudCB0aGVtOgorCistIFVsdHJhQmF5IGZsb3BweSBkcml2ZSBzdXBwb3J0CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWRlLnR4dCBiL0RvY3VtZW50YXRpb24vaWRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTg2NmZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pZGUudHh0CkBAIC0wLDAgKzEsMzk0IEBACisKKwlJbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIEVuaGFuY2VkIElERSBkcml2ZSBpbiBMaW51eCAyLjYKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIAorICAgVGhlIGhkcGFybSB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBJREUgZmVhdHVyZXMgb24gYQorICAgcnVubmluZyBzeXN0ZW0uIEl0IGlzIHBhY2thZ2VkIHNlcGFyYXRlbHkuICBQbGVhc2UgTG9vayBmb3IgaXQgb24gcG9wdWxhcgorICAgbGludXggRlRQIHNpdGVzLgorICAgCisKKworKioqICBJTVBPUlRBTlQgTk9USUNFUzogIEJVR0dZIElERSBDSElQU0VUUyBDQU4gQ09SUlVQVCBEQVRBISEKKyoqKiAgPT09PT09PT09PT09PT09PT0KKyoqKiAgUENJIHZlcnNpb25zIG9mIHRoZSBDTUQ2NDAgYW5kIFJaMTAwMCBpbnRlcmZhY2VzIGFyZSBub3cgZGV0ZWN0ZWQKKyoqKiAgYXV0b21hdGljYWxseSBhdCBzdGFydHVwIHdoZW4gUENJIEJJT1Mgc3VwcG9ydCBpcyBjb25maWd1cmVkLgorKioqCisqKiogIExpbnV4IGRpc2FibGVzIHRoZSAicHJlZmV0Y2giICgicmVhZGFoZWFkIikgbW9kZSBvZiB0aGUgUloxMDAwCisqKiogIHRvIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIHBvc3NpYmxlIGR1ZSB0byBoYXJkd2FyZSBkZXNpZ24gZmxhd3MuCisqKioKKyoqKiAgRm9yIHRoZSBDTUQ2NDAsIGxpbnV4IGRpc2FibGVzICJJUlEgdW5tYXNraW5nIiAoaGRwYXJtIC11MSkgb24gYW55CisqKiogIGRyaXZlIGZvciB3aGljaCB0aGUgInByZWZldGNoIiBtb2RlIG9mIHRoZSBDTUQ2NDAgaXMgdHVybmVkIG9uLgorKioqICBJZiAicHJlZmV0Y2giIGlzIGRpc2FibGVkIChoZHBhcm0gLXA4KSwgdGhlbiAiSVJRIHVubWFza2luZyIgY2FuIGJlCisqKiogIHVzZWQgYWdhaW4uCisqKioKKyoqKiAgRm9yIHRoZSBDTUQ2NDAsIGxpbnV4IGRpc2FibGVzICIzMmJpdCBJL08iIChoZHBhcm0gLWMxKSBvbiBhbnkgZHJpdmUKKyoqKiAgZm9yIHdoaWNoIHRoZSAicHJlZmV0Y2giIG1vZGUgb2YgdGhlIENNRDY0MCBpcyB0dXJuZWQgb2ZmLgorKioqICBJZiAicHJlZmV0Y2giIGlzIGVuYWJsZWQgKGhkcGFybSAtcDkpLCB0aGVuICIzMmJpdCBJL08iIGNhbiBiZQorKioqICB1c2VkIGFnYWluLgorKioqCisqKiogIFRoZSBDTUQ2NDAgaXMgYWxzbyB1c2VkIG9uIHNvbWUgVmVzYSBMb2NhbCBCdXMgKFZMQikgY2FyZHMsIGFuZCBpcyAqTk9UKgorKioqICBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGJ5IExpbnV4LiAgRm9yIHNhZmUsIHJlbGlhYmxlIG9wZXJhdGlvbiB3aXRoIHN1Y2gKKyoqKiAgaW50ZXJmYWNlcywgb25lICpNVVNUKiB1c2UgdGhlICJpZGUwPWNtZDY0MF92bGIiIGtlcm5lbCBvcHRpb24uCisqKioKKyoqKiAgVXNlIG9mIHRoZSAic2VyaWFsaXplIiBvcHRpb24gaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvbW1vbiBwaXRmYWxsczoKKworLSA0MC1jb25kdWN0b3IgSURFIGNhYmxlcyBhcmUgY2FwYWJsZSBvZiB0cmFuc2ZlcnJpbmcgZGF0YSBpbiBETUEgbW9kZXMgdXAgdG8KKyAgdWRtYTIsIGJ1dCBubyBmYXN0ZXIuCisKKy0gSWYgcG9zc2libGUgZGV2aWNlcyBzaG91bGQgYmUgYXR0YWNoZWQgdG8gc2VwYXJhdGUgY2hhbm5lbHMgaWYgdGhleSBhcmUKKyAgYXZhaWxhYmxlLiBUeXBpY2FsbHkgdGhlIGRpc2sgb24gdGhlIGZpcnN0IGFuZCBDRC1ST00gb24gdGhlIHNlY29uZC4KKworLSBJZiB5b3UgbWl4IGRldmljZXMgb24gdGhlIHNhbWUgY2FibGUsIHBsZWFzZSBjb25zaWRlciB1c2luZyBzaW1pbGFyIGRldmljZXMKKyAgaW4gcmVzcGVjdCBvZiB0aGUgZGF0YSB0cmFuc2ZlciBtb2RlIHRoZXkgc3VwcG9ydC4KKworLSBFdmVuIGJldHRlciB0cnkgdG8gc3RpY2sgdG8gdGhlIHNhbWUgdmVuZG9yIGFuZCBkZXZpY2UgdHlwZSBvbiB0aGUgc2FtZQorICBjYWJsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgbXVsdGlwbGUgSURFIGludGVyZmFjZSBkcml2ZXIsIGFzIGV2b2x2ZWQgZnJvbSBoZC5jLiAgCisKK0l0IHN1cHBvcnRzIHVwIHRvIDkgSURFIGludGVyZmFjZXMgcGVyIGRlZmF1bHQsIG9uIG9uZSBvciBtb3JlIElSUXMgKHVzdWFsbHkKKzE0ICYgMTUpLiAgVGhlcmUgY2FuIGJlIHVwIHRvIHR3byBkcml2ZXMgcGVyIGludGVyZmFjZSwgYXMgcGVyIHRoZSBBVEEtNiBzcGVjLgorCitQcmltYXJ5OiAgICBpZGUwLCBwb3J0IDB4MWYwOyBtYWpvcj0zOyAgaGRhIGlzIG1pbm9yPTA7IGhkYiBpcyBtaW5vcj02NAorU2Vjb25kYXJ5OiAgaWRlMSwgcG9ydCAweDE3MDsgbWFqb3I9MjI7IGhkYyBpcyBtaW5vcj0wOyBoZGQgaXMgbWlub3I9NjQKK1RlcnRpYXJ5OiAgIGlkZTIsIHBvcnQgMHgxZTg7IG1ham9yPTMzOyBoZGUgaXMgbWlub3I9MDsgaGRmIGlzIG1pbm9yPTY0CitRdWF0ZXJuYXJ5OiBpZGUzLCBwb3J0IDB4MTY4OyBtYWpvcj0zNDsgaGRnIGlzIG1pbm9yPTA7IGhkaCBpcyBtaW5vcj02NAorZmlmdGguLiAgICAgaWRlNCwgdXN1YWxseSBQQ0ksIHByb2JlZAorc2l4dGguLiAgICAgaWRlNSwgdXN1YWxseSBQQ0ksIHByb2JlZAorCitUbyBhY2Nlc3MgZGV2aWNlcyBvbiBpbnRlcmZhY2VzID4gaWRlMCwgZGV2aWNlIGVudHJpZXMgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0CitkZXZpY2UgZmlsZXMgZm9yIHRoZW0gYXJlIHByZXNlbnQgaW4gL2Rldi4gIElmIG5vdCwgcGxlYXNlIGNyZWF0ZSBzdWNoCitlbnRyaWVzLCBieSB1c2luZyAvZGV2L01BS0VERVYuCisKK1RoaXMgZHJpdmVyIGF1dG9tYXRpY2FsbHkgcHJvYmVzIGZvciBtb3N0IElERSBpbnRlcmZhY2VzIChpbmNsdWRpbmcgYWxsIFBDSQorb25lcyksIGZvciB0aGUgZHJpdmVzL2dlb21ldHJpZXMgYXR0YWNoZWQgdG8gdGhvc2UgaW50ZXJmYWNlcywgYW5kIGZvciB0aGUgSVJRCitsaW5lcyBiZWluZyB1c2VkIGJ5IHRoZSBpbnRlcmZhY2VzIChub3JtYWxseSAxNCwgMTUgZm9yIGlkZTAvaWRlMSkuCisKK0ZvciBzcGVjaWFsIGNhc2VzLCBpbnRlcmZhY2VzIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcga2VybmVsICJjb21tYW5kIGxpbmUiCitvcHRpb25zLiAgRm9yIGV4YW1wbGUsCisKKwlpZGUzPTB4MTY4LDB4MzZlLDEwCS8qIGlvcG9ydHMgMHgxNjgtMHgxNmYsMHgzNmUsIGlycSAxMCAqLworCitOb3JtYWxseSB0aGUgaXJxIG51bWJlciBuZWVkIG5vdCBiZSBzcGVjaWZpZWQsIGFzIGlkZS5jIHdpbGwgcHJvYmUgZm9yIGl0OgorCisJaWRlMz0weDE2OCwweDM2ZQkvKiBpb3BvcnRzIDB4MTY4LTB4MTZmLDB4MzZlICovCisKK1RoZSBzdGFuZGFyZCBwb3J0LCBhbmQgaXJxIHZhbHVlcyBhcmUgdGhlc2U6CisKKwlpZGUwPTB4MWYwLDB4M2Y2LDE0CisJaWRlMT0weDE3MCwweDM3NiwxNQorCWlkZTI9MHgxZTgsMHgzZWUsMTEKKwlpZGUzPTB4MTY4LDB4MzZlLDEwCisKK05vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIHJlc2VydmVzIDggY29udGlndW91cyBpb3BvcnRzLCB3aGVyZWFzIHRoZQorc2Vjb25kIHZhbHVlIGRlbm90ZXMgYSBzaW5nbGUgaW9wb3J0LiBJZiBpbiBkb3VidCwgZG8gYSAnY2F0IC9wcm9jL2lvcG9ydHMnLgorCitJbiBhbGwgcHJvYmFiaWxpdHkgdGhlIGRldmljZSB1c2VzIHRoZXNlIHBvcnRzIGFuZCBJUlFzIGlmIGl0IGlzIGF0dGFjaGVkCit0byB0aGUgYXBwcm9wcmlhdGUgaWRlIGNoYW5uZWwuICBQYXNzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZSBjb3JyZWN0IGlkZQorY2hhbm5lbCB0byB0aGUga2VybmVsLCBhcyBleHBsYWluZWQgYWJvdmUuCisKK0FueSBudW1iZXIgb2YgaW50ZXJmYWNlcyBtYXkgc2hhcmUgYSBzaW5nbGUgSVJRIGlmIG5lY2Vzc2FyeSwgYXQgYSBzbGlnaHQKK3BlcmZvcm1hbmNlIHBlbmFsdHksIHdoZXRoZXIgb24gc2VwYXJhdGUgY2FyZHMgb3IgYSBzaW5nbGUgVkxCIGNhcmQuCitUaGUgSURFIGRyaXZlciBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGhhbmRsZXMgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgbWF5CitvciBtYXkgbm90IGJlIGhhcm1mdWwgdG8geW91ciBoYXJkd2FyZS4uIHR3byBvciBtb3JlIGNhcmRzIGRyaXZpbmcgdGhlIHNhbWUgSVJRCitjYW4gcG90ZW50aWFsbHkgYnVybiBlYWNoIG90aGVyJ3MgYnVzIGRyaXZlciwgdGhvdWdoIGluIHByYWN0aWNlIHRoaXMKK3NlbGRvbSBvY2N1cnMuICBCZSBjYXJlZnVsLCBhbmQgaWYgaW4gZG91YnQsIGRvbid0IGRvIGl0IQorCitEcml2ZXMgYXJlIG5vcm1hbGx5IGZvdW5kIGJ5IGF1dG8tcHJvYmluZyBhbmQvb3IgZXhhbWluaW5nIHRoZSBDTU9TL0JJT1MgZGF0YS4KK0ZvciByZWFsbHkgd2VpcmQgc2l0dWF0aW9ucywgdGhlIGFwcGFyZW50IChmZGlzaykgZ2VvbWV0cnkgY2FuIGFsc28gYmUgc3BlY2lmaWVkCitvbiB0aGUga2VybmVsICJjb21tYW5kIGxpbmUiIHVzaW5nIExJTE8uICBUaGUgZm9ybWF0IG9mIHN1Y2ggbGluZXMgaXM6CisKKwloZHg9Y3lscyxoZWFkcyxzZWN0cyx3cGNvbSxpcnEKK29yCWhkeD1jZHJvbQorCit3aGVyZSBoZHggY2FuIGJlIGFueSBvZiBoZGEgdGhyb3VnaCBoZGgsIFRocmVlIHZhbHVlcyBhcmUgcmVxdWlyZWQKKyhjeWxzLGhlYWRzLHNlY3RzKS4gIEZvciBleGFtcGxlOgorCisJaGRjPTEwNTAsMzIsNjQgIGhkZD1jZHJvbQorCitlaXRoZXIge2hkYSxoZGJ9IG9yIHtoZGMsaGRkfS4gIFRoZSByZXN1bHRzIG9mIHN1Y2Nlc3NmdWwgYXV0by1wcm9iaW5nIG1heQorb3ZlcnJpZGUgdGhlIHBoeXNpY2FsIGdlb21ldHJ5L2lycSBzcGVjaWZpZWQsIHRob3VnaCB0aGUgIm9yaWdpbmFsIiBnZW9tZXRyeQorbWF5IGJlIHJldGFpbmVkIGFzIHRoZSAibG9naWNhbCIgZ2VvbWV0cnkgZm9yIHBhcnRpdGlvbmluZyBwdXJwb3NlcyAoZmRpc2spLgorCitJZiB0aGUgYXV0by1wcm9iaW5nIGR1cmluZyBib290IHRpbWUgY29uZnVzZXMgYSBkcml2ZSAoaWUuIHRoZSBkcml2ZSB3b3Jrcword2l0aCBoZC5jIGJ1dCBub3Qgd2l0aCBpZGUuYyksIHRoZW4gYW4gY29tbWFuZCBsaW5lIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkCitmb3IgZWFjaCBkcml2ZSBmb3Igd2hpY2ggeW91J2QgbGlrZSB0aGUgZHJpdmUgdG8gc2tpcCB0aGUgaGFyZHdhcmUKK3Byb2JlL2lkZW50aWZpY2F0aW9uIHNlcXVlbmNlLiAgRm9yIGV4YW1wbGU6CisKKwloZGI9bm9wcm9iZQorb3IKKwloZGM9NzY4LDE2LDMyCisJaGRjPW5vcHJvYmUKKworTm90ZSB0aGF0IHdoZW4gb25seSBvbmUgSURFIGRldmljZSBpcyBhdHRhY2hlZCB0byBhbiBpbnRlcmZhY2UsIGl0IHNob3VsZCBiZQoranVtcGVyZWQgYXMgInNpbmdsZSIgb3IgIm1hc3RlciIsICpub3QqICJzbGF2ZSIuICBNYW55IGZvbGtzIGhhdmUgaGFkCisidHJvdWJsZSIgd2l0aCBjZHJvbXMgYmVjYXVzZSBvZiB0aGlzIHJlcXVpcmVtZW50LCBzbyB0aGUgZHJpdmVyIG5vdyBwcm9iZXMKK2ZvciBib3RoIHVuaXRzLCB0aG91Z2ggc3VjY2VzcyBpcyBtb3JlIGxpa2VseSB3aGVuIHRoZSBkcml2ZSBpcyBqdW1wZXJlZAorY29ycmVjdGx5LgorCitDb3VydGVzeSBvZiBTY290dCBTbnlkZXIgYW5kIG90aGVycywgdGhlIGRyaXZlciBzdXBwb3J0cyBBVEFQSSBjZHJvbSBkcml2ZXMKK3N1Y2ggYXMgdGhlIE5FQy0yNjAgYW5kIHRoZSBuZXcgTUlUU1VNSSB0cmlwbGUvcXVhZCBzcGVlZCBkcml2ZXMuCitTdWNoIGRyaXZlcyB3aWxsIGJlIGlkZW50aWZpZWQgYXQgYm9vdCB0aW1lLCBqdXN0IGxpa2UgYSBoYXJkIGRpc2suCisKK0lmIGZvciBzb21lIHJlYXNvbiB5b3VyIGNkcm9tIGRyaXZlIGlzICpub3QqIGZvdW5kIGF0IGJvb3QgdGltZSwgeW91IGNhbiBmb3JjZQordGhlIHByb2JlIHRvIGxvb2sgaGFyZGVyIGJ5IHN1cHBseWluZyBhIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyCit2aWEgTElMTywgc3VjaCBhczoKKworCWhkYz1jZHJvbQkvKiBoZGMgPSAibWFzdGVyIiBvbiBzZWNvbmQgaW50ZXJmYWNlICovCitvcgorCWhkZD1jZHJvbQkvKiBoZGQgPSAic2xhdmUiIG9uIHNlY29uZCBpbnRlcmZhY2UgKi8KKworRm9yIGV4YW1wbGUsIGEgR1cyMDAwIHN5c3RlbSBtaWdodCBoYXZlIGEgaGFyZCBkcml2ZSBvbiB0aGUgcHJpbWFyeQoraW50ZXJmYWNlICgvZGV2L2hkYSkgYW5kIGFuIElERSBjZHJvbSBkcml2ZSBvbiB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZQorKC9kZXYvaGRjKS4gIFRvIG1vdW50IGEgQ0QgaW4gdGhlIGNkcm9tIGRyaXZlLCBvbmUgd291bGQgdXNlIHNvbWV0aGluZyBsaWtlOgorCisJbG4gLXNmIC9kZXYvaGRjIC9kZXYvY2Ryb20KKwlta2RpciAvbW50L2Nkcm9tCisJbW91bnQgL2Rldi9jZHJvbSAvbW50L2Nkcm9tIC10IGlzbzk2NjAgLW8gcm8KKworSWYsIGFmdGVyIGRvaW5nIGFsbCBvZiB0aGUgYWJvdmUsIG1vdW50IGRvZXNuJ3Qgd29yayBhbmQgeW91IHNlZQorZXJyb3JzIGZyb20gdGhlIGRyaXZlciAod2l0aCBkbWVzZykgY29tcGxhaW5pbmcgYWJvdXQgYHN0YXR1cz0weGZmJywKK3RoaXMgbWVhbnMgdGhhdCB0aGUgaGFyZHdhcmUgaXMgbm90IHJlc3BvbmRpbmcgdG8gdGhlIGRyaXZlcidzIGF0dGVtcHRzCit0byByZWFkIGl0LiAgT25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgcHJvYmFibHkgdGhlIHByb2JsZW06CisKKyAgLSBZb3VyIGhhcmR3YXJlIGlzIGJyb2tlbi4KKworICAtIFlvdSBhcmUgdXNpbmcgdGhlIHdyb25nIGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UsIG9yIHlvdSBoYXZlIHRoZQorICAgIGRyaXZlIGp1bXBlcmVkIHdyb25nLiAgUmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIGluc3RydWN0aW9ucyBhYm92ZS4KKworICAtIFlvdXIgSURFIGNvbnRyb2xsZXIgcmVxdWlyZXMgc29tZSBub25zdGFuZGFyZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQorICAgIGJlZm9yZSBpdCB3aWxsIHdvcmsgcHJvcGVybHkuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVyZSB3aWxsIG9mdGVuCisgICAgYmUgYSBzZXBhcmF0ZSBNUy1ET1MgZHJpdmVyIGp1c3QgZm9yIHRoZSBjb250cm9sbGVyLiAgSURFIGludGVyZmFjZXMKKyAgICBvbiBzb3VuZCBjYXJkcyB1c3VhbGx5IGZhbGwgaW50byB0aGlzIGNhdGVnb3J5LiAgU3VjaCBjb25maWd1cmF0aW9ucworICAgIGNhbiBvZnRlbiBiZSBtYWRlIHRvIHdvcmsgYnkgZmlyc3QgYm9vdGluZyBNUy1ET1MsIGxvYWRpbmcgdGhlCisgICAgYXBwcm9wcmlhdGUgZHJpdmVycywgYW5kIHRoZW4gd2FybS1ib290aW5nIGxpbnV4ICh3aXRob3V0IHBvd2VyaW5nCisgICAgb2ZmKS4gIFRoaXMgY2FuIGJlIGF1dG9tYXRlZCB1c2luZyBsb2FkbGluIGluIHRoZSBNUy1ET1MgYXV0b2V4ZWMuCisKK0lmIHlvdSBhbHdheXMgZ2V0IHRpbWVvdXQgZXJyb3JzLCBpbnRlcnJ1cHRzIGZyb20gdGhlIGRyaXZlIGFyZSBwcm9iYWJseQorbm90IG1ha2luZyBpdCB0byB0aGUgaG9zdC4gIENoZWNrIGhvdyB5b3UgaGF2ZSB0aGUgaGFyZHdhcmUganVtcGVyZWQKK2FuZCBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cyAoc2VlIHRoZSBjb25maWd1cmF0aW9uCitpbnN0cnVjdGlvbnMgYWJvdmUpLiAgSWYgeW91IGhhdmUgYSBQQ0kgc3lzdGVtLCBhbHNvIGNoZWNrIHRoZSBCSU9TCitzZXR1cDsgSSd2ZSBoYWQgb25lIHJlcG9ydCBvZiBhIHN5c3RlbSB3aGljaCB3YXMgc2hpcHBlZCB3aXRoIElSUSAxNQorZGlzYWJsZWQgYnkgdGhlIEJJT1MuCisKK1RoZSBrZXJuZWwgaXMgYWJsZSB0byBleGVjdXRlIGJpbmFyaWVzIGRpcmVjdGx5IG9mZiBvZiB0aGUgY2Ryb20sCitwcm92aWRlZCBpdCBpcyBtb3VudGVkIHdpdGggdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBvZiAxMDI0IChhcyBhYm92ZSkuCisKK1BsZWFzZSBwYXNzIG9uIGFueSBmZWVkYmFjayBvbiBhbnkgb2YgdGhpcyBzdHVmZiB0byB0aGUgbWFpbnRhaW5lciwKK3dob3NlIGFkZHJlc3MgY2FuIGJlIGZvdW5kIGluIGxpbnV4L01BSU5UQUlORVJTLgorCitOb3RlIHRoYXQgaWYgQk9USCBoZC5jIGFuZCBpZGUuYyBhcmUgY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwsCitoZC5jIHdpbGwgbm9ybWFsbHkgYmUgYWxsb3dlZCB0byBjb250cm9sIHRoZSBwcmltYXJ5IElERSBpbnRlcmZhY2UuCitUaGlzIGlzIHVzZWZ1bCBmb3Igb2xkZXIgaGFyZHdhcmUgdGhhdCBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggaWRlLmMsCithbmQgc3RpbGwgYWxsb3dzIG5ld2VyIGhhcmR3YXJlIHRvIHJ1biBvbiB0aGUgMm5kLzNyZC80dGggSURFIHBvcnRzCit1bmRlciBjb250cm9sIG9mIGlkZS5jLiAgIFRvIGhhdmUgaWRlLmMgYWxzbyAidGFrZSBvdmVyIiB0aGUgcHJpbWFyeQorSURFIHBvcnQgaW4gdGhpcyBzaXR1YXRpb24sIHVzZSB0aGUgImNvbW1hbmQgbGluZSIgcGFyYW1ldGVyOiAgaWRlMD0weDFmMAorCitUaGUgSURFIGRyaXZlciBpcyBtb2R1bGFyaXplZC4gIFRoZSBoaWdoIGxldmVsIGRpc2svQ0QtUk9NL3RhcGUvZmxvcHB5Citkcml2ZXJzIGNhbiBhbHdheXMgYmUgY29tcGlsZWQgYXMgbG9hZGFibGUgbW9kdWxlcywgdGhlIGNoaXBzZXQgZHJpdmVycworY2FuIG9ubHkgYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBhbmQgdGhlIGNvcmUgY29kZSAoaWRlLmMpIGNhbiBiZQorY29tcGlsZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUgcHJvdmlkZWQgbm8gY2hpcHNldCBzdXBwb3J0IGlzIG5lZWRlZC4KKworV2hlbiB1c2luZyBpZGUuYyBhcyBhIG1vZHVsZSBpbiBjb21iaW5hdGlvbiB3aXRoIGttb2QsIGFkZDoKKworCWFsaWFzIGJsb2NrLW1ham9yLTMgaWRlLXByb2JlCisKK3RvIC9ldGMvbW9kcHJvYmUuY29uZi4KKworV2hlbiBpZGUuYyBpcyB1c2VkIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHBhc3MgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgdG8gdGhlCitkcml2ZXIgdXNpbmcgdGhlICJvcHRpb25zPSIga2V5d29yZCB0byBpbnNtb2QsIHdoaWxlIHJlcGxhY2luZyBhbnkgJywnIHdpdGgKKyc7Jy4gIEZvciBleGFtcGxlOgorCisJaW5zbW9kIGlkZS5vIG9wdGlvbnM9ImlkZTA9c2VyaWFsaXplIGlkZTE9c2VyaWFsaXplIGlkZTI9MHgxZTg7MHgzZWU7MTEiCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3VtbWFyeSBvZiBpZGUgZHJpdmVyIHBhcmFtZXRlcnMgZm9yIGtlcm5lbCBjb21tYW5kIGxpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAiaGR4PSIgIGlzIHJlY29nbml6ZWQgZm9yIGFsbCAieCIgZnJvbSAiYSIgdG8gImgiLCBzdWNoIGFzICJoZGMiLgorIAorICJpZGV4PSIgaXMgcmVjb2duaXplZCBmb3IgYWxsICJ4IiBmcm9tICIwIiB0byAiMyIsIHN1Y2ggYXMgImlkZTEiLgorCisgImhkeD1ub3Byb2JlIgkJOiBkcml2ZSBtYXkgYmUgcHJlc2VudCwgYnV0IGRvIG5vdCBwcm9iZSBmb3IgaXQKKyAKKyAiaGR4PW5vbmUiCQk6IGRyaXZlIGlzIE5PVCBwcmVzZW50LCBpZ25vcmUgY21vcyBhbmQgZG8gbm90IHByb2JlCisgCisgImhkeD1ub3dlcnIiCQk6IGlnbm9yZSB0aGUgV1JFUlJfU1RBVCBiaXQgb24gdGhpcyBkcml2ZQorIAorICJoZHg9Y2Ryb20iCQk6IGRyaXZlIGlzIHByZXNlbnQsIGFuZCBpcyBhIGNkcm9tIGRyaXZlCisgCisgImhkeD1jeWwsaGVhZCxzZWN0Igk6IGRpc2sgZHJpdmUgaXMgcHJlc2VudCwgd2l0aCBzcGVjaWZpZWQgZ2VvbWV0cnkKKworICJoZHg9cmVtYXAiCQk6IHJlbWFwIGFjY2VzcyBvZiBzZWN0b3IgMCB0byBzZWN0b3IgMSAoZm9yIEVaRHJpdmUpCisKKyAiaGR4PXJlbWFwNjMiCQk6IHJlbWFwIHRoZSBkcml2ZTogYWRkIDYzIHRvIGFsbCBzZWN0b3IgbnVtYmVycworCQkJICAoZm9yIERNIE9uVHJhY2spCisgCisgImhkeD1hdXRvdHVuZSIJCTogZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byB0dW5lIGludGVyZmFjZSBzcGVlZAorCQkJICB0byB0aGUgZmFzdGVzdCBQSU8gbW9kZSBzdXBwb3J0ZWQsCisJCQkgIGlmIHBvc3NpYmxlIGZvciB0aGlzIGRyaXZlIG9ubHkuCisJCQkgIE5vdCBmdWxseSBzdXBwb3J0ZWQgYnkgYWxsIGNoaXBzZXQgdHlwZXMsCisJCQkgIGFuZCBxdWl0ZSBsaWtlbHkgdG8gY2F1c2UgdHJvdWJsZSB3aXRoCisJCQkgIG9sZGVyL29kZCBJREUgZHJpdmVzLgorCisgImhkeD1zd2FwZGF0YSIJCTogd2hlbiB0aGUgZHJpdmUgaXMgYSBkaXNrLCBieXRlIHN3YXAgYWxsIGRhdGEKKworICJoZHg9YnN3YXAiCQk6IHNhbWUgYXMgYWJvdmUuLi4uLi4uLi4uCisKKyAiaGR4PXNjc2kiCQk6IHRoZSByZXR1cm4gb2YgdGhlIGlkZS1zY3NpIGZsYWcsIHRoaXMgaXMgdXNlZnVsIGZvcgorIAkJCSAgYWxsb3dpbmcgaWRlLWZsb3BweSwgaWRlLXRhcGUsIGFuZCBpZGUtY2Ryb218d3JpdGVycworIAkJCSAgdG8gdXNlIGlkZS1zY3NpIGVtdWxhdGlvbiBvbiBhIGRldmljZSBzcGVjaWZpYyBvcHRpb24uCisKKyAiaWRlYnVzPXh4IgkJOiBpbmZvcm0gSURFIGRyaXZlciBvZiBWRVNBL1BDSSBidXMgc3BlZWQgaW4gTUh6LAorCQkJICB3aGVyZSAieHgiIGlzIGJldHdlZW4gMjAgYW5kIDY2IGluY2x1c2l2ZSwKKwkJCSAgdXNlZCB3aGVuIHR1bmluZyBjaGlwc2V0IFBJTyBtb2Rlcy4KKwkJCSAgRm9yIFBDSSBidXMsIDI1IGlzIGNvcnJlY3QgZm9yIGEgUDc1IHN5c3RlbSwKKwkJCSAgMzAgaXMgY29ycmVjdCBmb3IgUDkwLFAxMjAsUDE4MCBzeXN0ZW1zLAorCQkJICBhbmQgMzMgaXMgdXNlZCBmb3IgUDEwMCxQMTMzLFAxNjYgc3lzdGVtcy4KKwkJCSAgSWYgaW4gZG91YnQsIHVzZSBpZGVidXM9MzMgZm9yIFBDSS4KKwkJCSAgQXMgZm9yIFZMQiwgaXQgaXMgc2FmZXN0IHRvIG5vdCBzcGVjaWZ5IGl0LgorCQkJICBCaWdnZXIgdmFsdWVzIGFyZSBzYWZlciB0aGFuIHNtYWxsZXIgb25lcy4KKworICJpZGV4PW5vcHJvYmUiCQk6IGRvIG5vdCBhdHRlbXB0IHRvIGFjY2Vzcy91c2UgdGhpcyBpbnRlcmZhY2UKKyAKKyAiaWRleD1iYXNlIgkJOiBwcm9iZSBmb3IgYW4gaW50ZXJmYWNlIGF0IHRoZSBhZGRyIHNwZWNpZmllZCwKKwkJCSAgd2hlcmUgImJhc2UiIGlzIHVzdWFsbHkgMHgxZjAgb3IgMHgxNzAKKwkJCSAgYW5kICJjdGwiIGlzIGFzc3VtZWQgdG8gYmUgImJhc2UiKzB4MjA2CisJCQkgIAorICJpZGV4PWJhc2UsY3RsIgk6IHNwZWNpZnkgYm90aCBiYXNlIGFuZCBjdGwKKworICJpZGV4PWJhc2UsY3RsLGlycSIJOiBzcGVjaWZ5IGJhc2UsIGN0bCwgYW5kIGlycSBudW1iZXIKKyAKKyAiaWRleD1hdXRvdHVuZSIJOiBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIHR1bmUgaW50ZXJmYWNlIHNwZWVkCisJCQkgIHRvIHRoZSBmYXN0ZXN0IFBJTyBtb2RlIHN1cHBvcnRlZCwKKwkJCSAgZm9yIGFsbCBkcml2ZXMgb24gdGhpcyBpbnRlcmZhY2UuCisJCQkgIE5vdCBmdWxseSBzdXBwb3J0ZWQgYnkgYWxsIGNoaXBzZXQgdHlwZXMsCisJCQkgIGFuZCBxdWl0ZSBsaWtlbHkgdG8gY2F1c2UgdHJvdWJsZSB3aXRoCisJCQkgIG9sZGVyL29kZCBJREUgZHJpdmVzLgorCisgImlkZXg9bm9hdXRvdHVuZSIJOiBkcml2ZXIgd2lsbCBOT1QgYXR0ZW1wdCB0byB0dW5lIGludGVyZmFjZSBzcGVlZCAKKwkJCSAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBjaGlwc2V0cywKKwkJCSAgZXhjZXB0IHRoZSBjbWQ2NDAuCisKKyAiaWRleD1zZXJpYWxpemUiCTogZG8gbm90IG92ZXJsYXAgb3BlcmF0aW9ucyBvbiBpZGV4LiBQbGVhc2Ugbm90ZQorCQkJICB0aGF0IHlvdSB3aWxsIGhhdmUgdG8gc3BlY2lmeSB0aGlzIG9wdGlvbiBmb3IKKwkJCSAgYm90aCB0aGUgcmVzcGVjaXR2ZSBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgY2hhbm5lbAorCQkJICB0byB0YWtlIGVmZmVjdC4KKworICJpZGV4PWZvdXIiCQk6IGZvdXIgZHJpdmVzIG9uIGlkZXggYW5kIGlkZSh4XjEpIHNoYXJlIHNhbWUgcG9ydHMKKwkJCQorICJpZGV4PXJlc2V0IgkJOiByZXNldCBpbnRlcmZhY2UgYWZ0ZXIgcHJvYmUKKyAKKyAiaWRleD1kbWEiCQk6IGF1dG9tYXRpY2FsbHkgY29uZmlndXJlL3VzZSBETUEgaWYgcG9zc2libGUuCisKKyAiaWRleD1hdGE2NiIJCTogaW5mb3JtcyB0aGUgaW50ZXJmYWNlIHRoYXQgaXQgaGFzIGFuIDgwYyBjYWJsZQorCQkJICBmb3IgY2hpcHNldHMgdGhhdCBhcmUgQVRBLTY2IGNhcGFibGUsIGJ1dCB0aGUKKwkJCSAgYWJpbGl0eSB0byBiaXQgdGVzdCBmb3IgZGV0ZWN0aW9uIGlzIGN1cnJlbnRseQorCQkJICB1bmtub3duLgorCisgImlkZT1yZXZlcnNlIgkJOiBmb3JtZXJseSBjYWxsZWQgdG8gcGNpIHN1Yi1zeXN0ZW0sIGJ1dCBub3cgbG9jYWwuCisKKyAiaWRlPW5vZG1hIgkJOiBkaXNhYmxlIERNQSBnbG9iYWxseSBmb3IgdGhlIElERSBzdWJzeXN0ZW0uCisKK1RoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIE9OTFkgb24gaWRlMCwgd2hpY2ggdXN1YWxseSBjb3JyZXNwb25kcwordG8gdGhlIGZpcnN0IEFUQSBpbnRlcmZhY2UgZm91bmQgb24gdGhlIHBhcnRpY3VsYXIgaG9zdCwgYW5kIHRoZSBkZWZhdWx0cyBmb3IKK3RoZSBiYXNlLGN0bCBwb3J0cyBtdXN0IG5vdCBiZSBhbHRlcmVkLgorCisgImlkZTA9ZHRjMjI3OCIJCTogcHJvYmUvc3VwcG9ydCBEVEMyMjc4IGludGVyZmFjZQorICJpZGUwPWh0NjU2MGIiCQk6IHByb2JlL3N1cHBvcnQgSFQ2NTYwQiBpbnRlcmZhY2UKKyAiaWRlMD1jbWQ2NDBfdmxiIgk6ICpSRVFVSVJFRCogZm9yIFZMQiBjYXJkcyB3aXRoIHRoZSBDTUQ2NDAgY2hpcAorCQkJICAobm90IGZvciBQQ0kgLS0gYXV0b21hdGljYWxseSBkZXRlY3RlZCkKKyAiaWRlMD1xZDY1eHgiCQk6IHByb2JlL3N1cHBvcnQgcWQ2NXh4IGludGVyZmFjZQorICJpZGUwPWFsaTE0eHgiCQk6IHByb2JlL3N1cHBvcnQgYWxpMTR4eCBjaGlwc2V0cyAoQUxJIE0xNDM5L00xNDQzL00xNDQ1KQorICJpZGUwPXVtYzg2NzIiCQk6IHByb2JlL3N1cHBvcnQgdW1jODY3MiBjaGlwc2V0cworCisgImlkZT1kb3VibGVyIgkJOiBwcm9iZS9zdXBwb3J0IElERSBkb3VibGVycyBvbiBBbWlnYQorCitUaGVyZSBtYXkgYmUgbW9yZSBvcHRpb25zIHRoYW4gc2hvd24gLS0gdXNlIHRoZSBzb3VyY2UsIEx1a2UhCisKK0V2ZXJ5dGhpbmcgZWxzZSBpcyByZWplY3RlZCB3aXRoIGEgIkJBRCBPUFRJT04iIG1lc3NhZ2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lERSBBVEFQSSBzdHJlYW1pbmcgdGFwZSBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaXMgYSBwYXJ0IG9mIHRoZSBMaW51eCBpZGUgZHJpdmVyIGFuZCB3b3JrcyBpbiBjby1vcGVyYXRpb24KK3dpdGggbGludXgvZHJpdmVycy9ibG9jay9pZGUuYy4KKworVGhlIGRyaXZlciwgaW4gY28tb3BlcmF0aW9uIHdpdGggaWRlLmMsIGJhc2ljYWxseSB0cmF2ZXJzZXMgdGhlCityZXF1ZXN0LWxpc3QgZm9yIHRoZSBibG9jayBkZXZpY2UgaW50ZXJmYWNlLiBUaGUgY2hhcmFjdGVyIGRldmljZQoraW50ZXJmYWNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgY3JlYXRlcyBuZXcgcmVxdWVzdHMsIGFkZHMgdGhlbQordG8gdGhlIHJlcXVlc3QtbGlzdCBvZiB0aGUgYmxvY2sgZGV2aWNlLCBhbmQgd2FpdHMgZm9yIHRoZWlyIGNvbXBsZXRpb24uCisKK1BpcGVsaW5lZCBvcGVyYXRpb24gbW9kZSBpcyBub3cgc3VwcG9ydGVkIG9uIGJvdGggcmVhZHMgYW5kIHdyaXRlcy4KKworVGhlIGJsb2NrIGRldmljZSBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBhcmUgZGV0ZXJtaW5lZCBmcm9tIHRoZQordGFwZSdzIHJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBpZGUgaW50ZXJmYWNlcywgYXMgZXhwbGFpbmVkIGluIGlkZS5jLgorCitUaGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorCisgaHQwCQltYWpvciAzNywgbWlub3IgMAlmaXJzdCAgSURFIHRhcGUsIHJld2luZCBvbiBjbG9zZS4KKyBodDEJCW1ham9yIDM3LCBtaW5vciAxCXNlY29uZCBJREUgdGFwZSwgcmV3aW5kIG9uIGNsb3NlLgorIC4uLgorIG5odDAJCW1ham9yIDM3LCBtaW5vciAxMjgJZmlyc3QgIElERSB0YXBlLCBubyByZXdpbmQgb24gY2xvc2UuCisgbmh0MQkJbWFqb3IgMzcsIG1pbm9yIDEyOQlzZWNvbmQgSURFIHRhcGUsIG5vIHJld2luZCBvbiBjbG9zZS4KKyAuLi4KKworUnVuIC9kZXYvTUFLRURFViB0byBjcmVhdGUgdGhlIGFib3ZlIGVudHJpZXMuCisKK1RoZSBnZW5lcmFsIG1hZ25ldGljIHRhcGUgY29tbWFuZHMgY29tcGF0aWJsZSBpbnRlcmZhY2UsIGFzIGRlZmluZWQgYnkKK2luY2x1ZGUvbGludXgvbXRpby5oLCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGNoYXJhY3RlciBkZXZpY2UuCisKK0dlbmVyYWwgaWRlIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHN1Y2ggYXMgdGhlIGludGVycnVwdC11bm1hc2sKK2ZsYWcsIGNhbiBiZSBjb25maWd1cmVkIGJ5IGlzc3VpbmcgYW4gaW9jdGwgdG8gdGhlIGJsb2NrIGRldmljZSBpbnRlcmZhY2UsCithcyBhbnkgb3RoZXIgaWRlIGRldmljZS4KKworT3VyIG93biBpZGUtdGFwZSBpb2N0bCdzIGNhbiBiZSBpc3N1ZWQgdG8gZWl0aGVyIHRoZSBibG9jayBkZXZpY2Ugb3IKK3RoZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZS4KKworTWF4aW1hbCB0aHJvdWdocHV0IHdpdGggbWluaW1hbCBidXMgbG9hZCB3aWxsIHVzdWFsbHkgYmUgYWNoaWV2ZWQgaW4gdGhlCitmb2xsb3dpbmcgc2NlbmFyaW86CisKKwkxLglpZGUtdGFwZSBpcyBvcGVyYXRpbmcgaW4gdGhlIHBpcGVsaW5lZCBvcGVyYXRpb24gbW9kZS4KKwkyLglObyBidWZmZXJpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoZSB1c2VyIGJhY2t1cCBwcm9ncmFtLgorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0tLS0tLQorSURFID0gSW50ZWdyYXRlZCBEcml2ZSBFbGVjdHJvbmljcywgbWVhbmluZyB0aGF0IGVhY2ggZHJpdmUgaGFzIGEgYnVpbHQtaW4KK2NvbnRyb2xsZXIsIHdoaWNoIGlzIHdoeSBhbiAiSURFIGludGVyZmFjZSBjYXJkIiBpcyBub3QgYSAiY29udHJvbGxlciBjYXJkIi4KKworQVRBID0gQVQgKHRoZSBvbGQgSUJNIDI4NiBjb21wdXRlcikgQXR0YWNobWVudCBJbnRlcmZhY2UsIGEgZHJhZnQgQW1lcmljYW4KK05hdGlvbmFsIFN0YW5kYXJkIGZvciBjb25uZWN0aW5nIGhhcmQgZHJpdmVzIHRvIFBDcy4gIFRoaXMgaXMgdGhlIG9mZmljaWFsCituYW1lIGZvciAiSURFIi4KKworVGhlIGxhdGVzdCBzdGFuZGFyZHMgZGVmaW5lIHNvbWUgZW5oYW5jZW1lbnRzLCBrbm93biBhcyB0aGUgQVRBLTYgc3BlYywKK3doaWNoIGdyZXcgb3V0IG9mIHZlbmRvci1zcGVjaWZpYyAiRW5oYW5jZWQgSURFIiAoRUlERSkgaW1wbGVtZW50YXRpb25zLgorCitBVEFQSSA9IEFUQSBQYWNrZXQgSW50ZXJmYWNlLCBhIG5ldyBwcm90b2NvbCBmb3IgY29udHJvbGxpbmcgdGhlIGRyaXZlcywKK3NpbWlsYXIgdG8gU0NTSSBwcm90b2NvbHMsIGNyZWF0ZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgQVRBMiBzdGFuZGFyZC4KK0FUQVBJIGlzIGN1cnJlbnRseSB1c2VkIGZvciBjb250cm9sbGluZyBDRFJPTSwgVEFQRSBhbmQgRkxPUFBZIChaSVAgb3IKK0xTMTIwLzI0MCkgZGV2aWNlcywgcmVtb3ZhYmxlIFIvVyBjYXJ0cmlkZ2VzLCBhbmQgZm9yIGhpZ2ggY2FwYWNpdHkgaGFyZCBkaXNrCitkcml2ZXMuCisKK21sb3JkQHBvYm94LmNvbQorLS0KKworV2VkIEFwciAxNyAyMjo1Mjo0NCBDRVNUIDIwMDIgZWRpdGVkIGJ5IE1hcmNpbiBEYWxlY2tpLCB0aGUgY3VycmVudAorbWFpbnRhaW5lci4KKworV2VkIEF1ZyAyMCAyMjozMToyOSBDRVNUIDIwMDMgdXBkYXRlZCBpZGUgYm9vdCB1cHRpb25zIHRvIGN1cnJlbnQgaWRlLmMKK2NvbW1lbnRzIGF0IDIuNi4wLXRlc3Q0IHRpbWUuIE1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvaXBvaWIudHh0IGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGUxODRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dApAQCAtMCwwICsxLDU2IEBACitJUCBPVkVSIElORklOSUJBTkQKKworICBUaGUgaWJfaXBvaWIgZHJpdmVyIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUCBvdmVyIEluZmluaUJhbmQKKyAgcHJvdG9jb2wgYXMgc3BlY2lmaWVkIGJ5IHRoZSBsYXRlc3QgSW50ZXJuZXQtRHJhZnRzIGlzc3VlZCBieSB0aGUKKyAgSUVURiBpcG9pYiB3b3JraW5nIGdyb3VwLiAgSXQgaXMgYSAibmF0aXZlIiBpbXBsZW1lbnRhdGlvbiBpbiB0aGUKKyAgc2Vuc2Ugb2Ygc2V0dGluZyB0aGUgaW50ZXJmYWNlIHR5cGUgdG8gQVJQSFJEX0lORklOSUJBTkQgYW5kIHRoZQorICBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCB0byAyMCAoZWFybGllciBwcm9wcmlldGFyeSBpbXBsZW1lbnRhdGlvbnMKKyAgbWFzcXVlcmFkZWQgdG8gdGhlIGtlcm5lbCBhcyBldGhlcm5ldCBpbnRlcmZhY2VzKS4KKworUGFydGl0aW9ucyBhbmQgUF9LZXlzCisKKyAgV2hlbiB0aGUgSVBvSUIgZHJpdmVyIGlzIGxvYWRlZCwgaXQgY3JlYXRlcyBvbmUgaW50ZXJmYWNlIGZvciBlYWNoCisgIHBvcnQgdXNpbmcgdGhlIFBfS2V5IGF0IGluZGV4IDAuICBUbyBjcmVhdGUgYW4gaW50ZXJmYWNlIHdpdGggYQorICBkaWZmZXJlbnQgUF9LZXksIHdyaXRlIHRoZSBkZXNpcmVkIFBfS2V5IGludG8gdGhlIG1haW4gaW50ZXJmYWNlJ3MKKyAgL3N5cy9jbGFzcy9uZXQvPGludGYgbmFtZT4vY3JlYXRlX2NoaWxkIGZpbGUuICBGb3IgZXhhbXBsZToKKworICAgIGVjaG8gMHg4MDAxID4gL3N5cy9jbGFzcy9uZXQvaWIwL2NyZWF0ZV9jaGlsZAorCisgIFRoaXMgd2lsbCBjcmVhdGUgYW4gaW50ZXJmYWNlIG5hbWVkIGliMC44MDAxIHdpdGggUF9LZXkgMHg4MDAxLiAgVG8KKyAgcmVtb3ZlIGEgc3ViaW50ZXJmYWNlLCB1c2UgdGhlICJkZWxldGVfY2hpbGQiIGZpbGU6CisKKyAgICBlY2hvIDB4ODAwMSA+IC9zeXMvY2xhc3MvbmV0L2liMC9kZWxldGVfY2hpbGQKKworICBUaGUgUF9LZXkgZm9yIGFueSBpbnRlcmZhY2UgaXMgZ2l2ZW4gYnkgdGhlICJwa2V5IiBmaWxlLCBhbmQgdGhlCisgIG1haW4gaW50ZXJmYWNlIGZvciBhIHN1YmludGVyZmFjZSBpcyBpbiAicGFyZW50LiIKKworRGVidWdnaW5nIEluZm9ybWF0aW9uCisKKyAgQnkgY29tcGlsaW5nIHRoZSBJUG9JQiBkcml2ZXIgd2l0aCBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRyBzZXQKKyAgdG8gJ3knLCB0cmFjaW5nIG1lc3NhZ2VzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBkcml2ZXIuICBUaGV5IGFyZQorICB0dXJuZWQgb24gYnkgc2V0dGluZyB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgZGVidWdfbGV2ZWwgYW5kCisgIG1jYXN0X2RlYnVnX2xldmVsIHRvIDEuICBUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBjb250cm9sbGVkIGF0CisgIHJ1bnRpbWUgdGhyb3VnaCBmaWxlcyBpbiAvc3lzL21vZHVsZS9pYl9pcG9pYi8uCisKKyAgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgYWxzbyBlbmFibGVzIHRoZSAiaXBvaWJfZGVidWdmcyIKKyAgdmlydHVhbCBmaWxlc3lzdGVtLiAgQnkgbW91bnRpbmcgdGhpcyBmaWxlc3lzdGVtLCBmb3IgZXhhbXBsZSB3aXRoCisKKyAgICBta2RpciAtcCAvaXBvaWJfZGVidWdmcworICAgIG1vdW50IC10IGlwb2liX2RlYnVnZnMgbm9uZSAvaXBvaWJfZGVidWZzCisKKyAgaXQgaXMgcG9zc2libGUgdG8gZ2V0IHN0YXRpc3RpY3MgYWJvdXQgbXVsdGljYXN0IGdyb3VwcyBmcm9tIHRoZQorICBmaWxlcyAvaXBvaWJfZGVidWdmcy9pYjBfbWNnIGFuZCBzbyBvbi4KKworICBUaGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIHRoaXMgb3B0aW9uIGlzIG5lZ2xpZ2libGUsIHNvIGl0CisgIGlzIHNhZmUgdG8gZW5hYmxlIHRoaXMgb3B0aW9uIHdpdGggZGVidWdfbGV2ZWwgc2V0IHRvIDAgZm9yIG5vcm1hbAorICBvcGVyYXRpb24uCisKKyAgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBlbmFibGVzIGV2ZW4gbW9yZSBkZWJ1ZyBvdXRwdXQgaW4KKyAgdGhlIGRhdGEgcGF0aCB3aGVuIGRhdGFfZGVidWdfbGV2ZWwgaXMgc2V0IHRvIDEuICBIb3dldmVyLCBldmVuIHdpdGgKKyAgdGhlIG91dHB1dCBkaXNhYmxlZCwgZW5hYmxpbmcgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB3aWxsIGFmZmVjdAorICBwZXJmb3JtYW5jZSwgYmVjYXVzZSBpdCBhZGRzIHRlc3RzIHRvIHRoZSBmYXN0IHBhdGguCisKK1JlZmVyZW5jZXMKKworICBJRVRGIElQIG92ZXIgSW5maW5pQmFuZCAoaXBvaWIpIFdvcmtpbmcgR3JvdXAKKyAgICBodHRwOi8vaWV0Zi5vcmcvaHRtbC5jaGFydGVycy9pcG9pYi1jaGFydGVyLmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9zeXNmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvc3lzZnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDUxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvc3lzZnMudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1NZU0ZTIEZJTEVTCisKKyAgRm9yIGVhY2ggSW5maW5pQmFuZCBkZXZpY2UsIHRoZSBJbmZpbmlCYW5kIGRyaXZlcnMgY3JlYXRlIHRoZQorICBmb2xsb3dpbmcgZmlsZXMgdW5kZXIgL3N5cy9jbGFzcy9pbmZpbmliYW5kLzxkZXZpY2UgbmFtZT46CisKKyAgICBub2RlX3R5cGUgICAgICAtIE5vZGUgdHlwZSAoQ0EsIHN3aXRjaCBvciByb3V0ZXIpCisgICAgbm9kZV9ndWlkICAgICAgLSBOb2RlIEdVSUQKKyAgICBzeXNfaW1hZ2VfZ3VpZCAtIFN5c3RlbSBpbWFnZSBHVUlECisKKyAgSW4gYWRkaXRpb24sIHRoZXJlIGlzIGEgInBvcnRzIiBzdWJkaXJlY3RvcnksIHdpdGggb25lIHN1YmRpcmVjdG9yeQorICBmb3IgZWFjaCBwb3J0LiAgRm9yIGV4YW1wbGUsIGlmIG10aGNhMCBpcyBhIDItcG9ydCBIQ0EsIHRoZXJlIHdpbGwKKyAgYmUgdHdvIGRpcmVjdG9yaWVzOgorCisgICAgL3N5cy9jbGFzcy9pbmZpbmliYW5kL210aGNhMC9wb3J0cy8xCisgICAgL3N5cy9jbGFzcy9pbmZpbmliYW5kL210aGNhMC9wb3J0cy8yCisKKyAgKEEgc3dpdGNoIHdpbGwgb25seSBoYXZlIGEgc2luZ2xlICIwIiBzdWJkaXJlY3RvcnkgZm9yIHN3aXRjaCBwb3J0CisgIDA7IG5vIHN1YmRpcmVjdG9yeSBpcyBjcmVhdGVkIGZvciBub3JtYWwgc3dpdGNoIHBvcnRzKQorCisgIEluIGVhY2ggcG9ydCBzdWJkaXJlY3RvcnksIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGNyZWF0ZWQ6CisKKyAgICBjYXBfbWFzayAgICAgICAtIFBvcnQgY2FwYWJpbGl0eSBtYXNrCisgICAgbGlkICAgICAgICAgICAgLSBQb3J0IExJRAorICAgIGxpZF9tYXNrX2NvdW50IC0gUG9ydCBMSUQgbWFzayBjb3VudAorICAgIHJhdGUgICAgICAgICAgIC0gUG9ydCBkYXRhIHJhdGUgKGFjdGl2ZSB3aWR0aCAqIGFjdGl2ZSBzcGVlZCkKKyAgICBzbV9saWQgICAgICAgICAtIFN1Ym5ldCBtYW5hZ2VyIExJRCBmb3IgcG9ydCdzIHN1Ym5ldAorICAgIHNtX3NsICAgICAgICAgIC0gU3VibmV0IG1hbmFnZXIgU0wgZm9yIHBvcnQncyBzdWJuZXQKKyAgICBzdGF0ZSAgICAgICAgICAtIFBvcnQgc3RhdGUgKERPV04sIElOSVQsIEFSTUVELCBBQ1RJVkUgb3IgQUNUSVZFX0RFRkVSKQorICAgIHBoeXNfc3RhdGUgICAgIC0gUG9ydCBwaHlzaWNhbCBzdGF0ZSAoU2xlZXAsIFBvbGxpbmcsIExpbmtVcCwgZXRjKQorCisgIFRoZXJlIGlzIGFsc28gYSAiY291bnRlcnMiIHN1YmRpcmVjdG9yeSwgd2l0aCBmaWxlcworCisgICAgVkwxNV9kcm9wcGVkCisgICAgZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9ycworICAgIGxpbmtfZG93bmVkCisgICAgbGlua19lcnJvcl9yZWNvdmVyeQorICAgIGxvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9ycworICAgIHBvcnRfcmN2X2NvbnN0cmFpbnRfZXJyb3JzCisgICAgcG9ydF9yY3ZfZGF0YQorICAgIHBvcnRfcmN2X2Vycm9ycworICAgIHBvcnRfcmN2X3BhY2tldHMKKyAgICBwb3J0X3Jjdl9yZW1vdGVfcGh5c2ljYWxfZXJyb3JzCisgICAgcG9ydF9yY3Zfc3dpdGNoX3JlbGF5X2Vycm9ycworICAgIHBvcnRfeG1pdF9jb25zdHJhaW50X2Vycm9ycworICAgIHBvcnRfeG1pdF9kYXRhCisgICAgcG9ydF94bWl0X2Rpc2NhcmRzCisgICAgcG9ydF94bWl0X3BhY2tldHMKKyAgICBzeW1ib2xfZXJyb3IKKworICBFYWNoIG9mIHRoZXNlIGZpbGVzIGNvbnRhaW5zIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGZyb20gdGhlIHBvcnQncworICBQZXJmb3JtYW5jZSBNYW5hZ2VtZW50IFBvcnRDb3VudGVycyBhdHRyaWJ1dGUsIGFzIGRlc2NyaWJlZCBpbgorICBzZWN0aW9uIDE2LjEuMy41IG9mIHRoZSBJbmZpbmlCYW5kIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uLgorCisgIFRoZSAicGtleXMiIGFuZCAiZ2lkcyIgc3ViZGlyZWN0b3JpZXMgY29udGFpbiBvbmUgZmlsZSBmb3IgZWFjaAorICBlbnRyeSBpbiB0aGUgcG9ydCdzIFBfS2V5IG9yIEdJRCB0YWJsZSByZXNwZWN0aXZlbHkuICBGb3IgZXhhbXBsZSwKKyAgcG9ydHMvMS9wa2V5cy8xMCBjb250YWlucyB0aGUgdmFsdWUgYXQgaW5kZXggMTAgaW4gcG9ydCAxJ3MgUF9LZXkKKyAgdGFibGUuCisKK01USENBCisKKyAgVGhlIE1lbGxhbm94IEhDQSBkcml2ZXIgYWxzbyBjcmVhdGVzIHRoZSBmaWxlczoKKworICAgIGh3X3JldiAgIC0gSGFyZHdhcmUgcmV2aXNpb24gbnVtYmVyCisgICAgZndfdmVyICAgLSBGaXJtd2FyZSB2ZXJzaW9uCisgICAgaGNhX3R5cGUgLSBIQ0EgdHlwZTogIk1UMjMxMDgiLCAiTVQyNTIwOCAoTVQyMzEwOCBjb21wYXQgbW9kZSkiLAorICAgICAgICAgICAgICAgb3IgIk1UMjUyMDgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl9tYWQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWUwYzgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApAQCAtMCwwICsxLDk5IEBACitVU0VSU1BBQ0UgTUFEIEFDQ0VTUworCitEZXZpY2UgZmlsZXMKKworICBFYWNoIHBvcnQgb2YgZWFjaCBJbmZpbmlCYW5kIGRldmljZSBoYXMgYSAidW1hZCIgZGV2aWNlIGFuZCBhbgorICAiaXNzbSIgZGV2aWNlIGF0dGFjaGVkLiAgRm9yIGV4YW1wbGUsIGEgdHdvLXBvcnQgSENBIHdpbGwgaGF2ZSB0d28KKyAgdW1hZCBkZXZpY2VzIGFuZCB0d28gaXNzbSBkZXZpY2VzLCB3aGlsZSBhIHN3aXRjaCB3aWxsIGhhdmUgb25lCisgIGRldmljZSBvZiBlYWNoIHR5cGUgKGZvciBzd2l0Y2ggcG9ydCAwKS4KKworQ3JlYXRpbmcgTUFEIGFnZW50cworCisgIEEgTUFEIGFnZW50IGNhbiBiZSBjcmVhdGVkIGJ5IGZpbGxpbmcgaW4gYSBzdHJ1Y3QgaWJfdXNlcl9tYWRfcmVnX3JlcQorICBhbmQgdGhlbiBjYWxsaW5nIHRoZSBJQl9VU0VSX01BRF9SRUdJU1RFUl9BR0VOVCBpb2N0bCBvbiBhIGZpbGUKKyAgZGVzY3JpcHRvciBmb3IgdGhlIGFwcHJvcHJpYXRlIGRldmljZSBmaWxlLiAgSWYgdGhlIHJlZ2lzdHJhdGlvbgorICByZXF1ZXN0IHN1Y2NlZWRzLCBhIDMyLWJpdCBpZCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBzdHJ1Y3R1cmUuCisgIEZvciBleGFtcGxlOgorCisJc3RydWN0IGliX3VzZXJfbWFkX3JlZ19yZXEgcmVxID0geyAvKiAuLi4gKi8gfTsKKwlyZXQgPSBpb2N0bChmZCwgSUJfVVNFUl9NQURfUkVHSVNURVJfQUdFTlQsIChjaGFyICopICZyZXEpOworICAgICAgICBpZiAoIXJldCkKKwkJbXlfYWdlbnQgPSByZXEuaWQ7CisJZWxzZQorCQlwZXJyb3IoImFnZW50IHJlZ2lzdGVyIik7CisKKyAgQWdlbnRzIGNhbiBiZSB1bnJlZ2lzdGVyZWQgd2l0aCB0aGUgSUJfVVNFUl9NQURfVU5SRUdJU1RFUl9BR0VOVAorICBpb2N0bC4gIEFsc28sIGFsbCBhZ2VudHMgcmVnaXN0ZXJlZCB0aHJvdWdoIGEgZmlsZSBkZXNjcmlwdG9yIHdpbGwKKyAgYmUgdW5yZWdpc3RlcmVkIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgY2xvc2VkLgorCitSZWNlaXZpbmcgTUFEcworCisgIE1BRHMgYXJlIHJlY2VpdmVkIHVzaW5nIHJlYWQoKS4gIFRoZSBidWZmZXIgcGFzc2VkIHRvIHJlYWQoKSBtdXN0IGJlCisgIGxhcmdlIGVub3VnaCB0byBob2xkIGF0IGxlYXN0IG9uZSBzdHJ1Y3QgaWJfdXNlcl9tYWQuICBGb3IgZXhhbXBsZToKKworCXN0cnVjdCBpYl91c2VyX21hZCBtYWQ7CisJcmV0ID0gcmVhZChmZCwgJm1hZCwgc2l6ZW9mIG1hZCk7CisJaWYgKHJldCAhPSBzaXplb2YgbWFkKQorCQlwZXJyb3IoInJlYWQiKTsKKworICBJbiBhZGRpdGlvbiB0byB0aGUgYWN0dWFsIE1BRCBjb250ZW50cywgdGhlIG90aGVyIHN0cnVjdCBpYl91c2VyX21hZAorICBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCBpbmZvcm1hdGlvbiBvbiB0aGUgcmVjZWl2ZWQgTUFELiAgRm9yCisgIGV4YW1wbGUsIHRoZSByZW1vdGUgTElEIHdpbGwgYmUgaW4gbWFkLmxpZC4KKworICBJZiBhIHNlbmQgdGltZXMgb3V0LCBhIHJlY2VpdmUgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aCBtYWQuc3RhdHVzIHNldAorICB0byBFVElNRURPVVQuICBPdGhlcndpc2Ugd2hlbiBhIE1BRCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQsCisgIG1hZC5zdGF0dXMgd2lsbCBiZSAwLgorCisgIHBvbGwoKS9zZWxlY3QoKSBtYXkgYmUgdXNlZCB0byB3YWl0IHVudGlsIGEgTUFEIGNhbiBiZSByZWFkLgorCitTZW5kaW5nIE1BRHMKKworICBNQURzIGFyZSBzZW50IHVzaW5nIHdyaXRlKCkuICBUaGUgYWdlbnQgSUQgZm9yIHNlbmRpbmcgc2hvdWxkIGJlCisgIGZpbGxlZCBpbnRvIHRoZSBpZCBmaWVsZCBvZiB0aGUgTUFELCB0aGUgZGVzdGluYXRpb24gTElEIHNob3VsZCBiZQorICBmaWxsZWQgaW50byB0aGUgbGlkIGZpZWxkLCBhbmQgc28gb24uICBGb3IgZXhhbXBsZToKKworCXN0cnVjdCBpYl91c2VyX21hZCBtYWQ7CisKKwkvKiBmaWxsIGluIG1hZC5kYXRhICovCisKKwltYWQuaWQgID0gbXlfYWdlbnQ7CS8qIHJlcS5pZCBmcm9tIGFnZW50IHJlZ2lzdHJhdGlvbiAqLworCW1hZC5saWQgPSBteV9kZXN0OwkvKiBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuLi4gKi8KKwkvKiBldGMuICovCisKKwlyZXQgPSB3cml0ZShmZCwgJm1hZCwgc2l6ZW9mIG1hZCk7CisJaWYgKHJldCAhPSBzaXplb2YgbWFkKQorCQlwZXJyb3IoIndyaXRlIik7CisKK1NldHRpbmcgSXNTTSBDYXBhYmlsaXR5IEJpdAorCisgIFRvIHNldCB0aGUgSXNTTSBjYXBhYmlsaXR5IGJpdCBmb3IgYSBwb3J0LCBzaW1wbHkgb3BlbiB0aGUKKyAgY29ycmVzcG9uZGluZyBpc3NtIGRldmljZSBmaWxlLiAgSWYgdGhlIElzU00gYml0IGlzIGFscmVhZHkgc2V0LAorICB0aGVuIHRoZSBvcGVuIGNhbGwgd2lsbCBibG9jayB1bnRpbCB0aGUgYml0IGlzIGNsZWFyZWQgKG9yIHJldHVybgorICBpbW1lZGlhdGVseSB3aXRoIGVycm5vIHNldCB0byBFQUdBSU4gaWYgdGhlIE9fTk9OQkxPQ0sgZmxhZyBpcworICBwYXNzZWQgdG8gb3BlbigpKS4gIFRoZSBJc1NNIGJpdCB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgaXNzbSBmaWxlCisgIGlzIGNsb3NlZC4gIE5vIHJlYWQsIHdyaXRlIG9yIG90aGVyIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbgorICB0aGUgaXNzbSBmaWxlLgorCisvZGV2IGZpbGVzCisKKyAgVG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIgZGV2aWNlIGZpbGVzIGF1dG9tYXRpY2FsbHkgd2l0aAorICB1ZGV2LCBhIHJ1bGUgbGlrZQorCisgICAgS0VSTkVMPSJ1bWFkKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCisgICAgS0VSTkVMPSJpc3NtKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCisKKyAgY2FuIGJlIHVzZWQuICBUaGlzIHdpbGwgY3JlYXRlIGRldmljZSBub2RlcyBuYW1lZAorCisgICAgL2Rldi9pbmZpbmliYW5kL3VtYWQwCisgICAgL2Rldi9pbmZpbmliYW5kL2lzc20wCisKKyAgZm9yIHRoZSBmaXJzdCBwb3J0LCBhbmQgc28gb24uICBUaGUgSW5maW5pQmFuZCBkZXZpY2UgYW5kIHBvcnQKKyAgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGRldmljZXMgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgZmlsZXMKKworICAgIC9zeXMvY2xhc3MvaW5maW5pYmFuZF9tYWQvdW1hZDAvaWJkZXYKKyAgICAvc3lzL2NsYXNzL2luZmluaWJhbmRfbWFkL3VtYWQwL3BvcnQKKworICBhbmQKKworICAgIC9zeXMvY2xhc3MvaW5maW5pYmFuZF9tYWQvaXNzbTAvaWJkZXYKKyAgICAvc3lzL2NsYXNzL2luZmluaWJhbmRfbWFkL2lzc20wL3BvcnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5pdHJkLnR4dCBiL0RvY3VtZW50YXRpb24vaW5pdHJkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGUxYzgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0CkBAIC0wLDAgKzEsMzQwIEBACitVc2luZyB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJkKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV3JpdHRlbiAxOTk2LDIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyIDx3ZXJuZXIuYWxtZXNiZXJnZXJAZXBmbC5jaD4gYW5kCisgICAgICAgICAgICAgICAgICAgICBIYW5zIExlcm1lbiA8bGVybWVuQGZnYW4uZGU+CisKKworaW5pdHJkIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXR5IHRvIGxvYWQgYSBSQU0gZGlzayBieSB0aGUgYm9vdCBsb2FkZXIuCitUaGlzIFJBTSBkaXNrIGNhbiB0aGVuIGJlIG1vdW50ZWQgYXMgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gYW5kIHByb2dyYW1zCitjYW4gYmUgcnVuIGZyb20gaXQuIEFmdGVyd2FyZHMsIGEgbmV3IHJvb3QgZmlsZSBzeXN0ZW0gY2FuIGJlIG1vdW50ZWQKK2Zyb20gYSBkaWZmZXJlbnQgZGV2aWNlLiBUaGUgcHJldmlvdXMgcm9vdCAoZnJvbSBpbml0cmQpIGlzIHRoZW4gbW92ZWQKK3RvIGEgZGlyZWN0b3J5IGFuZCBjYW4gYmUgc3Vic2VxdWVudGx5IHVubW91bnRlZC4KKworaW5pdHJkIGlzIG1haW5seSBkZXNpZ25lZCB0byBhbGxvdyBzeXN0ZW0gc3RhcnR1cCB0byBvY2N1ciBpbiB0d28gcGhhc2VzLAord2hlcmUgdGhlIGtlcm5lbCBjb21lcyB1cCB3aXRoIGEgbWluaW11bSBzZXQgb2YgY29tcGlsZWQtaW4gZHJpdmVycywgYW5kCit3aGVyZSBhZGRpdGlvbmFsIG1vZHVsZXMgYXJlIGxvYWRlZCBmcm9tIGluaXRyZC4KKworVGhpcyBkb2N1bWVudCBnaXZlcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSB1c2Ugb2YgaW5pdHJkLiBBIG1vcmUgZGV0YWlsZWQKK2Rpc2N1c3Npb24gb2YgdGhlIGJvb3QgcHJvY2VzcyBjYW4gYmUgZm91bmQgaW4gWzFdLgorCisKK09wZXJhdGlvbgorLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgaW5pdHJkLCB0aGUgc3lzdGVtIHR5cGljYWxseSBib290cyBhcyBmb2xsb3dzOgorCisgIDEpIHRoZSBib290IGxvYWRlciBsb2FkcyB0aGUga2VybmVsIGFuZCB0aGUgaW5pdGlhbCBSQU0gZGlzaworICAyKSB0aGUga2VybmVsIGNvbnZlcnRzIGluaXRyZCBpbnRvIGEgIm5vcm1hbCIgUkFNIGRpc2sgYW5kCisgICAgIGZyZWVzIHRoZSBtZW1vcnkgdXNlZCBieSBpbml0cmQKKyAgMykgaW5pdHJkIGlzIG1vdW50ZWQgcmVhZC13cml0ZSBhcyByb290CisgIDQpIC9saW51eHJjIGlzIGV4ZWN1dGVkICh0aGlzIGNhbiBiZSBhbnkgdmFsaWQgZXhlY3V0YWJsZSwgaW5jbHVkaW5nCisgICAgIHNoZWxsIHNjcmlwdHM7IGl0IGlzIHJ1biB3aXRoIHVpZCAwIGFuZCBjYW4gZG8gYmFzaWNhbGx5IGV2ZXJ5dGhpbmcKKyAgICAgaW5pdCBjYW4gZG8pCisgIDUpIGxpbnV4cmMgbW91bnRzIHRoZSAicmVhbCIgcm9vdCBmaWxlIHN5c3RlbQorICA2KSBsaW51eHJjIHBsYWNlcyB0aGUgcm9vdCBmaWxlIHN5c3RlbSBhdCB0aGUgcm9vdCBkaXJlY3RvcnkgdXNpbmcgdGhlCisgICAgIHBpdm90X3Jvb3Qgc3lzdGVtIGNhbGwKKyAgNykgdGhlIHVzdWFsIGJvb3Qgc2VxdWVuY2UgKGUuZy4gaW52b2NhdGlvbiBvZiAvc2Jpbi9pbml0KSBpcyBwZXJmb3JtZWQKKyAgICAgb24gdGhlIHJvb3QgZmlsZSBzeXN0ZW0KKyAgOCkgdGhlIGluaXRyZCBmaWxlIHN5c3RlbSBpcyByZW1vdmVkCisKK05vdGUgdGhhdCBjaGFuZ2luZyB0aGUgcm9vdCBkaXJlY3RvcnkgZG9lcyBub3QgaW52b2x2ZSB1bm1vdW50aW5nIGl0LgorSXQgaXMgdGhlcmVmb3JlIHBvc3NpYmxlIHRvIGxlYXZlIHByb2Nlc3NlcyBydW5uaW5nIG9uIGluaXRyZCBkdXJpbmcgdGhhdAorcHJvY2VkdXJlLiBBbHNvIG5vdGUgdGhhdCBmaWxlIHN5c3RlbXMgbW91bnRlZCB1bmRlciBpbml0cmQgY29udGludWUgdG8KK2JlIGFjY2Vzc2libGUuCisKKworQm9vdCBjb21tYW5kLWxpbmUgb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbml0cmQgYWRkcyB0aGUgZm9sbG93aW5nIG5ldyBvcHRpb25zOgorCisgIGluaXRyZD08cGF0aD4gICAgKGUuZy4gTE9BRExJTikKKworICAgIExvYWRzIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyB0aGUgaW5pdGlhbCBSQU0gZGlzay4gV2hlbiB1c2luZyBMSUxPLCB5b3UKKyAgICBoYXZlIHRvIHNwZWNpZnkgdGhlIFJBTSBkaXNrIGltYWdlIGZpbGUgaW4gL2V0Yy9saWxvLmNvbmYsIHVzaW5nIHRoZQorICAgIElOSVRSRCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgIG5vaW5pdHJkCisKKyAgICBpbml0cmQgZGF0YSBpcyBwcmVzZXJ2ZWQgYnV0IGl0IGlzIG5vdCBjb252ZXJ0ZWQgdG8gYSBSQU0gZGlzayBhbmQKKyAgICB0aGUgIm5vcm1hbCIgcm9vdCBmaWxlIHN5c3RlbSBpcyBtb3VudGVkLiBpbml0cmQgZGF0YSBjYW4gYmUgcmVhZAorICAgIGZyb20gL2Rldi9pbml0cmQuIE5vdGUgdGhhdCB0aGUgZGF0YSBpbiBpbml0cmQgY2FuIGhhdmUgYW55IHN0cnVjdHVyZQorICAgIGluIHRoaXMgY2FzZSBhbmQgZG9lc24ndCBuZWNlc3NhcmlseSBoYXZlIHRvIGJlIGEgZmlsZSBzeXN0ZW0gaW1hZ2UuCisgICAgVGhpcyBvcHRpb24gaXMgdXNlZCBtYWlubHkgZm9yIGRlYnVnZ2luZy4KKworICAgIE5vdGU6IC9kZXYvaW5pdHJkIGlzIHJlYWQtb25seSBhbmQgaXQgY2FuIG9ubHkgYmUgdXNlZCBvbmNlLiBBcyBzb29uCisgICAgYXMgdGhlIGxhc3QgcHJvY2VzcyBoYXMgY2xvc2VkIGl0LCBhbGwgZGF0YSBpcyBmcmVlZCBhbmQgL2Rldi9pbml0cmQKKyAgICBjYW4ndCBiZSBvcGVuZWQgYW55bW9yZS4KKworICByb290PS9kZXYvcmFtMCAgICh3aXRob3V0IGRldmZzKQorICByb290PS9kZXYvcmQvMCAgICh3aXRoIGRldmZzKQorCisgICAgaW5pdHJkIGlzIG1vdW50ZWQgYXMgcm9vdCwgYW5kIHRoZSBub3JtYWwgYm9vdCBwcm9jZWR1cmUgaXMgZm9sbG93ZWQsCisgICAgd2l0aCB0aGUgUkFNIGRpc2sgc3RpbGwgbW91bnRlZCBhcyByb290LgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKK0ZpcnN0LCBhIGRpcmVjdG9yeSBmb3IgdGhlIGluaXRyZCBmaWxlIHN5c3RlbSBoYXMgdG8gYmUgY3JlYXRlZCBvbiB0aGUKKyJub3JtYWwiIHJvb3QgZmlsZSBzeXN0ZW0sIGUuZy4KKworIyBta2RpciAvaW5pdHJkCisKK1RoZSBuYW1lIGlzIG5vdCByZWxldmFudC4gTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBvbiB0aGUgcGl2b3Rfcm9vdCgyKQorbWFuIHBhZ2UuCisKK0lmIHRoZSByb290IGZpbGUgc3lzdGVtIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBib290IHByb2NlZHVyZSAoaS5lLiBpZgoreW91J3JlIGJ1aWxkaW5nIGFuIGluc3RhbGwgZmxvcHB5KSwgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gY3JlYXRpb24KK3Byb2NlZHVyZSBzaG91bGQgY3JlYXRlIHRoZSAvaW5pdHJkIGRpcmVjdG9yeS4KKworSWYgaW5pdHJkIHdpbGwgbm90IGJlIG1vdW50ZWQgaW4gc29tZSBjYXNlcywgaXRzIGNvbnRlbnQgaXMgc3RpbGwKK2FjY2Vzc2libGUgaWYgdGhlIGZvbGxvd2luZyBkZXZpY2UgaGFzIGJlZW4gY3JlYXRlZCAobm90ZSB0aGF0IHRoaXMKK2RvZXMgbm90IHdvcmsgaWYgdXNpbmcgZGV2ZnMpOgorCisjIG1rbm9kIC9kZXYvaW5pdHJkIGIgMSAyNTAgCisjIGNobW9kIDQwMCAvZGV2L2luaXRyZAorCitTZWNvbmQsIHRoZSBrZXJuZWwgaGFzIHRvIGJlIGNvbXBpbGVkIHdpdGggUkFNIGRpc2sgc3VwcG9ydCBhbmQgd2l0aAorc3VwcG9ydCBmb3IgdGhlIGluaXRpYWwgUkFNIGRpc2sgZW5hYmxlZC4gQWxzbywgYXQgbGVhc3QgYWxsIGNvbXBvbmVudHMKK25lZWRlZCB0byBleGVjdXRlIHByb2dyYW1zIGZyb20gaW5pdHJkIChlLmcuIGV4ZWN1dGFibGUgZm9ybWF0IGFuZCBmaWxlCitzeXN0ZW0pIG11c3QgYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgorCitUaGlyZCwgeW91IGhhdmUgdG8gY3JlYXRlIHRoZSBSQU0gZGlzayBpbWFnZS4gVGhpcyBpcyBkb25lIGJ5IGNyZWF0aW5nIGEKK2ZpbGUgc3lzdGVtIG9uIGEgYmxvY2sgZGV2aWNlLCBjb3B5aW5nIGZpbGVzIHRvIGl0IGFzIG5lZWRlZCwgYW5kIHRoZW4KK2NvcHlpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrIGRldmljZSB0byB0aGUgaW5pdHJkIGZpbGUuIFdpdGggcmVjZW50CitrZXJuZWxzLCBhdCBsZWFzdCB0aHJlZSB0eXBlcyBvZiBkZXZpY2VzIGFyZSBzdWl0YWJsZSBmb3IgdGhhdDoKKworIC0gYSBmbG9wcHkgZGlzayAod29ya3MgZXZlcnl3aGVyZSBidXQgaXQncyBwYWluZnVsbHkgc2xvdykKKyAtIGEgUkFNIGRpc2sgKGZhc3QsIGJ1dCBhbGxvY2F0ZXMgcGh5c2ljYWwgbWVtb3J5KQorIC0gYSBsb29wYmFjayBkZXZpY2UgKHRoZSBtb3N0IGVsZWdhbnQgc29sdXRpb24pCisKK1dlJ2xsIGRlc2NyaWJlIHRoZSBsb29wYmFjayBkZXZpY2UgbWV0aG9kOgorCisgMSkgbWFrZSBzdXJlIGxvb3BiYWNrIGJsb2NrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsCisgMikgY3JlYXRlIGFuIGVtcHR5IGZpbGUgc3lzdGVtIG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplLCBlLmcuCisgICAgIyBkZCBpZj0vZGV2L3plcm8gb2Y9aW5pdHJkIGJzPTMwMGsgY291bnQ9MQorICAgICMgbWtlMmZzIC1GIC1tMCBpbml0cmQKKyAgICAoaWYgc3BhY2UgaXMgY3JpdGljYWwsIHlvdSBtYXkgd2FudCB0byB1c2UgdGhlIE1pbml4IEZTIGluc3RlYWQgb2YgRXh0MikKKyAzKSBtb3VudCB0aGUgZmlsZSBzeXN0ZW0sIGUuZy4KKyAgICAjIG1vdW50IC10IGV4dDIgLW8gbG9vcCBpbml0cmQgL21udAorIDQpIGNyZWF0ZSB0aGUgY29uc29sZSBkZXZpY2UgKG5vdCBuZWNlc3NhcnkgaWYgdXNpbmcgZGV2ZnMsIGJ1dCBpdCBjYW4ndAorICAgIGh1cnQgdG8gZG8gaXQgYW55d2F5KToKKyAgICAjIG1rZGlyIC9tbnQvZGV2CisgICAgIyBta25vZCAvbW50L2Rldi9jb25zb2xlIGMgNSAxCisgNSkgY29weSBhbGwgdGhlIGZpbGVzIHRoYXQgYXJlIG5lZWRlZCB0byBwcm9wZXJseSB1c2UgdGhlIGluaXRyZAorICAgIGVudmlyb25tZW50LiBEb24ndCBmb3JnZXQgdGhlIG1vc3QgaW1wb3J0YW50IGZpbGUsIC9saW51eHJjCisgICAgTm90ZSB0aGF0IC9saW51eHJjJ3MgcGVybWlzc2lvbnMgbXVzdCBpbmNsdWRlICJ4IiAoZXhlY3V0ZSkuCisgNikgY29ycmVjdCBvcGVyYXRpb24gdGhlIGluaXRyZCBlbnZpcm9ubWVudCBjYW4gZnJlcXVlbnRseSBiZSB0ZXN0ZWQKKyAgICBldmVuIHdpdGhvdXQgcmVib290aW5nIHdpdGggdGhlIGNvbW1hbmQKKyAgICAjIGNocm9vdCAvbW50IC9saW51eHJjCisgICAgVGhpcyBpcyBvZiBjb3Vyc2UgbGltaXRlZCB0byBpbml0cmRzIHRoYXQgZG8gbm90IGludGVyZmVyZSB3aXRoIHRoZQorICAgIGdlbmVyYWwgc3lzdGVtIHN0YXRlIChlLmcuIGJ5IHJlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLAorICAgIG92ZXJ3cml0aW5nIG1vdW50ZWQgZGV2aWNlcywgdHJ5aW5nIHRvIHN0YXJ0IGFscmVhZHkgcnVubmluZyBkZW1vbnMsCisgICAgZXRjLiBOb3RlIGhvd2V2ZXIgdGhhdCBpdCBpcyB1c3VhbGx5IHBvc3NpYmxlIHRvIHVzZSBwaXZvdF9yb290IGluCisgICAgc3VjaCBhIGNocm9vdCdlZCBpbml0cmQgZW52aXJvbm1lbnQuKQorIDcpIHVubW91bnQgdGhlIGZpbGUgc3lzdGVtCisgICAgIyB1bW91bnQgL21udAorIDgpIHRoZSBpbml0cmQgaXMgbm93IGluIHRoZSBmaWxlICJpbml0cmQiLiBPcHRpb25hbGx5LCBpdCBjYW4gbm93IGJlCisgICAgY29tcHJlc3NlZAorICAgICMgZ3ppcCAtOSBpbml0cmQKKworRm9yIGV4cGVyaW1lbnRpbmcgd2l0aCBpbml0cmQsIHlvdSBtYXkgd2FudCB0byB0YWtlIGEgcmVzY3VlIGZsb3BweSBhbmQKK29ubHkgYWRkIGEgc3ltYm9saWMgbGluayBmcm9tIC9saW51eHJjIHRvIC9iaW4vc2guIEFsdGVybmF0aXZlbHksIHlvdQorY2FuIHRyeSB0aGUgZXhwZXJpbWVudGFsIG5ld2xpYiBlbnZpcm9ubWVudCBbMl0gdG8gY3JlYXRlIGEgc21hbGwKK2luaXRyZC4KKworRmluYWxseSwgeW91IGhhdmUgdG8gYm9vdCB0aGUga2VybmVsIGFuZCBsb2FkIGluaXRyZC4gQWxtb3N0IGFsbCBMaW51eAorYm9vdCBsb2FkZXJzIHN1cHBvcnQgaW5pdHJkLiBTaW5jZSB0aGUgYm9vdCBwcm9jZXNzIGlzIHN0aWxsIGNvbXBhdGlibGUKK3dpdGggYW4gb2xkZXIgbWVjaGFuaXNtLCB0aGUgZm9sbG93aW5nIGJvb3QgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKK2hhdmUgdG8gYmUgZ2l2ZW46CisKKyAgcm9vdD0vZGV2L3JhbTAgaW5pdD0vbGludXhyYyBydworCitpZiBub3QgdXNpbmcgZGV2ZnMsIG9yCisKKyAgcm9vdD0vZGV2L3JkLzAgaW5pdD0vbGludXhyYyBydworCitpZiB1c2luZyBkZXZmcy4gKHJ3IGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHdyaXRpbmcgdG8gdGhlIGluaXRyZCBmaWxlCitzeXN0ZW0uKQorCitXaXRoIExPQURMSU4sIHlvdSBzaW1wbHkgZXhlY3V0ZQorCisgICAgIExPQURMSU4gPGtlcm5lbD4gaW5pdHJkPTxkaXNrX2ltYWdlPgorZS5nLiBMT0FETElOIEM6XExJTlVYXEJaSU1BR0UgaW5pdHJkPUM6XExJTlVYXElOSVRSRC5HWiByb290PS9kZXYvcmFtMAorICAgICAgIGluaXQ9L2xpbnV4cmMgcncKKworV2l0aCBMSUxPLCB5b3UgYWRkIHRoZSBvcHRpb24gSU5JVFJEPTxwYXRoPiB0byBlaXRoZXIgdGhlIGdsb2JhbCBzZWN0aW9uCitvciB0byB0aGUgc2VjdGlvbiBvZiB0aGUgcmVzcGVjdGl2ZSBrZXJuZWwgaW4gL2V0Yy9saWxvLmNvbmYsIGFuZCBwYXNzCit0aGUgb3B0aW9ucyB1c2luZyBBUFBFTkQsIGUuZy4KKworICBpbWFnZSA9IC9iekltYWdlCisgICAgaW5pdHJkID0gL2Jvb3QvaW5pdHJkLmd6CisgICAgYXBwZW5kID0gInJvb3Q9L2Rldi9yYW0wIGluaXQ9L2xpbnV4cmMgcnciCisKK2FuZCBydW4gL3NiaW4vbGlsbworCitGb3Igb3RoZXIgYm9vdCBsb2FkZXJzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIHJlc3BlY3RpdmUgZG9jdW1lbnRhdGlvbi4KKworTm93IHlvdSBjYW4gYm9vdCBhbmQgZW5qb3kgdXNpbmcgaW5pdHJkLgorCisKK0NoYW5naW5nIHRoZSByb290IGRldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gZmluaXNoZWQgd2l0aCBpdHMgZHV0aWVzLCBsaW51eHJjIHR5cGljYWxseSBjaGFuZ2VzIHRoZSByb290IGRldmljZQorYW5kIHByb2NlZWRzIHdpdGggc3RhcnRpbmcgdGhlIExpbnV4IHN5c3RlbSBvbiB0aGUgInJlYWwiIHJvb3QgZGV2aWNlLgorCitUaGUgcHJvY2VkdXJlIGludm9sdmVzIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgLSBtb3VudGluZyB0aGUgbmV3IHJvb3QgZmlsZSBzeXN0ZW0KKyAtIHR1cm5pbmcgaXQgaW50byB0aGUgcm9vdCBmaWxlIHN5c3RlbQorIC0gcmVtb3ZpbmcgYWxsIGFjY2Vzc2VzIHRvIHRoZSBvbGQgKGluaXRyZCkgcm9vdCBmaWxlIHN5c3RlbQorIC0gdW5tb3VudGluZyB0aGUgaW5pdHJkIGZpbGUgc3lzdGVtIGFuZCBkZS1hbGxvY2F0aW5nIHRoZSBSQU0gZGlzaworCitNb3VudGluZyB0aGUgbmV3IHJvb3QgZmlsZSBzeXN0ZW0gaXMgZWFzeTogaXQganVzdCBuZWVkcyB0byBiZSBtb3VudGVkIG9uCithIGRpcmVjdG9yeSB1bmRlciB0aGUgY3VycmVudCByb290LiBFeGFtcGxlOgorCisjIG1rZGlyIC9uZXctcm9vdAorIyBtb3VudCAtbyBybyAvZGV2L2hkYTEgL25ldy1yb290CisKK1RoZSByb290IGNoYW5nZSBpcyBhY2NvbXBsaXNoZWQgd2l0aCB0aGUgcGl2b3Rfcm9vdCBzeXN0ZW0gY2FsbCwgd2hpY2gKK2lzIGFsc28gYXZhaWxhYmxlIHZpYSB0aGUgcGl2b3Rfcm9vdCB1dGlsaXR5IChzZWUgcGl2b3Rfcm9vdCg4KSBtYW4KK3BhZ2U7IHBpdm90X3Jvb3QgaXMgZGlzdHJpYnV0ZWQgd2l0aCB1dGlsLWxpbnV4IHZlcnNpb24gMi4xMGggb3IgaGlnaGVyCitbM10pLiBwaXZvdF9yb290IG1vdmVzIHRoZSBjdXJyZW50IHJvb3QgdG8gYSBkaXJlY3RvcnkgdW5kZXIgdGhlIG5ldworcm9vdCwgYW5kIHB1dHMgdGhlIG5ldyByb290IGF0IGl0cyBwbGFjZS4gVGhlIGRpcmVjdG9yeSBmb3IgdGhlIG9sZCByb290CittdXN0IGV4aXN0IGJlZm9yZSBjYWxsaW5nIHBpdm90X3Jvb3QuIEV4YW1wbGU6CisKKyMgY2QgL25ldy1yb290CisjIG1rZGlyIGluaXRyZAorIyBwaXZvdF9yb290IC4gaW5pdHJkCisKK05vdywgdGhlIGxpbnV4cmMgcHJvY2VzcyBtYXkgc3RpbGwgYWNjZXNzIHRoZSBvbGQgcm9vdCB2aWEgaXRzCitleGVjdXRhYmxlLCBzaGFyZWQgbGlicmFyaWVzLCBzdGFuZGFyZCBpbnB1dC9vdXRwdXQvZXJyb3IsIGFuZCBpdHMKK2N1cnJlbnQgcm9vdCBkaXJlY3RvcnkuIEFsbCB0aGVzZSByZWZlcmVuY2VzIGFyZSBkcm9wcGVkIGJ5IHRoZQorZm9sbG93aW5nIGNvbW1hbmQ6CisKKyMgZXhlYyBjaHJvb3QgLiB3aGF0LWZvbGxvd3MgPGRldi9jb25zb2xlID5kZXYvY29uc29sZSAyPiYxCisKK1doZXJlIHdoYXQtZm9sbG93cyBpcyBhIHByb2dyYW0gdW5kZXIgdGhlIG5ldyByb290LCBlLmcuIC9zYmluL2luaXQKK0lmIHRoZSBuZXcgcm9vdCBmaWxlIHN5c3RlbSB3aWxsIGJlIHVzZWQgd2l0aCBkZXZmcyBhbmQgaGFzIG5vIHZhbGlkCisvZGV2IGRpcmVjdG9yeSwgZGV2ZnMgbXVzdCBiZSBtb3VudGVkIGJlZm9yZSBpbnZva2luZyBjaHJvb3QgaW4gb3JkZXIgdG8KK3Byb3ZpZGUgL2Rldi9jb25zb2xlLgorCitOb3RlOiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHBpdm90X3Jvb3QgbWF5IGNoYW5nZSB3aXRoIHRpbWUuIEluIG9yZGVyCit0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgdGhlIGZvbGxvd2luZyBwb2ludHMgc2hvdWxkIGJlIG9ic2VydmVkOgorCisgLSBiZWZvcmUgY2FsbGluZyBwaXZvdF9yb290LCB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb2YgdGhlIGludm9raW5nCisgICBwcm9jZXNzIHNob3VsZCBwb2ludCB0byB0aGUgbmV3IHJvb3QgZGlyZWN0b3J5CisgLSB1c2UgLiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGFuZCB0aGUgX3JlbGF0aXZlXyBwYXRoIG9mIHRoZSBkaXJlY3RvcnkKKyAgIGZvciB0aGUgb2xkIHJvb3QgYXMgdGhlIHNlY29uZCBhcmd1bWVudAorIC0gYSBjaHJvb3QgcHJvZ3JhbSBtdXN0IGJlIGF2YWlsYWJsZSB1bmRlciB0aGUgb2xkIGFuZCB0aGUgbmV3IHJvb3QKKyAtIGNocm9vdCB0byB0aGUgbmV3IHJvb3QgYWZ0ZXJ3YXJkcworIC0gdXNlIHJlbGF0aXZlIHBhdGhzIGZvciBkZXYvY29uc29sZSBpbiB0aGUgZXhlYyBjb21tYW5kCisKK05vdywgdGhlIGluaXRyZCBjYW4gYmUgdW5tb3VudGVkIGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgUkFNCitkaXNrIGNhbiBiZSBmcmVlZDoKKworIyB1bW91bnQgL2luaXRyZAorIyBibG9ja2RldiAtLWZsdXNoYnVmcyAvZGV2L3JhbTAgICAgIyAvZGV2L3JkLzAgaWYgdXNpbmcgZGV2ZnMKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgaW5pdHJkIHdpdGggYW4gTkZTLW1vdW50ZWQgcm9vdCwgc2VlIHRoZQorcGl2b3Rfcm9vdCg4KSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KKworTm90ZTogaWYgbGludXhyYyBvciBhbnkgcHJvZ3JhbSBleGVjJ2VkIGZyb20gaXQgdGVybWluYXRlcyBmb3Igc29tZQorcmVhc29uLCB0aGUgb2xkIGNoYW5nZV9yb290IG1lY2hhbmlzbSBpcyBpbnZva2VkIChzZWUgc2VjdGlvbiAiT2Jzb2xldGUKK3Jvb3QgY2hhbmdlIG1lY2hhbmlzbSIpLgorCisKK1VzYWdlIHNjZW5hcmlvcworLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIG1vdGl2YXRpb24gZm9yIGltcGxlbWVudGluZyBpbml0cmQgd2FzIHRvIGFsbG93IGZvciBtb2R1bGFyCitrZXJuZWwgY29uZmlndXJhdGlvbiBhdCBzeXN0ZW0gaW5zdGFsbGF0aW9uLiBUaGUgcHJvY2VkdXJlIHdvdWxkIHdvcmsKK2FzIGZvbGxvd3M6CisKKyAgMSkgc3lzdGVtIGJvb3RzIGZyb20gZmxvcHB5IG9yIG90aGVyIG1lZGlhIHdpdGggYSBtaW5pbWFsIGtlcm5lbAorICAgICAoZS5nLiBzdXBwb3J0IGZvciBSQU0gZGlza3MsIGluaXRyZCwgYS5vdXQsIGFuZCB0aGUgRXh0MiBGUykgYW5kCisgICAgIGxvYWRzIGluaXRyZAorICAyKSAvbGludXhyYyBkZXRlcm1pbmVzIHdoYXQgaXMgbmVlZGVkIHRvICgxKSBtb3VudCB0aGUgInJlYWwiIHJvb3QgRlMKKyAgICAgKGkuZS4gZGV2aWNlIHR5cGUsIGRldmljZSBkcml2ZXJzLCBmaWxlIHN5c3RlbSkgYW5kICgyKSB0aGUKKyAgICAgZGlzdHJpYnV0aW9uIG1lZGlhIChlLmcuIENELVJPTSwgbmV0d29yaywgdGFwZSwgLi4uKS4gVGhpcyBjYW4gYmUKKyAgICAgZG9uZSBieSBhc2tpbmcgdGhlIHVzZXIsIGJ5IGF1dG8tcHJvYmluZywgb3IgYnkgdXNpbmcgYSBoeWJyaWQKKyAgICAgYXBwcm9hY2guCisgIDMpIC9saW51eHJjIGxvYWRzIHRoZSBuZWNlc3Nhcnkga2VybmVsIG1vZHVsZXMKKyAgNCkgL2xpbnV4cmMgY3JlYXRlcyBhbmQgcG9wdWxhdGVzIHRoZSByb290IGZpbGUgc3lzdGVtICh0aGlzIGRvZXNuJ3QKKyAgICAgaGF2ZSB0byBiZSBhIHZlcnkgdXNhYmxlIHN5c3RlbSB5ZXQpCisgIDUpIC9saW51eHJjIGludm9rZXMgcGl2b3Rfcm9vdCB0byBjaGFuZ2UgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gYW5kCisgICAgIGV4ZWNzIC0gdmlhIGNocm9vdCAtIGEgcHJvZ3JhbSB0aGF0IGNvbnRpbnVlcyB0aGUgaW5zdGFsbGF0aW9uCisgIDYpIHRoZSBib290IGxvYWRlciBpcyBpbnN0YWxsZWQKKyAgNykgdGhlIGJvb3QgbG9hZGVyIGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBhbiBpbml0cmQgd2l0aCB0aGUgc2V0IG9mCisgICAgIG1vZHVsZXMgdGhhdCB3YXMgdXNlZCB0byBicmluZyB1cCB0aGUgc3lzdGVtIChlLmcuIC9pbml0cmQgY2FuIGJlCisgICAgIG1vZGlmaWVkLCB0aGVuIHVubW91bnRlZCwgYW5kIGZpbmFsbHksIHRoZSBpbWFnZSBpcyB3cml0dGVuIGZyb20KKyAgICAgL2Rldi9yYW0wIG9yIC9kZXYvcmQvMCB0byBhIGZpbGUpCisgIDgpIG5vdyB0aGUgc3lzdGVtIGlzIGJvb3RhYmxlIGFuZCBhZGRpdGlvbmFsIGluc3RhbGxhdGlvbiB0YXNrcyBjYW4gYmUKKyAgICAgcGVyZm9ybWVkCisKK1RoZSBrZXkgcm9sZSBvZiBpbml0cmQgaGVyZSBpcyB0byByZS11c2UgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBkdXJpbmcKK25vcm1hbCBzeXN0ZW0gb3BlcmF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSB1c2Ugb2YgYSBibG9hdGVkICJnZW5lcmljIgora2VybmVsIG9yIHJlLWNvbXBpbGluZyBvciByZS1saW5raW5nIHRoZSBrZXJuZWwuCisKK0Egc2Vjb25kIHNjZW5hcmlvIGlzIGZvciBpbnN0YWxsYXRpb25zIHdoZXJlIExpbnV4IHJ1bnMgb24gc3lzdGVtcyB3aXRoCitkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgaW4gYSBzaW5nbGUgYWRtaW5pc3RyYXRpdmUgZG9tYWluLiBJbgorc3VjaCBjYXNlcywgaXQgaXMgZGVzaXJhYmxlIHRvIGdlbmVyYXRlIG9ubHkgYSBzbWFsbCBzZXQgb2Yga2VybmVscworKGlkZWFsbHkgb25seSBvbmUpIGFuZCB0byBrZWVwIHRoZSBzeXN0ZW0tc3BlY2lmaWMgcGFydCBvZiBjb25maWd1cmF0aW9uCitpbmZvcm1hdGlvbiBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gSW4gdGhpcyBjYXNlLCBhIGNvbW1vbiBpbml0cmQgY291bGQgYmUKK2dlbmVyYXRlZCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMuIFRoZW4sIG9ubHkgL2xpbnV4cmMgb3IgYSBmaWxlCityZWFkIGJ5IGl0IHdvdWxkIGhhdmUgdG8gYmUgZGlmZmVyZW50LgorCitBIHRoaXJkIHNjZW5hcmlvIGFyZSBtb3JlIGNvbnZlbmllbnQgcmVjb3ZlcnkgZGlza3MsIGJlY2F1c2UgaW5mb3JtYXRpb24KK2xpa2UgdGhlIGxvY2F0aW9uIG9mIHRoZSByb290IEZTIHBhcnRpdGlvbiBkb2Vzbid0IGhhdmUgdG8gYmUgcHJvdmlkZWQgYXQKK2Jvb3QgdGltZSwgYnV0IHRoZSBzeXN0ZW0gbG9hZGVkIGZyb20gaW5pdHJkIGNhbiBpbnZva2UgYSB1c2VyLWZyaWVuZGx5CitkaWFsb2cgYW5kIGl0IGNhbiBhbHNvIHBlcmZvcm0gc29tZSBzYW5pdHkgY2hlY2tzIChvciBldmVuIHNvbWUgZm9ybSBvZgorYXV0by1kZXRlY3Rpb24pLgorCitMYXN0IG5vdCBsZWFzdCwgQ0QtUk9NIGRpc3RyaWJ1dG9ycyBtYXkgdXNlIGl0IGZvciBiZXR0ZXIgaW5zdGFsbGF0aW9uCitmcm9tIENELCBlLmcuIGJ5IHVzaW5nIGEgYm9vdCBmbG9wcHkgYW5kIGJvb3RzdHJhcHBpbmcgYSBiaWdnZXIgUkFNIGRpc2sKK3ZpYSBpbml0cmQgZnJvbSBDRDsgb3IgYnkgYm9vdGluZyB2aWEgYSBsb2FkZXIgbGlrZSBMT0FETElOIG9yIGRpcmVjdGx5Citmcm9tIHRoZSBDRC1ST00sIGFuZCBsb2FkaW5nIHRoZSBSQU0gZGlzayBmcm9tIENEIHdpdGhvdXQgbmVlZCBvZgorZmxvcHBpZXMuIAorCisKK09ic29sZXRlIHJvb3QgY2hhbmdlIG1lY2hhbmlzbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgbWVjaGFuaXNtIHdhcyB1c2VkIGJlZm9yZSB0aGUgaW50cm9kdWN0aW9uIG9mIHBpdm90X3Jvb3QuCitDdXJyZW50IGtlcm5lbHMgc3RpbGwgc3VwcG9ydCBpdCwgYnV0IHlvdSBzaG91bGQgX25vdF8gcmVseSBvbiBpdHMKK2NvbnRpbnVlZCBhdmFpbGFiaWxpdHkuCisKK0l0IHdvcmtzIGJ5IG1vdW50aW5nIHRoZSAicmVhbCIgcm9vdCBkZXZpY2UgKGkuZS4gdGhlIG9uZSBzZXQgd2l0aCByZGV2CitpbiB0aGUga2VybmVsIGltYWdlIG9yIHdpdGggcm9vdD0uLi4gYXQgdGhlIGJvb3QgY29tbWFuZCBsaW5lKSBhcyB0aGUKK3Jvb3QgZmlsZSBzeXN0ZW0gd2hlbiBsaW51eHJjIGV4aXRzLiBUaGUgaW5pdHJkIGZpbGUgc3lzdGVtIGlzIHRoZW4KK3VubW91bnRlZCwgb3IsIGlmIGl0IGlzIHN0aWxsIGJ1c3ksIG1vdmVkIHRvIGEgZGlyZWN0b3J5IC9pbml0cmQsIGlmCitzdWNoIGEgZGlyZWN0b3J5IGV4aXN0cyBvbiB0aGUgbmV3IHJvb3QgZmlsZSBzeXN0ZW0uCisKK0luIG9yZGVyIHRvIHVzZSB0aGlzIG1lY2hhbmlzbSwgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlIGJvb3QKK2NvbW1hbmQgb3B0aW9ucyByb290LCBpbml0LCBvciBydy4gKElmIHNwZWNpZmllZCwgdGhleSB3aWxsIGFmZmVjdAordGhlIHJlYWwgcm9vdCBmaWxlIHN5c3RlbSwgbm90IHRoZSBpbml0cmQgZW52aXJvbm1lbnQuKQorICAKK0lmIC9wcm9jIGlzIG1vdW50ZWQsIHRoZSAicmVhbCIgcm9vdCBkZXZpY2UgY2FuIGJlIGNoYW5nZWQgZnJvbSB3aXRoaW4KK2xpbnV4cmMgYnkgd3JpdGluZyB0aGUgbnVtYmVyIG9mIHRoZSBuZXcgcm9vdCBGUyBkZXZpY2UgdG8gdGhlIHNwZWNpYWwKK2ZpbGUgL3Byb2Mvc3lzL2tlcm5lbC9yZWFsLXJvb3QtZGV2LCBlLmcuCisKKyAgIyBlY2hvIDB4MzAxID4vcHJvYy9zeXMva2VybmVsL3JlYWwtcm9vdC1kZXYKKworTm90ZSB0aGF0IHRoZSBtZWNoYW5pc20gaXMgaW5jb21wYXRpYmxlIHdpdGggTkZTIGFuZCBzaW1pbGFyIGZpbGUKK3N5c3RlbXMuCisKK1RoaXMgb2xkLCBkZXByZWNhdGVkIG1lY2hhbmlzbSBpcyBjb21tb25seSBjYWxsZWQgImNoYW5nZV9yb290Iiwgd2hpbGUKK3RoZSBuZXcsIHN1cHBvcnRlZCBtZWNoYW5pc20gaXMgY2FsbGVkICJwaXZvdF9yb290Ii4KKworCitSZXNvdXJjZXMKKy0tLS0tLS0tLQorCitbMV0gQWxtZXNiZXJnZXIsIFdlcm5lcjsgIkJvb3RpbmcgTGludXg6IFRoZSBIaXN0b3J5IGFuZCB0aGUgRnV0dXJlIgorICAgIGh0dHA6Ly93d3cuYWxtZXNiZXJnZXIubmV0L2N2L3BhcGVycy9vbHMyay05LnBzLmd6CitbMl0gbmV3bGliIHBhY2thZ2UgKGV4cGVyaW1lbnRhbCksIHdpdGggaW5pdHJkIGV4YW1wbGUKKyAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL25ld2xpYi8KK1szXSBCcm91d2VyLCBBbmRyaWVzOyAidXRpbC1saW51eDogTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgZm9yIExpbnV4IgorICAgIGZ0cDovL2Z0cC53aW4udHVlLm5sL3B1Yi9saW51eC1sb2NhbC91dGlscy91dGlsLWxpbnV4LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9hbWlqb3kudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hbWlqb3kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOGIyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2FtaWpveS50eHQKQEAgLTAsMCArMSwxODQgQEAKK0FtaWdhIDQtam95c3RpY2sgcGFycG9ydCBleHRlbnNpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1BhcmFsbGVsIHBvcnQgcGluczoKKworICgyKSAtIFVwMQkgKDYpIC0gVXAyCisgKDMpIC0gRG93bjEJICg3KSAtIERvd24yCisgKDQpIC0gTGVmdDEJICg4KSAtIExlZnQyCisgKDUpIC0gUmlnaHQxCSAoOSkgLSBSaWdodDIKKygxMykgLSBGaXJlMQkoMTEpIC0gRmlyZTIKKygxOCkgLSBHbmQxCSgxOCkgLSBHbmQyCisKK0FtaWdhIGRpZ2l0YWwgam95c3RpY2sgcGlub3V0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorKDEpIC0gVXAKKygyKSAtIERvd24KKygzKSAtIExlZnQKKyg0KSAtIFJpZ2h0CisoNSkgLSBuL2MKKyg2KSAtIEZpcmUgYnV0dG9uCisoNykgLSArNVYgKDUwbUEpCisoOCkgLSBHbmQKKyg5KSAtIFRodW1iIGJ1dHRvbgorCitBbWlnYSBtb3VzZSBwaW5vdXQKK35+fn5+fn5+fn5+fn5+fn5+fgorKDEpIC0gVi1wdWxzZQorKDIpIC0gSC1wdWxzZQorKDMpIC0gVlEtcHVsc2UKKyg0KSAtIEhRLXB1bHNlCisoNSkgLSBNaWRkbGUgYnV0dG9uCisoNikgLSBMZWZ0IGJ1dHRvbgorKDcpIC0gKzVWICg1MG1BKQorKDgpIC0gR25kCisoOSkgLSBSaWdodCBidXR0b24KKworQW1pZ2EgYW5hbG9nIGpveXN0aWNrIHBpbm91dAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorKDEpIC0gVG9wIGJ1dHRvbgorKDIpIC0gVG9wMiBidXR0b24KKygzKSAtIFRyaWdnZXIgYnV0dG9uCisoNCkgLSBUaHVtYiBidXR0b24KKyg1KSAtIEFuYWxvZyBYCisoNikgLSBuL2MKKyg3KSAtICs1ViAoNTBtQSkKKyg4KSAtIEduZAorKDkpIC0gQW5hbG9nIFkKKworQW1pZ2EgbGlnaHRwZW4gcGlub3V0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKygxKSAtIG4vYworKDIpIC0gbi9jCisoMykgLSBuL2MKKyg0KSAtIG4vYworKDUpIC0gVG91Y2ggYnV0dG9uCisoNikgLSAvQmVhbXRyaWdnZXIKKyg3KSAtICs1ViAoNTBtQSkKKyg4KSAtIEduZAorKDkpIC0gU3R5bHVzIGJ1dHRvbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05BTUUgICAgIHJldiBBRERSIHR5cGUgY2hpcCAgIERlc2NyaXB0aW9uCitKT1kwREFUICAgICAgMDBBICAgUiAgIERlbmlzZSBKb3lzdGljay1tb3VzZSAwIGRhdGEgKGxlZnQgdmVydCwgaG9yaXopCitKT1kxREFUICAgICAgMDBDICAgUiAgIERlbmlzZSBKb3lzdGljay1tb3VzZSAxIGRhdGEgKHJpZ2h0IHZlcnQsaG9yaXopCisKKyAgICAgICAgVGhlc2UgYWRkcmVzc2VzIGVhY2ggcmVhZCBhIDE2IGJpdCByZWdpc3Rlci4gVGhlc2UgaW4gdHVybgorICAgICAgICBhcmUgbG9hZGVkIGZyb20gdGhlIE1EQVQgc2VyaWFsIHN0cmVhbSBhbmQgYXJlIGNsb2NrZWQgaW4gb24KKyAgICAgICAgdGhlIHJpc2luZyBlZGdlIG9mIFNDTEsuIE1MRCBvdXRwdXQgaXMgdXNlZCB0byBwYXJhbGxlbCBsb2FkCisgICAgICAgIHRoZSBleHRlcm5hbCBwYXJhbGxlbC10by1zZXJpYWwgY29udmVydGVyLlRoaXMgaW4gdHVybiBpcworICAgICAgICBsb2FkZWQgd2l0aCB0aGUgNCBxdWFkcmF0dXJlIGlucHV0cyBmcm9tIGVhY2ggb2YgdHdvIGdhbWUKKyAgICAgICAgY29udHJvbGxlciBwb3J0cyAoOCB0b3RhbCkgcGx1cyA4IG1pc2NlbGxhbmVvdXMgY29udHJvbCBiaXRzCisgICAgICAgIHdoaWNoIGFyZSBuZXcgZm9yIExJU0EgYW5kIGNhbiBiZSByZWFkIGluIHVwcGVyIDggYml0cyBvZgorICAgICAgICBMSVNBSUQuCisgICAgICAgIFJlZ2lzdGVyIGJpdHMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgIE1vdXNlIGNvdW50ZXIgdXNhZ2UgKHBpbnMgIDEsMyA9WWNsb2NrLCBwaW5zIDIsNCA9WGNsb2NrKQorCisgICAgQklUIyAgMTUgIDE0ICAxMyAgMTIgIDExICAxMCAgMDkgIDA4ICAgICAwNyAgMDYgIDA1ICAwNCAgMDMgIDAyICAwMSAgMDAKK0pPWTBEQVQgICBZNyAgWTYgIFk1ICBZNCAgWTMgIFkyICBZMSAgWTAgICAgIFg3ICBYNiAgWDUgIFg0ICBYMyAgWDIgIFgxICBYMAorSk9ZMURBVCAgIFk3ICBZNiAgWTUgIFk0ICBZMyAgWTIgIFkxICBZMCAgICAgWDcgIFg2ICBYNSAgWDQgIFgzICBYMiAgWDEgIFgwCisKKyAgICAgICAgMD1MRUZUIENPTlRST0xMRVIgUEFJUiwgMT1SSUdIVCBDT05UUk9MTEVSIFBBSVIuCisgICAgICAgICg0IGNvdW50ZXJzIHRvdGFsKS5UaGUgYml0IHVzYWdlIGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0CisgICAgICAgIGFkZHJlc3NlcyBpcyBzaG93biBiZWxvdy4gRWFjaCA2IGJpdCBjb3VudGVyIChZNy1ZMixYNy1YMikgaXMKKyAgICAgICAgY2xvY2tlZCBieSAyIG9mIHRoZSBzaWduYWxzIGlucHV0IGZyb20gdGhlIG1vdXNlIHNlcmlhbAorICAgICAgICBzdHJlYW0uIFN0YXJ0aW5nIHdpdGggZmlyc3QgYml0IHJlY2l2ZWQ6CisKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCBTZXJpYWwgfCBCaXQgTmFtZSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAwICAgIHwgTTBIICAgICAgfCBKT1kwREFUIEhvcml6b250YWwgQ2xvY2sgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgIDEgICAgfCBNMEhRICAgICB8IEpPWTBEQVQgSG9yaXpvbnRhbCBDbG9jayAocXVhZHJhdHVyZSkgICB8CisgICAgICAgICB8ICAgMiAgICB8IE0wViAgICAgIHwgSk9ZMERBVCBWZXJ0aWNhbCBDbG9jayAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAzICAgIHwgTTBWUSAgICAgfCBKT1kwREFUIFZlcnRpY2FsIENsb2NrICAocXVhZHJhdHVyZSkgICAgfAorICAgICAgICAgfCAgIDQgICAgfCBNMVYgICAgICB8IEpPWTFEQVQgSG9yaXpvbnRhbGwgQ2xvY2sgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgNSAgICB8IE0xVlEgICAgIHwgSk9ZMURBVCBIb3Jpem9udGFsbCBDbG9jayAocXVhZHJhdHVyZSkgIHwKKyAgICAgICAgIHwgICA2ICAgIHwgTTFWICAgICAgfCBKT1kxREFUIFZlcnRpY2FsIENsb2NrICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgIDcgICAgfCBNMVZRICAgICB8IEpPWTFEQVQgVmVydGljYWwgQ2xvY2sgKHF1YWRyYXR1cmUpICAgICB8CisgICAgICAgICArLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgICAgICAgQml0cyAxIGFuZCAwIG9mIGVhY2ggY291bnRlciAoWTEtWTAsWDEtWDApIG1heSBiZQorICAgICAgICAgcmVhZCB0byBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoZSByZWxhdGVkIGlucHV0IHNpZ25hbCBwYWlyLgorICAgICAgICAgVGhpcyBhbGxvd3MgdGhlc2UgcGlucyB0byBkb3VibGUgYXMgam95c3RpY2sgc3dpdGNoIGlucHV0cy4KKyAgICAgICAgIEpveXN0aWNrIHN3aXRjaCBjbG9zdXJlcyBjYW4gYmUgZGVjaXBoZXJlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8IERpcmVjdGlvbnMgfCBQaW4jIHwgQ291bnRlciBiaXRzICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8IEZvcndhcmQgICAgfCAgMSAgIHwgWTEgeG9yIFkwIChCSVQjMDkgeG9yIEJJVCMwOCkgICB8CisgICAgICAgICB8IExlZnQgICAgICAgfCAgMyAgIHwgWTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IEJhY2sgICAgICAgfCAgMiAgIHwgWDEgeG9yIFgwIChCSVQjMDEgeG9yIEJJVCMwMCkgICB8CisgICAgICAgICB8IFJpZ2h0ICAgICAgfCAgNCAgIHwgWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkFNRSAgICAgIHJldiBBRERSIHR5cGUgY2hpcCAgICBEZXNjcmlwdGlvbgorSk9ZVEVTVCAgICAgICAwMzYgICBXICAgRGVuaXNlICBXcml0ZSB0byBhbGwgNCAgam95c3RpY2stbW91c2UgY291bnRlcnMgYXQgb25jZS4KKworICAgICAgICAgICAgICAgICAgTW91c2UgY291bnRlciB3cml0ZSB0ZXN0IGRhdGE6CisgICAgIEJJVCMgIDE1ICAxNCAgMTMgIDEyICAxMSAgMTAgIDA5ICAwOCAgICAgMDcgIDA2ICAwNSAgMDQgIDAzICAwMiAgMDEgIDAwCisgIEpPWXhEQVQgIFk3ICBZNiAgWTUgIFk0ICBZMyAgWTIgIHh4ICB4eCAgICAgWDcgIFg2ICBYNSAgWDQgIFgzICBYMiAgeHggIHh4CisgIEpPWXhEQVQgIFk3ICBZNiAgWTUgIFk0ICBZMyAgWTIgIHh4ICB4eCAgICAgWDcgIFg2ICBYNSAgWDQgIFgzICBYMiAgeHggIHh4CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkFNRSAgICByZXYgQUREUiB0eXBlIGNoaXAgICBEZXNjcmlwdGlvbgorUE9UMERBVCAgaCAgMDEyICAgUiAgIFBhdWxhICBQb3QgY291bnRlciBkYXRhIGxlZnQgcGFpciAodmVydCwgaG9yaXopCitQT1QxREFUICBoICAwMTQgICBSICAgUGF1bGEgIFBvdCBjb3VudGVyIGRhdGEgcmlnaHQgcGFpciAodmVydCxob3JpeikKKworICAgICAgICBUaGVzZSBhZGRyZXNzZXMgZWFjaCByZWFkIGEgcGFpciBvZiA4IGJpdCBwb3QgY291bnRlcnMuCisgICAgICAgICg0IGNvdW50ZXJzIHRvdGFsKS4gVGhlIGJpdCBhc3NpZ25tZW50IGZvciBib3RoCisgICAgICAgIGFkZHJlc3NlcyBpcyBzaG93biBiZWxvdy4gVGhlIGNvdW50ZXJzIGFyZSBzdG9wcGVkIGJ5IHNpZ25hbHMKKyAgICAgICAgZnJvbSAyIGNvbnRyb2xsZXIgY29ubmVjdG9ycyAobGVmdC1yaWdodCkgd2l0aCAyIHBpbnMgZWFjaC4KKworICBCSVQjICAxNSAgMTQgIDEzICAxMiAgMTEgIDEwICAwOSAgMDggICAgIDA3ICAwNiAgMDUgIDA0ICAwMyAgMDIgIDAxICAwMAorIFJJR0hUICBZNyAgWTYgIFk1ICBZNCAgWTMgIFkyICBZMSAgWTAgICAgIFg3ICBYNiAgWDUgIFg0ICBYMyAgWDIgIFgxICBYMAorICBMRUZUICBZNyAgWTYgIFk1ICBZNCAgWTMgIFkyICBZMSAgWTAgICAgIFg3ICBYNiAgWDUgIFg0ICBYMyAgWDIgIFgxICBYMAorCisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKKyAgICAgICAgIHwgQ09OTkVDVE9SUyAgICAgICAgICAgICAgIHwgUEFVTEEgfAorICAgICAgICAgKy0tLS0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0rCisgICAgICAgICB8IExvYy4gIHwgRGlyLiB8IFN5bSB8IHBpbiB8IHBpbiAgIHwKKyAgICAgICAgICstLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLSstLS0tLS0tKworICAgICAgICAgfCBSSUdIVCB8IFkgICAgfCBSWCAgfCA5ICAgfCAzMyAgICB8CisgICAgICAgICB8IFJJR0hUIHwgWCAgICB8IFJYICB8IDUgICB8IDMyICAgIHwKKyAgICAgICAgIHwgTEVGVCAgfCBZICAgIHwgTFkgIHwgOSAgIHwgMzYgICAgfAorICAgICAgICAgfCBMRUZUICB8IFggICAgfCBMWCAgfCA1ICAgfCAzNSAgICB8CisgICAgICAgICArLS0tLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLSsKKworICAgICAgICAgV2l0aCBub3JtYWwgKE5UU0Mgb3IgUEFMKSBob3Jpei4gbGluZSByYXRlLCB0aGUgcG90cyB3aWxsCisgICAgICAgICBnaXZlIGEgZnVsbCBzY2FsZSAoRkYpIHJlYWRpbmcgd2l0aCBhYm91dCA1MDBrb2htcyBpbiBvbmUKKyAgICAgICAgIGZyYW1lIHRpbWUuIFdpdGggcHJvcG9ydGlvbmFsbHkgZmFzdGVyIGhvcml6IGxpbmUgdGltZXMsCisgICAgICAgICB0aGUgY291bnRlcnMgd2lsbCBjb3VudCBwcm9wb3J0aW9uYWxseSBmYXN0ZXIuCisgICAgICAgICBUaGlzIHNob3VsZCBiZSBub3RlZCB3aGVuIGRvaW5nIHZhcmlhYmxlIGJlYW0gZGlzcGxheXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkFNRSAgIHJldiBBRERSIHR5cGUgY2hpcCAgIERlc2NyaXB0aW9uCitQT1RHTyAgICAgIDAzNCAgIFcgICBQYXVsYSAgUG90IHBvcnQgKDQgYml0KSBiaS1kaXJlY3Rpb24gYW5kIGRhdGEsIGFuZCBwb3QgY291bnRlciBzdGFydC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOQU1FICAgcmV2IEFERFIgdHlwZSBjaGlwICAgRGVzY3JpcHRpb24KK1BPVElOUCAgICAgMDE2ICAgUiAgIFBhdWxhICBQb3QgcGluIGRhdGEgcmVhZAorCisgICAgICAgIFRoaXMgcmVnaXN0ZXIgY29udHJvbHMgYSA0IGJpdCBiaS1kaXJlY3Rpb24gSS9PIHBvcnQKKyAgICAgICAgdGhhdCBzaGFyZXMgdGhlIHNhbWUgNCBwaW5zIGFzIHRoZSA0IHBvdCBjb3VudGVycyBhYm92ZS4KKworICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8IEJJVCMgIHwgRlVOQ1RJT04gfCBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAxNSAgICB8IE9VVFJZICAgIHwgT3V0cHV0IGVuYWJsZSBmb3IgUGF1bGEgcGluIDMzICAgICAgICAgICAgICB8CisgICAgICAgICB8IDE0ICAgIHwgREFUUlkgICAgfCBJL08gZGF0YSBQYXVsYSBwaW4gMzMgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgMTMgICAgfCBPVVRSWCAgICB8IE91dHB1dCBlbmFibGUgZm9yIFBhdWxhIHBpbiAzMiAgICAgICAgICAgICAgfAorICAgICAgICAgfCAxMiAgICB8IERBVFJYICAgIHwgSS9PIGRhdGEgUGF1bGEgcGluIDMyICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IDExICAgIHwgT1VUTFkgICAgfCBPdXQgcHV0IGVuYWJsZSBmb3IgUGF1bGEgcGluIDM2ICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgMTAgICAgfCBEQVRMWSAgICB8IEkvTyBkYXRhIFBhdWxhIHBpbiAzNiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAwOSAgICB8IE9VVExYICAgIHwgT3V0cHV0IGVuYWJsZSBmb3IgUGF1bGEgcGluIDM1ICAgICAgICAgICAgICB8CisgICAgICAgICB8IDA4ICAgIHwgREFUTFggICAgfCBJL08gZGF0YSAgUGF1bGEgcGluIDM1ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgMDctMDEgfCAgIFggICAgICB8IE5vdCB1c2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAwMCAgICB8IFNUQVJUICAgIHwgU3RhcnQgcG90cyAoZHVtcCBjYXBhY2l0b3JzLHN0YXJ0IGNvdW50ZXJzKSB8CisgICAgICAgICArLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2F0YXJpa2JkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI4OTZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKQEAgLTAsMCArMSw3MDkgQEAKK0ludGVsbGlnZW50IEtleWJvYXJkIChpa2JkKSBQcm90b2NvbAorCisKKzEuIEludHJvZHVjdGlvbgorCitUaGUgQXRhcmkgQ29ycC4gSW50ZWxsaWdlbnQgS2V5Ym9hcmQgKGlrYmQpIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGtleWJvYXJkCitjb250cm9sbGVyIHRoYXQgaXMgZmxleGlibGUgZW5vdWdoIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYSB2YXJpZXR5IG9mCitwcm9kdWN0cyB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhlIGtleWJvYXJkLCB3aXRoIGl0cyBtaWNyb2NvbnRyb2xsZXIsCitwcm92aWRlcyBhIGNvbnZlbmllbnQgY29ubmVjdGlvbiBwb2ludCBmb3IgYSBtb3VzZSBhbmQgc3dpdGNoLXR5cGUgam95c3RpY2tzLgorVGhlIGlrYmQgcHJvY2Vzc29yIGFsc28gbWFpbnRhaW5zIGEgdGltZS1vZi1kYXkgY2xvY2sgd2l0aCBvbmUgc2Vjb25kCityZXNvbHV0aW9uLgorVGhlIGlrYmQgaGFzIGJlZW4gZGVzaWduZWQgdG8gYmUgZ2VuZXJhbCBlbm91Z2ggdGhhdCBpdCBjYW4gYmUgdXNlZCB3aXRoIGEKK2FyaWV0eSBvZiBuZXcgY29tcHV0ZXIgcHJvZHVjdHMuIFByb2R1Y3QgdmFyaWF0aW9ucyBpbiBhIG51bWJlciBvZgora2V5c3dpdGNoZXMsIG1vdXNlIHJlc29sdXRpb24sIGV0Yy4gY2FuIGJlIGFjY29tbW9kYXRlZC4KK1RoZSBpa2JkIGNvbW11bmljYXRlcyB3aXRoIHRoZSBtYWluIHByb2Nlc3NvciBvdmVyIGEgaGlnaCBzcGVlZCBiaS1kaXJlY3Rpb25hbAorc2VyaWFsIGludGVyZmFjZS4gSXQgY2FuIGZ1bmN0aW9uIGluIGEgdmFyaWV0eSBvZiBtb2RlcyB0byBmYWNpbGl0YXRlCitkaWZmZXJlbnQgYXBwbGljYXRpb25zIG9mIHRoZSBrZXlib2FyZCwgIGpveXN0aWNrcywgb3IgbW91c2UuIExpbWl0ZWQgdXNlIG9mCit0aGUgY29udHJvbGxlciBpcyBwb3NzaWJsZSBpbiBhcHBsaWNhdGlvbnMgaW4gd2hpY2ggb25seSBhIHVuaWRpcmVjdGlvbmFsCitjb21tdW5pY2F0aW9ucyBtZWRpdW0gaXMgYXZhaWxhYmxlIGJ5IGNhcmVmdWxseSBkZXNpZ25pbmcgdGhlIGRlZmF1bHQgbW9kZXMuCisKKzMuIEtleWJvYXJkCisKK1RoZSBrZXlib2FyZCBhbHdheXMgcmV0dXJucyBrZXkgbWFrZS9icmVhayBzY2FuIGNvZGVzLiBUaGUgaWtiZCBnZW5lcmF0ZXMKK2tleWJvYXJkIHNjYW4gY29kZXMgZm9yIGVhY2gga2V5IHByZXNzIGFuZCByZWxlYXNlLiBUaGUga2V5IHNjYW4gbWFrZSAoa2V5CitjbG9zdXJlKSBjb2RlcyBzdGFydCBhdCAxLCBhbmQgYXJlIGRlZmluZWQgaW4gQXBwZW5kaXggQS4gRm9yIGV4YW1wbGUsIHRoZQorSVNPIGtleSBwb3NpdGlvbiBpbiB0aGUgc2NhbiBjb2RlIHRhYmxlIHNob3VsZCBleGlzdCBldmVuIGlmIG5vIGtleXN3aXRjaAorZXhpc3RzIGluIHRoYXQgcG9zaXRpb24gb24gYSBwYXJ0aWN1bGFyIGtleWJvYXJkLiBUaGUgYnJlYWsgY29kZSBmb3IgZWFjaCBrZXkKK2lzIG9idGFpbmVkIGJ5IE9SaW5nIDB4ODAgd2l0aCB0aGUgbWFrZSBjb2RlLgorCitUaGUgc3BlY2lhbCBjb2RlcyAweEY2IHRocm91Z2ggMHhGRiBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSBhcyBmb2xsb3dzOgorICAgIDB4RjYgICAgICAgICAgICBzdGF0dXMgcmVwb3J0CisgICAgMHhGNyAgICAgICAgICAgIGFic29sdXRlIG1vdXNlIHBvc2l0aW9uIHJlY29yZAorICAgIDB4RjgtMHhGQiAgICAgICByZWxhdGl2ZSBtb3VzZSBwb3NpdGlvbiByZWNvcmRzKGxzYnMgZGV0ZXJtaW5kIGJ5CisgICAgICAgICAgICAgICAgICAgICBtb3VzZSBidXR0b24gc3RhdGVzKQorICAgIDB4RkMgICAgICAgICAgICB0aW1lLW9mLWRheQorICAgIDB4RkQgICAgICAgICAgICBqb3lzdGljayByZXBvcnQgKGJvdGggc3RpY2tzKQorICAgIDB4RkUgICAgICAgICAgICBqb3lzdGljayAwIGV2ZW50CisgICAgMHhGRiAgICAgICAgICAgIGpveXN0aWNrIDEgZXZlbnQKKworVGhlIHR3byBzaGlmdCBrZXlzIHJldHVybiBkaWZmZXJlbnQgc2NhbiBjb2RlcyBpbiB0aGlzIG1vZGUuIFRoZSBFTlRFUiBrZXkKK2FuZCB0aGUgUkVUdXJuIGtleSBhcmUgYWxzbyBkaXN0aW5jdC4KKworNC4gTW91c2UKKworVGhlIG1vdXNlIHBvcnQgc2hvdWxkIGJlIGNhcGFibGUgb2Ygc3VwcG9ydGluZyBhIG1vdXNlIHdpdGggcmVzb2x1dGlvbiBvZgorYXBwcm94aW1hdGVseSAyMDAgY291bnRzIChwaGFzZSBjaGFuZ2VzIG9yICdjbGlja3MnKSBwZXIgaW5jaCBvZiB0cmF2ZWwuIFRoZQorbW91c2Ugc2hvdWxkIGJlIHNjYW5uZWQgYXQgYSByYXRlIHRoYXQgd2lsbCBwZXJtaXQgYWNjdXJhdGUgdHJhY2tpbmcgYXQKK3ZlbG9jaXRpZXMgdXAgdG8gMTAgaW5jaGVzIHBlciBzZWNvbmQuCitUaGUgaWtiZCBjYW4gcmVwb3J0IG1vdXNlIG1vdGlvbiBpbiB0aHJlZSBkaXN0aW5jdGx5IGRpZmZlcmVudCB3YXlzLiBJdCBjYW4KK3JlcG9ydCByZWxhdGl2ZSBtb3Rpb24sIGFic29sdXRlIG1vdGlvbiBpbiBhIGNvb3JkaW5hdGUgc3lzdGVtIG1haW50YWluZWQKK3dpdGhpbiB0aGUgaWtiZCwgb3IgYnkgY29udmVydGluZyBtb3VzZSBtb3Rpb24gaW50byBrZXlib2FyZCBjdXJzb3IgY29udHJvbAora2V5IGVxdWl2YWxlbnRzLgorVGhlIG1vdXNlIGJ1dHRvbnMgY2FuIGJlIHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUgbW91c2Ugb3IgYXMgYWRkaXRpb25hbAora2V5Ym9hcmQga2V5cy4KKworNC4xIFJlbGF0aXZlIFBvc2l0aW9uIFJlcG9ydGluZworCitJbiByZWxhdGl2ZSBwb3NpdGlvbiBtb2RlLCB0aGUgaWtiZCB3aWxsIHJldHVybiByZWxhdGl2ZSBtb3VzZSBwb3NpdGlvbgorcmVjb3JkcyB3aGVuZXZlciBhIG1vdXNlIGV2ZW50IG9jY3Vycy4gQSBtb3VzZSBldmVudCBjb25zaXN0cyBvZiBhIG1vdXNlCitidXR0b24gYmVpbmcgcHJlc3NlZCBvciByZWxlYXNlZCwgb3IgbW90aW9uIGluIGVpdGhlciBheGlzIGV4Y2VlZGluZyBhCitzZXR0YWJsZSB0aHJlc2hvbGQgb2YgbW90aW9uLiBSZWdhcmRsZXNzIG9mIHRoZSB0aHJlc2hvbGQsIGFsbCBiaXRzIG9mCityZXNvbHV0aW9uIGFyZSByZXR1cm5lZCB0byB0aGUgaG9zdCBjb21wdXRlci4KK05vdGUgdGhhdCB0aGUgaWtiZCBtYXkgcmV0dXJuIG1vdXNlIHJlbGF0aXZlIHBvc2l0aW9uIHJlcG9ydHMgd2l0aAorc2lnbmlmaWNhbnRseSBtb3JlIHRoYW4gdGhlIHRocmVzaG9sZCBkZWx0YSB4IG9yIHkuIFRoaXMgbWF5IGhhcHBlbiBzaW5jZSBubworcmVsYXRpdmUgbW91c2UgbW90aW9uIGV2ZW50cyB3aWxsIGJlIGdlbmVyYXRlZDogKGEpIHdoaWxlIHRoZSBrZXlib2FyZCBoYXMKK2JlZW4gJ3BhdXNlZCcgKCB0aGUgZXZlbnQgd2lsbCBiZSBzdG9yZWQgdW50aWwga2V5Ym9hcmQgY29tbXVuaWNhdGlvbnMgaXMKK3Jlc3VtZWQpIChiKSB3aGlsZSBhbnkgZXZlbnQgaXMgYmVpbmcgdHJhbnNtaXR0ZWQuCisKK1RoZSByZWxhdGl2ZSBtb3VzZSBwb3NpdGlvbiByZWNvcmQgaXMgYSB0aHJlZSBieXRlIHJlY29yZCBvZiB0aGUgZm9ybQorKHJlZ2FyZGxlc3Mgb2Yga2V5Ym9hcmQgbW9kZSk6CisgICAgJTExMTExMHh5ICAgICAgICAgICA7IG1vdXNlIHBvc2l0aW9uIHJlY29yZCBmbGFnCisgICAgICAgICAgICAgICAgICAgICAgICA7IHdoZXJlIHkgaXMgdGhlIHJpZ2h0IGJ1dHRvbiBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgeCBpcyB0aGUgbGVmdCBidXR0b24gc3RhdGUKKyAgICBYICAgICAgICAgICAgICAgICAgIDsgZGVsdGEgeCBhcyB0d29zIGNvbXBsZW1lbnQgaW50ZWdlcgorICAgIFkgICAgICAgICAgICAgICAgICAgOyBkZWx0YSB5IGFzIHR3b3MgY29tcGxlbWVudCBpbnRlZ2VyCisKK05vdGUgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGJ1dHRvbiBzdGF0ZSBiaXRzIHNob3VsZCBiZSB2YWxpZCBldmVuIGlmIHRoZQorTU9VU0UgQlVUVE9OIEFDVElPTiBoYXMgc2V0IHRoZSBidXR0b25zIHRvIGFjdCBsaWtlIHBhcnQgb2YgdGhlIGtleWJvYXJkLgorSWYgdGhlIGFjY3VtdWxhdGVkIG1vdGlvbiBiZWZvcmUgdGhlIHJlcG9ydCBwYWNrZXQgaXMgZ2VuZXJhdGVkIGV4Y2VlZHMgdGhlCisrMTI3Li4uLTEyOCByYW5nZSwgdGhlIG1vdGlvbiBpcyBicm9rZW4gaW50byBtdWx0aXBsZSBwYWNrZXRzLgorTm90ZSB0aGF0IHRoZSBzaWduIG9mIHRoZSBkZWx0YSB5IHJlcG9ydGVkIGlzIGEgZnVuY3Rpb24gb2YgdGhlIFkgb3JpZ2luCitzZWxlY3RlZC4KKworNC4yIEFic29sdXRlIFBvc2l0aW9uIHJlcG9ydGluZworCitUaGUgaWtiZCBjYW4gYWxzbyBtYWludGFpbiBhYnNvbHV0ZSBtb3VzZSBwb3NpdGlvbi4gQ29tbWFuZHMgZXhpc3QgZm9yCityZXNldGluZyB0aGUgbW91c2UgcG9zaXRpb24sIHNldHRpbmcgWC9ZIHNjYWxpbmcsIGFuZCBpbnRlcnJvZ2F0aW5nIHRoZQorY3VycmVudCBtb3VzZSBwb3NpdGlvbi4KKworNC4zIE1vdXNlIEN1cnNvciBLZXkgTW9kZQorCitUaGUgaWtiZCBjYW4gdHJhbnNsYXRlIG1vdXNlIG1vdGlvbiBpbnRvIHRoZSBlcXVpdmFsZW50IGN1cnNvciBrZXlzdHJva2VzLgorVGhlIG51bWJlciBvZiBtb3VzZSBjbGlja3MgcGVyIGtleXN0cm9rZSBpcyBpbmRlcGVuZGVudGx5IHByb2dyYW1tYWJsZSBpbgorZWFjaCBheGlzLiBUaGUgaWtiZCBpbnRlcm5hbGx5IG1haW50YWlucyBtb3VzZSBtb3Rpb24gaW5mb3JtYXRpb24gdG8gdGhlCitoaWdoZXN0IHJlc29sdXRpb24gYXZhaWxhYmxlLCBhbmQgbWVyZWx5IGdlbmVyYXRlcyBhIHBhaXIgb2YgY3Vyc29yIGtleSBldmVudHMKK2ZvciBlYWNoIG11bHRpcGxlIG9mIHRoZSBzY2FsZSBmYWN0b3IuCitNb3VzZSBtb3Rpb24gcHJvZHVjZXMgdGhlIGN1cnNvciBrZXkgbWFrZSBjb2RlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZQorYnJlYWsgY29kZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGN1cnNvciBrZXkuIFRoZSBtb3VzZSBidXR0b25zIHByb2R1Y2Ugc2NhbgorY29kZXMgYWJvdmUgdGhvc2Ugbm9ybWFsbHkgYXNzaWduZWQgZm9yIHRoZSBsYXJnZXN0IGVudmlzaW9uZWQga2V5Ym9hcmQgKGkuZS4KK0xFRlQ9MHg3NCAmIFJJR0hUPTB4NzUpLgorCis1LiBKb3lzdGljaworCis1LjEgSm95c3RpY2sgRXZlbnQgUmVwb3J0aW5nCisKK0luIHRoaXMgbW9kZSwgdGhlIGlrYmQgZ2VuZXJhdGVzIGEgcmVjb3JkIHdoZXZlciB0aGUgam95c3RpY2sgcG9zaXRpb24gaXMKK2NoYW5nZWQgKGkuZS4gZm9yIGVhY2ggb3BlbmluZyBvciBjbG9zaW5nIG9mIGEgam95c3RpY2sgc3dpdGNoIG9yIHRyaWdnZXIpLgorCitUaGUgam95c3RpY2sgZXZlbnQgcmVjb3JkIGlzIHR3byBieXRlcyBvZiB0aGUgZm9ybToKKyAgICAlMTExMTExMXggICAgICAgICAgIDsgSm95c3RpY2sgZXZlbnQgbWFya2VyCisgICAgICAgICAgICAgICAgICAgICAgICA7IHdoZXJlIHggaXMgSm95c3RpY2sgMCBvciAxCisgICAgJXgwMDB5eXl5ICAgICAgICAgICA7IHdoZXJlIHl5eXkgaXMgdGhlIHN0aWNrIHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCB4IGlzIHRoZSB0cmlnZ2VyCisKKzUuMiBKb3lzdGljayBJbnRlcnJvZ2F0aW9uCisKK1RoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBqb3lzdGljayBwb3J0cyBtYXkgYmUgaW50ZXJyb2dhdGVkIGF0IGFueSB0aW1lIGluCit0aGlzIG1vZGUgYnkgc2VuZGluZyBhbiAnSW50ZXJyb2dhdGUgSm95c3RpY2snIGNvbW1hbmQgdG8gdGhlIGlrYmQuCisKK1RoZSBpa2JkIHJlc3BvbnNlIHRvIGpveXN0aWNrIGludGVycm9nYXRpb24gaXMgYSB0aHJlZSBieXRlIHJlcG9ydCBvZiB0aGUgZm9ybQorICAgIDB4RkQgICAgICAgICAgICAgICAgOyBqb3lzdGljayByZXBvcnQgaGVhZGVyCisgICAgJXgwMDB5eXl5ICAgICAgICAgICA7IEpveXN0aWNrIDAKKyAgICAleDAwMHl5eXkgICAgICAgICAgIDsgSm95c3RpY2sgMQorICAgICAgICAgICAgICAgICAgICAgICAgOyB3aGVyZSB4IGlzIHRoZSB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCB5eXkgaXMgdGhlIHN0aWNrIHBvc2l0aW9uCisKKzUuMyBKb3lzdGljayBNb25pdG9yaW5nCisKK0EgbW9kZSBpcyBhdmFpbGFibGUgdGhhdCBkZXZvdGVzIG5lYXJseSBhbGwgb2YgdGhlIGtleWJvYXJkIGNvbW11bmljYXRpb25zCit0aW1lIHRvIHJlcG9ydGluZyB0aGUgc3RhdGUgb2YgdGhlIGpveXN0aWNrIHBvcnRzIGF0IGEgdXNlciBzcGVjaWZpYWJsZSByYXRlLgorSXQgcmVtYWlucyBpbiB0aGlzIG1vZGUgdW50aWwgcmVzZXQgb3IgY29tbWFuZGVkIGludG8gYW5vdGhlciBtb2RlLiBUaGUgUEFVU0UKK2NvbW1hbmQgaW4gdGhpcyBtb2RlIG5vdCBvbmx5IHN0b3AgdGhlIG91dHB1dCBidXQgYWxzbyB0ZW1wb3JhcmlseSBzdG9wcworc2Nhbm5pbmcgdGhlIGpveXN0aWNrcyAoc2FtcGxlcyBhcmUgbm90IHF1ZXVlZCkuCisKKzUuNCBGaXJlIEJ1dHRvbiBNb25pdG9yaW5nCisKK0EgbW9kZSBpcyBwcm92aWRlZCB0byBwZXJtaXQgbW9uaXRvcmluZyBhIHNpbmdsZSBpbnB1dCBiaXQgYXQgYSBoaWdoIHJhdGUuIEluCit0aGlzIG1vZGUgdGhlIGlrYmQgbW9uaXRvcnMgdGhlIHN0YXRlIG9mIHRoZSBKb3lzdGljayAxIGZpcmUgYnV0dG9uIGF0IHRoZQorbWF4aW11bSByYXRlIHBlcm1pdHRlZCBieSB0aGUgc2VyaWFsIGNvbW11bmljYXRpb24gY2hhbm5lbC4gVGhlIGRhdGEgaXMgcGFja2VkCis4IGJpdHMgcGVyIGJ5dGUgZm9yIHRyYW5zbWlzc2lvbiB0byB0aGUgaG9zdC4gVGhlIGlrYmQgcmVtYWlucyBpbiB0aGlzIG1vZGUKK3VudGlsIHJlc2V0IG9yIGNvbW1hbmRlZCBpbnRvIGFub3RoZXIgbW9kZS4gVGhlIFBBVVNFIGNvbW1hbmQgaW4gdGhpcyBtb2RlIG5vdAorb25seSBzdG9wcyB0aGUgb3V0cHV0IGJ1dCBhbHNvIHRlbXBvcmFyaWx5IHN0b3BzIHNjYW5uaW5nIHRoZSBidXR0b24gKHNhbXBsZXMKK2FyZSBub3QgcXVldWVkKS4KKworNS41IEpveXN0aWNrIEtleSBDb2RlIE1vZGUKKworVGhlIGlrYmQgbWF5IGJlIGNvbW1hbmRlZCB0byB0cmFuc2xhdGUgdGhlIHVzZSBvZiBlaXRoZXIgam95c3RpY2sgaW50byB0aGUKK2VxdWl2YWxlbnQgY3Vyc29yIGNvbnRyb2wga2V5c3Ryb2tlKHMpLiBUaGUgaWtiZCBwcm92aWRlcyBhIHNpbmdsZSBicmVha3BvaW50Cit2ZWxvY2l0eSBqb3lzdGljayBjdXJzb3IuCitKb3lzdGljayBldmVudHMgcHJvZHVjZSB0aGUgbWFrZSBjb2RlLCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUgYnJlYWsgY29kZQorZm9yIHRoZSBhcHByb3ByaWF0ZSBjdXJzb3IgbW90aW9uIGtleXMuIFRoZSB0cmlnZ2VyIG9yIGZpcmUgYnV0dG9ucyBvZiB0aGUKK2pveXN0aWNrcyBwcm9kdWNlIHBzZXVkbyBrZXkgc2NhbiBjb2RlcyBhYm92ZSB0aG9zZSB1c2VkIGJ5IHRoZSBsYXJnZXN0IGtleQorbWF0cml4IGVudmlzaW9uZWQgKGkuZS4gSk9ZU1RJQ0swPTB4NzQsIEpPWVNUSUNLMT0weDc1KS4KKworNi4gVGltZS1vZi1EYXkgQ2xvY2sKKworVGhlIGlrYmQgYWxzbyBtYWludGFpbnMgYSB0aW1lLW9mLWRheSBjbG9jayBmb3IgdGhlIHN5c3RlbS4gQ29tbWFuZHMgYXJlCithdmFpbGFibGUgdG8gc2V0IGFuZCBpbnRlcnJvZ2F0ZSB0aGUgdGltZXItb2YtZGF5IGNsb2NrLiBUaW1lLWtlZXBpbmcgaXMKK21haW50YWluZWQgZG93biB0byBhIHJlc29sdXRpb24gb2Ygb25lIHNlY29uZC4KKworNy4gU3RhdHVzIElucXVpcmllcworCitUaGUgY3VycmVudCBzdGF0ZSBvZiBpa2JkIG1vZGVzIGFuZCBwYXJhbWV0ZXJzIG1heSBiZSBmb3VuZCBieSBzZW5kaW5nIHN0YXR1cworaW5xdWlyeSBjb21tYW5kcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGlrYmQgc2V0IGNvbW1hbmRzLgorCis4LiBQb3dlci1VcCBNb2RlCisKK1RoZSBrZXlib2FyZCBjb250cm9sbGVyIHdpbGwgcGVyZm9ybSBhIHNpbXBsZSBzZWxmLXRlc3Qgb24gcG93ZXItdXAgdG8gZGV0ZWN0CittYWpvciBjb250cm9sbGVyIGZhdWx0cyAoUk9NIGNoZWNrc3VtIGFuZCBSQU0gdGVzdCkgYW5kIHN1Y2ggdGhpbmdzIGFzIHN0dWNrCitrZXlzLiBBbnkga2V5cyBkb3duIGF0IHBvd2VyLXVwIGFyZSBwcmVzdW1lZCB0byBiZSBzdHVjaywgYW5kIHRoZWlyIEJSRUFLCisoc2ljKSBjb2RlIGlzIHJldHVybmVkICh3aGljaCB3aXRob3V0IHRoZSBwcmVjZWRpbmcgTUFLRSBjb2RlIGlzIGEgZmxhZyBmb3IgYQora2V5Ym9hcmQgZXJyb3IpLiBJZiB0aGUgY29udHJvbGxlciBzZWxmLXRlc3QgY29tcGxldGVzIHdpdGhvdXQgZXJyb3IsIHRoZSBjb2RlCisweEYwIGlzIHJldHVybmVkLiAoVGhpcyBjb2RlIHdpbGwgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdmVyc2lvbi9ybGVhc2Ugb2YKK3RoZSBpa2JkIGNvbnRyb2xsZXIuIFRoZSBmaXJzdCByZWxlYXNlIG9mIHRoZSBpa2JkIGlzIHZlcnNpb24gMHhGMCwgc2hvdWxkCit0aGVyZSBiZSBhIHNlY29uZCByZWxlYXNlIGl0IHdpbGwgYmUgMHhGMSwgYW5kIHNvIG9uLikKK1RoZSBpa2JkIGRlZmF1bHRzIHRvIGEgbW91c2UgcG9zaXRpb24gcmVwb3J0aW5nIHdpdGggdGhyZXNob2xkIG9mIDEgdW5pdCBpbgorZWl0aGVyIGF4aXMgYW5kIHRoZSBZPTAgb3JpZ2luIGF0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbiwgYW5kIGpveXN0aWNrIGV2ZW50CityZXBvcnRpbmcgbW9kZSBmb3Igam95c3RpY2sgMSwgd2l0aCBib3RoIGJ1dHRvbnMgYmVpbmcgbG9naWNhbGx5IGFzc2lnbmVkIHRvCit0aGUgbW91c2UuIEFmdGVyIGFueSBqb3lzdGljayBjb21tYW5kLCB0aGUgaWtiZCBhc3N1bWVzIHRoYXQgam95c3RpY2tzIGFyZQorY29ubmVjdGVkIHRvIGJvdGggSm95c3RpY2swIGFuZCBKb3lzdGljazEuIEFueSBtb3VzZSBjb21tYW5kIChleGNlcHQgTU9VU0UKK0RJU0FCTEUpIHRoZW4gY2F1c2VzIHBvcnQgMCB0byBhZ2FpbiBiZSBzY2FubmVkIGFzIGlmIGl0IHdlcmUgYSBtb3VzZSwgYW5kCitib3RoIGJ1dHRvbnMgYXJlIGxvZ2ljYWxseSBjb25uZWN0ZWQgdG8gaXQuIElmIGEgbW91c2UgZGlhYmxlIGNvbW1hbmQgaXMKK3JlY2VpdmVkIHdoaWxlIHBvcnQgMCBpcyBwcmVzdW1lZCB0byBiZSBhIG1vdXNlLCB0aGUgYnV0dG9uIGlzIGxvZ2ljYWxseQorYXNzaWduZWQgdG8gSm95c3RpY2sxICggdW50aWwgdGhlIG1vdXNlIGlzIHJlZW5hYmxlZCBieSBhbm90aGVyIG1vdXNlIGNvbW1hbmQpLgorCis5LiBpa2JkIENvbW1hbmQgU2V0CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgaWtiZC4gQ29tbWFuZAorY29kZXMgKHN1Y2ggYXMgMHgwMCkgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgc2hvdWxkIHBlcmZvcm0gbm8gb3BlcmF0aW9uCisoTk9QcykuCisKKzkuMSBSRVNFVAorCisgICAgMHg4MAorICAgIDB4MDEKKworTi5CLiBUaGUgUkVTRVQgY29tbWFuZCBpcyB0aGUgb25seSB0d28gYnl0ZSBjb21tYW5kIHVuZGVyc3Rvb2QgYnkgdGhlIGlrYmQuCitBbnkgYnl0ZSBmb2xsb3dpbmcgYW4gMHg4MCBjb21tYW5kIGJ5dGUgb3RoZXIgdGhhbiAweDAxIGlzIGlnbm9yZWQgKGFuZCBjYXVzZXMKK3RoZSAweDgwIHRvIGJlIGlnbm9yZWQpLgorQSByZXNldCBtYXkgYWxzbyBiZSBjYXVzZWQgYnkgc2VuZGluZyBhIGJyZWFrIGxhc3RpbmcgYXQgbGVhc3QgMjAwbVMgdG8gdGhlCitpa2JkLgorRXhlY3V0aW5nIHRoZSBSRVNFVCBjb21tYW5kIHJldHVybnMgdGhlIGtleWJvYXJkIHRvIGl0cyBkZWZhdWx0IChwb3dlci11cCkKK21vZGUgYW5kIHBhcmFtZXRlciBzZXR0aW5ncy4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZSB0aW1lLW9mLWRheSBjbG9jay4KK1RoZSBSRVNFVCBjb21tYW5kIG9yIGZ1bmN0aW9uIGNhdXNlcyB0aGUgaWtiZCB0byBwZXJmb3JtIGEgc2ltcGxlIHNlbGYtdGVzdC4KK0lmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSBpa2JkIHdpbGwgc2VuZCB0aGUgY29kZSBvZiAweEYwIHdpdGhpbiAzMDBtUworb2YgcmVjZWlwdCBvZiB0aGUgUkVTRVQgY29tbWFuZCAob3IgdGhlIGVuZCBvZiB0aGUgYnJlYWssIG9yIHBvd2VyLXVwKS4gVGhlCitpa2JkIHdpbGwgdGhlbiBzY2FuIHRoZSBrZXkgbWF0cml4IGZvciBhbnkgc3R1Y2sgKGNsb3NlZCkga2V5cy4gQW55IGtleXMgZm91bmQKK2Nsb3NlZCB3aWxsIGNhdXNlIHRoZSBicmVhayBzY2FuIGNvZGUgdG8gYmUgZ2VuZXJhdGVkICh0aGUgYnJlYWsgY29kZSBhcnJpdmluZword2l0aG91dCBiZWluZyBwcmVjZWRlZCBieSB0aGUgbWFrZSBjb2RlIGlzIGEgZmxhZyBmb3IgYSBrZXkgbWF0cml4IGVycm9yKS4KKworOS4yLiBTRVQgTU9VU0UgQlVUVE9OIEFDVElPTgorCisgICAgMHgwNworICAgICUwMDAwMG1zcyAgICAgICAgICAgOyBtb3VzZSBidXR0b24gYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgIChtIGlzIHByZXN1bWVkID0gMSB3aGVuIGluIE1PVVNFIEtFWUNPREUgbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgbXNzPTB4eSwgbW91c2UgYnV0dG9uIHByZXNzIG9yIHJlbGVhc2UgY2F1c2VzIG1vdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA7ICBwb3NpdGlvbiByZXBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgIHdoZXJlIHk9MSwgbW91c2Uga2V5IHByZXNzIGNhdXNlcyBhYnNvbHV0ZSByZXBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgIGFuZCB4PTEsIG1vdXNlIGtleSByZWxlYXNlIGNhdXNlcyBhYnNvbHV0ZSByZXBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgbXNzPTEwMCwgbW91c2UgYnV0dG9ucyBhY3QgbGlrZSBrZXlzIAorCitUaGlzIGNvbW1hbmQgc2V0cyBob3cgdGhlIGlrYmQgc2hvdWxkIHRyZWF0IHRoZSBidXR0b25zIG9uIHRoZSBtb3VzZS4gVGhlCitkZWZhdWx0IG1vdXNlIGJ1dHRvbiBhY3Rpb24gbW9kZSBpcyAlMDAwMDAwMDAsIHRoZSBidXR0b25zIGFyZSB0cmVhdGVkIGFzIHBhcnQKK29mIHRoZSBtb3VzZSBsb2dpY2FsbHkuCitXaGVuIGJ1dHRvbnMgYWN0IGxpa2Uga2V5cywgTEVGVD0weDc0ICYgUklHSFQ9MHg3NS4KKworOS4zIFNFVCBSRUxBVElWRSBNT1VTRSBQT1NJVElPTiBSRVBPUlRJTkcKKworICAgIDB4MDgKKworU2V0IHJlbGF0aXZlIG1vdXNlIHBvc2l0aW9uIHJlcG9ydGluZy4gKERFRkFVTFQpIE1vdXNlIHBvc2l0aW9uIHBhY2tldHMgYXJlCitnZW5lcmF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGlrYmQgd2hlbmV2ZXIgbW90aW9uIGV4Y2VlZHMgdGhlIHNldGFibGUKK3RocmVzaG9sZCBpbiBlaXRoZXIgYXhpcyAoc2VlIFNFVCBNT1VTRSBUSFJFU0hPTEQpLiBEZXBlbmRpbmcgdXBvbiB0aGUgbW91c2UKK2tleSBtb2RlLCBtb3VzZSBwb3NpdGlvbiByZXBvcnRzIG1heSBhbHNvIGJlIGdlbmVyYXRlZCB3aGVuIGVpdGhlciBtb3VzZQorYnV0dG9uIGlzIHByZXNzZWQgb3IgcmVsZWFzZWQuIE90aGVyd2lzZSB0aGUgbW91c2UgYnV0dG9ucyBiZWhhdmUgYXMgaWYgdGhleQord2VyZSBrZXlib2FyZCBrZXlzLgorCis5LjQgU0VUIEFCU09MVVRFIE1PVVNFIFBPU0lUSU9OSU5HCisKKyAgICAweDA5CisgICAgWE1TQiAgICAgICAgICAgICAgICA7IFggbWF4aW11bSAoaW4gc2NhbGVkIG1vdXNlIGNsaWNrcykKKyAgICBYTFNCCisgICAgWU1TQiAgICAgICAgICAgICAgICA7IFkgbWF4aW11bSAoaW4gc2NhbGVkIG1vdXNlIGNsaWNrcykKKyAgICBZTFNCCisJCitTZXQgYWJzb2x1dGUgbW91c2UgcG9zaXRpb24gbWFpbnRlbmFuY2UuIFJlc2V0cyB0aGUgaWtiZCBtYWludGFpbmVkIFggYW5kIFkKK2Nvb3JkaW5hdGVzLgorSW4gdGhpcyBtb2RlLCB0aGUgdmFsdWUgb2YgdGhlIGludGVybmFsbHkgbWFpbnRhaW5lZCBjb29yZGluYXRlcyBkb2VzIE5PVCB3cmFwCitiZXR3ZWVuIDAgYW5kIGxhcmdlIHBvc2l0aXZlIG51bWJlcnMuIEV4Y2VzcyBtb3Rpb24gYmVsb3cgMCBpcyBpZ25vcmVkLiBUaGUKK2NvbW1hbmQgc2V0cyB0aGUgbWF4aW11bSBwb3NpdGl2ZSB2YWx1ZSB0aGF0IGNhbiBiZSBhdHRhaW5lZCBpbiB0aGUgc2NhbGVkCitjb29yZGluYXRlIHN5c3RlbS4gTW90aW9uIGJleW9uZCB0aGF0IHZhbHVlIGlzIGFsc28gaWdub3JlZC4KKworOS41IFNFVCBNT1VTRSBLRVlDT0RFIE1PU0UKKworICAgIDB4MEEKKyAgICBkZWx0YXggICAgICAgICAgICAgIDsgZGlzdGFuY2UgaW4gWCBjbGlja3MgdG8gcmV0dXJuIChMRUZUKSBvciAoUklHSFQpCisgICAgZGVsdGF5ICAgICAgICAgICAgICA7IGRpc3RhbmNlIGluIFkgY2xpY2tzIHRvIHJldHVybiAoVVApIG9yIChET1dOKQorCitTZXQgbW91c2UgbW9uaXRvcmluZyByb3V0aW5lcyB0byByZXR1cm4gY3Vyc29yIG1vdGlvbiBrZXljb2RlcyBpbnN0ZWFkIG9mCitlaXRoZXIgUkVMQVRJVkUgb3IgQUJTT0xVVEUgbW90aW9uIHJlY29yZHMuIFRoZSBpa2JkIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlCitjdXJzb3Iga2V5Y29kZSBhZnRlciBtb3VzZSB0cmF2ZWwgZXhjZWVkaW5nIHRoZSB1c2VyIHNwZWNpZmllZCBkZWx0YXMgaW4KK2VpdGhlciBheGlzLiBXaGVuIHRoZSBrZXlib2FyZCBpcyBpbiBrZXkgc2NhbiBjb2RlIG1vZGUsIG1vdXNlIG1vdGlvbiB3aWxsCitjYXVzZSB0aGUgbWFrZSBjb2RlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBicmVhayBjb2RlLiBOb3RlIHRoYXQgdGhpcworY29tbWFuZCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIG1vdXNlIG1vdGlvbiBvcmlnaW4uCisKKzkuLjYgU0VUIE1PVVNFIFRIUkVTSE9MRAorCisgICAgMHgwQgorICAgIFggICAgICAgICAgICAgICAgICAgOyB4IHRocmVzaG9sZCBpbiBtb3VzZSB0aWNrcyAocG9zaXRpdmUgaW50ZWdlcnMpCisgICAgWSAgICAgICAgICAgICAgICAgICA7IHkgdGhyZXNob2xkIGluIG1vdXNlIHRpY2tzIChwb3NpdGl2ZSBpbnRlZ2VycykKKworVGhpcyBjb21tYW5kIHNldHMgdGhlIHRocmVzaG9sZCBiZWZvcmUgYSBtb3VzZSBldmVudCBpcyBnZW5lcmF0ZWQuIE5vdGUgdGhhdAoraXQgZG9lcyBOT1QgYWZmZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBkYXRhIHJldHVybmVkIHRvIHRoZSBob3N0LiBUaGlzCitjb21tYW5kIGlzIHZhbGlkIG9ubHkgaW4gUkVMQVRJVkUgTU9VU0UgUE9TSVRJT05JTkcgbW9kZS4gVGhlIHRocmVzaG9sZHMKK2RlZmF1bHQgdG8gMSBhdCBSRVNFVCAob3IgcG93ZXItdXApLgorCis5LjcgU0VUIE1PVVNFIFNDQUxFCisKKyAgICAweDBDCisgICAgWCAgICAgICAgICAgICAgICAgICA7IGhvcml6b250YWwgbW91c2UgdGlja3MgcGVyIGludGVybmVsIFgKKyAgICBZICAgICAgICAgICAgICAgICAgIDsgdmVydGljYWwgbW91c2UgdGlja3MgcGVyIGludGVybmVsIFkKKworVGhpcyBjb21tYW5kIHNldHMgdGhlIHNjYWxlIGZhY3RvciBmb3IgdGhlIEFCU09MVVRFIE1PVVNFIFBPU0lUSU9OSU5HIG1vZGUuCitJbiB0aGlzIG1vZGUsIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1vdXNlIHBoYXNlIGNoYW5nZXMgKCdjbGlja3MnKSBtdXN0CitvY2N1ciBiZWZvcmUgdGhlIGludGVybmFsbHkgbWFpbnRhaW5lZCBjb29yZGluYXRlIGlzIGNoYW5nZWQgYnkgb25lCisoaW5kZXBlbmRlbnRseSBzY2FsZWQgZm9yIGVhY2ggYXhpcykuIFJlbWVtYmVyIHRoYXQgdGhlIG1vdXNlIHBvc2l0aW9uCitpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb25seSBieSBpbnRlcnJvZ2F0aW5nIHRoZSBpa2JkIGluIHRoZSBBQlNPTFVURSBNT1VTRQorUE9TSVRJT05JTkcgbW9kZSB1bmxlc3MgdGhlIGlrYmQgaGFzIGJlZW4gY29tbWFuZGVkIHRvIHJlcG9ydCBvbiBidXR0b24gcHJlc3MKK29yIHJlbGVhc2UgKHNlZSBTRVQgTU9TRSBCVVRUT04gQUNUSU9OKS4KKworOS44IElOVEVSUk9HQVRFIE1PVVNFIFBPU0lUSU9OCisKKyAgICAweDBECisgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDB4RjcgICAgICAgOyBhYnNvbHV0ZSBtb3VzZSBwb3NpdGlvbiBoZWFkZXIKKyAgICBCVVRUT05TCisgICAgICAgICAgICAwMDAwZGNiYSAgIDsgd2hlcmUgYSBpcyByaWdodCBidXR0b24gZG93biBzaW5jZSBsYXN0IGludGVycm9nYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgOyBiIGlzIHJpZ2h0IGJ1dHRvbiB1cCBzaW5jZSBsYXN0CisgICAgICAgICAgICAgICAgICAgICAgIDsgYyBpcyBsZWZ0IGJ1dHRvbiBkb3duIHNpbmNlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgOyBkIGlzIGxlZnQgYnV0dG9uIHVwIHNpbmNlIGxhc3QKKyAgICAgICAgICAgIFhNU0IgICAgICAgOyBYIGNvb3JkaW5hdGUKKyAgICAgICAgICAgIFhMU0IKKyAgICAgICAgICAgIFlNU0IgICAgICAgOyBZIGNvb3JkaW5hdGUKKyAgICAgICAgICAgIFlMU0IKKworVGhlIElOVEVSUk9HQVRFIE1PVVNFIFBPU0lUSU9OIGNvbW1hbmQgaXMgdmFsaWQgd2hlbiBpbiB0aGUgQUJTT0xVVEUgTU9VU0UKK1BPU0lUSU9OSU5HIG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhlIE1PVVNFIEJVVFRPTiBBQ1RJT04uCisKKzkuOSBMT0FEIE1PVVNFIFBPU0lUSU9OCisKKyAgICAweDBFCisgICAgMHgwMCAgICAgICAgICAgICAgICA7IGZpbGxlcgorICAgIFhNU0IgICAgICAgICAgICAgICAgOyBYIGNvb3JkaW5hdGUKKyAgICBYTFNCICAgICAgICAgICAgICAgIDsgKGluIHNjYWxlZCBjb29yZGluYXRlIHN5c3RlbSkKKyAgICBZTVNCICAgICAgICAgICAgICAgIDsgWSBjb29yZGluYXRlCisgICAgWUxTQgorCitUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSB1c2VyIHRvIHByZXNldCB0aGUgaW50ZXJuYWxseSBtYWludGFpbmVkIGFic29sdXRlCittb3VzZSBwb3NpdGlvbi4KKworOS4xMCBTRVQgWT0wIEFUIEJPVFRPTQorCisgICAgMHgwRgorCitUaGlzIGNvbW1hbmQgbWFrZXMgdGhlIG9yaWdpbiBvZiB0aGUgWSBheGlzIHRvIGJlIGF0IHRoZSBib3R0b20gb2YgdGhlCitsb2dpY2FsIGNvb3JkaW5hdGUgc3lzdGVtIGludGVybmVsIHRvIHRoZSBpa2JkIGZvciBhbGwgcmVsYXRpdmUgb3IgYWJzb2x1dGUKK21vdXNlIG1vdGlvbi4gVGhpcyBjYXVzZXMgbW91c2UgbW90aW9uIHRvd2FyZCB0aGUgdXNlciB0byBiZSBuZWdhdGl2ZSBpbiBzaWduCithbmQgYXdheSBmcm9tIHRoZSB1c2VyIHRvIGJlIHBvc2l0aXZlLgorCis5LjExIFNFVCBZPTAgQVQgVE9QCisKKyAgICAweDEwCisKK01ha2VzIHRoZSBvcmlnaW4gb2YgdGhlIFkgYXhpcyB0byBiZSBhdCB0aGUgdG9wIG9mIHRoZSBsb2dpY2FsIGNvb3JkaW5hdGUKK3N5c3RlbSB3aXRoaW4gdGhlIGlrYmQgZm9yIGFsbCByZWxhdGl2ZSBvciBhYnNvbHV0ZSBtb3VzZSBtb3Rpb24uIChERUZBVUxUKQorVGhpcyBjYXVzZXMgbW91c2UgbW90aW9uIHRvd2FyZCB0aGUgdXNlciB0byBiZSBwb3NpdGl2ZSBpbiBzaWduIGFuZCBhd2F5IGZyb20KK3RoZSB1c2VyIHRvIGJlIG5lZ2F0aXZlLgorCis5LjEyIFJFU1VNRQorCisgICAgMHgxMQorCitSZXN1bWUgc2VuZGluZyBkYXRhIHRvIHRoZSBob3N0LiBTaW5jZSBhbnkgY29tbWFuZCByZWNlaXZlZCBieSB0aGUgaWtiZCBhZnRlcgoraXRzIG91dHB1dCBoYXMgYmVlbiBwYXVzZWQgYWxzbyBjYXVzZXMgYW4gaW1wbGljaXQgUkVTVU1FIHRoaXMgY29tbWFuZCBjYW4gYmUKK3Rob3VnaHQgb2YgYXMgYSBOTyBPUEVSQVRJT04gY29tbWFuZC4gSWYgdGhpcyBjb21tYW5kIGlzIHJlY2VpdmVkIGJ5IHRoZSBpa2JkCithbmQgaXQgaXMgbm90IFBBVVNFRCwgaXQgaXMgc2ltcGx5IGlnbm9yZWQuCisKKzkuMTMgRElTQUJMRSBNT1VTRQorCisgICAgMHgxMgorCitBbGwgbW91c2UgZXZlbnQgcmVwb3J0aW5nIGlzIGRpc2FibGVkIChhbmQgc2Nhbm5pbmcgbWF5IGJlIGludGVybmFsbHkKK2Rpc2FibGVkKS4gQW55IHZhbGlkIG1vdXNlIG1vZGUgY29tbWFuZCByZXN1bWVzIG1vdXNlIG1vdGlvbiBtb25pdG9yaW5nLiAoVGhlCit2YWxpZCBtb3VzZSBtb2RlIGNvbW1hbmRzIGFyZSBTRVQgUkVMQVRJVkUgTU9VU0UgUE9TSVRJT04gUkVQT1JUSU5HLCBTRVQKK0FCU09MVVRFIE1PVVNFIFBPU0lUSU9OSU5HLCBhbmQgU0VUIE1PVVNFIEtFWUNPREUgTU9ERS4gKQorTi5CLiBJZiB0aGUgbW91c2UgYnV0dG9ucyBoYXZlIGJlZW4gY29tbWFuZGVkIHRvIGFjdCBsaWtlIGtleWJvYXJkIGtleXMsIHRoaXMKK2NvbW1hbmQgRE9FUyBhZmZlY3QgdGhlaXIgYWN0aW9ucy4KKworOS4xNCBQQVVTRSBPVVRQVVQKKworICAgIDB4MTMKKworU3RvcCBzZW5kaW5nIGRhdGEgdG8gdGhlIGhvc3QgdW50aWwgYW5vdGhlciB2YWxpZCBjb21tYW5kIGlzIHJlY2VpdmVkLiBLZXkKK21hdHJpeCBhY3Rpdml0eSBpcyBzdGlsbCBtb25pdG9yZWQgYW5kIHNjYW4gY29kZXMgb3IgQVNDSUkgY2hhcmFjdGVycyBlbnF1ZXVlZAorKHVwIHRvIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgbWljcm9jb250cm9sbGVyKSB0byBiZSBzZW50IHdoZW4gdGhlIGhvc3QKK2FsbG93cyB0aGUgb3V0cHV0IHRvIGJlIHJlc3VtZWQuIElmIGluIHRoZSBKT1lTVElDSyBFVkVOVCBSRVBPUlRJTkcgbW9kZSwKK2pveXN0aWNrIGV2ZW50cyBhcmUgYWxzbyBxdWV1ZWQuCitNb3VzZSBtb3Rpb24gc2hvdWxkIGJlIGFjY3VtdWxhdGVkIHdoaWxlIHRoZSBvdXRwdXQgaXMgcGF1c2VkLiBJZiB0aGUgaWtiZCBpcworaW4gUkVMQVRJVkUgTU9VU0UgUE9TSVRJT05JTkcgUkVQT1JUSU5HIG1vZGUsIG1vdGlvbiBpcyBhY2N1bXVsYXRlZCBiZXlvbmQgdGhlCitub3JtYWwgdGhyZXNob2xkIGxpbWl0cyB0byBwcm9kdWNlIHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYWNrZXRzIG5lY2Vzc2FyeSBmb3IKK3RyYW5zbWlzc2lvbiB3aGVuIG91dHB1dCBpcyByZXN1bWVkLiBQcmVzc2luZyBvciByZWxlYXNpbmcgZWl0aGVyIG1vdXNlIGJ1dHRvbgorY2F1c2VzIGFueSBhY2N1bXVsYXRlZCBtb3Rpb24gdG8gYmUgaW1tZWRpYXRlbHkgcXVldWVkIGFzIHBhY2tldHMsIGlmIHRoZQorbW91c2UgaXMgaW4gUkVMQVRJVkUgTU9VU0UgUE9TSVRJT04gUkVQT1JUSU5HIG1vZGUuCitCZWNhdXNlIG9mIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgbWljcm9jb250cm9sbGVyIG1lbW9yeSB0aGlzIGNvbW1hbmQgc2hvdWxkCitiZSB1c2VkIHNwYXJpbmdseSwgYW5kIHRoZSBvdXRwdXQgc2hvdWxkIG5vdCBiZSBzaHV0IG9mIGZvciBtb3JlIHRoYW4gPHRiZD4KK21pbGxpc2Vjb25kcyBhdCBhIHRpbWUuCitUaGUgb3V0cHV0IGlzIHN0b3BwZWQgb25seSBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50ICdldmVuJy4gSWYgdGhlIFBBVVNFCitPVVRQVVQgY29tbWFuZCBpcyByZWNlaXZlZCBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGlwbGUgYnl0ZSByZXBvcnQsIHRoZSBwYWNrZXQKK3dpbGwgc3RpbGwgYmUgdHJhbnNtaXR0ZWQgdG8gY29uY2x1c2lvbiBhbmQgdGhlbiB0aGUgUEFVU0Ugd2lsbCB0YWtlIGVmZmVjdC4KK1doZW4gdGhlIGlrYmQgaXMgaW4gZWl0aGVyIHRoZSBKT1lTVElDSyBNT05JVE9SSU5HIG1vZGUgb3IgdGhlIEZJUkUgQlVUVE9OCitNT05JVE9SSU5HIG1vZGUsIHRoZSBQQVVTRSBPVVRQVVQgY29tbWFuZCBhbHNvIHRlbXBvcmFyaWx5IHN0b3BzIHRoZQorbW9uaXRvcmluZyBwcm9jZXNzIChpLmUuIHRoZSBzYW1wbGVzIGFyZSBub3QgZW5xdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbikuCisKKzAuMTUgU0VUIEpPWVNUSUNLIEVWRU5UIFJFUE9SVElORworCisgICAgMHgxNAorCitFbnRlciBKT1lTVElDSyBFVkVOVCBSRVBPUlRJTkcgbW9kZSAoREVGQVVMVCkuIEVhY2ggb3BlbmluZyBvciBjbG9zdXJlIG9mIGEKK2pveXN0aWNrIHN3aXRjaCBvciB0cmlnZ2VyIGNhdXNlcyBhIGpveXN0aWNrIGV2ZW50IHJlY29yZCB0byBiZSBnZW5lcmF0ZWQuCisKKzkuMTYgU0VUIEpPWVNUSUNLIElOVEVSUk9HQVRJT04gTU9ERQorCisgICAgMHgxNQorCitEaXNhYmxlcyBKT1lTVElDSyBFVkVOVCBSRVBPUlRJTkcuIEhvc3QgbXVzdCBzZW5kIGluZGl2aWR1YWwgSk9ZU1RJQ0sKK0lOVEVSUk9HQVRFIGNvbW1hbmRzIHRvIHNlbnNlIGpveXN0aWNrIHN0YXRlLgorCis5LjE3IEpPWVNUSUNLIElOVEVSUk9HQVRFCisKKyAgICAweDE2CisKK1JldHVybiBhIHJlY29yZCBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBqb3lzdGlja3MuIFRoaXMgY29tbWFuZAoraXMgdmFsaWQgaW4gZWl0aGVyIHRoZSBKT1lTVElDSyBFVkVOVCBSRVBPUlRJTkcgbW9kZSBvciB0aGUgSk9ZU1RJQ0sKK0lOVEVSUk9HQVRJT04gTU9ERS4KKworOS4xOCBTRVQgSk9ZU1RJQ0sgTU9OSVRPUklORworCisgICAgMHgxNworICAgIHJhdGUgICAgICAgICAgICAgICAgOyB0aW1lIGJldHdlZW4gc2FtcGxlcyBpbiBodW5kcmV0aHMgb2YgYSBzZWNvbmQKKyAgICBSZXR1cm5zOiAoaW4gcGFja2V0cyBvZiB0d28gYXMgbG9uZyBhcyBpbiBtb2RlKQorICAgICAgICAgICAgJTAwMDAwMHh5ICAgOyB3aGVyZSB5IGlzIEpPWVNUSUNLMSBGaXJlIGJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgeCBpcyBKT1lTVElDSzAgRmlyZSBidXR0b24KKyAgICAgICAgICAgICVubm5ubW1tbSAgIDsgd2hlcmUgbSBpcyBKT1lTVElDSzEgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIG4gaXMgSk9ZU1RJQ0swIHN0YXRlCisKK1NldHMgdGhlIGlrYmQgdG8gZG8gbm90aGluZyBidXQgbW9uaXRvciB0aGUgc2VyaWFsIGNvbW1hbmQgbG5lLCBtYWludGFpbiB0aGUKK3RpbWUtb2YtZGF5IGNsb2NrLCBhbmQgbW9uaXRvciB0aGUgam95c3RpY2suIFRoZSByYXRlIHNldHMgdGhlIGludGVydmFsCitiZXR3ZWVuIGpveXN0aWNrIHNhbXBsZXMuCitOLkIuIFRoZSB1c2VyIHNob3VsZCBub3Qgc2V0IHRoZSByYXRlIGhpZ2hlciB0aGFuIHRoZSBzZXJpYWwgY29tbXVuaWNhdGlvbnMKK2NoYW5uZWwgd2lsbCBhbGxvdyB0aGUgMiBieXRlcyBwYWNrZXRzIHRvIGJlIHRyYW5zbWl0dGVkLgorCis5LjE5IFNFVCBGSVJFIEJVVFRPTiBNT05JVE9SSU5HCisKKyAgICAweDE4CisgICAgUmV0dXJuczogKGFzIGxvbmcgYXMgaW4gbW9kZSkKKyAgICAgICAgICAgICViYmJiYmJiYiAgIDsgc3RhdGUgb2YgdGhlIEpPWVNUSUNLMSBmaXJlIGJ1dHRvbiBwYWNrZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgOCBiaXRzIHBlciBieXRlLCB0aGUgZmlyc3Qgc2FtcGxlIGlmIHRoZSBNU0IKKworU2V0IHRoZSBpa2JkIHRvIGRvIG5vdGhpbmcgYnV0IG1vbml0b3IgdGhlIHNlcmlhbCBjb21tYW5kIGxpbmUsIG1haW50YWluIHRoZQordGltZS1vZi1kYXkgY2xvY2ssIGFuZCBtb25pdG9yIHRoZSBmaXJlIGJ1dHRvbiBvbiBKb3lzdGljayAxLiBUaGUgZmlyZSBidXR0b24KK2lzIHNjYW5uZWQgYXQgYSByYXRlIHRoYXQgY2F1c2VzIDggc2FtcGxlcyB0byBiZSBtYWRlIGluIHRoZSB0aW1lIGl0IHRha2VzIGZvcgordGhlIHByZXZpb3VzIGJ5dGUgdG8gYmUgc2VudCB0byB0aGUgaG9zdCAoaS5lLiBzY2FuIHJhdGUgPSA4LzEwICogYmF1ZCByYXRlKS4KK1RoZSBzYW1wbGUgaW50ZXJ2YWwgc2hvdWxkIGJlIGFzIGNvbnN0YW50IGFzIHBvc3NpYmxlLgorCis5LjIwIFNFVCBKT1lTVElDSyBLRVlDT0RFIE1PREUKKworICAgIDB4MTkKKyAgICBSWCAgICAgICAgICAgICAgICAgIDsgbGVuZ3RoIG9mIHRpbWUgKGluIHRlbnRocyBvZiBzZWNvbmRzKSB1bnRpbAorICAgICAgICAgICAgICAgICAgICAgICAgOyBob3Jpem9udGFsIHZlbG9jaXR5IGJyZWFrcG9pbnQgaXMgcmVhY2hlZAorICAgIFJZICAgICAgICAgICAgICAgICAgOyBsZW5ndGggb2YgdGltZSAoaW4gdGVudGhzIG9mIHNlY29uZHMpIHVudGlsCisgICAgICAgICAgICAgICAgICAgICAgICA7IHZlcnRpY2FsIHZlbG9jaXR5IGJyZWFrcG9pbnQgaXMgcmVhY2hlZAorICAgIFRYICAgICAgICAgICAgICAgICAgOyBsZW5ndGggKGluIHRlbnRocyBvZiBzZWNvbmRzKSBvZiBqb3lzdGljayBjbG9zdXJlCisgICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIGhvcml6b250YWwgY3Vyc29yIGtleSBpcyBnZW5lcmF0ZWQgYmVmb3JlIFJYCisgICAgICAgICAgICAgICAgICAgICAgICA7IGhhcyBlbGFwc2VkCisgICAgVFkgICAgICAgICAgICAgICAgICA7IGxlbmd0aCAoaW4gdGVudGhzIG9mIHNlY29uZHMpIG9mIGpveXN0aWNrIGNsb3N1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgdW50aWwgdmVydGljYWwgY3Vyc29yIGtleSBpcyBnZW5lcmF0ZWQgYmVmb3JlIFJZCisgICAgICAgICAgICAgICAgICAgICAgICA7IGhhcyBlbGFwc2VkCisgICAgVlggICAgICAgICAgICAgICAgICA7IGxlbmd0aCAoaW4gdGVudGhzIG9mIHNlY29uZHMpIG9mIGpveXN0aWNrIGNsb3N1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgdW50aWwgaG9yaXpvbnRhbCBjdXJzb3Iga2V5c3Rva2VzIGFyZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgYWZ0ZXIgUlggaGFzIGVsYXBzZWQKKyAgICBWWSAgICAgICAgICAgICAgICAgIDsgbGVuZ3RoIChpbiB0ZW50aHMgb2Ygc2Vjb25kcykgb2Ygam95c3RpY2sgY2xvc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgOyB1bnRpbCB2ZXJ0aWNhbCBjdXJzb3Iga2V5c3Rva2VzIGFyZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgYWZ0ZXIgUlkgaGFzIGVsYXBzZWQKKworSW4gdGhpcyBtb2RlLCBqb3lzdGljayAwIGlzIHNjYW5uZWQgaW4gYSB3YXkgdGhhdCBzaW11bGF0ZXMgY3Vyc29yIGtleXN0cm9rZXMuCitPbiBpbml0aWFsIGNsb3N1cmUsIGEga2V5c3Ryb2tlIHBhaXIgKG1ha2UvYnJlYWspIGlzIGdlbmVyYXRlZC4gVGhlbiB1cCB0byBSbgordGVudGhzIG9mIHNlY29uZHMgbGF0ZXIsIGtleXN0cm9rZSBwYWlycyBhcmUgZ2VuZXJhdGVkIGV2ZXJ5IFRuIHRlbnRocyBvZgorc2Vjb25kcy4gQWZ0ZXIgdGhlIFJuIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCwga2V5c3Ryb2tlIHBhaXJzIGFyZSBnZW5lcmF0ZWQKK2V2ZXJ5IFZuIHRlbnRocyBvZiBzZWNvbmRzLiBUaGlzIHByb3ZpZGVzIGEgdmVsb2NpdHkgKGF1dG8tcmVwZWF0KSBicmVha3BvaW50CitmZWF0dXJlLgorTm90ZSB0aGF0IGJ5IHNldHRpbmcgUlggYW5kL29yIFJ5IHRvIHplcm8sIHRoZSB2ZWxvY2l0eSBmZWF0dXJlIGNhbiBiZQorZGlzYWJsZWQuIFRoZSB2YWx1ZXMgb2YgVFggYW5kIFRZIHRoZW4gYmVjb21lIG1lYW5pbmdsZXNzLCBhbmQgdGhlIGdlbmVyYXRpb24KK29mIGN1cnNvciAna2V5c3Ryb2tlcycgaXMgc2V0IGJ5IFZYIGFuZCBWWS4KKworOS4yMSBESVNBQkxFIEpPWVNUSUNLUworCisgICAgMHgxQQorCitEaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGFueSBqb3lzdGljayBldmVudHMgKGFuZCBzY2FubmluZyBtYXkgYmUgaW50ZXJuYWxseQorZGlzYWJsZWQpLiBBbnkgdmFsaWQgam95c3RpY2sgbW9kZSBjb21tYW5kIHJlc3VtZXMgam95c3RpY2sgbW9uaXRvcmluZy4gKFRoZQoram95c3RpY2sgbW9kZSBjb21tYW5kcyBhcmUgU0VUIEpPWVNUSUNLIEVWRU5UIFJFUE9SVElORywgU0VUIEpPWVNUSUNLCitJTlRFUlJPR0FUSU9OIE1PREUsIFNFVCBKT1lTVElDSyBNT05JVE9SSU5HLCBTRVQgRklSRSBCVVRUT04gTU9OSVRPUklORywgYW5kCitTRVQgSk9ZU1RJQ0sgS0VZQ09ERSBNT0RFLikKKworOS4yMiBUSU1FLU9GLURBWSBDTE9DSyBTRVQKKworICAgIDB4MUIKKyAgICBZWSAgICAgICAgICAgICAgICAgIDsgeWVhciAoMiBsZWFzdCBzaWduaWZpY2FudCBkaWdpdHMpCisgICAgTU0gICAgICAgICAgICAgICAgICA7IG1vbnRoCisgICAgREQgICAgICAgICAgICAgICAgICA7IGRheQorICAgIGhoICAgICAgICAgICAgICAgICAgOyBob3VyCisgICAgbW0gICAgICAgICAgICAgICAgICA7IG1pbnV0ZQorICAgIHNzICAgICAgICAgICAgICAgICAgOyBzZWNvbmQKKworQWxsIHRpbWUtb2YtZGF5IGRhdGEgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGlrYmQgaW4gcGFja2VkIEJDRCBmb3JtYXQuCitBbnkgZGlnaXQgdGhhdCBpcyBub3QgYSB2YWxpZCBCQ0QgZGlnaXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSAnZG9uJ3QgY2FyZScKK2FuZCBub3QgYWx0ZXIgdGhhdCBwYXJ0aWN1bGFyIGZpZWxkIG9mIHRoZSBkYXRlIG9yIHRpbWUuIFRoaXMgcGVybWl0cyBzZXR0aW5nCitvbmx5IHNvbWUgc3ViZmllbGRzIG9mIHRoZSB0aW1lLW9mLWRheSBjbG9jay4KKworOS4yMyBJTlRFUlJPR0FURSBUSU1FLU9GLURBVCBDTE9DSworCisgICAgMHgxQworICAgIFJldHVybnM6CisgICAgICAgICAgICAweEZDICAgICAgICA7IHRpbWUtb2YtZGF5IGV2ZW50IGhlYWRlcgorICAgICAgICAgICAgWVkgICAgICAgICAgOyB5ZWFyICgyIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0cykKKyAgICAgICAgICAgIE1NICAgICAgICAgIDsgbW9udGgKKyAgICAgICAgICAgIEREICAgICAgICAgIDsgZGF5CisgICAgICAgICAgICBoaCAgICAgICAgICA7IGhvdXIKKyAgICAgICAgICAgIG1tICAgICAgICAgIDsgbWludXRlCisgICAgICAgICAgICBzcyAgICAgICAgICA7IHNlY29uZAorCisgICAgQWxsIHRpbWUtb2YtZGF5IGlzIHNlbnQgaW4gcGFja2VkIEJDRCBmb3JtYXQuCisKKzkuMjQgTUVNT1JZIExPQUQKKworICAgIDB4MjAKKyAgICBBRFJNU0IgICAgICAgICAgICAgIDsgYWRkcmVzcyBpbiBjb250cm9sbGVyCisgICAgQURSTFNCICAgICAgICAgICAgICA7IG1lbW9yeSB0byBiZSBsb2FkZWQKKyAgICBOVU0gICAgICAgICAgICAgICAgIDsgbnVtYmVyIG9mIGJ5dGVzICgwLTEyOCkKKyAgICB7IGRhdGEgfQorCitUaGlzIGNvbW1hbmQgcGVybWl0cyB0aGUgaG9zdCB0byBsb2FkIGFyYml0cmFyeSB2YWx1ZXMgaW50byB0aGUgaWtiZAorY29udHJvbGxlciBtZW1vcnkuIFRoZSB0aW1lIGJldHdlZW4gZGF0YSBieXRlcyBtdXN0IGJlIGxlc3MgdGhhbiAyMG1zLgorCis5LjI1IE1FTU9SWSBSRUFECisKKyAgICAweDIxCisgICAgQURSTVNCICAgICAgICAgICAgICA7IGFkZHJlc3MgaW4gY29udHJvbGxlcgorICAgIEFEUkxTQiAgICAgICAgICAgICAgOyBtZW1vcnkgdG8gYmUgcmVhZAorICAgIFJldHVybnM6CisgICAgICAgICAgICAweEY2ICAgICAgICA7IHN0YXR1cyBoZWFkZXIKKyAgICAgICAgICAgIDB4MjAgICAgICAgIDsgbWVtb3J5IGFjY2VzcworICAgICAgICAgICAgeyBkYXRhIH0gICAgOyA2IGRhdGEgYnl0ZXMgc3RhcnRpbmcgYXQgQURSCisKK1RoaXMgY29tYW5kIHBlcm1pdHMgdGhlIGhvc3QgdG8gcmVhZCBmcm9tIHRoZSBpa2JkIGNvbnRyb2xsZXIgbWVtb3J5LgorCis5LjI2IENPTlRST0xMRVIgRVhFQ1VURQorCisgICAgMHgyMgorICAgIEFEUk1TQiAgICAgICAgICAgICAgOyBhZGRyZXNzIG9mIHN1YnJvdXRpbmUgaW4KKyAgICBBRFJMU0IgICAgICAgICAgICAgIDsgY29udHJvbGxlciBtZW1vcnkgdG8gYmUgY2FsbGVkCisKK1RoaXMgY29tbWFuZCBhbGxvd3MgdGhlIGhvc3QgdG8gY29tbWFuZCB0aGUgZXhlY3V0aW9uIG9mIGEgc3Vicm91dGluZSBpbiB0aGUKK2lrYmQgY29udHJvbGxlciBtZW1vcnkuCisKKzkuMjcgU1RBVFVTIElOUVVJUklFUworCQorICAgIFN0YXR1cyBjb21tYW5kcyBhcmUgZm9ybWVkIGJ5IGluY2x1c2l2ZWx5IE9SaW5nIDB4ODAgd2l0aCB0aGUKKyAgICByZWxldmFudCBTRVQgY29tbWFuZC4KKworICAgIEV4YW1wbGU6CisgICAgMHg4OCAob3IgMHg4OSBvciAweDhBKSAgOyByZXF1ZXN0IG1vdXNlIG1vZGUKKyAgICBSZXR1cm5zOgorICAgICAgICAgICAgMHhGNiAgICAgICAgOyBzdGF0dXMgcmVzcG9uc2UgaGVhZGVyCisgICAgICAgICAgICBtb2RlICAgICAgICA7IDB4MDggaXMgUkVMQVRJVkUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgMHgwOSBpcyBBQlNPTFVURQorICAgICAgICAgICAgICAgICAgICAgICAgOyAweDBBIGlzIEtFWUNPREUKKyAgICAgICAgICAgIHBhcmFtMSAgICAgIDsgMCBpcyBSRUxBVElWRQorICAgICAgICAgICAgICAgICAgICAgICAgOyBYTVNCIG1heGltdW0gaWYgQUJTT0xVVEUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgREVMVEEgWCBpcyBLRVlDT0RFCisgICAgICAgICAgICBwYXJhbTIgICAgICA7IDAgaXMgUkVMQVRJVkUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgWU1TQiBtYXhpbXVtIGlmIEFCU09MVVRFCisgICAgICAgICAgICAgICAgICAgICAgICA7IERFTFRBIFkgaXMgS0VZQ09ERQorICAgICAgICAgICAgcGFyYW0zICAgICAgOyAwIGlmIFJFTEFUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICA7IG9yIEtFWUNPREUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgWU1TQiBpcyBBQlNPTFVURQorICAgICAgICAgICAgcGFyYW00ICAgICAgOyAwIGlmIFJFTEFUSVZFCisgICAgICAgICAgICAgICAgICAgICAgICA7IG9yIEtFWUNPREUKKyAgICAgICAgICAgICAgICAgICAgICAgIDsgWUxTQiBpcyBBQlNPTFVURQorICAgICAgICAgICAgMCAgICAgICAgICAgOyBwYWQKKyAgICAgICAgICAgIDAKKworVGhlIFNUQVRVUyBJTlFVSVJZIGNvbW1hbmRzIHJlcXVlc3QgdGhlIGlrYmQgdG8gcmV0dXJuIGVpdGhlciB0aGUgY3VycmVudCBtb2RlCitvciB0aGUgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBjb21tYW5kLiBBbGwgc3RhdHVzIHJlcG9ydHMgYXJlCitwYWRkZWQgdG8gZm9ybSA4IGJ5dGUgbG9uZyByZXR1cm4gcGFja2V0cy4gVGhlIHJlc3BvbnNlcyB0byB0aGUgc3RhdHVzCityZXF1ZXN0cyBhcmUgZGVzaWduZWQgc28gdGhhdCB0aGUgaG9zdCBtYXkgc3RvcmUgdGhlbSBhd2F5IChhZnRlciBzdHJpcHBpbmcKK29mZiB0aGUgc3RhdHVzIHJlcG9ydCBoZWFkZXIgYnl0ZSkgYW5kIGxhdGVyIHNlbmQgdGhlbSBiYWNrIGFzIGNvbW1hbmRzIHRvCitpa2JkIHRvIHJlc3RvcmUgaXRzIHN0YXRlLiBUaGUgMCBwYWQgYnl0ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIE5PUHMgYnkgdGhlCitpa2JkLgorCisgICAgVmFsaWQgU1RBVFVTIElOUVVJUlkgY29tbWFuZHMgYXJlOgorCisgICAgICAgICAgICAweDg3ICAgIG1vdXNlIGJ1dHRvbiBhY3Rpb24KKyAgICAgICAgICAgIDB4ODggICAgbW91c2UgbW9kZQorICAgICAgICAgICAgMHg4OQorICAgICAgICAgICAgMHg4QQorICAgICAgICAgICAgMHg4QiAgICBtbm91c2UgdGhyZXNob2xkCisgICAgICAgICAgICAweDhDICAgIG1vdXNlIHNjYWxlCisgICAgICAgICAgICAweDhGICAgIG1vdXNlIHZlcnRpY2FsIGNvb3JkaW5hdGVzCisgICAgICAgICAgICAweDkwICAgICggcmV0dXJucyAgICAgICAweDBGIFk9MCBhdCBib3R0b20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwIFk9MCBhdCB0b3AgKQorICAgICAgICAgICAgMHg5MiAgICBtb3VzZSBlbmFibGUvZGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAoIHJldHVybnMgICAgICAgMHgwMCBlbmFibGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIgZGlzYWJsZWQgKQorICAgICAgICAgICAgMHg5NCAgICBqb3lzdGljayBtb2RlCisgICAgICAgICAgICAweDk1CisgICAgICAgICAgICAweDk2CisgICAgICAgICAgICAweDlBICAgIGpveXN0aWNrIGVuYWJsZS9kaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICggcmV0dXJucyAgICAgICAweDAwIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBIGRpc2FibGVkICkKKworSXQgaXMgdGhlIChob3N0KSBwcm9ncmFtbWVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gaGF2ZSBvbmx5IG9uZSB1bmFuc3dlcmVkCitpbnF1aXJ5IGluIHByb2Nlc3MgYXQgYSB0aW1lLgorU1RBVFVTIElOUVVJUlkgY29tbWFuZHMgYXJlIG5vdCB2YWxpZCBpZiB0aGUgaWtiZCBpcyBpbiBKT1lTVElDSyBNT05JVE9SSU5HCittb2RlIG9yIEZJUkUgQlVUVE9OIE1PTklUT1JJTkcgbW9kZS4KKworCisxMC4gU0NBTiBDT0RFUworCitUaGUga2V5IHNjYW4gY29kZXMgcmV0dXJuIGJ5IHRoZSBpa2JkIGFyZSBjaG9zZW4gdG8gc2ltcGxpZnkgdGhlCitpbXBsZW1lbnRhaW9uIG9mIEdTWC4KKworR1NYIFN0YW5kYXJkIEtleWJvYXJkIE1hcHBpbmcuCisKK0hleAlLZXl0b3AKKzAxCUVzYworMDIJMQorMDMJMgorMDQJMworMDUJNAorMDYJNQorMDcJNgorMDgJNworMDkJOAorMEEJOQorMEIJMAorMEMJLQorMEQJPT0KKzBFCUJTCiswRglUQUIKKzEwCVEKKzExCVcKKzEyCUUKKzEzCVIKKzE0CVQKKzE1CVkKKzE2CVUKKzE3CUkKKzE4CU8KKzE5CVAKKzFBCVsKKzFCCV0KKzFDCVJFVAorMUQJQ1RSTAorMUUJQQorMUYJUworMjAJRAorMjEJRgorMjIJRworMjMJSAorMjQJSgorMjUJSworMjYJTAorMjcJOworMjgJJworMjkJYAorMkEJKExFRlQpIFNISUZUCisyQglcCisyQwlaCisyRAlYCisyRQlDCisyRglWCiszMAlCCiszMQlOCiszMglNCiszMwksCiszNAkuCiszNQkvCiszNgkoUklHSFQpIFNISUZUCiszNwl7IE5PVCBVU0VEIH0KKzM4CUFMVAorMzkJU1BBQ0UgQkFSCiszQQlDQVBTIExPQ0sKKzNCCUYxCiszQwlGMgorM0QJRjMKKzNFCUY0CiszRglGNQorNDAJRjYKKzQxCUY3Cis0MglGOAorNDMJRjkKKzQ0CUYxMAorNDUJeyBOT1QgVVNFRCB9Cis0Ngl7IE5PVCBVU0VEIH0KKzQ3CUhPTUUKKzQ4CVVQIEFSUk9XCis0OQl7IE5PVCBVU0VEIH0KKzRBCUtFWVBBRCAtCis0QglMRUZUIEFSUk9XCis0Qwl7IE5PVCBVU0VEIH0KKzRECVJJR0hUIEFSUk9XCis0RQlLRVlQQUQgKworNEYJeyBOT1QgVVNFRCB9Cis1MAlET1dOIEFSUk9XCis1MQl7IE5PVCBVU0VEIH0KKzUyCUlOU0VSVAorNTMJREVMCis1NAl7IE5PVCBVU0VEIH0KKzVGCXsgTk9UIFVTRUQgfQorNjAJSVNPIEtFWQorNjEJVU5ETworNjIJSEVMUAorNjMJS0VZUEFEICgKKzY0CUtFWVBBRCAvCis2NQlLRVlQQUQgKgorNjYJS0VZUEFEICoKKzY3CUtFWVBBRCA3Cis2OAlLRVlQQUQgOAorNjkJS0VZUEFEIDkKKzZBCUtFWVBBRCA0Cis2QglLRVlQQUQgNQorNkMJS0VZUEFEIDYKKzZECUtFWVBBRCAxCis2RQlLRVlQQUQgMgorNkYJS0VZUEFEIDMKKzcwCUtFWVBBRCAwCis3MQlLRVlQQUQgLgorNzIJS0VZUEFEIEVOVEVSCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2NkMzIudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9jZDMyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDAzZDliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9jZDMyLnR4dApAQCAtMCwwICsxLDE5IEBACitJIGhhdmUgd3JpdHRlbiBhIHNtYWxsIHBhdGNoIHRoYXQgbGV0J3MgbWUgdXNlIG15IEFtaWdhIENEMzIKK2pveXBhZCBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQuIFRob3VnaHQgSSdkIHNoYXJlIGl0IHdpdGggeW91IHNvCit5b3UgY2FuIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgam95c3RpY2tzIChob3BlZnVsbHkgc29tZW9uZSB3aWxsCitmaW5kIGl0IHVzZWZ1bCkuCisKK0l0IG5lZWRzIHRoZSBmb2xsb3dpbmcgd2lyaW5nOgorCitDRDMyIHBhZCAgIHwgICBQYXJhbGxlbCBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxIChVcCkgICAgIHwgICAgMiAoRDApCisyIChEb3duKSAgIHwgICAgMyAoRDEpCiszIChMZWZ0KSAgIHwgICAgNCAoRDIpCis0IChSaWdodCkgIHwgICAgNSAoRDMpCis1IChGaXJlMykgIHwgICAxNCAoQVVUT0ZEKQorNiAoRmlyZTEpICB8ICAgMTcgKFNFTElOKQorNyAoKzVWKSAgICB8ICAgIDEgKFNUUk9CRSkKKzggKEduZCkgICAgfCAgIDE4IChHbmQpCis5IChGaXJlMikgIHwgICAgNyAoRDUpCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvY3M0NjF4LnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvY3M0NjF4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTgxNzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9jczQ2MXgudHh0CkBAIC0wLDAgKzEsNDUgQEAKK1ByZWZhY2UuCisKK1RoaXMgaXMgYSBuZXcgbG93LWxldmVsIGRyaXZlciB0byBzdXBwb3J0IGFuYWxvZyBqb3lzdGljayBhdHRhY2hlZCB0bworQ3J5c3RhbCBTb3VuZEZ1c2lvbiBDUzQ2MTAvQ1M0NjEyL0NTNDYxNS4gVGhpcyBjb2RlIGlzIGJhc2VkIHVwb24gCitWb3J0ZXgvU29sbyBkcml2ZXJzIGFzIGFuIGV4YW1wbGUgb2YgZGVjb3JhdGlvbiBzdHlsZSwgYW5kIEFMU0EKKzAuNS44YSBrZXJuZWwgZHJpdmVycyBhcyBhbiBjaGlwc2V0IGRvY3VtZW50YXRpb24gYW5kIHNhbXBsZXMuCisKK1RoaXMgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIGNvb2tlZCBtb2RlIHN1cHBvcnQ7IHRoZSBiYXNpYyBjb2RlIAoraXMgcHJlc2VudCBoZXJlLCBidXQgaGF2ZSBub3QgdGVzdGVkIGNvbXBsZXRlbHkuIFRoZSBidXR0b24gYW5hbHlzaXMgCitpcyBjb21wbGV0ZWQgaW4gdGhpcyBtb2RlLCBidXQgdGhlIGF4aXMgbW92ZW1lbnQgaXMgbm90LiAKKworUmF3IG1vZGUgd29ya3MgZmluZSB3aXRoIGFuYWxvZyBqb3lzdGljayBmcm9udC1lbmQgZHJpdmVyIGFuZCBjczQ2MXgKK2RyaXZlciBhcyBhIGJhY2tlbmQuIEkndmUgdGVzdGVkIHRoaXMgZHJpdmVyIHdpdGggQ1M0NjEwLCA0LWF4aXMgYW5kIAorNC1idXR0b24gam95c3RpY2s7IEkgbWVhbiB0aGUganN0ZXN0IHV0aWxpdHkuIEFsc28gSSd2ZSB0cmllZCB0bworcGxheSBpbiB4cmFjZXIgZ2FtZSB1c2luZyBqb3lzdGljaywgYW5kIHRoZSByZXN1bHQgaXMgYmV0dGVyIHRoYW4KK2tleWJvYXJkIG9ubHkgbW9kZS4KKworVGhlIHNlbnNpdGl2aXR5IGFuZCBjYWxpYnJhdGUgcXVhbGl0eSBoYXZlIG5vdCBiZWVuIHRlc3RlZDsgdGhlIHR3bworcmVhc29ucyBhcmUgcGVyZm9ybWVkOiB0aGUgc2FtZSBoYXJkd2FyZSBjYW5ub3Qgd29yayB1bmRlciBXaW45NSAoYmx1ZSAKK3NjcmVlbiBpbiBWSk9ZRCk7IEkgaGF2ZSBubyBkb2N1bWVudGF0aW9uIG9uIG15IGNoaXA7IGFuZCB0aGUgZXhpc3RpbmcgCitiZWhhdmlvciBpbiBteSBjYXNlIHdhcyBub3QgcmFpc2VkIHRoZSByZXF1aXJlbWVudCBvZiBqb3lzdGljayBjYWxpYnJhdGlvbi4gCitTbyB0aGUgZHJpdmVyIGhhdmUgbm8gY29kZSB0byBwZXJmb3JtIGhhcmR3YXJlIHJlbGF0ZWQgY2FsaWJyYXRpb24uCisKK1RoZSBwYXRjaCBjb250YWlucyBtaW5vciBjaGFuZ2VzIG9mIENvbmZpZy5pbiBhbmQgTWFrZWZpbGUgZmlsZXMuIEFsbAorbmVlZGVkIGNvZGUgaGF2ZSBiZWVuIG1vdmVkIHRvIG9uZSBzZXBhcmF0ZSBmaWxlIGNzNDYxeC5jIGxpa2UgbnM1NTguYworVGhpcyBkcml2ZXIgaGF2ZSB0aGUgYmFzaWMgc3VwcG9ydCBmb3IgUENJIGRldmljZXMgb25seTsgdGhlcmUgaXMgbm8KK0lTQSBvciBQblAgSVNBIGNhcmRzIHN1cHBvcnRlZC4gQUZBSUsgdGhlIG5zNTU4IGhhdmUgc3VwcG9ydCBmb3IgQ3J5c3RhbCAKK0lTQSBhbmQgUG5QIElTQSBzZXJpZXMuCisKK1RoZSBkcml2ZXIgd29ya3Mgd2l0biBBTFNBIGRyaXZlcnMgc2ltdWx0YW5lb3VzbHkuIEZvciBleG1wbGUsIHRoZSB4cmFjZXIKK3VzZXMgam95c3RpY2sgYXMgaW5wdXQgZGV2aWNlIGFuZCBQQ00gZGV2aWNlIGFzIHNvdW5kIG91dHB1dCBpbiBvbmUgdGltZS4KK1RoZXJlIGFyZSBubyBzb3VuZCBvciBpbnB1dCBjb2xsaXNpb25zIGRldGVjdGVkLiBUaGUgc291cmNlIGNvZGUgaGF2ZQorY29tbWVudHMgYWJvdXQgdGhlbTsgYnV0IEkndmUgZm91bmQgdGhlIGpveXN0aWNrIGNhbiBiZSBpbml0aWFsaXplZCAKK3NlcGFyYXRlbHkgb2YgQUxTQSBtb2R1bGVzLiBTbywgeW91IGNhbm0gdXNlIG9ubHkgb25lIGpveXN0aWNrIGRyaXZlcgord2l0aG91dCBBTFNBIGRyaXZlcnMuIFRoZSBBTFNBIGRyaXZlcnMgYXJlIG5vdCBuZWVkZWQgdG8gY29tcGlsZSBvcgorcnVuIHRoaXMgZHJpdmVyLgorCitUaGVyZSBhcmUgbm8gZGVidWcgaW5mb3JtYXRpb24gcHJpbnQgaGF2ZSBiZWVuIHBsYWNlZCBpbiBzb3VyY2UsIGFuZCBubworc3BlY2lmaWMgb3B0aW9ucyByZXF1aXJlZCB0byB3b3JrIHRoaXMgZHJpdmVyLiBUaGUgZm91bmQgY2hpcHNldCBwYXJhbWV0ZXJzCithcmUgcHJpbnRlZCB2aWEgcHJpbnRrKEtFUk5fSU5GTyAiLi4uIiksIHNlZSB0aGUgL3Zhci9sb2cvbWVzc2FnZXMgdG8KK2luc3BlY3QgY3M0NjF4OiBwcmVmaXhlZCBtZXNzYWdlcyB0byBkZXRlcm1pbmUgcG9zc2libGUgY2FyZCBkZXRlY3Rpb24gCitlcnJvcnMuCisKK1JlZ2FyZHMsCitWaWt0b3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9mZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhN2RkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvZmYudHh0CkBAIC0wLDAgKzEsMjI3IEBACitGb3JjZSBmZWVkYmFjayBmb3IgTGludXguCitCeSBKb2hhbm4gRGVuZXV4IDxkZW5ldXhAaWZyYW5jZS5jb20+IG9uIDIwMDEvMDQvMjIuCitZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGlzIGZpbGUuIFBsZWFzZSByZW1lbWJlciB0byBpbmNsdWRlIHNoYXBlLmZpZyBhbmQKK2ludGVyYWN0aXZlLmZpZyBhcyB3ZWxsLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiswLiBJbnRyb2R1Y3Rpb24KK35+fn5+fn5+fn5+fn5+fgorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHVzZSBmb3JjZSBmZWVkYmFjayBkZXZpY2VzIHVuZGVyIExpbnV4LiBUaGUKK2dvYWwgaXMgbm90IHRvIHN1cHBvcnQgdGhlc2UgZGV2aWNlcyBhcyBpZiB0aGV5IHdlcmUgc2ltcGxlIGlucHV0LW9ubHkgZGV2aWNlcworKGFzIGl0IGlzIGFscmVhZHkgdGhlIGNhc2UpLCBidXQgdG8gcmVhbGx5IGVuYWJsZSB0aGUgcmVuZGVyaW5nIG9mIGZvcmNlCitlZmZlY3RzLgorQXQgdGhlIG1vbWVudCwgb25seSBJLUZvcmNlIGRldmljZXMgYXJlIHN1cHBvcnRlZCwgYW5kIG5vdCBvZmZpY2lhbGx5LiBUaGF0CittZWFucyBJIGhhZCB0byBmaW5kIG91dCBob3cgdGhlIHByb3RvY29sIHdvcmtzIG9uIG15IG93bi4gT2YgY291cnNlLCB0aGUKK2luZm9ybWF0aW9uIEkgbWFuYWdlZCB0byBncmFzcCBpcyBmYXIgZnJvbSBiZWluZyBjb21wbGV0ZSwgYW5kIEkgY2FuIG5vdAorZ3VhcnJhbnR5IHRoYXQgdGhpcyBkcml2ZXIgd2lsbCB3b3JrIGZvciB5b3UuCitUaGlzIGRvY3VtZW50IG9ubHkgZGVzY3JpYmVzIHRoZSBmb3JjZSBmZWVkYmFjayBwYXJ0IG9mIHRoZSBkcml2ZXIgZm9yIEktRm9yY2UKK2RldmljZXMuIFBsZWFzZSByZWFkIGpveXN0aWNrLnR4dCBiZWZvcmUgcmVhZGluZyBmdXJ0aGVyIHRoaXMgZG9jdW1lbnQuCisKKzIuIEluc3RydWN0aW9ucyB0byB0aGUgdXNlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitIZXJlIGFyZSBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGNvbXBpbGUgYW5kIHVzZSB0aGUgZHJpdmVyLiBJbiBmYWN0LCB0aGlzCitkcml2ZXIgaXMgdGhlIG5vcm1hbCBpZm9yY2UsIGlucHV0IGFuZCBldmRldiBkcml2ZXJzIHdyaXR0ZW4gYnkgVm9qdGVjaAorUGF2bGlrLCBwbHVzIGFkZGl0aW9ucyB0byBzdXBwb3J0IGZvcmNlIGZlZWRiYWNrLgorCitCZWZvcmUgeW91IHN0YXJ0LCBsZXQgbWUgV0FSTiB5b3UgdGhhdCBzb21lIGRldmljZXMgc2hha2UgdmlvbGVudGx5IGR1cmluZyB0aGUKK2luaXRpYWxpc2F0aW9uIHBoYXNlLiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgd2l0aCBteSAiQVZCIFRvcCBTaG90IFBlZ2FzdXMiLgorVG8gc3RvcCB0aGlzIGFubm95aW5nIGJlaGF2aW91ciwgbW92ZSB5b3Ugam95c3RpY2sgdG8gaXRzIGxpbWl0cy4gQW55d2F5LCB5b3UKK3Nob3VsZCBrZWVwIGEgaGFuZCBvbiB5b3VyIGRldmljZSwgaW4gb3JkZXIgdG8gYXZvaWQgaXQgdG8gYnJha2UgZG93biBpZgorc29tZXRoaW5nIGdvZXMgd3JvbmcuCisKK0F0IHRoZSBrZXJuZWwncyBjb21waWxhdGlvbjoKKwktIEVuYWJsZSBJRm9yY2UvU2VyaWFsCisJLSBFbmFibGUgRXZlbnQgaW50ZXJmYWNlCisKK0NvbXBpbGUgdGhlIG1vZHVsZXMsIGluc3RhbGwgdGhlbS4KKworWW91IGFsc28gbmVlZCBpbnB1dGF0dGFjaC4KKworWW91IHRoZW4gbmVlZCB0byBpbnNlcnQgdGhlIG1vZHVsZXMgaW50byB0aGUgZm9sbG93aW5nIG9yZGVyOgorJSBtb2Rwcm9iZSBqb3lkZXYKKyUgbW9kcHJvYmUgc2VycG9ydAkJIyBPbmx5IGZvciBzZXJpYWwKKyUgbW9kcHJvYmUgaWZvcmNlCislIG1vZHByb2JlIGV2ZGV2CislIC4vaW5wdXRhdHRhY2ggLWlmb3IgJDIgJgkjIE9ubHkgZm9yIHNlcmlhbAorSWYgeW91IGFyZSB1c2luZyBVU0IsIHlvdSBkb24ndCBuZWVkIHRoZSBpbnB1dGF0dGFjaCBzdGVwLgorCitQbGVhc2UgY2hlY2sgdGhhdCB5b3UgaGF2ZSBhbGwgdGhlIC9kZXYvaW5wdXQgZW50cmllcyBuZWVkZWQ6CitjZCAvZGV2CitybSBqcyoKK21rZGlyIGlucHV0Citta25vZCBpbnB1dC9qczAgYyAxMyAwCitta25vZCBpbnB1dC9qczEgYyAxMyAxCitta25vZCBpbnB1dC9qczIgYyAxMyAyCitta25vZCBpbnB1dC9qczMgYyAxMyAzCitsbiAtcyBpbnB1dC9qczAganMwCitsbiAtcyBpbnB1dC9qczEganMxCitsbiAtcyBpbnB1dC9qczIganMyCitsbiAtcyBpbnB1dC9qczMganMzCisKK21rbm9kIGlucHV0L2V2ZW50MCBjIDEzIDY0Citta25vZCBpbnB1dC9ldmVudDEgYyAxMyA2NQorbWtub2QgaW5wdXQvZXZlbnQyIGMgMTMgNjYKK21rbm9kIGlucHV0L2V2ZW50MyBjIDEzIDY3CisKKzIuMSBEb2VzIGl0IHdvcmsgPworfn5+fn5+fn5+fn5+fn5+fn5+CitUaGVyZSBpcyBhbiB1dGlsaXR5IGNhbGxlZCBmZnRlc3QgdGhhdCB3aWxsIGFsbG93IHlvdSB0byB0ZXN0IHRoZSBkcml2ZXIuCislIGZmdGVzdCAvZGV2L2lucHV0L2V2ZW50WFgKKworMy4gSW5zdHJ1Y3Rpb25zIHRvIHRoZSBkZXZlbG9wcGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgQWxsIGludGVyYWN0aW9ucyBhcmUgZG9uZSB1c2luZyB0aGUgZXZlbnQgQVBJLiBUaGF0IGlzLCB5b3UgY2FuIHVzZSBpb2N0bCgpCithbmQgd3JpdGUoKSBvbiAvZGV2L2lucHV0L2V2ZW50WFguCisgIFRoaXMgaW5mb3JtYXRpb24gaXMgc3ViamVjdCB0byBjaGFuZ2UuCisKKzMuMSBRdWVyeWluZyBkZXZpY2UgY2FwYWJpbGl0aWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKK3Vuc2lnbmVkIGxvbmcgZmVhdHVyZXNbMSArIEZGX01BWC9zaXplb2YodW5zaWduZWQgbG9uZyldOworaW50IGlvY3RsKGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCByZXF1ZXN0LCB1bnNpZ25lZCBsb25nICpmZWF0dXJlcyk7CisKKyJyZXF1ZXN0IiBtdXN0IGJlIEVWSU9DR0JJVChFVl9GRiwgc2l6ZSBvZiBmZWF0dXJlcyBhcnJheSBpbiBieXRlcyApCisKK1JldHVybnMgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLiBmZWF0dXJlcyBpcyBhIGJpdGZpZWxkIHdpdGggdGhlCitmb2xsb3dpbmcgYml0czoKKy0gRkZfWAkJaGFzIGFuIFggYXhpcyAodXN1YWxseSBqb3lzdGlja3MpCistIEZGX1kJCWhhcyBhbiBZIGF4aXMgKHVzdWFsbHkgam95c3RpY2tzKQorLSBGRl9XSEVFTAloYXMgYSB3aGVlbCAodXN1YWxseSBzdGVycmluZyB3aGVlbHMpCistIEZGX0NPTlNUQU5UCWNhbiByZW5kZXIgY29uc3RhbnQgZm9yY2UgZWZmZWN0cworLSBGRl9QRVJJT0RJQwljYW4gcmVuZGVyIHBlcmlvZGljIGVmZmVjdHMgKHNpbmUsIHRyaWFuZ2xlLCBzcXVhcmUuLi4pCistIEZGX1JBTVAgICAgICAgY2FuIHJlbmRlciByYW1wIGVmZmVjdHMKKy0gRkZfU1BSSU5HCWNhbiBzaW11bGF0ZSB0aGUgcHJlc2VuY2Ugb2YgYSBzcHJpbmcKKy0gRkZfRlJJQ1RJT04JY2FuIHNpbXVsYXRlIGZyaWN0aW9uIAorLSBGRl9EQU1QRVIJY2FuIHNpbXVsYXRlIGRhbXBlciBlZmZlY3RzCistIEZGX1JVTUJMRQlydW1ibGUgZWZmZWN0cyAobm9ybWFsbHkgdGhlIG9ubHkgZWZmZWN0IHN1cHBvcnRlZCBieSBydW1ibGUKKwkJcGFkcykKKy0gRkZfSU5FUlRJQSAgICBjYW4gc2ltdWxhdGUgaW5lcnRpYQorCisKK2ludCBpb2N0bChpbnQgZmQsIEVWSU9DR0VGRkVDVFMsIGludCAqbik7CisKK1JldHVybnMgdGhlIG51bWJlciBvZiBlZmZlY3RzIHRoZSBkZXZpY2UgY2FuIGtlZXAgaW4gaXRzIG1lbW9yeS4KKworMy4yIFVwbG9hZGluZyBlZmZlY3RzIHRvIHRoZSBkZXZpY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAKK2ludCBpb2N0bChpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgcmVxdWVzdCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KTsKKworInJlcXVlc3QiIG11c3QgYmUgRVZJT0NTRkYuCisKKyJlZmZlY3QiIHBvaW50cyB0byBhIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBlZmZlY3QgdG8gdXBsb2FkLiBUaGUgZWZmZWN0IGlzCit1cGxvYWRlZCwgYnV0IG5vdCBwbGF5ZWQuCitUaGUgY29udGVudCBvZiBlZmZlY3QgbWF5IGJlIG1vZGlmaWVkLiBJbiBwYXJ0aWN1bGFyLCBpdHMgZmllbGQgImlkIiBpcyBzZXQKK3RvIHRoZSB1bmlxdWUgaWQgYXNzaWduZWQgYnkgdGhlIGRyaXZlci4gVGhpcyBkYXRhIGlzIHJlcXVpcmVkIGZvciBwZXJmb3JtaW5nCitzb21lIG9wZXJhdGlvbnMgKHJlbW92aW5nIGFuIGVmZmVjdCwgY29udHJvbGxpbmcgdGhlIHBsYXliYWNrKS4KK1RoaXMgaWYgZmllbGQgbXVzdCBiZSBzZXQgdG8gLTEgYnkgdGhlIHVzZXIgaW4gb3JkZXIgdG8gdGVsbCB0aGUgZHJpdmVyIHRvCithbGxvY2F0ZSBhIG5ldyBlZmZlY3QuCitTZWUgPGxpbnV4L2lucHV0Lmg+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmZl9lZmZlY3Qgc3R1Y3QuIFlvdSBzaG91bGQgYWxzbworZmluZCBoZWxwIGluIGEgZmV3IHNrZXRjaGVzLCBjb250YWluZWQgaW4gZmlsZXMgc2hhcGUuZmlnIGFuZCBpbnRlcmFjdGl2ZS5maWcuCitZb3UgbmVlZCB4ZmlnIHRvIHZpc3VhbGl6ZSB0aGVzZSBmaWxlcy4KKworMy4zIFJlbW92aW5nIGFuIGVmZmVjdCBmcm9tIHRoZSBkZXZpY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitpbnQgaW9jdGwoaW50IGZkLCBFVklPQ1JNRkYsIGVmZmVjdC5pZCk7CisKK1RoaXMgbWFrZXMgcm9vbSBmb3IgbmV3IGVmZmVjdHMgaW4gdGhlIGRldmljZSdzIG1lbW9yeS4gUGxlYXNlIG5vdGUgdGhpcyB3b24ndAorc3RvcCB0aGUgZWZmZWN0IGlmIGl0IHdhcyBwbGF5aW5nLgorCiszLjQgQ29udHJvbGxpbmcgdGhlIHBsYXliYWNrIG9mIGVmZmVjdHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQ29udHJvbCBvZiBwbGF5aW5nIGlzIGRvbmUgd2l0aCB3cml0ZSgpLiBCZWxvdyBpcyBhbiBleGFtcGxlOgorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworCXN0cnVjdCBpbnB1dF9ldmVudCBwbGF5OworCXN0cnVjdCBpbnB1dF9ldmVudCBzdG9wOworCXN0cnVjdCBmZl9lZmZlY3QgZWZmZWN0OworCWludCBmZDsKKy4uLgorCWZkID0gb3BlbigiL2Rldi9pbnB1dC9ldmVudFhYIiwgT19SRFdSKTsKKy4uLgorCS8qIFBsYXkgdGhyZWUgdGltZXMgKi8KKwlwbGF5LnR5cGUgPSBFVl9GRjsKKwlwbGF5LmNvZGUgPSBlZmZlY3QuaWQ7CisJcGxheS52YWx1ZSA9IDM7CisJCisJd3JpdGUoZmQsIChjb25zdCB2b2lkKikgJnBsYXksIHNpemVvZihwbGF5KSk7CisuLi4KKwkvKiBTdG9wIGFuIGVmZmVjdCAqLworCXN0b3AudHlwZSA9IEVWX0ZGOworCXN0b3AuY29kZSA9IGVmZmVjdC5pZDsKKwlzdG9wLnZhbHVlID0gMDsKKwkKKwl3cml0ZShmZCwgKGNvbnN0IHZvaWQqKSAmcGxheSwgc2l6ZW9mKHN0b3ApKTsKKworMy41IFNldHRpbmcgdGhlIGdhaW4KK35+fn5+fn5+fn5+fn5+fn5+fn5+CitOb3QgYWxsIGRldmljZXMgaGF2ZSB0aGUgc2FtZSBzdHJlbmd0aC4gVGhlcmVmb3JlLCB1c2VycyBzaG91bGQgc2V0IGEgZ2FpbgorZmFjdG9yIGRlcGVuZGluZyBvbiBob3cgc3Ryb25nIHRoZXkgd2FudCBlZmZlY3RzIHRvIGJlLiBUaGlzIHNldHRpbmcgaXMKK3BlcnNpc3RlbnQgYWNyb3NzIGFjY2VzcyB0byB0aGUgZHJpdmVyLCBzbyB5b3Ugc2hvdWxkIG5vdCBjYXJlIGFib3V0IGl0IGlmCit5b3UgYXJlIHdyaXRpbmcgZ2FtZXMsIGFzIGFub3RoZXIgdXRpbGl0eSBwcm9iYWJseSBhbHJlYWR5IHNldCB0aGlzIGZvciB5b3UuCisKKy8qIFNldCB0aGUgZ2FpbiBvZiB0aGUgZGV2aWNlCitpbnQgZ2FpbjsJCS8qIGJldHdlZW4gMCBhbmQgMTAwICovCitzdHJ1Y3QgaW5wdXRfZXZlbnQgaWU7CS8qIHN0cnVjdHVyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRyaXZlciAqLworCitpZS50eXBlID0gRVZfRkY7CitpZS5jb2RlID0gRkZfR0FJTjsKK2llLnZhbHVlID0gMHhGRkZGVUwgKiBnYWluIC8gMTAwOworCitpZiAod3JpdGUoZmQsICZpZSwgc2l6ZW9mKGllKSkgPT0gLTEpCisJcGVycm9yKCJzZXQgZ2FpbiIpOworCiszLjYgRW5hYmxpbmcvRGlzYWJsaW5nIGF1dG9jZW50ZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGF1dG9jZW50ZXIgZmVhdHVyZSBxdWl0ZSBkaXN0dXJicyB0aGUgcmVuZGVyaW5nIG9mIGVmZmVjdHMgaW4gbXkgb3BpbmlvbiwKK2FuZCBJIHRoaW5rIGl0IHNob3VsZCBiZSBhbiBlZmZlY3QsIHdoaWNoIGNvbXB1dGF0aW9uIGRlcGVuZHMgb24gdGhlIGdhbWUKK3R5cGUuIEJ1dCB5b3UgY2FuIGVuYWJsZSBpdCBpZiB5b3Ugd2FudC4KKworaW50IGF1dG9jZW50ZXI7CQkvKiBiZXR3ZWVuIDAgYW5kIDEwMCAqLworc3RydWN0IGlucHV0X2V2ZW50IGllOworCitpZS50eXBlID0gRVZfRkY7CitpZS5jb2RlID0gRkZfQVVUT0NFTlRFUjsKK2llLnZhbHVlID0gMHhGRkZGVUwgKiBhdXRvY2VudGVyIC8gMTAwOworCitpZiAod3JpdGUoZmQsICZpZSwgc2l6ZW9mKGllKSkgPT0gLTEpCisJcGVycm9yKCJzZXQgYXV0by1jZW50ZXIiKTsKKworQSB2YWx1ZSBvZiAwIG1lYW5zICJubyBhdXRvLWNlbnRlciIuCisKKzMuNyBEeW5hbWljIHVwZGF0ZSBvZiBhbiBlZmZlY3QKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1Byb2NlZWQgYXMgaWYgeW91IHdhbnRlZCB0byB1cGxvYWQgYSBuZXcgZWZmZWN0LCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mCitzZXR0aW5nIHRoZSBpZCBmaWVsZCB0byAtMSwgeW91IHNldCBpdCB0byB0aGUgd2FudGVkIGVmZmVjdCBpZC4KK05vcm1hbGx5LCB0aGUgZWZmZWN0IGlzIG5vdCBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQuIEhvd2V2ZXIsIGRlcGVuZGluZyBvbiB0aGUKK3R5cGUgb2YgZGV2aWNlLCBub3QgYWxsIHBhcmFtZXRlcnMgY2FuIGJlIGR5bmFtaWNhbGx5IHVwZGF0ZWQuIEZvciBleGFtcGxlLAordGhlIGRpcmVjdGlvbiBvZiBhbiBlZmZlY3QgY2Fubm90IGJlIHVwZGF0ZWQgd2l0aCBpZm9yY2UgZGV2aWNlcy4gSW4gdGhpcworY2FzZSwgdGhlIGRyaXZlciBzdG9wcyB0aGUgZWZmZWN0LCB1cC1sb2FkIGl0LCBhbmQgcmVzdGFydCBpdC4KKworCiszLjggSW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1cyBvZiBlZmZlY3RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitFdmVyeSB0aW1lIHRoZSBzdGF0dXMgb2YgYW4gZWZmZWN0IGlzIGNoYW5nZWQsIGFuIGV2ZW50IGlzIHNlbnQuIFRoZSB2YWx1ZXMKK2FuZCBtZWFuaW5ncyBvZiB0aGUgZmllbGRzIG9mIHRoZSBldmVudCBhcmUgYXMgZm9sbG93czoKK3N0cnVjdCBpbnB1dF9ldmVudCB7CisvKiBXaGVuIHRoZSBzdGF0dXMgb2YgdGhlIGVmZmVjdCBjaGFuZ2VkICovCisJc3RydWN0IHRpbWV2YWwgdGltZTsKKworLyogU2V0IHRvIEVWX0ZGX1NUQVRVUyAqLworCXVuc2lnbmVkIHNob3J0IHR5cGU7CisKKy8qIENvbnRhaW5zIHRoZSBpZCBvZiB0aGUgZWZmZWN0ICovCisJdW5zaWduZWQgc2hvcnQgY29kZTsKKworLyogSW5kaWNhdGVzIHRoZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBpbnQgdmFsdWU7Cit9OworCitGRl9TVEFUVVNfU1RPUFBFRAlUaGUgZWZmZWN0IHN0b3BwZWQgcGxheWluZworRkZfU1RBVFVTX1BMQVlJTkcJVGhlIGVmZmVjdCBzdGFydGVkIHRvIHBsYXkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvZ2FtZXBvcnQtcHJvZ3JhbW1pbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9nYW1lcG9ydC1wcm9ncmFtbWluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhM2QzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvZ2FtZXBvcnQtcHJvZ3JhbW1pbmcudHh0CkBAIC0wLDAgKzEsMTg5IEBACiskSWQ6IGdhbWVwb3J0LXByb2dyYW1taW5nLnR4dCx2IDEuMyAyMDAxLzA0LzI0IDEzOjUxOjM3IHZvanRlY2ggRXhwICQKKworUHJvZ3JhbW1pbmcgZ2FtZXBvcnQgZHJpdmVycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisxLiBBIGJhc2ljIGNsYXNzaWMgZ2FtZXBvcnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB0aGUgZ2FtZXBvcnQgZG9lc24ndCBwcm92aWRlIG1vcmUgdGhhbiB0aGUgaW5iKCkvb3V0YigpIGZ1bmN0aW9uYWxpdHksCit0aGUgY29kZSBuZWVkZWQgdG8gcmVnaXN0ZXIgaXQgd2l0aCB0aGUgam95c3RpY2sgZHJpdmVycyBpcyBzaW1wbGU6CisKKwlzdHJ1Y3QgZ2FtZXBvcnQgZ2FtZXBvcnQ7CisKKwlnYW1lcG9ydC5pbyA9IE1ZX0lPX0FERFJFU1M7CisJZ2FtZXBvcnRfcmVnaXN0ZXJfcG9ydCgmZ2FtZXBvcnQpOworCitNYWtlIHN1cmUgc3RydWN0IGdhbWVwb3J0IGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYWxsIG90aGVyIGZpZWxkcy4gVGhlCitnYW1lcG9ydCBnZW5lcmljIGNvZGUgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHJlc3QuCisKK0lmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBpbyBhZGRyZXNzLCBhbmQgeW91ciBkcml2ZXIgY2FuCitjaG9vc2Ugd2hpY2ggb25lIHByb2dyYW0gdGhlIGhhcmR3YXJlIHRvLCBzdGFydGluZyBmcm9tIHRoZSBtb3JlIGV4b3RpYworYWRkcmVzc2VzIGlzIHByZWZlcnJlZCwgYmVjYXVzZSB0aGUgbGlrZWx5aG9vZCBvZiBjbGFzaGluZyB3aXRoIHRoZSBzdGFuZGFyZAorMHgyMDEgYWRkcmVzcyBpcyBzbWFsbGVyLgorCitFZy4gaWYgeW91ciBkcml2ZXIgc3VwcG9ydHMgYWRkcmVzc2VzIDB4MjAwLCAweDIwOCwgMHgyMTAgYW5kIDB4MjE4LCB0aGVuCisweDIxOCB3b3VsZCBiZSB0aGUgYWRkcmVzcyBvZiBmaXJzdCBjaG9pY2UuCisKK0lmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgYSBnYW1lcG9ydCBhZGRyZXNzIHRoYXQgaXMgbm90IG1hcHBlZCB0byBJU0EgaW8KK3NwYWNlIChpcyBhYm92ZSAweDEwMDApLCB1c2UgdGhhdCBvbmUsIGFuZCBkb24ndCBtYXAgdGhlIElTQSBtaXJyb3IuCisKK0Fsc28sIGFsd2F5cyByZXF1ZXN0X3JlZ2lvbigpIG9uIHRoZSB3aG9sZSBpbyBzcGFjZSBvY2N1cGllZCBieSB0aGUKK2dhbWVwb3J0LiBBbHRob3VnaCBvbmx5IG9uZSBpb3BvcnQgaXMgcmVhbGx5IHVzZWQsIHRoZSBnYW1lcG9ydCB1c3VhbGx5CitvY2N1cGllcyBmcm9tIG9uZSB0byBzaXh0ZWVuIGFkZHJlc3NlcyBpbiB0aGUgaW8gc3BhY2UuCisKK1BsZWFzZSBhbHNvIGNvbnNpZGVyIGVuYWJsaW5nIHRoZSBnYW1lcG9ydCBvbiB0aGUgY2FyZCBpbiB0aGUgLT5vcGVuKCkKK2NhbGxiYWNrIGlmIHRoZSBpbyBpcyBtYXBwZWQgdG8gSVNBIHNwYWNlIC0gdGhpcyB3YXkgaXQnbGwgb2NjdXB5IHRoZSBpbworc3BhY2Ugb25seSB3aGVuIHNvbWV0aGluZyByZWFsbHkgaXMgdXNpbmcgaXQuIERpc2FibGUgaXQgYWdhaW4gaW4gdGhlCistPmNsb3NlKCkgY2FsbGJhY2suIFlvdSBhbHNvIGNhbiBzZWxlY3QgdGhlIGlvIGFkZHJlc3MgaW4gdGhlIC0+b3BlbigpCitjYWxsYmFjaywgc28gdGhhdCBpdCBkb2Vzbid0IGZhaWwgaWYgc29tZSBvZiB0aGUgcG9zc2libGUgYWRkcmVzc2VzIGFyZQorYWxyZWFkeSBvY2N1cGllZCBieSBvdGhlciBnYW1lcG9ydHMuCisKKzIuIE1lbW9yeSBtYXBwZWQgZ2FtZXBvcnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2hlbiBhIGdhbWVwb3J0IGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIE1NSU8sIHRoaXMgd2F5IGlzIHByZWZlcnJlZCwgYmVjYXVzZQoraXQgaXMgZmFzdGVyLCBhbGxvd2luZyBtb3JlIHJlYWRzIHBlciBzZWNvbmQuIFJlZ2lzdGVyaW5nIHN1Y2ggYSBnYW1lcG9ydAoraXNuJ3QgYXMgZWFzeSBhcyBhIGJhc2ljIElPIG9uZSwgYnV0IG5vdCBzbyBtdWNoIGNvbXBsZXg6CisKKwlzdHJ1Y3QgZ2FtZXBvcnQgZ2FtZXBvcnQ7CisKKwl2b2lkIG15X3RyaWdnZXIoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCkKKwl7CisJCW15X21taW8gPSAweGZmOworCX0KKworCXVuc2lnbmVkIGNoYXIgbXlfcmVhZChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQorCXsKKwkJcmV0dXJuIG15X21taW87CQorCX0KKworCWdhbWVwb3J0LnJlYWQgPSBteV9yZWFkOworCWdhbWVwb3J0LnRyaWdnZXIgPSBteV90cmlnZ2VyOworCWdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoJmdhbWVwb3J0KTsKKworMy4gQ29va2VkIG1vZGUgZ2FtZXBvcnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXJlIGFyZSBnYW1lcG9ydHMgdGhhdCBjYW4gcmVwb3J0IHRoZSBheGlzIHZhbHVlcyBhcyBudW1iZXJzLCB0aGF0IG1lYW5zCit0aGUgZHJpdmVyIGRvZXNuJ3QgaGF2ZSB0byBtZWFzdXJlIHRoZW0gdGhlIG9sZCB3YXkgLSBhbiBBREMgaXMgYnVpbHQgaW50bwordGhlIGdhbWVwb3J0LiBUbyByZWdpc3RlciBhIGNvb2tlZCBnYW1lcG9ydDoKKworCXN0cnVjdCBnYW1lcG9ydCBnYW1lcG9ydDsKKworCWludCBteV9jb29rZWRfcmVhZChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0LCBpbnQgKmF4ZXMsIGludCAqYnV0dG9ucykKKwl7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQlheGVzW2ldID0gbXlfbW1pb1tpXTsKKwkJYnV0dG9uc1tpXSA9IG15X21taW9bNF07CisJfQorCisJaW50IG15X29wZW4oc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCwgaW50IG1vZGUpCisJeworCQlyZXR1cm4gLShtb2RlICE9IEdBTUVQT1JUX01PREVfQ09PS0VEKTsKKwl9CisKKwlnYW1lcG9ydC5jb29rZWRfcmVhZCA9IG15X2Nvb2tlZF9yZWFkOworCWdhbWVwb3J0Lm9wZW4gPSBteV9vcGVuOworCWdhbWVwb3J0LmZ1enogPSA4OworCWdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoJmdhbWVwb3J0KTsKKworVGhlIG9ubHkgY29uZnVzaW5nIHRoaW5nIGhlcmUgaXMgdGhlIGZ1enogdmFsdWUuIEJlc3QgZGV0ZXJtaW5lZCBieQorZXhwZXJpbWVudGF0aW9uLCBpdCBpcyB0aGUgYW1vdW50IG9mIG5vaXNlIGluIHRoZSBBREMgZGF0YS4gUGVyZmVjdAorZ2FtZXBvcnRzIGNhbiBzZXQgdGhpcyB0byB6ZXJvLCBtb3N0IGNvbW1vbiBoYXZlIGZ1enogYmV0d2VlbiA4IGFuZCAzMi4KK1NlZSBhbmFsb2cuYyBhbmQgaW5wdXQuYyBmb3IgaGFuZGxpbmcgb2YgZnV6eiAtIHRoZSBmdXp6IHZhbHVlIGRldGVybWluZXMKK3RoZSBzaXplIG9mIGEgZ2F1c3NpYW4gZmlsdGVyIHdpbmRvdyB0aGF0IGlzIHVzZWQgdG8gZWxpbWluYXRlIHRoZSBub2lzZQoraW4gdGhlIGRhdGEuCisKKzQuIE1vcmUgY29tcGxleCBnYW1lcG9ydHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworR2FtZXBvcnRzIGNhbiBzdXBwb3J0IGJvdGggcmF3IGFuZCBjb29rZWQgbW9kZXMuIEluIHRoYXQgY2FzZSBjb21iaW5lIGVpdGhlcgorZXhhbXBsZXMgMSsyIG9yIDErMy4gR2FtZXBvcnRzIGNhbiBzdXBwb3J0IGludGVybmFsIGNhbGlicmF0aW9uIC0gc2VlIGJlbG93LAorYW5kIGFsc28gbGlnaHRuaW5nLmMgYW5kIGFuYWxvZy5jIG9uIGhvdyB0aGF0IHdvcmtzLiBJZiB5b3VyIGRyaXZlciBzdXBwb3J0cworbW9yZSB0aGFuIG9uZSBnYW1lcG9ydCBpbnN0YW5jZSBzaW11bHRhbmVvdXNseSwgdXNlIHRoZSAtPnByaXZhdGUgbWVtYmVyIG9mCit0aGUgZ2FtZXBvcnQgc3RydWN0IHRvIHBvaW50IHRvIHlvdXIgZGF0YS4KKworNS4gVW5yZWdpc3RlcmluZyBhIGdhbWVwb3J0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU2ltcGxlOgorCitnYW1lcG9ydF91bnJlZ2lzdGVyX3BvcnQoJmdhbWVwb3J0KTsKKworNi4gVGhlIGdhbWVwb3J0IHN0cnVjdHVyZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitzdHJ1Y3QgZ2FtZXBvcnQgeworCisJdm9pZCAqcHJpdmF0ZTsKKworQSBwcml2YXRlIHBvaW50ZXIgZm9yIGZyZWUgdXNlIGluIHRoZSBnYW1lcG9ydCBkcml2ZXIuIChOb3QgdGhlIGpveXN0aWNrCitkcml2ZXIhKQorCisJaW50IG51bWJlcjsKKworTnVtYmVyIGFzc2lnbmVkIHRvIHRoZSBnYW1lcG9ydCB3aGVuIHJlZ2lzdGVyZWQuIEluZm9ybWF0aW9uYWwgcHVycG9zZSBvbmx5LgorCisJaW50IGlvOworCitJL08gYWRkcmVzcyBmb3IgdXNlIHdpdGggcmF3IG1vZGUuIFlvdSBoYXZlIHRvIGVpdGhlciBzZXQgdGhpcywgb3IgLT5yZWFkKCkKK3RvIHNvbWUgdmFsdWUgaWYgeW91ciBnYW1lcG9ydCBzdXBwb3J0cyByYXcgbW9kZS4KKworCWludCBzcGVlZDsKKworUmF3IG1vZGUgc3BlZWQgb2YgdGhlIGdhbWVwb3J0IHJlYWRzIGluIHRob3VzYW5kcyBvZiByZWFkcyBwZXIgc2Vjb25kLgorCisJaW50IGZ1eno7CisKK0lmIHRoZSBnYW1lcG9ydCBzdXBwb3J0cyBjb29rZWQgbW9kZSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGEgdmFsdWUgdGhhdAorcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIG5vaXNlIGluIHRoZSBkYXRhLiBTZWUgc2VjdGlvbiAzLgorCisJdm9pZCAoKnRyaWdnZXIpKHN0cnVjdCBnYW1lcG9ydCAqKTsKKworVHJpZ2dlci4gVGhpcyBmdW5jdGlvbiBzaG91bGQgdHJpZ2dlciB0aGUgbnM1NTggb25lc2hvdHMuIElmIHNldCB0byBOVUxMLAorb3V0YigweGZmLCBpbykgd2lsbCBiZSB1c2VkLgorCisJdW5zaWduZWQgY2hhciAoKnJlYWQpKHN0cnVjdCBnYW1lcG9ydCAqKTsKKworUmVhZCB0aGUgYnV0dG9ucyBhbmQgbnM1NTggb25lc2hvdCBiaXRzLiBJZiBzZXQgdG8gTlVMTCwgaW5iKGlvKSB3aWxsIGJlCit1c2VkIGluc3RlYWQuCisKKwlpbnQgKCpjb29rZWRfcmVhZCkoc3RydWN0IGdhbWVwb3J0ICosIGludCAqYXhlcywgaW50ICpidXR0b25zKTsJCisKK0lmIHRoZSBnYW1lcG9ydCBzdXBwb3J0cyBjb29rZWQgbW9kZSwgaXQgc2hvdWxkIHBvaW50IHRoaXMgdG8gaXRzIGNvb2tlZAorcmVhZCBmdW5jdGlvbi4gSXQgc2hvdWxkIGZpbGwgYXhlc1swLi4zXSB3aXRoIGZvdXIgdmFsdWVzIG9mIHRoZSBqb3lzdGljayBheGVzCithbmQgYnV0dG9uc1swXSB3aXRoIGZvdXIgYml0cyByZXByZXNlbnRpbmcgdGhlIGJ1dHRvbnMuCisKKwlpbnQgKCpjYWxpYnJhdGUpKHN0cnVjdCBnYW1lcG9ydCAqLCBpbnQgKmF4ZXMsIGludCAqbWF4KTsgCisKK0Z1bmN0aW9uIGZvciBjYWxpYnJhdGluZyB0aGUgQURDIGhhcmR3YXJlLiBXaGVuIGNhbGxlZCwgYXhlc1swLi4zXSBzaG91bGQgYmUKK3ByZS1maWxsZWQgYnkgY29va2VkIGRhdGEgYnkgdGhlIGNhbGxlciwgbWF4WzAuLjNdIHNob3VsZCBiZSBwcmUtZmlsbGVkIHdpdGgKK2V4cGVjdGVkIG1heGltdW1zIGZvciBlYWNoIGF4aXMuIFRoZSBjYWxpYnJhdGUoKSBmdW5jdGlvbiBzaG91bGQgc2V0IHRoZQorc2Vuc2l0aXZpdHkgb2YgdGhlIEFEQyBoYXJkd2FyZSBzbyB0aGF0IHRoZSBtYXhpbXVtcyBmaXQgaW4gaXRzIHJhbmdlIGFuZAorcmVjb21wdXRlIHRoZSBheGVzW10gdmFsdWVzIHRvIG1hdGNoIHRoZSBuZXcgc2Vuc2l0aXZpdHkgb3IgcmUtcmVhZCB0aGVtIGZyb20KK3RoZSBoYXJkd2FyZSBzbyB0aGF0IHRoZXkgZ2l2ZSB2YWxpZCB2YWx1ZXMuIAorCisJaW50ICgqb3Blbikoc3RydWN0IGdhbWVwb3J0ICosIGludCBtb2RlKTsKKworT3BlbigpIHNlcnZlcyB0d28gcHVycG9zZXMuIEZpcnN0IGEgZHJpdmVyIGVpdGhlciBvcGVucyB0aGUgcG9ydCBpbiByYXcgb3IKK2luIGNvb2tlZCBtb2RlLCB0aGUgb3BlbigpIGNhbGxiYWNrIGNhbiBkZWNpZGUgd2hpY2ggbW9kZXMgYXJlIHN1cHBvcnRlZC4KK1NlY29uZCwgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYW4gaGFwcGVuIGhlcmUuIFRoZSBwb3J0IGNhbiBhbHNvIGJlIGVuYWJsZWQKK2hlcmUuIFByaW9yIHRvIHRoaXMgY2FsbCwgb3RoZXIgZmllbGRzIG9mIHRoZSBnYW1lcG9ydCBzdHJ1Y3QgKG5hbWVseSB0aGUgaW8KK21lbWJlcikgbmVlZCBub3QgdG8gYmUgdmFsaWQuCisKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCBnYW1lcG9ydCAqKTsKKworQ2xvc2UoKSBzaG91bGQgZnJlZSB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBvcGVuLCBwb3NzaWJseSBkaXNhYmxpbmcgdGhlCitnYW1lcG9ydC4KKworCXN0cnVjdCBnYW1lcG9ydF9kZXYgKmRldjsKKwlzdHJ1Y3QgZ2FtZXBvcnQgKm5leHQ7CisKK0ZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIGdhbWVwb3J0IGxheWVyLgorCit9OworCitFbmpveSEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvaWZvcmNlLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvaWZvcmNlLXByb3RvY29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWRmNGNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pZm9yY2UtcHJvdG9jb2wudHh0CkBAIC0wLDAgKzEsMjU0IEBACisqKiBJbnRyb2R1Y3Rpb24NCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB3aGF0IEkgbWFuYWdlZCB0byBkaXNjb3ZlciBhYm91dCB0aGUgcHJvdG9jb2wgdXNlZCB0bw0KK3NwZWNpZnkgZm9yY2UgZWZmZWN0cyB0byBJLUZvcmNlIDIuMCBkZXZpY2VzLiAgTm9uZSBvZiB0aGlzIGluZm9ybWF0aW9uIGNvbWVzDQorZnJvbSBJbW1lcnNlLiBUaGF0J3Mgd2h5IHlvdSBzaG91bGQgbm90IHRydXN0IHdoYXQgaXMgd3JpdHRlbiBpbiB0aGlzDQorZG9jdW1lbnQuIFRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gaGVscCB1bmRlcnN0YW5kaW5nIHRoZSBwcm90b2NvbC4NCitUaGlzIGlzIG5vdCBhIHJlZmVyZW5jZS4gQ29tbWVudHMgYW5kIGNvcnJlY3Rpb25zIGFyZSB3ZWxjb21lLiAgVG8gY29udGFjdCBtZSwNCitzZW5kIGFuIGVtYWlsIHRvOiBkZW5ldXhAaWZyYW5jZS5jb20NCisNCisqKiBXQVJOSU5HICoqDQorSSBtYXkgbm90IGJlIGhlbGQgcmVzcG9uc2libGUgZm9yIGFueSBkYW1tYWdlIG9yIGhhcm0gY2F1c2VkIGlmIHlvdSB0cnkgdG8NCitzZW5kIGRhdGEgdG8geW91ciBJLUZvcmNlIGRldmljZSBiYXNlZCBvbiB3aGF0IHlvdSByZWFkIGluIHRoaXMgZG9jdW1lbnQuDQorDQorKiogUHJlbGltaW5hcnkgTm90ZXM6DQorQWxsIHZhbHVlcyBhcmUgaGV4YWRlY2ltYWwgd2l0aCBiaWctZW5kaWFuIGVuY29kaW5nIChtc2Igb24gdGhlIGxlZnQpLiBCZXdhcmUsDQordmFsdWVzIGluc2lkZSBwYWNrZXRzIGFyZSBlbmNvZGVkIHVzaW5nIGxpdHRsZS1lbmRpYW4uICBCeXRlcyB3aG9zZSByb2xlcyBhcmUNCit1bmtub3duIGFyZSBtYXJrZWQgPz8/ICBJbmZvcm1hdGlvbiB0aGF0IG5lZWRzIGRlZXBlciBpbnNwZWN0aW9uIGlzIG1hcmtlZCAoPykNCisNCisqKiBHZW5lcmFsIGZvcm0gb2YgYSBwYWNrZXQgKioNCitUaGlzIGlzIGhvdyBwYWNrZXRzIGxvb2sgd2hlbiB0aGUgZGV2aWNlIHVzZXMgdGhlIHJzMjMyIHRvIGNvbW11bmljYXRlLg0KKzJCIE9QIExFTiBEQVRBIENTDQorQ1MgaXMgdGhlIGNoZWNrc3VtLiBJdCBpcyBlcXVhbCB0byB0aGUgZXhjbHVzaXZlIG9yIG9mIGFsbCBieXRlcy4NCisNCitXaGVuIHVzaW5nIFVTQjoNCitPUCBEQVRBDQorVGhlIDJCLCBMRU4gYW5kIENTIGZpZWxkcyBoYXZlIGRpc2FwcGVhcmVkLCBwcm9iYWJseSBiZWNhdXNlIFVTQiBoYW5kbGVzIGZyYW1lcyBhbmQNCitkYXRhIGNvcnJ1cHRpb24gaXMgaGFuZGxlZCBvciB1bnNpZ25pZmljYW50Lg0KKw0KK0ZpcnN0LCBJIGRlc2NyaWJlIGVmZmVjdHMgdGhhdCBhcmUgc2VudCBieSB0aGUgZGV2aWNlIHRvIHRoZSBjb21wdXRlcg0KKw0KKyoqIERldmljZSBpbnB1dCBzdGF0ZQ0KK1RoaXMgcGFja2V0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHN0YXRlIG9mIGVhY2ggYnV0dG9uIGFuZCB0aGUgdmFsdWUgb2YgZWFjaA0KK2F4aXMNCitPUD0gMDEgZm9yIGEgam95c3RpY2ssIDAzIGZvciBhIHdoZWVsDQorTEVOPSBWYXJpZXMgZnJvbSBkZXZpY2UgdG8gZGV2aWNlDQorMDAgWC1BeGlzIGxzYg0KKzAxIFgtQXhpcyBtc2INCiswMiBZLUF4aXMgbHNiLCBvciBnYXMgcGVkYWwgZm9yIGEgd2hlZWwNCiswMyBZLUF4aXMgbXNiLCBvciBicmFrZSBwZWRhbCBmb3IgYSB3aGVlbA0KKzA0IFRocm90dGxlDQorMDUgQnV0dG9ucw0KKzA2IExvd2VyIDQgYml0czogQnV0dG9ucw0KKyAgIFVwcGVyIDQgYml0czogSGF0DQorMDcgUnVkZGVyDQorDQorKiogRGV2aWNlIGVmZmVjdHMgc3RhdGVzDQorT1A9IDAyDQorTEVOPSBWYXJpZXMNCiswMCA/IEJpdCAxIChWYWx1ZSAyKSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRlYWRtYW4gc3dpdGNoDQorMDEgQml0IDggaXMgc2V0IGlmIHRoZSBlZmZlY3QgaXMgcGxheWluZy4gQml0cyAwIHRvIDcgYXJlIHRoZSBlZmZlY3QgaWQuDQorMDIgPz8NCiswMyBBZGRyZXNzIG9mIHBhcmFtZXRlciBibG9jayBjaGFuZ2VkIChsc2IpDQorMDQgQWRkcmVzcyBvZiBwYXJhbWV0ZXIgYmxvY2sgY2hhbmdlZCAobXNiKQ0KKzA1IEFkZHJlc3Mgb2Ygc2Vjb25kIHBhcmFtZXRlciBibG9jayBjaGFuZ2VkIChsc2IpDQorLi4uIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlciBibG9ja3MgdXBkYXRlZA0KKw0KKyoqIEZvcmNlIGVmZmVjdCAqKg0KK09QPSAgMDENCitMRU49IDBlDQorMDAgQ2hhbm5lbCAod2hlbiBwbGF5aW5nIHNldmVyYWwgZWZmZWN0cyBhdCB0aGUgc2FtZSB0aW1lLCBlYWNoIG11c3QgYmUgYXNzaWduZWQgYSBjaGFubmVsKQ0KKzAxIFdhdmUgZm9ybQ0KKwlWYWwgMDAgQ29uc3RhbnQNCisJVmFsIDIwIFNxdWFyZQ0KKwlWYWwgMjEgVHJpYW5nbGUNCisJVmFsIDIyIFNpbmUNCisJVmFsIDIzIFNhd3Rvb3RoIHVwDQorCVZhbCAyNCBTYXd0b290aCBkb3duDQorCVZhbCA0MCBTcHJpbmcgKEZvcmNlID0gZihwb3MpKQ0KKwlWYWwgNDEgRnJpY3Rpb24gKEZvcmNlID0gZih2ZWxvY2l0eSkpIGFuZCBJbmVydGlhIChGb3JjZSA9IGYoYWNjZWxlcmF0aW9uKSkNCisNCisJDQorMDIgQXhlcyBhZmZlY3RlZCBhbmQgdHJpZ2dlcg0KKwlCaXRzIDQtNzogVmFsIDIgPSBlZmZlY3QgYWxvbmcgb25lIGF4aXMuIEJ5dGUgMDUgaW5kaWNhdGVzIGRpcmVjdGlvbg0KKwkgICAgICAgICAgVmFsIDQgPSBYIGF4aXMgb25seS4gQnl0ZSAwNSBtdXN0IGNvbnRhaW4gNWENCisJICAgICAgICAgIFZhbCA4ID0gWSBheGlzIG9ubHkuIEJ5dGUgMDUgbXVzdCBjb250YWluIGI0DQorCSAgICAgICAgICBWYWwgYyA9IFggYW5kIFkgYXhlcy4gQnl0ZXMgMDUgbXVzdCBjb250YWluIDYwDQorCUJpdHMgMC0zOiBWYWwgMCA9IE5vIHRyaWdnZXINCisJICAgICAgICAgIFZhbCB4KzEgPSBCdXR0b24geCB0cmlnZ2VycyB0aGUgZWZmZWN0DQorCVdoZW4gdGhlIHdob2xlIGJ5dGUgaXMgMCwgY2FuY2VsIHRoZSBwcmV2aW91c2x5IHNldCB0cmlnZ2VyDQorDQorMDMtMDQgRHVyYXRpb24gb2YgZWZmZWN0IChsaXR0bGUgZW5kaWFuIGVuY29kaW5nLCBpbiBtcykNCisNCiswNSBEaXJlY3Rpb24gb2YgZWZmZWN0LCBpZiBhcHBsaWNhYmxlLiBFbHNlLCBzZWUgMDIgZm9yIHZhbHVlIHRvIGFzc2lnbi4NCisNCiswNi0wNyBNaW5pbXVtIHRpbWUgYmV0d2VlbiB0cmlnZ2VyaW5nLg0KKw0KKzA4LTA5IEFkZHJlc3Mgb2YgcGVyaW9kaWNpdHkgb3IgbWFnbml0dWRlIHBhcmFtZXRlcnMNCiswYS0wYiBBZGRyZXNzIG9mIGF0dGFjayBhbmQgZmFkZSBwYXJhbWV0ZXJzLCBvciBmZmZmIGlmIG5vbmUuDQorKm9yKg0KKzA4LTA5IEFkZHJlc3Mgb2YgaW50ZXJhY3RpdmUgcGFyYW1ldGVycyBmb3IgWC1heGlzLCBvciBmZmZmIGlmIG5vdCBhcHBsaWNhYmxlDQorMGEtMGIgQWRkcmVzcyBvZiBpbnRlcmFjdGl2ZSBwYXJhbWV0ZXJzIGZvciBZLWF4aXMsIG9yIGZmZmYgaWYgbm90IGFwcGxpY2FibGUNCisNCiswYy0wZCBEZWxheSBiZWZvcmUgZXhlY3V0aW9uIG9mIGVmZmVjdCAobGl0dGxlIGVuZGlhbiBlbmNvZGluZywgaW4gbXMpDQorDQorDQorKiogVGltZSBiYXNlZCBwYXJhbWV0ZXJzICoqDQorDQorKioqIEF0dGFjayBhbmQgZmFkZSAqKioNCitPUD0gIDAyDQorTEVOPSAwOA0KKzAwLTAxIEFkZHJlc3Mgd2hlcmUgdG8gc3RvcmUgdGhlIHBhcmFtZXRlcmVzDQorMDItMDMgRHVyYXRpb24gb2YgYXR0YWNrIChsaXR0bGUgZW5kaWFuIGVuY29kaW5nLCBpbiBtcykNCiswNCBMZXZlbCBhdCBlbmQgb2YgYXR0YWNrLiBTaWduZWQgYnl0ZS4NCiswNS0wNiBEdXJhdGlvbiBvZiBmYWRlLg0KKzA3IExldmVsIGF0IGVuZCBvZiBmYWRlLg0KKw0KKyoqKiBNYWduaXR1ZGUgKioqDQorT1A9ICAwMw0KK0xFTj0gMDMNCiswMC0wMSBBZGRyZXNzDQorMDIgTGV2ZWwuIFNpZ25lZCBieXRlLg0KKw0KKyoqKiBQZXJpb2RpY2l0eSAqKioNCitPUD0gIDA0DQorTEVOPSAwNw0KKzAwLTAxIEFkZHJlc3MNCiswMiBNYWduaXR1ZGUuIFNpZ25lZCBieXRlLg0KKzAzIE9mZnNldC4gU2lnbmVkIGJ5dGUuDQorMDQgUGhhc2UuIFZhbCAwMCA9IDAgZGVnLCBWYWwgNDAgPSA5MCBkZWdzLg0KKzA1LTA2IFBlcmlvZCAobGl0dGxlIGVuZGlhbiBlbmNvZGluZywgaW4gbXMpDQorDQorKiogSW50ZXJhY3RpdmUgcGFyYW1ldGVycyAqKg0KK09QPSAgMDUNCitMRU49IDBhDQorMDAtMDEgQWRkcmVzcw0KKzAyIFBvc2l0aXZlIENvZWZmDQorMDMgTmVnYXRpdmUgQ29lZmYNCiswNCswNSBPZmZzZXQgKGNlbnRlcikNCiswNiswNyBEZWFkIGJhbmQgKFZhbCAwMUY0ID0gNTAwMCAoZGVjaW1hbCkpDQorMDggUG9zaXRpdmUgc2F0dXJhdGlvbiAoVmFsIDBhID0gMTAwMCAoZGVjaW1hbCkgVmFsIDY0ID0gMTAwMDAgKGRlY2ltYWwpKQ0KKzA5IE5lZ2F0aXZlIHNhdHVyYXRpb24NCisNCitUaGUgZW5jb2RpbmcgaXMgYSBiaXQgZnVubnkgaGVyZTogRm9yIGNvZWZmcywgdGhlc2UgYXJlIHNpZ25lZCB2YWx1ZXMuIFRoZQ0KK21heGltdW0gdmFsdWUgaXMgNjQgKDEwMCBkZWNpbWFsKSwgdGhlIG1pbiBpcyA5Yy4NCitGb3IgdGhlIG9mZnNldCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgRkUwQywgdGhlIG1heGltdW0gdmFsdWUgaXMgMDFGNC4NCitGb3IgdGhlIGRlYWRiYW5kLCB0aGUgbWluaW11bSB2YWx1ZSBpcyAwLCB0aGUgbWF4IGlzIDAzRTguDQorDQorKiogQ29udHJvbHMgKioNCitPUD0gIDQxDQorTEVOPSAwMw0KKzAwIENoYW5uZWwNCiswMSBTdGFydC9TdG9wDQorCVZhbCAwMDogU3RvcA0KKwlWYWwgMDE6IFN0YXJ0IGFuZCBwbGF5IG9uY2UuDQorCVZhbCA0MTogU3RhcnQgYW5kIHBsYXkgbiB0aW1lcyAoU2VlIGJ5dGUgMDIgYmVsb3cpDQorMDIgTnVtYmVyIG9mIGl0ZXJhdGlvbnMgbi4NCisNCisqKiBJbml0ICoqDQorDQorKioqIFF1ZXJ5aW5nIGZlYXR1cmVzICoqKg0KK09QPSAgZmYNCitRdWVyeSBjb21tYW5kLiBMZW5ndGggdmFyaWVzIGFjY29yZGluZyB0byB0aGUgcXVlcnkgdHlwZS4NCitUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhpcyBwYWNrZXQgaXM6DQorZmYgMDEgUVVFUlkgW0lOREVYXSBDSEVDS1NVTQ0KK3JlcG9uc2VzIGFyZSBvZiB0aGUgc2FtZSBmb3JtOg0KK0ZGIExFTiBRVUVSWSBWQUxVRV9RVUVSSUVEIENIRUNLU1VNMg0KK3doZXJlIExFTiA9IDEgKyBsZW5ndGgoVkFMVUVfUVVFUklFRCkNCisNCisqKioqIFF1ZXJ5IHJhbSBzaXplICoqKioNCitRVUVSWSA9IDQyICgnQid1ZmZlciBzaXplKQ0KK1RoZSBkZXZpY2Ugc2hvdWxkIHJlcGx5IHdpdGggdGhlIHNhbWUgcGFja2V0IHBsdXMgdHdvIGFkZGl0aW9ubmFsIGJ5dGVzDQorY29udGFpbmluZyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5Og0KK2ZmIDAzIDQyIDAzIGU4IENTIHdvdWxkIG1lYW4gdGhhdCB0aGUgZGV2aWNlIGhhcyAxMDAwIGJ5dGVzIG9mIHJhbSBhdmFpbGFibGUuDQorDQorKioqKiBRdWVyeSBudW1iZXIgb2YgZWZmZWN0cyAqKioqDQorUVVFUlkgPSA0ZSAoJ04ndW1iZXIgb2YgZWZmZWN0cykNCitUaGUgZGV2aWNlIHNob3VsZCByZXNwb25kIGJ5IHNlbmRpbmcgdGhlIG51bWJlciBvZiBlZmZlY3RzIHRoYXQgY2FuIGJlIHBsYXllZA0KK2F0IHRoZSBzYW1lIHRpbWUgKG9uZSBieXRlKQ0KK2ZmIDAyIDRlIDE0IENTIHdvdWxkIHN0YW5kIGZvciAyMCBlZmZlY3RzLg0KKw0KKyoqKiogVmVuZG9yJ3MgaWQgKioqKg0KK1FVRVJZID0gNGQgKCdNJ2FudWZhY3R1cmVyKQ0KK1F1ZXJ5IHRoZSB2ZW5kb3JzJ2lkICgyIGJ5dGVzKQ0KKw0KKyoqKiogUHJvZHVjdCBpZCAqKioqKg0KK1FVRVJZID0gNTAgKCdQJ3JvZHVjdCkNCitRdWVyeSB0aGUgcHJvZHVjdCBpZCAoMiBieXRlcykNCisNCisqKioqIE9wZW4gZGV2aWNlICoqKioNCitRVUVSWSA9IDRmICgnTydwZW4pIA0KK05vIGRhdGEgcmV0dXJuZWQuDQorDQorKioqKiBDbG9zZSBkZXZpY2UgKioqKioNCitRVUVSWSA9IDQzICgnQycpbG9zZQ0KK05vIGRhdGEgcmV0dXJuZWQuDQorDQorKioqKiBRdWVyeSBlZmZlY3QgKioqKg0KK1FVRVJZID0gNDUgKCdFJykgDQorU2VuZCBlZmZlY3QgdHlwZS4NCitSZXR1cm5zIG5vbnplcm8gaWYgc3VwcG9ydGVkICgyIGJ5dGVzKQ0KKw0KKyoqKiogRmlybXdhcmUgVmVyc2lvbiAqKioqDQorUVVFUlkgPSA1NiAoJ1YnZXJzaW9uKQ0KK1NlbmRzIGJhY2sgMyBieXRlcyAtIG1ham9yLCBtaW5vciwgc3VibWlub3INCisNCisqKiogSW5pdGlhbGlzYXRpb24gb2YgdGhlIGRldmljZSAqKioNCisNCisqKioqIFNldCBDb250cm9sICoqKioNCishISEgRGV2aWNlIGRlcGVuZGVudCwgY2FuIGJlIGRpZmZlcmVudCBvbiBkaWZmZXJlbnQgbW9kZWxzICEhIQ0KK09QPSAgNDAgPGlkeD4gPHZhbD4gWzx2YWw+XQ0KK0xFTj0gMiBvciAzDQorMDAgSWR4DQorICAgSWR4IDAwIFNldCBkZWFkIHpvbmUgKDAuLjIwNDgpIA0KKyAgIElkeCAwMSBJZ25vcmUgRGVhZG1hbiBzZW5zb3IgKDAuLjEpICAgICANCisgICBJZHggMDIgRW5hYmxlIGNvbW0gd2F0Y2hkb2cgKDAuLjEpICAgICANCisgICBJZHggMDMgU2V0IHRoZSBzdHJlbmd0aCBvZiB0aGUgc3ByaW5nICgwLi4xMDApICAgDQorICAgSWR4IDA0IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBzcHJpbmcgKDAvMSkNCisgICBJZHggMDUgU2V0IGF4aXMgc2F0dXJhdGlvbiB0aHJlc2hvbGQgKDAuLjIwNDgpIA0KKw0KKyoqKiogU2V0IEVmZmVjdCBTdGF0ZSAqKioqDQorT1A9ICA0MiA8dmFsPg0KK0xFTj0gMQ0KKzAwIFN0YXRlDQorICAgQml0IDMgUGF1c2UgZm9yY2UgZmVlZGJhY2sNCisgICBCaXQgMiBFbmFibGUgZm9yY2UgZmVlZGJhY2sNCisgICBCaXQgMCBTdG9wIGFsbCBlZmZlY3RzDQorDQorKioqKiBTZXQgb3ZlcmFsbCBnYWluICoqKioNCitPUD0gIDQzIDx2YWw+DQorTEVOPSAxDQorMDAgR2Fpbg0KKyAgIFZhbCAwMCA9IDAlDQorICAgVmFsIDQwID0gNTAlDQorICAgVmFsIDgwID0gMTAwJQ0KKw0KKyoqIFBhcmFtZXRlciBtZW1vcnkgKioNCisNCitFYWNoIGRldmljZSBoYXMgYSBjZXJ0YWluIGFtb3VudCBvZiBtZW1vcnkgdG8gc3RvcmUgcGFyYW1ldGVycyBvZiBlZmZlY3RzLg0KK1RoZSBhbW91bnQgb2YgUkFNIG1heSB2YXJ5LCBJIGVuY291bnRlcmVkIHZhbHVlcyBmcm9tIDIwMCB0byAxMDAwIGJ5dGVzLiBCZWxvdw0KK2lzIHRoZSBhbW91bnQgb2YgbWVtb3J5IGFwcGFyZW50bHkgbmVlZGVkIGZvciBldmVyeSBzZXQgb2YgcGFyYW1ldGVyczoNCisgLSBwZXJpb2QgOiAwYw0KKyAtIG1hZ25pdHVkZSA6IDAyDQorIC0gYXR0YWNrIGFuZCBmYWRlIDogMGUNCisgLSBpbnRlcmFjdGl2ZSA6IDA4DQorDQorKiogQXBwZW5kaXg6IEhvdyB0byBzdHVkeSB0aGUgcHJvdG9jb2wgPyAqKg0KKw0KKzEuIEdlbmVyYXRlIGVmZmVjdHMgdXNpbmcgdGhlIGZvcmNlIGVkaXRvciBwcm92aWRlZCB3aXRoIHRoZSBEaXJlY3RYIFNESywgb3IgdXNlIEltbWVyc2lvbiBTdHVkaW8gKGZyZWVseSBhdmFpbGFibGUgYXQgdGhlaXIgd2ViIHNpdGUgaW4gdGhlIGRldmVsb3BlciBzZWN0aW9uOiB3d3cuaW1tZXJzaW9uLmNvbSkNCisyLiBTdGFydCBhIHNvZnQgc3B5aW5nIFJTMjMyIG9yIFVTQiAoZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBjb25uZWN0ZWQgeW91ciBqb3lzdGljay93aGVlbCkuIEkgdXNlZCBDb21Qb3J0U3B5IGZyb20gZkNvZGVyIChhbHBoYSB2ZXJzaW9uISkNCiszLiBQbGF5IHRoZSBlZmZlY3QsIGFuZCB3YXRjaCB3aGF0IGhhcHBlbnMgb24gdGhlIHNweSBzY3JlZW4uDQorDQorQSBmZXcgd29yZHMgYWJvdXQgQ29tUG9ydFNweToNCitBdCBmaXJzdCBnbGFuY2UsIHRoaXMgc29mdCBzZWVtcywgaHVtLCB3ZWxsLi4uIGJ1Z2d5LiBJbiBmYWN0LCBkYXRhIGFwcGVhciB3aXRoIGEgZmV3IHNlY29uZHMgbGF0ZW5jeS4gUGVyc29ubmFseSwgSSByZXN0YXJ0IGl0IGV2ZXJ5IHRpbWUgSSBwbGF5IGFuIGVmZmVjdC4NCitSZW1lbWJlciBpdCdzIGZyZWUgKGFzIGluIGZyZWUgYmVlcikgYW5kIGFscGhhIQ0KKw0KKyoqIFVSTFMgKioNCitDaGVjayB3d3cuaW1tZXJzZS5jb20gZm9yIEltbWVyc2lvbiBTdHVkaW8sIGFuZCB3d3cuZmNvZGVyLmNvbSBmb3IgQ29tUG9ydFNweS4NCisNCisqKiBBdXRob3Igb2YgdGhpcyBkb2N1bWVudCAqKg0KK0pvaGFubiBEZW5ldXggPGRlbmV1eEBpZnJhbmNlLmNvbT4NCitIb21lIHBhZ2UgYXQgaHR0cDovL3d3dy5lc2lsLnVuaXYtbXJzLmZyL35qZGVuZXV4L3Byb2plY3RzL2ZmLw0KKw0KK0FkZGl0aW9ucyBieSBWb2p0ZWNoIFBhdmxpay4NCisNCitJLUZvcmNlIGlzIHRyYWRlbWFyayBvZiBJbW1lcnNpb24gQ29ycC4NCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LXByb2dyYW1taW5nLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQtcHJvZ3JhbW1pbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGUwNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC1wcm9ncmFtbWluZy50eHQKQEAgLTAsMCArMSwyODEgQEAKKyRJZDogaW5wdXQtcHJvZ3JhbW1pbmcudHh0LHYgMS40IDIwMDEvMDUvMDQgMDk6NDc6MTQgdm9qdGVjaCBFeHAgJAorCitQcm9ncmFtbWluZyBpbnB1dCBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzEuIENyZWF0aW5nIGFuIGlucHV0IGRldmljZSBkcml2ZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworMS4wIFRoZSBzaW1wbGVzdCBleGFtcGxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSGVyZSBjb21lcyBhIHZlcnkgc2ltcGxlIGV4YW1wbGUgb2YgYW4gaW5wdXQgZGV2aWNlIGRyaXZlci4gVGhlIGRldmljZSBoYXMKK2p1c3Qgb25lIGJ1dHRvbiBhbmQgdGhlIGJ1dHRvbiBpcyBhY2Nlc3NpYmxlIGF0IGkvbyBwb3J0IEJVVFRPTl9QT1JULiBXaGVuCitwcmVzc2VkIG9yIHJlbGVhc2VkIGEgQlVUVE9OX0lSUSBoYXBwZW5zLiBUaGUgZHJpdmVyIGNvdWxkIGxvb2sgbGlrZToKKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgdm9pZCBidXR0b25faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15LCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaW5wdXRfcmVwb3J0X2tleSgmYnV0dG9uX2RldiwgQlROXzEsIGluYihCVVRUT05fUE9SVCkgJiAxKTsKKwlpbnB1dF9zeW5jKCZidXR0b25fZGV2KTsKK30KKworc3RhdGljIGludCBfX2luaXQgYnV0dG9uX2luaXQodm9pZCkKK3sKKwlpZiAocmVxdWVzdF9pcnEoQlVUVE9OX0lSUSwgYnV0dG9uX2ludGVycnVwdCwgMCwgImJ1dHRvbiIsIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidXR0b24uYzogQ2FuJ3QgYWxsb2NhdGUgaXJxICVkXG4iLCBidXR0b25faXJxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICB9CisJCisJYnV0dG9uX2Rldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWJ1dHRvbl9kZXYua2V5Yml0W0xPTkcoQlROXzApXSA9IEJJVChCVE5fMCk7CisJCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZidXR0b25fZGV2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJ1dHRvbl9leGl0KHZvaWQpCit7CisgICAgICAgIGlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZidXR0b25fZGV2KTsKKwlmcmVlX2lycShCVVRUT05fSVJRLCBidXR0b25faW50ZXJydXB0KTsKK30KKworbW9kdWxlX2luaXQoYnV0dG9uX2luaXQpOworbW9kdWxlX2V4aXQoYnV0dG9uX2V4aXQpOworCisxLjEgV2hhdCB0aGUgZXhhbXBsZSBkb2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IGl0IGhhcyB0byBpbmNsdWRlIHRoZSA8bGludXgvaW5wdXQuaD4gZmlsZSwgd2hpY2ggaW50ZXJmYWNlcyB0byB0aGUKK2lucHV0IHN1YnN5c3RlbS4gVGhpcyBwcm92aWRlcyBhbGwgdGhlIGRlZmluaXRpb25zIG5lZWRlZC4KKworSW4gdGhlIF9pbml0IGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgZWl0aGVyIHVwb24gbW9kdWxlIGxvYWQgb3Igd2hlbgorYm9vdGluZyB0aGUga2VybmVsLCBpdCBncmFicyB0aGUgcmVxdWlyZWQgcmVzb3VyY2VzIChpdCBzaG91bGQgYWxzbyBjaGVjaworZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgZGV2aWNlKS4KKworVGhlbiBpdCBzZXRzIHRoZSBpbnB1dCBiaXRmaWVsZHMuIFRoaXMgd2F5IHRoZSBkZXZpY2UgZHJpdmVyIHRlbGxzIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGlucHV0IHN5c3RlbXMgd2hhdCBpdCBpcyAtIHdoYXQgZXZlbnRzIGNhbiBiZSBnZW5lcmF0ZWQgb3IKK2FjY2VwdGVkIGJ5IHRoaXMgaW5wdXQgZGV2aWNlLiBPdXIgZXhhbXBsZSBkZXZpY2UgY2FuIG9ubHkgZ2VuZXJhdGUgRVZfS0VZIHR5cGUKK2V2ZW50cywgYW5kIGZyb20gdGhvc2Ugb25seSBCVE5fMCBldmVudCBjb2RlLiBUaHVzIHdlIG9ubHkgc2V0IHRoZXNlIHR3bworYml0cy4gV2UgY291bGQgaGF2ZSB1c2VkCisKKwlzZXRfYml0KEVWX0tFWSwgYnV0dG9uX2Rldi5ldmJpdCk7CisJc2V0X2JpdChCVE5fMCwgYnV0dG9uX2Rldi5rZXliaXQpOworCithcyB3ZWxsLCBidXQgd2l0aCBtb3JlIHRoYW4gc2luZ2xlIGJpdHMgdGhlIGZpcnN0IGFwcHJvYWNoIHRlbmRzIHRvIGJlCitzaG9ydGVyLiAKKworVGhlbiB0aGUgZXhhbXBsZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBpbnB1dCBkZXZpY2Ugc3RydWN0dXJlIGJ5IGNhbGxpbmcKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmYnV0dG9uX2Rldik7CisKK1RoaXMgYWRkcyB0aGUgYnV0dG9uX2RldiBzdHJ1Y3R1cmUgdG8gbGlua2VkIGxpc3RzIG9mIHRoZSBpbnB1dCBkcml2ZXIgYW5kCitjYWxscyBkZXZpY2UgaGFuZGxlciBtb2R1bGVzIF9jb25uZWN0IGZ1bmN0aW9ucyB0byB0ZWxsIHRoZW0gYSBuZXcgaW5wdXQKK2RldmljZSBoYXMgYXBwZWFyZWQuIEJlY2F1c2UgdGhlIF9jb25uZWN0IGZ1bmN0aW9ucyBtYXkgY2FsbCBrbWFsbG9jKCwKK0dGUF9LRVJORUwpLCB3aGljaCBjYW4gc2xlZXAsIGlucHV0X3JlZ2lzdGVyX2RldmljZSgpIG11c3Qgbm90IGJlIGNhbGxlZAorZnJvbSBhbiBpbnRlcnJ1cHQgb3Igd2l0aCBhIHNwaW5sb2NrIGhlbGQuCisKK1doaWxlIGluIHVzZSwgdGhlIG9ubHkgdXNlZCBmdW5jdGlvbiBvZiB0aGUgZHJpdmVyIGlzCisKKwlidXR0b25faW50ZXJydXB0KCkKKword2hpY2ggdXBvbiBldmVyeSBpbnRlcnJ1cHQgZnJvbSB0aGUgYnV0dG9uIGNoZWNrcyBpdHMgc3RhdGUgYW5kIHJlcG9ydHMgaXQKK3ZpYSB0aGUgCisKKwlpbnB1dF9yZXBvcnRfa2V5KCkKKworY2FsbCB0byB0aGUgaW5wdXQgc3lzdGVtLiBUaGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGludGVycnVwdAorcm91dGluZSBpc24ndCByZXBvcnRpbmcgdHdvIHNhbWUgdmFsdWUgZXZlbnRzIChwcmVzcywgcHJlc3MgZm9yIGV4YW1wbGUpIHRvCit0aGUgaW5wdXQgc3lzdGVtLCBiZWNhdXNlIHRoZSBpbnB1dF9yZXBvcnRfKiBmdW5jdGlvbnMgY2hlY2sgdGhhdAordGhlbXNlbHZlcy4KKworVGhlbiB0aGVyZSBpcyB0aGUKKworCWlucHV0X3N5bmMoKQorCitjYWxsIHRvIHRlbGwgdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIGV2ZW50cyB0aGF0IHdlJ3ZlIHNlbnQgYSBjb21wbGV0ZSByZXBvcnQuCitUaGlzIGRvZXNuJ3Qgc2VlbSBpbXBvcnRhbnQgaW4gdGhlIG9uZSBidXR0b24gY2FzZSwgYnV0IGlzIHF1aXRlIGltcG9ydGFudAorZm9yIGZvciBleGFtcGxlIG1vdXNlIG1vdmVtZW50LCB3aGVyZSB5b3UgZG9uJ3Qgd2FudCB0aGUgWCBhbmQgWSB2YWx1ZXMKK3RvIGJlIGludGVycHJldGVkIHNlcGFyYXRlbHksIGJlY2F1c2UgdGhhdCdkIHJlc3VsdCBpbiBhIGRpZmZlcmVudCBtb3ZlbWVudC4KKworMS4yIGRldi0+b3BlbigpIGFuZCBkZXYtPmNsb3NlKCkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIGNhc2UgdGhlIGRyaXZlciBoYXMgdG8gcmVwZWF0ZWRseSBwb2xsIHRoZSBkZXZpY2UsIGJlY2F1c2UgaXQgZG9lc24ndAoraGF2ZSBhbiBpbnRlcnJ1cHQgY29taW5nIGZyb20gaXQgYW5kIHRoZSBwb2xsaW5nIGlzIHRvbyBleHBlbnNpdmUgdG8gYmUgZG9uZQorYWxsIHRoZSB0aW1lLCBvciBpZiB0aGUgZGV2aWNlIHVzZXMgYSB2YWx1YWJsZSByZXNvdXJjZSAoZWcuIGludGVycnVwdCksIGl0CitjYW4gdXNlIHRoZSBvcGVuIGFuZCBjbG9zZSBjYWxsYmFjayB0byBrbm93IHdoZW4gaXQgY2FuIHN0b3AgcG9sbGluZyBvcgorcmVsZWFzZSB0aGUgaW50ZXJydXB0IGFuZCB3aGVuIGl0IG11c3QgcmVzdW1lIHBvbGxpbmcgb3IgZ3JhYiB0aGUgaW50ZXJydXB0CithZ2Fpbi4gVG8gZG8gdGhhdCwgd2Ugd291bGQgYWRkIHRoaXMgdG8gb3VyIGV4YW1wbGUgZHJpdmVyOgorCitpbnQgYnV0dG9uX3VzZWQgPSAwOworCitzdGF0aWMgaW50IGJ1dHRvbl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKyAgICAgICAgaWYgKGJ1dHRvbl91c2VkKyspCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKwlpZiAocmVxdWVzdF9pcnEoQlVUVE9OX0lSUSwgYnV0dG9uX2ludGVycnVwdCwgMCwgImJ1dHRvbiIsIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidXR0b24uYzogQ2FuJ3QgYWxsb2NhdGUgaXJxICVkXG4iLCBidXR0b25faXJxKTsKKyAgICAgICAgICAgICAgICBidXR0b25fdXNlZC0tOworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnV0dG9uX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKyAgICAgICAgaWYgKCEtLWJ1dHRvbl91c2VkKQorICAgICAgICAgICAgICAgIGZyZWVfaXJxKElSUV9BTUlHQV9WRVJUQiwgYnV0dG9uX2ludGVycnVwdCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGJ1dHRvbl9pbml0KHZvaWQpCit7CisJLi4uCisJYnV0dG9uX2Rldi5vcGVuID0gYnV0dG9uX29wZW47CisJYnV0dG9uX2Rldi5jbG9zZSA9IGJ1dHRvbl9jbG9zZTsKKwkuLi4KK30KKworTm90ZSB0aGUgYnV0dG9uX3VzZWQgdmFyaWFibGUgLSB3ZSBoYXZlIHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIHRoZSBvcGVuCitmdW5jdGlvbiB3YXMgY2FsbGVkIHRvIGtub3cgd2hlbiBleGFjdGx5IG91ciBkZXZpY2Ugc3RvcHMgYmVpbmcgdXNlZC4KKworVGhlIG9wZW4oKSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGEgMCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYW55IG5vbnplcm8gdmFsdWUKK2luIGNhc2Ugb2YgZmFpbHVyZS4gVGhlIGNsb3NlKCkgY2FsbGJhY2sgKHdoaWNoIGlzIHZvaWQpIG11c3QgYWx3YXlzIHN1Y2NlZWQuCisKKzEuMyBCYXNpYyBldmVudCB0eXBlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBtb3N0IHNpbXBsZSBldmVudCB0eXBlIGlzIEVWX0tFWSwgd2hpY2ggaXMgdXNlZCBmb3Iga2V5cyBhbmQgYnV0dG9ucy4KK0l0J3MgcmVwb3J0ZWQgdG8gdGhlIGlucHV0IHN5c3RlbSB2aWE6CisKKwlpbnB1dF9yZXBvcnRfa2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGNvZGUsIGludCB2YWx1ZSkKKworU2VlIGxpbnV4L2lucHV0LmggZm9yIHRoZSBhbGxvd2FibGUgdmFsdWVzIG9mIGNvZGUgKGZyb20gMCB0byBLRVlfTUFYKS4KK1ZhbHVlIGlzIGludGVycHJldGVkIGFzIGEgdHJ1dGggdmFsdWUsIGllIGFueSBub256ZXJvIHZhbHVlIG1lYW5zIGtleQorcHJlc3NlZCwgemVybyB2YWx1ZSBtZWFucyBrZXkgcmVsZWFzZWQuIFRoZSBpbnB1dCBjb2RlIGdlbmVyYXRlcyBldmVudHMgb25seQoraW4gY2FzZSB0aGUgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gYmVmb3JlLgorCitJbiBhZGRpdGlvbiB0byBFVl9LRVksIHRoZXJlIGFyZSB0d28gbW9yZSBiYXNpYyBldmVudCB0eXBlczogRVZfUkVMIGFuZAorRVZfQUJTLiBUaGV5IGFyZSB1c2VkIGZvciByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzIHN1cHBsaWVkIGJ5IHRoZQorZGV2aWNlLiBBIHJlbGF0aXZlIHZhbHVlIG1heSBiZSBmb3IgZXhhbXBsZSBhIG1vdXNlIG1vdmVtZW50IGluIHRoZSBYIGF4aXMuCitUaGUgbW91c2UgcmVwb3J0cyBpdCBhcyBhIHJlbGF0aXZlIGRpZmZlcmVuY2UgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbiwKK2JlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueSBhYnNvbHV0ZSBjb29yZGluYXRlIHN5c3RlbSB0byB3b3JrIGluLiBBYnNvbHV0ZQorZXZlbnRzIGFyZSBuYW1lbHkgZm9yIGpveXN0aWNrcyBhbmQgZGlnaXRpemVycyAtIGRldmljZXMgdGhhdCBkbyB3b3JrIGluIGFuCithYnNvbHV0ZSBjb29yZGluYXRlIHN5c3RlbXMuCisKK0hhdmluZyB0aGUgZGV2aWNlIHJlcG9ydCBFVl9SRUwgYnV0dG9ucyBpcyBhcyBzaW1wbGUgYXMgd2l0aCBFVl9LRVksIHNpbXBseQorc2V0IHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgYW5kIGNhbGwgdGhlCisKKwlpbnB1dF9yZXBvcnRfcmVsKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGNvZGUsIGludCB2YWx1ZSkKKworZnVuY3Rpb24uIEV2ZW50cyBhcmUgZ2VuZXJhdGVkIG9ubHkgZm9yIG5vbnplcm8gdmFsdWUuIAorCitIb3dldmVyIEVWX0FCUyByZXF1aXJlcyBhIGxpdHRsZSBzcGVjaWFsIGNhcmUuIEJlZm9yZSBjYWxsaW5nCitpbnB1dF9yZWdpc3Rlcl9kZXZpY2UsIHlvdSBoYXZlIHRvIGZpbGwgYWRkaXRpb25hbCBmaWVsZHMgaW4gdGhlIGlucHV0X2Rldgorc3RydWN0IGZvciBlYWNoIGFic29sdXRlIGF4aXMgeW91ciBkZXZpY2UgaGFzLiBJZiBvdXIgYnV0dG9uIGRldmljZSBoYWQgYWxzbwordGhlIEFCU19YIGF4aXM6CisKKwlidXR0b25fZGV2LmFic21pbltBQlNfWF0gPSAwOworCWJ1dHRvbl9kZXYuYWJzbWF4W0FCU19YXSA9IDI1NTsKKwlidXR0b25fZGV2LmFic2Z1enpbQUJTX1hdID0gNDsKKwlidXR0b25fZGV2LmFic2ZsYXRbQUJTX1hdID0gODsKKworVGhpcyBzZXR0aW5nIHdvdWxkIGJlIGFwcHJvcHJpYXRlIGZvciBhIGpveXN0aWNrIFggYXhpcywgd2l0aCB0aGUgbWluaW11bSBvZgorMCwgbWF4aW11bSBvZiAyNTUgKHdoaWNoIHRoZSBqb3lzdGljayAqbXVzdCogYmUgYWJsZSB0byByZWFjaCwgbm8gcHJvYmxlbSBpZgoraXQgc29tZXRpbWVzIHJlcG9ydHMgbW9yZSwgYnV0IGl0IG11c3QgYmUgYWJsZSB0byBhbHdheXMgcmVhY2ggdGhlIG1pbiBhbmQKK21heCB2YWx1ZXMpLCB3aXRoIG5vaXNlIGluIHRoZSBkYXRhIHVwIHRvICstIDQsIGFuZCB3aXRoIGEgY2VudGVyIGZsYXQKK3Bvc2l0aW9uIG9mIHNpemUgOC4KKworSWYgeW91IGRvbid0IG5lZWQgYWJzZnV6eiBhbmQgYWJzZmxhdCwgeW91IGNhbiBzZXQgdGhlbSB0byB6ZXJvLCB3aGljaCBtZWFuCit0aGF0IHRoZSB0aGluZyBpcyBwcmVjaXNlIGFuZCBhbHdheXMgcmV0dXJucyB0byBleGFjdGx5IHRoZSBjZW50ZXIgcG9zaXRpb24KKyhpZiBpdCBoYXMgYW55KS4KKworMS40IFRoZSB2b2lkICpwcml2YXRlIGZpZWxkCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBmaWVsZCBpbiB0aGUgaW5wdXQgc3RydWN0dXJlIGNhbiBiZSB1c2VkIHRvIHBvaW50IHRvIGFueSBwcml2YXRlIGRhdGEKK3N0cnVjdHVyZXMgaW4gdGhlIGlucHV0IGRldmljZSBkcml2ZXIsIGluIGNhc2UgdGhlIGRyaXZlciBoYW5kbGVzIG1vcmUgdGhhbgorb25lIGRldmljZS4gWW91J2xsIG5lZWQgaXQgaW4gdGhlIG9wZW4gYW5kIGNsb3NlIGNhbGxiYWNrcy4KKworMS41IE5CSVRTKCksIExPTkcoKSwgQklUKCkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIHRocmVlIG1hY3JvcyBmcm9tIGlucHV0LmggaGVscCBzb21lIGJpdGZpZWxkIGNvbXB1dGF0aW9uczoKKworCU5CSVRTKHgpIC0gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgYml0ZmllbGQgYXJyYXkgaW4gbG9uZ3MgZm9yIHggYml0cworCUxPTkcoeCkgIC0gcmV0dXJucyB0aGUgaW5kZXggaW4gdGhlIGFycmF5IGluIGxvbmdzIGZvciBiaXQgeAorCUJJVCh4KSAgIC0gcmV0dXJucyB0aGUgaW5kZXggaW4gYSBsb25nIGZvciBiaXQgeAorCisxLjYgVGhlIG51bWJlciwgaWQqIGFuZCBuYW1lIGZpZWxkcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGRldi0+bnVtYmVyIGlzIGFzc2lnbmVkIGJ5IHRoZSBpbnB1dCBzeXN0ZW0gdG8gdGhlIGlucHV0IGRldmljZSB3aGVuIGl0CitpcyByZWdpc3RlcmVkLiBJdCBoYXMgbm8gdXNlIGV4Y2VwdCBmb3IgaWRlbnRpZnlpbmcgdGhlIGRldmljZSB0byB0aGUgdXNlcgoraW4gc3lzdGVtIG1lc3NhZ2VzLgorCitUaGUgZGV2LT5uYW1lIHNob3VsZCBiZSBzZXQgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBpbnB1dCBkZXZpY2UgYnkgdGhlIGlucHV0CitkZXZpY2UgZHJpdmVyLiBJdCdzIGEgc3RyaW5nIGxpa2UgJ0dlbmVyaWMgYnV0dG9uIGRldmljZScgY29udGFpbmluZyBhCit1c2VyIGZyaWVuZGx5IG5hbWUgb2YgdGhlIGRldmljZS4KKworVGhlIGlkKiBmaWVsZHMgY29udGFpbiB0aGUgYnVzIElEIChQQ0ksIFVTQiwgLi4uKSwgdmVuZG9yIElEIGFuZCBkZXZpY2UgSUQKK29mIHRoZSBkZXZpY2UuIFRoZSBidXMgSURzIGFyZSBkZWZpbmVkIGluIGlucHV0LmguIFRoZSB2ZW5kb3IgYW5kIGRldmljZSBpZHMKK2FyZSBkZWZpbmVkIGluIHBjaV9pZHMuaCwgdXNiX2lkcy5oIGFuZCBzaW1pbGFyIGluY2x1ZGUgZmlsZXMuIFRoZXNlIGZpZWxkcworc2hvdWxkIGJlIHNldCBieSB0aGUgaW5wdXQgZGV2aWNlIGRyaXZlciBiZWZvcmUgcmVnaXN0ZXJpbmcgaXQuCisKK1RoZSBpZHR5cGUgZmllbGQgY2FuIGJlIHVzZWQgZm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIGZvciB0aGUgaW5wdXQgZGV2aWNlCitkcml2ZXIuCisKK1RoZSBpZCBhbmQgbmFtZSBmaWVsZHMgY2FuIGJlIHBhc3NlZCB0byB1c2VybGFuZCB2aWEgdGhlIGV2ZGV2IGludGVyZmFjZS4KKworMS43IFRoZSBrZXljb2RlLCBrZXljb2RlbWF4LCBrZXljb2Rlc2l6ZSBmaWVsZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSB0d28gZmllbGRzIHdpbGwgYmUgdXNlZCBmb3IgYW55IGlucHV0IGRldmljZXMgdGhhdCByZXBvcnQgdGhlaXIgZGF0YQorYXMgc2NhbmNvZGVzLiBJZiBub3QgYWxsIHNjYW5jb2RlcyBjYW4gYmUga25vd24gYnkgYXV0b2RldGVjdGlvbiwgdGhleSBtYXkKK25lZWQgdG8gYmUgc2V0IGJ5IHVzZXJsYW5kIHV0aWxpdGllcy4gVGhlIGtleWNvZGUgYXJyYXkgdGhlbiBpcyBhbiBhcnJheQordXNlZCB0byBtYXAgZnJvbSBzY2FuY29kZXMgdG8gaW5wdXQgc3lzdGVtIGtleWNvZGVzLiBUaGUga2V5Y29kZSBtYXggd2lsbAorY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgYW5kIGtleWNvZGVzaXplIHRoZSBzaXplIG9mIGVhY2ggZW50cnkgaW4gaXQKKyhpbiBieXRlcykuCisKKzEuOCBLZXkgYXV0b3JlcGVhdAorfn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uLiBpcyBzaW1wbGUuIEl0IGlzIGhhbmRsZWQgYnkgdGhlIGlucHV0LmMgbW9kdWxlLiBIYXJkd2FyZSBhdXRvcmVwZWF0IGlzCitub3QgdXNlZCwgYmVjYXVzZSBpdCdzIG5vdCBwcmVzZW50IGluIG1hbnkgZGV2aWNlcyBhbmQgZXZlbiB3aGVyZSBpdCBpcworcHJlc2VudCwgaXQgaXMgYnJva2VuIHNvbWV0aW1lcyAoYXQga2V5Ym9hcmRzOiBUb3NoaWJhIG5vdGVib29rcykuIFRvIGVuYWJsZQorYXV0b3JlcGVhdCBmb3IgeW91ciBkZXZpY2UsIGp1c3Qgc2V0IEVWX1JFUCBpbiBkZXYtPmV2Yml0LiBBbGwgd2lsbCBiZQoraGFuZGxlZCBieSB0aGUgaW5wdXQgc3lzdGVtLgorCisxLjkgT3RoZXIgZXZlbnQgdHlwZXMsIGhhbmRsaW5nIG91dHB1dCBldmVudHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgb3RoZXIgZXZlbnQgdHlwZXMgdXAgdG8gbm93IGFyZToKKworRVZfTEVEIC0gdXNlZCBmb3IgdGhlIGtleWJvYXJkIExFRHMuCitFVl9TTkQgLSB1c2VkIGZvciBrZXlib2FyZCBiZWVwcy4KKworVGhleSBhcmUgdmVyeSBzaW1pbGFyIHRvIGZvciBleGFtcGxlIGtleSBldmVudHMsIGJ1dCB0aGV5IGdvIGluIHRoZSBvdGhlcgorZGlyZWN0aW9uIC0gZnJvbSB0aGUgc3lzdGVtIHRvIHRoZSBpbnB1dCBkZXZpY2UgZHJpdmVyLiBJZiB5b3VyIGlucHV0IGRldmljZQorZHJpdmVyIGNhbiBoYW5kbGUgdGhlc2UgZXZlbnRzLCBpdCBoYXMgdG8gc2V0IHRoZSByZXNwZWN0aXZlIGJpdHMgaW4gZXZiaXQsCisqYW5kKiBhbHNvIHRoZSBjYWxsYmFjayByb3V0aW5lOgorCisJYnV0dG9uX2Rldi5ldmVudCA9IGJ1dHRvbl9ldmVudDsKKworaW50IGJ1dHRvbl9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK3sKKwlpZiAodHlwZSA9PSBFVl9TTkQgJiYgY29kZSA9PSBTTkRfQkVMTCkgeworCQlvdXRiKHZhbHVlLCBCVVRUT05fQkVMTCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK1RoaXMgY2FsbGJhY2sgcm91dGluZSBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IG9yIGEgQkggKGFsdGhvdWdoIHRoYXQKK2lzbid0IGEgcnVsZSksIGFuZCB0aHVzIG11c3Qgbm90IHNsZWVwLCBhbmQgbXVzdCBub3QgdGFrZSB0b28gbG9uZyB0byBmaW5pc2guCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTM3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnR4dApAQCAtMCwwICsxLDMxMiBAQAorCQkJICBMaW51eCBJbnB1dCBkcml2ZXJzIHYxLjAKKwkgICAgICAgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+CisJCQkgICAgIFNwb25zb3JlZCBieSBTdVNFCisJICAgICRJZDogaW5wdXQudHh0LHYgMS44IDIwMDIvMDUvMjkgMDM6MTU6MDEgYnJhZGxleW0gRXhwICQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMC4gRGlzY2xhaW1lcgorfn5+fn5+fn5+fn5+fgorICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1dJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCitvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCittb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKK3dpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CitUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisgIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieSBlLW1haWwKKy0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAdWN3LmN6Piwgb3IgYnkgcGFwZXIgbWFpbDogVm9qdGVjaCBQYXZsaWssCitTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworCisgIEZvciB5b3VyIGNvbnZlbmllbmNlLCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGlzIGluY2x1ZGVkCitpbiB0aGUgcGFja2FnZTogU2VlIHRoZSBmaWxlIENPUFlJTkcuCisKKzEuIEludHJvZHVjdGlvbgorfn5+fn5+fn5+fn5+fn5+CisgIFRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGRyaXZlcnMgdGhhdCBpcyBkZXNpZ25lZCB0byBzdXBwb3J0IGFsbCBpbnB1dAorZGV2aWNlcyB1bmRlciBMaW51eC4gV2hpbGUgaXQgaXMgY3VycmVudGx5IHVzZWQgb25seSBvbiBmb3IgVVNCIGlucHV0CitkZXZpY2VzLCBmdXR1cmUgdXNlIChzYXkgMi41LzIuNikgaXMgZXhwZWN0ZWQgdG8gZXhwYW5kIHRvIHJlcGxhY2UKK21vc3Qgb2YgdGhlIGV4aXN0aW5nIGlucHV0IHN5c3RlbSwgd2hpY2ggaXMgd2h5IGl0IGxpdmVzIGluCitkcml2ZXJzL2lucHV0LyBpbnN0ZWFkIG9mIGRyaXZlcnMvdXNiLy4KKworICBUaGUgY2VudHJlIG9mIHRoZSBpbnB1dCBkcml2ZXJzIGlzIHRoZSBpbnB1dCBtb2R1bGUsIHdoaWNoIG11c3QgYmUKK2xvYWRlZCBiZWZvcmUgYW55IG90aGVyIG9mIHRoZSBpbnB1dCBtb2R1bGVzIC0gaXQgc2VydmVzIGFzIGEgd2F5IG9mCitjb21tdW5pY2F0aW9uIGJldHdlZW4gdHdvIGdyb3VwcyBvZiBtb2R1bGVzOgorCisxLjEgRGV2aWNlIGRyaXZlcnMKK35+fn5+fn5+fn5+fn5+fn5+fgorICBUaGVzZSBtb2R1bGVzIHRhbGsgdG8gdGhlIGhhcmR3YXJlIChmb3IgZXhhbXBsZSB2aWEgVVNCKSwgYW5kIHByb3ZpZGUKK2V2ZW50cyAoa2V5c3Ryb2tlcywgbW91c2UgbW92ZW1lbnRzKSB0byB0aGUgaW5wdXQgbW9kdWxlLgorCisxLjIgRXZlbnQgaGFuZGxlcnMKK35+fn5+fn5+fn5+fn5+fn5+fgorICBUaGVzZSBtb2R1bGVzIGdldCBldmVudHMgZnJvbSBpbnB1dCBhbmQgcGFzcyB0aGVtIHdoZXJlIG5lZWRlZCB2aWEKK3ZhcmlvdXMgaW50ZXJmYWNlcyAtIGtleXN0cm9rZXMgdG8gdGhlIGtlcm5lbCwgbW91c2UgbW92ZW1lbnRzIHZpYSBhCitzaW11bGF0ZWQgUFMvMiBpbnRlcmZhY2UgdG8gR1BNIGFuZCBYIGFuZCBzbyBvbi4KKworMi4gU2ltcGxlIFVzYWdlCit+fn5+fn5+fn5+fn5+fn4KKyAgRm9yIHRoZSBtb3N0IHVzdWFsIGNvbmZpZ3VyYXRpb24sIHdpdGggb25lIFVTQiBtb3VzZSBhbmQgb25lIFVTQiBrZXlib2FyZCwKK3lvdSdsbCBoYXZlIHRvIGxvYWQgdGhlIGZvbGxvd2luZyBtb2R1bGVzIChvciBoYXZlIHRoZW0gYnVpbHQgaW4gdG8gdGhlCitrZXJuZWwpOgorCisJaW5wdXQKKwltb3VzZWRldgorCWtleWJkZXYKKwl1c2Jjb3JlCisJdWhjaV9oY2Qgb3Igb2hjaV9oY2Qgb3IgZWhjaV9oY2QKKwl1c2JoaWQKKworICBBZnRlciB0aGlzLCB0aGUgVVNCIGtleWJvYXJkIHdpbGwgd29yayBzdHJhaWdodCBhd2F5LCBhbmQgdGhlIFVTQiBtb3VzZQord2lsbCBiZSBhdmFpbGFibGUgYXMgYSBjaGFyYWN0ZXIgZGV2aWNlIG9uIG1ham9yIDEzLCBtaW5vciA2MzoKKworCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDYzIE1hciAyOCAyMjo0NSBtaWNlCisKKyAgVGhpcyBkZXZpY2UgaGFzIHRvIGJlIGNyZWF0ZWQsIHVubGVzcyB5b3UgdXNlIGRldmZzLCBpbiB3aGljaCBjYXNlIGl0J3MKK2NyZWF0ZWQgYXV0b21hdGljYWxseS4gVGhlIGNvbW1hbmRzIHRvIGRvIGNyZWF0ZSBpdCBieSBoYW5kIGFyZToKKworCWNkIC9kZXYKKwlta2RpciBpbnB1dAorCW1rbm9kIGlucHV0L21pY2UgYyAxMyA2MworCisgIEFmdGVyIHRoYXQgeW91IGhhdmUgdG8gcG9pbnQgR1BNICh0aGUgdGV4dG1vZGUgbW91c2UgY3V0JnBhc3RlIHRvb2wpIGFuZAorWEZyZWUgdG8gdGhpcyBkZXZpY2UgdG8gdXNlIGl0IC0gR1BNIHNob3VsZCBiZSBjYWxsZWQgbGlrZToKKworCWdwbSAtdCBwczIgLW0gL2Rldi9pbnB1dC9taWNlCisKKyAgQW5kIGluIFg6CisKKwlTZWN0aW9uICJQb2ludGVyIgorCSAgICBQcm90b2NvbCAgICAiSW1QUy8yIgorCSAgICBEZXZpY2UgICAgICAiL2Rldi9pbnB1dC9taWNlIgorCSAgICBaQXhpc01hcHBpbmcgNCA1CisJRW5kU2VjdGlvbgorCisgIFdoZW4geW91IGRvIGFsbCBvZiB0aGUgYWJvdmUsIHlvdSBjYW4gdXNlIHlvdXIgVVNCIG1vdXNlIGFuZCBrZXlib2FyZC4KKworMy4gRGV0YWlsZWQgRGVzY3JpcHRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiszLjEgRGV2aWNlIGRyaXZlcnMKK35+fn5+fn5+fn5+fn5+fn5+fgorICBEZXZpY2UgZHJpdmVycyBhcmUgdGhlIG1vZHVsZXMgdGhhdCBnZW5lcmF0ZSBldmVudHMuIFRoZSBldmVudHMgYXJlCitob3dldmVyIG5vdCB1c2VmdWwgd2l0aG91dCBiZWluZyBoYW5kbGVkLCBzbyB5b3UgYWxzbyB3aWxsIG5lZWQgdG8gdXNlIHNvbWUKK29mIHRoZSBtb2R1bGVzIGZyb20gc2VjdGlvbiAzLjIuCisKKzMuMS4xIHVzYmhpZAorfn5+fn5+fn5+fn5+CisgIHVzYmhpZCBpcyB0aGUgbGFyZ2VzdCBhbmQgbW9zdCBjb21wbGV4IGRyaXZlciBvZiB0aGUgd2hvbGUgc3VpdGUuIEl0CitoYW5kbGVzIGFsbCBISUQgZGV2aWNlcywgYW5kIGJlY2F1c2UgdGhlcmUgaXMgYSB2ZXJ5IHdpZGUgdmFyaWV0eSBvZiB0aGVtLAorYW5kIGJlY2F1c2UgdGhlIFVTQiBISUQgc3BlY2lmaWNhdGlvbiBpc24ndCBzaW1wbGUsIGl0IG5lZWRzIHRvIGJlIHRoaXMgYmlnLgorCisgIEN1cnJlbnRseSwgaXQgaGFuZGxlcyBVU0IgbWljZSwgam95c3RpY2tzLCBnYW1lcGFkcywgc3RlZXJpbmcgd2hlZWxzCitrZXlib2FyZHMsIHRyYWNrYmFsbHMgYW5kIGRpZ2l0aXplcnMuCisKKyBIb3dldmVyLCBVU0IgdXNlcyBISUQgYWxzbyBmb3IgbW9uaXRvciBjb250cm9scywgc3BlYWtlciBjb250cm9scywgVVBTcywKK0xDRHMgYW5kIG1hbnkgb3RoZXIgcHVycG9zZXMuCisKKyBUaGUgbW9uaXRvciBhbmQgc3BlYWtlciBjb250cm9scyBzaG91bGQgYmUgZWFzeSB0byBhZGQgdG8gdGhlIGhpZC9pbnB1dAoraW50ZXJmYWNlLCBidXQgZm9yIHRoZSBVUFNzIGFuZCBMQ0RzIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLiBGb3IgdGhpcywKK3RoZSBoaWRkZXYgaW50ZXJmYWNlIHdhcyBkZXNpZ25lZC4gU2VlIERvY3VtZW50YXRpb24vdXNiL2hpZGRldi50eHQKK2ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGl0LgorCisgIFRoZSB1c2FnZSBvZiB0aGUgdXNiaGlkIG1vZHVsZSBpcyB2ZXJ5IHNpbXBsZSwgaXQgdGFrZXMgbm8gcGFyYW1ldGVycywKK2RldGVjdHMgZXZlcnl0aGluZyBhdXRvbWF0aWNhbGx5IGFuZCB3aGVuIGEgSElEIGRldmljZSBpcyBpbnNlcnRlZCwgaXQKK2RldGVjdHMgaXQgYXBwcm9wcmlhdGVseS4KKworICBIb3dldmVyLCBiZWNhdXNlIHRoZSBkZXZpY2VzIHZhcnkgd2lsZGx5LCB5b3UgbWlnaHQgaGFwcGVuIHRvIGhhdmUgYQorZGV2aWNlIHRoYXQgZG9lc24ndCB3b3JrIHdlbGwuIEluIHRoYXQgY2FzZSAjZGVmaW5lIERFQlVHIGF0IHRoZSBiZWdpbm5pbmcKK29mIGhpZC1jb3JlLmMgYW5kIHNlbmQgbWUgdGhlIHN5c2xvZyB0cmFjZXMuCisKKzMuMS4yIHVzYm1vdXNlCit+fn5+fn5+fn5+fn5+fgorICBGb3IgZW1iZWRkZWQgc3lzdGVtcywgZm9yIG1pY2Ugd2l0aCBicm9rZW4gSElEIGRlc2NyaXB0b3JzIGFuZCBqdXN0IGFueQorb3RoZXIgdXNlIHdoZW4gdGhlIGJpZyB1c2JoaWQgd291bGRuJ3QgYmUgYSBnb29kIGNob2ljZSwgdGhlcmUgaXMgdGhlCit1c2Jtb3VzZSBkcml2ZXIuIEl0IGhhbmRsZXMgVVNCIG1pY2Ugb25seS4gSXQgdXNlcyBhIHNpbXBsZXIgSElEQlAKK3Byb3RvY29sLiBUaGlzIGFsc28gbWVhbnMgdGhlIG1pY2UgbXVzdCBzdXBwb3J0IHRoaXMgc2ltcGxlciBwcm90b2NvbC4gTm90CithbGwgZG8uIElmIHlvdSBkb24ndCBoYXZlIGFueSBzdHJvbmcgcmVhc29uIHRvIHVzZSB0aGlzIG1vZHVsZSwgdXNlIHVzYmhpZAoraW5zdGVhZC4KKworMy4xLjMgdXNia2JkCit+fn5+fn5+fn5+fn4KKyAgTXVjaCBsaWtlIHVzYm1vdXNlLCB0aGlzIG1vZHVsZSB0YWxrcyB0byBrZXlib2FyZHMgd2l0aCBhIHNpbXBsaWZpZWQKK0hJREJQIHByb3RvY29sLiBJdCdzIHNtYWxsZXIsIGJ1dCBkb2Vzbid0IHN1cHBvcnQgYW55IGV4dHJhIHNwZWNpYWwga2V5cy4KK1VzZSB1c2JoaWQgaW5zdGVhZCBpZiB0aGVyZSBpc24ndCBhbnkgc3BlY2lhbCByZWFzb24gdG8gdXNlIHRoaXMuCisKKzMuMS40IHdhY29tCit+fn5+fn5+fn5+fgorICBUaGlzIGlzIGEgZHJpdmVyIGZvciBXYWNvbSBHcmFwaGlyZSBhbmQgSW50dW9zIHRhYmxldHMuIE5vdCBmb3IgV2Fjb20KK1BlblBhcnRuZXIsIHRoYXQgb25lIGlzIGhhbmRsZWQgYnkgdGhlIEhJRCBkcml2ZXIuIEFsdGhvdWdoIHRoZSBJbnR1b3MgYW5kCitHcmFwaGlyZSB0YWJsZXRzIGNsYWltIHRoYXQgdGhleSBhcmUgSElEIHRhYmxldHMgYXMgd2VsbCwgdGhleSBhcmUgbm90IGFuZAordGh1cyBuZWVkIHRoaXMgc3BlY2lmaWMgZHJpdmVyLgorCiszLjEuNSBpZm9yY2UKK35+fn5+fn5+fn5+fgorICBBIGRyaXZlciBmb3IgSS1Gb3JjZSBqb3lzdGlja3MgYW5kIHdoZWVscywgYm90aCBvdmVyIFVTQiBhbmQgUlMyMzIuIAorSXQgaW5jbHVkZXMgRm9yY2VGZWVkYmFjayBzdXBwb3J0IG5vdywgZXZlbiB0aG91Z2ggSW1tZXJzaW9uCitDb3JwLiBjb25zaWRlcnMgdGhlIHByb3RvY29sIGEgdHJhZGUgc2VjcmV0IGFuZCB3b24ndCBkaXNjbG9zZSBhIHdvcmQKK2Fib3V0IGl0LiAKKworMy4yIEV2ZW50IGhhbmRsZXJzCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgRXZlbnQgaGFuZGxlcnMgZGlzdHJ1Yml0ZSB0aGUgZXZlbnRzIGZyb20gdGhlIGRldmljZXMgdG8gdXNlcmxhbmQgYW5kCitrZXJuZWwsIGFzIG5lZWRlZC4KKworMy4yLjEga2V5YmRldgorfn5+fn5+fn5+fn5+fgorICBrZXliZGV2IGlzIGN1cnJlbnRseSBhIHJhdGhlciB1Z2x5IGhhY2sgdGhhdCB0cmFuc2xhdGVzIHRoZSBpbnB1dAorZXZlbnRzIGludG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGtleWJvYXJkIHJhdyBtb2RlIChYbGF0ZWQgQVQgU2V0MiBvbgoreDg2KSwgYW5kIHBhc3NlcyB0aGVtIGludG8gdGhlIGhhbmRsZV9zY2FuY29kZSBmdW5jdGlvbiBvZiB0aGUKK2tleWJvYXJkLmMgbW9kdWxlLiBUaGlzIHdvcmtzIHdlbGwgZW5vdWdoIG9uIGFsbCBhcmNoaXRlY3R1cmVzIHRoYXQKK2tleWJkZXYgY2FuIGdlbmVyYXRlIHJhd21vZGUgb24sIG90aGVyIGFyY2hpdGVjdHVyZXMgY2FuIGJlIGFkZGVkIHRvCitpdC4KKworICBUaGUgcmlnaHQgd2F5IHdvdWxkIGJlIHRvIHBhc3MgdGhlIGV2ZW50cyB0byBrZXlib2FyZC5jIGRpcmVjdGx5LAorYmVzdCBpZiBrZXlib2FyZC5jIHdvdWxkIGl0c2VsZiBiZSBhbiBldmVudCBoYW5kbGVyLiBUaGlzIGlzIGRvbmUgaW4KK3RoZSBpbnB1dCBwYXRjaCwgYXZhaWxhYmxlIG9uIHRoZSB3ZWJwYWdlIG1lbnRpb25lZCBiZWxvdy4gCisKKzMuMi4yIG1vdXNlZGV2Cit+fn5+fn5+fn5+fn5+fgorICBtb3VzZWRldiBpcyBhbHNvIGEgaGFjayB0byBtYWtlIHByb2dyYW1zIHRoYXQgdXNlIG1vdXNlIGlucHV0Cit3b3JrLiBJdCB0YWtlcyBldmVudHMgZnJvbSBlaXRoZXIgbWljZSBvciBkaWdpdGl6ZXJzL3RhYmxldHMgYW5kIG1ha2VzCithIFBTLzItc3R5bGUgKGEgbGEgL2Rldi9wc2F1eCkgbW91c2UgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUKK3VzZXJsYW5kLiBJZGVhbGx5LCB0aGUgcHJvZ3JhbXMgY291bGQgdXNlIGEgbW9yZSByZWFzb25hYmxlIGludGVyZmFjZSwKK2ZvciBleGFtcGxlIGV2ZGV2CisKKyAgTW91c2VkZXYgZGV2aWNlcyBpbiAvZGV2L2lucHV0IChhcyBzaG93biBhYm92ZSkgYXJlOgorCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgMzIgTWFyIDI4IDIyOjQ1IG1vdXNlMAorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDMzIE1hciAyOSAwMDo0MSBtb3VzZTEKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICAzNCBNYXIgMjkgMDA6NDEgbW91c2UyCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgMzUgQXByICAxIDEwOjUwIG1vdXNlMworCS4uLgorCS4uLgorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDYyIEFwciAgMSAxMDo1MCBtb3VzZTMwCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgNjMgQXByICAxIDEwOjUwIG1pY2UKKworRWFjaCAnbW91c2UnIGRldmljZSBpcyBhc3NpZ25lZCB0byBhIHNpbmdsZSBtb3VzZSBvciBkaWdpdGl6ZXIsIGV4Y2VwdAordGhlIGxhc3Qgb25lIC0gJ21pY2UnLiBUaGlzIHNpbmdsZSBjaGFyYWN0ZXIgZGV2aWNlIGlzIHNoYXJlZCBieSBhbGwKK21pY2UgYW5kIGRpZ2l0aXplcnMsIGFuZCBldmVuIGlmIG5vbmUgYXJlIGNvbm5lY3RlZCwgdGhlIGRldmljZSBpcworcHJlc2VudC4gIFRoaXMgaXMgdXNlZnVsIGZvciBob3RwbHVnZ2luZyBVU0IgbWljZSwgc28gdGhhdCBwcm9ncmFtcworY2FuIG9wZW4gdGhlIGRldmljZSBldmVuIHdoZW4gbm8gbWljZSBhcmUgcHJlc2VudC4KKworICBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1tYWV0gaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFyZQordGhlIHNpemUgb2YgeW91ciBzY3JlZW4gKGluIHBpeGVscykgaW4gWEZyZWU4Ni4gVGhpcyBpcyBuZWVkZWQgaWYgeW91Cit3YW50IHRvIHVzZSB5b3VyIGRpZ2l0aXplciBpbiBYLCBiZWNhdXNlIGl0cyBtb3ZlbWVudCBpcyBzZW50IHRvIFgKK3ZpYSBhIHZpcnR1YWwgUFMvMiBtb3VzZSBhbmQgdGh1cyBuZWVkcyB0byBiZSBzY2FsZWQKK2FjY29yZGluZ2x5LiBUaGVzZSB2YWx1ZXMgd29uJ3QgYmUgdXNlZCBpZiB5b3UgdXNlIGEgbW91c2Ugb25seS4KKworICBNb3VzZWRldiB3aWxsIGdlbmVyYXRlIGVpdGhlciBQUy8yLCBJbVBTLzIgKE1pY3Jvc29mdCBJbnRlbGxpTW91c2UpIG9yCitFeHBsb3JlclBTLzIgKEludGVsbGlNb3VzZSBFeHBsb3JlcikgcHJvdG9jb2xzLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUKK3Byb2dyYW0gcmVhZGluZyB0aGUgZGF0YSB3aXNoZXMuIFlvdSBjYW4gc2V0IEdQTSBhbmQgWCB0byBhbnkgb2YKK3RoZXNlLiBZb3UnbGwgbmVlZCBJbVBTLzIgaWYgeW91IHdhbnQgdG8gbWFrZSB1c2Ugb2YgYSB3aGVlbCBvbiBhIFVTQgorbW91c2UgYW5kIEV4cGxvcmVyUFMvMiBpZiB5b3Ugd2FudCB0byB1c2UgZXh0cmEgKHVwIHRvIDUpIGJ1dHRvbnMuIAorCiszLjIuMyBqb3lkZXYKK35+fn5+fn5+fn5+fgorICBKb3lkZXYgaW1wbGVtZW50cyB2MC54IGFuZCB2MS54IExpbnV4IGpveXN0aWNrIGFwaSwgbXVjaCBsaWtlCitkcml2ZXJzL2NoYXIvam95c3RpY2svam95c3RpY2suYyB1c2VkIHRvIGluIGVhcmxpZXIgdmVyc2lvbnMuIFNlZQoram95c3RpY2stYXBpLnR4dCBpbiB0aGUgRG9jdW1lbnRhdGlvbiBzdWJkaXJlY3RvcnkgZm9yIGRldGFpbHMuICBBcworc29vbiBhcyBhbnkgam95c3RpY2sgaXMgY29ubmVjdGVkLCBpdCBjYW4gYmUgYWNjZXNzZWQgaW4gL2Rldi9pbnB1dAorb246IAorCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgIDAgQXByICAxIDEwOjUwIGpzMAorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgICAxIEFwciAgMSAxMDo1MCBqczEKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICAgMiBBcHIgIDEgMTA6NTAganMyCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgIDMgQXByICAxIDEwOjUwIGpzMworCS4uLgorCitBbmQgc28gb24gdXAgdG8ganMzMS4KKworMy4yLjQgZXZkZXYKK35+fn5+fn5+fn5+CisgIGV2ZGV2IGlzIHRoZSBnZW5lcmljIGlucHV0IGV2ZW50IGludGVyZmFjZS4gSXQgcGFzc2VzIHRoZSBldmVudHMKK2dlbmVyYXRlZCBpbiB0aGUga2VybmVsIHN0cmFpZ2h0IHRvIHRoZSBwcm9ncmFtLCB3aXRoIHRpbWVzdGFtcHMuIFRoZQorQVBJIGlzIHN0aWxsIGV2b2x2aW5nLCBidXQgc2hvdWxkIGJlIHVzZWFibGUgbm93LiBJdCdzIGRlc2NyaWJlZCBpbgorc2VjdGlvbiA1LiAKKworICBUaGlzIHNob3VsZCBiZSB0aGUgd2F5IGZvciBHUE0gYW5kIFggdG8gZ2V0IGtleWJvYXJkIGFuZCBtb3VzZSBtb3VzZQorZXZlbnRzLiBJdCBhbGxvd3MgZm9yIG11bHRpaGVhZCBpbiBYIHdpdGhvdXQgYW55IHNwZWNpZmljIG11bHRpaGVhZAora2VybmVsIHN1cHBvcnQuIFRoZSBldmVudCBjb2RlcyBhcmUgdGhlIHNhbWUgb24gYWxsIGFyY2hpdGVjdHVyZXMgYW5kCithcmUgaGFyZHdhcmUgaW5kZXBlbmRlbnQuCisKKyAgVGhlIGRldmljZXMgYXJlIGluIC9kZXYvaW5wdXQ6CisKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICA2NCBBcHIgIDEgMTA6NDkgZXZlbnQwCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgIDEzLCAgNjUgQXByICAxIDEwOjUwIGV2ZW50MQorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAxMywgIDY2IEFwciAgMSAxMDo1MCBldmVudDIKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgMTMsICA2NyBBcHIgIDEgMTA6NTAgZXZlbnQzCisJLi4uCisKK0FuZCBzbyBvbiB1cCB0byBldmVudDMxLgorCis0LiBWZXJpZnlpbmcgaWYgaXQgd29ya3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUeXBpbmcgYSBjb3VwbGUga2V5cyBvbiB0aGUga2V5Ym9hcmQgc2hvdWxkIGJlIGVub3VnaCB0byBjaGVjayB0aGF0CithIFVTQiBrZXlib2FyZCB3b3JrcyBhbmQgaXMgY29ycmVjdGx5IGNvbm5lY3RlZCB0byB0aGUga2VybmVsIGtleWJvYXJkCitkcml2ZXIuIAorCisgIERvaW5nIGEgY2F0IC9kZXYvaW5wdXQvbW91c2UwIChjLCAxMywgMzIpIHdpbGwgdmVyaWZ5IHRoYXQgYSBtb3VzZQoraXMgYWxzbyBlbXVsYXRlZCwgY2hhcmFjdGVycyBzaG91bGQgYXBwZWFyIGlmIHlvdSBtb3ZlIGl0LgorCisgIFlvdSBjYW4gdGVzdCB0aGUgam95c3RpY2sgZW11bGF0aW9uIHdpdGggdGhlICdqc3Rlc3QnIHV0aWxpdHksCithdmFpbGFibGUgaW4gdGhlIGpveXN0aWNrIHBhY2thZ2UgKHNlZSBEb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dCkuCisKKyAgWW91IGNhbiB0ZXN0IHRoZSBldmVudCBkZXZpY2VzIHdpdGggdGhlICdldnRlc3QnIHV0aWxpdHkgYXZhaWxhYmxlCitpbiB0aGUgTGludXhDb25zb2xlIHByb2plY3QgQ1ZTIGFyY2hpdmUgKHNlZSB0aGUgVVJMIGJlbG93KS4KKworNS4gRXZlbnQgaW50ZXJmYWNlCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgU2hvdWxkIHlvdSB3YW50IHRvIGFkZCBldmVudCBkZXZpY2Ugc3VwcG9ydCBpbnRvIGFueSBhcHBsaWNhdGlvbiAoWCwgZ3BtLAorc3ZnYWxpYiAuLi4pIEkgPHZvanRlY2hAdWN3LmN6PiB3aWxsIGJlIGhhcHB5IHRvIHByb3ZpZGUgeW91IGFueSBoZWxwIEkKK2Nhbi4gSGVyZSBnb2VzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLCB3aGljaCBpcyBnb2luZwordG8gYmUgZXh0ZW5kZWQsIGJ1dCBub3QgY2hhbmdlZCBpbmNvbXBhdGlibHkgYXMgdGltZSBnb2VzOgorCisgIFlvdSBjYW4gdXNlIGJsb2NraW5nIGFuZCBub25ibG9ja2luZyByZWFkcywgYWxzbyBzZWxlY3QoKSBvbiB0aGUKKy9kZXYvaW5wdXQvZXZlbnRYIGRldmljZXMsIGFuZCB5b3UnbGwgYWx3YXlzIGdldCBhIHdob2xlIG51bWJlciBvZiBpbnB1dAorZXZlbnRzIG9uIGEgcmVhZC4gVGhlaXIgbGF5b3V0IGlzOgorCitzdHJ1Y3QgaW5wdXRfZXZlbnQgeworCXN0cnVjdCB0aW1ldmFsIHRpbWU7CisJdW5zaWduZWQgc2hvcnQgdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBjb2RlOworCXVuc2lnbmVkIGludCB2YWx1ZTsKK307CisKKyAgJ3RpbWUnIGlzIHRoZSB0aW1lc3RhbXAsIGl0IHJldHVybnMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGV2ZW50IGhhcHBlbmVkLgorVHlwZSBpcyBmb3IgZXhhbXBsZSBFVl9SRUwgZm9yIHJlbGF0aXZlIG1vbWVtZW50LCBSRUxfS0VZIGZvciBhIGtleXByZXNzIG9yCityZWxlYXNlLiBNb3JlIHR5cGVzIGFyZSBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvaW5wdXQuaC4KKworICAnY29kZScgaXMgZXZlbnQgY29kZSwgZm9yIGV4YW1wbGUgUkVMX1ggb3IgS0VZX0JBQ0tTUEFDRSwgYWdhaW4gYSBjb21wbGV0ZQorbGlzdCBpcyBpbiBpbmNsdWRlL2xpbnV4L2lucHV0LmguCisKKyAgJ3ZhbHVlJyBpcyB0aGUgdmFsdWUgdGhlIGV2ZW50IGNhcnJpZXMuIEVpdGhlciBhIHJlbGF0aXZlIGNoYW5nZSBmb3IKK0VWX1JFTCwgYWJzb2x1dGUgbmV3IHZhbHVlIGZvciBFVl9BQlMgKGpveXN0aWNrcyAuLi4pLCBvciAwIGZvciBFVl9LRVkgZm9yCityZWxlYXNlLCAxIGZvciBrZXlwcmVzcyBhbmQgMiBmb3IgYXV0b3JlcGVhdC4KKworNi4gQ29udGFjdHMKK35+fn5+fn5+fn5+CisgIFRoaXMgZWZmb3J0IGhhcyBpdHMgaG9tZSBwYWdlIGF0OgorCisJaHR0cDovL3d3dy5zdXNlLmN6L2RldmVsb3BtZW50L2lucHV0LworCitZb3UnbGwgZmluZCBib3RoIHRoZSBsYXRlc3QgSElEIGRyaXZlciBhbmQgdGhlIGNvbXBsZXRlIElucHV0IGRyaXZlcgordGhlcmUgYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBob3cgdG8gYWNjZXNzIHRoZSBDVlMgcmVwb3NpdG9yeSBmb3IKK2xhdGVzdCByZXZpc2lvbnMgb2YgdGhlIGRyaXZlcnMuCisKKyAgVGhlcmUgaXMgYWxzbyBhIG1haWxpbmcgbGlzdCBmb3IgdGhpczoKKworCW1ham9yZG9tb0BhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3oKKworU2VuZCAic3Vic2NyaWJlIGxpbnV4LWlucHV0IiB0byBzdWJzY3JpYmUgdG8gaXQuCisKK1RoZSBpbnB1dCBjaGFuZ2VzIGFyZSBhbHNvIGJlaW5nIHdvcmtlZCBvbiBhcyBwYXJ0IG9mIHRoZSBMaW51eENvbnNvbGUKK3Byb2plY3QsIHNlZToKKworCSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4Y29uc29sZS8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnRlcmFjdGl2ZS5maWcgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2ludGVyYWN0aXZlLmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTdkZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnRlcmFjdGl2ZS5maWcKQEAgLTAsMCArMSw0MiBAQAorI0ZJRyAzLjIKK0xhbmRzY2FwZQorQ2VudGVyCitJbmNoZXMKK0xldHRlciAgCisxMDAuMDAKK1NpbmdsZQorLTIKKzEyMDAgMgorMiAxIDAgMiAwIDcgNTAgMCAtMSA2LjAwMCAwIDAgLTEgMCAwIDYKKwkgMTIwMCAzNjAwIDE4MDAgMzYwMCAyNDAwIDQ4MDAgMzAwMCA0ODAwIDQyMDAgNTcwMCA0ODAwIDU3MDAKKzIgMiAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCA1CisJIDEyMDAgMzE1MCA0ODAwIDMxNTAgNDgwMCA2MzAwIDEyMDAgNjMwMCAxMjAwIDMxNTAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDEyMDAgNDgwMCA0ODAwIDQ4MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCA0CisJIDI0MDAgNDgwMCAyNDAwIDY1MjUgMTk1MCA3MTI1IDE5NTAgNzgwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDQKKwkgMzAwMCA0ODAwIDMwMDAgNjUyNSAzNjAwIDcxMjUgMzYwMCA3ODAwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDEgMworCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSAzODI1IDU0MDAgNDEyNSA1MTAwIDU0MDAgNTEwMAorMiAxIDAgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAxIDMKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkgMjEwMCA0MjAwIDI0MDAgMzkwMCA1NDAwIDM5MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDQ4MDAgNTcwMCA1NDAwIDU3MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDE4MDAgMzYwMCA1NDAwIDM2MDAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMSAzCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDI3MDAgNDgwMCAyNzAwIDQ0MjUgNTQwMCA0NDI1CisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAxIDEgMgorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCTAgMCAxLjAwIDYwLjAwIDEyMC4wMAorCSAxOTUwIDc4MDAgMzYwMCA3ODAwCis0IDEgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTM1IDgxMCAyNzc1IDc3MjUgRGVhZCBiYW5kXDAwMQorNCAwIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDE4MCAxMTU1IDU0MDAgNTcwMCByaWdodCBzYXR1cmF0aW9uXDAwMQorNCAwIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDEzNSAxMDY1IDU0MDAgMzYwMCBsZWZ0IHNhdHVyYXRpb25cMDAxCis0IDAgMCA1MCAwIDAgMTIgMC4wMDAwIDQgMTgwIDI1MDUgNTQwMCAzOTAwIGxlZnQgY29lZmYgKCBwb3NpdGl2ZSBpbiB0aGF0IGNhc2UgKVwwMDEKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxODAgMjY0MCA1NDc1IDUxMDAgcmlnaHQgY29lZmYgKCBuZWdhdGl2ZSBpbiB0aGF0IGNhc2UgKVwwMDEKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxMDUgNDgwIDU0MDAgNDQyNSBjZW50ZXJcMDAxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLWFwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiZDMyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stYXBpLnR4dApAQCAtMCwwICsxLDMxNiBAQAorCQkgICAgICBKb3lzdGljayBBUEkgRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAtKi1UZXh0LSotCisKKwkJICAgICAgICBSYWduYXIgSG9qbGFuZCBFc3Bpbm9zYQorCQkJICA8cmFnbmFyQG1hY3VsYS5uZXQ+CisKKwkJCSAgICAgIDcgQXVnIDE5OTgKKworCSRJZDogam95c3RpY2stYXBpLnR4dCx2IDEuMiAyMDAxLzA1LzA4IDIxOjIxOjIzIHZvanRlY2ggRXhwICQKKworMS4gSW5pdGlhbGl6YXRpb24KK35+fn5+fn5+fn5+fn5+fn5+CisKK09wZW4gdGhlIGpveXN0aWNrIGRldmljZSBmb2xsb3dpbmcgdGhlIHVzdWFsIHNlbWFudGljcyAodGhhdCBpcywgd2l0aCBvcGVuKS4KK1NpbmNlIHRoZSBkcml2ZXIgbm93IHJlcG9ydHMgZXZlbnRzIGluc3RlYWQgb2YgcG9sbGluZyBmb3IgY2hhbmdlcywKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSBvcGVuIGl0IHdpbGwgaXNzdWUgYSBzZXJpZXMgb2Ygc3ludGhldGljIGV2ZW50cworKEpTX0VWRU5UX0lOSVQpIHRoYXQgeW91IGNhbiByZWFkIHRvIGNoZWNrIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZQoram95c3RpY2suCisKK0J5IGRlZmF1bHQsIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGluIGJsb2NraW5nIG1vZGUuCisKKwlpbnQgZmQgPSBvcGVuICgiL2Rldi9qczAiLCBPX1JET05MWSk7CisKKworMi4gRXZlbnQgUmVhZGluZworfn5+fn5+fn5+fn5+fn5+fgorCisJc3RydWN0IGpzX2V2ZW50IGU7CisJcmVhZCAoZmQsICZlLCBzaXplb2Yoc3RydWN0IGpzX2V2ZW50KSk7CisKK3doZXJlIGpzX2V2ZW50IGlzIGRlZmluZWQgYXMKKworCXN0cnVjdCBqc19ldmVudCB7CisJCV9fdTMyIHRpbWU7ICAgICAvKiBldmVudCB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzICovCisJCV9fczE2IHZhbHVlOyAgICAvKiB2YWx1ZSAqLworCQlfX3U4IHR5cGU7ICAgICAgLyogZXZlbnQgdHlwZSAqLworCQlfX3U4IG51bWJlcjsgICAgLyogYXhpcy9idXR0b24gbnVtYmVyICovCisJfTsKKworSWYgdGhlIHJlYWQgaXMgc3VjY2Vzc2Z1bCwgaXQgd2lsbCByZXR1cm4gc2l6ZW9mKHN0cnVjdCBqc19ldmVudCksIHVubGVzcworeW91IHdhbnRlZCB0byByZWFkIG1vcmUgdGhhbiBvbmUgZXZlbnQgcGVyIHJlYWQgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xLgorCisKKzIuMSBqc19ldmVudC50eXBlCit+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgcG9zc2libGUgdmFsdWVzIG9mIGBgdHlwZScnIGFyZQorCisJI2RlZmluZSBKU19FVkVOVF9CVVRUT04gICAgICAgICAweDAxICAgIC8qIGJ1dHRvbiBwcmVzc2VkL3JlbGVhc2VkICovCisJI2RlZmluZSBKU19FVkVOVF9BWElTICAgICAgICAgICAweDAyICAgIC8qIGpveXN0aWNrIG1vdmVkICovCisJI2RlZmluZSBKU19FVkVOVF9JTklUICAgICAgICAgICAweDgwICAgIC8qIGluaXRpYWwgc3RhdGUgb2YgZGV2aWNlICovCisKK0FzIG1lbnRpb25lZCBhYm92ZSwgdGhlIGRyaXZlciB3aWxsIGlzc3VlIHN5bnRoZXRpYyBKU19FVkVOVF9JTklUIE9SZWQKK2V2ZW50cyBvbiBvcGVuLiBUaGF0IGlzLCBpZiBpdCdzIGlzc3VpbmcgYSBJTklUIEJVVFRPTiBldmVudCwgdGhlCitjdXJyZW50IHR5cGUgdmFsdWUgd2lsbCBiZQorCisJaW50IHR5cGUgPSBKU19FVkVOVF9CVVRUT04gfCBKU19FVkVOVF9JTklUOwkvKiAweDgxICovCisKK0lmIHlvdSBjaG9vc2Ugbm90IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzeW50aGV0aWMgb3IgcmVhbCBldmVudHMKK3lvdSBjYW4gdHVybiBvZmYgdGhlIEpTX0VWRU5UX0lOSVQgYml0cworCisJdHlwZSAmPSB+SlNfRVZFTlRfSU5JVDsJCQkJLyogMHgwMSAqLworCisKKzIuMiBqc19ldmVudC5udW1iZXIKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHZhbHVlcyBvZiBgYG51bWJlcicnIGNvcnJlc3BvbmQgdG8gdGhlIGF4aXMgb3IgYnV0dG9uIHRoYXQKK2dlbmVyYXRlZCB0aGUgZXZlbnQuIE5vdGUgdGhhdCB0aGV5IGNhcnJ5IHNlcGFyYXRlIG51bWVyYXRpb24gKHRoYXQKK2lzLCB5b3UgaGF2ZSBib3RoIGFuIGF4aXMgMCBhbmQgYSBidXR0b24gMCkuIEdlbmVyYWxseSwKKworCQkJbnVtYmVyCisJMXN0IEF4aXMgWAkwCisJMXN0IEF4aXMgWQkxCisJMm5kIEF4aXMgWAkyCisJMm5kIEF4aXMgWQkzCisJLi4uYW5kIHNvIG9uCisKK0hhdHMgdmFyeSBmcm9tIG9uZSBqb3lzdGljayB0eXBlIHRvIGFub3RoZXIuIFNvbWUgY2FuIGJlIG1vdmVkIGluIDgKK2RpcmVjdGlvbnMsIHNvbWUgb25seSBpbiA0LCBUaGUgZHJpdmVyLCBob3dldmVyLCBhbHdheXMgcmVwb3J0cyBhIGhhdCBhcyB0d28KK2luZGVwZW5kZW50IGF4aXMsIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYWxsb3cgaW5kZXBlbmRlbnQgbW92ZW1lbnQuCisKKworMi4zIGpzX2V2ZW50LnZhbHVlCit+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIGFuIGF4aXMsIGBgdmFsdWUnJyBpcyBhIHNpZ25lZCBpbnRlZ2VyIGJldHdlZW4gLTMyNzY3IGFuZCArMzI3NjcKK3JlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIGpveXN0aWNrIGFsb25nIHRoYXQgYXhpcy4gSWYgeW91Citkb24ndCByZWFkIGEgMCB3aGVuIHRoZSBqb3lzdGljayBpcyBgZGVhZCcsIG9yIGlmIGl0IGRvZXNuJ3Qgc3BhbiB0aGUKK2Z1bGwgcmFuZ2UsIHlvdSBzaG91bGQgcmVjYWxpYnJhdGUgaXQgKHdpdGgsIGZvciBleGFtcGxlLCBqc2NhbCkuCisKK0ZvciBhIGJ1dHRvbiwgYGB2YWx1ZScnIGZvciBhIHByZXNzIGJ1dHRvbiBldmVudCBpcyAxIGFuZCBmb3IgYSByZWxlYXNlCitidXR0b24gZXZlbnQgaXMgMC4KKworVGhvdWdoIHRoaXMKKworCWlmIChqc19ldmVudC50eXBlID09IEpTX0VWRU5UX0JVVFRPTikgeworCQlidXR0b25zX3N0YXRlIF49ICgxIDw8IGpzX2V2ZW50Lm51bWJlcik7CisJfQorCittYXkgd29yayB3ZWxsIGlmIHlvdSBoYW5kbGUgSlNfRVZFTlRfSU5JVCBldmVudHMgc2VwYXJhdGVseSwKKworCWlmICgoanNfZXZlbnQudHlwZSAmIH5KU19FVkVOVF9JTklUKSA9PSBKU19FVkVOVF9CVVRUT04pIHsKKwkJaWYgKGpzX2V2ZW50LnZhbHVlKQorCSAgICAgICAgCWJ1dHRvbnNfc3RhdGUgfD0gKDEgPDwganNfZXZlbnQubnVtYmVyKTsKKwkgICAJZWxzZQorCSAgICAgIAkJYnV0dG9uc19zdGF0ZSAmPSB+KDEgPDwganNfZXZlbnQubnVtYmVyKTsKKwl9CisKK2lzIG11Y2ggc2FmZXIgc2luY2UgaXQgY2FuJ3QgbG9zZSBzeW5jIHdpdGggdGhlIGRyaXZlci4gQXMgeW91IHdvdWxkCitoYXZlIHRvIHdyaXRlIGEgc2VwYXJhdGUgaGFuZGxlciBmb3IgSlNfRVZFTlRfSU5JVCBldmVudHMgaW4gdGhlIGZpcnN0CitzbmlwcGV0LCB0aGlzIGVuZHMgdXAgYmVpbmcgc2hvcnRlci4KKworCisyLjQganNfZXZlbnQudGltZQorfn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHRpbWUgYW4gZXZlbnQgd2FzIGdlbmVyYXRlZCBpcyBzdG9yZWQgaW4gYGBqc19ldmVudC50aW1lJycuIEl0J3MgYSB0aW1lCitpbiBtaWxsaXNlY29uZHMgc2luY2UgLi4uIHdlbGwsIHNpbmNlIHNvbWV0aW1lIGluIHRoZSBwYXN0LiAgVGhpcyBlYXNlcyB0aGUKK3Rhc2sgb2YgZGV0ZWN0aW5nIGRvdWJsZSBjbGlja3MsIGZpZ3VyaW5nIG91dCBpZiBtb3ZlbWVudCBvZiBheGlzIGFuZCBidXR0b24KK3ByZXNzZXMgaGFwcGVuZWQgYXQgdGhlIHNhbWUgdGltZSwgYW5kIHNpbWlsYXIuCisKKworMy4gUmVhZGluZworfn5+fn5+fn5+fgorCitJZiB5b3Ugb3BlbiB0aGUgZGV2aWNlIGluIGJsb2NraW5nIG1vZGUsIGEgcmVhZCB3aWxsIGJsb2NrICh0aGF0IGlzLAord2FpdCkgZm9yZXZlciB1bnRpbCBhbiBldmVudCBpcyBnZW5lcmF0ZWQgYW5kIGVmZmVjdGl2ZWx5IHJlYWQuIFRoZXJlCithcmUgdHdvIGFsdGVybmF0aXZlcyBpZiB5b3UgY2FuJ3QgYWZmb3JkIHRvIHdhaXQgZm9yZXZlciAod2hpY2ggaXMsCithZG1pdHRlZGx5LCBhIGxvbmcgdGltZTspCisKKwlhKSB1c2Ugc2VsZWN0IHRvIHdhaXQgdW50aWwgdGhlcmUncyBkYXRhIHRvIGJlIHJlYWQgb24gZmQsIG9yCisJICAgdW50aWwgaXQgdGltZW91dHMuIFRoZXJlJ3MgYSBnb29kIGV4YW1wbGUgb24gdGhlIHNlbGVjdCgyKQorCSAgIG1hbiBwYWdlLgorCisJYikgb3BlbiB0aGUgZGV2aWNlIGluIG5vbi1ibG9ja2luZyBtb2RlIChPX05PTkJMT0NLKQorCisKKzMuMSBPX05PTkJMT0NLCit+fn5+fn5+fn5+fn5+fgorCitJZiByZWFkIHJldHVybnMgLTEgd2hlbiByZWFkaW5nIGluIE9fTk9OQkxPQ0sgbW9kZSwgdGhpcyBpc24ndAorbmVjZXNzYXJpbHkgYSAicmVhbCIgZXJyb3IgKGNoZWNrIGVycm5vKDMpKTsgaXQgY2FuIGp1c3QgbWVhbiB0aGVyZQorYXJlIG5vIGV2ZW50cyBwZW5kaW5nIHRvIGJlIHJlYWQgb24gdGhlIGRyaXZlciBxdWV1ZS4gWW91IHNob3VsZCByZWFkCithbGwgZXZlbnRzIG9uIHRoZSBxdWV1ZSAodGhhdCBpcywgdW50aWwgeW91IGdldCBhIC0xKS4KKworRm9yIGV4YW1wbGUsCisKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAocmVhZCAoZmQsICZlLCBzaXplb2Yoc3RydWN0IGpzX2V2ZW50KSkgPiAwKSB7CisJICAgICAgICAJcHJvY2Vzc19ldmVudCAoZSk7CisJICAgCX0KKwkgICAJLyogRUFHQUlOIGlzIHJldHVybmVkIHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5ICovCisJICAgCWlmIChlcnJubyAhPSBFQUdBSU4pIHsKKwkgICAgICAJCS8qIGVycm9yICovCisJICAgCX0KKwkgICAJLyogZG8gc29tZXRoaW5nIGludGVyZXN0aW5nIHdpdGggcHJvY2Vzc2VkIGV2ZW50cyAqLworCX0KKworT25lIHJlYXNvbiBmb3IgZW1wdHlpbmcgdGhlIHF1ZXVlIGlzIHRoYXQgaWYgaXQgZ2V0cyBmdWxsIHlvdSdsbCBzdGFydAorbWlzc2luZyBldmVudHMgc2luY2UgdGhlIHF1ZXVlIGlzIGZpbml0ZSwgYW5kIG9sZGVyIGV2ZW50cyB3aWxsIGdldAorb3ZlcndyaXR0ZW4uCisKK1RoZSBvdGhlciByZWFzb24gaXMgdGhhdCB5b3Ugd2FudCB0byBrbm93IGFsbCB3aGF0IGhhcHBlbmVkLCBhbmQgbm90CitkZWxheSB0aGUgcHJvY2Vzc2luZyB0aWxsIGxhdGVyLgorCitXaHkgY2FuIGdldCB0aGUgcXVldWUgZnVsbD8gQmVjYXVzZSB5b3UgZG9uJ3QgZW1wdHkgdGhlIHF1ZXVlIGFzCittZW50aW9uZWQsIG9yIGJlY2F1c2UgdG9vIG11Y2ggdGltZSBlbGFwc2VzIGZyb20gb25lIHJlYWQgdG8gYW5vdGhlcgorYW5kIHRvbyBtYW55IGV2ZW50cyB0byBzdG9yZSBpbiB0aGUgcXVldWUgZ2V0IGdlbmVyYXRlZC4gTm90ZSB0aGF0CitoaWdoIHN5c3RlbSBsb2FkIG1heSBjb250cmlidXRlIHRvIHNwYWNlIHRob3NlIHJlYWRzIGV2ZW4gbW9yZS4KKworSWYgdGltZSBiZXR3ZWVuIHJlYWRzIGlzIGVub3VnaCB0byBmaWxsIHRoZSBxdWV1ZSBhbmQgbG9zZSBhbiBldmVudCwKK3RoZSBkcml2ZXIgd2lsbCBzd2l0Y2ggdG8gc3RhcnR1cCBtb2RlIGFuZCBuZXh0IHRpbWUgeW91IHJlYWQgaXQsCitzeW50aGV0aWMgZXZlbnRzIChKU19FVkVOVF9JTklUKSB3aWxsIGJlIGdlbmVyYXRlZCB0byBpbmZvcm0geW91IG9mCit0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBqb3lzdGljay4KKworW0FzIGZvciB2ZXJzaW9uIDEuMi44LCB0aGUgcXVldWUgaXMgY2lyY3VsYXIgYW5kIGFibGUgdG8gaG9sZCA2NAorIGV2ZW50cy4gWW91IGNhbiBpbmNyZW1lbnQgdGhpcyBzaXplIGJ1bXBpbmcgdXAgSlNfQlVGRl9TSVpFIGluCisgam95c3RpY2suaCBhbmQgcmVjb21waWxpbmcgdGhlIGRyaXZlci5dCisKKworSW4gdGhlIGFib3ZlIGNvZGUsIHlvdSBtaWdodCBhcyB3ZWxsIHdhbnQgdG8gcmVhZCBtb3JlIHRoYW4gb25lIGV2ZW50CithdCBhIHRpbWUgdXNpbmcgdGhlIHR5cGljYWwgcmVhZCgyKSBmdW5jdGlvbmFsaXR5LiBGb3IgdGhhdCwgeW91IHdvdWxkCityZXBsYWNlIHRoZSByZWFkIGFib3ZlIHdpdGggc29tZXRoaW5nIGxpa2UKKworCXN0cnVjdCBqc19ldmVudCBteWJ1ZmZlclsweGZmXTsKKwlpbnQgaSA9IHJlYWQgKGZkLCBteWJ1ZmZlciwgc2l6ZW9mKHN0cnVjdCBteWJ1ZmZlcikpOworCitJbiB0aGlzIGNhc2UsIHJlYWQgd291bGQgcmV0dXJuIC0xIGlmIHRoZSBxdWV1ZSB3YXMgZW1wdHksIG9yIHNvbWUKK290aGVyIHZhbHVlIGluIHdoaWNoIHRoZSBudW1iZXIgb2YgZXZlbnRzIHJlYWQgd291bGQgYmUgaSAvCitzaXplb2YoanNfZXZlbnQpICBBZ2FpbiwgaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgaXQncyBhIGdvb2QgaWRlYSB0bworcHJvY2VzcyB0aGUgZXZlbnRzIGFuZCBrZWVwIHJlYWRpbmcgaXQgdW50aWwgeW91IGVtcHR5IHRoZSBkcml2ZXIgcXVldWUuCisKKworNC4gSU9DVExzCit+fn5+fn5+fn4KKworVGhlIGpveXN0aWNrIGRyaXZlciBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgaW9jdGwoMikgb3BlcmF0aW9ucy4KKworCQkJCS8qIGZ1bmN0aW9uCQkJM3JkIGFyZyAgKi8KKwkjZGVmaW5lIEpTSU9DR0FYRVMJLyogZ2V0IG51bWJlciBvZiBheGVzCQljaGFyCSAqLworCSNkZWZpbmUgSlNJT0NHQlVUVE9OUwkvKiBnZXQgbnVtYmVyIG9mIGJ1dHRvbnMJY2hhcgkgKi8KKwkjZGVmaW5lIEpTSU9DR1ZFUlNJT04JLyogZ2V0IGRyaXZlciB2ZXJzaW9uCQlpbnQJICovCisJI2RlZmluZSBKU0lPQ0dOQU1FKGxlbikgLyogZ2V0IGlkZW50aWZpZXIgc3RyaW5nCWNoYXIJICovCisJI2RlZmluZSBKU0lPQ1NDT1JSCS8qIHNldCBjb3JyZWN0aW9uIHZhbHVlcwkmanNfY29yciAqLworCSNkZWZpbmUgSlNJT0NHQ09SUgkvKiBnZXQgY29ycmVjdGlvbiB2YWx1ZXMJJmpzX2NvcnIgKi8KKworRm9yIGV4YW1wbGUsIHRvIHJlYWQgdGhlIG51bWJlciBvZiBheGVzCisKKwljaGFyIG51bWJlcl9vZl9heGVzOworCWlvY3RsIChmZCwgSlNJT0NHQVhFUywgJm51bWJlcl9vZl9heGVzKTsKKworCis0LjEgSlNJT0dDVkVSU0lPTgorfn5+fn5+fn5+fn5+fn5+fn4KKworSlNJT0dDVkVSU0lPTiBpcyBhIGdvb2Qgd2F5IHRvIGNoZWNrIGluIHJ1bi10aW1lIHdoZXRoZXIgdGhlIHJ1bm5pbmcKK2RyaXZlciBpcyAxLjArIGFuZCBzdXBwb3J0cyB0aGUgZXZlbnQgaW50ZXJmYWNlLiBJZiBpdCBpcyBub3QsIHRoZQorSU9DVEwgd2lsbCBmYWlsLiBGb3IgYSBjb21waWxlLXRpbWUgZGVjaXNpb24sIHlvdSBjYW4gdGVzdCB0aGUKK0pTX1ZFUlNJT04gc3ltYm9sCisKKwkjaWZkZWYgSlNfVkVSU0lPTgorCSNpZiBKU19WRVJTSU9OID4gMHhzb21ldGhpbmcKKworCis0LjIgSlNJT0NHTkFNRQorfn5+fn5+fn5+fn5+fn4KKworSlNJT0NHTkFNRShsZW4pIGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBuYW1lIHN0cmluZyBvZiB0aGUgam95c3RpY2sgLSB0aGUgc2FtZQorYXMgaXMgYmVpbmcgcHJpbnRlZCBhdCBib290IHRpbWUuIFRoZSAnbGVuJyBhcmd1bWVudCBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorYnVmZmVyIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhc2tpbmcgZm9yIHRoZSBuYW1lLiBJdCBpcyB1c2VkIHRvIGF2b2lkCitwb3NzaWJsZSBvdmVycnVuIHNob3VsZCB0aGUgbmFtZSBiZSB0b28gbG9uZy4KKworCWNoYXIgbmFtZVsxMjhdOworCWlmIChpb2N0bChmZCwgSlNJT0NHTkFNRShzaXplb2YobmFtZSkpLCBuYW1lKSA8IDApCisJCXN0cm5jcHkobmFtZSwgIlVua25vd24iLCBzaXplb2YobmFtZSkpOworCXByaW50ZigiTmFtZTogJXNcbiIsIG5hbWUpOworCisKKzQuMyBKU0lPQ1tTR11DT1JSCit+fn5+fn5+fn5+fn5+fn5+fgorCitGb3IgdXNhZ2Ugb24gSlNJT0NbU0ddQ09SUiBJIHN1Z2dlc3QgeW91IHRvIGxvb2sgaW50byBqc2NhbC5jICBUaGV5IGFyZQorbm90IG5lZWRlZCBpbiBhIG5vcm1hbCBwcm9ncmFtLCBvbmx5IGluIGpveXN0aWNrIGNhbGlicmF0aW9uIHNvZnR3YXJlCitzdWNoIGFzIGpzY2FsIG9yIGtjbWpveS4gVGhlc2UgSU9DVExzIGFuZCBkYXRhIHR5cGVzIGFyZW4ndCBjb25zaWRlcmVkCit0byBiZSBpbiB0aGUgc3RhYmxlIHBhcnQgb2YgdGhlIEFQSSwgYW5kIHRoZXJlZm9yZSBtYXkgY2hhbmdlIHdpdGhvdXQKK3dhcm5pbmcgaW4gZm9sbG93aW5nIHJlbGVhc2VzIG9mIHRoZSBkcml2ZXIuCisKK0JvdGggSlNJT0NTQ09SUiBhbmQgSlNJT0NHQ09SUiBleHBlY3QgJmpzX2NvcnIgdG8gYmUgYWJsZSB0byBob2xkCitpbmZvcm1hdGlvbiBmb3IgYWxsIGF4aXMuIFRoYXQgaXMsIHN0cnVjdCBqc19jb3JyIGNvcnJbTUFYX0FYSVNdOworCitzdHJ1Y3QganNfY29yciBpcyBkZWZpbmVkIGFzCisKKwlzdHJ1Y3QganNfY29yciB7CisJCV9fczMyIGNvZWZbOF07CisJCV9fdTE2IHByZWM7CisJCV9fdTE2IHR5cGU7CisJfTsKKworYW5kIGBgdHlwZScnCisKKwkjZGVmaW5lIEpTX0NPUlJfTk9ORSAgICAgICAgICAgIDB4MDAgICAgLyogcmV0dXJucyByYXcgdmFsdWVzICovCisJI2RlZmluZSBKU19DT1JSX0JST0tFTiAgICAgICAgICAweDAxICAgIC8qIGJyb2tlbiBsaW5lICovCisKKworNS4gQmFja3dhcmQgY29tcGF0aWJpbGl0eQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgMC54IGpveXN0aWNrIGRyaXZlciBBUEkgaXMgcXVpdGUgbGltaXRlZCBhbmQgaXRzIHVzYWdlIGlzIGRlcHJlY2F0ZWQuCitUaGUgZHJpdmVyIG9mZmVycyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aG91Z2guIEhlcmUncyBhIHF1aWNrIHN1bW1hcnk6CisKKwlzdHJ1Y3QgSlNfREFUQV9UWVBFIGpzOworCXdoaWxlICgxKSB7CisJCWlmIChyZWFkIChmZCwgJmpzLCBKU19SRVRVUk4pICE9IEpTX1JFVFVSTikgeworCSAgICAgIAkJLyogZXJyb3IgKi8KKwkgICAJfQorCSAgIAl1c2xlZXAgKDEwMDApOworCX0KKworQXMgeW91IGNhbiBmaWd1cmUgb3V0IGZyb20gdGhlIGV4YW1wbGUsIHRoZSByZWFkIHJldHVybnMgaW1tZWRpYXRlbHksCit3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIGpveXN0aWNrLgorCisJc3RydWN0IEpTX0RBVEFfVFlQRSB7CisJCWludCBidXR0b25zOyAgICAvKiBpbW1lZGlhdGUgYnV0dG9uIHN0YXRlICovCisJCWludCB4OyAgICAgICAgICAvKiBpbW1lZGlhdGUgeCBheGlzIHZhbHVlICovCisJCWludCB5OyAgICAgICAgICAvKiBpbW1lZGlhdGUgeSBheGlzIHZhbHVlICovCisJfTsKKworYW5kIEpTX1JFVFVSTiBpcyBkZWZpbmVkIGFzCisKKwkjZGVmaW5lIEpTX1JFVFVSTiAgICAgICBzaXplb2Yoc3RydWN0IEpTX0RBVEFfVFlQRSkKKworVG8gdGVzdCB0aGUgc3RhdGUgb2YgdGhlIGJ1dHRvbnMsCisKKwlmaXJzdF9idXR0b25fc3RhdGUgID0ganMuYnV0dG9ucyAmIDE7CisJc2Vjb25kX2J1dHRvbl9zdGF0ZSA9IGpzLmJ1dHRvbnMgJiAyOworCitUaGUgYXhpcyB2YWx1ZXMgZG8gbm90IGhhdmUgYSBkZWZpbmVkIHJhbmdlIGluIHRoZSBvcmlnaW5hbCAwLnggZHJpdmVyLAorZXhjZXB0IGZvciB0aGF0IHRoZSB2YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZS4gVGhlIDEuMi44KyBkcml2ZXJzIHVzZSBhCitmaXhlZCByYW5nZSBmb3IgcmVwb3J0aW5nIHRoZSB2YWx1ZXMsIDEgYmVpbmcgdGhlIG1pbmltdW0sIDEyOCB0aGUKK2NlbnRlciwgYW5kIDI1NSBtYXhpbXVtIHZhbHVlLgorCitUaGUgdjAuOC4wLjIgZHJpdmVyIGFsc28gaGFkIGFuIGludGVyZmFjZSBmb3IgJ2RpZ2l0YWwgam95c3RpY2tzJywgKG5vdworY2FsbGVkIE11bHRpc3lzdGVtIGpveXN0aWNrcyBpbiB0aGlzIGRyaXZlciksIHVuZGVyIC9kZXYvZGpzWC4gVGhpcyBkcml2ZXIKK2RvZXNuJ3QgdHJ5IHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGF0IGludGVyZmFjZS4KKworCis2LiBGaW5hbCBOb3Rlcworfn5+fn5+fn5+fn5+fn4KKworX19fXy98CUNvbW1lbnRzLCBhZGRpdGlvbnMsIGFuZCBzcGVjaWFsbHkgY29ycmVjdGlvbnMgYXJlIHdlbGNvbWUuCitcIG8uT3wJRG9jdW1lbnRhdGlvbiB2YWxpZCBmb3IgYXQgbGVhc3QgdmVyc2lvbiAxLjIuOCBvZiB0aGUgam95c3RpY2sKKyA9KF8pPQlkcml2ZXIgYW5kIGFzIHVzdWFsLCB0aGUgdWx0aW1hdGUgc291cmNlIGZvciBkb2N1bWVudGF0aW9uIGlzCisgICBVCXRvICJVc2UgVGhlIFNvdXJjZSBMdWtlIiBvciwgYXQgeW91ciBjb252ZW5pZW5jZSwgVm9qdGVjaCA7KQorCisJCQkJCS0gUmFnbmFyCitFT0YKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTAxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CkBAIC0wLDAgKzEsNTQyIEBACisJCSAgICBMaW51eCBKb3lzdGljayBwYXJwb3J0IGRyaXZlcnMgdjIuMAorCSAgICAgICAoYykgMTk5OC0yMDAwIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4KKwkgICAgICAgKGMpIDE5OTggQW5kcmVlIEJvcnJtYW5uIDxhLmJvcnJtYW5uQHR1LWJzLmRlPgorCQkJICAgICBTcG9uc29yZWQgYnkgU3VTRQorCSRJZDogam95c3RpY2stcGFycG9ydC50eHQsdiAxLjYgMjAwMS8wOS8yNSAwOTozMTozMiB2b2p0ZWNoIEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzAuIERpc2NsYWltZXIKK35+fn5+fn5+fn5+fn4KKyAgQW55IGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBpcyBwcm92aWRlZCBhcy1pcywgd2l0aG91dCBhbnkgZ3VhcmFudGVlIHRoYXQKK2l0IHdpbGwgYmUgdHJ1ZS4gU28sIHVzZSBpdCBhdCB5b3VyIG93biByaXNrLiBUaGUgcG9zc2libGUgZGFtYWdlcyB0aGF0IGNhbgoraGFwcGVuIGluY2x1ZGUgYnVybmluZyB5b3VyIHBhcmFsbGVsIHBvcnQsIGFuZC9vciB0aGUgc3RpY2tzIGFuZCBqb3lzdGljaworYW5kIG1heWJlIGV2ZW4gbW9yZS4gTGlrZSB3aGVuIGEgbGlnaHRuaW5nIGtpbGxzIHlvdSBpdCBpcyBub3Qgb3VyIHByb2JsZW0uCisKKzEuIEludHJvCit+fn5+fn5+fgorICBUaGUgam95c3RpY2sgcGFycG9ydCBkcml2ZXJzIGFyZSB1c2VkIGZvciBqb3lzdGlja3MgYW5kIGdhbWVwYWRzIG5vdAorb3JpZ2luYWxseSBkZXNpZ25lZCBmb3IgUENzIGFuZCBvdGhlciBjb21wdXRlcnMgTGludXggcnVucyBvbi4gQmVjYXVzZSBvZgordGhhdCwgUENzIHVzdWFsbHkgbGFjayB0aGUgcmlnaHQgcG9ydHMgdG8gY29ubmVjdCB0aGVzZSBkZXZpY2VzIHRvLiBQYXJhbGxlbAorcG9ydCwgYmVjYXVzZSBvZiBpdHMgYWJpbGl0eSB0byBjaGFuZ2Ugc2luZ2xlIGJpdHMgYXQgd2lsbCwgYW5kIHByb3ZpZGluZworYm90aCBvdXRwdXQgYW5kIGlucHV0IGJpdHMgaXMgdGhlIG1vc3Qgc3VpdGFibGUgcG9ydCBvbiB0aGUgUEMgZm9yCitjb25uZWN0aW5nIHN1Y2ggZGV2aWNlcy4KKworMi4gRGV2aWNlcyBzdXBwb3J0ZWQKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisgIE1hbnkgY29uc29sZSBhbmQgOC1iaXQgY29tcHV0ZXIgZ2FtZXBhZHMgYW5kIGpveXN0aWNrcyBhcmUgc3VwcG9ydGVkLiBUaGUKK2ZvbGxvd2luZyBzdWJzZWN0aW9ucyBkaXNjdXNzIHVzYWdlIG9mIGVhY2guCisKKzIuMSBORVMgYW5kIFNORVMKK35+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIE5pbnRlbmRvIEVudGVydGFpbm1lbnQgU3lzdGVtIGFuZCBTdXBlciBOaW50ZW5kbyBFbnRlcnRhaW5tZW50IFN5c3RlbQorZ2FtZXBhZHMgYXJlIHdpZGVseSBhdmFpbGFibGUsIGFuZCBlYXN5IHRvIGdldC4gQWxzbywgdGhleSBhcmUgcXVpdGUgZWFzeSB0bworY29ubmVjdCB0byBhIFBDLCBhbmQgZG9uJ3QgbmVlZCBtdWNoIHByb2Nlc3Npbmcgc3BlZWQgKDEwOCB1cyBmb3IgTkVTIGFuZAorMTY1IHVzIGZvciBTTkVTLCBjb21wYXJlZCB0byBhYm91dCAxMDAwIHVzIGZvciBQQyBnYW1lcGFkcykgdG8gY29tbXVuaWNhdGUKK3dpdGggdGhlbS4KKworICBBbGwgTkVTIGFuZCBTTkVTIHVzZSB0aGUgc2FtZSBzeW5jaHJvbm91cyBzZXJpYWwgcHJvdG9jb2wsIGNsb2NrZWQgZnJvbQordGhlIGNvbXB1dGVyJ3Mgc2lkZSAoYW5kIHRodXMgdGltaW5nIGluc2Vuc2l0aXZlKS4gVG8gYWxsb3cgdXAgdG8gNSBORVMKK2FuZC9vciBTTkVTIGdhbWVwYWRzIGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydCBhdCBvbmNlLCB0aGUgb3V0cHV0CitsaW5lcyBvZiB0aGUgcGFyYWxsZWwgcG9ydCBhcmUgc2hhcmVkLCB3aGlsZSBvbmUgb2YgNSBhdmFpbGFibGUgaW5wdXQgbGluZXMKK2lzIGFzc2lnbmVkIHRvIGVhY2ggZ2FtZXBhZC4KKworICBUaGlzIHByb3RvY29sIGlzIGhhbmRsZWQgYnkgdGhlIGdhbWVjb24uYyBkcml2ZXIsIHNvIHRoYXQncyB0aGUgb25lCit5b3UnbGwgdXNlIGZvciBORVMgYW5kIFNORVMgZ2FtZXBhZHMuCisKKyAgVGhlIG1haW4gcHJvYmxlbSB3aXRoIFBDIHBhcmFsbGVsIHBvcnRzIGlzIHRoYXQgdGhleSBkb24ndCBoYXZlICs1ViBwb3dlcgorc291cmNlIG9uIGFueSBvZiB0aGVpciBwaW5zLiBTbywgaWYgeW91IHdhbnQgYSByZWxpYWJsZSBzb3VyY2Ugb2YgcG93ZXIKK2ZvciB5b3VyIHBhZHMsIHVzZSBlaXRoZXIga2V5Ym9hcmQgb3Igam95c3RpY2sgcG9ydCwgYW5kIG1ha2UgYSBwYXNzLXRocm91Z2gKK2NhYmxlLiBZb3UgY2FuIGFsc28gcHVsbCB0aGUgcG93ZXIgZGlyZWN0bHkgZnJvbSB0aGUgcG93ZXIgc3VwcGx5ICh0aGUgcmVkCit3aXJlIGlzICs1VikuCisKKyAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBwYXJhbGxlbCBwb3J0IG9ubHksIHlvdSBjYW4gdGFrZSB0aGUgcG93ZXIgaXMgZnJvbQorc29tZSBkYXRhIHBpbi4gRm9yIG1vc3QgZ2FtZXBhZCBhbmQgcGFycG9ydCBpbXBsZW1lbnRhdGlvbnMgb25seSBvbmUgcGluIGlzCituZWVkZWQsIGFuZCBJJ2QgcmVjb21tZW5kIHBpbiA5IGZvciB0aGF0LCB0aGUgaGlnaGVzdCBkYXRhIGJpdC4gT24gdGhlIG90aGVyCitoYW5kLCBpZiB5b3UgYXJlIG5vdCBwbGFubmluZyB0byB1c2UgYW55dGhpbmcgZWxzZSB0aGFuIE5FUyAvIFNORVMgb24gdGhlCitwb3J0LCBhbnl0aGluZyBiZXR3ZWVuIGFuZCBpbmNsdWRpbmcgcGluIDQgYW5kIHBpbiA5IHdpbGwgd29yay4KKworKHBpbiA5KSAtLS0tLT4gUG93ZXIKKworICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcGFkcyB0aGF0IG5lZWQgYSBsb3QgbW9yZSBvZiBwb3dlciwgYW5kIHBhcmFsbGVsCitwb3J0cyB0aGF0IGNhbid0IGdpdmUgbXVjaCBjdXJyZW50IHRocm91Z2ggdGhlIGRhdGEgcGlucy4gSWYgdGhpcyBpcyB5b3VyCitjYXNlLCB5b3UnbGwgbmVlZCB0byB1c2UgZGlvZGVzIChhcyBhIHByZXZlbnRpb24gb2YgZGVzdHJveWluZyB5b3VyIHBhcmFsbGVsCitwb3J0KSwgYW5kIGNvbWJpbmUgdGhlIGN1cnJlbnRzIG9mIHR3byBvciBtb3JlIGRhdGEgYml0cyB0b2dldGhlci4KKworCSAgIERpb2RlcworKHBpbiA5KSAtLS0tfD58LS0tLS0tLSstLS0tLS0+IFBvd2VyCisJCSAgICAgIHwKKyhwaW4gOCkgLS0tLXw+fC0tLS0tLS0rCisJCSAgICAgIHwKKyhwaW4gNykgLS0tLXw+fC0tLS0tLS0rCisJCSAgICAgIHwKKyA8YW5kIHNvIG9uPiAgICAgICAgICA6CisJCSAgICAgIHwKKyhwaW4gNCkgLS0tLXw+fC0tLS0tLS0rCisKKyAgR3JvdW5kIGlzIHF1aXRlIGVhc3kuIE9uIFBDJ3MgcGFyYWxsZWwgcG9ydCB0aGUgZ3JvdW5kIGlzIG9uIGFueSBvZiB0aGUKK3BpbnMgZnJvbSBwaW4gMTggdG8gcGluIDI1LiBTbyB1c2UgYW55IHBpbiBvZiB0aGVzZSB5b3UgbGlrZSBmb3IgdGhlIGdyb3VuZC4KKworKHBpbiAxOCkgLS0tLS0+IEdyb3VuZAorCisgIE5FUyBhbmQgU05FUyBwYWRzIGhhdmUgdHdvIGlucHV0IGJpdHMsIENsb2NrIGFuZCBMYXRjaCwgd2hpY2ggZHJpdmUgdGhlCitzZXJpYWwgdHJhbnNmZXIuIFRoZXNlIGFyZSBjb25uZWN0ZWQgdG8gcGlucyAyIGFuZCAzIG9mIHRoZSBwYXJhbGxlbCBwb3J0LAorcmVzcGVjdGl2ZWx5LgorCisocGluIDIpIC0tLS0tPiBDbG9jaworKHBpbiAzKSAtLS0tLT4gTGF0Y2gKKworICBBbmQgdGhlIGxhc3QgdGhpbmcgaXMgdGhlIE5FUyAvIFNORVMgZGF0YSB3aXJlLiBPbmx5IHRoYXQgaXNuJ3Qgc2hhcmVkIGFuZAorZWFjaCBwYWQgbmVlZHMgaXRzIG93biBkYXRhIHBpbi4gVGhlIHBhcmFsbGVsIHBvcnQgcGlucyBhcmU6CisKKyhwaW4gMTApIC0tLS0tPiBQYWQgMSBkYXRhCisocGluIDExKSAtLS0tLT4gUGFkIDIgZGF0YQorKHBpbiAxMikgLS0tLS0+IFBhZCAzIGRhdGEKKyhwaW4gMTMpIC0tLS0tPiBQYWQgNCBkYXRhCisocGluIDE1KSAtLS0tLT4gUGFkIDUgZGF0YQorCisgIE5vdGUgdGhhdCBwaW4gMTQgaXMgbm90IHVzZWQsIHNpbmNlIGl0IGlzIG5vdCBhbiBpbnB1dCBwaW4gb24gdGhlIHBhcmFsbGVsCitwb3J0LgorCisgIFRoaXMgaXMgZXZlcnl0aGluZyB5b3UgbmVlZCBvbiB0aGUgUEMncyBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLCBub3cgb24gdG8KK3RoZSBnYW1lcGFkcyBzaWRlLiBUaGUgTkVTIGFuZCBTTkVTIGhhdmUgZGlmZmVyZW50IGNvbm5lY3RvcnMuIEFsc28sIHRoZXJlCithcmUgcXVpdGUgYSBsb3Qgb2YgTkVTIGNsb25lcywgYW5kIGJlY2F1c2UgTmludGVuZG8gdXNlZCBwcm9wcmlldGFyeQorY29ubmVjdG9ycyBmb3IgdGhlaXIgbWFjaGluZXMsIHRoZSBjbG9uZXJzIGNvdWxkbid0IGFuZCB1c2VkIHN0YW5kYXJkIEQtQ2Fubm9uCitjb25uZWN0b3JzLiBBbnl3YXksIGlmIHlvdSd2ZSBnb3QgYSBnYW1lcGFkLCBhbmQgaXQgaGFzIGJ1dHRvbnMgQSwgQiwgVHVyYm8KK0EsIFR1cmJvIEIsIFNlbGVjdCBhbmQgU3RhcnQsIGFuZCBpcyBjb25uZWN0ZWQgdGhyb3VnaCA1IHdpcmVzLCB0aGVuIGl0IGlzCitlaXRoZXIgYSBORVMgb3IgTkVTIGNsb25lIGFuZCB3aWxsIHdvcmsgd2l0aCB0aGlzIGNvbm5lY3Rpb24uIFNORVMgZ2FtZXBhZHMKK2Fsc28gdXNlIDUgd2lyZXMsIGJ1dCBoYXZlIG1vcmUgYnV0dG9ucy4gVGhleSB3aWxsIHdvcmsgYXMgd2VsbCwgb2YgY291cnNlLgorCitQaW5vdXQgZm9yIE5FUyBnYW1lcGFkcyAgICAgICAgICAgICAgICAgUGlub3V0IGZvciBTTkVTIGdhbWVwYWRzCisKKwkgICArLS0tLT4gUG93ZXIgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyB8IG8gIG8gIG8gIG8gfCAgeCAgeCAgbyAgfCAxCisgNSArLS0tLS0tLS0tKyAgNyAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisgICB8IHggIHggIG8gICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgIHwgICAgICAgICAgfAorICAgfCBvICBvICBvICBvIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8ICB8ICAgICAgICAgICstPiBHcm91bmQKKyA0ICstLS0tLS0tLS0tLS0rIDEgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgfCAgKy0tLS0tLS0tLS0tLT4gRGF0YQorICAgICB8ICB8ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICArLS0tLS0tLS0tLS0tLS0tPiBMYXRjaAorICAgICB8ICB8ICB8ICArLT4gR3JvdW5kICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tPiBDbG9jaworICAgICB8ICB8ICArLS0tLT4gQ2xvY2sgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBQb3dlcgorICAgICB8ICArLS0tLS0tLT4gTGF0Y2gKKyAgICAgKy0tLS0tLS0tLS0+IERhdGEKKworUGlub3V0IGZvciBORVMgY2xvbmUgKGRiOSkgZ2FtZXBhZHMgICAgIFBpbm91dCBmb3IgTkVTIGNsb25lIChkYjE1KSBnYW1lcGFkcworCisJKy0tLS0tLS0tLT4gQ2xvY2sgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLT4gRGF0YQorCXwgKy0tLS0tLS0+IExhdGNoICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICstLS0+IEdyb3VuZAorCXwgfCArLS0tLS0+IERhdGEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKwl8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX18KKyAgICBfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgOCBcIG8geCB4IHggeCB4IHggbyAvIDEKKyAgNSBcIHggbyBvIG8geCAvIDEgICAgICAgICAgICAgICAgICAgICAgICAgXCBvIHggeCBvIHggeCBvIC8KKyAgICAgXCB4IG8geCBvIC8gICAgICAgICAgICAgICAgICAgICAgICAgIDE1IGB+fn5+fn5+fn5+fn5+JyA5CisgICAgOSBgfn5+fn5+ficgNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgfAorCSB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgKy0tLS0+IENsb2NrCisJIHwgICArLS0tLT4gUG93ZXIgICAgICAgICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLT4gTGF0Y2gKKwkgKy0tLS0tLS0tPiBHcm91bmQgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tPiBQb3dlcgorCisyLjIgTXVsdGlzeXN0ZW0gam95c3RpY2tzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIEluIHRoZSBlcmEgb2YgOC1iaXQgbWFjaGluZXMsIHRoZXJlIHdhcyBzb21ldGhpbmcgbGlrZSBkZS1mYWN0byBzdGFuZGFyZAorZm9yIGpveXN0aWNrIHBvcnRzLiBUaGV5IHdlcmUgYWxsIGRpZ2l0YWwsIGFuZCBhbGwgdXNlZCBELUNhbm5vbiA5IHBpbgorY29ubmVjdG9ycyAoZGI5KS4gQmVjYXVzZSBvZiB0aGF0LCBhIHNpbmdsZSBqb3lzdGljayBjb3VsZCBiZSB1c2VkIHdpdGhvdXQKK2hhc3NsZSBvbiBBdGFyaSAoMTMwLCA4MDBYRSwgODAwWEwsIDI2MDAsIDcyMDApLCBBbWlnYSwgQ29tbW9kb3JlIEM2NCwKK0Ftc3RyYWQgQ1BDLCBTaW5jbGFpciBaWCBTcGVjdHJ1bSBhbmQgbWFueSBvdGhlciBtYWNoaW5lcy4gVGhhdCdzIHdoeSB0aGVzZQoram95c3RpY2tzIGFyZSBjYWxsZWQgIk11bHRpc3lzdGVtIi4KKworICBOb3cgdGhlaXIgcGlub3V0OgorCisgICAgICArLS0tLS0tLS0tPiBSaWdodAorICAgICAgfCArLS0tLS0tLT4gTGVmdAorICAgICAgfCB8ICstLS0tLT4gRG93bgorICAgICAgfCB8IHwgKy0tLT4gVXAKKyAgICAgIHwgfCB8IHwKKyAgX19fX19fX19fX19fXworNSBcIHggbyBvIG8gbyAvIDEKKyAgIFwgeCBvIHggbyAvCisgIDkgYH5+fn5+fn4nIDYKKyAgICAgICB8ICAgfAorICAgICAgIHwgICArLS0tLT4gQnV0dG9uCisgICAgICAgKy0tLS0tLS0tPiBHcm91bmQKKworICBIb3dldmVyLCBhcyB0aW1lIHBhc3NlZCwgZXh0ZW5zaW9ucyB0byB0aGlzIHN0YW5kYXJkIGRldmVsb3BlZCwgYW5kIHRoZXNlCit3ZXJlIG5vdCBjb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlcjoKKworCisJQXRhcmkgMTMwLCA4MDAvWEwvWEUJCSAgIE1TWAorCisJCQkJCSArLS0tLS0tLS0tLS0+IFBvd2VyCisgICAgICArLS0tLS0tLS0tPiBSaWdodCAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLT4gUmlnaHQKKyAgICAgIHwgKy0tLS0tLS0+IExlZnQgICAgICAgICAgICAgICAgICAgfCB8ICstLS0tLS0tPiBMZWZ0CisgICAgICB8IHwgKy0tLS0tPiBEb3duICAgICAgICAgICAgICAgICAgIHwgfCB8ICstLS0tLT4gRG93bgorICAgICAgfCB8IHwgKy0tLT4gVXAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8ICstLS0+IFVwCisgICAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwgfAorICBfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fXworNSBcIHggbyBvIG8gbyAvIDEgICAgICAgICAgICAgICAgICAgIDUgXCBvIG8gbyBvIG8gLyAxCisgICBcIHggbyBvIG8gLyAgICAgICAgICAgICAgICAgICAgICAgICAgXCBvIG8gbyBvIC8KKyAgOSBgfn5+fn5+ficgNiAgICAgICAgICAgICAgICAgICAgICAgIDkgYH5+fn5+fn4nIDYKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwKKyAgICAgICB8IHwgKy0tLS0+IEJ1dHRvbiAgICAgICAgICAgICAgICAgIHwgfCB8ICstLS0tPiBCdXR0b24gMQorICAgICAgIHwgKy0tLS0tLT4gUG93ZXIgICAgICAgICAgICAgICAgICAgfCB8ICstLS0tLS0+IEJ1dHRvbiAyCisgICAgICAgKy0tLS0tLS0tPiBHcm91bmQgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLT4gT3V0cHV0IDMKKwkJCQkJICArLS0tLS0tLS0tLT4gR3JvdW5kCisKKwlBbXN0cmFkIENQQwkJCSAgIENvbW1vZG9yZSBDNjQKKworCQkJCQkgKy0tLS0tLS0tLS0tPiBBbmFsb2cgWQorICAgICAgKy0tLS0tLS0tLT4gUmlnaHQgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLS0+IFJpZ2h0CisgICAgICB8ICstLS0tLS0tPiBMZWZ0ICAgICAgICAgICAgICAgICAgIHwgfCArLS0tLS0tLT4gTGVmdAorICAgICAgfCB8ICstLS0tLT4gRG93biAgICAgICAgICAgICAgICAgICB8IHwgfCArLS0tLS0+IERvd24KKyAgICAgIHwgfCB8ICstLS0+IFVwICAgICAgICAgICAgICAgICAgICAgfCB8IHwgfCArLS0tPiBVcAorICAgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8IHwKKyAgX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX18KKzUgXCB4IG8gbyBvIG8gLyAxICAgICAgICAgICAgICAgICAgICA1IFwgbyBvIG8gbyBvIC8gMQorICAgXCB4IG8gbyBvIC8gICAgICAgICAgICAgICAgICAgICAgICAgIFwgbyBvIG8gbyAvCisgIDkgYH5+fn5+fn4nIDYgICAgICAgICAgICAgICAgICAgICAgICA5IGB+fn5+fn5+JyA2CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8CisgICAgICAgfCB8ICstLS0tPiBCdXR0b24gMSAgICAgICAgICAgICAgICB8IHwgfCArLS0tLT4gQnV0dG9uCisgICAgICAgfCArLS0tLS0tPiBCdXR0b24gMiAgICAgICAgICAgICAgICB8IHwgKy0tLS0tLT4gUG93ZXIKKyAgICAgICArLS0tLS0tLS0+IEdyb3VuZCAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tPiBHcm91bmQKKwkJCQkJICArLS0tLS0tLS0tLT4gQW5hbG9nIFgKKworCVNpbmNsYWlyIFNwZWN0cnVtICsyQS8rMyAgICAgICAgICAgQW1pZ2EgMTIwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICstLS0tLS0tLS0tLT4gVXAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0+IEJ1dHRvbiAzCisgICAgfCArLS0tLS0tLS0tPiBGaXJlICAgICAgICAgICAgICAgICAgIHwgKy0tLS0tLS0tLT4gUmlnaHQKKyAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICstLS0tLS0tPiBMZWZ0CisgICAgfCB8ICAgKy0tLS0tPiBHcm91bmQgICAgICAgICAgICAgICAgIHwgfCB8ICstLS0tLT4gRG93bgorICAgIHwgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCB8ICstLS0+IFVwCisgICAgfCB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwgfAorICBfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fXworNSBcIG8gbyB4IG8geCAvIDEgICAgICAgICAgICAgICAgICAgIDUgXCBvIG8gbyBvIG8gLyAxCisgICBcIG8gbyBvIG8gLyAgICAgICAgICAgICAgICAgICAgICAgICAgXCBvIG8gbyBvIC8KKyAgOSBgfn5+fn5+ficgNiAgICAgICAgICAgICAgICAgICAgICAgIDkgYH5+fn5+fn4nIDYKKyAgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8IHwKKyAgICAgfCB8IHwgKy0tLS0+IFJpZ2h0ICAgICAgICAgICAgICAgICAgIHwgfCB8ICstLS0tPiBCdXR0b24gMQorICAgICB8IHwgKy0tLS0tLT4gTGVmdCAgICAgICAgICAgICAgICAgICAgfCB8ICstLS0tLS0+IFBvd2VyCisgICAgIHwgKy0tLS0tLS0tPiBHcm91bmQgICAgICAgICAgICAgICAgICB8ICstLS0tLS0tLT4gR3JvdW5kCisgICAgICstLS0tLS0tLS0tPiBEb3duICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLT4gQnV0dG9uIDIKKworICBBbmQgdGhlcmUgd2VyZSBtYW55IG90aGVycy4KKworMi4yLjEgTXVsdGlzeXN0ZW0gam95c3RpY2tzIHVzaW5nIGRiOS5jCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgRm9yIHRoZSBNdWx0aXN5c3RlbSBqb3lzdGlja3MsIGFuZCB0aGVpciBkZXJpdmF0aXZlcywgdGhlIGRiOS5jIGRyaXZlcgord2FzIHdyaXR0ZW4uIEl0IGFsbG93cyBvbmx5IG9uZSBqb3lzdGljayAvIGdhbWVwYWQgcGVyIHBhcmFsbGVsIHBvcnQsIGJ1dAordGhlIGludGVyZmFjZSBpcyBlYXN5IHRvIGJ1aWxkIGFuZCB3b3JrcyB3aXRoIGFsbW9zdCBhbnl0aGluZy4KKworICBGb3IgdGhlIGJhc2ljIDEtYnV0dG9uIE11bHRpc3lzdGVtIGpveXN0aWNrIHlvdSBjb25uZWN0IGl0cyB3aXJlcyB0byB0aGUKK3BhcmFsbGVsIHBvcnQgbGlrZSB0aGlzOgorCisocGluICAxKSAtLS0tLT4gUG93ZXIKKyhwaW4gMTgpIC0tLS0tPiBHcm91bmQKKworKHBpbiAgMikgLS0tLS0+IFVwCisocGluICAzKSAtLS0tLT4gRG93bgorKHBpbiAgNCkgLS0tLS0+IExlZnQKKyhwaW4gIDUpIC0tLS0tPiBSaWdodAorKHBpbiAgNikgLS0tLS0+IEJ1dHRvbiAxCisKKyAgSG93ZXZlciwgaWYgdGhlIGpveXN0aWNrIGlzIHN3aXRjaCBiYXNlZCAoZWcuIGNsaWNrcyB3aGVuIHlvdSBtb3ZlIGl0KSwKK3lvdSBtaWdodCBvciBtaWdodCBub3QsIGRlcGVuZGluZyBvbiB5b3VyIHBhcmFsbGVsIHBvcnQsIG5lZWQgMTAga09obSBwdWxsdXAKK3Jlc2lzdG9ycyBvbiBlYWNoIG9mIHRoZSBkaXJlY3Rpb24gYW5kIGJ1dHRvbiBzaWduYWxzLCBsaWtlIHRoaXM6CisKKyhwaW4gMikgLS0tLS0tLS0tLS0tKy0tLS0tLT4gVXAKKwkgIFJlc2lzdG9yICB8CisocGluIDEpIC0tWzEwa09obV0tLSsKKworICBUcnkgd2l0aG91dCwgYW5kIGlmIGl0IGRvZXNuJ3Qgd29yaywgYWRkIHRoZW0uIEZvciBUVEwgYmFzZWQgam95c3RpY2tzIC8KK2dhbWVwYWRzIHRoZSBwdWxsdXBzIGFyZSBub3QgbmVlZGVkLgorCisgIEZvciBqb3lzdGlja3Mgd2l0aCB0d28gYnV0dG9ucyB5b3UgY29ubmVjdCB0aGUgc2Vjb25kIGJ1dHRvbiB0byBwaW4gNyBvbgordGhlIHBhcmFsbGVsIHBvcnQuCisKKyhwaW4gNykgLS0tLS0+IEJ1dHRvbiAyCisKKyAgQW5kIHRoYXQncyBpdC4KKworICBPbiBhIHNpZGUgbm90ZSwgaWYgeW91IGhhdmUgYWxyZWFkeSBidWlsdCBhIGRpZmZlcmVudCBhZGFwdGVyIGZvciB1c2Ugd2l0aAordGhlIGRpZ2l0YWwgam95c3RpY2sgZHJpdmVyIDAuOC4wLjIsIHRoaXMgaXMgYWxzbyBzdXBwb3J0ZWQgYnkgdGhlIGRiOS5jCitkcml2ZXIsIGFzIGRldmljZSB0eXBlIDguIChTZWUgc2VjdGlvbiAzLjIpCisKKzIuMi4yIE11bHRpc3lzdGVtIGpveXN0aWNrcyB1c2luZyBnYW1lY29uLmMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgRm9yIHNvbWUgcGVvcGxlIGp1c3Qgb25lIGpveXN0aWNrIHBlciBwYXJhbGxlbCBwb3J0IGlzIG5vdCBlbm91Z2gsIGFuZC9vcgord2FudCB0byB1c2UgdGhlbSBvbiBvbmUgcGFyYWxsZWwgcG9ydCB0b2dldGhlciB3aXRoIE5FUy9TTkVTL1BTWCBwYWRzLiBUaGlzIGlzCitwb3NzaWJsZSB1c2luZyB0aGUgZ2FtZWNvbi5jLiBJdCBzdXBwb3J0cyB1cCB0byA1IGRldmljZXMgb2YgdGhlIGFib3ZlIHR5cGVzLAoraW5jbHVkaW5nIDEgYW5kIDIgYnV0dG9ucyBNdWx0aXN5c3RlbSBqb3lzdGlja3MuCisKKyAgSG93ZXZlciwgdGhlcmUgaXMgbm90aGluZyBmb3IgZnJlZS4gVG8gYWxsb3cgbW9yZSBzdGlja3MgdG8gYmUgdXNlZCBhdAorb25jZSwgeW91IG5lZWQgdGhlIHN0aWNrcyB0byBiZSBwdXJlbHkgc3dpdGNoIGJhc2VkICh0aGF0IGlzIG5vbi1UVEwpLCBhbmQKK25vdCB0byBuZWVkIHBvd2VyLiBKdXN0IGEgcGxhaW4gc2ltcGxlIHNpeCBzd2l0Y2hlcyBpbnNpZGUuIElmIHlvdXIKK2pveXN0aWNrIGNhbiBkbyBtb3JlIChlZy4gdHVyYm9maXJlKSB5b3UnbGwgbmVlZCB0byBkaXNhYmxlIGl0IHRvdGFsbHkgZmlyc3QKK2lmIHlvdSB3YW50IHRvIHVzZSBnYW1lY29uLmMuCisKKyAgQWxzbywgdGhlIGNvbm5lY3Rpb24gaXMgYSBiaXQgbW9yZSBjb21wbGV4LiBZb3UnbGwgbmVlZCBhIGJ1bmNoIG9mIGRpb2RlcywKK2FuZCBvbmUgcHVsbHVwIHJlc2lzdG9yLiBGaXJzdCwgeW91IGNvbm5lY3QgdGhlIERpcmVjdGlvbnMgYW5kIHRoZSBidXR0b24KK3RoZSBzYW1lIGFzIGZvciBkYjksIGhvd2V2ZXIgd2l0aCB0aGUgZGlvZGVzIGluYmV0d2Vlbi4KKworCSAgICBEaW9kZXMKKyhwaW4gMikgLS0tLS18PHwtLS0tPiBVcAorKHBpbiAzKSAtLS0tLXw8fC0tLS0+IERvd24KKyhwaW4gNCkgLS0tLS18PHwtLS0tPiBMZWZ0CisocGluIDUpIC0tLS0tfDx8LS0tLT4gUmlnaHQKKyhwaW4gNikgLS0tLS18PHwtLS0tPiBCdXR0b24gMQorCisgIEZvciB0d28gYnV0dG9uIHN0aWNrcyB5b3UgYWxzbyBjb25uZWN0IHRoZSBvdGhlciBidXR0b24uCisKKyhwaW4gNykgLS0tLS18PHwtLS0tPiBCdXR0b24gMgorCisgIEFuZCBmaW5hbGx5LCB5b3UgY29ubmVjdCB0aGUgR3JvdW5kIHdpcmUgb2YgdGhlIGpveXN0aWNrLCBsaWtlIGRvbmUgaW4KK3RoaXMgbGl0dGxlIHNjaGVtYXRpYyB0byBQb3dlciBhbmQgRGF0YSBvbiB0aGUgcGFyYWxsZWwgcG9ydCwgYXMgZGVzY3JpYmVkCitmb3IgdGhlIE5FUyAvIFNORVMgcGFkcyBpbiBzZWN0aW9uIDIuMSBvZiB0aGlzIGZpbGUgLSB0aGF0IGlzLCBvbmUgZGF0YSBwaW4KK2ZvciBlYWNoIGpveXN0aWNrLiBUaGUgcG93ZXIgc291cmNlIGlzIHNoYXJlZC4KKworRGF0YSAgICAtLS0tLS0tLS0tLS0rLS0tLS0+IEdyb3VuZAorCSAgUmVzaXN0b3IgIHwKK1Bvd2VyICAgLS1bMTBrT2htXS0tKworCisgIEFuZCB0aGF0J3MgYWxsLCBoZXJlIHdlIGdvIQorCisyLjIuMyBNdWx0aXN5c3RlbSBqb3lzdGlja3MgdXNpbmcgdHVyYm9ncmFmeC5jCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBUdXJib0dyYUZYIGludGVyZmFjZSwgZGVzaWduZWQgYnkKKworCVN0ZWZmZW4gU2Nod2Vua2UgPHNjaHdlbmtlQGJ1cmctaGFsbGUuZGU+CisKKyAgYWxsb3dzIHVwIHRvIDcgTXVsdGlzeXN0ZW0gam95c3RpY2tzIGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydC4gSW4KK1N0ZWZmZW4ncyB2ZXJzaW9uLCB0aGVyZSBpcyBzdXBwb3J0IGZvciB1cCB0byA1IGJ1dHRvbnMgcGVyIGpveXN0aWNrLiAgSG93ZXZlciwKK3NpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHJlbGlhYmx5IG9uIGFsbCBwYXJhbGxlbCBwb3J0cywgdGhlIHR1cmJvZ3JhZnguYyBkcml2ZXIKK3N1cHBvcnRzIG9ubHkgb25lIGJ1dHRvbiBwZXIgam95c3RpY2suIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBidWlsZCB0aGUKK2ludGVyZmFjZSwgc2VlCisKKwlodHRwOi8vd3d3Mi5idXJnLWhhbGxlLmRlL35zY2h3ZW5rZS9wYXJwb3J0Lmh0bWwKKworMi4zIFNvbnkgUGxheXN0YXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgVGhlIFBTWCBjb250cm9sbGVyIGlzIHN1cHBvcnRlZCBieSB0aGUgZ2FtZWNvbi5jLiBQaW5vdXQgb2YgdGhlIFBTWAorY29udHJvbGxlciAoY29tcGF0aWJsZSB3aXRoIERpcmVjdFBhZFBybyk6CisKKyAgKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKworOSB8IG8gIG8gIG8gfCBvICBvICBvIHwgbyAgbyAgbyB8IDEgICAgICAgICAgICAgICBwYXJhbGxlbAorICAgXF9fX19fX19ffF9fX19fX19fX3xfX19fX19fXy8gICAgICAgICAgICAgICAgICBwb3J0IHBpbnMKKyAgICB8ICB8ICAgICAgfCAgfCAgfCAgIHwKKyAgICB8ICB8ICAgICAgfCAgfCAgfCAgICstLS0tLS0tLT4gIENsb2NrICAgIC0tLSAgKDQpCisgICAgfCAgfCAgICAgIHwgIHwgICstLS0tLS0tLS0tLS0+ICBTZWxlY3QgICAtLS0gICgzKQorICAgIHwgIHwgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tPiAgUG93ZXIgICAgLS0tICAoNS05KQorICAgIHwgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tPiAgR3JvdW5kICAgLS0tICAoMTgtMjUpCisgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ICBDb21tYW5kICAtLS0gICgyKQorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAgRGF0YSAgICAgLS0tICAob25lIG9mIDEwLDExLDEyLDEzLDE1KQorCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlc2UgY29udHJvbGxlcnM6CisKKyAqIFN0YW5kYXJkIFBTWCBQYWQKKyAqIE5lZ0NvbiBQU1ggUGFkCisgKiBBbmFsb2cgUFNYIFBhZCAocmVkIG1vZGUpCisgKiBBbmFsb2cgUFNYIFBhZCAoZ3JlZW4gbW9kZSkKKyAqIFBTWCBSdW1ibGUgUGFkCisgKiBQU1ggRERSIFBhZAorCisyLjQgU2VnYQorfn5+fn5+fn4KKyAgQWxsIHRoZSBTZWdhIGNvbnRyb2xsZXJzIGFyZSBtb3JlIG9yIGxlc3MgYmFzZWQgb24gdGhlIHN0YW5kYXJkIDItYnV0dG9uCitNdWx0aXN5c3RlbSBqb3lzdGljay4gSG93ZXZlciwgc2luY2UgdGhleSBkb24ndCB1c2Ugc3dpdGNoZXMgYW5kIHVzZSBUVEwKK2xvZ2ljLCB0aGUgb25seSBkcml2ZXIgdXNhYmxlIHdpdGggdGhlbSBpcyB0aGUgZGI5LmMgZHJpdmVyLgorCisyLjQuMSBTZWdhIE1hc3RlciBTeXN0ZW0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgU01TIGdhbWVwYWRzIGFyZSBhbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBhcyBub3JtYWwgMi1idXR0b24KK011bHRpc3lzdGVtIGpveXN0aWNrcy4gU2V0IHRoZSBkcml2ZXIgdG8gTXVsdGkyIG1vZGUsIHVzZSB0aGUgY29ycmVzcG9uZGluZworcGFyYWxsZWwgcG9ydCBwaW5zLCBhbmQgdGhlIGZvbGxvd2luZyBzY2hlbWF0aWM6CisKKyAgICArLS0tLS0tLS0tLS0+IFBvd2VyCisgICAgfCArLS0tLS0tLS0tPiBSaWdodAorICAgIHwgfCArLS0tLS0tLT4gTGVmdAorICAgIHwgfCB8ICstLS0tLT4gRG93bgorICAgIHwgfCB8IHwgKy0tLT4gVXAKKyAgICB8IHwgfCB8IHwKKyAgX19fX19fX19fX19fXworNSBcIG8gbyBvIG8gbyAvIDEKKyAgIFwgbyBvIHggbyAvCisgIDkgYH5+fn5+fn4nIDYKKyAgICAgfCB8ICAgfAorICAgICB8IHwgICArLS0tLT4gQnV0dG9uIDEKKyAgICAgfCArLS0tLS0tLS0+IEdyb3VuZAorICAgICArLS0tLS0tLS0tLT4gQnV0dG9uIDIKKworMi40LjIgU2VnYSBHZW5lc2lzIGFrYSBNZWdhRHJpdmUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBTZWdhIEdlbmVzaXMgKGluIEV1cm9wZSBzb2xkIGFzIFNlZ2EgTWVnYURyaXZlKSBwYWRzIGFyZSBhbiBleHRlbnNpb24KK3RvIHRoZSBTZWdhIE1hc3RlciBTeXN0ZW0gcGFkcy4gVGhleSB1c2UgbW9yZSBidXR0b25zICgzKzEsIDUrMSwgNisxKS4gIFVzZQordGhlIGZvbGxvd2luZyBzY2hlbWF0aWM6CisKKyAgICArLS0tLS0tLS0tLS0+IFBvd2VyCisgICAgfCArLS0tLS0tLS0tPiBSaWdodAorICAgIHwgfCArLS0tLS0tLT4gTGVmdAorICAgIHwgfCB8ICstLS0tLT4gRG93bgorICAgIHwgfCB8IHwgKy0tLT4gVXAKKyAgICB8IHwgfCB8IHwKKyAgX19fX19fX19fX19fXworNSBcIG8gbyBvIG8gbyAvIDEKKyAgIFwgbyBvIG8gbyAvCisgIDkgYH5+fn5+fn4nIDYKKyAgICAgfCB8IHwgfAorICAgICB8IHwgfCArLS0tLT4gQnV0dG9uIDEKKyAgICAgfCB8ICstLS0tLS0+IFNlbGVjdAorICAgICB8ICstLS0tLS0tLT4gR3JvdW5kCisgICAgICstLS0tLS0tLS0tPiBCdXR0b24gMgorCisgIFRoZSBTZWxlY3QgcGluIGdvZXMgdG8gcGluIDE0IG9uIHRoZSBwYXJhbGxlbCBwb3J0LgorCisocGluIDE0KSAtLS0tLT4gU2VsZWN0CisKKyAgVGhlIHJlc3QgaXMgdGhlIHNhbWUgYXMgZm9yIE11bHRpMiBqb3lzdGlja3MgdXNpbmcgZGI5LmMKKworMi40LjMgU2VnYSBTYXR1cm4KK35+fn5+fn5+fn5+fn5+fn5+CisgIFNlZ2EgU2F0dXJuIGhhcyBlaWdodCBidXR0b25zLCBhbmQgdG8gdHJhbnNmZXIgdGhhdCwgd2l0aG91dCBoYWNrcyBsaWtlCitHZW5lc2lzIDYgcGFkcyB1c2UsIGl0IG5lZWRzIG9uZSBtb3JlIHNlbGVjdCBwaW4uIEFueXdheSwgaXQgaXMgc3RpbGwKK2hhbmRsZWQgYnkgdGhlIGRiOS5jIGRyaXZlci4gSXRzIHBpbm91dCBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIGFueXRoaW5nCitlbHNlLiAgVXNlIHRoaXMgc2NoZW1hdGljOgorCisgICAgKy0tLS0tLS0tLS0tPiBTZWxlY3QgMQorICAgIHwgKy0tLS0tLS0tLT4gUG93ZXIKKyAgICB8IHwgKy0tLS0tLS0+IFVwCisgICAgfCB8IHwgKy0tLS0tPiBEb3duCisgICAgfCB8IHwgfCArLS0tPiBHcm91bmQKKyAgICB8IHwgfCB8IHwKKyAgX19fX19fX19fX19fXworNSBcIG8gbyBvIG8gbyAvIDEKKyAgIFwgbyBvIG8gbyAvCisgIDkgYH5+fn5+fn4nIDYKKyAgICAgfCB8IHwgfAorICAgICB8IHwgfCArLS0tLT4gU2VsZWN0IDIKKyAgICAgfCB8ICstLS0tLS0+IFJpZ2h0CisgICAgIHwgKy0tLS0tLS0tPiBMZWZ0CisgICAgICstLS0tLS0tLS0tPiBQb3dlcgorCisgIFNlbGVjdCAxIGlzIHBpbiAxNCBvbiB0aGUgcGFyYWxsZWwgcG9ydCwgU2VsZWN0IDIgaXMgcGluIDE2IG9uIHRoZQorcGFyYWxsZWwgcG9ydC4KKworKHBpbiAxNCkgLS0tLS0+IFNlbGVjdCAxCisocGluIDE2KSAtLS0tLT4gU2VsZWN0IDIKKworICBUaGUgb3RoZXIgcGlucyAoVXAsIERvd24sIFJpZ2h0LCBMZWZ0LCBQb3dlciwgR3JvdW5kKSBhcmUgdGhlIHNhbWUgYXMgZm9yCitNdWx0aSBqb3lzdGlja3MgdXNpbmcgZGI5LmMKKworMy4gVGhlIGRyaXZlcnMKK35+fn5+fn5+fn5+fn5+CisgIFRoZXJlIGFyZSB0aHJlZSBkcml2ZXJzIGZvciB0aGUgcGFyYWxsZWwgcG9ydCBpbnRlcmZhY2VzLiBFYWNoLCBhcworZGVzY3JpYmVkIGFib3ZlLCBhbGxvd3MgdG8gY29ubmVjdCBhIGRpZmZlcmVudCBncm91cCBvZiBqb3lzdGlja3MgYW5kIHBhZHMuCitIZXJlIGFyZSBkZXNjcmliZWQgdGhlaXIgY29tbWFuZCBsaW5lczoKKworMy4xIGdhbWVjb24uYworfn5+fn5+fn5+fn5+fgorICBVc2luZyBnYW1lY29uLmMgeW91IGNhbiBjb25uZWN0IHVwIHRvIGZpdmUgZGV2aWNlcyB0byBvbmUgcGFyYWxsZWwgcG9ydC4gSXQKK3VzZXMgdGhlIGZvbGxvd2luZyBrZXJuZWwvbW9kdWxlIGNvbW1hbmQgbGluZToKKworCWdhbWVjb24ubWFwPXBvcnQscGFkMSxwYWQyLHBhZDMscGFkNCxwYWQ1CisKKyAgV2hlcmUgJ3BvcnQnIHRoZSBudW1iZXIgb2YgdGhlIHBhcnBvcnQgaW50ZXJmYWNlIChlZy4gMCBmb3IgcGFycG9ydDApLgorCisgIEFuZCAncGFkMScgdG8gJ3BhZDUnIGFyZSBwYWQgdHlwZXMgY29ubmVjdGVkIHRvIGRpZmZlcmVudCBkYXRhIGlucHV0IHBpbnMKKygxMCwxMSwxMiwxMywxNSksIGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDIuMSBvZiB0aGlzIGZpbGUuCisKKyAgVGhlIHR5cGVzIGFyZToKKworCVR5cGUgfCBKb3lzdGljay9QYWQKKwktLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgMCAgfCBOb25lCisJICAxICB8IFNORVMgcGFkCisJICAyICB8IE5FUyBwYWQKKwkgIDQgIHwgTXVsdGlzeXN0ZW0gMS1idXR0b24gam95c3RpY2sKKwkgIDUgIHwgTXVsdGlzeXN0ZW0gMi1idXR0b24gam95c3RpY2sKKwkgIDYgIHwgTjY0IHBhZAorCSAgNyAgfCBTb255IFBTWCBjb250cm9sbGVyCisJICA4ICB8IFNvbnkgUFNYIEREUiBjb250cm9sbGVyCisKKyAgVGhlIGV4YWN0IHR5cGUgb2YgdGhlIFBTWCBjb250cm9sbGVyIHR5cGUgaXMgYXV0b3Byb2JlZCB3aGVuIHVzZWQgc28KK2hvdCBzd2FwcGluZyBzaG91bGQgd29yayAoYnV0IGlzIG5vdCByZWNvbWVuZGVkKS4KKworICBTaG91bGQgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgb2YgcGFyYWxsZWwgcG9ydHMgYXQgb25jZSwgeW91IGNhbiB1c2UKK2dhbWVjb24ubWFwMiBhbmQgZ2FtZWNvbi5tYXAzIGFzIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgZm9yIHR3bworbW9yZSBwYXJhbGxlbCBwb3J0cy4KKworICBUaGVyZSBhcmUgdHdvIG9wdGlvbnMgc3BlY2lmaWMgdG8gUFNYIGRyaXZlciBwb3J0aW9uLiAgZ2FtZWNvbi5wc3hfZGVsYXkgc2V0cwordGhlIGNvbW1hbmQgZGVsYXkgd2hlbiB0YWxraW5nIHRvIHRoZSBjb250cm9sbGVycy4gVGhlIGRlZmF1bHQgb2YgMjUgc2hvdWxkCit3b3JrIGJ1dCB5b3UgY2FuIHRyeSBsb3dlcmluZyBpdCBmb3IgYmV0dGVyIHBlcmZvcm1hY2UuIElmIHlvdXIgcGFkcyBkb24ndAorcmVzcG9uZCB0cnkgcmFpc2luZyBpdCB1bnRpbGwgdGhleSB3b3JrLiBTZXR0aW5nIHRoZSB0eXBlIHRvIDggYWxsb3dzIHRoZQorZHJpdmVyIHRvIGJlIHVzZWQgd2l0aCBEYW5jZSBEYW5jZSBSZXZvbHV0aW9uIG9yIHNpbWlsYXIgZ2FtZXMuIEFycm93IGtleXMgYXJlCityZWdpc3RlcmVkIGFzIGtleSBwcmVzc2VzIGluc3RlYWQgb2YgWCBhbmQgWSBheGVzLgorCiszLjIgZGI5LmMKK35+fn5+fn5+fgorICBBcGFydCBmcm9tIG1ha2luZyBhbiBpbnRlcmZhY2UsIHRoZXJlIGlzIG5vdGhpbmcgZGlmZmljdWx0IG9uIHVzaW5nIHRoZQorZGI5LmMgZHJpdmVyLiBJdCB1c2VzIHRoZSBmb2xsb3dpbmcga2VybmVsL21vZHVsZSBjb21tYW5kIGxpbmU6CisKKwlkYjkuZGV2PXBvcnQsdHlwZQorCisgIFdoZXJlICdwb3J0JyBpcyB0aGUgbnVtYmVyIG9mIHRoZSBwYXJwb3J0IGludGVyZmFjZSAoZWcuIDAgZm9yIHBhcnBvcnQwKS4KKworICBDYXZlYXQgaGVyZTogVGhpcyBkcml2ZXIgb25seSB3b3JrcyBvbiBiaWRpcmVjdGlvbmFsIHBhcmFsbGVsIHBvcnRzLiBJZgoreW91ciBwYXJhbGxlbCBwb3J0IGlzIHJlY2VudCBlbm91Z2gsIHlvdSBzaG91bGQgaGF2ZSBubyB0cm91YmxlIHdpdGggdGhpcy4KK09sZCBwYXJhbGxlbCBwb3J0cyBtYXkgbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorCisgICdUeXBlJyBpcyB0aGUgdHlwZSBvZiBqb3lzdGljayBvciBwYWQgYXR0YWNoZWQ6CisKKwlUeXBlIHwgSm95c3RpY2svUGFkCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIDAgIHwgTm9uZQorCSAgMSAgfCBNdWx0aXN5c3RlbSAxLWJ1dHRvbiBqb3lzdGljaworCSAgMiAgfCBNdWx0aXN5c3RlbSAyLWJ1dHRvbiBqb3lzdGljaworCSAgMyAgfCBHZW5lc2lzIHBhZCAoMysxIGJ1dHRvbnMpCisJICA1ICB8IEdlbmVzaXMgcGFkICg1KzEgYnV0dG9ucykKKwkgIDYgIHwgR2VuZXNpcyBwYWQgKDYrMiBidXR0b25zKQorCSAgNyAgfCBTYXR1cm4gcGFkICg4IGJ1dHRvbnMpCisJICA4ICB8IE11bHRpc3lzdGVtIDEtYnV0dG9uIGpveXN0aWNrICh2MC44LjAuMiBwaW4tb3V0KQorCSAgOSAgfCBUd28gTXVsdGlzeXN0ZW0gMS1idXR0b24gam95c3RpY2tzICh2MC44LjAuMiBwaW4tb3V0KSAKKwkgMTAgIHwgQW1pZ2EgQ0QzMiBwYWQKKworICBTaG91bGQgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2Ugam95c3RpY2tzL3BhZHMgYXQgb25jZSwgeW91CitjYW4gdXNlIGRiOS5kZXYyIGFuZCBkYjkuZGV2MyBhcyBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGZvciB0d28KK21vcmUgam95c3RpY2tzL3BhZHMuCisKKzMuMyB0dXJib2dyYWZ4LmMKK35+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIHR1cmJvZ3JhZnguYyBkcml2ZXIgdXNlcyBhIHZlcnkgc2ltcGxlIGtlcm5lbC9tb2R1bGUgY29tbWFuZCBsaW5lOgorCisJdHVyYm9ncmFmeC5tYXA9cG9ydCxqczEsanMyLGpzMyxqczQsanM1LGpzNixqczcKKworICBXaGVyZSAncG9ydCcgaXMgdGhlIG51bWJlciBvZiB0aGUgcGFycG9ydCBpbnRlcmZhY2UgKGVnLiAwIGZvciBwYXJwb3J0MCkuCisKKyAgJ2pzWCcgaXMgdGhlIG51bWJlciBvZiBidXR0b25zIHRoZSBNdWx0aXN5c3RlbSBqb3lzdGlja3MgY29ubmVjdGVkIHRvIHRoZQoraW50ZXJmYWNlIHBvcnRzIDEtNyBoYXZlLiBGb3IgYSBzdGFuZGFyZCBtdWx0aXN5c3RlbSBqb3lzdGljaywgdGhpcyBpcyAxLgorCisgIFNob3VsZCB5b3Ugd2FudCB0byB1c2UgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBpbnRlcmZhY2VzIGF0IG9uY2UsIHlvdSBjYW4KK3VzZSB0dXJib2dyYWZ4Lm1hcDIgYW5kIHR1cmJvZ3JhZngubWFwMyBhcyBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCitmb3IgdHdvIG1vcmUgaW50ZXJmYWNlcy4KKworMy40IFBDIHBhcmFsbGVsIHBvcnQgcGlub3V0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAgIEF0IHRoZSBQQzogICAgIFwgMTMgMTIgMTEgMTAgIDkgIDggIDcgIDYgIDUgIDQgIDMgIDIgIDEgLworICAgICAgICAgICAgICAgICAgIFwgIDI1IDI0IDIzIDIyIDIxIDIwIDE5IDE4IDE3IDE2IDE1IDE0IC8KKyAgICAgICAgICAgICAgICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisJICBQaW4gfCBOYW1lICAgIHwgRGVzY3JpcHRpb24KKwl+fn5+fn58fn5+fn5+fn5+fH5+fn5+fn5+fn4KKwkgICAgMSB8IC9TVFJPQkUgfCBTdHJvYmUKKwkgIDItOSB8IEQwLUQ3ICAgfCBEYXRhIEJpdCAwLTcKKwkgICAxMCB8IC9BQ0sgICAgfCBBY2tub3dsZWRnZQorCSAgIDExIHwgQlVTWSAgICB8IEJ1c3kKKwkgICAxMiB8IFBFICAgICAgfCBQYXBlciBFbmQKKwkgICAxMyB8IFNFTElOICAgfCBTZWxlY3QgSW4KKwkgICAxNCB8IC9BVVRPRkQgfCBBdXRvZmVlZAorCSAgIDE1IHwgL0VSUk9SICB8IEVycm9yCisJICAgMTYgfCAvSU5JVCAgIHwgSW5pdGlhbGl6ZQorCSAgIDE3IHwgL1NFTCAgICB8IFNlbGVjdAorCTE4LTI1IHwgR05EICAgICB8IFNpZ25hbCBHcm91bmQKKworMy41IEVuZAorfn5+fn5+fgorICBUaGF0J3MgYWxsLCBmb2xrcyEgSGF2ZSBmdW4hCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1M2I4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dApAQCAtMCwwICsxLDU4OCBAQAorCQkgICAgICAgTGludXggSm95c3RpY2sgZHJpdmVyIHYyLjAuMAorCSAgICAgICAoYykgMTk5Ni0yMDAwIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4KKwkJCSAgICAgU3BvbnNvcmVkIGJ5IFN1U0UKKwkgICAkSWQ6IGpveXN0aWNrLnR4dCx2IDEuMTIgMjAwMi8wMy8wMyAxMjoxMzowNyBqZGVuZXV4IEV4cCAkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzAuIERpc2NsYWltZXIKK35+fn5+fn5+fn5+fn4KKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCit3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworICBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkgZS1tYWlsCistIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6IFZvanRlY2ggUGF2bGlrLAorU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKworICBGb3IgeW91ciBjb252ZW5pZW5jZSwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBpcyBpbmNsdWRlZAoraW4gdGhlIHBhY2thZ2U6IFNlZSB0aGUgZmlsZSBDT1BZSU5HLgorCisxLiBJbnRybworfn5+fn5+fn4KKyAgVGhlIGpveXN0aWNrIGRyaXZlciBmb3IgTGludXggcHJvdmlkZXMgc3VwcG9ydCBmb3IgYSB2YXJpZXR5IG9mIGpveXN0aWNrcworYW5kIHNpbWlsYXIgZGV2aWNlcy4gSXQgaXMgYmFzZWQgb24gYSBsYXJnZXIgcHJvamVjdCBhaW1pbmcgdG8gc3VwcG9ydCBhbGwKK2lucHV0IGRldmljZXMgaW4gTGludXguCisKKyAgU2hvdWxkIHlvdSBlbmNvdW50ZXIgYW55IHByb2JsZW1zIHdoaWxlIHVzaW5nIHRoZSBkcml2ZXIsIG9yIGpveXN0aWNrcwordGhpcyBkcml2ZXIgY2FuJ3QgbWFrZSBjb21wbGV0ZSB1c2Ugb2YsIEknbSB2ZXJ5IGludGVyZXN0ZWQgaW4gaGVhcmluZyBhYm91dAordGhlbS4gQnVnIHJlcG9ydHMgYW5kIHN1Y2Nlc3Mgc3RvcmllcyBhcmUgYWxzbyB3ZWxjb21lLgorCisgIFRoZSBpbnB1dCBwcm9qZWN0IHdlYnNpdGUgaXMgYXQ6CisKKwlodHRwOi8vd3d3LnN1c2UuY3ovZGV2ZWxvcG1lbnQvaW5wdXQvCisJaHR0cDovL2F0cmV5Lmthcmxpbi5tZmYuY3VuaS5jei9+dm9qdGVjaC9pbnB1dC8KKworICBUaGVyZSBpcyBhbHNvIGEgbWFpbGluZyBsaXN0IGZvciB0aGUgZHJpdmVyIGF0OgorCisJbGlzdHByb2NAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6CisKK3NlbmQgInN1YnNjcmliZSBsaW51eC1qb3lzdGljayBZb3VyIE5hbWUiIHRvIHN1YnNjcmliZSB0byBpdC4KKworMi4gVXNhZ2UKK35+fn5+fn5+CisgIEZvciBiYXNpYyB1c2FnZSB5b3UganVzdCBjaG9vc2UgdGhlIHJpZ2h0IG9wdGlvbnMgaW4ga2VybmVsIGNvbmZpZyBhbmQKK3lvdSBzaG91bGQgYmUgc2V0LgorCisyLjEgaW5wdXR1dGlscworfn5+fn5+fn5+fn5+fn4KK0ZvciB0ZXN0aW5nIGFuZCBvdGhlciBwdXJwb3NlcyAoZm9yIGV4YW1wbGUgc2VyaWFsIGRldmljZXMpLCBhIHNldCBvZgordXRpbGl0aWVzIGlzIGF2YWlsYWJsZSBhdCB0aGUgYWJvdmVtZW50aW9uZWQgd2Vic2l0ZS4gSSBzdWdnZXN0IHlvdSBkb3dubG9hZAorYW5kIGluc3RhbGwgaXQgYmVmb3JlIGdvaW5nIG9uLgorCisyLjIgRGV2aWNlIG5vZGVzCit+fn5+fn5+fn5+fn5+fn5+CitGb3IgYXBwbGljYXRpb25zIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBqb3lzdGlja3MsIGluIHlvdSBkb24ndCB1c2UgZGV2ZnMsCit5b3UnbGwgaGF2ZSB0byBtYW51YWxseSBjcmVhdGUgdGhlc2Ugbm9kZXMgaW4gL2RldjoKKworY2QgL2Rldgorcm0ganMqCitta2RpciBpbnB1dAorbWtub2QgaW5wdXQvanMwIGMgMTMgMAorbWtub2QgaW5wdXQvanMxIGMgMTMgMQorbWtub2QgaW5wdXQvanMyIGMgMTMgMgorbWtub2QgaW5wdXQvanMzIGMgMTMgMworbG4gLXMgaW5wdXQvanMwIGpzMAorbG4gLXMgaW5wdXQvanMxIGpzMQorbG4gLXMgaW5wdXQvanMyIGpzMgorbG4gLXMgaW5wdXQvanMzIGpzMworCitGb3IgdGVzdGluZyB3aXRoIGlucHV0dXRpbHMgaXQncyBhbHNvIGNvbnZlbmllbnQgdG8gY3JlYXRlIHRoZXNlOgorCitta25vZCBpbnB1dC9ldmVudDAgYyAxMyA2NAorbWtub2QgaW5wdXQvZXZlbnQxIGMgMTMgNjUKK21rbm9kIGlucHV0L2V2ZW50MiBjIDEzIDY2Citta25vZCBpbnB1dC9ldmVudDMgYyAxMyA2NworCisyLjQgTW9kdWxlcyBuZWVkZWQgCit+fn5+fn5+fn5+fn5+fn5+fn4KKyAgRm9yIGFsbCBqb3lzdGljayBkcml2ZXJzIHRvIGZ1bmN0aW9uLCB5b3UnbGwgbmVlZCB0aGUgdXNlcmxhbmQgaW50ZXJmYWNlCittb2R1bGUgaW4ga2VybmVsLCBlaXRoZXIgbG9hZGVkIG9yIGNvbXBpbGVkIGluOgorCisJbW9kcHJvYmUgam95ZGV2CisKKyAgRm9yIGdhbWVwb3J0IGpveXN0aWNrcywgeW91J2xsIGhhdmUgdG8gbG9hZCB0aGUgZ2FtZXBvcnQgZHJpdmVyIGFzIHdlbGw7CisKKwltb2Rwcm9iZSBuczU1OAorCisgIEFuZCBmb3Igc2VyaWFsIHBvcnQgam95c3RpY2tzLCB5b3UnbGwgbmVlZCB0aGUgc2VyaWFsIGlucHV0IGxpbmUKK2Rpc2NpcGxpbmUgbW9kdWxlIGxvYWRlZCBhbmQgdGhlIGlucHV0YXR0YWNoIHV0aWxpdHkgc3RhcnRlZDoKKworCW1vZHByb2JlIHNlcnBvcnQKKwlpbnB1dGF0dGFjaCAteHh4IC9kZXYvdHRzL1ggJgorCisgIEluIGFkZGl0aW9uIHRvIHRoYXQsIHlvdSdsbCBuZWVkIHRoZSBqb3lzdGljayBkcml2ZXIgbW9kdWxlIGl0c2VsZiwgbW9zdAordXN1YWxseSB5b3UnbGwgaGF2ZSBhbiBhbmFsb2cgam95c3RpY2s6CisKKwltb2Rwcm9iZSBhbmFsb2cKKwkKKyAgRm9yIGF1dG9tYXRpYyBtb2R1bGUgbG9hZGluZywgc29tZXRoaW5nIGxpa2UgdGhpcyBtaWdodCB3b3JrIC0gdGFpbG9yIHRvCit5b3VyIG5lZWRzOgorCisJYWxpYXMgdHR5LWxkaXNjLTIgc2VycG9ydAorCWFsaWFzIGNoYXItbWFqb3ItMTMgaW5wdXQKKwlhYm92ZSBpbnB1dCBqb3lkZXYgbnM1NTggYW5hbG9nCisJb3B0aW9ucyBhbmFsb2cgbWFwPWdhbWVwYWQsbm9uZSwyYnRuCisKKzIuNSBWZXJpZnlpbmcgdGhhdCBpdCB3b3Jrcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIEZvciB0ZXN0aW5nIHRoZSBqb3lzdGljayBkcml2ZXIgZnVuY3Rpb25hbGl0eSwgdGhlcmUgaXMgdGhlIGpzdGVzdAorcHJvZ3JhbSBpbiB0aGUgdXRpbGl0aWVzIHBhY2thZ2UuIFlvdSBydW4gaXQgYnkgdHlwaW5nOgorCisJanN0ZXN0IC9kZXYvanMwCisKKyAgQW5kIGl0IHNob3VsZCBzaG93IGEgbGluZSB3aXRoIHRoZSBqb3lzdGljayB2YWx1ZXMsIHdoaWNoIHVwZGF0ZSBhcyB5b3UKK21vdmUgdGhlIHN0aWNrLCBhbmQgcHJlc3MgaXRzIGJ1dHRvbnMuIFRoZSBheGVzIHNob3VsZCBhbGwgYmUgemVybyB3aGVuIHRoZQoram95c3RpY2sgaXMgaW4gdGhlIGNlbnRlciBwb3NpdGlvbi4gVGhleSBzaG91bGQgbm90IGppdHRlciBieSB0aGVtc2VsdmVzIHRvCitvdGhlciBjbG9zZSB2YWx1ZXMsIGFuZCB0aGV5IGFsc28gc2hvdWxkIGJlIHN0ZWFkeSBpbiBhbnkgb3RoZXIgcG9zaXRpb24gb2YKK3RoZSBzdGljay4gVGhleSBzaG91bGQgaGF2ZSB0aGUgZnVsbCByYW5nZSBmcm9tIC0zMjc2NyB0byAzMjc2Ny4gSWYgYWxsIHRoaXMKK2lzIG1ldCwgdGhlbiBpdCdzIGFsbCBmaW5lLCBhbmQgeW91IGNhbiBwbGF5IHRoZSBnYW1lcy4gOikKKworICBJZiBpdCdzIG5vdCwgdGhlbiB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0uIFRyeSB0byBjYWxpYnJhdGUgdGhlIGpveXN0aWNrLAorYW5kIGlmIGl0IHN0aWxsIGRvZXNuJ3Qgd29yaywgcmVhZCB0aGUgZHJpdmVycyBzZWN0aW9uIG9mIHRoaXMgZmlsZSwgdGhlCit0cm91Ymxlc2hvb3Rpbmcgc2VjdGlvbiwgYW5kIHRoZSBGQVEuCisKKzIuNi4gQ2FsaWJyYXRpb24KK35+fn5+fn5+fn5+fn5+fn4KKyAgRm9yIG1vc3Qgam95c3RpY2tzIHlvdSB3b24ndCBuZWVkIGFueSBtYW51YWwgY2FsaWJyYXRpb24sIHNpbmNlIHRoZQoram95c3RpY2sgc2hvdWxkIGJlIGF1dG9jYWxpYnJhdGVkIGJ5IHRoZSBkcml2ZXIgYXV0b21hZ2ljYWxseS4gSG93ZXZlciwgd2l0aAorc29tZSBhbmFsb2cgam95c3RpY2tzLCB0aGF0IGVpdGhlciBkbyBub3QgdXNlIGxpbmVhciByZXNpc3RvcnMsIG9yIGlmIHlvdQord2FudCBiZXR0ZXIgcHJlY2lzaW9uLCB5b3UgY2FuIHVzZSB0aGUganNjYWwgcHJvZ3JhbQorCisJanNjYWwgLWMgL2Rldi9qczAKKworIGluY2x1ZGVkIGluIHRoZSBqb3lzdGljayBwYWNrYWdlIHRvIHNldCBiZXR0ZXIgY29ycmVjdGlvbiBjb2VmZmljaWVudHMgdGhhbgord2hhdCB0aGUgZHJpdmVyIHdvdWxkIGNob29zZSBpdHNlbGYuCisKKyAgQWZ0ZXIgY2FsaWJyYXRpbmcgdGhlIGpveXN0aWNrIHlvdSBjYW4gdmVyaWZ5IGlmIHlvdSBsaWtlIHRoZSBuZXcKK2NhbGlicmF0aW9uIHVzaW5nIHRoZSBqc3Rlc3QgY29tbWFuZCwgYW5kIGlmIHlvdSBkbywgeW91IHRoZW4gY2FuIHNhdmUgdGhlCitjb3JyZWN0aW9uIGNvZWZmaWNpZW50cyBpbnRvIGEgZmlsZQorCisJanNjYWwgLXAgL2Rldi9qczAgPiAvZXRjL2pveXN0aWNrLmNhbAorCisgIEFuZCBhZGQgYSBsaW5lIHRvIHlvdXIgcmMgc2NyaXB0IGV4ZWN1dGluZyB0aGF0IGZpbGUKKworCXNvdXJjZSAvZXRjL2pveXN0aWNrLmNhbAorCisgIFRoaXMgd2F5LCBhZnRlciB0aGUgbmV4dCByZWJvb3QgeW91ciBqb3lzdGljayB3aWxsIHJlbWFpbiBjYWxpYnJhdGVkLiBZb3UKK2NhbiBhbHNvIGFkZCB0aGUganNjYWwgLXAgbGluZSB0byB5b3VyIHNodXRkb3duIHNjcmlwdC4KKworCiszLiBIVyBzcGVjaWZpYyBkcml2ZXIgaW5mb3JtYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSW4gdGhpcyBzZWN0aW9uIGVhY2ggb2YgdGhlIHNlcGFyYXRlIGhhcmR3YXJlIHNwZWNpZmljIGRyaXZlcnMgaXMgZGVzY3JpYmVkLgorCiszLjEgQW5hbG9nIGpveXN0aWNrcworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIGFuYWxvZy5jIHVzZXMgdGhlIHN0YW5kYXJkIGFuYWxvZyBpbnB1dHMgb2YgdGhlIGdhbWVwb3J0LCBhbmQgdGh1cworc3VwcG9ydHMgYWxsIHN0YW5kYXJkIGpveXN0aWNrcyBhbmQgZ2FtZXBhZHMuIEl0IHVzZXMgYSB2ZXJ5IGFkdmFuY2VkCityb3V0aW5lIGZvciB0aGlzLCBhbGxvd2luZyBmb3IgZGF0YSBwcmVjaXNpb24gdGhhdCBjYW4ndCBiZSBmb3VuZCBvbiBhbnkKK290aGVyIHN5c3RlbS4KKworICBJdCBhbHNvIHN1cHBvcnRzIGV4dGVuc2lvbnMgbGlrZSBhZGRpdGlvbmFsIGhhdHMgYW5kIGJ1dHRvbnMgY29tcGF0aWJsZQord2l0aCBDSCBGbGlnaHRzdGljayBQcm8sIFRocnVzdE1hc3RlciBGQ1Mgb3IgNiBhbmQgOCBidXR0b24gZ2FtZXBhZHMuIFNhaXRlaworQ3lib3JnICdkaWdpdGFsJyBqb3lzdGlja3MgYXJlIGFsc28gc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLCBiZWNhdXNlCit0aGV5J3JlIGJhc2ljYWxseSBzb3VwZWQgdXAgQ0hGIHN0aWNrcy4KKworICBIb3dldmVyIHRoZSBvbmx5IHR5cGVzIHRoYXQgY2FuIGJlIGF1dG9kZXRlY3RlZCBhcmU6CisKKyogMi1heGlzLCA0LWJ1dHRvbiBqb3lzdGljaworKiAzLWF4aXMsIDQtYnV0dG9uIGpveXN0aWNrCisqIDQtYXhpcywgNC1idXR0b24gam95c3RpY2sKKyogU2FpdGVrIEN5Ym9yZyAnZGlnaXRhbCcgam95c3RpY2tzCisKKyAgRm9yIG90aGVyIGpveXN0aWNrIHR5cGVzIChtb3JlL2xlc3MgYXhlcywgaGF0cywgYW5kIGJ1dHRvbnMpIHN1cHBvcnQKK3lvdSdsbCBuZWVkIHRvIHNwZWNpZnkgdGhlIHR5cGVzIGVpdGhlciBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBvciBvbiB0aGUKK21vZHVsZSBjb21tYW5kIGxpbmUsIHdoZW4gaW5zZXJ0aW5nIGFuYWxvZyBpbnRvIHRoZSBrZXJuZWwuIFRoZQorcGFyYW1ldGVycyBhcmU6CisKKwlhbmFsb2cubWFwPTx0eXBlMT4sPHR5cGUyPiw8dHlwZTM+LC4uLi4KKworICAndHlwZScgaXMgdHlwZSBvZiB0aGUgam95c3RpY2sgZnJvbSB0aGUgdGFibGUgYmVsb3csIGRlZmluaW5nIGpveXN0aWNrcworcHJlc2VudCBvbiBnYW1lcG9ydHMgaW4gdGhlIHN5c3RlbSwgc3RhcnRpbmcgd2l0aCBnYW1lcG9ydDAsIHNlY29uZCAndHlwZScKK2VudHJ5IGRlZmluaW5nIGpveXN0aWNrIG9uIGdhbWVwb3J0MSBhbmQgc28gb24uCisKKwlUeXBlICAgICB8IE1lYW5pbmcKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCW5vbmUgICAgIHwgTm8gYW5hbG9nIGpveXN0aWNrIG9uIHRoYXQgcG9ydAorCWF1dG8gICAgIHwgQXV0b2RldGVjdCBqb3lzdGljaworCTJidG4gICAgIHwgMi1idXR0b24gbi1heGlzIGpveXN0aWNrCisJeS1qb3kgICAgfCBUd28gMi1idXR0b24gMi1heGlzIGpveXN0aWNrcyBvbiBhbiBZLWNhYmxlCisJeS1wYWQgICAgfCBUd28gMi1idXR0b24gMi1heGlzIGdhbWVwYWRzIG9uIGFuIFktY2FibGUKKwlmY3MgICAgICB8IFRocnVzdG1hc3RlciBGQ1MgY29tcGF0aWJsZSBqb3lzdGljaworCWNoZiAgICAgIHwgSm95c3RpY2sgd2l0aCBhIENIIEZsaWdodHN0aWNrIGNvbXBhdGlibGUgaGF0CisJZnVsbGNoZiAgfCBDSCBGbGlnaHRzdGljayBjb21wYXRpYmxlIHdpdGggdHdvIGhhdHMgYW5kIDYgYnV0dG9ucworCWdhbWVwYWQgIHwgNC82LWJ1dHRvbiBuLWF4aXMgZ2FtZXBhZAorCWdhbWVwYWQ4IHwgOC1idXR0b24gMi1heGlzIGdhbWVwYWQKKworICBJbiBjYXNlIHlvdXIgam95c3RpY2sgZG9lc24ndCBmaXQgaW4gYW55IG9mIHRoZSBhYm92ZSBjYXRlZ29yaWVzLCB5b3UgY2FuCitzcGVjaWZ5IHRoZSB0eXBlIGFzIGEgbnVtYmVyIGJ5IGNvbWJpbmluZyB0aGUgYml0cyBpbiB0aGUgdGFibGUgYmVsb3cuIFRoaXMKK2lzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgYXJlIHlvdSBkb2luZy4gSXQncyBub3QKK2Rhbmdlcm91cywgYnV0IG5vdCBzaW1wbGUgZWl0aGVyLgorCisJQml0IHwgTWVhbmluZworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIDAgIHwgQXhpcyBYMQorCSAxICB8IEF4aXMgWTEKKwkgMiAgfCBBeGlzIFgyCisJIDMgIHwgQXhpcyBZMgorCSA0ICB8IEJ1dHRvbiBBCisJIDUgIHwgQnV0dG9uIEIKKwkgNiAgfCBCdXR0b24gQworCSA3ICB8IEJ1dHRvbiBECisJIDggIHwgQ0hGIEJ1dHRvbnMgWCBhbmQgWQorCSA5ICB8IENIRiBIYXQgMQorCTEwICB8IENIRiBIYXQgMgorCTExICB8IEZDUyBIYXQKKwkxMiAgfCBQYWQgQnV0dG9uIFgKKwkxMyAgfCBQYWQgQnV0dG9uIFkKKwkxNCAgfCBQYWQgQnV0dG9uIFUKKwkxNSAgfCBQYWQgQnV0dG9uIFYKKwkxNiAgfCBTYWl0ZWsgRjEtRjQgQnV0dG9ucworCTE3ICB8IFNhaXRlayBEaWdpdGFsIE1vZGUKKwkxOSAgfCBHYW1lUGFkCisJMjAgIHwgSm95MiBBeGlzIFgxCisJMjEgIHwgSm95MiBBeGlzIFkxCisJMjIgIHwgSm95MiBBeGlzIFgyCisJMjMgIHwgSm95MiBBeGlzIFkyCisJMjQgIHwgSm95MiBCdXR0b24gQQorCTI1ICB8IEpveTIgQnV0dG9uIEIKKwkyNiAgfCBKb3kyIEJ1dHRvbiBDCisJMjcgIHwgSm95MiBCdXR0b24gRAorCTMxICB8IEpveTIgR2FtZVBhZAorCiszLjIgTWljcm9zb2Z0IFNpZGVXaW5kZXIgam95c3RpY2tzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIE1pY3Jvc29mdCAnRGlnaXRhbCBPdmVyZHJpdmUnIHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgc2lkZXdpbmRlci5jCittb2R1bGUuIEFsbCBjdXJyZW50bHkgc3VwcG9ydGVkIGpveXN0aWNrczoKKworKiBNaWNyb3NvZnQgU2lkZVdpbmRlciAzRCBQcm8KKyogTWljcm9zb2Z0IFNpZGVXaW5kZXIgRm9yY2UgRmVlZGJhY2sgUHJvCisqIE1pY3Jvc29mdCBTaWRlV2luZGVyIEZvcmNlIEZlZWRiYWNrIFdoZWVsCisqIE1pY3Jvc29mdCBTaWRlV2luZGVyIEZyZWVTdHlsZSBQcm8gCisqIE1pY3Jvc29mdCBTaWRlV2luZGVyIEdhbWVQYWQgKHVwIHRvIGZvdXIsIGNoYWluZWQpCisqIE1pY3Jvc29mdCBTaWRlV2luZGVyIFByZWNpc2lvbiBQcm8gCisqIE1pY3Jvc29mdCBTaWRlV2luZGVyIFByZWNpc2lvbiBQcm8gVVNCIAorCisgIGFyZSBhdXRvZGV0ZWN0ZWQsIGFuZCB0aHVzIG5vIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBuZWVkZWQuCisKKyAgVGhlcmUgaXMgb25lIGNhdmVhdCB3aXRoIHRoZSAzRCBQcm8uIFRoZXJlIGFyZSA5IGJ1dHRvbnMgcmVwb3J0ZWQsCithbHRob3VnaCB0aGUgam95c3RpY2sgaGFzIG9ubHkgOC4gVGhlIDl0aCBidXR0b24gaXMgdGhlIG1vZGUgc3dpdGNoIG9uIHRoZQorcmVhciBzaWRlIG9mIHRoZSBqb3lzdGljay4gSG93ZXZlciwgbW92aW5nIGl0LCB5b3UnbGwgcmVzZXQgdGhlIGpveXN0aWNrLAorYW5kIG1ha2UgaXQgdW5yZXNwb25zaXZlIGZvciBhYm91dCBhIG9uZSB0aGlyZCBvZiBhIHNlY29uZC4gRnVydGhlcm1vcmUsIHRoZQoram95c3RpY2sgd2lsbCBhbHNvIHJlLWNlbnRlciBpdHNlbGYsIHRha2luZyB0aGUgcG9zaXRpb24gaXQgd2FzIGluIGR1cmluZwordGhpcyB0aW1lIGFzIGEgbmV3IGNlbnRlciBwb3NpdGlvbi4gVXNlIGl0IGlmIHlvdSB3YW50LCBidXQgdGhpbmsgZmlyc3QuCisKKyAgVGhlIFNpZGVXaW5kZXIgU3RhbmRhcmQgaXMgbm90IGEgZGlnaXRhbCBqb3lzdGljaywgYW5kIHRodXMgaXMgc3VwcG9ydGVkCitieSB0aGUgYW5hbG9nIGRyaXZlciBkZXNjcmliZWQgYWJvdmUuIAorCiszLjMgTG9naXRlY2ggQURJIGRldmljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBMb2dpdGVjaCBBREkgcHJvdG9jb2wgaXMgc3VwcG9ydGVkIGJ5IHRoZSBhZGkuYyBtb2R1bGUuIEl0IHNob3VsZCBzdXBwb3J0CithbnkgTG9naXRlY2ggZGV2aWNlIHVzaW5nIHRoaXMgcHJvdG9jb2wuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZAordG86CisKKyogTG9naXRlY2ggQ3liZXJNYW4gMgorKiBMb2dpdGVjaCBUaHVuZGVyUGFkIERpZ2l0YWwKKyogTG9naXRlY2ggV2luZ01hbiBFeHRyZW1lIERpZ2l0YWwKKyogTG9naXRlY2ggV2luZ01hbiBGb3JtdWxhCisqIExvZ2l0ZWNoIFdpbmdNYW4gSW50ZXJjZXB0b3IKKyogTG9naXRlY2ggV2luZ01hbiBHYW1lUGFkCisqIExvZ2l0ZWNoIFdpbmdNYW4gR2FtZVBhZCBVU0IKKyogTG9naXRlY2ggV2luZ01hbiBHYW1lUGFkIEV4dHJlbWUKKyogTG9naXRlY2ggV2luZ01hbiBFeHRyZW1lIERpZ2l0YWwgM0QKKworICBBREkgZGV2aWNlcyBhcmUgYXV0b2RldGVjdGVkLCBhbmQgdGhlIGRyaXZlciBzdXBwb3J0cyB1cCB0byB0d28gKGFueQorY29tYmluYXRpb24gb2YpIGRldmljZXMgb24gYSBzaW5nbGUgZ2FtZXBvcnQsIHVzaW5nIGFuIFktY2FibGUgb3IgY2hhaW5lZAordG9nZXRoZXIuCisKKyAgTG9naXRlY2ggV2luZ01hbiBKb3lzdGljaywgTG9naXRlY2ggV2luZ01hbiBBdHRhY2ssIExvZ2l0ZWNoIFdpbmdNYW4KK0V4dHJlbWUgYW5kIExvZ2l0ZWNoIFdpbmdNYW4gVGh1bmRlclBhZCBhcmUgbm90IGRpZ2l0YWwgam95c3RpY2tzIGFuZCBhcmUKK2hhbmRsZWQgYnkgdGhlIGFuYWxvZyBkcml2ZXIgZGVzY3JpYmVkIGFib3ZlLiBMb2dpdGVjaCBXaW5nTWFuIFdhcnJpb3IgYW5kCitMb2dpdGVjaCBNYWdlbGxhbiBhcmUgc3VwcG9ydGVkIGJ5IHNlcmlhbCBkcml2ZXJzIGRlc2NyaWJlZCBiZWxvdy4gIExvZ2l0ZWNoCitXaW5nTWFuIEZvcmNlIGFuZCBMb2dpdGVjaCBXaW5nTWFuIEZvcm11bGEgRm9yY2UgYXJlIHN1cHBvcnRlZCBieSB0aGUKK0ktRm9yY2UgZHJpdmVyIGRlc2NyaWJlZCBiZWxvdy4gTG9naXRlY2ggQ3liZXJNYW4gaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisKKzMuNCBHcmF2aXMgR3JJUAorfn5+fn5+fn5+fn5+fn5+CisgIEdyYXZpcyBHcklQIHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgZ3JpcC5jIG1vZHVsZS4gSXQgY3VycmVudGx5CitzdXBwb3J0czoKKworKiBHcmF2aXMgR2FtZVBhZCBQcm8KKyogR3JhdmlzIEJsYWNrSGF3ayBEaWdpdGFsCisqIEdyYXZpcyBYdGVybWluYXRvcgorKiBHcmF2aXMgWHRlcm1pbmF0b3IgRHVhbENvbnRyb2wKKworICBBbGwgdGhlc2UgZGV2aWNlcyBhcmUgYXV0b2RldGVjdGVkLCBhbmQgeW91IGNhbiBldmVuIHVzZSBhbnkgY29tYmluYXRpb24KK29mIHVwIHRvIHR3byBvZiB0aGVzZSBwYWRzIGVpdGhlciBjaGFpbmVkIHRvZ2V0aGVyIG9yIHVzaW5nIGFuIFktY2FibGUgb24gYQorc2luZ2xlIGdhbWVwb3J0LgorCitHcklQIE11bHRpUG9ydCBpc24ndCBzdXBwb3J0ZWQgeWV0LiBHcmF2aXMgU3RpbmdlciBpcyBhIHNlcmlhbCBkZXZpY2UgYW5kIGlzCitzdXBwb3J0ZWQgYnkgdGhlIHN0aW5nZXIgZHJpdmVyLiBPdGhlciBHcmF2aXMgam95c3RpY2tzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCithbmFsb2cgZHJpdmVyLgorCiszLjUgRlBHYW1pbmcgQTNEIGFuZCBNYWRDYXR6IEEzRAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIEFzc2Fzc2luIDNEIHByb3RvY29sIGNyZWF0ZWQgYnkgRlBHYW1pbmcsIGlzIHVzZWQgYm90aCBieSBGUEdhbWluZwordGhlbXNlbHZlcyBhbmQgaXMgbGljZW5zZWQgdG8gTWFkQ2F0ei4gQTNEIGRldmljZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUKK2EzZC5jIG1vZHVsZS4gSXQgY3VycmVudGx5IHN1cHBvcnRzOgorCisqIEZQR2FtaW5nIEFzc2Fzc2luIDNECisqIE1hZENhdHogUGFudGhlcgorKiBNYWRDYXR6IFBhbnRoZXIgWEwKKworICBBbGwgdGhlc2UgZGV2aWNlcyBhcmUgYXV0b2RldGVjdGVkLiBCZWNhdXNlIHRoZSBBc3Nhc3NpbiAzRCBhbmQgdGhlIFBhbnRoZXIKK2FsbG93IGNvbm5lY3RpbmcgYW5hbG9nIGpveXN0aWNrcyB0byB0aGVtLCB5b3UnbGwgbmVlZCB0byBsb2FkIHRoZSBhbmFsb2cKK2RyaXZlciBhcyB3ZWxsIHRvIGhhbmRsZSB0aGUgYXR0YWNoZWQgam95c3RpY2tzLgorCisgIFRoZSB0cmFja2JhbGwgc2hvdWxkIHdvcmsgd2l0aCBVU0IgbW91c2VkZXYgbW9kdWxlIGFzIGEgbm9ybWFsIG1vdXNlLiBTZWUKK3RoZSBVU0IgZG9jdW1lbnRhdGlvbiBmb3IgaG93IHRvIHNldHVwIGFuIFVTQiBtb3VzZS4KKworMy42IFRocnVzdE1hc3RlciBEaXJlY3RDb25uZWN0IChCU1ApCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIFRNIERpcmVjdENvbm5lY3QgKEJTUCkgcHJvdG9jb2wgaXMgc3VwcG9ydGVkIGJ5IHRoZSB0bWRjLmMKK21vZHVsZS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvOgorCisqIFRocnVzdE1hc3RlciBNaWxsZW5pdW0gM0QgSW5jZXB0b3IKKyogVGhydXN0TWFzdGVyIDNEIFJhZ2UgUGFkCisqIFRocnVzdE1hc3RlciBGdXNpb24gRGlnaXRhbCBHYW1lIFBhZAorCisgIERldmljZXMgbm90IGRpcmVjdGx5IHN1cHBvcnRlZCwgYnV0IGhvcGVmdWxseSB3b3JraW5nIGFyZToKKworKiBUaHJ1c3RNYXN0ZXIgRnJhZ01hc3RlcgorKiBUaHJ1c3RNYXN0ZXIgQXR0YWNrIFRocm90dGxlCisKKyAgSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlLCBjb250YWN0IG1lLgorCisgIFRNREMgZGV2aWNlcyBhcmUgYXV0b2RldGVjdGVkLCBhbmQgdGh1cyBubyBwYXJhbWV0ZXJzIHRvIHRoZSBtb2R1bGUKK2FyZSBuZWVkZWQuIFVwIHRvIHR3byBUTURDIGRldmljZXMgY2FuIGJlIGNvbm5lY3RlZCB0byBvbmUgZ2FtZXBvcnQsIHVzaW5nCithbiBZLWNhYmxlLgorCiszLjcgQ3JlYXRpdmUgTGFicyBCbGFzdGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBCbGFzdGVyIHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgY29icmEuYyBtb2R1bGUuIEl0IHN1cHBvcnRzIG9ubHkKK3RoZToKKworKiBDcmVhdGl2ZSBCbGFzdGVyIEdhbWVQYWQgQ29icmEKKworICBVcCB0byB0d28gb2YgdGhlc2UgY2FuIGJlIHVzZWQgb24gYSBzaW5nbGUgZ2FtZXBvcnQsIHVzaW5nIGFuIFktY2FibGUuCisKKzMuOCBHZW5pdXMgRGlnaXRhbCBqb3lzdGlja3MgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBHZW5pdXMgZGlnaXRhbGx5IGNvbW11bmljYXRpbmcgam95c3RpY2tzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGdmMmsuYworbW9kdWxlLiBUaGlzIGluY2x1ZGVzOgorCisqIEdlbml1cyBGbGlnaHQyMDAwIEYtMjMgam95c3RpY2sgCisqIEdlbml1cyBGbGlnaHQyMDAwIEYtMzEgam95c3RpY2sgCisqIEdlbml1cyBHLTA5RCBnYW1lcGFkCisKKyAgT3RoZXIgR2VuaXVzIGRpZ2l0YWwgam95c3RpY2tzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCwgYnV0IHN1cHBvcnQgY2FuIGJlCithZGRlZCBmYWlybHkgZWFzaWx5LgorCiszLjkgSW50ZXJBY3QgRGlnaXRhbCBqb3lzdGlja3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgSW50ZXJBY3QgZGlnaXRhbGx5IGNvbW11bmljYXRpbmcgam95c3RpY2tzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCitpbnRlcmFjdC5jIG1vZHVsZS4gVGhpcyBpbmNsdWRlczoKKworKiBJbnRlckFjdCBIYW1tZXJIZWFkL0ZYIGdhbWVwYWQKKyogSW50ZXJBY3QgUHJvUGFkOCBnYW1lcGFkIAorCisgIE90aGVyIEludGVyQWN0IGRpZ2l0YWwgam95c3RpY2tzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCwgYnV0IHN1cHBvcnQgY2FuIGJlIAorYWRkZWQgZmFpcmx5IGVhc2lseS4KKworMy4xMCBQRFBJIExpZ2h0bmluZyA0IGdhbWVjYXJkcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBQRFBJIExpZ2h0bmluZyA0IGdhbWVjYXJkcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWdodG5pbmcuYyBtb2R1bGUuCitPbmNlIHRoZSBtb2R1bGUgaXMgbG9hZGVkLCB0aGUgYW5hbG9nIGRyaXZlciBjYW4gYmUgdXNlZCB0byBoYW5kbGUgdGhlCitqb3lzdGlja3MuIERpZ2l0YWxseSBjb21tdW5pY2F0aW5nIGpveXN0aWNrIHdpbGwgd29yayBvbmx5IG9uIHBvcnQgMCwgd2hpbGUKK3VzaW5nIFktY2FibGVzLCB5b3UgY2FuIGNvbm5lY3QgdXAgdG8gOCBhbmFsb2cgam95c3RpY2tzIHRvIGEgc2luZ2xlIEw0CitjYXJkLCAxNiBpbiBjYXNlIHlvdSBoYXZlIHR3byBpbiB5b3VyIHN5c3RlbS4KKworMy4xMSBUcmlkZW50IDREV2F2ZSAvIEF1cmVhbCBWb3J0ZXgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFNvdW5kY2FyZHMgd2l0aCBhIFRyaWRlbnQgNERXYXZlIERYL05YIG9yIEF1cmVhbCBWb3J0ZXgvVm9ydGV4MiBjaGlwc2V0cworcHJvdmlkZSBhbiAiRW5oYW5jZWQgR2FtZSBQb3J0IiBtb2RlIHdoZXJlIHRoZSBzb3VuZGNhcmQgaGFuZGxlcyBwb2xsaW5nIHRoZQoram95c3RpY2suICBUaGlzIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBwY2lnYW1lLmMgbW9kdWxlLiBPbmNlIGxvYWRlZCB0aGUKK2FuYWxvZyBkcml2ZXIgY2FuIHVzZSB0aGUgZW5oYW5jZWQgZmVhdHVyZXMgb2YgdGhlc2UgZ2FtZXBvcnRzLi4KKworMy4xMyBDcnlzdGFsIFNvdW5kRnVzaW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgU291bmRjYXJkcyB3aXRoIENyeXN0YWwgU291bmRGdXNpb24gY2hpcHNldHMgcHJvdmlkZSBhbiAiRW5oYW5jZWQgR2FtZQorUG9ydCIsIG11Y2ggbGlrZSB0aGUgNERXYXZlIG9yIFZvcnRleCBhYm92ZS4gVGhpcywgYW5kIGFsc28gdGhlIG5vcm1hbCBtb2RlCitmb3IgdGhlIHBvcnQgb2YgdGhlIFNvdW5kRnVzaW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgY3M0NjF4LmMgbW9kdWxlLgorCiszLjE0IFNvdW5kQmxhc3RlciBMaXZlIQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBMaXZlISBoYXMgYSBzcGVjaWFsIFBDSSBnYW1lcG9ydCwgd2hpY2gsIGFsdGhvdWdoIGl0IGRvZXNuJ3QgcHJvdmlkZQorYW55ICJFbmhhbmNlZCIgc3R1ZmYgbGlrZSA0RFdhdmUgYW5kIGZyaWVuZHMsIGlzIHF1aXRlIGEgYml0IGZhc3RlciB0aGFuCitpdCdzIElTQSBjb3VudGVycGFydHMuIEl0IGFsc28gcmVxdWlyZXMgc3BlY2lhbCBzdXBwb3J0LCBoZW5jZSB0aGUKK2VtdTEwazEtZ3AuYyBtb2R1bGUgZm9yIGl0IGluc3RlYWQgb2YgdGhlIG5vcm1hbCBuczU1OC5jIG9uZS4KKworMy4xNSBTb3VuZEJsYXN0ZXIgNjQgYW5kIDEyOCAtIEVTMTM3MCBhbmQgRVMxMzcxLCBFU1MgU29sbzEgYW5kIFMzIFNvbmljVmliZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZXNlIFBDSSBzb3VuZGNhcmRzIGhhdmUgc3BlY2lmaWMgZ2FtZXBvcnRzLiBUaGV5IGFyZSBoYW5kbGVkIGJ5IHRoZQorc291bmQgZHJpdmVycyB0aGVtc2VsdmVzLiBNYWtlIHN1cmUgeW91IHNlbGVjdCBnYW1lcG9ydCBzdXBwb3J0IGluIHRoZQoram95c3RpY2sgbWVudSBhbmQgc291bmQgY2FyZCBzdXBwb3J0IGluIHRoZSBzb3VuZCBtZW51IGZvciB5b3VyIGFwcHJvcHJpYXRlCitjYXJkLgorCiszLjE2IEFtaWdhCit+fn5+fn5+fn5+CisgIEFtaWdhIGpveXN0aWNrcywgY29ubmVjdGVkIHRvIGFuIEFtaWdhLCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBhbWlqb3kuYworZHJpdmVyLiBTaW5jZSB0aGV5IGNhbid0IGJlIGF1dG9kZXRlY3RlZCwgdGhlIGRyaXZlciBoYXMgYSBjb21tYW5kIGxpbmUuCisKKwlhbWlqb3kubWFwPTxhPiw8Yj4KKworICBhIGFuZCBiIGRlZmluZSB0aGUgam95c3RpY2tzIGNvbm5lY3RlZCB0byB0aGUgSk9ZMERBVCBhbmQgSk9ZMURBVCBwb3J0cyBvZgordGhlIEFtaWdhLgorCisJVmFsdWUgfCBKb3lzdGljayB0eXBlCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAwICAgfCBOb25lCisJICAxICAgfCAxLWJ1dHRvbiBkaWdpdGFsIGpveXN0aWNrCisKKyAgTm8gbW9yZSBqb3lzdGljayB0eXBlcyBhcmUgc3VwcG9ydGVkIG5vdywgYnV0IHRoYXQgc2hvdWxkIGNoYW5nZSBpbiB0aGUKK2Z1dHVyZSBpZiBJIGdldCBhbiBBbWlnYSBpbiB0aGUgcmVhY2ggb2YgbXkgZmluZ2Vycy4KKworMy4xNyBHYW1lIGNvbnNvbGUgYW5kIDgtYml0IHBhZHMgYW5kIGpveXN0aWNrcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU2VlIGpveXN0aWNrLXBhcnBvcnQudHh0IGZvciBtb3JlIGluZm8uCisKKzMuMTggU3BhY2VUZWMvTGFiVGVjIGRldmljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgU3BhY2VUZWMgc2VyaWFsIGRldmljZXMgY29tbXVuaWNhdGUgdXNpbmcgdGhlIFNwYWNlV2FyZSBwcm90b2NvbC4gSXQgaXMKK3N1cHBvcnRlZCBieSB0aGUgc3BhY2VvcmIuYyBhbmQgc3BhY2ViYWxsLmMgZHJpdmVycy4gVGhlIGRldmljZXMgY3VycmVudGx5CitzdXBwb3J0ZWQgYnkgc3BhY2VvcmIuYyBhcmU6CisKKyogU3BhY2VUZWMgU3BhY2VCYWxsIEF2ZW5nZXIKKyogU3BhY2VUZWMgU3BhY2VPcmIgMzYwCisKK0RldmljZXMgY3VycmVudGx5IHN1cHBvcnRlZCBieSBzcGFjZWJhbGwuYyBhcmU6CisKKyogU3BhY2VUZWMgU3BhY2VCYWxsIDQwMDAgRkxYCisKKyAgSW4gYWRkaXRpb24gdG8gaGF2aW5nIHRoZSBzcGFjZW9yYi9zcGFjZWJhbGwgYW5kIHNlcnBvcnQgbW9kdWxlcyBpbiB0aGUKK2tlcm5lbCwgeW91IGFsc28gbmVlZCB0byBhdHRhY2ggYSBzZXJpYWwgcG9ydCB0byBpdC4gdG8gZG8gdGhhdCwgcnVuIHRoZQoraW5wdXRhdHRhY2ggcHJvZ3JhbToKKworCWlucHV0YXR0YWNoIC0tc3BhY2VvcmIgL2Rldi90dHMveCAmCitvcgorCWlucHV0YXR0YWNoIC0tc3BhY2ViYWxsIC9kZXYvdHRzL3ggJgorCit3aGVyZSAvZGV2L3R0cy94IGlzIHRoZSBzZXJpYWwgcG9ydCB3aGljaCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0by4gQWZ0ZXIKK2RvaW5nIHRoaXMsIHRoZSBkZXZpY2Ugd2lsbCBiZSByZXBvcnRlZCBhbmQgd2lsbCBzdGFydCB3b3JraW5nLgorCisgIFRoZXJlIGlzIG9uZSBjYXZlYXQgd2l0aCB0aGUgU3BhY2VPcmIuIFRoZSBidXR0b24gIzYsIHRoZSBvbiB0aGUgYm90dG9tCitzaWRlIG9mIHRoZSBvcmIsIGFsdGhvdWdoIHJlcG9ydGVkIGFzIGFuIG9yZGluYXJ5IGJ1dHRvbiwgY2F1c2VzIGludGVybmFsCityZWNlbnRlcmluZyBvZiB0aGUgc3BhY2VvcmIsIG1vdmluZyB0aGUgemVybyBwb2ludCB0byB0aGUgcG9zaXRpb24gaW4gd2hpY2gKK3RoZSBiYWxsIGlzIGF0IHRoZSBtb21lbnQgb2YgcHJlc3NpbmcgdGhlIGJ1dHRvbi4gU28sIHRoaW5rIGZpcnN0IGJlZm9yZQoreW91IGJpbmQgaXQgdG8gc29tZSBvdGhlciBmdW5jdGlvbi4KKworU3BhY2VUZWMgU3BhY2VCYWxsIDIwMDMgRkxYIGFuZCAzMDAzIEZMWCBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIAorCiszLjE5IExvZ2l0ZWNoIFNXSUZUIGRldmljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgU1dJRlQgc2VyaWFsIHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgd2Fycmlvci5jIG1vZHVsZS4gSXQKK2N1cnJlbnRseSBzdXBwb3J0cyBvbmx5IHRoZToKKworKiBMb2dpdGVjaCBXaW5nTWFuIFdhcnJpb3IKKworYnV0IGluIHRoZSBmdXR1cmUsIExvZ2l0ZWNoIEN5YmVyTWFuICh0aGUgb3JpZ2luYWwgb25lLCBub3QgQ00yKSBjb3VsZCBiZQorc3VwcG9ydGVkIGFzIHdlbGwuIFRvIHVzZSB0aGUgbW9kdWxlLCB5b3UgbmVlZCB0byBydW4gaW5wdXRhdHRhY2ggYWZ0ZXIgeW91CitpbnNlcnQvY29tcGlsZSB0aGUgbW9kdWxlIGludG8geW91ciBrZXJuZWw6CisKKwlpbnB1dGF0dGFjaCAtLXdhcnJpb3IgL2Rldi90dHMveCAmCisKKy9kZXYvdHRzL3ggaXMgdGhlIHNlcmlhbCBwb3J0IHlvdXIgV2FycmlvciBpcyBhdHRhY2hlZCB0by4KKworMy4yMCBNYWdlbGxhbiAvIFNwYWNlIE1vdXNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIE1hZ2VsbGFuIChvciBTcGFjZSBNb3VzZSksIG1hbnVmYWN0dXJlZCBieSBMb2dpQ2FkM2QgKGZvcm1lcmx5IFNwYWNlCitTeXN0ZW1zKSwgZm9yIG1hbnkgb3RoZXIgY29tcGFuaWVzIChMb2dpdGVjaCwgSFAsIC4uLikgaXMgc3VwcG9ydGVkIGJ5IHRoZQoram95LW1hZ2VsbGFuIG1vZHVsZS4gSXQgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgdGhlOgorCisqIE1hZ2VsbGFuIDNECisqIFNwYWNlIE1vdXNlCisKK21vZGVscywgdGhlIGFkZGl0aW9uYWwgYnV0dG9ucyBvbiB0aGUgJ1BsdXMnIHZlcnNpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KKworICBUbyB1c2UgaXQsIHlvdSBuZWVkIHRvIGF0dGFjaCB0aGUgc2VyaWFsIHBvcnQgdG8gdGhlIGRyaXZlciB1c2luZyB0aGUKKworCWlucHV0YXR0YWNoIC0tbWFnZWxsYW4gL2Rldi90dHMveCAmCisKK2NvbW1hbmQuIEFmdGVyIHRoYXQgdGhlIE1hZ2VsbGFuIHdpbGwgYmUgZGV0ZWN0ZWQsIGluaXRpYWxpemVkLCB3aWxsIGJlZXAsCithbmQgdGhlIC9kZXYvaW5wdXQvanNYIGRldmljZSBzaG91bGQgYmVjb21lIHVzYWJsZS4KKworMy4yMSBJLUZvcmNlIGRldmljZXMgCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBBbGwgSS1Gb3JjZSBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGlmb3JjZSBtb2R1bGUuIFRoaXMgaW5jbHVkZXM6CisKKyogQVZCIE1hZyBUdXJibyBGb3JjZQorKiBBVkIgVG9wIFNob3QgUGVnYXN1cworKiBBVkIgVG9wIFNob3QgRm9yY2UgRmVlZGJhY2sgUmFjaW5nIFdoZWVsCisqIExvZ2l0ZWNoIFdpbmdNYW4gRm9yY2UKKyogTG9naXRlY2ggV2luZ01hbiBGb3JjZSBXaGVlbCAKKyogR3VpbGxlbW90IFJhY2UgTGVhZGVyIEZvcmNlIEZlZWRiYWNrCisqIEd1aWxsZW1vdCBGb3JjZSBGZWVkYmFjayBSYWNpbmcgV2hlZWwKKyogVGhydXN0bWFzdGVyIE1vdG9yIFNwb3J0IEdUCisKKyAgVG8gdXNlIGl0LCB5b3UgbmVlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBwb3J0IHRvIHRoZSBkcml2ZXIgdXNpbmcgdGhlCisKKwlpbnB1dGF0dGFjaCAtLWlmb3JjZSAvZGV2L3R0cy94ICYKKworY29tbWFuZC4gQWZ0ZXIgdGhhdCB0aGUgSS1Gb3JjZSBkZXZpY2Ugd2lsbCBiZSBkZXRlY3RlZCwgYW5kIHRoZQorL2Rldi9pbnB1dC9qc1ggZGV2aWNlIHNob3VsZCBiZWNvbWUgdXNhYmxlLgorCisgIEluIGNhc2UgeW91J3JlIHVzaW5nIHRoZSBkZXZpY2UgdmlhIHRoZSBVU0IgcG9ydCwgdGhlIGlucHV0YXR0YWNoIGNvbW1hbmQKK2lzbid0IG5lZWRlZC4KKworICBUaGUgSS1Gb3JjZSBkcml2ZXIgbm93IHN1cHBvcnRzIGZvcmNlIGZlZWRiYWNrIHZpYSB0aGUgZXZlbnQgaW50ZXJmYWNlLgorCisgIFBsZWFzZSBub3RlIHRoYXQgTG9naXRlY2ggV2luZ01hbiAqM0QgZGV2aWNlcyBhcmUgX25vdF8gc3VwcG9ydGVkIGJ5IHRoaXMKK21vZHVsZSwgcmF0aGVyIGJ5IGhpZC4gRm9yY2UgZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhvc2UgZGV2aWNlcy4KK0xvZ2l0ZWNoIGdhbWVwYWRzIGFyZSBhbHNvIGhpZCBkZXZpY2VzLgorCiszLjIyIEdyYXZpcyBTdGluZ2VyIGdhbWVwYWQgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgVGhlIEdyYXZpcyBTdGluZ2VyIHNlcmlhbCBwb3J0IGdhbWVwYWQsIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBsYXB0b3AKK2NvbXB1dGVycywgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzdGluZ2VyLmMgbW9kdWxlLiBUbyB1c2UgaXQsIGF0dGFjaCB0aGUKK3NlcmlhbCBwb3J0IHRvIHRoZSBkcml2ZXIgdXNpbmc6CisKKyAgICAgICAgaW5wdXRhdHRhY2ggLS1zdGluZ2VyIC9kZXYvdHR5L3ggJgorCit3aGVyZSB4IGlzIHRoZSBudW1iZXIgb2YgdGhlIHNlcmlhbCBwb3J0LgorCis0LiBUcm91Ymxlc2hvb3RpbmcKK35+fn5+fn5+fn5+fn5+fn5+fgorICBUaGVyZSBpcyBxdWl0ZSBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdCB5b3UgcnVuIGludG8gc29tZSBwcm9ibGVtcy4gRm9yCit0ZXN0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciB3b3JrcywgaWYgaW4gZG91YnQsIHVzZSB0aGUganN0ZXN0IHV0aWxpdHkgaW4KK3NvbWUgb2YgaXRzIG1vZGVzLiBUaGUgbW9zdCB1c2VmdWwgbW9kZXMgYXJlICJub3JtYWwiIC0gZm9yIHRoZSAxLngKK2ludGVyZmFjZSwgYW5kICJvbGQiIGZvciB0aGUgIjAueCIgaW50ZXJmYWNlLiBZb3UgcnVuIGl0IGJ5IHR5cGluZzoKKworCWpzdGVzdCAtLW5vcm1hbCAvZGV2L2lucHV0L2pzMAorCWpzdGVzdCAtLW9sZCAgICAvZGV2L2lucHV0L2pzMAorCisgIEFkZGl0aW9uYWxseSB5b3UgY2FuIGRvIGEgdGVzdCB3aXRoIHRoZSBldnRlc3QgdXRpbGl0eToKKworCWV2dGVzdCAvZGV2L2lucHV0L2V2ZW50MAorCisgIE9oLCBhbmQgcmVhZCB0aGUgRkFRISA6KQorCis1LiBGQVEKK35+fn5+fgorUTogUnVubmluZyAnanN0ZXN0IC9kZXYvanMwJyByZXN1bHRzIGluICJGaWxlIG5vdCBmb3VuZCIgZXJyb3IuIFdoYXQncyB0aGUKKyAgIGNhdXNlPworQTogVGhlIGRldmljZSBmaWxlcyBkb24ndCBleGlzdC4gQ3JlYXRlIHRoZW0gKHNlZSBzZWN0aW9uIDIuMikuCisKK1E6IElzIGl0IHBvc3NpYmxlIHRvIGNvbm5lY3QgbXkgb2xkIEF0YXJpL0NvbW1vZG9yZS9BbWlnYS9jb25zb2xlIGpveXN0aWNrCisgICBvciBwYWQgdGhhdCB1c2VzIGEgOS1waW4gRC10eXBlIGNhbm5vbiBjb25uZWN0b3IgdG8gdGhlIHNlcmlhbCBwb3J0IG9mIG15CisgICBQQz8KK0E6IFllcywgaXQgaXMgcG9zc2libGUsIGJ1dCBpdCdsbCBidXJuIHlvdXIgc2VyaWFsIHBvcnQgb3IgdGhlIHBhZC4gSXQKKyAgIHdvbid0IHdvcmssIG9mIGNvdXJzZS4KKworUTogTXkgam95c3RpY2sgZG9lc24ndCB3b3JrIHdpdGggUXVha2UgLyBRdWFrZSAyLiBXaGF0J3MgdGhlIGNhdXNlPworQTogUXVha2UgLyBRdWFrZSAyIGRvbid0IHN1cHBvcnQgam95c3RpY2suIFVzZSBqb3kya2V5IHRvIHNpbXVsYXRlIGtleXByZXNzZXMKKyAgIGZvciB0aGVtLgorCis2LiBQcm9ncmFtbWluZyBJbnRlcmZhY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBUaGUgMS4wIGRyaXZlciB1c2VzIGEgbmV3LCBldmVudCBiYXNlZCBhcHByb2FjaCB0byB0aGUgam95c3RpY2sgZHJpdmVyLgorSW5zdGVhZCBvZiB0aGUgdXNlciBwcm9ncmFtIHBvbGxpbmcgZm9yIHRoZSBqb3lzdGljayB2YWx1ZXMsIHRoZSBqb3lzdGljaworZHJpdmVyIG5vdyByZXBvcnRzIG9ubHkgYW55IGNoYW5nZXMgb2YgaXRzIHN0YXRlLiBTZWUgam95c3RpY2stYXBpLnR4dCwKK2pveXN0aWNrLmggYW5kIGpzdGVzdC5jIGluY2x1ZGVkIGluIHRoZSBqb3lzdGljayBwYWNrYWdlIGZvciBtb3JlCitpbmZvcm1hdGlvbi4gVGhlIGpveXN0aWNrIGRldmljZSBjYW4gYmUgdXNlZCBpbiBlaXRoZXIgYmxvY2tpbmcgb3IKK25vbmJsb2NraW5nIG1vZGUgYW5kIHN1cHBvcnRzIHNlbGVjdCgpIGNhbGxzLgorCisgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHRoZSBvbGQgKHYwLngpIGludGVyZmFjZSBpcyBzdGlsbCBpbmNsdWRlZC4KK0FueSBjYWxsIHRvIHRoZSBqb3lzdGljayBkcml2ZXIgdXNpbmcgdGhlIG9sZCBpbnRlcmZhY2Ugd2lsbCByZXR1cm4gdmFsdWVzCit0aGF0IGFyZSBjb21wYXRpYmxlIHRvIHRoZSBvbGQgaW50ZXJmYWNlLiAgVGhpcyBpbnRlcmZhY2UgaXMgc3RpbGwgbGltaXRlZAordG8gMiBheGVzLCBhbmQgYXBwbGljYXRpb25zIHVzaW5nIGl0IHVzdWFsbHkgZGVjb2RlIG9ubHkgMiBidXR0b25zLCBhbHRob3VnaAordGhlIGRyaXZlciBwcm92aWRlcyB1cCB0byAzMi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvc2hhcGUuZmlnIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9zaGFwZS5maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyYmZmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvc2hhcGUuZmlnCkBAIC0wLDAgKzEsNjUgQEAKKyNGSUcgMy4yCitMYW5kc2NhcGUKK0NlbnRlcgorSW5jaGVzCitMZXR0ZXIgIAorMTAwLjAwCitTaW5nbGUKKy0yCisxMjAwIDIKKzIgMSAwIDIgMCA3IDUwIDAgLTEgMC4wMDAgMCAwIC0xIDAgMCA2CisJIDQyMDAgMzYwMCA0MjAwIDMwNzUgNDk1MCAyMzI1IDc0MjUgMjMyNSA4MjUwIDMxNTAgODI1MCAzNjAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSA0MjAwIDM2NzUgNDIwMCA1NDAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSA4MjUwIDM2NzUgODI1MCA1NDAwCisyIDEgMCAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSAzNjc1IDM2MDAgODcwMCAzNjAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgMgorCSA4Nzc1IDM2MDAgMTAyMDAgMzYwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgODMyNSAzMTUwIDkwNzUgMzE1MAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgNzUwMCAyMzI1IDEwMjAwIDIzMjUKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDM2MDAgMzYwMCAzMDAwIDM2MDAKKzIgMSAxIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDAgMCAyCisJIDQxMjUgMzA3NSAzMDAwIDMwNzUKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDEgMSAyCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDQyMDAgNTQwMCA4MTc1IDU0MDAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDEgMSAyCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDEwMTI1IDIzMjUgMTAxMjUgMzYwMAorMiAxIDAgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMSAxIDIKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkgMzAwMCAzMTUwIDMwMDAgMzYwMAorMiAxIDAgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMSAxIDIKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkwIDAgMS4wMCA2MC4wMCAxMjAuMDAKKwkgOTA3NSAzMTUwIDkwNzUgMzYwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgNDk1MCAyMzI1IDQ5NTAgMTIwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDIKKwkgNzQyNSAyMzI1IDc0MjUgMTIwMAorMiAxIDEgMSAwIDcgNTAgMCAtMSA0LjAwMCAwIDAgLTEgMCAwIDQKKwkgNDIwMCAzMDc1IDQyMDAgMjQwMCAzNjAwIDE4MDAgMzYwMCAxMjAwCisyIDEgMSAxIDAgNyA1MCAwIC0xIDQuMDAwIDAgMCAtMSAwIDAgNAorCSA4MjUwIDMxNTAgODI1MCAyNDc1IDg3NzUgMTk1MCA4Nzc1IDEyMDAKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDEgMSAyCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDM2MDAgMTI3NSA0OTUwIDEyNzUKKzIgMSAwIDEgMCA3IDUwIDAgLTEgNC4wMDAgMCAwIC0xIDEgMSAyCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJMCAwIDEuMDAgNjAuMDAgMTIwLjAwCisJIDc0MjUgMTI3NSA4NzAwIDEyNzUKKzQgMSAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxMzUgMTE0MCA2MDc1IDUzMjUgRWZmZWN0IGR1cmF0aW9uXDAwMQorNCAwIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDE4MCAxMzA1IDEwMjAwIDMwMDAgRWZmZWN0IG1hZ25pdHVkZVwwMDEKKzQgMCAwIDUwIDAgMCAxMiAwLjAwMDAgNCAxMzUgNzgwIDkxNTAgMzQ1MCBGYWRlIGxldmVsXDAwMQorNCAxIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDE4MCAxMDM1IDQyNzUgMTIwMCBBdHRhY2sgbGVuZ3RoXDAwMQorNCAxIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDE4MCA4ODUgODE3NSAxMjAwIEZhZGUgbGVuZ3RoXDAwMQorNCAyIDAgNTAgMCAwIDEyIDAuMDAwMCA0IDEzNSA5MzAgMjkyNSAzMzc1IEF0dGFjayBsZXZlbFwwMDEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQveHBhZC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTExYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3hwYWQudHh0CkBAIC0wLDAgKzEsMTE2IEBACit4cGFkIC0gTGludXggVVNCIGRyaXZlciBmb3IgWC1Cb3ggZ2FtZXBhZHMKKworVGhpcyBpcyB0aGUgdmVyeSBmaXJzdCByZWxlYXNlIG9mIGEgZHJpdmVyIGZvciBYLUJveCBnYW1lcGFkcy4KK0Jhc2ljYWxseSwgdGhpcyB3YXMgaGFja2VkIGF3YXkgaW4ganVzdCBhIGZldyBob3Vycywgc28gZG9uJ3QgZXhwZWN0CittaXJhY2xlcy4KK0luIHBhcnRpY3VsYXIsIHRoZXJlIGlzIGN1cnJlbnRseSBOTyBzdXBwb3J0IGZvciB0aGUgcnVtYmxlIHBhY2suCitZb3Ugd29uJ3QgZmluZCBtYW55IGZmLWF3YXJlIGxpbnV4IGFwcGxpY2F0aW9ucyBhbnl3YXkuCisKKworMC4gU3RhdHVzCistLS0tLS0tLS0KKworRm9yIG5vdywgdGhpcyBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24ganVzdCBvbmUgTGludXgtQm94LgorVGhpcyBvbmUgaXMgcnVubmluZyBhIDIuNC4xOCBrZXJuZWwgd2l0aCB1c2ItdWhjaSBvbiBhbiBhbWQgYXRobG9uIDYwMC4KKworVGhlIGpzdGVzdC1wcm9ncmFtIGZyb20gam95c3RpY2stMS4yLjE1IChqc3Rlc3QtdmVyc2lvbiAyLjEuMCkgcmVwb3J0cworOCBheGVzIGFuZCAxMCBidXR0b25zLgorCitBbGxzIDggYXhlcyB3b3JrLCB0aG91Z2ggdGhleSBhbGwgaGF2ZSB0aGUgc2FtZSByYW5nZSAoLTMyNzY4Li4zMjc2NykKK2FuZCB0aGUgemVyby1zZXR0aW5nIGlzIG5vdCBjb3JyZWN0IGZvciB0aGUgdHJpZ2dlcnMgKEkgZG9uJ3Qga25vdyBpZiB0aGF0CitpcyBzb21lIGxpbWl0YXRpb24gb2YganN0ZXN0LCBzaW5jZSB0aGUgaW5wdXQgZGV2aWNlIHNldHVwIHNob3VsZCBiZSBmaW5lLiBJCitkaWRuJ3QgaGF2ZSBhIGxvb2sgYXQganN0ZXN0IGl0c2VsZiB5ZXQpLgorCitBbGwgb2YgdGhlIDEwIGJ1dHRvbnMgd29yayAoaW4gZGlnaXRhbCBtb2RlKS4gVGhlIHNpeCBidXR0b25zIG9uIHRoZQorcmlnaHQgc2lkZSAoQSwgQiwgWCwgWSwgYmxhY2ssIHdoaXRlKSBhcmUgc2FpZCB0byBiZSAiYW5hbG9nIiBhbmQKK3JlcG9ydCB0aGVpciB2YWx1ZXMgYXMgOCBiaXQgdW5zaWduZWQsIG5vdCBzdXJlIHdoYXQgdGhpcyBpcyBnb29kIGZvci4KKworSSB0ZXN0ZWQgdGhlIGNvbnRyb2xsZXIgd2l0aCBxdWFrZTMsIGFuZCBjb25maWd1cmF0aW9uIGFuZAoraW4gZ2FtZSBmdW5jdGlvbmFsaXR5IHdlcmUgT0suIEhvd2V2ZXIsIEkgZmluZCBpdCByYXRoZXIgZGlmZmljdWx0IHRvCitwbGF5IGZpcnN0IHBlcnNvbiBzaG9vdGVycyB3aXRoIGEgcGFkLiBZb3VyIG1pbGVhZ2UgbWF5IHZhcnkuCisKKworMS4gVVNCIGFkYXB0ZXIKKy0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSB5b3UgY2FuIGFjdHVhbGx5IHVzZSB0aGUgZHJpdmVyLCB5b3UgbmVlZCB0byBnZXQgeW91cnNlbGYgYW4KK2FkYXB0ZXIgY2FibGUgdG8gY29ubmVjdCB0aGUgWC1Cb3ggY29udHJvbGxlciB0byB5b3VyIExpbnV4LUJveC4KKworU3VjaCBhIGNhYmxlIGlzIHByZXR0eSBlYXN5IHRvIGJ1aWxkLiBUaGUgQ29udHJvbGxlciBpdHNlbGYgaXMgYSBVU0IgY29tcG91bmQKK2RldmljZSAoYSBodWIgd2l0aCB0aHJlZSBwb3J0cyBmb3IgdHdvIGV4cGFuc2lvbiBzbG90cyBhbmQgdGhlIGNvbnRyb2xsZXIKK2RldmljZSkgd2l0aCB0aGUgb25seSBkaWZmZXJlbmNlIGluIGEgbm9uc3RhbmRhcmQgY29ubmVjdG9yICg1IHBpbnMgdnMuIDQgb24KK3N0YW5kYXJkIFVTQiBjb25uZWN0b3IpLgorCitZb3UganVzdCBuZWVkIHRvIHNvbGRlciBhIFVTQiBjb25uZWN0b3Igb250byB0aGUgY2FibGUgYW5kIGtlZXAgdGhlCit5ZWxsb3cgd2lyZSB1bmNvbm5lY3RlZC4gVGhlIG90aGVyIHBpbnMgaGF2ZSB0aGUgc2FtZSBvcmRlciBvbiBib3RoCitjb25uZWN0b3JzIHNvIHRoZXJlIGlzIG5vIG1hZ2ljIHRvIGl0LiBEZXRhaWxlZCBpbmZvIG9uIHRoZXNlIG1hdHRlcnMKK2NhbiBiZSBmb3VuZCBvbiB0aGUgbmV0IChbMV0sIFsyXSwgWzNdKS4KKworVGhhbmtzIHRvIHRoZSB0cmlwIHNwbGl0dGVyIGZvdW5kIG9uIHRoZSBjYWJsZSB5b3UgZG9uJ3QgZXZlbiBuZWVkIHRvIGN1dCB0aGUKK29yaWdpbmFsIG9uZS4gWW91IGNhbiBidXkgYW4gZXh0ZW5zaW9uIGNhYmxlIGFuZCBjdXQgdGhhdCBpbnN0ZWFkLiBUaGF0IHdheSwKK3lvdSBjYW4gc3RpbGwgdXNlIHRoZSBjb250cm9sbGVyIHdpdGggeW91ciBYLUJveCwgaWYgeW91IGhhdmUgb25lIDspCisKKworMi4gZHJpdmVyIGluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbmNlIHlvdSBoYXZlIHRoZSBhZGFwdGVyIGNhYmxlIGFuZCB0aGUgY29udHJvbGxlciBpcyBjb25uZWN0ZWQsIHlvdSBuZWVkCit0byBsb2FkIHlvdXIgVVNCIHN1YnN5c3RlbSBhbmQgc2hvdWxkIGNhdCAvcHJvYy9idXMvdXNiL2RldmljZXMuCitUaGVyZSBzaG91bGQgYmUgYW4gZW50cnkgbGlrZSB0aGUgb25lIGF0IHRoZSBlbmQgWzRdLgorCitDdXJyZW50bHkgKGFzIG9mIHZlcnNpb24gMC4wLjQpLCB0aGUgZm9sbG93aW5nIHRocmVlIGRldmljZXMgYXJlIGluY2x1ZGVkOgorIG9yaWdpbmFsIE1pY3Jvc29mdCBYQk9YIGNvbnRyb2xsZXIgKFVTKSwgdmVuZG9yPTB4MDQ1ZSwgcHJvZHVjdD0weDAyMDIKKyBvcmlnaW5hbCBNaWNyb3NvZnQgWEJPWCBjb250cm9sbGVyIChKYXBhbiksIHZlbmRvcj0weDA0NWUsIHByb2R1Y3Q9MHgwMjg1CisgSW50ZXJBY3QgUG93ZXJQYWQgUHJvIChHZXJtYW55KSwgdmVuZG9yPTB4MDVmZCwgcHJvZHVjdD0weDEwN2EKKworSWYgeW91IGhhdmUgYW5vdGhlciBjb250cm9sbGVyIHRoYXQgaXMgbm90IGxpc3RlZCBhYm92ZSBhbmQgaXMgbm90IHJlY29nbml6ZWQKK2J5IHRoZSBkcml2ZXIsIHBsZWFzZSBkcm9wIG1lIGEgbGluZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBpbmZvICh0aGF0IGlzLCBpbmNsdWRlCit0aGUgbmFtZSwgdmVuZG9yIGFuZCBwcm9kdWN0IElELCBhcyB3ZWxsIGFzIHRoZSBjb3VudHJ5IHdoZXJlIHlvdSBib3VnaHQgaXQ7CitzZW5kaW5nIHRoZSB3aG9sZSBkdW1wIG91dCBvZiAvcHJvYy9idXMvdXNiL2RldmljZXMgYWxvbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIpLgorCitJbiB0aGVvcnksIHRoZSBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBvdGhlciBjb250cm9sbGVycyB0aGFuIG1pbmUKKyhJbnRlckFjdCBQb3dlclBhZCBwcm8sIGJvdWdodCBpbiBHZXJtYW55KSBqdXN0IGZpbmUsIGJ1dCBJIGNhbm5vdCB0ZXN0IHRoaXMKK2ZvciBJIG9ubHkgaGF2ZSB0aGlzIG9uZSBjb250cm9sbGVyLgorCitJZiB5b3UgY29tcGlsZWQgYW5kIGluc3RhbGxlZCB0aGUgZHJpdmVyLCB0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5OgorPiBtb2Rwcm9iZSB4cGFkCis+IG1vZHByb2JlIGpveWRldgorPiBqc3Rlc3QgL2Rldi9qczAKKworVGhlcmUgc2hvdWxkIGJlIGEgc2luZ2xlIGxpbmUgc2hvd2luZyAxOCBpbnB1dHMgKDggYXhlcywgMTAgYnV0dG9ucyksIGFuZAoraXQncyB2YWx1ZXMgc2hvdWxkIGNoYW5nZSBpZiB5b3UgbW92ZSB0aGUgc3RpY2tzIGFuZCBwdXNoIHRoZSBidXR0b25zLgorCitJdCB3b3Jrcz8gVm9pbGEsIHlvdXIgZG9uZSA7KQorCisKKzMuIFRoYW5rcworLS0tLS0tLS0tCisKK0kgaGF2ZSB0byB0aGFuayBJVE8gVGFrYXl1a2kgZm9yIHRoZSBkZXRhaWxlZCBpbmZvIG9uIGhpcyBzaXRlCisgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sLgorIAorSGlzIHVzZWZ1bCBpbmZvIGFuZCBib3RoIHRoZSB1c2Itc2tlbGV0b24gYXMgd2VsbCBhcyB0aGUgaWZvcmNlIGlucHV0IGRyaXZlcgorKEdyZWcgS3JvYWgtSGFydG1hbm47IFZvanRlY2ggUGF2bGlrKSBoZWxwZWQgYSBsb3QgaW4gcmFwaWQgcHJvdG90eXBpbmcKK3RoZSBiYXNpYyBmdW5jdGlvbmFsaXR5LgorCisKKzQuIFJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0KKworMS4gaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sIChJVE8gVGFrYXl1a2kpCisyLiBodHRwOi8veHBhZC54Ym94LXNjZW5lLmNvbS8KKzMuIGh0dHA6Ly93d3cueGJveGhhY2t6LmNvbS9IYWNrei1SZWZlcmVuY2UuaHRtCisKKzQuIC9wcm9jL2J1cy91c2IvZGV2aWNlcyAtIGR1bXAgZnJvbSBJbnRlckFjdCBQb3dlclBhZCBQcm8gKEdlcm1hbnkpOgorCitUOiAgQnVzPTAxIExldj0wMyBQcm50PTA0IFBvcnQ9MDAgQ250PTAxIERldiM9ICA1IFNwZD0xMiAgTXhDaD0gMAorRDogIFZlcj0gMS4xMCBDbHM9MDAoPmlmYyApIFN1Yj0wMCBQcm90PTAwIE14UFM9MzIgI0NmZ3M9ICAxCitQOiAgVmVuZG9yPTA1ZmQgUHJvZElEPTEwN2EgUmV2PSAxLjAwCitDOiogI0lmcz0gMSBDZmcjPSAxIEF0cj04MCBNeFB3cj0xMDBtQQorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMiBDbHM9NTgodW5rLiApIFN1Yj00MiBQcm90PTAwIERyaXZlcj0obm9uZSkKK0U6ICBBZD04MShJKSBBdHI9MDMoSW50LikgTXhQUz0gIDMyIEl2bD0gMTBtcworRTogIEFkPTAyKE8pIEF0cj0wMyhJbnQuKSBNeFBTPSAgMzIgSXZsPSAxMG1zCisKKy0tIAorTWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0ei5kZT4KKzIwMDItMDctMTYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9fb3JkZXJpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9pb19vcmRlcmluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhYWU2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW9fb3JkZXJpbmcudHh0CkBAIC0wLDAgKzEsNDcgQEAKK09uIHNvbWUgcGxhdGZvcm1zLCBzby1jYWxsZWQgbWVtb3J5LW1hcHBlZCBJL08gaXMgd2Vha2x5IG9yZGVyZWQuICBPbiBzdWNoCitwbGF0Zm9ybXMsIGRyaXZlciB3cml0ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBJL08gd3JpdGVzIHRvCittZW1vcnktbWFwcGVkIGFkZHJlc3NlcyBvbiB0aGVpciBkZXZpY2UgYXJyaXZlIGluIHRoZSBvcmRlciBpbnRlbmRlZC4gIFRoaXMgaXMKK3R5cGljYWxseSBkb25lIGJ5IHJlYWRpbmcgYSAnc2FmZScgZGV2aWNlIG9yIGJyaWRnZSByZWdpc3RlciwgY2F1c2luZyB0aGUgSS9PCitjaGlwc2V0IHRvIGZsdXNoIHBlbmRpbmcgd3JpdGVzIHRvIHRoZSBkZXZpY2UgYmVmb3JlIGFueSByZWFkcyBhcmUgcG9zdGVkLiAgQQorZHJpdmVyIHdvdWxkIHVzdWFsbHkgdXNlIHRoaXMgdGVjaG5pcXVlIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBleGl0IG9mIGEKK2NyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSBwcm90ZWN0ZWQgYnkgc3BpbmxvY2tzLiAgVGhpcyB3b3VsZCBlbnN1cmUgdGhhdAorc3Vic2VxdWVudCB3cml0ZXMgdG8gSS9PIHNwYWNlIGFycml2ZWQgb25seSBhZnRlciBhbGwgcHJpb3Igd3JpdGVzIChtdWNoIGxpa2UgYQorbWVtb3J5IGJhcnJpZXIgb3AsIG1iKCksIG9ubHkgd2l0aCByZXNwZWN0IHRvIEkvTykuCisKK0EgbW9yZSBjb25jcmV0ZSBleGFtcGxlIGZyb20gYSBoeXBvdGhldGljYWwgZGV2aWNlIGRyaXZlcjoKKworICAgICAgICAuLi4KK0NQVSBBOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9sb2NrLCBmbGFncykKK0NQVSBBOiAgdmFsID0gcmVhZGwobXlfc3RhdHVzKTsKK0NQVSBBOiAgLi4uCitDUFUgQTogIHdyaXRlbChuZXd2YWwsIHJpbmdfcHRyKTsKK0NQVSBBOiAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2ssIGZsYWdzKQorICAgICAgICAuLi4KK0NQVSBCOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9sb2NrLCBmbGFncykKK0NQVSBCOiAgdmFsID0gcmVhZGwobXlfc3RhdHVzKTsKK0NQVSBCOiAgLi4uCitDUFUgQjogIHdyaXRlbChuZXd2YWwyLCByaW5nX3B0cik7CitDUFUgQjogIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9sb2NrLCBmbGFncykKKyAgICAgICAgLi4uCisKK0luIHRoZSBjYXNlIGFib3ZlLCB0aGUgZGV2aWNlIG1heSByZWNlaXZlIG5ld3ZhbDIgYmVmb3JlIGl0IHJlY2VpdmVzIG5ld3ZhbCwKK3doaWNoIGNvdWxkIGNhdXNlIHByb2JsZW1zLiAgRml4aW5nIGl0IGlzIGVhc3kgZW5vdWdoIHRob3VnaDoKKworICAgICAgICAuLi4KK0NQVSBBOiAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9sb2NrLCBmbGFncykKK0NQVSBBOiAgdmFsID0gcmVhZGwobXlfc3RhdHVzKTsKK0NQVSBBOiAgLi4uCitDUFUgQTogIHdyaXRlbChuZXd2YWwsIHJpbmdfcHRyKTsKK0NQVSBBOiAgKHZvaWQpcmVhZGwoc2FmZV9yZWdpc3Rlcik7IC8qIG1heWJlIGEgY29uZmlnIHJlZ2lzdGVyPyAqLworQ1BVIEE6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfbG9jaywgZmxhZ3MpCisgICAgICAgIC4uLgorQ1BVIEI6ICBzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X2xvY2ssIGZsYWdzKQorQ1BVIEI6ICB2YWwgPSByZWFkbChteV9zdGF0dXMpOworQ1BVIEI6ICAuLi4KK0NQVSBCOiAgd3JpdGVsKG5ld3ZhbDIsIHJpbmdfcHRyKTsKK0NQVSBCOiAgKHZvaWQpcmVhZGwoc2FmZV9yZWdpc3Rlcik7IC8qIG1heWJlIGEgY29uZmlnIHJlZ2lzdGVyPyAqLworQ1BVIEI6ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfbG9jaywgZmxhZ3MpCisKK0hlcmUsIHRoZSByZWFkcyBmcm9tIHNhZmVfcmVnaXN0ZXIgd2lsbCBjYXVzZSB0aGUgSS9PIGNoaXBzZXQgdG8gZmx1c2ggYW55CitwZW5kaW5nIHdyaXRlcyBiZWZvcmUgYWN0dWFsbHkgcG9zdGluZyB0aGUgcmVhZCB0byB0aGUgY2hpcHNldCwgcHJldmVudGluZworcG9zc2libGUgZGF0YSBjb3JydXB0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OWY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKQEAgLTAsMCArMSwxOTYgQEAKK0lvY3RsIE51bWJlcnMKKzE5IE9jdG9iZXIgMTk5OQorTWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4KKzxtZWNAc2hvdXQubmV0PgorCitJZiB5b3UgYXJlIGFkZGluZyBuZXcgaW9jdGwncyB0byB0aGUga2VybmVsLCB5b3Ugc2hvdWxkIHVzZSB0aGUgX0lPCittYWNyb3MgZGVmaW5lZCBpbiA8bGludXgvaW9jdGwuaD46CisKKyAgICBfSU8gICAgYW4gaW9jdGwgd2l0aCBubyBwYXJhbWV0ZXJzCisgICAgX0lPVyAgIGFuIGlvY3RsIHdpdGggd3JpdGUgcGFyYW1ldGVycyAoY29weV9mcm9tX3VzZXIpCisgICAgX0lPUiAgIGFuIGlvY3RsIHdpdGggcmVhZCBwYXJhbWV0ZXJzICAoY29weV90b191c2VyKQorICAgIF9JT1dSICBhbiBpb2N0bCB3aXRoIGJvdGggd3JpdGUgYW5kIHJlYWQgcGFyYW1ldGVycy4KKworJ1dyaXRlJyBhbmQgJ3JlYWQnIGFyZSBmcm9tIHRoZSB1c2VyJ3MgcG9pbnQgb2YgdmlldywganVzdCBsaWtlIHRoZQorc3lzdGVtIGNhbGxzICd3cml0ZScgYW5kICdyZWFkJy4gIEZvciBleGFtcGxlLCBhIFNFVF9GT08gaW9jdGwgd291bGQKK2JlIF9JT1csIGFsdGhvdWdoIHRoZSBrZXJuZWwgd291bGQgYWN0dWFsbHkgcmVhZCBkYXRhIGZyb20gdXNlciBzcGFjZTsKK2EgR0VUX0ZPTyBpb2N0bCB3b3VsZCBiZSBfSU9SLCBhbHRob3VnaCB0aGUga2VybmVsIHdvdWxkIGFjdHVhbGx5IHdyaXRlCitkYXRhIHRvIHVzZXIgc3BhY2UuCisKK1RoZSBmaXJzdCBhcmd1bWVudCB0byBfSU8sIF9JT1csIF9JT1IsIG9yIF9JT1dSIGlzIGFuIGlkZW50aWZ5aW5nIGxldHRlcgorb3IgbnVtYmVyIGZyb20gdGhlIHRhYmxlIGJlbG93LiAgQmVjYXVzZSBvZiB0aGUgbGFyZ2UgbnVtYmVyIG9mIGRyaXZlcnMsCittYW55IGRyaXZlcnMgc2hhcmUgYSBwYXJ0aWFsIGxldHRlciB3aXRoIG90aGVyIGRyaXZlcnMuCisKK0lmIHlvdSBhcmUgd3JpdGluZyBhIGRyaXZlciBmb3IgYSBuZXcgZGV2aWNlIGFuZCBuZWVkIGEgbGV0dGVyLCBwaWNrIGFuCit1bnVzZWQgYmxvY2sgd2l0aCBlbm91Z2ggcm9vbSBmb3IgZXhwYW5zaW9uOiAzMiB0byAyNTYgaW9jdGwgY29tbWFuZHMuCitZb3UgY2FuIHJlZ2lzdGVyIHRoZSBibG9jayBieSBwYXRjaGluZyB0aGlzIGZpbGUgYW5kIHN1Ym1pdHRpbmcgdGhlCitwYXRjaCB0byBMaW51cyBUb3J2YWxkcy4gIE9yIHlvdSBjYW4gZS1tYWlsIG1lIGF0IDxtZWNAc2hvdXQubmV0PiBhbmQKK0knbGwgcmVnaXN0ZXIgb25lIGZvciB5b3UuCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgdG8gX0lPLCBfSU9XLCBfSU9SLCBvciBfSU9XUiBpcyBhIHNlcXVlbmNlIG51bWJlcgordG8gZGlzdGluZ3Vpc2ggaW9jdGxzIGZyb20gZWFjaCBvdGhlci4gIFRoZSB0aGlyZCBhcmd1bWVudCB0byBfSU9XLAorX0lPUiwgb3IgX0lPV1IgaXMgdGhlIHR5cGUgb2YgdGhlIGRhdGEgZ29pbmcgaW50byB0aGUga2VybmVsIG9yIGNvbWluZworb3V0IG9mIHRoZSBrZXJuZWwgKGUuZy4gICdpbnQnIG9yICdzdHJ1Y3QgZm9vJykuICBOT1RFISAgRG8gTk9UIHVzZQorc2l6ZW9mKGFyZykgYXMgdGhlIHRoaXJkIGFyZ3VtZW50IGFzIHRoaXMgcmVzdWx0cyBpbiB5b3VyIGlvY3RsIHRoaW5raW5nCitpdCBwYXNzZXMgYW4gYXJndW1lbnQgb2YgdHlwZSBzaXplX3QuCisKK1NvbWUgZGV2aWNlcyB1c2UgdGhlaXIgbWFqb3IgbnVtYmVyIGFzIHRoZSBpZGVudGlmaWVyOyB0aGlzIGlzIE9LLCBhcworbG9uZyBhcyBpdCBpcyB1bmlxdWUuICBTb21lIGRldmljZXMgYXJlIGlycmVndWxhciBhbmQgZG9uJ3QgZm9sbG93IGFueQorY29udmVudGlvbiBhdCBhbGwuCisKK0ZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb24gaXMgZ29vZCBiZWNhdXNlOgorCisoMSkgS2VlcGluZyB0aGUgaW9jdGwncyBnbG9iYWxseSB1bmlxdWUgaGVscHMgZXJyb3IgY2hlY2tpbmc6CisgICAgaWYgYSBwcm9ncmFtIGNhbGxzIGFuIGlvY3RsIG9uIHRoZSB3cm9uZyBkZXZpY2UsIGl0IHdpbGwgZ2V0IGFuCisgICAgZXJyb3IgcmF0aGVyIHRoYW4gc29tZSB1bmV4cGVjdGVkIGJlaGF2aW91ci4KKworKDIpIFRoZSAnc3RyYWNlJyBidWlsZCBwcm9jZWR1cmUgYXV0b21hdGljYWxseSBmaW5kcyBpb2N0bCBudW1iZXJzCisgICAgZGVmaW5lZCB3aXRoIF9JTywgX0lPVywgX0lPUiwgb3IgX0lPV1IuCisKKygzKSAnc3RyYWNlJyBjYW4gZGVjb2RlIG51bWJlcnMgYmFjayBpbnRvIHVzZWZ1bCBuYW1lcyB3aGVuIHRoZQorICAgIG51bWJlcnMgYXJlIHVuaXF1ZS4KKworKDQpIFBlb3BsZSBsb29raW5nIGZvciBpb2N0bHMgY2FuIGdyZXAgZm9yIHRoZW0gbW9yZSBlYXNpbHkgd2hlbgorICAgIHRoaXMgY29udmVudGlvbiBpcyB1c2VkIHRvIGRlZmluZSB0aGUgaW9jdGwgbnVtYmVycy4KKworKDUpIFdoZW4gZm9sbG93aW5nIHRoZSBjb252ZW50aW9uLCB0aGUgZHJpdmVyIGNvZGUgY2FuIHVzZSBnZW5lcmljCisgICAgY29kZSB0byBjb3B5IHRoZSBwYXJhbWV0ZXJzIGJldHdlZW4gdXNlciBhbmQga2VybmVsIHNwYWNlLgorCitUaGlzIHRhYmxlIGxpc3RzIGlvY3RscyB2aXNpYmxlIGZyb20gdXNlciBsYW5kIGZvciBMaW51eC9pMzg2LiAgSXQgY29udGFpbnMKK21vc3QgZHJpdmVycyB1cCB0byAyLjMuMTQsIGJ1dCBJIGtub3cgSSBhbSBtaXNzaW5nIHNvbWUuCisKK0NvZGUJU2VxIwlJbmNsdWRlIEZpbGUJCUNvbW1lbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMHgwMAkwMC0xRglsaW51eC9mcy5oCQljb25mbGljdCEKKzB4MDAJMDAtMUYJc2NzaS9zY3NpX2lvY3RsLmgJY29uZmxpY3QhCisweDAwCTAwLTFGCWxpbnV4L2ZiLmgJCWNvbmZsaWN0IQorMHgwMAkwMC0xRglsaW51eC93YXZlZnJvbnQuaAljb25mbGljdCEKKzB4MDIJYWxsCWxpbnV4L2ZkLmgKKzB4MDMJYWxsCWxpbnV4L2hkcmVnLmgKKzB4MDQJYWxsCWxpbnV4L3Vtc2Rvc19mcy5oCisweDA2CWFsbAlsaW51eC9scC5oCisweDA5CWFsbAlsaW51eC9tZC5oCisweDEyCWFsbAlsaW51eC9mcy5oCisJCWxpbnV4L2Jsa3BnLmgKKzB4MWIJYWxsCUluZmluaUJhbmQgU3Vic3lzdGVtCTxodHRwOi8vd3d3Lm9wZW5pYi5vcmcvPgorMHgyMAlhbGwJZHJpdmVycy9jZHJvbS9jbTIwNi5oCisweDIyCWFsbAlzY3NpL3NnLmgKKycjJwkwMC0zRglJRUVFIDEzOTQgU3Vic3lzdGVtCUJsb2NrIGZvciB0aGUgZW50aXJlIHN1YnN5c3RlbQorJzEnCTAwLTFGCTxsaW51eC90aW1lcHBzLmg+CVBQUyBraXQgZnJvbSBVbHJpY2ggV2luZGwKKwkJCQkJPGZ0cDovL2Z0cC5kZS5rZXJuZWwub3JnL3B1Yi9saW51eC9kYWVtb25zL250cC9QUFMvPgorJzYnCTAwLTEwCTxhc20taTM4Ni9wcm9jZXNzb3IuaD4JSW50ZWwgSUEzMiBtaWNyb2NvZGUgdXBkYXRlIGRyaXZlcgorCQkJCQk8bWFpbHRvOnRpZ3JhbkB2ZXJpdGFzLmNvbT4KKyc4JwlhbGwJCQkJU05QODAyMyBhZHZhbmNlZCBOSUMgY2FyZAorCQkJCQk8bWFpbHRvOm1jckBzb2xpZHVtLmNvbT4KKydBJwkwMC0xRglsaW51eC9hcG1fYmlvcy5oCisnQicJQzAtRkYJCQkJYWR2YW5jZWQgYmJ1cworCQkJCQk8bWFpbHRvOm1hYXNzZW5AdW5pLWZyZWlidXJnLmRlPgorJ0MnCWFsbAlsaW51eC9zb3VuZGNhcmQuaAorJ0QnCWFsbAlhc20tczM5MC9kYXNkLmgKKydGJwlhbGwJbGludXgvZmIuaAorJ0knCWFsbAlsaW51eC9pc2RuLmgKKydKJwkwMC0xRglkcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCisnSycJYWxsCWxpbnV4L2tkLmgKKydMJwkwMC0xRglsaW51eC9sb29wLmgKKydMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKKwkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgorJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaAljb25mbGljdCEKKydNJwkwMC0xRglsaW51eC9pc2ljb20uaAkJY29uZmxpY3QhCisnTicJMDAtMUYJZHJpdmVycy91c2Ivc2Nhbm5lci5oCisnUCcJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCisnUScJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCisnUicJMDAtMUYJbGludXgvcmFuZG9tLmgKKydTJwlhbGwJbGludXgvY2Ryb20uaAkJY29uZmxpY3QhCisnUycJODAtODEJc2NzaS9zY3NpX2lvY3RsLmgJY29uZmxpY3QhCisnUycJODItRkYJc2NzaS9zY3NpLmgJCWNvbmZsaWN0IQorJ1QnCWFsbAlsaW51eC9zb3VuZGNhcmQuaAljb25mbGljdCEKKydUJwlhbGwJYXNtLWkzODYvaW9jdGxzLmgJY29uZmxpY3QhCisnVScJMDAtRUYJbGludXgvZHJpdmVycy91c2IvdXNiLmgKKydVJwlGMC1GRglkcml2ZXJzL3VzYi9hdWVyc3dhbGQuYworJ1YnCWFsbAlsaW51eC92dC5oCisnVycJMDAtMUYJbGludXgvd2F0Y2hkb2cuaAljb25mbGljdCEKKydXJwkwMC0xRglsaW51eC93YW5yb3V0ZXIuaAljb25mbGljdCEKKydYJwlhbGwJbGludXgveGZzX2ZzLmgKKydZJwlhbGwJbGludXgvY3ljbGFkZXMuaAorJ2EnCWFsbAkJCQlBVE0gb24gbGludXgKKwkJCQkJPGh0dHA6Ly9scmN3d3cuZXBmbC5jaC9saW51eC1hdG0vbWFnaWMuaHRtbD4KKydiJwkwMC1GRgkJCQliaXQzIHZtZSBob3N0IGJyaWRnZQorCQkJCQk8bWFpbHRvOm5hdGFsaWFAbmlraGVmay5uaWtoZWYubmw+CisnYycJMDAtN0YJbGludXgvY29tc3RhdHMuaAljb25mbGljdCEKKydjJwkwMC03RglsaW51eC9jb2RhLmgJCWNvbmZsaWN0IQorJ2QnCTAwLUZGCWxpbnV4L2NoYXIvZHJtL2RybS9oCWNvbmZsaWN0IQorJ2QnCTAwLTFGCWxpbnV4L2RldmZzX2ZzLmgJY29uZmxpY3QhCisnZCcJMDAtREYJbGludXgvdmlkZW9fZGVjb2Rlci5oCWNvbmZsaWN0IQorJ2QnCUYwLUZGCWxpbnV4L2RpZ2kxLmgKKydlJwlhbGwJbGludXgvZGlnaTEuaAkJY29uZmxpY3QhCisnZScJMDAtMUYJbGludXgvdmlkZW9fZW5jb2Rlci5oCWNvbmZsaWN0IQorJ2UnCTAwLTFGCW5ldC9pcmRhL2lydHR5LmgJY29uZmxpY3QhCisnZicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCisnaCcJMDAtN0YJCQkJQ2hhcm9uIGZpbGVzeXN0ZW0KKwkJCQkJPG1haWx0bzp6YXBtYW5AaW50ZXJsYW4ubmV0PgorJ2knCTAwLTNGCWxpbnV4L2kyby5oCisnaicJMDAtM0YJbGludXgvam95c3RpY2suaAorJ2snCWFsbAlhc20tc3BhcmMva2Jpby5oCisJCWFzbS1zcGFyYzY0L2tiaW8uaAorJ2wnCTAwLTNGCWxpbnV4L3RjZnNfZnMuaAkJdHJhbnNwYXJlbnQgY3J5cHRvZ3JhcGhpYyBmaWxlIHN5c3RlbQorCQkJCQk8aHR0cDovL21pa29ub3MuZGlhLnVuaXNhLml0L3RjZnM+CisnbCcJNDAtN0YJbGludXgvdWRmX2ZzX2kuaAlpbiBkZXZlbG9wbWVudDoKKwkJCQkJPGh0dHA6Ly93d3cudHJ5bGludXguY29tL3Byb2plY3RzL3VkZi8+CisnbScJYWxsCWxpbnV4L210aW8uaAkJY29uZmxpY3QhCisnbScJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCWNvbmZsaWN0IQorJ20nCWFsbAlsaW51eC9zeW5jbGluay5oCWNvbmZsaWN0IQorJ20nCTAwLTFGCW5ldC9pcmRhL2lybW9kLmgJY29uZmxpY3QhCisnbicJMDAtN0YJbGludXgvbmNwX2ZzLmgKKyduJwlFMC1GRgl2aWRlby9tYXRyb3guaCAgICAgICAgICBtYXRyb3hmYgorJ3AnCTAwLTNGCWxpbnV4L21jMTQ2ODE4cnRjLmgKKydwJwk0MC03RglsaW51eC9udnJhbS5oCisncCcJODAtOUYJCQkJdXNlci1zcGFjZSBwYXJwb3J0CisJCQkJCTxtYWlsdG86dGltQGN5YmVyZWxrLm5ldD4KKydxJwkwMC0xRglsaW51eC9zZXJpby5oCisncScJODAtRkYJCQkJSW50ZXJuZXQgUGhvbmVKQUNLLCBJbnRlcm5ldCBMaW5lSkFDSworCQkJCQk8aHR0cDovL3d3dy5xdWlja25ldC5uZXQ+CisncicJMDAtMUYJbGludXgvbXNkb3NfZnMuaAorJ3MnCWFsbAlsaW51eC9jZGsuaAorJ3QnCTAwLTdGCWxpbnV4L2lmX3BwcC5oCisndCcJODAtOEYJbGludXgvaXNkbl9wcHAuaAorJ3UnCTAwLTFGCWxpbnV4L3NtYl9mcy5oCisndicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCQljb25mbGljdCEKKyd2JwlhbGwJbGludXgvdmlkZW9kZXYuaAljb25mbGljdCEKKyd3JwlhbGwJCQkJQ0VSTiBTQ0kgZHJpdmVyCisneScJMDAtMUYJCQkJcGFja2V0IGJhc2VkIHVzZXIgbGV2ZWwgY29tbXVuaWNhdGlvbnMKKwkJCQkJPG1haWx0bzp6YXBtYW5AaW50ZXJsYW4ubmV0PgorJ3onCTAwLTNGCQkJCUNBTiBidXMgY2FyZAorCQkJCQk8bWFpbHRvOmhkc3RpY2hAY29ubmVjdHUudWxtLmNpcmN1bGFyLmRlPgorJ3onCTQwLTdGCQkJCUNBTiBidXMgY2FyZAorCQkJCQk8bWFpbHRvOm9lQHBvcnQuZGU+CisweDgwCTAwLTFGCWxpbnV4L2ZiLmgKKzB4ODEJMDAtMUYJbGludXgvdmlkZW90ZXh0LmgKKzB4ODkJMDAtMDYJYXNtLWkzODYvc29ja2lvcy5oCisweDg5CTBCLURGCWxpbnV4L3NvY2tpb3MuaAorMHg4OQlFMC1FRglsaW51eC9zb2NraW9zLmgJCVNJT0NQUk9UT1BSSVZBVEUgcmFuZ2UKKzB4ODkJRjAtRkYJbGludXgvc29ja2lvcy5oCQlTSU9DREVWUFJJVkFURSByYW5nZQorMHg4QglhbGwJbGludXgvd2lyZWxlc3MuaAorMHg4QwkwMC0zRgkJCQlXaU5SQURpTyBkcml2ZXIKKwkJCQkJPGh0dHA6Ly93d3cucHJveGltaXR5LmNvbS5hdS9+YnJpYW4vd2lucmFkaW8vPgorMHg5MAkwMAlkcml2ZXJzL2Nkcm9tL3NicGNkLmgKKzB4OTMJNjAtN0YJbGludXgvYXV0b19mcy5oCisweDk5CTAwLTBGCQkJCTUzNy1BZGRpbmJvYXJkIGRyaXZlcgorCQkJCQk8bWFpbHRvOmJ1a0BidWtzLmlwbi5kZT4KKzB4QTAJYWxsCWxpbnV4L3NkcC9zZHAuaAkJSW5kdXN0cmlhbCBEZXZpY2UgUHJvamVjdAorCQkJCQk8bWFpbHRvOmtlbmppQGJpdGdhdGUuY29tPgorMHhBMwk4MC04RglQb3J0IEFDTAkJaW4gZGV2ZWxvcG1lbnQ6CisJCQkJCTxtYWlsdG86dGxld2lzQG1pbmRzcHJpbmcuY29tPgorMHhBMwk5MC05RglsaW51eC9kdGxrLmgKKzB4QUIJMDAtMUYJbGludXgvbmJkLmgKKzB4QUMJMDAtMUYJbGludXgvcmF3LmgKKzB4QUQJMDAJTmV0ZmlsdGVyIGRldmljZQlpbiBkZXZlbG9wbWVudDoKKwkJCQkJPG1haWx0bzpydXN0eUBydXN0Y29ycC5jb20uYXU+CQorMHhCMAlhbGwJUkFUSU8gZGV2aWNlcwkJaW4gZGV2ZWxvcG1lbnQ6CisJCQkJCTxtYWlsdG86dmdvQHJhdGlvLmRlPgorMHhCMQkwMC0xRglQUFBvWAkJCTxtYWlsdG86bW9zdHJvd3NAc3R5eC51d2F0ZXJsb28uY2E+CisweENCCTAwLTFGCUNCTSBzZXJpYWwgSUVDIGJ1cwlpbiBkZXZlbG9wbWVudDoKKwkJCQkJPG1haWx0bzptaWNoYWVsLmtsZWluQHB1ZmZpbi5sYi5zaHV0dGxlLmRlPgorMHhERAkwMC0zRglaRkNQIGRldmljZSBkcml2ZXIJc2VlIGRyaXZlcnMvczM5MC9zY3NpLworCQkJCQk8bWFpbHRvOmFoZXJybWFuQGRlLmlibS5jb20+CisweEYzCTAwLTNGCXZpZGVvL3Npc2ZiLmgJCXNpc2ZiIChpbiBkZXZlbG9wbWVudCkKKwkJCQkJPG1haWx0bzp0aG9tYXNAd2luaXNjaGhvZmVyLm5ldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvY2Ryb20udHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9jZHJvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjZGNjNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW9jdGwvY2Ryb20udHh0CkBAIC0wLDAgKzEsOTY2IEBACisJCVN1bW1hcnkgb2YgQ0RST00gaW9jdGwgY2FsbHMuCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCQlFZHdhcmQgQS4gRmFsayA8ZWZhbGtAZ29vZ2xlLmNvbT4KKworCQlOb3ZlbWJlciwgMjAwNAorCitUaGlzIGRvY3VtZW50IGF0dGVtcHRzIHRvIGRlc2NyaWJlIHRoZSBpb2N0bCgyKSBjYWxscyBzdXBwb3J0ZWQgYnkKK3RoZSBDRFJPTSBsYXllci4gIFRoZXNlIGFyZSBieS1hbmQtbGFyZ2UgaW1wbGVtZW50ZWQgKGFzIG9mIExpbnV4IDIuNikKK2luIGRyaXZlcnMvY2Ryb20vY2Ryb20uYyBhbmQgZHJpdmVycy9ibG9jay9zY3NpX2lvY3RsLmMKKworaW9jdGwgdmFsdWVzIGFyZSBsaXN0ZWQgaW4gPGxpbnV4L2Nkcm9tLmg+LiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGV5CithcmUgYXMgZm9sbG93czoKKworCUNEUk9NUEFVU0UJCVBhdXNlIEF1ZGlvIE9wZXJhdGlvbgorCUNEUk9NUkVTVU1FCQlSZXN1bWUgcGF1c2VkIEF1ZGlvIE9wZXJhdGlvbgorCUNEUk9NUExBWU1TRgkJUGxheSBBdWRpbyBNU0YgKHN0cnVjdCBjZHJvbV9tc2YpCisJQ0RST01QTEFZVFJLSU5ECQlQbGF5IEF1ZGlvIFRyYWNrL2luZGV4IChzdHJ1Y3QgY2Ryb21fdGkpCisJQ0RST01SRUFEVE9DSERSCQlSZWFkIFRPQyBoZWFkZXIgKHN0cnVjdCBjZHJvbV90b2NoZHIpCisJQ0RST01SRUFEVE9DRU5UUlkJUmVhZCBUT0MgZW50cnkgKHN0cnVjdCBjZHJvbV90b2NlbnRyeSkKKwlDRFJPTVNUT1AJCVN0b3AgdGhlIGNkcm9tIGRyaXZlCisJQ0RST01TVEFSVAkJU3RhcnQgdGhlIGNkcm9tIGRyaXZlCisJQ0RST01FSkVDVAkJRWplY3RzIHRoZSBjZHJvbSBtZWRpYQorCUNEUk9NVk9MQ1RSTAkJQ29udHJvbCBvdXRwdXQgdm9sdW1lIChzdHJ1Y3QgY2Ryb21fdm9sY3RybCkKKwlDRFJPTVNVQkNITkwJCVJlYWQgc3ViY2hhbm5lbCBkYXRhIChzdHJ1Y3QgY2Ryb21fc3ViY2hubCkKKwlDRFJPTVJFQURNT0RFMgkJUmVhZCBDRFJPTSBtb2RlIDIgZGF0YSAoMjMzNiBCeXRlcykKKwkJCQkJICAgKHN0cnVjdCBjZHJvbV9yZWFkKQorCUNEUk9NUkVBRE1PREUxCQlSZWFkIENEUk9NIG1vZGUgMSBkYXRhICgyMDQ4IEJ5dGVzKQorCQkJCQkgICAoc3RydWN0IGNkcm9tX3JlYWQpCisJQ0RST01SRUFEQVVESU8JCShzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbykKKwlDRFJPTUVKRUNUX1NXCQllbmFibGUoMSkvZGlzYWJsZSgwKSBhdXRvLWVqZWN0aW5nCisJQ0RST01NVUxUSVNFU1NJT04JT2J0YWluIHRoZSBzdGFydC1vZi1sYXN0LXNlc3Npb24KKwkJCQkgIGFkZHJlc3Mgb2YgbXVsdGkgc2Vzc2lvbiBkaXNrcworCQkJCSAgKHN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24pCisJQ0RST01fR0VUX01DTgkJT2J0YWluIHRoZSAiVW5pdmVyc2FsIFByb2R1Y3QgQ29kZSIKKwkJCQkgICBpZiBhdmFpbGFibGUgKHN0cnVjdCBjZHJvbV9tY24pCisJQ0RST01fR0VUX1VQQwkJRGVwcmVjYXRlZCwgdXNlIENEUk9NX0dFVF9NQ04gaW5zdGVhZC4KKwlDRFJPTVJFU0VUCQloYXJkLXJlc2V0IHRoZSBkcml2ZQorCUNEUk9NVk9MUkVBRAkJR2V0IHRoZSBkcml2ZSdzIHZvbHVtZSBzZXR0aW5nCisJCQkJCSAgKHN0cnVjdCBjZHJvbV92b2xjdHJsKQorCUNEUk9NUkVBRFJBVwkJcmVhZCBkYXRhIGluIHJhdyBtb2RlICgyMzUyIEJ5dGVzKQorCQkJCQkgICAoc3RydWN0IGNkcm9tX3JlYWQpCisJQ0RST01SRUFEQ09PS0VECQlyZWFkIGRhdGEgaW4gY29va2VkIG1vZGUKKwlDRFJPTVNFRUsJCXNlZWsgbXNmIGFkZHJlc3MKKwlDRFJPTVBMQVlCTEsJCXNjc2ktY2Qgb25seSwgKHN0cnVjdCBjZHJvbV9ibGspCisJQ0RST01SRUFEQUxMCQlyZWFkIGFsbCAyNjQ2IGJ5dGVzCisJQ0RST01HRVRTUElORE9XTglyZXR1cm4gNC1iaXQgc3BpbmRvd24gdmFsdWUKKwlDRFJPTVNFVFNQSU5ET1dOCXNldCA0LWJpdCBzcGluZG93biB2YWx1ZQorCUNEUk9NQ0xPU0VUUkFZCQlwZW5kYW50IG9mIENEUk9NRUpFQ1QKKwlDRFJPTV9TRVRfT1BUSU9OUwlTZXQgYmVoYXZpb3Igb3B0aW9ucworCUNEUk9NX0NMRUFSX09QVElPTlMJQ2xlYXIgYmVoYXZpb3Igb3B0aW9ucworCUNEUk9NX1NFTEVDVF9TUEVFRAlTZXQgdGhlIENELVJPTSBzcGVlZAorCUNEUk9NX1NFTEVDVF9ESVNDCVNlbGVjdCBkaXNjIChmb3IganVrZS1ib3hlcykKKwlDRFJPTV9NRURJQV9DSEFOR0VECUNoZWNrIGlzIG1lZGlhIGNoYW5nZWQKKwlDRFJPTV9EUklWRV9TVEFUVVMJR2V0IHRyYXkgcG9zaXRpb24sIGV0Yy4KKwlDRFJPTV9ESVNDX1NUQVRVUwlHZXQgZGlzYyB0eXBlLCBldGMuCisJQ0RST01fQ0hBTkdFUl9OU0xPVFMJR2V0IG51bWJlciBvZiBzbG90cworCUNEUk9NX0xPQ0tET09SCQlsb2NrIG9yIHVubG9jayBkb29yCisJQ0RST01fREVCVUcJCVR1cm4gZGVidWcgbWVzc2FnZXMgb24vb2ZmCisJQ0RST01fR0VUX0NBUEFCSUxJVFkJZ2V0IGNhcGFiaWxpdGllcworCUNEUk9NQVVESU9CVUZTSVoJc2V0IHRoZSBhdWRpbyBidWZmZXIgc2l6ZQorCURWRF9SRUFEX1NUUlVDVAkJUmVhZCBzdHJ1Y3R1cmUKKwlEVkRfV1JJVEVfU1RSVUNUCVdyaXRlIHN0cnVjdHVyZQorCURWRF9BVVRICQlBdXRoZW50aWNhdGlvbgorCUNEUk9NX1NFTkRfUEFDS0VUCXNlbmQgYSBwYWNrZXQgdG8gdGhlIGRyaXZlCisJQ0RST01fTkVYVF9XUklUQUJMRQlnZXQgbmV4dCB3cml0YWJsZSBibG9jaworCUNEUk9NX0xBU1RfV1JJVFRFTglnZXQgbGFzdCBibG9jayB3cml0dGVuIG9uIGRpc2MKKworCitUaGUgaW5mb3JtYXRpb24gdGhhdCBmb2xsb3dzIHdhcyBkZXRlcm1pbmVkIGZyb20gcmVhZGluZyBrZXJuZWwgc291cmNlCitjb2RlLiAgSXQgaXMgbGlrZWx5IHRoYXQgc29tZSBjb3JyZWN0aW9ucyB3aWxsIGJlIG1hZGUgb3ZlciB0aW1lLgorCisKKworCisKKworCitHZW5lcmFsOgorCisJVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCBpb2N0bCBjYWxscyByZXR1cm4gMCBvbiBzdWNjZXNzCisJYW5kIC0xIHdpdGggZXJybm8gc2V0IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIG9uIGVycm9yLiAgKFNvbWUKKwlpb2N0bHMgcmV0dXJuIG5vbi1uZWdhdGl2ZSBkYXRhIHZhbHVlcy4pCisKKwlVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIGlvY3RsIGNhbGxzIHJldHVybiAtMSBhbmQgc2V0CisJZXJybm8gdG8gRUZBVUxUIG9uIGEgZmFpbGVkIGF0dGVtcHQgdG8gY29weSBkYXRhIHRvIG9yIGZyb20gdXNlcgorCWFkZHJlc3Mgc3BhY2UuCisKKwlJbmRpdmlkdWFsIGRyaXZlcnMgbWF5IHJldHVybiBlcnJvciBjb2RlcyBub3QgbGlzdGVkIGhlcmUuCisKKwlVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzCisJYXJlIGRlZmluZWQgaW4gPGxpbnV4L2Nkcm9tLmg+CisKKworCisKK0NEUk9NUEFVU0UJCQlQYXVzZSBBdWRpbyBPcGVyYXRpb24KKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01QQVVTRSwgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisKKworQ0RST01SRVNVTUUJCQlSZXN1bWUgcGF1c2VkIEF1ZGlvIE9wZXJhdGlvbgorCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTVJFU1VNRSwgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisKKworQ0RST01QTEFZTVNGCQkJUGxheSBBdWRpbyBNU0YgKHN0cnVjdCBjZHJvbV9tc2YpCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX21zZiBtc2Y7CisJICBpb2N0bChmZCwgQ0RST01QTEFZTVNGLCAmbXNmKTsKKworCWlucHV0czoKKwkgIGNkcm9tX21zZiBzdHJ1Y3R1cmUsIGRlc2NyaWJpbmcgYSBzZWdtZW50IG9mIG11c2ljIHRvIHBsYXkKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKworCW5vdGVzOgorCSAgTVNGIHN0YW5kcyBmb3IgbWludXRlcy1zZWNvbmRzLWZyYW1lcworCSAgTEJBIHN0YW5kcyBmb3IgbG9naWNhbCBibG9jayBhZGRyZXNzCisKKwkgIFNlZ21lbnQgaXMgZGVzY3JpYmVkIGFzIHN0YXJ0IGFuZCBlbmQgdGltZXMsIHdoZXJlIGVhY2ggdGltZQorCSAgaXMgZGVzY3JpYmVkIGFzIG1pbnV0ZXM6c2Vjb25kczpmcmFtZXMuICBBIGZyYW1lIGlzIDEvNzUgb2YKKwkgIGEgc2Vjb25kLgorCisKK0NEUk9NUExBWVRSS0lORAkJCVBsYXkgQXVkaW8gVHJhY2svaW5kZXggKHN0cnVjdCBjZHJvbV90aSkKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fdGkgdGk7CisJICBpb2N0bChmZCwgQ0RST01QTEFZVFJLSU5ELCAmdGkpOworCisJaW5wdXRzOgorCSAgY2Ryb21fdGkgc3RydWN0dXJlLCBkZXNjcmliaW5nIGEgc2VnbWVudCBvZiBtdXNpYyB0byBwbGF5CisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisKKwlub3RlczoKKwkgIFNlZ21lbnQgaXMgZGVzY3JpYmVkIGFzIHN0YXJ0IGFuZCBlbmQgdGltZXMsIHdoZXJlIGVhY2ggdGltZQorCSAgaXMgZGVzY3JpYmVkIGFzIGEgdHJhY2sgYW5kIGFuIGluZGV4LgorCisKKworQ0RST01SRUFEVE9DSERSCQkJUmVhZCBUT0MgaGVhZGVyIChzdHJ1Y3QgY2Ryb21fdG9jaGRyKQorCisJdXNhZ2U6CisKKwkgIGNkcm9tX3RvY2hkciBoZWFkZXI7CisJICBpb2N0bChmZCwgQ0RST01SRUFEVE9DSERSLCAmaGVhZGVyKTsKKworCWlucHV0czoKKwkgIGNkcm9tX3RvY2hkciBzdHJ1Y3R1cmUKKworCW91dHB1dHM6CisJICBjZHJvbV90b2NoZHIgc3RydWN0dXJlCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGF1ZGlvLWNhcGFibGUuCisKKworCitDRFJPTVJFQURUT0NFTlRSWQkJUmVhZCBUT0MgZW50cnkgKHN0cnVjdCBjZHJvbV90b2NlbnRyeSkKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fdG9jZW50cnkgZW50cnk7CisJICBpb2N0bChmZCwgQ0RST01SRUFEVE9DRU5UUlksICZlbnRyeSk7CisKKwlpbnB1dHM6CisJICBjZHJvbV90b2NlbnRyeSBzdHJ1Y3R1cmUKKworCW91dHB1dHM6CisJICBjZHJvbV90b2NlbnRyeSBzdHJ1Y3R1cmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKwkgIEVJTlZBTAllbnRyeS5jZHRlX2Zvcm1hdCBub3QgQ0RST01fTVNGIG9yIENEUk9NX0xCQQorCSAgRUlOVkFMCXJlcXVlc3RlZCB0cmFjayBvdXQgb2YgYm91bmRzCisJICBFSU8JCUkvTyBlcnJvciByZWFkaW5nIFRPQworCisJbm90ZXM6CisJICBUT0Mgc3RhbmRzIGZvciBUYWJsZSBPZiBDb250ZW50cworCSAgTVNGIHN0YW5kcyBmb3IgbWludXRlcy1zZWNvbmRzLWZyYW1lcworCSAgTEJBIHN0YW5kcyBmb3IgbG9naWNhbCBibG9jayBhZGRyZXNzCisKKworCitDRFJPTVNUT1AJCQlTdG9wIHRoZSBjZHJvbSBkcml2ZQorCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTVNUT1AsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisJbm90ZXM6CisJICBFeGFjdCBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGlvY3RsIGRlcGVuZHMgb24gdGhlIGRldmljZSwKKwkgIGJ1dCBtb3N0IHNlZW0gdG8gc3BpbiB0aGUgZHJpdmUgZG93bi4KKworCitDRFJPTVNUQVJUCQkJU3RhcnQgdGhlIGNkcm9tIGRyaXZlCisKKwl1c2FnZToKKworCSAgaW9jdGwoZmQsIENEUk9NU1RBUlQsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisJbm90ZXM6CisJICBFeGFjdCBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGlvY3RsIGRlcGVuZHMgb24gdGhlIGRldmljZSwKKwkgIGJ1dCBtb3N0IHNlZW0gdG8gc3BpbiB0aGUgZHJpdmUgdXAgYW5kL29yIGNsb3NlIHRoZSB0cmF5LgorCSAgT3RoZXIgZGV2aWNlcyBpZ25vcmUgdGhlIGlvY3RsIGNvbXBsZXRlbHkuCisKKworQ0RST01FSkVDVAkJCUVqZWN0cyB0aGUgY2Ryb20gbWVkaWEKKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01FSkVDVCwgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm5zOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBjYXBhYmxlIG9mIGVqZWN0aW5nCisJICBFQlVTWQkJb3RoZXIgcHJvY2Vzc2VzIGFyZSBhY2Nlc3NpbmcgZHJpdmUsIG9yIGRvb3IgaXMgbG9ja2VkCisKKwlub3RlczoKKwkgIFNlZSBDRFJPTV9MT0NLRE9PUiwgYmVsb3cuCisKKworCitDRFJPTUNMT1NFVFJBWQkJCXBlbmRhbnQgb2YgQ0RST01FSkVDVAorCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTUVKRUNULCAwKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybnM6CisJICBFTk9TWVMJY2QgZHJpdmUgbm90IGNhcGFibGUgb2YgZWplY3RpbmcKKwkgIEVCVVNZCQlvdGhlciBwcm9jZXNzZXMgYXJlIGFjY2Vzc2luZyBkcml2ZSwgb3IgZG9vciBpcyBsb2NrZWQKKworCW5vdGVzOgorCSAgU2VlIENEUk9NX0xPQ0tET09SLCBiZWxvdy4KKworCisKK0NEUk9NVk9MQ1RSTAkJCUNvbnRyb2wgb3V0cHV0IHZvbHVtZSAoc3RydWN0IGNkcm9tX3ZvbGN0cmwpCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX3ZvbGN0cmwgdm9sdW1lOworCSAgaW9jdGwoZmQsIENEUk9NVk9MQ1RSTCwgJnZvbHVtZSk7CisKKwlpbnB1dHM6CisJICBjZHJvbV92b2xjdHJsIHN0cnVjdHVyZSBjb250YWluaW5nIHZvbHVtZXMgZm9yIHVwIHRvIDQKKwkgIGNoYW5uZWxzLgorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCisKKworQ0RST01WT0xSRUFECQkJR2V0IHRoZSBkcml2ZSdzIHZvbHVtZSBzZXR0aW5nCisJCQkJCSAgKHN0cnVjdCBjZHJvbV92b2xjdHJsKQorCisJdXNhZ2U6CisKKwkgIHN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbHVtZTsKKwkgIGlvY3RsKGZkLCBDRFJPTVZPTFJFQUQsICZ2b2x1bWUpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSBjdXJyZW50IHZvbHVtZSBzZXR0aW5ncy4KKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwljZCBkcml2ZSBub3QgYXVkaW8tY2FwYWJsZS4KKworCisKK0NEUk9NU1VCQ0hOTAkJCVJlYWQgc3ViY2hhbm5lbCBkYXRhIChzdHJ1Y3QgY2Ryb21fc3ViY2hubCkKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fc3ViY2hubCBxOworCSAgaW9jdGwoZmQsIENEUk9NU1VCQ0hOTCwgJnEpOworCisJaW5wdXRzOgorCSAgY2Ryb21fc3ViY2hubCBzdHJ1Y3R1cmUKKworCW91dHB1dHM6CisJICBjZHJvbV9zdWJjaG5sIHN0cnVjdHVyZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PU1lTCWNkIGRyaXZlIG5vdCBhdWRpby1jYXBhYmxlLgorCSAgRUlOVkFMCWZvcm1hdCBub3QgQ0RST01fTVNGIG9yIENEUk9NX0xCQQorCisJbm90ZXM6CisJICBGb3JtYXQgaXMgY29udmVydGVkIHRvIENEUk9NX01TRiBvbiByZXR1cm4KKworCisKK0NEUk9NUkVBRFJBVwkJCXJlYWQgZGF0YSBpbiByYXcgbW9kZSAoMjM1MiBCeXRlcykKKwkJCQkJICAgKHN0cnVjdCBjZHJvbV9yZWFkKQorCisJdXNhZ2U6CisKKwkgIHVuaW9uIHsKKwkgICAgc3RydWN0IGNkcm9tX21zZiBtc2Y7CQkvKiBpbnB1dCAqLworCSAgICBjaGFyIGJ1ZmZlcltDRF9GUkFNRVNJWkVfUkFXXTsJLyogcmV0dXJuICovCisJICB9IGFyZzsKKwkgIGlvY3RsKGZkLCBDRFJPTVJFQURSQVcsICZhcmcpOworCisJaW5wdXRzOgorCSAgY2Ryb21fbXNmIHN0cnVjdHVyZSBpbmRpY2F0aW5nIGFuIGFkZHJlc3MgdG8gcmVhZC4KKwkgIE9ubHkgdGhlIHN0YXJ0IHZhbHVlcyBhcmUgc2lnbmlmaWNhbnQuCisKKwlvdXRwdXRzOgorCSAgRGF0YSB3cml0dGVuIHRvIGFkZHJlc3MgcHJvdmlkZWQgYnkgdXNlci4KKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAlhZGRyZXNzIGxlc3MgdGhhbiAwLCBvciBtc2YgbGVzcyB0aGFuIDA6MjowCisJICBFTk9NRU0Jb3V0IG9mIG1lbW9yeQorCisJbm90ZXM6CisJICBBcyBvZiAyLjYuOC4xLCBjb21tZW50cyBpbiA8bGludXgvY2Ryb20uaD4gaW5kaWNhdGUgdGhhdCB0aGlzCisJICBpb2N0bCBhY2NlcHRzIGEgY2Ryb21fcmVhZCBzdHJ1Y3R1cmUsIGJ1dCBhY3R1YWwgc291cmNlIGNvZGUKKwkgIHJlYWRzIGEgY2Ryb21fbXNmIHN0cnVjdHVyZSBhbmQgd3JpdGVzIGEgYnVmZmVyIG9mIGRhdGEgdG8KKwkgIHRoZSBzYW1lIGFkZHJlc3MuCisKKwkgIE1TRiB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBMQkEgdmFsdWVzIHZpYSB0aGlzIGZvcm11bGE6CisKKwkgICAgbGJhID0gKCgobSAqIENEX1NFQ1MpICsgcykgKiBDRF9GUkFNRVMgKyBmKSAtIENEX01TRl9PRkZTRVQ7CisKKworCisKK0NEUk9NUkVBRE1PREUxCQkJUmVhZCBDRFJPTSBtb2RlIDEgZGF0YSAoMjA0OCBCeXRlcykKKwkJCQkJICAgKHN0cnVjdCBjZHJvbV9yZWFkKQorCisJbm90ZXM6CisJICBJZGVudGljYWwgdG8gQ0RST01SRUFEUkFXIGV4Y2VwdCB0aGF0IGJsb2NrIHNpemUgaXMKKwkgIENEX0ZSQU1FU0laRSAoMjA0OCkgYnl0ZXMKKworCisKK0NEUk9NUkVBRE1PREUyCQkJUmVhZCBDRFJPTSBtb2RlIDIgZGF0YSAoMjMzNiBCeXRlcykKKwkJCQkJICAgKHN0cnVjdCBjZHJvbV9yZWFkKQorCisJbm90ZXM6CisJICBJZGVudGljYWwgdG8gQ0RST01SRUFEUkFXIGV4Y2VwdCB0aGF0IGJsb2NrIHNpemUgaXMKKwkgIENEX0ZSQU1FU0laRV9SQVcwICgyMzM2KSBieXRlcworCisKKworQ0RST01SRUFEQVVESU8JCQkoc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8pCisKKwl1c2FnZToKKworCSAgc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8gcmE7CisJICBpb2N0bChmZCwgQ0RST01SRUFEQVVESU8sICZyYSk7CisKKwlpbnB1dHM6CisJICBjZHJvbV9yZWFkX2F1ZGlvIHN0cnVjdHVyZSBjb250YWluaW5nIHJlYWQgc3RhcnQKKwkgIHBvaW50IGFuZCBsZW5ndGgKKworCW91dHB1dHM6CisJICBhdWRpbyBkYXRhLCByZXR1cm5lZCB0byBidWZmZXIgaW5kaWNhdGVkIGJ5IHJhCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJZm9ybWF0IG5vdCBDRFJPTV9NU0Ygb3IgQ0RST01fTEJBCisJICBFSU5WQUwJbmZyYW1lcyBub3QgaW4gcmFuZ2UgWzEgNzVdCisJICBFTlhJTwkJZHJpdmUgaGFzIG5vIHF1ZXVlIChwcm9iYWJseSBtZWFucyBpbnZhbGlkIGZkKQorCSAgRU5PTUVNCW91dCBvZiBtZW1vcnkKKworCitDRFJPTUVKRUNUX1NXCQkJZW5hYmxlKDEpL2Rpc2FibGUoMCkgYXV0by1lamVjdGluZworCisJdXNhZ2U6CisKKwkgIGludCB2YWw7CisJICBpb2N0bChmZCwgQ0RST01FSkVDVF9TVywgdmFsKTsKKworCWlucHV0czoKKwkgIEZsYWcgc3BlY2lmeWluZyBhdXRvLWVqZWN0IGZsYWcuCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJRHJpdmUgaXMgbm90IGNhcGFibGUgb2YgZWplY3RpbmcuCisJICBFQlVTWQkJRG9vciBpcyBsb2NrZWQKKworCisKKworQ0RST01NVUxUSVNFU1NJT04JCU9idGFpbiB0aGUgc3RhcnQtb2YtbGFzdC1zZXNzaW9uCisJCQkJICBhZGRyZXNzIG9mIG11bHRpIHNlc3Npb24gZGlza3MKKwkJCQkgIChzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uKQorCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uIG1zX2luZm87CisJICBpb2N0bChmZCwgQ0RST01NVUxUSVNFU1NJT04sICZtc19pbmZvKTsKKworCWlucHV0czoKKwkgIGNkcm9tX211bHRpc2Vzc2lvbiBzdHJ1Y3R1cmUgY29udGFpbmluZyBkZXNpcmVkCisJICBmb3JtYXQuCisKKwlvdXRwdXRzOgorCSAgY2Ryb21fbXVsdGlzZXNzaW9uIHN0cnVjdHVyZSBpcyBmaWxsZWQgd2l0aCBsYXN0X3Nlc3Npb24KKwkgIGluZm9ybWF0aW9uLgorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCWZvcm1hdCBub3QgQ0RST01fTVNGIG9yIENEUk9NX0xCQQorCisKK0NEUk9NX0dFVF9NQ04JCQlPYnRhaW4gdGhlICJVbml2ZXJzYWwgUHJvZHVjdCBDb2RlIgorCQkJCSAgIGlmIGF2YWlsYWJsZSAoc3RydWN0IGNkcm9tX21jbikKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fbWNuIG1jbjsKKwkgIGlvY3RsKGZkLCBDRFJPTV9HRVRfTUNOLCAmbWNuKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBVbml2ZXJzYWwgUHJvZHVjdCBDb2RlCisKKwllcnJvciByZXR1cm46CisJICBFTk9TWVMJRHJpdmUgaXMgbm90IGNhcGFibGUgb2YgcmVhZGluZyBNQ04gZGF0YS4KKworCW5vdGVzOgorCSAgU291cmNlIGNvZGUgY29tbWVudHMgc3RhdGU6CisKKwkgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCwgYWx0aG91Z2ggdmVyeSBmZXcKKwkgICAgYXVkaW8gZGlzY3MgZ2l2ZSBVbml2ZXJzYWwgUHJvZHVjdCBDb2RlIGluZm9ybWF0aW9uLCB3aGljaAorCSAgICBzaG91bGQganVzdCBiZSB0aGUgTWVkaXVtIENhdGFsb2cgTnVtYmVyIG9uIHRoZSBib3guICBOb3RlLAorCSAgICB0aGF0IHRoZSB3YXkgdGhlIGNvZGUgaXMgd3JpdHRlbiBvbiB0aGUgQ0QgaXMgL25vdC8gdW5pZm9ybQorCSAgICBhY3Jvc3MgYWxsIGRpc2NzIQorCisKKworCitDRFJPTV9HRVRfVVBDCQkJQ0RST01fR0VUX01DTiAgKGRlcHJlY2F0ZWQpCisKKwlOb3QgaW1wbGVtZW50ZWQsIGFzIG9mIDIuNi44LjEKKworCisKK0NEUk9NUkVTRVQJCQloYXJkLXJlc2V0IHRoZSBkcml2ZQorCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTVJFU0VULCAwKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRU5PU1lTCURyaXZlIGlzIG5vdCBjYXBhYmxlIG9mIHJlc2V0dGluZy4KKworCisKKworQ0RST01SRUFEQ09PS0VECQkJcmVhZCBkYXRhIGluIGNvb2tlZCBtb2RlCisKKwl1c2FnZToKKworCSAgdTggYnVmZmVyW0NEX0ZSQU1FU0laRV0KKwkgIGlvY3RsKGZkLCBDRFJPTVJFQURDT09LRUQsIGJ1ZmZlcik7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgMjA0OCBieXRlcyBvZiBkYXRhLCAiY29va2VkIiBtb2RlLgorCisJbm90ZXM6CisJICBOb3QgaW1wbGVtZW50ZWQgb24gYWxsIGRyaXZlcy4KKworCisKKworQ0RST01SRUFEQUxMCQkJcmVhZCBhbGwgMjY0NiBieXRlcworCisJU2FtZSBhcyBDRFJPTVJFQURDT09LRUQsIGJ1dCByZWFkcyAyNjQ2IGJ5dGVzLgorCisKKworQ0RST01TRUVLCQkJc2VlayBtc2YgYWRkcmVzcworCisJdXNhZ2U6CisKKwkgIHN0cnVjdCBjZHJvbV9tc2YgbXNmOworCSAgaW9jdGwoZmQsIENEUk9NU0VFSywgJm1zZik7CisKKwlpbnB1dHM6CisJICBNU0YgYWRkcmVzcyB0byBzZWVrIHRvLgorCisJb3V0cHV0czoJbm9uZQorCisKKworQ0RST01QTEFZQkxLCQkJc2NzaS1jZCBvbmx5LCAoc3RydWN0IGNkcm9tX2JsaykKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fYmxrIGJsazsKKwkgIGlvY3RsKGZkLCBDRFJPTVBMQVlCTEssICZibGspOworCisJaW5wdXRzOgorCSAgUmVnaW9uIHRvIHBsYXkKKworCW91dHB1dHM6CW5vbmUKKworCisKK0NEUk9NR0VUU1BJTkRPV04KKworCXVzYWdlOgorCisJICBjaGFyIHNwaW5kb3duOworCSAgaW9jdGwoZmQsIENEUk9NR0VUU1BJTkRPV04sICZzcGluZG93bik7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IDQtYml0IHNwaW5kb3duIHZhbHVlLgorCisKKworCitDRFJPTVNFVFNQSU5ET1dOCisKKwl1c2FnZToKKworCSAgY2hhciBzcGluZG93bgorCSAgaW9jdGwoZmQsIENEUk9NU0VUU1BJTkRPV04sICZzcGluZG93bik7CisKKwlpbnB1dHM6CisJICA0LWJpdCB2YWx1ZSB1c2VkIHRvIGNvbnRyb2wgc3BpbmRvd24gKFRPRE86IG1vcmUgZGV0YWlsIGhlcmUpCisKKwlvdXRwdXRzOglub25lCisKKworCisKKworQ0RST01fU0VUX09QVElPTlMJCVNldCBiZWhhdmlvciBvcHRpb25zCisKKwl1c2FnZToKKworCSAgaW50IG9wdGlvbnM7CisJICBpb2N0bChmZCwgQ0RST01fU0VUX09QVElPTlMsIG9wdGlvbnMpOworCisJaW5wdXRzOgorCSAgTmV3IHZhbHVlcyBmb3IgZHJpdmUgb3B0aW9ucy4gIFRoZSBsb2dpY2FsICdvcicgb2Y6CisJICAgIENET19BVVRPX0NMT1NFCWNsb3NlIHRyYXkgb24gZmlyc3Qgb3BlbigyKQorCSAgICBDRE9fQVVUT19FSkVDVAlvcGVuIHRyYXkgb24gbGFzdCByZWxlYXNlCisJICAgIENET19VU0VfRkZMQUdTCXVzZSBPX05PTkJMT0NLIGluZm9ybWF0aW9uIG9uIG9wZW4KKwkgICAgQ0RPX0xPQ0sJCWxvY2sgdHJheSBvbiBvcGVuIGZpbGVzCisJICAgIENET19DSEVDS19UWVBFCWNoZWNrIHR5cGUgb24gb3BlbiBmb3IgZGF0YQorCisJb3V0cHV0czoKKwkgIFJldHVybnMgdGhlIHJlc3VsdGluZyBvcHRpb25zIHNldHRpbmdzIGluIHRoZQorCSAgaW9jdGwgcmV0dXJuIHZhbHVlLiAgUmV0dXJucyAtMSBvbiBlcnJvci4KKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwlzZWxlY3RlZCBvcHRpb24ocykgbm90IHN1cHBvcnRlZCBieSBkcml2ZS4KKworCisKKworQ0RST01fQ0xFQVJfT1BUSU9OUwkJQ2xlYXIgYmVoYXZpb3Igb3B0aW9ucworCisJU2FtZSBhcyBDRFJPTV9TRVRfT1BUSU9OUywgZXhjZXB0IHRoYXQgc2VsZWN0ZWQgb3B0aW9ucyBhcmUKKwl0dXJuZWQgb2ZmLgorCisKKworQ0RST01fU0VMRUNUX1NQRUVECQlTZXQgdGhlIENELVJPTSBzcGVlZAorCisJdXNhZ2U6CisKKwkgIGludCBzcGVlZDsKKwkgIGlvY3RsKGZkLCBDRFJPTV9TRUxFQ1RfU1BFRUQsIHNwZWVkKTsKKworCWlucHV0czoKKwkgIE5ldyBkcml2ZSBzcGVlZC4KKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwlzcGVlZCBzZWxlY3Rpb24gbm90IHN1cHBvcnRlZCBieSBkcml2ZS4KKworCisKK0NEUk9NX1NFTEVDVF9ESVNDCQlTZWxlY3QgZGlzYyAoZm9yIGp1a2UtYm94ZXMpCisKKwl1c2FnZToKKworCSAgaW50IGRpc2s7CisJICBpb2N0bChmZCwgQ0RST01fU0VMRUNUX0RJU0MsIGRpc2spOworCisJaW5wdXRzOgorCSAgRGlzayB0byBsb2FkIGludG8gZHJpdmUuCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJRGlzayBudW1iZXIgYmV5b25kIGNhcGFjaXR5IG9mIGRyaXZlCisKKworCitDRFJPTV9NRURJQV9DSEFOR0VECQlDaGVjayBpcyBtZWRpYSBjaGFuZ2VkCisKKwl1c2FnZToKKworCSAgaW50IHNsb3Q7CisJICBpb2N0bChmZCwgQ0RST01fTUVESUFfQ0hBTkdFRCwgc2xvdCk7CisKKwlpbnB1dHM6CisJICBTbG90IG51bWJlciB0byBiZSB0ZXN0ZWQsIGFsd2F5cyB6ZXJvIGV4Y2VwdCBmb3IganVrZWJveGVzLgorCSAgTWF5IGFsc28gYmUgc3BlY2lhbCB2YWx1ZXMgQ0RTTF9OT05FIG9yIENEU0xfQ1VSUkVOVAorCisJb3V0cHV0czoKKwkgIElvY3RsIHJldHVybiB2YWx1ZSBpcyAwIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG1lZGlhCisJICBoYXMgYmVlbiBjaGFuZ2VkLCBvciAtMSBvbiBlcnJvci4KKworCWVycm9yIHJldHVybnM6CisJICBFTk9TWVMJRHJpdmUgY2FuJ3QgZGV0ZWN0IG1lZGlhIGNoYW5nZQorCSAgRUlOVkFMCVNsb3QgbnVtYmVyIGJleW9uZCBjYXBhY2l0eSBvZiBkcml2ZQorCSAgRU5PTUVNCU91dCBvZiBtZW1vcnkKKworCisKK0NEUk9NX0RSSVZFX1NUQVRVUwkJR2V0IHRyYXkgcG9zaXRpb24sIGV0Yy4KKworCXVzYWdlOgorCisJICBpbnQgc2xvdDsKKwkgIGlvY3RsKGZkLCBDRFJPTV9EUklWRV9TVEFUVVMsIHNsb3QpOworCisJaW5wdXRzOgorCSAgU2xvdCBudW1iZXIgdG8gYmUgdGVzdGVkLCBhbHdheXMgemVybyBleGNlcHQgZm9yIGp1a2Vib3hlcy4KKwkgIE1heSBhbHNvIGJlIHNwZWNpYWwgdmFsdWVzIENEU0xfTk9ORSBvciBDRFNMX0NVUlJFTlQKKworCW91dHB1dHM6CisJICBJb2N0bCByZXR1cm4gdmFsdWUgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMKKwkgIGZyb20gPGxpbnV4L2Nkcm9tLmg+OgorCisJICAgIENEU19OT19JTkZPCQlJbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlLgorCSAgICBDRFNfTk9fRElTQworCSAgICBDRFNfVFJBWV9PUEVOCisJICAgIENEU19EUklWRV9OT1RfUkVBRFkKKwkgICAgQ0RTX0RJU0NfT0sKKwkgICAgLTEJCQllcnJvcgorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVOT1NZUwlEcml2ZSBjYW4ndCBkZXRlY3QgZHJpdmUgc3RhdHVzCisJICBFSU5WQUwJU2xvdCBudW1iZXIgYmV5b25kIGNhcGFjaXR5IG9mIGRyaXZlCisJICBFTk9NRU0JT3V0IG9mIG1lbW9yeQorCisKKworCitDRFJPTV9ESVNDX1NUQVRVUwkJR2V0IGRpc2MgdHlwZSwgZXRjLgorCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTV9ESVNDX1NUQVRVUywgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgSW9jdGwgcmV0dXJuIHZhbHVlIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisJICBmcm9tIDxsaW51eC9jZHJvbS5oPjoKKwkgICAgQ0RTX05PX0lORk8KKwkgICAgQ0RTX0FVRElPCisJICAgIENEU19NSVhFRAorCSAgICBDRFNfWEFfMl8yCisJICAgIENEU19YQV8yXzEKKwkgICAgQ0RTX0RBVEFfMQorCisJZXJyb3IgcmV0dXJuczoJbm9uZSBhdCBwcmVzZW50CisKKwlub3RlczoKKwkgIFNvdXJjZSBjb2RlIGNvbW1lbnRzIHN0YXRlOgorCisJICAgIE9rLCB0aGlzIGlzIHdoZXJlIHByb2JsZW1zIHN0YXJ0LiAgVGhlIGN1cnJlbnQgaW50ZXJmYWNlIGZvcgorCSAgICB0aGUgQ0RST01fRElTQ19TVEFUVVMgaW9jdGwgaXMgZmxhd2VkLiAgSXQgbWFrZXMgdGhlIGZhbHNlCisJICAgIGFzc3VtcHRpb24gdGhhdCBDRHMgYXJlIGFsbCBDRFNfREFUQV8xIG9yIGFsbCBDRFNfQVVESU8sIGV0Yy4KKwkgICAgVW5mb3J0dW5hdGx5LCB3aGlsZSB0aGlzIGlzIG9mdGVuIHRoZSBjYXNlLCBpdCBpcyBhbHNvCisJICAgIHZlcnkgY29tbW9uIGZvciBDRHMgdG8gaGF2ZSBzb21lIHRyYWNrcyB3aXRoIGRhdGEsIGFuZCBzb21lCisJICAgIHRyYWNrcyB3aXRoIGF1ZGlvLglKdXN0IGJlY2F1c2UgSSBmZWVsIGxpa2UgaXQsIEkgZGVjbGFyZQorCSAgICB0aGUgZm9sbG93aW5nIHRvIGJlIHRoZSBiZXN0IHdheSB0byBjb3BlLiAgSWYgdGhlIENEIGhhcworCSAgICBBTlkgZGF0YSB0cmFja3Mgb24gaXQsIGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkYXRhIENELgorCSAgICBJZiBpdCBoYXMgYW55IFhBIHRyYWNrcywgSSB3aWxsIHJldHVybiBpdCBhcyB0aGF0LglOb3cgSQorCSAgICBjb3VsZCBzaW1wbGlmeSB0aGlzIGludGVyZmFjZSBieSBjb21iaW5pbmcgdGhlc2UgcmV0dXJucyB3aXRoCisJICAgIHRoZSBhYm92ZSwgYnV0IHRoaXMgbW9yZSBjbGVhcmx5IGRlbW9uc3RyYXRlcyB0aGUgcHJvYmxlbQorCSAgICB3aXRoIHRoZSBjdXJyZW50IGludGVyZmFjZS4gIFRvbyBiYWQgdGhpcyB3YXNuJ3QgZGVzaWduZWQKKwkgICAgdG8gdXNlIGJpdG1hc2tzLi4uCSAgICAgICAtRXJpaworCisJICAgIFdlbGwsIG5vdyB3ZSBoYXZlIHRoZSBvcHRpb24gQ0RTX01JWEVEOiBhIG1peGVkLXR5cGUgQ0QuCisJICAgIFVzZXIgbGV2ZWwgcHJvZ3JhbW1lcnMgbWlnaHQgZmVlbCB0aGUgaW9jdGwgaXMgbm90IHZlcnkKKwkgICAgdXNlZnVsLgorCQkJLS0tZGF2aWQKKworCisKKworQ0RST01fQ0hBTkdFUl9OU0xPVFMJCUdldCBudW1iZXIgb2Ygc2xvdHMKKworCXVzYWdlOgorCisJICBpb2N0bChmZCwgQ0RST01fQ0hBTkdFUl9OU0xPVFMsIDApOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSBpb2N0bCByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIHNsb3RzIGluIGEKKwkgIENEIGNoYW5nZXIuICBUeXBpY2FsbHkgMSBmb3Igbm9uLW11bHRpLWRpc2sgZGV2aWNlcy4KKworCWVycm9yIHJldHVybnM6CW5vbmUKKworCisKK0NEUk9NX0xPQ0tET09SCQkJbG9jayBvciB1bmxvY2sgZG9vcgorCisJdXNhZ2U6CisKKwkgIGludCBsb2NrOworCSAgaW9jdGwoZmQsIENEUk9NX0xPQ0tET09SLCBsb2NrKTsKKworCWlucHV0czoKKwkgIERvb3IgbG9jayBmbGFnLCAxPWxvY2ssIDA9dW5sb2NrCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm5zOgorCSAgRURSSVZFX0NBTlRfRE9fVEhJUwlEb29yIGxvY2sgZnVuY3Rpb24gbm90IHN1cHBvcnRlZC4KKwkgIEVCVVNZCQkJQXR0ZW1wdCB0byB1bmxvY2sgd2hlbiBtdWx0aXBsZSB1c2VycworCSAgCQkJaGF2ZSB0aGUgZHJpdmUgb3BlbiBhbmQgbm90IENBUF9TWVNfQURNSU4KKworCW5vdGVzOgorCSAgQXMgb2YgMi42LjguMSwgdGhlIGxvY2sgZmxhZyBpcyBhIGdsb2JhbCBsb2NrLCBtZWFuaW5nIHRoYXQKKwkgIGFsbCBDRCBkcml2ZXMgd2lsbCBiZSBsb2NrZWQgb3IgdW5sb2NrZWQgdG9nZXRoZXIuICBUaGlzIGlzCisJICBwcm9iYWJseSBhIGJ1Zy4KKworCSAgVGhlIEVEUklWRV9DQU5UX0RPX1RISVMgdmFsdWUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2Ryb20uaD4KKwkgIGFuZCBpcyBjdXJyZW50bHkgKDIuNi44LjEpIHRoZSBzYW1lIGFzIEVPUE5PVFNVUFAKKworCisKK0NEUk9NX0RFQlVHCQkJVHVybiBkZWJ1ZyBtZXNzYWdlcyBvbi9vZmYKKworCXVzYWdlOgorCisJICBpbnQgZGVidWc7CisJICBpb2N0bChmZCwgQ0RST01fREVCVUcsIGRlYnVnKTsKKworCWlucHV0czoKKwkgIENkcm9tIGRlYnVnIGZsYWcsIDA9ZGlzYWJsZSwgMT1lbmFibGUKKworCW91dHB1dHM6CisJICBUaGUgaW9jdGwgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG5ldyBkZWJ1ZyBmbGFnLgorCisJZXJyb3IgcmV0dXJuOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisKKworCitDRFJPTV9HRVRfQ0FQQUJJTElUWQkJZ2V0IGNhcGFiaWxpdGllcworCisJdXNhZ2U6CisKKwkgIGlvY3RsKGZkLCBDRFJPTV9HRVRfQ0FQQUJJTElUWSwgMCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIGlvY3RsIHJldHVybiB2YWx1ZSBpcyB0aGUgY3VycmVudCBkZXZpY2UgY2FwYWJpbGl0eQorCSAgZmxhZ3MuICBTZWUgQ0RDX0NMT1NFX1RSQVksIENEQ19PUEVOX1RSQVksIGV0Yy4KKworCisKK0NEUk9NQVVESU9CVUZTSVoJCXNldCB0aGUgYXVkaW8gYnVmZmVyIHNpemUKKworCXVzYWdlOgorCisJICBpbnQgYXJnOworCSAgaW9jdGwoZmQsIENEUk9NQVVESU9CVUZTSVosIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgYXVkaW8gYnVmZmVyIHNpemUKKworCW91dHB1dHM6CisJICBUaGUgaW9jdGwgcmV0dXJuIHZhbHVlIGlzIHRoZSBuZXcgYXVkaW8gYnVmZmVyIHNpemUsIG9yIC0xCisJICBvbiBlcnJvci4KKworCWVycm9yIHJldHVybjoKKwkgIEVOT1NZUwlOb3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgorCisJbm90ZXM6CisJICBOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBkcml2ZXJzLgorCisKKworRFZEX1JFQURfU1RSVUNUCQkJUmVhZCBzdHJ1Y3R1cmUKKworCXVzYWdlOgorCisJICBkdmRfc3RydWN0IHM7CisJICBpb2N0bChmZCwgRFZEX1JFQURfU1RSVUNULCAmcyk7CisKKwlpbnB1dHM6CisJICBkdmRfc3RydWN0IHN0cnVjdHVyZSwgY29udGFpbmluZzoKKwkgICAgdHlwZQkJc3BlY2lmaWVzIHRoZSBpbmZvcm1hdGlvbiBkZXNpcmVkLCBvbmUgb2YKKwkgICAgCQkJRFZEX1NUUlVDVF9QSFlTSUNBTCwgRFZEX1NUUlVDVF9DT1BZUklHSFQsCisJCQkJRFZEX1NUUlVDVF9ESVNDS0VZLCBEVkRfU1RSVUNUX0JDQSwKKwkJCQlEVkRfU1RSVUNUX01BTlVGQUNUCisJICAgIHBoeXNpY2FsLmxheWVyX251bQlkZXNpcmVkIGxheWVyLCBpbmRleGVkIGZyb20gMAorCSAgICBjb3B5cmlnaHQubGF5ZXJfbnVtCWRlc2lyZWQgbGF5ZXIsIGluZGV4ZWQgZnJvbSAwCisJICAgIGRpc2NrZXkuYWdpZAorCisJb3V0cHV0czoKKwkgIGR2ZF9zdHJ1Y3Qgc3RydWN0dXJlLCBjb250YWluaW5nOgorCSAgICBwaHlzaWNhbAkJZm9yIHR5cGUgPT0gRFZEX1NUUlVDVF9QSFlTSUNBTAorCSAgICBjb3B5cmlnaHQJCWZvciB0eXBlID09IERWRF9TVFJVQ1RfQ09QWVJJR0hUCisJICAgIGRpc2NrZXkudmFsdWUJZm9yIHR5cGUgPT0gRFZEX1NUUlVDVF9ESVNDS0VZCisJICAgIGJjYS57bGVuLHZhbHVlfQlmb3IgdHlwZSA9PSBEVkRfU1RSVUNUX0JDQQorCSAgICBtYW51ZmFjdC57bGVuLHZhbHV9CWZvciB0eXBlID09IERWRF9TVFJVQ1RfTUFOVUZBQ1QKKworCWVycm9yIHJldHVybnM6CisJICBFSU5WQUwJcGh5c2ljYWwubGF5ZXJfbnVtIGV4Y2VlZHMgbnVtYmVyIG9mIGxheWVycworCSAgRUlPCQlSZWNpZXZlZCBpbnZhbGlkIHJlc3BvbnNlIGZyb20gZHJpdmUKKworCisKK0RWRF9XUklURV9TVFJVQ1QJCVdyaXRlIHN0cnVjdHVyZQorCisJTm90IGltcGxlbWVudGVkLCBhcyBvZiAyLjYuOC4xCisKKworCitEVkRfQVVUSAkJCUF1dGhlbnRpY2F0aW9uCisKKwl1c2FnZToKKworCSAgZHZkX2F1dGhpbmZvIGFpOworCSAgaW9jdGwoZmQsIERWRF9BVVRILCAmYWkpOworCisJaW5wdXRzOgorCSAgZHZkX2F1dGhpbmZvIHN0cnVjdHVyZS4gIFNlZSA8bGludXgvY2Ryb20uaD4KKworCW91dHB1dHM6CisJICBkdmRfYXV0aGluZm8gc3RydWN0dXJlLgorCisJZXJyb3IgcmV0dXJuOgorCSAgRU5PVFRZCWFpLnR5cGUgbm90IHJlY29nbml6ZWQuCisKKworCitDRFJPTV9TRU5EX1BBQ0tFVAkJc2VuZCBhIHBhY2tldCB0byB0aGUgZHJpdmUKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgY2Ryb21fZ2VuZXJpY19jb21tYW5kIGNnYzsKKwkgIGlvY3RsKGZkLCBDRFJPTV9TRU5EX1BBQ0tFVCwgJmNnYyk7CisKKwlpbnB1dHM6CisJICBjZHJvbV9nZW5lcmljX2NvbW1hbmQgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHBhY2tldCB0byBzZW5kLgorCisJb3V0cHV0czoJbm9uZQorCSAgY2Ryb21fZ2VuZXJpY19jb21tYW5kIHN0cnVjdHVyZSBjb250YWluaW5nIHJlc3VsdHMuCisKKwllcnJvciByZXR1cm46CisJICBFSU8JCWNvbW1hbmQgZmFpbGVkLgorCSAgRVBFUk0JCU9wZXJhdGlvbiBub3QgcGVybWl0dGVkLCBlaXRoZXIgYmVjYXVzZSBhCisJCQl3cml0ZSBjb21tYW5kIHdhcyBhdHRlbXB0ZWQgb24gYSBkcml2ZSB3aGljaAorCQkJaXMgb3BlbmVkIHJlYWQtb25seSwgb3IgYmVjYXVzZSB0aGUgY29tbWFuZAorCQkJcmVxdWlyZXMgQ0FQX1NZU19SQVdJTworCSAgRUlOVkFMCWNnYy5kYXRhX2RpcmVjdGlvbiBub3Qgc2V0CisKKworCitDRFJPTV9ORVhUX1dSSVRBQkxFCQlnZXQgbmV4dCB3cml0YWJsZSBibG9jaworCisJdXNhZ2U6CisKKwkgIGxvbmcgbmV4dDsKKwkgIGlvY3RsKGZkLCBDRFJPTV9ORVhUX1dSSVRBQkxFLCAmbmV4dCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIG5leHQgd3JpdGFibGUgYmxvY2suCisKKwlub3RlczoKKwkgIElmIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsIGRpcmVjdGx5LCB0aGUKKwkgIGlvY3RsIHdpbGwgcmV0dXJuIENEUk9NX0xBU1RfV1JJVFRFTiArIDcuCisKKworCitDRFJPTV9MQVNUX1dSSVRURU4JCWdldCBsYXN0IGJsb2NrIHdyaXR0ZW4gb24gZGlzYworCisJdXNhZ2U6CisKKwkgIGxvbmcgbGFzdDsKKwkgIGlvY3RsKGZkLCBDRFJPTV9MQVNUX1dSSVRURU4sICZsYXN0KTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgbGFzdCBibG9jayB3cml0dGVuIG9uIGRpc2MKKworCW5vdGVzOgorCSAgSWYgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgaW9jdGwgZGlyZWN0bHksIHRoZQorCSAgcmVzdWx0IGlzIGRlcml2ZWQgZnJvbSB0aGUgZGlzYydzIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgdGhlCisJICB0YWJsZSBvZiBjb250ZW50cyBjYW4ndCBiZSByZWFkLCB0aGlzIGlvY3RsIHJldHVybnMgYW4KKwkgIGVycm9yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9oZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaGRpby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3YWVhMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW9jdGwvaGRpby50eHQKQEAgLTAsMCArMSwxMDcwIEBACisJCVN1bW1hcnkgb2YgSERJT18gaW9jdGwgY2FsbHMuCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCQlFZHdhcmQgQS4gRmFsayA8ZWZhbGtAZ29vZ2xlLmNvbT4KKworCQlOb3ZlbWJlciwgMjAwNAorCitUaGlzIGRvY3VtZW50IGF0dGVtcHRzIHRvIGRlc2NyaWJlIHRoZSBpb2N0bCgyKSBjYWxscyBzdXBwb3J0ZWQgYnkKK3RoZSBIRC9JREUgbGF5ZXIuICBUaGVzZSBhcmUgYnktYW5kLWxhcmdlIGltcGxlbWVudGVkIChhcyBvZiBMaW51eCAyLjYpCitpbiBkcml2ZXJzL2lkZS9pZGUuYyBhbmQgZHJpdmVycy9ibG9jay9zY3NpX2lvY3RsLmMKKworaW9jdGwgdmFsdWVzIGFyZSBsaXN0ZWQgaW4gPGxpbnV4L2hkcmVnLmg+LiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGV5CithcmUgYXMgZm9sbG93czoKKworICAgIGlvY3RscyB0aGF0IHBhc3MgYXJndW1lbnQgcG9pbnRlcnMgdG8gdXNlciBzcGFjZToKKworCUhESU9fR0VUR0VPCQlnZXQgZGV2aWNlIGdlb21ldHJ5CisJSERJT19HRVRfVU5NQVNLSU5UUglnZXQgY3VycmVudCB1bm1hc2sgc2V0dGluZworCUhESU9fR0VUX01VTFRDT1VOVAlnZXQgY3VycmVudCBJREUgYmxvY2ttb2RlIHNldHRpbmcKKwlIRElPX0dFVF9RRE1BCQlnZXQgdXNlLXFkbWEgZmxhZworCUhESU9fU0VUX1hGRVIJCXNldCB0cmFuc2ZlciByYXRlIHZpYSBwcm9jCisJSERJT19PQlNPTEVURV9JREVOVElUWQlPQlNPTEVURSwgRE8gTk9UIFVTRQorCUhESU9fR0VUX0tFRVBTRVRUSU5HUwlnZXQga2VlcC1zZXR0aW5ncy1vbi1yZXNldCBmbGFnCisJSERJT19HRVRfMzJCSVQJCWdldCBjdXJyZW50IGlvXzMyYml0IHNldHRpbmcKKwlIRElPX0dFVF9OT1dFUlIJCWdldCBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZworCUhESU9fR0VUX0RNQQkJZ2V0IHVzZS1kbWEgZmxhZworCUhESU9fR0VUX05JQ0UJCWdldCBuaWNlIGZsYWdzCisJSERJT19HRVRfSURFTlRJVFkJZ2V0IElERSBpZGVudGlmaWNhdGlvbiBpbmZvCisJSERJT19HRVRfV0NBQ0hFCQlnZXQgd3JpdGUgY2FjaGUgbW9kZSBvbnxvZmYKKwlIRElPX0dFVF9BQ09VU1RJQwlnZXQgYWNvdXN0aWMgdmFsdWUKKwlIRElPX0dFVF9BRERSRVNTCWdldCBzZWN0b3IgYWRkcmVzc2luZyBtb2RlCisJSERJT19HRVRfQlVTU1RBVEUJZ2V0IHRoZSBidXMgc3RhdGUgb2YgdGhlIGh3aWYKKwlIRElPX1RSSVNUQVRFX0hXSUYJZXhlY3V0ZSBhIGNoYW5uZWwgdHJpc3RhdGUKKwlIRElPX0RSSVZFX1JFU0VUCWV4ZWN1dGUgYSBkZXZpY2UgcmVzZXQKKwlIRElPX0RSSVZFX1RBU0tGSUxFCWV4ZWN1dGUgcmF3IHRhc2tmaWxlCisJSERJT19EUklWRV9UQVNLCQlleGVjdXRlIHRhc2sgYW5kIHNwZWNpYWwgZHJpdmUgY29tbWFuZAorCUhESU9fRFJJVkVfQ01ECQlleGVjdXRlIGEgc3BlY2lhbCBkcml2ZSBjb21tYW5kCisJSERJT19EUklWRV9DTURfQUVCCUhESU9fRFJJVkVfVEFTSworCisgICAgaW9jdGxzIHRoYXQgcGFzcyBub24tcG9pbnRlciB2YWx1ZXM6CisKKwlIRElPX1NFVF9NVUxUQ09VTlQJY2hhbmdlIElERSBibG9ja21vZGUKKwlIRElPX1NFVF9VTk1BU0tJTlRSCXBlcm1pdCBvdGhlciBpcnFzIGR1cmluZyBJL08KKwlIRElPX1NFVF9LRUVQU0VUVElOR1MJa2VlcCBpb2N0bCBzZXR0aW5ncyBvbiByZXNldAorCUhESU9fU0VUXzMyQklUCQljaGFuZ2UgaW9fMzJiaXQgZmxhZ3MKKwlIRElPX1NFVF9OT1dFUlIJCWNoYW5nZSBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZworCUhESU9fU0VUX0RNQQkJY2hhbmdlIHVzZS1kbWEgZmxhZworCUhESU9fU0VUX1BJT19NT0RFCXJlY29uZmlnIGludGVyZmFjZSB0byBuZXcgc3BlZWQKKwlIRElPX1NDQU5fSFdJRgkJcmVnaXN0ZXIgYW5kIChyZSlzY2FuIGludGVyZmFjZQorCUhESU9fU0VUX05JQ0UJCXNldCBuaWNlIGZsYWdzCisJSERJT19VTlJFR0lTVEVSX0hXSUYJdW5yZWdpc3RlciBpbnRlcmZhY2UKKwlIRElPX1NFVF9XQ0FDSEUJCWNoYW5nZSB3cml0ZSBjYWNoZSBlbmFibGUtZGlzYWJsZQorCUhESU9fU0VUX0FDT1VTVElDCWNoYW5nZSBhY291c3RpYyBiZWhhdmlvcgorCUhESU9fU0VUX0JVU1NUQVRFCXNldCB0aGUgYnVzIHN0YXRlIG9mIHRoZSBod2lmCisJSERJT19TRVRfUURNQQkJY2hhbmdlIHVzZS1xZG1hIGZsYWcKKwlIRElPX1NFVF9BRERSRVNTCWNoYW5nZSBsYmEgYWRkcmVzc2luZyBtb2RlcworCisJSERJT19TRVRfSURFX1NDU0kJU2V0IHNjc2kgZW11bGF0aW9uIG1vZGUgb24vb2ZmCisJSERJT19TRVRfU0NTSV9JREUJbm90IGltcGxlbWVudGVkIHlldAorCisKK1RoZSBpbmZvcm1hdGlvbiB0aGF0IGZvbGxvd3Mgd2FzIGRldGVybWluZWQgZnJvbSByZWFkaW5nIGtlcm5lbCBzb3VyY2UKK2NvZGUuICBJdCBpcyBsaWtlbHkgdGhhdCBzb21lIGNvcnJlY3Rpb25zIHdpbGwgYmUgbWFkZSBvdmVyIHRpbWUuCisKKworCisKKworCisKK0dlbmVyYWw6CisKKwlVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIGlvY3RsIGNhbGxzIHJldHVybiAwIG9uIHN1Y2Nlc3MKKwlhbmQgLTEgd2l0aCBlcnJubyBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUgb24gZXJyb3IuCisKKwlVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIGlvY3RsIGNhbGxzIHJldHVybiAtMSBhbmQgc2V0CisJZXJybm8gdG8gRUZBVUxUIG9uIGEgZmFpbGVkIGF0dGVtcHQgdG8gY29weSBkYXRhIHRvIG9yIGZyb20gdXNlcgorCWFkZHJlc3Mgc3BhY2UuCisKKwlVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIGRhdGEgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzCisJYXJlIGRlZmluZWQgaW4gPGxpbnV4L2hkcmVnLmg+CisKKworCitIRElPX0dFVEdFTwkJCWdldCBkZXZpY2UgZ2VvbWV0cnkKKworCXVzYWdlOgorCisJICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvbTsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVEdFTywgJmdlb20pOworCisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCisJICBoZF9nZW9tZXRyeSBzdHJ1Y3R1cmUgY29udGFpbmluZzoKKworCSAgICBoZWFkcwludW1iZXIgb2YgaGVhZHMKKwkgICAgc2VjdG9ycwludW1iZXIgb2Ygc2VjdG9ycy90cmFjaworCSAgICBjeWxpbmRlcnMJbnVtYmVyIG9mIGN5bGluZGVycywgbW9kIDY1NTM2CisJICAgIHN0YXJ0CXN0YXJ0aW5nIHNlY3RvciBvZiB0aGlzIHBhcnRpdGlvbi4KKworCisJZXJyb3IgcmV0dXJuczoKKwkgIEVJTlZBTAlpZiB0aGUgZGV2aWNlIGlzIG5vdCBhIGRpc2sgZHJpdmUgb3IgZmxvcHB5IGRyaXZlLAorCSAgCQlvciBpZiB0aGUgdXNlciBwYXNzZXMgYSBudWxsIHBvaW50ZXIKKworCisJbm90ZXM6CisKKwkgIE5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGggbW9kZXJuIGRpc2sgZHJpdmVzLCB3aG9zZSBnZW9tZXRyeQorCSAgaXMgYSBwb2xpdGUgZmljdGlvbiBhbnl3YXkuICBNb2Rlcm4gZHJpdmVzIGFyZSBhZGRyZXNzZWQKKwkgIHB1cmVseSBieSBzZWN0b3IgbnVtYmVyIG5vd2FkYXlzIChsYmEgYWRkcmVzc2luZyksIGFuZCB0aGUKKwkgIGRyaXZlIGdlb21ldHJ5IGlzIGFuIGFic3RyYWN0aW9uIHdoaWNoIGlzIGFjdHVhbGx5IHN1YmplY3QKKwkgIHRvIGNoYW5nZS4gIEN1cnJlbnRseSAoYXMgb2YgTm92IDIwMDQpLCB0aGUgZ2VvbWV0cnkgdmFsdWVzCisJICBhcmUgdGhlICJiaW9zIiB2YWx1ZXMgLS0gcHJlc3VtYWJseSB0aGUgdmFsdWVzIHRoZSBkcml2ZSBoYWQKKwkgIHdoZW4gTGludXggZmlyc3QgYm9vdGVkLgorCisJICBJbiBhZGRpdGlvbiwgdGhlIGN5bGluZGVycyBmaWVsZCBvZiB0aGUgaGRfZ2VvbWV0cnkgaXMgYW4KKwkgIHVuc2lnbmVkIHNob3J0LCBtZWFuaW5nIHRoYXQgb24gbW9zdCBhcmNoaXRlY3R1cmVzLCB0aGlzCisJICBpb2N0bCB3aWxsIG5vdCByZXR1cm4gYSBtZWFuaW5nZnVsIHZhbHVlIG9uIGRyaXZlcyB3aXRoIG1vcmUKKwkgIHRoYW4gNjU1MzUgdHJhY2tzLgorCisJICBUaGUgc3RhcnQgZmllbGQgaXMgdW5zaWduZWQgbG9uZywgbWVhbmluZyB0aGF0IGl0IHdpbGwgbm90CisJICBjb250YWluIGEgbWVhbmluZ2Z1bCB2YWx1ZSBmb3IgZGlza3Mgb3ZlciAyMTkgR2IgaW4gc2l6ZS4KKworCisKKworSERJT19HRVRfVU5NQVNLSU5UUgkJZ2V0IGN1cnJlbnQgdW5tYXNrIHNldHRpbmcKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9VTk1BU0tJTlRSLCAmdmFsKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgdmFsdWUgb2YgdGhlIGRyaXZlJ3MgY3VycmVudCB1bm1hc2sgc2V0dGluZworCisKKworSERJT19TRVRfVU5NQVNLSU5UUgkJcGVybWl0IG90aGVyIGlycXMgZHVyaW5nIEkvTworCisJdXNhZ2U6CisKKwkgIHVuc2lnbmVkIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX1VOTUFTS0lOVFIsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIHVubWFzayBmbGFnCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMV0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKworCisKKworSERJT19HRVRfTVVMVENPVU5UCQlnZXQgY3VycmVudCBJREUgYmxvY2ttb2RlIHNldHRpbmcKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9NVUxUQ09VTlQsICZ2YWwpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBJREUgYmxvY2sgbW9kZSBzZXR0aW5nLiAgVGhpcworCSAgY29udHJvbHMgaG93IG1hbnkgc2VjdG9ycyB0aGUgZHJpdmUgd2lsbCB0cmFuc2ZlciBwZXIKKwkgIGludGVycnVwdC4KKworCisKK0hESU9fU0VUX01VTFRDT1VOVAkJY2hhbmdlIElERSBibG9ja21vZGUKKworCXVzYWdlOgorCisJICBpbnQgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX01VTFRDT1VOVCwgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3IgSURFIGJsb2NrIG1vZGUgc2V0dGluZy4gIFRoaXMgY29udHJvbHMgaG93IG1hbnkKKwkgIHNlY3RvcnMgdGhlIGRyaXZlIHdpbGwgdHJhbnNmZXIgcGVyIGludGVycnVwdC4KKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBzdXBwb3J0ZWQgYnkgZGlzay4KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kgb3IgYmxvY2ttb2RlIGFscmVhZHkgc2V0LgorCSAgRUlPCQlEcml2ZSBkaWQgbm90IGFjY2VwdCBuZXcgYmxvY2sgbW9kZS4KKworCW5vdGVzOgorCisJICBTb3VyY2UgY29kZSBjb21tZW50cyByZWFkOgorCisJICAgIFRoaXMgaXMgdGlnaHRseSB3b3ZlbiBpbnRvIHRoZSBkcml2ZXItPmRvX3NwZWNpYWwgY2FuIG5vdAorCSAgICB0b3VjaC4gIERPTidUIGRvIGl0IGFnYWluIHVudGlsIGEgdG90YWwgcGVyc29uYWxpdHkgcmV3cml0ZQorCSAgICBpcyBjb21taXR0ZWQuCisKKwkgIElmIGJsb2NrbW9kZSBoYXMgYWxyZWFkeSBiZWVuIHNldCwgdGhpcyBpb2N0bCB3aWxsIGZhaWwgd2l0aAorCSAgRUJVU1kKKworCisKK0hESU9fR0VUX1FETUEJCQlnZXQgdXNlLXFkbWEgZmxhZworCisJTm90IGltcGxlbWVudGVkLCBhcyBvZiAyLjYuOC4xCisKKworCitIRElPX1NFVF9YRkVSCQkJc2V0IHRyYW5zZmVyIHJhdGUgdmlhIHByb2MKKworCU5vdCBpbXBsZW1lbnRlZCwgYXMgb2YgMi42LjguMQorCisKKworSERJT19PQlNPTEVURV9JREVOVElUWQkJT0JTT0xFVEUsIERPIE5PVCBVU0UKKworCVNhbWUgYXMgSERJT19HRVRfSURFTlRJVFkgKHNlZSBiZWxvdyksIGV4Y2VwdCB0aGF0IGl0IG9ubHkKKwlyZXR1cm5zIHRoZSBmaXJzdCAxNDIgYnl0ZXMgb2YgZHJpdmUgaWRlbnRpdHkgaW5mb3JtYXRpb24uCisKKworCitIRElPX0dFVF9JREVOVElUWQkJZ2V0IElERSBpZGVudGlmaWNhdGlvbiBpbmZvCisKKwl1c2FnZToKKworCSAgdW5zaWduZWQgY2hhciBpZGVudGl0eVs1MTJdOworCSAgaW9jdGwoZmQsIEhESU9fR0VUX0lERU5USVRZLCBpZGVudGl0eSk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCisJICBBVEEgZHJpdmUgaWRlbnRpdHkgaW5mb3JtYXRpb24uICBGb3IgZnVsbCBkZXNjcmlwdGlvbiwgc2VlCisJICB0aGUgSURFTlRJRlkgREVWSUNFIGFuZCBJREVOVElGWSBQQUNLRVQgREVWSUNFIGNvbW1hbmRzIGluCisJICB0aGUgQVRBIHNwZWNpZmljYXRpb24uCisKKwllcnJvciByZXR1cm5zOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRU5PTVNHCUlERU5USUZZIERFVklDRSBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlCisKKwlub3RlczoKKworCSAgUmV0dXJucyBpbmZvcm1hdGlvbiB0aGF0IHdhcyBvYnRhaW5lZCB3aGVuIHRoZSBkcml2ZSB3YXMKKwkgIHByb2JlZC4gIFNvbWUgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZSwgYW5kCisJICB0aGlzIGlvY3RsIGRvZXMgbm90IHJlLXByb2JlIHRoZSBkcml2ZSB0byB1cGRhdGUgdGhlCisJICBpbmZvcm1hdGlvbi4KKworCSAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tIC9wcm9jL2lkZS9oZFgvaWRlbnRpZnkKKworCisKK0hESU9fR0VUX0tFRVBTRVRUSU5HUwkJZ2V0IGtlZXAtc2V0dGluZ3Mtb24tcmVzZXQgZmxhZworCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fR0VUX0tFRVBTRVRUSU5HUywgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50ICJrZWVwIHNldHRpbmdzIiBmbGFnCisKKwlub3RlczoKKworCSAgV2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IGtlcm5lbCBzaG91bGQgcmVzdG9yZSBzZXR0aW5ncworCSAgYWZ0ZXIgYSBkcml2ZSByZXNldC4KKworCisKK0hESU9fU0VUX0tFRVBTRVRUSU5HUwkJa2VlcCBpb2N0bCBzZXR0aW5ncyBvbiByZXNldAorCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX0tFRVBTRVRUSU5HUywgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3Iga2VlcF9zZXR0aW5ncyBmbGFnCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMV0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKworCisKK0hESU9fR0VUXzMyQklUCQkJZ2V0IGN1cnJlbnQgaW9fMzJiaXQgc2V0dGluZworCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fR0VUXzMyQklULCAmdmFsKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaW9fMzJiaXQgc2V0dGluZworCisJbm90ZXM6CisKKwkgIDA9MTYtYml0LCAxPTMyLWJpdCwgMiwzID0gMzJiaXQrc3luYworCisKKworSERJT19HRVRfTk9XRVJSCQkJZ2V0IGlnbm9yZS13cml0ZS1lcnJvciBmbGFnCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19HRVRfTk9XRVJSLCAmdmFsKTsKKworCWlucHV0czoJCW5vbmUKKworCW91dHB1dHM6CisJICBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaWdub3JlLXdyaXRlLWVycm9yIGZsYWcKKworCisKK0hESU9fR0VUX0RNQQkJCWdldCB1c2UtZG1hIGZsYWcKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9ETUEsICZ2YWwpOworCisJaW5wdXRzOgkJbm9uZQorCisJb3V0cHV0czoKKwkgIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB1c2UtZG1hIGZsYWcKKworCisKK0hESU9fR0VUX05JQ0UJCQlnZXQgbmljZSBmbGFncworCisJdXNhZ2U6CisKKwkgIGxvbmcgbmljZTsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9OSUNFLCAmbmljZSk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCisJICBUaGUgZHJpdmUncyAibmljZSIgdmFsdWVzLgorCisJbm90ZXM6CisKKwkgIFBlci1kcml2ZSBmbGFncyB3aGljaCBkZXRlcm1pbmUgd2hlbiB0aGUgc3lzdGVtIHdpbGwgZ2l2ZSBtb3JlCisJICBiYW5kd2lkdGggdG8gb3RoZXIgZGV2aWNlcyBzaGFyaW5nIHRoZSBzYW1lIElERSBidXMuCisJICBTZWUgPGxpbnV4L2hkcmVnLmg+LCBuZWFyIHN5bWJvbCBJREVfTklDRV9EU0NfT1ZFUkxBUC4KKworCisKKworSERJT19TRVRfTklDRQkJCXNldCBuaWNlIGZsYWdzCisKKwl1c2FnZToKKworCSAgdW5zaWduZWQgbG9uZyBuaWNlOworCSAgLi4uCisJICBpb2N0bChmZCwgSERJT19TRVRfTklDRSwgbmljZSk7CisKKwlpbnB1dHM6CisJICBiaXRtYXNrIG9mIG5pY2UgZmxhZ3MuCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm5zOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFUEVSTQkJRmxhZ3Mgb3RoZXIgdGhhbiBEU0NfT1ZFUkxBUCBhbmQgTklDRV8xIHNldC4KKwkgIEVQRVJNCQlEU0NfT1ZFUkxBUCBzcGVjaWZpZWQgYnV0IG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmUKKworCW5vdGVzOgorCisJICBUaGlzIGlvY3RsIHNldHMgdGhlIERTQ19PVkVSTEFQIGFuZCBOSUNFXzEgZmxhZ3MgZnJvbSB2YWx1ZXMKKwkgIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLgorCisJICBOaWNlIGZsYWdzIGFyZSBsaXN0ZWQgaW4gPGxpbnV4L2hkcmVnLmg+LCBzdGFydGluZyB3aXRoCisJICBJREVfTklDRV9EU0NfT1ZFUkxBUC4gIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgc2hpZnRzLgorCisKKworCisKK0hESU9fR0VUX1dDQUNIRQkJCWdldCB3cml0ZSBjYWNoZSBtb2RlIG9ufG9mZgorCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fR0VUX1dDQUNIRSwgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHdyaXRlIGNhY2hlIG1vZGUKKworCisKK0hESU9fR0VUX0FDT1VTVElDCQlnZXQgYWNvdXN0aWMgdmFsdWUKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX0dFVF9BQ09VU1RJQywgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFjb3VzdGljIHNldHRpbmdzCisKKwlub3RlczoKKworCSAgU2VlIEhESU9fU0VUX0FDT1VTVElDCisKKworCitIRElPX0dFVF9BRERSRVNTCisKKwl1c2FnZToKKworCSAgbG9uZyB2YWw7CisJICBpb2N0bChmZCwgSERJT19HRVRfQUREUkVTUywgJnZhbCk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFkZHJlc3NpbmcgbW9kZToKKwkgICAgMCA9IDI4LWJpdAorCSAgICAxID0gNDgtYml0CisJICAgIDIgPSA0OC1iaXQgZG9pbmcgMjgtYml0CisJICAgIDMgPSA2NC1iaXQKKworCisKK0hESU9fR0VUX0JVU1NUQVRFCQlnZXQgdGhlIGJ1cyBzdGF0ZSBvZiB0aGUgaHdpZgorCisJdXNhZ2U6CisKKwkgIGxvbmcgc3RhdGU7CisJICBpb2N0bChmZCwgSERJT19TQ0FOX0hXSUYsICZzdGF0ZSk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOgorCSAgQ3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgSURFIGJ1cy4gIE9uZSBvZiBCVVNTVEFURV9PRkYsCisJICBCVVNTVEFURV9PTiwgb3IgQlVTU1RBVEVfVFJJU1RBVEUKKworCWVycm9yIHJldHVybnM6CisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKworCisKKworSERJT19TRVRfQlVTU1RBVEUJCXNldCB0aGUgYnVzIHN0YXRlIG9mIHRoZSBod2lmCisKKwl1c2FnZToKKworCSAgaW50IHN0YXRlOworCSAgLi4uCisJICBpb2N0bChmZCwgSERJT19TQ0FOX0hXSUYsIHN0YXRlKTsKKworCWlucHV0czoKKwkgIERlc2lyZWQgSURFIHBvd2VyIHN0YXRlLiAgT25lIG9mIEJVU1NUQVRFX09GRiwgQlVTU1RBVEVfT04sCisJICBvciBCVVNTVEFURV9UUklTVEFURQorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19SQVdJTworCSAgRU9QTk9UU1VQUAlIYXJkd2FyZSBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBidXMgcG93ZXIgY29udHJvbAorCisKKworCitIRElPX1RSSVNUQVRFX0hXSUYJCWV4ZWN1dGUgYSBjaGFubmVsIHRyaXN0YXRlCisKKwlOb3QgaW1wbGVtZW50ZWQsIGFzIG9mIDIuNi44LjEuICBTZWUgSERJT19TRVRfQlVTU1RBVEUKKworCisKK0hESU9fRFJJVkVfUkVTRVQJCWV4ZWN1dGUgYSBkZXZpY2UgcmVzZXQKKworCXVzYWdlOgorCisJICBpbnQgYXJnc1szXQorCSAgLi4uCisJICBpb2N0bChmZCwgSERJT19EUklWRV9SRVNFVCwgYXJncyk7CisKKwlpbnB1dHM6CQlub25lCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm5zOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisKKwlub3RlczoKKworCSAgQWJvcnQgYW55IGN1cnJlbnQgY29tbWFuZCwgcHJldmVudCBhbnl0aGluZyBlbHNlIGZyb20gYmVpbmcKKwkgIHF1ZXVlZCwgZXhlY3V0ZSBhIHJlc2V0IG9uIHRoZSBkZXZpY2UsIGFuZCBpc3N1ZSBCTEtSUlBBUlQKKwkgIGlvY3RsIG9uIHRoZSBibG9jayBkZXZpY2UuCisKKwkgIEV4ZWN1dGVzIGFuIEFUQVBJIHNvZnQgcmVzZXQgaWYgYXBwbGljYWJsZSwgb3RoZXJ3aXNlCisJICBleGVjdXRlcyBhbiBBVEEgc29mdCByZXNldCBvbiB0aGUgY29udHJvbGxlci4KKworCisKK0hESU9fRFJJVkVfVEFTS0ZJTEUJCWV4ZWN1dGUgcmF3IHRhc2tmaWxlCisKKwlOb3RlOiAgSWYgeW91IGRvbid0IGhhdmUgYSBjb3B5IG9mIHRoZSBBTlNJIEFUQSBzcGVjaWZpY2F0aW9uCisJaGFuZHksIHlvdSBzaG91bGQgcHJvYmFibHkgaWdub3JlIHRoaXMgaW9jdGwuCisKKwlFeGVjdXRlIGFuIEFUQSBkaXNrIGNvbW1hbmQgZGlyZWN0bHkgYnkgd3JpdGluZyB0aGUgInRhc2tmaWxlIgorCXJlZ2lzdGVycyBvZiB0aGUgZHJpdmUuICBSZXF1aXJlcyBBRE1JTiBhbmQgUkFXSU8gYWNjZXNzCisJcHJpdmlsZWdlcy4KKworCXVzYWdlOgorCisJICBzdHJ1Y3QgeworCSAgICBpZGVfdGFza19yZXF1ZXN0X3QgcmVxX3Rhc2s7CisJICAgIHU4IG91dGJ1ZltPVVRQVVRfU0laRV07CisJICAgIHU4IGluYnVmW0lOUFVUX1NJWkVdOworCSAgfSB0YXNrOworCSAgbWVtc2V0KCZ0YXNrLnJlcV90YXNrLCAwLCBzaXplb2YodGFzay5yZXFfdGFzaykpOworCSAgdGFzay5yZXFfdGFzay5vdXRfc2l6ZSA9IHNpemVvZih0YXNrLm91dGJ1Zik7CisJICB0YXNrLnJlcV90YXNrLmluX3NpemUgPSBzaXplb2YodGFzay5pbmJ1Zik7CisJICAuLi4KKwkgIGlvY3RsKGZkLCBIRElPX0RSSVZFX1RBU0tGSUxFLCAmdGFzayk7CisJICAuLi4KKworCWlucHV0czoKKworCSAgKFNlZSBiZWxvdyBmb3IgZGV0YWlscyBvbiBtZW1vcnkgYXJlYSBwYXNzZWQgdG8gaW9jdGwuKQorCisJICBpb19wb3J0c1s4XQl2YWx1ZXMgdG8gYmUgd3JpdHRlbiB0byB0YXNrZmlsZSByZWdpc3RlcnMKKwkgIGhvYl9wb3J0c1s4XQloaWdoLW9yZGVyIGJ5dGVzLCBmb3IgZXh0ZW5kZWQgY29tbWFuZHMuCisJICBvdXRfZmxhZ3MJZmxhZ3MgaW5kaWNhdGluZyB3aGljaCByZWdpc3RlcnMgYXJlIHZhbGlkCisJICBpbl9mbGFncwlmbGFncyBpbmRpY2F0aW5nIHdoaWNoIHJlZ2lzdGVycyBzaG91bGQgYmUgcmV0dXJuZWQKKwkgIGRhdGFfcGhhc2UJc2VlIGJlbG93CisJICByZXFfY21kCWNvbW1hbmQgdHlwZSB0byBiZSBleGVjdXRlZAorCSAgb3V0X3NpemUJc2l6ZSBvZiBvdXRwdXQgYnVmZmVyCisJICBvdXRidWYJYnVmZmVyIG9mIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gZGlzaworCSAgaW5idWYJCWJ1ZmZlciBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkIGZyb20gZGlzayAoc2VlIFsxXSkKKworCW91dHB1dHM6CisKKwkgIGlvX3BvcnRzW10JdmFsdWVzIHJldHVybmVkIGluIHRoZSB0YXNrZmlsZSByZWdpc3RlcnMKKwkgIGhvYl9wb3J0c1tdCWhpZ2gtb3JkZXIgYnl0ZXMsIGZvciBleHRlbmRlZCBjb21tYW5kcy4KKwkgIG91dF9mbGFncwlmbGFncyBpbmRpY2F0aW5nIHdoaWNoIHJlZ2lzdGVycyBhcmUgdmFsaWQgKHNlZSBbMl0pCisJICBpbl9mbGFncwlmbGFncyBpbmRpY2F0aW5nIHdoaWNoIHJlZ2lzdGVycyBzaG91bGQgYmUgcmV0dXJuZWQKKwkgIG91dGJ1ZglidWZmZXIgb2YgZGF0YSB0byBiZSB0cmFuc21pdHRlZCB0byBkaXNrIChzZWUgWzFdKQorCSAgaW5idWYJCWJ1ZmZlciBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkIGZyb20gZGlzaworCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlDQVBfU1lTX0FETUlOIG9yIENBUF9TWVNfUkFXSU8gcHJpdmlsZWdlIG5vdCBzZXQuCisJICBFTk9NU0cJRGV2aWNlIGlzIG5vdCBhIGRpc2sgZHJpdmUuCisJICBFTk9NRU0JVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGFzaworCSAgRUZBVUxUCXJlcV9jbWQgPT0gVEFTS0ZJTEVfSU5fT1VUIChub3QgaW1wbGVtZW50ZWQgYXMgb2YgMi42LjgpCisJICBFUEVSTQkJcmVxX2NtZCA9PSBUQVNLRklMRV9NVUxUSV9PVVQgYW5kIGRyaXZlCisJICAJCW11bHRpLWNvdW50IG5vdCB5ZXQgc2V0LgorCSAgRUlPCQlEcml2ZSBmYWlsZWQgdGhlIGNvbW1hbmQuCisKKwlub3RlczoKKworCSAgWzFdIFJFQUQgVEhFIEZPTExPV0lORyBOT1RFUyAqQ0FSRUZVTExZKi4gIFRISVMgSU9DVEwgSVMKKwkgIEZVTEwgT0YgR09UQ0hBUy4gIEV4dHJlbWUgY2F1dGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIHVzaW5nCisJICB0aGlzIGlvY3RsLiAgQSBtaXN0YWtlIGNhbiBlYXNpbHkgY29ycnVwdCBkYXRhIG9yIGhhbmcgdGhlCisJICBzeXN0ZW0uCisKKwkgIFsyXSBCb3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXJlIGNvcGllZCBmcm9tIHRoZQorCSAgdXNlciBhbmQgd3JpdHRlbiBiYWNrIHRvIHRoZSB1c2VyLCBldmVuIHdoZW4gbm90IHVzZWQuCisKKwkgIFszXSBJZiBvbmUgb3IgbW9yZSBiaXRzIGFyZSBzZXQgaW4gb3V0X2ZsYWdzIGFuZCBpbl9mbGFncyBpcworCSAgemVybywgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHVzZWQgZm9yIGluX2ZsYWdzLmFsbCBhbmQKKwkgIHdyaXR0ZW4gYmFjayBpbnRvIGluX2ZsYWdzIG9uIGNvbXBsZXRpb24uCisKKwkgICAqIElERV9UQVNLRklMRV9TVERfSU5fRkxBR1MgfCAoSURFX0hPQl9TVERfSU5fRkxBR1MgPDwgOCkKKwkgICAgIGlmIExCQTQ4IGFkZHJlc3NpbmcgaXMgZW5hYmxlZCBmb3IgdGhlIGRyaXZlCisJICAgKiBJREVfVEFTS0ZJTEVfU1REX0lOX0ZMQUdTCisJICAgICBpZiBDSFMvTEJBMjgKKworCSAgVGhlIGFzc29jaWF0aW9uIGJldHdlZW4gaW5fZmxhZ3MuYWxsIGFuZCBlYWNoIGVuYWJsZQorCSAgYml0ZmllbGQgZmxpcHMgZGVwZW5kaW5nIG9uIGVuZGlhbmVzczsgZm9ydHVuYXRlbHksIFRBU0tGSUxFCisJICBvbmx5IHVzZXMgaW5mbGFncy5iLmRhdGEgYml0IGFuZCBpZ25vcmVzIGFsbCBvdGhlciBiaXRzLgorCSAgVGhlIGVuZCByZXN1bHQgaXMgdGhhdCwgb24gYW55IGVuZGlhbiBtYWNoaW5lcywgaXQgaGFzIG5vCisJICBlZmZlY3Qgb3RoZXIgdGhhbiBtb2RpZnlpbmcgaW5fZmxhZ3Mgb24gY29tcGxldGlvbi4KKworCSAgWzRdIFRoZSBkZWZhdWx0IHZhbHVlIG9mIFNFTEVDVCBpcyAoMHhhMHxERVZfYml0fExCQV9iaXQpCisJICBleGNlcHQgZm9yIGZvdXIgZHJpdmVzIHBlciBwb3J0IGNoaXBzZXRzLiAgRm9yIGZvdXIgZHJpdmVzCisJICBwZXIgcG9ydCBjaGlwc2V0cywgaXQncyAoMHhhMHxERVZfYml0fExCQV9iaXQpIGZvciB0aGUgZmlyc3QKKwkgIHBhaXIgYW5kICgweDgwfERFVl9iaXR8TEJBX2JpdCkgZm9yIHRoZSBzZWNvbmQgcGFpci4KKworCSAgWzVdIFRoZSBhcmd1bWVudCB0byB0aGUgaW9jdGwgaXMgYSBwb2ludGVyIHRvIGEgcmVnaW9uIG9mCisJICBtZW1vcnkgY29udGFpbmluZyBhIGlkZV90YXNrX3JlcXVlc3RfdCBzdHJ1Y3R1cmUsIGZvbGxvd2VkCisJICBieSBhbiBvcHRpb25hbCBidWZmZXIgb2YgZGF0YSB0byBiZSB0cmFuc21pdHRlZCB0byB0aGUKKwkgIGRyaXZlLCBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGZyb20KKwkgIHRoZSBkcml2ZS4KKworCSAgQ29tbWFuZCBpcyBwYXNzZWQgdG8gdGhlIGRpc2sgZHJpdmUgdmlhIHRoZSBpZGVfdGFza19yZXF1ZXN0X3QKKwkgIHN0cnVjdHVyZSwgd2hpY2ggY29udGFpbnMgdGhlc2UgZmllbGRzOgorCisJICAgIGlvX3BvcnRzWzhdCQl2YWx1ZXMgZm9yIHRoZSB0YXNrZmlsZSByZWdpc3RlcnMKKwkgICAgaG9iX3BvcnRzWzhdCWhpZ2gtb3JkZXIgYnl0ZXMsIGZvciBleHRlbmRlZCBjb21tYW5kcworCSAgICBvdXRfZmxhZ3MJCWZsYWdzIGluZGljYXRpbmcgd2hpY2ggZW50cmllcyBpbiB0aGUKKwkgICAgCQkJaW9fcG9ydHNbXSBhbmQgaG9iX3BvcnRzW10gYXJyYXlzCisJCQkJY29udGFpbiB2YWxpZCB2YWx1ZXMuICBUeXBlIGlkZV9yZWdfdmFsaWRfdC4KKwkgICAgaW5fZmxhZ3MJCWZsYWdzIGluZGljYXRpbmcgd2hpY2ggZW50cmllcyBpbiB0aGUKKwkgICAgCQkJaW9fcG9ydHNbXSBhbmQgaG9iX3BvcnRzW10gYXJyYXlzCisJCQkJYXJlIGV4cGVjdGVkIHRvIGNvbnRhaW4gdmFsaWQgdmFsdWVzCisJCQkJb24gcmV0dXJuLgorCSAgICBkYXRhX3BoYXNlCQlTZWUgYmVsb3cKKwkgICAgcmVxX2NtZAkJQ29tbWFuZCB0eXBlLCBzZWUgYmVsb3cKKwkgICAgb3V0X3NpemUJCW91dHB1dCAodXNlci0+ZHJpdmUpIGJ1ZmZlciBzaXplLCBieXRlcworCSAgICBpbl9zaXplCQlpbnB1dCAoZHJpdmUtPnVzZXIpIGJ1ZmZlciBzaXplLCBieXRlcworCisJICBXaGVuIG91dF9mbGFncyBpcyB6ZXJvLCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgbG9hZGVkLgorCisJICAgIEhPQl9GRUFUVVJFCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX05TRUNUT1IJCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBMQkE0OAorCSAgICBIT0JfU0VDVE9SCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX0xDWUwJCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBMQkE0OAorCSAgICBIT0JfSENZTAkJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIExCQTQ4CisJICAgIEZFQVRVUkUKKwkgICAgTlNFQ1RPUgorCSAgICBTRUNUT1IKKwkgICAgTENZTAorCSAgICBIQ1lMCisJICAgIFNFTEVDVAkJRmlyc3QsIG1hc2tlZCB3aXRoIDB4RTAgaWYgTEJBNDgsIDB4RUYKKwkJCQlvdGhlcndpc2U7IHRoZW4sIG9yJ2VkIHdpdGggdGhlIGRlZmF1bHQKKwkJCQl2YWx1ZSBvZiBTRUxFQ1QuCisKKwkgIElmIGFueSBiaXQgaW4gb3V0X2ZsYWdzIGlzIHNldCwgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGxvYWRlZC4KKworCSAgICBIT0JfREFUQQkJSWYgb3V0X2ZsYWdzLmIuZGF0YSBpcyBzZXQuICBIT0JfREFUQSB3aWxsCisJCQkJdHJhdmVsIG9uIEREOC1ERDE1IG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKKwkJCQlhbmQgb24gREQwLURENyBvbiBiaWcgZW5kaWFuIG1hY2hpbmVzLgorCSAgICBEQVRBCQlJZiBvdXRfZmxhZ3MuYi5kYXRhIGlzIHNldC4gIERBVEEgd2lsbAorCQkJCXRyYXZlbCBvbiBERDAtREQ3IG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKKwkJCQlhbmQgb24gREQ4LUREMTUgb24gYmlnIGVuZGlhbiBtYWNoaW5lcy4KKwkgICAgSE9CX05TRUNUT1IJCUlmIG91dF9mbGFncy5iLm5zZWN0b3JfaG9iIGlzIHNldAorCSAgICBIT0JfU0VDVE9SCQlJZiBvdXRfZmxhZ3MuYi5zZWN0b3JfaG9iIGlzIHNldAorCSAgICBIT0JfTENZTAkJSWYgb3V0X2ZsYWdzLmIubGN5bF9ob2IgaXMgc2V0CisJICAgIEhPQl9IQ1lMCQlJZiBvdXRfZmxhZ3MuYi5oY3lsX2hvYiBpcyBzZXQKKwkgICAgRkVBVFVSRQkJSWYgb3V0X2ZsYWdzLmIuZmVhdHVyZSBpcyBzZXQKKwkgICAgTlNFQ1RPUgkJSWYgb3V0X2ZsYWdzLmIubnNlY3RvciBpcyBzZXQKKwkgICAgU0VDVE9SCQlJZiBvdXRfZmxhZ3MuYi5zZWN0b3IgaXMgc2V0CisJICAgIExDWUwJCUlmIG91dF9mbGFncy5iLmxjeWwgaXMgc2V0CisJICAgIEhDWUwJCUlmIG91dF9mbGFncy5iLmhjeWwgaXMgc2V0CisJICAgIFNFTEVDVAkJT3InZWQgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBTRUxFQ1QgYW5kCisJCQkJbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygb3V0X2ZsYWdzLmIuc2VsZWN0LgorCisJICBUYXNrZmlsZSByZWdpc3RlcnMgYXJlIHJlYWQgYmFjayBmcm9tIHRoZSBkcml2ZSBpbnRvCisJICB7aW98aG9ifV9wb3J0c1tdIGFmdGVyIHRoZSBjb21tYW5kIGNvbXBsZXRlcyBpZmYgb25lIG9mIHRoZQorCSAgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgbWV0OyBvdGhlcndpc2UsIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKwkgIHdpbGwgYmUgd3JpdHRlbiBiYWNrLCB1bmNoYW5nZWQuCisKKwkgICAgMS4gVGhlIGRyaXZlIGZhaWxzIHRoZSBjb21tYW5kIChFSU8pLgorCSAgICAyLiBPbmUgb3IgbW9yZSB0aGFuIG9uZSBiaXRzIGFyZSBzZXQgaW4gb3V0X2ZsYWdzLgorCSAgICAzLiBUaGUgcmVxdWVzdGVkIGRhdGFfcGhhc2UgaXMgVEFTS0ZJTEVfTk9fREFUQS4KKworCSAgICBIT0JfREFUQQkJSWYgaW5fZmxhZ3MuYi5kYXRhIGlzIHNldC4gIEl0IHdpbGwgY29udGFpbgorCQkJCUREOC1ERDE1IG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMgYW5kCisJCQkJREQwLURENyBvbiBiaWcgZW5kaWFuIG1hY2hpbmVzLgorCSAgICBEQVRBCQlJZiBpbl9mbGFncy5iLmRhdGEgaXMgc2V0LiAgSXQgd2lsbCBjb250YWluCisJCQkJREQwLURENyBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzIGFuZAorCQkJCUREOC1ERDE1IG9uIGJpZyBlbmRpYW4gbWFjaGluZXMuCisJICAgIEhPQl9GRUFUVVJFCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX05TRUNUT1IJCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBMQkE0OAorCSAgICBIT0JfU0VDVE9SCQlJZiB0aGUgZHJpdmUgc3VwcG9ydHMgTEJBNDgKKwkgICAgSE9CX0xDWUwJCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBMQkE0OAorCSAgICBIT0JfSENZTAkJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIExCQTQ4CisJICAgIE5TRUNUT1IKKwkgICAgU0VDVE9SCisJICAgIExDWUwKKwkgICAgSENZTAorCisJICBUaGUgZGF0YV9waGFzZSBmaWVsZCBkZXNjcmliZXMgdGhlIGRhdGEgdHJhbnNmZXIgdG8gYmUKKwkgIHBlcmZvcm1lZC4gIFZhbHVlIGlzIG9uZSBvZjoKKworCSAgICBUQVNLRklMRV9JTgorCSAgICBUQVNLRklMRV9NVUxUSV9JTgorCSAgICBUQVNLRklMRV9PVVQKKwkgICAgVEFTS0ZJTEVfTVVMVElfT1VUCisJICAgIFRBU0tGSUxFX0lOX09VVAorCSAgICBUQVNLRklMRV9JTl9ETUEKKwkgICAgVEFTS0ZJTEVfSU5fRE1BUQkJPT0gSU5fRE1BIChxdWV1ZWluZyBub3Qgc3VwcG9ydGVkKQorCSAgICBUQVNLRklMRV9PVVRfRE1BCisJICAgIFRBU0tGSUxFX09VVF9ETUFRCQk9PSBPVVRfRE1BIChxdWV1ZWluZyBub3Qgc3VwcG9ydGVkKQorCSAgICBUQVNLRklMRV9QX0lOCQl1bmltcGxlbWVudGVkCisJICAgIFRBU0tGSUxFX1BfSU5fRE1BCQl1bmltcGxlbWVudGVkCisJICAgIFRBU0tGSUxFX1BfSU5fRE1BUQkJdW5pbXBsZW1lbnRlZAorCSAgICBUQVNLRklMRV9QX09VVAkJdW5pbXBsZW1lbnRlZAorCSAgICBUQVNLRklMRV9QX09VVF9ETUEJCXVuaW1wbGVtZW50ZWQKKwkgICAgVEFTS0ZJTEVfUF9PVVRfRE1BUQkJdW5pbXBsZW1lbnRlZAorCisJICBUaGUgcmVxX2NtZCBmaWVsZCBjbGFzc2lmaWVzIHRoZSBjb21tYW5kIHR5cGUuICBJdCBtYXkgYmUKKwkgIG9uZSBvZjoKKworCSAgICBJREVfRFJJVkVfVEFTS19OT19EQVRBCisJICAgIElERV9EUklWRV9UQVNLX1NFVF9YRkVSCXVuaW1wbGVtZW50ZWQKKwkgICAgSURFX0RSSVZFX1RBU0tfSU4KKwkgICAgSURFX0RSSVZFX1RBU0tfT1VUCQl1bmltcGxlbWVudGVkCisJICAgIElERV9EUklWRV9UQVNLX1JBV19XUklURQorCisJICBbNl0gRG8gbm90IGFjY2VzcyB7aW58b3V0fV9mbGFncy0+YWxsIGV4Y2VwdCBmb3IgcmVzZXR0aW5nCisJICBhbGwgdGhlIGJpdHMuICBBbHdheXMgYWNjZXNzIGluZGl2aWR1YWwgYml0IGZpZWxkcy4gIC0+YWxsCisJICB2YWx1ZSB3aWxsIGZsaXAgZGVwZW5kaW5nIG9uIGVuZGlhbmVzcy4gIEZvciB0aGUgc2FtZQorCSAgcmVhc29uLCBkbyBub3QgdXNlIElERV97VEFTS0ZJTEV8SE9CfV9TVERfe09VVHxJTn1fRkxBR1MKKwkgIGNvbnN0YW50cyBkZWZpbmVkIGluIGhkcmVnLmguCisKKworCitIRElPX0RSSVZFX0NNRAkJCWV4ZWN1dGUgYSBzcGVjaWFsIGRyaXZlIGNvbW1hbmQKKworCU5vdGU6ICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIGNvcHkgb2YgdGhlIEFOU0kgQVRBIHNwZWNpZmljYXRpb24KKwloYW5keSwgeW91IHNob3VsZCBwcm9iYWJseSBpZ25vcmUgdGhpcyBpb2N0bC4KKworCXVzYWdlOgorCisJICB1OCBhcmdzWzQrWEZFUl9TSVpFXTsKKwkgIC4uLgorCSAgaW9jdGwoZmQsIEhESU9fRFJJVkVfQ01ELCBhcmdzKTsKKworCWlucHV0czoKKworCSAgQ29tbWFuZHMgb3RoZXIgdGhhbiBXSU5fU01BUlQKKwkgICAgYXJnc1swXQlDT01NQU5ECisJICAgIGFyZ3NbMV0JTlNFQ1RPUgorCSAgICBhcmdzWzJdCUZFQVRVUkUKKwkgICAgYXJnc1szXQlOU0VDVE9SCisKKwkgIFdJTl9TTUFSVAorCSAgICBhcmdzWzBdCUNPTU1BTkQKKwkgICAgYXJnc1sxXQlTRUNUT1IKKwkgICAgYXJnc1syXQlGRUFUVVJFCisJICAgIGFyZ3NbM10JTlNFQ1RPUgorCisJb3V0cHV0czoKKworCSAgYXJnc1tdIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCByZWdpc3RlciB2YWx1ZXMgZm9sbG93ZWQgYnkgYW55CisJICBkYXRhIHJldHVybmVkIGJ5IHRoZSBkaXNrLgorCSAgICBhcmdzWzBdCXN0YXR1cworCSAgICBhcmdzWzFdCWVycm9yCisJICAgIGFyZ3NbMl0JTlNFQ1RPUgorCSAgICBhcmdzWzNdCXVuZGVmaW5lZAorCSAgICBhcmdzWzQrXQlOU0VDVE9SICogNTEyIGJ5dGVzIG9mIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGNvbW1hbmQuCisKKwllcnJvciByZXR1cm5zOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX1JBV0lPCisJICBFTk9NRU0JVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGFzaworCSAgRUlPCQlEcml2ZSByZXBvcnRzIGVycm9yCisKKwlub3RlczoKKworCSAgWzFdIEZvciBjb21tYW5kcyBvdGhlciB0aGFuIFdJTl9TTUFSVCwgYXJnc1sxXSBzaG91bGQgZXF1YWwKKwkgIGFyZ3NbM10uICBTRUNUT1IsIExDWUwgYW5kIEhDWUwgYXJlIHVuZGVmaW5lZC4gIEZvcgorCSAgV0lOX1NNQVJULCAweDRmIGFuZCAweGMyIGFyZSBsb2FkZWQgaW50byBMQ1lMIGFuZCBIQ1lMCisJICByZXNwZWN0aXZlbHkuICBJbiBib3RoIGNhc2VzIFNFTEVDVCB3aWxsIGNvbnRhaW4gdGhlIGRlZmF1bHQKKwkgIHZhbHVlIGZvciB0aGUgZHJpdmUuICBQbGVhc2UgcmVmZXIgdG8gSERJT19EUklWRV9UQVNLRklMRQorCSAgbm90ZXMgZm9yIHRoZSBkZWZhdWx0IHZhbHVlIG9mIFNFTEVDVC4KKworCSAgWzJdIElmIE5TRUNUT1IgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZSBkcml2ZSBzZXRzCisJICBEUlEgd2hlbiBpbnRlcnJ1cHRpbmcgZm9yIHRoZSBjb21tYW5kLCBOU0VDVE9SICogNTEyIGJ5dGVzCisJICBhcmUgcmVhZCBmcm9tIHRoZSBkZXZpY2UgaW50byB0aGUgYXJlYSBmb2xsb3dpbmcgTlNFQ1RPUi4KKwkgIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgYXJlYSB3b3VsZCBiZQorCSAgYXJnc1s0Li40K1hGRVJfU0laRV0uICAxNmJpdCBQSU8gaXMgdXNlZCByZWdhcmRsZXNzIG9mCisJICBIRElPX1NFVF8zMkJJVCBzZXR0aW5nLgorCisJICBbM10gSWYgQ09NTUFORCA9PSBXSU5fU0VURkVBVFVSRVMgJiYgRkVBVFVSRSA9PSBTRVRGRUFUVVJFU19YRkVSCisJICAmJiBOU0VDVE9SID49IFhGRVJfU1dfRE1BXzAgJiYgdGhlIGRyaXZlIHN1cHBvcnRzIGFueSBETUEKKwkgIG1vZGUsIElERSBkcml2ZXIgd2lsbCB0cnkgdG8gdHVuZSB0aGUgdHJhbnNmZXIgbW9kZSBvZiB0aGUKKwkgIGRyaXZlIGFjY29yZGluZ2x5LgorCisKKworSERJT19EUklWRV9UQVNLCQkJZXhlY3V0ZSB0YXNrIGFuZCBzcGVjaWFsIGRyaXZlIGNvbW1hbmQKKworCU5vdGU6ICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIGNvcHkgb2YgdGhlIEFOU0kgQVRBIHNwZWNpZmljYXRpb24KKwloYW5keSwgeW91IHNob3VsZCBwcm9iYWJseSBpZ25vcmUgdGhpcyBpb2N0bC4KKworCXVzYWdlOgorCisJICB1OCBhcmdzWzddOworCSAgLi4uCisJICBpb2N0bChmZCwgSERJT19EUklWRV9UQVNLLCBhcmdzKTsKKworCWlucHV0czoKKworCSAgVGFza2ZpbGUgcmVnaXN0ZXIgdmFsdWVzOgorCSAgICBhcmdzWzBdCUNPTU1BTkQKKwkgICAgYXJnc1sxXQlGRUFUVVJFCisJICAgIGFyZ3NbMl0JTlNFQ1RPUgorCSAgICBhcmdzWzNdCVNFQ1RPUgorCSAgICBhcmdzWzRdCUxDWUwKKwkgICAgYXJnc1s1XQlIQ1lMCisJICAgIGFyZ3NbNl0JU0VMRUNUCisKKwlvdXRwdXRzOgorCisJICBUYXNrZmlsZSByZWdpc3RlciB2YWx1ZXM6CisJICAgIGFyZ3NbMF0Jc3RhdHVzCisJICAgIGFyZ3NbMV0JZXJyb3IKKwkgICAgYXJnc1syXQlOU0VDVE9SCisJICAgIGFyZ3NbM10JU0VDVE9SCisJICAgIGFyZ3NbNF0JTENZTAorCSAgICBhcmdzWzVdCUhDWUwKKwkgICAgYXJnc1s2XQlTRUxFQ1QKKworCWVycm9yIHJldHVybnM6CisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfUkFXSU8KKwkgIEVOT01FTQlVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0YXNrCisJICBFTk9NU0cJRGV2aWNlIGlzIG5vdCBhIGRpc2sgZHJpdmUuCisJICBFSU8JCURyaXZlIGZhaWxlZCB0aGUgY29tbWFuZC4KKworCW5vdGVzOgorCisJICBbMV0gREVWIGJpdCAoMHgxMCkgb2YgU0VMRUNUIHJlZ2lzdGVyIGlzIGlnbm9yZWQgYW5kIHRoZQorCSAgYXBwcm9wcmlhdGUgdmFsdWUgZm9yIHRoZSBkcml2ZSBpcyB1c2VkLiAgQWxsIG90aGVyIGJpdHMKKwkgIGFyZSB1c2VkIHVuYWx0ZXJlZC4KKworCisKK0hESU9fRFJJVkVfQ01EX0FFQgkJSERJT19EUklWRV9UQVNLCisKKwlOb3QgaW1wbGVtZW50ZWQsIGFzIG9mIDIuNi44LjEKKworCisKK0hESU9fU0VUXzMyQklUCQkJY2hhbmdlIGlvXzMyYml0IGZsYWdzCisKKwl1c2FnZToKKworCSAgaW50IHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF8zMkJJVCwgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3IgaW9fMzJiaXQgZmxhZworCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDNdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCisKK0hESU9fU0VUX05PV0VSUgkJCWNoYW5nZSBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZworCisJdXNhZ2U6CisKKwkgIGludCB2YWw7CisJICBpb2N0bChmZCwgSERJT19TRVRfTk9XRVJSLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IHZhbHVlIGZvciBpZ25vcmUtd3JpdGUtZXJyb3IgZmxhZy4gIFVzZWQgZm9yIGlnbm9yaW5nCisJICBXUkVSUl9TVEFUCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMV0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKworCisKK0hESU9fU0VUX0RNQQkJCWNoYW5nZSB1c2UtZG1hIGZsYWcKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9ETUEsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIHVzZS1kbWEgZmxhZworCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDFdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCitIRElPX1NFVF9QSU9fTU9ERQkJcmVjb25maWcgaW50ZXJmYWNlIHRvIG5ldyBzcGVlZAorCisJdXNhZ2U6CisKKwkgIGxvbmcgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX1BJT19NT0RFLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IGludGVyZmFjZSBzcGVlZC4KKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBbMCAyNTVdCisJICBFQlVTWQkJQ29udHJvbGxlciBidXN5CisKKworCitIRElPX1NDQU5fSFdJRgkJCXJlZ2lzdGVyIGFuZCAocmUpc2NhbiBpbnRlcmZhY2UKKworCXVzYWdlOgorCisJICBpbnQgYXJnc1szXQorCSAgLi4uCisJICBpb2N0bChmZCwgSERJT19TQ0FOX0hXSUYsIGFyZ3MpOworCisJaW5wdXRzOgorCSAgYXJnc1swXQlpbyBhZGRyZXNzIHRvIHByb2JlCisJICBhcmdzWzFdCWNvbnRyb2wgYWRkcmVzcyB0byBwcm9iZQorCSAgYXJnc1syXQlpcnEgbnVtYmVyCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm5zOgorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX1JBV0lPCisJICBFSU8JCVByb2JlIGZhaWxlZC4KKworCW5vdGVzOgorCisJICBUaGlzIGlvY3RsIGluaXRpYWxpemVzIHRoZSBhZGRyZXNzZXMgYW5kIGlycSBmb3IgYSBkaXNrCisJICBjb250cm9sbGVyLCBwcm9iZXMgZm9yIGRyaXZlcywgYW5kIGNyZWF0ZXMgL3Byb2MvaWRlCisJICBpbnRlcmZhY2VzIGFzIGFwcHJvcGlhdGUuCisKKworCitIRElPX1VOUkVHSVNURVJfSFdJRgkJdW5yZWdpc3RlciBpbnRlcmZhY2UKKworCXVzYWdlOgorCisJICBpbnQgaW5kZXg7CisJICBpb2N0bChmZCwgSERJT19VTlJFR0lTVEVSX0hXSUYsIGluZGV4KTsKKworCWlucHV0czoKKwkgIGluZGV4CQlpbmRleCBvZiBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gdW5yZWdpc3RlcgorCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuczoKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19SQVdJTworCisJbm90ZXM6CisKKwkgIFRoaXMgaW9jdGwgcmVtb3ZlcyBhIGhhcmR3YXJlIGludGVyZmFjZSBmcm9tIHRoZSBrZXJuZWwuCisKKwkgIEN1cnJlbnRseSAoMi42LjgpIHRoaXMgaW9jdGwgc2lsZW50bHkgZmFpbHMgaWYgYW55IGRyaXZlIG9uCisJICB0aGUgaW50ZXJmYWNlIGlzIGJ1c3kuCisKKworCitIRElPX1NFVF9XQ0FDSEUJCQljaGFuZ2Ugd3JpdGUgY2FjaGUgZW5hYmxlLWRpc2FibGUKKworCXVzYWdlOgorCisJICBpbnQgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX1dDQUNIRSwgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3Igd3JpdGUgY2FjaGUgZW5hYmxlCisKKwlvdXRwdXRzOglub25lCisKKwllcnJvciByZXR1cm46CisJICBFSU5WQUwJKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIChub3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMpCisJICBFQUNDRVMJQWNjZXNzIGRlbmllZDogIHJlcXVpcmVzIENBUF9TWVNfQURNSU4KKwkgIEVJTlZBTAl2YWx1ZSBvdXQgb2YgcmFuZ2UgWzAgMV0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKworCisKK0hESU9fU0VUX0FDT1VTVElDCQljaGFuZ2UgYWNvdXN0aWMgYmVoYXZpb3IKKworCXVzYWdlOgorCisJICBpbnQgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX0FDT1VTVElDLCB2YWwpOworCisJaW5wdXRzOgorCSAgTmV3IHZhbHVlIGZvciBkcml2ZSBhY291c3RpYyBzZXR0aW5ncworCisJb3V0cHV0czoJbm9uZQorCisJZXJyb3IgcmV0dXJuOgorCSAgRUlOVkFMCShiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSAobm90IHN1cmUgd2hhdCB0aGlzIG1lYW5zKQorCSAgRUFDQ0VTCUFjY2VzcyBkZW5pZWQ6ICByZXF1aXJlcyBDQVBfU1lTX0FETUlOCisJICBFSU5WQUwJdmFsdWUgb3V0IG9mIHJhbmdlIFswIDI1NF0KKwkgIEVCVVNZCQlDb250cm9sbGVyIGJ1c3kKKworCisKK0hESU9fU0VUX1FETUEJCQljaGFuZ2UgdXNlLXFkbWEgZmxhZworCisJTm90IGltcGxlbWVudGVkLCBhcyBvZiAyLjYuOC4xCisKKworCitIRElPX1NFVF9BRERSRVNTCQljaGFuZ2UgbGJhIGFkZHJlc3NpbmcgbW9kZXMKKworCXVzYWdlOgorCisJICBpbnQgdmFsOworCSAgaW9jdGwoZmQsIEhESU9fU0VUX0FERFJFU1MsIHZhbCk7CisKKwlpbnB1dHM6CisJICBOZXcgdmFsdWUgZm9yIGFkZHJlc3NpbmcgbW9kZQorCSAgICAwID0gMjgtYml0CisJICAgIDEgPSA0OC1iaXQKKwkgICAgMiA9IDQ4LWJpdCBkb2luZyAyOC1iaXQKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBbMCAyXQorCSAgRUJVU1kJCUNvbnRyb2xsZXIgYnVzeQorCSAgRUlPCQlEcml2ZSBkb2VzIG5vdCBzdXBwb3J0IGxiYTQ4IG1vZGUuCisKKworSERJT19TRVRfSURFX1NDU0kKKworCXVzYWdlOgorCisJICBsb25nIHZhbDsKKwkgIGlvY3RsKGZkLCBIRElPX1NFVF9JREVfU0NTSSwgdmFsKTsKKworCWlucHV0czoKKwkgIE5ldyB2YWx1ZSBmb3Igc2NzaSBlbXVsYXRpb24gbW9kZSAoPykKKworCW91dHB1dHM6CW5vbmUKKworCWVycm9yIHJldHVybjoKKwkgIEVJTlZBTAkoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgKG5vdCBzdXJlIHdoYXQgdGhpcyBtZWFucykKKwkgIEVBQ0NFUwlBY2Nlc3MgZGVuaWVkOiAgcmVxdWlyZXMgQ0FQX1NZU19BRE1JTgorCSAgRUlOVkFMCXZhbHVlIG91dCBvZiByYW5nZSBbMCAxXQorCSAgRUJVU1kJCUNvbnRyb2xsZXIgYnVzeQorCisKKworSERJT19TRVRfU0NTSV9JREUKKworCU5vdCBpbXBsZW1lbnRlZCwgYXMgb2YgMi42LjguMQorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2lvc3RhdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lvc3RhdHMudHh0CkBAIC0wLDAgKzEsMTUwIEBACitJL08gc3RhdGlzdGljcyBmaWVsZHMKKy0tLS0tLS0tLS0tLS0tLQorCitMYXN0IG1vZGlmaWVkIFNlcCAzMCwgMjAwMworCitTaW5jZSAyLjQuMjAgKGFuZCBzb21lIHZlcnNpb25zIGJlZm9yZSwgd2l0aCBwYXRjaGVzKSwgYW5kIDIuNS40NSwKK21vcmUgZXh0ZW5zaXZlIGRpc2sgc3RhdGlzdGljcyBoYXZlIGJlZW4gaW50cm9kdWNlZCB0byBoZWxwIG1lYXN1cmUgZGlzaworYWN0aXZpdHkuIFRvb2xzIHN1Y2ggYXMgc2FyIGFuZCBpb3N0YXQgdHlwaWNhbGx5IGludGVycHJldCB0aGVzZSBhbmQgZG8KK3RoZSB3b3JrIGZvciB5b3UsIGJ1dCBpbiBjYXNlIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBjcmVhdGluZyB5b3VyIG93bgordG9vbHMsIHRoZSBmaWVsZHMgYXJlIGV4cGxhaW5lZCBoZXJlLgorCitJbiAyLjQgbm93LCB0aGUgaW5mb3JtYXRpb24gaXMgZm91bmQgYXMgYWRkaXRpb25hbCBmaWVsZHMgaW4KKy9wcm9jL3BhcnRpdGlvbnMuICBJbiAyLjYsIHRoZSBzYW1lIGluZm9ybWF0aW9uIGlzIGZvdW5kIGluIHR3bworcGxhY2VzOiBvbmUgaXMgaW4gdGhlIGZpbGUgL3Byb2MvZGlza3N0YXRzLCBhbmQgdGhlIG90aGVyIGlzIHdpdGhpbgordGhlIHN5c2ZzIGZpbGUgc3lzdGVtLCB3aGljaCBtdXN0IGJlIG1vdW50ZWQgaW4gb3JkZXIgdG8gb2J0YWluCit0aGUgaW5mb3JtYXRpb24uIFRocm91Z2hvdXQgdGhpcyBkb2N1bWVudCB3ZSdsbCBhc3N1bWUgdGhhdCBzeXNmcworaXMgbW91bnRlZCBvbiAvc3lzLCBhbHRob3VnaCBvZiBjb3Vyc2UgaXQgbWF5IGJlIG1vdW50ZWQgYW55d2hlcmUuCitCb3RoIC9wcm9jL2Rpc2tzdGF0cyBhbmQgc3lzZnMgdXNlIHRoZSBzYW1lIHNvdXJjZSBmb3IgdGhlIGluZm9ybWF0aW9uCithbmQgc28gc2hvdWxkIG5vdCBkaWZmZXIuCisKK0hlcmUgYXJlIGV4YW1wbGVzIG9mIHRoZXNlIGRpZmZlcmVudCBmb3JtYXRzOgorCisyLjQ6CisgICAzICAgICAwICAgMzkwODI2ODAgaGRhIDQ0NjIxNiA3ODQ5MjYgOTU1MDY4OCA0MzgyMzEwIDQyNDg0NyAzMTI3MjYgNTkyMjA1MiAxOTMxMDM4MCAwIDMzNzYzNDAgMjM3MDUxNjAKKyAgIDMgICAgIDEgICAgOTIyMTI3OCBoZGExIDM1NDg2IDAgMzU0OTYgMzgwMzAgMCAwIDAgMCAwIDM4MDMwIDM4MDMwCisKKworMi42IHN5c2ZzOgorICAgNDQ2MjE2IDc4NDkyNiA5NTUwNjg4IDQzODIzMTAgNDI0ODQ3IDMxMjcyNiA1OTIyMDUyIDE5MzEwMzgwIDAgMzM3NjM0MCAyMzcwNTE2MAorICAgMzU0ODYgICAgMzgwMzAgICAgMzgwMzAgICAgMzgwMzAKKworMi42IGRpc2tzdGF0czoKKyAgIDMgICAgMCAgIGhkYSA0NDYyMTYgNzg0OTI2IDk1NTA2ODggNDM4MjMxMCA0MjQ4NDcgMzEyNzI2IDU5MjIwNTIgMTkzMTAzODAgMCAzMzc2MzQwIDIzNzA1MTYwCisgICAzICAgIDEgICBoZGExIDM1NDg2IDM4MDMwIDM4MDMwIDM4MDMwCisKK09uIDIuNCB5b3UgbWlnaHQgZXhlY3V0ZSAiZ3JlcCAnaGRhICcgL3Byb2MvcGFydGl0aW9ucyIuIE9uIDIuNiwgeW91IGhhdmUKK2EgY2hvaWNlIG9mICJjYXQgL3N5cy9ibG9jay9oZGEvc3RhdCIgb3IgImdyZXAgJ2hkYSAnIC9wcm9jL2Rpc2tzdGF0cyIuCitUaGUgYWR2YW50YWdlIG9mIG9uZSBvdmVyIHRoZSBvdGhlciBpcyB0aGF0IHRoZSBzeXNmcyBjaG9pY2Ugd29ya3Mgd2VsbAoraWYgeW91IGFyZSB3YXRjaGluZyBhIGtub3duLCBzbWFsbCBzZXQgb2YgZGlza3MuICAvcHJvYy9kaXNrc3RhdHMgbWF5CitiZSBhIGJldHRlciBjaG9pY2UgaWYgeW91IGFyZSB3YXRjaGluZyBhIGxhcmdlIG51bWJlciBvZiBkaXNrcyBiZWNhdXNlCit5b3UnbGwgYXZvaWQgdGhlIG92ZXJoZWFkIG9mIDUwLCAxMDAsIG9yIDUwMCBvciBtb3JlIG9wZW5zL2Nsb3NlcyB3aXRoCitlYWNoIHNuYXBzaG90IG9mIHlvdXIgZGlzayBzdGF0aXN0aWNzLgorCitJbiAyLjQsIHRoZSBzdGF0aXN0aWNzIGZpZWxkcyBhcmUgdGhvc2UgYWZ0ZXIgdGhlIGRldmljZSBuYW1lLiBJbgordGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBmaXJzdCBmaWVsZCBvZiBzdGF0aXN0aWNzIHdvdWxkIGJlIDQ0NjIxNi4KK0J5IGNvbnRyYXN0LCBpbiAyLjYgaWYgeW91IGxvb2sgYXQgL3N5cy9ibG9jay9oZGEvc3RhdCwgeW91J2xsCitmaW5kIGp1c3QgdGhlIGVsZXZlbiBmaWVsZHMsIGJlZ2lubmluZyB3aXRoIDQ0NjIxNi4gIElmIHlvdSBsb29rIGF0CisvcHJvYy9kaXNrc3RhdHMsIHRoZSBlbGV2ZW4gZmllbGRzIHdpbGwgYmUgcHJlY2VkZWQgYnkgdGhlIG1ham9yIGFuZAorbWlub3IgZGV2aWNlIG51bWJlcnMsIGFuZCBkZXZpY2UgbmFtZS4gIEVhY2ggb2YgdGhlc2UgZm9ybWF0cyBwcm92aWRlCitlbGV2ZW4gZmllbGRzIG9mIHN0YXRpc3RpY3MsIGVhY2ggbWVhbmluZyBleGFjdGx5IHRoZSBzYW1lIHRoaW5ncy4KK0FsbCBmaWVsZHMgZXhjZXB0IGZpZWxkIDkgYXJlIGN1bXVsYXRpdmUgc2luY2UgYm9vdC4gIEZpZWxkIDkgc2hvdWxkCitnbyB0byB6ZXJvIGFzIEkvT3MgY29tcGxldGU7IGFsbCBvdGhlcnMgb25seSBpbmNyZWFzZS4gIFllcywgdGhlc2UgYXJlCiszMiBiaXQgdW5zaWduZWQgbnVtYmVycywgYW5kIG9uIGEgdmVyeSBidXN5IG9yIGxvbmctbGl2ZWQgc3lzdGVtIHRoZXkKK21heSB3cmFwLiBBcHBsaWNhdGlvbnMgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0OyB1bmxlc3MKK3lvdXIgb2JzZXJ2YXRpb25zIGFyZSBtZWFzdXJlZCBpbiBsYXJnZSBudW1iZXJzIG9mIG1pbnV0ZXMgb3IgaG91cnMsCit0aGV5IHNob3VsZCBub3Qgd3JhcCB0d2ljZSBiZWZvcmUgeW91IG5vdGljZSB0aGVtLgorCitFYWNoIHNldCBvZiBzdGF0cyBvbmx5IGFwcGxpZXMgdG8gdGhlIGluZGljYXRlZCBkZXZpY2U7IGlmIHlvdSB3YW50CitzeXN0ZW0td2lkZSBzdGF0cyB5b3UnbGwgaGF2ZSB0byBmaW5kIGFsbCB0aGUgZGV2aWNlcyBhbmQgc3VtIHRoZW0gYWxsIHVwLgorCitGaWVsZCAgMSAtLSAjIG9mIHJlYWRzIGlzc3VlZAorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiByZWFkcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorRmllbGQgIDIgLS0gIyBvZiByZWFkcyBtZXJnZWQsIGZpZWxkIDYgLS0gIyBvZiB3cml0ZXMgbWVyZ2VkCisgICAgUmVhZHMgYW5kIHdyaXRlcyB3aGljaCBhcmUgYWRqYWNlbnQgdG8gZWFjaCBvdGhlciBtYXkgYmUgbWVyZ2VkIGZvcgorICAgIGVmZmljaWVuY3kuICBUaHVzIHR3byA0SyByZWFkcyBtYXkgYmVjb21lIG9uZSA4SyByZWFkIGJlZm9yZSBpdCBpcworICAgIHVsdGltYXRlbHkgaGFuZGVkIHRvIHRoZSBkaXNrLCBhbmQgc28gaXQgd2lsbCBiZSBjb3VudGVkIChhbmQgcXVldWVkKQorICAgIGFzIG9ubHkgb25lIEkvTy4gIFRoaXMgZmllbGQgbGV0cyB5b3Uga25vdyBob3cgb2Z0ZW4gdGhpcyB3YXMgZG9uZS4KK0ZpZWxkICAzIC0tICMgb2Ygc2VjdG9ycyByZWFkCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgcmVhZCBzdWNjZXNzZnVsbHkuCitGaWVsZCAgNCAtLSAjIG9mIG1pbGxpc2Vjb25kcyBzcGVudCByZWFkaW5nCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzcGVudCBieSBhbGwgcmVhZHMgKGFzCisgICAgbWVhc3VyZWQgZnJvbSBfX21ha2VfcmVxdWVzdCgpIHRvIGVuZF90aGF0X3JlcXVlc3RfbGFzdCgpKS4KK0ZpZWxkICA1IC0tICMgb2Ygd3JpdGVzIGNvbXBsZXRlZAorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB3cml0ZXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KK0ZpZWxkICA3IC0tICMgb2Ygc2VjdG9ycyB3cml0dGVuCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgd3JpdHRlbiBzdWNjZXNzZnVsbHkuCitGaWVsZCAgOCAtLSAjIG9mIG1pbGxpc2Vjb25kcyBzcGVudCB3cml0aW5nCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzcGVudCBieSBhbGwgd3JpdGVzIChhcworICAgIG1lYXN1cmVkIGZyb20gX19tYWtlX3JlcXVlc3QoKSB0byBlbmRfdGhhdF9yZXF1ZXN0X2xhc3QoKSkuCitGaWVsZCAgOSAtLSAjIG9mIEkvT3MgY3VycmVudGx5IGluIHByb2dyZXNzCisgICAgVGhlIG9ubHkgZmllbGQgdGhhdCBzaG91bGQgZ28gdG8gemVyby4gSW5jcmVtZW50ZWQgYXMgcmVxdWVzdHMgYXJlCisgICAgZ2l2ZW4gdG8gYXBwcm9wcmlhdGUgcmVxdWVzdF9xdWV1ZV90IGFuZCBkZWNyZW1lbnRlZCBhcyB0aGV5IGZpbmlzaC4KK0ZpZWxkIDEwIC0tICMgb2YgbWlsbGlzZWNvbmRzIHNwZW50IGRvaW5nIEkvT3MKKyAgICBUaGlzIGZpZWxkIGlzIGluY3JlYXNlcyBzbyBsb25nIGFzIGZpZWxkIDkgaXMgbm9uemVyby4KK0ZpZWxkIDExIC0tIHdlaWdodGVkICMgb2YgbWlsbGlzZWNvbmRzIHNwZW50IGRvaW5nIEkvT3MKKyAgICBUaGlzIGZpZWxkIGlzIGluY3JlbWVudGVkIGF0IGVhY2ggSS9PIHN0YXJ0LCBJL08gY29tcGxldGlvbiwgSS9PCisgICAgbWVyZ2UsIG9yIHJlYWQgb2YgdGhlc2Ugc3RhdHMgYnkgdGhlIG51bWJlciBvZiBJL09zIGluIHByb2dyZXNzCisgICAgKGZpZWxkIDkpIHRpbWVzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNwZW50IGRvaW5nIEkvTyBzaW5jZSB0aGUKKyAgICBsYXN0IHVwZGF0ZSBvZiB0aGlzIGZpZWxkLiAgVGhpcyBjYW4gcHJvdmlkZSBhbiBlYXN5IG1lYXN1cmUgb2YgYm90aAorICAgIEkvTyBjb21wbGV0aW9uIHRpbWUgYW5kIHRoZSBiYWNrbG9nIHRoYXQgbWF5IGJlIGFjY3VtdWxhdGluZy4KKworCitUbyBhdm9pZCBpbnRyb2R1Y2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgbm8gbG9ja3MgYXJlIGhlbGQgd2hpbGUKK21vZGlmeWluZyB0aGVzZSBjb3VudGVycy4gIFRoaXMgaW1wbGllcyB0aGF0IG1pbm9yIGluYWNjdXJhY2llcyBtYXkgYmUKK2ludHJvZHVjZWQgd2hlbiBjaGFuZ2VzIGNvbGxpZGUsIHNvIChmb3IgaW5zdGFuY2UpIGFkZGluZyB1cCBhbGwgdGhlCityZWFkIEkvT3MgaXNzdWVkIHBlciBwYXJ0aXRpb24gc2hvdWxkIGVxdWFsIHRob3NlIG1hZGUgdG8gdGhlIGRpc2tzIC4uLgorYnV0IGR1ZSB0byB0aGUgbGFjayBvZiBsb2NraW5nIGl0IG1heSBvbmx5IGJlIHZlcnkgY2xvc2UuCisKK0luIDIuNiwgdGhlcmUgYXJlIGNvdW50ZXJzIGZvciBlYWNoIGNwdSwgd2hpY2ggbWFkZSB0aGUgbGFjayBvZiBsb2NraW5nCithbG1vc3QgYSBub24taXNzdWUuICBXaGVuIHRoZSBzdGF0aXN0aWNzIGFyZSByZWFkLCB0aGUgcGVyLWNwdSBjb3VudGVycworYXJlIHN1bW1lZCAocG9zc2libHkgb3ZlcmZsb3dpbmcgdGhlIHVuc2lnbmVkIDMyLWJpdCB2YXJpYWJsZSB0aGV5IGFyZQorc3VtbWVkIHRvKSBhbmQgdGhlIHJlc3VsdCBnaXZlbiB0byB0aGUgdXNlci4gIFRoZXJlIGlzIG5vIGNvbnZlbmllbnQKK3VzZXIgaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgdGhlIHBlci1jcHUgY291bnRlcnMgdGhlbXNlbHZlcy4KKworRGlza3MgdnMgUGFydGl0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSB3ZXJlIHNpZ25pZmljYW50IGNoYW5nZXMgYmV0d2VlbiAyLjQgYW5kIDIuNiBpbiB0aGUgSS9PIHN1YnN5c3RlbS4KK0FzIGEgcmVzdWx0LCBzb21lIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNhcHBlYXJlZC4gVGhlIHRyYW5zbGF0aW9uIGZyb20KK2EgZGlzayBhZGRyZXNzIHJlbGF0aXZlIHRvIGEgcGFydGl0aW9uIHRvIHRoZSBkaXNrIGFkZHJlc3MgcmVsYXRpdmUgdG8KK3RoZSBob3N0IGRpc2sgaGFwcGVucyBtdWNoIGVhcmxpZXIuICBBbGwgbWVyZ2VzIGFuZCB0aW1pbmdzIG5vdyBoYXBwZW4KK2F0IHRoZSBkaXNrIGxldmVsIHJhdGhlciB0aGFuIGF0IGJvdGggdGhlIGRpc2sgYW5kIHBhcnRpdGlvbiBsZXZlbCBhcworaW4gMi40LiAgQ29uc2VxdWVudGx5LCB5b3UnbGwgc2VlIGEgZGlmZmVyZW50IHN0YXRpc3RpY3Mgb3V0cHV0IG9uIDIuNiBmb3IKK3BhcnRpdGlvbnMgZnJvbSB0aGF0IGZvciBkaXNrcy4gIFRoZXJlIGFyZSBvbmx5ICpmb3VyKiBmaWVsZHMgYXZhaWxhYmxlCitmb3IgcGFydGl0aW9ucyBvbiAyLjYgbWFjaGluZXMuICBUaGlzIGlzIHJlZmxlY3RlZCBpbiB0aGUgZXhhbXBsZXMgYWJvdmUuCisKK0ZpZWxkICAxIC0tICMgb2YgcmVhZHMgaXNzdWVkCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJlYWRzIGlzc3VlZCB0byB0aGlzIHBhcnRpdGlvbi4KK0ZpZWxkICAyIC0tICMgb2Ygc2VjdG9ycyByZWFkCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgcmVxdWVzdGVkIHRvIGJlIHJlYWQgZnJvbSB0aGlzCisgICAgcGFydGl0aW9uLgorRmllbGQgIDMgLS0gIyBvZiB3cml0ZXMgaXNzdWVkCisgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHdyaXRlcyBpc3N1ZWQgdG8gdGhpcyBwYXJ0aXRpb24uCitGaWVsZCAgNCAtLSAjIG9mIHNlY3RvcnMgd3JpdHRlbgorICAgIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzIHJlcXVlc3RlZCB0byBiZSB3cml0dGVuIHRvCisgICAgdGhpcyBwYXJ0aXRpb24uCisKK05vdGUgdGhhdCBzaW5jZSB0aGUgYWRkcmVzcyBpcyB0cmFuc2xhdGVkIHRvIGEgZGlzay1yZWxhdGl2ZSBvbmUsIGFuZCBubworcmVjb3JkIG9mIHRoZSBwYXJ0aXRpb24tcmVsYXRpdmUgYWRkcmVzcyBpcyBrZXB0LCB0aGUgc3Vic2VxdWVudCBzdWNjZXNzCitvciBmYWlsdXJlIG9mIHRoZSByZWFkIGNhbm5vdCBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBwYXJ0aXRpb24uICBJbiBvdGhlcgord29yZHMsIHRoZSBudW1iZXIgb2YgcmVhZHMgZm9yIHBhcnRpdGlvbnMgaXMgY291bnRlZCBzbGlnaHRseSBiZWZvcmUgdGltZQorb2YgcXVldWluZyBmb3IgcGFydGl0aW9ucywgYW5kIGF0IGNvbXBsZXRpb24gZm9yIHdob2xlIGRpc2tzLiAgVGhpcyBpcworYSBzdWJ0bGUgZGlzdGluY3Rpb24gdGhhdCBpcyBwcm9iYWJseSB1bmludGVyZXN0aW5nIGZvciBtb3N0IGNhc2VzLgorCitBZGRpdGlvbmFsIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tCisKK0luIDIuNiwgc3lzZnMgaXMgbm90IG1vdW50ZWQgYnkgZGVmYXVsdC4gIElmIHlvdXIgZGlzdHJpYnV0aW9uIG9mCitMaW51eCBoYXNuJ3QgYWRkZWQgaXQgYWxyZWFkeSwgaGVyZSdzIHRoZSBsaW5lIHlvdSdsbCB3YW50IHRvIGFkZCB0bworeW91ciAvZXRjL2ZzdGFiOgorCitub25lIC9zeXMgc3lzZnMgZGVmYXVsdHMgMCAwCisKKworSW4gMi42LCBhbGwgZGlzayBzdGF0aXN0aWNzIHdlcmUgcmVtb3ZlZCBmcm9tIC9wcm9jL3N0YXQuICBJbiAyLjQsIHRoZXkKK2FwcGVhciBpbiBib3RoIC9wcm9jL3BhcnRpdGlvbnMgYW5kIC9wcm9jL3N0YXQsIGFsdGhvdWdoIHRoZSBvbmVzIGluCisvcHJvYy9zdGF0IHRha2UgYSB2ZXJ5IGRpZmZlcmVudCBmb3JtYXQgZnJvbSB0aG9zZSBpbiAvcHJvYy9wYXJ0aXRpb25zCisoc2VlIHByb2MoNSksIGlmIHlvdXIgc3lzdGVtIGhhcyBpdC4pCisKKy0tIHJpY2tsaW5kQHVzLmlibS5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNhcG5wLnR4dCBiL0RvY3VtZW50YXRpb24vaXNhcG5wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDBkMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2FwbnAudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0lTQSBQbHVnICYgUGxheSBzdXBwb3J0IGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50ZXJmYWNlIC9wcm9jL2lzYXBucAorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaW50ZXJmYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNlZSBwbnAudHh0IGZvciBtb3JlIGRldGFpbHMuCisKK0ludGVyZmFjZSAvcHJvYy9idXMvaXNhcG5wCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBhbGxvd3MgYWNjZXNzIHRvIElTQSBQblAgY2FyZHMgYW5kIGxvZ2ljYWwgZGV2aWNlcy4KK1RoZSByZWd1bGFyIGZpbGVzIGNvbnRhaW4gdGhlIGNvbnRlbnRzIG9mIElTQSBQblAgcmVnaXN0ZXJzIGZvcgorYSBsb2dpY2FsIGRldmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vaXNkbi8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmVlNWYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuLzAwLUlOREVYCkBAIC0wLDAgKzEsNDMgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUgKGluZm8gb24gSVNETiBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXgpCitDUkVESVRTCisJLSBsaXN0IG9mIHRoZSBraW5kIGZvbGtzIHRoYXQgYnJvdWdodCB5b3UgdGhpcyBzdHVmZi4KK0lOVEVSRkFDRQorCS0gZGVzY3JpcHRpb24gb2YgTGlua2xldmVsIGFuZCBIYXJkd2FyZWxldmVsIElTRE4gaW50ZXJmYWNlLgorUkVBRE1FCisJLSBnZW5lcmFsIGluZm8gb24gd2hhdCB5b3UgbmVlZCBhbmQgd2hhdCB0byBkbyBmb3IgTGludXggSVNETi4KK1JFQURNRS5GQVEKKwktIGdlbmVyYWwgaW5mbyBmb3IgRkFRLgorUkVBRE1FLmF1ZGlvCisJLSBpbmZvIGZvciBydW5uaW5nIGF1ZGlvIG92ZXIgSVNETi4KK1JFQURNRS5mYXgKKwktIGluZm8gZm9yIHVzaW5nIEZheCBvdmVyIElTRE4uCitSRUFETUUuaWNuCisJLSBpbmZvIG9uIHRoZSBJQ04tSVNETi1jYXJkIGFuZCBpdHMgZHJpdmVyLgorUkVBRE1FLkhpU2F4CisJLSBpbmZvIG9uIHRoZSBIaVNheCBkcml2ZXIgd2hpY2ggcmVwbGFjZXMgdGhlIG9sZCB0ZWxlcy4KK1JFQURNRS5oZmMtcGNpCisJLSBpbmZvIG9uIGhmYy1wY2kgYmFzZWQgY2FyZHMuCitSRUFETUUucGNiaXQKKwktIGluZm8gb24gdGhlIFBDQklULUQgSVNETiBhZGFwdGVyIGFuZCBkcml2ZXIuCitSRUFETUUuc3luY3BwcAorCS0gaW5mbyBvbiBydW5uaW5nIFN5bmMgUFBQIG92ZXIgSVNETi4KK3N5bmNQUFAuRkFRCisJLSBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBhYm91dCBydW5uaW5nIFBQUCBvdmVyIElTRE4uCitSRUFETUUuYXZtYjEKKwktIGluZm8gb24gZHJpdmVyIGZvciBBVk0tQjEgSVNETiBjYXJkLgorUkVBRE1FLmFjdDIwMDAKKwktIGluZm8gb24gZHJpdmVyIGZvciBJQk0gQUNULTIwMDAgY2FyZC4KK1JFQURNRS5laWNvbgorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEVpY29uIGFjdGl2ZSBjYXJkcy4KK1JFQURNRS5jb25jYXAKKwktIGluZm8gb24gIkNPTkNBUCIgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnRlcmZhY2UgdXNlZCBmb3IgWC4yNS4KK1JFQURNRS5kaXZlcnNpb24KKwktIGluZm8gb24gbW9kdWxlIGZvciBpc2RuIGRpdmVyc2lvbiBzZXJ2aWNlcy4KK1JFQURNRS5zYworCS0gaW5mbyBvbiBkcml2ZXIgZm9yIFNwZWxsY2FzdGVyIGNhcmRzLgorUkVBRE1FLngyNQorICAgIF8gaW5mbyBmb3IgcnVubmluZyBYLjI1IG92ZXIgSVNETi4KK1JFQURNRS5oeXNkbgorICAgICAgICAtIGluZm8gb24gZHJpdmVyIGZvciBIeXBlcmNvcGUgYWN0aXZlIEhZU0ROIGNhcmRzCisgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUyBiL0RvY3VtZW50YXRpb24vaXNkbi9DUkVESVRTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjMwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUwpAQCAtMCwwICsxLDcwIEBACisKK0kgd2FudCB0byB0aGFuayBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMgcHJvamVjdCBhbmQgZXNwZWNpYWxseSB0bzoKKyhpbiBhbHBoYWJldGljYWwgb3JkZXIpCisKK1Rob21hcyBCb2dlbmT2cmZlciAodHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGUpCisgIFRlc3RlciwgbG90cyBvZiBidWdmaXhlcyBhbmQgaGludHMuCisKK0FsYW4gQ294IChhbGFuQHJlZGhhdC5jb20pCisgIEZvciBoZWxwIGdldHRpbmcgaW50byBzdGFuZGFyZC1rZXJuZWwuCisKK0hlbm5lciBFaXNlbiAoZWlzQGJhdHkuaGFuc2UuZGUpCisgIEZvciBYLjI1IGltcGxlbWVudGF0aW9uLgorCitWb2xrZXIgR/Z0eiAodm9sa2VyQG9vcHMuZnJhbmtlbi5kZSkKKyAgRm9yIGNvbnRyaWJ1dGlvbiBvZiBtYW4tcGFnZXMsIHRoZSBpbW9udHR5LXRvb2wgYW5kIGEgcGVyZmVjdAorICBtYWludGFpbmluZyBvZiB0aGUgbWFpbGluZy1saXN0IGF0IGh1Yi13dWUuCisKK01hdHRoaWFzIEhlc3NsZXIgKGhlc3NsZXJAaXNkbjRsaW51eC5kZSkKKyAgRm9yIGNyZWF0aW5nIGFuZCBtYWludGFpbmluZyB0aGUgRkFRLgorCitCZXJuaGFyZCBIYWlsZXIgKEJlcm5oYXJkLkhhaWxlckBscnoudW5pLW11ZW5jaGVuLmRlKQorICBGb3IgY3JlYXRpbmcgdGhlIEZBUSwgYW5kIHRoZSBsZWFmc2l0ZSBIT1dUTy4gCisKK01pY2hhZWwgJ0doYW5kaScgSGVyb2xkIChtaWNoYWVsQGFiYWRvbm5hLmZyYW5rZW4uZGUpCisgIEZvciBjb250cmlidXRpb24gb2YgdGhlIHZib3ggYW5zd2VyaW5nIG1hY2hpbmUuCisKK01pY2hhZWwgSGlwcCAoTWljaGFlbC5IaXBwQHN0dWRlbnQudW5pLXR1ZWJpbmdlbi5kZSkKKyAgRm9yIGhpcyBTeW5jLVBQUC1jb2RlLgorCitLYXJzdGVuIEtlaWwgKGtlaWxAaXNkbjRsaW51eC5kZSkKKyAgRm9yIGFkZGluZyAxVFI2LXN1cHBvcnQgdG8gdGhlIFRlbGVzLWRyaXZlci4KKyAgRm9yIHRoZSBIaVNheC1kcml2ZXIuCisKK01pY2hhZWwgS25pZ2dlIChrbmlja0Bjb3ZlLmhhbi5kZSkKKyAgRm9yIGNvbnRyaWJ1dGluZyB0aGUgaW1vbi10b29sCisKK0FuZHJlYXMgS29vbCAoYWtvb2xAS29vbC5mLkVVbmV0LmRlKQorICBGb3IgY29udHJpYnV0aW9uIG9mIHRoZSBpc2RubG9nL2lzZG5yZXAtdG9vbAorCitQZWRybyBSb3F1ZSBNYXJxdWVzIChyb3F1ZUBkaS5mYy51bC5wdCkKKyAgRm9yIGxvdCBvZiBuZXcgaWRlYXMgYW5kIHRoZSBwY2JpdCBkcml2ZXIuCisKK0ViZXJoYXJkIE1vZW5rZWJlcmcgKGVtb2Vua2VAZ3dkZy5kZSkKKyAgRm9yIHRlc3RpbmcgYW5kIGhlbHAgdG8gZ2V0IGludG8ga2VybmVsLgorCitUaG9tYXMgTmV1bWFubiAodG5AcnVoci5kZSkKKyAgRm9yIGhlbHAgd2l0aCBDaXNjby1TTEFSUCBhbmQga2VlcGFsaXZlCisKK0phbiBkZW4gT3VkZW4gKGRlbm91ZGVuQGdyb292aW4ueHM0YWxsLm5sKQorICBGb3IgY29udHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCB0ZWxlcy1kcml2ZXIKKworQ2Fyc3RlbiBQYWV0aCAoY2FsbGVAY2FsbGUuaW4tYmVybGluLmRlKQorICBGb3IgdGhlIEFWTS1CMS1DQVBJMi4wIGRyaXZlcgorCitUaG9tYXMgUGZlaWZmZXIgKHBmZWlmZmVyQHBkcy5kZSkKKyAgRm9yIFYuMTEwLCBleHRlbmRlZCBULjcwIGFuZCBIeWxhZmF4IGV4dGVuc2lvbnMgaW4gaXNkbl90dHkuYworCitNYXggUmllZ2VsIChyaWVnZWxAbWF4LmZyYW5rZW4uZGUpCisgIEZvciBtYWtpbmcgdGhlIElDTiBoYXJkd2FyZS1kb2N1bWVudGF0aW9uIGFuZCB0ZXN0LWVxdWlwbWVudCBhdmFpbGFibGUuCisKK0FybWluIFNjaGluZGxlciAobWFjQG1lbHdhcmUuZGUpCisgIEZvciB0aGUgZWljb24gYWN0aXZlIGNhcmQgZHJpdmVyLgorCitHZXJoYXJkICdGaWRvJyBTY2huZWlkZXIgKGZpZG9Ad3VmZi5tYXluLmRlKQorICBGb3IgaGVhdnktZHV0eS1iZXRhLXRlc3Rpbmcgd2l0aCBoaXMgQkJTIDspCisKK1Rob21hcyBVaGwgKHVobEB0aGluay5kZSkKKyAgRm9yIGRpc3RyaWJ1dGluZyB0aGUgY2FyZHMuCisgIEZvciBwdXNoaW5nIG1lIHRvIHdvcmsgOy0pCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9IaVNheC5jZXJ0IGIvRG9jdW1lbnRhdGlvbi9pc2RuL0hpU2F4LmNlcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhNmZjYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9IaVNheC5jZXJ0CkBAIC0wLDAgKzEsOTYgQEAKKy0tLS0tQkVHSU4gUEdQIFNJR05FRCBNRVNTQUdFLS0tLS0KKworRmlyc3Q6CisKKyAgICBIaVNheCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitIb3dldmVyLCBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIEhpU2F4IHNvdXJjZXMsIHBsZWFzZSBub3RlIHRoZSBmb2xsb3dpbmc6CisKK0hpU2F4IGhhcyBwYXNzZWQgdGhlIElUVSBhcHByb3ZhbCB0ZXN0IHN1aXRlIHdpdGggRUxTQSBRdWlja3N0ZXAgSVNETiBjYXJkcworYW5kIEVpY29uIFRlY2hub2xvZ3kgRGl2YSAyLjAxIFBDSSBjYXJkLgorVGhlIGNlcnRpZmljYXRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0ZXN0ZWQgc29mdHdhcmUKK3ZlcnNpb24gYW5kIHRoZSB0ZXN0ZWQgaGFyZHdhcmUuIEFueSBjaGFuZ2VzIHRvIHRoZSBIaVNheCBzb3VyY2UgY29kZSBtYXkKK3RoZXJlZm9yZSBhZmZlY3QgdGhlIGNlcnRpZmljYXRpb24uCisKK0FkZGl0aW9uYWwgSVRVIGFwcHJvdmFsIHRlc3RzIGhhdmUgYmVlbiBjYXJyaWVkIG91dCBmb3IgYWxsIGdlbmVyaWMgY2FyZHMKK3VzaW5nIENvbG9nbmVjaGlwIHNpbmdsZSBjaGlwIHNvbHV0aW9ucyBIRkMtUyBQQ0kgQSBmb3IgUENJIGNhcmRzIGFzIHdlbGwKK2FzIEhGQy1TIFVTQiBiYXNlZCBVU0IgSVNETiB0YSBhZGFwdGVycy4KK1RoZXNlIHRlc3RzIGluY2x1ZGVkIGFsbCBsYXllcnMgMS0zIGFuZCBhcyB3ZWxsIGFsbCBmdW5jdGlvbmFsIHRlc3RzIGZvciAKK3RoZSBsYXllciAxLiBCZWNhdXNlIGFsbCBoYXJkd2FyZSBiYXNlZCBvbiB0aGVzZSBjaGlwcyBhcmUgY29tcGxldGUgSVNETgorc29sdXRpb25zIGluIG9uZSBjaGlwIGFsbCBjYXJkcyBhbmQgVVNCLVRBcyB1c2luZyB0aGVzZSBjaGlwcyBhcmUgdG8gYmUKK3JlZ2FyZGVkIGFzIGFwcHJvdmVkIGZvciB0aG9zZSB0ZXN0cy4gU29tZSBhZGRpdGlvbmFsIGVsZWN0cmljYWwgdGVzdHMKK29mIHRoZSBsYXllciAxIHdoaWNoIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgZHJpdmVyIGFuZCByZWxhdGVkIHRvIGEKK3NwZWNpYWwgaGFyZHdhcmUgdXNlZCB3aWxsIGJlIHJlZ2FyZGVkIGFzIGFwcHJvdmVkIGlmIGF0IGxlYXN0IG9uZSAKK3NvbHV0aW9uIGhhcyBiZWVuIHRlc3RlZCBpbmNsdWRpbmcgdGhvc2UgZWxlY3RyaWNhbCB0ZXN0cy4gU28gaWYgY2FyZHMgCitvciB0YXMgaGF2ZSBiZWVuIGNvbXBsZXRlbHkgYXBwcm92ZWQgZm9yIGFueSBvdGhlciBvcywgdGhlIGFwcHJvdmFsCitmb3IgdGhvc2UgZWxlY3RyaWNhbCB0ZXN0cyBpcyB2YWxpZCBmb3IgbGludXgsIHRvby4KK1BsZWFzZSBzZW5kIGFueSBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoaXMgZHJpdmVycyBvciBhcHByb3ZhbCBhYm91dHMgdG8gCit3ZXJuZXJAaXNkbi1kZXZlbG9wbWVudC5kZSAKK0FkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIHRoZSB0eXBlIGFwcHJvdmFsIGRvY3VtZW50cyB3aWxsIGJlIGZvdW5kCitzaG9ydGx5IG9uIHRoZSBDb2xvZ25lY2hpcCB3ZWJzaXRlIHd3dy5jb2xvZ25lY2hpcC5jb20gCisKK0lmIHlvdSBjaGFuZ2UgdGhlIG1haW4gZmlsZXMgb2YgdGhlIEhpU2F4IElTRE4gc3RhY2ssIHRoZSBjZXJ0aWZpY2F0aW9uIHdpbGwKK2JlY29tZSBpbnZhbGlkLiBCZWNhdXNlIGluIG1vc3QgY291bnRyaWVzIGl0IGlzIGlsbGVnYWwgdG8gY29ubmVjdAordW5hcHByb3ZlZCBJU0ROIGVxdWlwbWVudCB0byB0aGUgcHVibGljIG5ldHdvcmssIEkgaGF2ZSB0byBndWFyYW50ZWUgdGhhdAorY2hhbmdlcyBpbiBIaVNheCBkbyBub3QgYWZmZWN0IHRoZSBjZXJ0aWZpY2F0aW9uLgorCitJbiBvcmRlciB0byBtYWtlIGEgdmFsaWQgY2VydGlmaWNhdGlvbiBhcHBhcmVudCB0byB0aGUgdXNlciwgSSBoYXZlIGJ1aWx0IGluCitzb21lIHZhbGlkYXRpb24gY2hlY2tzIHRoYXQgYXJlIG1hZGUgZHVyaW5nIHRoZSBtYWtlIHByb2Nlc3MuIFRoZSBIaVNheCBtYWluCitmaWxlcyBhcmUgcHJvdGVjdGVkIGJ5IG1kNSBjaGVja3N1bXMgYW5kIHRoZSBtZDVzdW0gZmlsZSBpcyBwZ3Agc2lnbmVkIGJ5CitteXNlbGY6CisKK0tleUlEIDEwMjQvRkY5OTJGNkQgMTk5Ny8wMS8xNiBLYXJzdGVuIEtlaWwgPGtrZWlsQHN1c2UuZGU+CitLZXkgZmluZ2VycHJpbnQgPSA5MiA2QiBGNyA1OCBFRSA4NiAyOCBDOCAgQzQgMUEgRTYgREMgMzkgODkgRjIgQUEKKworT25seSBpZiB0aGUgY2hlY2tzdW1zIGFyZSBPSywgYW5kIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZpbGUKKyJkcml2ZXJzL2lzZG4vaGlzYXgvbWQ1c3Vtcy5hc2MiIG1hdGNoLCBpcyB0aGUgY2VydGlmaWNhdGlvbiB2YWxpZDsgYQorbWVzc2FnZSBjb25maXJtaW5nIHRoaXMgaXMgdGhlbiBkaXNwbGF5ZWQgZHVyaW5nIHRoZSBoaXNheCBpbml0IHByb2Nlc3MuCisKK1RoZSBhZmZlY3RlZCBmaWxlcyBhcmU6CisKK2RyaXZlcnMvaXNkbi9oaXNheC9pc2FjLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYworZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCitkcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKK2RyaXZlcnMvaXNkbi9oaXNheC90ZWkuYworZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKK2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYworZHJpdmVycy9pc2RuL2hpc2F4L2wzXzF0cjYuYworZHJpdmVycy9pc2RuL2hpc2F4L2NlcnQuYworZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYworZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYworZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworCitQbGVhc2Ugc2VuZCBhbnkgY2hhbmdlcywgYnVnZml4ZXMgYW5kIHBhdGNoZXMgdG8gbWUgcmF0aGVyIHRoYW4gaW1wbGVtZW50aW5nCit0aGVtIGRpcmVjdGx5IGludG8gdGhlIEhpU2F4IHNvdXJjZXMuCisKK1RoaXMgZG9lcyBub3QgcmVkdWNlIHlvdXIgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoZSBzb3VyY2VzLCBnbyBhaGVhZDsgYnV0IG5vdGUgdGhhdCB0aGVuIHRoZQorY2VydGlmaWNhdGlvbiBpcyBpbnZhbGlkIGV2ZW4gaWYgeW91IHVzZSBvbmUgb2YgdGhlIGFwcHJvdmVkIGNhcmRzLgorCitIZXJlIGFyZSB0aGUgY2VydGlmaWNhdGlvbiByZWdpc3RyYXRpb24gbnVtYmVycyBmb3IgRUxTQSBRdWlja3N0ZXAgY2FyZHM6CitHZXJtYW4gICBEMTMzMzYxSiBDRVRFQ09NIElDVCBTZXJ2aWNlcyBHbWJIIDA2ODIKK0V1cm9wZWFuIEQxMzMzNjJKIENFVEVDT00gSUNUIFNlcnZpY2VzIEdtYkggMDY4MgorCisKK0thcnN0ZW4gS2VpbAora2VpbEBpc2RuNGxpbnV4LmRlCisKKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiAyLjYuM2kKK0NoYXJzZXQ6IG5vY29udgorCitpUUNWQXdVQk9GQXdxVHB4SHZYL21TOXRBUUZJMlFQOUdMREsyaXkvS0Jod1JlRTNGN0xlTyt0VmhmZlRWWjNhCisyMHE1L3ovV2NJZy9wbkgwdVRrbDJVZ0RYQkZYWWw0NXpKeURHTnBBcG9zSUZtVCtFZGQxNG83Vmoxdy9CQmRuCitZKzVyQm1KZitneUJ1NjFkYTVkNmJ2MGxweW13UmEvdW0rcmkraWxZblovWFBmZzVKS2hkakdTQkNKdUpBRWxNCitkMmpGYlRyc01Zdz0KKz1MTmY5CistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UgYi9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjE3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFCkBAIC0wLDAgKzEsNzU5IEBACiskSWQ6IElOVEVSRkFDRSx2IDEuMTUuOC4yIDIwMDEvMDMvMTMgMTY6MTc6MDcga2FpIEV4cCAkCisKK0Rlc2NyaXB0aW9uIG9mIHRoZSBJbnRlcmZhY2UgYmV0d2VlbiBMaW5rbGV2ZWwgYW5kIEhhcmR3YXJlbGV2ZWwKKyAgb2YgaXNkbjRsaW51eDoKKworCisgIFRoZSBDb21tdW5pY2F0aW9uIGJldHdlZW4gTGlua2xldmVsIChMTCkgYW5kIEhhcmR3YXJlbGV2ZWwgKEhMKQorICBpcyBiYXNlZCBvbiB0aGUgc3RydWN0IGlzZG5faWYgKGRlZmluZWQgaW4gaXNkbmlmLmgpLgorCisgIEFuIEhMLWRyaXZlciBjYW4gcmVnaXN0ZXIgaXRzZWxmIGF0IExMIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uCisgIHJlZ2lzdGVyX2lzZG4oKSB3aXRoIGEgcG9pbnRlciB0byB0aGF0IHN0cnVjdC4gUHJpb3IgdG8gdGhhdCwgaXQgaGFzCisgIHRvIHByZXNldCBzb21lIG9mIHRoZSBmaWVsZHMgb2YgaXNkbl9pZi4gVGhlIExMIHNldHMgdGhlIHJlc3Qgb2YKKyAgdGhlIGZpZWxkcy4gQWxsIGZ1cnRoZXIgY29tbXVuaWNhdGlvbiBpcyBkb25lIHZpYSBjYWxsYmFja3MgdXNpbmcKKyAgdGhlIGZ1bmN0aW9uLXBvaW50ZXJzIGRlZmluZWQgaW4gaXNkbl9pZi4KKworICBDaGFuZ2VzL1ZlcnNpb24gbnVtYmVyaW5nOgorCisgIER1cmluZyBkZXZlbG9wbWVudCBvZiB0aGUgSVNETiBzdWJzeXN0ZW0sIHNldmVyYWwgY2hhbmdlcyBoYXZlIGJlZW4KKyAgbWFkZSB0byB0aGUgaW50ZXJmYWNlLiBCZWZvcmUgaXQgd2VudCBpbnRvIGtlcm5lbCwgdGhlIHBhY2thZ2UKKyAgaGFkIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyLiBUaGUgbGFzdCB2ZXJzaW9uLCBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5CisgIHdhcyAwLjcuNC4gV2hlbiB0aGUgc3Vic3lzdGVtIHdlbnQgaW50byBrZXJuZWwsIGV2ZXJ5IGZ1bmN0aW9uYWwgdW5pdAorICBnb3QgYSBzZXBhcmF0ZSB2ZXJzaW9uIG51bWJlci4gVGhlc2UgbnVtYmVycyBhcmUgc2hvd24gYXQgaW5pdGlhbGl6YXRpb24sCisgIHNlcGFyYXRlZCBieSBzbGFzaGVzOgorCisgICAgIGMuYy90LnQvbi5uL3AucC9hLmEvdi52CisKKyAgd2hlcmUKKworICAgYy5jIGlzIHRoZSByZXZpc2lvbiBvZiB0aGUgY29tbW9uIGNvZGUuCisgICB0LnQgaXMgdGhlIHJldmlzaW9uIG9mIHRoZSB0dHkgcmVsYXRlZCBjb2RlLgorICAgbi5uIGlzIHRoZSByZXZpc2lvbiBvZiB0aGUgbmV0d29yayByZWxhdGVkIGNvZGUuCisgICBwLnAgaXMgdGhlIHJldmlzaW9uIG9mIHRoZSBwcHAgcmVsYXRlZCBjb2RlLgorICAgYS5hIGlzIHRoZSByZXZpc2lvbiBvZiB0aGUgYXVkaW8gcmVsYXRlZCBjb2RlLgorICAgdi52IGlzIHRoZSByZXZpc2lvbiBvZiB0aGUgVi4xMTAgcmVsYXRlZCBjb2RlLgorCisgIENoYW5nZXMgaW4gdGhpcyBkb2N1bWVudCBhcmUgbWFya2VkIHdpdGggJyoqKkNIQU5HRXgnIHdoZXJlIHggcmVwcmVzZW50aW5nCisgIHRoZSB2ZXJzaW9uIG51bWJlci4gSWYgdGhhdCBudW1iZXIgc3RhcnRzIHdpdGggMCwgaXQgcmVmZXJzIHRvIHRoZSBvbGQsCisgIHNlcGFyYXRlbHkgZGlzdHJpYnV0ZWQgcGFja2FnZS4gSWYgaXQgc3RhcnRzIHdpdGggb25lIG9mIHRoZSBsZXR0ZXJzCisgIGFib3ZlLCBpdCByZWZlcnMgdG8gdGhlIHJldmlzaW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZS4gCisgICoqKkNIQU5HRUl4IHJlZmVycyB0byB0aGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBpc2RuaWYuaCAgCisKKzEuIERlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZHMgb2YgaXNkbl9pZjoKKworICBpbnQgY2hhbm5lbHM7CisKKyAgICBUaGlzIGZpZWxkIGhhcyB0byBiZSBzZXQgYnkgdGhlIEhMLWRyaXZlciB0byB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCisgICAgc3VwcG9ydGVkIHByaW9yIHRvIGNhbGxpbmcgcmVnaXN0ZXJfaXNkbigpLiBVcG9uIHJldHVybiBvZiB0aGUgY2FsbCwKKyAgICB0aGUgTEwgcHV0cyBhbiBpZCB0aGVyZSwgd2hpY2ggaGFzIHRvIGJlIHVzZWQgYnkgdGhlIEhMLWRyaXZlciB3aGVuCisgICAgaW52b2tpbmcgdGhlIG90aGVyIGNhbGxiYWNrcy4KKworICBpbnQgbWF4YnVmc2l6ZTsKKworICAgICoqKkNIQU5HRTAuNjogTmV3IHNpbmNlIHRoaXMgdmVyc2lvbi4KKworICAgIEFsc28gdG8gYmUgcHJlc2V0IGJ5IHRoZSBITC1kcml2ZXIuIFdpdGggdGhpcyB2YWx1ZSB0aGUgSEwtZHJpdmVyCisgICAgdGVsbHMgdGhlIExMIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBkYXRhLXBhY2tldCBpdCB3aWxsIGFjY2VwdC4gCisKKyAgdW5zaWduZWQgbG9uZyBmZWF0dXJlczsKKworICAgIFRvIGJlIHByZXNldCBieSB0aGUgSEwtZHJpdmVyLiBVc2luZyB0aGlzIGZpZWxkLCB0aGUgSEwtZHJpdmVyCisgICAgYW5ub3VuY2VzIHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQuIEF0IHRoZSBtb21lbnQgdGhpcyBpcyBsaW1pdGVkIHRvCisgICAgcmVwb3J0IHRoZSBzdXBwb3J0ZWQgbGF5ZXIyIGFuZCBsYXllcjMtcHJvdG9jb2xzLiBGb3Igc2V0dGluZyB0aGlzCisgICAgZmllbGQgdGhlIGNvbnN0YW50cyBJU0ROX0ZFQVRVUkUuLi4sIGRlY2xhcmVkIGluIGlzZG5pZi5oIGhhdmUgdG8gYmUKKyAgICB1c2VkLgorCisgICAgKioqQ0hBTkdFMC43LjE6IFRoZSBsaW5lIHR5cGUgKDFUUjYsIEVEU1MxKSBoYXMgdG8gYmUgc2V0LgorCisgIHVuc2lnbmVkIHNob3J0IGhsX2hkcmxlbjsKKworICAgICoqKkNIQU5HRTAuNy40OiBOZXcgZmllbGQuCisKKyAgICBUbyBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlciwgaWYgaXQgc3VwcG9ydHMgc2tfYnVmZidzLiBUaGUgZHJpdmVyCisgICAgc2hvdWxkIHB1dCBoZXJlIHRoZSBhbW91bnQgb2YgYWRkaXRpb25hbCBzcGFjZSBuZWVkZWQgaW4gc2tfYnVmZidzIGZvcgorICAgIGl0cyBpbnRlcm5hbCBwdXJwb3Nlcy4gRHJpdmVycyBub3Qgc3VwcG9ydGluZyBza19idWZmJ3Mgc2hvdWxkIAorICAgIGluaXRpYWxpemUgdGhpcyBmaWVsZCB0byAwLgorCisgIHZvaWQgKCpyY3ZjYWxsYl9za2IpKGludCwgaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKQorCisgICAgKioqQ0hBTkdFMC43LjQ6IE5ldyBmaWVsZC4KKworICAgIFRoaXMgZmllbGQgd2lsbCBiZSBzZXQgYnkgTEwuIFRoZSBITC1kcml2ZXIgZGVsaXZlcnMgcmVjZWl2ZWQgZGF0YS0KKyAgICBwYWNrZXRzIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVXBvbiBjYWxsaW5nLCB0aGUgSEwtZHJpdmVyIG11c3QKKyAgICBhbHJlYWR5IGhhdmUgaXRzIHByaXZhdGUgZGF0YSBwdWxsZWQgb2ZmIHRoZSBoZWFkIG9mIHRoZSBza19idWZmLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgaW50ICAgICAgICAgICAgICBkcml2ZXItSWQKKyAgICAgIGludCAgICAgICAgICAgICAgQ2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgc3RydWN0IHNrX2J1ZmYgKiBQb2ludGVyIHRvIHNrX2J1ZmYsIGNvbnRhaW5pbmcgcmVjZWl2ZWQgZGF0YS4KKworICBpbnQgKCpzdGF0Y2FsbGIpKGlzZG5fY3RybCopOworCisgICAgVGhpcyBmaWVsZCB3aWxsIGJlIHNldCBieSBMTC4gVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGJ5IHRoZQorICAgIEhMLWRyaXZlciBmb3Igc2lnbmFsaW5nIHN0YXR1cy1jaGFuZ2VzIG9yIG90aGVyIGV2ZW50cyB0byB0aGUgTEwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBpc2RuX2N0cmwqCisKKyAgICAgIFRoZSBzdHJ1Y3QgaXNkbl9jdHJsIGFsc28gZGVmaW5lZCBpbiBpc2RuX2lmLiBUaGUgZXhhY3QgbWVhbmluZ3Mgb2YgaXRzCisgICAgICBmaWVsZHMgYXJlIGRlc2NyaWJlZCB0b2dldGhlciB3aXRoIHRoZSBkZXNjcmlwdGlvbnMgb2YgdGhlIHBvc3NpYmxlCisgICAgICBldmVudHMuIEhlcmUgaXMgb25seSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZHM6CisKKyAgICAgICAgZHJpdmVyICA9IGRyaXZlciBJZC4KKyAgICAgICAgY29tbWFuZCA9IGV2ZW50LXR5cGUuIChvbmUgb2YgdGhlIGNvbnN0YW50cyBJU0ROX1NUQVRfLi4uKQorICAgICAgICBhcmcgICAgID0gZGVwZW5kcyBvbiBldmVudC10eXBlLgorICAgICAgICBudW0gICAgID0gZGVwZW5kcyBvbiBldmVudC10eXBlLgorCisgICAgUmV0dXJudmFsdWU6CisgICAgICAwIG9uIHN1Y2Nlc3MsIGVsc2UgLTEKKworICBpbnQgKCpjb21tYW5kKShpc2RuX2N0cmwqKTsKKworICAgIFRoaXMgZmllbGQgaGFzIHRvIGJlIHByZXNldCBieSB0aGUgSEwtZHJpdmVyLiBJdCBwb2ludHMgdG8gYSBmdW5jdGlvbiwKKyAgICB0byBiZSBjYWxsZWQgYnkgTEwgdG8gcGVyZm9ybSBmdW5jdGlvbnMgbGlrZSBkaWFsaW5nLCBCLWNoYW5uZWwKKyAgICBzZXR1cCwgZXRjLiBUaGUgZXhhY3QgbWVhbmluZyBvZiB0aGUgcGFyYW1ldGVycyBpcyBkZXNjcmliZWQgd2l0aCB0aGUKKyAgICBkZXNjcmlwdGlvbnMgb2YgdGhlIHBvc3NpYmxlIGNvbW1hbmRzLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgaXNkbl9jdHJsKgorICAgICAgICBkcml2ZXIgID0gZHJpdmVyLUlkCisgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kIHRvIHBlcmZvcm0uIChvbmUgb2YgdGhlIGNvbnN0YW50cyBJU0ROX0NNRF8uLi4pCisgICAgICAgIGFyZyAgICAgPSBkZXBlbmRzIG9uIGNvbW1hbmQuCisgICAgICAgIG51bSAgICAgPSBkZXBlbmRzIG9uIGNvbW1hbmQuCisgICAgCisgICAgUmV0dXJudmFsdWU6CisgICAgICA+PTAgb24gc3VjY2VzcywgZWxzZSBlcnJvci1jb2RlICgtRU5PREVWIGV0Yy4pCisKKyAgaW50ICgqd3JpdGVidWZfc2tiKShpbnQsIGludCwgaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKQorCisgICAgKioqQ0hBTkdFMC43LjQ6IE5ldyBmaWVsZC4KKyAgICAqKipDSEFOR0VJLjEuMjE6IE5ldyBmaWVsZC4KKworICAgIFRoaXMgZmllbGQgaGFzIHRvIGJlIHByZXNldCBieSB0aGUgSEwtZHJpdmVyLiBUaGUgZ2l2ZW4gZnVuY3Rpb24gd2lsbAorICAgIGJlIGNhbGxlZCBieSB0aGUgTEwgZm9yIGRlbGl2ZXJpbmcgZGF0YSB0byBiZSBzZW5kIHZpYSBCLUNoYW5uZWwuCisKKyAKKyAgICBQYXJhbWV0ZXI6CisgICAgICBpbnQgICAgICAgICAgICAgIGRyaXZlci1JZCAqKipDSEFOR0UwLjcuNDogTmV3IHBhcmFtZXRlci4KKyAgICAgIGludCAgICAgICAgICAgICAgY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgSEwtZHJpdmVyLiAoc3RhcnRzIHdpdGggMCkKKyAgICAgIGludAkgICAgICAgYWNrICoqKkNoYW5nZUkxLjIxOiBOZXcgcGFyYW1ldGVyCisJCSAgICAgICBJZiB0aGlzIGlzICEwLCB0aGUgZHJpdmVyIGhhcyB0byBzaWduYWwgdGhlIGRlbGl2ZXJ5CisJCSAgICAgICBieSBzZW5kaW5nIGFuIElTRE5fU1RBVF9CU0VOVC4gSWYgdGhpcyBpcyAwLCB0aGUgZHJpdmVyCisJCSAgICAgICBNVVNUIE5PVCBzZW5kIGFuIElTRE5fU1RBVF9CU0VOVC4KKyAgICAgIHN0cnVjdCBza19idWZmICogUG9pbnRlciB0byBza19idWZmIGNvbnRhaW5pbmcgZGF0YSB0byBiZSBzZW5kIHZpYQorICAgICAgICAgICAgICAgICAgICAgICBCLWNoYW5uZWwuCisKKyAgICBSZXR1cm52YWx1ZToKKyAgICAgIExlbmd0aCBvZiBkYXRhIGFjY2VwdGVkIG9uIHN1Y2Nlc3MsIGVsc2UgZXJyb3ItY29kZSAoLUVJTlZBTCBvbgorICAgICAgb3ZlcnNpemVkIHBhY2tldHMgZXRjLikKKworICBpbnQgKCp3cml0ZWNtZCkodV9jaGFyKiwgaW50LCBpbnQsIGludCwgaW50KTsKKworICAgIFRoaXMgZmllbGQgaGFzIHRvIGJlIHByZXNldCBieSB0aGUgSEwtZHJpdmVyLiBUaGUgZ2l2ZW4gZnVuY3Rpb24gd2lsbCBiZQorICAgIGNhbGxlZCB0byBwZXJmb3JtIHdyaXRlLXJlcXVlc3RzIG9uIC9kZXYvaXNkbmN0cmwgKGkuZS4gc2VuZGluZyBjb21tYW5kcworICAgIHRvIHRoZSBjYXJkKSBUaGUgZGF0YS1mb3JtYXQgaXMgaGFyZHdhcmUtc3BlY2lmaWMuIFRoaXMgZnVuY3Rpb24gaXMKKyAgICBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuIEl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIG5vcm1hbCBvcGVyYXRpb24KKyAgICBhbmQgbmV2ZXIgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHR0eS1lbXVsYXRpb24tIG9yIG5ldHdvcmstY29kZS4gSWYKKyAgICB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaGFzIHRvIHNldCBOVUxMIGhlcmUuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICB1X2NoYXIqIHBvaW50ZXIgdG8gZGF0YS4KKyAgICAgIGludCAgICAgbGVuZ3RoIG9mIGRhdGEuCisgICAgICBpbnQgICAgIGZsYWc6IDAgPSBjYWxsIGZyb20gd2l0aGluIGtlcm5lbC1zcGFjZS4gKEhMLWRyaXZlciBtdXN0IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5LCBtYXkgTk9UIHVzZSBzY2hlZHVsZSgpKQorICAgICAgICAgICAgICAgICAgICAxID0gY2FsbCBmcm9tIHVzZXItc3BhY2UuIChITC1kcml2ZXIgbXVzdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweV9mcm9tZnMsIHVzZSBvZiBzY2hlZHVsZSgpIGFsbG93ZWQpCisgICAgICBpbnQgICAgIGRyaXZlci1JZC4KKyAgICAgIGludCAgICAgY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgSEwtZHJpdmVyLiAoc3RhcnRzIHdpdGggMCkKKworKioqQ0hBTkdFSTEuMTQ6IFRoZSBkcml2ZXItSWQgYW5kIGNoYW5uZWwtbnVtYmVyIGFyZSBuZXcgc2luY2UgdGhpcyByZXZpc2lvbi4KKworICAgIFJldHVybnZhbHVlOgorICAgICAgTGVuZ3RoIG9mIGRhdGEgYWNjZXB0ZWQgb24gc3VjY2VzcywgZWxzZSBlcnJvci1jb2RlICgtRUlOVkFMIGV0Yy4pCisKKyAgaW50ICgqcmVhZHN0YXQpKHVfY2hhciosIGludCwgaW50LCBpbnQsIGludCk7CisKKyAgICBUaGlzIGZpZWxkIGhhcyB0byBiZSBwcmVzZXQgYnkgdGhlIEhMLWRyaXZlci4gVGhlIGdpdmVuIGZ1bmN0aW9uIHdpbGwgYmUKKyAgICBjYWxsZWQgdG8gcGVyZm9ybSByZWFkLXJlcXVlc3RzIG9uIC9kZXYvaXNkbmN0cmwgKGkuZS4gcmVhZGluZyByZXBsaWVzCisgICAgZnJvbSB0aGUgY2FyZCkgVGhlIGRhdGEtZm9ybWF0IGlzIGhhcmR3YXJlLXNwZWNpZmljLiBUaGlzIGZ1bmN0aW9uIGlzCisgICAgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LiBJdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBub3JtYWwgb3BlcmF0aW9uCisgICAgYW5kIG5ldmVyIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSB0dHktZW11bGF0aW9uLSBvciBuZXR3b3JrLWNvZGUuIElmCisgICAgdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIGhhcyB0byBzZXQgTlVMTCBoZXJlLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgdV9jaGFyKiBwb2ludGVyIHRvIGRhdGEuCisgICAgICBpbnQgICAgIGxlbmd0aCBvZiBkYXRhLgorICAgICAgaW50ICAgICBmbGFnOiAwID0gY2FsbCBmcm9tIHdpdGhpbiBrZXJuZWwtc3BhY2UuIChITC1kcml2ZXIgbXVzdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSwgbWF5IE5PVCB1c2Ugc2NoZWR1bGUoKSkKKyAgICAgICAgICAgICAgICAgICAgMSA9IGNhbGwgZnJvbSB1c2VyLXNwYWNlLiAoSEwtZHJpdmVyIG11c3QgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWZzLCB1c2Ugb2Ygc2NoZWR1bGUoKSBhbGxvd2VkKQorICAgICAgaW50ICAgICBkcml2ZXItSWQuCisgICAgICBpbnQgICAgIGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIEhMLWRyaXZlci4gKHN0YXJ0cyB3aXRoIDApCisKKyoqKkNIQU5HRUkxLjE0OiBUaGUgZHJpdmVyLUlkIGFuZCBjaGFubmVsLW51bWJlciBhcmUgbmV3IHNpbmNlIHRoaXMgcmV2aXNpb24uCisKKyAgICBSZXR1cm52YWx1ZToKKyAgICAgIExlbmd0aCBvZiBkYXRhIG9uIHN1Y2Nlc3MsIGVsc2UgZXJyb3ItY29kZSAoLUVJTlZBTCBldGMuKQorCisgIGNoYXIgaWRbMjBdOworICAgICAgICoqKkNIQU5HRTAuNzogTmV3IHNpbmNlIHRoaXMgdmVyc2lvbi4KKworICAgVGhpcyBzdHJpbmcgaGFzIHRvIGJlIHByZXNldCBieSB0aGUgSEwtZHJpdmVyLiBJdHMgcHVycG9zZSBpcyBmb3IKKyAgIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBkcml2ZXIgYnkgdGhlIHVzZXIuIEVnLjogaXQgaXMgc2hvd24gaW4gdGhlCisgICBzdGF0dXMtaW5mbyBvZiAvZGV2L2lzZG5pbmZvLiBGdXJ0aGVybW9yZSBpdCBpcyB1c2VkIGFzIElkIGZvciBiaW5kaW5nCisgICBuZXQtaW50ZXJmYWNlcyB0byBhIHNwZWNpZmljIGNoYW5uZWwuIElmIGEgc3RyaW5nIG9mIGxlbmd0aCB6ZXJvIGlzCisgICBnaXZlbiwgdXBvbiByZXR1cm4sIGlzZG40bGludXggd2lsbCByZXBsYWNlIGl0IGJ5IGEgZ2VuZXJpYyBuYW1lLiAobGluZTAsCisgICBsaW5lMSBldGMuKSBJdCBpcyByZWNvbW1lbmRlZCB0byBtYWtlIHRoaXMgc3RyaW5nIGNvbmZpZ3VyYWJsZSBkdXJpbmcKKyAgIG1vZHVsZS1sb2FkLXRpbWUuIChjb3B5IGEgZ2xvYmFsIHZhcmlhYmxlIHRvIHRoaXMgc3RyaW5nLikgRm9yIGRvaW5nIHRoYXQsCisgICBtb2R1bGVzIDEuMi44IG9yIG5ld2VyIGFyZSBuZWNlc3NhcnkuCisKKzIuIERlc2NyaXB0aW9uIG9mIHRoZSBjb21tYW5kcywgYSBITC1kcml2ZXIgaGFzIHRvIHN1cHBvcnQ6CisKKyAgIEFsbCBjb21tYW5kcyB3aWxsIGJlIHBlcmZvcm1lZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBjb21tYW5kKCkgZGVzY3JpYmVkCisgICBhYm92ZSBmcm9tIHdpdGhpbiB0aGUgTEwuIFRoZSBmaWVsZCBjb21tYW5kIG9mIHRoZSBzdHJ1Y3QtcGFyYW1ldGVyIHdpbGwKKyAgIGNvbnRhaW4gdGhlIGRlc2lyZWQgY29tbWFuZCwgdGhlIGZpZWxkIGRyaXZlciBpcyBhbHdheXMgc2V0IHRvIHRoZQorICAgYXBwcm9wcmlhdGUgZHJpdmVyLUlkLgorCisgICBVbnRpbCBub3csIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIGRlZmluZWQ6CisKKyoqKkNIQU5HRUkxLjM0OiBUaGUgcGFyYW1ldGVyICJudW0iIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgdW5pb24gInBhcm0iIGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICB0aGUgb2xkICJudW0iIGFuZCBhIG5ldyBzZXR1cF90eXBlIHN0cnVjdCB1c2VkIGZvciBJU0ROX0NNRF9ESUFMCisgICAgICAgICAgICAgICAgYW5kIElTRE5fU1RBVF9JQ0FMTCBjYWxsYmFjay4KKworICAgSVNETl9DTURfSU9DVEw6CisKKyAgICAgVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBwZXJmb3JtaW5nIGlvY3RsLWNhbGxzIGZvciBjb25maWd1cmluZworICAgICBoYXJkd2FyZSBvciBzaW1pbGFyIHB1cnBvc2VzIChzZXR0aW5nIHBvcnQtYWRkcmVzc2VzLCBsb2FkaW5nIGZpcm13YXJlCisgICAgIGV0Yy4pIEZvciB0aGlzIHB1cnBvc2UsIGluIHRoZSBMTCBhbGwgaW9jdGwtY2FsbHMgd2l0aCBhbiBhcmd1bWVudAorICAgICA+PSBJSU9DRFJWQ1RMICgweDEwMCkgd2lsbCBiZSBoYW5kZWQgdHJhbnNwYXJlbnRseSB0byB0aGlzCisgICAgIGZ1bmN0aW9uIGFmdGVyIHN1YnRyYWN0aW5nIDB4MTAwIGFuZCBwbGFjaW5nIHRoZSByZXN1bHQgaW4gYXJnLgorICAgICBFeGFtcGxlOgorICAgICAgIElmIGEgdXNlcmxldmVsLXByb2dyYW0gY2FsbHMgaW9jdGwoMHgxMDEsLi4uKSB0aGUgZnVuY3Rpb24gZ2V0cworICAgICAgIGNhbGxlZCB3aXRoIHRoZSBmaWVsZCBjb21tYW5kIHNldCB0byAxLgorCisgICAgIFBhcmFtZXRlcjoKKyAgICAgICBkcml2ZXIgICA9IGRyaXZlci1JZC4KKyAgICAgICBjb21tYW5kICA9IElTRE5fQ01EX0lPQ1RMCisgICAgICAgYXJnICAgICAgPSBPcmlnaW5hbCBpb2N0bC1jbWQgLSBJSU9DRFJWQ1RMCisgICAgICAgcGFybS5udW0gPSBmaXJzdCBieXRlcyBmaWxsZWQgd2l0aCAodW5zaWduZWQgbG9uZylhcmcKKyAgIAorICAgICBSZXR1cm52YWx1ZToKKyAgICAgICBEZXBlbmRpbmcgb24gZHJpdmVyLgorCisgIAorICBJU0ROX0NNRF9ESUFMOgorCisgICAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gdGVsbCB0aGUgSEwtZHJpdmVyIGl0IHNob3VsZCBkaWFsIGEgZ2l2ZW4KKyAgICBudW1iZXIuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfRElBTAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICAKKyAgICAgIHBhcm0uc2V0dXAucGhvbmUgID0gQW4gQVNDSUktU3RyaW5nIGNvbnRhaW5pbmcgdGhlIG51bWJlciB0byBkaWFsLgorICAgICAgcGFybS5zZXR1cC5lYXptc24gPSBBbiBBU0NJSS1TdGluZyBjb250YWluaW5nIHRoZSBvd24gRUFaIG9yIE1TTi4KKyAgICAgIHBhcm0uc2V0dXAuc2kxICAgID0gVGhlIFNlcnZpY2UtSW5kaWNhdG9yLgorICAgICAgcGFybS5zZXR1cC5zaTIgICAgPSBBZGRpdGlvbmFsIFNlcnZpY2UtSW5kaWNhdG9yLgorCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBMaW5lIGhhcyBiZWVuIGRlc2lnbmVkIGFzIFNQViAoYSBzcGVjaWFsIGdlcm1hbgorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLCBtZWFuaW5nIHNlbWktbGVhc2VkLWxpbmUpIHRoZSBwaG9uZSBoYXMgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgd2l0aCBhbiAiUyIuCisgICAgICAqKipDSEFOR0UwLjY6IEluIHByZXZpb3VzIHZlcnNpb25zIHRoZSBFQVogaGFzIGJlZW4gZ2l2ZW4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGhpZ2hieXRlIG9mIGFyZy4KKyAgICAqKipDSEFOR0UwLjcuMTogTmV3IHNpbmNlIHRoaXMgdmVyc2lvbjogU2VydmljZUluZGljYXRvciBhbmQgQWRkSW5mby4KKworICBJU0ROX0NNRF9BQ0NFUFREOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBhY2NlcHQgYSBELUNoYW5uZWwtc2V0dXAuCisgICAgKFJlc3BvbnNlIHRvIGFuIGluY29taW5nIGNhbGwpCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfQUNDRVBURAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX0NNRF9BQ0NFUFRCOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBwZXJmb3JtIGEgQi1DaGFubmVsLXNldHVwLgorICAgIChhZnRlciBlc3RhYmxpc2hpbmcgRC1DaGFubmVsLUNvbm5lY3Rpb24pCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfQUNDRVBUQgorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX0NNRF9IQU5HVVA6CisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIGhhbmd1cCAoQi1DaGFubmVsIGlmCisgICAgZXN0YWJsaXNoZWQgZmlyc3QsIHRoZW4gRC1DaGFubmVsKS4gVGhpcyBjb21tYW5kIGlzIGFsc28gdXNlZCBmb3IKKyAgICBhY3RpdmVseSByZWplY3RpbmcgYW4gaW5jb21pbmcgY2FsbC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9IQU5HVVAKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9DTURfQ0xSRUFaOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCBub3QgdG8gc2lnbmFsIGluY29taW5nCisgICAgY2FsbHMgdG8gdGhlIExMLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0NMUkVBWgorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX0NNRF9TRVRFQVo6CisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIHNpZ25hbCBpbmNvbWluZyBjYWxscyBmb3IKKyAgICB0aGUgZ2l2ZW4gRUFacy9NU05zIHRvIHRoZSBMTC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9TRVRFQVoKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybS5udW0gICAgPSBBU0NJSS1TdHJpbmcsIGNvbnRhaW5pbmcgdGhlIGRlc2lyZWQgRUFaJ3MvTVNOJ3MKKyAgICAgICAgICAgICAgICAgICAgKGNvbW1hLXNlcGFyYXRlZCkuIElmIGFuIGVtcHR5IFN0cmluZyBpcyBnaXZlbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIEhMLWRyaXZlciBzaG91bGQgcmVzcG9uZCB0byBBTEwgaW5jb21pbmcgY2FsbHMsCisgICAgICAgICAgICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uLWFkZHJlc3MuCisgICAgICAqKipDSEFOR0UwLjY6IE5ldyBzaW5jZSB0aGlzIHZlcnNpb24gdGhlICJlbXB0eS1zdHJpbmciLWZlYXR1cmUuCisKKyAgSVNETl9DTURfR0VURUFaOiAoY3VycmVudGx5IHVudXNlZCkKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gcmVwb3J0IHRoZSBjdXJyZW50IHNldHRpbmcKKyAgICBnaXZlbiB3aXRoIElTRE5fQ01EX1NFVEVBWi4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9HRVRFQVoKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybS5udW0gICAgPSBBU0NJSS1TdHJpbmcsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgRUFaJ3MvTVNOJ3MKKworICBJU0ROX0NNRF9TRVRTSUw6IChjdXJyZW50bHkgdW51c2VkKQorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBzaWduYWwgb25seSBpbmNvbWluZworICAgIGNhbGxzIHdpdGggdGhlIGdpdmVuIFNlcnZpY2UtSW5kaWNhdG9ycy4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9TRVRTSUwKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybS5udW0gICAgPSBBU0NJSS1TdHJpbmcsIGNvbnRhaW5pbmcgdGhlIGRlc2lyZWQgU2VydmljZS1JbmRpY2F0b3JzLgorCisgIElTRE5fQ01EX0dFVFNJTDogKGN1cnJlbnRseSB1bnVzZWQpCisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIHJldHVybiB0aGUgY3VycmVudAorICAgIFNlcnZpY2UtSW5kaWNhdG9ycyBpdCB3aWxsIHJlc3BvbmQgdG8uCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfU0VUU0lMCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtICAgID0gQVNDSUktU3RyaW5nLCBjb250YWluaW5nIHRoZSBjdXJyZW50IFNlcnZpY2UtSW5kaWNhdG9ycy4KKworICBJU0ROX0NNRF9TRVRMMjoKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gc2VsZWN0IHRoZSBnaXZlbiBMYXllci0yLQorICAgIHByb3RvY29sLiBUaGlzIGNvbW1hbmQgaXMgaXNzdWVkIGJ5IHRoZSBMTCBwcmlvciB0byBJU0ROX0NNRF9ESUFMIG9yCisgICAgSVNETl9DTURfQUNDRVBURC4KKworCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX1NFVEwyCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbCBvcidlZCB3aXRoIChwcm90b2NvbC1JZCA8PCA4KQorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC1JZCBpcyBvbmUgb2YgdGhlIGNvbnN0YW50cyBJU0ROX1BST1RPX0wyLi4uCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX0NNRF9HRVRMMjogKGN1cnJlbnRseSB1bnVzZWQpCisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIHJldHVybiB0aGUgY3VycmVudAorICAgIHNldHRpbmcgb2YgdGhlIExheWVyLTItcHJvdG9jb2wuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfR0VUTDIKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisgICAgUmV0dXJudmFsdWU6CisgICAgICBjdXJyZW50IHByb3RvY29sLUlkIChvbmUgb2YgdGhlIGNvbnN0YW50cyBJU0ROX0wyX1BST1RPKQorCisgIElTRE5fQ01EX1NFVEwzOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byBzZWxlY3QgdGhlIGdpdmVuIExheWVyLTMtCisgICAgcHJvdG9jb2wuIFRoaXMgY29tbWFuZCBpcyBpc3N1ZWQgYnkgdGhlIExMIHByaW9yIHRvIElTRE5fQ01EX0RJQUwgb3IKKyAgICBJU0ROX0NNRF9BQ0NFUFRELgorCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfU0VUTDMKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgICAgICAgICAgICAgICBsb2dpY2FsIG9yJ2VkIHdpdGggKHByb3RvY29sLUlkIDw8IDgpCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLUlkIGlzIG9uZSBvZiB0aGUgY29uc3RhbnRzIElTRE5fUFJPVE9fTDMuLi4KKyAgICAgIHBhcm0uZmF4ICAgID0gUG9pbnRlciB0byBUMzBfcyBmYXggc3RydWN0LiAoZmF4IHVzYWdlIG9ubHkpCisKKyAgSVNETl9DTURfR0VUTDI6IChjdXJyZW50bHkgdW51c2VkKQorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byByZXR1cm4gdGhlIGN1cnJlbnQKKyAgICBzZXR0aW5nIG9mIHRoZSBMYXllci0zLXByb3RvY29sLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0dFVEwzCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorICAgIFJldHVybnZhbHVlOgorICAgICAgY3VycmVudCBwcm90b2NvbC1JZCAob25lIG9mIHRoZSBjb25zdGFudHMgSVNETl9MM19QUk9UTykKKworICBJU0ROX0NNRF9QUk9DRUVEOiAKKworICAgIFdpdGggdGhpcyBjb21tYW5kLCB0aGUgSEwtZHJpdmVyIGlzIHRvbGQgdG8gcHJvY2VlZCB3aXRoIGEgaW5jb21pbmcgY2FsbC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9QUk9DRUVECisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHNldHVwLmVhem1zbj0gZW1wdHkgc3RyaW5nIG9yIHN0cmluZyBzZW5kIGFzIHV1czEgaW4gRFNTMSB3aXRoIAorICAgICAgICAgICAgICAgICAgICBQUk9DRUVEIG1lc3NhZ2UKKworICBJU0ROX0NNRF9BTEVSVDogCisKKyAgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIEhMLWRyaXZlciBpcyB0b2xkIHRvIGFsZXJ0IGEgcHJvY2VlZGluZyBjYWxsLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQuCisgICAgICBjb21tYW5kICAgICA9IElTRE5fQ01EX0FMRVJUCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHNldHVwLmVhem1zbj0gZW1wdHkgc3RyaW5nIG9yIHN0cmluZyBzZW5kIGFzIHV1czEgaW4gRFNTMSB3aXRoIAorICAgICAgICAgICAgICAgICAgICBBTEVSVCBtZXNzYWdlCisKKyAgSVNETl9DTURfUkVESVI6IAorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBITC1kcml2ZXIgaXMgdG9sZCB0byByZWRpcmVjdCBhIGNhbGwgaW4gcHJvY2VlZGluZworICAgIG9yIGFsZXJ0aW5nIHN0YXRlLiAgCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfUkVESVIKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgc2V0dXAuZWF6bXNuPSBlbXB0eSBzdHJpbmcgb3Igc3RyaW5nIHNlbmQgYXMgdXVzMSBpbiBEU1MxIHByb3RvY29sCisgICAgICBzZXR1cC5zY3JlZW49IHNjcmVlbmluZyBpbmRpY2F0b3IKKyAgICAgIHNldHVwLnBob25lID0gcmVkaXJlY3RlZCB0byBwYXJ0eSBudW1iZXIKKworICBJU0ROX0NNRF9QUk9UX0lPOgorCisgICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBMTC1kcml2ZXIgaW52b2tlcyBwcm90b2NvbCBzcGVjaWZpYyBmZWF0dXJlcyB0aHJvdWdoCisgICAgdGhlIExMLgorICAgIFRoZSBjYWxsIGlzIG5vdCBpbXBsaWNpdGVseSBib3VuZCB0byBhIGNvbm5lY3Rpb24uCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX0NNRF9QUk9UX0lPCisgICAgICBhcmcgICAgICAgICA9IFRoZSBsb3dlciA4IEJpdHMgZGVmaW5lIHRoZSBhZGRyZXNzZWQgcHJvdG9jb2wgYXMgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBpbiBJU0ROX1BUWVBFLi4uLCB0aGUgdXBwZXIgYml0cyBhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcm90b2NvbCBzcGVjaWZpYyBDTUQuICAKKyAgICAgIAorICAgICAgcGFyYSAgICAgICAgPSBwcm90b2NvbCBhbmQgZnVuY3Rpb24gc3BlY2lmaWMuIFNlZSBpc2RuaWYuaCBmb3IgZGV0YWlsLgorCisKKyAgSVNETl9DTURfRkFYQ01EOgorCisgICAgV2l0aCB0aGlzIGNvbW1hbmQgdGhlIEhMLWRyaXZlciByZWNlaXZlcyBhIGZheCBzdWItY29tbWFuZC4KKyAgICBGb3IgZGV0YWlscyByZWZlciB0byBJTlRFUkZBQ0UuZmF4CisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZC4KKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9DTURfRkFYQ01ECisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisKKzMuIERlc2NyaXB0aW9uIG9mIHRoZSBldmVudHMgdG8gYmUgc2lnbmFsZWQgYnkgdGhlIEhMLWRyaXZlciB0byB0aGUgTEwuCisKKyAgQWxsIHN0YXR1cy1jaGFuZ2VzIGFyZSBzaWduYWxlZCB2aWEgY2FsbGluZyB0aGUgcHJldmlvdXNseSBkZXNjcmliZWQKKyAgZnVuY3Rpb24gc3RhdGNhbGxiKCkuIFRoZSBmaWVsZCBjb21tYW5kIG9mIHRoZSBzdHJ1Y3QgaXNkbl9jbWQgaGFzCisgIHRvIGJlIHNldCBieSB0aGUgSEwtZHJpdmVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIFN0YXR1cy1JZCAoZXZlbnQtbnVtYmVyKS4KKyAgVGhlIGZpZWxkIGFyZyBoYXMgdG8gYmUgc2V0IHRvIHRoZSBjaGFubmVsLW51bWJlciAobG9jYWxseSB0byB0aGUgZHJpdmVyLAorICBzdGFydGluZyB3aXRoIDApIHRvIHdoaWNoIHRoaXMgZXZlbnQgYXBwbGllcy4gKEV4Y2VwdGlvbjogU1RBVkFJTC1ldmVudCkKKworICBVbnRpbCBub3csIHRoZSBmb2xsb3dpbmcgU3RhdHVzLUlkcyBhcmUgZGVmaW5lZDoKKworICBJU0ROX1NUQVRfQVZBSUw6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHRoZSBhdmFpbGFiaWxpdHkgb2YgbmV3IGRhdGEKKyAgICBmb3IgcmVhZHN0YXQoKS4gVXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmctcHVycG9zZXMsIHNlZSBkZXNjcmlwdGlvbgorICAgIG9mIHJlYWRzdGF0KCkuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfU1RBVkFJTAorICAgICAgYXJnICAgICAgICAgPSBsZW5ndGggb2YgYXZhaWxhYmxlIGRhdGEuCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX1NUQVRfSUNBTEw6CisgIElTRE5fU1RBVF9JQ0FMTFc6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIGFuIGluY29taW5nIGNhbGwgdG8gdGhlIExMLgorICAgIElmIElDQUxMVyBpcyBzaWduYWxsZWQgdGhlIGluY29taW5nIGNhbGwgaXMgYSB3YWl0aW5nIGNhbGwgd2l0aG91dAorICAgIGEgYXZhaWxhYmxlIEItY2hhbi4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgICAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICAgICAgICA9IElTRE5fU1RBVF9JQ0FMTAorICAgICAgYXJnICAgICAgICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFyYS5zZXR1cC5waG9uZSAgPSBDYWxsZXJudW1iZXIuCisgICAgICBwYXJhLnNldHVwLmVhem1zbiA9IENhbGxlZE51bWJlci4KKyAgICAgIHBhcmEuc2V0dXAuc2kxICAgID0gU2VydmljZSBJbmRpY2F0b3IuCisgICAgICBwYXJhLnNldHVwLnNpMiAgICA9IEFkZGl0aW9uYWwgU2VydmljZSBJbmRpY2F0b3IuCisgICAgICBwYXJhLnNldHVwLnBsYW4gICA9IG9jdGV0IDMgZnJvbSBDYWxsaW5nIHBhcnR5IG51bWJlciBJbmZvcm1hdGlvbiBFbGVtZW50LgorICAgICAgcGFyYS5zZXR1cC5zY3JlZW4gPSBvY3RldCAzYSBmcm9tIENhbGxpbmcgcGFydHkgbnVtYmVyIEluZm9ybWF0aW9uIEVsZW1lbnQuCisKKyAgICBSZXR1cm46CisgICAgICAwICAgICAgICAgICA9IE5vIGRldmljZSBtYXRjaGluZyB0aGlzIGNhbGwuCisgICAgICAxICAgICAgICAgICA9IEF0IGxlYXN0IG9uZSBkZXZpY2UgbWF0Y2hpbmcgdGhpcyBjYWxsIChSSU5HIG9uIHR0eUkpLgorICAgICAgICAgICAgICAgICAgICBITC1kcml2ZXIgbWF5IHNlbmQgQUxFUlRJTkcgb24gdGhlIEQtY2hhbm5lbCBpbiB0aGlzIGNhc2UuCisgICAgICAyICAgICAgICAgICA9IENhbGwgd2lsbCBiZSByZWplY3RlZC4KKyAgICAgIDMgICAgICAgICAgID0gSW5jb21pbmcgY2FsbGVkIHBhcnR5IG51bWJlciBpcyBjdXJyZW50bHkgaW5jb21wbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBkaWdpdHMgYXJlIHJlcXVpcmVkLiAKKyAgICAgICAgICAgICAgICAgICAgVXNlZCBmb3Igc2lnbmFsbGluZyB3aXRoIFB0UCBjb25uZWN0aW9ucy4KKyAgICAgIDQJICAgICAgICAgID0gQ2FsbCB3aWxsIGJlIGhlbGQgaW4gYSBwcm9jZWVkaW5nIHN0YXRlIAorICAgICAgICAgICAgICAgICAgICAoSEwgZHJpdmVyIHNlbmRzIFBST0NFRURJTkcpCisgICAgICAgICAgICAgICAgICAgIFVzZWQgd2hlbiBhIHVzZXIgc3BhY2UgcHJvZyBuZWVkcyB0aW1lIHRvIGludGVycHJldCBhIGNhbGwKKwkJICAgIHBhcmEuc2V0dXAuZWF6bXNuIG1heSBiZSBmaWxsZWQgd2l0aCBhbiB1dXMxIG1lc3NhZ2Ugb2YKKwkJICAgIDMwIG9jdGV0cyBtYXhpbXVtLiBFbXB0eSBzdHJpbmcgaWYgbm8gdXVzLiAKKyAgICAgIDUgICAgICAgICAgID0gQ2FsbCB3aWxsIGJlIGFjdGl2ZWx5IGRlZmxlY3RlZCB0byBhbm90aGVyIHBhcnR5CisgICAgICAgICAgICAgICAgICAgIE9ubHkgYXZhaWxhYmxlIGluIERTUzEvRVVSTyBwcm90b2NvbAorCQkgICAgcGFyYS5zZXR1cC5waG9uZSBtdXN0IGJlIHNldCB0byBkZXN0aW5hdGlvbiBwYXJ0eSBudW1iZXIKKwkJICAgIHBhcmEuc2V0dXAuZWF6bXNuIG1heSBiZSBmaWxsZWQgd2l0aCBhbiB1dXMxIG1lc3NhZ2Ugb2YKKwkJICAgIDMwIG9jdGV0cyBtYXhpbXVtLiBFbXB0eSBzdHJpbmcgaWYgbm8gdXVzLiAKKyAgICAgIC0xICAgICAgICAgID0gQW4gZXJyb3IgaGFwcGVuZWQuIChJbnZhbGlkIHBhcmFtZXRlcnMgZm9yIGV4YW1wbGUuKQorICBUaGUga2V5cGFkIHN1cHBvcnQgbm93IGlzIGluY2x1ZGVkIGluIHRoZSBkaWFsIGNvbW1hbmQuCSAgICAgICAgCisKKworICBJU0ROX1NUQVRfUlVOOgorCisgICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgc2lnbmFscyBhdmFpbGFiaWxpdHkgb2YgdGhlIElTRE4tY2FyZC4KKyAgICAoYWZ0ZXIgaW5pdGlhbGl6aW5nLCBsb2FkaW5nIGZpcm13YXJlKQorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX1JVTgorICAgICAgYXJnICAgICAgICAgPSB1bnVzZWQuCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX1NUQVRfU1RPUDoKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgdW5hdmFpbGFiaWxpdHkgb2YgdGhlIElTRE4tY2FyZC4KKyAgICAoYmVmb3JlIHVubG9hZGluZywgd2hpbGUgcmVzZXR0aW5nL3JlY29uZmlndXJpbmcgdGhlIGNhcmQpCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfU1RPUAorICAgICAgYXJnICAgICAgICAgPSB1bnVzZWQuCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKworICBJU0ROX1NUQVRfRENPTk46CisKKyAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgdGhlIHN1Y2Nlc3NmdWwgZXN0YWJsaXNobWVudCBvZgorICAgYSBELUNoYW5uZWwtY29ubmVjdGlvbi4gKFJlc3BvbnNlIHRvIElTRE5fQ01EX0FDQ0VQVEQgb3IgSVNETl9DTURfRElBTCkKKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9EQ09OTgorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9TVEFUX0JDT05OOgorCisgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHRoZSBzdWNjZXNzZnVsIGVzdGFibGlzaG1lbnQgb2YKKyAgIGEgQi1DaGFubmVsLWNvbm5lY3Rpb24uIChSZXNwb25zZSB0byBJU0ROX0NNRF9BQ0NFUFRCIG9yIGJlY2F1c2UgdGhlCisgICByZW1vdGUtc3RhdGlvbiBoYXMgaW5pdGlhdGVkIGVzdGFibGlzaG1lbnQpCisKKyAgIFRoZSBITCBkcml2ZXIgc2hvdWxkIGNhbGwgdGhpcyB3aGVuIHRoZSBsb2dpY2FsIGwyL2wzIHByb3RvY29sIAorICAgY29ubmVjdGlvbiBvbiB0b3Agb2YgdGhlIHBoeXNpY2FsIEItY2hhbm5lbCBpcyBlc3RhYmxpc2hlZC4KKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9CQ09OTgorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybS5udW0gICAgPSBBU0NJSS1TdHJpbmcsIGNvbnRhaW5pbmcgdHlwZSBvZiBjb25uZWN0aW9uIChmb3IgYW5hbG9nCisJCSAgICBtb2RlbSBvbmx5KS4gVGhpcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBDT05ORUNUIG1lc3NhZ2UKKwkJICAgIGUuZy4gMTQ0MDAvVi4zMmJpcworCisgIElTRE5fU1RBVF9ESFVQOgorCisgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBzaWduYWxzIHRoZSBzaHV0ZG93biBvZiBhCisgICBELUNoYW5uZWwtY29ubmVjdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHJlc3BvbnNlIHRvIGEgcHJpb3IgSVNETl9DTURfSEFOR1VQLAorICAgb3IgY2F1c2VkIGJ5IGEgcmVtb3RlLWhhbmd1cCBvciBpZiB0aGUgcmVtb3RlLXN0YXRpb24gaGFzIGFjdGl2ZWx5CisgICByZWplY3RlZCBhIGNhbGwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfREhVUAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9TVEFUX0JIVVA6CisKKyAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgdGhlIHNodXRkb3duIG9mIGEKKyAgIEItQ2hhbm5lbC1jb25uZWN0aW9uLiBUaGlzIGNvdWxkIGJlIGEgcmVzcG9uc2UgdG8gYSBwcmlvciBJU0ROX0NNRF9IQU5HVVAsCisgICBvciBjYXVzZWQgYnkgYSByZW1vdGUtaGFuZ3VwLgorCisgICBUaGUgSEwgZHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgYXMgc29vbiBhcyB0aGUgbG9naWNhbCBsMi9sMyBwcm90b2NvbCAKKyAgIGNvbm5lY3Rpb24gb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBCLWNoYW5uZWwgaXMgcmVsZWFzZWQuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfQkhVUAorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybSAgICAgICAgPSB1bnVzZWQuCisKKyAgSVNETl9TVEFUX0NJTkY6CisKKyAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIGRlbGl2ZXJzIGNoYXJnZS11bml0IGluZm9ybWF0aW9uIHRvIHRoZQorICAgTEwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfQ0lORgorICAgICAgYXJnICAgICAgICAgPSBjaGFubmVsLW51bWJlciwgbG9jYWxseSB0byB0aGUgZHJpdmVyLiAoc3RhcnRpbmcgd2l0aCAwKQorICAgICAgcGFybS5udW0gICAgPSBBU0NJSSBzdHJpbmcgY29udGFpbmluZyBjaGFyZ2UtdW5pdHMgKGRpZ2l0cyBvbmx5KS4KKworICBJU0ROX1NUQVRfTE9BRDogKGN1cnJlbnRseSB1bnVzZWQpCisKKyAgSVNETl9TVEFUX1VOTE9BRDoKKworICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBITC1kcml2ZXIgc2lnbmFscyB0aGF0IGl0IHdpbGwgYmUgdW5sb2FkZWQgbm93LiBUaGlzCisgICB0ZWxscyB0aGUgTEwgdG8gcmVsZWFzZSBhbGwgY29ycmVzcG9uZGluZyBkYXRhLXN0cnVjdHVyZXMuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfVU5MT0FECisgICAgICBhcmcgICAgICAgICA9IHVudXNlZC4KKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fU1RBVF9CU0VOVDoKKworICAgIFdpdGggdGhpcyBjYWxsIHRoZSBITC1kcml2ZXIgc2lnbmFscyB0aGUgZGVsaXZlcnkgb2YgYSBkYXRhLXBhY2tldC4KKyAgICBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgdGhlIG5ldHdvcmstaW50ZXJmYWNlcyBvbmx5LCB0dHktRW11bGF0aW9uCisgICAgZG9lcyBub3QgbmVlZCB0aGlzIGNhbGwuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfQlNFTlQKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubGVuZ3RoID0gKioqQ0hBTkdFSS4xLjIxOiBOZXcgZmllbGQuCisJCSAgICB0aGUgZHJpdmVyIGhhcyB0byBzZXQgdGhpcyB0byB0aGUgb3JpZ2luYWwgbGVuZ3RoCisJCSAgICBvZiB0aGUgc2tiIGF0IHRoZSB0aW1lIG9mIHJlY2VpdmluZyBpdCBmcm9tIHRoZSBsaW5rbGV2ZWwuCisKKyAgSVNETl9TVEFUX05PRENIOgorCisgICAgV2l0aCB0aGlzIGNhbGwsIHRoZSBkcml2ZXIgaGFzIHRvIHJlc3BvbmQgdG8gYSBwcmlvciBJU0ROX0NNRF9ESUFMLCBpZgorICAgIG5vIEQtQ2hhbm5lbCBpcyBhdmFpbGFibGUuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfTk9EQ0gKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fU1RBVF9BRERDSDogCisKKyAgICBUaGlzIGNhbGwgaXMgZm9yIEhMLWRyaXZlcnMsIHdoaWNoIGFyZSB1bmFibGUgdG8gY2hlY2sgY2FyZC10eXBlCisgICAgb3IgbnVtYmVycyBvZiBzdXBwb3J0ZWQgY2hhbm5lbHMgYmVmb3JlIHRoZXkgaGF2ZSBsb2FkZWQgYW55IGZpcm13YXJlCisgICAgdXNpbmcgaW9jdGwuIFRob3NlIEhMLWRyaXZlciBzaW1wbHkgc2V0IHRoZSBjaGFubmVsLXBhcmFtZXRlciB0byBhCisgICAgbWluaW11bSBjaGFubmVsLW51bWJlciB3aGVuIHJlZ2lzdGVyaW5nLCBhbmQgbGF0ZXIgaWYgdGhleSBrbm93CisgICAgdGhlIHJlYWwgYW1vdW50LCBwZXJmb3JtIHRoaXMgY2FsbCwgYWxsb2NhdGluZyBhZGRpdGlvbmFsIGNoYW5uZWxzLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX0FERENICisgICAgICBhcmcgICAgICAgICA9IG51bWJlciBvZiBjaGFubmVscyB0byBiZSBhZGRlZC4KKyAgICAgIHBhcm0gICAgICAgID0gdW51c2VkLgorCisgIElTRE5fU1RBVF9DQVVTRToKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIGRlbGl2ZXJzIENBVVNFLW1lc3NhZ2VzIHRvIHRoZSBMTC4KKyAgICBDdXJyZW50bHkgdGhlIExMIGRvZXMgbm90IHVzZSB0aGlzIG1lc3NhZ2VzLiBUaGVpciBjb250ZW50cyBpcyBzaW1wbHkKKyAgICBsb2dnZWQgdmlhIGtlcm5lbC1tZXNzYWdlcy4gVGhlcmVmb3JlLCBjdXJyZW50bHkgdGhlIGZvcm1hdCBvZiB0aGUKKyAgICBtZXNzYWdlcyBpcyBjb21wbGV0ZWx5IGZyZWUuIEhvd2V2ZXIgdGhleSBzaG91bGQgYmUgcHJpbnRhYmxlLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX05PRENICisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtLm51bSAgICA9IEFTQ0lJIHN0cmluZyBjb250YWluaW5nIENBVVNFLW1lc3NhZ2UuCisKKyAgSVNETl9TVEFUX0RJU1BMQVk6CisKKyAgICBXaXRoIHRoaXMgY2FsbCwgdGhlIEhMLWRyaXZlciBkZWxpdmVycyBESVNQTEFZLW1lc3NhZ2VzIHRvIHRoZSBMTC4KKyAgICBDdXJyZW50bHkgdGhlIExMIGRvZXMgbm90IHVzZSB0aGlzIG1lc3NhZ2VzLiAKKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkCisgICAgICBjb21tYW5kICAgICA9IElTRE5fU1RBVF9ESVNQTEFZCisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJhLmRpc3BsYXk9IHN0cmluZyBjb250YWluaW5nIERJU1BMQVktbWVzc2FnZS4KKworICBJU0ROX1NUQVRfUFJPVDoKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIGRlbGl2ZXJzIHByb3RvY29sIHNwZWNpZmljIGluZm9zIHRvIHRoZSBMTC4KKyAgICBUaGUgY2FsbCBpcyBub3QgaW1wbGljaXRlbHkgYm91bmQgdG8gYSBjb25uZWN0aW9uLgorCisgICAgUGFyYW1ldGVyOgorICAgICAgZHJpdmVyICAgICAgPSBkcml2ZXItSWQKKyAgICAgIGNvbW1hbmQgICAgID0gSVNETl9TVEFUX1BST1QKKyAgICAgIGFyZyAgICAgICAgID0gVGhlIGxvd2VyIDggQml0cyBkZWZpbmUgdGhlIGFkZHJlc3NlZCBwcm90b2NvbCBhcyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGluIElTRE5fUFRZUEUuLi4sIHRoZSB1cHBlciBiaXRzIGFyZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByb3RvY29sIHNwZWNpZmljIFNUQVQuICAKKyAgICAgIAorICAgICAgcGFyYSAgICAgICAgPSBwcm90b2NvbCBhbmQgZnVuY3Rpb24gc3BlY2lmaWMuIFNlZSBpc2RuaWYuaCBmb3IgZGV0YWlsLgorCisgIElTRE5fU1RBVF9ESVNDSDoKKworICAgIFdpdGggdGhpcyBjYWxsLCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgdGhlIExMIHRvIGRpc2FibGUgb3IgZW5hYmxlIHRoZQorICAgIHVzZSBvZiBzdXBwbGllZCBjaGFubmVsIGFuZCBkcml2ZXIuCisgICAgVGhlIGNhbGwgbWF5IGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBhdmFpbGFibGUgbnVtYmVyIG9mIEItY2hhbm5lbHMgYWZ0ZXIKKyAgICBsb2FkaW5nIHRoZSBkcml2ZXIuIFRoZSBMTCBoYXMgdG8gaWdub3JlIGEgZGlzYWJsZWQgY2hhbm5lbCB3aGVuIHNlYXJjaGluZworICAgIGZvciBmcmVlIGNoYW5uZWxzLiBUaGUgSEwgZHJpdmVyIGl0c2VsZiBuZXZlciBkZWxpdmVycyBTVEFUIGNhbGxiYWNrcyBmb3IKKyAgICBkaXNhYmxlZCBjaGFubmVscy4gCSAgICAKKyAgICBUaGUgTEwgcmV0dXJucyBhIG5vbnplcm8gY29kZSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bCBvciB0aGUKKyAgICBzZWxlY3RlZCBjaGFubmVsIGlzIGFjdHVhbGx5IHJlZ2FyZGVkIGFzIGJ1c3kuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfRElTQ0gKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0ubnVtWzBdID0gMCBpZiBjaGFubmVsIHNoYWxsIGJlIGRpc2FibGVkLCBlbHNlIGVuYWJsZWQuCisKKyAgSVNETl9TVEFUX0wxRVJSOgorCisgICAgKioqQ0hBTkdFSTEuMjEgbmV3IHN0YXR1cyBtZXNzYWdlLgorICAgIEEgc2lnbmFsIGNhbiBiZSBzZW50IHRvIHRoZSBsaW5rbGV2ZWwgaWYgYW4gTGF5ZXIxLWVycm9yIHJlc3VsdHMgaW4KKyAgICBwYWNrZXQtbG9zcyBvbiByZWNlaXZlIG9yIHNlbmQuIFRoZSBmaWVsZCBlcnJjb2RlIG9mIHRoZSBjbWQucGFybQorICAgIHVuaW9uIGRlc2NyaWJlcyB0aGUgZXJyb3IgbW9yZSBwcmVjaXNlbHkuCisKKyAgICBQYXJhbWV0ZXI6CisgICAgICBkcml2ZXIgICAgICA9IGRyaXZlci1JZAorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfTDFFUlIKKyAgICAgIGFyZyAgICAgICAgID0gY2hhbm5lbC1udW1iZXIsIGxvY2FsbHkgdG8gdGhlIGRyaXZlci4gKHN0YXJ0aW5nIHdpdGggMCkKKyAgICAgIHBhcm0uZXJyY29kZT0gSVNETl9TVEFUX0wxRVJSX1NFTkQ6ICAgICBQYWNrZXQgbG9zdCB3aGlsZSBzZW5kaW5nLgorCQkgICAgSVNETl9TVEFUX0wxRVJSX1JFQ1Y6ICAgICBQYWNrZXQgbG9zdCB3aGlsZSByZWNlaXZpbmcuCisgIElTRE5fU1RBVF9GQVhJTkQ6CisKKyAgICBXaXRoIHRoaXMgY2FsbCB0aGUgSEwtZHJpdmVyIHNpZ25hbHMgYSBmYXggc3ViLWNvbW1hbmQgdG8gdGhlIExMLgorICAgIEZvciBkZXRhaWxzIHJlZmVyIHRvIElOVEVSRkFDRS5mYXgKKworICAgIFBhcmFtZXRlcjoKKyAgICAgIGRyaXZlciAgICAgID0gZHJpdmVyLUlkLgorICAgICAgY29tbWFuZCAgICAgPSBJU0ROX1NUQVRfRkFYSU5ECisgICAgICBhcmcgICAgICAgICA9IGNoYW5uZWwtbnVtYmVyLCBsb2NhbGx5IHRvIHRoZSBkcml2ZXIuIChzdGFydGluZyB3aXRoIDApCisgICAgICBwYXJtICAgICAgICA9IHVudXNlZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5mYXggYi9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLmZheApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTU3MzEzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5mYXgKQEAgLTAsMCArMSwxNjMgQEAKKyRJZDogSU5URVJGQUNFLmZheCx2IDEuMiAyMDAwLzA4LzA2IDA5OjIyOjUwIGFybWluIEV4cCAkCisKKworRGVzY3JpcHRpb24gb2YgdGhlIGZheC1zdWJpbnRlcmZhY2UgYmV0d2VlbiBsaW5rbGV2ZWwgYW5kIGhhcmR3YXJlbGV2ZWwgb2YgCisgIGlzZG40bGludXguIAorCisgIFRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gbGlua2xldmVsIChMTCkgYW5kIGhhcmR3YXJlbGV2ZWwgKEhMKSBmb3IgZmF4CisgIGlzIGJhc2VkIG9uIHRoZSBzdHJ1Y3QgVDMwX3MgKGRlZmluZWQgaW4gaXNkbmlmLmgpLgorICBUaGlzIHN0cnVjdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIExMLiAgCisgIEluIG9yZGVyIHRvIHVzZSBmYXgsIHRoZSBMTCBwcm92aWRlcyB0aGUgcG9pbnRlciB0byB0aGlzIHN0cnVjdCB3aXRoIHRoZSAKKyAgY29tbWFuZCBJU0ROX0NNRF9TRVRMMyAocGFybS5mYXgpLiBUaGlzIHBvaW50ZXIgZXhwaXJlcyBpbiBjYXNlIG9mIGhhbmd1cCAKKyAgYW5kIHdoZW4gYSBuZXcgY2hhbm5lbCB0byBhIG5ldyBjb25uZWN0aW9uIGlzIGFzc2lnbmVkLiAKKworCitEYXRhIGhhbmRsaW5nOgorICBJbiBzZW5kLW1vZGUgdGhlIEhMLWRyaXZlciBoYXMgdG8gaGFuZGxlIHRoZSA8RExFPiBjb2RlcyBhbmQgdGhlIGJpdC1vcmRlciAKKyAgY29udmVyc2lvbiBieSBpdHNlbGYuIAorICBJbiByZWNlaXZlLW1vZGUgdGhlIExMLWRyaXZlciB0YWtlcyBjYXJlIG9mIHRoZSBiaXQtb3JkZXIgY29udmVyc2lvbgorICAoc3BlY2lmaWVkIGJ5ICtGQk9SKQorCitTdHJ1Y3R1cmUgVDMwX3MgZGVzY3JpcHRpb246CisKKyAgVGhpcyBzdHJ1Y3R1cmUgc3RvcmVzIHRoZSB2YWx1ZXMgKHNldCBieSBBVC1jb21tYW5kcyksIHRoZSByZW1vdGUtCisgIGNhcGFiaWxpdHktdmFsdWVzIGFuZCB0aGUgY29tbWFuZC1jb2RlcyBiZXR3ZWVuIExMIGFuZCBITC4KKworICBJZiB0aGUgSEwtZHJpdmVyIHJlY2VpdmVzIElTRE5fQ01EX0ZBWENNRCwgYWxsIG5lZWRlZCBpbmZvcm1hdGlvbgorICBpcyBpbiB0aGlzIHN0cnVjdCBzZXQgYnkgdGhlIExMLgorICBUbyBzaWduYWwgaW5mb3JtYXRpb24gdG8gdGhlIExMLCB0aGUgSEwtZHJpdmVyIGhhcyB0byBzZXQgdGhlIAorICB0aGUgcGFyYW1ldGVycyBhbmQgdXNlIElTRE5fU1RBVF9GQVhJTkQuCisgIChQbGVhc2UgcmVmZXIgdG8gSU5URVJGQUNFKQorCitTdHJ1Y3R1cmUgVDMwX3M6CisKKyAgQWxsIG1lbWJlcnMgYXJlIDgtYml0IHVuc2lnbmVkIChfX3U4KQorCisgIC0gIHJlc29sdXRpb24gICAgIAorICAtICByYXRlCisgIC0gIHdpZHRoCisgIC0gIGxlbmd0aAorICAtICBjb21wcmVzc2lvbgorICAtICBlY20KKyAgLSAgYmluYXJ5CisgIC0gIHNjYW50aW1lCisgIC0gIGlkW10KKyAgTG9jYWwgZmF4bWFjaGluZSdzIHBhcmFtZXRlcnMsIHNldCBieSArRkRJUywgK0ZEQ1MsICtGTElELCAuLi4KKworICAtICByX3Jlc29sdXRpb24KKyAgLSAgcl9yYXRlCisgIC0gIHJfd2lkdGgKKyAgLSAgcl9sZW5ndGgKKyAgLSAgcl9jb21wcmVzc2lvbgorICAtICByX2VjbQorICAtICByX2JpbmFyeQorICAtICByX3NjYW50aW1lCisgIC0gIHJfaWRbXQorICBSZW1vdGUgZmF4bWFjaGluZSdzIHBhcmFtZXRlcnMuIFRvIGJlIHNldCBieSBITC1kcml2ZXIuCisKKyAgLSAgcGhhc2UgICAgICAKKyAgRGVmaW5lcyB0aGUgYWN0dWFsIHN0YXRlIG9mIGZheCBjb25uZWN0aW9uLiBTZXQgYnkgSEwgb3IgTEwKKyAgZGVwZW5kaW5nIG9uIHByb2dyZXNzIGFuZCB0eXBlIG9mIGNvbm5lY3Rpb24uCisgIElmIHRoZSBwaGFzZSBjaGFuZ2VzIGJlY2F1c2Ugb2YgYW4gQVQgY29tbWFuZCwgdGhlIExMIGRyaXZlcgorICBjaGFuZ2VzIHRoaXMgdmFsdWUuIE90aGVyd2lzZSB0aGUgSEwtZHJpdmVyIHRha2VzIGNhcmUgb2YgaXQsIGJ1dAorICBvbmx5IG5lY2Vzc2FyeSBvbiBjYWxsIGVzdGFibGlzaG1lbnQgKGZyb20gSURMRSB0byBQSEFTRV9BKS4KKyAgKG9uZSBvZiB0aGUgY29uc3RhbnRzIElTRE5fRkFYX1BIQVNFX1tJRExFLEEsQixDLEQsRV0pCisKKyAgLSAgZGlyZWN0aW9uCisgIERlZmluZXMgb3V0Z29pbmcvc2VuZCBvciBpbmNvbWluZy9yZWNlaXZlIGNvbm5lY3Rpb24uCisgIChJU0ROX1RUWV9GQVhfQ09OTl9bSU4sT1VUXSkKKworICAtICBjb2RlCisgIENvbW1hbmRzIGZyb20gTEwgdG8gSEw7IHBvc3NpYmxlIGNvbnN0YW50cyA6IAorICAgICAgSVNETl9UVFlfRkFYX0RSICAgICAgICBzaWduYWxzICtGRFIgY29tbWFuZCB0byBITAorCisgICAgICBJU0ROX1RUWV9GQVhfRFQgICAgICAgIHNpZ25hbHMgK0ZEVCBjb21tYW5kIHRvIEhMIAorCisgICAgICBJU0ROX1RUWV9GQVhfRVQgICAgICAgIHNpZ25hbHMgK0ZFVCBjb21tYW5kIHRvIEhMCisKKworICBPdGhlciB0aGFuIHRoYXQgdGhlICJjb2RlIiBpcyBzZXQgd2l0aCB0aGUgaGFuZ3VwLWNvZGUgdmFsdWUgYXQKKyAgdGhlIGVuZCBvZiBjb25uZWN0aW9uIGZvciB0aGUgK0ZITkcgbWVzc2FnZS4KKyAgICAgICAgCisgIC0gIHJfY29kZSAKKyAgQ29tbWFuZHMgZnJvbSBITCB0byBMTDsgcG9zc2libGUgY29uc3RhbnRzIDoKKyAgICAgIElTRE5fVFRZX0ZBWF9DRlIgICAgICAgb3V0cHV0IG9mICtGQ0ZSIG1lc3NhZ2UuIAorCisgICAgICBJU0ROX1RUWV9GQVhfUklEICAgICAgIG91dHB1dCBvZiByZW1vdGUgSUQgc2V0IGluIHJfaWRbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoK0ZDU0kvK0ZUU0kgb24gc2VuZC9yZWNlaXZlKQorCisgICAgICBJU0ROX1RUWV9GQVhfRENTICAgICAgIG91dHB1dCBvZiArRkRDUyBhbmQgQ09OTkVDVCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hpbmcgdG8gcGhhc2UgQy4KKworICAgICAgSVNETl9UVFlfRkFYX0VUICAgICAgICBzaWduYWxzIGVuZCBvZiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hpbmcgdG8gcGhhc2UgRC4KKworICAgICAgSVNETl9UVFlfRkFYX0ZDT04gICAgICBzaWduYWxzIHRoZSBlc3RhYmxpc2hlZCwgb3V0Z29pbmcgY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nIHRvIHBoYXNlIEIuCisKKyAgICAgIElTRE5fVFRZX0ZBWF9GQ09OX0kgICAgc2lnbmFscyB0aGUgZXN0YWJsaXNoZWQsIGluY29taW5nIGNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyB0byBwaGFzZSBCLgorCisgICAgICBJU0ROX1RUWV9GQVhfRElTICAgICAgIG91dHB1dCBvZiArRkRJUyBtZXNzYWdlIGFuZCB2YWx1ZXMuCisKKyAgICAgIElTRE5fVFRZX0ZBWF9TRU5UICAgICAgc2lnbmFscyB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHNlbnQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8RExFPjxFVFg+IGlzIGFja25vd2xlZGdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0sgbWVzc2FnZSB3aWxsIGJlIHNlbnQuCisKKyAgICAgIElTRE5fVFRZX0ZBWF9QVFMgICAgICAgc2lnbmFscyBhIG1zZy1jb25maXJtYXRpb24gKHBhZ2Ugc2VudCBzdWNjZXNzZnVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIGZldCB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogb3V0cHV0IE9LIG1lc3NhZ2UgKG1vcmUgcGFnZXMgZm9sbG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBzd2l0Y2hpbmcgdG8gcGhhc2UgQiAobmV4dCBkb2N1bWVudCkKKworICAgICAgSVNETl9UVFlfRkFYX1RSQUlOX09LICBvdXRwdXQgb2YgK0ZEQ1MgYW5kIE9LIG1lc3NhZ2UgKGZvciByZWNlaXZlIG1vZGUpLgorCisgICAgICBJU0ROX1RUWV9GQVhfRU9QICAgICAgIHNpZ25hbHMgZW5kIG9mIGRhdGEgaW4gcmVjZWl2ZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hpbmcgdG8gcGhhc2UgRC4KKworICAgICAgSVNETl9UVFlfRkFYX0hORyAgICAgICBvdXRwdXQgb2YgdGhlICtGSE5HIGFuZCB2YWx1ZSBzZXQgYnkgY29kZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0sgbWVzc2FnZSwgc3dpdGNoaW5nIHRvIHBoYXNlIEUuCisKKworICAtICBiYWRsaW4KKyAgVmFsdWUgb2YgK0ZCQURMSU4gIAorCisgIC0gIGJhZG11bAorICBWYWx1ZSBvZiArRkJBRE1VTAorCisgIC0gIGJvcgorICBWYWx1ZSBvZiArRkJPUgorCisgIC0gIGZldAorICBWYWx1ZSBvZiArRkVUIGNvbW1hbmQgaW4gc2VuZC1tb2RlLgorICBTZXQgYnkgSEwgaW4gcmVjZWl2ZS1tb2RlIGZvciArRkVUIG1lc3NhZ2UuCisKKyAgLSAgcG9sbGlkW10gIAorICBJRC1zdHJpbmcsIHNldCBieSArRkNJRworCisgIC0gIGNxCisgIFZhbHVlIG9mICtGQ1EKKworICAtICBjcgorICBWYWx1ZSBvZiArRkNSCisKKyAgLSAgY3RjcnR5CisgIFZhbHVlIG9mICtGQ1RDUlRZCisKKyAgLSAgbWluc3AKKyAgVmFsdWUgb2YgK0ZNSU5TUAorCisgIC0gIHBoY3RvCisgIFZhbHVlIG9mICtGUEhDVE8KKworICAtICByZWwKKyAgVmFsdWUgb2YgK0ZSRUwKKworICAtICBuYmMKKyAgVmFsdWUgb2YgK0ZOQkMgKDAsMSkKKyAgKCtGTkJDIGlzIG5vdCBhIGtub3duIGNsYXNzIDIgZmF4IGNvbW1hbmQsIEkgYWRkZWQgdGhpcyB0byBjaGFuZ2UgdGhlCisgICBhdXRvbWF0aWMgImJlc3QgY2FwYWJpbGl0aWVzIiBjb25uZWN0aW9uIGluIHRoZSBlaWNvbiBITC1kcml2ZXIpCisKKyAgCitBcm1pbgorbWFjQG1lbHdhcmUuZGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRSBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxNTk1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUKQEAgLTAsMCArMSw1OTkgQEAKK1JFQURNRSBmb3IgdGhlIElTRE4tc3Vic3lzdGVtCisKKzEuIFByZWZhY2UKKworICAxLjEgSW50cm9kdWN0aW9uCisKKyAgVGhpcyBSRUFETUUgZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgYW5kIGhvdyB0byB1c2UgdGhlIGRpZmZlcmVudCBwYXJ0cworICBvZiB0aGUgSVNETi1zdWJzeXN0ZW0uCisKKyAgRm9yIHVzaW5nIHRoZSBJU0ROLXN1YnN5c3RlbSwgc29tZSBhZGRpdGlvbmFsIHVzZXJsZXZlbCBwcm9ncmFtcyBhcmUKKyAgbmVjZXNzYXJ5LiBUaG9zZSBwcm9ncmFtcyBhbmQgc29tZSBjb250cmlidXRlZCB1dGlsaXRpZXMgYXJlIGF2YWlsYWJsZQorICBhdAorCisgICBmdHAuaXNkbjRsaW51eC5kZQorCisgICAvcHViL2lzZG40bGludXgvaXNkbjRrLXV0aWxzLTxWZXJzaW9uTnVtYmVyPi50YXIuZ3oKKworCisgIFdlIGFsc28gaGF2ZSBzZXQgdXAgYSBtYWlsaW5nLWxpc3Q6CisKKyAgIFRoZSBpc2RuNGxpbnV4LXByb2plY3Qgb3JpZ2luYXRlcyBpbiBHZXJtYW55LCBhbmQgdGhlcmVmb3JlIGJ5IGhpc3RvcmljYWwKKyAgIHJlYXNvbnMsIHRoZSBtYWlsaW5nLWxpc3QncyBwcmltYXJ5IGxhbmd1YWdlIGlzIGdlcm1hbi4gSG93ZXZlciBtYWlscworICAgd3JpdHRlbiBpbiBlbmdsaXNoIGhhdmUgYmVlbiB3ZWxjb21lIGFsbCB0aGUgdGltZS4KKworICAgdG8gc3Vic2NyaWJlOiB3cml0ZSBhIGVtYWlsIHRvIG1ham9yZG9tb0BsaXN0c2Vydi5pc2RuNGxpbnV4LmRlLAorICAgU3ViamVjdCBpcnJlbGV2YW50LCBpbiB0aGUgbWVzc2FnZSBib2R5OgorICAgc3Vic2NyaWJlIGlzZG40bGludXggPHlvdXJfZW1haWxfYWRkcmVzcz4KKworICAgVG8gd3JpdGUgdG8gdGhlIG1haWxpbmctbGlzdCwgd3JpdGUgdG8gaXNkbjRsaW51eEBsaXN0c2Vydi5pc2RuNGxpbnV4LmRlCisKKyAgIFRoaXMgbWFpbGluZ2xpc3QgaXMgYmlkaXJlY3Rpb25hbGx5IGdhdGVkIHRvIHRoZSBuZXdzZ3JvdXAKKworICAgICBkZS5hbHQuY29tbS5pc2RuNGxpbnV4CisKKyAgVGhlcmUgaXMgYWxzbyBhIHdlbGwgbWFpbnRhaW5lZCBGQVEgaW4gRW5nbGlzaCBhdmFpbGFibGUgYXQKKyAgICAgaHR0cDovL3d3dy5taGVzc2xlci5kZS9pNGxmYXEvCisgIEl0IGNhbiBiZSB2aWV3ZWQgb25saW5lLCBvciBkb3dubG9hZGVkIGluIHNnbWwvdGV4dC9odG1sIGZvcm1hdC4KKyAgVGhlIEZBUSBjYW4gYWxzbyBiZSB2aWV3ZWQgb25saW5lIGF0CisgICAgIGh0dHA6Ly93d3cuaXNkbjRpbnV4LmRlL2ZhcS8KKyAgb3IgZG93bmxvYWRlZCBmcm9tCisgICAgIGZ0cDovL2Z0cC5pc2RuNGxpbnV4LmRlL3B1Yi9pc2RuNGxpbnV4L0ZBUS8KKworICAxLjEgVGVjaG5pY2FsIGRldGFpbHMKKworICBJbiB0aGUgZm9sbG93aW5nIFRleHQsIHRoZSB0ZXJtcyBNU04gYW5kIEVBWiBhcmUgdXNlZC4KKworICBNU04gaXMgdGhlIGFiYnJldmlhdGlvbiBmb3IgKE0pdWx0aXBsZShTKXVic2NyaWJlcihOKXVtYmVyLCBhbmQgYXBwbGllcworICB0byBFdXJvKEVEU1MxKS10eXBlIGxpbmVzLiBVc3VhbGx5IGl0IGlzIHNpbXBseSB0aGUgcGhvbmUgbnVtYmVyLgorCisgIEVBWiBpcyB0aGUgYWJicmV2aWF0aW9uIG9mIChFKW5kZ2VyYWV0ZShBKXVzd2FobChaKWlmZmVyIGFuZAorICBhcHBsaWVzIHRvIEdlcm1hbiAxVFI2LXR5cGUgbGluZXMuIFRoaXMgaXMgYSBvbmUtZGlnaXQgc3RyaW5nLAorICBzaW1wbHkgYXBwZW5kZWQgdG8gdGhlIGJhc2UgcGhvbmUgbnVtYmVyCisKKyAgVGhlIGludGVybmFsIGhhbmRsaW5nIGlzIG5lYXJseSBpZGVudGljYWwsIHNvIHJlcGxhY2UgdGhlIGFwcHJvcHJpYXRlCisgIHRlcm0gdG8gdGhhdCBvbmUsIHdoaWNoIGFwcGxpZXMgdG8geW91ciBsb2NhbCBJU0ROLWVudmlyb25tZW50LgorCisgIFdoZW4gdGhlIGxpbmstbGV2ZWwtbW9kdWxlIGlzZG4ubyBpcyBsb2FkZWQsIGl0IHN1cHBvcnRzIHVwIHRvIDE2CisgIGxvdy1sZXZlbC1tb2R1bGVzIHdpdGggdXAgdG8gNjQgY2hhbm5lbHMuIChUaGUgbnVtYmVyIDY0IGlzIGFyYml0cmFyaWx5CisgIGNob3NlbiBhbmQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZS10aW1lIC0tSVNETl9NQVggaW4gaXNkbi5oKS4KKyAgQSBsb3ctbGV2ZWwtZHJpdmVyIGNhbiByZWdpc3RlciBpdHNlbGYgdGhyb3VnaCBhbiBpbnRlcmZhY2UgKHdoaWNoIGlzCisgIGRlZmluZWQgaW4gaXNkbmlmLmgpIGFuZCBnZXRzIGFzc2lnbmVkIGEgc2xvdC4KKyAgVGhlIGZvbGxvd2luZyBjaGFyLWRldmljZXMgYXJlIG1hZGUgYXZhaWxhYmxlIGZvciBlYWNoIGNoYW5uZWw6CisKKyAgQSByYXctY29udHJvbC1kZXZpY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgICAgd3JpdGU6IHJhdyBELWNoYW5uZWwtbWVzc2FnZXMgKGZvcm1hdDogZGVwZW5kcyBvbiBkcml2ZXIpLgorICAgICByZWFkOiAgcmF3IEQtY2hhbm5lbC1tZXNzYWdlcyAoZm9ybWF0OiBkZXBlbmRzIG9uIGRyaXZlcikuCisgICAgIGlvY3RsOiBkZXBlbmRzIG9uIGRyaXZlciwgaS5lLiBmb3IgdGhlIElDTi1kcml2ZXIsIHRoZSBiYXNlLWFkZHJlc3Mgb2YKKyAgICAgICAgICAgIHRoZSBwb3J0cyBhbmQgdGhlIHNoYXJlZCBtZW1vcnkgb24gdGhlIGNhcmQgY2FuIGJlIHNldCBhbmQgcmVhZAorICAgICAgICAgICAgYWxzbyB0aGUgYm9vdC1jb2RlIGFuZCB0aGUgcHJvdG9jb2wgc29mdHdhcmUgY2FuIGJlIGxvYWRlZCBpbnRvCisgICAgICAgICAgICB0aGUgY2FyZC4KKworICAgTyBOIEwgWSAhISEgIGZvciBkZWJ1Z2dpbmcgKG5vIGxvY2tpbmcgYWdhaW5zdCBvdGhlciBkZXZpY2VzKToKKyAgIE9uZSByYXctZGF0YS1kZXZpY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgICAgd3JpdGU6IGRhdGEgdG8gQi1jaGFubmVsLgorICAgICByZWFkOiAgZGF0YSBmcm9tIEItY2hhbm5lbC4KKworICAgSW4gYWRkaXRpb24gdGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBtYWRlIGF2YWlsYWJsZToKKworICAgMTI4IHR0eS1kZXZpY2VzICg2NCBjdWl4IGFuZCA2NCB0dHlJeCkgd2l0aCBpbnRlZ3JhdGVkIG1vZGVtLWVtdWxhdG9yOgorICAgVGhlIGZ1bmN0aW9uYWxpdHkgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIHRoYXQgb2YgYSBzZXJpYWwgZGV2aWNlCisgICAodGhlIGxpbmUtZGlzY3MgYXJlIGhhbmRsZWQgYnkgdGhlIGtlcm5lbCksIHdoaWNoIGxldHMgeW91IHJ1bgorICAgU0xJUCwgQ1NMSVAgYW5kIGFzeW5jaHJvbm91cyBQUFAgdGhyb3VnaCB0aGUgZGV2aWNlcy4gV2UgaGF2ZSB0ZXN0ZWQKKyAgIFNleW9uLCBtaW5pY29tLCBDU0xJUCAodXJpLWRpcCkgUFBQLCBtZ2V0dHksIFhDZXB0IGFuZCBIeWxhZmF4LiAKKworICAgVGhlIG1vZGVtLWVtdWxhdGlvbiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAxLjMuMSBDb21tYW5kczoKKworICAgICAgICAgICAgICAgQVRBICAgICAgQW5zd2VyIGluY29taW5nIGNhbGwuCisgICAgICAgICAgICAgICBBVEQ8Tm8uPiBEaWFsLCB0aGUgbnVtYmVyIG1heSBjb250YWluOgorICAgICAgICAgICAgICAgICAgICAgICAgWzAtOV0gYW5kIFssIy4qV1BULVNdCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGF0dGVyIGFyZSBpZ25vcmVkIHVudGlsICdTJy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAnUycgbXVzdCBwcmVjZWRlIHRoZSBudW1iZXIsIGlmCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGluZSBpcyBhIFNQViAoR2VybWFuIDFUUjYpLgorICAgICAgICAgICAgICAgQVRFMCAgICAgRWNobyBvZmYuCisgICAgICAgICAgICAgICBBVEUxICAgICBFY2hvIG9uIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgIEFUSCAgICAgIEhhbmctdXAuCisgICAgICAgICAgICAgICBBVEgxICAgICBPZmYgaG9vayAoaWdub3JlZCkuCisgICAgICAgICAgICAgICBBVEgwICAgICBIYW5nLXVwLgorICAgICAgICAgICAgICAgQVRJICAgICAgUmV0dXJuICJJU0ROIGZvciBMaW51eC4uLiIuCisgICAgICAgICAgICAgICBBVEkwICAgICAgICAiCisgICAgICAgICAgICAgICBBVEkxICAgICAgICAiCisgICAgICAgICAgICAgICBBVEkyICAgICBSZXBvcnQgb2YgbGFzdCBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgQVRPICAgICAgT24gbGluZSAoZGF0YSBtb2RlKS4KKyAgICAgICAgICAgICAgIEFUUTAgICAgIEVuYWJsZSByZXN1bHQgY29kZXMgKGRlZmF1bHQpLgorICAgICAgICAgICAgICAgQVRRMSAgICAgRGlzYWJsZSByZXN1bHQgY29kZXMgKGRlZmF1bHQpLgorICAgICAgICAgICAgICAgQVRTeD15ICAgU2V0IHJlZ2lzdGVyIHggdG8geS4KKyAgICAgICAgICAgICAgIEFUU3g/ICAgIFNob3cgY29udGVudHMgb2YgcmVnaXN0ZXIgeC4KKyAgICAgICAgICAgICAgIEFUVjAgICAgIE51bWVyaWMgcmVzcG9uc2VzLgorICAgICAgICAgICAgICAgQVRWMSAgICAgRW5nbGlzaCByZXNwb25zZXMgKGRlZmF1bHQpLgorICAgICAgICAgICAgICAgQVRaICAgICAgTG9hZCByZWdpc3RlcnMgYW5kIEVBWi9NU04gZnJvbSBQcm9maWxlLgorICAgICAgICAgICAgICAgQVQmQnggICAgU2V0IFNlbmQtUGFja2V0LXNpemUgdG8geCAobWF4LiA0MDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlYWwgcGFja2V0LXNpemUgbWF5IGJlIGxpbWl0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsb3ctbGV2ZWwtZHJpdmVyIHVzZWQuIGUuZy4gdGhlIEhpU2F4LU1vZHVsZS0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0IGlzIDIwMDAuIFlvdSB3aWxsIGdldCBOTyBFcnJvci1NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgeW91IHNldCBpdCB0byBoaWdoZXIgdmFsdWVzLCBiZWNhdXNlIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBvZiBnaXZpbmcgdGhpcyBjb21tYW5kIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgbWF5IG5vdCBiZSBzZWxlY3RlZCAoc2VlICJBdXRvbWF0aWMKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbm1lbnQiKSBob3dldmVyIHRoZSBzaXplIG9mIG91dGdvaW5nIHBhY2tldHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgbGltaXRlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICBBVCZEMCAgICBJZ25vcmUgRFRSCisgICAgICAgICAgICAgICBBVCZEMiAgICBEVFItbG93LWVkZ2U6IEhhbmcgdXAgYW5kIHJldHVybiB0bworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBtb2RlIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgIEFUJkQzICAgIFNhbWUgYXMgQVQmRDIgYnV0IGFsc28gcmVzZXRzIGFsbCByZWdpc3RlcnMuCisgICAgICAgICAgICAgICBBVCZFeCAgICBTZXQgdGhlIEVBWi9NU04gZm9yIHRoaXMgY2hhbm5lbCB0byB4LgorICAgICAgICAgICAgICAgQVQmRiAgICAgUmVzZXQgYWxsIHJlZ2lzdGVycyBhbmQgcHJvZmlsZSB0byAiZmFjdG9yeS1kZWZhdWx0cyIKKyAgICAgICAgICAgICAgIEFUJkx4ICAgIFNldCBsaXN0IG9mIHBob25lIG51bWJlcnMgdG8gbGlzdGVuIG9uLiAgeCBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0IG9mIHdpbGRjYXJkIHBhdHRlcm5zIHNlcGFyYXRlZCBieSBzZW1pY29sb24uCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHNldCwgaXQgaGFzIHByZWNlZGVuY2Ugb3ZlciB0aGUgTVNOIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgQVQmRS4KKyAgICAgICAgICAgICAgIEFUJlJ4ICAgIFNlbGVjdCBWLjExMCBiaXRyYXRlIGFkYXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGVuYWJsZXMgVi4xMTAgcHJvdG9jb2wgd2l0aCA5NjAwIGJhdWQKKyAgICAgICAgICAgICAgICAgICAgICAgICh4PTk2MDApLCAxOTIwMCBiYXVkICh4PTE5MjAwKSBvciAzODQwMCBiYXVkCisgICAgICAgICAgICAgICAgICAgICAgICAoeD0zODQwMCkuIEEgdmFsdWUgb2YgeD0wIGRpc2FibGVzIFYuMTEwIHN3aXRjaGluZworICAgICAgICAgICAgICAgICAgICAgICAgYmFjayB0byBkZWZhdWx0IFguNzUuIFRoaXMgY29tbWFuZCBzZXRzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnIDE0IChMYXllci0yIHByb3RvY29sKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDogICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gOTYwMDogIDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMTkyMDA6IDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMzg0MDA6IDkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnIDE4LjIgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZyAxOSAoQWRkaXRpb25hbCBTZXJ2aWNlIEluZGljYXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA6ICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gOTYwMDogIDE5NworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAxOTIwMDogMTk5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDM4NDAwOiAxOTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSBvbiB2YWx1ZSBpbiBSZWcgMTk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgX05PXyBjb21tb24gY29udmVudGlvbiBmb3IgMzg0MDAgYmF1ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgMTk4IGlzIGNob3NlbiBhcmJpdHJhcmlseS4gVXNlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTVVTVF8gbmVnb3RpYXRlIHRoaXMgdmFsdWUgYmVmb3JlIGVzdGFibGlzaGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgIEFUJlN4ICAgIFNldCB3aW5kb3ctc2l6ZSAoeCA9IDEuLjgpIChub3QgeWV0IGltcGxlbWVudGVkKQorICAgICAgICAgICAgICAgQVQmViAgICAgU2hvdyBhbGwgc2V0dGluZ3MuCisgICAgICAgICAgICAgICBBVCZXMCAgICBXcml0ZSByZWdpc3RlcnMgYW5kIEVBWi9NU04gdG8gcHJvZmlsZS4gU2VlIGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgIGlwcm9mZCAoNS5jIGluIHRoaXMgUkVBRE1FKS4KKyAgICAgICAgICAgICAgIEFUJlgwICAgIEJUWC1tb2RlIGFuZCBULjcwLW1vZGUgb2ZmIChkZWZhdWx0KQorICAgICAgICAgICAgICAgQVQmWDEgICAgQlRYLW1vZGUgb24uIChTMTMuMT0xLCBTMTMuNT0wIFMxND0wLCBTMTY9NywgUzE4PTcsIFMxOT0wKQorICAgICAgICAgICAgICAgQVQmWDIgICAgVC43MC1tb2RlIG9uLiAoUzEzLjE9MSwgUzEzLjU9MSwgUzE0PTAsIFMxNj03LCBTMTg9NywgUzE5PTApCisgICAgICAgICAgICAgICBBVCtSeCAgICBSZXN1bWUgYSBzdXNwZW5kZWQgY2FsbCB3aXRoIENhbGxJRCB4ICh4ID0gMSwyLDMuLi4pCisgICAgICAgICAgICAgICBBVCtTeCAgICBTdXNwZW5kIGEgY2FsbCB3aXRoIENhbGxJRCB4ICh4ID0gMSwyLDMuLi4pCisKKyAgICAgICAgICAgRm9yIHZvaWNlLW1vZGUgY29tbWFuZHMgcmVmZXIgdG8gUkVBRE1FLmF1ZGlvCisKKyAgICAgICAgICAgMS4zLjIgRXNjYXBlIHNlcXVlbmNlOgorICAgICAgICAgICAgICAgRHVyaW5nIGEgY29ubmVjdGlvbiwgdGhlIGVtdWxhdGlvbiByZWFjdHMganVzdCBsaWtlCisgICAgICAgICAgICAgICBhIG5vcm1hbCBtb2RlbSB0byB0aGUgZXNjYXBlIHNlcXVlbmNlIDxERUxBWT4rKys8REVMQVk+LgorICAgICAgICAgICAgICAgKFRoZSBlc2NhcGUgY2hhcmFjdGVyIC0gZGVmYXVsdCAnKycgLSBjYW4gYmUgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgcmVnaXN0ZXIgMikuCisgICAgICAgICAgICAgICBUaGUgREVMQVkgbXVzdCBhdCBsZWFzdCBiZSAxLjUgc2Vjb25kcyBsb25nIGFuZCBkZWxheQorICAgICAgICAgICAgICAgYmV0d2VlbiB0aGUgZXNjYXBlIGNoYXJhY3RlcnMgbXVzdCBub3QgZXhjZWVkIDAuNSBzZWNvbmRzLgorCisgICAgICAgICAgIDEuMy4zIFJlZ2lzdGVyczoKKworICAgICAgICAgICAgICBOci4gIERlZmF1bHQgIERlc2NyaXB0aW9uCisgICAgICAgICAgICAgIDAgICAgMCAgICAgICAgQW5zd2VyIG9uIHJpbmcgbnVtYmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChubyBhdXRvLWFuc3dlciBpZiBTMD0wKS4KKyAgICAgICAgICAgICAgMSAgICAwICAgICAgICBDb3VudCBvZiByaW5ncy4KKyAgICAgICAgICAgICAgMiAgICA0MyAgICAgICBFc2NhcGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhIHZhbHVlID49IDEyOCBkaXNhYmxlcyB0aGUgZXNjYXBlIHNlcXVlbmNlKS4KKyAgICAgICAgICAgICAgMyAgICAxMyAgICAgICBDYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVyIChBU0NJSSkuCisgICAgICAgICAgICAgIDQgICAgMTAgICAgICAgTGluZSBmZWVkIGNoYXJhY3RlciAoQVNDSUkpLgorICAgICAgICAgICAgICA1ICAgIDggICAgICAgIEJhY2tzcGFjZSBjaGFyYWN0ZXIgKEFTQ0lJKS4KKyAgICAgICAgICAgICAgNiAgICAzICAgICAgICBEZWxheSBpbiBzZWNvbmRzIGJlZm9yZSBkaWFsaW5nLgorICAgICAgICAgICAgICA3ICAgIDYwICAgICAgIFdhaXQgZm9yIGNhcnJpZXIuCisgICAgICAgICAgICAgIDggICAgMiAgICAgICAgUGF1c2UgdGltZSBmb3IgY29tbWEgKGlnbm9yZWQpCisgICAgICAgICAgICAgIDkgICAgNiAgICAgICAgQ2FycmllciBkZXRlY3QgdGltZSAoaWdub3JlZCkKKyAgICAgICAgICAgICAxMCAgICA3ICAgICAgICBDYXJyaWVyIGxvc3MgdG8gZGlzY29ubmVjdCB0aW1lIChpZ25vcmVkKS4KKyAgICAgICAgICAgICAxMSAgICA3MCAgICAgICBUb3VjaCB0b25lIHRpbWluZyAoaWdub3JlZCkuCisgICAgICAgICAgICAgMTIgICAgNjkgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwOiAgICAwID0gU3VwcHJlc3MgcmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBTaG93IHJlc3BvbnNlIG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAxOiAgICAwID0gRW5nbGlzaCByZXNwb25zZSBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IE51bWVyaWMgcmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDI6ICAgIDAgPSBFY2hvIG9mZi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEVjaG8gb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDMgICAgIDAgPSBEQ0QgYWx3YXlzIG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gRENEIGZvbGxvd3MgY2Fycmllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNCAgICAgMCA9IENUUyBmb2xsb3dzIFJUUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gSWdub3JlIFJUUywgQ1RTIGFsd2F5cyBvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNSAgICAgMCA9IHJldHVybiB0byBjb21tYW5kIG1vZGUgb24gRFRSIGxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IFNhbWUgYXMgMCBidXQgYWxzbyByZXNldHMgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBhbHNvIHJlZ2lzdGVyIDEzLCBiaXQgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA2ICAgICAwID0gRFNSIGFsd2F5cyBvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IERTUiBvbmx5IG9uIGlmIGNoYW5uZWwgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3ICAgICAwID0gQ2lzY28tUFBQLWZsYWctaGFjayBvZmYgKGRlZmF1bHQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gQ2lzY28tUFBQLWZsYWctaGFjayBvbi4KKyAgICAgICAgICAgICAxMyAgIDAgICAgICAgICBCaXQgY29kZWQgcmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDA6ICAgIDAgPSBVc2UgZGVsYXllZCB0dHktc2VuZC1hbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IERpcmVjdCB0dHktc2VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMTogICAgMCA9IFQuNzAgcHJvdG9jb2wgKE9ubHkgZm9yIEJUWCEpIG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gVC43MCBwcm90b2NvbCAoT25seSBmb3IgQlRYISkgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMjogICAgMCA9IERvbid0IGhhbmd1cCBvbiBEVFIgbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gSGFuZ3VwIG9uIERUUiBsb3cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDM6ICAgIDAgPSBTdGFuZGFyZCByZXNwb25zZSBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gRXh0ZW5kZWQgcmVzcG9uc2UgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNDogICAgMCA9IENBTExFUiBOVU1CRVIgYmVmb3JlIGV2ZXJ5IFJJTkcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBDQUxMRVIgTlVNQkVSIGFmdGVyIGZpcnN0IFJJTkcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDU6ICAgIDAgPSBULjcwIGV4dGVuZGVkIHByb3RvY29sIG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gVC43MCBleHRlbmRlZCBwcm90b2NvbCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA2OiAgICAwID0gU3BlY2lhbCBSVU5HIE1lc3NhZ2Ugb2ZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBTcGVjaWFsIFJVTkcgTWVzc2FnZSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJVTkciIGlzIGRlbGl2ZXJlZCBvbiBhIHR0eUksIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbmNvbWluZyBjYWxsIGhhcHBlbmVkIChSSU5HKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZW1vdGUgcGFydHkgaHVuZyB1cCBiZWZvcmUgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBBVEEgd2FzIGdpdmVuLgorCQkJICAgIEJpdCA3OiAgICAwID0gRG9uJ3Qgc2hvdyBkaXNwbGF5IG1lc3NhZ2VzIGZyb20gbmV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBTaG93IGRpc3BsYXkgbWVzc2FnZXMgZnJvbSBuZXQKKwkJCQkgICAgICAgICAgKFMxMiBCaXQgMSBtdXN0IGJlIDAgdG9vKSAgICAgIAorICAgICAgICAgICAgIDE0ICAgMCAgICAgICAgIExheWVyLTIgcHJvdG9jb2w6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPSBYNzUvTEFQQiB3aXRoIEktZnJhbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBYNzUvTEFQQiB3aXRoIFVJLWZyYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gWDc1L0xBUEIgd2l0aCBCVUktZnJhbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPSBIRExDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPSBUcmFuc3BhcmVudCAoYXVkaW8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgPSBWLjExMCwgOTYwMCBiYXVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggPSBWLjExMCwgMTkyMDAgYmF1ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ID0gVi4xMTAsIDM4NDAwIGJhdWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCA9IEFuYWxvZyBNb2RlbSAob25seSBpZiBoYXJkd2FyZSBzdXBwb3J0cyB0aGlzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExID0gRmF4IEczIChvbmx5IGlmIGhhcmR3YXJlIHN1cHBvcnRzIHRoaXMpCisgICAgICAgICAgICAgMTUgICAwICAgICAgICAgTGF5ZXItMyBwcm90b2NvbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9IHRyYW5zcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSB0cmFuc3BhcmVudCB3aXRoIGF1ZGlvIGZlYXR1cmVzIChlLmcuIERTUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IEZheCBHMyBDbGFzcyAyIGNvbW1hbmRzIChTMTQgaGFzIHRvIGJlIHNldCB0byAxMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IEZheCBHMyBDbGFzcyAxIGNvbW1hbmRzIChTMTQgaGFzIHRvIGJlIHNldCB0byAxMSkKKyAgICAgICAgICAgICAxNiAgIDI1MCAgICAgICBTZW5kLVBhY2tldC1zaXplLzE2CisgICAgICAgICAgICAgMTcgICA4ICAgICAgICAgV2luZG93LXNpemUgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCisgICAgICAgICAgICAgMTggICA0ICAgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyLCBTZXJ2aWNlLU9jdGV0LTEgdG8gYWNjZXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRvIGJlIHVzZWQgb24gZGlhbG91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMDogICAgU2VydmljZSAxIChhdWRpbykgd2hlbiBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDE6ICAgIFNlcnZpY2UgNSAoQlRYKSB3aGVuIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMjogICAgU2VydmljZSA3IChkYXRhKSB3aGVuIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiBJdCBpcyBwb3NzaWJsZSB0byBzZXQgbW9yZSB0aGFuIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdC4gSW4gdGhpcyBjYXNlLCBvbiBpbmNvbWluZyBjYWxscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZWxlY3RlZCBzZXJ2aWNlcyBhcmUgYWNjZXB0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlmIHRoZSBzZXJ2aWNlIGlzICJhdWRpbyIsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyLTItcHJvdG9jb2wgaXMgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgdG8gNCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgcmVnaXN0ZXIgMTQuIE9uIG91dGdvaW5nIGNhbGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtb3N0IHNpZ25pZmljYW50IDEtYml0IGlzIGNob3NlbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCB0aGUgb3V0Z29pbmcgc2VydmljZSBvY3RldC4KKyAgICAgICAgICAgICAxOSAgIDAgICAgICAgICBTZXJ2aWNlLU9jdGV0LTIKKyAgICAgICAgICAgICAyMCAgIDAgICAgICAgICBCaXQgY29kZWQgcmVnaXN0ZXIgKHJlYWRvbmx5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UtT2N0ZXQtMSBvZiBsYXN0IGNhbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IG1hcHBpbmcgaXMgdGhlIHNhbWUgYXMgcmVnaXN0ZXIgMTgKKyAgICAgICAgICAgICAyMSAgIDAgICAgICAgICBCaXQgY29kZWQgcmVnaXN0ZXIgKHJlYWRvbmx5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBvbiBpbmNvbWluZyBjYWxsIChkdXJpbmcgUklORykgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RldCAzIG9mIGNhbGxpbmcgcGFydHkgbnVtYmVyIElFIChOdW1iZXJpbmcgcGxhbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgc2VjdGlvbiA0LjUuMTAgb2YgSVRVIFEuOTMxCisgICAgICAgICAgICAgMjIgICAwICAgICAgICAgQml0IGNvZGVkIHJlZ2lzdGVyIChyZWFkb25seSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgb24gaW5jb21pbmcgY2FsbCAoZHVyaW5nIFJJTkcpIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0ZXQgM2Egb2YgY2FsbGluZyBwYXJ0eSBudW1iZXIgSUUgKFNjcmVlbmluZyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBzZWN0aW9uIDQuNS4xMCBvZiBJVFUgUS45MzEKKyAgICAgICAgICAgICAyMyAgIDAgICAgICAgICBCaXQgY29kZWQgcmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDA6ICAgIDAgPSBBZGQgQ1BOIHRvIFJJTkcgbWVzc2FnZSBvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEFkZCBDUE4gdG8gUklORyBtZXNzYWdlIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDE6ICAgIDAgPSBBZGQgQ1BOIHRvIEZDT04gbWVzc2FnZSBvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IEFkZCBDUE4gdG8gRkNPTiBtZXNzYWdlIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDI6ICAgIDAgPSBBZGQgQ0ROIHRvIFJJTkcvRkNPTiBtZXNzYWdlIG9mZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0gQWRkIENETiB0byBSSU5HL0ZDT04gbWVzc2FnZSBvbgorCisgIExhc3QgYnV0IG5vdCBsZWFzdCBhIChhdCB0aGUgbW9tZW50IGZhaXJseSBwcmltaXRpdmUpIGRldmljZSB0byByZXF1ZXN0CisgIHRoZSBsaW5lLXN0YXR1cyAoL2Rldi9pc2RuaW5mbykgaXMgbWFkZSBhdmFpbGFibGUuCisKKyAgQXV0b21hdGljIGFzc2lnbm1lbnQgb2YgZGV2aWNlcyB0byBsaW5lczoKKworICBBbGwgaW5hY3RpdmUgcGh5c2ljYWwgbGluZXMgYXJlIGxpc3RlbmluZyB0byBhbGwgRUFacyBmb3IgaW5jb21pbmcKKyAgY2FsbHMgYW5kIGFyZSBOT1QgYXNzaWduZWQgdG8gYSBzcGVjaWZpYyB0dHkgb3IgbmV0d29yayBpbnRlcmZhY2UuCisgIFdoZW4gYW4gaW5jb21pbmcgY2FsbCBpcyBkZXRlY3RlZCwgdGhlIGRyaXZlciBsb29rcyBmaXJzdCBmb3IgYSBuZXR3b3JrCisgIGludGVyZmFjZSBhbmQgdGhlbiBmb3IgYW4gb3BlbmVkIHR0eSB3aGljaDoKKworICAxLiBpcyBjb25maWd1cmVkIGZvciB0aGUgc2FtZSBFQVouCisgIDIuIGhhcyB0aGUgc2FtZSBwcm90b2NvbCBzZXR0aW5ncyBmb3IgdGhlIEItY2hhbm5lbC4KKyAgMy4gKG9ubHkgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcyBpZiB0aGUgc2VjdXJpdHkgZmxhZyBpcyBzZXQpCisgICAgIGNvbnRhaW5zIHRoZSBjYWxsZXIgbnVtYmVyIGluIGl0cyBhY2Nlc3MgbGlzdC4KKyAgNC4gRWl0aGVyIHRoZSBjaGFubmVsIGlzIG5vdCBib3VuZCBleGNsdXNpdmVseSB0byBhbm90aGVyIE5ldC1pbnRlcmZhY2UsIG9yCisgICAgIGl0IGlzIGJvdW5kIEFORCB0aGUgb3RoZXIgY2hlY2tzIGFwcGx5IHRvIGV4YWN0bHkgdGhpcyBpbnRlcmZhY2UuCisgICAgIChGb3IgdXNhZ2Ugb2YgdGhlIGJpbmQtZmVhdHVyZXMsIHJlZmVyIHRvIHRoZSBpc2RuY3RybC1tYW4tcGFnZSkKKworICBPbmx5IHdoZW4gYSBtYXRjaGluZyBpbnRlcmZhY2Ugb3IgdHR5IGlzIGZvdW5kIGlzIHRoZSBjYWxsIGFjY2VwdGVkCisgIGFuZCB0aGUgImNvbm5lY3Rpb24iIGJldHdlZW4gdGhlIGxvdy1sZXZlbC1sYXllciBhbmQgdGhlIGxpbmstbGV2ZWwtbGF5ZXIKKyAgaXMgZXN0YWJsaXNoZWQgYW5kIGtlcHQgdW50aWwgdGhlIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKyAgSW4gYWxsIG90aGVyIGNhc2VzIG5vIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuIElzZG40bGludXggY2FuIGJlCisgIGNvbmZpZ3VyZWQgdG8gZWl0aGVyIGRvIE5PVEhJTkcgaW4gdGhpcyBjYXNlICh3aGljaCBpcyB1c2VmdWwsIGlmCisgIG90aGVyLCBleHRlcm5hbCBkZXZpY2VzIHdpdGggdGhlIHNhbWUgRUFaL01TTiBhcmUgY29ubmVjdGVkIHRvIHRoZSBidXMpCisgIG9yIHRvIHJlamVjdCB0aGUgY2FsbCBhY3RpdmVseS4gKGlzZG5jdHJsIGJ1c3JlamVjdCAuLi4pCisKKyAgRm9yIGFuIG91dGdvaW5nIGNhbGwsIHRoZSBpbmFjdGl2ZSBwaHlzaWNhbCBsaW5lcyBhcmUgc2VhcmNoZWQuCisgIFRoZSBjYWxsIGlzIHBsYWNlZCBvbiB0aGUgZmlyc3QgcGh5c2ljYWwgbGluZSwgd2hpY2ggc3VwcG9ydHMgdGhlCisgIHJlcXVlc3RlZCBwcm90b2NvbHMgZm9yIHRoZSBCLWNoYW5uZWwuIElmIGEgbmV0LWludGVyZmFjZSwgaG93ZXZlcgorICBpcyBwcmUtYm91bmQgdG8gYSBjaGFubmVsLCB0aGlzIGNoYW5uZWwgaXMgdXNlZCBkaXJlY3RseS4KKworICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBzZXZlcmFsIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdHR5cworICBmb3Igb25lIEVBWiwgaWYgdGhlIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUgc2V0IHRvIHNlY3VyZSBvcGVyYXRpb24uCisgIElmIGFuIGluY29taW5nIGNhbGwgbWF0Y2hlcyBvbmUgbmV0d29yayBpbnRlcmZhY2UsIGl0IGdldHMgY29ubmVjdGVkIHRvIGl0LgorICBJZiBhbm90aGVyIGluY29taW5nIGNhbGwgZm9yIHRoZSBzYW1lIEVBWiBhcnJpdmVzLCB3aGljaCBkb2VzIG5vdCBtYXRjaAorICBhIG5ldHdvcmsgaW50ZXJmYWNlLCB0aGUgZmlyc3QgdHR5IGdldHMgYSAiUklORyIgYW5kIHNvIG9uLgorCisyIFN5c3RlbSBwcmVyZXF1aXNpdGVzOgorCisgIEFUVEVOVElPTiEKKworICBBbHdheXMgdXNlIHRoZSBsYXRlc3QgbW9kdWxlIHV0aWxpdGllcy4gVGhlIGN1cnJlbnQgdmVyc2lvbiBpcworICBuYW1lZCBpbiBEb2N1bWVudGF0aW9uL0NoYW5nZXMuIFNvbWUgb2xkIHZlcnNpb25zIG9mIGluc21vZAorICBhcmUgbm90IGNhcGFibGUgb2Ygc2V0dGluZyB0aGUgZHJpdmVyLUlkcyBjb3JyZWN0bHkuCisKKzMuIExvd2xldmVsLWRyaXZlciBjb25maWd1cmF0aW9uLgorCisgICBDb25maWd1cmF0aW9uIGRlcGVuZHMgb24gaG93IHRoZSBkcml2ZXJzIGFyZSBidWlsdC4gU2VlIHRoZQorICAgUkVBRE1FLjx5b3VyRHJpdmVyPiBmb3IgaW5mb3JtYXRpb24gb24gZHJpdmVyLXNwZWNpZmljIHNldHVwLgorCis0LiBEZXZpY2UtaW5vZGVzCisKKyAgIFRoZSBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBhbmQgdGhlaXIgbmFtZXMgYXJlIGRlc2NyaWJlZCBpbgorICAgRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dC4gVGhlIG1ham9yIG51bWJlcnMgYXJlOgorCisgICAgIDQzIGZvciB0aGUgSVNETi10dHkncy4KKyAgICAgNDQgZm9yIHRoZSBJU0ROLWNhbGxvdXQtdHR5J3MuCisgICAgIDQ1IGZvciBjb250cm9sL2luZm8vZGVidWcgZGV2aWNlcy4KKworNS4gQXBwbGljYXRpb24KKworICAgYSkgRm9yIHNvbWUgY2FyZC10eXBlcywgZmlybXdhcmUgaGFzIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBjYXJkcywgYmVmb3JlCisgICAgICBwcm9jZWVkaW5nIHdpdGggZGV2aWNlLWluZGVwZW5kZW50IHNldHVwLiBTZWUgUkVBRE1FLjx5b3VyRHJpdmVyPgorICAgICAgZm9yIGhvdyB0byBkbyB0aGF0LgorCisgICBiKSBJZiB5b3Ugb25seSBpbnRlbmQgdG8gdXNlIHR0eXMsIHlvdSBhcmUgbmVhcmx5IHJlYWR5IG5vdy4KKworICAgYykgSWYgeW91IHdhbnQgdG8gaGF2ZSByZWFsbHkgcGVybWFuZW50ICJNb2RlbSItc2V0dGluZ3Mgb24gZGlzaywgeW91CisgICAgICBjYW4gc3RhcnQgdGhlIGRhZW1vbiBpcHJvZmQuIEdpdmUgaXQgYSBwYXRoIHRvIGEgZmlsZSBhdCB0aGUgY29tbWFuZC0KKyAgICAgIGxpbmUuIEl0IHdpbGwgc3RvcmUgdGhlIHByb2ZpbGUtc2V0dGluZ3MgaW4gdGhpcyBmaWxlIGV2ZXJ5IHRpbWUKKyAgICAgIGFuIEFUJlcwIGlzIHBlcmZvcm1lZCBvbiBhbnkgSVNETi10dHkuIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLAorICAgICAgYWxsIHByb2ZpbGVzIGFyZSBpbml0aWFsaXplZCBmcm9tIHRoaXMgZmlsZS4gSWYgeW91IHdhbnQgdG8gdW5sb2FkCisgICAgICBhbnkgb2YgdGhlIG1vZHVsZXMsIGtpbGwgaXByb2ZkIGZpcnN0LgorCisgICBkKSBGb3IgbmV0d29ya2luZywgY29udGludWU6IENyZWF0ZSBhbiBpbnRlcmZhY2U6CisgICAgICAgaXNkbmN0cmwgYWRkaWYgaXNkbjAKKworICAgZSkgU2V0IHRoZSBFQVogKG9yIE1TTiBmb3IgRXVyby1JU0ROKToKKyAgICAgICBpc2RuY3RybCBlYXogaXNkbjAgMgorCisgICAgIChGb3IgMVRSNiBhIHNpbmdsZSBkaWdpdCBpcyBhbGxvd2VkLCBmb3IgRXVyby1JU0ROIHRoZSBudW1iZXIgaXMgeW91cgorICAgICAgcmVhbCBNU04gZS5nLjogUGhvbmUtTnVtYmVyKQorCisgICBmKSBTZXQgdGhlIG51bWJlciBmb3Igb3V0Z29pbmcgY2FsbHMgb24gdGhlIGludGVyZmFjZToKKyAgICAgICBpc2RuY3RybCBhZGRwaG9uZSBpc2RuMCBvdXQgMTIzNDU2NworICAgICAgIC4uLiAodGhpcyBjYW4gYmUgZXhlY3V0ZWQgbW9yZSB0aGFuIG9uY2UsIGFsbCBhc3NpZ25lZCBudW1iZXJzIGFyZQorICAgICAgICAgICAgdHJpZWQgaW4gb3JkZXIpCisgICAgICBhbmQgdGhlIG51bWJlcihzKSBmb3IgaW5jb21pbmcgY2FsbHM6CisgICAgICAgaXNkbmN0cmwgYWRkcGhvbmUgaXNkbjAgaW4gMTIzNDU2NworCisgICBnKSBTZXQgdGhlIHRpbWVvdXQgZm9yIGhhbmctdXA6CisgICAgICAgaXNkbmN0cmwgaHVwdGltZW91dCBpc2RuMCA8dGltZW91dF9pbl9zZWNvbmRzPgorCisgICBoKSBhZGRpdGlvbmFsbHkgeW91IG1heSBhY3RpdmF0ZSBjaGFyZ2UtaGFuZy11cCAoPSBIYW5nIHVwIGJlZm9yZQorICAgICAgbmV4dCBjaGFyZ2UtaW5mbywgdGhpcyBvbmx5IHdvcmtzLCBpZiB5b3VyIGlzZG4tcHJvdmlkZXIgdHJhbnNtaXRzCisgICAgICB0aGUgY2hhcmdlLWluZm8gZHVyaW5nIGFuZCBhZnRlciB0aGUgY29ubmVjdGlvbik6CisgICAgICAgaXNkbmN0cmwgY2hhcmdlaHVwIGlzZG4wIG9uCisKKyAgIGkpIFNldCB0aGUgZGlhbCBtb2RlIG9mIHRoZSBpbnRlcmZhY2U6CisgICAgICAgaXNkbmN0cmwgZGlhbG1vZGUgaXNkbjAgYXV0bworICAgICAgIm9mZiIgbWVhbnMgdGhhdCB5b3UgKG9yIHRoZSBzeXN0ZW0pIGNhbm5vdCBtYWtlIGFueSBjb25uZWN0aW9uCisgICAgICAgIChuZWl0aGVyIGluY29taW5nIG9yIG91dGdvaW5nIGNvbm5lY3Rpb25zIGFyZSBwb3NzaWJsZSkuIFVzZQorICAgICAgICB0aGlzIGlmIHlvdSB3YW50IHRvIGJlIHN1cmUgdGhhdCBubyBjb25uZWN0aW9ucyB3aWxsIGJlIG1hZGUuCisgICAgICAiYXV0byIgbWVhbnMgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIGluIGF1dG8tZGlhbCBtb2RlLCBhbmQgd2lsbAorICAgICAgICBhdHRlbXB0IHRvIG1ha2UgYSBjb25uZWN0aW9uIHdoZW5ldmVyIGEgbmV0d29yayBkYXRhIHBhY2tldCBuZWVkcworICAgICAgICB0aGUgaW50ZXJmYWNlJ3MgbGluay4gTm90ZSB0aGF0IHRoaXMgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgZGlhbG91dHMsCisgICAgICAgIGFuZCBsZWFkIHRvIGEgaGlnaCBwaG9uZSBiaWxsISBTb21lIGRhZW1vbnMgb3Igb3RoZXIgcGMncyB0aGF0IHVzZQorICAgICAgICB0aGlzIGludGVyZmFjZSBjYW4gY2F1c2UgdGhpcy4KKyAgICAgICAgSW5jb21pbmcgY29ubmVjdGlvbnMgYXJlIGFsc28gcG9zc2libGUuCisgICAgICAibWFudWFsIiBpcyBhIGRpYWwgbW9kZSBjcmVhdGVkIHRvIHByZXZlbnQgdGhlIHVuZXhwZWN0ZWQgZGlhbG91dHMuCisgICAgICAgIEluIHRoaXMgbW9kZSwgdGhlIGludGVyZmFjZSB3aWxsIG5ldmVyIG1ha2UgYW55IGNvbm5lY3Rpb25zIG9uIGl0cworICAgICAgICBvd24uIFlvdSBtdXN0IGV4cGxpY2l0bHkgaW5pdGlhdGUgYSBjb25uZWN0aW9uIHdpdGggImlzZG5jdHJsIGRpYWwKKyAgICAgICAgaXNkbjAiLiBIb3dldmVyLCBhZnRlciBhbiBpZGxlIHRpbWUgb2Ygbm8gdHJhZmZpYyBhcyBjb25maWd1cmVkIGZvcgorCXRoZSBodXB0aW1lb3V0IHZhbHVlIHdpdGggaXNkbmN0cmwsIHRoZSBjb25uZWN0aW9uIF93aWxsXyBiZSBlbmRlZC4KKwlJZiB5b3UgZG9uJ3Qgd2FudCBhbnkgYXV0b21hdGljIGhhbmd1cCwgc2V0IHRoZSBodXB0aW1lb3V0IHZhbHVlIHRvIDAuCisgICAgICAgICJtYW51YWwiIGlzIHRoZSBkZWZhdWx0LgorCisgICBqKSBTZXR1cCB0aGUgaW50ZXJmYWNlIHdpdGggaWZjb25maWcgYXMgdXN1YWwsIGFuZCBzZXQgYSByb3V0ZSB0byBpdC4KKworICAgaykgKG9wdGlvbmFsKSBJZiB5b3UgcnVuIFgxMSBhbmQgaGF2ZSBUY2wvVGstd2lzaCB2ZXJzaW9uIDQuMCwgeW91IGNhbiB1c2UKKyAgICAgdGhlIHNjcmlwdCB0b29scy90Y2x0ay9pc2RubW9uLiBZb3UgY2FuIGFkZCBhY3Rpb25zIGZvciBsaW5lLXN0YXR1cworICAgICBjaGFuZ2VzLiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjcmlwdCBmb3IgaG93IHRvCisgICAgIGRvIHRoYXQuIFRoZXJlIGFyZSBvdGhlciB0dHktYmFzZWQgdG9vbHMgaW4gdGhlIHRvb2xzLXN1YmRpcmVjdG9yeQorICAgICBjb250cmlidXRlZCBieSBNaWNoYWVsIEtuaWdnZSAoaW1vbiksIFZvbGtlciBH9nR6IChpbW9udHR5KSBhbmQKKyAgICAgQW5kcmVhcyBLb29sIChpc2RubW9uKS4KKworICAgbCkgRm9yIGluaXRpYWwgdGVzdGluZywgeW91IGNhbiBzZXQgdGhlIHZlcmJvc2UtbGV2ZWwgdG8gMiAoZGVmYXVsdDogMCkuCisgICAgICBUaGVuIGFsbCBpbmNvbWluZyBjYWxscyBhcmUgbG9nZ2VkLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBhZGRyZXNzZWQKKyAgICAgIHRvIG9uZSBvZiB0aGUgY29uZmlndXJlZCBuZXQtaW50ZXJmYWNlczoKKyAgICAgIGlzZG5jdHJsIHZlcmJvc2UgMgorCisgIE5vdyB5b3UgYXJlIHJlYWR5ISBBIHBpbmcgdG8gdGhlIHNldCBhZGRyZXNzIHNob3VsZCBub3cgcmVzdWx0IGluIGFuCisgIGF1dG9tYXRpYyBkaWFsLW91dCAobG9vayBhdCBzeXNsb2cga2VybmVsLW1lc3NhZ2VzKS4KKyAgVGhlIHBob25lIG51bWJlcnMgYW5kIEVBWnMgY2FuIGJlIGFzc2lnbmVkIGF0IGFueSB0aW1lIHdpdGggaXNkbmN0cmwuCisgIFlvdSBjYW4gYWRkIGFzIG1hbnkgaW50ZXJmYWNlcyBhcyB5b3UgbGlrZSB3aXRoIGFkZGlmIGZvbGxvd2luZyB0aGUKKyAgZGlyZWN0aW9ucyBhYm92ZS4gT2YgY291cnNlLCB0aGVyZSBtYXkgYmUgc29tZSBsaW1pdGF0aW9ucy4gQnV0IHdlIGhhdmUKKyAgdGVzdGVkIGFzIG1hbnkgYXMgMjAgaW50ZXJmYWNlcyB3aXRob3V0IGFueSBwcm9ibGVtLiBIb3dldmVyLCBpZiB5b3UKKyAgZG9uJ3QgZ2l2ZSBhbiBpbnRlcmZhY2UgbmFtZSB0byBhZGRpZiwgdGhlICBrZXJuZWwgd2lsbCBhc3NpZ24gYSBuYW1lCisgIHdoaWNoIHN0YXJ0cyB3aXRoICJldGgiLiBUaGUgbnVtYmVyIG9mICJldGgiLWludGVyZmFjZXMgaXMgbGltaXRlZCBieQorICB0aGUga2VybmVsLgorCis1LiBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGlzZG5jdHJsOgorCisgICAiaXNkbmN0cmwgc2VjdXJlIDxJbnRlcmZhY2VOYW1lPiBvbiIKKyAgIE9ubHkgaW5jb21pbmcgY2FsbHMsIGZvciB3aGljaCB0aGUgY2FsbGVyLWlkIGlzIGxpc3RlZCBpbiB0aGUgYWNjZXNzCisgICBsaXN0IG9mIHRoZSBpbnRlcmZhY2UgYXJlIGFjY2VwdGVkLiBZb3UgY2FuIGFkZCBjYWxsZXItaWQncyBXaXRoIHRoZQorICAgY29tbWFuZCAiaXNkbmN0cmwgYWRkcGhvbmUgPEludGVyZmFjZU5hbWU+IGluIDxjYWxsZXItaWQ+IgorICAgRXVyby1JU0ROIGRvZXMgbm90IHRyYW5zbWl0IHRoZSBsZWFkaW5nICcwJyBvZiB0aGUgY2FsbGVyLWlkIGZvciBhbgorICAgaW5jb21pbmcgY2FsbCwgdGhlcmVmb3JlIHlvdSBzaG91bGQgY29uZmlndXJlIGl0IGFjY29yZGluZ2x5LgorICAgSWYgdGhlIHJlYWwgbnVtYmVyIGZvciB0aGUgZGlhbG91dCBlLmcuIGlzICIwOTMxMTIzNDU2NyIgdGhlIG51bWJlcgorICAgdG8gY29uZmlndXJlIGhlcmUgaXMgIjkzMTEyMzQ1NjciLiBUaGUgcGF0dGVybi1tYXRjaCBmdW5jdGlvbgorICAgd29ya3Mgc2ltaWxhciB0byB0aGUgc2hlbGwgbWVjaGFuaXNtLgorCisgICAgID8gICAgIG9uZSBhcmJpdHJhcnkgZGlnaXQKKyAgICAgKiAgICAgemVybyBvciBhcmJpdHJhcnkgbWFueSBkaWdpdHMKKyAgICAgWzEyM10gb25lIG9mIHRoZSBkaWdpdHMgaW4gdGhlIGxpc3QKKyAgICAgWzEtNV0gb25lIGRpZ2l0IGJldHdlZW4gJzEnIGFuZCAnNScKKyAgICAgICAgICAgYSAnXicgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBhIGxpc3QgaW52ZXJ0cyB0aGUgbGlzdAorCisKKyAgICJpc2RuY3RybCBzZWN1cmUgPEludGVyZmFjZU5hbWU+IG9mZiIKKyAgIFN3aXRjaCBvZmYgc2VjdXJlIG9wZXJhdGlvbiAoZGVmYXVsdCkuCisKKyAgICJpc2RuY3RybCBpaHVwIDxJbnRlcmZhY2VOYW1lPiBbb258b2ZmXSIKKyAgIFN3aXRjaCB0aGUgaGFuZy11cC10aW1lciBmb3IgaW5jb21pbmcgY2FsbHMgb24gb3Igb2ZmLgorCisgICAiaXNkbmN0cmwgZWF6IDxJbnRlcmZhY2VOYW1lPiIKKyAgIFJldHVybnMgdGhlIEVBWiBvZiBhbiBpbnRlcmZhY2UuCisKKyAgICJpc2RuY3RybCBkZWxwaG9uZSA8SW50ZXJmYWNlTmFtZT4gaW58b3V0IDxudW1iZXI+IgorICAgRGVsZXRlcyBhIG51bWJlciBmcm9tIG9uZSBvZiB0aGUgYWNjZXNzLWxpc3RzIG9mIHRoZSBpbnRlcmZhY2UuCisKKyAgICJpc2RuY3RybCBkZWxpZiA8SW50ZXJmYWNlTmFtZT4iCisgICBSZW1vdmVzIHRoZSBpbnRlcmZhY2UgKGFuZCBwb3NzaWJsZSBzbGF2ZXMpIGZyb20gdGhlIGtlcm5lbC4KKyAgIChZb3UgaGF2ZSB0byB1bnJlZ2lzdGVyIGl0IHdpdGggImlmY29uZmlnIDxJbnRlcmZhY2VOYW1lPiBkb3duIiBiZWZvcmUpLgorCisgICAiaXNkbmN0cmwgY2FsbGJhY2sgPEludGVyZmFjZU5hbWU+IFtvbnxvZmZdIgorICAgU3dpdGNoZXMgYW4gaW50ZXJmYWNlIHRvIGNhbGxiYWNrLW1vZGUuIEluIHRoaXMgbW9kZSwgYW4gaW5jb21pbmcgY2FsbAorICAgd2lsbCBiZSByZWplY3RlZCBhbmQgYWZ0ZXIgdGhpcyB0aGUgcmVtb3RlLXN0YXRpb24gd2lsbCBiZSBjYWxsZWQuIElmCisgICB5b3UgdGVzdCB0aGlzIGZlYXR1cmUgYnkgdXNpbmcgcGluZywgc29tZSByb3V0ZXJzIHdpbGwgcmUtZGlhbCB2ZXJ5CisgICBxdWlja2x5LCBzbyB0aGF0IHRoZSBjYWxsYmFjayBmcm9tIGlzZG40bGludXggbWF5IG5vdCBiZSByZWNvZ25pemVkLgorICAgSW4gdGhpcyBjYXNlIHVzZSBwaW5nIHdpdGggdGhlIG9wdGlvbiAtaSA8c2VjPiB0byBpbmNyZWFzZSB0aGUgaW50ZXJ2YWwKKyAgIGJldHdlZW4gZWNoby1wYWNrZXRzLgorCisgICAiaXNkbmN0cmwgY2JkZWxheSA8SW50ZXJmYWNlTmFtZT4gW3NlY29uZHNdIgorICAgU2V0cyB0aGUgZGVsYXkgKGRlZmF1bHQgNSBzZWMpIGJldHdlZW4gYW4gaW5jb21pbmcgY2FsbCBhbmQgc3RhcnQgb2YKKyAgIGRpYWxpbmcgd2hlbiBjYWxsYmFjayBpcyBlbmFibGVkLgorCisgICAiaXNkbmN0cmwgY2JodXAgPEludGVyZmFjZU5hbWU+IFtvbnxvZmZdIgorICAgVGhpcyBlbmFibGVzIChkZWZhdWx0KSBvciBkaXNhYmxlcyBhbiBhY3RpdmUgaGFuZ3VwIChyZWplY3QpIHdoZW4gZ2V0dGluZyBhbgorICAgaW5jb21pbmcgY2FsbCBmb3IgYW4gaW50ZXJmYWNlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgZm9yIGNhbGxiYWNrLgorCisgICAiaXNkbmN0cmwgZW5jYXAgPEludGVyZmFjZU5hbWU+IDxFbmNhcFR5cGU+IgorICAgU2VsZWN0cyB0aGUgdHlwZSBvZiBwYWNrZXQtZW5jYXBzdWxhdGlvbi4gVGhlIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGNoYW5nZWQKKyAgIG9ubHkgd2hpbGUgYW4gaW50ZXJmYWNlIGlzIGRvd24uCisKKyAgIEF0IHRoZSBtb21lbnQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHN1cHBvcnRlZDoKKworICAgcmF3aXAgICAgKERlZmF1bHQpIFNlbGVjdHMgcmF3LUlQLWVuY2Fwc3VsYXRpb24uIFRoaXMgbWVhbnMsIE1BQy1oZWFkZXJzCisgICAgICAgICAgICBhcmUgc3RyaXBwZWQgb2ZmLgorICAgaXAgICAgICAgSVAgd2l0aCB0eXBlLWZpZWxkLiBTYW1lIGFzIElQIGJ1dCB0aGUgdHlwZS1maWVsZCBvZiB0aGUgTUFDLWhlYWRlcgorICAgICAgICAgICAgaXMgcHJlc2VydmVkLgorICAgeDI1aWZhY2UgWC4yNSBpbnRlcmZhY2UgZW5jYXBzdWxhdGlvbiAoZmlyc3QgYnl0ZSBzZW1hbnRpY3MgYXMgZGVmaW5lZCBpbgorICAgICAgICAgICAgLi4vbmV0d29ya2luZy94MjUtaWZhY2UudHh0KS4gVXNlIHRoaXMgZm9yIHJ1bm5pbmcgdGhlIGxpbnV4CisgICAgICAgICAgICBYLjI1IG5ldHdvcmsgcHJvdG9jb2wgc3RhY2sgKEFGX1gyNSBzb2NrZXRzKSBvbiB0b3Agb2YgaXNkbi4KKyAgIGNpc2NvLWggIEEgc3BlY2lhbC1tb2RlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggYSBDaXNjbywgd2hpY2ggaXMgY29uZmlndXJlZAorICAgICAgICAgICAgdG8gZG8gImhkbGMiCisgICBldGhlcm5ldCBObyBzdHJpcHBpbmcuIFBhY2tldHMgYXJlIHNlbnQgd2l0aCBmdWxsIE1BQy1oZWFkZXIuCisgICAgICAgICAgICBUaGUgRXRoZXJuZXQtYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIGlzIGZha2VkLCBmcm9tIGl0cworICAgICAgICAgICAgSVAtYWRkcmVzczogZmM6ZmM6aTE6aTI6aTM6aTQsIHdoZXJlIGkxLTQgYXJlIHRoZSBJUC1hZGRyLi12YWx1ZXMuCisgICBzeW5jcHBwICBTeW5jaHJvbm91cyBQUFAKKworICAgdWloZGxjICAgSERMQyB3aXRoIFVJLWZyYW1lLWhlYWRlciAoZm9yIHVzZSB3aXRoIERPUyBJU1BBLCBvcHRpb24gLWgxKQorCisKKyAgIE5PVEU6ICAgIHgyNWlmYWNlIGVuY2Fwc3VsYXRpb24gaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gUGxlYXNlCisgICAgICAgICAgICByZWFkIFJFQURNRS54MjUgZm9yIGZ1cnRoZXIgZGV0YWlscworCisKKyAgIFdhdGNoaW5nIHBhY2tldHMsIHVzaW5nIHN0YW5kYXJkLXRjcGR1bXAgd2lsbCBmYWlsIGZvciBhbGwgZW5jYXBzdWxhdGlvbnMKKyAgIGV4Y2VwdCBldGhlcm5ldCBiZWNhdXNlIHRjcGR1bXAgZG9lcyBub3Qga25vdyBob3cgdG8gaGFuZGxlIHBhY2tldHMKKyAgIHdpdGhvdXQgTUFDLWhlYWRlci4gQSBwYXRjaCBmb3IgdGNwZHVtcCBpcyBpbmNsdWRlZCBpbiB0aGUgdXRpbGl0eS1wYWNrYWdlCisgICBtZW50aW9uZWQgYWJvdmUuCisKKyAgICJpc2RuY3RybCBsMl9wcm90IDxJbnRlcmZhY2VOYW1lPiA8TDItUHJvdG9jb2xOYW1lPiIKKyAgIFNlbGVjdHMgYSBsYXllci0yLXByb3RvY29sLgorICAgKFdpdGggdGhlIElDTi1kcml2ZXIgYW5kIHRoZSBIaVNheC1kcml2ZXIsICJ4NzVpIiBhbmQgImhkbGMiIGlzIGF2YWlsYWJsZS4KKyAgIFdpdGggb3RoZXIgZHJpdmVycywgIng3NXVpIiwgIng3NWJ1aSIsICJ4MjVkdGUiLCAieDI1ZGNlIiBtYXkgYmUKKyAgIHBvc3NpYmxlIHRvby4gU2VlIFJFQURNRS54MjUgZm9yIHgyNSByZWxhdGVkIGwyIHByb3RvY29scy4pCisKKyAgIGlzZG5jdHJsIGwzX3Byb3QgPEludGVyZmFjZU5hbWU+IDxMMy1Qcm90b2NvbE5hbWU+CisgICBUaGUgc2FtZSBmb3IgbGF5ZXItMy4gKEF0IHRoZSBtb21lbnQgb25seSAidHJhbnMiIGlzIGFsbG93ZWQpCisKKyAgICJpc2RuY3RybCBsaXN0IDxJbnRlcmZhY2VOYW1lPiIKKyAgIFNob3dzIGFsbCBwYXJhbWV0ZXJzIG9mIGFuIGludGVyZmFjZSBhbmQgdGhlIGNoYXJnZS1pbmZvLgorICAgVHJ5ICJhbGwiIGFzIHRoZSBpbnRlcmZhY2UgbmFtZS4KKworICAgImlzZG5jdHJsIGhhbmd1cCA8SW50ZXJmYWNlTmFtZT4iCisgICBGb3JjZXMgaGFuZ3VwIG9mIGFuIGludGVyZmFjZS4KKworICAgImlzZG5jdHJsIGJpbmQgPEludGVyZmFjZU5hbWU+IDxEcml2ZXJJZD4sPENoYW5uZWxOdW1iZXI+IFtleGNsdXNpdmVdIgorICAgSWYgeW91IGFyZSB1c2luZyBtb3JlIHRoYW4gb25lIElTRE4gY2FyZCwgaXQgaXMgc29tZXRpbWVzIG5lY2Vzc2FyeSB0bworICAgZGlhbCBvdXQgdXNpbmcgYSBzcGVjaWZpYyBjYXJkIG9yIGV2ZW4gcHJlc2VydmUgYSBzcGVjaWZpYyBjaGFubmVsIGZvcgorICAgZGlhbG91dCBvZiBhIHNwZWNpZmljIG5ldC1pbnRlcmZhY2UuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCB0aGUgYWJvdmUKKyAgIGNvbW1hbmQuIFJlcGxhY2UgPERyaXZlcklkPiBieSB3aGF0ZXZlciB5b3UgYXNzaWduZWQgd2hpbGUgbG9hZGluZyB0aGUKKyAgIG1vZHVsZS4gVGhlIDxDaGFubmVsTnVtYmVyPiBpcyBjb3VudGVkIGZyb20gemVyby4gVGhlIHVwcGVyIGxpbWl0CisgICBkZXBlbmRzIG9uIHRoZSBjYXJkIHVzZWQuIEF0IHRoZSBtb21lbnQgbm8gY2FyZCBzdXBwb3J0cyBtb3JlIHRoYW4KKyAgIDIgY2hhbm5lbHMsIHNvIHRoZSB1cHBlciBsaW1pdCBpcyBvbmUuCisKKyAgICJpc2RuY3RybCB1bmJpbmQgPEludGVyZmFjZU5hbWU+IgorICAgdW5iaW5kcyBhIHByZXZpb3VzbHkgYm91bmQgaW50ZXJmYWNlLgorCisgICAiaXNkbmN0cmwgYnVzcmVqZWN0IDxEcml2ZXJJZD4gb258b2ZmIgorICAgSWYgc3dpdGNoZWQgb24sIGlzZG40bGludXggcmVwbGllcyBhIFJFSkVDVCB0byBpbmNvbWluZyBjYWxscywgaXQKKyAgIGNhbm5vdCBtYXRjaCB0byBhbnkgY29uZmlndXJlZCBpbnRlcmZhY2UuCisgICBJZiBzd2l0Y2hlZCBvZmYsIG5vdGhpbmcgaGFwcGVucyBpbiB0aGlzIGNhc2UuCisgICBZb3Ugbm9ybWFsbHkgc2hvdWxkIE5PVCBlbmFibGUgdGhpcyBmZWF0dXJlLCBpZiB0aGUgSVNETiBhZGFwdGVyIGlzIG5vdAorICAgdGhlIG9ubHkgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgUzAtYnVzLiBPdGhlcndpc2UgaXQgY291bGQgaGFwcGVuIHRoYXQKKyAgIGlzZG40bGludXggcmVqZWN0cyBhbiBpbmNvbWluZyBjYWxsLCB3aGljaCBiZWxvbmdzIHRvIGFub3RoZXIgZGV2aWNlIG9uCisgICB0aGUgYnVzLgorCisgICAiaXNkbmN0cmwgYWRkc2xhdmUgPEludGVyZmFjZU5hbWU+IDxTbGF2ZU5hbWU+CisgICBDcmVhdGVzIGEgc2xhdmUgaW50ZXJmYWNlIGZvciBjaGFubmVsLWJ1bmRsaW5nLiBTbGF2ZSBpbnRlcmZhY2VzIGFyZQorICAgbm90IHNlZW4gYnkgdGhlIGtlcm5lbCwgYnV0IHRoZWlyIElTRE4tcGFydCBjYW4gYmUgY29uZmlndXJlZCB3aXRoCisgICBpc2RuY3RybCBhcyB1c3VhbC4gKFBob25lIG51bWJlcnMsIEVBWi9NU04sIHRpbWVvdXRzIGV0Yy4pIElmIG1vcmUKKyAgIHRoYW4gdHdvIGNoYW5uZWxzIGFyZSB0byBiZSBidW5kbGVkLCBmZWVsIGZyZWUgdG8gY3JlYXRlIGFzIG1hbnkgYXMgeW91CisgICB3YW50LiBJbnRlcmZhY2VOYW1lIG11c3QgYmUgYSByZWFsIGludGVyZmFjZSwgTk9UIGEgc2xhdmUuIFNsYXZlIGludGVyZmFjZXMKKyAgIHN0YXJ0IGRpYWxpbmcsIGlmIHRoZSBtYXN0ZXIgaW50ZXJmYWNlIHJlc3AuIHRoZSBwcmV2aW91cyBzbGF2ZSBpbnRlcmZhY2UKKyAgIGhhcyBhIGxvYWQgb2YgbW9yZSB0aGFuIDcwMDAgY3BzLiBUaGV5IGhhbmd1cCBpZiB0aGUgbG9hZCBnb2VzIHVuZGVyIDcwMDAKKyAgIGNwcywgYWNjb3JkaW5nIHRvIHRoZWlyICJodXB0aW1lb3V0Ii1wYXJhbWV0ZXIuCisKKyAgICJpc2RuY3RybCBzZGVsYXkgPEludGVyZmFjZU5hbWU+IHNlY3MuIgorICAgVGhpcyBzZXRzIHRoZSBtaW5pbXVtIHRpbWUgYW4gSW50ZXJmYWNlIGhhcyB0byBiZSBmdWxseSBsb2FkZWQsIHVudGlsCisgICBpdCBzZW5kcyBhIGRpYWwtcmVxdWVzdCB0byBpdHMgc2xhdmUuCisKKyAgICJpc2RuY3RybCBkaWFsIDxJbnRlcmZhY2VOYW1lPiIKKyAgIEZvcmNlcyBhbiBpbnRlcmZhY2UgdG8gc3RhcnQgZGlhbGluZyBldmVuIGlmIG5vIHBhY2tldHMgYXJlIHRvIGJlCisgICB0cmFuc2ZlcnJlZC4KKworICAgImlzZG5jdHJsIG1hcHBpbmcgPERyaXZlcklkPiBNU04wLE1TTjEsTVNOMiwuLi5NU045IgorICAgVGhpcyBpbnN0YWxscyBhIG1hcHBpbmcgdGFibGUgZm9yIEVBWjwtPk1TTi1tYXBwaW5nIGZvciBhIHNpbmdsZSBsaW5lLgorICAgTWlzc2luZyBNU04ncyBoYXZlIHRvIGJlIGdpdmVuIGFzICItIiBvciBjYW4gYmUgb21pdHRlZCwgaWYgYXQgdGhlIGVuZAorICAgb2YgdGhlIGNvbW1hbmRsaW5lLgorICAgV2l0aCB0aGlzIGNvbW1hbmQsIGl0J3Mgbm93IHBvc3NpYmxlIHRvIGhhdmUgYW4gaW50ZXJmYWNlIGxpc3RlbmluZyB0bworICAgbWl4ZWQgMVRSNi0gYW5kIEV1cm8tVHlwZSBsaW5lcy4gSW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJmYWNlIGhhcyB0byBiZQorICAgY29uZmlndXJlZCB0byBhIDFUUjYtdHlwZSBFQVogKG9uZSBkaWdpdCkuIFRoZSBtYXBwaW5nIGlzIGFsc28gdmFsaWQKKyAgIGZvciB0dHktZW11bGF0aW9uLiBTZWVuIGZyb20gdGhlIGludGVyZmFjZS90dHktbGV2ZWwgdGhlIG1hcHBpbmcKKyAgIENBTiBiZSB1c2VkLCBob3dldmVyIGl0J3MgcG9zc2libGUgdG8gdXNlIHNpbmdsZSB0dHkncy9pbnRlcmZhY2VzIHdpdGgKKyAgIHJlYWwgTVNOJ3MgKG1vcmUgZGlnaXRzKSBhbHNvLCBpbiB3aGljaCBjYXNlIHRoZSBtYXBwaW5nIHdpbGwgYmUgaWdub3JlZC4KKyAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKworICAgWW91IGhhdmUgYSAxVFI2LXR5cGUgbGluZSB3aXRoIGJhc2UtbnIuIDEyMzQ1NjcgYW5kIGEgRXVyby1saW5lIHdpdGgKKyAgIE1TTidzIDk4NzY1NCwgOTg3NjU1IGFuZCA5ODc2NTYuIFRoZSBEcml2ZXJJZCBmb3IgdGhlIEV1cm8tbGluZSBpcyAiRVVSTyIuCisKKyAgIGlzZG5jdHJsIG1hcHBpbmcgRVVSTyAtLDk4NzY1NCw5ODc2NTUsOTg3NjU2LC0sOTg3NjU1CisgICAuLi4KKyAgIGlzZG5jdHJsIGVheiBpc2RuMCAxICAgICAgIyBsaXN0ZW4gb24gMTIzNDU2NzEoMXRyNikgYW5kIDk4NzY1NChldXJvKQorICAgLi4uCisgICBpc2RuY3RybCBlYXogaXNkbjEgNCAgICAgICMgbGlzdGVuIG9uIDEyMzQ1Njc0KDF0cjYpIG9ubHkuCisgICAuLi4KKyAgIGlzZG5jdHJsIGVheiBpc2RuMiA5ODc2NTQgIyBsaXN0ZW4gb24gOTg3NjU0KGV1cm8pIG9ubHkuCisKKyAgIFNhbWUgc2NoZW1lIGlzIHVzZWQgd2l0aCBBVCZFLi4uICBhdCB0aGUgdHR5J3MuCisKKzYuIElmIHlvdSB3YW50IHRvIHdyaXRlIGEgbmV3IGxvdy1sZXZlbC1kcml2ZXIsIHlvdSBhcmUgd2VsY29tZS4KKyAgIFRoZSBpbnRlcmZhY2UgdG8gdGhlIGxpbmstbGV2ZWwtbW9kdWxlIGlzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBJTlRFUkZBQ0UuCisgICBJZiB0aGUgaW50ZXJmYWNlIHNob3VsZCBiZSBleHBhbmRlZCBmb3IgYW55IHJlYXNvbiwgZG9uJ3QgZG8gaXQKKyAgIG9uIHlvdXIgb3duLCBzZW5kIG1lIGEgbWFpbCBjb250YWluaW5nIHRoZSBwcm9wb3NlZCBjaGFuZ2VzIGFuZAorICAgc29tZSByZWFzb25pbmcgYWJvdXQgdGhlbS4KKyAgIElmIG90aGVyIGRyaXZlcnMgd2lsbCBub3QgYmUgYWZmZWN0ZWQsIEkgd2lsbCBpbmNsdWRlIHRoZSBjaGFuZ2VzCisgICBpbiB0aGUgbmV4dCByZWxlYXNlLgorICAgRm9yIGRldmVsb3BlcnMgb25seSwgdGhlcmUgaXMgYSBzZWNvbmQgbWFpbGluZy1saXN0LiBXcml0ZSB0byBtZQorICAgKGZyaXR6QGlzZG40bGludXguZGUpLCBpZiB5b3Ugd2FudCB0byBqb2luIHRoYXQgbGlzdC4KKworSGF2ZSBmdW4hCisKKyAtRnJpdHoKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5GQVEgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLkZBUQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZmNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5GQVEKQEAgLTAsMCArMSwyNiBAQAorCitUaGUgRkFRIGZvciBpc2RuNGxpbnV4Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSBub3RlIHRoYXQgdGhlcmUgaXMgYSBiaWcgRkFRIGF2YWlsYWJsZSBpbiB0aGUgaXNkbjRrLXV0aWxzLgorWW91IGZpbmQgaXQgaW46CisgaXNkbjRrLXV0aWxzL0ZBUS9pNGxmYXEuc2dtbAorCitJbiBjYXNlIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHRoZSBGQVEgb25saW5lLCBvciBkb3dubG9hZCB0aGUgbmV3ZXN0IHZlcnNpb24sCit5b3UgY2FuIGhhdmUgYSBsb29rIGF0IG15IHdlYnNpdGU6CitodHRwOi8vd3d3Lm1oZXNzbGVyLmRlL2k0bGZhcS8gKHZpZXcgKyBkb3dubG9hZCkKK29yOgoraHR0cDovL3d3dy5pc2RuNGxpbnV4LmRlL2ZhcS8gKHZpZXcpCisKK0FzIHRoZSBleHRlbnNpb24gdGVsbHMsIHRoZSBGQVEgaXMgaW4gU0dNTCBmb3JtYXQsIGFuZCB5b3UgY2FuIGNvbnZlcnQgaXQKK2ludG8gdGV4dC9odG1sLy4uLiBmb3JtYXQgYnkgdXNpbmcgdGhlIHNnbWwydHh0L3NnbWwyaHRtbC8uLi4gdG9vbHMuCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gZG8gYSAnY29uZmlndXJlOyBtYWtlIGFsbCcgaW4gdGhlIEZBUSBkaXJlY3RvcnkuCisKKworUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBGQVEgYmVmb3JlIHBvc3RpbmcgYW55dGhpbmcgaW4gdGhlIE1haWxpbmdsaXN0LAorb3IgdGhlIG5ld3Nncm91cCEKKworCitNYXR0aGlhcyBIZXNzbGVyCitoZXNzbGVyQGlzZG40bGludXguZGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheCBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYzhkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXgKQEAgLTAsMCArMSw2NTkgQEAKK0hpU2F4IGlzIGEgTGludXggaGFyZHdhcmUtbGV2ZWwgZHJpdmVyIGZvciBwYXNzaXZlIElTRE4gY2FyZHMgd2l0aCBTaWVtZW5zCitjaGlwc2V0IChJU0FDX1MgMjA4NS8yMDg2LzIxODYsIEhTQ1ggU0FCIDgyNTI1KS4gSXQgaXMgYmFzZWQgb24gdGhlIFRlbGVzCitkcml2ZXIgZnJvbSBKYW4gZGVuIE91ZGVuLgorSXQgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIGlzZG40bGludXgsIGFuIElTRE4gbGluay1sZXZlbCBtb2R1bGUgZm9yIExpbnV4Cit3cml0dGVuIGJ5IEZyaXR6IEVsZmVydC4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKK1N1cHBvcnRlZCBjYXJkcworLS0tLS0tLS0tLS0tLS0tCisKK1RlbGVzIDguMC8xNi4wLzE2LjMgYW5kIGNvbXBhdGlibGUgb25lcworVGVsZXMgMTYuM2MKK1RlbGVzIFMwL1BDTUNJQQorVGVsZXMgUENJCitUZWxlcyBTMEJveAorQ3JlYXRpeCBTMEJveAorQ3JlYXRpeCBQblAgUzAKK0NvbXBhcSBJU0ROIFMwIElTQSBjYXJkCitBVk0gQTEgKEZyaXR6LCBUZWxlZGF0IDE1MCkKK0FWTSBGcml0eiBQQ01DSUEKK0FWTSBGcml0eiBQblAKK0FWTSBGcml0eiBQQ0kKK0VMU0EgTWljcm9saW5rIFBDQy0xNiwgUENGLCBQQ0YtUHJvLCBQQ0MtOAorRUxTQSBRdWlja3N0ZXAgMTAwMAorRUxTQSBRdWlja3N0ZXAgMTAwMFBDSQorRUxTQSBRdWlja3N0ZXAgMzAwMCAoc2FtZSBzZXR0aW5ncyBhcyBRUzEwMDApCitFTFNBIFF1aWNrc3RlcCAzMDAwUENJCitFTFNBIFBDTUNJQQorSVRLIGl4MS1taWNybyBSZXYuMgorRWljb24gRGl2YSAyLjAgSVNBIGFuZCBQQ0kgKFMwIGFuZCBVIGludGVyZmFjZSwgbm8gUFJPIHZlcnNpb24pCitFaWNvbiBEaXZhIDIuMDEgSVNBIGFuZCBQQ0kKK0VpY29uIERpdmEgMi4wMiBQQ0kKK0VpY29uIERpdmEgUGljY29sYQorQVNVU0NPTSBORVRXT1JLIElOQy4gSVNETkxpbmsgMTI4SyBQQyBhZGFwdGVyIChvcmRlciBjb2RlIEktSU4xMDAtU1QtRCkKK0R5bmFsaW5rIElTNjRQSCAoT0VNIHZlcnNpb24gb2YgQVNVU0NPTSBORVRXT1JLIElOQy4gSVNETkxpbmsgMTI4SyBhZGFwdGVyKQorUENCSVQtRFAgKE9FTSB2ZXJzaW9uIG9mIEFTVVNDT00gTkVUV09SSyBJTkMuIElTRE5MaW5rKQorSEZDLTJCUzAgYmFzZWQgY2FyZHMgKFRlbGVJbnQgU0ExKQorU2VkbGJhdWVyIFNwZWVkIENhcmQgKFNwZWVkIFdpbiwgVGVsZWRhdCAxMDAsIFBDSSwgRmF4KykKK1NlZGxiYXVlciBTcGVlZCBTdGFyL1NwZWVkIFN0YXIyIChQQ01DSUEpCitTZWRsYmF1ZXIgSVNETi1Db250cm9sbGVyIFBDLzEwNAorVVNSIFNwb3J0c3RlciBpbnRlcm5hbCBUQSAoY29tcGF0aWJsZSBTdG9sbG1hbm4gdGluYS1wcCBWMykKK1VTUiBpbnRlcm5hbCBUQSBQQ0kKK2l0aCBLb21tdW5pa2F0aW9uc3RlY2huaWsgR21iSCBNSUMgMTYgSVNBIGNhcmQKK1RyYXZlcnNlIFRlY2hub2xvZ2llIE5FVGpldCBQQ0kgUzAgY2FyZCBhbmQgTkVUc3BpZGVyIFUgY2FyZAorT3Zpc2xpbmsgSVNETiBzYzEwMC1wIGNhcmQgKE5FVGpldCBkcml2ZXIpCitEci4gTmV1aGF1cyBOaWNjeSBQblAvUENJCitTaWVtZW5zIEktU3VyZiAxLjAKK1NpZW1lbnMgSS1TdXJmIDIuMCAod2l0aCBJUEFDLCB0cnkgdHlwZSAxMiBhc3VzY29tKSAKK0FDRVIgUDEwCitIU1QgU2FwaGlyCitCZXJrb20gVGVsZWtvbSBBNFQKK1NjaXRlbCBRdWFkcm8KK0dhemVsIElTRE4gY2FyZHMKK0hGQy1QQ0kgYmFzZWQgY2FyZHMKK1dpbmJvbmQgVzY2OTIgYmFzZWQgY2FyZHMKK0hGQy1TKywgSEZDLVNQL1BDTUNJQSBjYXJkcworZm9ybXVsYS1uIGVudGVybm93CitHZXJkZXMgUG93ZXIgSVNETgorCitOb3RlOiBQQ0YsIFBDRi1Qcm86IHVwIHRvIG5vdywgb25seSB0aGUgSVNETiBwYXJ0IGlzIHN1cHBvcnRlZAorICAgICAgUENDLTg6IG5vdCB0ZXN0ZWQgeWV0CisgICAgICBFaWNvbi5EaWVobCBEaXZhIFUgaW50ZXJmYWNlIG5vdCB0ZXN0ZWQKKworSWYgeW91IGtub3cgb3RoZXIgcGFzc2l2ZSBjYXJkcyB3aXRoIHRoZSBTaWVtZW5zIGNoaXBzZXQsIHBsZWFzZSBsZXQgbWUga25vdy4KK1lvdSBjYW4gY29tYmluZSBhbnkgY2FyZCwgaWYgdGhlcmUgaXMgbm8gY29uZmxpY3QgYmV0d2VlbiB0aGUgcmVzb3VyY2VzCisoaW8sIG1lbSwgaXJxKS4KKworCitDb25maWd1cmluZyB0aGUgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBIaVNheCBkcml2ZXIgY2FuIGVpdGhlciBiZSBidWlsdCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuCitJdCBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgY29tbWFuZCBsaW5lIGZlYXR1cmUgd2hpbGUgbG9hZGluZyB0aGUga2VybmVsCit3aXRoIExJTE8gb3IgTE9BRExJTiBvciwgaWYgYnVpbHQgYXMgYSBtb2R1bGUsIHVzaW5nIGluc21vZC9tb2Rwcm9iZSB3aXRoCitwYXJhbWV0ZXJzLgorVGhlcmUgaXMgYWxzbyBzb21lIGNvbmZpZyBuZWVkZWQgYmVmb3JlIHlvdSBjb21waWxlIHRoZSBrZXJuZWwgYW5kL29yCittb2R1bGVzLiBJdCBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsICJtYWtlIFttZW51XWNvbmZpZyIgdGFyZ2V0IGF0IHRoZQora2VybmVsLiBEb24ndCBmb3JnZXQgaXQsIGVzcGVjaWFsbHkgdG8gc2VsZWN0IHRoZSByaWdodCBELWNoYW5uZWwgcHJvdG9jb2wuCisKK1BsZWFzZSBub3RlOiBJbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgSGlTYXggZHJpdmVyLCBhbGwgUG5QIGNhcmRzCituZWVkZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoIGlzYXBucCBhbmQgd29ya2VkIG9ubHkgd2l0aCB0aGUgSGlTYXgKK2RyaXZlciB1c2VkIGFzIGEgbW9kdWxlLgorCitJbiB0aGUgY3VycmVudCB2ZXJzaW9uLCBIaVNheCB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBpbi1rZXJuZWwKK0lTQVBuUCBzdXBwb3J0LCBwcm92aWRlZCB5b3Ugc2VsZWN0ZWQgaXQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uCisoQ09ORklHX0lTQVBOUCksIGlmIHlvdSBkb24ndCBnaXZlIHRoZSBpbz0sIGlycT0gY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuCisKK1RoZSBhZmZlY3RlZCBjYXJkIHR5cGVzIGFyZTogNCw3LDEyLDE0LDE5LDI3LTMwCisKK2EpIHdoZW4gYnVpbHQgYXMgYSBtb2R1bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5zbW9kL21vZHByb2JlICBoaXNheC5vIFwKKyAgaW89aW9iYXNlIGlycT1JUlEgbWVtPW1lbWJhc2UgdHlwZT1jYXJkX3R5cGUgXAorICBwcm90b2NvbD1EX2NoYW5uZWxfcHJvdG9jb2wgaWQ9aWRzdHJpbmcKKworb3IsIGlmIHNldmVyYWwgY2FyZHMgYXJlIGluc3RhbGxlZDoKKworaW5zbW9kL21vZHByb2JlIGhpc2F4Lm8gXAorICBpbz1pb2Jhc2UxLGlvYmFzZTIsLi4uIGlycT1JUlExLElSUTIsLi4uIG1lbT1tZW1iYXNlMSxtZW1iYXNlMiwuLi4gXAorICB0eXBlPWNhcmRfdHlwZTEsY2FyZF90eXBlMiwuLi4gXAorICBwcm90b2NvbD1EX2NoYW5uZWxfcHJvdG9jb2wxLERfY2hhbm5lbF9wcm90b2NvbDIsLi4uIFwKKyAgaWQ9aWRzdHJpbmcxJWlkc3RyaW5nMiAuLi4KKword2hlcmUgImlvYmFzZU4iIHJlcHJlc2VudHMgdGhlIEkvTyBiYXNlIGFkZHJlc3Mgb2YgdGhlIE50aCBjYXJkLCAibWVtYmFzZU4iCit0aGUgbWVtb3J5IGJhc2UgYWRkcmVzcyBvZiB0aGUgTnRoIGNhcmQsIGV0Yy4KKworVGhlIHJlYXNvbiBmb3IgdGhlIGRlbGltaXRlciAiJSIgYmVpbmcgdXNlZCBpbiB0aGUgaWRzdHJpbmdzIGlzIHRoYXQgIiwiCit3b24ndCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgbW9kdWxlcyBwYWNrYWdlLgorCitUaGUgcGFyYW1ldGVycyBtYXkgYmUgc3BlY2lmaWVkIGluIGFueSBvcmRlci4gRm9yIGV4YW1wbGUsIHRoZSAiaW8iCitwYXJhbWV0ZXIgbWF5IHByZWNlZGUgdGhlICJpcnEiIHBhcmFtZXRlciwgb3IgdmljZSB2ZXJzYS4gSWYgc2V2ZXJhbAorY2FyZHMgYXJlIGluc3RhbGxlZCwgdGhlIG9yZGVyaW5nIHdpdGhpbiB0aGUgY29tbWEgc2VwYXJhdGVkIHBhcmFtZXRlcgorbGlzdHMgbXVzdCBvZiBjb3Vyc2UgYmUgY29uc2lzdGVudC4KKworT25seSBwYXJhbWV0ZXJzIGFwcGxpY2FibGUgdG8gdGhlIGNhcmQgdHlwZSBuZWVkIHRvIGJlIHNwZWNpZmllZC4gRm9yCitleGFtcGxlLCB0aGUgVGVsZXMgMTYuMyBjYXJkIGlzIG5vdCBtZW1vcnktbWFwcGVkLCBzbyB0aGUgIm1lbSIKK3BhcmFtZXRlciBtYXkgYmUgb21pdHRlZCBmb3IgdGhpcyBjYXJkLiBTb21ldGltZXMgaXQgbWF5IGJlIG5lY2Vzc2FyeQordG8gc3BlY2lmeSBhIGR1bW15IHBhcmFtZXRlciwgaG93ZXZlci4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzCithIGNhcmQgb2YgYSBkaWZmZXJlbnQgdHlwZSBsYXRlciBpbiB0aGUgbGlzdCB0aGF0IG5lZWRzIGEgcGFyYW1ldGVyCit3aGljaCB0aGUgcHJlY2VkaW5nIGNhcmQgZG9lcyBub3QuIEZvciBpbnN0YW5jZSwgaWYgYSBUZWxlcyAxNi4wIGNhcmQKK2lzIGxpc3RlZCBhZnRlciBhIFRlbGVzIDE2LjMgY2FyZCwgYSBkdW1teSBtZW1vcnkgYmFzZSBwYXJhbWV0ZXIgb2YgMAorbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHRoZSAxNi4zLiBJbnN0ZWFkIG9mIGEgZHVtbXkgdmFsdWUsIHRoZSBwYXJhbWV0ZXIKK2NhbiBhbHNvIGJlIHNraXBwZWQgYnkgc2ltcGx5IG9taXR0aW5nIHRoZSB2YWx1ZS4gRm9yIGV4YW1wbGU6CittZW09LDB4ZDAwMDAuIFNlZSBleGFtcGxlIDYgYmVsb3cuCisKK1RoZSBwYXJhbWV0ZXIgZm9yIHRoZSBELUNoYW5uZWwgcHJvdG9jb2wgbWF5IGJlIG9taXR0ZWQgaWYgeW91IHNlbGVjdGVkIHRoZQorY29ycmVjdCBvbmUgZHVyaW5nIGtlcm5lbCBjb25maWcuIFZhbGlkIHZhbHVlcyBhcmUgIjEiIGZvciBHZXJtYW4gMVRSNiwKKyIyIiBmb3IgRURTUzEgKEV1cm8gSVNETiksICIzIiBmb3IgbGVhc2VkIGxpbmVzIChubyBELUNoYW5uZWwpIGFuZCAiNCIKK2ZvciBVUyBOSTEuCitXaXRoIFVTIE5JMSB5b3UgaGF2ZSB0byBpbmNsdWRlIHlvdXIgU1BJRCBpbnRvIHRoZSBNU04gc2V0dGluZyBpbiB0aGUgZm9ybQorPE1TTj46PFNQSUQ+IGZvciBleGFtcGxlICh5b3VyIHBob25lbnVtYmVyIGlzIDEyMzQgeW91ciBTUElEIDU2NzgpOgorQVQmRTEyMzQ6NTY3OCAgICAgICAgICAgICAgICAgICAgICAgb24gdHR5SSBpbnRlcmZhY2VzCitpc2RuY3RybCBlYXogaXBwcDAgMTIzNDo1Njc4ICAgICAgICBvbiBuZXR3b3JrIGRldmljZXMKKworVGhlIENyZWF0aXgvVGVsZXMgUG5QIGNhcmRzIHVzZSBpbzE9IGFuZCBpbzI9IGluc3RlYWQgb2YgaW89IGZvciBzcGVjaWZ5aW5nCit0aGUgSS9PIGFkZHJlc3NlcyBvZiB0aGUgSVNBQyBhbmQgSFNDWCBjaGlwcywgcmVzcGVjdGl2ZWx5LgorCitDYXJkIHR5cGVzOgorCisgICAgVHlwZSAgICAgICAgICAgICAgICBSZXF1aXJlZCBwYXJhbWV0ZXJzIChpbiBhZGRpdGlvbiB0byB0eXBlIGFuZCBwcm90b2NvbCkKKworICAgIDEgICBUZWxlcyAxNi4wICAgICAgICAgICAgICAgaXJxLCBtZW0sIGlvCisgICAgMiAgIFRlbGVzICA4LjAgICAgICAgICAgICAgICBpcnEsIG1lbQorICAgIDMgICBUZWxlcyAxNi4zIChub24gUG5QKSAgICAgaXJxLCBpbworICAgIDQgICBDcmVhdGl4L1RlbGVzIFBuUCAgICAgICAgaXJxLCBpbzAgKElTQUMpLCBpbzEgKEhTQ1gpCisgICAgNSAgIEFWTSBBMSAoRnJpdHopICAgICAgICAgICBpcnEsIGlvCisgICAgNiAgIEVMU0EgUENDL1BDRiBjYXJkcyAgICAgICBpbyBvciBub3RoaW5nIGZvciBhdXRvZGV0ZWN0ICh0aGUgaW9iYXNlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBvbmx5IGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgRUxTQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZCBpbiB5b3VyIFBDKQorICAgIDcgICBFTFNBIFF1aWNrc3RlcCAxMDAwICAgICAgaXJxLCBpbyAgKGZyb20gaXNhcG5wIHNldHVwKQorICAgIDggICBUZWxlcyAxNi4zIFBDTUNJQSAgICAgCSBpcnEsIGlvCisgICAgOSAgIElUSyBpeDEtbWljcm8gUmV2LjIgICAgICBpcnEsIGlvCisgICAxMCAgIEVMU0EgUENNQ0lBCQkgaXJxLCBpbyAgKHNldCB3aXRoIGNhcmQgbWFuYWdlcikKKyAgIDExICAgRWljb24uRGllaGwgRGl2YSBJU0EgUG5QIGlycSwgaW8KKyAgIDExICAgRWljb24uRGllaGwgRGl2YSBQQ0kgICAgIG5vIHBhcmFtZXRlcgorICAgMTIgICBBU1VTIENPTSBJU0ROTGluayAgICAgICAgaXJxLCBpbyAgKGZyb20gaXNhcG5wIHNldHVwKQorICAgMTMgICBIRkMtMkJTMCBiYXNlZCBjYXJkcyAgICAgaXJxLCBpbworICAgMTQgICBUZWxlcyAxNi4zYyBQblAgICAgICAgICAgaXJxLCBpbworICAgMTUgICBTZWRsYmF1ZXIgU3BlZWQgQ2FyZCAgICAgaXJxLCBpbworICAgMTUgICBTZWRsYmF1ZXIgUEMvMTA0ICAgICAgICAgaXJxLCBpbworICAgMTUgICBTZWRsYmF1ZXIgU3BlZWQgUENJCSBubyBwYXJhbWV0ZXIKKyAgIDE2ICAgVVNSIFNwb3J0c3RlciBpbnRlcm5hbCAgIGlycSwgaW8KKyAgIDE3ICAgTUlDIGNhcmQgICAgICAgICAgICAgICAgIGlycSwgaW8KKyAgIDE4ICAgRUxTQSBRdWlja3N0ZXAgMTAwMFBDSSAgIG5vIHBhcmFtZXRlcgorICAgMTkgICBDb21wYXEgSVNETiBTMCBJU0EgY2FyZCAgaXJxLCBpbzAsIGlvMSwgaW8gKGZyb20gaXNhcG5wIHNldHVwIGlvPUlPMikKKyAgIDIwICAgTkVUamV0IFBDSSBjYXJkICAgICAgICAgIG5vIHBhcmFtZXRlcgorICAgMjEgICBUZWxlcyBQQ0kgICAgICAgICAgICAgICAgbm8gcGFyYW1ldGVyCisgICAyMiAgIFNlZGxiYXVlciBTcGVlZCBTdGFyIChQQ01DSUEpIGlycSwgaW8gKHNldCB3aXRoIGNhcmQgbWFuYWdlcikKKyAgIDI0ICAgRHIuIE5ldWhhdXMgTmljY3kgUG5QICAgIGlycSwgaW8wLCBpbzEgKGZyb20gaXNhcG5wIHNldHVwKQorICAgMjQgICBEci4gTmV1aGF1cyBOaWNjeSBQQ0kgICAgbm8gcGFyYW1ldGVyCisgICAyNSAgIFRlbGVzIFMwQm94ICAgICAgICAgICAgICBpcnEsIGlvIChvZiB0aGUgdXNlZCBscHQgcG9ydCkKKyAgIDI2ICAgQVZNIEExIFBDTUNJQSAoRnJpdHohKSAgIGlycSwgaW8gKHNldCB3aXRoIGNhcmQgbWFuYWdlcikKKyAgIDI3ICAgQVZNIFBuUCAoRnJpdHohUG5QKSAgICAgIGlycSwgaW8gIChmcm9tIGlzYXBucCBzZXR1cCkKKyAgIDI3ICAgQVZNIFBDSSAoRnJpdHohUENJKSAgICAgIG5vIHBhcmFtZXRlcgorICAgMjggICBTZWRsYmF1ZXIgU3BlZWQgRmF4KyAgICAgaXJxLCBpbyAoZnJvbSBpc2FwbnAgc2V0dXApCisgICAyOQlTaWVtZW5zIEktU3VyZiAxLjAgICAgICAgaXJxLCBpbywgbWVtb3J5IChmcm9tIGlzYXBucCBzZXR1cCkgICAKKyAgIDMwCUFDRVIgUDEwICAgICAgICAgICAgICAgICBpcnEsIGlvIChmcm9tIGlzYXBucCBzZXR1cCkgICAKKyAgIDMxCUhTVCBTYXBoaXIgICAgICAgICAgICAgICBpcnEsIGlvCisgICAzMglUZWxla29tIEE0VCAgICAgICAgICAgICAgbm9uZQorICAgMzMJU2NpdGVsIFF1YWRybwkJIHN1YmNvbnRyb2xsZXIgKDQqUzAsIHN1YmN0cmwgMS4uLjQpCisgICAzNAlHYXplbCBJU0ROIGNhcmRzIChJU0EpICAgaXJxLGlvCisgICAzNAlHYXplbCBJU0ROIGNhcmRzIChQQ0kpICAgbm9uZQorICAgMzUJSEZDIDJCRFMwIFBDSSAgICAgICAgICAgIG5vbmUKKyAgIDM2CVc2NjkyIGJhc2VkIFBDSSBjYXJkcyAgICBub25lCisgICAzNwlIRkMgMkJEUzAgUyssIFNQICAgICAgICAgaXJxLGlvIAorICAgMzgJTkVUc3BpZGVyIFUgUENJIGNhcmQgICAgIG5vbmUKKyAgIDM5CUhGQyAyQkRTMCBTUC9QQ01DSUEgICAgICBpcnEsaW8gKHNldCB3aXRoIGNhcmRtZ3IpCisgICA0MCAgIGhvdHBsdWcgaW50ZXJmYWNlCisgICA0MSAgIEZvcm11bGEtbiBlbnRlcjpub3cgUENJICBub25lCisKK0F0IHRoZSBtb21lbnQgSVJRIHNoYXJpbmcgaXMgb25seSBwb3NzaWJsZSB3aXRoIFBDSSBjYXJkcy4gUGxlYXNlIG1ha2Ugc3VyZQordGhhdCB5b3VyIElSUSBpcyBmcmVlIGFuZCBlbmFibGVkIGZvciBJU0EgdXNlLgorCisKK0V4YW1wbGVzIGZvciBtb2R1bGUgbG9hZGluZworCisxLiBUZWxlcyAxNi4zLCBFdXJvIElTRE4sIEkvTyBiYXNlIDI4MCBoZXgsIElSUSAxMAorICAgbW9kcHJvYmUgaGlzYXggdHlwZT0zIHByb3RvY29sPTIgaW89MHgyODAgaXJxPTEwCisKKzIuIFRlbGVzIDE2LjAsIDFUUjYgSVNETiwgSS9PIGJhc2UgZDgwIGhleCwgSVJRIDUsIE1lbW9yeSBkMDAwMCBoZXgKKyAgIG1vZHByb2JlIGhpc2F4IHByb3RvY29sPTEgdHlwZT0xIGlvPTB4ZDgwIG1lbT0weGQwMDAwIGlycT01CisKKzMuIEZyaXR6Y2FyZCwgRXVybyBJU0ROLCBJL08gYmFzZSAzNDAgaGV4LCBJUlEgMTAgYW5kIEVMU0EgUENGLCBFdXJvIElTRE4KKyAgIG1vZHByb2JlIGhpc2F4IHR5cGU9NSw2IHByb3RvY29sPTIsMiBpbz0weDM0MCBpcnE9MTAgaWQ9RnJpdHolRWxzYQorCis0LiBBbnkgRUxTQSBQQ0MvUENGIGNhcmQsIEV1cm8gSVNETgorICAgbW9kcHJvYmUgaGlzYXggdHlwZT02IHByb3RvY29sPTIKKworNS4gVGVsZXMgMTYuMyBQblAsIEV1cm8gSVNETiwgd2l0aCBpc2FwbnAgY29uZmlndXJlZAorICAgaXNhcG5wIGNvbmZpZzogIChJTlQgMCAoSVJRIDEwIChNT0RFICtFKSkpCisgCQkgICAoSU8gMCAoQkFTRSAweDA1ODApKQorICAgICAgICAgICAgICAgICAgIChJTyAxIChCQVNFIDB4MDE4MCkpCisgICBtb2Rwcm9iZSBoaXNheCB0eXBlPTQgcHJvdG9jb2w9MiBpcnE9MTAgaW8wPTB4NTgwIGlvMT0weDE4MAorCisgICBJbiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEhpU2F4LCB5b3UgY2FuIGluc3RlYWQgc2ltcGx5IHVzZQorCisgICBtb2Rwcm9iZSBoaXNheCB0eXBlPTQgcHJvdG9jb2w9MgorCisgICBpZiB5b3UgY29uZmlndXJlZCB5b3VyIGtlcm5lbCBmb3IgSVNBUG5QLiBEb24ndCBydW4gaXNhcG5wIGluCisgICB0aGlzIGNhc2UhCisKKzYuIFRlbGVzIDE2LjMsIEV1cm8gSVNETiwgSS9PIGJhc2UgMjgwIGhleCwgSVJRIDEyIGFuZAorICAgVGVsZXMgMTYuMCwgMVRSNiwgSVJRIDUsIE1lbW9yeSBkMDAwMCBoZXgKKyAgIG1vZHByb2JlIGhpc2F4IHR5cGU9MywxIHByb3RvY29sPTIsMSBpbz0weDI4MCBtZW09MCwweGQwMDAwCisKKyAgIFBsZWFzZSBub3RlIHRoZSBkdW1teSAwIG1lbW9yeSBhZGRyZXNzIGZvciB0aGUgVGVsZXMgMTYuMywgdXNlZCBhcyBhCisgICBwbGFjZWhvbGRlciBhcyBkZXNjcmliZWQgYWJvdmUsIGluIHRoZSBsYXN0IGV4YW1wbGUuCisKKzcuIFRlbGVzIFBDTUNJQSwgRXVybyBJU0ROLCBJL08gYmFzZSAxODAgaGV4LCBJUlEgMTUgKGRlZmF1bHQgdmFsdWVzKQorICAgbW9kcHJvYmUgaGlzYXggdHlwZT04IHByb3RvY29sPTIgaW89MHgxODAgaXJxPTE1CisKKworYikgdXNpbmcgTElMTy9MT0FETElOLCB3aXRoIHRoZSBkcml2ZXIgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaGlzYXg9dHlwMSxkcDEscGFfMSxwYl8xLHBjXzFbLHR5cDIsZHAyLHBhXzIgLi4uIFwKKyAgICAgIHR5cG4sZHBuLHBhX24scGJfbixwY19uXVssaWRzdHJpbmcxWyxpZHN0cmluZzIsLi4uLGlkc3RyaW5nbl1dCisKK3doZXJlCisgICAgIHR5cDEgPSB0eXBlIG9mIDFzdCBjYXJkIChkZWZhdWx0IGRlcGVuZHMgb24ga2VybmVsIHNldHRpbmdzKQorICAgICBkcDEgID0gRC1DaGFubmVsIHByb3RvY29sIG9mIDFzdCBjYXJkLiAxPTFUUjYsIDI9RURTUzEsIDM9bGVhc2VkCisgICAgIHBhXzEgPSAxc3QgcGFyYW1ldGVyIChkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIGNhcmQpCisgICAgIHBiXzEgPSAybmQgcGFyYW1ldGVyICggICAgIiAgICAgIiAgICIgICAiICAgIiAgICIgICAiICApCisgICAgIHBjXzEgPSAzcmQgcGFyYW1ldGVyICggICAgIiAgICAgIiAgICIgICAiICAgIiAgICIgICAiICApCisKKyAgICAgdHlwMixkcDIscGFfMixwYl8yLHBjXzIgPSBQYXJhbWV0ZXJzIG9mIHRoZSBzZWNvbmQgY2FyZCAoZGVmYXVsdHM6IG5vbmUpCisgICAgIHR5cG4sZHBuLHBhX24scGJfbixwY19uID0gUGFyYW1ldGVycyBvZiB0aGUgbid0aCBjYXJkICh1cCB0byAxNiBjYXJkcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCkKKworICAgICBpZHN0cmluZyA9IERyaXZlciBJRCBmb3IgYWNjZXNzaW5nIHRoZSBwYXJ0aWN1bGFyIGNhcmQgd2l0aCB1dGlsaXR5CisgICAgICAgICAgICAgICAgcHJvZ3JhbXMgYW5kIGZvciBpZGVudGlmaWNhdGlvbiB3aGVuIHVzaW5nIGEgbGluZSBtb25pdG9yCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICJIaVNheCIpCisKKyAgICAgICAgICAgICAgICBOb3RlOiB0aGUgSUQgc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhbiBhbHBoYWJldGljYWwgY2hhcmFjdGVyIQorCitDYXJkIHR5cGVzOgorCit0eXBlCisgICAgMSAJVGVsZXMgMTYuMCAgICAgCSAgICAgICAgcGE9aXJxICBwYj1tZW1iYXNlICBwYz1pb2Jhc2UKKyAgICAyIAlUZWxlcyAgOC4wICAgICAgICAgICAgICBwYT1pcnEgIHBiPW1lbWJhc2UKKyAgICAzIAlUZWxlcyAxNi4zICAgICAgICAgICAgICBwYT1pcnEgIHBiPWlvYmFzZQorICAgIDQgCUNyZWF0aXgvVGVsZXMgUE5QICAgICAJT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAgNSAJQVZNIEExIChGcml0eikgICAgICAgICAgcGE9aXJxICBwYj1pb2Jhc2UKKyAgICA2IAlFTFNBIFBDQy9QQ0YgY2FyZHMgICAgICBwYT1pb2Jhc2Ugb3Igbm90aGluZyBmb3IgYXV0b2RldGVjdAorICAgIDcgICBFTFNBIFF1aWNrc3RlcCAxMDAwICAgICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgICA4ICAgVGVsZXMgUzAgUENNQ0lBICAgICAgICAgcGE9aXJxICBwYj1pb2Jhc2UKKyAgICA5ICAgSVRLIGl4MS1taWNybyBSZXYuMiAgICAgcGE9aXJxICBwYj1pb2Jhc2UKKyAgIDEwICAgRUxTQSBQQ01DSUEgICAgICAgICAgICAgcGE9aXJxLCBwYj1pbyAgKHNldCB3aXRoIGNhcmQgbWFuYWdlcikKKyAgIDExICAgRWljb24uRGllaGwgRGl2YSBJU0FQblAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAxMSAgIEVpY29uLkRpZWhsIERpdmEgUENJICAgIG5vIHBhcmFtZXRlcgorICAgMTIgICBBU1VTIENPTSBJU0ROTGluayAgICAgICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDEzCUhGQy0yQlMwIGJhc2VkIGNhcmRzICAgIHBhPWlycSAgcGI9aW8KKyAgIDE0ICAgVGVsZXMgMTYuM2MgUG5QICAgICAgICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAxNQlTZWRsYmF1ZXIgU3BlZWQgQ2FyZCAgICBwYT1pcnEgIHBiPWlvIChTcGVlZCBXaW4gb25seSBhcyBtb2R1bGUgISkKKyAgIDE1ICAgU2VkbGJhdWVyIFBDLzEwNCAgICAgICAgcGE9aXJxICBwYj1pbworICAgMTUgICBTZWRsYmF1ZXIgU3BlZWQgUENJCW5vIHBhcmFtZXRlcgorICAgMTYgICBVU1IgU3BvcnRzdGVyIGludGVybmFsICBwYT1pcnEgIHBiPWlvCisgICAxNyAgIE1JQyBjYXJkICAgICAgICAgICAgICAgIHBhPWlycSAgcGI9aW8KKyAgIDE4ICAgRUxTQSBRdWlja3N0ZXAgMTAwMFBDSSAgbm8gcGFyYW1ldGVyCisgICAxOSAgIENvbXBhcSBJU0ROIFMwIElTQSBjYXJkIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMjAgICBORVRqZXQgUENJIGNhcmQgICAgICAgICBubyBwYXJhbWV0ZXIKKyAgIDIxICAgVGVsZXMgUENJICAgICAgICAgICAgICAgbm8gcGFyYW1ldGVyCisgICAyMiAgIFNlZGxiYXVlciBTcGVlZCBTdGFyIChQQ01DSUEpICBwYT1pcnEsIHBiPWlvICAoc2V0IHdpdGggY2FyZCBtYW5hZ2VyKQorICAgMjQgICBEci4gTmV1aGF1cyBOaWNjeSBQblAgICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDI0ICAgRHIuIE5ldWhhdXMgTmljY3kgUENJICAgbm8gcGFyYW1ldGVyCisgICAyNSAgIFRlbGVzIFMwQm94ICAgICAgICAgICAgIHBhPWlycSwgcGI9aW8gKG9mIHRoZSB1c2VkIGxwdCBwb3J0KQorICAgMjYgICBBVk0gQTEgUENNQ0lBIChGcml0eiEpICBwYT1pcnEsIHBiPWlvIChzZXQgd2l0aCBjYXJkIG1hbmFnZXIpCisgICAyNyAgIEFWTSBQblAgKEZyaXR6IVBuUCkgICAgIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMjcgICBBVk0gUENJIChGcml0eiFQQ0kpICAgICBubyBwYXJhbWV0ZXIKKyAgIDI4ICAgU2VkbGJhdWVyIFNwZWVkIEZheCsgICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICAyOQlTaWVtZW5zIEktU3VyZiAxLjAgICAgICBPTkxZIFdPUktTIEFTIEEgTU9EVUxFICEKKyAgIDMwCUFDRVIgUDEwICAgICAgICAgICAgICAgIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMzEJSFNUIFNhcGhpciAgICAgICAgICAgICAgcGE9aXJxLCBwYj1pbworICAgMzIJVGVsZWtvbSBBNFQgICAgICAgICAgICAgbm8gcGFyYW1ldGVyCisgICAzMwlTY2l0ZWwgUXVhZHJvCQlzdWJjb250cm9sbGVyICg0KlMwLCBzdWJjdHJsIDEuLi40KQorICAgMzQJR2F6ZWwgSVNETiBjYXJkcyAoSVNBKSAgcGE9aXJxLCBwYj1pbworICAgMzQJR2F6ZWwgSVNETiBjYXJkcyAoUENJKSAgbm8gcGFyYW1ldGVyCisgICAzNQlIRkMgMkJEUzAgUENJICAgICAgICAgICBubyBwYXJhbWV0ZXIKKyAgIDM2CVc2NjkyIGJhc2VkIFBDSSBjYXJkcyAgIG5vbmUKKyAgIDM3CUhGQyAyQkRTMCBTKyxTUC9QQ01DSUEgIE9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgMzgJTkVUc3BpZGVyIFUgUENJIGNhcmQgICAgbm9uZQorICAgMzkJSEZDIDJCRFMwIFNQL1BDTUNJQSAgICAgT05MWSBXT1JLUyBBUyBBIE1PRFVMRSAhCisgICA0MCAgIGhvdHBsdWcgaW50ZXJmYWNlCU9OTFkgV09SS1MgQVMgQSBNT0RVTEUgIQorICAgNDEgICBGb3JtdWxhLW4gZW50ZXI6bm93IFBDSSBub25lCisKK1J1bm5pbmcgdGhlIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IGluc21vZCBpc2RuLm8gYW5kIGhpc2F4Lm8gKG9yIHdpdGggdGhlIGluLWtlcm5lbCB2ZXJzaW9uLCBkdXJpbmcKK2Jvb3QgdGltZSksIGEgZmV3IGxpbmVzIHNob3VsZCBhcHBlYXIgaW4geW91ciBzeXNsb2cuIExvb2sgZm9yIHNvbWV0aGluZyBsaWtlOgorCitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBIaVNheDogRHJpdmVyIGZvciBTaWVtZW5zIGNoaXAgc2V0IElTRE4gY2FyZHMKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEhpU2F4OiBWZXJzaW9uIDIuOQorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogSGlTYXg6IFJldmlzaW9ucyAxLjE0LzEuOS8xLjEwLzEuMjUvMS44CitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBIaVNheDogVG90YWwgMSBjYXJkIGRlZmluZWQKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEhpU2F4OiBDYXJkIDEgUHJvdG9jb2wgRURTUzEgSWQ9SGlTYXgxICgwKQorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogSGlTYXg6IEVsc2EgZHJpdmVyIFJldi4gMS4xMworLi4uCitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBFbHNhOiBQQ0YtUHJvIGZvdW5kIGF0IDB4MzYwIFJldi46QyBJUlEgMTAKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEVsc2E6IHRpbWVyIE9LOyByZXNldHRpbmcgY2FyZAorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogRWxzYTogSFNDWCB2ZXJzaW9uIEE6IFYyLjEgIEI6IFYyLjEKK0FwciAxMyAyMTowMTo1OSBra2UwMSBrZXJuZWw6IEVsc2E6IElTQUMgMjA4Ni8yMTg2IFYxLjEKKy4uLgorQXByIDEzIDIxOjAxOjU5IGtrZTAxIGtlcm5lbDogSGlTYXg6IERTUzEgUmV2LiAxLjE0CitBcHIgMTMgMjE6MDE6NTkga2tlMDEga2VybmVsOiBIaVNheDogMiBjaGFubmVscyBhZGRlZAorCitUaGlzIG1lYW5zIHRoYXQgdGhlIGNhcmQgaXMgcmVhZHkgZm9yIHVzZS4KK0NhYmxpbmcgcHJvYmxlbXMgb3IgbGluZS1kb3ducyBhcmUgbm90IGRldGVjdGVkLCBhbmQgb25seSBzb21lIEVMU0EgY2FyZHMgY2FuCitkZXRlY3QgdGhlIFMwIHBvd2VyLgorCitSZW1lbWJlciB0aGF0LCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBzdHJhdGVneSBmb3IgYWNjZXNzaW5nIGxvdy1sZXZlbCBkcml2ZXJzCitmcm9tIHdpdGhpbiBpc2RuNGxpbnV4LCB5b3Ugc2hvdWxkIGFsc28gZGVmaW5lIGEgZHJpdmVyIElEIHdoaWxlIGRvaW5nCitpbnNtb2Q6IFNpbXBseSBhcHBlbmQgaGlzYXhfaWQ9PFNvbWVTdHJpbmc+IHRvIHRoZSBpbnNtb2QgY29tbWFuZCBsaW5lLiBUaGlzCitzdHJpbmcgTVVTVCBOT1Qgc3RhcnQgd2l0aCBhIGRpZ2l0IG9yIGEgc21hbGwgJ3gnIQorCitBdCB0aGlzIHBvaW50IHlvdSBjYW4gcnVuIGEgJ2NhdCAvZGV2L2lzZG5jdHJsMCcgYW5kIHZpZXcgZGVidWdnaW5nIG1lc3NhZ2VzLgorCitBdCB0aGUgbW9tZW50LCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlIGVuYWJsZWQgd2l0aCB0aGUgaGlzYXhjdHJsIHRvb2w6CisKKyAgICBoaXNheGN0cmwgPERyaXZlcklkPiBEZWJ1Z0NtZCA8ZGVidWdnaW5nX2ZsYWdzPgorCis8RHJpdmVySWQ+IGRlZmF1bHQgaXMgSGlTYXgsIGlmIHlvdSBkaWRuJ3Qgc3BlY2lmeSBvbmUuCisKK0RlYnVnQ21kIGlzICAxICBmb3IgZ2VuZXJpYyBkZWJ1Z2dpbmcKKyAgICAgICAgICAgIDExICBmb3IgbGF5ZXIgMSBkZXZlbG9wbWVudCBkZWJ1Z2dpbmcKKyAgICAgICAgICAgIDEzICBmb3IgbGF5ZXIgMyBkZXZlbG9wbWVudCBkZWJ1Z2dpbmcKKword2hlcmUgPGRlYnVnZ2luZ19mbGFncz4gaXMgdGhlIGludGVnZXIgc3VtIG9mIHRoZSBmb2xsb3dpbmcgZGVidWdnaW5nCitvcHRpb25zIHlvdSB3aXNoIGVuYWJsZWQ6CisKK1dpdGggRGVidWdDbWQgc2V0IHRvIDE6CisKKyAgIDB4MDAwMSAgTGluay1sZXZlbCA8LS0+IGhhcmR3YXJlLWxldmVsIGNvbW11bmljYXRpb24KKyAgIDB4MDAwMiAgVG9wIHN0YXRlIG1hY2hpbmUKKyAgIDB4MDAwNCAgRC1DaGFubmVsIEZyYW1lcyBmb3IgaXNkbmxvZworICAgMHgwMDA4ICBELUNoYW5uZWwgUS45MjEKKyAgIDB4MDAxMCAgQi1DaGFubmVsIFguNzUKKyAgIDB4MDAyMCAgRC1DaGFubmVsIGwyCisgICAweDAwNDAgIEItQ2hhbm5lbCBsMgorICAgMHgwMDgwICBELUNoYW5uZWwgbGluayBzdGF0ZSBkZWJ1Z2dpbmcKKyAgIDB4MDEwMCAgQi1DaGFubmVsIGxpbmsgc3RhdGUgZGVidWdnaW5nCisgICAweDAyMDAgIFRFSSBkZWJ1ZworICAgMHgwNDAwICBMT0NLIGRlYnVnIGluIGNhbGxjLmMKKyAgIDB4MDgwMCAgTW9yZSBwYXJhbm9pZCBkZWJ1ZyBpbiBjYWxsYy5jIChub3QgZm9yIG5vcm1hbCB1c2UpCisgICAweDEwMDAgIEQtQ2hhbm5lbCBsMSBzdGF0ZSBkZWJ1Z2dpbmcKKyAgIDB4MjAwMCAgQi1DaGFubmVsIGwxIHN0YXRlIGRlYnVnZ2luZworCitXaXRoIERlYnVnQ21kIHNldCB0byAxMToKKworICAgMHgwMDAxICBXYXJuaW5ncyAoZGVmYXVsdDogb24pCisgICAweDAwMDIgIElSUSBzdGF0dXMKKyAgIDB4MDAwNCAgSVNBQworICAgMHgwMDA4ICBJU0FDIEZJRk8KKyAgIDB4MDAxMCAgSFNDWAorICAgMHgwMDIwICBIU0NYIEZJRk8gKGF0dGVudGlvbjogZnVsbCBCLUNoYW5uZWwgb3V0cHV0ISkKKyAgIDB4MDA0MCAgRC1DaGFubmVsIExBUEQgZnJhbWUgdHlwZXMKKyAgIDB4MDA4MCAgSVBBQyBkZWJ1ZworICAgMHgwMTAwICBIRkMgcmVjZWl2ZSBkZWJ1ZworICAgMHgwMjAwICBJU0FDIG1vbml0b3IgZGVidWcKKyAgIDB4MDQwMCAgRC1DaGFubmVsIGZyYW1lcyBmb3IgaXNkbmxvZyAoc2V0IHdpdGggMSAweDQgdG9vKQorICAgMHgwODAwICBELUNoYW5uZWwgbWVzc2FnZSB2ZXJib3NlCisKK1dpdGggRGVidWdDbWQgc2V0IHRvIDEzOgorCisgICAgICAgICAxICBXYXJuaW5ncyAoZGVmYXVsdDogb24pCisgICAgICAgICAyICBsMyBwcm90b2NvbCBkZXNjcmlwdG9yIGVycm9ycworICAgICAgICAgNCAgbDMgc3RhdGUgbWFjaGluZQorICAgICAgICAgOCAgY2hhcmdlIGluZm8gZGVidWdnaW5nICgxVFI2KQorCitGb3IgZXhhbXBsZSwgJ2hpc2F4Y3RybCBIaVNheCAxIDB4M2ZmJyBlbmFibGVzIGZ1bGwgZ2VuZXJpYyBkZWJ1Z2dpbmcuCisKK0JlY2F1c2Ugb2Ygc29tZSBvYnNjdXJlIHByb2JsZW1zIHdpdGggc29tZSBzd2l0Y2ggZXF1aXBtZW50LCB0aGUgZGVsYXkKK2JldHdlZW4gdGhlIENPTk5FQ1QgbWVzc2FnZSBhbmQgc2VuZGluZyB0aGUgZmlyc3QgZGF0YSBvbiB0aGUgQi1jaGFubmVsIGlzIG5vdworY29uZmlndXJhYmxlIHdpdGgKKworaGlzYXhjdHJsIDxEcml2ZXJJZD4gMiA8ZGVsYXk+Cis8ZGVsYXk+IGluIG1zIFZhbHVlIGJldHdlZW4gNTAgYW5kIDgwMCBtcyBpcyByZWNvbW1lbmRlZC4KKworRG93bmxvYWRpbmcgRmlybXdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitBdCB0aGUgbW9tZW50LCB0aGUgU2VkbGJhdWVyIHNwZWVkIGZheCsgaXMgdGhlIG9ubHkgY2FyZCwgd2hpY2gKK25lZWRzIHRvIGRvd25sb2FkIGZpcm13YXJlLgorVGhlIGZpcm13YXJlIGlzIGRvd25sb2FkZWQgd2l0aCB0aGUgaGlzYXhjdHJsIHRvb2w6CisKKyAgICBoaXNheGN0cmwgPERyaXZlcklkPiA5IDxmaXJtd2FyZV9maWxlbmFtZT4KKworPERyaXZlcklkPiBkZWZhdWx0IGlzIEhpU2F4LCBpZiB5b3UgZGlkbid0IHNwZWNpZnkgb25lLAorCit3aGVyZSA8ZmlybXdhcmVfZmlsZW5hbWU+IGlzIHRoZSBmaWxlbmFtZSBvZiB0aGUgZmlybXdhcmUgZmlsZS4KKworRm9yIGV4YW1wbGUsICdoaXNheGN0cmwgSGlTYXggOSBJU0FSLkJJTicgZG93bmxvYWRzIHRoZSBmaXJtd2FyZSBmb3IKK0lTQVIgYmFzZWQgY2FyZHMgKGxpa2UgdGhlIFNlZGxiYXVlciBzcGVlZCBmYXgrKS4KKworV2FybmluZworLS0tLS0tLQorSGlTYXggaXMgYSB3b3JrIGluIHByb2dyZXNzIGFuZCBtYXkgY3Jhc2ggeW91ciBtYWNoaW5lLgorRm9yIGNlcnRpZmljYXRpb24gbG9vayBhdCBIaVNheC5jZXJ0IGZpbGUuCisKK0xpbWl0YXRpb25zCistLS0tLS0tLS0tLQorQXQgdGhpcyB0aW1lLCBIaVNheCBvbmx5IHdvcmtzIG9uIEV1cm8gSVNETiBsaW5lcyBhbmQgR2VybWFuIDFUUjYgbGluZXMuCitGb3IgbGVhc2VkIGxpbmVzIHNlZSBhcHBlbmRpeC4KKworQnVncworLS0tLQorSWYgeW91IGZpbmQgYW55LCBwbGVhc2UgbGV0IG1lIGtub3cuCisKKworVGhhbmtzCistLS0tLS0KK1NwZWNpYWwgdGhhbmtzIHRvOgorCisgICAgICAgIEVtaWwgU3RlcGhhbiBmb3IgdGhlIG5hbWUgSGlTYXggd2hpY2ggaXMgYSBtaXggb2YgSFNDWCBhbmQgSVNBQy4KKworICAgICAgICBGcml0eiBFbGZlcnQsIEphbiBkZW4gT3VkZW4sIE1pY2hhZWwgSGlwcCwgTWljaGFlbCBXZWluLAorICAgICAgICBBbmRyZWFzIEtvb2wsIFBla2thIFNhcm5pbGEsIFNpbSBZc2tlcywgSm9oYW4gTXlycmUnZW4sCisJS2xhdXMtUGV0ZXIgTmlzY2hrZSAoSVRLIEFHKSwgQ2hyaXN0b2YgUGV0aWcsIFdlcm5lciBGZWhuIChFTFNBIEdtYkgpLAorCVZvbGtlciBTY2htaWR0CisJRWRnYXIgVG9lcm5pZyBhbmQgTWFyY3VzIE5pZW1hbm4gZm9yIHRoZSBTZWRsYmF1ZXIgZHJpdmVyCisJU3RlcGhhbiB2b24gS3Jhd2N6eW5za2kKKwlKdWVyZ2VuIFF1YWRlIGZvciB0aGUgTGVhc2VkIExpbmUgcGFydAorCUtsYXVzIExpY2h0ZW53YWxkZXIgKEtsYXVzLkxpY2h0ZW53YWxkZXJAV2ViRm9ydW0uREUpLCBmb3IgRUxTQSBQQ01DSUEgc3VwcG9ydAorCUVucmlrIEJlcmtoYW4gKGVucmlrQHN0YXJmbGVldC5pbmthLmRlKSBmb3IgUzBCT1ggc3BlY2lmaWMgc3R1ZmYKKwlUb24gdmFuIFJvc21hbGVuIGZvciBUZWxlcyBQQ0kKKwlQZXRyIE5vdmFrIDxwZXRyLm5vdmFrQGkuY3o+IGZvciBXaW5ib25kIFc2NjkyIHN1cHBvcnQKKwlXZXJuZXIgQ29ybmVsaXVzIDx3ZXJuZXJAaXNkbjRsaW51eC5kZT4gZm9yIEhGQy1QQ0ksIEhGQy1TKCsvUCkgYW5kIHN1cHBsZW1lbnRhcnkgc2VydmljZXMgc3VwcG9ydAorICAgICAgICBhbmQgbW9yZSBwZW9wbGUgd2hvIGFyZSBodW50aW5nIGJ1Z3MuIChJZiBJIGZvcmdvdCBzb21lYm9keSwgcGxlYXNlCisJc2VuZCBtZSBhIG1haWwpLgorCisgICAgICAgIEZpcm1hIEVMU0EgR21iSAorICAgICAgICBGaXJtYSBFaWNvbi5EaWVobCBHbWJICisgICAgICAgIEZpcm1hIER5bmFsaW5rIE5MCisJRmlybWEgQVNVU0NPTSBORVRXT1JLIElOQy4gVGFpd2FuCisJRmlybWEgUy51LlMuRQorCUZpcm1hIGl0aCBLb21tdW5pa2F0aW9uc3RlY2huaWsgR21iSAorCUZpcm1hIFRyYXZlcnNlIFRlY2hub2xvZ2llIEF1c3RyYWxpYQorCUZpcm1hIE1lZHVzYSBHbWJIICAod3d3Lm1lZHVzYS5kZSkuCisJRmlybWEgUXVhbnQtWCBBdXN0cmlhIGZvciBzcG9uc29yaW5nIGEgREVDIEFscGhhIGJvYXJkK0NQVQorCUZpcm1hIENvbG9nbmUgQ2hpcCBEZXNpZ25zIEdtYkgKKworICAgICAgICBNeSBnaXJsIGZyaWVuZCBhbmQgcGFydG5lciBpbiBsaWZlIFV0ZSBmb3IgaGVyIHBhdGllbmNlIHdpdGggbWUuCisKKworRW5qb3ksCisKK0thcnN0ZW4gS2VpbAora2VpbEBpc2RuNGxpbnV4LmRlCisKKworQXBwZW5kaXg6IFRlbGVzIFBDTUNJQSBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZQorICAgaHR0cDovL3d3dy5zdHVkLnVuaS13dXBwZXJ0YWwuZGUvfmVhMDE0MS9wY21jaWEuaHRtbAorZm9yIGluc3RydWN0aW9ucy4KKworQXBwZW5kaXg6IExpbnV4IGFuZCBJU0ROLWxlYXNlZCBsaW5lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPcmlnaW5hbCBmcm9tIEp1ZXJnZW4gUXVhZGUsIG5ldyB2ZXJzaW9uIEtLZS4KKworQXR0ZW50aW9uIE5FVyBWRVJTSU9OLCB0aGUgb2xkIGxlYXNlZCBsaW5lIHN5bnRheCB3b24ndCB3b3JrICEhIQorCitZb3UgY2FuIHVzZSBIaVNheCB0byBjb25uZWN0IHlvdXIgTGludXgtQm94IHZpYSBhbiBJU0ROIGxlYXNlZCBsaW5lCit0byBlLmcuIHRoZSBJbnRlcm5ldDoKKworMS4gQnVpbGQgYSBrZXJuZWwgd2hpY2ggaW5jbHVkZXMgdGhlIEhpU2F4IGRyaXZlciBlaXRoZXIgYXMgYSBtb2R1bGUKKyAgIG9yIGFzIHBhcnQgb2YgdGhlIGtlcm5lbC4KKyAgICAgY2QgL3Vzci9zcmMvbGludXgKKyAgICAgbWFrZSBtZW51Y29uZmlnCisgICAgIDxJU0ROIHN1YnN5c3RlbSAtIElTRE4gc3VwcG9ydCAtLSBIaVNheD4KKyAgICAgbWFrZSBjbGVhbjsgbWFrZSB6SW1hZ2U7IG1ha2UgbW9kdWxlczsgbWFrZSBtb2R1bGVzX2luc3RhbGwKKzIuIEluc3RhbGwgdGhlIG5ldyBrZXJuZWwKKyAgICAgY3AgL3Vzci9zcmMvbGludXgvYXJjaC9pMzg2L2Jvb3QvekltYWdlIC9ldGMva2VybmVsL2xpbnV4LmlzZG4KKyAgICAgdmkgL2V0Yy9saWxvLmNvbmYKKyAgICAgPGFkZCBuZXcga2VybmVsIGluIHRoZSBib290YWJsZSBpbWFnZSBzZWN0aW9uPgorICAgICBsaWxvCiszLiBpbiBjYXNlIHRoZSBoaXNheCBkcml2ZXIgaXMgYSAiZml4ZWQiIHBhcnQgb2YgdGhlIGtlcm5lbCwgY29uZmlndXJlCisgICB0aGUgZHJpdmVyIHdpdGggbGlsbzoKKyAgICAgdmkgL2V0Yy9saWxvLmNvbmYKKyAgICAgPGFkZCBIaVNheCBkcml2ZXIgcGFyYW1ldGVyIGluIHRoZSBnbG9iYWwgc2VjdGlvbiAoc2VlIGJlbG93KT4KKyAgICAgbGlsbworICAgWW91ciBsaWxvLmNvbmYgX21pZ2h0XyBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCSMgTElMTyBjb25maWd1cmF0aW9uLWZpbGUKKwkjIGdsb2JhbCBzZWN0aW9uCisgICAgIyB0ZWxlcyAxNi4wIG9uIElSUT01LCBNRU09MHhkODAwMCwgUE9SVD0weGQ4MAorCWFwcGVuZD0iaGlzYXg9MSwzLDUsMHhkODAwMCwweGQ4MCxIaVNheCIKKyAgICAjIHRlbGVzIDE2LjMgKG5vbiBwbnApIG9uIElSUT0xNSwgUE9SVD0weGQ4MAorCSMgYXBwZW5kPSJoaXNheD0zLDMsNSwweGQ4MDAwLDB4ZDgwLEhpU2F4IgorCWJvb3Q9L2Rldi9zZGEKKwljb21wYWN0ICAgICAgICAjIGZhc3RlciwgYnV0IHdvbid0IHdvcmsgb24gYWxsIHN5c3RlbXMuCisJbGluZWFyCisJcmVhZC1vbmx5CisJcHJvbXB0CisJdGltZW91dD0xMDAKKwl2Z2EgPSBub3JtYWwgICAgIyBmb3JjZSBzYW5lIHN0YXRlCisJIyBMaW51eCBib290YWJsZSBwYXJ0aXRpb24gY29uZmlnIGJlZ2lucworCWltYWdlID0gL2V0Yy9rZXJuZWwvbGludXguaXNkbgorCXJvb3QgPSAvZGV2L3NkYTEKKwlsYWJlbCA9IGxpbnV4LmlzZG4KKwkjCisJaW1hZ2UgPSAvZXRjL2tlcm5lbC9saW51eC0yLjAuMzAKKwlyb290ID0gL2Rldi9zZGExCisJbGFiZWwgPSBsaW51eC5zZWN1cmUKKworICAgSW4gdGhlIGxpbmUgc3RhcnRpbmcgd2l0aCAiYXBwZW5kIiB5b3UgaGF2ZSB0byBhZGFwdCB0aGUgcGFyYW1ldGVycworICAgYWNjb3JkaW5nIHRvIHlvdXIgY2FyZCAoc2VlIGFib3ZlIGluIHRoaXMgZmlsZSkKKworMy4gYm9vdCB0aGUgbmV3IGxpbnV4LmlzZG4ga2VybmVsCis0LiBzdGFydCB0aGUgSVNETiBzdWJzeXN0ZW06CisgICBhKSBsb2FkIC0gaWYgbmVjZXNzYXJ5IC0gdGhlIG1vZHVsZXMgKGRlcGVuZHMsIHdoZXRoZXIgeW91IGNvbXBpbGVkCisgICAgICB0aGUgSVNETiBkcml2ZXIgYXMgbW9kdWxlIG9yIG5vdCkKKyAgICAgIEFjY29yZGluZyB0byB0aGUgdHlwZSBvZiBjYXJkIHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIG5lY2Vzc2FyeQorICAgICAgZHJpdmVyIHBhcmFtZXRlciAoaXJxLCBpbywgbWVtLCB0eXBlLCBwcm90b2NvbCkuCisgICAgICBGb3IgdGhlIGxlYXNlZCBsaW5lIHRoZSBwcm90b2NvbCBpcyAiMyIuIFNlZSB0aGUgdGFibGUgYWJvdmUgZm9yCisgICAgICB0aGUgcGFyYW1ldGVycywgd2hpY2ggeW91IGhhdmUgdG8gc3BlY2lmeSBkZXBlbmRpbmcgb24geW91ciBjYXJkLgorICAgYikgY29uZmlndXJlIGk0bAorICAgICAgL3NiaW4vaXNkbmN0cmwgYWRkaWYgaXNkbjAKKyAgICAgICMgRUFaICAxIC0tIEIxIGNoYW5uZWwgICAyIC0tQjIgY2hhbm5lbAorICAgICAgL3NiaW4vaXNkbmN0cmwgZWF6IGlzZG4wIDEKKyAgICAgIC9zYmluL2lzZG5jdHJsIHNlY3VyZSBpc2RuMCBvbgorICAgICAgL3NiaW4vaXNkbmN0cmwgaHVwdGltZW91dCBpc2RuMCAwCisgICAgICAvc2Jpbi9pc2RuY3RybCBsMl9wcm90IGlzZG4wIGhkbGMKKyAgICAgICMgQXR0ZW50aW9uIHlvdSBtdXN0IG5vdCBzZXQgYW4gb3V0Z29pbmcgbnVtYmVyICEhISBUaGlzIHdvbid0IHdvcmsgISEhCisgICAgICAjIFRoZSBpbmNvbWluZyBudW1iZXIgaXMgTEVBU0VEMCBmb3IgdGhlIGZpcnN0IGNhcmQsIExFQVNFRDEgZm9yIHRoZQorICAgICAgIyBzZWNvbmQgYW5kIHNvIG9uLgorICAgICAgL3NiaW4vaXNkbmN0cmwgYWRkcGhvbmUgaXNkbjAgaW4gTEVBU0VEMAorICAgICAgIyBIZXJlIGlzIG5vIG5lZWQgdG8gYmluZCB0aGUgY2hhbm5lbC4KKyAgIGMpIGluIGNhc2UgdGhlIHJlbW90ZSBwYXJ0bmVyIGlzIGEgQ0lTQ086CisgICAgICAvc2Jpbi9pc2RuY3RybCBlbmNhcCBpc2RuMCBjaXNjby1oCisgICBkKSBjb25maWd1cmUgdGhlIGludGVyZmFjZQorICAgICAgL3NiaW4vaWZjb25maWcgaXNkbjAgJHtMT0NBTF9JUH0gcG9pbnRvcG9pbnQgJHtSRU1PVEVfSVB9CisgICBlKSBzZXQgdGhlIHJvdXRlcworICAgICAgL3NiaW4vcm91dGUgYWRkIC1ob3N0ICR7UkVNT1RFX0lQfSBpc2RuMAorICAgICAgL3NiaW4vcm91dGUgYWRkIGRlZmF1bHQgZ3cgJHtSRU1PVEVfSVB9CisgICBmKSBzd2l0Y2ggdGhlIGNhcmQgaW50byBsZWFzZWQgbW9kZSBmb3IgZWFjaCB1c2VkIEItY2hhbm5lbAorICAgICAgL3NiaW4vaGlzYXhjdHJsIEhpU2F4IDUgMQorCitSZW1hcmtzOgorYSkgVXNlIHN0YXRlIG9mIHRoZSBhcnQgaXNkbjRrLXV0aWxzCisKK0hlcmUgYW4gZXhhbXBsZSBzY3JpcHQ6CisjIS9iaW4vc2gKKyMgU3RhcnQvU3RvcCBJU0ROIGxlYXNlZCBsaW5lIGNvbm5lY3Rpb24KKworSTRMX0FTX01PRFVMRT15ZXMKK0k0TF9SRU1PVEVfSVNfQ0lTQ089bm8KK0k0TF9NT0RVTEVfUEFSQU1TPSJ0eXBlPTE2IGlvPTB4MjY4IGlycT03ICIKK0k0TF9ERUJVRz1ubworSTRMX0xFQVNFRF8xMjhLPXllcworTE9DQUxfSVA9MTkyLjE2OC4xLjEKK1JFTU9URV9JUD0xOTIuMTY4LjIuMQorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKwllY2hvICJTdGFydGluZyBJU0ROIC4uLiIKKyAgICAgICAgaWYgWyAke0k0TF9BU19NT0RVTEV9ID0gInllcyIgXTsgdGhlbgorCQllY2hvICJsb2FkaW5nIG1vZHVsZXMuLi4iCisJCS9zYmluL21vZHByb2JlIGhpc2F4ICR7STRMX01PRFVMRV9QQVJBTVN9CisJZmkKKwkjIGNvbmZpZ3VyZSBpbnRlcmZhY2UKKwkvc2Jpbi9pc2RuY3RybCBhZGRpZiBpc2RuMAorCS9zYmluL2lzZG5jdHJsIHNlY3VyZSBpc2RuMCBvbgorCWlmIFsgJHtJNExfREVCVUd9ID0gInllcyIgXTsgdGhlbgorCQkvc2Jpbi9pc2RuY3RybCB2ZXJib3NlIDcKKwkJL3NiaW4vaGlzYXhjdHJsIEhpU2F4IDEgMHhmZmZmCisJCS9zYmluL2hpc2F4Y3RybCBIaVNheCAxMSAweGZmCisJCWNhdCAgL2Rldi9pc2RuY3RybCA+L3RtcC9sZWEubG9nICYKKwlmaQorCWlmIFsgJHtJNExfUkVNT1RFX0lTX0NJU0NPfSA9ICJ5ZXMiIF07IHRoZW4KKwkJL3NiaW4vaXNkbmN0cmwgZW5jYXAgaXNkbjAgY2lzY28taAorCWZpCisJL3NiaW4vaXNkbmN0cmwgaHVwdGltZW91dCBpc2RuMCAwCisJIyBCLUNIQU5ORUwgMQorCS9zYmluL2lzZG5jdHJsIGVheiBpc2RuMCAxCisJL3NiaW4vaXNkbmN0cmwgbDJfcHJvdCBpc2RuMCBoZGxjCisJIyAxLiBjYXJkCisJL3NiaW4vaXNkbmN0cmwgYWRkcGhvbmUgaXNkbjAgaW4gTEVBU0VEMAorICAgICAgICBpZiBbICR7STRMX0xFQVNFRF8xMjhLfSA9ICJ5ZXMiIF07IHRoZW4KKwkJL3NiaW4vaXNkbmN0cmwgYWRkc2xhdmUgaXNkbjAgaXNkbjBzCisJCS9zYmluL2lzZG5jdHJsIHNlY3VyZSBpc2RuMHMgb24KKwkJL3NiaW4vaXNkbmN0cmwgaHVwdGltZW91dCBpc2RuMHMgMAorCQkjIEItQ0hBTk5FTCAyCisJCS9zYmluL2lzZG5jdHJsIGVheiBpc2RuMHMgMgorCQkvc2Jpbi9pc2RuY3RybCBsMl9wcm90IGlzZG4wcyBoZGxjCisJCSMgMS4gY2FyZAorCQkvc2Jpbi9pc2RuY3RybCBhZGRwaG9uZSBpc2RuMHMgaW4gTEVBU0VEMAorCQlpZiBbICR7STRMX1JFTU9URV9JU19DSVNDT30gPSAieWVzIiBdOyB0aGVuCisJCQkvc2Jpbi9pc2RuY3RybCBlbmNhcCBpc2RuMHMgY2lzY28taAorCQlmaQorCWZpCisJL3NiaW4vaXNkbmN0cmwgZGlhbG1vZGUgaXNkbjAgbWFudWFsCisJIyBjb25maWd1cmUgdGNwL2lwCisJL3NiaW4vaWZjb25maWcgaXNkbjAgJHtMT0NBTF9JUH0gcG9pbnRvcG9pbnQgJHtSRU1PVEVfSVB9CisJL3NiaW4vcm91dGUgYWRkIC1ob3N0ICR7UkVNT1RFX0lQfSBpc2RuMAorCS9zYmluL3JvdXRlIGFkZCBkZWZhdWx0IGd3ICR7UkVNT1RFX0lQfQorCSMgc3dpdGNoIHRvIGxlYXNlZCBtb2RlCisJIyBCLUNIQU5ORUwgMQorCS9zYmluL2hpc2F4Y3RybCBIaVNheCA1IDEKKyAgICAgICAgaWYgWyAke0k0TF9MRUFTRURfMTI4S30gPSAieWVzIiBdOyB0aGVuCisJCSMgQi1DSEFOTkVMIDIKKwkJc2xlZXAgMTA7IC8qIFdhaXQgZm9yIG1hc3RlciAqLworCQkvc2Jpbi9oaXNheGN0cmwgSGlTYXggNSAyCisJZmkKKwk7OworICAgIHN0b3ApCisJL3NiaW4vaWZjb25maWcgaXNkbjAgZG93bgorCS9zYmluL2lzZG5jdHJsIGRlbGlmIGlzZG4wCisJaWYgWyAke0k0TF9ERUJVR30gPSAieWVzIiBdOyB0aGVuCisJCWtpbGxhbGwgY2F0CisJZmkKKwlpZiBbICR7STRMX0FTX01PRFVMRX0gPSAieWVzIiBdOyB0aGVuCisJCS9zYmluL3JtbW9kIGhpc2F4CisJCS9zYmluL3JtbW9kIGlzZG4KKwkJL3NiaW4vcm1tb2QgcHBwCisJCS9zYmluL3JtbW9kIHNsaGMKKwlmaQorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B9IgorCWV4aXQgMQorZXNhYworZXhpdCAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmFjdDIwMDAgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmFjdDIwMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3MTE1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuYWN0MjAwMApAQCAtMCwwICsxLDEwNCBAQAorJElkOiBSRUFETUUuYWN0MjAwMCx2IDEuMyAyMDAwLzA4LzA2IDA5OjIyOjUxIGFybWluIEV4cCAkCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBBQ1QyMDAwIGRyaXZlciBmb3IgdGhlCitJQk0gQWN0aXZlIDIwMDAgSVNETiBjYXJkLgorCitUaGVyZSBhcmUgMyBUeXBlcyBvZiB0aGlzIGNhcmQgYXZhaWxhYmxlLiBBIElTQS0sIE1DQS0sIGFuZCBQQ01DSUEtQnVzCitWZXJzaW9uLiBDdXJyZW50bHksIG9ubHkgdGhlIElTQS1CdXMgdmVyc2lvbiBvZiB0aGUgY2FyZCBpcyBzdXBwb3J0ZWQuCitIb3dldmVyIE1DQSBhbmQgUENNQ0lBIHdpbGwgZm9sbG93IHNvb24uCisKK1RoZSBJU0EtQnVzIFZlcnNpb24gdXNlcyA4IElPLXBvcnRzLiBUaGUgYmFzZSBwb3J0IGFkZHJlc3MgaGFzIHRvIGJlIHNldAorbWFudWFsbHkgdXNpbmcgdGhlIERJUCBzd2l0Y2hlcy4KKworU2V0dGluZyB1cCB0aGUgRElQIHN3aXRjaGVzIGZvciB0aGUgSUJNIEFjdGl2ZSAyMDAwIElTRE4gY2FyZDoKKworCSBOb3RlOiBTNSBhbmQgUzYgYWx3YXlzIHNldCBvZmYhCisKKyAgICAgUzEgIFMyICBTMyAgUzQgIEJhc2UtcG9ydAorICAgICBvbiAgb24gIG9uICBvbiAgMHgwMjAwIChGYWN0b3J5IGRlZmF1bHQpCisgICAgIG9mZiBvbiAgb24gIG9uICAweDAyNDAgCisgICAgIG9uICBvZmYgb24gIG9uICAweDAyODAgCisgICAgIG9mZiBvZmYgb24gIG9uICAweDAyYzAgCisgICAgIG9uICBvbiAgb2ZmIG9uICAweDAzMDAgCisgICAgIG9mZiBvbiAgb2ZmIG9uICAweDAzNDAgCisgICAgIG9uICBvZmYgb2ZmIG9uICAweDAzODAgCisgICAgIG9uICBvbiAgb24gIG9mZiAweGNmZTAKKyAgICAgb2ZmIG9uICBvbiAgb2ZmIDB4Y2ZhMCAKKyAgICAgb24gIG9mZiBvbiAgb2ZmIDB4Y2Y2MCAKKyAgICAgb2ZmIG9mZiBvbiAgb2ZmIDB4Y2YyMCAKKyAgICAgb24gIG9uICBvZmYgb2ZmIDB4Y2VlMCAKKyAgICAgb2ZmIG9uICBvZmYgb2ZmIDB4Y2VhMCAKKyAgICAgb24gIG9mZiBvZmYgb2ZmIDB4Y2U2MCAKKyAgICAgb2ZmIG9mZiBvZmYgb2ZmIENhcmQgZGlzYWJsZWQgCisKK0lSUSBpcyBjb25maWd1cmVkIGJ5IHNvZnR3YXJlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorCisgIDMsIDUsIDcsIDEwLCAxMSwgMTIsIDE1IGFuZCBub25lIChwb2xsZWQgbW9kZSkKKworCitUaGUgQUNUMjAwMCBkcml2ZXIgbWF5IGVpdGhlciBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUuCitJbml0aWFsaXphdGlvbiBkZXBlbmRzIG9uIGhvdyB0aGUgZHJpdmVyIGlzIGJ1aWx0OgorCitEcml2ZXIgYnVpbHQgaW50byB0aGUga2VybmVsOgorCisgIFRoZSBBQ1QyMDAwIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgY29tbWFuZGxpbmUtZmVhdHVyZSB3aGlsZQorICBsb2FkaW5nIHRoZSBrZXJuZWwgd2l0aCBMSUxPIG9yIExPQURMSU4uIEl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzeW50YXg6CisKKyAgYWN0MjAwMD1iLHAsaVssaWRzdHJpbmddCisKKyAgd2hlcmUKKworICAgIGIgPSBCdXMtVHlwZSAgICAgICgxPUlTQSwgMj1NQ0EsIDM9UENNQ0lBKQorICAgIHAgPSBwb3J0YmFzZSAgICAgICgtMSBtZWFucyBhdXRvcHJvYmUpCisgICAgaSA9IEludGVycnVwdCAgICAgKC0xIG1lYW5zIHVzZSBuZXh0IGZyZWUgSVJRLCAwIG1lYW5zIHBvbGxlZCBtb2RlKQorCisgIFRoZSBpZHN0cmluZyBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIHVzZWQgZm9yIHJlZmVyZW5jaW5nIHRoZSBjYXJkCisgIGJ5IHRoZSBhY3RjdHJsIHRvb2wgbGF0ZXIuCisKKyAgRGVmYXVsdHMgdXNlZCwgd2hlbiBubyBwYXJhbWV0ZXJzIGdpdmVuIGF0IGFsbDoKKworICAgIDEsLTEsLTEsIiIKKworICB3aGljaCBtZWFuczogQXV0b3Byb2JlIGZvciBhbiBJU0EgY2FyZCwgdXNlIG5leHQgZnJlZSBJUlEsIGxldCB0aGUKKyAgSVNETiBsaW5rbGV2ZWwgZmlsbCB0aGUgSWRTdHJpbmcgKHVzdWFsbHkgImxpbmUwIiBmb3IgdGhlIGZpcnN0IGNhcmQpLgorIAorICBJZiB5b3UgbGlrZSB0byB1c2UgbW9yZSB0aGFuIG9uZSBjYXJkLCB5b3UgY2FuIHVzZSB0aGUgcHJvZ3JhbQorICAiYWN0Y3RybCIgZnJvbSB0aGUgdXRpbGl0eS1wYWNrYWdlIHRvIGNvbmZpZ3VyZSBhZGRpdGlvbmFsIGNhcmRzLgorCisgIFVzaW5nIHRoZSAiYWN0Y3RybCItdXRpbGl0eSwgcG9ydGJhc2UgYW5kIGlycSBjYW4gYWxzbyBiZSBjaGFuZ2VkCisgIGR1cmluZyBydW50aW1lLiBUaGUgRC1jaGFubmVsIHByb3RvY29sIGlzIGNvbmZpZ3VyZWQgYnkgdGhlICJkcHJvdG8iCisgIG9wdGlvbiBvZiB0aGUgImFjdGN0cmwiLXV0aWxpdHkgYWZ0ZXIgbG9hZGluZyB0aGUgZmlybXdhcmUgaW50byB0aGUKKyAgY2FyZCdzIG1lbW9yeSB1c2luZyB0aGUgImFjdGN0cmwiLXV0aWxpdHkuCisKK0RyaXZlciBidWlsdCBhcyBtb2R1bGU6CisKKyAgVGhlIG1vZHVsZSBhY3QyMDAwLm8gY2FuIGJlIGNvbmZpZ3VyZWQgZHVyaW5nIG1vZHByb2JlIChpbnNtb2QpIGJ5CisgIGFwcGVuZGluZyBpdHMgcGFyYW1ldGVycyB0byB0aGUgbW9kcHJvYmUgcmVzcC4gaW5zbW9kIGNvbW1hbmRsaW5lLgorICBUaGUgZm9sbG93aW5nIHN5bnRheCBpcyBhY2NlcHRlZDoKKworICAgIGFjdF9idXM9YiBhY3RfcG9ydD1wIGFjdF9pcnE9aSBhY3RfaWQ9aWRzdHJpbmcKKworICB3aGVyZSBiLCBwLCBpIGFuZCBpZHN0cmluZyBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzIGFzIHRoZSBwYXJhbWV0ZXJzCisgIGRlc2NyaWJlZCBmb3IgdGhlIGJ1aWx0aW4gdmVyc2lvbiBhYm92ZS4KKworICBVc2luZyB0aGUgImFjdGN0cmwiLXV0aWxpdHksIHRoZSBzYW1lIGZlYXR1cmVzIGFwcGx5IHRvIHRoZSBtb2R1bGFyaXplZAorICB2ZXJzaW9uIGFzIHRvIHRoZSBrZXJuZWwtYnVpbHRpbiBvbmUuIChpLmUuIGxvYWRpbmcgb2YgZmlybXdhcmUgYW5kCisgIGNvbmZpZ3VyaW5nIHRoZSBELWNoYW5uZWwgcHJvdG9jb2wpCisKK0xvYWRpbmcgdGhlIGZpcm13YXJlIGludG8gdGhlIGNhcmQ6CisKKyAgVGhlIGZpcm13YXJlIGlzIHN1cHBsaWVkIHRvZ2V0aGVyIHdpdGggdGhlIGlzZG40ay11dGlscyBwYWNrYWdlLiBJdAorICBjYW4gYmUgZm91bmQgaW4gdGhlIHN1YmRpcmVjdG9yeSBhY3QyMDAwL2Zpcm13YXJlLworCisgIEFzc3VtaW5nIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgdXRpbGl0eS1wYWNrYWdlIGNvcnJlY3RseSwgdGhlIGZpcm13YXJlCisgIHdpbGwgYmUgZG93bmxvYWRlZCBpbnRvIHRoZSBjYXJkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgIGFjdGN0cmwgLWQgaWRzdHJpbmcgbG9hZCAvZXRjL2lzZG4vYmlwMTEuYnRsCisKKyAgd2hlcmUgaWRzdHJpbmcgaXMgdGhlIE5hbWUgb2YgdGhlIGNhcmQsIGdpdmVuIGR1cmluZyBpbnNtb2QtdGltZSBvcgorICAoZm9yIGtlcm5lbC1idWlsdGluIGRyaXZlcikgb24gdGhlIGtlcm5lbCBjb21tYW5kbGluZS4gSWYgb25seSBvbmUKKyAgSVNETiBjYXJkIGlzIHVzZWQsIHRoZSAtZCBpc2RzdHJpbiBtYXkgYmUgb21pdHRlZC4KKworICBGb3IgZnVydGhlciBkb2N1bWVudGF0aW9uIChhZGRpbmcgbW9yZSBJQk0gQWN0aXZlIDIwMDAgY2FyZHMpLCByZWZlciB0bworICB0aGUgbWFucGFnZSBhY3RjdHJsLjggd2hpY2ggaXMgaW5jbHVkZWQgaW4gdGhlIGlzZG40ay11dGlscyBwYWNrYWdlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmF1ZGlvIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hdWRpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJjYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5hdWRpbwpAQCAtMCwwICsxLDEzOCBAQAorJElkOiBSRUFETUUuYXVkaW8sdiAxLjggMTk5OS8wNy8xMSAxNzoxNzoyOSBhcm1pbiBFeHAgJAorCitJU0ROIHN1YnN5c3RlbSBmb3IgTGludXguCisgIERlc2NyaXB0aW9uIG9mIGF1ZGlvIG1vZGUuCisKK1doZW4gZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIHRoZSB0dHkgZW11bGF0b3Igb2YgdGhlIElTRE4KK3N1YnN5c3RlbSBpcyBjYXBhYmxlIG9mIGEgcmVkdWNlZCBzZXQgb2YgY29tbWFuZHMgdG8gc3VwcG9ydCBhdWRpby4KK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21tYW5kcyBzdXBwb3J0ZWQgYW5kIHRoZSBmb3JtYXQgb2YKK2F1ZGlvIGRhdGEuCisKK0NvbW1hbmRzIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYXVkaW8gbW9kZToKKworICAgICAgICBBVCtGQ0xBU1M9OCAgICAgIEVuYWJsZSBhdWRpbyBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWZmZWN0cyB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFMxODogQml0cyAwIGFuZCAyIGFyZSBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTMTY6IFNldCB0byA0OCBhbmQgYW55IGZ1cnRoZXIgY2hhbmdlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlciB2YWx1ZXMgaXMgYmxvY2tlZC4KKyAgICAgICAgQVQrRkNMQVNTPTAgICAgICBEaXNhYmxlIGF1ZGlvIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgMTggaXMgc2V0IHRvIDQuCisgICAgICAgIEFUK0ZDTEFTUz0/ICAgICAgU2hvdyBwb3NzaWJsZSBtb2Rlcy4KKyAgICAgICAgQVQrRkNMQVNTPyAgICAgICBSZXBvcnQgY3VycmVudCBtb2RlICgwIG9yIDgpLgorCitDb21tYW5kcyBzdXBwb3J0ZWQgaW4gYXVkaW8gbW9kZToKKworQWxsIGF1ZGlvIG1vZGUgY29tbWFuZHMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKworICAgICAgICBBVCtWeHg/ICAgICAgICAgIFNob3cgY3VycmVudCBzZXR0aW5nLgorICAgICAgICBBVCtWeHg9PyAgICAgICAgIFNob3cgcG9zc2libGUgc2V0dGluZ3MuCisgICAgICAgIEFUK1Z4eD12ICAgICAgICAgU2V0IHNpbXBsZSBwYXJhbWV0ZXIuCisgICAgICAgIEFUK1Z4eD12LHYgLi4uICAgU2V0IGNvbXBsZXggcGFyYW1ldGVyLgorCit3aGVyZSB4eCBpcyBhIHR3by1jaGFyYWN0ZXIgY29kZSBhbmQgdiBhcmUgYWxwaGFudW1lcmljYWwgcGFyYW1ldGVycy4KK1RoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHN1cHBvcnRlZDoKKworICAgICAgICBBVCtWTkg9eCAgICAgICAgIEF1dG8gaGFuZ3VwIHNldHRpbmcuIE5PIEVGRkVDVCwgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbXBhdGliaWxpdHkgb25seS4KKyAgICAgICAgQVQrVk5IPyAgICAgICAgICBBbHdheXMgcmVwb3J0aW5nICIxIgorICAgICAgICBBVCtWTkg9PyAgICAgICAgIEFsd2F5cyByZXBvcnRpbmcgIjEiCisKKyAgICAgICAgQVQrVklQICAgICAgICAgICBSZXNldCBhbGwgYXVkaW8gcGFyYW1ldGVycy4KKworICAgICAgICBBVCtWTFM9eCAgICAgICAgIExpbmUgc2VsZWN0LiB4IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9IE5vIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPSBQaG9uZSBsaW5lLgorICAgICAgICBBVCtWTFM9PyAgICAgICAgIEFsd2F5cyByZXBvcnRpbmcgIjAsMiIKKyAgICAgICAgQVQrVkxTPyAgICAgICAgICBTaG93IGN1cnJlbnQgbGluZS4KKworICAgICAgICBBVCtWUlggICAgICAgICAgIFN0YXJ0IHJlY29yZGluZy4gRW11bGF0b3IgcmVzcG9uZHMgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1QgYW5kIHN0YXJ0cyBzZW5kaW5nIGF1ZGlvIGRhdGEgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24uIFNlZSBiZWxvdyBmb3IgZGF0YSBmb3JtYXQKKworICAgICAgICBBVCtWU0Q9eCx5ICAgICAgIFNldCBzaWxlbmNlLWRldGVjdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMCAuLi4gMzEgIHNlbnNpdGl2aXR5IHRocmVzaG9sZCBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMCAsIGRlYWN0aXZhdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDAgLi4uIDI1NSByYW5nZSBvZiBpbnRlcnZhbCBpbiB1bml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiAwLjEgc2Vjb25kLiAoZGVmYXVsdCA3MCkKKyAgICAgICAgQVQrVlNEPT8gICAgICAgICBSZXBvcnQgcG9zc2libGUgcGFyYW1ldGVycy4KKyAgICAgICAgQVQrVlNEPyAgICAgICAgICBTaG93IGN1cnJlbnQgcGFyYW1ldGVycy4KKworICAgICAgICBBVCtWREQ9eCx5ICAgICAgIFNldCBEVE1GLWRldGVjdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcG9zc2libGUgaWYgb25saW5lIGFuZCBkdXJpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMCAuLi4gMTUgIHNlbnNpdGl2aXR5IHRocmVzaG9sZCBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMCAsIEk0TCBzb2Z0LWRlY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtMTUgc29mdC1kZWNvZGUgb2ZmLCBoYXJkd2FyZSBvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwIC4uLiAyNTUgdG9uZSBkdXJhdGlvbiBpbiB1bml0cyBvZiA1bXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBmb3IgSTRMIHNvZnQgZGVjb2RlIChkZWZhdWx0IDgsIDQwbXMpCisgICAgICAgIEFUK1ZERD0/ICAgICAgICAgUmVwb3J0IHBvc3NpYmxlIHBhcmFtZXRlcnMuCisgICAgICAgIEFUK1ZERD8gICAgICAgICAgU2hvdyBjdXJyZW50IHBhcmFtZXRlcnMuCisKKyAgICAgICAgQVQrVlNNPXggICAgICAgICBTZWxlY3QgYXVkaW8gZGF0YSBmb3JtYXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGUgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPSBBRFBDTS0yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gQURQQ00tMworICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9IEFEUENNLTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSBhTEFXCisgICAgICAgICAgICAgICAgICAgICAgICAgICA2ID0gdUxBVworICAgICAgICBBVCtWU009PyAgICAgICAgIFNob3cgcG9zc2libGUgYXVkaW8gZm9ybWF0cy4KKworICAgICAgICBBVCtWVFggICAgICAgICAgIFN0YXJ0IGF1ZGlvIHBsYXliYWNrLiBFbXVsYXRvciByZXNwb25kcworICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQ09OTkVDVCBhbmQgc3RhcnRzIHNlbmRpbmcgYXVkaW8gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIHZpYSBwaG9uZSBsaW5lLgorR2VuZXJhbCBiZWhhdmlvciBhbmQgZGVzY3JpcHRpb24gb2YgZGF0YSBmb3JtYXRzL3Byb3RvY29sLgorICAgIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGU6CisKKyAgICAgIE9uIGluY29taW5nIGNhbGxzLCBpZiB0aGUgYXBwbGljYXRpb24gcmVzcG9uZHMgdG8gYSBSSU5HCisgICAgICB3aXRoIEFUQSwgZGVwZW5kaW5nIG9uIHRoZSBjYWxsaW5nIHNlcnZpY2UsIHRoZSBlbXVsYXRvcgorICAgICAgcmVzcG9uZHMgd2l0aCBlaXRoZXIgQ09OTkVDVCAoZGF0YSBjYWxsKSBvciBWQ09OICh2b2ljZSBjYWxsKS4KKyAgICAgIAorICAgICAgT24gb3V0Z29pbmcgdm9pY2UgY2FsbHMsIHRoZSBlbXVsYXRvciByZXNwb25kcyB3aXRoIFZDT04KKyAgICAgIHVwb24gY29ubmVjdGlvbiBzZXR1cC4KKworICBBdWRpbyByZWNvcmRpbmcuCisKKyAgICBXaGVuIHJlY2VpdmluZyBhdWRpbyBkYXRhLCBhIGtpbmQgb2YgYmlzeW5jIHByb3RvY29sIGlzIHVzZWQuCisgICAgVXBvbiBBVCtWUlggY29tbWFuZCwgdGhlIGVtdWxhdG9yIHJlc3BvbmRzIHdpdGggQ09OTkVDVCwgYW5kCisgICAgc3RhcnRzIHNlbmRpbmcgYXVkaW8gZGF0YSB0byB0aGUgYXBwbGljYXRpb24uIFRoZXJlIGFyZSBzZXZlcmFsCisgICAgZXNjYXBlIHNlcXVlbmNlcyBkZWZpbmVkLCBhbGwgdXNpbmcgRExFICgweDEwKSBhcyBFc2NhcGUgY2hhcjoKKworICAgIDxETEU+PEVUWD4gICAgICAgICAgICAgIEVuZCBvZiBhdWRpbyBkYXRhLiAoaS5lLiBjYXVzZWQgYnkgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmd1cCBvZiB0aGUgcmVtb3RlIHNpZGUpIEVtdWxhdG9yIHN0b3BzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkaW5nLCByZXNwb25kaW5nIHdpdGggVkNPTi4KKyAgICA8RExFPjxEQzQ+CQkgICAgQWJvcnQgcmVjb3JkaW5nLCAoc2VuZCBieSBhcHBsLikgRW11bGF0b3IKKwkJCSAgICBzdG9wcyByZWNvcmRpbmcsIHNlbmRzIERMRSxFVFguCisgICAgPERMRT48RExFPiAgICAgICAgICAgICAgRXNjYXBlIHNlcXVlbmNlIGZvciBETEUgaW4gZGF0YSBzdHJlYW0uCisgICAgPERMRT4wICAgICAgICAgICAgICAgICAgVG91Y2h0b25lICIwIiByZWNlaXZlZC4KKyAgICAgICAgIC4uLgorICAgIDxETEU+OSAgICAgICAgICAgICAgICAgIFRvdWNodG9uZSAiOSIgcmVjZWl2ZWQuCisgICAgPERMRT4jICAgICAgICAgICAgICAgICAgVG91Y2h0b25lICIjIiByZWNlaXZlZC4KKyAgICA8RExFPiogICAgICAgICAgICAgICAgICBUb3VjaHRvbmUgIioiIHJlY2VpdmVkLgorICAgIDxETEU+QSAgICAgICAgICAgICAgICAgIFRvdWNodG9uZSAiQSIgcmVjZWl2ZWQuCisgICAgPERMRT5CICAgICAgICAgICAgICAgICAgVG91Y2h0b25lICJCIiByZWNlaXZlZC4KKyAgICA8RExFPkMgICAgICAgICAgICAgICAgICBUb3VjaHRvbmUgIkMiIHJlY2VpdmVkLgorICAgIDxETEU+RCAgICAgICAgICAgICAgICAgIFRvdWNodG9uZSAiRCIgcmVjZWl2ZWQuCisKKyAgICA8RExFPnEgICAgICAgICAgICAgICAgICBxdWlldC4gU2lsZW5jZSBkZXRlY3RlZCBhZnRlciBub24tc2lsZW5jZS4KKyAgICA8RExFPnMgICAgICAgICAgICAgICAgICBzaWxlbmNlLiBTaWxlbmNlIGRldGVjdGVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgb2YgcmVjb3JkaW5nLgorCisgICAgQ3VycmVudGx5IHVuc3VwcG9ydGVkIERMRSBzZXF1ZW5jZXM6CisKKyAgICA8RExFPmMgICAgICAgICAgICAgICAgICBGQVggY2FsbGluZyB0b25lIHJlY2VpdmVkLgorICAgIDxETEU+YiAgICAgICAgICAgICAgICAgIGJ1c3kgdG9uZSByZWNlaXZlZC4KKworICBBdWRpbyBwbGF5YmFjay4KKworICAgIFdoZW4gc2VuZGluZyBhdWRpbyBkYXRhLCB1cG9uIEFUK1ZUWCBjb21tYW5kLCBlbXVsYXRvciByZXNwb25kcyB3aXRoCisgICAgQ09OTkVDVCwgYW5kIHN0YXJ0cyB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIGFwcGxpY2F0aW9uIHRvIHRoZSBwaG9uZSBsaW5lLgorICAgIFRoZSBzYW1lIERMRSBzZXF1ZW5jZXMgYXBwbHkgdG8gdGhpcyBtb2RlLgorCisgIEZ1bGwtRHVwbGV4LUF1ZGlvOgorCisgICAgV2hlbiBfYm90aF8gY29tbWFuZHMgZm9yIHJlY29yZGluZyBhbmQgcGxheWJhY2sgYXJlIGdpdmVuIGluIF9vbmVfCisgICAgQVQtY29tbWFuZC1saW5lIChpLmUuOiAiQVQrVlRYK1ZSWCIpLCBmdWxsLWR1cGxleC1tb2RlIGlzIHNlbGVjdGVkLgorCUluIHRoaXMgbW9kZSwgdGhlIG9ubHkgd2F5IHRvIHN0b3AgcmVjb3JkaW5nIGlzIHNlbmRpbmcgPERMRT48REM0PgorICAgIGFuZCB0aGUgb25seSB3YXkgdG8gc3RvcCBwbGF5YmFjayBpcyB0byBzZW5kIDxETEU+PEVUWD4uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuYXZtYjEgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmF2bWIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDc1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmF2bWIxCkBAIC0wLDAgKzEsMTg3IEBACitEcml2ZXIgZm9yIGFjdGl2ZSBBVk0gQ29udHJvbGxlci4KKworVGhlIGRyaXZlciBwcm92aWRlcyBhIGtlcm5lbCBjYXBpMi4wIEludGVyZmFjZSAoa2VybmVsY2FwaSkgYW5kCitvbiB0b3Agb2YgdGhpcyBhIFVzZXItTGV2ZWwtQ0FQSTIuMC1pbnRlcmZhY2UgKGNhcGkpCithbmQgYSBkcml2ZXIgdG8gY29ubmVjdCBpc2RuNGxpbnV4IHdpdGggQ0FQSTIuMCAoY2FwaWRydikuCitUaGUgbG93bGV2ZWwgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBhIENBUEkyLjAKK2Fsc28gZm9yIHBhc3NpdmUgY2FyZHMgc2luY2UgSnVseSAxOTk5LgorCitUaGUgYXV0aG9yIGNhbiBiZSByZWFjaGVkIGF0IGNhbGxlQGNhbGxlLmluLWJlcmxpbi5kZS4KK1RoZSBjb21tYW5kIGF2bWNhcGljdHJsIGlzIHBhcnQgb2YgdGhlIGlzZG40ay11dGlscy4KK3Q0LWZpbGVzIGNhbiBiZSBmb3VuZCBhdCBmdHA6Ly9mdHAuYXZtLmRlL2NhcmR3YXJlL2IxL2xpbnV4L2Zpcm13YXJlCisKK0N1cnJlbnRseSBzdXBwb3J0ZWQgY2FyZHM6CisJQjEgSVNBIChhbGwgdmVyc2lvbnMpCisJQjEgUENJCisJVDEvVDFCIChIRU1BIGNhcmQpCisJTTEKKwlNMgorCUIxIFBDTUNJQQorCitJbnN0YWxsaW5nCistLS0tLS0tLS0tCisKK1lvdSBuZWVkIGF0IGxlYXN0IC9kZXYvY2FwaTIwIHRvIGxvYWQgdGhlIGZpcm13YXJlLgorCitta25vZCAvZGV2L2NhcGkyMCBjIDY4IDAKK21rbm9kIC9kZXYvY2FwaTIwLjAwIGMgNjggMQorbWtub2QgL2Rldi9jYXBpMjAuMDEgYyA2OCAyCisuCisuCisuCitta25vZCAvZGV2L2NhcGkyMC4xOSBjIDY4IDIwCisKK1J1bm5pbmcKKy0tLS0tLS0KKworVG8gdXNlIHRoZSBjYXJkIHlvdSBuZWVkIHRoZSB0NC1maWxlcyB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUuCitBVk0gR21iSCBwcm92aWRlcyBzZXZlcmFsIHQ0LWZpbGVzIGZvciB0aGUgZGlmZmVyZW50IEQtY2hhbm5lbAorcHJvdG9jb2xzIChiMS50NCBmb3IgRXVyby1JU0ROKS4gSW5zdGFsbCB0aGVzZSBmaWxlIGluIC9saWIvaXNkbi4KKworaWYgeW91IGNvbmZpZ3VyZSBhcyBtb2R1bGVzIGxvYWQgdGhlIG1vZHVsZXMgdGhpcyB3YXk6CisKK2luc21vZCAvbGliL21vZHVsZXMvY3VycmVudC9taXNjL2NhcGl1dGlsLm8KK2luc21vZCAvbGliL21vZHVsZXMvY3VycmVudC9taXNjL2IxLm8KK2luc21vZCAvbGliL21vZHVsZXMvY3VycmVudC9taXNjL2tlcm5lbGNhcGkubworaW5zbW9kIC9saWIvbW9kdWxlcy9jdXJyZW50L21pc2MvY2FwaWRydi5vCitpbnNtb2QgL2xpYi9tb2R1bGVzL2N1cnJlbnQvbWlzYy9jYXBpLm8KKworaWYgeW91IGhhdmUgYW4gQjEtUENJIGNhcmQgbG9hZCB0aGUgbW9kdWxlIGIxcGNpLm8KK2luc21vZCAvbGliL21vZHVsZXMvY3VycmVudC9taXNjL2IxcGNpLm8KK2FuZCBsb2FkIHRoZSBmaXJtd2FyZSB3aXRoCithdm1jYXBpY3RybCBsb2FkIC9saWIvaXNkbi9iMS50NCAxCisKK2lmIHlvdSBoYXZlIGFuIEIxLUlTQSBjYXJkIGxvYWQgdGhlIG1vZHVsZSBiMWlzYS5vCithbmQgYWRkIHRoZSBjYXJkIGJ5IGNhbGxpbmcKK2F2bWNhcGljdHJsIGFkZCAweDE1MCAxNQorYW5kIGxvYWQgdGhlIGZpcm13YXJlIGJ5IGNhbGxpbmcKK2F2bWNhcGljdHJsIGxvYWQgL2xpYi9pc2RuL2IxLnQ0IDEKKworaWYgeW91IGhhdmUgYW4gVDEtSVNBIGNhcmQgbG9hZCB0aGUgbW9kdWxlIHQxaXNhLm8KK2FuZCBhZGQgdGhlIGNhcmQgYnkgY2FsbGluZworYXZtY2FwaWN0cmwgYWRkIDB4NDUwIDE1IFQxIDAKK2FuZCBsb2FkIHRoZSBmaXJtd2FyZSBieSBjYWxsaW5nCithdm1jYXBpY3RybCBsb2FkIC9saWIvaXNkbi90MS50NCAxCisKK2lmIHlvdSBoYXZlIGFuIFBDTUNJQSBjYXJkIChCMS9NMS9NMikgbG9hZCB0aGUgbW9kdWxlIGIxcGNtY2lhLm8KK2JlZm9yZSB5b3UgaW5zZXJ0IHRoZSBjYXJkLgorCitMZWFzZWQgTGluZXMgd2l0aCBCMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luaXQgY2FyZCBhbmQgbG9hZCBmaXJtd2FyZS4KK0ZvciBhbiBENjRTIHVzZSAiRlY6IDEiIGFzIHBob25lIG51bWJlcgorRm9yIGFuIEQ2NFMyIHVzZSAiRlY6IDEiIGFuZCAiRlY6IDIiIGZvciBtdWx0aWxpbmsKK29yICJGVjogMSwyIiB0byB1c2UgQ0FQSSBjaGFubmVsIGJ1bmRsaW5nLgorCisvcHJvYy1JbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy9wcm9jL2NhcGk6CisgIGRyLXhyLXhyLXggICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIEp1bCAgMSAxNDowMyAuCisgIGRyLXhyLXhyLXggIDgyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIEp1biAzMCAxOTowOCAuLgorICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgYXBwbGljYXRpb25zCisgIC1yLS1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIEp1bCAgMSAxNDowMyBhcHBsc3RhdHMKKyAgLXItLXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgIDAgSnVsICAxIDE0OjAzIGNhcGkyMAorICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgY2FwaWRydgorICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgY29udHJvbGxlcgorICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgY29udHJzdGF0cworICAtci0tci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBKdWwgIDEgMTQ6MDMgZHJpdmVyCisgIC1yLS1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIEp1bCAgMSAxNDowMyBuY2NpCisgIC1yLS1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAwIEp1bCAgMSAxNDowMyB1c2VycworCisvcHJvYy9jYXBpL2FwcGxpY2F0aW9uczoKKyAgIGFwcGxpZCBsZXZlbDNjbnQgZGF0YWJsa2NudCBkYXRhYmxrbGVuIG5jY2ktY250IHJlY3ZxdWV1ZWxlbgorCWxldmVsM2NudDogY2FwaV9yZWdpc3RlciBwYXJhbWV0ZXIKKwlkYXRhYmxrY250OiBjYXBpX3JlZ2lzdGVyIHBhcmFtZXRlcgorCW5jY2ktY250OiBjdXJyZW50IG51bWJlciBvZiBuY2NpcyAoY29ubmVjdGlvbnMpCisJcmVjdnF1ZXVlbGVuOiBudW1iZXIgb2YgbWVzc2FnZXMgb24gcmVjZWl2ZSBxdWV1ZQorICAgZm9yIGV4YW1wbGU6CisxIC0yIDE2IDIwNDggMSAwCisyIDIgNyAyMDQ4IDEgMAorCisvcHJvYy9jYXBpL2FwcGxzdGF0czoKKyAgIGFwcGxpZCByZWN2Y3RsbXNnIG5yZWN2ZGF0YW1zZyBuc2VudGN0bG1zZyBuc2VudGRhdGFtc2cKKwlyZWN2Y3RsbXNnOiBjYXBpIG1lc3NhZ2VzIHJlY2VpdmVkIHdpdGhvdXQgREFUQV9CM19JTkQKKwlyZWN2ZGF0YW1zZzogY2FwaSBEQVRBX0IzX0lORCByZWNlaXZlZAorCXNlbnRjdGxtc2c6IGNhcGkgbWVzc2FnZXMgc2VudCB3aXRob3V0IERBVEFfQjNfUkVRCisJc2VudGRhdGFtc2c6IGNhcGkgREFUQV9CM19SRVEgc2VudAorICAgZm9yIGV4YW1wbGU6CisxIDIwNTcgMTY5OSAxNzIxIDE2OTkKKworL3Byb2MvY2FwaS9jYXBpMjA6IHN0YXRpc3RpY3Mgb2YgY2FwaS5vICgvZGV2L2NhcGkyMCkKKyAgICBtaW5vciBub3BlbiBucmVjdmRyb3Btc2cgbnJlY3ZjdGxtc2cgbnJlY3ZkYXRhbXNnIHNlbnRjdGxtc2cgc2VudGRhdGFtc2cKKwltaW5vcjogbWlub3IgZGV2aWNlIG51bWJlciBvZiBjYXBpIGRldmljZQorCW5vcGVuOiBudW1iZXIgb2YgY2FsbHMgdG8gZGV2aWNlcyBvcGVuCisJbnJlY3Zkcm9wbXNnOiBjYXBpIG1lc3NhZ2VzIGRyb3BwZWQgKG1lc3NhZ2VzIGluIHJlY3ZxdWV1ZSBpbiBjbG9zZSkKKwlucmVjdmN0bG1zZzogY2FwaSBtZXNzYWdlcyByZWNlaXZlZCB3aXRob3V0IERBVEFfQjNfSU5ECisJbnJlY3ZkYXRhbXNnOiBjYXBpIERBVEFfQjNfSU5EIHJlY2VpdmVkCisJbnNlbnRjdGxtc2c6IGNhcGkgbWVzc2FnZXMgc2VudCB3aXRob3V0IERBVEFfQjNfUkVRCisJbnNlbnRkYXRhbXNnOiBjYXBpIERBVEFfQjNfUkVRIHNlbnQKKworICAgZm9yIGV4YW1wbGU6CisxIDIgMTggMCAxNiAyCisKKy9wcm9jL2NhcGkvY2FwaWRydjogc3RhdGlzdGljcyBvZiBjYXBpZHJ2Lm8gKGNhcGkgbWVzc2FnZXMpCisgICAgbnJlY3ZjdGxtc2cgbnJlY3ZkYXRhbXNnIHNlbnRjdGxtc2cgc2VudGRhdGFtc2cKKwlucmVjdmN0bG1zZzogY2FwaSBtZXNzYWdlcyByZWNlaXZlZCB3aXRob3V0IERBVEFfQjNfSU5ECisJbnJlY3ZkYXRhbXNnOiBjYXBpIERBVEFfQjNfSU5EIHJlY2VpdmVkCisJbnNlbnRjdGxtc2c6IGNhcGkgbWVzc2FnZXMgc2VudCB3aXRob3V0IERBVEFfQjNfUkVRCisJbnNlbnRkYXRhbXNnOiBjYXBpIERBVEFfQjNfUkVRIHNlbnQKKyAgIGZvciBleGFtcGxlOgorMjc4MCAyMjI2IDIyNTYgMjIyNgorCisvcHJvYy9jYXBpL2NvbnRyb2xsZXI6CisgICBjb250cm9sbGVyIGRyaXZlcm5hbWUgc3RhdGUgY2FyZG5hbWUgICBjb250cm9sbGVyaW5mbworICAgZm9yIGV4YW1wbGU6CisxIGIxcGNpICAgICAgcnVubmluZyAgYjFwY2ktZTAwMCAgICAgICBCMSAzLjA3LTAxIDB4ZTAwMCAxOQorMiB0MWlzYSAgICAgIHJ1bm5pbmcgIHQxaXNhLTQ1MCAgICAgICAgQjEgMy4wNy0wMSAweDQ1MCAxMSAwCiszIGIxcGNtY2lhICAgcnVubmluZyAgbTItMTUwICAgICAgICAgICBCMSAzLjA3LTAxIDB4MTUwIDUKKworL3Byb2MvY2FwaS9jb250cnN0YXRzOgorICAgIGNvbnRyb2xsZXIgbnJlY3ZjdGxtc2cgbnJlY3ZkYXRhbXNnIHNlbnRjdGxtc2cgc2VudGRhdGFtc2cKKwlucmVjdmN0bG1zZzogY2FwaSBtZXNzYWdlcyByZWNlaXZlZCB3aXRob3V0IERBVEFfQjNfSU5ECisJbnJlY3ZkYXRhbXNnOiBjYXBpIERBVEFfQjNfSU5EIHJlY2VpdmVkCisJbnNlbnRjdGxtc2c6IGNhcGkgbWVzc2FnZXMgc2VudCB3aXRob3V0IERBVEFfQjNfUkVRCisJbnNlbnRkYXRhbXNnOiBjYXBpIERBVEFfQjNfUkVRIHNlbnQKKyAgIGZvciBleGFtcGxlOgorMSAyODQ1IDIyNzIgMjMxMCAyMjc0CisyIDIgMCAyIDAKKzMgMiAwIDIgMAorCisvcHJvYy9jYXBpL2RyaXZlcjoKKyAgIGRyaXZlcm5hbWUgbmNvbnRyb2xsZXIKKyAgIGZvciBleGFtcGxlOgorYjFwY2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQordDFpc2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorYjFwY21jaWEgICAgICAgICAgICAgICAgICAgICAgICAgMQorYjFpc2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvcHJvYy9jYXBpL25jY2k6CisgICBhcGxsaWQgbmNjaSB3aW5zaXplIHNlbmR3aW5kb3cKKyAgIGZvciBleGFtcGxlOgorMSAweDEwMTAxIDggMAorCisvcHJvYy9jYXBpL3VzZXJzOiBrZXJuZWxtb2R1bGVzIHRoYXQgdXNlIHRoZSBrZXJuZWxjYXBpLgorICAgbmFtZQorICAgZm9yIGV4YW1wbGU6CitjYXBpZHJ2CitjYXBpMjAKKworUXVlc3Rpb25zCistLS0tLS0tLS0KK0NoZWNrIG91dCB0aGUgRkFRIChmdHAuaXNkbjRsaW51eC5kZSkgb3Igc3Vic2NyaWJlIHRvIHRoZQorbGludXgtYXZtYjFAY2FsbGUuaW4tYmVybGluLmRlIG1haWxpbmcgbGlzdCBieSBzZW5kaW5nCithIG1haWwgdG8gbWFqb3Jkb21vQGNhbGxlLmluLWJlcmxpbi5kZSB3aXRoCitzdWJzY3JpYmUgbGludXgtYXZtYjEKK2luIHRoZSBib2R5LgorCitHZXJtYW4gZG9jdW1lbnRhdGlvbiBhbmQgc2V2ZXJhbCBzY3JpcHRzIGNhbiBiZSBmb3VuZCBhdAorZnRwOi8vZnRwLmF2bS5kZS9jYXJkd2FyZS9iMS9saW51eC8KKworQnVncyAKKy0tLS0KK0lmIHlvdSBmaW5kIGFueSBwbGVhc2UgbGV0IG1lIGtub3cuIAorCitFbmpveSwKKworQ2Fyc3RlbiBQYWV0aCAoY2FsbGVAY2FsbGUuaW4tYmVybGluLmRlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5jb25jYXAgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmNvbmNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjExNGJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5jb25jYXAKQEAgLTAsMCArMSwyNTkgQEAKK0Rlc2NyaXB0aW9uIG9mIHRoZSAiY29uY2FwIiBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSAiY29uY2FwIiBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBuZXR3b3JrIGRldmljZQorZHJpdmVycyB0aGF0IG5lZWQgdG8gcHJvY2VzcyBhbiBlbmNhcHN1bGF0aW9uIHByb3RvY29sLiAKK0l0IGlzIGFzc3VtZWQgdGhhdCB0aGUgcHJvdG9jb2wgaW50ZXJhY3RzIHdpdGggYSBsaW51eCBuZXR3b3JrIGRldmljZSBieQorLSBkYXRhIHRyYW5zbWlzc2lvbgorLSBjb25uZWN0aW9uIGNvbnRyb2wgKGVzdGFibGlzaCwgcmVsZWFzZSkKK1RodXMsIHRoZSBtbmVtb25pYzogIkNPTm5lY3Rpb24gQ09OdHJvbGxpbmcgZU5DQVBzdWxhdGlvbiBQcm90b2NvbCIuCisKK1RoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBpbnNpZGUgdGhlIGlzZG4gc3Vic3lzdGVtLiBCdXQgaXQgbWlnaHQKK2Fsc28gYmUgdXNlZnVsIHRvIG90aGVyIGtpbmRzIG9mIG5ldHdvcmsgZGV2aWNlcy4gVGh1cywgaWYgeW91IHdhbnQKK3RvIHN1Z2dlc3QgY2hhbmdlcyB0aGF0IGltcHJvdmUgdXNhYmlsaXR5IG9yIHBlcmZvcm1hbmNlIG9mIHRoZQoraW50ZXJmYWNlLCBwbGVhc2UgbGV0IG1lIGtub3cuIEknbSB3aWxsaW5nIHRvIGluY2x1ZGUgdGhlbSBpbiBmdXR1cmUKK3JlbGVhc2VzIChldmVuIGlmIEkgbmVlZGVkIHRvIGFkYXB0IHRoZSBjdXJyZW50IGlzZG4gY29kZSB0byB0aGUKK2NoYW5nZWQgaW50ZXJmYWNlKS4KKworCitXaHkgaXMgdGhpcyB1c2VmdWw/Cis9PT09PT09PT09PT09PT09PT09CisKK1RoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIHVzZWQgb24gdG9wIG9mIFdBTiBjb25uZWN0aW9ucyBvciBwZXJtYW5lbnQKK3BvaW50LXRvLXBvaW50IGxpbmtzIGFyZSBmcmVxdWVudGx5IGNob3NlbiB1cG9uIGJpbGF0ZXJhbCBhZ3JlZW1lbnQuCitUaHVzLCBhIGRldmljZSBkcml2ZXIgZm9yIGEgY2VydGFpbiB0eXBlIG9mIGhhcmR3YXJlIG11c3Qgc3VwcG9ydAorc2V2ZXJhbCBkaWZmZXJlbnQgZW5jYXBzdWxhdGlvbiBwcm90b2NvbHMgYXQgb25jZS4KKworVGhlIGlzZG4gZGV2aWNlIGRyaXZlciBkaWQgYWxyZWFkeSBzdXBwb3J0IHNldmVyYWwgZGlmZmVyZW50CitlbmNhcHN1bGF0aW9uIHByb3RvY29scy4gVGhlIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaXMgY29uZmlndXJlZCBieSBhCit1c2VyIHNwYWNlIHV0aWxpdHkgKGlzZG5jdHJsKS4gVGhlIGlzZG4gbmV0d29yayBpbnRlcmZhY2UgY29kZSB0aGVuCit1c2VzIHNldmVyYWwgY2FzZSBzdGF0ZW1lbnRzIHdoaWNoIHNlbGVjdCBhcHByb3ByaWF0ZSBhY3Rpb25zCitkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wuCisKK0luIGNvbnRyYXN0LCBMQU4gbmV0d29yayBpbnRlcmZhY2VzIGFsd2F5cyB1c2VkIGEgc2luZ2xlIGVuY2Fwc3VsYXRpb24KK3Byb3RvY29sIHdoaWNoIGlzIHVuaXF1ZSB0byB0aGUgaGFyZHdhcmUgdHlwZSBvZiB0aGUgaW50ZXJmYWNlLiBUaGUgTEFOCitlbmNhcHN1bGF0aW9uIGlzIHVzdWFsbHkgZG9uZSBieSBqdXN0IHN0aWNraW5nIGEgaGVhZGVyIG9uIHRoZSBkYXRhLiBUaHVzLAordHJhZGl0aW9uYWwgbGludXggbmV0d29yayBkZXZpY2UgZHJpdmVycyB1c2VkIHRvIHByb2Nlc3MgdGhlCitlbmNhcHN1bGF0aW9uIHByb3RvY29sIGRpcmVjdGx5ICh1c3VhbGx5IGJ5IGp1c3QgcHJvdmlkaW5nIGEgaGFyZF9oZWFkZXIoKQorbWV0aG9kIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlKSB1c2luZyBzb21lIGhhcmR3YXJlIHR5cGUgc3BlY2lmaWMgc3VwcG9ydAorZnVuY3Rpb25zLiBUaGlzIGlzIHNpbXBsZSwgZGlyZWN0IGFuZCBlZmZpY2llbnQuIEJ1dCBpdCBkb2Vzbid0IGZpdCBhbGwKK3RoZSByZXF1aXJlbWVudHMgZm9yIGNvbXBsZXggV0FOIGVuY2Fwc3VsYXRpb25zLiAKKworCisgICBUaGUgY29uZmlndXJhYmlsaXR5IG9mIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIHRvIGJlIHVzZWQKKyAgIG1ha2VzIGlzZG4gbmV0d29yayBpbnRlcmZhY2VzIG1vcmUgZmxleGlibGUsIGJ1dCBhbHNvIG11Y2ggbW9yZQorICAgY29tcGxleCB0aGFuIHRyYWRpdGlvbmFsIGxhbiBuZXR3b3JrIGludGVyZmFjZXMuCisKKworTWFueSBFbmNhcHN1bGF0aW9uIHByb3RvY29scyB1c2VkIG9uIHRvcCBvZiBXQU4gY29ubmVjdGlvbnMgd2lsbCBub3QganVzdAorc3RpY2sgYSBoZWFkZXIgb24gdGhlIGRhdGEuIFRoZXkgYWxzbyBtaWdodCBuZWVkIHRvIHNldCB1cCBvciByZWxlYXNlCit0aGUgV0FOIGNvbm5lY3Rpb24uIFRoZXkgYWxzbyBtaWdodCB3YW50IHRvIHNlbmQgb3RoZXIgZGF0YSBmb3IgdGhlaXIKK3ByaXZhdGUgcHVycG9zZSBvdmVyIHRoZSB3aXJlLCBlLmcuIHBwcCBkb2VzIGEgbG90IG9mIGxpbmsgbGV2ZWwKK25lZ290aWF0aW9uIGJlZm9yZSB0aGUgZmlyc3QgcGllY2Ugb2YgdXNlciBkYXRhIGNhbiBiZSB0cmFuc21pdHRlZC4KK1N1Y2ggZW5jYXBzdWxhdGlvbiBwcm90b2NvbHMgZm9yIFdBTiBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgbW9yZSBjb21wbGV4Cit0aGFuIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2xzIGZvciBsYW4gZGV2aWNlcy4gVGh1cywgbmV0d29yayBpbnRlcmZhY2UKK2NvZGUgZm9yIHR5cGljYWwgV0FOIGRldmljZXMgYWxzbyB0ZW5kcyB0byBiZSBtb3JlIGNvbXBsZXguCisKKworSW4gb3JkZXIgdG8gc3VwcG9ydCBMaW51eCcgeDI1IFBMUCBpbXBsZW1lbnRhdGlvbiBvbiB0b3Agb2YKK2lzZG4gbmV0d29yayBpbnRlcmZhY2VzIEkgY291bGQgaGF2ZSBpbnRyb2R1Y2VkIHlldCBhbm90aGVyIGJyYW5jaCB0bwordGhlIHZhcmlvdXMgY2FzZSBzdGF0ZW1lbnRzIGluc2lkZSBkcml2ZXJzL2lzZG4vaXNkbl9uZXQuYy4KK1RoaXMgZXZlbnR1YWxseSBtYWRlIGlzZG5fbmV0LmMgZXZlbiBtb3JlIGNvbXBsZXguIEluIGFkZGl0aW9uLCBpdCBtYWRlCitpc2RuX25ldC5jIGhhcmRlciB0byBtYWludGFpbi4gVGh1cywgYnkgaWRlbnRpZnlpbmcgYW4gYWJzdHJhY3QKK2ludGVyZmFjZSBiZXR3ZWVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjb2RlIGFuZCB0aGUgZW5jYXBzdWxhdGlvbgorcHJvdG9jb2wsIGNvbXBsZXhpdHkgY291bGQgYmUgcmVkdWNlZCBhbmQgbWFpbnRhaW5hYmlsaXR5IGNvdWxkIGJlCitpbmNyZWFzZWQuCisKKworTGlrZXdpc2UsIGEgc2ltaWxhciBlbmNhcHN1bGF0aW9uIHByb3RvY29sIHdpbGwgZnJlcXVlbnRseSBiZSBuZWVkZWQgYnkKK3NldmVyYWwgZGlmZmVyZW50IGludGVyZmFjZXMgb2YgZXZlbiBkaWZmZXJlbnQgaGFyZHdhcmUgdHlwZSwgZS5nLiB0aGUKK3N5bmNocm9ub3VzIHBwcCBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IHRoZSBpc2RuIGRyaXZlciBhbmQgdGhlCithc3luY2hyb25vdXMgcHBwIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgdGhlIHBwcCBkcml2ZXIgaGF2ZSBhIGxvdCBvZgorc2ltaWxhciBjb2RlIGluIHRoZW0uIEJ5IGNsZWFubHkgc2VwYXJhdGluZyB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbAorZnJvbSB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgaW50ZXJmYWNlIHN0dWZmIHN1Y2ggY29kZSBjb3VsZCBiZSBzaGFyZWQKK2JldHRlciBpbiBmdXR1cmUuCisKKworV2hlbiBvcGVyYXRpbmcgb3ZlciBkaWFsLXVwLWNvbm5lY3Rpb25zIChlLmcuIHRlbGVwaG9uZSBsaW5lcyB2aWEgbW9kZW0sCitub24tcGVybWFuZW50IHZpcnR1YWwgY2lyY3VpdHMgb2Ygd2lkZSBhcmVhIG5ldHdvcmtzLCBJU0ROKSBtYW55CitlbmNhcHN1bGF0aW9uIHByb3RvY29scyB3aWxsIG5lZWQgdG8gY29udHJvbCB0aGUgY29ubmVjdGlvbi4gVGhlcmVmb3JlLAorc29tZSBiYXNpYyBjb25uZWN0aW9uIGNvbnRyb2wgcHJpbWl0aXZlcyBhcmUgc3VwcG9ydGVkLiBUaGUgdHlwZSBhbmQKK3NlbWFudGljcyBvZiB0aGUgY29ubmVjdGlvbiAoaS5lIHRoZSBJU08gbGF5ZXIgd2hlcmUgY29ubmVjdGlvbiBzZXJ2aWNlCitpcyBwcm92aWRlZCkgaXMgb3V0c2lkZSBvdXIgc2NvcGUgYW5kIG1pZ2h0IGJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24KK3RoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIHVzZWQsIGUuZy4gZm9yIGEgcHBwIG1vZHVsZSB1c2luZyBvdXIgc2VydmljZQorb24gdG9wIG9mIGEgbW9kZW0gY29ubmVjdGlvbiBhIGNvbm5lY3RfcmVxdWVzdCB3aWxsIHJlc3VsdCBpbiBkaWFsaW5nCithIChzb21ld2hlcmUgZWxzZSBjb25maWd1cmVkKSByZW1vdGUgcGhvbmUgbnVtYmVyLiBGb3IgYW4gWDI1LWludGVyZmFjZQorbW9kdWxlIChMQVBCIHNlbWFudGljcywgYXMgZGVmaW5lZCBpbiBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dCkKK2EgY29ubmVjdF9yZXF1ZXN0IHdpbGwgYXNrIGZvciBlc3RhYmxpc2hpbmcgYSByZWxpYWJsZSBsYXBiCitkYXRhbGluayBjb25uZWN0aW9uLgorCisKK1RoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGN1cnJlbnRseSBwcm92aWRlcyB0aGUgZm9sbG93aW5nCitzZXJ2aWNlIHByaW1pdGl2ZXMgdG8gdGhlIG5ldHdvcmsgZGV2aWNlLgorCistIGNyZWF0ZSBhIG5ldyBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlCistIGRlbGV0ZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlIGFuZCBmcmVlIGFsbCBpdHMgcmVzb3VyY2VzCistIGluaXRpYWxpemUgKG9wZW4pIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlIGZvciB1c2UuCistIGRlYWN0aXZhdGUgKGNsb3NlKSBhbiBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGluc3RhbmNlLgorLSBwcm9jZXNzICh4bWl0KSBkYXRhIGhhbmRlZCBkb3duIGJ5IHVwcGVyIHByb3RvY29sIGxheWVyCistIHJlY2VpdmUgZGF0YSBmcm9tIGxvd2VyIChoYXJkd2FyZSkgbGF5ZXIKKy0gcHJvY2VzcyBjb25uZWN0IGluZGljYXRpb24gZnJvbSBsb3dlciAoaGFyZHdhcmUpIGxheWVyCistIHByb2Nlc3MgZGlzY29ubmVjdCBpbmRpY2F0aW9uIGZyb20gbG93ZXIgKGhhcmR3YXJlKSBsYXllcgorCisKK1RoZSBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXIgYWNjZXNzZXMgdGhvc2UgcHJpbWl0aXZlcyB2aWEgY2FsbGJhY2tzCitwcm92aWRlZCBieSB0aGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnN0YW5jZSB3aXRoaW4gYQorc3RydWN0IGNvbmNhcF9wcm90b19vcHMuCisKK3N0cnVjdCBjb25jYXBfcHJvdG9fb3BzeworCisJLyogY3JlYXRlIGEgbmV3IGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2Ugb2Ygc2FtZSB0eXBlICovCisJc3RydWN0IGNvbmNhcF9wcm90byAqICAoKnByb3RvX25ldykgKHZvaWQpOworCisJLyogZGVsZXRlIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2UgYW5kIGZyZWUgYWxsIGl0cyByZXNvdXJjZXMuCisJICAgY3Byb3QgbWF5IG5vIGxvZ2VyIGJlIHJlZmVyZW5jZWQgYWZ0ZXIgY2FsbGluZyB0aGlzICovCisJdm9pZCAoKnByb3RvX2RlbCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgcHJvdG9jb2wncyBkYXRhLiBUbyBiZSBjYWxsZWQgYXQgaW50ZXJmYWNlIHN0YXJ0dXAKKwkgICBvciB3aGVuIHRoZSBkZXZpY2UgZHJpdmVyIHJlc2V0cyB0aGUgaW50ZXJmYWNlLiBBbGwgc2VydmljZXMgb2YgdGhlCisJICAgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBtYXkgYmUgdXNlZCBhZnRlciB0aGlzKi8KKwlpbnQgKCpyZXN0YXJ0KShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJICAgICAgIHN0cnVjdCBjb25jYXBfZGV2aWNlX29wcyAqZG9wcyk7CisKKwkvKiBkZWFjdGl2YXRlIGFuIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgaW5zdGFuY2UuIFRoZSBlbmNhcHN1bGF0aW9uCisJICAgcHJvdG9jb2wgbWF5IG5vdCBjYWxsIGFueSAqZG9wcyBtZXRob2RzIGFmdGVyIHRoaXMuICovCisJaW50ICgqY2xvc2UpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90KTsKKworCS8qIHByb2Nlc3MgYSBmcmFtZSBoYW5kZWQgZG93biB0byB1cyBieSB1cHBlciBsYXllciAqLworCWludCAoKmVuY2FwX2FuZF94bWl0KShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggZGF0YSBlbnRpdHkgcmVjZWl2ZWQgZnJvbSBsb3dlciBsYXllciovIAorCWludCAoKmRhdGFfaW5kKShzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiB0byBiZSBjYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gd2FzIHNldCB1cC9kb3duLgorCSAgIFByb3RvY29scyB0aGF0IGRvbid0IHByb2Nlc3MgdGhlc2UgcHJpbWl0aXZlcyBtaWdodCBmaWxsIGluCisJICAgZHVtbXkgbWV0aG9kcyBoZXJlICovCisJaW50ICgqY29ubmVjdF9pbmQpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90KTsKKwlpbnQgKCpkaXNjb25uX2luZCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QpOworfTsKKworCitUaGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZSBpbmNsdWRlL2xpbnV4L2NvbmNhcC5oLgorCisKK0EgTmV0d29yayBpbnRlcmZhY2UgdXNpbmcgZW5jYXBzdWxhdGlvbiBwcm90b2NvbHMgbXVzdCBhbHNvIHByb3ZpZGUKK3NvbWUgc2VydmljZSBwcmltaXRpdmVzIHRvIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sOgorCistIHJlcXVlc3QgZGF0YSBiZWluZyBzdWJtaXR0ZWQgYnkgbG93ZXIgbGF5ZXIgKGRldmljZSBoYXJkd2FyZSkgCistIHJlcXVlc3QgYSBjb25uZWN0aW9uIGJlaW5nIHNldCB1cCBieSBsb3dlciBsYXllciAKKy0gcmVxdWVzdCBhIGNvbm5lY3Rpb24gYmVpbmcgcmVsZWFzZWQgYnkgbG93ZXIgbGF5ZXIKKworVGhlIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wgYWNjZXNzZXMgdGhvc2UgcHJpbWl0aXZlcyB2aWEgY2FsbGJhY2tzCitwcm92aWRlZCBieSB0aGUgbmV0d29yayBpbnRlcmZhY2Ugd2l0aGluIGEgc3RydWN0IGNvbmNhcF9kZXZpY2Vfb3BzLgorCitzdHJ1Y3QgY29uY2FwX2RldmljZV9vcHN7CisKKwkvKiB0byByZXF1ZXN0IGRhdGEgYmUgc3VibWl0dGVkIGJ5IGRldmljZSAqLyAKKwlpbnQgKCpkYXRhX3JlcSkoc3RydWN0IGNvbmNhcF9wcm90byAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKworCS8qIENvbnRyb2wgbWV0aG9kcyBtdXN0IGJlIHNldCB0byBOVUxMIGJ5IGRldmljZXMgd2hpY2ggZG8gbm90CisJICAgc3VwcG9ydCBjb25uZWN0aW9uIGNvbnRyb2wuICovCisJLyogdG8gcmVxdWVzdCBhIGNvbm5lY3Rpb24gYmUgc2V0IHVwICovIAorCWludCAoKmNvbm5lY3RfcmVxKShzdHJ1Y3QgY29uY2FwX3Byb3RvICopOworCisJLyogdG8gcmVxdWVzdCBhIGNvbm5lY3Rpb24gYmUgcmVsZWFzZWQgKi8KKwlpbnQgKCpkaXNjb25uX3JlcSkoc3RydWN0IGNvbmNhcF9wcm90byAqKTsJCit9OworCitUaGUgbmV0d29yayBpbnRlcmZhY2UgZG9lcyBub3QgZXhwbGljaXRseSBwcm92aWRlIGEgcmVjZWl2ZSBzZXJ2aWNlCitiZWNhdXNlIHRoZSBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGRpcmVjdGx5IGNhbGxzIG5ldGlmX3J4KCkuIAorCisKKworCitBbiBlbmNhcHN1bGF0aW9uIHByb3RvY29sIGl0c2VsZiBpcyBhY3R1YWxseSB0aGUKK3N0cnVjdCBjb25jYXBfcHJvdG97CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7CQkvKiBuZXQgZGV2aWNlIHVzaW5nIG91ciBzZXJ2aWNlICAqLworCXN0cnVjdCBjb25jYXBfZGV2aWNlX29wcyAqZG9wczsgLyogY2FsbGJhY2tzIHByb3ZpZGVkIGJ5IGRldmljZSAqLworIAlzdHJ1Y3QgY29uY2FwX3Byb3RvX29wcyAgKnBvcHM7IC8qIGNhbGxiYWNrcyBwcm92aWRlZCBieSB1cyAqLworCWludCBmbGFnczsKKwl2b2lkICpwcm90b19kYXRhOyAgICAgICAgICAgICAgIC8qIHByb3RvY29sIHNwZWNpZmljIHByaXZhdGUgZGF0YSwgdG8KKwkJCQkJICAgYmUgYWNjZXNzZWQgdmlhICpwb3BzIG1ldGhvZHMgb25seSovCisJLyoKKwkgIDoKKwkgIHdoYXRldmVyIAorCSAgOgorCSAgKi8KK307CisKK01vc3Qgb2YgdGhpcyBpcyBmaWxsZWQgaW4gd2hlbiB0aGUgZGV2aWNlIHJlcXVlc3RzIHRoZSBwcm90b2NvbCB0byAKK2JlIHJlc2V0IChvcGVuZCkuIFRoZSBuZXR3b3JrIGludGVyZmFjZSBtdXN0IHByb3ZpZGUgdGhlIG5ldF9kZXYgYW5kCitkb3BzIHBvaW50ZXJzLiBPdGhlciBjb25jYXBfcHJvdG8gbWVtYmVycyBzaG91bGQgYmUgY29uc2lkZXJlZCBwcml2YXRlCitkYXRhIHRoYXQgYXJlIG9ubHkgYWNjZXNzZWQgYnkgdGhlIHBvcHMgY2FsbGJhY2sgZnVuY3Rpb25zLiBMaWtld2lzZSwKK2EgY29uY2FwIHByb3RvIHNob3VsZCBhY2Nlc3MgdGhlIG5ldHdvcmsgZGV2aWNlJ3MgcHJpdmF0ZSBkYXRhCitvbmx5IGJ5IG1lYW5zIG9mIHRoZSBjYWxsYmFja3MgcmVmZXJyZWQgdG8gYnkgdGhlIGRvcHMgcG9pbnRlci4KKworCitBIHBvc3NpYmxlIGV4dGVuZGVkIGRldmljZSBzdHJ1Y3R1cmUgd2hpY2ggdXNlcyB0aGUgY29ubmVjdGlvbiBjb250cm9sbGluZworZW5jYXBzdWxhdGlvbiBzZXJ2aWNlcyBjb3VsZCBsb29rIGxpa2UgdGhpczoKKworc3RydWN0IGNvbmNhcF9kZXZpY2V7CisJc3RydWN0IG5ldF9kZXZpY2UgbmV0X2RldjsKKwlzdHJ1Y3QgbXlfcHJpdiAgLyogZGV2aWNlLT5sb2NhbCBzdHVmZiAqLworCQkJLyogdGhlIG15X3ByaXYgc3RydWN0IG1pZ2h0IGNvbnRhaW4gYSAKKwkJCSAgIHN0cnVjdCBjb25jYXBfZGV2aWNlX29wcyAqZG9wczsKKwkgICAgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB0aGUgZGV2aWNlIHNwZWNpZmljIGNhbGxiYWNrcworCQkJKi8KKwlzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdDsgICAgICAgIC8qIGNhbGxiYWNrcyBwcm92aWRlZCBieSBwcm90b2NvbCAqLworfTsKKworCisKK01pc2MgVGhvdWdodHMKKz09PT09PT09PT09PT0KKworVGhlIGNvbmNlcHQgb2YgdGhlIGNvbmNhcCBwcm90byBtaWdodCBoZWxwIHRvIHJldXNlIHByb3RvY29sIGNvZGUgYW5kCityZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgY2VydGFpbiBuZXR3b3JrIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbnMuCitUaGUgdHJhZGUgb2ZmIGlzIHRoYXQgaXQgaW50cm9kdWNlcyB5ZXQgYW5vdGhlciBwcm9jZWR1cmUgY2FsbCBsYXllcgord2hlbiBwcm9jZXNzaW5nIHRoZSBwcm90b2NvbC4gVGhpcyBoYXMgb2YgY291cnNlIHNvbWUgaW1wYWN0IG9uCitwZXJmb3JtYW5jZS4gSG93ZXZlciwgdHlwaWNhbGx5IHRoZSBjb25jYXAgaW50ZXJmYWNlIHdpbGwgYmUgdXNlZCBieQorZGV2aWNlcyBhdHRhY2hlZCB0byBzbG93IGxpbmVzIChsaWtlIHRlbGVwaG9uZSwgaXNkbiwgbGVhc2VkIHN5bmNocm9ub3VzCitsaW5lcykuIEZvciBzdWNoIHNsb3cgbGluZXMsIHRoZSBvdmVyaGVhZCBpcyBwcm9iYWJseSBuZWdsaWdpYmxlLgorVGhpcyBtaWdodCBubyBsb25nZXIgaG9sZCBmb3IgY2VydGFpbiBoaWdoIHNwZWVkIFdBTiBsaW5rcyAobGlrZQorQVRNKS4KKworCitJZiBnZW5lcmFsIGxpbnV4IG5ldHdvcmsgaW50ZXJmYWNlcyBleHBsaWNpdGx5IHN1cHBvcnRlZCBjb25jYXAKK3Byb3RvY29scyAoZS5nLiBieSBhIG1lbWJlciBzdHJ1Y3QgY29uY2FwX3Byb3RvKiBpbiBzdHJ1Y3QgbmV0X2RldmljZSkKK3RoZW4gdGhlIGludGVyZmFjZSBvZiB0aGUgc2VydmljZSBmdW5jdGlvbiBjb3VsZCBiZSBjaGFuZ2VkCitieSBwYXNzaW5nIGEgcG9pbnRlciBvZiB0eXBlIChzdHJ1Y3QgbmV0X2RldmljZSopIGluc3RlYWQgb2YKK3R5cGUgKHN0cnVjdCBjb25jYXBfcHJvdG8qKS4gRG9pbmcgc28gd291bGQgbWFrZSBtYW55IG9mIHRoZSBzZXJ2aWNlCitmdW5jdGlvbnMgY29tcGF0aWJsZSB0byBuZXR3b3JrIGRldmljZSBzdXBwb3J0IGZ1bmN0aW9ucy4KKworZS5nLiBpbnN0ZWFkIG9mIHRoZSBjb25jYXAgcHJvdG9jb2wncyBzZXJ2aWNlIGZ1bmN0aW9uCisKKyAgaW50ICgqZW5jYXBfYW5kX3htaXQpKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKword2UgY291bGQgaGF2ZQorCisgIGludCAoKmVuY2FwX2FuZF94bWl0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK0FzIHRoaXMgaXMgY29tcGF0aWJsZSB0byB0aGUgZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSBtZXRob2QsIHRoZSBkZXZpY2UKK2RyaXZlciBjb3VsZCBkaXJlY3RseSByZWdpc3RlciB0aGUgY29uY2FwIHByb3RvY29sJ3MgZW5jYXBfYW5kX3htaXQoKQorZnVuY3Rpb24gYXMgaXRzIGhhcmRfc3RhcnRfeG1pdCgpIG1ldGhvZC4gVGhpcyB3b3VsZCBlbGltaW5hdGUgb25lCitwcm9jZWR1cmUgY2FsbCBsYXllci4KKworCitUaGUgZGV2aWNlJ3MgZGF0YSByZXF1ZXN0IGZ1bmN0aW9uIGNvdWxkIGFsc28gYmUgZGVmaW5lZCBhcworIAorICBpbnQgKCpkYXRhX3JlcSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCitUaGlzIG1pZ2h0IGV2ZW4gYWxsb3cgZm9yIHNvbWUgcHJvdG9jb2wgc3RhY2tpbmcuIEFuZCB0aGUgbmV0d29yaworaW50ZXJmYWNlIG1pZ2h0IGV2ZW4gcmVnaXN0ZXIgdGhlIHNhbWUgZGF0YV9yZXEoKSBmdW5jdGlvbiBkaXJlY3RseQorYXMgaXRzIGhhcmRfc3RhcnRfeG1pdCgpIG1ldGhvZCB3aGVuIGEgemVybyBsYXllciBlbmNhcHN1bGF0aW9uCitwcm90b2NvbCBpcyBjb25maWd1cmVkLiBUaHVzLCBlbGltaW5hdGluZyB0aGUgcGVyZm9ybWFuY2UgcGVuYWx0eQorb2YgdGhlIGNvbmNhcCBpbnRlcmZhY2Ugd2hlbiBhIHRyaXZpYWwgY29uY2FwIHByb3RvY29sIGlzIHVzZWQuCitOZXZlcnRoZWxlc3MsIHRoZSBkZXZpY2UgcmVtYWlucyBhYmxlIHRvIHN1cHBvcnQgZW5jYXBzdWxhdGlvbgorcHJvdG9jb2wgY29uZmlndXJhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5kaXZlcnNpb24gYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmRpdmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRjZDVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5kaXZlcnNpb24KQEAgLTAsMCArMSwxMjcgQEAKK1RoZSBpc2RuIGRpdmVyc2lvbiBzZXJ2aWNlcyBhcmUgYSBzdXBwb3J0aW5nIG1vZHVsZSB3b3JraW5nIHRvZ2V0aGVyIHdpdGgKK3RoZSBpc2RuNGxpbnV4IGFuZCB0aGUgSGlTYXggbW9kdWxlIGZvciBwYXNzaXZlIGNhcmRzLiAKK0FjdGl2ZSBjYXJkcywgVEFzIGFuZCBjYXJkcyB1c2luZyBhIG93biBvciBvdGhlciBkcml2ZXIgdGhhbiB0aGUgSGlTYXggCittb2R1bGUgbmVlZCB0byBiZSBhZGFwdGVkIHRvIHRoZSBITDwtPkxMIGludGVyZmFjZSBkZXNjcmliZWQgaW4gYSBzZXBhcmF0ZSAKK2RvY3VtZW50LiBUaGUgZGl2ZXJzaW9uIHNlcnZpY2VzIG1heSBiZSB1c2VkIHdpdGggYWxsIGNhcmRzIHN1cHBvcnRlZCBieSAKK3RoZSBIaVNheCBkcml2ZXIuCitUaGUgZGl2ZXJzaW9uIGtlcm5lbCBpbnRlcmZhY2UgYW5kIGNvbnRyb2xsaW5nIHRvb2wgZGl2ZXJ0Y3RybCB3ZXJlIHdyaXR0ZW4KK2J5IFdlcm5lciBDb3JuZWxpdXMgKHdlcm5lckBpc2RuNGxpbnV4LmRlIG9yIHdlcm5lckB0aXRyby5kZSkgdW5kZXIgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitUYWJsZSBvZiBjb250ZW50cworPT09PT09PT09PT09PT09PT0KKworMS4gRmVhdHVyZXMgb2YgdGhlIGk0bCBkaXZlcnNpb24gc2VydmljZXMgCisgICAoT3Igd2hhdCBjYW4gdGhlIGk0bCBkaXZlcnNpb24gc2VydmljZXMgZG8gZm9yIG1lKQorCisyLiBSZXF1aXJlZCBoYXJkLSBhbmQgc29mdHdhcmUKKworMy4gQ29tcGlsaW5nLCBpbnN0YWxsaW5nIGFuZCBsb2FkaW5nL3VubG9hZGluZyB0aGUgbW9kdWxlICAKKyAgIFRyYWNpbmcgY2FsbGluZyBhbmQgZGl2ZXJzaW9uIGluZm9ybWF0aW9uIAorCis0LiBUcmFjaW5nIGNhbGxpbmcgYW5kIGRpdmVyc2lvbiBpbmZvcm1hdGlvbgorIAorNS4gRm9ybWF0IG9mIHRoZSBkaXZlcnQgZGV2aWNlIEFTQ0lJIG91dHB1dAorIAorCisxLiBGZWF0dXJlcyBvZiB0aGUgaTRsIGRpdmVyc2lvbiBzZXJ2aWNlcyAKKyAgIChPciB3aGF0IGNhbiB0aGUgaTRsIGRpdmVyc2lvbiBzZXJ2aWNlcyBkbyBmb3IgbWUpCisKKyAgIFRoZSBpNGwgZGl2ZXJzaW9uIHNlcnZpY2VzIG9mZmVycyBjYWxsIGZvcndhcmRpbmcgYW5kIGxvZ2dpbmcgbm9ybWFsbHkgCisgICBvbmx5IHN1cHBvcnRlZCBieSBpc2RuIHBob25lcy4gSW5jb21pbmcgY2FsbHMgbWF5IGJlIGRpdmVydGVkIAorICAgdW5jb25kaXRpb25hbGx5IChDRlUpLCB3aGVuIG5vdCByZWFjaGFibGUgKENGTlIpIG9yIG9uIGJ1c3kgY29uZGl0aW9uIAorICAgKENGQikuIAorICAgVGhlIGRpdmVyc2lvbnMgbWF5IGJlIGludm9rZWQgc3RhdGljYWxseSBpbiB0aGUgcHJvdmlkZXJzIGV4Y2hhbmdlCisgICBhcyBub3JtYWxseSBkb25lIGJ5IGlzZG4gcGhvbmVzLiBJbiB0aGlzIGNhc2UgYWxsIGluY29taW5nIGNhbGxzCisgICB3aXRoIGEgc3BlY2lhbCAob3IgYWxsKSBzZXJ2aWNlIGlkZW50aWZpZXJzIGFyZSBmb3J3YXJkZWQgaWYgdGhlIAorICAgZm9yd2FyZGluZyByZWFzb24gaXMgbWV0LiBBY3RpdmF0ZWQgc3RhdGljIHNlcnZpY2VzIG1heSBhbHNvIGJlIAorICAgaW50ZXJyb2dhdGVkIChxdWVyaWVkKS4KKyAgIFRoZSBpNGwgZGl2ZXJzaW9uIHNlcnZpY2VzIGFkZGl0aW9uYWxseSBvZmZlcnMgYSBkeW5hbWljIHZlcnNpb24gb2YKKyAgIGNhbGwgZm9yd2FyZGluZyB3aGljaCBpcyBub3QgcHJlcHJvZ3JhbW1lZCBpbnNpZGUgdGhlIHByb3ZpZGVycyBleGNoYW5nZQorICAgYnV0IGR5bmFtaWNhbGx5IGFjdGl2YXRlZCBieSBpNGwuCisgICBJbiB0aGlzIGNhc2UgYWxsIGluY29taW5nIGNhbGxzIGFyZSBjaGVja2VkIGJ5IHJ1bGVzIHRoYXQgbWF5IGJlCisgICBjb21wYXJlZCB0byB0aGUgbWVjaGFuaXNtIG9mIGlwZndhZG0gb3IgaXBjaGFpbnMuIElmIGEgZ2l2ZW4gcnVsZSBtYXRjaGVzCisgICB0aGUgY2hlY2tpbmcgcHJvY2VzcyBpcyBmaW5pc2hlZCBhbmQgdGhlIHJ1bGUgbWF0Y2hpbmcgd2lsbCBiZSBhcHBsaWVkCisgICB0byB0aGUgY2FsbC4KKyAgIFRoZSBydWxlcyBpbmNsdWRlIHByaW1hcnkgYW5kIHNlY29uZGFyeSBzZXJ2aWNlIGlkZW50aWZpZXJzLCBjYWxsZWQgCisgICBudW1iZXIgYW5kIHN1YmFkZHJlc3MsIGNhbGxlcnMgbnVtYmVyIGFuZCBzdWJhZGRyZXNzIGFuZCB3aGV0aGVyIHRoZSBydWxlCisgICBtYXRjaGVzIHRvIGFsbCBmaWx0ZXJlZCBjYWxscyBvciBvbmx5IHRob3NlIHdoZW4gYWxsIEItY2hhbm5lbCByZXNvdXJjZXMKKyAgIGFyZSBleGhhdXN0ZWQuCisgICBBY3Rpb25zIHRoYXQgbWF5IGJlIGludm9rZWQgYnkgYSBydWxlIGFyZSBpZ25vcmUsIHByb2NlZWQsIHJlamVjdCwgCisgICBkaXJlY3QgZGl2ZXJ0IG9yIGRlbGF5ZWQgZGl2ZXJ0IG9mIGEgY2FsbC4KKyAgIEFsbCBpbmNvbWluZyBjYWxscyBtYXRjaGluZyBhIHJ1bGUgZXhjZXB0IHRoZSBpZ25vcmUgcnVsZSBhIHJlcG9ydGVkIGFuZAorICAgbG9nZ2VkIGFzIEFTQ0lJIHZpYSB0aGUgcHJvYyBmaWxlc3lzdGVtICgvcHJvYy9uZXQvaXNkbi9kaXZlcnQpLiBJZiBwcm9jZWVkCisgICBpcyBzZWxlY3RlZCB0aGUgY2FsbCB3aWxsIGJlIGhlbGQgaW4gYSBwcm9jZWVkaW5nIHN0YXRlICh3aXRob3V0IHJpbmdpbmcpCisgICBmb3IgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lIHRvIGxldCBhbiBleHRlcm5hbCBwcm9ncmFtIG9yIGNsaWVudCBkZWNpZGUKKyAgIGhvdyB0byBoYW5kbGUgdGhlIGNhbGwuIAorICAgICAgICAgICAgCisKKzIuIFJlcXVpcmVkIGhhcmQtIGFuZCBzb2Z0d2FyZQorICAgCisgICBGb3IgdXNpbmcgdGhlIGk0bCBkaXZlcnNpb24gc2VydmljZXMgdGhlIGlzZG4gbGluZSBtdXN0IGJlIG9mIGEgRVVSTy9EU1MxCisgICB0eXBlLiBBZGRpdGlvbmFsbHkgdGhlIGk0bCBzZXJ2aWNlcyBvbmx5IHdvcmsgdG9nZXRoZXIgd2l0aCB0aGUgSGlTYXggCisgICBkcml2ZXIgZm9yIHBhc3NpdmUgaXNkbiBjYXJkcy4gQWxsIEhpU2F4IHN1cHBvcnRlZCBjYXJkcyBtYXkgYmUgdXNlZCBmb3IKKyAgIHRoZSBkaXZlcnNpb24gcHVycG9zZXMuCisgICBUaGUgc3RhdGljIGRpdmVyc2lvbiBzZXJ2aWNlcyByZXF1aXJlIHRoZSBwcm92aWRlciBoYXZpbmcgc3RhdGljIHNlcnZpY2VzCisgICBDRlUsIENGTlIsIENGQiBhY3RpdmF0ZWQgb24gYW4gTVNOLWxpbmUuIFRoZSBzdGF0aWMgc2VydmljZXMgbWF5IG5vdCBiZSAKKyAgIHVzZWQgb24gYSBwb2ludC10by1wb2ludCBjb25uZWN0aW9uLiBGdXJ0aGVyIHRoZSBzdGF0aWMgc2VydmljZXMgYXJlIG9ubHkKKyAgIGF2YWlsYWJsZSBpbiBzb21lIGNvdW50cmllcyAoZm9yIGV4YW1wbGUgZ2VybWFueSkuIENvdW50cmllcyByZXF1aXJpbmcgdGhlIAorICAga2V5cGFkIHByb3RvY29sIGZvciBhY3RpdmF0aW5nIHN0YXRpYyBkaXZlcnNpb25zIChsaWtlIHRoZSBuZXRoZXJsYW5kcykgYXJlCisgICBub3Qgc3VwcG9ydGVkIGJ1dCBtYXkgdXNlIHRoZSB0dHkgZGV2aWNlcyBmb3IgdGhpcyBwdXJwb3NlLgorICAgVGhlIGR5bmFtaWMgZGl2ZXJzaW9uIHNlcnZpY2VzIG1heSBiZSB1c2VkIGluIGFsbCBjb3VudHJpZXMgaWYgdGhlIHByb3ZpZGVyCisgICBlbmFibGVzIHRoZSBmZWF0dXJlIENGIChjYWxsIGZvcndhcmRpbmcpLiBUaGlzIHNob3VsZCB3b3JrIG9uIGJvdGggTVNOLSBhbmQKKyAgIHBvaW50LXRvLXBvaW50IGxpbmVzLgorICAgVG8gYWRkIGFuZCBkZWxldGUgcnVsZXMgdGhlIGFkZGl0aW9uYWwgZGl2ZXJ0Y3RybCBwcm9ncmFtIGlzIG5lZWRlZC4gVGhpcworICAgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBpc2RuNGt1dGlscyBwYWNrYWdlLiAgIAorCiszLiBDb21waWxpbmcsIGluc3RhbGxpbmcgYW5kIGxvYWRpbmcvdW5sb2FkaW5nIHRoZSBtb2R1bGUgIAorICAgVHJhY2luZyBjYWxsaW5nIGFuZCBkaXZlcnNpb24gaW5mb3JtYXRpb24gCisKKworICAgVG8gY29tcGlsZSB0aGUgaTRsIGNvZGUgd2l0aCBkaXZlcnNpb24gc3VwcG9ydCB5b3UgbmVlZCB0byBzYXkgeWVzIHRvIHRoZSAKKyAgIERTUzEgZGl2ZXJzaW9uIHNlcnZpY2VzIHdoZW4gc2VsZWN0aW5nIHRoZSBpNGwgb3B0aW9ucyBpbiB0aGUga2VybmVsIAorICAgY29uZmlnIChtZW51Y29uZmlnIG9yIGNvbmZpZykuCisgICBBZnRlciBoYXZpbmcgcHJvcGVybHkgYWN0aXZhdGVkIGEgbWFrZSBtb2R1bGVzIGFuZCBtYWtlIG1vZHVsZXNfaW5zdGFsbCBhbGwKKyAgIHJlcXVpcmVkIG1vZHVsZXMgd2lsbCBiZSBjb3JyZWN0bHkgaW5zdGFsbGVkIGluIHRoZSBuZWVkZWQgbW9kdWxlcyBkaXJzLgorICAgQXMgdGhlIGRpdmVyc2lvbiBzZXJ2aWNlcyBhcmUgY3VycmVudGx5IG5vdCBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0cyBvZiBtb3N0CisgICBzdGFuZGFyZCBkaXN0cmlidXRpb25zIHlvdSB3aWxsIGhhdmUgdG8gYWRkIGEgImluc21vZCBkc3MxX2RpdmVydCIgYWZ0ZXIKKyAgIGhhdmluZyBsb2FkZWQgdGhlIGdsb2JhbCBpc2RuIG1vZHVsZS4KKyAgIFRoZSBtb2R1bGUgY2FuIGJlIGxvYWRlZCB3aXRob3V0IGFueSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycy4KKyAgIElmIHRoZSBtb2R1bGUgaXMgYWN0dWFsbHkgbG9hZGVkIGFuZCBhY3RpdmUgbWF5IGJlIGNoZWNrZWQgd2l0aCBhIAorICAgImNhdCAvcHJvYy9tb2R1bGVzIiBvciAibHMgL3Byb2MvbmV0L2lzZG4vZGl2ZXJ0Ii4gVGhlIGRpdmVydCBmaWxlIGlzIAorICAgZHluYW1pY2FsbHkgY3JlYXRlZCBieSB0aGUgZGl2ZXJzaW9uIG1vZHVsZSBhbmQgcmVtb3ZlZCB3aGVuIHRoZSBtb2R1bGUgaXMKKyAgIHVubG9hZGVkLgorCisKKzQuIFRyYWNpbmcgY2FsbGluZyBhbmQgZGl2ZXJzaW9uIGluZm9ybWF0aW9uCisgCisgICBZb3UgYWxzbyBtYXkgcHV0IGEgImNhdCAvcHJvYy9uZXQvaXNkbi9kaXZlcnQiIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGggdGhlCisgICBvdXRwdXQgcmVkaXJlY3RlZCB0byBhIGZpbGUuIFRoZW4gYWxsIGFjdGlvbnMgb2YgdGhlIG1vZHVsZSBhcmUgbG9nZ2VkLgorICAgVGhlIGRpdmVydCBmaWxlIGluIHRoZSBwcm9jIHN5c3RlbSBtYXkgYmUgb3BlbmVkIG1vcmUgdGhhbiBvbmNlLCBzbyBpbiAKKyAgIGNvbmp1bmN0aW9uIHdpdGggaW5ldGQgYW5kIGEgc21hbGwgcmVtb3RlIGNsaWVudCBvbiBvdGhlciBtYWNoaW5lcyBpbnNpZGUKKyAgIHlvdXIgbmV0d29yayBpbmNvbWluZyBjYWxscyBhbmQgcmVhY3Rpb25zIGJ5IHRoZSBtb2R1bGUgbWF5IGJlIHNob3duIG9uIAorICAgZXZlcnkgbGlzdGVuaW5nIG1hY2hpbmUuIAorICAgSWYgYSBjYWxsIGlzIHJlcG9ydGVkIGFzIHByb2NlZWRpbmcgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBvciBjbGllbnQgbWF5IAorICAgc3BlY2lmeSBkdXJpbmcgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lIChub3JtYWxseSA0IHRvIDEwIHNlY29uZHMpIHdoYXQKKyAgIHRvIGRvIHdpdGggdGhhdCBjYWxsLiAgICAgIAorICAgVG8gdW5sb2FkIHRoZSBtb2R1bGUgYWxsIG9wZW4gZmlsZXMgdG8gdGhlIGRldmljZSBpbiB0aGUgcHJvYyBzeXN0ZW0gbXVzdAorICAgYmUgY2xvc2VkLiBPdGhlcndpc2UgdGhlIG1vZHVsZSAoYW5kIGlzZG4ubykgbWF5IG5vdCBiZSB1bmxvYWRlZC4gCisKKzUuIEZvcm1hdCBvZiB0aGUgZGl2ZXJ0IGRldmljZSBBU0NJSSBvdXRwdXQKKyAKKyAgIFRvIGJlIGRvbmUgbGF0ZXIKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5mYXggYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmZheApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzE0OTU4YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZmF4CkBAIC0wLDAgKzEsNDUgQEAKKworRmF4IHdpdGggaXNkbjRsaW51eAorPT09PT09PT09PT09PT09PT09PQorCitXaGVuIGVuYWJsZWQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGUgdHR5IGVtdWxhdG9yCitvZiB0aGUgSVNETiBzdWJzeXN0ZW0gaXMgY2FwYWJsZSBvZiB0aGUgRmF4IENsYXNzIDIgY29tbWFuZHMuCisKK1RoaXMgb25seSBtYWtlcyBzZW5zZSB1bmRlciB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgOgorCistIFlvdSBuZWVkIHRoZSBjb21tYW5kcyBhcyBkdW1teSwgYmVjYXVzZSB5b3UgYXJlIHVzaW5nCisgIGh5bGFmYXggKHdpdGggcGF0Y2gpIGZvciBBVk0gY2FwaS4KKy0gWW91IHdhbnQgdG8gdXNlIHRoZSBmYXggY2FwYWJpbGl0aWVzIG9mIHlvdXIgaXNkbi1jYXJkLgorICAoc3VwcG9ydGVkIGNhcmRzIGFyZSBsaXN0ZWQgYmVsb3cpCisKKworTk9URTogVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzICpub3QqIHN1cHBvcnQgZmF4IHdpdGggcGFzc2l2ZQorICAgICAgSVNETi1jYXJkcyAoa25vd24gYXMgc29mdGZheCkuIFRoZSBsb3ctbGV2ZWwgZHJpdmVyIG9mCisgICAgICB0aGUgSVNETi1jYXJkIGFuZC9vciB0aGUgY2FyZCBpdHNlbGYgbXVzdCBzdXBwb3J0IHRoaXMuCisKKworU3VwcG9ydGVkIElTRE4tQ2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VpY29uIERJVkEgU2VydmVyIEJSSS9QQ0kKKwktIGZ1bGwgc3VwcG9ydCB3aXRoIGJvdGggQi1jaGFubmVscy4KKworRWljb24gRElWQSBTZXJ2ZXIgNEJSSS9QQ0kKKwktIGZ1bGwgc3VwcG9ydCB3aXRoIGFsbCBCLWNoYW5uZWxzLgorCitFaWNvbiBESVZBIFNlcnZlciBQUkkvUENJCisJLSBmdWxsIHN1cHBvcnQgb24gYW1vdW50IG9mIEItY2hhbm5lbHMKKwkJZGVwZW5kaW5nIG9uIERTUHMgb24gYm9hcmQuCisKKworCitUaGUgY29tbWFuZCBzZXQgaXMga25vd24gYXMgQ2xhc3MgMiAobm90IENsYXNzIDIuMCkgYW5kCitjYW4gYmUgYWN0aXZhdGVkIGJ5IEFUK0ZDTEFTUz0yCisKKworVGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBsaW5rLWxldmVsLW1vZHVsZSBhbmQgdGhlIGhhcmR3YXJlLWxldmVsIGRyaXZlcgoraXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlcyBJTlRFUkZBQ0UuZmF4IGFuZCBJTlRFUkZBQ0UuCisKK0FybWluCittYWNAbWVsd2FyZS5kZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmhmYy1wY2kgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmhmYy1wY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhNGVmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaGZjLXBjaQpAQCAtMCwwICsxLDQxIEBACitUaGUgZHJpdmVyIGZvciB0aGUgSEZDLVBDSSBhbmQgSEZDLVBDSS1BIGNoaXBzIGZyb20gQ0NEIG1heSBiZSB1c2VkCitmb3IgbWFueSBPRU0gY2FyZHMgdXNpbmcgdGhpcyBjaGlwcy4KK0FkZGl0aW9uYWxseSB0aGUgZHJpdmVyIGhhcyBhIHNwZWNpYWwgZmVhdHVyZSB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZQordG8gcmVhZCB0aGUgZWNoby1jaGFubmVsIG9mIHRoZSBpc2RuIGJ1cy4gU28gYWxsIGZyYW1lcyBpbiBib3RoIGRpcmVjdGlvbnMKK21heSBiZSBsb2dnZWQuCitXaGVuIHRoZSBlY2hvIGxvZ2dpbmcgZmVhdHVyZSBpcyB1c2VkIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIEItY2hhbm5lbHMKK2ZvciBhIEhGQy1QQ0kgY2FyZCBpcyByZWR1Y2VkIHRvIDEuIE9mIGNvdXJzZSB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgdG8KK3RoZSBjYXJkLCBub3QgdG8gdGhlIGlzZG4gbGluZS4KK1RvIGFjdGl2YXRlIHRoZSBlY2hvIG1vZGUgdGhlIGZvbGxvd2luZyBpb2N0bHMgbXVzdCBiZSBlbnRlcmVkOgorCitoaXNheGN0cmwgPGRyaXZlci9jYXJkbmFtZT4gMTAgMQorCitUaGlzIHJlZHVjZXMgdGhlIGF2YWlsYWJsZSBjaGFubmVscyB0byAxLiBUaGVyZSBtdXN0IG5vdCBiZSBvcGVuIGNvbm5lY3Rpb25zCit0aHJvdWdoIHRoaXMgY2FyZCB3aGVuIGVudGVyaW5nIHRoZSBjb21tYW5kLgorQW5kIHRoZW46CisKK2hpc2F4Y3RybCA8ZHJpdmVyL2NhcmRuYW1lPiAxMiAxCisKK1RoaXMgZW5hYmxlcyB0aGUgZWNobyBtb2RlLiBJZiBIZXggbG9nZ2luZyBpcyBhY3RpdmF0ZWQgdGhlIGlzZG5jdHJseCAKK2RldmljZXMgc2hvdyBhIG91dHB1dCB3aXRoIGEgbGluZSBiZWdpbm5pbmcgb2YgSEVYOiBmb3IgdGhlIHByb3ZpZGVycworZXhjaGFuZ2UgYW5kIEVDSE86IGZvciBpc2RuIGRldmljZXMgc2VuZGluZyB0byB0aGUgcHJvdmlkZXIuCisKK0lmIG1vcmUgdGhhbiBvbmUgSEZDLVBDSSBjYXJkcyBhcmUgaW5zdGFsbGVkLCBhIHNwZWNpZmljIGNhcmQgbWF5IGJlIHNlbGVjdGVkCithdCB0aGUgaGlzYXggbW9kdWxlIGxvYWQgY29tbWFuZCBsaW5lLiBTdXBwbHkgdGhlIGxvYWQgY29tbWFuZCB3aXRoIHRoZSBkZXNpcmVkCitJTy1hZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGNhcmQuIAorRXhhbXBsZToKK1RoZXJlIHRyZWUgY2FyZHMgaW5zdGFsbGVkIGluIHlvdXIgbWFjaGluZSBhdCBJTy1iYXNlIGFkZHJlc3NlcyAweGQwMDAsIDB4ZDQwMCAKK2FuZCAweGRjMDAKK0lmIHlvdSB3YW50IHRvIHVzZSB0aGUgY2FyZCBhdCAweGQ0MDAgc3RhbmRhbG9uZSB5b3Ugc2hvdWxkIHN1cHBseSB0aGUgaW5zbW9kCitvciBkZXBtb2Qgd2l0aCB0eXBlPTM1IGlvPTB4ZDQwMC4KK0lmIHlvdSB3YW50IHRvIHVzZSBhbGwgdGhyZWUgY2FyZHMsIGJ1dCB0aGUgb3JkZXIgbmVlZHMgdG8gYmUgYXQgMHhkYzAwLDB4ZDQwMCwKKzB4ZDAwMCB5b3UgbWF5IGdpdmUgdGhlIHBhcmFtZXRlcnMgdHlwZT0zNSwzNSwzNSBpbz0weGRjMDAsMHhkNDAwLDB4ZDAwIAorVGhlbiB0aGUgZGVzaXJlZCBjYXJkIHdpbGwgYmUgdGhlIGluaXRpYWxpc2VkIGluIHRoZSBkZXNpcmVkIG9yZGVyLgorSWYgdGhlIGlvIHBhcmFtZXRlciBpcyB1c2VkIHRoZSBpbyBhZGRyZXNzZXMgb2YgYWxsIHVzZWQgY2FyZHMgc2hvdWxkIGJlIAorc3VwcGxpZWQgZWxzZSB0aGUgcGFyYW1ldGVyIGlzIGFzc3VtZWQgMCBhbmQgYSBhdXRvIHNlYXJjaCBmb3IgYSBmcmVlIGNhcmQgaXMKK2ludm9rZWQgd2hpY2ggbWF5IG5vdCBnaXZlIHRoZSB3YW50ZWQgcmVzdWx0LiAKKworQ29tbWVudHMgYW5kIHJlcG9ydHMgdG8gd2VybmVyQGlzZG40bGludXguZGUgb3Igd2VybmVyQGlzZG4tZGV2ZWxvcG1lbnQuZGUKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaHlzZG4gYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmh5c2RuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2M1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmh5c2RuCkBAIC0wLDAgKzEsMTk1IEBACiskSWQ6IFJFQURNRS5oeXNkbix2IDEuMy42LjEgMjAwMS8wMi8xMCAxNDo0MToxOSBrYWkgRXhwICQKK1RoZSBoeXNkbiBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiBieQorYnkgV2VybmVyIENvcm5lbGl1cyAod2VybmVyQGlzZG40bGludXguZGUgb3Igd2VybmVyQHRpdHJvLmRlKSAKK2ZvciBIeXBlcmNvcGUgR21iSCBBYWNoZW4gR2VybWFueS4gSHlwZXJjb3BlIGFncmVlZCB0byBwdWJsaXNoIHRoaXMgZHJpdmVyCit1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoZSBDQVBJIDIuMC1zdXBwb3J0IHdhcyBhZGRlZCBieSBVbHJpY2ggQWxicmVjaHQgKHVhbGJyZWNodEBoeXBlcmNvcGUuZGUpCitmb3IgSHlwZXJjb3BlIEdtYkggQWFjaGVuLCBHZXJtYW55LgorCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworVGFibGUgb2YgY29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKzEuIEFib3V0IHRoZSBkcml2ZXIKKworMi4gTG9hZGluZy9VbmxvYWRpbmcgdGhlIGRyaXZlcgorCiszLiBFbnRyaWVzIGluIHRoZSAvcHJvYyBmaWxlc3lzdGVtCisKKzQuIFRoZSAvcHJvYy9uZXQvaHlzZG4vY2FyZGNvbmZYIGZpbGUKKworNS4gVGhlIC9wcm9jL25ldC9oeXNkbi9jYXJkbG9nWCBmaWxlCisKKzYuIFdoZXJlIHRvIGdldCBhZGRpdGlvbmFsIGluZm8gYW5kIGhlbHAKKworCisxLiBBYm91dCB0aGUgZHJpdmVyCisKKyAgIFRoZSBkcml2ZXJzL2lzZG4vaHlzZG4gc3ViZGlyIGNvbnRhaW5zIGEgZHJpdmVyIGZvciBIWVBFUkNPUEVzIGFjdGl2ZSAKKyAgIFBDSSBpc2RuIGNhcmRzIENoYW1wLCBFcmdvIGFuZCBNZXRyby4gVG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoaXMgY2FyZHMKKyAgIGVuYWJsZSBJU0ROIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBjb25maWcgYW5kIHN1cHBvcnQgZm9yIEhZU0ROIGNhcmRzIGluCisgICB0aGUgYWN0aXZlIGNhcmRzIHN1Ym1lbnUuIFRoZSBkcml2ZXIgbWF5IG9ubHkgYmUgY29tcGlsZWQgYW5kIHVzZWQgaWYgCisgICBzdXBwb3J0IGZvciBsb2FkYWJsZSBtb2R1bGVzIGFuZCB0aGUgcHJvY2VzcyBmaWxlc3lzdGVtIGhhdmUgYmVlbiBlbmFibGVkLgorCisgICBUaGVzZSBjYXJkcyBwcm92aWRlIHR3byBkaWZmZXJlbnQgaW50ZXJmYWNlcyB0byB0aGUga2VybmVsLiBXaXRob3V0IHRoZQorICAgb3B0aW9uYWwgQ0FQSSAyLjAgc3VwcG9ydCwgdGhleSByZWdpc3RlciBhcyBldGhlcm5ldCBjYXJkLiBJUC1yb3V0aW5nCisgICB0byBhIElTRE4tZGVzdGluYXRpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBjYXJkIGl0c2VsZi4gQWxsIG5lY2Vzc2FyeQorICAgaGFuZGxlcnMgZm9yIHZhcmlvdXMgcHJvdG9jb2xzIGxpa2UgcHBwIGFuZCBvdGhlcnMgYXMgd2VsbCBhcyBjb25maWcgaW5mbworICAgYW5kIGZpcm13YXJlIG1heSBiZSBmZXRjaGVkIGZyb20gSHlwZXJjb3BlcyBXV1ctU2l0ZSB3d3cuaHlwZXJjb3BlLmRlLgorCisgICBXaXRoIENBUEkgMi4wIHN1cHBvcnQgZW5hYmxlZCwgdGhlIGNhcmQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIENBUEkgMi4wIAorICAgY29tcGxpYW50IGRldmljZXMgd2l0aCBlaXRoZXIgQ0FQSSAyLjAgYXBwbGljYXRpb25zIAorICAgKGNoZWNrIGlzZG40ay11dGlscykgb3IgLXVzaW5nIHRoZSBjYXBpZHJ2IG1vZHVsZS0gYXMgYSByZWd1bGFyCisgICBpc2RuNGxpbnV4IGRldmljZS4gVGhpcyBpcyBkb25lIHZpYSB0aGUgc2FtZSBtZWNoYW5pc20gYXMgd2l0aCB0aGUgCisgICBhY3RpdmUgQVZNIGNhcmRzIGFuZCBpbiBmYWN0IHVzZXMgdGhlIHNhbWUgbW9kdWxlLgorICAgCisKKzIuIExvYWRpbmcvVW5sb2FkaW5nIHRoZSBkcml2ZXIKKworICAgVGhlIG1vZHVsZSBoYXMgbm8gY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgYW5kIGF1dG8gZGV0ZWN0cyB1cCB0byAxMCBjYXJkcworICAgaW4gdGhlIGlkLXJhbmdlIDAtOS4KKyAgIElmIGEgbG9hZGVkIGRyaXZlciBzaGFsbCBiZSB1bmxvYWRlZCBhbGwgb3BlbiBmaWxlcyBpbiB0aGUgL3Byb2MvbmV0L2h5c2RuCisgICBzdWJkaXIgbmVlZCB0byBiZSBjbG9zZWQgYW5kIGFsbCBldGhlcm5ldCBpbnRlcmZhY2VzIGFsbG9jYXRlZCBieSB0aGlzIAorICAgZHJpdmVyIG11c3QgYmUgc2h1dCBkb3duLiBPdGhlcndpc2UgdGhlIG1vZHVsZSBjb3VudGVyIHdpbGwgYXZvaWQgYSBtb2R1bGUKKyAgIHVubG9hZC4KKyAgIAorICAgSWYgeW91IGFyZSB1c2luZyB0aGUgQ0FQSSAyLjAtaW50ZXJmYWNlLCBtYWtlIHN1cmUgdG8gbG9hZC9tb2Rwcm9iZSB0aGUKKyAgIGtlcm5lbGNhcGktbW9kdWxlIGZpcnN0LgorCisgICBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIGNhcGlkcnYtbGluayB0byBpc2RuNGxpbnV4LCBtYWtlIHN1cmUgdG8gbG9hZAorICAgY2FwaWRydi5vIGFmdGVyIGFsbCBtb2R1bGVzIHVzaW5nIHRoaXMgZHJpdmVyIChpLmUuIGFmdGVyIGh5c2RuIGFuZAorICAgYW55IGF2bS1zcGVjaWZpYyBtb2R1bGVzKS4KKworMy4gRW50cmllcyBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbQorCisgICBXaGVuIHRoZSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkIGl0IGFkZHMgdGhlIGRpcmVjdG9yeSBoeXNkbiBpbiB0aGUgCisgICAvcHJvYy9uZXQgdHJlZS4gVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhY3RseSAyIGZpbGUgZW50cmllcyBmb3IgZWFjaCAKKyAgIGNhcmQuIE9uZSBpcyBjYWxsZWQgY2FyZGNvbmZYIGFuZCB0aGUgb3RoZXIgY2FyZGxvZ1gsIHdoZXJlIFggaXMgdGhlCisgICBjYXJkIGlkIG51bWJlciBmcm9tIDAgdG8gOS4gCisgICBUaGUgY2FyZHMgYXJlIG51bWJlcmVkIGluIHRoZSBvcmRlciBmb3VuZCBpbiB0aGUgUENJIGNvbmZpZyBkYXRhLgorCis0LiBUaGUgL3Byb2MvbmV0L2h5c2RuL2NhcmRjb25mWCBmaWxlCisKKyAgIFRoaXMgZmlsZSBtYXkgYmUgcmVhZCB0byBnZXQgYnkgZXZlcnlvbmUgdG8gZ2V0IGluZm8gYWJvdXQgdGhlIGNhcmRzIHR5cGUsIAorICAgYWN0dWFsIHN0YXRlLCBhdmFpbGFibGUgZmVhdHVyZXMgYW5kIHVzZWQgcmVzb3VyY2VzLgorICAgVGhlIGZpcnN0IDMgZW50cmllcyAoaWQsIGJ1cyBhbmQgc2xvdCkgYXJlIFBDSSBpbmZvIGZpZWxkcywgdGhlIGZvbGxvd2luZworICAgdHlwZSBmaWVsZCBnaXZlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcmRzIHR5cGU6CisKKyAgIDQgLT4gRXJnbyBjYXJkIChzZXJ2ZXIgY2FyZCB3aXRoIDIgYi1jaGFucykKKyAgIDUgLT4gTWV0cm8gY2FyZCAoc2VydmVyIGNhcmQgd2l0aCA0IG9yIDggYi1jaGFucykKKyAgIDYgLT4gQ2hhbXAgY2FyZCAoY2xpZW50IGNhcmQgd2l0aCAyIGItY2hhbnMpICAgCisKKyAgIFRoZSBmb2xsb3dpbmcgMyBmaWVsZHMgc2hvdyB0aGUgaGFyZHdhcmUgYXNzaWdubWVudHMgZm9yIGlycSwgaW9iYXNlIGFuZCB0aGUKKyAgIGR1YWwgcG9ydGVkIG1lbW9yeSAoZHAtbWVtKS4KKyAgIFRoZSBmaWVsZHMgYi1jaGFucyBhbmQgZmF4LWNoYW5zIGFubm91bmNlIHRoZSBhdmFpbGFibGUgY2FyZCByZXNvdXJjZXMgb2YKKyAgIHRoaXMgdHlwZXMgZm9yIHRoZSB1c2VyLgorICAgVGhlIHN0YXRlIHZhcmlhYmxlIGluZGljYXRlcyB0aGUgYWN0dWFsIGRyaXZlcnMgc3RhdGUgZm9yIHRoaXMgY2FyZCB3aXRoIHRoZQorICAgZm9sbG93aW5nIGFzc2lnbm1lbnRzLgorCisgICAwIC0+IGNhcmQgaGFzIG5vdCBiZWVuIGJvb3RlZCBzaW5jZSBkcml2ZXIgbG9hZAorICAgMSAtPiBjYXJkIGJvb3RpbmcgaXMgYWN0dWFsbHkgaW4gcHJvZ2VzcworICAgMiAtPiBjYXJkIGlzIGluIGFuIGVycm9yIHN0YXRlIGR1ZSB0byBhIHByZXZpb3VzIGJvb3QgZmFpbHVyZQorICAgMyAtPiBjYXJkIGlzIGJvb3RlZCBhbmQgYWN0aXZlCisKKyAgIEFuZCB0aGUgbGFzdCBmaWVsZCAoZGV2aWNlKSBzaG93cyB0aGUgbmFtZSBvZiB0aGUgZXRoZXJuZXQgZGV2aWNlIGFzc2lnbmVkCisgICB0byB0aGlzIGNhcmQuIFVwIHRvIHRoZSBmaXJzdCBzdWNjZXNzZnVsIGJvb3QgdGhpcyBmaWVsZCBvbmx5IHNob3dzIGEgLQorICAgdG8gdGVsbCB0aGF0IG5vIG5ldCBkZXZpY2UgaGFzIGJlZW4gYWxsb2NhdGVkIHVwIHRvIG5vdy4gT25jZSBhIG5ldCBkZXZpY2UKKyAgIGhhcyBiZWVuIGFsbG9jYXRlZCBpdCByZW1haW5zIGFzc2lnbmVkIHRvIHRoaXMgY2FyZCwgZXZlbiBpZiBhIGNhcmQgaXMKKyAgIHJlYm9vdGVkIGFuZCBhbiBib290IGVycm9yIG9jY3Vycy4gCisKKyAgIFdyaXRpbmcgdG8gdGhlIGNhcmRjb25mWCBmaWxlIGJvb3RzIHRoZSBjYXJkIG9yIHRyYW5zZmVycyBjb25maWcgbGluZXMgdG8gCisgICB0aGUgY2FyZHMgZmlybXdhcmUuIFRoZSB0eXBlIG9mIGRhdGEgaXMgYXV0b21hdGljYWxseSBkZXRlY3RlZCB3aGVuIHRoZSAKKyAgIGZpcnN0IGRhdGEgaXMgd3JpdHRlbi4gT25seSByb290IGhhcyB3cml0ZSBhY2Nlc3MgdG8gdGhpcyBmaWxlLgorICAgVGhlIGZpcm13YXJlIGJvb3QgZmlsZXMgYXJlIG5vcm1hbGx5IGNhbGxlZCBoeWNsaWVudC5wb2YgZm9yIGNsaWVudCBjYXJkcworICAgYW5kIGh5c2VydmVyLnBvZiBmb3Igc2VydmVyIGNhcmRzLgorICAgQWZ0ZXIgc3VjY2Vzc2Z1bGx5IHdyaXRpbmcgdGhlIGJvb3QgZmlsZSwgY29tcGxldGUgY29uZmlnIGZpbGVzIG9yIHNpbmdsZQorICAgY29uZmlnIGxpbmVzIG1heSBiZSBjb3BpZWQgdG8gdGhpcyBmaWxlLgorICAgSWYgYW4gZXJyb3Igb2NjdXJzIHRoZSByZXR1cm4gdmFsdWUgZ2l2ZW4gdG8gdGhlIHdyaXRpbmcgcHJvY2VzcyBoYXMgdGhlIAorICAgZm9sbG93aW5nIGFkZGl0aW9uYWwgY29kZXMgKGRlY2ltYWwpOgorCisgICAxMDAwIEFub3RoZXIgcHJvY2VzcyBpcyBjdXJyZW50bHkgYm9vdG5nIHRoZSBjYXJkCisgICAxMDAxIEludmFsaWQgZmlybXdhcmUgaGVhZGVyCisgICAxMDAyIEJvYXJkcyBkdWFsLXBvcnQgUkFNIHRlc3QgZmFpbGVkCisgICAxMDAzIEludGVybmFsIGZpcm13YXJlIGhhbmRsZXIgZXJyb3IKKyAgIDEwMDQgQm9vdCBpbWFnZSBzaXplIGludmFsaWQKKyAgIDEwMDUgRmlyc3QgYm9vdCBzdGFnZSAoYm9vdHN0cmFwIGxvYWRlcikgZmFpbGVkCisgICAxMDA2IFNlY29uZCBib290IHN0YWdlIGZhaWx1cmUKKyAgIDEwMDcgVGltZW91dCB3YWl0aW5nIGZvciBjYXJkIHJlYWR5IGR1cmluZyBib290CisgICAxMDA4IE9wZXJhdGlvbiBvbmx5IGFsbG93ZWQgaW4gYm9vdGVkIHN0YXRlCisgICAxMDA5IENvbmZpZyBsaW5lIHRvbyBsb25nIAorICAgMTAxMCBJbnZhbGlkIGNoYW5uZWwgbnVtYmVyIAorICAgMTAxMSBUaW1lb3V0IHNlbmRpbmcgY29uZmlnIGRhdGEKKworICAgQWRkaXRpb25hbCBpbmZvIGFib3V0IGVycm9yIHJlYXNvbnMgbWF5IGJlIGZldGNoZWQgZnJvbSB0aGUgbG9nIG91dHB1dC4gCisKKzUuIFRoZSAvcHJvYy9uZXQvaHlzZG4vY2FyZGxvZ1ggZmlsZQorICAgCSAgCisgICBUaGUgY2FyZGxvZ1ggZmlsZSBlbnRyeSBtYXkgYmUgb3BlbmVkIG11bHRpcGxlIGZvciByZWFkaW5nIGJ5IGV2ZXJ5b25lIHRvIAorICAgZ2V0IHRoZSBjYXJkcyBhbmQgZHJpdmVycyBsb2cgZGF0YS4gQ2FyZCBtZXNzYWdlcyBhbHdheXMgc3RhcnQgd2l0aCB0aGUKKyAgIGtleXdvcmQgTE9HLiBBbGwgb3RoZXIgbGluZXMgYXJlIG91dHB1dCBmcm9tIHRoZSBkcml2ZXIuIAorICAgVGhlIGRyaXZlciBsb2cgZGF0YSBtYXkgYmUgcmVkaXJlY3RlZCB0byB0aGUgc3lzbG9nIGJ5IHNlbGVjdGluZyB0aGUgCisgICBhcHByb3ByaWF0ZSBiaXRtYXNrLiBUaGUgY2FyZHMgbG9nIG1lc3NhZ2VzIHdpbGwgYWx3YXlzIGJlIHNlbmQgdG8gdGhpcworICAgaW50ZXJmYWNlIGJ1dCBuZXZlciB0byB0aGUgc3lzbG9nLgorCisgICBBIHJvb3QgdXNlciBtYXkgd3JpdGUgYSBkZWNpbWFsIG9yIGhleCAod2l0aCAweCkgdmFsdWUgdCB0aGlzIGZpbGUgdG8gc2VsZWN0CisgICBkZXNpcmVkIG91dHB1dCBvcHRpb25zLiBBcyBtZW50aW9uZWQgYWJvdmUgdGhlIGNhcmRzIGxvZyBkYXQgaXMgYWx3YXlzIAorICAgd3JpdHRlbiB0byB0aGUgY2FyZGxvZyBmaWxlIGluZGVwZW5kZW50IG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBvbmx5IHVzZWQKKyAgIHRvIGNoZWNrIGFuZCBkZWJ1ZyB0aGUgZHJpdmVyIGl0c2VsZjoKKworICAgRm9yIGV4YW1wbGU6IAorICAgZWNobyAiMHgzNDU2MDA3OCIgPiAvcHJvYy9uZXQvaHlzZG4vY2FyZGxvZzAKKyAgIHRvIG91dHB1dCB0aGUgaGV4IGxvZyBtYXNrIDM0NTYwMDc4IGZvciBjYXJkIDAuCisgCisgICBUaGUgd3JpdHRlbiB2YWx1ZSBpcyByZWdhcmRlZCBhcyBhbiB1bnNpZ25lZCAzMi1CaXQgdmFsdWUsIGJpdCBvcmVkIGZvciAKKyAgIGRlc2lyZWQgb3V0cHV0LiBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIGFscmVhZHkgYXNzaWduZWQ6CisKKyAgIDB4ODAwMDAwMDAgICBBbGwgZHJpdmVyIGxvZyBkYXRhIGlzIGFsdGVybmF0aXZlbHkgdmlhIHN5c2xvZyAKKyAgIDB4MDAwMDAwMDEgICBMb2cgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzCisgICAweDAwMDAwMDEwICAgRmlybXdhcmUgbG9hZCBzdGFydCBhbmQgY2xvc2UgYXJlIGxvZ2dlZAorICAgMHgwMDAwMDAyMCAgIExvZyBmaXJtd2FyZSByZWNvcmQgcGFyc2VyCisgICAweDAwMDAwMDQwICAgTG9nIGV2ZXJ5IGZpcm13YXJlIHdyaXRlIGFjdGlvbnMKKyAgIDB4MDAwMDAwODAgICBMb2cgYWxsIGNhcmQgcmVsYXRlZCBib290IG1lc3NhZ2VzCisgICAweDAwMDAwMTAwICAgT3V0cHV0IGFsbCBjb25maWcgZGF0YSBzZW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAgIDB4MDAwMDAyMDAgICBPbmx5IG5vbiBjb21tZW50IGNvbmZpZyBsaW5lcyBhcmUgc2hvd24gd3RoIGNoYW5uZWwKKyAgIDB4MDAwMDA0MDAgICBBZGRpdGlvbmFsIGNvbmYgbG9nIG91dHB1dAorICAgMHgwMDAwMTAwMCAgIExvZyB0aGUgYXN5bmNocm9ub3VzIHNjaGVkdWxlciBhY3Rpb25zIChjb25maWcgYW5kIGxvZykKKyAgIDB4MDAxMDAwMDAgICBMb2cgYWxsIG9wZW4gYW5kIGNsb3NlIGFjdGlvbnMgdG8gL3Byb2MvbmV0L2h5c2RuL2NhcmQgZmlsZXMKKyAgIDB4MDAyMDAwMDAgICBMb2cgYWxsIGFjdGlvbnMgZnJvbSAvcHJvYyBmaWxlIGVudHJpZXMKKyAgIDB4MDAwMTAwMDAgICBMb2cgbmV0d29yayBpbnRlcmZhY2UgaW5pdCBhbmQgZGVpbml0CisgICAKKzYuIFdoZXJlIHRvIGdldCBhZGRpdGlvbmFsIGluZm8gYW5kIGhlbHAKKworICAgSWYgeW91IGhhdmUgYW55IHByb2JsZW1zIGNvbmNlcm5pbmcgdGhlIGRyaXZlciBvciBjb25maWd1cmF0aW9uIGNvbnRhY3QgCisgICB0aGUgSHlwZXJjb3BlIHN1cHBvcnQgdGVhbSAoc3VwcG9ydEBoeXBlcmNvcGUuZGUpIGFuZCBvciB0aGUgYXV0aG9ycworICAgV2VybmVyIENvcm5lbGl1cyAod2VybmVyQGlzZG40bGludXggb3IgY29ybmVsaXVzQHRpdHJvLmRlKSBvcgorICAgVWxyaWNoIEFsYnJlY2h0ICh1YWxicmVjaHRAaHlwZXJjb3BlLmRlKS4KKworCisKKworCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaWNuIGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5pY24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVmNTVlYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuaWNuCkBAIC0wLDAgKzEsMTQ4IEBACiskSWQ6IFJFQURNRS5pY24sdiAxLjcgMjAwMC8wOC8wNiAwOToyMjo1MSBhcm1pbiBFeHAgJAorCitZb3UgY2FuIGdldCB0aGUgSUNOLUlTRE4tY2FyZCBmcm9tOgorCitUaGlua2luZyBPYmplY3RzIFNvZnR3YXJlIEdtYkgKK1ZlcnNiYWNoZXIgUvZ0aGUgMTU5Cis5NzA3OCBX/HJ6YnVyZworVGVsOiArNDkgOTMxIDI4Nzc5NTAKK0ZheDogKzQ5IDkzMSAyODc3OTUxCisKK2VtYWlsIGluZm9AdGhpbmsuZGUKK1dXVyAgIGh0dHA6L3d3dy50aGluay5kZQorCisKK1RoZSBjYXJkIGNvbW11bmljYXRlcyB3aXRoIHRoZSBQQyBieSB0d28gaW50ZXJmYWNlczoKKyAgMS4gQSByYW5nZSBvZiA0IHN1Y2Nlc3NpdmUgcG9ydC1hZGRyZXNzZXMsIHdob3NlIGJhc2UgYWRkcmVzcyBjYW4gYmUgCisgICAgIGNvbmZpZ3VyZWQgd2l0aCB0aGUgc3dpdGNoZXMuCisgIDIuIEEgbWVtb3J5IHdpbmRvdyB3aXRoIDE2S0ItMjU2S0Igc2l6ZSwgd2hpY2ggY2FuIGJlIHNldHVwIGluIDE2ayBzdGVwcworICAgICBvdmVyIHRoZSB3aG9sZSByYW5nZSBvZiAxNk1CLiBJc2RuNGxpbnV4IG9ubHkgdXNlcyBhIDE2ayB3aW5kb3cuCisgICAgIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHdpbmRvdyBjYW4gYmUgY29uZmlndXJlZCB3aGVuIGxvYWRpbmcKKyAgICAgdGhlIGxvd2xldmVsLW1vZHVsZSAoc2VlIFJFQURNRSkuIElmIHVzaW5nIG1vcmUgdGhhbiBvbmUgY2FyZCwKKyAgICAgYWxsIGNhcmRzIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUgd2luZG93IGFuZCBhY3RpdmF0ZWQgYXMgbmVlZGVkLgorCitTZXR0aW5nIHVwIHRoZSBJTy1hZGRyZXNzIGRpcHN3aXRjaGVzIGZvciB0aGUgSUNOLUlTRE4tY2FyZDoKKworICBUd28gdHlwZXMgb2YgY2FyZHMgZXhpc3QsIG9uZSB3aXRoIGRpcC1zd2l0Y2hlcyBhbmQgb25lIHdpdGgKKyAgaG9vay1zd2l0Y2hlcy4KKworICAxLiBTZXR0aW5nIGZvciB0aGUgY2FyZCB3aXRoIGhvb2stc3dpdGNoZXM6CisKKyAgICAgKDAgPSBzd2l0Y2ggY2xvc2VkLCAxID0gc3dpdGNoIG9wZW4pCisKKyAgICAgUzMgUzIgUzEgIEJhc2UtYWRkcmVzcworICAgICAgMCAgMCAgMCAgMHgzMDAKKyAgICAgIDAgIDAgIDEgIDB4MzEwCisgICAgICAwICAxICAwICAweDMyMCAoRGVmYXVsdCBmb3IgaXNkbjRsaW51eCkKKyAgICAgIDAgIDEgIDEgIDB4MzMwCisgICAgICAxICAwICAwICAweDM0MAorICAgICAgMSAgMCAgMSAgMHgzNTAKKyAgICAgIDEgIDEgIDAgIDB4MzYwCisgICAgICAxICAxICAxICBOT1QgQUxMT1dFRCEKKyAgICAKKyAgMi4gU2V0dGluZyBmb3IgdGhlIGNhcmQgd2l0aCBkaXAtc3dpdGNoZXM6CisKKyAgICAgKDAgPSBzd2l0Y2ggY2xvc2VkLCAxID0gc3dpdGNoIG9wZW4pCisKKyAgICAgUzEgUzIgUzMgUzQgIEJhc2UtQWRkcmVzcworICAgICAgMCAgMCAgMCAgMCAgMHgzMDAKKyAgICAgIDAgIDAgIDAgIDEgIDB4MzEwCisgICAgICAwICAwICAxICAwICAweDMyMCAoRGVmYXVsdCBmb3IgaXNkbjRsaW51eCkKKyAgICAgIDAgIDAgIDEgIDEgIDB4MzMwCisgICAgICAwICAxICAwICAwICAweDM0MAorICAgICAgMCAgMSAgMCAgMSAgMHgzNTAKKyAgICAgIDAgIDEgIDEgIDAgIDB4MzYwCisgICAgICAwICAxICAxICAxICBOT1QgQUxMT1dFRCEKKyAgICAgIDEgIDAgIDAgIDAgIDB4MzA4CisgICAgICAxICAwICAwICAxICAweDMxOAorICAgICAgMSAgMCAgMSAgMCAgMHgzMjgKKyAgICAgIDEgIDAgIDEgIDEgIDB4MzM4CisgICAgICAxICAxICAwICAwICAweDM0OAorICAgICAgMSAgMSAgMCAgMSAgMHgzNTgKKyAgICAgIDEgIDEgIDEgIDAgIDB4MzY4CisgICAgICAxICAxICAxICAxICBOT1QgQUxMT1dFRCEKKworVGhlIElDTiBkcml2ZXIgbWF5IGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZS4gSW5pdGlhbGl6YXRpb24KK2RlcGVuZHMgb24gaG93IHRoZSBkcml2ZXIgaXMgYnVpbHQ6CisKK0RyaXZlciBidWlsdCBpbnRvIHRoZSBrZXJuZWw6CisKKyAgVGhlIElDTiBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGNvbW1hbmRsaW5lLWZlYXR1cmUgd2hpbGUKKyAgbG9hZGluZyB0aGUga2VybmVsIHdpdGggTElMTyBvciBMT0FETElOLiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisgIGljbj1wLG1bLGlkc3RyaW5nMVssaWRzdHJpbmcyXV0KKworICB3aGVyZQorCisgICAgcCA9IHBvcnRiYXNlICAgICAgKGRlZmF1bHQ6IDB4MzIwKQorICAgIG0gPSBzaGFyZWQgbWVtb3J5IChkZWZhdWx0OiAweGQwMDAwKQorCisgIFdoZW4gdXNpbmcgdGhlIElDTiBkb3VibGUgY2FyZCAoNEIpLCB5b3UgTVVTVCBkZWZpbmUgVFdPIGlkc3RyaW5ncy4KKyAgaWRzdHJpbmcgbXVzdCBzdGFydCB3aXRoIGEgY2hhcmFjdGVyISBUaGVyZSBpcyBubyB3YXkgZm9yIHRoZSBkcml2ZXIKKyAgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIDJCIGFuZCA0QiB0eXBlIGNhcmQuIFRoZXJlZm9yZSwgYnkgc3VwcGx5aW5nCisgIFRXTyBpZHN0cmluZ3MsIHlvdSB0ZWxsIHRoZSBkcml2ZXIgdGhhdCB5b3UgaGF2ZSBhIDRCIGluc3RhbGxlZC4KKyAgCisgIElmIHlvdSBsaWtlIHRvIHVzZSBtb3JlIHRoYW4gb25lIGNhcmQsIHlvdSBjYW4gdXNlIHRoZSBwcm9ncmFtCisgICJpY25jdHJsIiBmcm9tIHRoZSB1dGlsaXR5LXBhY2thZ2UgdG8gY29uZmlndXJlIGFkZGl0aW9uYWwgY2FyZHMuCisgIFlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBzaGFyZWQgbWVtb3J5IG9ubHkgb25jZSwgc2luY2UgdGhlIGljbi1kcml2ZXIKKyAgbWFwcyBhbGwgY2FyZHMgaW50byB0aGUgc2FtZSBhZGRyZXNzLXNwYWNlLgorCisgIFVzaW5nIHRoZSAiaWNuY3RybCItdXRpbGl0eSwgcG9ydGJhc2UgYW5kIHNoYXJlZCBtZW1vcnkgY2FuIGFsc28gYmUKKyAgY2hhbmdlZCBkdXJpbmcgcnVudGltZS4KKworICBUaGUgRC1jaGFubmVsIHByb3RvY29sIGlzIGNvbmZpZ3VyZWQgYnkgbG9hZGluZyBkaWZmZXJlbnQgZmlybXdhcmUKKyAgaW50byB0aGUgY2FyZCdzIG1lbW9yeSB1c2luZyB0aGUgImljbmN0cmwiLXV0aWxpdHkuCisKKworRHJpdmVyIGJ1aWx0IGFzIG1vZHVsZToKKworICBUaGUgbW9kdWxlIGljbi5vIGNhbiBiZSBjb25maWd1cmVkIGR1cmluZyAiaW5zbW9kJ2luZyIgaXQgYnkKKyAgYXBwZW5kaW5nIGl0cyBwYXJhbWV0ZXJzIHRvIHRoZSBpbnNtb2QtY29tbWFuZGxpbmUuIFRoZSBmb2xsb3dpbmcKKyAgc3ludGF4IGlzIGFjY2VwdGVkOgorCisgICAgcG9ydGJhc2U9cCBtZW1iYXNlPW0gaWNuX2lkPWlkc3RyaW5nIFtpY25faWQyPWlkc3RyaW5nMl0KKworICB3aGVyZSBwLCBtLCBpZHN0cmluZzEgYW5kIGlkc3RyaW5nMiBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzIGFzIHRoZQorICBwYXJhbWV0ZXJzIGRlc2NyaWJlZCBmb3IgdGhlIGtlcm5lbC12ZXJzaW9uIGFib3ZlLgorICAgICAgCisgIFdoZW4gdXNpbmcgdGhlIElDTiBkb3VibGUgY2FyZCAoNEIpLCB5b3UgTVVTVCBkZWZpbmUgVFdPIGlkc3RyaW5ncy4KKyAgaWRzdHJpbmcgbXVzdCBzdGFydCB3aXRoIGEgY2hhcmFjdGVyISBUaGVyZSBpcyBubyB3YXkgZm9yIHRoZSBkcml2ZXIKKyAgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIDJCIGFuZCA0QiB0eXBlIGNhcmQuIFRoZXJlZm9yZSwgYnkgc3VwcGx5aW5nCisgIFRXTyBpZHN0cmluZ3MsIHlvdSB0ZWxsIHRoZSBkcml2ZXIgdGhhdCB5b3UgaGF2ZSBhIDRCIGluc3RhbGxlZC4KKyAgCisgIFVzaW5nIHRoZSAiaWNuY3RybCItdXRpbGl0eSwgdGhlIHNhbWUgZmVhdHVyZXMgYXBwbHkgdG8gdGhlIG1vZHVsYXJpemVkCisgIHZlcnNpb24gbGlrZSB0byB0aGUga2VybmVsLWJ1aWx0aW4gb25lLgorCisgIFRoZSBELWNoYW5uZWwgcHJvdG9jb2wgaXMgY29uZmlndXJlZCBieSBsb2FkaW5nIGRpZmZlcmVudCBmaXJtd2FyZQorICBpbnRvIHRoZSBjYXJkJ3MgbWVtb3J5IHVzaW5nIHRoZSAiaWNuY3RybCItdXRpbGl0eS4KKworTG9hZGluZyB0aGUgZmlybXdhcmUgaW50byB0aGUgY2FyZDoKKworICBUaGUgZmlybXdhcmUgaXMgc3VwcGxpZWQgdG9nZXRoZXIgd2l0aCB0aGUgaXNkbjRrLXV0aWxzIHBhY2thZ2UuIEl0CisgIGNhbiBiZSBmb3VuZCBpbiB0aGUgc3ViZGlyZWN0b3J5IGljbmN0cmwvZmlybXdhcmUvCisKKyAgVGhlcmUgYXJlIDMgZmlsZXM6CisKKyAgICBsb2FkcGcuYmluICAgLSBJbWFnZSBvZiB0aGUgYm9vdHN0cmFwIGxvYWRlci4KKyAgICBwY18xdF9jYS5iaW4gLSBJbWFnZSBvZiBmaXJtd2FyZSBmb3IgZ2VybWFuIDFUUjYgcHJvdG9jb2wuCisgICAgcGNfZXVfY2EuYmluIC0gSW1hZ2UgaWYgZmlybXdhcmUgZm9yIEVEU1MxIChFdXJvLUlTRE4pIHByb3RvY29sLgorCisgIEFzc3VtaW5nIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgdXRpbGl0eS1wYWNrYWdlIGNvcnJlY3RseSwgdGhlIGZpcm13YXJlCisgIHdpbGwgYmUgZG93bmxvYWRlZCBpbnRvIHRoZSAyQi1jYXJkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgIGljbmN0cmwgLWQgSWRzdHJpbmcgbG9hZCAvZXRjL2lzZG4vbG9hZHBnLmJpbiAvZXRjL2lzZG4vcGNfWFhfY2EuYmluCisKKyAgd2hlcmUgWFggaXMgZWl0aGVyICIxdCIgb3IgImV1IiwgZGVwZW5kaW5nIG9uIHRoZSBELUNoYW5uZWwgcHJvdG9jb2wKKyAgdXNlZCBvbiB5b3VyIFMwLWJ1cyBhbmQgSWRzdHJpbmcgaXMgdGhlIE5hbWUgb2YgdGhlIGNhcmQsIGdpdmVuIGR1cmluZworICBpbnNtb2QtdGltZSBvciAoZm9yIGtlcm5lbC1idWlsdGluIGRyaXZlcikgb24gdGhlIGtlcm5lbCBjb21tYW5kbGluZS4KKworICBUbyBsb2FkIGEgNEItY2FyZCwgdGhlIHNhbWUgY29tbWFuZCBpcyB1c2VkLCBleGNlcHQgYSBzZWNvbmQgZmlybXdhcmUKKyAgZmlsZSBpcyBhcHBlbmRlZCB0byB0aGUgY29tbWFuZGxpbmUgb2YgaWNuY3RybC4KKworICAtPiBBZnRlciBkb3dubG9hZGluZyBmaXJtd2FyZSwgdGhlIHR3byBMRURzIGF0IHRoZSBiYWNrIGNvdmVyIG9mIHRoZSBjYXJkCisgICAgIChJQ04tNEI6IDQgTEVEcykgbXVzdCBiZSBibGlua2luZyBpbnRlcm1pdHRlbnRseSBub3cuIElmIGEgY29ubmVjdGlvbgorICAgICBpcyB1cCwgdGhlIGNvcnJlc3BvbmRpbmcgbGVkIGlzIGxpdCBjb250aW51b3VzbHkuCisKKyAgRm9yIGZ1cnRoZXIgZG9jdW1lbnRhdGlvbiAoYWRkaW5nIG1vcmUgSUNOLWNhcmRzKSwgcmVmZXIgdG8gdGhlIG1hbnBhZ2UKKyAgaWNuY3RybC44IHdoaWNoIGlzIGluY2x1ZGVkIGluIHRoZSBpc2RuNGstdXRpbHMgcGFja2FnZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5wY2JpdCBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUucGNiaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyNTAwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUucGNiaXQKQEAgLTAsMCArMSw0MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUkVBRE1FIGZpbGUgZm9yIHRoZSBQQ0JJVC1EIERldmljZSBEcml2ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFBDQklUIGlzIGEgRXVybyBJU0ROIGFkYXB0ZXIgbWFudWZhY3R1cmVkIGluIFBvcnR1Z2FsIGJ5IE9jdGFsIGFuZAorZGV2ZWxvcGVkIGluIGNvb3BlcmF0aW9uIHdpdGggUG9ydHVnYWwgVGVsZWNvbSBhbmQgSW5lc2MuCitUaGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgc3RhbmRhcmQga2VybmVsIGlzZG4gZmFjaWxpdGllcworb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgRnJpdHogRWxmZXJ0IGluIHRoZSBpc2RuNGxpbnV4IHByb2plY3QuCisKK1RoZSBjb21tb24gdmVyc2lvbnMgb2YgdGhlIHBjYml0IGJvYXJkIHJlcXVpcmUgYSBmaXJtd2FyZSB0aGF0IGlzIAorZGlzdHJpYnV0ZWQgKGFuZCBjb3B5cmlnaHRlZCkgYnkgdGhlIG1hbnVmYWN0dXJlci4gVG8gbG9hZCB0aGlzCitmaXJtd2FyZSB5b3UgbmVlZCAicGNiaXRjdGwiIGF2YWlsYWJsZSBvbiB0aGUgc3RhbmRhcmQgaXNkbjRrLXV0aWxzCitwYWNrYWdlIG9yIGluIHRoZSBwY2JpdCBwYWNrYWdlIGF2YWlsYWJsZSBpbjoKKworZnRwOi8vZnRwLmRpLmZjLnVsLnB0L3B1Yi9zeXN0ZW1zL0xpbnV4L2lzZG4KKworS25vd24gTGltaXRhdGlvbnM6CisKKy0gVGhlIGJvYXJkIHJlc2V0IHByb2NlZHVyZSBpcyBhdCB0aGUgbW9tZW50IGluY29ycmVjdCBhbmQgd2lsbCBvbmx5CithbGxvdyB5b3UgdG8gbG9hZCB0aGUgZmlybXdhcmUgYWZ0ZXIgYSBoYXJkIHJlc2V0LgorCistIE9ubHkgSERMQyBpbiBCLWNoYW5uZWxzIGlzIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LiBUaGVyZSBpcyBubworY3VycmVudCBzdXBwb3J0IGZvciBYLjI1IGluIEIgb3IgRCBjaGFubmVscyBub3IgTEFQRCBpbiBCCitjaGFubmVscy4gVGhlIG1haW4gcmVhc29uIGlzIHRoYXQgdGhlc2UgdHdvIG90aGVyIHByb3RvY29sIG1vZGVzIGhhdmUsCit0byBteSBrbm93bGVkZ2UsIHZlcnkgbGl0dGxlIHVzZS4gSWYgeW91IHdhbnQgdG8gc2VlIHRoZW0gaW1wbGVtZW50ZWQKKypkbyogc2VuZCBtZSBhIG1haWwuCisKKy0gVGhlIGRyaXZlciBvZnRlbiB0cmlnZ2VycyBlcnJvcnMgaW4gdGhlIGJvYXJkIHRoYXQgSSBhbmQgdGhlCittYW51ZmFjdHVyZXIgYmVsaWV2ZSB0byBiZSBjYXVzZWQgYnkgYnVncyBpbiB0aGUgZmlybXdhcmUuIFRoZSBjdXJyZW50Cit2ZXJzaW9uIGluY2x1ZGVzIHNldmVyYWwgcHJvY2VkdXJlcyBmb3IgZXJyb3IgcmVjb3ZlcnkgdGhhdCBzaG91bGQKK2FsbG93IG5vcm1hbCBvcGVyYXRpb24uIFBsYW5zIGZvciB0aGUgZnV0dXJlIGluY2x1ZGUgY29vcGVyYXRpb24gd2l0aAordGhlIG1hbnVmYWN0dXJlciBpbiBvcmRlciB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCisKK0luZm9ybWF0aW9uL2hpbnRzL2hlbHAgY2FuIGJlIG9idGFpbmVkIGluIHRoZSBsaW51eCBpc2RuCittYWlsaW5nIGxpc3QgKGlzZG40bGludXhAbGlzdHNlcnYuaXNkbjRsaW51eC5kZSkgb3IgZGlyZWN0bHkgZnJvbSBtZS4KKworcmVnYXJkcywKKyAgUGVkcm8uCisJCQorPHJvcXVlQGRpLmZjLnVsLnB0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5zYyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuc2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1M2NkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuc2MKQEAgLTAsMCArMSwyODEgQEAKK1dlbGNvbWUgdG8gQmV0YSBSZWxlYXNlIDIgb2YgdGhlIGNvbWJpbmF0aW9uIElTRE4gZHJpdmVyIGZvciBTcGVsbENhc3RlcidzCitJU0EgSVNETiBhZGFwdGVycy4gUGxlYXNlIG5vdGUgdGhpcyByZWxlYXNlIDIgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlCitEYXRhQ29tbXV0ZS9CUkkgYW5kIFRlbGVDb21tdXRlL0JSSSBhZGFwdGVycyBvbmx5IGFuZCBhbnkgb3RoZXIgdXNlIGlzIAorZ3VhcmFudGVlZCB0byBmYWlsLiBJZiB5b3UgaGF2ZSBhIERhdGFDb21tdXRlL1BSSSBpbnN0YWxsZWQgaW4gdGhlIHRlc3QKK2NvbXB1dGVyLCB3ZSByZWNvbW1lbmQgcmVtb3ZpbmcgaXQgYXMgaXQgd2lsbCBiZSBkZXRlY3RlZCBidXQgd2lsbCBub3QKK2JlIHVzYWJsZS4gIFRvIHNlZSB3aGF0IHdlIGhhdmUgZG9uZSB0byBCZXRhIFJlbGVhc2UgMiwgc2VlIHNlY3Rpb24gMy4KKworU3BlYWtpbmcgb2YgZ3VhcmFudGVlcywgVEhJUyBJUyBCRVRBIFNPRlRXQVJFIGFuZCBhcyBzdWNoIGNvbnRhaW5zCitidWdzIGFuZCBkZWZlY3RzIGVpdGhlciBrbm93biBvciB1bmtub3duLiBVc2UgdGhpcyBzb2Z0d2FyZSBhdCB5b3VyIG93bgorcmlzay4gVGhlcmUgaXMgTk8gU1VQUE9SVCBmb3IgdGhpcyBzb2Z0d2FyZS4gU29tZSBoZWxwIG1heSBiZSBhdmFpbGFibGUKK3Rocm91Z2ggdGhlIHdlYiBzaXRlIG9yIHRoZSBtYWlsaW5nIGxpc3QgYnV0IHN1Y2ggc3VwcG9ydCBpcyB0b3RhbGx5IGF0CitvdXIgb3duIG9wdGlvbiBhbmQgd2l0aG91dCB3YXJyYW50eS4gSWYgeW91IGNob29zZSB0byBhc3N1bWUgYWxsIGFuZAordG90YWwgcmlzayBieSB1c2luZyB0aGlzIGRyaXZlciwgd2UgZW5jb3VyYWdlIHlvdSB0byBqb2luIHRoZSBiZXRhCittYWlsaW5nIGxpc3QuCisKK1RvIGpvaW4gdGhlIExpbnV4IGJldGEgbWFpbGluZyBsaXN0LCBzZW5kIGEgbWVzc2FnZSB0bzoKK21ham9yZG9tb0BzcGVsbGNhc3QuY29tIHdpdGggdGhlIHdvcmRzICJzdWJzY3JpYmUgbGludXgtYmV0YSIgYXMgdGhlIG9ubHkKK2NvbnRlbnRzIG9mIHRoZSBtZXNzYWdlLiBEbyBub3QgaW5jbHVkZSBhIHNpZ25hdHVyZS4gSWYgeW91IGNob29zZSB0bworcmVtb3ZlIHlvdXJzZWxmIGZyb20gdGhpcyBsaXN0IGF0IGEgbGF0ZXIgZGF0ZSwgc2VuZCBhbm90aGVyIG1lc3NhZ2UgdG8KK3RoZSBzYW1lIGFkZHJlc3Mgd2l0aCB0aGUgd29yZHMgInVuc3Vic2NyaWJlIGxpbnV4LWJldGEiIGFzIGl0cyBvbmx5Citjb250ZW50cy4KKworVEFCTEUgT0YgQ09OVEVOVFMKKy0tLS0tLS0tLS0tLS0tLS0tCisJMS4gSW50cm9kdWN0aW9uCisJIDEuMSBXaGF0IGlzIElTRE40TGludXg/CisJIDEuMiBXaGF0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIHRoaXMgZHJpdmVyIGFuZCBwcmV2aW91cyBkcml2ZXJzPworCSAxLjMgSG93IGRvIEkgc2V0dXAgbXkgc3lzdGVtIHdpdGggdGhlIGNvcnJlY3Qgc29mdHdhcmUgdG8gdXNlCisJICAgICB0aGlzIGRyaXZlciByZWxlYXNlPworCQorCTIuIEJhc2ljIE9wZXJhdGlvbnMKKwkgMi4xIFVucGFja2luZyBhbmQgaW5zdGFsbGluZyB0aGUgZHJpdmVyCisJIDIuMiBSZWFkIHRoZSBtYW4gcGFnZXMhISEKKwkgMi4zIEluc3RhbGxpbmcgdGhlIGRyaXZlcgorCSAyLjQgUmVtb3ZpbmcgdGhlIGRyaXZlcgorCSAyLjUgV2hhdCB0byBkbyBpZiBpdCBkb2Vzbid0IGxvYWQKKwkgMi42IEhvdyB0byBzZXR1cCBJU0RONExpbnV4IHdpdGggdGhlIGRyaXZlcgorCisJMy4gQmV0YSBDaGFuZ2UgU3VtbWFyaWVzIGFuZCBNaXNjZWxsYW5lb3VzIE5vdGVzCisKKzEuIEludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXZpc2lvbiAyIExpbnV4IGRyaXZlciBmb3IgU3BlbGxDYXN0ZXIgSVNBIElTRE4gYWRhcHRlcnMgaXMgYnVpbHQKK3Vwb24gSVNETjRMaW51eCBhdmFpbGFibGUgc2VwYXJhdGVseSBvciBhcyBpbmNsdWRlZCBpbiBMaW51eCAyLjAgYW5kIGxhdGVyLgorVGhlIGRyaXZlciB3aWxsIHN1cHBvcnQgYSBtYXhpbXVtIG9mIDQgYWRhcHRlcnMgaW4gYW55IG9uZSBzeXN0ZW0gb2YgYW55Cit0eXBlIGluY2x1ZGluZyBEYXRhQ29tbXV0ZS9CUkksIERhdGFDb21tdXRlL1BSSSBhbmQgVGVsZUNvbW11dGUvQlJJIGZvciBhCittYXhpbXVtIG9mIDkyIGNoYW5uZWxzIGZvciBob3N0LiBUaGUgZHJpdmVyIGlzIHN1cHBsaWVkIGFzIGEgbW9kdWxlIGluCitzb3VyY2UgZm9ybSBhbmQgbmVlZHMgdG8gYmUgY29tcGxpZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLiBJdCBoYXMgYmVlbgordGVzdGVkIG9uIExpbnV4IDIuMC4yMC4KKworMS4xIFdoYXQgSXMgSVNETjRMaW51eAorCitJU0RONExpbnV4IGlzIGEgZHJpdmVyIGFuZCBzZXQgb2YgdG9vbHMgdXNlZCB0byBhY2Nlc3MgYW5kIHVzZSBJU0ROIGRldmljZXMKK29uIGEgTGludXggcGxhdGZvcm0gaW4gYSBjb21tb24gYW5kIHN0YW5kYXJkIHdheS4gSXQgc3VwcG9ydHMgSERMQyBhbmQgUFBQCitwcm90b2NvbHMgYW5kIG9mZmVycyBjaGFubmVsIGJ1bmRsaW5nIGFuZCBNTFBQUCBzdXBwb3J0LiBUbyB1c2UgSVNETjRMaW51eAoreW91IG5lZWQgdG8gY29uZmlndXJlIHlvdXIga2VybmVsIGZvciBJU0ROIHN1cHBvcnQgYW5kIGdldCB0aGUgSVNETjRMaW51eAordG9vbCBraXQgZnJvbSBvdXIgd2ViIHNpdGUuCisKK0lTRE40TGludXggY3JlYXRlcyBhIGNoYW5uZWwgcG9vbCBmcm9tIGFsbCBvZiB0aGUgYXZhaWxhYmxlIElTRE4gY2hhbm5lbHMKK2FuZCB0aGVyZWZvcmUgY2FuIGZ1bmN0aW9uIGFjcm9zcyBhZGFwdGVycy4gV2hlbiBhbiBJU0RONExpbnV4IGNvbXBsaWFudAorZHJpdmVyIChzdWNoIGFzIG91cnMpIGlzIGxvYWRlZCwgYWxsIG9mIHRoZSBjaGFubmVscyBnbyBpbnRvIGEgcG9vbCBhbmQKK2FyZSB1c2VkIG9uIGEgZmlyc3QtY29tZSBmaXJzdC1zZXJ2ZWQgYmFzaXMuIEluIGFkZGl0aW9uLCBpbmRpdmlkdWFsCitjaGFubmVscyBjYW4gYmUgc3BlY2lmaWNhbGx5IGJvdW5kIHRvIHBhcnRpY3VsYXIgaW50ZXJmYWNlcy4KKworMS4yIFdoYXQgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kIHByZXZpb3VzIGRyaXZlcnM/CisKK1RoZSByZXZpc2lvbiAyIGRyaXZlciBiZXNpZGVzIGFkb3B0aW5nIHRoZSBJU0RONExpbnV4IGFyY2hpdGVjdHVyZSBoYXMgbWFueQorc3VidGxlIGFuZCBub3Qgc28gc3VidGxlIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZXMgZnJvbSBwcmV2aW91cyByZWxlYXNlcy4gVGhlc2UKK2luY2x1ZGU6CisJLSBNb3JlIGVmZmljaWVudCBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQgY29tYmluZWQgd2l0aCBhIHNpbXBsZXIKKwkgIGNvbmZpZ3VyYXRpb24uIEFsbCBhZGFwdGVycyBub3cgdXNlIG9ubHkgMTZLYnl0ZXMgb2Ygc2hhcmVkIFJBTQorCSAgdmVyc3VzIGJldHdlZW4gMTZLIGFuZCA2NEsuIE5ldyBtZXRob2RzIGZvciB1c2luZyB0aGUgc2hhcmVkIFJBTQorCSAgYWxsb3cgdXMgdG8gdXRpbGl6ZSBhbGwgb2YgdGhlIGF2YWlsYWJsZSBSQU0gb24gdGhlIGFkYXB0ZXIgdGhyb3VnaAorCSAgb25seSBvbmUgMTZLIHBhZ2UuCisJLSBCZXR0ZXIgZGV0ZWN0aW9uIG9mIGF2YWlsYWJsZSB1cHBlciBtZW1vcnkuIFRoZSBwcm9iaW5nIHJvdXRpbmVzCisJICBoYXZlIGJlZW4gaW1wcm92ZWQgdG8gYmV0dGVyIGRldGVjdCBhdmFpbGFibGUgc2hhcmVkIFJBTSBwYWdlcyBhbmQKKwkgIHVzZWQgcGFnZXMgYXJlIG5vdyBsb2NrZWQuCisJLSBEZWNyZWFzZWQgbG9hZGluZyB0aW1lIGFuZCBhIHdpZGVyIHJhbmdlIG9mIEkvTyBwb3J0cyBwcm9iZWQuCisJICBXZSBoYXZlIHNpZ25pZmljYW50bHkgcmVkdWNlZCB0aGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgdG8gbG9hZAorCSAgdGhlIGRyaXZlciBhbmQgYXQgdGhlIHNhbWUgdGltZSBkb3VibGVkIHRoZSBudW1iZXIgb2YgSS9PIHBvcnRzCisJICBwcm9iZWQgaW5jcmVhc2luZyB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGFuIGFkYXB0ZXIuCisJLSBXZSBub3cgc3VwcG9ydCBhbGwgSVNBIGFkYXB0ZXIgbW9kZWxzIHdpdGggYSBzaW5nbGUgZHJpdmVyIGluc3RlYWQKKwkgIG9mIHNlcGFyYXRlIGRyaXZlcnMgZm9yIGVhY2ggbW9kZWwuIFRoZSByZXZpc2lvbiAyIGRyaXZlciBzdXBwb3J0cworCSAgdGhlIERhdGFDb21tdXRlL0JSSSwgRGF0YUNvbW11dGUvUFJJIGFuZCBUZWxlQ29tbXV0ZS9CUkkgaW4gYW55CisJICBjb21iaW5hdGlvbiB1cCB0byBhIG1heGltdW0gb2YgZm91ciBhZGFwdGVycyBwZXIgc3lzdGVtLgorCS0gT24gYm9hcmQgUFBQIHByb3RvY29sIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvdXIgb2YgdGhlCisJICBzeW5jLVBQUCBzdXBwb3J0IHVzZWQgaW4gSVNETjRMaW51eC4gVGhpcyBtZWFucyBtb3JlIGNvbnRyb2wgb2YKKwkgIHRoZSBwcm90b2NvbCBwYXJhbWV0ZXJzLCBmYXN0ZXIgbmVnb3RpYXRpb24gdGltZSBhbmQgYSBtb3JlCisJICBmYW1pbGlhciBpbnRlcmZhY2UuCisKKzEuMyBIb3cgZG8gSSBzZXR1cCBteSBzeXN0ZW0gd2l0aCB0aGUgY29ycmVjdCBzb2Z0d2FyZSB0byB1c2UKKyAgICB0aGlzIGRyaXZlciByZWxlYXNlPworCitCZWZvcmUgeW91IGNhbiBjb21waWxlLCBpbnN0YWxsIGFuZCB1c2UgdGhlIFNwZWxsQ2FzdGVyIElTQSBJU0ROIGRyaXZlciwgeW91CittdXN0IGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgaXMgaW5zdGFsbGVkLCBjb25maWd1cmVkIGFuZCBydW5uaW5nOgorCisJLSBMaW51eCBrZXJuZWwgMi4wLjIwIG9yIGxhdGVyIHdpdGggdGhlIHJlcXVpcmVkIGluaXQgYW5kIHBzCisJICB2ZXJzaW9ucy4gUGxlYXNlIHNlZSB5b3VyIGRpc3RyaWJ1dGlvbiB2ZW5kb3IgZm9yIHRoZSBjb3JyZWN0CisJICB1dGlsaXR5IHBhY2thZ2VzLiBUaGUgbGF0ZXN0IGtlcm5lbCBpcyBhdmFpbGFibGUgZnJvbQorCSAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9rZXJuZWwvdjIuMC8KKworCS0gVGhlIGxhdGVzdCBtb2R1bGVzIHBhY2thZ2UgKG1vZHVsZXMtMi4wLjAudGFyLmd6KSBmcm9tCisJICBmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L2tlcm5lbC9tb2R1bGVzLTIuMC4wLnRhci5negorCisJLSBUaGUgSVNETjRMaW51eCB0b29scyBhdmFpbGFibGUgZnJvbSAKKwkgIGZ0cDovL2Z0cC5mcmFua2VuLmRlL3B1Yi9pc2RuNGxpbnV4L3YyLjAvaXNkbjRrLXV0aWxzLTIuMC50YXIuZ3oKKwkgIFRoaXMgcGFja2FnZSBtYXkgZmFpbCB0byBjb21waWxlIGZvciB5b3Ugc28geW91IGNhbiBhbHRlcm5hdGl2ZWx5CisJICBnZXQgYSBwcmUtY29tcGlsZWQgdmVyc2lvbiBmcm9tCisJICBmdHA6Ly9mdHAuc3BlbGxjYXN0LmNvbS9wdWIvZHJpdmVycy9pc2RuNGxpbnV4L2lzZG40ay1iaW4tMi4wLnRhci5negorCisKKzIuIEJhc2ljIE9wZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworMi4xIFVucGFja2luZyBhbmQgaW5zdGFsbGluZyB0aGUgZHJpdmVyCisKKwkxLiBBcyByb290LCBjcmVhdGUgYSBkaXJlY3RvcnkgaW4gYSBjb252ZW5pZW50IHBsYWNlLiBXZSBzdWdnZXN0CisJICAgL3Vzci9zcmMvc3BlbGxjYXN0ZXIuCisJCisJMi4gVW5wYWNrIHRoZSBhcmNoaXZlIHdpdGggOgorCQl0YXIgeHpmIHNjLW4ubm4udGFyLmd6IC1DIC91c3Ivc3JjL3NwZWxsY2FzdGVyCisJCisJMy4gQ2hhbmdlIGRpcmVjdG9yeSB0byAvdXNyL3NyYy9zcGVsbGNhc3RlcgorCisJNC4gUmVhZCB0aGUgUkVBRE1FIGFuZCBSRUxOT1RFUyBmaWxlcy4KKworCTUuIFJ1biAnbWFrZScgYW5kIGlmIGFsbCBnb2VzIHdlbGwsIHJ1biAnbWFrZSBpbnN0YWxsJy4KKworMi4yIFJlYWQgdGhlIG1hbiBwYWdlcyEhIQorCitNYWtlIHN1cmUgeW91IHJlYWQgdGhlIHNjY3RybCg4KSBhbmQgc2MoNCkgbWFudWFsIHBhZ2VzIGJlZm9yZSBjb250aW51aW5nCithbnkgZnVydGhlci4gVHlwZSAnbWFuIDggc2NjdHJsJyBhbmQgJ21hbiA0IHNjJy4KKworMi4zIEluc3RhbGxpbmcgdGhlIGRyaXZlcgorCitUbyBpbnN0YWxsIHRoZSBkcml2ZXIsIHR5cGUgJy9zYmluL2luc21vZCBzYycgYXMgcm9vdC4gc2MoNCkgZGV0YWlscyBvcHRpb25zCit5b3UgY2FuIHNwZWNpZnkgYnV0IHlvdSBzaG91bGRuJ3QgbmVlZCB0byB1c2UgYW55IHVubGVzcyB0aGlzIGRvZXNuJ3Qgd29yay4KKworTWFrZSBzdXJlIHRoZSBkcml2ZXIgbG9hZGVkIGFuZCBkZXRlY3RlZCBhbGwgb2YgdGhlIGFkYXB0ZXJzIGJ5IHR5cGluZworJ2RtZXNnJy4KKworVGhlIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCBzbyB0aGF0IGl0IGlzIGxvYWRlZCB1cG9uIHN0YXJ0dXAuICBUbyBkbyB0aGlzLCAKK2VkaXQgdGhlIGZpbGUgIi9ldGMvbW9kdWxlcy8ndW5hbWUgLWYnLyd1bmFtZSAtdiciIGFuZCBpbnNlcnQgdGhlIGRyaXZlciBuYW1lCisic2MiIGludG8gdGhpcyBmaWxlLgorCisyLjQgUmVtb3ZpbmcgdGhlIGRyaXZlcgorCitUbyByZW1vdmUgdGhlIGRyaXZlciwgZGVsZXRlIGFueSBpbnRlcmZhY2VzIHRoYXQgbWF5IGV4aXN0IChzZWUgaXNkbmN0cmwoOCkKK2ZvciBtb3JlIG9uIHRoaXMpIGFuZCB0aGVuIHR5cGUgJy9zYmluL3JtbW9kIHNjJy4KKworMi41IFdoYXQgdG8gZG8gaWYgaXQgZG9lc24ndCBsb2FkCisKK0lmLCB3aGVuIHlvdSB0cnkgdG8gaW5zdGFsbCB0aGUgZHJpdmVyLCB5b3UgZ2V0IGEgbWVzc2FnZSBtZW50aW9uaW5nCisncmVnaXN0ZXJfaXNkbicgdGhlbiB5b3UgZG8gbm90IGhhdmUgdGhlIElTRE40TGludXggc3lzdGVtIGluc3RhbGxlZC4gUGxlYXNlCittYWtlIHN1cmUgdGhhdCBJU0ROIHN1cHBvcnQgaXMgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLgorCitJZiB5b3UgZ2V0IGEgbWVzc2FnZSB0aGF0IHNheXMgJ2luaXRpYWxpemF0aW9uIG9mIHNjIGZhaWxlZCcsIHRoZW4gdGhlCitkcml2ZXIgZmFpbGVkIHRvIGRldGVjdCBhbiBhZGFwdGVyIG9yIGZhaWxlZCB0byBmaW5kIHJlc291cmNlcyBuZWVkZWQgc3VjaAorYXMgYSBmcmVlIElSUSBsaW5lIG9yIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gSWYgeW91IGFyZSBzdXJlIHRoZXJlIGFyZSBmcmVlCityZXNvdXJjZXMgYXZhaWxhYmxlLCB1c2UgdGhlIGluc21vZCBvcHRpb25zIGRldGFpbGVkIGluIHNjKDQpIHRvIG92ZXJyaWRlCit0aGUgcHJvYmluZyBmdW5jdGlvbi4gIAorCitVcG9uIHRlc3RpbmcsIHRoZSBmb2xsb3dpbmcgcHJvYmxlbSB3YXMgbm90ZWQsIHRoZSBkcml2ZXIgd291bGQgbG9hZCB3aXRob3V0Citwcm9ibGVtcywgYnV0IHRoZSBib2FyZCB3b3VsZCBub3QgcmVzcG9uZCBiZXlvbmQgdGhhdCBwb2ludC4gIFdoZW4gYSBjaGVjayB3YXMgCitkb25lIHdpdGggJ2NhdCAvcHJvYy9pbnRlcnJ1cHRzJyB0aGUgaW50ZXJydXB0IGNvdW50IGZvciBzYyB3YXMgMC4gIEluIHRoZSBldmVudCAKK29mIHRoaXMgcHJvYmxlbSwgY2hhbmdlIHRoZSBCSU9TIHNldHRpbmdzIHNvIHRoYXQgdGhlIGludGVycnVwdHMgaW4gcXVlc3Rpb24gYXJlCityZXNlcnZlZCBmb3IgSVNBIHVzZSBvbmx5LiAgIAorCisKKzIuNiBIb3cgdG8gc2V0dXAgSVNETjRMaW51eCB3aXRoIHRoZSBkcml2ZXIKKworVGhlcmUgYXJlIHRocmVlIG1haW4gY29uZmlndXJhdGlvbnMgd2hpY2ggeW91IGNhbiB1c2Ugd2l0aCB0aGUgZHJpdmVyOgorCitBKQlCYXNpYyBIRExDIGNvbm5lY3Rpb24KK0IpCVBQUCBjb25uZWN0aW9uCitDKQlNTFBQUCBjb25uZWN0aW9uCisKK0l0IHNob3VsZCBiZSBtZW50aW9uZWQgaGVyZSB0aGF0IHlvdSBtYXkgYWxzbyB1c2UgYSB0dHkgY29ubmVjdGlvbiBpZiB5b3UKK2Rlc2lyZS4gVGhlIERvY3VtZW50YXRpb24gZGlyZWN0b3J5IG9mIHRoZSBpc2RuNGxpbnV4IHN1YnN5c3RlbSBvZmZlcnMgZ29vZAorZG9jdW1lbnRhdGlvbiBvbiB0aGlzIGZlYXR1cmUuCisKK0EpIDEwIHN0ZXBzIHRvIHRoZSBlc3RhYmxpc2htZW50IG9mIGEgYmFzaWMgSERMQyBjb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIHBsZWFzZSBvcGVuIHRoZSBpc2RuLWhkbGMgZmlsZSBpbiB0aGUgZXhhbXBsZXMgZGlyZWN0b3J5IGFuZCBmb2xsb3cgYWxvbmcuLi4KKwkKKwlUaGlzIGZpbGUgaXMgYSBzY3JpcHQgdXNlZCB0byBjb25maWd1cmUgYSBCUkkgSVNETiBUQSB0byBlc3RhYmxpc2ggYSAKKwliYXNpYyBIRExDIGNvbm5lY3Rpb24gYmV0d2VlbiBpdHMgdHdvIGNoYW5uZWxzLiAgVHdvIG5ldHdvcmsgCisJaW50ZXJmYWNlcyBhcmUgY3JlYXRlZCBhbmQgdHdvIHJvdXRlcyBhZGRlZCBiZXR3ZWVuIHRoZSBjaGFubmVscy4KKworCWkpICAgdXNpbmcgdGhlIGlzZG5jdHJsIHV0aWxpdHksIGFkZCBhbiBpbnRlcmZhY2Ugd2l0aCAiYWRkaWYiIGFuZCAKKwkgICAgIG5hbWUgaXQgImlzZG4wIgorCWlpKSAgYWRkIHRoZSBvdXRnb2luZyBhbmQgaW5ib3VuZCB0ZWxlcGhvbmUgbnVtYmVycworCWlpaSkgc2V0IHRoZSBMYXllciAyIHByb3RvY29sIHRvIGhkbGMKKwlpdikgIHNldCB0aGUgZWF6IG9mIHRoZSBpbnRlcmZhY2UgdG8gYmUgdGhlIHBob25lIG51bWJlciBvZiB0aGF0IAorCSAgICAgc3BlY2lmaWMgY2hhbm5lbAorCXYpICAgdG8gdHVybiB0aGUgY2FsbGJhY2sgZmVhdHVyZXMgb2ZmLCBzZXQgdGhlIGNhbGxiYWNrIHRvICJvZmYiIGFuZAorCSAgICAgdGhlIGNhbGxiYWNrIGRlbGF5IChjYmRlbGF5KSB0byAwLgorCXZpKSAgdGhlIGhhbmd1cCB0aW1lb3V0IGNhbiBiZSBzZXQgdG8gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlY29uZHMKKwl2aWkpIHRoZSBoYW5ndXAgdXBvbiBpbmNvbWluZyBjYWxsIGNhbiBiZSBzZXQgb24gb3Igb2ZmIAorCXZpaWkpIHVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0byBicmluZyB1cCB0aGUgbmV0d29yayBpbnRlcmZhY2Ugd2l0aCAKKwkgICAgICBhIHNwZWNpZmljIElQIGFkZHJlc3MgYW5kIHBvaW50IHRvIHBvaW50IGFkZHJlc3MKKwlpeCkgIGFkZCBhIHJvdXRlIHRvIHRoZSBJUCBhZGRyZXNzIHRocm91Z2ggdGhlIGlzZG4wIGludGVyZmFjZQorCXgpICAgYSBwaW5nIHNob3VsZCByZXN1bHQgaW4gdGhlIGVzdGFibGlzaG1lbnQgb2YgdGhlIGNvbm5lY3Rpb24KKworCQorQikgRXN0YWJsaXNobWVudCBvZiBhIFBQUCBjb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBwbGVhc2Ugb3BlbiB0aGUgaXNkbi1wcHAgZmlsZSBpbiB0aGUgZXhhbXBsZXMgZGlyZWN0b3J5IGFuZCBmb2xsb3cgYWxvbmcuLi4KKwkKKwlUaGlzIGZpbGUgaXMgYSBzY3JpcHQgdXNlZCB0byBjb25maWd1cmUgYSBCUkkgSVNETiBUQSB0byBlc3RhYmxpc2ggYSAKKwlQUFAgY29ubmVjdGlvbiAJYmV0d2VlbiB0aGUgdHdvIGNoYW5uZWxzLiAgVGhlIGZpbGUgaXMgYWxtb3N0IAorCWlkZW50aWNhbCB0byB0aGUgSERMQyBjb25uZWN0aW9uIGV4YW1wbGUgZXhjZXB0IHRoYXQgdGhlIHBhY2tldCAKKwllbmNhcHN1bGF0aW9uIHR5cGUgaGFzIHRvIGJlIHNldC4KKwkKKwl1c2UgdGhlIHNhbWUgcHJvY2VkdXJlIGFzIGluIHRoZSBIRExDIGNvbm5lY3Rpb24gZnJvbSBzdGVwcyBpKSB0byAKKwlpaWkpIHRoZW4sIGFmdGVyIHRoZSBMYXllciAyIHByb3RvY29sIGlzIHNldCwgc2V0IHRoZSBlbmNhcHN1bGF0aW9uIAorCSJlbmNhcCIgdG8gc3luY3BwcC4gV2l0aCB0aGlzIGRvbmUsIHRoZSByZXN0IG9mIHRoZSBzdGVwcywgaXYpIHRvIHgpIAorCWNhbiBiZSBmb2xsb3dlZCBmcm9tIGFib3ZlLgorCisJVGhlbiwgdGhlIGlwcHBkIChpcHBwIGRhZW1vbikgbXVzdCBiZSBzZXR1cDoKKwkKKwl4aSkgICB1c2UgdGhlIGlwcHBkIGZ1bmN0aW9uIGZvdW5kIGluIC9zYmluL2lwcHBkIHRvIHNldCB0aGUgZm9sbG93aW5nOgorCXhpaSkgIHRha2Ugb3V0IChtaW51cykgVkogY29tcHJlc3Npb24gYW5kIGJzZCBjb21wcmVzc2lvbgorCXhpaWkpIHNldCB0aGUgbXJ1IHNpemUgdG8gMjAwMAorCXhpdikgIGxpbmsgdGhlIHR3byAvZGV2IGludGVyZmFjZXMgdG8gdGhlIGRhZW1vbgorCitOT1RFOiAgQSAiKiIgaW4gdGhlIGluYm91bmQgdGVsZXBob25lIG51bWJlciBzcGVjaWZpZXMgdGhhdCBhIGNhbGwgY2FuIGJlIAorYWNjZXB0ZWQgb24gYW55IG51bWJlci4KKworQykgRXN0YWJsaXNobWVudCBvZiBhIE1MUFBQIGNvbm5lY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gcGxlYXNlIG9wZW4gdGhlIGlzZG4tbXBwcCBmaWxlIGluIHRoZSBleGFtcGxlcyBkaXJlY3RvcnkgYW5kIGZvbGxvdyBhbG9uZy4uLgorCQorCVRoaXMgZmlsZSBpcyBhIHNjcmlwdCB1c2VkIHRvIGNvbmZpZ3VyZSBhIEJSSSBJU0ROIFRBIHRvIGFjY2VwdCBhIAorCU11bHRpIExpbmsgUFBQIGNvbm5lY3Rpb24uIAorCQorCWkpICAgdXNpbmcgdGhlIGlzZG5jdHJsIHV0aWxpdHksIGFkZCBhbiBpbnRlcmZhY2Ugd2l0aCAiYWRkaWYiIGFuZCAKKwkgICAgIG5hbWUgaXQgImlwcHAwIgorCWlpKSAgYWRkIHRoZSBpbmJvdW5kIHRlbGVwaG9uZSBudW1iZXIKKwlpaWkpIHNldCB0aGUgTGF5ZXIgMiBwcm90b2NvbCB0byBoZGxjIGFuZCB0aGUgTGF5ZXIgMyBwcm90b2NvbCB0byAKKwkgICAgIHRyYW5zICh0cmFuc3BhcmVudCkKKwlpdikgIHNldCB0aGUgcGFja2V0IGVuY2Fwc3VsYXRpb24gdG8gc3luY3BwcAorCXYpICAgc2V0IHRoZSBlYXogb2YgdGhlIGludGVyZmFjZSB0byBiZSB0aGUgcGhvbmUgbnVtYmVyIG9mIHRoYXQgCisJICAgICBzcGVjaWZpYyBjaGFubmVsCisJdmkpICB0byB0dXJuIHRoZSBjYWxsYmFjayBmZWF0dXJlcyBvZmYsIHNldCB0aGUgY2FsbGJhY2sgdG8gIm9mZiIgYW5kCisJICAgICB0aGUgY2FsbGJhY2sgZGVsYXkgKGNiZGVsYXkpIHRvIDAuCisJdmkpICB0aGUgaGFuZ3VwIHRpbWVvdXQgY2FuIGJlIHNldCB0byBhIHNwZWNpZmllZCBudW1iZXIgb2Ygc2Vjb25kcworCXZpaSkgdGhlIGhhbmd1cCB1cG9uIGluY29taW5nIGNhbGwgY2FuIGJlIHNldCBvbiBvciBvZmYgCisJdmlpaSkgYWRkIGEgc2xhdmUgaW50ZXJmYWNlIGFuZCBuYW1lIGl0ICJpcHBwMzIiIGZvciBleGFtcGxlCisJaXgpICBzZXQgdGhlIHNpbWlsYXIgcGFyYW1ldGVycyBmb3IgdGhlIGlwcHAzMiBpbnRlcmZhY2UKKwl4KSAgIHVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0byBicmluZy11cCB0aGUgaXBwcDAgaW50ZXJmYWNlIHdpdGggYSAKKwkgICAgIHNwZWNpZmljIElQIGFkZHJlc3MgYW5kIHBvaW50IHRvIHBvaW50IGFkZHJlc3MKKwl4aSkgIGFkZCBhIHJvdXRlIHRvIHRoZSBJUCBhZGRyZXNzIHRocm91Z2ggdGhlIGlwcHAwIGludGVyZmFjZQorCXhpaSkgdXNlIHRoZSBpcHBwZCBmdW5jdGlvbiBmb3VuZCBpbiAvc2Jpbi9pcHBwZCB0byBzZXQgdGhlIGZvbGxvd2luZzoKKwl4aWlpKSB0YWtlIG91dCAobWludXMpIGJzZCBjb21wcmVzc2lvbgorCXhpdikgc2V0IHRoZSBtcnUgc2l6ZSB0byAyMDAwCisJeHYpICBhZGQgKCspIHRoZSBtdWx0aS1saW5rIGZ1bmN0aW9uICIrbXAiCisJeHZpKSAgbGluayB0aGUgdHdvIC9kZXYgaW50ZXJmYWNlcyB0byB0aGUgZGFlbW9uCisKK05PVEU6ICBUbyB1c2UgdGhlIE1MUFBQIGNvbm5lY3Rpb24gdG8gZGlhbCBPVVQgdG8gYSBNTFBQUCBjb25uZWN0aW9uLCBjaGFuZ2UgCit0aGUgaW5ib3VuZCB0ZWxlcGhvbmUgbnVtYmVycyB0byB0aGUgb3V0Z29pbmcgdGVsZXBob25lIG51bWJlcnMgb2YgdGhlIE1MUFBQIAoraG9zdC4KKworCQorMy4gQmV0YSBDaGFuZ2UgU3VtbWFyaWVzIGFuZCBNaXNjZWxsYW5lb3VzIE5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gdXNpbmcgdGhlICJzY2N0cmwiIHV0aWxpdHkgdG8gdXBsb2FkIGZpcm13YXJlIHJldmlzaW9ucyBvbiB0aGUgYm9hcmQsCitwbGVhc2Ugbm90ZSB0aGF0IHRoZSBieXRlIGNvdW50IGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gbWF5IGJlCitkaWZmZXJlbnQgZnJvbSB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSAiZGNiZnduLm5uLnNyIiBmaWxlLiBQbGVhc2UKK2Rpc3JlZ2FyZCB0aGUgZGlzcGxheWVkIGJ5dGUgY291bnQuCisKK0l0IHdhcyBub3RlZCB0aGF0IGluIEJldGEgUmVsZWFzZSAxLCB0aGUgbW9kdWxlIHdvdWxkIGZhaWwgdG8gbG9hZCBhbmQgcmVzdWx0CitpbiBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuICdpbnNtb2QnZWQuIFRoaXMgcHJvYmxlbSB3YXMgY3JlYXRlZCB3aGVuIG9uZSBvZgordGhlIGlzZG40bGludXggcGFyYW1ldGVycywgKGlzZG5fY3RybCwgZGF0YSBmaWVsZCkgd2FzIGZpbGxlZCBpbi4gSW4gc29tZQorY2FzZXMsIHRoaXMgZGF0YSBmaWVsZCB3YXMgTlVMTCwgYW5kIHdhcyBsZWZ0IHVuY2hlY2tlZCwgc28gd2hlbiBpdCB3YXMKK3JlZmVyZW5jZWQuLi4gc2Vndi4gVGhlIGJ1ZyBoYXMgYmVlbiBmaXhlZCBhcm91bmQgbGluZSA2My02OCBvZiBldmVudC5jLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnN5bmNwcHAgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLnN5bmNwcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkMjYwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuc3luY3BwcApAQCAtMCwwICsxLDU4IEBACitTb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHNldHRpbmcgdXAgYSBzeW5jUFBQCitjb25uZWN0aW9uIHVzaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbmVlZCBvbmUgdGhpbmcgYmVzaWRlIHRoZSBpc2RuNGxpbnV4IHBhY2thZ2U6CisKKyAgYSBwYXRjaGVkIHBwcGQgLi4gKEkgY2FsbGVkIGl0IGlwcHBkIHRvIHNob3cgdGhlIGRpZmZlcmVuY2UpCisKK0NvbXBpbGluZyBpc2RuNGxpbnV4IHdpdGggc3luYyBQUFA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gY29tcGlsZSBpc2RuNGxpbnV4IHdpdGggdGhlIHN5bmMgUFBQIHBhcnQsIHlvdSBoYXZlCit0byBhbnN3ZXIgdGhlIGFwcHJvcHJpYXRlIHF1ZXN0aW9uIHdoZW4gZG9pbmcgYSAibWFrZSBjb25maWciCitEb24ndCBmb3JnZXQgdG8gbG9hZCB0aGUgc2xoYy5vCittb2R1bGUgYmVmb3JlIHRoZSBpc2RuLm8gbW9kdWxlLCBpZiBWSi1jb21wcmVzc2lvbiBzdXBwb3J0CitpcyBub3QgY29tcGlsZWQgaW50byB5b3VyIGtlcm5lbC4gKGUuZyBpZiB5b3UgaGF2ZSBubyBQUFAgb3IKK0NTTElQIGluIHRoZSBrZXJuZWwpCisKK1VzaW5nIGlzZG40bGludXggd2l0aCBzeW5jIFBQUDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N5bmMgUFBQIGlzIGp1c3QgYW5vdGhlciBlbmNhcHN1bGF0aW9uIGZvciBpc2RuNGxpbnV4LiBUaGUKK25hbWUgdG8gZW5hYmxlIHN5bmMgUFBQIGVuY2Fwc3VsYXRpb24gaXMgJ3N5bmNwcHAnIC4uIGUuZzoKKworICAvc2Jpbi9pc2RuY3RybCBlbmNhcCBpcHBwMCBzeW5jcHBwCisKK1RoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UgaXMgaGVyZSAnaXBwcDAnLiBZb3UgbmVlZCAKK29uZSBpbnRlcmZhY2Ugd2l0aCB0aGUgbmFtZSAnaXBwcDAnIHRvIHNhdHVyYXRlIHRoZQoraXBwcGQsIHdoaWNoIGNoZWNrcyB0aGUgcHBwIHZlcnNpb24gdmlhIHRoaXMgaW50ZXJmYWNlLgorQ3VycmVudGx5LCBhbGwgZGV2aWNlcyBtdXN0IGhhdmUgdGhlIG5hbWUgaXBwcFggd2hlcmUKKydYJyBpcyBhIGRlY2ltYWwgdmFsdWUuCisKK1RvIHNldCB1cCBhIFBQUCBjb25uZWN0aW9uIHlvdSBuZWVkIHRoZSBpcHBwZCAuLiBZb3UgbXVzdCBzdGFydCAKK3RoZSBpcHBwZCBvbmNlIGFmdGVyIGluc3RhbGxpbmcgdGhlIG1vZHVsZXMuIFRoZSBpcHBwZCAKK2NvbW11bmljYXRlcyB3aXRoIHRoZSBpc2RuNGxpbnV4IGxpbmstbGV2ZWwgZHJpdmVyIHVzaW5nIHRoZQorL2Rldi9pcHBwMCB0byAvZGV2L2lwcHAxNSBkZXZpY2VzLiBPbmUgaXBwcGQgY2FuIGhhbmRsZQorYWxsIGRldmljZXMgYXQgb25jZS4gSWYgeW91IHdhbnQgdG8gdXNlIHR3byBQUFAgY29ubmVjdGlvbnMKK2F0IHRoZSBzYW1lIHRpbWUsIHlvdSBoYXZlIHRvIGNvbm5lY3QgdGhlIGlwcHBkIHRvIHR3bworZGV2aWNlcyAuLiBhbmQgc28gb24uIAorSSd2ZSBpbXBsZW1lbnRlZCBvbmUgYWRkaXRpb25hbCBvcHRpb24gZm9yIHRoZSBpcHBwZDoKKyAndXNlaWZpcCcgd2lsbCBnZXQgKGlmIHNldCB0byBub3QgMC4wLjAuMCkgdGhlIElQIGFkZHJlc3MgCisgZm9yIHRoZSBuZWdvdGlhdGlvbiBmcm9tIHRoZSBhdHRhY2hlZCBuZXR3b3JrLWludGVyZmFjZS4gCisoYWxzbzogaXBwcGQgd2lsbCB0cnkgdG8gbmVnb3RpYXRlIHBvaW50b3BvaW50IElQIGFzIHJlbW90ZSBJUCkKK1lvdSBtdXN0IGRpc2FibGUgQlNELWNvbXByZXNzaW9uLCB0aGlzIGltcGxlbWVudGF0aW9uIGNhbid0CitoYW5kbGUgY29tcHJlc3NlZCBwYWNrZXRzLgorCitDaGVjayB0aGUgZXRjL3JjLmlzZG4uc3luY3BwcCBpbiB0aGUgaXNkbjRrZXJuZWwtdXRpbCBwYWNrYWdlCitmb3IgYW4gZXhhbXBsZSBzZXR1cCBzY3JpcHQuCisKK1RvIHVzZSB0aGUgTVBQUCBzdHVmZiwgeW91IG11c3QgY29uZmlndXJlIGEgc2xhdmUgZGV2aWNlCit3aXRoIGlzZG40bGludXguIE5vdyBjYWxsIHRoZSBpcHBwZCB3aXRoIHRoZSAnK21wJyBvcHRpb24uCitUbyBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGxpbmtzLCB5b3UgbXVzdCB1c2UgdGhlCisnYWRkbGluaycgb3B0aW9uIG9mIHRoZSBpc2RuY3RybCB0b29sLiAocmMuaXNkbi5zeW5jcHBwLk1QUFAgaXMKK2FuIGV4YW1wbGUgc2NyaXB0KQorCitlbmpveSBpdCwKKyAgICBtaWNoYWVsCisgICAgIAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUueDI1IGIvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS54MjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MWE3NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUueDI1CkBAIC0wLDAgKzEsMTg0IEBACisgIAorWC4yNSBzdXBwb3J0IHdpdGhpbiBpc2RuNGxpbnV4Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBhbHBoYS9iZXRhIHRlc3QgY29kZS4gVXNlIGl0IGNvbXBsZXRlbHkgYXQgeW91ciBvd24gcmlzay4KK0FzIG5ldyB2ZXJzaW9ucyBhcHBlYXIsIHRoZSBzdHVmZiBkZXNjcmliZWQgaGVyZSBtaWdodCBzdWRkZW5seSBjaGFuZ2UKK29yIGJlY29tZSBpbnZhbGlkIHdpdGhvdXQgbm90aWNlLgorCitLZWVwIGluIG1pbmQ6CisKK1lvdSBhcmUgdXNpbmcgc2V2ZXJhbCBuZXcgcGFydHMgb2YgdGhlIDIuMi54IGtlcm5lbCBzZXJpZXMgd2hpY2gKK2hhdmUgbm90IGJlZW4gdGVzdGVkIGluIGEgbGFyZ2Ugc2NhbGUuIFRoZXJlZm9yZSwgeW91IG1pZ2h0IGVuY291bnRlcgorbW9yZSBidWdzIGFzIHVzdWFsLgorCistIElmIHlvdSBjb25uZWN0IHRvIGFuIFguMjUgbmVpZ2hib3VyIG5vdCBvcGVyYXRlZCBieSB5b3Vyc2VsZiwgQVNLIHRoZQorICBvdGhlciBzaWRlIGZpcnN0LiBCZSBwcmVwYXJlZCB0aGF0IGJ1Z3MgaW4gdGhlIHByb3RvY29sIGltcGxlbWVudGF0aW9uCisgIG1pZ2h0IHJlc3VsdCBpbiBwcm9ibGVtcy4KKworLSBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBuZXZlciB3aXBlZCBvdXQgbXkgd2hvbGUgaGFyZCBkaXNrIHlldC4gQnV0IGFzCisgIHRoaXMgaXMgZXhwZXJpbWVudGFsIGNvZGUsIGRvbid0IGJsYW1lIG1lIGlmIHRoYXQgaGFwcGVuZWQgdG8geW91LgorICBCYWNraW5nIHVwIGltcG9ydGFudCBkYXRhIHdpbGwgbmV2ZXIgaGFybS4KKworLSBNb25pdG9yIHlvdXIgaXNkbiBjb25uZWN0aW9ucyB3aGlsZSB1c2luZyB0aGlzIHNvZnR3YXJlLiBUaGlzIHNob3VsZAorICBwcmV2ZW50IHlvdSBmcm9tIHVuZGVzaXJlZCBwaG9uZSBiaWxscyBpbiBjYXNlIG9mIGRyaXZlciBwcm9ibGVtcy4KKyAgCisgCisKKworSG93IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKK1RoZSBJVFUtVCAoZm9ybWVyIENDSVRUKSBYLjI1IG5ldHdvcmsgcHJvdG9jb2wgbGF5ZXIgaGFzIGJlZW4gaW1wbGVtZW50ZWQKK2luIHRoZSBMaW51eCBzb3VyY2UgdHJlZSBzaW5jZSB2ZXJzaW9uIDIuMS4xNi4gVGhlIGlzZG4gc3Vic3lzdGVtIG1pZ2h0IGJlIAordXNlZnVsIHRvIHJ1biBYLjI1IG9uIHRvcCBvZiBJU0ROLiBJZiB5b3Ugd2FudCB0byB0cnkgaXQsIHNlbGVjdAorCisgICAiQ0NJVFQgWC4yNSBQYWNrZXQgTGF5ZXIiCisKK2Zyb20gdGhlIG5ldHdvcmtpbmcgb3B0aW9ucyBhcyB3ZWxsIGFzCisKKyAgICJJU0ROIFN1cHBvcnQiIGFuZCAiWC4yNSBQTFAgb24gVG9wIG9mIElTRE4iCisKK2Zyb20gdGhlIElTRE4gc3Vic3lzdGVtIG9wdGlvbnMgd2hlbiB5b3UgY29uZmlndXJlIHlvdXIga2VybmVsIGZvcgorY29tcGlsYXRpb24uIFlvdSBjdXJyZW50bHkgYWxzbyBuZWVkIHRvIGVuYWJsZQorIlByb21wdCBmb3IgZGV2ZWxvcG1lbnQgYW5kL29yIGluY29tcGxldGUgY29kZS9kcml2ZXJzIiBmcm9tIHRoZQorIkNvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucyIgbWVudS4gRm9yIHRoZSB4MjV0cmFjZSB1dGlsaXR5IHRvIHdvcmsKK3lvdSBhbHNvIG5lZWQgdG8gZW5hYmxlICJQYWNrZXQgc29ja2V0Ii4KKworRm9yIGxvY2FsIHRlc3RpbmcgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0byBlbmFibGUgdGhlIGlzZG5sb29wIGRyaXZlcgorZnJvbSB0aGUgaXNkbiBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG1lbnUuCisKK0ZvciB0ZXN0aW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCBpc2RuIGRyaXZlcnMgYW5kIHRoZSBYLjI1IFBMUAorcHJvdG9jb2wgYXJlIGNvbXBpbGVkIGFzIGxvYWRhYmxlIG1vZHVsZXMuIExpa2UgdGhpcywgeW91IGNhbiByZWNvdmVyCitmcm9tIGNlcnRhaW4gZXJyb3JzIGJ5IHNpbXBseSB1bmxvYWRpbmcgYW5kIHJlbG9hZGluZyB0aGUgbW9kdWxlcy4KKworCisKK1doYXQncyBpdCBmb3I/IEhvdyB0byB1c2UgaXQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitYLjI1IG9uIHRvcCBvZiBpc2RuIG1pZ2h0IGJlIHVzZWZ1bCB3aXRoIHR3byBkaWZmZXJlbnQgc2NlbmFyaW9zOgorCistIFlvdSBtaWdodCB3YW50IHRvIGFjY2VzcyBhIHB1YmxpYyBYLjI1IGRhdGEgbmV0d29yayBmcm9tIHlvdXIgTGludXggYm94LgorICBZb3UgY2FuIHVzZSBpNGwgaWYgeW91IHdlcmUgcGh5c2ljYWxseSBjb25uZWN0ZWQgdG8gdGhlIFguMjUgc3dpdGNoCisgIGJ5IGFuIElTRE4gQi1jaGFubmVsIChsZWFzZWQgbGluZSBhcyB3ZWxsIGFzIGRpYWwgdXAgY29ubmVjdGlvbiBzaG91bGQKKyAgd29yaykuCisKKyAgVGhpcyBjb3JyZXNwb25kcyB0byBJVFUtVCByZWNvbW1lbmRhdGlvbiBYLjMxIENhc2UgQSAoY2lyY3VpdC1tb2RlCisgIGFjY2VzcyB0byBQU1BETiBbcGFja2V0IHN3aXRjaGVkIHB1YmxpYyBkYXRhIG5ldHdvcmtdKS4KKworICBOT1RFOiBYLjMxIGFsc28gY292ZXJzIGEgQ2FzZSBCIChhY2Nlc3MgdG8gUFNQRE4gdmlhIHZpcnR1YWwKKyAgY2lyY3VpdCAvIHBhY2tldCBtb2RlIHNlcnZpY2UpLiBUaGUgbGF0dGVyIG1vZGUgKHdoaWNoIGluIHRoZW9yeQorICBhbHNvIGFsbG93cyB1c2luZyB0aGUgRC1jaGFubmVsKSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGlzZG40bGludXguCisgIEl0IHNob3VsZCBob3dldmVyIGJlIHBvc3NpYmxlIHRvIGVzdGFibGlzaCBzdWNoIHBhY2tldCBtb2RlIGNvbm5lY3Rpb25zCisgIHdpdGggY2VydGFpbiBhY3RpdmUgaXNkbiBjYXJkcyBwcm92aWRlZCB0aGF0IHRoZSBmaXJtd2FyZSBzdXBwb3J0cyBYLjMxCisgIGFuZCB0aGUgZHJpdmVyIGV4cG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIHRoZSB1c2VyLiBDdXJyZW50bHksIAorICB0aGUgQVZNIEIxIGRyaXZlciBpcyB0aGUgb25seSBkcml2ZXIgd2hpY2ggZG9lcyBzby4gKEl0IHNob3VsZCBiZQorICBwb3NzaWJsZSB0byBhY2Nlc3MgRC1jaGFubmVsIFguMzEgd2l0aCBhY3RpdmUgQVZNIGNhcmRzIHVzaW5nIHRoZQorICBDQVBJIGludGVyZmFjZSBvZiB0aGUgQVZNLUIxIGRyaXZlcikuCisKKy0gT3IgeW91IG1pZ2h0IHdhbnQgdG8gb3BlcmF0ZSBjZXJ0YWluIElTRE4gdGVsZXNlcnZpY2VzIG9uIHlvdXIgbGludXgKKyAgYm94LiBBIGxvdCBvZiB0aG9zZSB0ZWxlc2VydmljZXMgcnVuIG9uIHRvcCBvZiB0aGUgSVNPLTgyMDgKKyAgKERURS1EVEUgbW9kZSkgbmV0d29yayBsYXllciBwcm90b2NvbC4gSVNPLTgyMDggaXMgZXNzZW50aWFsbHkgdGhlCisgIHNhbWUgYXMgSVRVLVQgWC4yNS4KKworICBQb3B1bGFyIGNhbmRpZGF0ZXMgb2Ygc3VjaCB0ZWxlc2VydmljZXMgYXJlIEVVUk9maWxlIHRyYW5zZmVyIG9yIGFueQorICB0ZWxlc2VydmljZSBhcHBseWluZyBJVFUtVCByZWNvbW1lbmRhdGlvbiBULjkwLgorCitUbyB1c2UgdGhlIFguMjUgcHJvdG9jb2wgb24gdG9wIG9mIGlzZG4sIGp1c3QgY3JlYXRlIGFuIGlzZG4gbmV0d29yaworaW50ZXJmYWNlIGFzIHVzdWFsLCBjb25maWd1cmUgeW91ciBvd24gYW5kL29yIHBlZXIncyBJU0ROIG51bWJlcnMsCithbmQgY2hvb3NlIHgyNWlmYWNlIGVuY2Fwc3VsYXRpb24gYnkKKworICAgaXNkbmN0cmwgZW5jYXAgPGlmYWNlLW5hbWU+IHgyNWlmYWNlLgorCitPbmNlIGVuY2FwIGlzIHNldCBsaWtlIHRoaXMsIHRoZSBkZXZpY2UgY2FuIGJlIHVzZWQgYnkgdGhlIFguMjUgcGFja2V0IGxheWVyLgorCitBbGwgdGhlIHN0dWZmIG5lZWRlZCBmb3IgWC4yNSBpcyBpbXBsZW1lbnRlZCBpbnNpZGUgdGhlIGlzZG4gbGluaworbGV2ZWwgKG1haW5seSBpc2RuX25ldC5jIGFuZCBzb21lIG5ldyBzb3VyY2UgZmlsZXMpLiBUaHVzLCBpdCBzaG91bGQKK3dvcmsgd2l0aCBldmVyeSBleGlzdGluZyBITCBkcml2ZXIuIEkgd2FzIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IG9wZW4gWC4yNQorY29ubmVjdGlvbnMgb24gdG9wIG9mIHRoZSBpc2RubG9vcCBkcml2ZXIgYW5kIHRoZSBoaXNheCBkcml2ZXIuCisieDI1aWZhY2UiLWVuY2Fwc3VsYXRpb24gYnlwYXNzZXMgZGVtYW5kIGRpYWxpbmcuIERpYWxpbmcgd2lsbCBiZQoraW5pdGlhdGVkIHdoZW4gdGhlIHVwcGVyIChYLjI1IHBhY2tldCkgbGF5ZXIgcmVxdWVzdHMgdGhlIGxhcGIgZGF0YWxpbmsgdG8KK2JlIGVzdGFibGlzaGVkLiBCdXQgaGFuZ3VwIHRpbWVvdXQgaXMgc3RpbGwgYWN0aXZlLiBXaGVuZXZlciBhIGhhbmd1cAorb2NjdXJzLCBhbGwgZXhpc3RpbmcgWC4yNSBjb25uZWN0aW9ucyBvbiB0aGF0IGxpbmsgd2lsbCBiZSBjbGVhcmVkCitJdCBpcyByZWNvbW1lbmRlZCB0byB1c2Ugc3VmZmljaWVudGx5IGxhcmdlIGhhbmd1cC10aW1lb3V0cyBmb3IgdGhlCitpc2RuIGludGVyZmFjZXMuCisKKworSW4gb3JkZXIgdG8gc2V0IHVwIGEgY29uZm9ybWluZyBwcm90b2NvbCBzdGFjayB5b3UgYWxzbyBuZWVkIHRvCitzcGVjaWZ5IHRoZSBwcm9wZXIgbDJfcHJvdCBwYXJhbWV0ZXI6CisKK1RvIG9wZXJhdGUgaW4gSVNPLTgyMDggIFguMjUgRFRFLURURSBtb2RlLCB1c2UKKworICAgaXNkbmN0cmwgbDJfcHJvdCA8aWZhY2UtbmFtZT4geDc1aQorCitUbyBhY2Nlc3MgYW4gWC4yNSBuZXR3b3JrIHN3aXRjaCB2aWEgaXNkbiAoeW91ciBsaW51eCBib3ggaXMgdGhlIERURSksIHVzZQorCisgICBpc2RuY3RybCBsMl9wcm90IDxpZmFjZS1uYW1lPiB4MjVkdGUKKworVG8gbWltaWMgYW4gWC4yNSBuZXR3b3JrIHN3aXRjaCAoRENFIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24pLCB1c2UKKworICAgaXNkbmN0cmwgbDJfcHJvdCA8aWZhY2UtbmFtZT4geDI1ZGNlCisKK0hvd2V2ZXIsIHgyNWR0ZSBvciB4MjVkY2UgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYnkgYW55IHJlYWwgSEwKK2xldmVsIGRyaXZlci4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHg3NWkgYW5kIHgyNWR0ZS9kY2UgaXMgdGhhdAoreDI1ZFt0Y11lIHVzZXMgZml4ZWQgbGFwX2IgYWRkcmVzc2VzLiBXaXRoIHg3NWksIHRoZSBzaWRlIHdoaWNoCitpbml0aWF0ZXMgdGhlIGlzZG4gY29ubmVjdGlvbiB1c2VzIHRoZSBEVEUncyBsYXBfYiBhZGRyZXNzIHdoaWxlIHRoZQorY2FsbGVkIHNpZGUgdXNlZCB0aGUgRENFJ3MgbGFwX2IgYWRkcmVzcy4gVGh1cywgbDJfcHJvdCB4NzVpIG1pZ2h0Citwcm9iYWJseSB3b3JrIGlmIHlvdSBhY2Nlc3MgYSBwdWJsaWMgWC4yNSBuZXR3b3JrIGFzIGxvbmcgYXMgdGhlCitjb3JyZXNwb25kaW5nIGlzZG4gY29ubmVjdGlvbiBpcyBzZXQgdXAgYnkgeW91LiBBdCBsZWFzdCBvbmUgdGVzdAord2FzIHN1Y2Nlc3NmdWwgdG8gY29ubmVjdCB2aWEgaXNkbjRsaW51eCB0byBhbiBYLjI1IHN3aXRjaCB1c2luZyB0aGlzCit0cmljay4gQXQgdGhlIHN3aXRjaCBzaWRlLCBhIHRlcm1pbmFsIGFkYXB0ZXIgWC4yMSB3YXMgdXNlZCB0byBjb25uZWN0CitpdCB0byB0aGUgaXNkbi4KKworCitIb3cgdG8gc2V0IHVwIGEgdGVzdCBpbnN0YWxsYXRpb24/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHRlc3QgWC4yNSBvbiB0b3Agb2YgaXNkbiwgeW91IG5lZWQgdG8gZ2V0CisKKy0gYSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgImlzZG5jdHJsIiBwcm9ncmFtIHRoYXQgc3VwcG9ydHMgc2V0dGluZyB0aGUgbmV3CisgIFguMjUgc3BlY2lmaWMgcGFyYW1ldGVycy4KKworLSB0aGUgeDI1LXV0aWxzLTIuWCBwYWNrYWdlIGZyb20gCisgIGZ0cDovL2Z0cC5oZXMuaWtpLmZpL3B1Yi9oYW0vbGludXgvYXgyNS94MjV1dGlscy0qCisgIChkb24ndCBjb25mdXNlIHRoZSB4MjUtdXRpbHMgd2l0aCB0aGUgYXgyNS11dGlscykKKworLSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyBsaW51eCBQRl9YMjUgc29ja2V0cyAoc29tZSBhcmUKKyAgY29udGFpbmVkIGluIHRoZSB4MjUtdXRpbCBwYWNrYWdlKS4KKworQmVmb3JlIGNvbXBpbGluZyB0aGUgdXNlciBsZXZlbCB1dGlsaXRpZXMgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyLworcHJlcHJvY2Vzc29yIHdpbGwgZmV0Y2ggdGhlIHByb3BlciBrZXJuZWwgaGVhZGVyIGZpbGVzIG9mIHRoaXMga2VybmVsCitzb3VyY2UgdHJlZS4gRWl0aGVyIG1ha2UgL3Vzci9pbmNsdWRlL2xpbnV4IGEgc3ltYm9saWMgbGluayBwb2ludGluZyB0byAKK3RoaXMga2VybmVsJ3MgaW5jbHVkZS9saW51eCBkaXJlY3Rvcnkgb3Igc2V0IHRoZSBhcHByb3ByaWF0ZSBjb21waWxlciBmbGFncy4KKworV2hlbiBhbGwgZHJpdmVycyBhbmQgaW50ZXJmYWNlcyBhcmUgbG9hZGVkIGFuZCBjb25maWd1cmVkIHlvdSBuZWVkIHRvCitpZmNvbmZpZyB0aGUgbmV0d29yayBpbnRlcmZhY2VzIHVwIGFuZCBhZGQgWC4yNS1yb3V0ZXMgdG8gdGhlbS4gVXNlCit0aGUgdXN1YWwgaWZjb25maWcgdG9vbC4KKworaWZjb25maWcgPGlmYWNlLW5hbWU+IHVwCisKK0J1dCBhIHNwZWNpYWwgeDI1cm91dGUgdG9vbCAoZGlzdHJpYnV0ZWQgd2l0aCB0aGUgeDI1LXV0aWwgcGFja2FnZSkKK2lzIG5lZWRlZCB0byBzZXQgdXAgWC4yNSByb3V0ZXMuIEkuZS4gCisKK3gyNXJvdXRlIGFkZCAwMSA8aWZhY2UtbmFtZT4KKword2lsbCBjYXVzZSBhbGwgeC4yNSBjb25uZWN0aW9ucyB0byB0aGUgZGVzdGluYXRpb24gWC4yNS1hZGRyZXNzCisiMDEiIHRvIGJlIHJvdXRlZCB0byB5b3VyIGNyZWF0ZWQgaXNkbiBuZXR3b3JrIGludGVyZmFjZS4KKworVGhlcmUgYXJlIGN1cnJlbnRseSBubyByZWFsIFguMjUgYXBwbGljYXRpb25zIGF2YWlsYWJsZS4gSG93ZXZlciwgZm9yCit0ZXN0cywgdGhlIHgyNS11dGlscyBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0ZWxuZXQKK2FuZCB0ZWxuZXRkIHRoYXQgdXNlcyBYLjI1IHNvY2tldHMgaW5zdGVhZCBvZiB0Y3AvaXAgc29ja2V0cy4gWW91IGNhbgordXNlIHRob3NlIGZvciB5b3VyIGZpcnN0IHRlc3RzLiBGdXJ0aGVybW9yZSwgeW91IG1pZ2h0IGNoZWNrCitmdHA6Ly9mdHAuaGFtYnVyZy5wb3AuZGUvcHViL0xPQ0FML2xpbnV4L2k0bC1lZnQvIHdoaWNoIGNvbnRhaW5zIHNvbWUKK2FscGhhLXRlc3QgaW1wbGVtZW50YXRpb24gKCJlZnRwNGxpbnV4Iikgb2YgdGhlIEVVUk9maWxlIHRyYW5zZmVyCitwcm90b2NvbC4KKworVGhlIHNjcmlwdHMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgZWZ0cDRsaW51eCB0ZXN0IHJlbGVhc2VzIG1pZ2h0IGFsc28KK3Byb3ZpZGUgdXNlZnVsIGV4YW1wbGVzIGZvciBzZXR0aW5nIHVwIFguMjUgb24gdG9wIG9mIGlzZG4uCisKK1RoZSB4MjUtdXRpbGl0eSBwYWNrYWdlIGFsc28gY29udGFpbnMgYW4geDI1dHJhY2UgdG9vbCB0aGF0IGNhbiBiZQordXNlZCB0byBtb25pdG9yIFguMjUgcGFja2V0cyByZWNlaXZlZCBieSB0aGUgbmV0d29yayBpbnRlcmZhY2VzLgorVGhlIC9wcm9jL25ldC94MjUqIGZpbGVzIGFsc28gY29udGFpbiB1c2VmdWwgaW5mb3JtYXRpb24uIAorCistIEhlbm5lcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL3N5bmNQUFAuRkFRIGIvRG9jdW1lbnRhdGlvbi9pc2RuL3N5bmNQUFAuRkFRCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTdhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vc3luY1BQUC5GQVEKQEAgLTAsMCArMSwyMjQgQEAKK3NpbXBsZSBpc2RuNGxpbnV4IFBQUCBGQVEgLi4gdG8gYmUgY29udGludWVkIC4uIG5vdCAnZGVidWdnZWQnIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitRMDE6IHdoYXQncyBwcHBkLCBpcHBwZCwgc3luY1BQUCwgYXN5bmNQUFAgPz8KK1EwMjogZXJyb3IgbWVzc2FnZSAidGhpcyBzeXN0ZW0gbGFja3MgUFBQIHN1cHBvcnQiCitRMDM6IHN0cmFuZ2UgaW5mb3JtYXRpb24gdXNpbmcgJ2lmY29uZmlnJworUTA0OiBNUFBQPz8gV2hhdCdzIHRoYXQgYW5kIGhvdyBjYW4gSSB1c2UgaXQgLi4uCitRMDU6IEkgdHJpZWQgTVBQUCBidXQgaXQgZG9lc24ndCB3b3JrIAorUTA2OiBjYW4gSSB1c2UgYXN5bmNocm9ub3VzIFBQUCBlbmNhcHN1bGF0aW9uIHdpdGggbmV0d29yayBkZXZpY2VzCitRMDc6IEEgU3VuSVNETiBtYWNoaW5lIGNhbid0IGNvbm5lY3QgdG8gbXkgaTRsIHN5c3RlbQorUTA4OiBJIHdhbm5hIHRhbGsgdG8gc2V2ZXJhbCBtYWNoaW5lcywgd2hpY2ggbmVlZCBkaWZmZXJlbnQgY29uZmlncworUTA5OiBTdGFydGluZyB0aGUgaXBwcGQsIEkgZ2V0IG9ubHkgZXJyb3IgbWVzc2FnZXMgZnJvbSBpNGwKK1ExMDogSSB3YW5uYSB1c2UgZHluYW1pYyBJUCBhZGRyZXNzIGFzc2lnbm1lbnQgCitRMTE6IEkgY2FuJ3QgY29ubmVjdC4gSG93IGNhbiBJIGNoZWNrIHdoZXJlIHRoZSBwcm9ibGVtIGlzLgorUTEyOiBIb3cgY2FuIEkgcmVkdWNlIGxvZ2luIGRlbGF5PyAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitRMDE6IHBwcGQsIGlwcHBkLCBzeW5jUFBQLCBhc3luY1BQUCAuLiB3aGF0IGlzIHRoYXQgPworICAgd2hhdCBzaG91bGQgSSB1c2U/CitBOiBUaGUgcHBwZCBpcyBmb3IgYXN5bmNocm9ub3VzIFBQUCAuLiBhc3luY2hyb25vdXMgbWVhbnMKKyAgIGhlcmUsIHRoZSBmcmFtaW5nIGlzIGNoYXJhY3RlciBiYXNlZC4gKGUuZyB3aGVuCisgICB1c2luZyB0dHlJKiBvciB0dHkqIGRldmljZXMpCisKKyAgIFRoZSBpcHBwZCBoYW5kbGVzIFBQUCBwYWNrZXRzIGNvbWluZyBpbiBIRExDCisgICBmcmFtZXMgKGJpdCBiYXNlZCBwcm90b2NvbCkgLi4uIFRoZSBQUFAgZHJpdmVyCisgICBpbiBpc2RuNGxpbnV4IHB1c2hlcyBhbGwgSVAgcGFja2V0cyBkaXJlY3QKKyAgIHRvIHRoZSBuZXR3b3JrIGxheWVyIGFuZCBhbGwgUFBQIHByb3RvY29sCisgICBmcmFtZXMgdG8gdGhlIC9kZXYvaXBwcCogZGV2aWNlLiAKKyAgIFNvLCB0aGUgaXBwcGQgaXMgYSBzaW1wbGUgZXh0ZXJuYWwgbmV0d29yaworICAgcHJvdG9jb2wgaGFuZGxlci4KKworICAgSWYgeW91IGxvZ2luIGludG8gYSByZW1vdGUgbWFjaGluZSB1c2luZyB0aGUKKyAgIC9kZXYvdHR5SSogZGV2aWNlcyBhbmQgdGhlbiBlbmFibGUgUFBQIG9uIHRoZQorICAgcmVtb3RlIHRlcm1pbmFsIHNlcnZlciAtPiB1c2UgdGhlICdvbGQnIHBwcGQKKworICAgSWYgeW91ciByZW1vdGUgc2lkZSBpbW1lZGlhdGVseSBzdGFydHMgdG8gc2VuZAorICAgZnJhbWVzIC4uLiB5b3UgcHJvYmFibHkgY29ubmVjdCB0byBhIAorICAgc3luY1BQUCBtYWNoaW5lIC4uIHVzZSB0aGUgbmV0d29yayBkZXZpY2UgcGFydAorICAgb2YgaXNkbjRsaW51eCB3aXRoIHRoZSAnc3luY3BwcCcgZW5jYXBzdWxhdGlvbgorICAgYW5kIG1ha2Ugc3VyZSwgdGhhdCB0aGUgaXBwcGQgaXMgcnVubmluZyBhbmQgCisgICBjb25uZWN0ZWQgdG8gYXQgbGVhc3Qgb25lIC9kZXYvaXBwcCouIENoZWNrIHRoZSAKKyAgIGlzZG40bGludXggbWFudWFsIG9uIGhvdyB0byBjb25maWd1cmUgYSBuZXR3b3JrIGRldmljZS4KKworLS0KKworUTAyOiB3aGVuIEkgc3RhcnQgdGhlIGlwcHBkIC4uIEkgb25seSBnZXQgdGhlCisgICBlcnJvciBtZXNzYWdlICJ0aGlzIHN5c3RlbSBsYWNrcyBQUFAgc3VwcG9ydCIKK0E6IGNoZWNrIHRoYXQgYXQgbGVhc3QgdGhlIGRldmljZSAnaXBwcDAnIGV4aXN0cy4KKyAgICh5b3UgY2FuIGNoZWNrIHRoaXMgZS5nIHdpdGggdGhlIHByb2dyYW0gJ2lmY29uZmlnJykKKyAgIFRoZSBpcHBwZCBORUVEUyB0aGlzIGRldmljZSB1bmRlciBUSElTIG5hbWUgLi4gCisgICBJZiB0aGlzIGRldmljZSBkb2Vzbid0IGV4aXN0cywgdXNlOgorCWlzZG5jdHJsIGFkZGlmIGlwcHAwCisJaXNkbmN0cmwgZW5jYXAgaXBwcDAgc3luY3BwcAorCS4uLiAoc2VlIGlzZG40bGludXggZG9jIGZvciBtb3JlKSAuLi4KK0E6IE1heWJlIHlvdSBoYXZlIGNvbXBpbGVkIHRoZSBpcHBwZCB3aXRoIGFub3RoZXIKKyAgIGtlcm5lbCBzb3VyY2UgdHJlZSB0aGFuIHRoZSBrZXJuZWwgeW91IGN1cnJlbnRseQorICAgcnVuIC4uLiAKKworLS0KKworUTAzOiB3aGVuIEkgbGlzdCB0aGUgbmV0ZGV2aWNlcyB3aXRoIGlmY29uZmlnIEkgc2VlLCB0aGF0CisgICBteSBJU0ROIGludGVyZmFjZSBoYXMgYSBIV2FkZHIgYW5kIElSUT0wIGFuZCBCYXNlIAorICAgYWRkcmVzcyA9IDAgCitBOiBUaGUgZGV2aWNlIGlzIGEgZmFrZSBldGhlcm5ldCBkZXZpY2UgLi4gaWdub3JlIElSUSBhbmQgYmFzZWFkZHIKKyAgIFlvdSBuZWVkIHRoZSBIV2FkZHIgb25seSBmb3IgZXRoZXJuZXQgZW5jYXBzdWxhdGlvbi4KKyAgIAorLS0KKworUTA0OiBNUFBQPz8gV2hhdCdzIHRoYXQgYW5kIGhvdyBjYW4gSSB1c2UgaXQgLi4uCisKK0E6IE1QUFAgb3IgTVAgb3IgTVBQIChXYXJuaW5nOiBNUCBpcyBhbHNvIGFuIAorICAgYWNyb255bSBmb3IgJ011bHRpIFByb2Nlc3NvcicpIHN0YW5kcyBmb3IKKyAgIE11bHRpIFBvaW50IHRvIFBvaW50IGFuZCBtZWFucyBidW5kbGluZworICAgb2Ygc2V2ZXJhbCBjaGFubmVscyB0byBvbmUgbG9naWNhbCBzdHJlYW0uCisgICBUbyBlbmFibGUgTVBQUCBuZWdvdGlhdGlvbiB5b3UgbXVzdCBjYWxsIHRoZQorICAgaXBwcGQgd2l0aCB0aGUgJyttcCcgb3B0aW9uLiAKKyAgIFlvdSBtdXN0IGFsc28gY29uZmlndXJlIGEgc2xhdmUgZGV2aWNlIGZvcgorICAgZXZlcnkgYWRkaXRpb25hbCBjaGFubmVsLiAoc2VlIHRoZSBpNGwgbWFudWFsCisgICBmb3IgbW9yZSkKKyAgIFRvIHVzZSBjaGFubmVsIGJ1bmRsaW5nIHlvdSBtdXN0IGZpcnN0IGFjdGl2YXRlCisgICB0aGUgJ21hc3Rlcicgb3IgaW5pdGlhbCBjYWxsLiBOb3cgeW91IGNhbiBhZGQgCisgICB0aGUgc2xhdmUgY2hhbm5lbHMgd2l0aCB0aGUgY29tbWFuZDoKKyAgICAgICBpc2RuY3RybCBhZGRsaW5rIDxkZXZpY2U+CisgICBlLmc6CisgICAgICAgaXNkbmN0cmwgYWRkbGluayBpcHBwMAorICAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBvdGhlciBlbmNhcHN1bGF0aW9ucyBvZgorICAgaXNkbjRsaW51eCEgV2l0aCBzeW5jUFBQLCB0aGVyZSBpcyBubyBhdXRvbWF0aWMKKyAgIGFjdGl2YXRpb24gb2Ygc2xhdmUgZGV2aWNlcy4KKworLS0KKworUTA1OiBJIHRyaWVkIE1QUFAgYnV0IGl0IGRvZXNuJ3Qgd29yayAuLiB0aGUgaXBwcGQKKyAgIHdyaXRlcyBpbiB0aGUgZGVidWcgbG9nIHNvbWV0aGluZyBsaWtlOgorICAgLi4gcmN2ZCBbMF1bcHJvdG89MHgzZF0gYzAgMDAgMDAgMDAgODAgZmQgMDEgMDEgMDAgMGEgLi4uCisgICAuLiBzZW50IFswXVtMQ1AgUHJvdFJlaiBpZD0weDIgMDAgM2QgYzAgMDAgMDAgMDAgODAgZmQgMDEgLi4uCisKK0E6IHlvdSBmb3Jnb3QgdG8gY29tcGlsZSBNUFBQL1JGQzE3MTcgc3VwcG9ydCBpbnRvIHRoZQorICAgSVNETiBTdWJzeXN0ZW0uIFJlY29tcGlsZSB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQuCisKKy0tCisKK1EwNjogY2FuIEkgdXNlIGFzeW5jaHJvbm91cyBQUFAgZW5jYXBzdWxhdGlvbgorICAgb3ZlciB0aGUgbmV0d29yayBpbnRlcmZhY2Ugb2YgaXNkbjRsaW51eCAuLgorCitBOiBObyAuLiB0aGF0J3Mgbm90IHBvc3NpYmxlIC4uIFVzZSB0aGUgc3RhbmRhcmQKKyAgIFBQUCBwYWNrYWdlIG92ZXIgdGhlIC9kZXYvdHR5SSogZGV2aWNlcy4gWW91CisgICBtdXN0IG5vdCB1c2UgdGhlIGlwcHBkIGZvciB0aGlzLgorICAgCistLQorCitRMDc6IEEgU3VuSVNETiBtYWNoaW5lIHRyaWVzIHRvIGNvbm5lY3QgbXkgaTRsIHN5c3RlbSwKKyAgIHdoaWNoIGRvZXNuJ3Qgd29yay4KKyAgIENoZWNraW5nIHRoZSBkZWJ1ZyBsb2cgSSBqdXN0IHNhdyBnYXJiYWdlIGxpa2U6CishIVsgLi4uIGZpbGwgaW4gdGhlIGxpbmUgLi4uIF0hIQorCitBOiBUaGUgU3VuIHRyaWVzIHRvIHRhbGsgYXN5bmNocm9ub3VzIFBQUCAuLi4gaTRsCisgICBjYW4ndCB1bmRlcnN0YW5kIHRoaXMgLi4uIHRyeSB0byB1c2UgdGhlIHR0eUkqCisgICBkZXZpY2VzIHdpdGggdGhlIHN0YW5kYXJkIFBQUC9wcHBkIHBhY2thZ2UKKworQTogKGZyb20gQWxleGFudGVyIFN0cmF1c3M6ICkKKyEhWyAuLi4gZmlsbCBpbiBtYWlsIF0hIQorCistLQorCitRMDg6IEkgd2FubmEgdGFsayB0byByZW1vdGUgbWFjaGluZXMsIHdoaWNoIG5lZWQKKyAgIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uIFRoZSBvbmx5IHdheQorICAgSSBmb3VuZCB0byBkbyB0aGlzIGlzIHRvIGtpbGwgdGhlIGlwcHBkIGFuZAorICAgc3RhcnQgYSBuZXcgb25lIHdpdGggYW5vdGhlciBjb25maWcgdG8gY29ubmVjdAorICAgdG8gdGhlIHNlY29uZCBtYWNoaW5lLiAKKworQTogeW91IG11c3QgYmluZCBhIG5ldHdvcmsgaW50ZXJmYWNlIGV4cGxpY2l0bHkgdG8KKyAgIGFuIGlwcHAgZGV2aWNlLCB3aGVyZSB5b3UgY2FuIGNvbm5lY3QgYSAoZm9yIHRoaXMKKyAgIGludGVyZmFjZSkgaW5kaXZpZHVhbGx5IGNvbmZpZ3VyZWQgaXBwcGQuCisKKy0tCisKK1EwOTogV2hlbiBJIHN0YXJ0IHRoZSBpcHBwZCBJIG9ubHkgZ2V0IGVycm9yIG1lc3NhZ2VzCisgICBmcm9tIHRoZSBpNGwgZHJpdmVyIC4uIAorCitBOiBXaGVuIHN0YXJ0aW5nLCB0aGUgaXBwcGQgY2FsbHMgZnVuY3Rpb25zIHdoaWNoIG1heSAKKyAgIHRyaWdnZXIgYSBuZXR3b3JrIHBhY2tldC4gKGUuZyBnZXRob3N0YnluYW1lKCkpLgorICAgV2l0aG91dCB0aGUgaXBwcGQgKGF0IHRoaXMgbW9tZW50LCBpdCBpcyBub3QKKyAgIGZ1bGx5IHN0YXJ0ZWQpIHdlIGNhbid0IGhhbmRsZSB0aGlzIG5ldHdvcmsgcmVxdWVzdC4KKyAgIFRyeSB0byBjb25maWd1cmUgaG9zdG5hbWVzIG5lY2Vzc2FyeSBmb3IgdGhlIGlwcHBkCisgICBpbiB5b3VyIGxvY2FsIC9ldGMvaG9zdHMgZmlsZSBvciBpbiBhIHdheSwgdGhhdAorICAgeW91ciBzeXN0ZW0gY2FuIHJlc29sdmUgaXQgd2l0aG91dCB1c2luZyBhbgorICAgaXNkbi9pcHBwIG5ldHdvcmstaW50ZXJmYWNlLgorCistLQorCitRMTA6IEkgd2FubmEgdXNlIGR5bmFtaWMgSVAgYWRkcmVzcyBhc3NpZ25tZW50IC4uLiBIb3cgCisgICBtdXN0IEkgY29uZmlndXJlIHRoZSBuZXR3b3JrIGRldmljZS4KKworQTogQXQgbGVhc3QgeW91IG11c3QgaGF2ZSBhIHJvdXRlIHdoaWNoIGZvcndhcmRzCisgICBhIHBhY2tldCB0byB0aGUgaXBwcCBuZXR3b3JrLWludGVyZmFjZSB0byB0cmlnZ2VyCisgICB0aGUgZGlhbC1vbi1kZW1hbmQuCisgICBBIGRlZmF1bHQgcm91dGUgdG8gdGhlIGlwcHAtaW50ZXJmYWNlIHdpbGwgd29yay4KKyAgIE5vdyB5b3UgbXVzdCBjaG9vc2UgYSBkdW1teSBJUCBhZGRyZXNzIGZvciB5b3VyCisgICBpbnRlcmZhY2UuCisgICBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbid0IHNldCB0aGUgZGVmYXVsdAorICAgcm91dGUgdG8gdGhlIGlwcHAgaW50ZXJmYWNlLCB5b3UgbWF5IHRha2UgYW55IAorICAgYWRkcmVzcyBvZiB0aGUgc3VibmV0IGZyb20gd2hpY2ggeW91IGV4cGVjdCB5b3VyCisgICBkeW5hbWljIElQIG51bWJlciBhbmQgc2V0IGEgJ25ldHdvcmsgcm91dGUnIGZvcgorICAgdGhpcyBzdWJuZXQgdG8gdGhlIGlwcHAgaW50ZXJmYWNlLgorICAgVG8gYWxsb3cgb3ZlcnJpZGluZyBvZiB0aGUgZHVtbXkgYWRkcmVzcyB5b3UKKyAgIG11c3QgY2FsbCB0aGUgaXBwcGQgd2l0aCB0aGUgJ2lwY3AtYWNjZXB0LWxvY2FsJyBvcHRpb24uCisKK0E6IFlvdSBtdXN0IGtub3csIGhvdyB0aGUgaXBwcGQgZ2V0cyB0aGUgYWRkcmVzc2VzIGl0IHdhbm5hCisgICBjb25maWd1cmUuIElmIHlvdSBkb24ndCBnaXZlIGFueSBvcHRpb24sIHRoZSBpcHBwZAorICAgdHJpZXMgdG8gbmVnb3RpYXRlIHRoZSBsb2NhbCBob3N0IGFkZHJlc3MhCisgICBXaXRoIHRoZSBvcHRpb24gJ25vaXBkZWZhdWx0JyBpdCByZXF1ZXN0cyBhbiBhZGRyZXNzCisgICBmcm9tIHRoZSByZW1vdGUgbWFjaGluZS4gV2l0aCAndXNlaWZpcCcgaXQgZ2V0cyB0aGUKKyAgIGFkZHJlc3NlcyBmcm9tIHRoZSBuZXQgaW50ZXJmYWNlLiBPciB5b3Ugc2V0IHRoZSBhZGRyZXNzCisgICBvbiB0aGUgb3B0aW9uIGxpbmUgd2l0aCB0aGUgPGEuYi5jLmQ6ZS5mLmcuaD4gb3B0aW9uLgorICAgTm90ZTogdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBtYWNoaW5lIG11c3QgYmUgY29uZmlndXJlZAorICAgbG9jYWxseSBvciB0aGUgcmVtb3RlIG1hY2hpbmUgbXVzdCBzZW5kIGl0IGluIGFuIElQQ1AgcmVxdWVzdC4KKyAgIElmIHlvdXIgc2lkZSBkb2Vzbid0IGtub3cgdGhlIElQIGFkZHJlc3MgYWZ0ZXIgbmVnb3RpYXRpb24sIGl0CisgICBjbG9zZXMgdGhlIGNvbm5lY3Rpb24hCisgICBZb3UgbXVzdCBhbGxvdyBvdmVycmlkaW5nIG9mIGFkZHJlc3Mgd2l0aCB0aGUgJ2lwY3AtYWNjZXB0LSonCisgICBvcHRpb25zLCBpZiB5b3UgaGF2ZSBzZXQgeW91ciBvd24gb3IgdGhlIHJlbW90ZSBhZGRyZXNzIAorICAgZXhwbGljaXRseS4KKworQTogTWF5YmUgeW91IHRyeSB0aGVzZSBvcHRpb25zIC4uIGUuZzogICAKKworICAgIC9zYmluL2lwcHBkIDokUkVNT1RFIG5vaXBkZWZhdWx0IC9kZXYvaXBwcDAKKworICAgd2hlcmUgUkVNT1RFIG11c3QgYmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBtYWNoaW5lICh0aGUKKyAgIG1hY2hpbmUsIHdoaWNoIGdpdmVzIHlvdSB5b3VyIGFkZHJlc3MpCisKKy0tCisKK1ExMTogSSBjYW4ndCBjb25uZWN0LiBIb3cgY2FuIEkgY2hlY2sgd2hlcmUgdGhlIHByb2JsZW0gaXMuCisKK0E6IEEgZ29vZCBoZWxwIGxvZyBpcyB0aGUgZGVidWcgb3V0cHV0IGZyb20gdGhlIGlwcHBkLi4uCisgICBDaGVjayB3aGV0aGVyIHlvdSBjYW4gZmluZCB0aGVyZToKKyAgIC0gb25seSBhIGZldyBMQ1AtY29uZi1yZXEgU0VOVCBtZXNzYWdlcyAobGVzcyB0aGVuIDEwKQorICAgICBhbmQgdGhlbiBhIFRlcm0tUkVROgorICAgICAtPiBjaGVjayB3aGV0aGVyIHlvdXIgSVNETiBjYXJkIGlzIHdlbGwgY29uZmlndXJlZAorICAgICAgICBpdCBzZWVtcywgdGhhdCB5b3VyIG1hY2hpbmUgZG9lc24ndCBkaWFsCisgICAgICAgIChJUlEsSU8sUHJvdG8sIGV0YyBwcm9ibGVtcykKKyAgICAgICAgQ29uZmlndXJlIHlvdXIgSVNETiBjYXJkIHRvIHByaW50IGRlYnVnIG1lc3NhZ2VzIGFuZAorICAgICAgICBjaGVjayB0aGUgL2Rldi9pc2RuY3RybCBvdXRwdXQgbmV4dCB0aW1lLiBUaGVyZQorICAgICAgICB5b3UgY2FuIHNlZSwgd2hldGhlciB0aGVyZSBpcyBhY3Rpdml0eSBvbiB0aGUgY2FyZC9saW5lLgorICAgLSB0aGVyZSBhcmUgYXQgbGVhc3QgYSBmZXcgUkVDViBtZXNzYWdlcyBpbiB0aGUgbG9nOgorICAgICAtPiBmaW5lOiB5b3VyIGNhcmQgaXMgZGlhbGluZyBhbmQgeW91ciByZW1vdGUgbWFjaGluZQorICAgICAgICB0cmllcyB0byB0YWxrIHdpdGggeW91LiBNYXliZSBvbmx5IGEgbWlzc2luZyAKKyAgICAgICAgYXV0aGVudGljYXRpb24uIENoZWNrIHlvdXIgaXBwcGQgY29uZmlndXJhdGlvbiBhZ2Fpbi4KKyAgIC0gdGhlIGlwcHBkIGV4aXRzIGZvciBzb21lIHJlYXNvbjoKKyAgICAgLT4gbm90IGdvb2QgLi4uIGNoZWNrIC92YXIvYWRtL3N5c2xvZyBhbmQgL3Zhci9hZG0vZGFlbW9uLgorICAgICAgICBDb3VsZCBiZSBhIGJ1ZyBpbiB0aGUgaXBwcGQuCisKKy0tCisKK1ExMjogSG93IGNhbiBJIHJlZHVjZSBsb2dpbiBkZWxheT8KKworQTogTG9nIGEgbG9naW4gc2Vzc2lvbiAoJ2RlYnVnJyBsb2cpIGFuZCBjaGVjayB3aGljaCBvcHRpb25zIAorICB5b3VyIHJlbW90ZSBzaWRlIHJlamVjdHMuIE5leHQgdGltZSBjb25maWd1cmUgeW91ciBpcHBwZAorICB0byBub3QgbmVnb3RpYXRlIHRoZXNlIG9wdGlvbnMuIEFub3RoZXIgJ3NpZGUgZWZmZWN0JyBpcywgdGhhdAorICB0aGlzIGluY3JlYXNlcyByZWR1bmRhbmN5LiAoZS5nIHlvdXIgcmVtb3RlIHNpZGUgaXMgYnVnZ3kgYW5kCisgIHJlamVjdHMgb3B0aW9ucyBpbiBhIHdyb25nIHdheSkuCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2phdmEudHh0IGIvRG9jdW1lbnRhdGlvbi9qYXZhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDgxNGMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9qYXZhLnR4dApAQCAtMCwwICsxLDM5NiBAQAorICAgICAgICAgICAgICAgSmF2YSh0bSkgQmluYXJ5IEtlcm5lbCBTdXBwb3J0IGZvciBMaW51eCB2MS4wMworICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW51eCBiZWF0cyB0aGVtIEFMTCEgV2hpbGUgYWxsIG90aGVyIE9TJ3MgYXJlIFRBTEtJTkcgYWJvdXQgZGlyZWN0CitzdXBwb3J0IG9mIEphdmEgQmluYXJpZXMgaW4gdGhlIE9TLCBMaW51eCBpcyBkb2luZyBpdCEKKworWW91IGNhbiBleGVjdXRlIEphdmEgYXBwbGljYXRpb25zIGFuZCBKYXZhIEFwcGxldHMganVzdCBsaWtlIGFueQorb3RoZXIgcHJvZ3JhbSBhZnRlciB5b3UgaGF2ZSBkb25lIHRoZSBmb2xsb3dpbmc6CisKKzEpIFlvdSBNVVNUIEZJUlNUIGluc3RhbGwgdGhlIEphdmEgRGV2ZWxvcGVycyBLaXQgZm9yIExpbnV4LgorICAgVGhlIEphdmEgb24gTGludXggSE9XVE8gZ2l2ZXMgdGhlIGRldGFpbHMgb24gZ2V0dGluZyBhbmQKKyAgIGluc3RhbGxpbmcgdGhpcy4gVGhpcyBIT1dUTyBjYW4gYmUgZm91bmQgYXQ6CisKKwlmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L2RvY3MvSE9XVE8vSmF2YS1IT1dUTworCisgICBZb3Ugc2hvdWxkIGFsc28gc2V0IHVwIGEgcmVhc29uYWJsZSBDTEFTU1BBVEggZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHRvIHVzZSBKYXZhIGFwcGxpY2F0aW9ucyB0aGF0IG1ha2UgdXNlIG9mIGFueQorICAgbm9uc3RhbmRhcmQgY2xhc3NlcyAobm90IGluY2x1ZGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgYXMgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZikuCisKKzIpIFlvdSBoYXZlIHRvIGNvbXBpbGUgQklORk1UX01JU0MgZWl0aGVyIGFzIGEgbW9kdWxlIG9yIGludG8KKyAgIHRoZSBrZXJuZWwgKENPTkZJR19CSU5GTVRfTUlTQykgYW5kIHNldCBpdCB1cCBwcm9wZXJseS4KKyAgIElmIHlvdSBjaG9vc2UgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgeW91IHdpbGwgaGF2ZQorICAgdG8gaW5zZXJ0IGl0IG1hbnVhbGx5IHdpdGggbW9kcHJvYmUvaW5zbW9kLCBhcyBrbW9kCisgICBjYW4gbm90IGVhc2lseSBiZSBzdXBwb3J0ZWQgd2l0aCBiaW5mbXRfbWlzYy4gCisgICBSZWFkIHRoZSBmaWxlICdiaW5mbXRfbWlzYy50eHQnIGluIHRoaXMgZGlyZWN0b3J5IHRvIGtub3cKKyAgIG1vcmUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworMykgQWRkIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBpdGVtcyB0byBiaW5mbXRfbWlzYworICAgKHlvdSBzaG91bGQgcmVhbGx5IGhhdmUgcmVhZCBiaW5mbXRfbWlzYy50eHQgbm93KToKKyAgIHN1cHBvcnQgZm9yIEphdmEgYXBwbGljYXRpb25zOgorICAgICAnOkphdmE6TTo6XHhjYVx4ZmVceGJhXHhiZTo6L3Vzci9sb2NhbC9iaW4vamF2YXdyYXBwZXI6JworICAgc3VwcG9ydCBmb3IgZXhlY3V0YWJsZSBKYXIgZmlsZXM6CisgICAgICc6RXhlY3V0YWJsZUpBUjpFOjpqYXI6Oi91c3IvbG9jYWwvYmluL2phcndyYXBwZXI6JworICAgc3VwcG9ydCBmb3IgSmF2YSBBcHBsZXRzOgorICAgICAnOkFwcGxldDpFOjpodG1sOjovdXNyL2Jpbi9hcHBsZXR2aWV3ZXI6JworICAgb3IgdGhlIGZvbGxvd2luZywgaWYgeW91IHdhbnQgdG8gYmUgbW9yZSBzZWxlY3RpdmU6CisgICAgICc6QXBwbGV0Ok06OjwhLS1hcHBsZXQ6Oi91c3IvYmluL2FwcGxldHZpZXdlcjonCisKKyAgIE9mIGNhdXNlIHlvdSBoYXZlIHRvIGZpeCB0aGUgcGF0aCBuYW1lcy4gR2l2ZW4gcGF0aC9maWxlIG5hbWVzIGluIHRoaXMKKyAgIGRvY3VtZW50IG1hdGNoIHRoZSBEZWJpYW4gMi4xIHN5c3RlbS4gKGkuZS4gamRrIGluc3RhbGxlZCBpbiAvdXNyLAorICAgY3VzdG9tIHdyYXBwZXJzIGZyb20gdGhpcyBkb2N1bWVudCBpbiAvdXNyL2xvY2FsKQorCisgICBOb3RlLCB0aGF0IGZvciB0aGUgbW9yZSBzZWxlY3RpdmUgYXBwbGV0IHN1cHBvcnQgeW91IGhhdmUgdG8gbW9kaWZ5CisgICBleGlzdGluZyBodG1sLWZpbGVzIHRvIGNvbnRhaW4gPCEtLWFwcGxldC0tPiBpbiB0aGUgZmlyc3QgbGluZQorICAgKCc8JyBoYXMgdG8gYmUgdGhlIGZpcnN0IGNoYXJhY3RlciEpIHRvIGxldCB0aGlzIHdvcmshCisKKyAgIEZvciB0aGUgY29tcGlsZWQgSmF2YSBwcm9ncmFtcyB5b3UgbmVlZCBhIHdyYXBwZXIgc2NyaXB0IGxpa2UgdGhlCisgICBmb2xsb3dpbmcgKHRoaXMgaXMgYmVjYXVzZSBKYXZhIGlzIGJyb2tlbiBpbiBjYXNlIG9mIHRoZSBmaWxlbmFtZQorICAgaGFuZGxpbmcpLCBhZ2FpbiBmaXggdGhlIHBhdGggbmFtZXMsIGJvdGggaW4gdGhlIHNjcmlwdCBhbmQgaW4gdGhlCisgICBhYm92ZSBnaXZlbiBjb25maWd1cmF0aW9uIHN0cmluZy4KKworICAgWW91LCB0b28sIG5lZWQgdGhlIGxpdHRsZSBwcm9ncmFtIGFmdGVyIHRoZSBzY3JpcHQuIENvbXBpbGUgbGlrZQorICAgZ2NjIC1PMiAtbyBqYXZhY2xhc3NuYW1lIGphdmFjbGFzc25hbWUuYworICAgYW5kIHN0aWNrIGl0IHRvIC91c3IvbG9jYWwvYmluLgorCisgICBCb3RoIHRoZSBqYXZhd3JhcHBlciBzaGVsbHNjcmlwdCBhbmQgdGhlIGphdmFjbGFzc25hbWUgcHJvZ3JhbQorICAgd2VyZSBzdXBwbGllZCBieSBDb2xpbiBKLiBXYXRzb24gPGNqdzQ0QGNhbS5hYy51az4uCisKKz09PT09PT09PT09PT09PT09PT09PT0gQ3V0IGhlcmUgPT09PT09PT09PT09PT09PT09PQorIyEvYmluL2Jhc2gKKyMgL3Vzci9sb2NhbC9iaW4vamF2YXdyYXBwZXIgLSB0aGUgd3JhcHBlciBmb3IgYmluZm10X21pc2MvamF2YQorCitpZiBbIC16ICIkMSIgXTsgdGhlbgorCWV4ZWMgMT4mMgorCWVjaG8gVXNhZ2U6ICQwIGNsYXNzLWZpbGUKKwlleGl0IDEKK2ZpCisKK0NMQVNTPSQxCitGUUNMQVNTPWAvdXNyL2xvY2FsL2Jpbi9qYXZhY2xhc3NuYW1lICQxYAorRlFDTEFTU049YGVjaG8gJEZRQ0xBU1MgfCBzZWQgLWUgJ3MvXi4qXC5cKFteLl0qXCkkL1wxLydgCitGUUNMQVNTUD1gZWNobyAkRlFDTEFTUyB8IHNlZCAtZSAncy1cLi0vLWcnIC1lICdzLV5bXi9dKiQtLScgLWUgJ3MtL1teL10qJC0tJ2AKKworIyBmb3IgZXhhbXBsZToKKyMgQ0xBU1M9VGVzdC5jbGFzcworIyBGUUNMQVNTPWZvby5iYXIuVGVzdAorIyBGUUNMQVNTTj1UZXN0CisjIEZRQ0xBU1NQPWZvby9iYXIKKwordW5zZXQgQ0xBU1NCQVNFCisKK2RlY2xhcmUgLWkgTElOS0xFVkVMPTAKKword2hpbGUgOjsgZG8KKwlpZiBbICJgYmFzZW5hbWUgJENMQVNTIC5jbGFzc2AiID09ICIkRlFDTEFTU04iIF07IHRoZW4KKwkJIyBTZWUgaWYgdGhpcyBkaXJlY3Rvcnkgd29ya3Mgc3RyYWlnaHQgb2ZmCisJCWNkIC1MIGBkaXJuYW1lICRDTEFTU2AKKwkJQ0xBU1NESVI9JFBXRAorCQljZCAkT0xEUFdECisJCWlmIGVjaG8gJENMQVNTRElSIHwgZ3JlcCAtcSAiJEZRQ0xBU1NQJCI7IHRoZW4KKwkJCUNMQVNTQkFTRT1gZWNobyAkQ0xBU1NESVIgfCBzZWQgLWUgInMuJEZRQ0xBU1NQJC4uImAKKwkJCWJyZWFrOworCQlmaQorCQkjIFRyeSBkZXJlZmVyZW5jaW5nIHRoZSBkaXJlY3RvcnkgbmFtZQorCQljZCAtUCBgZGlybmFtZSAkQ0xBU1NgCisJCUNMQVNTRElSPSRQV0QKKwkJY2QgJE9MRFBXRAorCQlpZiBlY2hvICRDTEFTU0RJUiB8IGdyZXAgLXEgIiRGUUNMQVNTUCQiOyB0aGVuCisJCQlDTEFTU0JBU0U9YGVjaG8gJENMQVNTRElSIHwgc2VkIC1lICJzLiRGUUNMQVNTUCQuLiJgCisJCQlicmVhazsKKwkJZmkKKwkJIyBJZiBubyBvdGhlciBwb3NzaWJsZSBmaWxlbmFtZSBleGlzdHMKKwkJaWYgWyAhIC1MICRDTEFTUyBdOyB0aGVuCisJCQlleGVjIDE+JjIKKwkJCWVjaG8gJDA6CisJCQllY2hvICIgICRDTEFTUyBzaG91bGQgYmUgaW4gYSIgXAorCQkJICAgICAiZGlyZWN0b3J5IHRyZWUgY2FsbGVkICRGUUNMQVNTUCIKKwkJCWV4aXQgMQorCQlmaQorCWZpCisJaWYgWyAhIC1MICRDTEFTUyBdOyB0aGVuIGJyZWFrOyBmaQorCSMgR28gZG93biBvbmUgbW9yZSBsZXZlbCBvZiBzeW1ib2xpYyBsaW5rcworCWxldCBMSU5LTEVWRUwrPTEKKwlpZiBbICRMSU5LTEVWRUwgLWd0IDUgXTsgdGhlbgorCQlleGVjIDE+JjIKKwkJZWNobyAkMDoKKwkJZWNobyAiICBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCIKKwkJZXhpdCAxCisJZmkKKwlDTEFTUz1gbHMgLS1jb2xvcj1ubyAtbCAkQ0xBU1MgfCBzZWQgLWUgJ3MvXi4qIFwoW14gXSpcKSQvXDEvJ2AKK2RvbmUKKworaWYgWyAteiAiJENMQVNTQkFTRSIgXTsgdGhlbgorCWlmIFsgLXogIiRGUUNMQVNTUCIgXTsgdGhlbgorCQlHT09ETkFNRT0kRlFDTEFTU04uY2xhc3MKKwllbHNlCisJCUdPT0ROQU1FPSRGUUNMQVNTUC8kRlFDTEFTU04uY2xhc3MKKwlmaQorCWV4ZWMgMT4mMgorCWVjaG8gJDA6CisJZWNobyAiICAkRlFDTEFTUyBzaG91bGQgYmUgaW4gYSBmaWxlIGNhbGxlZCAkR09PRE5BTUUiCisJZXhpdCAxCitmaQorCitpZiAhIGVjaG8gJENMQVNTUEFUSCB8IGdyZXAgLXEgIl5cKC4qOlwpKiRDTEFTU0JBU0VcKDouKlwpKiI7IHRoZW4KKwkjIGNsYXNzIGlzIG5vdCBpbiBDTEFTU1BBVEgsIHNvIHByZXBlbmQgZGlyIG9mIGNsYXNzIHRvIENMQVNTUEFUSAorCWlmIFsgLXogIiR7Q0xBU1NQQVRIfSIgXSA7IHRoZW4KKwkJZXhwb3J0IENMQVNTUEFUSD0kQ0xBU1NCQVNFCisJZWxzZQorCQlleHBvcnQgQ0xBU1NQQVRIPSRDTEFTU0JBU0U6JENMQVNTUEFUSAorCWZpCitmaQorCitzaGlmdAorL3Vzci9iaW4vamF2YSAkRlFDTEFTUyAiJEAiCis9PT09PT09PT09PT09PT09PT09PT09IEN1dCBoZXJlID09PT09PT09PT09PT09PT09PT0KKworCis9PT09PT09PT09PT09PT09PT09PT09IEN1dCBoZXJlID09PT09PT09PT09PT09PT09PT0KKy8qIGphdmFjbGFzc25hbWUuYworICoKKyAqIEV4dHJhY3RzIHRoZSBjbGFzcyBuYW1lIGZyb20gYSBKYXZhIGNsYXNzIGZpbGU7IGludGVuZGVkIGZvciB1c2UgaW4gYSBKYXZhCisgKiB3cmFwcGVyIG9mIHRoZSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgYmluZm10X21pc2Mgb3B0aW9uIGluIHRoZSBMaW51eCBrZXJuZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IENvbGluIEouIFdhdHNvbiA8Y2p3NDRAY2FtLmFjLnVrPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEZyb20gU3VuJ3MgSmF2YSBWTSBTcGVjaWZpY2F0aW9uLCBhcyB0YWcgZW50cmllcyBpbiB0aGUgY29uc3RhbnQgcG9vbC4gKi8KKworI2RlZmluZSBDUF9VVEY4IDEKKyNkZWZpbmUgQ1BfSU5URUdFUiAzCisjZGVmaW5lIENQX0ZMT0FUIDQKKyNkZWZpbmUgQ1BfTE9ORyA1CisjZGVmaW5lIENQX0RPVUJMRSA2CisjZGVmaW5lIENQX0NMQVNTIDcKKyNkZWZpbmUgQ1BfU1RSSU5HIDgKKyNkZWZpbmUgQ1BfRklFTERSRUYgOQorI2RlZmluZSBDUF9NRVRIT0RSRUYgMTAKKyNkZWZpbmUgQ1BfSU5URVJGQUNFTUVUSE9EUkVGIDExCisjZGVmaW5lIENQX05BTUVBTkRUWVBFIDEyCisKKy8qIERlZmluZSBzb21lIGNvbW1vbmx5IHVzZWQgZXJyb3IgbWVzc2FnZXMgKi8KKworI2RlZmluZSBzZWVrX2Vycm9yKCkgZXJyb3IoIiVzOiBDYW5ub3Qgc2Vla1xuIiwgcHJvZ3JhbSkKKyNkZWZpbmUgY29ycnVwdF9lcnJvcigpIGVycm9yKCIlczogQ2xhc3MgZmlsZSBjb3JydXB0XG4iLCBwcm9ncmFtKQorI2RlZmluZSBlb2ZfZXJyb3IoKSBlcnJvcigiJXM6IFVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVcbiIsIHByb2dyYW0pCisjZGVmaW5lIHV0ZjhfZXJyb3IoKSBlcnJvcigiJXM6IE9ubHkgQVNDSUkgMS0yNTUgc3VwcG9ydGVkXG4iLCBwcm9ncmFtKTsKKworY2hhciAqcHJvZ3JhbTsKKworbG9uZyAqcG9vbDsKKwordV9pbnQ4X3QgcmVhZF84KEZJTEUgKmNsYXNzZmlsZSk7Cit1X2ludDE2X3QgcmVhZF8xNihGSUxFICpjbGFzc2ZpbGUpOwordm9pZCBza2lwX2NvbnN0YW50KEZJTEUgKmNsYXNzZmlsZSwgdV9pbnQxNl90ICpjdXIpOwordm9pZCBlcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCisvKiBSZWFkcyBpbiBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyLiAqLwordV9pbnQ4X3QgcmVhZF84KEZJTEUgKmNsYXNzZmlsZSkKK3sKKwlpbnQgYiA9IGZnZXRjKGNsYXNzZmlsZSk7CisJaWYoYiA9PSBFT0YpCisJCWVvZl9lcnJvcigpOworCXJldHVybiAodV9pbnQ4X3QpYjsKK30KKworLyogUmVhZHMgaW4gYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIuICovCit1X2ludDE2X3QgcmVhZF8xNihGSUxFICpjbGFzc2ZpbGUpCit7CisJaW50IGIxLCBiMjsKKwliMSA9IGZnZXRjKGNsYXNzZmlsZSk7CisJaWYoYjEgPT0gRU9GKQorCQllb2ZfZXJyb3IoKTsKKwliMiA9IGZnZXRjKGNsYXNzZmlsZSk7CisJaWYoYjIgPT0gRU9GKQorCQllb2ZfZXJyb3IoKTsKKwlyZXR1cm4gKHVfaW50MTZfdCkoKGIxIDw8IDgpIHwgYjIpOworfQorCisvKiBSZWFkcyBpbiBhIHZhbHVlIGZyb20gdGhlIGNvbnN0YW50IHBvb2wuICovCit2b2lkIHNraXBfY29uc3RhbnQoRklMRSAqY2xhc3NmaWxlLCB1X2ludDE2X3QgKmN1cikKK3sKKwl1X2ludDE2X3QgbGVuOworCWludCBzZWVrZXJyID0gMTsKKwlwb29sWypjdXJdID0gZnRlbGwoY2xhc3NmaWxlKTsKKwlzd2l0Y2gocmVhZF84KGNsYXNzZmlsZSkpCisJeworCWNhc2UgQ1BfVVRGODoKKwkJbGVuID0gcmVhZF8xNihjbGFzc2ZpbGUpOworCQlzZWVrZXJyID0gZnNlZWsoY2xhc3NmaWxlLCBsZW4sIFNFRUtfQ1VSKTsKKwkJYnJlYWs7CisJY2FzZSBDUF9DTEFTUzoKKwljYXNlIENQX1NUUklORzoKKwkJc2Vla2VyciA9IGZzZWVrKGNsYXNzZmlsZSwgMiwgU0VFS19DVVIpOworCQlicmVhazsKKwljYXNlIENQX0lOVEVHRVI6CisJY2FzZSBDUF9GTE9BVDoKKwljYXNlIENQX0ZJRUxEUkVGOgorCWNhc2UgQ1BfTUVUSE9EUkVGOgorCWNhc2UgQ1BfSU5URVJGQUNFTUVUSE9EUkVGOgorCWNhc2UgQ1BfTkFNRUFORFRZUEU6CisJCXNlZWtlcnIgPSBmc2VlayhjbGFzc2ZpbGUsIDQsIFNFRUtfQ1VSKTsKKwkJYnJlYWs7CisJY2FzZSBDUF9MT05HOgorCWNhc2UgQ1BfRE9VQkxFOgorCQlzZWVrZXJyID0gZnNlZWsoY2xhc3NmaWxlLCA4LCBTRUVLX0NVUik7CisJCSsrKCpjdXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb3JydXB0X2Vycm9yKCk7CisJfQorCWlmKHNlZWtlcnIpCisJCXNlZWtfZXJyb3IoKTsKK30KKwordm9pZCBlcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJRklMRSAqY2xhc3NmaWxlOworCXVfaW50MTZfdCBjcF9jb3VudCwgaSwgdGhpc19jbGFzcywgY2xhc3NpbmZvX3B0cjsKKwl1X2ludDhfdCBsZW5ndGg7CisKKwlwcm9ncmFtID0gYXJndlswXTsKKworCWlmKCFhcmd2WzFdKQorCQllcnJvcigiJXM6IE1pc3NpbmcgaW5wdXQgZmlsZVxuIiwgcHJvZ3JhbSk7CisJY2xhc3NmaWxlID0gZm9wZW4oYXJndlsxXSwgInJiIik7CisJaWYoIWNsYXNzZmlsZSkKKwkJZXJyb3IoIiVzOiBFcnJvciBvcGVuaW5nICVzXG4iLCBwcm9ncmFtLCBhcmd2WzFdKTsKKworCWlmKGZzZWVrKGNsYXNzZmlsZSwgOCwgU0VFS19TRVQpKSAgLyogc2tpcCBtYWdpYyBhbmQgdmVyc2lvbiBudW1iZXJzICovCisJCXNlZWtfZXJyb3IoKTsKKwljcF9jb3VudCA9IHJlYWRfMTYoY2xhc3NmaWxlKTsKKwlwb29sID0gY2FsbG9jKGNwX2NvdW50LCBzaXplb2YobG9uZykpOworCWlmKCFwb29sKQorCQllcnJvcigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIGNvbnN0YW50IHBvb2xcbiIsIHByb2dyYW0pOworCisJZm9yKGkgPSAxOyBpIDwgY3BfY291bnQ7ICsraSkKKwkJc2tpcF9jb25zdGFudChjbGFzc2ZpbGUsICZpKTsKKwlpZihmc2VlayhjbGFzc2ZpbGUsIDIsIFNFRUtfQ1VSKSkJLyogc2tpcCBhY2Nlc3MgZmxhZ3MgKi8KKwkJc2Vla19lcnJvcigpOworCisJdGhpc19jbGFzcyA9IHJlYWRfMTYoY2xhc3NmaWxlKTsKKwlpZih0aGlzX2NsYXNzIDwgMSB8fCB0aGlzX2NsYXNzID49IGNwX2NvdW50KQorCQljb3JydXB0X2Vycm9yKCk7CisJaWYoIXBvb2xbdGhpc19jbGFzc10gfHwgcG9vbFt0aGlzX2NsYXNzXSA9PSAtMSkKKwkJY29ycnVwdF9lcnJvcigpOworCWlmKGZzZWVrKGNsYXNzZmlsZSwgcG9vbFt0aGlzX2NsYXNzXSArIDEsIFNFRUtfU0VUKSkKKwkJc2Vla19lcnJvcigpOworCisJY2xhc3NpbmZvX3B0ciA9IHJlYWRfMTYoY2xhc3NmaWxlKTsKKwlpZihjbGFzc2luZm9fcHRyIDwgMSB8fCBjbGFzc2luZm9fcHRyID49IGNwX2NvdW50KQorCQljb3JydXB0X2Vycm9yKCk7CisJaWYoIXBvb2xbY2xhc3NpbmZvX3B0cl0gfHwgcG9vbFtjbGFzc2luZm9fcHRyXSA9PSAtMSkKKwkJY29ycnVwdF9lcnJvcigpOworCWlmKGZzZWVrKGNsYXNzZmlsZSwgcG9vbFtjbGFzc2luZm9fcHRyXSArIDEsIFNFRUtfU0VUKSkKKwkJc2Vla19lcnJvcigpOworCisJbGVuZ3RoID0gcmVhZF8xNihjbGFzc2ZpbGUpOworCWZvcihpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorCXsKKwkJdV9pbnQ4X3QgeCA9IHJlYWRfOChjbGFzc2ZpbGUpOworCQlpZigoeCAmIDB4ODApIHx8ICF4KQorCQl7CisJCQlpZigoeCAmIDB4RTApID09IDB4QzApCisJCQl7CisJCQkJdV9pbnQ4X3QgeSA9IHJlYWRfOChjbGFzc2ZpbGUpOworCQkJCWlmKCh5ICYgMHhDMCkgPT0gMHg4MCkKKwkJCQl7CisJCQkJCWludCBjID0gKCh4ICYgMHgxZikgPDwgNikgKyAoeSAmIDB4M2YpOworCQkJCQlpZihjKSBwdXRjaGFyKGMpOworCQkJCQllbHNlIHV0ZjhfZXJyb3IoKTsKKwkJCQl9CisJCQkJZWxzZSB1dGY4X2Vycm9yKCk7CisJCQl9CisJCQllbHNlIHV0ZjhfZXJyb3IoKTsKKwkJfQorCQllbHNlIGlmKHggPT0gJy8nKSBwdXRjaGFyKCcuJyk7CisJCWVsc2UgcHV0Y2hhcih4KTsKKwl9CisJcHV0Y2hhcignXG4nKTsKKwlmcmVlKHBvb2wpOworCWZjbG9zZShjbGFzc2ZpbGUpOworCXJldHVybiAwOworfQorPT09PT09PT09PT09PT09PT09PT09PSBDdXQgaGVyZSA9PT09PT09PT09PT09PT09PT09CisKKworPT09PT09PT09PT09PT09PT09PT09PSBDdXQgaGVyZSA9PT09PT09PT09PT09PT09PT09CisjIS9iaW4vYmFzaAorIyAvdXNyL2xvY2FsL2phdmEvYmluL2phcndyYXBwZXIgLSB0aGUgd3JhcHBlciBmb3IgYmluZm10X21pc2MvamFyCisKK2phdmEgLWphciAkMQorPT09PT09PT09PT09PT09PT09PT09PSBDdXQgaGVyZSA9PT09PT09PT09PT09PT09PT09CisKKworTm93IHNpbXBseSBjaG1vZCAreCB0aGUgLmNsYXNzLCAuamFyIGFuZC9vciAuaHRtbCBmaWxlcyB5b3Ugd2FudCB0byBleGVjdXRlLgorVG8gYWRkIGEgSmF2YSBwcm9ncmFtIHRvIHlvdXIgcGF0aCBiZXN0IHB1dCBhIHN5bWJvbGljIGxpbmsgdG8gdGhlIG1haW4KKy5jbGFzcyBmaWxlIGludG8gL3Vzci9iaW4gKG9yIGFub3RoZXIgcGxhY2UgeW91IGxpa2UpIG9taXR0aW5nIHRoZSAuY2xhc3MKK2V4dGVuc2lvbi4gVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCAuY2xhc3MgZmlsZSB3aWxsIGJlCithZGRlZCB0byB5b3VyIENMQVNTUEFUSCBkdXJpbmcgZXhlY3V0aW9uLgorCisKK1RvIHRlc3QgeW91ciBuZXcgc2V0dXAsIGVudGVyIGluIHRoZSBmb2xsb3dpbmcgc2ltcGxlIEphdmEgYXBwLCBhbmQgbmFtZQoraXQgIkhlbGxvV29ybGQuamF2YSI6CisKKwljbGFzcyBIZWxsb1dvcmxkIHsKKwkJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyBXb3JsZCEiKTsKKwkJfQorCX0KKworTm93IGNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHdpdGg6CisJamF2YWMgSGVsbG9Xb3JsZC5qYXZhCisKK1NldCB0aGUgZXhlY3V0YWJsZSBwZXJtaXNzaW9ucyBvZiB0aGUgYmluYXJ5IGZpbGUsIHdpdGg6CisJY2htb2QgNzU1IEhlbGxvV29ybGQuY2xhc3MKKworQW5kIHRoZW4gZXhlY3V0ZSBpdDoKKwkuL0hlbGxvV29ybGQuY2xhc3MKKworCitUbyBleGVjdXRlIEphdmEgSmFyIGZpbGVzLCBzaW1wbGUgY2htb2QgdGhlICouamFyIGZpbGVzIHRvIGluY2x1ZGUKK3RoZSBleGVjdXRpb24gYml0LCB0aGVuIGp1c3QgZG8KKyAgICAgICAuL0FwcGxpY2F0aW9uLmphcgorCisKK1RvIGV4ZWN1dGUgSmF2YSBBcHBsZXRzLCBzaW1wbGUgY2htb2QgdGhlICouaHRtbCBmaWxlcyB0byBpbmNsdWRlCit0aGUgZXhlY3V0aW9uIGJpdCwgdGhlbiBqdXN0IGRvCisJLi9BcHBsZXQuaHRtbAorCisKK29yaWdpbmFsbHkgYnkgQnJpYW4gQS4gTGFudHosIGJyaWFuQGxhbnR6LmNvbQoraGVhdmlseSBlZGl0ZWQgZm9yIGJpbmZtdF9taXNjIGJ5IFJpY2hhcmQgR/xudGhlcgorbmV3IHNjcmlwdHMgYnkgQ29saW4gSi4gV2F0c29uIDxjanc0NEBjYW0uYWMudWs+CithZGRlZCBleGVjdXRhYmxlIEphciBmaWxlIHN1cHBvcnQgYnkgS3VydCBIdXdpZyA8a3VydEBpa3UtbmV0ei5kZT4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2tidWlsZC8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQ2NDQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvMDAtSU5ERVgKQEAgLTAsMCArMSw4IEBACiswMC1JTkRFWAorICAgIAktIHRoaXMgZmlsZTogaW5mbyBvbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MKK2tjb25maWctbGFuZ3VhZ2UudHh0CisJLSBzcGVjaWZpY2F0aW9uIG9mIENvbmZpZyBMYW5ndWFnZSwgdGhlIGxhbmd1YWdlIGluIEtjb25maWcgZmlsZXMKK21ha2VmaWxlcy50eHQKKwktIGRldmVsb3BlciBpbmZvcm1hdGlvbiBmb3IgbGludXgga2VybmVsIG1ha2VmaWxlcworbW9kdWxlcy50eHQKKwktIGhvdyB0byBidWlsZCBtb2R1bGVzIGFuZCB0byBpbnN0YWxsIHRoZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExOTY3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CkBAIC0wLDAgKzEsMjgyIEBACitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitUaGUgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBpcyBjb2xsZWN0aW9uIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworb3JnYW5pemVkIGluIGEgdHJlZSBzdHJ1Y3R1cmU6CisKKwkrLSBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKwl8ICArLSBQcm9tcHQgZm9yIGRldmVsb3BtZW50IGFuZC9vciBpbmNvbXBsZXRlIGNvZGUvZHJpdmVycworCSstIEdlbmVyYWwgc2V0dXAKKwl8ICArLSBOZXR3b3JraW5nIHN1cHBvcnQKKwl8ICArLSBTeXN0ZW0gViBJUEMKKwl8ICArLSBCU0QgUHJvY2VzcyBBY2NvdW50aW5nCisJfCAgKy0gU3lzY3RsIHN1cHBvcnQKKwkrLSBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorCXwgICstIEVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorCXwgICAgICstIFNldCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBtb2R1bGUgc3ltYm9scworCXwgICAgICstIEtlcm5lbCBtb2R1bGUgbG9hZGVyCisJKy0gLi4uCisKK0V2ZXJ5IGVudHJ5IGhhcyBpdHMgb3duIGRlcGVuZGVuY2llcy4gVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSB1c2VkCit0byBkZXRlcm1pbmUgdGhlIHZpc2liaWxpdHkgb2YgYW4gZW50cnkuIEFueSBjaGlsZCBlbnRyeSBpcyBvbmx5Cit2aXNpYmxlIGlmIGl0cyBwYXJlbnQgZW50cnkgaXMgYWxzbyB2aXNpYmxlLgorCitNZW51IGVudHJpZXMKKy0tLS0tLS0tLS0tLQorCitNb3N0IGVudHJpZXMgZGVmaW5lIGEgY29uZmlnIG9wdGlvbiwgYWxsIG90aGVyIGVudHJpZXMgaGVscCB0byBvcmdhbml6ZQordGhlbS4gQSBzaW5nbGUgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBsaWtlIHRoaXM6CisKK2NvbmZpZyBNT0RWRVJTSU9OUworCWJvb2wgIlNldCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBtb2R1bGUgc3ltYm9scyIKKwlkZXBlbmRzIE1PRFVMRVMKKwloZWxwCisJICBVc3VhbGx5LCBtb2R1bGVzIGhhdmUgdG8gYmUgcmVjb21waWxlZCB3aGVuZXZlciB5b3Ugc3dpdGNoIHRvIGEgbmV3CisJICBrZXJuZWwuICAuLi4KKworRXZlcnkgbGluZSBzdGFydHMgd2l0aCBhIGtleSB3b3JkIGFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgbXVsdGlwbGUKK2FyZ3VtZW50cy4gICJjb25maWciIHN0YXJ0cyBhIG5ldyBjb25maWcgZW50cnkuIFRoZSBmb2xsb3dpbmcgbGluZXMKK2RlZmluZSBhdHRyaWJ1dGVzIGZvciB0aGlzIGNvbmZpZyBvcHRpb24uIEF0dHJpYnV0ZXMgY2FuIGJlIHRoZSB0eXBlIG9mCit0aGUgY29uZmlnIG9wdGlvbiwgaW5wdXQgcHJvbXB0LCBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCBhbmQgZGVmYXVsdAordmFsdWVzLiBBIGNvbmZpZyBvcHRpb24gY2FuIGJlIGRlZmluZWQgbXVsdGlwbGUgdGltZXMgd2l0aCB0aGUgc2FtZQorbmFtZSwgYnV0IGV2ZXJ5IGRlZmluaXRpb24gY2FuIGhhdmUgb25seSBhIHNpbmdsZSBpbnB1dCBwcm9tcHQgYW5kIHRoZQordHlwZSBtdXN0IG5vdCBjb25mbGljdC4KKworTWVudSBhdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0KKworQSBtZW51IGVudHJ5IGNhbiBoYXZlIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuIE5vdCBhbGwgb2YgdGhlbSBhcmUKK2FwcGxpY2FibGUgZXZlcnl3aGVyZSAoc2VlIHN5bnRheCkuCisKKy0gdHlwZSBkZWZpbml0aW9uOiAiYm9vbCIvInRyaXN0YXRlIi8ic3RyaW5nIi8iaGV4Ii8iaW50IgorICBFdmVyeSBjb25maWcgb3B0aW9uIG11c3QgaGF2ZSBhIHR5cGUuIFRoZXJlIGFyZSBvbmx5IHR3byBiYXNpYyB0eXBlczoKKyAgdHJpc3RhdGUgYW5kIHN0cmluZywgdGhlIG90aGVyIHR5cGVzIGFyZSBiYXNlZCBvbiB0aGVzZSB0d28uIFRoZSB0eXBlCisgIGRlZmluaXRpb24gb3B0aW9uYWxseSBhY2NlcHRzIGFuIGlucHV0IHByb21wdCwgc28gdGhlc2UgdHdvIGV4YW1wbGVzCisgIGFyZSBlcXVpdmFsZW50OgorCisJYm9vbCAiTmV0d29ya2luZyBzdXBwb3J0IgorICBhbmQKKwlib29sCisJcHJvbXB0ICJOZXR3b3JraW5nIHN1cHBvcnQiCisKKy0gaW5wdXQgcHJvbXB0OiAicHJvbXB0IiA8cHJvbXB0PiBbImlmIiA8ZXhwcj5dCisgIEV2ZXJ5IG1lbnUgZW50cnkgY2FuIGhhdmUgYXQgbW9zdCBvbmUgcHJvbXB0LCB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkKKyAgdG8gdGhlIHVzZXIuIE9wdGlvbmFsbHkgZGVwZW5kZW5jaWVzIG9ubHkgZm9yIHRoaXMgcHJvbXB0IGNhbiBiZSBhZGRlZAorICB3aXRoICJpZiIuCisKKy0gZGVmYXVsdCB2YWx1ZTogImRlZmF1bHQiIDxleHByPiBbImlmIiA8ZXhwcj5dCisgIEEgY29uZmlnIG9wdGlvbiBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGRlZmF1bHQgdmFsdWVzLiBJZiBtdWx0aXBsZQorICBkZWZhdWx0IHZhbHVlcyBhcmUgdmlzaWJsZSwgb25seSB0aGUgZmlyc3QgZGVmaW5lZCBvbmUgaXMgYWN0aXZlLgorICBEZWZhdWx0IHZhbHVlcyBhcmUgbm90IGxpbWl0ZWQgdG8gdGhlIG1lbnUgZW50cnksIHdoZXJlIHRoZXkgYXJlCisgIGRlZmluZWQsIHRoaXMgbWVhbnMgdGhlIGRlZmF1bHQgY2FuIGJlIGRlZmluZWQgc29tZXdoZXJlIGVsc2Ugb3IgYmUKKyAgb3ZlcnJpZGRlbiBieSBhbiBlYXJsaWVyIGRlZmluaXRpb24uCisgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG9ubHkgYXNzaWduZWQgdG8gdGhlIGNvbmZpZyBzeW1ib2wgaWYgbm8gb3RoZXIKKyAgdmFsdWUgd2FzIHNldCBieSB0aGUgdXNlciAodmlhIHRoZSBpbnB1dCBwcm9tcHQgYWJvdmUpLiBJZiBhbiBpbnB1dAorICBwcm9tcHQgaXMgdmlzaWJsZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYW5kIGNhbgorICBiZSBvdmVycmlkZGVuIGJ5IGhpbS4KKyAgT3B0aW9uYWxseSBkZXBlbmRlbmNpZXMgb25seSBmb3IgdGhpcyBkZWZhdWx0IHZhbHVlIGNhbiBiZSBhZGRlZCB3aXRoCisgICJpZiIuCisKKy0gZGVwZW5kZW5jaWVzOiAiZGVwZW5kcyBvbiIvInJlcXVpcmVzIiA8ZXhwcj4KKyAgVGhpcyBkZWZpbmVzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBtZW51IGVudHJ5LiBJZiBtdWx0aXBsZQorICBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgdGhleSBhcmUgY29ubmVjdGVkIHdpdGggJyYmJy4gRGVwZW5kZW5jaWVzCisgIGFyZSBhcHBsaWVkIHRvIGFsbCBvdGhlciBvcHRpb25zIHdpdGhpbiB0aGlzIG1lbnUgZW50cnkgKHdoaWNoIGFsc28KKyAgYWNjZXB0IGFuICJpZiIgZXhwcmVzc2lvbiksIHNvIHRoZXNlIHR3byBleGFtcGxlcyBhcmUgZXF1aXZhbGVudDoKKworCWJvb2wgImZvbyIgaWYgQkFSCisJZGVmYXVsdCB5IGlmIEJBUgorICBhbmQKKwlkZXBlbmRzIG9uIEJBUgorCWJvb2wgImZvbyIKKwlkZWZhdWx0IHkKKworLSByZXZlcnNlIGRlcGVuZGVuY2llczogInNlbGVjdCIgPHN5bWJvbD4gWyJpZiIgPGV4cHI+XQorICBXaGlsZSBub3JtYWwgZGVwZW5kZW5jaWVzIHJlZHVjZSB0aGUgdXBwZXIgbGltaXQgb2YgYSBzeW1ib2wgKHNlZQorICBiZWxvdyksIHJldmVyc2UgZGVwZW5kZW5jaWVzIGNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgbG93ZXIgbGltaXQgb2YKKyAgYW5vdGhlciBzeW1ib2wuIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBtZW51IHN5bWJvbCBpcyB1c2VkIGFzIHRoZQorICBtaW5pbWFsIHZhbHVlIDxzeW1ib2w+IGNhbiBiZSBzZXQgdG8uIElmIDxzeW1ib2w+IGlzIHNlbGVjdGVkIG11bHRpcGxlCisgIHRpbWVzLCB0aGUgbGltaXQgaXMgc2V0IHRvIHRoZSBsYXJnZXN0IHNlbGVjdGlvbi4KKyAgUmV2ZXJzZSBkZXBlbmRlbmNpZXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGJvb2xlYW4gb3IgdHJpc3RhdGUKKyAgc3ltYm9scy4KKworLSBudW1lcmljYWwgcmFuZ2VzOiAicmFuZ2UiIDxzeW1ib2w+IDxzeW1ib2w+IFsiaWYiIDxleHByPl0KKyAgVGhpcyBhbGxvd3MgdG8gbGltaXQgdGhlIHJhbmdlIG9mIHBvc3NpYmxlIGlucHV0IHZhbHVlcyBmb3IgaW50CisgIGFuZCBoZXggc3ltYm9scy4gVGhlIHVzZXIgY2FuIG9ubHkgaW5wdXQgYSB2YWx1ZSB3aGljaCBpcyBsYXJnZXIgdGhhbgorICBvciBlcXVhbCB0byB0aGUgZmlyc3Qgc3ltYm9sIGFuZCBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlY29uZAorICBzeW1ib2wuCisKKy0gaGVscCB0ZXh0OiAiaGVscCIgb3IgIi0tLWhlbHAtLS0iCisgIFRoaXMgZGVmaW5lcyBhIGhlbHAgdGV4dC4gVGhlIGVuZCBvZiB0aGUgaGVscCB0ZXh0IGlzIGRldGVybWluZWQgYnkKKyAgdGhlIGluZGVudGF0aW9uIGxldmVsLCB0aGlzIG1lYW5zIGl0IGVuZHMgYXQgdGhlIGZpcnN0IGxpbmUgd2hpY2ggaGFzCisgIGEgc21hbGxlciBpbmRlbnRhdGlvbiB0aGFuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBoZWxwIHRleHQuCisgICItLS1oZWxwLS0tIiBhbmQgImhlbHAiIGRvIG5vdCBkaWZmZXIgaW4gYmVoYXZpb3VyLCAiLS0taGVscC0tLSIgaXMKKyAgdXNlZCB0byBoZWxwIHZpc3VhbGx5IHNlcGVyYXRlIGNvbmZpZ3VyYXRpb24gbG9naWMgZnJvbSBoZWxwIHdpdGhpbgorICB0aGUgZmlsZSBhcyBhbiBhaWQgdG8gZGV2ZWxvcGVycy4KKworCitNZW51IGRlcGVuZGVuY2llcworLS0tLS0tLS0tLS0tLS0tLS0KKworRGVwZW5kZW5jaWVzIGRlZmluZSB0aGUgdmlzaWJpbGl0eSBvZiBhIG1lbnUgZW50cnkgYW5kIGNhbiBhbHNvIHJlZHVjZQordGhlIGlucHV0IHJhbmdlIG9mIHRyaXN0YXRlIHN5bWJvbHMuIFRoZSB0cmlzdGF0ZSBsb2dpYyB1c2VkIGluIHRoZQorZXhwcmVzc2lvbnMgdXNlcyBvbmUgbW9yZSBzdGF0ZSB0aGFuIG5vcm1hbCBib29sZWFuIGxvZ2ljIHRvIGV4cHJlc3MgdGhlCittb2R1bGUgc3RhdGUuIERlcGVuZGVuY3kgZXhwcmVzc2lvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIHN5bnRheDoKKworPGV4cHI+IDo6PSA8c3ltYm9sPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCisgICAgICAgICAgIDxzeW1ib2w+ICc9JyA8c3ltYm9sPiAgICAgICAgICAgICAgICAoMikKKyAgICAgICAgICAgPHN5bWJvbD4gJyE9JyA8c3ltYm9sPiAgICAgICAgICAgICAgICgzKQorICAgICAgICAgICAnKCcgPGV4cHI+ICcpJyAgICAgICAgICAgICAgICAgICAgICAgKDQpCisgICAgICAgICAgICchJyA8ZXhwcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKKyAgICAgICAgICAgPGV4cHI+ICcmJicgPGV4cHI+ICAgICAgICAgICAgICAgICAgICg2KQorICAgICAgICAgICA8ZXhwcj4gJ3x8JyA8ZXhwcj4gICAgICAgICAgICAgICAgICAgKDcpCisKK0V4cHJlc3Npb25zIGFyZSBsaXN0ZWQgaW4gZGVjcmVhc2luZyBvcmRlciBvZiBwcmVjZWRlbmNlLiAKKworKDEpIENvbnZlcnQgdGhlIHN5bWJvbCBpbnRvIGFuIGV4cHJlc3Npb24uIEJvb2xlYW4gYW5kIHRyaXN0YXRlIHN5bWJvbHMKKyAgICBhcmUgc2ltcGx5IGNvbnZlcnRlZCBpbnRvIHRoZSByZXNwZWN0aXZlIGV4cHJlc3Npb24gdmFsdWVzLiBBbGwKKyAgICBvdGhlciBzeW1ib2wgdHlwZXMgcmVzdWx0IGluICduJy4KKygyKSBJZiB0aGUgdmFsdWVzIG9mIGJvdGggc3ltYm9scyBhcmUgZXF1YWwsIGl0IHJldHVybnMgJ3knLAorICAgIG90aGVyd2lzZSAnbicuCisoMykgSWYgdGhlIHZhbHVlcyBvZiBib3RoIHN5bWJvbHMgYXJlIGVxdWFsLCBpdCByZXR1cm5zICduJywKKyAgICBvdGhlcndpc2UgJ3knLgorKDQpIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiBVc2VkIHRvIG92ZXJyaWRlIHByZWNlZGVuY2UuCisoNSkgUmV0dXJucyB0aGUgcmVzdWx0IG9mICgyLS9leHByLykuCisoNikgUmV0dXJucyB0aGUgcmVzdWx0IG9mIG1pbigvZXhwci8sIC9leHByLykuCisoNykgUmV0dXJucyB0aGUgcmVzdWx0IG9mIG1heCgvZXhwci8sIC9leHByLykuCisKK0FuIGV4cHJlc3Npb24gY2FuIGhhdmUgYSB2YWx1ZSBvZiAnbicsICdtJyBvciAneScgKG9yIDAsIDEsIDIKK3Jlc3BlY3RpdmVseSBmb3IgY2FsY3VsYXRpb25zKS4gQSBtZW51IGVudHJ5IGJlY29tZXMgdmlzaWJsZSB3aGVuIGl0J3MKK2V4cHJlc3Npb24gZXZhbHVhdGVzIHRvICdtJyBvciAneScuCisKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2Ygc3ltYm9sczogY29uc3RhbnQgYW5kIG5vbmNvbnN0YW50IHN5bWJvbHMuCitOb25jb25zdGFudCBzeW1ib2xzIGFyZSB0aGUgbW9zdCBjb21tb24gb25lcyBhbmQgYXJlIGRlZmluZWQgd2l0aCB0aGUKKydjb25maWcnIHN0YXRlbWVudC4gTm9uY29uc3RhbnQgc3ltYm9scyBjb25zaXN0IGVudGlyZWx5IG9mIGFscGhhbnVtZXJpYworY2hhcmFjdGVycyBvciB1bmRlcnNjb3Jlcy4KK0NvbnN0YW50IHN5bWJvbHMgYXJlIG9ubHkgcGFydCBvZiBleHByZXNzaW9ucy4gQ29uc3RhbnQgc3ltYm9scyBhcmUKK2Fsd2F5cyBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiBXaXRoaW4gdGhlIHF1b3RlIGFueQorb3RoZXIgY2hhcmFjdGVyIGlzIGFsbG93ZWQgYW5kIHRoZSBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgJ1wnLgorCitNZW51IHN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0KKworVGhlIHBvc2l0aW9uIG9mIGEgbWVudSBlbnRyeSBpbiB0aGUgdHJlZSBpcyBkZXRlcm1pbmVkIGluIHR3byB3YXlzLiBGaXJzdAoraXQgY2FuIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5OgorCittZW51ICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgTkVUCisKK2NvbmZpZyBORVRERVZJQ0VTCisJLi4uCisKK2VuZG1lbnUKKworQWxsIGVudHJpZXMgd2l0aGluIHRoZSAibWVudSIgLi4uICJlbmRtZW51IiBibG9jayBiZWNvbWUgYSBzdWJtZW51IG9mCisiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIuIEFsbCBzdWJlbnRyaWVzIGluaGVyaXQgdGhlIGRlcGVuZGVuY2llcyBmcm9tCit0aGUgbWVudSBlbnRyeSwgZS5nLiB0aGlzIG1lYW5zIHRoZSBkZXBlbmRlbmN5ICJORVQiIGlzIGFkZGVkIHRvIHRoZQorZGVwZW5kZW5jeSBsaXN0IG9mIHRoZSBjb25maWcgb3B0aW9uIE5FVERFVklDRVMuCisKK1RoZSBvdGhlciB3YXkgdG8gZ2VuZXJhdGUgdGhlIG1lbnUgc3RydWN0dXJlIGlzIGRvbmUgYnkgYW5hbHl6aW5nIHRoZQorZGVwZW5kZW5jaWVzLiBJZiBhIG1lbnUgZW50cnkgc29tZWhvdyBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBlbnRyeSwgaXQKK2NhbiBiZSBtYWRlIGEgc3VibWVudSBvZiBpdC4gRmlyc3QsIHRoZSBwcmV2aW91cyAocGFyZW50KSBzeW1ib2wgbXVzdAorYmUgcGFydCBvZiB0aGUgZGVwZW5kZW5jeSBsaXN0IGFuZCB0aGVuIG9uZSBvZiB0aGVzZSB0d28gY29uZGl0aW9ucworbXVzdCBiZSB0cnVlOgorLSB0aGUgY2hpbGQgZW50cnkgbXVzdCBiZWNvbWUgaW52aXNpYmxlLCBpZiB0aGUgcGFyZW50IGlzIHNldCB0byAnbicKKy0gdGhlIGNoaWxkIGVudHJ5IG11c3Qgb25seSBiZSB2aXNpYmxlLCBpZiB0aGUgcGFyZW50IGlzIHZpc2libGUKKworY29uZmlnIE1PRFVMRVMKKwlib29sICJFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQiCisKK2NvbmZpZyBNT0RWRVJTSU9OUworCWJvb2wgIlNldCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBtb2R1bGUgc3ltYm9scyIKKwlkZXBlbmRzIE1PRFVMRVMKKworY29tbWVudCAibW9kdWxlIHN1cHBvcnQgZGlzYWJsZWQiCisJZGVwZW5kcyAhTU9EVUxFUworCitNT0RWRVJTSU9OUyBkaXJlY3RseSBkZXBlbmRzIG9uIE1PRFVMRVMsIHRoaXMgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgaWYKK01PRFVMRVMgaXMgZGlmZmVyZW50IGZyb20gJ24nLiBUaGUgY29tbWVudCBvbiB0aGUgb3RoZXIgaGFuZCBpcyBhbHdheXMKK3Zpc2libGUgd2hlbiBNT0RVTEVTIGlzIHZpc2libGUgKHRoZSAoZW1wdHkpIGRlcGVuZGVuY3kgb2YgTU9EVUxFUyBpcworYWxzbyBwYXJ0IG9mIHRoZSBjb21tZW50IGRlcGVuZGVuY2llcykuCisKKworS2NvbmZpZyBzeW50YXgKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb25maWd1cmF0aW9uIGZpbGUgZGVzY3JpYmVzIGEgc2VyaWVzIG9mIG1lbnUgZW50cmllcywgd2hlcmUgZXZlcnkKK2xpbmUgc3RhcnRzIHdpdGggYSBrZXl3b3JkIChleGNlcHQgaGVscCB0ZXh0cykuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMKK2VuZCBhIG1lbnUgZW50cnk6CistIGNvbmZpZworLSBtZW51Y29uZmlnCistIGNob2ljZS9lbmRjaG9pY2UKKy0gY29tbWVudAorLSBtZW51L2VuZG1lbnUKKy0gaWYvZW5kaWYKKy0gc291cmNlCitUaGUgZmlyc3QgZml2ZSBhbHNvIHN0YXJ0IHRoZSBkZWZpbml0aW9uIG9mIGEgbWVudSBlbnRyeS4KKworY29uZmlnOgorCisJImNvbmZpZyIgPHN5bWJvbD4KKwk8Y29uZmlnIG9wdGlvbnM+CisKK1RoaXMgZGVmaW5lcyBhIGNvbmZpZyBzeW1ib2wgPHN5bWJvbD4gYW5kIGFjY2VwdHMgYW55IG9mIGFib3ZlCithdHRyaWJ1dGVzIGFzIG9wdGlvbnMuCisKK21lbnVjb25maWc6CisJIm1lbnVjb25maWciIDxzeW1ib2w+CisJPGNvbmZpZyBvcHRpb25zPgorCitUaGlzIGlzIHNpbWlsaWFyIHRvIHRoZSBzaW1wbGUgY29uZmlnIGVudHJ5IGFib3ZlLCBidXQgaXQgYWxzbyBnaXZlcyBhCitoaW50IHRvIGZyb250IGVuZHMsIHRoYXQgYWxsIHN1Ym9wdGlvbnMgc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBhCitzZXBhcmF0ZSBsaXN0IG9mIG9wdGlvbnMuCisKK2Nob2ljZXM6CisKKwkiY2hvaWNlIgorCTxjaG9pY2Ugb3B0aW9ucz4KKwk8Y2hvaWNlIGJsb2NrPgorCSJlbmRjaG9pY2UiCisKK1RoaXMgZGVmaW5lcyBhIGNob2ljZSBncm91cCBhbmQgYWNjZXB0cyBhbnkgb2YgYWJvdmUgYXR0cmlidXRlcyBhcworb3B0aW9ucy4gQSBjaG9pY2UgY2FuIG9ubHkgYmUgb2YgdHlwZSBib29sIG9yIHRyaXN0YXRlLCB3aGlsZSBhIGJvb2xlYW4KK2Nob2ljZSBvbmx5IGFsbG93cyBhIHNpbmdsZSBjb25maWcgZW50cnkgdG8gYmUgc2VsZWN0ZWQsIGEgdHJpc3RhdGUKK2Nob2ljZSBhbHNvIGFsbG93cyBhbnkgbnVtYmVyIG9mIGNvbmZpZyBlbnRyaWVzIHRvIGJlIHNldCB0byAnbScuIFRoaXMKK2NhbiBiZSB1c2VkIGlmIG11bHRpcGxlIGRyaXZlcnMgZm9yIGEgc2luZ2xlIGhhcmR3YXJlIGV4aXN0cyBhbmQgb25seSBhCitzaW5nbGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZC9sb2FkZWQgaW50byB0aGUga2VybmVsLCBidXQgYWxsIGRyaXZlcnMKK2NhbiBiZSBjb21waWxlZCBhcyBtb2R1bGVzLgorQSBjaG9pY2UgYWNjZXB0cyBhbm90aGVyIG9wdGlvbiAib3B0aW9uYWwiLCB3aGljaCBhbGxvd3MgdG8gc2V0IHRoZQorY2hvaWNlIHRvICduJyBhbmQgbm8gZW50cnkgbmVlZHMgdG8gYmUgc2VsZWN0ZWQuCisKK2NvbW1lbnQ6CisKKwkiY29tbWVudCIgPHByb21wdD4KKwk8Y29tbWVudCBvcHRpb25zPgorCitUaGlzIGRlZmluZXMgYSBjb21tZW50IHdoaWNoIGlzIGRpc3BsYXllZCB0byB0aGUgdXNlciBkdXJpbmcgdGhlCitjb25maWd1cmF0aW9uIHByb2Nlc3MgYW5kIGlzIGFsc28gZWNob2VkIHRvIHRoZSBvdXRwdXQgZmlsZXMuIFRoZSBvbmx5Citwb3NzaWJsZSBvcHRpb25zIGFyZSBkZXBlbmRlbmNpZXMuCisKK21lbnU6CisKKwkibWVudSIgPHByb21wdD4KKwk8bWVudSBvcHRpb25zPgorCTxtZW51IGJsb2NrPgorCSJlbmRtZW51IgorCitUaGlzIGRlZmluZXMgYSBtZW51IGJsb2NrLCBzZWUgIk1lbnUgc3RydWN0dXJlIiBhYm92ZSBmb3IgbW9yZQoraW5mb3JtYXRpb24uIFRoZSBvbmx5IHBvc3NpYmxlIG9wdGlvbnMgYXJlIGRlcGVuZGVuY2llcy4KKworaWY6CisKKwkiaWYiIDxleHByPgorCTxpZiBibG9jaz4KKwkiZW5kaWYiCisKK1RoaXMgZGVmaW5lcyBhbiBpZiBibG9jay4gVGhlIGRlcGVuZGVuY3kgZXhwcmVzc2lvbiA8ZXhwcj4gaXMgYXBwZW5kZWQKK3RvIGFsbCBlbmNsb3NlZCBtZW51IGVudHJpZXMuCisKK3NvdXJjZToKKworCSJzb3VyY2UiIDxwcm9tcHQ+CisKK1RoaXMgcmVhZHMgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGZpbGUuIFRoaXMgZmlsZSBpcyBhbHdheXMgcGFyc2VkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxNmE1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKQEAgLTAsMCArMSwxMTIyIEBACitMaW51eCBLZXJuZWwgTWFrZWZpbGVzCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBMaW51eCBrZXJuZWwgTWFrZWZpbGVzLgorCis9PT0gVGFibGUgb2YgQ29udGVudHMKKworCT09PSAxIE92ZXJ2aWV3CisJPT09IDIgV2hvIGRvZXMgd2hhdAorCT09PSAzIFRoZSBrYnVpbGQgZmlsZXMKKwkgICAtLS0gMy4xIEdvYWwgZGVmaW5pdGlvbnMKKwkgICAtLS0gMy4yIEJ1aWx0LWluIG9iamVjdCBnb2FscyAtIG9iai15CisJICAgLS0tIDMuMyBMb2FkYWJsZSBtb2R1bGUgZ29hbHMgLSBvYmotbQorCSAgIC0tLSAzLjQgT2JqZWN0cyB3aGljaCBleHBvcnQgc3ltYm9scworCSAgIC0tLSAzLjUgTGlicmFyeSBmaWxlIGdvYWxzIC0gbGliLXkKKwkgICAtLS0gMy42IERlc2NlbmRpbmcgZG93biBpbiBkaXJlY3RvcmllcworCSAgIC0tLSAzLjcgQ29tcGlsYXRpb24gZmxhZ3MKKwkgICAtLS0gMy44IENvbW1hbmQgbGluZSBkZXBlbmRlbmN5CisJICAgLS0tIDMuOSBEZXBlbmRlbmN5IHRyYWNraW5nCisJICAgLS0tIDMuMTAgU3BlY2lhbCBSdWxlcworCisJPT09IDQgSG9zdCBQcm9ncmFtIHN1cHBvcnQKKwkgICAtLS0gNC4xIFNpbXBsZSBIb3N0IFByb2dyYW0KKwkgICAtLS0gNC4yIENvbXBvc2l0ZSBIb3N0IFByb2dyYW1zCisJICAgLS0tIDQuMyBEZWZpbmluZyBzaGFyZWQgbGlicmFyaWVzICAKKwkgICAtLS0gNC40IFVzaW5nIEMrKyBmb3IgaG9zdCBwcm9ncmFtcworCSAgIC0tLSA0LjUgQ29udHJvbGxpbmcgY29tcGlsZXIgb3B0aW9ucyBmb3IgaG9zdCBwcm9ncmFtcworCSAgIC0tLSA0LjYgV2hlbiBob3N0IHByb2dyYW1zIGFyZSBhY3R1YWxseSBidWlsdAorCSAgIC0tLSA0LjcgVXNpbmcgaG9zdHByb2dzLSQoQ09ORklHX0ZPTykKKworCT09PSA1IEtidWlsZCBjbGVhbiBpbmZyYXN0cnVjdHVyZQorCisJPT09IDYgQXJjaGl0ZWN0dXJlIE1ha2VmaWxlcworCSAgIC0tLSA2LjEgU2V0IHZhcmlhYmxlcyB0byB0d2VhayB0aGUgYnVpbGQgdG8gdGhlIGFyY2hpdGVjdHVyZQorCSAgIC0tLSA2LjIgQWRkIHByZXJlcXVpc2l0ZXMgdG8gcHJlcGFyZToKKwkgICAtLS0gNi4zIExpc3QgZGlyZWN0b3JpZXMgdG8gdmlzaXQgd2hlbiBkZXNjZW5kaW5nCisJICAgLS0tIDYuNCBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgYm9vdCBpbWFnZXMKKwkgICAtLS0gNi41IEJ1aWxkaW5nIG5vbi1rYnVpbGQgdGFyZ2V0cworCSAgIC0tLSA2LjYgQ29tbWFuZHMgdXNlZnVsIGZvciBidWlsZGluZyBhIGJvb3QgaW1hZ2UKKwkgICAtLS0gNi43IEN1c3RvbSBrYnVpbGQgY29tbWFuZHMKKwkgICAtLS0gNi44IFByZXByb2Nlc3NpbmcgbGlua2VyIHNjcmlwdHMKKwkgICAtLS0gNi45ICQoQ0MpIHN1cHBvcnQgZnVuY3Rpb25zCisKKwk9PT0gNyBLYnVpbGQgVmFyaWFibGVzCisJPT09IDggTWFrZWZpbGUgbGFuZ3VhZ2UKKwk9PT0gOSBDcmVkaXRzCisJPT09IDEwIFRPRE8KKworPT09IDEgT3ZlcnZpZXcKKworVGhlIE1ha2VmaWxlcyBoYXZlIGZpdmUgcGFydHM6CisKKwlNYWtlZmlsZQkJdGhlIHRvcCBNYWtlZmlsZS4KKwkuY29uZmlnCQkJdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUuCisJYXJjaC8kKEFSQ0gpL01ha2VmaWxlCXRoZSBhcmNoIE1ha2VmaWxlLgorCXNjcmlwdHMvTWFrZWZpbGUuKgljb21tb24gcnVsZXMgZXRjLiBmb3IgYWxsIGtidWlsZCBNYWtlZmlsZXMuCisJa2J1aWxkIE1ha2VmaWxlcwl0aGVyZSBhcmUgYWJvdXQgNTAwIG9mIHRoZXNlLgorCitUaGUgdG9wIE1ha2VmaWxlIHJlYWRzIHRoZSAuY29uZmlnIGZpbGUsIHdoaWNoIGNvbWVzIGZyb20gdGhlIGtlcm5lbAorY29uZmlndXJhdGlvbiBwcm9jZXNzLgorCitUaGUgdG9wIE1ha2VmaWxlIGlzIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyB0d28gbWFqb3IgcHJvZHVjdHM6IHZtbGludXgKKyh0aGUgcmVzaWRlbnQga2VybmVsIGltYWdlKSBhbmQgbW9kdWxlcyAoYW55IG1vZHVsZSBmaWxlcykuCitJdCBidWlsZHMgdGhlc2UgZ29hbHMgYnkgcmVjdXJzaXZlbHkgZGVzY2VuZGluZyBpbnRvIHRoZSBzdWJkaXJlY3RvcmllcyBvZgordGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4KK1RoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIHdoaWNoIGFyZSB2aXNpdGVkIGRlcGVuZHMgdXBvbiB0aGUga2VybmVsCitjb25maWd1cmF0aW9uLiBUaGUgdG9wIE1ha2VmaWxlIHRleHR1YWxseSBpbmNsdWRlcyBhbiBhcmNoIE1ha2VmaWxlCit3aXRoIHRoZSBuYW1lIGFyY2gvJChBUkNIKS9NYWtlZmlsZS4gVGhlIGFyY2ggTWFrZWZpbGUgc3VwcGxpZXMKK2FyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB0aGUgdG9wIE1ha2VmaWxlLgorCitFYWNoIHN1YmRpcmVjdG9yeSBoYXMgYSBrYnVpbGQgTWFrZWZpbGUgd2hpY2ggY2FycmllcyBvdXQgdGhlIGNvbW1hbmRzCitwYXNzZWQgZG93biBmcm9tIGFib3ZlLiBUaGUga2J1aWxkIE1ha2VmaWxlIHVzZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUKKy5jb25maWcgZmlsZSB0byBjb25zdHJ1Y3QgdmFyaW91cyBmaWxlIGxpc3RzIHVzZWQgYnkga2J1aWxkIHRvIGJ1aWxkIAorYW55IGJ1aWx0LWluIG9yIG1vZHVsYXIgdGFyZ2V0cy4KKworc2NyaXB0cy9NYWtlZmlsZS4qIGNvbnRhaW5zIGFsbCB0aGUgZGVmaW5pdGlvbnMvcnVsZXMgZXRjLiB0aGF0CithcmUgdXNlZCB0byBidWlsZCB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBrYnVpbGQgbWFrZWZpbGVzLgorCisKKz09PSAyIFdobyBkb2VzIHdoYXQKKworUGVvcGxlIGhhdmUgZm91ciBkaWZmZXJlbnQgcmVsYXRpb25zaGlwcyB3aXRoIHRoZSBrZXJuZWwgTWFrZWZpbGVzLgorCisqVXNlcnMqIGFyZSBwZW9wbGUgd2hvIGJ1aWxkIGtlcm5lbHMuICBUaGVzZSBwZW9wbGUgdHlwZSBjb21tYW5kcyBzdWNoIGFzCisibWFrZSBtZW51Y29uZmlnIiBvciAibWFrZSIuICBUaGV5IHVzdWFsbHkgZG8gbm90IHJlYWQgb3IgZWRpdAorYW55IGtlcm5lbCBNYWtlZmlsZXMgKG9yIGFueSBvdGhlciBzb3VyY2UgZmlsZXMpLgorCisqTm9ybWFsIGRldmVsb3BlcnMqIGFyZSBwZW9wbGUgd2hvIHdvcmsgb24gZmVhdHVyZXMgc3VjaCBhcyBkZXZpY2UKK2RyaXZlcnMsIGZpbGUgc3lzdGVtcywgYW5kIG5ldHdvcmsgcHJvdG9jb2xzLiAgVGhlc2UgcGVvcGxlIG5lZWQgdG8KK21haW50YWluIHRoZSBrYnVpbGQgTWFrZWZpbGVzIGZvciB0aGUgc3Vic3lzdGVtIHRoYXQgdGhleSBhcmUKK3dvcmtpbmcgb24uICBJbiBvcmRlciB0byBkbyB0aGlzIGVmZmVjdGl2ZWx5LCB0aGV5IG5lZWQgc29tZSBvdmVyYWxsCitrbm93bGVkZ2UgYWJvdXQgdGhlIGtlcm5lbCBNYWtlZmlsZXMsIHBsdXMgZGV0YWlsZWQga25vd2xlZGdlIGFib3V0IHRoZQorcHVibGljIGludGVyZmFjZSBmb3Iga2J1aWxkLgorCisqQXJjaCBkZXZlbG9wZXJzKiBhcmUgcGVvcGxlIHdobyB3b3JrIG9uIGFuIGVudGlyZSBhcmNoaXRlY3R1cmUsIHN1Y2gKK2FzIHNwYXJjIG9yIGlhNjQuICBBcmNoIGRldmVsb3BlcnMgbmVlZCB0byBrbm93IGFib3V0IHRoZSBhcmNoIE1ha2VmaWxlCithcyB3ZWxsIGFzIGtidWlsZCBNYWtlZmlsZXMuCisKKypLYnVpbGQgZGV2ZWxvcGVycyogYXJlIHBlb3BsZSB3aG8gd29yayBvbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpdHNlbGYuCitUaGVzZSBwZW9wbGUgbmVlZCB0byBrbm93IGFib3V0IGFsbCBhc3BlY3RzIG9mIHRoZSBrZXJuZWwgTWFrZWZpbGVzLgorCitUaGlzIGRvY3VtZW50IGlzIGFpbWVkIHRvd2FyZHMgbm9ybWFsIGRldmVsb3BlcnMgYW5kIGFyY2ggZGV2ZWxvcGVycy4KKworCis9PT0gMyBUaGUga2J1aWxkIGZpbGVzCisKK01vc3QgTWFrZWZpbGVzIHdpdGhpbiB0aGUga2VybmVsIGFyZSBrYnVpbGQgTWFrZWZpbGVzIHRoYXQgdXNlIHRoZQora2J1aWxkIGluZnJhc3RydWN0dXJlLiBUaGlzIGNoYXB0ZXIgaW50cm9kdWNlIHRoZSBzeW50YXggdXNlZCBpbiB0aGUKK2tidWlsZCBtYWtlZmlsZXMuCitUaGUgcHJlZmVycmVkIG5hbWUgZm9yIHRoZSBrYnVpbGQgZmlsZXMgaXMgJ0tidWlsZCcgYnV0ICdNYWtlZmlsZScgd2lsbAorY29udGludWUgdG8gYmUgc3VwcG9ydGVkLiBBbGwgbmV3IGRldmVsb3BtZW4gaXMgZXhwZWN0ZWQgdG8gdXNlIHRoZQorS2J1aWxkIGZpbGVuYW1lLgorCitTZWN0aW9uIDMuMSAiR29hbCBkZWZpbml0aW9ucyIgaXMgYSBxdWljayBpbnRybywgZnVydGhlciBjaGFwdGVycyBwcm92aWRlCittb3JlIGRldGFpbHMsIHdpdGggcmVhbCBleGFtcGxlcy4KKworLS0tIDMuMSBHb2FsIGRlZmluaXRpb25zCisKKwlHb2FsIGRlZmluaXRpb25zIGFyZSB0aGUgbWFpbiBwYXJ0IChoZWFydCkgb2YgdGhlIGtidWlsZCBNYWtlZmlsZS4KKwlUaGVzZSBsaW5lcyBkZWZpbmUgdGhlIGZpbGVzIHRvIGJlIGJ1aWx0LCBhbnkgc3BlY2lhbCBjb21waWxhdGlvbgorCW9wdGlvbnMsIGFuZCBhbnkgc3ViZGlyZWN0b3JpZXMgdG8gYmUgZW50ZXJlZCByZWN1cnNpdmVseS4KKworCVRoZSBtb3N0IHNpbXBsZSBrYnVpbGQgbWFrZWZpbGUgY29udGFpbnMgb25lIGxpbmU6CisKKwlFeGFtcGxlOgorCQlvYmoteSArPSBmb28ubworCisJVGhpcyB0ZWxsIGtidWlsZCB0aGF0IHRoZXJlIGlzIG9uZSBvYmplY3QgaW4gdGhhdCBkaXJlY3RvcnkgbmFtZWQKKwlmb28uby4gZm9vLm8gd2lsbCBiZSBidWlsdCBmcm9tIGZvby5jIG9yIGZvby5TLgorCisJSWYgZm9vLm8gc2hhbGwgYmUgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSB2YXJpYWJsZSBvYmotbSBpcyB1c2VkLgorCVRoZXJlZm9yZSB0aGUgZm9sbG93aW5nIHBhdHRlcm4gaXMgb2Z0ZW4gdXNlZDoKKworCUV4YW1wbGU6CisJCW9iai0kKENPTkZJR19GT08pICs9IGZvby5vCisKKwkkKENPTkZJR19GT08pIGV2YWx1YXRlcyB0byBlaXRoZXIgeSAoZm9yIGJ1aWx0LWluKSBvciBtIChmb3IgbW9kdWxlKS4KKwlJZiBDT05GSUdfRk9PIGlzIG5laXRoZXIgeSBub3IgbSwgdGhlbiB0aGUgZmlsZSB3aWxsIG5vdCBiZSBjb21waWxlZAorCW5vciBsaW5rZWQuCisKKy0tLSAzLjIgQnVpbHQtaW4gb2JqZWN0IGdvYWxzIC0gb2JqLXkKKworCVRoZSBrYnVpbGQgTWFrZWZpbGUgc3BlY2lmaWVzIG9iamVjdCBmaWxlcyBmb3Igdm1saW51eAorCWluIHRoZSBsaXN0cyAkKG9iai15KS4gIFRoZXNlIGxpc3RzIGRlcGVuZCBvbiB0aGUga2VybmVsCisJY29uZmlndXJhdGlvbi4KKworCUtidWlsZCBjb21waWxlcyBhbGwgdGhlICQob2JqLXkpIGZpbGVzLiAgSXQgdGhlbiBjYWxscworCSIkKExEKSAtciIgdG8gbWVyZ2UgdGhlc2UgZmlsZXMgaW50byBvbmUgYnVpbHQtaW4ubyBmaWxlLgorCWJ1aWx0LWluLm8gaXMgbGF0ZXIgbGlua2VkIGludG8gdm1saW51eCBieSB0aGUgcGFyZW50IE1ha2VmaWxlLgorCisJVGhlIG9yZGVyIG9mIGZpbGVzIGluICQob2JqLXkpIGlzIHNpZ25pZmljYW50LiAgRHVwbGljYXRlcyBpbgorCXRoZSBsaXN0cyBhcmUgYWxsb3dlZDogdGhlIGZpcnN0IGluc3RhbmNlIHdpbGwgYmUgbGlua2VkIGludG8KKwlidWlsdC1pbi5vIGFuZCBzdWNjZWVkaW5nIGluc3RhbmNlcyB3aWxsIGJlIGlnbm9yZWQuCisKKwlMaW5rIG9yZGVyIGlzIHNpZ25pZmljYW50LCBiZWNhdXNlIGNlcnRhaW4gZnVuY3Rpb25zCisJKG1vZHVsZV9pbml0KCkgLyBfX2luaXRjYWxsKSB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgYm9vdCBpbiB0aGUKKwlvcmRlciB0aGV5IGFwcGVhci4gU28ga2VlcCBpbiBtaW5kIHRoYXQgY2hhbmdpbmcgdGhlIGxpbmsKKwlvcmRlciBtYXkgZS5nLiAgY2hhbmdlIHRoZSBvcmRlciBpbiB3aGljaCB5b3VyIFNDU0kKKwljb250cm9sbGVycyBhcmUgZGV0ZWN0ZWQsIGFuZCB0aHVzIHlvdSBkaXNrcyBhcmUgcmVudW1iZXJlZC4KKworCUV4YW1wbGU6CisJCSNkcml2ZXJzL2lzZG4vaTRsL01ha2VmaWxlCisJCSMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgSVNETiBzdWJzeXN0ZW0gYW5kIGRldmljZSBkcml2ZXJzLgorCQkjIEVhY2ggY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlcyBhIGxpc3Qgb2YgZmlsZXMuCisJCW9iai0kKENPTkZJR19JU0ROKSAgICAgICAgICAgICArPSBpc2RuLm8KKwkJb2JqLSQoQ09ORklHX0lTRE5fUFBQX0JTRENPTVApICs9IGlzZG5fYnNkY29tcC5vCisKKy0tLSAzLjMgTG9hZGFibGUgbW9kdWxlIGdvYWxzIC0gb2JqLW0KKworCSQob2JqLW0pIHNwZWNpZnkgb2JqZWN0IGZpbGVzIHdoaWNoIGFyZSBidWlsdCBhcyBsb2FkYWJsZQorCWtlcm5lbCBtb2R1bGVzLgorCisJQSBtb2R1bGUgbWF5IGJlIGJ1aWx0IGZyb20gb25lIHNvdXJjZSBmaWxlIG9yIHNldmVyYWwgc291cmNlCisJZmlsZXMuIEluIHRoZSBjYXNlIG9mIG9uZSBzb3VyY2UgZmlsZSwgdGhlIGtidWlsZCBtYWtlZmlsZQorCXNpbXBseSBhZGRzIHRoZSBmaWxlIHRvICQob2JqLW0pLgorCisJRXhhbXBsZToKKwkJI2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUKKwkJb2JqLSQoQ09ORklHX0lTRE5fUFBQX0JTRENPTVApICs9IGlzZG5fYnNkY29tcC5vCisKKwlOb3RlOiBJbiB0aGlzIGV4YW1wbGUgJChDT05GSUdfSVNETl9QUFBfQlNEQ09NUCkgZXZhbHVhdGVzIHRvICdtJworCisJSWYgYSBrZXJuZWwgbW9kdWxlIGlzIGJ1aWx0IGZyb20gc2V2ZXJhbCBzb3VyY2UgZmlsZXMsIHlvdSBzcGVjaWZ5CisJdGhhdCB5b3Ugd2FudCB0byBidWlsZCBhIG1vZHVsZSBpbiB0aGUgc2FtZSB3YXkgYXMgYWJvdmUuCisKKwlLYnVpbGQgbmVlZHMgdG8ga25vdyB3aGljaCB0aGUgcGFydHMgdGhhdCB5b3Ugd2FudCB0byBidWlsZCB5b3VyCisJbW9kdWxlIGZyb20sIHNvIHlvdSBoYXZlIHRvIHRlbGwgaXQgYnkgc2V0dGluZyBhbgorCSQoPG1vZHVsZV9uYW1lPi1vYmpzKSB2YXJpYWJsZS4KKworCUV4YW1wbGU6CisJCSNkcml2ZXJzL2lzZG4vaTRsL01ha2VmaWxlCisJCW9iai0kKENPTkZJR19JU0ROKSArPSBpc2RuLm8KKwkJaXNkbi1vYmpzIDo9IGlzZG5fbmV0X2xpYi5vIGlzZG5fdjExMC5vIGlzZG5fY29tbW9uLm8KKworCUluIHRoaXMgZXhhbXBsZSwgdGhlIG1vZHVsZSBuYW1lIHdpbGwgYmUgaXNkbi5vLiBLYnVpbGQgd2lsbAorCWNvbXBpbGUgdGhlIG9iamVjdHMgbGlzdGVkIGluICQoaXNkbi1vYmpzKSBhbmQgdGhlbiBydW4KKwkiJChMRCkgLXIiIG9uIHRoZSBsaXN0IG9mIHRoZXNlIGZpbGVzIHRvIGdlbmVyYXRlIGlzZG4uby4KKworCUtidWlsZCByZWNvZ25pc2VzIG9iamVjdHMgdXNlZCBmb3IgY29tcG9zaXRlIG9iamVjdHMgYnkgdGhlIHN1ZmZpeAorCS1vYmpzLCBhbmQgdGhlIHN1ZmZpeCAteS4gVGhpcyBhbGxvd3MgdGhlIE1ha2VmaWxlcyB0byB1c2UKKwl0aGUgdmFsdWUgb2YgYSBDT05GSUdfIHN5bWJvbCB0byBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIHBhcnQKKwlvZiBhIGNvbXBvc2l0ZSBvYmplY3QuCisKKwlFeGFtcGxlOgorCQkjZnMvZXh0Mi9NYWtlZmlsZQorCSAgICAgICAgb2JqLSQoQ09ORklHX0VYVDJfRlMpICAgICAgICArPSBleHQyLm8KKwkgCWV4dDIteSAgICAgICAgICAgICAgICAgICAgICAgOj0gYmFsbG9jLm8gYml0bWFwLm8KKwkgICAgICAgIGV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUikgKz0geGF0dHIubworCQorCUluIHRoaXMgZXhhbXBsZSB4YXR0ci5vIGlzIG9ubHkgcGFydCBvZiB0aGUgY29tcG9zaXRlIG9iamVjdAorCWV4dDIubywgaWYgJChDT05GSUdfRVhUMl9GU19YQVRUUikgZXZhbHVhdGVzIHRvICd5Jy4KKworCU5vdGU6IE9mIGNvdXJzZSwgd2hlbiB5b3UgYXJlIGJ1aWxkaW5nIG9iamVjdHMgaW50byB0aGUga2VybmVsLAorCXRoZSBzeW50YXggYWJvdmUgd2lsbCBhbHNvIHdvcmsuIFNvLCBpZiB5b3UgaGF2ZSBDT05GSUdfRVhUMl9GUz15LAorCWtidWlsZCB3aWxsIGJ1aWxkIGFuIGV4dDIubyBmaWxlIGZvciB5b3Ugb3V0IG9mIHRoZSBpbmRpdmlkdWFsCisJcGFydHMgYW5kIHRoZW4gbGluayB0aGlzIGludG8gYnVpbHQtaW4ubywgYXMgeW91IHdvdWxkIGV4cGVjdC4KKworLS0tIDMuNCBPYmplY3RzIHdoaWNoIGV4cG9ydCBzeW1ib2xzCisKKwlObyBzcGVjaWFsIG5vdGF0aW9uIGlzIHJlcXVpcmVkIGluIHRoZSBtYWtlZmlsZXMgZm9yCisJbW9kdWxlcyBleHBvcnRpbmcgc3ltYm9scy4KKworLS0tIDMuNSBMaWJyYXJ5IGZpbGUgZ29hbHMgLSBsaWIteQorCisJT2JqZWN0cyBsaXN0ZWQgd2l0aCBvYmotKiBhcmUgdXNlZCBmb3IgbW9kdWxlcyBvcgorCWNvbWJpbmVkIGluIGEgYnVpbHQtaW4ubyBmb3IgdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkuCisJVGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgdG8gbGlzdCBvYmplY3RzIHRoYXQgd2lsbAorCWJlIGluY2x1ZGVkIGluIGEgbGlicmFyeSwgbGliLmEuCisJQWxsIG9iamVjdHMgbGlzdGVkIHdpdGggbGliLXkgYXJlIGNvbWJpbmVkIGluIGEgc2luZ2xlCisJbGlicmFyeSBmb3IgdGhhdCBkaXJlY3RvcnkuCisJT2JqZWN0cyB0aGF0IGFyZSBsaXN0ZWQgaW4gb2JqLXkgYW5kIGFkZGl0aW9uYWwgbGlzdGVkIGluCisJbGliLXkgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnksIHNpbmNlIHRoZXkgd2lsbCBhbnl3YXkKKwliZSBhY2Nlc3NpYmxlLgorCUZvciBjb25zaXN0ZW5jeSBvYmplY3RzIGxpc3RlZCBpbiBsaWItbSB3aWxsIGJlIGluY2x1ZGVkIGluIGxpYi5hLiAKKworCU5vdGUgdGhhdCB0aGUgc2FtZSBrYnVpbGQgbWFrZWZpbGUgbWF5IGxpc3QgZmlsZXMgdG8gYmUgYnVpbHQtaW4KKwlhbmQgdG8gYmUgcGFydCBvZiBhIGxpYnJhcnkuIFRoZXJlZm9yZSB0aGUgc2FtZSBkaXJlY3RvcnkKKwltYXkgY29udGFpbiBib3RoIGEgYnVpbHQtaW4ubyBhbmQgYSBsaWIuYSBmaWxlLgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9saWIvTWFrZWZpbGUKKwkJbGliLXkgICAgOj0gY2hlY2tzdW0ubyBkZWxheS5vCisKKwlUaGlzIHdpbGwgY3JlYXRlIGEgbGlicmFyeSBsaWIuYSBiYXNlZCBvbiBjaGVja3N1bS5vIGFuZCBkZWxheS5vLgorCUZvciBrYnVpbGQgdG8gYWN0dWFsbHkgcmVjb2duaXplIHRoYXQgdGhlcmUgaXMgYSBsaWIuYSBiZWluZyBidWlsZAorCXRoZSBkaXJlY3Rvcnkgc2hhbGwgYmUgbGlzdGVkIGluIGxpYnMteS4KKwlTZWUgYWxzbyAiNi4zIExpc3QgZGlyZWN0b3JpZXMgdG8gdmlzaXQgd2hlbiBkZXNjZW5kaW5nIi4KKyAKKwlVc2FnZSBvZiBsaWIteSBpcyBub3JtYWxseSByZXN0cmljdGVkIHRvIGxpYi8gYW5kIGFyY2gvKi9saWIuCisKKy0tLSAzLjYgRGVzY2VuZGluZyBkb3duIGluIGRpcmVjdG9yaWVzCisKKwlBIE1ha2VmaWxlIGlzIG9ubHkgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIG9iamVjdHMgaW4gaXRzIG93bgorCWRpcmVjdG9yeS4gRmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgc2hvdWxkIGJlIHRha2VuIGNhcmUgb2YgYnkKKwlNYWtlZmlsZXMgaW4gdGhlc2Ugc3ViZGlycy4gVGhlIGJ1aWxkIHN5c3RlbSB3aWxsIGF1dG9tYXRpY2FsbHkKKwlpbnZva2UgbWFrZSByZWN1cnNpdmVseSBpbiBzdWJkaXJlY3RvcmllcywgcHJvdmlkZWQgeW91IGxldCBpdCBrbm93IG9mCisJdGhlbS4KKworCVRvIGRvIHNvIG9iai15IGFuZCBvYmotbSBhcmUgdXNlZC4KKwlleHQyIGxpdmVzIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBhbmQgdGhlIE1ha2VmaWxlIHByZXNlbnQgaW4gZnMvCisJdGVsbHMga2J1aWxkIHRvIGRlc2NlbmQgZG93biB1c2luZyB0aGUgZm9sbG93aW5nIGFzc2lnbm1lbnQuCisKKwlFeGFtcGxlOgorCQkjZnMvTWFrZWZpbGUKKwkJb2JqLSQoQ09ORklHX0VYVDJfRlMpICs9IGV4dDIvCisKKwlJZiBDT05GSUdfRVhUMl9GUyBpcyBzZXQgdG8gZWl0aGVyICd5JyAoYnVpbHQtaW4pIG9yICdtJyAobW9kdWxhcikKKwl0aGUgY29ycmVzcG9uZGluZyBvYmotIHZhcmlhYmxlIHdpbGwgYmUgc2V0LCBhbmQga2J1aWxkIHdpbGwgZGVzY2VuZAorCWRvd24gaW4gdGhlIGV4dDIgZGlyZWN0b3J5LgorCUtidWlsZCBvbmx5IHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBkZWNpZGUgdGhhdCBpdCBuZWVkcyB0byB2aXNpdAorCXRoZSBkaXJlY3RvcnksIGl0IGlzIHRoZSBNYWtlZmlsZSBpbiB0aGUgc3ViZGlyZWN0b3J5IHRoYXQKKwlzcGVjaWZpZXMgd2hhdCBpcyBtb2R1bGVzIGFuZCB3aGF0IGlzIGJ1aWx0LWluLgorCisJSXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgYSBDT05GSUdfIHZhcmlhYmxlIHdoZW4gYXNzaWduaW5nIGRpcmVjdG9yeQorCW5hbWVzLiBUaGlzIGFsbG93cyBrYnVpbGQgdG8gdG90YWxseSBza2lwIHRoZSBkaXJlY3RvcnkgaWYgdGhlCisJY29ycmVzcG9uZGluZyBDT05GSUdfIG9wdGlvbiBpcyBuZWl0aGVyICd5JyBub3IgJ20nLgorCistLS0gMy43IENvbXBpbGF0aW9uIGZsYWdzCisKKyAgICBFWFRSQV9DRkxBR1MsIEVYVFJBX0FGTEFHUywgRVhUUkFfTERGTEFHUywgRVhUUkFfQVJGTEFHUworCisJQWxsIHRoZSBFWFRSQV8gdmFyaWFibGVzIGFwcGx5IG9ubHkgdG8gdGhlIGtidWlsZCBtYWtlZmlsZQorCXdoZXJlIHRoZXkgYXJlIGFzc2lnbmVkLiBUaGUgRVhUUkFfIHZhcmlhYmxlcyBhcHBseSB0byBhbGwKKwljb21tYW5kcyBleGVjdXRlZCBpbiB0aGUga2J1aWxkIG1ha2VmaWxlLgorCisJJChFWFRSQV9DRkxBR1MpIHNwZWNpZmllcyBvcHRpb25zIGZvciBjb21waWxpbmcgQyBmaWxlcyB3aXRoCisJJChDQykuCisKKwlFeGFtcGxlOgorCQkjIGRyaXZlcnMvc291bmQvZW11MTBrMS9NYWtlZmlsZQorCQlFWFRSQV9DRkxBR1MgKz0gLUkkKG9iaikKKwkJaWZkZWYgREVCVUcKKwkJICAgIEVYVFJBX0NGTEFHUyArPSAtREVNVTEwSzFfREVCVUcKKwkJZW5kaWYKKworCisJVGhpcyB2YXJpYWJsZSBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgdG9wIE1ha2VmaWxlIG93bnMgdGhlCisJdmFyaWFibGUgJChDRkxBR1MpIGFuZCB1c2VzIGl0IGZvciBjb21waWxhdGlvbiBmbGFncyBmb3IgdGhlCisJZW50aXJlIHRyZWUuCisKKwkkKEVYVFJBX0FGTEFHUykgaXMgYSBzaW1pbGFyIHN0cmluZyBmb3IgcGVyLWRpcmVjdG9yeSBvcHRpb25zCisJd2hlbiBjb21waWxpbmcgYXNzZW1ibHkgbGFuZ3VhZ2Ugc291cmNlLgorCisJRXhhbXBsZToKKwkJI2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQorCQlFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCisKKworCSQoRVhUUkFfTERGTEFHUykgYW5kICQoRVhUUkFfQVJGTEFHUykgYXJlIHNpbWlsYXIgc3RyaW5ncyBmb3IKKwlwZXItZGlyZWN0b3J5IG9wdGlvbnMgdG8gJChMRCkgYW5kICQoQVIpLgorCisJRXhhbXBsZToKKwkJI2FyY2gvbTY4ay9mcHNwMDQwL01ha2VmaWxlCisJCUVYVFJBX0xERkxBR1MgOj0gLXgKKworICAgIENGTEFHU18kQCwgQUZMQUdTXyRACisKKwlDRkxBR1NfJEAgYW5kIEFGTEFHU18kQCBvbmx5IGFwcGx5IHRvIGNvbW1hbmRzIGluIGN1cnJlbnQKKwlrYnVpbGQgbWFrZWZpbGUuCisKKwkkKENGTEFHU18kQCkgc3BlY2lmaWVzIHBlci1maWxlIG9wdGlvbnMgZm9yICQoQ0MpLiAgVGhlICRACisJcGFydCBoYXMgYSBsaXRlcmFsIHZhbHVlIHdoaWNoIHNwZWNpZmllcyB0aGUgZmlsZSB0aGF0IGl0IGlzIGZvci4KKworCUV4YW1wbGU6CisJCSMgZHJpdmVycy9zY3NpL01ha2VmaWxlCisJCUNGTEFHU19haGExNTJ4Lm8gPSAgIC1EQUhBMTUyWF9TVEFUIC1EQVVUT0NPTkYKKwkJQ0ZMQUdTX2dkdGgubyAgICA9ICMgLURERUJVR19HRFRIPTIgLURfX1NFUklBTF9fIC1EX19DT00yX18gXAorCQkJCSAgICAgLURHRFRIX1NUQVRJU1RJQ1MKKwkJQ0ZMQUdTX3NlYWdhdGUubyA9ICAgLURBUkJJVFJBVEUgLURQQVJJVFkgLURTRUFHQVRFX1VTRV9BU00KKworCVRoZXNlIHRocmVlIGxpbmVzIHNwZWNpZnkgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGFoYTE1MngubywKKwlnZHRoLm8sIGFuZCBzZWFnYXRlLm8KKworCSQoQUZMQUdTXyRAKSBpcyBhIHNpbWlsYXIgZmVhdHVyZSBmb3Igc291cmNlIGZpbGVzIGluIGFzc2VtYmx5CisJbGFuZ3VhZ2VzLgorCisJRXhhbXBsZToKKwkJIyBhcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKwkJQUZMQUdTX2hlYWQtYXJtdi5vIDo9IC1EVEVYVEFERFI9JChURVhUQUREUikgLXRyYWRpdGlvbmFsCisJCUFGTEFHU19oZWFkLWFybW8ubyA6PSAtRFRFWFRBRERSPSQoVEVYVEFERFIpIC10cmFkaXRpb25hbAorCistLS0gMy45IERlcGVuZGVuY3kgdHJhY2tpbmcKKworCUtidWlsZCB0cmFja3MgZGVwZW5kZW5jaWVzIG9uIHRoZSBmb2xsb3dpbmc6CisJMSkgQWxsIHByZXJlcXVpc2l0ZSBmaWxlcyAoYm90aCAqLmMgYW5kICouaCkKKwkyKSBDT05GSUdfIG9wdGlvbnMgdXNlZCBpbiBhbGwgcHJlcmVxdWlzaXRlIGZpbGVzCisJMykgQ29tbWFuZC1saW5lIHVzZWQgdG8gY29tcGlsZSB0YXJnZXQKKworCVRodXMsIGlmIHlvdSBjaGFuZ2UgYW4gb3B0aW9uIHRvICQoQ0MpIGFsbCBhZmZlY3RlZCBmaWxlcyB3aWxsCisJYmUgcmUtY29tcGlsZWQuCisKKy0tLSAzLjEwIFNwZWNpYWwgUnVsZXMKKworCVNwZWNpYWwgcnVsZXMgYXJlIHVzZWQgd2hlbiB0aGUga2J1aWxkIGluZnJhc3RydWN0dXJlIGRvZXMKKwlub3QgcHJvdmlkZSB0aGUgcmVxdWlyZWQgc3VwcG9ydC4gQSB0eXBpY2FsIGV4YW1wbGUgaXMKKwloZWFkZXIgZmlsZXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4KKwlBbm90aGVyIGV4YW1wbGUgaXMgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBNYWtlZmlsZXMgd2hpY2gKKwluZWVkcyBzcGVjaWFsIHJ1bGVzIHRvIHByZXBhcmUgYm9vdCBpbWFnZXMgZXRjLgorCisJU3BlY2lhbCBydWxlcyBhcmUgd3JpdHRlbiBhcyBub3JtYWwgTWFrZSBydWxlcy4KKwlLYnVpbGQgaXMgbm90IGV4ZWN1dGluZyBpbiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBNYWtlZmlsZSBpcworCWxvY2F0ZWQsIHNvIGFsbCBzcGVjaWFsIHJ1bGVzIHNoYWxsIHByb3ZpZGUgYSByZWxhdGl2ZQorCXBhdGggdG8gcHJlcmVxdWlzaXRlIGZpbGVzIGFuZCB0YXJnZXQgZmlsZXMuCisKKwlUd28gdmFyaWFibGVzIGFyZSB1c2VkIHdoZW4gZGVmaW5pbmcgc3BlY2lhbCBydWxlczoKKworICAgICQoc3JjKQorCSQoc3JjKSBpcyBhIHJlbGF0aXZlIHBhdGggd2hpY2ggcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkKKwl3aGVyZSB0aGUgTWFrZWZpbGUgaXMgbG9jYXRlZC4gQWx3YXlzIHVzZSAkKHNyYykgd2hlbgorCXJlZmVycmluZyB0byBmaWxlcyBsb2NhdGVkIGluIHRoZSBzcmMgdHJlZS4KKworICAgICQob2JqKQorCSQob2JqKSBpcyBhIHJlbGF0aXZlIHBhdGggd2hpY2ggcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkKKwl3aGVyZSB0aGUgdGFyZ2V0IGlzIHNhdmVkLiBBbHdheXMgdXNlICQob2JqKSB3aGVuCisJcmVmZXJyaW5nIHRvIGdlbmVyYXRlZCBmaWxlcy4KKworCUV4YW1wbGU6CisJCSNkcml2ZXJzL3Njc2kvTWFrZWZpbGUKKwkJJChvYmopLzUzYzh4eF9kLmg6ICQoc3JjKS81M2M3LDh4eC5zY3IgJChzcmMpL3NjcmlwdF9hc20ucGwKKwkJCSQoQ1BQKSAtRENISVA9ODEwIC0gPCAkPCB8IC4uLiAkKHNyYykvc2NyaXB0X2FzbS5wbAorCisJVGhpcyBpcyBhIHNwZWNpYWwgcnVsZSwgZm9sbG93aW5nIHRoZSBub3JtYWwgc3ludGF4CisJcmVxdWlyZWQgYnkgbWFrZS4KKwlUaGUgdGFyZ2V0IGZpbGUgZGVwZW5kcyBvbiB0d28gcHJlcmVxdWlzaXRlIGZpbGVzLiBSZWZlcmVuY2VzCisJdG8gdGhlIHRhcmdldCBmaWxlIGFyZSBwcmVmaXhlZCB3aXRoICQob2JqKSwgcmVmZXJlbmNlcworCXRvIHByZXJlcXVpc2l0ZXMgYXJlIHJlZmVyZW5jZWQgd2l0aCAkKHNyYykgKGJlY2F1c2UgdGhleSBhcmUgbm90CisJZ2VuZXJhdGVkIGZpbGVzKS4KKworCis9PT0gNCBIb3N0IFByb2dyYW0gc3VwcG9ydAorCitLYnVpbGQgc3VwcG9ydHMgYnVpbGRpbmcgZXhlY3V0YWJsZXMgb24gdGhlIGhvc3QgZm9yIHVzZSBkdXJpbmcgdGhlCitjb21waWxhdGlvbiBzdGFnZS4KK1R3byBzdGVwcyBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gdXNlIGEgaG9zdCBleGVjdXRhYmxlLgorCitUaGUgZmlyc3Qgc3RlcCBpcyB0byB0ZWxsIGtidWlsZCB0aGF0IGEgaG9zdCBwcm9ncmFtIGV4aXN0cy4gVGhpcyBpcworZG9uZSB1dGlsaXNpbmcgdGhlIHZhcmlhYmxlIGhvc3Rwcm9ncy15LgorCitUaGUgc2Vjb25kIHN0ZXAgaXMgdG8gYWRkIGFuIGV4cGxpY2l0IGRlcGVuZGVuY3kgdG8gdGhlIGV4ZWN1dGFibGUuCitUaGlzIGNhbiBiZSBkb25lIGluIHR3byB3YXlzLiBFaXRoZXIgYWRkIHRoZSBkZXBlbmRlbmN5IGluIGEgcnVsZSwgCitvciB1dGlsaXNlIHRoZSB2YXJpYWJsZSAkKGFsd2F5cykuCitCb3RoIHBvc3NpYmlsaXRpZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nLgorCistLS0gNC4xIFNpbXBsZSBIb3N0IFByb2dyYW0KKworCUluIHNvbWUgY2FzZXMgdGhlcmUgaXMgYSBuZWVkIHRvIGNvbXBpbGUgYW5kIHJ1biBhIHByb2dyYW0gb24gdGhlCisJY29tcHV0ZXIgd2hlcmUgdGhlIGJ1aWxkIGlzIHJ1bm5pbmcuCisJVGhlIGZvbGxvd2luZyBsaW5lIHRlbGxzIGtidWlsZCB0aGF0IHRoZSBwcm9ncmFtIGJpbjJoZXggc2hhbGwgYmUKKwlidWlsdCBvbiB0aGUgYnVpbGQgaG9zdC4KKworCUV4YW1wbGU6CisJCWhvc3Rwcm9ncy15IDo9IGJpbjJoZXgKKworCUtidWlsZCBhc3N1bWVzIGluIHRoZSBhYm92ZSBleGFtcGxlIHRoYXQgYmluMmhleCBpcyBtYWRlIGZyb20gYSBzaW5nbGUKKwljLXNvdXJjZSBmaWxlIG5hbWVkIGJpbjJoZXguYyBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworCXRoZSBNYWtlZmlsZS4KKyAgCistLS0gNC4yIENvbXBvc2l0ZSBIb3N0IFByb2dyYW1zCisKKwlIb3N0IHByb2dyYW1zIGNhbiBiZSBtYWRlIHVwIGJhc2VkIG9uIGNvbXBvc2l0ZSBvYmplY3RzLgorCVRoZSBzeW50YXggdXNlZCB0byBkZWZpbmUgY29tcG9zaXRlIG9iamVjdHMgZm9yIGhvc3QgcHJvZ3JhbXMgaXMKKwlzaW1pbGFyIHRvIHRoZSBzeW50YXggdXNlZCBmb3Iga2VybmVsIG9iamVjdHMuCisJJCg8ZXhlY3V0ZWFibGU+LW9ianMpIGxpc3QgYWxsIG9iamVjdHMgdXNlZCB0byBsaW5rIHRoZSBmaW5hbAorCWV4ZWN1dGFibGUuCisKKwlFeGFtcGxlOgorCQkjc2NyaXB0cy9seGRpYWxvZy9NYWtlZmlsZQorCQlob3N0cHJvZ3MteSAgIDo9IGx4ZGlhbG9nICAKKwkJbHhkaWFsb2ctb2JqcyA6PSBjaGVja2xpc3QubyBseGRpYWxvZy5vCisKKwlPYmplY3RzIHdpdGggZXh0ZW5zaW9uIC5vIGFyZSBjb21waWxlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIC5jCisJZmlsZXMuIEluIHRoZSBhYm92ZSBleGFtcGxlIGNoZWNrbGlzdC5jIGlzIGNvbXBpbGVkIHRvIGNoZWNrbGlzdC5vCisJYW5kIGx4ZGlhbG9nLmMgaXMgY29tcGlsZWQgdG8gbHhkaWFsb2cuby4KKwlGaW5hbGx5IHRoZSB0d28gLm8gZmlsZXMgYXJlIGxpbmtlZCB0byB0aGUgZXhlY3V0YWJsZSwgbHhkaWFsb2cuCisJTm90ZTogVGhlIHN5bnRheCA8ZXhlY3V0YWJsZT4teSBpcyBub3QgcGVybWl0dGVkIGZvciBob3N0LXByb2dyYW1zLgorCistLS0gNC4zIERlZmluaW5nIHNoYXJlZCBsaWJyYXJpZXMgIAorICAKKwlPYmplY3RzIHdpdGggZXh0ZW5zaW9uIC5zbyBhcmUgY29uc2lkZXJlZCBzaGFyZWQgbGlicmFyaWVzLCBhbmQKKwl3aWxsIGJlIGNvbXBpbGVkIGFzIHBvc2l0aW9uIGluZGVwZW5kZW50IG9iamVjdHMuCisJS2J1aWxkIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCB0aGUgdXNhZ2UKKwlzaGFsbCBiZSByZXN0cmljdGVkLgorCUluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB0aGUgbGlia2NvbmZpZy5zbyBzaGFyZWQgbGlicmFyeSBpcyB1c2VkCisJdG8gbGluayB0aGUgZXhlY3V0YWJsZSBjb25mLgorCisJRXhhbXBsZToKKwkJI3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorCQlob3N0cHJvZ3MteSAgICAgOj0gY29uZgorCQljb25mLW9ianMgICAgICAgOj0gY29uZi5vIGxpYmtjb25maWcuc28KKwkJbGlia2NvbmZpZy1vYmpzIDo9IGV4cHIubyB0eXBlLm8KKyAgCisJU2hhcmVkIGxpYnJhcmllcyBhbHdheXMgcmVxdWlyZSBhIGNvcnJlc3BvbmRpbmcgLW9ianMgbGluZSwgYW5kCisJaW4gdGhlIGV4YW1wbGUgYWJvdmUgdGhlIHNoYXJlZCBsaWJyYXJ5IGxpYmtjb25maWcgaXMgY29tcG9zZWQgYnkKKwl0aGUgdHdvIG9iamVjdHMgZXhwci5vIGFuZCB0eXBlLm8uCisJZXhwci5vIGFuZCB0eXBlLm8gd2lsbCBiZSBidWlsdCBhcyBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGFuZAorCWxpbmtlZCBhcyBhIHNoYXJlZCBsaWJyYXJ5IGxpYmtjb25maWcuc28uIEMrKyBpcyBub3Qgc3VwcG9ydGVkIGZvcgorCXNoYXJlZCBsaWJyYXJpZXMuCisKKy0tLSA0LjQgVXNpbmcgQysrIGZvciBob3N0IHByb2dyYW1zCisKKwlrYnVpbGQgb2ZmZXJzIHN1cHBvcnQgZm9yIGhvc3QgcHJvZ3JhbXMgd3JpdHRlbiBpbiBDKysuIFRoaXMgd2FzCisJaW50cm9kdWNlZCBzb2xlbHkgdG8gc3VwcG9ydCBrY29uZmlnLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkCisJZm9yIGdlbmVyYWwgdXNlLgorCisJRXhhbXBsZToKKwkJI3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorCQlob3N0cHJvZ3MteSAgIDo9IHFjb25mCisJCXFjb25mLWN4eG9ianMgOj0gcWNvbmYubworCisJSW4gdGhlIGV4YW1wbGUgYWJvdmUgdGhlIGV4ZWN1dGFibGUgaXMgY29tcG9zZWQgb2YgdGhlIEMrKyBmaWxlCisJcWNvbmYuY2MgLSBpZGVudGlmaWVkIGJ5ICQocWNvbmYtY3h4b2JqcykuCisJCisJSWYgcWNvbmYgaXMgY29tcG9zZWQgYnkgYSBtaXh0dXJlIG9mIC5jIGFuZCAuY2MgZmlsZXMsIHRoZW4gYW4KKwlhZGRpdGlvbmFsIGxpbmUgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhpcy4KKworCUV4YW1wbGU6CisJCSNzY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKwkJaG9zdHByb2dzLXkgICA6PSBxY29uZgorCQlxY29uZi1jeHhvYmpzIDo9IHFjb25mLm8KKwkJcWNvbmYtb2JqcyAgICA6PSBjaGVjay5vCisJCistLS0gNC41IENvbnRyb2xsaW5nIGNvbXBpbGVyIG9wdGlvbnMgZm9yIGhvc3QgcHJvZ3JhbXMKKworCVdoZW4gY29tcGlsaW5nIGhvc3QgcHJvZ3JhbXMsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCBzcGVjaWZpYyBmbGFncy4KKwlUaGUgcHJvZ3JhbXMgd2lsbCBhbHdheXMgYmUgY29tcGlsZWQgdXRpbGlzaW5nICQoSE9TVENDKSBwYXNzZWQKKwl0aGUgb3B0aW9ucyBzcGVjaWZpZWQgaW4gJChIT1NUQ0ZMQUdTKS4KKwlUbyBzZXQgZmxhZ3MgdGhhdCB3aWxsIHRha2UgZWZmZWN0IGZvciBhbGwgaG9zdCBwcm9ncmFtcyBjcmVhdGVkCisJaW4gdGhhdCBNYWtlZmlsZSB1c2UgdGhlIHZhcmlhYmxlIEhPU1RfRVhUUkFDRkxBR1MuCisKKwlFeGFtcGxlOgorCQkjc2NyaXB0cy9seGRpYWxvZy9NYWtlZmlsZQorCQlIT1NUX0VYVFJBQ0ZMQUdTICs9IC1JL3Vzci9pbmNsdWRlL25jdXJzZXMKKyAgCisJVG8gc2V0IHNwZWNpZmljIGZsYWdzIGZvciBhIHNpbmdsZSBmaWxlIHRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uCisJaXMgdXNlZDoKKworCUV4YW1wbGU6CisJCSNhcmNoL3BwYzY0L2Jvb3QvTWFrZWZpbGUKKwkJSE9TVENGTEFHU19waWdneWJhY2subyA6PSAtREtFUk5FTEJBU0U9JChLRVJORUxCQVNFKQorICAKKwlJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZSBsaW5rZXIuCisgIAorCUV4YW1wbGU6CisJCSNzY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKKwkJSE9TVExPQURMSUJFU19xY29uZiA6PSAtTCQoUVRESVIpL2xpYgorCisJV2hlbiBsaW5raW5nIHFjb25mIGl0IHdpbGwgYmUgcGFzc2VkIHRoZSBleHRyYSBvcHRpb24gIi1MJChRVERJUikvbGliIi4KKyAKKy0tLSA0LjYgV2hlbiBob3N0IHByb2dyYW1zIGFyZSBhY3R1YWxseSBidWlsdAorCisJS2J1aWxkIHdpbGwgb25seSBidWlsZCBob3N0LXByb2dyYW1zIHdoZW4gdGhleSBhcmUgcmVmZXJlbmNlZAorCWFzIGEgcHJlcmVxdWlzaXRlLgorCVRoaXMgaXMgcG9zc2libGUgaW4gdHdvIHdheXM6CisKKwkoMSkgTGlzdCB0aGUgcHJlcmVxdWlzaXRlIGV4cGxpY2l0bHkgaW4gYSBzcGVjaWFsIHJ1bGUuCisKKwlFeGFtcGxlOgorCQkjZHJpdmVycy9wY2kvTWFrZWZpbGUKKwkJaG9zdHByb2dzLXkgOj0gZ2VuLWRldmxpc3QKKwkJJChvYmopL2Rldmxpc3QuaDogJChzcmMpL3BjaS5pZHMgJChvYmopL2dlbi1kZXZsaXN0CisJCQkoIGNkICQob2JqKTsgLi9nZW4tZGV2bGlzdCApIDwgJDwKKworCVRoZSB0YXJnZXQgJChvYmopL2Rldmxpc3QuaCB3aWxsIG5vdCBiZSBidWlsdCBiZWZvcmUgCisJJChvYmopL2dlbi1kZXZsaXN0IGlzIHVwZGF0ZWQuIE5vdGUgdGhhdCByZWZlcmVuY2VzIHRvCisJdGhlIGhvc3QgcHJvZ3JhbXMgaW4gc3BlY2lhbCBydWxlcyBtdXN0IGJlIHByZWZpeGVkIHdpdGggJChvYmopLgorCisJKDIpIFVzZSAkKGFsd2F5cykKKwlXaGVuIHRoZXJlIGlzIG5vIHN1aXRhYmxlIHNwZWNpYWwgcnVsZSwgYW5kIHRoZSBob3N0IHByb2dyYW0KKwlzaGFsbCBiZSBidWlsdCB3aGVuIGEgbWFrZWZpbGUgaXMgZW50ZXJlZCwgdGhlICQoYWx3YXlzKQorCXZhcmlhYmxlIHNoYWxsIGJlIHVzZWQuCisKKwlFeGFtcGxlOgorCQkjc2NyaXB0cy9seGRpYWxvZy9NYWtlZmlsZQorCQlob3N0cHJvZ3MteSAgIDo9IGx4ZGlhbG9nCisJCWFsd2F5cyAgICAgICAgOj0gJChob3N0cHJvZ3MteSkKKworCVRoaXMgd2lsbCB0ZWxsIGtidWlsZCB0byBidWlsZCBseGRpYWxvZyBldmVuIGlmIG5vdCByZWZlcmVuY2VkIGluCisJYW55IHJ1bGUuCisKKy0tLSA0LjcgVXNpbmcgaG9zdHByb2dzLSQoQ09ORklHX0ZPTykKKworCUEgdHlwY2FsIHBhdHRlcm4gaW4gYSBLYnVpbGQgZmlsZSBsb2sgbGlrZSB0aGlzOgorCisJRXhhbXBsZToKKwkJI3NjcmlwdHMvTWFrZWZpbGUKKwkJaG9zdHByb2dzLSQoQ09ORklHX0tBTExTWU1TKSArPSBrYWxsc3ltcworCisJS2J1aWxkIGtub3dzIGFib3V0IGJvdGggJ3knIGZvciBidWlsdC1pbiBhbmQgJ20nIGZvciBtb2R1bGUuCisJU28gaWYgYSBjb25maWcgc3ltYm9sIGV2YWx1YXRlIHRvICdtJywga2J1aWxkIHdpbGwgc3RpbGwgYnVpbGQKKwl0aGUgYmluYXJ5LiBJbiBvdGhlciB3b3JkcyBLYnVpbGQgaGFuZGxlIGhvc3Rwcm9ncy1tIGV4YWN0bHkKKwlsaWtlIGhvc3Rwcm9ncy15LiBCdXQgb25seSBob3N0cHJvZ3MteSBpcyByZWNvbW1lbmQgdXNlZAorCXdoZW4gbm8gQ09ORklHIHN5bWJvbCBhcmUgaW52b2x2ZWQuCisKKz09PSA1IEtidWlsZCBjbGVhbiBpbmZyYXN0cnVjdHVyZQorCisibWFrZSBjbGVhbiIgZGVsZXRlcyBtb3N0IGdlbmVyYXRlZCBmaWxlcyBpbiB0aGUgc3JjIHRyZWUgd2hlcmUgdGhlIGtlcm5lbAoraXMgY29tcGlsZWQuIFRoaXMgaW5jbHVkZXMgZ2VuZXJhdGVkIGZpbGVzIHN1Y2ggYXMgaG9zdCBwcm9ncmFtcy4KK0tidWlsZCBrbm93cyB0YXJnZXRzIGxpc3RlZCBpbiAkKGhvc3Rwcm9ncy15KSwgJChob3N0cHJvZ3MtbSksICQoYWx3YXlzKSwKKyQoZXh0cmEteSkgYW5kICQodGFyZ2V0cykuIFRoZXkgYXJlIGFsbCBkZWxldGVkIGR1cmluZyAibWFrZSBjbGVhbiIuCitGaWxlcyBtYXRjaGluZyB0aGUgcGF0dGVybnMgIiouW29hc10iLCAiKi5rbyIsIHBsdXMgc29tZSBhZGRpdGlvbmFsIGZpbGVzCitnZW5lcmF0ZWQgYnkga2J1aWxkIGFyZSBkZWxldGVkIGFsbCBvdmVyIHRoZSBrZXJuZWwgc3JjIHRyZWUgd2hlbgorIm1ha2UgY2xlYW4iIGlzIGV4ZWN1dGVkLgorCitBZGRpdGlvbmFsIGZpbGVzIGNhbiBiZSBzcGVjaWZpZWQgaW4ga2J1aWxkIG1ha2VmaWxlcyBieSB1c2Ugb2YgJChjbGVhbi1maWxlcykuCisKKwlFeGFtcGxlOgorCQkjZHJpdmVycy9wY2kvTWFrZWZpbGUKKwkJY2xlYW4tZmlsZXMgOj0gZGV2bGlzdC5oIGNsYXNzbGlzdC5oCisKK1doZW4gZXhlY3V0aW5nICJtYWtlIGNsZWFuIiwgdGhlIHR3byBmaWxlcyAiZGV2bGlzdC5oIGNsYXNzbGlzdC5oIiB3aWxsCitiZSBkZWxldGVkLiBLYnVpbGQgd2lsbCBhc3N1bWUgZmlsZXMgdG8gYmUgaW4gc2FtZSByZWxhdGl2ZSBkaXJlY3RvcnkgYXMgdGhlCitNYWtlZmlsZSBleGNlcHQgaWYgYW4gYWJzb2x1dGUgcGF0aCBpcyBzcGVjaWZpZWQgKHBhdGggc3RhcnRpbmcgd2l0aCAnLycpLgorCitUbyBkZWxldGUgYSBkaXJlY3RvcnkgaGlyYWNoeSB1c2U6CisJRXhhbXBsZToKKwkJI3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQorCQljbGVhbi1kaXJzIDo9ICQob2JqdHJlZSkvZGViaWFuLworCitUaGlzIHdpbGwgZGVsZXRlIHRoZSBkaXJlY3RvcnkgZGViaWFuLCBpbmNsdWRpbmcgYWxsIHN1YmRpcmVjdG9yaWVzLgorS2J1aWxkIHdpbGwgYXNzdW1lIHRoZSBkaXJlY3RvcmllcyB0byBiZSBpbiB0aGUgc2FtZSByZWxhdGl2ZSBwYXRoIGFzIHRoZQorTWFrZWZpbGUgaWYgbm8gYWJzb2x1dGUgcGF0aCBpcyBzcGVjaWZpZWQgKHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCAnLycpLgorCitVc3VhbGx5IGtidWlsZCBkZXNjZW5kcyBkb3duIGluIHN1YmRpcmVjdG9yaWVzIGR1ZSB0byAib2JqLSogOj0gZGlyLyIsCitidXQgaW4gdGhlIGFyY2hpdGVjdHVyZSBtYWtlZmlsZXMgd2hlcmUgdGhlIGtidWlsZCBpbmZyYXN0cnVjdHVyZQoraXMgbm90IHN1ZmZpY2llbnQgdGhpcyBzb21ldGltZXMgbmVlZHMgdG8gYmUgZXhwbGljaXQuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L2Jvb3QvTWFrZWZpbGUKKwkJc3ViZGlyLSA6PSBjb21wcmVzc2VkLworCitUaGUgYWJvdmUgYXNzaWdubWVudCBpbnN0cnVjdHMga2J1aWxkIHRvIGRlc2NlbmQgZG93biBpbiB0aGUKK2RpcmVjdG9yeSBjb21wcmVzc2VkLyB3aGVuICJtYWtlIGNsZWFuIiBpcyBleGVjdXRlZC4KKworVG8gc3VwcG9ydCB0aGUgY2xlYW4gaW5mcmFzdHJ1Y3R1cmUgaW4gdGhlIE1ha2VmaWxlcyB0aGF0IGJ1aWxkcyB0aGUKK2ZpbmFsIGJvb3RpbWFnZSB0aGVyZSBpcyBhbiBvcHRpb25hbCB0YXJnZXQgbmFtZWQgYXJjaGNsZWFuOgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQlhcmNoY2xlYW46CisJCQkkKFEpJChNQUtFKSAkKGNsZWFuKT1hcmNoL2kzODYvYm9vdAorCitXaGVuICJtYWtlIGNsZWFuIiBpcyBleGVjdXRlZCwgbWFrZSB3aWxsIGRlc2NlbmQgZG93biBpbiBhcmNoL2kzODYvYm9vdCwKK2FuZCBjbGVhbiBhcyB1c3VhbC4gVGhlIE1ha2VmaWxlIGxvY2F0ZWQgaW4gYXJjaC9pMzg2L2Jvb3QvIG1heSB1c2UKK3RoZSBzdWJkaXItIHRyaWNrIHRvIGRlc2NlbmQgZnVydGhlciBkb3duLgorCitOb3RlIDE6IGFyY2gvJChBUkNIKS9NYWtlZmlsZSBjYW5ub3QgdXNlICJzdWJkaXItIiwgYmVjYXVzZSB0aGF0IGZpbGUgaXMKK2luY2x1ZGVkIGluIHRoZSB0b3AgbGV2ZWwgbWFrZWZpbGUsIGFuZCB0aGUga2J1aWxkIGluZnJhc3RydWN0dXJlCitpcyBub3Qgb3BlcmF0aW9uYWwgYXQgdGhhdCBwb2ludC4KKworTm90ZSAyOiBBbGwgZGlyZWN0b3JpZXMgbGlzdGVkIGluIGNvcmUteSwgbGlicy15LCBkcml2ZXJzLXkgYW5kIG5ldC15IHdpbGwKK2JlIHZpc2l0ZWQgZHVyaW5nICJtYWtlIGNsZWFuIi4KKworPT09IDYgQXJjaGl0ZWN0dXJlIE1ha2VmaWxlcworCitUaGUgdG9wIGxldmVsIE1ha2VmaWxlIHNldHMgdXAgdGhlIGVudmlyb25tZW50IGFuZCBkb2VzIHRoZSBwcmVwYXJhdGlvbiwKK2JlZm9yZSBzdGFydGluZyB0byBkZXNjZW5kIGRvd24gaW4gdGhlIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMuCitUaGUgdG9wIGxldmVsIG1ha2VmaWxlIGNvbnRhaW5zIHRoZSBnZW5lcmljIHBhcnQsIHdoZXJlYXMgdGhlCithcmNoLyQoQVJDSCkvTWFrZWZpbGUgY29udGFpbnMgd2hhdCBpcyByZXF1aXJlZCB0byBzZXQtdXAga2J1aWxkCit0byB0aGUgc2FpZCBhcmNoaXRlY3R1cmUuCitUbyBkbyBzbyBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgc2V0cyBhIG51bWJlciBvZiB2YXJpYWJsZXMsIGFuZCBkZWZpbmVzCithIGZldyB0YXJnZXRzLgorCitXaGVuIGtidWlsZCBleGVjdXRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSBmb2xsb3dlZCAocm91Z2hseSk6CisxKSBDb25maWd1cmF0aW9uIG9mIHRoZSBrZXJuZWwgPT4gcHJvZHVjZWQgLmNvbmZpZworMikgU3RvcmUga2VybmVsIHZlcnNpb24gaW4gaW5jbHVkZS9saW51eC92ZXJzaW9uLmgKKzMpIFN5bWxpbmsgaW5jbHVkZS9hc20gdG8gaW5jbHVkZS9hc20tJChBUkNIKQorNCkgVXBkYXRpbmcgYWxsIG90aGVyIHByZXJlcXVpc2l0ZXMgdG8gdGhlIHRhcmdldCBwcmVwYXJlOgorICAgLSBBZGRpdGlvbmFsIHByZXJlcXVpc2l0ZXMgYXJlIHNwZWNpZmllZCBpbiBhcmNoLyQoQVJDSCkvTWFrZWZpbGUKKzUpIFJlY3Vyc2l2ZWx5IGRlc2NlbmQgZG93biBpbiBhbGwgZGlyZWN0b3JpZXMgbGlzdGVkIGluCisgICBpbml0LSogY29yZSogZHJpdmVycy0qIG5ldC0qIGxpYnMtKiBhbmQgYnVpbGQgYWxsIHRhcmdldHMuCisgICAtIFRoZSB2YWx1ZSBvZiB0aGUgYWJvdmUgdmFyaWFibGVzIGFyZSBleHRlbmRlZCBpbiBhcmNoLyQoQVJDSCkvTWFrZWZpbGUuCis2KSBBbGwgb2JqZWN0IGZpbGVzIGFyZSB0aGVuIGxpbmtlZCBhbmQgdGhlIHJlc3VsdGluZyBmaWxlIHZtbGludXggaXMgCisgICBsb2NhdGVkIGF0IHRoZSByb290IG9mIHRoZSBzcmMgdHJlZS4KKyAgIFRoZSB2ZXJ5IGZpcnN0IG9iamVjdHMgbGlua2VkIGFyZSBsaXN0ZWQgaW4gaGVhZC15LCBhc3NpZ25lZCBieQorICAgYXJjaC8kKEFSQ0gpL01ha2VmaWxlLgorNykgRmluYWxseSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBhcnQgZG9lcyBhbnkgcmVxdWlyZWQgcG9zdCBwcm9jZXNzaW5nCisgICBhbmQgYnVpbGRzIHRoZSBmaW5hbCBib290aW1hZ2UuCisgICAtIFRoaXMgaW5jbHVkZXMgYnVpbGRpbmcgYm9vdCByZWNvcmRzCisgICAtIFByZXBhcmluZyBpbml0cmQgaW1hZ2VzIGFuZCB0aGUgbGlrZQorCisKKy0tLSA2LjEgU2V0IHZhcmlhYmxlcyB0byB0d2VhayB0aGUgYnVpbGQgdG8gdGhlIGFyY2hpdGVjdHVyZQorCisgICAgTERGTEFHUwkJR2VuZXJpYyAkKExEKSBvcHRpb25zCisKKwlGbGFncyB1c2VkIGZvciBhbGwgaW52b2NhdGlvbnMgb2YgdGhlIGxpbmtlci4KKwlPZnRlbiBzcGVjaWZ5aW5nIHRoZSBlbXVsYXRpb24gaXMgc3VmZmljaWVudC4KKworCUV4YW1wbGU6CisJCSNhcmNoL3MzOTAvTWFrZWZpbGUKKwkJTERGTEFHUyAgICAgICAgIDo9IC1tIGVsZl9zMzkwCisJTm90ZTogRVhUUkFfTERGTEFHUyBhbmQgTERGTEFHU18kQCBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyIGN1c3RvbWlzZQorCXRoZSBmbGFncyB1c2VkLiBTZWUgY2hhcHRlciA3LgorCQorICAgIExERkxBR1NfTU9EVUxFCU9wdGlvbnMgZm9yICQoTEQpIHdoZW4gbGlua2luZyBtb2R1bGVzCisKKwlMREZMQUdTX01PRFVMRSBpcyB1c2VkIHRvIHNldCBzcGVjaWZpYyBmbGFncyBmb3IgJChMRCkgd2hlbgorCWxpbmtpbmcgdGhlIC5rbyBmaWxlcyB1c2VkIGZvciBtb2R1bGVzLgorCURlZmF1bHQgaXMgIi1yIiwgZm9yIHJlbG9jYXRhYmxlIG91dHB1dC4KKworICAgIExERkxBR1Nfdm1saW51eAlPcHRpb25zIGZvciAkKExEKSB3aGVuIGxpbmtpbmcgdm1saW51eAorCisJTERGTEFHU192bWxpbnV4IGlzIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGZsYWdzIHRvIHBhc3MgdG8KKwl0aGUgbGlua2VyIHdoZW4gbGlua2luZyB0aGUgZmluYWwgdm1saW51eC4KKwlMREZMQUdTX3ZtbGludXggdXNlcyB0aGUgTERGTEFHU18kQCBzdXBwb3J0LgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9NYWtlZmlsZQorCQlMREZMQUdTX3ZtbGludXggOj0gLWUgc3RleHQKKworICAgIE9CSkNPUFlGTEFHUwlvYmpjb3B5IGZsYWdzCisKKwlXaGVuICQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpIGlzIHVzZWQgdG8gdHJhbnNsYXRlIGEgLm8gZmlsZSwKKwl0aGVuIHRoZSBmbGFncyBzcGVjaWZpZWQgaW4gT0JKQ09QWUZMQUdTIHdpbGwgYmUgdXNlZC4KKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KSBpcyBvZnRlbiB1c2VkIHRvIGdlbmVyYXRlIHJhdyBiaW5hcmllcyBvbgorCXZtbGludXguCisKKwlFeGFtcGxlOgorCQkjYXJjaC9zMzkwL01ha2VmaWxlCisJCU9CSkNPUFlGTEFHUyA6PSAtTyBiaW5hcnkKKworCQkjYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUKKwkJJChvYmopL2ltYWdlOiB2bWxpbnV4IEZPUkNFCisJCQkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCisJSW4gdGhpcyBleGFtcGxlIHRoZSBiaW5hcnkgJChvYmopL2ltYWdlIGlzIGEgYmluYXJ5IHZlcnNpb24gb2YKKwl2bWxpbnV4LiBUaGUgdXNhZ2Ugb2YgJChjYWxsIGlmX2NoYW5nZWQseHh4KSB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlci4KKworICAgIEFGTEFHUwkJJChBUykgYXNzZW1ibGVyIGZsYWdzCisKKwlEZWZhdWx0IHZhbHVlIC0gc2VlIHRvcCBsZXZlbCBNYWtlZmlsZQorCUFwcGVuZCBvciBtb2RpZnkgYXMgcmVxdWlyZWQgcGVyIGFyY2hpdGVjdHVyZS4KKworCUV4YW1wbGU6CisJCSNhcmNoL3NwYXJjNjQvTWFrZWZpbGUKKwkJQUZMQUdTICs9IC1tNjQgLW1jcHU9dWx0cmFzcGFyYworCisgICAgQ0ZMQUdTCQkkKENDKSBjb21waWxlciBmbGFncworCisJRGVmYXVsdCB2YWx1ZSAtIHNlZSB0b3AgbGV2ZWwgTWFrZWZpbGUKKwlBcHBlbmQgb3IgbW9kaWZ5IGFzIHJlcXVpcmVkIHBlciBhcmNoaXRlY3R1cmUuCisKKwlPZnRlbiB0aGUgQ0ZMQUdTIHZhcmlhYmxlIGRlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24uCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L01ha2VmaWxlCisJCWNmbGFncy0kKENPTkZJR19NMzg2KSArPSAtbWFyY2g9aTM4NgorCQlDRkxBR1MgKz0gJChjZmxhZ3MteSkKKworCU1hbnkgYXJjaCBNYWtlZmlsZXMgZHluYW1pY2FsbHkgcnVuIHRoZSB0YXJnZXQgQyBjb21waWxlciB0bworCXByb2JlIHN1cHBvcnRlZCBvcHRpb25zOgorCisJCSNhcmNoL2kzODYvTWFrZWZpbGUKKworCQkuLi4KKwkJY2ZsYWdzLSQoQ09ORklHX01QRU5USVVNSUkpICAgICArPSAkKGNhbGwgY2Mtb3B0aW9uLFwKKwkJCQkJCS1tYXJjaD1wZW50aXVtMiwtbWFyY2g9aTY4NikKKwkJLi4uCisJCSMgRGlzYWJsZSB1bml0LWF0LWEtdGltZSBtb2RlIC4uLgorCQlDRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZm5vLXVuaXQtYXQtYS10aW1lKQorCQkuLi4KKworCisJVGhlIGZpcnN0IGV4YW1wbGVzIHV0aWxpc2VzIHRoZSB0cmljayB0aGF0IGEgY29uZmlnIG9wdGlvbiBleHBhbmRzCisJdG8gJ3knIHdoZW4gc2VsZWN0ZWQuCisKKyAgICBDRkxBR1NfS0VSTkVMCSQoQ0MpIG9wdGlvbnMgc3BlY2lmaWMgZm9yIGJ1aWx0LWluCisKKwkkKENGTEFHU19LRVJORUwpIGNvbnRhaW5zIGV4dHJhIEMgY29tcGlsZXIgZmxhZ3MgdXNlZCB0byBjb21waWxlCisJcmVzaWRlbnQga2VybmVsIGNvZGUuCisKKyAgICBDRkxBR1NfTU9EVUxFCSQoQ0MpIG9wdGlvbnMgc3BlY2lmaWMgZm9yIG1vZHVsZXMKKworCSQoQ0ZMQUdTX01PRFVMRSkgY29udGFpbnMgZXh0cmEgQyBjb21waWxlciBmbGFncyB1c2VkIHRvIGNvbXBpbGUgY29kZQorCWZvciBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlcy4KKworIAorLS0tIDYuMiBBZGQgcHJlcmVxdWlzaXRlcyB0byBwcmVwYXJlOgorCisJVGhlIHByZXBhcmU6IHJ1bGUgaXMgdXNlZCB0byBsaXN0IHByZXJlcXVpc2l0ZXMgdGhhdCBuZWVkcyB0byBiZQorCWJ1aWx0IGJlZm9yZSBzdGFydGluZyB0byBkZXNjZW5kIGRvd24gaW4gdGhlIHN1YmRpcmVjdG9yaWVzLgorCVRoaXMgaXMgdXN1YWwgaGVhZGVyIGZpbGVzIGNvbnRhaW5pbmcgYXNzZW1ibGVyIGNvbnN0YW50cy4KKworCQlFeGFtcGxlOgorCQkjYXJjaC9zMzkwL01ha2VmaWxlCisJCXByZXBhcmU6IGluY2x1ZGUvYXNtLSQoQVJDSCkvb2Zmc2V0cy5oCisKKwlJbiB0aGlzIGV4YW1wbGUgdGhlIGZpbGUgaW5jbHVkZS9hc20tJChBUkNIKS9vZmZzZXRzLmggd2lsbAorCWJlIGJ1aWx0IGJlZm9yZSBkZXNjZW5kaW5nIGRvd24gaW4gdGhlIHN1YmRpcmVjdG9yaWVzLgorCVNlZSBhbHNvIGNoYXB0ZXIgWFhYLVRPRE8gdGhhdCBkZXNjcmliZSBob3cga2J1aWxkIHN1cHBvcnRzCisJZ2VuZXJhdGluZyBvZmZzZXQgaGVhZGVyIGZpbGVzLgorCisKKy0tLSA2LjMgTGlzdCBkaXJlY3RvcmllcyB0byB2aXNpdCB3aGVuIGRlc2NlbmRpbmcKKworCUFuIGFyY2ggTWFrZWZpbGUgY29vcGVyYXRlcyB3aXRoIHRoZSB0b3AgTWFrZWZpbGUgdG8gZGVmaW5lIHZhcmlhYmxlcworCXdoaWNoIHNwZWNpZnkgaG93IHRvIGJ1aWxkIHRoZSB2bWxpbnV4IGZpbGUuICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8KKwljb3JyZXNwb25kaW5nIGFyY2gtc3BlY2lmaWMgc2VjdGlvbiBmb3IgbW9kdWxlczsgdGhlIG1vZHVsZS1idWlsZGluZworCW1hY2hpbmVyeSBpcyBhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50LgorCisJCisgICAgaGVhZC15LCBpbml0LXksIGNvcmUteSwgbGlicy15LCBkcml2ZXJzLXksIG5ldC15CisKKwkkKGhlYWQteSkgbGlzdCBvYmplY3RzIHRvIGJlIGxpbmtlZCBmaXJzdCBpbiB2bWxpbnV4LgorCSQobGlicy15KSBsaXN0IGRpcmVjdG9yaWVzIHdoZXJlIGEgbGliLmEgYXJjaGl2ZSBjYW4gYmUgbG9jYXRlZC4KKwlUaGUgcmVzdCBsaXN0IGRpcmVjdG9yaWVzIHdoZXJlIGEgYnVpbHQtaW4ubyBvYmplY3QgZmlsZSBjYW4gYmUgbG9jYXRlZC4KKworCSQoaW5pdC15KSBvYmplY3RzIHdpbGwgYmUgbG9jYXRlZCBhZnRlciAkKGhlYWQteSkuCisJVGhlbiB0aGUgcmVzdCBmb2xsb3dzIGluIHRoaXMgb3JkZXI6CisJJChjb3JlLXkpLCAkKGxpYnMteSksICQoZHJpdmVycy15KSBhbmQgJChuZXQteSkuCisKKwlUaGUgdG9wIGxldmVsIE1ha2VmaWxlIGRlZmluZSB2YWx1ZXMgZm9yIGFsbCBnZW5lcmljIGRpcmVjdG9yaWVzLAorCWFuZCBhcmNoLyQoQVJDSCkvTWFrZWZpbGUgb25seSBhZGRzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBkaXJlY3Rvcmllcy4KKworCUV4YW1wbGU6CisJCSNhcmNoL3NwYXJjNjQvTWFrZWZpbGUKKwkJY29yZS15ICs9IGFyY2gvc3BhcmM2NC9rZXJuZWwvCisJCWxpYnMteSArPSBhcmNoL3NwYXJjNjQvcHJvbS8gYXJjaC9zcGFyYzY0L2xpYi8KKwkJZHJpdmVycy0kKENPTkZJR19PUFJPRklMRSkgICs9IGFyY2gvc3BhcmM2NC9vcHJvZmlsZS8KKworCistLS0gNi40IEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBib290IGltYWdlcworCisJQW4gYXJjaCBNYWtlZmlsZSBzcGVjaWZpZXMgZ29hbHMgdGhhdCB0YWtlIHRoZSB2bWxpbnV4IGZpbGUsIGNvbXByZXNzCisJaXQsIHdyYXAgaXQgaW4gYm9vdHN0cmFwcGluZyBjb2RlLCBhbmQgY29weSB0aGUgcmVzdWx0aW5nIGZpbGVzCisJc29tZXdoZXJlLiBUaGlzIGluY2x1ZGVzIHZhcmlvdXMga2luZHMgb2YgaW5zdGFsbGF0aW9uIGNvbW1hbmRzLgorCVRoZSBhY3R1YWwgZ29hbHMgYXJlIG5vdCBzdGFuZGFyZGl6ZWQgYWNyb3NzIGFyY2hpdGVjdHVyZXMuCisKKwlJdCBpcyBjb21tb24gdG8gbG9jYXRlIGFueSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaW4gYSBib290LworCWRpcmVjdG9yeSBiZWxvdyBhcmNoLyQoQVJDSCkvLgorCisJS2J1aWxkIGRvZXMgbm90IHByb3ZpZGUgYW55IHNtYXJ0IHdheSB0byBzdXBwb3J0IGJ1aWxkaW5nIGEKKwl0YXJnZXQgc3BlY2lmaWVkIGluIGJvb3QvLiBUaGVyZWZvcmUgYXJjaC8kKEFSQ0gpL01ha2VmaWxlIHNoYWxsCisJY2FsbCBtYWtlIG1hbnVhbGx5IHRvIGJ1aWxkIGEgdGFyZ2V0IGluIGJvb3QvLgorCisJVGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoIGlzIHRvIGluY2x1ZGUgc2hvcnRjdXRzIGluCisJYXJjaC8kKEFSQ0gpL01ha2VmaWxlLCBhbmQgdXNlIHRoZSBmdWxsIHBhdGggd2hlbiBjYWxsaW5nIGRvd24KKwlpbnRvIHRoZSBhcmNoLyQoQVJDSCkvYm9vdC9NYWtlZmlsZS4KKworCUV4YW1wbGU6CisJCSNhcmNoL2kzODYvTWFrZWZpbGUKKwkJYm9vdCA6PSBhcmNoL2kzODYvYm9vdAorCQliekltYWdlOiB2bWxpbnV4CisJCQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKKworCSIkKFEpJChNQUtFKSAkKGJ1aWxkKT08ZGlyPiIgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBpbnZva2UKKwltYWtlIGluIGEgc3ViZGlyZWN0b3J5LgorCisJVGhlcmUgYXJlIG5vIHJ1bGVzIGZvciBuYW1pbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB0YXJnZXRzLAorCWJ1dCBleGVjdXRpbmcgIm1ha2UgaGVscCIgd2lsbCBsaXN0IGFsbCByZWxldmFudCB0YXJnZXRzLgorCVRvIHN1cHBvcnQgdGhpcyAkKGFyY2hoZWxwKSBtdXN0IGJlIGRlZmluZWQuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L01ha2VmaWxlCisJCWRlZmluZSBhcmNoaGVscAorCQkgIGVjaG8gICcqIGJ6SW1hZ2UgICAgICAtIEltYWdlIChhcmNoLyQoQVJDSCkvYm9vdC9iekltYWdlKScKKwkJZW5kZWYKKworCVdoZW4gbWFrZSBpcyBleGVjdXRlZCB3aXRob3V0IGFyZ3VtZW50cywgdGhlIGZpcnN0IGdvYWwgZW5jb3VudGVyZWQKKwl3aWxsIGJlIGJ1aWx0LiBJbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlIHRoZSBmaXJzdCBnb2FsIHByZXNlbnQKKwlpcyBhbGw6LgorCUFuIGFyY2hpdGVjdHVyZSBzaGFsbCBhbHdheXMgcGVyIGRlZmF1bHQgYnVpbGQgYSBib290YWJsZSBpbWFnZS4KKwlJbiAibWFrZSBoZWxwIiB0aGUgZGVmYXVsdCBnb2FsIGlzIGhpZ2hsaWdodGVkIHdpdGggYSAnKicuCisJQWRkIGEgbmV3IHByZXJlcXVpc2l0ZSB0byBhbGw6IHRvIHNlbGVjdCBhIGRlZmF1bHQgZ29hbCBkaWZmZXJlbnQKKwlmcm9tIHZtbGludXguCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L01ha2VmaWxlCisJCWFsbDogYnpJbWFnZSAKKworCVdoZW4gIm1ha2UiIGlzIGV4ZWN1dGVkIHdpdGhvdXQgYXJndW1lbnRzLCBiekltYWdlIHdpbGwgYmUgYnVpbHQuCisKKy0tLSA2LjUgQnVpbGRpbmcgbm9uLWtidWlsZCB0YXJnZXRzCisKKyAgICBleHRyYS15CisKKwlleHRyYS15IHNwZWNpZnkgYWRkaXRpb25hbCB0YXJnZXRzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQKKwlkaXJlY3RvcnksIGluIGFkZGl0aW9uIHRvIGFueSB0YXJnZXRzIHNwZWNpZmllZCBieSBvYmotKi4KKworCUxpc3RpbmcgYWxsIHRhcmdldHMgaW4gZXh0cmEteSBpcyByZXF1aXJlZCBmb3IgdHdvIHB1cnBvc2VzOgorCTEpIEVuYWJsZSBrYnVpbGQgdG8gY2hlY2sgY2hhbmdlcyBpbiBjb21tYW5kIGxpbmVzCisJICAgLSBXaGVuICQoY2FsbCBpZl9jaGFuZ2VkLHh4eCkgaXMgdXNlZAorCTIpIGtidWlsZCBrbm93cyB3aGF0IGZpbGVzIHRvIGRlbGV0ZSBkdXJpbmcgIm1ha2UgY2xlYW4iCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQorCQlleHRyYS15IDo9IGhlYWQubyBpbml0X3Rhc2subworCisJSW4gdGhpcyBleGFtcGxlIGV4dHJhLXkgaXMgdXNlZCB0byBsaXN0IG9iamVjdCBmaWxlcyB0aGF0CisJc2hhbGwgYmUgYnVpbHQsIGJ1dCBzaGFsbCBub3QgYmUgbGlua2VkIGFzIHBhcnQgb2YgYnVpbHQtaW4uby4KKworCQorLS0tIDYuNiBDb21tYW5kcyB1c2VmdWwgZm9yIGJ1aWxkaW5nIGEgYm9vdCBpbWFnZQorCisJS2J1aWxkIHByb3ZpZGVzIGEgZmV3IG1hY3JvcyB0aGF0IGFyZSB1c2VmdWwgd2hlbiBidWlsZGluZyBhCisJYm9vdCBpbWFnZS4KKworICAgIGlmX2NoYW5nZWQKKworCWlmX2NoYW5nZWQgaXMgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMuCisKKwlVc2FnZToKKwkJdGFyZ2V0OiBzb3VyY2UocykgRk9SQ0UKKwkJCSQoY2FsbCBpZl9jaGFuZ2VkLGxkL29iamNvcHkvZ3ppcCkKKworCVdoZW4gdGhlIHJ1bGUgaXMgZXZhbHVhdGVkIGl0IGlzIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBmaWxlcworCW5lZWRzIGFuIHVwZGF0ZSwgb3IgdGhlIGNvbW1hbmRsaW5lIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3QKKwlpbnZvY2F0aW9uLiBUaGUgbGF0dGVyIHdpbGwgZm9yY2UgYSByZWJ1aWxkIGlmIGFueSBvcHRpb25zCisJdG8gdGhlIGV4ZWN1dGFibGUgaGF2ZSBjaGFuZ2VkLgorCUFueSB0YXJnZXQgdGhhdCB1dGlsaXNlcyBpZl9jaGFuZ2VkIG11c3QgYmUgbGlzdGVkIGluICQodGFyZ2V0cyksCisJb3RoZXJ3aXNlIHRoZSBjb21tYW5kIGxpbmUgY2hlY2sgd2lsbCBmYWlsLCBhbmQgdGhlIHRhcmdldCB3aWxsCisJYWx3YXlzIGJlIGJ1aWx0LgorCUFzc2lnbm1lbnRzIHRvICQodGFyZ2V0cykgYXJlIHdpdGhvdXQgJChvYmopLyBwcmVmaXguCisJaWZfY2hhbmdlZCBtYXkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGN1c3RvbSBjb21tYW5kcyBhcworCWRlZmluZWQgaW4gNi43ICJDdXN0b20ga2J1aWxkIGNvbW1hbmRzIi4KKwlOb3RlOiBJdCBpcyBhIHR5cGljYWwgbWlzdGFrZSB0byBmb3JnZXQgdGhlIEZPUkNFIHByZXJlcXVpc2l0ZS4KKworICAgIGxkCisJTGluayB0YXJnZXQuIE9mdGVuIExERkxBR1NfJEAgaXMgdXNlZCB0byBzZXQgc3BlY2lmaWMgb3B0aW9ucyB0byBsZC4KKwkKKyAgICBvYmpjb3B5CisJQ29weSBiaW5hcnkuIFVzZXMgT0JKQ09QWUZMQUdTIHVzdWFsbHkgc3BlY2lmaWVkIGluCisJYXJjaC8kKEFSQ0gpL01ha2VmaWxlLgorCU9CSkNPUFlGTEFHU18kQCBtYXkgYmUgdXNlZCB0byBzZXQgYWRkaXRpb25hbCBvcHRpb25zLgorCisgICAgZ3ppcAorCUNvbXByZXNzIHRhcmdldC4gVXNlIG1heGltdW0gY29tcHJlc3Npb24gdG8gY29tcHJlc3MgdGFyZ2V0LgorCisJRXhhbXBsZToKKwkJI2FyY2gvaTM4Ni9ib290L01ha2VmaWxlCisJCUxERkxBR1NfYm9vdHNlY3QgOj0gLVR0ZXh0IDB4MCAtcyAtLW9mb3JtYXQgYmluYXJ5CisJCUxERkxBR1Nfc2V0dXAgICAgOj0gLVR0ZXh0IDB4MCAtcyAtLW9mb3JtYXQgYmluYXJ5IC1lIGJlZ3RleHQKKworCQl0YXJnZXRzICs9IHNldHVwIHNldHVwLm8gYm9vdHNlY3QgYm9vdHNlY3QubworCQkkKG9iaikvc2V0dXAgJChvYmopL2Jvb3RzZWN0OiAlOiAlLm8gRk9SQ0UKKwkJCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQorCisJSW4gdGhpcyBleGFtcGxlIHRoZXJlIGFyZSB0d28gcG9zc2libGUgdGFyZ2V0cywgcmVxdWlyaW5nIGRpZmZlcmVudAorCW9wdGlvbnMgdG8gdGhlIGxpbmtlci4gdGhlIGxpbmtlciBvcHRpb25zIGFyZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisJTERGTEFHU18kQCBzeW50YXggLSBvbmUgZm9yIGVhY2ggcG90ZW50aWFsIHRhcmdldC4KKwkkKHRhcmdldHMpIGFyZSBhc3NpbmdlZCBhbGwgcG90ZW50aWFsIHRhcmdldHMsIGhlcmJ5IGtidWlsZCBrbm93cworCXRoZSB0YXJnZXRzIGFuZCB3aWxsOgorCQkxKSBjaGVjayBmb3IgY29tbWFuZGxpbmUgY2hhbmdlcworCQkyKSBkZWxldGUgdGFyZ2V0IGR1cmluZyBtYWtlIGNsZWFuCisKKwlUaGUgIjogJTogJS5vIiBwYXJ0IG9mIHRoZSBwcmVyZXF1aXNpdGUgaXMgYSBzaG9ydGhhbmQgdGhhdAorCWZyZWUgdXMgZnJvbSBsaXN0aW5nIHRoZSBzZXR1cC5vIGFuZCBib290c2VjdC5vIGZpbGVzLgorCU5vdGU6IEl0IGlzIGEgY29tbW9uIG1pc3Rha2UgdG8gZm9yZ2V0IHRoZSAidGFyZ2V0IDo9IiBhc3NpZ25tZW50LAorCSAgICAgIHJlc3VsdGluZyBpbiB0aGUgdGFyZ2V0IGZpbGUgYmVpbmcgcmVjb21waWxlZCBmb3Igbm8KKwkgICAgICBvYnZpb3VzIHJlYXNvbi4KKworCistLS0gNi43IEN1c3RvbSBrYnVpbGQgY29tbWFuZHMKKworCVdoZW4ga2J1aWxkIGlzIGV4ZWN1dGluZyB3aXRoIEtCVUlMRF9WRVJCT1NFPTAgdGhlbiBvbmx5IGEgc2hvcnRoYW5kCisJb2YgYSBjb21tYW5kIGlzIG5vcm1hbGx5IGRpc3BsYXllZC4KKwlUbyBlbmFibGUgdGhpcyBiZWhhdmlvdXIgZm9yIGN1c3RvbSBjb21tYW5kcyBrYnVpbGQgcmVxdWlyZXMKKwl0d28gdmFyaWFibGVzIHRvIGJlIHNldDoKKwlxdWlldF9jbWRfPGNvbW1hbmQ+CS0gd2hhdCBzaGFsbCBiZSBlY2hvZWQKKwkgICAgICBjbWRfPGNvbW1hbmQ+CS0gdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZQorCisJRXhhbXBsZToKKwkJIworCQlxdWlldF9jbWRfaW1hZ2UgPSBCVUlMRCAgICRACisJCSAgICAgIGNtZF9pbWFnZSA9ICQob2JqKS90b29scy9idWlsZCAkKEJVSUxERkxBR1MpIFwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQob2JqKS92bWxpbnV4LmJpbiA+ICRACisKKwkJdGFyZ2V0cyArPSBiekltYWdlCisJCSQob2JqKS9iekltYWdlOiAkKG9iaikvdm1saW51eC5iaW4gJChvYmopL3Rvb2xzL2J1aWxkIEZPUkNFCisJCQkkKGNhbGwgaWZfY2hhbmdlZCxpbWFnZSkKKwkJCUBlY2hvICdLZXJuZWw6ICRAIGlzIHJlYWR5JworCisJV2hlbiB1cGRhdGluZyB0aGUgJChvYmopL2J6SW1hZ2UgdGFyZ2V0IHRoZSBsaW5lOgorCisJQlVJTEQgICAgYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZQorCisJd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCAibWFrZSBLQlVJTERfVkVSQk9TRT0wIi4KKwkKKworLS0tIDYuOCBQcmVwcm9jZXNzaW5nIGxpbmtlciBzY3JpcHRzCisKKwlXaGVuIHRoZSB2bWxpbnV4IGltYWdlIGlzIGJ1aWxkIHRoZSBsaW5rZXIgc2NyaXB0OgorCWFyY2gvJChBUkNIKS9rZXJuZWwvdm1saW51eC5sZHMgaXMgdXNlZC4KKwlUaGUgc2NyaXB0IGlzIGEgcHJlcHJvY2Vzc2VkIHZhcmlhbnQgb2YgdGhlIGZpbGUgdm1saW51eC5sZHMuUworCWxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorCWtidWlsZCBrbm93cyAubGRzIGZpbGUgYW5kIGluY2x1ZGVzIGEgcnVsZSAqbGRzLlMgLT4gKmxkcy4KKwkKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQorCQlhbHdheXMgOj0gdm1saW51eC5sZHMKKwkKKwkJI01ha2VmaWxlCisJCWV4cG9ydCBDUFBGTEFHU192bWxpbnV4LmxkcyArPSAtUCAtQyAtVSQoQVJDSCkKKwkJCisJVGhlIGFzc2lnbWVudCB0byAkKGFsd2F5cykgaXMgdXNlZCB0byB0ZWxsIGtidWlsZCB0byBidWlsZCB0aGUKKwl0YXJnZXQ6IHZtbGludXgubGRzLgorCVRoZSBhc3NpZ25tZW50IHRvICQoQ1BQRkxBR1Nfdm1saW51eC5sZHMpIHRlbGwga2J1aWxkIHRvIHVzZSB0aGUKKwlzcGVjaWZpZWQgb3B0aW9ucyB3aGVuIGJ1aWxkaW5nIHRoZSB0YXJnZXQgdm1saW51eC5sZHMuCisJCisJV2hlbiBidWlsZGluZyB0aGUgKi5sZHMgdGFyZ2V0IGtidWlsZCB1c2VkIHRoZSB2YXJpYWtsZXM6CisJQ1BQRkxBR1MJOiBTZXQgaW4gdG9wLWxldmVsIE1ha2VmaWxlCisJRVhUUkFfQ1BQRkxBR1MJOiBNYXkgYmUgc2V0IGluIHRoZSBrYnVpbGQgbWFrZWZpbGUKKwlDUFBGTEFHU18kKEBGKSAgOiBUYXJnZXQgc3BlY2lmaWMgZmxhZ3MuCisJICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBmdWxsIGZpbGVuYW1lIGlzIHVzZWQgaW4gdGhpcworCSAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQuCisKKwlUaGUga2J1aWxkIGluZnJhc3RydWN0dXJlIGZvciAqbGRzIGZpbGUgYXJlIHVzZWQgaW4gc2V2ZXJhbAorCWFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxlcy4KKworCistLS0gNi45ICQoQ0MpIHN1cHBvcnQgZnVuY3Rpb25zCisKKwlUaGUga2VybmVsIG1heSBiZSBidWlsZCB3aXRoIHNldmVyYWwgZGlmZmVyZW50IHZlcnNpb25zIG9mCisJJChDQyksIGVhY2ggc3VwcG9ydGluZyBhIHVuaXF1ZSBzZXQgb2YgZmVhdHVyZXMgYW5kIG9wdGlvbnMuCisJa2J1aWxkIHByb3ZpZGUgYmFzaWMgc3VwcG9ydCB0byBjaGVjayBmb3IgdmFsaWQgb3B0aW9ucyBmb3IgJChDQykuCisJJChDQykgaXMgdXNlYWxseSB0aGUgZ2NjIGNvbXBpbGVyLCBidXQgb3RoZXIgYWx0ZXJuYXRpdmVzIGFyZQorCWF2YWlsYWJsZS4KKworICAgIGNjLW9wdGlvbgorCWNjLW9wdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmICQoQ0MpIHN1cHBvcnQgYSBnaXZlbiBvcHRpb24sIGFuZCBub3QKKwlzdXBwb3J0ZWQgdG8gdXNlIGFuIG9wdGlvbmFsIHNlY29uZCBvcHRpb24uCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L01ha2VmaWxlCisJCWNmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXBlbnRpdW0tbW14LC1tYXJjaD1pNTg2KQorCisJSW4gdGhlIGFib3ZlIGV4YW1wbGUgY2ZsYWdzLXkgd2lsbCBiZSBhc3NpZ25lZCB0aGUgb3B0aW9uCisJLW1hcmNoPXBlbnRpdW0tbW14IGlmIHN1cHBvcnRlZCBieSAkKENDKSwgb3RoZXJ3aXNlIC1tYXJjaC1pNTg2LgorCVRoZSBzZWNvbmQgYXJndW1lbnQgdG8gY2Mtb3B0aW9uIGlzIG9wdGlvbmFsLCBhbmQgaWYgb21pdHRlZAorCWNmbGFncy15IHdpbGwgYmUgYXNzaWduZWQgbm8gdmFsdWUgaWYgZmlyc3Qgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgIGNjLW9wdGlvbi15bgorICAgCWNjLW9wdGlvbi15biBpcyB1c2VkIHRvIGNoZWNrIGlmIGdjYyBzdXBwb3J0cyBhIGdpdmVuIG9wdGlvbgorCWFuZCByZXR1cm4gJ3knIGlmIHN1cHBvcnRlZCwgb3RoZXJ3aXNlICduJy4KKworCUV4YW1wbGU6CisJCSNhcmNoL3BwYy9NYWtlZmlsZQorCQliaWFyY2ggOj0gJChjYWxsIGNjLW9wdGlvbi15biwgLW0zMikKKwkJYWZsYWdzLSQoYmlhcmNoKSArPSAtYTMyCisJCWNmbGFncy0kKGJpYXJjaCkgKz0gLW0zMgorCQorCUluIHRoZSBhYm92ZSBleGFtcGxlICQoYmlhcmNoKSBpcyBzZXQgdG8geSBpZiAkKENDKSBzdXBwb3J0cyB0aGUgLW0zMgorCW9wdGlvbi4gV2hlbiAkKGJpYXJjaCkgZXF1YWxzIHRvIHkgdGhlIGV4cGFuZGVkIHZhcmlhYmxlcyAkKGFmbGFncy15KQorCWFuZCAkKGNmbGFncy15KSB3aWxsIGJlIGFzc2lnbmVkIHRoZSB2YWx1ZXMgLWEzMiBhbmQgLW0zMi4KKworICAgIGNjLW9wdGlvbi1hbGlnbgorCWdjYyB2ZXJzaW9uID49IDMuMCBzaGlmdGVkIHR5cGUgb2Ygb3B0aW9ucyB1c2VkIHRvIHNwZWlmeQorCWFsaWdubWVudCBvZiBmdW5jdGlvbnMsIGxvb3BzIGV0Yy4gJChjYy1vcHRpb24tYWxpZ24pIHdocm4gdXNlZAorCWFzIHByZWZpeCB0byB0aGUgYWxpZ24gb3B0aW9ucyB3aWxsIHNlbGVjdCB0aGUgcmlnaHQgcHJlZml4OgorCWdjYyA8IDMuMDAKKwkJY2Mtb3B0aW9uLWFsaWduID0gLW1hbGlnbgorCWdjYyA+PSAzLjAwCisJCWNjLW9wdGlvbi1hbGlnbiA9IC1mYWxpZ24KKwkKKwlFeGFtcGxlOgorCQlDRkxBR1MgKz0gJChjYy1vcHRpb24tYWxpZ24pLWZ1bmN0aW9ucz00CisKKwlJbiB0aGUgYWJvdmUgZXhhbXBsZSB0aGUgb3B0aW9uIC1mYWxpZ24tZnVuY3Rpb25zPTQgaXMgdXNlZCBmb3IKKwlnY2MgPj0gMy4wMC4gRm9yIGdjYyA8IDMuMDAgLW1hbGlnbi1mdW5jdGlvbnM9NCBpcyB1c2VkLgorCQorICAgIGNjLXZlcnNpb24KKwljYy12ZXJzaW9uIHJldHVybiBhIG51bWVyaWNhbCB2ZXJzaW9uIG9mIHRoZSAkKENDKSBjb21waWxlciB2ZXJzaW9uLgorCVRoZSBmb3JtYXQgaXMgPG1ham9yPjxtaW5vcj4gd2hlcmUgYm90aCBhcmUgdHdvIGRpZ2l0cy4gU28gZm9yIGV4YW1wbGUKKwlnY2MgMy40MSB3b3VsZCByZXR1cm4gMDM0MS4KKwljYy12ZXJzaW9uIGlzIHVzZWZ1bCB3aGVuIGEgc3BlY2lmaWMgJChDQykgdmVyc2lvbiBpcyBmYXVsdHkgaW4gb25lCisJYXJlYSwgZm9yIGV4YW1wbGUgdGhlIC1tcmVncGFybT0zIHdlcmUgYnJva2VuIGluIHNvbWUgZ2NjIHZlcnNpb24KKwlldmVuIHRob3VnaCB0aGUgb3B0aW9uIHdhcyBhY2NlcHRlZCBieSBnY2MuCisKKwlFeGFtcGxlOgorCQkjYXJjaC9pMzg2L01ha2VmaWxlCisJCUdDQ19WRVJTSU9OIDo9ICQoY2FsbCBjYy12ZXJzaW9uKQorCQljZmxhZ3MteSArPSAkKHNoZWxsIFwKKwkJaWYgWyAkKEdDQ19WRVJTSU9OKSAtZ2UgMDMwMCBdIDsgdGhlbiBlY2hvICItbXJlZ3Bhcm09MyI7IGZpIDspCisKKwlJbiB0aGUgYWJvdmUgZXhhbXBsZSAtbXJlZ3Bhcm09MyBpcyBvbmx5IHVzZWQgZm9yIGdjYyB2ZXJzaW9uIGdyZWF0ZXIKKwl0aGFuIG9yIGVxdWFsIHRvIGdjYyAzLjAuCisJCisKKz09PSA3IEtidWlsZCBWYXJpYWJsZXMKKworVGhlIHRvcCBNYWtlZmlsZSBleHBvcnRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCisgICAgVkVSU0lPTiwgUEFUQ0hMRVZFTCwgU1VCTEVWRUwsIEVYVFJBVkVSU0lPTgorCisJVGhlc2UgdmFyaWFibGVzIGRlZmluZSB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbi4gIEEgZmV3IGFyY2gKKwlNYWtlZmlsZXMgYWN0dWFsbHkgdXNlIHRoZXNlIHZhbHVlcyBkaXJlY3RseTsgdGhleSBzaG91bGQgdXNlCisJJChLRVJORUxSRUxFQVNFKSBpbnN0ZWFkLgorCisJJChWRVJTSU9OKSwgJChQQVRDSExFVkVMKSwgYW5kICQoU1VCTEVWRUwpIGRlZmluZSB0aGUgYmFzaWMKKwl0aHJlZS1wYXJ0IHZlcnNpb24gbnVtYmVyLCBzdWNoIGFzICIyIiwgIjQiLCBhbmQgIjAiLiAgVGhlc2UgdGhyZWUKKwl2YWx1ZXMgYXJlIGFsd2F5cyBudW1lcmljLgorCisJJChFWFRSQVZFUlNJT04pIGRlZmluZXMgYW4gZXZlbiB0aW5pZXIgc3VibGV2ZWwgZm9yIHByZS1wYXRjaGVzCisJb3IgYWRkaXRpb25hbCBwYXRjaGVzLglJdCBpcyB1c3VhbGx5IHNvbWUgbm9uLW51bWVyaWMgc3RyaW5nCisJc3VjaCBhcyAiLXByZTQiLCBhbmQgaXMgb2Z0ZW4gYmxhbmsuCisKKyAgICBLRVJORUxSRUxFQVNFCisKKwkkKEtFUk5FTFJFTEVBU0UpIGlzIGEgc2luZ2xlIHN0cmluZyBzdWNoIGFzICIyLjQuMC1wcmU0Iiwgc3VpdGFibGUKKwlmb3IgY29uc3RydWN0aW5nIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgbmFtZXMgb3Igc2hvd2luZyBpbgorCXZlcnNpb24gc3RyaW5ncy4gIFNvbWUgYXJjaCBNYWtlZmlsZXMgdXNlIGl0IGZvciB0aGlzIHB1cnBvc2UuCisKKyAgICBBUkNICisKKwlUaGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHN1Y2ggYXMgImkzODYiLAorCSJhcm0iLCBvciAic3BhcmMiLiBTb21lIGtidWlsZCBNYWtlZmlsZXMgdGVzdCAkKEFSQ0gpIHRvCisJZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIHRvIGNvbXBpbGUuCisKKwlCeSBkZWZhdWx0LCB0aGUgdG9wIE1ha2VmaWxlIHNldHMgJChBUkNIKSB0byBiZSB0aGUgc2FtZSBhcyB0aGUKKwlob3N0IHN5c3RlbSBhcmNoaXRlY3R1cmUuICBGb3IgYSBjcm9zcyBidWlsZCwgYSB1c2VyIG1heQorCW92ZXJyaWRlIHRoZSB2YWx1ZSBvZiAkKEFSQ0gpIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKwkgICAgbWFrZSBBUkNIPW02OGsgLi4uCisKKworICAgIElOU1RBTExfUEFUSAorCisJVGhpcyB2YXJpYWJsZSBkZWZpbmVzIGEgcGxhY2UgZm9yIHRoZSBhcmNoIE1ha2VmaWxlcyB0byBpbnN0YWxsCisJdGhlIHJlc2lkZW50IGtlcm5lbCBpbWFnZSBhbmQgU3lzdGVtLm1hcCBmaWxlLgorCVVzZSB0aGlzIGZvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5zdGFsbCB0YXJnZXRzLgorCisgICAgSU5TVEFMTF9NT0RfUEFUSCwgTU9ETElCCisKKwkkKElOU1RBTExfTU9EX1BBVEgpIHNwZWNpZmllcyBhIHByZWZpeCB0byAkKE1PRExJQikgZm9yIG1vZHVsZQorCWluc3RhbGxhdGlvbi4gIFRoaXMgdmFyaWFibGUgaXMgbm90IGRlZmluZWQgaW4gdGhlIE1ha2VmaWxlIGJ1dAorCW1heSBiZSBwYXNzZWQgaW4gYnkgdGhlIHVzZXIgaWYgZGVzaXJlZC4KKworCSQoTU9ETElCKSBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGluc3RhbGxhdGlvbi4KKwlUaGUgdG9wIE1ha2VmaWxlIGRlZmluZXMgJChNT0RMSUIpIHRvCisJJChJTlNUQUxMX01PRF9QQVRIKS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpLiAgVGhlIHVzZXIgbWF5CisJb3ZlcnJpZGUgdGhpcyB2YWx1ZSBvbiB0aGUgY29tbWFuZCBsaW5lIGlmIGRlc2lyZWQuCisKKz09PSA4IE1ha2VmaWxlIGxhbmd1YWdlCisKK1RoZSBrZXJuZWwgTWFrZWZpbGVzIGFyZSBkZXNpZ25lZCB0byBydW4gd2l0aCBHTlUgTWFrZS4gIFRoZSBNYWtlZmlsZXMKK3VzZSBvbmx5IHRoZSBkb2N1bWVudGVkIGZlYXR1cmVzIG9mIEdOVSBNYWtlLCBidXQgdGhleSBkbyB1c2UgbWFueQorR05VIGV4dGVuc2lvbnMuCisKK0dOVSBNYWtlIHN1cHBvcnRzIGVsZW1lbnRhcnkgbGlzdC1wcm9jZXNzaW5nIGZ1bmN0aW9ucy4gIFRoZSBrZXJuZWwKK01ha2VmaWxlcyB1c2UgYSBub3ZlbCBzdHlsZSBvZiBsaXN0IGJ1aWxkaW5nIGFuZCBtYW5pcHVsYXRpb24gd2l0aCBmZXcKKyJpZiIgc3RhdGVtZW50cy4KKworR05VIE1ha2UgaGFzIHR3byBhc3NpZ25tZW50IG9wZXJhdG9ycywgIjo9IiBhbmQgIj0iLiAgIjo9IiBwZXJmb3JtcworaW1tZWRpYXRlIGV2YWx1YXRpb24gb2YgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhbmQgc3RvcmVzIGFuIGFjdHVhbCBzdHJpbmcKK2ludG8gdGhlIGxlZnQtaGFuZCBzaWRlLiAgIj0iIGlzIGxpa2UgYSBmb3JtdWxhIGRlZmluaXRpb247IGl0IHN0b3JlcyB0aGUKK3JpZ2h0LWhhbmQgc2lkZSBpbiBhbiB1bmV2YWx1YXRlZCBmb3JtIGFuZCB0aGVuIGV2YWx1YXRlcyB0aGlzIGZvcm0gZWFjaAordGltZSB0aGUgbGVmdC1oYW5kIHNpZGUgaXMgdXNlZC4KKworVGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgIj0iIGlzIGFwcHJvcHJpYXRlLiAgVXN1YWxseSwgdGhvdWdoLCAiOj0iCitpcyB0aGUgcmlnaHQgY2hvaWNlLgorCis9PT0gOSBDcmVkaXRzCisKK09yaWdpbmFsIHZlcnNpb24gbWFkZSBieSBNaWNoYWVsIEVsaXphYmV0aCBDaGFzdGFpbiwgPG1haWx0bzptZWNAc2hvdXQubmV0PgorVXBkYXRlcyBieSBLYWkgR2VybWFzY2hld3NraSA8a2FpQHRwMS5ydWhyLXVuaS1ib2NodW0uZGU+CitVcGRhdGVzIGJ5IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KKworPT09IDEwIFRPRE8KKworLSBEZXNjcmliZSBob3cga2J1aWxkIHN1cHBvcnQgc2hpcHBlZCBmaWxlcyB3aXRoIF9zaGlwcGVkLgorLSBHZW5lcmF0aW5nIG9mZnNldCBoZWFkZXIgZmlsZXMuCistIEFkZCBtb3JlIHZhcmlhYmxlcyB0byBzZWN0aW9uIDc/CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxY2FmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0CkBAIC0wLDAgKzEsNDE5IEBACisKK0luIHRoaXMgZG9jdW1lbnQgeW91IHdpbGwgZmluZCBpbmZvcm1hdGlvbiBhYm91dDoKKy0gaG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKKy0gaG93IHRvIG1ha2UgeW91ciBtb2R1bGUgdXNlIGtidWlsZCBpbmZyYXN0cnVjdHVyZQorLSBob3cga2J1aWxkIHdpbGwgaW5zdGFsbCBhIGtlcm5lbAorLSBob3cgdG8gaW5zdGFsbCBtb2R1bGVzIGluIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uCisKKz09PSBUYWJsZSBvZiBDb250ZW50cworCisJPT09IDEgSW50cm9kdWN0aW9uCisJPT09IDIgSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKKwkgICAtLS0gMi4xIEJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMKKwkgICAtLS0gMi4yIEF2YWlsYWJsZSB0YXJnZXRzCisJICAgLS0tIDIuMyBBdmFpbGFibGUgb3B0aW9ucworCSAgIC0tLSAyLjQgUHJlcGFyaW5nIHRoZSBrZXJuZWwgdHJlZSBmb3IgbW9kdWxlIGJ1aWxkCisJPT09IDMuIEV4YW1wbGUgY29tbWFuZHMKKwk9PT0gNC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlCisJPT09IDUuIEluY2x1ZGUgZmlsZXMKKwkgICAtLS0gNS4xIEhvdyB0byBpbmNsdWRlIGZpbGVzIGZyb20gdGhlIGtlcm5lbCBpbmNsdWRlIGRpcgorCSAgIC0tLSA1LjIgRXh0ZXJuYWwgbW9kdWxlcyB1c2luZyBhbiBpbmNsdWRlLyBkaXIKKwk9PT0gNi4gTW9kdWxlIGluc3RhbGxhdGlvbgorCSAgIC0tLSA2LjEgSU5TVEFMTF9NT0RfUEFUSAorCSAgIC0tLSA2LjIgSU5TVEFMTF9NT0RfRElSCisJPT09IDcuIE1vZHVsZSB2ZXJzaW9uaW5nCisJPT09IDguIFRpcHMgJiBUcmlja3MKKwkgICAtLS0gOC4xIFRlc3RpbmcgZm9yIENPTkZJR19GT09fQkFSCisKKworCis9PT0gMS4gSW50cm9kdWN0aW9uCisKK2tidWlsZCBpbmNsdWRlcyBmdW5jdGlvbmFsaXR5IGZvciBidWlsZGluZyBtb2R1bGVzIGJvdGgKK3dpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGFuZCBvdXRzaWRlIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuCitUaGUgbGF0dGVyIGlzIHVzdWFsbHkgcmVmZXJyZWQgdG8gYXMgZXh0ZXJuYWwgbW9kdWxlcyBhbmQgaXMgdXNlZAorYm90aCBkdXJpbmcgZGV2ZWxvcG1lbnQgYW5kIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBwbGFubmVkIHRvIGJlCitpbmNsdWRlZCBpbiB0aGUga2VybmVsIHRyZWUuCisKK1doYXQgaXMgY292ZXJlZCB3aXRoaW4gdGhpcyBmaWxlIGlzIG1haW5seSBpbmZvcm1hdGlvbiB0byBhdXRob3JzCitvZiBtb2R1bGVzLiBUaGUgYXV0aG9yIG9mIGFuIGV4dGVybmFsIG1vZHVsZXMgc2hvdWxkIHN1cHBseQorYSBtYWtlZmlsZSB0aGF0IGhpZGVzIG1vc3Qgb2YgdGhlIGNvbXBsZXhpdHkgc28gb25lIG9ubHkgaGFzIHRvIHR5cGUKKydtYWtlJyB0byBidWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KK2NoYXB0ZXIgpC4gQ3JlYXRpbmcgYSBrYnVpbGQgZmlsZSBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlIi4KKworCis9PT0gMi4gSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKKwora2J1aWxkIG9mZmVycyBmdW5jdGlvbmFsaXR5IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMsIHdpdGggdGhlCitwcmVyZXF1aXNpdGUgdGhhdCB0aGVyZSBpcyBhIHByZS1idWlsdCBrZXJuZWwgYXZhaWxhYmxlIHdpdGggZnVsbCBzb3VyY2UuCitBIHN1YnNldCBvZiB0aGUgdGFyZ2V0cyBhdmFpbGFibGUgd2hlbiBidWlsZGluZyB0aGUga2VybmVsIGlzIGF2YWlsYWJsZQord2hlbiBidWlsZGluZyBhbiBleHRlcm5hbCBtb2R1bGUuCisKKy0tLSAyLjEgQnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcworCisJVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBidWlsZCBhbiBleHRlcm5hbCBtb2R1bGU6CisKKwkJbWFrZSAtQyA8cGF0aC10by1rZXJuZWw+IE09YHB3ZGAKKworCUZvciB0aGUgcnVubmluZyBrZXJuZWwgdXNlOgorCQltYWtlIC1DIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkIE09YHB3ZGAKKworCUZvciB0aGUgYWJvdmUgY29tbWFuZCB0byBzdWNjZWVkIHRoZSBrZXJuZWwgbXVzdCBoYXZlIGJlZW4gYnVpbHQgd2l0aAorCW1vZHVsZXMgZW5hYmxlZC4KKworCVRvIGluc3RhbGwgdGhlIG1vZHVsZXMgdGhhdCB3ZXJlIGp1c3QgYnVpbHQ6CisKKwkJbWFrZSAtQyA8cGF0aC10by1rZXJuZWw+IE09YHB3ZGAgbW9kdWxlc19pbnN0YWxsCisKKwlNb3JlIGNvbXBsZXggZXhhbXBsZXMgbGF0ZXIsIHRoZSBhYm92ZSBzaG91bGQgZ2V0IHlvdSBnb2luZy4KKworLS0tIDIuMiBBdmFpbGFibGUgdGFyZ2V0cworCisJJEtESVIgcmVmZXJzIHRvIHBhdGggdG8ga2VybmVsIHNvdXJjZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CisKKwltYWtlIC1DICRLRElSIE09YHB3ZGAKKwkJV2lsbCBidWlsZCB0aGUgbW9kdWxlKHMpIGxvY2F0ZWQgaW4gY3VycmVudCBkaXJlY3RvcnkuCisJCUFsbCBvdXRwdXQgZmlsZXMgd2lsbCBiZSBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorCQlhcyB0aGUgbW9kdWxlIHNvdXJjZS4KKwkJTm8gYXR0ZW1wdHMgYXJlIG1hZGUgdG8gdXBkYXRlIHRoZSBrZXJuZWwgc291cmNlLCBhbmQgaXQgaXMKKwkJYSBwcmVjb25kaXRpb24gdGhhdCBhIHN1Y2Nlc3NmdWwgbWFrZSBoYXMgYmVlbiBleGVjdXRlZAorCQlmb3IgdGhlIGtlcm5lbC4KKworCW1ha2UgLUMgJEtESVIgTT1gcHdkYCBtb2R1bGVzCisJCVRoZSBtb2R1bGVzIHRhcmdldCBpcyBpbXBsaWVkIHdoZW4gbm8gdGFyZ2V0IGlzIGdpdmVuLgorCQlTYW1lIGZ1bmN0aW9uYWxpdHkgYXMgaWYgbm8gdGFyZ2V0IHdhcyBzcGVjaWZpZWQuCisJCVNlZSBkZXNjcmlwdGlvbiBhYm92ZS4KKworCW1ha2UgLUMgJEtESVIgTT0kUFdEIG1vZHVsZXNfaW5zdGFsbAorCQlJbnN0YWxsIHRoZSBleHRlcm5hbCBtb2R1bGUocykuCisJCUluc3RhbGxhdGlvbiBkZWZhdWx0IGlzIGluIC9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L2V4dHJhLAorCQlidXQgbWF5IGJlIHByZWZpeGVkIHdpdGggSU5TVEFMTF9NT0RfUEFUSCAtIHNlZSBzZXBhcmF0ZSBjaGF0ZXIuCisKKwltYWtlIC1DICRLRElSIE09JFBXRCBjbGVhbgorCQlSZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcyBmb3IgdGhlIG1vZHVsZSAtIHRoZSBrZXJuZWwKKwkJc291cmNlIGRpcmVjdG9yeSBpcyBub3QgbW9kZGlmaWVkLgorCisJbWFrZSAtQyAkS0RJUiBNPWBwd2RgIGhlbHAKKwkJaGVscCB3aWxsIGxpc3QgdGhlIGF2YWlsYWJsZSB0YXJnZXQgd2hlbiBidWlsZGluZyBleHRlcm5hbAorCQltb2R1bGVzLgorCistLS0gMi4zIEF2YWlsYWJsZSBvcHRpb25zOgorCisJJEtESVIgcmVmZXIgdG8gcGF0aCB0byBrZXJuZWwgc3JjCisKKwltYWtlIC1DICRLRElSCisJCVVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0byBmaW5kIHRoZSBrZXJuZWwgc291cmNlLgorCQknJEtESVInIHJlcHJlc2VudCB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBrZXJuZWwgc291cmNlIGlzLgorCQlNYWtlIHdpbGwgYWN0dWFsbHkgY2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQorCQl3aGVuIGV4ZWN1dGVkIGJ1dCBjaGFuZ2UgYmFjayB3aGVuIGZpbmlzaGVkLgorCisJbWFrZSAtQyAkS0RJUiBNPWBwd2RgCisJCU09IGlzIHVzZWQgdG8gdGVsbCBrYnVpbGQgdGhhdCBhbiBleHRlcm5hbCBtb2R1bGUgaXMKKwkJYmVpbmcgYnVpbHQuCisJCVRoZSBvcHRpb24gZ2l2ZW4gdG8gTT0gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZXh0ZXJuYWwKKwkJbW9kdWxlIChrYnVpbGQgZmlsZSkgaXMgbG9jYXRlZC4KKwkJV2hlbiBhbiBleHRlcm5hbCBtb2R1bGUgaXMgYmVpbmcgYnVpbHQgb25seSBhIHN1YnNldCBvZiB0aGUKKwkJdXN1YWwgdGFyZ2V0cyBhcmUgYXZhaWxhYmxlLgorCisJbWFrZSAtQyAkS0RJUiBTVUJESVJTPWBwd2RgCisJCVNhbWUgYXMgTT0uIFRoZSBTVUJESVJTPSBzeW50YXggaXMga2VwdCBmb3IgYmFja3dhcmRzCisJCWNvbXBhdGliaWxpdHkuCisKKy0tLSAyLjQgUHJlcGFyaW5nIHRoZSBrZXJuZWwgdHJlZSBmb3IgbW9kdWxlIGJ1aWxkCisKKwlUbyBtYWtlIHN1cmUgdGhlIGtlcm5lbCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8KKwlidWlsZCBleHRlcm5hbCBtb2R1bGVzIHRoZSB0YXJnZXQgJ21vZHVsZXNfcHJlcGFyZScgbXVzdCBiZSB1c2VkLgorCSdtb2R1bGVfcHJlcGFyZScgc29sZWx5IGV4aXN0cyBhcyBhIHNpbXBsZSB3YXkgdG8gcHJlcGFyZQorCWEga2VybmVsIGZvciBidWlsZGluZyBleHRlcm5hbCBtb2R1bGVzLgorCU5vdGU6IG1vZHVsZXNfcHJlcGFyZSB3aWxsIG5vdCBidWlsZCBNb2R1bGUuc3ltdmVycyBldmVuIGlmCisJICAgICAgQ09ORklHX01PRFVMRVZFUlNJT05JTkcgaXMgc2V0LgorCSAgICAgIFRoZXJlZm9yZSBhIGZ1bGwga2VybmVsIGJ1aWxkIG5lZWRzIHRvIGJlIGV4ZWN1dGVkIHRvIG1ha2UKKwkgICAgICBtb2R1bGUgdmVyc2lvbmluZyB3b3JrLgorCisKKz09PSAzLiBFeGFtcGxlIGNvbW1hbmRzCisKK1RoaXMgZXhhbXBsZSBzaG93cyB0aGUgYWN0dWFsIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYnVpbGRpbmcKK2FuIGV4dGVybmFsIG1vZHVsZSBmb3IgdGhlIGN1cnJlbnRseSBydW5uaW5nIGtlcm5lbC4KK0luIHRoZSBleGFtcGxlIGJlbG93IHRoZSBkaXN0cmlidXRpb24gaXMgc3VwcG9zZWQgdG8gdXNlIHRoZQorZmFjaWxpdHkgdG8gbG9jYXRlIG91dHB1dCBmaWxlcyBmb3IgYSBrZXJuZWwgY29tcGlsZSBpbiBhIGRpZmZlcmVudAorZGlyZWN0b3J5IHRoYW4gdGhlIGtlcm5lbCBzb3VyY2UgLSBidXQgdGhlIGV4YW1wbGVzIHdpbGwgYWxzbyB3b3JrCit3aGVuIHRoZSBzb3VyY2UgYW5kIHRoZSBvdXRwdXQgZmlsZXMgYXJlIG1peGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKworIyBLZXJuZWwgc291cmNlCisvbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9zb3VyY2UgLT4gL3Vzci9zcmMvbGludXgtPHZlcnNpb24+CisKKyMgT3V0cHV0IGZyb20ga2VybmVsIGNvbXBpbGUKKy9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L2J1aWxkIC0+IC91c3Ivc3JjL2xpbnV4LTx2ZXJzaW9uPi11cAorCitDaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUga2J1aWxkIGZpbGUgaXMgbG9jYXRlZCBhbmQgZXhlY3V0ZQordGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBidWlsZCB0aGUgbW9kdWxlOgorCisJY2QgL2hvbWUvdXNlci9zcmMvbW9kdWxlCisJbWFrZSAtQyAvdXNyL3NyYy9gdW5hbWUgLXJgL3NvdXJjZSAgICAgICAgICAgIFwKKwkgICAgICAgIE89L2xpYi9tb2R1bGVzL2B1bmFtZS1yYC9idWlsZCAgICAgICAgXAorCSAgICAgICAgTT1gcHdkYAorCitUaGVuIHRvIGluc3RhbGwgdGhlIG1vZHVsZSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisJbWFrZSAtQyAvdXNyL3NyYy9gdW5hbWUgLXJgL3NvdXJjZSAgICAgICAgICAgIFwKKwkgICAgICAgIE89L2xpYi9tb2R1bGVzL2B1bmFtZS1yYC9idWlsZCAgICAgICAgXAorCSAgICAgICAgTT1gcHdkYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1vZHVsZXNfaW5zdGFsbAorCitJZiBvbmUgbG9va3MgY2xvc2VseSB5b3Ugd2lsbCBzZWUgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGNvbW1hbmRzIGFzCitsaXN0ZWQgYmVmb3JlIC0gd2l0aCB0aGUgZGlyZWN0b3JpZXMgc3BlbGxlZCBvdXQuCisKK1RoZSBhYm92ZSBhcmUgcmF0aGVyIGxvbmcgY29tbWFuZHMsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXB0ZXIKK2xpc3RzIGEgZmV3IHRyaWNrcyB0byBtYWtlIGl0IGFsbCBlYXNpZXIuCisKKworPT09IDQuIENyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZQorCitrYnVpbGQgaXMgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgdGhlIGtlcm5lbCwgYW5kIGV4dGVybmFsIG1vZHVsZXMKK211c3QgdXNlIGtidWlsZCB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBjaGFuZ2VzIGluIHRoZSBidWlsZCBzeXN0ZW0KK2FuZCB0byBwaWNrIHVwIHRoZSByaWdodCBmbGFncyB0byBnY2MgZXRjLgorCitUaGUga2J1aWxkIGZpbGUgdXNlZCBhcyBpbnB1dCBzaGFsbCBmb2xsb3cgdGhlIHN5bnRheCBkZXNjcmliZWQKK2luIERvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQuIFRoaXMgY2hhcHRlciB3aWxsIGludHJvZHVjZSBhIGZldworbW9yZSB0cmlja3MgdG8gYmUgdXNlZCB3aGVuIGRlYWxpbmcgd2l0aCBleHRlcm5hbCBtb2R1bGVzLgorCitJbiB0aGUgZm9sbG93aW5nIGEgTWFrZWZpbGUgd2lsbCBiZSBjcmVhdGVkIGZvciBhIG1vZHVsZSB3aXRoIHRoZQorZm9sbG93aW5nIGZpbGVzOgorCTgxMjNfaWYuYworCTgxMjNfaWYuaAorCTgxMjNfcGNpLmMKKwk4MTIzX2Jpbi5vX3NoaXBwZWQJPD0gQmluYXJ5IGJsb2IKKworLS0tIDQuMSBTaGFyZWQgTWFrZWZpbGUgZm9yIG1vZHVsZSBhbmQga2VybmVsCisKKwlBbiBleHRlcm5hbCBtb2R1bGUgYWx3YXlzIGluY2x1ZGVzIGEgd3JhcHBlciBNYWtlZmlsZSBzdXBwb3J0aW5nCisJYnVpbGRpbmcgdGhlIG1vZHVsZSB1c2luZyAnbWFrZScgd2l0aCBubyBhcmd1bWVudHMuCisJVGhlIE1ha2VmaWxlIHByb3ZpZGVkIHdpbGwgbW9zdCBsaWtlbHkgaW5jbHVkZSBhZGRpdGlvbmFsCisJZnVuY3Rpb25hbGl0eSBzdWNoIGFzIHRlc3QgdGFyZ2V0cyBldGMuIGFuZCB0aGlzIHBhcnQgc2hhbGwKKwliZSBmaWx0ZXJlZCBhd2F5IGZyb20ga2J1aWxkIHNpbmNlIGl0IG1heSBpbXBhY3Qga2J1aWxkIGlmCisJbmFtZSBjbGFzaGVzIG9jY3Vycy4KKworCUV4YW1wbGUgMToKKwkJLS0+IGZpbGVuYW1lOiBNYWtlZmlsZQorCQlpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCisJCSMga2J1aWxkIHBhcnQgb2YgbWFrZWZpbGUKKwkJb2JqLW0gIDo9IDgxMjMubworCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubworCisJCWVsc2UKKwkJIyBOb3JtYWwgTWFrZWZpbGUKKworCQlLRVJORUxESVIgOj0gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvYnVpbGQKKwkJYWxsOjoKKwkJCSQoTUFLRSkgLUMgJEtFUk5FTERJUiBNPWBwd2RgICRACisKKwkJIyBNb2R1bGUgc3BlY2lmaWMgdGFyZ2V0cworCQlnZW5iaW46CisJCQllY2hvICJYIiA+IDgxMjNfYmluaS5vX3NoaXBwZWQKKworCQllbmRpZgorCisJSW4gZXhhbXBsZSAxIHRoZSBjaGVjayBmb3IgS0VSTkVMUkVMRUFTRSBpcyB1c2VkIHRvIHNlcGFyYXRlCisJdGhlIHR3byBwYXJ0cyBvZiB0aGUgTWFrZWZpbGUuIGtidWlsZCB3aWxsIG9ubHkgc2VlIHRoZSB0d28KKwlhc3NpZ25tZW50cyB3aGVyZWFzIG1ha2Ugd2lsbCBzZWUgZXZlcnl0aGluZyBleGNlcHQgdGhlIHR3bworCWtidWlsZCBhc3NpZ25tZW50cy4KKworCUluIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUga2VybmVsLCBrYnVpbGQgd2lsbCBsb29rIGZvciBhIGZpbGUgbmFtZWQKKwlLYnVpbGQgYW5kIGFzIHNlY29uZCBvcHRpb24gbG9vayBmb3IgYSBmaWxlIG5hbWVkIE1ha2VmaWxlLgorCVV0aWxpc2luZyB0aGUgS2J1aWxkIGZpbGUgbWFrZXMgdXMgc3BsaXQgdXAgdGhlIE1ha2VmaWxlIGluIGV4YW1wbGUgMQorCWludG8gdHdvIGZpbGVzIGFzIHNob3duIGluIGV4YW1wbGUgMjoKKworCUV4YW1wbGUgMjoKKwkJLS0+IGZpbGVuYW1lOiBLYnVpbGQKKwkJb2JqLW0gIDo9IDgxMjMubworCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubworCisJCS0tPiBmaWxlbmFtZTogTWFrZWZpbGUKKwkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCisJCWFsbDo6CisJCQkkKE1BS0UpIC1DICRLRVJORUxESVIgTT1gcHdkYCAkQAorCisJCSMgTW9kdWxlIHNwZWNpZmljIHRhcmdldHMKKwkJZ2VuYmluOgorCQkJZWNobyAiWCIgPiA4MTIzX2Jpbl9zaGlwcGVkCisKKworCUluIGV4YW1wbGUgMiB3ZSBhcmUgZG93biB0byB0d28gZmFpcmx5IHNpbXBsZSBmaWxlcyBhbmQgZm9yIHNpbXBsZQorCWZpbGVzIGFzIHVzZWQgaW4gdGhpcyBleGFtcGxlIHRoZSBzcGxpdCBpcyBxdWVzdGlvbmFibGUuIEJ1dCBzb21lCisJZXh0ZXJuYWwgbW9kdWxlcyB1c2UgTWFrZWZpbGVzIG9mIHNldmVyYWwgaHVuZHJlZCBsaW5lcyBhbmQgaGVyZSBpdAorCXJlYWxseSBwYXlzIG9mZiB0byBzZXBhcmF0ZSB0aGUga2J1aWxkIHBhcnQgZnJvbSB0aGUgcmVzdC4KKwlFeGFtcGxlIDMgc2hvd3MgYSBiYWNrd2FyZCBjb21wYXRpYmxlIHZlcnNpb24uCisKKwlFeGFtcGxlIDM6CisJCS0tPiBmaWxlbmFtZTogS2J1aWxkCisJCW9iai1tICA6PSA4MTIzLm8KKwkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KKworCQktLT4gZmlsZW5hbWU6IE1ha2VmaWxlCisJCWlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKKwkJaW5jbHVkZSBLYnVpbGQKKwkJZWxzZQorCQkjIE5vcm1hbCBNYWtlZmlsZQorCisJCUtFUk5FTERJUiA6PSAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAorCQlhbGw6OgorCQkJJChNQUtFKSAtQyAkS0VSTkVMRElSIE09YHB3ZGAgJEAKKworCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCisJCWdlbmJpbjoKKwkJCWVjaG8gIlgiID4gODEyM19iaW5fc2hpcHBlZAorCisJCWVuZGlmCisKKwkJVGhlIHRyaWNrIGhlcmUgaXMgdG8gaW5jbHVkZSB0aGUgS2J1aWxkIGZpbGUgZnJvbSBNYWtlZmlsZSBzbworCQlpZiBhbiBvbGRlciB2ZXJzaW9uIG9mIGtidWlsZCBwaWNrcyB1cCB0aGUgTWFrZWZpbGUgdGhlIEtidWlsZAorCQlmaWxlIHdpbGwgYmUgaW5jbHVkZWQuCisKKy0tLSA0LjIgQmluYXJ5IGJsb2JzIGluY2x1ZGVkIGluIGEgbW9kdWxlCisKKwlTb21lIGV4dGVybmFsIG1vZHVsZXMgbmVlZHMgdG8gaW5jbHVkZSBhIC5vIGFzIGEgYmxvYi4ga2J1aWxkCisJaGFzIHN1cHBvcnQgZm9yIHRoaXMsIGJ1dCByZXF1aXJlcyB0aGUgYmxvYiBmaWxlIHRvIGJlIG5hbWVkCisJPGZpbGVuYW1lPl9zaGlwcGVkLiBJbiBvdXIgZXhhbXBsZSB0aGUgYmxvYiBpcyBuYW1lZAorCTgxMjNfYmluLm9fc2hpcHBlZCBhbmQgd2hlbiB0aGUga2J1aWxkIHJ1bGVzIGtpY2sgaW4gdGhlIGZpbGUKKwk4MTIzX2Jpbi5vIGlzIGNyZWF0ZWQgYXMgYSBzaW1wbGUgY29weSBvZmYgdGhlIDgyMTNfYmluLm9fc2hpcHBlZCBmaWxlCisJd2l0aCB0aGUgX3NoaXBwZWQgcGFydCBzdHJpcHBlZCBvZiB0aGUgZmlsZW5hbWUuCisJVGhpcyBhbGxvd3MgdGhlIDgxMjNfYmluLm8gZmlsZW5hbWUgdG8gYmUgdXNlZCBpbiB0aGUgYXNzaWdubWVudCB0bworCXRoZSBtb2R1bGUuCisKKwlFeGFtcGxlIDQ6CisJCW9iai1tICA6PSA4MTIzLm8KKwkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KKworCUluIGV4YW1wbGUgNCB0aGVyZSBpcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBvcmRpbmFyeSAuYy8uaCBmaWxlcworCWFuZCB0aGUgYmluYXJ5IGZpbGUuIEJ1dCBrYnVpbGQgd2lsbCBwaWNrIHVwIGRpZmZlcmVudCBydWxlcyB0byBjcmVhdGUKKwl0aGUgLm8gZmlsZS4KKworCis9PT0gNS4gSW5jbHVkZSBmaWxlcworCitJbmNsdWRlIGZpbGVzIGFyZSBhIG5lY2Vzc2l0eSB3aGVuIGEgLmMgZmlsZSB1c2VzIHNvbWV0aGluZyBmcm9tIGFub3RoZXIgLmMKK2ZpbGVzIChub3Qgc3RyaWN0bHkgaW4gdGhlIHNlbnNlIG9mIC5jIGJ1dCBpZiBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlIGlzCit1c2VkKS4gQW55IG1vZHVsZSB0aGF0IGNvbnNpc3Qgb2YgbW9yZSB0aGFuIG9uZSAuYyBmaWxlIHdpbGwgaGF2ZSBhIC5oIGZpbGUKK2ZvciBvbmUgb2YgdGhlIC5jIGZpbGVzLiAKKy0gSWYgdGhlIC5oIGZpbGUgb25seSBkZXNjcmliZXMgYSBtb2R1bGUgaW50ZXJuYWwgaW50ZXJmYWNlIHRoZW4gdGhlIC5oIGZpbGUKKyAgc2hhbGwgYmUgcGxhY2VkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgLmMgZmlsZXMuCistIElmIHRoZSAuaCBmaWxlcyBkZXNjcmliZSBhbiBpbnRlcmZhY2UgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsCisgIGxvY2F0ZWQgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzLCB0aGUgLmggZmlsZXMgc2hhbGwgYmUgbG9jYXRlZCBpbgorICBpbmNsdWRlL2xpbnV4LyBvciBvdGhlciBpbmNsdWRlLyBkaXJlY3RvcmllcyBhcyBhcHByb3ByaWF0ZS4KKworT25lIGV4Y2VwdGlvbiBmb3IgdGhpcyBydWxlIGlzIGxhcmdlciBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVpciBvd24gZGlyZWN0b3J5Cit1bmRlciBpbmNsdWRlLyBzdWNoIGFzIGluY2x1ZGUvc2NzaS4gQW5vdGhlciBleGNlcHRpb24gaXMgYXJjaC1zcGVjaWZpYworLmggZmlsZXMgd2hpY2ggYXJlIGxvY2F0ZWQgdW5kZXIgaW5jbHVkZS9hc20tJChBUkNIKS8qLgorCitFeHRlcm5hbCBtb2R1bGVzIGhhdmUgYSB0ZW5kZW5jeSB0byBsb2NhdGUgaW5jbHVkZSBmaWxlcyBpbiBhIHNlcGFyYXRlIGluY2x1ZGUvCitkaXJlY3RvcnkgYW5kIHRoZXJlZm9yZSBuZWVkcyB0byBkZWFsIHdpdGggdGhpcyBpbiB0aGVpciBrYnVpbGQgZmlsZS4KKworLS0tIDUuMSBIb3cgdG8gaW5jbHVkZSBmaWxlcyBmcm9tIHRoZSBrZXJuZWwgaW5jbHVkZSBkaXIKKworCVdoZW4gYSBtb2R1bGUgbmVlZHMgdG8gaW5jbHVkZSBhIGZpbGUgZnJvbSBpbmNsdWRlL2xpbnV4LyB0aGVuIG9uZQorCWp1c3QgdXNlczoKKworCQkjaW5jbHVkZSA8bGludXgvbW9kdWxlcy5oPgorCisJa2J1aWxkIHdpbGwgbWFrZSBzdXJlIHRvIGFkZCBvcHRpb25zIHRvIGdjYyBzbyB0aGUgcmVsZXZhbnQKKwlkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQuCisJTGlrZXdpc2UgZm9yIC5oIGZpbGVzIHBsYWNlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIC5jIGZpbGUuCisKKwkJI2luY2x1ZGUgIjgxMjNfaWYuaCIKKworCXdpbGwgZG8gdGhlIGpvYi4KKworLS0tIDUuMiBFeHRlcm5hbCBtb2R1bGVzIHVzaW5nIGFuIGluY2x1ZGUvIGRpcgorCisJRXh0ZXJuYWwgbW9kdWxlcyBvZnRlbiBsb2NhdGUgdGhlaXIgLmggZmlsZXMgaW4gYSBzZXBhcmF0ZSBpbmNsdWRlLworCWRpcmVjdG9yeSBhbHRob3VnaCB0aGlzIGlzIG5vdCB1c3VhbCBrZXJuZWwgc3R5bGUuIFdoZW4gYW4gZXh0ZXJuYWwKKwltb2R1bGUgdXNlcyBhbiBpbmNsdWRlLyBkaXIgdGhlbiBrYnVpbGQgbmVlZHMgdG8gYmUgdG9sZCBzby4KKwlUaGUgdHJpY2sgaGVyZSBpcyB0byB1c2UgZWl0aGVyIEVYVFJBX0NGTEFHUyAodGFrZSBlZmZlY3QgZm9yIGFsbCAuYworCWZpbGVzKSBvciBDRkxBR1NfJEYubyAodGFrZSBlZmZlY3Qgb25seSBmb3IgYSBzaW5nbGUgZmlsZSkuCisKKwlJbiBvdXIgZXhhbXBsZSBpZiB3ZSBtb3ZlIDgxMjNfaWYuaCB0byBhIHN1YmRpcmVjdG9yeSBuYW1lZCBpbmNsdWRlLworCXRoZSByZXN1bHRpbmcgS2J1aWxkIGZpbGUgd291bGQgbG9vayBsaWtlOgorCisJCS0tPiBmaWxlbmFtZTogS2J1aWxkCisJCW9iai1tICA6PSA4MTIzLm8KKworCQlFWFRSQV9DRkxBR1MgOj0gLUlpbmNsdWRlCisJCTgxMjMteSA6PSA4MTIzX2lmLm8gODEyM19wY2kubyA4MTIzX2Jpbi5vCisKKwlOb3RlIHRoYXQgaW4gdGhlIGFzc2luZ21lbnQgdGhlcmUgaXMgbm8gc3BhY2UgYmV0d2VlbiAtSSBhbmQgdGhlIHBhdGguCisJVGhpcyBpcyBhIGtidWlsZCBsaW1pdGF0aW9uIGFuZCBubyBzcGFjZSBtdXN0IGJlIHByZXNlbnQuCisKKworPT09IDYuIE1vZHVsZSBpbnN0YWxsYXRpb24KKworTW9kdWxlcyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBpcyBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeToKKworCS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAorCitFeHRlcm5hbCBtb2R1bGVzIGFyZSBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeToKKworCS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2V4dHJhCisKKy0tLSA2LjEgSU5TVEFMTF9NT0RfUEFUSAorCisJQWJvdmUgYXJlIHRoZSBkZWZhdWx0IGRpcmVjdG9yaWVzLCBidXQgYXMgYWx3YXlzIHNvbWUgbGV2ZWwgb2YKKwljdXN0b21pemF0aW9uIGlzIHBvc3NpYmxlLiBPbmUgY2FuIHByZWZpeCB0aGUgcGF0aCB1c2luZyB0aGUgdmFyaWFibGUKKwlJTlNUQUxMX01PRF9QQVRIOgorCisJCSQgbWFrZSBJTlNUQUxMX01PRF9QQVRIPS9mcm9kbyBtb2R1bGVzX2luc3RhbGwKKwkJPT4gSW5zdGFsbCBkaXI6IC9mcm9kby9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAorCisJSU5TVEFMTF9NT0RfUEFUSCBtYXkgYmUgc2V0IGFzIGFuIG9yZGluYXJ5IHNoZWxsIHZhcmlhYmxlIG9yIGFzIGluIHRoZQorCWV4YW1wbGUgYWJvdmUgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSB3aGVuIGNhbGxpbmcgbWFrZS4KKwlJTlNUQUxMX01PRF9QQVRIIGhhcyBlZmZlY3QgYm90aCB3aGVuIGluc3RhbGxpbmcgbW9kdWxlcyBpbmNsdWRlZCBpbgorCXRoZSBrZXJuZWwgYXMgd2VsbCBhcyB3aGVuIGluc3RhbGxpbmcgZXh0ZXJuYWwgbW9kdWxlcy4KKworLS0tIDYuMiBJTlNUQUxMX01PRF9ESVIKKworCVdoZW4gaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGVzIHRoZXkgYXJlIGRlZmF1bHQgaW5zdGFsbGVkIGluIGEKKwlkaXJlY3RvcnkgdW5kZXIgL2xpYi9tb2R1bGVzLyQoS0VSTkVMUkVMRUFTRSkvZXh0cmEsIGJ1dCBvbmUgbWF5IHdpc2gKKwl0byBsb2NhdGUgbW9kdWxlcyBmb3IgYSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGluIGEgc2VwYXJhdGUKKwlkaXJlY3RvcnkuIEZvciB0aGlzIHB1cnBvc2Ugb25lIGNhbiB1c2UgSU5TVEFMTF9NT0RfRElSIHRvIHNwZWNpZnkgYW4KKwlhbHRlcm5hdGl2ZSBuYW1lIHRoYW4gJ2V4dHJhJy4KKworCQkkIG1ha2UgSU5TVEFMTF9NT0RfRElSPWdhbmRhbGYgLUMgS0VSTkVMRElSIFwKKwkJCU09YHB3ZGAgbW9kdWxlc19pbnN0YWxsCisJCT0+IEluc3RhbGwgZGlyOiAvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9nYW5kYWxmCisKKworPT09IDcuIE1vZHVsZSB2ZXJzaW9uaW5nCisKK01vZHVsZSB2ZXJzaW9uaW5nIGFyZSBlbmFibGVkIGJ5IHRoZSBDT05GSUdfTU9EVkVSU0lPTlMgdGFnLgorCitNb2R1bGUgdmVyc2lvbmluZyBpcyB1c2VkIGFzIGEgc2ltcGxlIEFCSSBjb25zaXN0ZW5jeSBjaGVjay4gVGhlIE1vZHVsZQordmVyc2lvbmluZyBjcmVhdGVzIGEgQ1JDIHZhbHVlIG9mIHRoZSBmdWxsIHByb3RvdHlwZSBmb3IgYW4gZXhwb3J0ZWQgc3ltYm9sIGFuZAord2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQvdXNlZCB0aGVuIHRoZSBDUkMgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUga2VybmVsIGFyZQorY29tcGFyZWQgd2l0aCBzaW1pbGFyIHZhbHVlcyBpbiB0aGUgbW9kdWxlLiBJZiB0aGV5IGFyZSBub3QgZXF1YWwgdGhlbiB0aGUKK2tlcm5lbCByZWZ1c2VzIHRvIGxvYWQgdGhlIG1vZHVsZS4KKworRHVyaW5nIGEga2VybmVsIGJ1aWxkIGEgZmlsZSBuYW1lZCBNb2R1bGUuc3ltdmVycyB3aWxsIGJlIGdlbmVyYXRlZC4gVGhpcworZmlsZSBpbmNsdWRlcyB0aGUgc3ltYm9sIHZlcnNpb24gb2YgYWxsIHN5bWJvbHMgd2l0aGluIHRoZSBrZXJuZWwuIElmIHRoZSAKK01vZHVsZS5zeW12ZXJzIGZpbGUgaXMgc2F2ZWQgZnJvbSB0aGUgbGFzdCBmdWxsIGtlcm5lbCBjb21waWxlIG9uZSBkb2VzIG5vdAoraGF2ZSB0byBkbyBhIGZ1bGwga2VybmVsIGNvbXBpbGUgdG8gYnVpbGQgYSBtb2R1bGUgdmVyc2lvbidzIGNvbXBhdGlibGUgbW9kdWxlLgorCis9PT0gOC4gVGlwcyAmIFRyaWNrcworCistLS0gOC4xIFRlc3RpbmcgZm9yIENPTkZJR19GT09fQkFSCisKKwlNb2R1bGVzIG9mdGVuIG5lZWRzIHRvIGNoZWNrIGZvciBjZXJ0YWluIENPTkZJR18gb3B0aW9ucyB0byBkZWNpZGUgaWYKKwlhIHNwZWNpZmljIGZlYXR1cmUgc2hhbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG1vZHVsZS4gV2hlbiBrYnVpbGQgaXMgdXNlZAorCXRoaXMgaXMgZG9uZSBieSByZWZlcmVuY2luZyB0aGUgQ09ORklHXyB2YXJpYWJsZSBkaXJlY3RseS4KKworCQkjZnMvZXh0Mi9NYWtlZmlsZQorCQlvYmotJChDT05GSUdfRVhUMl9GUykgKz0gZXh0Mi5vCisKKwkJZXh0Mi15IDo9IGJhbGxvYy5vIGJpdG1hcC5vIGRpci5vCisJCWV4dDItJChDT05GSUdfRVhUMl9GU19YQVRUUikgKz0geGF0dHIubworCisJRXh0ZXJuYWwgbW9kdWxlcyBoYXZlIHRyYWRpdGlvbmFsbHkgdXNlZCBncmVwIHRvIGNoZWNrIGZvciBzcGVjaWZpYworCUNPTkZJR18gc2V0dGluZ3MgZGlyZWN0bHkgaW4gLmNvbmZpZy4gVGhpcyB1c2FnZSBpcyBicm9rZW4uCisJQXMgaW50cm9kdWNlZCBiZWZvcmUgZXh0ZXJuYWwgbW9kdWxlcyBzaGFsbCB1c2Uga2J1aWxkIHdoZW4gYnVpbGRpbmcKKwlhbmQgdGhlcmVmb3JlIGNhbiB1c2UgdGhlIHNhbWUgbWV0aG9kcyBhcyBpbi1rZXJuZWwgbW9kdWxlcyB3aGVuIHRlc3RpbmcKKwlmb3IgQ09ORklHXyBkZWZpbml0aW9ucy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDZjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQKQEAgLTAsMCArMSwxNTAgQEAKK2tlcm5lbC1kb2MgbmFuby1IT1dUTworPT09PT09PT09PT09PT09PT09PT09CisKK01hbnkgcGxhY2VzIGluIHRoZSBzb3VyY2UgdHJlZSBoYXZlIGV4dHJhY3RhYmxlIGRvY3VtZW50YXRpb24gaW4gdGhlCitmb3JtIG9mIGJsb2NrIGNvbW1lbnRzIGFib3ZlIGZ1bmN0aW9ucy4gIFRoZSBjb21wb25lbnRzIG9mIHRoaXMgc3lzdGVtCithcmU6CisKKy0gc2NyaXB0cy9rZXJuZWwtZG9jCisKKyAgVGhpcyBpcyBhIHBlcmwgc2NyaXB0IHRoYXQgaHVudHMgZm9yIHRoZSBibG9jayBjb21tZW50cyBhbmQgY2FuIG1hcmsKKyAgdGhlbSB1cCBkaXJlY3RseSBpbnRvIERvY0Jvb2ssIG1hbiwgdGV4dCwgYW5kIEhUTUwuIChObywgbm90CisgIHRleGluZm8uKQorCistIERvY3VtZW50YXRpb24vRG9jQm9vay8qLnRtcGwKKworICBUaGVzZSBhcmUgU0dNTCB0ZW1wbGF0ZSBmaWxlcywgd2hpY2ggYXJlIG5vcm1hbCBTR01MIGZpbGVzIHdpdGgKKyAgc3BlY2lhbCBwbGFjZS1ob2xkZXJzIGZvciB3aGVyZSB0aGUgZXh0cmFjdGVkIGRvY3VtZW50YXRpb24gc2hvdWxkCisgIGdvLgorCistIHNjcmlwdHMvZG9jcHJvYy5jCisKKyAgVGhpcyBpcyBhIHByb2dyYW0gZm9yIGNvbnZlcnRpbmcgU0dNTCB0ZW1wbGF0ZSBmaWxlcyBpbnRvIFNHTUwKKyAgZmlsZXMuIFdoZW4gYSBmaWxlIGlzIHJlZmVyZW5jZWQgaXQgaXMgc2VhcmNoZWQgZm9yIHN5bWJvbHMKKyAgZXhwb3J0ZWQgKEVYUE9SVF9TWU1CT0wpLCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gaW50ZXJuYWwKKyAgYW5kIGV4dGVybmFsIGZ1bmN0aW9ucy4KKyAgSXQgaW52b2tlcyBrZXJuZWwtZG9jLCBnaXZpbmcgaXQgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQKKyAgYXJlIHRvIGJlIGRvY3VtZW50ZWQuCisgIEFkZGl0aW9uYWxseSBpdCBpcyB1c2VkIHRvIHNjYW4gdGhlIFNHTUwgdGVtcGxhdGUgZmlsZXMgdG8gbG9jYXRlCisgIGFsbCB0aGUgZmlsZXMgcmVmZXJlbmNlZCBoZXJlaW4uIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBkZXBlbmRlbmN5CisgIGluZm9ybWF0aW9uIGFzIHVzZWQgYnkgbWFrZS4KKworLSBNYWtlZmlsZQorCisgIFRoZSB0YXJnZXRzICdzZ21sZG9jcycsICdwc2RvY3MnLCAncGRmZG9jcycsIGFuZCAnaHRtbGRvY3MnIGFyZSB1c2VkCisgIHRvIGJ1aWxkIERvY0Jvb2sgZmlsZXMsIFBvc3RTY3JpcHQgZmlsZXMsIFBERiBmaWxlcywgYW5kIGh0bWwgZmlsZXMKKyAgaW4gRG9jdW1lbnRhdGlvbi9Eb2NCb29rLgorCistIERvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorCisgIFRoaXMgaXMgd2hlcmUgQyBmaWxlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIFNHTUwgdGVtcGxhdGVzLgorCisKK0hvdyB0byBleHRyYWN0IHRoZSBkb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UganVzdCB3YW50IHRvIHJlYWQgdGhlIHJlYWR5LW1hZGUgYm9va3Mgb24gdGhlIHZhcmlvdXMKK3N1YnN5c3RlbXMgKHNlZSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svKi50bXBsKSwganVzdCB0eXBlICdtYWtlCitwc2RvY3MnLCBvciAnbWFrZSBwZGZkb2NzJywgb3IgJ21ha2UgaHRtbGRvY3MnLCBkZXBlbmRpbmcgb24geW91ciAKK3ByZWZlcmVuY2UuICBJZiB5b3Ugd291bGQgcmF0aGVyIHJlYWQgYSBkaWZmZXJlbnQgZm9ybWF0LCB5b3UgY2FuIHR5cGUgCisnbWFrZSBzZ21sZG9jcycgYW5kIHRoZW4gdXNlIERvY0Jvb2sgdG9vbHMgdG8gY29udmVydCAKK0RvY3VtZW50YXRpb24vRG9jQm9vay8qLnNnbWwgdG8gYSBmb3JtYXQgb2YgeW91ciBjaG9pY2UgKGZvciBleGFtcGxlLCAKKydkYjJodG1sIC4uLicgaWYgJ21ha2UgaHRtbGRvY3MnIHdhcyBub3QgZGVmaW5lZCkuCisKK0lmIHlvdSB3YW50IHRvIHNlZSBtYW4gcGFnZXMgaW5zdGVhZCwgeW91IGNhbiBkbyB0aGlzOgorCiskIGNkIGxpbnV4CiskIHNjcmlwdHMva2VybmVsLWRvYyAtbWFuICQoZmluZCAtbmFtZSAnKi5jJykgfCBzcGxpdC1tYW4ucGwgL3RtcC9tYW4KKyQgc2NyaXB0cy9rZXJuZWwtZG9jIC1tYW4gJChmaW5kIC1uYW1lICcqLmgnKSB8IHNwbGl0LW1hbi5wbCAvdG1wL21hbgorCitIZXJlIGlzIHNwbGl0LW1hbi5wbDoKKworLS0+CisjIS91c3IvYmluL3BlcmwKKworaWYgKCQjQVJHViA8IDApIHsKKyAgIGRpZSAid2hlcmUgZG8gSSBwdXQgdGhlIHJlc3VsdHM/XG4iOworfQorCitta2RpciAkQVJHVlswXSwwNzc3OworJHN0YXRlID0gMDsKK3doaWxlICg8U1RESU4+KSB7CisgICAgaWYgKC9eXC5USCBcIlteXCJdKlwiIDQgXCIoW15cIl0qKVwiLykgeworCWlmICgkc3RhdGUgPT0gMSkgeyBjbG9zZSBPVVQgfQorCSRzdGF0ZSA9IDE7CisJJGZuID0gIiRBUkdWWzBdLyQxLjQiOworCXByaW50IFNUREVSUiAiQ3JlYXRpbmcgJGZuXG4iOworCW9wZW4gT1VULCAiPiRmbiIgb3IgZGllICJjYW4ndCBvcGVuICRmbjogJCFcbiI7CisJcHJpbnQgT1VUICRfOworICAgIH0gZWxzaWYgKCRzdGF0ZSAhPSAwKSB7CisJcHJpbnQgT1VUICRfOworICAgIH0KK30KKworY2xvc2UgT1VUOworPC0tCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gdmlldyB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igb25lIGZ1bmN0aW9uIGluIG9uZQorZmlsZSwgeW91IGNhbiBkbyB0aGlzOgorCiskIHNjcmlwdHMva2VybmVsLWRvYyAtbWFuIC1mdW5jdGlvbiBmbiBmaWxlIHwgbnJvZmYgLW1hbiB8IGxlc3MKKworb3IgdGhpczoKKworJCBzY3JpcHRzL2tlcm5lbC1kb2MgLXRleHQgLWZ1bmN0aW9uIGZuIGZpbGUKKworCitIb3cgdG8gYWRkIGV4dHJhY3RhYmxlIGRvY3VtZW50YXRpb24gdG8geW91ciBzb3VyY2UgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9ybWF0IG9mIHRoZSBibG9jayBjb21tZW50IGlzIGxpa2UgdGhpczoKKworLyoqCisgKiBmdW5jdGlvbl9uYW1lKDopPyAoLSBzaG9ydCBkZXNjcmlwdGlvbik/CisoKiBAcGFyYW1ldGVyeDogKGRlc2NyaXB0aW9uIG9mIHBhcmFtZXRlciB4KT8pKgorKCogYSBibGFuayBsaW5lKT8KKyAqIChEZXNjcmlwdGlvbjopPyAoRGVzY3JpcHRpb24gb2YgZnVuY3Rpb24pPworICogKHNlY3Rpb24gaGVhZGVyOiAoc2VjdGlvbiBkZXNjcmlwdGlvbik/ICkqCisoKik/Ki8KKworVGhlIHNob3J0IGZ1bmN0aW9uIGRlc2NyaXB0aW9uIGNhbm5vdCBiZSBtdWx0aWxpbmUsIGJ1dCB0aGUgb3RoZXIKK2Rlc2NyaXB0aW9ucyBjYW4gYmUgKGFuZCB0aGV5IGNhbiBjb250YWluIGJsYW5rIGxpbmVzKS4gQXZvaWQgcHV0dGluZyBhCitzcHVyaW91cyBibGFuayBsaW5lIGFmdGVyIHRoZSBmdW5jdGlvbiBuYW1lLCBvciBlbHNlIHRoZSBkZXNjcmlwdGlvbiB3aWxsCitiZSByZXBlYXRlZCEKKworQWxsIGRlc2NyaXB0aXZlIHRleHQgaXMgZnVydGhlciBwcm9jZXNzZWQsIHNjYW5uaW5nIGZvciB0aGUgZm9sbG93aW5nIHNwZWNpYWwKK3BhdHRlcm5zLCB3aGljaCBhcmUgaGlnaGxpZ2h0ZWQgYXBwcm9wcmlhdGVseS4KKworJ2Z1bmNuYW1lKCknIC0gZnVuY3Rpb24KKyckRU5WVkFSJyAtIGVudmlyb25tZW50IHZhcmlhYmxlCisnJnN0cnVjdF9uYW1lJyAtIG5hbWUgb2YgYSBzdHJ1Y3R1cmUgKHVwIHRvIHR3byB3b3JkcyBpbmNsdWRpbmcgJ3N0cnVjdCcpCisnQHBhcmFtZXRlcicgLSBuYW1lIG9mIGEgcGFyYW1ldGVyCisnJUNPTlNUJyAtIG5hbWUgb2YgYSBjb25zdGFudC4KKworVGFrZSBhIGxvb2sgYXJvdW5kIHRoZSBzb3VyY2UgdHJlZSBmb3IgZXhhbXBsZXMuCisKKworSG93IHRvIG1ha2UgbmV3IFNHTUwgdGVtcGxhdGUgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NHTUwgdGVtcGxhdGUgZmlsZXMgKCoudG1wbCkgYXJlIGxpa2Ugbm9ybWFsIFNHTUwgZmlsZXMsIGV4Y2VwdCB0aGF0Cit0aGV5IGNhbiBjb250YWluIGVzY2FwZSBzZXF1ZW5jZXMgd2hlcmUgZXh0cmFjdGVkIGRvY3VtZW50YXRpb24gc2hvdWxkCitiZSBpbnNlcnRlZC4KKworIUU8ZmlsZW5hbWU+IGlzIHJlcGxhY2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uLCBpbiA8ZmlsZW5hbWU+LCBmb3IKK2Z1bmN0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCB1c2luZyBFWFBPUlRfU1lNQk9MOiB0aGUgZnVuY3Rpb24gbGlzdCBpcworY29sbGVjdGVkIGZyb20gZmlsZXMgbGlzdGVkIGluIERvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZS4KKworIUk8ZmlsZW5hbWU+IGlzIHJlcGxhY2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUKK19ub3RfIGV4cG9ydGVkIHVzaW5nIEVYUE9SVF9TWU1CT0wuCisKKyFEPGZpbGVuYW1lPiBpcyB1c2VkIHRvIG5hbWUgYWRkaXRpb25hbCBmaWxlcyB0byBzZWFyY2ggZm9yIGZ1bmN0aW9ucworZXhwb3J0ZWQgdXNpbmcgRVhQT1JUX1NZTUJPTC4KKworIUY8ZmlsZW5hbWU+IDxmdW5jdGlvbiBbZnVuY3Rpb25zLi4uXT4gaXMgcmVwbGFjZWQgYnkgdGhlCitkb2N1bWVudGF0aW9uLCBpbiA8ZmlsZW5hbWU+LCBmb3IgdGhlIGZ1bmN0aW9ucyBsaXN0ZWQuCisKKworVGltLgorKi8gPHR3YXVnaEByZWRoYXQuY29tPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODlmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dApAQCAtMCwwICsxLDc3NyBAQAorCisgICAgICAgSW5kZXggb2YgRG9jdW1lbnRhdGlvbiBmb3IgUGVvcGxlIEludGVyZXN0ZWQgaW4gV3JpdGluZyBhbmQvb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgVW5kZXJzdGFuZGluZyB0aGUgTGludXggS2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIEp1YW4tTWFyaWFubyBkZSBHb3llbmVjaGUgPGptc2V5YXNAZGl0LnVwbS5lcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKgorICogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgbWF5IGJlIGZvdW5kIGF0OgorICogICBodHRwOi8vd3d3LmRpdC51cG0uZXMvfmptc2V5YXMvbGludXgva2VybmVsL2hhY2tlcnMtZG9jcy5odG1sCisgKi8KKworICAgVGhlIG5lZWQgZm9yIGEgZG9jdW1lbnQgbGlrZSB0aGlzIG9uZSBiZWNhbWUgYXBwYXJlbnQgaW4gdGhlCisgICBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0IGFzIHRoZSBzYW1lIHF1ZXN0aW9ucywgYXNraW5nIGZvciBwb2ludGVycworICAgdG8gaW5mb3JtYXRpb24sIGFwcGVhcmVkIGFnYWluIGFuZCBhZ2Fpbi4KKyAgIAorICAgRm9ydHVuYXRlbHksIGFzIG1vcmUgYW5kIG1vcmUgcGVvcGxlIGdldCB0byBHTlUvTGludXgsIG1vcmUgYW5kIG1vcmUKKyAgIGdldCBpbnRlcmVzdGVkIGluIHRoZSBLZXJuZWwuIEJ1dCByZWFkaW5nIHRoZSBzb3VyY2VzIGlzIG5vdCBhbHdheXMKKyAgIGVub3VnaC4gSXQgaXMgZWFzeSB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLCBidXQgbWlzcyB0aGUgY29uY2VwdHMsIHRoZQorICAgcGhpbG9zb3BoeSBhbmQgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgdGhpcyBjb2RlLgorICAgCisgICBVbmZvcnR1bmF0ZWx5LCBub3QgbWFueSBkb2N1bWVudHMgYXJlIGF2YWlsYWJsZSBmb3IgYmVnaW5uZXJzIHRvCisgICBzdGFydC4gQW5kLCBldmVuIGlmIHRoZXkgZXhpc3QsIHRoZXJlIHdhcyBubyAid2VsbC1rbm93biIgcGxhY2Ugd2hpY2gKKyAgIGtlcHQgdHJhY2sgb2YgdGhlbS4gVGhlc2UgbGluZXMgdHJ5IHRvIGNvdmVyIHRoaXMgbGFjay4gQWxsIGRvY3VtZW50cworICAgYXZhaWxhYmxlIG9uIGxpbmUga25vd24gYnkgdGhlIGF1dGhvciBhcmUgbGlzdGVkLCB3aGlsZSBzb21lIHJlZmVyZW5jZQorICAgYm9va3MgYXJlIGFsc28gbWVudGlvbmVkLgorICAgCisgICBQTEVBU0UsIGlmIHlvdSBrbm93IGFueSBwYXBlciBub3QgbGlzdGVkIGhlcmUgb3Igd3JpdGUgYSBuZXcgZG9jdW1lbnQsCisgICBzZW5kIG1lIGFuIGUtbWFpbCwgYW5kIEknbGwgaW5jbHVkZSBhIHJlZmVyZW5jZSB0byBpdCBoZXJlLiBBbnkKKyAgIGNvcnJlY3Rpb25zLCBpZGVhcyBvciBjb21tZW50cyBhcmUgYWxzbyB3ZWxjb21lZC4KKyAgIAorICAgVGhlIHBhcGVycyB0aGF0IGZvbGxvdyBhcmUgbGlzdGVkIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIuIEFsbCBhcmUKKyAgIGNhdGFsb2dlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOiB0aGUgZG9jdW1lbnQncyAiVGl0bGUiLCB0aGUKKyAgICJBdXRob3IiL3MsIHRoZSAiVVJMIiB3aGVyZSB0aGV5IGNhbiBiZSBmb3VuZCwgc29tZSAiS2V5d29yZHMiIGhlbHBmdWwKKyAgIHdoZW4gc2VhcmNoaW5nIGZvciBzcGVjaWZpYyB0b3BpY3MsIGFuZCBhIGJyaWVmICJEZXNjcmlwdGlvbiIgb2YgdGhlCisgICBEb2N1bWVudC4KKyAgIAorICAgRW5qb3khCisgICAKKyAgICAgT04tTElORSBET0NTOgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggRGV2aWNlIERyaXZlcnMsIFRoaXJkIEVkaXRpb24iCisgICAgICAgQXV0aG9yOiBKb25hdGhhbiBDb3JiZXQsIEFsZXNzYW5kcm8gUnViaW5pLCBHcmVnIEtyb2FoLUhhcnRtYW4KKyAgICAgICBVUkw6IGh0dHA6Ly9sd24ubmV0L0tlcm5lbC9MREQzLworICAgICAgIERlc2NyaXB0aW9uOiBBIDYwMC1wYWdlIGJvb2sgY292ZXJpbmcgdGhlICgyLjYuMTApIGRyaXZlcgorICAgICAgIHByb2dyYW1taW5nIEFQSSBhbmQga2VybmVsIGhhY2tpbmcgaW4gZ2VuZXJhbC4gIEF2YWlsYWJsZSB1bmRlciB0aGUKKyAgICAgICBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wIGxpY2Vuc2UuCisKKyAgICAgKiBUaXRsZTogIlRoZSBMaW51eCBLZXJuZWwiCisgICAgICAgQXV0aG9yOiBEYXZpZCBBLiBSdXNsaW5nLgorICAgICAgIFVSTDogaHR0cDovL3d3dy50bGRwLm9yZy9MRFAvdGxrL3Rsay5odG1sCisgICAgICAgS2V5d29yZHM6IGV2ZXJ5dGhpbmchLCBib29rLgorICAgICAgIERlc2NyaXB0aW9uOiBPbiBsaW5lLCAyMDAgcGFnZXMgYm9vayBkZXNjcmliaW5nIG1vc3QgYXNwZWN0cyBvZgorICAgICAgIHRoZSBMaW51eCBLZXJuZWwuIFByb2JhYmx5LCB0aGUgZmlyc3QgcmVmZXJlbmNlIGZvciBiZWdpbm5lcnMuCisgICAgICAgTG90cyBvZiBpbGx1c3RyYXRpb25zIGV4cGxhaW5pbmcgZGF0YSBzdHJ1Y3R1cmVzIHVzZSBhbmQKKyAgICAgICByZWxhdGlvbnNoaXBzIGluIHRoZSBwdXJlc3QgUmljaGFyZCBXLiBTdGV2ZW5zJyBzdHlsZS4gQ29udGVudHM6CisgICAgICAgIjEuLUhhcmR3YXJlIEJhc2ljcywgMi4tU29mdHdhcmUgQmFzaWNzLCAzLi1NZW1vcnkgTWFuYWdlbWVudCwKKyAgICAgICA0Li1Qcm9jZXNzZXMsIDUuLUludGVycHJvY2VzcyBDb21tdW5pY2F0aW9uIE1lY2hhbmlzbXMsIDYuLVBDSSwKKyAgICAgICA3Li1JbnRlcnJ1cHRzIGFuZCBJbnRlcnJ1cHQgSGFuZGxpbmcsIDguLURldmljZSBEcml2ZXJzLCA5Li1UaGUKKyAgICAgICBGaWxlIHN5c3RlbSwgMTAuLU5ldHdvcmtzLCAxMS4tS2VybmVsIE1lY2hhbmlzbXMsIDEyLi1Nb2R1bGVzLAorICAgICAgIDEzLi1UaGUgTGludXggS2VybmVsIFNvdXJjZXMsIEEuLUxpbnV4IERhdGEgU3RydWN0dXJlcywgQi4tVGhlCisgICAgICAgQWxwaGEgQVhQIFByb2Nlc3NvciwgQy4tVXNlZnVsIFdlYiBhbmQgRlRQIFNpdGVzLCBELi1UaGUgR05VCisgICAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgR2xvc3NhcnkiLiBJbiBzaG9ydDogYSBtdXN0IGhhdmUuCisgICAgICAgCisgICAgICogVGl0bGU6ICJUaGUgTGludXggS2VybmVsIEhhY2tlcnMnIEd1aWRlIgorICAgICAgIEF1dGhvcjogTWljaGFlbCBLLkpvaG5zb24gYW5kIG90aGVycy4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cudGxkcC5vcmcvTERQL2toZy9IeXBlck5ld3MvZ2V0L2toZy5odG1sCisgICAgICAgS2V5d29yZHM6IGV2ZXJ5dGhpbmchCisgICAgICAgRGVzY3JpcHRpb246IE5vIG1vcmUgUG9zdHNjcmlwdCBib29rLWxpa2UgdmVyc2lvbi4gT25seSBIVE1MIG5vdy4KKyAgICAgICBNYW55IHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkLiBUaGUgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gd2ViCisgICAgICAgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMgYXJjaGl2ZXMuIFlvdSBjYW4gZmluZCBzb21lIGFydGljbGVzIGFuZAorICAgICAgIHRoZW4gc29tZSBtYWlscyBhc2tpbmcgcXVlc3Rpb25zIGFib3V0IHRoZW0gYW5kL29yIGNvbXBsZW1lbnRpbmcKKyAgICAgICBwcmV2aW91cyBjb250cmlidXRpb25zLiBBIGxpdHRsZSBiaXQgYW5hcmNoaWMgaW4gdGhpcyBhc3BlY3QsIGJ1dAorICAgICAgIHdpdGggc29tZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiBpbiBzb21lIGNhc2VzLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiQ29uY2VwdHVhbCBBcmNoaXRlY3R1cmUgb2YgdGhlIExpbnV4IEtlcm5lbCIKKyAgICAgICBBdXRob3I6IEl2YW4gVC4gQm93bWFuLgorICAgICAgIFVSTDogaHR0cDovL3BsZy51d2F0ZXJsb28uY2Evfml0Ym93bWFuL3BhcGVycy9DUzc0NkctYTEuaHRtbAorICAgICAgIEtleXdvcmRzOiBjb25jZXB0dWFsIHNvZnR3YXJlIGFycXVpdGVjdHVyZSwgZXh0cmFjdGVkIGRlc2lnbiwKKyAgICAgICByZXZlcnNlIGVuZ2luZWVyaW5nLCBzeXN0ZW0gc3RydWN0dXJlLgorICAgICAgIERlc2NyaXB0aW9uOiBDb25jZXB0dWFsIHNvZnR3YXJlIGFycXVpdGVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsLAorICAgICAgIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBWZXJ5IGRldGFpbGVkLiBHb29kCisgICAgICAgZmlndXJlcy4gR2l2ZXMgZ29vZCBvdmVyYWxsIGtlcm5lbCB1bmRlcnN0YW5kaW5nLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiQ29uY3JldGUgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBLZXJuZWwiCisgICAgICAgQXV0aG9yOiBJdmFuIFQuIEJvd21hbiwgU2FoZWVtIFNpZGRpcWksIGFuZCBNZXllciBDLiBUYW51YW4uCisgICAgICAgVVJMOiBodHRwOi8vcGxnLnV3YXRlcmxvby5jYS9+aXRib3dtYW4vcGFwZXJzL0NTNzQ2Ry1hMi5odG1sCisgICAgICAgS2V5d29yZHM6IGNvbmNyZXRlIGFycXVpdGVjdHVyZSwgZXh0cmFjdGVkIGRlc2lnbiwgcmV2ZXJzZQorICAgICAgIGVuZ2luZWVyaW5nLCBzeXN0ZW0gc3RydWN0dXJlLCBkZXBlbmRlbmNpZXMuCisgICAgICAgRGVzY3JpcHRpb246IENvbmNyZXRlIGFycXVpdGVjdHVyZSBvZiB0aGUgTGludXgga2VybmVsLAorICAgICAgIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBWZXJ5IGRldGFpbGVkLiBHb29kCisgICAgICAgZmlndXJlcy4gR2l2ZXMgZ29vZCBvdmVyYWxsIGtlcm5lbCB1bmRlcnN0YW5kaW5nLiBUaGlzIHBhcGVycworICAgICAgIGZvY3VzIG9uIGxvd2VyIGRldGFpbHMgdGhhbiBpdHMgcHJlZGVjZXNzb3IgKGZpbGVzLCB2YXJpYWJsZXMuLi4pLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggYXMgYSBDYXNlIFN0dWR5OiBJdHMgRXh0cmFjdGVkIFNvZnR3YXJlCisgICAgICAgQXJjaGl0ZWN0dXJlIgorICAgICAgIEF1dGhvcjogSXZhbiBULiBCb3dtYW4sIFJpY2hhcmQgQy4gSG9sdCBhbmQgTmVpbCBWLiBCcmV3c3Rlci4KKyAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvbGludXhjYXNlLmh0bWwKKyAgICAgICBLZXl3b3Jkczogc29mdHdhcmUgYXJjaGl0ZWN0dXJlLCBhcmNoaXRlY3R1cmUgcmVjb3ZlcnksCisgICAgICAgcmVkb2N1bWVudGF0aW9uLgorICAgICAgIERlc2NyaXB0aW9uOiBQYXBlciBhcHBlYXJlZCBhdCBJQ1NFJzk5LCBMb3MgQW5nZWxlcywgTWF5IDE2LTIyLAorICAgICAgIDE5OTkuIEEgbWl4dHVyZSBvZiB0aGUgcHJldmlvdXMgdHdvIGRvY3VtZW50cyBmcm9tIHRoZSBzYW1lCisgICAgICAgYXV0aG9yLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiT3ZlcnZpZXcgb2YgdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0iCisgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvdmZzLnR4dAorICAgICAgIEtleXdvcmRzOiBWRlMsIEZpbGUgU3lzdGVtLCBtb3VudGluZyBmaWxlc3lzdGVtcywgb3BlbmluZyBmaWxlcywKKyAgICAgICBkZW50cmllcywgZGNhY2hlLgorICAgICAgIERlc2NyaXB0aW9uOiBCcmllZiBpbnRyb2R1Y3Rpb24gdG8gdGhlIExpbnV4IFZpcnR1YWwgRmlsZSBTeXN0ZW0uCisgICAgICAgV2hhdCBpcyBpdCwgaG93IGl0IHdvcmtzLCBvcGVyYXRpb25zIHRha2VuIHdoZW4gb3BlbmluZyBhIGZpbGUgb3IKKyAgICAgICBtb3VudGluZyBhIGZpbGUgc3lzdGVtIGFuZCBkZXNjcmlwdGlvbiBvZiBpbXBvcnRhbnQgZGF0YQorICAgICAgIHN0cnVjdHVyZXMgZXhwbGFpbmluZyB0aGUgcHVycG9zZSBvZiBlYWNoIG9mIHRoZWlyIGVudHJpZXMuCisgICAgICAgCisgICAgICogVGl0bGU6ICJUaGUgTGludXggUkFJRC0xLCA0LCA1IENvZGUiCisgICAgICAgQXV0aG9yOiBJbmdvIE1vbG5hciwgR2FkaSBPeG1hbiBhbmQgTWlndWVsIGRlIEljYXphLgorICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWU0NC8yMzkxLmh0bWwKKyAgICAgICBLZXl3b3JkczogUkFJRCwgTUQgZHJpdmVyLgorICAgICAgIERlc2NyaXB0aW9uOiBMaW51eCBKb3VybmFsIEtlcm5lbCBLb3JuZXIgYXJ0aWNsZS4gSGVyZSBpcyBpdCdzCisgICAgICAgYWJzdHJhY3Q6ICJBIGRlc2NyaXB0aW9uIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUkFJRC0xLAorICAgICAgIFJBSUQtNCBhbmQgUkFJRC01IHBlcnNvbmFsaXRpZXMgb2YgdGhlIE1EIGRldmljZSBkcml2ZXIgaW4gdGhlCisgICAgICAgTGludXgga2VybmVsLCBwcm92aWRpbmcgdXNlcnMgd2l0aCBoaWdoIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJsZSwKKyAgICAgICBzZWNvbmRhcnktc3RvcmFnZSBjYXBhYmlsaXR5IHVzaW5nIHNvZnR3YXJlIi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkR5bmFtaWMgS2VybmVsczogTW9kdWxhcml6ZWQgRGV2aWNlIERyaXZlcnMiCisgICAgICAgQXV0aG9yOiBBbGVzc2FuZHJvIFJ1YmluaS4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjMvMTIxOS5odG1sCisgICAgICAgS2V5d29yZHM6IGRldmljZSBkcml2ZXIsIG1vZHVsZSwgbG9hZGluZy91bmxvYWRpbmcgbW9kdWxlcywKKyAgICAgICBhbGxvY2F0aW5nIHJlc291cmNlcy4KKyAgICAgICBEZXNjcmlwdGlvbjogTGludXggSm91cm5hbCBLZXJuZWwgS29ybmVyIGFydGljbGUuIEhlcmUgaXMgaXQncworICAgICAgIGFic3RyYWN0OiAiVGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBzZXJpZXMgb2YgZm91ciBhcnRpY2xlcworICAgICAgIGNvLWF1dGhvcmVkIGJ5IEFsZXNzYW5kcm8gUnViaW5pIGFuZCBHZW9yZyBaZXpjaHdpdHogd2hpY2ggcHJlc2VudAorICAgICAgIGEgcHJhY3RpY2FsIGFwcHJvYWNoIHRvIHdyaXRpbmcgTGludXggZGV2aWNlIGRyaXZlcnMgYXMga2VybmVsCisgICAgICAgbG9hZGFibGUgbW9kdWxlcy4gVGhpcyBpbnN0YWxsbWVudCBwcmVzZW50cyBhbiBpbnRyb2R1Y3Rpb24gdG8gdGhlCisgICAgICAgdG9waWMsIHByZXBhcmluZyB0aGUgcmVhZGVyIHRvIHVuZGVyc3RhbmQgbmV4dCBtb250aCdzCisgICAgICAgaW5zdGFsbG1lbnQiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiRHluYW1pYyBLZXJuZWxzOiBEaXNjb3ZlcnkiCisgICAgICAgQXV0aG9yOiBBbGVzc2FuZHJvIFJ1YmluaS4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjQvMTIyMC5odG1sCisgICAgICAgS2V5d29yZHM6IGNoYXJhY3RlciBkcml2ZXIsIGluaXRfbW9kdWxlLCBjbGVhbl91cCBtb2R1bGUsCisgICAgICAgYXV0b2RldGVjdGlvbiwgbWF5b3IgbnVtYmVyLCBtaW5vciBudW1iZXIsIGZpbGUgb3BlcmF0aW9ucywKKyAgICAgICBvcGVuKCksIGNsb3NlKCkuCisgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKKyAgICAgICBhYnN0cmFjdDogIlRoaXMgYXJ0aWNsZSwgdGhlIHNlY29uZCBvZiBmb3VyLCBpbnRyb2R1Y2VzIHBhcnQgb2YKKyAgICAgICB0aGUgYWN0dWFsIGNvZGUgdG8gY3JlYXRlIGN1c3RvbSBtb2R1bGUgaW1wbGVtZW50aW5nIGEgY2hhcmFjdGVyCisgICAgICAgZGV2aWNlIGRyaXZlci4gSXQgZGVzY3JpYmVzIHRoZSBjb2RlIGZvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kCisgICAgICAgY2xlYW51cCwgYXMgd2VsbCBhcyB0aGUgb3BlbigpIGFuZCBjbG9zZSgpIHN5c3RlbSBjYWxscyIuCisgICAgICAgCisgICAgICogVGl0bGU6ICJUaGUgRGV2aWwncyBpbiB0aGUgRGV0YWlscyIKKyAgICAgICBBdXRob3I6IEdlb3JnIHYuIFplenNjaHdpdHogYW5kIEFsZXNzYW5kcm8gUnViaW5pLgorICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWUyNS8xMjIxLmh0bWwKKyAgICAgICBLZXl3b3JkczogcmVhZCgpLCB3cml0ZSgpLCBzZWxlY3QoKSwgaW9jdGwoKSwgYmxvY2tpbmcvbm9uCisgICAgICAgYmxvY2tpbmcgbW9kZSwgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lciBhcnRpY2xlLiBIZXJlIGlzIGl0J3MKKyAgICAgICBhYnN0cmFjdDogIlRoaXMgYXJ0aWNsZSwgdGhlIHRoaXJkIG9mIGZvdXIgb24gd3JpdGluZyBjaGFyYWN0ZXIKKyAgICAgICBkZXZpY2UgZHJpdmVycywgaW50cm9kdWNlcyBjb25jZXB0cyBvZiByZWFkaW5nLCB3cml0aW5nLCBhbmQgdXNpbmcKKyAgICAgICBpb2N0bC1jYWxscyIuCisgICAgICAgCisgICAgICogVGl0bGU6ICJEaXNzZWN0aW5nIEludGVycnVwdHMgYW5kIEJyb3dzaW5nIERNQSIKKyAgICAgICBBdXRob3I6IEFsZXNzYW5kcm8gUnViaW5pIGFuZCBHZW9yZyB2LiBaZXpzY2h3aXR6LgorICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWUyNi8xMjIyLmh0bWwKKyAgICAgICBLZXl3b3JkczogaW50ZXJydXB0cywgaXJxcywgRE1BLCBib3R0b20gaGFsdmVzLCB0YXNrIHF1ZXVlcy4KKyAgICAgICBEZXNjcmlwdGlvbjogTGludXggSm91cm5hbCBLZXJuZWwgS29ybmVyIGFydGljbGUuIEhlcmUgaXMgaXQncworICAgICAgIGFic3RyYWN0OiAiVGhpcyBpcyB0aGUgZm91cnRoIGluIGEgc2VyaWVzIG9mIGFydGljbGVzIGFib3V0CisgICAgICAgd3JpdGluZyBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMgYXMgbG9hZGFibGUga2VybmVsIG1vZHVsZXMuIFRoaXMKKyAgICAgICBtb250aCwgd2UgZnVydGhlciBpbnZlc3RpZ2F0ZSB0aGUgZmllbGQgb2YgaW50ZXJydXB0IGhhbmRsaW5nLgorICAgICAgIFRob3VnaCBpdCBpcyBjb25jZXB0dWFsbHkgc2ltcGxlLCBwcmFjdGljYWwgbGltaXRhdGlvbnMgYW5kCisgICAgICAgY29uc3RyYWludHMgbWFrZSB0aGlzIGFuIGBgaW50ZXJlc3RpbmcnJyBwYXJ0IG9mIGRldmljZSBkcml2ZXIKKyAgICAgICB3cml0aW5nLCBhbmQgc2V2ZXJhbCBkaWZmZXJlbnQgZmFjaWxpdGllcyBoYXZlIGJlZW4gcHJvdmlkZWQgZm9yCisgICAgICAgZGlmZmVyZW50IHNpdHVhdGlvbnMuIFdlIGFsc28gaW52ZXN0aWdhdGUgdGhlIGNvbXBsZXggdG9waWMgb2YKKyAgICAgICBETUEiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiRGV2aWNlIERyaXZlcnMgQ29uY2x1ZGVkIgorICAgICAgIEF1dGhvcjogR2Vvcmcgdi4gWmV6c2Nod2l0ei4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cyLmxpbnV4am91cm5hbC5jb20vbGotaXNzdWVzL2lzc3VlMjgvMTI4Ny5odG1sCisgICAgICAgS2V5d29yZHM6IGFkZHJlc3Mgc3BhY2VzLCBwYWdlcywgcGFnaW5hdGlvbiwgcGFnZSBtYW5hZ2VtZW50LAorICAgICAgIGRlbWFuZCBsb2FkaW5nLCBzd2FwcGluZywgbWVtb3J5IHByb3RlY3Rpb24sIG1lbW9yeSBtYXBwaW5nLCBtbWFwLAorICAgICAgIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKSwgdnJlbWFwLCBQQ0kuCisgICAgICAgRGVzY3JpcHRpb246IEZpbmFsbHksIHRoZSBhYm92ZSB0dXJuZWQgb3V0IGludG8gYSBmaXZlIGFydGljbGVzCisgICAgICAgc2VyaWVzLiBUaGlzIGxhdGVzdCBvbmUncyBpbnRyb2R1Y3Rpb24gcmVhZHM6ICJUaGlzIGlzIHRoZSBsYXN0IG9mCisgICAgICAgZml2ZSBhcnRpY2xlcyBhYm91dCBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMuIEluIHRoaXMgZmluYWwKKyAgICAgICBzZWN0aW9uLCBHZW9yZyBkZWFscyB3aXRoIG1lbW9yeSBtYXBwaW5nIGRldmljZXMsIGJlZ2lubmluZyB3aXRoCisgICAgICAgYW4gb3ZlcmFsbCBkZXNjcmlwdGlvbiBvZiB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VwdHMiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTmV0d29yayBCdWZmZXJzIEFuZCBNZW1vcnkgTWFuYWdlbWVudCIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dzIubGludXhqb3VybmFsLmNvbS9sai1pc3N1ZXMvaXNzdWUzMC8xMzEyLmh0bWwKKyAgICAgICBLZXl3b3Jkczogc2tfYnVmZnMsIG5ldHdvcmsgZGV2aWNlcywgcHJvdG9jb2wvbGluayBsYXllcgorICAgICAgIHZhcmlhYmxlcywgbmV0d29yayBkZXZpY2VzIGZsYWdzLCB0cmFuc21pdCwgcmVjZWl2ZSwKKyAgICAgICBjb25maWd1cmF0aW9uLCBtdWx0aWNhc3QuCisgICAgICAgRGVzY3JpcHRpb246IExpbnV4IEpvdXJuYWwgS2VybmVsIEtvcm5lci4gSGVyZSBpcyB0aGUgYWJzdHJhY3Q6CisgICAgICAgIldyaXRpbmcgYSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IGlzIGZ1bmRhbWVudGFsbHkKKyAgICAgICBzaW1wbGUtLS1tb3N0IG9mIHRoZSBjb21wbGV4aXR5IChvdGhlciB0aGFuIHRhbGtpbmcgdG8gdGhlCisgICAgICAgaGFyZHdhcmUpIGludm9sdmVzIG1hbmFnaW5nIG5ldHdvcmsgcGFja2V0cyBpbiBtZW1vcnkiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiV3JpdGluZyBMaW51eCBEZXZpY2UgRHJpdmVycyIKKyAgICAgICBBdXRob3I6IE1pY2hhZWwgSy4gSm9obnNvbi4KKyAgICAgICBVUkw6IGh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9qb2huc29ubS9kZXZpY2VzLmh0bWwKKyAgICAgICBLZXl3b3JkczogZmlsZXMsIFZGUywgZmlsZSBvcGVyYXRpb25zLCBrZXJuZWwgaW50ZXJmYWNlLCBjaGFyYWN0ZXIKKyAgICAgICB2cyBibG9jayBkZXZpY2VzLCBJL08gYWNjZXNzLCBoYXJkd2FyZSBpbnRlcnJ1cHRzLCBETUEsIGFjY2VzcyB0bworICAgICAgIHVzZXIgbWVtb3J5LCBtZW1vcnkgYWxsb2NhdGlvbiwgdGltZXJzLgorICAgICAgIERlc2NyaXB0aW9uOiBJbnRyb2R1Y3RvcnkgNTAtbWludXRlcyAoc2ljKSB0dXRvcmlhbCBvbiB3cml0aW5nCisgICAgICAgZGV2aWNlIGRyaXZlcnMuIDEyIHBhZ2VzIHdyaXR0ZW4gYnkgdGhlIHNhbWUgYXV0aG9yIG9mIHRoZSAiS2VybmVsCisgICAgICAgSGFja2VycycgR3VpZGUiIHdoaWNoIGdpdmUgYSB2ZXJ5IGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHRvcGljLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIFZlbnVzIGtlcm5lbCBpbnRlcmZhY2UiCisgICAgICAgQXV0aG9yOiBQZXRlciBKLiBCcmFhbS4KKyAgICAgICBVUkw6CisgICAgICAgaHR0cDovL3d3dy5jb2RhLmNzLmNtdS5lZHUvZG9jL2h0bWwva2VybmVsLXZlbnVzLXByb3RvY29sLmh0bWwKKyAgICAgICBLZXl3b3JkczogY29kYSwgZmlsZXN5c3RlbSwgdmVudXMsIGNhY2hlIG1hbmFnZXIuCisgICAgICAgRGVzY3JpcHRpb246ICJUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCisgICAgICAgVmVudXMgYW5kIGtlcm5lbCBsZXZlbCBmaWxlIHN5c3RlbSBjb2RlIG5lZWRlZCBmb3IgdGhlIG9wZXJhdGlvbgorICAgICAgIG9mIHRoZSBDb2RhIGZpbGVzeXN0ZW0uIFRoaXMgdmVyc2lvbiBkb2N1bWVudCBpcyBtZWFudCB0byBkZXNjcmliZQorICAgICAgIHRoZSBjdXJyZW50IGludGVyZmFjZSAodmVyc2lvbiAxLjApIGFzIHdlbGwgYXMgaW1wcm92ZW1lbnRzIHdlCisgICAgICAgZW52aXNhZ2UiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiUHJvZ3JhbW1pbmcgUENJLURldmljZXMgdW5kZXIgTGludXgiCisgICAgICAgQXV0aG9yOiBDbGF1cyBTY2hyb2V0ZXIuCisgICAgICAgVVJMOgorICAgICAgIGZ0cDovL2Z0cC5sbHAuZnUtYmVybGluLmRlL3B1Yi9saW51eC9MSU5VWC1MQUIvd2hpdGVwYXBlcnMvcGNpcC5wcworICAgICAgIC5negorICAgICAgIEtleXdvcmRzOiBQQ0ksIGRldmljZSwgYnVzbWFzdGVyaW5nLgorICAgICAgIERlc2NyaXB0aW9uOiA2IHBhZ2VzIHR1dG9yaWFsIG9uIFBDSSBwcm9ncmFtbWluZyB1bmRlciBMaW51eC4KKyAgICAgICBHaXZlcyB0aGUgYmFzaWMgY29uY2VwdHMgb24gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgUENJIHN1YnN5c3RlbSwKKyAgICAgICBhcyBsb25nIGFzIGJhc2ljIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIHRvIHJlYWQvd3JpdGUgdGhlIGRldmljZXMKKyAgICAgICBhbmQgcGVyZm9ybSBidXNtYXN0ZXJpbmcuCisgICAgICAgCisgICAgICogVGl0bGU6ICJXcml0aW5nIENoYXJhY3RlciBEZXZpY2UgRHJpdmVyIGZvciBMaW51eCIKKyAgICAgICBBdXRob3I6IFIuIEJhcnVjaCBhbmQgQy4gU2Nocm9ldGVyLgorICAgICAgIFVSTDoKKyAgICAgICBmdHA6Ly9mdHAubGxwLmZ1LWJlcmxpbi5kZS9wdWIvbGludXgvTElOVVgtTEFCL3doaXRlcGFwZXJzL2RyaXZlcnMKKyAgICAgICAucHMuZ3oKKyAgICAgICBLZXl3b3JkczogY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLCBJL08sIHNpZ25hbHMsIERNQSwgYWNjZXNzaW5nCisgICAgICAgcG9ydHMgaW4gdXNlciBzcGFjZSwga2VybmVsIGVudmlyb25tZW50LgorICAgICAgIERlc2NyaXB0aW9uOiA2OCBwYWdlcyBwYXBlciBvbiB3cml0aW5nIGNoYXJhY3RlciBkcml2ZXJzLiBBIGxpdHRsZQorICAgICAgIGJpdCBvbGQgKDEuOTkzLCAxLjk5NCkgYWx0aG91Z2ggc3RpbGwgdXNlZnVsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiRGVzaWduIGFuZCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2Vjb25kIEV4dGVuZGVkCisgICAgICAgRmlsZXN5c3RlbSIKKyAgICAgICBBdXRob3I6IFLpbXkgQ2FyZCwgVGhlb2RvcmUgVHMnbywgU3RlcGhlbiBUd2VlZGllLgorICAgICAgIFVSTDogaHR0cDovL3dlYi5taXQuZWR1L3R5dHNvL3d3dy9saW51eC9leHQyaW50cm8uaHRtbAorICAgICAgIEtleXdvcmRzOiBleHQyLCBsaW51eCBmcyBoaXN0b3J5LCBpbm9kZSwgZGlyZWN0b3J5LCBsaW5rLCBkZXZpY2VzLAorICAgICAgIFZGUywgcGh5c2ljYWwgc3RydWN0dXJlLCBwZXJmb3JtYW5jZSwgYmVuY2htYXJrcywgZXh0MmZzIGxpYnJhcnksCisgICAgICAgZXh0MmZzIHRvb2xzLCBlMmZzY2suCisgICAgICAgRGVzY3JpcHRpb246IFBhcGVyIHdyaXR0ZW4gYnkgdGhyZWUgb2YgdGhlIHRvcCBleHQyIGhhY2tlcnMuCisgICAgICAgQ292ZXJzIExpbnV4IGZpbGVzeXN0ZW1zIGhpc3RvcnksIGV4dDIgbW90aXZhdGlvbiwgZXh0MiBmZWF0dXJlcywKKyAgICAgICBkZXNpZ24sIHBoeXNpY2FsIHN0cnVjdHVyZSBvbiBkaXNrLCBwZXJmb3JtYW5jZSwgYmVuY2htYXJrcywKKyAgICAgICBlMmZzY2sncyBwYXNzZXMgZGVzY3JpcHRpb24uLi4gQSBtdXN0IHJlYWQhCisgICAgICAgTm90ZXM6IFRoaXMgcGFwZXIgd2FzIGZpcnN0IHB1Ymxpc2hlZCBpbiB0aGUgUHJvY2VlZGluZ3Mgb2YgdGhlCisgICAgICAgRmlyc3QgRHV0Y2ggSW50ZXJuYXRpb25hbCBTeW1wb3NpdW0gb24gTGludXgsIElTQk4gOTAtMzY3LTAzODUtOS4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkFuYWx5c2lzIG9mIHRoZSBFeHQyZnMgc3RydWN0dXJlIgorICAgICAgIEF1dGhvcjogTG91aXMtRG9taW5pcXVlIER1YmVhdS4KKyAgICAgICBVUkw6IGh0dHA6Ly9zdGVwLnBvbHltdGwuY2EvfmxkZC9leHQyZnMvZXh0MmZzX3RvYy5odG1sCisgICAgICAgS2V5d29yZHM6IGV4dDIsIGZpbGVzeXN0ZW0sIGV4dDJmcy4KKyAgICAgICBEZXNjcmlwdGlvbjogRGVzY3JpcHRpb24gb2YgZXh0MidzIGJsb2NrcywgZGlyZWN0b3JpZXMsIGlub2RlcywKKyAgICAgICBiaXRtYXBzLCBpbnZhcmlhbnRzLi4uCisgICAgICAgCisgICAgICogVGl0bGU6ICJKb3VybmFsaW5nIHRoZSBMaW51eCBleHQyZnMgRmlsZXN5c3RlbSIKKyAgICAgICBBdXRob3I6IFN0ZXBoZW4gQy4gVHdlZWRpZS4KKyAgICAgICBVUkw6CisgICAgICAgZnRwOi8vZnRwLnVrLmxpbnV4Lm9yZy9wdWIvbGludXgvc2N0L2ZzL2pmcy9qb3VybmFsLWRlc2lnbi5wcy5negorICAgICAgIEtleXdvcmRzOiBleHQzLCBqb3VybmFsaW5nLgorICAgICAgIERlc2NyaXB0aW9uOiBFeGNlbGxlbnQgOC1wYWdlcyBwYXBlciBleHBsYWluaW5nIHRoZSBqb3VybmFsaW5nCisgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIHRvIGV4dDIgYnkgdGhlIGF1dGhvciwgc2hvd2luZyBkaWZmZXJlbnQKKyAgICAgICBwcm9ibGVtcyBmYWNlZCBhbmQgdGhlIGFsdGVybmF0aXZlcyBjaG9zZW4uCisgICAgICAgCisgICAgICogVGl0bGU6ICJLZXJuZWwgQVBJIGNoYW5nZXMgZnJvbSAyLjAgdG8gMi4yIgorICAgICAgIEF1dGhvcjogUmljaGFyZCBHb29jaC4KKyAgICAgICBVUkw6CisgICAgICAgaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9wb3J0aW5nLXRvLTIuMi5odG1sCisgICAgICAgS2V5d29yZHM6IDIuMiwgY2hhbmdlcy4KKyAgICAgICBEZXNjcmlwdGlvbjogS2VybmVsIGZ1bmN0aW9ucy9zdHJ1Y3R1cmVzL3ZhcmlhYmxlcyB3aGljaCBjaGFuZ2VkCisgICAgICAgZnJvbSAyLjAueCB0byAyLjIueC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIktlcm5lbCBBUEkgY2hhbmdlcyBmcm9tIDIuMiB0byAyLjQiCisgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgorICAgICAgIFVSTDoKKyAgICAgICBodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9kb2NzL3BvcnRpbmctdG8tMi40Lmh0bWwKKyAgICAgICBLZXl3b3JkczogMi40LCBjaGFuZ2VzLgorICAgICAgIERlc2NyaXB0aW9uOiBLZXJuZWwgZnVuY3Rpb25zL3N0cnVjdHVyZXMvdmFyaWFibGVzIHdoaWNoIGNoYW5nZWQKKyAgICAgICBmcm9tIDIuMi54IHRvIDIuNC54LgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggS2VybmVsIE1vZHVsZSBQcm9ncmFtbWluZyBHdWlkZSIKKyAgICAgICBBdXRob3I6IE9yaSBQb21lcmFudHouCisgICAgICAgVVJMOiBodHRwOi8vd3d3LnRsZHAub3JnL0xEUC9sa21wZy9tcGcuaHRtbAorICAgICAgIEtleXdvcmRzOiBtb2R1bGVzLCBHUEwgYm9vaywgL3Byb2MsIGlvY3Rscywgc3lzdGVtIGNhbGxzLAorICAgICAgIGludGVycnVwdCBoYW5kbGVycyAuCisgICAgICAgRGVzY3JpcHRpb246IFZlcnkgbmljZSA5MiBwYWdlcyBHUEwgYm9vayBvbiB0aGUgdG9waWMgb2YgbW9kdWxlcworICAgICAgIHByb2dyYW1taW5nLiBMb3RzIG9mIGV4YW1wbGVzLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiRGV2aWNlIEZpbGUgU3lzdGVtIChkZXZmcykgT3ZlcnZpZXciCisgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9kZXZmcy50eHQKKyAgICAgICBLZXl3b3JkczogZmlsZXN5c3RlbSwgL2RldiwgZGV2ZnMsIGR5bmFtaWMgZGV2aWNlcywgbWFqb3IvbWlub3IKKyAgICAgICBhbGxvY2F0aW9uLCBkZXZpY2UgbWFuYWdlbWVudC4KKyAgICAgICBEZXNjcmlwdGlvbjogRG9jdW1lbnQgZGVzY3JpYmluZyBSaWNoYXJkIEdvb2NoJ3MgY29udHJvdmVyc2lhbAorICAgICAgIGRldmZzLCB3aGljaCBhbGxvd3MgZm9yIGR5bmFtaWMgZGV2aWNlcywgb25seSBzaG93cyBwcmVzZW50CisgICAgICAgZGV2aWNlcyBpbiAvZGV2LCBnZXRzIHJpZCBvZiBtYWpvci9taW5vciBudW1iZXJzIGFsbG9jYXRpb24KKyAgICAgICBwcm9ibGVtcywgYW5kIGFsbG93cyBmb3IgaHVuZHJlZHMgb2YgaWRlbnRpY2FsIGRldmljZXMgKHdoaWNoIHNvbWUKKyAgICAgICBVU0Igc3lzdGVtcyBtaWdodCBkZW1hbmQgc29vbikuCisgICAgICAgCisgICAgICogVGl0bGU6ICJJL08gRXZlbnQgSGFuZGxpbmcgVW5kZXIgTGludXgiCisgICAgICAgQXV0aG9yOiBSaWNoYXJkIEdvb2NoLgorICAgICAgIFVSTDogaHR0cDovL3d3dy5hdG5mLmNzaXJvLmF1L35yZ29vY2gvbGludXgvZG9jcy9pby1ldmVudHMuaHRtbAorICAgICAgIEtleXdvcmRzOiBJTywgSS9PLCBzZWxlY3QoMiksIHBvbGwoMiksIEZEcywgYWlvX3JlYWQoMiksIHJlYWRpbmVzcworICAgICAgIGV2ZW50IHF1ZXVlcy4KKyAgICAgICBEZXNjcmlwdGlvbjogRnJvbSB0aGUgSW50cm9kdWN0aW9uOiAiSS9PIEV2ZW50IGhhbmRsaW5nIGlzIGFib3V0CisgICAgICAgaG93IHlvdXIgT3BlcmF0aW5nIFN5c3RlbSBhbGxvd3MgeW91IHRvIG1hbmFnZSBhIGxhcmdlIG51bWJlciBvZgorICAgICAgIG9wZW4gZmlsZXMgKGZpbGUgZGVzY3JpcHRvcnMgaW4gVU5JWC9QT1NJWCwgb3IgRkRzKSBpbiB5b3VyCisgICAgICAgYXBwbGljYXRpb24uIFlvdSB3YW50IHRoZSBPUyB0byBub3RpZnkgeW91IHdoZW4gRkRzIGJlY29tZSBhY3RpdmUKKyAgICAgICAoaGF2ZSBkYXRhIHJlYWR5IHRvIGJlIHJlYWQgb3IgYXJlIHJlYWR5IGZvciB3cml0aW5nKS4gSWRlYWxseSB5b3UKKyAgICAgICB3YW50IGEgbWVjaGFuaXNtIHRoYXQgaXMgc2NhbGFibGUuIFRoaXMgbWVhbnMgYSBsYXJnZSBudW1iZXIgb2YKKyAgICAgICBpbmFjdGl2ZSBGRHMgY29zdCB2ZXJ5IGxpdHRsZSBpbiBtZW1vcnkgYW5kIENQVSB0aW1lIHRvIG1hbmFnZSIuCisgICAgICAgCisgICAgICogVGl0bGU6ICJUaGUgS2VybmVsIEhhY2tpbmcgSE9XVE8iCisgICAgICAgQXV0aG9yOiBWYXJpb3VzIFRhbGVudGVkIFBlb3BsZSwgYW5kIFJ1c3R5LgorICAgICAgIFVSTDoKKyAgICAgICBodHRwOi8vd3d3Lmxpc29sZWcubmV0L2RvYy9LZXJuZWwtSGFja2luZy1IT1dUTy9rZXJuZWwtaGFja2luZy1IT1cKKyAgICAgICBUTy5odG1sCisgICAgICAgS2V5d29yZHM6IEhPV1RPLCBrZXJuZWwgY29udGV4dHMsIGRlYWRsb2NrLCBsb2NraW5nLCBtb2R1bGVzLAorICAgICAgIHN5bWJvbHMsIHJldHVybiBjb252ZW50aW9ucy4KKyAgICAgICBEZXNjcmlwdGlvbjogRnJvbSB0aGUgSW50cm9kdWN0aW9uOiAiUGxlYXNlIHVuZGVyc3RhbmQgdGhhdCBJCisgICAgICAgbmV2ZXIgd2FudGVkIHRvIHdyaXRlIHRoaXMgZG9jdW1lbnQsIGJlaW5nIGdyb3NzbHkgdW5kZXJxdWFsaWZpZWQsCisgICAgICAgYnV0IEkgYWx3YXlzIHdhbnRlZCB0byByZWFkIGl0LCBhbmQgdGhpcyB3YXMgdGhlIG9ubHkgd2F5LiBJCisgICAgICAgc2ltcGx5IGV4cGxhaW4gc29tZSBiZXN0IHByYWN0aWNlcywgYW5kIGdpdmUgcmVhZGluZyBlbnRyeS1wb2ludHMKKyAgICAgICBpbnRvIHRoZSBrZXJuZWwgc291cmNlcy4gSSBhdm9pZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzOiB0aGF0J3MKKyAgICAgICB3aGF0IHRoZSBjb2RlIGlzIGZvciwgYW5kIEkgaWdub3JlIHdob2xlIHRyYWN0cyBvZiB1c2VmdWwKKyAgICAgICByb3V0aW5lcy4gVGhpcyBkb2N1bWVudCBhc3N1bWVzIGZhbWlsaWFyaXR5IHdpdGggQywgYW5kIGFuCisgICAgICAgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBrZXJuZWwgaXMsIGFuZCBob3cgaXQgaXMgdXNlZC4gSXQgd2FzCisgICAgICAgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgMi4zIGtlcm5lbHMsIGJ1dCBuZWFybHkgYWxsIG9mIGl0CisgICAgICAgYXBwbGllcyB0byAyLjIgdG9vOyAyLjAgaXMgc2xpZ2h0bHkgZGlmZmVyZW50Ii4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkFMU0EgMC41LjAgRGV2ZWxvcGVyIGRvY3VtZW50YXRpb24iCisgICAgICAgQXV0aG9yOiBTdGVwaGFuICdKdW1weScgQmFydGVscyAuCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lm1hdGguVFUtQmVybGluLmRlL35zYmFydGVscy9hbHNhLworICAgICAgIEtleXdvcmRzOiBBTFNBLCBzb3VuZCwgc291bmRjYXJkLCBkcml2ZXIsIGxvd2xldmVsLCBoYXJkd2FyZS4KKyAgICAgICBEZXNjcmlwdGlvbjogQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlIGZvciBkZXZlbG9wZXJzLAorICAgICAgIGJvdGggYXQga2VybmVsIGFuZCB1c2VyLWxldmVsIHNpZGVzLiBXb3JrIGluIHByb2dyZXNzLiBBTFNBIGlzCisgICAgICAgc3VwcG9zZWQgdG8gYmUgTGludXgncyBuZXh0IGdlbmVyYXRpb24gc291bmQgYXJjaGl0ZWN0dXJlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiUHJvZ3JhbW1pbmcgR3VpZGUgZm9yIExpbnV4IFVTQiBEZXZpY2UgRHJpdmVycyIKKyAgICAgICBBdXRob3I6IERldGxlZiBGbGllZ2wuCisgICAgICAgVVJMOiBodHRwOi8vdXNiLmluLnR1bS5kZS91c2Jkb2MvCisgICAgICAgS2V5d29yZHM6IFVTQiwgdW5pdmVyc2FsIHNlcmlhbCBidXMuCisgICAgICAgRGVzY3JpcHRpb246IEEgbXVzdC1yZWFkLiBGcm9tIHRoZSBQcmVmYWNlOiAiVGhpcyBkb2N1bWVudCBzaG91bGQKKyAgICAgICBnaXZlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBVU0IKKyAgICAgICBzdWJzeXN0ZW0gYW5kIGl0cyBBUEkgZm9yIFVTQiBkZXZpY2UgZHJpdmVycy4gVGhlIGZpcnN0IHNlY3Rpb24KKyAgICAgICB3aWxsIGRlYWwgd2l0aCB0aGUgYmFzaWNzIG9mIFVTQiBkZXZpY2VzLiBZb3Ugd2lsbCBsZWFybiBhYm91dAorICAgICAgIGRpZmZlcmVudCB0eXBlcyBvZiBkZXZpY2VzIGFuZCB0aGVpciBwcm9wZXJ0aWVzLiBHb2luZyBpbnRvIGRldGFpbAorICAgICAgIHlvdSB3aWxsIHNlZSBob3cgVVNCIGRldmljZXMgY29tbXVuaWNhdGUgb24gdGhlIGJ1cy4gVGhlIHNlY29uZAorICAgICAgIHNlY3Rpb24gZ2l2ZXMgYW4gb3ZlcnZpZXcgb2YgdGhlIExpbnV4IFVTQiBzdWJzeXN0ZW0gWzJdIGFuZCB0aGUKKyAgICAgICBkZXZpY2UgZHJpdmVyIGZyYW1ld29yay4gVGhlbiB0aGUgQVBJIGFuZCBpdHMgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwKKyAgICAgICBiZSBleHBsYWluZWQgc3RlcCBieSBzdGVwLiBUaGUgbGFzdCBzZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnQKKyAgICAgICBjb250YWlucyBhIHJlZmVyZW5jZSBvZiBhbGwgQVBJIGNhbGxzIGFuZCB0aGVpciByZXR1cm4gY29kZXMiLgorICAgICAgIE5vdGVzOiBCZXdhcmU6IHRoZSBtYWluIHBhZ2Ugc3RhdGVzOiAiVGhpcyBkb2N1bWVudCBtYXkgbm90IGJlCisgICAgICAgcHVibGlzaGVkLCBwcmludGVkIG9yIHVzZWQgaW4gZXhjZXJwdHMgd2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uCisgICAgICAgb2YgdGhlIGF1dGhvciIuIEZvcnR1bmF0ZWx5LCBpdCBtYXkgc3RpbGwgYmUgcmVhZC4uLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVG91ciBPZiB0aGUgTGludXggS2VybmVsIFNvdXJjZSIKKyAgICAgICBBdXRob3I6IFZpam8gQ2hlcmlhbi4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cuZ2VvY2l0aWVzLmNvbS92aWpvYy90b2xrcy90b2xrcy5odG1sCisgICAgICAgS2V5d29yZHM6IC4KKyAgICAgICBEZXNjcmlwdGlvbjogQSBjbGFzc2ljIG9mIHRoaXMgcGFnZSEgV2FzIGxvc3QgZm9yIGEgd2hpbGUgYW5kIGlzCisgICAgICAgYmFjayBhZ2Fpbi4gVGhhbmtzIFZpam8hIFRPTEtTOiB0aGUgbmFtZSBzYXlzIGl0IGFsbC4gQSB0b3VyIG9mCisgICAgICAgdGhlIHNvdXJjZXMsIGRlc2NyaWJpbmcgZGlyZWN0b3JpZXMsIGZpbGVzLCB2YXJpYWJsZXMsIGRhdGEKKyAgICAgICBzdHJ1Y3R1cmVzLi4uIEl0IGNvdmVycyBnZW5lcmFsIHN0dWZmLCBkZXZpY2UgZHJpdmVycywKKyAgICAgICBmaWxlc3lzdGVtcywgSVBDIGFuZCBOZXR3b3JraW5nIENvZGUuCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCBLZXJuZWwgTWFpbGluZyBMaXN0IEdsb3NzYXJ5IgorICAgICAgIEF1dGhvcjogSm9obiBMZXZvbi4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubW92ZW1lbnQudWtsaW51eC5uZXQvZ2xvc3NhcnkuaHRtbAorICAgICAgIEtleXdvcmRzOiBnbG9zc2FyeSwgdGVybXMsIGxpbnV4LWtlcm5lbC4KKyAgICAgICBEZXNjcmlwdGlvbjogRnJvbSB0aGUgaW50cm9kdWN0aW9uOiAiVGhpcyBnbG9zc2FyeSBpcyBpbnRlbmRlZCBhcworICAgICAgIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYWNyb255bXMgYW5kIHRlcm1zIHlvdSBtYXkgaGVhcgorICAgICAgIGR1cmluZyBkaXNjdXNzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwiLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggS2VybmVsIExvY2tpbmcgSE9XVE8iCisgICAgICAgQXV0aG9yOiBWYXJpb3VzIFRhbGVudGVkIFBlb3BsZSwgYW5kIFJ1c3R5LgorICAgICAgIFVSTDoKKyAgICAgICBodHRwOi8vbmV0ZmlsdGVyLmtlcm5lbG5vdGVzLm9yZy91bnJlbGlhYmxlLWd1aWRlcy9rZXJuZWwtbG9ja2luZy0KKyAgICAgICBIT1dUTy5odG1sCisgICAgICAgS2V5d29yZHM6IGxvY2tzLCBsb2NraW5nLCBzcGlubG9jaywgc2VtYXBob3JlLCBhdG9taWMsIHJhY2UKKyAgICAgICBjb25kaXRpb24sIGJvdHRvbSBoYWx2ZXMsIHRhc2tsZXRzLCBzb2Z0aXJxcy4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsOiBkb2N1bWVudCBkZXNjcmliaW5nIHRoZQorICAgICAgIGxvY2tpbmcgc3lzdGVtIGluIHRoZSBMaW51eCBLZXJuZWwgZWl0aGVyIGluIHVuaXByb2Nlc3NvciBvciBTTVAKKyAgICAgICBzeXN0ZW1zLgorICAgICAgIE5vdGVzOiAiSXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIGxhdGVyICg+Mi4zLjQ3KSAyLjMKKyAgICAgICBrZXJuZWxzLCBidXQgbW9zdCBvZiBpdCBhcHBsaWVzIHRvIDIuMiB0b287IDIuMCBpcyBzbGlnaHRseQorICAgICAgIGRpZmZlcmVudCIuIEZyZWVseSByZWRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorICAgICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgICAgICAgCisgICAgICogVGl0bGU6ICJQb3J0aW5nIExpbnV4IDIuMCBEcml2ZXJzIFRvIExpbnV4IDIuMjogQ2hhbmdlcyBhbmQgTmV3CisgICAgICAgRmVhdHVyZXMgIgorICAgICAgIEF1dGhvcjogQWxhbiBDb3guCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wNS9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogcG9ydHMsIHBvcnRpbmcuCisgICAgICAgRGVzY3JpcHRpb246IEFydGljbGUgZnJvbSBMaW51eCBNYWdhemluZSBvbiBwb3J0aW5nIGZyb20gMi4wIHRvCisgICAgICAgMi4yIGtlcm5lbHMuCisgICAgICAgCisgICAgICogVGl0bGU6ICJQb3J0aW5nIERldmljZSBEcml2ZXJzIFRvIExpbnV4IDIuMjogcGFydCBJSSIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDYvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IHBvcnRzLCBwb3J0aW5nLgorICAgICAgIERlc2NyaXB0aW9uOiBTZWNvbmQgcGFydCBvbiBwb3J0aW5nIGZyb20gMi4wIHRvIDIuMiBrZXJuZWxzLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiSG93IFRvIE1ha2UgU3VyZSBZb3VyIERyaXZlciBXaWxsIFdvcmsgT24gVGhlIFBvd2VyCisgICAgICAgTWFjaW50b3NoIgorICAgICAgIEF1dGhvcjogUGF1bCBNYWNrZXJyYXMuCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0wNy9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogTWFjLCBQb3dlciBNYWNpbnRvc2gsIHBvcnRpbmcsIGRyaXZlcnMsIGNvbXBhdGliaWxpdHkuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkFuIEludHJvZHVjdGlvbiB0byBTQ1NJIERyaXZlcnMiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTA4L2dlYXJfMDEuaHRtbAorICAgICAgIEtleXdvcmRzOiBTQ1NJLCBkZXZpY2UsIGRyaXZlci4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiQWR2YW5jZWQgU0NTSSBEcml2ZXJzIEFuZCBPdGhlciBUYWxlcyIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMDkvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IFNDU0ksIGRldmljZSwgZHJpdmVyLCBhZHZhbmNlZC4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiV3JpdGluZyBMaW51eCBNb3VzZSBEcml2ZXJzIgorICAgICAgIEF1dGhvcjogQWxhbiBDb3guCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMTk5OS0xMC9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogbW91c2UsIGRyaXZlciwgZ3BtLgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJNb3JlIG9uIE1vdXNlIERyaXZlcnMiCisgICAgICAgQXV0aG9yOiBBbGFuIENveC4KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cubGludXgtbWFnLmNvbS8xOTk5LTExL2dlYXJfMDEuaHRtbAorICAgICAgIEtleXdvcmRzOiBtb3VzZSwgZHJpdmVyLCBncG0sIHJhY2VzLCBhc3luY2hyb25vdXMgSS9PLgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc3RpbGwgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJXcml0aW5nIFZpZGVvNGxpbnV4IFJhZGlvIERyaXZlciIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzE5OTktMTIvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IHZpZGVvNGxpbnV4LCBkcml2ZXIsIHJhZGlvLCByYWRpbyBkZXZpY2VzLgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJWaWRlbzRsaW51eCBEcml2ZXJzLCBQYXJ0IDE6IFZpZGVvLUNhcHR1cmUgRGV2aWNlIgorICAgICAgIEF1dGhvcjogQWxhbiBDb3guCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMjAwMC0wMS9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogdmlkZW80bGludXgsIGRyaXZlciwgdmlkZW8gY2FwdHVyZSwgY2FwdHVyZSBkZXZpY2VzLAorICAgICAgIGNhbWVyYSBkcml2ZXIuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlZpZGVvNGxpbnV4IERyaXZlcnMsIFBhcnQgMjogVmlkZW8tY2FwdHVyZSBEZXZpY2VzIgorICAgICAgIEF1dGhvcjogQWxhbiBDb3guCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmxpbnV4LW1hZy5jb20vMjAwMC0wMi9nZWFyXzAxLmh0bWwKKyAgICAgICBLZXl3b3JkczogdmlkZW80bGludXgsIGRyaXZlciwgdmlkZW8gY2FwdHVyZSwgY2FwdHVyZSBkZXZpY2VzLAorICAgICAgIGNhbWVyYSBkcml2ZXIsIGNvbnRyb2wsIHF1ZXJ5IGNhcGFiaWxpdGllcywgY2FwYWJpbGl0eSwgZmFjaWxpdHkuCisgICAgICAgRGVzY3JpcHRpb246IFRoZSB0aXRsZSBzYXlzIGl0IGFsbC4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlBDSSBNYW5hZ2VtZW50IGluIExpbnV4IDIuMiIKKyAgICAgICBBdXRob3I6IEFsYW4gQ294LgorICAgICAgIFVSTDogaHR0cDovL3d3dy5saW51eC1tYWcuY29tLzIwMDAtMDMvZ2Vhcl8wMS5odG1sCisgICAgICAgS2V5d29yZHM6IFBDSSwgYnVzLCBidXMtbWFzdGVyaW5nLgorICAgICAgIERlc2NyaXB0aW9uOiBUaGUgdGl0bGUgc2F5cyBpdCBhbGwuCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCAyLjQgS2VybmVsIEludGVybmFscyIKKyAgICAgICBBdXRob3I6IFRpZ3JhbiBBaXZhemlhbiBhbmQgQ2hyaXN0b3BoIEhlbGx3aWcuCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lm1vc2VzLnVrbGludXgubmV0L3BhdGNoZXMvbGtpLmh0bWwKKyAgICAgICBLZXl3b3JkczogTGludXgsIGtlcm5lbCwgYm9vdGluZywgU01CIGJvb3QsIFZGUywgcGFnZSBjYWNoZS4KKyAgICAgICBEZXNjcmlwdGlvbjogQSBsaXR0bGUgYm9vayB1c2VkIGZvciBhIHNob3J0IHRyYWluaW5nIGNvdXJzZS4KKyAgICAgICBDb3ZlcnMgYnVpbGRpbmcgdGhlIGtlcm5lbCBpbWFnZSwgYm9vdGluZyAoaW5jbHVkaW5nIFNNUCBib290dXApLAorICAgICAgIHByb2Nlc3MgbWFuYWdlbWVudCwgVkZTIGFuZCBtb3JlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggSVAgTmV0d29ya2luZy4gQSBHdWlkZSB0byB0aGUgSW1wbGVtZW50YXRpb24gYW5kCisgICAgICAgTW9kaWZpY2F0aW9uIG9mIHRoZSBMaW51eCBQcm90b2NvbCBTdGFjay4iCisgICAgICAgQXV0aG9yOiBHbGVubiBIZXJyaW4uCisgICAgICAgVVJMOgorICAgICAgIGh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9kb2N1bWVudHMvaXBuZXR3b3JraW5nL2xpbnV4aXBuZXR3b3JraW5nLgorICAgICAgIGh0bWwKKyAgICAgICBLZXl3b3JkczogbmV0d29yaywgbmV0d29ya2luZywgcHJvdG9jb2wsIElQLCBVRFAsIFRDUCwgY29ubmVjdGlvbiwKKyAgICAgICBzb2NrZXQsIHJlY2VpdmluZywgdHJhbnNtaXR0aW5nLCBmb3J3YXJkaW5nLCByb3V0aW5nLCBwYWNrZXRzLAorICAgICAgIG1vZHVsZXMsIC9wcm9jLCBza19idWZmLCBGSUIsIHRhZ3MuCisgICAgICAgRGVzY3JpcHRpb246IEV4Y2VsbGVudCBwYXBlciBkZXZvdGVkIHRvIHRoZSBMaW51eCBJUCBOZXR3b3JraW5nLAorICAgICAgIGV4cGxhaW5pbmcgYW55dGhpbmcgZnJvbSB0aGUga2VybmVsJ3MgdG8gdGhlIHVzZXIgc3BhY2UKKyAgICAgICBjb25maWd1cmF0aW9uIHRvb2xzJyBjb2RlLiBWZXJ5IGdvb2QgdG8gZ2V0IGEgZ2VuZXJhbCBvdmVydmlldyBvZgorICAgICAgIHRoZSBrZXJuZWwgbmV0d29ya2luZyBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZCBhbGwgc3RlcHMKKyAgICAgICBwYWNrZXRzIGZvbGxvdyBmcm9tIHRoZSB0aW1lIHRoZXkgYXJlIHJlY2VpdmVkIGF0IHRoZSBuZXR3b3JrCisgICAgICAgZGV2aWNlIHRpbGwgdGhleSBhcmUgZGVsaXZlcmVkIHRvIGFwcGxpY2F0aW9ucy4gVGhlIHN0dWRpZWQga2VybmVsCisgICAgICAgY29kZSBpcyBmcm9tIDIuMi4xNCB2ZXJzaW9uLiBQcm92aWRlcyBjb2RlIGZvciBhIHdvcmtpbmcgcGFja2V0CisgICAgICAgZHJvcHBlciBleGFtcGxlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiR2V0IHRob3NlIGJvYXJkcyB0YWxraW5nIHVuZGVyIExpbnV4LiIKKyAgICAgICBBdXRob3I6IEFsZXggSXZjaGVua28uCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmVkbm1hZy5jb20vZWRubWFnL3JlZy8yMDAwLzA2MjIyMDAwLzEzZGYyLmh0bQorICAgICAgIEtleXdvcmRzOiBkYXRhLWFjcXVpc2l0aW9uIGJvYXJkcywgZHJpdmVycywgbW9kdWxlcywgaW50ZXJydXB0cywKKyAgICAgICBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgICAgICBEZXNjcmlwdGlvbjogQXJ0aWNsZSB3cml0dGVuIGZvciBwZW9wbGUgd2lzaGluZyB0byBtYWtlIHRoZWlyIGRhdGEKKyAgICAgICBhY3F1aXNpdGlvbiBib2FyZHMgd29yayBvbiB0aGVpciBHTlUvTGludXggbWFjaGluZXMuIEdpdmVzIGEgYmFzaWMKKyAgICAgICBvdmVydmlldyBvbiB3cml0aW5nIGRyaXZlcnMsIGZyb20gdGhlIG5hbWluZyBvZiBmdW5jdGlvbnMgdG8KKyAgICAgICBpbnRlcnJ1cHQgaGFuZGxpbmcuCisgICAgICAgTm90ZXM6IFR3by1wYXJ0cyBhcnRpY2xlLiBQYXJ0IElJIGlzIGF0CisgICAgICAgaHR0cDovL3d3dy5lZG5tYWcuY29tL2Vkbm1hZy9yZWcvMjAwMC8wNzA2MjAwMC8xNGRmLmh0bQorICAgICAgIAorICAgICAqIFRpdGxlOiAiTGludXggUENNQ0lBIFByb2dyYW1tZXIncyBHdWlkZSIKKyAgICAgICBBdXRob3I6IERhdmlkIEhpbmRzLgorICAgICAgIFVSTDogaHR0cDovL3BjbWNpYS1jcy5zb3VyY2Vmb3JnZS5uZXQvZnRwL2RvYy9QQ01DSUEtUFJPRy5odG1sCisgICAgICAgS2V5d29yZHM6IFBDTUNJQS4KKyAgICAgICBEZXNjcmlwdGlvbjogIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byB3cml0ZSBrZXJuZWwgZGV2aWNlCisgICAgICAgZHJpdmVycyBmb3IgdGhlIExpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzIGludGVyZmFjZS4gSXQgYWxzbworICAgICAgIGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgdXNlci1tb2RlIHV0aWxpdGllcyBmb3IgY29tbXVuaWNhdGluZyB3aXRoCisgICAgICAgQ2FyZCBTZXJ2aWNlcy4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIlRoZSBMaW51eCBLZXJuZWwgTkZTRCBJbXBsZW1lbnRhdGlvbiIKKyAgICAgICBBdXRob3I6IE5laWwgQnJvd24uCisgICAgICAgVVJMOgorICAgICAgIGh0dHA6Ly93d3cuY3NlLnVuc3cuZWR1LmF1L35uZWlsYi9vc3MvbGludXgtY29tbWVudGFyeS9uZnNkLmh0bWwKKyAgICAgICBLZXl3b3Jkczoga25mc2QsIG5mc2QsIE5GUywgUlBDLCBsb2NrZCwgbW91bnRkLCBzdGF0ZC4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLgorICAgICAgIE5vdGVzOiBDb3ZlcnMga25mc2QncyB2ZXJzaW9uIDEuNC43IChwYXRjaCBhZ2FpbnN0IDIuMi43IGtlcm5lbCkuCisgICAgICAgCisgICAgICogVGl0bGU6ICJBIExpbnV4IHZtIFJFQURNRSIKKyAgICAgICBBdXRob3I6IEthbm9qIFNhcmNhci4KKyAgICAgICBVUkw6IGh0dHA6Ly9yZWFsaXR5LnNnaS5jb20va2Fub2pfZW5nci92bTIyOS5odG1sCisgICAgICAgS2V5d29yZHM6IHZpcnR1YWwgbWVtb3J5LCBtbSwgcGdkLCB2bWEsIHBhZ2UsIHBhZ2UgZmxhZ3MsIHBhZ2UKKyAgICAgICBjYWNoZSwgc3dhcCBjYWNoZSwga3N3YXBkLgorICAgICAgIERlc2NyaXB0aW9uOiBUZWxlZ3JhcGhpYywgc2hvcnQgZGVzY3JpcHRpb25zIGFuZCBkZWZpbml0aW9ucworICAgICAgIHJlbGF0aW5nIHRoZSBMaW51eCB2aXJ0dWFsIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIihuZWFybHkpIENvbXBsZXRlIExpbnV4IExvYWRhYmxlIEtlcm5lbCBNb2R1bGVzLiBUaGUKKyAgICAgICBkZWZpbml0aXZlIGd1aWRlIGZvciBoYWNrZXJzLCB2aXJ1cyBjb2RlcnMgYW5kIHN5c3RlbQorICAgICAgIGFkbWluaXN0cmF0b3JzLiIKKyAgICAgICBBdXRob3I6IHByYWdtYXRpYy9USEMuCisgICAgICAgVVJMOiBodHRwOi8vcGFja2V0c3Rvcm0uc2VjdXJpZnkuY29tL2dyb3Vwcy90aGMvTEtNX0hBQ0tJTkcuaHRtbAorICAgICAgIEtleXdvcmRzOiBzeXNjYWxscywgaW50ZXJjZXB0LCBoaWRlLCBhYnVzZSwgc3ltYm9sIHRhYmxlLgorICAgICAgIERlc2NyaXB0aW9uOiBJbnRlcmVzdGluZyBwYXBlciBvbiBob3cgdG8gYWJ1c2UgdGhlIExpbnV4IGtlcm5lbCBpbgorICAgICAgIG9yZGVyIHRvIGludGVyY2VwdCBhbmQgbW9kaWZ5IHN5c2NhbGxzLCBtYWtlCisgICAgICAgZmlsZXMvZGlyZWN0b3JpZXMvcHJvY2Vzc2VzIGludmlzaWJsZSwgYmVjb21lIHJvb3QsIGhpamFjayB0dHlzLAorICAgICAgIHdyaXRlIGtlcm5lbCBtb2R1bGVzIGJhc2VkIHZpcnVzLi4uIGFuZCBzb2x1dGlvbnMgZm9yIGFkbWlucyB0bworICAgICAgIGF2b2lkIGFsbCB0aG9zZSBhYnVzZXMuCisgICAgICAgTm90ZXM6IEZvciAyLjAueCBrZXJuZWxzLiBHaXZlcyBndWlkYW5jZXMgdG8gcG9ydCBpdCB0byAyLjIueAorICAgICAgIGtlcm5lbHMuIEFsc28gYXZhaWxhYmxlIGluIHR4dCBmb3JtYXQgYXQKKyAgICAgICBodHRwOi8vd3d3LmJsYWNrbmVtZXNpcy5vcmcvaGFja2luZy90eHQvY2xsa20udHh0CisgICAgICAgCisgICAgIEJPT0tTOiAoTm90IG9uLWxpbmUpCisgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IERldmljZSBEcml2ZXJzIgorICAgICAgIEF1dGhvcjogQWxlc3NhbmRybyBSdWJpbmkuCisgICAgICAgUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMuCisgICAgICAgRGF0ZTogMTk5OC4KKyAgICAgICBQYWdlczogNDM5LgorICAgICAgIElTQk46IDEtNTY1OTItMjkyLTEKKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IERldmljZSBEcml2ZXJzLCAybmQgRWRpdGlvbiIKKyAgICAgICBBdXRob3I6IEFsZXNzYW5kcm8gUnViaW5pIGFuZCBKb25hdGhhbiBDb3JiZXQuCisgICAgICAgUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMuCisgICAgICAgRGF0ZTogMjAwMS4KKyAgICAgICBQYWdlczogNTg2LgorICAgICAgIElTQk46IDAtNTk2MDAtMDA4LTEKKyAgICAgICBOb3RlczogRnVydGhlciBpbmZvcm1hdGlvbiBpbgorICAgICAgIGh0dHA6Ly93d3cub3JlaWxseS5jb20vY2F0YWxvZy9saW51eGRyaXZlMi8KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IEtlcm5lbCBJbnRlcm5hbHMiCisgICAgICAgQXV0aG9yOiBNaWNoYWVsIEJlY2suCisgICAgICAgUHVibGlzaGVyOiBBZGRpc29uLVdlc2xleS4KKyAgICAgICBEYXRlOiAxOTk3LgorICAgICAgIElTQk46IDAtMjAxLTMzMTQzLTggKHNlY29uZCBlZGl0aW9uKQorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIERlc2lnbiBvZiB0aGUgVU5JWCBPcGVyYXRpbmcgU3lzdGVtIgorICAgICAgIEF1dGhvcjogTWF1cmljZSBKLiBCYWNoLgorICAgICAgIFB1Ymxpc2hlcjogUHJlbnRpY2UgSGFsbC4KKyAgICAgICBEYXRlOiAxOTg2LgorICAgICAgIFBhZ2VzOiA0NzEuCisgICAgICAgSVNCTjogMC0xMy0yMDE3NTctMQorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24gb2YgdGhlIDQuMyBCU0QgVU5JWAorICAgICAgIE9wZXJhdGluZyBTeXN0ZW0iCisgICAgICAgQXV0aG9yOiBTYW11ZWwgSi4gTGVmZmxlciwgTWFyc2hhbGwgS2lyayBNY0t1c2ljaywgTWljaGFlbCBKLgorICAgICAgIEthcmVscywgSm9obiBTLiBRdWFydGVybWFuLgorICAgICAgIFB1Ymxpc2hlcjogQWRkaXNvbi1XZXNsZXkuCisgICAgICAgRGF0ZTogMTk4OSAocmVwcmludGVkIHdpdGggY29ycmVjdGlvbnMgb24gT2N0b2JlciwgMTk5MCkuCisgICAgICAgSVNCTjogMC0yMDEtMDYxOTYtMQorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIERlc2lnbiBhbmQgSW1wbGVtZW50YXRpb24gb2YgdGhlIDQuNCBCU0QgVU5JWAorICAgICAgIE9wZXJhdGluZyBTeXN0ZW0iCisgICAgICAgQXV0aG9yOiBNYXJzaGFsbCBLaXJrIE1jS3VzaWNrLCBLZWl0aCBCb3N0aWMsIE1pY2hhZWwgSi4gS2FyZWxzLAorICAgICAgIEpvaG4gUy4gUXVhcnRlcm1hbi4KKyAgICAgICBQdWJsaXNoZXI6IEFkZGlzb24tV2VzbGV5LgorICAgICAgIERhdGU6IDE5OTYuCisgICAgICAgSVNCTjogMC0yMDEtNTQ5NzktNAorICAgICAgIAorICAgICAqIFRpdGxlOiAiUHJvZ3JhbW1hdGlvbiBMaW51eCAyLjAgQVBJIHN5c3RlbWUgZXQgZm9uY3Rpb25uZW1lbnQgZHUKKyAgICAgICBub3lhdSIKKyAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgorICAgICAgIFB1Ymxpc2hlcjogRXlyb2xsZXMuCisgICAgICAgRGF0ZTogMTk5Ny4KKyAgICAgICBQYWdlczogNTIwLgorICAgICAgIElTQk46IDItMjEyLTA4OTMyLTUKKyAgICAgICBOb3RlczogRnJlbmNoLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVGhlIExpbnV4IEtlcm5lbCBCb29rIgorICAgICAgIEF1dGhvcjogUmVteSBDYXJkLCBFcmljIER1bWFzLCBGcmFuY2sgTWV2ZWwuCisgICAgICAgUHVibGlzaGVyOiBKb2huIFdpbGV5ICYgU29ucy4KKyAgICAgICBEYXRlOiAxOTk4LgorICAgICAgIElTQk46IDAtNDcxLTk4MTQxLTkKKyAgICAgICBOb3RlczogRW5nbGlzaCB0cmFuc2xhdGlvbi4KKyAgICAgICAKKyAgICAgKiBUaXRsZTogIkxpbnV4IDIuMCIKKyAgICAgICBBdXRob3I6IFJlbXkgQ2FyZCwgRXJpYyBEdW1hcywgRnJhbmNrIE1ldmVsLgorICAgICAgIFB1Ymxpc2hlcjogR2VzdGnzbiAyMDAwLgorICAgICAgIERhdGU6IDE5OTcuCisgICAgICAgUGFnZXM6IDUwMS4KKyAgICAgICBJU0JOOiA4LTQ4MC04ODIwOC01CisgICAgICAgTm90ZXM6IFNwYW5pc2ggdHJhbnNsYXRpb24uCisgICAgICAgCisgICAgICogVGl0bGU6ICJVbml4IGludGVybmFscyAtLSB0aGUgbmV3IGZyb250aWVycyIKKyAgICAgICBBdXRob3I6IFVyZXNoIFZhaGFsaWEuCisgICAgICAgUHVibGlzaGVyOiBQcmVudGljZSBIYWxsLgorICAgICAgIERhdGU6IDE5OTYuCisgICAgICAgUGFnZXM6IDYwMC4KKyAgICAgICBJU0JOOiAwLTEzLTEwMTkwOC0yCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCBDb3JlIEtlcm5lbCBDb21tZW50YXJ5LiBHdWlkZSB0byBJbnNpZGVyJ3MgS25vd2xlZGdlCisgICAgICAgb24gdGhlIENvcmUgS2VybmVsIG9mIHRoZSBMaW51eCBDb2RlIgorICAgICAgIEF1dGhvcjogU2NvdHQgTWF4d2VsbC4KKyAgICAgICBQdWJsaXNoZXI6IENvcmlvbGlzLgorICAgICAgIERhdGU6IDE5OTkuCisgICAgICAgUGFnZXM6IDU5Mi4KKyAgICAgICBJU0JOOiAxLTU3NjEwLTQ2OS05CisgICAgICAgTm90ZXM6IENELVJPTSBpbmNsdWRlZC4gTGluZSBieSBsaW5lIGNvbW1lbnRhcnkgb2YgdGhlIGtlcm5lbAorICAgICAgIGNvZGUuCisgICAgICAgCisgICAgICogVGl0bGU6ICJMaW51eCBJUCBTdGFja3MgQ29tbWVudGFyeSIKKyAgICAgICBBdXRob3I6IFN0ZXBoZW4gU2F0Y2hlbGwgYW5kIEhCSiBDbGlmZm9yZC4KKyAgICAgICBQdWJsaXNoZXI6IENvcmlvbGlzLgorICAgICAgIERhdGU6IDIwMDAuCisgICAgICAgUGFnZXM6ID8/Py4KKyAgICAgICBJU0JOOiAxLTU3NjEwLTQ3MC0yCisgICAgICAgTm90ZXM6IExpbmUgYnkgbGluZSBzb3VyY2UgY29kZSBjb21tZW50YXJ5IGJvb2suCisgICAgICAgCisgICAgICogVGl0bGU6ICJQcm9ncmFtbWluZyBmb3IgdGhlIHJlYWwgd29ybGQgLSBQT1NJWC40IgorICAgICAgIEF1dGhvcjogQmlsbCBPLiBHYWxsbWVpc3Rlci4KKyAgICAgICBQdWJsaXNoZXI6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcywgSW5jLi4KKyAgICAgICBEYXRlOiAxOTk1LgorICAgICAgIFBhZ2VzOiA/Pz8uCisgICAgICAgSVNCTjogSS01NjU5Mi0wNzQtMAorICAgICAgIE5vdGVzOiBUaG91Z2ggbm90IGJlaW5nIGRpcmVjdGx5IGFib3V0IExpbnV4LCBMaW51eCBhaW1zIHRvIGJlCisgICAgICAgUE9TSVguIEdvb2QgcmVmZXJlbmNlLgorICAgICAgIAorICAgICAqIFRpdGxlOiAiVW5kZXJzdGFuZGluZyB0aGUgTGludXggS2VybmVsIgorICAgICAgIEF1dGhvcjogRGFuaWVsIFAuIEJvdmV0IGFuZCBNYXJjbyBDZXNhdGkuCisgICAgICAgUHVibGlzaGVyOiBPJ1JlaWxseSAmIEFzc29jaWF0ZXMsIEluYy4uCisgICAgICAgRGF0ZTogMjAwMC4KKyAgICAgICBQYWdlczogNzAyLgorICAgICAgIElTQk46IDAtNTk2LTAwMDAyLTIKKyAgICAgICBOb3RlczogRnVydGhlciBpbmZvcm1hdGlvbiBpbgorICAgICAgIGh0dHA6Ly93d3cub3JlaWxseS5jb20vY2F0YWxvZy9saW51eGtlcm5lbC8KKyAgICAgICAKKyAgICAgTUlTQ0VMTEFORU9VUzoKKyAgIAorICAgICAqIE5hbWU6IGxpbnV4L0RvY3VtZW50YXRpb24KKyAgICAgICBBdXRob3I6IE1hbnkuCisgICAgICAgVVJMOiBKdXN0IGxvb2sgaW5zaWRlIHlvdXIga2VybmVsIHNvdXJjZXMuCisgICAgICAgS2V5d29yZHM6IGFueXRoaW5nLCBEb2NCb29rLgorICAgICAgIERlc2NyaXB0aW9uOiBEb2N1bWVudGF0aW9uIHRoYXQgY29tZXMgd2l0aCB0aGUga2VybmVsIHNvdXJjZXMsCisgICAgICAgaW5zaWRlIHRoZSBEb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4gU29tZSBwYWdlcyBmcm9tIHRoaXMgZG9jdW1lbnQKKyAgICAgICAoaW5jbHVkaW5nIHRoaXMgZG9jdW1lbnQgaXRzZWxmKSBoYXZlIGJlZW4gbW92ZWQgdGhlcmUsIGFuZCBtaWdodAorICAgICAgIGJlIG1vcmUgdXAgdG8gZGF0ZSB0aGFuIHRoZSB3ZWIgdmVyc2lvbi4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiTGludXggU291cmNlIERyaXZlciIKKyAgICAgICBVUkw6IGh0dHA6Ly9sc2QubGludXguY3oKKyAgICAgICBLZXl3b3JkczogQnJvd3Npbmcgc291cmNlIGNvZGUuCisgICAgICAgRGVzY3JpcHRpb246ICJMaW51eCBTb3VyY2UgRHJpdmVyIChMU0QpIGlzIGFuIGFwcGxpY2F0aW9uLCB3aGljaAorICAgICAgIGNhbiBtYWtlIGJyb3dzaW5nIHNvdXJjZSBjb2RlcyBvZiBMaW51eCBrZXJuZWwgZWFzaWVyIHRoYW4geW91IGNhbgorICAgICAgIGltYWdpbmUuIFlvdSBjYW4gc2VsZWN0IGJldHdlZW4gbXVsdGlwbGUgdmVyc2lvbnMgb2Yga2VybmVsIChlLmcuCisgICAgICAgMC4wMSwgMS4wLjAsIDIuMC4zMywgMi4wLjM0cHJlMTMsIDIuMC4wLCAyLjEuMTAxIGV0Yy4pLiBXaXRoIExTRAorICAgICAgIHlvdSBjYW4gc2VhcmNoIExpbnV4IGtlcm5lbCAoZnVsbHRleHQsIG1hY3JvcywgdHlwZXMsIGZ1bmN0aW9ucworICAgICAgIGFuZCB2YXJpYWJsZXMpIGFuZCBMU0QgY2FuIGdlbmVyYXRlIHBhdGNoZXMgZm9yIHlvdSBvbiB0aGUgZmx5CisgICAgICAgKGZpbGVzLCBkaXJlY3RvcmllcyBvciBrZXJuZWwpIi4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiTGludXggS2VybmVsIFNvdXJjZSBSZWZlcmVuY2UiCisgICAgICAgQXV0aG9yOiBUaG9tYXMgR3JhaWNoZW4uCisgICAgICAgVVJMOiBodHRwOi8vaW5ub21pbmF0ZS5vcmcvfmdyYWljaGVuL3Byb2plY3RzL2xrc3IvCisgICAgICAgS2V5d29yZHM6IENWUywgd2ViLCBjdnN3ZWIsIGJyb3dzaW5nIHNvdXJjZSBjb2RlLgorICAgICAgIERlc2NyaXB0aW9uOiBXZWIgaW50ZXJmYWNlIHRvIGEgQ1ZTIHNlcnZlciB3aXRoIHRoZSBrZXJuZWwKKyAgICAgICBzb3VyY2VzLiAiSGVyZSB5b3UgY2FuIGhhdmUgYSBsb29rIGF0IGFueSBmaWxlIG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICBzb3VyY2VzIG9mIGFueSB2ZXJzaW9uIHN0YXJ0aW5nIGZyb20gMS4wIHVwIHRvIHRoZSAoZGFpbHkgdXBkYXRlZCkKKyAgICAgICBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlLiBBbHNvIHlvdSBjYW4gY2hlY2sgdGhlIGRpZmZlcmVuY2VzCisgICAgICAgYmV0d2VlbiB0d28gdmVyc2lvbnMgb2YgYSBmaWxlIi4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiQ3Jvc3MtUmVmZXJlbmNpbmcgTGludXgiCisgICAgICAgVVJMOiBodHRwOi8vbHhyLmxpbnV4Lm5vL3NvdXJjZS8KKyAgICAgICBLZXl3b3JkczogQnJvd3Npbmcgc291cmNlIGNvZGUuCisgICAgICAgRGVzY3JpcHRpb246IEFub3RoZXIgd2ViLWJhc2VkIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZSBicm93c2VyLgorICAgICAgIExvdHMgb2YgY3Jvc3MgcmVmZXJlbmNlcyB0byB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucy4gWW91IGNhbiBzZWUKKyAgICAgICB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGV5IGFyZSB1c2VkLgorICAgICAgIAorICAgICAqIE5hbWU6ICJMaW51eCBXZWVrbHkgTmV3cyIKKyAgICAgICBVUkw6IGh0dHA6Ly9sd24ubmV0CisgICAgICAgS2V5d29yZHM6IGxhdGVzdCBrZXJuZWwgbmV3cy4KKyAgICAgICBEZXNjcmlwdGlvbjogVGhlIHRpdGxlIHNheXMgaXQgYWxsLiBUaGVyZSdzIGEgZml4ZWQga2VybmVsIHNlY3Rpb24KKyAgICAgICBzdW1tYXJpemluZyBkZXZlbG9wZXJzJyB3b3JrLCBidWcgZml4ZXMsIG5ldyBmZWF0dXJlcyBhbmQgdmVyc2lvbnMKKyAgICAgICBwcm9kdWNlZCBkdXJpbmcgdGhlIHdlZWsuIFB1Ymxpc2hlZCBldmVyeSBUaHVyc2RheS4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiS2VybmVsIFRyYWZmaWMiCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lmtlcm5lbHRyYWZmaWMub3JnL2tlcm5lbC10cmFmZmljLworICAgICAgIEtleXdvcmRzOiBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LCB3ZWVrbHkga2VybmVsIG5ld3MuCisgICAgICAgRGVzY3JpcHRpb246IFdlZWtseSBuZXdzbGV0dGVyIGNvdmVyaW5nIHRoZSBtb3N0IHJlbGV2YW50CisgICAgICAgZGlzY3Vzc2lvbnMgb2YgdGhlIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QuCisgICAgICAgCisgICAgICogTmFtZTogIkN1VFRpTkcuZURHZS5MaU51WCIKKyAgICAgICBVUkw6IGh0dHA6Ly9lZGdlLmtlcm5lbG5vdGVzLm9yZworICAgICAgIEtleXdvcmRzOiBjaGFuZ2VsaXN0LgorICAgICAgIERlc2NyaXB0aW9uOiBTaXRlIHdoaWNoIHByb3ZpZGVzIHRoZSBjaGFuZ2VsaXN0IGZvciBldmVyeSBrZXJuZWwKKyAgICAgICByZWxlYXNlLiBXaGF0J3MgbmV3LCB3aGF0J3MgYmV0dGVyLCB3aGF0J3MgY2hhbmdlZC4gTXlyZHJhYWwgcmVhZHMKKyAgICAgICB0aGUgcGF0Y2hlcyBhbmQgZGVzY3JpYmVzIHRoZW0uIFBvaW50ZXJzIHRvIHRoZSBwYXRjaGVzIGFyZSB0aGVyZSwKKyAgICAgICB0b28uCisgICAgICAgCisgICAgICogTmFtZTogIk5ldyBsaW51eC1rZXJuZWwgTWFpbGluZyBMaXN0IEZBUSIKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cudHV4Lm9yZy9sa21sLworICAgICAgIEtleXdvcmRzOiBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0IEZBUS4KKyAgICAgICBEZXNjcmlwdGlvbjogbGludXgta2VybmVsIGlzIGEgbWFpbGluZyBsaXN0IGZvciBkZXZlbG9wZXJzIHRvCisgICAgICAgY29tbXVuaWNhdGUuIFRoaXMgRkFRIGJ1aWxkcyBvbiB0aGUgcHJldmlvdXMgbGludXgta2VybmVsIG1haWxpbmcKKyAgICAgICBsaXN0IEZBUSBtYWludGFpbmVkIGJ5IEZyb2h3YWx0IEVnZXJlciwgd2hvIG5vIGxvbmdlciBtYWludGFpbnMKKyAgICAgICBpdC4gUmVhZCBpdCB0byBzZWUgaG93IHRvIGpvaW4gdGhlIG1haWxpbmcgbGlzdC4gRG96ZW5zIG9mCisgICAgICAgaW50ZXJlc3RpbmcgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgbGlzdCwgTGludXgsIGRldmVsb3BlcnMgKHdobworICAgICAgIGlzIC4uLj8pLCB0ZXJtcyAod2hhdCBpcy4uLj8pIGFyZSBhbnN3ZXJlZCBoZXJlIHRvby4gSnVzdCByZWFkIGl0LgorICAgICAgIAorICAgICAqIE5hbWU6ICJMaW51eCBWaXJ0dWFsIEZpbGUgU3lzdGVtIgorICAgICAgIEF1dGhvcjogUGV0ZXIgSi4gQnJhYW0uCisgICAgICAgVVJMOiBodHRwOi8vd3d3LmNvZGEuY3MuY211LmVkdS9kb2MvdGFsa3MvbGludXh2ZnMvCisgICAgICAgS2V5d29yZHM6IHNsaWRlcywgVkZTLCBpbm9kZSwgc3VwZXJibG9jaywgZGVudHJ5LCBkY2FjaGUuCisgICAgICAgRGVzY3JpcHRpb246IFNldCBvZiBzbGlkZXMsIHByZXN1bWFibHkgZnJvbSBhIHByZXNlbnRhdGlvbiBvbiB0aGUKKyAgICAgICBMaW51eCBWRlMgbGF5ZXIuIENvdmVycyB2ZXJzaW9uIDIuMS54LCB3aXRoIGRlbnRyaWVzIGFuZCB0aGUKKyAgICAgICBkY2FjaGUuCisgICAgICAgCisgICAgICogTmFtZTogIkdhcnkncyBFbmN5Y2xvcGVkaWEgLSBUaGUgTGludXggS2VybmVsIgorICAgICAgIEF1dGhvcjogR2FyeSAoSSBzdXBwb3NlLi4uKS4KKyAgICAgICBVUkw6IGh0dHA6Ly9tZW1iZXJzLmFhLm5ldC9+c3dlYXIvcGVkaWEva2VybmVsLmh0bWwKKyAgICAgICBLZXl3b3JkczogbGlua3MsIG5vdCBmb3VuZCBoZXJlPy4KKyAgICAgICBEZXNjcmlwdGlvbjogR2FyeSdzIEVuY3ljbG9wZWRpYSBleGlzdHMgdG8gYWxsb3cgdGhlIHJhcGlkIGZpbmRpbmcKKyAgICAgICBvZiBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBpbmZvcm1hdGlvbiBvZiBpbnRlcmVzdCB0byBHTlUvTGludXgKKyAgICAgICB1c2Vycy4gSXQgaGFzIGFib3V0IDQwMDAgbGlua3MgdG8gZXh0ZXJuYWwgcGFnZXMgaW4gMTUwIG1ham9yCisgICAgICAgY2F0ZWdvcmllcy4gVGhpcyBsaW5rIGlzIGZvciBrZXJuZWwtc3BlY2lmaWMgbGlua3MsIGRvY3VtZW50cywKKyAgICAgICBzaXRlcy4uLiBMb29rIHRoZXJlIGlmIHlvdSBjb3VsZCBub3QgZmluZCBoZXJlIHdoYXQgeW91IHdlcmUKKyAgICAgICBsb29raW5nIGZvci4KKyAgICAgICAKKyAgICAgKiBOYW1lOiAiVGhlIGhvbWUgcGFnZSBvZiBMaW51eC1NTSIKKyAgICAgICBBdXRob3I6IFRoZSBMaW51eC1NTSB0ZWFtLgorICAgICAgIFVSTDogaHR0cDovL2xpbnV4LW1tLm9yZy8KKyAgICAgICBLZXl3b3JkczogbWVtb3J5IG1hbmFnZW1lbnQsIExpbnV4LU1NLCBtbSBwYXRjaGVzLCBUT0RPLCBkb2NzLAorICAgICAgIG1haWxpbmcgbGlzdC4KKyAgICAgICBEZXNjcmlwdGlvbjogU2l0ZSBkZXZvdGVkIHRvIExpbnV4IE1lbW9yeSBNYW5hZ2VtZW50IGRldmVsb3BtZW50LgorICAgICAgIE1lbW9yeSByZWxhdGVkIHBhdGNoZXMsIEhPV1RPcywgbGlua3MsIG1tIGRldmVsb3BlcnMuLi4gRG9uJ3QgbWlzcworICAgICAgIGl0IGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCBkZXZlbG9wbWVudCEKKyAgICAgICAKKyAgICAgKiBOYW1lOiAiS2VybmVsIE5ld2JpZXMgSVJDIENoYW5uZWwiCisgICAgICAgVVJMOiBodHRwOi8vd3d3Lmtlcm5lbG5ld2JpZXMub3JnCisgICAgICAgS2V5d29yZHM6IElSQywgbmV3YmllcywgY2hhbm5lbCwgYXNraW5nIGRvdWJ0cy4KKyAgICAgICBEZXNjcmlwdGlvbjogI2tlcm5lbG5ld2JpZXMgb24gaXJjLm9wZW5wcm9qZWN0cy5uZXQuIEZyb20gdGhlIHdlYgorICAgICAgIHBhZ2U6ICIja2VybmVsbmV3YmllcyBpcyBhbiBJUkMgbmV0d29yayBkZWRpY2F0ZWQgdG8gdGhlICduZXdiaWUnCisgICAgICAga2VybmVsIGhhY2tlci4gVGhlIGF1ZGllbmNlIG1vc3RseSBjb25zaXN0cyBvZiBwZW9wbGUgd2hvIGFyZQorICAgICAgIGxlYXJuaW5nIGFib3V0IHRoZSBrZXJuZWwsIHdvcmtpbmcgb24ga2VybmVsIHByb2plY3RzIG9yCisgICAgICAgcHJvZmVzc2lvbmFsIGtlcm5lbCBoYWNrZXJzIHRoYXQgd2FudCB0byBoZWxwIGxlc3Mgc2Vhc29uZWQga2VybmVsCisgICAgICAgcGVvcGxlLiBbLi4uXSAja2VybmVsbmV3YmllcyBpcyBvbiB0aGUgT3BlbiBQcm9qZWN0cyBJUkMgTmV0d29yaywKKyAgICAgICB0cnkgaXJjLm9wZW5wcm9qZWN0cy5uZXQgb3IgaXJjLjxjb3VudHJ5Pi5vcGVucHJvamVjdHMubmV0IGFzIHlvdXIKKyAgICAgICBzZXJ2ZXIgYW5kIHRoZW4gL2pvaW4gI2tlcm5lbG5ld2JpZXMiLiBJdCBhbHNvIGhvc3RzIGFydGljbGVzLAorICAgICAgIGRvY3VtZW50cywgRkFRcy4uLgorICAgICAgIAorICAgICAqIE5hbWU6ICJsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFuZCBzZWFyY2ggZW5naW5lcyIKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cudXdzZy5pbmRpYW5hLmVkdS9oeXBlcm1haWwvbGludXgva2VybmVsL2luZGV4Lmh0bWwKKyAgICAgICBVUkw6IGh0dHA6Ly93d3cua2VybmVsbm90ZXMub3JnL2xueGxpc3RzL2xpbnV4LWtlcm5lbC8KKyAgICAgICBVUkw6IGh0dHA6Ly93d3cuZ2VvY3Jhd2xlci5jb20KKyAgICAgICBLZXl3b3JkczogbGludXgta2VybmVsLCBhcmNoaXZlcywgc2VhcmNoLgorICAgICAgIERlc2NyaXB0aW9uOiBTb21lIG9mIHRoZSBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0IGFyY2hpdmVycy4gSWYKKyAgICAgICB5b3UgaGF2ZSBhIGJldHRlci9hbm90aGVyIG9uZSwgcGxlYXNlIGxldCBtZSBrbm93LgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCisgICBEb2N1bWVudCBsYXN0IHVwZGF0ZWQgb24gVGh1IEp1biAyOCAxNTowOTozOSBDRVNUIDIwMDEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyNGQzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0wLDAgKzEsMTUxMSBAQAorRmVicnVhcnkgMjAwMyAgICAgICAgICAgICBLZXJuZWwgUGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgIHYyLjUuNTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBpcyBhIGNvbnNvbGlkYXRlZCBsaXN0IG9mIHRoZSBrZXJuZWwgcGFyYW1ldGVycyBhcyBpbXBsZW1lbnRlZAorKG1vc3RseSkgYnkgdGhlIF9fc2V0dXAoKSBtYWNybyBhbmQgc29ydGVkIGludG8gRW5nbGlzaCBEaWN0aW9uYXJ5IG9yZGVyCisoZGVmaW5lZCBhcyBpZ25vcmluZyBhbGwgcHVuY3R1YXRpb24gYW5kIHNvcnRpbmcgZGlnaXRzIGJlZm9yZSBsZXR0ZXJzIGluIGEKK2Nhc2UgaW5zZW5zaXRpdmUgbWFubmVyKSwgYW5kIHdpdGggZGVzY3JpcHRpb25zIHdoZXJlIGtub3duLgorCitNb2R1bGUgcGFyYW1ldGVycyBmb3IgbG9hZGFibGUgbW9kdWxlcyBhcmUgc3BlY2lmaWVkIG9ubHkgYXMgdGhlCitwYXJhbWV0ZXIgbmFtZSB3aXRoIG9wdGlvbmFsICc9JyBhbmQgdmFsdWUgYXMgYXBwcm9wcmlhdGUsIHN1Y2ggYXM6CisKKwltb2Rwcm9iZSB1c2Jjb3JlIGJsaW5rZW5saWdodHM9MQorCitNb2R1bGUgcGFyYW1ldGVycyBmb3IgbW9kdWxlcyB0aGF0IGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UKK2FyZSBzcGVjaWZpZWQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kdWxlIG5hbWUgcGx1cworJy4nIHBsdXMgcGFyYW1ldGVyIG5hbWUsIHdpdGggJz0nIGFuZCB2YWx1ZSBpZiBhcHByb3ByaWF0ZSwgc3VjaCBhczoKKworCXVzYmNvcmUuYmxpbmtlbmxpZ2h0cz0xCisKK1RoZSB0ZXh0IGluIHNxdWFyZSBicmFja2V0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZSB0aGUKK3Jlc3RyaWN0aW9ucyBvbiB0aGUga2VybmVsIGZvciB0aGUgc2FpZCBrZXJuZWwgcGFyYW1ldGVyIHRvIGJlIHZhbGlkLiBUaGUKK3Jlc3RyaWN0aW9ucyByZWZlcnJlZCB0byBhcmUgdGhhdCB0aGUgcmVsZXZhbnQgb3B0aW9uIGlzIHZhbGlkIGlmOgorCisJQUNQSQlBQ1BJIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlBTFNBCUFMU0Egc291bmQgc3VwcG9ydCBpcyBlbmFibGVkLgorCUFQSUMJQVBJQyBzdXBwb3J0IGlzIGVuYWJsZWQuCisJQVBNCUFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLgorCUFYMjUJQXBwcm9wcmlhdGUgQVguMjUgc3VwcG9ydCBpcyBlbmFibGVkLgorCUNECUFwcHJvcHJpYXRlIENEIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlERVZGUwlkZXZmcyBzdXBwb3J0IGlzIGVuYWJsZWQuIAorCURSTQlEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLiAKKwlFREQJQklPUyBFbmhhbmNlZCBEaXNrIERyaXZlIFNlcnZpY2VzIChFREQpIGlzIGVuYWJsZWQKKwlFRkkJRUZJIFBhcnRpdGlvbmluZyAoR1BUKSBpcyBlbmFibGVkCisJRUlERQlFSURFL0FUQVBJIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlGQglUaGUgZnJhbWUgYnVmZmVyIGRldmljZSBpcyBlbmFibGVkLgorCUhXCUFwcHJvcHJpYXRlIGhhcmR3YXJlIGlzIGVuYWJsZWQuCisJSUEtMzIJSUEtMzIgYWthIGkzODYgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJSUEtNjQJSUEtNjQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJSU9TQ0hFRAlNb3JlIHRoYW4gb25lIEkvTyBzY2hlZHVsZXIgaXMgZW5hYmxlZC4KKwlJUF9QTlAJSVAgRENIUCwgQk9PVFAsIG9yIFJBUlAgaXMgZW5hYmxlZC4KKwlJU0FQTlAJSVNBIFBuUCBjb2RlIGlzIGVuYWJsZWQuCisJSVNETglBcHByb3ByaWF0ZSBJU0ROIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlKT1kJQXBwcm9wcmlhdGUgam95c3RpY2sgc3VwcG9ydCBpcyBlbmFibGVkLgorCUxQCVByaW50ZXIgc3VwcG9ydCBpcyBlbmFibGVkLgorCUxPT1AJTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlNNjhrCU02OGsgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJCQlUaGVzZSBvcHRpb25zIGhhdmUgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBpbnNpZGUgb2YKKwkJCURvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQuCisJTUNBCU1DQSBidXMgc3VwcG9ydCBpcyBlbmFibGVkLgorCU1EQQlNREEgY29uc29sZSBzdXBwb3J0IGlzIGVuYWJsZWQuCisJTU9VU0UJQXBwcm9wcmlhdGUgbW91c2Ugc3VwcG9ydCBpcyBlbmFibGVkLgorCU1URAlNVEQgc3VwcG9ydCBpcyBlbmFibGVkLgorCU5FVAlBcHByb3ByaWF0ZSBuZXR3b3JrIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlOVU1BCU5VTUEgc3VwcG9ydCBpcyBlbmFibGVkLgorCU5GUwlBcHByb3ByaWF0ZSBORlMgc3VwcG9ydCBpcyBlbmFibGVkLgorCU9TUwlPU1Mgc291bmQgc3VwcG9ydCBpcyBlbmFibGVkLgorCVBBUklERQlUaGUgUGFySURFIHN1YnN5c3RlbSBpcyBlbmFibGVkLgorCVBBUklTQwlUaGUgUEEtUklTQyBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlQQ0kJUENJIGJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQuCisJUENNQ0lBCVRoZSBQQ01DSUEgc3Vic3lzdGVtIGlzIGVuYWJsZWQuCisJUE5QCVBsdWcgJiBQbGF5IHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlQUEMJUG93ZXJQQyBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KKwlQUFQJUGFyYWxsZWwgcG9ydCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJUFMyCUFwcHJvcHJpYXRlIFBTLzIgc3VwcG9ydCBpcyBlbmFibGVkLgorCVJBTQlSQU0gZGlzayBzdXBwb3J0IGlzIGVuYWJsZWQuCisJUzM5MAlTMzkwIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCVNDU0kJQXBwcm9wcmlhdGUgU0NTSSBzdXBwb3J0IGlzIGVuYWJsZWQuCisJCQlBIGxvdCBvZiBkcml2ZXJzIGhhcyB0aGVpciBvcHRpb25zIGRlc2NyaWJlZCBpbnNpZGUgb2YKKwkJCURvY3VtZW50YXRpb24vc2NzaS8uCisJU0VMSU5VWCBTRUxpbnV4IHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlTRVJJQUwJU2VyaWFsIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlTTVAJVGhlIGtlcm5lbCBpcyBhbiBTTVAga2VybmVsLgorCVNQQVJDCVNwYXJjIGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCVNXU1VTUAlTb2Z0d2FyZSBzdXNwZW5zaW9uIGlzIGVuYWJsZWQuCisJVFMJQXBwcm9wcmlhdGUgdG91Y2hzY3JlZW4gc3VwcG9ydCBpcyBlbmFibGVkLgorCVVTQglVU0Igc3VwcG9ydCBpcyBlbmFibGVkLgorCVVTQkhJRAlVU0IgSHVtYW4gSW50ZXJmYWNlIERldmljZSBzdXBwb3J0IGlzIGVuYWJsZWQuCisJVjRMCVZpZGVvIEZvciBMaW51eCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJVkdBCVRoZSBWR0EgY29uc29sZSBoYXMgYmVlbiBlbmFibGVkLgorCVZUCVZpcnR1YWwgdGVybWluYWwgc3VwcG9ydCBpcyBlbmFibGVkLgorCVdEVAlXYXRjaGRvZyBzdXBwb3J0IGlzIGVuYWJsZWQuCisJWFQJSUJNIFBDL1hUIE1GTSBoYXJkIGRpc2sgc3VwcG9ydCBpcyBlbmFibGVkLgorCVg4Ni02NAlYODYtNjQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJCQlNb3JlIFg4Ni02NCBib290IG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluCisJCQlEb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0IC4KKworSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgdGV4dCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3B0aW9uOgorCisJQlVHUz0JUmVsYXRlcyB0byBwb3NzaWJsZSBwcm9jZXNzb3IgYnVncyBvbiB0aGUgc2FpZCBwcm9jZXNzb3IuCisJS05MCUlzIGEga2VybmVsIHN0YXJ0LXVwIHBhcmFtZXRlci4KKwlCT09UCUlzIGEgYm9vdCBsb2FkZXIgcGFyYW1ldGVyLgorCitQYXJhbWV0ZXJzIGRlbm90ZWQgd2l0aCBCT09UIGFyZSBhY3R1YWxseSBpbnRlcnByZXRlZCBieSB0aGUgYm9vdAorbG9hZGVyLCBhbmQgaGF2ZSBubyBtZWFuaW5nIHRvIHRoZSBrZXJuZWwgZGlyZWN0bHkuCitEbyBub3QgbW9kaWZ5IHRoZSBzeW50YXggb2YgYm9vdCBsb2FkZXIgcGFyYW1ldGVycyB3aXRob3V0IGV4dHJlbWUKK25lZWQgb3IgY29vcmRpbmF0aW9uIHdpdGggPERvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dD4uCisKK05vdGUgdGhhdCBBTEwga2VybmVsIHBhcmFtZXRlcnMgbGlzdGVkIGJlbG93IGFyZSBDQVNFIFNFTlNJVElWRSwgYW5kIHRoYXQKK2EgdHJhaWxpbmcgPSBvbiB0aGUgbmFtZSBvZiBhbnkgcGFyYW1ldGVyIHN0YXRlcyB0aGF0IHRoYXQgcGFyYW1ldGVyIHdpbGwKK2JlIGVudGVyZWQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoZXJlYXMgaXRzIGFic2VuY2UgaW5kaWNhdGVzIHRoYXQKK2l0IHdpbGwgYXBwZWFyIGFzIGEga2VybmVsIGFyZ3VtZW50IHJlYWRhYmxlIHZpYSAvcHJvYy9jbWRsaW5lIGJ5IHByb2dyYW1zCitydW5uaW5nIG9uY2UgdGhlIHN5c3RlbSBpcyB1cC4KKworCTUzYzd4eD0JCVtIVyxTQ1NJXSBBbWlnYSBTQ1NJIGNvbnRyb2xsZXJzCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS81M2M3eHguYy4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M3eHgudHh0LgorCisJYWNwaT0JCVtIVyxBQ1BJXSBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgCisJCQlGb3JtYXQ6IHsgZm9yY2UgfCBvZmYgfCBodCB8IHN0cmljdCB9CisJCQlmb3JjZSAtLSBlbmFibGUgQUNQSSBpZiBkZWZhdWx0IHdhcyBvZmYKKwkJCW9mZiAtLSBkaXNhYmxlIEFDUEkgaWYgZGVmYXVsdCB3YXMgb24KKwkJCW5vaXJxIC0tIGRvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKKwkJCWh0IC0tIHJ1biBvbmx5IGVub3VnaCBBQ1BJIHRvIGVuYWJsZSBIeXBlciBUaHJlYWRpbmcKKwkJCXN0cmljdCAtLSAgQmUgbGVzcyB0b2xlcmFudCBvZiBwbGF0Zm9ybXMgdGhhdCBhcmUgbm90CisJCQkJc3RyaWN0bHkgQUNQSSBzcGVjaWZpY2F0aW9uIGNvbXBsaWFudC4KKworCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9wbS50eHQsIHBjaT1ub2FjcGkKKworCWFjcGlfc2xlZXA9CVtIVyxBQ1BJXSBTbGVlcCBvcHRpb25zCisJCQlGb3JtYXQ6IHsgczNfYmlvcywgczNfbW9kZSB9CisJCQlTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQKKyAKKwlhY3BpX3NjaT0JW0hXLEFDUEldIEFDUEkgU3lzdGVtIENvbnRyb2wgSW50ZXJydXB0IHRyaWdnZXIgbW9kZQorCQkJRm9ybWF0OiB7IGxldmVsIHwgZWRnZSB8ICBoaWdoIHwgbG93IH0KKworCWFjcGlfaXJxX2JhbGFuY2UJW0hXLEFDUEldIEFDUEkgd2lsbCBiYWxhbmNlIGFjdGl2ZSBJUlFzCisJCQkJZGVmYXVsdCBpbiBBUElDIG1vZGUKKworCWFjcGlfaXJxX25vYmFsYW5jZQlbSFcsQUNQSV0gQUNQSSB3aWxsIG5vdCBtb3ZlIGFjdGl2ZSBJUlFzIChkZWZhdWx0KQorCQkJCWRlZmF1bHQgaW4gUElDIG1vZGUKKworCWFjcGlfaXJxX3BjaT0JW0hXLEFDUEldIElmIGlycV9iYWxhbmNlLCBDbGVhciBsaXN0ZWQgSVJRcyBmb3IgdXNlIGJ5IFBDSQorCQkJRm9ybWF0OiA8aXJxPiw8aXJxPi4uLgorCisJYWNwaV9pcnFfaXNhPQlbSFcsQUNQSV0gSWYgaXJxX2JhbGFuY2UsIE1hcmsgbGlzdGVkIElSUXMgdXNlZCBieSBJU0EKKwkJCUZvcm1hdDogPGlycT4sPGlycT4uLi4KKworCWFjcGlfb3NpPQlbSFcsQUNQSV0gZW1wdHkgcGFyYW0gZGlzYWJsZXMgX09TSQorCisJYWNwaV9zZXJpYWxpemUJW0hXLEFDUEldIGZvcmNlIHNlcmlhbGl6YXRpb24gb2YgQU1MIG1ldGhvZHMKKworCWFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSBbSFcsQUNQSV0KKwkJCVJlY29nbml6ZSBhbmQgaWdub3JlIElSUTAvcGluMiBJbnRlcnJ1cHQgT3ZlcnJpZGUuCisJCQlGb3IgYnJva2VuIG5Gb3JjZTIgQklPUyByZXN1bHRpbmcgaW4gWFQtUElDIHRpbWVyLgorCisJYWNwaV9kYmdfbGF5ZXI9CVtIVyxBQ1BJXQorCQkJRm9ybWF0OiA8aW50PgorCQkJRWFjaCBiaXQgb2YgdGhlIDxpbnQ+IGluZGljYXRlcyBhbiBhY3BpIGRlYnVnIGxheWVyLAorCQkJMTogZW5hYmxlLCAwOiBkaXNhYmxlLiBJdCBpcyB1c2VmdWwgZm9yIGJvb3QgdGltZQorCQkJZGVidWdnaW5nLiBBZnRlciBzeXN0ZW0gaGFzIGJvb3RlZCB1cCwgaXQgY2FuIGJlIHNldAorCQkJdmlhIC9wcm9jL2FjcGkvZGVidWdfbGF5ZXIuCisKKwlhY3BpX2RiZ19sZXZlbD0JW0hXLEFDUEldCisJCQlGb3JtYXQ6IDxpbnQ+CisJCQlFYWNoIGJpdCBvZiB0aGUgPGludD4gaW5kaWNhdGVzIGFuIGFjcGkgZGVidWcgbGV2ZWwsCisJCQkxOiBlbmFibGUsIDA6IGRpc2FibGUuIEl0IGlzIHVzZWZ1bCBmb3IgYm9vdCB0aW1lCisJCQlkZWJ1Z2dpbmcuIEFmdGVyIHN5c3RlbSBoYXMgYm9vdGVkIHVwLCBpdCBjYW4gYmUgc2V0CisJCQl2aWEgL3Byb2MvYWNwaS9kZWJ1Z19sZXZlbC4KKworCWFjcGlfZmFrZV9lY2R0CVtIVyxBQ1BJXSBXb3JrYXJvdW5kIGZhaWx1cmUgZHVlIHRvIEJJT1MgbGFja2luZyBFQ0RUCisKKwlhZDE4MTY9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPgorCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQUQxODE2LgorCisJYWQxODQ4PQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPHR5cGU+CisKKwlhZGxpYj0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4KKyAKKwlhZHZhbnN5cz0JW0hXLFNDU0ldCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9hZHZhbnN5cy5jLgorCisJYWR2d2R0PQkJW0hXLFdEVF0gQWR2YW50ZWNoIFdEVAorCQkJRm9ybWF0OiA8aW9zdGFydD4sPGlvc3RvcD4KKworCWFlZHNwMTY9CVtIVyxPU1NdIEF1ZGlvIEV4Y2VsIERTUCAxNgorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxtc3NfaW8+LDxtcHVfaW8+LDxtcHVfaXJxPgorCQkJU2VlIGFsc28gaGVhZGVyIG9mIHNvdW5kL29zcy9hZWRzcDE2LmMuCisgCisJYWhhMTUyeD0JW0hXLFNDU0ldCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0LgorCisJYWhhMTU0Mj0JW0hXLFNDU0ldCisJCQlGb3JtYXQ6IDxwb3J0YmFzZT5bLDxidXNvbj4sPGJ1c29mZj5bLDxkbWFzcGVlZD5dXQorCisJYWljN3h4eD0JW0hXLFNDU0ldCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0LgorCisJYWljNzl4eD0JW0hXLFNDU0ldCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzc5eHgudHh0LgorCisJQU01M0M5NzQ9CVtIVyxTQ1NJXQorCQkJRm9ybWF0OiA8aG9zdC1zY3NpLWlkPiw8dGFyZ2V0LXNjc2ktaWQ+LDxtYXgtcmF0ZT4sPG1heC1vZmZzZXQ+CisJCQlTZWUgYWxzbyBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL0FNNTNDOTc0LmMuCisKKwlhbWlqb3kubWFwPQlbSFcsSk9ZXSBBbWlnYSBqb3lzdGljayBzdXBwb3J0CisJCQlNYXAgb2YgZGV2aWNlcyBhdHRhY2hlZCB0byBKT1kwREFUIGFuZCBKT1kxREFUCisJCQlGb3JtYXQ6IDxhPiw8Yj4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24va2VybmVsL2lucHV0L2pveXN0aWNrLnR4dAorCisJYW5hbG9nLm1hcD0JW0hXLEpPWV0gQW5hbG9nIGpveXN0aWNrIGFuZCBnYW1lcGFkIHN1cHBvcnQKKwkJCVNwZWNpZmllcyB0eXBlIG9yIGNhcGFiaWxpdGllcyBvZiBhbiBhbmFsb2cgam95c3RpY2sKKwkJCWNvbm5lY3RlZCB0byBvbmUgb2YgMTYgZ2FtZXBvcnRzCisJCQlGb3JtYXQ6IDx0eXBlMT4sPHR5cGUyPiwuLjx0eXBlMTY+CisKKwlhcGM9CQlbSFcsU1BBUkNdIFBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zIChTUEFSQ3N0YXRpb24tNC81ICsgZGVyaXYuKQorCQkJRm9ybWF0OiBub2lkbGUKKwkJCURpc2FibGUgQVBDIENQVSBzdGFuZGJ5IHN1cHBvcnQuIFNQQVJDc3RhdGlvbi1Gb3ggZG9lcworCQkJbm90IHBsYXkgd2VsbCB3aXRoIEFQQyBDUFUgaWRsZSAtIGRpc2FibGUgaXQgaWYgeW91IGhhdmUKKwkJCUFQQyBhbmQgeW91ciBzeXN0ZW0gY3Jhc2hlcyByYW5kb21seS4KKworCWFwaWM9CQlbQVBJQyxpMzg2XSBDaGFuZ2UgdGhlIG91dHB1dCB2ZXJib3NpdHkgIHdoaWxzdCBib290aW5nCisJCQlGb3JtYXQ6IHsgcXVpZXQgKGRlZmF1bHQpIHwgdmVyYm9zZSB8IGRlYnVnIH0KKwkJCUNoYW5nZSB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBvdXRwdXQKKwkJCXdoZW4gaW5pdGlhbGlzaW5nIHRoZSBBUElDIGFuZCBJTy1BUElDIGNvbXBvbmVudHMuCisgCisJYXBtPQkJW0FQTV0gQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudAorCQkJU2VlIGhlYWRlciBvZiBhcmNoL2kzODYva2VybmVsL2FwbS5jLgorCisJYXBwbGljb209CVtIV10KKwkJCUZvcm1hdDogPG1lbT4sPGlycT4KKyAKKwlhcmNyaW1pPQlbSFcsTkVUXSBBUkNuZXQgLSAiUklNIEkiIChlbnRpcmVseSBtZW0tbWFwcGVkKSBjYXJkcworCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxub2RlSUQ+CisKKwlhdGFmbG9wPQlbSFcsTTY4a10KKworCWF0YXJpbW91c2U9CVtIVyxNT1VTRV0gQXRhcmkgTW91c2UKKworCWF0YXNjc2k9CVtIVyxTQ1NJXSBBdGFyaSBTQ1NJCisKKwlhdGtiZC5leHRyYT0JW0hXXSBFbmFibGUgZXh0cmEgTEVEcyBhbmQga2V5cyBvbiBJQk0gUmFwaWRBY2Nlc3MsCisJCQlFektleSBhbmQgc2ltaWxhciBrZXlib2FyZHMKKworCWF0a2JkLnJlc2V0PQlbSFddIFJlc2V0IGtleWJvYXJkIGR1cmluZyBpbml0aWFsaXphdGlvbgorCisJYXRrYmQuc2V0PQlbSFddIFNlbGVjdCBrZXlib2FyZCBjb2RlIHNldCAKKwkJCUZvcm1hdDogPGludD4gKDIgPSBBVCAoZGVmYXVsdCkgMyA9IFBTLzIpCisKKwlhdGtiZC5zY3JvbGw9CVtIV10gRW5hYmxlIHNjcm9sbCB3aGVlbCBvbiBNUyBPZmZpY2UgYW5kIHNpbWlsYXIKKwkJCWtleWJvYXJkcworCisJYXRrYmQuc29mdHJhdz0JW0hXXSBDaG9vc2UgYmV0d2VlbiBzeW50aGV0aWMgYW5kIHJlYWwgcmF3IG1vZGUKKwkJCUZvcm1hdDogPGJvb2w+ICgwID0gcmVhbCwgMSA9IHN5bnRoZXRpYyAoZGVmYXVsdCkpCisJCisJYXRrYmQuc29mdHJlcGVhdD0KKwkJCVtIV10gVXNlIHNvZnR3YXJlIGtleWJvYXJkIHJlcGVhdAorCisJYXV0b3Rlc3QJW0lBNjRdCisKKwlhd2U9CQlbSFcsT1NTXSBBV0UzMi9TQjMyL0FXRTY0IHdhdmUgdGFibGUgc3ludGgKKwkJCUZvcm1hdDogPGlvPiw8bWVtc2l6ZT4sPGlzYXBucD4KKyAKKwlhenRjZD0JCVtIVyxDRF0gQXp0ZWNoIENEMjY4IENEUk9NIGRyaXZlcgorCQkJRm9ybWF0OiA8aW8+LDB4NzkgKD8pCisKKwliYXljb21fZXBwPQlbSFcsQVgyNV0KKwkJCUZvcm1hdDogPGlvPiw8bW9kZT4KKyAKKwliYXljb21fcGFyPQlbSFcsQVgyNV0gQmF5Q29tIFBhcmFsbGVsIFBvcnQgQVguMjUgTW9kZW0KKwkJCUZvcm1hdDogPGlvPiw8bW9kZT4KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Bhci5jLgorCisJYmF5Y29tX3Nlcl9mZHg9CVtIVyxBWDI1XSBCYXlDb20gU2VyaWFsIFBvcnQgQVguMjUgTW9kZW0gKEZ1bGwgRHVwbGV4IE1vZGUpCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPG1vZGU+Wyw8YmF1ZD5dCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMuCisKKwliYXljb21fc2VyX2hkeD0JW0hXLEFYMjVdIEJheUNvbSBTZXJpYWwgUG9ydCBBWC4yNSBNb2RlbSAoSGFsZiBEdXBsZXggTW9kZSkKKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8bW9kZT4KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYy4KKworCWJsa210ZF9kZXZpY2U9CVtIVyxNVERdCisJYmxrbXRkX2VyYXNlc3o9CisJYmxrbXRkX3JvPQorCWJsa210ZF9icz0KKwlibGttdGRfY291bnQ9CisKKwlidHR2LmNhcmQ9CVtIVyxWNExdIGJ0dHYgKGJ0ODQ4ICsgYnQ4NzggYmFzZWQgZ3JhYmJlciBjYXJkcykKKwlidHR2LnJhZGlvPQlNb3N0IGltcG9ydGFudCBpbnNtb2Qgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFzIGtlcm5lbCBhcmdzIHRvby4KKwlidHR2LnBsbD0JU2VlIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucworCWJ0dHYudHVuZXI9CWFuZCBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ0FSRExJU1QKKworCUJ1c0xvZ2ljPQlbSFcsU0NTSV0KKwkJCVNlZSBkcml2ZXJzL3Njc2kvQnVzTG9naWMuYywgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24KKwkJCUJ1c0xvZ2ljX1BhcnNlRHJpdmVyT3B0aW9ucygpLgorCisJYzEwMT0JCVtORVRdIE1veGEgQzEwMSBzeW5jaHJvbm91cyBzZXJpYWwgY2FyZAorCisJY2FjaGVzaXplPQlbQlVHUz1JQS0zMl0gT3ZlcnJpZGUgbGV2ZWwgMiBDUFUgY2FjaGUgc2l6ZSBkZXRlY3Rpb24uCisJCQlTb21ldGltZXMgQ1BVIGhhcmR3YXJlIGJ1Z3MgbWFrZSB0aGVtIHJlcG9ydCB0aGUgY2FjaGUKKwkJCXNpemUgaW5jb3JyZWN0bHkuIFRoZSBrZXJuZWwgd2lsbCBhdHRlbXB0IHdvcmsgYXJvdW5kcworCQkJdG8gZml4IGtub3duIHByb2JsZW1zLCBidXQgZm9yIHNvbWUgQ1BVcyBpdCBpcyBub3QKKwkJCXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGF0IHRoZSBjb3JyZWN0IHNpemUgc2hvdWxkIGJlLgorCQkJVGhpcyBvcHRpb24gcHJvdmlkZXMgYW4gb3ZlcnJpZGUgZm9yIHRoZXNlIHNpdHVhdGlvbnMuCisKKwljZHUzMWE9CQlbSFcsQ0RdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT5bLFBBU10KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9jZHJvbS9jZHUzMWEuYy4KKworCWNoYW5kZXY9CVtIVyxORVRdIEdlbmVyaWMgY2hhbm5lbCBkZXZpY2UgaW5pdGlhbGlzYXRpb24KKworCWNoZWNrcmVxcHJvdAlbU0VMSU5VWF0gU2V0IGluaXRpYWwgY2hlY2tyZXFwcm90IGZsYWcgdmFsdWUuCisJCQlGb3JtYXQ6IHsgIjAiIHwgIjEiIH0KKwkJCVNlZSBzZWN1cml0eS9zZWxpbnV4L0tjb25maWcgaGVscCB0ZXh0LgorCQkJMCAtLSBjaGVjayBwcm90ZWN0aW9uIGFwcGxpZWQgYnkga2VybmVsIChpbmNsdWRlcyBhbnkgaW1wbGllZCBleGVjdXRlIHByb3RlY3Rpb24pLgorCQkJMSAtLSBjaGVjayBwcm90ZWN0aW9uIHJlcXVlc3RlZCBieSBhcHBsaWNhdGlvbi4KKwkJCURlZmF1bHQgdmFsdWUgaXMgc2V0IHZpYSBhIGtlcm5lbCBjb25maWcgb3B0aW9uLgorCQkJVmFsdWUgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSB2aWEgL3NlbGludXgvY2hlY2tyZXFwcm90LgorIAorIAljbG9jaz0JCVtCVUdTPUlBLTMyLCBIV10gZ2V0dGltZW9mZGF5IHRpbWVzb3VyY2Ugb3ZlcnJpZGUuIAorCQkJRm9yY2VzIHNwZWNpZmllZCB0aW1lc291cmNlIChpZiBhdmFsaWFibGUpIHRvIGJlIHVzZWQKKwkJCXdoZW4gY2FsY3VsYXRpbmcgZ2V0dGltZW9mZGF5KCkuIElmIHNwZWNpY2lmaWVkIHRpbWVzb3VyY2UKKwkJCWlzIG5vdCBhdmFsaWJsZSwgaXQgZGVmYXVsdHMgdG8gUElULiAKKwkJCUZvcm1hdDogeyBwaXQgfCB0c2MgfCBjeWNsb25lIHwgcG10bXIgfQorCisJaHBldD0JCVtJQS0zMixIUEVUXSBvcHRpb24gdG8gZGlzYWJsZSBIUEVUIGFuZCB1c2UgUElULgorCQkJRm9ybWF0OiBkaXNhYmxlCisKKwljbTIwNj0JCVtIVyxDRF0KKwkJCUZvcm1hdDogeyBhdXRvIHwgWzxpbz4sXVs8aXJxPl0gfQorCisJY29tMjAwMjA9CVtIVyxORVRdIEFSQ25ldCAtIENPTTIwMDIwIGNoaXBzZXQKKwkJCUZvcm1hdDogPGlvPlssPGlycT5bLDxub2RlSUQ+Wyw8YmFja3BsYW5lPlssPGNrcD5bLDx0aW1lb3V0Pl1dXV1dCisKKwljb205MGlvPQlbSFcsTkVUXSBBUkNuZXQgLSBDT005MHh4IGNoaXBzZXQgKElPLW1hcHBlZCBidWZmZXJzKQorCQkJRm9ybWF0OiA8aW8+Wyw8aXJxPl0KKworCWNvbTkweHg9CVtIVyxORVRdIEFSQ25ldCAtIENPTTkweHggY2hpcHNldCAobWVtb3J5LW1hcHBlZCBidWZmZXJzKQorCQkJRm9ybWF0OiA8aW8+Wyw8aXJxPlssPG1lbXN0YXJ0Pl1dCisKKwljb25kZXY9CQlbSFcsUzM5MF0gY29uc29sZSBkZXZpY2UKKwljb25tb2RlPQorIAorCWNvbnNvbGU9CVtLTkxdIE91dHB1dCBjb25zb2xlIGRldmljZSBhbmQgb3B0aW9ucy4KKworCQl0dHk8bj4JVXNlIHRoZSB2aXJ0dWFsIGNvbnNvbGUgZGV2aWNlIDxuPi4KKworCQl0dHlTPG4+WyxvcHRpb25zXQorCQkJVXNlIHRoZSBzcGVjaWZpZWQgc2VyaWFsIHBvcnQuICBUaGUgb3B0aW9ucyBhcmUgb2YKKwkJCXRoZSBmb3JtICJiYmJicG4iLCB3aGVyZSAiYmJiYiIgaXMgdGhlIGJhdWQgcmF0ZSwKKwkJCSJwIiBpcyBwYXJpdHkgKCJuIiwgIm8iLCBvciAiZSIpLCBhbmQgIm4iIGlzIGJpdHMuCisJCQlEZWZhdWx0IGlzICI5NjAwbjgiLgorCisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3NlcmlhbC1jb25zb2xlLnR4dC4KKworCQl1YXJ0LGlvLDxhZGRyPlssb3B0aW9uc10KKwkJdWFydCxtbWlvLDxhZGRyPlssb3B0aW9uc10KKwkJCVN0YXJ0IGFuIGVhcmx5LCBwb2xsZWQtbW9kZSBjb25zb2xlIG9uIHRoZSA4MjUwLzE2NTUwCisJCQlVQVJUIGF0IHRoZSBzcGVjaWZpZWQgSS9PIHBvcnQgb3IgTU1JTyBhZGRyZXNzLAorCQkJc3dpdGNoaW5nIHRvIHRoZSBtYXRjaGluZyB0dHlTIGRldmljZSBsYXRlci4gIFRoZQorCQkJb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIHR0eVMsIGFib3ZlLgorCisJY3BjaWhwX2dlbmVyaWM9CVtIVyxQQ0ldIEdlbmVyaWMgcG9ydCBJL08gQ29tcGFjdFBDSSBkcml2ZXIKKwkJCUZvcm1hdDogPGZpcnN0X3Nsb3Q+LDxsYXN0X3Nsb3Q+LDxwb3J0Piw8ZW51bV9iaXQ+Wyw8ZGVidWc+XQorCisJY3BpYV9wcD0JW0hXLFBQVF0KKwkJCUZvcm1hdDogeyBwYXJwb3J0PG5yPiB8IGF1dG8gfCBub25lIH0KKworCWNzNDIzMj0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxtcHVpbz4sPG1wdWlycT4KKworCWNzODl4MF9kbWE9CVtIVyxORVRdCisJCQlGb3JtYXQ6IDxkbWE+CisKKwljczg5eDBfbWVkaWE9CVtIVyxORVRdCisJCQlGb3JtYXQ6IHsgcmo0NSB8IGF1aSB8IGJuYyB9CisgCisJY3ljbGFkZXM9CVtIVyxTRVJJQUxdIEN5Y2xhZGVzIG11bHRpLXNlcmlhbCBwb3J0IGFkYXB0ZXIuCisgCisJZGFzZD0JCVtIVyxORVRdICAgIAorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy4KKworCWRiOS5kZXZbMnwzXT0JW0hXLEpPWV0gTXVsdGlzeXN0ZW0gam95c3RpY2sgc3VwcG9ydCB2aWEgcGFyYWxsZWwgcG9ydAorCQkJKG9uZSBkZXZpY2UgcGVyIHBvcnQpCisJCQlGb3JtYXQ6IDxwb3J0Iz4sPHR5cGU+CisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CisKKwlkZWJ1ZwkJW0tOTF0gRW5hYmxlIGtlcm5lbCBkZWJ1Z2dpbmcgKGV2ZW50cyBsb2cgbGV2ZWwpLgorCisJZGVjbmV0PQkJW0hXLE5FVF0KKwkJCUZvcm1hdDogPGFyZWE+Wyw8bm9kZT5dCisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dC4KKworCWRldmZzPQkJW0RFVkZTXQorCQkJU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGV2ZnMvYm9vdC1vcHRpb25zLgorCisJZGhhc2hfZW50cmllcz0JW0tOTF0KKwkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBkZW50cnkgY2FjaGUuCisgCisJZGlnaT0JCVtIVyxTRVJJQUxdCisJCQlJTyBwYXJhbWV0ZXJzICsgZW5hYmxlL2Rpc2FibGUgY29tbWFuZC4KKworCWRpZ2llcGNhPQlbSFcsU0VSSUFMXQorCQkJU2VlIGRyaXZlcnMvY2hhci9SRUFETUUuZXBjYSBhbmQKKwkJCURvY3VtZW50YXRpb24vZGlnaWVwY2EudHh0LgorCisJZG1hc2NjPQkJW0hXLEFYMjUsU0VSSUFMXSBBWC4yNSBaODBTQ0MgZHJpdmVyIHdpdGggRE1BCisJCQlzdXBwb3J0IGF2YWlsYWJsZS4KKwkJCUZvcm1hdDogPGlvX2RldjA+Wyw8aW9fZGV2MT5bLC4uPGlvX2RldjMyPl1dCisKKwlkbWFzb3VuZD0JW0hXLE9TU10gU291bmQgc3Vic3lzdGVtIGJ1ZmZlcnMKKworCWRzY2M0LnNldHVwPQlbTkVUXQorCisJZHRjMzE4MWU9CVtIVyxTQ1NJXQorCisJZWFybHlwcmludGs9CVtJQS0zMiwgWDg2LTY0XQorCQkJZWFybHlwcmludGs9dmdhCisJCQllYXJseXByaW50az1zZXJpYWxbLHR0eVNuWyxiYXVkcmF0ZV1dCisKKwkJCUFwcGVuZCAsa2VlcCB0byBub3QgZGlzYWJsZSBpdCB3aGVuIHRoZSByZWFsIGNvbnNvbGUKKwkJCXRha2VzIG92ZXIuCisKKwkJCU9ubHkgdmdhIG9yIHNlcmlhbCBhdCBhIHRpbWUsIG5vdCBib3RoLgorCisJCQlDdXJyZW50bHkgb25seSB0dHlTMCBhbmQgdHR5UzEgYXJlIHN1cHBvcnRlZC4KKworCQkJSW50ZXJhY3Rpb24gd2l0aCB0aGUgc3RhbmRhcmQgc2VyaWFsIGRyaXZlciBpcyBub3QKKwkJCXZlcnkgZ29vZC4KKworCQkJVGhlIFZHQSBvdXRwdXQgaXMgZXZlbnR1YWxseSBvdmVyd3JpdHRlbiBieSB0aGUgcmVhbAorCQkJY29uc29sZS4KKworCWVhdGE9CQlbSFcsU0NTSV0KKworCWVkYT0JCVtIVyxQUzJdCisKKwllZGI9CQlbSFcsUFMyXQorCisJZWRkPQkJW0VERF0KKwkJCUZvcm1hdDogeyJvZltmXSIgfCAic2tbaXBtYnJdIn0KKwkJCVNlZSBjb21tZW50IGluIGFyY2gvaTM4Ni9ib290L2VkZC5TCisKKwllaWNvbj0JCVtIVyxJU0ROXSAKKwkJCUZvcm1hdDogPGlkPiw8bWVtYmFzZT4sPGlycT4KKworCWVpc2FfaXJxX2VkZ2U9CVtQQVJJU0MsSFddCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvcGFyaXNjL2Vpc2EuYy4KKworCWVsYW5mcmVxPQlbSUEtMzJdCisJCQlTZWUgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24gZWxhbmZyZXFfc2V0dXAoKSBpbgorCQkJYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jLgorCisJZWxldmF0b3I9CVtJT1NDSEVEXQorCQkJRm9ybWF0OiB7ImFzInwiY2ZxInwiZGVhZGxpbmUifCJub29wIn0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2Jsb2NrL2FzLWlvc2NoZWQudHh0CisJCQlhbmQgRG9jdW1lbnRhdGlvbi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLnR4dCBmb3IgZGV0YWlscy4KKworCWVuZm9yY2luZwlbU0VMSU5VWF0gU2V0IGluaXRpYWwgZW5mb3JjaW5nIHN0YXR1cy4KKwkJCUZvcm1hdDogeyIwIiB8ICIxIn0KKwkJCVNlZSBzZWN1cml0eS9zZWxpbnV4L0tjb25maWcgaGVscCB0ZXh0LgorCQkJMCAtLSBwZXJtaXNzaXZlIChsb2cgb25seSwgbm8gZGVuaWFscykuCisJCQkxIC0tIGVuZm9yY2luZyAoZGVueSBhbmQgbG9nKS4KKwkJCURlZmF1bHQgdmFsdWUgaXMgMC4KKwkJCVZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhIC9zZWxpbnV4L2VuZm9yY2UuCisKKwllczEzNzA9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8bGluZW91dD5bLDxtaWNiaWFzPl0KKwkJCVNlZSBhbHNvIGhlYWRlciBvZiBzb3VuZC9vc3MvZXMxMzcwLmMuCisKKwllczEzNzE9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8c3BkaWY+LFs8bm9taXg+LFs8YW1wbGlmaWVyPl1dCisJCQlTZWUgYWxzbyBoZWFkZXIgb2Ygc291bmQvb3NzL2VzMTM3MS5jLgorIAorCWV0aGVyPQkJW0hXLE5FVF0gRXRoZXJuZXQgY2FyZHMgcGFyYW1ldGVycworCQkJVGhpcyBvcHRpb24gaXMgb2Jzb2xldGVkIGJ5IHRoZSAibmV0ZGV2PSIgb3B0aW9uLCB3aGljaAorCQkJaGFzIGVxdWl2YWxlbnQgdXNhZ2UuIFNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworCWV1cndkdD0JCVtIVyxXRFRdIEV1cm90ZWNoIENQVS0xMjIwLzE0MTAgb25ib2FyZCB3YXRjaGRvZy4KKwkJCUZvcm1hdDogPGlvPlssPGlycT5dCisKKwlmZF9tY3M9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2ZkX21jcy5jLgorCisJZmRvbWFpbj0JW0hXLFNDU0ldCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9mZG9tYWluLmMuCisKKwlmbG9wcHk9CQlbSFddCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9mbG9wcHkudHh0LgorCisJZnRhcGU9CQlbSFddIEZsb3BweSBUYXBlIHN1YnN5c3RlbSBkZWJ1Z2dpbmcgb3B0aW9ucy4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2Z0YXBlLnR4dC4KKworCWdhbWVjb24ubWFwWzJ8M109CisJCQlbSFcsSk9ZXSBNdWx0aXN5c3RlbSBqb3lzdGljayBhbmQgTkVTL1NORVMvUFNYIHBhZAorCQkJc3VwcG9ydCB2aWEgcGFyYWxsZWwgcG9ydCAodXAgdG8gNSBkZXZpY2VzIHBlciBwb3J0KQorCQkJRm9ybWF0OiA8cG9ydCM+LDxwYWQxPiw8cGFkMj4sPHBhZDM+LDxwYWQ0Piw8cGFkNT4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKKworCWdhbW1hPQkJW0hXLERSTV0KKworCWdkdGg9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2dkdGguYy4KKworCWdwdAkJW0VGSV0gRm9yY2VzIGRpc2sgd2l0aCB2YWxpZCBHUFQgc2lnbmF0dXJlIGJ1dAorCQkJaW52YWxpZCBQcm90ZWN0aXZlIE1CUiB0byBiZSB0cmVhdGVkIGFzIEdQVC4KKworCWdzY2Q9CQlbSFcsQ0RdCisJCQlGb3JtYXQ6IDxpbz4KKworCWd0OTYxMDBldGg9CVtORVRdIE1JUFMgR1Q5NjEwMCBBZHZhbmNlZCBDb21tdW5pY2F0aW9uIENvbnRyb2xsZXIKKworCWd1cz0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTE2PgorIAorCWd2cDExPQkJW0hXLFNDU0ldCisKKwloYXNoZGlzdD0JW0tOTCxOVU1BXSBMYXJnZSBoYXNoZXMgYWxsb2NhdGVkIGR1cmluZyBib290CisJCQlhcmUgZGlzdHJpYnV0ZWQgYWNyb3NzIE5VTUEgbm9kZXMuICBEZWZhdWx0cyBvbgorCQkJZm9yIElBLTY0LCBvZmYgb3RoZXJ3aXNlLgorCisJaGNsPQkJW0lBLTY0XSBTR0kncyBIYXJkd2FyZSBHcmFwaCBjb21wYXRpYmlsaXR5IGxheWVyCisKKwloZD0JCVtFSURFXSAoRSlJREUgaGFyZCBkcml2ZSBzdWJzeXN0ZW0gZ2VvbWV0cnkKKwkJCUZvcm1hdDogPGN5bD4sPGhlYWQ+LDxzZWN0PgorCisJaGQ/PQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtCisJaGQ/bHVuPQkJU2VlIERvY3VtZW50YXRpb24vaWRlLnR4dC4KKworCWhpZ2htZW09bm5bS01HXQlbS05MLEJPT1RdIGZvcmNlcyB0aGUgaGlnaG1lbSB6b25lIHRvIGhhdmUgYW4gZXhhY3QKKwkJCXNpemUgb2YgPG5uPi4gVGhpcyB3b3JrcyBldmVuIG9uIGJveGVzIHRoYXQgaGF2ZSBubworCQkJaGlnaG1lbSBvdGhlcndpc2UuIFRoaXMgYWxzbyB3b3JrcyB0byByZWR1Y2UgaGlnaG1lbQorCQkJc2l6ZSBvbiBiaWdnZXIgYm94ZXMuCisKKwloaXNheD0JCVtIVyxJU0ROXQorCQkJU2VlIERvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXguCisKKwlodWdlcGFnZXM9CVtIVyxJQS0zMixJQS02NF0gTWF4aW1hbCBudW1iZXIgb2YgSHVnZVRMQiBwYWdlcy4KKworCW5vaXJxYmFsYW5jZQlbSUEtMzIsU01QLEtOTF0gRGlzYWJsZSBrZXJuZWwgaXJxIGJhbGFuY2luZworCisJaTgwNDIuZGlyZWN0CVtIV10gUHV0IGtleWJvYXJkIHBvcnQgaW50byBub24tdHJhbnNsYXRlZCBtb2RlCisJaTgwNDIuZHVtYmtiZAlbSFddIFByZXRlbmQgdGhhdCBjb250cm9sbGVkIGNhbiBvbmx5IHJlYWQgZGF0YSBmcm9tCisJCQkgICAgIGtleWJvYXJkIGFuZCBjYW4gbm90IGNvbnRyb2wgaXRzIHN0YXRlCisJCQkgICAgIChEb24ndCBhdHRlbXB0IHRvIGJsaW5rIHRoZSBsZWRzKQorCWk4MDQyLm5vYXV4CVtIV10gRG9uJ3QgY2hlY2sgZm9yIGF1eGlsaWFyeSAoPT0gbW91c2UpIHBvcnQKKwlpODA0Mi5ub211eAlbSFddIERvbid0IGNoZWNrIHByZXNlbmNlIG9mIGFuIGFjdGl2ZSBtdWx0aXBsZXhpbmcKKwkJCSAgICAgY29udHJvbGxlcgorCWk4MDQyLm5vcG5wCVtIV10gRG9uJ3QgdXNlIEFDUElQblAgLyBQblBCSU9TIHRvIGRpc2NvdmVyIEtCRC9BVVgKKwkJCSAgICAgY29udHJvbGxlcnMKKwlpODA0Mi5wYW5pY2JsaW5rPQorCQkJW0hXXSBGcmVxdWVuY3kgd2l0aCB3aGljaCBrZXlib2FyZCBMRURzIHNob3VsZCBibGluaworCQkJICAgICB3aGVuIGtlcm5lbCBwYW5pY3MgKGRlZmF1bHQgaXMgMC41IHNlYykKKwlpODA0Mi5yZXNldAlbSFddIFJlc2V0IHRoZSBjb250cm9sbGVyIGR1cmluZyBpbml0IGFuZCBjbGVhbnVwCisJaTgwNDIudW5sb2NrCVtIV10gVW5sb2NrIChpZ25vcmUpIHRoZSBrZXlsb2NrCisKKwlpODEwPQkJW0hXLERSTV0KKworCWk4ay5mb3JjZQlbSFddIEFjdGl2YXRlIGk4ayBkcml2ZXIgZXZlbiBpZiBTTU0gQklPUyBzaWduYXR1cmUKKwkJCWRvZXMgbm90IG1hdGNoIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZGVscy4KKwlpOGsucG93ZXJfc3RhdHVzCisJCQlbSFddIFJlcG9ydCBwb3dlciBzdGF0dXMgaW4gL3Byb2MvaThrCisJCQkoZGlzYWJsZWQgYnkgZGVmYXVsdCkKKwlpOGsucmVzdHJpY3RlZAlbSFddIEFsbG93IGNvbnRyb2xsaW5nIGZhbnMgb25seSBpZiBTWVNfQURNSU4KKwkJCWNhcGFiaWxpdHkgaXMgc2V0LgorCisJaWJtbWNhc2NzaT0JW0hXLE1DQSxTQ1NJXSBJQk0gTWljcm9DaGFubmVsIFNDU0kgYWRhcHRlcgorCQkJU2VlIERvY3VtZW50YXRpb24vbWNhLnR4dC4KKworCWljbj0JCVtIVyxJU0ROXQorCQkJRm9ybWF0OiA8aW8+Wyw8bWVtYmFzZT5bLDxpY25faWQ+Wyw8aWNuX2lkMj5dXV0KKworCWlkZT0JCVtIV10gKEUpSURFIHN1YnN5c3RlbQorCQkJRm9ybWF0OiBpZGU9bm9kbWEgb3IgaWRlPWRvdWJsZXIgb3IgaWRlPXJldmVyc2UKKwkJCVNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQuCisKKwlpZGU/PQkJW0hXXSAoRSlJREUgc3Vic3lzdGVtCisJCQlGb3JtYXQ6IGlkZT89bm9wcm9iZSBvciBjaGlwc2V0IHNwZWNpZmljIHBhcmFtZXRlcnMuCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgorCQorCWlkZWJ1cz0JCVtIV10gKEUpSURFIHN1YnN5c3RlbSAtIFZMQi9QQ0kgYnVzIHNwZWVkCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0LgorCisJaWRsZT0JCVtIV10KKwkJCUZvcm1hdDogaWRsZT1wb2xsIG9yIGlkbGU9aGFsdAorIAorCWloYXNoX2VudHJpZXM9CVtLTkxdCisJCQlTZXQgbnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgaW5vZGUgY2FjaGUuCisKKwlpbjIwMDA9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2luMjAwMC5jLgorCisJaW5pdD0JCVtLTkxdCisJCQlGb3JtYXQ6IDxmdWxsX3BhdGg+CisJCQlSdW4gc3BlY2lmaWVkIGJpbmFyeSBpbnN0ZWFkIG9mIC9zYmluL2luaXQgYXMgaW5pdAorCQkJcHJvY2Vzcy4KKworCWluaXRjYWxsX2RlYnVnCVtLTkxdIFRyYWNlIGluaXRjYWxscyBhcyB0aGV5IGFyZSBleGVjdXRlZC4gIFVzZWZ1bAorCQkJZm9yIHdvcmtpbmcgb3V0IHdoZXJlIHRoZSBrZXJuZWwgaXMgZHlpbmcgZHVyaW5nCisJCQlzdGFydHVwLgorCisJaW5pdHJkPQkJW0JPT1RdIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbml0aWFsIHJhbWRpc2sKKworCWlucG9ydC5pcnE9CVtIV10gSW5wb3J0IChBVEkgWEwgYW5kIE1pY3Jvc29mdCkgYnVzbW91c2UgZHJpdmVyCisJCQlGb3JtYXQ6IDxpcnE+CisKKwlpbnR0ZXN0PQlbSUE2NF0KKworCWlvNz0JCVtIV10gSU83IGZvciBNYXJ2ZWwgYmFzZWQgYWxwaGEgc3lzdGVtcworCQkJU2VlIGNvbW1lbnQgYmVmb3JlIG1hcnZlbF9zcGVjaWZ5X2lvNyBpbgorCQkJYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy4KKworCWlwPQkJW0lQX1BOUF0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0LgorCisJaXAyPQkJW0hXXSBTZXQgSU8vSVJRIHBhaXJzIGZvciB1cCB0byA0IEludGVsbGlQb3J0IGJvYXJkcworCQkJU2VlIGNvbW1lbnQgYmVmb3JlIGlwMl9zZXR1cCgpIGluIGRyaXZlcnMvY2hhci9pcDIuYy4KKworCWlwcz0JCVtIVyxTQ1NJXSBBZGFwdGVjIC8gSUJNIFNlcnZlUkFJRCBjb250cm9sbGVyCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9pcHMuYy4KKworCWlzYXBucD0JCVtJU0FQTlBdCisJCQlGb3JtYXQ6IDxSRFA+LCA8cmVzZXQ+LCA8cGNpX3NjYW4+LCA8dmVyYm9zaXR5PgorCisJaXNvbGNwdXM9CVtLTkwsU01QXSBJc29sYXRlIENQVXMgZnJvbSB0aGUgZ2VuZXJhbCBzY2hlZHVsZXIuCisJCQlGb3JtYXQ6IDxjcHUgbnVtYmVyPiwuLi4sPGNwdSBudW1iZXI+CisJCQlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIENQVXMKKwkJCXRvIGlzb2xhdGUgZnJvbSB0aGUgZ2VuZXJhbCBTTVAgYmFsYW5jaW5nIGFuZCBzY2hlZHVsaW5nCisJCQlhbGdvcml0aG1zLiBUaGUgb25seSB3YXkgdG8gbW92ZSBhIHByb2Nlc3Mgb250byBvciBvZmYKKwkJCWFuICJpc29sYXRlZCIgQ1BVIGlzIHZpYSB0aGUgQ1BVIGFmZmluaXR5IHN5c2NhbGxzLgorCQkJPGNwdSBudW1iZXI+IGJlZ2lucyBhdCAwIGFuZCB0aGUgbWF4aW11bSB2YWx1ZSBpcworCQkJIm51bWJlciBvZiBDUFVzIGluIHN5c3RlbSAtIDEiLgorCisJCQlUaGlzIG9wdGlvbiBpcyB0aGUgcHJlZmVycmVkIHdheSB0byBpc29sYXRlIENQVXMuIFRoZQorCQkJYWx0ZXJuYXRpdmUgLSBtYW51YWxseSBzZXR0aW5nIHRoZSBDUFUgbWFzayBvZiBhbGwgdGFza3MKKwkJCWluIHRoZSBzeXN0ZW0gY2FuIGNhdXNlIHByb2JsZW1zIGFuZCBzdWJvcHRpbWFsIGxvYWQKKwkJCWJhbGFuY2VyIHBlcmZvcm1hbmNlLgorCisJaXNwMTY9CQlbSFcsQ0RdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPHNldHVwPgorCisJaXVjdj0JCVtIVyxORVRdIAorCisJanM9CQlbSFcsSk9ZXSBBbmFsb2cgam95c3RpY2sKKwkJCVNlZSBEb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dC4KKworCWtlZXBpbml0cmQJW0hXLEFSTV0KKworCWtzdGFjaz1OCVtJQS0zMiwgWDg2LTY0XSBQcmludCBOIHdvcmRzIGZyb20gdGhlIGtlcm5lbCBzdGFjaworCQkJaW4gb29wcyBkdW1wcy4KKworCWwyY3I9CQlbUFBDXQorCisJbGFwaWMJCVtJQS0zMixBUElDXSBFbmFibGUgdGhlIGxvY2FsIEFQSUMgZXZlbiBpZiBCSU9TIGRpc2FibGVkIGl0LgorCisJbGFzaT0JCVtIVyxTQ1NJXSBQQVJJU0MgTEFTSSBkcml2ZXIgZm9yIHRoZSA1M2M3MDAgY2hpcAorCQkJRm9ybWF0OiBhZGRyOjxpbz4saXJxOjxpcnE+CisKKwlsbHNjKj0JCVtJQTY0XQorCQkJU2VlIGZ1bmN0aW9uIHByaW50X3BhcmFtcygpIGluIGFyY2gvaWE2NC9zbi9rZXJuZWwvbGxzYzQuYy4KKworCWxvYWRfcmFtZGlzaz0JW1JBTV0gTGlzdCBvZiByYW1kaXNrcyB0byBsb2FkIGZyb20gZmxvcHB5CisJCQlTZWUgRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dC4KKworCWxvY2tkLnVkcHBvcnQ9CVtORlNdCisKKwlsb2NrZC50Y3Bwb3J0PQlbTkZTXQorCisJbG9naWJtLmlycT0JW0hXLE1PVVNFXSBMb2dpdGVjaCBCdXMgTW91c2UgRHJpdmVyCisJCQlGb3JtYXQ6IDxpcnE+CisKKwlsb2dsZXZlbD0JQWxsIEtlcm5lbCBNZXNzYWdlcyB3aXRoIGEgbG9nbGV2ZWwgc21hbGxlciB0aGFuIHRoZQorCQkJY29uc29sZSBsb2dsZXZlbCB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuIEl0IGNhbgorCQkJYWxzbyBiZSBjaGFuZ2VkIHdpdGgga2xvZ2Qgb3Igb3RoZXIgcHJvZ3JhbXMuIFRoZQorCQkJbG9nbGV2ZWxzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisKKwkJCTAgKEtFUk5fRU1FUkcpCQlzeXN0ZW0gaXMgdW51c2FibGUKKwkJCTEgKEtFUk5fQUxFUlQpCQlhY3Rpb24gbXVzdCBiZSB0YWtlbiBpbW1lZGlhdGVseQorCQkJMiAoS0VSTl9DUklUKQkJY3JpdGljYWwgY29uZGl0aW9ucworCQkJMyAoS0VSTl9FUlIpCQllcnJvciBjb25kaXRpb25zCisJCQk0IChLRVJOX1dBUk5JTkcpCXdhcm5pbmcgY29uZGl0aW9ucworCQkJNSAoS0VSTl9OT1RJQ0UpCQlub3JtYWwgYnV0IHNpZ25pZmljYW50IGNvbmRpdGlvbgorCQkJNiAoS0VSTl9JTkZPKQkJaW5mb3JtYXRpb25hbAorCQkJNyAoS0VSTl9ERUJVRykJCWRlYnVnLWxldmVsIG1lc3NhZ2VzCisKKwlsb2dfYnVmX2xlbj1uCVNldHMgdGhlIHNpemUgb2YgdGhlIHByaW50ayByaW5nIGJ1ZmZlciwgaW4gYnl0ZXMuCisJCQlGb3JtYXQgaXMgbiwgbmssIG5NLiAgbiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgVGhlCisJCQlkZWZhdWx0IGlzIHNldCBpbiBrZXJuZWwgY29uZmlnLgorCisJbHA9MAkJW0xQXQlTcGVjaWZ5IHBhcmFsbGVsIHBvcnRzIHRvIHVzZSwgZS5nLAorCWxwPXBvcnRbLHBvcnQuLi5dCWxwPW5vbmUscGFycG9ydDAgKGxwMCBub3QgY29uZmlndXJlZCwgbHAxIHVzZXMKKwlscD1yZXNldAkJZmlyc3QgcGFyYWxsZWwgcG9ydCkuICdscD0wJyBkaXNhYmxlcyB0aGUKKwlscD1hdXRvCQkJcHJpbnRlciBkcml2ZXIuICdscD1yZXNldCcgKHdoaWNoIGNhbiBiZQorCQkJCXNwZWNpZmllZCBpbiBhZGRpdGlvbiB0byB0aGUgcG9ydHMpIGNhdXNlcworCQkJCWF0dGFjaGVkIHByaW50ZXJzIHRvIGJlIHJlc2V0LiBVc2luZworCQkJCWxwPXBvcnQxLHBvcnQyLC4uLiBzcGVjaWZpZXMgdGhlIHBhcmFsbGVsIHBvcnRzCisJCQkJdG8gYXNzb2NpYXRlIGxwIGRldmljZXMgd2l0aCwgc3RhcnRpbmcgd2l0aAorCQkJCWxwMC4gQSBwb3J0IHNwZWNpZmljYXRpb24gbWF5IGJlICdub25lJyB0byBza2lwCisJCQkJdGhhdCBscCBkZXZpY2UsIG9yIGEgcGFycG9ydCBuYW1lIHN1Y2ggYXMKKwkJCQkncGFycG9ydDAnLiBTcGVjaWZ5aW5nICdscD1hdXRvJyBpbnN0ZWFkIG9mIGEKKwkJCQlwb3J0IHNwZWNpZmljYXRpb24gbGlzdCBtZWFucyB0aGF0IGRldmljZSBJRHMKKwkJCQlmcm9tIGVhY2ggcG9ydCBzaG91bGQgYmUgZXhhbWluZWQsIHRvIHNlZSBpZgorCQkJCWFuIElFRUUgMTI4NC1jb21wbGlhbnQgcHJpbnRlciBpcyBhdHRhY2hlZDsgaWYKKwkJCQlzbywgdGhlIGRyaXZlciB3aWxsIG1hbmFnZSB0aGF0IHByaW50ZXIuCisJCQkJU2VlIGFsc28gaGVhZGVyIG9mIGRyaXZlcnMvY2hhci9scC5jLgorCisJbHBqPW4JCVtLTkxdCisJCQlTZXRzIGxvb3BzX3Blcl9qaWZmeSB0byBnaXZlbiBjb25zdGFudCwgdGh1cyBhdm9pZGluZworCQkJdGltZS1jb25zdW1pbmcgYm9vdC10aW1lIGF1dG9kZXRlY3Rpb24gKHVwIHRvIDI1MCBtcyBwZXIKKwkJCUNQVSkuIDAgZW5hYmxlcyBhdXRvZGV0ZWN0aW9uIChkZWZhdWx0KS4gVG8gZGV0ZXJtaW5lCisJCQl0aGUgY29ycmVjdCB2YWx1ZSBmb3IgeW91ciBrZXJuZWwsIGJvb3Qgd2l0aCBub3JtYWwKKwkJCWF1dG9kZXRlY3Rpb24gYW5kIHNlZSB3aGF0IHZhbHVlIGlzIHByaW50ZWQuIE5vdGUgdGhhdAorCQkJb24gU01QIHN5c3RlbXMgdGhlIHByZXNldCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIENQVXMsCisJCQl3aGljaCBpcyBsaWtlbHkgdG8gY2F1c2UgcHJvYmxlbXMgaWYgeW91ciBDUFVzIG5lZWQKKwkJCXNpZ25pZmljYW50bHkgZGl2ZXJnZW50IHNldHRpbmdzLiBBbiBpbmNvcnJlY3QgdmFsdWUKKwkJCXdpbGwgY2F1c2UgZGVsYXlzIGluIHRoZSBrZXJuZWwgdG8gYmUgd3JvbmcsIGxlYWRpbmcgdG8KKwkJCXVucHJlZGljdGFibGUgSS9PIGVycm9ycyBhbmQgb3RoZXIgYnJlYWthZ2UuIEFsdGhvdWdoCisJCQl1bmxpa2VseSwgaW4gdGhlIGV4dHJlbWUgY2FzZSB0aGlzIG1pZ2h0IGRhbWFnZSB5b3VyCisJCQloYXJkd2FyZS4KKworCWx0cGM9CQlbTkVUXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+CisKKwltYWM1MzgwPQlbSFcsU0NTSV0KKwkJCUZvcm1hdDogPGNhbl9xdWV1ZT4sPGNtZF9wZXJfbHVuPiw8c2dfdGFibGVzaXplPiw8aG9zdGlkPiw8dXNlX3RhZ3M+CisKKwltYWM1M2M5eD0JW0hXLFNDU0ldCisJCQlGb3JtYXQ6IDxudW1fZXNwcz4sPGRpc2Nvbm5lY3Q+LDxub3N5bmM+LDxjYW5fcXVldWU+LDxjbWRfcGVyX2x1bj4sPHNnX3RhYmxlc2l6ZT4sPGhvc3RpZD4sPHVzZV90YWdzPgorCisJbWFjaHZlYz0JW0lBNjRdCisJCQlGb3JjZSB0aGUgdXNlIG9mIGEgcGFydGljdWxhciBtYWNoaW5lLXZlY3RvciAobWFjaHZlYykgaW4gYSBnZW5lcmljCisJCQlrZXJuZWwuICBFeGFtcGxlOiBtYWNodmVjPWhwengxX3N3aW90bGIKKworCW1hZDE2PQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMTY+LDxtcHVfaW8+LDxtcHVfaXJxPiw8am95c3RpY2s+CisKKwltYXVpPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPgorIAorCW1heF9sb29wPSAgICAgICBbTE9PUF0gTWF4aW11bSBudW1iZXIgb2YgbG9vcGJhY2sgZGV2aWNlcyB0aGF0IGNhbgorCQkJYmUgbW91bnRlZAorCQkJRm9ybWF0OiA8MS0yNTY+CisKKwltYXhjcHVzPQlbU01QXSBNYXhpbXVtIG51bWJlciBvZiBwcm9jZXNzb3JzIHRoYXQJYW4gU01QIGtlcm5lbAorCQkJc2hvdWxkIG1ha2UgdXNlIG9mCisKKwltYXhfbHVucz0JW1NDU0ldIE1heGltdW0gbnVtYmVyIG9mIExVTnMgdG8gcHJvYmUKKwkJCVNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDJeMzItMS4KKworCW1heF9yZXBvcnRfbHVucz0KKwkJCVtTQ1NJXSBNYXhpbXVtIG51bWJlciBvZiBMVU5zIHJlY2VpdmVkCisJCQlTaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAxNjM4NC4KKworCW1jYS1wZW50aXVtCVtCVUdTPUlBLTMyXQorCisJbWNhdGVzdD0JW0lBLTY0XQorCisJbWNkPQkJW0hXLENEXQorCQkJRm9ybWF0OiA8cG9ydD4sPGlycT4sPG1pdHN1bWlfYnVnXzkzX3dhaXQ+CisKKwltY2R4PQkJW0hXLENEXQorCisJbWNlCQlbSUEtMzJdIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uCisKKwltZD0JCVtIV10gUkFJRCBzdWJzeXN0ZW1zIGRldmljZXMgYW5kIGxldmVsCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9tZC50eHQuCisgCisJbWRhY29uPQkJW01EQV0KKwkJCUZvcm1hdDogPGZpcnN0Piw8bGFzdD4KKwkJCVNwZWNpZmllcyByYW5nZSBvZiBjb25zb2xlcyB0byBiZSBjYXB0dXJlZCBieSB0aGUgTURBLgorIAorCW1lbT1ubltLTUddCVtLTkwsQk9PVF0gRm9yY2UgdXNhZ2Ugb2YgYSBzcGVjaWZpYyBhbW91bnQgb2YgbWVtb3J5CisJCQlBbW91bnQgb2YgbWVtb3J5IHRvIGJlIHVzZWQgd2hlbiB0aGUga2VybmVsIGlzIG5vdCBhYmxlCisJCQl0byBzZWUgdGhlIHdob2xlIHN5c3RlbSBtZW1vcnkgb3IgZm9yIHRlc3QuCisJCQlbSUEtMzJdIFVzZSB0b2dldGhlciB3aXRoIG1lbW1hcD0gdG8gYXZvaWQgcGh5c2ljYWwKKwkJCWFkZHJlc3Mgc3BhY2UgY29sbGlzaW9ucy4gV2l0aG91dCBtZW1tYXA9IFBDSSBkZXZpY2VzCisJCQljb3VsZCBiZSBwbGFjZWQgYXQgYWRkcmVzc2VzIGJlbG9uZ2luZyB0byB1bnVzZWQgUkFNLgorCisJbWVtPW5vcGVudGl1bQlbQlVHUz1JQS0zMl0gRGlzYWJsZSB1c2FnZSBvZiA0TUIgcGFnZXMgZm9yIGtlcm5lbAorCQkJbWVtb3J5LgorCisJbWVtbWFwPWV4YWN0bWFwCVtLTkwsSUEtMzJdIEVuYWJsZSBzZXR0aW5nIG9mIGFuIGV4YWN0CisJCQlFODIwIG1lbW9yeSBtYXAsIGFzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKwkJCVN1Y2ggbWVtbWFwPWV4YWN0bWFwIGxpbmVzIGNhbiBiZSBjb25zdHJ1Y3RlZCBiYXNlZCBvbgorCQkJQklPUyBvdXRwdXQgb3Igb3RoZXIgcmVxdWlyZW1lbnRzLiBTZWUgdGhlIG1lbW1hcD1ubkBzcworCQkJb3B0aW9uIGRlc2NyaXB0aW9uLgorCisJbWVtbWFwPW5uW0tNR11Ac3NbS01HXQorCQkJW0tOTF0gRm9yY2UgdXNhZ2Ugb2YgYSBzcGVjaWZpYyByZWdpb24gb2YgbWVtb3J5CisJCQlSZWdpb24gb2YgbWVtb3J5IHRvIGJlIHVzZWQsIGZyb20gc3MgdG8gc3Mrbm4uCisKKwltZW1tYXA9bm5bS01HXSNzc1tLTUddCisJCQlbS05MLEFDUEldIE1hcmsgc3BlY2lmaWMgbWVtb3J5IGFzIEFDUEkgZGF0YS4KKwkJCVJlZ2lvbiBvZiBtZW1vcnkgdG8gYmUgdXNlZCwgZnJvbSBzcyB0byBzcytubi4KKworCW1lbW1hcD1ubltLTUddJHNzW0tNR10KKwkJCVtLTkwsQUNQSV0gTWFyayBzcGVjaWZpYyBtZW1vcnkgYXMgcmVzZXJ2ZWQuCisJCQlSZWdpb24gb2YgbWVtb3J5IHRvIGJlIHVzZWQsIGZyb20gc3MgdG8gc3Mrbm4uCisKKwltZXllLio9CQlbSFddIFNldCBNb3Rpb25FeWUgQ2FtZXJhIHBhcmFtZXRlcnMKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0LgorCisJbWdhPQkJW0hXLERSTV0KKworCW1vdXNlZGV2LnRhcF90aW1lPQorCQkJW01PVVNFXSBNYXhpbXVtIHRpbWUgYmV0d2VlbiBmaW5nZXIgdG91Y2hpbmcgYW5kCisJCQlsZWF2aW5nIHRvdWNocGFkIHN1cmZhY2UgZm9yIHRvdWNoIHRvIGJlIGNvbnNpZGVyZWQKKwkJCWEgdGFwIGFuZCBiZSByZXBvcnRlZCBhcyBhIGxlZnQgYnV0dG9uIGNsaWNrIChmb3IKKwkJCXRvdWNocGFkcyB3b3JraW5nIGluIGFic29sdXRlIG1vZGUgb25seSkuCisJCQlGb3JtYXQ6IDxtc2Vjcz4KKwltb3VzZWRldi54cmVzPQlbTU9VU0VdIEhvcml6b250YWwgc2NyZWVuIHJlc29sdXRpb24sIHVzZWQgZm9yIGRldmljZXMKKwkJCXJlcG9ydGluZyBhYnNvbHV0ZSBjb29yZGluYXRlcywgc3VjaCBhcyB0YWJsZXRzCisJbW91c2VkZXYueXJlcz0JW01PVVNFXSBWZXJ0aWNhbCBzY3JlZW4gcmVzb2x1dGlvbiwgdXNlZCBmb3IgZGV2aWNlcworCQkJcmVwb3J0aW5nIGFic29sdXRlIGNvb3JkaW5hdGVzLCBzdWNoIGFzIHRhYmxldHMKKworCW1wdTQwMT0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4KKworCU1URF9QYXJ0aXRpb249CVtNVERdCisJCQlGb3JtYXQ6IDxuYW1lPiw8cmVnaW9uLW51bWJlcj4sPHNpemU+LDxvZmZzZXQ+CisKKwlNVERfUmVnaW9uPQlbTVREXQorCQkJRm9ybWF0OiA8bmFtZT4sPHJlZ2lvbi1udW1iZXI+Wyw8YmFzZT4sPHNpemU+LDxidXN3aWR0aD4sPGFsdGJ1c3dpZHRoPl0KKworCW10ZHBhcnRzPQlbTVREXQorCQkJU2VlIGRyaXZlcnMvbXRkL2NtZGxpbmUuYy4KKworCW10b3VjaHVzYi5yYXdfY29vcmRpbmF0ZXM9CisJCQlbSFddIE1ha2UgdGhlIE1pY3JvVG91Y2ggVVNCIGRyaXZlciB1c2UgcmF3IGNvb3JkaW5hdGVzICgneScsIGRlZmF1bHQpCisJCQlvciBjb29rZWQgY29vcmRpbmF0ZXMgKCduJykKKworCW4yPQkJW05FVF0gU0RMIEluYy4gUklTQ29tL04yIHN5bmNocm9ub3VzIHNlcmlhbCBjYXJkCisKKwlOQ1JfRDcwMD0JW0hXLFNDU0ldCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9OQ1JfRDcwMC5jLgorCisJbmNyNTM4MD0JW0hXLFNDU0ldCisKKwluY3I1M2M0MDA9CVtIVyxTQ1NJXQorCisJbmNyNTNjNDAwYT0JW0hXLFNDU0ldCisKKwluY3I1M2M0MDZhPQlbSFcsU0NTSV0KKworCW5jcjUzYzh4eD0JW0hXLFNDU0ldCisKKwluZXRkZXY9CQlbTkVUXSBOZXR3b3JrIGRldmljZXMgcGFyYW1ldGVycworCQkJRm9ybWF0OiA8aXJxPiw8aW8+LDxtZW1fc3RhcnQ+LDxtZW1fZW5kPiw8bmFtZT4KKwkJCU5vdGUgdGhhdCBtZW1fc3RhcnQgaXMgb2Z0ZW4gb3ZlcmxvYWRlZCB0byBtZWFuCisJCQlzb21ldGhpbmcgZGlmZmVyZW50IGFuZCBkcml2ZXItc3BlY2lmaWMuCisgCisJbmZzYWRkcnM9CVtORlNdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dC4KKworCW5mc3Jvb3Q9CVtORlNdIG5mcyByb290IGZpbGVzeXN0ZW0gZm9yIGRpc2stbGVzcyBib3hlcy4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0LgorCisJbm1pX3dhdGNoZG9nPQlbS05MLEJVR1M9SUEtMzJdIERlYnVnZ2luZyBmZWF0dXJlcyBmb3IgU01QIGtlcm5lbHMKKworCW5vMzg3CQlbQlVHUz1JQS0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0byB1c2UgdGhlIDM4NyBtYXRocworCQkJZW11bGF0aW9uIGxpYnJhcnkgZXZlbiBpZiBhIDM4NyBtYXRocyBjb3Byb2Nlc3NvcgorCQkJaXMgcHJlc2VudC4KKworCW5vYWxpZ24JCVtLTkwsQVJNXSAKKyAKKwlub2FwaWMJCVtTTVAsQVBJQ10gVGVsbHMgdGhlIGtlcm5lbCB0byBub3QgbWFrZSB1c2Ugb2YgYW55CisJCQlJT0FQSUNzIHRoYXQgbWF5IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4KKworCW5vYXN5bmMJCVtIVyxNNjhLXSBEaXNhYmxlcyBhc3luYyBhbmQgc3luYyBuZWdvdGlhdGlvbiBmb3IKKwkJCWFsbCBkZXZpY2VzLgorCisJbm9iYXRzCQlbUFBDXSBEbyBub3QgdXNlIEJBVHMgZm9yIG1hcHBpbmcga2VybmVsIGxvd21lbQorCQkJb24gIkNsYXNzaWMiIFBQQyBjb3Jlcy4KKworCW5vY2FjaGUJCVtBUk1dCisgCisJbm9kaXNjb25uZWN0CVtIVyxTQ1NJLE02OEtdIERpc2FibGVzIFNDU0kgZGlzY29ubmVjdHMuCisKKwlub2V4ZWMJCVtJQS02NF0KKworCW5vZXhlYwkJW0lBLTMyLCBYODYtNjRdCisJCQlub2V4ZWM9b246IGVuYWJsZSBub24tZXhlY3V0YWJsZSBtYXBwaW5ncyAoZGVmYXVsdCkKKwkJCW5vZXhlYz1vZmY6IGRpc2FibGUgbm4tZXhlY3V0YWJsZSBtYXBwaW5ncworCisJbm9meHNyCQlbQlVHUz1JQS0zMl0KKworCW5vaGx0CQlbQlVHUz1BUk1dCisgCisJbm8taGx0CQlbQlVHUz1JQS0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoZSBobHQKKwkJCWluc3RydWN0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYW5kIG5vdCB0bworCQkJdXNlIGl0LgorCisJbm9oYWx0CQlbSUEtNjRdIFRlbGxzIHRoZSBrZXJuZWwgbm90IHRvIHVzZSB0aGUgcG93ZXIgc2F2aW5nCisJCQlmdW5jdGlvbiBQQUxfSEFMVF9MSUdIVCB3aGVuIGlkbGUuIFRoaXMgaW5jcmVhc2VzCisJCQlwb3dlci1jb25zdW1wdGlvbi4gT24gdGhlIHBvc2l0aXZlIHNpZGUsIGl0IHJlZHVjZXMKKwkJCWludGVycnVwdCB3YWtlLXVwIGxhdGVuY3ksIHdoaWNoIG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlCisJCQlpbiBjZXJ0YWluIGVudmlyb25tZW50cyBzdWNoIGFzIG5ldHdvcmtlZCBzZXJ2ZXJzIG9yCisJCQlyZWFsLXRpbWUgc3lzdGVtcy4KKworCW5vaXJxZGVidWcJW0lBLTMyXSBEaXNhYmxlcyB0aGUgY29kZSB3aGljaCBhdHRlbXB0cyB0byBkZXRlY3QgYW5kCisJCQlkaXNhYmxlIHVuaGFuZGxlZCBpbnRlcnJ1cHQgc291cmNlcy4KKworCW5vaXNhcG5wCVtJU0FQTlBdIERpc2FibGVzIElTQSBQblAgY29kZS4KKworCW5vaW5pdHJkCVtSQU1dIFRlbGxzIHRoZSBrZXJuZWwgbm90IHRvIGxvYWQgYW55IGNvbmZpZ3VyZWQKKwkJCWluaXRpYWwgUkFNIGRpc2suCisKKwlub2ludHJvdXRlCVtJQS02NF0KKworCW5vbGFwaWMJCVtJQS0zMixBUElDXSBEbyBub3QgZW5hYmxlIG9yIHVzZSB0aGUgbG9jYWwgQVBJQy4KKworCW5vbHRsYnMJCVtQUENdIERvIG5vdCB1c2UgbGFyZ2UgcGFnZS90bGIgZW50cmllcyBmb3Iga2VybmVsCisJCQlsb3dtZW0gbWFwcGluZyBvbiBQUEM0MHguCisKKwlub21jZQkJW0lBLTMyXSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbgorCisJbm9yZXNpZHVhbAlbUFBDXSBEb24ndCB1c2UgcmVzaWR1YWwgZGF0YSBvbiBQUmVQIG1hY2hpbmVzLgorCisJbm9yZXN1bWUJW1NXU1VTUF0gRGlzYWJsZXMgcmVzdW1lIGFuZCByZXN0b3JlIG9yaWdpbmFsIHN3YXAgc3BhY2UuCisgCisJbm8tc2Nyb2xsCVtWR0FdIERpc2FibGVzIHNjcm9sbGJhY2suCisJCQlUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgQnJhaWxsZXggaWI4MC1waWV6byBCcmFpbGxlCisJCQlyZWFkZXIgbWFkZSBieSBGLkguIFBhcGVubWVpZXIgKEdlcm1hbnkpLgorCisJbm9zYmFnYXJ0CVtJQS02NF0KKworCW5vc21wCQlbU01QXSBUZWxscyBhbiBTTVAga2VybmVsIHRvIGFjdCBhcyBhIFVQIGtlcm5lbC4KKworCW5vc3luYwkJW0hXLE02OEtdIERpc2FibGVzIHN5bmMgbmVnb3RpYXRpb24gZm9yIGFsbCBkZXZpY2VzLgorCisJbm90c2MJCVtCVUdTPUlBLTMyXSBEaXNhYmxlIFRpbWUgU3RhbXAgQ291bnRlcgorCisJbm91c2IJCVtVU0JdIERpc2FibGUgdGhlIFVTQiBzdWJzeXN0ZW0KKworCW5vd2IJCVtBUk1dCisgCisJb3BsMz0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4KKworCW9wbDNzYT0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxtcHVfaW8+LDxtcHVfaXJxPgorCisJb3BsM3NhMj0JW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc19pbz4sPG1wdV9pbz4sPHltb2RlPiw8bG9vcGJhY2s+Wyw8aXNhcG5wPiw8bXVsdGlwbGVdCisgCisJb3Byb2ZpbGUudGltZXI9CVtIV10KKwkJCVVzZSB0aW1lciBpbnRlcnJ1cHQgaW5zdGVhZCBvZiBwZXJmb3JtYW5jZSBjb3VudGVycworCisJb3B0Y2Q9CQlbSFcsQ0RdCisJCQlGb3JtYXQ6IDxpbz4KKworCW9zc3Q9CQlbSFcsU0NTSV0gU0NTSSBUYXBlIERyaXZlcgorCQkJRm9ybWF0OiA8YnVmZmVyX3NpemU+LDx3cml0ZV90aHJlc2hvbGQ+CisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0LgorCisJcGFuaWM9CQlbS05MXSBLZXJuZWwgYmVoYXZpb3VyIG9uIHBhbmljCisJCQlGb3JtYXQ6IDx0aW1lb3V0PgorCisJcGFya2JkLnBvcnQ9CVtIV10gUGFyYWxsZWwgcG9ydCBudW1iZXIgdGhlIGtleWJvYXJkIGFkYXB0ZXIgaXMKKwkJCWNvbm5lY3RlZCB0bywgZGVmYXVsdCBpcyAwLgorCQkJRm9ybWF0OiA8cGFycG9ydCM+CisJcGFya2JkLm1vZGU9CVtIV10gUGFyYWxsZWwgcG9ydCBrZXlib2FyZCBhZGFwdGVyIG1vZGUgb2Ygb3BlcmF0aW9uLAorCQkJMCBmb3IgWFQsIDEgZm9yIEFUIChkZWZhdWx0IGlzIEFUKS4KKwkJCUZvcm1hdDogPG1vZGU+IAorCisJcGFycG9ydD0wCVtIVyxQUFRdCVNwZWNpZnkgcGFyYWxsZWwgcG9ydHMuIDAgZGlzYWJsZXMuCisJcGFycG9ydD1hdXRvCQkJVXNlICdhdXRvJyB0byBmb3JjZSB0aGUgZHJpdmVyIHRvIHVzZQorCXBhcnBvcnQ9MHhCQkJbLElSUVssRE1BXV0JYW55IElSUS9ETUEgc2V0dGluZ3MgZGV0ZWN0ZWQgKHRoZQorCQkJCQlkZWZhdWx0IGlzIHRvIGlnbm9yZSBkZXRlY3RlZCBJUlEvRE1BCisJCQkJCXNldHRpbmdzIGJlY2F1c2Ugb2YgcG9zc2libGUKKwkJCQkJY29uZmxpY3RzKS4gWW91IGNhbiBzcGVjaWZ5IHRoZSBiYXNlCisJCQkJCWFkZHJlc3MsIElSUSwgYW5kIERNQSBzZXR0aW5nczsgSVJRIGFuZAorCQkJCQlETUEgc2hvdWxkIGJlIG51bWJlcnMsIG9yICdhdXRvJyAoZm9yCisJCQkJCXVzaW5nIGRldGVjdGVkIHNldHRpbmdzIG9uIHRoYXQKKwkJCQkJcGFydGljdWxhciBwb3J0KSwgb3IgJ25vZmlmbycgKHRvIGF2b2lkCisJCQkJCXVzaW5nIGEgRklGTyBldmVuIGlmIGl0IGlzIGRldGVjdGVkKS4KKwkJCQkJUGFyYWxsZWwgcG9ydHMgYXJlIGFzc2lnbmVkIGluIHRoZQorCQkJCQlvcmRlciB0aGV5IGFyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQKKwkJCQkJbGluZSwgc3RhcnRpbmcgd2l0aCBwYXJwb3J0MC4KKworCXBhcnBvcnRfaW5pdF9tb2RlPQorCQkJW0hXLFBQVF0JQ29uZmlndXJlIFZJQSBwYXJhbGxlbCBwb3J0IHRvCisJCQkJCW9wZXJhdGUgaW4gc3BlY2lmaWMgbW9kZS4gVGhpcyBpcworCQkJCQluZWNlc3Nhcnkgb24gUGVnYXNvcyBjb21wdXRlciB3aGVyZQorCQkJCQlmaXJtd2FyZSBoYXMgbm8gb3B0aW9ucyBmb3Igc2V0dGluZyB1cAorCQkJCQlwYXJhbGxlbCBwb3J0IG1vZGUgYW5kIHNldHMgaXQgdG8KKwkJCQkJc3BwLiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBrbm93cworCQkJCQk2ODZhIGFuZCA4MjMxIGNoaXBzLgorCQkJRm9ybWF0OiBbc3BwfHBzMnxlcHB8ZWNwfGVjcGVwcF0KKworCXBhczI9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4sPHNiX2lvPiw8c2JfaXJxPiw8c2JfZG1hPiw8c2JfZG1hMTY+CisgCisJcGFzMTY9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3BhczE2LmMuCisKKwlwY2JpdD0JCVtIVyxJU0ROXQorCisJcGNkLgkJW1BBUklERV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMuCisJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3BhcmlkZS50eHQuCisKKwlwY2k9b3B0aW9uWyxvcHRpb24uLi5dCQlbUENJXSB2YXJpb3VzIFBDSSBzdWJzeXN0ZW0gb3B0aW9uczoKKwkJb2ZmCQkJW0lBLTMyXSBkb24ndCBwcm9iZSBmb3IgdGhlIFBDSSBidXMKKwkJYmlvcwkJCVtJQS0zMl0gZm9yY2UgdXNlIG9mIFBDSSBCSU9TLCBkb24ndCBhY2Nlc3MKKwkJCQkJdGhlIGhhcmR3YXJlIGRpcmVjdGx5LiBVc2UgdGhpcyBpZiB5b3VyIG1hY2hpbmUKKwkJCQkJaGFzIGEgbm9uLXN0YW5kYXJkIFBDSSBob3N0IGJyaWRnZS4KKwkJbm9iaW9zCQkJW0lBLTMyXSBkaXNhbGxvdyB1c2Ugb2YgUENJIEJJT1MsIG9ubHkgZGlyZWN0CisJCQkJCWhhcmR3YXJlIGFjY2VzcyBtZXRob2RzIGFyZSBhbGxvd2VkLiBVc2UgdGhpcworCQkJCQlpZiB5b3UgZXhwZXJpZW5jZSBjcmFzaGVzIHVwb24gYm9vdHVwIGFuZCB5b3UKKwkJCQkJc3VzcGVjdCB0aGV5IGFyZSBjYXVzZWQgYnkgdGhlIEJJT1MuCisJCWNvbmYxCQkJW0lBLTMyXSBGb3JjZSB1c2Ugb2YgUENJIENvbmZpZ3VyYXRpb24gTWVjaGFuaXNtIDEuCisJCWNvbmYyCQkJW0lBLTMyXSBGb3JjZSB1c2Ugb2YgUENJIENvbmZpZ3VyYXRpb24gTWVjaGFuaXNtIDIuCisJCW5vc29ydAkJCVtJQS0zMl0gRG9uJ3Qgc29ydCBQQ0kgZGV2aWNlcyBhY2NvcmRpbmcgdG8KKwkJCQkJb3JkZXIgZ2l2ZW4gYnkgdGhlIFBDSSBCSU9TLiBUaGlzIHNvcnRpbmcgaXMgZG9uZQorCQkJCQl0byBnZXQgYSBkZXZpY2Ugb3JkZXIgY29tcGF0aWJsZSB3aXRoIG9sZGVyIGtlcm5lbHMuCisJCWJpb3NpcnEJCQlbSUEtMzJdIFVzZSBQQ0kgQklPUyBjYWxscyB0byBnZXQgdGhlIGludGVycnVwdAorCQkJCQlyb3V0aW5nIHRhYmxlLiBUaGVzZSBjYWxscyBhcmUga25vd24gdG8gYmUgYnVnZ3kKKwkJCQkJb24gc2V2ZXJhbCBtYWNoaW5lcyBhbmQgdGhleSBoYW5nIHRoZSBtYWNoaW5lIHdoZW4gdXNlZCwKKwkJCQkJYnV0IG9uIG90aGVyIGNvbXB1dGVycyBpdCdzIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlCisJCQkJCWludGVycnVwdCByb3V0aW5nIHRhYmxlLiBUcnkgdGhpcyBvcHRpb24gaWYgdGhlIGtlcm5lbAorCQkJCQlpcyB1bmFibGUgdG8gYWxsb2NhdGUgSVJRcyBvciBkaXNjb3ZlciBzZWNvbmRhcnkgUENJCisJCQkJCWJ1c2VzIG9uIHlvdXIgbW90aGVyYm9hcmQuCisJCXJvbQkJCVtJQS0zMl0gQXNzaWduIGFkZHJlc3Mgc3BhY2UgdG8gZXhwYW5zaW9uIFJPTXMuCisJCQkJCVVzZSB3aXRoIGNhdXRpb24gYXMgY2VydGFpbiBkZXZpY2VzIHNoYXJlIGFkZHJlc3MKKwkJCQkJZGVjb2RlcnMgYmV0d2VlbiBST01zIGFuZCBvdGhlciByZXNvdXJjZXMuCisJCWlycW1hc2s9MHhNTU1NCQlbSUEtMzJdIFNldCBhIGJpdCBtYXNrIG9mIElSUXMgYWxsb3dlZCB0byBiZSBhc3NpZ25lZAorCQkJCQlhdXRvbWF0aWNhbGx5IHRvIFBDSSBkZXZpY2VzLiBZb3UgY2FuIG1ha2UgdGhlIGtlcm5lbAorCQkJCQlleGNsdWRlIElSUXMgb2YgeW91ciBJU0EgY2FyZHMgdGhpcyB3YXkuCisJCWxhc3RidXM9TgkJW0lBLTMyXSBTY2FuIGFsbCBidXNlcyB0aWxsIGJ1cyAjTi4gQ2FuIGJlIHVzZWZ1bAorCQkJCQlpZiB0aGUga2VybmVsIGlzIHVuYWJsZSB0byBmaW5kIHlvdXIgc2Vjb25kYXJ5IGJ1c2VzCisJCQkJCWFuZCB5b3Ugd2FudCB0byB0ZWxsIGl0IGV4cGxpY2l0bHkgd2hpY2ggb25lcyB0aGV5IGFyZS4KKwkJYXNzaWduLWJ1c3NlcwkJW0lBLTMyXSBBbHdheXMgYXNzaWduIGFsbCBQQ0kgYnVzCisJCQkJCW51bWJlcnMgb3Vyc2VsdmVzLCBvdmVycmlkaW5nCisJCQkJCXdoYXRldmVyIHRoZSBmaXJtd2FyZSBtYXkgaGF2ZQorCQkJCQlkb25lLgorCQl1c2VwaXJxbWFzawkJW0lBLTMyXSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sKKwkJCQkJc3RvcmVkIGluIHRoZSBCSU9TICRQSVIgdGFibGUuIFRoaXMgaXMKKwkJCQkJbmVlZGVkIG9uIHNvbWUgc3lzdGVtcyB3aXRoIGJyb2tlbgorCQkJCQlCSU9TZXMsIG5vdGFibHkgc29tZSBIUCBQYXZpbGlvbiBONTQwMAorCQkJCQlhbmQgT21uaWJvb2sgWEUzIG5vdGVib29rcy4gVGhpcyB3aWxsCisJCQkJCWhhdmUgbm8gZWZmZWN0IGlmIEFDUEkgSVJRIHJvdXRpbmcgaXMKKwkJCQkJZW5hYmxlZC4KKwkJbm9hY3BpCQkJW0lBLTMyXSBEbyBub3QgdXNlIEFDUEkgZm9yIElSUSByb3V0aW5nCisJCQkJCW9yIGZvciBQQ0kgc2Nhbm5pbmcuCisJCXJvdXRlaXJxCQlEbyBJUlEgcm91dGluZyBmb3IgYWxsIFBDSSBkZXZpY2VzLgorCQkJCQlUaGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gcGNpX2VuYWJsZV9kZXZpY2UoKSwKKwkJCQkJc28gdGhpcyBvcHRpb24gaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZAorCQkJCQlmb3IgYnJva2VuIGRyaXZlcnMgdGhhdCBkb24ndCBjYWxsIGl0LgorCisJCWZpcm13YXJlCQlbQVJNXSBEbyBub3QgcmUtZW51bWVyYXRlIHRoZSBidXMgYnV0CisJCQkJCWluc3RlYWQganVzdCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24KKwkJCQkJZnJvbSB0aGUgYm9vdGxvYWRlci4gVGhpcyBpcyBjdXJyZW50bHkKKwkJCQkJdXNlZCBvbiBJWFAyMDAwIHN5c3RlbXMgd2hlcmUgdGhlCisJCQkJCWJ1cyBoYXMgdG8gYmUgY29uZmlndXJlZCBhIGNlcnRhaW4gd2F5CisJCQkJCWZvciBhZGp1bmN0IENQVXMuCisKKwlwY212PQkJW0hXLFBDTUNJQV0gQmFkZ2VQQUQgNAorCisJcGQuCQlbUEFSSURFXQorCQkJU2VlIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KKworCXBkY2NoYXNzaXM9CVtQQVJJU0MsSFddIERpc2FibGUvRW5hYmxlIFBEQyBDaGFzc2lzIFN0YXR1cyBjb2RlcyBhdAorCQkJYm9vdCB0aW1lLgorCQkJRm9ybWF0OiB7IDAgfCAxIH0KKwkJCVNlZSBhcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NoYXNzaXMuYworCisJcGYuCQlbUEFSSURFXQorCQkJU2VlIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KKworCXBnLgkJW1BBUklERV0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3BhcmlkZS50eHQuCisKKwlwaXJxPQkJW1NNUCxBUElDXSBNYW51YWwgbXAtdGFibGUgc2V0dXAKKwkJCVNlZSBEb2N1bWVudGF0aW9uL2kzODYvSU8tQVBJQy50eHQuCisKKwlwbGlwPQkJW1BQVCxORVRdIFBhcmFsbGVsIHBvcnQgbmV0d29yayBsaW5rCisJCQlGb3JtYXQ6IHsgcGFycG9ydDxucj4gfCB0aW1pZCB8IDAgfQorCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9wYXJwb3J0LnR4dC4KKworCXBucGFjcGk9CVtBQ1BJXQorCQkJeyBvZmYgfQorCisJcG5wYmlvcz0JW0lTQVBOUF0KKwkJCXsgb24gfCBvZmYgfCBjdXJyIHwgcmVzIHwgbm8tY3VyciB8IG5vLXJlcyB9CisKKwlwbnBfcmVzZXJ2ZV9pcnE9CisJCQlbSVNBUE5QXSBFeGNsdWRlIElSUXMgZm9yIHRoZSBhdXRvY29uZmlndXJhdGlvbgorCisJcG5wX3Jlc2VydmVfZG1hPQorCQkJW0lTQVBOUF0gRXhjbHVkZSBETUFzIGZvciB0aGUgYXV0b2NvbmZpZ3VyYXRpb24KKworCXBucF9yZXNlcnZlX2lvPQlbSVNBUE5QXSBFeGNsdWRlIEkvTyBwb3J0cyBmb3IgdGhlIGF1dG9jb25maWd1cmF0aW9uCisJCSAgICAgCVJhbmdlcyBhcmUgaW4gcGFpcnMgKEkvTyBwb3J0IGJhc2UgYW5kIHNpemUpLgorCisJcG5wX3Jlc2VydmVfbWVtPQorCQkJW0lTQVBOUF0gRXhjbHVkZSBtZW1vcnkgcmVnaW9ucyBmb3IgdGhlIGF1dG9jb25maWd1cmF0aW9uCisJCQlSYW5nZXMgYXJlIGluIHBhaXJzIChtZW1vcnkgYmFzZSBhbmQgc2l6ZSkuCisKKwlwcm9maWxlPQlbS05MXSBFbmFibGUga2VybmVsIHByb2ZpbGluZyB2aWEgL3Byb2MvcHJvZmlsZQorCQkJeyBzY2hlZHVsZSB8IDxudW1iZXI+IH0KKwkJCShwYXJhbTogc2NoZWR1bGUgLSBwcm9maWxlIHNjaGVkdWxlIHBvaW50c30KKwkJCShwYXJhbTogcHJvZmlsZSBzdGVwL2J1Y2tldCBzaXplIGFzIGEgcG93ZXIgb2YgMiBmb3IKKwkJCQlzdGF0aXN0aWNhbCB0aW1lIGJhc2VkIHByb2ZpbGluZykKKworCXByb2Nlc3Nvci5tYXhfY3N0YXRlPSAgIFtIVywgQUNQSV0KKwkJCUxpbWl0IHByb2Nlc3NvciB0byBtYXhpbXVtIEMtc3RhdGUKKwkJCW1heF9jc3RhdGU9OSBvdmVycmlkZXMgYW55IERNSSBibGFja2xpc3QgbGltaXQuCisKKwlwcm9tcHRfcmFtZGlzaz0JW1JBTV0gTGlzdCBvZiBSQU0gZGlza3MgdG8gcHJvbXB0IGZvciBmbG9wcHkgZGlzaworCQkJYmVmb3JlIGxvYWRpbmcuCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dC4KKworCXBzbW91c2UucHJvdG89ICBbSFcsTU9VU0VdIEhpZ2hlc3QgUFMyIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiB0bworCQkJcHJvYmUgZm9yIChiYXJlfGltcHN8ZXhwcykuCisJcHNtb3VzZS5yYXRlPQlbSFcsTU9VU0VdIFNldCBkZXNpcmVkIG1vdXNlIHJlcG9ydCByYXRlLCBpbiByZXBvcnRzCisJCQlwZXIgc2Vjb25kLgorCXBzbW91c2UucmVzZXRhZnRlcj0KKwkJCVtIVyxNT1VTRV0gVHJ5IHRvIHJlc2V0IHRoZSBkZXZpY2UgYWZ0ZXIgc28gbWFueSBiYWQgcGFja2V0cworCQkJKDAgPSBuZXZlcikuCisJcHNtb3VzZS5yZXNvbHV0aW9uPQorCQkJW0hXLE1PVVNFXSBTZXQgZGVzaXJlZCBtb3VzZSByZXNvbHV0aW9uLCBpbiBkcGkuCisJcHNtb3VzZS5zbWFydHNjcm9sbD0KKwkJCVtIVyxNT1VTRV0gQ29udHJvbHMgTG9naXRlY2ggc21hcnRzY3JvbGwgYXV0b3JlcGVhdCwKKwkJCTAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWQgKGRlZmF1bHQpLgorCisJcHNzPQkJW0hXLE9TU10gUGVyc29uYWwgU291bmQgU3lzdGVtIChFQ0hPIEVTQzYxNCkKKwkJCUZvcm1hdDogPGlvPiw8bXNzX2lvPiw8bXNzX2lycT4sPG1zc19kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgorCisJcHQuCQlbUEFSSURFXQorCQkJU2VlIERvY3VtZW50YXRpb24vcGFyaWRlLnR4dC4KKworCXF1aWV0PQkJW0tOTF0gRGlzYWJsZSBsb2cgbWVzc2FnZXMKKyAKKwlyMTI4PQkJW0hXLERSTV0KKworCXJhaWQ9CQlbSFcsUkFJRF0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL21kLnR4dC4KKworCXJhbWRpc2s9CVtSQU1dIFNpemVzIG9mIFJBTSBkaXNrcyBpbiBraWxvYnl0ZXMgW2RlcHJlY2F0ZWRdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dC4KKworCXJhbWRpc2tfYmxvY2tzaXplPQorCQkJW1JBTV0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgorIAorCXJhbWRpc2tfc2l6ZT0JW1JBTV0gU2l6ZXMgb2YgUkFNIGRpc2tzIGluIGtpbG9ieXRlcworCQkJTmV3IG5hbWUgZm9yIHRoZSByYW1kaXNrIHBhcmFtZXRlci4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgorCisJcmVib290PQkJW0JVR1M9SUEtMzIsQlVHUz1BUk0sQlVHUz1JQS02NF0gUmVib290aW5nIG1vZGUKKwkJCUZvcm1hdDogPHJlYm9vdF9tb2RlPlssPHJlYm9vdF9tb2RlMj5bLC4uLl1dCisJCQlTZWUgYXJjaC8qL2tlcm5lbC9yZWJvb3QuYy4KKworCXJlc2VydmU9CVtLTkwsQlVHU10gRm9yY2UgdGhlIGtlcm5lbCB0byBpZ25vcmUgc29tZSBpb21lbSBhcmVhCisKKwlyZXN1bWU9CQlbU1dTVVNQXSBTcGVjaWZ5IHRoZSBwYXJ0aXRpb24gZGV2aWNlIGZvciBzb2Z0d2FyZSBzdXNwZW5zaW9uCisKKwlyaGFzaF9lbnRyaWVzPQlbS05MLE5FVF0KKwkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciByb3V0ZSBjYWNoZQorCisJcmlzY29tOD0JW0hXLFNFUklBTF0KKwkJCUZvcm1hdDogPGlvX2JvYXJkMT5bLDxpb19ib2FyZDI+WywuLi48aW9fYm9hcmROPl1dCisKKwlybwkJW0tOTF0gTW91bnQgcm9vdCBkZXZpY2UgcmVhZC1vbmx5IG9uIGJvb3QKKworCXJvb3Q9CQlbS05MXSBSb290IGZpbGVzeXN0ZW0KKworCXJvb3RkZWxheT0JW0tOTF0gRGVsYXkgKGluIHNlY29uZHMpIHRvIHBhdXNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvCisJCQltb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtCisKKwlyb290ZmxhZ3M9CVtLTkxdIFNldCByb290IGZpbGVzeXN0ZW0gbW91bnQgb3B0aW9uIHN0cmluZworCisJcm9vdGZzdHlwZT0JW0tOTF0gU2V0IHJvb3QgZmlsZXN5c3RlbSB0eXBlCisKKwlydwkJW0tOTF0gTW91bnQgcm9vdCBkZXZpY2UgcmVhZC13cml0ZSBvbiBib290CisKKwlTCQlbS05MXSBSdW4gaW5pdCBpbiBzaW5nbGUgbW9kZQorCisJc2ExMTAwaXIJW05FVF0KKwkJCVNlZSBkcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jLgorCisJc2I9CQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPgorCisJc2JuaT0JCVtORVRdIEdyYW5jaCBTQk5JMTIgbGVhc2VkIGxpbmUgYWRhcHRlcgorIAorCXNicGNkPQkJW0hXLENEXSBTb3VuZGJsYXN0ZXIgQ0QgYWRhcHRlcgorCQkJRm9ybWF0OiA8aW8+LDx0eXBlPgorCQkJU2VlIGEgY29tbWVudCBiZWZvcmUgZnVuY3Rpb24gc2JwY2Rfc2V0dXAoKSBpbgorCQkJZHJpdmVycy9jZHJvbS9zYnBjZC5jLgorCisJc2MxMjAwd2R0PQlbSFcsV0RUXSBTQzEyMDAgV0RUICh3YXRjaGRvZykgZHJpdmVyCisJCQlGb3JtYXQ6IDxpbz5bLDx0aW1lb3V0PlssPGlzYXBucD5dXQorCisJc2NzaV9kZWJ1Z18qPQlbU0NTSV0KKwkJCVNlZSBkcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jLgorCisJc2NzaV9kZWZhdWx0X2Rldl9mbGFncz0KKwkJCVtTQ1NJXSBTQ1NJIGRlZmF1bHQgZGV2aWNlIGZsYWdzCisJCQlGb3JtYXQ6IDxpbnRlZ2VyPgorCisJc2NzaV9kZXZfZmxhZ3M9CVtTQ1NJXSBCbGFjay93aGl0ZSBsaXN0IGVudHJ5IGZvciB2ZW5kb3IgYW5kIG1vZGVsCisJCQlGb3JtYXQ6IDx2ZW5kb3I+Ojxtb2RlbD46PGZsYWdzPgorCQkJKGZsYWdzIGFyZSBpbnRlZ2VyIHZhbHVlKQorCisJc2NzaV9sb2dnaW5nPQlbU0NTSV0KKworCXNlbGludXgJCVtTRUxJTlVYXSBEaXNhYmxlIG9yIGVuYWJsZSBTRUxpbnV4IGF0IGJvb3QgdGltZS4KKwkJCUZvcm1hdDogeyAiMCIgfCAiMSIgfQorCQkJU2VlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZyBoZWxwIHRleHQuCisJCQkwIC0tIGRpc2FibGUuCisJCQkxIC0tIGVuYWJsZS4KKwkJCURlZmF1bHQgdmFsdWUgaXMgc2V0IHZpYSBrZXJuZWwgY29uZmlnIG9wdGlvbi4KKwkJCUlmIGVuYWJsZWQgYXQgYm9vdCB0aW1lLCAvc2VsaW51eC9kaXNhYmxlIGNhbiBiZSB1c2VkCisJCQlsYXRlciB0byBkaXNhYmxlIHByaW9yIHRvIGluaXRpYWwgcG9saWN5IGxvYWQuCisKKwlzZXJpYWxudW1iZXIJW0JVR1M9SUEtMzJdCisKKwlzZ19kZWZfcmVzZXJ2ZWRfc2l6ZT0KKwkJCVtTQ1NJXQorIAorCXNnYWxheHk9CVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDxzZ2Jhc2U+CisKKwlzaGFwZXJzPQlbTkVUXQorCQkJTWF4aW1hbCBudW1iZXIgb2Ygc2hhcGVycy4KKyAKKwlzaW03MTA9CQlbU0NTSSxIV10KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3NpbTcxMC5jLgorCisJc2ltZXRoPQkJW0lBLTY0XQorCXNpbXNjc2k9CisgCisJc2pjZD0JCVtIVyxDRF0KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPgorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Nkcm9tL3NqY2QuYy4KKworCXNscmFtPQkJW0hXLE1URF0KKworCXNtYXJ0Mj0JCVtIV10KKwkJCUZvcm1hdDogPGlvMT5bLDxpbzI+WywuLi4sPGlvOD5dXQorCisJc25kLWFkMTgxNmE9CVtIVyxBTFNBXQorCisJc25kLWFkMTg0OD0JW0hXLEFMU0FdCisKKwlzbmQtYWxpNTQ1MT0JW0hXLEFMU0FdCisKKwlzbmQtYWxzMTAwPQlbSFcsQUxTQV0KKworCXNuZC1hbHM0MDAwPQlbSFcsQUxTQV0KKworCXNuZC1henQyMzIwPQlbSFcsQUxTQV0KKworCXNuZC1jbWk4MzMwPQlbSFcsQUxTQV0KKworCXNuZC1jbWlwY2k9CVtIVyxBTFNBXQorCisJc25kLWNzNDIzMT0JW0hXLEFMU0FdCisKKwlzbmQtY3M0MjMyPQlbSFcsQUxTQV0KKworCXNuZC1jczQyMzY9CVtIVyxBTFNBXQorCisJc25kLWNzNDI4MT0JW0hXLEFMU0FdCisKKwlzbmQtY3M0Nnh4PQlbSFcsQUxTQV0KKworCXNuZC1kdDAxOXg9CVtIVyxBTFNBXQorCisJc25kLWR1bW15PQlbSFcsQUxTQV0KKworCXNuZC1lbXUxMGsxPQlbSFcsQUxTQV0KKworCXNuZC1lbnMxMzcwPQlbSFcsQUxTQV0KKworCXNuZC1lbnMxMzcxPQlbSFcsQUxTQV0KKworCXNuZC1lczk2OD0JW0hXLEFMU0FdCisKKwlzbmQtZXMxNjg4PQlbSFcsQUxTQV0KKworCXNuZC1lczE4eHg9CVtIVyxBTFNBXQorCisJc25kLWVzMTkzOD0JW0hXLEFMU0FdCisKKwlzbmQtZXMxOTY4PQlbSFcsQUxTQV0KKworCXNuZC1mbTgwMT0JW0hXLEFMU0FdCisKKwlzbmQtZ3VzY2xhc3NpYz0JW0hXLEFMU0FdCisKKwlzbmQtZ3VzZXh0cmVtZT0JW0hXLEFMU0FdCisKKwlzbmQtZ3VzbWF4PQlbSFcsQUxTQV0KKworCXNuZC1oZHNwPQlbSFcsQUxTQV0KKworCXNuZC1pY2UxNzEyPQlbSFcsQUxTQV0KKworCXNuZC1pbnRlbDh4MD0JW0hXLEFMU0FdCisKKwlzbmQtaW50ZXJ3YXZlPQlbSFcsQUxTQV0KKworCXNuZC1pbnRlcndhdmUtc3RiPQorCQkJW0hXLEFMU0FdCisKKwlzbmQta29yZzEyMTI9CVtIVyxBTFNBXQorCisJc25kLW1hZXN0cm8zPQlbSFcsQUxTQV0KKworCXNuZC1tcHU0MDE9CVtIVyxBTFNBXQorCisJc25kLW10cGF2PQlbSFcsQUxTQV0KKworCXNuZC1ubTI1Nj0JW0hXLEFMU0FdCisKKwlzbmQtb3BsM3NhMj0JW0hXLEFMU0FdCisKKwlzbmQtb3B0aTkyeC1hZDE4NDg9CisJCQlbSFcsQUxTQV0KKworCXNuZC1vcHRpOTJ4LWNzNDIzMT0KKwkJCVtIVyxBTFNBXQorCisJc25kLW9wdGk5M3g9CVtIVyxBTFNBXQorCisJc25kLXBtYWM9CVtIVyxBTFNBXQorCisJc25kLXJtZTMyPQlbSFcsQUxTQV0KKworCXNuZC1ybWU5Nj0JW0hXLEFMU0FdCisKKwlzbmQtcm1lOTY1Mj0JW0hXLEFMU0FdCisKKwlzbmQtc2I4PQlbSFcsQUxTQV0KKworCXNuZC1zYjE2PQlbSFcsQUxTQV0KKworCXNuZC1zYmF3ZT0JW0hXLEFMU0FdCisKKwlzbmQtc2VyaWFsPQlbSFcsQUxTQV0KKworCXNuZC1zZ2FsYXh5PQlbSFcsQUxTQV0KKworCXNuZC1zb25pY3ZpYmVzPQlbSFcsQUxTQV0KKworCXNuZC1zdW4tYW1kNzkzMD0KKwkJCVtIVyxBTFNBXQorCisJc25kLXN1bi1jczQyMzE9CVtIVyxBTFNBXQorCisJc25kLXRyaWRlbnQ9CVtIVyxBTFNBXQorCisJc25kLXVzYi1hdWRpbz0JW0hXLEFMU0EsVVNCXQorCisJc25kLXZpYTgyeHg9CVtIVyxBTFNBXQorCisJc25kLXZpcm1pZGk9CVtIVyxBTFNBXQorCisJc25kLXdhdmVmcm9udD0JW0hXLEFMU0FdCisKKwlzbmQteW1mcGNpPQlbSFcsQUxTQV0KKyAKKwlzb25pY3ZpYmVzPQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8cmV2ZXJiPgorIAorCXNvbnljZDUzNT0JW0hXLENEXQorCQkJRm9ybWF0OiA8aW8+Wyw8aXJxPl0KKworCXNvbnlwaS4qPQlbSFddIFNvbnkgUHJvZ3JhbW1hYmxlIEkvTyBDb250cm9sIERldmljZSBkcml2ZXIKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3NvbnlwaS50eHQKKworCXNwZWNpYWxpeD0JW0hXLFNFUklBTF0gU3BlY2lhbGl4IG11bHRpLXNlcmlhbCBwb3J0IGFkYXB0ZXIKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3NwZWNpYWxpeC50eHQuCisKKwlzcGlhX2lvX2Jhc2U9CVtIVyxNVERdCisJc3BpYV9maW9fYmFzZT0KKwlzcGlhX3BlZHI9CisJc3BpYV9wZWRkcj0KKworCXNzY2FwZT0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPG1wdV9pbz4sPG1wdV9pcnE+CisgCisJc3Q9CQlbSFcsU0NTSV0gU0NTSSB0YXBlIHBhcmFtZXRlcnMgKGJ1ZmZlcnMsIGV0Yy4pCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dC4KKworCXN0MHg9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3NlYWdhdGUuYy4KKworCXN0aT0JCVtQQVJJU0MsSFddCisJCQlGb3JtYXQ6IDxudW0+CisJCQlTZXQgdGhlIFNUSSAoYnVpbHRpbiBkaXNwbGF5L2tleWJvYXJkIG9uIHRoZSBIUC1QQVJJU0MKKwkJCW1hY2hpbmVzKSBjb25zb2xlIChncmFwaGljIGNhcmQpIHdoaWNoIHNob3VsZCBiZSB1c2VkCisJCQlhcyB0aGUgaW5pdGlhbCBib290LWNvbnNvbGUuCisJCQlTZWUgYWxzbyBjb21tZW50IGluIGRyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb3JlLmMuCisKKwlzdGlfZm9udD0JW0hXXQorCQkJU2VlIGNvbW1lbnQgaW4gZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvcmUuYy4KKworCXN0aWZiPQkJW0hXXQorCQkJRm9ybWF0OiBicHA6PGJwcDE+Wzo8YnBwMj5bOjxicHAzPi4uLl1dCisKKwlzdHJhbV9zd2FwPQlbSFcsTTY4a10KKworCXN3aW90bGI9CVtJQS02NF0gTnVtYmVyIG9mIEkvTyBUTEIgc2xhYnMKKyAKKwlzd2l0Y2hlcz0JW0hXLE02OGtdCisKKwlzeW01M2M0MTY9CVtIVyxTQ1NJXQorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMuCisKKwl0MTI4PQkJW0hXLFNDU0ldCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS90MTI4LmMuCisKKwl0ZGZ4PQkJW0hXLERSTV0KKworCXRoYXNoX2VudHJpZXM9CVtLTkwsTkVUXQorCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIFRDUCBjb25uZWN0aW9uCisKKwl0aW1lCQlTaG93IHRpbWluZyBkYXRhIHByZWZpeGVkIHRvIGVhY2ggcHJpbnRrIG1lc3NhZ2UgbGluZQorCisJdGlwYXIudGltZW91dD0JW0hXLFBQVF0KKwkJCVNldCBjb21tdW5pY2F0aW9ucyB0aW1lb3V0IGluIHRlbnRocyBvZiBhIHNlY29uZAorCQkJKGRlZmF1bHQgMTUpLgorCisJdGlwYXIuZGVsYXk9CVtIVyxQUFRdCisJCQlTZXQgaW50ZXItYml0IGRlbGF5IGluIG1pY3Jvc2Vjb25kcyAoZGVmYXVsdCAxMCkuCisKKwl0bWM4eHg9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3NlYWdhdGUuYy4KKworCXRtc2NzaW09CVtIVyxTQ1NJXQorCQkJU2VlIGNvbW1lbnQgYmVmb3JlIGZ1bmN0aW9uIGRjMzkwX3NldHVwKCkgaW4KKwkJCWRyaXZlcnMvc2NzaS90bXNjc2ltLmMuCisKKwl0cDcyMD0JCVtIVyxQUzJdCisKKwl0cml4PQkJW0hXLE9TU10gTWVkaWFUcml4IEF1ZGlvVHJpeCBQcm8KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPHNiX2lvPiw8c2JfaXJxPiw8c2JfZG1hPiw8bXB1X2lvPiw8bXB1X2lycT4KKyAKKwl0c2Rldi54cmVzPQlbVFNdIEhvcml6b250YWwgc2NyZWVuIHJlc29sdXRpb24uCisJdHNkZXYueXJlcz0JW1RTXSBWZXJ0aWNhbCBzY3JlZW4gcmVzb2x1dGlvbi4KKworCXR1cmJvZ3JhZngubWFwWzJ8M109CisJCQlbSFcsSk9ZXSBUdXJib0dyYUZYIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlCisJCQlGb3JtYXQ6IDxwb3J0Iz4sPGpzMT4sPGpzMj4sPGpzMz4sPGpzND4sPGpzNT4sPGpzNj4sPGpzNz4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKKworCXUxNC0zNGY9CVtIVyxTQ1NJXSBVbHRyYVN0b3IgMTRGLzM0RiBTQ1NJIGhvc3QgYWRhcHRlcgorCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvdTE0LTM0Zi5jLgorCisJdWFydDQwMT0JW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPgorCisJdWFydDY4NTA9CVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4KKworCXVzYi1oYW5kb2ZmCVtIV10gRW5hYmxlIGVhcmx5IFVTQiBCSU9TIC0+IE9TIGhhbmRvZmYKKworCXVzYmhpZC5tb3VzZXBvbGw9CisJCQlbVVNCSElEXSBUaGUgaW50ZXJ2YWwgd2hpY2ggbWljZSBhcmUgdG8gYmUgcG9sbGVkIGF0LgorIAorCXZpZGVvPQkJW0ZCXSBGcmFtZSBidWZmZXIgY29uZmlndXJhdGlvbgorCQkJU2VlIERvY3VtZW50YXRpb24vZmIvbW9kZWRiLnR4dC4KKworCXZnYT0JCVtCT09ULElBLTMyXSBTZWxlY3QgYSBwYXJ0aWN1bGFyIHZpZGVvIG1vZGUKKwkJCVNlZSBEb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQgYW5kIERvY3VtZW50YXRpb24vc3ZnYS50eHQuCisJCQlVc2UgdmdhPWFzayBmb3IgbWVudS4KKwkJCVRoaXMgaXMgYWN0dWFsbHkgYSBib290IGxvYWRlciBwYXJhbWV0ZXI7IHRoZSB2YWx1ZSBpcworCQkJcGFzc2VkIHRvIHRoZSBrZXJuZWwgdXNpbmcgYSBzcGVjaWFsIHByb3RvY29sLgorCisJdm1hbGxvYz1ubltLTUddCVtLTkwsQk9PVF0gZm9yY2VzIHRoZSB2bWFsbG9jIGFyZWEgdG8gaGF2ZSBhbiBleGFjdAorCQkJc2l6ZSBvZiA8bm4+LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZQorCQkJbWluaW11bSBzaXplICgxMjhNQiBvbiB4ODYpLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCisJCQlkZWNyZWFzZSB0aGUgc2l6ZSBhbmQgbGVhdmUgbW9yZSByb29tIGZvciBkaXJlY3RseQorCQkJbWFwcGVkIGtlcm5lbCBSQU0uCisKKwl2bWhhbHQ9CQlbS05MLFMzOTBdCisKKwl2bXBvZmY9CQlbS05MLFMzOTBdIAorIAorCXdhdmVhcnRpc3Q9CVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+CisgCisJd2QzM2M5Mz0JW0hXLFNDU0ldCisJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS93ZDMzYzkzLmMuCisKKwl3ZDcwMDA9CQlbSFcsU0NTSV0KKwkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL3dkNzAwMC5jLgorCisJd2R0PQkJW1dEVF0gV2F0Y2hkb2cKKwkJCVNlZSBEb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLnR4dC4KKworCXhkPQkJW0hXLFhUXSBPcmlnaW5hbCBYVCBwcmUtSURFIChSTEwgZW5jb2RlZCkgZGlza3MuCisJeGRfZ2VvPQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3hkLmMuCisKKwl4aXJjMnBzX2NzPQlbTkVULFBDTUNJQV0KKwkJCUZvcm1hdDogPGlycT4sPGlycV9tYXNrPiw8aW8+LDxmdWxsX2R1cGxleD4sPGRvX3NvdW5kPiw8bG9ja3VwX2hhY2s+Wyw8aXJxMj5bLDxpcnEzPlssPGlycTQ+XV1dCisKKworCitDaGFuZ2Vsb2c6CisKKwlUaGUgbGFzdCBrbm93biB1cGRhdGUgKGZvciAyLjQuMCkgLSB0aGUgY2hhbmdlbG9nIHdhcyBub3Qga2VwdCBiZWZvcmUuCisJMjAwMC0wNi0/PwlNci4gVW5rbm93bgorCisJVXBkYXRlIGZvciAyLjUuNDksIGRlc2NyaXB0aW9uIGZvciBtb3N0IG9mIHRoZSBvcHRpb25zIGludHJvZHVjZWQsCisJcmVmZXJlbmNlcyB0byBvdGhlciBkb2N1bWVudGF0aW9uIChDIGZpbGVzLCBSRUFETUVzLCAuLiksIGFkZGVkIFMzOTAsCisJUFBDLCBTUEFSQywgTVRELCBBTFNBIGFuZCBPU1MgY2F0ZWdvcnkuIE1pbm9yIGNvcnJlY3Rpb25zIGFuZAorCXJlZm9ybWF0dGluZy4KKwkyMDAyLTExLTI0CVBldHIgQmF1ZGlzIDxwYXNreUB1Y3cuY3o+CisJCQlSYW5keSBEdW5sYXAgPHJhbmR5LmR1bmxhcEB2ZXJpem9uLm5ldD4KKworVE9ETzoKKworCUFkZCBkb2N1bWVudGF0aW9uIGZvciBBTFNBIG9wdGlvbnMuCisJQWRkIG1vcmUgRFJNIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tleXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQ4MGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dApAQCAtMCwwICsxLDg2OSBAQAorCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSBLRVJORUwgS0VZIFJFVEVOVElPTiBTRVJWSUNFCisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlcnZpY2UgYWxsb3dzIGNyeXB0b2dyYXBoaWMga2V5cywgYXV0aGVudGljYXRpb24gdG9rZW5zLCBjcm9zcy1kb21haW4KK3VzZXIgbWFwcGluZ3MsIGFuZCBzaW1pbGFyIHRvIGJlIGNhY2hlZCBpbiB0aGUga2VybmVsIGZvciB0aGUgdXNlIG9mCitmaWxlc3lzdGVtcyBvdGhlciBrZXJuZWwgc2VydmljZXMuCisKK0tleXJpbmdzIGFyZSBwZXJtaXR0ZWQ7IHRoZXNlIGFyZSBhIHNwZWNpYWwgdHlwZSBvZiBrZXkgdGhhdCBjYW4gaG9sZCBsaW5rcyB0bworb3RoZXIga2V5cy4gUHJvY2Vzc2VzIGVhY2ggaGF2ZSB0aHJlZSBzdGFuZGFyZCBrZXlyaW5nIHN1YnNjcmlwdGlvbnMgdGhhdCBhCitrZXJuZWwgc2VydmljZSBjYW4gc2VhcmNoIGZvciByZWxldmFudCBrZXlzLgorCitUaGUga2V5IHNlcnZpY2UgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYnkgZW5hYmxpbmc6CisKKwkiU2VjdXJpdHkgb3B0aW9ucyIvIkVuYWJsZSBhY2Nlc3Mga2V5IHJldGVudGlvbiBzdXBwb3J0IiAoQ09ORklHX0tFWVMpCisKK1RoaXMgZG9jdW1lbnQgaGFzIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKwktIEtleSBvdmVydmlldworCS0gS2V5IHNlcnZpY2Ugb3ZlcnZpZXcKKwktIEtleSBhY2Nlc3MgcGVybWlzc2lvbnMKKwktIE5ldyBwcm9jZnMgZmlsZXMKKwktIFVzZXJzcGFjZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UKKwktIEtlcm5lbCBzZXJ2aWNlcworCS0gRGVmaW5pbmcgYSBrZXkgdHlwZQorCS0gUmVxdWVzdC1rZXkgY2FsbGJhY2sgc2VydmljZQorCS0gS2V5IGFjY2VzcyBmaWxlc3lzdGVtCisKKworPT09PT09PT09PT09CitLRVkgT1ZFUlZJRVcKKz09PT09PT09PT09PQorCitJbiB0aGlzIGNvbnRleHQsIGtleXMgcmVwcmVzZW50IHVuaXRzIG9mIGNyeXB0b2dyYXBoaWMgZGF0YSwgYXV0aGVudGljYXRpb24KK3Rva2Vucywga2V5cmluZ3MsIGV0Yy4uIFRoZXNlIGFyZSByZXByZXNlbnRlZCBpbiB0aGUga2VybmVsIGJ5IHN0cnVjdCBrZXkuCisKK0VhY2gga2V5IGhhcyBhIG51bWJlciBvZiBhdHRyaWJ1dGVzOgorCisJLSBBIHNlcmlhbCBudW1iZXIuCisJLSBBIHR5cGUuCisJLSBBIGRlc2NyaXB0aW9uIChmb3IgbWF0Y2hpbmcgYSBrZXkgaW4gYSBzZWFyY2gpLgorCS0gQWNjZXNzIGNvbnRyb2wgaW5mb3JtYXRpb24uCisJLSBBbiBleHBpcnkgdGltZS4KKwktIEEgcGF5bG9hZC4KKwktIFN0YXRlLgorCisKKyAoKikgRWFjaCBrZXkgaXMgaXNzdWVkIGEgc2VyaWFsIG51bWJlciBvZiB0eXBlIGtleV9zZXJpYWxfdCB0aGF0IGlzIHVuaXF1ZQorICAgICBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoYXQga2V5LiBBbGwgc2VyaWFsIG51bWJlcnMgYXJlIHBvc2l0aXZlIG5vbi16ZXJvCisgICAgIDMyLWJpdCBpbnRlZ2Vycy4KKworICAgICBVc2Vyc3BhY2UgcHJvZ3JhbXMgY2FuIHVzZSBhIGtleSdzIHNlcmlhbCBudW1iZXJzIGFzIGEgd2F5IHRvIGdhaW4gYWNjZXNzCisgICAgIHRvIGl0LCBzdWJqZWN0IHRvIHBlcm1pc3Npb24gY2hlY2tpbmcuCisKKyAoKikgRWFjaCBrZXkgaXMgb2YgYSBkZWZpbmVkICJ0eXBlIi4gVHlwZXMgbXVzdCBiZSByZWdpc3RlcmVkIGluc2lkZSB0aGUKKyAgICAga2VybmVsIGJ5IGEga2VybmVsIHNlcnZpY2UgKHN1Y2ggYXMgYSBmaWxlc3lzdGVtKSBiZWZvcmUga2V5cyBvZiB0aGF0CisgICAgIHR5cGUgY2FuIGJlIGFkZGVkIG9yIHVzZWQuIFVzZXJzcGFjZSBwcm9ncmFtcyBjYW5ub3QgZGVmaW5lIG5ldyB0eXBlcworICAgICBkaXJlY3RseS4KKworICAgICBLZXkgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBrZXJuZWwgYnkgc3RydWN0IGtleV90eXBlLiBUaGlzIGRlZmluZXMKKyAgICAgYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYSBrZXkgb2YgdGhhdCB0eXBlLgorCisgICAgIFNob3VsZCBhIHR5cGUgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0sIGFsbCB0aGUga2V5cyBvZiB0aGF0IHR5cGUgd2lsbAorICAgICBiZSBpbnZhbGlkYXRlZC4KKworICgqKSBFYWNoIGtleSBoYXMgYSBkZXNjcmlwdGlvbi4gVGhpcyBzaG91bGQgYmUgYSBwcmludGFibGUgc3RyaW5nLiBUaGUga2V5CisgICAgIHR5cGUgcHJvdmlkZXMgYW4gb3BlcmF0aW9uIHRvIHBlcmZvcm0gYSBtYXRjaCBiZXR3ZWVuIHRoZSBkZXNjcmlwdGlvbiBvbgorICAgICBhIGtleSBhbmQgYSBjcml0ZXJpb24gc3RyaW5nLgorCisgKCopIEVhY2gga2V5IGhhcyBhbiBvd25lciB1c2VyIElELCBhIGdyb3VwIElEIGFuZCBhIHBlcm1pc3Npb25zIG1hc2suIFRoZXNlCisgICAgIGFyZSB1c2VkIHRvIGNvbnRyb2wgd2hhdCBhIHByb2Nlc3MgbWF5IGRvIHRvIGEga2V5IGZyb20gdXNlcnNwYWNlLCBhbmQKKyAgICAgd2hldGhlciBhIGtlcm5lbCBzZXJ2aWNlIHdpbGwgYmUgYWJsZSB0byBmaW5kIHRoZSBrZXkuCisKKyAoKikgRWFjaCBrZXkgY2FuIGJlIHNldCB0byBleHBpcmUgYXQgYSBzcGVjaWZpYyB0aW1lIGJ5IHRoZSBrZXkgdHlwZSdzCisgICAgIGluc3RhbnRpYXRpb24gZnVuY3Rpb24uIEtleXMgY2FuIGFsc28gYmUgaW1tb3J0YWwuCisKKyAoKikgRWFjaCBrZXkgY2FuIGhhdmUgYSBwYXlsb2FkLiBUaGlzIGlzIGEgcXVhbnRpdHkgb2YgZGF0YSB0aGF0IHJlcHJlc2VudAorICAgICB0aGUgYWN0dWFsICJrZXkiLiBJbiB0aGUgY2FzZSBvZiBhIGtleXJpbmcsIHRoaXMgaXMgYSBsaXN0IG9mIGtleXMgdG8KKyAgICAgd2hpY2ggdGhlIGtleXJpbmcgbGlua3M7IGluIHRoZSBjYXNlIG9mIGEgdXNlci1kZWZpbmVkIGtleSwgaXQncyBhbgorICAgICBhcmJpdHJhcnkgYmxvYiBvZiBkYXRhLgorCisgICAgIEhhdmluZyBhIHBheWxvYWQgaXMgbm90IHJlcXVpcmVkOyBhbmQgdGhlIHBheWxvYWQgY2FuLCBpbiBmYWN0LCBqdXN0IGJlIGEKKyAgICAgdmFsdWUgc3RvcmVkIGluIHRoZSBzdHJ1Y3Qga2V5IGl0c2VsZi4KKworICAgICBXaGVuIGEga2V5IGlzIGluc3RhbnRpYXRlZCwgdGhlIGtleSB0eXBlJ3MgaW5zdGFudGlhdGlvbiBmdW5jdGlvbiBpcworICAgICBjYWxsZWQgd2l0aCBhIGJsb2Igb2YgZGF0YSwgYW5kIHRoYXQgdGhlbiBjcmVhdGVzIHRoZSBrZXkncyBwYXlsb2FkIGluCisgICAgIHNvbWUgd2F5LgorCisgICAgIFNpbWlsYXJseSwgd2hlbiB1c2Vyc3BhY2Ugd2FudHMgdG8gcmVhZCBiYWNrIHRoZSBjb250ZW50cyBvZiB0aGUga2V5LCBpZgorICAgICBwZXJtaXR0ZWQsIGFub3RoZXIga2V5IHR5cGUgb3BlcmF0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgdGhlIGtleSdzCisgICAgIGF0dGFjaGVkIHBheWxvYWQgYmFjayBpbnRvIGEgYmxvYiBvZiBkYXRhLgorCisgKCopIEVhY2gga2V5IGNhbiBiZSBpbiBvbmUgb2YgYSBudW1iZXIgb2YgYmFzaWMgc3RhdGVzOgorCisgICAgICgqKSBVbmluc3RhbnRpYXRlZC4gVGhlIGtleSBleGlzdHMsIGJ1dCBkb2VzIG5vdCBoYXZlIGFueSBkYXRhCisJIGF0dGFjaGVkLiBLZXlzIGJlaW5nIHJlcXVlc3RlZCBmcm9tIHVzZXJzcGFjZSB3aWxsIGJlIGluIHRoaXMgc3RhdGUuCisKKyAgICAgKCopIEluc3RhbnRpYXRlZC4gVGhpcyBpcyB0aGUgbm9ybWFsIHN0YXRlLiBUaGUga2V5IGlzIGZ1bGx5IGZvcm1lZCwgYW5kCisJIGhhcyBkYXRhIGF0dGFjaGVkLgorCisgICAgICgqKSBOZWdhdGl2ZS4gVGhpcyBpcyBhIHJlbGF0aXZlbHkgc2hvcnQtbGl2ZWQgc3RhdGUuIFRoZSBrZXkgYWN0cyBhcyBhCisJIG5vdGUgc2F5aW5nIHRoYXQgYSBwcmV2aW91cyBjYWxsIG91dCB0byB1c2Vyc3BhY2UgZmFpbGVkLCBhbmQgYWN0cyBhcworCSBhIHRocm90dGxlIG9uIGtleSBsb29rdXBzLiBBIG5lZ2F0aXZlIGtleSBjYW4gYmUgdXBkYXRlZCB0byBhIG5vcm1hbAorCSBzdGF0ZS4KKworICAgICAoKikgRXhwaXJlZC4gS2V5cyBjYW4gaGF2ZSBsaWZldGltZXMgc2V0LiBJZiB0aGVpciBsaWZldGltZSBpcyBleGNlZWRlZCwKKwkgdGhleSB0cmF2ZXJzZSB0byB0aGlzIHN0YXRlLiBBbiBleHBpcmVkIGtleSBjYW4gYmUgdXBkYXRlZCBiYWNrIHRvIGEKKwkgbm9ybWFsIHN0YXRlLgorCisgICAgICgqKSBSZXZva2VkLiBBIGtleSBpcyBwdXQgaW4gdGhpcyBzdGF0ZSBieSB1c2Vyc3BhY2UgYWN0aW9uLiBJdCBjYW4ndCBiZQorCSBmb3VuZCBvciBvcGVyYXRlZCB1cG9uIChhcGFydCBmcm9tIGJ5IHVubGlua2luZyBpdCkuCisKKyAgICAgKCopIERlYWQuIFRoZSBrZXkncyB0eXBlIHdhcyB1bnJlZ2lzdGVyZWQsIGFuZCBzbyB0aGUga2V5IGlzIG5vdyB1c2VsZXNzLgorCisKKz09PT09PT09PT09PT09PT09PT09CitLRVkgU0VSVklDRSBPVkVSVklFVworPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGtleSBzZXJ2aWNlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGJlc2lkZXMga2V5czoKKworICgqKSBUaGUga2V5IHNlcnZpY2UgZGVmaW5lcyB0d28gc3BlY2lhbCBrZXkgdHlwZXM6CisKKyAgICAgKCspICJrZXlyaW5nIgorCisJIEtleXJpbmdzIGFyZSBzcGVjaWFsIGtleXMgdGhhdCBjb250YWluIGEgbGlzdCBvZiBvdGhlciBrZXlzLiBLZXlyaW5nCisJIGxpc3RzIGNhbiBiZSBtb2RpZmllZCB1c2luZyB2YXJpb3VzIHN5c3RlbSBjYWxscy4gS2V5cmluZ3Mgc2hvdWxkIG5vdAorCSBiZSBnaXZlbiBhIHBheWxvYWQgd2hlbiBjcmVhdGVkLgorCisgICAgICgrKSAidXNlciIKKworCSBBIGtleSBvZiB0aGlzIHR5cGUgaGFzIGEgZGVzY3JpcHRpb24gYW5kIGEgcGF5bG9hZCB0aGF0IGFyZSBhcmJpdHJhcnkKKwkgYmxvYnMgb2YgZGF0YS4gVGhlc2UgY2FuIGJlIGNyZWF0ZWQsIHVwZGF0ZWQgYW5kIHJlYWQgYnkgdXNlcnNwYWNlLAorCSBhbmQgYXJlbid0IGludGVuZGVkIGZvciB1c2UgYnkga2VybmVsIHNlcnZpY2VzLgorCisgKCopIEVhY2ggcHJvY2VzcyBzdWJzY3JpYmVzIHRvIHRocmVlIGtleXJpbmdzOiBhIHRocmVhZC1zcGVjaWZpYyBrZXlyaW5nLCBhCisgICAgIHByb2Nlc3Mtc3BlY2lmaWMga2V5cmluZywgYW5kIGEgc2Vzc2lvbi1zcGVjaWZpYyBrZXlyaW5nLgorCisgICAgIFRoZSB0aHJlYWQtc3BlY2lmaWMga2V5cmluZyBpcyBkaXNjYXJkZWQgZnJvbSB0aGUgY2hpbGQgd2hlbiBhbnkgc29ydCBvZgorICAgICBjbG9uZSwgZm9yaywgdmZvcmsgb3IgZXhlY3ZlIG9jY3Vycy4gQSBuZXcga2V5cmluZyBpcyBjcmVhdGVkIG9ubHkgd2hlbgorICAgICByZXF1aXJlZC4KKworICAgICBUaGUgcHJvY2Vzcy1zcGVjaWZpYyBrZXlyaW5nIGlzIHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgb25lIGluIHRoZSBjaGlsZAorICAgICBvbiBjbG9uZSwgZm9yaywgdmZvcmsgdW5sZXNzIENMT05FX1RIUkVBRCBpcyBzdXBwbGllZCwgaW4gd2hpY2ggY2FzZSBpdAorICAgICBpcyBzaGFyZWQuIGV4ZWN2ZSBhbHNvIGRpc2NhcmRzIHRoZSBwcm9jZXNzJ3MgcHJvY2VzcyBrZXlyaW5nIGFuZCBjcmVhdGVzCisgICAgIGEgbmV3IG9uZS4KKworICAgICBUaGUgc2Vzc2lvbi1zcGVjaWZpYyBrZXlyaW5nIGlzIHBlcnNpc3RlbnQgYWNyb3NzIGNsb25lLCBmb3JrLCB2Zm9yayBhbmQKKyAgICAgZXhlY3ZlLCBldmVuIHdoZW4gdGhlIGxhdHRlciBleGVjdXRlcyBhIHNldC1VSUQgb3Igc2V0LUdJRCBiaW5hcnkuIEEKKyAgICAgcHJvY2VzcyBjYW4sIGhvd2V2ZXIsIHJlcGxhY2UgaXRzIGN1cnJlbnQgc2Vzc2lvbiBrZXlyaW5nIHdpdGggYSBuZXcgb25lCisgICAgIGJ5IHVzaW5nIFBSX0pPSU5fU0VTU0lPTl9LRVlSSU5HLiBJdCBpcyBwZXJtaXR0ZWQgdG8gcmVxdWVzdCBhbiBhbm9ueW1vdXMKKyAgICAgbmV3IG9uZSwgb3IgdG8gYXR0ZW1wdCB0byBjcmVhdGUgb3Igam9pbiBvbmUgb2YgYSBzcGVjaWZpYyBuYW1lLgorCisgICAgIFRoZSBvd25lcnNoaXAgb2YgdGhlIHRocmVhZCBrZXlyaW5nIGNoYW5nZXMgd2hlbiB0aGUgcmVhbCBVSUQgYW5kIEdJRCBvZgorICAgICB0aGUgdGhyZWFkIGNoYW5nZXMuCisKKyAoKikgRWFjaCB1c2VyIElEIHJlc2lkZW50IGluIHRoZSBzeXN0ZW0gaG9sZHMgdHdvIHNwZWNpYWwga2V5cmluZ3M6IGEgdXNlcgorICAgICBzcGVjaWZpYyBrZXlyaW5nIGFuZCBhIGRlZmF1bHQgdXNlciBzZXNzaW9uIGtleXJpbmcuIFRoZSBkZWZhdWx0IHNlc3Npb24KKyAgICAga2V5cmluZyBpcyBpbml0aWFsaXNlZCB3aXRoIGEgbGluayB0byB0aGUgdXNlci1zcGVjaWZpYyBrZXlyaW5nLgorCisgICAgIFdoZW4gYSBwcm9jZXNzIGNoYW5nZXMgaXRzIHJlYWwgVUlELCBpZiBpdCB1c2VkIHRvIGhhdmUgbm8gc2Vzc2lvbiBrZXksIGl0CisgICAgIHdpbGwgYmUgc3Vic2NyaWJlZCB0byB0aGUgZGVmYXVsdCBzZXNzaW9uIGtleSBmb3IgdGhlIG5ldyBVSUQuCisKKyAgICAgSWYgYSBwcm9jZXNzIGF0dGVtcHRzIHRvIGFjY2VzcyBpdHMgc2Vzc2lvbiBrZXkgd2hlbiBpdCBkb2Vzbid0IGhhdmUgb25lLAorICAgICBpdCB3aWxsIGJlIHN1YnNjcmliZWQgdG8gdGhlIGRlZmF1bHQgZm9yIGl0cyBjdXJyZW50IFVJRC4KKworICgqKSBFYWNoIHVzZXIgaGFzIHR3byBxdW90YXMgYWdhaW5zdCB3aGljaCB0aGUga2V5cyB0aGV5IG93biBhcmUgdHJhY2tlZC4gT25lCisgICAgIGxpbWl0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGtleXMgYW5kIGtleXJpbmdzLCB0aGUgb3RoZXIgbGltaXRzIHRoZSB0b3RhbAorICAgICBhbW91bnQgb2YgZGVzY3JpcHRpb24gYW5kIHBheWxvYWQgc3BhY2UgdGhhdCBjYW4gYmUgY29uc3VtZWQuCisKKyAgICAgVGhlIHVzZXIgY2FuIHZpZXcgaW5mb3JtYXRpb24gb24gdGhpcyBhbmQgb3RoZXIgc3RhdGlzdGljcyB0aHJvdWdoIHByb2NmcworICAgICBmaWxlcy4KKworICAgICBQcm9jZXNzLXNwZWNpZmljIGFuZCB0aHJlYWQtc3BlY2lmaWMga2V5cmluZ3MgYXJlIG5vdCBjb3VudGVkIHRvd2FyZHMgYQorICAgICB1c2VyJ3MgcXVvdGEuCisKKyAgICAgSWYgYSBzeXN0ZW0gY2FsbCB0aGF0IG1vZGlmaWVzIGEga2V5IG9yIGtleXJpbmcgaW4gc29tZSB3YXkgd291bGQgcHV0IHRoZQorICAgICB1c2VyIG92ZXIgcXVvdGEsIHRoZSBvcGVyYXRpb24gaXMgcmVmdXNlZCBhbmQgZXJyb3IgRURRVU9UIGlzIHJldHVybmVkLgorCisgKCopIFRoZXJlJ3MgYSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgYnkgd2hpY2ggdXNlcnNwYWNlIHByb2dyYW1zIGNhbiBjcmVhdGUKKyAgICAgYW5kIG1hbmlwdWxhdGUga2V5cyBhbmQga2V5cmluZ3MuCisKKyAoKikgVGhlcmUncyBhIGtlcm5lbCBpbnRlcmZhY2UgYnkgd2hpY2ggc2VydmljZXMgY2FuIHJlZ2lzdGVyIHR5cGVzIGFuZAorICAgICBzZWFyY2ggZm9yIGtleXMuCisKKyAoKikgVGhlcmUncyBhIHdheSBmb3IgdGhlIGEgc2VhcmNoIGRvbmUgZnJvbSB0aGUga2VybmVsIHRvIGNhbGwgYmFjayB0bworICAgICB1c2Vyc3BhY2UgdG8gcmVxdWVzdCBhIGtleSB0aGF0IGNhbid0IGJlIGZvdW5kIGluIGEgcHJvY2VzcydzIGtleXJpbmdzLgorCisgKCopIEFuIG9wdGlvbmFsIGZpbGVzeXN0ZW0gaXMgYXZhaWxhYmxlIHRocm91Z2ggd2hpY2ggdGhlIGtleSBkYXRhYmFzZSBjYW4gYmUKKyAgICAgdmlld2VkIGFuZCBtYW5pcHVsYXRlZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09CitLRVkgQUNDRVNTIFBFUk1JU1NJT05TCis9PT09PT09PT09PT09PT09PT09PT09CisKK0tleXMgaGF2ZSBhbiBvd25lciB1c2VyIElELCBhIGdyb3VwIGFjY2VzcyBJRCwgYW5kIGEgcGVybWlzc2lvbnMgbWFzay4gVGhlCittYXNrIGhhcyB1cCB0byBlaWdodCBiaXRzIGVhY2ggZm9yIHVzZXIsIGdyb3VwIGFuZCBvdGhlciBhY2Nlc3MuIE9ubHkgZml2ZSBvZgorZWFjaCBzZXQgb2YgZWlnaHQgYml0cyBhcmUgZGVmaW5lZC4gVGhlc2UgcGVybWlzc2lvbnMgZ3JhbnRlZCBhcmU6CisKKyAoKikgVmlldworCisgICAgIFRoaXMgcGVybWl0cyBhIGtleSBvciBrZXlyaW5nJ3MgYXR0cmlidXRlcyB0byBiZSB2aWV3ZWQgLSBpbmNsdWRpbmcga2V5CisgICAgIHR5cGUgYW5kIGRlc2NyaXB0aW9uLgorCisgKCopIFJlYWQKKworICAgICBUaGlzIHBlcm1pdHMgYSBrZXkncyBwYXlsb2FkIHRvIGJlIHZpZXdlZCBvciBhIGtleXJpbmcncyBsaXN0IG9mIGxpbmtlZAorICAgICBrZXlzLgorCisgKCopIFdyaXRlCisKKyAgICAgVGhpcyBwZXJtaXRzIGEga2V5J3MgcGF5bG9hZCB0byBiZSBpbnN0YW50aWF0ZWQgb3IgdXBkYXRlZCwgb3IgaXQgYWxsb3dzCisgICAgIGEgbGluayB0byBiZSBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gYSBrZXlyaW5nLgorCisgKCopIFNlYXJjaAorCisgICAgIFRoaXMgcGVybWl0cyBrZXlyaW5ncyB0byBiZSBzZWFyY2hlZCBhbmQga2V5cyB0byBiZSBmb3VuZC4gU2VhcmNoZXMgY2FuCisgICAgIG9ubHkgcmVjdXJzZSBpbnRvIG5lc3RlZCBrZXlyaW5ncyB0aGF0IGhhdmUgc2VhcmNoIHBlcm1pc3Npb24gc2V0LgorCisgKCopIExpbmsKKworICAgICBUaGlzIHBlcm1pdHMgYSBrZXkgb3Iga2V5cmluZyB0byBiZSBsaW5rZWQgdG8uIFRvIGNyZWF0ZSBhIGxpbmsgZnJvbSBhCisgICAgIGtleXJpbmcgdG8gYSBrZXksIGEgcHJvY2VzcyBtdXN0IGhhdmUgV3JpdGUgcGVybWlzc2lvbiBvbiB0aGUga2V5cmluZyBhbmQKKyAgICAgTGluayBwZXJtaXNzaW9uIG9uIHRoZSBrZXkuCisKK0ZvciBjaGFuZ2luZyB0aGUgb3duZXJzaGlwLCBncm91cCBJRCBvciBwZXJtaXNzaW9ucyBtYXNrLCBiZWluZyB0aGUgb3duZXIgb2YKK3RoZSBrZXkgb3IgaGF2aW5nIHRoZSBzeXNhZG1pbiBjYXBhYmlsaXR5IGlzIHN1ZmZpY2llbnQuCisKKworPT09PT09PT09PT09PT09PQorTkVXIFBST0NGUyBGSUxFUworPT09PT09PT09PT09PT09PQorCitUd28gZmlsZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHByb2NmcyBieSB3aGljaCBhbiBhZG1pbmlzdHJhdG9yIGNhbiBmaW5kIG91dAorYWJvdXQgdGhlIHN0YXR1cyBvZiB0aGUga2V5IHNlcnZpY2U6CisKKyAoKikgL3Byb2Mva2V5cworCisgICAgIFRoaXMgbGlzdHMgYWxsIHRoZSBrZXlzIG9uIHRoZSBzeXN0ZW0sIGdpdmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGVpcgorICAgICB0eXBlLCBkZXNjcmlwdGlvbiBhbmQgcGVybWlzc2lvbnMuIFRoZSBwYXlsb2FkIG9mIHRoZSBrZXkgaXMgbm90CisgICAgIGF2YWlsYWJsZSB0aGlzIHdheToKKworCVNFUklBTCAgIEZMQUdTICBVU0FHRSBFWFBZIFBFUk0gICBVSUQgICBHSUQgICBUWVBFICAgICAgREVTQ1JJUFRJT046IFNVTU1BUlkKKwkwMDAwMDAwMSBJLS0tLS0gICAgMzkgcGVybSAxZjAwMDAgICAgIDAgICAgIDAga2V5cmluZyAgIF91aWRfc2VzLjA6IDEvNAorCTAwMDAwMDAyIEktLS0tLSAgICAgMiBwZXJtIDFmMDAwMCAgICAgMCAgICAgMCBrZXlyaW5nICAgX3VpZC4wOiBlbXB0eQorCTAwMDAwMDA3IEktLS0tLSAgICAgMSBwZXJtIDFmMDAwMCAgICAgMCAgICAgMCBrZXlyaW5nICAgX3BpZC4xOiBlbXB0eQorCTAwMDAwMThkIEktLS0tLSAgICAgMSBwZXJtIDFmMDAwMCAgICAgMCAgICAgMCBrZXlyaW5nICAgX3BpZC40MTI6IGVtcHR5CisJMDAwMDA0ZDIgSS0tUS0tICAgICAxIHBlcm0gMWYwMDAwICAgIDMyICAgIC0xIGtleXJpbmcgICBfdWlkLjMyOiAxLzQKKwkwMDAwMDRkMyBJLS1RLS0gICAgIDMgcGVybSAxZjAwMDAgICAgMzIgICAgLTEga2V5cmluZyAgIF91aWRfc2VzLjMyOiBlbXB0eQorCTAwMDAwODkyIEktLVFVLSAgICAgMSBwZXJtIDFmMDAwMCAgICAgMCAgICAgMCB1c2VyICAgICAgbWV0YWw6Y29wcGVyOiAwCisJMDAwMDA4OTMgSS0tUS1OICAgICAxICAzNXMgMWYwMDAwICAgICAwICAgICAwIHVzZXIgICAgICBtZXRhbDpzaWx2ZXI6IDAKKwkwMDAwMDg5NCBJLS1RLS0gICAgIDEgIDEwaCAxZjAwMDAgICAgIDAgICAgIDAgdXNlciAgICAgIG1ldGFsOmdvbGQ6IDAKKworICAgICBUaGUgZmxhZ3MgYXJlOgorCisJSQlJbnN0YW50aWF0ZWQKKwlSCVJldm9rZWQKKwlECURlYWQKKwlRCUNvbnRyaWJ1dGVzIHRvIHVzZXIncyBxdW90YQorCVUJVW5kZXIgY29udHJ1Y3Rpb24gYnkgY2FsbGJhY2sgdG8gdXNlcnNwYWNlCisJTglOZWdhdGl2ZSBrZXkKKworICAgICBUaGlzIGZpbGUgbXVzdCBiZSBlbmFibGVkIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIHRpbWUgYXMgaXQgYWxsb3dzIGFueW9uZQorICAgICB0byBsaXN0IHRoZSBrZXlzIGRhdGFiYXNlLgorCisgKCopIC9wcm9jL2tleS11c2VycworCisgICAgIFRoaXMgZmlsZSBsaXN0cyB0aGUgdHJhY2tpbmcgZGF0YSBmb3IgZWFjaCB1c2VyIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBrZXkKKyAgICAgb24gdGhlIHN5c3RlbS4gU3VjaCBkYXRhIGluY2x1ZGVzIHF1b3RhIGluZm9ybWF0aW9uIGFuZCBzdGF0aXN0aWNzOgorCisJW3Jvb3RAYW5kcm9tZWRhIHJvb3RdIyBjYXQgL3Byb2Mva2V5LXVzZXJzCisJMDogICAgIDQ2IDQ1LzQ1IDEvMTAwIDEzLzEwMDAwCisJMjk6ICAgICAyIDIvMiAyLzEwMCA0MC8xMDAwMAorCTMyOiAgICAgMiAyLzIgMi8xMDAgNDAvMTAwMDAKKwkzODogICAgIDIgMi8yIDIvMTAwIDQwLzEwMDAwCisKKyAgICAgVGhlIGZvcm1hdCBvZiBlYWNoIGxpbmUgaXMKKwk8VUlEPjoJCQlVc2VyIElEIHRvIHdoaWNoIHRoaXMgYXBwbGllcworCTx1c2FnZT4JCQlTdHJ1Y3R1cmUgcmVmY291bnQKKwk8aW5zdD4vPGtleXM+CQlUb3RhbCBudW1iZXIgb2Yga2V5cyBhbmQgbnVtYmVyIGluc3RhbnRpYXRlZAorCTxrZXlzPi88bWF4PgkJS2V5IGNvdW50IHF1b3RhCisJPGJ5dGVzPi88bWF4PgkJS2V5IHNpemUgcXVvdGEKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVU0VSU1BBQ0UgU1lTVEVNIENBTEwgSU5URVJGQUNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VzZXJzcGFjZSBjYW4gbWFuaXB1bGF0ZSBrZXlzIGRpcmVjdGx5IHRocm91Z2ggdGhyZWUgbmV3IHN5c2NhbGxzOiBhZGRfa2V5LAorcmVxdWVzdF9rZXkgYW5kIGtleWN0bC4gVGhlIGxhdHRlciBwcm92aWRlcyBhIG51bWJlciBvZiBmdW5jdGlvbnMgZm9yCittYW5pcHVsYXRpbmcga2V5cy4KKworV2hlbiByZWZlcnJpbmcgdG8gYSBrZXkgZGlyZWN0bHksIHVzZXJzcGFjZSBwcm9ncmFtcyBzaG91bGQgdXNlIHRoZSBrZXkncworc2VyaWFsIG51bWJlciAoYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlcikuIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIHNwZWNpYWwKK3ZhbHVlcyBhdmFpbGFibGUgZm9yIHJlZmVycmluZyB0byBzcGVjaWFsIGtleXMgYW5kIGtleXJpbmdzIHRoYXQgcmVsYXRlIHRvIHRoZQorcHJvY2VzcyBtYWtpbmcgdGhlIGNhbGw6CisKKwlDT05TVEFOVAkJCVZBTFVFCUtFWSBSRUZFUkVOQ0VECisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlLRVlfU1BFQ19USFJFQURfS0VZUklORwkJLTEJdGhyZWFkLXNwZWNpZmljIGtleXJpbmcKKwlLRVlfU1BFQ19QUk9DRVNTX0tFWVJJTkcJLTIJcHJvY2Vzcy1zcGVjaWZpYyBrZXlyaW5nCisJS0VZX1NQRUNfU0VTU0lPTl9LRVlSSU5HCS0zCXNlc3Npb24tc3BlY2lmaWMga2V5cmluZworCUtFWV9TUEVDX1VTRVJfS0VZUklORwkJLTQJVUlELXNwZWNpZmljIGtleXJpbmcKKwlLRVlfU1BFQ19VU0VSX1NFU1NJT05fS0VZUklORwktNQlVSUQtc2Vzc2lvbiBrZXlyaW5nCisJS0VZX1NQRUNfR1JPVVBfS0VZUklORwkJLTYJR0lELXNwZWNpZmljIGtleXJpbmcKKworCitUaGUgbWFpbiBzeXNjYWxscyBhcmU6CisKKyAoKikgQ3JlYXRlIGEgbmV3IGtleSBvZiBnaXZlbiB0eXBlLCBkZXNjcmlwdGlvbiBhbmQgcGF5bG9hZCBhbmQgYWRkIGl0IHRvIHRoZQorICAgICBub21pbmF0ZWQga2V5cmluZzoKKworCWtleV9zZXJpYWxfdCBhZGRfa2V5KGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRlc2MsCisJCQkgICAgIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBwbGVuLAorCQkJICAgICBrZXlfc2VyaWFsX3Qga2V5cmluZyk7CisKKyAgICAgSWYgYSBrZXkgb2YgdGhlIHNhbWUgdHlwZSBhbmQgZGVzY3JpcHRpb24gYXMgdGhhdCBwcm9wb3NlZCBhbHJlYWR5IGV4aXN0cworICAgICBpbiB0aGUga2V5cmluZywgdGhpcyB3aWxsIHRyeSB0byB1cGRhdGUgaXQgd2l0aCB0aGUgZ2l2ZW4gcGF5bG9hZCwgb3IgaXQKKyAgICAgd2lsbCByZXR1cm4gZXJyb3IgRUVYSVNUIGlmIHRoYXQgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUga2V5CisgICAgIHR5cGUuIFRoZSBwcm9jZXNzIG11c3QgYWxzbyBoYXZlIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIGtleSB0byBiZQorICAgICBhYmxlIHRvIHVwZGF0ZSBpdC4gVGhlIG5ldyBrZXkgd2lsbCBoYXZlIGFsbCB1c2VyIHBlcm1pc3Npb25zIGdyYW50ZWQgYW5kCisgICAgIG5vIGdyb3VwIG9yIHRoaXJkIHBhcnR5IHBlcm1pc3Npb25zLgorCisgICAgIE90aGVyd2lzZSwgdGhpcyB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3IGtleSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUKKyAgICAgYW5kIGRlc2NyaXB0aW9uLCBhbmQgdG8gaW5zdGFudGlhdGUgaXQgd2l0aCB0aGUgc3VwcGxpZWQgcGF5bG9hZCBhbmQKKyAgICAgYXR0YWNoIGl0IHRvIHRoZSBrZXlyaW5nLiBJbiB0aGlzIGNhc2UsIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIHRoZQorICAgICBwcm9jZXNzIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUga2V5cmluZy4KKworICAgICBUaGUgcGF5bG9hZCBpcyBvcHRpb25hbCwgYW5kIHRoZSBwb2ludGVyIGNhbiBiZSBOVUxMIGlmIG5vdCByZXF1aXJlZCBieQorICAgICB0aGUgdHlwZS4gVGhlIHBheWxvYWQgaXMgcGxlbiBpbiBzaXplLCBhbmQgcGxlbiBjYW4gYmUgemVybyBmb3IgYW4gZW1wdHkKKyAgICAgcGF5bG9hZC4KKworICAgICBBIG5ldyBrZXlyaW5nIGNhbiBiZSBnZW5lcmF0ZWQgYnkgc2V0dGluZyB0eXBlICJrZXlyaW5nIiwgdGhlIGtleXJpbmcKKyAgICAgbmFtZSBhcyB0aGUgZGVzY3JpcHRpb24gKG9yIE5VTEwpIGFuZCBzZXR0aW5nIHRoZSBwYXlsb2FkIHRvIE5VTEwuCisKKyAgICAgVXNlciBkZWZpbmVkIGtleXMgY2FuIGJlIGNyZWF0ZWQgYnkgc3BlY2lmeWluZyB0eXBlICJ1c2VyIi4gSXQgaXMKKyAgICAgcmVjb21tZW5kZWQgdGhhdCBhIHVzZXIgZGVmaW5lZCBrZXkncyBkZXNjcmlwdGlvbiBieSBwcmVmaXhlZCB3aXRoIGEgdHlwZQorICAgICBJRCBhbmQgYSBjb2xvbiwgc3VjaCBhcyAia3JiNXRndDoiIGZvciBhIEtlcmJlcm9zIDUgdGlja2V0IGdyYW50aW5nCisgICAgIHRpY2tldC4KKworICAgICBBbnkgb3RoZXIgdHlwZSBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBpbiBhZHZhbmNlIGJ5IGEKKyAgICAga2VybmVsIHNlcnZpY2Ugc3VjaCBhcyBhIGZpbGVzeXN0ZW0uCisKKyAgICAgVGhlIElEIG9mIHRoZSBuZXcgb3IgdXBkYXRlZCBrZXkgaXMgcmV0dXJuZWQgaWYgc3VjY2Vzc2Z1bC4KKworCisgKCopIFNlYXJjaCB0aGUgcHJvY2VzcydzIGtleXJpbmdzIGZvciBhIGtleSwgcG90ZW50aWFsbHkgY2FsbGluZyBvdXQgdG8KKyAgICAgdXNlcnNwYWNlIHRvIGNyZWF0ZSBpdC4KKworCWtleV9zZXJpYWxfdCByZXF1ZXN0X2tleShjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKKwkJCQkgY29uc3QgY2hhciAqY2FsbG91dF9pbmZvLAorCQkJCSBrZXlfc2VyaWFsX3QgZGVzdF9rZXlyaW5nKTsKKworICAgICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGFsbCB0aGUgcHJvY2VzcydzIGtleXJpbmdzIGluIHRoZSBvcmRlciB0aHJlYWQsCisgICAgIHByb2Nlc3MsIHNlc3Npb24gZm9yIGEgbWF0Y2hpbmcga2V5LiBUaGlzIHdvcmtzIHZlcnkgbXVjaCBsaWtlCisgICAgIEtFWUNUTF9TRUFSQ0gsIGluY2x1ZGluZyB0aGUgb3B0aW9uYWwgYXR0YWNobWVudCBvZiB0aGUgZGlzY292ZXJlZCBrZXkgdG8KKyAgICAgYSBrZXlyaW5nLgorCisgICAgIElmIGEga2V5IGNhbm5vdCBiZSBmb3VuZCwgYW5kIGlmIGNhbGxvdXRfaW5mbyBpcyBub3QgTlVMTCwgdGhlbgorICAgICAvc2Jpbi9yZXF1ZXN0LWtleSB3aWxsIGJlIGludm9rZWQgaW4gYW4gYXR0ZW1wdCB0byBvYnRhaW4gYSBrZXkuIFRoZQorICAgICBjYWxsb3V0X2luZm8gc3RyaW5nIHdpbGwgYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBwcm9ncmFtLgorCisKK1RoZSBrZXljdGwgc3lzY2FsbCBmdW5jdGlvbnMgYXJlOgorCisgKCopIE1hcCBhIHNwZWNpYWwga2V5IElEIHRvIGEgcmVhbCBrZXkgSUQgZm9yIHRoaXMgcHJvY2VzczoKKworCWtleV9zZXJpYWxfdCBrZXljdGwoS0VZQ1RMX0dFVF9LRVlSSU5HX0lELCBrZXlfc2VyaWFsX3QgaWQsCisJCQkgICAgaW50IGNyZWF0ZSk7CisKKyAgICAgVGhlIHNwZWNpYWwga2V5IHNwZWNpZmllZCBieSAiaWQiIGlzIGxvb2tlZCB1cCAod2l0aCB0aGUga2V5IGJlaW5nCisgICAgIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5KSBhbmQgdGhlIElEIG9mIHRoZSBrZXkgb3Iga2V5cmluZyB0aHVzIGZvdW5kIGlzCisgICAgIHJldHVybmVkIGlmIGl0IGV4aXN0cy4KKworICAgICBJZiB0aGUga2V5IGRvZXMgbm90IHlldCBleGlzdCwgdGhlIGtleSB3aWxsIGJlIGNyZWF0ZWQgaWYgImNyZWF0ZSIgaXMKKyAgICAgbm9uLXplcm87IGFuZCB0aGUgZXJyb3IgRU5PS0VZIHdpbGwgYmUgcmV0dXJuZWQgaWYgImNyZWF0ZSIgaXMgemVyby4KKworCisgKCopIFJlcGxhY2UgdGhlIHNlc3Npb24ga2V5cmluZyB0aGlzIHByb2Nlc3Mgc3Vic2NyaWJlcyB0byB3aXRoIGEgbmV3IG9uZToKKworCWtleV9zZXJpYWxfdCBrZXljdGwoS0VZQ1RMX0pPSU5fU0VTU0lPTl9LRVlSSU5HLCBjb25zdCBjaGFyICpuYW1lKTsKKworICAgICBJZiBuYW1lIGlzIE5VTEwsIGFuIGFub255bW91cyBrZXlyaW5nIGlzIGNyZWF0ZWQgYXR0YWNoZWQgdG8gdGhlIHByb2Nlc3MKKyAgICAgYXMgaXRzIHNlc3Npb24ga2V5cmluZywgZGlzcGxhY2luZyB0aGUgb2xkIHNlc3Npb24ga2V5cmluZy4KKworICAgICBJZiBuYW1lIGlzIG5vdCBOVUxMLCBpZiBhIGtleXJpbmcgb2YgdGhhdCBuYW1lIGV4aXN0cywgdGhlIHByb2Nlc3MKKyAgICAgYXR0ZW1wdHMgdG8gYXR0YWNoIGl0IGFzIHRoZSBzZXNzaW9uIGtleXJpbmcsIHJldHVybmluZyBhbiBlcnJvciBpZiB0aGF0CisgICAgIGlzIG5vdCBwZXJtaXR0ZWQ7IG90aGVyd2lzZSBhIG5ldyBrZXlyaW5nIG9mIHRoYXQgbmFtZSBpcyBjcmVhdGVkIGFuZAorICAgICBhdHRhY2hlZCBhcyB0aGUgc2Vzc2lvbiBrZXlyaW5nLgorCisgICAgIFRvIGF0dGFjaCB0byBhIG5hbWVkIGtleXJpbmcsIHRoZSBrZXlyaW5nIG11c3QgaGF2ZSBzZWFyY2ggcGVybWlzc2lvbiBmb3IKKyAgICAgdGhlIHByb2Nlc3MncyBvd25lcnNoaXAuCisKKyAgICAgVGhlIElEIG9mIHRoZSBuZXcgc2Vzc2lvbiBrZXlyaW5nIGlzIHJldHVybmVkIGlmIHN1Y2Nlc3NmdWwuCisKKworICgqKSBVcGRhdGUgdGhlIHNwZWNpZmllZCBrZXk6CisKKwlsb25nIGtleWN0bChLRVlDVExfVVBEQVRFLCBrZXlfc2VyaWFsX3Qga2V5LCBjb25zdCB2b2lkICpwYXlsb2FkLAorCQkgICAgc2l6ZV90IHBsZW4pOworCisgICAgIFRoaXMgd2lsbCB0cnkgdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQga2V5IHdpdGggdGhlIGdpdmVuIHBheWxvYWQsIG9yIGl0CisgICAgIHdpbGwgcmV0dXJuIGVycm9yIEVPUE5PVFNVUFAgaWYgdGhhdCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXkKKyAgICAgdHlwZS4gVGhlIHByb2Nlc3MgbXVzdCBhbHNvIGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUga2V5IHRvIGJlCisgICAgIGFibGUgdG8gdXBkYXRlIGl0LgorCisgICAgIFRoZSBwYXlsb2FkIGlzIG9mIGxlbmd0aCBwbGVuLCBhbmQgbWF5IGJlIGFic2VudCBvciBlbXB0eSBhcyBmb3IKKyAgICAgYWRkX2tleSgpLgorCisKKyAoKikgUmV2b2tlIGEga2V5OgorCisJbG9uZyBrZXljdGwoS0VZQ1RMX1JFVk9LRSwga2V5X3NlcmlhbF90IGtleSk7CisKKyAgICAgVGhpcyBtYWtlcyBhIGtleSB1bmF2YWlsYWJsZSBmb3IgZnVydGhlciBvcGVyYXRpb25zLiBGdXJ0aGVyIGF0dGVtcHRzIHRvCisgICAgIHVzZSB0aGUga2V5IHdpbGwgYmUgbWV0IHdpdGggZXJyb3IgRUtFWVJFVk9LRUQsIGFuZCB0aGUga2V5IHdpbGwgbm8gbG9uZ2VyCisgICAgIGJlIGZpbmRhYmxlLgorCisKKyAoKikgQ2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgYSBrZXk6CisKKwlsb25nIGtleWN0bChLRVlDVExfQ0hPV04sIGtleV9zZXJpYWxfdCBrZXksIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKTsKKworICAgICBUaGlzIGZ1bmN0aW9uIHBlcm1pdHMgYSBrZXkncyBvd25lciBhbmQgZ3JvdXAgSUQgdG8gYmUgY2hhbmdlZC4gRWl0aGVyCisgICAgIG9uZSBvZiB1aWQgb3IgZ2lkIGNhbiBiZSBzZXQgdG8gLTEgdG8gc3VwcHJlc3MgdGhhdCBjaGFuZ2UuCisKKyAgICAgT25seSB0aGUgc3VwZXJ1c2VyIGNhbiBjaGFuZ2UgYSBrZXkncyBvd25lciB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUKKyAgICAga2V5J3MgY3VycmVudCBvd25lci4gU2ltaWxhcmx5LCBvbmx5IHRoZSBzdXBlcnVzZXIgY2FuIGNoYW5nZSBhIGtleSdzCisgICAgIGdyb3VwIElEIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBjYWxsaW5nIHByb2Nlc3MncyBncm91cCBJRCBvciBvbmUgb2YKKyAgICAgaXRzIGdyb3VwIGxpc3QgbWVtYmVycy4KKworCisgKCopIENoYW5nZSB0aGUgcGVybWlzc2lvbnMgbWFzayBvbiBhIGtleToKKworCWxvbmcga2V5Y3RsKEtFWUNUTF9TRVRQRVJNLCBrZXlfc2VyaWFsX3Qga2V5LCBrZXlfcGVybV90IHBlcm0pOworCisgICAgIFRoaXMgZnVuY3Rpb24gcGVybWl0cyB0aGUgb3duZXIgb2YgYSBrZXkgb3IgdGhlIHN1cGVydXNlciB0byBjaGFuZ2UgdGhlCisgICAgIHBlcm1pc3Npb25zIG1hc2sgb24gYSBrZXkuCisKKyAgICAgT25seSBiaXRzIHRoZSBhdmFpbGFibGUgYml0cyBhcmUgcGVybWl0dGVkOyBpZiBhbnkgb3RoZXIgYml0cyBhcmUgc2V0LAorICAgICBlcnJvciBFSU5WQUwgd2lsbCBiZSByZXR1cm5lZC4KKworCisgKCopIERlc2NyaWJlIGEga2V5OgorCisJbG9uZyBrZXljdGwoS0VZQ1RMX0RFU0NSSUJFLCBrZXlfc2VyaWFsX3Qga2V5LCBjaGFyICpidWZmZXIsCisJCSAgICBzaXplX3QgYnVmbGVuKTsKKworICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdW1tYXJ5IG9mIHRoZSBrZXkncyBhdHRyaWJ1dGVzIChidXQgbm90IGl0cworICAgICBwYXlsb2FkIGRhdGEpIGFzIGEgc3RyaW5nIGluIHRoZSBidWZmZXIgcHJvdmlkZWQuCisKKyAgICAgVW5sZXNzIHRoZXJlJ3MgYW4gZXJyb3IsIGl0IGFsd2F5cyByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSBpdCBjb3VsZAorICAgICBwcm9kdWNlLCBldmVuIGlmIHRoYXQncyB0b28gYmlnIGZvciB0aGUgYnVmZmVyLCBidXQgaXQgd29uJ3QgY29weSBtb3JlCisgICAgIHRoYW4gcmVxdWVzdGVkIHRvIHVzZXJzcGFjZS4gSWYgdGhlIGJ1ZmZlciBwb2ludGVyIGlzIE5VTEwgdGhlbiBubyBjb3B5CisgICAgIHdpbGwgdGFrZSBwbGFjZS4KKworICAgICBBIHByb2Nlc3MgbXVzdCBoYXZlIHZpZXcgcGVybWlzc2lvbiBvbiB0aGUga2V5IGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlCisgICAgIHN1Y2Nlc3NmdWwuCisKKyAgICAgSWYgc3VjY2Vzc2Z1bCwgYSBzdHJpbmcgaXMgcGxhY2VkIGluIHRoZSBidWZmZXIgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisKKwk8dHlwZT47PHVpZD47PGdpZD47PHBlcm0+OzxkZXNjcmlwdGlvbj4KKworICAgICBXaGVyZSB0eXBlIGFuZCBkZXNjcmlwdGlvbiBhcmUgc3RyaW5ncywgdWlkIGFuZCBnaWQgYXJlIGRlY2ltYWwsIGFuZCBwZXJtCisgICAgIGlzIGhleGFkZWNpbWFsLiBBIE5VTCBjaGFyYWN0ZXIgaXMgaW5jbHVkZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGlmCisgICAgIHRoZSBidWZmZXIgaXMgc3VmZmljaWVudGx5IGJpZy4KKworICAgICBUaGlzIGNhbiBiZSBwYXJzZWQgd2l0aAorCisJc3NjYW5mKGJ1ZmZlciwgIiVbXjtdOyVkOyVkOyVvOyVzIiwgdHlwZSwgJnVpZCwgJmdpZCwgJm1vZGUsIGRlc2MpOworCisKKyAoKikgQ2xlYXIgb3V0IGEga2V5cmluZzoKKworCWxvbmcga2V5Y3RsKEtFWUNUTF9DTEVBUiwga2V5X3NlcmlhbF90IGtleXJpbmcpOworCisgICAgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBsaXN0IG9mIGtleXMgYXR0YWNoZWQgdG8gYSBrZXlyaW5nLiBUaGUgY2FsbGluZworICAgICBwcm9jZXNzIG11c3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBrZXlyaW5nLCBhbmQgaXQgbXVzdCBiZSBhCisgICAgIGtleXJpbmcgKG9yIGVsc2UgZXJyb3IgRU5PVERJUiB3aWxsIHJlc3VsdCkuCisKKworICgqKSBMaW5rIGEga2V5IGludG8gYSBrZXlyaW5nOgorCisJbG9uZyBrZXljdGwoS0VZQ1RMX0xJTkssIGtleV9zZXJpYWxfdCBrZXlyaW5nLCBrZXlfc2VyaWFsX3Qga2V5KTsKKworICAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBsaW5rIGZyb20gdGhlIGtleXJpbmcgdG8gdGhlIGtleS4gVGhlIHByb2Nlc3MKKyAgICAgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gb24gdGhlIGtleXJpbmcgYW5kIG11c3QgaGF2ZSBsaW5rIHBlcm1pc3Npb24KKyAgICAgb24gdGhlIGtleS4KKworICAgICBTaG91bGQgdGhlIGtleXJpbmcgbm90IGJlIGEga2V5cmluZywgZXJyb3IgRU5PVERJUiB3aWxsIHJlc3VsdDsgYW5kIGlmCisgICAgIHRoZSBrZXlyaW5nIGlzIGZ1bGwsIGVycm9yIEVORklMRSB3aWxsIHJlc3VsdC4KKworICAgICBUaGUgbGluayBwcm9jZWR1cmUgY2hlY2tzIHRoZSBuZXN0aW5nIG9mIHRoZSBrZXlyaW5ncywgcmV0dXJuaW5nIEVMT09QIGlmCisgICAgIGl0IGFwcGVhcnMgdG8gZGVlcCBvciBFREVBRExLIGlmIHRoZSBsaW5rIHdvdWxkIGludHJvZHVjZSBhIGN5Y2xlLgorCisKKyAoKikgVW5saW5rIGEga2V5IG9yIGtleXJpbmcgZnJvbSBhbm90aGVyIGtleXJpbmc6CisKKwlsb25nIGtleWN0bChLRVlDVExfVU5MSU5LLCBrZXlfc2VyaWFsX3Qga2V5cmluZywga2V5X3NlcmlhbF90IGtleSk7CisKKyAgICAgVGhpcyBmdW5jdGlvbiBsb29rcyB0aHJvdWdoIHRoZSBrZXlyaW5nIGZvciB0aGUgZmlyc3QgbGluayB0byB0aGUKKyAgICAgc3BlY2lmaWVkIGtleSwgYW5kIHJlbW92ZXMgaXQgaWYgZm91bmQuIFN1YnNlcXVlbnQgbGlua3MgdG8gdGhhdCBrZXkgYXJlCisgICAgIGlnbm9yZWQuIFRoZSBwcm9jZXNzIG11c3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBrZXlyaW5nLgorCisgICAgIElmIHRoZSBrZXlyaW5nIGlzIG5vdCBhIGtleXJpbmcsIGVycm9yIEVOT1RESVIgd2lsbCByZXN1bHQ7IGFuZCBpZiB0aGUKKyAgICAga2V5IGlzIG5vdCBwcmVzZW50LCBlcnJvciBFTk9FTlQgd2lsbCBiZSB0aGUgcmVzdWx0LgorCisKKyAoKikgU2VhcmNoIGEga2V5cmluZyB0cmVlIGZvciBhIGtleToKKworCWtleV9zZXJpYWxfdCBrZXljdGwoS0VZQ1RMX1NFQVJDSCwga2V5X3NlcmlhbF90IGtleXJpbmcsCisJCQkgICAgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkgICAga2V5X3NlcmlhbF90IGRlc3Rfa2V5cmluZyk7CisKKyAgICAgVGhpcyBzZWFyY2hlcyB0aGUga2V5cmluZyB0cmVlIGhlYWRlZCBieSB0aGUgc3BlY2lmaWVkIGtleXJpbmcgdW50aWwgYQorICAgICBrZXkgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSB0eXBlIGFuZCBkZXNjcmlwdGlvbiBjcml0ZXJpYS4gRWFjaCBrZXlyaW5nCisgICAgIGlzIGNoZWNrZWQgZm9yIGtleXMgYmVmb3JlIHJlY3Vyc2lvbiBpbnRvIGl0cyBjaGlsZHJlbiBvY2N1cnMuCisKKyAgICAgVGhlIHByb2Nlc3MgbXVzdCBoYXZlIHNlYXJjaCBwZXJtaXNzaW9uIG9uIHRoZSB0b3AgbGV2ZWwga2V5cmluZywgb3IgZWxzZQorICAgICBlcnJvciBFQUNDRVMgd2lsbCByZXN1bHQuIE9ubHkga2V5cmluZ3MgdGhhdCB0aGUgcHJvY2VzcyBoYXMgc2VhcmNoCisgICAgIHBlcm1pc3Npb24gb24gd2lsbCBiZSByZWN1cnNlZCBpbnRvLCBhbmQgb25seSBrZXlzIGFuZCBrZXlyaW5ncyBmb3Igd2hpY2gKKyAgICAgYSBwcm9jZXNzIGhhcyBzZWFyY2ggcGVybWlzc2lvbiBjYW4gYmUgbWF0Y2hlZC4gSWYgdGhlIHNwZWNpZmllZCBrZXlyaW5nCisgICAgIGlzIG5vdCBhIGtleXJpbmcsIEVOT1RESVIgd2lsbCByZXN1bHQuCisKKyAgICAgSWYgdGhlIHNlYXJjaCBzdWNjZWVkcywgdGhlIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBsaW5rIHRoZSBmb3VuZCBrZXkKKyAgICAgaW50byB0aGUgZGVzdGluYXRpb24ga2V5cmluZyBpZiBvbmUgaXMgc3VwcGxpZWQgKG5vbi16ZXJvIElEKS4gQWxsIHRoZQorICAgICBjb25zdHJhaW50cyBhcHBsaWNhYmxlIHRvIEtFWUNUTF9MSU5LIGFwcGx5IGluIHRoaXMgY2FzZSB0b28uCisKKyAgICAgRXJyb3IgRU5PS0VZLCBFS0VZUkVWT0tFRCBvciBFS0VZRVhQSVJFRCB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSBzZWFyY2gKKyAgICAgZmFpbHMuIE9uIHN1Y2Nlc3MsIHRoZSByZXN1bHRpbmcga2V5IElEIHdpbGwgYmUgcmV0dXJuZWQuCisKKworICgqKSBSZWFkIHRoZSBwYXlsb2FkIGRhdGEgZnJvbSBhIGtleToKKworCWtleV9zZXJpYWxfdCBrZXljdGwoS0VZQ1RMX1JFQUQsIGtleV9zZXJpYWxfdCBrZXlyaW5nLCBjaGFyICpidWZmZXIsCisJCQkgICAgc2l6ZV90IGJ1Zmxlbik7CisKKyAgICAgVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byByZWFkIHRoZSBwYXlsb2FkIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIGtleQorICAgICBpbnRvIHRoZSBidWZmZXIuIFRoZSBwcm9jZXNzIG11c3QgaGF2ZSByZWFkIHBlcm1pc3Npb24gb24gdGhlIGtleSB0bworICAgICBzdWNjZWVkLgorCisgICAgIFRoZSByZXR1cm5lZCBkYXRhIHdpbGwgYmUgcHJvY2Vzc2VkIGZvciBwcmVzZW50YXRpb24gYnkgdGhlIGtleSB0eXBlLiBGb3IKKyAgICAgaW5zdGFuY2UsIGEga2V5cmluZyB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBrZXlfc2VyaWFsX3QgZW50cmllcworICAgICByZXByZXNlbnRpbmcgdGhlIElEcyBvZiBhbGwgdGhlIGtleXMgdG8gd2hpY2ggaXQgaXMgc3Vic2NyaWJlZC4gVGhlIHVzZXIKKyAgICAgZGVmaW5lZCBrZXkgdHlwZSB3aWxsIHJldHVybiBpdHMgZGF0YSBhcyBpcy4gSWYgYSBrZXkgdHlwZSBkb2VzIG5vdAorICAgICBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiwgZXJyb3IgRU9QTk9UU1VQUCB3aWxsIHJlc3VsdC4KKworICAgICBBcyBtdWNoIG9mIHRoZSBkYXRhIGFzIGNhbiBiZSBmaXR0ZWQgaW50byB0aGUgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvCisgICAgIHVzZXJzcGFjZSBpZiB0aGUgYnVmZmVyIHBvaW50ZXIgaXMgbm90IE5VTEwuCisKKyAgICAgT24gYSBzdWNjZXNzZnVsIHJldHVybiwgdGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgYW1vdW50IG9mCisgICAgIGRhdGEgYXZhaWxhYmxlIHJhdGhlciB0aGFuIHRoZSBhbW91bnQgY29waWVkLgorCisKKyAoKikgSW5zdGFudGlhdGUgYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQga2V5LgorCisJa2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfSU5TVEFOVElBVEUsIGtleV9zZXJpYWxfdCBrZXksCisJCQkgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4sCisJCQkgICAga2V5X3NlcmlhbF90IGtleXJpbmcpOworCisgICAgIElmIHRoZSBrZXJuZWwgY2FsbHMgYmFjayB0byB1c2Vyc3BhY2UgdG8gY29tcGxldGUgdGhlIGluc3RhbnRpYXRpb24gb2YgYQorICAgICBrZXksIHVzZXJzcGFjZSBzaG91bGQgdXNlIHRoaXMgY2FsbCB0byBzdXBwbHkgZGF0YSBmb3IgdGhlIGtleSBiZWZvcmUgdGhlCisgICAgIGludm9rZWQgcHJvY2VzcyByZXR1cm5zLCBvciBlbHNlIHRoZSBrZXkgd2lsbCBiZSBtYXJrZWQgbmVnYXRpdmUKKyAgICAgYXV0b21hdGljYWxseS4KKworICAgICBUaGUgcHJvY2VzcyBtdXN0IGhhdmUgd3JpdGUgYWNjZXNzIG9uIHRoZSBrZXkgdG8gYmUgYWJsZSB0byBpbnN0YW50aWF0ZQorICAgICBpdCwgYW5kIHRoZSBrZXkgbXVzdCBiZSB1bmluc3RhbnRpYXRlZC4KKworICAgICBJZiBhIGtleXJpbmcgaXMgc3BlY2lmaWVkIChub24temVybyksIHRoZSBrZXkgd2lsbCBhbHNvIGJlIGxpbmtlZCBpbnRvCisgICAgIHRoYXQga2V5cmluZywgaG93ZXZlciBhbGwgdGhlIGNvbnN0cmFpbnRzIGFwcGx5aW5nIGluIEtFWUNUTF9MSU5LIGFwcGx5CisgICAgIGluIHRoaXMgY2FzZSB0b28uCisKKyAgICAgVGhlIHBheWxvYWQgYW5kIHBsZW4gYXJndW1lbnRzIGRlc2NyaWJlIHRoZSBwYXlsb2FkIGRhdGEgYXMgZm9yIGFkZF9rZXkoKS4KKworCisgKCopIE5lZ2F0aXZlbHkgaW5zdGFudGlhdGUgYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQga2V5LgorCisJa2V5X3NlcmlhbF90IGtleWN0bChLRVlDVExfTkVHQVRFLCBrZXlfc2VyaWFsX3Qga2V5LAorCQkJICAgIHVuc2lnbmVkIHRpbWVvdXQsIGtleV9zZXJpYWxfdCBrZXlyaW5nKTsKKworICAgICBJZiB0aGUga2VybmVsIGNhbGxzIGJhY2sgdG8gdXNlcnNwYWNlIHRvIGNvbXBsZXRlIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEKKyAgICAga2V5LCB1c2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGlzIGNhbGwgbWFyayB0aGUga2V5IGFzIG5lZ2F0aXZlIGJlZm9yZSB0aGUKKyAgICAgaW52b2tlZCBwcm9jZXNzIHJldHVybnMgaWYgaXQgaXMgdW5hYmxlIHRvIGZ1bGZpbCB0aGUgcmVxdWVzdC4KKworICAgICBUaGUgcHJvY2VzcyBtdXN0IGhhdmUgd3JpdGUgYWNjZXNzIG9uIHRoZSBrZXkgdG8gYmUgYWJsZSB0byBpbnN0YW50aWF0ZQorICAgICBpdCwgYW5kIHRoZSBrZXkgbXVzdCBiZSB1bmluc3RhbnRpYXRlZC4KKworICAgICBJZiBhIGtleXJpbmcgaXMgc3BlY2lmaWVkIChub24temVybyksIHRoZSBrZXkgd2lsbCBhbHNvIGJlIGxpbmtlZCBpbnRvCisgICAgIHRoYXQga2V5cmluZywgaG93ZXZlciBhbGwgdGhlIGNvbnN0cmFpbnRzIGFwcGx5aW5nIGluIEtFWUNUTF9MSU5LIGFwcGx5CisgICAgIGluIHRoaXMgY2FzZSB0b28uCisKKworPT09PT09PT09PT09PT09CitLRVJORUwgU0VSVklDRVMKKz09PT09PT09PT09PT09PQorCitUaGUga2VybmVsIHNlcnZpY2VzIGZvciBrZXkgbWFuYWdtZW50IGFyZSBmYWlybHkgc2ltcGxlIHRvIGRlYWwgd2l0aC4gVGhleSBjYW4KK2JlIGJyb2tlbiBkb3duIGludG8gdHdvIGFyZWFzOiBrZXlzIGFuZCBrZXkgdHlwZXMuCisKK0RlYWxpbmcgd2l0aCBrZXlzIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEZpcnN0bHksIHRoZSBrZXJuZWwgc2VydmljZQorcmVnaXN0ZXJzIGl0cyB0eXBlLCB0aGVuIGl0IHNlYXJjaGVzIGZvciBhIGtleSBvZiB0aGF0IHR5cGUuIEl0IHNob3VsZCByZXRhaW4KK3RoZSBrZXkgYXMgbG9uZyBhcyBpdCBoYXMgbmVlZCBvZiBpdCwgYW5kIHRoZW4gaXQgc2hvdWxkIHJlbGVhc2UgaXQuIEZvciBhCitmaWxlc3lzdGVtIG9yIGRldmljZSBmaWxlLCBhIHNlYXJjaCB3b3VsZCBwcm9iYWJseSBiZSBwZXJmb3JtZWQgZHVyaW5nIHRoZQorb3BlbiBjYWxsLCBhbmQgdGhlIGtleSByZWxlYXNlZCB1cG9uIGNsb3NlLiBIb3cgdG8gZGVhbCB3aXRoIGNvbmZsaWN0aW5nIGtleXMKK2R1ZSB0byB0d28gZGlmZmVyZW50IHVzZXJzIG9wZW5pbmcgdGhlIHNhbWUgZmlsZSBpcyBsZWZ0IHRvIHRoZSBmaWxlc3lzdGVtCithdXRob3IgdG8gc29sdmUuCisKK1doZW4gYWNjZXNzaW5nIGEga2V5J3MgcGF5bG9hZCBkYXRhLCBrZXktPmxvY2sgc2hvdWxkIGJlIGF0IGxlYXN0IHJlYWQgbG9ja2VkLAorb3IgZWxzZSB0aGUgZGF0YSBtYXkgYmUgY2hhbmdlZCBieSBhbiB1cGRhdGUgYmVpbmcgcGVyZm9ybWVkIGZyb20gdXNlcnNwYWNlCit3aGlsc3QgdGhlIGRyaXZlciBvciBmaWxlc3lzdGVtIGlzIHRyeWluZyB0byBhY2Nlc3MgaXQuIElmIG5vIHVwZGF0ZSBtZXRob2QgaXMKK3N1cHBsaWVkLCB0aGVuIHRoZSBrZXkncyBwYXlsb2FkIG1heSBiZSBhY2Nlc3NlZCB3aXRob3V0IGhvbGRpbmcgYSBsb2NrIGFzCit0aGVyZSBpcyBubyB3YXkgdG8gY2hhbmdlIGl0LCBwcm92aWRlZCBpdCBjYW4gYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBrZXkncwordHlwZSBkZWZpbml0aW9uIHdvbid0IGdvIGF3YXkuCisKKygqKSBUbyBzZWFyY2ggZm9yIGEga2V5LCBjYWxsOgorCisJc3RydWN0IGtleSAqcmVxdWVzdF9rZXkoY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAorCQkJCWNvbnN0IGNoYXIgKmNhbGxvdXRfc3RyaW5nKTsKKworICAgIFRoaXMgaXMgdXNlZCB0byByZXF1ZXN0IGEga2V5IG9yIGtleXJpbmcgd2l0aCBhIGRlc2NyaXB0aW9uIHRoYXQgbWF0Y2hlcworICAgIHRoZSBkZXNjcmlwdGlvbiBzcGVjaWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBrZXkgdHlwZSdzIG1hdGNoIGZ1bmN0aW9uLiBUaGlzCisgICAgcGVybWl0cyBhcHByb3hpbWF0ZSBtYXRjaGluZyB0byBvY2N1ci4gSWYgY2FsbG91dF9zdHJpbmcgaXMgbm90IE5VTEwsIHRoZW4KKyAgICAvc2Jpbi9yZXF1ZXN0LWtleSB3aWxsIGJlIGludm9rZWQgaW4gYW4gYXR0ZW1wdCB0byBvYnRhaW4gdGhlIGtleSBmcm9tCisgICAgdXNlcnNwYWNlLiBJbiB0aGF0IGNhc2UsIGNhbGxvdXRfc3RyaW5nIHdpbGwgYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvCisgICAgdGhlIHByb2dyYW0uCisKKyAgICBTaG91bGQgdGhlIGZ1bmN0aW9uIGZhaWwgZXJyb3IgRU5PS0VZLCBFS0VZRVhQSVJFRCBvciBFS0VZUkVWT0tFRCB3aWxsIGJlCisgICAgcmV0dXJuZWQuCisKKworKCopIFdoZW4gaXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLCB0aGUga2V5IHNob3VsZCBiZSByZWxlYXNlZCB1c2luZzoKKworCXZvaWQga2V5X3B1dChzdHJ1Y3Qga2V5ICprZXkpOworCisgICAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuIElmIENPTkZJR19LRVlTIGlzIG5vdCBzZXQgdGhlbgorICAgIHRoZSBhcmd1bWVudCB3aWxsIG5vdCBiZSBwYXJzZWQuCisKKworKCopIEV4dHJhIHJlZmVyZW5jZXMgY2FuIGJlIG1hZGUgdG8gYSBrZXkgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorCisJc3RydWN0IGtleSAqa2V5X2dldChzdHJ1Y3Qga2V5ICprZXkpOworCisgICAgVGhlc2UgbmVlZCB0byBiZSBkaXNwb3NlZCBvZiBieSBjYWxsaW5nIGtleV9wdXQoKSB3aGVuIHRoZXkndmUgYmVlbgorICAgIGZpbmlzaGVkIHdpdGguIFRoZSBrZXkgcG9pbnRlciBwYXNzZWQgaW4gd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhlIHBvaW50ZXIKKyAgICBpcyBOVUxMIG9yIENPTkZJR19LRVlTIGlzIG5vdCBzZXQgdGhlbiB0aGUga2V5IHdpbGwgbm90IGJlIGRlcmVmZXJlbmNlZCBhbmQKKyAgICBubyBpbmNyZW1lbnQgd2lsbCB0YWtlIHBsYWNlLgorCisKKygqKSBBIGtleSdzIHNlcmlhbCBudW1iZXIgY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmc6CisKKwlrZXlfc2VyaWFsX3Qga2V5X3NlcmlhbChzdHJ1Y3Qga2V5ICprZXkpOworCisgICAgSWYga2V5IGlzIE5VTEwgb3IgaWYgQ09ORklHX0tFWVMgaXMgbm90IHNldCB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZCAoaW4gdGhlCisgICAgbGF0dGVyIGNhc2Ugd2l0aG91dCBwYXJzaW5nIHRoZSBhcmd1bWVudCkuCisKKworKCopIElmIGEga2V5cmluZyB3YXMgZm91bmQgaW4gdGhlIHNlYXJjaCwgdGhpcyBjYW4gYmUgZnVydGhlciBzZWFyY2hlZCBieToKKworCXN0cnVjdCBrZXkgKmtleXJpbmdfc2VhcmNoKHN0cnVjdCBrZXkgKmtleXJpbmcsCisJCQkJICAgY29uc3Qgc3RydWN0IGtleV90eXBlICp0eXBlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uKQorCisgICAgVGhpcyBzZWFyY2hlcyB0aGUga2V5cmluZyB0cmVlIHNwZWNpZmllZCBmb3IgYSBtYXRjaGluZyBrZXkuIEVycm9yIEVOT0tFWQorICAgIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZS4gSWYgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybmVkIGtleSB3aWxsIG5lZWQgdG8gYmUKKyAgICByZWxlYXNlZC4KKworCisoKikgVG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEga2V5LCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQ6CisKKwlpbnQgdmFsaWRhdGVfa2V5KHN0cnVjdCBrZXkgKmtleSk7CisKKyAgICBUaGlzIGNoZWNrcyB0aGF0IHRoZSBrZXkgaW4gcXVlc3Rpb24gaGFzbid0IGV4cGlyZWQgb3IgYW5kIGhhc24ndCBiZWVuCisgICAgcmV2b2tlZC4gU2hvdWxkIHRoZSBrZXkgYmUgaW52YWxpZCwgZXJyb3IgRUtFWUVYUElSRUQgb3IgRUtFWVJFVk9LRUQgd2lsbAorICAgIGJlIHJldHVybmVkLiBJZiB0aGUga2V5IGlzIE5VTEwgb3IgaWYgQ09ORklHX0tFWVMgaXMgbm90IHNldCB0aGVuIDAgd2lsbCBiZQorICAgIHJldHVybmVkIChpbiB0aGUgbGF0dGVyIGNhc2Ugd2l0aG91dCBwYXJzaW5nIHRoZSBhcmd1bWVudCkuCisKKworKCopIFRvIHJlZ2lzdGVyIGEga2V5IHR5cGUsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZDoKKworCWludCByZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUpOworCisgICAgVGhpcyB3aWxsIHJldHVybiBlcnJvciBFRVhJU1QgaWYgYSB0eXBlIG9mIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeQorICAgIHByZXNlbnQuCisKKworKCopIFRvIHVucmVnaXN0ZXIgYSBrZXkgdHlwZSwgY2FsbDoKKworCXZvaWQgdW5yZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUpOworCisKKz09PT09PT09PT09PT09PT09PT0KK0RFRklOSU5HIEEgS0VZIFRZUEUKKz09PT09PT09PT09PT09PT09PT0KKworQSBrZXJuZWwgc2VydmljZSBtYXkgd2FudCB0byBkZWZpbmUgaXRzIG93biBrZXkgdHlwZS4gRm9yIGluc3RhbmNlLCBhbiBBRlMKK2ZpbGVzeXN0ZW0gbWlnaHQgd2FudCB0byBkZWZpbmUgYSBLZXJiZXJvcyA1IHRpY2tldCBrZXkgdHlwZS4gVG8gZG8gdGhpcywgaXQKK2F1dGhvciBmaWxscyBpbiBhIHN0cnVjdCBrZXlfdHlwZSBhbmQgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHN5c3RlbS4KKworVGhlIHN0cnVjdHVyZSBoYXMgYSBudW1iZXIgb2YgZmllbGRzLCBzb21lIG9mIHdoaWNoIGFyZSBtYW5kYXRvcnk6CisKKyAoKikgY29uc3QgY2hhciAqbmFtZQorCisgICAgIFRoZSBuYW1lIG9mIHRoZSBrZXkgdHlwZS4gVGhpcyBpcyB1c2VkIHRvIHRyYW5zbGF0ZSBhIGtleSB0eXBlIG5hbWUKKyAgICAgc3VwcGxpZWQgYnkgdXNlcnNwYWNlIGludG8gYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUuCisKKworICgqKSBzaXplX3QgZGVmX2RhdGFsZW4KKworICAgICBUaGlzIGlzIG9wdGlvbmFsIC0gaXQgc3VwcGxpZXMgdGhlIGRlZmF1bHQgcGF5bG9hZCBkYXRhIGxlbmd0aCBhcworICAgICBjb250cmlidXRlZCB0byB0aGUgcXVvdGEuIElmIHRoZSBrZXkgdHlwZSdzIHBheWxvYWQgaXMgYWx3YXlzIG9yIGFsbW9zdAorICAgICBhbHdheXMgdGhlIHNhbWUgc2l6ZSwgdGhlbiB0aGlzIGlzIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaW5ncy4KKworICAgICBUaGUgZGF0YSBsZW5ndGggKGFuZCBxdW90YSkgb24gYSBwYXJ0aWN1bGFyIGtleSBjYW4gYWx3YXlzIGJlIGNoYW5nZWQKKyAgICAgZHVyaW5nIGluc3RhbnRpYXRpb24gb3IgdXBkYXRlIGJ5IGNhbGxpbmc6CisKKwlpbnQga2V5X3BheWxvYWRfcmVzZXJ2ZShzdHJ1Y3Qga2V5ICprZXksIHNpemVfdCBkYXRhbGVuKTsKKworICAgICBXaXRoIHRoZSByZXZpc2VkIGRhdGEgbGVuZ3RoLiBFcnJvciBFRFFVT1Qgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGlzIGlzCisgICAgIG5vdCB2aWFibGUuCisKKworICgqKSBpbnQgKCppbnN0YW50aWF0ZSkoc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbik7CisKKyAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGF0dGFjaCBhIHBheWxvYWQgdG8gYSBrZXkgZHVyaW5nIGNvbnN0cnVjdGlvbi4KKyAgICAgVGhlIHBheWxvYWQgYXR0YWNoZWQgbmVlZCBub3QgYmVhciBhbnkgcmVsYXRpb24gdG8gdGhlIGRhdGEgcGFzc2VkIHRvCisgICAgIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgSWYgdGhlIGFtb3VudCBvZiBkYXRhIGF0dGFjaGVkIHRvIHRoZSBrZXkgZGlmZmVycyBmcm9tIHRoZSBzaXplIGluCisgICAgIGtleXR5cGUtPmRlZl9kYXRhbGVuLCB0aGVuIGtleV9wYXlsb2FkX3Jlc2VydmUoKSBzaG91bGQgYmUgY2FsbGVkLgorCisgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGhhdmUgdG8gbG9jayB0aGUga2V5IGluIG9yZGVyIHRvIGF0dGFjaCBhIHBheWxvYWQuCisgICAgIFRoZSBmYWN0IHRoYXQgS0VZX0ZMQUdfSU5TVEFOVElBVEVEIGlzIG5vdCBzZXQgaW4ga2V5LT5mbGFncyBwcmV2ZW50cworICAgICBhbnl0aGluZyBlbHNlIGZyb20gZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIGtleS4KKworICAgICBUaGlzIG1ldGhvZCBtYXkgc2xlZXAgaWYgaXQgd2lzaGVzLgorCisKKyAoKikgaW50ICgqZHVwbGljYXRlKShzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHN0cnVjdCBrZXkgKnNvdXJjZSk7CisKKyAgICAgSWYgdGhpcyB0eXBlIG9mIGtleSBjYW4gYmUgZHVwbGljYXRlZCwgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGQgYmUKKyAgICAgcHJvdmlkZWQuIEl0IGlzIGNhbGxlZCB0byBjb3B5IHRoZSBwYXlsb2FkIGF0dGFjaGVkIHRvIHRoZSBzb3VyY2UgaW50bworICAgICB0aGUgbmV3IGtleS4gVGhlIGRhdGEgbGVuZ3RoIG9uIHRoZSBuZXcga2V5IHdpbGwgaGF2ZSBiZWVuIHVwZGF0ZWQgYW5kCisgICAgIHRoZSBxdW90YSBhZGp1c3RlZCBhbHJlYWR5LgorCisgICAgIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHNvdXJjZSBrZXkncyBzZW1hcGhvcmUgcmVhZC1sb2NrZWQgdG8KKyAgICAgcHJldmVudCBpdHMgcGF5bG9hZCBmcm9tIGJlaW5nIGNoYW5nZWQuIEl0IGlzIHNhZmUgdG8gc2xlZXAgaGVyZS4KKworCisgKCopIGludCAoKnVwZGF0ZSkoc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbik7CisKKyAgICAgSWYgdGhpcyB0eXBlIG9mIGtleSBjYW4gYmUgdXBkYXRlZCwgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGQgYmUKKyAgICAgcHJvdmlkZWQuIEl0IGlzIGNhbGxlZCB0byB1cGRhdGUgYSBrZXkncyBwYXlsb2FkIGZyb20gdGhlIGJsb2Igb2YgZGF0YQorICAgICBwcm92aWRlZC4KKworICAgICBrZXlfcGF5bG9hZF9yZXNlcnZlKCkgc2hvdWxkIGJlIGNhbGxlZCBpZiB0aGUgZGF0YSBsZW5ndGggbWlnaHQgY2hhbmdlCisgICAgIGJlZm9yZSBhbnkgY2hhbmdlcyBhcmUgYWN0dWFsbHkgbWFkZS4gTm90ZSB0aGF0IGlmIHRoaXMgc3VjY2VlZHMsIHRoZQorICAgICB0eXBlIGlzIGNvbW1pdHRlZCB0byBjaGFuZ2luZyB0aGUga2V5IGJlY2F1c2UgaXQncyBhbHJlYWR5IGJlZW4gYWx0ZXJlZCwKKyAgICAgc28gYWxsIG1lbW9yeSBhbGxvY2F0aW9uIG11c3QgYmUgZG9uZSBmaXJzdC4KKworICAgICBrZXlfcGF5bG9hZF9yZXNlcnZlKCkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrZXktPmxvY2sgd3JpdGUgbG9ja2VkLAorICAgICBhbmQgdGhlIGNoYW5nZXMgdG8gdGhlIGtleSdzIGF0dGFjaGVkIHBheWxvYWQgc2hvdWxkIGJlIG1hZGUgYmVmb3JlIHRoZQorICAgICBrZXkgaXMgbG9ja2VkLgorCisgICAgIFRoZSBrZXkgd2lsbCBoYXZlIGl0cyBzZW1hcGhvcmUgd3JpdGUtbG9ja2VkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcworICAgICBjYWxsZWQuIEFueSBjaGFuZ2VzIHRvIHRoZSBrZXkgc2hvdWxkIGJlIG1hZGUgd2l0aCB0aGUga2V5J3Mgcndsb2NrCisgICAgIHdyaXRlLWxvY2tlZCBhbHNvLiBJdCBpcyBzYWZlIHRvIHNsZWVwIGhlcmUuCisKKworICgqKSBpbnQgKCptYXRjaCkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICpkZXNjKTsKKworICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbWF0Y2ggYSBrZXkgYWdhaW5zdCBhIGRlc2NyaXB0aW9uLiBJdCBzaG91bGQKKyAgICAgcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSB0d28gbWF0Y2gsIHplcm8gaWYgdGhleSBkb24ndC4KKworICAgICBUaGlzIG1ldGhvZCBzaG91bGQgbm90IG5lZWQgdG8gbG9jayB0aGUga2V5IGluIGFueSB3YXkuIFRoZSB0eXBlIGFuZAorICAgICBkZXNjcmlwdGlvbiBjYW4gYmUgY29uc2lkZXJlZCBpbnZhcmlhbnQsIGFuZCB0aGUgcGF5bG9hZCBzaG91bGQgbm90IGJlCisgICAgIGFjY2Vzc2VkICh0aGUga2V5IG1heSBub3QgeWV0IGJlIGluc3RhbnRpYXRlZCkuCisKKyAgICAgSXQgaXMgbm90IHNhZmUgdG8gc2xlZXAgaW4gdGhpcyBtZXRob2Q7IHRoZSBjYWxsZXIgbWF5IGhvbGQgc3BpbmxvY2tzLgorCisKKyAoKikgdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBrZXkgKmtleSk7CisKKyAgICAgVGhpcyBtZXRob2QgaXMgb3B0aW9uYWwuIEl0IGlzIGNhbGxlZCB0byBkaXNjYXJkIHRoZSBwYXlsb2FkIGRhdGEgb24gYQorICAgICBrZXkgd2hlbiBpdCBpcyBiZWluZyBkZXN0cm95ZWQuCisKKyAgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgbmVlZCB0byBsb2NrIHRoZSBrZXk7IGl0IGNhbiBjb25zaWRlciB0aGUga2V5IGFzCisgICAgIGJlaW5nIGluYWNjZXNzaWJsZS4gTm90ZSB0aGF0IHRoZSBrZXkncyB0eXBlIG1heSBoYXZlIGNoYW5nZWQgYmVmb3JlIHRoaXMKKyAgICAgZnVuY3Rpb24gaXMgY2FsbGVkLgorCisgICAgIEl0IGlzIG5vdCBzYWZlIHRvIHNsZWVwIGluIHRoaXMgbWV0aG9kOyB0aGUgY2FsbGVyIG1heSBob2xkIHNwaW5sb2Nrcy4KKworCisgKCopIHZvaWQgKCpkZXNjcmliZSkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnApOworCisgICAgIFRoaXMgbWV0aG9kIGlzIG9wdGlvbmFsLiBJdCBpcyBjYWxsZWQgZHVyaW5nIC9wcm9jL2tleXMgcmVhZGluZyB0bworICAgICBzdW1tYXJpc2UgYSBrZXkncyBkZXNjcmlwdGlvbiBhbmQgcGF5bG9hZCBpbiB0ZXh0IGZvcm0uCisKKyAgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUga2V5J3Mgcndsb2NrIHJlYWQtbG9ja2VkLiBUaGlzIHdpbGwKKyAgICAgcHJldmVudCB0aGUga2V5J3MgcGF5bG9hZCBhbmQgc3RhdGUgY2hhbmdpbmc7IGFsc28gdGhlIGRlc2NyaXB0aW9uIHNob3VsZAorICAgICBub3QgY2hhbmdlLiBUaGlzIGFsc28gbWVhbnMgaXQgaXMgbm90IHNhZmUgdG8gc2xlZXAgaW4gdGhpcyBtZXRob2QuCisKKworICgqKSBsb25nICgqcmVhZCkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKKworICAgICBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbC4gSXQgaXMgY2FsbGVkIGJ5IEtFWUNUTF9SRUFEIHRvIHRyYW5zbGF0ZSB0aGUKKyAgICAga2V5J3MgcGF5bG9hZCBpbnRvIHNvbWV0aGluZyBhIGJsb2Igb2YgZGF0YSBmb3IgdXNlcnNwYWNlIHRvIGRlYWwKKyAgICAgd2l0aC4gSWRlYWxseSwgdGhlIGJsb2Igc2hvdWxkIGJlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGF0IHBhc3NlZCBpbiB0bworICAgICB0aGUgaW5zdGFudGlhdGUgYW5kIHVwZGF0ZSBtZXRob2RzLgorCisgICAgIElmIHN1Y2Nlc3NmdWwsIHRoZSBibG9iIHNpemUgdGhhdCBjb3VsZCBiZSBwcm9kdWNlZCBzaG91bGQgYmUgcmV0dXJuZWQKKyAgICAgcmF0aGVyIHRoYW4gdGhlIHNpemUgY29waWVkLgorCisgICAgIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGtleSdzIHNlbWFwaG9yZSByZWFkLWxvY2tlZC4gVGhpcworICAgICB3aWxsIHByZXZlbnQgdGhlIGtleSdzIHBheWxvYWQgY2hhbmdpbmcuIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbworICAgICByZWFkLWxvY2sga2V5LT5sb2NrIHdoZW4gYWNjZXNzaW5nIHRoZSBrZXkncyBwYXlsb2FkLiBJdCBpcyBzYWZlIHRvIHNsZWVwCisgICAgIGluIHRoaXMgbWV0aG9kLCBzdWNoIGFzIG1pZ2h0IGhhcHBlbiB3aGVuIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIGlzCisgICAgIGFjY2Vzc2VkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JFUVVFU1QtS0VZIENBTExCQUNLIFNFUlZJQ0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gY3JlYXRlIGEgbmV3IGtleSwgdGhlIGtlcm5lbCB3aWxsIGF0dGVtcHQgdG8gZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQKK2xpbmU6CisKKwkvc2Jpbi9yZXF1ZXN0LWtleSBjcmVhdGUgPGtleT4gPHVpZD4gPGdpZD4gXAorCQk8dGhyZWFkcmluZz4gPHByb2Nlc3NyaW5nPiA8c2Vzc2lvbnJpbmc+IDxjYWxsb3V0X2luZm8+CisKKzxrZXk+IGlzIHRoZSBrZXkgYmVpbmcgY29uc3RydWN0ZWQsIGFuZCB0aGUgdGhyZWUga2V5cmluZ3MgYXJlIHRoZSBwcm9jZXNzCitrZXlyaW5ncyBmcm9tIHRoZSBwcm9jZXNzIHRoYXQgY2F1c2VkIHRoZSBzZWFyY2ggdG8gYmUgaXNzdWVkLiBUaGVzZSBhcmUKK2luY2x1ZGVkIGZvciB0d28gcmVhc29uczoKKworICAoMSkgVGhlcmUgbWF5IGJlIGFuIGF1dGhlbnRpY2F0aW9uIHRva2VuIGluIG9uZSBvZiB0aGUga2V5cmluZ3MgdGhhdCBpcworICAgICAgcmVxdWlyZWQgdG8gb2J0YWluIHRoZSBrZXksIGVnOiBhIEtlcmJlcm9zIFRpY2tldC1HcmFudGluZyBUaWNrZXQuCisKKyAgKDIpIFRoZSBuZXcga2V5IHNob3VsZCBwcm9iYWJseSBiZSBjYWNoZWQgaW4gb25lIG9mIHRoZXNlIHJpbmdzLgorCitUaGlzIHByb2dyYW0gc2hvdWxkIHNldCBpdCBVSUQgYW5kIEdJRCB0byB0aG9zZSBzcGVjaWZpZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8KK2FjY2VzcyBhbnkgbW9yZSBrZXlzLiBJdCBtYXkgdGhlbiBsb29rIGFyb3VuZCBmb3IgYSB1c2VyIHNwZWNpZmljIHByb2Nlc3MgdG8KK2hhbmQgdGhlIHJlcXVlc3Qgb2ZmIHRvIChwZXJoYXBzIGEgcGF0aCBoZWxkIGluIHBsYWNlZCBpbiBhbm90aGVyIGtleSBieSwgZm9yCitleGFtcGxlLCB0aGUgS0RFIGRlc2t0b3AgbWFuYWdlcikuCisKK1RoZSBwcm9ncmFtIChvciB3aGF0ZXZlciBpdCBjYWxscykgc2hvdWxkIGZpbmlzaCBjb25zdHJ1Y3Rpb24gb2YgdGhlIGtleSBieQorY2FsbGluZyBLRVlDVExfSU5TVEFOVElBVEUsIHdoaWNoIGFsc28gcGVybWl0cyBpdCB0byBjYWNoZSB0aGUga2V5IGluIG9uZSBvZgordGhlIGtleXJpbmdzIChwcm9iYWJseSB0aGUgc2Vzc2lvbiByaW5nKSBiZWZvcmUgcmV0dXJuaW5nLiBBbHRlcm5hdGl2ZWx5LCB0aGUKK2tleSBjYW4gYmUgbWFya2VkIGFzIG5lZ2F0aXZlIHdpdGggS0VZQ1RMX05FR0FURTsgdGhpcyBhbHNvIHBlcm1pdHMgdGhlIGtleSB0bworYmUgY2FjaGVkIGluIG9uZSBvZiB0aGUga2V5cmluZ3MuCisKK0lmIGl0IHJldHVybnMgd2l0aCB0aGUga2V5IHJlbWFpbmluZyBpbiB0aGUgdW5jb25zdHJ1Y3RlZCBzdGF0ZSwgdGhlIGtleSB3aWxsCitiZSBtYXJrZWQgYXMgYmVpbmcgbmVnYXRpdmUsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNlc3Npb24ga2V5cmluZywgYW5kIGFuCitlcnJvciB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBrZXkgcmVxdWVzdG9yLgorCitTdXBwbGVtZW50YXJ5IGluZm9ybWF0aW9uIG1heSBiZSBwcm92aWRlZCBmcm9tIHdob2V2ZXIgb3Igd2hhdGV2ZXIgaW52b2tlZAordGhpcyBzZXJ2aWNlLiBUaGlzIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSA8Y2FsbG91dF9pbmZvPiBwYXJhbWV0ZXIuIElmIG5vIHN1Y2gKK2luZm9ybWF0aW9uIHdhcyBtYWRlIGF2YWlsYWJsZSwgdGhlbiAiLSIgd2lsbCBiZSBwYXNzZWQgYXMgdGhpcyBwYXJhbWV0ZXIKK2luc3RlYWQuCisKKworU2ltaWxhcmx5LCB0aGUga2VybmVsIG1heSBhdHRlbXB0IHRvIHVwZGF0ZSBhbiBleHBpcmVkIG9yIGEgc29vbiB0byBleHBpcmUga2V5CitieSBleGVjdXRpbmc6CisKKwkvc2Jpbi9yZXF1ZXN0LWtleSB1cGRhdGUgPGtleT4gPHVpZD4gPGdpZD4gXAorCQk8dGhyZWFkcmluZz4gPHByb2Nlc3NyaW5nPiA8c2Vzc2lvbnJpbmc+CisKK0luIHRoaXMgY2FzZSwgdGhlIHByb2dyYW0gaXNuJ3QgcmVxdWlyZWQgdG8gYWN0dWFsbHkgYXR0YWNoIHRoZSBrZXkgdG8gYSByaW5nOwordGhlIHJpbmdzIGFyZSBwcm92aWRlZCBmb3IgcmVmZXJlbmNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5YmZmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKQEAgLTAsMCArMSwzNjcgQEAKK1RoZSBrb2JqZWN0IEluZnJhc3RydWN0dXJlCisKK1BhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisKK1VwZGF0ZWQ6IDMgSnVuZSAyMDAzCisKKworQ29weXJpZ2h0IChjKSAgMjAwMyBQYXRyaWNrIE1vY2hlbAorQ29weXJpZ2h0IChjKSAgMjAwMyBPcGVuIFNvdXJjZSBEZXZlbG9wbWVudCBMYWJzCisKKworMC4gSW50cm9kdWN0aW9uCisKK1RoZSBrb2JqZWN0IGluZnJhc3RydWN0dXJlIHBlcmZvcm1zIGJhc2ljIG9iamVjdCBtYW5hZ2VtZW50IHRoYXQgbGFyZ2VyCitkYXRhIHN0cnVjdHVyZXMgYW5kIHN1YnN5c3RlbXMgY2FuIGxldmVyYWdlLCByYXRoZXIgdGhhbiByZWltcGxlbWVudAorc2ltaWxhciBmdW5jdGlvbmFsaXR5LiBUaGlzIGZ1bmN0aW9uYWxpdHkgcHJpbWFyaWx5IGNvbmNlcm5zOgorCistIE9iamVjdCByZWZlcmVuY2UgY291bnRpbmcuCistIE1haW50YWluaW5nIGxpc3RzIChzZXRzKSBvZiBvYmplY3RzLgorLSBPYmplY3Qgc2V0IGxvY2tpbmcuCistIFVzZXJzcGFjZSByZXByZXNlbnRhdGlvbi4gCisKK1RoZSBpbmZyYXN0cnVjdHVyZSBjb25zaXN0cyBvZiBhIG51bWJlciBvZiBvYmplY3QgdHlwZXMgdG8gc3VwcG9ydAordGhpcyBmdW5jdGlvbmFsaXR5LiBUaGVpciBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGFyZSBkZXNjcmliZWQgYmVsb3cKK2luIGRldGFpbCwgYW5kIGJyaWVmbHkgaGVyZToKKworLSBrb2JqZWN0cwlhIHNpbXBsZSBvYmplY3QuCistIGtzZXQJCWEgc2V0IG9mIG9iamVjdHMgb2YgYSBjZXJ0YWluIHR5cGUuCistIGt0eXBlCQlhIHNldCBvZiBoZWxwZXJzIGZvciBvYmplY3RzIG9mIGEgY29tbW9uIHR5cGUuIAorLSBzdWJzeXN0ZW0JYSBjb250cm9sbGluZyBvYmplY3QgZm9yIGEgbnVtYmVyIG9mIGtzZXRzLgorCisKK1RoZSBrb2JqZWN0IGluZnJhc3RydWN0dXJlIG1haW50YWlucyBhIGNsb3NlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZQorc3lzZnMgZmlsZXN5c3RlbS4gRWFjaCBrb2JqZWN0IHRoYXQgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrb2JqZWN0Citjb3JlIHJlY2VpdmVzIGEgZGlyZWN0b3J5IGluIHN5c2ZzLiBBdHRyaWJ1dGVzIGFib3V0IHRoZSBrb2JqZWN0IGNhbgordGhlbiBiZSBleHBvcnRlZC4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBmb3IKK21vcmUgaW5mb3JtYXRpb24uIAorCitUaGUga29iamVjdCBpbmZyYXN0cnVjdHVyZSBwcm92aWRlcyBhIGZsZXhpYmxlIHByb2dyYW1taW5nIGludGVyZmFjZSwKK2FuZCBhbGxvd3Mga29iamVjdHMgYW5kIGtzZXRzIHRvIGJlIHVzZWQgd2l0aG91dCBiZWluZyByZWdpc3RlcmVkCisoaS5lLiB3aXRoIG5vIHN5c2ZzIHJlcHJlc2VudGF0aW9uKS4gVGhpcyBpcyBhbHNvIGRlc2NyaWJlZCBsYXRlci4gCisKKworMS4ga29iamVjdHMKKworMS4xIERlc2NyaXB0aW9uCisKKworc3RydWN0IGtvYmplY3QgaXMgYSBzaW1wbGUgZGF0YSB0eXBlIHRoYXQgcHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvcgorbW9yZSBjb21wbGV4IG9iamVjdCB0eXBlcy4gSXQgcHJvdmlkZXMgYSBzZXQgb2YgYmFzaWMgZmllbGRzIHRoYXQKK2FsbW9zdCBhbGwgY29tcGxleCBkYXRhIHR5cGVzIHNoYXJlLiBrb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYmUKK2VtYmVkZGVkIGluIGxhcmdlciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlcGxhY2UgZmllbGRzIHRoZXkgZHVwbGljYXRlLiAKKworMS4yIERlZmludGlvbgorCitzdHJ1Y3Qga29iamVjdCB7CisJY2hhcgkJCW5hbWVbS09CSl9OQU1FX0xFTl07CisJYXRvbWljX3QJCXJlZmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CisJc3RydWN0IGtvYmplY3QJCSogcGFyZW50OworCXN0cnVjdCBrc2V0CQkqIGtzZXQ7CisJc3RydWN0IGtvYmpfdHlwZQkqIGt0eXBlOworCXN0cnVjdCBkZW50cnkJCSogZGVudHJ5OworfTsKKwordm9pZCBrb2JqZWN0X2luaXQoc3RydWN0IGtvYmplY3QgKik7CitpbnQga29iamVjdF9hZGQoc3RydWN0IGtvYmplY3QgKik7CitpbnQga29iamVjdF9yZWdpc3RlcihzdHJ1Y3Qga29iamVjdCAqKTsKKwordm9pZCBrb2JqZWN0X2RlbChzdHJ1Y3Qga29iamVjdCAqKTsKK3ZvaWQga29iamVjdF91bnJlZ2lzdGVyKHN0cnVjdCBrb2JqZWN0ICopOworCitzdHJ1Y3Qga29iamVjdCAqIGtvYmplY3RfZ2V0KHN0cnVjdCBrb2JqZWN0ICopOwordm9pZCBrb2JqZWN0X3B1dChzdHJ1Y3Qga29iamVjdCAqKTsKKworCisxLjMga29iamVjdCBQcm9ncmFtbWluZyBJbnRlcmZhY2UKKwora29iamVjdHMgbWF5IGJlIGR5bmFtaWNhbGx5IGFkZGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIGtvYmplY3QgY29yZQordXNpbmcga29iamVjdF9yZWdpc3RlcigpIGFuZCBrb2JqZWN0X3VucmVnaXN0ZXIoKS4gUmVnaXN0cmF0aW9uCitpbmNsdWRlcyBpbnNlcnRpbmcgdGhlIGtvYmplY3QgaW4gdGhlIGxpc3Qgb2YgaXRzIGRvbWluYW50IGtzZXQgYW5kCitjcmVhdGluZyBhIGRpcmVjdG9yeSBmb3IgaXQgaW4gc3lzZnMuCisKK0FsdGVybmF0aXZlbHksIG9uZSBtYXkgdXNlIGEga29iamVjdCB3aXRob3V0IGFkZGluZyBpdCB0byBpdHMga3NldCdzIGxpc3QKK29yIGV4cG9ydGluZyBpdCB2aWEgc3lzZnMsIGJ5IHNpbXBseSBjYWxsaW5nIGtvYmplY3RfaW5pdCgpLiBBbgoraW5pdGlhbGl6ZWQga29iamVjdCBtYXkgbGF0ZXIgYmUgYWRkZWQgdG8gdGhlIG9iamVjdCBoaWVyYXJjaHkgYnkKK2NhbGxpbmcga29iamVjdF9hZGQoKS4gQW4gaW5pdGlhbGl6ZWQga29iamVjdCBtYXkgYmUgdXNlZCBmb3IKK3JlZmVyZW5jZSBjb3VudGluZy4KKworTm90ZTogY2FsbGluZyBrb2JqZWN0X2luaXQoKSB0aGVuIGtvYmplY3RfYWRkKCkgaXMgZnVuY3Rpb25hbGx5CitlcXVpdmFsZW50IHRvIGNhbGxpbmcga29iamVjdF9yZWdpc3RlcigpLgorCitXaGVuIGEga29iamVjdCBpcyB1bnJlZ2lzdGVyZWQsIGl0IGlzIHJlbW92ZWQgZnJvbSBpdHMga3NldCdzIGxpc3QsCityZW1vdmVkIGZyb20gdGhlIHN5c2ZzIGZpbGVzeXN0ZW0sIGFuZCBpdHMgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkLgorTGlzdCBhbmQgc3lzZnMgcmVtb3ZhbCBoYXBwZW4gaW4ga29iamVjdF9kZWwoKSwgYW5kIG1heSBiZSBjYWxsZWQKK21hbnVhbGx5LiBrb2JqZWN0X3B1dCgpIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCwgYW5kIG1heSBhbHNvCitiZSBjYWxsZWQgbWFudWFsbHkuIAorCitBIGtvYmplY3QncyByZWZlcmVuY2UgY291bnQgbWF5IGJlIGluY3JlbWVudGVkIHdpdGgga29iamVjdF9nZXQoKSwKK3doaWNoIHJldHVybnMgYSB2YWxpZCByZWZlcmVuY2UgdG8gYSBrb2JqZWN0OyBhbmQgZGVjcmVtZW50ZWQgd2l0aCAKK2tvYmplY3RfcHV0KCkuIEFuIG9iamVjdCdzIHJlZmVyZW5jZSBjb3VudCBtYXkgb25seSBiZSBpbmNyZW1lbnRlZCBpZgoraXQgaXMgYWxyZWFkeSBwb3NpdGl2ZS4gCisKK1doZW4gYSBrb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMCwgdGhlIG1ldGhvZCBzdHJ1Y3QKK2tvYmpfdHlwZTo6cmVsZWFzZSgpICh3aGljaCB0aGUga29iamVjdCdzIGtzZXQgcG9pbnRzIHRvKSBpcyBjYWxsZWQuCitUaGlzIGFsbG93cyBhbnkgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIG9iamVjdCB0byBiZSBmcmVlZC4KKworCitOT1RFISEhIAorCitJdCBpcyBfaW1wZXJhdGl2ZV8gdGhhdCB5b3Ugc3VwcGx5IGEgZGVzdHJ1Y3RvciBmb3IgZHluYW1pY2FsbHkKK2FsbG9jYXRlZCBrb2JqZWN0cyB0byBmcmVlIHRoZW0gaWYgeW91IGFyZSB1c2luZyBrb2JqZWN0IHJlZmVyZW5jZQorY291bnRzLiBUaGUgcmVmZXJlbmNlIGNvdW50IGNvbnRyb2xzIHRoZSBsaWZldGltZSBvZiB0aGUgb2JqZWN0LgorSWYgaXQgZ29lcyB0byAwLCB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgb2JqZWN0IHdpbGwKK2JlIGZyZWVkIGFuZCBjYW5ub3QgYmUgdXNlZC4gCisKK01vcmUgaW1wb3J0YW50bHksIHlvdSBtdXN0IGZyZWUgdGhlIG9iamVjdCB0aGVyZSwgYW5kIG5vdCBpbW1lZGlhdGVseQorYWZ0ZXIgYW4gdW5yZWdpc3RlciBjYWxsLiBJZiBzb21lb25lIGVsc2UgaXMgcmVmZXJlbmNpbmcgdGhlIG9iamVjdAorKGUuZy4gdGhyb3VnaCBhIHN5c2ZzIGZpbGUpLCB0aGV5IHdpbGwgb2J0YWluIGEgcmVmZXJlbmNlIHRvIHRoZQorb2JqZWN0LCBhc3N1bWUgaXQncyB2YWxpZCBhbmQgb3BlcmF0ZSBvbiBpdC4gSWYgdGhlIG9iamVjdCBpcwordW5yZWdpc3RlcmVkIGFuZCBmcmVlZCBpbiB0aGUgbWVhbnRpbWUsIHRoZSBvcGVyYXRpb24gd2lsbCB0aGVuCityZWZlcmVuY2UgZnJlZWQgbWVtb3J5IGFuZCBnbyBib29tLiAKKworVGhpcyBjYW4gYmUgcHJldmVudGVkLCBpbiB0aGUgc2ltcGxlc3QgY2FzZSwgYnkgZGVmaW5pbmcgYSByZWxlYXNlCittZXRob2QgYW5kIGZyZWVpbmcgdGhlIG9iamVjdCBmcm9tIHRoZXJlIG9ubHkuIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90CitzZWN1cmUgcmVmZXJlbmNlIGNvdW50L29iamVjdCBtYW5hZ2VtZW50IG1vZGVscyB0aGF0IHVzZSBhIGR1YWwKK3JlZmVyZW5jZSBjb3VudCBvciBkbyBvdGhlciB3YWNreSB0aGluZ3Mgd2l0aCB0aGUgcmVmZXJlbmNlIGNvdW50CisobGlrZSB0aGUgbmV0d29ya2luZyBsYXllcikuIAorCisKKzEuNCBzeXNmcworCitFYWNoIGtvYmplY3QgcmVjZWl2ZXMgYSBkaXJlY3RvcnkgaW4gc3lzZnMuIFRoaXMgZGlyZWN0b3J5IGlzIGNyZWF0ZWQKK3VuZGVyIHRoZSBrb2JqZWN0J3MgcGFyZW50IGRpcmVjdG9yeS4gCisKK0lmIGEga29iamVjdCBkb2VzIG5vdCBoYXZlIGEgcGFyZW50IHdoZW4gaXQgaXMgcmVnaXN0ZXJlZCwgaXRzIHBhcmVudAorYmVjb21lcyBpdHMgZG9taW5hbnQga3NldC4gCisKK0lmIGEga29iamVjdCBkb2VzIG5vdCBoYXZlIGEgcGFyZW50IG5vciBhIGRvbWluYW50IGtzZXQsIGl0cyBkaXJlY3RvcnkKK2lzIGNyZWF0ZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiB0aGUgc3lzZnMgcGFydGl0aW9uLiBUaGlzIHNob3VsZCBvbmx5CitoYXBwZW4gZm9yIGtvYmplY3RzIHRoYXQgYXJlIGVtYmVkZGVkIGluIGEgc3RydWN0IHN1YnN5c3RlbS4gCisKKworCisyLiBrc2V0cworCisyLjEgRGVzY3JpcHRpb24KKworQSBrc2V0IGlzIGEgc2V0IG9mIGtvYmplY3RzIHRoYXQgYXJlIGVtYmVkZGVkIGluIHRoZSBzYW1lIHR5cGUuIAorCisKK3N0cnVjdCBrc2V0IHsKKwlzdHJ1Y3Qgc3Vic3lzdGVtCSogc3Vic3lzOworCXN0cnVjdCBrb2JqX3R5cGUJKiBrdHlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGtvYmplY3QJCWtvYmo7Cit9OworCisKK3ZvaWQga3NldF9pbml0KHN0cnVjdCBrc2V0ICogayk7CitpbnQga3NldF9hZGQoc3RydWN0IGtzZXQgKiBrKTsKK2ludCBrc2V0X3JlZ2lzdGVyKHN0cnVjdCBrc2V0ICogayk7Cit2b2lkIGtzZXRfdW5yZWdpc3RlcihzdHJ1Y3Qga3NldCAqIGspOworCitzdHJ1Y3Qga3NldCAqIGtzZXRfZ2V0KHN0cnVjdCBrc2V0ICogayk7Cit2b2lkIGtzZXRfcHV0KHN0cnVjdCBrc2V0ICogayk7CisKK3N0cnVjdCBrb2JqZWN0ICoga3NldF9maW5kX29iaihzdHJ1Y3Qga3NldCAqLCBjaGFyICopOworCisKK1RoZSB0eXBlIHRoYXQgdGhlIGtvYmplY3RzIGFyZSBlbWJlZGRlZCBpbiBpcyBkZXNjcmliZWQgYnkgdGhlIGt0eXBlCitwb2ludGVyLiBUaGUgc3Vic3lzdGVtIHRoYXQgdGhlIGtvYmplY3QgYmVsb25ncyB0byBpcyBwb2ludGVkIHRvIGJ5IHRoZQorc3Vic3lzIHBvaW50ZXIuIAorCitBIGtzZXQgY29udGFpbnMgYSBrb2JqZWN0IGl0c2VsZiwgbWVhbmluZyB0aGF0IGl0IG1heSBiZSByZWdpc3RlcmVkIGluCit0aGUga29iamVjdCBoaWVyYXJjaHkgYW5kIGV4cG9ydGVkIHZpYSBzeXNmcy4gTW9yZSBpbXBvcnRhbnRseSwgdGhlCitrc2V0IG1heSBiZSBlbWJlZGRlZCBpbiBhIGxhcmdlciBkYXRhIHR5cGUsIGFuZCBtYXkgYmUgcGFydCBvZiBhbm90aGVyCitrc2V0IChvZiB0aGF0IG9iamVjdCB0eXBlKS4gCisKK0ZvciBleGFtcGxlLCBhIGJsb2NrIGRldmljZSBpcyBhbiBvYmplY3QgKHN0cnVjdCBnZW5kaXNrKSB0aGF0IGlzCitjb250YWluZWQgaW4gYSBzZXQgb2YgYmxvY2sgZGV2aWNlcy4gSXQgbWF5IGFsc28gY29udGFpbiBhIHNldCBvZgorcGFydGl0aW9ucyAoc3RydWN0IGhkX3N0cnVjdCkgdGhhdCBoYXZlIGJlZW4gZm91bmQgb24gdGhlIGRldmljZS4gVGhlCitmb2xsb3dpbmcgY29kZSBzbmlwcGV0IGlsbHVzdHJhdGVzIGhvdyB0byBleHByZXNzIHRoaXMgcHJvcGVybHkuCisKKwkgc3RydWN0IGdlbmRpc2sgKiBkaXNrOworCSAuLi4KKwkgZGlzay0+a3NldC5rb2JqLmtzZXQgPSAmYmxvY2tfa3NldDsKKwkgZGlzay0+a3NldC5rdHlwZSA9ICZwYXJ0aXRpb25fa3R5cGU7CisJIGtzZXRfcmVnaXN0ZXIoJmRpc2stPmtzZXQpOworCistIFRoZSBrc2V0IHRoYXQgdGhlIGRpc2sncyBlbWJlZGRlZCBvYmplY3QgYmVsb25ncyB0byBpcyB0aGUKKyAgYmxvY2tfa3NldCwgYW5kIGlzIHBvaW50ZWQgdG8gYnkgZGlzay0+a3NldC5rb2JqLmtzZXQuIAorCistIFRoZSB0eXBlIG9mIG9iamVjdHMgb24gdGhlIGRpc2sncyBfc3Vib3JkaW5hdGVfIGxpc3QgYXJlIHBhcnRpdGlvbnMsIAorICBhbmQgaXMgc2V0IGluIGRpc2stPmtzZXQua3R5cGUuIAorCistIFRoZSBrc2V0IGlzIHRoZW4gcmVnaXN0ZXJlZCwgd2hpY2ggaGFuZGxlcyBpbml0aWFsaXppbmcgYW5kIGFkZGluZworICB0aGUgZW1iZWRkZWQga29iamVjdCB0byB0aGUgaGllcmFyY2h5LiAKKworCisyLjIga3NldCBQcm9ncmFtbWluZyBJbnRlcmZhY2UgCisKK0FsbCBrc2V0IGZ1bmN0aW9ucywgZXhjZXB0IGtzZXRfZmluZF9vYmooKSwgZXZlbnR1YWxseSBmb3J3YXJkIHRoZQorY2FsbHMgdG8gdGhlaXIgZW1iZWRkZWQga29iamVjdHMgYWZ0ZXIgcGVyZm9ybWluZyBrc2V0LXNwZWNpZmljCitvcGVyYXRpb25zLiBrc2V0cyBvZmZlciBhIHNpbWlsYXIgcHJvZ3JhbW1pbmcgbW9kZWwgdG8ga29iamVjdHM6IHRoZXkKK21heSBiZSB1c2VkIGFmdGVyIHRoZXkgYXJlIGluaXRpYWxpemVkLCB3aXRob3V0IHJlZ2lzdGVyaW5nIHRoZW0gaW4KK3RoZSBoaWVyYXJjaHkuIAorCitrc2V0X2ZpbmRfb2JqKCkgbWF5IGJlIHVzZWQgdG8gbG9jYXRlIGEga29iamVjdCB3aXRoIGEgcGFydGljdWxhcgorbmFtZS4gVGhlIGtvYmplY3QsIGlmIGZvdW5kLCBpcyByZXR1cm5lZC4gCisKKworMi4zIHN5c2ZzCisKK2tzZXRzIGFyZSByZXByZXNlbnRlZCBpbiBzeXNmcyB3aGVuIHRoZWlyIGVtYmVkZGVkIGtvYmplY3RzIGFyZQorcmVnaXN0ZXJlZC4gVGhleSBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgb2YgcGFyZW50aW5nLCB3aXRoIG9uZQorZXhjZXB0aW9uLiBJZiBhIGtzZXQgZG9lcyBub3QgaGF2ZSBhIHBhcmVudCwgbm9yIGlzIGl0cyBlbWJlZGRlZAora29iamVjdCBwYXJ0IG9mIGFub3RoZXIga3NldCwgdGhlIGtzZXQncyBwYXJlbnQgYmVjb21lcyBpdHMgZG9taW5hbnQKK3N1YnN5c3RlbS4gCisKK0lmIHRoZSBrc2V0IGRvZXMgbm90IGhhdmUgYSBwYXJlbnQsIGl0cyBkaXJlY3RvcnkgaXMgY3JlYXRlZCBhdCB0aGUKK3N5c2ZzIHJvb3QuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gdGhlIGtzZXQgcmVnaXN0ZXJlZCBpcworZW1iZWRkZWQgaW4gYSBzdWJzeXN0ZW0gaXRzZWxmLiAKKworCiszLiBzdHJ1Y3Qga3R5cGUKKworMy4xLiBEZXNjcmlwdGlvbgorCitzdHJ1Y3Qga29ial90eXBlIHsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGtvYmplY3QgKik7CisJc3RydWN0IHN5c2ZzX29wcwkqIHN5c2ZzX29wczsKKwlzdHJ1Y3QgYXR0cmlidXRlCSoqIGRlZmF1bHRfYXR0cnM7Cit9OworCisKK09iamVjdCB0eXBlcyByZXF1aXJlIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgY29udmVydGluZyBiZXR3ZWVuIHRoZQorZ2VuZXJpYyBvYmplY3QgYW5kIHRoZSBtb3JlIGNvbXBsZXggdHlwZS4gc3RydWN0IGtvYmpfdHlwZSBwcm92aWRlcwordGhlIG9iamVjdC1zcGVjaWZpYyBmaWVsZHMsIHdoaWNoIGluY2x1ZGU6CisKKy0gcmVsZWFzZTogQ2FsbGVkIHdoZW4gdGhlIGtvYmplY3QncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLiBUaGlzCisgIHNob3VsZCBjb252ZXJ0IHRoZSBvYmplY3QgdG8gdGhlIG1vcmUgY29tcGxleCB0eXBlIGFuZCBmcmVlIGl0LiAKKworLSBzeXNmc19vcHM6IFByb3ZpZGVzIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciBzeXNmcyBhY2Nlc3MuIFBsZWFzZQorICBzZWUgdGhlIHN5c2ZzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIAorCistIGRlZmF1bHRfYXR0cnM6IERlZmF1bHQgYXR0cmlidXRlcyB0byBiZSBleHBvcnRlZCB2aWEgc3lzZnMgd2hlbiB0aGUKKyAgb2JqZWN0IGlzIHJlZ2lzdGVyZWQuTm90ZSB0aGF0IHRoZSBsYXN0IGF0dHJpYnV0ZSBoYXMgdG8gYmUKKyAgaW5pdGlhbGl6ZWQgdG8gTlVMTCAhIFlvdSBjYW4gZmluZCBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uCisgIGluIGRyaXZlcnMvYmxvY2svZ2VuaGQuYworCisKK0luc3RhbmNlcyBvZiBzdHJ1Y3Qga29ial90eXBlIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSByZWZlcmVuY2VkIGJ5Cit0aGUga3NldC4gQSBrb2JqX3R5cGUgbWF5IGJlIHJlZmVyZW5jZWQgYnkgYW4gYXJiaXRyYXJ5IG51bWJlciBvZgora3NldHMsIGFzIHRoZXJlIG1heSBiZSBkaXNwYXJhdGUgc2V0cyBvZiBpZGVudGljYWwgb2JqZWN0cy4gCisKKworCis0LiBzdWJzeXN0ZW1zCisKKzQuMSBEZXNjcmlwdGlvbgorCitBIHN1YnN5c3RlbSByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgZW50aXR5IG9mIGNvZGUgdGhhdCBtYWludGFpbnMgYW4KK2FyYml0cmFyeSBudW1iZXIgb2Ygc2V0cyBvZiBvYmplY3RzIG9mIHZhcmlvdXMgdHlwZXMuIFNpbmNlIHRoZSBudW1iZXIKK29mIGtzZXRzIGFuZCB0aGUgdHlwZSBvZiBvYmplY3RzIHRoZXkgY29udGFpbiBhcmUgdmFyaWFibGUsIGEKK2dlbmVyaWMgcmVwcmVzZW50YXRpb24gb2YgYSBzdWJzeXN0ZW0gaXMgbWluaW1hbC4gCisKKworc3RydWN0IHN1YnN5c3RlbSB7CisJc3RydWN0IGtzZXQJCWtzZXQ7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQlyd3NlbTsKK307CisKK2ludCBzdWJzeXN0ZW1fcmVnaXN0ZXIoc3RydWN0IHN1YnN5c3RlbSAqKTsKK3ZvaWQgc3Vic3lzdGVtX3VucmVnaXN0ZXIoc3RydWN0IHN1YnN5c3RlbSAqKTsKKworc3RydWN0IHN1YnN5c3RlbSAqIHN1YnN5c19nZXQoc3RydWN0IHN1YnN5c3RlbSAqIHMpOwordm9pZCBzdWJzeXNfcHV0KHN0cnVjdCBzdWJzeXN0ZW0gKiBzKTsKKworCitBIHN1YnN5c3RlbSBjb250YWlucyBhbiBlbWJlZGRlZCBrc2V0IHNvOgorCistIEl0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgb2JqZWN0IGhpZXJhcmNoeSB2aWEgdGhlIGtzZXQncworICBlbWJlZGRlZCBrb2JqZWN0LiAKKworLSBJdCBjYW4gbWFpbnRhaW4gYSBkZWZhdWx0IGxpc3Qgb2Ygb2JqZWN0cyBvZiBvbmUgdHlwZS4gCisKK0FkZGl0aW9uYWwga3NldHMgbWF5IGF0dGFjaCB0byB0aGUgc3Vic3lzdGVtIHNpbXBseSBieSByZWZlcmVuY2luZyB0aGUKK3N1YnN5c3RlbSBiZWZvcmUgdGhleSBhcmUgcmVnaXN0ZXJlZC4gKFRoaXMgb25lLXdheSByZWZlcmVuY2UgbWVhbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIGRldGVybWluZSB0aGUga3NldHMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gdGhlCitzdWJzeXN0ZW0uKSAKKworQWxsIGtzZXRzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIGEgc3Vic3lzdGVtIHNoYXJlIHRoZSBzdWJzeXN0ZW0ncyBSL1cKK3NlbWFwaG9yZS4gCisKKworNC4yIHN1YnN5c3RlbSBQcm9ncmFtbWluZyBJbnRlcmZhY2UuCisKK1RoZSBzdWJzeXN0ZW0gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGlzIHNpbXBsZSBhbmQgZG9lcyBub3Qgb2ZmZXIgdGhlCitmbGV4aWJpbGl0eSB0aGF0IHRoZSBrc2V0IGFuZCBrb2JqZWN0IHByb2dyYW1taW5nIGludGVyZmFjZXMgZG8uIFRoZXkKK21heSBiZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQsIGFzIHdlbGwgYXMgcmVmZXJlbmNlIGNvdW50ZWQuIEVhY2gKK2NhbGwgZm9yd2FyZHMgdGhlIGNhbGxzIHRvIHRoZWlyIGVtYmVkZGVkIGtzZXRzICh3aGljaCBmb3J3YXJkIHRoZQorY2FsbHMgdG8gdGhlaXIgZW1iZWRkZWQga29iamVjdHMpLgorCisKKzQuMyBIZWxwZXJzCisKK0EgbnVtYmVyIG9mIG1hY3JvcyBhcmUgYXZhaWxhYmxlIHRvIG1ha2UgZGVhbGluZyB3aXRoIHN1YnN5c3RlbXMgYW5kCit0aGVpciBlbWJlZGRlZCBvYmplY3RzIGVhc2llci4gCisKKworZGVjbF9zdWJzeXMobmFtZSx0eXBlKQorCitEZWNsYXJlcyBhIHN1YnN5c3RlbSBuYW1lZCAnPG5hbWU+X3N1YnN5cycsIHdpdGggYW4gZW1iZWRkZWQga3NldCBvZgordHlwZSA8dHlwZT4uIEZvciBleGFtcGxlLCAKKworZGVjbF9zdWJzeXMoZGV2aWNlcywma3R5cGVfZGV2aWNlcyk7CisKK2lzIGVxdWl2YWxlbnQgdG8gZG9pbmc6CisKK3N0cnVjdCBzdWJzeXN0ZW0gZGV2aWNlX3N1YnN5cyA9IHsKKyAgICAgICAua3NldCA9IHsKKwkgICAgIC5rb2JqID0geworCQkgICAubmFtZSA9ICJkZXZpY2VzIiwKKwkgICAgIH0sCisJICAgICAua3R5cGUgPSAma3R5cGVfZGV2aWNlcywKKwl9Cit9OyAKKworCitUaGUgb2JqZWN0cyB0aGF0IGFyZSByZWdpc3RlcmVkIHdpdGggYSBzdWJzeXN0ZW0gdGhhdCB1c2UgdGhlCitzdWJzeXN0ZW0ncyBkZWZhdWx0IGxpc3QgbXVzdCBoYXZlIHRoZWlyIGtzZXQgcHRyIHNldCBwcm9wZXJseS4gVGhlc2UKK29iamVjdHMgbWF5IGhhdmUgZW1iZWRkZWQga29iamVjdHMsIGtzZXRzLCBvciBvdGhlciBzdWJzeXN0ZW1zLiBUaGUKK2ZvbGxvd2luZyBoZWxwZXJzIG1ha2Ugc2V0dGluZyB0aGUga3NldCBlYXNpZXI6IAorCisKK2tvYmpfc2V0X2tzZXRfcyhvYmosc3Vic3lzKQorCistIEFzc3VtZXMgdGhhdCBvYmotPmtvYmogZXhpc3RzLCBhbmQgaXMgYSBzdHJ1Y3Qga29iamVjdC4gCistIFNldHMgdGhlIGtzZXQgb2YgdGhhdCBrb2JqZWN0IHRvIHRoZSBzdWJzeXN0ZW0ncyBlbWJlZGRlZCBrc2V0LgorCisKK2tzZXRfc2V0X2tzZXRfcyhvYmosc3Vic3lzKQorCistIEFzc3VtZXMgdGhhdCBvYmotPmtzZXQgZXhpc3RzLCBhbmQgaXMgYSBzdHJ1Y3Qga3NldC4KKy0gU2V0cyB0aGUga3NldCBvZiB0aGUgZW1iZWRkZWQga29iamVjdCB0byB0aGUgc3Vic3lzdGVtJ3MgCisgIGVtYmVkZGVkIGtzZXQuIAorCitzdWJzeXNfc2V0X2tzZXQob2JqLHN1YnN5cykKKworLSBBc3N1bWVzIG9iai0+c3Vic3lzIGV4aXN0cywgYW5kIGlzIGEgc3RydWN0IHN1YnN5c3RlbS4KKy0gU2V0cyBvYmotPnN1YnN5cy5rc2V0LmtvYmoua3NldCB0byB0aGUgc3Vic3lzdGVtJ3MgZW1iZWRkZWQga3NldC4KKworCis0LjQgc3lzZnMKKworc3Vic3lzdGVtcyBhcmUgcmVwcmVzZW50ZWQgaW4gc3lzZnMgdmlhIHRoZWlyIGVtYmVkZGVkIGtvYmplY3RzLiBUaGV5Citmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgcHJldmlvdXNseSBtZW50aW9uZWQgd2l0aCBubyBleGNlcHRpb25zLiBUaGV5Cit0eXBpY2FsbHkgcmVjZWl2ZSBhIHRvcC1sZXZlbCBkaXJlY3RvcnkgaW4gc3lzZnMsIGV4Y2VwdCB3aGVuIHRoZWlyCitlbWJlZGRlZCBrb2JqZWN0IGlzIHBhcnQgb2YgYW5vdGhlciBrc2V0LCBvciB0aGUgcGFyZW50IG9mIHRoZQorZW1iZWRkZWQga29iamVjdCBpcyBleHBsaWNpdGx5IHNldC4gCisKK05vdGUgdGhhdCB0aGUgc3Vic3lzdGVtJ3MgZW1iZWRkZWQga3NldCBtdXN0IGJlICdhdHRhY2hlZCcgdG8gdGhlCitzdWJzeXN0ZW0gaXRzZWxmIGluIG9yZGVyIHRvIHVzZSBpdHMgcndzZW0uIFRoaXMgaXMgZG9uZSBhZnRlcgora3NldF9hZGQoKSBoYXMgYmVlbiBjYWxsZWQuIChOb3QgYmVmb3JlLCBiZWNhdXNlIGtzZXRfYWRkKCkgdXNlcyBpdHMKK3N1YnN5c3RlbSBmb3IgYSBkZWZhdWx0IHBhcmVudCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgaGF2ZSBvbmUpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wLW1vZGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGU4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcC1tb2RlLnR4dApAQCAtMCwwICsxLDk1MCBAQAorSG93IHRvIGNvbnNlcnZlIGJhdHRlcnkgcG93ZXIgdXNpbmcgbGFwdG9wLW1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvY3VtZW50IEF1dGhvcjogQmFydCBTYW13ZWwgKGJhcnRAc2Ftd2VsLnRrKQorRGF0ZSBjcmVhdGVkOiBKYW51YXJ5IDIsIDIwMDQKK0xhc3QgbW9kaWZpZWQ6IEp1bHkgMTAsIDIwMDQKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworTGFwdG9wIG1vZGUgaXMgdXNlZCB0byBtaW5pbWl6ZSB0aGUgdGltZSB0aGF0IHRoZSBoYXJkIGRpc2sgbmVlZHMgdG8gYmUgc3B1biB1cCwKK3RvIGNvbnNlcnZlIGJhdHRlcnkgcG93ZXIgb24gbGFwdG9wcy4gSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gY2F1c2Ugc2lnbmlmaWNhbnQKK3Bvd2VyIHNhdmluZ3MuCisKK0NvbnRlbnRzCistLS0tLS0tLQorCisqIEludHJvZHVjdGlvbgorKiBJbnN0YWxsYXRpb24KKyogQ2F2ZWF0cworKiBUaGUgRGV0YWlscworKiBUaXBzICYgVHJpY2tzCisqIENvbnRyb2wgc2NyaXB0CisqIEFDUEkgaW50ZWdyYXRpb24KKyogTW9uaXRvcmluZyB0b29sCisKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworVG8gdXNlIGxhcHRvcCBtb2RlLCB5b3UgZG9uJ3QgbmVlZCB0byBzZXQgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMKK29yIGFueXRoaW5nLiBTaW1wbHkgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluY2x1ZGVkIGluIHRoaXMgZG9jdW1lbnQsIGFuZAorbGFwdG9wIG1vZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0YXJ0ZWQgd2hlbiB5b3UncmUgb24gYmF0dGVyeS4gRm9yCit5b3VyIGNvbnZlbmllbmNlLCBhIHRhcmJhbGwgY29udGFpbmluZyBhbiBpbnN0YWxsZXIgY2FuIGJlIGRvd25sb2FkZWQgYXQ6CisKK2h0dHA6Ly93d3cueHM0YWxsLm5sL35ic2Ftd2VsL2xhcHRvcF9tb2RlL3Rvb2xzCisKK1RvIGNvbmZpZ3VyZSBsYXB0b3AgbW9kZSwgeW91IG5lZWQgdG8gZWRpdCB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBpcworbG9jYXRlZCBpbiAvZXRjL2RlZmF1bHQvbGFwdG9wLW1vZGUgb24gRGViaWFuLWJhc2VkIHN5c3RlbXMsIG9yIGluCisvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZSBvbiBvdGhlciBzeXN0ZW1zLgorCitVbmZvcnR1bmF0ZWx5LCBhdXRvbWF0aWMgZW5hYmxpbmcgb2YgbGFwdG9wIG1vZGUgZG9lcyBub3Qgd29yayBmb3IKK2xhcHRvcHMgdGhhdCBkb24ndCBoYXZlIEFDUEkuIE9uIHRob3NlIGxhcHRvcHMsIHlvdSBuZWVkIHRvIHN0YXJ0IGxhcHRvcAorbW9kZSBtYW51YWxseS4gVG8gc3RhcnQgbGFwdG9wIG1vZGUsIHJ1biAibGFwdG9wX21vZGUgc3RhcnQiLCBhbmQgdG8KK3N0b3AgaXQsIHJ1biAibGFwdG9wX21vZGUgc3RvcCIuIChOb3RlOiBUaGUgbGFwdG9wIG1vZGUgdG9vbHMgcGFja2FnZSBub3cKK2hhcyBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgQVBNLCB5b3UgbWlnaHQgd2FudCB0byB0cnkgdGhhdCBmaXJzdC4pCisKKworQ2F2ZWF0cworLS0tLS0tLQorCisqIFRoZSBkb3duc2lkZSBvZiBsYXB0b3AgbW9kZSBpcyB0aGF0IHlvdSBoYXZlIGEgY2hhbmNlIG9mIGxvc2luZyB1cCB0byAxMAorICBtaW51dGVzIG9mIHdvcmsuIElmIHlvdSBjYW5ub3QgYWZmb3JkIHRoaXMsIGRvbid0IHVzZSBpdCEgVGhlIHN1cHBsaWVkIEFDUEkKKyAgc2NyaXB0cyBhdXRvbWF0aWNhbGx5IHR1cm4gb2ZmIGxhcHRvcCBtb2RlIHdoZW4gdGhlIGJhdHRlcnkgYWxtb3N0IHJ1bnMgb3V0LAorICBzbyB0aGF0IHlvdSB3b24ndCBsb3NlIGFueSBkYXRhIGF0IHRoZSBlbmQgb2YgeW91ciBiYXR0ZXJ5IGxpZmUuCisKKyogTW9zdCBkZXNrdG9wIGhhcmQgZHJpdmVzIGhhdmUgYSB2ZXJ5IGxpbWl0ZWQgbGlmZXRpbWUgbWVhc3VyZWQgaW4gc3BpbmRvd24KKyAgY3ljbGVzLCB0eXBpY2FsbHkgYWJvdXQgNTAuMDAwIHRpbWVzIChpdCdzIHVzdWFsbHkgbGlzdGVkIG9uIHRoZSBzcGVjIHNoZWV0KS4KKyAgQ2hlY2sgeW91ciBkcml2ZSdzIHJhdGluZywgYW5kIGRvbid0IHdlYXIgZG93biB5b3VyIGRyaXZlJ3MgbGlmZXRpbWUgaWYgeW91CisgIGRvbid0IG5lZWQgdG8uCisKKyogSWYgeW91IG1vdW50IHNvbWUgb2YgeW91ciBleHQzL3JlaXNlcmZzIGZpbGVzeXN0ZW1zIHdpdGggdGhlIC1uIG9wdGlvbiwgdGhlbgorICB0aGUgY29udHJvbCBzY3JpcHQgd2lsbCBub3QgYmUgYWJsZSB0byByZW1vdW50IHRoZW0gY29ycmVjdGx5LiBZb3UgbXVzdCBzZXQKKyAgRE9fUkVNT1VOVFM9MCBpbiB0aGUgY29udHJvbCBzY3JpcHQsIG90aGVyd2lzZSBpdCB3aWxsIHJlbW91bnQgdGhlbSB3aXRoIHRoZQorICB3cm9uZyBvcHRpb25zIC0tIG9yIGl0IHdpbGwgZmFpbCBiZWNhdXNlIGl0IGNhbm5vdCB3cml0ZSB0byAvZXRjL210YWIuCisKKyogSWYgeW91IGhhdmUgeW91ciBmaWxlc3lzdGVtcyBsaXN0ZWQgYXMgdHlwZSAiYXV0byIgaW4gZnN0YWIsIGxpa2UgSSBkaWQsIHRoZW4KKyAgdGhlIGNvbnRyb2wgc2NyaXB0IHdpbGwgbm90IHJlY29nbml6ZSB0aGVtIGFzIGZpbGVzeXN0ZW1zIHRoYXQgbmVlZCByZW1vdW50aW5nLgorICBZb3UgbXVzdCBsaXN0IHRoZSBmaWxlc3lzdGVtcyB3aXRoIHRoZWlyIHRydWUgdHlwZSBpbnN0ZWFkLgorCisqIEl0IGhhcyBiZWVuIHJlcG9ydGVkIHRoYXQgc29tZSB2ZXJzaW9ucyBvZiB0aGUgbXV0dCBtYWlsIGNsaWVudCB1c2UgZmlsZSBhY2Nlc3MKKyAgdGltZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmb2xkZXIgY29udGFpbnMgbmV3IG1haWwuIElmIHlvdSB1c2UgbXV0dCBhbmQKKyAgZXhwZXJpZW5jZSB0aGlzLCB5b3UgbXVzdCBkaXNhYmxlIHRoZSBub2F0aW1lIHJlbW91bnRpbmcgYnkgc2V0dGluZyB0aGUgb3B0aW9uCisgIERPX1JFTU9VTlRfTk9BVElNRSB0byAwIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKworVGhlIERldGFpbHMKKy0tLS0tLS0tLS0tCisKK0xhcHRvcCBtb2RlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGtub2IgL3Byb2Mvc3lzL3ZtL2xhcHRvcF9tb2RlLiBUaGlzIGtub2IgaXMKK3ByZXNlbnQgZm9yIGFsbCBrZXJuZWxzIHRoYXQgaGF2ZSB0aGUgbGFwdG9wIG1vZGUgcGF0Y2gsIHJlZ2FyZGxlc3Mgb2YgYW55Citjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdoZW4gdGhlIGtub2IgaXMgc2V0LCBhbnkgcGh5c2ljYWwgZGlzayBJL08gKHRoYXQgbWlnaHQKK2hhdmUgY2F1c2VkIHRoZSBoYXJkIGRpc2sgdG8gc3BpbiB1cCkgY2F1c2VzIExpbnV4IHRvIGZsdXNoIGFsbCBkaXJ0eSBibG9ja3MuIFRoZQorcmVzdWx0IG9mIHRoaXMgaXMgdGhhdCBhZnRlciBhIGRpc2sgaGFzIHNwdW4gZG93biwgaXQgd2lsbCBub3QgYmUgc3B1biB1cAorYW55bW9yZSB0byB3cml0ZSBkaXJ0eSBibG9ja3MsIGJlY2F1c2UgdGhvc2UgYmxvY2tzIGhhZCBhbHJlYWR5IGJlZW4gd3JpdHRlbgoraW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vc3QgcmVjZW50IHJlYWQgb3BlcmF0aW9uLiBUaGUgdmFsdWUgb2YgdGhlIGxhcHRvcF9tb2RlCitrbm9iIGRldGVybWluZXMgdGhlIHRpbWUgYmV0d2VlbiB0aGUgb2NjdXJyZW5jZSBvZiBkaXNrIEkvTyBhbmQgd2hlbiB0aGUgZmx1c2gKK2lzIHRyaWdnZXJlZC4gQSBzZW5zaWJsZSB2YWx1ZSBmb3IgdGhlIGtub2IgaXMgNSBzZWNvbmRzLiBTZXR0aW5nIHRoZSBrbm9iIHRvCiswIGRpc2FibGVzIGxhcHRvcCBtb2RlLgorCitUbyBpbmNyZWFzZSB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgbGFwdG9wX21vZGUgc3RyYXRlZ3ksIHRoZSBsYXB0b3BfbW9kZQorY29udHJvbCBzY3JpcHQgaW5jcmVhc2VzIGRpcnR5X2V4cGlyZV9jZW50aXNlY3MgYW5kIGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MgaW4KKy9wcm9jL3N5cy92bSB0byBhYm91dCAxMCBtaW51dGVzIChieSBkZWZhdWx0KSwgd2hpY2ggbWVhbnMgdGhhdCBwYWdlcyB0aGF0IGFyZQorZGlydGllZCBhcmUgbm90IGZvcmNlZCB0byBiZSB3cml0dGVuIHRvIGRpc2sgYXMgb2Z0ZW4uIFRoZSBjb250cm9sIHNjcmlwdCBhbHNvCitjaGFuZ2VzIHRoZSBkaXJ0eSBiYWNrZ3JvdW5kIHJhdGlvLCBzbyB0aGF0IGJhY2tncm91bmQgd3JpdGViYWNrIG9mIGRpcnR5IHBhZ2VzCitpcyBub3QgZG9uZSBhbnltb3JlLiBDb21iaW5lZCB3aXRoIGEgaGlnaGVyIGNvbW1pdCB2YWx1ZSAoYWxzbyAxMCBtaW51dGVzKSBmb3IKK2V4dDMgb3IgUmVpc2VyRlMgZmlsZXN5c3RlbXMgKGFsc28gZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb250cm9sIHNjcmlwdCksCit0aGlzIHJlc3VsdHMgaW4gY29uY2VudHJhdGlvbiBvZiBkaXNrIGFjdGl2aXR5IGluIGEgc21hbGwgdGltZSBpbnRlcnZhbCB3aGljaAorb2NjdXJzIG9ubHkgb25jZSBldmVyeSAxMCBtaW51dGVzLCBvciB3aGVuZXZlciB0aGUgZGlzayBpcyBmb3JjZWQgdG8gc3BpbiB1cCBieQorYSBjYWNoZSBtaXNzLiBUaGUgZGlzayBjYW4gdGhlbiBiZSBzcHVuIGRvd24gaW4gdGhlIHBlcmlvZHMgb2YgaW5hY3Rpdml0eS4KKworSWYgeW91IHdhbnQgdG8gZmluZCBvdXQgd2hpY2ggcHJvY2VzcyBjYXVzZWQgdGhlIGRpc2sgdG8gc3BpbiB1cCwgeW91IGNhbgorZ2F0aGVyIGluZm9ybWF0aW9uIGJ5IHNldHRpbmcgdGhlIGZsYWcgL3Byb2Mvc3lzL3ZtL2Jsb2NrX2R1bXAuIFdoZW4gdGhpcyBmbGFnCitpcyBzZXQsIExpbnV4IHJlcG9ydHMgYWxsIGRpc2sgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyB0aGF0IHRha2UgcGxhY2UsIGFuZAorYWxsIGJsb2NrIGRpcnR5aW5ncyBkb25lIHRvIGZpbGVzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlYnVnIHdoeSBhIGRpc2sKK25lZWRzIHRvIHNwaW4gdXAsIGFuZCB0byBpbmNyZWFzZSBiYXR0ZXJ5IGxpZmUgZXZlbiBtb3JlLiBUaGUgb3V0cHV0IG9mCitibG9ja19kdW1wIGlzIHdyaXR0ZW4gdG8gdGhlIGtlcm5lbCBvdXRwdXQsIGFuZCBpdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCisiZG1lc2ciLiBXaGVuIHlvdSB1c2UgYmxvY2tfZHVtcCBhbmQgeW91ciBrZXJuZWwgbG9nZ2luZyBsZXZlbCBhbHNvIGluY2x1ZGVzCitrZXJuZWwgZGVidWdnaW5nIG1lc3NhZ2VzLCB5b3UgcHJvYmFibHkgd2FudCB0byB0dXJuIG9mZiBrbG9nZCwgb3RoZXJ3aXNlCit0aGUgb3V0cHV0IG9mIGJsb2NrX2R1bXAgd2lsbCBiZSBsb2dnZWQsIGNhdXNpbmcgZGlzayBhY3Rpdml0eSB0aGF0IGlzIG5vdAorbm9ybWFsbHkgdGhlcmUuCisKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitUaGUgbGFwdG9wIG1vZGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGxvY2F0ZWQgaW4gL2V0Yy9kZWZhdWx0L2xhcHRvcC1tb2RlIG9uCitEZWJpYW4tYmFzZWQgc3lzdGVtcywgb3IgaW4gL2V0Yy9zeXNjb25maWcvbGFwdG9wLW1vZGUgb24gb3RoZXIgc3lzdGVtcy4gSXQKK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworTUFYX0FHRToKKworTWF4aW11bSB0aW1lLCBpbiBzZWNvbmRzLCBvZiBoYXJkIGRyaXZlIHNwaW5kb3duIHRpbWUgdGhhdCB5b3UgYXJlCitjb25mb3J0YWJsZSB3aXRoLiBXb3JzdCBjYXNlLCBpdCdzIHBvc3NpYmxlIHRoYXQgeW91IGNvdWxkIGxvc2UgdGhpcworYW1vdW50IG9mIHdvcmsgaWYgeW91ciBiYXR0ZXJ5IGZhaWxzIHdoaWxlIHlvdSdyZSBpbiBsYXB0b3AgbW9kZS4KKworTUlOSU1VTV9CQVRURVJZX01JTlVURVM6CisKK0F1dG9tYXRpY2FsbHkgZGlzYWJsZSBsYXB0b3AgbW9kZSBpZiB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBtaW51dGVzIG9mCitiYXR0ZXJ5IHBvd2VyIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBEZWZhdWx0IGlzIDEwIG1pbnV0ZXMuCisKK0FDX0hEL0JBVFRfSEQ6CisKK1RoZSBpZGxlIHRpbWVvdXQgdGhhdCBzaG91bGQgYmUgc2V0IG9uIHlvdXIgaGFyZCBkcml2ZSB3aGVuIGxhcHRvcCBtb2RlCitpcyBhY3RpdmUgKEJBVFRfSEQpIGFuZCB3aGVuIGl0IGlzIG5vdCBhY3RpdmUgKEFDX0hEKS4gVGhlIGRlZmF1bHRzIGFyZQorMjAgc2Vjb25kcyAodmFsdWUgNCkgZm9yIEJBVFRfSEQgIGFuZCAyIGhvdXJzICh2YWx1ZSAyNDQpIGZvciBBQ19IRC4gVGhlCitwb3NzaWJsZSB2YWx1ZXMgYXJlIHRob3NlIGxpc3RlZCBpbiB0aGUgbWFudWFsIHBhZ2UgZm9yICJoZHBhcm0iIGZvciB0aGUKKyItUyIgb3B0aW9uLgorCitIRDoKKworVGhlIGRldmljZXMgZm9yIHdoaWNoIHRoZSBzcGluZG93biB0aW1lb3V0IHNob3VsZCBiZSBhZGp1c3RlZCBieSBsYXB0b3AgbW9kZS4KK0RlZmF1bHQgaXMgL2Rldi9oZGEuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGRldmljZXMsIHNlcGFyYXRlIHRoZW0gYnkgYSBzcGFjZS4KKworUkVBREFIRUFEOgorCitEaXNrIHJlYWRhaGVhZCwgaW4gNTEyLWJ5dGUgc2VjdG9ycywgd2hpbGUgbGFwdG9wIG1vZGUgaXMgYWN0aXZlLiBBIGxhcmdlCityZWFkYWhlYWQgY2FuIHByZXZlbnQgZGlzayBhY2Nlc3NlcyBmb3IgdGhpbmdzIGxpa2UgZXhlY3V0YWJsZSBwYWdlcyAod2hpY2ggYXJlCitsb2FkZWQgb24gZGVtYW5kIHdoaWxlIHRoZSBhcHBsaWNhdGlvbiBleGVjdXRlcykgYW5kIHNlcXVlbnRpYWxseSBhY2Nlc3NlZCBkYXRhCisoTVAzcykuCisKK0RPX1JFTU9VTlRTOgorCitUaGUgY29udHJvbCBzY3JpcHQgYXV0b21hdGljYWxseSByZW1vdW50cyBhbnkgbW91bnRlZCBqb3VybmFsZWQgZmlsZXN5c3RlbXMKK3dpdGggYXBwcm9yaWF0ZSBjb21taXQgaW50ZXJ2YWwgb3B0aW9ucy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gMCwgdGhpcworZmVhdHVyZSBpcyBkaXNhYmxlZC4KKworRE9fUkVNT1VOVF9OT0FUSU1FOgorCitXaGVuIHJlbW91bnRpbmcsIHNob3VsZCB0aGUgZmlsZXN5c3RlbXMgYmUgcmVtb3VudGVkIHdpdGggdGhlIG5vYXRpbWUgb3B0aW9uPworTm9ybWFsbHksIHRoaXMgaXMgc2V0IHRvICIxIiAoZW5hYmxlZCksIGJ1dCB0aGVyZSBtYXkgYmUgcHJvZ3JhbXMgdGhhdCByZXF1aXJlCithY2Nlc3MgdGltZSByZWNvcmRpbmcuCisKK0RJUlRZX1JBVElPOgorCitUaGUgcGVyY2VudGFnZSBvZiBtZW1vcnkgdGhhdCBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gImRpcnR5IiBvciB1bnNhdmVkIGRhdGEKK2JlZm9yZSBhIHdyaXRlYmFjayBpcyBmb3JjZWQsIHdoaWxlIGxhcHRvcCBtb2RlIGlzIGFjdGl2ZS4gQ29ycmVzcG9uZHMgdG8KK3RoZSAvcHJvYy9zeXMvdm0vZGlydHlfcmF0aW8gc3lzY3RsLgorCitESVJUWV9CQUNLR1JPVU5EX1JBVElPOgorCitUaGUgcGVyY2VudGFnZSBvZiBtZW1vcnkgdGhhdCBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gImRpcnR5IiBvciB1bnNhdmVkIGRhdGEKK2FmdGVyIGEgZm9yY2VkIHdyaXRlYmFjayBpcyBkb25lIGR1ZSB0byBhbiBleGNlZWRpbmcgb2YgRElSVFlfUkFUSU8uIFNldAordGhpcyBuaWNlIGFuZCBsb3cuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIC9wcm9jL3N5cy92bS9kaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvCitzeXNjdGwuCisKK05vdGUgdGhhdCB0aGUgYmVoYXZpb3VyIG9mIGRpcnR5X2JhY2tncm91bmRfcmF0aW8gaXMgcXVpdGUgZGlmZmVyZW50Cit3aGVuIGxhcHRvcCBtb2RlIGlzIGFjdGl2ZSBhbmQgd2hlbiBpdCBpc24ndC4gV2hlbiBsYXB0b3AgbW9kZSBpcyBpbmFjdGl2ZSwKK2RpcnR5X2JhY2tncm91bmRfcmF0aW8gaXMgdGhlIHRocmVzaG9sZCBwZXJjZW50YWdlIGF0IHdoaWNoIGJhY2tncm91bmQgd3JpdGVvdXRzCitzdGFydCB0YWtpbmcgcGxhY2UuIFdoZW4gbGFwdG9wIG1vZGUgaXMgYWN0aXZlLCBob3dldmVyLCBiYWNrZ3JvdW5kIHdyaXRlb3V0cworYXJlIGRpc2FibGVkLCBhbmQgdGhlIGRpcnR5X2JhY2tncm91bmRfcmF0aW8gb25seSBkZXRlcm1pbmVzIGhvdyBtdWNoIHdyaXRlYmFjaworaXMgZG9uZSB3aGVuIGRpcnR5X3JhdGlvIGlzIHJlYWNoZWQuCisKK0RPX0NQVToKKworRW5hYmxlIENQVSBmcmVxdWVuY3kgc2NhbGluZyB3aGVuIGluIGxhcHRvcCBtb2RlLiAoUmVxdWlyZXMgQ1BVRnJlcSB0byBiZSBzZXR1cC4KK1NlZSBEb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0IGZvciBtb3JlIGluZm8uIERpc2FibGVkIGJ5IGRlZmF1bHQuKQorCitDUFVfTUFYRlJFUToKKworV2hlbiBvbiBiYXR0ZXJ5LCB3aGF0IGlzIHRoZSBtYXhpbXVtIENQVSBzcGVlZCB0aGF0IHRoZSBzeXN0ZW0gc2hvdWxkIHVzZT8gTGVnYWwKK3ZhbHVlcyBhcmUgInNsb3dlc3QiIGZvciB0aGUgc2xvd2VzdCBzcGVlZCB0aGF0IHlvdXIgQ1BVIGlzIGFibGUgdG8gb3BlcmF0ZSBhdCwKK29yIGEgdmFsdWUgbGlzdGVkIGluIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcy4KKworCitUaXBzICYgVHJpY2tzCistLS0tLS0tLS0tLS0tCisKKyogQmFydGVrIEthbmlhIHJlcG9ydHMgZ2V0dGluZyB1cCB0byA1MCBtaW51dGVzIG9mIGV4dHJhIGJhdHRlcnkgbGlmZSAob24gdG9wCisgIG9mIGhpcyByZWd1bGFyIDMgdG8gMy41IGhvdXJzKSB1c2luZyBhIHNwaW5kb3duIHRpbWUgb2YgNSBzZWNvbmRzIChCQVRUX0hEPTEpLgorCisqIFlvdSBjYW4gc3BpbiBkb3duIHRoZSBkaXNrIHdoaWxlIHBsYXlpbmcgTVAzLCBieSBzZXR0aW5nIGRpc2sgcmVhZGFoZWFkCisgIHRvIDhNQiAoUkVBREFIRUFEPTE2Mzg0KS4gRWZmZWN0aXZlbHksIHRoZSBkaXNrIHdpbGwgcmVhZCBhIGNvbXBsZXRlIE1QMyBhdAorICBvbmNlLCBhbmQgd2lsbCB0aGVuIHNwaW4gZG93biB3aGlsZSB0aGUgTVAzIGlzIHBsYXlpbmcuIChUaGFua3MgdG8gQmFydGVrCisgIEthbmlhLikKKworKiBEcmV3IFNjb3R0IERhbmllbHMgb2JzZXJ2ZWQ6ICJJIGRvbid0IGtub3cgd2h5LCBidXQgd2hlbiBJIGRlY3JlYXNlIHRoZSBudW1iZXIKKyAgb2YgY29sb3VycyB0aGF0IG15IGRpc3BsYXkgdXNlcyBpdCBjb25zdW1lcyBsZXNzIGJhdHRlcnkgcG93ZXIuIEkndmUgc2VlbgorICB0aGlzIG9uIHBvd2VyYm9va3MgdG9vLiBJIGhvcGUgdGhhdCB0aGlzIGlzIGEgcGllY2Ugb2YgaW5mb3JtYXRpb24gdGhhdAorICBtaWdodCBiZSB1c2VmdWwgdG8gdGhlIExhcHRvcCBNb2RlIHBhdGNoIG9yIGl0J3MgdXNlcnMuIgorCisqIEluIHN5c2xvZy5jb25mLCB5b3UgY2FuIHByZWZpeCBlbnRyaWVzIHdpdGggYSBkYXNoIGBgLScnIHRvIG9taXQgc3luY2luZyB0aGUKKyAgZmlsZSBhZnRlciBldmVyeSBsb2dnaW5nLiBXaGVuIHlvdSdyZSB1c2luZyBsYXB0b3AtbW9kZSBhbmQgeW91ciBkaXNrIGRvZXNuJ3QKKyAgc3BpbiBkb3duLCB0aGlzIGlzIGEgbGlrZWx5IGN1bHByaXQuCisKKyogUmljaGFyZCBBdHRlcmVyIG9ic2VydmVkIHRoYXQgbGFwdG9wIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggbm9mbHVzaGQKKyAgKGh0dHA6Ly9ub2ZsdXNoZC5zb3VyY2Vmb3JnZS5uZXQvKSwgaXQgc2VlbXMgdGhhdCBub2ZsdXNoZCBwcmV2ZW50cyBsYXB0b3AtbW9kZQorICBmcm9tIGRvaW5nIGl0cyB0aGluZy4KKworKiBJZiB5b3UncmUgd29ycmllZCBhYm91dCB5b3VyIGRhdGEsIHlvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHVzaW5nIGEgVVNCCisgIG1lbW9yeSBzdGljayBvciBzb21ldGhpbmcgbGlrZSB0aGF0IGFzIGEgIndvcmtpbmcgYXJlYSIuIChCZSBhd2FyZSB0aG91Z2gKKyAgdGhhdCBmbGFzaCBtZW1vcnkgY2FuIG9ubHkgaGFuZGxlIGEgbGltaXRlZCBudW1iZXIgb2Ygd3JpdGVzLCBhbmQgb3ZlcnVzZQorICBtYXkgd2VhciBvdXQgeW91ciBtZW1vcnkgc3RpY2sgcHJldHR5IHF1aWNrbHkuIERvIF9ub3RfIHVzZSBqb3VybmFsbGluZworICBmaWxlc3lzdGVtcyBvbiBmbGFzaCBtZW1vcnkgc3RpY2tzLikKKworCitDb25maWd1cmF0aW9uIGZpbGUgZm9yIGNvbnRyb2wgYW5kIEFDUEkgYmF0dGVyeSBzY3JpcHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgYWxsb3dzIHRoZSB0dW5hYmxlcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgc2NyaXB0cyB2aWEgYW4gZXh0ZXJuYWwKK2NvbmZpZ3VyYXRpb24gZmlsZQorCitJdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIC9ldGMvZGVmYXVsdC9sYXB0b3AtbW9kZSBvbiBEZWJpYW4sIGFuZCBhcworL2V0Yy9zeXNjb25maWcvbGFwdG9wLW1vZGUgb24gUmVkIEhhdCwgU1VTRSwgTWFuZHJha2UsIGFuZCBvdGhlciB3b3JrLWFsaWtlcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS1DT05GSUcgRklMRSBCRUdJTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWF4aW11bSB0aW1lLCBpbiBzZWNvbmRzLCBvZiBoYXJkIGRyaXZlIHNwaW5kb3duIHRpbWUgdGhhdCB5b3UgYXJlCisjIGNvbmZvcnRhYmxlIHdpdGguIFdvcnN0IGNhc2UsIGl0J3MgcG9zc2libGUgdGhhdCB5b3UgY291bGQgbG9zZSB0aGlzCisjIGFtb3VudCBvZiB3b3JrIGlmIHlvdXIgYmF0dGVyeSBmYWlscyB5b3Ugd2hpbGUgaW4gbGFwdG9wIG1vZGUuCisjTUFYX0FHRT02MDAKKworIyBBdXRvbWF0aWNhbGx5IGRpc2FibGUgbGFwdG9wIG1vZGUgd2hlbiB0aGUgbnVtYmVyIG9mIG1pbnV0ZXMgb2YgYmF0dGVyeQorIyB0aGF0IHlvdSBoYXZlIGxlZnQgZ29lcyBiZWxvdyB0aGlzIHRocmVzaG9sZC4KK01JTklNVU1fQkFUVEVSWV9NSU5VVEVTPTEwCisKKyMgUmVhZC1haGVhZCwgaW4gNTEyLWJ5dGUgc2VjdG9ycy4gWW91IGNhbiBzcGluIGRvd24gdGhlIGRpc2sgd2hpbGUgcGxheWluZyBNUDMvT0dHCisjIGJ5IHNldHRpbmcgdGhlIGRpc2sgcmVhZGFoZWFkIHRvIDhNQiAoUkVBREFIRUFEPTE2Mzg0KS4gRWZmZWN0aXZlbHksIHRoZSBkaXNrCisjIHdpbGwgcmVhZCBhIGNvbXBsZXRlIE1QMyBhdCBvbmNlLCBhbmQgd2lsbCB0aGVuIHNwaW4gZG93biB3aGlsZSB0aGUgTVAzL09HRyBpcworIyBwbGF5aW5nLgorI1JFQURBSEVBRD00MDk2CisKKyMgU2hhbGwgd2UgcmVtb3VudCBqb3VybmFsZWQgZnMuIHdpdGggYXBwcm9wcmlhdGUgY29tbWl0IGludGVydmFsPyAoMT15ZXMpCisjRE9fUkVNT1VOVFM9MQorCisjIEFuZCBzaGFsbCB3ZSBhZGQgdGhlICJub2F0aW1lIiBvcHRpb24gdG8gdGhhdCBhcyB3ZWxsPyAoMT15ZXMpCisjRE9fUkVNT1VOVF9OT0FUSU1FPTEKKworIyBEaXJ0eSBzeW5jaHJvbm91cyByYXRpby4gIEF0IHRoaXMgcGVyY2VudGFnZSBvZiBkaXJ0eSBwYWdlcyB0aGUgcHJvY2VzcworIyB3aGljaAorIyBjYWxscyB3cml0ZSgpIGRvZXMgaXRzIG93biB3cml0ZWJhY2sKKyNESVJUWV9SQVRJTz00MAorCisjCisjIEFsbG93ZWQgZGlydHkgYmFja2dyb3VuZCByYXRpbywgaW4gcGVyY2VudC4gIE9uY2UgRElSVFlfUkFUSU8gaGFzIGJlZW4KKyMgZXhjZWVkZWQsIHRoZSBrZXJuZWwgd2lsbCB3YWtlIHBkZmx1c2ggd2hpY2ggd2lsbCB0aGVuIHJlZHVjZSB0aGUgYW1vdW50CisjIG9mIGRpcnR5IG1lbW9yeSB0byBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvLiAgU2V0IHRoaXMgbmljZSBhbmQgbG93LCBzbyBvbmNlCisjIHNvbWUgd3JpdGVvdXQgaGFzIGNvbW1lbmNlZCwgd2UgZG8gYSBsb3Qgb2YgaXQuCisjCisjRElSVFlfQkFDS0dST1VORF9SQVRJTz01CisKKyMga2VybmVsIGRlZmF1bHQgZGlydHkgYnVmZmVyIGFnZQorI0RFRl9BR0U9MzAKKyNERUZfVVBEQVRFPTUKKyNERUZfRElSVFlfQkFDS0dST1VORF9SQVRJTz0xMAorI0RFRl9ESVJUWV9SQVRJTz00MAorI0RFRl9YRlNfQUdFX0JVRkZFUj0xNQorI0RFRl9YRlNfU1lOQ19JTlRFUlZBTD0zMAorI0RFRl9YRlNfQlVGRF9JTlRFUlZBTD0xCisKKyMgVGhpcyBtdXN0IGJlIGFkanVzdGVkIG1hbnVhbGx5IHRvIHRoZSB2YWx1ZSBvZiBIWiBpbiB0aGUgcnVubmluZyBrZXJuZWwKKyMgb24gMi40LCB1bnRpbCB0aGUgWEZTIHBlb3BsZSBjaGFuZ2UgdGhlaXIgMi40IGV4dGVybmFsIGludGVyZmFjZXMgdG8gd29yayBpbgorIyBjZW50aXNlY3MuIFRoaXMgY2FuIGJlIGF1dG9tYXRlZCwgYnV0IGl0J3MgYSB3b3JrIGluIHByb2dyZXNzIHRoYXQgc3RpbGwKKyMgbmVlZHMjIHNvbWUgZml4ZXMuIE9uIDIuNiBrZXJuZWxzLCBYRlMgdXNlcyBVU0VSX0haIGluc3RlYWQgb2YgSFogZm9yCisjIGV4dGVybmFsIGludGVyZmFjZXMsIGFuZCB0aGF0IGlzIGN1cnJlbnRseSBhbHdheXMgc2V0IHRvIDEwMC4gU28geW91IGRvbid0CisjIG5lZWQgdG8gY2hhbmdlIHRoaXMgb24gMi42LgorI1hGU19IWj0xMDAKKworIyBTaG91bGQgdGhlIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSBiZSBhZGp1c3RlZCBkb3duIHdoaWxlIG9uIGJhdHRlcnk/CisjIFJlcXVpcmVzIENQVUZyZXEgdG8gYmUgc2V0dXAuCisjIFNlZSBEb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0IGZvciBtb3JlIGluZm8KKyNET19DUFU9MAorCisjIFdoZW4gb24gYmF0dGVyeSB3aGF0IGlzIHRoZSBtYXhpbXVtIENQVSBzcGVlZCB0aGF0IHRoZSBzeXN0ZW0gc2hvdWxkCisjIHVzZT8gTGVnYWwgdmFsdWVzIGFyZSAic2xvd2VzdCIgZm9yIHRoZSBzbG93ZXN0IHNwZWVkIHRoYXQgeW91cgorIyBDUFUgaXMgYWJsZSB0byBvcGVyYXRlIGF0LCBvciBhIHZhbHVlIGxpc3RlZCBpbjoKKyMgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisjIE9ubHkgYXBwbGljYWJsZSBpZiBET19DUFU9MS4KKyNDUFVfTUFYRlJFUT1zbG93ZXN0CisKKyMgSWRsZSB0aW1lb3V0IGZvciB5b3VyIGhhcmQgZHJpdmUgKG1hbiBoZHBhcm0gZm9yIHZhbGlkIHZhbHVlcywgLVMgb3B0aW9uKQorIyBEZWZhdWx0IGlzIDIgaG91cnMgb24gQUMgKEFDX0hEPTI0NCkgYW5kIDIwIHNlY29uZHMgZm9yIGJhdHRlcnkgKEJBVFRfSEQ9NCkuCisjQUNfSEQ9MjQ0CisjQkFUVF9IRD00CisKKyMgVGhlIGRyaXZlcyBmb3Igd2hpY2ggdG8gYWRqdXN0IHRoZSBpZGxlIHRpbWVvdXQuIFNlcGFyYXRlIHRoZW0gYnkgYSBzcGFjZSwKKyMgZS5nLiBIRD0iL2Rldi9oZGEgL2Rldi9oZGIiLgorI0hEPSIvZGV2L2hkYSIKKworIyBTZXQgdGhlIHNwaW5kb3duIHRpbWVvdXQgb24gYSBoYXJkIGRyaXZlPworI0RPX0hEPTEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS1DT05GSUcgRklMRSBFTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitDb250cm9sIHNjcmlwdAorLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNvbnRyb2wgc2NyaXB0IHdvcmtzIGZvciB0aGUgTGludXggMi40IGFuZCAyLjYgc2VyaWVzICh0aGFua3MKK3RvIEtpa28gUGlyaXMpLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLUNPTlRST0wgU0NSSVBUIEJFR0lOLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL2Jhc2gKKworIyBzdGFydCBvciBzdG9wIGxhcHRvcF9tb2RlLCBiZXN0IHJ1biBieSBhIHBvd2VyIG1hbmFnZW1lbnQgZGFlbW9uIHdoZW4KKyMgYWMgZ2V0cyBjb25uZWN0ZWQvZGlzY29ubmVjdGVkIGZyb20gYSBsYXB0b3AKKyMKKyMgaW5zdGFsbCBhcyAvc2Jpbi9sYXB0b3BfbW9kZQorIworIyBDb250cmlidXRvcnMgdG8gdGhpcyBzY3JpcHQ6ICAgS2lrbyBQaXJpcworIwkJCQkgQmFydCBTYW13ZWwKKyMJCQkJIE1pY2hhIEZlaWdpbgorIwkJCQkgQW5kcmV3IE1vcnRvbgorIwkJCQkgSGVydmUgRXljaGVubmUKKyMJCQkJIERheCBLZWxzb24KKyMKKyMgT3JpZ2luYWwgTGludXggMi40IHZlcnNpb24gYnk6IEplbnMgQXhib2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBTb3VyY2UgY29uZmlnCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9sYXB0b3AtbW9kZSBdIDsgdGhlbgorCSMgRGViaWFuCisJLiAvZXRjL2RlZmF1bHQvbGFwdG9wLW1vZGUKK2VsaWYgWyAtZiAvZXRjL3N5c2NvbmZpZy9sYXB0b3AtbW9kZSBdIDsgdGhlbgorCSMgT3RoZXJzCisgICAgICAgIC4gL2V0Yy9zeXNjb25maWcvbGFwdG9wLW1vZGUKK2ZpCisKKyMgRG9uJ3QgcmFpc2UgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBmaWxlIGlzIGluY29tcGxldGUKKyMgc2V0IGRlZmF1bHRzIGluc3RlYWQ6CisKKyMgTWF4aW11bSB0aW1lLCBpbiBzZWNvbmRzLCBvZiBoYXJkIGRyaXZlIHNwaW5kb3duIHRpbWUgdGhhdCB5b3UgYXJlCisjIGNvbmZvcnRhYmxlIHdpdGguIFdvcnN0IGNhc2UsIGl0J3MgcG9zc2libGUgdGhhdCB5b3UgY291bGQgbG9zZSB0aGlzCisjIGFtb3VudCBvZiB3b3JrIGlmIHlvdXIgYmF0dGVyeSBmYWlscyB5b3Ugd2hpbGUgaW4gbGFwdG9wIG1vZGUuCitNQVhfQUdFPSR7TUFYX0FHRTotJzYwMCd9CisKKyMgUmVhZC1haGVhZCwgaW4ga2lsb2J5dGVzCitSRUFEQUhFQUQ9JHtSRUFEQUhFQUQ6LSc0MDk2J30KKworIyBTaGFsbCB3ZSByZW1vdW50IGpvdXJuYWxlZCBmcy4gd2l0aCBhcHByb3BpYXRlIGNvbW1pdCBpbnRlcnZhbD8gKDE9eWVzKQorRE9fUkVNT1VOVFM9JHtET19SRU1PVU5UUzotJzEnfQorCisjIEFuZCBzaGFsbCB3ZSBhZGQgdGhlICJub2F0aW1lIiBvcHRpb24gdG8gdGhhdCBhcyB3ZWxsPyAoMT15ZXMpCitET19SRU1PVU5UX05PQVRJTUU9JHtET19SRU1PVU5UX05PQVRJTUU6LScxJ30KKworIyBTaGFsbCB3ZSBhZGp1c3QgdGhlIGlkbGUgdGltZW91dCBvbiBhIGhhcmQgZHJpdmU/CitET19IRD0ke0RPX0hEOi0nMSd9CisKKyMgQWRqdXN0IGlkbGUgdGltZW91dCBvbiB3aGljaCBoYXJkIGRyaXZlPworSEQ9IiR7SEQ6LScvZGV2L2hkYSd9IgorCisjIHNwaW5kb3duIHRpbWUgZm9yIEhEIChoZHBhcm0gLVMgdmFsdWVzKQorQUNfSEQ9JHtBQ19IRDotJzI0NCd9CitCQVRUX0hEPSR7QkFUVF9IRDotJzQnfQorCisjIERpcnR5IHN5bmNocm9ub3VzIHJhdGlvLiAgQXQgdGhpcyBwZXJjZW50YWdlIG9mIGRpcnR5IHBhZ2VzIHRoZSBwcm9jZXNzIHdoaWNoCisjIGNhbGxzIHdyaXRlKCkgZG9lcyBpdHMgb3duIHdyaXRlYmFjaworRElSVFlfUkFUSU89JHtESVJUWV9SQVRJTzotJzQwJ30KKworIyBjcHUgZnJlcXVlbmN5IHNjYWxpbmcKKyMgU2VlIERvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQgZm9yIG1vcmUgaW5mbworRE9fQ1BVPSR7Q1BVX01BTkFHRTotJzAnfQorQ1BVX01BWEZSRVE9JHtDUFVfTUFYRlJFUTotJ3Nsb3dlc3QnfQorCisjCisjIEFsbG93ZWQgZGlydHkgYmFja2dyb3VuZCByYXRpbywgaW4gcGVyY2VudC4gIE9uY2UgRElSVFlfUkFUSU8gaGFzIGJlZW4KKyMgZXhjZWVkZWQsIHRoZSBrZXJuZWwgd2lsbCB3YWtlIHBkZmx1c2ggd2hpY2ggd2lsbCB0aGVuIHJlZHVjZSB0aGUgYW1vdW50CisjIG9mIGRpcnR5IG1lbW9yeSB0byBkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvLiAgU2V0IHRoaXMgbmljZSBhbmQgbG93LCBzbyBvbmNlCisjIHNvbWUgd3JpdGVvdXQgaGFzIGNvbW1lbmNlZCwgd2UgZG8gYSBsb3Qgb2YgaXQuCisjCitESVJUWV9CQUNLR1JPVU5EX1JBVElPPSR7RElSVFlfQkFDS0dST1VORF9SQVRJTzotJzUnfQorCisjIGtlcm5lbCBkZWZhdWx0IGRpcnR5IGJ1ZmZlciBhZ2UKK0RFRl9BR0U9JHtERUZfQUdFOi0nMzAnfQorREVGX1VQREFURT0ke0RFRl9VUERBVEU6LSc1J30KK0RFRl9ESVJUWV9CQUNLR1JPVU5EX1JBVElPPSR7REVGX0RJUlRZX0JBQ0tHUk9VTkRfUkFUSU86LScxMCd9CitERUZfRElSVFlfUkFUSU89JHtERUZfRElSVFlfUkFUSU86LSc0MCd9CitERUZfWEZTX0FHRV9CVUZGRVI9JHtERUZfWEZTX0FHRV9CVUZGRVI6LScxNSd9CitERUZfWEZTX1NZTkNfSU5URVJWQUw9JHtERUZfWEZTX1NZTkNfSU5URVJWQUw6LSczMCd9CitERUZfWEZTX0JVRkRfSU5URVJWQUw9JHtERUZfWEZTX0JVRkRfSU5URVJWQUw6LScxJ30KKworIyBUaGlzIG11c3QgYmUgYWRqdXN0ZWQgbWFudWFsbHkgdG8gdGhlIHZhbHVlIG9mIEhaIGluIHRoZSBydW5uaW5nIGtlcm5lbAorIyBvbiAyLjQsIHVudGlsIHRoZSBYRlMgcGVvcGxlIGNoYW5nZSB0aGVpciAyLjQgZXh0ZXJuYWwgaW50ZXJmYWNlcyB0byB3b3JrIGluCisjIGNlbnRpc2Vjcy4gVGhpcyBjYW4gYmUgYXV0b21hdGVkLCBidXQgaXQncyBhIHdvcmsgaW4gcHJvZ3Jlc3MgdGhhdCBzdGlsbCBuZWVkcworIyBzb21lIGZpeGVzLiBPbiAyLjYga2VybmVscywgWEZTIHVzZXMgVVNFUl9IWiBpbnN0ZWFkIG9mIEhaIGZvciBleHRlcm5hbAorIyBpbnRlcmZhY2VzLCBhbmQgdGhhdCBpcyBjdXJyZW50bHkgYWx3YXlzIHNldCB0byAxMDAuIFNvIHlvdSBkb24ndCBuZWVkIHRvCisjIGNoYW5nZSB0aGlzIG9uIDIuNi4KK1hGU19IWj0ke1hGU19IWjotJzEwMCd9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0tMRVZFTD0iJCh1bmFtZSAtciB8CisgICAgICAgICAgICAgeworCSAgICAgICBJRlM9Jy4nIHJlYWQgYSBiIGMKKwkgICAgICAgZWNobyAkYS4kYgorCSAgICAgfQorKSIKK2Nhc2UgIiRLTEVWRUwiIGluCisJIjIuNCJ8IjIuNiIpCisJCTs7CisJKikKKwkJZWNobyAiVW5oYW5kbGVkIGtlcm5lbCB2ZXJzaW9uOiAkS0xFVkVMICgndW5hbWUgLXInID0gJyQodW5hbWUgLXIpJykiID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworaWYgWyAhIC1lIC9wcm9jL3N5cy92bS9sYXB0b3BfbW9kZSBdIDsgdGhlbgorCWVjaG8gIktlcm5lbCBpcyBub3QgcGF0Y2hlZCB3aXRoIGxhcHRvcF9tb2RlIHBhdGNoLiIgPiYyCisJZXhpdCAxCitmaQorCitpZiBbICEgLXcgL3Byb2Mvc3lzL3ZtL2xhcHRvcF9tb2RlIF0gOyB0aGVuCisJZWNobyAiWW91IGRvIG5vdCBoYXZlIGVub3VnaCBwcml2aWxlZ2VzIHRvIGVuYWJsZSBsYXB0b3BfbW9kZS4iID4mMgorCWV4aXQgMQorZmkKKworIyBSZW1vdmUgYW4gb3B0aW9uICh0aGUgZmlyc3QgcGFyYW1ldGVyKSBvZiB0aGUgZm9ybSBvcHRpb249PG51bWJlcj4gZnJvbQorIyBhIG1vdW50IG9wdGlvbnMgc3RyaW5nICh0aGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycykuCitwYXJzZV9tb3VudF9vcHRzICgpIHsKKwlPUFQ9IiQxIgorCXNoaWZ0CisJZWNobyAiLCQqLCIgfCBzZWQJCVwKKwkgLWUgJ3MvLCciJE9QVCInPVswLTldKiwvLC9nJwlcCisJIC1lICdzLywsKi8sL2cnCQkJXAorCSAtZSAncy9eLC8vJwkJCVwKKwkgLWUgJ3MvLCQvLycKK30KKworIyBSZW1vdmUgYW4gb3B0aW9uICh0aGUgZmlyc3QgcGFyYW1ldGVyKSB3aXRob3V0IGFueSBhcmd1bWVudHMgZnJvbQorIyBhIG1vdW50IG9wdGlvbiBzdHJpbmcgKHRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzKS4KK3BhcnNlX25vbnVtYmVyX21vdW50X29wdHMgKCkgeworCU9QVD0iJDEiCisJc2hpZnQKKwllY2hvICIsJCosIiB8IHNlZAkJXAorCSAtZSAncy8sJyIkT1BUIicsLywvZycJCVwKKwkgLWUgJ3MvLCwqLywvZycJCQlcCisJIC1lICdzL14sLy8nCQkJXAorCSAtZSAncy8sJC8vJworfQorCisjIEZpbmQgb3V0IHRoZSBzdGF0ZSBvZiBhIHllcy9ubyBvcHRpb24gKGUuZy4gImF0aW1lIi8ibm9hdGltZSIpIGluCisjIGZzdGFiIGZvciBhIGdpdmVuIGZpbGVzeXN0ZW0sIGFuZCB1c2UgdGhpcyBzdGF0ZSB0byByZXBsYWNlIHRoZQorIyB2YWx1ZSBvZiB0aGUgb3B0aW9uIGluIGFub3RoZXIgbW91bnQgb3B0aW9ucyBzdHJpbmcuIFRoZSBkZXZpY2UKKyMgaXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUgb3B0aW9uIG5hbWUgdGhlIHNlY29uZCwgYW5kIHRoZSBkZWZhdWx0CisjIHZhbHVlIHRoZSB0aGlyZC4gVGhlIHJlbWFpbmRlciBpcyB0aGUgbW91bnQgb3B0aW9ucyBzdHJpbmcuCisjCisjIEV4YW1wbGU6CisjIHBhcnNlX3llc25vX29wdHNfd2ZzdGFiIC9kZXYvaGRhMSBhdGltZSBhdGltZSBkZWZhdWx0cyxub2F0aW1lCisjCisjIElmIGZzdGFiIGNvbnRhaW5zLCBzYXksICJydyIgZm9yIHRoaXMgZmlsZXN5c3RlbSwgdGhlbiB0aGUgcmVzdWx0CisjIHdpbGwgYmUgImRlZmF1bHRzLGF0aW1lIi4KK3BhcnNlX3llc25vX29wdHNfd2ZzdGFiICgpIHsKKwlMX0RFVj0iJDEiCisJT1BUPSIkMiIKKwlERUZfT1BUPSIkMyIKKwlzaGlmdCAzCisJTF9PUFRTPSIkKiIKKwlQQVJTRURPUFRTMT0iJChwYXJzZV9ub251bWJlcl9tb3VudF9vcHRzICRPUFQgJExfT1BUUykiCisJUEFSU0VET1BUUzE9IiQocGFyc2Vfbm9udW1iZXJfbW91bnRfb3B0cyBubyRPUFQgJFBBUlNFRE9QVFMxKSIKKwkjIFdhdGNoIGZvciBhIGRlZmF1bHQgYXRpbWUgaW4gZnN0YWIKKwlGU1RBQl9PUFRTPSIkKGF3ayAnJDEgPT0gIickTF9ERVYnIiB7IHByaW50ICQ0IH0nIC9ldGMvZnN0YWIpIgorCWlmIGVjaG8gIiRGU1RBQl9PUFRTIiB8IGdyZXAgIiRPUFQiID4gL2Rldi9udWxsIDsgdGhlbgorCQkjIG9wdGlvbiBzcGVjaWZpZWQgaW4gZnN0YWI6IGV4dHJhY3QgdGhlIHZhbHVlIGFuZCB1c2UgaXQKKwkJaWYgZWNobyAiJEZTVEFCX09QVFMiIHwgZ3JlcCAibm8kT1BUIiA+IC9kZXYvbnVsbCA7IHRoZW4KKwkJCWVjaG8gIiRQQVJTRURPUFRTMSxubyRPUFQiCisJCWVsc2UKKwkJCSMgbm8kT1BUIG5vdCBmb3VuZCAtLSBzbyB3ZSBtdXN0IGhhdmUgJE9QVC4KKwkJCWVjaG8gIiRQQVJTRURPUFRTMSwkT1BUIgorCQlmaQorCWVsc2UKKwkJIyBvcHRpb24gbm90IHNwZWNpZmllZCBpbiBmc3RhYiAtLSBjaG9vc2UgdGhlIGRlZmF1bHQuCisJCWVjaG8gIiRQQVJTRURPUFRTMSwkREVGX09QVCIKKwlmaQorfQorCisjIEZpbmQgb3V0IHRoZSBzdGF0ZSBvZiBhIG51bWJlcmVkIG9wdGlvbiAoZS5nLiAiY29tbWl0PU5OTiIpIGluCisjIGZzdGFiIGZvciBhIGdpdmVuIGZpbGVzeXN0ZW0sIGFuZCB1c2UgdGhpcyBzdGF0ZSB0byByZXBsYWNlIHRoZQorIyB2YWx1ZSBvZiB0aGUgb3B0aW9uIGluIGFub3RoZXIgbW91bnQgb3B0aW9ucyBzdHJpbmcuIFRoZSBkZXZpY2UKKyMgaXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBhbmQgdGhlIG9wdGlvbiBuYW1lIHRoZSBzZWNvbmQuIFRoZQorIyByZW1haW5kZXIgaXMgdGhlIG1vdW50IG9wdGlvbnMgc3RyaW5nIGluIHdoaWNoIHRoZSByZXBsYWNlbWVudAorIyBtdXN0IGJlIGRvbmUuCisjCisjIEV4YW1wbGU6CisjIHBhcnNlX21vdW50X29wdHNfd2ZzdGFiIC9kZXYvaGRhMSBjb21taXQgZGVmYXVsdHMsY29tbWl0PTcKKyMKKyMgSWYgZnN0YWIgY29udGFpbnMsIHNheSwgImNvbW1pdD0zLHJ3IiBmb3IgdGhpcyBmaWxlc3lzdGVtLCB0aGVuIHRoZQorIyByZXN1bHQgd2lsbCBiZSAicncsY29tbWl0PTMiLgorcGFyc2VfbW91bnRfb3B0c193ZnN0YWIgKCkgeworCUxfREVWPSIkMSIKKwlPUFQ9IiQyIgorCXNoaWZ0IDIKKwlMX09QVFM9IiQqIgorCVBBUlNFRE9QVFMxPSIkKHBhcnNlX21vdW50X29wdHMgJE9QVCAkTF9PUFRTKSIKKwkjIFdhdGNoIGZvciBhIGRlZmF1bHQgY29tbWl0IGluIGZzdGFiCisJRlNUQUJfT1BUUz0iJChhd2sgJyQxID09ICInJExfREVWJyIgeyBwcmludCAkNCB9JyAvZXRjL2ZzdGFiKSIKKwlpZiBlY2hvICIkRlNUQUJfT1BUUyIgfCBncmVwICIkT1BUPSIgPiAvZGV2L251bGwgOyB0aGVuCisJCSMgb3B0aW9uIHNwZWNpZmllZCBpbiBmc3RhYjogZXh0cmFjdCB0aGUgdmFsdWUsIGFuZCB1c2UgaXQKKwkJZWNobyAtbiAiJFBBUlNFRE9QVFMxLCRPUFQ9IgorCQllY2hvICIsJEZTVEFCX09QVFMsIiB8IHNlZCBcCisJCSAtZSAncy8uKiwnIiRPUFQiJz0vLycJXAorCQkgLWUgJ3MvLC4qLy8nCisJZWxzZQorCQkjIG9wdGlvbiBub3Qgc3BlY2lmaWVkIGluIGZzdGFiOiBzZXQgaXQgdG8gMAorCQllY2hvICIkUEFSU0VET1BUUzEsJE9QVD0wIgorCWZpCit9CisKK2RlZHVjZV9mc3R5cGUgKCkgeworCU1QPSIkMSIKKwkjIE15IHJvb3QgZmlsZXN5c3RlbSB1bmZvcnR1bmF0ZWx5IGhhcworCSMgdHlwZSAidW5rbm93biIgaW4gL2V0Yy9tdGFiLiBJZiB3ZSBlbmNvdW50ZXIKKwkjICJ1bmtub3duIiwgd2UgdHJ5IHRvIGdldCB0aGUgdHlwZSBmcm9tIGZzdGFiLgorCWNhdCAvZXRjL2ZzdGFiIHwKKwlncmVwIC12ICdeIycgfAorCXdoaWxlIHJlYWQgRlNUQUJfREVWIEZTVEFCX01QIEZTVEFCX0ZTVCBGU1RBQl9PUFRTIEZTVEFCX0RVTVAgRlNUQUJfRFVNUCA7IGRvCisJCWlmIFsgIiRGU1RBQl9NUCIgPSAiJE1QIiBdOyB0aGVuCisJCQllY2hvICRGU1RBQl9GU1QKKwkJCWV4aXQgMAorCQlmaQorCWRvbmUKK30KKworaWYgWyAkRE9fUkVNT1VOVF9OT0FUSU1FIC1lcSAxIF0gOyB0aGVuCisJTk9BVElNRV9PUFQ9Iixub2F0aW1lIgorZmkKKworY2FzZSAiJDEiIGluCisJc3RhcnQpCisJCUFHRT0kKCgxMDAqJE1BWF9BR0UpKQorCQlYRlNfQUdFPSQoKCRYRlNfSFoqJE1BWF9BR0UpKQorCQllY2hvIC1uICJTdGFydGluZyBsYXB0b3BfbW9kZSIKKworCQlpZiBbIC1kIC9wcm9jL3N5cy92bS9wYWdlYnVmIF0gOyB0aGVuCisJCQkjIChGb3IgMi40IGFuZCBlYXJseSAyLjYuKQorCQkJIyBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgc2V0LCBub3QgcmVzZXQgLS0gaXQgaXMgb25seSB1c2VkIHdoZW4KKwkJCSMgbGFwdG9wIG1vZGUgaXMgZW5hYmxlZC4KKwkJCWVjaG8gJFhGU19BR0UgPiAvcHJvYy9zeXMvdm0vcGFnZWJ1Zi9sbV9mbHVzaF9hZ2UKKwkJCWVjaG8gJFhGU19BR0UgPiAvcHJvYy9zeXMvZnMveGZzL2xtX3N5bmNfaW50ZXJ2YWwKKwkJZWxpZiBbIC1mIC9wcm9jL3N5cy9mcy94ZnMvbG1fYWdlX2J1ZmZlciBdIDsgdGhlbgorCQkJIyAoQSBjb3VwbGUgb2YgZWFybHkgMi42IGxhcHRvcCBtb2RlIHBhdGNoZXMgaGFkIHRoZXNlLikKKwkJCSMgVGhlIHNhbWUgZ29lcyBmb3IgdGhlc2UuCisJCQllY2hvICRYRlNfQUdFID4gL3Byb2Mvc3lzL2ZzL3hmcy9sbV9hZ2VfYnVmZmVyCisJCQllY2hvICRYRlNfQUdFID4gL3Byb2Mvc3lzL2ZzL3hmcy9sbV9zeW5jX2ludGVydmFsCisJCWVsaWYgWyAtZiAvcHJvYy9zeXMvZnMveGZzL2FnZV9idWZmZXIgXSA7IHRoZW4KKwkJCSMgKDIuNi42KQorCQkJIyBCdXQgbm90IGZvciB0aGVzZSAtLSB0aGV5IGFyZSBhbHNvIHVzZWQgaW4gbm9ybWFsCisJCQkjIG9wZXJhdGlvbi4KKwkJCWVjaG8gJFhGU19BR0UgPiAvcHJvYy9zeXMvZnMveGZzL2FnZV9idWZmZXIKKwkJCWVjaG8gJFhGU19BR0UgPiAvcHJvYy9zeXMvZnMveGZzL3N5bmNfaW50ZXJ2YWwKKwkJZWxpZiBbIC1mIC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlcl9jZW50aXNlY3MgXSA7IHRoZW4KKwkJCSMgKDIuNi43IHVwd2FyZHMpCisJCQkjIEFuZCBub3QgZm9yIHRoZXNlIGVpdGhlci4gVGhlc2UgYXJlIGluIGNlbnRpc2VjcywKKwkJCSMgbm90IFVTRVJfSFosIHNvIHdlIGhhdmUgdG8gdXNlICRBR0UsIG5vdCAkWEZTX0FHRS4KKwkJCWVjaG8gJEFHRSA+IC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlcl9jZW50aXNlY3MKKwkJCWVjaG8gJEFHRSA+IC9wcm9jL3N5cy9mcy94ZnMveGZzc3luY2RfY2VudGlzZWNzCisJCQllY2hvIDMwMDAgPiAvcHJvYy9zeXMvZnMveGZzL3hmc2J1ZmRfY2VudGlzZWNzCisJCWZpCisKKwkJY2FzZSAiJEtMRVZFTCIgaW4KKwkJCSIyLjQiKQorCQkJCWVjaG8gMQkJCQkJPiAvcHJvYy9zeXMvdm0vbGFwdG9wX21vZGUKKwkJCQllY2hvICIzMCA1MDAgMCAwICRBR0UgJEFHRSA2MCAyMCAwIgk+IC9wcm9jL3N5cy92bS9iZGZsdXNoCisJCQkJOzsKKwkJCSIyLjYiKQorCQkJCWVjaG8gNQkJCQkJPiAvcHJvYy9zeXMvdm0vbGFwdG9wX21vZGUKKwkJCQllY2hvICIkQUdFIgkJCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCisJCQkJZWNobyAiJEFHRSIJCQkJPiAvcHJvYy9zeXMvdm0vZGlydHlfZXhwaXJlX2NlbnRpc2VjcworCQkJCWVjaG8gIiRESVJUWV9SQVRJTyIJCQk+IC9wcm9jL3N5cy92bS9kaXJ0eV9yYXRpbworCQkJCWVjaG8gIiRESVJUWV9CQUNLR1JPVU5EX1JBVElPIgkJPiAvcHJvYy9zeXMvdm0vZGlydHlfYmFja2dyb3VuZF9yYXRpbworCQkJCTs7CisJCWVzYWMKKwkJaWYgWyAkRE9fUkVNT1VOVFMgLWVxIDEgXTsgdGhlbgorCQkJY2F0IC9ldGMvbXRhYiB8IHdoaWxlIHJlYWQgREVWIE1QIEZTVCBPUFRTIERVTVAgUEFTUyA7IGRvCisJCQkJUEFSU0VET1BUUz0iJChwYXJzZV9tb3VudF9vcHRzICIkT1BUUyIpIgorCQkJCWlmIFsgIiRGU1QiID0gJ3Vua25vd24nIF07IHRoZW4KKwkJCQkJRlNUPSQoZGVkdWNlX2ZzdHlwZSAkTVApCisJCQkJZmkKKwkJCQljYXNlICIkRlNUIiBpbgorCQkJCQkiZXh0MyJ8InJlaXNlcmZzIikKKwkJCQkJCVBBUlNFRE9QVFM9IiQocGFyc2VfbW91bnRfb3B0cyBjb21taXQgIiRPUFRTIikiCisJCQkJCQltb3VudCAkREVWIC10ICRGU1QgJE1QIC1vIHJlbW91bnQsJFBBUlNFRE9QVFMsY29tbWl0PSRNQVhfQUdFJE5PQVRJTUVfT1BUCisJCQkJCQk7OworCQkJCQkieGZzIikKKwkJCQkJCW1vdW50ICRERVYgLXQgJEZTVCAkTVAgLW8gcmVtb3VudCwkT1BUUyROT0FUSU1FX09QVAorCQkJCQkJOzsKKwkJCQllc2FjCisJCQkJaWYgWyAtYiAkREVWIF0gOyB0aGVuCisJCQkJCWJsb2NrZGV2IC0tc2V0cmEgJCgoJFJFQURBSEVBRCAqIDIpKSAkREVWCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwkJaWYgWyAkRE9fSEQgLWVxIDEgXSA7IHRoZW4KKwkJCWZvciBUSElTSEQgaW4gJEhEIDsgZG8KKwkJCQkvc2Jpbi9oZHBhcm0gLVMgJEJBVFRfSEQgJFRISVNIRCA+IC9kZXYvbnVsbCAyPiYxCisJCQkJL3NiaW4vaGRwYXJtIC1CIDEgJFRISVNIRCA+IC9kZXYvbnVsbCAyPiYxCisJCQlkb25lCisJCWZpCisJCWlmIFsgJERPX0NQVSAtZXEgMSAtYSAtZSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvY3B1aW5mb19taW5fZnJlcSBdOyB0aGVuCisJCQlpZiBbICRDUFVfTUFYRlJFUSA9ICdzbG93ZXN0JyBdOyB0aGVuCisJCQkJQ1BVX01BWEZSRVE9YGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvY3B1aW5mb19taW5fZnJlcWAKKwkJCWZpCisJCQllY2hvICRDUFVfTUFYRlJFUSA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX21heF9mcmVxCisJCWZpCisJCWVjaG8gIi4iCisJCTs7CisJc3RvcCkKKwkJVV9BR0U9JCgoMTAwKiRERUZfVVBEQVRFKSkKKwkJQl9BR0U9JCgoMTAwKiRERUZfQUdFKSkKKwkJZWNobyAtbiAiU3RvcHBpbmcgbGFwdG9wX21vZGUiCisJCWVjaG8gMCA+IC9wcm9jL3N5cy92bS9sYXB0b3BfbW9kZQorCQlpZiBbIC1mIC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlciAtYSAhIC1mIC9wcm9jL3N5cy9mcy94ZnMvbG1fYWdlX2J1ZmZlciBdIDsgdGhlbgorCQkJIyBUaGVzZSBuZWVkIHRvIGJlIHJlc3RvcmVkLCBpZiB0aGVyZSBhcmUgbm8gbG1fKi4KKwkJCWVjaG8gJCgoJFhGU19IWiokREVGX1hGU19BR0VfQlVGRkVSKSkJIAk+IC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlcgorCQkJZWNobyAkKCgkWEZTX0haKiRERUZfWEZTX1NZTkNfSU5URVJWQUwpKSAJPiAvcHJvYy9zeXMvZnMveGZzL3N5bmNfaW50ZXJ2YWwKKwkJZWxpZiBbIC1mIC9wcm9jL3N5cy9mcy94ZnMvYWdlX2J1ZmZlcl9jZW50aXNlY3MgXSA7IHRoZW4KKwkJCSMgVGhlc2UgbmVlZCB0byBiZSByZXN0b3JlZCBhcyB3ZWxsLgorCQkJZWNobyAkKCgxMDAqJERFRl9YRlNfQUdFX0JVRkZFUikpCT4gL3Byb2Mvc3lzL2ZzL3hmcy9hZ2VfYnVmZmVyX2NlbnRpc2VjcworCQkJZWNobyAkKCgxMDAqJERFRl9YRlNfU1lOQ19JTlRFUlZBTCkpCT4gL3Byb2Mvc3lzL2ZzL3hmcy94ZnNzeW5jZF9jZW50aXNlY3MKKwkJCWVjaG8gJCgoMTAwKiRERUZfWEZTX0JVRkRfSU5URVJWQUwpKQk+IC9wcm9jL3N5cy9mcy94ZnMveGZzYnVmZF9jZW50aXNlY3MKKwkJZmkKKwkJY2FzZSAiJEtMRVZFTCIgaW4KKwkJCSIyLjQiKQorCQkJCWVjaG8gIjMwIDUwMCAwIDAgJFVfQUdFICRCX0FHRSA2MCAyMCAwIgk+IC9wcm9jL3N5cy92bS9iZGZsdXNoCisJCQkJOzsKKwkJCSIyLjYiKQorCQkJCWVjaG8gIiRVX0FHRSIJCQkJPiAvcHJvYy9zeXMvdm0vZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcworCQkJCWVjaG8gIiRCX0FHRSIJCQkJPiAvcHJvYy9zeXMvdm0vZGlydHlfZXhwaXJlX2NlbnRpc2VjcworCQkJCWVjaG8gIiRERUZfRElSVFlfUkFUSU8iCQkJPiAvcHJvYy9zeXMvdm0vZGlydHlfcmF0aW8KKwkJCQllY2hvICIkREVGX0RJUlRZX0JBQ0tHUk9VTkRfUkFUSU8iCT4gL3Byb2Mvc3lzL3ZtL2RpcnR5X2JhY2tncm91bmRfcmF0aW8KKwkJCQk7OworCQllc2FjCisJCWlmIFsgJERPX1JFTU9VTlRTIC1lcSAxIF0gOyB0aGVuCisJCQljYXQgL2V0Yy9tdGFiIHwgd2hpbGUgcmVhZCBERVYgTVAgRlNUIE9QVFMgRFVNUCBQQVNTIDsgZG8KKwkJCQkjIFJlc2V0IGNvbW1pdCBhbmQgYXRpbWUgb3B0aW9ucyB0byBkZWZhdWx0cy4KKwkJCQlpZiBbICIkRlNUIiA9ICd1bmtub3duJyBdOyB0aGVuCisJCQkJCUZTVD0kKGRlZHVjZV9mc3R5cGUgJE1QKQorCQkJCWZpCisJCQkJY2FzZSAiJEZTVCIgaW4KKwkJCQkJImV4dDMifCJyZWlzZXJmcyIpCisJCQkJCQlQQVJTRURPUFRTPSIkKHBhcnNlX21vdW50X29wdHNfd2ZzdGFiICRERVYgY29tbWl0ICRPUFRTKSIKKwkJCQkJCVBBUlNFRE9QVFM9IiQocGFyc2VfeWVzbm9fb3B0c193ZnN0YWIgJERFViBhdGltZSBhdGltZSAkUEFSU0VET1BUUykiCisJCQkJCQltb3VudCAkREVWIC10ICRGU1QgJE1QIC1vIHJlbW91bnQsJFBBUlNFRE9QVFMKKwkJCQkJCTs7CisJCQkJCSJ4ZnMiKQorCQkJCQkJUEFSU0VET1BUUz0iJChwYXJzZV95ZXNub19vcHRzX3dmc3RhYiAkREVWIGF0aW1lIGF0aW1lICRPUFRTKSIKKwkJCQkJCW1vdW50ICRERVYgLXQgJEZTVCAkTVAgLW8gcmVtb3VudCwkUEFSU0VET1BUUworCQkJCQkJOzsKKwkJCQllc2FjCisJCQkJaWYgWyAtYiAkREVWIF0gOyB0aGVuCisJCQkJCWJsb2NrZGV2IC0tc2V0cmEgMjU2ICRERVYKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCQlpZiBbICRET19IRCAtZXEgMSBdIDsgdGhlbgorCQkJZm9yIFRISVNIRCBpbiAkSEQgOyBkbworCQkJCS9zYmluL2hkcGFybSAtUyAkQUNfSEQgJFRISVNIRCA+IC9kZXYvbnVsbCAyPiYxCisJCQkJL3NiaW4vaGRwYXJtIC1CIDI1NSAkVEhJU0hEID4gL2Rldi9udWxsIDI+JjEKKwkJCWRvbmUKKwkJZmkKKwkJaWYgWyAkRE9fQ1BVIC1lcSAxIC1hIC1lIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9jcHVpbmZvX21pbl9mcmVxIF07IHRoZW4KKwkJCWVjaG8gYGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvY3B1aW5mb19tYXhfZnJlcWAgPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19tYXhfZnJlcQorCQlmaQorCQllY2hvICIuIgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcH0iIDI+JjEKKwkJZXhpdCAxCisJCTs7CisKK2VzYWMKKworZXhpdCAwCistLS0tLS0tLS0tLS0tLS0tLS0tLUNPTlRST0wgU0NSSVBUIEVORC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0FDUEkgaW50ZWdyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KKworRGF4IEtlbHNvbiBzdWJtaXR0ZWQgdGhpcyBzbyB0aGF0IHRoZSBBQ1BJIGFjcGlkIGRhZW1vbiB3aWxsCitraWNrIG9mZiB0aGUgbGFwdG9wX21vZGUgc2NyaXB0IGFuZCBydW4gaGRwYXJtLiBUaGUgcGFydCB0aGF0CithdXRvbWF0aWNhbGx5IGRpc2FibGVzIGxhcHRvcCBtb2RlIHdoZW4gdGhlIGJhdHRlcnkgaXMgbG93IHdhcword3JpdGVuIGJ5IEphbiBUb3BpbnNraS4KKworLS0tLS0tLS0tLS0tLS0tLS0vZXRjL2FjcGkvZXZlbnRzL2FjX2FkYXB0ZXIgQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2V2ZW50PWFjX2FkYXB0ZXIKK2FjdGlvbj0vZXRjL2FjcGkvYWN0aW9ucy9hYy5zaCAlZQorLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9ldmVudHMvYWNfYWRhcHRlciBFTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCistLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9ldmVudHMvYmF0dGVyeSBCRUdJTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZXZlbnQ9YmF0dGVyeS4qCithY3Rpb249L2V0Yy9hY3BpL2FjdGlvbnMvYmF0dGVyeS5zaCAlZQorLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9ldmVudHMvYmF0dGVyeSBFTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCistLS0tLS0tLS0tLS0tLS0tL2V0Yy9hY3BpL2FjdGlvbnMvYWMuc2ggQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL2Jhc2gKKworIyBhYyBvbi9vZmZsaW5lIGV2ZW50IGhhbmRsZXIKKworc3RhdHVzPWBhd2sgJy9ec3RhdGU6IC8geyBwcmludCAkMiB9JyAvcHJvYy9hY3BpL2FjX2FkYXB0ZXIvJDIvc3RhdGVgCisKK2Nhc2UgJHN0YXR1cyBpbgorICAgICAgICAib24tbGluZSIpCisgICAgICAgICAgICAgICAgL3NiaW4vbGFwdG9wX21vZGUgc3RvcAorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICA7OworICAgICAgICAib2ZmLWxpbmUiKQorICAgICAgICAgICAgICAgIC9zYmluL2xhcHRvcF9tb2RlIHN0YXJ0CisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIDs7Citlc2FjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vZXRjL2FjcGkvYWN0aW9ucy9hYy5zaCBFTkQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9hY3Rpb25zL2JhdHRlcnkuc2ggQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tCisjISAvYmluL2Jhc2gKKworIyBBdXRvbWF0aWNhbGx5IGRpc2FibGUgbGFwdG9wIG1vZGUgd2hlbiB0aGUgYmF0dGVyeSBhbG1vc3QgcnVucyBvdXQuCisKK0JBVFRfSU5GTz0vcHJvYy9hY3BpL2JhdHRlcnkvJDIvc3RhdGUKKworaWYgW1sgLWYgL3Byb2Mvc3lzL3ZtL2xhcHRvcF9tb2RlIF1dCit0aGVuCisgICBMTT1gY2F0IC9wcm9jL3N5cy92bS9sYXB0b3BfbW9kZWAKKyAgIGlmIFtbICRMTSAtZ3QgMCBdXQorICAgdGhlbgorICAgICBpZiBbWyAtZiAkQkFUVF9JTkZPIF1dCisgICAgIHRoZW4KKyAgICAgICAgIyBTb3VyY2UgdGhlIGNvbmZpZyBmaWxlIG9ubHkgbm93IHRoYXQgd2Uga25vdyB3ZSBuZWVkCisgICAgICAgIGlmIFsgLWYgL2V0Yy9kZWZhdWx0L2xhcHRvcC1tb2RlIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgIyBEZWJpYW4KKyAgICAgICAgICAgICAgICAuIC9ldGMvZGVmYXVsdC9sYXB0b3AtbW9kZQorICAgICAgICBlbGlmIFsgLWYgL2V0Yy9zeXNjb25maWcvbGFwdG9wLW1vZGUgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAjIE90aGVycworICAgICAgICAgICAgICAgIC4gL2V0Yy9zeXNjb25maWcvbGFwdG9wLW1vZGUKKyAgICAgICAgZmkKKyAgICAgICAgTUlOSU1VTV9CQVRURVJZX01JTlVURVM9JHtNSU5JTVVNX0JBVFRFUllfTUlOVVRFUzotJzEwJ30KKworICAgICAgICBBQ1RJT049ImBjYXQgJEJBVFRfSU5GTyB8IGdyZXAgY2hhcmdpbmcgfCBjdXQgLWMgMjYtYCIKKyAgICAgICAgaWYgW1sgQUNUSU9OIC1lcSAiZGlzY2hhcmdpbmciIF1dCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgUFJFU0VOVF9SQVRFPWBjYXQgJEJBVFRfSU5GTyB8IGdyZXAgInByZXNlbnQgcmF0ZToiIHwgc2VkICAicy8uKiBcKFswLTldWzAtOV0qIFwpLiovXDEvIiBgCisgICAgICAgICAgIFJFTUFJTklORz1gY2F0ICRCQVRUX0lORk8gfCBncmVwICJyZW1haW5pbmcgY2FwYWNpdHk6IiB8IHNlZCAgInMvLiogXChbMC05XVswLTldKiBcKS4qL1wxLyIgYAorICAgICAgICBmaQorICAgICAgICBpZiAoKCRSRU1BSU5JTkcgKiA2MCAvICRQUkVTRU5UX1JBVEUgPCAkTUlOSU1VTV9CQVRURVJZX01JTlVURVMpKQorICAgICAgICB0aGVuCisgICAgICAgICAgIC9zYmluL2xhcHRvcF9tb2RlIHN0b3AKKyAgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGxvZ2dlciAtcCBkYWVtb24ud2FybmluZyAiWW91IGFyZSB1c2luZyBsYXB0b3AgbW9kZSBhbmQgeW91ciBiYXR0ZXJ5IGludGVyZmFjZSAkQkFUVF9JTkZPIGlzIG1pc3NpbmcuIFRoaXMgbWF5IGxlYWQgdG8gbG9zcyBvZiBkYXRhIHdoZW4gdGhlIGJhdHRlcnkgcnVucyBvdXQuIENoZWNrIGtlcm5lbCBBQ1BJIHN1cHBvcnQgYW5kIC9wcm9jL2FjcGkvYmF0dGVyeSBmb2xkZXIsIGFuZCBlZGl0IC9ldGMvYWNwaS9iYXR0ZXJ5LnNoIHRvIHNldCBCQVRUX0lORk8gdG8gdGhlIGNvcnJlY3QgcGF0aC4iCisgICAgIGZpCisgICBmaQorZmkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS9ldGMvYWNwaS9hY3Rpb25zL2JhdHRlcnkuc2ggRU5ELS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitNb25pdG9yaW5nIHRvb2wKKy0tLS0tLS0tLS0tLS0tLQorCitCYXJ0ZWsgS2FuaWEgc3VibWl0dGVkIHRoaXMsIGl0IGNhbiBiZSB1c2VkIHRvIG1lYXN1cmUgaG93IG11Y2ggdGltZSB5b3VyIGRpc2sKK3NwZW5kcyBzcHVuIHVwL2Rvd24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWRzbG0uYyBCRUdJTi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogU2ltcGxlIERpc2sgU2xlZXAgTW9uaXRvcgorICogIGJ5IEJhcnRlayBLYW5pYQorICogTGljZW5jZWQgdW5kZXIgdGhlIEdQTAorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEKHgpIHgKKyNlbHNlCisjZGVmaW5lIEQoeCkKKyNlbmRpZgorCitpbnQgZW5kaXQgPSAwOworCisvKiBDaGVjayBpZiB0aGUgZGlzayBpcyBpbiBwb3dlcnNhdmUtbW9kZQorICogTW9zdCBvZiB0aGUgY29kZSBpcyBzdG9sZW4gZnJvbSBoZHBhcm0uCisgKiAxID0gYWN0aXZlLCAwID0gc3RhbmRieS9zbGVlcCwgLTEgPSB1bmtub3duICovCitpbnQgY2hlY2tfcG93ZXJtb2RlKGludCBmZCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGFyZ3NbNF0gPSB7V0lOX0NIRUNLUE9XRVJNT0RFMSwwLDAsMH07CisgICAgaW50IHN0YXRlOworCisgICAgaWYgKGlvY3RsKGZkLCBIRElPX0RSSVZFX0NNRCwgJmFyZ3MpCisJJiYgKGFyZ3NbMF0gPSBXSU5fQ0hFQ0tQT1dFUk1PREUyKSAvKiB0cnkgYWdhaW4gd2l0aCAweDk4ICovCisJJiYgaW9jdGwoZmQsIEhESU9fRFJJVkVfQ01ELCAmYXJncykpIHsKKwlpZiAoZXJybm8gIT0gRUlPIHx8IGFyZ3NbMF0gIT0gMCB8fCBhcmdzWzFdICE9IDApIHsKKwkgICAgc3RhdGUgPSAtMTsgLyogInVua25vd24iOyAqLworCX0gZWxzZQorCSAgICBzdGF0ZSA9IDA7IC8qICJzbGVlcGluZyI7ICovCisgICAgfSBlbHNlIHsKKwlzdGF0ZSA9IChhcmdzWzJdID09IDI1NSkgPyAxIDogMDsKKyAgICB9CisgICAgRChwcmludGYoIiBkcml2ZSBzdGF0ZSBpczogICVkXG4iLCBzdGF0ZSkpOworCisgICAgcmV0dXJuIHN0YXRlOworfQorCitjaGFyICpzdGF0ZV9uYW1lKGludCBpKQoreworICAgIGlmIChpID09IC0xKSByZXR1cm4gInVua25vd24iOworICAgIGlmIChpID09IDApIHJldHVybiAic2xlZXBpbmciOworICAgIGlmIChpID09IDEpIHJldHVybiAiYWN0aXZlIjsKKworICAgIHJldHVybiAiaW50ZXJuYWwgZXJyb3IiOworfQorCitjaGFyICpteWN0aW1lKHRpbWVfdCB0aW1lKQoreworICAgIGNoYXIgKnRzID0gY3RpbWUoJnRpbWUpOworICAgIHRzW3N0cmxlbih0cykgLSAxXSA9IDA7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgbWVhc3VyZShpbnQgZmQpCit7CisgICAgdGltZV90IHN0YXJ0X3RpbWU7CisgICAgaW50IGxhc3Rfc3RhdGU7CisgICAgdGltZV90IGxhc3RfdGltZTsKKyAgICBpbnQgY3Vycl9zdGF0ZTsKKyAgICB0aW1lX3QgY3Vycl90aW1lID0gMDsKKyAgICB0aW1lX3QgdGltZV9kaWZmOworICAgIHRpbWVfdCBhY3RpdmVfdGltZSA9IDA7CisgICAgdGltZV90IHNsZWVwX3RpbWUgPSAwOworICAgIHRpbWVfdCB1bmtub3duX3RpbWUgPSAwOworICAgIHRpbWVfdCB0b3RhbF90aW1lID0gMDsKKyAgICBpbnQgY2hhbmdlcyA9IDA7CisgICAgZmxvYXQgdG1wOworCisgICAgcHJpbnRmKCJTdGFydGluZyBtZWFzdXJlbWVudHNcbiIpOworCisgICAgbGFzdF9zdGF0ZSA9IGNoZWNrX3Bvd2VybW9kZShmZCk7CisgICAgc3RhcnRfdGltZSA9IGxhc3RfdGltZSA9IHRpbWUoMCk7CisgICAgcHJpbnRmKCIgIFN5c3RlbSBpcyBpbiBzdGF0ZSAlc1xuXG4iLCBzdGF0ZV9uYW1lKGxhc3Rfc3RhdGUpKTsKKworICAgIHdoaWxlKCFlbmRpdCkgeworCXNsZWVwKDEpOworCWN1cnJfc3RhdGUgPSBjaGVja19wb3dlcm1vZGUoZmQpOworCisJaWYgKGN1cnJfc3RhdGUgIT0gbGFzdF9zdGF0ZSB8fCBlbmRpdCkgeworCSAgICBjaGFuZ2VzKys7CisJICAgIGN1cnJfdGltZSA9IHRpbWUoMCk7CisJICAgIHRpbWVfZGlmZiA9IGN1cnJfdGltZSAtIGxhc3RfdGltZTsKKworCSAgICBpZiAobGFzdF9zdGF0ZSA9PSAxKSBhY3RpdmVfdGltZSArPSB0aW1lX2RpZmY7CisJICAgIGVsc2UgaWYgKGxhc3Rfc3RhdGUgPT0gMCkgc2xlZXBfdGltZSArPSB0aW1lX2RpZmY7CisJICAgIGVsc2UgdW5rbm93bl90aW1lICs9IHRpbWVfZGlmZjsKKworCSAgICBsYXN0X3N0YXRlID0gY3Vycl9zdGF0ZTsKKwkgICAgbGFzdF90aW1lID0gY3Vycl90aW1lOworCisJICAgIHByaW50ZigiJXM6IFN0YXRlLWNoYW5nZSB0byAlc1xuIiwgbXljdGltZShjdXJyX3RpbWUpLAorCQkgICBzdGF0ZV9uYW1lKGN1cnJfc3RhdGUpKTsKKwl9CisgICAgfQorICAgIGNoYW5nZXMtLTsgLyogQ29tcGVuc2F0ZSBmb3IgU0lHSU5UICovCisKKyAgICB0b3RhbF90aW1lID0gdGltZSgwKSAtIHN0YXJ0X3RpbWU7CisgICAgcHJpbnRmKCJcblRvdGFsIHJ1bm5pbmcgdGltZTogICVsdXNcbiIsIGN1cnJfdGltZSAtIHN0YXJ0X3RpbWUpOworICAgIHByaW50ZigiIFN0YXRlIGNoYW5nZWQgJWQgdGltZXNcbiIsIGNoYW5nZXMpOworCisgICAgdG1wID0gKGZsb2F0KXNsZWVwX3RpbWUgLyAoZmxvYXQpdG90YWxfdGltZSAqIDEwMDsKKyAgICBwcmludGYoIiBUaW1lIGluIHNsZWVwIHN0YXRlOiAgICVsdXMgKCUuMmYlJSlcbiIsIHNsZWVwX3RpbWUsIHRtcCk7CisgICAgdG1wID0gKGZsb2F0KWFjdGl2ZV90aW1lIC8gKGZsb2F0KXRvdGFsX3RpbWUgKiAxMDA7CisgICAgcHJpbnRmKCIgVGltZSBpbiBhY3RpdmUgc3RhdGU6ICAlbHVzICglLjJmJSUpXG4iLCBhY3RpdmVfdGltZSwgdG1wKTsKKyAgICB0bXAgPSAoZmxvYXQpdW5rbm93bl90aW1lIC8gKGZsb2F0KXRvdGFsX3RpbWUgKiAxMDA7CisgICAgcHJpbnRmKCIgVGltZSBpbiB1bmtub3duIHN0YXRlOiAlbHVzICglLjJmJSUpXG4iLCB1bmtub3duX3RpbWUsIHRtcCk7Cit9CisKK3ZvaWQgZW5kZXIoaW50IHMpCit7CisgICAgZW5kaXQgPSAxOworfQorCit2b2lkIHVzYWdlKCkKK3sKKyAgICBwdXRzKCJ1c2FnZTogZHNsbSBbLXcgPHRpbWU+XSA8ZGlzaz4iKTsKKyAgICBleGl0KDApOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKyAgICBpbnQgZmQ7CisgICAgY2hhciAqZGlzayA9IDA7CisgICAgaW50IHNldHRsZV90aW1lID0gNjA7CisKKyAgICAvKiBQYXJzZSB0aGUgc2ltcGxlIGNvbW1hbmQtbGluZSAqLworICAgIGlmIChhYyA9PSAyKQorCWRpc2sgPSBhdlsxXTsKKyAgICBlbHNlIGlmIChhYyA9PSA0KSB7CisJc2V0dGxlX3RpbWUgPSBhdG9pKGF2WzJdKTsKKwlkaXNrID0gYXZbM107CisgICAgfSBlbHNlCisJdXNhZ2UoKTsKKworICAgIGlmICghKGZkID0gb3BlbihkaXNrLCBPX1JET05MWXxPX05PTkJMT0NLKSkpIHsKKwlwcmludGYoIkNhbid0IG9wZW4gJXMsIGJlY2F1c2U6ICVzXG4iLCBkaXNrLCBzdHJlcnJvcihlcnJubykpOworCWV4aXQoLTEpOworICAgIH0KKworICAgIGlmIChzZXR0bGVfdGltZSkgeworCXByaW50ZigiV2FpdGluZyAlZCBzZWNvbmRzIGZvciB0aGUgc3lzdGVtIHRvIHNldHRsZSBkb3duIHRvICIKKwkgICAgICAgIidub3JtYWwnXG4iLCBzZXR0bGVfdGltZSk7CisJc2xlZXAoc2V0dGxlX3RpbWUpOworICAgIH0gZWxzZQorCXB1dHMoIk5vdCB3YWl0aW5nIGZvciBzeXN0ZW0gdG8gc2V0dGxlIGRvd24iKTsKKworICAgIHNpZ25hbChTSUdJTlQsIGVuZGVyKTsKKworICAgIG1lYXN1cmUoZmQpOworCisgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1kc2xtLmMgRU5ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZG0udHh0IGIvRG9jdW1lbnRhdGlvbi9sZG0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjZlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2xkbS50eHQKQEAgLTAsMCArMSwxMDIgQEAKKworICAgICAgICAgICAgTERNIC0gTG9naWNhbCBEaXNrIE1hbmFnZXIgKER5bmFtaWMgRGlza3MpCisgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3ZlcnZpZXcKKy0tLS0tLS0tCisKK1dpbmRvd3MgMjAwMCBhbmQgWFAgdXNlIGEgbmV3IHBhcnRpdGlvbmluZyBzY2hlbWUuICBJdCBpcyBhIGNvbXBsZXRlCityZXBsYWNlbWVudCBmb3IgdGhlIE1TRE9TIHN0eWxlIHBhcnRpdGlvbnMuICBJdCBzdG9yZXMgaXRzIGluZm9ybWF0aW9uIGluIGEKKzFNaUIgam91cm5hbGxlZCBkYXRhYmFzZSBhdCB0aGUgZW5kIG9mIHRoZSBwaHlzaWNhbCBkaXNrLiAgVGhlIHNpemUgb2YKK3BhcnRpdGlvbnMgaXMgbGltaXRlZCBvbmx5IGJ5IGRpc2sgc3BhY2UuICBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9ucyBpcworbmVhcmx5IDIwMDAuCisKK0FueSBwYXJ0aXRpb25zIGNyZWF0ZWQgdW5kZXIgdGhlIExETSBhcmUgY2FsbGVkICJEeW5hbWljIERpc2tzIi4gIFRoZXJlIGFyZSBubworbG9uZ2VyIGFueSBwcmltYXJ5IG9yIGV4dGVuZGVkIHBhcnRpdGlvbnMuICBOb3JtYWwgTVNET1Mgc3R5bGUgcGFydGl0aW9ucyBhcmUKK25vdyBrbm93biBhcyBCYXNpYyBEaXNrcy4KKworSWYgeW91IHdpc2ggdG8gdXNlIFNwYW5uZWQsIFN0cmlwZWQsIE1pcnJvcmVkIG9yIFJBSUQgNSBWb2x1bWVzLCB5b3UgbXVzdCB1c2UKK0R5bmFtaWMgRGlza3MuICBUaGUgam91cm5hbGxpbmcgYWxsb3dzIFdpbmRvd3MgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZXNlCitwYXJ0aXRpb25zIGFuZCBmaWxlc3lzdGVtcyB3aXRob3V0IHRoZSBuZWVkIHRvIHJlYm9vdC4KKworT25jZSB0aGUgTERNIGRyaXZlciBoYXMgZGl2aWRlZCB1cCB0aGUgZGlzaywgeW91IGNhbiB1c2UgdGhlIE1EIGRyaXZlciB0bworYXNzZW1ibGUgYW55IG11bHRpLXBhcnRpdGlvbiB2b2x1bWVzLCBlLmcuICBTdHJpcGVzLCBSQUlENS4KKworVG8gcHJldmVudCBsZWdhY3kgYXBwbGljYXRpb25zIGZyb20gcmVwYXJ0aXRpb25pbmcgdGhlIGRpc2ssIHRoZSBMRE0gY3JlYXRlcyBhCitkdW1teSBNU0RPUyBwYXJ0aXRpb24gY29udGFpbmluZyBvbmUgZGlzay1zaXplZCBwYXJ0aXRpb24uCisKKworRXhhbXBsZQorLS0tLS0tLQorCitCZWxvdyB3ZSBoYXZlIGEgNTBNaUIgZGlzaywgZGl2aWRlZCBpbnRvIHNldmVuIHBhcnRpdGlvbnMuCitOLkIuICBUaGUgbWlzc2luZyAxTWlCIGF0IHRoZSBlbmQgb2YgdGhlIGRpc2sgaXMgd2hlcmUgdGhlIExETSBkYXRhYmFzZSBpcworICAgICAgc3RvcmVkLgorCisgIERldmljZSB8IE9mZnNldCBCeXRlcyAgU2VjdG9ycyAgTWlCIHwgU2l6ZSAgIEJ5dGVzICBTZWN0b3JzICBNaUIKKyAgLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBoZGEgICAgfCAgICAgICAgICAgIDAgICAgICAgIDAgICAgMCB8ICAgICA1MjQyODgwMCAgIDEwMjQwMCAgIDUwCisgIGhkYTEgICB8ICAgICA1MTM4MDIyNCAgIDEwMDM1MiAgIDQ5IHwgICAgICAxMDQ4NTc2ICAgICAyMDQ4ICAgIDEKKyAgaGRhMiAgIHwgICAgICAgIDE2Mzg0ICAgICAgIDMyICAgIDAgfCAgICAgIDY5Nzk1ODQgICAgMTM2MzIgICAgNgorICBoZGEzICAgfCAgICAgIDY5OTU5NjggICAgMTM2NjQgICAgNiB8ICAgICAxMDQ4NTc2MCAgICAyMDQ4MCAgIDEwCisgIGhkYTQgICB8ICAgICAxNzQ4MTcyOCAgICAzNDE0NCAgIDE2IHwgICAgICA0MTk0MzA0ICAgICA4MTkyICAgIDQKKyAgaGRhNSAgIHwgICAgIDIxNjc2MDMyICAgIDQyMzM2ICAgMjAgfCAgICAgIDUyNDI4ODAgICAgMTAyNDAgICAgNQorICBoZGE2ICAgfCAgICAgMjY5MTg5MTIgICAgNTI1NzYgICAyNSB8ICAgICAxMDQ4NTc2MCAgICAyMDQ4MCAgIDEwCisgIGhkYTcgICB8ICAgICAzNzQwNDY3MiAgICA3MzA1NiAgIDM1IHwgICAgIDEzOTU5MTY4ICAgIDI3MjY0ICAgMTMKKworVGhlIExETSBEYXRhYmFzZSBtYXkgbm90IHN0b3JlIHRoZSBwYXJ0aXRpb25zIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXBwZWFyIG9uCitkaXNrLCBidXQgdGhlIGRyaXZlciB3aWxsIHNvcnQgdGhlbS4KKworV2hlbiBMaW51eCBib290cywgeW91IHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlOgorCisgIGhkYTogMTAyNDAwIHNlY3RvcnMgdy8zMktpQiBDYWNoZSwgQ0hTPTUwLzY0LzMyCisgIGhkYTogW0xETV0gaGRhMSBoZGEyIGhkYTMgaGRhNCBoZGE1IGhkYTYgaGRhNworCisKK0NvbXBpbGluZyBMRE0gU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGVuYWJsZSBMRE0sIGNob29zZSB0aGUgZm9sbG93aW5nIHR3byBvcHRpb25zOiAKKworICAiQWR2YW5jZWQgcGFydGl0aW9uIHNlbGVjdGlvbiIgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRAorICAiV2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrKSBzdXBwb3J0IiBDT05GSUdfTERNX1BBUlRJVElPTgorCitJZiB5b3UgYmVsaWV2ZSB0aGUgZHJpdmVyIGlzbid0IHdvcmtpbmcgYXMgaXQgc2hvdWxkLCB5b3UgY2FuIGVuYWJsZSB0aGUgZXh0cmEKK2RlYnVnZ2luZyBjb2RlLiAgVGhpcyB3aWxsIHByb2R1Y2UgYSBMT1Qgb2Ygb3V0cHV0LiAgVGhlIG9wdGlvbiBpczoKKworICAiV2luZG93cyBMRE0gZXh0cmEgbG9nZ2luZyIgQ09ORklHX0xETV9ERUJVRworCitOLkIuIFRoZSBwYXJ0aXRpb24gY29kZSBjYW5ub3QgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuCisKK0FzIHdpdGggYWxsIHRoZSBwYXJ0aXRpb24gY29kZSwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IHNlZSBzaWducyBvZiBpdHMgdHlwZSBvZgorcGFydGl0aW9uLCBpdCB3aWxsIHBhc3MgY29udHJvbCB0byBhbm90aGVyIGRyaXZlciwgc28gdGhlcmUgaXMgbm8gaGFybSBpbgorZW5hYmxpbmcgaXQuCisKK0lmIHlvdSBoYXZlIER5bmFtaWMgRGlza3MgYnV0IGRvbid0IGVuYWJsZSB0aGUgZHJpdmVyLCB0aGVuIGFsbCB5b3Ugd2lsbCBzZWUKK2lzIGEgZHVtbXkgTVNET1MgcGFydGl0aW9uIGZpbGxpbmcgdGhlIHdob2xlIGRpc2suICBZb3Ugd29uJ3QgYmUgYWJsZSB0byBtb3VudAorYW55IG9mIHRoZSB2b2x1bWVzIG9uIHRoZSBkaXNrLgorCisKK0Jvb3RpbmcKKy0tLS0tLS0KKworSWYgeW91IGVuYWJsZSBMRE0gc3VwcG9ydCwgdGhlbiBsaWxvIGlzIGNhcGFibGUgb2YgYm9vdGluZyBmcm9tIGFueSBvZiB0aGUKK2Rpc2NvdmVyZWQgcGFydGl0aW9ucy4gIEhvd2V2ZXIsIGdydWIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgTERNIHBhcnRpdGlvbmluZworYW5kIGNhbm5vdCBib290IGZyb20gYSBEeW5hbWljIERpc2suCisKKworTW9yZSBEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgYW4gT3ZlcnZpZXcgb2YgdGhlIExETSBvbmxpbmUgdG9nZXRoZXIgd2l0aCBjb21wbGV0ZSBUZWNobmljYWwKK0RvY3VtZW50YXRpb24uICBJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIGh0bWwuCisKKyAgaHR0cDovL2xpbnV4LW50ZnMuc291cmNlZm9yZ2UubmV0L2xkbS9pbmRleC5odG1sCisgIGh0dHA6Ly9saW51eC1udGZzLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZHMuaHRtbAorCitJZiB5b3UgaGF2ZSBhbnkgTERNIHF1ZXN0aW9ucyB0aGF0IGFyZW4ndCBhbnN3ZXJlZCBvbiB0aGUgd2Vic2l0ZSwgZW1haWwgbWUuCisKK0NoZWVycywKKyAgICBGbGF0Q2FwIC0gUmljaGFyZCBSdXNzb24KKyAgICBsZG1AZmxhdGNhcC5vcmcKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sb2Nrcy50eHQgYi9Eb2N1bWVudGF0aW9uL2xvY2tzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTFiZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2Nrcy50eHQKQEAgLTAsMCArMSw4NCBAQAorCQkgICAgICBGaWxlIExvY2tpbmcgUmVsZWFzZSBOb3RlcworCisJCUFuZHkgV2Fsa2VyIDxhbmR5QGx5c2FrZXIua3ZhZXJuZXIubm8+CisKKwkJCSAgICAxMiBNYXkgMTk5NworCisKKzEuIFdoYXQncyBOZXc/CistLS0tLS0tLS0tLS0tLQorCisxLjEgQnJva2VuIEZsb2NrIEVtdWxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9sZCBmbG9jaygyKSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCB3YXMgc3dhcHBlZCBmb3IgcHJvcGVyIEJTRAorY29tcGF0aWJsZSBmbG9jaygyKSBzdXBwb3J0IGluIHRoZSAxLjMueCBzZXJpZXMgb2Yga2VybmVscy4gV2l0aCB0aGUKK3JlbGVhc2Ugb2YgdGhlIDIuMS54IGtlcm5lbCBzZXJpZXMsIHN1cHBvcnQgZm9yIHRoZSBvbGQgZW11bGF0aW9uIGhhcworYmVlbiB0b3RhbGx5IHJlbW92ZWQsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBjYXJyeSB0aGlzIGJhZ2dhZ2UKK2ZvcmV2ZXIuCisKK1RoaXMgc2hvdWxkIG5vdCBjYXVzZSBwcm9ibGVtcyBmb3IgYW55Ym9keSwgc2luY2UgZXZlcnlib2R5IHVzaW5nIGEKKzIuMS54IGtlcm5lbCBzaG91bGQgaGF2ZSB1cGRhdGVkIHRoZWlyIEMgbGlicmFyeSB0byBhIHN1aXRhYmxlIHZlcnNpb24KK2FueXdheSAoc2VlIHRoZSBmaWxlICJEb2N1bWVudGF0aW9uL0NoYW5nZXMiLikKKworMS4yIEFsbG93IE1peGVkIExvY2tzIEFnYWluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4yLjEgVHlwaWNhbCBQcm9ibGVtcyAtIFNlbmRtYWlsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0JlY2F1c2Ugc2VuZG1haWwgd2FzIHVuYWJsZSB0byB1c2UgdGhlIG9sZCBmbG9jaygpIGVtdWxhdGlvbiwgbWFueSBzZW5kbWFpbAoraW5zdGFsbGF0aW9ucyB1c2UgZmNudGwoKSBpbnN0ZWFkIG9mIGZsb2NrKCkuIFRoaXMgaXMgdHJ1ZSBvZiBTbGFja3dhcmUgMy4wCitmb3IgZXhhbXBsZS4gVGhpcyBnYXZlIHJpc2UgdG8gc29tZSBvdGhlciBzdWJ0bGUgcHJvYmxlbXMgaWYgc2VuZG1haWwgd2FzCitjb25maWd1cmVkIHRvIHJlYnVpbGQgdGhlIGFsaWFzIGZpbGUuIFNlbmRtYWlsIHRyaWVkIHRvIGxvY2sgdGhlIGFsaWFzZXMuZGlyCitmaWxlIHdpdGggZmNudGwoKSBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBHREJNIHJvdXRpbmVzIHRyaWVkIHRvIGxvY2sgdGhpcworZmlsZSB3aXRoIGZsb2NrKCkuIFdpdGggcHJlIDEuMy45NiBrZXJuZWxzIHRoaXMgY291bGQgcmVzdWx0IGluIGRlYWRsb2NrcyB0aGF0LAorb3ZlciB0aW1lLCBvciB1bmRlciBhIHZlcnkgaGVhdnkgbWFpbCBsb2FkLCB3b3VsZCBldmVudHVhbGx5IGNhdXNlIHRoZSBrZXJuZWwKK3RvIGxvY2sgc29saWQgd2l0aCBkZWFkbG9ja2VkIHByb2Nlc3Nlcy4KKworCisxLjIuMiBUaGUgU29sdXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHNvbHV0aW9uIEkgaGF2ZSBjaG9zZW4sIGFmdGVyIG11Y2ggZXhwZXJpbWVudGF0aW9uIGFuZCBkaXNjdXNzaW9uLAoraXMgdG8gbWFrZSBmbG9jaygpIGFuZCBmY250bCgpIGxvY2tzIG9ibGl2aW91cyB0byBlYWNoIG90aGVyLiBCb3RoIGNhbgorZXhpc3RzLCBhbmQgbmVpdGhlciB3aWxsIGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgb3RoZXIuCisKK0kgd2FudGVkIHRoZSB0d28gbG9jayBzdHlsZXMgdG8gYmUgY29vcGVyYXRpdmUsIGJ1dCB0aGVyZSB3ZXJlIHNvIG1hbnkKK3JhY2UgYW5kIGRlYWRsb2NrIGNvbmRpdGlvbnMgdGhhdCB0aGUgY3VycmVudCBzb2x1dGlvbiB3YXMgdGhlIG9ubHkKK3ByYWN0aWNhbCBvbmUuIEl0IHB1dHMgdXMgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMsIGZvciBleGFtcGxlLCBTdW5PUworNC4xLnggYW5kIHNldmVyYWwgb3RoZXIgY29tbWVyY2lhbCBVbmljZXMuIFRoZSBvbmx5IE9TJ3MgdGhhdCBzdXBwb3J0Citjb29wZXJhdGl2ZSBmbG9jaygpL2ZjbnRsKCkgYXJlIHRob3NlIHRoYXQgZW11bGF0ZSBmbG9jaygpIHVzaW5nCitmY250bCgpLCB3aXRoIGFsbCB0aGUgcHJvYmxlbXMgdGhhdCBpbXBsaWVzLgorCisKKzEuMyBNYW5kYXRvcnkgTG9ja2luZyBBcyBBIE1vdW50IE9wdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbmRhdG9yeSBsb2NraW5nLCBhcyBkZXNjcmliZWQgaW4gJ0RvY3VtZW50YXRpb24vbWFuZGF0b3J5LnR4dCcgd2FzIHByaW9yCit0byB0aGlzIHJlbGVhc2UgYSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgd2FzIHZhbGlkIGZvciBhbGwKK21vdW50ZWQgZmlsZXN5c3RlbXMuIFRoaXMgaGFkIGEgbnVtYmVyIG9mIGluaGVyZW50IGRhbmdlcnMsIG5vdCB0aGUgbGVhc3QKK29mIHdoaWNoIHdhcyB0aGUgYWJpbGl0eSB0byBmcmVlemUgYW4gTkZTIHNlcnZlciBieSBhc2tpbmcgaXQgdG8gcmVhZCBhCitmaWxlIGZvciB3aGljaCBhIG1hbmRhdG9yeSBsb2NrIGV4aXN0ZWQuCisKK0Zyb20gdGhpcyByZWxlYXNlIG9mIHRoZSBrZXJuZWwsIG1hbmRhdG9yeSBsb2NraW5nIGNhbiBiZSB0dXJuZWQgb24gYW5kIG9mZgorb24gYSBwZXItZmlsZXN5c3RlbSBiYXNpcywgdXNpbmcgdGhlIG1vdW50IG9wdGlvbnMgJ21hbmQnIGFuZCAnbm9tYW5kJy4KK1RoZSBkZWZhdWx0IGlzIHRvIGRpc2FsbG93IG1hbmRhdG9yeSBsb2NraW5nLiBUaGUgaW50ZW50aW9uIGlzIHRoYXQKK21hbmRhdG9yeSBsb2NraW5nIG9ubHkgYmUgZW5hYmxlZCBvbiBhIGxvY2FsIGZpbGVzeXN0ZW0gYXMgdGhlIHNwZWNpZmljIG5lZWQKK2FyaXNlcy4KKworVW50aWwgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIG1vdW50KDgpIGJlY29tZXMgYXZhaWxhYmxlIHlvdSBtYXkgaGF2ZSB0byBhcHBseQordGhpcyBwYXRjaCB0byB0aGUgbW91bnQgc291cmNlcyAoYmFzZWQgb24gdGhlIHZlcnNpb24gZGlzdHJpYnV0ZWQgd2l0aCBSaWNrCitGYWl0aCdzIHV0aWwtbGludXgtMi41IHBhY2thZ2UpOgorCisqKiogbW91bnQuYy5vcmlnCVNhdCBKdW4gIDggMDk6MTQ6MzEgMTk5NgorLS0tIG1vdW50LmMJU2F0IEp1biAgOCAwOToxMzowMiAxOTk2CisqKioqKioqKioqKioqKioKKyoqKiAxMDAsMTA1ICoqKioKKy0tLSAxMDAsMTA3IC0tLS0KKyAgICB7ICJub2F1dG8iLAkwLCBNU19OT0FVVE8JfSwJLyogQ2FuICBvbmx5IGJlIG1vdW50ZWQgZXhwbGljaXRseSAqLworICAgIHsgInVzZXIiLAkwLCBNU19VU0VSCX0sCS8qIEFsbG93IG9yZGluYXJ5IHVzZXIgdG8gbW91bnQgKi8KKyAgICB7ICJub3VzZXIiLAkxLCBNU19VU0VSCX0sCS8qIEZvcmJpZCBvcmRpbmFyeSB1c2VyIHRvIG1vdW50ICovCisrICAgeyAibWFuZCIsCTAsIE1TX01BTkRMT0NLCX0sCS8qIEFsbG93IG1hbmRhdG9yeSBsb2NrcyBvbiB0aGlzIEZTICovCisrICAgeyAibm9tYW5kIiwJMSwgTVNfTUFORExPQ0sJfSwJLyogRm9yYmlkIG1hbmRhdG9yeSBsb2NrcyBvbiB0aGlzIEZTICovCisgICAgLyogYWRkIG5ldyBvcHRpb25zIGhlcmUgKi8KKyAgI2lmZGVmIE1TX05PU1VCCisgICAgeyAic3ViIiwJMSwgTVNfTk9TVUIJfSwJLyogYWxsb3cgc3VibW91bnRzICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvZ28uZ2lmIGIvRG9jdW1lbnRhdGlvbi9sb2dvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFlNzVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2dvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvZ28udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2dvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZmMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2dvLnR4dApAQCAtMCwwICsxLDEzIEBACitUaGlzIGlzIHRoZSBmdWxsLWNvbG91ciB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50bHkgdW5vZmZpY2lhbCBMaW51eCBsb2dvCisoImN1cnJlbnRseSB1bm9mZmljaWFsIiBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgaGFzIGJlZW4gbm8gcGFwZXJ3b3JrIGFuZAordGhhdCBJIGhhdmUgbm90IHJlYWxseSBhbm5vdW5jZWQgaXQgeWV0KS4gIEl0IHdhcyBjcmVhdGVkIGJ5IExhcnJ5IEV3aW5nLAorYW5kIGlzIGZyZWVseSB1c2FibGUgYXMgbG9uZyBhcyB5b3UgYWNrbm93bGVkZ2UgTGFycnkgYXMgdGhlIG9yaWdpbmFsCithcnRpc3QuIAorCitOb3RlIHRoYXQgdGhlcmUgYXJlIGJsYWNrLWFuZC13aGl0ZSB2ZXJzaW9ucyBvZiB0aGlzIGF2YWlsYWJsZSB0aGF0CitzY2FsZSBkb3duIHRvIHNtYWxsZXIgc2l6ZXMgYW5kIGFyZSBiZXR0ZXIgZm9yIGxldHRlcmhlYWRzIG9yIHdoYXRldmVyCit5b3Ugd2FudCB0byB1c2UgaXQgZm9yOiBmb3IgdGhlIGZ1bGwgcmFuZ2Ugb2YgbG9nb3MgdGFrZSBhIGxvb2sgYXQKK0xhcnJ5J3Mgd2ViLXBhZ2U6CisKKwlodHRwOi8vd3d3LmlzYy50YW11LmVkdS9+bGV3aW5nL2xpbnV4LworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL202OGsvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL202OGsvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxNGU5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbTY4ay8wMC1JTkRFWApAQCAtMCwwICsxLDUgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKK2tlcm5lbC1vcHRpb25zLnR4dAorCS0gY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIExpbnV4L202OGsKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tNjhrL1JFQURNRS5idWRkaGEgYi9Eb2N1bWVudGF0aW9uL202OGsvUkVBRE1FLmJ1ZGRoYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjgwMmZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tNjhrL1JFQURNRS5idWRkaGEKQEAgLTAsMCArMSwyMTAgQEAKKworVGhlIEFtaWdhIEJ1ZGRoYSBhbmQgQ2F0d2Vhc2VsIElERSBEcml2ZXIgKHBhcnQgb2YgaWRlLmMpIHdhcyB3cml0dGVuIGJ5CitHZWVydCBVeXR0ZXJob2V2ZW4gYmFzZWQgb24gdGhlIGZvbGxvd2luZyBzcGVjaWZpY2F0aW9uczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZ2lzdGVyIG1hcCBvZiB0aGUgQnVkZGhhIElERSBjb250cm9sbGVyIGFuZCB0aGUKK0J1ZGRoYS1wYXJ0IG9mIHRoZSBDYXR3ZWFzZWwgWm9ycm8tSUkgdmVyc2lvbgorCitUaGUgQXV0b2NvbmZpZ3VyYXRpb24gaGFzIGJlZW4gaW1wbGVtZW50ZWQganVzdCBhcyBDb21tb2RvcmUKK2Rlc2NyaWJlZCAgaW4gIHRoZWlyICBtYW51YWxzLCBubyB0cmlja3MgaGF2ZSBiZWVuIHVzZWQgKGZvcgorZXhhbXBsZSBsZWF2aW5nIHNvbWUgYWRkcmVzcyBsaW5lcyBvdXQgb2YgdGhlIGVxdWF0aW9ucy4uLikuCitJZiB5b3Ugd2FudCB0byBjb25maWd1cmUgdGhlIGJvYXJkIHlvdXJzZWxmIChmb3IgZXhhbXBsZSBsZXQKK2EgIExpbnV4ICBrZXJuZWwgIGNvbmZpZ3VyZSB0aGUgY2FyZCksIGxvb2sgYXQgdGhlIENvbW1vZG9yZQorRG9jcy4gIFJlYWRpbmcgdGhlIG5pYmJsZXMgc2hvdWxkIGdpdmUgdGhpcyBpbmZvcm1hdGlvbjoKKworVmVuZG9yIG51bWJlcjogNDYyNiAoJDEyMTIpCitwcm9kdWN0IG51bWJlcjogMCAoNDIgZm9yIENhdHdlYXNlbCBaLUlJKQorU2VyaWFsIG51bWJlcjogMAorUm9tLXZlY3RvcjogJDEwMDAKKworVGhlICBjYXJkICBzaG91bGQgYmUgYSBaLUlJIGJvYXJkLCBzaXplIDY0Sywgbm90IGZvciBmcmVlbWVtCitsaXN0LCBSb20tVmVrdG9yIGlzIHZhbGlkLCBubyBzZWNvbmQgQXV0b2NvbmZpZy1ib2FyZCBvbiB0aGUKK3NhbWUgY2FyZCwgbm8gc3BhY2UgcHJlZmVyZW5jZSwgc3VwcG9ydHMgIlNodXR1cF9mb3JldmVyIi4KKworU2V0dGluZyAgdGhlICBiYXNlIGFkZHJlc3Mgc2hvdWxkIGJlIGRvbmUgaW4gdHdvIHN0ZXBzLCBqdXN0CithcyAgdGhlIEFtaWdhIEtpY2tzdGFydCBkb2VzOiAgVGhlIGxvd2VyIG5pYmJsZSBvZiB0aGUgOC1CaXQKK2FkZHJlc3MgaXMgd3JpdHRlbiB0byAkNGEsIHRoZW4gdGhlIHdob2xlIEJ5dGUgaXMgd3JpdHRlbiB0bworJDQ4LCB3aGlsZSBpdCBkb2Vzbid0IG1hdHRlciBob3cgb2Z0ZW4geW91J3JlIHdyaXRpbmcgdG8gJDRhCithcyAgbG9uZyBhcyAkNDggaXMgbm90IHRvdWNoZWQuICBBZnRlciAkNDggaGFzIGJlZW4gd3JpdHRlbiwKK3RoZSAgd2hvbGUgY2FyZCBkaXNhcHBlYXJzIGZyb20gJGU4IGFuZCBpcyBtYXBwZWQgdG8gdGhlIG5ldworYWRkcmVzcyBqdXN0IHdyaXR0ZW4uICBNYWtlIHNodXJlICQ0YSBpcyB3cml0dGVuIGJlZm9yZSAkNDgsCitvdGhlcndpc2UgeW91ciBjaGFuY2UgaXMgb25seSAxOjE2IHRvIGZpbmQgdGhlIGJvYXJkIDotKS4KKworVGhlIGxvY2FsIG1lbW9yeS1tYXAgaXMgZXZlbiBhY3RpdmUgd2hlbiBtYXBwZWQgdG8gJGU4OgorCiskMC0kN2UJCUF1dG9rb25maWctc3BhY2UsIHNlZSBaLUlJIGRvY3MuCisKKyQ4MC0kN2ZkCXJlc2VydmVkCisKKyQ3ZmUJCVNwZWVkLXNlbGVjdCBSZWdpc3RlcjogUmVhZCAmIFdyaXRlCisJCShkZXNjcmlwdGlvbiBzZWUgZnVydGhlciBkb3duKQorCiskODAwLSQ4ZmYJSURFLVNlbGVjdCAwIChQb3J0IDAsIFJlZ2lzdGVyIHNldCAwKQorCiskOTAwLSQ5ZmYJSURFLVNlbGVjdCAxIChQb3J0IDAsIFJlZ2lzdGVyIHNldCAxKQorCiskYTAwLSRhZmYJSURFLVNlbGVjdCAyIChQb3J0IDEsIFJlZ2lzdGVyIHNldCAwKQorCiskYjAwLSRiZmYJSURFLVNlbGVjdCAzIChQb3J0IDEsIFJlZ2lzdGVyIHNldCAxKQorCiskYzAwLSRjZmYJSURFLVNlbGVjdCA0IChQb3J0IDIsIFJlZ2lzdGVyIHNldCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDYXR3ZWFzZWwgb25seSEpCisKKyRkMDAtJGRmZglJREUtU2VsZWN0IDUgKFBvcnQgMywgUmVnaXN0ZXIgc2V0IDEsCisJCQkgICAgICBDYXR3ZWFzZWwgb25seSEpCisKKyRlMDAtJGVmZglsb2NhbCBleHBhbnNpb24gcG9ydCwgb24gQ2F0d2Vhc2VsIFotSUkgdGhlIAorCQlDYXR3ZWFzZWwgcmVnaXN0ZXJzIGFyZSBhbHNvIG1hcHBlZCBoZXJlLgorCQlOZXZlciB0b3VjaCwgdXNlIG11bHRpZGlzay5kZXZpY2UhCisJCQorJGYwMAkJcmVhZCBvbmx5LCBCeXRlLWFjY2VzczogQml0IDcgc2hvd3MgdGhlIAorCQlsZXZlbCBvZiB0aGUgSVJRLWxpbmUgb2YgSURFIHBvcnQgMC4gCisKKyRmMDEtJGYzZgltaXJyb3Igb2YgJGYwMAorCiskZjQwCQlyZWFkIG9ubHksIEJ5dGUtYWNjZXNzOiBCaXQgNyBzaG93cyB0aGUgCisJCWxldmVsIG9mIHRoZSBJUlEtbGluZSBvZiBJREUgcG9ydCAxLiAKKworJGY0MS0kZjdmCW1pcnJvciBvZiAkZjQwCisKKyRmODAJCXJlYWQgb25seSwgQnl0ZS1hY2Nlc3M6IEJpdCA3IHNob3dzIHRoZSAKKwkJbGV2ZWwgb2YgdGhlIElSUS1saW5lIG9mIElERSBwb3J0IDIuIAorCQkoQ2F0d2Vhc2VsIG9ubHkhKQorCiskZjgxLSRmYmYJbWlycm9yIG9mICRmODAKKworJGZjMAkJd3JpdGUtb25seTogV3JpdGluZyBhbnkgdmFsdWUgdG8gdGhpcworCQlyZWdpc3RlciBlbmFibGVzIElSUXMgdG8gYmUgcGFzc2VkIGZyb20gdGhlIAorCQlJREUgcG9ydHMgdG8gdGhlIFpvcnJvIGJ1cy4gVGhpcyBtZWNoYW5pc20gCisJCWhhcyBiZWVuIGltcGxlbWVudGVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCAKKwkJaGFyZGRpc2tzIHRoYXQgYXJlIGVpdGhlciBkZWZlY3RpdmUgb3IgaGF2ZQorCQlhIGJ1Z2d5IGZpcm13YXJlIGFuZCBwdWxsIHRoZSBJUlEgbGluZSB1cCAKKwkJd2hpbGUgc3RhcnRpbmcgdXAuIElmIGludGVycnVwdHMgd291bGQgCisJCWFsd2F5cyBiZSBwYXNzZWQgdG8gdGhlIGJ1cywgdGhlIGNvbXB1dGVyIAorCQltaWdodCBub3Qgc3RhcnQgdXAuIE9uY2UgZW5hYmxlZCwgdGhpcyBmbGFnIAorCQljYW4gbm90IGJlIGRpc2FibGVkIGFnYWluLiBUaGUgbGV2ZWwgb2YgdGhlIAorCQlmbGFnIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCBieSBzb2Z0d2FyZSAKKwkJKHdoYXQgZm9yPyBXcml0ZSB0byBtZSBpZiBpdCdzIG5lY2Vzc2FyeSEpLgorCiskZmMxLSRmZmYJbWlycm9yIG9mICRmYzAKKworJDEwMDAtJGZmZmYJQnVkZGhhLVJvbSB3aXRoIG9mZnNldCAkMTAwMCBpbiB0aGUgcm9tCisJCWNoaXAuIFRoZSBhZGRyZXNzZXMgJDAgdG8gJGZmZiBvZiB0aGUgcm9tIAorCQljaGlwIGNhbm5vdCBiZSByZWFkLiBSb20gaXMgQnl0ZS13aWRlIGFuZAorCQltYXBwZWQgdG8gZXZlbiBhZGRyZXNzZXMuCisKK1RoZSAgSURFIHBvcnRzIGlzc3VlIGFuIElOVDIuICBZb3UgY2FuIHJlYWQgdGhlIGxldmVsIG9mIHRoZQorSVJRLWxpbmVzICBvZiAgdGhlICBJREUtcG9ydHMgYnkgcmVhZGluZyBmcm9tIHRoZSB0aHJlZSAodHdvCitmb3IgIEJ1ZGRoYS1vbmx5KSAgcmVnaXN0ZXJzICAkZjAwLCAkZjQwIGFuZCAkZjgwLiAgVGhpcyB3YXkKK21vcmUgIHRoYW4gb25lIEkvTyByZXF1ZXN0IGNhbiBiZSBoYW5kbGVkIGFuZCB5b3UgY2FuIGVhc2lseQorZGV0ZXJtaW5lICB3aGF0ICBkcml2ZXIgIGhhcyAgdG8gc2VydmUgdGhlIElOVDIuICBCdWRkaGEgYW5kCitDYXR3ZWFzZWwgIGV4cGFuc2lvbiAgYm9hcmRzICBjYW4gaXNzdWUgYW4gSU5UNi4gIEEgc2VwYXJhdGUKK21lbW9yeSAgbWFwICBpcyBhdmFpbGFibGUgZm9yIHRoZSBJL08gbW9kdWxlIGFuZCB0aGUgc3lzb3AncworSS9PIG1vZHVsZS4KKworVGhlIElERSBwb3J0cyBhcmUgZmVkIGJ5IHRoZSBhZGRyZXNzIGxpbmVzIEEyIHRvIEE0LCBqdXN0IGFzCit0aGUgIEFtaWdhICAxMjAwICBhbmQgIEFtaWdhICA0MDAwICBJREUgcG9ydHMgYXJlLiAgVGhpcyB3YXkKK2V4aXN0aW5nICBkcml2ZXJzICBjYW4gYmUgZWFzaWx5IHBvcnRlZCB0byBCdWRkaGEuICBBIG1vdmUubAorcG9sbHMgIHR3byAgd29yZHMgIG91dCBvZiB0aGUgc2FtZSBhZGRyZXNzIG9mIElERSBwb3J0IHNpbmNlCitldmVyeSAgd29yZCAgaXMgIG1pcnJvcmVkICBvbmNlLiAgbW92ZW0gaXMgbm90IHBvc3NpYmxlLCBidXQKK2l0J3MgIG5vdCAgbmVjZXNzYXJ5ICBlaXRoZXIsICBiZWNhdXNlICB5b3UgY2FuIG9ubHkgc3BlZWR1cAorNjgwMDAgIHN5c3RlbXMgIHdpdGggIHRoaXMgIHRlY2huaXF1ZS4gICBBIDY4MDIwIHN5c3RlbSB3aXRoCitmYXN0bWVtIGlzIGZhc3RlciB3aXRoIG1vdmUubC4KKworSWYgeW91J3JlIHVzaW5nIHRoZSBtaXJyb3JlZCByZWdpc3RlcnMgb2YgdGhlIElERS1wb3J0cyB3aXRoCitBNj0xLCAgdGhlIEJ1ZGRoYSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIHNwZWVkIHRoYXQgeW91IGhhdmUKK3NlbGVjdGVkICBpbiAgdGhlICBzcGVlZCAgcmVnaXN0ZXIgKHNlZSBmdXJ0aGVyIGRvd24pLiAgV2l0aAorQTY9MSAgKGZvciBleGFtcGxlICQ4NDAgZm9yIHBvcnQgMCwgcmVnaXN0ZXIgc2V0IDApLCBhIDc4MG5zCithY2Nlc3MgIGlzIGJlaW5nIG1hZGUuICBUaGVzZSByZWdpc3RlcnMgc2hvdWxkIGJlIHVzZWQgZm9yIGEKK2NvbW1hbmQgICBhY2Nlc3MgICB0byAgdGhlICBoYXJkZGlzay9DRC1Sb20sICBzaW5jZSAgY29tbWFuZAorYWNjZXNzZXMgIGFyZSBCeXRlLXdpZGUgYW5kIGhhdmUgdG8gYmUgbWFkZSBzbG93ZXIgYWNjb3JkaW5nCit0byB0aGUgQVRBLVgzVDkgbWFudWFsLgorCitOb3cgIGZvciB0aGUgc3BlZWQtcmVnaXN0ZXI6ICBUaGUgcmVnaXN0ZXIgaXMgYnl0ZS13aWRlLCBhbmQKK29ubHkgIHRoZSAgdXBwZXIgIHRocmVlICBiaXRzIGFyZSB1c2VkIChCaXRzIDcgdG8gNSkuICBCaXQgNAorbXVzdCAgYWx3YXlzICBiZSBzZXQgdG8gMSB0byBiZSBjb21wYXRpYmxlIHdpdGggbGF0ZXIgQnVkZGhhCit2ZXJzaW9ucyAgKGlmICBJJ2xsICBldmVyICB1cGRhdGUgdGhpcyBvbmUpLiAgSSBwcmVzdW1lIHRoYXQKK0knbGwgIG5ldmVyIHVzZSB0aGUgbG93ZXIgZm91ciBiaXRzLCBidXQgdGhleSBoYXZlIHRvIGJlIHNldAordG8gMSBieSBkZWZpbml0aW9uLgorICBUaGUgIHZhbHVlcyBpbiB0aGlzIHRhYmxlIGhhdmUgdG8gYmUgc2hpZnRlZCA1IGJpdHMgdG8gdGhlCitsZWZ0IGFuZCBvcidkIHdpdGggJDFmICh0aGlzIHNldHMgdGhlIGxvd2VyIDUgYml0cykuCisKK0FsbCAgdGhlIHRpbWluZ3MgaGF2ZSBpbiBjb21tb246ICBTZWxlY3QgYW5kIElPUi9JT1cgcmlzZSBhdAordGhlICBzYW1lICB0aW1lLiAgIElPUiAgYW5kICBJT1cgaGF2ZSBhIHByb3BhZ2F0aW9uIGRlbGF5IG9mCithYm91dCAgMzBucyAgdG8gIHRoZSBjbG9ja3Mgb24gdGhlIFpvcnJvIGJ1cywgdGhhdCdzIHdoeSB0aGUKK3ZhbHVlcyAgYXJlIG5vIG11bHRpcGxlIG9mIDcxLiAgT25lIGNsb2NrLWN5Y2xlIGlzIDcxbnMgbG9uZworKGV4YWN0bHkgNzAsNSBhdCAxNCwxOCBNaHogb24gUEFMIHN5c3RlbXMpLgorCit2YWx1ZSAwIChEZWZhdWx0IGFmdGVyIHJlc2V0KQorCis0OTducyBTZWxlY3QgKDcgY2xvY2sgY3ljbGVzKSAsIElPUi9JT1cgYWZ0ZXIgMTcybnMgKDIgY2xvY2sgY3ljbGVzKQorKHNhbWUgdGltaW5nIGFzIHRoZSBBbWlnYSAxMjAwIGRvZXMgb24gaXQncyBJREUgcG9ydCB3aXRob3V0CithY2NlbGVyYXRvciBjYXJkKQorCit2YWx1ZSAxCisKKzYzOW5zIFNlbGVjdCAoOSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDI0M25zICgzIGNsb2NrIGN5Y2xlcykKKwordmFsdWUgMgorCis3ODFucyBTZWxlY3QgKDExIGNsb2NrIGN5Y2xlcyksIElPUi9JT1cgYWZ0ZXIgMzE0bnMgKDQgY2xvY2sgY3ljbGVzKQorCit2YWx1ZSAzCisKKzM1NW5zIFNlbGVjdCAoNSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDEwMW5zICgxIGNsb2NrIGN5Y2xlKQorCit2YWx1ZSA0CisKKzM1NW5zIFNlbGVjdCAoNSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDE3Mm5zICgyIGNsb2NrIGN5Y2xlcykKKwordmFsdWUgNQorCiszNTVucyBTZWxlY3QgKDUgY2xvY2sgY3ljbGVzKSwgSU9SL0lPVyBhZnRlciAyNDNucyAoMyBjbG9jayBjeWNsZXMpCisKK3ZhbHVlIDYKKworMTA2NW5zIFNlbGVjdCAoMTUgY2xvY2sgY3ljbGVzKSwgSU9SL0lPVyBhZnRlciAzMTRucyAoNCBjbG9jayBjeWNsZXMpCisKK3ZhbHVlIDcKKworMzU1bnMgU2VsZWN0LCAoNSBjbG9jayBjeWNsZXMpLCBJT1IvSU9XIGFmdGVyIDEwMW5zICgxIGNsb2NrIGN5Y2xlKQorCitXaGVuIGFjY2Vzc2luZyBJREUgcmVnaXN0ZXJzIHdpdGggQTY9MSAoZm9yIGV4YW1wbGUgJDg0eCksCit0aGUgdGltaW5nIHdpbGwgYWx3YXlzIGJlIG1vZGUgMCA4LWJpdCBjb21wYXRpYmxlLCBubyBtYXR0ZXIKK3doYXQgeW91IGhhdmUgc2VsZWN0ZWQgaW4gdGhlIHNwZWVkIHJlZ2lzdGVyOgorCis3ODFucyBzZWxlY3QsIElPUi9JT1cgYWZ0ZXIgNCBjbG9jayBjeWNsZXMgKD0zMTRucykgYWt0aXZlLiAKKworQWxsICB0aGUgIHRpbWluZ3Mgd2l0aCBhIHZlcnkgc2hvcnQgc2VsZWN0LXNpZ25hbCAodGhlIDM1NW5zCitmYXN0ICBhY2Nlc3NlcykgIGRlcGVuZCAgb24gdGhlIGFjY2VsZXJhdG9yIGNhcmQgdXNlZCBpbiB0aGUKK3N5c3RlbTogIFNvbWV0aW1lcyB0d28gbW9yZSBjbG9jayBjeWNsZXMgYXJlIGluc2VydGVkIGJ5IHRoZQorYnVzICBpbnRlcmZhY2UsICBtYWtpbmcgIHRoZSAgd2hvbGUgYWNjZXNzIDQ5N25zIGxvbmcuICBUaGlzCitkb2Vzbid0ICBhZmZlY3QgIHRoZSAgcmVsaWFiaWxpdHkgIG9mIHRoZSBjb250cm9sbGVyIG5vciB0aGUKK3BlcmZvcm1hbmNlICBvZiAgdGhlICBjYXJkLCAgc2luY2UgIHRoaXMgZG9lc24ndCBoYXBwZW4gdmVyeQorb2Z0ZW4uCisKK0FsbCAgdGhlICB0aW1pbmdzICBhcmUgIGNhbGN1bGF0ZWQgIGFuZCAgb25seSAgY29uZmlybWVkICBieQorbWVhc3VyZW1lbnRzICB0aGF0IGFsbG93ZWQgbWUgdG8gY291bnQgdGhlIGNsb2NrIGN5Y2xlcy4gIElmCit0aGUgIHN5c3RlbSAgaXMgY2xvY2tlZCBieSBhbiBvc2NpbGxhdG9yIG90aGVyIHRoYW4gMjgsMzc1MTYKK01oeiAgKGZvciAgZXhhbXBsZSAgdGhlICBOVFNDLWZyZXF1ZW5jeSAgMjgsNjM2MzYgTWh6KSwgZWFjaAorY2xvY2sgIGN5Y2xlIGlzIHNob3J0ZW5lZCB0byBhIGJpdCBsZXNzIHRoYW4gNzBucyAobm90IHdvcnRoCittZW50aW9uaW5nKS4gICBZb3UgIGNvdWxkIHRoaW5rIG9mIGEgc21hbGwgcGVyZm9ybWFuY2UgYm9vc3QKK2J5ICBvdmVyY2xvY2tpbmcgIHRoZSAgc3lzdGVtLCAgYnV0ICB5b3Ugd291bGQgZWl0aGVyIG5lZWQgYQorbXVsdGlzeW5jICBtb25pdG9yLCAgb3IgIGEgIGdyYXBoaWNzIGNhcmQsIGFuZCB5b3VyIGludGVybmFsCitkaXNrZHJpdmUgd291bGQgZ28gY3JhenksIHRoYXQncyB3aHkgeW91IHNob3VsZG4ndCB0dW5lIHlvdXIKK0FtaWdhIHRoaXMgd2F5LgorCitHaXZpbmcgIHlvdSAgdGhlICBwb3NzaWJpbGl0eSAgdG8gIHdyaXRlICBzb2Z0d2FyZSAgdGhhdCAgaXMKK2NvbXBhdGlibGUgIHdpdGggYm90aCB0aGUgQnVkZGhhIGFuZCB0aGUgQ2F0d2Vhc2VsIFotSUksIFRoZQorQnVkZGhhICBhY3RzICBqdXN0ICBsaWtlICBhICBDYXR3ZWFzZWwgIFotSUkgIHdpdGggbm8gZGV2aWNlCitjb25uZWN0ZWQgIHRvICB0aGUgIHRoaXJkICBJREUtcG9ydC4gICBUaGUgSVJRLXJlZ2lzdGVyICRmODAKK2Fsd2F5cyAgc2hvd3MgYSAibm8gSVJRIGhlcmUiIG9uIHRoZSBCdWRkaGEsIGFuZCBhY2Nlc3NlcyB0bwordGhlICB0aGlyZCAgSURFICBwb3J0ICBhcmUgIGdvaW5nIGludG8gZGF0YSdzIE5pcndhbmEgb24gdGhlCitCdWRkaGEuCisKKwkJCSAgICBKZW5zIFNjaPZuZmVsZCBmZWJydWFyeSAxOXRoLCAxOTk3CisJCQkJCXVwZGF0ZWQgbWF5IDI3dGgsIDE5OTcKKwkJCSAgICAgZU1haWw6IHN5c29wQG5vc3RsZ2ljLnRuZy5vY2hlLmRlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL202OGsva2VybmVsLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOTFiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL202OGsva2VybmVsLW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsOTY0IEBACisKKworCQkJCSAgQ29tbWFuZCBMaW5lIE9wdGlvbnMgZm9yIExpbnV4L202OGsKKwkJCQkgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xhc3QgVXBkYXRlOiAyIE1heSAxOTk5CitMaW51eC9tNjhrIHZlcnNpb246IDIuMi42CitBdXRob3I6IFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlIChSb21hbiBIb2RlaykKK1VwZGF0ZTogamRzQGtvbS5hdWMuZGsgKEplcyBTb3JlbnNlbikgYW5kIGZhcUBsaW51eC1tNjhrLm9yZyAoQ2hyaXMgTGF3cmVuY2UpCisKKzApIEludHJvZHVjdGlvbgorPT09PT09PT09PT09PT09CisKKyAgT2Z0ZW4gSSd2ZSBiZWVuIGFza2VkIHdoaWNoIGNvbW1hbmQgbGluZSBvcHRpb25zIHRoZSBMaW51eC9tNjhrCitrZXJuZWwgdW5kZXJzdGFuZHMsIG9yIGhvdyB0aGUgZXhhY3Qgc3ludGF4IGZvciB0aGUgLi4uIG9wdGlvbiBpcywgb3IKKy4uLiBhYm91dCB0aGUgb3B0aW9uIC4uLiAuIEkgaG9wZSwgdGhpcyBkb2N1bWVudCBzdXBwbGllcyBhbGwgdGhlCithbnN3ZXJzLi4uCisKKyAgTm90ZSB0aGF0IHNvbWUgb3B0aW9ucyBtaWdodCBiZSBvdXRkYXRlZCwgdGhlaXIgZGVzY3JpcHRpb25zIGJlaW5nCitpbmNvbXBsZXRlIG9yIG1pc3NpbmcuIFBsZWFzZSB1cGRhdGUgdGhlIGluZm9ybWF0aW9uIGFuZCBzZW5kIGluIHRoZQorcGF0Y2hlcy4KKworCisxKSBPdmVydmlldyBvZiB0aGUgS2VybmVsJ3MgT3B0aW9uIFByb2Nlc3NpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUga2VybmVsIGtub3dzIHRocmVlIGtpbmRzIG9mIG9wdGlvbnMgb24gaXRzIGNvbW1hbmQgbGluZToKKworICAxKSBrZXJuZWwgb3B0aW9ucworICAyKSBlbnZpcm9ubWVudCBzZXR0aW5ncworICAzKSBhcmd1bWVudHMgZm9yIGluaXQKKworVG8gd2hpY2ggb2YgdGhlc2UgY2xhc3NlcyBhbiBhcmd1bWVudCBiZWxvbmdzIGlzIGRldGVybWluZWQgYXMKK2ZvbGxvd3M6IElmIHRoZSBvcHRpb24gaXMga25vd24gdG8gdGhlIGtlcm5lbCBpdHNlbGYsIGkuZS4gaWYgdGhlIG5hbWUKKyh0aGUgcGFydCBiZWZvcmUgdGhlICc9Jykgb3IsIGluIHNvbWUgY2FzZXMsIHRoZSB3aG9sZSBhcmd1bWVudCBzdHJpbmcKK2lzIGtub3duIHRvIHRoZSBrZXJuZWwsIGl0IGJlbG9uZ3MgdG8gY2xhc3MgMS4gT3RoZXJ3aXNlLCBpZiB0aGUKK2FyZ3VtZW50IGNvbnRhaW5zIGFuICc9JywgaXQgaXMgb2YgY2xhc3MgMiwgYW5kIHRoZSBkZWZpbml0aW9uIGlzIHB1dAoraW50byBpbml0J3MgZW52aXJvbm1lbnQuIEFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBpbml0IGFzCitjb21tYW5kIGxpbmUgb3B0aW9ucy4KKworICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdmFsaWQga2VybmVsIG9wdGlvbnMgZm9yIExpbnV4L202OGsgaW4KK3RoZSB2ZXJzaW9uIG1lbnRpb25lZCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLiBMYXRlciByZXZpc2lvbnMgbWF5CithZGQgbmV3IHN1Y2ggb3B0aW9ucywgYW5kIHNvbWUgbWF5IGJlIG1pc3NpbmcgaW4gb2xkZXIgdmVyc2lvbnMuCisKKyAgSW4gZ2VuZXJhbCwgdGhlIHZhbHVlICh0aGUgcGFydCBhZnRlciB0aGUgJz0nKSBvZiBhbiBvcHRpb24gaXMgYQorbGlzdCBvZiB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZXNlIHZhbHVlcworaXMgdXAgdG8gdGhlIGRyaXZlciB0aGF0ICJvd25zIiB0aGUgb3B0aW9uLiBUaGlzIGFzc29jaWF0aW9uIG9mCitvcHRpb25zIHdpdGggZHJpdmVycyBpcyBhbHNvIHRoZSByZWFzb24gdGhhdCBzb21lIGFyZSBmdXJ0aGVyCitzdWJkaXZpZGVkLgorCisKKzIpIEdlbmVyYWwgS2VybmVsIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4xKSByb290PQorLS0tLS0tLS0tLQorCitTeW50YXg6IHJvb3Q9L2Rldi88ZGV2aWNlPgorICAgIG9yOiByb290PTxoZXhfbnVtYmVyPgorCitUaGlzIHRlbGxzIHRoZSBrZXJuZWwgd2hpY2ggZGV2aWNlIGl0IHNob3VsZCBtb3VudCBhcyB0aGUgcm9vdAorZmlsZXN5c3RlbS4gVGhlIGRldmljZSBtdXN0IGJlIGEgYmxvY2sgZGV2aWNlIHdpdGggYSB2YWxpZCBmaWxlc3lzdGVtCitvbiBpdC4KKworICBUaGUgZmlyc3Qgc3ludGF4IGdpdmVzIHRoZSBkZXZpY2UgYnkgbmFtZS4gVGhlc2UgbmFtZXMgYXJlIGNvbnZlcnRlZAoraW50byBhIG1ham9yL21pbm9yIG51bWJlciBpbnRlcm5hbGx5IGluIHRoZSBrZXJuZWwgaW4gYW4gdW51c3VhbCB3YXkuCitOb3JtYWxseSwgdGhpcyAiY29udmVyc2lvbiIgaXMgZG9uZSBieSB0aGUgZGV2aWNlIGZpbGVzIGluIC9kZXYsIGJ1dAordGhpcyBpc24ndCBwb3NzaWJsZSBoZXJlLCBiZWNhdXNlIHRoZSByb290IGZpbGVzeXN0ZW0gKHdpdGggL2RldikKK2lzbid0IG1vdW50ZWQgeWV0Li4uIFNvIHRoZSBrZXJuZWwgcGFyc2VzIHRoZSBuYW1lIGl0c2VsZiwgd2l0aCBzb21lCitoYXJkY29kZWQgbmFtZSB0byBudW1iZXIgbWFwcGluZ3MuIFRoZSBuYW1lIG11c3QgYWx3YXlzIGJlIGEKK2NvbWJpbmF0aW9uIG9mIHR3byBvciB0aHJlZSBsZXR0ZXJzLCBmb2xsb3dlZCBieSBhIGRlY2ltYWwgbnVtYmVyLgorVmFsaWQgbmFtZXMgYXJlOgorCisgIC9kZXYvcmFtOiAtPiAweDAxMDAgKGluaXRpYWwgcmFtZGlzaykKKyAgL2Rldi9oZGE6IC0+IDB4MDMwMCAoZmlyc3QgSURFIGRpc2spCisgIC9kZXYvaGRiOiAtPiAweDAzNDAgKHNlY29uZCBJREUgZGlzaykKKyAgL2Rldi9zZGE6IC0+IDB4MDgwMCAoZmlyc3QgU0NTSSBkaXNrKQorICAvZGV2L3NkYjogLT4gMHgwODEwIChzZWNvbmQgU0NTSSBkaXNrKQorICAvZGV2L3NkYzogLT4gMHgwODIwICh0aGlyZCBTQ1NJIGRpc2spCisgIC9kZXYvc2RkOiAtPiAweDA4MzAgKGZvcnRoIFNDU0kgZGlzaykKKyAgL2Rldi9zZGU6IC0+IDB4MDg0MCAoZmlmdGggU0NTSSBkaXNrKQorICAvZGV2L2ZkIDogLT4gMHgwMjAwIChmbG9wcHkgZGlzaykKKyAgL2Rldi94ZGE6IC0+IDB4MGMwMCAoZmlyc3QgWFQgZGlzaywgdW51c2VkIGluIExpbnV4L202OGspCisgIC9kZXYveGRiOiAtPiAweDBjNDAgKHNlY29uZCBYVCBkaXNrLCB1bnVzZWQgaW4gTGludXgvbTY4aykKKyAgL2Rldi9hZGE6IC0+IDB4MWMwMCAoZmlyc3QgQUNTSSBkZXZpY2UpCisgIC9kZXYvYWRiOiAtPiAweDFjMTAgKHNlY29uZCBBQ1NJIGRldmljZSkKKyAgL2Rldi9hZGM6IC0+IDB4MWMyMCAodGhpcmQgQUNTSSBkZXZpY2UpCisgIC9kZXYvYWRkOiAtPiAweDFjMzAgKGZvcnRoIEFDU0kgZGV2aWNlKQorCitUaGUgbGFzdCBmb3VyIG5hbWVzIGFyZSBhdmFpbGFibGUgb25seSBpZiB0aGUga2VybmVsIGhhcyBiZWVuIGNvbXBpbGVkCit3aXRoIEF0YXJpIGFuZCBBQ1NJIHN1cHBvcnQuCisKKyAgVGhlIG5hbWUgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRlY2ltYWwgbnVtYmVyLCB0aGF0IHN0YW5kcyBmb3IgdGhlCitwYXJ0aXRpb24gbnVtYmVyLiBJbnRlcm5hbGx5LCB0aGUgdmFsdWUgb2YgdGhlIG51bWJlciBpcyBqdXN0CithZGRlZCB0byB0aGUgZGV2aWNlIG51bWJlciBtZW50aW9uZWQgaW4gdGhlIHRhYmxlIGFib3ZlLiBUaGUKK2V4Y2VwdGlvbnMgYXJlIC9kZXYvcmFtIGFuZCAvZGV2L2ZkLCB3aGVyZSAvZGV2L3JhbSByZWZlcnMgdG8gYW4KK2luaXRpYWwgcmFtZGlzayBsb2FkZWQgYnkgeW91ciBib290c3RyYXAgcHJvZ3JhbSAocGxlYXNlIGNvbnN1bHQgdGhlCitpbnN0cnVjdGlvbnMgZm9yIHlvdXIgYm9vdHN0cmFwIHByb2dyYW0gdG8gZmluZCBvdXQgaG93IHRvIGxvYWQgYW4KK2luaXRpYWwgcmFtZGlzaykuIEFzIG9mIGtlcm5lbCB2ZXJzaW9uIDIuMC4xOCB5b3UgbXVzdCBzcGVjaWZ5CisvZGV2L3JhbSBhcyB0aGUgcm9vdCBkZXZpY2UgaWYgeW91IHdhbnQgdG8gYm9vdCBmcm9tIGFuIGluaXRpYWwKK3JhbWRpc2suIEZvciB0aGUgZmxvcHB5IGRldmljZXMsIC9kZXYvZmQsIHRoZSBudW1iZXIgc3RhbmRzIGZvciB0aGUKK2Zsb3BweSBkcml2ZSBudW1iZXIgKHRoZXJlIGFyZSBubyBwYXJ0aXRpb25zIG9uIGZsb3BweSBkaXNrcykuIEkuZS4sCisvZGV2L2ZkMCBzdGFuZHMgZm9yIHRoZSBmaXJzdCBkcml2ZSwgL2Rldi9mZDEgZm9yIHRoZSBzZWNvbmQsIGFuZCBzbworb24uIFNpbmNlIHRoZSBudW1iZXIgaXMganVzdCBhZGRlZCwgeW91IGNhbiBhbHNvIGZvcmNlIHRoZSBkaXNrIGZvcm1hdAorYnkgYWRkaW5nIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAzLiBJZiB5b3UgbG9vayBpbnRvIHlvdXIgL2RldgorZGlyZWN0b3J5LCB1c2UgY2FuIHNlZSB0aGUgL2Rldi9mZDBENzIwIGhhcyBtYWpvciAyIGFuZCBtaW5vciAxNi4gWW91CitjYW4gc3BlY2lmeSB0aGlzIGRldmljZSBmb3IgdGhlIHJvb3QgRlMgYnkgd3JpdGluZyAicm9vdD0vZGV2L2ZkMTYiIG9uCit0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKworW1N0cmFuZ2UgYW5kIG1heWJlIHVuaW50ZXJlc3Rpbmcgc3R1ZmYgT05dCisKKyAgVGhpcyB1bnVzdWFsIHRyYW5zbGF0aW9uIG9mIGRldmljZSBuYW1lcyBoYXMgc29tZSBzdHJhbmdlCitjb25zZXF1ZW5jZXM6IElmLCBmb3IgZXhhbXBsZSwgeW91IGhhdmUgYSBzeW1ib2xpYyBsaW5rIGZyb20gL2Rldi9mZAordG8gL2Rldi9mZDBENzIwIGFzIGFuIGFiYnJldmlhdGlvbiBmb3IgZmxvcHB5IGRyaXZlciAjMCBpbiBERCBmb3JtYXQsCit5b3UgY2Fubm90IHVzZSB0aGlzIG5hbWUgZm9yIHNwZWNpZnlpbmcgdGhlIHJvb3QgZGV2aWNlLCBiZWNhdXNlIHRoZQora2VybmVsIGNhbm5vdCBzZWUgdGhpcyBzeW1saW5rIGJlZm9yZSBtb3VudGluZyB0aGUgcm9vdCBGUyBhbmQgaXQKK2lzbid0IGluIHRoZSB0YWJsZSBhYm92ZS4gSWYgeW91IHVzZSBpdCwgdGhlIHJvb3QgZGV2aWNlIHdpbGwgbm90IGJlIAorc2V0IGF0IGFsbCwgd2l0aG91dCBhbiBlcnJvciBtZXNzYWdlLiBBbm90aGVyIGV4YW1wbGU6IFlvdSBjYW5ub3QgdXNlIGEKK3BhcnRpdGlvbiBvbiBlLmcuIHRoZSBzaXh0aCBTQ1NJIGRpc2sgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbSwgaWYgeW91Cit3YW50IHRvIHNwZWNpZnkgaXQgYnkgbmFtZS4gVGhpcyBpcywgYmVjYXVzZSBvbmx5IHRoZSBkZXZpY2VzIHVwIHRvCisvZGV2L3NkZSBhcmUgaW4gdGhlIHRhYmxlIGFib3ZlLCBidXQgbm90IC9kZXYvc2RmLiBBbHRob3VnaCwgeW91IGNhbgordXNlIHRoZSBzaXh0aCBTQ1NJIGRpc2sgZm9yIHRoZSByb290IEZTLCBidXQgeW91IGhhdmUgdG8gc3BlY2lmeSB0aGUKK2RldmljZSBieSBudW1iZXIuLi4gKHNlZSBiZWxvdykuIE9yLCBldmVuIG1vcmUgc3RyYW5nZSwgeW91IGNhbiB1c2UgdGhlCitmYWN0IHRoYXQgdGhlcmUgaXMgbm8gcmFuZ2UgY2hlY2tpbmcgb2YgdGhlIHBhcnRpdGlvbiBudW1iZXIsIGFuZCB5b3VyCitrbm93bGVkZ2UgdGhhdCBlYWNoIGRpc2sgdXNlcyAxNiBtaW5vcnMsIGFuZCB3cml0ZSAicm9vdD0vZGV2L3NkZTE3IgorKGZvciAvZGV2L3NkZjEpLgorCitbU3RyYW5nZSBhbmQgbWF5YmUgdW5pbnRlcmVzdGluZyBzdHVmZiBPRkZdCisKKyAgSWYgdGhlIGRldmljZSBjb250YWluaW5nIHlvdXIgcm9vdCBwYXJ0aXRpb24gaXNuJ3QgaW4gdGhlIHRhYmxlCithYm92ZSwgeW91IGNhbiBhbHNvIHNwZWNpZnkgaXQgYnkgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuIFRoZXNlIGFyZQord3JpdHRlbiBpbiBoZXgsIHdpdGggbm8gcHJlZml4IGFuZCBubyBzZXBhcmF0b3IgYmV0d2Vlbi4gRS5nLiwgaWYgeW91CitoYXZlIGEgQ0Qgd2l0aCBjb250ZW50cyBhcHByb3ByaWF0ZSBhcyBhIHJvb3QgZmlsZXN5c3RlbSBpbiB0aGUgZmlyc3QKK1NDU0kgQ0QtUk9NIGRyaXZlLCB5b3UgYm9vdCBmcm9tIGl0IGJ5ICJyb290PTBiMDAiLiBIZXJlLCBoZXggIjBiIiA9CitkZWNpbWFsIDExIGlzIHRoZSBtYWpvciBvZiBTQ1NJIENELVJPTXMsIGFuZCB0aGUgbWlub3IgMCBzdGFuZHMgZm9yCit0aGUgZmlyc3Qgb2YgdGhlc2UuIFlvdSBjYW4gZmluZCBvdXQgYWxsIHZhbGlkIG1ham9yIG51bWJlcnMgYnkKK2xvb2tpbmcgaW50byBpbmNsdWRlL2xpbnV4L21ham9yLmguCisKKworMi4yKSBybywgcncKKy0tLS0tLS0tLS0tCisKK1N5bnRheDogcm8KKyAgICBvcjogcncKKworVGhlc2UgdHdvIG9wdGlvbnMgdGVsbCB0aGUga2VybmVsIHdoZXRoZXIgaXQgc2hvdWxkIG1vdW50IHRoZSByb290CitmaWxlc3lzdGVtIHJlYWQtb25seSBvciByZWFkLXdyaXRlLiBUaGUgZGVmYXVsdCBpcyByZWFkLW9ubHksIGV4Y2VwdAorZm9yIHJhbWRpc2tzLCB3aGljaCBkZWZhdWx0IHRvIHJlYWQtd3JpdGUuCisKKworMi4zKSBkZWJ1ZworLS0tLS0tLS0tLQorCitTeW50YXg6IGRlYnVnCisKK1RoaXMgcmFpc2VzIHRoZSBrZXJuZWwgbG9nIGxldmVsIHRvIDEwICh0aGUgZGVmYXVsdCBpcyA3KS4gVGhpcyBpcyB0aGUKK3NhbWUgbGV2ZWwgYXMgc2V0IGJ5IHRoZSAiZG1lc2ciIGNvbW1hbmQsIGp1c3QgdGhhdCB0aGUgbWF4aW11bSBsZXZlbAorc2VsZWN0YWJsZSBieSBkbWVzZyBpcyA4LgorCisKKzIuNCkgZGVidWc9CistLS0tLS0tLS0tLQorCitTeW50YXg6IGRlYnVnPTxkZXZpY2U+CisKK1RoaXMgb3B0aW9uIGNhdXNlcyBjZXJ0YWluIGtlcm5lbCBtZXNzYWdlcyBiZSBwcmludGVkIHRvIHRoZSBzZWxlY3RlZAorZGVidWdnaW5nIGRldmljZS4gVGhpcyBjYW4gYWlkIGRlYnVnZ2luZyB0aGUga2VybmVsLCBzaW5jZSB0aGUKK21lc3NhZ2VzIGNhbiBiZSBjYXB0dXJlZCBhbmQgYW5hbHl6ZWQgb24gc29tZSBvdGhlciBtYWNoaW5lLiBXaGljaAorZGV2aWNlcyBhcmUgcG9zc2libGUgZGVwZW5kcyBvbiB0aGUgbWFjaGluZSB0eXBlLiBUaGVyZSBhcmUgbm8gY2hlY2tzCitmb3IgdGhlIHZhbGlkaXR5IG9mIHRoZSBkZXZpY2UgbmFtZS4gSWYgdGhlIGRldmljZSBpc24ndCBpbXBsZW1lbnRlZCwKK25vdGhpbmcgaGFwcGVucy4KKworICBNZXNzYWdlcyBsb2dnZWQgdGhpcyB3YXkgYXJlIGluIGdlbmVyYWwgc3RhY2sgZHVtcHMgYWZ0ZXIga2VybmVsCittZW1vcnkgZmF1bHRzIG9yIGJhZCBrZXJuZWwgdHJhcHMsIGFuZCBrZXJuZWwgcGFuaWNzLiBUbyBiZSBleGFjdDogYWxsCittZXNzYWdlcyBvZiBsZXZlbCAwIChwYW5pYyBtZXNzYWdlcykgYW5kIGFsbCBtZXNzYWdlcyBwcmludGVkIHdoaWxlCit0aGUgbG9nIGxldmVsIGlzIDggb3IgbW9yZSAodGhlaXIgbGV2ZWwgZG9lc24ndCBtYXR0ZXIpLiBCZWZvcmUgc3RhY2sKK2R1bXBzLCB0aGUga2VybmVsIHNldHMgdGhlIGxvZyBsZXZlbCB0byAxMCBhdXRvbWF0aWNhbGx5LiBBIGxldmVsIG9mCithdCBsZWFzdCA4IGNhbiBhbHNvIGJlIHNldCBieSB0aGUgImRlYnVnIiBjb21tYW5kIGxpbmUgb3B0aW9uIChzZWUKKzIuMykgYW5kIGF0IHJ1biB0aW1lIHdpdGggImRtZXNnIC1uIDgiLgorCitEZXZpY2VzIHBvc3NpYmxlIGZvciBBbWlnYToKKworIC0gInNlciI6IGJ1aWx0LWluIHNlcmlhbCBwb3J0OyBwYXJhbWV0ZXJzOiA5NjAwYnBzLCA4TjEKKyAtICJtZW0iOiBTYXZlIHRoZSBtZXNzYWdlcyB0byBhIHJlc2VydmVkIGFyZWEgaW4gY2hpcCBtZW0uIEFmdGVyCisgICAgICAgICAgcmVib290aW5nLCB0aGV5IGNhbiBiZSByZWFkIHVuZGVyIEFtaWdhT1Mgd2l0aCB0aGUgdG9vbAorICAgICAgICAgICdkbWVzZycuCisKK0RldmljZXMgcG9zc2libGUgZm9yIEF0YXJpOgorCisgLSAic2VyMSI6IFNULU1GUCBzZXJpYWwgcG9ydCAoIk1vZGVtMSIpOyBwYXJhbWV0ZXJzOiA5NjAwYnBzLCA4TjEKKyAtICJzZXIyIjogU0NDIGNoYW5uZWwgQiBzZXJpYWwgcG9ydCAoIk1vZGVtMiIpOyBwYXJhbWV0ZXJzOiA5NjAwYnBzLCA4TjEKKyAtICJzZXIiIDogZGVmYXVsdCBzZXJpYWwgcG9ydAorICAgICAgICAgICBUaGlzIGlzICJzZXIyIiBmb3IgYSBGYWxjb24sIGFuZCAic2VyMSIgZm9yIGFueSBvdGhlciBtYWNoaW5lCisgLSAibWlkaSI6IFRoZSBNSURJIHBvcnQ7IHBhcmFtZXRlcnM6IDMxMjUwYnBzLCA4TjEKKyAtICJwYXIiIDogcGFyYWxsZWwgcG9ydAorICAgICAgICAgICBUaGUgcHJpbnRpbmcgcm91dGluZSBmb3IgdGhpcyBpbXBsZW1lbnRzIGEgdGltZW91dCBmb3IgdGhlCisgICAgICAgICAgIGNhc2UgdGhlcmUncyBubyBwcmludGVyIGNvbm5lY3RlZCAoZWxzZSB0aGUga2VybmVsIHdvdWxkCisgICAgICAgICAgIGxvY2sgdXApLiBUaGUgdGltZW91dCBpcyBub3QgZXhhY3QsIGJ1dCB1c3VhbGx5IGEgZmV3CisgICAgICAgICAgIHNlY29uZHMuCisKKworMi42KSByYW1kaXNrPQorLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IHJhbWRpc2s9PHNpemU+CisKKyAgVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gc2V0IHVwIGEgcmFtZGlzayBvZiB0aGUgZ2l2ZW4KK3NpemUgaW4gS0J5dGVzLiBEbyBub3QgdXNlIHRoaXMgb3B0aW9uIGlmIHRoZSByYW1kaXNrIGNvbnRlbnRzIGFyZQorcGFzc2VkIGJ5IGJvb3RzdHJhcCEgSW4gdGhpcyBjYXNlLCB0aGUgc2l6ZSBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5CithbmQgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlbi4KKworICBUaGUgb25seSBhcHBsaWNhdGlvbiBpcyBmb3Igcm9vdCBmaWxlc3lzdGVtcyBvbiBmbG9wcHkgZGlza3MsIHRoYXQKK3Nob3VsZCBiZSBsb2FkZWQgaW50byBtZW1vcnkuIFRvIGRvIHRoYXQsIHNlbGVjdCB0aGUgY29ycmVzcG9uZGluZworc2l6ZSBvZiB0aGUgZGlzayBhcyByYW1kaXNrIHNpemUsIGFuZCBzZXQgdGhlIHJvb3QgZGV2aWNlIHRvIHRoZSBkaXNrCitkcml2ZSAod2l0aCAicm9vdD0iKS4KKworCisyLjcpIHN3YXA9CisyLjgpIGJ1ZmY9CistLS0tLS0tLS0tLQorCisgIEkgY2FuJ3QgZmluZCBhbnkgc2lnbiBvZiB0aGVzZSBvcHRpb25zIGluIDIuMi42LgorCisKKzMpIEdlbmVyYWwgRGV2aWNlIE9wdGlvbnMgKEFtaWdhIGFuZCBBdGFyaSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMy4xKSBldGhlcj0KKy0tLS0tLS0tLS0tCisKK1N5bnRheDogZXRoZXI9WzxpcnE+Wyw8YmFzZV9hZGRyPlssPG1lbV9zdGFydD5bLDxtZW1fZW5kPl1dXV0sPGRldi1uYW1lPgorCisgIDxkZXYtbmFtZT4gaXMgdGhlIG5hbWUgb2YgYSBuZXQgZHJpdmVyLCBhcyBzcGVjaWZpZWQgaW4KK2RyaXZlcnMvbmV0L1NwYWNlLmMgaW4gdGhlIExpbnV4IHNvdXJjZS4gTW9zdCBwcm9taW5lbnQgYXJlIGV0aDAsIC4uLgorZXRoMywgc2wwLCAuLi4gc2wzLCBwcHAwLCAuLi4sIHBwcDMsIGR1bW15LCBhbmQgbG8uCisKKyAgVGhlIG5vbi1ldGhlcm5ldCBkcml2ZXJzIChzbCwgcHBwLCBkdW1teSwgbG8pIG9idmlvdXNseSBpZ25vcmUgdGhlCitzZXR0aW5ncyBieSB0aGlzIG9wdGlvbnMuIEFsc28sIHRoZSBleGlzdGluZyBldGhlcm5ldCBkcml2ZXJzIGZvcgorTGludXgvbTY4ayAoYXJpYWRuZSwgYTIwNjUsIGh5ZHJhKSBkb24ndCB1c2UgdGhlbSBiZWNhdXNlIFpvcnJvIGJvYXJkcworYXJlIHJlYWxseSBQbHVnLSduLVBsYXksIHNvIHRoZSAiZXRoZXI9IiBvcHRpb24gaXMgdXNlbGVzcyBhbHRvZ2V0aGVyCitmb3IgTGludXgvbTY4ay4KKworCiszLjIpIGhkPQorLS0tLS0tLS0KKworU3ludGF4OiBoZD08Y3lsaW5kZXJzPiw8aGVhZHM+LDxzZWN0b3JzPgorCisgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRpc2sgZ2VvbWV0cnkgb2YgYW4gSURFIGRpc2suIFRoZSBmaXJzdCBoZD0KK29wdGlvbiBpcyBmb3IgdGhlIGZpcnN0IElERSBkaXNrLCB0aGUgc2Vjb25kIGZvciB0aGUgc2Vjb25kIG9uZS4KKyhJLmUuLCB5b3UgY2FuIGdpdmUgdGhpcyBvcHRpb24gdHdpY2UuKSBJbiBtb3N0IGNhc2VzLCB5b3Ugd29uJ3QgaGF2ZQordG8gdXNlIHRoaXMgb3B0aW9uLCBzaW5jZSB0aGUga2VybmVsIGNhbiBvYnRhaW4gdGhlIGdlb21ldHJ5IGRhdGEKK2l0c2VsZi4gSXQgZXhpc3RzIGp1c3QgZm9yIHRoZSBjYXNlIHRoYXQgdGhpcyBmYWlscyBmb3Igb25lIG9mIHlvdXIKK2Rpc2tzLgorCisKKzMuMykgbWF4X3Njc2lfbHVucz0KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBtYXhfc2NzaV9sdW5zPTxuPgorCisgIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIExVTnMgKGxvZ2ljYWwgdW5pdHMpIG9mIFNDU0kgZGV2aWNlcyB0bworYmUgc2Nhbm5lZC4gVmFsaWQgdmFsdWVzIGZvciA8bj4gYXJlIGJldHdlZW4gMSBhbmQgOC4gRGVmYXVsdCBpcyA4IGlmCisiUHJvYmUgYWxsIExVTnMgb24gZWFjaCBTQ1NJIGRldmljZSIgd2FzIHNlbGVjdGVkIGR1cmluZyB0aGUga2VybmVsCitjb25maWd1cmF0aW9uLCBlbHNlIDEuCisKKworMy40KSBzdD0KKy0tLS0tLS0tCisKK1N5bnRheDogc3Q9PGJ1ZmZlcl9zaXplPixbPHdyaXRlX3RocmVzPixbPG1heF9idWZmZXJzPl1dCisKKyAgU2V0cyBzZXZlcmFsIHBhcmFtZXRlcnMgb2YgdGhlIFNDU0kgdGFwZSBkcml2ZXIuIDxidWZmZXJfc2l6ZT4gaXMKK3RoZSBudW1iZXIgb2YgNTEyLWJ5dGUgYnVmZmVycyByZXNlcnZlZCBmb3IgdGFwZSBvcGVyYXRpb25zIGZvciBlYWNoCitkZXZpY2UuIDx3cml0ZV90aHJlcz4gc2V0cyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB3aGljaCBtdXN0IGJlIGZpbGxlZAordG8gc3RhcnQgYW4gYWN0dWFsIHdyaXRlIG9wZXJhdGlvbiB0byB0aGUgdGFwZS4gTWF4aW11bSB2YWx1ZSBpcyB0aGUKK3RvdGFsIG51bWJlciBvZiBidWZmZXJzLiA8bWF4X2J1ZmZlcj4gbGltaXRzIHRoZSB0b3RhbCBudW1iZXIgb2YKK2J1ZmZlcnMgYWxsb2NhdGVkIGZvciBhbGwgdGFwZSBkZXZpY2VzLgorCisKKzMuNSkgZG1hc291bmQ9CistLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IGRtYXNvdW5kPVs8YnVmZmVycz4sPGJ1ZmZlci1zaXplPlssPGNhdGNoLXJhZGl1cz5dXQorCisgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHNvbWUgY29uZmlndXJhdGlvbnMgb2YgdGhlIExpbnV4L202OGsgRE1BIHNvdW5kCitkcml2ZXIgKEFtaWdhIGFuZCBBdGFyaSk6IDxidWZmZXJzPiBpcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgeW91IHdhbnQKK3RvIHVzZSAobWluaW11bSA0LCBkZWZhdWx0IDQpLCA8YnVmZmVyLXNpemU+IGlzIHRoZSBzaXplIG9mIGVhY2gKK2J1ZmZlciBpbiBraWxvYnl0ZXMgKG1pbmltdW0gNCwgZGVmYXVsdCAzMikgYW5kIDxjYXRjaC1yYWRpdXM+IHNheXMKK2hvdyBtdWNoIHBlcmNlbnQgb2YgZXJyb3Igd2lsbCBiZSB0b2xlcmF0ZWQgd2hlbiBzZXR0aW5nIGEgZnJlcXVlbmN5CisobWF4aW11bSAxMCwgZGVmYXVsdCAwKS4gRm9yIGV4YW1wbGUgd2l0aCAzJSB5b3UgY2FuIHBsYXkgODAwMEh6CitBVS1GaWxlcyBvbiB0aGUgRmFsY29uIHdpdGggaXRzIGhhcmR3YXJlIGZyZXF1ZW5jeSBvZiA4MTk1SHogYW5kIHRodXMKK2Rvbid0IG5lZWQgdG8gZXhwYW5kIHRoZSBzb3VuZC4KKworCisKKzQpIE9wdGlvbnMgZm9yIEF0YXJpIE9ubHkKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworNC4xKSB2aWRlbz0KKy0tLS0tLS0tLS0tCisKK1N5bnRheDogdmlkZW89PGZibmFtZT46PHN1Yi1vcHRpb25zLi4uPgorCitUaGUgPGZibmFtZT4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUgYnVmZmVyLAorZWcuIG1vc3QgYXRhcmkgdXNlcnMgd2lsbCB3YW50IHRvIHNwZWNpZnkgYGF0YWZiJyBoZXJlLiBUaGUKKzxzdWItb3B0aW9ucz4gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgc3ViLW9wdGlvbnMgbGlzdGVkCitiZWxvdy4KKworTkI6IFBsZWFzZSBub3RpY2UgdGhhdCB0aGlzIG9wdGlvbiB3YXMgcmVuYW1lZCBmcm9tIGBhdGF2aWRlbycgdG8KKyAgICBgdmlkZW8nIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIDEuMy54IGtlcm5lbHMsIHRodXMgeW91CisgICAgbWlnaHQgbmVlZCB0byB1cGRhdGUgeW91ciBib290LXNjcmlwdHMgaWYgdXBncmFkaW5nIHRvIDIueCBmcm9tCisgICAgYW4gMS4yLngga2VybmVsLgorCitOQkI6IFRoZSBiZWhhdmlvciBvZiB2aWRlbz0gd2FzIGNoYW5nZWQgaW4gMi4xLjU3IHNvIHRoZSByZWNvbW1lbmRlZAorb3B0aW9uIGlzIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGZyYW1lIGJ1ZmZlci4KKworNC4xLjEpIFZpZGVvIE1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3ViLW9wdGlvbiBtYXkgYmUgYW55IG9mIHRoZSBwcmVkZWZpbmVkIHZpZGVvIG1vZGVzLCBhcyBsaXN0ZWQKK2luIGF0YXJpL2F0YWZiLmMgaW4gdGhlIExpbnV4L202OGsgc291cmNlIHRyZWUuIFRoZSBrZXJuZWwgd2lsbAorYWN0aXZhdGUgdGhlIGdpdmVuIHZpZGVvIG1vZGUgYXQgYm9vdCB0aW1lIGFuZCBtYWtlIGl0IHRoZSBkZWZhdWx0Cittb2RlLCBpZiB0aGUgaGFyZHdhcmUgYWxsb3dzLiBDdXJyZW50bHkgZGVmaW5lZCBuYW1lcyBhcmU6CisKKyAtIHN0bG93ICAgICAgICAgICA6IDMyMHgyMDB4NAorIC0gc3RtaWQsIGRlZmF1bHQ1IDogNjQweDIwMHgyCisgLSBzdGhpZ2gsIGRlZmF1bHQ0OiA2NDB4NDAweDEKKyAtIHR0bG93ICAgICAgICAgICA6IDMyMHg0ODB4OCwgVFQgb25seQorIC0gdHRtaWQsIGRlZmF1bHQxIDogNjQweDQ4MHg0LCBUVCBvbmx5CisgLSB0dGhpZ2gsIGRlZmF1bHQyOiAxMjgweDk2MHgxLCBUVCBvbmx5CisgLSB2Z2EyICAgICAgICAgICAgOiA2NDB4NDgweDEsIEZhbGNvbiBvbmx5CisgLSB2Z2E0ICAgICAgICAgICAgOiA2NDB4NDgweDIsIEZhbGNvbiBvbmx5CisgLSB2Z2ExNiwgZGVmYXVsdDMgOiA2NDB4NDgweDQsIEZhbGNvbiBvbmx5CisgLSB2Z2EyNTYgICAgICAgICAgOiA2NDB4NDgweDgsIEZhbGNvbiBvbmx5CisgLSBmYWxoMiAgICAgICAgICAgOiA4OTZ4NjA4eDEsIEZhbGNvbiBvbmx5CisgLSBmYWxoMTYgICAgICAgICAgOiA4OTZ4NjA4eDQsIEZhbGNvbiBvbmx5CisKKyAgSWYgbm8gdmlkZW8gbW9kZSBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUga2VybmVsIHRyaWVzIHRoZQorbW9kZXMgbmFtZXMgImRlZmF1bHQ8bj4iIGluIHR1cm4sIHVudGlsIG9uZSBpcyBwb3NzaWJsZSB3aXRoIHRoZQoraGFyZHdhcmUgaW4gdXNlLgorCisgIEEgdmlkZW8gbW9kZSBzZXR0aW5nIGRvZXNuJ3QgbWFrZSBzZW5zZSwgaWYgdGhlIGV4dGVybmFsIGRyaXZlciBpcworYWN0aXZhdGVkIGJ5IGEgImV4dGVybmFsOiIgc3ViLW9wdGlvbi4KKworNC4xLjIpIGludmVyc2UKKy0tLS0tLS0tLS0tLS0tCisKK0ludmVydCB0aGUgZGlzcGxheS4gVGhpcyBhZmZlY3RzIGJvdGgsIHRleHQgKGNvbnNvbGVzKSBhbmQgZ3JhcGhpY3MKKyhYKSBkaXNwbGF5LiBVc3VhbGx5LCB0aGUgYmFja2dyb3VuZCBpcyBjaG9zZW4gdG8gYmUgYmxhY2suIFdpdGggdGhpcworb3B0aW9uLCB5b3UgY2FuIG1ha2UgdGhlIGJhY2tncm91bmQgd2hpdGUuCisKKzQuMS4zKSBmb250CistLS0tLS0tLS0tLQorCitTeW50YXg6IGZvbnQ6PGZvbnRuYW1lPgorCitTcGVjaWZ5IHRoZSBmb250IHRvIHVzZSBpbiB0ZXh0IG1vZGVzLiBDdXJyZW50bHkgeW91IGNhbiBjaG9vc2Ugb25seQorYmV0d2VlbiBgVkdBOHg4JywgYFZHQTh4MTYnIGFuZCBgUEVBUkw4eDgnLiBgVkdBOHg4JyBpcyBkZWZhdWx0LCBpZiB0aGUKK3ZlcnRpY2FsIHNpemUgb2YgdGhlIGRpc3BsYXkgaXMgbGVzcyB0aGFuIDQwMCBwaXhlbCByb3dzLiBPdGhlcndpc2UsIHRoZQorYFZHQTh4MTYnIGZvbnQgaXMgdGhlIGRlZmF1bHQuCisKKzQuMS40KSBod3Njcm9sbF8KKy0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBod3Njcm9sbF88bj4KKworVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxpbmVzIG9mIHZpZGVvIG1lbW9yeSB0byByZXNlcnZlIGZvcgorc3BlZWRpbmcgdXAgdGhlIHNjcm9sbGluZyAoImhhcmR3YXJlIHNjcm9sbGluZyIpLiBIYXJkd2FyZSBzY3JvbGxpbmcKK2lzIHBvc3NpYmxlIG9ubHkgaWYgdGhlIGtlcm5lbCBjYW4gc2V0IHRoZSB2aWRlbyBiYXNlIGFkZHJlc3MgaW4gc3RlcHMKK2ZpbmUgZW5vdWdoLiBUaGlzIGlzIHRydWUgZm9yIFNURSwgTWVnYVNURSwgVFQsIGFuZCBGYWxjb24uIEl0IGlzIG5vdAorcG9zc2libGUgd2l0aCBwbGFpbiBTVHMgYW5kIGdyYXBoaWNzIGNhcmRzIChUaGUgZm9ybWVyIGJlY2F1c2UgdGhlCitiYXNlIGFkZHJlc3MgbXVzdCBiZSBvbiBhIDI1NiBieXRlIGJvdW5kYXJ5IHRoZXJlLCB0aGUgbGF0dGVyIGJlY2F1c2UKK3RoZSBrZXJuZWwgZG9lc24ndCBrbm93IGhvdyB0byBzZXQgdGhlIGJhc2UgYWRkcmVzcyBhdCBhbGwuKQorCisgIEJ5IGRlZmF1bHQsIDxuPiBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB2aXNpYmxlIHRleHQgbGluZXMgb24gdGhlCitkaXNwbGF5LiBUaHVzLCB0aGUgYW1vdW50IG9mIHZpZGVvIG1lbW9yeSBpcyBkb3VibGVkLCBjb21wYXJlZCB0byBubworaGFyZHdhcmUgc2Nyb2xsaW5nLiBZb3UgY2FuIHR1cm4gb2ZmIHRoZSBoYXJkd2FyZSBzY3JvbGxpbmcgYWx0b2dldGhlcgorYnkgc2V0dGluZyA8bj4gdG8gMC4KKworNC4xLjUpIGludGVybmFsOgorLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IGludGVybmFsOjx4cmVzPjs8eXJlcz5bOzx4cmVzX21heD47PHlyZXNfbWF4Pjs8b2Zmc2V0Pl0KKworVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBjYXBhYmlsaXRpZXMgb2Ygc29tZSBleHRlbmRlZCBpbnRlcm5hbCB2aWRlbworaGFyZHdhcmUsIGxpa2UgZS5nLiBPdmVyU2Nhbi4gPHhyZXM+IGFuZCA8eXJlcz4gZ2l2ZSB0aGUgKGV4dGVuZGVkKQorZGltZW5zaW9ucyBvZiB0aGUgc2NyZWVuLgorCisgIElmIHlvdXIgT3ZlclNjYW4gbmVlZHMgYSBibGFjayBib3JkZXIsIHlvdSBoYXZlIHRvIHdyaXRlIHRoZSBsYXN0Cit0aHJlZSBhcmd1bWVudHMgb2YgdGhlICJpbnRlcm5hbDoiLiA8eHJlc19tYXg+IGlzIHRoZSBtYXhpbXVtIGxpbmUKK2xlbmd0aCB0aGUgaGFyZHdhcmUgYWxsb3dzLCA8eXJlc19tYXg+IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcy4KKzxvZmZzZXQ+IGlzIHRoZSBvZmZzZXQgb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgc2NyZWVuIG1lbW9yeSB0byBpdHMKK3BoeXNpY2FsIHN0YXJ0LCBpbiBieXRlcy4KKworICBPZnRlbiwgZXh0ZW5kZWQgaW50ZXJ2YWwgdmlkZW8gaGFyZHdhcmUgaGFzIHRvIGJlIGFjdGl2YXRlZCBzb21laG93LgorRm9yIHRoaXMsIHNlZSB0aGUgInN3XyoiIG9wdGlvbnMgYmVsb3cuCisKKzQuMS42KSBleHRlcm5hbDoKKy0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OgorICBleHRlcm5hbDo8eHJlcz47PHlyZXM+OzxkZXB0aD47PG9yZz47PHNjcm1lbT5bOzxzY3JsZW4+Wzs8dmdhYmFzZT5cCisgICAgICAgICAgIFs7PGNvbHc+Wzs8Y29sdHlwZT5bOzx4cmVzX3ZpcnR1YWw+XV1dXV0KKworW0kgaGFkIHRvIGJyZWFrIHRoaXMgbGluZS4uLl0KKworICBUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNvbXBsaWNhdGVkIHBhcmFtZXRlci4uLiBJdCBzcGVjaWZpZXMgdGhhdAoreW91IGhhdmUgc29tZSBleHRlcm5hbCB2aWRlbyBoYXJkd2FyZSAoYSBncmFwaGljcyBib2FyZCksIGFuZCBob3cgdG8KK3VzZSBpdCB1bmRlciBMaW51eC9tNjhrLiBUaGUga2VybmVsIGNhbm5vdCBrbm93IG1vcmUgYWJvdXQgdGhlIGhhcmR3YXJlCit0aGFuIHlvdSB0ZWxsIGl0IGhlcmUhIFRoZSBrZXJuZWwgYWxzbyBpcyB1bmFibGUgdG8gc2V0IG9yIGNoYW5nZSBhbnkKK3ZpZGVvIG1vZGVzLCBzaW5jZSBpdCBkb2Vzbid0IGtub3cgYWJvdXQgYW55IGJvYXJkIGludGVybmFsLiBTbywgeW91CitoYXZlIHRvIHN3aXRjaCB0byB0aGF0IHZpZGVvIG1vZGUgYmVmb3JlIHlvdSBzdGFydCBMaW51eCwgYW5kIGNhbm5vdAorc3dpdGNoIHRvIGFub3RoZXIgbW9kZSBvbmNlIExpbnV4IGhhcyBzdGFydGVkLgorCisgIFRoZSBmaXJzdCAzIHBhcmFtZXRlcnMgb2YgdGhpcyBzdWItb3B0aW9uIHNob3VsZCBiZSBvYnZpb3VzOiA8eHJlcz4sCis8eXJlcz4gYW5kIDxkZXB0aD4gZ2l2ZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgc2NyZWVuIGFuZCB0aGUgbnVtYmVyIG9mCitwbGFuZXMgKGRlcHRoKS4gVGhlIGRlcHRoIGlzIGlzIHRoZSBsb2dhcml0aG0gdG8gYmFzZSAyIG9mIHRoZSBudW1iZXIKK29mIGNvbG9ycyBwb3NzaWJsZS4gKE9yLCB0aGUgb3RoZXIgd2F5IHJvdW5kOiBUaGUgbnVtYmVyIG9mIGNvbG9ycyBpcworMl5kZXB0aCkuCisKKyAgWW91IGhhdmUgdG8gdGVsbCB0aGUga2VybmVsIGZ1cnRoZXJtb3JlIGhvdyB0aGUgdmlkZW8gbWVtb3J5IGlzCitvcmdhbml6ZWQuIFRoaXMgaXMgZG9uZSBieSBhIGxldHRlciBhcyA8b3JnPiBwYXJhbWV0ZXI6CisKKyAnbic6ICJub3JtYWwgcGxhbmVzIiwgaS5lLiBvbmUgd2hvbGUgcGxhbmUgYWZ0ZXIgYW5vdGhlcgorICdpJzogImludGVybGVhdmVkIHBsYW5lcyIsIGkuZS4gMTYgYml0IG9mIHRoZSBmaXJzdCBwbGFuZSwgdGhhbiAxNiBiaXQKKyAgICAgIG9mIHRoZSBuZXh0LCBhbmQgc28gb24uLi4gVGhpcyBtb2RlIGlzIHVzZWQgb25seSB3aXRoIHRoZQorCSAgYnVpbHQtaW4gQXRhcmkgdmlkZW8gbW9kZXMsIEkgdGhpbmsgdGhlcmUgaXMgbm8gY2FyZCB0aGF0CisJICBzdXBwb3J0cyB0aGlzIG1vZGUuCisgJ3AnOiAicGFja2VkIHBpeGVscyIsIGkuZS4gPGRlcHRoPiBjb25zZWN1dGl2ZSBiaXRzIHN0YW5kIGZvciBhbGwKKwkgIHBsYW5lcyBvZiBvbmUgcGl4ZWw7IHRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgZm9yIDggcGxhbmVzCisJICAoMjU2IGNvbG9ycykgb24gZ3JhcGhpYyBjYXJkcworICd0JzogInRydWUgY29sb3IiIChtb3JlIG9yIGxlc3MgcGFja2VkIHBpeGVscywgYnV0IHdpdGhvdXQgYSBjb2xvcgorCSAgbG9va3VwIHRhYmxlKTsgdXN1YWxseSBkZXB0aCBpcyAyNAorCitGb3IgbW9ub2Nocm9tZSBtb2RlcyAoaS5lLiwgPGRlcHRoPiBpcyAxKSwgdGhlIDxvcmc+IGxldHRlciBoYXMgYQorZGlmZmVyZW50IG1lYW5pbmc6CisKKyAnbic6IG5vcm1hbCBjb2xvcnMsIGkuZS4gMD13aGl0ZSwgMT1ibGFjaworICdpJzogaW52ZXJ0ZWQgY29sb3JzLCBpLmUuIDA9YmxhY2ssIDE9d2hpdGUKKworICBUaGUgbmV4dCBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZpZGVvIGhhcmR3YXJlIGlzIHRoZSBiYXNlCithZGRyZXNzIG9mIHRoZSB2aWRlbyBtZW1vcnkuIFRoYXQgaXMgZ2l2ZW4gaW4gdGhlIDxzY3JtZW0+IHBhcmFtZXRlciwKK2FzIGEgaGV4YWRlY2ltYWwgbnVtYmVyIHdpdGggYSAiMHgiIHByZWZpeC4gWW91IGhhdmUgdG8gZmluZCBvdXQgdGhpcworYWRkcmVzcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIGhhcmR3YXJlLgorCisgIFRoZSBuZXh0IHBhcmFtZXRlciwgPHNjcmxlbj4sIHRlbGxzIHRoZSBrZXJuZWwgYWJvdXQgdGhlIHNpemUgb2YgdGhlCit2aWRlbyBtZW1vcnkuIElmIGl0J3MgbWlzc2luZywgdGhlIHNpemUgaXMgY2FsY3VsYXRlZCBmcm9tIDx4cmVzPiwKKzx5cmVzPiwgYW5kIDxkZXB0aD4uIEZvciBub3csIGl0IGlzIG5vdCB1c2VmdWwgdG8gd3JpdGUgYSB2YWx1ZSBoZXJlLgorSXQgd291bGQgYmUgdXNlZCBvbmx5IGZvciBoYXJkd2FyZSBzY3JvbGxpbmcgKHdoaWNoIGlzbid0IHBvc3NpYmxlCit3aXRoIHRoZSBleHRlcm5hbCBkcml2ZXIsIGJlY2F1c2UgdGhlIGtlcm5lbCBjYW5ub3Qgc2V0IHRoZSB2aWRlbyBiYXNlCithZGRyZXNzKSwgb3IgZm9yIHZpcnR1YWwgcmVzb2x1dGlvbnMgdW5kZXIgWCAod2hpY2ggdGhlIFggc2VydmVyCitkb2Vzbid0IHN1cHBvcnQgeWV0KS4gU28sIGl0J3MgY3VycmVudGx5IGJlc3QgdG8gbGVhdmUgdGhpcyBmaWVsZAorZW1wdHksIGVpdGhlciBieSBlbmRpbmcgdGhlICJleHRlcm5hbDoiIGFmdGVyIHRoZSB2aWRlbyBhZGRyZXNzIG9yIGJ5Cit3cml0aW5nIHR3byBjb25zZWN1dGl2ZSBzZW1pY29sb25zLCBpZiB5b3Ugd2FudCB0byBnaXZlIGEgPHZnYWJhc2U+CisoaXQgaXMgYWxsb3dlZCB0byBsZWF2ZSB0aGlzIHBhcmFtZXRlciBlbXB0eSkuCisKKyAgVGhlIDx2Z2FiYXNlPiBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIGl0IGlzIG5vdCBnaXZlbiwgdGhlIGtlcm5lbAorY2Fubm90IHJlYWQgb3Igd3JpdGUgYW55IGNvbG9yIHJlZ2lzdGVycyBvZiB0aGUgdmlkZW8gaGFyZHdhcmUsIGFuZAordGh1cyB5b3UgaGF2ZSB0byBzZXQgYXBwcm9wcmlhdGUgY29sb3JzIGJlZm9yZSB5b3Ugc3RhcnQgTGludXguIEJ1dCBpZgoreW91ciBjYXJkIGlzIHNvbWVob3cgVkdBIGNvbXBhdGlibGUsIHlvdSBjYW4gdGVsbCB0aGUga2VybmVsIHRoZSBiYXNlCithZGRyZXNzIG9mIHRoZSBWR0EgcmVnaXN0ZXIgc2V0LCBzbyBpdCBjYW4gY2hhbmdlIHRoZSBjb2xvciBsb29rdXAKK3RhYmxlLiBZb3UgaGF2ZSB0byBsb29rIHVwIHRoaXMgYWRkcmVzcyBpbiB5b3VyIGJvYXJkJ3MgZG9jdW1lbnRhdGlvbi4KK1RvIGF2b2lkIG1pc3VuZGVyc3RhbmRpbmdzOiA8dmdhYmFzZT4gaXMgdGhlIF9iYXNlXyBhZGRyZXNzLCBpLmUuIGEgNGsKK2FsaWduZWQgYWRkcmVzcy4gRm9yIHJlYWQvd3JpdGluZyB0aGUgY29sb3IgcmVnaXN0ZXJzLCB0aGUga2VybmVsCit1c2VzIHRoZSBhZGRyZXNzZXMgdmdhYmFzZSsweDNjNy4uLnZnYWJhc2UrMHgzYzkuIFRoZSA8dmdhYmFzZT4KK3BhcmFtZXRlciBpcyB3cml0dGVuIGluIGhleGFkZWNpbWFsIHdpdGggYSAiMHgiIHByZWZpeCwganVzdCBhcworPHNjcm1lbT4uCisKKyAgPGNvbHc+IGlzIG1lYW5pbmdmdWwgb25seSBpZiA8dmdhYmFzZT4gaXMgc3BlY2lmaWVkLiBJdCB0ZWxscyB0aGUKK2tlcm5lbCBob3cgd2lkZSBlYWNoIG9mIHRoZSBjb2xvciByZWdpc3RlciBpcywgaS5lLiB0aGUgbnVtYmVyIG9mIGJpdHMKK3BlciBzaW5nbGUgY29sb3IgKHJlZC9ncmVlbi9ibHVlKS4gRGVmYXVsdCBpcyA2LCBhbm90aGVyIHF1aXRlIHVzdWFsCit2YWx1ZSBpcyA4LgorCisgIEFsc28gPGNvbHR5cGU+IGlzIHVzZWQgdG9nZXRoZXIgd2l0aCA8dmdhYmFzZT4uIEl0IHRlbGxzIHRoZSBrZXJuZWwKK2Fib3V0IHRoZSBjb2xvciByZWdpc3RlciBtb2RlbCBvZiB5b3VyIGdmeCBib2FyZC4gQ3VycmVudGx5LCB0aGUgdHlwZXMKKyJ2Z2EiICh3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0KSBhbmQgIm12MzAwIiAoU0FORyBNVjMwMCkgYXJlCitpbXBsZW1lbnRlZC4KKworICBQYXJhbWV0ZXIgPHhyZXNfdmlydHVhbD4gaXMgcmVxdWlyZWQgZm9yIFByb01TVCBvciBFVDQwMDAgY2FyZHMgd2hlcmUKK3RoZSBwaHlzaWNhbCBsaW5lbGVuZ3RoIGRpZmZlcnMgZnJvbSB0aGUgdmlzaWJsZSBsZW5ndGguIFdpdGggUHJvTVNULCAKK3hyZXNfdmlydHVhbCBtdXN0IGJlIHNldCB0byAyMDQ4LiBGb3IgRVQ0MDAwLCB4cmVzX3ZpcnR1YWwgZGVwZW5kcyBvbiB0aGUKK2luaXRpYWxpc2F0aW9uIG9mIHRoZSB2aWRlby1jYXJkLgorSWYgeW91J3JlIG1pc3NpbmcgYSBjb3JyZXNwb25kaW5nIHlyZXNfdmlydHVhbDogdGhlIGV4dGVybmFsIHBhcnQgaXMgbGVnYWN5LAordGhlcmVmb3JlIHdlIGRvbid0IHN1cHBvcnQgaGFyZHdhcmUtZGVwZW5kZW50IGZ1bmN0aW9ucyBsaWtlIGhhcmR3YXJlLXNjcm9sbCwKK3Bhbm5pbmcgb3IgYmxhbmtpbmcuCisKKzQuMS43KSBlY2xvY2s6CistLS0tLS0tLS0tLS0tLQorCitUaGUgZXh0ZXJuYWwgcGl4ZWwgY2xvY2sgYXR0YWNoZWQgdG8gdGhlIEZhbGNvbiBWSURFTCBzaGlmdGVyLiBUaGlzCitjdXJyZW50bHkgd29ya3Mgb25seSB3aXRoIHRoZSBTY3JlZW5Xb25kZXIhCisKKzQuMS44KSBtb25pdG9yY2FwOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IG1vbml0b3JjYXA6PHZtaW4+Ozx2bWF4Pjs8aG1pbj47PGhtYXg+CisKK1RoaXMgZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBtdWx0aXN5bmMgbW9uaXRvci4gRG9uJ3QgdXNlIGl0Cit3aXRoIGEgZml4ZWQtZnJlcXVlbmN5IG1vbml0b3IhIEZvciBub3csIG9ubHkgdGhlIEZhbGNvbiBmcmFtZSBidWZmZXIKK3VzZXMgdGhlIHNldHRpbmdzIG9mICJtb25pdG9yY2FwOiIuCisKKyAgPHZtaW4+IGFuZCA8dm1heD4gYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtLCByZXNwLiwgdmVydGljYWwgZnJlcXVlbmNpZXMKK3lvdXIgbW9uaXRvciBjYW4gd29yayB3aXRoLCBpbiBIei4gPGhtaW4+IGFuZCA8aG1heD4gYXJlIHRoZSBzYW1lIGZvcgordGhlIGhvcml6b250YWwgZnJlcXVlbmN5LCBpbiBrSHouCisKKyAgVGhlIGRlZmF1bHRzIGFyZSA1ODs2MjszMTszMiAoVkdBIGNvbXBhdGlibGUpLgorCisgIFRoZSBkZWZhdWx0cyBmb3IgVFYvU0MxMjI0L1NDMTQzNSBjb3ZlciBib3RoIFBBTCBhbmQgTlRTQyBzdGFuZGFyZHMuCisKKzQuMS45KSBrZWVwCistLS0tLS0tLS0tLS0KKworSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZG9lc24ndCBkbyBhbnkgdmlkZW8KK21vZGUgY2FsY3VsYXRpb25zIGFuZCBzZXR0aW5ncyBvbiBpdHMgb3duLiBUaGUgb25seSBBdGFyaSBmYiBkZXZpY2UKK3RoYXQgZG9lcyB0aGlzIGN1cnJlbnRseSBpcyB0aGUgRmFsY29uLgorCisgIFdoYXQgeW91IHJlYWNoIHdpdGggdGhpczogU2V0dGluZ3MgZm9yIHVua25vd24gdmlkZW8gZXh0ZW5zaW9ucworYXJlbid0IG92ZXJyaWRkZW4gYnkgdGhlIGRyaXZlciwgc28geW91IGNhbiBzdGlsbCB1c2UgdGhlIG1vZGUgZm91bmQKK3doZW4gYm9vdGluZywgd2hlbiB0aGUgZHJpdmVyIGRvZXNuJ3Qga25vdyB0byBzZXQgdGhpcyBtb2RlIGl0c2VsZi4KK0J1dCB0aGlzIGFsc28gbWVhbnMsIHRoYXQgeW91IGNhbid0IHN3aXRjaCB2aWRlbyBtb2RlcyBhbnltb3JlLi4uCisKKyAgQW4gZXhhbXBsZSB3aGVyZSB5b3UgbWF5IHdhbnQgdG8gdXNlICJrZWVwIiBpcyB0aGUgU2NyZWVuQmxhc3RlciBmb3IKK3RoZSBGYWxjb24uCisKKworNC4yKSBhdGFtb3VzZT0KKy0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogYXRhbW91c2U9PHgtdGhyZXNob2xkPixbPHktdGhyZXNob2xkPl0KKworICBXaXRoIHRoaXMgb3B0aW9uLCB5b3UgY2FuIHNldCB0aGUgbW91c2UgbW92ZW1lbnQgcmVwb3J0aW5nIHRocmVzaG9sZC4KK1RoaXMgaXMgdGhlIG51bWJlciBvZiBwaXhlbHMgb2YgbW91c2UgbW92ZW1lbnQgdGhhdCBoYXZlIHRvIGFjY3VtdWxhdGUKK2JlZm9yZSB0aGUgSUtCRCBzZW5kcyBhIG5ldyBtb3VzZSBwYWNrZXQgdG8gdGhlIGtlcm5lbC4gSGlnaGVyIHZhbHVlcworcmVkdWNlIHRoZSBtb3VzZSBpbnRlcnJ1cHQgbG9hZCBhbmQgdGh1cyByZWR1Y2UgdGhlIGNoYW5jZSBvZiBrZXlib2FyZAorb3ZlcnJ1bnMuIExvd2VyIHZhbHVlcyBnaXZlIGEgc2xpZ2h0bHkgZmFzdGVyIG1vdXNlIHJlc3BvbnNlcyBhbmQKK3NsaWdodGx5IGJldHRlciBtb3VzZSB0cmFja2luZy4KKworICBZb3UgY2FuIHNldCB0aGUgdGhyZXNob2xkIGluIHggYW5kIHkgc2VwYXJhdGVseSwgYnV0IHVzdWFsbHkgdGhpcyBpcworb2YgbGl0dGxlIHByYWN0aWNhbCB1c2UuIElmIHRoZXJlJ3MganVzdCBvbmUgbnVtYmVyIGluIHRoZSBvcHRpb24sIGl0CitpcyB1c2VkIGZvciBib3RoIGRpbWVuc2lvbnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIgZm9yIGJvdGgKK3RocmVzaG9sZHMuCisKKworNC4zKSBhdGFmbG9wPQorLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IGF0YWZsb3A9PGRyaXZlIHR5cGU+Wyw8dHJhY2tidWZmZXJpbmc+Wyw8c3RlcHJhdGVBPlssPHN0ZXByYXRlQj5dXV0KKworICAgVGhlIGRyaXZlIHR5cGUgbWF5IGJlIDAsIDEsIG9yIDIsIGZvciBERCwgSEQsIGFuZCBFRCwgcmVzcC4gVGhpcworICAgc2V0dGluZyBhZmZlY3RzIGhvdyBtYW55IGJ1ZmZlcnMgYXJlIHJlc2VydmVkIGFuZCB3aGljaCBmb3JtYXRzIGFyZQorICAgcHJvYmVkIChzZWUgYWxzbyBiZWxvdykuIFRoZSBkZWZhdWx0IGlzIDEgKEhEKS4gT25seSBvbmUgZHJpdmUgdHlwZQorICAgY2FuIGJlIHNlbGVjdGVkLiBJZiB5b3UgaGF2ZSB0d28gZGlzayBkcml2ZXMsIHNlbGVjdCB0aGUgImJldHRlciIKKyAgIHR5cGUuCisKKyAgIFRoZSBzZWNvbmQgcGFyYW1ldGVyIDx0cmFja2J1ZmZlcj4gdGVsbHMgdGhlIGtlcm5lbCB3aGV0aGVyIHRvIHVzZQorICAgdHJhY2sgYnVmZmVyaW5nICgxKSBvciBub3QgKDApLiBUaGUgZGVmYXVsdCBpcyBtYWNoaW5lLWRlcGVuZGVudDoKKyAgIG5vIGZvciB0aGUgTWVkdXNhIGFuZCB5ZXMgZm9yIGFsbCBvdGhlcnMuCisKKyAgIFdpdGggdGhlIHR3byBmb2xsb3dpbmcgcGFyYW1ldGVycywgeW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQKKyAgIHN0ZXByYXRlIHVzZWQgZm9yIGRyaXZlIEEgYW5kIEIsIHJlc3AuIAorCisKKzQuNCkgYXRhc2NzaT0KKy0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBhdGFzY3NpPTxjYW5fcXVldWU+Wyw8Y21kX3Blcl9sdW4+Wyw8c2NhdC1nYXQ+Wyw8aG9zdC1pZD5bLDx0YWdnZWQ+XV1dXQorCisgIFRoaXMgb3B0aW9uIHNldHMgc29tZSBwYXJhbWV0ZXJzIGZvciB0aGUgQXRhcmkgbmF0aXZlIFNDU0kgZHJpdmVyLgorR2VuZXJhbGx5LCBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBjYW4gYmUgb21pdHRlZCBmcm9tIHRoZSBlbmQuIEFuZAorZm9yIGVhY2ggb2YgdGhlIG51bWJlcnMsIGEgbmVnYXRpdmUgdmFsdWUgbWVhbnMgInVzZSBkZWZhdWx0Ii4gVGhlCitkZWZhdWx0cyBkZXBlbmQgb24gd2hldGhlciBUVC1zdHlsZSBvciBGYWxjb24tc3R5bGUgU0NTSSBpcyB1c2VkLgorQmVsb3csIGRlZmF1bHRzIGFyZSBub3RlZCBhcyBuL20sIHdoZXJlIHRoZSBmaXJzdCB2YWx1ZSByZWZlcnMgdG8KK1RULVNDU0kgYW5kIHRoZSBsYXR0ZXIgdG8gRmFsY29uLVNDU0kuIElmIGFuIGlsbGVnYWwgdmFsdWUgaXMgZ2l2ZW4KK2ZvciBvbmUgcGFyYW1ldGVyLCBhbiBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQgYW5kIHRoYXQgb25lIHNldHRpbmcgaXMKK2lnbm9yZWQgKG90aGVycyBhcmVuJ3QgYWZmZWN0ZWQpLgorCisgIDxjYW5fcXVldWU+OgorICAgIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIFNDU0kgY29tbWFuZHMgcXVldWVkIGludGVybmFsbHkgdG8gdGhlCisgICAgQXRhcmkgU0NTSSBkcml2ZXIuIEEgdmFsdWUgb2YgMSBlZmZlY3RpdmVseSB0dXJucyBvZmYgdGhlIGRyaXZlcgorICAgIGludGVybmFsIG11bHRpdGFza2luZyAoaWYgaXQgY2F1c2VzIHByb2JsZW1zKS4gTGVnYWwgdmFsdWVzIGFyZSA+PQorICAgIDEuIDxjYW5fcXVldWU+IGNhbiBiZSBhcyBoaWdoIGFzIHlvdSBsaWtlLCBidXQgdmFsdWVzIGdyZWF0ZXIgdGhhbgorICAgIDxjbWRfcGVyX2x1bj4gdGltZXMgdGhlIG51bWJlciBvZiBTQ1NJIHRhcmdldHMgKExVTnMpIHlvdSBoYXZlCisgICAgZG9uJ3QgbWFrZSBzZW5zZS4gRGVmYXVsdDogMTYvOC4KKworICA8Y21kX3Blcl9sdW4+OgorICAgIE1heGltdW0gbnVtYmVyIG9mIFNDU0kgY29tbWFuZHMgaXNzdWVkIHRvIHRoZSBkcml2ZXIgZm9yIG9uZQorICAgIGxvZ2ljYWwgdW5pdCAoTFVOLCB1c3VhbGx5IG9uZSBTQ1NJIHRhcmdldCkuIExlZ2FsIHZhbHVlcyBzdGFydAorICAgIGZyb20gMS4gSWYgdGFnZ2VkIHF1ZXVpbmcgKHNlZSBiZWxvdykgaXMgbm90IHVzZWQsIHZhbHVlcyBncmVhdGVyCisgICAgdGhhbiAyIGRvbid0IG1ha2Ugc2Vuc2UsIGJ1dCB3YXN0ZSBtZW1vcnkuIE90aGVyd2lzZSwgdGhlIG1heGltdW0KKyAgICBpcyB0aGUgbnVtYmVyIG9mIGNvbW1hbmQgdGFncyBhdmFpbGFibGUgdG8gdGhlIGRyaXZlciAoY3VycmVudGx5CisgICAgMzIpLiBEZWZhdWx0OiA4LzEuIChOb3RlOiBWYWx1ZXMgPiAxIHNlZW0gdG8gY2F1c2UgcHJvYmxlbXMgb24gYQorICAgIEZhbGNvbiwgY2F1c2Ugbm90IHlldCBrbm93bi4pCisKKyAgICAgIFRoZSA8Y21kX3Blcl9sdW4+IHZhbHVlIGF0IGEgZ3JlYXQgcGFydCBkZXRlcm1pbmVzIHRoZSBhbW91bnQgb2YKKyAgICBtZW1vcnkgU0NTSSByZXNlcnZlcyBmb3IgaXRzZWxmLiBUaGUgZm9ybXVsYSBpcyByYXRoZXIKKyAgICBjb21wbGljYXRlZCwgYnV0IEkgY2FuIGdpdmUgeW91IHNvbWUgaGludHM6CisgICAgICBubyBzY2F0dGVyLWdhdGhlciAgOiBjbWRfcGVyX2x1biAqIDIzMiBieXRlcworICAgICAgZnVsbCBzY2F0dGVyLWdhdGhlcjogY21kX3Blcl9sdW4gKiBhcHByb3guIDE3IEtieXRlcworCisgIDxzY2F0LWdhdD46CisgICAgU2l6ZSBvZiB0aGUgc2NhdHRlci1nYXRoZXIgdGFibGUsIGkuZS4gdGhlIG51bWJlciBvZiByZXF1ZXN0cworICAgIGNvbnNlY3V0aXZlIG9uIHRoZSBkaXNrIHRoYXQgY2FuIGJlIG1lcmdlZCBpbnRvIG9uZSBTQ1NJIGNvbW1hbmQuCisgICAgTGVnYWwgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDI1NS4gRGVmYXVsdDogMjU1LzAuIE5vdGU6IFRoaXMKKyAgICB2YWx1ZSBpcyBmb3JjZWQgdG8gMCBvbiBhIEZhbGNvbiwgc2luY2Ugc2NhdHRlci1nYXRoZXIgaXNuJ3QKKyAgICBwb3NzaWJsZSB3aXRoIHRoZSBTVC1ETUEuIE5vdCB1c2luZyBzY2F0dGVyLWdhdGhlciBodXJ0cworICAgIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHkuCisKKyAgPGhvc3QtaWQ+OgorICAgIFRoZSBTQ1NJIElEIHRvIGJlIHVzZWQgYnkgdGhlIGluaXRpYXRvciAoeW91ciBBdGFyaSkuIFRoaXMgaXMKKyAgICB1c3VhbGx5IDcsIHRoZSBoaWdoZXN0IHBvc3NpYmxlIElELiBFdmVyeSBJRCBvbiB0aGUgU0NTSSBidXMgbXVzdAorICAgIGJlIHVuaXF1ZS4gRGVmYXVsdDogZGV0ZXJtaW5lZCBhdCBydW4gdGltZTogSWYgdGhlIE5WLVJBTSBjaGVja3N1bQorICAgIGlzIHZhbGlkLCBhbmQgYml0IDcgaW4gYnl0ZSAzMCBvZiB0aGUgTlYtUkFNIGlzIHNldCwgdGhlIGxvd2VyIDMKKyAgICBiaXRzIG9mIHRoaXMgYnl0ZSBhcmUgdXNlZCBhcyB0aGUgaG9zdCBJRC4gKFRoaXMgbWV0aG9kIGlzIGRlZmluZWQKKyAgICBieSBBdGFyaSBhbmQgYWxzbyB1c2VkIGJ5IHNvbWUgVE9TIEhEIGRyaXZlcnMuKSBJZiB0aGUgYWJvdmUKKyAgICBpc24ndCBnaXZlbiwgdGhlIGRlZmF1bHQgSUQgaXMgNy4gKGJvdGgsIFRUIGFuZCBGYWxjb24pLgorCisgIDx0YWdnZWQ+OgorICAgIDAgbWVhbnMgdHVybiBvZmYgdGFnZ2VkIHF1ZXVpbmcgc3VwcG9ydCwgYWxsIG90aGVyIHZhbHVlcyA+IDAgbWVhbgorICAgIHVzZSB0YWdnZWQgcXVldWluZyBmb3IgdGFyZ2V0cyB0aGF0IHN1cHBvcnQgaXQuIERlZmF1bHQ6IGN1cnJlbnRseQorICAgIG9mZiwgYnV0IHRoaXMgbWF5IGNoYW5nZSB3aGVuIHRhZ2dlZCBxdWV1aW5nIGhhbmRsaW5nIGhhcyBiZWVuCisgICAgcHJvdmVkIHRvIGJlIHJlbGlhYmxlLgorCisgICAgVGFnZ2VkIHF1ZXVpbmcgbWVhbnMgdGhhdCBtb3JlIHRoYW4gb25lIGNvbW1hbmQgY2FuIGJlIGlzc3VlZCB0bworICAgIG9uZSBMVU4sIGFuZCB0aGUgU0NTSSBkZXZpY2UgaXRzZWxmIG9yZGVycyB0aGUgcmVxdWVzdHMgc28gdGhleQorICAgIGNhbiBiZSBwZXJmb3JtZWQgaW4gb3B0aW1hbCBvcmRlci4gTm90IGFsbCBTQ1NJIGRldmljZXMgc3VwcG9ydAorICAgIHRhZ2dlZCBxdWV1aW5nICg6LSgpLgorCis0LjYgc3dpdGNoZXM9CistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogc3dpdGNoZXM9PGxpc3Qgb2Ygc3dpdGNoZXM+CisKKyAgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIHN3aXRjaCBzb21lIGhhcmR3YXJlIGxpbmVzIHRoYXQgYXJlIG9mdGVuCit1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIGNlcnRhaW4gaGFyZHdhcmUgZXh0ZW5zaW9ucy4gRXhhbXBsZXMgYXJlCitPdmVyU2Nhbiwgb3ZlcmNsb2NraW5nLCAuLi4KKworICBUaGUgPGxpc3Qgb2Ygc3dpdGNoZXM+IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGZvbGxvd2luZworaXRlbXM6CisKKyAgaWtiZDogc2V0IFJUUyBvZiB0aGUga2V5Ym9hcmQgQUNJQSBoaWdoCisgIG1pZGk6IHNldCBSVFMgb2YgdGhlIE1JREkgQUNJQSBoaWdoCisgIHNuZDY6IHNldCBiaXQgNiBvZiB0aGUgUFNHIHBvcnQgQQorICBzbmQ3OiBzZXQgYml0IDYgb2YgdGhlIFBTRyBwb3J0IEEKKworSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIG1lbnRpb24gYSBzd2l0Y2ggbW9yZSB0aGFuIG9uY2UgKG5vCitkaWZmZXJlbmNlIHRvIG9ubHkgb25jZSksIGJ1dCB5b3UgY2FuIGdpdmUgYXMgbWFueSBzd2l0Y2hlcyBhcyB5b3UKK3dhbnQgdG8gZW5hYmxlIGRpZmZlcmVudCBmZWF0dXJlcy4gVGhlIHN3aXRjaCBsaW5lcyBhcmUgc2V0IGFzIGVhcmx5CithcyBwb3NzaWJsZSBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uIChldmVuIGJlZm9yZSBkZXRlcm1pbmluZyB0aGUKK3ByZXNlbnQgaGFyZHdhcmUuKQorCisgIEFsbCBvZiB0aGUgaXRlbXMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCAib3ZfIiwgaS5lLiAib3ZfaWtiZCIsCisib3ZfbWlkaSIsIC4uLiBUaGVzZSBvcHRpb25zIGFyZSBtZWFudCBmb3Igc3dpdGNoaW5nIG9uIGFuIE92ZXJTY2FuCit2aWRlbyBleHRlbnNpb24uIFRoZSBkaWZmZXJlbmNlIHRvIHRoZSBiYXJlIG9wdGlvbiBpcyB0aGF0IHRoZQorc3dpdGNoLW9uIGlzIGRvbmUgYWZ0ZXIgdmlkZW8gaW5pdGlhbGl6YXRpb24sIGFuZCBzb21laG93IHN5bmNocm9uaXplZAordG8gdGhlIEhCTEFOSy4gQSBzcGVjaWFsaXR5IGlzIHRoYXQgb3ZfaWtiZCBhbmQgb3ZfbWlkaSBhcmUgc3dpdGNoZWQKK29mZiBiZWZvcmUgcmVib290aW5nLCBzbyB0aGF0IE92ZXJTY2FuIGlzIGRpc2FibGVkIGFuZCBUT1MgYm9vdHMKK2NvcnJlY3RseS4KKworICBJZiB5b3UgZ2l2ZSBhbiBvcHRpb24gYm90aCwgd2l0aCBhbmQgd2l0aG91dCB0aGUgIm92XyIgcHJlZml4LCB0aGUKK2VhcmxpZXIgaW5pdGlhbGl6YXRpb24gKCJvdl8iLWxlc3MpIHRha2VzIHByZWNlZGVuY2UuIEJ1dCB0aGUKK3N3aXRjaGluZy1vZmYgb24gcmVzZXQgc3RpbGwgaGFwcGVucyBpbiB0aGlzIGNhc2UuCisKKzQuNSkgc3RyYW1fc3dhcD0KKy0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBzdHJhbV9zd2FwPTxkb19zd2FwPlssPG1heF9zd2FwPl0KKworICBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUga2VybmVsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGgKK0NPTkZJR19TVFJBTV9TV0FQIGVuYWJsZWQuIE5vcm1hbGx5LCB0aGUga2VybmVsIHRoZW4gZGV0ZXJtaW5lcworZHluYW1pY2FsbHkgd2hldGhlciB0byBhY3R1YWxseSB1c2UgU1QtUkFNIGFzIHN3YXAgc3BhY2UuIChDdXJyZW50bHksCit0aGUgZnJhY3Rpb24gb2YgU1QtUkFNIG11c3QgYmUgbGVzcyBvciBlcXVhbCAxLzMgb2YgdG90YWwgbWVtb3J5IHRvCitlbmFibGUgdGhpcyBzd2FwcGluZy4pIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGtlcm5lbCdzIGRlY2lzaW9uIGJ5CitzcGVjaWZ5aW5nIHRoaXMgb3B0aW9uLiAxIGZvciA8ZG9fc3dhcD4gbWVhbnMgYWx3YXlzIGVuYWJsZSB0aGUgc3dhcCwKK2V2ZW4gaWYgeW91IGhhdmUgbGVzcyBhbHRlcm5hdGUgUkFNLiAwIHN0YW5kcyBmb3IgbmV2ZXIgc3dhcCB0bworU1QtUkFNLCBldmVuIGlmIGl0J3Mgc21hbGwgZW5vdWdoIGNvbXBhcmVkIHRvIHRoZSByZXN0IG9mIG1lbW9yeS4KKworICBJZiBTVC1SQU0gc3dhcHBpbmcgaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB1c3VhbGx5IHVzZXMgYWxsIGZyZWUKK1NULVJBTSBhcyBzd2FwICJkZXZpY2UiLiBJZiB0aGUga2VybmVsIHJlc2lkZXMgaW4gU1QtUkFNLCB0aGUgcmVnaW9uCithbGxvY2F0ZWQgYnkgaXQgaXMgb2J2aW91c2x5IG5ldmVyIHVzZWQgZm9yIHN3YXBwaW5nIDotKSBZb3UgY2FuIGFsc28KK2xpbWl0IHRoaXMgYW1vdW50IGJ5IHNwZWNpZnlpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIDxtYXhfc3dhcD4sIGlmCit5b3Ugd2FudCB0byB1c2UgcGFydHMgb2YgU1QtUkFNIGFzIG5vcm1hbCBzeXN0ZW0gbWVtb3J5LiA8bWF4X3N3YXA+IGlzCitpbiBrQnl0ZXMgYW5kIHRoZSBudW1iZXIgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgNCAob3RoZXJ3aXNlOiByb3VuZGVkCitkb3duKS4KKworNSkgT3B0aW9ucyBmb3IgQW1pZ2EgT25seToKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzUuMSkgdmlkZW89CistLS0tLS0tLS0tLQorCitTeW50YXg6IHZpZGVvPTxmYm5hbWU+OjxzdWItb3B0aW9ucy4uLj4KKworVGhlIDxmYm5hbWU+IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZyYW1lIGJ1ZmZlciwgdmFsaWQKK29wdGlvbnMgYXJlIGBhbWlmYicsIGBjeWJlcicsICd2aXJnZScsIGByZXR6MycgYW5kIGBjbGdlbicsIHByb3ZpZGVkCit0aGF0IHRoZSByZXNwZWN0aXZlIGZyYW1lIGJ1ZmZlciBkZXZpY2VzIGhhdmUgYmVlbiBjb21waWxlZCBpbnRvIHRoZQora2VybmVsIChvciBjb21waWxlZCBhcyBsb2FkYWJsZSBtb2R1bGVzKS4gVGhlIGJlaGF2aW9yIG9mIHRoZSA8ZmJuYW1lPgorb3B0aW9uIHdhcyBjaGFuZ2VkIGluIDIuMS41NyBzbyBpdCBpcyBub3cgcmVjb21tZW5kZWQgdG8gc3BlY2lmeSB0aGlzCitvcHRpb24uCisKK1RoZSA8c3ViLW9wdGlvbnM+IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHN1Yi1vcHRpb25zIGxpc3RlZAorYmVsb3cuIFRoaXMgb3B0aW9uIGlzIG9yZ2FuaXplZCBzaW1pbGFyIHRvIHRoZSBBdGFyaSB2ZXJzaW9uIG9mIHRoZQorInZpZGVvIi1vcHRpb24gKDQuMSksIGJ1dCBrbm93cyBmZXdlciBzdWItb3B0aW9ucy4KKworNS4xLjEpIHZpZGVvIG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FnYWluLCBzaW1pbGFyIHRvIHRoZSB2aWRlbyBtb2RlIGZvciB0aGUgQXRhcmkgKHNlZSA0LjEuMSkuIFByZWRlZmluZWQKK21vZGVzIGRlcGVuZCBvbiB0aGUgdXNlZCBmcmFtZSBidWZmZXIgZGV2aWNlLgorCitPQ1MsIEVDUyBhbmQgQUdBIG1hY2hpbmVzIGFsbCB1c2UgdGhlIGNvbG9yIGZyYW1lIGJ1ZmZlci4gVGhlIGZvbGxvd2luZworcHJlZGVmaW5lZCB2aWRlbyBtb2RlcyBhcmUgYXZhaWxhYmxlOgorCitOVFNDIG1vZGVzOgorIC0gbnRzYyAgICAgICAgICAgIDogNjQweDIwMCwgMTUga0h6LCA2MCBIegorIC0gbnRzYy1sYWNlICAgICAgIDogNjQweDQwMCwgMTUga0h6LCA2MCBIeiBpbnRlcmxhY2VkCitQQUwgbW9kZXM6CisgLSBwYWwgICAgICAgICAgICAgOiA2NDB4MjU2LCAxNSBrSHosIDUwIEh6CisgLSBwYWwtbGFjZSAgICAgICAgOiA2NDB4NTEyLCAxNSBrSHosIDUwIEh6IGludGVybGFjZWQKK0VDUyBtb2RlczoKKyAtIG11bHRpc2NhbiAgICAgICA6IDY0MHg0ODAsIDI5IGtIeiwgNTcgSHoKKyAtIG11bHRpc2Nhbi1sYWNlICA6IDY0MHg5NjAsIDI5IGtIeiwgNTcgSHogaW50ZXJsYWNlZAorIC0gZXVybzM2ICAgICAgICAgIDogNjQweDIwMCwgMTUga0h6LCA3MiBIegorIC0gZXVybzM2LWxhY2UgICAgIDogNjQweDQwMCwgMTUga0h6LCA3MiBIeiBpbnRlcmxhY2VkCisgLSBldXJvNzIgICAgICAgICAgOiA2NDB4NDAwLCAyOSBrSHosIDY4IEh6CisgLSBldXJvNzItbGFjZSAgICAgOiA2NDB4ODAwLCAyOSBrSHosIDY4IEh6IGludGVybGFjZWQKKyAtIHN1cGVyNzIgICAgICAgICA6IDgwMHgzMDAsIDIzIGtIeiwgNzAgSHoKKyAtIHN1cGVyNzItbGFjZSAgICA6IDgwMHg2MDAsIDIzIGtIeiwgNzAgSHogaW50ZXJsYWNlZAorIC0gZGJsbnRzYy1mZiAgICAgIDogNjQweDQwMCwgMjcga0h6LCA1NyBIegorIC0gZGJsbnRzYy1sYWNlICAgIDogNjQweDgwMCwgMjcga0h6LCA1NyBIeiBpbnRlcmxhY2VkCisgLSBkYmxwYWwtZmYgICAgICAgOiA2NDB4NTEyLCAyNyBrSHosIDQ3IEh6CisgLSBkYmxwYWwtbGFjZSAgICAgOiA2NDB4MTAyNCwgMjcga0h6LCA0NyBIeiBpbnRlcmxhY2VkCisgLSBkYmxudHNjICAgICAgICAgOiA2NDB4MjAwLCAyNyBrSHosIDU3IEh6IGRvdWJsZXNjYW4KKyAtIGRibHBhbCAgICAgICAgICA6IDY0MHgyNTYsIDI3IGtIeiwgNDcgSHogZG91Ymxlc2NhbgorVkdBIG1vZGVzOgorIC0gdmdhICAgICAgICAgICAgIDogNjQweDQ4MCwgMzEga0h6LCA2MCBIegorIC0gdmdhNzAgICAgICAgICAgIDogNjQweDQwMCwgMzEga0h6LCA3MCBIegorCitQbGVhc2Ugbm90aWNlIHRoYXQgdGhlIEVDUyBhbmQgVkdBIG1vZGVzIHJlcXVpcmUgZWl0aGVyIGFuIEVDUyBvciBBR0EKK2NoaXBzZXQsIGFuZCB0aGF0IHRoZXNlIG1vZGVzIGFyZSBsaW1pdGVkIHRvIDItYml0IGNvbG9yIGZvciB0aGUgRUNTCitjaGlwc2V0IGFuZCA4LWJpdCBjb2xvciBmb3IgdGhlIEFHQSBjaGlwc2V0LgorCis1LjEuMikgZGVwdGgKKy0tLS0tLS0tLS0tLQorCitTeW50YXg6IGRlcHRoOjxuci4gb2YgYml0LXBsYW5lcz4KKworU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdC1wbGFuZXMgZm9yIHRoZSBzZWxlY3RlZCB2aWRlby1tb2RlLgorCis1LjEuMykgaW52ZXJzZQorLS0tLS0tLS0tLS0tLS0KKworVXNlIGludmVydGVkIGRpc3BsYXkgKGJsYWNrIG9uIHdoaXRlKS4gRnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIHRoZQorImludmVyc2UiIHN1Yi1vcHRpb24gZm9yIHRoZSBBdGFyaS4KKworNS4xLjQpIGZvbnQKKy0tLS0tLS0tLS0tCisKK1N5bnRheDogZm9udDo8Zm9udG5hbWU+CisKK1NwZWNpZnkgdGhlIGZvbnQgdG8gdXNlIGluIHRleHQgbW9kZXMuIEZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyB0aGUKKyJmb250IiBzdWItb3B0aW9uIGZvciB0aGUgQXRhcmksIGV4Y2VwdCB0aGF0IGBQRUFSTDh4OCcgaXMgdXNlZCBpbnN0ZWFkCitvZiBgVkdBOHg4JyBpZiB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgZGlzcGxheSBpcyBsZXNzIHRoYW4gNDAwIHBpeGVsCityb3dzLgorCis1LjEuNSkgbW9uaXRvcmNhcDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBtb25pdG9yY2FwOjx2bWluPjs8dm1heD47PGhtaW4+OzxobWF4PgorCitUaGlzIGRlc2NyaWJlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgbXVsdGlzeW5jIG1vbml0b3IuIEZvciBub3csIG9ubHkKK3RoZSBjb2xvciBmcmFtZSBidWZmZXIgdXNlcyB0aGUgc2V0dGluZ3Mgb2YgIm1vbml0b3JjYXA6Ii4KKworICA8dm1pbj4gYW5kIDx2bWF4PiBhcmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0sIHJlc3AuLCB2ZXJ0aWNhbCBmcmVxdWVuY2llcworeW91ciBtb25pdG9yIGNhbiB3b3JrIHdpdGgsIGluIEh6LiA8aG1pbj4gYW5kIDxobWF4PiBhcmUgdGhlIHNhbWUgZm9yCit0aGUgaG9yaXpvbnRhbCBmcmVxdWVuY3ksIGluIGtIei4KKworICBUaGUgZGVmYXVsdHMgYXJlIDUwOzkwOzE1OzM4IChHZW5lcmljIEFtaWdhIG11bHRpc3luYyBtb25pdG9yKS4KKworCis1LjIpIGZkX2RlZl9kZjA9CistLS0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogZmRfZGVmX2RmMD08dmFsdWU+CisKK1NldHMgdGhlIGRmMCB2YWx1ZSBmb3IgInNpbGVudCIgZmxvcHB5IGRyaXZlcy4gVGhlIHZhbHVlIHNob3VsZCBiZSBpbgoraGV4YWRlY2ltYWwgd2l0aCAiMHgiIHByZWZpeC4KKworCis1LjMpIHdkMzNjOTM9CistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogd2QzM2M5Mz08c3ViLW9wdGlvbnMuLi4+CisKK1RoZXNlIG9wdGlvbnMgYWZmZWN0IHRoZSBBNTkwL0EyMDkxLCBBMzAwMCBhbmQgR1ZQIFNlcmllcyBJSSBTQ1NJCitjb250cm9sbGVycy4KKworVGhlIDxzdWItb3B0aW9ucz4gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgc3ViLW9wdGlvbnMgbGlzdGVkCitiZWxvdy4KKworNS4zLjEpIG5vc3luYworLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IG5vc3luYzpiaXRtYXNrCisKKyAgYml0bWFzayBpcyBhIGJ5dGUgd2hlcmUgdGhlIDFzdCA3IGJpdHMgY29ycmVzcG9uZCB3aXRoIHRoZSA3Citwb3NzaWJsZSBTQ1NJIGRldmljZXMuIFNldCBhIGJpdCB0byBwcmV2ZW50IHN5bmMgbmVnb3RpYXRpb24gb24gdGhhdAorZGV2aWNlLiBUbyBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYSBjb21tYW5kLWxpbmUgc3VjaCBhcworIndkMzNjOTM9MjU1IiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZCB0bworIndkMzNjOTM9bm9zeW5jOjB4ZmYiLiBUaGUgZGVmYXVsdCBpcyB0byBkaXNhYmxlIHN5bmMgbmVnb3RpYXRpb24gZm9yCithbGwgZGV2aWNlcywgZWcuIG5vc3luYzoweGZmLgorCis1LjMuMikgcGVyaW9kCistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogcGVyaW9kOm5zCisKKyAgYG5zJyBpcyB0aGUgbWluaW11bSAjIG9mIG5hbm9zZWNvbmRzIGluIGEgU0NTSSBkYXRhIHRyYW5zZmVyCitwZXJpb2QuIERlZmF1bHQgaXMgNTAwOyBhY2NlcHRhYmxlIHZhbHVlcyBhcmUgMjUwIC0gMTAwMC4KKworNS4zLjMpIGRpc2Nvbm5lY3QKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1N5bnRheDogZGlzY29ubmVjdDp4CisKKyAgU3BlY2lmeSB4ID0gMCB0byBuZXZlciBhbGxvdyBkaXNjb25uZWN0cywgMiB0byBhbHdheXMgYWxsb3cgdGhlbS4KK3ggPSAxIGRvZXMgJ2FkYXB0aXZlJyBkaXNjb25uZWN0cywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYW5kIGdlbmVyYWxseQordGhlIGJlc3QgY2hvaWNlLgorCis1LjMuNCkgZGVidWcKKy0tLS0tLS0tLS0tLQorCitTeW50YXg6IGRlYnVnOngKKworICBJZiBgREVCVUdHSU5HX09OJyBpcyBkZWZpbmVkLCB4IGlzIGEgYml0IG1hc2sgdGhhdCBjYXVzZXMgdmFyaW91cwordHlwZXMgb2YgZGVidWcgb3V0cHV0IHRvIHByaW50ZWQgLSBzZWUgdGhlIERCX3h4eCBkZWZpbmVzIGluCit3ZDMzYzkzLmguCisKKzUuMy41KSBjbG9jaworLS0tLS0tLS0tLS0tCisKK1N5bnRheDogY2xvY2s6eAorCisgIHggPSBjbG9jayBpbnB1dCBpbiBNSHogZm9yIFdEMzNjOTMgY2hpcC4gTm9ybWFsIHZhbHVlcyB3b3VsZCBiZSBmcm9tCis4IHRocm91Z2ggMjAuIFRoZSBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb24geW91ciBob3N0YWRhcHRlcihzKSwKK2RlZmF1bHQgZm9yIHRoZSBBMzAwMCBpbnRlcm5hbCBjb250cm9sbGVyIGlzIDE0LCBmb3IgdGhlIEEyMDkxIGl0J3MgOAorYW5kIGZvciB0aGUgR1ZQIGhvc3RhZGFwdGVycyBpdCdzIGVpdGhlciA4IG9yIDE0LCBkZXBlbmRpbmcgb24gdGhlCitob3N0YWRhcHRlciBhbmQgdGhlIFNDU0ktY2xvY2sganVtcGVyIHByZXNlbnQgb24gc29tZSBHVlAKK2hvc3RhZGFwdGVycy4KKworNS4zLjYpIG5leHQKKy0tLS0tLS0tLS0tCisKKyAgTm8gYXJndW1lbnQuIFVzZWQgdG8gc2VwYXJhdGUgYmxvY2tzIG9mIGtleXdvcmRzIHdoZW4gdGhlcmUncyBtb3JlCit0aGFuIG9uZSB3ZDMzYzkzLWJhc2VkIGhvc3QgYWRhcHRlciBpbiB0aGUgc3lzdGVtLgorCis1LjMuNykgbm9kbWEKKy0tLS0tLS0tLS0tLQorCitTeW50YXg6IG5vZG1hOngKKworICBJZiB4IGlzIDEgKG9yIGlmIHRoZSBvcHRpb24gaXMganVzdCB3cml0dGVuIGFzICJub2RtYSIpLCB0aGUgV0QzM2M5MworY29udHJvbGxlciB3aWxsIG5vdCB1c2UgRE1BICg9IGRpcmVjdCBtZW1vcnkgYWNjZXNzKSB0byBhY2Nlc3MgdGhlCitBbWlnYSdzIG1lbW9yeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBzb21lIHN5c3RlbXMgKGxpa2UgQTMwMDAncyBhbmQKK0E0MDAwJ3Mgd2l0aCB0aGUgQTM2NDAgYWNjZWxlcmF0b3IsIHJldmlzaW9uIDMuMCkgdGhhdCBoYXZlIHByb2JsZW1zCit1c2luZyBETUEgdG8gY2hpcCBtZW1vcnkuICBUaGUgZGVmYXVsdCBpcyAwLCBpLmUuIHRvIHVzZSBETUEgaWYKK3Bvc3NpYmxlLgorCisKKzUuNCkgZ3ZwMTE9CistLS0tLS0tLS0tLQorCitTeW50YXg6IGd2cDExPTxhZGRyLW1hc2s+CisKKyAgVGhlIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIEdWUCBkcml2ZXIgZGlkIG5vdCBoYW5kbGUgRE1BCithZGRyZXNzLW1hc2sgc2V0dGluZ3MgY29ycmVjdGx5IHdoaWNoIG1hZGUgaXQgbmVjZXNzYXJ5IGZvciBzb21lCitwZW9wbGUgdG8gdXNlIHRoaXMgb3B0aW9uLCBpbiBvcmRlciB0byBnZXQgdGhlaXIgR1ZQIGNvbnRyb2xsZXIKK3J1bm5pbmcgdW5kZXIgTGludXguIFRoZXNlIHByb2JsZW1zIGhhdmUgaG9wZWZ1bGx5IGJlZW4gc29sdmVkIGFuZCB0aGUKK3VzZSBvZiB0aGlzIG9wdGlvbiBpcyBub3cgaGlnaGx5IHVucmVjb21tZW5kZWQhCisKKyAgSW5jb3JyZWN0IHVzZSBjYW4gbGVhZCB0byB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLCBzbyBwbGVhc2Ugb25seSB1c2UKK3RoaXMgb3B0aW9uIGlmIHlvdSAqa25vdyogd2hhdCB5b3UgYXJlIGRvaW5nIGFuZCBoYXZlIGEgcmVhc29uIHRvIGRvCitzby4gSW4gYW55IGNhc2UgaWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgYW5kIG5lZWQgdG8gdXNlIHRoaXMKK29wdGlvbiwgcGxlYXNlIGluZm9ybSB1cyBhYm91dCBpdCBieSBtYWlsaW5nIHRvIHRoZSBMaW51eC82OGsga2VybmVsCittYWlsaW5nIGxpc3QuCisKKyAgVGhlIGFkZHJlc3MgbWFzayBzZXQgYnkgdGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoaWNoIGFkZHJlc3NlcyBhcmUKK3ZhbGlkIGZvciBETUEgd2l0aCB0aGUgR1ZQIFNlcmllcyBJSSBTQ1NJIGNvbnRyb2xsZXIuIEFuIGFkZHJlc3MgaXMKK3ZhbGlkLCBpZiBubyBiaXRzIGFyZSBzZXQgZXhjZXB0IHRoZSBiaXRzIHRoYXQgYXJlIHNldCBpbiB0aGUgbWFzaywKK3Rvby4KKworICBTb21lIHZlcnNpb25zIG9mIHRoZSBHVlAgY2FuIG9ubHkgRE1BIGludG8gYSAyNCBiaXQgYWRkcmVzcyByYW5nZSwKK3NvbWUgY2FuIGFkZHJlc3MgYSAyNSBiaXQgYWRkcmVzcyByYW5nZSB3aGlsZSBvdGhlcnMgY2FuIHVzZSB0aGUgd2hvbGUKKzMyIGJpdCBhZGRyZXNzIHJhbmdlIGZvciBETUEuIFRoZSBjb3JyZWN0IHNldHRpbmcgZGVwZW5kcyBvbiB5b3VyCitjb250cm9sbGVyIGFuZCBzaG91bGQgYmUgYXV0b2RldGVjdGVkIGJ5IHRoZSBkcml2ZXIuIEFuIGV4YW1wbGUgaXMgdGhlCisyNCBiaXQgcmVnaW9uIHdoaWNoIGlzIHNwZWNpZmllZCBieSBhIG1hc2sgb2YgMHgwMGZmZmZmZS4KKworCis1LjUpIDUzYzd4eD0KKy0tLS0tLS0tLS0tLQorCitTeW50YXg6IDUzYzd4eD08c3ViLW9wdGlvbnMuLi4+CisKK1RoZXNlIG9wdGlvbnMgYWZmZWN0IHRoZSBBNDAwMFQsIEE0MDkxLCBXYXJwRW5naW5lLCBCbGl6emFyZCA2MDNlKywKK2FuZCBHRm9yY2UgMDQwLzA2MCBTQ1NJIGNvbnRyb2xsZXJzIG9uIHRoZSBBbWlnYSwgYXMgd2VsbCBhcyB0aGUKK2J1aWx0aW4gTVZNRSAxNnggU0NTSSBjb250cm9sbGVyLgorCitUaGUgPHN1Yi1vcHRpb25zPiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBzdWItb3B0aW9ucyBsaXN0ZWQKK2JlbG93LgorCis1LjUuMSkgbm9zeW5jCistLS0tLS0tLS0tLS0tCisKK1N5bnRheDogbm9zeW5jOjAKKworICBEaXNhYmxlcyBzeW5jIG5lZ290aWF0aW9uIGZvciBhbGwgZGV2aWNlcy4gIEFueSB2YWx1ZSBhZnRlciB0aGUKKyAgY29sb24gaXMgYWNjZXB0YWJsZSAoYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QpLgorCis1LjUuMikgbm9hc3luYworLS0tLS0tLS0tLS0tLS0KKworU3ludGF4OiBub2FzeW5jOjAKKworICBEaXNhYmxlcyBhc3luYyBhbmQgc3luYyBuZWdvdGlhdGlvbiBmb3IgYWxsIGRldmljZXMuICBBbnkgdmFsdWUKKyAgYWZ0ZXIgdGhlIGNvbG9uIGlzIGFjY2VwdGFibGUgKGFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0KS4KKworNS41LjMpIG5vZGlzY29ubmVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IG5vZGlzY29ubmVjdDowCisKKyAgRGlzYWJsZXMgU0NTSSBkaXNjb25uZWN0cy4gIEFueSB2YWx1ZSBhZnRlciB0aGUgY29sb24gaXMgYWNjZXB0YWJsZQorICAoYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QpLgorCis1LjUuNCkgdmFsaWRpZHMKKy0tLS0tLS0tLS0tLS0tLQorCitTeW50YXg6IHZhbGlkaWRzOjB4Tk4KKworICBTcGVjaWZ5IHdoaWNoIFNDU0kgaWRzIHRoZSBkcml2ZXIgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uICBUaGlzIGlzCisgIGEgYml0bWFzayAoaS5lLiB0byBvbmx5IHBheSBhdHRlbnRpb24gdG8gSUQjNCwgeW91J2QgdXNlIDB4MTApLgorICBEZWZhdWx0IGlzIDB4N2YgKGRldmljZXMgMC02KS4KKworNS41LjUpIG9wdGhpCis1LjUuNikgb3B0bG8KKy0tLS0tLS0tLS0tLQorCitTeW50YXg6IG9wdGhpOk0sb3B0bG86TgorCisgIFNwZWNpZnkgb3B0aW9ucyBmb3IgImhvc3RkYXRhLT5vcHRpb25zIi4gIFRoZSBhY2NlcHRhYmxlIGRlZmluaXRpb25zCisgIGFyZSBsaXN0ZWQgaW4gZHJpdmVycy9zY3NpLzUzYzd4eC5oOyB0aGUgMzIgaGlnaCBiaXRzIHNob3VsZCBiZSBpbgorICBvcHRoaSBhbmQgdGhlIDMyIGxvdyBiaXRzIGluIG9wdGxvLiAgVGhleSBtdXN0IGJlIHNwZWNpZmllZCBpbiB0aGUKKyAgb3JkZXIgb3B0aGk9TSxvcHRsbz1OLgorCis1LjUuNykgbmV4dAorLS0tLS0tLS0tLS0KKworICBObyBhcmd1bWVudC4gVXNlZCB0byBzZXBhcmF0ZSBibG9ja3Mgb2Yga2V5d29yZHMgd2hlbiB0aGVyZSdzIG1vcmUKKyAgdGhhbiBvbmUgNTNjN3h4IGhvc3QgYWRhcHRlciBpbiB0aGUgc3lzdGVtLgorCisKKy8qIExvY2FsIFZhcmlhYmxlczogKi8KKy8qIG1vZGU6IHRleHQgICAgICAgKi8KKy8qIEVuZDogICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFnaWMtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vbWFnaWMtbnVtYmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhlZWZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYWdpYy1udW1iZXIudHh0CkBAIC0wLDAgKzEsMTc0IEBACitUaGlzIGZpbGUgaXMgYSByZWdpc3RyeSBvZiBtYWdpYyBudW1iZXJzIHdoaWNoIGFyZSBpbiB1c2UuICBXaGVuIHlvdQorYWRkIGEgbWFnaWMgbnVtYmVyIHRvIGEgc3RydWN0dXJlLCB5b3Ugc2hvdWxkIGFsc28gYWRkIGl0IHRvIHRoaXMKK2ZpbGUsIHNpbmNlIGl0IGlzIGJlc3QgaWYgdGhlIG1hZ2ljIG51bWJlcnMgdXNlZCBieSB2YXJpb3VzIHN0cnVjdHVyZXMKK2FyZSB1bmlxdWUuCisKK0l0IGlzIGEgKnZlcnkqIGdvb2QgaWRlYSB0byBwcm90ZWN0IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBtYWdpYworbnVtYmVycy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjaGVjayBhdCBydW4gdGltZSB3aGV0aGVyIChhKSBhIHN0cnVjdHVyZQoraGFzIGJlZW4gY2xvYmJlcmVkLCBvciAoYikgeW91J3ZlIHBhc3NlZCB0aGUgd3Jvbmcgc3RydWN0dXJlIHRvIGEKK3JvdXRpbmUuICBUaGlzIGxhc3QgaXMgZXNwZWNpYWxseSB1c2VmdWwgLS0tIHBhcnRpY3VsYXJseSB3aGVuIHlvdSBhcmUKK3Bhc3NpbmcgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyB2aWEgYSB2b2lkICogcG9pbnRlci4gIFRoZSB0dHkgY29kZSwKK2ZvciBleGFtcGxlLCBkb2VzIHRoaXMgZnJlcXVlbnRseSB0byBwYXNzIGRyaXZlci1zcGVjaWZpYyBhbmQgbGluZQorZGlzY2lwbGluZS1zcGVjaWZpYyBzdHJ1Y3R1cmVzIGJhY2sgYW5kIGZvcnRoLgorCitUaGUgd2F5IHRvIHVzZSBtYWdpYyBudW1iZXJzIGlzIHRvIGRlY2xhcmUgdGhlbiBhdCB0aGUgYmVnaW5uaW5nIG9mCit0aGUgc3RydWN0dXJlLCBsaWtlIHNvOgorCitzdHJ1Y3QgdHR5X2xkaXNjIHsKKwlpbnQJbWFnaWM7CisJLi4uCit9OworCitQbGVhc2UgZm9sbG93IHRoaXMgZGlzY2lwbGluZSB3aGVuIHlvdSBhcmUgYWRkaW5nIGZ1dHVyZSBlbmhhbmNlbWVudHMKK3RvIHRoZSBrZXJuZWwhICBJdCBoYXMgc2F2ZWQgbWUgY291bnRsZXNzIGhvdXJzIG9mIGRlYnVnZ2luZywKK2VzcGVjaWFsbHkgaW4gdGhlIHNjcmV3eSBjYXNlcyB3aGVyZSBhbiBhcnJheSBoYXMgYmVlbiBvdmVycnVuIGFuZAorc3RydWN0dXJlcyBmb2xsb3dpbmcgdGhlIGFycmF5IGhhdmUgYmVlbiBvdmVyd3JpdHRlbi4gIFVzaW5nIHRoaXMKK2Rpc2NpcGxpbmUsIHRoZXNlIGNhc2VzIGdldCBkZXRlY3RlZCBxdWlja2x5IGFuZCBzYWZlbHkuCisKKwkJCQkJVGhlb2RvcmUgVHMnbworCQkJCQkzMSBNYXIgOTQKKworVGhlIG1hZ2ljIHRhYmxlIGlzIGN1cnJlbnQgdG8gTGludXggMi4xLjU1LgorCisJCQkJCU1pY2hhZWwgQ2hhc3RhaW4KKwkJCQkJPG1haWx0bzptZWNAc2hvdXQubmV0PgorCQkJCQkyMiBTZXAgMTk5NworCitOb3cgaXQgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aCBMaW51eCAyLjEuMTEyLiBCZWNhdXNlCit3ZSBhcmUgaW4gZmVhdHVyZSBmcmVlemUgdGltZSBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRoYXQKK3NvbWV0aGluZyB3aWxsIGNoYW5nZSBiZWZvcmUgMi4yLnguIFRoZSBlbnRyaWVzIGFyZQorc29ydGVkIGJ5IG51bWJlciBmaWVsZC4KKworCQkJCQlLcnp5c3p0b2YgRy4gQmFyYW5vd3NraQorCQkJCQk8bWFpbHRvOiBrZ2JAa25tLm9yZy5wbD4KKwkJCQkJMjkgSnVsIDE5OTgKKworVXBkYXRlZCB0aGUgbWFnaWMgdGFibGUgdG8gTGludXggMi41LjQ1LiBSaWdodCBvdmVyIHRoZSBmZWF0dXJlIGZyZWV6ZSwKK2J1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgbmV3IG1hZ2ljIG51bWJlcnMgd2lsbCBzbmVhayBpbnRvIHRoZQora2VybmVsIGJlZm9yZSAyLjYueCB5ZXQuCisKKwkJCQkJUGV0ciBCYXVkaXMKKwkJCQkJPHBhc2t5QHVjdy5jej4KKwkJCQkJMDMgTm92IDIwMDIKKworVXBkYXRlZCB0aGUgbWFnaWMgdGFibGUgdG8gTGludXggMi41Ljc0LgorCisJCQkJCUZhYmlhbiBGcmVkZXJpY2sKKwkJCQkJPGZmcmVkZXJpY2tAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCQkJCQkwOSBKdWwgMjAwMworCisKK01hZ2ljIE5hbWUgICAgICAgICAgICBOdW1iZXIgICAgICBTdHJ1Y3R1cmUgICAgICAgICAgICBGaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BHX01BR0lDICAgICAgICAgICAgICAnUCcgICAgICAgICBwZ197cmVhZCx3cml0ZX1faGRyIGluY2x1ZGUvbGludXgvcGcuaAorQ01BR0lDICAgICAgICAgICAgICAgIDB4MDExMSAgICAgIHVzZXIgICAgICAgICAgICAgIGluY2x1ZGUvbGludXgvYS5vdXQuaAorTUtJU1NfRFJJVkVSX01BR0lDICAgIDB4MDRiZiAgICAgIG1raXNzX2NoYW5uZWwgICAgIGRyaXZlcnMvbmV0L21raXNzLmgKK1JJU0NPTThfTUFHSUMgICAgICAgICAweDA5MDcgICAgICByaXNjb21fcG9ydCAgICAgICBkcml2ZXJzL2NoYXIvcmlzY29tOC5oCitTUEVDSUFMSVhfTUFHSUMgICAgICAgMHgwOTA3ICAgICAgc3BlY2lhbGl4X3BvcnQgICAgZHJpdmVycy9jaGFyL3NwZWNpYWxpeF9pbzguaAorQVVST1JBX01BR0lDICAgICAgICAgIDB4MEExOCAgICAgIEF1cm9yYV9wb3J0ICAgICAgIGRyaXZlcnMvc2J1cy9jaGFyL2F1cm9yYS5oCitIRExDX01BR0lDICAgICAgICAgICAgMHgyMzllICAgICAgbl9oZGxjICAgICAgICAgICAgZHJpdmVycy9jaGFyL25faGRsYy5jCitBUE1fQklPU19NQUdJQyAgICAgICAgMHg0MTAxICAgICAgYXBtX3VzZXIgICAgICAgICAgYXJjaC9pMzg2L2tlcm5lbC9hcG0uYworQ1lDTEFERVNfTUFHSUMgICAgICAgIDB4NDM1OSAgICAgIGN5Y2xhZGVzX3BvcnQgICAgIGluY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorREJfTUFHSUMgICAgICAgICAgICAgIDB4NDQ0MiAgICAgIGZjX2luZm8gICAgICAgICAgIGRyaXZlcnMvbmV0L2lwaDU1MjZfbm92cmFtLmMKK0RMX01BR0lDICAgICAgICAgICAgICAweDQ0NGQgICAgICBmY19pbmZvICAgICAgICAgICBkcml2ZXJzL25ldC9pcGg1NTI2X25vdnJhbS5jCitGQVNZTkNfTUFHSUMgICAgICAgICAgMHg0NjAxICAgICAgZmFzeW5jX3N0cnVjdCAgICAgaW5jbHVkZS9saW51eC9mcy5oCitGRl9NQUdJQyAgICAgICAgICAgICAgMHg0NjQ2ICAgICAgZmNfaW5mbyAgICAgICAgICAgZHJpdmVycy9uZXQvaXBoNTUyNl9ub3ZyYW0uYworSVNJQ09NX01BR0lDICAgICAgICAgIDB4NGQ1NCAgICAgIGlzaV9wb3J0ICAgICAgICAgIGluY2x1ZGUvbGludXgvaXNpY29tLmgKK1BUWV9NQUdJQyAgICAgICAgICAgICAweDUwMDEgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzL2NoYXIvcHR5LmMKK1BQUF9NQUdJQyAgICAgICAgICAgICAweDUwMDIgICAgICBwcHAgICAgICAgICAgICAgICBpbmNsdWRlL2xpbnV4L2lmX3BwcHZhci5oCitTRVJJQUxfTUFHSUMgICAgICAgICAgMHg1MzAxICAgICAgYXN5bmNfc3RydWN0ICAgICAgaW5jbHVkZS9saW51eC9zZXJpYWwuaAorU1NUQVRFX01BR0lDICAgICAgICAgIDB4NTMwMiAgICAgIHNlcmlhbF9zdGF0ZSAgICAgIGluY2x1ZGUvbGludXgvc2VyaWFsLmgKK1NMSVBfTUFHSUMgICAgICAgICAgICAweDUzMDIgICAgICBzbGlwICAgICAgICAgICAgICBkcml2ZXJzL25ldC9zbGlwLmgKK1NUUklQX01BR0lDICAgICAgICAgICAweDUzMDMgICAgICBzdHJpcCAgICAgICAgICAgICBkcml2ZXJzL25ldC9zdHJpcC5jCitYMjVfQVNZX01BR0lDICAgICAgICAgMHg1MzAzICAgICAgeDI1X2FzeSAgICAgICAgICAgZHJpdmVycy9uZXQveDI1X2FzeS5oCitTSVhQQUNLX01BR0lDICAgICAgICAgMHg1MzA0ICAgICAgc2l4cGFjayAgICAgICAgICAgZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suaAorQVgyNV9NQUdJQyAgICAgICAgICAgIDB4NTMxNiAgICAgIGF4X2Rpc3AgICAgICAgICAgIGRyaXZlcnMvbmV0L21raXNzLmgKK0VTUF9NQUdJQyAgICAgICAgICAgICAweDUzZWUgICAgICBlc3Bfc3RydWN0ICAgICAgICBkcml2ZXJzL2NoYXIvZXNwLmgKK1RUWV9NQUdJQyAgICAgICAgICAgICAweDU0MDEgICAgICB0dHlfc3RydWN0ICAgICAgICBpbmNsdWRlL2xpbnV4L3R0eS5oCitNR1NMX01BR0lDICAgICAgICAgICAgMHg1NDAxICAgICAgbWdzbF9pbmZvICAgICAgICAgZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKK1RUWV9EUklWRVJfTUFHSUMgICAgICAweDU0MDIgICAgICB0dHlfZHJpdmVyICAgICAgICBpbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAorTUdTTFBDX01BR0lDICAgICAgICAgIDB4NTQwMiAgICAgIG1nc2xwY19pbmZvICAgICAgIGRyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworVFRZX0xESVNDX01BR0lDICAgICAgIDB4NTQwMyAgICAgIHR0eV9sZGlzYyAgICAgICAgIGluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKK1VTQl9TRVJJQUxfTUFHSUMgICAgICAweDY3MDIgICAgICB1c2Jfc2VyaWFsICAgICAgICBkcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCitGVUxMX0RVUExFWF9NQUdJQyAgICAgMHg2OTY5ICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCitVU0JfQkxVRVRPT1RIX01BR0lDICAgMHg2ZDAyICAgICAgdXNiX2JsdWV0b290aCAgICAgZHJpdmVycy91c2IvY2xhc3MvYmx1ZXR0eS5jCitSRkNPTU1fVFRZX01BR0lDICAgICAgMHg2ZDAyICAgICAgICAgICAgICAgICAgICAgICAgbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKK1VTQl9TRVJJQUxfUE9SVF9NQUdJQyAweDczMDEgICAgICB1c2Jfc2VyaWFsX3BvcnQgICBkcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5oCitDR19NQUdJQyAgICAgICAgICAgICAgMHgwMDA5MDI1NSAgdWZzX2N5bGluZGVyX2dyb3VwIGluY2x1ZGUvbGludXgvdWZzX2ZzLmgKK0EyMjMyX01BR0lDICAgICAgICAgICAweDAwMGEyMjMyICBnc19wb3J0ICAgICAgICAgICBkcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmgKK1NPTEFSSVNfU09DS0VUX01BR0lDICAweDAwMEFEREVEICBzb2xfc29ja2V0X3N0cnVjdCBhcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmgKK1JQT1JUX01BR0lDICAgICAgICAgICAweDAwNTI1MDAxICByX3BvcnQgICAgICAgICAgICBkcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oCitMU0VNQUdJQyAgICAgICAgICAgICAgMHgwNTA5MTk5OCAgbHNlICAgICAgICAgICAgICAgZHJpdmVycy9mYzQvZmMuYworR0RUSU9DVExfTUFHSUMgICAgICAgIDB4MDYwMzBmMDcgIGdkdGhfaW93cl9zdHIgICAgIGRyaXZlcnMvc2NzaS9nZHRoX2lvY3RsLmgKK1JJRUJMX01BR0lDICAgICAgICAgICAweDA5MDUxOTkwICAgICAgICAgICAgICAgICAgICBkcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKK1JJT19NQUdJQyAgICAgICAgICAgICAweDEyMzQ1Njc4ICBnc19wb3J0ICAgICAgICAgICBkcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCitTWF9NQUdJQyAgICAgICAgICAgICAgMHgxMjM0NTY3OCAgZ3NfcG9ydCAgICAgICAgICAgZHJpdmVycy9jaGFyL3N4LmgKK05CRF9SRVFVRVNUX01BR0lDICAgICAweDEyNTYwOTUzICBuYmRfcmVxdWVzdCAgICAgICBpbmNsdWRlL2xpbnV4L25iZC5oCitSRURfTUFHSUMyICAgICAgICAgICAgMHgxNzBmYzJhNSAgKGFueSkgICAgICAgICAgICAgbW0vc2xhYi5jCitCQVlDT01fTUFHSUMgICAgICAgICAgMHgxOTczMDUxMCAgYmF5Y29tX3N0YXRlICAgICAgZHJpdmVycy9uZXQvYmF5Y29tX2VwcC5jCitJU0ROX1gyNUlGQUNFX01BR0lDICAgMHgxZTc1YTJiOSAgaXNkbl94MjVpZmFjZV9wcm90b19kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy9pc2RuL2lzZG5feDI1aWZhY2UuaAorRUNQX01BR0lDICAgICAgICAgICAgIDB4MjE1MDQzNDUgIGNka2VjcHNpZyAgICAgICAgIGluY2x1ZGUvbGludXgvY2RrLmgKK0xTT01BR0lDICAgICAgICAgICAgICAweDI3MDkxOTk3ICBsc28gICAgICAgICAgICAgICBkcml2ZXJzL2ZjNC9mYy5jCitMU01BR0lDICAgICAgICAgICAgICAgMHgyYTNiNGQyYSAgbHMgICAgICAgICAgICAgICAgZHJpdmVycy9mYzQvZmMuYworV0FOUElQRV9NQUdJQyAgICAgICAgIDB4NDE0QzQ0NTMgIHNkbGFfe2R1bXAsZXhlY30gIGluY2x1ZGUvbGludXgvd2FucGlwZS5oCitDU19DQVJEX01BR0lDICAgICAgICAgMHg0MzUyNTU1MyAgY3NfY2FyZCAgICAgICAgICAgc291bmQvb3NzL2NzNDZ4eC5jCitMQUJFTENMX01BR0lDICAgICAgICAgMHg0ODU3NDM0YyAgbGFiZWxjbF9pbmZvX3MgICAgaW5jbHVkZS9hc20vaWE2NC9zbi9sYWJlbGNsLmgKK0lTRE5fQVNZTkNfTUFHSUMgICAgICAweDQ5MzQ0QzAxICBtb2RlbV9pbmZvICAgICAgICBpbmNsdWRlL2xpbnV4L2lzZG4uaAorQ1RDX0FTWU5DX01BR0lDICAgICAgIDB4NDkzNDRDMDEgIGN0Y190dHlfaW5mbyAgICAgIGRyaXZlcnMvczM5MC9uZXQvY3RjdHR5LmMKK0lTRE5fTkVUX01BR0lDICAgICAgICAweDQ5MzQ0QzAyICBpc2RuX25ldF9sb2NhbF9zICBkcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0X2xpYi5oCitTQVZFS01TR19NQUdJQzIgICAgICAgMHg0QjRENTM0NyAgc2F2ZWttc2cgICAgICAgICAgYXJjaC8qL2FtaWdhL2NvbmZpZy5jCitTVExJX0JPQVJETUFHSUMgICAgICAgMHg0YmM2YzgyNSAgc3RsaWJyZCAgICAgICAgICAgaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaAorQ1NfU1RBVEVfTUFHSUMgICAgICAgIDB4NGM0ZjQ3NDkgIGNzX3N0YXRlICAgICAgICAgIHNvdW5kL29zcy9jczQ2eHguYworU0xBQl9DX01BR0lDICAgICAgICAgIDB4NGYxN2EzNmQgIGttZW1fY2FjaGVfcyAgICAgIG1tL3NsYWIuYworQ09XX01BR0lDICAgICAgICAgICAgIDB4NGY0ZjRmNGQgIGNvd19oZWFkZXJfdjEgICAgIGFyY2gvdW0vZHJpdmVycy91YmRfdXNlci5jCitJODEwX0NBUkRfTUFHSUMgICAgICAgMHg1MDcyNjk2RSAgaTgxMF9jYXJkICAgICAgICAgc291bmQvb3NzL2k4MTBfYXVkaW8uYworVFJJREVOVF9DQVJEX01BR0lDICAgIDB4NTA3MjY5NkUgIHRyaWRlbnRfY2FyZCAgICAgIHNvdW5kL29zcy90cmlkZW50LmMKK1JPVVRFUl9NQUdJQyAgICAgICAgICAweDUyNGQ0MTU3ICB3YW5fZGV2aWNlICAgICAgICBpbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCitTQ0NfTUFHSUMgICAgICAgICAgICAgMHg1MjY5NjM2OCAgZ3NfcG9ydCAgICAgICAgICAgZHJpdmVycy9jaGFyL3NjYy5oCitTQVZFS01TR19NQUdJQzEgICAgICAgMHg1MzQxNTY0NSAgc2F2ZWttc2cgICAgICAgICAgYXJjaC8qL2FtaWdhL2NvbmZpZy5jCitHREFfTUFHSUMgICAgICAgICAgICAgMHg1ODQ2NDU1MiAgZ2RhICAgICAgICAgICAgICAgaW5jbHVkZS9hc20tbWlwczY0L3NuL2dkYS5oCitSRURfTUFHSUMxICAgICAgICAgICAgMHg1YTJjZjA3MSAgKGFueSkgICAgICAgICAgICAgbW0vc2xhYi5jCitTVExfUE9SVE1BR0lDICAgICAgICAgMHg1YTcxODJjOSAgc3RscG9ydCAgICAgICAgICAgaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCitFRVBST01fTUFHSUNfVkFMVUUgICAgMFg1YWI0NzhkMiAgbGFuYWlfZGV2ICAgICAgICAgZHJpdmVycy9hdG0vbGFuYWkuYworSERMQ0RSVl9NQUdJQyAgICAgICAgIDB4NWFjNmU3NzggIGhkbGNkcnZfc3RhdGUgICAgIGluY2x1ZGUvbGludXgvaGRsY2Rydi5oCitFUENBX01BR0lDICAgICAgICAgICAgMHg1YzZkZjEwNCAgY2hhbm5lbCAgICAgICAgICAgaW5jbHVkZS9saW51eC9lcGNhLmgKK1BDWFhfTUFHSUMgICAgICAgICAgICAweDVjNmRmMTA0ICBjaGFubmVsICAgICAgICAgICBkcml2ZXJzL2NoYXIvcGN4eC5oCitLVl9NQUdJQyAgICAgICAgICAgICAgMHg1ZjRiNTY1ZiAga2VybmVsX3ZhcnNfcyAgICAgaW5jbHVkZS9hc20tbWlwczY0L3NuL2tsa2VybnZhcnMuaAorSTgxMF9TVEFURV9NQUdJQyAgICAgIDB4NjM2NTczNzMgIGk4MTBfc3RhdGUgICAgICAgIHNvdW5kL29zcy9pODEwX2F1ZGlvLmMKK1RSSURFTlRfU1RBVEVfTUFHSUMgICAweDYzNjU3MzczICB0cmllbnRfc3RhdGUgICAgICBzb3VuZC9vc3MvdHJpZGVudC5jCitNM19DQVJEX01BR0lDICAgICAgICAgMHg2NDZlNmY1MCAgbTNfY2FyZCAgICAgICAgICAgc291bmQvb3NzL21hZXN0cm8zLmMKK0ZXX0hFQURFUl9NQUdJQyAgICAgICAweDY1NzI2RjY2ICBmd19oZWFkZXIgICAgICAgICBkcml2ZXJzL2F0bS9mb3JlMjAwZS5oCitTTE9UX01BR0lDICAgICAgICAgICAgMHg2NzI2NzMyMSAgc2xvdCAgICAgICAgICAgICAgZHJpdmVycy9ob3RwbHVnL2NwcXBocC5oCitTTE9UX01BR0lDICAgICAgICAgICAgMHg2NzI2NzMyMiAgc2xvdCAgICAgICAgICAgICAgZHJpdmVycy9ob3RwbHVnL2FjcGlwaHAuaAorTE9fTUFHSUMgICAgICAgICAgICAgIDB4Njg3OTc1NDggIG5iZF9kZXZpY2UgICAgICAgIGluY2x1ZGUvbGludXgvbmJkLmgKK09QUk9GSUxFX01BR0lDICAgICAgICAweDZmNzA3MjZmICBzdXBlcl9ibG9jayAgICAgICBkcml2ZXJzL29wcm9maWxlL29wcm9maWxlZnMuaAorTTNfU1RBVEVfTUFHSUMgICAgICAgIDB4NzM0ZDcyNGQgIG0zX3N0YXRlICAgICAgICAgIHNvdW5kL29zcy9tYWVzdHJvMy5jCitTVExfUEFORUxNQUdJQyAgICAgICAgMHg3ZWY2MjFhMSAgc3RscGFuZWwgICAgICAgICAgaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCitWTUFMTE9DX01BR0lDICAgICAgICAgMHg4NzY1NDMyMCAgc25kX2FsbG9jX3RyYWNrICAgc291bmQvY29yZS9tZW1vcnkuYworS01BTExPQ19NQUdJQyAgICAgICAgIDB4ODc2NTQzMjEgIHNuZF9hbGxvY190cmFjayAgIHNvdW5kL2NvcmUvbWVtb3J5LmMKK1BXQ19NQUdJQyAgICAgICAgICAgICAweDg5REMxMEFCICBwd2NfZGV2aWNlICAgICAgICBkcml2ZXJzL3VzYi9tZWRpYS9wd2MuaAorTkJEX1JFUExZX01BR0lDICAgICAgIDB4OTY3NDQ2NjggIG5iZF9yZXBseSAgICAgICAgIGluY2x1ZGUvbGludXgvbmJkLmgKK1NUTF9CT0FSRE1BR0lDICAgICAgICAweGEyMjY3ZjUyICBzdGxicmQgICAgICAgICAgICBpbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKK0VOSTE1NV9NQUdJQyAgICAgICAgICAweGE1NGI4NzJkICBtaWR3YXlfZXByb20JICAgIGRyaXZlcnMvYXRtL2VuaS5oCitTQ0lfTUFHSUMgICAgICAgICAgICAgMHhiYWJlZmFjZSAgZ3NfcG9ydCAgICAgICAgICAgZHJpdmVycy9jaGFyL3NoLXNjaS5oCitDT0RBX01BR0lDICAgICAgICAgICAgMHhDMERBQzBEQSAgY29kYV9maWxlX2luZm8gICAgaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaAorRFBNRU1fTUFHSUMgICAgICAgICAgIDB4YzBmZmVlMTEgIGdkdF9wY2lfc3JhbSAgICAgIGRyaXZlcnMvc2NzaS9nZHRoLmgKK1NUTElfUE9SVE1BR0lDICAgICAgICAweGU2NzFjN2ExICBzdGxpcG9ydCAgICAgICAgICBpbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCitZQU1fTUFHSUMgICAgICAgICAgICAgMHhGMTBBNzY1NCAgeWFtX3BvcnQgICAgICAgICAgZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKK0NDQl9NQUdJQyAgICAgICAgICAgICAweGYyNjkxYWQyICBjY2IgICAgICAgICAgICAgICBkcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKK1FVRVVFX01BR0lDX0ZSRUUgICAgICAweGY3ZTFjOWEzICBxdWV1ZV9lbnRyeSAgICAgICBkcml2ZXJzL3Njc2kvYXJtL3F1ZXVlLmMKK1FVRVVFX01BR0lDX1VTRUQgICAgICAweGY3ZTFjYzMzICBxdWV1ZV9lbnRyeSAgICAgICBkcml2ZXJzL3Njc2kvYXJtL3F1ZXVlLmMKK0hUQl9DTUFHSUMgICAgICAgICAgICAweEZFRkFGRUYxICBodGJfY2xhc3MgICAgICAgICBuZXQvc2NoZWQvc2NoX2h0Yi5jCitOTUlfTUFHSUMgICAgICAgICAgICAgMHg0ODQxNGQ0ZDQ1NTIwMSBubWlfcyAgICAgICAgaW5jbHVkZS9hc20tbWlwczY0L3NuL25taS5oCisKK05vdGUgdGhhdCB0aGVyZSBhcmUgYWxzbyBkZWZpbmVkIHNwZWNpYWwgcGVyLWRyaXZlciBtYWdpYyBudW1iZXJzIGluIHNvdW5kCittZW1vcnkgbWFuYWdlbWVudC4gU2VlIGluY2x1ZGUvc291bmQvc25kbWFnaWMuaCBmb3IgY29tcGxldGUgbGlzdCBvZiB0aGVtLiBNYW55CitPU1Mgc291bmQgZHJpdmVycyBoYXZlIHRoZWlyIG1hZ2ljIG51bWJlcnMgY29uc3RydWN0ZWQgZnJvbSB0aGUgc291bmRjYXJkIFBDSQorSUQgLSB0aGVzZSBhcmUgbm90IGxpc3RlZCBoZXJlIGFzIHdlbGwuCisKK0lyREEgc3Vic3lzdGVtIGFsc28gdXNlcyBsYXJnZSBudW1iZXIgb2Ygb3duIG1hZ2ljIG51bWJlcnMsIHNlZQoraW5jbHVkZS9uZXQvaXJkYS9pcmRhLmggZm9yIGEgY29tcGxldGUgbGlzdCBvZiB0aGVtLgorCitIRlMgaXMgYW5vdGhlciBsYXJnZXIgdXNlciBvZiBtYWdpYyBudW1iZXJzIC0geW91IGNhbiBmaW5kIHRoZW0gaW4KK2ZzL2hmcy9oZnMuaC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFuZGF0b3J5LnR4dCBiL0RvY3VtZW50YXRpb24vbWFuZGF0b3J5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzQ0OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5kYXRvcnkudHh0CkBAIC0wLDAgKzEsMTUyIEBACisJTWFuZGF0b3J5IEZpbGUgTG9ja2luZyBGb3IgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0KKworCQlBbmR5IFdhbGtlciA8YW5keUBseXNha2VyLmt2YWVybmVyLm5vPgorCisJCQkgICAxNSBBcHJpbCAxOTk2CisKKworMS4gV2hhdCBpcyAgbWFuZGF0b3J5IGxvY2tpbmc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFuZGF0b3J5IGxvY2tpbmcgaXMga2VybmVsIGVuZm9yY2VkIGZpbGUgbG9ja2luZywgYXMgb3Bwb3NlZCB0byB0aGUgbW9yZSB1c3VhbAorY29vcGVyYXRpdmUgZmlsZSBsb2NraW5nIHVzZWQgdG8gZ3VhcmFudGVlIHNlcXVlbnRpYWwgYWNjZXNzIHRvIGZpbGVzIGFtb25nCitwcm9jZXNzZXMuIEZpbGUgbG9ja3MgYXJlIGFwcGxpZWQgdXNpbmcgdGhlIGZsb2NrKCkgYW5kIGZjbnRsKCkgc3lzdGVtIGNhbGxzCisoYW5kIHRoZSBsb2NrZigpIGxpYnJhcnkgcm91dGluZSB3aGljaCBpcyBhIHdyYXBwZXIgYXJvdW5kIGZjbnRsKCkuKSBJdCBpcworbm9ybWFsbHkgYSBwcm9jZXNzJyByZXNwb25zaWJpbGl0eSB0byBjaGVjayBmb3IgbG9ja3Mgb24gYSBmaWxlIGl0IHdpc2hlcyB0bwordXBkYXRlLCBiZWZvcmUgYXBwbHlpbmcgaXRzIG93biBsb2NrLCB1cGRhdGluZyB0aGUgZmlsZSBhbmQgdW5sb2NraW5nIGl0IGFnYWluLgorVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBleGFtcGxlIG9mIHRoaXMgKGFuZCBpbiB0aGUgY2FzZSBvZiBzZW5kbWFpbCwgdGhlIG1vc3QKK3Ryb3VibGVzb21lKSBpcyBhY2Nlc3MgdG8gYSB1c2VyJ3MgbWFpbGJveC4gVGhlIG1haWwgdXNlciBhZ2VudCBhbmQgdGhlIG1haWwKK3RyYW5zZmVyIGFnZW50IG11c3QgZ3VhcmQgYWdhaW5zdCB1cGRhdGluZyB0aGUgbWFpbGJveCBhdCB0aGUgc2FtZSB0aW1lLCBhbmQKK3ByZXZlbnQgcmVhZGluZyB0aGUgbWFpbGJveCB3aGlsZSBpdCBpcyBiZWluZyB1cGRhdGVkLgorCitJbiBhIHBlcmZlY3Qgd29ybGQgYWxsIHByb2Nlc3NlcyB3b3VsZCB1c2UgYW5kIGhvbm91ciBhIGNvb3BlcmF0aXZlLCBvcgorImFkdmlzb3J5IiBsb2NraW5nIHNjaGVtZS4gSG93ZXZlciwgdGhlIHdvcmxkIGlzbid0IHBlcmZlY3QsIGFuZCB0aGVyZSdzCithIGxvdCBvZiBwb29ybHkgd3JpdHRlbiBjb2RlIG91dCB0aGVyZS4KKworSW4gdHJ5aW5nIHRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtLCB0aGUgZGVzaWduZXJzIG9mIFN5c3RlbSBWIFVOSVggY2FtZSB1cAord2l0aCBhICJtYW5kYXRvcnkiIGxvY2tpbmcgc2NoZW1lLCB3aGVyZWJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCB3b3VsZAorYmxvY2sgYXR0ZW1wdHMgYnkgYSBwcm9jZXNzIHRvIHdyaXRlIHRvIGEgZmlsZSB0aGF0IGFub3RoZXIgcHJvY2VzcyBob2xkcyBhCisicmVhZCIgLW9yLSAic2hhcmVkIiBsb2NrIG9uLCBhbmQgYmxvY2sgYXR0ZW1wdHMgdG8gYm90aCByZWFkIGFuZCB3cml0ZSB0byBhIAorZmlsZSB0aGF0IGEgcHJvY2VzcyBob2xkcyBhICJ3cml0ZSAiIC1vci0gImV4Y2x1c2l2ZSIgbG9jayBvbi4KKworVGhlIFN5c3RlbSBWIG1hbmRhdG9yeSBsb2NraW5nIHNjaGVtZSB3YXMgaW50ZW5kZWQgdG8gaGF2ZSBhcyBsaXR0bGUgaW1wYWN0IGFzCitwb3NzaWJsZSBvbiBleGlzdGluZyB1c2VyIGNvZGUuIFRoZSBzY2hlbWUgaXMgYmFzZWQgb24gbWFya2luZyBpbmRpdmlkdWFsIGZpbGVzCithcyBjYW5kaWRhdGVzIGZvciBtYW5kYXRvcnkgbG9ja2luZywgYW5kIHVzaW5nIHRoZSBleGlzdGluZyBmY250bCgpL2xvY2tmKCkKK2ludGVyZmFjZSBmb3IgYXBwbHlpbmcgbG9ja3MganVzdCBhcyBpZiB0aGV5IHdlcmUgbm9ybWFsLCBhZHZpc29yeSBsb2Nrcy4KKworTm90ZSAxOiBJbiBzYXlpbmcgImZpbGUiIGluIHRoZSBwYXJhZ3JhcGhzIGFib3ZlIEkgYW0gYWN0dWFsbHkgbm90IHRlbGxpbmcKK3RoZSB3aG9sZSB0cnV0aC4gU3lzdGVtIFYgbG9ja2luZyBpcyBiYXNlZCBvbiBmY250bCgpLiBUaGUgZ3JhbnVsYXJpdHkgb2YKK2ZjbnRsKCkgaXMgc3VjaCB0aGF0IGl0IGFsbG93cyB0aGUgbG9ja2luZyBvZiBieXRlIHJhbmdlcyBpbiBmaWxlcywgaW4gYWRkaXRpb24KK3RvIGVudGlyZSBmaWxlcywgc28gdGhlIG1hbmRhdG9yeSBsb2NraW5nIHJ1bGVzIGFsc28gaGF2ZSBieXRlIGxldmVsCitncmFudWxhcml0eS4KKworTm90ZSAyOiBQT1NJWC4xIGRvZXMgbm90IHNwZWNpZnkgYW55IHNjaGVtZSBmb3IgbWFuZGF0b3J5IGxvY2tpbmcsIGRlc3BpdGUKK2JvcnJvd2luZyB0aGUgZmNudGwoKSBsb2NraW5nIHNjaGVtZSBmcm9tIFN5c3RlbSBWLiBUaGUgbWFuZGF0b3J5IGxvY2tpbmcKK3NjaGVtZSBpcyBkZWZpbmVkIGJ5IHRoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiAoU1ZJRCkgVmVyc2lvbiAzLgorCisyLiBNYXJraW5nIGEgZmlsZSBmb3IgbWFuZGF0b3J5IGxvY2tpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZpbGUgaXMgbWFya2VkIGFzIGEgY2FuZGlkYXRlIGZvciBtYW5kYXRvcnkgbG9ja2luZyBieSBzZXR0aW5nIHRoZSBncm91cC1pZAorYml0IGluIGl0cyBmaWxlIG1vZGUgYnV0IHJlbW92aW5nIHRoZSBncm91cC1leGVjdXRlIGJpdC4gVGhpcyBpcyBhbiBvdGhlcndpc2UKK21lYW5pbmdsZXNzIGNvbWJpbmF0aW9uLCBhbmQgd2FzIGNob3NlbiBieSB0aGUgU3lzdGVtIFYgaW1wbGVtZW50b3JzIHNvIGFzIG5vdAordG8gYnJlYWsgZXhpc3RpbmcgdXNlciBwcm9ncmFtcy4KKworTm90ZSB0aGF0IHRoZSBncm91cC1pZCBiaXQgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgdGhlIGtlcm5lbCB3aGVuCithIHNldGdpZCBmaWxlIGlzIHdyaXR0ZW4gdG8uIFRoaXMgaXMgYSBzZWN1cml0eSBtZWFzdXJlLiBUaGUga2VybmVsIGhhcyBiZWVuCittb2RpZmllZCB0byByZWNvZ25pemUgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG1hbmRhdG9yeSBsb2NrIGNhbmRpZGF0ZSBhbmQgdG8KK3JlZnJhaW4gZnJvbSBjbGVhcmluZyB0aGlzIGJpdC4gU2ltaWxhcmx5IHRoZSBrZXJuZWwgaGFzIGJlZW4gbW9kaWZpZWQgbm90Cit0byBydW4gbWFuZGF0b3J5IGxvY2sgY2FuZGlkYXRlcyB3aXRoIHNldGdpZCBwcml2aWxlZ2VzLgorCiszLiBBdmFpbGFibGUgaW1wbGVtZW50YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgaGF2ZSBjb25zaWRlcmVkIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgbWFuZGF0b3J5IGxvY2tpbmcgYXZhaWxhYmxlIHdpdGgKK1N1bk9TIDQuMS54LCBTb2xhcmlzIDIueCBhbmQgSFAtVVggOS54LgorCitHZW5lcmFsbHkgSSBoYXZlIHRyaWVkIHRvIG1ha2UgdGhlIG1vc3Qgc2Vuc2Ugb3V0IG9mIHRoZSBiZWhhdmlvdXIgZXhoaWJpdGVkCitieSB0aGVzZSB0aHJlZSByZWZlcmVuY2Ugc3lzdGVtcy4gVGhlcmUgYXJlIG1hbnkgYW5vbWFsaWVzLgorCitBbGwgdGhlIHJlZmVyZW5jZSBzeXN0ZW1zIHJlamVjdCBhbGwgY2FsbHMgdG8gb3BlbigpIGZvciBhIGZpbGUgb24gd2hpY2gKK2Fub3RoZXIgcHJvY2VzcyBoYXMgb3V0c3RhbmRpbmcgbWFuZGF0b3J5IGxvY2tzLiBUaGlzIGlzIGluIGRpcmVjdAorY29udHJhdmVudGlvbiBvZiBTVklEIDMsIHdoaWNoIHN0YXRlcyB0aGF0IG9ubHkgY2FsbHMgdG8gb3BlbigpIHdpdGggdGhlCitPX1RSVU5DIGZsYWcgc2V0IHNob3VsZCBiZSByZWplY3RlZC4gVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIFNWSUQKK2RlZmluaXRpb24sIHdoaWNoIGlzIHRoZSAiUmlnaHQgVGhpbmciLCBzaW5jZSBvbmx5IGNhbGxzIHdpdGggT19UUlVOQyBjYW4KK21vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisKK0hQLVVYIGV2ZW4gZGlzYWxsb3dzIG9wZW4oKSB3aXRoIE9fVFJVTkMgZm9yIGEgZmlsZSB3aXRoIGFkdmlzb3J5IGxvY2tzLCBub3QKK2p1c3QgbWFuZGF0b3J5IGxvY2tzLiBUaGF0IHdvdWxkIGFwcGVhciB0byBjb250cmF2ZW5lIFBPU0lYLjEuCisKK21tYXAoKSBpcyBhbm90aGVyIGludGVyZXN0aW5nIGNhc2UuIEFsbCB0aGUgb3BlcmF0aW5nIHN5c3RlbXMgbWVudGlvbmVkCitwcmV2ZW50IG1hbmRhdG9yeSBsb2NrcyBmcm9tIGJlaW5nIGFwcGxpZWQgdG8gYW4gbW1hcCgpJ2VkIGZpbGUsIGJ1dCAgSFAtVVgKK2Fsc28gZGlzYWxsb3dzIGFkdmlzb3J5IGxvY2tzIGZvciBzdWNoIGEgZmlsZS4gU1ZJRCBhY3R1YWxseSBzcGVjaWZpZXMgdGhlCitwYXJhbm9pZCBIUC1VWCBiZWhhdmlvdXIuCisKK0luIG15IG9waW5pb24gb25seSBNQVBfU0hBUkVEIG1hcHBpbmdzIHNob3VsZCBiZSBpbW11bmUgZnJvbSBsb2NraW5nLCBhbmQgdGhlbgorb25seSBmcm9tIG1hbmRhdG9yeSBsb2NrcyAtIHRoYXQgaXMgd2hhdCBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisKK1N1bk9TIGlzIHNvIGhvcGVsZXNzIHRoYXQgaXQgZG9lc24ndCBldmVuIGhvbm91ciB0aGUgT19OT05CTE9DSyBmbGFnIGZvcgorbWFuZGF0b3J5IGxvY2tzLCBzbyByZWFkcyBhbmQgd3JpdGVzIHRvIGxvY2tlZCBmaWxlcyBhbHdheXMgYmxvY2sgd2hlbiB0aGV5CitzaG91bGQgcmV0dXJuIEVBR0FJTi4KKworSSdtIGFmcmFpZCB0aGF0IHRoaXMgaXMgc3VjaCBhbiBlc290ZXJpYyBhcmVhIHRoYXQgdGhlIHNlbWFudGljcyBkZXNjcmliZWQKK2JlbG93IGFyZSBqdXN0IGFzIHZhbGlkIGFzIGFueSBvdGhlcnMsIHNvIGxvbmcgYXMgdGhlIG1haW4gcG9pbnRzIHNlZW0gdG8KK2FncmVlLiAKKworNC4gU2VtYW50aWNzCistLS0tLS0tLS0tLS0KKworMS4gTWFuZGF0b3J5IGxvY2tzIGNhbiBvbmx5IGJlIGFwcGxpZWQgdmlhIHRoZSBmY250bCgpL2xvY2tmKCkgbG9ja2luZworICAgaW50ZXJmYWNlIC0gaW4gb3RoZXIgd29yZHMgdGhlIFN5c3RlbSBWL1BPU0lYIGludGVyZmFjZS4gQlNEIHN0eWxlCisgICBsb2NrcyB1c2luZyBmbG9jaygpIG5ldmVyIHJlc3VsdCBpbiBhIG1hbmRhdG9yeSBsb2NrLgorCisyLiBJZiBhIHByb2Nlc3MgaGFzIGxvY2tlZCBhIHJlZ2lvbiBvZiBhIGZpbGUgd2l0aCBhIG1hbmRhdG9yeSByZWFkIGxvY2ssIHRoZW4KKyAgIG90aGVyIHByb2Nlc3NlcyBhcmUgcGVybWl0dGVkIHRvIHJlYWQgZnJvbSB0aGF0IHJlZ2lvbi4gSWYgYW55IG9mIHRoZXNlCisgICBwcm9jZXNzZXMgYXR0ZW1wdHMgdG8gd3JpdGUgdG8gdGhlIHJlZ2lvbiBpdCB3aWxsIGJsb2NrIHVudGlsIHRoZSBsb2NrIGlzCisgICByZWxlYXNlZCwgdW5sZXNzIHRoZSBwcm9jZXNzIGhhcyBvcGVuZWQgdGhlIGZpbGUgd2l0aCB0aGUgT19OT05CTE9DSworICAgZmxhZyBpbiB3aGljaCBjYXNlIHRoZSBzeXN0ZW0gY2FsbCB3aWxsIHJldHVybiBpbW1lZGlhdGVseSB3aXRoIHRoZSBlcnJvcgorICAgc3RhdHVzIEVBR0FJTi4KKworMy4gSWYgYSBwcm9jZXNzIGhhcyBsb2NrZWQgYSByZWdpb24gb2YgYSBmaWxlIHdpdGggYSBtYW5kYXRvcnkgd3JpdGUgbG9jaywgYWxsCisgICBhdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIHRvIHRoYXQgcmVnaW9uIGJsb2NrIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLAorICAgdW5sZXNzIGEgcHJvY2VzcyBoYXMgb3BlbmVkIHRoZSBmaWxlIHdpdGggdGhlIE9fTk9OQkxPQ0sgZmxhZyBpbiB3aGljaCBjYXNlCisgICB0aGUgc3lzdGVtIGNhbGwgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3Igc3RhdHVzIEVBR0FJTi4KKworNC4gQ2FsbHMgdG8gb3BlbigpIHdpdGggT19UUlVOQywgb3IgdG8gY3JlYXQoKSwgb24gYSBleGlzdGluZyBmaWxlIHRoYXQgaGFzCisgICBhbnkgbWFuZGF0b3J5IGxvY2tzIG93bmVkIGJ5IG90aGVyIHByb2Nlc3NlcyB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlCisgICBlcnJvciBzdGF0dXMgRUFHQUlOLgorCis1LiBBdHRlbXB0cyB0byBhcHBseSBhIG1hbmRhdG9yeSBsb2NrIHRvIGEgZmlsZSB0aGF0IGlzIG1lbW9yeSBtYXBwZWQgYW5kCisgICBzaGFyZWQgKHZpYSBtbWFwKCkgd2l0aCBNQVBfU0hBUkVEKSB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIGVycm9yIHN0YXR1cworICAgRUFHQUlOLgorCis2LiBBdHRlbXB0cyB0byBjcmVhdGUgYSBzaGFyZWQgbWVtb3J5IG1hcCBvZiBhIGZpbGUgKHZpYSBtbWFwKCkgd2l0aCBNQVBfU0hBUkVEKQorICAgdGhhdCBoYXMgYW55IG1hbmRhdG9yeSBsb2NrcyBpbiBlZmZlY3Qgd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBlcnJvciBzdGF0dXMKKyAgIEVBR0FJTi4KKworNS4gV2hpY2ggc3lzdGVtIGNhbGxzIGFyZSBhZmZlY3RlZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Rob3NlIHdoaWNoIG1vZGlmeSBhIGZpbGUncyBjb250ZW50cywgbm90IGp1c3QgdGhlIGlub2RlLiBUaGF0IGdpdmVzIHJlYWQoKSwKK3dyaXRlKCksIHJlYWR2KCksIHdyaXRldigpLCBvcGVuKCksIGNyZWF0KCksIG1tYXAoKSwgdHJ1bmNhdGUoKSBhbmQKK2Z0cnVuY2F0ZSgpLiB0cnVuY2F0ZSgpIGFuZCBmdHJ1bmNhdGUoKSBhcmUgY29uc2lkZXJlZCB0byBiZSAid3JpdGUiIGFjdGlvbnMKK2ZvciB0aGUgcHVycG9zZXMgb2YgbWFuZGF0b3J5IGxvY2tpbmcuCisKK1RoZSBhZmZlY3RlZCByZWdpb24gaXMgdXN1YWxseSBkZWZpbmVkIGFzIHN0cmV0Y2hpbmcgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbgorZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCBvciB3cml0dGVuLiBGb3IgdGhlIHRydW5jYXRlIGNhbGxzIGl0IGlzCitkZWZpbmVkIGFzIHRoZSBieXRlcyBvZiBhIGZpbGUgcmVtb3ZlZCBvciBhZGRlZCAod2UgbXVzdCBhbHNvIGNvbnNpZGVyIGJ5dGVzCithZGRlZCwgYXMgYSBsb2NrIGNhbiBzcGVjaWZ5IGp1c3QgInRoZSB3aG9sZSBmaWxlIiwgcmF0aGVyIHRoYW4gYSBzcGVjaWZpYworcmFuZ2Ugb2YgYnl0ZXMuKQorCitOb3RlIDM6IEkgbWF5IGhhdmUgb3Zlcmxvb2tlZCBzb21lIHN5c3RlbSBjYWxscyB0aGF0IG5lZWQgbWFuZGF0b3J5IGxvY2sKK2NoZWNraW5nIGluIG15IGVhZ2VybmVzcyB0byBnZXQgdGhpcyBjb2RlIG91dCB0aGUgZG9vci4gUGxlYXNlIGxldCBtZSBrbm93LCBvcgorYmV0dGVyIHN0aWxsIGZpeCB0aGUgc3lzdGVtIGNhbGxzIHlvdXJzZWxmIGFuZCBzdWJtaXQgYSBwYXRjaCB0byBtZSBvciBMaW51cy4KKworNi4gV2FybmluZyEKKy0tLS0tLS0tLS0tCisKK05vdCBldmVuIHJvb3QgY2FuIG92ZXJyaWRlIGEgbWFuZGF0b3J5IGxvY2ssIHNvIHJ1bmF3YXkgcHJvY2Vzc2VzIGNhbiB3cmVhaworaGF2b2MgaWYgdGhleSBsb2NrIGNydWNpYWwgZmlsZXMuIFRoZSB3YXkgYXJvdW5kIGl0IGlzIHRvIGNoYW5nZSB0aGUgZmlsZQorcGVybWlzc2lvbnMgKHJlbW92ZSB0aGUgc2V0Z2lkIGJpdCkgYmVmb3JlIHRyeWluZyB0byByZWFkIG9yIHdyaXRlIHRvIGl0LgorT2YgY291cnNlLCB0aGF0IG1pZ2h0IGJlIGEgYml0IHRyaWNreSBpZiB0aGUgc3lzdGVtIGlzIGh1bmcgOi0oCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWNhLnR4dCBiL0RvY3VtZW50YXRpb24vbWNhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTMyYzMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tY2EudHh0CkBAIC0wLDAgKzEsMzIwIEBACitpMzg2IE1pY3JvIENoYW5uZWwgQXJjaGl0ZWN0dXJlIFN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNQ0Egc3VwcG9ydCBpcyBlbmFibGVkIHVzaW5nIHRoZSBDT05GSUdfTUNBIGRlZmluZS4gIEEgbWFjaGluZSB3aXRoIGEgTUNBCitidXMgd2lsbCBoYXZlIHRoZSBrZXJuZWwgdmFyaWFibGUgTUNBX2J1cyBzZXQsIGFzc3VtaW5nIHRoZSBCSU9TIGZlYXR1cmUKK2JpdHMgYXJlIHNldCBwcm9wZXJseSAoc2VlIGFyY2gvaTM4Ni9ib290L3NldHVwLlMgZm9yIGluZm9ybWF0aW9uIG9uCitob3cgdGhpcyBkZXRlY3Rpb24gaXMgZG9uZSkuCisKK0FkYXB0ZXIgRGV0ZWN0aW9uCis9PT09PT09PT09PT09PT09PQorCitUaGUgaWRlYWwgTUNBIGFkYXB0ZXIgZGV0ZWN0aW9uIGlzIGRvbmUgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZQorUHJvZ3JhbW1hYmxlIE9wdGlvbiBTZWxlY3QgcmVnaXN0ZXJzLiAgR2VuZXJpYyBmdW5jdGlvbnMgZm9yIGRvaW5nCit0aGlzIGhhdmUgYmVlbiBhZGRlZCBpbiBpbmNsdWRlL2xpbnV4L21jYS5oIGFuZCBhcmNoL2kzODYva2VybmVsL21jYS5jLgorRXZlcnl0aGluZyBuZWVkZWQgdG8gZGV0ZWN0IGFkYXB0ZXJzIGFuZCByZWFkIChhbmQgd3JpdGUpIGNvbmZpZ3VyYXRpb24KK2luZm9ybWF0aW9uIGlzIHRoZXJlLiAgQSBudW1iZXIgb2YgTUNBLXNwZWNpZmljIGRyaXZlcnMgYWxyZWFkeSB1c2UKK3RoaXMuICBUaGUgdHlwaWNhbCBwcm9iZSBjb2RlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCSNpbmNsdWRlIDxsaW51eC9tY2EuaD4KKworCXVuc2lnbmVkIGNoYXIgcG9zMiwgcG9zMywgcG9zNCwgcG9zNTsKKwlzdHJ1Y3QgbmV0X2RldmljZSogZGV2OworCWludCBzbG90OworCisJaWYoIE1DQV9idXMgKSB7CisJCXNsb3QgPSBtY2FfZmluZF9hZGFwdGVyKCBBREFQVEVSX0lELCAwICk7CisJCWlmKCBzbG90ID09IE1DQV9OT1RGT1VORCApIHsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCS8qIG9wdGlvbmFsIC0gc2VlIGJlbG93ICovCisJCW1jYV9zZXRfYWRhcHRlcl9uYW1lKCBzbG90LCAiYWRhcHRlciBuYW1lICYgZGVzY3JpcHRpb24iICk7CisJCW1jYV9zZXRfYWRhcHRlcl9wcm9jZm4oIHNsb3QsIGRldl9nZXRpbmZvLCBkZXYgKTsKKworCQkvKiByZWFkIHRoZSBQT1MgcmVnaXN0ZXJzLiAgTW9zdCBkZXZpY2VzIG9ubHkgdXNlIDIgYW5kIDMgKi8KKwkJcG9zMiA9IG1jYV9yZWFkX3N0b3JlZF9wb3MoIHNsb3QsIDIgKTsKKwkJcG9zMyA9IG1jYV9yZWFkX3N0b3JlZF9wb3MoIHNsb3QsIDMgKTsKKwkJcG9zNCA9IG1jYV9yZWFkX3N0b3JlZF9wb3MoIHNsb3QsIDQgKTsKKwkJcG9zNSA9IG1jYV9yZWFkX3N0b3JlZF9wb3MoIHNsb3QsIDUgKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBleHRyYWN0IGNvbmZpZ3VyYXRpb24gZnJvbSBwb3NbMjM0NV0gYW5kIHNldCBldmVyeXRoaW5nIHVwICovCisKK0xvYWRhYmxlIG1vZHVsZXMgc2hvdWxkIG1vZGlmeSB0aGlzIHRvIHRlc3QgdGhhdCB0aGUgc3BlY2lmaWVkIElSUSBhbmQKK0lPIHBvcnRzIChwbHVzIHdoYXRldmVyIG90aGVyIHN0dWZmKSBtYXRjaC4gIFNlZSAzYzUyMy5jIGZvciBleGFtcGxlCitjb2RlIChhY3R1YWxseSwgc21jLW1jYS5jIGhhcyBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBleGFtcGxlIHRoYXQgY2FuCitoYW5kbGUgYSBsaXN0IG9mIGFkYXB0ZXIgaWRzKS4KKworS2VlcCBpbiBtaW5kIHRoYXQgZGV2aWNlcyBzaG91bGQgbmV2ZXIgZGlyZWN0bHkgYWNjZXNzIHRoZSBQT1MgcmVnaXN0ZXJzCisodmlhIGluYigpLCBvdXRiKCksIGV0YykuICBXaGlsZSBpdCdzIGdlbmVyYWxseSBzYWZlLCB0aGVyZSBpcyBhIHNtYWxsCitwb3RlbnRpYWwgZm9yIGJsb3dpbmcgdXAgaGFyZHdhcmUgd2hlbiBpdCdzIGRvbmUgYXQgdGhlIHdyb25nIHRpbWUuCitGdXJ0aGVybW9yZSwgYWNjZXNzaW5nIGEgUE9TIHJlZ2lzdGVyIGRpc2FibGVzIGEgZGV2aWNlIHRlbXBvcmFyaWx5LgorVGhpcyBpcyB1c3VhbGx5IG9rYXkgZHVyaW5nIHN0YXJ0dXAsIGJ1dCBkbyBfeW91XyB3YW50IHRvIHJlbHkgb24gaXQ/CitEdXJpbmcgaW5pdGlhbCBjb25maWd1cmF0aW9uLCBtY2FfaW5pdCgpIHJlYWRzIGFsbCB0aGUgUE9TIHJlZ2lzdGVycworaW50byBtZW1vcnkuICBtY2FfcmVhZF9zdG9yZWRfcG9zKCkgYWNjZXNzZXMgdGhhdCBkYXRhLiAgbWNhX3JlYWRfcG9zKCkKK2FuZCBtY2Ffd3JpdGVfcG9zKCkgYXJlIGFsc28gYXZhaWxhYmxlIGZvciAoc2FmZXIpIGRpcmVjdCBQT1MgYWNjZXNzLAorYnV0IHRoZWlyIHVzZSBpcyBfaGlnaGx5XyBkaXNjb3VyYWdlZC4gIG1jYV93cml0ZV9wb3MoKSBpcyBwYXJ0aWN1bGFybHkKK2Rhbmdlcm91cywgYXMgaXQgaXMgcG9zc2libGUgZm9yIGFkYXB0ZXJzIHRvIGJlIHB1dCBpbiBpbmNvbnNpc3RlbnQKK3N0YXRlcyAoaS5lLiBzaGFyaW5nIElPIGFkZHJlc3MsIGV0YykgYW5kIG1heSByZXN1bHQgaW4gY3Jhc2hlcywgdG9hc3RlZAoraGFyZHdhcmUsIGFuZCBibGluZG5lc3MuCisKK1VzZXIgbGV2ZWwgZHJpdmVycyAoc3VjaCBhcyB0aGUgQUdYIFggc2VydmVyKSBjYW4gdXNlIC9wcm9jL21jYS9wb3MgdG8KK2ZpbmQgYWRhcHRlcnMgKHNlZSBiZWxvdykuCisKK1NvbWUgTUNBIGFkYXB0ZXJzIGNhbiBhbHNvIGJlIGRldGVjdGVkIHZpYSB0aGUgdXN1YWwgSVNBLXN0eWxlIGRldmljZQorcHJvYmluZyAobWFueSBTQ1NJIGFkYXB0ZXJzLCBmb3IgZXhhbXBsZSkuICBUaGlzIHNvcnQgb2YgdGhpbmcgaXMgaGlnaGx5CitkaXNjb3VyYWdlZC4gIFBlcmZlY3RseSBnb29kIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0ZWxsaW5nIHlvdSB3aGF0J3MKK3RoZXJlLCBzbyB0aGVyZSdzIG5vIGV4Y3VzZSBmb3IgbWVzc2luZyB3aXRoIHJhbmRvbSBJTyBwb3J0cy4gIEhvd2V2ZXIsCit3ZSBNQ0EgcGVvcGxlIHN0aWxsIGFwcHJlY2lhdGUgYW55IElTQS1zdHlsZSBkcml2ZXIgdGhhdCB3aWxsIHdvcmsgd2l0aAorb3VyIGhhcmR3YXJlLiAgWW91IHRha2Ugd2hhdCB5b3UgY2FuIGdldC4uLgorCitMZXZlbC1UcmlnZ2VyZWQgSW50ZXJydXB0cworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQmVjYXVzZSBNQ0EgdXNlcyBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cywgYSBmZXcgcHJvYmxlbXMgYXJpc2Ugd2l0aAord2hhdCBtaWdodCBiZXN0IGJlIGRlc2NyaWJlZCBhcyB0aGUgSVNBIG1pbmRzZXQgYW5kIGl0cyBlZmZlY3RzIG9uCitkcml2ZXJzLiAgVGhlc2Ugc29ydHMgb2YgcHJvYmxlbXMgYXJlIGV4cGVjdGVkIHRvIGJlY29tZSBsZXNzIGNvbW1vbiBhcworbW9yZSBwZW9wbGUgdXNlIHNoYXJlZCBJUlFzIG9uIFBDSSBtYWNoaW5lcy4KKworSW4gZ2VuZXJhbCwgYW4gaW50ZXJydXB0IG11c3QgYmUgYWNrbm93bGVkZ2VkIG5vdCBvbmx5IGF0IHRoZSBJQ1UgKHdoaWNoCitpcyBkb25lIGF1dG9tYWdpY2FsbHkgYnkgdGhlIGtlcm5lbCksIGJ1dCBhdCB0aGUgZGV2aWNlIGxldmVsLiAgSW4KK3BhcnRpY3VsYXIsIElSUSAwIG11c3QgYmUgcmVzZXQgYWZ0ZXIgYSB0aW1lciBpbnRlcnJ1cHQgKG5vdyBkb25lIGluCithcmNoL2kzODYva2VybmVsL3RpbWUuYykgb3IgdGhlIGZpcnN0IHRpbWVyIGludGVycnVwdCBoYW5ncyB0aGUgc3lzdGVtLgorVGhlcmUgd2VyZSBhbHNvIHByb2JsZW1zIHdpdGggdGhlIDEuMy54IGZsb3BweSBkcml2ZXJzLCBidXQgdGhhdCBzZWVtcwordG8gaGF2ZSBiZWVuIGZpeGVkLgorCitJUlFzIGFyZSBhbHNvIHNoYXJlYWJsZSwgYW5kIG1vc3QgTUNBLXNwZWNpZmljIGRldmljZXMgc2hvdWxkIGJlIGNvZGVkCit3aXRoIHNoYXJlZCBJUlFzIGluIG1pbmQuCisKKy9wcm9jL21jYQorPT09PT09PT09CisKKy9wcm9jL21jYSBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIHZhcmlvdXMgZmlsZXMgZm9yIGFkYXB0ZXJzIGFuZAorb3RoZXIgc3R1ZmYuCisKKwkvcHJvYy9tY2EvcG9zCQlTdHJhaWdodCBsaXN0aW5nIG9mIFBPUyByZWdpc3RlcnMKKwkvcHJvYy9tY2Evc2xvdFsxLThdCUluZm9ybWF0aW9uIG9uIGFkYXB0ZXIgaW4gc3BlY2lmaWMgc2xvdAorCS9wcm9jL21jYS92aWRlbwkJU2FtZSBmb3IgaW50ZWdyYXRlZCB2aWRlbworCS9wcm9jL21jYS9zY3NpCQlTYW1lIGZvciBpbnRlZ3JhdGVkIFNDU0kKKwkvcHJvYy9tY2EvbWFjaGluZQlNYWNoaW5lIGluZm9ybWF0aW9uCisKK1NlZSBBcHBlbmRpeCBBIGZvciBhIHNhbXBsZS4KKworRGV2aWNlIGRyaXZlcnMgY2FuIGVhc2lseSBhZGQgdGhlaXIgb3duIGluZm9ybWF0aW9uIGZ1bmN0aW9uIGZvcgorc3BlY2lmaWMgc2xvdHMgKGluY2x1ZGluZyBpbnRlZ3JhdGVkIG9uZXMpIHZpYSB0aGUKK21jYV9zZXRfYWRhcHRlcl9wcm9jZm4oKSBjYWxsLiAgRHJpdmVycyB0aGF0IHN1cHBvcnQgdGhpcyBhcmUgRVNESSwgSUJNCitTQ1NJLCBhbmQgM2M1MjMuICBJZiBhIGRldmljZSBpcyBhbHNvIGEgbW9kdWxlLCBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvYworZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiB0aGUgbW9kdWxlIGNsZWFudXAuICBUaGlzIHdpbGwgcmVxdWlyZSBzdG9yaW5nCit0aGUgc2xvdCBpbmZvcm1hdGlvbiBpbiBhIHByaXZhdGUgc3RydWN0dXJlIHNvbWV3aGVyZS4gIFNlZSB0aGUgM2M1MjMKK2RyaXZlciBmb3IgZGV0YWlscy4KKworWW91ciB0eXBpY2FsIHByb2MgZnVuY3Rpb24gd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKwlzdGF0aWMgaW50CisJZGV2X2dldGluZm8oIGNoYXIqIGJ1ZiwgaW50IHNsb3QsIHZvaWQqIGQgKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UqKSBkOworCQlpbnQgbGVuID0gMDsKKworCQlsZW4gKz0gc3ByaW50ZiggYnVmK2xlbiwgIkRldmljZTogJXNcbiIsIGRldi0+bmFtZSApOworCQlsZW4gKz0gc3ByaW50ZiggYnVmK2xlbiwgIklSUTogJWRcbiIsIGRldi0+aXJxICk7CisJCWxlbiArPSBzcHJpbnRmKCBidWYrbGVuLCAiSU8gUG9ydDogJSNseC0lI2x4XG4iLCAuLi4gKTsKKwkJLi4uCisKKwkJcmV0dXJuIGxlbjsKKwl9CisKK1NvbWUgb2YgdGhlIHN0YW5kYXJkIE1DQSBpbmZvcm1hdGlvbiB3aWxsIGFscmVhZHkgYmUgcHJpbnRlZCwgc28gZG9uJ3QKK2JvdGhlciByZXBlYXRpbmcgaXQuICBEb24ndCB0cnkgcHV0dGluZyBpbiBtb3JlIHRoYW4gM0sgb2YgaW5mb3JtYXRpb24uCisKK0VuYWJsZSB0aGlzIGZ1bmN0aW9uIHdpdGg6CisJbWNhX3NldF9hZGFwdGVyX3Byb2Nmbiggc2xvdCwgZGV2X2dldGluZm8sIGRldiApOworCitEaXNhYmxlIGl0IHdpdGg6CisJbWNhX3NldF9hZGFwdGVyX3Byb2Nmbiggc2xvdCwgTlVMTCwgTlVMTCApOworCitJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQsIGV2ZW4gaWYgeW91IGRvbid0IHdyaXRlIGEgcHJvYyBmdW5jdGlvbiwgdG8KK3NldCB0aGUgbmFtZSBvZiB0aGUgYWRhcHRlciAoaS5lLiAiUFMvMiBFU0RJIENvbnRyb2xsZXIiKSB2aWEKK21jYV9zZXRfYWRhcHRlcl9uYW1lKCBpbnQgc2xvdCwgY2hhciogbmFtZSApLgorCitNQ0EgRGV2aWNlIERyaXZlcnMKKz09PT09PT09PT09PT09PT09PQorCitDdXJyZW50bHksIHRoZXJlIGFyZSBhIG51bWJlciBvZiBNQ0Etc3BlY2lmaWMgZGV2aWNlIGRyaXZlcnMuCisKKzEpIFBTLzIgRVNESQorCWRyaXZlcnMvYmxvY2svcHMyZXNkaS5jCisJaW5jbHVkZS9saW51eC9wczJlc2RpLmgKKyAgIFVzZXMgbWFqb3IgbnVtYmVyIDM2LCBhbmQgc2hvdWxkIHVzZSAvZGV2IGZpbGVzIC9kZXYvZWRhLCAvZGV2L2VkYi4KKyAgIFN1cHBvcnRzIHR3byBkcml2ZXMsIGJ1dCBvbmx5IG9uZSBjb250cm9sbGVyLiAgTWF5IHVzZSB0aGUKKyAgIGNvbW1hbmQtbGluZSBhcmdzICJlZD1jeWwsaGVhZCxzZWMiIGFuZCAidHA3MjAiLgorCisyKSBQUy8yIFNDU0kKKwlkcml2ZXJzL3Njc2kvaWJtbWNhLmMKKwlkcml2ZXJzL3Njc2kvaWJtbWNhLmgKKyAgIFRoZSBkcml2ZXIgZm9yIHRoZSBJQk0gU0NTSSBzdWJzeXN0ZW0uICBJbmNsdWRlcyBib3RoIGludGVncmF0ZWQKKyAgIGNvbnRyb2xsZXJzIGFuZCBhZGFwdGVyIGNhcmRzLiAgTWF5IHJlcXVpcmUgY29tbWFuZC1saW5lIGFyZworICAgImlibW1jYXNjc2k9aW9fcG9ydCIgdG8gZm9yY2UgZGV0ZWN0aW9uIG9mIGFuIGFkYXB0ZXIuICBJZiB5b3UgaGF2ZSBhCisgICBtYWNoaW5lIHdpdGggYSBmcm9udC1wYW5lbCBkaXNwbGF5IChpLmUuIG1vZGVsIDk1KSwgeW91IGNhbiB1c2UKKyAgICJpYm1tY2FzY3NpPWRpc3BsYXkiIHRvIGVuYWJsZSBhIGRyaXZlIGFjdGl2aXR5IGluZGljYXRvci4KKworMykgM2M1MjMKKwlkcml2ZXJzL25ldC8zYzUyMy5jCisJZHJpdmVycy9uZXQvM2M1MjMuaAorICAgM0NvbSAzYzUyMyBFdGhlcmxpbmsvTUMgZXRoZXJuZXQgZHJpdmVyLgorCis0KSBTTUMgVWx0cmEvTUNBIGFuZCBJQk0gQWRhcHRlci9BCisJZHJpdmVycy9uZXQvc21jLW1jYS5jCisJZHJpdmVycy9uZXQvc21jLW1jYS5oCisJRHJpdmVyIGZvciB0aGUgTUNBIHZlcnNpb24gb2YgdGhlIFNNQyBVbHRyYSBhbmQgdmFyaW91cyBvdGhlcgorCU9FTSdlZCBhbmQgd29yay1hbGlrZSBjYXJkcyAoRWxpdGUsIEFkYXB0ZXIvQSwgZXRjKS4KKworNSkgTkUvMgorCWRyaXZlci9uZXQvbmUyLmMKKwlkcml2ZXIvbmV0L25lMi5oCisJVGhlIE5FLzIgaXMgdGhlIE1DQSB2ZXJzaW9uIG9mIHRoZSBORTIwMDAuICBUaGlzIG1heSBub3Qgd29yaworCXdpdGggY2xvbmVzIHRoYXQgaGF2ZSBhIGRpZmZlcmVudCBhZGFwdGVyIGlkIHRoYW4gdGhlIG9yaWdpbmFsCisJTkUvMi4KKworNikgRnV0dXJlIERvbWFpbiBNQ1MtNjAwLzcwMCwgT0VNJ2QgSUJNIEZhc3QgU0NTSSBBYXB0ZXIvQSBhbmQKKyAgIFJlcGx5IFNvdW5kIEJsYXN0ZXIvU0NTSSAoU0NTSSBwYXJ0KQorCUJldHRlciBzdXBwb3J0IGZvciB0aGVzZSBjYXJkcyB0aGFuIHRoZSBkcml2ZXIgZm9yIElTQS4KKyAgIFN1cHBvcnRzIG11bHRpcGxlIGNhcmRzIHdpdGggSVJRIHNoYXJpbmcuCisKK0Fsc28gYWRkZWQgYm9vdCB0aW1lIG9wdGlvbiBvZiBzY3NpLXByb2JlLCB3aGljaCBjYW4gZG8gcmVvcmRlcmluZyBvZgorU0NTSSBob3N0IGFkYXB0ZXJzLiBUaGlzIHdpbGwgZGlyZWN0IHRoZSBrZXJuZWwgb24gdGhlIG9yZGVyIHdoaWNoCitTQ1NJIGFkYXB0ZXIgc2hvdWxkIGJlIGRldGVjdGVkLiBFeGFtcGxlOgorICBzY3NpLXByb2JlPWlibW1jYSxmZF9tY3MsYWRhcHRlYzE1NDIsYnVzbG9naWMKKworVGhlIHNlcmlhbCBkcml2ZXJzIHdlcmUgbW9kaWZpZWQgdG8gc3VwcG9ydCB0aGUgZXh0ZW5kZWQgSU8gcG9ydCByYW5nZQorb2YgdGhlIHR5cGljYWwgTUNBIHN5c3RlbSAoYWxzbyAjaWZkZWYgQ09ORklHX01DQSkuCisKK1RoZSBmb2xsb3dpbmcgZGV2aWNlcyB3b3JrIHdpdGggZXhpc3RpbmcgZHJpdmVyczoKKzEpIFRva2VuLXJpbmcKKzIpIEZ1dHVyZSBEb21haW4gU0NTSSAoTUNTLTYwMCwgTUNTLTcwMCwgbm90IE1DUy0zNTAsIE9FTSdlZCBJQk0gU0NTSSkKKzMpIEFkYXB0ZWMgMTY0MCBTQ1NJICh1c2luZyB0aGUgYWhhMTU0MiBkcml2ZXIpCis0KSBCdXN0ZWsvQnVzbG9naWMgU0NTSSAodmFyaW91cykKKzUpIFByb2JhYmx5IGFsbCBBcmNuZXQgY2FyZHMuCis2KSBTb21lLCBwb3NzaWJseSBhbGwsIE1DQSBJREUgY29udHJvbGxlcnMuCis3KSAzQ29tIDNjNTI5IChNQ0EgdmVyc2lvbiBvZiAzYzUwOSkgKHBhdGNoZWQpCisKKzgpIEludGVsIEV0aGVyRXhwcmVzc01DICAocGF0Y2hlZCB2ZXJzaW9uKQorICAgWW91IG5lZWQgdG8gaGF2ZSBDT05GSUdfTUNBIGRlZmluZWQgdG8gaGF2ZSBFdGhlckV4cHJlc3NNQyBzdXBwb3J0LgorOSkgUmVwbHkgU291bmQgQmxhc3Rlci9TQ1NJIChTQiBwYXJ0KSAocGF0Y2hlZCB2ZXJzaW9uKQorCitCdWdzICYgT3RoZXIgV2VpcmRuZXNzCis9PT09PT09PT09PT09PT09PT09PT09CisKK05NSXMgdGVuZCB0byBvY2N1ciB3aXRoIE1DQSBtYWNoaW5lcyBiZWNhdXNlIG9mIHZhcmlvdXMgaGFyZHdhcmUKK3dlaXJkbmVzcywgYnVzIHRpbWVvdXRzLCBhbmQgbWFueSBvdGhlciBub24tY3JpdGljYWwgdGhpbmdzLiAgU29tZSBiYXNpYworY29kZSB0byBoYW5kbGUgdGhlbSAoaW5zcGlyZWQgYnkgdGhlIE5ldEJTRCBNQ0EgY29kZSkgaGFzIGJlZW4gYWRkZWQgdG8KK2RldGVjdCB0aGUgZ3VpbHR5IGRldmljZSwgYnV0IGl0J3MgcHJldHR5IGluY29tcGxldGUuICBJZiBOTUlzIGFyZSBhCitwZXJzaXN0ZW50IHByb2JsZW0gKG9uIHNvbWUgbW9kZWwgNzAgb3IgODBzLCB0aGV5IG9jY3VyIGV2ZXJ5IGNvdXBsZQorc2hlbGwgY29tbWFuZHMpLCB0aGUgQ09ORklHX0lHTk9SRV9OTUkgZmxhZyB3aWxsIHRha2UgY2FyZSBvZiB0aGF0LgorCitWYXJpb3VzIFBlbnRpdW0gbWFjaGluZXMgaGF2ZSBoYWQgc2VyaW91cyBwcm9ibGVtcyB3aXRoIHRoZSBGUFUgdGVzdCBpbgorYnVncy5oLiAgQmFzaWNhbGx5LCB0aGUgbWFjaGluZSBoYW5ncyBhZnRlciB0aGUgSExUIHRlc3QuICBUaGlzIG9jY3VycywKK2FzIGZhciBhcyB3ZSBrbm93LCBvbiB0aGUgUGVudGl1bS1lcXVpcHBlZCA4NXMsIDk1cywgYW5kIHNvbWUgUEMgU2VydmVycy4KK1RoZSBQQ0kvTUNBIFBDIDc1MHMgYXJlIGZpbmUgYXMgZmFyIGFzIEkgY2FuIHRlbGwuICBUaGUgYGBtY2EtcGVudGl1bScnCitib290LXByb21wdCBmbGFnIHdpbGwgZGlzYWJsZSB0aGUgRlBVIGJ1ZyBjaGVjayBpZiB0aGlzIGlzIGEgcHJvYmxlbQord2l0aCB5b3VyIG1hY2hpbmUuCisKK1RoZSBtb2RlbCA4MCBoYXMgYSByYWZ0IG9mIHByb2JsZW1zIHRoYXQgYXJlIGp1c3QgdG9vIHdlaXJkIGFuZCB1bmlxdWUKK3RvIGdldCBpbnRvIGhlcmUuICBTb21lIHBlb3BsZSBoYXZlIG5vIHRyb3VibGUgd2hpbGUgb3RoZXJzIGhhdmUgbm90aGluZworYnV0IHByb2JsZW1zLiAgSSdkIHN1c3BlY3Qgc29tZSBwcm9ibGVtcyBhcmUgcmVsYXRlZCB0byB0aGUgYWdlIG9mIHRoZQorYXZlcmFnZSA4MCBhbmQgYWNjb21wYW55aW5nIGhhcmR3YXJlIGRldGVyaW9yYXRpb24sIGFsdGhvdWdoIG90aGVycworYXJlIGRlZmluaXRlbHkgZGVzaWduIHByb2JsZW1zIHdpdGggdGhlIGhhcmR3YXJlLiAgQW1vbmcgdGhlIHByb2JsZW1zCitpbmNsdWRlIFNDU0kgY29udHJvbGxlciBwcm9ibGVtcywgRVNESSBjb250cm9sbGVyIHByb2JsZW1zLCBhbmQgc2VyaW91cworc2NyZXctdXBzIGluIHRoZSBmbG9wcHkgY29udHJvbGxlci4gIE9oLCBhbmQgdGhlIHBhcmFsbGVsIHBvcnQgaXMgYWxzbworcHJldHR5IGZsYWt5LiAgVGhlcmUgd2VyZSBhYm91dCA1IG9yIDYgZGlmZmVyZW50IG1vZGVsIDgwIG1vdGhlcmJvYXJkcworcHJvZHVjZWQgdG8gZml4IHZhcmlvdXMgb2JzY3VyZSBwcm9ibGVtcy4gIEFzIGZhciBhcyBJIGtub3csIGl0J3MgcHJldHR5CittdWNoIGltcG9zc2libGUgdG8gdGVsbCB3aGljaCBidWdzIGEgcGFydGljdWxhciBtb2RlbCA4MCBoYXMgKG90aGVyIHRoYW4KK3RyaWdnZXJpbmcgdGhlbSwgdGhhdCBpcykuCisKK0RyaXZlcnMgYXJlIHJlcXVpcmVkIGZvciBzb21lIE1DQSBtZW1vcnkgYWRhcHRlcnMuICBJZiB5b3UncmUgc3VkZGVubHkKK3Nob3J0IGEgZmV3IG1lZ3Mgb2YgUkFNLCB0aGlzIG1pZ2h0IGJlIHRoZSByZWFzb24uICBUaGUgKEkgdGhpbmspIEVuaGFuY2VkCitNZW1vcnkgQWRhcHRlciBjb21tb25seSBmb3VuZCBvbiB0aGUgbW9kZWwgNzAgaXMgb25lLiAgVGhlcmUncyBhIHZlcnkKK2FscGhhIGRyaXZlciBmbG9hdGluZyBhcm91bmQsIGJ1dCBpdCdzIHByZXR0eSB1Z2x5IChkaXNhc3NlbWJsZWQgZnJvbQordGhlIERPUyBkcml2ZXIsIGFjdHVhbGx5KS4gIFNlZSB0aGUgTUNBIExpbnV4IHdlYiBwYWdlIChVUkwgYmVsb3cpCitmb3IgbW9yZSBjdXJyZW50IG1lbW9yeSBpbmZvLgorCitUaGUgVGhpbmtwYWQgNzAwIGFuZCA3MjAgd2lsbCB3b3JrLCBidXQgdmFyaW91cyBjb21wb25lbnRzIGFyZSBlaXRoZXIKK25vbi1mdW5jdGlvbmFsLCBmbGFreSwgb3Igd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGVtLiAgVGhlCitncmFwaGljcyBjb250cm9sbGVyIGlzIHN1cHBvc2VkIHRvIGJlIHNvbWUgV0QsIGJ1dCB3ZSBjYW4ndCBnZXQgdGhpbmdzCit3b3JraW5nIHByb3Blcmx5LiAgVGhlIFBDTUNJQSBzbG90cyBkb24ndCBzZWVtIHRvIHdvcmsuICBEaXR0byBmb3IgQVBNLgorVGhlIHNlcmlhbCBwb3J0cyB3b3JrLCBidXQgZGV0ZWN0aW9uIHNlZW1zIHRvIGJlIGZsYWt5LgorCitDcmVkaXRzCis9PT09PT09CitBIHdob2xlIHBpbGUgb2YgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhlIE1DQSBjb2RlLiAgSSdkIGluY2x1ZGUKK3RoZWlyIG5hbWVzIGhlcmUsIGJ1dCBJIGRvbid0IGhhdmUgYSBsaXN0IGhhbmR5LiAgQ2hlY2sgdGhlIE1DQSBMaW51eAoraG9tZSBwYWdlIChVUkwgYmVsb3cpIGZvciBhIHBlcnBldHVhbGx5IG91dC1vZi1kYXRlIGxpc3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTUNBIExpbnV4IEhvbWUgUGFnZTogaHR0cDovL2dseWNlcmluZS5pdHNtbS51bmkuZWR1L21jYS8KKworQ2hyaXN0b3BoZSBCZWF1cmVnYXJkCitjaHJpc2JAdHJ1ZXNwZWN0cmEuY29tCitjcGJlYXVyZUBjYWx1bS5jc2NsdWIudXdhdGVybG9vLmNhCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQXBwZW5kaXggQTogU2FtcGxlIC9wcm9jL21jYQorCitUaGlzIGlzIGZyb20gbXkgbW9kZWwgODU5NS4gIFNsb3QgMSBjb250YWlucyB0aGUgc3RhbmRhcmQgSUJNIFNDU0kKK2FkYXB0ZXIsIHNsb3QgMyBpcyBhbiBBZGFwdGVjIEFIQS0xNjQwLCBzbG90IDUgaXMgYSBYR0EtMSB2aWRlbyBhZGFwdGVyLAorYW5kIHNsb3QgNyBpcyB0aGUgM2M1MjMgRXRoZXJsaW5rL01DLgorCisvcHJvYy9tY2EvbWFjaGluZToKK01vZGVsIElkOiAweGY4CitTdWJtb2RlbCBJZDogMHgxNAorQklPUyBSZXZpc2lvbjogMHg1CisKKy9wcm9jL21jYS9wb3M6CitTbG90IDE6IGZmIDhlIGYxIGZjIGEwIGZmIGZmIGZmICBJQk0gU0NTSSBBZGFwdGVyIHcvQ2FjaGUKK1Nsb3QgMjogZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIAorU2xvdCAzOiAxZiAwZiA4MSAzYiBiZiBiNiBmZiBmZiAgCitTbG90IDQ6IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAKK1Nsb3QgNTogZGIgOGYgMWQgNWUgZmQgYzAgMDAgMDAgIAorU2xvdCA2OiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgCitTbG90IDc6IDQyIDYwIGZmIDA4IGZmIGZmIGZmIGZmICAzQ29tIDNjNTIzIEV0aGVybGluay9NQworU2xvdCA4OiBmZiBmZiBmZiBmZiBmZiBmZiBmZiBmZiAgCitWaWRlbyA6IGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmICAKK1NDU0kgIDogZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmYgIAorCisvcHJvYy9tY2Evc2xvdDE6CitTbG90OiAxCitBZGFwdGVyIE5hbWU6IElCTSBTQ1NJIEFkYXB0ZXIgdy9DYWNoZQorSWQ6IDhlZmYKK0VuYWJsZWQ6IFllcworUE9TOiBmZiA4ZSBmMSBmYyBhMCBmZiBmZiBmZiAKK1N1YnN5c3RlbSBQVU46IDcKK0RldGVjdGVkIGF0IGJvb3Q6IFllcworCisvcHJvYy9tY2Evc2xvdDM6CitTbG90OiAzCitBZGFwdGVyIE5hbWU6IFVua25vd24KK0lkOiAwZjFmCitFbmFibGVkOiBZZXMKK1BPUzogMWYgMGYgODEgM2IgYmYgYjYgZmYgZmYgCisKKy9wcm9jL21jYS9zbG90NToKK1Nsb3Q6IDUKK0FkYXB0ZXIgTmFtZTogVW5rbm93bgorSWQ6IDhmZGIKK0VuYWJsZWQ6IFllcworUE9TOiBkYiA4ZiAxZCA1ZSBmZCBjMCAwMCAwMCAKKworL3Byb2MvbWNhL3Nsb3Q3OgorU2xvdDogNworQWRhcHRlciBOYW1lOiAzQ29tIDNjNTIzIEV0aGVybGluay9NQworSWQ6IDYwNDIKK0VuYWJsZWQ6IFllcworUE9TOiA0MiA2MCBmZiAwOCBmZiBmZiBmZiBmZiAKK1JldmlzaW9uOiAweGUKK0lSUTogOQorSU8gQWRkcmVzczogMHgzMzAwLTB4MzMwOAorTWVtb3J5OiAweGQ4MDAwLTB4ZGJmZmYKK1RyYW5zY2VpdmVyOiBFeHRlcm5hbAorRGV2aWNlOiBldGgwCitIYXJkd2FyZSBBZGRyZXNzOiAwMiA2MCA4YyA0NSBjNCAyYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZC50eHQgYi9Eb2N1bWVudGF0aW9uL21kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmI1MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTAsMCArMSwxMTggQEAKK1Rvb2xzIHRoYXQgbWFuYWdlIG1kIGRldmljZXMgY2FuIGJlIGZvdW5kIGF0CisgICBodHRwOi8vd3d3Ljxjb3VudHJ5Pi5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkLy4uLi4KKworCitCb290IHRpbWUgYXNzZW1ibHkgb2YgUkFJRCBhcnJheXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGJvb3Qgd2l0aCB5b3VyIG1kIGRldmljZSB3aXRoIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbW1hbmQKK2xpbmVzOgorCitmb3Igb2xkIHJhaWQgYXJyYXlzIHdpdGhvdXQgcGVyc2lzdGVudCBzdXBlcmJsb2NrczoKKyAgbWQ9PG1kIGRldmljZSBuby4+LDxyYWlkIGxldmVsPiw8Y2h1bmsgc2l6ZSBmYWN0b3I+LDxmYXVsdCBsZXZlbD4sZGV2MCxkZXYxLC4uLixkZXZuCisKK2ZvciByYWlkIGFycmF5cyB3aXRoIHBlcnNpc3RlbnQgc3VwZXJibG9ja3MKKyAgbWQ9PG1kIGRldmljZSBuby4+LGRldjAsZGV2MSwuLi4sZGV2bgorb3IsIHRvIGFzc2VtYmxlIGEgcGFydGl0aW9uYWJsZSBhcnJheToKKyAgbWQ9ZDxtZCBkZXZpY2Ugbm8uPixkZXYwLGRldjEsLi4uLGRldm4KKyAgCittZCBkZXZpY2Ugbm8uID0gdGhlIG51bWJlciBvZiB0aGUgbWQgZGV2aWNlIC4uLiAKKyAgICAgICAgICAgICAgMCBtZWFucyBtZDAsIAorCSAgICAgIDEgbWQxLAorCSAgICAgIDIgbWQyLAorCSAgICAgIDMgbWQzLAorCSAgICAgIDQgbWQ0CisKK3JhaWQgbGV2ZWwgPSAtMSBsaW5lYXIgbW9kZQorICAgICAgICAgICAgICAwIHN0cmlwZWQgbW9kZQorCSAgICAgIG90aGVyIG1vZGVzIGFyZSBvbmx5IHN1cHBvcnRlZCB3aXRoIHBlcnNpc3RlbnQgc3VwZXIgYmxvY2tzCisKK2NodW5rIHNpemUgZmFjdG9yID0gKHJhaWQtMCBhbmQgcmFpZC0xIG9ubHkpCisgICAgICAgICAgICAgIFNldCAgdGhlIGNodW5rIHNpemUgYXMgNGsgPDwgbi4KKwkgICAgICAKK2ZhdWx0IGxldmVsID0gdG90YWxseSBpZ25vcmVkCisJCQkgICAgCitkZXYwLWRldm46IGUuZy4gL2Rldi9oZGExLC9kZXYvaGRjMSwvZGV2L3NkYTEsL2Rldi9zZGIxCisJCQkgICAgCitBIHBvc3NpYmxlIGxvYWRsaW4gbGluZSAoSGFyYWxkIEhveWVyIDxIYXJyeUhAUm95YWwuTmV0PikgIGxvb2tzIGxpa2UgdGhpczoKKworZTpcbG9hZGxpblxsb2FkbGluIGU6XHppbWFnZSByb290PS9kZXYvbWQwIG1kPTAsMCw0LDAsL2Rldi9oZGIyLC9kZXYvaGRjMyBybworCisKK0Jvb3QgdGltZSBhdXRvZGV0ZWN0aW9uIG9mIFJBSUQgYXJyYXlzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIG1kIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCAobm90IGFzIG1vZHVsZSksIHBhcnRpdGlvbnMgb2YKK3R5cGUgMHhmZCBhcmUgc2Nhbm5lZCBhbmQgYXV0b21hdGljYWxseSBhc3NlbWJsZWQgaW50byBSQUlEIGFycmF5cy4KK1RoaXMgYXV0b2RldGVjdGlvbiBtYXkgYmUgc3VwcHJlc3NlZCB3aXRoIHRoZSBrZXJuZWwgcGFyYW1ldGVyCisicmFpZD1ub2F1dG9kZXRlY3QiLiAgQXMgb2Yga2VybmVsIDIuNi45LCBvbmx5IGRyaXZlcyB3aXRoIGEgdHlwZSAwCitzdXBlcmJsb2NrIGNhbiBiZSBhdXRvZGV0ZWN0ZWQgYW5kIHJ1biBhdCBib290IHRpbWUuCisKK1RoZSBrZXJuZWwgcGFyYW1ldGVyICJyYWlkPXBhcnRpdGlvbmFibGUiIChvciAicmFpZD1wYXJ0IikgbWVhbnMKK3RoYXQgYWxsIGF1dG8tZGV0ZWN0ZWQgYXJyYXlzIGFyZSBhc3NlbWJsZWQgYXMgcGFydGl0aW9uYWJsZS4KKworCitTdXBlcmJsb2NrIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWQgZHJpdmVyIGNhbiBzdXBwb3J0IGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgc3VwZXJibG9jayBmb3JtYXRzLgorQ3VycmVudGx5LCBpdCBzdXBwb3J0cyBzdXBlcmJsb2NrIGZvcm1hdHMgIjAuOTAuMCIgYW5kIHRoZSAibWQtMSIgZm9ybWF0CitpbnRyb2R1Y2VkIGluIHRoZSAyLjUgZGV2ZWxvcG1lbnQgc2VyaWVzLgorCitUaGUga2VybmVsIHdpbGwgYXV0b2RldGVjdCB3aGljaCBmb3JtYXQgc3VwZXJibG9jayBpcyBiZWluZyB1c2VkLgorCitTdXBlcmJsb2NrIGZvcm1hdCAnMCcgaXMgdHJlYXRlZCBkaWZmZXJlbnRseSB0byBvdGhlcnMgZm9yIGxlZ2FjeQorcmVhc29ucyAtIGl0IGlzIHRoZSBvcmlnaW5hbCBzdXBlcmJsb2NrIGZvcm1hdC4KKworCitHZW5lcmFsIFJ1bGVzIC0gYXBwbHkgZm9yIGFsbCBzdXBlcmJsb2NrIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBhcnJheSBpcyAnY3JlYXRlZCcgYnkgd3JpdGluZyBhcHByb3ByaWF0ZSBzdXBlcmJsb2NrcyB0byBhbGwKK2RldmljZXMuCisKK0l0IGlzICdhc3NlbWJsZWQnIGJ5IGFzc29jaWF0aW5nIGVhY2ggb2YgdGhlc2UgZGV2aWNlcyB3aXRoIGFuCitwYXJ0aWN1bGFyIG1kIHZpcnR1YWwgZGV2aWNlLiAgT25jZSBpdCBpcyBjb21wbGV0ZWx5IGFzc2VtYmxlZCwgaXQgY2FuCitiZSBhY2Nlc3NlZC4KKworQW4gYXJyYXkgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgYSB1c2VyLXNwYWNlIHRvb2wuICBUaGlzIHdpbGwgd3JpdGUKK3N1cGVyYmxvY2tzIHRvIGFsbCBkZXZpY2VzLiAgSXQgd2lsbCB1c3VhbGx5IG1hcmsgdGhlIGFycmF5IGFzCisndW5jbGVhbicsIG9yIHdpdGggc29tZSBkZXZpY2VzIG1pc3Npbmcgc28gdGhhdCB0aGUga2VybmVsIG1kIGRyaXZlcgorY2FuIGNyZWF0ZSBhcHByb3ByaWF0ZSByZWR1bmRhbmN5IChjb3B5aW5nIGluIHJhaWQxLCBwYXJpdHkKK2NhbGN1bGF0aW9uIGluIHJhaWQ0LzUpLgorCitXaGVuIGFuIGFycmF5IGlzIGFzc2VtYmxlZCwgaXQgaXMgZmlyc3QgaW5pdGlhbGl6ZWQgd2l0aCB0aGUKK1NFVF9BUlJBWV9JTkZPIGlvY3RsLiAgVGhpcyBjb250YWlucywgaW4gcGFydGljdWxhciwgYSBtYWpvciBhbmQgbWlub3IKK3ZlcnNpb24gbnVtYmVyLiAgVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIHNlbGVjdHMgd2hpY2ggc3VwZXJibG9jaworZm9ybWF0IGlzIHRvIGJlIHVzZWQuICBUaGUgbWlub3IgbnVtYmVyIG1pZ2h0IGJlIHVzZWQgdG8gdHVuZSBoYW5kbGluZworb2YgdGhlIGZvcm1hdCwgc3VjaCBhcyBzdWdnZXN0aW5nIHdoZXJlIG9uIGVhY2ggZGV2aWNlIHRvIGxvb2sgZm9yIHRoZQorc3VwZXJibG9jay4KKworVGhlbiBlYWNoIGRldmljZSBpcyBhZGRlZCB1c2luZyB0aGUgQUREX05FV19ESVNLIGlvY3RsLiAgVGhpcworcHJvdmlkZXMsIGluIHBhcnRpY3VsYXIsIGEgbWFqb3IgYW5kIG1pbm9yIG51bWJlciBpZGVudGlmeWluZyB0aGUKK2RldmljZSB0byBhZGQuCisKK1RoZSBhcnJheSBpcyBzdGFydGVkIHdpdGggdGhlIFJVTl9BUlJBWSBpb2N0bC4KKworT25jZSBzdGFydGVkLCBuZXcgZGV2aWNlcyBjYW4gYmUgYWRkZWQuICBUaGV5IHNob3VsZCBoYXZlIGFuCithcHByb3ByaWF0ZSBzdXBlcmJsb2NrIHdyaXR0ZW4gdG8gdGhlbSwgYW5kIHRoZW4gcGFzc2VkIGJlIGluIHdpdGgKK0FERF9ORVdfRElTSy4KKworRGV2aWNlcyB0aGF0IGhhdmUgZmFpbGVkIG9yIGFyZSBub3QgeWV0IGFjdGl2ZSBjYW4gYmUgZGV0YWNoZWQgZnJvbSBhbgorYXJyYXkgdXNpbmcgSE9UX1JFTU9WRV9ESVNLLgorCisKK1NwZWNpZmljIFJ1bGVzIHRoYXQgYXBwbHkgdG8gZm9ybWF0LTAgc3VwZXIgYmxvY2sgYXJyYXlzLCBhbmQKKyAgICAgICBhcnJheXMgd2l0aCBubyBzdXBlcmJsb2NrIChub24tcGVyc2lzdGVudCkuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFycmF5IGNhbiBiZSAnY3JlYXRlZCcgYnkgZGVzY3JpYmluZyB0aGUgYXJyYXkgKGxldmVsLCBjaHVua3NpemUKK2V0YykgaW4gYSBTRVRfQVJSQVlfSU5GTyBpb2N0bC4gIFRoaXMgbXVzdCBoYXMgbWFqb3JfdmVyc2lvbj09MCBhbmQKK3JhaWRfZGlza3MgIT0gMC4KKworVGhlbiB1bmluaXRpYWxpemVkIGRldmljZXMgY2FuIGJlIGFkZGVkIHdpdGggQUREX05FV19ESVNLLiAgVGhlCitzdHJ1Y3R1cmUgcGFzc2VkIHRvIEFERF9ORVdfRElTSyBtdXN0IHNwZWNpZnkgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UKK2FuZCBpdCdzIHJvbGUgaW4gdGhlIGFycmF5LgorCitPbmNlIHN0YXJ0ZWQgd2l0aCBSVU5fQVJSQVksIHVuaW5pdGlhbGl6ZWQgc3BhcmVzIGNhbiBiZSBhZGRlZCB3aXRoCitIT1RfQUREX0RJU0suCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzZGVkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVtb3J5LnR4dApAQCAtMCwwICsxLDYwIEBACitUaGVyZSBhcmUgc2V2ZXJhbCBjbGFzc2ljIHByb2JsZW1zIHJlbGF0ZWQgdG8gbWVtb3J5IG9uIExpbnV4CitzeXN0ZW1zLgorCisJMSkgVGhlcmUgYXJlIHNvbWUgYnVnZ3kgbW90aGVyYm9hcmRzIHdoaWNoIGNhbm5vdCBwcm9wZXJseSAKKwkgICBkZWFsIHdpdGggdGhlIG1lbW9yeSBhYm92ZSAxNk1CLiAgQ29uc2lkZXIgZXhjaGFuZ2luZworCSAgIHlvdXIgbW90aGVyYm9hcmQuCisKKwkyKSBZb3UgY2Fubm90IGRvIERNQSBvbiB0aGUgSVNBIGJ1cyB0byBhZGRyZXNzZXMgYWJvdmUKKwkgICAxNk0uICBNb3N0IGRldmljZSBkcml2ZXJzIHVuZGVyIExpbnV4IGFsbG93IHRoZSB1c2UKKyAgICAgICAgICAgb2YgYm91bmNlIGJ1ZmZlcnMgd2hpY2ggd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLiAgRHJpdmVycworCSAgIHRoYXQgZG9uJ3QgdXNlIGJvdW5jZSBidWZmZXJzIHdpbGwgYmUgdW5zdGFibGUgd2l0aAorCSAgIG1vcmUgdGhhbiAxNk0gaW5zdGFsbGVkLiAgRHJpdmVycyB0aGF0IHVzZSBib3VuY2UgYnVmZmVycworCSAgIHdpbGwgYmUgT0ssIGJ1dCBtYXkgaGF2ZSBzbGlnaHRseSBoaWdoZXIgb3ZlcmhlYWQuCisJCisJMykgVGhlcmUgYXJlIHNvbWUgbW90aGVyYm9hcmRzIHRoYXQgd2lsbCBub3QgY2FjaGUgYWJvdmUKKwkgICBhIGNlcnRhaW4gcXVhbnRpdHkgb2YgbWVtb3J5LiAgSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlCisJICAgbW90aGVyYm9hcmRzLCB5b3VyIHN5c3RlbSB3aWxsIGJlIFNMT1dFUiwgbm90IGZhc3RlcgorCSAgIGFzIHlvdSBhZGQgbW9yZSBtZW1vcnkuICBDb25zaWRlciBleGNoYW5naW5nIHlvdXIgCisgICAgICAgICAgIG1vdGhlcmJvYXJkLgorCitBbGwgb2YgdGhlc2UgcHJvYmxlbXMgY2FuIGJlIGFkZHJlc3NlZCB3aXRoIHRoZSAibWVtPVhYWE0iIGJvb3Qgb3B0aW9uCisod2hlcmUgWFhYIGlzIHRoZSBzaXplIG9mIFJBTSB0byB1c2UgaW4gbWVnYWJ5dGVzKS4gIAorSXQgY2FuIGFsc28gdGVsbCBMaW51eCB0byB1c2UgbGVzcyBtZW1vcnkgdGhhbiBpcyBhY3R1YWxseSBpbnN0YWxsZWQuCitJZiB5b3UgdXNlICJtZW09IiBvbiBhIG1hY2hpbmUgd2l0aCBQQ0ksIGNvbnNpZGVyIHVzaW5nICJtZW1tYXA9IiB0byBhdm9pZAorcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBjb2xsaXNpb25zLgorCitTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBib290IGxvYWRlciAoTElMTywgbG9hZGxpbiwgZXRjLikgYWJvdXQKK2hvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlIGtlcm5lbC4KKworVGhlcmUgYXJlIG90aGVyIG1lbW9yeSBwcm9ibGVtcyB3aGljaCBMaW51eCBjYW5ub3QgZGVhbCB3aXRoLiAgUmFuZG9tCitjb3JydXB0aW9uIG9mIG1lbW9yeSBpcyB1c3VhbGx5IGEgc2lnbiBvZiBzZXJpb3VzIGhhcmR3YXJlIHRyb3VibGUuCitUcnk6CisKKwkqIFJlZHVjaW5nIG1lbW9yeSBzZXR0aW5ncyBpbiB0aGUgQklPUyB0byB0aGUgbW9zdCBjb25zZXJ2YXRpdmUgCisgICAgICAgICAgdGltaW5ncy4KKworCSogQWRkaW5nIGEgY29vbGluZyBmYW4uCisKKwkqIE5vdCBvdmVyY2xvY2tpbmcgeW91ciBDUFUuCisKKwkqIEhhdmluZyB0aGUgbWVtb3J5IHRlc3RlZCBpbiBhIG1lbW9yeSB0ZXN0ZXIgb3IgZXhjaGFuZ2VkCisJICB3aXRoIHRoZSB2ZW5kb3IuIENvbnNpZGVyIHRlc3RpbmcgaXQgd2l0aCBtZW10ZXN0ODYgeW91cnNlbGYuCisJCisJKiBFeGNoYW5naW5nIHlvdXIgQ1BVLCBjYWNoZSwgb3IgbW90aGVyYm9hcmQgZm9yIG9uZSB0aGF0IHdvcmtzLgorCisJKiBEaXNhYmxpbmcgdGhlIGNhY2hlIGZyb20gdGhlIEJJT1MuCisKKwkqIFRyeSBwYXNzaW5nIHRoZSAibWVtPTRNIiBvcHRpb24gdG8gdGhlIGtlcm5lbCB0byBsaW1pdAorCSAgTGludXggdG8gdXNpbmcgYSB2ZXJ5IHNtYWxsIGFtb3VudCBvZiBtZW1vcnkuIFVzZSAibWVtbWFwPSItb3B0aW9uCisJICB0b2dldGhlciB3aXRoICJtZW09IiBvbiBzeXN0ZW1zIHdpdGggUENJIHRvIGF2b2lkIHBoeXNpY2FsIGFkZHJlc3MKKwkgIHNwYWNlIGNvbGxpc2lvbnMuCisKKworT3RoZXIgdHJpY2tzOgorCisJKiBUcnkgcGFzc2luZyB0aGUgIm5vLTM4NyIgb3B0aW9uIHRvIHRoZSBrZXJuZWwgdG8gaWdub3JlCisJICBhIGJ1Z2d5IEZQVS4KKworCSogVHJ5IHBhc3NpbmcgdGhlICJuby1obHQiIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBwb3RlbnRpYWxseQorICAgICAgICAgIGJ1Z2d5IEhMVCBpbnN0cnVjdGlvbiBpbiB5b3VyIENQVS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWlwcy9HVDY0MTIwLlJFQURNRSBiL0RvY3VtZW50YXRpb24vbWlwcy9HVDY0MTIwLlJFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBlZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9taXBzL0dUNjQxMjAuUkVBRE1FCkBAIC0wLDAgKzEsNjUgQEAKK1JFQURNRSBmb3IgYXJjaC9taXBzL2d0NjQxMjAgZGlyZWN0b3J5IGFuZCBzdWJkaXJlY3RvcmllcworCitKdW4gU3VuLCBqc3VuQG12aXN0YS5jb20gb3IganN1bkBqdW5zdW4ubmV0CiswMS8yNywgMjAwMQorCitNT1RJVkFUSU9OCistLS0tLS0tLS0tCisKK01hbnkgTUlQUyBib2FyZHMgc2hhcmUgdGhlIHNhbWUgc3lzdGVtIGNvbnRyb2xsZXIgKG9yIENQVSBjb21wYW5pYW4gY2hpcCksCitzdWNoIGFzIEdULTY0MTIwLiAgSXQgaXMgaGlnaGx5IGRlc2lyYWJsZSB0byBsZXQgdGhlc2UgYm9hcmRzIHNoYXJlCit0aGUgc2FtZSBjb250cm9sbGVyIGNvZGUgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGVtLgorCitUaGlzIGRpcmVjdG9yeSBpcyBtZWFudCB0byBob2xkIGFsbCBNSVBTIGJvYXJkcyB0aGF0IHVzZSBHVC02NDEyMCBvciBHVC02NDEyMEEuCisKKworSE9XIFRPIEFERCBBIEJPQVJECistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKy4gQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IGluY2x1ZGUvYXNtL2d0NjQxMjAvPGJvYXJkPi4gIAorCisuIENyZWF0ZSBhIGZpbGUgY2FsbGVkIGd0NjQxMjBfZGVwLmggdW5kZXIgdGhhdCBkaXJlY3RvcnkuCisKKy4gTW9kaWZ5IGluY2x1ZGUvYXNtL2d0NjQxMjAvZ3Q2NDEyMC5oIGZpbGUgdG8gaW5jbHVkZSB0aGUgbmV3IGd0NjQxMjBfZGVwLmgKKyAgYmFzZWQgb24gY29uZmlnIG9wdGlvbnMuICBUaGUgYm9hcmQtZGVwIHNlY3Rpb24gaXMgYXQgdGhlIGVuZCBvZiAKKyAgaW5jbHVkZS9hc20vZ3Q2NDEyMC9ndDY0MTIwLmggZmlsZS4gVGhlcmUgeW91IGNhbiBmaW5kIGFsbCByZXF1aXJlZAorICBkZWZpbml0aW9ucyBpbmNsdWRlL2FzbS9ndDY0MTIwLzxib2FyZD4vZ3Q2NDEyMF9kZXAuaCBmaWxlIG11c3Qgc3VwcGx5LgorCisuIENyZWF0ZSBhIHN1YmRpcmVjdG9yeSBhcmNoL21pcHMvZ3Q2NDEyMC88Ym9hcmQ+IGRpcmVjdG9yeSB0byBob2xkCisgIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzLgorCisuIFRoZSBHVC02NDEyMCBjb21tb24gY29kZSBpcyBzdXBwbGllZCB1bmRlciBhcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24gZGlyZWN0b3J5LgorICBJdCBpbmNsdWRlczoKKwkxKSBhcmNoL21pcHMvZ3Q2NDEyMC9wY2kuYyAtCisJCWNvbW1vbiBQQ0kgcm91dGluZSwgaW5jbHVkZSB0aGUgdG9wLWxldmVsIHBjaWJpb3NfaW5pdCgpCisJMikgYXJjaC9taXBzL2d0NjQxMjAvaXJxLmMgLQorCQljb21tb24gSVJRIHJvdXRpbmUsIGluY2x1ZGUgdGhlIHRvcC1sZXZlbCBkb19JUlEoKSAKKwkgICBbVGhpcyBwYXJ0IHJlYWxseSBiZWxvbmdzIHRvIGFyY2gvbWlwcy9rZXJuZWwuIGpzdW5dCisgCTMpIGFyY2gvbWlwcy9ndDY0MTIwL2d0X2lycS5jIC0KKwkJY29tbW9uIElSUSByb3V0aW5lcyBmb3IgR1QtNjQxMjAgY2hpcC4gIEN1cnJlbnRseSBpdCBvbmx5IGhhbmRsZXMKKwkgCXRoZSB0aW1lciBpbnRlcnJ1cHQuCisKKy4gQm9hcmQtc3BlY2lmaWMgcm91dGluZXMgYXJlIHN1cHBsaWVkIHVuZGVyIGFyY2gvbWlwcy9ndDY0MTIwLzxib2FyZD4gZGlyLgorCTEpIGFyY2gvbWlwcy9ndDY0MTIwLzxib2FyZD4vcGNpLmMgLSBpdCBwcm92aWRlcyBidXMgZml4dXAgcm91dGluZQorCTIpIGFyY2gvbWlwcy9ndDY0MTIwLzxib2FyZD4vaXJxLmMgLSBpdCBwcm92aWRlcyBlbmFibGUvZGlzYWJsZSBpcnFzCisJCWFuZCBib2FyZCBpcnEgc2V0dXAgcm91dGluZSAoaXJxX3NldHVwKQorCTMpIGFyY2gvbWlwcy9ndDY0MTIwLzxib2FyZD4vaW50LWhhbmRsZXIuUyAtCisJCVRoZSBmaXJzdC1sZXZlbCBpbnRlcnJ1cHQgZGlzcGF0Y2hpbmcgcm91dGluZS4KKwk0KSBhIGJ1bmNoIG9mIG90aGVyICJub3JtYWwiIHN0dWZmIChzZXR1cCwgcHJvbSwgZGJnX2lvLCByZXNldCwgZXRjKQorCisuIEZvbGxvdyBvdGhlciAibm9ybWFsIiBwcm9jZWR1cmUgdG8gbW9kaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMsIGV0Yy4KKworCitUTy1ETyBMSVNUCistLS0tLS0tLS0tCisKKy4gRXhwYW5kIGFyY2gvbWlwcy9ndDY0MTIwL2d0X2lycS5jIHRvIGhhbmRsZSBhbGwgR1QtNjQxMjAgaW50ZXJydXB0cy4KKyAgV2UgcHJvYmFibHkgbmVlZCB0byBpbnRyb2R1Y2UgR1RfSVJRX0JBU0UgIGluIGJvYXJkLWRlcCBoZWFkZXIgZmlsZSwKKyAgd2hpY2ggaXMgdXNlZCB0aGUgc3RhcnRpbmcgaXJxX25yIGZvciBhbGwgR1QgaXJxcy4KKworICBBIGZ1bmN0aW9uLCBndDY0MTIwX2hhbmRsZV9pcnEoKSwgd2lsbCBiZSBhZGRlZCBzbyB0aGF0IHRoZSBmaXJzdC1sZXZlbAorICBpcnEgZGlzcGF0Y2hlciB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpdCBkZXRlY3RzIGFuIGludGVycnVwdAorICBmcm9tIEdULTY0MTIwLgorCisuIE1vcmUgc3VwcG9ydCBmb3IgR1QtNjQxMjAgUENJIGZlYXR1cmVzICgybmQgUENJIGJ1cywgcGVyaGFwcykKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9taXBzL3BjaS9wY2kuUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9taXBzL3BjaS9wY2kuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTdlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21pcHMvcGNpL3BjaS5SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorCitQZXRlIFBvcG92LCBwcG9wb3ZAcGFjYmVsbC5uZXQKKzA3LzExLzIwMDEKKworVGhpcyBSRUFETUUgYnJpZWZseSBleHBsYWlucyBob3cgdG8gdXNlIHRoZSBwY2kgYW5kIHBjaV9hdXRvCitjb2RlIGluIGFyY2gvbWlwcy9rZXJuZWwuICBUaGUgY29kZSB3YXMgcG9ydGVkIGZyb20gUG93ZXJQQyBhbmQKK21vZGlmaWVkIHNsaWdodGx5LiBJdCBoYXMgYmVlbiB0ZXN0ZWQgcHJldHR5IHdlbGwgb24gUFBDIG9uIHNvbWUKK3JhdGhlciBjb21wbGV4IHN5c3RlbXMgd2l0aCBtdWx0aXBsZSBicmlkZ2VzIGFuZCBkZXZpY2VzIGJlaGluZAorZWFjaCBicmlkZ2UuIEhvd2V2ZXIsIGF0IHRoZSB0aW1lIHRoaXMgUkVBRE1FIHdhcyB3cml0dGVuLCB0aGUKK21pcHMgcG9ydCB3YXMgdGVzdGVkIG9ubHkgb24gYm9hcmRzIHdpdGggYSBzaW5nbGUgcGNpIGJ1cyBhbmQKK25vIFAyUCBicmlkZ2VzLiAgSXQncyB2ZXJ5IHBvc3NpYmxlIHRoYXQgb24gYm9hcmRzIHdpdGggUDJQCiticmlkZ2VzIHNvbWUgbW9kaWZpY2F0aW9ucyBoYXZlIHRvIGJlIG1hZGUuIFRoZSBjb2RlIHdpbGwgCitldm9sdmUsIG5vIGRvdWJ0LCBidXQgY3VycmVudGx5IGV2ZXJ5IHNpbmdsZSBtaXBzIGJvYXJkCitpcyBkb2luZyBpdHMgb3duIHBjaWJpb3MgdGhpbmcgYW5kIGl0IGhhcyBiZWNvbWUgYSBiaWcKK21lc3MuICBUaGlzIGdlbmVyaWMgcGNpIGNvZGUgaXMgbWVhbnQgdG8gY2xlYW4gdXAgdGhlIG1pcHMKK3BjaSBtZXNzIGFuZCBtYWtlIGl0IGVhc2llciB0byBhZGQgcGNpIHN1cHBvcnQgdG8gbmV3IGJvYXJkcy4KKworaW5zaWRlIHRoZSBkZWZpbmUgZm9yIHlvdXIgYm9hcmQgaW4gYXJjaC9taXBzL2NvbmZpZy5pbi4gCitGb3IgZXhhbXBsZSwgdGhlIEdhbGlsZW8gRVY5NjEwMCBib2FyZCAgbG9va3MgbGlrZSB0aGlzOgorCitpZiBbICIkQ09ORklHX01JUFNfRVY5NjEwMCIgPSAieSIgXTsgdGhlbgorCWRlZmluZV9ib29sIENPTkZJR19QQ0kgeQorCWRlZmluZV9ib29sIENPTkZJR19NSVBTX0dUOTYxMDAgeQorCWRlZmluZV9ib29sIENPTkZJR19ORVdfUENJIHkKKwlkZWZpbmVfYm9vbCBDT05GSUdfU1dBUF9JT19TUEFDRSB5CitmaSAKKworCitOZXh0LCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGFyY2gvbWlwcy9rZXJuZWwvcGNpIGNvZGUsIHdoaWNoIGhhcyB0aGUKK3BjaWJpb3NfaW5pdCgpIGZ1bmN0aW9uLCBhZGQKKworZGVmaW5lX2Jvb2wgQ09ORklHX05FV19QQ0kgeQorIAoraW5zaWRlIHRoZSBkZWZpbmUgZm9yIHlvdXIgYm9hcmQuIEFnYWluLCB0aGUgRVY5NjEwMCBleGFtcGxlIGFib3ZlCitzaG93IE5FV19QQ0kgdHVybmVkIG9uLgorCisKK05vdyB5b3UgbmVlZCB0byBhZGQgeW91ciBmaWxlcyB0byBob29rIGluIHlvdXIgcGNpIGNvbmZpZ3VyYXRpb24KK2N5Y2xlcy4gIFVzdWFsbHkgeW91J2xsIG5lZWQgb25seSBhIGNvdXBsZSBvZiBmaWxlcyBuYW1lZCBzb21ldGhpbmcKK2xpa2UgcGNpX2ZpeHVwcy5jIGFuZCBwY2lfb3BzLmMuICBZb3UgY2FuIGNvcHkgdGhlIHRlbXBsYXRlcworcHJvdmlkZWQgYW5kIGZpbGwgaW4gdGhlIGNvZGUuCisKK1RoZSBmaWxlIHBjaV9vcHMuYyBzaG91bGQgY29udGFpbiB0aGUgcGNpIGNvbmZpZ3VyYXRpb24gY3ljbGVzIHJvdXRpbmVzLgorSXQgYWxzbyBoYXMgdGhlIG1pcHNfcGNpX2NoYW5uZWxzW10gYXJyYXkgd2hpY2ggY29udGFpbnMgdGhlIGRlc2NyaXB0b3JzCitvZiBlYWNoIHBjaSBjb250cm9sbGVyLgorCitUaGUgZmlsZSBwY2lfZml4dXBzLmMgY29udGFpbnMgYSBmZXcgcm91dGluZXMgdG8gZG8gaW50ZXJydXB0IGZpeHVwcywKK3Jlc291cmNlcyBmaXh1cHMsIGFuZCwgaWYgbmVlZGVkLCBwY2kgYmlvcyBmaXh1cHMuCisKK1VzdWFsbHkgeW91J2xsIHB1dCB5b3VyIHBjaV9maXh1cHMuYyBmaWxlIGluIHlvdXIgYm9hcmQgc3BlY2lmaWMgZGlyZWN0b3J5LCAKK3NpbmNlIHRoZSBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIGFyZSBib2FyZCBzcGVjaWZpYy4gIFRoZSBmdW5jdGlvbnMgaW4KK3BjaV9vcHMuYywgb24gdGhlIG90aGVyIGhhbmQsIGFyZSB1c3VhbGx5IHBjaSBjb250cm9sbGVyIHNwZWNpZmljIHNvIHRoYXQKK2ZpbGUgY291bGQgYmUgc2hhcmVkIGFtb25nIGEgZmV3IGRpZmZlcmVudCBib2FyZHMgdXNpbmcgdGhlIHNhbWUKK3BjaSBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9taXBzL3RpbWUuUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9taXBzL3RpbWUuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYmMwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUKQEAgLTAsMCArMSwxOTggQEAKK1JFQURNRSBmb3IgTUlQUyB0aW1lIHNlcnZpY2VzCisKK0p1biBTdW4KK2pzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKKworCitBQk9VVAorLS0tLS0KK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIG5ldyBhcmNoL21pcHMva2VybmVsL3RpbWUuYywgcmVsYXRlZCBmaWxlcyBhbmQgdGhlIAorc2VydmljZXMgdGhleSBwcm92aWRlLiAKKworSWYgeW91IGFyZSBzaG9ydCBpbiBwYXRpZW5jZSBhbmQganVzdCB3YW50IHRvIGtub3cgaG93IHRvIHVzZSB0aW1lLmMgZm9yIGEgCituZXcgYm9hcmQgb3IgY29udmVydCBhbiBleGlzdGluZyBib2FyZCwgZ28gdG8gdGhlIGxhc3Qgc2VjdGlvbi4KKworCitGSUxFUywgQ09NUEFUQUJJTElUWSBBTkQgQ09ORklHUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvbGQgYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgaXMgcmVuYW1lZCB0byBvbGQtdGltZS5jLgorCitBIG5ldyB0aW1lLmMgaXMgcHV0IHRoZXJlLCB0b2dldGhlciB3aXRoIGluY2x1ZGUvYXNtLW1pcHMvdGltZS5oLgorCitUd28gY29uZmlncyB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQsIENPTkZJR19PTERfVElNRV9DIGFuZCBDT05GSUdfTkVXX1RJTUVfQy4KK1NvIHdlIGFsbG93IGJvYXJkcyB1c2luZyAKKworCTEpIG9sZCB0aW1lLmMgKENPTkZJR19PTERfVElNRV9DKQorCTIpIG5ldyB0aW1lLmMgKENPTkZJR19ORVdfVElNRV9DKQorCTMpIG5laXRoZXIgKHRoZWlyIG93biBwcml2YXRlIHRpbWUuYykKKworSG93ZXZlciwgaXQgaXMgZXhwZWN0ZWQgZXZlcnkgYm9hcmQgd2lsbCBtb3ZlIHRvIHRoZSBuZXcgdGltZS5jIGluIHRoZSBuZWFyCitmdXR1cmUuCisKKworV0hBVCBUSEUgTkVXIENPREUgUFJPVklERVM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1RoZSBuZXcgdGltZSBjb2RlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzZXJ2aWNlczoKKworICBhKSBJbXBsZW1lbnRzIGZ1bmN0aW9ucyByZXF1aXJlZCBieSBMaW51eCBjb21tb24gY29kZToKKwl0aW1lX2luaXQKKwlkb19nZXR0aW1lb2ZkYXkKKwlkb19zZXR0aW1lb2ZkYXkKKworICBiKSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZiBSVEMgYW5kIG51bGwgUlRDIGltcGxlbWVudGF0aW9uIGFzIGRlZmF1bHQuCisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCpydGNfZ2V0X3RpbWUpKHZvaWQpOworCWV4dGVybiBpbnQgKCpydGNfc2V0X3RpbWUpKHVuc2lnbmVkIGxvbmcpOworCisgIGMpIGEgc2V0IG9mIGdldHRpbWVvZmZzZXQgZnVuY3Rpb25zIGZvciBkaWZmZXJlbnQgQ1BVcyBhbmQgZGlmZmVyZW50CisgICAgIG5lZWRzLgorCisgIGQpIGhpZ2gtbGV2ZWwgYW5kIGxvdy1sZXZlbCB0aW1lciBpbnRlcnJ1cHQgcm91dGluZXMgd2hlcmUgdGhlIHRpbWVyIAorICAgICBpbnRlcnJ1cHQgc291cmNlICBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgQ1BVIHRpbWVyLiAgVGhlIGhpZ2gtbGV2ZWwgCisgICAgIHJvdXRpbmUgaXMgZGlzcGF0Y2hlZCB0aHJvdWdoIGRvX0lSUSgpIHdoaWxlIHRoZSBsb3ctbGV2ZWwgaXMgCisgICAgIGRpc3BhdGNoZWQgaW4gYXNzZW1hYmx5IGNvZGUgKHVzdWFsbHkgaW50LWhhbmRsZXIuUykKKworCitXSEFUIFRIRSBORVcgQ09ERSBSRVFVSVJFUz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgdGhlIG5ldyBjb2RlIHRvIHdvcmsgcHJvcGVybHksIGVhY2ggYm9hcmQgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gc3VwcGx5Cit0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBvciB2YWx1ZXM6CisKKyAgYSkgYm9hcmRfdGltZV9pbml0IC0gYSBmdW5jdGlvbiBwb2ludGVyLiAgSW52b2tlZCBhdCB0aGUgYmVnaW5uaWcgb2YKKyAgICAgdGltZV9pbml0KCkuICBJdCBpcyBvcHRpb25hbC4KKwkxLiAob3B0aW9uYWwpIHNldCB1cCBSVEMgcm91dGluZXMKKwkyLiAob3B0aW9uYWwpIGNhbGlicmF0ZSBhbmQgc2V0IHRoZSBtaXBzX2NvdW50ZXJfZnJlcXVlbmN5CisKKyAgYikgYm9hcmRfdGltZXJfc2V0dXAgLSBhIGZ1bmN0aW9uIHBvaW50ZXIuICBJbnZva2VkIGF0IHRoZSBlbmQgb2YgdGltZV9pbml0KCkKKwkxLiAob3B0aW9uYWwpIG92ZXItcmlkZSBhbnkgZGVjaXNpb25zIG1hZGUgaW4gdGltZV9pbml0KCkKKwkyLiBzZXQgdXAgdGhlIGlycWFjdGlvbiBmb3IgdGltZXIgaW50ZXJydXB0LgorCTMuIGVuYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0CisKKyAgYykgKG9wdGlvbmFsKSBib2FyZC1zcGVjaWZpYyBSVEMgcm91dGluZXMuCisKKyAgZCkgKG9wdGlvbmFsKSBtaXBzX2NvdW50ZXJfZnJlcXVlbmN5IC0gSXQgbXVzdCBiZSBkZWZpbmllZCBpZiB0aGUgYm9hcmQKKyAgICAgaXMgdXNpbmcgQ1BVIGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdCBvciBpdCBpcyB1c2luZyBmaXhlZCByYXRlCisgICAgIGdldHRpbWVvZmZzZXQoKS4KKworCitQT1JUSU5HIEdVSURFCistLS0tLS0tLS0tLS0tCisKK1N0ZXAgMTogZGVjaWRlIGhvdyB5b3UgbGlrZSB0byBpbXBsZW1lbnQgdGhlIHRpbWUgc2VydmljZXMuCisKKyAgYSkgZG9lcyB0aGlzIGJvYXJkIGhhdmUgYSBSVEM/ICBJZiB5ZXMsIGltcGxlbWVudCB0aGUgdHdvIFJUQyBmdW5jcy4KKworICBiKSBkb2VzIHRoZSBDUFUgaGF2ZSBjb3VudGVyL2NvbXBhcmUgcmVnaXN0ZXJzPyAKKworICAgICBJZiB0aGUgYW5zd2VyIGlzIG5vLCB5b3UgbmVlZCBhIHRpbWVyIHRvIHByb3ZpZGUgdGhlIHRpbWVyIGludGVycnVwdAorICAgICBhdCAxMDAgSFogc3BlZWQuCisKKyAgICAgWW91IGNhbm5vdCB1c2UgdGhlIGZhc3QgZ2V0dGltZW9mZnNldCBmdW5jdGlvbnMsIGkuZS4sCisKKwl1bnNpZ25lZCBsb25nIGZpeGVkX3JhdGVfZ2V0dGltZW9mZnNldCh2b2lkKTsKKwl1bnNpZ25lZCBsb25nIGNhbGlicmF0ZV9kaXYzMl9nZXR0aW1lb2Zmc2V0KHZvaWQpOworCXVuc2lnbmVkIGxvbmcgY2FsaWJyYXRlX2RpdjY0X2dldHRpbWVvZmZzZXQodm9pZCk7CisKKyAgICBZb3UgY2FuIHVzZSBudWxsX2dldHRpbWVvZmZzZXQoKSB3aWxsIGdpdmVzIHRoZSBzYW1lIHRpbWUgcmVzb2x1dGlvbiBhcworICAgIGppZmZ5LiAgT3IgeW91IGNhbiBpbXBsZW1lbnQgeW91ciBvd24gZ2V0dGltZW9mZnNldCAocHJvYmFibHkgYmFzZWQgb24gCisgICAgc29tZSBhZCBob2MgaGFyZHdhcmUgb24geW91ciBtYWNoaW5lLikKKworICBjKSBUaGUgZm9sbG93aW5nIHN1YiBzdGVwcyBhc3N1bWUgeW91ciBDUFUgaGFzIGNvdW50ZXIgcmVnaXN0ZXIuCisgICAgIERvIHlvdSBwbGFuIHRvIHVzZSB0aGUgQ1BVIGNvdW50ZXIgcmVnaXN0ZXIgYXMgdGhlIHRpbWVyIGludGVycnVwdAorICAgICBvciB1c2UgYW4gZXhudGVybmFsIHRpbWVyPworCisgICAgIEluIG9yZGVyIHRvIHVzZSBDUFUgY291bnRlciByZWdpc3RlciBhcyB0aGUgdGltZXIgaW50ZXJydXB0IHNvdXJjZSwgeW91CisgICAgIG11c3Qga25vdyB0aGUgY291bnRlciBzcGVlZCAobWlwc19jb3VudGVyX2ZyZXF1ZW5jeSkuICBJdCBpcyB1c3VhbGx5IHRoZQorICAgICBzYW1lIGFzIHRoZSBDUFUgc3BlZWQgb3IgYW4gaW50ZWdyYWwgZGl2aXNvciBvZiBpdC4KKworICBkKSBkZWNpZGUgb24gd2hldGhlciB5b3Ugd2FudCB0byB1c2UgaGlnaC1sZXZlbCBvciBsb3ctbGV2ZWwgdGltZXIKKyAgICAgaW50ZXJydXB0IHJvdXRpbmVzLiAgVGhlIGxvdy1sZXZlbCBvbmUgaXMgcHJlc3VtYWJseSBmYXN0ZXIsIGJ1dCBzaG91bGQKKyAgICAgbm90IG1ha2UgdG9vIG1jdWggZGlmZmVyZW5jZS4KKworCitTdGVwIDI6ICB0aGUgbWFjaGluZSBzZXR1cCgpIGZ1bmN0aW9uCisKKyAgSWYgeW91IHN1cHBseSBib2FyZF90aW1lX2luaXQoKSwgc2V0IHRoZSBmdW5jdGlvbiBwb29pbnRlci4KKworICBTZXQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYm9hcmRfdGltZXJfc2V0dXAoKSAobWFuZGF0b3J5KQorCisKK1N0ZXAgMzogaW1wbGVtZW50IHJ0YyByb3V0aW5lcywgYm9hcmRfdGltZV9pbml0KCkgYW5kIGJvYXJkX3RpbWVyX3NldHVwKCkKKyAgaWYgbmVlZGVkLgorCisgIGJvYXJkX3RpbWVfaW5pdCgpIC0gCisgIAlhKSAob3B0aW9uYWwpIHNldCB1cCBSVEMgcm91dGluZXMsIAorICAgICAgICBiKSAob3B0aW9uYWwpIGNhbGlicmF0ZSBhbmQgc2V0IHRoZSBtaXBzX2NvdW50ZXJfZnJlcXVlbmN5CisgCSAgICAob25seSBuZWVkZWQgaWYgeW91IGludGVuZGVkIHRvIHVzZSBmaXhlZF9yYXRlX2dldHRpbWVvZmZzZXQKKyAJICAgICBvciB1c2UgY3B1IGNvdW50ZXIgYXMgdGltZXIgaW50ZXJydXB0IHNvdXJjZSkKKworICBib2FyZF90aW1lcl9zZXR1cCgpIC0gCisgCWEpIChvcHRpb25hbCkgb3Zlci13cml0ZSBhbnkgY2hvaWNlcyBtYWRlIGFib3ZlIGJ5IHRpbWVfaW5pdCgpLgorIAliKSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgc2hvdWxkIHNldHVwIHRoZSB0aW1lciBpcnFhY3Rpb24uCisgCWMpIGVuYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0CisKKworICBJZiB0aGUgUlRDIGNoaXAgaXMgYSBjb21tb24gY2hpcCwgSSBzdWdnZXN0IHRoZSByb3V0aW5lcyBhcmUgcHV0IHVuZGVyCisgIGFyY2gvbWlwcy9saWJzLiAgRm9yIGV4YW1wbGUsIGZvciBEUzEzODYgY2hpcCwgb25lIHdvdWxkIGNyZWF0ZQorICBydGMtZHMxMzg2LmMgdW5kZXIgYXJjaC9taXBzL2xpYiBkaXJlY3RvcnkuICBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvCisgIHRoZSBhcmNoL21pcHMvbGliL01ha2VmaWxlOgorCisJb2JqLSQoQ09ORklHX0REQjU0NzYpICs9IHJ0Yy1kczEzODYubworCitTdGVwIDQ6IGlmIHlvdSBhcmUgdXNpbmcgbG93LWxldmVsIHRpbWVyIGludGVycnVwdCwgY2hhbmdlIHlvdXIgaW50ZXJydXB0CisgIGRpc3BhdGhjaW5nIGNvZGUgdG8gY2hlY2sgZm9yIHRpbWVyIGludGVycnVwdCBhbmQganVtcCB0byAKKyAgbGxfdGltZXJfaW50ZXJydXB0KCkgZGlyZWN0bHkgIGlmIG9uZSBpcyBkZXRlY3RlZC4KKworU3RlcCA1OiBNb2RpZnkgYXJjaC9taXBzL2NvbmZpZy5pbiBhbmQgYWRkIENPTkZJR19ORVdfVElNRV9DIHRvIHlvdXIgbWFjaGluZS4KKyAgTW9kaWZ5IHRoZSBhcHByb3ByaWF0ZSBkZWZjb25maWcgaWYgYXBwbGljYWJsZS4KKworRmluYWwgbm90ZXM6IAorCitGb3Igc29tZSB0cmlja3kgY2FzZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgeW91ciBvd24gd3JhcHBlciBmdW5jdGlvbnMgCitmb3Igc29tZSBvZiB0aGUgZnVuY3Rpb25zIGluIHRpbWUuYy4gIAorCitGb3IgZXhhbXBsZSwgeW91IG1heSBkZWZpbmUgeW91ciBvd24gdGltZXIgaW50ZXJydXB0IHJvdXRpbmUsIHdoaWNoIGRvZXMKK3NvbWUgb2YgaXRzIG93biBwcm9jZXNzaW5nIGFuZCB0aGVuIGNhbGxzIHRpbWVyX2ludGVycnVwdCgpLgorCitZb3UgY2FuIGFsc28gb3Zlci1yaWRlIGFueSBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIChnZXR0aW1lb2Zmc2V0LAorUlRDIHJvdXRpbmVzIGFuZC9vciB0aW1lciBpbnRlcnJ1cHQgcm91dGluZSkuCisKKworUE9SVElORyBOT1RFUyBGT1IgU01QCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIGEgU01QIGJveCwgdGhpbmdzIGFyZSBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkLgorCitUaGUgdGltZSBzZXJ2aWNlIHJ1bm5pbmcgZXZlcnkgamlmZnkgaXMgbG9naWNhbGx5IGRpdmlkZWQgaW50byB0d28gcGFydHM6CisKKyAgMSkgdGhlIG9uZSBmb3IgdGhlIHdob2xlIHN5c3RlbSAgKGRlZmluZWQgaW4gdGltZXJfaW50ZXJydXB0KCkpCisgIDIpIHRoZSBvbmUgdGhhdCBzaG91bGQgcnVuIGZvciBlYWNoIENQVSAoZGVmaW5lZCBpbiBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKSkKKworWW91IG5lZWQgdG8gZGVjaWRlIG9uIHlvdXIgdGltZXIgaW50ZXJydXB0IHNvdXJjZXMuCisKKyAgY2FzZSAxKSAtIHdob2xlIHN5c3RlbSBoYXMgb25seSBvbmUgdGltZXIgaW50ZXJydXB0IGRlbGl2ZXJlZCB0byBvbmUgQ1BVCisKKwlJbiB0aGlzIGNhc2UsIHlvdSBzZXQgdXAgdGltZXIgaW50ZXJydXB0IGFzIGluIFVQIHN5c3RlbXMuICBJbiBhZGR0aW9uLAorCXlvdSBuZWVkIHRvIHNldCBlbXVsYXRlX2xvY2FsX3RpbWVyX2ludGVycnVwdCB0byAxIHNvIHRoYXQgb3RoZXIKKwlDUFVzIGdldCB0byBjYWxsIGxvY2FsX3RpbWVyX2ludGVycnVwdCgpLgorCisJVEhJUyBJUyBDVVJSRU5UTFkgTk9UIElNUExFTU5FVEVELiAgSG93ZXZlciwgaXQgaXMgcmF0aGVyIGVhc3kgdG8gd3JpdGUKKwlvbmUgc2hvdWxkIHN1Y2ggYSBuZWVkIGFyaXNlLiAgWW91IHNpbXBseSBtYWtlIGEgSVBJIGNhbGwuCisKKyAgY2FzZSAyKSAtIGVhY2ggQ1BVIGhhcyBhIHNlcGFyYXRlIHRpbWVyIGludGVycnVwdAorCisJSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBzZXQgdXAgSVJRIHN1Y2ggdGhhdCBlYWNoIG9mIHRoZW0gd2lsbAorCWNhbGwgbG9jYWxfdGltZXJfaW50ZXJydXB0KCkuICBJbiBhZGRpdGlvbiwgeW91IG5lZWQgdG8gYXJyYW5nZQorCW9uZSBhbmQgb25seSBvbmUgb2YgdGhlbSB0byBjYWxsIHRpbWVyX2ludGVycnVwdCgpLgorCisJWW91IGNhbiBhbHNvIGRvIHRoZSBsb3ctbGV2ZWwgdmVyc2lvbiBvZiB0aG9zZSBpbnRlcnJ1cHQgcm91dGluZXMsCisJZm9sbG93aW5nIHNpbWlsYXIgZGlzcGF0Y2hpbmcgcm91dGVzIGRlc2NyaWJlZCBhYm92ZS4KKworTm90ZSBhYm91dCBkb19nZXR0aW1lb2Zmc2V0KCk6CisKKyAgSXQgaXMgdmVyeSBsaWtlbHkgdGhlIENQVSBjb3VudGVyIHJlZ2lzdGVycyBhcmUgbm90IHN5bmMnZWQgdXAgaW4gYSBTTVAgYm94LgorICBUaGVyZWZvcmUgeW91IGNhbm5vdCByZWFsbHkgdXNlIHRoZSBtYW55IG9mIHRoZSBleGlzdGluZyByb3V0aW5lcyB0aGF0CisgIGFyZSBiYXNlZCBvbiBDUFUgY291bnRlci4gIFlvdSBzaG91bGQgd2lydGUgeW91ciBvd24gZ2V0dGltZW9mZnNldCByb3VpbnRlCisgIGlmIHlvdSB3YW50IGludHJhLWppZmZ5IHJlc29sdXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21vbm8udHh0IGIvRG9jdW1lbnRhdGlvbi9tb25vLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzM5YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tb25vLnR4dApAQCAtMCwwICsxLDY2IEBACisgICAgICAgICAgICAgICBNb25vKHRtKSBCaW5hcnkgS2VybmVsIFN1cHBvcnQgZm9yIExpbnV4CisgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBjb25maWd1cmUgTGludXggdG8gYXV0b21hdGljYWxseSBleGVjdXRlIE1vbm8tYmFzZWQgLk5FVCBiaW5hcmllcworKGluIHRoZSBmb3JtIG9mIC5leGUgZmlsZXMpIHdpdGhvdXQgdGhlIG5lZWQgdG8gdXNlIHRoZSBtb25vIENMUgord3JhcHBlciwgeW91IGNhbiB1c2UgdGhlIEJJTkZNVF9NSVNDIGtlcm5lbCBzdXBwb3J0LgorCitUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGV4ZWN1dGUgTW9uby1iYXNlZCAuTkVUIGJpbmFyaWVzIGp1c3QgbGlrZSBhbnkKK290aGVyIHByb2dyYW0gYWZ0ZXIgeW91IGhhdmUgZG9uZSB0aGUgZm9sbG93aW5nOgorCisxKSBZb3UgTVVTVCBGSVJTVCBpbnN0YWxsIHRoZSBNb25vIENMUiBzdXBwb3J0LCBlaXRoZXIgYnkgZG93bmxvYWRpbmcKKyAgIGEgYmluYXJ5IHBhY2thZ2UsIGEgc291cmNlIHRhcmJhbGwgb3IgYnkgaW5zdGFsbGluZyBmcm9tIENWUy4gQmluYXJ5CisgICBwYWNrYWdlcyBmb3Igc2V2ZXJhbCBkaXN0cmlidXRpb25zIGNhbiBiZSBmb3VuZCBhdDoKKworCWh0dHA6Ly9nby1tb25vLmNvbS9kb3dubG9hZC5odG1sCisKKyAgIEluc3RydWN0aW9ucyBmb3IgY29tcGlsaW5nIE1vbm8gY2FuIGJlIGZvdW5kIGF0OgorCisJaHR0cDovL3d3dy5nby1tb25vLmNvbS9jb21waWxpbmcuaHRtbAorCisgICBPbmNlIHRoZSBNb25vIENMUiBzdXBwb3J0IGhhcyBiZWVuIGluc3RhbGxlZCwganVzdCBjaGVjayB0aGF0CisgICAvdXNyL2Jpbi9tb25vICh3aGljaCBjb3VsZCBiZSBsb2NhdGVkIGVsc2V3aGVyZSwgZm9yIGV4YW1wbGUKKyAgIC91c3IvbG9jYWwvYmluL21vbm8pIGlzIHdvcmtpbmcuCisKKzIpIFlvdSBoYXZlIHRvIGNvbXBpbGUgQklORk1UX01JU0MgZWl0aGVyIGFzIGEgbW9kdWxlIG9yIGludG8KKyAgIHRoZSBrZXJuZWwgKENPTkZJR19CSU5GTVRfTUlTQykgYW5kIHNldCBpdCB1cCBwcm9wZXJseS4KKyAgIElmIHlvdSBjaG9vc2UgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgeW91IHdpbGwgaGF2ZQorICAgdG8gaW5zZXJ0IGl0IG1hbnVhbGx5IHdpdGggbW9kcHJvYmUvaW5zbW9kLCBhcyBrbW9kCisgICBjYW4gbm90IGJlIGVhc2lseSBzdXBwb3J0ZWQgd2l0aCBiaW5mbXRfbWlzYy4gCisgICBSZWFkIHRoZSBmaWxlICdiaW5mbXRfbWlzYy50eHQnIGluIHRoaXMgZGlyZWN0b3J5IHRvIGtub3cKKyAgIG1vcmUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworMykgQWRkIHRoZSBmb2xsb3dpbmcgZW5yaWVzIHRvIC9ldGMvcmMubG9jYWwgb3Igc2ltaWxhciBzY3JpcHQKKyAgIHRvIGJlIHJ1biBhdCBzeXN0ZW0gc3RhcnR1cDoKKworIyBJbnNlcnQgQklORk1UX01JU0MgbW9kdWxlIGludG8gdGhlIGtlcm5lbAoraWYgWyAhIC1lIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlciBdOyB0aGVuCisgICAgICAgIC9zYmluL21vZHByb2JlIGJpbmZtdF9taXNjCisJIyBTb21lIGRpc3RyaWJ1dGlvbnMsIGxpa2UgRmVkb3JhIENvcmUsIHBlcmZvcm0KKwkjIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlCisJIyBiaW5mbXRfbWlzYyBtb2R1bGUgaXMgbG9hZGVkIGludG8gdGhlIGtlcm5lbC4KKwkjIFRodXMsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGZvbGxvd2luZyBsaW5lCisJIyBpcyBub3QgbmVlZGVkIGF0IGFsbC4gTG9vayBhdCAvZXRjL21vZHByb2JlLmNvbmYKKwkjIHRvIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyBhcHBsaWNhYmxlIG9yIG5vdC4KKyAgICAgICAgbW91bnQgLXQgYmluZm10X21pc2Mgbm9uZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MKK2ZpCisKKyMgUmVnaXN0ZXIgc3VwcG9ydCBmb3IgLk5FVCBDTFIgYmluYXJpZXMKK2lmIFsgLWUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyIF07IHRoZW4KKwkjIFJlcGxhY2UgL3Vzci9iaW4vbW9ubyB3aXRoIHRoZSBjb3JyZWN0IHBhdGhuYW1lIHRvCisJIyB0aGUgTW9ubyBDTFIgcnVudGltZSAodXN1YWxseSAvdXNyL2xvY2FsL2Jpbi9tb25vCisJIyB3aGVuIGNvbXBpbGluZyBmcm9tIHNvdXJjZXMgb3IgQ1ZTKS4KKyAgICAgICAgZWNobyAnOkNMUjpNOjpNWjo6L3Vzci9iaW4vbW9ubzonID4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyCitlbHNlCisgICAgICAgIGVjaG8gIk5vIGJpbmZtdF9taXNjIHN1cHBvcnQiCisgICAgICAgIGV4aXQgMQorZmkKKworNCkgQ2hlY2sgdGhhdCAuZXhlIGJpbmFyaWVzIGNhbiBiZSByYW4gd2l0aG91dCB0aGUgbmVlZCBvZiBhCisgICB3cmFwcGVyIHNjcmlwdCwgc2ltcGx5IGJ5IGxhdW5jaGluZyB0aGUgLmV4ZSBmaWxlIGRpcmVjdGx5CisgICBmcm9tIGEgY29tbWFuZCBwcm9tcHQsIGZvciBleGFtcGxlOgorCisJL3Vzci9iaW4veHNkLmV4ZQorCisgICBOT1RFOiBJZiB0aGlzIGZhaWxzIHdpdGggYSBwZXJtaXNzaW9uIGRlbmllZCBlcnJvciwgY2hlY2sKKyAgICAgICAgIHRoYXQgdGhlIC5leGUgZmlsZSBoYXMgZXhlY3V0ZSBwZXJtaXNzaW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW94YS1zbWFydGlvIGIvRG9jdW1lbnRhdGlvbi9tb3hhLXNtYXJ0aW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNGVjYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbW94YS1zbWFydGlvCkBAIC0wLDAgKzEsNDExIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJTU9YQSBTbWFydGlvIEZhbWlseSBEZXZpY2UgRHJpdmVyIFZlciAxLjEgSW5zdGFsbGF0aW9uIEd1aWRlCisJCSAgICBmb3IgTGludXggS2VybmVsIDIuMi54IGFuZCAyLjAuM3gKKwkgICAgICAgQ29weXJpZ2h0IChDKSAxOTk5LCBNb3hhIFRlY2hub2xvZ2llcyBDbywgTHRkLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvbnRlbnQKKworMS4gSW50cm9kdWN0aW9uCisyLiBTeXN0ZW0gUmVxdWlyZW1lbnQKKzMuIEluc3RhbGxhdGlvbgorNC4gVXRpbGl0aWVzCis1LiBTZXRzZXJpYWwKKzYuIFRyb3VibGVzaG9vdGluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gSW50cm9kdWN0aW9uCisKKyAgIFRoZSBTbWFydGlvIGZhbWlseSBMaW51eCBkcml2ZXIsIFZlci4gMS4xLCBzdXBwb3J0cyBmb2xsb3dpbmcgbXVsdGlwb3J0CisgICBib2FyZHMuCisKKyAgICAtQzEwNFAvSC9IUywgQzEwNEgvUENJLCBDMTA0SFMvUENJLCBDSS0xMDRKIDQgcG9ydCBtdWx0aXBvcnQgYm9hcmQuCisgICAgLUMxNjhQL0gvSFMsIEMxNjhIL1BDSSA4IHBvcnQgbXVsdGlwb3J0IGJvYXJkLgorCisgICBUaGlzIGRyaXZlciBoYXMgYmVlbiBtb2RpZmllZCBhIGxpdHRsZSBhbmQgY2xlYW5lZCB1cCBmcm9tIHRoZSBNb3hhCisgICBjb250cmlidXRlZCBkcml2ZXIgY29kZSBhbmQgbWVyZ2VkIGludG8gTGludXggMi4yLjE0cHJlLiBJbiBwYXJ0aWN1bGFyCisgICBvZmZpY2lhbCBtYWpvci9taW5vciBudW1iZXJzIGhhdmUgYmVlbiBhc3NpZ25lZCB3aGljaCBhcmUgZGlmZmVyZW50IHRvCisgICB0aG9zZSB0aGUgb3JpZ2luYWwgTW94YSBzdXBwbGllZCBkcml2ZXIgdXNlZC4KKworICAgVGhpcyBkcml2ZXIgYW5kIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgaGF2ZSBiZWVuIGRldmVsb3BlZCB1cG9uIExpbnV4IEtlcm5lbAorICAgMi4yLjUgYW5kIGJhY2t3YXJkIGNvbXBhdGlibGUgdG8gMi4wLjN4LiBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbCB4ODYgYW5kCisgICBBbHBoYSBoYXJkd2FyZSBwbGF0Zm9ybS4gSW4gb3JkZXIgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSwgdGhpcyB2ZXJzaW9uCisgICBoYXMgYWxzbyBiZWVuIHByb3Blcmx5IHRlc3RlZCB3aXRoIFJlZEhhdCwgT3BlbkxpbnV4LCBUdXJib0xpbnV4IGFuZAorICAgUy51LlMuRSBMaW51eC4gSG93ZXZlciwgaWYgY29tcGF0aWJpbGl0eSBwcm9ibGVtIG9jY3VycywgcGxlYXNlIGNvbnRhY3QKKyAgIE1veGEgYXQgc3VwcG9ydEBtb3hhLmNvbS50dy4KKworICAgSW4gYWRkaXRpb24gdG8gZGV2aWNlIGRyaXZlciwgdXNlZnVsIHV0aWxpdGllcyBhcmUgYWxzbyBwcm92aWRlZCBpbiB0aGlzCisgICB2ZXJzaW9uLiBUaGV5IGFyZQorICAgIC0gbXNkaWFnICAgICBEaWFnbm9zdGljIHByb2dyYW0gZm9yIGRldGVjdGluZyBpbnN0YWxsZWQgTW94YSBTbWFydGlvIGJvYXJkcy4KKyAgICAtIG1zbW9uICAgICAgTW9uaXRvciBwcm9ncmFtIHRvIG9ic2VydmUgZGF0YSBjb3VudCBhbmQgbGluZSBzdGF0dXMgc2lnbmFscy4KKyAgICAtIG1zdGVybSAgICAgQSBzaW1wbGUgdGVybWluYWwgcHJvZ3JhbSB3aGljaCBpcyB1c2VmdWwgaW4gdGVzdGluZyBzZXJpYWwKKwkgICAgICAgICBwb3J0cy4KKyAgICAtIGlvLWlycS5leGUgQ29uZmlndXJhdGlvbiBwcm9ncmFtIHRvIHNldHVwIElTQSBib2FyZHMuIFBsZWFzZSBub3RlIHRoYXQKKyAgICAgICAgICAgICAgICAgdGhpcyBwcm9ncmFtIGNhbiBvbmx5IGJlIGV4ZWN1dGVkIHVuZGVyIERPUy4KKworICAgQWxsIHRoZSBkcml2ZXJzIGFuZCB1dGlsaXRpZXMgYXJlIHB1Ymxpc2hlZCBpbiBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbiB0aGlzIHZlcnNpb24uIFBsZWFzZSByZWZlciB0byBHTlUgR2VuZXJhbAorICAgUHVibGljIExpY2Vuc2UgYW5ub3VuY2VtZW50IGluIGVhY2ggc291cmNlIGNvZGUgZmlsZSBmb3IgbW9yZSBkZXRhaWwuCisKKyAgIEluIE1veGEncyBmdHAgc2l0ZXMsIHlvdSBtYXkgYWx3YXlzIGZpbmQgbGF0ZXN0IGRyaXZlciBhdAorICAgZnRwOi8vZnRwLm1veGEuY29tICBvciBmdHA6Ly9mdHAubW94YS5jb20udHcuCisKKyAgIFRoaXMgdmVyc2lvbiBvZiBkcml2ZXIgY2FuIGJlIGluc3RhbGxlZCBhcyBMb2FkYWJsZSBNb2R1bGUgKE1vZHVsZSBkcml2ZXIpCisgICBvciBidWlsdC1pbiBpbnRvIGtlcm5lbCAoU3RhdGljIGRyaXZlcikuIFlvdSBtYXkgcmVmZXIgdG8gZm9sbG93aW5nCisgICBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGZvciBzdWl0YWJsZSBvbmUuIEJlZm9yZSB5b3UgaW5zdGFsbCB0aGUgZHJpdmVyLAorICAgcGxlYXNlIHJlZmVyIHRvIGhhcmR3YXJlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgaW4gdGhlIFVzZXIncyBNYW51YWwuCisKKyAgIFdlIGFzc3VtZSB0aGUgdXNlciBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCBmb2xsb3dpbmcgZG9jdW1lbnRzLgorICAgLSBTZXJpYWwtSE9XVE8KKyAgIC0gS2VybmVsLUhPV1RPCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyLiBTeXN0ZW0gUmVxdWlyZW1lbnQKKyAgIC0gSGFyZHdhcmUgcGxhdGZvcm06IEludGVsIHg4NiBvciBBbHBoYSBtYWNoaW5lCisgICAtIEtlcm5lbCB2ZXJzaW9uOiAyLjAuM3ggb3IgMi4yLngKKyAgIC0gZ2NjIHZlcnNpb24gMi43MiBvciBsYXRlcgorICAgLSBNYXhpbXVtIDQgYm9hcmRzIGNhbiBiZSBpbnN0YWxsZWQgaW4gY29tYmluYXRpb24KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzMuIEluc3RhbGxhdGlvbgorCisgICAzLjEgSGFyZHdhcmUgaW5zdGFsbGF0aW9uCisKKyAgICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGJ1c2VzLCBJU0EgYW5kIFBDSSwgZm9yIFNtYXJ0aW8gZmFtaWx5IG11bHRpcG9ydAorICAgICAgIGJvYXJkLgorCisgICAgICAgSVNBIGJvYXJkCisgICAgICAgLS0tLS0tLS0tCisgICAgICAgWW91J2xsIGhhdmUgdG8gY29uZmlndXJlIENBUCBhZGRyZXNzLCBJL08gYWRkcmVzcywgSW50ZXJydXB0IFZlY3RvcgorICAgICAgIGFzIHdlbGwgYXMgSVJRIGJlZm9yZSBpbnN0YWxsaW5nIHRoaXMgZHJpdmVyLiBQbGVhc2UgcmVmZXIgdG8gaGFyZHdhcmUKKyAgICAgICBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGluIFVzZXIncyBNYW51YWwgYmVmb3JlIHByb2NlZWQgYW55IGZ1cnRoZXIuCisgICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgSlAxIGlzIG9wZW4gYWZ0ZXIgdGhlIElTQSBib2FyZCBpcyBzZXQgcHJvcGVybHkuCisKKyAgICAgICBQQ0kgYm9hcmQKKyAgICAgICAtLS0tLS0tLS0KKyAgICAgICBZb3UgbWF5IG5lZWQgdG8gYWRqdXN0IElSUSB1c2FnZSBpbiBCSU9TIHRvIGF2b2lkIGZyb20gSVJRIGNvbmZsaWN0CisgICAgICAgd2l0aCBvdGhlciBJU0EgZGV2aWNlcy4gUGxlYXNlIHJlZmVyIHRvIGhhcmR3YXJlIGluc3RhbGxhdGlvbgorICAgICAgIHByb2NlZHVyZSBpbiBVc2VyJ3MgTWFudWFsIGluIGFkdmFuY2UuCisKKyAgICAgICBJUlEgU2hhcmluZworICAgICAgIC0tLS0tLS0tLS0tCisgICAgICAgRWFjaCBwb3J0IHdpdGhpbiB0aGUgc2FtZSBtdWx0aXBvcnQgYm9hcmQgc2hhcmVzIHRoZSBzYW1lIElSUS4gVXAgdG8KKyAgICAgICA0IE1veGEgU21hcnRpbyBGYW1pbHkgbXVsdGlwb3J0IGJvYXJkcyBjYW4gYmUgaW5zdGFsbGVkIHRvZ2V0aGVyIG9uCisgICAgICAgb25lIHN5c3RlbSBhbmQgdGhleSBjYW4gc2hhcmUgdGhlIHNhbWUgSVJRLgorCisgICAzLjIgRHJpdmVyIGZpbGVzIGFuZCBkZXZpY2UgbmFtaW5nIGNvbnZlbnRpb24KKworICAgICAgIFRoZSBkcml2ZXIgZmlsZSBtYXkgYmUgb2J0YWluZWQgZnJvbSBmdHAsIENELVJPTSBvciBmbG9wcHkgZGlzay4gVGhlCisgICAgICAgZmlyc3Qgc3RlcCwgYW55d2F5LCBpcyB0byBjb3B5IGRyaXZlciBmaWxlICJteHNlci50Z3oiIGludG8gc3BlY2lmaWVkCisgICAgICAgZGlyZWN0b3J5LiBlLmcuIC9tb3hhLiBUaGUgZXhlY3V0ZSBjb21tYW5kcyBhcyBiZWxvdy4KKworICAgICAgICMgY2QgL21veGEKKyAgICAgICAjIHRhciB4dmYgL2Rldi9mZDAgCisgICAgICAgb3IKKyAgICAgICAjIGNkIC9tb3hhCisgICAgICAgIyBjcCAvbW50L2Nkcm9tLzxkcml2ZXIgZGlyZWN0b3J5Pi9teHNlci50Z3ogLgorICAgICAgICMgdGFyIHh2ZnogbXhzZXIudGd6CisKKyAgICAgICBZb3UgbWF5IGZpbmQgYWxsIHRoZSBkcml2ZXIgYW5kIHV0aWxpdGllcyBmaWxlcyBpbiAvbW94YS9teHNlci4KKyAgICAgICBGb2xsb3dpbmcgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBkZXBlbmRzIG9uIHRoZSBtb2RlbCB5b3UnZCBsaWtlIHRvCisgICAgICAgcnVuIHRoZSBkcml2ZXIuIElmIHlvdSBwcmVmZXIgbW9kdWxlIGRyaXZlciwgcGxlYXNlIHJlZmVyIHRvIDMuMy4KKyAgICAgICBJZiBzdGF0aWMgZHJpdmVyIGlzIHJlcXVpcmVkLCBwbGVhc2UgcmVmZXIgdG8gMy40LgorCisgICAgICAgRGlhbGluIGFuZCBjYWxsb3V0IHBvcnQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIFRoaXMgZHJpdmVyIHJlbWFpbnMgdHJhZGl0aW9uYWwgc2VyaWFsIGRldmljZSBwcm9wZXJ0aWVzLiBUaGVyZSdyZQorICAgICAgIHR3byBzcGVjaWFsIGZpbGUgbmFtZSBmb3IgZWFjaCBzZXJpYWwgcG9ydC4gT25lIGlzIGRpYWwtaW4gcG9ydAorICAgICAgIHdoaWNoIGlzIG5hbWVkICJ0dHlNeHgiLiBGb3IgY2FsbG91dCBwb3J0LCB0aGUgbmFtaW5nIGNvbnZlbnRpb24KKyAgICAgICBpcyAiY3VteHgiLgorCisgICAgICAgRGV2aWNlIG5hbWluZyB3aGVuIG1vcmUgdGhhbiAyIGJvYXJkcyBpbnN0YWxsZWQKKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIE5hbWluZyBjb252ZW50aW9uIGZvciBlYWNoIFNtYXJ0aW8gbXVsdGlwb3J0IGJvYXJkIGlzIHByZS1kZWZpbmVkCisgICAgICAgYXMgYmVsb3cuCisKKyAgICAgICBCb2FyZCBOdW0uCSBEaWFsLWluIFBvcnQJICAgICAgQ2FsbG91dCBwb3J0CisgICAgICAgMXN0IGJvYXJkCXR0eU0wICAtIHR0eU03CSAgICAgIGN1bTAgIC0gY3VtNworICAgICAgIDJuZCBib2FyZAl0dHlNOCAgLSB0dHlNMTUgICAgICAgY3VtOCAgLSBjdW0xNQorICAgICAgIDNyZCBib2FyZAl0dHlNMTYgLSB0dHlNMjMgICAgICAgY3VtMTYgLSBjdW0yMworICAgICAgIDR0aCBib2FyZAl0dHlNMjQgLSB0dHltMzEgICAgICAgY3VtMjQgLSBjdW0zMQorCisgICAgICAgQm9hcmQgc2VxdWVuY2UKKyAgICAgICAtLS0tLS0tLS0tLS0tLQorICAgICAgIFRoaXMgZHJpdmVyIHdpbGwgYWN0aXZhdGUgSVNBIGJvYXJkcyBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlciBzZXQKKyAgICAgICBpbiB0aGUgZHJpdmVyLiBBZnRlciBhbGwgc3BlY2lmaWVkIElTQSBib2FyZCBhY3RpdmF0ZWQsIFBDSSBib2FyZAorICAgICAgIHdpbGwgYmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gYXV0b21hdGljYWxseSBkcml2ZW4uCisgICAgICAgVGhlcmVmb3JlIHRoZSBib2FyZCBudW1iZXIgaXMgc29ydGVkIGJ5IHRoZSBDQVAgYWRkcmVzcyBvZiBJU0EgYm9hcmRzLgorICAgICAgIEZvciBQQ0kgYm9hcmRzLCB0aGVpciBzZXF1ZW5jZSB3aWxsIGJlIGFmdGVyIElTQSBib2FyZHMgYW5kIEMxNjhIL1BDSQorICAgICAgIGhhcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiBDMTA0SC9QQ0kgYm9hcmRzLgorCisgICAzLjMgTW9kdWxlIGRyaXZlciBjb25maWd1cmF0aW9uCisgICAgICAgTW9kdWxlIGRyaXZlciBpcyBlYXNpZXN0IHdheSB0byBpbnN0YWxsLiBJZiB5b3UgcHJlZmVyIHN0YXRpYyBkcml2ZXIKKyAgICAgICBpbnN0YWxsYXRpb24sIHBsZWFzZSBza2lwIHRoaXMgcGFyYWdyYXBoLgorICAgICAgIDEuIEZpbmQgIk1ha2VmaWxlIiBpbiAvbW94YS9teHNlciwgdGhlbiBydW4KKworCSAgIyBtYWtlIGluc3RhbGwKKworCSAgVGhlIGRyaXZlciBmaWxlcyAibXhzZXIubyIgYW5kIHV0aWxpdGllcyB3aWxsIGJlIHByb3Blcmx5IGNvbXBpbGVkCisJICBhbmQgY29waWVkIHRvIHN5c3RlbSBkaXJlY3RvcmllcyByZXNwZWN0aXZlbHkuVGhlbiBydW4KKworCSAgIyBpbnNtb2QgbXhzZXIKKworCSAgdG8gYWN0aXZhdGUgdGhlIG1vZHVsYXIgZHJpdmVyLiBZb3UgbWF5IHJ1biAibHNtb2QiIHRvIGNoZWNrCisJICBpZiAibXhzZXIubyIgaXMgYWN0aXZhdGVkLgorCisgICAgICAgMi4gQ3JlYXRlIHNwZWNpYWwgZmlsZXMgYnkgZXhlY3V0aW5nICJtc21rbm9kIi4KKwkgICMgY2QgL21veGEvbXhzZXIvZHJpdmVyCisJICAjIC4vbXNta25vZAorCisJICBEZWZhdWx0IG1ham9yIG51bWJlcnMgZm9yIGRpYWwtaW4gZGV2aWNlIGFuZCBjYWxsb3V0IGRldmljZSBhcmUKKwkgIDE3NCwgMTc1LiBNc21rbm9kIHdpbGwgZGVsZXRlIGFueSBzcGVjaWFsIGZpbGVzIG9jY3VweWluZyB0aGUgc2FtZQorCSAgZGV2aWNlIG5hbWluZy4KKworICAgICAgIDMuIFVwIHRvIG5vdywgeW91IG1heSBtYW51YWxseSBleGVjdXRlICJpbnNtb2QgbXhzZXIiIHRvIGFjdGl2YXRlCisJICB0aGlzIGRyaXZlciBhbmQgcnVuICJybW1vZCBteHNlciIgdG8gcmVtb3ZlIGl0LiBIb3dldmVyLCBpdCdzCisJICBiZXR0ZXIgdG8gaGF2ZSBhIGJvb3QgdGltZSBjb25maWd1cmF0aW9uIHRvIGVsaW1pbmF0ZSBtYW51YWwKKwkgIG9wZXJhdGlvbi4KKwkgIEJvb3QgdGltZSBjb25maWd1cmF0aW9uIGNhbiBiZSBhY2hpZXZlZCBieSByYyBmaWxlLiBSdW4gZm9sbG93aW5nCisJICBjb21tYW5kIGZvciBzZXR0aW5nIHJjIGZpbGVzLgorCisJICAjIGNkIC9tb3hhL214c2VyL2RyaXZlcgorCSAgIyBjcCAuL3JjLm14c2VyIC9ldGMvcmMuZAorCSAgIyBjZCAvZXRjL3JjLmQKKworCSAgWW91IG1heSBoYXZlIHRvIG1vZGlmeSBwYXJ0IG9mIHRoZSBjb250ZW50IGluIHJjLm14c2VyIHRvIHNwZWNpZnkKKyAgICAgICAgICBwYXJhbWV0ZXJzIGZvciBJU0EgYm9hcmQuIFBsZWFzZSByZWZlciB0byByYy5teHNlciBmb3IgbW9yZSBkZXRhaWwuCisgICAgICAgICAgRmluZCAicmMuc2VyaWFsIi4gSWYgInJjLnNlcmlhbCIgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0IGJ5IHZpLgorCSAgQWRkICJyYy5teHNlciIgaW4gbGFzdCBsaW5lLiBOZXh0LCBvcGVuIHJjLmxvY2FsIGJ5IHZpCisJICBhbmQgYXBwZW5kIGZvbGxvd2luZyBjb250ZW50LgorCisJICBpZiBbIC1mIC9ldGMvcmMuZC9yYy5zZXJpYWwgXTsgdGhlbgorCSAgICAgc2ggL2V0Yy9yYy5kL3JjLnNlcmlhbAorCSAgZmkKKworICAgICAgIDQuIFJlYm9vdCBhbmQgY2hlY2sgaWYgbXhzZXIubyBhY3RpdmF0ZWQgYnkgImxzbW9kIiBjb21tYW5kLgorICAgICAgIDUuIElmIHlvdSdkIGxpa2UgdG8gZHJpdmUgU21hcnRpbyBJU0EgYm9hcmRzIGluIHRoZSBzeXN0ZW0sIHlvdSdsbAorCSAgaGF2ZSB0byBhZGQgcGFyYW1ldGVyIHRvIHNwZWNpZnkgQ0FQIGFkZHJlc3Mgb2YgZ2l2ZW4gYm9hcmQgd2hpbGUKKyAgICAgICAgICBhY3RpdmF0aW5nICJteHNlci5vIi4gVGhlIGZvcm1hdCBmb3IgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cy4KKworCSAgaW5zbW9kIG14c2VyIGlvYWRkcj0weD8/PywweD8/PywweD8/PywweD8/PworCQkJCXwgICAgICB8ICAgICB8CSAgfAorCQkJCXwgICAgICB8ICAgICB8CSAgKy0gNHRoIElTQSBib2FyZAorCQkJCXwgICAgICB8ICAgICArLS0tLS0tIDNyZCBJU0EgYm9hcmQKKwkJCQl8ICAgICAgKy0tLS0tLS0tLS0tLSAybmQgSVNBIGJvYXJkCisJCQkJKy0tLS0tLS0tLS0tLS0tLS0tLS0gMXN0IElTQSBib2FyZAorCisgICAzLjQgU3RhdGljIGRyaXZlciBjb25maWd1cmF0aW9uCisKKyAgICAgICAxLiBDcmVhdGUgbGluaworCSAgIyBjZCAvdXNyL3NyYy9saW51eC9kcml2ZXJzL2NoYXIKKwkgICMgbG4gLXMgL21veGEvbXhzZXIvZHJpdmVyL214c2VyLmMgbXhzZXIuYworCisgICAgICAgMi4gQWRkIENBUCBhZGRyZXNzIGxpc3QgZm9yIElTQSBib2FyZHMKKwkgIEluIG1vZHVsZSBtb2RlLCB0aGUgQ0FQIGFkZHJlc3MgZm9yIElTQSBib2FyZCBpcyBnaXZlbiBieQorCSAgcGFyYW1ldGVyLiBJbiBzdGF0aWMgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHlvdSdsbCBoYXZlIHRvCisJICBhc3NpZ24gaXQgd2l0aGluIGRyaXZlcidzIHNvdXJjZSBjb2RlLiBJZiB5b3Ugd2lsbCBub3QKKwkgIGluc3RhbGwgYW55IElTQSBib2FyZHMsIHlvdSBtYXkgc2tpcCB0byBuZXh0IHBvcnRpb24uCisJICBUaGUgaW5zdHJ1Y3Rpb25zIHRvIG1vZGlmeSBkcml2ZXIgc291cmNlIGNvZGUgYXJlIGFzCisJICBiZWxvdy4KKwkgIGEuICMgY2QgL21veGEvbXhzZXIvZHJpdmVyCisJICAgICAjIHZpIG14c2VyLmMKKwkgIGIuIEZpbmQgdGhlIGFycmF5IG14c2VyQm9hcmRDQVBbXSBhcyBiZWxvdy4KKworCSAgICAgc3RhdGljIGludCBteHNlckJvYXJkQ0FQW10KKwkgICAgID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCisJICBjLiBDaGFuZ2UgdGhlIGFkZHJlc3Mgd2l0aGluIHRoaXMgYXJyYXkgdXNpbmcgdmkuIEZvcgorCSAgICAgZXhhbXBsZSwgdG8gZHJpdmVyIDIgSVNBIGJvYXJkcyB3aXRoIENBUCBhZGRyZXNzCisJICAgICAweDI4MCBhbmQgMHgxODAgYXMgMXN0IGFuZCAybmQgYm9hcmQuIEp1c3QgdG8gY2hhbmdlCisJICAgICB0aGUgc291cmNlIGNvZGUgYXMgZm9sbG93cy4KKworCSAgICAgc3RhdGljIGludCBteHNlckJvYXJkQ0FQW10KKwkgICAgID0gezB4MjgwLCAweDE4MCwgMHgwMCwgMHgwMH07CisKKyAgICAgICAzLiBNb2RpZnkgdHR5X2lvLmMKKwkgICMgY2QgL3Vzci9zcmMvbGludXgvZHJpdmVycy9jaGFyLworCSAgIyB2aSB0dHlfaW8uYworCSAgICBGaW5kIHB0eV9pbml0KCksIGluc2VydCAibXhzZXJfaW5pdCgpIiBhcworCisJICAgIHB0eV9pbml0KCk7CisJICAgIG14c2VyX2luaXQoKTsKKworICAgICAgIDQuIE1vZGlmeSB0dHkuaAorCSAgIyBjZCAvdXNyL3NyYy9saW51eC9pbmNsdWRlL2xpbnV4CisJICAjIHZpIHR0eS5oCisJICAgIEZpbmQgZXh0ZXJuIGludCB0dHlfaW5pdCh2b2lkKSwgaW5zZXJ0ICJteHNlcl9pbml0KCkiIGFzCisKKwkgICAgZXh0ZXJuIGludCB0dHlfaW5pdCh2b2lkKTsKKwkgICAgZXh0ZXJuIGludCBteHNlcl9pbml0KHZvaWQpOworICAgICAKKyAgICAgICA1LiBNb2RpZnkgTWFrZWZpbGUKKwkgICMgY2QgL3Vzci9zcmMvbGludXgvZHJpdmVycy9jaGFyCisJICAjIHZpIE1ha2VmaWxlCisJICAgIEZpbmQgTF9PQkpTIDo9IHR0eV9pby5vIC4uLi4uLiByYW5kb20ubywgYWRkCisJICAgICJteHNlci5vIiBhdCBsYXN0IG9mIHRoaXMgbGluZSBhcworCSAgICBMX09CSlMgOj0gdHR5X2lvLm8gLi4uLi4uLiBteHNlci5vCisKKyAgICAgICA2LiBSZWJ1aWxkIGtlcm5lbAorCSAgVGhlIGZvbGxvd2luZyBhcmUgZm9yIExpbnV4IGtlcm5lbCByZWJ1aWxkaW5nLGZvciB5b3VyIHJlZmVyZW5jZSBvbmx5LgorCSAgRm9yIGFwcHJvcHJpYXRlIGRldGFpbHMsIHBsZWFzZSByZWZlciB0byB0aGUgTGludXggZG9jdW1lbnQuCisKKwkgIElmICdsaWxvJyB1dGlsaXR5IGlzIGluc3RhbGxlZCwgcGxlYXNlIHVzZSAnbWFrZSB6bGlsbycgdG8gcmVidWlsZAorCSAga2VybmVsLiBJZiAnbGlsbycgaXMgbm90IGluc3RhbGxlZCwgcGxlYXNlIGZvbGxvdyB0aGUgZm9sbG93aW5nIHN0ZXBzLgorCisJICAgYS4gY2QgL3Vzci9zcmMvbGludXgKKwkgICBiLiBtYWtlIGNsZWFuCQkJICAgICAvKiB0YWtlIGEgZmV3IG1pbnV0ZXMgKi8KKwkgICBjLiBtYWtlIGJ6SW1hZ2UJCSAgIC8qIHRha2UgcHJvYmFibHkgMTAtMjAgbWludXRlcyAqLworCSAgIGQuIEJhY2t1cCBvcmlnaW5hbCBib290IGtlcm5lbC4JCSAgLyogb3B0aW9uYWwgc3RlcCAqLworCSAgIGUuIGNwIC91c3Ivc3JjL2xpbnV4L2FyY2gvaTM4Ni9ib290L2J6SW1hZ2UgL2Jvb3Qvdm1saW51egorCSAgIGYuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIGJvb3Qga2VybmVsICh2bWxpbnV6KSBpcyBpbiB0aGUKKwkgICAgICBjb3JyZWN0IHBvc2l0aW9uLiBJZiB5b3UgdXNlICdsaWxvJyB1dGlsaXR5LCB5b3Ugc2hvdWxkCisJICAgICAgY2hlY2sgL2V0Yy9saWxvLmNvbmYgJ2ltYWdlJyBpdGVtIHNwZWNpZmllZCB0aGUgcGF0aAorCSAgICAgIHdoaWNoIGlzIHRoZSAndm1saW51eicgcGF0aCwgb3IgeW91IHdpbGwgbG9hZCB3cm9uZworCSAgICAgIChvciBvbGQpIGJvb3Qga2VybmVsIGltYWdlICh2bWxpbnV6KS4KKwkgICBnLiBjaG1vZCA0MDAgL3ZtbGludXoKKwkgICBoLiBsaWxvCisJICAgaS4gcmRldiAtUiAvdm1saW51eiAxCisJICAgai4gc3luYworCisJICBOb3RlIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiAibWFrZSB6SW1hZ2UiIGlzIEVSUk9SLCB0aGVuIHlvdSBoYXZlIHRvCisJICBnbyBiYWNrIHRvIExpbnV4IGNvbmZpZ3VyYXRpb24gU2V0dXAuIFR5cGUgIm1ha2UgY29uZmlnIiBpbiBkaXJlY3RvcnkKKwkgIC91c3Ivc3JjL2xpbnV4IG9yICJzZXR1cCIuCisKKwkgIFNpbmNlIHN5c3RlbSBpbmNsdWRlIGZpbGUsIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgsCisJICBpcyBtb2RpZmllZCBlYWNoIHRpbWUgdGhlIE1PWEEgZHJpdmVyIGlzIGluc3RhbGxlZCwga2VybmVsIHJlYnVpbGRpbmcKKwkgIGlzIGluZXZpdGFibGUuIEFuZCBpdCB0YWtlcyBhYm91dCAxMCB0byAyMCBtaW51dGVzIGRlcGVuZHMgb24gdGhlCisJICBtYWNoaW5lLgorCisgICAgICAgNy4gTWFrZSB1dGlsaXR5CisJICAjIGNkIC9tb3hhL214c2VyL3V0aWxpdHkKKwkgICMgbWFrZSBpbnN0YWxsCisgICAgICAgCisgICAgICAgOC4gTWFrZSBzcGVjaWFsIGZpbGUKKyAgICAgICAgICAjIGNkIC9tb3hhL214c2VyL2RyaXZlcgorICAgICAgICAgICMgLi9tc21rbm9kCisKKyAgICAgICA5LiBSZWJvb3QKKworICAgMy41IEN1c3RvbSBjb25maWd1cmF0aW9uCisgICAgICAgQWx0aG91Z2ggdGhpcyBkcml2ZXIgYWxyZWFkeSBwcm92aWRlcyB5b3UgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB5b3UKKyAgICAgICBzdGlsbCBjYW4gY2hhbmdlIHRoZSBkZXZpY2UgbmFtZSBhbmQgbWFqb3IgbnVtYmVyLlRoZSBpbnN0cnVjdGlvbiB0bworICAgICAgIGNoYW5nZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBzaG93biBhcyBiZWxvdy4KKworICAgICAgIENoYW5nZSBEZXZpY2UgbmFtZQorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIElmIHlvdSdkIGxpa2UgdG8gdXNlIG90aGVyIGRldmljZSBuYW1lcyBpbnN0ZWFkIG9mIGRlZmF1bHQgbmFtaW5nCisgICAgICAgY29udmVudGlvbiwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHRvIG1vZGlmeSB0aGUgaW50ZXJuYWwgY29kZQorICAgICAgIHdpdGhpbiB0aGUgc2hlbGwgc2NyaXB0ICJtc21rbm9kIi4gRmlyc3QsIHlvdSBoYXZlIHRvIG9wZW4gIm1zbWtub2QiCisgICAgICAgYnkgdmkuIExvY2F0ZSBlYWNoIGxpbmUgY29udGFpbnMgInR0eU0iIGFuZCAiY3VtIiBhbmQgY2hhbmdlIHRoZW0KKyAgICAgICB0byB0aGUgZGV2aWNlIG5hbWUgeW91IGRlc2lyZWQuICJtc21rbm9kIiBjcmVhdGVzIHRoZSBkZXZpY2UgbmFtZXMKKyAgICAgICB5b3UgbmVlZCBuZXh0IHRpbWUgZXhlY3V0ZWQuCisKKyAgICAgICBDaGFuZ2UgTWFqb3IgbnVtYmVyCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIElmIG1ham9yIG51bWJlciAzMCBhbmQgMzUgaGFkIGJlZW4gb2NjdXBpZWQsIHlvdSBtYXkgaGF2ZSB0byBzZWxlY3QKKyAgICAgICAyIGZyZWUgbWFqb3IgbnVtYmVycyBmb3IgdGhpcyBkcml2ZXIuIFRoZXJlIGFyZSAzIHN0ZXBzIHRvIGNoYW5nZQorICAgICAgIG1ham9yIG51bWJlcnMuCisKKyAgICAgICAxLiBGaW5kIGZyZWUgbWFqb3IgbnVtYmVycworCSAgSW4gL3Byb2MvZGV2aWNlcywgeW91IG1heSBmaW5kIGFsbCB0aGUgbWFqb3IgbnVtYmVycyBvY2N1cGllZAorCSAgaW4gdGhlIHN5c3RlbS4gUGxlYXNlIHNlbGVjdCAyIG1ham9yIG51bWJlcnMgdGhhdCBhcmUgYXZhaWxhYmxlLgorCSAgZS5nLiA0MCwgNDUuCisgICAgICAgMi4gQ3JlYXRlIHNwZWNpYWwgZmlsZXMKKwkgIFJ1biAvbW94YS9teHNlci9kcml2ZXIvbXNta25vZCB0byBjcmVhdGUgc3BlY2lhbCBmaWxlcyB3aXRoCisJICBzcGVjaWZpZWQgbWFqb3IgbnVtYmVycy4KKyAgICAgICAzLiBNb2RpZnkgZHJpdmVyIHdpdGggbmV3IG1ham9yIG51bWJlcgorCSAgUnVuIHZpIHRvIG9wZW4gL21veGEvbXhzZXIvZHJpdmVyL214c2VyLmMuIExvY2F0ZSB0aGUgbGluZQorCSAgY29udGFpbnMgIk1YU0VSTUFKT1IiLiBDaGFuZ2UgdGhlIGNvbnRlbnQgYXMgYmVsb3cuCisJICAjZGVmaW5lCSAgTVhTRVJNQUpPUgkJICA0MAorCSAgI2RlZmluZQkgIE1YU0VSQ1VNQUpPUgkJICA0NQorICAgICAgIDQuIFJ1biAjIG1ha2UgaW5zdGFsbCBpbiAvbW94YS9teHNlci9kcml2ZXIuCisKKyAgIDMuNiBWZXJpZnkgZHJpdmVyIGluc3RhbGxhdGlvbgorICAgICAgIFlvdSBtYXkgcmVmZXIgdG8gL3Zhci9sb2cvbWVzc2FnZXMgdG8gY2hlY2sgdGhlIGxhdGVzdCBzdGF0dXMKKyAgICAgICBsb2cgcmVwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgd2hlbmV2ZXIgaXQncyBhY3RpdmF0ZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNC4gVXRpbGl0aWVzCisgICBUaGVyZSBhcmUgMyB1dGlsaXRpZXMgY29udGFpbmVkIGluIHRoaXMgZHJpdmVyLiBUaGV5IGFyZSBtc2RpYWcsIG1zbW9uIGFuZAorICAgbXN0ZXJtLiBUaGVzZSAzIHV0aWxpdGllcyBhcmUgcmVsZWFzZWQgaW4gZm9ybSBvZiBzb3VyY2UgY29kZS4gVGhleSBzaG91bGQKKyAgIGJlIGNvbXBpbGVkIGludG8gZXhlY3V0YWJsZSBmaWxlIGFuZCBjb3BpZWQgaW50byAvdXNyL2Jpbi4KKworICAgbXNkaWFnIC0gRGlhZ25vc3RpYworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgdXRpbGl0eSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdG8gZGV0ZWN0IHdoYXQgTW94YSBTbWFydGlvIG11bHRpcG9ydAorICAgYm9hcmQgZXhpc3RzIGluIHRoZSBzeXN0ZW0uCisKKyAgIG1zbW9uIC0gUG9ydCBNb25pdG9yaW5nCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhpcyB1dGlsaXR5IGdpdmVzIHRoZSB1c2VyIGEgcXVpY2sgdmlldyBhYm91dCBhbGwgdGhlIE1PWEEgcG9ydHMnCisgICBhY3Rpdml0aWVzLiBPbmUgY2FuIGVhc2lseSBsZWFybiBlYWNoIHBvcnQncyB0b3RhbCByZWNlaXZlZC90cmFuc21pdHRlZAorICAgKFJ4L1R4KSBjaGFyYWN0ZXIgY291bnQgc2luY2UgdGhlIHRpbWUgd2hlbiB0aGUgbW9uaXRvcmluZyBpcyBzdGFydGVkLgorICAgUngvVHggdGhyb3VnaHB1dHMgcGVyIHNlY29uZCBhcmUgYWxzbyByZXBvcnRlZCBpbiBpbnRlcnZhbCBiYXNpcyAoZS5nLgorICAgdGhlIGxhc3QgNSBzZWNvbmRzKSBhbmQgaW4gYXZlcmFnZSBiYXNpcyAoc2luY2UgdGhlIHRpbWUgdGhlIG1vbml0b3JpbmcKKyAgIGlzIHN0YXJ0ZWQpLiBZb3UgY2FuIHJlc2V0IGFsbCBwb3J0cycgY291bnQgYnkgPEhPTUU+IGtleS4gPCs+IDwtPgorICAgKHBsdXMvbWludXMpIGtleXMgdG8gY2hhbmdlIHRoZSBkaXNwbGF5aW5nIHRpbWUgaW50ZXJ2YWwuIFByZXNzIDxFTlRFUj4KKyAgIG9uIHRoZSBwb3J0LCB0aGF0IGN1cnNvciBzdGF5LCB0byB2aWV3IHRoZSBwb3J0J3MgY29tbXVuaWNhdGlvbgorICAgcGFyYW1ldGVycywgc2lnbmFsIHN0YXR1cywgYW5kIGlucHV0L291dHB1dCBxdWV1ZS4KKworICAgbXN0ZXJtIC0gVGVybWluYWwgRW11bGF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgdXRpbGl0eSBwcm92aWRlcyBkYXRhIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBhYmlsaXR5IG9mIGFsbCB0dHkgcG9ydHMsCisgICBlc3BlY2lhbGx5IGZvciBNT1hBIHBvcnRzLiBJdCBpcyBxdWl0ZSB1c2VmdWwgZm9yIHRlc3Rpbmcgc2ltcGxlCisgICBhcHBsaWNhdGlvbiwgZm9yIGV4YW1wbGUsIHNlbmRpbmcgQVQgY29tbWFuZCB0byBhIG1vZGVtIGNvbm5lY3RlZCB0byB0aGUKKyAgIHBvcnQgb3IgdXNlZCBhcyBhIHRlcm1pbmFsIGZvciBsb2dpbiBwdXJwb3NlLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGEKKyAgIGR1bWIgdGVybWluYWwgZW11bGF0aW9uIHdpdGhvdXQgaGFuZGxpbmcgZnVsbCBzY3JlZW4gb3BlcmF0aW9uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzUuIFNldHNlcmlhbAorCisgICBTdXBwb3J0ZWQgU2V0c2VyaWFsIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBhcyBiZWxvdy4KKworICAgdWFydCAJICBzZXQgVUFSVCB0eXBlKDE2NDUwLS0+ZGlzYWJsZSBGSUZPLCAxNjU1MEEtLT5lbmFibGUgRklGTykKKyAgIGNsb3NlX2RlbGF5CSAgc2V0IHRoZSBhbW91bnQgb2YgdGltZShpbiAxLzEwMCBvZiBhIHNlY29uZCkgdGhhdCBEVFIKKwkJICBzaG91bGQgYmUga2VwdCBsb3cgd2hpbGUgYmVpbmcgY2xvc2VkLgorICAgY2xvc2luZ193YWl0ICAgc2V0IHRoZSBhbW91bnQgb2YgdGltZShpbiAxLzEwMCBvZiBhIHNlY29uZCkgdGhhdCB0aGUKKwkJICBzZXJpYWwgcG9ydCBzaG91bGQgd2FpdCBmb3IgZGF0YSB0byBiZSBkcmFpbmVkIHdoaWxlCisJCSAgYmVpbmcgY2xvc2VkLCBiZWZvcmUgdGhlIHJlY2VpdmVyIGlzIGRpc2FibGUuCisgICBzcGRfaGkJICBVc2UgIDU3LjZrYiAgd2hlbiAgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RzIDM4LjRrYi4KKyAgIHNwZF92aGkJICBVc2UgIDExNS4ya2IJd2hlbiAgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RzIDM4LjRrYi4KKyAgIHNwZF9ub3JtYWwJICBVc2UgIDM4LjRrYiAgd2hlbiAgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RzIDM4LjRrYi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzYuIFRyb3VibGVzaG9vdGluZworCisgICBUaGUgYm9vdCB0aW1lIGVycm9yIG1lc3NhZ2VzIGFuZCBzb2x1dGlvbnMgYXJlIHN0YXRlZCBhcyBjbGVhcmx5IGFzCisgICBwb3NzaWJsZS4gSWYgYWxsIHRoZSBwb3NzaWJsZSBzb2x1dGlvbnMgZmFpbCwgcGxlYXNlIGNvbnRhY3Qgb3VyIHRlY2huaWNhbAorICAgc3VwcG9ydCB0ZWFtIHRvIGdldCBtb3JlIGhlbHAuCisKKyAgIEVycm9yIG1zZzogTW9yZSB0aGFuIDQgTW94YSBTbWFydGlvIGZhbWlseSBib2FyZHMgZm91bmQuIEZpZnRoIGJvYXJkIGFuZAorCSAgICAgIGFmdGVyIGFyZSBpZ25vcmVkLgorICAgU29sdXRpb246CisgICBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHBsZWFzZSB1bnBsdWcgZmlmdGggYW5kIGFmdGVyIGJvYXJkLCBiZWNhdXNlIE1veGEKKyAgIGRyaXZlciBzdXBwb3J0cyB1cCB0byA0IGJvYXJkcy4KKworICAgRXJyb3IgbXNnOiBSZXF1ZXN0X2lycSBmYWlsLCBJUlEoPykgbWF5IGJlIGNvbmZsaWN0IHdpdGggYW5vdGhlciBkZXZpY2UuCisgICBTb2x1dGlvbjoKKyAgIE90aGVyIFBDSSBvciBJU0EgZGV2aWNlcyBvY2N1cHkgdGhlIGFzc2lnbmVkIElSUS4gSWYgeW91IGFyZSBub3Qgc3VyZQorICAgd2hpY2ggZGV2aWNlIGNhdXNlcyB0aGUgc2l0dWF0aW9uLHBsZWFzZSBjaGVjayAvcHJvYy9pbnRlcnJ1cHRzIHRvIGZpbmQKKyAgIGZyZWUgSVJRIGFuZCBzaW1wbHkgY2hhbmdlIGFub3RoZXIgZnJlZSBJUlEgZm9yIE1veGEgYm9hcmQuCisKKyAgIEVycm9yIG1zZzogQm9hcmQgIzogQzF4eCBTZXJpZXMoQ0FQPXh4eCkgaW50ZXJydXB0IG51bWJlciBpbnZhbGlkLgorICAgU29sdXRpb246CisgICBFYWNoIHBvcnQgd2l0aGluIHRoZSBzYW1lIG11bHRpcG9ydCBib2FyZCBzaGFyZXMgdGhlIHNhbWUgSVJRLiBQbGVhc2Ugc2V0CisgICBvbmUgSVJRIChJUlEgZG9lc24ndCBlcXVhbCB0byB6ZXJvKSBmb3Igb25lIE1veGEgYm9hcmQuCisKKyAgIEVycm9yIG1zZzogTm8gaW50ZXJydXB0IHZlY3RvciBiZSBzZXQgZm9yIE1veGEgSVNBIGJvYXJkKENBUD14eHgpLgorICAgU29sdXRpb246CisgICBNb3hhIElTQSBib2FyZCBuZWVkcyBhbiBpbnRlcnJ1cHQgdmVjdG9yLlBsZWFzZSByZWZlciB0byB1c2VyJ3MgbWFudWFsCisgICAiSGFyZHdhcmUgSW5zdGFsbGF0aW9uIiBjaGFwdGVyIHRvIHNldCBpbnRlcnJ1cHQgdmVjdG9yLgorCisgICBFcnJvciBtc2c6IENvdWxkbid0IGluc3RhbGwgTU9YQSBTbWFydGlvIGZhbWlseSBkcml2ZXIhCisgICBTb2x1dGlvbjoKKyAgIExvYWQgTW94YSBkcml2ZXIgZmFpbCwgdGhlIG1ham9yIG51bWJlciBtYXkgY29uZmxpY3Qgd2l0aCBvdGhlciBkZXZpY2VzLgorICAgUGxlYXNlIHJlZmVyIHRvIHByZXZpb3VzIHNlY3Rpb24gMy41IHRvIGNoYW5nZSBhIGZyZWUgbWFqb3IgbnVtYmVyIGZvcgorICAgTW94YSBkcml2ZXIuCisKKyAgIEVycm9yIG1zZzogQ291bGRuJ3QgaW5zdGFsbCBNT1hBIFNtYXJ0aW8gZmFtaWx5IGNhbGxvdXQgZHJpdmVyIQorICAgU29sdXRpb246CisgICBMb2FkIE1veGEgY2FsbG91dCBkcml2ZXIgZmFpbCwgdGhlIGNhbGxvdXQgZGV2aWNlIG1ham9yIG51bWJlciBtYXkKKyAgIGNvbmZsaWN0IHdpdGggb3RoZXIgZGV2aWNlcy4gUGxlYXNlIHJlZmVyIHRvIHByZXZpb3VzIHNlY3Rpb24gMy41IHRvCisgICBjaGFuZ2UgYSBmcmVlIGNhbGxvdXQgZGV2aWNlIG1ham9yIG51bWJlciBmb3IgTW94YSBkcml2ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dCBiL0RvY3VtZW50YXRpb24vbXRyci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4YWYxYzMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tdHJyLnR4dApAQCAtMCwwICsxLDI4NiBAQAorTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIGNvbnRyb2wKKzMgSnVuIDE5OTkKK1JpY2hhcmQgR29vY2gKKzxyZ29vY2hAYXRuZi5jc2lyby5hdT4KKworICBPbiBJbnRlbCBQNiBmYW1pbHkgcHJvY2Vzc29ycyAoUGVudGl1bSBQcm8sIFBlbnRpdW0gSUkgYW5kIGxhdGVyKQorICB0aGUgTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXJzIChNVFJScykgbWF5IGJlIHVzZWQgdG8gY29udHJvbAorICBwcm9jZXNzb3IgYWNjZXNzIHRvIG1lbW9yeSByYW5nZXMuIFRoaXMgaXMgbW9zdCB1c2VmdWwgd2hlbiB5b3UgaGF2ZQorICBhIHZpZGVvIChWR0EpIGNhcmQgb24gYSBQQ0kgb3IgQUdQIGJ1cy4gRW5hYmxpbmcgd3JpdGUtY29tYmluaW5nCisgIGFsbG93cyBidXMgd3JpdGUgdHJhbnNmZXJzIHRvIGJlIGNvbWJpbmVkIGludG8gYSBsYXJnZXIgdHJhbnNmZXIKKyAgYmVmb3JlIGJ1cnN0aW5nIG92ZXIgdGhlIFBDSS9BR1AgYnVzLiBUaGlzIGNhbiBpbmNyZWFzZSBwZXJmb3JtYW5jZQorICBvZiBpbWFnZSB3cml0ZSBvcGVyYXRpb25zIDIuNSB0aW1lcyBvciBtb3JlLgorCisgIFRoZSBDeXJpeCA2eDg2LCA2eDg2TVggYW5kIE0gSUkgcHJvY2Vzc29ycyBoYXZlIEFkZHJlc3MgUmFuZ2UKKyAgUmVnaXN0ZXJzIChBUlJzKSB3aGljaCBwcm92aWRlIGEgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIE1UUlJzLiBGb3IKKyAgdGhlc2UsIHRoZSBBUlJzIGFyZSB1c2VkIHRvIGVtdWxhdGUgdGhlIE1UUlJzLgorCisgIFRoZSBBTUQgSzYtMiAoc3RlcHBpbmcgOCBhbmQgYWJvdmUpIGFuZCBLNi0zIHByb2Nlc3NvcnMgaGF2ZSB0d28KKyAgTVRSUnMuIFRoZXNlIGFyZSBzdXBwb3J0ZWQuICBUaGUgQU1EIEF0aGxvbiBmYW1pbHkgcHJvdmlkZSA4IEludGVsCisgIHN0eWxlIE1UUlJzLgorICAKKyAgVGhlIENlbnRhdXIgQzYgKFdpbkNoaXApIGhhcyA4IE1DUnMsIGFsbG93aW5nIHdyaXRlLWNvbWJpbmluZy4gVGhlc2UKKyAgYXJlIHN1cHBvcnRlZC4KKworICBUaGUgVklBIEN5cml4IElJSSBhbmQgVklBIEMzIENQVXMgb2ZmZXIgOCBJbnRlbCBzdHlsZSBNVFJScy4KKworICBUaGUgQ09ORklHX01UUlIgb3B0aW9uIGNyZWF0ZXMgYSAvcHJvYy9tdHJyIGZpbGUgd2hpY2ggbWF5IGJlIHVzZWQKKyAgdG8gbWFuaXB1bGF0ZSB5b3VyIE1UUlJzLiBUeXBpY2FsbHkgdGhlIFggc2VydmVyIHNob3VsZCB1c2UKKyAgdGhpcy4gVGhpcyBzaG91bGQgaGF2ZSBhIHJlYXNvbmFibHkgZ2VuZXJpYyBpbnRlcmZhY2Ugc28gdGhhdAorICBzaW1pbGFyIGNvbnRyb2wgcmVnaXN0ZXJzIG9uIG90aGVyIHByb2Nlc3NvcnMgY2FuIGJlIGVhc2lseQorICBzdXBwb3J0ZWQuCisKKworVGhlcmUgYXJlIHR3byBpbnRlcmZhY2VzIHRvIC9wcm9jL210cnI6IG9uZSBpcyBhbiBBU0NJSSBpbnRlcmZhY2UKK3doaWNoIGFsbG93cyB5b3UgdG8gcmVhZCBhbmQgd3JpdGUuIFRoZSBvdGhlciBpcyBhbiBpb2N0bCgpCitpbnRlcmZhY2UuIFRoZSBBU0NJSSBpbnRlcmZhY2UgaXMgbWVhbnQgZm9yIGFkbWluaXN0cmF0aW9uLiBUaGUKK2lvY3RsKCkgaW50ZXJmYWNlIGlzIG1lYW50IGZvciBDIHByb2dyYW1zIChpLmUuIHRoZSBYIHNlcnZlcikuIFRoZQoraW50ZXJmYWNlcyBhcmUgZGVzY3JpYmVkIGJlbG93LCB3aXRoIHNhbXBsZSBjb21tYW5kcyBhbmQgQyBjb2RlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZWFkaW5nIE1UUlJzIGZyb20gdGhlIHNoZWxsOgorCislIGNhdCAvcHJvYy9tdHJyCityZWcwMDogYmFzZT0weDAwMDAwMDAwICggICAwTUIpLCBzaXplPSAxMjhNQjogd3JpdGUtYmFjaywgY291bnQ9MQorcmVnMDE6IGJhc2U9MHgwODAwMDAwMCAoIDEyOE1CKSwgc2l6ZT0gIDY0TUI6IHdyaXRlLWJhY2ssIGNvdW50PTEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NyZWF0aW5nIE1UUlJzIGZyb20gdGhlIEMtc2hlbGw6CisjIGVjaG8gImJhc2U9MHhmODAwMDAwMCBzaXplPTB4NDAwMDAwIHR5cGU9d3JpdGUtY29tYmluaW5nIiA+ISAvcHJvYy9tdHJyCitvciBpZiB5b3UgdXNlIGJhc2g6CisjIGVjaG8gImJhc2U9MHhmODAwMDAwMCBzaXplPTB4NDAwMDAwIHR5cGU9d3JpdGUtY29tYmluaW5nIiA+fCAvcHJvYy9tdHJyCisKK0FuZCB0aGUgcmVzdWx0IHRoZXJlb2Y6CislIGNhdCAvcHJvYy9tdHJyCityZWcwMDogYmFzZT0weDAwMDAwMDAwICggICAwTUIpLCBzaXplPSAxMjhNQjogd3JpdGUtYmFjaywgY291bnQ9MQorcmVnMDE6IGJhc2U9MHgwODAwMDAwMCAoIDEyOE1CKSwgc2l6ZT0gIDY0TUI6IHdyaXRlLWJhY2ssIGNvdW50PTEKK3JlZzAyOiBiYXNlPTB4ZjgwMDAwMDAgKDM5NjhNQiksIHNpemU9ICAgNE1COiB3cml0ZS1jb21iaW5pbmcsIGNvdW50PTEKKworVGhpcyBpcyBmb3IgdmlkZW8gUkFNIGF0IGJhc2UgYWRkcmVzcyAweGY4MDAwMDAwIGFuZCBzaXplIDQgbWVnYWJ5dGVzLiBUbworZmluZCBvdXQgeW91ciBiYXNlIGFkZHJlc3MsIHlvdSBuZWVkIHRvIGxvb2sgYXQgdGhlIG91dHB1dCBvZiB5b3VyIFgKK3NlcnZlciwgd2hpY2ggdGVsbHMgeW91IHdoZXJlIHRoZSBsaW5lYXIgZnJhbWVidWZmZXIgYWRkcmVzcyBpcy4gQQordHlwaWNhbCBsaW5lIHRoYXQgeW91IG1heSBnZXQgaXM6CisKKygtLSkgUzM6IFBDSTogOTY4IHJldiAwLCBMaW5lYXIgRkIgQCAweGY4MDAwMDAwCisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG9ubHkgdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBYIHNlcnZlciwgYXMgaXQgbWF5Cittb3ZlIHRoZSBmcmFtZWJ1ZmZlciBiYXNlIGFkZHJlc3MsIHNvIHRoZSBvbmx5IHZhbHVlIHlvdSBjYW4gdHJ1c3QgaXMKK3RoYXQgcmVwb3J0ZWQgYnkgdGhlIFggc2VydmVyLgorCitUbyBmaW5kIG91dCB0aGUgc2l6ZSBvZiB5b3VyIGZyYW1lYnVmZmVyICh3aGF0LCB5b3UgZG9uJ3QgYWN0dWFsbHkKK2tub3c/KSwgdGhlIGZvbGxvd2luZyBsaW5lIHdpbGwgdGVsbCB5b3U6CisKKygtLSkgUzM6IHZpZGVvcmFtOiAgNDA5NmsKKworVGhhdCdzIDQgbWVnYWJ5dGVzLCB3aGljaCBpcyAweDQwMDAwMCBieXRlcyAoaW4gaGV4YWRlY2ltYWwpLgorQSBwYXRjaCBpcyBiZWluZyB3cml0dGVuIGZvciBYRnJlZTg2IHdoaWNoIHdpbGwgbWFrZSB0aGlzIGF1dG9tYXRpYzoKK2luIG90aGVyIHdvcmRzIHRoZSBYIHNlcnZlciB3aWxsIG1hbmlwdWxhdGUgL3Byb2MvbXRyciB1c2luZyB0aGUKK2lvY3RsKCkgaW50ZXJmYWNlLCBzbyB1c2VycyB3b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLiBJZiB5b3UgdXNlIGEKK2NvbW1lcmNpYWwgWCBzZXJ2ZXIsIGxvYmJ5IHlvdXIgdmVuZG9yIHRvIGFkZCBzdXBwb3J0IGZvciBNVFJScy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NyZWF0aW5nIG92ZXJsYXBwaW5nIE1UUlJzOgorCislZWNobyAiYmFzZT0weGZiMDAwMDAwIHNpemU9MHgxMDAwMDAwIHR5cGU9d3JpdGUtY29tYmluaW5nIiA+L3Byb2MvbXRycgorJWVjaG8gImJhc2U9MHhmYjAwMDAwMCBzaXplPTB4MTAwMCB0eXBlPXVuY2FjaGFibGUiID4vcHJvYy9tdHJyCisKK0FuZCB0aGUgcmVzdWx0czogY2F0IC9wcm9jL210cnIKK3JlZzAwOiBiYXNlPTB4MDAwMDAwMDAgKCAgIDBNQiksIHNpemU9ICA2NE1COiB3cml0ZS1iYWNrLCBjb3VudD0xCityZWcwMTogYmFzZT0weGZiMDAwMDAwICg0MDE2TUIpLCBzaXplPSAgMTZNQjogd3JpdGUtY29tYmluaW5nLCBjb3VudD0xCityZWcwMjogYmFzZT0weGZiMDAwMDAwICg0MDE2TUIpLCBzaXplPSAgIDRrQjogdW5jYWNoYWJsZSwgY291bnQ9MQorCitTb21lIGNhcmRzIChlc3BlY2lhbGx5IFZvb2RvbyBHcmFwaGljcyBib2FyZHMpIG5lZWQgdGhpcyA0IGtCIGFyZWEgCitleGNsdWRlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZ2lvbiBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yCityZWdpc3RlcnMuCisKK05PVEU6IFlvdSBjYW4gb25seSBjcmVhdGUgdHlwZT11bmNhY2hhYmxlIHJlZ2lvbiwgaWYgdGhlIGZpcnN0CityZWdpb24gdGhhdCB5b3UgY3JlYXRlZCBpcyB0eXBlPXdyaXRlLWNvbWJpbmluZy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbW92aW5nIE1UUlJzIGZyb20gdGhlIEMtc2hlbGw6CislIGVjaG8gImRpc2FibGU9MiIgPiEgL3Byb2MvbXRycgorb3IgdXNpbmcgYmFzaDoKKyUgZWNobyAiZGlzYWJsZT0yIiA+fCAvcHJvYy9tdHJyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSZWFkaW5nIE1UUlJzIGZyb20gYSBDIHByb2dyYW0gdXNpbmcgaW9jdGwoKSdzOgorCisvKiAgbXRyci1zaG93LmMKKworICAgIFNvdXJjZSBmaWxlIGZvciBtdHJyLXNob3cgKGV4YW1wbGUgcHJvZ3JhbSB0byBzaG93IE1UUlJzIHVzaW5nIGlvY3RsKCkncykKKworICAgIENvcHlyaWdodCAoQykgMTk5Ny0xOTk4ICBSaWNoYXJkIEdvb2NoCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgIFJpY2hhcmQgR29vY2ggbWF5IGJlIHJlYWNoZWQgYnkgZW1haWwgYXQgIHJnb29jaEBhdG5mLmNzaXJvLmF1CisgICAgVGhlIHBvc3RhbCBhZGRyZXNzIGlzOgorICAgICAgUmljaGFyZCBHb29jaCwgYy9vIEFUTkYsIFAuIE8uIEJveCA3NiwgRXBwaW5nLCBOLlMuVy4sIDIxMjEsIEF1c3RyYWxpYS4KKyovCisKKy8qCisgICAgVGhpcyBwcm9ncmFtIHdpbGwgdXNlIGFuIGlvY3RsKCkgb24gL3Byb2MvbXRyciB0byBzaG93IHRoZSBjdXJyZW50IE1UUlIKKyAgICBzZXR0aW5ncy4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byByZWFkaW5nIC9wcm9jL210cnIuCisKKworICAgIFdyaXR0ZW4gYnkgICAgICBSaWNoYXJkIEdvb2NoICAgMTctREVDLTE5OTcKKworICAgIExhc3QgdXBkYXRlZCBieSBSaWNoYXJkIEdvb2NoICAgMi1NQVktMTk5OAorCisKKyovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNkZWZpbmUgTVRSUl9ORUVEX1NUUklOR1MKKyNpbmNsdWRlIDxhc20vbXRyci5oPgorCisjZGVmaW5lIFRSVUUgMQorI2RlZmluZSBGQUxTRSAwCisjZGVmaW5lIEVSUlNUUklORyBzdHJlcnJvciAoZXJybm8pCisKKworaW50IG1haW4gKCkKK3sKKyAgICBpbnQgZmQ7CisgICAgc3RydWN0IG10cnJfZ2VudHJ5IGdlbnRyeTsKKworICAgIGlmICggKCBmZCA9IG9wZW4gKCIvcHJvYy9tdHJyIiwgT19SRE9OTFksIDApICkgPT0gLTEgKQorICAgIHsKKwlpZiAoZXJybm8gPT0gRU5PRU5UKQorCXsKKwkgICAgZnB1dHMgKCIvcHJvYy9tdHJyIG5vdCBmb3VuZDogbm90IHN1cHBvcnRlZCBvciB5b3UgZG9uJ3QgaGF2ZSBhIFBQcm8/XG4iLAorCQkgICBzdGRlcnIpOworCSAgICBleGl0ICgxKTsKKwl9CisJZnByaW50ZiAoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyAvcHJvYy9tdHJyXHQlc1xuIiwgRVJSU1RSSU5HKTsKKwlleGl0ICgyKTsKKyAgICB9CisgICAgZm9yIChnZW50cnkucmVnbnVtID0gMDsgaW9jdGwgKGZkLCBNVFJSSU9DX0dFVF9FTlRSWSwgJmdlbnRyeSkgPT0gMDsKKwkgKytnZW50cnkucmVnbnVtKQorICAgIHsKKwlpZiAoZ2VudHJ5LnNpemUgPCAxKQorCXsKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAiUmVnaXN0ZXI6ICV1IGRpc2FibGVkXG4iLCBnZW50cnkucmVnbnVtKTsKKwkgICAgY29udGludWU7CisJfQorCWZwcmludGYgKHN0ZGVyciwgIlJlZ2lzdGVyOiAldSBiYXNlOiAweCVseCBzaXplOiAweCVseCB0eXBlOiAlc1xuIiwKKwkJIGdlbnRyeS5yZWdudW0sIGdlbnRyeS5iYXNlLCBnZW50cnkuc2l6ZSwKKwkJIG10cnJfc3RyaW5nc1tnZW50cnkudHlwZV0pOworICAgIH0KKyAgICBpZiAoZXJybm8gPT0gRUlOVkFMKSBleGl0ICgwKTsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJFcnJvciBkb2luZyBpb2N0bCgyKSBvbiAvZGV2L210cnJcdCVzXG4iLCBFUlJTVFJJTkcpOworICAgIGV4aXQgKDMpOworfSAgIC8qICBFbmQgRnVuY3Rpb24gbWFpbiAgKi8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NyZWF0aW5nIE1UUlJzIGZyb20gYSBDIHByb2dyYW1tZSB1c2luZyBpb2N0bCgpJ3M6CisKKy8qICBtdHJyLWFkZC5jCisKKyAgICBTb3VyY2UgZmlsZSBmb3IgbXRyci1hZGQgKGV4YW1wbGUgcHJvZ3JhbW1lIHRvIGFkZCBhbiBNVFJScyB1c2luZyBpb2N0bCgpKQorCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTggIFJpY2hhcmQgR29vY2gKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICAgUmljaGFyZCBHb29jaCBtYXkgYmUgcmVhY2hlZCBieSBlbWFpbCBhdCAgcmdvb2NoQGF0bmYuY3Npcm8uYXUKKyAgICBUaGUgcG9zdGFsIGFkZHJlc3MgaXM6CisgICAgICBSaWNoYXJkIEdvb2NoLCBjL28gQVRORiwgUC4gTy4gQm94IDc2LCBFcHBpbmcsIE4uUy5XLiwgMjEyMSwgQXVzdHJhbGlhLgorKi8KKworLyoKKyAgICBUaGlzIHByb2dyYW1tZSB3aWxsIHVzZSBhbiBpb2N0bCgpIG9uIC9wcm9jL210cnIgdG8gYWRkIGFuIGVudHJ5LiBUaGUgZmlyc3QKKyAgICBhdmFpbGFibGUgbXRyciBpcyB1c2VkLiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHdyaXRpbmcgL3Byb2MvbXRyci4KKworCisgICAgV3JpdHRlbiBieSAgICAgIFJpY2hhcmQgR29vY2ggICAxNy1ERUMtMTk5NworCisgICAgTGFzdCB1cGRhdGVkIGJ5IFJpY2hhcmQgR29vY2ggICAyLU1BWS0xOTk4CisKKworKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2RlZmluZSBNVFJSX05FRURfU1RSSU5HUworI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgRVJSU1RSSU5HIHN0cmVycm9yIChlcnJubykKKworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBmZDsKKyAgICBzdHJ1Y3QgbXRycl9zZW50cnkgc2VudHJ5OworCisgICAgaWYgKGFyZ2MgIT0gNCkKKyAgICB7CisJZnByaW50ZiAoc3RkZXJyLCAiVXNhZ2U6XHRtdHJyLWFkZCBiYXNlIHNpemUgdHlwZVxuIik7CisJZXhpdCAoMSk7CisgICAgfQorICAgIHNlbnRyeS5iYXNlID0gc3RydG91bCAoYXJndlsxXSwgTlVMTCwgMCk7CisgICAgc2VudHJ5LnNpemUgPSBzdHJ0b3VsIChhcmd2WzJdLCBOVUxMLCAwKTsKKyAgICBmb3IgKHNlbnRyeS50eXBlID0gMDsgc2VudHJ5LnR5cGUgPCBNVFJSX05VTV9UWVBFUzsgKytzZW50cnkudHlwZSkKKyAgICB7CisJaWYgKHN0cmNtcCAoYXJndlszXSwgbXRycl9zdHJpbmdzW3NlbnRyeS50eXBlXSkgPT0gMCkgYnJlYWs7CisgICAgfQorICAgIGlmIChzZW50cnkudHlwZSA+PSBNVFJSX05VTV9UWVBFUykKKyAgICB7CisJZnByaW50ZiAoc3RkZXJyLCAiSWxsZWdhbCB0eXBlOiBcIiVzXCJcbiIsIGFyZ3ZbM10pOworCWV4aXQgKDIpOworICAgIH0KKyAgICBpZiAoICggZmQgPSBvcGVuICgiL3Byb2MvbXRyciIsIE9fV1JPTkxZLCAwKSApID09IC0xICkKKyAgICB7CisJaWYgKGVycm5vID09IEVOT0VOVCkKKwl7CisJICAgIGZwdXRzICgiL3Byb2MvbXRyciBub3QgZm91bmQ6IG5vdCBzdXBwb3J0ZWQgb3IgeW91IGRvbid0IGhhdmUgYSBQUHJvP1xuIiwKKwkJICAgc3RkZXJyKTsKKwkgICAgZXhpdCAoMyk7CisJfQorCWZwcmludGYgKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgL3Byb2MvbXRyclx0JXNcbiIsIEVSUlNUUklORyk7CisJZXhpdCAoNCk7CisgICAgfQorICAgIGlmIChpb2N0bCAoZmQsIE1UUlJJT0NfQUREX0VOVFJZLCAmc2VudHJ5KSA9PSAtMSkKKyAgICB7CisJZnByaW50ZiAoc3RkZXJyLCAiRXJyb3IgZG9pbmcgaW9jdGwoMikgb24gL2Rldi9tdHJyXHQlc1xuIiwgRVJSU1RSSU5HKTsKKwlleGl0ICg1KTsKKyAgICB9CisgICAgZnByaW50ZiAoc3RkZXJyLCAiU2xlZXBpbmcgZm9yIDUgc2Vjb25kcyBzbyB5b3UgY2FuIHNlZSB0aGUgbmV3IGVudHJ5XG4iKTsKKyAgICBzbGVlcCAoNSk7CisgICAgY2xvc2UgKGZkKTsKKyAgICBmcHV0cyAoIkkndmUganVzdCBjbG9zZWQgL3Byb2MvbXRyciBzbyBub3cgdGhlIG5ldyBlbnRyeSBzaG91bGQgYmUgZ29uZVxuIiwKKwkgICBzdGRlcnIpOworfSAgIC8qICBFbmQgRnVuY3Rpb24gbWFpbiAgKi8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmJkLnR4dCBiL0RvY3VtZW50YXRpb24vbmJkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWI5M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uYmQudHh0CkBAIC0wLDAgKzEsNDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrIEJsb2NrIERldmljZSAoVENQIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIFdoYXQgaXMgaXQ6IFdpdGggdGhpcyBjb21waWxlZCBpbiB0aGUga2VybmVsIChvciBhcyBhIG1vZHVsZSksIExpbnV4CisgICBjYW4gdXNlIGEgcmVtb3RlIHNlcnZlciBhcyBvbmUgb2YgaXRzIGJsb2NrIGRldmljZXMuIFNvIGV2ZXJ5IHRpbWUKKyAgIHRoZSBjbGllbnQgY29tcHV0ZXIgd2FudHMgdG8gcmVhZCwgZS5nLiwgL2Rldi9uYjAsIGl0IHNlbmRzIGEKKyAgIHJlcXVlc3Qgb3ZlciBUQ1AgdG8gdGhlIHNlcnZlciwgd2hpY2ggd2lsbCByZXBseSB3aXRoIHRoZSBkYXRhIHJlYWQuCisgICBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdGF0aW9ucyB3aXRoIGxvdyBkaXNrIHNwYWNlIChvciBldmVuIGRpc2tsZXNzIC0KKyAgIGlmIHlvdSBib290IGZyb20gZmxvcHB5KSB0byBib3Jyb3cgZGlzayBzcGFjZSBmcm9tIGFub3RoZXIgY29tcHV0ZXIuCisgICBVbmxpa2UgTkZTLCBpdCBpcyBwb3NzaWJsZSB0byBwdXQgYW55IGZpbGVzeXN0ZW0gb24gaXQsIGV0Yy4gSXQgc2hvdWxkCisgICBldmVuIGJlIHBvc3NpYmxlIHRvIHVzZSBOQkQgYXMgYSByb290IGZpbGVzeXN0ZW0gKEkndmUgbmV2ZXIgdHJpZWQpLAorICAgYnV0IGl0IHJlcXVpcmVzIGEgdXNlci1sZXZlbCBwcm9ncmFtIHRvIGJlIGluIHRoZSBpbml0cmQgdG8gc3RhcnQuCisgICBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcnVuIGJsb2NrLWRldmljZSBpbiB1c2VyIGxhbmQgKG1ha2luZyBzZXJ2ZXIKKyAgIGFuZCBjbGllbnQgcGh5c2ljYWxseSB0aGUgc2FtZSBjb21wdXRlciwgY29tbXVuaWNhdGluZyB1c2luZyBsb29wYmFjaykuCisgICAKKyAgIEN1cnJlbnQgc3RhdGU6IEl0IGN1cnJlbnRseSB3b3Jrcy4gTmV0d29yayBibG9jayBkZXZpY2UgaXMgc3RhYmxlLgorICAgSSBvcmlnaW5hbGx5IHRob3VnaHQgdGhhdCBpdCB3YXMgaW1wb3NzaWJsZSB0byBzd2FwIG92ZXIgVENQLiBJdAorICAgdHVybmVkIG91dCBub3QgdG8gYmUgdHJ1ZSAtIHN3YXBwaW5nIG92ZXIgVENQIG5vdyB3b3JrcyBhbmQgc2VlbXMKKyAgIHRvIGJlIGRlYWRsb2NrLWZyZWUsIGJ1dCBpdCByZXF1aXJlcyBoZWF2eSBwYXRjaGVzIGludG8gTGludXgncworICAgbmV0d29yayBsYXllci4KKyAgIAorICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIG9yIHRvIGRvd25sb2FkIHRoZSBuYmQtY2xpZW50IGFuZCBuYmQtc2VydmVyCisgICB0b29scywgZ28gdG8gaHR0cDovL25iZC5zZi5uZXQvLgorCisgICBIb3d0bzogVG8gc2V0dXAgbmJkLCB5b3UgY2FuIHNpbXBseSBkbyB0aGUgZm9sbG93aW5nOgorCisgICBGaXJzdCwgc2VydmUgYSBkZXZpY2Ugb3IgZmlsZSBmcm9tIGEgcmVtb3RlIHNlcnZlcjoKKworICAgbmJkLXNlcnZlciA8cG9ydC1udW1iZXI+IDxkZXZpY2Utb3ItZmlsZS10by1zZXJ2ZS10by1jbGllbnQ+CisKKyAgIGUuZy4sCisJcm9vdEBzZXJ2ZXIxICMgbmJkLXNlcnZlciAxMjM0IC9kZXYvc2RiMQorCisJKHNlcnZlcyBzZGIxIHBhcnRpdGlvbiBvbiBUQ1AgcG9ydCAxMjM0KQorCisgICBUaGVuLCBvbiB0aGUgbG9jYWwgKGNsaWVudCkgc3lzdGVtOgorCisgICBuYmQtY2xpZW50IDxzZXJ2ZXItbmFtZS1vci1JUD4gPHNlcnZlci1wb3J0LW51bWJlcj4gL2Rldi9uYlswLW5dCisKKyAgIGUuZy4sCisJcm9vdEBjbGllbnQxICMgbmJkLWNsaWVudCBzZXJ2ZXIxIDEyMzQgL2Rldi9uYjAKKworCShjcmVhdGVzIHRoZSBuYjAgZGV2aWNlIG9uIGNsaWVudDEpCisKKyAgIFRoZSBuYmQga2VybmVsIG1vZHVsZSBuZWVkIG9ubHkgYmUgaW5zdGFsbGVkIG9uIHRoZSBjbGllbnQKKyAgIHN5c3RlbSwgYXMgdGhlIG5iZC1zZXJ2ZXIgaXMgY29tcGxldGVseSBpbiB1c2Vyc3BhY2UuIEluIGZhY3QsCisgICB0aGUgbmJkLXNlcnZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcG9ydGVkIHRvIG90aGVyIG9wZXJhdGluZworICAgc3lzdGVtcywgaW5jbHVkaW5nIFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0OTkzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtMCwwICsxLDEyNyBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQorM2M1MDUudHh0CisJLSBpbmZvcm1hdGlvbiBvbiB0aGUgM0NvbSBFdGhlckxpbmsgUGx1cyAoM2M1MDUpIGRyaXZlci4KKzZwYWNrLnR4dAorCS0gaW5mbyBvbiB0aGUgNnBhY2sgcHJvdG9jb2wsIGFuIGFsdGVybmF0aXZlIHRvIEtJU1MgZm9yIEFYLjI1CitDb25maWd1cmFibGUKKwktIGluZm8gb24gc29tZSBvZiB0aGUgY29uZmlndXJhYmxlIG5ldHdvcmsgcGFyYW1ldGVycworRExJTksudHh0CisJLSBpbmZvIG9uIHRoZSBELUxpbmsgREUtNjAwL0RFLTYyMCBwYXJhbGxlbCBwb3J0IHBvY2tldCBhZGFwdGVycworUExJUC50eHQKKwktIFBMSVA6IFRoZSBQYXJhbGxlbCBMaW5lIEludGVybmV0IFByb3RvY29sIGRldmljZSBkcml2ZXIKK1JFQURNRS5zYjEwMDAKKwktIGluZm8gb24gR2VuZXJhbCBJbnN0cnVtZW50L05leHRMZXZlbCBTVVJGYm9hcmQxMDAwIGNhYmxlIG1vZGVtLgorYWxpYXMudHh0CisJLSBpbmZvIG9uIHVzaW5nIGFsaWFzIG5ldHdvcmsgZGV2aWNlcyAKK2FyY25ldC1oYXJkd2FyZS50eHQKKwktIHRvbnMgb2YgaW5mbyBvbiBBUkNuZXQsIGh1YnMsIGp1bXBlciBzZXR0aW5ncyBmb3IgQVJDbmV0IGNhcmRzLCBldGMuCithcmNuZXQudHh0CisJLSBpbmZvIG9uIHRoZSB1c2luZyB0aGUgQVJDbmV0IGRyaXZlciBpdHNlbGYuCithdG0udHh0CisJLSBpbmZvIG9uIHdoZXJlIHRvIGdldCBBVE0gcHJvZ3JhbXMgYW5kIHN1cHBvcnQgZm9yIExpbnV4LgorYXgyNS50eHQKKwktIGluZm8gb24gdXNpbmcgQVguMjUgYW5kIE5FVC9ST00gY29kZSBmb3IgTGludXgKK2JheWNvbS50eHQKKwktIGluZm8gb24gdGhlIGRyaXZlciBmb3IgQmF5Y29tIHN0eWxlIGFtYXRldXIgcmFkaW8gbW9kZW1zCiticmlkZ2UudHh0CisJLSB3aGVyZSB0byBnZXQgdXNlciBzcGFjZSBwcm9ncmFtcyBmb3IgZXRoZXJuZXQgYnJpZGdpbmcgd2l0aCBMaW51eC4KK2NvbXgudHh0CisJLSBpbmZvIG9uIGRyaXZlcnMgZm9yIENPTVggbGluZSBvZiBzeW5jaHJvbm91cyBzZXJpYWwgYWRhcHRlcnMuCitjb3BzLnR4dAorCS0gaW5mbyBvbiB0aGUgQ09QUyBMb2NhbFRhbGsgTGludXggZHJpdmVyCitjczg5eDAudHh0CisJLSB0aGUgQ3J5c3RhbCBMQU4gKENTODkwMC8yMC1iYXNlZCkgRXRoZXJuZXQgSVNBIGFkYXB0ZXIgZHJpdmVyCitkZTR4NS50eHQKKwktIHRoZSBEaWdpdGFsIEV0aGVyV09SS1MgREU0Pz8gYW5kIERFNT8/IFBDSSBFdGhlcm5ldCBkcml2ZXIKK2RlY25ldC50eHQKKwktIGluZm8gb24gdXNpbmcgdGhlIERFQ25ldCBuZXR3b3JraW5nIGxheWVyIGluIExpbnV4LgorZGVwY2EudHh0CisJLSB0aGUgRGlnaXRhbCBERVBDQS9FdGhlcldPUktTIERFMT8/IGFuZCBERTI/PyBMQU5DRSBFdGhlcm5ldCBkcml2ZXIKK2RncnMudHh0CisJLSB0aGUgRGlnaSBJbnRlcm5hdGlvbmFsIFJpZ2h0U3dpdGNoIFNFLVggRXRoZXJuZXQgZHJpdmVyCitkbWZlLnR4dAorCS0gaW5mbyBvbiB0aGUgRGF2aWNvbSBETTkxMDIoQSkvRE05MTMyL0RNOTgwMSBmYXN0IGV0aGVybmV0IGRyaXZlci4KK2UxMDAudHh0CisJLSBpbmZvIG9uIEludGVsJ3MgRXRoZXJFeHByZXNzIFBSTy8xMDAgbGluZSBvZiAxMC8xMDAgYm9hcmRzCitlMTAwMC50eHQKKwktIGluZm8gb24gSW50ZWwncyBFMTAwMCBsaW5lIG9mIGdpZ2FiaXQgZXRoZXJuZXQgYm9hcmRzCitlcWwudHh0CisJLSBzZXJpYWwgSVAgbG9hZCBiYWxhbmNpbmcKK2V0aGVydGFwLnR4dAorCS0gdGhlIEV0aGVydGFwIHVzZXIgc3BhY2UgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGRyaXZlcgorZXdyazMudHh0CisJLSB0aGUgRGlnaXRhbCBFdGhlcldPUktTIDMgREUyMDMvNC81IEV0aGVybmV0IGRyaXZlcgorZmlsdGVyLnR4dAorCS0gTGludXggU29ja2V0IEZpbHRlcmluZworZm9yZTIwMGUudHh0CisJLSBGT1JFIFN5c3RlbXMgUENBLTIwMEUvU0JBLTIwMEUgQVRNIE5JQyBkcml2ZXIgaW5mby4KK2ZyYW1lcmVsYXkudHh0CisJLSBpbmZvIG9uIHVzaW5nIEZyYW1lIFJlbGF5L0RhdGEgTGluayBDb25uZWN0aW9uIElkZW50aWZpZXIgKERMQ0kpLgoraXAtc3lzY3RsLnR4dAorCS0gL3Byb2Mvc3lzL25ldC9pcHY0LyogdmFyaWFibGVzCitpcF9keW5hZGRyLnR4dAorCS0gSVAgZHluYW1pYyBhZGRyZXNzIGhhY2sgZS5nLiBmb3IgYXV0by1kaWFsdXAgbGlua3MKK2lwZGRwLnR4dAorCS0gQXBwbGVUYWxrLUlQIERlY2Fwc3VsYXRpb24gYW5kIEFwcGxlVGFsay1JUCBFbmNhcHN1bGF0aW9uCitpcGhhc2UudHh0CisJLSBJbnRlcnBoYXNlIFBDSSBBVE0gKGkpQ2hpcCBJQSBMaW51eCBkcml2ZXIgaW5mby4KK2lyZGEudHh0CisJLSB3aGVyZSB0byBnZXQgSXJEQSAoaW5mcmFyZWQpIHV0aWxpdGllcyBhbmQgaW5mbyBmb3IgTGludXguCitsYXBiLW1vZHVsZS50eHQKKwktIHByb2dyYW1taW5nIGluZm9ybWF0aW9uIG9mIHRoZSBMQVBCIG1vZHVsZS4KK2x0cGMudHh0CisJLSB0aGUgQXBwbGUgb3IgRmFyYWxsb24gTG9jYWxUYWxrIFBDIGNhcmQgZHJpdmVyCittdWx0aWNhc3QudHh0CisJLSBCZWhhdmlvdXIgb2YgY2FyZHMgdW5kZXIgTXVsdGljYXN0CituY3NhLXRlbG5ldAorCS0gbm90ZXMgb24gaG93IE5DU0EgdGVsbmV0IChET1MpIGJyZWFrcyB3aXRoIE1UVSBkaXNjb3ZlcnkgZW5hYmxlZC4KK25ldC1tb2R1bGVzLnR4dAorCS0gaW5mbyBhbmQgImluc21vZCIgcGFyYW1ldGVycyBmb3IgYWxsIG5ldHdvcmsgZHJpdmVyIG1vZHVsZXMuCituZXRkZXZpY2VzLnR4dAorCS0gaW5mbyBvbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZnVuY3Rpb25zIGV4cG9ydGVkIHRvIHRoZSBrZXJuZWwuCitvbHltcGljLnR4dAorCS0gSUJNIFBDSSBQaXQvUGl0LVBoeS9PbHltcGljIFRva2VuIFJpbmcgZHJpdmVyIGluZm8uCitwb2xpY3ktcm91dGluZy50eHQKKwktIElQIHBvbGljeS1iYXNlZCByb3V0aW5nCitwdC50eHQKKwktIHRoZSBHcmFjaWxpcyBQYWNrZXR3aW4gQVguMjUgZGV2aWNlIGRyaXZlcgorcmF5X2NzLnR4dAorCS0gUmF5bGluayBXaXJlbGVzcyBMQU4gY2FyZCBkcml2ZXIgaW5mby4KK3JvdXRpbmcudHh0CisJLSB0aGUgbmV3IHJvdXRpbmcgbWVjaGFuaXNtCitzaGFwZXIudHh0CisJLSBpbmZvIG9uIHRoZSBtb2R1bGUgdGhhdCBjYW4gc2hhcGUvbGltaXQgdHJhbnNtaXR0ZWQgdHJhZmZpYy4KK3NpczkwMC50eHQKKwktIFNpUyA5MDAvNzAxNiBGYXN0IEV0aGVybmV0IGRldmljZSBkcml2ZXIgaW5mby4KK3NrOThsaW4udHh0CisJLSBNYXJ2ZWxsIFl1a29uIENoaXBzZXQgLyBTeXNLb25uZWN0IFNLLTk4eHggY29tcGxpYW50IEdpZ2FiaXQKKwkgIEV0aGVybmV0IEFkYXB0ZXIgZmFtaWx5IGRyaXZlciBpbmZvCitza2ZwLnR4dAorCS0gU3lzS29ubmVjdCBGRERJIChTSy01eHh4LCBDb21wYXEgTmV0ZWxsaWdlbnQpIGRyaXZlciBpbmZvLgorc21jOS50eHQKKwktIHRoZSBkcml2ZXIgZm9yIFNNQydzIDkwMDAgc2VyaWVzIG9mIEV0aGVybmV0IGNhcmRzCitzbWN0ci50eHQKKwktIFNNQyBUb2tlbkNhcmQgVG9rZW5SaW5nIExpbnV4IGRyaXZlciBpbmZvLgordGNwLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gaG93IFRDUCBvdXRwdXQgdGFrZXMgcGxhY2UuCit0bGFuLnR4dAorCS0gVGh1bmRlckxBTiAoQ29tcGFxIE5ldGVsbGlnZW50IDEwLzEwMCwgT2xpY29tIE9DLTJ4eHgpIGRyaXZlciBpbmZvLgordG1zMzgwdHIudHh0CisJLSBTeXNLb25uZWN0IFRva2VuIFJpbmcgSVNBL1BDSSBhZGFwdGVyIGRyaXZlciBpbmZvLgordHVudGFwLnR4dAorCS0gVFVOL1RBUCBkZXZpY2UgZHJpdmVyLCBhbGxvd2luZyB1c2VyIHNwYWNlIFJ4L1R4IG9mIHBhY2tldHMuCit2b3J0ZXgudHh0CisJLSBpbmZvIG9uIHVzaW5nIDNDb20gVm9ydGV4ICgzYzU5MCwgM2M1OTIsIDNjNTk1LCAzYzU5NykgRXRoZXJuZXQgY2FyZHMuCit3YW4tcm91dGVyLnR4dAorCS0gV2FuIHJvdXRlciBkb2N1bWVudGF0aW9uCit3YW5waXBlLnR4dAorCS0gV0FOUElQRSh0bSkgTXVsdGlwcm90b2NvbCBXQU4gRHJpdmVyIGZvciBMaW51eCBXQU4gUm91dGVyCit3YXZlbGFuLnR4dAorCS0gQVQmVCBHSVMgKG5lZSBOQ1IpIFdhdmVMQU4gY2FyZDogQW4gRXRoZXJuZXQtbGlrZSByYWRpbyB0cmFuc2NlaXZlcgoreDI1LnR4dAorCS0gZ2VuZXJhbCBpbmZvIG9uIFguMjUgZGV2ZWxvcG1lbnQuCit4MjUtaWZhY2UudHh0CisJLSBkZXNjcmlwdGlvbiBvZiB0aGUgWC4yNSBQYWNrZXQgTGF5ZXIgdG8gTEFQQiBkZXZpY2UgaW50ZXJmYWNlLgorejg1MzBkcnYudHh0CisJLSBpbmZvIGFib3V0IExpbnV4IGRyaXZlciBmb3IgWjg1MzAgYmFzZWQgSERMQyBjYXJkcyBmb3IgQVguMjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2MzNTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZjgwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2MzNTkudHh0CkBAIC0wLDAgKzEsNTggQEAKKworM0NPTSBQQ0kgVE9LRU4gTElOSyBWRUxPQ0lUWSBYTCBUT0tFTiBSSU5HIENBUkRTIFJFQURNRQorCitSZWxlYXNlIDAuOS4wIC0gUmVsZWFzZSAgIAorCUp1bCAxN3RoIDIwMDAgTWlrZSBQaGlsbGlwcyAKKworCTEuMi4wIC0gRmluYWwKKwlGZWIgMTd0aCAyMDAyIE1pa2UgUGhpbGxpcHMgCisJVXBkYXRlZCBmb3Igc3VibWlzc2lvbiB0byB0aGUgMi40Lngga2VybmVsLgorCitUaGFua3M6CisJVGVycnkgTXVycGh5IGZyb20gM0NvbSBmb3IgdGVjaCBkb2NzIGFuZCBzdXBwb3J0LAorCUFkYW0gRC4gTGlnYXMgZm9yIHRlc3RpbmcgdGhlIGRyaXZlci4KKyAKK05vdGU6CisJVGhpcyBkcml2ZXIgd2lsbCBOT1Qgd29yayB3aXRoIHRoZSAzQzMzOSBUb2tlbiBSaW5nIGNhcmRzLCB5b3UgbmVlZAordG8gdXNlIHRoZSB0bXMzODAgZHJpdmVyIGluc3RlYWQuCisKK09wdGlvbnM6CisKK1RoZSBkcml2ZXIgYWNjZXB0cyB0aHJlZSBvcHRpb25zOiByaW5nc3BlZWQsIHBrdF9idWZfc3ogYW5kIG1lc3NhZ2VfbGV2ZWwuCisKK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBmb3IgZWFjaCBjYXJkIGZvdW5kLiAKKworcmluZ3NwZWVkOiAgSGFzIG9uZSBvZiB0aHJlZSBzZXR0aW5ncyAwIChkZWZhdWx0KSwgNCBvciAxNi4gIDAgd2lsbCAKK21ha2UgdGhlIGNhcmQgYXV0b3NlbnNlIHRoZSByaW5nc3BlZWQgYW5kIGpvaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHNwZWVkLCAKK3RoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvcHRpb24gZm9yIG1vc3QgcGVvcGxlLiAgNCBvciAxNiBhbGxvdyB5b3UgdG8gCitleHBsaWNpdGx5IGZvcmNlIHRoZSBjYXJkIHRvIG9wZXJhdGUgYXQgYSBjZXJ0YWluIHNwZWVkLiAgVGhlIGNhcmQgd2lsbCBmYWlsIAoraWYgeW91IHRyeSB0byBpbnNlcnQgaXQgYXQgdGhlIHdyb25nIHNwZWVkLiAoQWx0aG91Z2ggc29tZSBodWJzIHdpbGwgYWxsb3cgCit0aGlzIHNvIGJlICp2ZXJ5KiBjYXJlZnVsKS4gIFRoZSBtYWluIHB1cnBvc2UgZm9yIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgcmluZworc3BlZWQgaXMgZm9yIHdoZW4gdGhlIGNhcmQgaXMgZmlyc3Qgb24gdGhlIHJpbmcuICBJbiBhdXRvc2Vuc2UgbW9kZSwgaWYgdGhlIGNhcmQKK2Nhbm5vdCBkZXRlY3QgYW55IGFjdGl2ZSBtb25pdG9ycyBvbiB0aGUgcmluZyBpdCB3aWxsIG9wZW4gYXQgdGhlIHNhbWUgc3BlZWQgYXMKK2l0cyBsYXN0IG9wZW5pbmcuIFRoaXMgY2FuIGJlIGhhemFyZG91cyBpZiB0aGlzIHNwZWVkIGRvZXMgbm90IG1hdGNoIHRoZSBzcGVlZAoreW91IHdhbnQgdGhlIHJpbmcgdG8gb3BlcmF0ZSBhdC4gIAorCitwa3RfYnVmX3N6OiAgVGhpcyBpcyB0aGlzIGluaXRpYWwgcmVjZWl2ZSBidWZmZXIgYWxsb2NhdGlvbiBzaXplLiAgVGhpcyB3aWxsCitkZWZhdWx0IHRvIDQwOTYgaWYgbm8gdmFsdWUgaXMgZW50ZXJlZC4gWW91IG1heSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiB0aGUgCitkcml2ZXIgYnkgc2V0dGluZyB0aGlzIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIG5ldHdvcmsgcGFja2V0IHNpemUsIGFsdGhvdWdoCit0aGUgZHJpdmVyIG5vdyByZS1zaXplcyBidWZmZXJzIGJhc2VkIG9uIE1UVSBzZXR0aW5ncyBhcyB3ZWxsLiAKKworbWVzc2FnZV9sZXZlbDogQ29udHJvbHMgbGV2ZWwgb2YgbWVzc2FnZXMgY3JlYXRlZCBieSB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byAwOgord2hpY2ggb25seSBkaXNwbGF5cyBzdGFydC11cCBhbmQgY3JpdGljYWwgbWVzc2FnZXMuICBQcmVzZW50bHkgYW55IG5vbi16ZXJvIAordmFsdWUgd2lsbCBkaXNwbGF5IGFsbCBzb2Z0IG1lc3NhZ2VzIGFzIHdlbGwuICBOQiBUaGlzIGRvZXMgbm90IHR1cm4gCitkZWJ1Z2dpbmcgbWVzc2FnZXMgb24sIHRoYXQgbXVzdCBiZSBkb25lIGJ5IG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZS4KKworVmFyaWFibGUgTVRVIHNpemU6CisKK1RoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwdG8gZWl0aGVyIDQ1MDAgb3IgMTgwMDAgZGVwZW5kaW5nIHVwb24gCityaW5nIHNwZWVkLiAgVGhlIGRyaXZlciBhbHNvIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVycyBhcyBwYXJ0CitvZiB0aGUgbXR1IHJlLXNpemluZywgc28gaWYgeW91IHNldCBtdHUgPSAxODAwMCwgeW91IHdpbGwgbmVlZCB0byBiZSBhYmxlCit0byBhbGxvY2F0ZSAxNiAqIChza19idWZmIHdpdGggMTgwMDAgYnVmZmVyIHNpemUpIGNhbGwgaXQgMTg1MDAgYnl0ZXMgcGVyIHJpbmcgCitwb3NpdGlvbiA9IDI5NiwwMDAgYnl0ZXMgb2YgbWVtb3J5IHNwYWNlLCBwbHVzIG9mIGNvdXJzZSBhbnl0aGluZyAKK25lY2Vzc2FyeSBmb3IgdGhlIHR4IHNrX2J1ZmYncy4gIFJlbWVtYmVyIHRoaXMgaXMgcGVyIGNhcmQsIHNvIGlmIHlvdSBhcmUKK2J1aWxkaW5nIHJvdXRlcnMsIGdhdGV3YXkncyBldGMsIHlvdSBjb3VsZCBzdGFydCB0byB1c2UgYSBsb3Qgb2YgbWVtb3J5CityZWFsIGZhc3QuCisKKzIvMTcvMDIgTWlrZSBQaGlsbGlwcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQ1YjcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA1LnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGUgM0NvbSBFdGhlcmxpbmsgUGx1cyAoM2M1MDUpIGRyaXZlci4KKworVGhpcyBkcml2ZXIgbm93IHVzZXMgRE1BLiAgVGhlcmUgaXMgY3VycmVudGx5IG5vIHN1cHBvcnQgZm9yIFBJTyBvcGVyYXRpb24uCitUaGUgZGVmYXVsdCBETUEgY2hhbm5lbCBpcyA2OyB0aGlzIGlzIF9ub3RfIGF1dG9wcm9iZWQsIHNvIHlvdSBtdXN0CittYWtlIHN1cmUgeW91IGNvbmZpZ3VyZSBpdCBjb3JyZWN0bHkuICBJZiBsb2FkaW5nIHRoZSBkcml2ZXIgYXMgYQorbW9kdWxlLCB5b3UgY2FuIGRvIHRoaXMgd2l0aCAibW9kcHJvYmUgM2M1MDUgZG1hPW4iLiAgSWYgdGhlIGRyaXZlciBpcworbGlua2VkIHN0YXRpY2FsbHkgaW50byB0aGUga2VybmVsLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGFuICJldGhlcj0iCitzdGF0ZW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZSwgb3IgY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIEVMUF9ETUEgaW4gM2M1MDUuaC4KKworVGhlIGRyaXZlciB3aWxsIHdhcm4geW91IGlmIGl0IGhhcyB0byBmYWxsIGJhY2sgb24gdGhlIGNvbXBpbGVkIGluCitkZWZhdWx0IERNQSBjaGFubmVsLiAKKworSWYgbm8gYmFzZSBhZGRyZXNzIGlzIGdpdmVuIGF0IGJvb3QgdGltZSwgdGhlIGRyaXZlciB3aWxsIGF1dG9wcm9iZQorcG9ydHMgMHgzMDAsIDB4MjgwIGFuZCAweDMxMCAoaW4gdGhhdCBvcmRlcikuICBJZiBubyBJUlEgaXMgZ2l2ZW4sIHRoZSBkcml2ZXIKK3dpbGwgdHJ5IHRvIHByb2JlIGZvciBpdC4KKworVGhlIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBhIGxvYWRhYmxlIG1vZHVsZS4gIFNlZSBuZXQtbW9kdWxlcy50eHQgZm9yIGRldGFpbHMKK29mIHRoZSBwYXJhbWV0ZXJzIGl0IGNhbiB0YWtlLiAgCisKK1RoZW9yZXRpY2FsbHksIG9uZSBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyIGNhbiBub3cgcnVuIG11bHRpcGxlIGNhcmRzLAoraW4gdGhlIHN0YW5kYXJkIHdheSAod2hlbiBsb2FkaW5nIGEgbW9kdWxlLCBzYXkgIm1vZHByb2JlIDNjNTA1Citpbz0weDMwMCwweDM0MCBpcnE9MTAsMTEgZG1hPTYsNyIgb3Igd2hhdGV2ZXIpLiAgSSBoYXZlIG5vdCB0ZXN0ZWQKK3RoaXMsIHRob3VnaC4KKworVGhlIGRyaXZlciBtYXkgbm93IHN1cHBvcnQgcmV2aXNpb24gMiBoYXJkd2FyZTsgdGhlIGRlcGVuZGVuY3kgb24KK2JlaW5nIGFibGUgdG8gcmVhZCB0aGUgaG9zdCBjb250cm9sIHJlZ2lzdGVyIGhhcyBiZWVuIHJlbW92ZWQuICBUaGlzCitpcyBhbHNvIHVudGVzdGVkLCBzaW5jZSBJIGRvbid0IGhhdmUgYSBzdWl0YWJsZSBjYXJkLgorCitLbm93biBwcm9ibGVtczoKKyBJIHN0aWxsIHNlZSAiRE1BIHVwbG9hZCB0aW1lZCBvdXQiIG1lc3NhZ2VzIGZyb20gdGltZSB0byB0aW1lLiAgVGhlc2UKK3NlZW0gdG8gYmUgZmFpcmx5IG5vbi1mYXRhbCB0aG91Z2guCisgVGhlIGNhcmQgaXMgb2xkIGFuZCBzbG93LgorCitUbyBkbzoKKyBJbXByb3ZlIHByb2JlL3NldHVwIGNvZGUKKyBUZXN0IG11bHRpY2FzdCBhbmQgcHJvbWlzY3VvdXMgb3BlcmF0aW9uCisKK0F1dGhvcnM6CisgVGhlIGRyaXZlciBpcyBtYWlubHkgd3JpdHRlbiBieSBDcmFpZyBTb3V0aGVyZW4sIGVtYWlsCisgPGNyYWlnc0BpbmVsdWtpLmFwYW5hLm9yZy5hdT4uCisgUGFydHMgb2YgdGhlIGRyaXZlciAoYWRhcHRpbmcgdGhlIGRyaXZlciB0byAxLjEuNCsga2VybmVscywKKyBJUlEvYWRkcmVzcyBkZXRlY3Rpb24sIHNvbWUgY2hhbmdlcykgYW5kIHRoaXMgUkVBRE1FIGJ5CisgSnVoYSBMYWlobyA8amxhaWhvQGljaGFvcy5udWxsbmV0LmZpPi4KKyBETUEgbW9kZSwgbW9yZSBmaXhlcywgZXRjLCBieSBQaGlsaXAgQmx1bmRlbGwgPHBqYjI3QGNhbS5hYy51az4KKyBNdWx0aWNhcmQgc3VwcG9ydCwgU29mdHdhcmUgY29uZmlndXJhYmxlIERNQSwgZXRjLiwgYnkKKyBDaHJpc3RvcGhlciBDb2xsaW5zIDxjY29sbGluc0BwY3VnLm9yZy5hdT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2E5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDkudHh0CkBAIC0wLDAgKzEsMjEwIEBACitMaW51eCBhbmQgdGhlIDNDb20gRXRoZXJMaW5rIElJSSBTZXJpZXMgRXRoZXJjYXJkcyAoZHJpdmVyIHYxLjE4YyBhbmQgaGlnaGVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGluc3RydWN0aW9ucyBhbmQgY2F2ZWF0cyBmb3IgdjEuMThjIGFuZCBoaWdoZXIgdmVyc2lvbnMKK29mIHRoZSAzYzUwOSBkcml2ZXIuIFlvdSBzaG91bGQgbm90IHVzZSB0aGUgZHJpdmVyIHdpdGhvdXQgcmVhZGluZyB0aGlzIGZpbGUuCisKK3JlbGVhc2UgMS4wCisyOCBGZWJydWFyeSAyMDAyCitDdXJyZW50IG1haW50YWluZXIgKGNvcnJlY3Rpb25zIHRvKToKKyAgRGF2aWQgUnVnZ2llcm8gPGpkckBmYXJmYWxsZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKDApIEludHJvZHVjdGlvbgorCitUaGUgZm9sbG93aW5nIGFyZSBub3RlcyBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIDNDb20gRXRoZXJMaW5rIElJSSBzZXJpZXMKK2V0aGVyY2FyZHMgaW4gTGludXguIFRoZXNlIGNhcmRzIGFyZSBjb21tb25seSBrbm93biBieSB0aGUgbW9zdCB3aWRlbHktdXNlZAorY2FyZCdzIDNDb20gbW9kZWwgbnVtYmVyLCAzYzUwOS4gVGhleSBhcmUgYWxsIDEwbWIvcyBJU0EtYnVzIGNhcmRzIGFuZCBzaG91bGRuJ3QKK2JlIChidXQgc29tZXRpbWVzIGFyZSkgY29uZnVzZWQgd2l0aCB0aGUgc2ltaWxhcmx5LW51bWJlcmVkIFBDSS1idXMgIjNjOTA1IgorKGFrYSAiVm9ydGV4IiBvciAiQm9vbWVyYW5nIikgc2VyaWVzLiAgS2VybmVsIHN1cHBvcnQgZm9yIHRoZSAzYzUwOSBmYW1pbHkgaXMKK3Byb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgM2M1MDkuYywgd2hpY2ggaGFzIGNvZGUgdG8gc3VwcG9ydCBhbGwgb2YgdGhlIGZvbGxvd2luZworbW9kZWxzOgorCisgIDNjNTA5IChvcmlnaW5hbCBJU0EgY2FyZCkKKyAgM2M1MDlCIChsYXRlciByZXZpc2lvbiBvZiB0aGUgSVNBIGNhcmQ7IHN1cHBvcnRzIGZ1bGwtZHVwbGV4KQorICAzYzU4OSAoUENNQ0lBKQorICAzYzU4OUIgKGxhdGVyIHJldmlzaW9uIG9mIHRoZSAzYzU4OTsgc3VwcG9ydHMgZnVsbC1kdXBsZXgpCisgIDNjNTI5IChNQ0EpCisgIDNjNTc5IChFSVNBKQorCitMYXJnZSBwb3J0aW9ucyBvZiB0aGlzIGRvY3VtZW50YXRpb24gd2VyZSBoZWF2aWx5IGJvcnJvd2VkIGZyb20gdGhlIGd1aWRlCit3cml0dGVuIHRoZSBvcmlnaW5hbCBhdXRob3Igb2YgdGhlIDNjNTA5IGRyaXZlciwgRG9uYWxkIEJlY2tlci4gVGhlIG1hc3RlcgorY29weSBvZiB0aGF0IGRvY3VtZW50LCB3aGljaCBjb250YWlucyBub3RlcyBvbiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLAorY3VycmVudGx5IHJlc2lkZXMgb24gU2N5bGQgd2ViIHNlcnZlcjogaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8zYzUwOS5odG1sLgorCisKKygxKSBTcGVjaWFsIERyaXZlciBGZWF0dXJlcworCitPdmVycmlkaW5nIGNhcmQgc2V0dGluZ3MKKworVGhlIGRyaXZlciBhbGxvd3MgYm9vdC0gb3IgbG9hZC10aW1lIG92ZXJyaWRpbmcgb2YgdGhlIGNhcmQncyBkZXRlY3RlZCBJT0FERFIsCitJUlEsIGFuZCB0cmFuc2NlaXZlciBzZXR0aW5ncywgYWx0aG91Z2ggdGhpcyBjYXBhYmlsaXR5IHNob3VsZG4ndCBnZW5lcmFsbHkgYmUKK25lZWRlZCBleGNlcHQgdG8gZW5hYmxlIGZ1bGwtZHVwbGV4IG1vZGUgKHNlZSBiZWxvdykuIEFuIGV4YW1wbGUgb2YgdGhlIHN5bnRheAorZm9yIExJTE8gcGFyYW1ldGVycyBmb3IgZG9pbmcgdGhpczoKKworICAgIGV0aGVyPTEwLDB4MzEwLDMsMHgzYzUwOSxldGgwIAorCitUaGlzIGNvbmZpZ3VyZXMgdGhlIGZpcnN0IGZvdW5kIDNjNTA5IGNhcmQgZm9yIElSUSAxMCwgYmFzZSBJL08gMHgzMTAsIGFuZAordHJhbnNjZWl2ZXIgdHlwZSAzICgxMGJhc2UyKS4gVGhlIGZsYWcgIjB4M2M1MDkiIG11c3QgYmUgc2V0IHRvIGF2b2lkIGNvbmZsaWN0cword2l0aCBvdGhlciBjYXJkIHR5cGVzIHdoZW4gb3ZlcnJpZGluZyB0aGUgSS9PIGFkZHJlc3MuIFdoZW4gdGhlIGRyaXZlciBpcworbG9hZGVkIGFzIGEgbW9kdWxlLCBvbmx5IHRoZSBJUlEgYW5kIHRyYW5zY2VpdmVyIHNldHRpbmcgbWF5IGJlIG92ZXJyaWRkZW4uCitGb3IgZXhhbXBsZSwgc2V0dGluZyB0d28gY2FyZHMgdG8gMTBiYXNlMi9JUlExMCBhbmQgQVVJL0lSUTExIGlzIGRvbmUgYnkgdXNpbmcKK3RoZSB4Y3ZyIGFuZCBpcnEgbW9kdWxlIG9wdGlvbnM6CisKKyAgIG9wdGlvbnMgM2M1MDkgeGN2cj0zLDEgaXJxPTEwLDExCisKKworKDIpIEZ1bGwtZHVwbGV4IG1vZGUKKworVGhlIHYxLjE4YyBkcml2ZXIgYWRkZWQgc3VwcG9ydCBmb3IgdGhlIDNjNTA5QidzIGZ1bGwtZHVwbGV4IGNhcGFiaWxpdGllcy4KK0luIG9yZGVyIHRvIGVuYWJsZSBhbmQgc3VjY2Vzc2Z1bGx5IHVzZSBmdWxsLWR1cGxleCBtb2RlLCB0aHJlZSBjb25kaXRpb25zCittdXN0IGJlIG1ldDogCisKKyhhKSBZb3UgbXVzdCBoYXZlIGEgRXRoZXJsaW5rIElJSSBjYXJkIG1vZGVsIHdob3NlIGhhcmR3YXJlIHN1cHBvcnRzIGZ1bGwtCitkdXBsZXggb3BlcmF0aW9ucy4gQ3VycmVudGx5LCB0aGUgb25seSBtZW1iZXJzIG9mIHRoZSAzYzUwOSBmYW1pbHkgdGhhdCBhcmUKK3Bvc2l0aXZlbHkga25vd24gdG8gc3VwcG9ydCBmdWxsLWR1cGxleCBhcmUgdGhlIDNjNTA5QiAoSVNBIGJ1cykgYW5kIDNjNTg5QgorKFBDTUNJQSkgY2FyZHMuIENhcmRzIHdpdGhvdXQgdGhlICJCIiBtb2RlbCBkZXNpZ25hdGlvbiBkbyAqbm90KiBzdXBwb3J0CitmdWxsLWR1cGxleCBtb2RlOyB0aGVzZSBpbmNsdWRlIHRoZSBvcmlnaW5hbCAzYzUwOSAobm8gIkIiKSwgdGhlIG9yaWdpbmFsCiszYzU4OSwgdGhlIDNjNTI5IChNQ0EgYnVzKSwgYW5kIHRoZSAzYzU3OSAoRUlTQSBidXMpLgorCisoYikgWW91IG11c3QgYmUgdXNpbmcgeW91ciBjYXJkJ3MgMTBiYXNlVCB0cmFuc2NlaXZlciAoaS5lLiwgdGhlIFJKLTQ1Citjb25uZWN0b3IpLCBub3QgaXRzIEFVSSAodGhpY2stbmV0KSBvciAxMGJhc2UyICh0aGluLW5ldC9jb2F4KSBpbnRlcmZhY2VzLgorQVVJIGFuZCAxMGJhc2UyIG5ldHdvcmsgY2FibGluZyBpcyBwaHlzaWNhbGx5IGluY2FwYWJsZSBvZiBmdWxsLWR1cGxleAorb3BlcmF0aW9uLgorCisoYykgTW9zdCBpbXBvcnRhbnRseSwgeW91ciAzYzUwOUIgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSBsaW5rIHBhcnRuZXIgdGhhdCBpcworaXRzZWxmIGZ1bGwtZHVwbGV4IGNhcGFibGUuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBvbmUgb2YgdHdvIHRoaW5nczogYSBmdWxsLQorZHVwbGV4LWNhcGFibGUgIEV0aGVybmV0IHN3aXRjaCAoKm5vdCogYSBodWIpLCBvciBhIGZ1bGwtZHVwbGV4LWNhcGFibGUgTklDIG9uCithbm90aGVyIHN5c3RlbSB0aGF0J3MgY29ubmVjdGVkIGRpcmVjdGx5IHRvIHRoZSAzYzUwOUIgdmlhIGEgY3Jvc3NvdmVyIGNhYmxlLgorIAorLy8vLy9FeHRyZW1lbHkgaW1wb3J0YW50IGNhdXRpb24gY29uY2VybmluZyBmdWxsLWR1cGxleCBtb2RlLy8vLy8KK1VuZGVyc3RhbmQgdGhhdCB0aGUgM2M1MDlCJ3MgaGFyZHdhcmUncyBmdWxsLWR1cGxleCBzdXBwb3J0IGlzIG11Y2ggbW9yZQorbGltaXRlZCB0aGFuIHRoYXQgcHJvdmlkZSBieSBtb3JlIG1vZGVybiBuZXR3b3JrIGludGVyZmFjZSBjYXJkcy4gQWx0aG91Z2gKK2F0IHRoZSBwaHlzaWNhbCBsYXllciBvZiB0aGUgbmV0d29yayBpdCBmdWxseSBzdXBwb3J0cyBmdWxsLWR1cGxleCBvcGVyYXRpb24sCit0aGUgY2FyZCB3YXMgZGVzaWduZWQgYmVmb3JlIHRoZSBjdXJyZW50IEV0aGVybmV0IGF1dG8tbmVnb3RpYXRpb24gKE4td2F5KQorc3BlYyB3YXMgd3JpdHRlbi4gVGhpcyBtZWFucyB0aGF0IHRoZSAzYzUwOUIgZmFtaWx5ICoqKmNhbm5vdCBhbmQgd2lsbCBub3QKK2F1dG8tbmVnb3RpYXRlIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbiB3aXRoIGl0cyBsaW5rIHBhcnRuZXIgdW5kZXIgYW55CitjaXJjdW1zdGFuY2VzLCBubyBtYXR0ZXIgaG93IGl0IGlzIGluaXRpYWxpemVkKioqLiBJZiB0aGUgZnVsbC1kdXBsZXggbW9kZQorb2YgdGhlIDNjNTA5QiBpcyBlbmFibGVkLCBpdHMgbGluayBwYXJ0bmVyIHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0byBiZQoraW5kZXBlbmRlbnRseSBfZm9yY2VkXyBpbnRvIGZ1bGwtZHVwbGV4IG1vZGUgYXMgd2VsbDsgb3RoZXJ3aXNlIHZhcmlvdXMgbmFzdHkKK2ZhaWx1cmVzIHdpbGwgb2NjdXIgLSBhdCB0aGUgdmVyeSBsZWFzdCwgeW91J2xsIHNlZSBtYXNzaXZlIG51bWJlcnMgb2YgcGFja2V0Citjb2xsaXNpb25zLiBUaGlzIGlzIG9uZSBvZiB2ZXJ5IHJhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSBkaXNhYmxpbmcgYXV0by0KK25lZ290aWF0aW9uIGFuZCBmb3JjaW5nIHRoZSBkdXBsZXggbW9kZSBvZiBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgb3Igc3dpdGNoCit3b3VsZCBldmVyIGJlIG5lY2Vzc2FyeSBvciBkZXNpcmFibGUuCisKKworKDMpIEF2YWlsYWJsZSBUcmFuc2NlaXZlciBUeXBlcworCitGb3IgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciB2MS4xOGMgYW5kIGFib3ZlLCB0aGUgYXZhaWxhYmxlIHRyYW5zY2VpdmVyIHR5cGVzIGFyZToKKyAKKzAgIHRyYW5zY2VpdmVyIHR5cGUgZnJvbSBFRVBST00gY29uZmlnIChub3JtYWxseSAxMGJhc2VUKTsgZm9yY2UgaGFsZi1kdXBsZXgKKzEgIEFVSSAodGhpY2stbmV0IC8gREIxNSBjb25uZWN0b3IpCisyICAodW5kZWZpbmVkKQorMyAgMTBiYXNlMiAodGhpbi1uZXQgPT0gY29heCAvIEJOQyBjb25uZWN0b3IpCis0ICAxMGJhc2VUIChSSi00NSBjb25uZWN0b3IpOyBmb3JjZSBoYWxmLWR1cGxleCBtb2RlCis4ICB0cmFuc2NlaXZlciB0eXBlIGFuZCBkdXBsZXggbW9kZSB0YWtlbiBmcm9tIGNhcmQncyBFRVBST00gY29uZmlnIHNldHRpbmdzCisxMiAxMGJhc2VUIChSSi00NSBjb25uZWN0b3IpOyBmb3JjZSBmdWxsLWR1cGxleCBtb2RlCisKK1ByaW9yIHRvIGRyaXZlciB2ZXJzaW9uIDEuMThjLCBvbmx5IHRyYW5zY2VpdmVyIGNvZGVzIDAtNCB3ZXJlIHN1cHBvcnRlZC4gTm90ZQordGhhdCB0aGUgbmV3IHRyYW5zY2VpdmVyIGNvZGVzIDggYW5kIDEyIGFyZSB0aGUgKm9ubHkqIG9uZXMgdGhhdCB3aWxsIGVuYWJsZQorZnVsbC1kdXBsZXggbW9kZSwgbm8gbWF0dGVyIHdoYXQgdGhlIGNhcmQncyBkZXRlY3RlZCBFRVBST00gc2V0dGluZ3MgbWlnaHQgYmUuCitUaGlzIGluc3VyZWQgdGhhdCBtZXJlbHkgdXBncmFkaW5nIHRoZSBkcml2ZXIgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24gd291bGQKK25ldmVyIGF1dG9tYXRpY2FsbHkgZW5hYmxlIGZ1bGwtZHVwbGV4IG1vZGUgaW4gYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uOworaXQgbXVzdCBhbHdheXMgYmUgZXhwbGljaXRseSBlbmFibGVkIHZpYSBvbmUgb2YgdGhlc2UgY29kZSBpbiBvcmRlciB0byBiZQorYWN0aXZhdGVkLgorICAKKworKDRhKSBJbnRlcnByZXRhdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBhbmQgY29tbW9uIHByb2JsZW1zCisKK0Vycm9yIE1lc3NhZ2VzCisKK2V0aDA6IEluZmluaXRlIGxvb3AgaW4gaW50ZXJydXB0LCBzdGF0dXMgMjAxMS4gCitUaGVzZSBhcmUgIm1vc3RseSBoYXJtbGVzcyIgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGRyaXZlciBoYWQgdG9vIG11Y2gKK3dvcmsgZHVyaW5nIHRoYXQgaW50ZXJydXB0IGN5Y2xlLiBXaXRoIGEgc3RhdHVzIG9mIDB4MjAxMSB5b3UgYXJlIHJlY2VpdmluZworcGFja2V0cyBmYXN0ZXIgdGhhbiB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGNhcmQuIFRoaXMgc2hvdWxkIGJlIHJhcmUKK29yIGltcG9zc2libGUgaW4gbm9ybWFsIG9wZXJhdGlvbi4gUG9zc2libGUgY2F1c2VzIG9mIHRoaXMgZXJyb3IgcmVwb3J0IGFyZToKKyAKKyAgIC0gYSAiZ3JlZW4iIG1vZGUgZW5hYmxlZCB0aGF0IHNsb3dzIHRoZSBwcm9jZXNzb3IgZG93biB3aGVuIHRoZXJlIGlzIG5vCisgICAgIGtleWJvYXJkIGFjdGl2aXRpeS4gCisKKyAgIC0gc29tZSBvdGhlciBkZXZpY2Ugb3IgZGV2aWNlIGRyaXZlciBob2dnaW5nIHRoZSBidXMgb3IgZGlzYWJsaW5nIGludGVycnVwdHMuCisgICAgIENoZWNrIC9wcm9jL2ludGVycnVwdHMgZm9yIGV4Y2Vzc2l2ZSBpbnRlcnJ1cHQgY291bnRzLiBUaGUgdGltZXIgdGljaworICAgICBpbnRlcnJ1cHQgc2hvdWxkIGFsd2F5cyBiZSBpbmNyZW1lbnRpbmcgZmFzdGVyIHRoYW4gdGhlIG90aGVycy4gCisKK05vIHJlY2VpdmVkIHBhY2tldHMgCitJZiBhIDNjNTA5LCAzYzU2MiBvciAzYzU4OSBjYW4gc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0IHBhY2tldHMsIGJ1dCBuZXZlcgorcmVjZWl2ZXMgcGFja2V0cyAoYXMgcmVwb3J0ZWQgYnkgL3Byb2MvbmV0L2RldiBvciAnaWZjb25maWcnKSB5b3UgbGlrZWx5CitoYXZlIGFuIGludGVycnVwdCBsaW5lIHByb2JsZW0uIENoZWNrIC9wcm9jL2ludGVycnVwdHMgdG8gdmVyaWZ5IHRoYXQgdGhlCitjYXJkIGlzIGFjdHVhbGx5IGdlbmVyYXRpbmcgaW50ZXJydXB0cy4gSWYgdGhlIGludGVycnVwdCBjb3VudCBpcyBub3QKK2luY3JlYXNpbmcgeW91IGxpa2VseSBoYXZlIGEgcGh5c2ljYWwgY29uZmxpY3Qgd2l0aCB0d28gZGV2aWNlcyB0cnlpbmcgdG8KK3VzZSB0aGUgc2FtZSBJU0EgSVJRIGxpbmUuIFRoZSBjb21tb24gY29uZmxpY3QgaXMgd2l0aCBhIHNvdW5kIGNhcmQgb24gSVJRMTAKK29yIElSUTUsIGFuZCB0aGUgZWFzaWVzdCBzb2x1dGlvbiBpcyB0byBtb3ZlIHRoZSAzYzUwOSB0byBhIGRpZmZlcmVudAoraW50ZXJydXB0IGxpbmUuIElmIHRoZSBkZXZpY2UgaXMgcmVjZWl2aW5nIHBhY2tldHMgYnV0ICdwaW5nJyBkb2Vzbid0IHdvcmssCit5b3UgaGF2ZSBhIHJvdXRpbmcgcHJvYmxlbS4KKworVHggQ2FycmllciBFcnJvcnMgUmVwb3J0ZWQgaW4gL3Byb2MvbmV0L2RldiAKK0lmIGFuIEV0aGVyTGluayBJSUkgYXBwZWFycyB0byB0cmFuc21pdCBwYWNrZXRzLCBidXQgdGhlICJUeCBjYXJyaWVyIGVycm9ycyIKK2ZpZWxkIGluIC9wcm9jL25ldC9kZXYgaW5jcmVtZW50cyBhcyBxdWlja2x5IGFzIHRoZSBUeCBwYWNrZXQgY291bnQsIHlvdQorbGlrZWx5IGhhdmUgYW4gdW50ZXJtaW5hdGVkIG5ldHdvcmsgb3IgdGhlIGluY29ycmVjdCBtZWRpYSB0cmFuc2NlaXZlciBzZWxlY3RlZC4gCisKKzNjNTA5QiBjYXJkIGlzIG5vdCBkZXRlY3RlZCBvbiBtYWNoaW5lcyB3aXRoIGFuIElTQSBQblAgQklPUy4gCitXaGlsZSB0aGUgdXBkYXRlZCBkcml2ZXIgd29ya3Mgd2l0aCBtb3N0IFBuUCBCSU9TIHByb2dyYW1zLCBpdCBkb2VzIG5vdCB3b3JrCit3aXRoIGFsbC4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgZGlzYWJsaW5nIFBuUCBzdXBwb3J0IHVzaW5nIHRoZSAzQ29tLXN1cHBsaWVkCitzZXR1cCBwcm9ncmFtLiAKKworM2M1MDkgY2FyZCBpcyBub3QgZGV0ZWN0ZWQgb24gb3ZlcmNsb2NrZWQgbWFjaGluZXMgCitJbmNyZWFzZSB0aGUgZGVsYXkgdGltZSBpbiBpZF9yZWFkX2VlcHJvbSgpIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUsIDUwMCwKK3RvIGFuIGFic3VyZGx5IGhpZ2ggdmFsdWUsIHN1Y2ggYXMgNTAwMC4gCisKKworKDRiKSBEZWNvZGluZyBTdGF0dXMgYW5kIEVycm9yIE1lc3NhZ2VzCisKK1RoZSBiaXRzIGluIHRoZSBtYWluIHN0YXR1cyByZWdpc3RlciBhcmU6IAorCit2YWx1ZSAJZGVzY3JpcHRpb24KKzB4MDEgCUludGVycnVwdCBsYXRjaAorMHgwMiAJVHggb3ZlcnJ1biwgb3IgUnggdW5kZXJydW4KKzB4MDQgCVR4IGNvbXBsZXRlCisweDA4IAlUeCBGSUZPIHJvb20gYXZhaWxhYmxlCisweDEwIAlBIGNvbXBsZXRlIFJ4IHBhY2tldCBoYXMgYXJyaXZlZAorMHgyMCAJQSBSeCBwYWNrZXQgaGFzIHN0YXJ0ZWQgdG8gYXJyaXZlCisweDQwIAlUaGUgZHJpdmVyIGhhcyByZXF1ZXN0ZWQgYW4gaW50ZXJydXB0CisweDgwIAlTdGF0aXN0aWNzIGNvdW50ZXIgbmVhcmx5IGZ1bGwKKworVGhlIGJpdHMgaW4gdGhlIHRyYW5zbWl0IChUeCkgc3RhdHVzIHdvcmQgYXJlOiAKKwordmFsdWUgCWRlc2NyaXB0aW9uCisweDAyIAlPdXQtb2Ytd2luZG93IGNvbGxpc2lvbi4KKzB4MDQgCVN0YXR1cyBzdGFjayBvdmVyZmxvdyAobm9ybWFsbHkgaW1wb3NzaWJsZSkuCisweDA4IAkxNiBjb2xsaXNpb25zLgorMHgxMCAJVHggdW5kZXJydW4gKG5vdCBlbm91Z2ggUENJIGJ1cyBiYW5kd2lkdGgpLgorMHgyMCAJVHggamFiYmVyLgorMHg0MCAJVHggaW50ZXJydXB0IHJlcXVlc3RlZC4KKzB4ODAgCVN0YXR1cyBpcyB2YWxpZCAodGhpcyBzaG91bGQgYWx3YXlzIGJlIHNldCkuCisKKworV2hlbiBhIHRyYW5zbWl0IGVycm9yIG9jY3VycyB0aGUgZHJpdmVyIHByb2R1Y2VzIGEgc3RhdHVzIG1lc3NhZ2Ugc3VjaCBhcyAKKworICAgZXRoMDogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyByZWdpc3RlciA4MgorCitUaGUgdHdvIHZhbHVlcyB0eXBpY2FsbHkgc2VlbiBoZXJlIGFyZToKKworMHg4MiAKK091dCBvZiB3aW5kb3cgY29sbGlzaW9uLiBUaGlzIHR5cGljYWxseSBvY2N1cnMgd2hlbiBzb21lIG90aGVyIEV0aGVybmV0Citob3N0IGlzIGluY29ycmVjdGx5IHNldCB0byBmdWxsIGR1cGxleCBvbiBhIGhhbGYgZHVwbGV4IG5ldHdvcmsuIAorCisweDg4IAorMTYgY29sbGlzaW9ucy4gVGhpcyB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gdGhlIG5ldHdvcmsgaXMgZXhjZXB0aW9uYWxseSBidXN5CitvciB3aGVuIGFub3RoZXIgaG9zdCBkb2Vzbid0IGNvcnJlY3RseSBiYWNrIG9mZiBhZnRlciBhIGNvbGxpc2lvbi4gSWYgdGhpcworZXJyb3IgaXMgbWl4ZWQgd2l0aCAweDgyIGVycm9ycyBpdCBpcyB0aGUgcmVzdWx0IG9mIGEgaG9zdCBpbmNvcnJlY3RseSBzZXQKK3RvIGZ1bGwgZHVwbGV4IChzZWUgYWJvdmUpLgorCitCb3RoIG9mIHRoZXNlIGVycm9ycyBhcmUgdGhlIHJlc3VsdCBvZiBuZXR3b3JrIHByb2JsZW1zIHRoYXQgc2hvdWxkIGJlCitjb3JyZWN0ZWQuIFRoZXkgZG8gbm90IHJlcHJlc2VudCBkcml2ZXIgbWFsZnVuY3Rpb24uCisKKworKDUpIFJldmlzaW9uIGhpc3RvcnkgKHRoaXMgZmlsZSkKKworMjhGZWIwMiB2MS4wICBEUiAgIE5ldzsgbWFqb3IgcG9ydGlvbnMgYmFzZWQgb24gQmVja2VyIG9yaWdpbmFsIDNjNTA5IGRvY3MKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy82cGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlZDJiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy82cGFjay50eHQKQEAgLTAsMCArMSwxNzUgQEAKK1RoaXMgaXMgdGhlIDZwYWNrLW1pbmktSE9XVE8sIHdyaXR0ZW4gYnkKKworQW5kcmVhcyBL9m5zZ2VuIERHM0tRCitJbnRlcm5ldDogYWprQGllaGsucnd0aC1hYWNoZW4uZGUKK0FNUFItbmV0OiBkZzNrcUBkYjBwcmEuYW1wci5vcmcKK0FYLjI1OiAgICBkZzNrcUBkYjBhY2guI25ydy5kZXUuZXUKKworTGFzdCB1cGRhdGU6IEFwcmlsIDcsIDE5OTgKKworMS4gV2hhdCBpcyA2cGFjaywgYW5kIHdoYXQgYXJlIHRoZSBhZHZhbnRhZ2VzIHRvIEtJU1M/CisKKzZwYWNrIGlzIGEgdHJhbnNtaXNzaW9uIHByb3RvY29sIGZvciBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIFBDIGFuZAordGhlIFROQyBvdmVyIGEgc2VyaWFsIGxpbmUuIEl0IGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIEtJU1MuCisKKzZwYWNrIGhhcyB0d28gbWFqb3IgYWR2YW50YWdlczoKKy0gVGhlIFBDIGlzIGdpdmVuIGZ1bGwgY29udHJvbCBvdmVyIHRoZSByYWRpbworICBjaGFubmVsLiBTcGVjaWFsIGNvbnRyb2wgZGF0YSBpcyBleGNoYW5nZWQgYmV0d2VlbiB0aGUgUEMgYW5kIHRoZSBUTkMgc28KKyAgdGhhdCB0aGUgUEMga25vd3MgYXQgYW55IHRpbWUgaWYgdGhlIFROQyBpcyByZWNlaXZpbmcgZGF0YSwgaWYgYSBUTkMKKyAgYnVmZmVyIHVuZGVycnVuIG9yIG92ZXJydW4gaGFzIG9jY3VycmVkLCBpZiB0aGUgUFRUIGlzCisgIHNldCBhbmQgc28gb24uIFRoaXMgY29udHJvbCBkYXRhIGlzIHByb2Nlc3NlZCBhdCBhIGhpZ2hlciBwcmlvcml0eSB0aGFuCisgIG5vcm1hbCBkYXRhLCBzbyBhIGRhdGEgc3RyZWFtIGNhbiBiZSBpbnRlcnJ1cHRlZCBhdCBhbnkgdGltZSB0byBpc3N1ZSBhbgorICBpbXBvcnRhbnQgZXZlbnQuIFRoaXMgaGVscHMgdG8gaW1wcm92ZSB0aGUgY2hhbm5lbCBhY2Nlc3MgYW5kIHRpbWluZyAKKyAgYWxnb3JpdGhtcyBhcyBldmVyeXRoaW5nIGlzIGNvbXB1dGVkIGluIHRoZSBQQy4gSXQgd291bGQgZXZlbiBiZSBwb3NzaWJsZSAKKyAgdG8gZXhwZXJpbWVudCB3aXRoIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIHRoZSBrbm93biBDU01BIGFuZCAKKyAgREFNQSBjaGFubmVsIGFjY2VzcyBtZXRob2RzLgorICBUaGlzIGtpbmQgb2YgcmVhbC10aW1lIGNvbnRyb2wgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gc3VwcGx5IHNldmVyYWwKKyAgVE5DcyB0aGF0IGFyZSBjb25uZWN0ZWQgYmV0d2VlbiBlYWNoIG90aGVyIGFuZCB0aGUgUEMgYnkgYSBkYWlzeSBjaGFpbgorICAoaG93ZXZlciwgdGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGJ5IHRoZSBMaW51eCA2cGFjayBkcml2ZXIpLgorCistIEVhY2ggcGFja2V0IHRyYW5zZmVycmVkIG92ZXIgdGhlIHNlcmlhbCBsaW5lIGlzIHN1cHBsaWVkIHdpdGggYSBjaGVja3N1bSwKKyAgc28gaXQgaXMgZWFzeSB0byBkZXRlY3QgZXJyb3JzIGR1ZSB0byBwcm9ibGVtcyBvbiB0aGUgc2VyaWFsIGxpbmUuCisgIFJlY2VpdmVkIHBhY2tldHMgdGhhdCBhcmUgY29ycnVwdCBhcmUgbm90IHBhc3NlZCBvbiB0byB0aGUgQVguMjUgbGF5ZXIuCisgIERhbWFnZWQgcGFja2V0cyB0aGF0IHRoZSBUTkMgaGFzIHJlY2VpdmVkIGZyb20gdGhlIFBDIGFyZSBub3QgdHJhbnNtaXR0ZWQuCisKK01vcmUgZGV0YWlscyBhYm91dCA2cGFjayBhcmUgZGVzY3JpYmVkIGluIHRoZSBmaWxlIDZwYWNrLnBzIHRoYXQgaXMgbG9jYXRlZAoraW4gdGhlIGRvYyBkaXJlY3Rvcnkgb2YgdGhlIEFYLjI1IHV0aWxpdGllcyBwYWNrYWdlLgorCisyLiBXaG8gaGFzIGRldmVsb3BlZCB0aGUgNnBhY2sgcHJvdG9jb2w/CisKK1RoZSA2cGFjayBwcm90b2NvbCBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgRWtraSBQbGljaHQgREY0T1IsIEhlbm5pbmcgUmVjaAorREY5SUMgYW5kIEd1bnRlciBKb3N0IERLN1dKLiBBIGRyaXZlciBmb3IgNnBhY2ssIHdyaXR0ZW4gYnkgR3VudGVyIEpvc3QgYW5kCitNYXR0aGlhcyBXZWx3YXJza3kgREcyRkVGLCBjb21lcyBhbG9uZyB3aXRoIHRoZSBQQyB2ZXJzaW9uIG9mIEZsZXhOZXQuCitUaGV5IGhhdmUgYWxzbyB3cml0dGVuIGEgZmlybXdhcmUgZm9yIFROQ3MgdG8gcGVyZm9ybSB0aGUgNnBhY2sKK3Byb3RvY29sIChzZWUgc2VjdGlvbiA0IGJlbG93KS4KKworMy4gV2hlcmUgY2FuIEkgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiA2cGFjayBmb3IgTGludVg/CisKK0F0IHRoZSBtb21lbnQsIHRoZSA2cGFjayBzdHVmZiBjYW4gb2J0YWluZWQgdmlhIGFub255bW91cyBmdHAgZnJvbQorZGIwYm0uYXV0b21hdGlvbi5maC1hYWNoZW4uZGUuIEluIHRoZSBkaXJlY3RvcnkgL2luY29taW5nL2RnM2txLAordGhlcmUgaXMgYSBmaWxlIG5hbWVkIDZwYWNrLnRnei4KKworNC4gUHJlcGFyaW5nIHRoZSBUTkMgZm9yIDZwYWNrIG9wZXJhdGlvbgorCitUbyBiZSBhYmxlIHRvIHVzZSA2cGFjaywgYSBzcGVjaWFsIGZpcm13YXJlIGZvciB0aGUgVE5DIGlzIG5lZWRlZC4gVGhlIEVQUk9NCitvZiBhIG5ld2x5IGJvdWdodCBUTkMgZG9lcyBub3QgY29udGFpbiA2cGFjaywgc28geW91IHdpbGwgaGF2ZSB0bworcHJvZ3JhbSBhbiBFUFJPTSB5b3Vyc2VsZi4gVGhlIGltYWdlIGZpbGUgZm9yIDZwYWNrIEVQUk9NcyBzaG91bGQgYmUKK2F2YWlsYWJsZSBvbiBhbnkgcGFja2V0IHJhZGlvIGJveCB3aGVyZSBQQy9GbGV4TmV0IGNhbiBiZSBmb3VuZC4gVGhlIG5hbWUgb2YKK3RoZSBmaWxlIGlzIDZwYWNrLmJpbi4gVGhpcyBmaWxlIGlzIGNvcHlyaWdodGVkIGFuZCBtYWludGFpbmVkIGJ5IHRoZSBGbGV4TmV0Cit0ZWFtLiBJdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgdGhhdCBjb21lcyBhbG9uZword2l0aCBQQy9GbGV4TmV0LiBQbGVhc2UgZG8gbm90IGFzayBtZSBhYm91dCB0aGUgaW50ZXJuYWxzIG9mIHRoaXMgZmlsZSBhcyBJCitkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IGl0LiBJIHVzZWQgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSA2cGFjaworcHJvdG9jb2wgdG8gcHJvZ3JhbSB0aGUgTGludXggZHJpdmVyLgorCitUTkNzIGNvbnRhaW4gYSA2NGtCeXRlIEVQUk9NLCB0aGUgbG93ZXIgaGFsZiBvZiB3aGljaCBpcyB1c2VkIGZvcgordGhlIGZpcm13YXJlL0tJU1MuIFRoZSB1cHBlciBoYWxmIGlzIGVpdGhlciBlbXB0eSBvciBpcyBzb21ldGltZXMKK3Byb2dyYW1tZWQgd2l0aCBzb2Z0d2FyZSBjYWxsZWQgVEFQUi4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgVE5DCitpcyBzdXBwbGllZCB3aXRoIGEgRElQIHN3aXRjaCBzbyB5b3UgY2FuIGVhc2lseSBjaGFuZ2UgYmV0d2VlbiB0aGUKK3R3byBzeXN0ZW1zLiBXaGVuIHByb2dyYW1taW5nIGEgbmV3IEVQUk9NLCBvbmUgb2YgdGhlIHN5c3RlbXMgaXMgcmVwbGFjZWQKK2J5IDZwYWNrLiBJdCBpcyB1c2VmdWwgdG8gcmVwbGFjZSBUQVBSLCBhcyB0aGlzIHNvZnR3YXJlIGlzIHJhcmVseSB1c2VkCitub3dhZGF5cy4gSWYgeW91ciBUTkMgaXMgbm90IGVxdWlwcGVkIHdpdGggdGhlIHN3aXRjaCBtZW50aW9uZWQgYWJvdmUsIHlvdQorY2FuIGJ1aWxkIGluIG9uZSB5b3Vyc2VsZiB0aGF0IHN3aXRjaGVzIG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBwaW4KK29mIHRoZSBFUFJPTSBiZXR3ZWVuIEhJR0ggYW5kIExPVyBsZXZlbC4gQWZ0ZXIgaGF2aW5nIGluc2VydGVkIHRoZSBuZXcgRVBST00KK2FuZCBzd2l0Y2hlZCB0byA2cGFjaywgYXBwbHkgcG93ZXIgdG8gdGhlIFROQyBmb3IgYSBmaXJzdCB0ZXN0LiBUaGUgY29ubmVjdAorYW5kIHRoZSBzdGF0dXMgTEVEIGFyZSBsaXQgZm9yIGFib3V0IGEgc2Vjb25kIGlmIHRoZSBmaXJtd2FyZSBpbml0aWFsaXNlcwordGhlIFROQyBjb3JyZWN0bHkuCisKKzUuIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSA2cGFjayBkcml2ZXIKKworVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBrZXJuZWwgdmVyc2lvbiAyLjEuOTAuIFVzZSB3aXRoIG9sZGVyCitrZXJuZWxzIG1heSBsZWFkIHRvIGEgY29tcGlsYXRpb24gZXJyb3IgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIHRvIGEga2VybmVsCitmdW5jdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSAyLjEuOHgga2VybmVscy4KKworSG93IHRvIHR1cm4gb24gNnBhY2sgc3VwcG9ydDoKKworLSBJbiB0aGUgbGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSwgc2VsZWN0IHRoZSBjb2RlIG1hdHVyaXR5IGxldmVsCisgIG9wdGlvbnMgbWVudSBhbmQgdHVybiBvbiB0aGUgcHJvbXB0aW5nIGZvciBkZXZlbG9wbWVudCBkcml2ZXJzLgorCistIFNlbGVjdCB0aGUgYW1hdGV1ciByYWRpbyBzdXBwb3J0IG1lbnUgYW5kIHR1cm4gb24gdGhlIHNlcmlhbCBwb3J0IDZwYWNrCisgIGRyaXZlci4KKworLSBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIHRoZSBtb2R1bGVzLgorCitUbyB1c2UgdGhlIGRyaXZlciwgdGhlIGtpc3NhdHRhY2ggcHJvZ3JhbSBkZWxpdmVyZWQgd2l0aCB0aGUgQVguMjUgdXRpbGl0aWVzCitoYXMgdG8gYmUgbW9kaWZpZWQuCisKKy0gRG8gYSBjZCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgdGhlIGtpc3NhdHRhY2ggc291cmNlcy4gRWRpdCB0aGUKKyAga2lzc2F0dGFjaC5jIGZpbGUuIEF0IHRoZSB0b3AsIGluc2VydCB0aGUgZm9sbG93aW5nIGxpbmVzOgorCisgICNpZm5kZWYgTl82UEFDSworICAjZGVmaW5lIE5fNlBBQ0sgKE5fQVgyNSsxKQorICAjZW5kaWYKKworICBUaGVuIGZpbmQgdGhlIGxpbmUKKyAgIAorICBpbnQgZGlzYyA9IE5fQVgyNTsKKworICBhbmQgcmVwbGFjZSBOX0FYMjUgYnkgTl82UEFDSy4KKworLSBSZWNvbXBpbGUga2lzc2F0dGFjaC4gUmVuYW1lIGl0IHRvIHNwYXR0YWNoIHRvIGF2b2lkIGNvbmZ1c2lvbnMuCisKK0luc3RhbGxpbmcgdGhlIGRyaXZlcjoKKworLSBEbyBhbiBpbnNtb2QgNnBhY2suIExvb2sgYXQgeW91ciAvdmFyL2xvZy9tZXNzYWdlcyBmaWxlIHRvIGNoZWNrIGlmIHRoZSAKKyAgbW9kdWxlIGhhcyBwcmludGVkIGl0cyBpbml0aWFsaXphdGlvbiBtZXNzYWdlLgorCistIERvIGEgc3BhdHRhY2ggYXMgeW91IHdvdWxkIGxhdW5jaCBraXNzYXR0YWNoIHdoZW4gc3RhcnRpbmcgYSBLSVNTIHBvcnQuCisgIENoZWNrIGlmIHRoZSBrZXJuZWwgcHJpbnRzIHRoZSBtZXNzYWdlICc2cGFjazogVE5DIGZvdW5kJy4gCisKKy0gRnJvbSBoZXJlLCBldmVyeXRoaW5nIHNob3VsZCB3b3JrIGFzIGlmIHlvdSB3ZXJlIHNldHRpbmcgdXAgYSBLSVNTIHBvcnQuCisgIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgbmV0d29yayBkZXZpY2UgdGhhdCByZXByZXNlbnRzCisgIHRoZSA2cGFjayBwb3J0IGlzIGNhbGxlZCBzcCBpbnN0ZWFkIG9mIHNsIG9yIGF4LiBTbywgc3AwIHdvdWxkIGJlIHRoZQorICBmaXJzdCA2cGFjayBwb3J0LgorCitBbHRob3VnaCB0aGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiB2YXJpb3VzIHBsYXRmb3JtcywgSSBzdGlsbCBkZWNsYXJlIGl0CitBTFBIQS4gQkUgQ0FSRUZVTCEgU3luYyB5b3VyIGRpc2tzIGJlZm9yZSBpbnNtb2RpbmcgdGhlIDZwYWNrIG1vZHVsZQorYW5kIHNwYXR0YWNoaW5nLiBXYXRjaCBvdXQgaWYgeW91ciBjb21wdXRlciBiZWhhdmVzIHN0cmFuZ2VseS4gUmVhZCBzZWN0aW9uCis2IG9mIHRoaXMgZmlsZSBhYm91dCBrbm93biBwcm9ibGVtcy4KKworTm90ZSB0aGF0IHRoZSBjb25uZWN0IGFuZCBzdGF0dXMgTEVEcyBvZiB0aGUgVE5DIGFyZSBjb250cm9sbGVkIGluIGEKK2RpZmZlcmVudCB3YXkgdGhhbiB0aGV5IGFyZSB3aGVuIHRoZSBUTkMgaXMgdXNlZCB3aXRoIFBDL0ZsZXhOZXQuIFdoZW4gdXNpbmcKK0ZsZXhOZXQsIHRoZSBjb25uZWN0IExFRCBpcyBvbiBpZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb247IHRoZSBzdGF0dXMgTEVEIGlzCitvbiBpZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBidWZmZXIgb2YgdGhlIFBDJ3MgQVguMjUgZW5naW5lIHRoYXQgaGFzIHRvIGJlCit0cmFuc21pdHRlZC4gVW5kZXIgTGludXgsIHRoZSA2cGFjayBsYXllciBpcyBiZXlvbmQgdGhlIEFYLjI1IGxheWVyLAorc28gdGhlIDZwYWNrIGRyaXZlciBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgY29ubmVjdHMgb3IgZGF0YSB0aGF0CitoYXMgbm90IHlldCBiZWVuIHRyYW5zbWl0dGVkLiBUaGVyZWZvcmUgdGhlIExFRHMgYXJlIGNvbnRyb2xsZWQKK2FzIHRoZXkgYXJlIGluIEtJU1MgbW9kZTogVGhlIGNvbm5lY3QgTEVEIGlzIHR1cm5lZCBvbiBpZiBkYXRhIGlzIHRyYW5zZmVycmVkCitmcm9tIHRoZSBQQyB0byB0aGUgVE5DIG92ZXIgdGhlIHNlcmlhbCBsaW5lLCB0aGUgc3RhdHVzIExFRCBpZiBkYXRhIGlzCitzZW50IHRvIHRoZSBQQy4KKworNi4gS25vd24gcHJvYmxlbXMKKworV2hlbiB0ZXN0aW5nIHRoZSBkcml2ZXIgd2l0aCAyLjAuM3gga2VybmVscyBhbmQKK29wZXJhdGluZyB3aXRoIGRhdGEgcmF0ZXMgb24gdGhlIHJhZGlvIGNoYW5uZWwgb2YgOTYwMCBCYXVkIG9yIGhpZ2hlciwKK3RoZSBkcml2ZXIgbWF5LCBvbiBjZXJ0YWluIHN5c3RlbXMsIHNvbWV0aW1lcyBwcmludCB0aGUgbWVzc2FnZSAnNnBhY2s6CitiYWQgY2hlY2tzdW0nLCB3aGljaCBpcyBkdWUgdG8gZGF0YSBsb3NzIGlmIHRoZSBvdGhlciBzdGF0aW9uIHNlbmRzIHR3bworb3IgbW9yZSBzdWJzZXF1ZW50IHBhY2tldHMuIEkgaGF2ZSBiZWVuIHRvbGQgdGhhdCB0aGlzIGlzIGR1ZSB0byBhIHByb2JsZW0KK3dpdGggdGhlIHNlcmlhbCBkcml2ZXIgb2YgMi4wLjN4IGtlcm5lbHMuIEkgZG9uJ3Qga25vdyB5ZXQgaWYgdGhlIHByb2JsZW0KK3N0aWxsIGV4aXN0cyB3aXRoIDIuMS54IGtlcm5lbHMsIGFzIEkgaGF2ZSBoZWFyZCB0aGF0IHRoZSBzZXJpYWwgZHJpdmVyCitjb2RlIGhhcyBiZWVuIGNoYW5nZWQgd2l0aCAyLjEueC4KKworV2hlbiBzaHV0dGluZyBkb3duIHRoZSBzcCBpbnRlcmZhY2Ugd2l0aCBpZmNvbmZpZywgdGhlIGtlcm5lbCBjcmFzaGVzIGlmCit0aGVyZSBpcyBzdGlsbCBhbiBBWC4yNSBjb25uZWN0aW9uIGxlZnQgb3ZlciB3aGljaCBhbiBJUCBjb25uZWN0aW9uIHdhcworcnVubmluZywgZXZlbiBpZiB0aGF0IElQIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBjbG9zZWQuIFRoZSBwcm9ibGVtIGRvZXMgbm90CitvY2N1ciB3aGVuIHRoZXJlIGlzIGEgYmFyZSBBWC4yNSBjb25uZWN0aW9uIHN0aWxsIHJ1bm5pbmcuIEkgZG9uJ3Qga25vdyBpZgordGhpcyBpcyBhIHByb2JsZW0gb2YgdGhlIDZwYWNrIGRyaXZlciBvciBzb21ldGhpbmcgZWxzZSBpbiB0aGUga2VybmVsLgorCitUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBhcyBhIG1vZHVsZSwgbm90IHlldCBhcyBhIGtlcm5lbC1idWlsdGluIGRyaXZlci4KKworVGhlIDZwYWNrIHByb3RvY29sIHN1cHBvcnRzIGRhaXN5LWNoYWluaW5nIG9mIFROQ3MgaW4gYSB0b2tlbiByaW5nLCB3aGljaCBpcworY29ubmVjdGVkIHRvIG9uZSBzZXJpYWwgcG9ydCBvZiB0aGUgUEMuIFRoaXMgZmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQKK2FuZCBhdCBsZWFzdCBhdCB0aGUgbW9tZW50IEkgd29uJ3QgYmUgYWJsZSB0byBkbyBpdCBiZWNhdXNlIEkgZG8gbm90IGhhdmUKK3RoZSBvcHBvcnR1bml0eSB0byBidWlsZCBhIFROQyBkYWlzeS1jaGFpbiBhbmQgdGVzdCBpdC4KKworU29tZSBvZiB0aGUgY29tbWVudHMgaW4gdGhlIHNvdXJjZSBjb2RlIGFyZSBpbmFjY3VyYXRlLiBUaGV5IGFyZSBsZWZ0IGZyb20KK3RoZSBTTElQL0tJU1MgZHJpdmVyLCBmcm9tIHdoaWNoIHRoZSA2cGFjayBkcml2ZXIgaGFzIGJlZW4gZGVyaXZlZC4KK0kgaGF2ZW4ndCBtb2RpZmllZCBvciByZW1vdmVkIHRoZW0geWV0IC0tIHNvcnJ5ISBUaGUgY29kZSBpdHNlbGYgbmVlZHMKK3NvbWUgY2xlYW5pbmcgYW5kIG9wdGltaXppbmcuIFRoaXMgd2lsbCBiZSBkb25lIGluIGEgbGF0ZXIgcmVsZWFzZS4KKworSWYgeW91IGVuY291bnRlciBhIGJ1ZyBvciBpZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uIG9yIHN1Z2dlc3Rpb24gY29uY2VybmluZyB0aGUKK2RyaXZlciwgZmVlbCBmcmVlIHRvIG1haWwgbWUsIHVzaW5nIHRoZSBhZGRyZXNzZXMgZ2l2ZW4gYXQgdGhlIGJlZ2lubmluZyBvZgordGhpcyBmaWxlLgorCitIYXZlIGZ1biEKKworQW5kcmVhcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0NvbmZpZ3VyYWJsZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9Db25maWd1cmFibGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljMGRkNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9Db25maWd1cmFibGUKQEAgLTAsMCArMSwzNCBAQAorCitUaGVyZSBhcmUgYSBmZXcgbmV0d29yayBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHR1bmVkIHRvIGJldHRlciBtYXRjaAordGhlIGtlcm5lbCB0byB5b3VyIHN5c3RlbSBoYXJkd2FyZSBhbmQgaW50ZW5kZWQgdXNhZ2UuIFRoZSBkZWZhdWx0cworYXJlIHVzdWFsbHkgYSBnb29kIGNob2ljZSBmb3IgOTklIG9mIHRoZSBwZW9wbGUgOTklIG9mIHRoZSB0aW1lLCBidXQKK3lvdSBzaG91bGQgYmUgYXdhcmUgdGhleSBkbyBleGlzdCBhbmQgY2FuIGJlIGNoYW5nZWQuCisKK1RoZSBjdXJyZW50IGxpc3Qgb2YgcGFyYW1ldGVycyBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGVzOgorCisJbGludXgvbmV0L1RVTkFCTEUKKwlEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorCitTb21lIG9mIHRoZXNlIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzY3RsIGludGVyZmFjZSwgYW5kIG1hbnkgbW9yZSBhcmUKK3NjaGVkdWxlZCB0byBiZSBhZGRlZCBpbiB0aGlzIHdheS4gRm9yIGV4YW1wbGUsIHNvbWUgcGFyYW1ldGVycyByZWxhdGVkIAordG8gQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sIChBUlApIGFyZSB2ZXJ5IGVhc2lseSB2aWV3ZWQgYW5kIGFsdGVyZWQuCisKKwkjIGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvYXJwX3RpbWVvdXQKKwk2MDAwCisJIyBlY2hvIDcwMDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvYXJwX3RpbWVvdXQKKwkjIGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvYXJwX3RpbWVvdXQKKwk3MDAwCisKK090aGVycyBhcmUgYWxyZWFkeSBhY2Nlc3NpYmxlIHZpYSB0aGUgcmVsYXRlZCB1c2VyIHNwYWNlIHByb2dyYW1zLgorRm9yIGV4YW1wbGUsIE1BWF9XSU5ET1cgaGFzIGEgZGVmYXVsdCBvZiAzMiBrIHdoaWNoIGlzIGEgZ29vZCBjaG9pY2UgZm9yCittb2Rlcm4gaGFyZHdhcmUsIGJ1dCBpZiB5b3UgaGF2ZSBhIHNsb3cgKDggYml0KSBFdGhlcm5ldCBjYXJkIGFuZC9vciBhIHNsb3cKK21hY2hpbmUsIHRoZW4gdGhpcyB3aWxsIGJlIGZhciB0b28gYmlnIGZvciB0aGUgY2FyZCB0byBrZWVwIHVwIHdpdGggZmFzdCAKK21hY2hpbmVzIHRyYW5zbWl0dGluZyBvbiB0aGUgc2FtZSBuZXQsIHJlc3VsdGluZyBpbiBvdmVycnVucyBhbmQgcmVjZWl2ZSBlcnJvcnMuCitBIHZhbHVlIG9mIGFib3V0IDQgayB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCB3aGljaCBjYW4gYmUgc2V0IHZpYToKKworCSMgcm91dGUgYWRkIC1uZXQgMTkyLjE2OC4zLjAgd2luZG93IDQwOTYKKworVGhlIHJlbWFpbmRlciBvZiB0aGVzZSBjYW4gb25seSBiZSBwcmVzZW50bHkgY2hhbmdlZCBieSBhbHRlcmluZyBhICNkZWZpbmUKK2luIHRoZSByZWxhdGVkIGhlYWRlciBmaWxlLiBUaGlzIG1lYW5zIGFuIGVkaXQgYW5kIHJlY29tcGlsZSBjeWNsZS4KKworCQkJCQkJUGF1bCBHb3J0bWFrZXIgMDYvOTYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvRExJTksudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4M2QyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvRExJTksudHh0CkBAIC0wLDAgKzEsMjA0IEBACitSZWxlYXNlZCAxOTk0LTA2LTEzCisKKworCUNPTlRFTlRTOgorCisJMS4gSW50cm9kdWN0aW9uLgorCTIuIExpY2Vuc2UuCisJMy4gRmlsZXMgaW4gdGhpcyByZWxlYXNlLgorCTQuIEluc3RhbGxhdGlvbi4KKwk1LiBQcm9ibGVtcyBhbmQgdHVuaW5nLgorCTYuIFVzaW5nIHRoZSBkcml2ZXJzIHdpdGggZWFybGllciByZWxlYXNlcy4KKwk3LiBBY2tub3dsZWRnbWVudHMuCisKKworCTEuIElOVFJPRFVDVElPTi4KKworCVRoaXMgaXMgYSBzZXQgb2YgRXRoZXJuZXQgZHJpdmVycyBmb3IgdGhlIEQtTGluayBERS02MDAvREUtNjIwCisJcG9ja2V0IGFkYXB0ZXJzLCBmb3IgdGhlIHBhcmFsbGVsIHBvcnQgb24gYSBMaW51eCBiYXNlZCBtYWNoaW5lLgorCVNvbWUgYWRhcHRlciAiY2xvbmVzIiB3aWxsIGFsc28gd29yay4gIFhpcmNvbSBpcyBfbm90XyBhIGNsb25lLi4uCisJVGhlc2UgZHJpdmVycyBfY2FuXyBiZSB1c2VkIGFzIGxvYWRhYmxlIG1vZHVsZXMsCisJYW5kIHdlcmUgZGV2ZWxvcGVkIGZvciB1c2Ugb24gTGludXggMS4xLjEzIGFuZCBhYm92ZS4KKwlGb3IgdXNlIG9uIExpbnV4IDEuMC5YLCBvciBlYXJsaWVyIHJlbGVhc2VzLCBzZWUgYmVsb3cuCisKKwlJIGhhdmUgdXNlZCB0aGVzZSBkcml2ZXJzIGZvciBORlMsIGZ0cCwgdGVsbmV0IGFuZCBYLWNsaWVudHMgb24KKwlyZW1vdGUgbWFjaGluZXMuIFRyYW5zbWlzc2lvbnMgd2l0aCBmdHAgc2VlbXMgdG8gd29yayBhcworCWdvb2QgYXMgY2FuIGJlIGV4cGVjdGVkIChpLmUuID4gODBrIGJ5dGVzL3NlYykgZnJvbSBhCisJcGFyYWxsZWwgcG9ydC4uLjotKSAgUmVjZWl2ZSBzcGVlZHMgd2lsbCBiZSBhYm91dCA2MC04MCUgb2YgdGhpcy4KKwlEZXBlbmRpbmcgb24geW91ciBtYWNoaW5lLCBzb21ld2hhdCBoaWdoZXIgc3BlZWRzIGNhbiBiZSBhY2hpZXZlZC4KKworCUFsbCBjb21tZW50cy9maXhlcyB0byBCam9ybiBFa3dhbGwgKGJqMHJuQGJsb3guc2UpLgorCisKKwkyLiBMSUNFTlNFLgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CisJYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworCUxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorCXZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKwl1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisJd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorCVBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKwlkZXRhaWxzLgorCisJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisJTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorCVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQQorCTAyMTM5LCBVU0EuCisKKworCTMuIEZJTEVTIElOIFRISVMgUkVMRUFTRS4KKworCVJFQURNRS5ETElOSyAgVGhpcyBmaWxlLgorCWRlNjAwLmMgICAgICAgVGhlIFNvdXJjZSAobWF5IGl0IGJlIHdpdGggWW91IDotKSBmb3IgdGhlIERFLTYwMAorCWRlNjIwLmMgICAgICAgZGl0dG8gZm9yIHRoZSBERS02MjAKKwlkZTYyMC5oICAgICAgIE1hY3JvcyBmb3IgZGU2MjAuYworCisJSWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSB0aGUgZC1saW5rIHRhciByZWxlYXNlLCB0aGVyZSB3aWxsCisJYWxzbyBiZSBhICJkbGluay1wYXRjaGVzIiBmaWxlIHRoYXQgd2lsbCBwYXRjaCBMaW51eCAxLjEuMTg6CisJCWxpbnV4L2RyaXZlcnMvbmV0L01ha2VmaWxlCisJCWxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRworCQlsaW51eC9kcml2ZXJzL25ldC9NT0RVTEVTCisJCWxpbnV4L2RyaXZlcnMvbmV0L1NwYWNlLmMKKwkJbGludXgvY29uZmlnLmluCisJQXBwbHkgdGhlIHBhdGNoIGJ5OgorCSJjZCAvdXNyL3NyYzsgcGF0Y2ggLXAwIDwgbGludXgvZHJpdmVycy9uZXQvZGxpbmstcGF0Y2hlcyIKKwlUaGUgb2xkIHNvdXJjZSwgImxpbnV4L2RyaXZlcnMvbmV0L2RfbGluay5jIiwgY2FuIGJlIHJlbW92ZWQuCisKKworCTQuIElOU1RBTExBVElPTi4KKworCW8gR2V0IHRoZSBsYXRlc3QgbmV0IGJpbmFyaWVzLCBhY2NvcmRpbmcgdG8gY3VycmVudCBuZXQud2lzZG9tLgorCisJbyBSZWFkIHRoZSBORVQtMiBhbmQgRXRoZXJuZXQgSE9XVE9zIGFuZCBtb2RpZnkgeW91ciBzZXR1cC4KKworCW8gSWYgeW91ciBwYXJhbGxlbCBwb3J0IGhhcyBhIHN0cmFuZ2UgYWRkcmVzcyBvciBpcnEsCisJICBtb2RpZnkgImxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRyIgYWNjb3JkaW5nbHksIG9yIGFkanVzdAorCSAgdGhlIHBhcmFtZXRlcnMgaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24gaW4gdGhlIHNvdXJjZXMuCisKKwlJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgZHJpdmVycyBhcyBsb2FkYWJsZSBtb2R1bGVzLCBkbyBfbm90XworCWVuYWJsZSB0aGVtIHdoaWxlIGRvaW5nICJtYWtlIGNvbmZpZyIsIGJ1dCBpbnN0ZWFkIG1ha2Ugc3VyZSB0aGF0CisJdGhlIGRyaXZlcnMgYXJlIGluY2x1ZGVkIGluICJsaW51eC9kcml2ZXJzL25ldC9NT0RVTEVTIi4KKworCUlmIHlvdSBhcmUgX25vdF8gZ29pbmcgdG8gdXNlIHRoZSBkcml2ZXIocykgYXMgbG9hZGFibGUgbW9kdWxlcywKKwlidXQgaW5zdGVhZCBoYXZlIHRoZW0gaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCwgcmVtZW1iZXIgdG8gZW5hYmxlCisJdGhlIGRyaXZlcnMgd2hpbGUgZG9pbmcgIm1ha2UgY29uZmlnIi4KKworCW8gVG8gaW5jbHVkZSBuZXR3b3JraW5nIGFuZCBERTYwMC9ERTYyMCBzdXBwb3J0IGluIHlvdXIga2VybmVsOgorCSAgIyBjZCAvbGludXgKKwkgIChhcyBtb2R1bGVzOikKKwkgICMgIG1ha2UgY29uZmlnIChhbnN3ZXIgeWVzIG9uIENPTkZJR19ORVQgYW5kIENPTkZJR19JTkVUKQorCSAgKGVsc2UgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbDopCisJICAjICBtYWtlIGNvbmZpZyAoYW5zd2VyIHllcyBvbiBDT05GSUcgX05FVCwgX0lORVQgYW5kIF9ERTYwMCBvciBfREU2MjApCisJICAjIG1ha2UgY2xlYW4KKwkgICMgbWFrZSB6SW1hZ2UgKG9yIHdoYXRldmVyIG1hZ2ljIHlvdSB1c3VhbGx5IGRvKQorCisJbyBJIHVzZSBsaWxvIHRvIGJvb3QgbXVsdGlwbGUga2VybmVscywgc28gdGhhdCBJIGF0IGxlYXN0CisJICBjYW4gaGF2ZSBvbmUgd29ya2luZyBrZXJuZWwgOi0pLiBJZiB5b3UgZG8gdG9vLCBhcHBlbmQKKwkgIHRoZXNlIGxpbmVzIHRvIC9ldGMvbGlsby9jb25maWc6CisKKwkJaW1hZ2UgPSAvbGludXgvekltYWdlCisJCWxhYmVsID0gbmV3bGludXgKKwkJcm9vdCA9IC9kZXYvaGRhMiAob3Igd2hhdGV2ZXIgWU9VIGhhdmUuLi4pCisKKwkgICMgL2V0Yy9saWxvL2luc3RhbGwKKworCW8gRG8gInN5bmMiIGFuZCByZWJvb3QgdGhlIG5ldyBrZXJuZWwgd2l0aCBhIEQtTGluaworCSAgREUtNjAwL0RFLTYyMCBwb2NrZXQgYWRhcHRlciBjb25uZWN0ZWQuCisKKwlvIFRoZSBhZGFwdGVyIGNhbiBiZSBjb25maWd1cmVkIHdpdGggaWZjb25maWcgZXRoPworCSAgd2hlcmUgdGhlIGFjdHVhbCBudW1iZXIgaXMgZGVjaWRlZCBieSB0aGUga2VybmVsCisJICB3aGVuIHRoZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZC4KKworCisJNS4gIlBST0JMRU1TIiBBTkQgVFVOSU5HLAorCisJbyBJZiB5b3Ugc2VlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGRyaXZlciwgYW5kIGlmIHRoZSB0cmFmZmljCisJICBzdG9wcyBvbiB0aGUgYWRhcHRlciwgdHJ5IHRvIGRvICJpZmNvbmZpZyIgYW5kICJyb3V0ZSIgb25jZQorCSAgbW9yZSwganVzdCBhcyBpbiAicmMuaW5ldDEiLiAgVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIG1vc3QKKwkgIHByb2JsZW1zLCBpbmNsdWRpbmcgZWZmZWN0cyBmcm9tIHBvd2VyIGxvc3MsIG9yIGFkYXB0ZXJzIHRoYXQKKwkgIGFyZW4ndCBjb25uZWN0ZWQgdG8gdGhlIHByaW50ZXIgcG9ydCBpbiBzb21lIHdheSBvciBhbm90aGVyLgorCSAgWW91IGNhbiBzb21ld2hhdCBjaGFuZ2UgdGhlIGJlaGF2aW91ciBieSBlbmFibGluZy9kaXNhYmxpbmcKKwkgIHRoZSBtYWNybyAgU0hVVERPV05fV0hFTl9MT1NUICBpbiB0aGUgInR1bmluZyIgc2VjdGlvbi4KKwkgIEZvciB0aGUgREUtNjAwIHRoZXJlIGlzIGFub3RoZXIgbWFjcm8sIENIRUNLX0xPU1RfREU2MDAsCisJICB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHJlYWQgYWJvdXQgaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24uCisKKwlvIFNvbWUgbWFjaGluZXMgaGF2ZSB0cm91YmxlIGhhbmRsaW5nIHRoZSBwYXJhbGxlbCBwb3J0IGFuZAorCSAgdGhlIGFkYXB0ZXIgYXQgaGlnaCBzcGVlZC4gSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXM6CisKKwkgIERFLTYwMDoKKwkgIC0gVGhlIGFkYXB0ZXIgaXMgbm90IHJlY29nbml6ZWQgYXQgYm9vdCwgaS5lLiBhbiBFdGhlcm5ldAorCSAgICBhZGRyZXNzIG9mIDAwOjgwOmM4Oi4uLiBpcyBub3Qgc2hvd24sIHRyeSB0byBhZGQgYW5vdGhlcgorCSAgICAgICI7IFNMT1dfRE9XTl9JTyIKKwkgICAgYXQgREU2MDBfU0xPV19ET1dOIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLiBBcyBhIGxhc3QgcmVzb3J0LAorCSAgICB1bmNvbW1lbnQ6ICIjZGVmaW5lIFJFQUxMWV9TTE9XX0lPIiAoc2VlIDxhc20vaW8uaD4gZm9yIGhpbnRzKS4KKworCSAgLSBZb3UgZXhwZXJpZW5jZSAidGltZW91dCIgbWVzc2FnZXM6IGZpcnN0IHRyeSB0byBhZGQgYW5vdGhlcgorCSAgICAgICI7IFNMT1dfRE9XTl9JTyIKKwkgICAgYXQgREU2MDBfU0xPV19ET1dOIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLCBfdGhlbl8gdHJ5IHRvCisJICAgIGluY3JlYXNlIHRoZSB2YWx1ZSAob3JpZ2luYWwgdmFsdWU6IDUpIGF0CisJICAgICJpZiAodGlja3Nzb2ZhciA8IDUpIiBuZWFyIGxpbmUgNDIyLgorCisJICBERS02MjA6CisJICAtIFlvdXIgcGFyYWxsZWwgcG9ydCBtaWdodCBiZSAic2x1Z2dpc2giLiAgVG8gY2F0ZXIgZm9yCisJICAgIHRoaXMsIHRoZXJlIGFyZSB0aGUgbWFjcm9zIExPV1NQRUVEIGFuZCBSRUFEX0RFTEFZL1dSSVRFX0RFTEFZCisJICAgIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLiBZb3VyIGZpcnN0IHN0ZXAgc2hvdWxkIGJlIHRvIGVuYWJsZQorCSAgICBMT1dTUEVFRCwgYW5kIGFmdGVyIHRoYXQgeW91IGNhbiAidHVuZSIgdGhlIFhYWF9ERUxBWSB2YWx1ZXMuCisKKwlvIElmIHRoZSBhZGFwdGVyIF9pc18gcmVjb2duaXplZCBhdCBib290IGJ1dCB5b3UgZ2V0IG1lc3NhZ2VzCisJICBhYm91dCAiTmV0d29yayBVbnJlYWNoYWJsZSIsIHRoZW4gdGhlIHByb2JsZW0gaXMgcHJvYmFibHkKKwkgIF9ub3RfIHdpdGggdGhlIGRyaXZlci4gIENoZWNrIHlvdXIgbmV0IGNvbmZpZ3VyYXRpb24gaW5zdGVhZAorCSAgKGlmY29uZmlnIGFuZCByb3V0ZSkgaW4gInJjLmluZXQxIi4KKworCW8gVGhlcmUgaXMgc29tZSBydWRpbWVudGFyeSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcsIGxvb2sgYXQKKwkgIHRoZSBzb3VyY2UuIFVzZSAiLURERTYwMF9ERUJVRz0zIiBvciAiLURERTYyMF9ERUJVRz0zIgorCSAgd2hlbiBjb21waWxpbmcsIG9yIGluY2x1ZGUgaXQgaW4gImxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRyIuCisJICBJRiBZT1UgSEFWRSBQUk9CTEVNUyBZT1UgQ0FOJ1QgU09MVkU6IFBMRUFTRSBDT01QSUxFIFRIRSBEUklWRVIKKwkgIFdJVEggREVCVUdHSU5HIEVOQUJMRUQsIEFORCBTRU5EIE1FIFRIRSBSRVNVTFRJTkcgT1VUUFVUIQorCisKKwk2LiBVU0lORyBUSEUgRFJJVkVSUyBXSVRIIEVBUkxJRVIgUkVMRUFTRVMuCisKKwlUaGUgbGF0ZXIgMS4xLlggcmVsZWFzZXMgb2YgdGhlIExpbnV4IGtlcm5lbCBpbmNsdWRlIHNvbWUKKwljaGFuZ2VzIGluIHRoZSBuZXR3b3JraW5nIGxheWVyIChhLmsuYS4gTkVUMykuIFRoaXMgYWZmZWN0cworCXRoZXNlIGRyaXZlcnMgaW4gYSBmZXcgcGxhY2VzLiAgVGhlIGhpbnRzIHRoYXQgZm9sbG93IGFyZQorCV9ub3RfIHRlc3RlZCBieSBtZSwgc2luY2UgSSBkb24ndCBoYXZlIHRoZSBkaXNrIHNwYWNlIHRvIGtlZXAKKwlhbGwgcmVsZWFzZXMgb24tbGluZS4KKwlLbm93biBuZWVkZWQgY2hhbmdlcyB0byBkYXRlOgorCS0gcmVsZWFzZSBwYXRjaGZpbGU6IHNvbWUgcGF0Y2hlcyB3aWxsIGZhaWwsIGJ1dCB0aGV5IHNob3VsZAorCSAgYmUgZWFzeSB0byBhcHBseSAiYnkgaGFuZCIsIHNpbmNlIHRoZXkgYXJlIHRyaXZpYWwuCisJICAoU3BhY2UuYzogZF9saW5rX2luaXQoKSBpcyBub3cgY2FsbGVkIGRlNjAwX3Byb2JlKCkpCisJLSBkZTYwMC5jOiBjaGFuZ2UgICJtYXJrX2JoKE5FVF9CSCkiIHRvICAibWFya19iaChJTkVUX0JIKSIuCisJLSBkZTYyMC5jOiAobWF5YmUpIGNoYW5nZSB0aGUgY29kZSBhcm91bmQgIm5ldGlmX3J4KHNrYik7IiB0byBiZQorCQkgICBzaW1pbGFyIHRvIHRoZSBjb2RlIGFyb3VuZCAiZGV2X3JpbnQoLi4uKSIgaW4gZGU2MDAuYworCisKKwk3LiBBQ0tOT1dMRURHTUVOVFMuCisKKwlUaGVzZSBkcml2ZXJzIHdvdWxkbid0IGhhdmUgYmVlbiBkb25lIHdpdGhvdXQgdGhlIGJhc2UKKwkoYW5kIHN1cHBvcnQpIGZyb20gUm9zcyBCaXJvIDxiaXI3QGxlbGFuZC5zdGFuZm9yZC5lZHU+LAorCWFuZCBELUxpbmsgU3lzdGVtcyBJbmMuICBUaGUgZHJpdmVyIHJlbGllcyB1cG9uIEdQTC1lZAorCXNvdXJjZSBmcm9tIEQtTGluayBTeXN0ZW1zIEluYy4gYW5kIGZyb20gUnVzc2VsIE5lbHNvbiBhdAorCUNyeW53ciBTb2Z0d2FyZSA8bmVsc29uQGNyeW53ci5jb20+LgorCisJQWRkaXRpb25hbCBpbnB1dCBhbHNvIGZyb206CisJRG9uYWxkIEJlY2tlciA8YmVja2VyQHN1cGVyLm9yZz4sIEFsYW4gQ294IDxBLkNveEBzd2Fuc2VhLmFjLnVrPgorCWFuZCBGcmVkIE4uIHZhbiBLZW1wZW4gPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgorCisJREUtNjAwIGFscGhhIHJlbGVhc2UgcHJpbWFyeSB2aWN0aW1eSF5IXkheSF5IXkh0ZXN0ZXI6CisJLSBFcmlrIFByb3BlciA8ZXJpa3BAY3Mua3VuLm5sPi4KKwlHb29kIGlucHV0IGFsc28gZnJvbSBzZXZlcmFsIHVzZXJzLCBtb3N0IG5vdGFibHkKKwktIE1hcmsgQnVydG9uIDxtYXJrYkBvcmRlcm4uZGVtb24uY28udWs+LgorCisJREUtNjIwIGFscGhhIHJlbGVhc2UgdmljdGltc15IXkheSF5IXkheSF5IdGVzdGVyczoKKwktIEouIEpvc2h1YSBLb3BwZXIgPGtvcHBlckBydHNnLm1vdC5jb20+CisJLSBPbGF2IEt2aXR0ZW0gPE9sYXYuS3ZpdHRlbUB1bmluZXR0Lm5vPgorCS0gR2VybWFubyBDYXJvbm5pIDxjYXJvbm5pQG5lc3NpZS5jcy5pZC5ldGh6LmNoPgorCS0gSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHN1aXRlLnN3Lm96LmF1PgorCisKKwlIYXBweSBoYWNraW5nIQorCisJQmpvcm4gRWt3YWxsID09IGJqMHJuQGJsb3guc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDM3NmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0CkBAIC0wLDAgKzEsNzY2IEBACitISVNUT1JZOgorRmVicnVhcnkgMTYvMjAwMiAtLSByZXZpc2lvbiAwLjIuMToKK0NPUiB0eXBvIGNvcnJlY3RlZAorRmVicnVhcnkgMTAvMjAwMiAtLSByZXZpc2lvbiAwLjI6Citzb21lIHNwZWxsIGNoZWNraW5nIDstPgorSmFudWFyeSAxMi8yMDAyIC0tIHJldmlzaW9uIDAuMQorVGhpcyBpcyBzdGlsbCB3b3JrIGluIHByb2dyZXNzIHNvIG1heSBjaGFuZ2UuCitUbyBrZWVwIHVwIHRvIGRhdGUgcGxlYXNlIHdhdGNoIHRoaXMgc3BhY2UuCisKK0ludHJvZHVjdGlvbiB0byBOQVBJCis9PT09PT09PT09PT09PT09PT09PQorCitOQVBJIGlzIGEgcHJvdmVuICh3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6KSB0ZWNobmlxdWUKK3RvIGltcHJvdmUgbmV0d29yayBwZXJmb3JtYW5jZSBvbiBMaW51eC4gRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UKK3JlYWQgdGhhdCBwYXBlci4KK05BUEkgcHJvdmlkZXMgYSAiaW5oZXJlbnQgbWl0aWdhdGlvbiIgd2hpY2ggaXMgYm91bmQgYnkgc3lzdGVtIGNhcGFjaXR5CithcyBjYW4gYmUgc2VlbiBmcm9tIHRoZSBmb2xsb3dpbmcgZGF0YSBjb2xsZWN0ZWQgYnkgUm9iZXJ0IG9uIEdpZ2FiaXQgCitldGhlcm5ldCAoZTEwMDApOgorCisgUHNpemUgICAgSXBwcyAgICAgICBUcHV0ICAgICBSeGludCAgICAgVHhpbnQgICAgRG9uZSAgICAgTmRvbmUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDYwICAgIDg5MDAwMCAgICAgNDA5MzYyICAgICAgICAxNyAgICAgMjc2MjIgICAgICAgIDcgICAgIDY4MjMKKyAgMTI4ICAgIDc1ODE1MCAgICAgNDY0MzY0ICAgICAgICAyMSAgICAgIDkzMDEgICAgICAgMTAgICAgIDc3MzgKKyAgMjU2ICAgIDQ0NTYzMiAgICAgNzc0NjQ2ICAgICAgICA0MiAgICAgMTU1MDcgICAgICAgMjEgICAgMTI5MDYKKyAgNTEyICAgIDIzMjY2NiAgICAgOTk0NDQ1ICAgIDI0MTI5MiAgICAgMTkxNDcgICAyNDExOTIgICAgIDEwNjIKKyAxMDI0ICAgIDExOTA2MSAgICAxMDAwMDAzICAgIDg3MjUxOSAgICAgMTkyNTggICA4NzI1MTEgICAgICAgIDAKKyAxNDQwICAgICA4NTE5MyAgICAxMDAwMDAzICAgIDk0NjU3NiAgICAgMTk1MDUgICA5NDY1NjkgICAgICAgIDAKKyAKKworTGVnZW5kOgorIklwcHMiIHN0YW5kcyBmb3IgaW5wdXQgcGFja2V0cyBwZXIgc2Vjb25kLiAKKyJUcHV0IiA9PSBwYWNrZXRzIG91dCBvZiB0b3RhbCAxTSB0aGF0IG1hZGUgaXQgb3V0LgorInR4aW50IiA9PSB0cmFuc21pdCBjb21wbGV0aW9uIGludGVycnVwdHMgc2VlbgorIkRvbmUiID09IFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgcG9sbCgpIG1hbmFnZWQgdG8gcHVsbCBhbGwKK3BhY2tldHMgb3V0IG9mIHRoZSByeCByaW5nLiBOb3RlIGZyb20gdGhpcyB0aGF0IHRoZSBsb3dlciB0aGUKK2xvYWQgdGhlIG1vcmUgd2UgY291bGQgY2xlYW4gdXAgdGhlIHJ4cmluZworIk5kb25lIiA9PSBpcyB0aGUgY29udmVyc2Ugb2YgIkRvbmUiLiBOb3RlIGFnYWluLCB0aGF0IHRoZSBoaWdoZXIKK3RoZSBsb2FkIHRoZSBtb3JlIHRpbWVzIHdlIGNvdWxkbnQgY2xlYW4gdXAgdGhlIHJ4cmluZy4KKworT2JzZXJ2ZSB0aGF0Ogord2hlbiB0aGUgTklDIHJlY2VpdmVzIDg5MEtwYWNrZXRzL3NlYyBvbmx5IDE3IHJ4IGludGVycnVwdHMgYXJlIGdlbmVyYXRlZC4gCitUaGUgc3lzdGVtIGNhbnQgaGFuZGxlIHRoZSBwcm9jZXNzaW5nIGF0IDEgaW50ZXJydXB0L3BhY2tldCBhdCB0aGF0IGxvYWQgbGV2ZWwuIAorQXQgbG93ZXIgcmF0ZXMgb24gdGhlIG90aGVyIGhhbmQsIHJ4IGludGVycnVwdHMgZ28gdXAgYW5kIHRoZXJlZm9yZSB0aGUKK2ludGVycnVwdC9wYWNrZXQgcmF0aW8gZ29lcyB1cCAoYXMgb2JzZXJ2YWJsZSBmcm9tIHRoYXQgdGFibGUpLiBTbyB0aGVyZSBpcworcG9zc2liaWxpdHkgdGhhdCB1bmRlciBsb3cgZW5vdWdoIGlucHV0LCB5b3UgZ2V0IG9uZSBwb2xsIGNhbGwgZm9yIGVhY2gKK2lucHV0IHBhY2tldCBjYXVzZWQgYnkgYSBzaW5nbGUgaW50ZXJydXB0IGVhY2ggdGltZS4gQW5kIGlmIHRoZSBzeXN0ZW0gCitjYW50IGhhbmRsZSBpbnRlcnJ1cHQgcGVyIHBhY2tldCByYXRpbyBvZiAxLCB0aGVuIGl0IHdpbGwganVzdCBoYXZlIHRvIAorY2h1ZyBhbG9uZyAuLi4uCisKKworMCkgUHJlcmVxdWlzaXRlczoKKz09PT09PT09PT09PT09PT09PQorQSBkcml2ZXIgTUFZIGNvbnRpbnVlIHVzaW5nIHRoZSBvbGQgMi40IHRlY2huaXF1ZSBmb3IgaW50ZXJmYWNpbmcKK3RvIHRoZSBuZXR3b3JrIHN0YWNrIGFuZCBub3QgYmVuZWZpdCBmcm9tIHRoZSBOQVBJIGNoYW5nZXMuCitOQVBJIGFkZGl0aW9ucyB0byB0aGUga2VybmVsIGRvIG5vdCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorTkFQSSwgaG93ZXZlciwgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyB0byBiZSBhdmFpbGFibGU6CisKK0EpIERNQSByaW5nIG9yIGVub3VnaCBSQU0gdG8gc3RvcmUgcGFja2V0cyBpbiBzb2Z0d2FyZSBkZXZpY2VzLgorCitCKSBBYmlsaXR5IHRvIHR1cm4gb2ZmIGludGVycnVwdHMgb3IgbWF5YmUgZXZlbnRzIHRoYXQgc2VuZCBwYWNrZXRzIHVwIAordGhlIHN0YWNrLgorCitOQVBJIHByb2Nlc3NlcyBwYWNrZXQgZXZlbnRzIGluIHdoYXQgaXMga25vd24gYXMgZGV2LT5wb2xsKCkgbWV0aG9kLgorVHlwaWNhbGx5LCBvbmx5IHBhY2tldCByZWNlaXZlIGV2ZW50cyBhcmUgcHJvY2Vzc2VkIGluIGRldi0+cG9sbCgpLiAKK1RoZSByZXN0IG9mIHRoZSBldmVudHMgTUFZIGJlIHByb2Nlc3NlZCBieSB0aGUgcmVndWxhciBpbnRlcnJ1cHQgaGFuZGxlciAKK3RvIHJlZHVjZSBwcm9jZXNzaW5nIGxhdGVuY3kgKGp1c3RpZmllZCBhbHNvIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCB0aGF0IAorbWFueSBvZiB0aGVtKS4KK05vdGUsIGhvd2V2ZXIsIE5BUEkgZG9lcyBub3QgZW5mb3JjZSB0aGF0IGRldi0+cG9sbCgpIG9ubHkgcHJvY2Vzc2VzIAorcmVjZWl2ZSBldmVudHMuIAorVGVzdHMgd2l0aCB0aGUgdHVsaXAgZHJpdmVyIGluZGljYXRlZCBzbGlnaHRseSBpbmNyZWFzZWQgbGF0ZW5jeSBpZgorYWxsIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBtb3ZlZCB0byBkZXYtPnBvbGwoKS4gQWxzbyBNSUkgaGFuZGxpbmcKK2dldHMgYSBsaXR0bGUgdHJpY2tpZXIuCitUaGUgZXhhbXBsZSB1c2VkIGluIHRoaXMgZG9jdW1lbnQgaXMgdG8gbW92ZSB0aGUgcmVjZWl2ZSBwcm9jZXNzaW5nIG9ubHkKK3RvIGRldi0+cG9sbCgpOyB0aGlzIGlzIHNob3duIHdpdGggdGhlIHBhdGNoIGZvciB0aGUgdHVsaXAgZHJpdmVyLgorRm9yIGFuIGV4YW1wbGUgb2YgY29kZSB0aGF0IG1vdmVzIGFsbCB0aGUgaW50ZXJydXB0IGRyaXZlciB0byAKK2Rldi0+cG9sbCgpIGxvb2sgYXQgdGhlIHBvcnRlZCBlMTAwMCBjb2RlLgorCitUaGVyZSBhcmUgY2F2ZWF0cyB0aGF0IG1pZ2h0IGZvcmNlIHlvdSB0byBnbyB3aXRoIG1vdmluZyBldmVyeXRoaW5nIHRvIAorZGV2LT5wb2xsKCkuIERpZmZlcmVudCBOSUNzIHdvcmsgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZWlyIHN0YXR1cy9ldmVudCAKK2Fja25vd2xlZGdlbWVudCBzZXR1cC4gCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGV2ZW50IHJlZ2lzdGVyIEFDSyBtZWNoYW5pc21zLgorCUkpICB3aGF0IGlzIGtub3duIGFzIENsZWFyLW9uLXJlYWQgKENPUikuCisJd2hlbiB5b3UgcmVhZCB0aGUgc3RhdHVzL2V2ZW50IHJlZ2lzdGVyLCBpdCBjbGVhcnMgZXZlcnl0aGluZyEKKwlUaGUgbmF0c2VtaSBhbmQgc3VuYm1hYyBOSUNzIGFyZSBrbm93biB0byBkbyB0aGlzLgorCUluIHRoaXMgY2FzZSB5b3VyIG9ubHkgY2hvaWNlIGlzIHRvIG1vdmUgYWxsIHRvIGRldi0+cG9sbCgpCisKKwlJSSkgQ2xlYXItb24td3JpdGUgKENPVykKKwkgaSkgeW91IGNsZWFyIHRoZSBzdGF0dXMgYnkgd3JpdGluZyBhIDEgaW4gdGhlIGJpdC1sb2NhdGlvbiB5b3Ugd2FudC4KKwkJVGhlc2UgYXJlIHRoZSBtYWpvcml0eSBvZiB0aGUgTklDcyBhbmQgd29yayB0aGUgYmVzdCB3aXRoIE5BUEkuCisJCVB1dCBvbmx5IHJlY2VpdmUgZXZlbnRzIGluIGRldi0+cG9sbCgpOyBsZWF2ZSB0aGUgcmVzdCBpbgorCQl0aGUgb2xkIGludGVycnVwdCBoYW5kbGVyLgorCSBpaSkgd2hhdGV2ZXIgeW91IHdyaXRlIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgY2xlYXJzIGV2ZXJ5IHRoaW5nIDstPgorCQlDYW50IHNlZW0gdG8gZmluZCBhbnkgc3VwcG9ydGVkIGJ5IExpbnV4IHdoaWNoIGRvIHRoaXMuIElmCisJCXNvbWVvbmUga25vd3Mgc3VjaCBhIGNoaXAgZW1haWwgdXMgcGxlYXNlLgorCQlNb3ZlIGFsbCB0byBkZXYtPnBvbGwoKQorCitDKSBBYmlsaXR5IHRvIGRldGVjdCBuZXcgd29yayBjb3JyZWN0bHkuCitOQVBJIHdvcmtzIGJ5IHNodXR0aW5nIGRvd24gZXZlbnQgaW50ZXJydXB0cyB3aGVuIHRoZXJlcyB3b3JrIGFuZAordHVybmluZyB0aGVtIG9uIHdoZW4gdGhlcmVzIG5vbmUuIAorTmV3IHBhY2tldHMgbWlnaHQgc2hvdyB1cCBpbiB0aGUgc21hbGwgd2luZG93IHdoaWxlIGludGVycnVwdHMgd2VyZSBiZWluZyAKK3JlLWVuYWJsZWQgKHJlZmVyIHRvIGFwcGVuZGl4IDIpLiAgQSBwYWNrZXQgbWlnaHQgc25lYWsgaW4gZHVyaW5nIHRoZSBwZXJpb2QgCit3ZSBhcmUgZW5hYmxpbmcgaW50ZXJydXB0cy4gV2Ugb25seSBnZXQgdG8ga25vdyBhYm91dCBzdWNoIGEgcGFja2V0IHdoZW4gdGhlIAorbmV4dCBuZXcgcGFja2V0IGFycml2ZXMgYW5kIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQuIAorRXNzZW50aWFsbHksIHRoZXJlIGlzIGEgc21hbGwgd2luZG93IG9mIG9wcG9ydHVuaXR5IGZvciBhIHJhY2UgY29uZGl0aW9uCit3aGljaCBmb3IgY2xhcml0eSB3ZSdsbCByZWZlciB0byBhcyB0aGUgInJvdHRpbmcgcGFja2V0Ii4KKworVGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHRvcGljIGFuZCBhcHBlbmRpeCAyIGlzIGRlZGljYXRlZCBmb3IgbW9yZSAKK2Rpc2N1c3Npb24uCisKK0xvY2tpbmcgcnVsZXMgYW5kIGVudmlyb25tZW50YWwgZ3VhcmFudGVlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy1HdWFyYW50ZWU6IE9ubHkgb25lIENQVSBhdCBhbnkgdGltZSBjYW4gY2FsbCBkZXYtPnBvbGwoKTsgdGhpcyBpcyBiZWNhdXNlCitvbmx5IG9uZSBDUFUgY2FuIHBpY2sgdGhlIGluaXRpYWwgaW50ZXJydXB0IGFuZCBoZW5jZSB0aGUgaW5pdGlhbAorbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKy0gVGhlIGNvcmUgbGF5ZXIgaW52b2tlcyBkZXZpY2VzIHRvIHNlbmQgcGFja2V0cyBpbiBhIHJvdW5kIHJvYmluIGZvcm1hdC4KK1RoaXMgaW1wbGllcyByZWNlaXZlIGlzIHRvdGFseSBsb2NrbGVzcyBiZWNhdXNlIG9mIHRoZSBndWFyYW50ZWUgb25seSB0aGF0IAorb25lIENQVSBpcyBleGVjdXRpbmcgaXQuCistICBjb250ZW50aW9uIGNhbiBvbmx5IGJlIHRoZSByZXN1bHQgb2Ygc29tZSBvdGhlciBDUFUgYWNjZXNzaW5nIHRoZSByeAorcmluZy4gVGhpcyBoYXBwZW5zIG9ubHkgaW4gY2xvc2UoKSBhbmQgc3VzcGVuZCgpICh3aGVuIHRoZXNlIG1ldGhvZHMKK3RyeSB0byBjbGVhbiB0aGUgcnggcmluZyk7IAorKioqKmd1YXJhbnRlZTogZHJpdmVyIGF1dGhvcnMgbmVlZCBub3Qgd29ycnkgYWJvdXQgdGhpczsgc3luY2hyb25pemF0aW9uIAoraXMgdGFrZW4gY2FyZSBmb3IgdGhlbSBieSB0aGUgdG9wIG5ldCBsYXllci4KKy1sb2NhbCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIChpZiB5b3UgZG9udCBtb3ZlIGFsbCB0byBkZXYtPnBvbGwoKSkuIEZvciAKK2V4YW1wbGUgbGluay9NSUkgYW5kIHR4Y29tcGxldGUgY29udGludWUgZnVuY3Rpb25pbmcganVzdCBzYW1lIG9sZCB3YXkuIAorVGhpcyBpbXByb3ZlcyB0aGUgbGF0ZW5jeSBvZiBwcm9jZXNzaW5nIHRoZXNlIGV2ZW50cy4gSXQgaXMgYWxzbyBhc3N1bWVkIHRoYXQgCit0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgdGhlIGxhcmdlc3QgY2F1c2Ugb2Ygbm9pc2UuIE5vdGUgdGhpcyBtaWdodCBub3QgCithbHdheXMgYmUgdHJ1ZS4gCitbYWNjb3JkaW5nIHRvIE1hbmZyZWQgU3ByYXVsLCB0aGUgd2luYm9uZCBpbnNpc3RzIG9uIHNlbmRpbmcgb25lIAordHhtaXRjb21wbGV0ZSBpbnRlcnJ1cHQgZm9yIGVhY2ggcGFja2V0IChhbHRob3VnaCB0aGlzIGNhbiBiZSBtaXRpZ2F0ZWQpXS4KK0ZvciB0aGVzZSBicm9rZW4gZHJpdmVycywgbW92ZSBhbGwgdG8gZGV2LT5wb2xsKCkuCisKK0ZvciB0aGUgcmVzdCBvZiB0aGlzIHRleHQsIHdlJ2xsIGFzc3VtZSB0aGF0IGRldi0+cG9sbCgpIG9ubHkKK3Byb2Nlc3NlcyByZWNlaXZlIGV2ZW50cy4KKworbmV3IG1ldGhvZHMgaW50cm9kdWNlIGJ5IE5BUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2EpIG5ldGlmX3J4X3NjaGVkdWxlKGRldikKK0NhbGxlZCBieSBhbiBJUlEgaGFuZGxlciB0byBzY2hlZHVsZSBhIHBvbGwgZm9yIGRldmljZQorCitiKSBuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldikKK3B1dHMgdGhlIGRldmljZSBpbiBhIHN0YXRlIHdoaWNoIGFsbG93cyBmb3IgaXQgdG8gYmUgYWRkZWQgdG8gdGhlCitDUFUgcG9sbGluZyBsaXN0IGlmIGl0IGlzIHVwIGFuZCBydW5uaW5nLiBZb3UgY2FuIGxvb2sgYXQgdGhpcyBhcwordGhlIGZpcnN0IGhhbGYgb2YgIG5ldGlmX3J4X3NjaGVkdWxlKGRldikgYWJvdmU7IHRoZSBzZWNvbmQgaGFsZgorYmVpbmcgYykgYmVsb3cuCisKK2MpIF9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KQorQWRkIGRldmljZSB0byB0aGUgcG9sbCBsaXN0IGZvciB0aGlzIENQVTsgYXNzdW1pbmcgdGhhdCBfcHJlcCBhYm92ZQoraGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYW5kIHJldHVybmVkIDEuCisKK2QpIG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCB1bmRvKQorQ2FsbGVkIHRvIHJlc2NoZWR1bGUgcG9sbGluZyBmb3IgZGV2aWNlIHNwZWNpZmljYWxseSBmb3Igc29tZQorZGVmaWNpZW50IGhhcmR3YXJlLiBSZWFkIEFwcGVuZGl4IDIgZm9yIG1vcmUgZGV0YWlscy4KKworZSkgbmV0aWZfcnhfY29tcGxldGUoZGV2KQorCitSZW1vdmUgaW50ZXJmYWNlIGZyb20gdGhlIENQVSBwb2xsIGxpc3Q6IGl0IG11c3QgYmUgaW4gdGhlIHBvbGwgbGlzdAorb24gY3VycmVudCBjcHUuIFRoaXMgcHJpbWl0aXZlIGlzIGNhbGxlZCBieSBkZXYtPnBvbGwoKSwgd2hlbgoraXQgY29tcGxldGVzIGl0cyB3b3JrLiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBvdXQgb2YgcG9sbCBsaXN0IGF0IHRoaXMKK2NhbGwsIGlmIGl0IGlzIHRoZW4gY2xlYXJseSBpdCBpcyBhIEJVRygpLiBZb3UnbGwga25vdyA7LT4KKworQWxsIHRoZXNlIGFib3ZlIG5ldGhvZHMgYXJlIHVzZWQgYmVsb3cuIFNvIGtlZXAgcmVhZGluZyBmb3IgY2xhcml0eS4KKworRGV2aWNlIGRyaXZlciBjaGFuZ2VzIHRvIGJlIG1hZGUgd2hlbiBwb3J0aW5nIE5BUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JlbG93IHdlIGRlc2NyaWJlIHdoYXQga2luZCBvZiBjaGFuZ2VzIGFyZSByZXF1aXJlZCBmb3IgTkFQSSB0byB3b3JrLgorCisxKSBpbnRyb2R1Y3Rpb24gb2YgZGV2LT5wb2xsKCkgbWV0aG9kIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBpcyBpbnZva2VkIGJ5IHRoZSBuZXR3b3JrIGNvcmUgd2hlbiBpdCByZXF1ZXN0cworZm9yIG5ldyBwYWNrZXRzIGZyb20gdGhlIGRyaXZlci4gQSBkcml2ZXIgaXMgYWxsb3dlZCB0byBzZW5kIHVwdG8KK2Rldi0+cXVvdGEgcGFja2V0cyBieSB0aGUgY3VycmVudCBDUFUgYmVmb3JlIHlpZWxkaW5nIHRvIHRoZSBuZXR3b3JrCitzdWJzeXN0ZW0gKHNvIG90aGVyIGRldmljZXMgY2FuIGFsc28gZ2V0IG9wcG9ydHVuaXR5IHRvIHNlbmQgdG8gdGhlIHN0YWNrKS4KKworZGV2LT5wb2xsKCkgcHJvdG90eXBlIGxvb2tzIGFzIGZvbGxvd3M6CitpbnQgbXlfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKKworYnVkZ2V0IGlzIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIHBhY2tldHMgdGhlIG5ldHdvcmsgc3Vic3lzdGVtIG9uIHRoZQorY3VycmVudCBDUFUgY2FuIHNlbmQgdXAgdGhlIHN0YWNrIGJlZm9yZSB5aWVsZGluZyB0byBvdGhlciBzeXN0ZW0gdGFza3MuCisqRWFjaCBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlY3JlbWVudGluZyBidWRnZXQgYnkgdGhlIHRvdGFsIG51bWJlciBvZgorcGFja2V0cyBzZW50LgorCVRvdGFsIG51bWJlciBvZiBwYWNrZXRzIGNhbm5vdCBleGNlZWQgZGV2LT5xdW90YS4KKworZGV2LT5wb2xsKCkgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIHRvcCBsYXllciwgdGhlIGRyaXZlciBqdXN0IHNlbmRzIGlmIGl0IAorY2FuIHRvIHRoZSBzdGFjayB0aGUgcGFja2V0IHF1YW50aXR5IHJlcXVlc3RlZC4KKworbW9yZSBvbiBkZXYtPnBvbGwoKSBiZWxvdyBhZnRlciB0aGUgaW50ZXJydXB0IGNoYW5nZXMgYXJlIGV4cGxhaW5lZC4KKworMikgcmVnaXN0ZXJpbmcgZGV2LT5wb2xsKCkgbWV0aG9kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZXYtPnBvbGwgc2hvdWxkIGJlIHNldCBpbiB0aGUgZGV2LT5wcm9iZSgpIG1ldGhvZC4gCitlLmc6CitkZXYtPm9wZW4gPSBteV9vcGVuOworLgorLgorLyogdHdvIG5ldyBhZGRpdGlvbnMgKi8KKy8qIGZpcnN0IHJlZ2lzdGVyIG15IHBvbGwgbWV0aG9kICovCitkZXYtPnBvbGwgPSBteV9wb2xsOworLyogbmV4dCByZWdpc3RlciBteSB3ZWlnaHQvcXVhbnRhOyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiAvcHJvYyAqLworZGV2LT53ZWlnaHQgPSAxNjsKKy4KKy4KK2Rldi0+c3RvcCA9IG15X2Nsb3NlOworCisKKworMykgc2NoZWR1bGluZyBkZXYtPnBvbGwoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgaW52b2x2ZXMgbW9kaWZ5aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlIGNvZGUKK3BhdGggd2hpY2ggdGFrZXMgdGhlIHBhY2tldCBvZmYgdGhlIE5JQyBhbmQgc2VuZHMgdGhlbSB0byB0aGUgCitzdGFjay4KKworaXQncyBpbXBvcnRhbnQgYXQgdGhpcyBwb2ludCB0byBpbnRyb2R1Y2UgdGhlIGNsYXNzaWNhbCBEIEJlY2tlciAKK2ludGVycnVwdCBwcm9jZXNzb3I6CisKKy0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdGljIGlycXJldHVybl90CituZXRkZXZpY2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2luc3RhbmNlOworCXN0cnVjdCBteV9wcml2YXRlICp0cCA9IChzdHJ1Y3QgbXlfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKworCWludCB3b3JrX2NvdW50ID0gbXlfd29ya19jb3VudDsKKyAgICAgICAgc3RhdHVzID0gcmVhZF9pbnRlcnJ1cHRfc3RhdHVzX3JlZygpOworICAgICAgICBpZiAoc3RhdHVzID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIElSUV9OT05FOyAvKiBTaGFyZWQgSVJROiBub3QgdXMgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA9PSAweGZmZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOyAgICAgIC8qIEhvdCB1bnBsdWcgKi8KKyAgICAgICAgaWYgKHN0YXR1cyAmIGVycm9yKQorCQlkb19zb21lX2Vycm9yX2hhbmRsaW5nKCkKKyAgICAgICAgCisJZG8geworCQlhY2tub3dsZWRnZV9pbnRzX0FTQVAoKTsKKworCQlpZiAoc3RhdHVzICYgbGlua19pbnRlcnJ1cHQpIHsKKwkJCXNwaW5fbG9jaygmdHAtPmxpbmtfbG9jayk7CisJCQlkb19zb21lX2xpbmtfc3RhdF9zdHVmZigpOworCQkJc3Bpbl9sb2NrKCZ0cC0+bGlua19sb2NrKTsKKwkJfQorCQkKKwkJaWYgKHN0YXR1cyAmIHJ4X2ludGVycnVwdCkgeworCQkJcmVjZWl2ZV9wYWNrZXRzKGRldik7CisJCX0KKworCQlpZiAoc3RhdHVzICYgcnhfbm9idWZzKSB7CisJCQltYWtlX3J4X2J1ZmZzX2F2YWlsKCk7CisJCX0KKwkJCQorCQlpZiAoc3RhdHVzICYgdHhfcmVsYXRlZCkgeworCQkJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CisJCQl0eF9yaW5nX2ZyZWUoZGV2KTsKKwkJCWlmICh0eF9kaWVkKQorCQkJCXJlc3RhcnRfdHgoKTsKKwkJCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CisJCX0KKworCQlzdGF0dXMgPSByZWFkX2ludGVycnVwdF9zdGF0dXNfcmVnKCk7CisKKwl9IHdoaWxlICghKHN0YXR1cyAmIGVycm9yKSB8fCBtb3JlX3dvcmtfdG9fYmVfZG9uZSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIG5vdyBjaGFuZ2UgdGhpcyB0byB3aGF0IGlzIHNob3duIGJlbG93IHRvIE5BUEktZW5hYmxlIGl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaXJxcmV0dXJuX3QKK25ldGRldmljZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2luc3RhbmNlOworCXN0cnVjdCBteV9wcml2YXRlICp0cCA9IChzdHJ1Y3QgbXlfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKworICAgICAgICBzdGF0dXMgPSByZWFkX2ludGVycnVwdF9zdGF0dXNfcmVnKCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSVJRX05PTkU7ICAgICAgICAgLyogU2hhcmVkIElSUTogbm90IHVzICovCisgICAgICAgIGlmIChzdGF0dXMgPT0gMHhmZmZmKQorICAgICAgICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsgICAgICAgICAvKiBIb3QgdW5wbHVnICovCisgICAgICAgIGlmIChzdGF0dXMgJiBlcnJvcikKKwkJZG9fc29tZV9lcnJvcl9oYW5kbGluZygpOworICAgICAgICAKKwlkbyB7CisvKioqKioqKioqKioqKioqKioqKioqKioqIHN0YXJ0IG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJCWFja25vd2xlZGdlX2ludHNfQVNBUCgpOyAgLy8gZG9udCBhY2sgcnggYW5kIHJ4bm9idWZmIGhlcmUKKy8qKioqKioqKioqKioqKioqKioqKioqKiogZW5kIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisKKwkJaWYgKHN0YXR1cyAmIGxpbmtfaW50ZXJydXB0KSB7CisJCQlzcGluX2xvY2soJnRwLT5saW5rX2xvY2spOworCQkJZG9fc29tZV9saW5rX3N0YXRfc3R1ZmYoKTsKKwkJCXNwaW5fdW5sb2NrKCZ0cC0+bGlua19sb2NrKTsKKwkJfQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBzdGFydCBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCQlpZiAoc3RhdHVzICYgcnhfaW50ZXJydXB0IHx8IChzdGF0dXMgJiByeF9ub2J1ZmZzKSkgeworCQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KSkgeworCisJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGNhdXNlZCAKKwkJCSAgICAgICAgICoJYnkgYXJyaXZpbmcgcGFja2V0cyAqLworCQkJCWRpc2FibGVfcnhfYW5kX3J4bm9idWZmX2ludHMoKTsKKwkJCQkvKiB0ZWxsIHN5c3RlbSB3ZSBoYXZlIHdvcmsgdG8gYmUgZG9uZS4gKi8KKwkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldik7CisJCQl9IGVsc2UgeworCQkJCXByaW50aygiZHJpdmVyIGJ1ZyEgaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOworCQkJCS8qIEZJWCBieSBkaXNhYmxpbmcgaW50ZXJydXB0cyAgKi8KKwkJCQlkaXNhYmxlX3J4X2FuZF9yeG5vYnVmZl9pbnRzKCk7CisJCQl9CisJCX0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogZW5kIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKwkJCQorCQlpZiAoc3RhdHVzICYgdHhfcmVsYXRlZCkgeworCQkJc3Bpbl9sb2NrKCZ0cC0+bG9jayk7CisJCQl0eF9yaW5nX2ZyZWUoZGV2KTsKKworCQkJaWYgKHR4X2RpZWQpCisJCQkJcmVzdGFydF90eCgpOworCQkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKKwkJfQorCisJCXN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBzdGFydCBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCX0gd2hpbGUgKCEoc3RhdHVzICYgZXJyb3IpIHx8IG1vcmVfd29ya190b19iZV9kb25lKHN0YXR1cykpOworLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworV2Ugbm90ZSBzZXZlcmFsIHRoaW5ncyBmcm9tIGFib3ZlOgorCitJKSBBbnkgaW50ZXJydXB0IHNvdXJjZSB3aGljaCBpcyBjYXVzZWQgYnkgYXJyaXZpbmcgcGFja2V0cyBpcyBub3cKK3R1cm5lZCBvZmYgd2hlbiBpdCBvY2N1cnMuIERlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUsIHRoZXJlIGNvdWxkIGJlCitzZXZlcmFsIHJlYXNvbnMgdGhhdCBhcnJpdmluZyBwYWNrZXRzIHdvdWxkIGNhdXNlIGludGVycnVwdHM7IHRoZXNlIGFyZSB0aGUKK2ludGVycnVwdCBzb3VyY2VzIHdlIHdpc2ggdG8gYXZvaWQuIFRoZSB0d28gY29tbW9uIG9uZXMgYXJlIGEpIGEgcGFja2V0IAorYXJyaXZpbmcgKHJ4aW50KSBiKSBhIHBhY2tldCBhcnJpdmluZyBhbmQgZmluZGluZyBubyBETUEgYnVmZmVycyBhdmFpbGFibGUKKyhyeG5vYnVmZikgLgorVGhpcyBtZWFucyBhbHNvIGFja25vd2xlZGdlX2ludHNfQVNBUCgpIHdpbGwgbm90IGNsZWFyIHRoZSBzdGF0dXMKK3JlZ2lzdGVyIGZvciB0aG9zZSB0d28gaXRlbXMgYWJvdmU7IGNsZWFyaW5nIGlzIGRvbmUgaW4gdGhlIHBsYWNlIHdoZXJlIAorcHJvcGVyIHdvcmsgaXMgZG9uZSB3aXRoaW4gTkFQSTsgYXQgdGhlIHBvbGwoKSBhbmQgcmVmaWxsX3J4X3JpbmcoKSAKK2Rpc2N1c3NlZCBmdXJ0aGVyIGJlbG93LgorbmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgpIHJldHVybnMgMSBpZiBkZXZpY2UgaXMgaW4gcnVubmluZyBzdGF0ZSBhbmQKK2dldHMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBjb3JlIHBvbGwgbGlzdC4gSWYgd2UgZ2V0IGEgemVybyB2YWx1ZQord2UgY2FuIF9hbG1vc3RfIGFzc3VtZSBhcmUgYWxyZWFkeSBhZGRlZCB0byB0aGUgbGlzdCAoaW5zdGVhZCBvZiBub3QgcnVubmluZy4gCitMb2dpYyBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IHlvdSBzaG91bGRuJ3QgZ2V0IGludGVycnVwdCBpZiBub3QgcnVubmluZykKK1dlIHJlY3RpZnkgdGhpcyBieSBkaXNhYmxpbmcgcnggYW5kIHJ4bm9idWYgaW50ZXJydXB0cy4KKworSUkpIHRoYXQgcmVjZWl2ZV9wYWNrZXRzKGRldikgYW5kIG1ha2VfcnhfYnVmZnNfYXZhaWwoKSBtYXkgaGF2ZSBkaXNhcHBlYXJlZC4KK1RoZXNlIGZ1bmN0aW9uYWxpdGllcyBhcmUgc3RpbGwgYXJvdW5kIGFjdHVhbGx5Li4uLi4uCisKK2luZmFjdCwgcmVjZWl2ZV9wYWNrZXRzKGRldikgaXMgdmVyeSBjbG9zZSB0byBteV9wb2xsKCkgYW5kIAorbWFrZV9yeF9idWZmc19hdmFpbCgpIGlzIGludm9rZWQgZnJvbSBteV9wb2xsKCkKKworNCkgY29udmVydGluZyByZWNlaXZlX3BhY2tldHMoKSB0byBkZXYtPnBvbGwoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2UgbmVlZCB0byBjb252ZXJ0IHRoZSBjbGFzc2ljYWwgRCBCZWNrZXIgcmVjZWl2ZV9wYWNrZXRzKGRldikgdG8gbXlfcG9sbCgpCisKK0ZpcnN0IHRoZSB0eXBpY2FsIHJlY2VpdmVfcGFja2V0cygpIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiB0aGlzIGlzIGNhbGxlZCBieSBpbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIHZvaWQgcmVjZWl2ZV9wYWNrZXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCisJc3RydWN0IG15X3ByaXZhdGUgKnRwID0gKHN0cnVjdCBteV9wcml2YXRlICopZGV2LT5wcml2OworCXJ4X3JpbmcgPSB0cC0+cnhfcmluZzsKKwljdXJfcnggPSB0cC0+Y3VyX3J4OworCWludCBlbnRyeSA9IGN1cl9yeCAlIFJYX1JJTkdfU0laRTsKKwlpbnQgcmVjZWl2ZWQgPSAwOworCWludCByeF93b3JrX2xpbWl0ID0gdHAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gdHAtPmN1cl9yeDsKKworCXdoaWxlIChyeF9yaW5nX25vdF9lbXB0eSkgeworCQl1MzIgcnhfc3RhdHVzOworCQl1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKKwkJdW5zaWduZWQgaW50IHBrdF9zaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworICAgICAgICAgICAgICAgIC8qIHJlYWQgc2l6ZStzdGF0dXMgb2YgbmV4dCBmcmFtZSBmcm9tIERNQSByaW5nIGJ1ZmZlciAqLworCQkvKiB0aGUgbnVtYmVyIDE2IGFuZCA0IGFyZSBqdXN0IGV4YW1wbGVzICovCisgICAgICAgICAgICAgICAgcnhfc3RhdHVzID0gbGUzMl90b19jcHUgKCoodTMyICopIChyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKKyAgICAgICAgICAgICAgICByeF9zaXplID0gcnhfc3RhdHVzID4+IDE2OworICAgICAgICAgICAgICAgIHBrdF9zaXplID0gcnhfc2l6ZSAtIDQ7CisKKwkJLyogcHJvY2VzcyBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJ4X3NpemUgPiAoTUFYX0VUSF9GUkFNRV9TSVpFKzQpKSB8fAorICAgICAgICAgICAgICAgICAgICAoIShyeF9zdGF0dXMgJiBSeFN0YXR1c09LKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldGRydl9yeF9lcnIgKHJ4X3N0YXR1cywgZGV2LCB0cCwgaW9hZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoLS1yeF93b3JrX2xpbWl0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisJCS8qIGdyYWIgYSBza2IgKi8KKyAgICAgICAgICAgICAgICBza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3Rfc2l6ZSArIDIpOworICAgICAgICAgICAgICAgIGlmIChza2IpIHsKKwkJCS4KKwkJCS4KKwkJCW5ldGlmX3J4IChza2IpOworCQkJLgorCQkJLgorICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAvKiBPT00gKi8KKwkJCS8qc2VlbXMgdmVyeSBkcml2ZXIgc3BlY2lmaWMgLi4uIHNvbWUganVzdCBwYXNzCisJCQl3aGF0ZXZlciBpcyBvbiB0aGUgcmluZyBhbHJlYWR5LiAqLworICAgICAgICAgICAgICAgIH0KKworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IHNrYiBvbiB0aGUgcmluZyAqLworCQllbnRyeSA9ICgrK3RwLT5jdXJfcngpICUgUlhfUklOR19TSVpFOworCQlyZWNlaXZlZCsrIDsKKworICAgICAgICB9CisKKwkvKiBzdG9yZSBjdXJyZW50IHJpbmcgcG9pbnRlciBzdGF0ZSAqLworICAgICAgICB0cC0+Y3VyX3J4ID0gY3VyX3J4OworCisgICAgICAgIC8qIFJlZmlsbCB0aGUgUnggcmluZyBidWZmZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCAqLworCXJlZmlsbF9yeF9yaW5nKCk7CisJLgorCS4KKworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2UgY2hhbmdlIGl0IHRvIGEgbmV3IG9uZSBiZWxvdzsgbm90ZSB0aGUgYWRkaXRpb25hbCBwYXJhbWV0ZXIgaW4KK3RoZSBjYWxsLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIHRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBuZXR3b3JrIGNvcmUgKi8KK3N0YXRpYyBpbnQgbXlfcG9sbCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCit7CisKKwlzdHJ1Y3QgbXlfcHJpdmF0ZSAqdHAgPSAoc3RydWN0IG15X3ByaXZhdGUgKilkZXYtPnByaXY7CisJcnhfcmluZyA9IHRwLT5yeF9yaW5nOworCWN1cl9yeCA9IHRwLT5jdXJfcng7CisJaW50IGVudHJ5ID0gY3VyX3J4ICUgUlhfQlVGX0xFTjsKKwkvKiBtYXhpbXVtIHBhY2tldHMgdG8gc2VuZCB0byB0aGUgc3RhY2sgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCWludCByeF93b3JrX2xpbWl0ID0gZGV2LT5xdW90YTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorICAgIGRvIHsgIC8vIG91dGVyIGJlZ2lubmluZyBsb29wIHN0YXJ0cyBoZXJlCisKKwljbGVhcl9yeF9zdGF0dXNfcmVnaXN0ZXJfYml0KCk7CisKKwl3aGlsZSAocnhfcmluZ19ub3RfZW1wdHkpIHsKKwkJdTMyIHJ4X3N0YXR1czsKKwkJdW5zaWduZWQgaW50IHJ4X3NpemU7CisJCXVuc2lnbmVkIGludCBwa3Rfc2l6ZTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKyAgICAgICAgICAgICAgICAvKiByZWFkIHNpemUrc3RhdHVzIG9mIG5leHQgZnJhbWUgZnJvbSBETUEgcmluZyBidWZmZXIgKi8KKwkJLyogdGhlIG51bWJlciAxNiBhbmQgNCBhcmUganVzdCBleGFtcGxlcyAqLworICAgICAgICAgICAgICAgIHJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1ICgqKHUzMiAqKSAocnhfcmluZyArIHJpbmdfb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcnhfc2l6ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKKyAgICAgICAgICAgICAgICBwa3Rfc2l6ZSA9IHJ4X3NpemUgLSA0OworCisJCS8qIHByb2Nlc3MgZXJyb3JzICovCisgICAgICAgICAgICAgICAgaWYgKChyeF9zaXplID4gKE1BWF9FVEhfRlJBTUVfU0laRSs0KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCEocnhfc3RhdHVzICYgUnhTdGF0dXNPSykpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRkcnZfcnhfZXJyIChyeF9zdGF0dXMsIGRldiwgdHAsIGlvYWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorICAgICAgICAgICAgICAgIGlmICgtLXJ4X3dvcmtfbGltaXQgPCAwKSB7IC8qIHdlIGdvdCBwYWNrZXRzLCBidXQgbm8gcXVvdGEgKi8KKwkJCS8qIHN0b3JlIGN1cnJlbnQgcmluZyBwb2ludGVyIHN0YXRlICovCisJCQl0cC0+Y3VyX3J4ID0gY3VyX3J4OworCisJCQkvKiBSZWZpbGwgdGhlIFJ4IHJpbmcgYnVmZmVycyBpZiB0aGV5IGFyZSBuZWVkZWQgKi8KKwkJCXJlZmlsbF9yeF9yaW5nKGRldik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5vdF9kb25lOworCQl9CisvKioqKioqKioqKioqKioqKioqKioqKiAgZW5kIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBncmFiIGEgc2tiICovCisgICAgICAgICAgICAgICAgc2tiID0gZGV2X2FsbG9jX3NrYiAocGt0X3NpemUgKyAyKTsKKyAgICAgICAgICAgICAgICBpZiAoc2tiKSB7CisJCQkuCisJCQkuCisvKioqKioqKioqKioqKioqKioqKioqKioqIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKwkJCW5ldGlmX3JlY2VpdmVfc2tiIChza2IpOworLyoqKioqKioqKioqKioqKioqKioqKiogIGVuZCBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkuCisJCQkuCisgICAgICAgICAgICAgICAgfSBlbHNlIHsgIC8qIE9PTSAqLworCQkJLypzZWVtcyB2ZXJ5IGRyaXZlciBzcGVjaWZpYyAuLi4gY29tbW9uIGlzIGp1c3QgcGFzcworCQkJd2hhdGV2ZXIgaXMgb24gdGhlIHJpbmcgYWxyZWFkeS4gKi8KKyAgICAgICAgICAgICAgICB9CisKKwkJLyogbW92ZSB0byB0aGUgbmV4dCBza2Igb24gdGhlIHJpbmcgKi8KKwkJZW50cnkgPSAoKyt0cC0+Y3VyX3J4KSAlIFJYX1JJTkdfU0laRTsKKwkJcmVjZWl2ZWQrKyA7CisKKyAgICAgICAgfQorCisJLyogc3RvcmUgY3VycmVudCByaW5nIHBvaW50ZXIgc3RhdGUgKi8KKyAgICAgICAgdHAtPmN1cl9yeCA9IGN1cl9yeDsKKworICAgICAgICAvKiBSZWZpbGwgdGhlIFJ4IHJpbmcgYnVmZmVycyBpZiB0aGV5IGFyZSBuZWVkZWQgKi8KKwlyZWZpbGxfcnhfcmluZyhkZXYpOworCQorCS8qIG5vIHBhY2tldHMgb24gcmluZzsgYnV0IG5ldyBvbmVzIGNhbiBhcnJpdmUgc2luY2Ugd2UgbGFzdCAKKwkgICBjaGVja2VkICAqLworCXN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKwlpZiAocnggc3RhdHVzIGlzIG5vdCBzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNvbWV0aGluZyBhcnJpdmVzIGluIHRoaXMgbmFycm93IHdpbmRvdywKKwkJCWFuIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKwkvKiBkb25lISBhdCBsZWFzdCB0aGF0cyB3aGF0IGl0IGxvb2tzIGxpa2UgOy0+CisJaWYgbmV3IHBhY2tldHMgY2FtZSBpbiBhZnRlciBvdXIgbGFzdCBjaGVjayBvbiBzdGF0dXMgYml0cworCXRoZXknbGwgYmUgY2F1Z2h0IGJ5IHRoZSB3aGlsZSBjaGVjayBhbmQgd2UgZ28gYmFjayBhbmQgY2xlYXIgdGhlbSAKKwlzaW5jZSB3ZSBoYXZlbnQgZXhjZWVkZWQgb3VyIHF1b3RhICovCisgICAgfSB3aGlsZSAocnhfc3RhdHVzX2lzX3NldCk7IAorCitkb25lOgorCisvKioqKioqKioqKioqKioqKioqKioqKioqIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKyAgICAgICAgZGV2LT5xdW90YSAtPSByZWNlaXZlZDsKKyAgICAgICAgKmJ1ZGdldCAtPSByZWNlaXZlZDsKKworICAgICAgICAvKiBJZiBSWCByaW5nIGlzIG5vdCBmdWxsIHdlIGFyZSBvdXQgb2YgbWVtb3J5LiAqLworICAgICAgICBpZiAodHAtPnJ4X2J1ZmZlcnNbdHAtPmRpcnR5X3J4ICUgUlhfUklOR19TSVpFXS5za2IgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIG9vbTsKKworCS8qIHdlIGFyZSBoYXBweS9kb25lLCBubyBtb3JlIHBhY2tldHMgb24gcmluZzsgcHV0IHVzIGJhY2sKKwl0byB3aGVyZSB3ZSBjYW4gc3RhcnQgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzIGFnYWluICovCisgICAgICAgIG5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisJZW5hYmxlX3J4X2FuZF9yeG5vYnVmX2ludHMoKTsKKworICAgICAgIC8qIFRoZSBsYXN0IG9wIGhhcHBlbnMgYWZ0ZXIgcG9sbCBjb21wbGV0aW9uLiBXaGljaCBtZWFucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAqIDEuIGl0IGNhbiByYWNlIHdpdGggZGlzYWJsaW5nIGlycXMgaW4gaXJxIGhhbmRsZXIgKHdoaWNoIGFyZSBkb25lIHRvIAorCSogc2NoZWR1bGUgcG9sbHMpCisgICAgICAgICogMi4gaXQgY2FuIHJhY2Ugd2l0aCBkaXMvZW5hYmxpbmcgaXJxcyBpbiBvdGhlciBwb2xsIHRocmVhZHMKKyAgICAgICAgKiAzLiBpZiBhbiBpcnEgcmFpc2VkIGFmdGVyIHRoZSBiZWdpbmluZyBvZiB0aGUgb3V0ZXIgIGJlZ2lubmluZyAKKyAgICAgICAgKiBsb29wKG1hcmtlZCBpbiB0aGUgY29kZSBhYm92ZSksIGl0IHdpbGwgYmUgaW1tZWRpYXRlbHkKKyAgICAgICAgKiB0cmlnZ2VyZWQgaGVyZS4KKyAgICAgICAgKgorICAgICAgICAqIFN1bW1hcml6aW5nOiB0aGUgbG9naWMgbWF5IHJlc3VsdHMgaW4gc29tZSByZWR1bmRhbnQgaXJxcyBib3RoCisgICAgICAgICogZHVlIHRvIHJhY2VzIGluIG1hc2tpbmcgYW5kIGR1ZSB0byB0b28gbGF0ZSBhY2tpbmcgb2YgYWxyZWFkeQorICAgICAgICAqIHByb2Nlc3NlZCBpcnFzLiBUaGUgZ29vZCBuZXdzOiBubyBldmVudHMgYXJlIGV2ZXIgbG9zdC4KKyAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gMDsgICAvKiBkb25lICovCisKK25vdF9kb25lOgorICAgICAgICBpZiAodHAtPmN1cl9yeCAtIHRwLT5kaXJ0eV9yeCA+IFJYX1JJTkdfU0laRS8yIHx8CisgICAgICAgICAgICB0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJlZmlsbF9yeF9yaW5nKGRldik7CisKKyAgICAgICAgaWYgKCFyZWNlaXZlZCkgeworICAgICAgICAgICAgICAgIHByaW50aygicmVjZWl2ZWQ9PTBcbiIpOworICAgICAgICAgICAgICAgIHJlY2VpdmVkID0gMTsKKyAgICAgICAgfQorICAgICAgICBkZXYtPnF1b3RhIC09IHJlY2VpdmVkOworICAgICAgICAqYnVkZ2V0IC09IHJlY2VpdmVkOworICAgICAgICByZXR1cm4gMTsgIC8qIG5vdF9kb25lICovCisKK29vbToKKyAgICAgICAgLyogU3RhcnQgdGltZXIsIHN0b3AgcG9sbGluZywgYnV0IGRvIG5vdCBlbmFibGUgcnggaW50ZXJydXB0cy4gKi8KKwlzdGFydF9wb2xsX3RpbWVyKGRldik7CisgICAgICAgIHJldHVybiAwOyAgLyogd2UnbGwgdGFrZSBpdCBmcm9tIGhlcmUgc28gdGVsbCBjb3JlICJkb25lIiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG5vdGUgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSBhYm92ZSB3ZSBub3RlIHRoYXQ6CiswKSByeF93b3JrX2xpbWl0ID0gZGV2LT5xdW90YSAKKzEpIHJlZmlsbF9yeF9yaW5nKCkgaXMgaW4gY2hhcmdlIG9mIGNsZWFyaW5nIHRoZSBiaXQgZm9yIHJ4bm9idWZmIHdoZW4KK2l0IGRvZXMgdGhlIHdvcmsuCisyKSBXZSBoYXZlIGEgZG9uZSBhbmQgbm90X2RvbmUgc3RhdGUuCiszKSBpbnN0ZWFkIG9mIG5ldGlmX3J4KCkgd2UgY2FsbCBuZXRpZl9yZWNlaXZlX3NrYigpIHRvIHBhc3MgdGhlIHNrYi4KKzQpIHdlIGhhdmUgYSBuZXcgd2F5IG9mIGhhbmRsaW5nIG9vbSBjb25kaXRpb24KKzUpIEEgbmV3IG91dGVyIGZvciAoOzspIGxvb3AgaGFzIGJlZW4gYWRkZWQuIFRoaXMgc2VydmVzIHRoZSBwdXJwb3NlIG9mCitlbnN1cmluZyB0aGF0IGlmIGEgbmV3IHBhY2tldCBoYXMgY29tZSBpbiwgYWZ0ZXIgd2UgYXJlIGFsbCBzZXQgYW5kIGRvbmUsCithbmQgd2UgaGF2ZSBub3QgZXhjZWVkZWQgb3VyIHF1b3RhIHRoYXQgd2UgY29udGludWUgc2VuZGluZyBwYWNrZXRzIHVwLgorIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUG9sbCB0aW1lciBjb2RlIHdpbGwgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSAKKworICAgICAgICBpZiAodHAtPmN1cl9yeCAtIHRwLT5kaXJ0eV9yeCA+IFJYX1JJTkdfU0laRS8yIHx8CisgICAgICAgICAgICB0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKSAKKyAgICAgICAgICAgICAgICByZWZpbGxfcnhfcmluZyhkZXYpOworCisgICAgICAgIC8qIElmIFJYIHJpbmcgaXMgbm90IGZ1bGwgd2UgYXJlIHN0aWxsIG91dCBvZiBtZW1vcnkuCisJICAgUmVzdGFydCB0aGUgdGltZXIgYWdhaW4uIEVsc2Ugd2UgcmUtYWRkIG91cnNlbHZlcyAKKyAgICAgICAgICAgdG8gdGhlIG1hc3RlciBwb2xsIGxpc3QuCisgICAgICAgICAqLworCisgICAgICAgIGlmICh0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJlc3RhcnRfdGltZXIoKTsKKworCWVsc2UgbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsgIC8qIHdlIGFyZSBiYWNrIG9uIHRoZSBwb2xsIGxpc3QgKi8KKwkKKzUpIGRldi0+Y2xvc2UoKSBhbmQgZGV2LT5zdXNwZW5kKCkgaXNzdWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBkcml2ZXIgd3JpdHRlciBuZWVkbnQgd29ycnkgYWJvdXQgdGhpcy4gVGhlIHRvcCBuZXQgbGF5ZXIgdGFrZXMKK2NhcmUgb2YgaXQuCisKKzYpIEFkZGluZyBuZXcgU3RhdHMgdG8gL3Byb2MgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSW4gb3JkZXIgdG8gZGVidWcgc29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzLCB3ZSBpbnRyb2R1Y2UgbmV3IHN0YXRzCit0aGF0IG5lZWQgdG8gYmUgY29sbGVjdGVkLgorVE9ETzogRmlsbCB0aGlzIGxhdGVyLgorCitBUFBFTkRJWCAxOiBkaXNjdXNzaW9uIG9uIHVzaW5nIGV0aGVybmV0IEhXIEZDCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitNb3N0IGNoaXBzIHdpdGggRkMgb25seSBzZW5kIGEgcGF1c2UgcGFja2V0IHdoZW4gdGhleSBydW4gb3V0IG9mIFJ4IGJ1ZmZlcnMuCitTaW5jZSBwYWNrZXRzIGFyZSBwdWxsZWQgb2ZmIHRoZSBETUEgcmluZyBieSBhIHNvZnRpcnEgaW4gTkFQSSwKK2lmIHRoZSBzeXN0ZW0gaXMgc2xvdyBpbiBncmFiYmluZyB0aGVtIGFuZCB3ZSBoYXZlIGEgaGlnaCBpbnB1dAorcmF0ZSAoZmFzdGVyIHRoYW4gdGhlIHN5c3RlbSdzIGNhcGFjaXR5IHRvIHJlbW92ZSBwYWNrZXRzKSwgdGhlbiB0aGVvcmV0aWNhbGx5Cit0aGVyZSB3aWxsIG9ubHkgYmUgb25lIHJ4IGludGVycnVwdCBmb3IgYWxsIHBhY2tldHMgZHVyaW5nIGEgZ2l2ZW4gcGFja2V0c3Rvcm0uCitVbmRlciBsb3cgbG9hZCwgd2UgbWlnaHQgaGF2ZSBhIHNpbmdsZSBpbnRlcnJ1cHQgcGVyIHBhY2tldC4KK0ZDIHNob3VsZCBiZSBwcm9ncmFtbWVkIHRvIGFwcGx5IGluIHRoZSBjYXNlIHdoZW4gdGhlIHN5c3RlbSBjYW50IHB1bGwgb3V0CitwYWNrZXRzIGZhc3QgZW5vdWdoIGkuZSBzZW5kIGEgcGF1c2Ugb25seSB3aGVuIHlvdSBydW4gb3V0IG9mIHJ4IGJ1ZmZlcnMuCitOb3RlIEZDIGluIGl0c2VsZiBpcyBhIGdvb2Qgc29sdXRpb24gYnV0IHdlIGhhdmUgZm91bmQgaXQgdG8gbm90IGJlCittdWNoIG9mIGEgY29tbW9kaXR5IGZlYXR1cmUgKGJvdGggaW4gTklDcyBhbmQgc3dpdGNoZXMpIGFuZCBoZW5jZSBmYWxscwordW5kZXIgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgdXNpbmcgTklDIGJhc2VkIG1pdGlnYXRpb24uIEFsc28gZXhwZXJpbWVudHMKK2luZGljYXRlIHRoYXQgaXRzIG11Y2ggaGFyZGVyIHRvIHJlc29sdmUgdGhlIHJlc291cmNlIGFsbG9jYXRpb24KK2lzc3VlIChha2EgbGF6eSByZWNlaXZpbmcgdGhhdCBOQVBJIG9mZmVycykgYW5kIGhlbmNlIHF1YW50aWZ5IGl0cyB1c2VmdWxsbmVzcworcHJvdmVkIGhhcmRlci4gSW4gYW55IGNhc2UsIEZDIHdvcmtzIGV2ZW4gYmV0dGVyIHdpdGggTkFQSSBidXQgaXMgbm90CituZWNlc3NhcnkuCisKKworQVBQRU5ESVggMjogdGhlICJyb3R0aW5nIHBhY2tldCIgcmFjZS13aW5kb3cgYXZvaWRhbmNlIHNjaGVtZSAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBhc3NvY2lhdGlvbnMgc2VlbiBoZXJlCisKKzEpIHN0YXR1cy9pbnQgd2hpY2ggaG9ub3JzIGxldmVsIHRyaWdnZXJlZCBJUlEKKworSWYgYSBzdGF0dXMgYml0IGZvciByZWNlaXZlIG9yIHJ4bm9idWZmIGlzIHNldCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgCitpbnRlcnJ1cHQtZW5hYmxlIGJpdCBpcyBub3Qgb24sIHRoZW4gbm8gaW50ZXJydXB0cyB3aWxsIGJlIGdlbmVyYXRlZC4gSG93ZXZlciwgCithcyBzb29uIGFzIHRoZSAiaW50ZXJydXB0LWVuYWJsZSIgYml0IGlzIHVubWFza2VkLCBhbiBpbW1lZGlhdGUgaW50ZXJydXB0IGlzIAorZ2VuZXJhdGVkLiAgW2Fzc3VtaW5nIHRoZSBzdGF0dXMgYml0IHdhcyBub3QgdHVybmVkIG9mZl0uCitHZW5lcmFsbHkgdGhlIGNvbmNlcHQgb2YgbGV2ZWwgdHJpZ2dlcmVkIElSUXMgaW4gYXNzb2NpYXRpb24gd2l0aCBhIHN0YXR1cyBhbmQKK2ludGVycnVwdC1lbmFibGUgQ1NSIHJlZ2lzdGVyIHNldCBpcyB1c2VkIHRvIGF2b2lkIHRoZSByYWNlLgorCitJZiB3ZSB0YWtlIHRoZSBleGFtcGxlIG9mIHRoZSB0dWxpcDoKKyJwZW5kaW5nIHdvcmsiIGlzIGluZGljYXRlZCBieSB0aGUgc3RhdHVzIGJpdChDU1I1IGluIHR1bGlwKS4KK3RoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBiaXQgKENTUjcgaW4gdHVsaXApIG1pZ2h0IGJlIHR1cm5lZCBvZmYgKGJ1dAordGhlIENTUjUgd2lsbCBjb250aW51ZSB0byBiZSB0dXJuZWQgb24gd2l0aCBuZXcgcGFja2V0IGFycml2YWxzIGV2ZW4gaWYKK3dlIGNsZWFyIGl0IHRoZSBmaXJzdCB0aW1lKQorVmVyeSBpbXBvcnRhbnQgaXMgdGhlIGZhY3QgdGhhdCBpZiB3ZSB0dXJuIG9uIHRoZSBpbnRlcnJ1cHQgYml0IG9uIHdoZW4KK3N0YXR1cyBpcyBzZXQgdGhhdCBhbiBpbW1lZGlhdGUgaXJxIGlzIHRyaWdnZXJlZC4KKyAKK0lmIHdlIGNsZWFyZWQgdGhlIHJ4IHJpbmcgYW5kIHByb2NsYWltZWQgdGhlcmUgd2FzICJubyBtb3JlIHdvcmsKK3RvIGJlIGRvbmUiIGFuZCB0aGVuIHdlbnQgb24gdG8gZG8gYSBmZXcgb3RoZXIgdGhpbmdzOyAgdGhlbiB3aGVuIHdlIGVuYWJsZQoraW50ZXJydXB0cywgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IGEgbmV3IHBhY2tldCBtaWdodCBzbmVhayBpbiBkdXJpbmcKK3RoaXMgcGhhc2UuIEl0IGhlbHBzIHRvIGxvb2sgYXQgdGhlIHBzZXVkbyBjb2RlIGZvciB0aGUgdHVsaXAgcG9sbAorcm91dGluZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIEFDSzsKKyAgICAgICAgICAgICAgICB3aGlsZSAocmluZ19pc19ub3RfZW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yay13b3JrLXdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1b3RhIGlzIGV4Y2VlZGVkOiBleGl0LCBubyB0b3VjaGluZyBpcnEgc3RhdHVzL21hc2sKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogTm8gcGFja2V0cywgYnV0IG5ldyBjYW4gYXJyaXZlIHdoaWxlIHdlIGFyZSBkb2luZyB0aGlzKi8KKyAgICAgICAgICAgICAgICBDU1I1IDo9IHJlYWQKKyAgICAgICAgICAgICAgICBpZiAoQ1NSNSBpcyBub3Qgc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBzb21ldGhpbmcgYXJyaXZlcyBpbiB0aGlzIG5hcnJvdyB3aW5kb3cgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICogIHdoZXJlIHRoZSBjb21tZW50cyBhcmUgOy0+IGlycSB3aWxsIGJlIGdlbmVyYXRlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXNrIGlycXM7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0IHBvbGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChyeF9zdGF0dXNfaXNfc2V0KTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDU1I1IGJpdCBvZiBpbnRlcmVzdCBpcyBvbmx5IHRoZSByeCBzdGF0dXMuIAorSWYgeW91IGxvb2sgYXQgdGhlIGxhc3QgaWYgc3RhdGVtZW50OiAKK3lvdSBqdXN0IGZpbmlzaGVkIGdyYWJiaW5nIGFsbCB0aGUgcGFja2V0cyBmcm9tIHRoZSByeCByaW5nIC4uIHlvdSBjaGVjayBpZgorc3RhdHVzIGJpdCBzYXlzIHRoZXJlcyBtb3JlIHBhY2tldHMganVzdCBpbiAuLi4gaXQgc2F5cyBub25lOyB5b3UgdGhlbgorZW5hYmxlIHJ4IGludGVycnVwdHMgYWdhaW47IGlmIGEgbmV3IHBhY2tldCBqdXN0IGNhbWUgaW4gZHVyaW5nIHRoaXMgY2hlY2ssCit3ZSBhcmUgY291bnRpbmcgdGhhdCBDU1I1IHdpbGwgYmUgc2V0IGluIHRoYXQgc21hbGwgd2luZG93IG9mIG9wcG9ydHVuaXR5CithbmQgdGhhdCBieSByZS1lbmFibGluZyBpbnRlcnJ1cHRzLCB3ZSB3b3VsZCBhY3R1YWxseSB0cmlnZXIgYW4gaW50ZXJydXB0Cit0byByZWdpc3RlciB0aGUgbmV3IHBhY2tldCBmb3IgcHJvY2Vzc2luZy4KKworW1RoZSBhYm92ZSBkZXNjcmlwdGlvbiBuYXkgYmUgdmVyeSB2ZXJib3NlLCBpZiB5b3UgaGF2ZSBiZXR0ZXIgd29yZGluZyAKK3RoYXQgd2lsbCBtYWtlIHRoaXMgbW9yZSB1bmRlcnN0YW5kYWJsZSwgcGxlYXNlIHN1Z2dlc3QgaXQuXQorCisyKSBub24tY2FwYWJsZSBoYXJkd2FyZQorCitUaGVzZSBkbyBub3QgZ2VuZXJhbGx5IHJlc3BlY3QgbGV2ZWwgdHJpZ2dlcmVkIElSUXMuIE5vcm1hbGx5LAoraXJxcyBtYXkgYmUgbG9zdCB3aGlsZSBiZWluZyBtYXNrZWQgYW5kIHRoZSBvbmx5IHdheSB0byBsZWF2ZSBwb2xsIGlzIHRvIGRvCithIGRvdWJsZSBjaGVjayBmb3IgbmV3IGlucHV0IGFmdGVyIG5ldGlmX3J4X2NvbXBsZXRlKCkgaXMgaW52b2tlZAorYW5kIHJlLWVuYWJsZSBwb2xsaW5nIChhZnRlciBzZWVpbmcgdGhpcyBuZXcgaW5wdXQpLgorCitTYW1wbGUgY29kZToKKworLS0tLS0tLS0tCisJLgorCS4KK3Jlc3RhcnRfcG9sbDoKKwl3aGlsZSAocmluZ19pc19ub3RfZW1wdHkoKSkgeworCQl3b3JrLXdvcmstd29yaworCQlpZiBxdW90YSBpcyBleGNlZWRlZDogZXhpdCwgbm90IHRvdWNoaW5nIGlycSBzdGF0dXMvbWFzaworCX0KKwkuCisJLgorCS4KKwllbmFibGVfcnhfaW50ZXJydXB0cygpCisJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKwlpZiAocmluZ19oYXNfbmV3X3BhY2tldCgpICYmIG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCByZWNlaXZlZCkpIHsKKwkJZGlzYWJsZV9yeF9hbmRfcnhub2J1ZnMoKQorCQlnb3RvIHJlc3RhcnRfcG9sbAorCX0gd2hpbGUgKHJ4X3N0YXR1c19pc19zZXQpOworLS0tLS0tLS0tCisJCQorQmFzaWNhbGx5IG5ldGlmX3J4X2NvbXBsZXRlKCkgcmVtb3ZlcyB1cyBmcm9tIHRoZSBwb2xsIGxpc3QsIGJ1dCBiZWNhdXNlIGEKK25ldyBwYWNrZXQgd2hpY2ggd2lsbCBuZXZlciBiZSBjYXVnaHQgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJhY2UKK21pZ2h0IGNvbWUgaW4sIHdlIGF0dGVtcHQgdG8gcmUtYWRkIG91cnNlbHZlcyB0byB0aGUgcG9sbCBsaXN0LiAKKworCisKKworQVBQRU5ESVggMzogU2NoZWR1bGluZyBpc3N1ZXMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FzIHNlZW4gTkFQSSBtb3ZlcyBwcm9jZXNzaW5nIHRvIHNvZnRpcnEgbGV2ZWwuIExpbnV4IHVzZXMgdGhlIGtzb2Z0aXJxZCBhcyB0aGUgCitnZW5lcmFsIHNvbHV0aW9uIHRvIHNjaGVkdWxlIHNvZnRpcnEncyB0byBydW4gYmVmb3JlIG5leHQgaW50ZXJydXB0IGFuZCBieSBwdXR0aW5nIAordGhlbSB1bmRlciBzY2hlZHVsZXIgY29udHJvbC4gQWxzbyB0aGlzIHByZXZlbnRzIGNvbnNlY3V0aXZlIHNvZnRpcnEncyBmcm9tIAorbW9ub3BvbGl6ZSB0aGUgQ1BVLiBUaGlzIGFsc28gaGF2ZSB0aGUgZWZmZWN0IHRoYXQgdGhlIHByaW9yaXR5IG9mIGtzb2Z0aXJxIG5lZWRzIAordG8gYmUgY29uc2lkZXJlZCB3aGVuIHJ1bm5pbmcgdmVyeSBDUFUtaW50ZW5zaXZlIGFwcGxpY2F0aW9ucyBhbmQgbmV0d29ya2luZyB0bworZ2V0IHRoZSBwcm9wZXIgYmFsYW5jZSBvZiBzb2Z0aXJxL3VzZXIgYmFsYW5jZS4gSW5jcmVhc2luZyBrc29mdGlycSBwcmlvcml0eSB0byAwIAorKGV2ZW50dWFsbHkgbW9yZSkgaXMgcmVwb3J0ZWQgY3VyZSBwcm9ibGVtcyB3aXRoIGxvdyBuZXR3b3JrIHBlcmZvcm1hbmNlIGF0IGhpZ2ggCitDUFUgbG9hZC4KKworTW9zdCB1c2VkIHByb2Nlc3NlcyBpbiBhIEdJR0Ugcm91dGVyOgorVVNFUiAgICAgICBQSUQgJUNQVSAlTUVNICBTSVpFICAgUlNTIFRUWSBTVEFUIFNUQVJUICAgVElNRSBDT01NQU5ECityb290ICAgICAgICAgMyAgMC4yICAwLjAgICAgIDAgICAgIDAgID8gIFJXTiBBdWcgMTUgNjAyOjAwIChrc29mdGlycWRfQ1BVMCkKK3Jvb3QgICAgICAgMjMyICAwLjAgIDcuOSA0MTQwMCA0MDg4NCAgPyAgUyAgIEF1ZyAxNSAgNzQ6MTIgZ2F0ZWQgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JlbGV2YW50IHNpdGVzOgorPT09PT09PT09PT09PT09PT09CitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9OQVBJLworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUT0RPOiBXcml0ZSBuZXQtc2tlbGV0b24uYyBkcml2ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F1dGhvcnM6Cis9PT09PT09PQorQWxleGV5IEt1em5ldHNvdiA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CitKYW1hbCBIYWRpIFNhbGltIDxoYWRpQGN5YmVydXMuY2E+CitSb2JlcnQgT2xzc29uIDxSb2JlcnQuT2xzc29uQGRhdGEuc2x1LnNlPgorCitBY2tub3dsZWRnZW1lbnRzOgorPT09PT09PT09PT09PT09PQorUGVvcGxlIHdobyBtYWRlIHRoaXMgZG9jdW1lbnQgYmV0dGVyOgorCitMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBnbnUub3JnPgorQW5kcmV3IE1vcnRvbiAgPGFrcG1AemlwLmNvbS5hdT4KK01hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+CitEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPgorSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1BMSVAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1BMSVAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkN2UzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUExJUC50eHQKQEAgLTAsMCArMSwyMTUgQEAKK1BMSVA6IFRoZSBQYXJhbGxlbCBMaW5lIEludGVybmV0IFByb3RvY29sIERldmljZQorCitEb25hbGQgQmVja2VyIChiZWNrZXJAc3VwZXIub3JnKQorSS5ELkEuIFN1cGVyY29tcHV0aW5nIFJlc2VhcmNoIENlbnRlciwgQm93aWUgTUQgMjA3MTUKKworQXQgc29tZSBwb2ludCBULiBUaG9ybiB3aWxsIHByb2JhYmx5IGNvbnRyaWJ1dGUgdGV4dCwKK1RvbW15IFRob3JuICh0dGhvcm5AZGFpbWkuYWF1LmRrKQorCitQTElQIEludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHBhcmFsbGVsIHBvcnQgcGFja2V0IHB1c2hlciBmb3IgTmV0L0xHWC4KK1RoaXMgZGV2aWNlIGludGVyZmFjZSBhbGxvd3MgYSBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIGJldHdlZW4gdHdvCitwYXJhbGxlbCBwb3J0cyB0byBhcHBlYXIgYXMgYSBJUCBuZXR3b3JrIGludGVyZmFjZS4KKworV2hhdCBpcyBQTElQPworPT09PT09PT09PT09PQorCitQTElQIGlzIFBhcmFsbGVsIExpbmUgSVAsIHRoYXQgaXMsIHRoZSB0cmFuc3BvcnRhdGlvbiBvZiBJUCBwYWNrYWdlcworb3ZlciBhIHBhcmFsbGVsIHBvcnQuIEluIHRoZSBjYXNlIG9mIGEgUEMsIHRoZSBvYnZpb3VzIGNob2ljZSBpcyB0aGUKK3ByaW50ZXIgcG9ydC4gIFBMSVAgaXMgYSBub24tc3RhbmRhcmQsIGJ1dCBbY2FuIHVzZV0gdXNlcyB0aGUgc3RhbmRhcmQKK0xhcExpbmsgbnVsbC1wcmludGVyIGNhYmxlIFtjYW4gYWxzbyB3b3JrIGluIHR1cmJvIG1vZGUsIHdpdGggYSBQTElQCitjYWJsZV0uIFtUaGUgcHJvdG9jb2wgdXNlZCB0byBwYWNrIElQIHBhY2thZ2VzLCBpcyBhIHNpbXBsZSBvbmUKK2luaXRpYXRlZCBieSBDcnlud3IuXQorCitBZHZhbnRhZ2VzIG9mIFBMSVAKKz09PT09PT09PT09PT09PT09PQorCitJdCdzIGNoZWFwLCBpdCdzIGF2YWlsYWJsZSBldmVyeXdoZXJlLCBhbmQgaXQncyBlYXN5LgorCitUaGUgUExJUCBjYWJsZSBpcyBhbGwgdGhhdCdzIG5lZWRlZCB0byBjb25uZWN0IHR3byBMaW51eCBib3hlcywgYW5kIGl0CitjYW4gYmUgYnVpbHQgZm9yIHZlcnkgZmV3IGJ1Y2tzLgorCitDb25uZWN0aW5nIHR3byBMaW51eCBib3hlcyB0YWtlcyBvbmx5IGEgc2Vjb25kJ3MgZGVjaXNpb24gYW5kIGEgZmV3CittaW51dGVzJyB3b3JrLCBubyBuZWVkIHRvIHNlYXJjaCBmb3IgYSBbc3VwcG9ydGVkXSBuZXRjYXJkLiBUaGlzIG1pZ2h0CitldmVuIGJlIGVzcGVjaWFsbHkgaW1wb3J0YW50IGluIHRoZSBjYXNlIG9mIG5vdGVib29rcywgd2hlcmUgbmV0Y2FyZHMKK2FyZSBub3QgZWFzaWx5IGF2YWlsYWJsZS4KKworTm90IHJlcXVpcmluZyBhIG5ldGNhcmQgYWxzbyBtZWFucyB0aGF0IGFwYXJ0IGZyb20gY29ubmVjdGluZyB0aGUKK2NhYmxlcywgZXZlcnl0aGluZyBlbHNlIGlzIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24gW3doaWNoIGluIHByaW5jaXBsZQorY291bGQgYmUgbWFkZSB2ZXJ5IGVhc3kuXQorCitEaXNhZHZhbnRhZ2VzIG9mIFBMSVAKKz09PT09PT09PT09PT09PT09PT09PQorCitEb2Vzbid0IHdvcmsgb3ZlciBhIG1vZGVtLCBsaWtlIFNMSVAgYW5kIFBQUC4gTGltaXRlZCByYW5nZSwgMTUgbS4KK0NhbiBvbmx5IGJlIHVzZWQgdG8gY29ubmVjdCB0aHJlZSAoPykgTGludXggYm94ZXMuIERvZXNuJ3QgY29ubmVjdCB0bworYW4gZXhpc3RpbmcgRXRoZXJuZXQuIElzbid0IHN0YW5kYXJkIChub3QgZXZlbiBkZSBmYWN0byBzdGFuZGFyZCwgbGlrZQorU0xJUCkuCisKK1BlcmZvcm1hbmNlCis9PT09PT09PT09PQorCitQTElQIGVhc2lseSBvdXRwZXJmb3JtcyBFdGhlcm5ldCBjYXJkcy4uLi4odXBzLCBJIHdhcyBkcmVhbWluZywgYnV0CitpdCAqaXMqIGdldHRpbmcgbGF0ZS4gRU9CKQorCitQTElQIGRyaXZlciBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBMaW51eCBQTElQIGRyaXZlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgQ3J5bndyIHByb3RvY29sLAordGhhdCB1c2VzIHRoZSBwYXJhbGxlbCBwb3J0IHN1YnN5c3RlbSBvZiB0aGUga2VybmVsIGluIG9yZGVyIHRvIHByb3Blcmx5CitzaGFyZSBwYXJhbGxlbCBwb3J0cyBiZXR3ZWVuIFBMSVAgYW5kIG90aGVyIHNlcnZpY2VzLgorCitJUlFzIGFuZCB0cmlnZ2VyIHRpbWVvdXRzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gYSBwYXJhbGxlbCBwb3J0IHVzZWQgZm9yIGEgUExJUCBkcml2ZXIgaGFzIGFuIElSUSBjb25maWd1cmVkIHRvIGl0LCB0aGUKK1BMSVAgZHJpdmVyIGlzIHNpZ25hbGVkIHdoZW5ldmVyIGRhdGEgaXMgc2VudCB0byBpdCB2aWEgdGhlIGNhYmxlLCBzdWNoIHRoYXQKK3doZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUsIHRoZSBkcml2ZXIgaXNuJ3QgYmVpbmcgdXNlZC4KKworSG93ZXZlciwgb24gc29tZSBtYWNoaW5lcyBpdCBpcyBoYXJkLCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gY29uZmlndXJlIGFuIElSUQordG8gYSBjZXJ0YWluIHBhcmFsbGVsIHBvcnQsIG1haW5seSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgc29tZSBvdGhlciBkZXZpY2UuCitPbiB0aGVzZSBtYWNoaW5lcywgdGhlIFBMSVAgZHJpdmVyIGNhbiBiZSB1c2VkIGluIElSUS1sZXNzIG1vZGUsIHdoZXJlCit0aGUgUExJUCBkcml2ZXIgd291bGQgY29uc3RhbnRseSBwb2xsIHRoZSBwYXJhbGxlbCBwb3J0IGZvciBkYXRhIHdhaXRpbmcsCithbmQgaWYgc3VjaCBkYXRhIGlzIGF2YWlsYWJsZSwgcHJvY2VzcyBpdC4gVGhpcyBtb2RlIGlzIGxlc3MgZWZmaWNpZW50IHRoYW4KK3RoZSBJUlEgbW9kZSwgYmVjYXVzZSB0aGUgZHJpdmVyIGhhcyB0byBjaGVjayB0aGUgcGFyYWxsZWwgcG9ydCBtYW55IHRpbWVzCitwZXIgc2Vjb25kLCBldmVuIHdoZW4gbm8gZGF0YSBhdCBhbGwgaXMgc2VudC4gU29tZSByb3VnaCBtZWFzdXJlbWVudHMKK2luZGljYXRlIHRoYXQgdGhlcmUgaXNuJ3QgYSBub3RpY2VhYmxlIHBlcmZvcm1hbmNlIGRyb3Agd2hlbiB1c2luZyBJUlEtbGVzcworbW9kZSBhcyBjb21wYXJlZCB0byBJUlEgbW9kZSBhcyBmYXIgYXMgdGhlIGRhdGEgdHJhbnNmZXIgc3BlZWQgaXMgaW52b2x2ZWQuCitUaGVyZSBpcyBhIHBlcmZvcm1hbmNlIGRyb3Agb24gdGhlIG1hY2hpbmUgaG9zdGluZyB0aGUgZHJpdmVyLgorCitXaGVuIHRoZSBQTElQIGRyaXZlciBpcyB1c2VkIGluIElSUSBtb2RlLCB0aGUgdGltZW91dCB1c2VkIGZvciB0cmlnZ2VyaW5nIGEKK2RhdGEgdHJhbnNmZXIgKHRoZSBtYXhpbWFsIHRpbWUgdGhlIFBMSVAgZHJpdmVyIHdvdWxkIGFsbG93IHRoZSBvdGhlciBzaWRlCitiZWZvcmUgYW5ub3VuY2luZyBhIHRpbWVvdXQsIHdoZW4gdHJ5aW5nIHRvIGhhbmRzaGFrZSBhIHRyYW5zZmVyIG9mIHNvbWUKK2RhdGEpIGlzLCBieSBkZWZhdWx0LCA1MDB1c2VjLiBBcyBJUlEgZGVsaXZlcnkgaXMgbW9yZSBvciBsZXNzIGltbWVkaWF0ZSwKK3RoaXMgdGltZW91dCBpcyBxdWl0ZSBzdWZmaWNpZW50LiAKKworV2hlbiBpbiBJUlEtbGVzcyBtb2RlLCB0aGUgUExJUCBkcml2ZXIgcG9sbHMgdGhlIHBhcmFsbGVsIHBvcnQgSFogdGltZXMKK3BlciBzZWNvbmQgKHdoZXJlIEhaIGlzIHR5cGljYWxseSAxMDAgb24gbW9zdCBwbGF0Zm9ybXMsIGFuZCAxMDI0IG9uIGFuCitBbHBoYSwgYXMgb2YgdGhpcyB3cml0aW5nKS4gQmV0d2VlbiB0d28gc3VjaCBwb2xscywgdGhlcmUgYXJlIDEwXjYvSFogdXNlY3MuCitPbiBhbiBpMzg2LCBmb3IgZXhhbXBsZSwgMTBeNi8xMDAgPSAxMDAwMHVzZWMuIEl0IGlzIGVhc3kgdG8gc2VlIHRoYXQgaXQgaXMKK3F1aXRlIHBvc3NpYmxlIGZvciB0aGUgdHJpZ2dlciB0aW1lb3V0IHRvIGV4cGlyZSBiZXR3ZWVuIHR3byBzdWNoIHBvbGxzLCBhcwordGhlIHRpbWVvdXQgaXMgb25seSA1MDB1c2VjIGxvbmcuIEFzIGEgcmVzdWx0LCBpdCBpcyByZXF1aXJlZCB0byBjaGFuZ2UgdGhlCit0cmlnZ2VyIHRpbWVvdXQgb24gdGhlICpvdGhlciogc2lkZSBvZiBhIFBMSVAgY29ubmVjdGlvbiwgdG8gYWJvdXQKKzEwXjYvSFogdXNlY3MuIElmIGJvdGggc2lkZXMgb2YgYSBQTElQIGNvbm5lY3Rpb24gYXJlIHVzZWQgaW4gSVJRLWxlc3MgbW9kZSwKK3RoaXMgdGltZW91dCBpcyByZXF1aXJlZCBvbiBib3RoIHNpZGVzLgorCitJdCBhcHBlYXJzIHRoYXQgaW4gcHJhY3RpY2UsIHRoZSB0cmlnZ2VyIHRpbWVvdXQgY2FuIGJlIHNob3J0ZXIgdGhhbiBpbiB0aGUKK2Fib3ZlIGNhbGN1bGF0aW9uLiBJdCBpc24ndCBhbiBpbXBvcnRhbnQgaXNzdWUsIHVubGVzcyB0aGUgd2lyZSBpcyBmYXVsdHksCitpbiB3aGljaCBjYXNlIGEgbG9uZyB0aW1lb3V0IHdvdWxkIHN0YWxsIHRoZSBtYWNoaW5lIHdoZW4sIGZvciB3aGF0ZXZlcgorcmVhc29uLCBiaXRzIGFyZSBkcm9wcGVkLgorCitBIHV0aWxpdHkgdGhhdCBjYW4gcGVyZm9ybSB0aGlzIGNoYW5nZSBpbiBMaW51eCBpcyBwbGlwY29uZmlnLCB3aGljaCBpcyBwYXJ0CitvZiB0aGUgbmV0LXRvb2xzIHBhY2thZ2UgKGl0cyBsb2NhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCitEb2N1bWVudGF0aW9uL0NoYW5nZXMgZmlsZSkuIEFuIGV4YW1wbGUgY29tbWFuZCB3b3VsZCBiZQorJ3BsaXBjb25maWcgcGxpcFggdHJpZ2dlciAxMDAwMCcsIHdoZXJlIHBsaXBYIGlzIHRoZSBhcHByb3ByaWF0ZQorUExJUCBkZXZpY2UuCisKK1BMSVAgaGFyZHdhcmUgaW50ZXJjb25uZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQTElQIHVzZXMgc2V2ZXJhbCBkaWZmZXJlbnQgZGF0YSB0cmFuc2ZlciBtZXRob2RzLiAgVGhlIGZpcnN0IChhbmQgdGhlCitvbmx5IG9uZSBpbXBsZW1lbnRlZCBpbiB0aGUgZWFybHkgdmVyc2lvbiBvZiB0aGUgY29kZSkgdXNlcyBhIHN0YW5kYXJkCitwcmludGVyICJudWxsIiBjYWJsZSB0byB0cmFuc2ZlciBkYXRhIGZvdXIgYml0cyBhdCBhIHRpbWUgdXNpbmcKK2RhdGEgYml0IG91dHB1dHMgY29ubmVjdGVkIHRvIHN0YXR1cyBiaXQgaW5wdXRzLgorCitUaGUgc2Vjb25kIGRhdGEgdHJhbnNmZXIgbWV0aG9kIHJlbGllcyBvbiBib3RoIG1hY2hpbmVzIGhhdmluZworYmktZGlyZWN0aW9uYWwgcGFyYWxsZWwgcG9ydHMsIHJhdGhlciB0aGFuIG91dHB1dC1vbmx5IGBgcHJpbnRlcicnCitwb3J0cy4gIFRoaXMgYWxsb3dzIGJ5dGUtd2lkZSB0cmFuc2ZlcnMgYW5kIGF2b2lkcyByZWNvbnN0cnVjdGluZworbmliYmxlcyBpbnRvIGJ5dGVzLCBsZWFkaW5nIHRvIG11Y2ggZmFzdGVyIHRyYW5zZmVycy4KKworUGFyYWxsZWwgVHJhbnNmZXIgTW9kZSAwIENhYmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNhYmxlIGZvciB0aGUgZmlyc3QgdHJhbnNmZXIgbW9kZSBpcyBhIHN0YW5kYXJkCitwcmludGVyICJudWxsIiBjYWJsZSB3aGljaCB0cmFuc2ZlcnMgZGF0YSBmb3VyIGJpdHMgYXQgYSB0aW1lIHVzaW5nCitkYXRhIGJpdCBvdXRwdXRzIG9mIHRoZSBmaXJzdCBwb3J0IChtYWNoaW5lIFQpIGNvbm5lY3RlZCB0byB0aGUKK3N0YXR1cyBiaXQgaW5wdXRzIG9mIHRoZSBzZWNvbmQgcG9ydCAobWFjaGluZSBSKS4gIFRoZXJlIGFyZSBmaXZlCitzdGF0dXMgaW5wdXRzLCBhbmQgdGhleSBhcmUgdXNlZCBhcyBmb3VyIGRhdGEgaW5wdXRzIGFuZCBhIGNsb2NrIChkYXRhCitzdHJvYmUpIGlucHV0LCBhcnJhbmdlZCBzbyB0aGF0IHRoZSBkYXRhIGlucHV0IGJpdHMgYXBwZWFyIGFzIGNvbnRpZ3VvdXMKK2JpdHMgd2l0aCBzdGFuZGFyZCBzdGF0dXMgcmVnaXN0ZXIgaW1wbGVtZW50YXRpb24uCisKK0EgY2FibGUgdGhhdCBpbXBsZW1lbnRzIHRoaXMgcHJvdG9jb2wgaXMgYXZhaWxhYmxlIGNvbW1lcmNpYWxseSBhcyBhCisiTnVsbCBQcmludGVyIiBvciAiVHVyYm8gTGFwbGluayIgY2FibGUuICBJdCBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aAordHdvIERCLTI1IG1hbGUgY29ubmVjdG9ycyBzeW1tZXRyaWNhbGx5IGNvbm5lY3RlZCBhcyBmb2xsb3dzOgorCisgICAgU1RST0JFIG91dHB1dAkxKgorICAgIEQwLT5FUlJPUgkyIC0gMTUJCTE1IC0gMgorICAgIEQxLT5TTENUCTMgLSAxMwkJMTMgLSAzCisgICAgRDItPlBBUE9VVAk0IC0gMTIJCTEyIC0gNAorICAgIEQzLT5BQ0sJNSAtIDEwCQkxMCAtIDUKKyAgICBENC0+QlVTWQk2IC0gMTEJCTExIC0gNgorICAgIEQ1LEQ2LEQ3IGFyZSAgIDcqLCA4KiwgOSoKKyAgICBBVVRPRkQgb3V0cHV0IDE0KgorICAgIElOSVQgICBvdXRwdXQgMTYqCisgICAgU0xDVElOCTE3IC0gMTcKKyAgICBleHRyYSBncm91bmRzIGFyZSAxOCosMTkqLDIwKiwyMSosMjIqLDIzKiwyNCoKKyAgICBHUk9VTkQJMjUgLSAyNQorKiBEbyBub3QgY29ubmVjdCB0aGVzZSBwaW5zIG9uIGVpdGhlciBlbmQKKworSWYgdGhlIGNhYmxlIHlvdSBhcmUgdXNpbmcgaGFzIGEgbWV0YWxsaWMgc2hpZWxkIGl0IHNob3VsZCBiZQorY29ubmVjdGVkIHRvIHRoZSBtZXRhbGxpYyBEQi0yNSBzaGVsbCBhdCBvbmUgZW5kIG9ubHkuCisKK1BhcmFsbGVsIFRyYW5zZmVyIE1vZGUgMQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzZWNvbmQgZGF0YSB0cmFuc2ZlciBtZXRob2QgcmVsaWVzIG9uIGJvdGggbWFjaGluZXMgaGF2aW5nCitiaS1kaXJlY3Rpb25hbCBwYXJhbGxlbCBwb3J0cywgcmF0aGVyIHRoYW4gb3V0cHV0LW9ubHkgYGBwcmludGVyJycKK3BvcnRzLiAgVGhpcyBhbGxvd3MgYnl0ZS13aWRlIHRyYW5zZmVycywgYW5kIGF2b2lkcyByZWNvbnN0cnVjdGluZworbmliYmxlcyBpbnRvIGJ5dGVzLiAgVGhpcyBjYWJsZSBzaG91bGQgbm90IGJlIHVzZWQgb24gdW5pZGlyZWN0aW9uYWwKK2BgcHJpbnRlcicnIChhcyBvcHBvc2VkIHRvIGBgcGFyYWxsZWwnJykgcG9ydHMgb3Igd2hlbiB0aGUgbWFjaGluZQoraXNuJ3QgY29uZmlndXJlZCBmb3IgUExJUCwgYXMgaXQgd2lsbCByZXN1bHQgaW4gb3V0cHV0IGRyaXZlcgorY29uZmxpY3RzIGFuZCB0aGUgKHVubGlrZWx5KSBwb3NzaWJpbGl0eSBvZiBkYW1hZ2UuCisKK1RoZSBjYWJsZSBmb3IgdGhpcyB0cmFuc2ZlciBtb2RlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOgorCisgICAgU1RST0JFLT5CVVNZIDEgLSAxMQorICAgIEQwLT5EMAkyIC0gMgorICAgIEQxLT5EMQkzIC0gMworICAgIEQyLT5EMgk0IC0gNAorICAgIEQzLT5EMwk1IC0gNQorICAgIEQ0LT5ENAk2IC0gNgorICAgIEQ1LT5ENQk3IC0gNworICAgIEQ2LT5ENgk4IC0gOAorICAgIEQ3LT5ENwk5IC0gOQorICAgIElOSVQgLT4gQUNLICAxNiAtIDEwCisgICAgQVVUT0ZELT5QQVBPVVQgMTQgLSAxMgorICAgIFNMQ1QtPlNMQ1RJTiAxMyAtIDE3CisgICAgR05ELT5FUlJPUgkxOCAtIDE1CisgICAgZXh0cmEgZ3JvdW5kcyBhcmUgMTkqLDIwKiwyMSosMjIqLDIzKiwyNCoKKyAgICBHUk9VTkQJMjUgLSAyNQorKiBEbyBub3QgY29ubmVjdCB0aGVzZSBwaW5zIG9uIGVpdGhlciBlbmQKKworT25jZSBhZ2FpbiwgaWYgdGhlIGNhYmxlIHlvdSBhcmUgdXNpbmcgaGFzIGEgbWV0YWxsaWMgc2hpZWxkIGl0IHNob3VsZAorYmUgY29ubmVjdGVkIHRvIHRoZSBtZXRhbGxpYyBEQi0yNSBzaGVsbCBhdCBvbmUgZW5kIG9ubHkuCisKK1BMSVAgTW9kZSAwIHRyYW5zZmVyIHByb3RvY29sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgUExJUCBkcml2ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSAiQ3J5bndyIiBwYXJhbGxlbCBwb3J0IHRyYW5zZmVyCitzdGFuZGFyZCBpbiBNb2RlIDAuICBUaGF0IHN0YW5kYXJkIHNwZWNpZmllcyB0aGUgZm9sbG93aW5nIHByb3RvY29sOgorCisgICBzZW5kIGhlYWRlciBuaWJibGUgJzB4OCcKKyAgIGNvdW50LWxvdyBvY3RldAorICAgY291bnQtaGlnaCBvY3RldAorICAgLi4uIGRhdGEgb2N0ZXRzCisgICBjaGVja3N1bSBvY3RldAorCitFYWNoIG9jdGV0IGlzIHNlbnQgYXMKKwk8d2FpdCBmb3IgcnguICcweDE/Jz4JPHNlbmQgMHgxMCsob2N0ZXQmMHgwRik+CisJPHdhaXQgZm9yIHJ4LiAnMHgwPyc+CTxzZW5kIDB4MDArKChvY3RldD4+NCkmMHgwRik+CisKK1RvIHN0YXJ0IGEgdHJhbnNmZXIgdGhlIHRyYW5zbWl0dGluZyBtYWNoaW5lIG91dHB1dHMgYSBuaWJibGUgMHgwOC4KK1RoYXQgcmFpc2VzIHRoZSBBQ0sgbGluZSwgdHJpZ2dlcmluZyBhbiBpbnRlcnJ1cHQgaW4gdGhlIHJlY2VpdmluZworbWFjaGluZS4gIFRoZSByZWNlaXZpbmcgbWFjaGluZSBkaXNhYmxlcyBpbnRlcnJ1cHRzIGFuZCByYWlzZXMgaXRzIG93biBBQ0sKK2xpbmUuIAorCitSZXN0YXRlZDoKKworKE9VVCBpcyBiaXQgMC00LCBPVVQuaiBpcyBiaXQgaiBmcm9tIE9VVC4gSU4gbGlrZXdpc2UpCitTZW5kX0J5dGU6CisgICBPVVQgOj0gbG93IG5pYmJsZSwgT1VULjQgOj0gMQorICAgV0FJVCBGT1IgSU4uNCA9IDEKKyAgIE9VVCA6PSBoaWdoIG5pYmJsZSwgT1VULjQgOj0gMAorICAgV0FJVCBGT1IgSU4uNCA9IDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuc2IxMDAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyZDQyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuc2IxMDAwCkBAIC0wLDAgKzEsMjA3IEBACitzYjEwMDAgaXMgYSBtb2R1bGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGZvciB0aGUgR2VuZXJhbCBJbnN0cnVtZW50IChhbHNvIGtub3duCithcyBOZXh0TGV2ZWwpIFNVUkZib2FyZDEwMDAgaW50ZXJuYWwgY2FibGUgbW9kZW0gYm9hcmQuICBUaGlzIGlzIGFuIElTQSBjYXJkCit3aGljaCBpcyB1c2VkIGJ5IGEgbnVtYmVyIG9mIGNhYmxlIFRWIGNvbXBhbmllcyB0byBwcm92aWRlIGNhYmxlIG1vZGVtIGFjY2Vzcy4KK0l0J3MgYSBvbmUtd2F5IGRvd25zdHJlYW0tb25seSBjYWJsZSBtb2RlbSwgbWVhbmluZyB0aGF0IHlvdXIgdXBzdHJlYW0gbmV0IGxpbmsKK2lzIHByb3ZpZGVkIGJ5IHlvdXIgcmVndWxhciBwaG9uZSBtb2RlbS4KKworVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgRnJhbmNvIFZlbnR1cmkgPGZ2ZW50dXJpQG1lZGlhb25lLm5ldD4uICBIZSBkZXNlcnZlcworYSBncmVhdCBkZWFsIG9mIHRoYW5rcyBmb3IgdGhpcyB3b25kZXJmdWwgcGllY2Ugb2YgY29kZSEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgdGhpcyBkZXZpY2UgaXMgbm93IGEgcGFydCBvZiB0aGUgc3RhbmRhcmQgTGludXgga2VybmVsLiAgVGhlCitkcml2ZXIgc291cmNlIGNvZGUgZmlsZSBpcyBkcml2ZXJzL25ldC9zYjEwMDAuYy4gIEluIGFkZGl0aW9uIHRvIHRoaXMKK3lvdSB3aWxsIG5lZWQ6CisKKzEuKSBUaGUgImNtY29uZmlnIiBwcm9ncmFtLiAgVGhpcyBpcyBhIHV0aWxpdHkgd2hpY2ggc3VwcGxlbWVudHMgImlmY29uZmlnIgordG8gY29uZmlndXJlIHRoZSBjYWJsZSBtb2RlbSBhbmQgbmV0d29yayBpbnRlcmZhY2UgKHVzdWFsbHkgY2FsbGVkICJjbTAiKTsKK2FuZAorCisyLikgU2V2ZXJhbCBQUFAgc2NyaXB0cyB3aGljaCBsaXZlIGluIC9ldGMvcHBwIHRvIG1ha2UgY29ubmVjdGluZyB2aWEgeW91cgorY2FibGUgbW9kZW0gZWFzeS4KKworICAgVGhlc2UgdXRpbGl0aWVzIGNhbiBiZSBvYnRhaW5lZCBmcm9tOgorCisgICAgICBodHRwOi8vd3d3LmphY2tzb252aWxsZS5uZXQvfmZ2ZW50dXJpLworCisgICBpbiBGcmFuY28ncyBvcmlnaW5hbCBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gLnRhci5neiBmaWxlLiAgU3VwcG9ydCBmb3IKKyAgIHRoZSBzYjEwMDAgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKKworICAgICAgaHR0cDovL2hvbWUuYWRlbHBoaWEubmV0L35zaWdsZXJjbS9zYjEwMDAuaHRtbAorICAgICAgaHR0cDovL2xpbnV4cG93ZXIuY3gvfmNhYmxlLworCisgICBhbG9uZyB3aXRoIHRoZXNlIHV0aWxpdGllcy4KKworMy4pIFRoZSBzdGFuZGFyZCBpc2FwbnAgdG9vbHMuICBUaGVzZSBhcmUgbmVjZXNzYXJ5IHRvIGNvbmZpZ3VyZSB5b3VyIFNCMTAwMAorY2FyZCBhdCBib290IHRpbWUgKG9yIGFmdGVyd2FyZHMgYnkgaGFuZCkgc2luY2UgaXQncyBhIFBuUCBjYXJkLgorCisgICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGVzZSBpbnN0YWxsZWQgYXMgYSBzdGFuZGFyZCBwYXJ0IG9mIHlvdXIgTGludXgKKyAgIGRpc3RyaWJ1dGlvbiwgeW91IGNhbiBmaW5kIHRoZW0gYXQ6CisKKyAgICAgIGh0dHA6Ly93d3cucm9lc3RvY2suZGVtb24uY28udWsvaXNhcG5wdG9vbHMvCisKKyAgIG9yIGNoZWNrIHlvdXIgTGludXggZGlzdHJpYnV0aW9uIGJpbmFyeSBDRCBvciB0aGVpciB3ZWIgc2l0ZS4gIEZvciBoZWxwIHdpdGgKKyAgIGlzYXBucCwgcG5wZHVtcCwgb3IgL2V0Yy9pc2FwbnAuY29uZiwgZ28gdG86CisKKyAgICAgIGh0dHA6Ly93d3cucm9lc3RvY2suZGVtb24uY28udWsvaXNhcG5wdG9vbHMvaXNhcG5wZmFxLmh0bWwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gbWFrZSB0aGUgU0IxMDAwIGNhcmQgd29yaywgZm9sbG93IHRoZXNlIHN0ZXBzOgorCisxLikgUnVuIGBtYWtlIGNvbmZpZycsIG9yIGBtYWtlIG1lbnVjb25maWcnLCBvciBgbWFrZSB4Y29uZmlnJywgd2hpY2hldmVyCit5b3UgcHJlZmVyLCBpbiB0aGUgdG9wIGtlcm5lbCB0cmVlIGRpcmVjdG9yeSB0byBzZXQgdXAgeW91ciBrZXJuZWwKK2NvbmZpZ3VyYXRpb24uICBNYWtlIHN1cmUgdG8gc2F5ICJZIiB0byAiUHJvbXB0IGZvciBkZXZlbG9wbWVudCBkcml2ZXJzIgorYW5kIHRvIHNheSAiTSIgdG8gdGhlIHNiMTAwMCBkcml2ZXIuICBBbHNvIHNheSAiWSIgb3IgIk0iIHRvIGFsbCB0aGUgc3RhbmRhcmQKK25ldHdvcmtpbmcgcXVlc3Rpb25zIHRvIGdldCBUQ1AvSVAgYW5kIFBQUCBuZXR3b3JraW5nIHN1cHBvcnQuCisKKzIuKSAqQkVGT1JFKiB5b3UgYnVpbGQgdGhlIGtlcm5lbCwgZWRpdCBkcml2ZXJzL25ldC9zYjEwMDAuYy4gIE1ha2Ugc3VyZQordG8gcmVkZWZpbmUgdGhlIHZhbHVlIG9mIFJFQURfREFUQV9QT1JUIHRvIG1hdGNoIHRoZSBJL08gYWRkcmVzcyB1c2VkCitieSBpc2FwbnAgdG8gYWNjZXNzIHlvdXIgUG5QIGNhcmRzLiAgVGhpcyBpcyB0aGUgdmFsdWUgb2YgUkVBRFBPUlQgaW4KKy9ldGMvaXNhcG5wLmNvbmYgb3IgZ2l2ZW4gYnkgdGhlIG91dHB1dCBvZiBwbnBkdW1wLgorCiszLikgQnVpbGQgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcyBhcyB1c3VhbC4KKworNC4pIEJvb3QgeW91ciBuZXcga2VybmVsIGZvbGxvd2luZyB0aGUgdXN1YWwgcHJvY2VkdXJlcy4KKworNS4pIFNldCB1cCB0byBjb25maWd1cmUgdGhlIG5ldyBTQjEwMDAgUG5QIGNhcmQgYnkgY2FwdHVyaW5nIHRoZSBvdXRwdXQKK29mICJwbnBkdW1wIiB0byBhIGZpbGUgYW5kIGVkaXRpbmcgdGhpcyBmaWxlIHRvIHNldCB0aGUgY29ycmVjdCBJL08gcG9ydHMsCitJUlEsIGFuZCBETUEgc2V0dGluZ3MgZm9yIGFsbCB5b3VyIFBuUCBjYXJkcy4gIE1ha2Ugc3VyZSBub25lIG9mIHRoZSBzZXR0aW5ncworY29uZmxpY3Qgd2l0aCBvbmUgYW5vdGhlci4gIFRoZW4gdGVzdCB0aGlzIGNvbmZpZ3VyYXRpb24gYnkgcnVubmluZyB0aGUKKyJpc2FwbnAiIGNvbW1hbmQgd2l0aCB5b3VyIG5ldyBjb25maWcgZmlsZSBhcyB0aGUgaW5wdXQuICBDaGVjayBmb3IKK2Vycm9ycyBhbmQgZml4IGFzIG5lY2Vzc2FyeS4gIChBcyBhbiBhc2lkZSwgSSB1c2UgSS9PIHBvcnRzIDB4MTEwIGFuZAorMHgzMTAgYW5kIElSUSAxMSBmb3IgbXkgU0IxMDAwIGNhcmQgYW5kIHRoZXNlIHdvcmsgd2VsbCBmb3IgbWUuICBZTU1WLikKK1RoZW4gc2F2ZSB0aGUgZmluaXNoZWQgY29uZmlnIGZpbGUgYXMgL2V0Yy9pc2FwbnAuY29uZiBmb3IgcHJvcGVyIGNvbmZpZ3VyYXRpb24KK29uIHN1YnNlcXVlbnQgcmVib290cy4KKworNi4pIERvd25sb2FkIHRoZSBvcmlnaW5hbCBmaWxlIHNiMTAwMC0xLjEuMi50YXIuZ3ogZnJvbSBGcmFuY28ncyBzaXRlIG9yIG9uZSBvZgordGhlIG90aGVycyByZWZlcmVuY2VkIGFib3ZlLiAgQXMgcm9vdCwgdW5wYWNrIGl0IGludG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZAorZG8gYSBgbWFrZSBjbWNvbmZpZycgYW5kIHRoZW4gYGluc3RhbGwgLWMgY21jb25maWcgL3Vzci9sb2NhbC9zYmluJy4gIERvbid0IGRvCitgbWFrZSBpbnN0YWxsJyBiZWNhdXNlIGl0IGV4cGVjdHMgdG8gZmluZCBhbGwgdGhlIHV0aWxpdGllcyBidWlsdCBhbmQgcmVhZHkgZm9yCitpbnN0YWxsYXRpb24sIG5vdCBqdXN0IGNtY29uZmlnLgorCis3LikgQXMgcm9vdCwgY29weSBhbGwgdGhlIGZpbGVzIHVuZGVyIHRoZSBwcHAvIHN1YmRpcmVjdG9yeSBpbiBGcmFuY28ncwordGFyIGZpbGUgaW50byAvZXRjL3BwcCwgYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIGFueSBmaWxlcyB0aGF0IGFyZQorYWxyZWFkeSBpbiB0aGVyZS4gIFRoZW4gbW9kaWZ5IHBwcEBnaS1vbiB0byBzZXQgdGhlIGNvcnJlY3QgbG9naW4gbmFtZSwKK3Bob25lIG51bWJlciwgYW5kIGZyZXF1ZW5jeSBmb3IgdGhlIGNhYmxlIG1vZGVtLiAgQWxzbyBlZGl0IHBhcC1zZWNyZXRzCit0byBzcGVjaWZ5IHlvdXIgbG9naW4gbmFtZSBhbmQgcGFzc3dvcmQgYW5kIGFueSBzaXRlLXNwZWNpZmljIGluZm9ybWF0aW9uCit5b3UgbmVlZC4KKworOC4pIEJlIHN1cmUgdG8gbW9kaWZ5IC9ldGMvcHBwL2ZpcmV3YWxsIHRvIHVzZSBpcGNoYWlucyBpbnN0ZWFkIG9mCit0aGUgb2xkZXIgaXBmd2FkbSBjb21tYW5kcyBmcm9tIHRoZSAyLjAueCBrZXJuZWxzLiAgVGhlcmUncyBhIG5lYXQgdXRpbGl0eSB0bworY29udmVydCBpcGZ3YWRtIGNvbW1hbmRzIHRvIGlwY2hhaW5zIGNvbW1hbmRzOgorCisgICBodHRwOi8vdXNlcnMuZGhwLmNvbS9+d2hpc3Blci9pcGZ3YWRtMmlwY2hhaW5zLworCitZb3UgbWF5IGFsc28gd2lzaCB0byBtb2RpZnkgdGhlIGZpcmV3YWxsIHNjcmlwdCB0byBpbXBsZW1lbnQgYSBkaWZmZXJlbnQKK2ZpcmV3YWxsaW5nIHNjaGVtZS4KKworOS4pIFN0YXJ0IHRoZSBQUFAgY29ubmVjdGlvbiB2aWEgdGhlIHNjcmlwdCAvZXRjL3BwcC9wcHBAZ2ktb24uICBZb3UgbXVzdCBiZQorcm9vdCB0byBkbyB0aGlzLiAgSXQncyBiZXR0ZXIgdG8gdXNlIGEgdXRpbGl0eSBsaWtlIHN1ZG8gdG8gZXhlY3V0ZQorZnJlcXVlbnRseSB1c2VkIGNvbW1hbmRzIGxpa2UgdGhpcyB3aXRoIHJvb3QgcGVybWlzc2lvbnMgaWYgcG9zc2libGUuICBJZiB5b3UKK2Nvbm5lY3Qgc3VjY2Vzc2Z1bGx5IHRoZSBjYWJsZSBtb2RlbSBpbnRlcmZhY2Ugd2lsbCBjb21lIHVwIGFuZCB5b3UnbGwgc2VlIGEKK2RyaXZlciBtZXNzYWdlIGxpa2UgdGhpcyBhdCB0aGUgY29uc29sZToKKworICAgICAgICAgY20wOiBzYjEwMDAgYXQgKDB4MTEwLDB4MzEwKSwgY3NuIDEsIFMvTiAweDJhMGQxNmQ4LCBJUlEgMTEuCisgICAgICAgICBzYjEwMDAuYzp2MS4xLjIgNi8wMS85OCAoZnZlbnR1cmlAbWVkaWFvbmUubmV0KQorCitUaGUgImlmY29uZmlnIiBjb21tYW5kIHNob3VsZCBzaG93IHR3byBuZXcgaW50ZXJmYWNlcywgcHBwMCBhbmQgY20wLgorVGhlIGNvbW1hbmQgImNtY29uZmlnIGNtMCIgd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FibGUgbW9kZW0KK2ludGVyZmFjZS4KKworMTAuKSBUcnkgcGluZ2luZyBhIHNpdGUgdmlhIGBwaW5nIC1jIDUgd3d3LnlhaG9vLmNvbScsIGZvciBleGFtcGxlLiAgWW91IHNob3VsZAorc2VlIHBhY2tldHMgcmVjZWl2ZWQuCisKKzExLikgSWYgeW91IGNhbid0IGdldCBzaXRlIG5hbWVzIChsaWtlIHd3dy55YWhvby5jb20pIHRvIHJlc29sdmUgaW50bworSVAgYWRkcmVzc2VzIChsaWtlIDIwNC43MS4yMDAuNjcpLCBiZSBzdXJlIHlvdXIgL2V0Yy9yZXNvbHYuY29uZiBmaWxlCitoYXMgbm8gc3ludGF4IGVycm9ycyBhbmQgaGFzIHRoZSByaWdodCBuYW1lc2VydmVyIElQIGFkZHJlc3NlcyBpbiBpdC4KK0lmIHRoaXMgZG9lc24ndCBoZWxwLCB0cnkgc29tZXRoaW5nIGxpa2UgYHBpbmcgLWMgNSAyMDQuNzEuMjAwLjY3JyB0bworc2VlIGlmIHRoZSBuZXR3b3JraW5nIGlzIHJ1bm5pbmcgYnV0IHRoZSBETlMgcmVzb2x1dGlvbiBpcyB3aGVyZSB0aGUKK3Byb2JsZW0gbGllcy4KKworMTIuKSBJZiB5b3Ugc3RpbGwgaGF2ZSBwcm9ibGVtcywgZ28gdG8gdGhlIHN1cHBvcnQgd2ViIHNpdGVzIG1lbnRpb25lZCBhYm92ZQorYW5kIHJlYWQgdGhlIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudGF0aW9uIHRoZXJlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb21tb24gcHJvYmxlbXM6CisKKzEuKSBQYWNrZXRzIGdvIG91dCBvbiB0aGUgcHBwMCBpbnRlcmZhY2UgYnV0IGRvbid0IGNvbWUgYmFjayBvbiB0aGUgY20wCitpbnRlcmZhY2UuICBJdCBsb29rcyBsaWtlIEknbSBjb25uZWN0ZWQgYnV0IEkgY2FuJ3QgZXZlbiBwaW5nIGFueQorbnVtZXJpY2FsIElQIGFkZHJlc3Nlcy4gIChUaGlzIGhhcHBlbnMgcHJlZG9taW5hbnRseSBvbiBEZWJpYW4gc3lzdGVtcyBkdWUKK3RvIGEgZGVmYXVsdCBib290LXRpbWUgY29uZmlndXJhdGlvbiBzY3JpcHQuKQorCitTb2x1dGlvbiAtLSBBcyByb290IGBlY2hvIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9jbTAvcnBfZmlsdGVyJyBzbyBpdAorY2FuIHNoYXJlIHRoZSBzYW1lIElQIGFkZHJlc3MgYXMgdGhlIHBwcDAgaW50ZXJmYWNlLiAgTm90ZSB0aGF0IHRoaXMKK2NvbW1hbmQgc2hvdWxkIHByb2JhYmx5IGJlIGFkZGVkIHRvIHRoZSAvZXRjL3BwcC9jYWJsZW1vZGVtIHNjcmlwdAorKnJpZ2h0KmJldHdlZW4qIHRoZSAiL3NiaW4vaWZjb25maWciIGFuZCAiL3NiaW4vY21jb25maWciIGNvbW1hbmRzLgorWW91IG1heSBuZWVkIHRvIGRvIHRoaXMgdG8gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvcHBwMC9ycF9maWx0ZXIgYXMgd2VsbC4KK0lmIHlvdSBkbyB0aGlzIHRvIC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2RlZmF1bHQvcnBfZmlsdGVyIG9uIGVhY2ggcmVib290CisoaW4gcmMubG9jYWwgb3Igc29tZSBzdWNoKSB0aGVuIGFueSBpbnRlcmZhY2VzIGNhbiBzaGFyZSB0aGUgc2FtZSBJUAorYWRkcmVzc2VzLgorCisyLikgSSBnZXQgInVucmVzb2x2ZWQgc3ltYm9sIiBlcnJvciBtZXNzYWdlcyBvbiBleGVjdXRpbmcgYGluc21vZCBzYjEwMDAubycuCisKK1NvbHV0aW9uIC0tIFlvdSBwcm9iYWJseSBoYXZlIGEgbm9uLW1hdGNoaW5nIGtlcm5lbCBzb3VyY2UgdHJlZSBhbmQKKy91c3IvaW5jbHVkZS9saW51eCBhbmQgL3Vzci9pbmNsdWRlL2FzbSBoZWFkZXIgZmlsZXMuICBNYWtlIHN1cmUgeW91CitpbnN0YWxsIHRoZSBjb3JyZWN0IHZlcnNpb25zIG9mIHRoZSBoZWFkZXIgZmlsZXMgaW4gdGhlc2UgdHdvIGRpcmVjdG9yaWVzLgorVGhlbiByZWJ1aWxkIGFuZCByZWluc3RhbGwgdGhlIGtlcm5lbC4KKworMy4pIFdoZW4gaXNhcG5wIHJ1bnMgaXQgcmVwb3J0cyBhbiBlcnJvciwgYW5kIG15IFNCMTAwMCBjYXJkIGlzbid0IHdvcmtpbmcuCisKK1NvbHV0aW9uIC0tIFRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgaXNhcG5wIHVzaW5nIHRoZSAiKENIRUNLKSIKK29wdGlvbiBpbiB0aGUgbGluZXMgdGhhdCBhbGxvY2F0ZSB0aGUgdHdvIEkvTyBhZGRyZXNzZXMgZm9yIHRoZSBTQjEwMDAgY2FyZC4KK1RoaXMgZmlyc3QgcG9wcGVkIHVwIG9uIFJIIDYuMC4gIERlbGV0ZSAiKENIRUNLKSIgZm9yIHRoZSBTQjEwMDAgSS9PIGFkZHJlc3Nlcy4KK01ha2Ugc3VyZSB0aGV5IGRvbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIHBpZWNlcyBvZiBoYXJkd2FyZSBmaXJzdCEgIFRoZW4KK3JlcnVuIGlzYXBucCBhbmQgZ28gZnJvbSB0aGVyZS4KKworNC4pIEkgY2FuJ3QgZXhlY3V0ZSB0aGUgL2V0Yy9wcHAvcHBwQGdpLW9uIGZpbGUuCisKK1NvbHV0aW9uIC0tIEFzIHJvb3QgZG8gYGNobW9kIHVnK3ggL2V0Yy9wcHAvcHBwQGdpLW9uJy4KKworNS4pIFRoZSBmaXJld2FsbCBzY3JpcHQgaXNuJ3Qgd29ya2luZyAod2l0aCAyLjIueCBhbmQgaGlnaGVyIGtlcm5lbHMpLgorCitTb2x1dGlvbiAtLSBVc2UgdGhlIGlwZndhZG0yaXBjaGFpbnMgc2NyaXB0IHJlZmVyZW5jZWQgYWJvdmUgdG8gY29udmVydCB0aGUKKy9ldGMvcHBwL2ZpcmV3YWxsIHNjcmlwdCBmcm9tIHRoZSBkZXByZWNhdGVkIGlwZndhZG0gY29tbWFuZHMgdG8gaXBjaGFpbnMuCisKKzYuKSBJJ20gZ2V0dGluZyAqdG9ucyogb2YgZmlyZXdhbGwgZGVueSBtZXNzYWdlcyBpbiB0aGUgL3Zhci9rZXJuLmxvZywKKy92YXIvbWVzc2FnZXMsIGFuZC9vciAvdmFyL3N5c2xvZyBmaWxlcywgYW5kIHRoZXkncmUgZmlsbGluZyB1cCBteSAvdmFyCitwYXJ0aXRpb24hISEKKworU29sdXRpb24gLS0gRmlyc3QsIHRlbGwgeW91ciBJU1AgdGhhdCB5b3UncmUgcmVjZWl2aW5nIERvUyAoRGVuaWFsIG9mIFNlcnZpY2UpCithbmQvb3IgcG9ydHNjYW5uaW5nIChVRFAgY29ubmVjdGlvbiBhdHRlbXB0cykgYXR0YWNrcyEgIExvb2sgb3ZlciB0aGUgZGVueQorbWVzc2FnZXMgdG8gZmlndXJlIG91dCB3aGF0IHRoZSBhdHRhY2sgaXMgYW5kIHdoZXJlIGl0J3MgY29taW5nIGZyb20uICBOZXh0LAorZWRpdCAvZXRjL3BwcC9jYWJsZW1vZGVtIGFuZCBtYWtlIHN1cmUgdGhlICIsbm9icm9hZGNhc3QiIG9wdGlvbiBpcyB0dXJuZWQgb24KK3RvIHRoZSAiY21jb25maWciIGNvbW1hbmQgKHVuY29tbWVudCB0aGF0IGxpbmUpLiAgSWYgeW91J3JlIG5vdCByZWNlaXZpbmcgdGhlc2UKK2RlbmllZCBwYWNrZXRzIG9uIHlvdXIgYnJvYWRjYXN0IGludGVyZmFjZSAoSVAgYWRkcmVzcyB4eHgueXl5Lnp6ei4yNTUKK3R5cGljYWxseSksIHRoZW4gc29tZW9uZSBpcyBhdHRhY2tpbmcgeW91ciBtYWNoaW5lIGluIHBhcnRpY3VsYXIuICBCZSBjYXJlZnVsCitvdXQgdGhlcmUuLi4uCisKKzcuKSBFdmVyeXRoaW5nIHNlZW1zIHRvIHdvcmsgZmluZSBidXQgbXkgY29tcHV0ZXIgbG9ja3MgdXAgYWZ0ZXIgYSB3aGlsZQorKGFuZCB0eXBpY2FsbHkgZHVyaW5nIGEgbGVuZ3RoeSBkb3dubG9hZCB0aHJvdWdoIHRoZSBjYWJsZSBtb2RlbSkhCisKK1NvbHV0aW9uIC0tIFlvdSBtYXkgbmVlZCB0byBhZGQgYSBzaG9ydCBkZWxheSBpbiB0aGUgZHJpdmVyIHRvICdzbG93IGRvd24nIHRoZQorU1VSRmJvYXJkIGJlY2F1c2UgeW91ciBQQyBtaWdodCBub3QgYmUgYWJsZSB0byBrZWVwIHVwIHdpdGggdGhlIHRyYW5zZmVyIHJhdGUKK29mIHRoZSBTQjEwMDAuIFRvIGRvIHRoaXMsIGl0J3MgcHJvYmFibHkgYmVzdCB0byBkb3dubG9hZCBGcmFuY28ncworc2IxMDAwLTEuMS4yLnRhci5neiBhcmNoaXZlIGFuZCBidWlsZCBhbmQgaW5zdGFsbCBzYjEwMDAubyBtYW51YWxseS4gIFlvdSdsbAord2FudCB0byBlZGl0IHRoZSAnTWFrZWZpbGUnIGFuZCBsb29rIGZvciB0aGUgJ1NCMTAwMF9ERUxBWScKK2RlZmluZS4gIFVuY29tbWVudCB0aG9zZSAnQ0ZMQUdTJyBsaW5lcyAoYW5kIGNvbW1lbnQgb3V0IHRoZSBkZWZhdWx0IG9uZXMpCithbmQgdHJ5IHNldHRpbmcgdGhlIGRlbGF5IHRvIHNvbWV0aGluZyBsaWtlIDYwIG1pY3Jvc2Vjb25kcyB3aXRoOgorJy1EU0IxMDAwX0RFTEFZPTYwJy4gIFRoZW4gZG8gYG1ha2UnIGFuZCBhcyByb290IGBtYWtlIGluc3RhbGwnIGFuZCB0cnkKK2l0IG91dC4gIElmIGl0IHN0aWxsIGRvZXNuJ3Qgd29yayBvciB5b3UgbGlrZSBwbGF5aW5nIHdpdGggdGhlIGRyaXZlciwgeW91IG1heQordHJ5IG90aGVyIG51bWJlcnMuICBSZW1lbWJlciB0aG91Z2ggdGhhdCB0aGUgaGlnaGVyIHRoZSBkZWxheSwgdGhlIHNsb3dlciB0aGUKK2RyaXZlciAod2hpY2ggc2xvd3MgZG93biB0aGUgcmVzdCBvZiB0aGUgUEMgdG9vIHdoZW4gaXQgaXMgYWN0aXZlbHkKK3VzZWQpLiBUaGFua3MgdG8gRWQgRGFpZ2EgZm9yIHRoaXMgdGlwIQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVkaXRzOiAgVGhpcyBSRUFETUUgY2FtZSBmcm9tIEZyYW5jbyBWZW50dXJpJ3Mgb3JpZ2luYWwgUkVBRE1FIGZpbGUgd2hpY2ggaXMKK3N0aWxsIHN1cHBsaWVkIHdpdGggaGlzIGRyaXZlciAudGFyLmd6IGFyY2hpdmUuICBJIGFuZCBhbGwgb3RoZXIgc2IxMDAwIHVzZXJzCitvd2UgRnJhbmNvIGEgdHJlbWVuZG91cyAiVGhhbmsgeW91ISIgIEFkZGl0aW9uYWwgdGhhbmtzIGdvZXMgdG8gQ2FybCBQYXR0ZW4KK2FuZCBSYWxwaCBCb25uZWxsIHdobyBhcmUgbm93IG1hbmFnaW5nIHRoZSBMaW51eCBTQjEwMDAgd2ViIHNpdGUsIGFuZCB0bwordGhlIFNCMTAwMCB1c2VycyB3aG8gcmVwb3J0ZWQgYW5kIGhlbHBlZCBkZWJ1ZyB0aGUgY29tbW9uIHByb2JsZW1zIGxpc3RlZAorYWJvdmUuCisKKworCQkJCQlDbGVtbWl0dCBTaWdsZXIKKwkJCQkJY3NpZ2xlckB2dC5lZHUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9UT0RPIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZkMzZmZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9UT0RPCkBAIC0wLDAgKzEsMTggQEAKK1RvLWRvIGl0ZW1zIGZvciBuZXR3b3JrIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNb3ZlIGV0aGVybmV0IGNyYyByb3V0aW5lIHRvIGdlbmVyaWMgY29kZQorCisqIChmb3IgMi41KSBJbnRlZ3JhdGUgSmFtYWwgSGFkaSBTYWxpbSdzIG5ldGRldiBSeCBwb2xsaW5nIEFQSSBjaGFuZ2UKKworKiBBdWRpdCBhbGwgbmV0IGRyaXZlcnMgdG8gbWFrZSBzdXJlIG1hZ2ljIHBhY2tldCAvIHdha2Utb24tbGFuIC8KKyAgc2ltaWxhciBmZWF0dXJlcyBhcmUgZGlzYWJsZWQgaW4gdGhlIGRyaXZlciBieSBkZWZhdWx0LgorCisqIEF1ZGl0IGFsbCBuZXQgZHJpdmVycyB0byBtYWtlIHN1cmUgdGhlIG1vZHVsZSBhbHdheXMgcHJpbnRzIG91dCBhCisgIHZlcnNpb24gc3RyaW5nIHdoZW4gbG9hZGVkIGFzIGEgbW9kdWxlLCBidXQgb25seSBwcmludHMgYSB2ZXJzaW9uCisgIHN0cmluZyB3aGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBpZiBhIGRldmljZSBpcyBkZXRlY3RlZC4KKworKiBBZGQgRVRIVE9PTF9HRFJWSU5GTyBpb2N0bCBzdXBwb3J0IHRvIGFsbCBldGhlcm5ldCBkcml2ZXJzLgorCisqIGRtZmUgUENJIERNQSBpcyB0b3RhbGx5IHdyb25nIGFuZCBvbmx5IHdvcmtzIG9uIHg4NgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWxpYXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FsaWFzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDEyYzJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FsaWFzLnR4dApAQCAtMCwwICsxLDUzIEBACisKK0lQLUFsaWFzaW5nOgorPT09PT09PT09PT09CisKK0lQLWFsaWFzZXMgYXJlIGFkZGl0aW9uYWwgSVAtYWRkcmVzc2VzL21hc2tzIGhvb2tlZCB1cCB0byBhIGJhc2UgCitpbnRlcmZhY2UgYnkgYWRkaW5nIGEgY29sb24gYW5kIGEgc3RyaW5nIHdoZW4gcnVubmluZyBpZmNvbmZpZy4gCitUaGlzIHN0cmluZyBpcyB1c3VhbGx5IG51bWVyaWMsIGJ1dCB0aGlzIGlzIG5vdCBhIG11c3QuCisKK0lQLUFsaWFzZXMgYXJlIGF2YWlsIGlmIENPTkZJR19JTkVUIChgc3RhbmRhcmQnIElQdjQgbmV0d29ya2luZykgCitpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuCisKKworbyBBbGlhcyBjcmVhdGlvbi4KKyAgQWxpYXMgY3JlYXRpb24gaXMgZG9uZSBieSAnbWFnaWMnIGludGVyZmFjZSBuYW1pbmc6IGVnLiB0byBjcmVhdGUgYQorICAyMDAuMS4xLjEgYWxpYXMgZm9yIGV0aDAgLi4uCisgIAorICAgICMgaWZjb25maWcgZXRoMDowIDIwMC4xLjEuMSAgZXRjLGV0Yy4uLi4KKyAgICAgICAgICAgICAgICAgICB+fiAtPiByZXF1ZXN0IGFsaWFzICMwIGNyZWF0aW9uIChpZiBub3QgeWV0IGV4aXN0cykgZm9yIGV0aDAKKworICAgIFRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGlzIGFsc28gc2V0IHVwIGJ5IHRoaXMgY29tbWFuZC4gCisgICAgUGxlYXNlIG5vdGU6IFRoZSByb3V0ZSBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIGludGVyZmFjZS4KKwkKKworbyBBbGlhcyBkZWxldGlvbi4KKyAgVGhlIGFsaWFzIGlzIHJlbW92ZWQgYnkgc2h1dHRpbmcgdGhlIGFsaWFzIGRvd246CisKKyAgICAjIGlmY29uZmlnIGV0aDA6MCBkb3duCisgICAgICAgICAgICAgICAgIH5+fn5+fn5+fn4gLT4gd2lsbCBkZWxldGUgYWxpYXMKKworICAJCSAgIAkJICAgCitvIEFsaWFzIChyZS0pY29uZmlndXJpbmcKKworICBBbGlhc2VzIGFyZSBub3QgcmVhbCBkZXZpY2VzLCBidXQgcHJvZ3JhbXMgc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIGFuZAorICByZWZlciB0byB0aGVtIGFzIHVzdWFsIChpZmNvbmZpZywgcm91dGUsIGV0YykuCisKKworbyBSZWxhdGlvbnNoaXAgd2l0aCBtYWluIGRldmljZQorCisgIElmIHRoZSBiYXNlIGRldmljZSBpcyBzaHV0IGRvd24gdGhlIGFkZGVkIGFsaWFzZXMgd2lsbCBiZSBkZWxldGVkIAorICB0b28uCisKKworQ29udGFjdAorLS0tLS0tLQorUGxlYXNlIGZpbmdlciBvciBlLW1haWwgbWU6CisgICBKdWFuIEpvc2UgQ2lhcmxhbnRlIDxqamNpYXJsYUByYWl6LnVuY3UuZWR1LmFyPgorCitVcGRhdGVkIGJ5IEVyaWsgU2Nob2VuZmVsZGVyIDxzY2hvZW5mckBnYWVydG5lci5ERT4KKworOyBsb2NhbCB2YXJpYWJsZXM6Cis7IG1vZGU6IGluZGVudGVkLXRleHQKKzsgbW9kZTogYXV0by1maWxsCis7IGVuZDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hcmNuZXQtaGFyZHdhcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC1oYXJkd2FyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhNWYwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hcmNuZXQtaGFyZHdhcmUudHh0CkBAIC0wLDAgKzEsMzEzMyBAQAorIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIFRoaXMgZmlsZSBpcyBhIHN1cHBsZW1lbnQgdG8gYXJjbmV0LnR4dC4gIFBsZWFzZSByZWFkIHRoYXQgZm9yIGdlbmVyYWwKKyAgIGRyaXZlciBjb25maWd1cmF0aW9uIGhlbHAuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMikgVGhpcyBmaWxlIGlzIG5vIGxvbmdlciBMaW51eC1zcGVjaWZpYy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCBvdXQgb2YKKyAgIHRoZSBrZXJuZWwgc291cmNlcy4gIElkZWFzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSBzbyBtYW55IHBlb3BsZSAobXlzZWxmIGluY2x1ZGVkKSBzZWVtIHRvIGhhdmUgb2J0YWluZWQgQVJDbmV0IGNhcmRzCit3aXRob3V0IG1hbnVhbHMsIHRoaXMgZmlsZSBjb250YWlucyBhIHF1aWNrIGludHJvZHVjdGlvbiB0byBBUkNuZXQgaGFyZHdhcmUsCitzb21lIGNhYmxpbmcgdGlwcywgYW5kIGEgbGlzdGluZyBvZiBhbGwganVtcGVyIHNldHRpbmdzIEkgY2FuIGZpbmQuIFBsZWFzZQorZS1tYWlsIGFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYSB3aXRoIGFueSBzZXR0aW5ncyBmb3IgeW91ciBwYXJ0aWN1bGFyIGNhcmQsCitvciBhbnkgb3RoZXIgaW5mb3JtYXRpb24geW91IGhhdmUhCisKKworSU5UUk9EVUNUSU9OIFRPIEFSQ05FVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBUkNuZXQgaXMgYSBuZXR3b3JrIHR5cGUgd2hpY2ggd29ya3MgaW4gYSB3YXkgc2ltaWxhciB0byBwb3B1bGFyIEV0aGVybmV0CituZXR3b3JrcyBidXQgd2hpY2ggaXMgYWxzbyBkaWZmZXJlbnQgaW4gc29tZSB2ZXJ5IGltcG9ydGFudCB3YXlzLgorCitGaXJzdCBvZiBhbGwsIHlvdSBjYW4gZ2V0IEFSQ25ldCBjYXJkcyBpbiBhdCBsZWFzdCB0d28gc3BlZWRzOiAyLjUgTWJwcworKHNsb3dlciB0aGFuIEV0aGVybmV0KSBhbmQgMTAwIE1icHMgKGZhc3RlciB0aGFuIG5vcm1hbCBFdGhlcm5ldCkuICBJbiBmYWN0LAordGhlcmUgYXJlIG90aGVycyBhcyB3ZWxsLCBidXQgdGhlc2UgYXJlIGxlc3MgY29tbW9uLiAgVGhlIGRpZmZlcmVudCBoYXJkd2FyZQordHlwZXMsIGFzIGZhciBhcyBJJ20gYXdhcmUsIGFyZSBub3QgY29tcGF0aWJsZSBhbmQgc28geW91IGNhbm5vdCB3aXJlIGEKKzEwMCBNYnBzIGNhcmQgdG8gYSAyLjUgTWJwcyBjYXJkLCBhbmQgc28gb24uICBGcm9tIHdoYXQgSSBoZWFyLCBteSBkcml2ZXIgZG9lcword29yayB3aXRoIDEwMCBNYnBzIGNhcmRzLCBidXQgSSBoYXZlbid0IGJlZW4gYWJsZSB0byB2ZXJpZnkgdGhpcyBteXNlbGYsCitzaW5jZSBJIG9ubHkgaGF2ZSB0aGUgMi41IE1icHMgdmFyaWV0eS4gIEl0IGlzIHByb2JhYmx5IG5vdCBnb2luZyB0byBzYXR1cmF0ZQoreW91ciAxMDAgTWJwcyBjYXJkLiAgU3RvcCBjb21wbGFpbmluZy4gOikKKworWW91IGFsc28gY2Fubm90IGNvbm5lY3QgYW4gQVJDbmV0IGNhcmQgdG8gYW55IGtpbmQgb2YgRXRoZXJuZXQgY2FyZCBhbmQKK2V4cGVjdCBpdCB0byB3b3JrLiAgCisKK1RoZXJlIGFyZSB0d28gInR5cGVzIiBvZiBBUkNuZXQgLSBTVEFSIHRvcG9sb2d5IGFuZCBCVVMgdG9wb2xvZ3kuICBUaGlzCityZWZlcnMgdG8gaG93IHRoZSBjYXJkcyBhcmUgbWVhbnQgdG8gYmUgd2lyZWQgdG9nZXRoZXIuICBBY2NvcmRpbmcgdG8gbW9zdAorYXZhaWxhYmxlIGRvY3VtZW50YXRpb24sIHlvdSBjYW4gb25seSBjb25uZWN0IFNUQVIgY2FyZHMgdG8gU1RBUiBjYXJkcyBhbmQKK0JVUyBjYXJkcyB0byBCVVMgY2FyZHMuICBUaGF0IG1ha2VzIHNlbnNlLCByaWdodD8gIFdlbGwsIGl0J3Mgbm90IHF1aXRlCit0cnVlOyBzZWUgYmVsb3cgdW5kZXIgIkNhYmxpbmcuIgorCitPbmNlIHlvdSBnZXQgcGFzdCB0aGVzZSBsaXR0bGUgc3R1bWJsaW5nIGJsb2NrcywgQVJDbmV0IGlzIGFjdHVhbGx5IHF1aXRlIGEKK3dlbGwtZGVzaWduZWQgc3RhbmRhcmQuICBJdCB1c2VzIHNvbWV0aGluZyBjYWxsZWQgIm1vZGlmaWVkIHRva2VuIHBhc3NpbmciCit3aGljaCBtYWtlcyBpdCBjb21wbGV0ZWx5IGluY29tcGF0aWJsZSB3aXRoIHNvLWNhbGxlZCAiVG9rZW4gUmluZyIgY2FyZHMsCitidXQgd2hpY2ggbWFrZXMgdHJhbnNmZXJzIG11Y2ggbW9yZSByZWxpYWJsZSB0aGFuIEV0aGVybmV0IGRvZXMuICBJbiBmYWN0LAorQVJDbmV0IHdpbGwgZ3VhcmFudGVlIHRoYXQgYSBwYWNrZXQgYXJyaXZlcyBzYWZlbHkgYXQgdGhlIGRlc3RpbmF0aW9uLCBhbmQKK2V2ZW4gaWYgaXQgY2FuJ3QgcG9zc2libHkgYmUgZGVsaXZlcmVkIHByb3Blcmx5IChpZS4gYmVjYXVzZSBvZiBhIGNhYmxlCiticmVhaywgb3IgYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gY29tcHV0ZXIgZG9lcyBub3QgZXhpc3QpIGl0IHdpbGwgYXQgbGVhc3QKK3RlbGwgdGhlIHNlbmRlciBhYm91dCBpdC4KKworQmVjYXVzZSBvZiB0aGUgY2FyZWZ1bGx5IGRlZmluZWQgYWN0aW9uIG9mIHRoZSAidG9rZW4iLCBpdCB3aWxsIGFsd2F5cyBtYWtlCithIHBhc3MgYXJvdW5kIHRoZSAicmluZyIgd2l0aGluIGEgbWF4aW11bSBsZW5ndGggb2YgdGltZS4gIFRoaXMgbWFrZXMgaXQKK3VzZWZ1bCBmb3IgcmVhbHRpbWUgbmV0d29ya3MuCisKK0luIGFkZGl0aW9uLCBhbGwga25vd24gQVJDbmV0IGNhcmRzIGhhdmUgYW4gKGFsbW9zdCkgaWRlbnRpY2FsIHByb2dyYW1taW5nCitpbnRlcmZhY2UuICBUaGlzIG1lYW5zIHRoYXQgd2l0aCBvbmUgQVJDbmV0IGRyaXZlciB5b3UgY2FuIHN1cHBvcnQgYW55CitjYXJkLCB3aGVyZWFzIHdpdGggRXRoZXJuZXQgZWFjaCBtYW51ZmFjdHVyZXIgdXNlcyB3aGF0IGlzIHNvbWV0aW1lcyBhCitjb21wbGV0ZWx5IGRpZmZlcmVudCBwcm9ncmFtbWluZyBpbnRlcmZhY2UsIGxlYWRpbmcgdG8gYSBsb3Qgb2YgZGlmZmVyZW50LAorc29tZXRpbWVzIHZlcnkgc2ltaWxhciwgRXRoZXJuZXQgZHJpdmVycy4gIE9mIGNvdXJzZSwgYWx3YXlzIHVzaW5nIHRoZSBzYW1lCitwcm9ncmFtbWluZyBpbnRlcmZhY2UgYWxzbyBtZWFucyB0aGF0IHdoZW4gaGlnaC1wZXJmb3JtYW5jZSBoYXJkd2FyZQorZmFjaWxpdGllcyBsaWtlIFBDSSBidXMgbWFzdGVyaW5nIERNQSBhcHBlYXIsIGl0J3MgaGFyZCB0byB0YWtlIGFkdmFudGFnZSBvZgordGhlbS4gIExldCdzIG5vdCBnbyBpbnRvIHRoYXQuCisKK09uZSB0aGluZyB0aGF0IG1ha2VzIEFSQ25ldCBjYXJkcyBkaWZmaWN1bHQgdG8gcHJvZ3JhbSBmb3IsIGhvd2V2ZXIsIGlzIHRoZQorbGltaXQgb24gdGhlaXIgcGFja2V0IHNpemVzOyBzdGFuZGFyZCBBUkNuZXQgY2FuIG9ubHkgc2VuZCBwYWNrZXRzIHRoYXQgYXJlCit1cCB0byA1MDggYnl0ZXMgaW4gbGVuZ3RoLiAgVGhpcyBpcyBzbWFsbGVyIHRoYW4gdGhlIEludGVybmV0ICJiYXJlIG1pbmltdW0iCitvZiA1NzYgYnl0ZXMsIGxldCBhbG9uZSB0aGUgRXRoZXJuZXQgTVRVIG9mIDE1MDAuICBUbyBjb21wZW5zYXRlLCBhbiBleHRyYQorbGV2ZWwgb2YgZW5jYXBzdWxhdGlvbiBpcyBkZWZpbmVkIGJ5IFJGQzEyMDEsIHdoaWNoIEkgY2FsbCAicGFja2V0CitzcGxpdHRpbmcsIiB0aGF0IGFsbG93cyAidmlydHVhbCBwYWNrZXRzIiB0byBncm93IGFzIGxhcmdlIGFzIDY0SyBlYWNoLAorYWx0aG91Z2ggdGhleSBhcmUgZ2VuZXJhbGx5IGtlcHQgZG93biB0byB0aGUgRXRoZXJuZXQtc3R5bGUgMTUwMCBieXRlcy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgKG1vc3RseSB0aGUKK2FkdmFudGFnZXMpIG9mIEFSQ25ldCBuZXR3b3JrcywgeW91IG1pZ2h0IHRyeSB0aGUgIkFSQ25ldCBUcmFkZSBBc3NvY2lhdGlvbiIKK1dXVyBwYWdlOgorCWh0dHA6Ly93d3cuYXJjbmV0LmNvbQorCisKK0NBQkxJTkcgQVJDTkVUIE5FVFdPUktTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gd2FzIHJld3JpdHRlbiBieSAKKyAgICAgICAgVm9qdGVjaCBQYXZsaWsgICAgIDx2b2p0ZWNoQHN1c2UuY3o+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHNldmVyYWwgcGVvcGxlLCBpbmNsdWRpbmc6CisgICAgICAgIEF2ZXJ5IFBlbm5yYXVuICAgICA8YXBlbndhcnJAd29ybGR2aXNpb25zLmNhPgorIAlTdGVwaGVuIEEuIFdvb2QgICAgPHNhd0BoYWxsYzEuY2ViYWYuZ292PgorIAlKb2huIFBhdWwgTW9ycmlzb24gPGptb3JyaXNvQGJvZ29taXBzLmVlLnViYy5jYT4KKyAJSm9hY2hpbSBLb2VuaWcgICAgIDxqb2pvQHJlcGFzLmRlPgorYW5kIEF2ZXJ5IHRvdWNoZWQgaXQgdXAgYSBiaXQsIGF0IFZvanRlY2gncyByZXF1ZXN0LgorCitBUkNuZXQgKHRoZSBjbGFzc2ljIDIuNSBNYnBzIHZlcnNpb24pIGNhbiBiZSBjb25uZWN0ZWQgYnkgdHdvIGRpZmZlcmVudAordHlwZXMgb2YgY2FibGluZzogY29heCBhbmQgdHdpc3RlZCBwYWlyLiAgVGhlIG90aGVyIEFSQ25ldC10eXBlIG5ldHdvcmtzCisoMTAwIE1icHMgVENOUyBhbmQgMzIwIGticHMgLSAzMiBNYnBzIEFSQ25ldCBQbHVzKSB1c2UgZGlmZmVyZW50IHR5cGVzIG9mCitjYWJsaW5nIChUeXBlMSwgRmliZXIsIEMxLCBDNCwgQzUpLgorCitGb3IgYSBjb2F4IG5ldHdvcmssIHlvdSAic2hvdWxkIiB1c2UgOTMgT2htIFJHLTYyIGNhYmxlLiAgQnV0IG90aGVyIGNhYmxlcworYWxzbyB3b3JrIGZpbmUsIGJlY2F1c2UgQVJDbmV0IGlzIGEgdmVyeSBzdGFibGUgbmV0d29yay4gSSBwZXJzb25hbGx5IHVzZSA3NQorT2htIFRWIGFudGVubmEgY2FibGUuCisKK0NhcmRzIGZvciBjb2F4IGNhYmxpbmcgYXJlIHNoaXBwZWQgaW4gdHdvIGRpZmZlcmVudCB2YXJpYW50czogZm9yIEJVUyBhbmQKK1NUQVIgbmV0d29yayB0b3BvbG9naWVzLiAgVGhleSBhcmUgbW9zdGx5IHRoZSBzYW1lLiAgVGhlIG9ubHkgZGlmZmVyZW5jZQorbGllcyBpbiB0aGUgaHlicmlkIGNoaXAgaW5zdGFsbGVkLiAgQlVTIGNhcmRzIHVzZSBoaWdoIGltcGVkYW5jZSBvdXRwdXQsCit3aGlsZSBTVEFSIHVzZSBsb3cgaW1wZWRhbmNlLiAgTG93IGltcGVkYW5jZSBjYXJkIChTVEFSKSBpcyBlbGVjdHJpY2FsbHkKK2VxdWFsIHRvIGEgaGlnaCBpbXBlZGFuY2Ugb25lIHdpdGggYSB0ZXJtaW5hdG9yIGluc3RhbGxlZC4KKworVXN1YWxseSwgdGhlIEFSQ25ldCBuZXR3b3JrcyBhcmUgYnVpbHQgdXAgZnJvbSBTVEFSIGNhcmRzIGFuZCBodWJzLiAgVGhlcmUKK2FyZSB0d28gdHlwZXMgb2YgaHVicyAtIGFjdGl2ZSBhbmQgcGFzc2l2ZS4gIFBhc3NpdmUgaHVicyBhcmUgc21hbGwgYm94ZXMKK3dpdGggZm91ciBCTkMgY29ubmVjdG9ycyBjb250YWluaW5nIGZvdXIgNDcgT2htIHJlc2lzdG9yczoKKworICAgfCAgICAgICAgIHwgd2lyZXMKKyAgIFIgICAgICAgICArIGp1bmN0aW9uCistUi0rLVItICAgICAgUiA0NyBPaG0gcmVzaXN0b3JzCisgICBSCisgICB8CisKK1RoZSBzaGllbGRpbmcgaXMgY29ubmVjdGVkIHRvZ2V0aGVyLiAgQWN0aXZlIGh1YnMgYXJlIG11Y2ggbW9yZSBjb21wbGljYXRlZDsKK3RoZXkgYXJlIHBvd2VyZWQgYW5kIGNvbnRhaW4gZWxlY3Ryb25pY3MgdG8gYW1wbGlmeSB0aGUgc2lnbmFsIGFuZCBzZW5kIGl0Cit0byBvdGhlciBzZWdtZW50cyBvZiB0aGUgbmV0LiAgVGhleSB1c3VhbGx5IGhhdmUgZWlnaHQgY29ubmVjdG9ycy4gIEFjdGl2ZQoraHVicyBjb21lIGluIHR3byB2YXJpYW50cyAtIGR1bWIgYW5kIHNtYXJ0LiAgVGhlIGR1bWIgdmFyaWFudCBqdXN0CithbXBsaWZpZXMsIGJ1dCB0aGUgc21hcnQgb25lIGRlY29kZXMgdG8gZGlnaXRhbCBhbmQgZW5jb2RlcyBiYWNrIGFsbCBwYWNrZXRzCitjb21pbmcgdGhyb3VnaC4gIFRoaXMgaXMgbXVjaCBiZXR0ZXIgaWYgeW91IGhhdmUgc2V2ZXJhbCBodWJzIGluIHRoZSBuZXQsCitzaW5jZSBtYW55IGR1bWIgYWN0aXZlIGh1YnMgbWF5IHdvcnNlbiB0aGUgc2lnbmFsIHF1YWxpdHkuCisKK0FuZCBub3cgdG8gdGhlIGNhYmxpbmcuICBXaGF0IHlvdSBjYW4gY29ubmVjdCB0b2dldGhlcjoKKworMS4gQSBjYXJkIHRvIGEgY2FyZC4gIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSBvZiBjcmVhdGluZyBhIDItY29tcHV0ZXIKKyAgIG5ldHdvcmsuCisKKzIuIEEgY2FyZCB0byBhIHBhc3NpdmUgaHViLiAgUmVtZW1iZXIgdGhhdCBhbGwgdW51c2VkIGNvbm5lY3RvcnMgb24gdGhlIGh1YgorICAgbXVzdCBiZSBwcm9wZXJseSB0ZXJtaW5hdGVkIHdpdGggOTMgT2htIChvciBzb21ldGhpbmcgZWxzZSBpZiB5b3UgZG9uJ3QKKyAgIGhhdmUgdGhlIHJpZ2h0IG9uZXMpIHRlcm1pbmF0b3JzLgorICAgCShBdmVyeSdzIG5vdGU6IG9vcHMsIEkgZGlkbid0IGtub3cgdGhhdC4gIE1pbmUgKFRWIGNhYmxlKSB3b3JrcworCWFueXdheSwgdGhvdWdoLikKKworMy4gQSBjYXJkIHRvIGFuIGFjdGl2ZSBodWIuICBIZXJlIGlzIG5vIG5lZWQgdG8gdGVybWluYXRlIHRoZSB1bnVzZWQKKyAgIGNvbm5lY3RvcnMgZXhjZXB0IHNvbWUga2luZCBvZiBhZXN0aGV0aWMgZmVlbGluZy4gIEJ1dCwgdGhlcmUgbWF5IG5vdCBiZQorICAgbW9yZSB0aGFuIGVsZXZlbiBhY3RpdmUgaHVicyBiZXR3ZWVuIGFueSB0d28gY29tcHV0ZXJzLiAgVGhhdCBvZiBjb3Vyc2UKKyAgIGRvZXNuJ3QgbGltaXQgdGhlIG51bWJlciBvZiBhY3RpdmUgaHVicyBvbiB0aGUgbmV0d29yay4KKyAgIAorNC4gQW4gYWN0aXZlIGh1YiB0byBhbm90aGVyLgorCis1LiBBbiBhY3RpdmUgaHViIHRvIHBhc3NpdmUgaHViLgorCitSZW1lbWJlciwgdGhhdCB5b3UgY2FuIG5vdCBjb25uZWN0IHR3byBwYXNzaXZlIGh1YnMgdG9nZXRoZXIuICBUaGUgcG93ZXIgbG9zcworaW1wbGllZCBieSBzdWNoIGEgY29ubmVjdGlvbiBpcyB0b28gaGlnaCBmb3IgdGhlIG5ldCB0byBvcGVyYXRlIHJlbGlhYmx5LgorCitBbiBleGFtcGxlIG9mIGEgdHlwaWNhbCBBUkNuZXQgbmV0d29yazoKKworICAgICAgICAgICBSICAgICAgICAgICAgICAgICAgICAgUyAtIFNUQVIgdHlwZSBjYXJkICAgICAgICAgICAgICAKKyAgICBTLS0tLS0tSC0tLS0tLS0tQS0tLS0tLS1TICAgIFIgLSBUZXJtaW5hdG9yCisgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICBIIC0gSHViICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgICAgQSAtIEFjdGl2ZSBodWIgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgfCAgIFMtLS0tSC0tLS1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIFMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorVGhlIEJVUyB0b3BvbG9neSBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIG9uZSB1c2VkIGJ5IEV0aGVybmV0LiAgVGhlIG9ubHkKK2RpZmZlcmVuY2UgaXMgaW4gY2FibGUgYW5kIHRlcm1pbmF0b3JzOiB0aGV5IHNob3VsZCBiZSA5MyBPaG0uICBFdGhlcm5ldAordXNlcyA1MCBPaG0gaW1wZWRhbmNlLiBZb3UgdXNlIFQgY29ubmVjdG9ycyB0byBwdXQgdGhlIGNvbXB1dGVycyBvbiBhIHNpbmdsZQorbGluZSBvZiBjYWJsZSwgdGhlIGJ1cy4gWW91IGhhdmUgdG8gcHV0IHRlcm1pbmF0b3JzIGF0IGJvdGggZW5kcyBvZiB0aGUKK2NhYmxlLiBBIHR5cGljYWwgQlVTIEFSQ25ldCBuZXR3b3JrIGxvb2tzIGxpa2U6CisKKyAgICBSVC0tLS1ULS0tLS0tVC0tLS0tLVQtLS0tLS1ULS0tLS0tVFIKKyAgICAgQiAgICBCICAgICAgQiAgICAgIEIgICAgICBCICAgICAgQgorCisgIEIgLSBCVVMgdHlwZSBjYXJkCisgIFIgLSBUZXJtaW5hdG9yCisgIFQgLSBUIGNvbm5lY3RvcgorCitCdXQgdGhhdCBpcyBub3QgYWxsISBUaGUgdHdvIHR5cGVzIGNhbiBiZSBjb25uZWN0ZWQgdG9nZXRoZXIuICBBY2NvcmRpbmcgdG8KK3RoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIHRoZSBvbmx5IHdheSBvZiBjb25uZWN0aW5nIHRoZW0gaXMgdXNpbmcgYW4gYWN0aXZlCitodWI6CisKKyAgICAgICAgIEEtLS0tLS1ULS0tLS0tVC0tLS0tLVRSCisgICAgICAgICB8ICAgICAgQiAgICAgIEIgICAgICBCCisgICAgIFMtLS1ILS0tUworICAgICAgICAgfAorICAgICAgICAgUworCitUaGUgb2ZmaWNpYWwgZG9jcyBhbHNvIHN0YXRlIHRoYXQgeW91IGNhbiB1c2UgU1RBUiBjYXJkcyBhdCB0aGUgZW5kcyBvZgorQlVTIG5ldHdvcmsgaW4gcGxhY2Ugb2YgYSBCVVMgY2FyZCBhbmQgYSB0ZXJtaW5hdG9yOgorCisgICAgIFMtLS0tLS1ULS0tLS0tVC0tLS0tLVMKKyAgICAgICAgICAgIEIgICAgICBCCisKK0J1dCwgYWNjb3JkaW5nIHRvIG15IG93biBleHBlcmltZW50cywgeW91IGNhbiBzaW1wbHkgaGFuZyBhIEJVUyB0eXBlIGNhcmQKK2FueXdoZXJlIGluIG1pZGRsZSBvZiBhIGNhYmxlIGluIGEgU1RBUiB0b3BvbG9neSBuZXR3b3JrLiAgQW5kIG1vcmUgLSB5b3UKK2NhbiB1c2UgdGhlIGJ1cyBjYXJkIGluIHBsYWNlIG9mIGFueSBzdGFyIGNhcmQgaWYgeW91IHVzZSBhIHRlcm1pbmF0b3IuIFRoZW4KK3lvdSBjYW4gYnVpbGQgdmVyeSBjb21wbGljYXRlZCBuZXR3b3JrcyBmdWxmaWxsaW5nIGFsbCB5b3VyIG5lZWRzISAgQW4KK2V4YW1wbGU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICBSVC0tLS0tLVQtLS0tLS0tVC0tLS0tLUgtLS0tLS1TCisgICAgICAgICAgICBCICAgICAgQiAgICAgICBCICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgUgorICAgIFMtLS0tLS1BLS0tLS0tVC0tLS0tLS1ULS0tLS0tLUEtLS0tLS0tSC0tLS0tLVRSICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgfCAgICAgIEIgICAgICAgQiAgICAgICB8ICAgICAgIHwgICAgICBCICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgUyAgICAgICAgICAgICAgICAgQlQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgICAgIHwgIFMtLS0tQS0tLS0tUworICAgIFMtLS0tLS1ILS0tQS0tLS1TICAgICAgICAgICAgIHwgICAgICAgfCAKKyAgICAgICAgICAgfCAgIHwgICAgICBTLS0tLS0tVC0tLS1ILS0tUyAgIHwKKyAgICAgICAgICAgUyAgIFMgICAgICAgICAgICAgQiAgICBSICAgICAgIFMgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitBIGJhc2ljYWxseSBkaWZmZXJlbnQgY2FibGluZyBzY2hlbWUgaXMgdXNlZCB3aXRoIFR3aXN0ZWQgUGFpciBjYWJsaW5nLiBFYWNoCitvZiB0aGUgVFAgY2FyZHMgaGFzIHR3byBSSiAocGhvbmUtY29yZCBzdHlsZSkgY29ubmVjdG9ycy4gIFRoZSBjYXJkcyBhcmUKK3RoZW4gZGFpc3ktY2hhaW5lZCB0b2dldGhlciB1c2luZyBhIGNhYmxlIGNvbm5lY3RpbmcgZXZlcnkgdHdvIG5laWdoYm9yaW5nCitjYXJkcy4gIFRoZSBlbmRzIGFyZSB0ZXJtaW5hdGVkIHdpdGggUkogOTMgT2htIHRlcm1pbmF0b3JzIHdoaWNoIHBsdWcgaW50bwordGhlIGVtcHR5IGNvbm5lY3RvcnMgb2YgY2FyZHMgb24gdGhlIGVuZHMgb2YgdGhlIGNoYWluLiAgQW4gZXhhbXBsZToKKworICAgICAgICAgIF9fX19fX19fX19fICAgX19fX19fX19fX18KKyAgICAgIF9SX3xfICAgICAgICAgX3xffF8gICAgICAgICBffF9SXyAgCisgICAgIHwgICAgIHwgICAgICAgfCAgICAgfCAgICAgICB8ICAgICB8ICAgICAgCisgICAgIHxDYXJkIHwgICAgICAgfENhcmQgfCAgICAgICB8Q2FyZCB8ICAgICAKKyAgICAgfF9fX19ffCAgICAgICB8X19fX198ICAgICAgIHxfX19fX3wgICAgICAgICAgCisKKworVGhlcmUgYXJlIGFsc28gaHVicyBmb3IgdGhlIFRQIHRvcG9sb2d5LiAgVGhlcmUgaXMgbm90aGluZyBkaWZmaWN1bHQKK2ludm9sdmVkIGluIHVzaW5nIHRoZW07IHlvdSBqdXN0IGNvbm5lY3QgYSBUUCBjaGFpbiB0byBhIGh1YiBvbiBhbnkgZW5kIG9yCitldmVuIGF0IGJvdGguICBUaGlzIHdheSB5b3UgY2FuIGNyZWF0ZSBhbG1vc3QgYW55IG5ldHdvcmsgY29uZmlndXJhdGlvbi4gCitUaGUgbWF4aW11bSBvZiAxMSBodWJzIGJldHdlZW4gYW55IHR3byBjb21wdXRlcnMgb24gdGhlIG5ldCBhcHBsaWVzIGhlcmUgYXMKK3dlbGwuICBBbiBleGFtcGxlOgorCisgICAgUlAtLS0tLS0tUC0tLS0tLS0tUC0tLS0tLS0tSC0tLS0tUC0tLS0tLVAtLS0tLVBSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgUlAtLS0tLUgtLS0tLS0tLVAtLS0tLS0tLUgtLS0tLVAtLS0tLS1QUgorICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICBQUiAgICAgICAgICAgICAgICBQUgorCisgICAgUiAtIFJKIFRlcm1pbmF0b3IKKyAgICBQIC0gVFAgQ2FyZAorICAgIEggLSBUUCBIdWIKKworTGlrZSBhbnkgbmV0d29yaywgQVJDbmV0IGhhcyBhIGxpbWl0ZWQgY2FibGUgbGVuZ3RoLiAgVGhlc2UgYXJlIHRoZSBtYXhpbXVtCitjYWJsZSBsZW5ndGhzIGJldHdlZW4gdHdvIGFjdGl2ZSBlbmRzIChhbiBhY3RpdmUgZW5kIGJlaW5nIGFuIGFjdGl2ZSBodWIgb3IKK2EgU1RBUiBjYXJkKS4KKworCQlSRy02MiAgICAgICA5MyBPaG0gdXAgdG8gNjUwIG0KKwkJUkctNTkvVSAgICAgNzUgT2htIHVwIHRvIDQ1NyBtCisJCVJHLTExL1UgICAgIDc1IE9obSB1cCB0byA1MzMgbQorCQlJQk0gVHlwZSAxIDE1MCBPaG0gdXAgdG8gMjAwIG0KKwkJSUJNIFR5cGUgMyAxMDAgT2htIHVwIHRvIDEwMCBtCisKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbGwgY2FibGVzIGNvbm5lY3RlZCB0byBhIHBhc3NpdmUgaHViIGlzIGxpbWl0ZWQgdG8gNjUKK21ldGVycyBmb3IgUkctNjIgY2FibGluZzsgbGVzcyBmb3Igb3RoZXJzLiAgWW91IGNhbiBzZWUgdGhhdCB1c2luZyBwYXNzaXZlCitodWJzIGluIGEgbGFyZ2UgbmV0d29yayBpcyBhIGJhZCBpZGVhLiBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzaW5nbGUgIkJVUworVHJ1bmsiIGlzIGFib3V0IDMwMCBtZXRlcnMgZm9yIFJHLTYyLiBUaGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28KK21vc3QgZGlzdGFudCBwb2ludHMgb2YgdGhlIG5ldCBpcyBsaW1pdGVkIHRvIDMwMDAgbWV0ZXJzLiBUaGUgbWF4aW11bSBsZW5ndGgKK29mIGEgVFAgY2FibGUgYmV0d2VlbiB0d28gY2FyZHMvaHVicyBpcyA2NTAgbWV0ZXJzLgorCisKK1NFVFRJTkcgVEhFIEpVTVBFUlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIEFSQ25ldCBjYXJkcyBzaG91bGQgaGF2ZSBhIHRvdGFsIG9mIGZvdXIgb3IgZml2ZSBkaWZmZXJlbnQgc2V0dGluZ3M6CisKKyAgLSB0aGUgSS9PIGFkZHJlc3M6ICB0aGlzIGlzIHRoZSAicG9ydCIgeW91ciBBUkNuZXQgY2FyZCBpcyBvbi4gIFByb2JlZAorICAgIHZhbHVlcyBpbiB0aGUgTGludXggQVJDbmV0IGRyaXZlciBhcmUgb25seSBmcm9tIDB4MjAwIHRocm91Z2ggMHgzRjAuIChJZgorICAgIHlvdXIgY2FyZCBoYXMgYWRkaXRpb25hbCBvbmVzLCB3aGljaCBpcyBwb3NzaWJsZSwgcGxlYXNlIHRlbGwgbWUuKSBUaGlzCisgICAgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyBhbnkgb3RoZXIgZGV2aWNlIG9uIHlvdXIgc3lzdGVtLiAgQWNjb3JkaW5nIHRvCisgICAgYSBkb2MgSSBnb3QgZnJvbSBOb3ZlbGwsIE1TIFdpbmRvd3MgcHJlZmVycyB2YWx1ZXMgb2YgMHgzMDAgb3IgbW9yZSwKKyAgICBlYXRpbmcgbmV0IGNvbm5lY3Rpb25zIG9uIG15IHN5c3RlbSAoYXQgbGVhc3QpIG90aGVyd2lzZS4gIE15IGd1ZXNzIGlzCisgICAgdGhpcyBtYXkgYmUgYmVjYXVzZSwgaWYgeW91ciBjYXJkIGlzIGF0IDB4MkUwLCBwcm9iaW5nIGZvciBhIHNlcmlhbCBwb3J0CisgICAgYXQgMHgyRTggd2lsbCByZXNldCB0aGUgY2FyZCBhbmQgcHJvYmFibHkgbWVzcyB0aGluZ3MgdXAgcm95YWxseS4KKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiAweDMwMC4KKworICAtIHRoZSBJUlE6IG9uICA4LWJpdCBjYXJkcywgaXQgbWlnaHQgYmUgMiAoOSksIDMsIDQsIDUsIG9yIDcuCisgICAgICAgICAgICAgb24gMTYtYml0IGNhcmRzLCBpdCBtaWdodCBiZSAyICg5KSwgMywgNCwgNSwgNywgb3IgMTAtMTUuCisgICAgICAgICAgICAgCisgICAgTWFrZSBzdXJlIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYW55IG90aGVyIGNhcmQgb24geW91ciBzeXN0ZW0uICBOb3RlCisgICAgdGhhdCBJUlEyIGlzIHRoZSBzYW1lIGFzIElSUTksIGFzIGZhciBhcyBMaW51eCBpcyBjb25jZXJuZWQuICBZb3UgY2FuCisgICAgImNhdCAvcHJvYy9pbnRlcnJ1cHRzIiBmb3IgYSBzb21ld2hhdCBjb21wbGV0ZSBsaXN0IG9mIHdoaWNoIG9uZXMgYXJlIGluCisgICAgdXNlIGF0IGFueSBnaXZlbiB0aW1lLiAgSGVyZSBpcyBhIGxpc3Qgb2YgY29tbW9uIHVzYWdlcyBmcm9tIFZvanRlY2gKKyAgICBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej46CisgICAgCSgiTm90IG9uIGJ1cyIgbWVhbnMgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGNhcmQgdG8gZ2VuZXJhdGUgdGhpcworCWludGVycnVwdCkKKwlJUlEgIDAgLSBUaW1lciAwIChOb3Qgb24gYnVzKQorCUlSUSAgMSAtIEtleWJvYXJkIChOb3Qgb24gYnVzKQorCUlSUSAgMiAtIElSUSBDb250cm9sbGVyIDIgKE5vdCBvbiBidXMsIG5vciBkb2VzIGludGVycnVwdCB0aGUgQ1BVKQorCUlSUSAgMyAtIENPTTIKKwlJUlEgIDQgLSBDT00xCisJSVJRICA1IC0gRlJFRSAoTFBUMiBpZiB5b3UgaGF2ZSBpdDsgc29tZXRpbWVzIENPTTM7IG1heWJlIFBMSVApCisJSVJRICA2IC0gRmxvcHB5IGRpc2sgY29udHJvbGxlcgorCUlSUSAgNyAtIEZSRUUgKExQVDEgaWYgeW91IGRvbid0IHVzZSB0aGUgcG9sbGluZyBkcml2ZXI7IFBMSVApIAorCUlSUSAgOCAtIFJlYWx0aW1lIENsb2NrIEludGVycnVwdCAoTm90IG9uIGJ1cykKKwlJUlEgIDkgLSBGUkVFIChWR0EgdmVydGljYWwgc3luYyBpbnRlcnJ1cHQgaWYgZW5hYmxlZCkKKwlJUlEgMTAgLSBGUkVFCisJSVJRIDExIC0gRlJFRQorCUlSUSAxMiAtIEZSRUUKKwlJUlEgMTMgLSBOdW1lcmljIENvcHJvY2Vzc29yIChOb3Qgb24gYnVzKQorCUlSUSAxNCAtIEZpeGVkIERpc2sgQ29udHJvbGxlcgorCUlSUSAxNSAtIEZSRUUgKEZpeGVkIERpc2sgQ29udHJvbGxlciAyIGlmIHlvdSBoYXZlIGl0KSAKKwkKKwlOb3RlOiBJUlEgOSBpcyB1c2VkIG9uIHNvbWUgdmlkZW8gY2FyZHMgZm9yIHRoZSAidmVydGljYWwgcmV0cmFjZSIKKwlpbnRlcnJ1cHQuICBUaGlzIGludGVycnVwdCB3b3VsZCBoYXZlIGJlZW4gaGFuZHkgZm9yIHRoaW5ncyBsaWtlCisJdmlkZW8gZ2FtZXMsIGFzIGl0IG9jY3VycyBleGFjdGx5IG9uY2UgcGVyIHNjcmVlbiByZWZyZXNoLCBidXQKKwl1bmZvcnR1bmF0ZWx5IElCTSBjYW5jZWxsZWQgdGhpcyBmZWF0dXJlIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsCisJVkdBIGFuZCB0aHVzIG1hbnkgVkdBL1NWR0EgY2FyZHMgZG8gbm90IHN1cHBvcnQgaXQuICBGb3IgdGhpcworCXJlYXNvbiwgbm8gbW9kZXJuIHNvZnR3YXJlIHVzZXMgdGhpcyBpbnRlcnJ1cHQgYW5kIGl0IGNhbiBhbG1vc3QKKwlhbHdheXMgYmUgc2FmZWx5IGRpc2FibGVkLCBpZiB5b3VyIHZpZGVvIGNhcmQgc3VwcG9ydHMgaXQgYXQgYWxsLgorCQorCUlmIHlvdXIgY2FyZCBmb3Igc29tZSByZWFzb24gQ0FOTk9UIGRpc2FibGUgdGhpcyBJUlEgKHVzdWFsbHkgdGhlcmUKKwlpcyBhIGp1bXBlciksIG9uZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBjbGlwIHRoZSBwcmludGVkIGNpcmN1aXQKKwljb250YWN0IG9uIHRoZSBib2FyZDogaXQncyB0aGUgZm91cnRoIGNvbnRhY3QgZnJvbSB0aGUgbGVmdCBvbiB0aGUKKwliYWNrIHNpZGUuICBJIHRha2Ugbm8gcmVzcG9uc2liaWxpdHkgaWYgeW91IHRyeSB0aGlzLgorCisJLSBBdmVyeSdzIGZhdm91cml0ZTogSVJRMiAoYWN0dWFsbHkgSVJROSkuICBXYXRjaCB0aGF0IFZHQSwgdGhvdWdoLgorCisgIC0gdGhlIG1lbW9yeSBhZGRyZXNzOiAgVW5saWtlIG1vc3QgY2FyZHMsIEFSQ25ldHMgdXNlICJzaGFyZWQgbWVtb3J5IiBmb3IKKyAgICBjb3B5aW5nIGJ1ZmZlcnMgYXJvdW5kLiAgTWFrZSBTVVJFIGl0IGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIKKyAgICB1c2VkIG1lbW9yeSBpbiB5b3VyIHN5c3RlbSEKKwlBMDAwMAkJLSBWR0EgZ3JhcGhpY3MgbWVtb3J5IChvayBpZiB5b3UgZG9uJ3QgaGF2ZSBWR0EpCisgICAgICAgIEIwMDAwCQktIE1vbm9jaHJvbWUgdGV4dCBtb2RlCisgICAgICAgIEMwMDAwCQlcICBPbmUgb2YgdGhlc2UgaXMgeW91ciBWR0EgQklPUyAtIHVzdWFsbHkgQzAwMDAuCisgICAgICAgIEUwMDAwCQkvCisgICAgICAgIEYwMDAwCQktIFN5c3RlbSBCSU9TCisKKyAgICBBbnl0aGluZyBsZXNzIHRoYW4gMHhBMDAwMCBpcywgd2VsbCwgYSBCQUQgaWRlYSBzaW5jZSBpdCBpc24ndCBhYm92ZQorICAgIDY0MGsuCisJLSBBdmVyeSdzIGZhdm91cml0ZTogMHhEMDAwMAorCisgIC0gdGhlIHN0YXRpb24gYWRkcmVzczogIEV2ZXJ5IEFSQ25ldCBjYXJkIGhhcyBpdHMgb3duICJ1bmlxdWUiIG5ldHdvcmsKKyAgICBhZGRyZXNzIGZyb20gMCB0byAyNTUuICBVbmxpa2UgRXRoZXJuZXQsIHlvdSBjYW4gc2V0IHRoaXMgYWRkcmVzcworICAgIHlvdXJzZWxmIHdpdGggYSBqdW1wZXIgb3Igc3dpdGNoIChvciBvbiBzb21lIGNhcmRzLCB3aXRoIHNwZWNpYWwKKyAgICBzb2Z0d2FyZSkuICBTaW5jZSBpdCdzIG9ubHkgOCBiaXRzLCB5b3UgY2FuIG9ubHkgaGF2ZSAyNTQgQVJDbmV0IGNhcmRzCisgICAgb24gYSBuZXR3b3JrLiAgRE9OJ1QgdXNlIDAgb3IgMjU1LCBzaW5jZSB0aGVzZSBhcmUgcmVzZXJ2ZWQgKGFsdGhvdWdoCisgICAgbmVhdCBzdHVmZiB3aWxsIHByb2JhYmx5IGhhcHBlbiBpZiB5b3UgRE8gdXNlIHRoZW0pLiAgQnkgdGhlIHdheSwgaWYgeW91CisgICAgaGF2ZW4ndCBhbHJlYWR5IGd1ZXNzZWQsIGRvbid0IHNldCB0aGlzIHRoZSBzYW1lIGFzIGFueSBvdGhlciBBUkNuZXQgb24KKyAgICB5b3VyIG5ldHdvcmshCisJLSBBdmVyeSdzIGZhdm91cml0ZTogIDMgYW5kIDQuICBOb3QgdGhhdCBpdCBtYXR0ZXJzLgorCisgIC0gVGhlcmUgbWF5IGJlIEVUUzEgYW5kIEVUUzIgc2V0dGluZ3MuICBUaGVzZSBtYXkgb3IgbWF5IG5vdCBtYWtlIGEKKyAgICBkaWZmZXJlbmNlIG9uIHlvdXIgY2FyZCAobWFueSBtYW51YWxzIGNhbGwgdGhlbSAicmVzZXJ2ZWQiKSwgYnV0IGFyZQorICAgIHVzZWQgdG8gY2hhbmdlIHRoZSBkZWxheXMgdXNlZCB3aGVuIHBvd2VyaW5nIHVwIGEgY29tcHV0ZXIgb24gdGhlCisgICAgbmV0d29yay4gIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiB3aXJpbmcgVkVSWSBsb25nIHJhbmdlIEFSQ25ldAorICAgIG5ldHdvcmtzLCBvbiB0aGUgb3JkZXIgb2YgNGttIG9yIHNvOyBpbiBhbnkgY2FzZSwgdGhlIG9ubHkgcmVhbAorICAgIHJlcXVpcmVtZW50IGhlcmUgaXMgdGhhdCBhbGwgY2FyZHMgb24gdGhlIG5ldHdvcmsgd2l0aCBFVFMxIGFuZCBFVFMyCisgICAganVtcGVycyBoYXZlIHRoZW0gaW4gdGhlIHNhbWUgcG9zaXRpb24uICBDaHJpcyBIaW5keSA8Y2hyaXNoQGlvLm9yZz4KKyAgICBzZW50IGluIGEgY2hhcnQgd2l0aCBhY3R1YWwgdmFsdWVzIGZvciB0aGlzOgorCUVUMQlFVDIJUmVzcG9uc2UgVGltZQlSZWNvbmZpZ3VyYXRpb24gVGltZQorCS0tLQktLS0JLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLQorCW9wZW4Jb3Blbgk3NC43dXMJCTg0MHVzCisJb3BlbgljbG9zZWQJMjgzLjR1cwkJMTY4MHVzCisJY2xvc2VkCW9wZW4JNTYxLjh1cwkJMTY4MHVzCisJY2xvc2VkCWNsb3NlZAkxMTE4LjZ1cwkxNjgwdXMKKyAgICAKKyAgICBNYWtlIHN1cmUgeW91IHNldCBFVFMxIGFuZCBFVFMyIHRvIHRoZSBTQU1FIFZBTFVFIGZvciBhbGwgY2FyZHMgb24geW91cgorICAgIG5ldHdvcmsuCisgICAgCitBbHNvLCBvbiBtYW55IGNhcmRzIChub3QgbWluZSwgdGhvdWdoKSB0aGVyZSBhcmUgcmVkIGFuZCBncmVlbiBMRUQncy4gCitWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PiB0ZWxscyBtZSB0aGlzIGlzIHdoYXQgdGhleSBtZWFuOgorCUdSRUVOICAgICAgICAgICBSRUQgICAgICAgICAgICAgU3RhdHVzCisJLS0tLS0JCS0tLQkJLS0tLS0tCisJT0ZGICAgICAgICAgICAgIE9GRiAgICAgICAgICAgICBQb3dlciBvZmYKKwlPRkYgICAgICAgICAgICAgU2hvcnQgZmxhc2hlcyAgIENhYmxpbmcgcHJvYmxlbXMgKGJyb2tlbiBjYWJsZSBvciBub3QKKwkJCQkJICB0ZXJtaW5hdGVkKQorCU9GRiAoc2hvcnQpICAgICBPTiAgICAgICAgICAgICAgQ2FyZCBpbml0CisJT04gICAgICAgICAgICAgIE9OICAgICAgICAgICAgICBOb3JtYWwgc3RhdGUgLSBldmVyeXRoaW5nIE9LLCBub3RoaW5nCisJCQkJCSAgaGFwcGVucworCU9OICAgICAgICAgICAgICBMb25nIGZsYXNoZXMgICAgRGF0YSB0cmFuc2ZlcgorCU9OICAgICAgICAgICAgICBPRkYgICAgICAgICAgICAgTmV2ZXIgaGFwcGVucyAobWF5YmUgd2hlbiB3cm9uZyBJRCkKKworCitUaGUgZm9sbG93aW5nIGlzIGFsbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcGVvcGxlIGhhdmUgc2VudCBtZSBhYm91dAordGhlaXIgb3duIHBhcnRpY3VsYXIgQVJDbmV0IGNhcmRzLiAgSXQgaXMgb2ZmaWNpYWxseSBhIG1lc3MsIGFuZCBjb250YWlucworaHVnZSBhbW91bnRzIG9mIGR1cGxpY2F0ZWQgaW5mb3JtYXRpb24uICBJIGhhdmUgbm8gdGltZSB0byBmaXggaXQuICBJZiB5b3UKK3dhbnQgdG8sIFBMRUFTRSBETyEgIEp1c3Qgc2VuZCBtZSBhICdkaWZmIC11JyBvZiBhbGwgeW91ciBjaGFuZ2VzLgorCitUaGUgbW9kZWwgIyBpcyBsaXN0ZWQgcmlnaHQgYWJvdmUgc3BlY2lmaWNzIGZvciB0aGF0IGNhcmQsIHNvIHlvdSBzaG91bGQgYmUKK2FibGUgdG8gdXNlIHlvdXIgdGV4dCB2aWV3ZXIncyAic2VhcmNoIiBmdW5jdGlvbiB0byBmaW5kIHRoZSBlbnRyeSB5b3Ugd2FudC4gCitJZiB5b3UgZG9uJ3QgS05PVyB3aGF0IGtpbmQgb2YgY2FyZCB5b3UgaGF2ZSwgdHJ5IGxvb2tpbmcgdGhyb3VnaCB0aGUKK3ZhcmlvdXMgZGlhZ3JhbXMgdG8gc2VlIGlmIHlvdSBjYW4gdGVsbC4KKworSWYgeW91ciBtb2RlbCBpc24ndCBsaXN0ZWQgYW5kL29yIGhhcyBkaWZmZXJlbnQgc2V0dGluZ3MsIFBMRUFTRSBQTEVBU0UKK3RlbGwgbWUuICBJIGhhZCB0byBmaWd1cmUgbWluZSBvdXQgd2l0aG91dCB0aGUgbWFudWFsLCBhbmQgaXQgV0FTTidUIEZVTiEKKworRXZlbiBpZiB5b3VyIEFSQ25ldCBtb2RlbCBpc24ndCBsaXN0ZWQsIGJ1dCBoYXMgdGhlIHNhbWUganVtcGVycyBhcyBhbm90aGVyCittb2RlbCB0aGF0IGlzLCBwbGVhc2UgZS1tYWlsIG1lIHRvIHNheSBzby4KKworQ2FyZHMgTGlzdGVkIGluIHRoaXMgZmlsZSAoaW4gdGhpcyBvcmRlciwgbW9zdGx5KToKKworCU1hbnVmYWN0dXJlcglNb2RlbCAjCQkJQml0cworCS0tLS0tLS0tLS0tLQktLS0tLS0tCQkJLS0tLQorCVNNQwkJUEMxMDAJCQk4CisJU01DCQlQQzExMAkJCTgKKwlTTUMJCVBDMTIwCQkJOAorCVNNQwkJUEMxMzAJCQk4CisJU01DCQlQQzI3MEUJCQk4CisJU01DCQlQQzUwMAkJCTE2CisJU01DCQlQQzUwMExvbmdib2FyZAkJMTYKKwlTTUMJCVBDNTUwTG9uZ2JvYXJkCQkxNgorCVNNQwkJUEM2MDAJCQkxNgorCVNNQwkJUEM3MTAJCQk4CisJU01DPwkJTENTLTg4MzAoLVQpCQk4LzE2CisJUHVyZWRhdGEJUERJNTA3CQkJOAorCUNOZXQgVGVjaAlDTjEyMC1TZXJpZXMJCTgKKwlDTmV0IFRlY2gJQ04xNjAtU2VyaWVzCQkxNgorCUxhbnRlY2g/CVVNOTA2NUwgY2hpcHNldAkJOAorCUFjZXIJCTUyMTAtMDAzCQk4CisJRGF0YXBvaW50PwlMQU4tQVJDLTgJCTgKKwlUb3B3YXJlCQlUQS1BUkMvMTAJCTgKKwlUaG9tYXMtQ29ucmFkCTUwMC02MjQyLTAwOTcgUkVWIEEJOAorCVdhdGVybG9vPwkoQykxOTg1IFdhdGVybG9vIE1pY3JvLiA4CisJTm8gTmFtZQkJLS0JCQk4LzE2CisJTm8gTmFtZQkJVGFpd2FuIFIuTy5DPwkJOAorCU5vIE5hbWUJCU1vZGVsIDkwNTgJCTgKKwlUaWFyYQkJVGlhcmEgTGFuY2FyZD8JCTgKKwkKKworKiogU01DID0gU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAuCisqKiBDTmV0IFRlY2ggPSBDTmV0IFRlY2hub2xvZ3ksIEluYy4KKworCitVbmNsYXNzaWZpZWQgU3R1ZmYKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAtIFBsZWFzZSBzZW5kIGFueSBvdGhlciBpbmZvcm1hdGlvbiB5b3UgY2FuIGZpbmQuCisgIAorICAtIEFuZCBzb21lIG90aGVyIHN0dWZmIChtb3JlIGluZm8gaXMgd2VsY29tZSEpOgorICAgICBGcm9tOiByb290QHVsdHJhd29ybGQueHM0YWxsLm5sIChUaW1vIEhpbGJyaW5rKQorICAgICBUbzogYXBlbndhcnJAZm94bmV0Lm5ldCAoQXZlcnkgUGVubmFydW4pCisgICAgIERhdGU6IFdlZCwgMjYgT2N0IDE5OTQgMDI6MTA6MzIgKzAwMDAgKEdNVCkKKyAgICAgUmVwbHktVG86IHRpbW9oQHhzNGFsbC5ubAorCisgICAgIFsuLi5wYXJ0cyBkZWxldGVkLi4uXQorCisgICAgIEFib3V0IHRoZSBqdW1wZXJzOiBPbiBteSBQQzEzMCB0aGVyZSBpcyBvbmUgbW9yZSBqdW1wZXIsIGxvY2F0ZWQgbmVhciB0aGUKKyAgICAgY2FibGUtY29ubmVjdG9yIGFuZCBpdCdzIGZvciBjaGFuZ2luZyB0byBzdGFyIG9yIGJ1cyB0b3BvbG9neTsgCisgICAgIGNsb3NlZDogc3RhciAtIG9wZW46IGJ1cworICAgICBPbiB0aGUgUEM1MDAgYXJlIHNvbWUgbW9yZSBqdW1wZXItcGlucywgb25lIGJsb2NrIGxhYmVsZWQgd2l0aCBSWCxQRE4sVFhJCisgICAgIGFuZCBhbm90aGVyIHdpdGggQUxFLExBMTcsTEExOCxMQTE5IHRoZXNlIGFyZSB1bmRvY3VtZW50ZWQuLgorCisgICAgIFsuLi5tb3JlIHBhcnRzIGRlbGV0ZWQuLi5dCisKKyAgICAgLS0tIENVVCAtLS0KKworCisqKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycCAoU01DKSAqKgorUEMxMDAsIFBDMTEwLCBQQzEyMCwgUEMxMzAgKDgtYml0IGNhcmRzKQorUEM1MDAsIFBDNjAwICgxNi1iaXQgY2FyZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBtYWlubHkgZnJvbSBBdmVyeSBQZW5uYXJ1biA8YXBlbndhcnJAd29ybGR2aXNpb25zLmNhPi4gIFZhbHVlcyBkZXBpY3RlZAorICAgIGFyZSBmcm9tIEF2ZXJ5J3Mgc2V0dXAuCisgIC0gc3BlY2lhbCB0aGFua3MgdG8gVGltbyBIaWxicmluayA8dGltb2hAeHM0YWxsLm5sPiBmb3Igbm90aW5nIHRoYXQgUEMxMjAsCisgICAgMTMwLCA1MDAsIGFuZCA2MDAgYWxsIGhhdmUgdGhlIHNhbWUgc3dpdGNoZXMgYXMgQXZlcnkncyBQQzEwMC4gCisgICAgUEM1MDAvNjAwIGhhdmUgc2V2ZXJhbCBleHRyYSwgdW5kb2N1bWVudGVkIHBpbnMgdGhvdWdoLiAoPykKKyAgLSBQQzExMCBzZXR0aW5ncyB3ZXJlIHZlcmlmaWVkIGJ5IFN0ZXBoZW4gQS4gV29vZCA8c2F3QGNlYmFmLmdvdj4KKyAgLSBBbHNvLCB0aGUgSlAtIGFuZCBTLW51bWJlcnMgcHJvYmFibHkgZG9uJ3QgbWF0Y2ggeW91ciBjYXJkIGV4YWN0bHkuICBUcnkKKyAgICB0byBmaW5kIGp1bXBlcnMvc3dpdGNoZXMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2Ygc2V0dGluZ3MgLSBpdCdzCisgICAgcHJvYmFibHkgbW9yZSByZWxpYWJsZS4KKyAgCisKKyAgICAgSlA1CQkgICAgICAgW3xdICAgIDogICAgOiAgICA6ICAgIDoKKyhJUlEgU2V0dGluZykJCSAgICAgIElSUTIgIElSUTMgSVJRNCBJUlE1IElSUTcKKwkJUHV0IGV4YWN0bHkgb25lIGp1bXBlciBvbiBleGFjdGx5IG9uZSBzZXQgb2YgcGlucy4KKworCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDIgICAzICA0ICA1ICA2ICAgNyAgOCAgOSAxMAorICAgICBTMSAgICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKyhJL08gYW5kIE1lbW9yeSAgICAgICAgfCAgMSAgMSAqIDAgIDAgIDAgIDAgKiAxICAxICAwICAxICB8CisgYWRkcmVzc2VzKSAgICAgICAgICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworICAgICAgICAgICAgICAgICAgICAgICAgICB8LS18ICAgfC0tLS0tLS0tfCAgIHwtLS0tLS0tLXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGEpICAgICAgIChiKSAgICAgICAgICAgKG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFdBUk5JTkcuICBJdCdzIHZlcnkgaW1wb3J0YW50IHdoZW4gc2V0dGluZyB0aGVzZSB3aGljaCB3YXkKKyAgICAgICAgICAgICAgICB5b3UncmUgaG9sZGluZyB0aGUgY2FyZCwgYW5kIHdoaWNoIHdheSB5b3UgdGhpbmsgaXMgJzEnIQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIElmIHlvdSBzdXNwZWN0IHRoYXQgeW91ciBzZXR0aW5ncyBhcmUgbm90IGJlaW5nIG1hZGUKKwkJY29ycmVjdGx5LCB0cnkgcmV2ZXJzaW5nIHRoZSBkaXJlY3Rpb24gb3IgaW52ZXJ0aW5nIHRoZQorCQlzd2l0Y2ggcG9zaXRpb25zLgorCisJCWE6IFRoZSBmaXJzdCBkaWdpdCBvZiB0aGUgSS9PIGFkZHJlc3MuCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwCQkwCisJCQkwMQkJMQorCQkJMTAJCTIKKwkJCTExCQkzCisKKwkJYjogVGhlIHNlY29uZCBkaWdpdCBvZiB0aGUgSS9PIGFkZHJlc3MuCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwMDAJCTAKKwkJCTAwMDEJCTEKKwkJCTAwMTAJCTIKKwkJCS4uLgkJLi4uCisJCQkxMTEwCQlFCisJCQkxMTExCQlGCisKKwkJVGhlIEkvTyBhZGRyZXNzIGlzIGluIHRoZSBmb3JtIGFiMC4gIEZvciBleGFtcGxlLCBpZgorCQlhIGlzIDB4MiBhbmQgYiBpcyAweEUsIHRoZSBhZGRyZXNzIHdpbGwgYmUgMHgyRTAuCisKKwkJRE8gTk9UIFNFVCBUSElTIExFU1MgVEhBTiAweDIwMCEhISEhCisKKworCQltOiBUaGUgZmlyc3QgZGlnaXQgb2YgdGhlIG1lbW9yeSBhZGRyZXNzLgorCQkJU2V0dGluZwkJVmFsdWUKKwkJCS0tLS0tLS0JCS0tLS0tCisJCQkwMDAwCQkwCisJCQkwMDAxCQkxCisJCQkwMDEwCQkyCisJCQkuLi4JCS4uLgorCQkJMTExMAkJRQorCQkJMTExMQkJRgorCisJCVRoZSBtZW1vcnkgYWRkcmVzcyBpcyBpbiB0aGUgZm9ybSBtMDAwMC4gIEZvciBleGFtcGxlLCBpZgorCQltIGlzIEQsIHRoZSBhZGRyZXNzIHdpbGwgYmUgMHhEMDAwMC4KKworCQlETyBOT1QgU0VUIFRISVMgVE8gQzAwMDAsIEYwMDAwLCBPUiBMRVNTIFRIQU4gQTAwMDAhCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOAorICAgICBTMiAgICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cCisoU3RhdGlvbiBBZGRyZXNzKSAgICAgIHwgIDEgIDEgIDAgIDAgIDAgIDAgIDAgIDAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwMDAwMDAwCTAwCisJCQkxMDAwMDAwMAkwMQorCQkJMDEwMDAwMDAJMDIKKwkJCS4uLgorCQkJMDExMTExMTEJRkUKKwkJCTExMTExMTExCUZGCisKKwkJTm90ZSB0aGF0IHRoaXMgaXMgYmluYXJ5IHdpdGggdGhlIGRpZ2l0cyByZXZlcnNlZCEKKworCQlETyBOT1QgU0VUIFRISVMgVE8gMCBPUiAyNTUgKDB4RkYpIQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwIChTTUMpICoqCitQQzEzMEUvUEMyNzBFICg4LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKKworU1RBTkRBUkQgTUlDUk9TWVNURU1TIENPUlBPUkFUSU9OIChTTUMpIEFSQ05FVChSKS1QQzEzMEUvUEMyNzBFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9sbG93aW5nIE9yaWdpbmFsIFNNQyBNYW51YWwgCisKKyAgICAgICAgICAgICAiQ29uZmlndXJhdGlvbiBHdWlkZSBmb3IKKyAgICAgICAgICAgICBBUkNORVQoUiktUEMxMzBFL1BDMjcwCisgICAgICAgICAgICBOZXR3b3JrIENvbnRyb2xsZXIgQm9hcmRzCisgICAgICAgICAgICAgICAgUHViLiAjIDkwMC4wNDRBCisgICAgICAgICAgICAgICAgICAgSnVuZSwgMTk4OSIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorU01DIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3Jwb3JhdGlvbiAgCisKK1RoZSBQQzEzMEUgaXMgYW4gZW5oYW5jZWQgdmVyc2lvbiBvZiB0aGUgUEMxMzAgYm9hcmQsIGlzIGVxdWlwcGVkIHdpdGggYSAKK3N0YW5kYXJkIEJOQyBmZW1hbGUgY29ubmVjdG9yIGZvciBjb25uZWN0aW9uIHRvIFJHLTYyL1UgY29heCBjYWJsZS4KK1NpbmNlIHRoaXMgYm9hcmQgaXMgZGVzaWduZWQgYm90aCBmb3IgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbiBpbiBzdGFyCituZXR3b3JrcyBhbmQgZm9yIGNvbm5lY3Rpb24gdG8gYnVzIG5ldHdvcmtzLCBpdCBpcyBkb3dud2FyZGx5IGNvbXBhdGlibGUgCit3aXRoIGFsbCB0aGUgb3RoZXIgc3RhbmRhcmQgYm9hcmRzIGRlc2lnbmVkIGZvciBjb2F4IG5ldHdvcmtzICh0aGF0IGlzLAordGhlIFBDMTIwLCBQQzExMCBhbmQgUEMxMDAgc3RhciB0b3BvbG9neSBib2FyZHMgYW5kIHRoZSBQQzIyMCwgUEMyMTAgYW5kIAorUEMyMDAgYnVzIHRvcG9sb2d5IGJvYXJkcykuCisKK1RoZSBQQzI3MEUgaXMgYW4gZW5oYW5jZWQgdmVyc2lvbiBvZiB0aGUgUEMyNjAgYm9hcmQsIGlzIGVxdWlwcGVkIHdpdGggdHdvIAorbW9kdWxhciBSSjExLXR5cGUgamFja3MgZm9yIGNvbm5lY3Rpb24gdG8gdHdpc3RlZCBwYWlyIHdpcmluZy4KK0l0IGNhbiBiZSB1c2VkIGluIGEgc3RhciBvciBhIGRhaXN5LWNoYWluZWQgbmV0d29yay4KKworCisgICAgICAgICA4IDcgNiA1IDQgMyAyIDEKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8ICAgfCAgICAgICBTMSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICB8X19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICBPZmZzfEJhc2UgfEkvTyBBZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICBSQU0gQWRkciB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICBfX18gIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSMyB8X19ffAorICAgfCAgICAgICAgfCAgIFwvICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1I0IHxfX198CisgICB8ICAgICAgICB8ICBQUk9NICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiB8ICAgfCA4CisgICB8ICAgICAgICB8IFNPQ0tFVCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gfCAgIHwgNworICAgfCAgICAgICAgfF9fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHwgICB8IDYKKyAgIHwgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgZSB8ICAgfCA1CisgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIEEgfCBTIHwgNAorICAgfCAgICAgICB8b298IEVYVDIgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBkIHwgMiB8IDMKKyAgIHwgICAgICAgfG9vfCBFWFQxICB8ICAgICAgIFNNQyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgZCB8ICAgfCAyCisgICB8ICAgICAgIHxvb3wgUk9NICAgfCAgICAgIDkwQzYzICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHIgfF9fX3wgMQorICAgfCAgICAgICB8b298IElSUTcgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxvfCAgX19fX198CisgICB8ICAgICAgIHxvb3wgSVJRNSAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfG98IHwgSjEgIHwKKyAgIHwgICAgICAgfG9vfCBJUlE0ICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFNUQVIgfF9fX19ffAorICAgfCAgICAgICB8b298IElSUTMgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IEoyICB8CisgICB8ICAgICAgIHxvb3wgSVJRMiAgfF9fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgIHxfX19fX3wKKyAgIHxfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCitTTUMgOTBDNjMJQVJDTkVUIENvbnRyb2xsZXIgLyBUcmFuc2NlaXZlciAvTG9naWMKK1MxCTEtMzoJSS9PIEJhc2UgQWRkcmVzcyBTZWxlY3QKKwk0LTY6CU1lbW9yeSBCYXNlIEFkZHJlc3MgU2VsZWN0CisJNy04OglSQU0gT2Zmc2V0IFNlbGVjdAorUzIJMS04OglOb2RlIElEIFNlbGVjdAorRVhUCQlFeHRlbmRlZCBUaW1lb3V0IFNlbGVjdAorUk9NCQlST00gRW5hYmxlIFNlbGVjdAorU1RBUgkJU2VsZWN0ZWQgLSBTdGFyIFRvcG9sb2d5CShQQzEzMEUgb25seSkKKwkJRGVzZWxlY3RlZCAtIEJ1cyBUb3BvbG9neQkoUEMxMzBFIG9ubHkpCitDUjMvQ1I0CQlEaWFnbm9zdGljIExFRHMKK0oxCQlCTkMgUkc2Mi9VIENvbm5lY3RvcgkJKFBDMTMwRSBvbmx5KQorSjEJCTYtcG9zaXRpb24gVGVsZXBob25lIEphY2sJKFBDMjcwRSBvbmx5KQorSjIJCTYtcG9zaXRpb24gVGVsZXBob25lIEphY2sJKFBDMjcwRSBvbmx5KQorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmL09wZW4gbWVhbnMgIjEiLCBPbi9DbG9zZWQgbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFMyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4KK1RoZXNlIHN3aXRjaGVzIHdvcmsgaW4gYSB3YXkgc2ltaWxhciB0byB0aGUgUEMxMDAtc2VyaWVzIGNhcmRzOyBzZWUgdGhhdAorZW50cnkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGdyb3VwIFMxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKworICAgU3dpdGNoIHwgSGV4IEkvTworICAgMSAyIDMgIHwgQWRkcmVzcworICAgLS0tLS0tLXwtLS0tLS0tLQorICAgMCAwIDAgIHwgIDI2MAorICAgMCAwIDEgIHwgIDI5MAorICAgMCAxIDAgIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgfCAgMkYwCisgICAxIDAgMCAgfCAgMzAwCisgICAxIDAgMSAgfCAgMzUwCisgICAxIDEgMCAgfCAgMzgwCisgICAxIDEgMSAgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIHJlcXVpcmVzIDJLIG9mIGEgMTZLIGJsb2NrIG9mIFJBTS4gVGhlIGJhc2Ugb2YgdGhpcworMTZLIGJsb2NrIGNhbiBiZSBsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuCitTd2l0Y2hlcyA0LTYgb2Ygc3dpdGNoIGdyb3VwIFMxIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorV2l0aGluIHRoYXQgMTZLIGFkZHJlc3Mgc3BhY2UsIHRoZSBidWZmZXIgbWF5IGJlIGFzc2lnbmVkIGFueSBvbmUgb2YgZm91ciAKK3Bvc2l0aW9ucywgZGV0ZXJtaW5lZCBieSB0aGUgb2Zmc2V0LCBzd2l0Y2hlcyA3IGFuZCA4IG9mIGdyb3VwIFMxLgorCisgICBTd2l0Y2ggICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDQgNSA2ICA3IDggfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICAwIDAgMCAgMCAwIHwgIEMwMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDAgMSB8ICBDMDgwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDAgfCAgQzEwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAxIHwgIEMxODAwICB8ICBDMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAwIDEgIDAgMCB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAwIDEgfCAgQzQ4MDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAwIHwgIEM1MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMSB8ICBDNTgwMCAgfCAgQzYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwICAwIDAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMCAxIHwgIENDODAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMCB8ICBDRDAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDEgfCAgQ0Q4MDAgIHwgIENFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMSAgMCAwIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgMCAxIHwgIEQwODAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMCB8ICBEMTAwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDEgfCAgRDE4MDAgIHwgIEQyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMCAgMCAwIHwgIEQ0MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDAgMSB8ICBENDgwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDAgfCAgRDUwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAxIHwgIEQ1ODAwICB8ICBENjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgIDAgMCB8ICBEODAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAwIDEgfCAgRDg4MDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAwIHwgIEQ5MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMSB8ICBEOTgwMCAgfCAgREEwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAwICAwIDAgfCAgREMwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMCAxIHwgIERDODAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMCB8ICBERDAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDEgfCAgREQ4MDAgIHwgIERFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMSAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDAgMSB8ICBFMDgwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDAgfCAgRTEwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAxIHwgIEUxODAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgOEsgQm9vdCBQUk9NIGluc3RhbGwgdGhlIGp1bXBlciBST00uCisgICBUaGUgZGVmYXVsdCBpcyBqdW1wZXIgUk9NIG5vdCBpbnN0YWxsZWQuCisKKworU2V0dGluZyB0aGUgVGltZW91dHMgYW5kIEludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVycyBsYWJlbGVkIEVYVDEgYW5kIEVYVDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IAorcGFyYW1ldGVycy4gVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KKworVG8gc2VsZWN0IGEgaGFyZHdhcmUgaW50ZXJydXB0IGxldmVsIHNldCBvbmUgKG9ubHkgb25lISkgb2YgdGhlIGp1bXBlcnMKK0lSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTcuIFRoZSBNYW51ZmFjdHVyZXIncyBkZWZhdWx0IGlzIElSUTIuCisgCisKK0NvbmZpZ3VyaW5nIHRoZSBQQzEzMEUgZm9yIFN0YXIgb3IgQnVzIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2luZ2xlIGp1bXBlciBsYWJlbGVkIFNUQVIgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFBDMTMwRSBib2FyZCBmb3IgCitzdGFyIG9yIGJ1cyB0b3BvbG9neS4KK1doZW4gdGhlIGp1bXBlciBpcyBpbnN0YWxsZWQsIHRoZSBib2FyZCBtYXkgYmUgdXNlZCBpbiBhIHN0YXIgbmV0d29yaywgd2hlbiAKK2l0IGlzIHJlbW92ZWQsIHRoZSBib2FyZCBjYW4gYmUgdXNlZCBpbiBhIGJ1cyB0b3BvbG9neS4KKworCitEaWFnbm9zdGljIExFRHMKKy0tLS0tLS0tLS0tLS0tLQorCitUd28gZGlhZ25vc3RpYyBMRURzIGFyZSB2aXNpYmxlIG9uIHRoZSByZWFyIGJyYWNrZXQgb2YgdGhlIGJvYXJkLgorVGhlIGdyZWVuIExFRCBtb25pdG9ycyB0aGUgbmV0d29yayBhY3Rpdml0eTogdGhlIHJlZCBvbmUgc2hvd3MgdGhlCitib2FyZCBhY3Rpdml0eToKKworIEdyZWVuICB8IFN0YXR1cyAgICAgICAgICAgICAgIFJlZCAgICAgIHwgU3RhdHVzCisgLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgb24gICAgfCBub3JtYWwgYWN0aXZpdHkgICAgICBmbGFzaC9vbiB8IGRhdGEgdHJhbnNmZXIKKyAgYmxpbmsgfCByZWNvbmZpZ3VyYXRpb24gICAgICBvZmYgICAgICB8IG5vIGRhdGEgdHJhbnNmZXI7CisgIG9mZiAgIHwgZGVmZWN0aXZlIGJvYXJkIG9yICAgICAgICAgICAgfCBpbmNvcnJlY3QgbWVtb3J5IG9yCisgICAgICAgIHwgbm9kZSBJRCBpcyB6ZXJvICAgICAgICAgICAgICAgfCBJL08gYWRkcmVzcworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwIChTTUMpICoqCitQQzUwMC9QQzU1MCBMb25nYm9hcmQgKDE2LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgorCisKK1NUQU5EQVJEIE1JQ1JPU1lTVEVNUyBDT1JQT1JBVElPTiAoU01DKSBBUkNORVQtUEM1MDAvUEM1NTAgTG9uZyBCb2FyZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGU6IFRoZXJlIGlzIGFub3RoZXIgVmVyc2lvbiBvZiB0aGUgUEM1MDAgY2FsbGVkIFNob3J0IFZlcnNpb24sIHdoaWNoIAorICAgICAgaXMgZGlmZmVyZW50IGluIGhhcmQtIGFuZCBzb2Z0d2FyZSEgVGhlIG1vc3QgaW1wb3J0YW50IGRpZmZlcmVuY2VzCisgICAgICBhcmU6CisgICAgICAtIFRoZSBsb25nIGJvYXJkIGhhcyBubyBTaGFyZWQgbWVtb3J5LgorICAgICAgLSBPbiB0aGUgbG9uZyBib2FyZCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBpbnRlcnJ1cHQgaXMgZG9uZSBieSBiaW5hcnkKKyAgICAgICAgY29kZWQgc3dpdGNoLCBvbiB0aGUgc2hvcnQgYm9hcmQgZGlyZWN0bHkgYnkganVtcGVyLgorICAgICAgICAKK1tBdmVyeSdzIG5vdGU6IHBheSBzcGVjaWFsIGF0dGVudGlvbiB0byB0aGF0OiB0aGUgbG9uZyBib2FyZCBIQVMgTk8gU0hBUkVECitNRU1PUlkuICBUaGlzIG1lYW5zIHRoZSBjdXJyZW50IExpbnV4LUFSQ25ldCBkcml2ZXIgY2FuJ3QgdXNlIHRoZXNlIGNhcmRzLiAKK0kgaGF2ZSBvYnRhaW5lZCBhIFBDNTAwTG9uZ2JvYXJkIGFuZCB3aWxsIGJlIGRvaW5nIHNvbWUgZXhwZXJpbWVudHMgb24gaXQgaW4KK3RoZSBmdXR1cmUsIGJ1dCBkb24ndCBob2xkIHlvdXIgYnJlYXRoLiAgVGhhbmtzIGFnYWluIHRvIEp1ZXJnZW4gU2VpZmVydCBmb3IKK2hpcyBhZHZpY2UgYWJvdXQgdGhpcyFdCisKK1RoaXMgZGVzY3JpcHRpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGZvbGxvd2luZyBPcmlnaW5hbCBTTUMgTWFudWFsIAorCisgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24gR3VpZGUgZm9yCisgICAgICAgICAgICAgU01DIEFSQ05FVC1QQzUwMC9QQzU1MAorICAgICAgICAgU2VyaWVzIE5ldHdvcmsgQ29udHJvbGxlciBCb2FyZHMKKyAgICAgICAgICAgICBQdWIuICMgOTAwLjAzMyBSZXYuIEEKKyAgICAgICAgICAgICAgICBOb3ZlbWJlciwgMTk4OSIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorU01DIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3Jwb3JhdGlvbiAgCisKK1RoZSBQQzUwMCBpcyBlcXVpcHBlZCB3aXRoIGEgc3RhbmRhcmQgQk5DIGZlbWFsZSBjb25uZWN0b3IgZm9yIGNvbm5lY3Rpb24KK3RvIFJHLTYyL1UgY29heCBjYWJsZS4KK1RoZSBib2FyZCBpcyBkZXNpZ25lZCBib3RoIGZvciBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIGluIHN0YXIgbmV0d29ya3MKK2FuZCBmb3IgY29ubmVjdGlvbiB0byBidXMgbmV0d29ya3MuCisKK1RoZSBQQzU1MCBpcyBlcXVpcHBlZCB3aXRoIHR3byBtb2R1bGFyIFJKMTEtdHlwZSBqYWNrcyBmb3IgY29ubmVjdGlvbgordG8gdHdpc3RlZCBwYWlyIHdpcmluZy4KK0l0IGNhbiBiZSB1c2VkIGluIGEgc3RhciBvciBhIGRhaXN5LWNoYWluZWQgKEJVUykgbmV0d29yay4KKworICAgICAgIDEgCisgICAgICAgMCA5IDggNyA2IDUgNCAzIDIgMSAgICAgNiA1IDQgMyAyIDEKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgPCB8ICAgICAgICAgU1cxICAgICAgICAgfCB8ICAgICBTVzIgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPiB8X19fX19fX19fX19fX19fX19fX19ffCB8X19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPCAgIElSUSAgICB8SS9PIEFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSNCB8X19ffAorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSMyB8X19ffAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTiB8ICAgfCA4CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvIHwgICB8IDcKKyAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfCBTIHwgNgorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSB8IFcgfCA1CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHwgMyB8IDQKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfCAgIHwgMworICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8ICAgfCAyCisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIHxfX198IDEKKyAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfCAgICBfX19fX3wKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfCAgIHwgSjEgIHwKKyAgID4gIDMgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpQNiAgIHxfX19fX3wKKyAgIDwgfG98b3wgSlAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSjIgIHwKKyAgID4gfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX3wKKyAgIDwgIDQgMl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgID4gICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIDxfX19ffCAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCitTVzEJMS02OglJL08gQmFzZSBBZGRyZXNzIFNlbGVjdAorCTctMTA6CUludGVycnVwdCBTZWxlY3QKK1NXMgkxLTY6CVJlc2VydmVkIGZvciBGdXR1cmUgVXNlCitTVzMJMS04OglOb2RlIElEIFNlbGVjdAorSlAyCTEtNDoJRXh0ZW5kZWQgVGltZW91dCBTZWxlY3QKK0pQNgkJU2VsZWN0ZWQgLSBTdGFyIFRvcG9sb2d5CShQQzUwMCBvbmx5KQorCQlEZXNlbGVjdGVkIC0gQnVzIFRvcG9sb2d5CShQQzUwMCBvbmx5KQorQ1IzCUdyZWVuCU1vbml0b3JzIE5ldHdvcmsgQWN0aXZpdHkKK0NSNAlSZWQJTW9uaXRvcnMgQm9hcmQgQWN0aXZpdHkKK0oxCQlCTkMgUkc2Mi9VIENvbm5lY3RvcgkJKFBDNTAwIG9ubHkpCitKMQkJNi1wb3NpdGlvbiBUZWxlcGhvbmUgSmFjawkoUEM1NTAgb25seSkKK0oyCQk2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrCShQQzU1MCBvbmx5KQorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmL09wZW4gbWVhbnMgIjEiLCBPbi9DbG9zZWQgbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMyBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZQorYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3QgYmUgCitkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDEgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICAgU3dpdGNoIHwgVmFsdWUKKyAgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgIDEgICAgfCAgIDEKKyAgICAgIDIgICAgfCAgIDIKKyAgICAgIDMgICAgfCAgIDQKKyAgICAgIDQgICAgfCAgIDgKKyAgICAgIDUgICAgfCAgMTYKKyAgICAgIDYgICAgfCAgMzIKKyAgICAgIDcgICAgfCAgNjQKKyAgICAgIDggICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICA4IDcgNiA1IDQgMyAyIDEgfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1IAorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHNpeCBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIDMyIHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKyAgIFN3aXRjaCAgICAgICB8IEhleCBJL08KKyAgIDYgNSAgNCAzIDIgMSB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIDAgMSAgMCAwIDAgMCB8ICAyMDAKKyAgIDAgMSAgMCAwIDAgMSB8ICAyMTAKKyAgIDAgMSAgMCAwIDEgMCB8ICAyMjAKKyAgIDAgMSAgMCAwIDEgMSB8ICAyMzAKKyAgIDAgMSAgMCAxIDAgMCB8ICAyNDAKKyAgIDAgMSAgMCAxIDAgMSB8ICAyNTAKKyAgIDAgMSAgMCAxIDEgMCB8ICAyNjAKKyAgIDAgMSAgMCAxIDEgMSB8ICAyNzAKKyAgIDAgMSAgMSAwIDAgMCB8ICAyODAKKyAgIDAgMSAgMSAwIDAgMSB8ICAyOTAKKyAgIDAgMSAgMSAwIDEgMCB8ICAyQTAKKyAgIDAgMSAgMSAwIDEgMSB8ICAyQjAKKyAgIDAgMSAgMSAxIDAgMCB8ICAyQzAKKyAgIDAgMSAgMSAxIDAgMSB8ICAyRDAKKyAgIDAgMSAgMSAxIDEgMCB8ICAyRTAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgIDEgMSAxIDEgfCAgMkYwCisgICAxIDEgIDAgMCAwIDAgfCAgMzAwCisgICAxIDEgIDAgMCAwIDEgfCAgMzEwCisgICAxIDEgIDAgMCAxIDAgfCAgMzIwCisgICAxIDEgIDAgMCAxIDEgfCAgMzMwCisgICAxIDEgIDAgMSAwIDAgfCAgMzQwCisgICAxIDEgIDAgMSAwIDEgfCAgMzUwCisgICAxIDEgIDAgMSAxIDAgfCAgMzYwCisgICAxIDEgIDAgMSAxIDEgfCAgMzcwCisgICAxIDEgIDEgMCAwIDAgfCAgMzgwCisgICAxIDEgIDEgMCAwIDEgfCAgMzkwCisgICAxIDEgIDEgMCAxIDAgfCAgM0EwCisgICAxIDEgIDEgMCAxIDEgfCAgM0IwCisgICAxIDEgIDEgMSAwIDAgfCAgM0MwCisgICAxIDEgIDEgMSAwIDEgfCAgM0QwCisgICAxIDEgIDEgMSAxIDAgfCAgM0UwCisgICAxIDEgIDEgMSAxIDEgfCAgM0YwCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3dpdGNoZXMgc2V2ZW4gdGhyb3VnaCB0ZW4gb2Ygc3dpdGNoIGdyb3VwIFNXMSBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIAoraW50ZXJydXB0IGxldmVsLiBUaGUgaW50ZXJydXB0IGxldmVsIGlzIGJpbmFyeSBjb2RlZCwgc28gc2VsZWN0aW9ucyAKK2Zyb20gMCB0byAxNSB3b3VsZCBiZSBwb3NzaWJsZSwgYnV0IG9ubHkgdGhlIGZvbGxvd2luZyBlaWdodCB2YWx1ZXMgd2lsbAorYmUgc3VwcG9ydGVkOiAzLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDEyLgorCisgICBTd2l0Y2ggICB8IElSUQorICAgMTAgOSA4IDcgfCAKKyAgIC0tLS0tLS0tLXwtLS0tLS0tLSAKKyAgICAwIDAgMSAxIHwgIDMKKyAgICAwIDEgMCAwIHwgIDQKKyAgICAwIDEgMCAxIHwgIDUKKyAgICAwIDEgMSAxIHwgIDcKKyAgICAxIDAgMCAxIHwgIDkgKD0yKSAoZGVmYXVsdCkKKyAgICAxIDAgMSAwIHwgMTAKKyAgICAxIDAgMSAxIHwgMTEKKyAgICAxIDEgMCAwIHwgMTIKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0d28ganVtcGVycyBKUDIgKDEtNCkgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IHBhcmFtZXRlcnMuIAorVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KK1JlZmVyIHRvIHRoZSBDT005MDI2IERhdGEgU2hlZXQgZm9yIGFsdGVybmF0ZSBjb25maWd1cmF0aW9ucy4KKworCitDb25maWd1cmluZyB0aGUgUEM1MDAgZm9yIFN0YXIgb3IgQnVzIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaW5nbGUganVtcGVyIGxhYmVsZWQgSlA2IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQQzUwMCBib2FyZCBmb3IgCitzdGFyIG9yIGJ1cyB0b3BvbG9neS4KK1doZW4gdGhlIGp1bXBlciBpcyBpbnN0YWxsZWQsIHRoZSBib2FyZCBtYXkgYmUgdXNlZCBpbiBhIHN0YXIgbmV0d29yaywgd2hlbiAKK2l0IGlzIHJlbW92ZWQsIHRoZSBib2FyZCBjYW4gYmUgdXNlZCBpbiBhIGJ1cyB0b3BvbG9neS4KKworCitEaWFnbm9zdGljIExFRHMKKy0tLS0tLS0tLS0tLS0tLQorCitUd28gZGlhZ25vc3RpYyBMRURzIGFyZSB2aXNpYmxlIG9uIHRoZSByZWFyIGJyYWNrZXQgb2YgdGhlIGJvYXJkLgorVGhlIGdyZWVuIExFRCBtb25pdG9ycyB0aGUgbmV0d29yayBhY3Rpdml0eTogdGhlIHJlZCBvbmUgc2hvd3MgdGhlCitib2FyZCBhY3Rpdml0eToKKworIEdyZWVuICB8IFN0YXR1cyAgICAgICAgICAgICAgIFJlZCAgICAgIHwgU3RhdHVzCisgLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgb24gICAgfCBub3JtYWwgYWN0aXZpdHkgICAgICBmbGFzaC9vbiB8IGRhdGEgdHJhbnNmZXIKKyAgYmxpbmsgfCByZWNvbmZpZ3VyYXRpb24gICAgICBvZmYgICAgICB8IG5vIGRhdGEgdHJhbnNmZXI7CisgIG9mZiAgIHwgZGVmZWN0aXZlIGJvYXJkIG9yICAgICAgICAgICAgfCBpbmNvcnJlY3QgbWVtb3J5IG9yCisgICAgICAgIHwgbm9kZSBJRCBpcyB6ZXJvICAgICAgICAgICAgICAgfCBJL08gYWRkcmVzcworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFNNQyAqKgorUEM3MTAgKDgtYml0IGNhcmQpCistLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEouUy4gdmFuIE9vc3RlbiA8anZvb3N0ZW5AY29tcGlsZXIudGRjbmV0Lm5sPgorICAKK05vdGU6IHRoaXMgZGF0YSBpcyBnYXRoZXJlZCBieSBleHBlcmltZW50aW5nIGFuZCBsb29raW5nIGF0IGluZm8gb2Ygb3RoZXIKK2NhcmRzLiBIb3dldmVyLCBJJ20gc3VyZSBJIGdvdCA5OSUgb2YgdGhlIHNldHRpbmdzIHJpZ2h0LgorCitUaGUgU01DNzEwIGNhcmQgcmVzZW1ibGVzIHRoZSBQQzI3MCBjYXJkLCBidXQgaXMgbXVjaCBtb3JlIGJhc2ljIChpLmUuIG5vCitMRURzLCBSSjExIGphY2tzLCBldGMuKSBhbmQgOCBiaXQuIEhlcmUncyBhIGxpdHRsZSBkcmF3aW5nOgorCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgCisgICB8ICstLS0tLS0tLS0rICArLS0tLS0tLS0tKyAgICAgICAgICAgICAgfF9fX18KKyAgIHwgfCAgIFMyICAgIHwgIHwgICBTMSAgICB8ICAgICAgICAgICAgICB8CisgICB8ICstLS0tLS0tLS0rICArLS0tLS0tLS0tKyAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICs9PT0rICAgIF9fICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICB8IFIgfCAgIHwgIHwgWC10YWwgICAgICAgICAgICAgICAgICMjI19fXworICAgfCAgfCBPIHwgICB8X198ICAgICAgICAgICAgICAgICAgICAgICMjIyNfXyd8CisgICB8ICB8IE0gfCAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICMjIworICAgfCAgKz09PSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gSlAxICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorICAgfCAgIC4uICAgICAgIHwgYmlnIGNoaXAgfCAgICAgICAgICAgICAgIHwgICAKKyAgIHwgICAuLiAgICAgICB8ICA5MEM2MyAgIHwgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgfCAgIC4uICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKKyAgICAtLS0tLS0tICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0KKyAgICAgICAgICAgfHx8fHx8fHx8fHx8fHx8fHx8fHx8CisKK1RoZSByb3cgb2YganVtcGVycyBhdCBKUDEgYWN0dWFsbHkgY29uc2lzdHMgb2YgOCBqdW1wZXJzLCAoc29tZXRpbWVzCitsYWJlbGxlZCkgdGhlIHNhbWUgYXMgb24gdGhlIFBDMjcwLCBmcm9tIHRvcCB0byBib3R0b206IEVYVDIsIEVYVDEsIFJPTSwKK0lSUTcsIElSUTUsIElSUTQsIElSUTMsIElSUTIgKGdlZSwgd29uZGVyIHdoYXQgdGhleSB3b3VsZCBkbz8gOi0pICkKKworUzEgYW5kIFMyIHBlcmZvcm0gdGhlIHNhbWUgZnVuY3Rpb24gYXMgb24gdGhlIFBDMjcwLCBvbmx5IHRoZWlyIG51bWJlcnMKK2FyZSBzd2FwcGVkIChTMSBpcyB0aGUgbm9kZWFkZHJlc3MsIFMyIHNldHMgSU8tIGFuZCBSQU0tYWRkcmVzcykuCisKK0kga25vdyBpdCB3b3JrcyB3aGVuIGNvbm5lY3RlZCB0byBhIFBDMTEwIHR5cGUgQVJDbmV0IGJvYXJkLgorCisJCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBQb3NzaWJseSBTTUMgKioKK0xDUy04ODMwKC1UKSAoOCBhbmQgMTYtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBNYXRoaWFzIEthdHplciA8bWthdHplckBIUlouVW5pLUJpZWxlZmVsZC5ERT4KKyAgLSBNYXJlayBNaWNoYWxraWV3aWN6IDxtYXJla21AaTE3bGludXhiLmlzdHMucHdyLndyb2MucGw+IHNheXMgdGhlCisgICAgTENTLTg4MzAgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gTENTLTg4MzAtVC4gIFRoZXNlIGFyZSA4IGJpdCwgQlVTCisgICAgb25seSAodGhlIEpQMCBqdW1wZXIgaXMgaGFyZHdpcmVkKSwgYW5kIEJOQyBvbmx5LgorCQorVGhpcyBpcyBhIExDUy04ODMwLVQgbWFkZSBieSBTTUMsIEkgdGhpbmsgKCdTTUMnIG9ubHkgYXBwZWFycyBvbiBvbmUgUExDQywKK25vd2hlcmUgZWxzZSwgbm90IGV2ZW4gb24gdGhlIGZldyBYZXJveGVkIHNoZWV0cyBmcm9tIHRoZSBtYW51YWwpLgorCitTTUMgQVJDbmV0IEJvYXJkIFR5cGUgTENTLTg4MzAtVAorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgSlAzIDg4ICA4IEpQMiAgICAgICAgIHwKKyAgfCAgICAgICAjIyMjIyAgICAgIHwgXCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAjIyMjIyAgICBFVDEgRVQyICAgICAgICAgICMjI3wKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggICMjI3wKKyAgfCAgVTMgICBTVyAxICAgICAgICAgICAgICAgICAgSlAwICMjI3wgIFBob25lIEphY2tzCisgIHwgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyN8CisgIHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgfCAgfCAgIFNXMiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgfCAgfCAgIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgIC0tICAgIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICMjIyMgIEJOQyBDb25uZWN0b3IgCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMKKyAgfCAgIDg4ODg4OCBKUDEgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgIDIzNDU2NyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLQorICAgICB8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHwKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworU1cxOiBESVAtU3dpdGNoZXMgZm9yIFN0YXRpb24gQWRkcmVzcworU1cyOiBESVAtU3dpdGNoZXMgZm9yIE1lbW9yeSBCYXNlIGFuZCBJL08gQmFzZSBhZGRyZXNzZXMKKworSlAwOiBJZiBjbG9zZWQsIGludGVybmFsIHRlcm1pbmF0aW9uIG9uIChkZWZhdWx0IG9wZW4pCitKUDE6IElSUSBKdW1wZXJzCitKUDI6IEJvb3QtUk9NIGVuYWJsZWQgaWYgY2xvc2VkCitKUDM6IEp1bXBlcnMgZm9yIHJlc3BvbnNlIHRpbWVvdXQKKyAKK1UzOiBCb290LVJPTSBTb2NrZXQgICAgICAgICAgCisKKworRVQxIEVUMiAgICAgUmVzcG9uc2UgVGltZSAgICAgSWRsZSBUaW1lICAgIFJlY29uZmlndXJhdGlvbiBUaW1lCisKKyAgICAgICAgICAgICAgIDc4ICAgICAgICAgICAgICAgIDg2ICAgICAgICAgICAgICAgODQwCisgWCAgICAgICAgICAgIDI4NSAgICAgICAgICAgICAgIDMxNiAgICAgICAgICAgICAgMTY4MAorICAgICBYICAgICAgICA1NjMgICAgICAgICAgICAgICA2MjQgICAgICAgICAgICAgIDE2ODAKKyBYICAgWCAgICAgICAxMTMwICAgICAgICAgICAgICAxMjM3ICAgICAgICAgICAgICAxNjgwCisKKyhYIG1lYW5zIGNsb3NlZCBqdW1wZXIpCisKKyhESVAtU3dpdGNoIGRvd253YXJkcyBtZWFucyAiMCIpCisKK1RoZSBzdGF0aW9uIGFkZHJlc3MgaXMgYmluYXJ5LWNvZGVkIHdpdGggU1cxLgorCitUaGUgSS9PIGJhc2UgYWRkcmVzcyBpcyBjb2RlZCB3aXRoIERJUC1Td2l0Y2hlcyA2LDcgYW5kIDggb2YgU1cyOgorCitTd2l0Y2hlcyAgICAgICAgQmFzZQorNjc4ICAgICAgICAgICAgIEFkZHJlc3MKKzAwMAkJMjYwLTI2ZgorMTAwCQkyOTAtMjlmCiswMTAJCTJlMC0yZWYKKzExMAkJMmYwLTJmZgorMDAxCQkzMDAtMzBmCisxMDEJCTM1MC0zNWYKKzAxMQkJMzgwLTM4ZgorMTExIAkJM2UwLTNlZgorCisKK0RJUCBTd2l0Y2hlcyAxLTUgb2YgU1cyIGVuY29kZSB0aGUgUkFNIGFuZCBST00gQWRkcmVzcyBSYW5nZToKKworU3dpdGNoZXMgICAgICAgIFJBTSAgICAgICAgICAgUk9NCisxMjM0NSAgICAgICAgICAgQWRkcmVzcyBSYW5nZSAgQWRkcmVzcyBSYW5nZQorMDAwMDAJCUM6MDAwMC1DOjA3ZmYJQzoyMDAwLUM6M2ZmZgorMTAwMDAJCUM6MDgwMC1DOjBmZmYKKzAxMDAwCQlDOjEwMDAtQzoxN2ZmCisxMTAwMAkJQzoxODAwLUM6MWZmZgorMDAxMDAJCUM6NDAwMC1DOjQ3ZmYJQzo2MDAwLUM6N2ZmZgorMTAxMDAJCUM6NDgwMC1DOjRmZmYKKzAxMTAwCQlDOjUwMDAtQzo1N2ZmIAorMTExMDAJCUM6NTgwMC1DOjVmZmYKKzAwMDEwCQlDOkMwMDAtQzpDN2ZmCUM6RTAwMC1DOmZmZmYKKzEwMDEwCQlDOkM4MDAtQzpDZmZmCiswMTAxMAkJQzpEMDAwLUM6RDdmZgorMTEwMTAJCUM6RDgwMC1DOkRmZmYKKzAwMTEwCQlEOjAwMDAtRDowN2ZmCUQ6MjAwMC1EOjNmZmYKKzEwMTEwCQlEOjA4MDAtRDowZmZmCiswMTExMAkJRDoxMDAwLUQ6MTdmZgorMTExMTAJCUQ6MTgwMC1EOjFmZmYKKzAwMDAxCQlEOjQwMDAtRDo0N2ZmCUQ6NjAwMC1EOjdmZmYKKzEwMDAxCQlEOjQ4MDAtRDo0ZmZmCiswMTAwMQkJRDo1MDAwLUQ6NTdmZgorMTEwMDEJCUQ6NTgwMC1EOjVmZmYKKzAwMTAxCQlEOjgwMDAtRDo4N2ZmCUQ6QTAwMC1EOmJmZmYKKzEwMTAxCQlEOjg4MDAtRDo4ZmZmCiswMTEwMQkJRDo5MDAwLUQ6OTdmZgorMTExMDEJCUQ6OTgwMC1EOjlmZmYgCiswMDAxMQkJRDpDMDAwLUQ6YzdmZglEOkUwMDAtRDpmZmZmCisxMDAxMQkJRDpDODAwLUQ6Y2ZmZgorMDEwMTEJCUQ6RDAwMC1EOmQ3ZmYKKzExMDExCQlEOkQ4MDAtRDpkZmZmCiswMDExMQkJRTowMDAwLUU6MDdmZglFOjIwMDAtRTozZmZmCisxMDExMQkJRTowODAwLUU6MGZmZgorMDExMTEJCUU6MTAwMC1FOjE3ZmYKKzExMTExCQlFOjE4MDAtRToxZmZmCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogUHVyZURhdGEgQ29ycCAqKgorUERJNTA3ICg4LWJpdCBjYXJkKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIE1hcmsgUmVqaG9uIDxtZHJlamhvbkBtYWdpLmNvbT4gKHNsaWdodCBtb2RpZmljYXRpb25zIGJ5IEF2ZXJ5KQorICAtIEF2ZXJ5J3Mgbm90ZTogSSB0aGluayBQREk1MDggY2FyZHMgKGJ1dCBkZWZpbml0ZWx5IE5PVCBQREk1MDhQbHVzIGNhcmRzKQorICAgIGFyZSBtb3N0bHkgdGhlIHNhbWUgYXMgdGhpcy4gIFBESTUwOFBsdXMgY2FyZHMgYXBwZWFyIHRvIGJlIG1haW5seQorICAgIHNvZnR3YXJlLWNvbmZpZ3VyZWQuCisKK0p1bXBlcnM6CisJVGhlcmUgaXMgYSBqdW1wZXIgYXJyYXkgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCwgbmVhciB0aGUgZWRnZQorICAgICAgICBjb25uZWN0b3IuICBUaGlzIGFycmF5IGlzIGxhYmVsbGVkIEoxLiAgVGhleSBjb250cm9sIHRoZSBJUlFzIGFuZAorICAgICAgICBzb21ldGhpbmcgZWxzZS4gIFB1dCBvbmx5IG9uZSBqdW1wZXIgb24gdGhlIElSUSBwaW5zLgorCisJRVRTMSwgRVRTMiBhcmUgZm9yIHRpbWluZyBvbiB2ZXJ5IGxvbmcgZGlzdGFuY2UgbmV0d29ya3MuICBTZWUgdGhlCisJbW9yZSBnZW5lcmFsIGluZm9ybWF0aW9uIG5lYXIgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCisKKwlUaGVyZSBpcyBhIEoyIGp1bXBlciBvbiB0d28gcGlucy4gIEEganVtcGVyIHNob3VsZCBiZSBwdXQgb24gdGhlbSwKKyAgICAgICAgc2luY2UgaXQgd2FzIGFscmVhZHkgdGhlcmUgd2hlbiBJIGdvdCB0aGUgY2FyZC4gIEkgZG9uJ3Qga25vdyB3aGF0CisgICAgICAgIHRoaXMganVtcGVyIGlzIGZvciB0aG91Z2guCisKKwlUaGVyZSBpcyBhIHR3by1qdW1wZXIgYXJyYXkgZm9yIEozLiAgSSBkb24ndCBrbm93IHdoYXQgaXQgaXMgZm9yLAorICAgICAgICBidXQgdGhlcmUgd2VyZSBhbHJlYWR5IHR3byBqdW1wZXJzIG9uIGl0IHdoZW4gSSBnb3QgdGhlIGNhcmQuICBJdCdzCisgICAgICAgIGEgc2l4IHBpbiBncmlkIGluIGEgdHdvLWJ5LXRocmVlIGZhc2hpb24uICBUaGUganVtcGVycyB3ZXJlCisgICAgICAgIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKKworCSAgIC4tLS0tLS0tLgorCSBvIHwgbyAgIG8gfAorCSAgIDotLS0tLS0tOiAgICAtLS0tLS0+IEFjY2Vzc2libGUgZW5kIG9mIGNhcmQgd2l0aCBjb25uZWN0b3JzCisJIG8gfCBvICAgbyB8ICAgICAgICAgICAgIGluIHRoaXMgZGlyZWN0aW9uIC0tLS0tLS0+CisJICAgYC0tLS0tLS0nCisKK0NhcmwgZGUgQmlsbHkgPENBUkxAY2FyYWluZm8uY29tPiBleHBsYWlucyBKMyBhbmQgSjQ6CisKKwlKMyBEaWFncmFtOgorCisgICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgbyB8IG8gICBvIHwKKyAgICAgICAgICAgOi0tLS0tLS06ICAgIFRXSVNUIFRlY2hub2xvZ3kKKyAgICAgICAgIG8gfCBvICAgbyB8CisgICAgICAgICAgIGAtLS0tLS0tJworICAgICAgICAgICAuLS0tLS0tLS4KKyAgICAgICAgICAgfCBvICAgbyB8IG8KKyAgICAgICAgICAgOi0tLS0tLS06ICAgIENPQVggVGVjaG5vbG9neQorICAgICAgICAgICB8IG8gICBvIHwgbworICAgICAgICAgICBgLS0tLS0tLScKKworICAtIElmIHVzaW5nIGNvYXggY2FibGUgaW4gYSBidXMgdG9wb2xvZ3kgdGhlIEo0IGp1bXBlciBtdXN0IGJlIHJlbW92ZWQ7CisgICAgcGxhY2UgaXQgb24gb25lIHBpbi4KKworICAtIElmIHVzaW5nIGJ1cyB0b3BvbG9neSB3aXRoIHR3aXN0ZWQgcGFpciB3aXJpbmcgbW92ZSB0aGUgSjMgCisgICAganVtcGVycyBzbyB0aGV5IGNvbm5lY3QgdGhlIG1pZGRsZSBwaW4gYW5kIHRoZSBwaW5zIGNsb3Nlc3QgdG8gdGhlIFJKMTEKKyAgICBDb25uZWN0b3JzLiAgQWxzbyB0aGUgSjQganVtcGVyIG11c3QgYmUgcmVtb3ZlZDsgcGxhY2UgaXQgb24gb25lIHBpbiBvZgorICAgIEo0IGp1bXBlciBmb3Igc3RvcmFnZS4KKworICAtIElmIHVzaW5nICBzdGFyIHRvcG9sb2d5IHdpdGggdHdpc3RlZCBwYWlyIHdpcmluZyBtb3ZlIHRoZSBKMyAKKyAgICBqdW1wZXJzIHNvIHRoZXkgY29ubmVjdCB0aGUgbWlkZGxlIHBpbiBhbmQgdGhlIHBpbnMgY2xvc2VzdCB0byB0aGUgUkoxMQorICAgIGNvbm5lY3RvcnMuCisKKworRElQIFN3aXRjaGVzOgorCisJVGhlIERJUCBzd2l0Y2hlcyBhY2Nlc3NpYmxlIG9uIHRoZSBhY2Nlc3NpYmxlIGVuZCBvZiB0aGUgY2FyZCB3aGlsZQorICAgICAgICBpdCBpcyBpbnN0YWxsZWQsIGlzIHVzZWQgdG8gc2V0IHRoZSBBUkNuZXQgYWRkcmVzcy4gIFRoZXJlIGFyZSA4CisgICAgICAgIHN3aXRjaGVzLiAgVXNlIGFuIGFkZHJlc3MgZnJvbSAxIHRvIDI1NC4KKworCVN3aXRjaCBOby4KKwkxMjM0NTY3OAlBUkNuZXQgYWRkcmVzcworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMDAwMDAwMDAJRkYgIAkoRG9uJ3QgdXNlIHRoaXMhKQorCTAwMDAwMDAxCUZFCisJMDAwMDAwMTAJRkQKKwkuLi4uCisJMTExMTExMDEJMgkKKwkxMTExMTExMAkxCisJMTExMTExMTEJMAkoRG9uJ3QgdXNlIHRoaXMhKQorCisJVGhlcmUgaXMgYW5vdGhlciBhcnJheSBvZiBlaWdodCBESVAgc3dpdGNoZXMgYXQgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgY2FyZC4gIFRoZXJlIGFyZSBmaXZlIGxhYmVsbGVkIE1TMC1NUzQgd2hpY2ggc2VlbSB0byBjb250cm9sIHRoZQorICAgICAgICBtZW1vcnkgYWRkcmVzcywgYW5kIGFub3RoZXIgdGhyZWUgbGFiZWxsZWQgSU8wLUlPMiB3aGljaCBzZWVtIHRvCisgICAgICAgIGNvbnRyb2wgdGhlIGJhc2UgSS9PIGFkZHJlc3Mgb2YgdGhlIGNhcmQuCisKKwlUaGlzIHdhcyBkaWZmaWN1bHQgdG8gdGVzdCBieSB0cmlhbCBhbmQgZXJyb3IsIGFuZCB0aGUgSS9PIGFkZHJlc3NlcworICAgICAgICBhcmUgaW4gYSB3ZWlyZCBvcmRlci4gIFRoaXMgd2FzIHRlc3RlZCBieSBzZXR0aW5nIHRoZSBESVAgc3dpdGNoZXMsCisgICAgICAgIHJlYm9vdGluZyB0aGUgY29tcHV0ZXIsIGFuZCBhdHRlbXB0aW5nIHRvIGxvYWQgQVJDRVRIRVIgYXQgdmFyaW91cworICAgICAgICBhZGRyZXNzZXMgKG1vc3RseSBiZXR3ZWVuIDB4MjAwIGFuZCAweDQwMCkuICBUaGUgYWRkcmVzcyB0aGF0IGNhdXNlZAorICAgICAgICB0aGUgcmVkIHRyYW5zbWl0IExFRCB0byBibGluaywgaXMgdGhlIG9uZSB0aGF0IEkgdGhvdWdodCB3b3Jrcy4KKworCUFsc28sIHRoZSBhZGRyZXNzIDB4M0QwIHNlZW0gdG8gaGF2ZSBhIHNwZWNpYWwgbWVhbmluZywgc2luY2UgdGhlCisgICAgICAgIEFSQ0VUSEVSIHBhY2tldCBkcml2ZXIgbG9hZGVkIGZpbmUsIGJ1dCB3aXRob3V0IHRoZSByZWQgTEVECisgICAgICAgIGJsaW5raW5nLiAgSSBkb24ndCBrbm93IHdoYXQgMHgzRDAgaXMgZm9yIHRob3VnaC4gIEkgcmVjb21tZW5kIHVzaW5nCisgICAgICAgIGFuIGFkZHJlc3Mgb2YgMHgzMDAgc2luY2UgV2luZG93cyBtYXkgbm90IGxpa2UgYWRkcmVzc2VzIGJlbG93CisgICAgICAgIDB4MzAwLgorCisJSU8gU3dpdGNoIE5vLgorCTIxMCAgICAgICAgICAgICBJL08gYWRkcmVzcworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkxMTEgICAgICAgICAgICAgMHgyNjAKKwkxMTAgICAgICAgICAgICAgMHgyOTAKKwkxMDEgICAgICAgICAgICAgMHgyRTAKKwkxMDAgICAgICAgICAgICAgMHgyRjAKKwkwMTEgICAgICAgICAgICAgMHgzMDAKKwkwMTAgICAgICAgICAgICAgMHgzNTAKKwkwMDEgICAgICAgICAgICAgMHgzODAKKwkwMDAgICAgICAgICAgICAgMHgzRTAKKworCVRoZSBtZW1vcnkgc3dpdGNoZXMgc2V0IGEgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZSBvZiAweDEwMDAgYnl0ZXMKKyAgICAgICAgKDB4MTAwIHNlZ21lbnQgdW5pdHMsIG9yIDRrKS4gIEZvciBleGFtcGxlIGlmIEkgc2V0IGFuIGFkZHJlc3Mgb2YKKyAgICAgICAgMHhEMDAwLCBpdCB3aWxsIHVzZSB1cCBhZGRyZXNzZXMgMHhEMDAwIHRvIDB4RDEwMC4KKworCVRoZSBtZW1vcnkgc3dpdGNoZXMgd2VyZSB0ZXN0ZWQgYnkgYm9vdGluZyB1c2luZyBRRU1NMzg2IHN0ZWFsdGgsCisgICAgICAgIGFuZCB1c2luZyBMT0FESEkgdG8gc2VlIHdoYXQgYWRkcmVzcyBhdXRvbWF0aWNhbGx5IGJlY2FtZSBleGNsdWRlZAorICAgICAgICBmcm9tIHRoZSB1cHBlciBtZW1vcnkgcmVnaW9ucywgYW5kIHRoZW4gYXR0ZW1wdGluZyB0byBsb2FkIEFSQ0VUSEVSCisgICAgICAgIHVzaW5nIHRoZXNlIGFkZHJlc3Nlcy4KKworCUkgcmVjb21tZW5kIHVzaW5nIGFuIEFSQ25ldCBtZW1vcnkgYWRkcmVzcyBvZiAweEQwMDAsIGFuZCBwdXR0aW5nCisgICAgICAgIHRoZSBFTVMgcGFnZSBmcmFtZSBhdCAweEMwMDAgd2hpbGUgdXNpbmcgUUVNTSBzdGVhbHRoIG1vZGUuICBUaGF0CisgICAgICAgIHdheSwgeW91IGdldCBjb250aWd1b3VzIGhpZ2ggbWVtb3J5IGZyb20gMHhEMTAwIGFsbW9zdCBhbGwgdGhlIHdheQorICAgICAgICB0aGUgZW5kIG9mIHRoZSBtZWdhYnl0ZS4KKworCU1lbW9yeSBTd2l0Y2ggMCAoTVMwKSBkaWRuJ3Qgc2VlbSB0byB3b3JrIHByb3Blcmx5IHdoZW4gc2V0IHRvIE9GRgorICAgICAgICBvbiBteSBjYXJkLiAgSXQgY291bGQgYmUgbWFsZnVuY3Rpb25pbmcgb24gbXkgY2FyZC4gIEV4cGVyaW1lbnQgd2l0aAorICAgICAgICBpdCBPTiBmaXJzdCwgYW5kIGlmIGl0IGRvZXNuJ3Qgd29yaywgc2V0IGl0IHRvIE9GRi4gIChJdCBtYXkgYmUgYQorICAgICAgICBtb2RpZmllciBmb3IgdGhlIDB4MjAwIGJpdD8pCisKKwlNUyBTd2l0Y2ggTm8uCisJNDMyMTAgICAgICAgICAgIE1lbW9yeSBhZGRyZXNzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkwMDAwMSAgICAgICAgICAgMHhFMTAwICAoZ3Vlc3NlZCAtIHdhcyBub3QgZGV0ZWN0ZWQgYnkgUUVNTSkKKwkwMDAxMSAgICAgICAgICAgMHhFMDAwICAoZ3Vlc3NlZCAtIHdhcyBub3QgZGV0ZWN0ZWQgYnkgUUVNTSkKKwkwMDEwMSAgICAgICAgICAgMHhERDAwCisJMDAxMTEgICAgICAgICAgIDB4REMwMAorCTAxMDAxICAgICAgICAgICAweEQ5MDAKKwkwMTAxMSAgICAgICAgICAgMHhEODAwCisJMDExMDEgICAgICAgICAgIDB4RDUwMAorCTAxMTExICAgICAgICAgICAweEQ0MDAKKwkxMDAwMSAgICAgICAgICAgMHhEMTAwCisJMTAwMTEgICAgICAgICAgIDB4RDAwMAorCTEwMTAxICAgICAgICAgICAweENEMDAKKwkxMDExMSAgICAgICAgICAgMHhDQzAwCisJMTEwMDEgICAgICAgICAgIDB4QzkwMCAoZ3Vlc3NlZCAtIGNyYXNoZXMgdGVzdGVkIHN5c3RlbSkKKwkxMTAxMSAgICAgICAgICAgMHhDODAwIChndWVzc2VkIC0gY3Jhc2hlcyB0ZXN0ZWQgc3lzdGVtKQorCTExMTAxICAgICAgICAgICAweEM1MDAgKGd1ZXNzZWQgLSBjcmFzaGVzIHRlc3RlZCBzeXN0ZW0pCisJMTExMTEgICAgICAgICAgIDB4QzQwMCAoZ3Vlc3NlZCAtIGNyYXNoZXMgdGVzdGVkIHN5c3RlbSkKKwkKKwkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIENOZXQgVGVjaG5vbG9neSBJbmMuICoqCisxMjAgU2VyaWVzICg4LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKKworQ05FVCBURUNITk9MT0dZIElOQy4gKENOZXQpIEFSQ05FVCAxMjBBIFNFUklFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgT3JpZ2luYWwgQ05ldCBNYW51YWwgCisKKyAgICAgICAgICAgICAgIkFSQ05FVAorICAgICAgICAgICAgVVNFUidTIE1BTlVBTCAKKyAgICAgICAgICAgICAgICBmb3IKKyAgICAgICAgICAgICAgIENOMTIwQQorICAgICAgICAgICAgICAgQ04xMjBBQgorICAgICAgICAgICAgICAgQ04xMjBUUAorICAgICAgICAgICAgICAgQ04xMjBTVAorICAgICAgICAgICAgICAgQ04xMjBTQlQKKyAgICAgICAgICAgICBQL046MTItMDEtMDAwNworICAgICAgICAgICAgIFJldmlzaW9uIDMuMDAiCisKK0FSQ05FVCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIHRoZSBEYXRhcG9pbnQgQ29ycG9yYXRpb24KKworUC9OIDEyMEEgICBBUkNORVQgOCBiaXQgWFQvQVQgU3RhcgorUC9OIDEyMEFCICBBUkNORVQgOCBiaXQgWFQvQVQgQnVzCitQL04gMTIwVFAgIEFSQ05FVCA4IGJpdCBYVC9BVCBUd2lzdGVkIFBhaXIKK1AvTiAxMjBTVCAgQVJDTkVUIDggYml0IFhUL0FUIFN0YXIsIFR3aXN0ZWQgUGFpcgorUC9OIDEyMFNCVCBBUkNORVQgOCBiaXQgWFQvQVQgU3RhciwgQnVzLCBUd2lzdGVkIFBhaXIKKworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFRCB8X19ffAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IElENworICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gfCAgIHwgSUQ2CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8IFMgfCBJRDUKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIHwgVyB8IElENAorICAgfCAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgIEEgfCAyIHwgSUQzCisgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgZCB8ICAgfCBJRDIKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgMSAyIDMgNCA1IDYgNyA4ICBkIHwgICB8IElEMQorICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IF9fX19fX19fX19fX19fX19fIHIgfF9fX3wgSUQwCisgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgOTBDNjUgICAgICAgIHx8ICAgICAgIFNXMSAgICAgICB8ICBfX19ffAorICAgfCAgSlAgOCA3ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8fF9fX19fX19fX19fX19fX19ffCB8ICAgIHwKKyAgIHwgICAgfG98b3wgIEpQMSAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBKMiB8CisgICB8ICAgIHxvfG98ICB8b298ICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICBKUCAxIDEgMSAgIHwgICAgfAorICAgfCAgIF9fX19fX19fX19fX19fICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgMCAxIDIgICB8X19fX3wKKyAgIHwgIHwgIFBST00gICAgICAgIHwgIHxfX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgfG98b3xvfCAgX19fX198CisgICB8ICA+ICBTT0NLRVQgICAgICB8ICBKUCA2IDUgNCAzIDIgICAgICAgICAgICAgICAgICAgIHxvfG98b3wgfCBKMSAgfAorICAgfCAgfF9fX19fX19fX19fX19ffCAgICB8b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICB8b3xvfG98IHxfX19fX3wKKyAgIHxfX19fXyAgICAgICAgICAgICAgICAgfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MEM2NSAgICAgICBBUkNORVQgUHJvYmUKK1MxICAxLTU6ICAgIEJhc2UgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CisgICAgNi04OiAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorUzIgIDEtODogICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitKUDEgICAgIFJPTSBFbmFibGUgU2VsZWN0CitKUDIgICAgIElSUTIKK0pQMyAgICAgSVJRMworSlA0ICAgICBJUlE0CitKUDUgICAgIElSUTUKK0pQNiAgICAgSVJRNworSlA3L0pQOCAgICAgRVQxLCBFVDIgVGltZW91dCBQYXJhbWV0ZXJzCitKUDEwL0pQMTEgICBDb2F4IC8gVHdpc3RlZCBQYWlyIFNlbGVjdCAgKENOMTIwU1QvU0JUIG9ubHkpCitKUDEyICAgICAgICBUZXJtaW5hdG9yIFNlbGVjdCAgICAgICAoQ04xMjBBQi9TVC9TQlQgb25seSkKK0oxICAgICAgQk5DIFJHNjIvVSBDb25uZWN0b3IgICAgICAgIChhbGwgZXhjZXB0IENOMTIwVFApCitKMiAgICAgIFR3byA2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrICAgKENOMTIwVFAvU1QvU0JUIG9ubHkpCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1cyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDEgKElEMCkgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBMYWJlbCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgSUQwICAgfCAgIDEKKyAgICAgMiAgICB8IElEMSAgIHwgICAyCisgICAgIDMgICAgfCBJRDIgICB8ICAgNAorICAgICA0ICAgIHwgSUQzICAgfCAgIDgKKyAgICAgNSAgICB8IElENCAgIHwgIDE2CisgICAgIDYgICAgfCBJRDUgICB8ICAzMgorICAgICA3ICAgIHwgSUQ2ICAgfCAgNjQKKyAgICAgOCAgICB8IElENyAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPTiAgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZSAKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyA4SyBvciBtZW1vcnkgYmFzZSArIDB4MjAwMC4KK1N3aXRjaGVzIDEtNSBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIGluc3RhbGwgdGhlIGp1bXBlciBKUDEKKworTm90ZTogU2luY2UgdGhlIHN3aXRjaGVzIDEgYW5kIDIgYXJlIGFsd2F5cyBzZXQgdG8gT04gaXQgbWF5IGJlIHBvc3NpYmxlCisgICAgICB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8gYWRkIGFuIG9mZnNldCBvZiAySywgNEsgb3IgNksgdG8gdGhlIGJhc2UKKyAgICAgIGFkZHJlc3MsIGJ1dCB0aGlzIGZlYXR1cmUgaXMgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbnVhbCBhbmQgSQorICAgICAgaGF2ZW4ndCB0ZXN0ZWQgaXQgeWV0LgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgaW5zdGFsbCBvbmUgKG9ubHkgb25lISkgb2YgdGhlIGp1bXBlcnMKK0pQMiwgSlAzLCBKUDQsIEpQNSwgSlA2LiBKUDIgaXMgdGhlIGRlZmF1bHQuCisKKyAgIEp1bXBlciB8IElSUSAgICAgCisgICAtLS0tLS0tfC0tLS0tCisgICAgIDIgICAgfCAgMgorICAgICAzICAgIHwgIDMKKyAgICAgNCAgICB8ICA0CisgICAgIDUgICAgfCAgNQorICAgICA2ICAgIHwgIDcKKworCitTZXR0aW5nIHRoZSBJbnRlcm5hbCBUZXJtaW5hdG9yIG9uIENOMTIwQUIvVFAvU0JUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVyIEpQMTIgaXMgdXNlZCB0byBlbmFibGUgdGhlIGludGVybmFsIHRlcm1pbmF0b3IuIAorCisgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0KKyAgICAgICAwICAgICAgICAgICAgICAgIHwgIDAgIHwgICAgIAorICAgICAtLS0tLSAgIE9OICAgICAgICAgfCAgICAgfCAgT04KKyAgICB8ICAwICB8ICAgICAgICAgICAgIHwgIDAgIHwKKyAgICB8ICAgICB8ICBPRkYgICAgICAgICAtLS0tLSAgIE9GRgorICAgIHwgIDAgIHwgICAgICAgICAgICAgICAgMAorICAgICAtLS0tLQorICAgVGVybWluYXRvciAgICAgICAgICBUZXJtaW5hdG9yIAorICAgIGRpc2FibGVkICAgICAgICAgICAgZW5hYmxlZAorICAKKworU2VsZWN0aW5nIHRoZSBDb25uZWN0b3IgVHlwZSBvbiBDTjEyMFNUL1NCVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIEpQMTAgICAgSlAxMSAgICAgICAgSlAxMCAgICBKUDExCisgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gICAtLS0tLQorICAgICAgIDAgICAgICAgMCAgICAgICAgfCAgMCAgfCB8ICAwICB8ICAgICAgIAorICAgICAtLS0tLSAgIC0tLS0tICAgICAgfCAgICAgfCB8ICAgICB8CisgICAgfCAgMCAgfCB8ICAwICB8ICAgICB8ICAwICB8IHwgIDAgIHwKKyAgICB8ICAgICB8IHwgICAgIHwgICAgICAtLS0tLSAgIC0tLS0tCisgICAgfCAgMCAgfCB8ICAwICB8ICAgICAgICAwICAgICAgIDAgCisgICAgIC0tLS0tICAgLS0tLS0KKyAgICAgQ29heGlhbCBDYWJsZSAgICAgICBUd2lzdGVkIFBhaXIgQ2FibGUgCisgICAgICAgKERlZmF1bHQpCisKKworU2V0dGluZyB0aGUgVGltZW91dCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGp1bXBlcnMgbGFiZWxlZCBFWFQxIGFuZCBFWFQyIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZW91dCAKK3BhcmFtZXRlcnMuIFRoZXNlIHR3byBqdW1wZXJzIGFyZSBub3JtYWxseSBsZWZ0IG9wZW4uCisKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBDTmV0IFRlY2hub2xvZ3kgSW5jLiAqKgorMTYwIFNlcmllcyAoMTYtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKK0NORVQgVEVDSE5PTE9HWSBJTkMuIChDTmV0KSBBUkNORVQgMTYwQSBTRVJJRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9sbG93aW5nIE9yaWdpbmFsIENOZXQgTWFudWFsIAorCisgICAgICAgICAgICAgICJBUkNORVQKKyAgICAgICAgICAgIFVTRVInUyBNQU5VQUwgCisgICAgICAgICAgICAgICAgZm9yCisgICAgICAgICAgICAgICBDTjE2MEEKKyAgICAgICAgICAgICAgIENOMTYwQUIKKyAgICAgICAgICAgICAgIENOMTYwVFAKKyAgICAgICAgICAgICBQL046MTItMDEtMDAwNgorICAgICAgICAgICAgIFJldmlzaW9uIDMuMDAiCisKK0FSQ05FVCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIHRoZSBEYXRhcG9pbnQgQ29ycG9yYXRpb24KKworUC9OIDE2MEEgICBBUkNORVQgMTYgYml0IFhUL0FUIFN0YXIKK1AvTiAxNjBBQiAgQVJDTkVUIDE2IGJpdCBYVC9BVCBCdXMKK1AvTiAxNjBUUCAgQVJDTkVUIDE2IGJpdCBYVC9BVCBUd2lzdGVkIFBhaXIKKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fICAgICAgICAgIF9fX3wKKyAgPiAgICAgICAgICAgICAgIHxvb3wgSlAyICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgTEVEIHxfX198CisgIDwgICAgICAgICAgICAgICB8b298IEpQMSAgICAgfCAgICAgICAgOTAyNiAgICAgICAgICAgICB8ICAgIExFRCB8X19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19ffCAgICAgICAgIF9fX3wKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IElENworICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgIG8gfCAgIHwgSUQ2CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIgMyA0IDUgNiA3IDggOSAwICAgICAgZCB8IFMgfCBJRDUKKyAgPiAgICAgICAgIF9fX19fX19fX19fX19fXyAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fICAgICBlIHwgVyB8IElENAorICA8ICAgICAgICB8ICAgICBQUk9NICAgICAgfCAgICAgICAgIHwgICAgICAgICBTVzEgICAgICAgICB8ICAgIEEgfCAyIHwgSUQzCisgID4gICAgICAgID4gICAgU09DS0VUICAgICB8ICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX3wgICAgZCB8ICAgfCBJRDIKKyAgPCAgICAgICAgfF9fX19fX19fX19fX19fX3wgICAgICAgICAgfCBJTy1CYXNlICAgfCBNRU0gICB8ICAgICBkIHwgICB8IElEMQorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgfF9fX3wgSUQwCisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKMSB8CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX3wKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDEgMSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgIDMgNCA1IDYgNyAgICAgIEpQICAgICA4IDkgMCAxIDIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA+IHxvfG98b3xvfG98ICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCB8b3xvfG98b3xvfCBfXyAgICAgICAgfG98b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX198CisgID4gICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8X19fX19fX19fX19ffCAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MDI2ICAgICAgICAgICAgQVJDTkVUIFByb2JlCitTVzEgMS02OiAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorICAgIDctMTA6ICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTg6ICAgIE5vZGUgSUQgU2VsZWN0IChJRDAtSUQ3KQorSlAxL0pQMiAgICAgRVQxLCBFVDIgVGltZW91dCBQYXJhbWV0ZXJzCitKUDMtSlAxMyAgICBJbnRlcnJ1cHQgU2VsZWN0CitKMSAgICAgIEJOQyBSRzYyL1UgQ29ubmVjdG9yICAgICAgICAoQ04xNjBBL0FCIG9ubHkpCitKMSAgICAgIFR3byA2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrICAgKENOMTYwVFAgb25seSkKK0xFRAorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZAordG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3QgYmUgZGlmZmVyZW50IGZyb20gMC4KK1N3aXRjaCAxIChJRDApIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKworICAgU3dpdGNoIHwgTGFiZWwgfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8IElEMCAgIHwgICAxCisgICAgIDIgICAgfCBJRDEgICB8ICAgMgorICAgICAzICAgIHwgSUQyICAgfCAgIDQKKyAgICAgNCAgICB8IElEMyAgIHwgICA4CisgICAgIDUgICAgfCBJRDQgICB8ICAxNgorICAgICA2ICAgIHwgSUQ1ICAgfCAgMzIKKyAgICAgNyAgICB8IElENiAgIHwgIDY0CisgICAgIDggICAgfCBJRDcgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDggNyA2IDUgNCAzIDIgMSB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCBzaXggc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIEkvTyBCYXNlCithZGRyZXNzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGU6CisKKyAgICAgICAgICAgICBTd2l0Y2ggICAgICAgIHwgSGV4IEkvTworICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9GRiBPTiAgT04gIE9GRiBPRkYgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPRkYgT04gIE9OICBPRkYgfCAgMjkwCisgICBPRkYgT04gIE9GRiBPRkYgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMkYwCisgICBPRkYgT0ZGIE9OICBPTiAgT04gIE9OICB8ICAzMDAKKyAgIE9GRiBPRkYgT04gIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT0ZGIE9GRiBPRkYgT04gIE9OICBPTiAgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiBPRkYgT0ZGIE9OICB8ICAzRTAKKworTm90ZTogT3RoZXIgSU8tQmFzZSBhZGRyZXNzZXMgc2VlbSB0byBiZSBzZWxlY3RhYmxlLCBidXQgb25seSB0aGUgYWJvdmUKKyAgICAgIGNvbWJpbmF0aW9ucyBhcmUgZG9jdW1lbnRlZC4KKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN3aXRjaGVzIDctMTAgb2Ygc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIE1lbW9yeQorQmFzZSBhZGRyZXNzIG9mIHRoZSBSQU0gKDJLKSBhbmQgdGhlIFBST00uCisKKyAgIFN3aXRjaCAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgNyAgIDggICA5ICAxMCAgfCBBZGRyZXNzIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIE9GRiBPRkYgT04gIE9OICB8ICBDMDAwMCAgfCAgQzgwMDAKKyAgIE9GRiBPRkYgT04gIE9GRiB8ICBEMDAwMCAgfCAgRDgwMDAgKERlZmF1bHQpCisgICBPRkYgT0ZGIE9GRiBPTiAgfCAgRTAwMDAgIHwgIEU4MDAwCisKK05vdGU6IE90aGVyIE1FTS1CYXNlIGFkZHJlc3NlcyBzZWVtIHRvIGJlIHNlbGVjdGFibGUsIGJ1dCBvbmx5IHRoZSBhYm92ZQorICAgICAgY29tYmluYXRpb25zIGFyZSBkb2N1bWVudGVkLgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgaW5zdGFsbCBvbmUgKG9ubHkgb25lISkgb2YgdGhlIGp1bXBlcnMKK0pQMyB0aHJvdWdoIEpQMTMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZToKKworICAgSnVtcGVyIHwgSVJRICAgICAKKyAgIC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgMyAgICB8ICAxNAorICAgICA0ICAgIHwgIDE1CisgICAgIDUgICAgfCAgMTIKKyAgICAgNiAgICB8ICAxMQorICAgICA3ICAgIHwgIDEwCisgICAgIDggICAgfCAgIDMKKyAgICAgOSAgICB8ICAgNAorICAgIDEwICAgIHwgICA1CisgICAgMTEgICAgfCAgIDYKKyAgICAxMiAgICB8ICAgNworICAgIDEzICAgIHwgICAyICg9OSkgRGVmYXVsdCEKKworTm90ZTogIC0gRG8gbm90IHVzZSBKUDExPUlSUTYsIGl0IG1heSBjb25mbGljdCB3aXRoIHlvdXIgRmxvcHB5IERpc2sKKyAgICAgICAgIENvbnRyb2xsZXIKKyAgICAgICAtIFVzZSBKUDM9SVJRMTQgb25seSwgaWYgeW91IGRvbid0IGhhdmUgYW4gSURFLSwgTUZNLSwgb3IgUkxMLQorICAgICAgICAgSGFyZCBEaXNrLCBpdCBtYXkgY29uZmxpY3Qgd2l0aCB0aGVpciBjb250cm9sbGVycworCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIGxhYmVsZWQgSlAxIGFuZCBKUDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0CitwYXJhbWV0ZXJzLiBUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBvcGVuLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIExhbnRlY2ggKioKKzgtYml0IGNhcmQsIHVua25vd24gbW9kZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFZsYWQgTHVuZ3UgPHZsdW5ndUB1Z2FsLnJvPiAtIGhpcyBlLW1haWwgYWRkcmVzcyBzZWVtZWQgYnJva2VuIGF0CisgICAgdGhlIHRpbWUgSSB0cmllZCB0byByZWFjaCBoaW0uICBTb3JyeSBWbGFkLCBpZiB5b3UgZGlkbid0IGdldCBteSByZXBseS4KKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgIDEgICAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICBfX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX198CisgICB8ICAgfCAgIFNXMSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRUQgfF9ffAorICAgfCAgIHxfX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICB8ICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgfFMgfCA4CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFcgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwyIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8X198IDEKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgIFVNOTA2NUwgICAgICB8ICAgICB8b3wgIEpQNCAgICAgICAgIF9fX198X19fXworICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIHxvfCAgICAgICAgICAgICAgfCAgQ04gICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19ffAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICBfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgIHwgICAgUFJPTSAgICB8ICAgICAgICB8b29vb298ICBKUDYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICB8X19fX19fX19fX19ffCAgICAgICAgfG9vb29vfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8X19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBffAorICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wgfF9ffAorCisKK1VNOTA2NUwgOiBBUkNuZXQgQ29udHJvbGxlcgorCitTVyAxICAgIDogU2hhcmVkIE1lbW9yeSBBZGRyZXNzIGFuZCBJL08gQmFzZQorCisgICAgICAgIE9OPTAKKworICAgICAgICAxMjM0NXxNZW1vcnkgQWRkcmVzcworICAgICAgICAtLS0tLXwtLS0tLS0tLS0tLS0tLQorICAgICAgICAwMDAwMXwgIEQ0MDAwCisgICAgICAgIDAwMDEwfCAgQ0MwMDAKKyAgICAgICAgMDAxMTB8ICBEMDAwMAorICAgICAgICAwMTExMHwgIEQxMDAwCisgICAgICAgIDAxMTAxfCAgRDkwMDAKKyAgICAgICAgMTAwMTB8ICBDQzgwMAorICAgICAgICAxMDAxMXwgIERDODAwCisgICAgICAgIDExMTEwfCAgRDE4MDAKKworSXQgc2VlbXMgdGhhdCB0aGUgYml0cyBhcmUgY29uc2lkZXJlZCBpbiByZXZlcnNlIG9yZGVyLiAgQWxzbywgeW91IG11c3QKK29ic2VydmUgdGhhdCBzb21lIG9mIHRob3NlIGFkZHJlc3NlcyBhcmUgdW51c3VhbCBhbmQgSSBkaWRuJ3QgcHJvYmUgdGhlbTsgSQordXNlZCBhIG1lbW9yeSBkdW1wIGluIERPUyB0byBpZGVudGlmeSB0aGVtLiAgRm9yIHRoZSAwMDAwMCBjb25maWd1cmF0aW9uIGFuZAorc29tZSBvdGhlcnMgdGhhdCBJIGRpZG4ndCB3cml0ZSBoZXJlIHRoZSBjYXJkIHNlZW1zIHRvIGNvbmZsaWN0IHdpdGggdGhlCit2aWRlbyBjYXJkIChhbiBTMyBHRU5EQUMpLiBJIGxlYXZlIHRoZSBmdWxsIGRlY29kaW5nIG9mIHRob3NlIGFkZHJlc3NlcyB0bworeW91LgorCisgICAgICAgIDY3OHwgSS9PIEFkZHJlc3MKKyAgICAgICAgLS0tfC0tLS0tLS0tLS0tLQorICAgICAgICAwMDB8ICAgIDI2MAorICAgICAgICAwMDF8ICAgIGZhaWxlZCBwcm9iZQorICAgICAgICAwMTB8ICAgIDJFMAorICAgICAgICAwMTF8ICAgIDM4MAorICAgICAgICAxMDB8ICAgIDI5MAorICAgICAgICAxMDF8ICAgIDM1MAorICAgICAgICAxMTB8ICAgIGZhaWxlZCBwcm9iZQorICAgICAgICAxMTF8ICAgIDNFMAorCitTVyAyICA6IE5vZGUgSUQgKGJpbmFyeSBjb2RlZCkKKworSlAgNCAgOiBCb290IFBST00gZW5hYmxlICAgQ0xPU0UgLSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVOICAtIGRpc2FibGVkCisKK0pQIDYgIDogSVJRIHNldCAoT05MWSBPTkUganVtcGVyIG9uIDEtNSBmb3IgSVJRIDItNikKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBBY2VyICoqCis4LWJpdCBjYXJkLCBNb2RlbCA1MjEwLTAwMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+IHVzaW5nIHBvcnRpb25zIG9mIHRoZSBleGlzdGluZworICAgIGFyY25ldC1oYXJkd2FyZSBmaWxlLgorCitUaGlzIGlzIGEgOTBDMjYgYmFzZWQgY2FyZC4gIEl0cyBjb25maWd1cmF0aW9uIHNlZW1zIHNpbWlsYXIgdG8gdGhlIFNNQworUEMxMDAsIGJ1dCBoYXMgc29tZSBhZGRpdGlvbmFsIGp1bXBlcnMgSSBkb24ndCBrbm93IHRoZSBtZWFuaW5nIG9mLgorCisgICAgICAgICAgICAgICBfXworICAgICAgICAgICAgICB8ICB8CisgICBfX19fX19fX19fX3xfX3xfX19fX19fX19fX19fX19fX19fX19fX19fCisgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgfCBCTkMgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgIHxfX19fX198ICAgICAgICAgICAgICAgICAgICBfX198CisgIHwgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICB8X19fICAKKyAgfCB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8CisgIHwgfCBIeWJyaWQgSUMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIG98byBKMSAgIHwKKyAgfCB8X19fX19fX19fX19fX19fX19fX19ffCAgICAgICA4fDggICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHw4IEo1ICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG98byAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggICAgICB8CisgIHxfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHw4ICAgICAgfAorICh8X198IExFRCAgICAgICAgICAgICAgICAgICAgICAgIG98byAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHw4IEoxNSAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgX19fX18gICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgIF9fX19fICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgIF9fX3wKKyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB8ICAgICB8IHwgICAgCisgIHwgIF9fX19fICAgICAgICAgICAgfCBST00gfCAgfCBVRlMgfCB8ICAgIAorICB8IHwgICAgIHwgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgICAgIF9fXyAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgICAgfCAgIHwgIHxfXy5fX3wgIHxfXy5fX3wgfCAgIAorICB8IHwgTkNSIHwgICAgfFhUTHwgICBfX19fXyAgICBfX19fXyAgfCAgIAorICB8IHwgICAgIHwgICAgfF9fX3wgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHw5MEMyNnwgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgICAgICAgICAgIHwgUkFNIHwgIHwgVUZTIHwgfCAgIAorICB8IHwgICAgIHwgSjE3IG98byAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHwgICAgIHwgSjE2IG98byAgIHwgICAgIHwgIHwgICAgIHwgfCAgIAorICB8IHxfXy5fX3wgICAgICAgICAgIHxfXy5fX3wgIHxfXy5fX3wgfCAgIAorICB8ICBfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHwgICB8OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHxTVzJ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHxfX198MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8ICBfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8IHwgICB8MTAgICAgICAgICAgIEoxOCBvfG8gICAgICAgICAgfCAgIAorICB8IHwgICB8ICAgICAgICAgICAgICAgICBvfG8gICAgICAgICAgfCAgIAorICB8IHxTVzF8ICAgICAgICAgICAgICAgICBvfG8gICAgICAgICAgfCAgIAorICB8IHwgICB8ICAgICAgICAgICAgIEoyMSBvfG8gICAgICAgICAgfCAgIAorICB8IHxfX198MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIAorICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCAgIAorCisKK0xlZ2VuZDoKKworOTBDMjYgICAgICAgQVJDTkVUIENoaXAKK1hUTCAgICAgICAgIDIwIE1IeiBDcnlzdGFsCitTVzEgMS02ICAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorICAgIDctMTAgICAgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CitTVzIgMS04ICAgICBOb2RlIElEIFNlbGVjdCAoSUQwLUlENykKK0oxLUo1ICAgICAgIElSUSBTZWxlY3QKK0o2LUoyMSAgICAgIFVua25vd24gKFByb2JhYmx5IGV4dHJhIHRpbWVvdXRzICYgUk9NIGVuYWJsZSAuLi4pCitMRUQxICAgICAgICBBY3Rpdml0eSBMRUQgCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvciAoU1RBUiBBUkNuZXQpCitSQU0gICAgICAgICAyayBvZiBTUkFNCitST00gICAgICAgICBCb290IFJPTSBzb2NrZXQKK1VGUyAgICAgICAgIFVuaWRlbnRpZmllZCBGbHlpbmcgU29ja2V0cworCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZAordG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3Qgbm90IGJlIDAuCitTd2l0Y2ggMSAoSUQwKSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9GRiBtZWFucyAiMSIsIE9OIG1lYW5zICIwIi4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCAgIDEKKyAgICAgMiAgICB8ICAgMgorICAgICAzICAgIHwgICA0CisgICAgIDQgICAgfCAgIDgKKyAgICAgNSAgICB8ICAxNgorICAgICA2ICAgIHwgIDMyCisgICAgIDcgICAgfCAgNjQKKyAgICAgOCAgICB8IDEyOAorCitEb24ndCBzZXQgdGhpcyB0byAwIG9yIDI1NTsgdGhlc2UgdmFsdWVzIGFyZSByZXNlcnZlZC4KKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzd2l0Y2hlcyAxIHRvIDYgb2Ygc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiAzMiBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZXMKKyAgIAorICAgICAgICAgIHwgSGV4CisgICBTd2l0Y2ggfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCAyMDAgIAorICAgICAyICAgIHwgMTAwICAKKyAgICAgMyAgICB8ICA4MCAgCisgICAgIDQgICAgfCAgNDAgIAorICAgICA1ICAgIHwgIDIwICAKKyAgICAgNiAgICB8ICAxMCAKKworVGhlIEkvTyBhZGRyZXNzIGlzIHN1bSBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIi4gUmVtZW1iZXIgdGhhdAordGhlIEkvTyBhZGRyZXNzIHNwYWNlIGJlbGxvdyAweDIwMCBpcyBSRVNFUlZFRCBmb3IgbWFpbmJvYXJkLCBzbworc3dpdGNoIDEgc2hvdWxkIGJlIEFMV0FZUyBTRVQgVE8gT0ZGLiAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZQorbG9jYXRlZCBpbiBhbnkgb2Ygc2l4dGVlbiBwb3NpdGlvbnMuIEhvd2V2ZXIsIHRoZSBhZGRyZXNzZXMgYmVsb3cKK0EwMDAwIGFyZSBsaWtlbHkgdG8gY2F1c2Ugc3lzdGVtIGhhbmcgYmVjYXVzZSB0aGVyZSdzIG1haW4gUkFNLgorCitKdW1wZXJzIDctMTAgb2Ygc3dpdGNoIGJsb2NrIFNXMSBzZWxlY3QgdGhlIE1lbW9yeSBCYXNlIGFkZHJlc3MuCisKKyAgIFN3aXRjaCAgICAgICAgICB8IEhleCBSQU0KKyAgICA3ICAgOCAgIDkgIDEwICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tCisgICBPRkYgT0ZGIE9GRiBPRkYgfCAgRjAwMDAgKGNvbmZsaWN0cyB3aXRoIG1haW4gQklPUykKKyAgIE9GRiBPRkYgT0ZGIE9OICB8ICBFMDAwMCAKKyAgIE9GRiBPRkYgT04gIE9GRiB8ICBEMDAwMAorICAgT0ZGIE9GRiBPTiAgT04gIHwgIEMwMDAwIChjb25mbGljdHMgd2l0aCB2aWRlbyBCSU9TKQorICAgT0ZGIE9OICBPRkYgT0ZGIHwgIEIwMDAwIChjb25mbGljdHMgd2l0aCBtb25vIHZpZGVvKQorICAgT0ZGIE9OICBPRkYgT04gIHwgIEEwMDAwIChjb25mbGljdHMgd2l0aCBncmFwaGljcykKKworCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQgTGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVtcGVycyAxLTUgb2YgdGhlIGp1bXBlciBibG9jayBKMSBjb250cm9sIHRoZSBJUlEgbGV2ZWwuIE9OIG1lYW5zIAorc2hvcnRlZCwgT0ZGIG1lYW5zIG9wZW4uCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgNworICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgNQorICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgMworICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgMgorCisKK1Vua25vd24ganVtcGVycyAmIHNvY2tldHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSSBrbm93IG5vdGhpbmcgYWJvdXQgdGhlc2UuIEkganVzdCBndWVzcyB0aGF0IEoxNiZKMTcgYXJlIHRpbWVvdXQKK2p1bXBlcnMgYW5kIG1heWJlIG9uZSBvZiBKMTgtSjIxIHNlbGVjdHMgUk9NLiBBbHNvIEo2LUoxMCBhbmQKK0oxMS1KMTUgYXJlIGNvbm5lY3RpbmcgSVJRMi03IHRvIHNvbWUgcGlucyBvbiB0aGUgVUZTcy4gSSBjYW4ndAorZ3Vlc3MgdGhlIHB1cnBvc2UuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogRGF0YXBvaW50PyAqKgorTEFOLUFSQy04LCBhbiA4LWJpdCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisKK1RoaXMgaXMgYW5vdGhlciBTTUMgOTBDNjUtYmFzZWQgQVJDbmV0IGNhcmQuIEkgY291bGRuJ3QgaWRlbnRpZnkgdGhlCittYW51ZmFjdHVyZXIsIGJ1dCBpdCBtaWdodCBiZSBEYXRhUG9pbnQsIGJlY2F1c2UgdGhlIGNhcmQgaGFzIHRoZQorb3JpZ2luYWwgYXJjTmV0IGxvZ28gaW4gaXRzIHVwcGVyIHJpZ2h0IGNvcm5lci4KKworICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICBTVzIgICB8IE9OICAgICAgYXJjTmV0ICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX3wgT0ZGICAgICAgICAgICAgIF9fX3wKKyAgICAgICAgIHwgIF9fX19fX19fX19fX18gICAgICAgICAxIF9fX19fXyAgOCAgICAgICAgICAgICAgICB8ICAgfCA4ICAKKyAgICAgICAgIHwgfCAgICAgICAgICAgICB8IFNXMSAgICAgfCBYVEFMIHwgX19fX19fX19fX19fICAgICB8IFMgfCAgICAKKyAgICAgICAgIHwgPiBSQU0gKDJrKSAgICB8ICAgICAgICAgfF9fX19fX3x8ICAgICAgICAgICAgfCAgICB8IFcgfCAgICAKKyAgICAgICAgIHwgfF9fX19fX19fX19fX198ICAgICAgICAgICAgICAgICB8ICAgICAgSCAgICAgfCAgICB8IDMgfCAgICAKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX198X19fX18geSAgICAgfCAgICB8X19ffCAxICAKKyAgICAgICAgIHwgIF9fX19fX19fXyAgICAgICAgICAgIHwgICAgICAgICB8ICAgICB8YiAgICAgfCAgICAgICAgfCAgICAKKyAgICAgICAgIHwgfF9fX19fX19fX3wgICAgICAgICAgIHwgICAgICAgICB8ICAgICB8ciAgICAgfCAgICAgICAgfCAgICAKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIFNNQyB8ICAgICB8aSAgICAgfCAgICAgICAgfCAgICAKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOTBDNjV8ICAgICB8ZCAgICAgfCAgICAgICAgfCAgICAgIAorICAgICAgICAgfCAgX19fX19fX19fICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgICB8CisgICAgICAgICB8IHwgICBTVzEgICB8IE9OICAgICAgICB8ICAgICAgICAgfCAgICAgfEkgICAgIHwgICAgICAgIHwKKyAgICAgICAgIHwgfF9fX19fX19fX3wgT0ZGICAgICAgIHxfX19fX19fX198X19fX18vQyAgICAgfCAgIF9fX19ffAorICAgICAgICAgfCAgMSAgICAgICA4ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICB8ICAgICB8X19fCisgICAgICAgICB8ICBfX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIHwgQk5DIHxfX198CisgICAgICAgICB8IHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX3wgIHxfX19fX3wKKyAgICAgICAgIHwgPiBFUFJPTSBTT0NLRVQgfCAgICAgICAgICAgICAgX19fX19fX19fX19fXyAgICAgICAgICAgfAorICAgICAgICAgfCB8X19fX19fX19fX19fX198ICAgICAgICAgICAgIHxfX19fX19fX19fX19ffCAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwQzY1ICAgICAgIEFSQ05FVCBDaGlwIAorU1cxIDEtNTogICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKKyAgICA2LTg6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CitTVzIgMS04OiAgICBOb2RlIElEIFNlbGVjdAorU1czIDEtNTogICAgSVJRIFNlbGVjdCAgIAorICAgIDYtNzogICAgRXh0cmEgVGltZW91dAorICAgIDggIDogICAgUk9NIEVuYWJsZSAgIAorQk5DICAgICAgICAgQ29heCBjb25uZWN0b3IKK1hUQUwgICAgICAgIDIwIE1IeiBDcnlzdGFsCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1czIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBub3QgYmUgMC4KK1N3aXRjaCAxIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKworICAgU3dpdGNoIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgICAxCisgICAgIDIgICAgfCAgIDIKKyAgICAgMyAgICB8ICAgNAorICAgICA0ICAgIHwgICA4CisgICAgIDUgICAgfCAgMTYKKyAgICAgNiAgICB8ICAzMgorICAgICA3ICAgIHwgIDY0CisgICAgIDggICAgfCAxMjgKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBibG9jayBTVzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworCisgICBTd2l0Y2ggICAgICB8IEhleCBJL08KKyAgICA2ICAgNyAgIDggIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tfC0tLS0tLS0tCisgICBPTiAgT04gIE9OICB8ICAyNjAKKyAgIE9GRiBPTiAgT04gIHwgIDI5MAorICAgT04gIE9GRiBPTiAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9GRiBPRkYgT04gIHwgIDJGMAorICAgT04gIE9OICBPRkYgfCAgMzAwCisgICBPRkYgT04gIE9GRiB8ICAzNTAKKyAgIE9OICBPRkYgT0ZGIHwgIDM4MAorICAgT0ZGIE9GRiBPRkYgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIChSQU0pIHJlcXVpcmVzIDJLLiBUaGUgYmFzZSBvZiB0aGlzIGJ1ZmZlciBjYW4gYmUgCitsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuIFRoZSBhZGRyZXNzIG9mIHRoZSBCb290IFByb20gaXMKK21lbW9yeSBiYXNlICsgMHgyMDAwLgorSnVtcGVycyAzLTUgb2Ygc3dpdGNoIGJsb2NrIFNXMSBzZWxlY3QgdGhlIE1lbW9yeSBCYXNlIGFkZHJlc3MuCisKKyAgIFN3aXRjaCAgICAgICAgICAgICAgfCBIZXggUkFNIHwgSGV4IFJPTQorICAgIDEgICAyICAgMyAgIDQgICA1ICB8IEFkZHJlc3MgfCBBZGRyZXNzICopCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIE9OICBPTiAgfCAgQzAwMDAgIHwgIEMyMDAwCisgICBPTiAgT04gIE9GRiBPTiAgT04gIHwgIEM0MDAwICB8ICBDNjAwMAorICAgT04gIE9OICBPTiAgT0ZGIE9OICB8ICBDQzAwMCAgfCAgQ0UwMDAKKyAgIE9OICBPTiAgT0ZGIE9GRiBPTiAgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9OICBPTiAgT04gIE9OICBPRkYgfCAgRDQwMDAgIHwgIEQ2MDAwCisgICBPTiAgT04gIE9GRiBPTiAgT0ZGIHwgIEQ4MDAwICB8ICBEQTAwMAorICAgT04gIE9OICBPTiAgT0ZGIE9GRiB8ICBEQzAwMCAgfCAgREUwMDAKKyAgIE9OICBPTiAgT0ZGIE9GRiBPRkYgfCAgRTAwMDAgIHwgIEUyMDAwCisgIAorKikgVG8gZW5hYmxlIHRoZSBCb290IFJPTSBzZXQgdGhlIHN3aXRjaCA4IG9mIHN3aXRjaCBibG9jayBTVzMgdG8gcG9zaXRpb24gT04uCisKK1RoZSBzd2l0Y2hlcyAxIGFuZCAyIHByb2JhYmx5IGFkZCAweDA4MDAgYW5kIDB4MTAwMCB0byBSQU0gYmFzZSBhZGRyZXNzLgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTd2l0Y2hlcyAxLTUgb2YgdGhlIHN3aXRjaCBibG9jayBTVzMgY29udHJvbCB0aGUgSVJRIGxldmVsLgorCisgICAgSnVtcGVyICAgICAgICAgICAgICB8ICBJUlEKKyAgICAxICAgMiAgIDMgICA0ICAgNSAgIHwKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBPTiAgT0ZGIE9GRiBPRkYgT0ZGIHwgIDMKKyAgICBPRkYgT04gIE9GRiBPRkYgT0ZGIHwgIDQKKyAgICBPRkYgT0ZGIE9OICBPRkYgT0ZGIHwgIDUKKyAgICBPRkYgT0ZGIE9GRiBPTiAgT0ZGIHwgIDcKKyAgICBPRkYgT0ZGIE9GRiBPRkYgT04gIHwgIDIKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3dpdGNoZXMgNi03IG9mIHRoZSBzd2l0Y2ggYmxvY2sgU1czIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZW91dAorcGFyYW1ldGVycy4gIFRoZXNlIHR3byBzd2l0Y2hlcyBhcmUgbm9ybWFsbHkgbGVmdCBpbiB0aGUgT0ZGIHBvc2l0aW9uLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFRvcHdhcmUgKioKKzgtYml0IGNhcmQsIFRBLUFSQy8xMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworVGhpcyBpcyBhbm90aGVyIHZlcnkgc2ltaWxhciA5MEM2NSBjYXJkLiBNb3N0IG9mIHRoZSBzd2l0Y2hlcyBhbmQganVtcGVycworYXJlIHRoZSBzYW1lIGFzIG9uIG90aGVyIGNsb25lcy4KKworIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworfCAgX19fX19fX19fX18gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBfX19fX18gICAgICAgIHwKK3wgfFNXMiBOT0RFIElEfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IFhUQUwgfCAgICAgICB8Cit8IHxfX19fX19fX19fX3wgIHwgIEh5YnJpZCBJQyAgICAgICAgICAgICAgfCAgICAgICAgICAgfF9fX19fX3wgICAgICAgfAorfCAgX19fX19fX19fX18gICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBfX3wgICAgCit8IHxTVzEgTUVNK0kvT3wgIHxfX19fX19fX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICBMRUQxfF9ffCkgICAKK3wgfF9fX19fX19fX19ffCAgICAgICAgICAgMSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAKK3wgICAgICAgICAgICAgICAgICAgICBKMyB8b3xvfCBUSU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX198ICAgIAorfCAgICAgX19fX19fX19fX19fX18gICAgIHxvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgCit8ICAgIHwgICAgICAgICAgICAgIHwgIF9fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICB8IFJKICAgfCAgICAKK3wgICAgPiBFUFJPTSBTT0NLRVQgfCB8ICAgICAgICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgIHwtLS0tLS18ICAgICAKK3xKMiAgfF9fX19fX19fX19fX19ffCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICB8ICAgIAorfHxvfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfF9fX19fX3wKK3x8b3wgUk9NIEVOQUJMRSAgICAgICB8ICAgICAgICBTTUMgICAgICAgICB8ICAgIF9fX19fX19fXyAgICAgICAgICAgICB8Cit8ICAgICBfX19fX19fX19fX19fICAgfCAgICAgICA5MEM2NSAgICAgICAgfCAgIHxfX19fX19fX198ICAgICAgIF9fX19ffCAgICAKK3wgICAgfCAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICB8X19fIAorfCAgICA+IFJBTSAoMmspICAgIHwgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgQk5DIHxfX198Cit8ICAgIHxfX19fX19fX19fX19ffCAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfF9fX19ffCAgICAKK3wgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIAorfCBfX19fX19fXyBJUlEgMiAzIDQgNSA3ICAgICAgICAgICAgICAgICAgX19fX19fX19fX18gICAgICAgICAgICAgICAgIHwKK3x8X19fX19fX198ICAgfG98b3xvfG98b3wgICAgICAgICAgICAgICAgfF9fX19fX19fX19ffCAgICAgICAgICAgICAgICB8Cit8X19fX19fX18gICBKMXxvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKK0xlZ2VuZDoKKworOTBDNjUgICAgICAgQVJDTkVUIENoaXAKK1hUQUwgICAgICAgIDIwIE1IeiBDcnlzdGFsCitTVzEgMS01ICAgICBCYXNlIE1lbW9yeSBBZGRyZXNzIFNlbGVjdAorICAgIDYtOCAgICAgQmFzZSBJL08gQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTggICAgIE5vZGUgSUQgU2VsZWN0IChJRDAtSUQ3KQorSjEgICAgICAgICAgSVJRIFNlbGVjdAorSjIgICAgICAgICAgUk9NIEVuYWJsZQorSjMgICAgICAgICAgRXh0cmEgVGltZW91dAorTEVEMSAgICAgICAgQWN0aXZpdHkgTEVEIAorQk5DICAgICAgICAgQ29heCBjb25uZWN0b3IgKEJVUyBBUkNuZXQpCitSSiAgICAgICAgICBUd2lzdGVkIFBhaXIgQ29ubmVjdG9yIChkYWlzeSBjaGFpbikKKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQgdG8KK3RoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IG5vdCBiZSAwLiAgU3dpdGNoIDEgKElEMCkKK3NlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IExhYmVsIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCBJRDAgICB8ICAgMQorICAgICAyICAgIHwgSUQxICAgfCAgIDIKKyAgICAgMyAgICB8IElEMiAgIHwgICA0CisgICAgIDQgICAgfCBJRDMgICB8ICAgOAorICAgICA1ICAgIHwgSUQ0ICAgfCAgMTYKKyAgICAgNiAgICB8IElENSAgIHwgIDMyCisgICAgIDcgICAgfCBJRDYgICB8ICA2NAorICAgICA4ICAgIHwgSUQ3ICAgfCAxMjgKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlOgorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT04gIE9OICB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIE9GRiBPRkYgT04gIHwgIDJGMAorICAgT04gIE9OICBPRkYgfCAgMzAwCisgICBPRkYgT04gIE9GRiB8ICAzNTAKKyAgIE9OICBPRkYgT0ZGIHwgIDM4MAorICAgT0ZGIE9GRiBPRkYgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIChSQU0pIHJlcXVpcmVzIDJLLiBUaGUgYmFzZSBvZiB0aGlzIGJ1ZmZlciBjYW4gYmUKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyAweDIwMDAuCitKdW1wZXJzIDMtNSBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkgCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIAorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKworKikgVG8gZW5hYmxlIHRoZSBCb290IFJPTSBzaG9ydCB0aGUganVtcGVyIEoyLgorCitUaGUganVtcGVycyAxIGFuZCAyIHByb2JhYmx5IGFkZCAweDA4MDAgYW5kIDB4MTAwMCB0byBSQU0gYWRkcmVzcy4KKworCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQgTGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVtcGVycyAxLTUgb2YgdGhlIGp1bXBlciBibG9jayBKMSBjb250cm9sIHRoZSBJUlEgbGV2ZWwuICBPTiBtZWFucworc2hvcnRlZCwgT0ZGIG1lYW5zIG9wZW4uCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMgorICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgMworICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgNQorICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgNworCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIEozIGFyZSB1c2VkIHRvIHNldCB0aGUgdGltZW91dCBwYXJhbWV0ZXJzLiBUaGVzZSB0d28gCitqdW1wZXJzIGFyZSBub3JtYWxseSBsZWZ0IG9wZW4uCisKKyAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBUaG9tYXMtQ29ucmFkICoqCitNb2RlbCAjNTAwLTYyNDItMDA5NyBSRVYgQSAoOC1iaXQgY2FyZCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gTGFycyBLYXJsc3NvbiA8MTAwNjE3LjM0NzNAY29tcHVzZXJ2ZS5jb20+CisKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIHwgICAgICAgICAgX19fX19fX18gICBfX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fXworICAgfCAgICAgICAgIHwuLi4uLi4uLnwgfC4uLi4uLi4ufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgfF9fX19fX19ffCB8X19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICBTVyAzICAgICAgIFNXIDEgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorICAgfCAgICAgICAgIEJhc2UgSS9PICAgQmFzZSBBZGRyLiAgICAgICAgICAgICAgICBTdGF0aW9uIHwgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgfCAgIHwKKyAgIHwgICAgX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICB8ICAgfAorICAgfCAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgICB8ICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX3wgICAgCisgICB8ICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX18gICAgICAgIHxfX18uXworICAgfCAgIHxfX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX19ffCAgICAgICAgIF9fX198IEJOQworICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVtcGVyLSAgICAgICAgX19fX198IENvbm5lY3RvcgorICAgfCAgIE1haW4gY2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgIF8gICAgX198ICAgJyAgCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgIHwgICAgUkogQ29ubmVjdG9yCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X3wgIHwgICAgd2l0aCAxMTAgT2htCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfXyAgVGVybWluYXRvcgorICAgfCAgICBfX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX198CisgICB8ICAgfC4uLi4uLi4uLi4ufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgUkotamFjaworICAgfCAgIHwuLi4uLi4uLi4uLnwgICAgX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICh1bnVzZWQpCisgICB8ICAgfF9fX19fX19fX19ffCAgIHxfX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfXworICAgfCAgQm9vdCBQUk9NIHNvY2tldCBJUlEtanVtcGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XyAgRGlhZ25vc3RpYworICAgfF9fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX18gICAgICAgICAgX3wgTEVEIChyZWQpCisgICAgICAgICAgICB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCAgfF9fX19fX19ffAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworQW5kIGhlcmUgYXJlIHRoZSBzZXR0aW5ncyBmb3Igc29tZSBvZiB0aGUgc3dpdGNoZXMgYW5kIGp1bXBlcnMgb24gdGhlIGNhcmRzLgorCisKKyAgICAgICAgICBJL08KKworICAgICAgICAgMSAyIDMgNCA1IDYgNyA4CisKKzJFMC0tLS0tIDAgMCAwIDEgMCAwIDAgMQorMkYwLS0tLS0gMCAwIDAgMSAwIDAgMCAwCiszMDAtLS0tLSAwIDAgMCAwIDEgMSAxIDEKKzM1MC0tLS0tIDAgMCAwIDAgMSAxIDEgMAorCisiMCIgaW4gdGhlIGFib3ZlIGV4YW1wbGUgbWVhbnMgc3dpdGNoIGlzIG9mZiAiMSIgbWVhbnMgdGhhdCBpdCBpcyBvbi4KKworCisgICAgU2hNZW0gYWRkcmVzcy4KKworICAgICAgMSAyIDMgNCA1IDYgNyA4CisKK0NYMDAtLTAgMCAxIDEgfCB8ICAgfAorRFgwMC0tMCAwIDEgMCAgICAgICB8CitYMDAwLS0tLS0tLS0tIDEgMSAgIHwKK1g0MDAtLS0tLS0tLS0gMSAwICAgfAorWDgwMC0tLS0tLS0tLSAwIDEgICB8CitYQzAwLS0tLS0tLS0tIDAgMCAgIAorRU5IQU5DRUQtLS0tLS0tLS0tLSAxCitDT01QQVRJQkxFLS0tLS0tLS0tIDAKKworCisgICAgICAgSVJRCisKKworICAgMyA0IDUgNyAyCisgICAuIC4gLiAuIC4KKyAgIC4gLiAuIC4gLgorCisKK1RoZXJlIGlzIGEgRElQLXN3aXRjaCB3aXRoIDggc3dpdGNoZXMsIHVzZWQgdG8gc2V0IHRoZSBzaGFyZWQgbWVtb3J5IGFkZHJlc3MKK3RvIGJlIHVzZWQuIFRoZSBmaXJzdCA2IHN3aXRjaGVzIHNldCB0aGUgYWRkcmVzcywgdGhlIDd0aCBkb2Vzbid0IGhhdmUgYW55CitmdW5jdGlvbiwgYW5kIHRoZSA4dGggc3dpdGNoIGlzIHVzZWQgdG8gc2VsZWN0ICJjb21wYXRpYmxlIiBvciAiZW5oYW5jZWQiLgorV2hlbiBJIGdvdCBteSB0d28gY2FyZHMsIG9uZSBvZiB0aGVtIGhhZCB0aGlzIHN3aXRjaCBzZXQgdG8gImVuaGFuY2VkIi4gVGhhdAorY2FyZCBkaWRuJ3Qgd29yayBhdCBhbGwsIGl0IHdhc24ndCBldmVuIHJlY29nbml6ZWQgYnkgdGhlIGRyaXZlci4gVGhlIG90aGVyCitjYXJkIGhhZCB0aGlzIHN3aXRjaCBzZXQgdG8gImNvbXBhdGlibGUiIGFuZCBpdCBiZWhhdmVkIGFic29sdXRlbHkgbm9ybWFsbHkuIEkKK2d1ZXNzIHRoYXQgdGhlIHN3aXRjaCBvbiBvbmUgb2YgdGhlIGNhcmRzLCBtdXN0IGhhdmUgYmVlbiBjaGFuZ2VkIGFjY2lkZW50YWxseQord2hlbiB0aGUgY2FyZCB3YXMgdGFrZW4gb3V0IG9mIGl0cyBmb3JtZXIgaG9zdC4gVGhlIHF1ZXN0aW9uIHJlbWFpbnMKK3VuYW5zd2VyZWQsIHdoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdGhlICJlbmhhbmNlZCIgcG9zaXRpb24/CisKK1tBdmVyeSdzIG5vdGU6ICJlbmhhbmNlZCIgcHJvYmFibHkgZWl0aGVyIGRpc2FibGVzIHNoYXJlZCBtZW1vcnkgKHVzZSBJTworcG9ydHMgaW5zdGVhZCkgb3IgZGlzYWJsZXMgSU8gcG9ydHMgKHVzZSBtZW1vcnkgYWRkcmVzc2VzIGluc3RlYWQpLiAgVGhpcwordmFyaWVzIGJ5IHRoZSB0eXBlIG9mIGNhcmQgaW52b2x2ZWQuICBJIGZhaWwgdG8gc2VlIGhvdyBlaXRoZXIgb2YgdGhlc2UKK2VuaGFuY2UgYW55dGhpbmcuICBTZW5kIG1lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2RlLCBvcgoranVzdCB1c2UgImNvbXBhdGlibGUiIG1vZGUgaW5zdGVhZC5dCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogV2F0ZXJsb28gTWljcm9zeXN0ZW1zIEluYy4gPz8gKioKKzgtYml0IGNhcmQgKEMpIDE5ODUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIFJvYmVydCBNaWNoYWVsIEJlc3QgPHJtYjExN0Bjcy51c2Fzay5jYT4KKworW0F2ZXJ5J3Mgbm90ZTogdGhlc2UgZG9uJ3Qgd29yayB3aXRoIG15IGRyaXZlciBmb3Igc29tZSByZWFzb24uICBUaGVzZSBjYXJkcworU0VFTSB0byBoYXZlIHNldHRpbmdzIHNpbWlsYXIgdG8gdGhlIFBESTUwOFBsdXMsIHdoaWNoIGlzCitzb2Z0d2FyZS1jb25maWd1cmVkIGFuZCBkb2Vzbid0IHdvcmsgd2l0aCBteSBkcml2ZXIgZWl0aGVyLiAgVGhlICJXYXRlcmxvbworY2hpcCIgaXMgYSBib290IFBST00sIHByb2JhYmx5IGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgdGhlIFVuaXZlcnNpdHkgb2YKK1dhdGVybG9vLiAgSWYgeW91IGhhdmUgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjYXJkLCBwbGVhc2UKK2UtbWFpbCBtZS5dCisKK1RoZSBwcm9iZSBoYXMgbm90IGJlZW4gYWJsZSB0byBkZXRlY3QgdGhlIGNhcmQgb24gYW55IG9mIHRoZSBKMiBzZXR0aW5ncywKK2FuZCBJIHRyaWVkIHRoZW0gYWdhaW4gd2l0aCB0aGUgIldhdGVybG9vIiBjaGlwIHJlbW92ZWQuCisgCisgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCit8IFwvICBcLyAgICAgICAgICAgICAgX19fICBfXyBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBDNCAgQzQgICAgIHxefCAgICAgfCBNIHx8ICBeICB8fF58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgLS0gIC0tICAgICB8X3wgICAgIHwgNSB8fCAgICAgfHwgfCBDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFwvICBcLyAgICAgIEMxMCAgICB8X19ffHwgICAgIHx8X3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgQzQgIEM0ICAgICAgICAgICAgIF8gIF8gfCAgICAgfCAgICAgICAgICAgICAgICAgPz8gICAgICAgICAgICAgICAgICB8IAorfCAtLSAgLS0gICAgICAgICAgICB8IFwvIHx8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCit8ICAgICAgICAgICAgICAgICAgIHwgICAgfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgQzEgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICAgICB8ICBcLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX3wgICAgCit8ICAgICAgICAgICAgICAgICAgIHwgQzYgfHwgICAgIHwgIEM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfF9fXyAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJOQyB8X19ffCAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgICAgICAgICA+Qzd8ICAgICAgICAgICAgICAgICB8X19fX198Cit8ICAgICAgICAgICAgICAgICAgIHwgICAgfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBfXyBfXyAgICAgICAgICAgICB8X19fX3x8X19fX198ICAgICAgIDEgMiAzICAgICA2ICAgICAgICAgICAgICAgICAgIHwKK3x8ICBeICB8ICAgICA+QzR8ICAgICAgICAgICAgICAgICAgICAgIHxvfG98b3xvfG98b3wgSjIgICAgPkM0fCAgICAgICB8Cit8fCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgfAorfHwgQzIgIHwgICAgID5DNHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+QzR8ICAgICAgIHwKK3x8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Qzh8ICAgICAgICAgICAgICAgICAgICAgICB8Cit8fCAgICAgfCAgICAgICAyIDMgNCA1IDYgNyAgSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgID5DNHwgICAgICAgfAorfHxfX19fX3wgICAgICB8b3xvfG98b3xvfG98IEozICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3xfX19fX19fICAgICAgfG98b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX198CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKK0MxIC0tICJDT005MDI2CisgICAgICAgU01DIDg2MzgiCisgICAgICBJbiBhIGNoaXAgc29ja2V0LgorCitDMiAtLSAiQENvcHlyaWdodAorICAgICAgIFdhdGVybG9vIE1pY3Jvc3lzdGVtcyBJbmMuCisgICAgICAgMTk4NSIKKyAgICAgIEluIGEgY2hpcCBTb2NrZXQgd2l0aCBpbmZvIHByaW50ZWQgb24gYSBsYWJlbCBjb3ZlcmluZyBhIHJvdW5kIHdpbmRvdworICAgICAgc2hvd2luZyB0aGUgY2lyY3VpdCBpbnNpZGUuIChUaGUgd2luZG93IGluZGljYXRlcyBpdCBpcyBhbiBFUFJPTSBjaGlwLikKKworQzMgLS0gIkNPTTkwMzIKKyAgICAgICBTTUMgODY0MyIKKyAgICAgIEluIGEgY2hpcCBzb2NrZXQuCisKK0M0IC0tICI3NExTIgorICAgICAgOSB0b3RhbCBubyBzb2NrZXRzLgorCitNNSAtLSAiNTAwMDYtMTM2CisgICAgICAgMjAuMDAwMDAwIE1IWgorICAgICAgIE1UUS1UMS1TMworICAgICAgIDAgTS1UUk9OIDg2LTQwIgorICAgICAgTWV0YWxsaWMgY2FzZSB3aXRoIDQgcGlucywgbm8gc29ja2V0LgorCitDNiAtLSAiTU9TVEVLQFRDODY0MworICAgICAgIE1LNjExNk4tMjAKKyAgICAgICBNQUxBWVNJQSIKKyAgICAgIE5vIHNvY2tldC4KKworQzcgLS0gTm8gc3RhbXAgb3IgbGFiZWwgYnV0IGluIGEgMjAgcGluIGNoaXAgc29ja2V0LgorCitDOCAtLSAiUEFMMTBMOENOCisgICAgICAgODYyMyIKKyAgICAgIEluIGEgMjAgcGluIHNvY2tldC4KKworQzkgLS0gIlBBbDE2UjRBLTJDTgorICAgICAgIDg2NDEiCisgICAgICBJbiBhIDIwIHBpbiBzb2NrZXQuCisKK0MxMCAtLSAiTTg2NDAKKyAgICAgICAgICBOTUMKKyAgICAgICAgOTMwNk4iCisgICAgICAgSW4gYW4gOCBwaW4gc29ja2V0LgorCis/PyAtLSBTb21lIGNvbXBvbmVudHMgb24gYSBzbWFsbGVyIGJvYXJkIGFuZCBhdHRhY2hlZCB3aXRoIDIwIHBpbnMgYWxsIAorICAgICAgYWxvbmcgdGhlIHNpZGUgY2xvc2VzdCB0byB0aGUgQk5DIGNvbm5lY3Rvci4gIFRoZSBhcmUgY29hdGVkIGluIGEgZGFyayAKKyAgICAgIHJlc2luLgorCitPbiB0aGUgYm9hcmQgdGhlcmUgYXJlIHR3byBqdW1wZXIgYmFua3MgbGFiZWxlZCBKMiBhbmQgSjMuIFRoZSAKK21hbnVmYWN0dXJlciBkaWRuJ3QgcHV0IGEgSjEgb24gdGhlIGJvYXJkLiBUaGUgdHdvIGJvYXJkcyBJIGhhdmUgYm90aCAKK2NhbWUgd2l0aCBhIGp1bXBlciBib3ggZm9yIGVhY2ggYmFuay4KKworSjIgLS0gTnVtYmVyZWQgMSAyIDMgNCA1IDYuIAorICAgICAgNCBhbmQgNSBhcmUgbm90IHN0YW1wZWQgZHVlIHRvIHNvbGRlciBwb2ludHMuCisgICAgICAgCitKMyAtLSBJUlEgMiAzIDQgNSA2IDcKKworVGhlIGJvYXJkIGl0c2VsZiBoYXMgYSBtYXBsZSBsZWFmIHN0YW1wZWQganVzdCBhYm92ZSB0aGUgaXJxIGp1bXBlcnMgCithbmQgIi0yIDQ2LTg2IiBiZXNpZGUgQzIuIEJldHdlZW4gQzEgYW5kIEM2ICJBU1MgJ1kgMzAwMTYzIiBhbmQgIkAxOTg2IAorQ09STUFOIENVU1RPTSBFTEVDVFJPTklDUyBDT1JQLiIgc3RhbXBlZCBqdXN0IGJlbG93IHRoZSBCTkMgY29ubmVjdG9yLgorQmVsb3cgdGhhdCAiTUFERSBJTiBDQU5BREEiCisKKyAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBObyBOYW1lICoqCis4LWJpdCBjYXJkcywgMTYtYml0IGNhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKyAgCitOT05BTUUgOC1CSVQgQVJDTkVUCis9PT09PT09PT09PT09PT09PT09CisKK0kgaGF2ZSBuYW1lZCB0aGlzIEFSQ25ldCBjYXJkICJOT05BTUUiLCBzaW5jZSB0aGVyZSBpcyBubyBuYW1lIG9mIGFueQorbWFudWZhY3R1cmVyIG9uIHRoZSBJbnN0YWxsYXRpb24gbWFudWFsIG5vciBvbiB0aGUgc2hpcHBpbmcgYm94LiBUaGUgb25seQoraGludCB0byB0aGUgZXhpc3RlbmNlIG9mIGEgbWFudWZhY3R1cmVyIGF0IGFsbCBpcyB3cml0dGVuIGluIGNvcHBlciwKK2l0IGlzICJNYWRlIGluIFRhaXdhbiIKKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgIkFSQ25ldCBJbnN0YWxsYXRpb24gTWFudWFsIgorCisKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8IHxTVEFSfCBCVVN8IFQvUHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgfF9fX198X19fX3xfX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgU01DICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgQ09NOTBDNjUgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fLV9fX19fX19fX198ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX3wKKyAgIHwgICAgICBfX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgQ04gfAorICAgfCAgICAgfCBQUk9NICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX198CisgICB8ICAgICA+IFNPQ0tFVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgIHxfX19fX19fX19fX19fX198ICAgICAgICAgMSAyIDMgNCA1IDYgNyA4ICAxIDIgMyA0IDUgNiA3IDggfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX18gIF9fX19fX19fX19fX19fXyB8CisgICB8ICAgICAgICAgICB8b3xvfG98b3xvfG98b3xvfCAgfCAgICAgIFNXMSAgICAgIHx8ICAgICAgU1cyICAgICAgfHwKKyAgIHwgICAgICAgICAgIHxvfG98b3xvfG98b3xvfG98ICB8X19fX19fX19fX19fX19ffHxfX19fX19fX19fX19fX198fAorICAgfF9fXyAgICAgICAgIDIgMyA0IDUgNyBFIEUgUiAgICAgICAgTm9kZSBJRCAgICAgICBJT0JfX3xfX01FTV9fX198CisgICAgICAgfCAgICAgICAgXCBJUlEgICAvIFQgVCBPICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICB8X19fX19fX19fX19fX19fX19fMV8yX01fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKK0NPTTkwQzY1OiAgICAgICBBUkNuZXQgUHJvYmUKK1MxICAxLTg6ICAgIE5vZGUgSUQgU2VsZWN0CitTMiAgMS0zOiAgICBJL08gQmFzZSBBZGRyZXNzIFNlbGVjdAorICAgIDQtNjogICAgTWVtb3J5IEJhc2UgQWRkcmVzcyBTZWxlY3QKKyAgICA3LTg6ICAgIFJBTSBPZmZzZXQgU2VsZWN0CitFVDEsIEVUMiAgICBFeHRlbmRlZCBUaW1lb3V0IFNlbGVjdAorUk9NICAgICBST00gRW5hYmxlIFNlbGVjdAorQ04gICAgICAgICAgICAgIFJHNjIgQ29heCBDb25uZWN0b3IKK1NUQVJ8IEJVUyB8IFQvUCBUaHJlZSBmaWVsZHMgZm9yIHBsYWNpbmcgYSBzaWduIChjb2xvcmVkIGNpcmNsZSkKKyAgICAgICAgICAgICAgICBpbmRpY2F0aW5nIHRoZSB0b3BvbG9neSBvZiB0aGUgY2FyZAorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMSBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuCitFYWNoIG5vZGUgYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoCittdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggOCBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgOCAgICB8ICAgMQorICAgICAgNyAgICB8ICAgMgorICAgICAgNiAgICB8ICAgNAorICAgICAgNSAgICB8ICAgOAorICAgICAgNCAgICB8ICAxNgorICAgICAgMyAgICB8ICAzMgorICAgICAgMiAgICB8ICA2NAorICAgICAgMSAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDEgMiAzIDQgNSA2IDcgOCB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgU1cyIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDEgICAyICAgMyAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT04gIE9OICBPRkYgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9GRiBPRkYgfCAgMkYwCisgICBPRkYgT04gIE9OICB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT0ZGIE9GRiBPTiAgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDQtNiBvZiBzd2l0Y2ggZ3JvdXAgU1cyIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorV2l0aGluIHRoYXQgMTZLIGFkZHJlc3Mgc3BhY2UsIHRoZSBidWZmZXIgbWF5IGJlIGFzc2lnbmVkIGFueSBvbmUgb2YgZm91cgorcG9zaXRpb25zLCBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXQsIHN3aXRjaGVzIDcgYW5kIDggb2YgZ3JvdXAgU1cyLgorCisgICBTd2l0Y2ggICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDQgNSA2ICA3IDggfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICAwIDAgMCAgMCAwIHwgIEMwMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDAgMSB8ICBDMDgwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDAgfCAgQzEwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAxIHwgIEMxODAwICB8ICBDMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAwIDEgIDAgMCB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAwIDEgfCAgQzQ4MDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAwIHwgIEM1MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMSB8ICBDNTgwMCAgfCAgQzYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwICAwIDAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMCAxIHwgIENDODAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMCB8ICBDRDAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDEgfCAgQ0Q4MDAgIHwgIENFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMSAgMCAwIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgMCAxIHwgIEQwODAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMCB8ICBEMTAwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDEgfCAgRDE4MDAgIHwgIEQyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMCAgMCAwIHwgIEQ0MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDAgMSB8ICBENDgwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDAgfCAgRDUwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAxIHwgIEQ1ODAwICB8ICBENjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgIDAgMCB8ICBEODAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAwIDEgfCAgRDg4MDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAwIHwgIEQ5MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMSB8ICBEOTgwMCAgfCAgREEwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAwICAwIDAgfCAgREMwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMCAxIHwgIERDODAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMCB8ICBERDAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDEgfCAgREQ4MDAgIHwgIERFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMSAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDAgMSB8ICBFMDgwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDAgfCAgRTEwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAxIHwgIEUxODAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgOEsgQm9vdCBQUk9NIGluc3RhbGwgdGhlIGp1bXBlciBST00uCisgICBUaGUgZGVmYXVsdCBpcyBqdW1wZXIgUk9NIG5vdCBpbnN0YWxsZWQuCisKKworU2V0dGluZyBJbnRlcnJ1cHQgUmVxdWVzdCBMaW5lcyAoSVJRKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgc2V0IG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSVJRMiwgSVJRMywgSVJRNCwgSVJRNSBvciBJUlE3LiBUaGUgbWFudWZhY3R1cmVyJ3MgZGVmYXVsdCBpcyBJUlEyLgorIAorCitTZXR0aW5nIHRoZSBUaW1lb3V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHR3byBqdW1wZXJzIGxhYmVsZWQgRVQxIGFuZCBFVDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0CitwYXJhbWV0ZXJzIChyZXNwb25zZSBhbmQgcmVjb25maWd1cmF0aW9uIHRpbWUpLiBFdmVyeSBub2RlIGluIGEgbmV0d29yaworbXVzdCBiZSBzZXQgdG8gdGhlIHNhbWUgdGltZW91dCB2YWx1ZXMuCisKKyAgIEVUMSBFVDIgfCBSZXNwb25zZSBUaW1lICh1cykgfCBSZWNvbmZpZ3VyYXRpb24gVGltZSAobXMpCisgICAtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgT2ZmIE9mZiB8ICAgICAgICA3OCAgICAgICAgICB8ICAgICAgICAgIDg0MCAgIChEZWZhdWx0KQorICAgT2ZmIE9uICB8ICAgICAgIDI4NSAgICAgICAgICB8ICAgICAgICAgMTY4MAorICAgT24gIE9mZiB8ICAgICAgIDU2MyAgICAgICAgICB8ICAgICAgICAgMTY4MAorICAgT24gIE9uICB8ICAgICAgMTEzMCAgICAgICAgICB8ICAgICAgICAgMTY4MAorCitPbiBtZWFucyBqdW1wZXIgaW5zdGFsbGVkLCBPZmYgbWVhbnMganVtcGVyIG5vdCBpbnN0YWxsZWQKKworCitOT05BTUUgMTYtQklUIEFSQ05FVAorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIG1hbnVhbCBvZiBteSA4LUJpdCBOT05BTUUgQVJDbmV0IENhcmQgY29udGFpbnMgYW5vdGhlciBkZXNjcmlwdGlvbgorb2YgYSAxNi1CaXQgQ29heCAvIFR3aXN0ZWQgUGFpciBDYXJkLiBUaGlzIGRlc2NyaXB0aW9uIGlzIGluY29tcGxldGUsCitiZWNhdXNlIHRoZXJlIGFyZSBtaXNzaW5nIHR3byBwYWdlcyBpbiB0aGUgbWFudWFsIGJvb2tsZXQuIChUaGUgdGFibGUKK29mIGNvbnRlbnRzIHJlcG9ydHMgcGFnZXMgLi4uIDItOSwgMi0xMSwgMi0xMiwgMy0xLCAuLi4gYnV0IGluc2lkZQordGhlIGJvb2tsZXQgdGhlcmUgaXMgYSBkaWZmZXJlbnQgd2F5IG9mIGNvdW50aW5nIC4uLiAyLTksIDItMTAsIEEtMSwKKyhlbXB0eSBwYWdlKSwgMy0xLCAuLi4sIDMtMTgsIEEtMSAoYWdhaW4pLCBBLTIpCitBbHNvIHRoZSBwaWN0dXJlIG9mIHRoZSBib2FyZCBsYXlvdXQgaXMgbm90IGFzIGdvb2QgYXMgdGhlIHBpY3R1cmUgb2YKKzgtQml0IGNhcmQsIGJlY2F1c2UgdGhlcmUgaXNuJ3QgYW55IGxldHRlciBsaWtlICJTVzEiIHdyaXR0ZW4gdG8gdGhlCitwaWN0dXJlLgorU2hvdWxkIHNvbWVib2R5IGhhdmUgc3VjaCBhIGJvYXJkLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbXBsZXRlIHRoaXMKK2Rlc2NyaXB0aW9uIG9yIHRvIHNlbmQgYSBtYWlsIHRvIG1lIQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAiQVJDbmV0IEluc3RhbGxhdGlvbiBNYW51YWwiCisKKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICA8ICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fXyAgX19fX19fX19fX19fX19fX18gICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICB8ICAgICAgIFNXPyAgICAgICB8fCAgICAgIFNXPyAgICAgICAgfCAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19ffHxfX19fX19fX19fX19fX19fX3wgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX3wKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgfCAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgSjEgfAorICA+ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIDwgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX198ICA/ID8gPyA/ID8gPyAgICAgfF9fX198CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98b3xvfG98b3xvfCAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19ffAorICA+ICAgICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPF9fX19fX19fX19fX3wgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9mZiBtZWFucyAiMSIsIE9uIG1lYW5zICIwIi4KKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBncm91cCBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELgorRWFjaCBub2RlIGF0dGFjaGVkIHRvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaAorbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDggc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICAgU3dpdGNoIHwgVmFsdWUKKyAgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgIDggICAgfCAgIDEKKyAgICAgIDcgICAgfCAgIDIKKyAgICAgIDYgICAgfCAgIDQKKyAgICAgIDUgICAgfCAgIDgKKyAgICAgIDQgICAgfCAgMTYKKyAgICAgIDMgICAgfCAgMzIKKyAgICAgIDIgICAgfCAgNjQKKyAgICAgIDEgICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICAxIDIgMyA0IDUgNiA3IDggfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1CisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGdyb3VwIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisgICBTd2l0Y2ggICAgICB8IEhleCBJL08KKyAgICAzICAgMiAgIDEgIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tfC0tLS0tLS0tCisgICBPTiAgT04gIE9OICB8ICAyNjAKKyAgIE9OICBPTiAgT0ZGIHwgIDI5MAorICAgT04gIE9GRiBPTiAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9OICBPRkYgT0ZGIHwgIDJGMAorICAgT0ZGIE9OICBPTiAgfCAgMzAwCisgICBPRkYgT04gIE9GRiB8ICAzNTAKKyAgIE9GRiBPRkYgT04gIHwgIDM4MAorICAgT0ZGIE9GRiBPRkYgfCAgM0UwCisKKworU2V0dGluZyB0aGUgQmFzZSBNZW1vcnkgKFJBTSkgYnVmZmVyIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIHJlcXVpcmVzIDJLIG9mIGEgMTZLIGJsb2NrIG9mIFJBTS4gVGhlIGJhc2Ugb2YgdGhpcworMTZLIGJsb2NrIGNhbiBiZSBsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuCitTd2l0Y2hlcyA2LTggb2Ygc3dpdGNoIGdyb3VwIFNXMSBzZWxlY3QgdGhlIEJhc2Ugb2YgdGhlIDE2SyBibG9jay4KK1dpdGhpbiB0aGF0IDE2SyBhZGRyZXNzIHNwYWNlLCB0aGUgYnVmZmVyIG1heSBiZSBhc3NpZ25lZCBhbnkgb25lIG9mIGZvdXIKK3Bvc2l0aW9ucywgZGV0ZXJtaW5lZCBieSB0aGUgb2Zmc2V0LCBzd2l0Y2hlcyA0IGFuZCA1IG9mIGdyb3VwIFNXMS4KKworICAgU3dpdGNoICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICA4IDcgNiAgNSA0IHwgQWRkcmVzcyB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgMCAwIDAgIDAgMCB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAwIDEgfCAgQzA4MDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAwIHwgIEMxMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDEgMSB8ICBDMTgwMCAgfCAgQzIwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMCAxICAwIDAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMCAxIHwgIEM0ODAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMCB8ICBDNTAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAxIDEgfCAgQzU4MDAgIHwgIEM2MDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAgMCAwIHwgIENDMDAwICB8ICBDRTAwMAorICAgMCAxIDAgIDAgMSB8ICBDQzgwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDAgfCAgQ0QwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMSAxIHwgIENEODAwICB8ICBDRTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDEgIDAgMCB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgMCAxIDEgIDAgMSB8ICBEMDgwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDAgfCAgRDEwMDAgIHwgIEQyMDAwCisgICAwIDEgMSAgMSAxIHwgIEQxODAwICB8ICBEMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDAgIDAgMCB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAwIDEgfCAgRDQ4MDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAwIHwgIEQ1MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDEgMSB8ICBENTgwMCAgfCAgRDYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxICAwIDAgfCAgRDgwMDAgIHwgIERBMDAwCisgICAxIDAgMSAgMCAxIHwgIEQ4ODAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMCB8ICBEOTAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAxIDEgfCAgRDk4MDAgIHwgIERBMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMCAgMCAwIHwgIERDMDAwICB8ICBERTAwMAorICAgMSAxIDAgIDAgMSB8ICBEQzgwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDAgfCAgREQwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMSAxIHwgIEREODAwICB8ICBERTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAxIDEgIDAgMCB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAwIDEgfCAgRTA4MDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAwIHwgIEUxMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDEgMSB8ICBFMTgwMCAgfCAgRTIwMDAKKyAgCisKK1NldHRpbmcgSW50ZXJydXB0IFJlcXVlc3QgTGluZXMgKElSUSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKworCitTZXR0aW5nIHRoZSBUaW1lb3V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBObyBOYW1lICoqCis4LWJpdCBjYXJkcyAoIk1hZGUgaW4gVGFpd2FuIFIuTy5DLiIpCistLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworSSBoYXZlIG5hbWVkIHRoaXMgQVJDbmV0IGNhcmQgIk5PTkFNRSIsIHNpbmNlIEkgZ290IG9ubHkgdGhlIGNhcmQgd2l0aAorbm8gbWFudWFsIGF0IGFsbCBhbmQgdGhlIG9ubHkgdGV4dCBpZGVudGlmeWluZyB0aGUgbWFudWZhY3R1cmVyIGlzIAorIk1BREUgSU4gVEFJV0FOIFIuTy5DIiBwcmludGVkIG9uIHRoZSBjYXJkLgorCisgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAxIDIgMyA0IDUgNiA3IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCB8b3xvfCBKUDEgICAgICAgb3xvfG98b3xvfG98b3xvfCBPTiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICsgICAgICAgICAgICAgIG98b3xvfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICAgICAgICB8ICBfX19fX19fX19fX19fICBvfG98b3xvfG98b3xvfG98IE9GRiAgICAgICAgIF9fX19fICAgICB8ICAgfCBJRDcKKyAgICAgICAgIHwgfCAgICAgICAgICAgICB8IFNXMSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgIHwgICB8IElENgorICAgICAgICAgfCA+IFJBTSAoMmspICAgIHwgICAgICAgIF9fX19fX19fX19fX19fX19fX19fIHwgIEggIHwgICAgfCBTIHwgSUQ1CisgICAgICAgICB8IHxfX19fX19fX19fX19ffCAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgeSAgfCAgICB8IFcgfCBJRDQKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICBiICB8ICAgIHwgMiB8IElEMworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwgIHIgIHwgICAgfCAgIHwgSUQyCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgaSAgfCAgICB8ICAgfCBJRDEKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgOTBDNjUgICAgICAgIHx8ICBkICB8ICAgIHxfX198IElEMAorICAgICAgICAgfCAgICAgIFNXMyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwgICAgIHwgICAgICAgIHwgICAgICAKKyAgICAgICAgIHwgfG98b3xvfG98b3xvfG98b3wgT04gIHwgICAgICAgICAgICAgICAgICAgIHx8ICBJICB8ICAgICAgICB8CisgICAgICAgICB8IHxvfG98b3xvfG98b3xvfG98ICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgQyAgfCAgICAgICAgfAorICAgICAgICAgfCB8b3xvfG98b3xvfG98b3xvfCBPRkYgfF9fX19fX19fX19fX19fX19fX19ffHwgICAgIHwgICBfX19fX3wKKyAgICAgICAgIHwgIDEgMiAzIDQgNSA2IDcgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB8ICAgICB8X19fCisgICAgICAgICB8ICBfX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgfCBCTkMgfF9fX3wKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fX198ICB8X19fX198CisgICAgICAgICB8ID4gRVBST00gU09DS0VUIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCB8X19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MEM2NSAgICAgICBBUkNORVQgQ2hpcCAKK1NXMSAxLTU6ICAgIEJhc2UgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CisgICAgNi04OiAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorU1cyIDEtODogICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitTVzMgMS01OiAgICBJUlEgU2VsZWN0ICAgCisgICAgNi03OiAgICBFeHRyYSBUaW1lb3V0CisgICAgOCAgOiAgICBST00gRW5hYmxlICAgCitKUDEgICAgICAgICBMZWQgY29ubmVjdG9yCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvcgorCitBbHRob3VnaCB0aGUganVtcGVycyBTVzEgYW5kIFNXMyBhcmUgbWFya2VkIFNXLCBub3QgSlAsIHRoZXkgYXJlIGp1bXBlcnMsIG5vdCAKK3N3aXRjaGVzLgorCitTZXR0aW5nIHRoZSBqdW1wZXJzIHRvIE9OIG1lYW5zIGNvbm5lY3RpbmcgdGhlIHVwcGVyIHR3byBwaW5zLCBvZmYgdGhlIGJvdHRvbSAKK3R3byAtIG9yIC0gaW4gY2FzZSBvZiBJUlEgc2V0dGluZywgY29ubmVjdGluZyBub25lIG9mIHRoZW0gYXQgYWxsLgorCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQKK3RvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IG5vdCBiZSAwLgorU3dpdGNoIDEgKElEMCkgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBMYWJlbCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgSUQwICAgfCAgIDEKKyAgICAgMiAgICB8IElEMSAgIHwgICAyCisgICAgIDMgICAgfCBJRDIgICB8ICAgNAorICAgICA0ICAgIHwgSUQzICAgfCAgIDgKKyAgICAgNSAgICB8IElENCAgIHwgIDE2CisgICAgIDYgICAgfCBJRDUgICB8ICAzMgorICAgICA3ICAgIHwgSUQ2ICAgfCAgNjQKKyAgICAgOCAgICB8IElENyAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPTiAgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZSAKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyAweDIwMDAuCitKdW1wZXJzIDMtNSBvZiBqdW1wZXIgYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIHNldCB0aGUganVtcGVyIDggb2YganVtcGVyIGJsb2NrIFNXMyB0byBwb3NpdGlvbiBPTi4KKworVGhlIGp1bXBlcnMgMSBhbmQgMiBwcm9iYWJseSBhZGQgMHgwODAwLCAweDEwMDAgYW5kIDB4MTgwMCB0byBSQU0gYWRkZXJzLgorCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQgTGluZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVtcGVycyAxLTUgb2YgdGhlIGp1bXBlciBibG9jayBTVzMgY29udHJvbCB0aGUgSVJRIGxldmVsLgorCisgICAgSnVtcGVyICAgICAgICAgICAgICB8ICBJUlEKKyAgICAxICAgMiAgIDMgICA0ICAgNSAgIHwKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBPTiAgT0ZGIE9GRiBPRkYgT0ZGIHwgIDIKKyAgICBPRkYgT04gIE9GRiBPRkYgT0ZGIHwgIDMKKyAgICBPRkYgT0ZGIE9OICBPRkYgT0ZGIHwgIDQKKyAgICBPRkYgT0ZGIE9GRiBPTiAgT0ZGIHwgIDUKKyAgICBPRkYgT0ZGIE9GRiBPRkYgT04gIHwgIDcKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVycyA2LTcgb2YgdGhlIGp1bXBlciBibG9jayBTVzMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IAorcGFyYW1ldGVycy4gVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgaW4gdGhlIE9GRiBwb3NpdGlvbi4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBObyBOYW1lICoqCisoR2VuZXJpYyBNb2RlbCA5MDU4KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEFuZHJldyBKLiBLcm9sbCA8YWc3ODRAZnJlZW5ldC5idWZmYWxvLmVkdT4KKyAgLSBTb3JyeSB0aGlzIHNhdCBpbiBteSB0by1kbyBib3ggZm9yIHNvIGxvbmcsIEFuZHJldyEgKHlpa2VzIC0gb3ZlciBhCisgICAgeWVhciEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgPAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLS0tJworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gfCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgU1cyICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgIHwgICBfX19fX19fX19fXyAgICAgICAgICAgICB8X19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgfCAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgMSAyIDMgNCA1IDYgICAgICAgICAgICAgICAgICAgICBfX198ICB8CisgICB8ICA+ICA2MTE2IFJBTSB8ICAgICAgICAgX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgIDggfCAgIHwgIHwKKyAgIHwgIHxfX19fX19fX19fX3wgICAgICAgIHwyME1Ielh0YWx8ICAgICAgICAgICAgICAgICAgICAgICAgNyB8ICAgfCAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX3wgICAgICAgX19fX19fX19fXyAgICAgICA2IHwgUyB8ICB8CisgICB8ICAgIDc0TFMzNzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfC0gICAgIDUgfCBXIHwgIHwKKyAgIHwgICBfX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIEUgICB8LSAgICAgNCB8ICAgfCAgfAorICAgfCAgID5fX19fX19ffCAgICAgICAgICAgICAgX19fX19fX19fX19fX198Li4uLi4gUCAgIHwtICAgICAzIHwgMyB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgOiBPICAgfC0gICAgIDIgfCAgIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICA6IFggICB8LSAgICAgMSB8X19ffCAgfAorICAgfCAgIF9fX19fX19fX19fX19fX18gICAgICB8ICAgICAgICAgICAgICB8ICAgIDogWSAgIHwtICAgICAgICAgICB8ICB8CisgICB8ICB8ICAgICAgU1cxICAgICAgIHwgICAgIHwgICAgICBTTDkwQzY1IHwgICAgOiAgICAgfC0gICAgICAgICAgIHwgIHwKKyAgIHwgIHxfX19fX19fX19fX19fX19ffCAgICAgfCAgICAgICAgICAgICAgfCAgICA6IEIgICB8LSAgICAgICAgICAgfCAgfAorICAgfCAgICAxIDIgMyA0IDUgNiA3IDggICAgICB8ICAgICAgICAgICAgICB8ICAgIDogTyAgIHwtICAgICAgICAgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19vX19fX3wuLi4uLyBBICAgfC0gICAgX19fX19fX3wgIHwKKyAgIHwgICAgX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICAgfCAgICAgIFIgICB8LSAgIHwgICAgICAgfC0tLS0tLSwgICAKKyAgIHwgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgIEQgICB8LSAgIHwgIEJOQyAgfCAgICMgIHwKKyAgIHwgICA+IDI3NjQgUFJPTSBTT0NLRVQgICB8ICAgICAgICAgICAgICAgfF9fX19fX19fX198LSAgIHxfX19fX19ffC0tLS0tLScKKyAgIHwgICB8X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICBfX19fX19fX18gICAgICAgICAgICAgICAgfCAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5fX19fX19fX3wgPC0gNzRMUzI0NSAgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKyAgIHxfX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffCAgfAorICAgICAgIHxIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEh8ICAgICAgICAgICAgICAgfCB8CisgICAgICAgfFVfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVXwgICAgICAgICAgICAgICB8IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfAorTGVnZW5kOgorCitTTDkwQzY1IAlBUkNORVQgQ29udHJvbGxlciAvIFRyYW5zY2VpdmVyIC9Mb2dpYworU1cxCTEtNToJSVJRIFNlbGVjdAorCSAgNjoJRVQxCisJICA3OglFVDIKKwkgIDg6CVJPTSBFTkFCTEUgCitTVzIJMS0zOiAgICBNZW1vcnkgQnVmZmVyL1BST00gQWRkcmVzcworCTMtNjoJSS9PIEFkZHJlc3MgTWFwCitTVzMJMS04OglOb2RlIElEIFNlbGVjdAorQk5DCQlCTkMgUkc2Mi9VIENvbm5lY3Rpb24gCisJCSpJKiBoYXZlIGhhZCBzdWNjZXNzIHVzaW5nIFJHNTlCL1Ugd2l0aCAqTk8qIHRlcm1pbmF0b3JzIQorCQlXaGF0IGdpdmVzPyEKKworU1cxOiBUaW1lb3V0cywgSW50ZXJydXB0IGFuZCBST00KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgc2V0IG9uZSAob25seSBvbmUhKSBvZiB0aGUgZGlwIHN3aXRjaGVzCit1cCAob24pIFNXMS4uLihzd2l0Y2hlcyAxLTUpCitJUlEzLCBJUlE0LCBJUlE1LCBJUlE3LCBJUlEyLiBUaGUgTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCBpcyBJUlEyLgorCitUaGUgc3dpdGNoZXMgb24gU1cxIGxhYmVsZWQgRVhUMSAoc3dpdGNoIDYpIGFuZCBFWFQyIChzd2l0Y2ggNykKK2FyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZW91dCBwYXJhbWV0ZXJzLiBUaGVzZSB0d28gZGlwIHN3aXRjaGVzCithcmUgbm9ybWFsbHkgbGVmdCBvZmYgKGRvd24pLgorCisgICBUbyBlbmFibGUgdGhlIDhLIEJvb3QgUFJPTSBwb3NpdGlvbiBTVzEgc3dpdGNoIDggb24gKFVQKSBsYWJlbGVkIFJPTS4KKyAgIFRoZSBkZWZhdWx0IGlzIGp1bXBlciBST00gbm90IGluc3RhbGxlZC4KKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBncm91cCBTVzIgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworCisgICBTd2l0Y2ggfCBIZXggSS9PCisgICA0IDUgNiAgfCBBZGRyZXNzCisgICAtLS0tLS0tfC0tLS0tLS0tCisgICAwIDAgMCAgfCAgMjYwCisgICAwIDAgMSAgfCAgMjkwCisgICAwIDEgMCAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICB8ICAyRjAKKyAgIDEgMCAwICB8ICAzMDAKKyAgIDEgMCAxICB8ICAzNTAKKyAgIDEgMSAwICB8ICAzODAKKyAgIDEgMSAxICB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSBBZGRyZXNzIChSQU0gJiBST00pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZW1vcnkgYnVmZmVyIHJlcXVpcmVzIDJLIG9mIGEgMTZLIGJsb2NrIG9mIFJBTS4gVGhlIGJhc2Ugb2YgdGhpcworMTZLIGJsb2NrIGNhbiBiZSBsb2NhdGVkIGluIGFueSBvZiBlaWdodCBwb3NpdGlvbnMuCitTd2l0Y2hlcyAxLTMgb2Ygc3dpdGNoIGdyb3VwIFNXMiBzZWxlY3QgdGhlIEJhc2Ugb2YgdGhlIDE2SyBibG9jay4KKygwID0gRE9XTiwgMSA9IFVQKQorSSBjb3VsZCwgaG93ZXZlciwgb25seSB2ZXJpZnkgdHdvIHNldHRpbmdzLi4uCisKKyAgIFN3aXRjaHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDEgMiAzIHwgQWRkcmVzcyB8IEFkZHJlc3MKKyAgIC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIDAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMCAwIDEgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAwIHwgID8/Pz8/ICB8ICA/Pz8/PworICAgMCAxIDEgfCAgPz8/Pz8gIHwgID8/Pz8/ICAKKyAgIDEgMCAwIHwgID8/Pz8/ICB8ICA/Pz8/PworICAgMSAwIDEgfCAgPz8/Pz8gIHwgID8/Pz8/CisgICAxIDEgMCB8ICA/Pz8/PyAgfCAgPz8/Pz8KKyAgIDEgMSAxIHwgID8/Pz8/ICB8ICA/Pz8/PworCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMyBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuCitFYWNoIG5vZGUgYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoCittdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggMSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KK3N3aXRjaGVzIGluIHRoZSBET1dOIHBvc2l0aW9uIGFyZSBPRkYgKDApIGFuZCBpbiB0aGUgVVAgcG9zaXRpb24gYXJlIE9OICgxKQorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgMSAgICB8ICAgMQorICAgICAgMiAgICB8ICAgMgorICAgICAgMyAgICB8ICAgNAorICAgICAgNCAgICB8ICAgOAorICAgICAgNSAgICB8ICAxNgorICAgICAgNiAgICB8ICAzMgorICAgICAgNyAgICB8ICA2NAorICAgICAgOCAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoIyAgICAgfCAgIEhleCAgIHwgRGVjaW1hbCAKKzggNyA2IDUgNCAzIDIgMSB8IE5vZGUgSUQgfCBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKzAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkICA8LS4KKzAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxICAgIHwgCiswIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMiAgICB8CiswIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMyAgICB8CisgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgICAgICAgICB8CiswIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NSAgICB8CisgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgICAgICAgICArIERvbid0IHVzZSAwIG9yIDI1NSEKKzEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwICAgIHwKKyAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKzEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzICAgIHwKKzEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0ICAgIHwKKzEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1ICA8LScKKyAgCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFRpYXJhICoqCisobW9kZWwgdW5rbm93bikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIENocmlzdG9waCBMYW1ldGVyIDxjaHJpc3RvcGhAbGFtZXRlci5jb20+CisgIAorCitIZXJlIGlzIGluZm9ybWF0aW9uIGFib3V0IG15IGNhcmQgYXMgZmFyIGFzIEkgY291bGQgZmlndXJlIGl0IG91dDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRpYXJhCitUaWFyYSBMYW5DYXJkIG9mIFRpYXJhIENvbXB1dGVyIFN5c3RlbXMuCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworISAgICAgICAgICAgISBUcmFuc21pdHRlciBVbml0ICEgICAgICAgICAgICAgICAhCishICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAtLS0tLS0tCishICAgICAgICAgIE1FTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvYXggQ29ubmVjdG9yCishICBST00gICAgNzY1NDMyMSA8LSBJL08gICAgICAgICAgICAgICAgICAgICAtLS0tLS0tCishICA6ICA6ICAgKy0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICEKKyEgIDogIDogICAhIDkwQzY2TEohICAgICAgICAgICAgICAgICAgICAgICAgICsrKworISAgOiAgOiAgICEgICAgICAgICEgICAgICAgICAgICAgICAgICAgICAgICAgIUQgIFN3aXRjaCB0byBzZXQKKyEgIDogIDogICAhICAgICAgICAhICAgICAgICAgICAgICAgICAgICAgICAgICFJICB0aGUgTm9kZW51bWJlcgorISAgOiAgOiAgICstLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgIVAKKyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICErKworISAgICAgICAgIDIzNDU2NyA8LSBJUlEgICAgICAgICAgICAgICAgICAgICAgIQorKy0tLS0tLS0tLS0tLSEhISEhISEhISEhISEhISEhISEhISEhIS0tLS0tLS0tKworICAgICAgICAgICAgICEhISEhISEhISEhISEhISEhISEhISEhIQorCiswID0gSnVtcGVyIEluc3RhbGxlZAorMSA9IE9wZW4KKworVG9wIEp1bXBlciBsaW5lIEJpdCA3ID0gUk9NIEVuYWJsZSA2NTQ9TWVtb3J5IGxvY2F0aW9uIDMyMT1JL08KKworU2V0dGluZ3MgZm9yIE1lbW9yeSBMb2NhdGlvbiAoVG9wIEp1bXBlciBMaW5lKQorNDU2ICAgICBBZGRyZXNzIHNlbGVjdGVkCiswMDAJQzAwMDAKKzAwMSAgICAgQzQwMDAKKzAxMCAgICAgQ0MwMDAKKzAxMSAgICAgRDAwMDAKKzEwMCAgICAgRDQwMDAKKzEwMSAgICAgRDgwMDAKKzExMCAgICAgREMwMDAgICAgIAorMTExICAgICBFMDAwMAorCitTZXR0aW5ncyBmb3IgSS9PIEFkZHJlc3MgKFRvcCBKdW1wZXIgTGluZSkKKzEyMyAgICAgUG9ydAorMDAwCTI2MAorMDAxCTI5MAorMDEwCTJFMAorMDExCTJGMAorMTAwCTMwMAorMTAxCTM1MAorMTEwCTM4MAorMTExCTNFMAorCitTZXR0aW5ncyBmb3IgSVJRIFNlbGVjdGlvbiAoTG93ZXIgSnVtcGVyIExpbmUpCisyMzQ1NjcKKzAxMTExMSBJUlEgMgorMTAxMTExIElSUSAzCisxMTAxMTEgSVJRIDQKKzExMTAxMSBJUlEgNQorMTExMTEwIElSUSA3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworT3RoZXIgQ2FyZHMKKy0tLS0tLS0tLS0tCisKK0kgaGF2ZSBubyBpbmZvcm1hdGlvbiBvbiBvdGhlciBtb2RlbHMgb2YgQVJDbmV0IGNhcmRzIGF0IHRoZSBtb21lbnQuICBQbGVhc2UKK3NlbmQgYW55IGFuZCBhbGwgaW5mbyB0bzoKKwlhcGVud2FyckB3b3JsZHZpc2lvbnMuY2EKKworVGhhbmtzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzBmYzQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC50eHQKQEAgLTAsMCArMSw1NTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05PVEU6ICBTZWUgYWxzbyBhcmNuZXQtaGFyZHdhcmUudHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBqdW1wZXItc2V0dGluZworYW5kIGNhYmxpbmcgaW5mb3JtYXRpb24gaWYgeW91J3JlIGxpa2UgbWFueSBvZiB1cyBhbmQgZGlkbid0IGhhcHBlbiB0byBnZXQgYQorbWFudWFsIHdpdGggeW91ciBBUkNuZXQgY2FyZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2Ugbm8gb25lIHNlZW1zIHRvIGxpc3RlbiB0byBtZSBvdGhlcndpc2UsIHBlcmhhcHMgYSBwb2VtIHdpbGwgZ2V0IHlvdXIKK2F0dGVudGlvbjoKKwkJVGhpcyBkcml2ZXIncyBnZXR0aW5nIGZhdCBhbmQgYmVlZnksCisJCUJ1dCBteSBjYXQgaXMgc3RpbGwgbmFtZWQgRmlmaS4KKworSG1tLCBJIHRoaW5rIEknbSBhbGxvd2VkIHRvIGNhbGwgdGhhdCBhIHBvZW0sIGV2ZW4gdGhvdWdoIGl0J3Mgb25seSB0d28KK2xpbmVzLiAgSGV5LCBJJ20gaW4gQ29tcHV0ZXIgU2NpZW5jZSwgbm90IEVuZ2xpc2guICBHaXZlIG1lIGEgYnJlYWsuCisKK1RoZSBwb2ludCBpczogIEkgUkVBTExZIFJFQUxMWSBSRUFMTFkgUkVBTExZIFJFQUxMWSB3YW50IHRvIGhlYXIgZnJvbSB5b3UgaWYKK3lvdSB0ZXN0IHRoaXMgYW5kIGdldCBpdCB3b3JraW5nLiAgT3IgaWYgeW91IGRvbid0LiAgT3IgYW55dGhpbmcuCisKK0FSQ25ldCAwLjMyIEFMUEhBIGZpcnN0IG1hZGUgaXQgaW50byB0aGUgTGludXgga2VybmVsIDEuMS44MCAtIHRoaXMgd2FzCituaWNlLCBidXQgYWZ0ZXIgdGhhdCBldmVuIEZFV0VSIHBlb3BsZSBzdGFydGVkIHdyaXRpbmcgdG8gbWUgYmVjYXVzZSB0aGV5CitkaWRuJ3QgZXZlbiBoYXZlIHRvIGluc3RhbGwgdGhlIHBhdGNoLiAgPHNpZ2g+CisKK0NvbWUgb24sIGJlIGEgc3BvcnQhICBTZW5kIG1lIGEgc3VjY2VzcyByZXBvcnQhCisKKyhoZXksIHRoYXQgd2FzIGV2ZW4gYmV0dGVyIHRoYW4gbXkgb3JpZ2luYWwgcG9lbS4uLiB0aGlzIGlzIGdldHRpbmcgYmFkISkKKworCistLS0tLS0tLQorV0FSTklORzoKKy0tLS0tLS0tCisKK0lmIHlvdSBkb24ndCBlLW1haWwgbWUgYWJvdXQgeW91ciBzdWNjZXNzL2ZhaWx1cmUgc29vbiwgSSBtYXkgYmUgZm9yY2VkIHRvCitzdGFydCBTSU5HSU5HLiAgQW5kIHdlIGRvbid0IHdhbnQgdGhhdCwgZG8gd2U/CisKKyhZb3Uga25vdywgaXQgbWlnaHQgYmUgYXJndWVkIHRoYXQgSSdtIHB1c2hpbmcgdGhpcyBwb2ludCBhIGxpdHRsZSB0b28gbXVjaC4gCitJZiB5b3UgdGhpbmsgc28sIHdoeSBub3QgZmxhbWUgbWUgaW4gYSBxdWljayBsaXR0bGUgZS1tYWlsPyAgUGxlYXNlIGFsc28KK2luY2x1ZGUgdGhlIHR5cGUgb2YgY2FyZChzKSB5b3UncmUgdXNpbmcsIHNvZnR3YXJlLCBzaXplIG9mIG5ldHdvcmssIGFuZAord2hldGhlciBpdCdzIHdvcmtpbmcgb3Igbm90LikKKworTXkgZS1tYWlsIGFkZHJlc3MgaXM6IGFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCQkKK1RoZXNlIGFyZSB0aGUgQVJDbmV0IGRyaXZlcnMgZm9yIExpbnV4LgorCisKK1RoaXMgbmV3IHJlbGVhc2UgKDIuOTEpIGhhcyBiZWVuIHB1dCB0b2dldGhlciBieSBEYXZpZCBXb29kaG91c2UgCis8ZHdtdzJAY2FtLmFjLnVrPiwgaW4gYW4gYXR0ZW1wdCB0byB0aWR5IHVwIHRoZSBkcml2ZXIgYWZ0ZXIgYWRkaW5nIHN1cHBvcnQgCitmb3IgeWV0IGFub3RoZXIgY2hpcHNldC4gTm93IHRoZSBnZW5lcmljIHN1cHBvcnQgaGFzIGJlZW4gc2VwYXJhdGVkIGZyb20gdGhlCitpbmRpdmlkdWFsIGNoaXBzZXQgZHJpdmVycywgYW5kIHRoZSBzb3VyY2UgZmlsZXMgYXJlbid0IHF1aXRlIHNvIHBhY2tlZCB3aXRoCisjaWZkZWZzISBJJ3ZlIGNoYW5nZWQgdGhpcyBmaWxlIGEgYml0LCBidXQga2VwdCBpdCBpbiB0aGUgZmlyc3QgcGVyc29uIGZyb20KK0F2ZXJ5LCBiZWNhdXNlIEkgZGlkbid0IHdhbnQgdG8gY29tcGxldGVseSByZXdyaXRlIGl0LgorCitUaGUgcHJldmlvdXMgcmVsZWFzZSByZXN1bHRlZCBmcm9tIG1hbnkgbW9udGhzIG9mIG9uLWFuZC1vZmYgZWZmb3J0IGZyb20gbWUKKyhBdmVyeSBQZW5uYXJ1biksIG1hbnkgYnVnIHJlcG9ydHMvZml4ZXMgYW5kIHN1Z2dlc3Rpb25zIGZyb20gb3RoZXJzLCBhbmQgaW4KK3BhcnRpY3VsYXIgYSBsb3Qgb2YgaW5wdXQgYW5kIGNvZGluZyBmcm9tIFRvbWFzeiBNb3R5bGV3c2tpLiAgU3RhcnRpbmcgd2l0aAorQVJDbmV0IDIuMTAgQUxQSEEsIFRvbWFzeidzIGFsbC1uZXctYW5kLWltcHJvdmVkIFJGQzEwNTEgc3VwcG9ydCBoYXMgYmVlbgoraW5jbHVkZWQgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgZmluZSEKKworCitXaGVyZSBkbyBJIGRpc2N1c3MgdGhlc2UgZHJpdmVycz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUb21hc3ogaGFzIGJlZW4gc28ga2luZCBhcyB0byBzZXQgdXAgYSBuZXcgYW5kIGltcHJvdmVkIG1haWxpbmcgbGlzdC4gCitTdWJzY3JpYmUgYnkgc2VuZGluZyBhIG1lc3NhZ2Ugd2l0aCB0aGUgQk9EWSAic3Vic2NyaWJlIGxpbnV4LWFyY25ldCBZT1VSCitSRUFMIE5BTUUiIHRvIGxpc3RzZXJ2QHRpY2h5LmNoLnVqLmVkdS5wbC4gIFRoZW4sIHRvIHN1Ym1pdCBtZXNzYWdlcyB0byB0aGUKK2xpc3QsIG1haWwgdG8gbGludXgtYXJjbmV0QHRpY2h5LmNoLnVqLmVkdS5wbC4KKworVGhlcmUgYXJlIGFyY2hpdmVzIG9mIHRoZSBtYWlsaW5nIGxpc3QgYXQ6CisJaHR0cDovL3RpY2h5LmNoLnVqLmVkdS5wbC9saXN0cy9saW51eC1hcmNuZXQKKworVGhlIHBlb3BsZSBvbiBsaW51eC1uZXRAdmdlci5rZXJuZWwub3JnIGhhdmUgYWxzbyBiZWVuIGtub3duIHRvIGJlIHZlcnkKK2hlbHBmdWwsIGVzcGVjaWFsbHkgd2hlbiB3ZSdyZSB0YWxraW5nIGFib3V0IEFMUEhBIExpbnV4IGtlcm5lbHMgdGhhdCBtYXkgb3IKK21heSBub3Qgd29yayByaWdodCBpbiB0aGUgZmlyc3QgcGxhY2UuCisKKworT3RoZXIgRHJpdmVycyBhbmQgSW5mbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHRyeSBteSBBUkNORVQgcGFnZSBvbiB0aGUgV29ybGQgV2lkZSBXZWIgYXQ6CisJaHR0cDovL3d3dy53b3JsZHZpc2lvbnMuY2EvfmFwZW53YXJyL2FyY25ldC8KKworQWxzbywgU01DIChvbmUgb2YgdGhlIGNvbXBhbmllcyB0aGF0IG1ha2VzIEFSQ25ldCBjYXJkcykgaGFzIGEgV1dXIHNpdGUgeW91CittaWdodCBiZSBpbnRlcmVzdGVkIGluLCB3aGljaCBpbmNsdWRlcyBzZXZlcmFsIGRyaXZlcnMgZm9yIHZhcmlvdXMgY2FyZHMKK2luY2x1ZGluZyBBUkNuZXQuICBUcnk6CisJaHR0cDovL3d3dy5zbWMuY29tLworCQorUGVyZm9ybWFuY2UgVGVjaG5vbG9naWVzIG1ha2VzIHZhcmlvdXMgbmV0d29yayBzb2Z0d2FyZSB0aGF0IHN1cHBvcnRzCitBUkNuZXQ6CisJaHR0cDovL3d3dy5wZXJmdGVjaC5jb20vIG9yIGZ0cCB0byBmdHAucGVyZnRlY2guY29tLgorCQorTm92ZWxsIG1ha2VzIGEgbmV0d29ya2luZyBzdGFjayBmb3IgRE9TIHdoaWNoIGluY2x1ZGVzIEFSQ25ldCBkcml2ZXJzLiAgVHJ5CitGVFBpbmcgdG8gZnRwLm5vdmVsbC5jb20uCisKK1lvdSBjYW4gZ2V0IHRoZSBDcnlud3IgcGFja2V0IGRyaXZlciBjb2xsZWN0aW9uIChpbmNsdWRpbmcgYXJjZXRoZXIuY29tLCB0aGUKK29uZSB5b3UnbGwgd2FudCB0byB1c2Ugd2l0aCBBUkNuZXQgY2FyZHMpIGZyb20KK29hay5vYWtsYW5kLmVkdTovc2ltdGVsL21zZG9zL3BrdGRydnIuIEl0IHdvbid0IHdvcmsgcGVyZmVjdGx5IG9uIGEgMzg2Kword2l0aG91dCBwYXRjaGVzLCB0aG91Z2gsIGFuZCBhbHNvIGRvZXNuJ3QgbGlrZSBzZXZlcmFsIGNhcmRzLiAgRml4ZWQKK3ZlcnNpb25zIGFyZSBhdmFpbGFibGUgb24gbXkgV1dXIHBhZ2UsIG9yIHZpYSBlLW1haWwgaWYgeW91IGRvbid0IGhhdmUgV1dXCithY2Nlc3MuIAorCisKK0luc3RhbGxpbmcgdGhlIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCB5b3Ugd2lsbCBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIGluc3RhbGwgdGhlIGRyaXZlciBpczoKKwltYWtlIGNvbmZpZworCQkoYmUgc3VyZSB0byBjaG9vc2UgQVJDbmV0IGluIHRoZSBuZXR3b3JrIGRldmljZXMgCisJCWFuZCBhdCBsZWFzdCBvbmUgY2hpcHNldCBkcml2ZXIuKQorCW1ha2UgY2xlYW4KKwltYWtlIHpJbWFnZQorCQorSWYgeW91IG9idGFpbmVkIHRoaXMgQVJDbmV0IHBhY2thZ2UgYXMgYW4gdXBncmFkZSB0byB0aGUgQVJDbmV0IGRyaXZlciBpbgoreW91ciBjdXJyZW50IGtlcm5lbCwgeW91IHdpbGwgbmVlZCB0byBmaXJzdCBjb3B5IGFyY25ldC5jIG92ZXIgdGhlIG9uZSBpbgordGhlIGxpbnV4L2RyaXZlcnMvbmV0IGRpcmVjdG9yeS4KKworWW91IHdpbGwga25vdyB0aGUgZHJpdmVyIGlzIGluc3RhbGxlZCBwcm9wZXJseSBpZiB5b3UgZ2V0IHNvbWUgQVJDbmV0CittZXNzYWdlcyB3aGVuIHlvdSByZWJvb3QgaW50byB0aGUgbmV3IExpbnV4IGtlcm5lbC4KKworVGhlcmUgYXJlIGZvdXIgY2hpcHNldCBvcHRpb25zOgorCisgMS4gU3RhbmRhcmQgQVJDbmV0IENPTTkweHggY2hpcHNldC4KKworVGhpcyBpcyB0aGUgbm9ybWFsIEFSQ25ldCBjYXJkLCB3aGljaCB5b3UndmUgcHJvYmFibHkgZ290LiBUaGlzIGlzIHRoZSBvbmx5CitjaGlwc2V0IGRyaXZlciB3aGljaCB3aWxsIGF1dG9wcm9iZSBpZiBub3QgdG9sZCB3aGVyZSB0aGUgY2FyZCBpcy4KK0l0IGZvbGxvd2luZyBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmU6CisgY29tOTB4eD1bPGlvPlssPGlycT5bLDxzaG1lbT5dXV1bLDxuYW1lPl0gfCA8bmFtZT4KKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIGlvPTxpbz4gaXJxPTxpcnE+IHNobWVtPTxzaG1lbT4gZGV2aWNlPTxuYW1lPgorCitUbyBkaXNhYmxlIHRoZSBhdXRvcHJvYmUsIGp1c3Qgc3BlY2lmeSAiY29tOTB4eD0iIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorVG8gc3BlY2lmeSB0aGUgbmFtZSBhbG9uZSwgYnV0IGFsbG93IGF1dG9wcm9iZSwganVzdCBwdXQgImNvbTkweHg9PG5hbWU+IgorCisgMi4gQVJDbmV0IENPTTIwMDIwIGNoaXBzZXQuCisKK1RoaXMgaXMgdGhlIG5ldyBjaGlwc2V0IGZyb20gU01DIHdpdGggc3VwcG9ydCBmb3IgcHJvbWlzY3VvdXMgbW9kZSAocGFja2V0IAorc25pZmZpbmcpLCBleHRyYSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLCBldGMuIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vCitzZW5zaWJsZSBtZXRob2Qgb2YgYXV0b3Byb2JpbmcgZm9yIHRoZXNlIGNhcmRzLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBJL08KK2FkZHJlc3Mgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlOgorIGNvbTIwMDIwPTxpbz5bLDxpcnE+Wyw8bm9kZV9JRD5bLGJhY2twbGFuZVssQ0tQWyx0aW1lb3V0XV1dXV1bLG5hbWVdCisKK0lmIHlvdSBsb2FkIHRoZSBjaGlwc2V0IHN1cHBvcnQgYXMgYSBtb2R1bGUsIHRoZSBvcHRpb25zIGFyZToKKyBpbz08aW8+IGlycT08aXJxPiBub2RlPTxub2RlX0lEPiBiYWNrcGxhbmU9PGJhY2twbGFuZT4gY2xvY2s9PENLUD4KKyB0aW1lb3V0PTx0aW1lb3V0PiBkZXZpY2U9PG5hbWU+CisKK1RoZSBDT00yMDAyMCBjaGlwc2V0IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBub2RlIElEIGluIHNvZnR3YXJlLCBvdmVycmlkaW5nIHRoZQorZGVmYXVsdCB3aGljaCBpcyBzdGlsbCBzZXQgaW4gRElQIHN3aXRjaGVzIG9uIHRoZSBjYXJkLiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUKK0NPTTIwMDIwIGRhdGEgc2hlZXRzLCBhbmQgeW91IGRvbid0IGtub3cgd2hhdCB0aGUgb3RoZXIgdGhyZWUgb3B0aW9ucyByZWZlcgordG8sIHRoZW4gdGhleSB3b24ndCBpbnRlcmVzdCB5b3UgLSBmb3JnZXQgdGhlbS4KKworIDMuIEFSQ25ldCBDT005MHh4IGNoaXBzZXQgaW4gSU8tbWFwcGVkIG1vZGUuCisKK1RoaXMgd2lsbCBhbHNvIHdvcmsgd2l0aCB0aGUgbm9ybWFsIEFSQ25ldCBjYXJkcywgYnV0IGRvZXNuJ3QgdXNlIHRoZSBzaGFyZWQKK21lbW9yeS4gSXQgcGVyZm9ybXMgbGVzcyB3ZWxsIHRoYW4gdGhlIGFib3ZlIGRyaXZlciwgYnV0IGlzIHByb3ZpZGVkIGluIGNhc2UKK3lvdSBoYXZlIGEgY2FyZCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgc2hhcmVkIG1lbW9yeSwgb3IgKHN0cmFuZ2VseSkgaW4gY2FzZQoreW91IGhhdmUgc28gbWFueSBBUkNuZXQgY2FyZHMgaW4geW91ciBtYWNoaW5lIHRoYXQgeW91IHJ1biBvdXQgb2Ygc2htZW0gc2xvdHMuCitJZiB5b3UgZG9uJ3QgZ2l2ZSB0aGUgSU8gYWRkcmVzcyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgdGhlbiB0aGUgZHJpdmVyCit3aWxsIG5vdCBmaW5kIHRoZSBjYXJkLgorVGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZToKKyBjb205MGlvPTxpbz5bLDxpcnE+XVssPG5hbWU+XSAKKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIGlvPTxpbz4gaXJxPTxpcnE+IGRldmljZT08bmFtZT4KKworIDQuIEFSQ25ldCBSSU0gSSBjYXJkcy4KKworVGhlc2UgYXJlIENPTTkweHggY2hpcHMgd2hpY2ggYXJlIF9jb21wbGV0ZWx5XyBtZW1vcnkgbWFwcGVkLiBUaGUgc3VwcG9ydCBmb3IKK3RoZXNlIGlzIG5vdCB0ZXN0ZWQuIElmIHlvdSBoYXZlIG9uZSwgcGxlYXNlIG1haWwgdGhlIGF1dGhvciB3aXRoIGEgc3VjY2VzcyAKK3JlcG9ydC4gQWxsIG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQsIGV4Y2VwdCB0aGUgZGV2aWNlIG5hbWUuCitDb21tYW5kIGxpbmUgb3B0aW9uczoKKyBhcmNyaW1pPTxzaG1lbT4sPGlycT4sPG5vZGVfSUQ+Wyw8bmFtZT5dCisKK0lmIHlvdSBsb2FkIHRoZSBjaGlwc2V0IHN1cHBvcnQgYXMgYSBtb2R1bGUsIHRoZSBvcHRpb25zIGFyZToKKyBzaG1lbT08c2htZW0+IGlycT08aXJxPiBub2RlPTxub2RlX0lEPiBkZXZpY2U9PG5hbWU+CisKKworTG9hZGFibGUgTW9kdWxlIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbmZpZ3VyZSBhbmQgcmVidWlsZCBMaW51eC4gIFdoZW4gYXNrZWQsIGFuc3dlciAnbScgdG8gIkdlbmVyaWMgQVJDbmV0IAorc3VwcG9ydCIgYW5kIHRvIHN1cHBvcnQgZm9yIHlvdXIgQVJDbmV0IGNoaXBzZXQgaWYgeW91IHdhbnQgdG8gdXNlIHRoZQorbG9hZGFibGUgbW9kdWxlLiBZb3UgY2FuIGFsc28gc2F5ICd5JyB0byAiR2VuZXJpYyBBUkNuZXQgc3VwcG9ydCIgYW5kICdtJyAKK3RvIHRoZSBjaGlwc2V0IHN1cHBvcnQgaWYgeW91IHdpc2guCisKKwltYWtlIGNvbmZpZworCW1ha2UgY2xlYW4JCisJbWFrZSB6SW1hZ2UKKwltYWtlIG1vZHVsZXMKKwkKK0lmIHlvdSdyZSB1c2luZyBhIGxvYWRhYmxlIG1vZHVsZSwgeW91IG5lZWQgdG8gdXNlIGluc21vZCB0byBsb2FkIGl0LCBhbmQKK3lvdSBjYW4gc3BlY2lmeSB2YXJpb3VzIGNoYXJhY3RlcmlzdGljcyBvZiB5b3VyIGNhcmQgb24gdGhlIGNvbW1hbmQKK2xpbmUuICAoSW4gcmVjZW50IHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsIGF1dG9wcm9iaW5nIGlzIG11Y2ggbW9yZSByZWxpYWJsZQorYW5kIHdvcmtzIGFzIGEgbW9kdWxlLCBzbyBtb3N0IG9mIHRoaXMgaXMgbm93IHVubmVjZXNzYXJ5LikKKworRm9yIGV4YW1wbGU6CisJY2QgL3Vzci9zcmMvbGludXgvbW9kdWxlcworCWluc21vZCBhcmNuZXQubworCWluc21vZCBjb205MHh4Lm8KKwlpbnNtb2QgY29tMjAwMjAubyBpbz0weDJlMCBkZXZpY2U9ZXRoMQorCQorCitVc2luZyB0aGUgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBidWlsZCB5b3VyIGtlcm5lbCB3aXRoIEFSQ25ldCBDT005MHh4IHN1cHBvcnQgaW5jbHVkZWQsIGl0IHNob3VsZCAKK3Byb2JlIGZvciB5b3VyIGNhcmQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBib290LiBJZiB5b3UgdXNlIGEgZGlmZmVyZW50CitjaGlwc2V0IGRyaXZlciBjb21wbGllZCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IGdpdmUgdGhlIG5lY2Vzc2FyeSBvcHRpb25zCitvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgYXMgZGV0YWlsZWQgYWJvdmUuCisKK0dvIHJlYWQgdGhlIE5FVC0yLUhPV1RPIGFuZCBFVEhFUk5FVC1IT1dUTyBmb3IgTGludXg7IHRoZXkgc2hvdWxkIGJlCithdmFpbGFibGUgd2hlcmUgeW91IHBpY2tlZCB1cCB0aGlzIGRyaXZlci4gIFRoaW5rIG9mIHlvdXIgQVJDbmV0IGFzIGEKK3NvdXBlZC11cCAob3IgZG93biwgYXMgdGhlIGNhc2UgbWF5IGJlKSBFdGhlcm5ldCBjYXJkLgorCitCeSB0aGUgd2F5LCBiZSBzdXJlIHRvIGNoYW5nZSBhbGwgcmVmZXJlbmNlcyBmcm9tICJldGgwIiB0byAiYXJjMCIgaW4gdGhlCitIT1dUT3MuICBSZW1lbWJlciB0aGF0IEFSQ25ldCBpc24ndCBhICJ0cnVlIiBFdGhlcm5ldCwgYW5kIHRoZSBkZXZpY2UgbmFtZQoraXMgRElGRkVSRU5ULgorCisKK011bHRpcGxlIENhcmRzIGluIE9uZSBDb21wdXRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbnV4IGhhcyBwcmV0dHkgZ29vZCBzdXBwb3J0IGZvciB0aGlzIG5vdywgYnV0IHNpbmNlIEkndmUgYmVlbiBidXN5LCB0aGUKK0FSQ25ldCBkcml2ZXIgaGFzIHNvbWV3aGF0IHN1ZmZlcmVkIGluIHRoaXMgcmVzcGVjdC4gQ09NOTB4eCBzdXBwb3J0LCBpZiAKK2NvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgd2lsbCAodHJ5IHRvKSBhdXRvZGV0ZWN0IGFsbCB0aGUgaW5zdGFsbGVkIGNhcmRzLiAKKworSWYgeW91IGhhdmUgb3RoZXIgY2FyZHMsIHdpdGggc3VwcG9ydCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZW4geW91IGNhbiAKK2p1c3QgcmVwZWF0IHRoZSBvcHRpb25zIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBlLmcuOgorTElMTzogbGludXggY29tMjAwMjA9MHgyZTAgY29tMjAwMjA9MHgzODAgY29tOTBpbz0weDI2MAorCitJZiB5b3UgaGF2ZSB0aGUgY2hpcHNldCBzdXBwb3J0IGJ1aWx0IGFzIGEgbG9hZGFibGUgbW9kdWxlLCB0aGVuIHlvdSBuZWVkIHRvIAorZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKwlpbnNtb2QgLW8gYXJjMCBjb205MHh4CisJaW5zbW9kIC1vIGFyYzEgY29tMjAwMjAgaW89MHgyZTAKKwlpbnNtb2QgLW8gYXJjMiBjb205MHh4CitUaGUgQVJDbmV0IGRyaXZlcnMgd2lsbCBub3cgc29ydCBvdXQgdGhlaXIgbmFtZXMgYXV0b21hdGljYWxseS4KKworCitIb3cgZG8gSSBnZXQgaXQgdG8gd29yayB3aXRoLi4uPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTkZTOiBTaG91bGQgYmUgZmluZSBsaW51eC0+bGludXgsIGp1c3QgcHJldGVuZCB5b3UncmUgdXNpbmcgRXRoZXJuZXQgY2FyZHMuIAorICAgICAgICBvYWsub2FrbGFuZC5lZHU6L3NpbXRlbC9tc2Rvcy9uZnMgaGFzIHNvbWUgbmljZSBET1MgY2xpZW50cy4gIFRoZXJlCisgICAgICAgIGlzIGFsc28gYSBET1MtYmFzZWQgTkZTIHNlcnZlciBjYWxsZWQgU09TUy4gIEl0IGRvZXNuJ3QgbXVsdGl0YXNrCisgICAgICAgIHF1aXRlIHRoZSB3YXkgTGludXggZG9lcyAoYWN0dWFsbHksIGl0IGRvZXNuJ3QgbXVsdGl0YXNrIEFUIEFMTCkgYnV0CisgICAgICAgIHlvdSBuZXZlciBrbm93IHdoYXQgeW91IG1pZ2h0IG5lZWQuCisgICAgICAgIAorICAgICAgICBXaXRoIEFtaVRDUCAoYW5kIHBvc3NpYmx5IG90aGVycyksIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlIGZvbGxvd2luZworICAgICAgICBvcHRpb25zIGluIHlvdXIgQW1pZ2EgbmZzdGFiOiAgTUQgMTAyNCBNUiAxMDI0IE1XIDEwMjQKKyAgICAgICAgKFRoYW5rcyB0byBDaHJpc3RpYW4gR290dHNjaGxpbmcgPGZlcmtzeUBpbmRpZ28udG5nLm9jaGUuZGU+CisJZm9yIHRoaXMuKQorCQorCVByb2JhYmx5IHRoZXNlIHJlZmVyIHRvIG1heGltdW0gTkZTIGRhdGEvcmVhZC93cml0ZSBibG9jayBzaXplcy4gIEkKKwlkb24ndCBrbm93IHdoeSB0aGUgZGVmYXVsdHMgb24gdGhlIEFtaWdhIGRpZG4ndCB3b3JrOyB3cml0ZSB0byBtZSBpZgorCXlvdSBrbm93IG1vcmUuCisKK0RPUzogSWYgeW91J3JlIHVzaW5nIHRoZSBmcmVld2FyZSBhcmNldGhlci5jb20sIHlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwKKyAgICAgICAgdGhlIGRyaXZlciBwYXRjaCBmcm9tIG15IHdlYiBwYWdlLiAgSXQgaGVscHMgd2l0aCBQQy9UQ1AsIGFuZCBhbHNvCisgICAgICAgIGNhbiBnZXQgYXJjZXRoZXIgdG8gbG9hZCBpZiBpdCB0aW1lZCBvdXQgdG9vIHF1aWNrbHkgZHVyaW5nCisgICAgICAgIGluaXRpYWxpemF0aW9uLiAgSW4gZmFjdCwgaWYgeW91IHVzZSBpdCBvbiBhIDM4NisgeW91IFJFQUxMWSBuZWVkCisgICAgICAgIHRoZSBwYXRjaCwgcmVhbGx5LgorCQorV2luZG93czogIFNlZSBET1MgOikgIFRydW1wZXQgV2luc29jayB3b3JrcyBmaW5lIHdpdGggZWl0aGVyIHRoZSBOb3ZlbGwgb3IKKwlBcmNldGhlciBjbGllbnQsIGFzc3VtaW5nIHlvdSByZW1lbWJlciB0byBsb2FkIHdpbnBrdCBvZiBjb3Vyc2UuCisKK0xBTiBNYW5hZ2VyIGFuZCBXaW5kb3dzIGZvciBXb3JrZ3JvdXBzOiBUaGVzZSBwcm9ncmFtcyB1c2UgcHJvdG9jb2xzIHRoYXQKKyAgICAgICAgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBJbnRlcm5ldCBzdGFuZGFyZC4gIFRoZXkgdHJ5IHRvIHByZXRlbmQKKyAgICAgICAgdGhlIGNhcmRzIGFyZSBFdGhlcm5ldCwgYW5kIGNvbmZ1c2UgZXZlcnlvbmUgZWxzZSBvbiB0aGUgbmV0d29yay4gCisgICAgICAgIAorICAgICAgICBIb3dldmVyLCB2Mi4wMCBhbmQgaGlnaGVyIG9mIHRoZSBMaW51eCBBUkNuZXQgZHJpdmVyIHN1cHBvcnRzIHRoaXMKKyAgICAgICAgcHJvdG9jb2wgdmlhIHRoZSAnYXJjMGUnIGRldmljZS4gIFNlZSB0aGUgc2VjdGlvbiBvbiAiTXVsdGlwcm90b2NvbAorICAgICAgICBTdXBwb3J0IiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCVVzaW5nIHRoZSBmcmVld2FyZSBTYW1iYSBzZXJ2ZXIgYW5kIGNsaWVudHMgZm9yIExpbnV4LCB5b3UgY2FuIG5vdworCWludGVyZmFjZSBxdWl0ZSBuaWNlbHkgd2l0aCBUQ1AvSVAtYmFzZWQgV2ZXZyBvciBMYW4gTWFuYWdlcgorCW5ldHdvcmtzLgorCQorV2luZG93cyA5NTogVG9vbHMgYXJlIGluY2x1ZGVkIHdpdGggV2luOTUgdGhhdCBsZXQgeW91IHVzZSBlaXRoZXIgdGhlIExBTk1BTgorCXN0eWxlIG5ldHdvcmsgZHJpdmVycyAoTkRJUykgb3IgTm92ZWxsIGRyaXZlcnMgKE9ESSkgdG8gaGFuZGxlIHlvdXIKKwlBUkNuZXQgcGFja2V0cy4gIElmIHlvdSB1c2UgT0RJLCB5b3UnbGwgbmVlZCB0byB1c2UgdGhlICdhcmMwJworCWRldmljZSB3aXRoIExpbnV4LiAgSWYgeW91IHVzZSBORElTLCB0aGVuIHRyeSB0aGUgJ2FyYzBlJyBkZXZpY2UuIAorCVNlZSB0aGUgIk11bHRpcHJvdG9jb2wgU3VwcG9ydCIgc2VjdGlvbiBiZWxvdyBpZiB5b3UgbmVlZCBhcmMwZSwKKwl5b3UncmUgY29tcGxldGVseSBpbnNhbmUsIGFuZC9vciB5b3UgbmVlZCB0byBidWlsZCBzb21lIGtpbmQgb2YKKwloeWJyaWQgbmV0d29yayB0aGF0IHVzZXMgYm90aCBlbmNhcHN1bGF0aW9uIHR5cGVzLgorCitPUy8yOiBJJ3ZlIGJlZW4gdG9sZCBpdCB3b3JrcyB1bmRlciBXYXJwIENvbm5lY3Qgd2l0aCBhbiBBUkNuZXQgZHJpdmVyIGZyb20KKwlTTUMuICBZb3UgbmVlZCB0byB1c2UgdGhlICdhcmMwZScgaW50ZXJmYWNlIGZvciB0aGlzLiAgSWYgeW91IGdldAorCXRoZSBTTUMgZHJpdmVyIHRvIHdvcmsgd2l0aCB0aGUgVENQL0lQIHN0dWZmIGluY2x1ZGVkIGluIHRoZQorCSJub3JtYWwiIFdhcnAgQm9udXMgUGFjaywgbGV0IG1lIGtub3cuCisKKwlmdHAubWljcm9zb2Z0LmNvbSBhbHNvIGhhcyBhIGZyZWV3YXJlICJMYW4gTWFuYWdlciBmb3IgT1MvMiIgY2xpZW50CisJd2hpY2ggc2hvdWxkIHVzZSB0aGUgc2FtZSBwcm90b2NvbCBhcyBXZldnIGRvZXMuICBJIGhhZCBubyBsdWNrCisJaW5zdGFsbGluZyBpdCB1bmRlciBXYXJwLCBob3dldmVyLiAgUGxlYXNlIG1haWwgbWUgd2l0aCBhbnkgcmVzdWx0cy4KKworTmV0QlNEL0FtaVRDUDogVGhlc2UgdXNlIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBJbnRlcm5ldCBzdGFuZGFyZCBBUkNuZXQKKwlwcm90b2NvbCAoUkZDMTA1MSkgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBMaW51eCBkcml2ZXIgdjIuMTAKKwlBTFBIQSBhbmQgYWJvdmUgdXNpbmcgdGhlIGFyYzBzIGRldmljZS4gKFNlZSAiTXVsdGlwcm90b2NvbCBBUkNuZXQiCisJYmVsb3cuKSAgKiogTmV3ZXIgdmVyc2lvbnMgb2YgTmV0QlNEIGFwcGFyZW50bHkgc3VwcG9ydCBSRkMxMjAxLgorCisKK1VzaW5nIE11bHRpcHJvdG9jb2wgQVJDbmV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQVJDbmV0IGRyaXZlciB2Mi4xMCBBTFBIQSBzdXBwb3J0cyB0aHJlZSBwcm90b2NvbHMsIGVhY2ggb24gaXRzIG93bgorInZpcnR1YWwgbmV0d29yayBkZXZpY2UiOgorCisJYXJjMCAgLSBSRkMxMjAxIHByb3RvY29sLCB0aGUgb2ZmaWNpYWwgSW50ZXJuZXQgc3RhbmRhcmQgd2hpY2gganVzdAorCQloYXBwZW5zIHRvIGJlIDEwMCUgY29tcGF0aWJsZSB3aXRoIE5vdmVsbCdzIFRSWE5FVCBkcml2ZXIuIAorCQlWZXJzaW9uIDEuMDAgb2YgdGhlIEFSQ25ldCBkcml2ZXIgc3VwcG9ydGVkIF9vbmx5XyB0aGlzCisJCXByb3RvY29sLiAgYXJjMCBpcyB0aGUgZmFzdGVzdCBvZiB0aGUgdGhyZWUgcHJvdG9jb2xzIChmb3IKKwkJd2hhdGV2ZXIgcmVhc29uKSwgYW5kIGFsbG93cyBsYXJnZXIgcGFja2V0cyB0byBiZSB1c2VkCisJCWJlY2F1c2UgaXQgc3VwcG9ydHMgUkZDMTIwMSAicGFja2V0IHNwbGl0dGluZyIgb3BlcmF0aW9ucy4gCisJCVVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgdG8gdXNlIGEgZGlmZmVyZW50IHByb3RvY29sLAorCQlJIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3Ugc3RpY2sgd2l0aCB0aGlzIG9uZS4KKwkJCisJYXJjMGUgLSAiRXRoZXJuZXQtRW5jYXBzdWxhdGlvbiIgd2hpY2ggc2VuZHMgcGFja2V0cyBvdmVyIEFSQ25ldAorCQl0aGF0IGFyZSBhY3R1YWxseSBhIGxvdCBsaWtlIEV0aGVybmV0IHBhY2tldHMsIGluY2x1ZGluZyB0aGUKKwkJNi1ieXRlIGhhcmR3YXJlIGFkZHJlc3Nlcy4gIFRoaXMgcHJvdG9jb2wgaXMgY29tcGF0aWJsZSB3aXRoCisJCU1pY3Jvc29mdCdzIE5ESVMgQVJDbmV0IGRyaXZlciwgbGlrZSB0aGUgb25lIGluIFdmV2cgYW5kCisJCUxBTk1BTi4gIEJlY2F1c2UgdGhlIE1UVSBvZiA0OTMgaXMgYWN0dWFsbHkgc21hbGxlciB0aGFuIHRoZQorCQlvbmUgInJlcXVpcmVkIiBieSBUQ1AvSVAgKDU3NiksIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgc29tZQorCQluZXR3b3JrIG9wZXJhdGlvbnMgd2lsbCBub3QgZnVuY3Rpb24gcHJvcGVybHkuICBUaGUgTGludXgKKwkJVENQL0lQIGxheWVyIGNhbiBjb21wZW5zYXRlIGluIG1vc3QgY2FzZXMsIGhvd2V2ZXIsIGJ5CisJCWF1dG9tYXRpY2FsbHkgZnJhZ21lbnRpbmcgdGhlIFRDUC9JUCBwYWNrZXRzIHRvIG1ha2UgdGhlbQorCQlmaXQuICBhcmMwZSBhbHNvIHdvcmtzIHNsaWdodGx5IG1vcmUgc2xvd2x5IHRoYW4gYXJjMCwgZm9yCisJCXJlYXNvbnMgeWV0IHRvIGJlIGRldGVybWluZWQuICAoUHJvYmFibHkgaXQncyB0aGUgc21hbGxlcgorCQlNVFUgdGhhdCBkb2VzIGl0LikKKwkJCisJYXJjMHMgLSBUaGUgIltzXWltcGxlIiBSRkMxMDUxIHByb3RvY29sIGlzIHRoZSAicHJldmlvdXMiIEludGVybmV0CisJCXN0YW5kYXJkIHRoYXQgaXMgY29tcGxldGVseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbmV3CisJCXN0YW5kYXJkLiAgU29tZSBzb2Z0d2FyZSB0b2RheSwgaG93ZXZlciwgY29udGludWVzIHRvCisJCXN1cHBvcnQgdGhlIG9sZCBzdGFuZGFyZCAoYW5kIG9ubHkgdGhlIG9sZCBzdGFuZGFyZCkKKwkJaW5jbHVkaW5nIE5ldEJTRCBhbmQgQW1pVENQLiAgUkZDMTA1MSBhbHNvIGRvZXMgbm90IHN1cHBvcnQKKwkJUkZDMTIwMSdzIHBhY2tldCBzcGxpdHRpbmcsIGFuZCB0aGUgTVRVIG9mIDUwNyBpcyBzdGlsbAorCQlzbWFsbGVyIHRoYW4gdGhlIEludGVybmV0ICJyZXF1aXJlbWVudCwiIHNvIGl0J3MgcXVpdGUKKwkJcG9zc2libGUgdGhhdCB5b3UgbWF5IHJ1biBpbnRvIHByb2JsZW1zLiAgSXQncyBhbHNvIHNsb3dlcgorCQl0aGFuIFJGQzEyMDEgYnkgYWJvdXQgMjUlLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFyYzBlLgorCQkKKwkJVGhlIGFyYzBzIHN1cHBvcnQgd2FzIGNvbnRyaWJ1dGVkIGJ5IFRvbWFzeiBNb3R5bGV3c2tpCisJCWFuZCBtb2RpZmllZCBzb21ld2hhdCBieSBtZS4gIEJ1Z3MgYXJlIHByb2JhYmx5IG15IGZhdWx0LgorCitZb3UgY2FuIGNob29zZSBub3QgdG8gY29tcGlsZSBhcmMwZSBhbmQgYXJjMHMgaW50byB0aGUgZHJpdmVyIGlmIHlvdSB3YW50IC0KK3RoaXMgd2lsbCBzYXZlIHlvdSBhIGJpdCBvZiBtZW1vcnkgYW5kIGF2b2lkIGNvbmZ1c2lvbiB3aGVuIGVnLiB0cnlpbmcgdG8KK3VzZSB0aGUgIk5GUy1yb290IiBzdHVmZiBpbiByZWNlbnQgTGludXgga2VybmVscy4KKworVGhlIGFyYzBlIGFuZCBhcmMwcyBkZXZpY2VzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgZmlyc3QKK2lmY29uZmlnIHRoZSBhcmMwIGRldmljZS4gIFRvIGFjdHVhbGx5IHVzZSB0aGVtLCB0aG91Z2gsIHlvdSBuZWVkIHRvIGFsc28KK2lmY29uZmlnIHRoZSBvdGhlciB2aXJ0dWFsIGRldmljZXMgeW91IG5lZWQuICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB5b3UKK2NhbiBzZXQgdXAgeW91ciBuZXR3b3JrIHRoZW46CisKKworMS4gU2luZ2xlIFByb3RvY29sLgorCisgICBUaGlzIGlzIHRoZSBzaW1wbGVzdCB3YXkgdG8gY29uZmlndXJlIHlvdXIgbmV0d29yazogdXNlIGp1c3Qgb25lIG9mIHRoZQorICAgdHdvIGF2YWlsYWJsZSBwcm90b2NvbHMuICBBcyBtZW50aW9uZWQgYWJvdmUsIGl0J3MgYSBnb29kIGlkZWEgdG8gdXNlCisgICBvbmx5IGFyYzAgdW5sZXNzIHlvdSBoYXZlIGEgZ29vZCByZWFzb24gKGxpa2Ugc29tZSBvdGhlciBzb2Z0d2FyZSwgaWUuCisgICBXZldnLCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBhcmMwZSkuCisgICAKKyAgIElmIHlvdSBuZWVkIG9ubHkgYXJjMCwgdGhlbiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHNob3VsZCBnZXQgeW91IGdvaW5nOgorICAgCWlmY29uZmlnIGFyYzAgTVkuSVAuQURELlJFU1MKKyAgIAlyb3V0ZSBhZGQgTVkuSVAuQURELlJFU1MgYXJjMAorICAgCXJvdXRlIGFkZCAtbmV0IFNVQi5ORVQuQURELlJFU1MgYXJjMAorICAgCVthZGQgb3RoZXIgbG9jYWwgcm91dGVzIGhlcmVdCisgICAJCisgICBJZiB5b3UgbmVlZCBhcmMwZSAoYW5kIG9ubHkgYXJjMGUpLCBpdCdzIGEgbGl0dGxlIGRpZmZlcmVudDoKKyAgIAlpZmNvbmZpZyBhcmMwIE1ZLklQLkFERC5SRVNTCisgICAJaWZjb25maWcgYXJjMGUgTVkuSVAuQURELlJFU1MKKyAgIAlyb3V0ZSBhZGQgTVkuSVAuQURELlJFU1MgYXJjMGUKKyAgIAlyb3V0ZSBhZGQgLW5ldCBTVUIuTkVULkFERC5SRVNTIGFyYzBlCisgICAKKyAgIGFyYzBzIHdvcmtzIG11Y2ggdGhlIHNhbWUgd2F5IGFzIGFyYzBlLgorCisKKzIuIE1vcmUgdGhhbiBvbmUgcHJvdG9jb2wgb24gdGhlIHNhbWUgd2lyZS4KKworICAgTm93IHRoaW5ncyBzdGFydCBnZXR0aW5nIGNvbmZ1c2luZy4gIFRvIGV2ZW4gdHJ5IGl0LCB5b3UgbWF5IG5lZWQgdG8gYmUKKyAgIHBhcnRseSBjcmF6eS4gIEhlcmUncyB3aGF0ICpJKiBkaWQuIDopIE5vdGUgdGhhdCBJIGRvbid0IGluY2x1ZGUgYXJjMHMgaW4KKyAgIG15IGhvbWUgbmV0d29yazsgSSBkb24ndCBoYXZlIGFueSBOZXRCU0Qgb3IgQW1pVENQIGNvbXB1dGVycywgc28gSSBvbmx5CisgICB1c2UgYXJjMHMgZHVyaW5nIGxpbWl0ZWQgdGVzdGluZy4KKworICAgSSBoYXZlIHRocmVlIGNvbXB1dGVycyBvbiBteSBob21lIG5ldHdvcms7IHR3byBMaW51eCBib3hlcyAod2hpY2ggcHJlZmVyCisgICBSRkMxMjAxIHByb3RvY29sLCBmb3IgcmVhc29ucyBsaXN0ZWQgYWJvdmUpLCBhbmQgb25lIFhUIHRoYXQgY2FuJ3QgcnVuCisgICBMaW51eCBidXQgcnVucyB0aGUgZnJlZSBNaWNyb3NvZnQgTEFOTUFOIENsaWVudCBpbnN0ZWFkLgorCisgICBXb3JzZSwgb25lIG9mIHRoZSBMaW51eCBjb21wdXRlcnMgKGZyZWVkb20pIGFsc28gaGFzIGEgbW9kZW0gYW5kIGFjdHMgYXMKKyAgIGEgcm91dGVyIHRvIG15IEludGVybmV0IHByb3ZpZGVyLiAgVGhlIG90aGVyIExpbnV4IGJveCAoaW5zaWdodCkgYWxzbyBoYXMKKyAgIGl0cyBvd24gSVAgYWRkcmVzcyBhbmQgbmVlZHMgdG8gdXNlIGZyZWVkb20gYXMgaXRzIGRlZmF1bHQgZ2F0ZXdheS4gIFRoZQorICAgWFQgKHBhdGllbmNlKSwgaG93ZXZlciwgZG9lcyBub3QgaGF2ZSBpdHMgb3duIEludGVybmV0IElQIGFkZHJlc3MgYW5kIHNvCisgICBJIGFzc2lnbmVkIGl0IG9uZSBvbiBhICJwcml2YXRlIHN1Ym5ldCIgKGFzIGRlZmluZWQgYnkgUkZDMTU5NykuCisKKyAgIFRvIHN0YXJ0IHdpdGgsIHRha2UgYSBzaW1wbGUgbmV0d29yayB3aXRoIGp1c3QgaW5zaWdodCBhbmQgZnJlZWRvbS4gCisgICBJbnNpZ2h0IG5lZWRzIHRvOgorICAgCS0gdGFsayB0byBmcmVlZG9tIHZpYSBSRkMxMjAxIChhcmMwKSBwcm90b2NvbCwgYmVjYXVzZSBJIGxpa2UgaXQKKwkgIG1vcmUgYW5kIGl0J3MgZmFzdGVyLgorCS0gdXNlIGZyZWVkb20gYXMgaXRzIEludGVybmV0IGdhdGV3YXkuCisJCisgICBUaGF0J3MgcHJldHR5IGVhc3kgdG8gZG8uICBTZXQgdXAgaW5zaWdodCBsaWtlIHRoaXM6CisgICAJaWZjb25maWcgYXJjMCBpbnNpZ2h0CisgICAJcm91dGUgYWRkIGluc2lnaHQgYXJjMAorICAgCXJvdXRlIGFkZCBmcmVlZG9tIGFyYzAJLyogSSB3b3VsZCB1c2UgdGhlIHN1Ym5ldCBoZXJlIChsaWtlIEkgc2FpZAorCQkJCQl0byB0byBpbiAic2luZ2xlIHByb3RvY29sIiBhYm92ZSksCisgICAJCQkJCWJ1dCB0aGUgcmVzdCBvZiB0aGUgc3VibmV0CisgICAJCQkJCXVuZm9ydHVuYXRlbHkgbGllcyBhY3Jvc3MgdGhlIFBQUAorICAgCQkJCQlsaW5rIG9uIGZyZWVkb20sIHdoaWNoIGNvbmZ1c2VzCisgICAJCQkJCXRoaW5ncy4gKi8KKyAgIAlyb3V0ZSBhZGQgZGVmYXVsdCBndyBmcmVlZG9tCisgICAJCisgICBBbmQgZnJlZWRvbSBnZXRzIGNvbmZpZ3VyZWQgbGlrZSBzbzoKKyAgIAlpZmNvbmZpZyBhcmMwIGZyZWVkb20KKyAgIAlyb3V0ZSBhZGQgZnJlZWRvbSBhcmMwCisgICAJcm91dGUgYWRkIGluc2lnaHQgYXJjMAorICAgCS8qIGFuZCBkZWZhdWx0IGdhdGV3YXkgaXMgY29uZmlndXJlZCBieSBwcHBkICovCisgICAJCisgICBHcmVhdCwgbm93IGluc2lnaHQgdGFsa3MgdG8gZnJlZWRvbSBkaXJlY3RseSBvbiBhcmMwLCBhbmQgc2VuZHMgcGFja2V0cworICAgdG8gdGhlIEludGVybmV0IHRocm91Z2ggZnJlZWRvbS4gIElmIHlvdSBkaWRuJ3Qga25vdyBob3cgdG8gZG8gdGhlIGFib3ZlLAorICAgeW91IHNob3VsZCBwcm9iYWJseSBzdG9wIHJlYWRpbmcgdGhpcyBzZWN0aW9uIG5vdyBiZWNhdXNlIGl0IG9ubHkgZ2V0cworICAgd29yc2UuCisKKyAgIE5vdywgaG93IGRvIEkgYWRkIHBhdGllbmNlIGludG8gdGhlIG5ldHdvcms/ICBJdCB3aWxsIGJlIHVzaW5nIExBTk1BTgorICAgQ2xpZW50LCB3aGljaCBtZWFucyBJIG5lZWQgdGhlIGFyYzBlIGRldmljZS4gIEl0IG5lZWRzIHRvIGJlIGFibGUgdG8gdGFsaworICAgdG8gYm90aCBpbnNpZ2h0IGFuZCBmcmVlZG9tLCBhbmQgYWxzbyB1c2UgZnJlZWRvbSBhcyBhIGdhdGV3YXkgdG8gdGhlCisgICBJbnRlcm5ldC4gIChSZWNhbGwgdGhhdCBwYXRpZW5jZSBoYXMgYSAicHJpdmF0ZSBJUCBhZGRyZXNzIiB3aGljaCB3b24ndAorICAgd29yayBvbiB0aGUgSW50ZXJuZXQ7IHRoYXQncyBva2F5LCBJIGNvbmZpZ3VyZWQgTGludXggSVAgbWFzcXVlcmFkaW5nIG9uCisgICBmcmVlZG9tIGZvciB0aGlzIHN1Ym5ldCkuCisgICAKKyAgIFNvIHBhdGllbmNlIChuZWNlc3NhcmlseTsgSSBkb24ndCBoYXZlIGFub3RoZXIgSVAgbnVtYmVyIGZyb20gbXkKKyAgIHByb3ZpZGVyKSBoYXMgYW4gSVAgYWRkcmVzcyBvbiBhIGRpZmZlcmVudCBzdWJuZXQgdGhhbiBmcmVlZG9tIGFuZAorICAgaW5zaWdodCwgYnV0IG5lZWRzIHRvIHVzZSBmcmVlZG9tIGFzIGFuIEludGVybmV0IGdhdGV3YXkuICBXb3JzZSwgbW9zdAorICAgRE9TIG5ldHdvcmtpbmcgcHJvZ3JhbXMsIGluY2x1ZGluZyBMQU5NQU4sIGhhdmUgYnJhaW5kZWFkIG5ldHdvcmtpbmcKKyAgIHNjaGVtZXMgdGhhdCByZWx5IGNvbXBsZXRlbHkgb24gdGhlIG5ldG1hc2sgYW5kIGEgJ2RlZmF1bHQgZ2F0ZXdheScgdG8KKyAgIGRldGVybWluZSBob3cgdG8gcm91dGUgcGFja2V0cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBnZXQgdG8gZnJlZWRvbSBvcgorICAgaW5zaWdodCwgcGF0aWVuY2UgV0lMTCBzZW5kIHRocm91Z2ggaXRzIGRlZmF1bHQgZ2F0ZXdheSwgcmVnYXJkbGVzcyBvZgorICAgdGhlIGZhY3QgdGhhdCBib3RoIGZyZWVkb20gYW5kIGluc2lnaHQgKGNvdXJ0ZXN5IG9mIHRoZSBhcmMwZSBkZXZpY2UpCisgICBjb3VsZCB1bmRlcnN0YW5kIGEgZGlyZWN0IHRyYW5zbWlzc2lvbi4KKyAgIAorICAgSSBjb21wZW5zYXRlIGJ5IGdpdmluZyBmcmVlZG9tIGFuIGV4dHJhIElQIGFkZHJlc3MgLSBhbGlhc2VkICdnYXRla2VlcGVyJworICAgLSB0aGF0IGlzIG9uIG15IHByaXZhdGUgc3VibmV0LCB0aGUgc2FtZSBzdWJuZXQgdGhhdCBwYXRpZW5jZSBpcyBvbi4gIEkKKyAgIHRoZW4gZGVmaW5lIGdhdGVrZWVwZXIgdG8gYmUgdGhlIGRlZmF1bHQgZ2F0ZXdheSBmb3IgcGF0aWVuY2UuCisgICAKKyAgIFRvIGNvbmZpZ3VyZSBmcmVlZG9tIChpbiBhZGRpdGlvbiB0byB0aGUgY29tbWFuZHMgYWJvdmUpOgorICAgCWlmY29uZmlnIGFyYzBlIGdhdGVrZWVwZXIKKyAgIAlyb3V0ZSBhZGQgZ2F0ZWtlZXBlciBhcmMwZQorICAgCXJvdXRlIGFkZCBwYXRpZW5jZSBhcmMwZQorICAgCisgICBUaGlzIHdheSwgZnJlZWRvbSB3aWxsIHNlbmQgYWxsIHBhY2tldHMgZm9yIHBhdGllbmNlIHRocm91Z2ggYXJjMGUsCisgICBnaXZpbmcgaXRzIElQIGFkZHJlc3MgYXMgZ2F0ZWtlZXBlciAob24gdGhlIHByaXZhdGUgc3VibmV0KS4gIFdoZW4gaXQKKyAgIHRhbGtzIHRvIGluc2lnaHQgb3IgdGhlIEludGVybmV0LCBpdCB3aWxsIHVzZSBpdHMgImZyZWVkb20iIEludGVybmV0IElQCisgICBhZGRyZXNzLgorICAgCisgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCB3ZSBoYXZlbid0IGNvbmZpZ3VyZWQgdGhlIGFyYzBlIGRldmljZSBvbiBpbnNpZ2h0LiAKKyAgIFRoaXMgd291bGQgd29yaywgYnV0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5LCBhbmQgd291bGQgcmVxdWlyZSBtZSB0bworICAgYXNzaWduIGluc2lnaHQgYW5vdGhlciBzcGVjaWFsIElQIG51bWJlciBmcm9tIG15IHByaXZhdGUgc3VibmV0LiAgU2luY2UKKyAgIGJvdGggaW5zaWdodCBhbmQgcGF0aWVuY2UgYXJlIHVzaW5nIGZyZWVkb20gYXMgdGhlaXIgZGVmYXVsdCBnYXRld2F5LCB0aGUKKyAgIHR3byBjYW4gYWxyZWFkeSB0YWxrIHRvIGVhY2ggb3RoZXIuCisgICAKKyAgIEl0J3MgcXVpdGUgZm9ydHVuYXRlIHRoYXQgSSBzZXQgdGhpbmdzIHVwIGxpa2UgdGhpcyB0aGUgZmlyc3QgdGltZSAoY291Z2gKKyAgIGNvdWdoKSBiZWNhdXNlIGl0J3MgcmVhbGx5IGhhbmR5IHdoZW4gSSBib290IGluc2lnaHQgaW50byBET1MuICBUaGVyZSwgaXQKKyAgIHJ1bnMgdGhlIE5vdmVsbCBPREkgcHJvdG9jb2wgc3RhY2ssIHdoaWNoIG9ubHkgd29ya3Mgd2l0aCBSRkMxMjAxIEFSQ25ldC4gCisgICBJbiB0aGlzIG1vZGUgaXQgd291bGQgYmUgaW1wb3NzaWJsZSBmb3IgaW5zaWdodCB0byBjb21tdW5pY2F0ZSBkaXJlY3RseQorICAgd2l0aCBwYXRpZW5jZSwgc2luY2UgdGhlIE5vdmVsbCBzdGFjayBpcyBpbmNvbXBhdGlibGUgd2l0aCBNaWNyb3NvZnQncworICAgRXRoZXJuZXQtRW5jYXAuICBXaXRob3V0IGNoYW5naW5nIGFueSBzZXR0aW5ncyBvbiBmcmVlZG9tIG9yIHBhdGllbmNlLCBJCisgICBzaW1wbHkgc2V0IGZyZWVkb20gYXMgdGhlIGRlZmF1bHQgZ2F0ZXdheSBmb3IgaW5zaWdodCAobm93IGluIERPUywKKyAgIHJlbWVtYmVyKSBhbmQgYWxsIHRoZSBmb3J3YXJkaW5nIGhhcHBlbnMgImF1dG9tYWdpY2FsbHkiIGJldHdlZW4gdGhlIHR3bworICAgaG9zdHMgdGhhdCB3b3VsZCBub3JtYWxseSBub3QgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBhdCBhbGwuCisgICAKKyAgIEZvciB0aG9zZSB3aG8gbGlrZSBkaWFncmFtcywgSSBoYXZlIGNyZWF0ZWQgdHdvICJ2aXJ0dWFsIHN1Ym5ldHMiIG9uIHRoZQorICAgc2FtZSBwaHlzaWNhbCBBUkNuZXQgd2lyZS4gIFlvdSBjYW4gcGljdHVyZSBpdCBsaWtlIHRoaXM6CisgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICBbUkZDMTIwMSBORVRXT1JLXSAgICAgICAgICAgICAgICAgICBbRVRIRVItRU5DQVAgTkVUV09SS10KKyAgICAgIChyZWdpc3RlcmVkIEludGVybmV0IHN1Ym5ldCkgICAgICAgICAgIChSRkMxNTk3IHByaXZhdGUgc3VibmV0KQorICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElQIE1hc3F1ZXJhZGUpCisgICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLVwgICAgICAgICAqICAgICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLVwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAgICAgICAgICAgICArLUZyZWVkb20tKi1HYXRla2VlcGVyLSsgICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgfCAgICAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgICBcLS0tLS0tLSstLS0tLS0tLyAgICB8ICAgICogICAgICAgICAgICBcLS0tLS0tLSstLS0tLS0tLworICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgSW5zaWdodCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgUGF0aWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlcm5ldCkKKworCisKK0l0IHdvcmtzOiB3aGF0IG5vdz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VuZCBtYWlsIGRlc2NyaWJpbmcgeW91ciBzZXR1cCwgcHJlZmVyYWJseSBpbmNsdWRpbmcgZHJpdmVyIHZlcnNpb24sIGtlcm5lbAordmVyc2lvbiwgQVJDbmV0IGNhcmQgbW9kZWwsIENQVSB0eXBlLCBudW1iZXIgb2Ygc3lzdGVtcyBvbiB5b3VyIG5ldHdvcmssIGFuZAorbGlzdCBvZiBzb2Z0d2FyZSBpbiB1c2UgdG8gbWUgYXQgdGhlIGZvbGxvd2luZyBhZGRyZXNzOgorCWFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYQorCitJIGRvIHNlbmQgKHNvbWV0aW1lcyBhdXRvbWF0ZWQpIHJlcGxpZXMgdG8gYWxsIG1lc3NhZ2VzIEkgcmVjZWl2ZS4gIE15IGVtYWlsCitjYW4gYmUgd2VpcmQgKGFuZCBhbHNvIHVzdWFsbHkgZ2V0cyBmb3J3YXJkZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGFsb25nIHRoZQord2F5IHRvIG1lKSwgc28gaWYgeW91IGRvbid0IGdldCBhIHJlcGx5IHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSwgcGxlYXNlCityZXNlbmQuCisKKworSXQgZG9lc24ndCB3b3JrOiB3aGF0IG5vdz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvIHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgYWxzbyBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgdGhlIGlmY29uZmlnIGFuZCByb3V0ZQorY29tbWFuZHMsIGFzIHdlbGwgYXMgYW55IHBlcnRpbmVudCBsb2cgZW50cmllcyAoaWUuIGFueXRoaW5nIHRoYXQgc3RhcnRzCit3aXRoICJhcmNuZXQ6IiBhbmQgaGFzIHNob3duIHVwIHNpbmNlIHRoZSBsYXN0IHJlYm9vdCkgaW4geW91ciBtYWlsLgorCitJZiB5b3Ugd2FudCB0byB0cnkgZml4aW5nIGl0IHlvdXJzZWxmIChJIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBtYWlsIG1lCithYm91dCB0aGUgcHJvYmxlbSBmaXJzdCwgc2luY2UgaXQgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gc29sdmVkKSB5b3UgbWF5Cit3YW50IHRvIHRyeSBzb21lIG9mIHRoZSBkZWJ1ZyBsZXZlbHMgYXZhaWxhYmxlLiAgRm9yIGhlYXZ5IHRlc3Rpbmcgb24KK0RfRFVSSU5HIG9yIG1vcmUsIGl0IHdvdWxkIGJlIGEgUkVBTExZIGdvb2QgaWRlYSB0byBraWxsIHlvdXIga2xvZ2QgZGFlbW9uCitmaXJzdCEgIERfRFVSSU5HIGRpc3BsYXlzIDQtNSBsaW5lcyBmb3IgZWFjaCBwYWNrZXQgc2VudCBvciByZWNlaXZlZC4gIERfVFgsCitEX1JYLCBhbmQgRF9TS0IgYWN0dWFsbHkgRElTUExBWSBlYWNoIHBhY2tldCBhcyBpdCBpcyBzZW50IG9yIHJlY2VpdmVkLAord2hpY2ggaXMgb2J2aW91c2x5IHF1aXRlIGJpZy4KKworU3RhcnRpbmcgd2l0aCB2Mi40MCBBTFBIQSwgdGhlIGF1dG9wcm9iZSByb3V0aW5lcyBoYXZlIGNoYW5nZWQKK3NpZ25pZmljYW50bHkuICBJbiBwYXJ0aWN1bGFyLCB0aGV5IHdvbid0IHRlbGwgeW91IHdoeSB0aGUgY2FyZCB3YXMgbm90Citmb3VuZCB1bmxlc3MgeW91IHR1cm4gb24gdGhlIERfSU5JVF9SRUFTT05TIGRlYnVnZ2luZyBmbGFnLgorCitPbmNlIHRoZSBkcml2ZXIgaXMgcnVubmluZywgeW91IGNhbiBydW4gdGhlIGFyY2R1bXAgc2hlbGwgc2NyaXB0IChhdmFpbGFibGUKK2Zyb20gbWUgb3IgaW4gdGhlIGZ1bGwgQVJDbmV0IHBhY2thZ2UsIGlmIHlvdSBoYXZlIGl0KSBhcyByb290IHRvIGxpc3QgdGhlCitjb250ZW50cyBvZiB0aGUgYXJjbmV0IGJ1ZmZlcnMgYXQgYW55IHRpbWUuICBUbyBtYWtlIGFueSBzZW5zZSBhdCBhbGwgb3V0IG9mCit0aGlzLCB5b3Ugc2hvdWxkIGdyYWIgdGhlIHBlcnRpbmVudCBSRkNzLiAoc29tZSBhcmUgbGlzdGVkIG5lYXIgdGhlIHRvcCBvZgorYXJjbmV0LmMpLiAgYXJjZHVtcCBhc3N1bWVzIHlvdXIgY2FyZCBpcyBhdCAweEQwMDAwLiAgSWYgaXQgaXNuJ3QsIGVkaXQgdGhlCitzY3JpcHQuCisKK0J1ZmZlcnMgMCBhbmQgMSBhcmUgdXNlZCBmb3IgcmVjZWl2aW5nLCBhbmQgQnVmZmVycyAyIGFuZCAzIGFyZSBmb3Igc2VuZGluZy4gCitQaW5nLXBvbmcgYnVmZmVycyBhcmUgaW1wbGVtZW50ZWQgYm90aCB3YXlzLgorCitJZiB5b3VyIGRlYnVnIGxldmVsIGluY2x1ZGVzIERfRFVSSU5HIGFuZCB5b3UgZGlkIE5PVCBkZWZpbmUgU0xPV19YTUlUX0NPUFksCit0aGUgYnVmZmVycyBhcmUgY2xlYXJlZCB0byBhIGNvbnN0YW50IHZhbHVlIG9mIDB4NDIgZXZlcnkgdGltZSB0aGUgY2FyZCBpcworcmVzZXQgKHdoaWNoIHNob3VsZCBvbmx5IGhhcHBlbiB3aGVuIHlvdSBkbyBhbiBpZmNvbmZpZyB1cCwgb3Igd2hlbiBMaW51eAorZGVjaWRlcyB0aGF0IHRoZSBkcml2ZXIgaXMgYnJva2VuKS4gIER1cmluZyBhIHRyYW5zbWl0LCB1bnVzZWQgcGFydHMgb2YgdGhlCitidWZmZXIgd2lsbCBiZSBjbGVhcmVkIHRvIDB4NDIgYXMgd2VsbC4gIFRoaXMgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmlndXJlCitvdXQgd2hpY2ggYnl0ZXMgYXJlIGJlaW5nIHVzZWQgYnkgYSBwYWNrZXQuCisKK1lvdSBjYW4gY2hhbmdlIHRoZSBkZWJ1ZyBsZXZlbCB3aXRob3V0IHJlY29tcGlsaW5nIHRoZSBrZXJuZWwgYnkgdHlwaW5nOgorCWlmY29uZmlnIGFyYzAgZG93biBtZXRyaWMgMXh4eAorCS9ldGMvcmMuZC9yYy5pbmV0MQord2hlcmUgInh4eCIgaXMgdGhlIGRlYnVnIGxldmVsIHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsICJtZXRyaWMgMTAxNSIgd291bGQgcHV0Cit5b3UgYXQgZGVidWcgbGV2ZWwgMTUuICBEZWJ1ZyBsZXZlbCA3IGlzIGN1cnJlbnRseSB0aGUgZGVmYXVsdC4KKworTm90ZSB0aGF0IHRoZSBkZWJ1ZyBsZXZlbCBpcyAoc3RhcnRpbmcgd2l0aCB2MS45MCBBTFBIQSkgYSBiaW5hcnkKK2NvbWJpbmF0aW9uIG9mIGRpZmZlcmVudCBkZWJ1ZyBmbGFnczsgc28gZGVidWcgbGV2ZWwgNyBpcyByZWFsbHkgMSsyKzQgb3IKK0RfTk9STUFMK0RfRVhUUkErRF9JTklULiAgVG8gaW5jbHVkZSBEX0RVUklORywgeW91IHdvdWxkIGFkZCAxNiB0byB0aGlzLAorcmVzdWx0aW5nIGluIGRlYnVnIGxldmVsIDIzLgorCitJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCB0aGF0LCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBrbm93IGFueXdheS4gCitFLW1haWwgbWUgYWJvdXQgeW91ciBwcm9ibGVtLgorCisKK0kgd2FudCB0byBzZW5kIG1vbmV5OiB3aGF0IG5vdz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR28gdGFrZSBhIG5hcCBvciBzb21ldGhpbmcuICBZb3UnbGwgZmVlbCBiZXR0ZXIgaW4gdGhlIG1vcm5pbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTIxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnR4dApAQCAtMCwwICsxLDggQEAKK0luIG9yZGVyIHRvIHVzZSBhbnl0aGluZyBidXQgdGhlIG1vc3QgcHJpbWl0aXZlIGZ1bmN0aW9ucyBvZiBBVE0sCitzZXZlcmFsIHVzZXItbW9kZSBwcm9ncmFtcyBhcmUgcmVxdWlyZWQgdG8gYXNzaXN0IHRoZSBrZXJuZWwuIFRoZXNlCitwcm9ncmFtcyBhbmQgcmVsYXRlZCBtYXRlcmlhbCBjYW4gYmUgZm91bmQgdmlhIHRoZSBBVE0gb24gTGludXggV2ViCitwYWdlIGF0IGh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0LworCitJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zIHdpdGggQVRNLCBwbGVhc2UgcmVwb3J0IHRoZW0gb24gdGhlIEFUTQorb24gTGludXggbWFpbGluZyBsaXN0LiBTdWJzY3JpcHRpb24gaW5mb3JtYXRpb24sIGFyY2hpdmVzLCBldGMuLAorY2FuIGJlIGZvdW5kIG9uIGh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F4MjUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F4MjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzI1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXgyNS50eHQKQEAgLTAsMCArMSwxNiBAQAorVG8gdXNlIHRoZSBhbWF0ZXVyIHJhZGlvIHByb3RvY29scyB3aXRoaW4gTGludXggeW91IHdpbGwgbmVlZCB0byBnZXQgYQorc3VpdGFibGUgY29weSBvZiB0aGUgQVguMjUgVXRpbGl0aWVzLiBNb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlCithbmQgYXNzb2NpYXRlZCBwcm9ncmFtcyBjYW4gYmUgZm91bmQgb24gaHR0cDovL3pvbmUucHNwdC5maS9+anNuLy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFYLjI1LCBORVQvUk9NIGFuZCBST1NFIHByb3RvY29sIHN0YWNrcywgc2VlCit0aGUgQVgyNS1IT1dUTyB3cml0dGVuIGJ5IFRlcnJ5IERhd3NvbiA8dGVycnlAcGVyZi5uby5pdGcudGVsc3RyYS5jb20uYXU+Cit3aG8gaXMgYWxzbyB0aGUgQVguMjUgVXRpbGl0aWVzIG1haW50YWluZXIuCisKK1RoZXJlIGlzIGFuIGFjdGl2ZSBtYWlsaW5nIGxpc3QgZm9yIGRpc2N1c3NpbmcgTGludXggYW1hdGV1ciByYWRpbyBtYXR0ZXJzCitjYWxsZWQgbGludXgtaGFtcy4gVG8gc3Vic2NyaWJlIHRvIGl0LCBzZW5kIGEgbWVzc2FnZSB0bworbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZyB3aXRoIHRoZSB3b3JkcyAic3Vic2NyaWJlIGxpbnV4LWhhbXMiIGluIHRoZSBib2R5CitvZiB0aGUgbWVzc2FnZSwgdGhlIHN1YmplY3QgZmllbGQgaXMgaWdub3JlZC4KKworSm9uYXRoYW4gRzRLTFgKKworZzRrbHhAZzRrbHguZGVtb24uY28udWsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXljb20udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JheWNvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2ODg0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXljb20udHh0CkBAIC0wLDAgKzEsMTU4IEBACisJCSAgICBMSU5VWCBEUklWRVJTIEZPUiBCQVlDT00gTU9ERU1TCisKKyAgICAgICBUaG9tYXMgTS4gU2FpbGVyLCBIQjlKTlgvQUU0V0EsIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisKKyEhTkVXISEgKDA0Lzk4KSBUaGUgZHJpdmVycyBmb3IgdGhlIGJheWNvbSBtb2RlbXMgaGF2ZSBiZWVuIHNwbGl0IGludG8KK3NlcGFyYXRlIGRyaXZlcnMgYXMgdGhleSBkaWQgbm90IHNoYXJlIGFueSBjb2RlLCBhbmQgdGhlIGRyaXZlcgorYW5kIGRldmljZSBuYW1lcyBoYXZlIGNoYW5nZWQuCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBMaW51eCBLZXJuZWwgRHJpdmVycyBmb3Igc2ltcGxlIEJheWNvbSBzdHlsZQorYW1hdGV1ciByYWRpbyBtb2RlbXMuIAorCitUaGUgZm9sbG93aW5nIGRyaXZlcnMgYXJlIGF2YWlsYWJsZToKKworYmF5Y29tX3Nlcl9mZHg6CisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBTRVIxMiBtb2RlbXMgZWl0aGVyIGZ1bGwgb3IgaGFsZiBkdXBsZXguCisgIEl0cyBiYXVkIHJhdGUgbWF5IGJlIGNoYW5nZWQgdmlhIHRoZSBgYmF1ZCcgbW9kdWxlIHBhcmFtZXRlciwKKyAgdGhlcmVmb3JlIGl0IHN1cHBvcnRzIGp1c3QgYWJvdXQgZXZlcnkgYml0IGJhbmcgbW9kZW0gb24gYQorICBzZXJpYWwgcG9ydC4gSXRzIGRldmljZXMgYXJlIGNhbGxlZCBiY3NmMCB0aHJvdWdoIGJjc2YzLgorICBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBkcml2ZXIgZm9yIFNFUjEyIHR5cGUgbW9kZW1zLAorICBob3dldmVyIGlmIHlvdSBoYXZlIGEgYnJva2VuIFVBUlQgY2xvbmUgdGhhdCBkb2VzIG5vdCBoYXZlIHdvcmtpbmcKKyAgZGVsdGEgc3RhdHVzIGJpdHMsIHlvdSBtYXkgdHJ5IGJheWNvbV9zZXJfaGR4LiAKKworYmF5Y29tX3Nlcl9oZHg6IAorICBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIGRyaXZlciBmb3IgU0VSMTIgdHlwZSBtb2RlbXMuCisgIEl0IG9ubHkgc3VwcG9ydHMgaGFsZiBkdXBsZXgsIGFuZCBvbmx5IDEyMDAgYmF1ZC4gSXRzIGRldmljZXMKKyAgYXJlIGNhbGxlZCBiY3NoMCB0aHJvdWdoIGJjc2gzLiBVc2UgdGhpcyBkcml2ZXIgb25seSBpZiBiYXljb21fc2VyX2ZkeAorICBkb2VzIG5vdCB3b3JrIHdpdGggeW91ciBVQVJULgorCitiYXljb21fcGFyOgorICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgcGFyOTYgYW5kIHBpY3BhciBtb2RlbXMuCisgIEl0cyBkZXZpY2VzIGFyZSBjYWxsZWQgYmNwMCB0aHJvdWdoIGJjcDMuCisKK2JheWNvbV9lcHA6CisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBFUFAgbW9kZW0uCisgIEl0cyBkZXZpY2VzIGFyZSBjYWxsZWQgYmNlMCB0aHJvdWdoIGJjZTMuCisgIFRoaXMgZHJpdmVyIGlzIHdvcmstaW4tcHJvZ3Jlc3MuCisKK1RoZSBmb2xsb3dpbmcgbW9kZW1zIGFyZSBzdXBwb3J0ZWQ6CisKK3NlcjEyOiAgVGhpcyBpcyBhIHZlcnkgc2ltcGxlIDEyMDAgYmF1ZCBBRlNLIG1vZGVtLiBUaGUgbW9kZW0gY29uc2lzdHMgb25seQorICAgICAgICBvZiBhIG1vZHVsYXRvci9kZW1vZHVsYXRvciBjaGlwLCB1c3VhbGx5IGEgVEkgVENNMzEwNS4gVGhlIGNvbXB1dGVyCisgICAgICAgIGlzIHJlc3BvbnNpYmxlIGZvciByZWdlbmVyYXRpbmcgdGhlIHJlY2VpdmVyIGJpdCBjbG9jaywgYXMgd2VsbCBhcworICAgICAgICBmb3IgaGFuZGxpbmcgdGhlIEhETEMgcHJvdG9jb2wuIFRoZSBtb2RlbSBjb25uZWN0cyB0byBhIHNlcmlhbCBwb3J0LAorICAgICAgICBoZW5jZSB0aGUgbmFtZS4gU2luY2UgdGhlIHNlcmlhbCBwb3J0IGlzIG5vdCB1c2VkIGFzIGFuIGFzeW5jIHNlcmlhbAorICAgICAgICBwb3J0LCB0aGUga2VybmVsIGRyaXZlciBmb3Igc2VyaWFsIHBvcnRzIGNhbm5vdCBiZSB1c2VkLCBhbmQgdGhpcworICAgICAgICBkcml2ZXIgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBzZXJpYWwgaGFyZHdhcmUgKDgyNTAsIDE2NDUwLCAxNjU1MCkKKworcGFyOTY6ICBUaGlzIGlzIGEgbW9kZW0gZm9yIDk2MDAgYmF1ZCBGU0sgY29tcGF0aWJsZSB0byB0aGUgRzNSVUggc3RhbmRhcmQuCisgICAgICAgIFRoZSBtb2RlbSBkb2VzIGFsbCB0aGUgZmlsdGVyaW5nIGFuZCByZWdlbmVyYXRlcyB0aGUgcmVjZWl2ZXIgY2xvY2suCisgICAgICAgIERhdGEgaXMgdHJhbnNmZXJyZWQgZnJvbSBhbmQgdG8gdGhlIFBDIHZpYSBhIHNoaWZ0IHJlZ2lzdGVyLgorICAgICAgICBUaGUgc2hpZnQgcmVnaXN0ZXIgaXMgZmlsbGVkIHdpdGggMTYgYml0cyBhbmQgYW4gaW50ZXJydXB0IGlzIHNpZ25hbGxlZC4KKyAgICAgICAgVGhlIFBDIHRoZW4gZW1wdGllcyB0aGUgc2hpZnQgcmVnaXN0ZXIgaW4gYSBidXJzdC4gVGhpcyBtb2RlbSBjb25uZWN0cworICAgICAgICB0byB0aGUgcGFyYWxsZWwgcG9ydCwgaGVuY2UgdGhlIG5hbWUuIFRoZSBtb2RlbSBsZWF2ZXMgdGhlIAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSERMQyBwcm90b2NvbCBhbmQgdGhlIHNjcmFtYmxlciBwb2x5bm9taWFsIHRvCisgICAgICAgIHRoZSBQQy4KKworcGljcGFyOiBUaGlzIGlzIGEgcmVkZXNpZ24gb2YgdGhlIHBhcjk2IG1vZGVtIGJ5IEhlbm5pbmcgUmVjaCwgREY5SUMuIFRoZSBtb2RlbQorICAgICAgICBpcyBwcm90b2NvbCBjb21wYXRpYmxlIHRvIHBhcjk2LCBidXQgdXNlcyBvbmx5IHRocmVlIGxvdyBwb3dlciBJQ3MKKyAgICAgICAgYW5kIGNhbiB0aGVyZWZvcmUgYmUgZmVkIGZyb20gdGhlIHBhcmFsbGVsIHBvcnQgYW5kIGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICAgYW4gYWRkaXRpb25hbCBwb3dlciBzdXBwbHkuIEZ1cnRoZXJtb3JlLCBpdCBpbmNvcnBvcmF0ZXMgYSBjYXJyaWVyCisgICAgICAgIGRldGVjdCBjaXJjdWl0cnkuCisKK0VQUDogICAgVGhpcyBpcyBhIGhpZ2gtc3BlZWQgbW9kZW0gYWRhcHRvciB0aGF0IGNvbm5lY3RzIHRvIGFuIGVuaGFuY2VkIHBhcmFsbGVsIHBvcnQuCisgICAgICAgIEl0cyB0YXJnZXQgYXVkaWVuY2UgaXMgdXNlcnMgd29ya2luZyBvdmVyIGEgaGlnaCBzcGVlZCBodWIgKDc2LjhrYml0L3MpLgorCitlcHBmcGdhOiBUaGlzIGlzIGEgcmVkZXNpZ24gb2YgdGhlIEVQUCBhZGFwdG9yLgorCisKKworQWxsIG9mIHRoZSBhYm92ZSBtb2RlbXMgb25seSBzdXBwb3J0IGhhbGYgZHVwbGV4IGNvbW11bmljYXRpb25zLiBIb3dldmVyLAordGhlIGRyaXZlciBzdXBwb3J0cyB0aGUgS0lTUyAoc2VlIGJlbG93KSBmdWxsZHVwbGV4IGNvbW1hbmQuIEl0IHRoZW4gc2ltcGx5CitzdGFydHMgdG8gc2VuZCBhcyBzb29uIGFzIHRoZXJlJ3MgYSBwYWNrZXQgdG8gdHJhbnNtaXQgYW5kIGRvZXMgbm90IGNhcmUKK2Fib3V0IERDRCwgaS5lLiBpdCBzdGFydHMgdG8gc2VuZCBldmVuIGlmIHRoZXJlJ3Mgc29tZW9uZSBlbHNlIG9uIHRoZSBjaGFubmVsLgorVGhpcyBjb21tYW5kIGlzIHJlcXVpcmVkIGJ5IHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBEQU1BIGNoYW5uZWwgCithY2Nlc3MgcHJvdG9jb2wuCisKKworVGhlIEludGVyZmFjZSBvZiB0aGUgZHJpdmVycworCitVbmxpa2UgcHJldmlvdXMgZHJpdmVycywgdGhlc2UgZHJpdmVycyBhcmUgbm8gbG9uZ2VyIGNoYXJhY3RlciBkZXZpY2VzLAorYnV0IHRoZXkgYXJlIG5vdyB0cnVlIGtlcm5lbCBuZXR3b3JrIGludGVyZmFjZXMuIEluc3RhbGxhdGlvbiBpcyB0aGVyZWZvcmUKK3NpbXBsZS4gT25jZSBpbnN0YWxsZWQsIGZvdXIgaW50ZXJmYWNlcyBuYW1lZCBiY3tzZixzaCxwLGV9WzAtM10gYXJlIGF2YWlsYWJsZS4KK3NldGhkbGMgZnJvbSB0aGUgYXgyNSB1dGlsaXRpZXMgbWF5IGJlIHVzZWQgdG8gc2V0IGRyaXZlciBzdGF0ZXMgZXRjLgorVXNlcnMgb2YgdXNlcmxhbmQgQVguMjUgc3RhY2tzIG1heSB1c2UgdGhlIG5ldDJraXNzIHV0aWxpdHkgKGFsc28gYXZhaWxhYmxlCitpbiB0aGUgYXgyNSB1dGlsaXRpZXMgcGFja2FnZSkgdG8gY29udmVydCBwYWNrZXRzIG9mIGEgbmV0d29yayBpbnRlcmZhY2UKK3RvIGEgS0lTUyBzdHJlYW0gb24gYSBwc2V1ZG8gdHR5LiBUaGVyZSdzIGFsc28gYSBwYXRjaCBhdmFpbGFibGUgZnJvbQorbWUgZm9yIFdBTVBFUyB3aGljaCBhbGxvd3MgYXR0YWNoaW5nIGEga2VybmVsIG5ldHdvcmsgaW50ZXJmYWNlIGRpcmVjdGx5LgorCisKK0NvbmZpZ3VyaW5nIHRoZSBkcml2ZXIKKworRXZlcnkgdGltZSBhIGRyaXZlciBpcyBpbnNlcnRlZCBpbnRvIHRoZSBrZXJuZWwsIGl0IGhhcyB0byBrbm93IHdoaWNoCittb2RlbXMgaXQgc2hvdWxkIGFjY2VzcyBhdCB3aGljaCBwb3J0cy4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIHRoZSBzZXRiYXljb20KK3V0aWxpdHkuIElmIHlvdSBhcmUgb25seSB1c2luZyBvbmUgbW9kZW0sIHlvdSBjYW4gYWxzbyBjb25maWd1cmUgdGhlCitkcml2ZXIgZnJvbSB0aGUgaW5zbW9kIGNvbW1hbmQgbGluZSAob3IgYnkgbWVhbnMgb2YgYW4gb3B0aW9uIGxpbmUgaW4KKy9ldGMvbW9kcHJvYmUuY29uZikuCisKK0V4YW1wbGVzOgorICBtb2Rwcm9iZSBiYXljb21fc2VyX2ZkeCBtb2RlPSJzZXIxMioiIGlvYmFzZT0weDNmOCBpcnE9NAorICBzZXRoZGxjIC1pIGJjc2YwIC1wIG1vZGUgInNlcjEyKiIgaW8gMHgzZjggaXJxIDQKKworQm90aCBsaW5lcyBjb25maWd1cmUgdGhlIGZpcnN0IHBvcnQgdG8gZHJpdmUgYSBzZXIxMiBtb2RlbSBhdCB0aGUgZmlyc3QKK3NlcmlhbCBwb3J0IChDT00xIHVuZGVyIERPUykuIFRoZSAqIGluIHRoZSBtb2RlIHBhcmFtZXRlciBpbnN0cnVjdHMgdGhlIGRyaXZlciB0byB1c2UKK3RoZSBzb2Z0d2FyZSBEQ0QgYWxnb3JpdGhtIChzZWUgYmVsb3cpLgorCisgIGluc21vZCBiYXljb21fcGFyIG1vZGU9InBpY3BhciIgaW9iYXNlPTB4Mzc4CisgIHNldGhkbGMgLWkgYmNwMCAtcCBtb2RlICJwaWNwYXIiIGlvIDB4Mzc4CisKK0JvdGggbGluZXMgY29uZmlndXJlIHRoZSBmaXJzdCBwb3J0IHRvIGRyaXZlIGEgcGljcGFyIG1vZGVtIGF0IHRoZQorZmlyc3QgcGFyYWxsZWwgcG9ydCAoTFBUMSB1bmRlciBET1MpLiAoTm90ZTogcGljcGFyIGltcGxpZXMKK2hhcmR3YXJlIERDRCwgcGFyOTYgaW1wbGllcyBzb2Z0d2FyZSBEQ0QpLgorCitUaGUgY2hhbm5lbCBhY2Nlc3MgcGFyYW1ldGVycyBjYW4gYmUgc2V0IHdpdGggc2V0aGRsYyAtYSBvciBraXNzcGFybXMuCitOb3RlIHRoYXQgYm90aCB1dGlsaXRpZXMgaW50ZXJwcmV0IHRoZSB2YWx1ZXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkuCisKKworSGFyZHdhcmUgRENEIHZlcnN1cyBTb2Z0d2FyZSBEQ0QKKworVG8gYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgYWlyLCB0aGUgZHJpdmVyIG11c3Qga25vdyB3aGVuIHRoZSBjaGFubmVsIGlzCitidXN5LiBUaGlzIGlzIHRoZSB0YXNrIG9mIHRoZSBEQ0QgY2lyY3VpdHJ5L3NvZnR3YXJlLiBUaGUgZHJpdmVyIG1heSBlaXRoZXIKK3V0aWxpc2UgYSBzb2Z0d2FyZSBEQ0QgYWxnb3JpdGhtIChvcHRpb25zPTEpIG9yIHVzZSBhIERDRCBzaWduYWwgZnJvbQordGhlIGhhcmR3YXJlIChvcHRpb25zPTApLgorCitzZXIxMjogIGlmIHNvZnR3YXJlIERDRCBpcyB1dGlsaXNlZCwgdGhlIHJhZGlvJ3Mgc3F1ZWxjaCBzaG91bGQgYWx3YXlzIGJlCisgICAgICAgIG9wZW4uIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHNvZnR3YXJlIERDRCBhbGdvcml0aG0sCisgICAgICAgIGFzIGl0IGlzIG11Y2ggZmFzdGVyIHRoYW4gbW9zdCBoYXJkd2FyZSBzcXVlbGNoIGNpcmN1aXRyeS4gVGhlCisgICAgICAgIGRpc2FkdmFudGFnZSBpcyBhIHNsaWdodGx5IGhpZ2hlciBsb2FkIG9uIHRoZSBzeXN0ZW0uCisKK3Bhcjk2OiAgdGhlIHNvZnR3YXJlIERDRCBhbGdvcml0aG0gZm9yIHRoaXMgdHlwZSBvZiBtb2RlbSBpcyByYXRoZXIgcG9vci4KKyAgICAgICAgVGhlIG1vZGVtIHNpbXBseSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBpbXBsZW1lbnQKKyAgICAgICAgYSByZWFzb25hYmxlIERDRCBhbGdvcml0aG0gaW4gc29mdHdhcmUuIFRoZXJlZm9yZSwgaWYgeW91ciByYWRpbworICAgICAgICBmZWVkcyB0aGUgRENEIGlucHV0IG9mIHRoZSBQQVI5NiBtb2RlbSwgdGhlIHVzZSBvZiB0aGUgaGFyZHdhcmUKKyAgICAgICAgRENEIGNpcmN1aXRyeSBpcyByZWNvbW1lbmRlZC4KKworcGljcGFyOiB0aGUgcGljcGFyIG1vZGVtIGZlYXR1cmVzIGEgYnVpbHRpbiBEQ0QgaGFyZHdhcmUsIHdoaWNoIGlzIGhpZ2hseQorICAgICAgICByZWNvbW1lbmRlZC4KKworCisKK0NvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTGludXgga2VybmVsCisKK1RoZSBzZXJpYWwgZHJpdmVyIGFuZCB0aGUgYmF5Y29tIHNlcmlhbCBkcml2ZXJzIGNvbXBldGUKK2ZvciB0aGUgc2FtZSBoYXJkd2FyZSByZXNvdXJjZXMuIE9mIGNvdXJzZSBvbmx5IG9uZSBkcml2ZXIgY2FuIGFjY2VzcyBhIGdpdmVuCitpbnRlcmZhY2UgYXQgYSB0aW1lLiBUaGUgc2VyaWFsIGRyaXZlciBncmFicyBhbGwgaW50ZXJmYWNlcyBpdCBjYW4gZmluZCBhdAorc3RhcnR1cCB0aW1lLiBUaGVyZWZvcmUgdGhlIGJheWNvbSBkcml2ZXJzIHN1YnNlcXVlbnRseSB3b24ndCBiZSBhYmxlIHRvCithY2Nlc3MgYSBzZXJpYWwgcG9ydC4gWW91IG1pZ2h0IHRoZXJlZm9yZSBmaW5kIGl0IG5lY2Vzc2FyeSB0byByZWxlYXNlCithIHBvcnQgb3duZWQgYnkgdGhlIHNlcmlhbCBkcml2ZXIgd2l0aCAnc2V0c2VyaWFsIC9kZXYvdHR5UyMgdWFydCBub25lJywgd2hlcmUKKyMgaXMgdGhlIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBUaGUgYmF5Y29tIGRyaXZlcnMgZG8gbm90IHJlc2VydmUgYW55Citwb3J0cyBhdCBzdGFydHVwLCB1bmxlc3Mgb25lIGlzIHNwZWNpZmllZCBvbiB0aGUgJ2luc21vZCcgY29tbWFuZCBsaW5lLiBBbm90aGVyCittZXRob2QgdG8gc29sdmUgdGhlIHByb2JsZW0gaXMgdG8gY29tcGlsZSBhbGwgZHJpdmVycyBhcyBtb2R1bGVzIGFuZAorbGVhdmUgaXQgdG8ga21vZCB0byBsb2FkIHRoZSBjb3JyZWN0IGRyaXZlciBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uLgorCitUaGUgcGFyYWxsZWwgcG9ydCBkcml2ZXJzIChiYXljb21fcGFyLCBiYXljb21fZXBwKSBub3cgdXNlIHRoZSBwYXJwb3J0IHN1YnN5c3RlbQordG8gYXJiaXRyYXRlIHRoZSBwb3J0cyBiZXR3ZWVuIGRpZmZlcmVudCBjbGllbnQgZHJpdmVycy4KKwordnkgNzNzIGRlCitUb20gU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKK2hiOWpueCBAIGhiOXcuYW1wci5vcmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmMyZWQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CkBAIC0wLDAgKzEsMTYxOCBAQAorCisgICAgICAgICAgICAgICAgICAgTGludXggRXRoZXJuZXQgQm9uZGluZyBEcml2ZXIgSE9XVE8KKworSW5pdGlhbCByZWxlYXNlIDogVGhvbWFzIERhdmlzIDx0YWRhdmlzIGF0IGxibC5nb3Y+CitDb3JyZWN0aW9ucywgSEEgZXh0ZW5zaW9ucyA6IDIwMDAvMTAvMDMtMTUgOgorICAtIFdpbGx5IFRhcnJlYXUgPHdpbGx5IGF0IG1ldGEteC5vcmc+CisgIC0gQ29uc3RhbnRpbmUgR2F2cmlsb3YgPGNvbnN0LWcgYXQgeHBlcnQuY29tPgorICAtIENoYWQgTi4gVGluZGVsIDxjdGluZGVsIGF0IGllZWUgZG90IG9yZz4KKyAgLSBKYW5pY2UgR2lyb3VhcmQgPGdpcm91YXJkIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KKyAgLSBKYXkgVm9zYnVyZ2ggPGZ1YmFyIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KKworUmVvcmdhbml6ZWQgYW5kIHVwZGF0ZWQgRmViIDIwMDUgYnkgSmF5IFZvc2J1cmdoCisKK05vdGUgOgorLS0tLS0tCisJCitUaGUgYm9uZGluZyBkcml2ZXIgb3JpZ2luYWxseSBjYW1lIGZyb20gRG9uYWxkIEJlY2tlcidzIGJlb3d1bGYgcGF0Y2hlcyBmb3IKK2tlcm5lbCAyLjAuIEl0IGhhcyBjaGFuZ2VkIHF1aXRlIGEgYml0IHNpbmNlLCBhbmQgdGhlIG9yaWdpbmFsIHRvb2xzIGZyb20KK2V4dHJlbWUtbGludXggYW5kIGJlb3d1bGYgc2l0ZXMgd2lsbCBub3Qgd29yayB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLgorCitGb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsIHBhdGNoZXMgZm9yIG9sZGVyIGtlcm5lbHMgYW5kIHRoZSB1cGRhdGVkCit1c2Vyc3BhY2UgdG9vbHMsIHBsZWFzZSBmb2xsb3cgdGhlIGxpbmtzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCitUYWJsZSBvZiBDb250ZW50cworPT09PT09PT09PT09PT09PT0KKworMS4gQm9uZGluZyBEcml2ZXIgSW5zdGFsbGF0aW9uCisKKzIuIEJvbmRpbmcgRHJpdmVyIE9wdGlvbnMKKworMy4gQ29uZmlndXJpbmcgQm9uZGluZyBEZXZpY2VzCiszLjEJQ29uZmlndXJhdGlvbiB3aXRoIHN5c2NvbmZpZyBzdXBwb3J0CiszLjIJQ29uZmlndXJhdGlvbiB3aXRoIGluaXRzY3JpcHRzIHN1cHBvcnQKKzMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5CiszLjQJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMKKworNS4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uCis1LjEJQm9uZGluZyBDb25maWd1cmF0aW9uCis1LjIJTmV0d29yayBDb25maWd1cmF0aW9uCisKKzYuIFN3aXRjaCBDb25maWd1cmF0aW9uCisKKzcuIDgwMi4xcSBWTEFOIFN1cHBvcnQKKworOC4gTGluayBNb25pdG9yaW5nCis4LjEJQVJQIE1vbml0b3IgT3BlcmF0aW9uCis4LjIJQ29uZmlndXJpbmcgTXVsdGlwbGUgQVJQIFRhcmdldHMKKzguMwlNSUkgTW9uaXRvciBPcGVyYXRpb24KKworOS4gUG90ZW50aWFsIFRyb3VibGUgU291cmNlcworOS4xCUFkdmVudHVyZXMgaW4gUm91dGluZworOS4yCUV0aGVybmV0IERldmljZSBSZW5hbWluZworOS4zCVBhaW5mdWxseSBTbG93IE9yIE5vIEZhaWxlZCBMaW5rIERldGVjdGlvbiBCeSBNaWltb24KKworMTAuIFNOTVAgYWdlbnRzCisKKzExLiBQcm9taXNjdW91cyBtb2RlCisKKzEyLiBIaWdoIEF2YWlsYWJpbGl0eSBJbmZvcm1hdGlvbgorMTIuMQlIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjEuMQkJQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4yCQlMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIJSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIuMQkJQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4yLjIJCUxpbmsgTW9uaXRvcmluZyBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4zCVN3aXRjaCBCZWhhdmlvciBJc3N1ZXMgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CisKKzEzLiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucworMTMuMQlJQk0gQmxhZGVDZW50ZXIKKworMTQuIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCisKKzE1LiBSZXNvdXJjZXMgYW5kIExpbmtzCisKKworMS4gQm9uZGluZyBEcml2ZXIgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCU1vc3QgcG9wdWxhciBkaXN0cm8ga2VybmVscyBzaGlwIHdpdGggdGhlIGJvbmRpbmcgZHJpdmVyCithbHJlYWR5IGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBhbmQgdGhlIGlmZW5zbGF2ZSB1c2VyIGxldmVsIGNvbnRyb2wKK3Byb2dyYW0gaW5zdGFsbGVkIGFuZCByZWFkeSBmb3IgdXNlLiBJZiB5b3VyIGRpc3RybyBkb2VzIG5vdCwgb3IgeW91CitoYXZlIG5lZWQgdG8gY29tcGlsZSBib25kaW5nIGZyb20gc291cmNlIChlLmcuLCBjb25maWd1cmluZyBhbmQKK2luc3RhbGxpbmcgYSBtYWlubGluZSBrZXJuZWwgZnJvbSBrZXJuZWwub3JnKSwgeW91J2xsIG5lZWQgdG8gcGVyZm9ybQordGhlIGZvbGxvd2luZyBzdGVwczoKKworMS4xIENvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlIGtlcm5lbCB3aXRoIGJvbmRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIGF2YWlsYWJsZSBpbiB0aGUKK2RyaXZlcnMvbmV0L2JvbmRpbmcgc3ViZGlyZWN0b3J5IG9mIHRoZSBtb3N0IHJlY2VudCBrZXJuZWwgc291cmNlCisod2hpY2ggaXMgYXZhaWxhYmxlIG9uIGh0dHA6Ly9rZXJuZWwub3JnKS4KKworCVByaW9yIHRvIHRoZSAyLjQuMTEga2VybmVsLCB0aGUgYm9uZGluZyBkcml2ZXIgd2FzIG1haW50YWluZWQKK2xhcmdlbHkgb3V0c2lkZSB0aGUga2VybmVsIHRyZWU7IHBhdGNoZXMgZm9yIHNvbWUgZWFybGllciBrZXJuZWxzIGFyZQorYXZhaWxhYmxlIG9uIHRoZSBib25kaW5nIHNvdXJjZWZvcmdlIHNpdGUsIGFsdGhvdWdoIHRob3NlIHBhdGNoZXMgYXJlCitzdGlsbCBzZXZlcmFsIHllYXJzIG91dCBvZiBkYXRlLiAgTW9zdCB1c2VycyB3aWxsIHdhbnQgdG8gdXNlIGVpdGhlcgordGhlIG1vc3QgcmVjZW50IGtlcm5lbCBmcm9tIGtlcm5lbC5vcmcgb3Igd2hhdGV2ZXIga2VybmVsIGNhbWUgd2l0aAordGhlaXIgZGlzdHJvLgorCisJQ29uZmlndXJlIGtlcm5lbCB3aXRoICJtYWtlIG1lbnVjb25maWciIChvciAibWFrZSB4Y29uZmlnIiBvcgorIm1ha2UgY29uZmlnIiksIHRoZW4gc2VsZWN0ICJCb25kaW5nIGRyaXZlciBzdXBwb3J0IiBpbiB0aGUgIk5ldHdvcmsKK2RldmljZSBzdXBwb3J0IiBzZWN0aW9uLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29uZmlndXJlIHRoZQorZHJpdmVyIGFzIG1vZHVsZSBzaW5jZSBpdCBpcyBjdXJyZW50bHkgdGhlIG9ubHkgd2F5IHRvIHBhc3MgcGFyYW1ldGVycwordG8gdGhlIGRyaXZlciBvciBjb25maWd1cmUgbW9yZSB0aGFuIG9uZSBib25kaW5nIGRldmljZS4KKworCUJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBuZXcga2VybmVsIGFuZCBtb2R1bGVzLCB0aGVuIHByb2NlZWQgdG8KK3N0ZXAgMi4KKworMS4yIEluc3RhbGwgaWZlbnNsYXZlIENvbnRyb2wgVXRpbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIGlmZW5zbGF2ZSB1c2VyIGxldmVsIGNvbnRyb2wgcHJvZ3JhbSBpcyBpbmNsdWRlZCBpbiB0aGUKK2tlcm5lbCBzb3VyY2UgdHJlZSwgaW4gdGhlIGZpbGUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lmZW5zbGF2ZS5jLgorSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgaWZlbnNsYXZlIHRoYXQKK2NvcnJlc3BvbmRzIHRvIHRoZSBrZXJuZWwgdGhhdCB5b3UgYXJlIHVzaW5nIChlaXRoZXIgZnJvbSB0aGUgc2FtZQorc291cmNlIHRyZWUgb3Igc3VwcGxpZWQgd2l0aCB0aGUgZGlzdHJvKSwgaG93ZXZlciwgaWZlbnNsYXZlCitleGVjdXRhYmxlcyBmcm9tIG9sZGVyIGtlcm5lbHMgc2hvdWxkIGZ1bmN0aW9uIChidXQgZmVhdHVyZXMgbmV3ZXIKK3RoYW4gdGhlIGlmZW5zbGF2ZSByZWxlYXNlIGFyZSBub3Qgc3VwcG9ydGVkKS4gIFJ1bm5pbmcgYW4gaWZlbnNsYXZlCit0aGF0IGlzIG5ld2VyIHRoYW4gdGhlIGtlcm5lbCBpcyBub3Qgc3VwcG9ydGVkLCBhbmQgbWF5IG9yIG1heSBub3QKK3dvcmsuCisKKwlUbyBpbnN0YWxsIGlmZW5zbGF2ZSwgZG8gdGhlIGZvbGxvd2luZzoKKworIyBnY2MgLVdhbGwgLU8gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIGlmZW5zbGF2ZS5jIC1vIGlmZW5zbGF2ZQorIyBjcCBpZmVuc2xhdmUgL3NiaW4vaWZlbnNsYXZlCisKKwlJZiB5b3VyIGtlcm5lbCBzb3VyY2UgaXMgbm90IGluICIvdXNyL3NyYy9saW51eCwiIHRoZW4gcmVwbGFjZQorIi91c3Ivc3JjL2xpbnV4L2luY2x1ZGUiIGluIHRoZSBhYm92ZSB3aXRoIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGtlcm5lbAorc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgorCisJWW91IG1heSB3aXNoIHRvIGJhY2sgdXAgYW55IGV4aXN0aW5nIC9zYmluL2lmZW5zbGF2ZSwgb3IsIGZvcgordGVzdGluZyBvciBpbmZvcm1hbCB1c2UsIHRhZyB0aGUgaWZlbnNsYXZlIHRvIHRoZSBrZXJuZWwgdmVyc2lvbgorKGUuZy4sIG5hbWUgdGhlIGlmZW5zbGF2ZSBleGVjdXRhYmxlIC9zYmluL2lmZW5zbGF2ZS0yLjYuMTApLgorCitJTVBPUlRBTlQgTk9URToKKworCUlmIHlvdSBvbWl0IHRoZSAiLUkiIG9yIHNwZWNpZnkgYW4gaW5jb3JyZWN0IGRpcmVjdG9yeSwgeW91CittYXkgZW5kIHVwIHdpdGggYW4gaWZlbnNsYXZlIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGtlcm5lbAoreW91J3JlIHRyeWluZyB0byBidWlsZCBpdCBmb3IuICBTb21lIGRpc3Ryb3MgKGUuZy4sIFJlZCBIYXQgZnJvbSA3LjEKK29ud2FyZHMpIGRvIG5vdCBoYXZlIC91c3IvaW5jbHVkZS9saW51eCBzeW1ib2xpY2FsbHkgbGlua2VkIHRvIHRoZQorZGVmYXVsdCBrZXJuZWwgc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgorCisKKzIuIEJvbmRpbmcgRHJpdmVyIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworCU9wdGlvbnMgZm9yIHRoZSBib25kaW5nIGRyaXZlciBhcmUgc3VwcGxpZWQgYXMgcGFyYW1ldGVycyB0bwordGhlIGJvbmRpbmcgbW9kdWxlIGF0IGxvYWQgdGltZS4gIFRoZXkgbWF5IGJlIGdpdmVuIGFzIGNvbW1hbmQgbGluZQorYXJndW1lbnRzIHRvIHRoZSBpbnNtb2Qgb3IgbW9kcHJvYmUgY29tbWFuZCwgYnV0IGFyZSB1c3VhbGx5IHNwZWNpZmllZAoraW4gZWl0aGVyIHRoZSAvZXRjL21vZHByb2JlLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpbiBhCitkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzb21lIG9mIHdoaWNoIGFyZSBkZXRhaWxlZCBpbiB0aGUKK25leHQgc2VjdGlvbikuCisKKwlUaGUgYXZhaWxhYmxlIGJvbmRpbmcgZHJpdmVyIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBiZWxvdy4gSWYgYQorcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4gIFdoZW4gaW5pdGlhbGx5Citjb25maWd1cmluZyBhIGJvbmQsIGl0IGlzIHJlY29tbWVuZGVkICJ0YWlsIC1mIC92YXIvbG9nL21lc3NhZ2VzIiBiZQorcnVuIGluIGEgc2VwYXJhdGUgd2luZG93IHRvIHdhdGNoIGZvciBib25kaW5nIGRyaXZlciBlcnJvciBtZXNzYWdlcy4KKworCUl0IGlzIGNyaXRpY2FsIHRoYXQgZWl0aGVyIHRoZSBtaWltb24gb3IgYXJwX2ludGVydmFsIGFuZAorYXJwX2lwX3RhcmdldCBwYXJhbWV0ZXJzIGJlIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHNlcmlvdXMgbmV0d29yaworZGVncmFkYXRpb24gd2lsbCBvY2N1ciBkdXJpbmcgbGluayBmYWlsdXJlcy4gIFZlcnkgZmV3IGRldmljZXMgZG8gbm90CitzdXBwb3J0IGF0IGxlYXN0IG1paW1vbiwgc28gdGhlcmUgaXMgcmVhbGx5IG5vIHJlYXNvbiBub3QgdG8gdXNlIGl0LgorCisJT3B0aW9ucyB3aXRoIHRleHR1YWwgdmFsdWVzIHdpbGwgYWNjZXB0IGVpdGhlciB0aGUgdGV4dCBuYW1lCisJb3IsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG9wdGlvbiB2YWx1ZS4gIEUuZy4sCisJIm1vZGU9ODAyLjNhZCIgYW5kICJtb2RlPTQiIHNldCB0aGUgc2FtZSBtb2RlLgorCisJVGhlIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3M6CisKK2FycF9pbnRlcnZhbAorCisJU3BlY2lmaWVzIHRoZSBBUlAgbW9uaXRvcmluZyBmcmVxdWVuY3kgaW4gbWlsbGktc2Vjb25kcy4gSWYKKwlBUlAgbW9uaXRvcmluZyBpcyB1c2VkIGluIGEgbG9hZC1iYWxhbmNpbmcgbW9kZSAobW9kZSAwIG9yIDIpLAorCXRoZSBzd2l0Y2ggc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gYSBtb2RlIHRoYXQgZXZlbmx5CisJZGlzdHJpYnV0ZXMgcGFja2V0cyBhY3Jvc3MgYWxsIGxpbmtzIC0gc3VjaCBhcyByb3VuZC1yb2Jpbi4gSWYKKwl0aGUgc3dpdGNoIGlzIGNvbmZpZ3VyZWQgdG8gZGlzdHJpYnV0ZSB0aGUgcGFja2V0cyBpbiBhbiBYT1IKKwlmYXNoaW9uLCBhbGwgcmVwbGllcyBmcm9tIHRoZSBBUlAgdGFyZ2V0cyB3aWxsIGJlIHJlY2VpdmVkIG9uCisJdGhlIHNhbWUgbGluayB3aGljaCBjb3VsZCBjYXVzZSB0aGUgb3RoZXIgdGVhbSBtZW1iZXJzIHRvCisJZmFpbC4gQVJQIG1vbml0b3Jpbmcgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKwltaWltb24uIEEgdmFsdWUgb2YgMCBkaXNhYmxlcyBBUlAgbW9uaXRvcmluZy4gVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyAwLgorCithcnBfaXBfdGFyZ2V0CisKKwlTcGVjaWZpZXMgdGhlIGlwIGFkZHJlc3NlcyB0byB1c2Ugd2hlbiBhcnBfaW50ZXJ2YWwgaXMgPiAwLgorCVRoZXNlIGFyZSB0aGUgdGFyZ2V0cyBvZiB0aGUgQVJQIHJlcXVlc3Qgc2VudCB0byBkZXRlcm1pbmUgdGhlCisJaGVhbHRoIG9mIHRoZSBsaW5rIHRvIHRoZSB0YXJnZXRzLiAgU3BlY2lmeSB0aGVzZSB2YWx1ZXMgaW4KKwlkZGQuZGRkLmRkZC5kZGQgZm9ybWF0LiAgTXVsdGlwbGUgaXAgYWRyZXNzZXMgbXVzdCBiZQorCXNlcGVyYXRlZCBieSBhIGNvbW1hLiAgQXQgbGVhc3Qgb25lIElQIGFkZHJlc3MgbXVzdCBiZSBnaXZlbgorCWZvciBBUlAgbW9uaXRvcmluZyB0byBmdW5jdGlvbi4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXJnZXRzCisJdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGlzIDE2LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgbm8gSVAKKwlhZGRyZXNzZXMuCisKK2Rvd25kZWxheQorCisJU3BlY2lmaWVzIHRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgYmVmb3JlIGRpc2FibGluZworCWEgc2xhdmUgYWZ0ZXIgYSBsaW5rIGZhaWx1cmUgaGFzIGJlZW4gZGV0ZWN0ZWQuICBUaGlzIG9wdGlvbgorCWlzIG9ubHkgdmFsaWQgZm9yIHRoZSBtaWltb24gbGluayBtb25pdG9yLiAgVGhlIGRvd25kZWxheQorCXZhbHVlIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBtaWltb24gdmFsdWU7IGlmIG5vdCwgaXQKKwl3aWxsIGJlIHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZS4gIFRoZSBkZWZhdWx0CisJdmFsdWUgaXMgMC4KKworbGFjcF9yYXRlCisKKwlPcHRpb24gc3BlY2lmeWluZyB0aGUgcmF0ZSBpbiB3aGljaCB3ZSdsbCBhc2sgb3VyIGxpbmsgcGFydG5lcgorCXRvIHRyYW5zbWl0IExBQ1BEVSBwYWNrZXRzIGluIDgwMi4zYWQgbW9kZS4gIFBvc3NpYmxlIHZhbHVlcworCWFyZToKKworCXNsb3cgb3IgMAorCQlSZXF1ZXN0IHBhcnRuZXIgdG8gdHJhbnNtaXQgTEFDUERVcyBldmVyeSAzMCBzZWNvbmRzIChkZWZhdWx0KQorCisJZmFzdCBvciAxCisJCVJlcXVlc3QgcGFydG5lciB0byB0cmFuc21pdCBMQUNQRFVzIGV2ZXJ5IDEgc2Vjb25kCisKK21heF9ib25kcworCisJU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYm9uZGluZyBkZXZpY2VzIHRvIGNyZWF0ZSBmb3IgdGhpcworCWluc3RhbmNlIG9mIHRoZSBib25kaW5nIGRyaXZlci4gIEUuZy4sIGlmIG1heF9ib25kcyBpcyAzLCBhbmQKKwl0aGUgYm9uZGluZyBkcml2ZXIgaXMgbm90IGFscmVhZHkgbG9hZGVkLCB0aGVuIGJvbmQwLCBib25kMQorCWFuZCBib25kMiB3aWxsIGJlIGNyZWF0ZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLgorCittaWltb24KKworCVNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IGluIG1pbGxpLXNlY29uZHMgdGhhdCBNSUkgbGluaworCW1vbml0b3Jpbmcgd2lsbCBvY2N1ci4gIEEgdmFsdWUgb2YgemVybyBkaXNhYmxlcyBNSUkgbGluaworCW1vbml0b3JpbmcuICBBIHZhbHVlIG9mIDEwMCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuICBUaGUKKwl1c2VfY2FycmllciBvcHRpb24sIGJlbG93LCBhZmZlY3RzIGhvdyB0aGUgbGluayBzdGF0ZSBpcworCWRldGVybWluZWQuICBTZWUgdGhlIEhpZ2ggQXZhaWxhYmlsaXR5IHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwKKwlpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCisKK21vZGUKKworCVNwZWNpZmllcyBvbmUgb2YgdGhlIGJvbmRpbmcgcG9saWNpZXMuIFRoZSBkZWZhdWx0IGlzCisJYmFsYW5jZS1yciAocm91bmQgcm9iaW4pLiAgUG9zc2libGUgdmFsdWVzIGFyZToKKworCWJhbGFuY2UtcnIgb3IgMAorCisJCVJvdW5kLXJvYmluIHBvbGljeTogVHJhbnNtaXQgcGFja2V0cyBpbiBzZXF1ZW50aWFsCisJCW9yZGVyIGZyb20gdGhlIGZpcnN0IGF2YWlsYWJsZSBzbGF2ZSB0aHJvdWdoIHRoZQorCQlsYXN0LiAgVGhpcyBtb2RlIHByb3ZpZGVzIGxvYWQgYmFsYW5jaW5nIGFuZCBmYXVsdAorCQl0b2xlcmFuY2UuCisKKwlhY3RpdmUtYmFja3VwIG9yIDEKKworCQlBY3RpdmUtYmFja3VwIHBvbGljeTogT25seSBvbmUgc2xhdmUgaW4gdGhlIGJvbmQgaXMKKwkJYWN0aXZlLiAgQSBkaWZmZXJlbnQgc2xhdmUgYmVjb21lcyBhY3RpdmUgaWYsIGFuZCBvbmx5CisJCWlmLCB0aGUgYWN0aXZlIHNsYXZlIGZhaWxzLiAgVGhlIGJvbmQncyBNQUMgYWRkcmVzcyBpcworCQlleHRlcm5hbGx5IHZpc2libGUgb24gb25seSBvbmUgcG9ydCAobmV0d29yayBhZGFwdGVyKQorCQl0byBhdm9pZCBjb25mdXNpbmcgdGhlIHN3aXRjaC4gIFRoaXMgbW9kZSBwcm92aWRlcworCQlmYXVsdCB0b2xlcmFuY2UuICBUaGUgcHJpbWFyeSBvcHRpb24gYWZmZWN0cyB0aGUKKwkJYmVoYXZpb3Igb2YgdGhpcyBtb2RlLgorCisJYmFsYW5jZS14b3Igb3IgMgorCisJCVhPUiBwb2xpY3k6IFRyYW5zbWl0IGJhc2VkIG9uIFsoc291cmNlIE1BQyBhZGRyZXNzCisJCVhPUidkIHdpdGggZGVzdGluYXRpb24gTUFDIGFkZHJlc3MpIG1vZHVsbyBzbGF2ZQorCQljb3VudF0uICBUaGlzIHNlbGVjdHMgdGhlIHNhbWUgc2xhdmUgZm9yIGVhY2gKKwkJZGVzdGluYXRpb24gTUFDIGFkZHJlc3MuICBUaGlzIG1vZGUgcHJvdmlkZXMgbG9hZAorCQliYWxhbmNpbmcgYW5kIGZhdWx0IHRvbGVyYW5jZS4KKworCWJyb2FkY2FzdCBvciAzCisKKwkJQnJvYWRjYXN0IHBvbGljeTogdHJhbnNtaXRzIGV2ZXJ5dGhpbmcgb24gYWxsIHNsYXZlCisJCWludGVyZmFjZXMuICBUaGlzIG1vZGUgcHJvdmlkZXMgZmF1bHQgdG9sZXJhbmNlLgorCisJODAyLjNhZCBvciA0CisKKwkJSUVFRSA4MDIuM2FkIER5bmFtaWMgbGluayBhZ2dyZWdhdGlvbi4gIENyZWF0ZXMKKwkJYWdncmVnYXRpb24gZ3JvdXBzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc3BlZWQgYW5kCisJCWR1cGxleCBzZXR0aW5ncy4gIFV0aWxpemVzIGFsbCBzbGF2ZXMgaW4gdGhlIGFjdGl2ZQorCQlhZ2dyZWdhdG9yIGFjY29yZGluZyB0byB0aGUgODAyLjNhZCBzcGVjaWZpY2F0aW9uLgorCisJCVByZS1yZXF1aXNpdGVzOgorCisJCTEuIEV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgYmFzZSBkcml2ZXJzIGZvciByZXRyaWV2aW5nCisJCXRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIGVhY2ggc2xhdmUuCisKKwkJMi4gQSBzd2l0Y2ggdGhhdCBzdXBwb3J0cyBJRUVFIDgwMi4zYWQgRHluYW1pYyBsaW5rCisJCWFnZ3JlZ2F0aW9uLgorCisJCU1vc3Qgc3dpdGNoZXMgd2lsbCByZXF1aXJlIHNvbWUgdHlwZSBvZiBjb25maWd1cmF0aW9uCisJCXRvIGVuYWJsZSA4MDIuM2FkIG1vZGUuCisKKwliYWxhbmNlLXRsYiBvciA1CisKKwkJQWRhcHRpdmUgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmc6IGNoYW5uZWwgYm9uZGluZyB0aGF0CisJCWRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgc3dpdGNoIHN1cHBvcnQuICBUaGUKKwkJb3V0Z29pbmcgdHJhZmZpYyBpcyBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCisJCWN1cnJlbnQgbG9hZCAoY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIHNwZWVkKSBvbiBlYWNoCisJCXNsYXZlLiAgSW5jb21pbmcgdHJhZmZpYyBpcyByZWNlaXZlZCBieSB0aGUgY3VycmVudAorCQlzbGF2ZS4gIElmIHRoZSByZWNlaXZpbmcgc2xhdmUgZmFpbHMsIGFub3RoZXIgc2xhdmUKKwkJdGFrZXMgb3ZlciB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGZhaWxlZCByZWNlaXZpbmcKKwkJc2xhdmUuCisKKwkJUHJlcmVxdWlzaXRlOgorCisJCUV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgYmFzZSBkcml2ZXJzIGZvciByZXRyaWV2aW5nIHRoZQorCQlzcGVlZCBvZiBlYWNoIHNsYXZlLgorCisJYmFsYW5jZS1hbGIgb3IgNgorCisJCUFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nOiBpbmNsdWRlcyBiYWxhbmNlLXRsYiBwbHVzCisJCXJlY2VpdmUgbG9hZCBiYWxhbmNpbmcgKHJsYikgZm9yIElQVjQgdHJhZmZpYywgYW5kCisJCWRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgc3dpdGNoIHN1cHBvcnQuICBUaGUKKwkJcmVjZWl2ZSBsb2FkIGJhbGFuY2luZyBpcyBhY2hpZXZlZCBieSBBUlAgbmVnb3RpYXRpb24uCisJCVRoZSBib25kaW5nIGRyaXZlciBpbnRlcmNlcHRzIHRoZSBBUlAgUmVwbGllcyBzZW50IGJ5CisJCXRoZSBsb2NhbCBzeXN0ZW0gb24gdGhlaXIgd2F5IG91dCBhbmQgb3ZlcndyaXRlcyB0aGUKKwkJc291cmNlIGhhcmR3YXJlIGFkZHJlc3Mgd2l0aCB0aGUgdW5pcXVlIGhhcmR3YXJlCisJCWFkZHJlc3Mgb2Ygb25lIG9mIHRoZSBzbGF2ZXMgaW4gdGhlIGJvbmQgc3VjaCB0aGF0CisJCWRpZmZlcmVudCBwZWVycyB1c2UgZGlmZmVyZW50IGhhcmR3YXJlIGFkZHJlc3NlcyBmb3IKKwkJdGhlIHNlcnZlci4KKworCQlSZWNlaXZlIHRyYWZmaWMgZnJvbSBjb25uZWN0aW9ucyBjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXIKKwkJaXMgYWxzbyBiYWxhbmNlZC4gIFdoZW4gdGhlIGxvY2FsIHN5c3RlbSBzZW5kcyBhbiBBUlAKKwkJUmVxdWVzdCB0aGUgYm9uZGluZyBkcml2ZXIgY29waWVzIGFuZCBzYXZlcyB0aGUgcGVlcidzCisJCUlQIGluZm9ybWF0aW9uIGZyb20gdGhlIEFSUCBwYWNrZXQuICBXaGVuIHRoZSBBUlAKKwkJUmVwbHkgYXJyaXZlcyBmcm9tIHRoZSBwZWVyLCBpdHMgaGFyZHdhcmUgYWRkcmVzcyBpcworCQlyZXRyaWV2ZWQgYW5kIHRoZSBib25kaW5nIGRyaXZlciBpbml0aWF0ZXMgYW4gQVJQCisJCXJlcGx5IHRvIHRoaXMgcGVlciBhc3NpZ25pbmcgaXQgdG8gb25lIG9mIHRoZSBzbGF2ZXMKKwkJaW4gdGhlIGJvbmQuICBBIHByb2JsZW1hdGljIG91dGNvbWUgb2YgdXNpbmcgQVJQCisJCW5lZ290aWF0aW9uIGZvciBiYWxhbmNpbmcgaXMgdGhhdCBlYWNoIHRpbWUgdGhhdCBhbgorCQlBUlAgcmVxdWVzdCBpcyBicm9hZGNhc3QgaXQgdXNlcyB0aGUgaGFyZHdhcmUgYWRkcmVzcworCQlvZiB0aGUgYm9uZC4gIEhlbmNlLCBwZWVycyBsZWFybiB0aGUgaGFyZHdhcmUgYWRkcmVzcworCQlvZiB0aGUgYm9uZCBhbmQgdGhlIGJhbGFuY2luZyBvZiByZWNlaXZlIHRyYWZmaWMKKwkJY29sbGFwc2VzIHRvIHRoZSBjdXJyZW50IHNsYXZlLiAgVGhpcyBpcyBoYW5kbGVkIGJ5CisJCXNlbmRpbmcgdXBkYXRlcyAoQVJQIFJlcGxpZXMpIHRvIGFsbCB0aGUgcGVlcnMgd2l0aAorCQl0aGVpciBpbmRpdmlkdWFsbHkgYXNzaWduZWQgaGFyZHdhcmUgYWRkcmVzcyBzdWNoIHRoYXQKKwkJdGhlIHRyYWZmaWMgaXMgcmVkaXN0cmlidXRlZC4gIFJlY2VpdmUgdHJhZmZpYyBpcyBhbHNvCisJCXJlZGlzdHJpYnV0ZWQgd2hlbiBhIG5ldyBzbGF2ZSBpcyBhZGRlZCB0byB0aGUgYm9uZAorCQlhbmQgd2hlbiBhbiBpbmFjdGl2ZSBzbGF2ZSBpcyByZS1hY3RpdmF0ZWQuICBUaGUKKwkJcmVjZWl2ZSBsb2FkIGlzIGRpc3RyaWJ1dGVkIHNlcXVlbnRpYWxseSAocm91bmQgcm9iaW4pCisJCWFtb25nIHRoZSBncm91cCBvZiBoaWdoZXN0IHNwZWVkIHNsYXZlcyBpbiB0aGUgYm9uZC4KKworCQlXaGVuIGEgbGluayBpcyByZWNvbm5lY3RlZCBvciBhIG5ldyBzbGF2ZSBqb2lucyB0aGUKKwkJYm9uZCB0aGUgcmVjZWl2ZSB0cmFmZmljIGlzIHJlZGlzdHJpYnV0ZWQgYW1vbmcgYWxsCisJCWFjdGl2ZSBzbGF2ZXMgaW4gdGhlIGJvbmQgYnkgaW50aWF0aW5nIEFSUCBSZXBsaWVzCisJCXdpdGggdGhlIHNlbGVjdGVkIG1hYyBhZGRyZXNzIHRvIGVhY2ggb2YgdGhlCisJCWNsaWVudHMuIFRoZSB1cGRlbGF5IHBhcmFtZXRlciAoZGV0YWlsZWQgYmVsb3cpIG11c3QKKwkJYmUgc2V0IHRvIGEgdmFsdWUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBzd2l0Y2gncworCQlmb3J3YXJkaW5nIGRlbGF5IHNvIHRoYXQgdGhlIEFSUCBSZXBsaWVzIHNlbnQgdG8gdGhlCisJCXBlZXJzIHdpbGwgbm90IGJlIGJsb2NrZWQgYnkgdGhlIHN3aXRjaC4KKworCQlQcmVyZXF1aXNpdGVzOgorCisJCTEuIEV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgYmFzZSBkcml2ZXJzIGZvciByZXRyaWV2aW5nCisJCXRoZSBzcGVlZCBvZiBlYWNoIHNsYXZlLgorCisJCTIuIEJhc2UgZHJpdmVyIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGhhcmR3YXJlCisJCWFkZHJlc3Mgb2YgYSBkZXZpY2Ugd2hpbGUgaXQgaXMgb3Blbi4gIFRoaXMgaXMKKwkJcmVxdWlyZWQgc28gdGhhdCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBvbmUgc2xhdmUgaW4gdGhlCisJCXRlYW0gdXNpbmcgdGhlIGJvbmQgaGFyZHdhcmUgYWRkcmVzcyAodGhlCisJCWN1cnJfYWN0aXZlX3NsYXZlKSB3aGlsZSBoYXZpbmcgYSB1bmlxdWUgaGFyZHdhcmUKKwkJYWRkcmVzcyBmb3IgZWFjaCBzbGF2ZSBpbiB0aGUgYm9uZC4gIElmIHRoZQorCQljdXJyX2FjdGl2ZV9zbGF2ZSBmYWlscyBpdHMgaGFyZHdhcmUgYWRkcmVzcyBpcworCQlzd2FwcGVkIHdpdGggdGhlIG5ldyBjdXJyX2FjdGl2ZV9zbGF2ZSB0aGF0IHdhcworCQljaG9zZW4uCisKK3ByaW1hcnkKKworCUEgc3RyaW5nIChldGgwLCBldGgyLCBldGMpIHNwZWNpZnlpbmcgd2hpY2ggc2xhdmUgaXMgdGhlCisJcHJpbWFyeSBkZXZpY2UuICBUaGUgc3BlY2lmaWVkIGRldmljZSB3aWxsIGFsd2F5cyBiZSB0aGUKKwlhY3RpdmUgc2xhdmUgd2hpbGUgaXQgaXMgYXZhaWxhYmxlLiAgT25seSB3aGVuIHRoZSBwcmltYXJ5IGlzCisJb2ZmLWxpbmUgd2lsbCBhbHRlcm5hdGUgZGV2aWNlcyBiZSB1c2VkLiAgVGhpcyBpcyB1c2VmdWwgd2hlbgorCW9uZSBzbGF2ZSBpcyBwcmVmZXJyZWQgb3ZlciBhbm90aGVyLCBlLmcuLCB3aGVuIG9uZSBzbGF2ZSBoYXMKKwloaWdoZXIgdGhyb3VnaHB1dCB0aGFuIGFub3RoZXIuCisKKwlUaGUgcHJpbWFyeSBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWN0aXZlLWJhY2t1cCBtb2RlLgorCit1cGRlbGF5CisKKwlTcGVjaWZpZXMgdGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgZW5hYmxpbmcgYQorCXNsYXZlIGFmdGVyIGEgbGluayByZWNvdmVyeSBoYXMgYmVlbiBkZXRlY3RlZC4gIFRoaXMgb3B0aW9uIGlzCisJb25seSB2YWxpZCBmb3IgdGhlIG1paW1vbiBsaW5rIG1vbml0b3IuICBUaGUgdXBkZWxheSB2YWx1ZQorCXNob3VsZCBiZSBhIG11bHRpcGxlIG9mIHRoZSBtaWltb24gdmFsdWU7IGlmIG5vdCwgaXQgd2lsbCBiZQorCXJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCisKK3VzZV9jYXJyaWVyCisKKwlTcGVjaWZpZXMgd2hldGhlciBvciBub3QgbWlpbW9uIHNob3VsZCB1c2UgTUlJIG9yIEVUSFRPT0wKKwlpb2N0bHMgdnMuIG5ldGlmX2NhcnJpZXJfb2soKSB0byBkZXRlcm1pbmUgdGhlIGxpbmsKKwlzdGF0dXMuIFRoZSBNSUkgb3IgRVRIVE9PTCBpb2N0bHMgYXJlIGxlc3MgZWZmaWNpZW50IGFuZAorCXV0aWxpemUgYSBkZXByZWNhdGVkIGNhbGxpbmcgc2VxdWVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuICBUaGUKKwluZXRpZl9jYXJyaWVyX29rKCkgcmVsaWVzIG9uIHRoZSBkZXZpY2UgZHJpdmVyIHRvIG1haW50YWluIGl0cworCXN0YXRlIHdpdGggbmV0aWZfY2Fycmllcl9vbi9vZmY7IGF0IHRoaXMgd3JpdGluZywgbW9zdCwgYnV0CisJbm90IGFsbCwgZGV2aWNlIGRyaXZlcnMgc3VwcG9ydCB0aGlzIGZhY2lsaXR5LgorCisJSWYgYm9uZGluZyBpbnNpc3RzIHRoYXQgdGhlIGxpbmsgaXMgdXAgd2hlbiBpdCBzaG91bGQgbm90IGJlLAorCWl0IG1heSBiZSB0aGF0IHlvdXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQKKwluZXRpZl9jYXJyaWVyX29uL29mZi4gIFRoZSBkZWZhdWx0IHN0YXRlIGZvciBuZXRpZl9jYXJyaWVyIGlzCisJImNhcnJpZXIgb24sIiBzbyBpZiBhIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IG5ldGlmX2NhcnJpZXIsCisJaXQgd2lsbCBhcHBlYXIgYXMgaWYgdGhlIGxpbmsgaXMgYWx3YXlzIHVwLiAgSW4gdGhpcyBjYXNlLAorCXNldHRpbmcgdXNlX2NhcnJpZXIgdG8gMCB3aWxsIGNhdXNlIGJvbmRpbmcgdG8gcmV2ZXJ0IHRvIHRoZQorCU1JSSAvIEVUSFRPT0wgaW9jdGwgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgbGluayBzdGF0ZS4KKworCUEgdmFsdWUgb2YgMSBlbmFibGVzIHRoZSB1c2Ugb2YgbmV0aWZfY2Fycmllcl9vaygpLCBhIHZhbHVlIG9mCisJMCB3aWxsIHVzZSB0aGUgZGVwcmVjYXRlZCBNSUkgLyBFVEhUT09MIGlvY3Rscy4gIFRoZSBkZWZhdWx0CisJdmFsdWUgaXMgMS4KKworCisKKzMuIENvbmZpZ3VyaW5nIEJvbmRpbmcgRGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlUaGVyZSBhcmUsIGVzc2VudGlhbGx5LCB0d28gbWV0aG9kcyBmb3IgY29uZmlndXJpbmcgYm9uZGluZzoKK3dpdGggc3VwcG9ydCBmcm9tIHRoZSBkaXN0cm8ncyBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGFuZAord2l0aG91dC4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdHdvIHBhY2thZ2VzIGZvciB0aGUgbmV0d29yaworaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnLiAgUmVjZW50IHZlcnNpb25zIG9mCit0aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyIHZlcnNpb25zIGRvIG5vdC4KKworCVdlIHdpbGwgZmlyc3QgZGVzY3JpYmUgdGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGJvbmRpbmcgZm9yCitkaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzIGFuZCBzeXNjb25maWcgd2l0aCBmdWxsIG9yCitwYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZworYm9uZGluZyB3aXRob3V0IHN1cHBvcnQgZnJvbSB0aGUgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzIChpLmUuLAorb2xkZXIgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnKS4KKworCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZyBvcgoraW5pdHNjcmlwdHMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCitEZXRlcm1pbmluZyB0aGlzIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuCisKKwlGaXJzdCwgaXNzdWUgdGhlIGNvbW1hbmQ6CisKKyQgcnBtIC1xZiAvc2Jpbi9pZnVwCisKKwlJdCB3aWxsIHJlc3BvbmQgd2l0aCBhIGxpbmUgb2YgdGV4dCBzdGFydGluZyB3aXRoIGVpdGhlcgorImluaXRzY3JpcHRzIiBvciAic3lzY29uZmlnLCIgZm9sbG93ZWQgYnkgc29tZSBudW1iZXJzLiAgVGhpcyBpcyB0aGUKK3BhY2thZ2UgdGhhdCBwcm92aWRlcyB5b3VyIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cy4KKworCU5leHQsIHRvIGRldGVybWluZSBpZiB5b3VyIGluc3RhbGxhdGlvbiBzdXBwb3J0cyBib25kaW5nLAoraXNzdWUgdGhlIGNvbW1hbmQ6CisKKyQgZ3JlcCBpZmVuc2xhdmUgL3NiaW4vaWZ1cAorCisJSWYgdGhpcyByZXR1cm5zIGFueSBtYXRjaGVzLCB0aGVuIHlvdXIgaW5pdHNjcmlwdHMgb3IKK3N5c2NvbmZpZyBoYXMgc3VwcG9ydCBmb3IgYm9uZGluZy4KKworMy4xIENvbmZpZ3VyYXRpb24gd2l0aCBzeXNjb25maWcgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB1c2luZyBhIHZlcnNpb24gb2Ygc3lzY29uZmlnCit3aXRoIGJvbmRpbmcgc3VwcG9ydCwgZm9yIGV4YW1wbGUsIFN1U0UgTGludXggRW50ZXJwcmlzZSBTZXJ2ZXIgOS4KKworCVN1U0UgU0xFUyA5J3MgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIHN5c3RlbSBkb2VzIHN1cHBvcnQKK2JvbmRpbmcsIGhvd2V2ZXIsIGF0IHRoaXMgd3JpdGluZywgdGhlIFlhU1Qgc3lzdGVtIGNvbmZpZ3VyYXRpb24KK2Zyb250ZW5kIGRvZXMgbm90IHByb3ZpZGUgYW55IG1lYW5zIHRvIHdvcmsgd2l0aCBib25kaW5nIGRldmljZXMuCitCb25kaW5nIGRldmljZXMgY2FuIGJlIG1hbmFnZWQgYnkgaGFuZCwgaG93ZXZlciwgYXMgZm9sbG93cy4KKworCUZpcnN0LCBpZiB0aGV5IGhhdmUgbm90IGFscmVhZHkgYmVlbiBjb25maWd1cmVkLCBjb25maWd1cmUgdGhlCitzbGF2ZSBkZXZpY2VzLiAgT24gU0xFUyA5LCB0aGlzIGlzIG1vc3QgZWFzaWx5IGRvbmUgYnkgcnVubmluZyB0aGUKK3lhc3QyIHN5c2NvbmZpZyBjb25maWd1cmF0aW9uIHV0aWxpdHkuICBUaGUgZ29hbCBpcyBmb3IgdG8gY3JlYXRlIGFuCitpZmNmZy1pZCBmaWxlIGZvciBlYWNoIHNsYXZlIGRldmljZS4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gYWNjb21wbGlzaAordGhpcyBpcyB0byBjb25maWd1cmUgdGhlIGRldmljZXMgZm9yIERIQ1AuICBUaGUgbmFtZSBvZiB0aGUKK2NvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZWFjaCBkZXZpY2Ugd2lsbCBiZSBvZiB0aGUgZm9ybToKKworaWZjZmctaWQteHg6eHg6eHg6eHg6eHg6eHgKKworCVdoZXJlIHRoZSAieHgiIHBvcnRpb24gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBkaWdpdHMgZnJvbQordGhlIGRldmljZSdzIHBlcm1hbmVudCBNQUMgYWRkcmVzcy4KKworCU9uY2UgdGhlIHNldCBvZiBpZmNmZy1pZC14eDp4eDp4eDp4eDp4eDp4eCBmaWxlcyBoYXMgYmVlbgorY3JlYXRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBzbGF2ZQorZGV2aWNlcyAodGhlIE1BQyBhZGRyZXNzZXMgY29ycmVzcG9uZCB0byB0aG9zZSBvZiB0aGUgc2xhdmUgZGV2aWNlcykuCitCZWZvcmUgZWRpdGluZywgdGhlIGZpbGUgd2lsbCBjb250YWluIG11bGlwbGUgbGluZXMsIGFuZCB3aWxsIGxvb2sKK3NvbWV0aGluZyBsaWtlIHRoaXM6CisKK0JPT1RQUk9UTz0nZGhjcCcKK1NUQVJUTU9ERT0nb24nCitVU0VSQ1RMPSdubycKK1VOSVFVRT0nWE56dS5XZVpHT0dGKzR3RScKK19ubV9uYW1lPSdidXMtcGNpLTAwMDE6NjE6MDEuMCcKKworCUNoYW5nZSB0aGUgQk9PVFBST1RPIGFuZCBTVEFSVE1PREUgbGluZXMgdG8gdGhlIGZvbGxvd2luZzoKKworQk9PVFBST1RPPSdub25lJworU1RBUlRNT0RFPSdvZmYnCisKKwlEbyBub3QgYWx0ZXIgdGhlIFVOSVFVRSBvciBfbm1fbmFtZSBsaW5lcy4gIFJlbW92ZSBhbnkgb3RoZXIKK2xpbmVzIChVU0VSQ1RMLCBldGMpLgorCisJT25jZSB0aGUgaWZjZmctaWQteHg6eHg6eHg6eHg6eHg6eHggZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLAoraXQncyB0aW1lIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgYm9uZGluZyBkZXZpY2UKK2l0c2VsZi4gIFRoaXMgZmlsZSBpcyBuYW1lZCBpZmNmZy1ib25kWCwgd2hlcmUgWCBpcyB0aGUgbnVtYmVyIG9mIHRoZQorYm9uZGluZyBkZXZpY2UgdG8gY3JlYXRlLCBzdGFydGluZyBhdCAwLiAgVGhlIGZpcnN0IHN1Y2ggZmlsZSBpcworaWZjZmctYm9uZDAsIHRoZSBzZWNvbmQgaXMgaWZjZmctYm9uZDEsIGFuZCBzbyBvbi4gIFRoZSBzeXNjb25maWcKK25ldHdvcmsgY29uZmlndXJhdGlvbiBzeXN0ZW0gd2lsbCBjb3JyZWN0bHkgc3RhcnQgbXVsdGlwbGUgaW5zdGFuY2VzCitvZiBib25kaW5nLgorCisJVGhlIGNvbnRlbnRzIG9mIHRoZSBpZmNmZy1ib25kWCBmaWxlIGlzIGFzIGZvbGxvd3M6CisKK0JPT1RQUk9UTz0ic3RhdGljIgorQlJPQURDQVNUPSIxMC4wLjIuMjU1IgorSVBBRERSPSIxMC4wLjIuMTAiCitORVRNQVNLPSIyNTUuMjU1LjAuMCIKK05FVFdPUks9IjEwLjAuMi4wIgorUkVNT1RFX0lQQUREUj0iIgorU1RBUlRNT0RFPSJvbmJvb3QiCitCT05ESU5HX01BU1RFUj0ieWVzIgorQk9ORElOR19NT0RVTEVfT1BUUz0ibW9kZT1hY3RpdmUtYmFja3VwIG1paW1vbj0xMDAiCitCT05ESU5HX1NMQVZFMD0iZXRoMCIKK0JPTkRJTkdfU0xBVkUxPSJldGgxIgorCisJUmVwbGFjZSB0aGUgc2FtcGxlIEJST0FEQ0FTVCwgSVBBRERSLCBORVRNQVNLIGFuZCBORVRXT1JLCit2YWx1ZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciB5b3VyIG5ldHdvcmsuCisKKwlOb3RlIHRoYXQgY29uZmlndXJpbmcgdGhlIGJvbmRpbmcgZGV2aWNlIHdpdGggQk9PVFBST1RPPSdkaGNwJworZG9lcyBub3Qgd29yazsgdGhlIHNjcmlwdHMgYXR0ZW1wdCB0byBvYnRhaW4gdGhlIGRldmljZSBhZGRyZXNzIGZyb20KK0RIQ1AgcHJpb3IgdG8gYWRkaW5nIGFueSBvZiB0aGUgc2xhdmUgZGV2aWNlcy4gIFdpdGhvdXQgYWN0aXZlIHNsYXZlcywKK3RoZSBESENQIHJlcXVlc3RzIGFyZSBub3Qgc2VudCB0byB0aGUgbmV0d29yay4KKworCVRoZSBTVEFSVE1PREUgc3BlY2lmaWVzIHdoZW4gdGhlIGRldmljZSBpcyBicm91Z2h0IG9ubGluZS4KK1RoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgorCisJb25ib290OgkgVGhlIGRldmljZSBpcyBzdGFydGVkIGF0IGJvb3QgdGltZS4gIElmIHlvdSdyZSBub3QKKwkJIHN1cmUsIHRoaXMgaXMgcHJvYmFibHkgd2hhdCB5b3Ugd2FudC4KKworCW1hbnVhbDoJIFRoZSBkZXZpY2UgaXMgc3RhcnRlZCBvbmx5IHdoZW4gaWZ1cCBpcyBjYWxsZWQKKwkJIG1hbnVhbGx5LiAgQm9uZGluZyBkZXZpY2VzIG1heSBiZSBjb25maWd1cmVkIHRoaXMKKwkJIHdheSBpZiB5b3UgZG8gbm90IHdpc2ggdGhlbSB0byBzdGFydCBhdXRvbWF0aWNhbGx5CisJCSBhdCBib290IGZvciBzb21lIHJlYXNvbi4KKworCWhvdHBsdWc6IFRoZSBkZXZpY2UgaXMgc3RhcnRlZCBieSBhIGhvdHBsdWcgZXZlbnQuICBUaGlzIGlzIG5vdAorCQkgYSB2YWxpZCBjaG9pY2UgZm9yIGEgYm9uZGluZyBkZXZpY2UuCisKKwlvZmYgb3IgaWdub3JlOiBUaGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaXMgaWdub3JlZC4KKworCVRoZSBsaW5lIEJPTkRJTkdfTUFTVEVSPSd5ZXMnIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgaXMgYQorYm9uZGluZyBtYXN0ZXIgZGV2aWNlLiAgVGhlIG9ubHkgdXNlZnVsIHZhbHVlIGlzICJ5ZXMuIgorCisJVGhlIGNvbnRlbnRzIG9mIEJPTkRJTkdfTU9EVUxFX09QVFMgYXJlIHN1cHBsaWVkIHRvIHRoZQoraW5zdGFuY2Ugb2YgdGhlIGJvbmRpbmcgbW9kdWxlIGZvciB0aGlzIGRldmljZS4gIFNwZWNpZnkgdGhlIG9wdGlvbnMKK2ZvciB0aGUgYm9uZGluZyBtb2RlLCBsaW5rIG1vbml0b3JpbmcsIGFuZCBzbyBvbiBoZXJlLiAgRG8gbm90IGluY2x1ZGUKK3RoZSBtYXhfYm9uZHMgYm9uZGluZyBwYXJhbWV0ZXI7IHRoaXMgd2lsbCBjb25mdXNlIHRoZSBjb25maWd1cmF0aW9uCitzeXN0ZW0gaWYgeW91IGhhdmUgbXVsdGlwbGUgYm9uZGluZyBkZXZpY2VzLgorCisJRmluYWxseSwgc3VwcGx5IG9uZSBCT05ESU5HX1NMQVZFbj0iZXRoWCIgZm9yIGVhY2ggc2xhdmUsCit3aGVyZSAibiIgaXMgYW4gaW5jcmVhc2luZyB2YWx1ZSwgb25lIGZvciBlYWNoIHNsYXZlLCBhbmQgImV0aFgiIGlzCit0aGUgbmFtZSBvZiB0aGUgc2xhdmUgZGV2aWNlIChldGgwLCBldGgxLCBldGMpLgorCisJV2hlbiBhbGwgY29uZmlndXJhdGlvbiBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgY3JlYXRlZCwKK25ldHdvcmtpbmcgbXVzdCBiZSByZXN0YXJ0ZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGFrZQorZWZmZWN0LiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIHZpYSB0aGUgZm9sbG93aW5nOgorCisjIC9ldGMvaW5pdC5kL25ldHdvcmsgcmVzdGFydAorCisJTm90ZSB0aGF0IHRoZSBuZXR3b3JrIGNvbnRyb2wgc2NyaXB0ICgvc2Jpbi9pZmRvd24pIHdpbGwKK3JlbW92ZSB0aGUgYm9uZGluZyBtb2R1bGUgYXMgcGFydCBvZiB0aGUgbmV0d29yayBzaHV0ZG93biBwcm9jZXNzaW5nLAorc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIG1vZHVsZSBieSBoYW5kIGlmLCBlLmcuLCB0aGUKK21vZHVsZSBwYXJhbXRlcnMgaGF2ZSBjaGFuZ2VkLgorCisJQWxzbywgYXQgdGhpcyB3cml0aW5nLCBZYVNUL1lhU1QyIHdpbGwgbm90IG1hbmFnZSBib25kaW5nCitkZXZpY2VzICh0aGV5IGRvIG5vdCBzaG93IGJvbmRpbmcgaW50ZXJmYWNlcyBvbiBpdHMgbGlzdCBvZiBuZXR3b3JrCitkZXZpY2VzKS4gIEl0IGlzIG5lY2Vzc2FyeSB0byBlZGl0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYnkgaGFuZCB0bworY2hhbmdlIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24uCisKKwlBZGRpdGlvbmFsIGdlbmVyYWwgb3B0aW9ucyBhbmQgZGV0YWlscyBvZiB0aGUgaWZjZmcgZmlsZQorZm9ybWF0IGNhbiBiZSBmb3VuZCBpbiBhbiBleGFtcGxlIGlmY2ZnIHRlbXBsYXRlIGZpbGU6CisKKy9ldGMvc3lzY29uZmlnL25ldHdvcmsvaWZjZmcudGVtcGxhdGUKKworCU5vdGUgdGhhdCB0aGUgdGVtcGxhdGUgZG9lcyBub3QgZG9jdW1lbnQgdGhlIHZhcmlvdXMgQk9ORElOR18KK3NldHRpbmdzIGRlc2NyaWJlZCBhYm92ZSwgYnV0IGRvZXMgZGVzY3JpYmUgbWFueSBvZiB0aGUgb3RoZXIgb3B0aW9ucy4KKworMy4yIENvbmZpZ3VyYXRpb24gd2l0aCBpbml0c2NyaXB0cyBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3MgdXNpbmcgYSB2ZXJzaW9uIG9mIGluaXRzY3JpcHRzCit3aXRoIGJvbmRpbmcgc3VwcG9ydCwgZm9yIGV4YW1wbGUsIFJlZCBIYXQgTGludXggOSBvciBSZWQgSGF0CitFbnRlcnByaXNlIExpbnV4IHZlcnNpb24gMy4gIE9uIHRoZXNlIHN5c3RlbXMsIHRoZSBuZXR3b3JrCitpbml0aWFsaXphdGlvbiBzY3JpcHRzIGhhdmUgc29tZSBrbm93bGVkZ2Ugb2YgYm9uZGluZywgYW5kIGNhbiBiZQorY29uZmlndXJlZCB0byBjb250cm9sIGJvbmRpbmcgZGV2aWNlcy4KKworCVRoZXNlIGRpc3Ryb3Mgd2lsbCBub3QgYXV0b21hdGljYWxseSBsb2FkIHRoZSBuZXR3b3JrIGFkYXB0ZXIKK2RyaXZlciB1bmxlc3MgdGhlIGV0aFggZGV2aWNlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbiBJUCBhZGRyZXNzLgorQmVjYXVzZSBvZiB0aGlzIGNvbnN0cmFpbnQsIHVzZXJzIG11c3QgbWFudWFsbHkgY29uZmlndXJlIGEKK25ldHdvcmstc2NyaXB0IGZpbGUgZm9yIGFsbCBwaHlzaWNhbCBhZGFwdGVycyB0aGF0IHdpbGwgYmUgbWVtYmVycyBvZgorYSBib25kWCBsaW5rLiAgTmV0d29yayBzY3JpcHQgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeToKKworL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzCisKKwlUaGUgZmlsZSBuYW1lIG11c3QgYmUgcHJlZml4ZWQgd2l0aCAiaWZjZmctZXRoIiBhbmQgc3VmZml4ZWQKK3dpdGggdGhlIGFkYXB0ZXIncyBwaHlzaWNhbCBhZGFwdGVyIG51bWJlci4gIEZvciBleGFtcGxlLCB0aGUgc2NyaXB0Citmb3IgZXRoMCB3b3VsZCBiZSBuYW1lZCAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoMC4KK1BsYWNlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbiB0aGUgZmlsZToKKworREVWSUNFPWV0aDAKK1VTRVJDVEw9bm8KK09OQk9PVD15ZXMKK01BU1RFUj1ib25kMAorU0xBVkU9eWVzCitCT09UUFJPVE89bm9uZQorCisJVGhlIERFVklDRT0gbGluZSB3aWxsIGJlIGRpZmZlcmVudCBmb3IgZXZlcnkgZXRoWCBkZXZpY2UgYW5kCittdXN0IGNvcnJlc3BvbmQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgaS5lLiwgaWZjZmctZXRoMSBtdXN0IGhhdmUKK2EgZGV2aWNlIGxpbmUgb2YgREVWSUNFPWV0aDEuICBUaGUgc2V0dGluZyBvZiB0aGUgTUFTVEVSPSBsaW5lIHdpbGwKK2Fsc28gZGVwZW5kIG9uIHRoZSBmaW5hbCBib25kaW5nIGludGVyZmFjZSBuYW1lIGNob3NlbiBmb3IgeW91ciBib25kLgorQXMgd2l0aCBvdGhlciBuZXR3b3JrIGRldmljZXMsIHRoZXNlIHR5cGljYWxseSBzdGFydCBhdCAwLCBhbmQgZ28gdXAKK29uZSBmb3IgZWFjaCBkZXZpY2UsIGkuZS4sIHRoZSBmaXJzdCBib25kaW5nIGluc3RhbmNlIGlzIGJvbmQwLCB0aGUKK3NlY29uZCBpcyBib25kMSwgYW5kIHNvIG9uLgorCisJTmV4dCwgY3JlYXRlIGEgYm9uZCBuZXR3b3JrIHNjcmlwdC4gIFRoZSBmaWxlIG5hbWUgZm9yIHRoaXMKK3NjcmlwdCB3aWxsIGJlIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ib25kWCB3aGVyZSBYIGlzCit0aGUgbnVtYmVyIG9mIHRoZSBib25kLiAgRm9yIGJvbmQwIHRoZSBmaWxlIGlzIG5hbWVkICJpZmNmZy1ib25kMCIsCitmb3IgYm9uZDEgaXQgaXMgbmFtZWQgImlmY2ZnLWJvbmQxIiwgYW5kIHNvIG9uLiAgV2l0aGluIHRoYXQgZmlsZSwKK3BsYWNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworREVWSUNFPWJvbmQwCitJUEFERFI9MTkyLjE2OC4xLjEKK05FVE1BU0s9MjU1LjI1NS4yNTUuMAorTkVUV09SSz0xOTIuMTY4LjEuMAorQlJPQURDQVNUPTE5Mi4xNjguMS4yNTUKK09OQk9PVD15ZXMKK0JPT1RQUk9UTz1ub25lCitVU0VSQ1RMPW5vCisKKwlCZSBzdXJlIHRvIGNoYW5nZSB0aGUgbmV0d29ya2luZyBzcGVjaWZpYyBsaW5lcyAoSVBBRERSLAorTkVUTUFTSywgTkVUV09SSyBhbmQgQlJPQURDQVNUKSB0byBtYXRjaCB5b3VyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKworCUZpbmFsbHksIGl0IGlzIG5lY2Vzc2FyeSB0byBlZGl0IC9ldGMvbW9kdWxlcy5jb25mIHRvIGxvYWQgdGhlCitib25kaW5nIG1vZHVsZSB3aGVuIHRoZSBib25kMCBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4gIFRoZSBmb2xsb3dpbmcKK3NhbXBsZSBsaW5lcyBpbiAvZXRjL21vZHVsZXMuY29uZiB3aWxsIGxvYWQgdGhlIGJvbmRpbmcgbW9kdWxlLCBhbmQKK3NlbGVjdCBpdHMgb3B0aW9uczoKKworYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBtb2RlPWJhbGFuY2UtYWxiIG1paW1vbj0xMDAKKworCVJlcGxhY2UgdGhlIHNhbXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNldCBvZgorb3B0aW9ucyBmb3IgeW91ciBjb25maWd1cmF0aW9uLgorCisJRmluYWxseSBydW4gIi9ldGMvcmMuZC9pbml0LmQvbmV0d29yayByZXN0YXJ0IiBhcyByb290LiAgVGhpcword2lsbCByZXN0YXJ0IHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgeW91ciBib25kIGxpbmsgc2hvdWxkIGJlIG5vdwordXAgYW5kIHJ1bm5pbmcuCisKKworMy4zIENvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHdob3NlIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24KK3NjcmlwdHMgKHRoZSBzeXNjb25maWcgb3IgaW5pdHNjcmlwdHMgcGFja2FnZSkgZG8gbm90IGhhdmUgc3BlY2lmaWMKK2tub3dsZWRnZSBvZiBib25kaW5nLiAgT25lIHN1Y2ggZGlzdHJvIGlzIFN1U0UgTGludXggRW50ZXJwcmlzZSBTZXJ2ZXIKK3ZlcnNpb24gOC4KKworCVRoZSBnZW5lcmFsIG1ldGhvZG9sb2d5IGZvciB0aGVzZSBzeXN0ZW1zIGlzIHRvIHBsYWNlIHRoZQorYm9uZGluZyBtb2R1bGUgcGFyYW1ldGVycyBpbnRvIC9ldGMvbW9kcHJvYmUuY29uZiwgdGhlbiBhZGQgbW9kcHJvYmUKK2FuZC9vciBpZmVuc2xhdmUgY29tbWFuZHMgdG8gdGhlIHN5c3RlbSdzIGdsb2JhbCBpbml0IHNjcmlwdC4gIFRoZQorbmFtZSBvZiB0aGUgZ2xvYmFsIGluaXQgc2NyaXB0IGRpZmZlcnM7IGZvciBzeXNjb25maWcsIGl0IGlzCisvZXRjL2luaXQuZC9ib290LmxvY2FsIGFuZCBmb3IgaW5pdHNjcmlwdHMgaXQgaXMgL2V0Yy9yYy5kL3JjLmxvY2FsLgorCisJRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQgdG8gbWFrZSBhIHNpbXBsZSBib25kIG9mIHR3byBlMTAwCitkZXZpY2VzIChwcmVzdW1lZCB0byBiZSBldGgwIGFuZCBldGgxKSwgYW5kIGhhdmUgaXQgcGVyc2lzdCBhY3Jvc3MKK3JlYm9vdHMsIGVkaXQgdGhlIGFwcHJvcHJpYXRlIGZpbGUgKC9ldGMvaW5pdC5kL2Jvb3QubG9jYWwgb3IKKy9ldGMvcmMuZC9yYy5sb2NhbCksIGFuZCBhZGQgdGhlIGZvbGxvd2luZzoKKworbW9kcHJvYmUgYm9uZGluZyAtb2JvbmQwIG1vZGU9YmFsYW5jZS1hbGIgbWlpbW9uPTEwMAorbW9kcHJvYmUgZTEwMAoraWZjb25maWcgYm9uZDAgMTkyLjE2OC4xLjEgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHVwCitpZmVuc2xhdmUgYm9uZDAgZXRoMAoraWZlbnNsYXZlIGJvbmQwIGV0aDEKKworCVJlcGxhY2UgdGhlIGV4YW1wbGUgYm9uZGluZyBtb2R1bGUgcGFyYW1ldGVycyBhbmQgYm9uZDAKK25ldHdvcmsgY29uZmlndXJhdGlvbiAoSVAgYWRkcmVzcywgbmV0bWFzaywgZXRjKSB3aXRoIHRoZSBhcHByb3ByaWF0ZQordmFsdWVzIGZvciB5b3VyIGNvbmZpZ3VyYXRpb24uICBUaGUgYWJvdmUgZXhhbXBsZSBsb2FkcyB0aGUgYm9uZGluZworbW9kdWxlIHdpdGggdGhlIG5hbWUgImJvbmQwLCIgdGhpcyBzaW1wbGlmaWVzIHRoZSBuYW1pbmcgaWYgbXVsdGlwbGUKK2JvbmRpbmcgbW9kdWxlcyBhcmUgbG9hZGVkIChlYWNoIHN1Y2Nlc3NpdmUgaW5zdGFuY2Ugb2YgdGhlIG1vZHVsZSBpcworZ2l2ZW4gYSBkaWZmZXJlbnQgbmFtZSwgYW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgbmFtZXMgbWF0Y2ggdGhlCitib25kaW5nIGludGVyZmFjZSBuYW1lcykuCisKKwlVbmZvcnR1bmF0ZWx5LCB0aGlzIG1ldGhvZCB3aWxsIG5vdCBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZQoraWZ1cCBhbmQgaWZkb3duIHNjcmlwdHMgb24gdGhlIGJvbmQgZGV2aWNlcy4gIFRvIHJlbG9hZCB0aGUgYm9uZGluZworY29uZmlndXJhdGlvbiwgaXQgaXMgbmVjZXNzYXJ5IHRvIHJ1biB0aGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0LCBlLmcuLAorCisjIC9ldGMvaW5pdC5kL2Jvb3QubG9jYWwKKworCW9yCisKKyMgL2V0Yy9yYy5kL3JjLmxvY2FsCisKKwlJdCBtYXkgYmUgZGVzaXJhYmxlIGluIHN1Y2ggYSBjYXNlIHRvIGNyZWF0ZSBhIHNlcGFyYXRlIHNjcmlwdAord2hpY2ggb25seSBpbml0aWFsaXplcyB0aGUgYm9uZGluZyBjb25maWd1cmF0aW9uLCB0aGVuIGNhbGwgdGhhdAorc2VwYXJhdGUgc2NyaXB0IGZyb20gd2l0aGluIGJvb3QubG9jYWwuICBUaGlzIGFsbG93cyBmb3IgYm9uZGluZyB0byBiZQorZW5hYmxlZCB3aXRob3V0IHJlLXJ1bm5pbmcgdGhlIGVudGlyZSBnbG9iYWwgaW5pdCBzY3JpcHQuCisKKwlUbyBzaHV0IGRvd24gdGhlIGJvbmRpbmcgZGV2aWNlcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGZpcnN0CittYXJrIHRoZSBib25kaW5nIGRldmljZSBpdHNlbGYgYXMgYmVpbmcgZG93biwgdGhlbiByZW1vdmUgdGhlCithcHByb3ByaWF0ZSBkZXZpY2UgZHJpdmVyIG1vZHVsZXMuICBGb3Igb3VyIGV4YW1wbGUgYWJvdmUsIHlvdSBjYW4gZG8KK3RoZSBmb2xsb3dpbmc6CisKKyMgaWZjb25maWcgYm9uZDAgZG93bgorIyBybW1vZCBib25kMAorIyBybW1vZCBlMTAwCisKKwlBZ2FpbiwgZm9yIGNvbnZlbmllbmNlLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGNyZWF0ZSBhIHNjcmlwdAord2l0aCB0aGVzZSBjb21tYW5kcy4KKworCiszLjQgQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIG11bHRpcGxlCitib25kaW5nIGRldmljZXMgd2l0aCBkaWZmZXJpbmcgb3B0aW9ucy4gIElmIHlvdSByZXF1aXJlIG11bHRpcGxlCitib25kaW5nIGRldmljZXMsIGJ1dCBhbGwgd2l0aCB0aGUgc2FtZSBvcHRpb25zLCBzZWUgdGhlICJtYXhfYm9uZHMiCittb2R1bGUgcGFyYW10ZXIsIGRvY3VtZW50ZWQgYWJvdmUuCisKKwlUbyBjcmVhdGUgbXVsdGlwbGUgYm9uZGluZyBkZXZpY2VzIHdpdGggZGlmZmVyaW5nIG9wdGlvbnMsIGl0CitpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgYm9uZGluZyBkcml2ZXIgbXVsdGlwbGUgdGltZXMuICBOb3RlIHRoYXQKK2N1cnJlbnQgdmVyc2lvbnMgb2YgdGhlIHN5c2NvbmZpZyBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMKK2hhbmRsZSB0aGlzIGF1dG9tYXRpY2FsbHk7IGlmIHlvdXIgZGlzdHJvIHVzZXMgdGhlc2Ugc2NyaXB0cywgbm8KK3NwZWNpYWwgYWN0aW9uIGlzIG5lZWRlZC4gIFNlZSB0aGUgc2VjdGlvbiBDb25maWd1cmluZyBCb25kaW5nCitEZXZpY2VzLCBhYm92ZSwgaWYgeW91J3JlIG5vdCBzdXJlIGFib3V0IHlvdXIgbmV0d29yayBpbml0aWFsaXphdGlvbgorc2NyaXB0cy4KKworCVRvIGxvYWQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBtb2R1bGUsIGl0IGlzIG5lY2Vzc2FyeSB0bworc3BlY2lmeSBhIGRpZmZlcmVudCBuYW1lIGZvciBlYWNoIGluc3RhbmNlICh0aGUgbW9kdWxlIGxvYWRpbmcgc3lzdGVtCityZXF1aXJlcyB0aGF0IGV2ZXJ5IGxvYWRlZCBtb2R1bGUsIGV2ZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lCittb2R1bGUsIGhhdmUgYSB1bmlxdWUgbmFtZSkuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBzdXBwbHlpbmcKK211bHRpcGxlIHNldHMgb2YgYm9uZGluZyBvcHRpb25zIGluIC9ldGMvbW9kcHJvYmUuY29uZiwgZm9yIGV4YW1wbGU6CisJCithbGlhcyBib25kMCBib25kaW5nCitvcHRpb25zIGJvbmQwIC1vIGJvbmQwIG1vZGU9YmFsYW5jZS1yciBtaWltb249MTAwCisKK2FsaWFzIGJvbmQxIGJvbmRpbmcKK29wdGlvbnMgYm9uZDEgLW8gYm9uZDEgbW9kZT1iYWxhbmNlLWFsYiBtaWltb249NTAKKworCXdpbGwgbG9hZCB0aGUgYm9uZGluZyBtb2R1bGUgdHdvIHRpbWVzLiAgVGhlIGZpcnN0IGluc3RhbmNlIGlzCituYW1lZCAiYm9uZDAiIGFuZCBjcmVhdGVzIHRoZSBib25kMCBkZXZpY2UgaW4gYmFsYW5jZS1yciBtb2RlIHdpdGggYW4KK21paW1vbiBvZiAxMDAuICBUaGUgc2Vjb25kIGluc3RhbmNlIGlzIG5hbWVkICJib25kMSIgYW5kIGNyZWF0ZXMgdGhlCitib25kMSBkZXZpY2UgaW4gYmFsYW5jZS1hbGIgbW9kZSB3aXRoIGFuIG1paW1vbiBvZiA1MC4KKworCVRoaXMgbWF5IGJlIHJlcGVhdGVkIGFueSBudW1iZXIgb2YgdGltZXMsIHNwZWNpZnlpbmcgYSBuZXcgYW5kCit1bmlxdWUgbmFtZSBpbiBwbGFjZSBvZiBib25kMCBvciBib25kMSBmb3IgZWFjaCBpbnN0YW5jZS4KKworCVdoZW4gdGhlIGFwcHJvcHJpYXRlIG1vZHVsZSBwYXJhbXRlcnMgYXJlIGluIHBsYWNlLCB0aGVuCitjb25maWd1cmUgYm9uZGluZyBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBmb3IgeW91ciBkaXN0cm8uCisKKzUuIFF1ZXJ5aW5nIEJvbmRpbmcgQ29uZmlndXJhdGlvbiAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis1LjEgQm9uZGluZyBDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlFYWNoIGJvbmRpbmcgZGV2aWNlIGhhcyBhIHJlYWQtb25seSBmaWxlIHJlc2lkaW5nIGluIHRoZQorL3Byb2MvbmV0L2JvbmRpbmcgZGlyZWN0b3J5LiAgVGhlIGZpbGUgY29udGVudHMgaW5jbHVkZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbiwgb3B0aW9ucyBhbmQgc3RhdGUgb2YgZWFjaCBzbGF2ZS4KKworCUZvciBleGFtcGxlLCB0aGUgY29udGVudHMgb2YgL3Byb2MvbmV0L2JvbmRpbmcvYm9uZDAgYWZ0ZXIgdGhlCitkcml2ZXIgaXMgbG9hZGVkIHdpdGggcGFyYW1ldGVycyBvZiBtb2RlPTAgYW5kIG1paW1vbj0xMDAwIGlzCitnZW5lcmFsbHkgYXMgZm9sbG93czoKKworCUV0aGVybmV0IENoYW5uZWwgQm9uZGluZyBEcml2ZXI6IDIuNi4xIChPY3RvYmVyIDI5LCAyMDA0KQorICAgICAgICBCb25kaW5nIE1vZGU6IGxvYWQgYmFsYW5jaW5nIChyb3VuZC1yb2JpbikKKyAgICAgICAgQ3VycmVudGx5IEFjdGl2ZSBTbGF2ZTogZXRoMAorICAgICAgICBNSUkgU3RhdHVzOiB1cAorICAgICAgICBNSUkgUG9sbGluZyBJbnRlcnZhbCAobXMpOiAxMDAwCisgICAgICAgIFVwIERlbGF5IChtcyk6IDAKKyAgICAgICAgRG93biBEZWxheSAobXMpOiAwCisKKyAgICAgICAgU2xhdmUgSW50ZXJmYWNlOiBldGgxCisgICAgICAgIE1JSSBTdGF0dXM6IHVwCisgICAgICAgIExpbmsgRmFpbHVyZSBDb3VudDogMQorCisgICAgICAgIFNsYXZlIEludGVyZmFjZTogZXRoMAorICAgICAgICBNSUkgU3RhdHVzOiB1cAorICAgICAgICBMaW5rIEZhaWx1cmUgQ291bnQ6IDEKKworCVRoZSBwcmVjaXNlIGZvcm1hdCBhbmQgY29udGVudHMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIHVwb24gdGhlCitib25kaW5nIGNvbmZpZ3VyYXRpb24sIHN0YXRlLCBhbmQgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIuCisKKzUuMiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGluc3BlY3RlZCB1c2luZyB0aGUgaWZjb25maWcKK2NvbW1hbmQuICBCb25kaW5nIGRldmljZXMgd2lsbCBoYXZlIHRoZSBNQVNURVIgZmxhZyBzZXQ7IEJvbmRpbmcgc2xhdmUKK2RldmljZXMgd2lsbCBoYXZlIHRoZSBTTEFWRSBmbGFnIHNldC4gIFRoZSBpZmNvbmZpZyBvdXRwdXQgZG9lcyBub3QKK2NvbnRhaW4gaW5mb3JtYXRpb24gb24gd2hpY2ggc2xhdmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggd2hpY2ggbWFzdGVycy4KKworCUluIHRoZSBleGFtcGxlIGJlbG93LCB0aGUgYm9uZDAgaW50ZXJmYWNlIGlzIHRoZSBtYXN0ZXIKKyhNQVNURVIpIHdoaWxlIGV0aDAgYW5kIGV0aDEgYXJlIHNsYXZlcyAoU0xBVkUpLiBOb3RpY2UgYWxsIHNsYXZlcyBvZgorYm9uZDAgaGF2ZSB0aGUgc2FtZSBNQUMgYWRkcmVzcyAoSFdhZGRyKSBhcyBib25kMCBmb3IgYWxsIG1vZGVzIGV4Y2VwdAorVExCIGFuZCBBTEIgdGhhdCByZXF1aXJlIGEgdW5pcXVlIE1BQyBhZGRyZXNzIGZvciBlYWNoIHNsYXZlLgorCisjIC9zYmluL2lmY29uZmlnCitib25kMCAgICAgTGluayBlbmNhcDpFdGhlcm5ldCAgSFdhZGRyIDAwOkMwOkYwOjFGOjM3OkI0CisgICAgICAgICAgaW5ldCBhZGRyOlhYWC5YWFguWFhYLllZWSAgQmNhc3Q6WFhYLlhYWC5YWFguMjU1ICBNYXNrOjI1NS4yNTUuMjUyLjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNQVNURVIgTVVMVElDQVNUICBNVFU6MTUwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjcyMjQ3OTQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MzI4NjY0NyBlcnJvcnM6MSBkcm9wcGVkOjAgb3ZlcnJ1bnM6MSBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjowCisKK2V0aDAgICAgICBMaW5rIGVuY2FwOkV0aGVybmV0ICBIV2FkZHIgMDA6QzA6RjA6MUY6Mzc6QjQKKyAgICAgICAgICBpbmV0IGFkZHI6WFhYLlhYWC5YWFguWVlZICBCY2FzdDpYWFguWFhYLlhYWC4yNTUgIE1hc2s6MjU1LjI1NS4yNTIuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIFNMQVZFIE1VTFRJQ0FTVCAgTVRVOjE1MDAgIE1ldHJpYzoxCisgICAgICAgICAgUlggcGFja2V0czozNTczMDI1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKKyAgICAgICAgICBUWCBwYWNrZXRzOjE2NDMxNjcgZXJyb3JzOjEgZHJvcHBlZDowIG92ZXJydW5zOjEgY2FycmllcjowCisgICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCisgICAgICAgICAgSW50ZXJydXB0OjEwIEJhc2UgYWRkcmVzczoweDEwODAKKworZXRoMSAgICAgIExpbmsgZW5jYXA6RXRoZXJuZXQgIEhXYWRkciAwMDpDMDpGMDoxRjozNzpCNAorICAgICAgICAgIGluZXQgYWRkcjpYWFguWFhYLlhYWC5ZWVkgIEJjYXN0OlhYWC5YWFguWFhYLjI1NSAgTWFzazoyNTUuMjU1LjI1Mi4wCisgICAgICAgICAgVVAgQlJPQURDQVNUIFJVTk5JTkcgU0xBVkUgTVVMVElDQVNUICBNVFU6MTUwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjM2NTE3NjkgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MTY0MzQ4MCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKKyAgICAgICAgICBJbnRlcnJ1cHQ6OSBCYXNlIGFkZHJlc3M6MHgxNDAwCisKKzYuIFN3aXRjaCBDb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorCisJRm9yIHRoaXMgc2VjdGlvbiwgInN3aXRjaCIgcmVmZXJzIHRvIHdoYXRldmVyIHN5c3RlbSB0aGUKK2JvbmRlZCBkZXZpY2VzIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gKGkuZS4sIHdoZXJlIHRoZSBvdGhlciBlbmQgb2YKK3RoZSBjYWJsZSBwbHVncyBpbnRvKS4gIFRoaXMgbWF5IGJlIGFuIGFjdHVhbCBkZWRpY2F0ZWQgc3dpdGNoIGRldmljZSwKK29yIGl0IG1heSBiZSBhbm90aGVyIHJlZ3VsYXIgc3lzdGVtIChlLmcuLCBhbm90aGVyIGNvbXB1dGVyIHJ1bm5pbmcKK0xpbnV4KSwKKworCVRoZSBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMgZG8gbm90CityZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBzd2l0Y2guCisKKwlUaGUgODAyLjNhZCBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIHN3aXRjaCBoYXZlIHRoZSBhcHByb3ByaWF0ZQorcG9ydHMgY29uZmlndXJlZCBhcyBhbiA4MDIuM2FkIGFnZ3JlZ2F0aW9uLiAgVGhlIHByZWNpc2UgbWV0aG9kIHVzZWQKK3RvIGNvbmZpZ3VyZSB0aGlzIHZhcmllcyBmcm9tIHN3aXRjaCB0byBzd2l0Y2gsIGJ1dCwgZm9yIGV4YW1wbGUsIGEKK0Npc2NvIDM1NTAgc2VyaWVzIHN3aXRjaCByZXF1aXJlcyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBwb3J0cyBmaXJzdCBiZQorZ3JvdXBlZCB0b2dldGhlciBpbiBhIHNpbmdsZSBldGhlcmNoYW5uZWwgaW5zdGFuY2UsIHRoZW4gdGhhdAorZXRoZXJjaGFubmVsIGlzIHNldCB0byBtb2RlICJsYWNwIiB0byBlbmFibGUgODAyLjNhZCAoaW5zdGVhZCBvZgorc3RhbmRhcmQgRXRoZXJDaGFubmVsKS4KKworCVRoZSBiYWxhbmNlLXJyLCBiYWxhbmNlLXhvciBhbmQgYnJvYWRjYXN0IG1vZGVzIGdlbmVyYWxseQorcmVxdWlyZSB0aGF0IHRoZSBzd2l0Y2ggaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcG9ydHMgZ3JvdXBlZCB0b2dldGhlci4KK1RoZSBub21lbmNsYXR1cmUgZm9yIHN1Y2ggYSBncm91cCBkaWZmZXJzIGJldHdlZW4gc3dpdGNoZXMsIGl0IG1heSBiZQorY2FsbGVkIGFuICJldGhlcmNoYW5uZWwiIChhcyBpbiB0aGUgQ2lzY28gZXhhbXBsZSwgYWJvdmUpLCBhICJ0cnVuaworZ3JvdXAiIG9yIHNvbWUgb3RoZXIgc2ltaWxhciB2YXJpYXRpb24uICBGb3IgdGhlc2UgbW9kZXMsIGVhY2ggc3dpdGNoCit3aWxsIGFsc28gaGF2ZSBpdHMgb3duIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHN3aXRjaCdzIHRyYW5zbWl0Citwb2xpY3kgdG8gdGhlIGJvbmQuICBUeXBpY2FsIGNob2ljZXMgaW5jbHVkZSBYT1Igb2YgZWl0aGVyIHRoZSBNQUMgb3IKK0lQIGFkZHJlc3Nlcy4gIFRoZSB0cmFuc21pdCBwb2xpY3kgb2YgdGhlIHR3byBwZWVycyBkb2VzIG5vdCBuZWVkIHRvCittYXRjaC4gIEZvciB0aGVzZSB0aHJlZSBtb2RlcywgdGhlIGJvbmRpbmcgbW9kZSByZWFsbHkgc2VsZWN0cyBhCit0cmFuc21pdCBwb2xpY3kgZm9yIGFuIEV0aGVyQ2hhbm5lbCBncm91cDsgYWxsIHRocmVlIHdpbGwgaW50ZXJvcGVyYXRlCit3aXRoIGFub3RoZXIgRXRoZXJDaGFubmVsIGdyb3VwLgorCisKKzcuIDgwMi4xcSBWTEFOIFN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT0KKworCUl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBWTEFOIGRldmljZXMgb3ZlciBhIGJvbmQgaW50ZXJmYWNlCit1c2luZyB0aGUgODAyMXEgZHJpdmVyLiAgSG93ZXZlciwgb25seSBwYWNrZXRzIGNvbWluZyBmcm9tIHRoZSA4MDIxcQorZHJpdmVyIGFuZCBwYXNzaW5nIHRocm91Z2ggYm9uZGluZyB3aWxsIGJlIHRhZ2dlZCBieSBkZWZhdWx0LiAgU2VsZgorZ2VuZXJhdGVkIHBhY2tldHMsIGZvciBleGFtcGxlLCBib25kaW5nJ3MgbGVhcm5pbmcgcGFja2V0cyBvciBBUlAKK3BhY2tldHMgZ2VuZXJhdGVkIGJ5IGVpdGhlciBBTEIgbW9kZSBvciB0aGUgQVJQIG1vbml0b3IgbWVjaGFuaXNtLCBhcmUKK3RhZ2dlZCBpbnRlcm5hbGx5IGJ5IGJvbmRpbmcgaXRzZWxmLiAgQXMgYSByZXN1bHQsIGJvbmRpbmcgbXVzdAorImxlYXJuIiB0aGUgVkxBTiBJRHMgY29uZmlndXJlZCBhYm92ZSBpdCwgYW5kIHVzZSB0aG9zZSBJRHMgdG8gdGFnCitzZWxmIGdlbmVyYXRlZCBwYWNrZXRzLgorCisJRm9yIHJlYXNvbnMgb2Ygc2ltcGxpY2l0eSwgYW5kIHRvIHN1cHBvcnQgdGhlIHVzZSBvZiBhZGFwdGVycwordGhhdCBjYW4gZG8gVkxBTiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2ZmbG9kaW5nLCB0aGUgYm9uZGluZworaW50ZXJmYWNlIGRlY2xhcmVzIGl0c2VsZiBhcyBmdWxseSBoYXJkd2FyZSBvZmZsb2FpbmcgY2FwYWJsZSwgaXQgZ2V0cwordGhlIGFkZF92aWQva2lsbF92aWQgbm90aWZpY2F0aW9ucyB0byBnYXRoZXIgdGhlIG5lY2Vzc2FyeQoraW5mb3JtYXRpb24sIGFuZCBpdCBwcm9wYWdhdGVzIHRob3NlIGFjdGlvbnMgdG8gdGhlIHNsYXZlcy4gIEluIGNhc2UKK29mIG1peGVkIGFkYXB0ZXIgdHlwZXMsIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRhZ2dlZCBwYWNrZXRzIHRoYXQKK3Nob3VsZCBnbyB0aHJvdWdoIGFuIGFkYXB0ZXIgdGhhdCBpcyBub3Qgb2ZmbG9hZGluZyBjYXBhYmxlIGFyZQorInVuLWFjY2VsZXJhdGVkIiBieSB0aGUgYm9uZGluZyBkcml2ZXIgc28gdGhlIFZMQU4gdGFnIHNpdHMgaW4gdGhlCityZWd1bGFyIGxvY2F0aW9uLgorCisJVkxBTiBpbnRlcmZhY2VzICptdXN0KiBiZSBhZGRlZCBvbiB0b3Agb2YgYSBib25kaW5nIGludGVyZmFjZQorb25seSBhZnRlciBlbnNsYXZpbmcgYXQgbGVhc3Qgb25lIHNsYXZlLiAgVGhlIGJvbmRpbmcgaW50ZXJmYWNlIGhhcyBhCitoYXJkd2FyZSBhZGRyZXNzIG9mIDAwOjAwOjAwOjAwOjAwOjAwIHVudGlsIHRoZSBmaXJzdCBzbGF2ZSBpcyBhZGRlZC4KK0lmIHRoZSBWTEFOIGludGVyZmFjZSBpcyBjcmVhdGVkIHByaW9yIHRvIHRoZSBmaXJzdCBlbnNsYXZlbWVudCwgaXQKK3dvdWxkIHBpY2sgdXAgdGhlIGFsbC16ZXJvZXMgaGFyZHdhcmUgYWRkcmVzcy4gIE9uY2UgdGhlIGZpcnN0IHNsYXZlCitpcyBhdHRhY2hlZCB0byB0aGUgYm9uZCwgdGhlIGJvbmQgZGV2aWNlIGl0c2VsZiB3aWxsIHBpY2sgdXAgdGhlCitzbGF2ZSdzIGhhcmR3YXJlIGFkZHJlc3MsIHdoaWNoIGlzIHRoZW4gYXZhaWxhYmxlIGZvciB0aGUgVkxBTiBkZXZpY2UuCisKKwlBbHNvLCBiZSBhd2FyZSB0aGF0IGEgc2ltaWxhciBwcm9ibGVtIGNhbiBvY2N1ciBpZiBhbGwgc2xhdmVzCithcmUgcmVsZWFzZWQgZnJvbSBhIGJvbmQgdGhhdCBzdGlsbCBoYXMgb25lIG9yIG1vcmUgVkxBTiBpbnRlcmZhY2VzIG9uCit0b3Agb2YgaXQuICBXaGVuIGEgbmV3IHNsYXZlIGlzIGFkZGVkLCB0aGUgYm9uZGluZyBpbnRlcmZhY2Ugd2lsbAorb2J0YWluIGl0cyBoYXJkd2FyZSBhZGRyZXNzIGZyb20gdGhlIGZpcnN0IHNsYXZlLCB3aGljaCBtaWdodCBub3QKK21hdGNoIHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9mIHRoZSBWTEFOIGludGVyZmFjZXMgKHdoaWNoIHdhcwordWx0aW1hdGVseSBjb3BpZWQgZnJvbSBhbiBlYXJsaWVyIHNsYXZlKS4KKworCVRoZXJlIGFyZSB0d28gbWV0aG9kcyB0byBpbnN1cmUgdGhhdCB0aGUgVkxBTiBkZXZpY2Ugb3BlcmF0ZXMKK3dpdGggdGhlIGNvcnJlY3QgaGFyZHdhcmUgYWRkcmVzcyBpZiBhbGwgc2xhdmVzIGFyZSByZW1vdmVkIGZyb20gYQorYm9uZCBpbnRlcmZhY2U6CisKKwkxLiBSZW1vdmUgYWxsIFZMQU4gaW50ZXJmYWNlcyB0aGVuIHJlY3JlYXRlIHRoZW0KKworCTIuIFNldCB0aGUgYm9uZGluZyBpbnRlcmZhY2UncyBoYXJkd2FyZSBhZGRyZXNzIHNvIHRoYXQgaXQKK21hdGNoZXMgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIFZMQU4gaW50ZXJmYWNlcy4KKworCU5vdGUgdGhhdCBjaGFuZ2luZyBhIFZMQU4gaW50ZXJmYWNlJ3MgSFcgYWRkcmVzcyB3b3VsZCBzZXQgdGhlCit1bmRlcmx5aW5nIGRldmljZSAtLSBpLmUuIHRoZSBib25kaW5nIGludGVyZmFjZSAtLSB0byBwcm9taXNjb3VvcworbW9kZSwgd2hpY2ggbWlnaHQgbm90IGJlIHdoYXQgeW91IHdhbnQuCisKKworOC4gTGluayBNb25pdG9yaW5nCis9PT09PT09PT09PT09PT09PT0KKworCVRoZSBib25kaW5nIGRyaXZlciBhdCBwcmVzZW50IHN1cHBvcnRzIHR3byBzY2hlbWVzIGZvcgorbW9uaXRvcmluZyBhIHNsYXZlIGRldmljZSdzIGxpbmsgc3RhdGU6IHRoZSBBUlAgbW9uaXRvciBhbmQgdGhlIE1JSQorbW9uaXRvci4KKworCUF0IHRoZSBwcmVzZW50IHRpbWUsIGR1ZSB0byBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbnMgaW4gdGhlCitib25kaW5nIGRyaXZlciBpdHNlbGYsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBlbmFibGUgYm90aCBBUlAgYW5kIE1JSQorbW9uaXRvcmluZyBzaW11bHRhbmVvdXNseS4KKworOC4xIEFSUCBNb25pdG9yIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIEFSUCBtb25pdG9yIG9wZXJhdGVzIGFzIGl0cyBuYW1lIHN1Z2dlc3RzOiBpdCBzZW5kcyBBUlAKK3F1ZXJpZXMgdG8gb25lIG9yIG1vcmUgZGVzaWduYXRlZCBwZWVyIHN5c3RlbXMgb24gdGhlIG5ldHdvcmssIGFuZAordXNlcyB0aGUgcmVzcG9uc2UgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBsaW5rIGlzIG9wZXJhdGluZy4gIFRoaXMKK2dpdmVzIHNvbWUgYXNzdXJhbmNlIHRoYXQgdHJhZmZpYyBpcyBhY3R1YWxseSBmbG93aW5nIHRvIGFuZCBmcm9tIG9uZQorb3IgbW9yZSBwZWVycyBvbiB0aGUgbG9jYWwgbmV0d29yay4KKworCVRoZSBBUlAgbW9uaXRvciByZWxpZXMgb24gdGhlIGRldmljZSBkcml2ZXIgaXRzZWxmIHRvIHZlcmlmeQordGhhdCB0cmFmZmljIGlzIGZsb3dpbmcuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZHJpdmVyIG11c3Qga2VlcCB1cCB0bworZGF0ZSB0aGUgbGFzdCByZWNlaXZlIHRpbWUsIGRldi0+bGFzdF9yeCwgYW5kIHRyYW5zbWl0IHN0YXJ0IHRpbWUsCitkZXYtPnRyYW5zX3N0YXJ0LiAgSWYgdGhlc2UgYXJlIG5vdCB1cGRhdGVkIGJ5IHRoZSBkcml2ZXIsIHRoZW4gdGhlCitBUlAgbW9uaXRvciB3aWxsIGltbWVkaWF0ZWx5IGZhaWwgYW55IHNsYXZlcyB1c2luZyB0aGF0IGRyaXZlciwgYW5kCit0aG9zZSBzbGF2ZXMgd2lsbCBzdGF5IGRvd24uICBJZiBuZXR3b3JraW5nIG1vbml0b3JpbmcgKHRjcGR1bXAsIGV0YykKK3Nob3dzIHRoZSBBUlAgcmVxdWVzdHMgYW5kIHJlcGxpZXMgb24gdGhlIG5ldHdvcmssIHRoZW4gaXQgbWF5IGJlIHRoYXQKK3lvdXIgZGV2aWNlIGRyaXZlciBpcyBub3QgdXBkYXRpbmcgbGFzdF9yeCBhbmQgdHJhbnNfc3RhcnQuCisKKzguMiBDb25maWd1cmluZyBNdWx0aXBsZSBBUlAgVGFyZ2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlXaGlsZSBBUlAgbW9uaXRvcmluZyBjYW4gYmUgZG9uZSB3aXRoIGp1c3Qgb25lIHRhcmdldCwgaXQgY2FuCitiZSB1c2VmdWwgaW4gYSBIaWdoIEF2YWlsYWJpbGl0eSBzZXR1cCB0byBoYXZlIHNldmVyYWwgdGFyZ2V0cyB0bworbW9uaXRvci4gIEluIHRoZSBjYXNlIG9mIGp1c3Qgb25lIHRhcmdldCwgdGhlIHRhcmdldCBpdHNlbGYgbWF5IGdvCitkb3duIG9yIGhhdmUgYSBwcm9ibGVtIG1ha2luZyBpdCB1bnJlc3BvbnNpdmUgdG8gQVJQIHJlcXVlc3RzLiAgSGF2aW5nCithbiBhZGRpdGlvbmFsIHRhcmdldCAob3Igc2V2ZXJhbCkgaW5jcmVhc2VzIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgQVJQCittb25pdG9yaW5nLgorCisJTXVsdGlwbGUgQVJQIHRhcmdldHMgbXVzdCBiZSBzZXBlcmF0ZWQgYnkgY29tbWFzIGFzIGZvbGxvd3M6CisKKyMgZXhhbXBsZSBvcHRpb25zIGZvciBBUlAgbW9uaXRvcmluZyB3aXRoIHRocmVlIHRhcmdldHMKK2FsaWFzIGJvbmQwIGJvbmRpbmcKK29wdGlvbnMgYm9uZDAgYXJwX2ludGVydmFsPTYwIGFycF9pcF90YXJnZXQ9MTkyLjE2OC4wLjEsMTkyLjE2OC4wLjMsMTkyLjE2OC4wLjkKKworCUZvciBqdXN0IGEgc2luZ2xlIHRhcmdldCB0aGUgb3B0aW9ucyB3b3VsZCByZXNlbWJsZToKKworIyBleGFtcGxlIG9wdGlvbnMgZm9yIEFSUCBtb25pdG9yaW5nIHdpdGggb25lIHRhcmdldAorYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBhcnBfaW50ZXJ2YWw9NjAgYXJwX2lwX3RhcmdldD0xOTIuMTY4LjAuMTAwCisKKworOC4zIE1JSSBNb25pdG9yIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIE1JSSBtb25pdG9yIG1vbml0b3JzIG9ubHkgdGhlIGNhcnJpZXIgc3RhdGUgb2YgdGhlIGxvY2FsCituZXR3b3JrIGludGVyZmFjZS4gIEl0IGFjY29tcGxpc2hlcyB0aGlzIGluIG9uZSBvZiB0aHJlZSB3YXlzOiBieQorZGVwZW5kaW5nIHVwb24gdGhlIGRldmljZSBkcml2ZXIgdG8gbWFpbnRhaW4gaXRzIGNhcnJpZXIgc3RhdGUsIGJ5CitxdWVyeWluZyB0aGUgZGV2aWNlJ3MgTUlJIHJlZ2lzdGVycywgb3IgYnkgbWFraW5nIGFuIGV0aHRvb2wgcXVlcnkgdG8KK3RoZSBkZXZpY2UuCisKKwlJZiB0aGUgdXNlX2NhcnJpZXIgbW9kdWxlIHBhcmFtZXRlciBpcyAxICh0aGUgZGVmYXVsdCB2YWx1ZSksCit0aGVuIHRoZSBNSUkgbW9uaXRvciB3aWxsIHJlbHkgb24gdGhlIGRyaXZlciBmb3IgY2FycmllciBzdGF0ZQoraW5mb3JtYXRpb24gKHZpYSB0aGUgbmV0aWZfY2FycmllciBzdWJzeXN0ZW0pLiAgQXMgZXhwbGFpbmVkIGluIHRoZQordXNlX2NhcnJpZXIgcGFyYW1ldGVyIGluZm9ybWF0aW9uLCBhYm92ZSwgaWYgdGhlIE1JSSBtb25pdG9yIGZhaWxzIHRvCitkZXRlY3QgY2FycmllciBsb3NzIG9uIHRoZSBkZXZpY2UgKGUuZy4sIHdoZW4gdGhlIGNhYmxlIGlzIHBoeXNpY2FsbHkKK2Rpc2Nvbm5lY3RlZCksIGl0IG1heSBiZSB0aGF0IHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorbmV0aWZfY2Fycmllci4KKworCUlmIHVzZV9jYXJyaWVyIGlzIDAsIHRoZW4gdGhlIE1JSSBtb25pdG9yIHdpbGwgZmlyc3QgcXVlcnkgdGhlCitkZXZpY2UncyAodmlhIGlvY3RsKSBNSUkgcmVnaXN0ZXJzIGFuZCBjaGVjayB0aGUgbGluayBzdGF0ZS4gIElmIHRoYXQKK3JlcXVlc3QgZmFpbHMgKG5vdCBqdXN0IHRoYXQgaXQgcmV0dXJucyBjYXJyaWVyIGRvd24pLCB0aGVuIHRoZSBNSUkKK21vbml0b3Igd2lsbCBtYWtlIGFuIGV0aHRvb2wgRVRIT09MX0dMSU5LIHJlcXVlc3QgdG8gYXR0ZW1wdCB0byBvYnRhaW4KK3RoZSBzYW1lIGluZm9ybWF0aW9uLiAgSWYgYm90aCBtZXRob2RzIGZhaWwgKGkuZS4sIHRoZSBkcml2ZXIgZWl0aGVyCitkb2VzIG5vdCBzdXBwb3J0IG9yIGhhZCBzb21lIGVycm9yIGluIHByb2Nlc3NpbmcgYm90aCB0aGUgTUlJIHJlZ2lzdGVyCithbmQgZXRodG9vbCByZXF1ZXN0cyksIHRoZW4gdGhlIE1JSSBtb25pdG9yIHdpbGwgYXNzdW1lIHRoZSBsaW5rIGlzCit1cC4KKworOS4gUG90ZW50aWFsIFNvdXJjZXMgb2YgVHJvdWJsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis5LjEgQWR2ZW50dXJlcyBpbiBSb3V0aW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlXaGVuIGJvbmRpbmcgaXMgY29uZmlndXJlZCwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIHNsYXZlCitkZXZpY2VzIG5vdCBoYXZlIHJvdXRlcyB0aGF0IHN1cGVyY2VkZSByb3V0ZXMgb2YgdGhlIG1hc3RlciAob3IsCitnZW5lcmFsbHksIG5vdCBoYXZlIHJvdXRlcyBhdCBhbGwpLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlIGJvbmRpbmcKK2RldmljZSBib25kMCBoYXMgdHdvIHNsYXZlcywgZXRoMCBhbmQgZXRoMSwgYW5kIHRoZSByb3V0aW5nIHRhYmxlIGlzCithcyBmb2xsb3dzOgorCitLZXJuZWwgSVAgcm91dGluZyB0YWJsZQorRGVzdGluYXRpb24gICAgIEdhdGV3YXkgICAgICAgICBHZW5tYXNrICAgICAgICAgRmxhZ3MgICBNU1MgV2luZG93ICBpcnR0IElmYWNlCisxMC4wLjAuMCAgICAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4yNTUuMC4wICAgICBVICAgICAgICA0MCAwICAgICAgICAgIDAgZXRoMAorMTAuMC4wLjAgICAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMjU1LjAuMCAgICAgVSAgICAgICAgNDAgMCAgICAgICAgICAwIGV0aDEKKzEwLjAuMC4wICAgICAgICAwLjAuMC4wICAgICAgICAgMjU1LjI1NS4wLjAgICAgIFUgICAgICAgIDQwIDAgICAgICAgICAgMCBib25kMAorMTI3LjAuMC4wICAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMC4wLjAgICAgICAgVSAgICAgICAgNDAgMCAgICAgICAgICAwIGxvCisKKwlUaGlzIHJvdXRpbmcgY29uZmlndXJhdGlvbiB3aWxsIGxpa2VseSBzdGlsbCB1cGRhdGUgdGhlCityZWNlaXZlL3RyYW5zbWl0IHRpbWVzIGluIHRoZSBkcml2ZXIgKG5lZWRlZCBieSB0aGUgQVJQIG1vbml0b3IpLCBidXQKK21heSBieXBhc3MgdGhlIGJvbmRpbmcgZHJpdmVyIChiZWNhdXNlIG91dGdvaW5nIHRyYWZmaWMgdG8sIGluIHRoaXMKK2Nhc2UsIGFub3RoZXIgaG9zdCBvbiBuZXR3b3JrIDEwIHdvdWxkIHVzZSBldGgwIG9yIGV0aDEgYmVmb3JlIGJvbmQwKS4KKworCVRoZSBBUlAgbW9uaXRvciAoYW5kIEFSUCBpdHNlbGYpIG1heSBiZWNvbWUgY29uZnVzZWQgYnkgdGhpcworY29uZmlndXJhdGlvbiwgYmVjYXVzZSBBUlAgcmVxdWVzdHMgKGdlbmVyYXRlZCBieSB0aGUgQVJQIG1vbml0b3IpCit3aWxsIGJlIHNlbnQgb24gb25lIGludGVyZmFjZSAoYm9uZDApLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgcmVwbHkKK3dpbGwgYXJyaXZlIG9uIGEgZGlmZmVyZW50IGludGVyZmFjZSAoZXRoMCkuICBUaGlzIHJlcGx5IGxvb2tzIHRvIEFSUAorYXMgYW4gdW5zb2xpY2l0ZWQgQVJQIHJlcGx5IChiZWNhdXNlIEFSUCBtYXRjaGVzIHJlcGxpZXMgb24gYW4KK2ludGVyZmFjZSBiYXNpcyksIGFuZCBpcyBkaXNjYXJkZWQuICBUaGUgTUlJIG1vbml0b3IgaXMgbm90IGFmZmVjdGVkCitieSB0aGUgc3RhdGUgb2YgdGhlIHJvdXRpbmcgdGFibGUuCisKKwlUaGUgc29sdXRpb24gaGVyZSBpcyBzaW1wbHkgdG8gaW5zdXJlIHRoYXQgc2xhdmVzIGRvIG5vdCBoYXZlCityb3V0ZXMgb2YgdGhlaXIgb3duLCBhbmQgaWYgZm9yIHNvbWUgcmVhc29uIHRoZXkgbXVzdCwgdGhvc2Ugcm91dGVzIGRvCitub3Qgc3VwZXJjZWRlIHJvdXRlcyBvZiB0aGVpciBtYXN0ZXIuICBUaGlzIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhlCitjYXNlLCBidXQgdW51c3VhbCBjb25maWd1cmF0aW9ucyBvciBlcnJhbnQgbWFudWFsIG9yIGF1dG9tYXRpYyBzdGF0aWMKK3JvdXRlIGFkZGl0aW9ucyBtYXkgY2F1c2UgdHJvdWJsZS4KKworOS4yIEV0aGVybmV0IERldmljZSBSZW5hbWluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJT24gc3lzdGVtcyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgZG8gbm90Cithc3NvY2lhdGUgcGh5c2ljYWwgZGV2aWNlcyBkaXJlY3RseSB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWVzIChzbwordGhhdCB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgYWx3YXlzIGhhcyB0aGUgc2FtZSAiZXRoWCIgbmFtZSksIGl0IG1heQorYmUgbmVjZXNzYXJ5IHRvIGFkZCBzb21lIHNwZWNpYWwgbG9naWMgdG8gZWl0aGVyIC9ldGMvbW9kdWxlcy5jb25mIG9yCisvZXRjL21vZHByb2JlLmNvbmYgKGRlcGVuZGluZyB1cG9uIHdoaWNoIGlzIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtKS4KKworCUZvciBleGFtcGxlLCBnaXZlbiBhIG1vZHVsZXMuY29uZiBjb250YWluaW5nIHRoZSBmb2xsb3dpbmc6CisKK2FsaWFzIGJvbmQwIGJvbmRpbmcKK29wdGlvbnMgYm9uZDAgbW9kZT1zb21lLW1vZGUgbWlpbW9uPTUwCithbGlhcyBldGgwIHRnMworYWxpYXMgZXRoMSB0ZzMKK2FsaWFzIGV0aDIgZTEwMDAKK2FsaWFzIGV0aDMgZTEwMDAKKworCUlmIG5laXRoZXIgZXRoMCBhbmQgZXRoMSBhcmUgc2xhdmVzIHRvIGJvbmQwLCB0aGVuIHdoZW4gdGhlCitib25kMCBpbnRlcmZhY2UgY29tZXMgdXAsIHRoZSBkZXZpY2VzIG1heSBlbmQgdXAgcmVvcmRlcmVkLiAgVGhpcworaGFwcGVucyBiZWNhdXNlIGJvbmRpbmcgaXMgbG9hZGVkIGZpcnN0LCB0aGVuIGl0cyBzbGF2ZSBkZXZpY2UncworZHJpdmVycyBhcmUgbG9hZGVkIG5leHQuICBTaW5jZSBubyBvdGhlciBkcml2ZXJzIGhhdmUgYmVlbiBsb2FkZWQsCit3aGVuIHRoZSBlMTAwMCBkcml2ZXIgbG9hZHMsIGl0IHdpbGwgcmVjZWl2ZSBldGgwIGFuZCBldGgxIGZvciBpdHMKK2RldmljZXMsIGJ1dCB0aGUgYm9uZGluZyBjb25maWd1cmF0aW9uIHRyaWVzIHRvIGVuc2xhdmUgZXRoMiBhbmQgZXRoMworKHdoaWNoIG1heSBsYXRlciBiZSBhc3NpZ25lZCB0byB0aGUgdGczIGRldmljZXMpLgorCisJQWRkaW5nIHRoZSBmb2xsb3dpbmc6CisKK2FkZCBhYm92ZSBib25kaW5nIGUxMDAwIHRnMworCisJY2F1c2VzIG1vZHByb2JlIHRvIGxvYWQgZTEwMDAgdGhlbiB0ZzMsIGluIHRoYXQgb3JkZXIsIHdoZW4KK2JvbmRpbmcgaXMgbG9hZGVkLiAgVGhpcyBjb21tYW5kIGlzIGZ1bGx5IGRvY3VtZW50ZWQgaW4gdGhlCittb2R1bGVzLmNvbmYgbWFudWFsIHBhZ2UuCisKKwlPbiBzeXN0ZW1zIHV0aWxpemluZyBtb2Rwcm9iZS5jb25mIChvciBtb2Rwcm9iZS5jb25mLmxvY2FsKSwKK2FuIGVxdWl2YWxlbnQgcHJvYmxlbSBjYW4gb2NjdXIuICBJbiB0aGlzIGNhc2UsIHRoZSBmb2xsb3dpbmcgY2FuIGJlCithZGRlZCB0byBtb2Rwcm9iZS5jb25mIChvciBtb2Rwcm9iZS5jb25mLmxvY2FsLCBhcyBhcHByb3ByaWF0ZSksIGFzCitmb2xsb3dzIChhbGwgb24gb25lIGxpbmU7IGl0IGhhcyBiZWVuIHNwbGl0IGhlcmUgZm9yIGNsYXJpdHkpOgorCitpbnN0YWxsIGJvbmRpbmcgL3NiaW4vbW9kcHJvYmUgdGczOyAvc2Jpbi9tb2Rwcm9iZSBlMTAwMDsKKwkvc2Jpbi9tb2Rwcm9iZSAtLWlnbm9yZS1pbnN0YWxsIGJvbmRpbmcKKworCVRoaXMgd2lsbCwgd2hlbiBsb2FkaW5nIHRoZSBib25kaW5nIG1vZHVsZSwgcmF0aGVyIHRoYW4KK3BlcmZvcm1pbmcgdGhlIG5vcm1hbCBhY3Rpb24sIGluc3RlYWQgZXhlY3V0ZSB0aGUgcHJvdmlkZWQgY29tbWFuZC4KK1RoaXMgY29tbWFuZCBsb2FkcyB0aGUgZGV2aWNlIGRyaXZlcnMgaW4gdGhlIG9yZGVyIG5lZWRlZCwgdGhlbiBjYWxscworbW9kcHJvYmUgd2l0aCAtLWluZ29yZS1pbnN0YWxsIHRvIGNhdXNlIHRoZSBub3JtYWwgYWN0aW9uIHRvIHRoZW4gdGFrZQorcGxhY2UuICBGdWxsIGRvY3VtZW50YXRpb24gb24gdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIG1vZHByb2JlLmNvbmYKK2FuZCBtb2Rwcm9iZSBtYW51YWwgcGFnZXMuCisKKzkuMy4gUGFpbmZ1bGx5IFNsb3cgT3IgTm8gRmFpbGVkIExpbmsgRGV0ZWN0aW9uIEJ5IE1paW1vbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlCeSBkZWZhdWx0LCBib25kaW5nIGVuYWJsZXMgdGhlIHVzZV9jYXJyaWVyIG9wdGlvbiwgd2hpY2gKK2luc3RydWN0cyBib25kaW5nIHRvIHRydXN0IHRoZSBkcml2ZXIgdG8gbWFpbnRhaW4gY2FycmllciBzdGF0ZS4KKworCUFzIGRpc2N1c3NlZCBpbiB0aGUgb3B0aW9ucyBzZWN0aW9uLCBhYm92ZSwgc29tZSBkcml2ZXJzIGRvCitub3Qgc3VwcG9ydCB0aGUgbmV0aWZfY2Fycmllcl9vbi9fb2ZmIGxpbmsgc3RhdGUgdHJhY2tpbmcgc3lzdGVtLgorV2l0aCB1c2VfY2FycmllciBlbmFibGVkLCBib25kaW5nIHdpbGwgYWx3YXlzIHNlZSB0aGVzZSBsaW5rcyBhcyB1cCwKK3JlZ2FyZGxlc3Mgb2YgdGhlaXIgYWN0dWFsIHN0YXRlLgorCisJQWRkaXRpb25hbGx5LCBvdGhlciBkcml2ZXJzIGRvIHN1cHBvcnQgbmV0aWZfY2FycmllciwgYnV0IGRvCitub3QgbWFpbnRhaW4gaXQgaW4gcmVhbCB0aW1lLCBlLmcuLCBvbmx5IHBvbGxpbmcgdGhlIGxpbmsgc3RhdGUgYXQKK3NvbWUgZml4ZWQgaW50ZXJ2YWwuICBJbiB0aGlzIGNhc2UsIG1paW1vbiB3aWxsIGRldGVjdCBmYWlsdXJlcywgYnV0Citvbmx5IGFmdGVyIHNvbWUgbG9uZyBwZXJpb2Qgb2YgdGltZSBoYXMgZXhwaXJlZC4gIElmIGl0IGFwcGVhcnMgdGhhdAorbWlpbW9uIGlzIHZlcnkgc2xvdyBpbiBkZXRlY3RpbmcgbGluayBmYWlsdXJlcywgdHJ5IHNwZWNpZnlpbmcKK3VzZV9jYXJyaWVyPTAgdG8gc2VlIGlmIHRoYXQgaW1wcm92ZXMgdGhlIGZhaWx1cmUgZGV0ZWN0aW9uIHRpbWUuICBJZgoraXQgZG9lcywgdGhlbiBpdCBtYXkgYmUgdGhhdCB0aGUgZHJpdmVyIGNoZWNrcyB0aGUgY2FycmllciBzdGF0ZSBhdCBhCitmaXhlZCBpbnRlcnZhbCwgYnV0IGRvZXMgbm90IGNhY2hlIHRoZSBNSUkgcmVnaXN0ZXIgdmFsdWVzIChzbyB0aGUKK3VzZV9jYXJyaWVyPTAgbWV0aG9kIG9mIHF1ZXJ5aW5nIHRoZSByZWdpc3RlcnMgZGlyZWN0bHkgd29ya3MpLiAgSWYKK3VzZV9jYXJyaWVyPTAgZG9lcyBub3QgaW1wcm92ZSB0aGUgZmFpbG92ZXIsIHRoZW4gdGhlIGRyaXZlciBtYXkgY2FjaGUKK3RoZSByZWdpc3RlcnMsIG9yIHRoZSBwcm9ibGVtIG1heSBiZSBlbHNld2hlcmUuCisKKwlBbHNvLCByZW1lbWJlciB0aGF0IG1paW1vbiBvbmx5IGNoZWNrcyBmb3IgdGhlIGRldmljZSdzCitjYXJyaWVyIHN0YXRlLiAgSXQgaGFzIG5vIHdheSB0byBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIGRldmljZXMgb24gb3IKK2JleW9uZCBvdGhlciBwb3J0cyBvZiBhIHN3aXRjaCwgb3IgaWYgYSBzd2l0Y2ggaXMgcmVmdXNpbmcgdG8gcGFzcwordHJhZmZpYyB3aGlsZSBzdGlsbCBtYWludGFpbmluZyBjYXJyaWVyIG9uLgorCisxMC4gU05NUCBhZ2VudHMKKz09PT09PT09PT09PT09PQorCisJSWYgcnVubmluZyBTTk1QIGFnZW50cywgdGhlIGJvbmRpbmcgZHJpdmVyIHNob3VsZCBiZSBsb2FkZWQKK2JlZm9yZSBhbnkgbmV0d29yayBkcml2ZXJzIHBhcnRpY2lwYXRpbmcgaW4gYSBib25kLiAgVGhpcyByZXF1aXJlbWVudAoraXMgZHVlIHRvIHRoZSB0aGUgaW50ZXJmYWNlIGluZGV4IChpcEFkRW50SWZJbmRleCkgYmVpbmcgYXNzb2NpYXRlZCB0bwordGhlIGZpcnN0IGludGVyZmFjZSBmb3VuZCB3aXRoIGEgZ2l2ZW4gSVAgYWRkcmVzcy4gIFRoYXQgaXMsIHRoZXJlIGlzCitvbmx5IG9uZSBpcEFkRW50SWZJbmRleCBmb3IgZWFjaCBJUCBhZGRyZXNzLiAgRm9yIGV4YW1wbGUsIGlmIGV0aDAgYW5kCitldGgxIGFyZSBzbGF2ZXMgb2YgYm9uZDAgYW5kIHRoZSBkcml2ZXIgZm9yIGV0aDAgaXMgbG9hZGVkIGJlZm9yZSB0aGUKK2JvbmRpbmcgZHJpdmVyLCB0aGUgaW50ZXJmYWNlIGZvciB0aGUgSVAgYWRkcmVzcyB3aWxsIGJlIGFzc29jaWF0ZWQKK3dpdGggdGhlIGV0aDAgaW50ZXJmYWNlLiAgVGhpcyBjb25maWd1cmF0aW9uIGlzIHNob3duIGJlbG93LCB0aGUgSVAKK2FkZHJlc3MgMTkyLjE2OC4xLjEgaGFzIGFuIGludGVyZmFjZSBpbmRleCBvZiAyIHdoaWNoIGluZGV4ZXMgdG8gZXRoMAoraW4gdGhlIGlmRGVzY3IgdGFibGUgKGlmRGVzY3IuMikuCisKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4xID0gbG8KKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4yID0gZXRoMAorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjMgPSBldGgxCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNCA9IGV0aDIKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci41ID0gZXRoMworICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjYgPSBib25kMAorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMC4xMC4xMC4xMCA9IDUKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTkyLjE2OC4xLjEgPSAyCisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEwLjc0LjIwLjk0ID0gNAorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMjcuMC4wLjEgPSAxCisKKwlUaGlzIHByb2JsZW0gaXMgYXZvaWRlZCBieSBsb2FkaW5nIHRoZSBib25kaW5nIGRyaXZlciBiZWZvcmUKK2FueSBuZXR3b3JrIGRyaXZlcnMgcGFydGljaXBhdGluZyBpbiBhIGJvbmQuICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mCitsb2FkaW5nIHRoZSBib25kaW5nIGRyaXZlciBmaXJzdCwgdGhlIElQIGFkZHJlc3MgMTkyLjE2OC4xLjEgaXMKK2NvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggaWZEZXNjci4yLgorCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMSA9IGxvCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMiA9IGJvbmQwCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMyA9IGV0aDAKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci40ID0gZXRoMQorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjUgPSBldGgyCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNiA9IGV0aDMKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTAuMTAuMTAuMTAgPSA2CisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjE5Mi4xNjguMS4xID0gMgorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMC43NC4yMC45NCA9IDUKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTI3LjAuMC4xID0gMQorCisJV2hpbGUgc29tZSBkaXN0cmlidXRpb25zIG1heSBub3QgcmVwb3J0IHRoZSBpbnRlcmZhY2UgbmFtZSBpbgoraWZEZXNjciwgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIElQIGFkZHJlc3MgYW5kIElmSW5kZXggcmVtYWlucworYW5kIFNOTVAgZnVuY3Rpb25zIHN1Y2ggYXMgSW50ZXJmYWNlX1NjYW5fTmV4dCB3aWxsIHJlcG9ydCB0aGF0Cithc3NvY2lhdGlvbi4KKworMTEuIFByb21pc2N1b3VzIG1vZGUKKz09PT09PT09PT09PT09PT09PT09CisKKwlXaGVuIHJ1bm5pbmcgbmV0d29yayBtb25pdG9yaW5nIHRvb2xzLCBlLmcuLCB0Y3BkdW1wLCBpdCBpcworY29tbW9uIHRvIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlIG9uIHRoZSBkZXZpY2UsIHNvIHRoYXQgYWxsIHRyYWZmaWMKK2lzIHNlZW4gKGluc3RlYWQgb2Ygc2VlaW5nIG9ubHkgdHJhZmZpYyBkZXN0aW5lZCBmb3IgdGhlIGxvY2FsIGhvc3QpLgorVGhlIGJvbmRpbmcgZHJpdmVyIGhhbmRsZXMgcHJvbWlzY3VvdXMgbW9kZSBjaGFuZ2VzIHRvIHRoZSBib25kaW5nCittYXN0ZXIgZGV2aWNlIChlLmcuLCBib25kMCksIGFuZCBwcm9wb2dhdGVzIHRoZSBzZXR0aW5nIHRvIHRoZSBzbGF2ZQorZGV2aWNlcy4KKworCUZvciB0aGUgYmFsYW5jZS1yciwgYmFsYW5jZS14b3IsIGJyb2FkY2FzdCwgYW5kIDgwMi4zYWQgbW9kZXMsCit0aGUgcHJvbWlzY3VvdXMgbW9kZSBzZXR0aW5nIGlzIHByb3BvZ2F0ZWQgdG8gYWxsIHNsYXZlcy4KKworCUZvciB0aGUgYWN0aXZlLWJhY2t1cCwgYmFsYW5jZS10bGIgYW5kIGJhbGFuY2UtYWxiIG1vZGVzLCB0aGUKK3Byb21pc2N1b3VzIG1vZGUgc2V0dGluZyBpcyBwcm9wb2dhdGVkIG9ubHkgdG8gdGhlIGFjdGl2ZSBzbGF2ZS4KKworCUZvciBiYWxhbmNlLXRsYiBtb2RlLCB0aGUgYWN0aXZlIHNsYXZlIGlzIHRoZSBzbGF2ZSBjdXJyZW50bHkKK3JlY2VpdmluZyBpbmJvdW5kIHRyYWZmaWMuCisKKwlGb3IgYmFsYW5jZS1hbGIgbW9kZSwgdGhlIGFjdGl2ZSBzbGF2ZSBpcyB0aGUgc2xhdmUgdXNlZCBhcyBhCisicHJpbWFyeS4iICBUaGlzIHNsYXZlIGlzIHVzZWQgZm9yIG1vZGUtc3BlY2lmaWMgY29udHJvbCB0cmFmZmljLCBmb3IKK3NlbmRpbmcgdG8gcGVlcnMgdGhhdCBhcmUgdW5hc3NpZ25lZCBvciBpZiB0aGUgbG9hZCBpcyB1bmJhbGFuY2VkLgorCisJRm9yIHRoZSBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMsIHdoZW4KK3RoZSBhY3RpdmUgc2xhdmUgY2hhbmdlcyAoZS5nLiwgZHVlIHRvIGEgbGluayBmYWlsdXJlKSwgdGhlCitwcm9taXNjdW91cyBzZXR0aW5nIHdpbGwgYmUgcHJvcG9nYXRlZCB0byB0aGUgbmV3IGFjdGl2ZSBzbGF2ZS4KKworMTIuIEhpZ2ggQXZhaWxhYmlsaXR5IEluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCUhpZ2ggQXZhaWxhYmlsaXR5IHJlZmVycyB0byBjb25maWd1cmF0aW9ucyB0aGF0IHByb3ZpZGUKK21heGltdW0gbmV0d29yayBhdmFpbGFiaWxpdHkgYnkgaGF2aW5nIHJlZHVuZGFudCBvciBiYWNrdXAgZGV2aWNlcywKK2xpbmtzIGFuZCBzd2l0Y2hlcyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgcmVzdCBvZiB0aGUgd29ybGQuCisKKwlUaGVyZSBhcmUgY3VycmVudGx5IHR3byBiYXNpYyBtZXRob2RzIGZvciBjb25maWd1cmluZyB0bworbWF4aW1pemUgYXZhaWxhYmlsaXR5LiBUaGV5IGFyZSBkZXBlbmRlbnQgb24gdGhlIG5ldHdvcmsgdG9wb2xvZ3kgYW5kCit0aGUgcHJpbWFyeSBnb2FsIG9mIHRoZSBjb25maWd1cmF0aW9uLCBidXQgaW4gZ2VuZXJhbCwgYSBjb25maWd1cmF0aW9uCitjYW4gYmUgb3B0aW1pemVkIGZvciBtYXhpbXVtIGF2YWlsYWJsZSBiYW5kd2lkdGgsIG9yIGZvciBtYXhpbXVtCituZXR3b3JrIGF2YWlsYWJpbGl0eS4KKworMTIuMSBIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlJZiB0d28gaG9zdHMgKG9yIGEgaG9zdCBhbmQgYSBzd2l0Y2gpIGFyZSBkaXJlY3RseSBjb25uZWN0ZWQKK3ZpYSBtdWx0aXBsZSBwaHlzaWNhbCBsaW5rcywgdGhlbiB0aGVyZSBpcyBubyBuZXR3b3JrIGF2YWlsYWJpbGl0eQorcGVuYWx0eSBmb3Igb3B0aW1pemluZyBmb3IgbWF4aW11bSBiYW5kd2lkdGg6IHRoZXJlIGlzIG9ubHkgb25lIHN3aXRjaAorKG9yIHBlZXIpLCBzbyBpZiBpdCBmYWlscywgeW91IGhhdmUgbm8gYWx0ZXJuYXRpdmUgYWNjZXNzIHRvIGZhaWwgb3ZlcgordG8uCisKK0V4YW1wbGUgMSA6IGhvc3QgdG8gc3dpdGNoIChvciBvdGhlciBob3N0KQorCisgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgIHxldGgwICAgICAgICAgICAgICAgICAgZXRoMHwgIHN3aXRjaCAgfAorICAgICAgICAgIHwgSG9zdCBBICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICBvciAgICB8CisgICAgICAgICAgfCAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICBvdGhlciAgIHwKKyAgICAgICAgICB8ICAgICAgICAgIHxldGgxICAgICAgICAgICAgICAgICAgZXRoMXwgIGhvc3QgICAgfAorICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rCisKKworMTIuMS4xIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIHNpbmdsZSBzd2l0Y2ggdG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGVhc2llc3QgdG8gc2V0IHVwIGFuZCB0byB1bmRlcnN0YW5kLAorYWx0aG91Z2ggeW91IHdpbGwgaGF2ZSB0byBkZWNpZGUgd2hpY2ggYm9uZGluZyBtb2RlIGJlc3Qgc3VpdHMgeW91cgorbmVlZHMuICBUaGUgdHJhZGVvZmZzIGZvciBlYWNoIG1vZGUgYXJlIGRldGFpbGVkIGJlbG93OgorCitiYWxhbmNlLXJyOiBUaGlzIG1vZGUgaXMgdGhlIG9ubHkgbW9kZSB0aGF0IHdpbGwgcGVybWl0IGEgc2luZ2xlCisJVENQL0lQIGNvbm5lY3Rpb24gdG8gc3RyaXBlIHRyYWZmaWMgYWNyb3NzIG11bHRpcGxlCisJaW50ZXJmYWNlcy4gSXQgaXMgdGhlcmVmb3JlIHRoZSBvbmx5IG1vZGUgdGhhdCB3aWxsIGFsbG93IGEKKwlzaW5nbGUgVENQL0lQIHN0cmVhbSB0byB1dGlsaXplIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlJ3MKKwl3b3J0aCBvZiB0aHJvdWdocHV0LiAgVGhpcyBjb21lcyBhdCBhIGNvc3QsIGhvd2V2ZXI6IHRoZQorCXN0cmlwaW5nIG9mdGVuIHJlc3VsdHMgaW4gcGVlciBzeXN0ZW1zIHJlY2VpdmluZyBwYWNrZXRzIG91dAorCW9mIG9yZGVyLCBjYXVzaW5nIFRDUC9JUCdzIGNvbmdlc3Rpb24gY29udHJvbCBzeXN0ZW0gdG8ga2ljaworCWluLCBvZnRlbiBieSByZXRyYW5zbWl0dGluZyBzZWdtZW50cy4KKworCUl0IGlzIHBvc3NpYmxlIHRvIGFkanVzdCBUQ1AvSVAncyBjb25nZXN0aW9uIGxpbWl0cyBieQorCWFsdGVyaW5nIHRoZSBuZXQuaXB2NC50Y3BfcmVvcmRlcmluZyBzeXNjdGwgcGFyYW1ldGVyLiAgVGhlCisJdXN1YWwgZGVmYXVsdCB2YWx1ZSBpcyAzLCBhbmQgdGhlIG1heGltdW0gdXNlZnVsIHZhbHVlIGlzIDEyNy4KKwlGb3IgYSBmb3VyIGludGVyZmFjZSBiYWxhbmNlLXJyIGJvbmQsIGV4cGVjdCB0aGF0IGEgc2luZ2xlCisJVENQL0lQIHN0cmVhbSB3aWxsIHV0aWxpemUgbm8gbW9yZSB0aGFuIGFwcHJveGltYXRlbHkgMi4zCisJaW50ZXJmYWNlJ3Mgd29ydGggb2YgdGhyb3VnaHB1dCwgZXZlbiBhZnRlciBhZGp1c3RpbmcKKwl0Y3BfcmVvcmRlcmluZy4KKworCUlmIHlvdSBhcmUgdXRpbGl6aW5nIHByb3RvY29scyBvdGhlciB0aGFuIFRDUC9JUCwgVURQIGZvcgorCWV4YW1wbGUsIGFuZCB5b3VyIGFwcGxpY2F0aW9uIGNhbiB0b2xlcmF0ZSBvdXQgb2Ygb3JkZXIKKwlkZWxpdmVyeSwgdGhlbiB0aGlzIG1vZGUgY2FuIGFsbG93IGZvciBzaW5nbGUgc3RyZWFtIGRhdGFncmFtCisJcGVyZm9ybWFuY2UgdGhhdCBzY2FsZXMgbmVhciBsaW5lYXJseSBhcyBpbnRlcmZhY2VzIGFyZSBhZGRlZAorCXRvIHRoZSBib25kLgorCisJVGhpcyBtb2RlIHJlcXVpcmVzIHRoZSBzd2l0Y2ggdG8gaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcG9ydHMKKwljb25maWd1cmVkIGZvciAiZXRoZXJjaGFubmVsIiBvciAidHJ1bmtpbmcuIgorCithY3RpdmUtYmFja3VwOiBUaGVyZSBpcyBub3QgbXVjaCBhZHZhbnRhZ2UgaW4gdGhpcyBuZXR3b3JrIHRvcG9sb2d5IHRvCisJdGhlIGFjdGl2ZS1iYWNrdXAgbW9kZSwgYXMgdGhlIGluYWN0aXZlIGJhY2t1cCBkZXZpY2VzIGFyZSBhbGwKKwljb25uZWN0ZWQgdG8gdGhlIHNhbWUgcGVlciBhcyB0aGUgcHJpbWFyeS4gIEluIHRoaXMgY2FzZSwgYQorCWxvYWQgYmFsYW5jaW5nIG1vZGUgKHdpdGggbGluayBtb25pdG9yaW5nKSB3aWxsIHByb3ZpZGUgdGhlCisJc2FtZSBsZXZlbCBvZiBuZXR3b3JrIGF2YWlsYWJpbGl0eSwgYnV0IHdpdGggaW5jcmVhc2VkCisJYXZhaWxhYmxlIGJhbmR3aWR0aC4gIE9uIHRoZSBwbHVzIHNpZGUsIGl0IGRvZXMgbm90IHJlcXVpcmUKKwlhbnkgY29uZmlndXJhdGlvbiBvZiB0aGUgc3dpdGNoLgorCitiYWxhbmNlLXhvcjogVGhpcyBtb2RlIHdpbGwgbGltaXQgdHJhZmZpYyBzdWNoIHRoYXQgcGFja2V0cyBkZXN0aW5lZAorCWZvciBzcGVjaWZpYyBwZWVycyB3aWxsIGFsd2F5cyBiZSBzZW50IG92ZXIgdGhlIHNhbWUKKwlpbnRlcmZhY2UuICBTaW5jZSB0aGUgZGVzdGluYXRpb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgTUFDCisJYWRkcmVzc2VzIGludm9sdmVkLCB0aGlzIG1heSBiZSBkZXNpcmFibGUgaWYgeW91IGhhdmUgYSBsYXJnZQorCW5ldHdvcmsgd2l0aCBtYW55IGhvc3RzLiAgSXQgaXMgbGlrZWx5IHRvIGJlIHN1Ym9wdGltYWwgaWYgYWxsCisJeW91ciB0cmFmZmljIGlzIHBhc3NlZCB0aHJvdWdoIGEgc2luZ2xlIHJvdXRlciwgaG93ZXZlci4gIEFzCisJd2l0aCBiYWxhbmNlLXJyLCB0aGUgc3dpdGNoIHBvcnRzIG5lZWQgdG8gYmUgY29uZmlndXJlZCBmb3IKKwkiZXRoZXJjaGFubmVsIiBvciAidHJ1bmtpbmcuIgorCiticm9hZGNhc3Q6IExpa2UgYWN0aXZlLWJhY2t1cCwgdGhlcmUgaXMgbm90IG11Y2ggYWR2YW50YWdlIHRvIHRoaXMKKwltb2RlIGluIHRoaXMgdHlwZSBvZiBuZXR3b3JrIHRvcG9sb2d5LgorCis4MDIuM2FkOiBUaGlzIG1vZGUgY2FuIGJlIGEgZ29vZCBjaG9pY2UgZm9yIHRoaXMgdHlwZSBvZiBuZXR3b3JrCisJdG9wb2xvZ3kuICBUaGUgODAyLjNhZCBtb2RlIGlzIGFuIElFRUUgc3RhbmRhcmQsIHNvIGFsbCBwZWVycworCXRoYXQgaW1wbGVtZW50IDgwMi4zYWQgc2hvdWxkIGludGVyb3BlcmF0ZSB3ZWxsLiAgVGhlIDgwMi4zYWQKKwlwcm90b2NvbCBpbmNsdWRlcyBhdXRvbWF0aWMgY29uZmlndXJhdGlvbiBvZiB0aGUgYWdncmVnYXRlcywKKwlzbyBtaW5pbWFsIG1hbnVhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBzd2l0Y2ggaXMgbmVlZGVkCisJKHR5cGljYWxseSBvbmx5IHRvIGRlc2lnbmF0ZSB0aGF0IHNvbWUgc2V0IG9mIGRldmljZXMgaXMKKwl1c2FibGUgZm9yIDgwMi4zYWQpLiAgVGhlIDgwMi4zYWQgc3RhbmRhcmQgYWxzbyBtYW5kYXRlcyB0aGF0CisJZnJhbWVzIGJlIGRlbGl2ZXJlZCBpbiBvcmRlciAod2l0aGluIGNlcnRhaW4gbGltaXRzKSwgc28gaW4KKwlnZW5lcmFsIHNpbmdsZSBjb25uZWN0aW9ucyB3aWxsIG5vdCBzZWUgbWlzb3JkZXJpbmcgb2YKKwlwYWNrZXRzLiAgVGhlIDgwMi4zYWQgbW9kZSBkb2VzIGhhdmUgc29tZSBkcmF3YmFja3M6IHRoZQorCXN0YW5kYXJkIG1hbmRhdGVzIHRoYXQgYWxsIGRldmljZXMgaW4gdGhlIGFnZ3JlZ2F0ZSBvcGVyYXRlIGF0CisJdGhlIHNhbWUgc3BlZWQgYW5kIGR1cGxleC4gIEFsc28sIGFzIHdpdGggYWxsIGJvbmRpbmcgbG9hZAorCWJhbGFuY2UgbW9kZXMgb3RoZXIgdGhhbiBiYWxhbmNlLXJyLCBubyBzaW5nbGUgY29ubmVjdGlvbiB3aWxsCisJYmUgYWJsZSB0byB1dGlsaXplIG1vcmUgdGhhbiBhIHNpbmdsZSBpbnRlcmZhY2UncyB3b3J0aCBvZgorCWJhbmR3aWR0aC4gIEFkZGl0aW9uYWxseSwgdGhlIGxpbnV4IGJvbmRpbmcgODAyLjNhZAorCWltcGxlbWVudGF0aW9uIGRpc3RyaWJ1dGVzIHRyYWZmaWMgYnkgcGVlciAodXNpbmcgYW4gWE9SIG9mCisJTUFDIGFkZHJlc3NlcyksIHNvIGluIGdlbmVyYWwgYWxsIHRyYWZmaWMgdG8gYSBwYXJ0aWN1bGFyCisJZGVzdGluYXRpb24gd2lsbCB1c2UgdGhlIHNhbWUgaW50ZXJmYWNlLiAgRmluYWxseSwgdGhlIDgwMi4zYWQKKwltb2RlIG1hbmRhdGVzIHRoZSB1c2Ugb2YgdGhlIE1JSSBtb25pdG9yLCB0aGVyZWZvcmUsIHRoZSBBUlAKKwltb25pdG9yIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBtb2RlLgorCitiYWxhbmNlLXRsYjogVGhpcyBtb2RlIGlzIGFsc28gYSBnb29kIGNob2ljZSBmb3IgdGhpcyB0eXBlIG9mCisJdG9wb2xvZ3kuICBJdCBoYXMgbm8gc3BlY2lhbCBzd2l0Y2ggY29uZmlndXJhdGlvbgorCXJlcXVpcmVtZW50cywgYW5kIGJhbGFuY2VzIG91dGdvaW5nIHRyYWZmaWMgYnkgcGVlciwgaW4gYQorCXZhZ3VlbHkgaW50ZWxsaWdlbnQgbWFubmVyIChub3QgYSBzaW1wbGUgWE9SIGFzIGluIGJhbGFuY2UteG9yCisJb3IgODAyLjNhZCBtb2RlKSwgc28gdGhhdCB1bmx1Y2t5IE1BQyBhZGRyZXNzZXMgd2lsbCBub3QgYWxsCisJImJ1bmNoIHVwIiBvbiBhIHNpbmdsZSBpbnRlcmZhY2UuICBJbnRlcmZhY2VzIG1heSBiZSBvZgorCWRpZmZlcmluZyBzcGVlZHMuICBPbiB0aGUgZG93biBzaWRlLCBpbiB0aGlzIG1vZGUgYWxsIGluY29taW5nCisJdHJhZmZpYyBhcnJpdmVzIG92ZXIgYSBzaW5nbGUgaW50ZXJmYWNlLCB0aGlzIG1vZGUgcmVxdWlyZXMKKwljZXJ0YWluIGV0aHRvb2wgc3VwcG9ydCBpbiB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIG9mIHRoZQorCXNsYXZlIGludGVyZmFjZXMsIGFuZCB0aGUgQVJQIG1vbml0b3IgaXMgbm90IGF2YWlsYWJsZS4KKworYmFsYW5jZS1hbGI6IFRoaXMgbW9kZSBpcyBldmVyeXRoaW5nIHRoYXQgYmFsYW5jZS10bGIgaXMsIGFuZCBtb3JlLiBJdAorCWhhcyBhbGwgb2YgdGhlIGZlYXR1cmVzIChhbmQgcmVzdHJpY3Rpb25zKSBvZiBiYWxhbmNlLXRsYiwgYW5kCisJd2lsbCBhbHNvIGJhbGFuY2UgaW5jb21pbmcgdHJhZmZpYyBmcm9tIHBlZXJzIChhcyBkZXNjcmliZWQgaW4KKwl0aGUgQm9uZGluZyBNb2R1bGUgT3B0aW9ucyBzZWN0aW9uLCBhYm92ZSkuICBUaGUgb25seSBleHRyYQorCWRvd24gc2lkZSB0byB0aGlzIG1vZGUgaXMgdGhhdCB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyIG11c3QKKwlzdXBwb3J0IGNoYW5naW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzIHdoaWxlIHRoZSBkZXZpY2UgaXMKKwlvcGVuLgorCisxMi4xLjIgTGluayBNb25pdG9yaW5nIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgY2hvaWNlIG9mIGxpbmsgbW9uaXRvcmluZyBtYXkgbGFyZ2VseSBkZXBlbmQgdXBvbiB3aGljaAorbW9kZSB5b3UgY2hvb3NlIHRvIHVzZS4gIFRoZSBtb3JlIGFkdmFuY2VkIGxvYWQgYmFsYW5jaW5nIG1vZGVzIGRvIG5vdAorc3VwcG9ydCB0aGUgdXNlIG9mIHRoZSBBUlAgbW9uaXRvciwgYW5kIGFyZSB0aHVzIHJlc3RyaWN0ZWQgdG8gdXNpbmcKK3RoZSBNSUkgbW9uaXRvciAod2hpY2ggZG9lcyBub3QgcHJvdmlkZSBhcyBoaWdoIGEgbGV2ZWwgb2YgYXNzdXJhbmNlCithcyB0aGUgQVJQIG1vbml0b3IpLgorCisKKzEyLjIgSGlnaCBBdmFpbGFiaWxpdHkgaW4gYSBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVdpdGggbXVsdGlwbGUgc3dpdGNoZXMsIHRoZSBjb25maWd1cmF0aW9uIG9mIGJvbmRpbmcgYW5kIHRoZQorbmV0d29yayBjaGFuZ2VzIGRyYW1hdGljYWxseS4gIEluIG11bHRpcGxlIHN3aXRjaCB0b3BvbG9naWVzLCB0aGVyZSBpcworYSB0cmFkZW9mZiBiZXR3ZWVuIG5ldHdvcmsgYXZhaWxhYmlsaXR5IGFuZCB1c2FibGUgYmFuZHdpZHRoLgorCisJQmVsb3cgaXMgYSBzYW1wbGUgbmV0d29yaywgY29uZmlndXJlZCB0byBtYXhpbWl6ZSB0aGUKK2F2YWlsYWJpbGl0eSBvZiB0aGUgbmV0d29yazoKKworICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgIHxwb3J0MyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQzfAorICAgICAgICAgICstLS0tLSstLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0rCisgICAgICAgICAgfCAgICAgICAgICB8cG9ydDIgICAgICAgSVNMICAgICAgcG9ydDJ8ICAgICAgICAgIHwKKyAgICAgICAgICB8IHN3aXRjaCBBICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgc3dpdGNoIEIgfAorICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8CisgICAgICAgICAgKy0tLS0tKy0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rKy0tLSsKKyAgICAgICAgICAgICAgICB8cG9ydDEgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0MXwKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0tKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgaG9zdDEgKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICBldGgwICstLS0tLS0tKyBldGgxCisKKwlJbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHRoZXJlIGlzIGEgbGluayBiZXR3ZWVuIHRoZSB0d28KK3N3aXRjaGVzIChJU0wsIG9yIGludGVyIHN3aXRjaCBsaW5rKSwgYW5kIG11bHRpcGxlIHBvcnRzIGNvbm5lY3RpbmcgdG8KK3RoZSBvdXRzaWRlIHdvcmxkICgicG9ydDMiIG9uIGVhY2ggc3dpdGNoKS4gIFRoZXJlIGlzIG5vIHRlY2huaWNhbAorcmVhc29uIHRoYXQgdGhpcyBjb3VsZCBub3QgYmUgZXh0ZW5kZWQgdG8gYSB0aGlyZCBzd2l0Y2guCisKKzEyLjIuMSBCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUluIGEgdG9wb2xvZ3kgc3VjaCBhcyB0aGlzLCB0aGUgYWN0aXZlLWJhY2t1cCBhbmQgYnJvYWRjYXN0Cittb2RlcyBhcmUgdGhlIG9ubHkgdXNlZnVsIGJvbmRpbmcgbW9kZXM7IHRoZSBvdGhlciBtb2RlcyByZXF1aXJlIGFsbAorbGlua3MgdG8gdGVybWluYXRlIG9uIHRoZSBzYW1lIHBlZXIgZm9yIHRoZW0gdG8gYmVoYXZlIHJhdGlvbmFsbHkuCisKK2FjdGl2ZS1iYWNrdXA6IFRoaXMgaXMgZ2VuZXJhbGx5IHRoZSBwcmVmZXJyZWQgbW9kZSwgcGFydGljdWxhcmx5IGlmCisJdGhlIHN3aXRjaGVzIGhhdmUgYW4gSVNMIGFuZCBwbGF5IHRvZ2V0aGVyIHdlbGwuICBJZiB0aGUKKwluZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgc3VjaCB0aGF0IG9uZSBzd2l0Y2ggaXMgc3BlY2lmaWNhbGx5CisJYSBiYWNrdXAgc3dpdGNoIChlLmcuLCBoYXMgbG93ZXIgY2FwYWNpdHksIGhpZ2hlciBjb3N0LCBldGMpLAorCXRoZW4gdGhlIHByaW1hcnkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGluc3VyZSB0aGF0IHRoZQorCXByZWZlcnJlZCBsaW5rIGlzIGFsd2F5cyB1c2VkIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgorCiticm9hZGNhc3Q6IFRoaXMgbW9kZSBpcyByZWFsbHkgYSBzcGVjaWFsIHB1cnBvc2UgbW9kZSwgYW5kIGlzIHN1aXRhYmxlCisJb25seSBmb3IgdmVyeSBzcGVjaWZpYyBuZWVkcy4gIEZvciBleGFtcGxlLCBpZiB0aGUgdHdvCisJc3dpdGNoZXMgYXJlIG5vdCBjb25uZWN0ZWQgKG5vIElTTCksIGFuZCB0aGUgbmV0d29ya3MgYmV5b25kCisJdGhlbSBhcmUgdG90YWxseSBpbmRlcGVuZGFudC4gIEluIHRoaXMgY2FzZSwgaWYgaXQgaXMKKwluZWNlc3NhcnkgZm9yIHNvbWUgc3BlY2lmaWMgb25lLXdheSB0cmFmZmljIHRvIHJlYWNoIGJvdGgKKwlpbmRlcGVuZGVudCBuZXR3b3JrcywgdGhlbiB0aGUgYnJvYWRjYXN0IG1vZGUgbWF5IGJlIHN1aXRhYmxlLgorCisxMi4yLjIgTGluayBNb25pdG9yaW5nIFNlbGVjdGlvbiBmb3IgTXVsdGlwbGUgU3dpdGNoIFRvcG9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgY2hvaWNlIG9mIGxpbmsgbW9uaXRvcmluZyB1bHRpbWF0ZWx5IGRlcGVuZHMgdXBvbiB5b3VyCitzd2l0Y2guICBJZiB0aGUgc3dpdGNoIGNhbiByZWxpYWJseSBmYWlsIHBvcnRzIGluIHJlc3BvbnNlIHRvIG90aGVyCitmYWlsdXJlcywgdGhlbiBlaXRoZXIgdGhlIE1JSSBvciBBUlAgbW9uaXRvcnMgc2hvdWxkIHdvcmsuICBGb3IKK2V4YW1wbGUsIGluIHRoZSBhYm92ZSBleGFtcGxlLCBpZiB0aGUgInBvcnQzIiBsaW5rIGZhaWxzIGF0IHRoZSByZW1vdGUKK2VuZCwgdGhlIE1JSSBtb25pdG9yIGhhcyBubyBkaXJlY3QgbWVhbnMgdG8gZGV0ZWN0IHRoaXMuICBUaGUgQVJQCittb25pdG9yIGNvdWxkIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIHRhcmdldCBhdCB0aGUgcmVtb3RlIGVuZCBvZiBwb3J0MywKK3RodXMgZGV0ZWN0aW5nIHRoYXQgZmFpbHVyZSB3aXRob3V0IHN3aXRjaCBzdXBwb3J0LgorCisJSW4gZ2VuZXJhbCwgaG93ZXZlciwgaW4gYSBtdWx0aXBsZSBzd2l0Y2ggdG9wb2xvZ3ksIHRoZSBBUlAKK21vbml0b3IgY2FuIHByb3ZpZGUgYSBoaWdoZXIgbGV2ZWwgb2YgcmVsaWFiaWxpdHkgaW4gZGV0ZWN0aW5nIGxpbmsKK2ZhaWx1cmVzLiAgQWRkaXRpb25hbGx5LCBpdCBzaG91bGQgYmUgY29uZmlndXJlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMKKyhhdCBsZWFzdCBvbmUgZm9yIGVhY2ggc3dpdGNoIGluIHRoZSBuZXR3b3JrKS4gIFRoaXMgd2lsbCBpbnN1cmUgdGhhdCwKK3JlZ2FyZGxlc3Mgb2Ygd2hpY2ggc3dpdGNoIGlzIGFjdGl2ZSwgdGhlIEFSUCBtb25pdG9yIGhhcyBhIHN1aXRhYmxlCit0YXJnZXQgdG8gcXVlcnkuCisKKworMTIuMyBTd2l0Y2ggQmVoYXZpb3IgSXNzdWVzIGZvciBIaWdoIEF2YWlsYWJpbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJWW91IG1heSBlbmNvdW50ZXIgaXNzdWVzIHdpdGggdGhlIHRpbWluZyBvZiBsaW5rIHVwIGFuZCBkb3duCityZXBvcnRpbmcgYnkgdGhlIHN3aXRjaC4KKworCUZpcnN0LCB3aGVuIGEgbGluayBjb21lcyB1cCwgc29tZSBzd2l0Y2hlcyBtYXkgaW5kaWNhdGUgdGhhdAordGhlIGxpbmsgaXMgdXAgKGNhcnJpZXIgYXZhaWxhYmxlKSwgYnV0IG5vdCBwYXNzIHRyYWZmaWMgb3ZlciB0aGUKK2ludGVyZmFjZSBmb3Igc29tZSBwZXJpb2Qgb2YgdGltZS4gIFRoaXMgZGVsYXkgaXMgdHlwaWNhbGx5IGR1ZSB0bworc29tZSB0eXBlIG9mIGF1dG9uZWdvdGlhdGlvbiBvciByb3V0aW5nIHByb3RvY29sLCBidXQgbWF5IGFsc28gb2NjdXIKK2R1cmluZyBzd2l0Y2ggaW5pdGlhbGl6YXRpb24gKGUuZy4sIGR1cmluZyByZWNvdmVyeSBhZnRlciBhIHN3aXRjaAorZmFpbHVyZSkuICBJZiB5b3UgZmluZCB0aGlzIHRvIGJlIGEgcHJvYmxlbSwgc3BlY2lmeSBhbiBhcHByb3ByaWF0ZQordmFsdWUgdG8gdGhlIHVwZGVsYXkgYm9uZGluZyBtb2R1bGUgb3B0aW9uIHRvIGRlbGF5IHRoZSB1c2Ugb2YgdGhlCityZWxldmFudCBpbnRlcmZhY2UocykuCisKKwlTZWNvbmQsIHNvbWUgc3dpdGNoZXMgbWF5ICJib3VuY2UiIHRoZSBsaW5rIHN0YXRlIG9uZSBvciBtb3JlCit0aW1lcyB3aGlsZSBhIGxpbmsgaXMgY2hhbmdpbmcgc3RhdGUuICBUaGlzIG9jY3VycyBtb3N0IGNvbW1vbmx5IHdoaWxlCit0aGUgc3dpdGNoIGlzIGluaXRpYWxpemluZy4gIEFnYWluLCBhbiBhcHByb3ByaWF0ZSB1cGRlbGF5IHZhbHVlIG1heQoraGVscCwgYnV0IG5vdGUgdGhhdCBpZiBhbGwgbGlua3MgYXJlIGRvd24sIHRoZW4gdXBkZWxheSBpcyBpZ25vcmVkCit3aGVuIGFueSBsaW5rIGJlY29tZXMgYWN0aXZlICh0aGUgc2xhdmUgY2xvc2VzdCB0byBjb21wbGV0aW5nIGl0cwordXBkZWxheSBpcyBjaG9zZW4pLgorCisJTm90ZSB0aGF0IHdoZW4gYSBib25kaW5nIGludGVyZmFjZSBoYXMgbm8gYWN0aXZlIGxpbmtzLCB0aGUKK2RyaXZlciB3aWxsIGltbWVkaWF0ZWx5IHJldXNlIHRoZSBmaXJzdCBsaW5rIHRoYXQgZ29lcyB1cCwgZXZlbiBpZgordXBkZWxheSBwYXJhbWV0ZXIgd2FzIHNwZWNpZmllZC4gIElmIHRoZXJlIGFyZSBzbGF2ZSBpbnRlcmZhY2VzCit3YWl0aW5nIGZvciB0aGUgdXBkZWxheSB0aW1lb3V0IHRvIGV4cGlyZSwgdGhlIGludGVyZmFjZSB0aGF0IGZpcnN0Cit3ZW50IGludG8gdGhhdCBzdGF0ZSB3aWxsIGJlIGltbWVkaWF0ZWx5IHJldXNlZC4gIFRoaXMgcmVkdWNlcyBkb3duCit0aW1lIG9mIHRoZSBuZXR3b3JrIGlmIHRoZSB2YWx1ZSBvZiB1cGRlbGF5IGhhcyBiZWVuIG92ZXJlc3RpbWF0ZWQuCisKKwlJbiBhZGRpdGlvbiB0byB0aGUgY29uY2VybnMgYWJvdXQgc3dpdGNoIHRpbWluZ3MsIGlmIHlvdXIKK3N3aXRjaGVzIHRha2UgYSBsb25nIHRpbWUgdG8gZ28gaW50byBiYWNrdXAgbW9kZSwgaXQgbWF5IGJlIGRlc2lyYWJsZQordG8gbm90IGFjdGl2YXRlIGEgYmFja3VwIGludGVyZmFjZSBpbW1lZGlhdGVseSBhZnRlciBhIGxpbmsgZ29lcyBkb3duLgorRmFpbG92ZXIgbWF5IGJlIGRlbGF5ZWQgdmlhIHRoZSBkb3duZGVsYXkgYm9uZGluZyBtb2R1bGUgb3B0aW9uLgorCisxMy4gSGFyZHdhcmUgU3BlY2lmaWMgQ29uc2lkZXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGNvbmZpZ3VyaW5nCitib25kaW5nIG9uIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3Jtcywgb3IgZm9yIGludGVyZmFjaW5nIGJvbmRpbmcKK3dpdGggcGFydGljdWxhciBzd2l0Y2hlcyBvciBvdGhlciBkZXZpY2VzLgorCisxMy4xIElCTSBCbGFkZUNlbnRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgYXBwbGllcyB0byB0aGUgSlMyMCBhbmQgc2ltaWxhciBzeXN0ZW1zLgorCisJT24gdGhlIEpTMjAgYmxhZGVzLCB0aGUgYm9uZGluZyBkcml2ZXIgc3VwcG9ydHMgb25seQorYmFsYW5jZS1yciwgYWN0aXZlLWJhY2t1cCwgYmFsYW5jZS10bGIgYW5kIGJhbGFuY2UtYWxiIG1vZGVzLiAgVGhpcyBpcworbGFyZ2VseSBkdWUgdG8gdGhlIG5ldHdvcmsgdG9wb2xvZ3kgaW5zaWRlIHRoZSBCbGFkZUNlbnRlciwgZGV0YWlsZWQKK2JlbG93LgorCitKUzIwIG5ldHdvcmsgYWRhcHRlciBpbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUFsbCBKUzIwcyBjb21lIHdpdGggdHdvIEJyb2FkY29tIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMKK2ludGVncmF0ZWQgb24gdGhlIHBsYW5hci4gIEluIHRoZSBCbGFkZUNlbnRlciBjaGFzc2lzLCB0aGUgZXRoMCBwb3J0CitvZiBhbGwgSlMyMCBibGFkZXMgaXMgaGFyZCB3aXJlZCB0byBJL08gTW9kdWxlICMxOyBzaW1pbGFybHksIGFsbCBldGgxCitwb3J0cyBhcmUgd2lyZWQgdG8gSS9PIE1vZHVsZSAjMi4gIEFuIGFkZC1vbiBCcm9hZGNvbSBkYXVnaHRlciBjYXJkCitjYW4gYmUgaW5zdGFsbGVkIG9uIGEgSlMyMCB0byBwcm92aWRlIHR3byBtb3JlIEdpZ2FiaXQgRXRoZXJuZXQgcG9ydHMuCitUaGVzZSBwb3J0cywgZXRoMiBhbmQgZXRoMywgYXJlIHdpcmVkIHRvIEkvTyBNb2R1bGVzIDMgYW5kIDQsCityZXNwZWN0aXZlbHkuCisKKwlFYWNoIEkvTyBNb2R1bGUgbWF5IGNvbnRhaW4gZWl0aGVyIGEgc3dpdGNoIG9yIGEgcGFzc3Rocm91Z2gKK21vZHVsZSAod2hpY2ggYWxsb3dzIHBvcnRzIHRvIGJlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBhbiBleHRlcm5hbAorc3dpdGNoKS4gIFNvbWUgYm9uZGluZyBtb2RlcyByZXF1aXJlIGEgc3BlY2lmaWMgQmxhZGVDZW50ZXIgaW50ZXJuYWwKK25ldHdvcmsgdG9wb2xvZ3kgaW4gb3JkZXIgdG8gZnVuY3Rpb247IHRoZXNlIGFyZSBkZXRhaWxlZCBiZWxvdy4KKworCUFkZGl0aW9uYWwgQmxhZGVDZW50ZXItc3BlY2lmaWMgbmV0d29ya2luZyBpbmZvcm1hdGlvbiBjYW4gYmUKK2ZvdW5kIGluIHR3byBJQk0gUmVkYm9va3MgKHd3dy5pYm0uY29tL3JlZGJvb2tzKToKKworIklCTSBlU2VydmVyIEJsYWRlQ2VudGVyIE5ldHdvcmtpbmcgT3B0aW9ucyIKKyJJQk0gZVNlcnZlciBCbGFkZUNlbnRlciBMYXllciAyLTcgTmV0d29yayBTd2l0Y2hpbmciCisKK0JsYWRlQ2VudGVyIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlCZWNhdXNlIGEgQmxhZGVDZW50ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYSB2ZXJ5IGxhcmdlIG51bWJlcgorb2Ygd2F5cywgdGhpcyBkaXNjdXNzaW9uIHdpbGwgYmUgY29uZmluZWQgdG8gZGVzY3JpYmluZyBiYXNpYworY29uZmlndXJhdGlvbnMuCisKKwlOb3JtYWxseSwgRXRoZXJuZXQgU3dpdGNoIE1vZHVsZXMgKEVTTSkgYXJlIHVzZWQgaW4gSS9PCittb2R1bGVzIDEgYW5kIDIuICBJbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHRoZSBldGgwIGFuZCBldGgxIHBvcnRzIG9mIGEKK0pTMjAgd2lsbCBiZSBjb25uZWN0ZWQgdG8gZGlmZmVyZW50IGludGVybmFsIHN3aXRjaGVzIChpbiB0aGUKK3Jlc3BlY3RpdmUgSS9PIG1vZHVsZXMpLgorCisJQW4gb3B0aWNhbCBwYXNzdGhydSBtb2R1bGUgKE9QTSkgY29ubmVjdHMgdGhlIEkvTyBtb2R1bGUKK2RpcmVjdGx5IHRvIGFuIGV4dGVybmFsIHN3aXRjaC4gIEJ5IHVzaW5nIE9QTXMgaW4gSS9PIG1vZHVsZSAjMSBhbmQKKyMyLCB0aGUgZXRoMCBhbmQgZXRoMSBpbnRlcmZhY2VzIG9mIGEgSlMyMCBjYW4gYmUgcmVkaXJlY3RlZCB0byB0aGUKK291dHNpZGUgd29ybGQgYW5kIGNvbm5lY3RlZCB0byBhIGNvbW1vbiBleHRlcm5hbCBzd2l0Y2guCisKKwlEZXBlbmRpbmcgdXBvbiB0aGUgbWl4IG9mIEVTTSBhbmQgT1BNIG1vZHVsZXMsIHRoZSBuZXR3b3JrCit3aWxsIGFwcGVhciB0byBib25kaW5nIGFzIGVpdGhlciBhIHNpbmdsZSBzd2l0Y2ggdG9wb2xvZ3kgKGFsbCBPUE0KK21vZHVsZXMpIG9yIGFzIGEgbXVsdGlwbGUgc3dpdGNoIHRvcG9sb2d5IChvbmUgb3IgbW9yZSBFU00gbW9kdWxlcywKK3plcm8gb3IgbW9yZSBPUE0gbW9kdWxlcykuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNvbm5lY3QgRVNNIG1vZHVsZXMKK3RvZ2V0aGVyLCByZXN1bHRpbmcgaW4gYSBjb25maWd1cmF0aW9uIG11Y2ggbGlrZSB0aGUgZXhhbXBsZSBpbiAiSGlnaAorQXZhaWxhYmlsaXR5IGluIGEgbXVsdGlwbGUgc3dpdGNoIHRvcG9sb2d5LiIKKworUmVxdWlyZW1lbnRzIGZvciBzcGVjaWZjIG1vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBiYWxhbmNlLXJyIG1vZGUgcmVxdWlyZXMgdGhlIHVzZSBvZiBPUE0gbW9kdWxlcyBmb3IKK2RldmljZXMgaW4gdGhlIGJvbmQsIGFsbCBjb25uZWN0ZWQgdG8gYW4gY29tbW9uIGV4dGVybmFsIHN3aXRjaC4gIFRoYXQKK3N3aXRjaCBtdXN0IGJlIGNvbmZpZ3VyZWQgZm9yICJldGhlcmNoYW5uZWwiIG9yICJ0cnVua2luZyIgb24gdGhlCithcHByb3ByaWF0ZSBwb3J0cywgYXMgaXMgdXN1YWwgZm9yIGJhbGFuY2UtcnIuCisKKwlUaGUgYmFsYW5jZS1hbGIgYW5kIGJhbGFuY2UtdGxiIG1vZGVzIHdpbGwgZnVuY3Rpb24gd2l0aAorZWl0aGVyIHN3aXRjaCBtb2R1bGVzIG9yIHBhc3N0aHJvdWdoIG1vZHVsZXMgKG9yIGEgbWl4KS4gIFRoZSBvbmx5CitzcGVjaWZpYyByZXF1aXJlbWVudCBmb3IgdGhlc2UgbW9kZXMgaXMgdGhhdCBhbGwgbmV0d29yayBpbnRlcmZhY2VzCittdXN0IGJlIGFibGUgdG8gcmVhY2ggYWxsIGRlc3RpbmF0aW9ucyBmb3IgdHJhZmZpYyBzZW50IG92ZXIgdGhlCitib25kaW5nIGRldmljZSAoaS5lLiwgdGhlIG5ldHdvcmsgbXVzdCBjb252ZXJnZSBhdCBzb21lIHBvaW50IG91dHNpZGUKK3RoZSBCbGFkZUNlbnRlcikuCisKKwlUaGUgYWN0aXZlLWJhY2t1cCBtb2RlIGhhcyBubyBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cy4KKworTGluayBtb25pdG9yaW5nIGlzc3VlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJV2hlbiBhbiBFdGhlcm5ldCBTd2l0Y2ggTW9kdWxlIGlzIGluIHBsYWNlLCBvbmx5IHRoZSBBUlAKK21vbml0b3Igd2lsbCByZWxpYWJseSBkZXRlY3QgbGluayBsb3NzIHRvIGFuIGV4dGVybmFsIHN3aXRjaC4gIFRoaXMgaXMKK25vdGhpbmcgdW51c3VhbCwgYnV0IGV4YW1pbmF0aW9uIG9mIHRoZSBCbGFkZUNlbnRlciBjYWJpbmV0IHdvdWxkCitzdWdnZXN0IHRoYXQgdGhlICJleHRlcm5hbCIgbmV0d29yayBwb3J0cyBhcmUgdGhlIGV0aGVybmV0IHBvcnRzIGZvcgordGhlIHN5c3RlbSwgd2hlbiBpdCBmYWN0IHRoZXJlIGlzIGEgc3dpdGNoIGJldHdlZW4gdGhlc2UgImV4dGVybmFsIgorcG9ydHMgYW5kIHRoZSBkZXZpY2VzIG9uIHRoZSBKUzIwIHN5c3RlbSBpdHNlbGYuICBUaGUgTUlJIG1vbml0b3IgaXMKK29ubHkgYWJsZSB0byBkZXRlY3QgbGluayBmYWlsdXJlcyBiZXR3ZWVuIHRoZSBFU00gYW5kIHRoZSBKUzIwIHN5c3RlbS4KKworCVdoZW4gYSBwYXNzdGhyb3VnaCBtb2R1bGUgaXMgaW4gcGxhY2UsIHRoZSBNSUkgbW9uaXRvciBkb2VzCitkZXRlY3QgZmFpbHVyZXMgdG8gdGhlICJleHRlcm5hbCIgcG9ydCwgd2hpY2ggaXMgdGhlbiBkaXJlY3RseQorY29ubmVjdGVkIHRvIHRoZSBKUzIwIHN5c3RlbS4KKworT3RoZXIgY29uY2VybnMKKy0tLS0tLS0tLS0tLS0tCisKKwlUaGUgU2VyaWFsIE92ZXIgTEFOIGxpbmsgaXMgZXN0YWJsaXNoZWQgb3ZlciB0aGUgcHJpbWFyeQorZXRoZXJuZXQgKGV0aDApIG9ubHksIHRoZXJlZm9yZSwgYW55IGxvc3Mgb2YgbGluayB0byBldGgwIHdpbGwgcmVzdWx0CitpbiBsb3NpbmcgeW91ciBTb0wgY29ubmVjdGlvbi4gIEl0IHdpbGwgbm90IGZhaWwgb3ZlciB3aXRoIG90aGVyCituZXR3b3JrIHRyYWZmaWMuCisKKwlJdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGRpc2FibGUgc3Bhbm5pbmcgdHJlZSBvbiB0aGUgc3dpdGNoCisoZWl0aGVyIHRoZSBpbnRlcm5hbCBFdGhlcm5ldCBTd2l0Y2ggTW9kdWxlLCBvciBhbiBleHRlcm5hbCBzd2l0Y2gpIHRvCithdm9pZCBmYWlsLW92ZXIgZGVsYXlzIGlzc3VlcyB3aGVuIHVzaW5nIGJvbmRpbmcuCisKKwkKKzE0LiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuICBJcyBpdCBTTVAgc2FmZT8KKworCVllcy4gVGhlIG9sZCAyLjAueHggY2hhbm5lbCBib25kaW5nIHBhdGNoIHdhcyBub3QgU01QIHNhZmUuCitUaGUgbmV3IGRyaXZlciB3YXMgZGVzaWduZWQgdG8gYmUgU01QIHNhZmUgZnJvbSB0aGUgc3RhcnQuCisKKzIuICBXaGF0IHR5cGUgb2YgY2FyZHMgd2lsbCB3b3JrIHdpdGggaXQ/CisKKwlBbnkgRXRoZXJuZXQgdHlwZSBjYXJkcyAoeW91IGNhbiBldmVuIG1peCBjYXJkcyAtIGEgSW50ZWwKK0V0aGVyRXhwcmVzcyBQUk8vMTAwIGFuZCBhIDNjb20gM2M5MDViLCBmb3IgZXhhbXBsZSkuICBUaGV5IG5lZWQgbm90CitiZSBvZiB0aGUgc2FtZSBzcGVlZC4KKworMy4gIEhvdyBtYW55IGJvbmRpbmcgZGV2aWNlcyBjYW4gSSBoYXZlPworCisJVGhlcmUgaXMgbm8gbGltaXQuCisKKzQuICBIb3cgbWFueSBzbGF2ZXMgY2FuIGEgYm9uZGluZyBkZXZpY2UgaGF2ZT8KKworCVRoaXMgaXMgbGltaXRlZCBvbmx5IGJ5IHRoZSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzIExpbnV4CitzdXBwb3J0cyBhbmQvb3IgdGhlIG51bWJlciBvZiBuZXR3b3JrIGNhcmRzIHlvdSBjYW4gcGxhY2UgaW4geW91cgorc3lzdGVtLgorCis1LiAgV2hhdCBoYXBwZW5zIHdoZW4gYSBzbGF2ZSBsaW5rIGRpZXM/CisKKwlJZiBsaW5rIG1vbml0b3JpbmcgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZmFpbGluZyBkZXZpY2Ugd2lsbCBiZQorZGlzYWJsZWQuICBUaGUgYWN0aXZlLWJhY2t1cCBtb2RlIHdpbGwgZmFpbCBvdmVyIHRvIGEgYmFja3VwIGxpbmssIGFuZAorb3RoZXIgbW9kZXMgd2lsbCBpZ25vcmUgdGhlIGZhaWxlZCBsaW5rLiAgVGhlIGxpbmsgd2lsbCBjb250aW51ZSB0byBiZQorbW9uaXRvcmVkLCBhbmQgc2hvdWxkIGl0IHJlY292ZXIsIGl0IHdpbGwgcmVqb2luIHRoZSBib25kIChpbiB3aGF0ZXZlcgorbWFubmVyIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgbW9kZSkuIFNlZSB0aGUgc2VjdGlvbiBvbiBIaWdoCitBdmFpbGFiaWxpdHkgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisJCisJTGluayBtb25pdG9yaW5nIGNhbiBiZSBlbmFibGVkIHZpYSBlaXRoZXIgdGhlIG1paW1vbiBvcgorYXJwX2ludGVydmFsIHBhcmFtdGVycyAoZGVzY3JpYmVkIGluIHRoZSBtb2R1bGUgcGFyYW10ZXJzIHNlY3Rpb24sCithYm92ZSkuICBJbiBnZW5lcmFsLCBtaWltb24gbW9uaXRvcnMgdGhlIGNhcnJpZXIgc3RhdGUgYXMgc2Vuc2VkIGJ5Cit0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSwgYW5kIHRoZSBhcnAgbW9uaXRvciAoYXJwX2ludGVydmFsKQorbW9uaXRvcnMgY29ubmVjdGl2aXR5IHRvIGFub3RoZXIgaG9zdCBvbiB0aGUgbG9jYWwgbmV0d29yay4KKworCUlmIG5vIGxpbmsgbW9uaXRvcmluZyBpcyBjb25maWd1cmVkLCB0aGUgYm9uZGluZyBkcml2ZXIgd2lsbAorYmUgdW5hYmxlIHRvIGRldGVjdCBsaW5rIGZhaWx1cmVzLCBhbmQgd2lsbCBhc3N1bWUgdGhhdCBhbGwgbGlua3MgYXJlCithbHdheXMgYXZhaWxhYmxlLiAgVGhpcyB3aWxsIGxpa2VseSByZXN1bHQgaW4gbG9zdCBwYWNrZXRzLCBhbmQgYQorcmVzdWx0aW5nIGRlZ3JlZGF0aW9uIG9mIHBlcmZvcm1hbmNlLiAgVGhlIHByZWNpc2UgcGVyZm9ybWFuY2UgbG9zcworZGVwZW5kcyB1cG9uIHRoZSBib25kaW5nIG1vZGUgYW5kIG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKworNi4gIENhbiBib25kaW5nIGJlIHVzZWQgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5PworCisJWWVzLiAgU2VlIHRoZSBzZWN0aW9uIG9uIEhpZ2ggQXZhaWxhYmlsaXR5IGZvciBkZXRhaWxzLgorCis3LiAgV2hpY2ggc3dpdGNoZXMvc3lzdGVtcyBkb2VzIGl0IHdvcmsgd2l0aD8KKworCVRoZSBmdWxsIGFuc3dlciB0byB0aGlzIGRlcGVuZHMgdXBvbiB0aGUgZGVzaXJlZCBtb2RlLgorCisJSW4gdGhlIGJhc2ljIGJhbGFuY2UgbW9kZXMgKGJhbGFuY2UtcnIgYW5kIGJhbGFuY2UteG9yKSwgaXQKK3dvcmtzIHdpdGggYW55IHN5c3RlbSB0aGF0IHN1cHBvcnRzIGV0aGVyY2hhbm5lbCAoYWxzbyBjYWxsZWQKK3RydW5raW5nKS4gIE1vc3QgbWFuYWdlZCBzd2l0Y2hlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGhhdmUgc3VjaAorc3VwcG9ydCwgYW5kIG1hbnkgdW5tYW5hbmdlZCBzd2l0Y2hlcyBhcyB3ZWxsLgorCisJVGhlIGFkdmFuY2VkIGJhbGFuY2UgbW9kZXMgKGJhbGFuY2UtdGxiIGFuZCBiYWxhbmNlLWFsYikgZG8KK25vdCBoYXZlIHNwZWNpYWwgc3dpdGNoIHJlcXVpcmVtZW50cywgYnV0IGRvIG5lZWQgZGV2aWNlIGRyaXZlcnMgdGhhdAorc3VwcG9ydCBzcGVjaWZpYyBmZWF0dXJlcyAoZGVzY3JpYmVkIGluIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIHVuZGVyCittb2R1bGUgcGFyYW10ZXJzLCBhYm92ZSkuCisKKwlJbiA4MDIuM2FkIG1vZGUsIGl0IHdvcmtzIHdpdGggd2l0aCBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBJRUVFCis4MDIuM2FkIER5bmFtaWMgTGluayBBZ2dyZWdhdGlvbi4gIE1vc3QgbWFuYWdlZCBhbmQgbWFueSB1bm1hbmFnZWQKK3N3aXRjaGVzIGN1cnJlbnRseSBhdmFpbGFibGUgc3VwcG9ydCA4MDIuM2FkLgorCisgICAgICAgIFRoZSBhY3RpdmUtYmFja3VwIG1vZGUgc2hvdWxkIHdvcmsgd2l0aCBhbnkgTGF5ZXItSUkgc3dpdGNoLgorCis4LiAgV2hlcmUgZG9lcyBhIGJvbmRpbmcgZGV2aWNlIGdldCBpdHMgTUFDIGFkZHJlc3MgZnJvbT8KKworCUlmIG5vdCBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgd2l0aCBpZmNvbmZpZywgdGhlIE1BQyBhZGRyZXNzIG9mCit0aGUgYm9uZGluZyBkZXZpY2UgaXMgdGFrZW4gZnJvbSBpdHMgZmlyc3Qgc2xhdmUgZGV2aWNlLiBUaGlzIE1BQworYWRkcmVzcyBpcyB0aGVuIHBhc3NlZCB0byBhbGwgZm9sbG93aW5nIHNsYXZlcyBhbmQgcmVtYWlucyBwZXJzaXN0ZW50CisoZXZlbiBpZiB0aGUgdGhlIGZpcnN0IHNsYXZlIGlzIHJlbW92ZWQpIHVudGlsIHRoZSBib25kaW5nIGRldmljZSBpcworYnJvdWdodCBkb3duIG9yIHJlY29uZmlndXJlZC4KKworCUlmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MsIHlvdSBjYW4gc2V0IGl0IHdpdGgKK2lmY29uZmlnOgorCisjIGlmY29uZmlnIGJvbmQwIGh3IGV0aGVyIDAwOjExOjIyOjMzOjQ0OjU1CisKKwlUaGUgTUFDIGFkZHJlc3MgY2FuIGJlIGFsc28gY2hhbmdlZCBieSBicmluZ2luZyBkb3duL3VwIHRoZQorZGV2aWNlIGFuZCB0aGVuIGNoYW5naW5nIGl0cyBzbGF2ZXMgKG9yIHRoZWlyIG9yZGVyKToKKworIyBpZmNvbmZpZyBib25kMCBkb3duIDsgbW9kcHJvYmUgLXIgYm9uZGluZworIyBpZmNvbmZpZyBib25kMCAuLi4uIHVwCisjIGlmZW5zbGF2ZSBib25kMCBldGguLi4KKworCVRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSB0YWtlIHRoZSBhZGRyZXNzIGZyb20gdGhlIG5leHQKK3NsYXZlIHRoYXQgaXMgYWRkZWQuCisKKwlUbyByZXN0b3JlIHlvdXIgc2xhdmVzJyBNQUMgYWRkcmVzc2VzLCB5b3UgbmVlZCB0byBkZXRhY2ggdGhlbQorZnJvbSB0aGUgYm9uZCAoYGlmZW5zbGF2ZSAtZCBib25kMCBldGgwJykuIFRoZSBib25kaW5nIGRyaXZlciB3aWxsCit0aGVuIHJlc3RvcmUgdGhlIE1BQyBhZGRyZXNzZXMgdGhhdCB0aGUgc2xhdmVzIGhhZCBiZWZvcmUgdGhleSB3ZXJlCitlbnNsYXZlZC4KKworMTUuIFJlc291cmNlcyBhbmQgTGlua3MKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIgY2FuIGJlIGZvdW5kIGluIHRoZSBsYXRlc3QKK3ZlcnNpb24gb2YgdGhlIGxpbnV4IGtlcm5lbCwgZm91bmQgb24gaHR0cDovL2tlcm5lbC5vcmcKKworRGlzY3Vzc2lvbnMgcmVnYXJkaW5nIHRoZSBib25kaW5nIGRyaXZlciB0YWtlIHBsYWNlIHByaW1hcmlseSBvbiB0aGUKK2JvbmRpbmctZGV2ZWwgbWFpbGluZyBsaXN0LCBob3N0ZWQgYXQgc291cmNlZm9yZ2UubmV0LiAgSWYgeW91IGhhdmUKK3F1ZXN0aW9ucyBvciBwcm9ibGVtcywgcG9zdCB0aGVtIHRvIHRoZSBsaXN0LgorCitib25kaW5nLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9ib25kaW5nLWRldmVsCisKK1RoZXJlIGlzIGFsc28gYSBwcm9qZWN0IHNpdGUgb24gc291cmNlZm9yZ2UuCisKK2h0dHA6Ly93d3cuc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2JvbmRpbmcKKworRG9uYWxkIEJlY2tlcidzIEV0aGVybmV0IERyaXZlcnMgYW5kIGRpYWcgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0IDoKKyAtIGh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvCisKK1lvdSB3aWxsIGFsc28gZmluZCBhIGxvdCBvZiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgRXRoZXJuZXQsIE5XYXksIE1JSSwKK2V0Yy4gYXQgd3d3LnNjeWxkLmNvbS4KKworLS0gRU5EIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWUyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnR4dApAQCAtMCwwICsxLDggQEAKK0luIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSwgeW91J2xsIG5lZWQgdGhlCit1c2Vyc3BhY2UgdG9vbHMuIFRoZXNlIHByb2dyYW1zIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBhdmFpbGFibGUKK2F0IGh0dHA6Ly9icmlkZ2Uuc291cmNlZm9yZ2UubmV0LiAgVGhlIGRvd25sb2FkIHBhZ2UgaXMKK2h0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvYnJpZGdlLgorCitJZiB5b3Ugc3RpbGwgaGF2ZSBxdWVzdGlvbnMsIGRvbid0IGhlc2l0YXRlIHRvIHBvc3QgdG8gdGhlIG1haWxpbmcgbGlzdCAKKyhtb3JlIGluZm8gaHR0cDovL2xpc3RzLm9zZGwub3JnL21haWxtYW4vbGlzdGluZm8vYnJpZGdlKS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvbXgudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvbXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNTI2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29teC50eHQKQEAgLTAsMCArMSwyNDggQEAKKworCQlDT01YIGRyaXZlcnMgZm9yIHRoZSAyLjIga2VybmVsCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieTogVGl2YWRhciBTemVtZXRoeSwgPHRpdkBpdGMuaHU+CitDdXJyZW50bHkgbWFpbnRhaW5lZCBieTogR2VyZ2VseSBNYWRhcmFzeiA8Z29yZ29AaXRjLmh1PgorCitMYXN0IGNoYW5nZTogMjEvMDYvMTk5OS4KKworSU5UUk9EVUNUSU9OCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBzb2Z0d2FyZSBkcml2ZXJzIGFuZCB0aGVpciB1c2UgZm9yIHRoZSAKK0NPTVggbGluZSBvZiBzeW5jaHJvbm91cyBzZXJpYWwgYWRhcHRlcnMgZm9yIExpbnV4IHZlcnNpb24gMi4yLjAgYW5kCithYm92ZS4KK1RoZSBjYXJkcyBhcmUgcHJvZHVjZWQgYW5kIHNvbGQgYnkgSVRDLVBybyBMdGQuIEJ1ZGFwZXN0LCBIdW5nYXJ5CitGb3IgZnVydGhlciBpbmZvIGNvbnRhY3QgPGluZm9AaXRjLmh1PiAKK29yIGh0dHA6Ly93d3cuaXRjLmh1IChtb3N0bHkgaW4gSHVuZ2FyaWFuKS4KK1RoZSBmaXJtd2FyZSBmaWxlcyBhbmQgc29mdHdhcmUgYXJlIGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5pdGMuaHUKKworQ3VycmVudGx5LCB0aGUgZHJpdmVycyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgY2FyZHMgYW5kIHByb3RvY29sczoKKworQ09NWCAoMng2NCBrYnBzIGludGVsbGlnZW50IGJvYXJkKQorQ01YICgxeDI1NiArIDF4MTI4IGticHMgaW50ZWxsaWdlbnQgYm9hcmQpCitIaUNPTVggKDJ4Mk1icHMgaW50ZWxsaWdlbnQgYm9hcmQpCitMb0NPTVggKDF4NTEyIGticHMgcGFzc2l2ZSBib2FyZCkKK01peENPTSAoMXg1MTIgb3IgMng1MTJrYnBzIHBhc3NpdmUgYm9hcmQgd2l0aCBhIGhhcmR3YXJlIHdhdGNoZG9nIGFuCisJb3B0aW9uYWwgQlJJIGludGVyZmFjZSBhbmQgb3B0aW9uYWwgZmxhc2hST00gKDEtMzJNKSkKK1NsaWNlQ09NCSgxeDJNYnBzIGNoYW5uZWxpemVkIEUxIGJvYXJkKQorUGNpQ09NCShYMjEpCisKK0F0IHRoZSBtb21lbnQgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50LCB0aGUgKENpc2NvKS1IRExDLCBMQVBCLCBTeW5jUFBQIGFuZAorRnJhbWUgUmVsYXkgKERURSwgcmZjMTI5NCBJUCBlbmNhcHN1bGF0aW9uIHdpdGggcGFydGlhbGx5IGltcGxlbWVudGVkIFE5MzNhIAorTE1JKSBwcm90b2NvbHMgYXJlIGF2YWlsYWJsZSBhcyBsaW5rLWxldmVsIHByb3RvY29sLiAKK1guMjUgc3VwcG9ydCBpcyBiZWluZyB3b3JrZWQgb24uCisKK1VTQUdFCisKK0xvYWQgdGhlIGNvbXgubyBtb2R1bGUgYW5kIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBhbmQgcHJvdG9jb2wtc3BlY2lmaWMgCittb2R1bGVzIHlvdSdsbCBuZWVkIGludG8gdGhlIHJ1bm5pbmcga2VybmVsIHVzaW5nIHRoZSBpbnNtb2QgdXRpbGl0eS4KK1RoaXMgY3JlYXRlcyB0aGUgL3Byb2MvY29teCBkaXJlY3RvcnkuCitTZWUgdGhlIGV4YW1wbGUgc2NyaXB0cyBpbiB0aGUgJ2V0YycgZGlyZWN0b3J5LgorCisvcHJvYyBJTlRFUkZBQ0UgSU5UUk8KKworVGhlIENPTVggZHJpdmVyIHNldCBoYXMgYSBuZXcgdHlwZSBvZiB1c2VyIGludGVyZmFjZSBiYXNlZCBvbiB0aGUgL3Byb2MgCitmaWxlc3lzdGVtIHdoaWNoIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGV4dGVybmFsIHVzZXItbGFuZCBzb2Z0d2FyZSBkb2luZyAKK0lPQ1RMIGNhbGxzLiAKK0VhY2ggbmV0d29yayBpbnRlcmZhY2Ugb3IgZGV2aWNlIChpLmUuIHRob3NlIG9uZXMgeW91IGNvbmZpZ3VyZSB3aXRoICdpZmNvbmZpZycKK2FuZCAncm91dGUnIGV0Yy4pIGhhcyBhIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IHVuZGVyIC9wcm9jL2NvbXguIFlvdSBjYW4KK2R5bmFtaWNhbGx5IGNyZWF0ZSBhIG5ldyBpbnRlcmZhY2UgYnkgc2F5aW5nICdta2RpciAvcHJvYy9jb214L2NvbXgwJyAob3IgeW91CitjYW4gbmFtZSBpdCB3aGF0ZXZlciB5b3Ugd2FudCB1cCB0byA4IGNoYXJhY3RlcnMgbG9uZywgY29teFtuXSBpcyBqdXN0IGEgCitjb252ZW50aW9uKS4KK0dlbmVyYWxseSB0aGUgZmlsZXMgY29udGFpbmVkIGluIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSB0ZXh0IGZpbGVzLCB3aGljaCBjYW4KK2JlIHZpZXdlZCBieSAnY2F0IGZpbGVuYW1lJyBhbmQgeW91IGNhbiB3cml0ZSBhIHN0cmluZyB0byBzdWNoIGEgZmlsZSBieQorc2F5aW5nICdlY2hvIF9zdHJpbmdfID5maWxlbmFtZScuIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBzeXNjdGwgaW50ZXJmYWNlLgorRG9uJ3QgdXNlIGEgdGV4dCBlZGl0b3IgdG8gZWRpdCB0aGVzZSBmaWxlcywgYWx3YXlzIHVzZSAnZWNobycgKG9yICdjYXQnCit3aGVyZSBhcHByb3ByaWF0ZSkuCitXaGVuIHlvdSd2ZSBjcmVhdGVkIHRoZSBjb214W25dIGRpcmVjdG9yeSwgdHdvIGZpbGVzIGFyZSBjcmVhdGVkIGF1dG9tYWdpY2FsbHkKK2luIGl0OiAnYm9hcmR0eXBlJyBhbmQgJ3Byb3RvY29sJy4gWW91IGhhdmUgdG8gZmlsbCBpbiB0aGVzZSBmaWxlcyBjb3JyZWN0bHkKK2ZvciB5b3VyIGJvYXJkIGFuZCBwcm90b2NvbCB5b3UgaW50ZW5kIHRvIHVzZSAoc2VlIHRoZSBib2FyZCBhbmQgcHJvdG9jb2wgCitkZXNjcmlwdGlvbnMgaW4gdGhpcyBmaWxlIGJlbG93IG9yIHRoZSBleGFtcGxlIHNjcmlwdHMgaW4gdGhlICdldGMnIGRpcmVjdG9yeSkuCitBZnRlciBmaWxsaW5nIGluIHRoZXNlIGZpbGVzLCBvdGhlciBmaWxlcyB3aWxsIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGZvciAKK3NldHRpbmcgdGhlIHZhcmlvdXMgaGFyZHdhcmUtIGFuZCBwcm90b2NvbC1yZWxhdGVkIGluZm9ybWF0aW9ucyAoZm9yIGV4YW1wbGUKK2lycSBhbmQgaW8gYWRkcmVzc2VzLCBrZWVwYWxpdmUgdmFsdWVzIGV0Yy4pIFRoZXNlIGZpbGVzIGFyZSBzZXQgdG8gZGVmYXVsdCAKK3ZhbHVlcyB1cG9uIGNyZWF0aW9uLCBzbyB5b3UgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBjaGFuZ2UgYWxsIG9mIHRoZW0uCisKK1doZW4geW91J3JlIHJlYWR5IHdpdGggZmlsbGluZyBpbiB0aGUgZmlsZXMgaW4gdGhlIGNvbXhbbl0gZGlyZWN0b3J5LCB5b3UgY2FuCitjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgbmV0d29yayBpbnRlcmZhY2Ugd2l0aCB0aGUgc3RhbmRhcmQgbmV0d29yayAKK2NvbmZpZ3VyYXRpb24gdXRpbGl0aWVzLiBJZiB5b3UncmUgdW5hYmxlIHRvIGJyaW5nIHRoZSBpbnRlcmZhY2VzIHVwLCBsb29rIHVwCit0aGUgdmFyaW91cyBrZXJuZWwgbG9nIGZpbGVzIG9uIHlvdXIgc3lzdGVtLCBhbmQgY29uc3VsdCB0aGUgbWVzc2FnZXMgZm9yCithIHByb2JhYmxlIHJlYXNvbi4KKworRVhBTVBMRQorCitUbyBjcmVhdGUgdGhlIGludGVyZmFjZSAnY29teDAnIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGFubmVsIG9mIGEgQ09NWCBjYXJkOgorCitpbnNtb2QgY29teCAKKyMgaW5zbW9kIGNvbXgtaHctY29teCA7IGluc21vZCBjb214LXByb3RvLXBwcCAgKHRoZXNlIGFyZSB1c3VhbGx5CithdXRvbG9hZGVkIGlmIHlvdSB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgbG9hZGVyKQorCitta2RpciAvcHJvYy9jb214L2NvbXgwCitlY2hvIGNvbXggPi9wcm9jL2NvbXgvY29teDAvYm9hcmR0eXBlCitlY2hvIDB4MzYwID4vcHJvYy9jb214L2NvbXgwL2lvCQk8LSBqdW1wZXItc2VsZWN0YWJsZSBJL08gcG9ydCAKK2VjaG8gMHgwYSA+L3Byb2MvY29teC9jb214MC9pcnEJCTwtIGp1bXBlci1zZWxlY3RhYmxlIElSUSBsaW5lCitlY2hvIDB4ZDAwMCA+L3Byb2MvY29teC9jb214MC9tZW1hZGRyCTwtIHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBtZW1vcnkKKwkJCQkJICAgYWRkcmVzcy4gQ09NWCB1c2VzIDY0IEtCLCBhbmQgdGhpcworCQkJCQkgICBjYW4gYmU6IDB4YTAwMCwgMHhiMDAwLCAweGMwMDAsIAorCQkJCQkgICAweGQwMDAsIDB4ZTAwMC4gQXZvaWQgY29uZmxpY3RzCisJCQkJCSAgIHdpdGggb3RoZXIgaGFyZHdhcmUuCitjYXQgPC9ldGMvc2lvbDEucm9tID4vcHJvYy9jb214L2NvbXgwL2Zpcm13YXJlIDwtIHRoZSBmaXJtd2FyZSBmb3IgdGhlIGNhcmQKK2VjaG8gSERMQyA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAk8LSB0aGUgZGF0YS1saW5rIHByb3RvY29sCitlY2hvIDEwID4vcHJvYy9jb214L2NvbXgwL2tlZXBhbGl2ZQk8LSB0aGUga2VlcGFsaXZlIGZvciB0aGUgcHJvdG9jb2wKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NSA8LQorCQkJCQkgICBmaW5hbGx5IGNvbmZpZ3VyZSBpdCB3aXRoIGlmY29uZmlnCitDaGVjayBpdHMgc3RhdHVzOgorY2F0IC9wcm9jL2NvbXgvY29teDAvc3RhdHVzCisKK0lmIHlvdSB3YW50IHRvIHVzZSB0aGUgc2Vjb25kIGNoYW5uZWwgb2YgdGhpcyBib2FyZDoKKworbWtkaXIgL3Byb2MvY29teC9jb214MQorZWNobyBjb214ID4vcHJvYy9jb214L2NvbXgxL2JvYXJkdHlwZQorZWNobyAweDM2MCA+L3Byb2MvY29teC9jb214MS9pbwkKK2VjaG8gMTAgPi9wcm9jL2NvbXgvY29teDEvaXJxCQkKK2VjaG8gMHhkMDAwID4vcHJvYy9jb214L2NvbXgxL21lbWFkZHIKK2VjaG8gMSA+L3Byb2MvY29teC9jb214MS9jaGFubmVsCTwtIGNoYW5uZWxzIGFyZSBudW1iZXJlZCAKKwkJCQkJICAgYXMgMCAoZGVmYXVsdCkgYW5kIDEKKworTm93LCBjaGVjayBpZiB0aGUgZHJpdmVyIHJlY29nbml6ZWQgdGhhdCB5b3UncmUgZ29pbmcgdG8gdXNlIHRoZSBvdGhlcgorY2hhbm5lbCBvZiB0aGUgc2FtZSBhZGFwdGVyOgorCitjYXQgL3Byb2MvY29teC9jb214MC90d2luCitjb214MQorY2F0IC9wcm9jL2NvbXgvY29teDEvdHdpbgorY29teDAKKworWW91IGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgZmlybXdhcmUgdHdpY2UsIGlmIHlvdSB1c2UgYm90aCBjaGFubmVscyBvZgorYW4gYWRhcHRlciwganVzdCB3cml0ZSBpdCBpbnRvIHRoZSBjaGFubmVsIDAncyAvcHJvYyBmaXJtd2FyZSBmaWxlLgorCitEZWZhdWx0IHZhbHVlczogaW8gMHgzNjAgZm9yIENPTVgsIDB4MzIwIChISUNPTVgpLCBpcnEgMTAsIG1lbWFkZHIgMHhkMDAwMAorCitUSEUgTE9DT01YIEhBUkRXQVJFIERSSVZFUgorCitUaGUgTG9DT01YIGRyaXZlciBkb2Vzbid0IHJlcXVpcmUgZmlybXdhcmUsIGFuZCBpdCBkb2Vzbid0IHVzZSBtZW1vcnkgZWl0aGVyLAorYnV0IGl0IHVzZXMgRE1BIGNoYW5uZWxzIDEgYW5kIDMuIFlvdSBjYW4gc2V0IHRoZSBjbG9jayByYXRlIChpZiBlbmFibGVkIGJ5CitqdW1wZXJzIG9uIHRoZSBib2FyZCkgYnkgd3JpdGluZyB0aGUga2JwcyB2YWx1ZSBpbnRvIHRoZSBmaWxlIG5hbWVkICdjbG9jaycuCitTZXQgaXQgdG8gJ2V4dGVybmFsJyAoaXQgaXMgdGhlIGRlZmF1bHQpIGlmIHlvdSBoYXZlIGV4dGVybmFsIGNsb2NrIHNvdXJjZS4KKworKE5vdGU6IGN1cnJlbnRseSB0aGUgTG9DT01YIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBpbnRlcm5hbCBjbG9jaykKKworVEhFIENPTVgsIENNWCBBTkQgSElDT01YIERSSVZFUlMKKworT24gdGhlIEhJQ09NWCwgQ09NWCBhbmQgQ01YLCB5b3UgaGF2ZSB0byBsb2FkIHRoZSBmaXJtd2FyZSAoaXQgaXMgZGlmZmVyZW50IGZvcgordGhlIHRocmVlIGNhcmRzISkuIEFsbCB0aGVzZSBhZGFwdGVycyBjYW4gc2hhcmUgdGhlIHNhbWUgbWVtb3J5CithZGRyZXNzICh3ZSB1c3VhbGx5IHVzZSAweGQwMDAwKS4gT24gdGhlIENNWCB5b3UgY2FuIHNldCB0aGUgaW50ZXJuYWwKK2Nsb2NrIHJhdGUgKGlmIGVuYWJsZWQgYnkganVtcGVycyBvbiB0aGUgc21hbGwgYWRhcHRlciBib2FyZHMpIGJ5IHdyaXRpbmcKK3RoZSBrYnBzIHZhbHVlIGludG8gdGhlICdjbG9jaycgZmlsZS4gWW91IGhhdmUgdG8gZG8gdGhpcyBiZWZvcmUgaW5pdGlhbGl6aW5nCit0aGUgY2FyZC4gSWYgeW91IHVzZSBib3RoIEhJQ09NWCBhbmQgQ01YL0NPTVggY2FyZHMsIGluaXRpYWxpemUgdGhlIEhJQ09NWAorZmlyc3QuIFRoZSBJL08gYWRkcmVzcyBvZiB0aGUgSElDT01YIGJvYXJkIGlzIG5vdCBjb25maWd1cmFibGUgYnkgYW55CittZXRob2QgYXZhaWxhYmxlIHRvIHRoZSB1c2VyOiBpdCBpcyBoYXJkd2lyZWQgdG8gMHgzMjAsIGFuZCBpZiB5b3UgaGF2ZSB0byAKK2NoYW5nZSBpdCwgY29uc3VsdCBJVEMtUHJvIEx0ZC4KKworVEhFIE1JWENPTSBEUklWRVIKKworVGhlIE1peENPTSBib2FyZCBkb2Vzbid0IHJlcXVpcmUgZmlybXdhcmUsIHRoZSBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGgKK2l0IHRocm91Z2ggSS9PIHBvcnRzLiBZb3UgY2FuIGhhdmUgdGhyZWUgb2YgdGhlc2UgY2FyZHMgaW4gb25lIG1hY2hpbmUuCisKK1RIRSBTTElDRUNPTSBEUklWRVIKKworVGhlIFNsaWNlQ09NIGJvYXJkIGRvZXNuJ3QgcmVxdWlyZSBmaXJtd2FyZS4gWW91IGNhbiBoYXZlIDQgb2YgdGhlc2UgY2FyZHMKK2luIG9uZSBtYWNoaW5lLiBUaGUgZHJpdmVyIGRvZXNuJ3QgKHlldCkgc3VwcG9ydCBzaGFyZWQgaW50ZXJydXB0cywgc28KK3lvdSB3aWxsIG5lZWQgYSBzZXBhcmF0ZSBJUlEgbGluZSBmb3IgZXZlcnkgYm9hcmQuCitSZWFkIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQgZm9yIGhlbHAgb24gY29uZmlndXJpbmcKK3RoaXMgYWRhcHRlci4KKworVEhFIEhETEMvUFBQIExJTkUgUFJPVE9DT0wgRFJJVkVSCisKK1RoZSBIRExDL1N5bmNQUFAgbGluZSBwcm90b2NvbCBkcml2ZXIgdXNlcyB0aGUga2VybmVsJ3MgYnVpbHQtaW4gc3luY3BwcAorZHJpdmVyIChzeW5jcHBwLm8pLiBZb3UgZG9uJ3QgaGF2ZSB0byBtYW51YWxseSBzZWxlY3Qgc3luY3BwcC5vIHdoZW4gYnVpbGRpbmcKK3RoZSBrZXJuZWwsIHRoZSBkZXBlbmRlbmNpZXMgY29tcGlsZSBpdCBpbiBhdXRvbWF0aWNhbGx5LgorCisKKworCitFWEFNUExFCisoc2V0dGluZyB1cCBodyBwYXJhbWV0ZXJzLCBzZWUgYWJvdmUpCisKKyMgdXNpbmcgSERMQzoKK2VjaG8gaGRsYyA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAorZWNobyAxMCA+L3Byb2MvY29teC9jb214MC9rZWVwYWxpdmUJPC0gbm90IG5lY2Vzc2FyeSwgMTAgaXMgdGhlIGRlZmF1bHQKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NQorCisoc2V0dGluZyB1cCBodyBwYXJhbWV0ZXJzLCBzZWUgYWJvdmUpCisKKyMgdXNpbmcgUFBQOgorZWNobyBwcHAgPi9wcm9jL2NvbXgvY29teDAvcHJvdG9jb2wKK2lmY29uZmlnIGNvbXgwIHVwCitpZmNvbmZpZyBjb214MCAxLjIuMy40IHBvaW50b3BvaW50IDUuNi43LjggbmV0bWFzayAyNTUuMjU1LjI1NS4yNTUKKworCitUSEUgTEFQQiBMSU5FIFBST1RPQ09MIERSSVZFUgorCitGb3IgdGhpcywgeW91J2xsIG5lZWQgdG8gY29uZmlndXJlIExBUEIgc3VwcG9ydCAoU2VlICdMQVBCIERhdGEgTGluayBEcml2ZXInIGluCisnTmV0d29yayBvcHRpb25zJyBzZWN0aW9uKSBpbnRvIHlvdXIga2VybmVsICh0aGFua3MgdG8gSm9uYXRoYW4gTmF5bG9yIGZvciBoaXMgCitleGNlbGxlbnQgaW1wbGVtZW50YXRpb24pLiAKK2NvbXgtcHJvdG8tbGFwYi5vIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmlsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeQorKHRoZSBkZWZhdWx0IHZhbHVlcyBpbiBwYXJlbnMpOiB0MSAoNSksIHQyICgxKSwgbjIgKDIwKSwgbW9kZSAoRFRFLCBTVEQpIGFuZAord2luZG93ICg3KS4gQWdyZWUgd2l0aCB0aGUgYWRtaW5pc3RyYXRvciBvZiB5b3VyIHBlZXIgcm91dGVyIG9uIHRoZXNlCitzZXR0aW5ncyAobW9zdCBwZW9wbGUgdXNlIGRlZmF1bHRzLCBidXQgeW91IGhhdmUgdG8ga25vdyBpZiB5b3UgYXJlIERURSBvcgorRENFKS4KKworRVhBTVBMRQorCisoc2V0dGluZyB1cCBodyBwYXJhbWV0ZXJzLCBzZWUgYWJvdmUpCitlY2hvIGxhcGIgPi9wcm9jL2NvbXgvY29teDAvcHJvdG9jb2wKK2VjaG8gZGNlID4vcHJvYy9jb214L2NvbXgwL21vZGUJCTwtIERDRSBpbnRlcmZhY2UgaW4gdGhpcyBleGFtcGxlCitpZmNvbmZpZyBjb214MCAxLjIuMy40IHBvaW50b3BvaW50IDUuNi43LjggbmV0bWFzayAyNTUuMjU1LjI1NS4yNTUKKworCitUSEUgRlJBTUUgUkVMQVkgUFJPVE9DT0wgRFJJVkVSCisKK1lvdSBET04nVCBuZWVkIGFueSBvdGhlciBmcmFtZSByZWxheSByZWxhdGVkIG1vZHVsZXMgZnJvbSB0aGUga2VybmVsIHRvIHVzZQorQ09NWC1GcmFtZSBSZWxheS4gVGhpcyBwcm90b2NvbCBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhlIG90aGVycywgCitiZWNhdXNlIGl0IGFsbG93cyB0byB1c2UgJ3N1YmludGVyZmFjZXMnIG9yIERMQ0lzIHdpdGhpbiBvbmUgcGh5c2ljYWwgZGV2aWNlLgorRmlyc3QgeW91IGhhdmUgdG8gY3JlYXRlIHRoZSAnbWFzdGVyJyBkZXZpY2UgKHRoZSBhY3R1YWwgcGh5c2ljYWwgaW50ZXJmYWNlKQorYXMgeW91IHdvdWxkIGRvIGZvciBvdGhlciBwcm90b2NvbHMuIFNwZWNpZnkgJ2ZyYWQnIGFzIHByb3RvY29sIHR5cGUuCitOb3cgeW91IGNhbiBicmluZyB0aGlzIGludGVyZmFjZSB1cCBieSBzYXlpbmcgJ2lmY29uZmlnIGNvbXgwIHVwJyAob3Igd2hhdGV2ZXIKK3lvdSd2ZSBuYW1lZCB0aGUgaW50ZXJmYWNlKS4gRG8gbm90IGFzc2lnbiBhbnkgSVAgYWRkcmVzcyB0byB0aGlzIGludGVyZmFjZQorYW5kIGRvIG5vdCBzZXQgYW55IHJvdXRlcyB0aHJvdWdoIGl0LgorVGhlbiwgc2V0IHVwIHlvdXIgRExDSXMgdGhlIGZvbGxvd2luZyB3YXk6IGNyZWF0ZSBhIGNvbXggaW50ZXJmYWNlIGZvciBlYWNoCitETENJIHlvdSBpbnRlbmQgdG8gdXNlICh3aXRoIG1rZGlyKSwgYW5kIHdyaXRlICdkbGNpJyB0byB0aGUgJ2JvYXJkdHlwZScgZmlsZSwgCithbmQgJ2lldGYtaXAnIHRvIHRoZSAncHJvdG9jb2wnIGZpbGUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIAorZW5jYXBzdWxhdGlvbiB0eXBlIGlzIHRoaXMgKGFsc28gY2FsbGVkIGFzIFJGQzEyOTQvMTQ5MCBJUCBlbmNhcHN1bGF0aW9uKS4KK1dyaXRlIHRoZSBETENJIG51bWJlciB0byB0aGUgJ2RsY2knIGZpbGUsIGFuZCB3cml0ZSB0aGUgbmFtZSBvZiB0aGUgcGh5c2ljYWwKK0NPTVggZGV2aWNlIHRvIHRoZSBmaWxlIGNhbGxlZCAnbWFzdGVyJy4gCitOb3cgeW91IGNhbiBhc3NpZ24gYW4gSVAgYWRkcmVzcyB0byB0aGlzIGludGVyZmFjZSBhbmQgc2V0IHJvdXRlcyB1c2luZyBpdC4KK1NlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBmdXJ0aGVyIGluZm8gYW5kIGV4YW1wbGUgY29uZmlnIHNjcmlwdC4KK05vdGVzOiB0aGlzIGRyaXZlciBpbXBsZW1lbnRzIGEgRFRFIGludGVyZmFjZSB3aXRoIHBhcnRpYWxseSBpbXBsZW1lbnRlZAorUTkzM2EgTE1JLgorWW91IGNhbiBmaW5kIGFuIGV4dGVuc2l2ZWx5IGNvbW1lbnRlZCBleGFtcGxlIGluIHRoZSAnZXRjJyBkaXJlY3RvcnkuCisKK0ZVUlRIRVIgL3Byb2MgRklMRVMKKworYm9hcmR0eXBlOgorVHlwZSBvZiB0aGUgaGFyZHdhcmUuIFZhbGlkIHZhbHVlcyBhcmU6CisgJ2NvbXgnLCAnaGljb214JywgJ2xvY29teCcsICdjbXgnLCAnc2xpY2Vjb20nLgorCitwcm90b2NvbDoKK0RhdGEtbGluayBwcm90b2NvbCBvbiB0aGlzIGNoYW5uZWwuIENhbiBiZTogSERMQywgTEFQQiwgUFBQLCBGUkFECisKK3N0YXR1czoKK1lvdSBjYW4gcmVhZCB0aGUgY2hhbm5lbCdzIGFjdHVhbCBzdGF0dXMgZnJvbSB0aGUgJ3N0YXR1cycgZmlsZSwgZm9yIGV4YW1wbGUKKydjYXQgL3Byb2MvY29teC9jb214My9zdGF0dXMnLgorCitsaW5ldXBfZGVsYXk6CitJbnRlcnByZXRlZCBpbiBzZWNvbmRzIChkZWZhdWx0IGlzIDEpLiBVc2VkIHRvIGF2b2lkIGxpbmUgaml0dGVyOiB0aGUgc3lzdGVtCit3aWxsIGNvbnNpZGVyIHRoZSBsaW5lIHN0YXR1cyAnVVAnIG9ubHkgaWYgaXQgaXMgdXAgZm9yIGF0IGxlYXN0IHRoaXMgbnVtYmVyCitvZiBzZWNvbmRzLgorCitkZWJ1ZzogCitZb3UgY2FuIHNldCB2YXJpb3VzIGRlYnVnIG9wdGlvbnMgdGhyb3VnaCB0aGlzIGZpbGUuIFZhbGlkIG9wdGlvbnMgYXJlOgorJ2NvbXhfZXZlbnRzJywgJ2NvbXhfdHgnLCAnY29teF9yeCcsICdod19ldmVudHMnLCAnaHdfdHgnLCAnaHdfcngnLgorWW91IGNhbiBlbmFibGUgYSBkZWJ1ZyBvcHRpb25zIGJ5IHdyaXRpbmcgaXRzIG5hbWUgcHJlcGVuZGVkIGJ5IGEgJysnIGludG8KK3RoZSBkZWJ1ZyBmaWxlLCBmb3IgZXhhbXBsZSAnZWNobyArY29teF9yeCA+Y29teDAvZGVidWcnLiAKK0Rpc2FibGluZyBhbiBvcHRpb24gaGFwcGVucyBzaW1pbGFybHksIHVzZSB0aGUgJy0nIHByZWZpeCAKKyhlLmcuICdlY2hvIC1od19yeCA+ZGVidWcnKS4KK0RlYnVnIHJlc3VsdHMgY2FuIGJlIHJlYWQgZnJvbSB0aGUgZGVidWcgZmlsZSwgZm9yIGV4YW1wbGU6IAordGFpbCAtZiAvcHJvYy9jb214L2NvbXgyL2RlYnVnCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvcHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NvcHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzQ0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29wcy50eHQKQEAgLTAsMCArMSw2MyBAQAorVGV4dCBGaWxlIGZvciB0aGUgQ09QUyBMb2NhbFRhbGsgTGludXggZHJpdmVyIChjb3BzLmMpLgorCUJ5IEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CisKK1RoaXMgZHJpdmVyIGhhcyB0d28gbW9kZXMgYW5kIHRoZXkgYXJlOiBEYXluYSBtb2RlIGFuZCBUYW5nZW50IG1vZGUuCitFYWNoIG1vZGUgY29ycmVzcG9uZHMgd2l0aCB0aGUgdHlwZSBvZiBjYXJkLiBJdCBoYXMgYmVlbiBmb3VuZAordGhhdCB0aGVyZSBhcmUgMiBtYWluIHR5cGVzIG9mIGNhcmRzIGFuZCBhbGwgb3RoZXIgY2FyZHMgYXJlCit0aGUgc2FtZSBhbmQganVzdCBoYXZlIGRpZmZlcmVudCBuYW1lcyBvciBvbmx5IGhhdmUgbWlub3IgZGlmZmVyZW5jZXMKK3N1Y2ggYXMgbW9yZSBJTyBwb3J0cy4gQXMgdGhpcyBkcml2ZXIgaXMgdGVzdGVkIGl0IHdpbGwKK2JlY29tZSBtb3JlIGNsZWFyIGV4YWN0bHkgd2hhdCBjYXJkcyBhcmUgc3VwcG9ydGVkLiAKKworUmlnaHQgbm93IHRoZXNlIGNhcmRzIGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhlIENPUFMgZHJpdmVyLiBUaGUKK0xULTIwMCBjYXJkcyB3b3JrIGluIGEgc29tZXdoYXQgbW9yZSBsaW1pdGVkIGNhcGFjaXR5IHRoYW4gdGhlCitETDIwMCBjYXJkcywgd2hpY2ggd29yayB2ZXJ5IHdlbGwgYW5kIGFyZSBpbiB1c2UgYnkgbWFueSBwZW9wbGUuCisKK1RBTkdFTlQgZHJpdmVyIG1vZGU6CisJVGFuZ2VudCBBVEItSUksIE5vdmVsbCBOTC0xMDAwLCBEYXlzdGFyIERpZ2l0YWwgTFQtMjAwCitEQVlOQSBkcml2ZXIgbW9kZToKKwlEYXluYSBETDIwMDAvRGF5bmFUYWxrIFBDIChIYWxmIExlbmd0aCksIENPUFMgTFQtOTUsCisJRmFyYWxsb24gUGhvbmVORVQgUEMgSUlJLCBGYXJhbGxvbiBQaG9uZU5FVCBQQyBJSQorT3RoZXIgY2FyZHMgcG9zc2libHkgc3VwcG9ydGVkIG1vZGUgdW5rbm93biB0aG91Z2g6CisJRGF5bmEgREwyMDAwIChGdWxsIGxlbmd0aCkKKworVGhlIENPUFMgZHJpdmVyIGRlZmF1bHRzIHRvIHVzaW5nIERheW5hIG1vZGUuIFRvIGNoYW5nZSB0aGUgZHJpdmVyJ3MgCittb2RlIGlmIHlvdSBidWlsdCBhIGRyaXZlciB3aXRoIGR1YWwgc3VwcG9ydCB1c2UgYm9hcmRfdHlwZT0xIG9yCitib2FyZF90eXBlPTIgZm9yIERheW5hIG9yIFRhbmdlbnQgd2l0aCBpbnNtb2QuCisKKyoqIE9wZXJhdGlvbi9sb2FkaW5nIG9mIHRoZSBkcml2ZXIuCitVc2UgbW9kcHJvYmUgbGlrZSB0aGlzOgkvc2Jpbi9tb2Rwcm9iZSBjb3BzLm8gKElPICMpIChJUlEgIykKK0lmIHlvdSBkbyBub3Qgc3BlY2lmeSBhbnkgb3B0aW9ucyB0aGUgZHJpdmVyIHdpbGwgdHJ5IGFuZCB1c2UgdGhlIElPID0gMHgyNDAsCitJUlEgPSA1LiBBcyBvZiByaWdodCBub3cgSSB3b3VsZCBvbmx5IHVzZSBJUlEgNSBmb3IgdGhlIGNhcmQsIGlmIGF1dG9wcm9iaW5nLgorCitUbyBsb2FkIG11bHRpcGxlIENPUFMgZHJpdmVyIExvY2FsdGFsayBjYXJkcyB5b3UgY2FuIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nLgorCitpbnNtb2QgY29wcyBpbz0weDI0MCBpcnE9NQoraW5zbW9kIC1vIGNvcHMyIGNvcHMgaW89MHgyNjAgaXJxPTMKKworT3IgaW4gbGlsby5jb25mIHB1dCBzb21ldGhpbmcgbGlrZSB0aGlzOgorCWFwcGVuZD0iZXRoZXI9NSwweDI0MCxsdDAgZXRoZXI9MywweDI2MCxsdDEiCisKK1RoZW4gYnJpbmcgdXAgdGhlIGludGVyZmFjZSB3aXRoIGlmY29uZmlnLiBJdCB3aWxsIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKK2x0MCAgICAgICBMaW5rIGVuY2FwOlVOU1BFQyAgSFdhZGRyIDAwLTAwLTAwLTAwLTAwLTAwLTAwLUY3LTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwCisgICAgICAgICAgaW5ldCBhZGRyOjE5Mi4xNjguMS4yICBCY2FzdDoxOTIuMTY4LjEuMjU1ICBNYXNrOjI1NS4yNTUuMjU1LjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBOT0FSUCBNVUxUSUNBU1QgIE1UVTo2MDAgIE1ldHJpYzoxCisgICAgICAgICAgUlggcGFja2V0czowIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKKyAgICAgICAgICBUWCBwYWNrZXRzOjAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowIGNvbGw6MAorCisqKiBOZXRhdGFsayBDb25maWd1cmF0aW9uCitZb3Ugd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSBhdGFsa2Qgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRvIG1ha2UKK2l0IHdvcmsgd2l0aCB0aGUgY29wcy5jIGRyaXZlci4KKworKiBGb3Igc2luZ2xlIExUYWxrIGNhcmQgdXNlLgorZHVtbXkgLXNlZWQgLXBoYXNlIDIgLW5ldCAyMDAwIC1hZGRyIDIwMDAuMTAgLXpvbmUgIjEwMzMiCitsdDAgLXNlZWQgLXBoYXNlIDEgLW5ldCAxMDAwIC1hZGRyIDEwMDAuNTAgLXpvbmUgIjEwMzMiCisKKyogRm9yIG11bHRpcGxlIGNhcmRzLCBFdGhlcm5ldCBhbmQgTG9jYWxUYWxrLgorZXRoMCAtc2VlZCAtcGhhc2UgMiAtbmV0IDMwMDAgLWFkZHIgMzAwMC4yMCAtem9uZSAiMTAzMyIKK2x0MCAtc2VlZCAtcGhhc2UgMSAtbmV0IDEwMDAgLWFkZHIgMTAwMC41MCAtem9uZSAiMTAzMyIKKworKiBGb3IgbXVsdGlwbGUgTG9jYWxUYWxrIGNhcmRzLCBhbmQgYW4gRXRoZXJuZXQgY2FyZC4KKyogT3JkZXIgc2VlbXMgdG8gbWF0dGVyIGhlcmUsIEV0aGVybmV0IGxhc3QuCitsdDAgLXNlZWQgLXBoYXNlIDEgLW5ldCAxMDAwIC1hZGRyIDEwMDAuMTAgLXpvbmUgIkxvY2FsVGFsazEiCitsdDEgLXNlZWQgLXBoYXNlIDEgLW5ldCAyMDAwIC1hZGRyIDIwMDAuMjAgLXpvbmUgIkxvY2FsVGFsazIiCitldGgwIC1zZWVkIC1waGFzZSAyIC1uZXQgMzAwMCAtYWRkciAzMDAwLjMwIC16b25lICJFdGhlclRhbGsiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OGJlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dApAQCAtMCwwICsxLDcwMyBAQAorCitOT1RFCistLS0tCisKK1RoaXMgZG9jdW1lbnQgd2FzIGNvbnRyaWJ1dGVkIGJ5IENpcnJ1cyBMb2dpYyBmb3Iga2VybmVsIDIuMi41LiAgVGhpcyB2ZXJzaW9uCitoYXMgYmVlbiB1cGRhdGVkIGZvciAyLjMuNDggYnkgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorCitDaXJydXMgbWFrZSBhIGNvcHkgb2YgdGhpcyBkcml2ZXIgYXZhaWxhYmxlIGF0IHRoZWlyIHdlYnNpdGUsIGFzCitkZXNjcmliZWQgYmVsb3cuICBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHVzZSB0aGUgZHJpdmVyIHZlcnNpb24gd2hpY2gKK2NvbWVzIHdpdGggeW91ciBMaW51eCBkaXN0cmlidXRpb24uCisKKworCitDSVJSVVMgTE9HSUMgTEFOIENTODkwMC9DUzg5MjAgRVRIRVJORVQgQURBUFRFUlMKK0xpbnV4IE5ldHdvcmsgSW50ZXJmYWNlIERyaXZlciB2ZXIuIDIuMDAgPGtlcm5lbCAyLjMuNDg+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCisKK1RBQkxFIE9GIENPTlRFTlRTCisKKzEuMCBDSVJSVVMgTE9HSUMgTEFOIENTODkwMC9DUzg5MjAgRVRIRVJORVQgQURBUFRFUlMKKyAgICAxLjEgUHJvZHVjdCBPdmVydmlldyAKKyAgICAxLjIgRHJpdmVyIERlc2NyaXB0aW9uCisJMS4yLjEgRHJpdmVyIE5hbWUKKwkxLjIuMiBGaWxlIGluIHRoZSBEcml2ZXIgUGFja2FnZQorICAgIDEuMyBTeXN0ZW0gUmVxdWlyZW1lbnRzCisgICAgMS40IExpY2Vuc2luZyBJbmZvcm1hdGlvbgorCisyLjAgQURBUFRFUiBJTlNUQUxMQVRJT04gYW5kIENPTkZJR1VSQVRJT04KKyAgICAyLjEgQ1M4OTAwLWJhc2VkIEFkYXB0ZXIgQ29uZmlndXJhdGlvbgorICAgIDIuMiBDUzg5MjAtYmFzZWQgQWRhcHRlciBDb25maWd1cmF0aW9uIAorCiszLjAgTE9BRElORyBUSEUgRFJJVkVSIEFTIEEgTU9EVUxFCisKKzQuMCBDT01QSUxJTkcgVEhFIERSSVZFUgorICAgIDQuMSBDb21waWxpbmcgdGhlIERyaXZlciBhcyBhIExvYWRhYmxlIE1vZHVsZQorICAgIDQuMiBDb21waWxpbmcgdGhlIGRyaXZlciB0byBzdXBwb3J0IG1lbW9yeSBtb2RlCisgICAgNC4zIENvbXBpbGluZyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgUnggRE1BIAorICAgIDQuNCBDb21waWxpbmcgdGhlIERyaXZlciBpbnRvIHRoZSBLZXJuZWwKKworNS4wIFRFU1RJTkcgQU5EIFRST1VCTEVTSE9PVElORworICAgIDUuMSBLbm93biBEZWZlY3RzIGFuZCBMaW1pdGF0aW9ucworICAgIDUuMiBUZXN0aW5nIHRoZSBBZGFwdGVyCisgICAgICAgIDUuMi4xIERpYWdub3N0aWMgU2VsZi1UZXN0CisgICAgICAgIDUuMi4yIERpYWdub3N0aWMgTmV0d29yayBUZXN0CisgICAgNS4zIFVzaW5nIHRoZSBBZGFwdGVyJ3MgTEVEcworICAgIDUuNCBSZXNvbHZpbmcgSS9PIENvbmZsaWN0cworCis2LjAgVEVDSE5JQ0FMIFNVUFBPUlQKKyAgICA2LjEgQ29udGFjdGluZyBDaXJydXMgTG9naWMncyBUZWNobmljYWwgU3VwcG9ydAorICAgIDYuMiBJbmZvcm1hdGlvbiBSZXF1aXJlZCBCZWZvcmUgQ29udGFjdGluZyBUZWNobmljYWwgU3VwcG9ydAorICAgIDYuMyBPYnRhaW5pbmcgdGhlIExhdGVzdCBEcml2ZXIgVmVyc2lvbgorICAgIDYuNCBDdXJyZW50IG1haW50YWluZXIKKyAgICA2LjUgS2VybmVsIGJvb3QgcGFyYW1ldGVycworCisKKzEuMCBDSVJSVVMgTE9HSUMgTEFOIENTODkwMC9DUzg5MjAgRVRIRVJORVQgQURBUFRFUlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisxLjEgUFJPRFVDVCBPVkVSVklFVworCitUaGUgQ1M4OTAwLWJhc2VkIElTQSBFdGhlcm5ldCBBZGFwdGVycyBmcm9tIENpcnJ1cyBMb2dpYyBmb2xsb3cgCitJRUVFIDgwMi4zIHN0YW5kYXJkcyBhbmQgc3VwcG9ydCBoYWxmIG9yIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBpbiBJU0EgYnVzIAorY29tcHV0ZXJzIG9uIDEwIE1icHMgRXRoZXJuZXQgbmV0d29ya3MuICBUaGUgYWRhcHRlcnMgYXJlIGRlc2lnbmVkIGZvciBvcGVyYXRpb24gCitpbiAxNi1iaXQgSVNBIG9yIEVJU0EgYnVzIGV4cGFuc2lvbiBzbG90cyBhbmQgYXJlIGF2YWlsYWJsZSBpbiAKKzEwQmFzZVQtb25seSBvciAzLW1lZGlhIGNvbmZpZ3VyYXRpb25zICgxMEJhc2VULCAxMEJhc2UyLCBhbmQgQVVJIGZvciAxMEJhc2UtNSAKK29yIGZpYmVyIG5ldHdvcmtzKS4gIAorCitDUzg5MjAtYmFzZWQgYWRhcHRlcnMgYXJlIHNpbWlsYXIgdG8gdGhlIENTODkwMC1iYXNlZCBhZGFwdGVyIHdpdGggYWRkaXRpb25hbCAKK2ZlYXR1cmVzIGZvciBQbHVnIGFuZCBQbGF5IChQblApIHN1cHBvcnQgYW5kIFdha2V1cCBGcmFtZSByZWNvZ25pdGlvbi4gIEFzIAorc3VjaCwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlcyBkaWZmZXIgc29tZXdoYXQgYmV0d2VlbiB0aGUgdHdvIHR5cGVzIG9mIAorYWRhcHRlcnMuICBSZWZlciB0byB0aGUgIkFkYXB0ZXIgQ29uZmlndXJhdGlvbiIgc2VjdGlvbiBmb3IgZGV0YWlscyBvbiAKK2NvbmZpZ3VyaW5nIGJvdGggdHlwZXMgb2YgYWRhcHRlcnMuCisKKworMS4yIERSSVZFUiBERVNDUklQVElPTgorCitUaGUgQ1M4OTAwL0NTODkyMCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciBmb3IgTGludXggc3VwcG9ydHMgdGhlIExpbnV4Cit2Mi4zLjQ4IG9yIGdyZWF0ZXIga2VybmVsLiAgSXQgY2FuIGJlIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAorb3IgbG9hZGVkIGF0IHJ1bi10aW1lIGFzIGEgZGV2aWNlIGRyaXZlciBtb2R1bGUuCisKKzEuMi4xIERyaXZlciBOYW1lOiBjczg5eDAKKworMS4yLjIgRmlsZXMgaW4gdGhlIERyaXZlciBBcmNoaXZlOgorCitUaGUgZmlsZXMgaW4gdGhlIGRyaXZlciBhdCBDaXJydXMnIHdlYnNpdGUgaW5jbHVkZToKKworICByZWFkbWUudHh0ICAgICAgICAgLSB0aGlzIGZpbGUKKyAgYnVpbGQgICAgICAgICAgICAgIC0gYmF0Y2ggZmlsZSB0byBjb21waWxlIGNzODl4MC5jLgorICBjczg5eDAuYyAgICAgICAgICAgLSBkcml2ZXIgQyBjb2RlCisgIGNzODl4MC5oICAgICAgICAgICAtIGRyaXZlciBoZWFkZXIgZmlsZQorICBjczg5eDAubyAgICAgICAgICAgLSBwcmUtY29tcGlsZWQgbW9kdWxlIChmb3IgdjIuMi41IGtlcm5lbCkKKyAgY29uZmlnL0NvbmZpZy5pbiAgIC0gc2FtcGxlIGZpbGUgdG8gaW5jbHVkZSBjczg5eDAgZHJpdmVyIGluIHRoZSBrZXJuZWwuCisgIGNvbmZpZy9NYWtlZmlsZSAgICAtIHNhbXBsZSBmaWxlIHRvIGluY2x1ZGUgY3M4OXgwIGRyaXZlciBpbiB0aGUga2VybmVsLgorICBjb25maWcvU3BhY2UuYyAgICAgLSBzYW1wbGUgZmlsZSB0byBpbmNsdWRlIGNzODl4MCBkcml2ZXIgaW4gdGhlIGtlcm5lbC4KKworCisKKzEuMyBTWVNURU0gUkVRVUlSRU1FTlRTCisKK1RoZSBmb2xsb3dpbmcgaGFyZHdhcmUgaXMgcmVxdWlyZWQ6CisKKyAgICogQ2lycnVzIExvZ2ljIExBTiAoQ1M4OTAwLzIwLWJhc2VkKSBFdGhlcm5ldCBJU0EgQWRhcHRlciAgIAorCisgICAqIElCTSBvciBJQk0tY29tcGF0aWJsZSBQQyB3aXRoOgorICAgICAqIEFuIDgwMzg2IG9yIGhpZ2hlciBwcm9jZXNzb3IKKyAgICAgKiAxNiBieXRlcyBvZiBjb250aWd1b3VzIElPIHNwYWNlIGF2YWlsYWJsZSBiZXR3ZWVuIDIxMGggLSAzNzBoCisgICAgICogT25lIGF2YWlsYWJsZSBJUlEgKDUsMTAsMTEsb3IgMTIgZm9yIHRoZSBDUzg5MDAsIDMtNyw5LTE1IGZvciBDUzg5MjApLgorCisgICAqIEFwcHJvcHJpYXRlIGNhYmxlIChhbmQgY29ubmVjdG9yIGZvciBBVUksIDEwQkFTRS0yKSBmb3IgeW91ciBuZXR3b3JrCisgICAgIHRvcG9sb2d5LgorCitUaGUgZm9sbG93aW5nIHNvZnR3YXJlIGlzIHJlcXVpcmVkOgorCisqIExJTlVYIGtlcm5lbCB2ZXJzaW9uIDIuMy40OCBvciBoaWdoZXIKKworICAgKiBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSAoRE9TLWJhc2VkKQorCisgICAqIExJTlVYIGtlcm5lbCBzb3VyY2VzIGZvciB5b3VyIGtlcm5lbCAoaWYgY29tcGlsaW5nIGludG8ga2VybmVsKQorCisgICAqIEdOVSBUb29sa2l0IChnY2MgYW5kIG1ha2UpIHYyLjYgb3IgYWJvdmUgKGlmIGNvbXBpbGluZyBpbnRvIGtlcm5lbCAKKyAgICAgb3IgYSBtb2R1bGUpICAgCisKKworCisxLjQgTElDRU5TSU5HIElORk9STUFUSU9OCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgdmVyc2lvbiAxLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciAKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgCittb3JlIGRldGFpbHMuCisKK0ZvciBhIGZ1bGwgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisKKzIuMCBBREFQVEVSIElOU1RBTExBVElPTiBhbmQgQ09ORklHVVJBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCb3RoIHRoZSBDUzg5MDAgYW5kIENTODkyMC1iYXNlZCBhZGFwdGVycyBjYW4gYmUgY29uZmlndXJlZCB1c2luZyBwYXJhbWV0ZXJzIAorc3RvcmVkIGluIGFuIG9uLWJvYXJkIEVFUFJPTS4gWW91IG11c3QgdXNlIHRoZSBET1MtYmFzZWQgQ1M4OTAwLzIwIFNldHVwIAorVXRpbGl0eSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uIGluIEVFUFJPTS4gIAorCitXaGVuIGxvYWRpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IG1hbnkgb2YgdGhlIGFkYXB0ZXIncyAKK2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBvbiB0aGUgY29tbWFuZC1saW5lIHRvIG92ZXJyaWRlIHRoZSBFRVBST00ncyBzZXR0aW5ncyAKK29yIGZvciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiB3aGVuIGFuIEVFUFJPTSBpcyBub3QgdXNlZC4gKENTODkyMC1iYXNlZCAKK2FkYXB0ZXJzIG11c3QgdXNlIGFuIEVFUFJPTS4pIFNlZSBTZWN0aW9uIDMuMCBMT0FESU5HIFRIRSBEUklWRVIgQVMgQSBNT0RVTEUuCisKK1NpbmNlIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBpcyBhIERPUy1iYXNlZCBhcHBsaWNhdGlvbiwgeW91IG11c3QgaW5zdGFsbCAKK2FuZCBjb25maWd1cmUgdGhlIGFkYXB0ZXIgaW4gYSBET1MtYmFzZWQgc3lzdGVtIHVzaW5nIHRoZSBDUzg5MDAvMjAgU2V0dXAgCitVdGlsaXR5IGJlZm9yZSBpbnN0YWxsYXRpb24gaW4gdGhlIHRhcmdldCBMSU5VWCBzeXN0ZW0uICAoTm90IHJlcXVpcmVkIGlmIAoraW5zdGFsbGluZyBhIENTODkwMC1iYXNlZCBhZGFwdGVyIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGFjY2VwdGFibGUuKQorICAgICAKKworMi4xIENTODkwMC1CQVNFRCBBREFQVEVSIENPTkZJR1VSQVRJT04KKworQ1M4OTAwLWJhc2VkIGFkYXB0ZXJzIHNoaXBwZWQgZnJvbSBDaXJydXMgTG9naWMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgCit3aXRoIHRoZSBmb2xsb3dpbmcgImRlZmF1bHQiIHNldHRpbmdzOgorCisgIE9wZXJhdGlvbiBNb2RlOiAgICAgIE1lbW9yeSBNb2RlCisgIElSUTogICAgICAgICAgICAgICAgIDEwCisgIEJhc2UgSS9PIEFkZHJlc3M6ICAgIDMwMAorICBNZW1vcnkgQmFzZSBBZGRyZXNzOiBEMDAwMAorICBPcHRpbWl6YXRpb246CSAgICAgICBET1MgQ2xpZW50CisgIFRyYW5zbWlzc2lvbiBNb2RlOiAgIEhhbGYtZHVwbGV4CisgIEJvb3RQcm9tOiAgICAgICAgICAgIE5vbmUKKyAgTWVkaWEgVHlwZToJICAgICAgIEF1dG9kZXRlY3QgKDMtbWVkaWEgY2FyZHMpIG9yIAorICAgICAgICAgICAgICAgICAgICAgICAxMEJBU0UtVCAoMTBCQVNFLVQgb25seSBhZGFwdGVyKQorCitZb3Ugc2hvdWxkIG9ubHkgY2hhbmdlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaWYgY29uZmxpY3RzIHdpdGggCithbm90aGVyIGFkYXB0ZXIgZXhpc3RzLiBUbyBjaGFuZ2UgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uLCBydW4gdGhlIAorQ1M4OTAwLzIwIFNldHVwIFV0aWxpdHkuIAorCisKKzIuMiBDUzg5MjAtQkFTRUQgQURBUFRFUiBDT05GSUdVUkFUSU9OCisKK0NTODkyMC1iYXNlZCBhZGFwdGVycyBhcmUgc2hpcHBlZCBmcm9tIENpcnJ1cyBMb2dpYyBjb25maWd1cmVkIGFzIFBsdWcKK2FuZCBQbGF5IChQblApIGVuYWJsZWQuICBIb3dldmVyLCBzaW5jZSB0aGUgY3M4OXgwIGRyaXZlciBkb2VzIE5PVAorc3VwcG9ydCBQblAsIHlvdSBtdXN0IGluc3RhbGwgdGhlIENTODkyMCBhZGFwdGVyIGluIGEgRE9TLWJhc2VkIFBDIGFuZAorcnVuIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSB0byBkaXNhYmxlIFBuUCBhbmQgY29uZmlndXJlIHRoZQorYWRhcHRlciBiZWZvcmUgaW5zdGFsbGF0aW9uIGluIHRoZSB0YXJnZXQgTGludXggc3lzdGVtLiAgRmFpbHVyZSB0byBkbwordGhpcyB3aWxsIGxlYXZlIHRoZSBhZGFwdGVyIGluYWN0aXZlIGFuZCB0aGUgZHJpdmVyIHdpbGwgYmUgdW5hYmxlIHRvCitjb21tdW5pY2F0ZSB3aXRoIHRoZSBhZGFwdGVyLiAgCisKKworICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICAgICAgICAqICAgICAgICAgICAgICAgICAgICBDUzg5MjAtQkFTRUQgQURBUFRFUlM6ICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCisgICAgICAgICogQ1M4OTIwLUJBU0VEIEFEQVBURVJTIEFSRSBQTFVHIGFuZCBQTEFZIEVOQUJMRUQgQlkgREVGQVVMVC4gICogCisgICAgICAgICogVEhFIENTODlYMCBEUklWRVIgRE9FUyBOT1QgU1VQUE9SVCBQblAuIFRIRVJFRk9SRSwgWU9VIE1VU1QgICoKKyAgICAgICAgKiBSVU4gVEhFIENTODkwMC8yMCBTRVRVUCBVVElMSVRZIFRPIERJU0FCTEUgUG5QIFNVUFBPUlQgQU5EICAgKgorICAgICAgICAqIFRPIEFDVElWQVRFIFRIRSBBREFQVEVSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisKKworMy4wIExPQURJTkcgVEhFIERSSVZFUiBBUyBBIE1PRFVMRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbG9hZGFibGUgbW9kdWxlLCB5b3UgY2FuIGxvYWQgdGhlIGRyaXZlciBtb2R1bGUKK3dpdGggdGhlICdtb2Rwcm9iZScgY29tbWFuZC4gIE1hbnkgb2YgdGhlIGFkYXB0ZXIncyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgY2FuIAorYmUgc3BlY2lmaWVkIGFzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gdGhlIGxvYWQgY29tbWFuZC4gIFRoaXMgZmFjaWxpdHkgCitwcm92aWRlcyBhIG1lYW5zIHRvIG92ZXJyaWRlIHRoZSBFRVBST00ncyBzZXR0aW5ncyBvciBmb3IgaW50ZXJmYWNlIAorY29uZmlndXJhdGlvbiB3aGVuIGFuIEVFUFJPTSBpcyBub3QgdXNlZC4KKworRXhhbXBsZToKKworICAgIGluc21vZCBjczg5eDAubyBpbz0weDIwMCBpcnE9MHhBIG1lZGlhPWF1aQorCitUaGlzIGV4YW1wbGUgbG9hZHMgdGhlIG1vZHVsZSBhbmQgY29uZmlndXJlcyB0aGUgYWRhcHRlciB0byB1c2UgYW4gSU8gcG9ydCBiYXNlCithZGRyZXNzIG9mIDIwMGgsIGludGVycnVwdCAxMCwgYW5kIHVzZSB0aGUgQVVJIG1lZGlhIGNvbm5lY3Rpb24uICBUaGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgY29tbWFuZCBsaW5lOgorCisqIGlvPSMjIyAgICAgICAgICAgICAgIC0gc3BlY2lmeSBJTyBhZGRyZXNzICgyMDBoLTM2MGgpCisqIGlycT0jIyAgICAgICAgICAgICAgIC0gc3BlY2lmeSBpbnRlcnJ1cHQgbGV2ZWwKKyogdXNlX2RtYT0xICAgICAgICAgICAgLSBFbmFibGUgRE1BCisqIGRtYT0jICAgICAgICAgICAgICAgIC0gc3BlY2lmeSBkbWEgY2hhbm5lbCAoRHJpdmVyIGlzIGNvbXBpbGVkIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBSeCBETUEgb25seSkKKyogZG1hc2l6ZT0jICgxNiBvciA2NCkgLSBETUEgc2l6ZSAxNksgb3IgNjRLLiAgRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gMTYuCisqIG1lZGlhPXJqNDUgICAgICAgICAgIC0gc3BlY2lmeSBtZWRpYSB0eXBlCisgICBvciBtZWRpYT1ibmMKKyAgIG9yIG1lZGlhPWF1aQorICAgb3IgbWVkYWk9YXV0bworKiBkdXBsZXg9ZnVsbCAgICAgICAgICAtIHNwZWNpZnkgZm9yY2VkIGhhbGYvZnVsbC9hdXRvbmVnb3RpYXRlIGR1cGxleAorICAgb3IgZHVwbGV4PWhhbGYKKyAgIG9yIGR1cGxleD1hdXRvCisqIGRlYnVnPSMgICAgICAgICAgICAgIC0gZGVidWcgbGV2ZWwgKG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlYnVnZ2luZykKKworTk9URVM6CisKK2EpIElmIGFuIEVFUFJPTSBpcyBwcmVzZW50LCBhbnkgc3BlY2lmaWVkIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIKKyAgIHdpbGwgb3ZlcnJpZGUgdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YWx1ZSBzdG9yZWQgaW4KKyAgIEVFUFJPTS4KKworYikgVGhlICJpbyIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUuICAKKworYykgVGhlIGRyaXZlcidzIGhhcmR3YXJlIHByb2JlIHJvdXRpbmUgaXMgZGVzaWduZWQgdG8gYXZvaWQKKyAgIHdyaXRpbmcgdG8gSS9PIHNwYWNlIHVudGlsIGl0IGtub3dzIHRoYXQgdGhlcmUgaXMgYSBjczg5eDAKKyAgIGNhcmQgYXQgdGhlIHdyaXR0ZW4gYWRkcmVzc2VzLiAgVGhpcyBjb3VsZCBjYXVzZSBwcm9ibGVtcworICAgd2l0aCBkZXZpY2UgcHJvYmluZy4gIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3VyLCBhZGQgb25lCisgICB0byB0aGUgYGlvPScgbW9kdWxlIHBhcmFtZXRlci4gIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UKKyAgIHRoZSBJL08gYWRkcmVzcywgYnV0IGl0IGlzIGEgZmxhZyB0byB0ZWxsIHRoZSBkcml2ZXIKKyAgIHRvcGFydGlhbGx5IGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlIGJlZm9yZSB0cnlpbmcgdG8KKyAgIGlkZW50aWZ5IHRoZSBjYXJkLiAgVGhpcyBjb3VsZCBiZSBkYW5nZXJvdXMgaWYgeW91IGFyZQorICAgbm90IHN1cmUgdGhhdCB0aGVyZSBpcyBhIGNzODl4MCBjYXJkIGF0IHRoZSBwcm92aWRlZCBhZGRyZXNzLgorCisgICBGb3IgZXhhbXBsZSwgdG8gc2NhbiBmb3IgYW4gYWRhcHRlciBsb2NhdGVkIGF0IElPIGJhc2UgMHgzMDAsCisgICBzcGVjaWZ5IGFuIElPIGFkZHJlc3Mgb2YgMHgzMDEuICAKKworZCkgVGhlICJkdXBsZXg9YXV0byIgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgQ1M4OTIwLgorCitlKSBUaGUgbWluaW11bSBjb21tYW5kLWxpbmUgY29uZmlndXJhdGlvbiByZXF1aXJlZCBpZiBhbiBFRVBST00gaXMKKyAgIG5vdCBwcmVzZW50IGlzOgorCisgICBpbyAKKyAgIGlycSAKKyAgIG1lZGlhIHR5cGUgKG5vIGF1dG9kZXRlY3QpCisKK2YpIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBDUzg5WFggZGVmYXVsdHMgKHZhbHVlcworICAgdXNlZCB3aXRoIG5vIEVFUFJPTSBvciBjb21tYW5kLWxpbmUgYXJndW1lbnQpLgorCisgICAqIERNQSBCdXJzdCA9IGVuYWJsZWQKKyAgICogSU9DSFJEWSBFbmFibGVkID0gZW5hYmxlZAorICAgKiBVc2VTQSA9IGVuYWJsZWQKKyAgICogQ1M4OTAwIGRlZmF1bHRzIHRvIGhhbGYtZHVwbGV4IGlmIG5vdCBzcGVjaWZpZWQgb24gY29tbWFuZC1saW5lCisgICAqIENTODkyMCBkZWZhdWx0cyB0byBhdXRvbmVnIGlmIG5vdCBzcGVjaWZpZWQgb24gY29tbWFuZC1saW5lCisgICAqIFVzZSByZXNldCBkZWZhdWx0cyBmb3Igb3RoZXIgY29uZmlnIHBhcmFtZXRlcnMKKyAgICogZG1hX21vZGUgPSAwCisKK2cpIFlvdSBjYW4gdXNlIGlmY29uZmlnIHRvIHNldCB0aGUgYWRhcHRlcidzIEV0aGVybmV0IGFkZHJlc3MuCisKK2gpIE1hbnkgTGludXggZGlzdHJpYnV0aW9ucyB1c2UgdGhlICdtb2Rwcm9iZScgY29tbWFuZCB0byBsb2FkCisgICBtb2R1bGVzLiAgVGhpcyBwcm9ncmFtIHVzZXMgdGhlICcvZXRjL2NvbmYubW9kdWxlcycgZmlsZSB0bworICAgZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gd2hpY2ggaXMgcGFzc2VkIHRvIGEgZHJpdmVyCisgICBtb2R1bGUgd2hlbiBpdCBpcyBsb2FkZWQuICBBbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaCBhcmUKKyAgIGRlc2NyaWJlZCBhYm92ZSBtYXkgYmUgcGxhY2VkIHdpdGhpbiAvZXRjL2NvbmYubW9kdWxlcy4KKworICAgRm9yIGV4YW1wbGU6CisKKyAgID4gY2F0IC9ldGMvY29uZi5tb2R1bGVzCisgICAuLi4KKyAgIGFsaWFzIGV0aDAgY3M4OXgwCisgICBvcHRpb25zIGNzODl4MCBpbz0weDAyMDAgZG1hPTUgdXNlX2RtYT0xCisgICAuLi4KKworICAgSW4gdGhpcyBleGFtcGxlIHdlIGFyZSB0ZWxsaW5nIHRoZSBtb2R1bGUgc3lzdGVtIHRoYXQgdGhlCisgICBldGhlcm5ldCBkcml2ZXIgZm9yIHRoaXMgbWFjaGluZSBzaG91bGQgdXNlIHRoZSBjczg5eDAgZHJpdmVyLiAgV2UKKyAgIGFyZSBhc2tpbmcgJ21vZHByb2JlJyB0byBwYXNzIHRoZSAnaW8nLCAnZG1hJyBhbmQgJ3VzZV9kbWEnCisgICBhcmd1bWVudHMgdG8gdGhlIGRyaXZlciB3aGVuIGl0IGlzIGxvYWRlZC4KKworaSkgQ2lycnVzIHJlY29tbWVuZCB0aGF0IHRoZSBjczg5eDAgdXNlIHRoZSBJU0EgRE1BIGNoYW5uZWxzIDUsIDYgb3IKKyAgIDcuICBZb3Ugd2lsbCBwcm9iYWJseSBmaW5kIHRoYXQgb3RoZXIgRE1BIGNoYW5uZWxzIHdpbGwgbm90IHdvcmsuCisKK2opIFRoZSBjczg5eDAgc3VwcG9ydHMgRE1BIGZvciByZWNlaXZpbmcgb25seS4gIERNQSBtb2RlIGlzCisgICBzaWduaWZpY2FudGx5IG1vcmUgZWZmaWNpZW50LiAgRmxvb2RpbmcgYSA0MDAgTUh6IENlbGVyb24gbWFjaGluZQorICAgd2l0aCBsYXJnZSBwaW5nIHBhY2tldHMgY29uc3VtZXMgODIlIG9mIGl0cyBDUFUgY2FwYWNpdHkgaW4gbm9uLURNQQorICAgbW9kZS4gIFdpdGggRE1BIHRoaXMgaXMgcmVkdWNlZCB0byA0NSUuCisKK2spIElmIHlvdXIgTGludXgga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIGluYnVpbHQgcGx1Zy1hbmQtcGxheQorICAgc3VwcG9ydCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNzODl4MCBjYXJkCisgICB3aXRoIHRoZSBjb21tYW5kCisKKyAgIGNhdCAvcHJvYy9pc2FwbnAKKworbCkgSWYgZHVyaW5nIERNQSBvcGVyYXRpb24geW91IGZpbmQgZXJyYXRpYyBiZWhhdmlvciBvciBuZXR3b3JrIGRhdGEKKyAgIGNvcnJ1cHRpb24geW91IHNob3VsZCB1c2UgeW91ciBQQydzIEJJT1MgdG8gc2xvdyB0aGUgRUlTQSBidXMgY2xvY2suCisKK20pIElmIHRoZSBjczg5eDAgZHJpdmVyIGlzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAorICAgKG5vbi1tb2R1bGFyKSB0aGVuIGl0cyBJL08gYWRkcmVzcyBpcyBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgYnkKKyAgIElTQSBidXMgcHJvYmluZy4gIFRoZSBJUlEgbnVtYmVyLCBtZWRpYSBvcHRpb25zLCBldGMgYXJlIGRldGVybWluZWQKKyAgIGZyb20gdGhlIGNhcmQncyBFRVBST00uCisKK24pIElmIHRoZSBjczg5eDAgZHJpdmVyIGlzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCwgRE1BCisgICBtb2RlIG1heSBiZSBzZWxlY3RlZCBieSBwcm92aWRpbmcgdGhlIGtlcm5lbCB3aXRoIGEgYm9vdCBvcHRpb24KKyAgICdjczg5eDBfZG1hPU4nIHdoZXJlICdOJyBpcyB0aGUgZGVzaXJlZCBETUEgY2hhbm5lbCBudW1iZXIgKDUsIDYgb3IgNykuCisKKyAgIEtlcm5lbCBib290IG9wdGlvbnMgbWF5IGJlIHByb3ZpZGVkIG9uIHRoZSBMSUxPIGNvbW1hbmQgbGluZToKKworCUxJTE8gYm9vdDogbGludXggY3M4OXgwX2RtYT01CisKKyAgIG9yIHRoZXkgbWF5IGJlIHBsYWNlZCBpbiAvZXRjL2xpbG8uY29uZjoKKworCWltYWdlPS9ib290L2J6SW1hZ2UtMi4zLjQ4CisJICBhcHBlbmQ9ImNzODl4MF9kbWE9NSIKKwkgIGxhYmVsPWxpbnV4CisJICByb290PS9kZXYvaGRhNQorCSAgcmVhZC1vbmx5CisKKyAgIFRoZSBETUEgUnggYnVmZmVyIHNpemUgaXMgaGFyZHdpcmVkIHRvIDE2IGtieXRlcyBpbiB0aGlzIG1vZGUuCisgICAoNjRrIG1vZGUgaXMgbm90IGF2YWlsYWJsZSkuCisKKworNC4wIENPTVBJTElORyBUSEUgRFJJVkVSCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjczg5eDAgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgb3IgY29tcGlsZWQgaW50bworYSBsb2FkYWJsZSBkZXZpY2UgZHJpdmVyIG1vZHVsZS4KKworCis0LjEgQ09NUElMSU5HIFRIRSBEUklWRVIgQVMgQSBMT0FEQUJMRSBNT0RVTEUKKworVG8gY29tcGlsZSB0aGUgZHJpdmVyIGludG8gYSBsb2FkYWJsZSBtb2R1bGUsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgCisoc2luZ2xlIGNvbW1hbmQgbGluZSwgd2l0aG91dCBxdW90ZXMpOgorCisiZ2NjIC1EX19LRVJORUxfXyAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgLUkvdXNyL3NyYy9saW51eC9uZXQvaW5ldCAtV2FsbCAKKy1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETU9EVUxFIC1EQ09ORklHX01PRFZFUlNJT05TIAorLWMgY3M4OXgwLmMiCisKKzQuMiBDT01QSUxJTkcgVEhFIERSSVZFUiBUTyBTVVBQT1JUIE1FTU9SWSBNT0RFCisKK1N1cHBvcnQgZm9yIG1lbW9yeSBtb2RlIHdhcyBub3QgY2FycmllZCBvdmVyIGludG8gdGhlIDIuMyBzZXJpZXMga2VybmVscy4KKworNC4zIENPTVBJTElORyBUSEUgRFJJVkVSIFRPIFNVUFBPUlQgUnggRE1BCisKK1RoZSBjb21waWxlLXRpbWUgb3B0aW9uYWxpdHkgZm9yIERNQSB3YXMgcmVtb3ZlZCBpbiB0aGUgMi4zIGtlcm5lbAorc2VyaWVzLiAgRE1BIHN1cHBvcnQgaXMgbm93IHVuY29uZGl0aW9uYWxseSBwYXJ0IG9mIHRoZSBkcml2ZXIuICBJdCBpcworZW5hYmxlZCBieSB0aGUgJ3VzZV9kbWE9MScgbW9kdWxlIG9wdGlvbi4KKworNC40IENPTVBJTElORyBUSEUgRFJJVkVSIElOVE8gVEhFIEtFUk5FTAorCitJZiB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGhhcyBzdXBwb3J0IGZvciB0aGUgY3M4OXgwIGRyaXZlcgordGhlbiBzaW1wbHkgY29weSB0aGUgc291cmNlIGZpbGUgdG8gdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0CitkaXJlY3RvcnkgdG8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgb25lcyBhbmQgcnVuIHRoZSBtYWtlIHV0aWxpdHkgdG8KK3JlYnVpbGQgdGhlIGtlcm5lbC4gIFNlZSBTdGVwIDMgZm9yIHJlYnVpbGRpbmcgdGhlIGtlcm5lbC4KKworSWYgeW91ciBMaW51eCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjczg5eDAgZHJpdmVyLCB5b3UgbmVlZCB0byBlZGl0IHRocmVlIAorY29uZmlndXJhdGlvbiBmaWxlcywgY29weSB0aGUgc291cmNlIGZpbGUgdG8gdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0CitkaXJlY3RvcnksIGFuZCB0aGVuIHJ1biB0aGUgbWFrZSB1dGlsaXR5IHRvIHJlYnVpbGQgdGhlIGtlcm5lbC4KKworMS4gRWRpdCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgYnkgYWRkaW5nIHRoZSBzdGF0ZW1lbnRzIGFzCitpbmRpY2F0ZWQuICAoV2hlbiBwb3NzaWJsZSwgdHJ5IHRvIGxvY2F0ZSB0aGUgYWRkZWQgdGV4dCB0byB0aGUgc2VjdGlvbiBvZiB0aGUKK2ZpbGUgY29udGFpbmluZyBzaW1pbGFyIHN0YXRlbWVudHMpLgorCisKK2EuKSBJbiAvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC9Db25maWcuaW4sIGFkZDoKKwordHJpc3RhdGUgJ0NTODl4MCBzdXBwb3J0JyBDT05GSUdfQ1M4OXgwCisKK0V4YW1wbGU6CisKKyAgICAgaWYgWyAiJENPTkZJR19FWFBFUklNRU5UQUwiID0gInkiIF07IHRoZW4KKyAgICAgICB0cmlzdGF0ZSAnSUNMIEV0aGVyVGVhbSAxNmkvMzIgc3VwcG9ydCcgQ09ORklHX0VUSDE2SQorICAgICBmaQorCisgICAgIHRyaXN0YXRlICdDUzg5eDAgc3VwcG9ydCcgQ09ORklHX0NTODl4MAorCisgICAgIHRyaXN0YXRlICdORTIwMDAvTkUxMDAwIHN1cHBvcnQnIENPTkZJR19ORTIwMDAKKyAgICAgaWYgWyAiJENPTkZJR19FWFBFUklNRU5UQUwiID0gInkiIF07IHRoZW4KKyAgICAgICB0cmlzdGF0ZSAnTkk1MjEwIHN1cHBvcnQnIENPTkZJR19OSTUyCisKKworYi4pIEluIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L01ha2VmaWxlLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lczogCisKK2lmZXEgKCQoQ09ORklHX0NTODl4MCkseSkKK0xfT0JKUyArPSBjczg5eDAubworZWxzZQorICBpZmVxICgkKENPTkZJR19DUzg5eDApLG0pCisgIE1fT0JKUyArPSBjczg5eDAubworICBlbmRpZgorZW5kaWYKKworCitjLikgSW4gL2xpbnV4L2RyaXZlcnMvbmV0L1NwYWNlLmMgZmlsZSwgYWRkIHRoZSBsaW5lOgorCitleHRlcm4gaW50IGNzODl4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisKK0V4YW1wbGU6CisKKyBleHRlcm4gaW50IHVsdHJhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgZXh0ZXJuIGludCB3ZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworIGV4dGVybiBpbnQgZWwyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyBleHRlcm4gaW50IGNzODl4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisgZXh0ZXJuIGludCBuZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworIGV4dGVybiBpbnQgaHBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKyBleHRlcm4gaW50IGhwX3BsdXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworCitBbHNvIGFkZDoKKworICNpZmRlZiBDT05GSUdfQ1M4OXgwCisgCXsgY3M4OXgwX3Byb2JlLDAgfSwKKyAjZW5kaWYKKworCisyLikgQ29weSB0aGUgZHJpdmVyIHNvdXJjZSBmaWxlcyAoY3M4OXgwLmMgYW5kIGNzODl4MC5oKSAKK2ludG8gdGhlIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0IGRpcmVjdG9yeS4KKworCiszLikgR28gdG8gL3Vzci9zcmMvbGludXggZGlyZWN0b3J5IGFuZCBydW4gJ21ha2UgY29uZmlnJyBmb2xsb3dlZCBieSAnbWFrZScgCisob3IgbWFrZSBiekltYWdlKSB0byByZWJ1aWxkIHRoZSBrZXJuZWwuIAorCis0LikgVXNlIHRoZSBET1MgJ3NldHVwJyB1dGlsaXR5IHRvIGRpc2FibGUgcGx1ZyBhbmQgcGxheSBvbiB0aGUgTklDLgorCisKKzUuMCBURVNUSU5HIEFORCBUUk9VQkxFU0hPT1RJTkcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNS4xIEtOT1dOIERFRkVDVFMgYW5kIExJTUlUQVRJT05TCisKK1JlZmVyIHRvIHRoZSBSRUxFQVNFLlRYVCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhpcyBhcmNoaXZlIGZvciBhIGxpc3Qgb2YgCitrbm93biBkZWZlY3RzLCBkcml2ZXIgbGltaXRhdGlvbnMsIGFuZCB3b3JrIGFyb3VuZHMuCisKKworNS4yIFRFU1RJTkcgVEhFIEFEQVBURVIKKworT25jZSB0aGUgYWRhcHRlciBoYXMgYmVlbiBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQsIHRoZSBkaWFnbm9zdGljIG9wdGlvbiBvZiAKK3RoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBjYW4gYmUgdXNlZCB0byB0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSAKK2FkYXB0ZXIgYW5kIGl0cyBuZXR3b3JrIGNvbm5lY3Rpb24uICBVc2UgdGhlIGRpYWdub3N0aWNzICdTZWxmIFRlc3QnIG9wdGlvbiB0bwordGVzdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWRhcHRlciB3aXRoIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHlvdSBoYXZlCithc3NpZ25lZC4gWW91IGNhbiB1c2UgdGhlIGRpYWdub3N0aWNzICdOZXR3b3JrIFRlc3QnIHRvIHRlc3QgdGhlIGFiaWxpdHkgb2YgdGhlCithZGFwdGVyIHRvIGNvbW11bmljYXRlIGFjcm9zcyB0aGUgRXRoZXJuZXQgd2l0aCBhbm90aGVyIFBDIGVxdWlwcGVkIHdpdGggYSAKK0NTODkwMC8yMC1iYXNlZCBhZGFwdGVyIGNhcmQgKGl0IG11c3QgYWxzbyBiZSBydW5uaW5nIHRoZSBDUzg5MDAvMjAgU2V0dXAgCitVdGlsaXR5KS4KKworICAgICAgICAgTk9URTogVGhlIFNldHVwIFV0aWxpdHkncyBkaWFnbm9zdGljcyBhcmUgZGVzaWduZWQgdG8gcnVuIGluIGEKKyAgICAgICAgIERPUy1vbmx5IG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQuICBETyBOT1QgcnVuIHRoZSBkaWFnbm9zdGljcyAKKyAgICAgICAgIGZyb20gYSBET1Mgb3IgY29tbWFuZCBwcm9tcHQgc2Vzc2lvbiB1bmRlciBXaW5kb3dzIDk1LCBXaW5kb3dzIE5ULCAKKyAgICAgICAgIE9TLzIsIG9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW0uCisKK1RvIHJ1biB0aGUgZGlhZ25vc3RpY3MgdGVzdHMgb24gdGhlIENTODkwMC8yMCBhZGFwdGVyOgorCisgICAxLikgQm9vdCBET1Mgb24gdGhlIFBDIGFuZCBzdGFydCB0aGUgQ1M4OTAwLzIwIFNldHVwIFV0aWxpdHkuCisKKyAgIDIuKSBUaGUgYWRhcHRlcidzIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBkaXNwbGF5ZWQuICBIaXQgdGhlIEVOVEVSIGtleSB0bworICAgICAgIGdldCB0byB0aGUgbWFpbiBtZW51LgorCisgICA0LikgU2VsZWN0ICdEaWFnbm9zdGljcycgKEFMVC1HKSBmcm9tIHRoZSBtYWluIG1lbnUuICAKKyAgICAgICAqIFNlbGVjdCAnU2VsZi1UZXN0JyB0byB0ZXN0IHRoZSBhZGFwdGVyJ3MgYmFzaWMgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAqIFNlbGVjdCAnTmV0d29yayBUZXN0JyB0byB0ZXN0IHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kIGNhYmxpbmcuCisKKworNS4yLjEgRElBR05PU1RJQyBTRUxGLVRFU1QKKworVGhlIGRpYWdub3N0aWMgc2VsZi10ZXN0IGNoZWNrcyB0aGUgYWRhcHRlcidzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgYXMgd2VsbCBhcyAKK2l0cyBhYmlsaXR5IHRvIGNvbW11bmljYXRlIGFjcm9zcyB0aGUgSVNBIGJ1cyBiYXNlZCBvbiB0aGUgc3lzdGVtIHJlc291cmNlcyAKK2Fzc2lnbmVkIGR1cmluZyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiAgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgcGVyZm9ybWVkOgorCisgICAqIElPIFJlZ2lzdGVyIFJlYWQvV3JpdGUgVGVzdAorICAgICBUaGUgSU8gUmVnaXN0ZXIgUmVhZC9Xcml0ZSB0ZXN0IGluc3VyZXMgdGhhdCB0aGUgQ1M4OTAwLzIwIGNhbiBiZSAKKyAgICAgYWNjZXNzZWQgaW4gSU8gbW9kZSwgYW5kIHRoYXQgdGhlIElPIGJhc2UgYWRkcmVzcyBpcyBjb3JyZWN0LgorCisgICAqIFNoYXJlZCBNZW1vcnkgVGVzdAorICAgICBUaGUgU2hhcmVkIE1lbW9yeSB0ZXN0IGluc3VyZXMgdGhlIENTODkwMC8yMCBjYW4gYmUgYWNjZXNzZWQgaW4gbWVtb3J5IAorICAgICBtb2RlIGFuZCB0aGF0IHRoZSByYW5nZSBvZiBtZW1vcnkgYWRkcmVzc2VzIGFzc2lnbmVkIGRvZXMgbm90IGNvbmZsaWN0IAorICAgICB3aXRoIG90aGVyIGRldmljZXMgaW4gdGhlIHN5c3RlbS4KKworICAgKiBJbnRlcnJ1cHQgVGVzdAorICAgICBUaGUgSW50ZXJydXB0IHRlc3QgaW5zdXJlcyB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIHdpdGggdGhlIGFzc2lnbmVkIElSUQorICAgICBzaWduYWwuCisKKyAgICogRUVQUk9NIFRlc3QKKyAgICAgVGhlIEVFUFJPTSB0ZXN0IGluc3VyZXMgdGhlIEVFUFJPTSBjYW4gYmUgcmVhZC4KKworICAgKiBDaGlwIFJBTSBUZXN0CisgICAgIFRoZSBDaGlwIFJBTSB0ZXN0IGluc3VyZXMgdGhlIDRLIG9mIG1lbW9yeSBpbnRlcm5hbCB0byB0aGUgQ1M4OTAwLzIwIGlzCisgICAgIHdvcmtpbmcgcHJvcGVybHkuCisKKyAgICogSW50ZXJuYWwgTG9vcC1iYWNrIFRlc3QKKyAgICAgVGhlIEludGVybmFsIExvb3AgQmFjayB0ZXN0IGluc3VyZXMgdGhlIGFkYXB0ZXIncyB0cmFuc21pdHRlciBhbmQgCisgICAgIHJlY2VpdmVyIGFyZSBvcGVyYXRpbmcgcHJvcGVybHkuICBJZiB0aGlzIHRlc3QgZmFpbHMsIG1ha2Ugc3VyZSB0aGUgCisgICAgIGFkYXB0ZXIncyBjYWJsZSBpcyBjb25uZWN0ZWQgdG8gdGhlIG5ldHdvcmsgKGNoZWNrIGZvciBMRUQgYWN0aXZpdHkgZm9yIAorICAgICBleGFtcGxlKS4KKworICAgKiBCb290IFBST00gVGVzdAorICAgICBUaGUgQm9vdCBQUk9NICB0ZXN0IGluc3VyZXMgdGhlIEJvb3QgUFJPTSBpcyBwcmVzZW50LCBhbmQgY2FuIGJlIHJlYWQuCisgICAgIEZhaWx1cmUgaW5kaWNhdGVzIHRoZSBCb290IFBST00gIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHJlYWQgZHVlIHRvIGEKKyAgICAgaGFyZHdhcmUgcHJvYmxlbSBvciBkdWUgdG8gYSBjb25mbGljdHMgb24gdGhlIEJvb3QgUFJPTSBhZGRyZXNzCisgICAgIGFzc2lnbm1lbnQuIChUZXN0IG9ubHkgYXBwbGllcyBpZiB0aGUgYWRhcHRlciBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUKKyAgICAgQm9vdCBQUk9NIG9wdGlvbi4pCisKK0ZhaWx1cmUgb2YgYSB0ZXN0IGl0ZW0gaW5kaWNhdGVzIGEgcG9zc2libGUgc3lzdGVtIHJlc291cmNlIGNvbmZsaWN0IHdpdGggCithbm90aGVyIGRldmljZSBvbiB0aGUgSVNBIGJ1cy4gIEluIHRoaXMgY2FzZSwgeW91IHNob3VsZCB1c2UgdGhlIE1hbnVhbCBTZXR1cCAKK29wdGlvbiB0byByZWNvbmZpZ3VyZSB0aGUgYWRhcHRlciBieSBzZWxlY3RpbmcgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBzeXN0ZW0KK3Jlc291cmNlIHRoYXQgZmFpbGVkLgorCisKKzUuMi4yIERJQUdOT1NUSUMgTkVUV09SSyBURVNUCisKK1RoZSBEaWFnbm9zdGljIE5ldHdvcmsgVGVzdCB2ZXJpZmllcyBhIHdvcmtpbmcgbmV0d29yayBjb25uZWN0aW9uIGJ5IAordHJhbnNmZXJyaW5nIGRhdGEgYmV0d2VlbiB0d28gQ1M4OTAwLzIwIGFkYXB0ZXJzIGluc3RhbGxlZCBpbiBkaWZmZXJlbnQgUENzIAorb24gdGhlIHNhbWUgbmV0d29yay4gKE5vdGU6IHRoZSBkaWFnbm9zdGljIG5ldHdvcmsgdGVzdCBzaG91bGQgbm90IGJlIHJ1biAKK2JldHdlZW4gdHdvIG5vZGVzIGFjcm9zcyBhIHJvdXRlci4pIAorCitUaGlzIHRlc3QgcmVxdWlyZXMgdGhhdCBlYWNoIG9mIHRoZSB0d28gUENzIGhhdmUgYSBDUzg5MDAvMjAtYmFzZWQgYWRhcHRlcgoraW5zdGFsbGVkIGFuZCBoYXZlIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBydW5uaW5nLiAgVGhlIGZpcnN0IFBDIGlzIAorY29uZmlndXJlZCBhcyBhIFJlc3BvbmRlciBhbmQgdGhlIG90aGVyIFBDIGlzIGNvbmZpZ3VyZWQgYXMgYW4gSW5pdGlhdG9yLiAgCitPbmNlIHRoZSBJbml0aWF0b3IgaXMgc3RhcnRlZCwgaXQgc2VuZHMgZGF0YSBmcmFtZXMgdG8gdGhlIFJlc3BvbmRlciB3aGljaCAKK3JldHVybnMgdGhlIGZyYW1lcyB0byB0aGUgSW5pdGlhdG9yLgorCitUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQgYXJlIGRpc3BsYXllZCBvbiB0aGUgCitJbml0aWF0b3IncyBkaXNwbGF5LCBhbG9uZyB3aXRoIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgYW5kIAordHJhbnNtaXR0ZWQgT0sgb3IgaW4gZXJyb3IuICBUaGUgdGVzdCBjYW4gYmUgdGVybWluYXRlZCBhbnl0aW1lIGJ5IHRoZSB1c2VyIGF0IAorZWl0aGVyIFBDLgorCitUbyBzZXR1cCB0aGUgRGlhZ25vc3RpYyBOZXR3b3JrIFRlc3Q6CisKKyAgICAxLikgU2VsZWN0IGEgUEMgd2l0aCBhIENTODkwMC8yMC1iYXNlZCBhZGFwdGVyIGFuZCBhIGtub3duIHdvcmtpbmcgbmV0d29yaworICAgICAgICBjb25uZWN0aW9uIHRvIGFjdCBhcyB0aGUgUmVzcG9uZGVyLiAgUnVuIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSAKKyAgICAgICAgYW5kIHNlbGVjdCAnRGlhZ25vc3RpY3MgLT4gTmV0d29yayBUZXN0IC0+IFJlc3BvbmRlcicgZnJvbSB0aGUgbWFpbiAKKyAgICAgICAgbWVudS4gIEhpdCBFTlRFUiB0byBzdGFydCB0aGUgUmVzcG9uZGVyLgorCisgICAgMi4pIFJldHVybiB0byB0aGUgUEMgd2l0aCB0aGUgQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXIgeW91IHdhbnQgdG8gdGVzdCBhbmQKKyAgICAgICAgc3RhcnQgdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5LiAKKworICAgIDMuKSBGcm9tIHRoZSBtYWluIG1lbnUsIFNlbGVjdCAnRGlhZ25vc3RpYyAtPiBOZXR3b3JrIFRlc3QgLT4gSW5pdGlhdG9yJy4KKyAgICAgICAgSGl0IEVOVEVSIHRvIHN0YXJ0IHRoZSB0ZXN0LgorIAorWW91IG1heSBzdG9wIHRoZSB0ZXN0IG9uIHRoZSBJbml0aWF0b3IgYXQgYW55IHRpbWUgd2hpbGUgYWxsb3dpbmcgdGhlIFJlc3BvbmRlcgordG8gY29udGludWUgcnVubmluZy4gIEluIHRoaXMgbWFubmVyLCB5b3UgY2FuIG1vdmUgdG8gYWRkaXRpb25hbCBQQ3MgYW5kIHRlc3QgCit0aGVtIGJ5IHN0YXJ0aW5nIHRoZSBJbml0aWF0b3Igb24gYW5vdGhlciBQQyB3aXRob3V0IGhhdmluZyB0byBzdG9wL3N0YXJ0IHRoZSAKK1Jlc3BvbmRlci4KKyAKKworCis1LjMgVVNJTkcgVEhFIEFEQVBURVInUyBMRURzCisKK1RoZSAyIGFuZCAzLW1lZGlhIGFkYXB0ZXJzIGhhdmUgdHdvIExFRHMgdmlzaWJsZSBvbiB0aGUgYmFjayBlbmQgb2YgdGhlIGJvYXJkIAorbG9jYXRlZCBuZWFyIHRoZSAxMEJhc2UtVCBjb25uZWN0b3IuICAKKworTGluayBJbnRlZ3JpdHkgTEVEOiBBICJzdGVhZHkiIE9OIG9mIHRoZSBncmVlbiBMRUQgaW5kaWNhdGVzIGEgdmFsaWQgMTBCYXNlLVQgCitjb25uZWN0aW9uLiAgKE9ubHkgYXBwbGllcyB0byAxMEJhc2UtVC4gIFRoZSBncmVlbiBMRUQgaGFzIG5vIHNpZ25pZmljYW5jZSBmb3IKK2EgMTBCYXNlLTIgb3IgQVVJIGNvbm5lY3Rpb24uKQorCitUWC9SWCBMRUQ6IFRoZSB5ZWxsb3cgTEVEIGxpZ2h0cyBicmllZmx5IGVhY2ggdGltZSB0aGUgYWRhcHRlciB0cmFuc21pdHMgb3IgCityZWNlaXZlcyBkYXRhLiAoVGhlIHllbGxvdyBMRUQgd2lsbCBhcHBlYXIgdG8gImZsaWNrZXIiIG9uIGEgdHlwaWNhbCBuZXR3b3JrLikKKworCis1LjQgUkVTT0xWSU5HIEkvTyBDT05GTElDVFMKKworQW4gSU8gY29uZmxpY3Qgb2NjdXJzIHdoZW4gdHdvIG9yIG1vcmUgYWRhcHRlciB1c2UgdGhlIHNhbWUgSVNBIHJlc291cmNlIChJTyAKK2FkZHJlc3MsIG1lbW9yeSBhZGRyZXNzIG9yIElSUSkuICBZb3UgY2FuIHVzdWFsbHkgZGV0ZWN0IGFuIElPIGNvbmZsaWN0IGluIG9uZSAKK29mIGZvdXIgd2F5cyBhZnRlciBpbnN0YWxsaW5nIGFuZCBvciBjb25maWd1cmluZyB0aGUgQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXI6CisKKyAgICAxLikgVGhlIHN5c3RlbSBkb2VzIG5vdCBib290IHByb3Blcmx5IChvciBhdCBhbGwpLgorCisgICAgMi4pIFRoZSBkcml2ZXIgY2FuIG5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBhZGFwdGVyLCByZXBvcnRpbmcgYW4gIkFkYXB0ZXIKKyAgICAgICAgbm90IGZvdW5kIiBlcnJvciBtZXNzYWdlLgorCisgICAgMy4pIFlvdSBjYW5ub3QgY29ubmVjdCB0byB0aGUgbmV0d29yayBvciB0aGUgZHJpdmVyIHdpbGwgbm90IGxvYWQuCisKKyAgICA0LikgSWYgeW91IGhhdmUgY29uZmlndXJlZCB0aGUgYWRhcHRlciB0byBydW4gaW4gbWVtb3J5IG1vZGUgYnV0IHRoZSBkcml2ZXIKKyAgICAgICAgcmVwb3J0cyBpdCBpcyB1c2luZyBJTyBtb2RlIHdoZW4gbG9hZGluZywgdGhpcyBpcyBhbiBpbmRpY2F0aW9uIG9mIGEKKyAgICAgICAgbWVtb3J5IGFkZHJlc3MgY29uZmxpY3QuCisKK0lmIGFuIElPIGNvbmZsaWN0IG9jY3VycywgcnVuIHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eSBhbmQgcGVyZm9ybSBhIAorZGlhZ25vc3RpYyBzZWxmLXRlc3QuICBOb3JtYWxseSwgdGhlIElTQSByZXNvdXJjZSBpbiBjb25mbGljdCB3aWxsIGZhaWwgdGhlIAorc2VsZi10ZXN0LiAgSWYgc28sIHJlY29uZmlndXJlIHRoZSBhZGFwdGVyIHNlbGVjdGluZyBhbm90aGVyIGNob2ljZSBmb3IgdGhlIAorcmVzb3VyY2UgaW4gY29uZmxpY3QuICBSdW4gdGhlIGRpYWdub3N0aWNzIGFnYWluIHRvIGNoZWNrIGZvciBmdXJ0aGVyIElPIAorY29uZmxpY3RzLgorCitJbiBzb21lIGNhc2VzLCBzdWNoIGFzIHdoZW4gdGhlIFBDIHdpbGwgbm90IGJvb3QsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmVtb3ZlCit0aGUgYWRhcHRlciBhbmQgcmVjb25maWd1cmUgaXQgYnkgaW5zdGFsbGluZyBpdCBpbiBhbm90aGVyIFBDIHRvIHJ1biB0aGUgCitDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eS4gIE9uY2UgcmVpbnN0YWxsZWQgaW4gdGhlIHRhcmdldCBzeXN0ZW0sIHJ1biB0aGUgCitkaWFnbm9zdGljcyBzZWxmLXRlc3QgdG8gZW5zdXJlIHRoZSBuZXcgY29uZmlndXJhdGlvbiBpcyBmcmVlIG9mIGNvbmZsaWN0cyAKK2JlZm9yZSBsb2FkaW5nIHRoZSBkcml2ZXIgYWdhaW4uCisKK1doZW4gbWFudWFsbHkgY29uZmlndXJpbmcgdGhlIGFkYXB0ZXIsIGtlZXAgaW4gbWluZCB0aGUgdHlwaWNhbCBJU0Egc3lzdGVtIAorcmVzb3VyY2UgdXNhZ2UgYXMgaW5kaWNhdGVkIGluIHRoZSB0YWJsZXMgYmVsb3cuCisKK0kvTyBBZGRyZXNzICAgIAlEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICBJUlEgICAgICBEZXZpY2UKKy0tLS0tLS0tLS0tICAgIAktLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAtLS0gICAgICAtLS0tLS0tLQorIDIwMC0yMEYgICAgICAgCUdhbWUgSS9PIGFkYXB0ZXIgICAgICAgICAgICAgICAzICAgICAgIENPTTIsIEJ1cyBNb3VzZQorIDIzMC0yM0YgICAgICAgCUJ1cyBNb3VzZSAgICAgICAgICAgICAgICAgICAgICA0ICAgICAgIENPTTEKKyAyNzAtMjdGICAgICAgIAlMUFQzOiB0aGlyZCBwYXJhbGxlbCBwb3J0ICAgICAgNSAgICAgICBMUFQyCisgMkYwLTJGRiAgICAgICAJQ09NMjogc2Vjb25kIHNlcmlhbCBwb3J0ICAgICAgIDYgICAgICAgRmxvcHB5IERpc2sgY29udHJvbGxlcgorIDMyMC0zMkYgICAgICAgCUZpeGVkIGRpc2sgY29udHJvbGxlciAgICAgICAgICA3ICAgICAgIExQVDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICA4ICAgICAgIFJlYWwtdGltZSBDbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgICAgICAgRUdBL1ZHQSBkaXNwbGF5IGFkYXB0ZXIgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgICAgICBNb3VzZSAoUFMvMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK01lbW9yeSBBZGRyZXNzICBEZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAgICAgIE1hdGggQ29wcm9jZXNzb3IKKy0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgIDE0ICAgICAgIEhhcmQgRGlzayBjb250cm9sbGVyCitBMDAwLUJGRkYJRUdBIEdyYXBoaWNzIEFkcGF0ZXIKK0EwMDAtQzdGRglWR0EgR3JhcGhpY3MgQWRwYXRlcgorQjAwMC1CRkZGCU1vbm8gR3JhcGhpY3MgQWRhcHRlcgorQjgwMC1CRkZGCUNvbG9yIEdyYXBoaWNzIEFkYXB0ZXIKK0UwMDAtRkZGRglBVCBCSU9TCisKKworCisKKzYuMCBURUNITklDQUwgU1VQUE9SVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis2LjEgQ09OVEFDVElORyBDSVJSVVMgTE9HSUMnUyBURUNITklDQUwgU1VQUE9SVAorCitDaXJydXMgTG9naWMncyBDUzg5WFggVGVjaG5pY2FsIEFwcGxpY2F0aW9uIFN1cHBvcnQgY2FuIGJlIHJlYWNoZWQgYXQ6CisKK1RlbGVwaG9uZSAgOig4MDApIDg4OC01MDE2IChmcm9tIGluc2lkZSBVLlMuIGFuZCBDYW5hZGEpCisgICAgICAgICAgIDooNTEyKSA0NDItNzU1NSAoZnJvbSBvdXRzaWRlIHRoZSBVLlMuIGFuZCBDYW5hZGEpCitGYXggICAgICAgIDooNTEyKSA5MTItMzg3MQorRW1haWwgICAgICA6ZXRoZXJuZXRAY3J5c3RhbC5jaXJydXMuY29tCitXV1cgICAgICAgIDpodHRwOi8vd3d3LmNpcnJ1cy5jb20KKworCis2LjIgSU5GT1JNQVRJT04gUkVRVUlSRUQgQkVGT1JFIENPTlRBQ1RJTkcgVEVDSE5JQ0FMIFNVUFBPUlQKKworQmVmb3JlIGNvbnRhY3RpbmcgQ2lycnVzIExvZ2ljIGZvciB0ZWNobmljYWwgc3VwcG9ydCwgYmUgcHJlcGFyZWQgdG8gcHJvdmlkZSBhcyAKK011Y2ggb2YgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZS4gCisKKzEuKSBBZGFwdGVyIHR5cGUgKENSRDg5MDAsIENEQjg5MDAsIENEQjg5MjAsIGV0Yy4pCisKKzIuKSBBZGFwdGVyIGNvbmZpZ3VyYXRpb24KKworICAgICogSU8gQmFzZSwgTWVtb3J5IEJhc2UsIElPIG9yIG1lbW9yeSBtb2RlIGVuYWJsZWQsIElSUSwgRE1BIGNoYW5uZWwKKyAgICAqIFBsdWcgYW5kIFBsYXkgZW5hYmxlZC9kaXNhYmxlZCAoQ1M4OTIwLWJhc2VkIGFkYXB0ZXJzIG9ubHkpCisgICAgKiBDb25maWd1cmVkIGZvciBtZWRpYSBhdXRvLWRldGVjdCBvciBzcGVjaWZpYyBtZWRpYSB0eXBlICh3aGljaCB0eXBlKS4gICAgCisKKzMuKSBQQyBTeXN0ZW0ncyBDb25maWd1cmF0aW9uCisKKyAgICAqIFBsdWcgYW5kIFBsYXkgc3lzdGVtICh5ZXMvbm8pCisgICAgKiBCSU9TIChtYWtlIGFuZCB2ZXJzaW9uKQorICAgICogU3lzdGVtIG1ha2UgYW5kIG1vZGVsCisgICAgKiBDUFUgKHR5cGUgYW5kIHNwZWVkKQorICAgICogU3lzdGVtIFJBTQorICAgICogU0NTSSBBZGFwdGVyCisKKzQuKSBTb2Z0d2FyZQorCisgICAgKiBDUzg5WFggZHJpdmVyIGFuZCB2ZXJzaW9uCisgICAgKiBZb3VyIG5ldHdvcmsgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdmVyc2lvbgorICAgICogWW91ciBzeXN0ZW0ncyBPUyB2ZXJzaW9uIAorICAgICogVmVyc2lvbiBvZiBhbGwgcHJvdG9jb2wgc3VwcG9ydCBmaWxlcworCis1LikgQW55IEVycm9yIE1lc3NhZ2UgZGlzcGxheWVkLgorCisKKworNi4zIE9CVEFJTklORyBUSEUgTEFURVNUIERSSVZFUiBWRVJTSU9OCisKK1lvdSBjYW4gb2J0YWluIHRoZSBsYXRlc3QgQ1M4OVhYIGRyaXZlcnMgYW5kIHN1cHBvcnQgc29mdHdhcmUgZnJvbSBDaXJydXMgTG9naWMncyAKK1dlYiBzaXRlLiAgWW91IGNhbiBhbHNvIGNvbnRhY3QgQ2lycnVzIExvZ2ljJ3MgVGVjaG5pY2FsIFN1cHBvcnQgKGVtYWlsOgorZXRoZXJuZXRAY3J5c3RhbC5jaXJydXMuY29tKSBhbmQgcmVxdWVzdCB0aGF0IHlvdSBiZSByZWdpc3RlcmVkIGZvciBhdXRvbWF0aWMgCitzb2Z0d2FyZS11cGRhdGUgbm90aWZpY2F0aW9uLgorCitDaXJydXMgTG9naWMgbWFpbnRhaW5zIGEgd2ViIHBhZ2UgYXQgaHR0cDovL3d3dy5jaXJydXMuY29tIHdpdGggdGhlCit0aGUgbGF0ZXN0IGRyaXZlcnMgYW5kIHRlY2huaWNhbCBwdWJsaWNhdGlvbnMuCisKKworNi40IEN1cnJlbnQgbWFpbnRhaW5lcgorCitJbiBGZWJydWFyeSAyMDAwIHRoZSBtYWludGVuYW5jZSBvZiB0aGlzIGRyaXZlciB3YXMgYXNzdW1lZCBieSBBbmRyZXcKK01vcnRvbiA8YWtwbUB6aXAuY29tLmF1PgorCis2LjUgS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzCisKK0ZvciB1c2UgaW4gZW1iZWRkZWQgZW52aXJvbm1lbnRzIHdpdGggbm8gY3M4OXgwIEVFUFJPTSwgdGhlIGtlcm5lbCBib290CitwYXJhbWV0ZXIgYGNzODl4MF9tZWRpYT0nIGhhcyBiZWVuIGltcGxlbWVudGVkLiAgVXNhZ2UgaXM6CisKKwljczg5eDBfbWVkaWE9cmo0NSAgICBvcgorCWNzODl4MF9tZWRpYT1hdWkgICAgIG9yCisJY3M4OXgwX21lZGlhPWJuYworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGU0eDUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlNHg1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU0Y2E5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlNHg1LnR4dApAQCAtMCwwICsxLDE3OCBAQAorICAgIE9yaWdpbmFsbHksICAgdGhpcyAgZHJpdmVyICB3YXMgICAgd3JpdHRlbiAgZm9yIHRoZSAgRGlnaXRhbCAgIEVxdWlwbWVudAorICAgIENvcnBvcmF0aW9uIHNlcmllcyBvZiBFdGhlcldPUktTIEV0aGVybmV0IGNhcmRzOgorCisgICAgICAgIERFNDI1IFRQL0NPQVggRUlTQQorCURFNDM0IFRQIFBDSQorCURFNDM1IFRQL0NPQVgvQVVJIFBDSQorCURFNDUwIFRQL0NPQVgvQVVJIFBDSQorCURFNTAwIDEwLzEwMCBQQ0kgRmFzdGVybmV0CisKKyAgICBidXQgaXQgIHdpbGwgIG5vdyBhdHRlbXB0ICB0byAgc3VwcG9ydCBhbGwgIGNhcmRzIHdoaWNoICAgY29uZm9ybSB0byB0aGUKKyAgICBEaWdpdGFsIFNlbWljb25kdWN0b3IgICBTUk9NICAgU3BlY2lmaWNhdGlvbi4gICAgVGhlICBkcml2ZXIgICBjdXJyZW50bHkKKyAgICByZWNvZ25pc2VzIHRoZSBmb2xsb3dpbmcgY2hpcHM6CisKKyAgICAgICAgREMyMTA0MCAgKG5vIFNST00pIAorCURDMjEwNDFbQV0gIAorCURDMjExNDBbQV0gCisJREMyMTE0MiAKKwlEQzIxMTQzIAorCisgICAgU28gZmFyIHRoZSBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcgY2FyZHM6CisKKyAgICAgICAgS0lOR1NUT04KKwlMaW5rc3lzCisJWk5ZWDM0MgorCVNNQzg0MzIKKwlTTUM5MzMyICh3L25ldyBTUk9NKQorCVpOWVgzMVs0NV0KKwlaTllYMzQ2IDEwLzEwMCA0IHBvcnQgKGNhbiBhY3QgYXMgYSAxMC8xMDAgYnJpZGdlISkgCisKKyAgICBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCBvbiBhIHJlbGF0aXZlbHkgYnVzeSBuZXR3b3JrIHVzaW5nIHRoZSBERTQyNSwKKyAgICBERTQzNCwgREU0MzUgYW5kIERFNTAwIGNhcmRzIGFuZCBiZW5jaG1hcmtlZCB3aXRoICd0dGNwJzogaXQgdHJhbnNmZXJyZWQKKyAgICAxNk0gb2YgZGF0YSB0byBhIERFQ3N0YXRpb24gNTAwMC8yMDAgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgIFRDUCAgICAgICAgICAgVURQCisgICAgICAgICAgICAgVFggICAgIFJYICAgICBUWCAgICAgUlgKKyAgICBERTQyNSAgIDEwMzBrICA5OTdrICAgMTE3MGsgIDExMjhrCisgICAgREU0MzQgICAxMDYzayAgOTk1ayAgIDExNzBrICAxMTI1aworICAgIERFNDM1ICAgMTA2M2sgIDk5NWsgICAxMTcwayAgMTEyNWsKKyAgICBERTUwMCAgIDEwNjNrICA5OThrICAgMTE3MGsgIDExMjVrICBpbiAxME1iL3MgbW9kZQorCisgICAgQWxsICB2YWx1ZXMgYXJlIHR5cGljYWwgKGluICAga0J5dGVzL3NlYykgZnJvbSBhICBzYW1wbGUgIG9mIDQgZm9yICBlYWNoCisgICAgbWVhc3VyZW1lbnQuIFRoZWlyIGVycm9yIGlzICsvLTIwayBvbiBhIHF1aWV0IChwcml2YXRlKSBuZXR3b3JrIGFuZCBhbHNvCisgICAgZGVwZW5kIG9uIHdoYXQgbG9hZCB0aGUgQ1BVIGhhcy4KKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBhYmlsaXR5IHRvIGxvYWQgdGhpcyAgZHJpdmVyIGFzIGEgbG9hZGFibGUgIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZAorICAgIGFuZCB1c2VkIGV4dGVuc2l2ZWx5ICBkdXJpbmcgdGhlIGRyaXZlciBkZXZlbG9wbWVudCAgKHRvIHNhdmUgdGhvc2UgbG9uZworICAgIHJlYm9vdCBzZXF1ZW5jZXMpLiAgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgIHVuZGVyIFBDSSBhbmQgRUlTQSBoYXMgYmVlbgorICAgIGFjaGlldmVkIGJ5IGxldHRpbmcgdGhlIGRyaXZlciBhdXRvcHJvYmUgYXMgaWYgaXQgd2VyZSBjb21waWxlZCBpbnRvIHRoZQorICAgIGtlcm5lbC4gRG8gbWFrZSBzdXJlICB5b3UncmUgbm90IHNoYXJpbmcgIGludGVycnVwdHMgd2l0aCBhbnl0aGluZyAgdGhhdAorICAgIGNhbm5vdCBhY2NvbW1vZGF0ZSAgaW50ZXJydXB0ICBzaGFyaW5nIQorCisgICAgVG8gdXRpbGlzZSB0aGlzIGFiaWxpdHksIHlvdSBoYXZlIHRvIGRvIDggdGhpbmdzOgorCisgICAgMCkgaGF2ZSBhIGNvcHkgb2YgdGhlIGxvYWRhYmxlIG1vZHVsZXMgY29kZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uCisgICAgMSkgY29weSBkZTR4NS5jIGZyb20gdGhlICAvbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5IHRvIHlvdXIgZmF2b3VyaXRlCisgICAgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgICAyKSBmb3IgZml4ZWQgIGF1dG9wcm9iZXMgKG5vdCAgcmVjb21tZW5kZWQpLCAgZWRpdCB0aGUgc291cmNlIGNvZGUgIG5lYXIKKyAgICBsaW5lIDU1OTQgdG8gcmVmbGVjdCB0aGUgSS9PIGFkZHJlc3MgIHlvdSdyZSB1c2luZywgb3IgYXNzaWduIHRoZXNlIHdoZW4KKyAgICBsb2FkaW5nIGJ5OgorCisgICAgICAgICAgICAgICAgICAgaW5zbW9kIGRlNHg1IGlvPTB4Z2hoICAgICAgICAgICB3aGVyZSBnID0gYnVzIG51bWJlcgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGggPSBkZXZpY2UgbnVtYmVyICAgCisKKyAgICAgICBOQjogYXV0b3Byb2JpbmcgZm9yIG1vZHVsZXMgaXMgbm93IHN1cHBvcnRlZCBieSBkZWZhdWx0LiBZb3UgbWF5IGp1c3QKKyAgICAgICAgICAgdXNlOgorCisgICAgICAgICAgICAgICAgICAgaW5zbW9kIGRlNHg1CisKKyAgICAgICAgICAgdG8gbG9hZCBhbGwgYXZhaWxhYmxlIGJvYXJkcy4gRm9yIGEgc3BlY2lmaWMgYm9hcmQsIHN0aWxsIHVzZQorCSAgIHRoZSAnaW89PycgYWJvdmUuCisgICAgMykgY29tcGlsZSAgZGU0eDUuYywgYnV0IGluY2x1ZGUgLURNT0RVTEUgaW4gIHRoZSBjb21tYW5kIGxpbmUgdG8gZW5zdXJlCisgICAgdGhhdCB0aGUgY29ycmVjdCBiaXRzIGFyZSBjb21waWxlZCAoc2VlIGVuZCBvZiBzb3VyY2UgY29kZSkuCisgICAgNCkgaWYgeW91IGFyZSB3YW50aW5nIHRvIGFkZCBhIG5ldyAgY2FyZCwgZ290byA1LiBPdGhlcndpc2UsIHJlY29tcGlsZSBhCisgICAga2VybmVsIHdpdGggdGhlIGRlNHg1IGNvbmZpZ3VyYXRpb24gdHVybmVkIG9mZiBhbmQgcmVib290LgorICAgIDUpIGluc21vZCBkZTR4NSBbaW89MHhnaGhdCisgICAgNikgcnVuIHRoZSBuZXQgc3RhcnR1cCBiaXRzIGZvciB5b3VyIG5ldyBldGg/PyBpbnRlcmZhY2UocykgbWFudWFsbHkgCisgICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLiAKKyAgICA3KSBlbmpveSEKKworICAgIFRvIHVubG9hZCBhIG1vZHVsZSwgdHVybiBvZmYgdGhlIGFzc29jaWF0ZWQgaW50ZXJmYWNlKHMpIAorICAgICdpZmNvbmZpZyBldGg/PyBkb3duJyB0aGVuICdybW1vZCBkZTR4NScuCisKKyAgICBBdXRvbWVkaWEgZGV0ZWN0aW9uIGlzIGluY2x1ZGVkIHNvIHRoYXQgaW4gIHByaW5jaXBsZSB5b3UgY2FuIGRpc2Nvbm5lY3QKKyAgICBmcm9tLCBlLmcuICBUUCwgcmVjb25uZWN0ICB0byBCTkMgIGFuZCAgdGhpbmdzIHdpbGwgc3RpbGwgd29yayAgKGFmdGVyIGEKKyAgICBwYXVzZSB3aGlsc3QgdGhlICAgZHJpdmVyIGZpZ3VyZXMgb3V0ICAgd2hlcmUgaXRzIG1lZGlhIHdlbnQpLiAgTXkgdGVzdHMKKyAgICB1c2luZyBwaW5nIHNob3dlZCB0aGF0IGl0IGFwcGVhcnMgdG8gd29yay4uLi4KKworICAgIEJ5ICBkZWZhdWx0LCAgdGhlIGRyaXZlciB3aWxsICBub3cgICBhdXRvZGV0ZWN0IGFueSAgREVDY2hpcCBiYXNlZCBjYXJkLgorICAgIFNob3VsZCB5b3UgaGF2ZSBhIG5lZWQgdG8gcmVzdHJpY3QgdGhlIGRyaXZlciB0byBESUdJVEFMIG9ubHkgY2FyZHMsIHlvdQorICAgIGNhbiBjb21waWxlIHdpdGggYSAgREVDX09OTFkgZGVmaW5lLCBvciBpZiAgbG9hZGluZyBhcyBhIG1vZHVsZSwgdXNlIHRoZQorICAgICdkZWNfb25seT0xJyAgcGFyYW1ldGVyLiAKKworICAgIEkndmUgY2hhbmdlZCB0aGUgdGltaW5nIHJvdXRpbmVzIHRvICB1c2UgdGhlIGtlcm5lbCB0aW1lciBhbmQgc2NoZWR1bGluZworICAgIGZ1bmN0aW9ucyAgc28gdGhhdCB0aGUgIGhhbmdzICBhbmQgb3RoZXIgYXNzb3J0ZWQgcHJvYmxlbXMgdGhhdCBvY2N1cnJlZAorICAgIHdoaWxlIGF1dG9zZW5zaW5nIHRoZSAgbWVkaWEgIHNob3VsZCBiZSBnb25lLiAgQSAgYm9udXMgIGZvciB0aGUgREMyMTA0MAorICAgIGF1dG8gIG1lZGlhIHNlbnNlIGFsZ29yaXRobSBpcyAgdGhhdCBpdCBjYW4gbm93ICB1c2Ugb25lIHRoYXQgaXMgbW9yZSBpbgorICAgIGxpbmUgd2l0aCB0aGUgIHJlc3QgKHRoZSBEQzIxMDQwICBjaGlwIGRvZXNuJ3QgIGhhdmUgYSBoYXJkd2FyZSAgdGltZXIpLgorICAgIFRoZSBkb3duc2lkZSBpcyB0aGUgMSAnamlmZmllcycgKDEwbXMpIHJlc29sdXRpb24uCisKKyAgICBJRUVFIDgwMi4zdSBNSUkgaW50ZXJmYWNlIGNvZGUgaGFzICBiZWVuIGFkZGVkIGluIGFudGljaXBhdGlvbiB0aGF0IHNvbWUKKyAgICBwcm9kdWN0cyBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUuCisKKyAgICBUaGUgU01DOTMzMiBjYXJkICBoYXMgYSBub24tY29tcGxpYW50IFNST00gIHdoaWNoIG5lZWRzIGZpeGluZyAtICBJIGhhdmUKKyAgICBwYXRjaGVkIHRoaXMgIGRyaXZlciB0byBkZXRlY3QgaXQgIGJlY2F1c2UgdGhlIFNST00gZm9ybWF0IHVzZWQgY29tcGxpZXMKKyAgICB0byBhIHByZXZpb3VzIERFQy1TVEQgZm9ybWF0LgorCisgICAgSSBoYXZlIHJlbW92ZWQgdGhlIGJ1ZmZlciBjb3BpZXMgbmVlZGVkIGZvciByZWNlaXZlIG9uIEludGVscy4gIEkgY2Fubm90CisgICAgcmVtb3ZlIHRoZW0gZm9yICAgQWxwaGFzIHNpbmNlICB0aGUgIFR1bGlwIGhhcmR3YXJlICAgb25seSBkb2VzIGxvbmd3b3JkCisgICAgYWxpZ25lZCAgRE1BIHRyYW5zZmVycyAgYW5kICB0aGUgIEFscGhhcyBnZXQgICBhbGlnbm1lbnQgdHJhcHMgd2l0aCAgbm9uCisgICAgbG9uZ3dvcmQgYWxpZ25lZCBkYXRhIGNvcGllcyAod2hpY2ggbWFrZXMgdGhlbSByZWFsbHkgc2xvdykuIE5vIGNvbW1lbnQuCisKKyAgICBJICBoYXZlIGFkZGVkIFNST00gZGVjb2RpbmcgIHJvdXRpbmVzIHRvIG1ha2UgdGhpcyAgZHJpdmVyIHdvcmsgd2l0aCBhbnkKKyAgICBjYXJkIHRoYXQgIHN1cHBvcnRzIHRoZSBEaWdpdGFsICBTZW1pY29uZHVjdG9yIFNST00gc3BlYy4gVGhpcyB3aWxsIGhlbHAKKyAgICBhbGwgIGNhcmRzIHJ1bm5pbmcgdGhlIGRjMjExNHggIHNlcmllcyBjaGlwcyBpbiBwYXJ0aWN1bGFyLiAgQ2FyZHMgdXNpbmcKKyAgICB0aGUgZGMyMTA0eCAgY2hpcHMgc2hvdWxkIHJ1biBjb3JyZWN0bHkgd2l0aCAgdGhlIGJhc2ljICBkcml2ZXIuICBJJ20gaW4KKyAgICBkZWJ0IHRvIDxtamFjb2JAZmVyYWwuY29tPiBmb3IgdGhlICB0ZXN0aW5nIGFuZCBmZWVkYmFjayB0aGF0IGhlbHBlZCBnZXQKKyAgICB0aGlzIGZlYXR1cmUgd29ya2luZy4gIFNvIGZhciB3ZSBoYXZlICB0ZXN0ZWQgS0lOR1NUT04sIFNNQzg0MzIsIFNNQzkzMzIKKyAgICAod2l0aCB0aGUgbGF0ZXN0IFNST00gY29tcGx5aW5nICB3aXRoIHRoZSBTUk9NIHNwZWMgIFYzOiB0aGVpciBmaXJzdCB3YXMKKyAgICBicm9rZW4pLCBaTllYMzQyICBhbmQgIExpbmtTeXMuIFpOWVgzMTQgKGR1YWwgIDIxMDQxICBNQUMpIGFuZCAgWk5ZWCAzMTUKKyAgICAocXVhZCAyMTA0MSBNQUMpICBjYXJkcyBhbHNvICBhcHBlYXIgIHRvIHdvcmsgZGVzcGl0ZSB0aGVpciAgaW5jb3JyZWN0bHkKKyAgICB3aXJlZCBJUlFzLgorCisgICAgSSBoYXZlIGFkZGVkIGEgdGVtcG9yYXJ5IGZpeCBmb3IgaW50ZXJydXB0IHByb2JsZW1zIHdoZW4gc29tZSBTQ1NJIGNhcmRzCisgICAgc2hhcmUgdGhlIHNhbWUgaW50ZXJydXB0IGFzIHRoZSBERUNjaGlwIGJhc2VkICBjYXJkcy4gVGhlIHByb2JsZW0gb2NjdXJzCisgICAgYmVjYXVzZSAgdGhlIFNDU0kgY2FyZCB3YW50cyB0byAgZ3JhYiB0aGUgaW50ZXJydXB0ICBhcyBhIGZhc3QgaW50ZXJydXB0CisgICAgKHJ1bnMgdGhlICAgc2VydmljZSByb3V0aW5lIHdpdGggaW50ZXJydXB0cyB0dXJuZWQgICBvZmYpIHZzLiAgdGhpcyBjYXJkCisgICAgd2hpY2ggcmVhbGx5IG5lZWRzIHRvIHJ1biB0aGUgc2VydmljZSByb3V0aW5lIHdpdGggaW50ZXJydXB0cyB0dXJuZWQgb24uCisgICAgVGhpcyBkcml2ZXIgd2lsbCAgbm93ICAgYWRkIHRoZSBpbnRlcnJ1cHQgc2VydmljZSAgIHJvdXRpbmUgIGFzICBhICBmYXN0CisgICAgaW50ZXJydXB0IGlmIGl0ICAgaXMgYm91bmNlZCBmcm9tIHRoZSAgIHNsb3cgaW50ZXJydXB0LiAgVEhJUyBJUyBOT1QgICBBCisgICAgUkVDT01NRU5ERUQgV0FZIFRPIFJVTiBUSEUgRFJJVkVSICBhbmQgaGFzIGJlZW4gZG9uZSAgZm9yIGEgbGltaXRlZCB0aW1lCisgICAgdW50aWwgIHBlb3BsZSAgIHNvcnQgIG91dCB0aGVpciAgY29tcGF0aWJpbGl0eSAgICBpc3N1ZXMgYW5kIHRoZSAga2VybmVsCisgICAgaW50ZXJydXB0ICBzZXJ2aWNlIGNvZGUgIGlzICBmaXhlZC4gICBZT1UgIFNIT1VMRCBTRVBBUkFURSBPVVQgIFRIRSBGQVNUCisgICAgSU5URVJSVVBUIENBUkRTIEZST00gVEhFIFNMT1cgSU5URVJSVVBUIENBUkRTIHRvIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90CisgICAgcnVuIG9uIHRoZSBzYW1lIGludGVycnVwdC4gUENNQ0lBL0NhcmRCdXMgaXMgYW5vdGhlciBjYW4gb2Ygd29ybXMuLi4KKworICAgIEZpbmFsbHksIEkgdGhpbmsgIEkgaGF2ZSByZWFsbHkgIGZpeGVkICB0aGUgbW9kdWxlICBsb2FkaW5nIHByb2JsZW0gd2l0aAorICAgIG1vcmUgdGhhbiBvbmUgREVDY2hpcCBiYXNlZCAgY2FyZC4gIEFzIGEgIHNpZGUgZWZmZWN0LCBJIGRvbid0IG1lc3Mgd2l0aAorICAgIHRoZSAgZGV2aWNlIHN0cnVjdHVyZSBhbnkgIG1vcmUgd2hpY2ggbWVhbnMgdGhhdCAgaWYgbW9yZSB0aGFuIDEgY2FyZCBpbgorICAgIDIuMC54IGlzICAgIGluc3RhbGxlZCAoNCAgaW4gICAyLjEueCksICB0aGUgIHVzZXIgICB3aWxsIGhhdmUgICB0byAgZWRpdAorICAgIGxpbnV4L2RyaXZlcnMvbmV0L1NwYWNlLmMgIHRvIG1ha2Ugcm9vbSBmb3IgIHRoZW0uIEhlbmNlLCBtb2R1bGUgbG9hZGluZworICAgIGlzICB0aGUgcHJlZmVycmVkIHdheSB0byB1c2UgICB0aGlzIGRyaXZlciwgc2luY2UgIGl0ICBkb2Vzbid0IGhhdmUgdGhpcworICAgIGxpbWl0YXRpb24uCisKKyAgICBXaGVyZSBTUk9NIG1lZGlhICBkZXRlY3Rpb24gaXMgdXNlZCBhbmQgIGZ1bGwgZHVwbGV4IGlzIHNwZWNpZmllZCBpbiB0aGUKKyAgICBTUk9NLCAgdGhlIGZlYXR1cmUgaXMgIGlnbm9yZWQgdW5sZXNzICBscC0+cGFyYW1zLmZkeCAgaXMgc2V0IGF0IGNvbXBpbGUKKyAgICB0aW1lICBPUiBkdXJpbmcgIGEgICBtb2R1bGUgbG9hZCAgKGluc21vZCAgZGU0eDUgICBhcmdzPSdldGg/PzpmZHgnIFtzZWUKKyAgICBiZWxvd10pLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXJlICBpcyBubyB3YXkgIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGZ1bGwKKyAgICBkdXBsZXggICBsaW5rcyAgZXhjZXB0IHRocm91Z2ggICBhdXRvbmVnb3RpYXRpb24uICAgIFdoZW4gSSAgaW5jbHVkZSB0aGUKKyAgICBhdXRvbmVnb3RpYXRpb24gZmVhdHVyZSBpbiAgdGhlIFNST00gYXV0b2NvbmYgIGNvZGUsIHRoaXMgZGV0ZWN0aW9uIHdpbGwKKyAgICBvY2N1ciBhdXRvbWF0aWNhbGx5IGZvciB0aGF0IGNhc2UuCisKKyAgICBDb21tYW5kIGxpbmUgIGFyZ3VtZW50cyBhcmUgIG5vdyBhbGxvd2VkLCBzaW1pbGFyIHRvICBwYXNzaW5nICBhcmd1bWVudHMKKyAgICB0aHJvdWdoIExJTE8uIFRoaXMgd2lsbCBhbGxvdyBhIHBlciBhZGFwdGVyIGJvYXJkIHNldCAgdXAgb2YgZnVsbCBkdXBsZXgKKyAgICBhbmQgbWVkaWEuIFRoZSBvbmx5IGxleGljYWwgY29uc3RyYWludHMgYXJlOiAgdGhlIGJvYXJkIG5hbWUgKGRldi0+bmFtZSkKKyAgICBhcHBlYXJzIGluICB0aGUgbGlzdCBiZWZvcmUgaXRzIHBhcmFtZXRlcnMuICBUaGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGVuZHMKKyAgICBlaXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgcGFyYW1ldGVyIGxpc3Qgb3Igd2l0aCBhbm90aGVyIGJvYXJkIG5hbWUuICBUaGUKKyAgICBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYWxsb3dlZDoKKworICAgICAgICAgICAgZmR4ICAgICAgICBmb3IgZnVsbCBkdXBsZXgKKwkgICAgYXV0b3NlbnNlICB0byBzZXQgdGhlIG1lZGlhL3NwZWVkOyB3aXRoIHRoZSBmb2xsb3dpbmcgCisJICAgICAgICAgICAgICAgc3ViLXBhcmFtZXRlcnM6CisJCSAgICAgICBUUCwgVFBfTlcsIEJOQywgQVVJLCBCTkNfQVVJLCAxMDBNYiwgMTBNYiwgQVVUTworCisgICAgQ2FzZSBzZW5zaXRpdml0eSBpcyBpbXBvcnRhbnQgIGZvciAgdGhlIHN1Yi1wYXJhbWV0ZXJzLiBUaGV5ICptdXN0KiAgIGJlCisgICAgdXBwZXIgY2FzZS4gRXhhbXBsZXM6CisKKyAgICAgICAgaW5zbW9kIGRlNHg1IGFyZ3M9J2V0aDE6ZmR4IGF1dG9zZW5zZT1CTkMgZXRoMDphdXRvc2Vuc2U9MTAwTWInLgorCisgICAgRm9yIGEgY29tcGlsZWQgaW4gZHJpdmVyLCBpbiBsaW51eC9kcml2ZXJzL25ldC9DT05GSUcsIHBsYWNlIGUuZy4KKwlERTRYNV9PUFRTID0gLURERTRYNV9QQVJNPSciZXRoMDpmZHggYXV0b3NlbnNlPUFVSSBldGgyOmF1dG9zZW5zZT1UUCInIAorCisgICAgWWVzLCAgSSBrbm93IGZ1bGwgZHVwbGV4ICBpc24ndCBwZXJtaXNzaWJsZSBvbiBCTkMgIG9yIEFVSTsgdGhleSdyZSBqdXN0CisgICAgZXhhbXBsZXMuIEJ5IGRlZmF1bHQsIGZ1bGwgZHVwbGV4IGlzIHR1cm5lZCAgb2ZmIGFuZCBBVVRPIGlzIHRoZSBkZWZhdWx0CisgICAgYXV0b3NlbnNlIHNldHRpbmcuIEluICByZWFsaXR5LCBJIGV4cGVjdCBvbmx5IHRoZSAgZnVsbCBkdXBsZXggb3B0aW9uIHRvCisgICAgYmUgdXNlZC4gTm90ZSB0aGUgdXNlIG9mIHNpbmdsZSBxdW90ZXMgaW4gdGhlIHR3byBleGFtcGxlcyBhYm92ZSBhbmQgdGhlCisgICAgbGFjayBvZiBjb21tYXMgdG8gc2VwYXJhdGUgaXRlbXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YmQyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dApAQCAtMCwwICsxLDIzNCBAQAorICAgICAgICAgICAgICAgICAgICBMaW51eCBERUNuZXQgTmV0d29ya2luZyBMYXllciBJbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMSkgT3RoZXIgZG9jdW1lbnRhdGlvbi4uLi4KKworICAgbyBQcm9qZWN0IEhvbWUgUGFnZXMKKyAgICAgICBodHRwOi8vd3d3LmNoeWd3eW4uY29tL0RFQ25ldC8gICAgICAgICAgICAgICAgICAgICAgLSBLZXJuZWwgaW5mbworICAgICAgIGh0dHA6Ly9saW51eC1kZWNuZXQuc291cmNlZm9yZ2UubmV0LyAgICAgICAgICAgICAgICAtIFVzZXJsYW5kIHRvb2xzCisgICAgICAgaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZGVjbmV0LyAgIC0gU3RhdHVzIHBhZ2UKKworMikgQ29uZmlndXJpbmcgdGhlIGtlcm5lbAorCitCZSBzdXJlIHRvIHR1cm4gb24gdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICAgQ09ORklHX0RFQ05FVCAob2J2aW91c2x5KQorICAgIENPTkZJR19QUk9DX0ZTICh0byBzZWUgd2hhdCdzIGdvaW5nIG9uKQorICAgIENPTkZJR19TWVNDVEwgKGZvciBlYXN5IGNvbmZpZ3VyYXRpb24pCisKK2lmIHlvdSB3YW50IHRvIHRyeSBvdXQgcm91dGVyIHN1cHBvcnQgKG5vdCBwcm9wZXJseSBkZWJ1Z2dlZCB5ZXQpCit5b3UnbGwgbmVlZCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXMgd2VsbC4uLgorCisgICAgQ09ORklHX0RFQ05FVF9ST1VURVIgKHRvIGJlIGFibGUgdG8gYWRkL2RlbGV0ZSByb3V0ZXMpCisgICAgQ09ORklHX05FVEZJTFRFUiAod2lsbCBiZSByZXF1aXJlZCBmb3IgdGhlIERFQ25ldCByb3V0aW5nIGRhZW1vbikKKworICAgIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLIGlzIG9wdGlvbmFsCisKK0Rvbid0IHR1cm4gb24gU0lPQ0dJRkNPTkYgc3VwcG9ydCBmb3IgREVDbmV0IHVubGVzcyB5b3UgYXJlIHJlYWxseSBzdXJlCit0aGF0IHlvdSBuZWVkIGl0LCBpbiBnZW5lcmFsIHlvdSB3b24ndCBhbmQgaXQgY2FuIGNhdXNlIGlmY29uZmlnIHRvCittYWxmdW5jdGlvbi4KKworUnVuIHRpbWUgY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZCBzbGlnaHRseSBmcm9tIHRoZSAyLjQgc3lzdGVtLiBJZiB5b3UKK3dhbnQgdG8gY29uZmlndXJlIGFuIGVuZG5vZGUsIHRoZW4gdGhlIHNpbXBsaWZpZWQgcHJvY2VkdXJlIGlzIGFzIGZvbGxvd3M6CisKKyBvIFNldCB0aGUgTUFDIGFkZHJlc3Mgb24geW91ciBldGhlcm5ldCBjYXJkIGJlZm9yZSBzdGFydGluZyBfYW55XyBvdGhlcgorICAgbmV0d29yayBwcm90b2NvbHMuCisKK0FzIHNvb24gYXMgeW91ciBuZXR3b3JrIGNhcmQgaXMgYnJvdWdodCBpbnRvIHRoZSBVUCBzdGF0ZSwgREVDbmV0IHNob3VsZAorc3RhcnQgd29ya2luZy4gSWYgeW91IG5lZWQgc29tZXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgb3IgYXJlIHVuc3VyZSBob3cKK3RvIHNldCB0aGUgTUFDIGFkZHJlc3MsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLiBBbHNvIGFsbCBjb25maWd1cmF0aW9ucyB3aGljaAord29ya2VkIHdpdGggMi40IHdpbGwgd29yayB1bmRlciAyLjUgd2l0aCBubyBjaGFuZ2UuCisKKzMpIENvbW1hbmQgbGluZSBvcHRpb25zCisKK1lvdSBjYW4gc2V0IGEgREVDbmV0IGFkZHJlc3Mgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggdGhlIDIuNCBjb25maWd1cmF0aW9uIHByb2NlZHVyZSwgYnV0IGluIGdlbmVyYWwgaXQncyBub3QgbmVlZGVkIGFueSBtb3JlLgorSWYgeW91IGRvIHN0IGEgREVDbmV0IGFkZHJlc3Mgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgaGFzIG9ubHkgb25lIHB1cnBvc2UKK3doaWNoIGlzIHRoYXQgaXRzIGFkZGVkIHRvIHRoZSBhZGRyZXNzZXMgb24gdGhlIGxvb3BiYWNrIGRldmljZS4KKworV2l0aCAyLjQga2VybmVscywgREVDbmV0IHdvdWxkIG9ubHkgcmVjb2duaXNlIGFkZHJlc3NlcyBhcyBsb2NhbCBpZiB0aGV5Cit3ZXJlIGFkZGVkIHRvIHRoZSBsb29wYmFjayBkZXZpY2UuIEluIDIuNSwgYW55IGxvY2FsIGludGVyZmFjZSBhZGRyZXNzCitjYW4gYmUgdXNlZCB0byBsb29wIGJhY2sgdG8gdGhlIGxvY2FsIG1hY2hpbmUuIE9mIGNvdXJzZSB0aGlzIGRvZXMgbm90CitwcmV2ZW50IHlvdSBhZGRpbmcgZnVydGhlciBhZGRyZXNzZXMgdG8gdGhlIGxvb3BiYWNrIGRldmljZSBpZiB5b3UKK3dhbnQgdG8uCisKK04uQi4gU2luY2UgdGhlIGFkZHJlc3MgbGlzdCBvZiBhbiBpbnRlcmZhY2UgZGV0ZXJtaW5lcyB0aGUgYWRkcmVzc2VzIGZvcgord2hpY2ggImhlbGxvIiBtZXNzYWdlcyBhcmUgc2VudCwgaWYgeW91IGRvbid0IHNldCBhbiBhZGRyZXNzIG9uIHRoZSBsb29wYmFjaworaW50ZXJmYWNlIHRoZW4geW91IHdvbid0IHNlZSBhbnkgZW50cmllcyBpbiAvcHJvYy9uZXQvbmVpZ2ggZm9yIHRoZSBsb2NhbAoraG9zdCB1bnRpbCBzdWNoIHRpbWUgYXMgeW91IHN0YXJ0IGEgY29ubmVjdGlvbi4gVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUKK29wZXJhdGlvbiBvZiB0aGUgbG9jYWwgY29tbXVuaWNhdGlvbnMgaW4gYW55IG90aGVyIHdheSB0aG91Z2guCisKK1RoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRha2VzIG9wdGlvbnMgbG9va2luZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICBkZWNuZXQ9MSwyCisKK3RoZSB0d28gbnVtYmVycyBhcmUgdGhlIG5vZGUgYWRkcmVzcyAxLDIgPSAxLjIgRm9yIDIuMi54eCBrZXJuZWxzCithbmQgZWFybHkgMi4zLnh4IGtlcm5lbHMsIHlvdSBtdXN0IHVzZSBhIGNvbW1hIHdoZW4gc3BlY2lmeWluZyB0aGUKK0RFQ25ldCBhZGRyZXNzIGxpa2UgdGhpcy4gRm9yIG1vcmUgcmVjZW50IDIuMy54eCBrZXJuZWxzLCB5b3UgbWF5Cit1c2UgYWxtb3N0IGFueSBjaGFyYWN0ZXIgZXhjZXB0IHNwYWNlLCBhbHRob3VnaCBhIGAuYCB3b3VsZCBiZSB0aGUgbW9zdAorb2J2aW91cyBjaG9pY2UgOi0pCisKK1RoZXJlIHVzZWQgdG8gYmUgYSB0aGlyZCBudW1iZXIgc3BlY2lmeWluZyB0aGUgbm9kZSB0eXBlLiBUaGlzIG9wdGlvbgoraGFzIGdvbmUgYXdheSBpbiBmYXZvdXIgb2YgYSBwZXIgaW50ZXJmYWNlIG5vZGUgdHlwZS4gVGhpcyBpcyBub3cgc2V0Cit1c2luZyAvcHJvYy9zeXMvbmV0L2RlY25ldC9jb25mLzxkZXY+L2ZvcndhcmRpbmcuIFRoaXMgZmlsZSBjYW4gYmUKK3NldCB3aXRoIGEgc2luZ2xlIGRpZ2l0LCAwPUVuZE5vZGUsIDE9TDEgUm91dGVyIGFuZCAgMj1MMiBSb3V0ZXIuCisKK1RoZXJlIGFyZSBhbHNvIGVxdWl2YWxlbnQgb3B0aW9ucyBmb3IgbW9kdWxlcy4gVGhlIG5vZGUgYWRkcmVzcyBjYW4KK2Fsc28gYmUgc2V0IHRocm91Z2ggdGhlIC9wcm9jL3N5cy9uZXQvZGVjbmV0LyBmaWxlcywgYXMgY2FuIG90aGVyIHN5c3RlbQorcGFyYW1ldGVycy4KKworQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCBkZXZpY2VzIGFyZSBldGhlcm5ldCBhbmQgaXBfZ3JlLiBUaGUKK2V0aGVybmV0IGFkZHJlc3Mgb2YgeW91ciBldGhlcm5ldCBjYXJkIGhhcyB0byBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBERUNuZXQKK2FkZHJlc3Mgb2YgdGhlIG5vZGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIGF1dG9jb25maWd1cmVkIChhbmQgdGhlbiBhcHBlYXIgaW4KKy9wcm9jL25ldC9kZWNuZXRfZGV2KS4gVGhlcmUgaXMgYSB1dGlsaXR5IGF2YWlsYWJsZSBhdCB0aGUgYWJvdmUKK0ZUUCBzaXRlcyBjYWxsZWQgZG4yZXRoYWRkciB3aGljaCBjYW4gY29tcHV0ZSB0aGUgY29ycmVjdCBldGhlcm5ldAorYWRkcmVzcyB0byB1c2UuIFRoZSBhZGRyZXNzIGNhbiBiZSBzZXQgYnkgaWZjb25maWcgZWl0aGVyIGJlZm9yZSBhdAorYXQgdGhlIHRpbWUgdGhlIGRldmljZSBpcyBicm91Z2h0IHVwLiBJZiB5b3UgYXJlIHVzaW5nIFJlZEhhdCB5b3UgY2FuCithZGQgdGhlIGxpbmU6CisKKyAgICBNQUNBRERSPUFBOjAwOjA0OjAwOjAzOjA0CisKK29yIHNvbWV0aGluZyBzaW1pbGFyLCB0byAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoMCBvcgord2hlcmV2ZXIgeW91ciBuZXR3b3JrIGNhcmQncyBjb25maWd1cmF0aW9uIGxpdmVzLiBTZXR0aW5nIHRoZSBNQUMgYWRkcmVzcworb2YgeW91ciBldGhlcm5ldCBjYXJkIHRvIGFuIGFkZHJlc3Mgc3RhcnRpbmcgd2l0aCAiaGktb3JkIiB3aWxsIGNhdXNlIGEKK0RFQ25ldCBhZGRyZXNzIHdoaWNoIG1hdGNoZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGludGVyZmFjZSAod2hpY2ggeW91IGNhbgordmVyaWZ5IHdpdGggaXByb3V0ZTIpLgorCitUaGUgZGVmYXVsdCBkZXZpY2UgZm9yIHJvdXRpbmcgY2FuIGJlIHNldCB0aHJvdWdoIHRoZSAvcHJvYyBmaWxlc3lzdGVtCitieSBzZXR0aW5nIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2RlZmF1bHRfZGV2aWNlIHRvIHRoZQorZGV2aWNlIHlvdSB3YW50IERFQ25ldCB0byByb3V0ZSBwYWNrZXRzIG91dCBvZiB3aGVuIG5vIHNwZWNpZmljIHJvdXRlCitpcyBhdmFpbGFibGUuIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGV0aDAsIGZvciBleGFtcGxlOgorCisgICAgZWNobyAtbiAiZXRoMCIgPi9wcm9jL3N5cy9uZXQvZGVjbmV0L2RlZmF1bHRfZGV2aWNlCisKK0lmIHlvdSBkb24ndCBzZXQgdGhlIGRlZmF1bHQgZGV2aWNlLCB0aGVuIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZmlyc3QKK2V0aGVybmV0IGNhcmQgd2hpY2ggaGFzIGJlZW4gYXV0b2NvbmZpZ3VyZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBZb3UgY2FuCitjb25maXJtIHRoYXQgYnkgbG9va2luZyBpbiB0aGUgZGVmYXVsdF9kZXZpY2UgZmlsZSBvZiBjb3Vyc2UuCisKK1RoZXJlIGlzIGEgbGlzdCBvZiB3aGF0IHRoZSBvdGhlciBmaWxlcyB1bmRlciAvcHJvYy9zeXMvbmV0L2RlY25ldC8gZG8KK29uIHRoZSBrZXJuZWwgcGF0Y2ggd2ViIHNpdGUgKHNob3duIGFib3ZlKS4KKworNCkgUnVuIHRpbWUga2VybmVsIGNvbmZpZ3VyYXRpb24KKworVGhpcyBpcyBlaXRoZXIgZG9uZSB0aHJvdWdoIHRoZSBzeXNjdGwvcHJvYyBpbnRlcmZhY2UgKHNlZSB0aGUga2VybmVsIHdlYgorcGFnZXMgZm9yIGRldGFpbHMgb24gd2hhdCB0aGUgdmFyaW91cyBvcHRpb25zIGRvKSBvciB0aHJvdWdoIHRoZSBpcHJvdXRlMgorcGFja2FnZSBpbiB0aGUgc2FtZSB3YXkgYXMgSVB2NC82IGNvbmZpZ3VyYXRpb24gaXMgcGVyZm9ybWVkLgorCitEb2N1bWVudGF0aW9uIGZvciBpcHJvdXRlMiBpcyBpbmNsdWRlZCB3aXRoIHRoZSBwYWNrYWdlLCBhbHRob3VnaCB0aGVyZSBpcworYXMgeWV0IG5vIHNwZWNpZmljIHNlY3Rpb24gb24gREVDbmV0LCBtb3N0IG9mIHRoZSBmZWF0dXJlcyBhcHBseSB0byBib3RoCitJUCBhbmQgREVDbmV0LCBhbGJlaXQgd2l0aCBERUNuZXQgYWRkcmVzc2VzIGluc3RlYWQgb2YgSVAgYWRkcmVzc2VzIGFuZAorYSByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkuCisKK0lmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSBhIERFQ25ldCByb3V0ZXIgeW91J2xsIG5lZWQgdGhlIGlwcm91dGUyIHBhY2thZ2UKK3NpbmNlIGl0cyB0aGUgX29ubHlfIHdheSB0byBhZGQgYW5kIGRlbGV0ZSByb3V0ZXMgY3VycmVudGx5LiBFdmVudHVhbGx5Cit0aGVyZSB3aWxsIGJlIGEgcm91dGluZyBkYWVtb24gdG8gc2VuZCBhbmQgcmVjZWl2ZSByb3V0aW5nIG1lc3NhZ2VzIGZvcgorZWFjaCBpbnRlcmZhY2UgYW5kIHVwZGF0ZSB0aGUga2VybmVsIHJvdXRpbmcgdGFibGVzIGFjY29yZGluZ2x5LiBUaGUKK3JvdXRpbmcgZGFlbW9uIHdpbGwgdXNlIG5ldGZpbHRlciB0byBsaXN0ZW4gdG8gcm91dGluZyBwYWNrZXRzLCBhbmQKK3J0bmV0bGluayB0byB1cGRhdGUgdGhlIGtlcm5lbHMgcm91dGluZyB0YWJsZXMuIAorCitUaGUgREVDbmV0IHJhdyBzb2NrZXQgbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBzaW5jZSBpdCB3YXMgdGhlcmUgcHVyZWx5Citmb3IgdXNlIGJ5IHRoZSByb3V0aW5nIGRhZW1vbiB3aGljaCB3aWxsIG5vdyB1c2UgbmV0ZmlsdGVyIChhIG11Y2ggY2xlYW5lcgorYW5kIG1vcmUgZ2VuZXJpYyBzb2x1dGlvbikgaW5zdGVhZC4KKworNSkgSG93IGNhbiBJIHRlbGwgaWYgaXRzIHdvcmtpbmcgPworCitIZXJlIGlzIGEgcXVpY2sgZ3VpZGUgb2Ygd2hhdCB0byBsb29rIGZvciBpbiBvcmRlciB0byBrbm93IGlmIHlvdXIgREVDbmV0CitrZXJuZWwgc3Vic3lzdGVtIGlzIHdvcmtpbmcuCisKKyAgIC0gSXMgdGhlIG5vZGUgYWRkcmVzcyBzZXQgKHNlZSAvcHJvYy9zeXMvbmV0L2RlY25ldC9ub2RlX2FkZHJlc3MpCisgICAtIElzIHRoZSBub2RlIG9mIHRoZSBjb3JyZWN0IHR5cGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgL3Byb2Mvc3lzL25ldC9kZWNuZXQvY29uZi88ZGV2Pi9mb3J3YXJkaW5nKQorICAgLSBJcyB0aGUgRXRoZXJuZXQgTUFDIGFkZHJlc3Mgb2YgZWFjaCBFdGhlcm5ldCBjYXJkIHNldCB0byBtYXRjaAorICAgICB0aGUgREVDbmV0IGFkZHJlc3MuIElmIGluIGRvdWJ0IHVzZSB0aGUgZG4yZXRoYWRkciB1dGlsaXR5IGF2YWlsYWJsZQorICAgICBhdCB0aGUgZnRwIGFyY2hpdmUuCisgICAtIElmIHRoZSBwcmV2aW91cyB0d28gc3RlcHMgYXJlIHNhdGlzZmllZCwgYW5kIHRoZSBFdGhlcm5ldCBjYXJkIGlzIHVwLAorICAgICB5b3Ugc2hvdWxkIGZpbmQgdGhhdCBpdCBpcyBsaXN0ZWQgaW4gL3Byb2MvbmV0L2RlY25ldF9kZXYgYW5kIGFsc28KKyAgICAgdGhhdCBpdCBhcHBlYXJzIGFzIGEgZGlyZWN0b3J5IGluIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2NvbmYvLiBUaGUKKyAgICAgbG9vcGJhY2sgZGV2aWNlIChsbykgc2hvdWxkIGFsc28gYXBwZWFyIGFuZCBpcyByZXF1aXJlZCB0byBjb21tdW5pY2F0ZQorICAgICB3aXRoaW4gYSBub2RlLgorICAgLSBJZiB5b3UgaGF2ZSBhbnkgREVDbmV0IHJvdXRlcnMgb24geW91ciBuZXR3b3JrLCB0aGV5IHNob3VsZCBhcHBlYXIKKyAgICAgaW4gL3Byb2MvbmV0L2RlY25ldF9uZWlnaCwgb3RoZXJ3aXNlIHRoaXMgZmlsZSB3aWxsIG9ubHkgY29udGFpbiB0aGUKKyAgICAgZW50cnkgZm9yIHRoZSBub2RlIGl0c2VsZiAoaWYgaXQgZG9lc24ndCBjaGVjayB0byBzZWUgaWYgbG8gaXMgdXApLgorICAgLSBJZiB5b3Ugd2FudCB0byBzZW5kIHRvIGFueSBub2RlIHdoaWNoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlCisgICAgIC9wcm9jL25ldC9kZWNuZXRfbmVpZ2ggZmlsZSwgeW91J2xsIG5lZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGRldmljZQorICAgICB0byBwb2ludCB0byBhbiBFdGhlcm5ldCBjYXJkIHdpdGggY29ubmVjdGlvbiB0byBhIHJvdXRlci4gVGhpcyBpcworICAgICBhZ2FpbiBkb25lIHdpdGggdGhlIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2RlZmF1bHRfZGV2aWNlIGZpbGUuCisgICAtIFRyeSBzdGFydGluZyBhIHNpbXBsZSBzZXJ2ZXIgYW5kIGNsaWVudCwgbGlrZSB0aGUgZG5waW5nL2RubWlycm9yCisgICAgIG92ZXIgdGhlIGxvb3BiYWNrIGludGVyZmFjZS4gV2l0aCBsdWNrIHRoZXkgc2hvdWxkIGNvbW11bmljYXRlLgorICAgICBGb3IgdGhpcyBzdGVwIGFuZCB0aG9zZSBhZnRlciwgeW91J2xsIG5lZWQgdGhlIERFQ25ldCBsaWJyYXJ5CisgICAgIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBhYm92ZSBmdHAgc2l0ZXMgYXMgd2VsbCBhcyB0aGUKKyAgICAgYWN0dWFsIHV0aWxpdGllcyB0aGVtc2VsdmVzLgorICAgLSBJZiB0aGlzIHNlZW1zIHRvIHdvcmssIHRoZW4gdHJ5IHRhbGtpbmcgdG8gYSBub2RlIG9uIHlvdXIgbG9jYWwKKyAgICAgbmV0d29yaywgYW5kIHNlZSBpZiB5b3UgY2FuIG9idGFpbiB0aGUgc2FtZSByZXN1bHRzLgorICAgLSBBdCB0aGlzIHBvaW50IHlvdSBhcmUgb24geW91ciBvd24uLi4gOi0pCisKKzYpIEhvdyB0byBzZW5kIGEgYnVnIHJlcG9ydAorCitJZiB5b3UndmUgZm91bmQgYSBidWcgYW5kIHdhbnQgdG8gcmVwb3J0IGl0LCB0aGVuIHRoZXJlIGFyZSBzZXZlcmFsIHRoaW5ncworeW91IGNhbiBkbyB0byBoZWxwIG1lIHdvcmsgb3V0IGV4YWN0bHkgd2hhdCBpdCBpcyB0aGF0IGlzIHdyb25nLiBVc2VmdWwKK2luZm9ybWF0aW9uIChfbW9zdF8gb2Ygd2hpY2ggX2lzXyBfZXNzZW50aWFsXykgaW5jbHVkZXM6CisKKyAtIFdoYXQga2VybmVsIHZlcnNpb24gYXJlIHlvdSBydW5uaW5nID8KKyAtIFdoYXQgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggYXJlIHlvdSBydW5uaW5nID8KKyAtIEhvdyBmYXIgdGhvdWdoIHRoZSBhYm92ZSBzZXQgb2YgdGVzdHMgY2FuIHlvdSBnZXQgPworIC0gV2hhdCBpcyBpbiB0aGUgL3Byb2MvZGVjbmV0KiBmaWxlcyBhbmQgL3Byb2Mvc3lzL25ldC9kZWNuZXQvKiBmaWxlcyA/CisgLSBXaGljaCBzZXJ2aWNlcyBhcmUgeW91IHJ1bm5pbmcgPworIC0gV2hpY2ggY2xpZW50IGNhdXNlZCB0aGUgcHJvYmxlbSA/CisgLSBIb3cgbXVjaCBkYXRhIHdhcyBiZWluZyB0cmFuc2ZlcnJlZCA/CisgLSBXYXMgdGhlIG5ldHdvcmsgY29uZ2VzdGVkID8KKyAtIElmIHRoZXJlIHdhcyBhIGtlcm5lbCBwYW5pYywgcGxlYXNlIHJ1biB0aGUgb3V0cHV0IHRocm91Z2gga3N5bW9vcHMKKyAgIGJlZm9yZSBzZW5kaW5nIGl0IHRvIG1lLCBvdGhlcndpc2UgaXRzIF91c2VsZXNzXy4KKyAtIEhvdyBjYW4gdGhlIHByb2JsZW0gYmUgcmVwcm9kdWNlZCA/CisgLSBDYW4geW91IHVzZSB0Y3BkdW1wIHRvIGdldCBhIHRyYWNlID8gKE4uQi4gTW9zdCAoYWxsPykgdmVyc2lvbnMgb2YgCisgICB0Y3BkdW1wIGRvbid0IHVuZGVyc3RhbmQgaG93IHRvIGR1bXAgREVDbmV0IHByb3Blcmx5LCBzbyBpbmNsdWRpbmcKKyAgIHRoZSBoZXggbGlzdGluZyBvZiB0aGUgcGFja2V0IGNvbnRlbnRzIGlzIF9lc3NlbnRpYWxfLCB1c3VhbGx5IHRoZSAteCBmbGFnLgorICAgWW91IG1heSBhbHNvIG5lZWQgdG8gaW5jcmVhc2UgdGhlIGxlbmd0aCBncmFiYmVkIHdpdGggdGhlIC1zIGZsYWcuIFRoZQorICAgLWUgZmxhZyBhbHNvIHByb3ZpZGVzIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIChldGhlcm5ldCBNQUMgYWRkcmVzc2VzKSkKKworNykgTUFDIEZBUQorCitBIHF1aWNrIEZBUSBvbiBldGhlcm5ldCBNQUMgYWRkcmVzc2VzIHRvIGV4cGxhaW4gaG93IExpbnV4IGFuZCBERUNuZXQKK2ludGVyYWN0IGFuZCBob3cgdG8gZ2V0IHRoZSBiZXN0IHBlcmZvcm1hbmNlIGZyb20geW91ciBoYXJkd2FyZS4gCisKK0V0aGVybmV0IGNhcmRzIGFyZSBkZXNpZ25lZCB0byBub3JtYWxseSBvbmx5IHBhc3MgcmVjZWl2ZWQgbmV0d29yayBmcmFtZXMgCit0byBhIGhvc3QgY29tcHV0ZXIgd2hlbiB0aGV5IGFyZSBhZGRyZXNzZWQgdG8gaXQsIG9yIHRvIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKworTGludXggaGFzIGFuIGludGVyZmFjZSB3aGljaCBhbGxvd3MgdGhlIHNldHRpbmcgb2YgZXh0cmEgYWRkcmVzc2VzIGZvcgorYW4gZXRoZXJuZXQgY2FyZCB0byBsaXN0ZW4gdG8uIElmIHRoZSBldGhlcm5ldCBjYXJkIHN1cHBvcnRzIGl0LCB0aGUKK2ZpbHRlcmluZyBvcGVyYXRpb24gd2lsbCBiZSBkb25lIGluIGhhcmR3YXJlLCBpZiBub3QgdGhlIGV4dHJhIHVud2FudGVkIHBhY2tldHMKK3JlY2VpdmVkIHdpbGwgYmUgZGlzY2FyZGVkIGJ5IHRoZSBob3N0IGNvbXB1dGVyLiBJbiB0aGUgbGF0dGVyIGNhc2UsCitzaWduaWZpY2FudCBwcm9jZXNzb3IgdGltZSBhbmQgYnVzIGJhbmR3aWR0aCBjYW4gYmUgdXNlZCB1cCBvbiBhIGJ1c3kKK25ldHdvcmsgKHNlZSB0aGUgTkFQSSBkb2N1bWVudGF0aW9uIGZvciBhIGxvbmdlciBleHBsYW5hdGlvbiBvZiB0aGVzZQorZWZmZWN0cykuCisKK0RFQ25ldCBtYWtlcyB1c2Ugb2YgdGhpcyBpbnRlcmZhY2UgdG8gYWxsb3cgcnVubmluZyBERUNuZXQgb24gYW4gZXRoZXJuZXQgCitjYXJkIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gY29uZmlndXJlZCB1c2luZyBUQ1AvSVAgKHByZXN1bWFibHkgdXNpbmcgdGhlIAorYnVpbHQgaW4gTUFDIGFkZHJlc3Mgb2YgdGhlIGNhcmQsIGFzIHVzdWFsKSBhbmQvb3IgdG8gYWxsb3cgbXVsdGlwbGUgREVDbmV0CithZGRyZXNzZXMgb24gZWFjaCBwaHlzaWNhbCBpbnRlcmZhY2UuIElmIHlvdSBkbyB0aGlzLCBiZSBhd2FyZSB0aGF0IGlmIHlvdXIKK2V0aGVybmV0IGNhcmQgZG9lc24ndCBzdXBwb3J0IHBlcmZlY3QgaGFzaGluZyBpbiBpdHMgTUFDIGFkZHJlc3MgZmlsdGVyCit0aGVuIHlvdXIgY29tcHV0ZXIgd2lsbCBiZSBkb2luZyBtb3JlIHdvcmsgdGhhbiByZXF1aXJlZC4gU29tZSBjYXJkcword2lsbCBzaW1wbHkgc2V0IHRoZW1zZWx2ZXMgaW50byBwcm9taXNjdW91cyBtb2RlIGluIG9yZGVyIHRvIHJlY2VpdmUKK3BhY2tldHMgZnJvbSB0aGUgREVDbmV0IHNwZWNpZmllZCBhZGRyZXNzZXMuIFNvIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZQorY2FyZHMgaXRzIGJldHRlciB0byBzZXQgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBjYXJkIGFzIGRlc2NyaWJlZCBhYm92ZQordG8gZ2FpbiB0aGUgYmVzdCBlZmZpY2llbmN5LiBCZXR0ZXIgc3RpbGwgaXMgdG8gdXNlIGEgY2FyZCB3aGljaCBzdXBwb3J0cworTkFQSSBhcyB3ZWxsLgorCisKKzgpIE1haWxpbmcgbGlzdAorCitJZiB5b3UgYXJlIGtlZW4gdG8gZ2V0IGludm9sdmVkIGluIGRldmVsb3BtZW50LCBvciB3YW50IHRvIGFzayBxdWVzdGlvbnMKK2Fib3V0IGNvbmZpZ3VyYXRpb24sIG9yIGV2ZW4ganVzdCByZXBvcnQgYnVncywgdGhlbiB0aGVyZSBpcyBhIG1haWxpbmcKK2xpc3QgdGhhdCB5b3UgY2FuIGpvaW4sIGRldGFpbHMgYXJlIGF0OgorCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWwvP2dyb3VwX2lkPTQ5OTMKKworOSkgTGVnYWwgSW5mbworCitUaGUgTGludXggREVDbmV0IHByb2plY3QgdGVhbSBoYXZlIHBsYWNlZCB0aGVpciBjb2RlIHVuZGVyIHRoZSBHUEwuIFRoZQorc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiBhbmQgd2l0aG91dCB3YXJyYW50eSBleHByZXNzIG9yIGltcGxpZWQuCitERUNuZXQgaXMgYSB0cmFkZW1hcmsgb2YgQ29tcGFxLiBUaGlzIHNvZnR3YXJlIGlzIG5vdCBhIHByb2R1Y3Qgb2YKK0NvbXBhcS4gV2UgYWNrbm93bGVkZ2UgdGhlIGhlbHAgb2YgcGVvcGxlIGF0IENvbXBhcSBpbiBwcm92aWRpbmcgZXh0cmEKK2RvY3VtZW50YXRpb24gYWJvdmUgYW5kIGJleW9uZCB3aGF0IHdhcyBwcmV2aW91c2x5IHB1YmxpY2x5IGF2YWlsYWJsZS4KKworU3RldmUgV2hpdGVob3VzZSA8U3RldmVXQEFDTS5vcmc+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXBjYS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVwY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzZiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVwY2EudHh0CkBAIC0wLDAgKzEsOTIgQEAKKworREUxMHgKKz09PT09CisKK01lbW9yeSBBZGRyZXNzZXM6CisKKwlTVzEJU1cyCVNXMwlTVzQKKzY0SwlvbglvbglvbglvbglkMDAwMAlkYmZmZgorCW9mZglvbglvbglvbgljMDAwMAljYmZmZgorCW9mZglvZmYJb24Jb24JZTAwMDAJZWJmZmYKKworMzJLCW9uCW9uCW9mZglvbglkODAwMAlkYmZmZgorCW9mZglvbglvZmYJb24JYzgwMDAJY2JmZmYKKwlvZmYJb2ZmCW9mZglvbgllODAwMAllYmZmZgorCitEQlIgUk9NCW9uCW9uCQkJZGMwMDAJZGZmZmYKKwlvZmYJb24JCQljYzAwMAljZmZmZgorCW9mZglvZmYJCQllYzAwMAllZmZmZgorCitOb3RlICB0aGF0IHRoZSAySyAgbW9kZSAgIGlzIHNldCAgYnkgICBTVzMvU1c0ICBvbi9vZmYgb3IgIG9mZi9vZmYuICBBZGRyZXNzCithc3NpZ25tZW50IGlzIHRocm91Z2ggdGhlIFJCU0EgcmVnaXN0ZXIuCisKK0kvTyBBZGRyZXNzOgorCVNXNQorMHgzMDAJb24KKzB4MjAwCW9mZgorCitSZW1vdGUgQm9vdDoKKwlTVzYKK0Rpc2FibGUJb24KK0VuYWJsZQlvZmYKKworUmVtb3RlIEJvb3QgVGltZW91dDoKKwlTVzcKKzIuNW1pbglvbgorMzBzCW9mZgorCitJUlE6CisJU1c4CVNXOQlTVzEwCVNXMTEJU1cxMgorMglvbglvZmYJb2ZmCW9mZglvZmYKKzMJb2ZmCW9uCW9mZglvZmYJb2ZmCis0CW9mZglvZmYJb24Jb2ZmCW9mZgorNQlvZmYJb2ZmCW9mZglvbglvZmYKKzcJb2ZmCW9mZglvZmYJb2ZmCW9uCisKK0RFMjB4Cis9PT09PQorCitNZW1vcnkgU2l6ZToKKworCVNXMwlTVzQKKzY0SwlvbglvbgorMzJLCW9mZglvbgorMksJb24gCW9mZgorMksJb2ZmCW9mZgorCitTdGFydCBBZGRyZXNzZXM6CisKKwlTVzEJU1cyCVNXMwlTVzQKKzY0SwlvbglvbglvbglvbgljMDAwMAljZmZmZgorCW9uCW9mZglvbglvbglkMDAwMAlkZmZmZgorCW9mZglvbglvbglvbgllMDAwMAllZmZmZgorCiszMksJb24Jb24Jb2ZmCW9mZgljODAwMAljZmZmZgorCW9uCW9mZglvZmYJb2ZmCWQ4MDAwCWRmZmZmCisJb2ZmCW9uCW9mZglvZmYJZTgwMDAJZWZmZmYKKworSWxsZWdhbAlvZmYJb2ZmCSAtCSAtCSAgLQkgIC0KKworSS9PIEFkZHJlc3M6CisJU1c1CisweDMwMAlvbgorMHgyMDAJb2ZmCisKK1JlbW90ZSBCb290OgorCVNXNgorRGlzYWJsZQlvbgorRW5hYmxlCW9mZgorCitSZW1vdGUgQm9vdCBUaW1lb3V0OgorCVNXNworMi41bWluCW9uCiszMHMJb2ZmCisKK0lSUToKKwlTVzgJU1c5CVNXMTAJU1cxMQlTVzEyCis1CW9uCW9mZglvZmYJb2ZmCW9mZgorOQlvZmYJb24Jb2ZmCW9mZglvZmYKKzEwCW9mZglvZmYJb24Jb2ZmCW9mZgorMTEJb2ZmCW9mZglvZmYJb24Jb2ZmCisxNQlvZmYJb2ZmCW9mZglvZmYJb24KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RncnMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RncnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTFiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGdycy50eHQKQEAgLTAsMCArMSw1MiBAQAorICAgIFRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWCAoZGdycykgRGV2aWNlIERyaXZlcgorCitUaGlzIGlzIGEgTGludXggZHJpdmVyIGZvciB0aGUgRGlnaSBJbnRlcm5hdGlvbmFsIFJpZ2h0U3dpdGNoIFNFLVgKK0VJU0EgYW5kIFBDSSBib2FyZHMuICBUaGVzZSBhcmUgNCAoRUlTQSkgb3IgNiAoUENJKSBwb3J0IEV0aGVybmV0Citzd2l0Y2hlcyBhbmQgYSBOSUMgY29tYmluZWQgaW50byBhIHNpbmdsZSBib2FyZC4gIFRoaXMgZHJpdmVyIGNhbgorYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHN0YXRpY2FsbHkgb3IgYXMgYSBsb2FkYWJsZSBtb2R1bGUuCisKK1RoZXJlIGlzIGFsc28gYSBjb21wYW5pb24gbWFuYWdlbWVudCB0b29sLCBjYWxsZWQgInhyaWdodHN3aXRjaCIuCitUaGUgbWFuYWdlbWVudCB0b29sIGxldHMgeW91IHdhdGNoIHRoZSBwZXJmb3JtYW5jZSBncmFwaGljYWxseSwKK2FzIHdlbGwgYXMgc2V0IHRoZSBTTk1QIGFnZW50IElQIGFuZCBJUFggYWRkcmVzc2VzLCBJRUVFIFNwYW5uaW5nCitUcmVlLCBhbmQgQWdpbmcgdGltZS4gIFRoZXNlIGNhbiBhbHNvIGJlIHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKK3doZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQuICBUaGUgZHJpdmVyIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZToKKworCWRlYnVnPU5OTgkJRGVidWcgcHJpbnRpbmcgbGV2ZWwKKwlkbWE9MC8xCQkJRGlzYWJsZS9FbmFibGUgRE1BIG9uIFBDSSBjYXJkCisJc3BhbnRyZWU9MC8xCQlEaXNhYmxlL0VuYWJsZSBJRUVFIHNwYW5uaW5nIHRyZWUKKwloYXNoZXhwaXJlPU5OTgkJQ2hhbmdlIGFkZHJlc3MgYWdpbmcgdGltZSAoZGVmYXVsdCAzMDAgc2Vjb25kcykKKwlpcGFkZHI9QSxCLEMsRAkJU2V0IFNOTVAgYWdlbnQgSVAgYWRkcmVzcyBpLmUuIDE5OSw4Niw4LDIyMQorCWlwdHJhcD1BLEIsQyxECQlTZXQgU05NUCBhZ2VudCBJUCB0cmFwIGFkZHJlc3MgaS5lLiAxOTksODYsOCwyMjEKKwlpcHhuZXQ9Tk5OCQlTZXQgU05NUCBhZ2VudCBJUFggbmV0d29yayBudW1iZXIKKwluaWNtb2RlPTAvMQkJRGlzYWJsZS9FbmFibGUgbXVsdGlwbGUgTklDIG1vZGUKKworVGhlcmUgaXMgYWxzbyBhIHRvb2wgZm9yIHNldHRpbmcgdXAgaW5wdXQgYW5kIG91dHB1dCBwYWNrZXQgZmlsdGVycworb24gZWFjaCBwb3J0LCBjYWxsZWQgImRncnNmaWx0Ii4KKworQm90aCB0aGUgbWFuYWdlbWVudCB0b29sIGFuZCB0aGUgZmlsdGVyaW5nIHRvb2wgYXJlIGF2YWlsYWJsZQorc2VwYXJhdGVseSBmcm9tIHRoZSBmb2xsb3dpbmcgRlRQIHNpdGU6CisKKwlmdHA6Ly9mdHAuZGdpaS5jb20vZHJpdmVycy9yaWdodHN3aXRjaC9saW51eC8KKworV2hlbiBuaWNtb2RlPTEsIHRoZSBib2FyZCBhbmQgZHJpdmVyIG9wZXJhdGUgYXMgNCBvciA2IGluZGl2aWR1YWwKK05JQyBwb3J0cyAoZXRoMC4uLmV0aDUpIGluc3RlYWQgb2YgYXMgYSBzd2l0Y2guICBBbGwgc3dpdGNoaW5nCitmdW5jdGlvbnMgYXJlIGRpc2FibGVkLiAgSW4gdGhlIGZ1dHVyZSwgdGhlIGJvYXJkIGZpcm13YXJlIG1heSBpbmNsdWRlCithIHJvdXRpbmcgY2FjaGUgd2hlbiBpbiB0aGlzIG1vZGUuCisKK0NvcHlyaWdodCAxOTk1LTE5OTYgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworRm9yIGluZm9ybWF0aW9uIG9uIHB1cmNoYXNpbmcgYSBSaWdodFN3aXRjaCBTRS00IG9yIFNFLTYKK2JvYXJkLCBwbGVhc2UgY29udGFjdCBEaWdpJ3Mgc2FsZXMgZGVwYXJ0bWVudCBhdCAxLTYxMi05MTItMzQ0NAorb3IgMS04MDAtRElHSUJSRC4gIE91dHNpZGUgdGhlIFUuUy4sIHBsZWFzZSBjaGVjayBvdXIgV2ViIHBhZ2UgYXQ6CisKKwlodHRwOi8vd3d3LmRnaWkuY29tCisKK2ZvciBzYWxlcyBvZmZpY2VzIHdvcmxkd2lkZS4gIFRlY2ggc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoCit0aGUgY2hhbm5lbHMgbGlzdGVkIG9uIHRoZSBXZWIgc2l0ZSwgYWx0aG91Z2ggYXMgbG9uZyBhcyBJIGFtCitlbXBsb3llZCBvbiBuZXR3b3JraW5nIHByb2R1Y3RzIGF0IERpZ2kgSSB3aWxsIGJlIGhhcHB5IHRvIHByb3ZpZGUKK2FueSBidWcgZml4ZXMgdGhhdCBtYXkgYmUgbmVlZGVkLgorCistUmljayBSaWNoYXJkc29uLCByaWNrQGRnaWkuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGwyay50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGwyay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2MDQ5MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbDJrLnR4dApAQCAtMCwwICsxLDI4MSBAQAorCisgICAgRC1MaW5rIERMMjAwMC1iYXNlZCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgSW5zdGFsbGF0aW9uCisgICAgZm9yIExpbnV4CisgICAgTWF5IDIzLCAyMDAyCisKK0NvbnRlbnRzCis9PT09PT09PQorIC0gQ29tcGF0aWJpbGl0eSBMaXN0CisgLSBRdWljayBJbnN0YWxsCisgLSBDb21waWxpbmcgdGhlIERyaXZlcgorIC0gSW5zdGFsbGluZyB0aGUgRHJpdmVyCisgLSBPcHRpb24gcGFyYW1ldGVyCisgLSBDb25maWd1cmF0aW9uIFNjcmlwdCBTYW1wbGUKKyAtIFRyb3VibGVzaG9vdGluZworCisKK0NvbXBhdGliaWxpdHkgTGlzdAorPT09PT09PT09PT09PT09PT0KK0FkYXB0ZXIgU3VwcG9ydDoKKworRC1MaW5rIERHRS01NTBUIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlci4KK0QtTGluayBER0UtNTUwU1ggR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyLgorRC1MaW5rIERMMjAwMC1iYXNlZCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIuCisKKworVGhlIGRyaXZlciBzdXBwb3J0IExpbnV4IGtlcm5lbCAyLjQuNyBsYXRlci4gV2UgaGFkIHRlc3RlZCBpdAorb24gdGhlIGVudmlyb25tZW50cyBiZWxvdy4KKworIC4gUmVkIEhhdCB2Ni4yICh1cGRhdGUga2VybmVsIHRvIDIuNC43KQorIC4gUmVkIEhhdCB2Ny4wICh1cGRhdGUga2VybmVsIHRvIDIuNC43KQorIC4gUmVkIEhhdCB2Ny4xIChrZXJuZWwgMi40LjcpCisgLiBSZWQgSGF0IHY3LjIgKGtlcm5lbCAyLjQuNy0xMCkKKworCitRdWljayBJbnN0YWxsCis9PT09PT09PT09PT09CitJbnN0YWxsIGxpbnV4IGRyaXZlciBhcyBmb2xsb3dpbmcgY29tbWFuZDoKKworMS4gbWFrZSBhbGwKKzIuIGluc21vZCBkbDJrLmtvCiszLiBpZmNvbmZpZyBldGgwIHVwIDEwLnh4eC54eHgueHh4IG5ldG1hc2sgMjU1LjAuMC4wCisJCSAgICBeXl5eXl5eXl5eXl5eXl5cCSAgICBeXl5eXl5eXlwKKwkJCQkgICAgSVAJCSAgICAgTkVUTUFTSworTm93IGV0aDAgc2hvdWxkIGFjdGl2ZSwgeW91IGNhbiB0ZXN0IGl0IGJ5ICJwaW5nIiBvciBnZXQgbW9yZSBpbmZvcm1hdGlvbiBieQorImlmY29uZmlnIi4gSWYgdGVzdGVkIG9rLCBjb250aW51ZSB0aGUgbmV4dCBzdGVwLgorCis0LiBjcCBkbDJrLmtvIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2tlcm5lbC9kcml2ZXJzL25ldAorNS4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmY6CisJYWxpYXMgZXRoMCBkbDJrCis2LiBSdW4gIm5ldGNvbmZpZyIgb3IgIm5ldGNvbmYiIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIHNjcmlwdCBpZmNmZy1ldGgwCisgICBsb2NhdGVkIGF0IC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cyBvciBjcmVhdGUgaXQgbWFudWFsbHkuCisgICBbc2VlIC0gQ29uZmlndXJhdGlvbiBTY3JpcHQgU2FtcGxlXQorNy4gRHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBsb2FkIGFuZCBjb25maWd1cmUgYXQgbmV4dCBib290IHRpbWUuCisKK0NvbXBpbGluZyB0aGUgRHJpdmVyCis9PT09PT09PT09PT09PT09PT09PQorICBJbiBMaW51eCwgTklDIGRyaXZlcnMgYXJlIG1vc3QgY29tbW9ubHkgY29uZmlndXJlZCBhcyBsb2FkYWJsZSBtb2R1bGVzLgorVGhlIGFwcHJvYWNoIG9mIGJ1aWxkaW5nIGEgbW9ub2xpdGhpYyBrZXJuZWwgaGFzIGJlY29tZSBvYnNvbGV0ZS4gVGhlIGRyaXZlcgorY2FuIGJlIGNvbXBpbGVkIGFzIHBhcnQgb2YgYSBtb25vbGl0aGljIGtlcm5lbCwgYnV0IGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLgorVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gYXNzdW1lcyB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbG9hZGFibGUgbW9kdWxlLgorSW4gdGhlIExpbnV4IGVudmlyb25tZW50LCBpdCBpcyBhIGdvb2QgaWRlYSB0byByZWJ1aWxkIHRoZSBkcml2ZXIgZnJvbSB0aGUKK3NvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBwcmVjb21waWxlZCB2ZXJzaW9uLiBUaGlzIGFwcHJvYWNoIHByb3ZpZGVzCitiZXR0ZXIgcmVsaWFiaWxpdHkgc2luY2UgYSBwcmVjb21waWxlZCBkcml2ZXIgbWlnaHQgZGVwZW5kIG9uIGxpYnJhcmllcyBvcgora2VybmVsIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIGEgZ2l2ZW4gTGludXggaW5zdGFsbGF0aW9uLgorCitUaGUgMyBmaWxlcyBuZWNlc3NhcnkgdG8gYnVpbGQgTGludXggZGV2aWNlIGRyaXZlciBhcmUgZGwyay5jLCBkbDJrLmggYW5kCitNYWtlZmlsZS4gVG8gY29tcGlsZSwgdGhlIExpbnV4IGluc3RhbGxhdGlvbiBtdXN0IGluY2x1ZGUgdGhlIGdjYyBjb21waWxlciwKK3RoZSBrZXJuZWwgc291cmNlLCBhbmQgdGhlIGtlcm5lbCBoZWFkZXJzLiBUaGUgTGludXggZHJpdmVyIHN1cHBvcnRzIExpbnV4CitLZXJuZWxzIDIuNC43LiBDb3B5IHRoZSBmaWxlcyB0byBhIGRpcmVjdG9yeSBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCit0byBjb21waWxlIGFuZCBsaW5rIHRoZSBkcml2ZXI6CisKK0NELVJPTSBkcml2ZQorLS0tLS0tLS0tLS0tCisKK1tyb290QFhYWCAvXSBta2RpciBjZHJvbQorW3Jvb3RAWFhYIC9dIG1vdW50IC1yIC10IGlzbzk2NjAgLW8gY29udj1hdXRvIC9kZXYvY2Ryb20gL2Nkcm9tCitbcm9vdEBYWFggL10gY2Qgcm9vdAorW3Jvb3RAWFhYIC9yb290XSBta2RpciBkbDJrCitbcm9vdEBYWFggL3Jvb3RdIGNkIGRsMmsKK1tyb290QFhYWCBkbDJrXSBjcCAvY2Ryb20vbGludXgvZGwyay50Z3ogL3Jvb3QvZGwyaworW3Jvb3RAWFhYIGRsMmtdIHRhciB4ZnZ6IGRsMmsudGd6Citbcm9vdEBYWFggZGwya10gbWFrZSBhbGwKKworRmxvcHB5IGRpc2MgZHJpdmUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1tyb290QFhYWCAvXSBjZCByb290Citbcm9vdEBYWFggL3Jvb3RdIG1rZGlyIGRsMmsKK1tyb290QFhYWCAvcm9vdF0gY2QgZGwyaworW3Jvb3RAWFhYIGRsMmtdIG1jb3B5IGE6L2xpbnV4L2RsMmsudGd6IC9yb290L2RsMmsKK1tyb290QFhYWCBkbDJrXSB0YXIgeGZ2eiBkbDJrLnRnegorW3Jvb3RAWFhYIGRsMmtdIG1ha2UgYWxsCisKK0luc3RhbGxpbmcgdGhlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09CisKKyAgTWFudWFsIEluc3RhbGxhdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgIE9uY2UgdGhlIGRyaXZlciBoYXMgYmVlbiBjb21waWxlZCwgaXQgbXVzdCBiZSBsb2FkZWQsIGVuYWJsZWQsIGFuZCBib3VuZAorICB0byBhIHByb3RvY29sIHN0YWNrIGluIG9yZGVyIHRvIGVzdGFibGlzaCBuZXR3b3JrIGNvbm5lY3Rpdml0eS4gVG8gbG9hZCBhCisgIG1vZHVsZSBlbnRlciB0aGUgY29tbWFuZDoKKworICBpbnNtb2QgZGwyay5vCisKKyAgb3IKKworICBpbnNtb2QgZGwyay5vIDxvcHRpb25hbCBwYXJhbWV0ZXI+CTsgYWRkIHBhcmFtZXRlcgorCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgZXhhbXBsZTogaW5zbW9kIGRsMmsubyBtZWRpYT0xMDBtYnBzX2hkCisgICBvcgkgICAgaW5zbW9kIGRsMmsubyBtZWRpYT0zCisgICBvcgkgICAgaW5zbW9kIGRsMmsubyBtZWRpYT0zLDIJOyBmb3IgMiBjYXJkcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBQbGVhc2UgcmVmZXJlbmNlIHRoZSBsaXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBzdXBwb3J0ZWQgYnkKKyAgdGhlIExpbnV4IGRldmljZSBkcml2ZXIgYmVsb3cuCisKKyAgVGhlIGluc21vZCBjb21tYW5kIG9ubHkgbG9hZHMgdGhlIGRyaXZlciBhbmQgZ2l2ZXMgaXQgYSBuYW1lIG9mIHRoZSBmb3JtCisgIGV0aDAsIGV0aDEsIGV0Yy4gVG8gYnJpbmcgdGhlIE5JQyBpbnRvIGFuIG9wZXJhdGlvbmFsIHN0YXRlLAorICBpdCBpcyBuZWNlc3NhcnkgdG8gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgIGlmY29uZmlnIGV0aDAgdXAKKworICBGaW5hbGx5LCB0byBiaW5kIHRoZSBkcml2ZXIgdG8gdGhlIGFjdGl2ZSBwcm90b2NvbCAoZS5nLiwgVENQL0lQIHdpdGgKKyAgTGludXgpLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgaWZ1cCBldGgwCisKKyAgTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2Z1bCBvbmx5IGlmIHRoZSBzeXN0ZW0gY2FuIGZpbmQgYSBjb25maWd1cmF0aW9uCisgIHNjcmlwdCB0aGF0IGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgbmV0d29yayBpbmZvcm1hdGlvbi4gQSBzYW1wbGUgd2lsbCBiZQorICBnaXZlbiBpbiB0aGUgbmV4dCBwYXJhZ3JhcGguCisKKyAgVGhlIGNvbW1hbmRzIHRvIHVubG9hZCBhIGRyaXZlciBhcmUgYXMgZm9sbG93czoKKworICBpZmRvd24gZXRoMAorICBpZmNvbmZpZyBldGgwIGRvd24KKyAgcm1tb2QgZGwyay5vCisKKyAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIGNvbW1hbmRzIHRvIGxpc3QgdGhlIGN1cnJlbnRseSBsb2FkZWQgbW9kdWxlcyBhbmQKKyAgdG8gc2VlIHRoZSBjdXJyZW50IG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKworICBsc21vZAorICBpZmNvbmZpZworCisKKyAgQXV0b21hdGVkIEluc3RhbGxhdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGluc3RhbGwgdGhlIGRyaXZlciBzdWNoIHRoYXQgaXQgaXMKKyAgYXV0b21hdGljYWxseSBsb2FkZWQgYW5kIGNvbmZpZ3VyZWQgYXQgYm9vdCB0aW1lLiBUaGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uCisgIGlzIGJhc2VkIG9uIGEgUmVkIEhhdCA2LjAvNy4wIGRpc3RyaWJ1dGlvbiwgYnV0IGl0IGNhbiBlYXNpbHkgYmUgcG9ydGVkIHRvCisgIG90aGVyIGRpc3RyaWJ1dGlvbnMgYXMgd2VsbC4KKworICBSZWQgSGF0IHY2LngvdjcueAorICAtLS0tLS0tLS0tLS0tLS0tLQorICAxLiBDb3B5IGRsMmsubyB0byB0aGUgbmV0d29yayBtb2R1bGVzIGRpcmVjdG9yeSwgdHlwaWNhbGx5CisgICAgIC9saWIvbW9kdWxlcy8yLngueC14eC9uZXQgb3IgL2xpYi9tb2R1bGVzLzIueC54L2tlcm5lbC9kcml2ZXJzL25ldC4KKyAgMi4gTG9jYXRlIHRoZSBib290IG1vZHVsZSBjb25maWd1cmF0aW9uIGZpbGUsIG1vc3QgY29tbW9ubHkgbW9kcHJvYmUuY29uZgorICAgICBvciBtb2R1bGVzLmNvbmYgKGZvciAyLjQpIGluIHRoZSAvZXRjIGRpcmVjdG9yeS4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgICAgYWxpYXMgZXRoeCBkbDJrCisgICAgIG9wdGlvbnMgZGwyayA8b3B0aW9uYWwgcGFyYW1ldGVycz4KKworICAgICB3aGVyZSBldGh4IHdpbGwgYmUgZXRoMCBpZiB0aGUgTklDIGlzIHRoZSBvbmx5IGV0aGVybmV0IGFkYXB0ZXIsIGV0aDEgaWYKKyAgICAgb25lIG90aGVyIGV0aGVybmV0IGFkYXB0ZXIgaXMgaW5zdGFsbGVkLCBldGMuIFJlZmVyIHRvIHRoZSB0YWJsZSBpbiB0aGUKKyAgICAgcHJldmlvdXMgc2VjdGlvbiBmb3IgdGhlIGxpc3Qgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycy4KKyAgMy4gTG9jYXRlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc2NyaXB0cywgbm9ybWFsbHkgdGhlCisgICAgIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cyBkaXJlY3RvcnksIGFuZCBjcmVhdGUgYSBjb25maWd1cmF0aW9uCisgICAgIHNjcmlwdCBuYW1lZCBpZmNmZy1ldGh4IHRoYXQgY29udGFpbnMgbmV0d29yayBpbmZvcm1hdGlvbi4KKyAgNC4gTm90ZSB0aGF0IGZvciBtb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMsIFJlZCBIYXQgaW5jbHVkZWQsIGEgY29uZmlndXJhdGlvbgorICAgICB1dGlsaXR5IHdpdGggYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgdG8gcGVyZm9ybSBzdGVwcyAyCisgICAgIGFuZCAzIGFib3ZlLgorCisKK1BhcmFtZXRlciBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09CitZb3UgY2FuIGluc3RhbGwgdGhpcyBkcml2ZXIgd2l0aG91dCBhbnkgYWRkdGlvbmFsIHBhcmFtZXRlci4gSG93ZXZlciwgaWYgeW91CithcmUgZ29pbmcgdG8gaGF2ZSBleHRlbnNpdmUgZnVuY3Rpb25zIHRoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIHNldCBleHRyYQorcGFyYW1ldGVyLiBCZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieSB0aGUKK0xpbnV4IGRldmljZQorZHJpdmVyLgorCittdHU9cGFja2V0X3NpemUJCQktIFNwZWNpZmllcyB0aGUgbWF4aW11bSBwYWNrZXQgc2l6ZS4gZGVmYXVsdAorCQkJCSAgaXMgMTUwMC4KKworbWVkaWE9bWVkaWFfdHlwZQkJLSBTcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUgdGhlIE5JQyBvcGVyYXRlcyBhdC4KKwkJCQkgIGF1dG9zZW5zZQlBdXRvc2Vuc2luZyBhY3RpdmUgbWVkaWEuCisJCQkJICAxMG1icHNfaGQJMTBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgMTBtYnBzX2ZkCTEwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDEwMG1icHNfaGQJMTAwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDEwMG1icHNfZmQJMTAwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDEwMDBtYnBzX2ZkCTEwMDBNYnBzIGZ1bGwgZHVwbGV4LgorCQkJCSAgMTAwMG1icHNfaGQJMTAwME1icHMgaGFsZiBkdXBsZXguCisJCQkJICAwCQlBdXRvc2Vuc2luZyBhY3RpdmUgbWVkaWEuCisJCQkJICAxCQkxME1icHMgaGFsZiBkdXBsZXguCisJCQkJICAyCQkxME1icHMgZnVsbCBkdXBsZXguCisJCQkJICAzCQkxMDBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgNAkJMTAwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDUgICAgICAgICAgCTEwMDBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgNiAgICAgICAgICAJMTAwME1icHMgZnVsbCBkdXBsZXguCisKKwkJCQkgIEJ5IGRlZmF1bHQsIHRoZSBOSUMgb3BlcmF0ZXMgYXQgYXV0b3NlbnNlLgorCQkJCSAgMTAwMG1icHNfZmQgYW5kIDEwMDBtYnBzX2hkIHR5cGVzIGFyZSBvbmx5CisJCQkJICBhdmFpbGFibGUgZm9yIGZpYmVyIGFkYXB0ZXIuCisKK3ZsYW49bgkJCQktIFNwZWNpZmllcyB0aGUgVkxBTiBJRC4gSWYgdmxhbj0wLCB0aGUKKwkJCQkgIFZpcnR1YWwgTG9jYWwgQXJlYSBOZXR3b3JrIChWTEFOKSBmdW5jdGlvbiBpcworCQkJCSAgZGlzYWJsZS4KKworanVtYm89WzB8MV0JCQktIFNwZWNpZmllcyB0aGUganVtYm8gZnJhbWUgc3VwcG9ydC4gSWYganVtYm89MSwKKwkJCQkgIHRoZSBOSUMgYWNjZXB0IGp1bWJvIGZyYW1lcy4gQnkgZGVmYXVsdCwgdGhpcworCQkJCSAgZnVuY3Rpb24gaXMgZGlzYWJsZWQuCisJCQkJICBKdW1ibyBmcmFtZSB1c3VhbGx5IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlCisJCQkJICBpbnQgZ2lnYWJpdC4KKwkJCQkgIFRoaXMgZmVhdHVyZSBuZWVkIGp1bWJvIGZyYW1lIGNvbXBhdGlibGUgCisJCQkJICByZW1vdGUuCisJCQkJICAKK3J4X2NvYWxlc2NlPW0JCQktIE51bWJlciBvZiByeCBmcmFtZSBoYW5kbGVkIGVhY2ggaW50ZXJydXB0LgorcnhfdGltZW91dD1uCQkJLSBSeCBETUEgd2FpdCB0aW1lIGZvciBhbiBpbnRlcnJ1cHQuIAorCQkJCSAgSWYgc2V0IHJ4X2NvYWxlc2NlID4gMCwgaGFyZHdhcmUgb25seSBhc3NlcnQgCisJCQkJICBhbiBpbnRlcnJ1cHQgZm9yIG0gZnJhbWVzLiBIYXJkd2FyZSB3b24ndCAKKwkJCQkgIGFzc2VydCByeCBpbnRlcnJ1cHQgdW50aWwgbSBmcmFtZXMgcmVjZWl2ZWQgb3IKKwkJCQkgIHJlYWNoIHRpbWVvdXQgb2YgbiAqIDY0MCBuYW5vIHNlY29uZHMuIAorCQkJCSAgU2V0IHByb3BlciByeF9jb2FsZXNjZSBhbmQgcnhfdGltZW91dCBjYW4gCisJCQkJICByZWR1Y2UgY29uZ2VzdGlvbiBjb2xsYXBzZSBhbmQgb3ZlcmxvYWQgd2hpY2gKKwkJCQkgIGhhcyBiZWVuIGEgYm90dGxlbmVjdCBmb3IgaGlnaCBzcGVlZCBuZXR3b3JrLgorCQkJCSAgCisJCQkJICBGb3IgZXhhbXBsZSwgcnhfY29hbGVzY2U9MTAgcnhfdGltZW91dD04MDAuCisJCQkJICB0aGF0IGlzLCBoYXJkd2FyZSBhc3NlcnQgb25seSAxIGludGVycnVwdCAKKwkJCQkgIGZvciAxMCBmcmFtZXMgcmVjZWl2ZWQgb3IgdGltZW91dCBvZiA1MTIgdXMuIAorCit0eF9jb2FsZXNjZT1uCQkJLSBOdW1iZXIgb2YgdHggZnJhbWUgaGFuZGxlZCBlYWNoIGludGVycnVwdC4KKwkJCQkgIFNldCBuID4gMSBjYW4gcmVkdWNlIHRoZSBpbnRlcnJ1cHRzIAorCQkJCSAgY29uZ2VzdGlvbiB1c3VhbGx5IGxvd2VyIHBlcmZvcm1hbmNlIG9mCisJCQkJICBoaWdoIHNwZWVkIG5ldHdvcmsgY2FyZC4gRGVmYXVsdCBpcyAxNi4KKwkJCQkgIAordHhfZmxvdz1bMXwwXQkJCS0gU3BlY2lmaWVzIHRoZSBUeCBmbG93IGNvbnRyb2wuIElmIHR4X2Zsb3c9MCwgCisJCQkJICB0aGUgVHggZmxvdyBjb250cm9sIGRpc2FibGUgZWxzZSBkcml2ZXIKKwkJCQkgIGF1dG9kZXRlY3QuCityeF9mbG93PVsxfDBdCQkJLSBTcGVjaWZpZXMgdGhlIFJ4IGZsb3cgY29udHJvbC4gSWYgcnhfZmxvdz0wLCAKKwkJCQkgIHRoZSBSeCBmbG93IGNvbnRyb2wgZW5hYmxlIGVsc2UgZHJpdmVyCisJCQkJICBhdXRvZGV0ZWN0LgorCisKK0NvbmZpZ3VyYXRpb24gU2NyaXB0IFNhbXBsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CitIZXJlIGlzIGEgc2FtcGxlIG9mIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gc2NyaXB0OgorCitERVZJQ0U9ZXRoMAorVVNFUkNUTD1ubworT05CT09UPXllcworUE9PVFBST1RPPW5vbmUKK0JST0FEQ0FTVD0yMDcuMjAwLjUuMjU1CitORVRXT1JLPTIwNy4yMDAuNS4wCitORVRNQVNLPTI1NS4yNTUuMjU1LjAKK0lQQUREUj0yMDcuMjAwLjUuMgorCisKK1Ryb3VibGVzaG9vdGluZworPT09PT09PT09PT09PT09CitRMS4gU291cmNlIGZpbGVzIGNvbnRhaW4gXiBNIGJlaGluZCBldmVyeSBsaW5lLgorCU1ha2Ugc3VyZSBhbGwgZmlsZXMgYXJlIFVuaXggZmlsZSBmb3JtYXQgKG5vIExGKS4gVHJ5IHRoZSBmb2xsb3dpbmcKKyAgICBzaGVsbCBjb21tYW5kIHRvIGNvbnZlcnQgZmlsZXMuCisKKwljYXQgZGwyay5jIHwgY29sIC1iID4gZGwyay50bXAKKwltdiBkbDJrLnRtcCBkbDJrLmMKKworCU9SCisKKwljYXQgZGwyay5jIHwgdHIgLWQgIlxyIiA+IGRsMmsudG1wCisJbXYgZGwyay50bXAgZGwyay5jCisKK1EyOiBDb3VsZCBub3QgZmluZCBoZWFkZXIgZmlsZXMgKCouaCkgPworCVRvIGNvbXBpbGUgdGhlIGRyaXZlciwgeW91IG5lZWQga2VybmVsIGhlYWRlciBmaWxlcy4gQWZ0ZXIKKyAgICBpbnN0YWxsaW5nIHRoZSBrZXJuZWwgc291cmNlLCB0aGUgaGVhZGVyIGZpbGVzIGFyZSB1c3VhbGx5IGxvY2F0ZWQgaW4KKyAgICAvdXNyL3NyYy9saW51eC9pbmNsdWRlLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yeSBjb25maWd1cmVkCisgICAgaW4gTWFrZWZpbGUuIEZvciBzb21lIGRpc3RyaWJ1dGlvbnMsIHRoZXJlIGlzIGEgY29weSBvZiBoZWFkZXIgZmlsZXMgaW4KKyAgICAvdXNyL3NyYy9pbmNsdWRlL2xpbnV4IGFuZCAvdXNyL3NyYy9pbmNsdWRlL2FzbSwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUKKyAgICBJTkNMVURFRElSIGluIE1ha2VmaWxlIHRvIC91c3IvaW5jbHVkZSB3aXRob3V0IGluc3RhbGxpbmcga2VybmVsIHNvdXJjZS4KKwlOb3RlIHRoYXQgUkggNy4wIGRpZG4ndCBwcm92aWRlIGNvcnJlY3QgaGVhZGVyIGZpbGVzIGluIC91c3IvaW5jbHVkZSwKKyAgICBpbmNsdWRpbmcgdGhvc2UgZmlsZXMgd2lsbCBtYWtlIGEgd3JvbmcgdmVyc2lvbiBkcml2ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbWZlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbWZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU4Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RtZmUudHh0CkBAIC0wLDAgKzEsNTkgQEAKKyAgZG1mZS5jOiBWZXJzaW9uIDEuMjggICAgICAgIDAxLzE4LzIwMDAKKworICAgICAgICBBIERhdmljb20gRE05MTAyKEEpL0RNOTEzMi9ETTk4MDEgZmFzdCBldGhlcm5ldCBkcml2ZXIgZm9yIExpbnV4LiAKKyAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk3ICBTdGVuIFdhbmcKKworICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgICAgICAgIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKworICBBLiBDb21waWxlciBjb21tYW5kOgorCisgICAgIEEtMTogRm9yIG5vcm1hbCBzaW5nbGUgb3IgbXVsdGlwbGUgcHJvY2Vzc29yIGtlcm5lbAorICAgICAgICAgICJnY2MgLURNT0RVTEUgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvbmV0L2luZXQgLVdhbGwgCisgICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyBkbWZlLmMiCisKKyAgICAgQS0yOiBGb3Igc2luZ2xlIG9yIG11bHRpcGxlIHByb2Nlc3NvciB3aXRoIGtlcm5lbCBtb2R1bGUgdmVyc2lvbiBmdW5jdGlvbgorICAgICAgICAgICJnY2MgLURNT0RVTEUgLURNT0RWRVJTSU9OUyAtRF9fS0VSTkVMX18gLUkvdXNyL3NyYy9saW51eC9uZXQvaW5ldCAKKyAgICAgICAgICAgIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU82IC1jIGRtZmUuYyIKKworCisgIEIuIFRoZSBmb2xsb3dpbmcgc3RlcHMgdGVhY2ggeW91IGhvdyB0byBhY3RpdmF0ZSBhIERNOTEwMiBib2FyZDoKKworICAgICAgICAxLiBVc2VkIHRoZSB1cHBlciBjb21waWxlciBjb21tYW5kIHRvIGNvbXBpbGUgZG1mZS5jCisKKyAgICAgICAgMi4gSW5zZXJ0IGRtZmUgbW9kdWxlIGludG8ga2VybmVsCisgICAgICAgICAgICJpbnNtb2QgZG1mZSIgICAgICAgIDs7QXV0byBEZXRlY3Rpb24gTW9kZSAoU3VnZ2VzdCkKKyAgICAgICAgICAgImluc21vZCBkbWZlIG1vZGU9MCIgOztGb3JjZSAxME0gSGFsZiBEdXBsZXgKKyAgICAgICAgICAgImluc21vZCBkbWZlIG1vZGU9MSIgOztGb3JjZSAxMDBNIEhhbGYgRHVwbGV4CisgICAgICAgICAgICJpbnNtb2QgZG1mZSBtb2RlPTQiIDs7Rm9yY2UgMTBNIEZ1bGwgRHVwbGV4CisgICAgICAgICAgICJpbnNtb2QgZG1mZSBtb2RlPTUiIDs7Rm9yY2UgMTAwTSBGdWxsIER1cGxleAorCisgICAgICAgIDMuIENvbmZpZyBhIGRtOTEwMiBuZXR3b3JrIGludGVyZmFjZQorICAgICAgICAgICAiaWZjb25maWcgZXRoMCAxNzIuMjIuMy4xOCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl4gWW91ciBJUCBhZGRyZXNzCisKKyAgICAgICAgNC4gQWN0aXZhdGUgdGhlIElQIHJvdXRpbmcgdGFibGUuIEZvciBzb21lIGRpc3RyaWJ1dGlvbnMsIGl0IGlzIG5vdAorICAgICAgICAgICBuZWNlc3NhcnkuIFlvdSBjYW4gdHlwZSAicm91dGUiIHRvIGNoZWNrLgorCisgICAgICAgICAgICJyb3V0ZSBhZGQgZGVmYXVsdCBldGgwIgorCisKKyAgICAgICAgNS4gV2VsbCBkb25lLiBZb3VyIERNOTEwMiBhZGFwdGVyIGlzIG5vdyBhY3RpdmF0ZWQuCisKKworICAgQy4gT2JqZWN0IGZpbGVzIGRlc2NyaXB0aW9uOgorICAgICAgICAxLiBkbWZlX3JoNjEubzogICAgICAgCUZvciBSZWRoYXQgNi4xCisKKyAgICAgICAgSWYgeW91IGNhbiBtYWtlIHN1cmUgeW91ciBrZXJuZWwgdmVyc2lvbiwgeW91IGNhbiByZW5hbWUKKyAgICAgICAgdG8gZG1mZS5vIGFuZCBkaXJlY3RseSB1c2UgaXQgd2l0aG91dCByZS1jb21waWxpbmcuCisKKworICBBdXRob3I6IFN0ZW4gV2FuZywgODg2LTMtNTc5ODc5Ny04NTE3LCBFLW1haWw6IHN0ZW5fd2FuZ0BkYXZpY29tLmNvbS50dwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RyaXZlci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHJpdmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWZkMGVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RyaXZlci50eHQKQEAgLTAsMCArMSw5NCBAQAorRG9jdW1lbnRzIGFib3V0IHNvZnRuZXQgZHJpdmVyIGlzc3VlcyBpbiBnZW5lcmFsIGNhbiBiZSBmb3VuZAorYXQ6CisKKwlodHRwOi8vd3d3LmZpcnN0Zmxvb3Iub3JnL35hbmRpL3NvZnRuZXQvCisKK1RyYW5zbWl0IHBhdGggZ3VpZGVsaW5lczoKKworMSkgVGhlIGhhcmRfc3RhcnRfeG1pdCBtZXRob2QgbXVzdCBuZXZlciByZXR1cm4gJzEnIHVuZGVyIGFueQorICAgbm9ybWFsIGNpcmN1bXN0YW5jZXMuICBJdCBpcyBjb25zaWRlcmVkIGEgaGFyZCBlcnJvciB1bmxlc3MKKyAgIHRoZXJlIGlzIG5vIHdheSB5b3VyIGRldmljZSBjYW4gdGVsbCBhaGVhZCBvZiB0aW1lIHdoZW4gaXQncworICAgdHJhbnNtaXQgZnVuY3Rpb24gd2lsbCBiZWNvbWUgYnVzeS4KKworICAgSW5zdGVhZCBpdCBtdXN0IG1haW50YWluIHRoZSBxdWV1ZSBwcm9wZXJseS4gIEZvciBleGFtcGxlLAorICAgZm9yIGEgZHJpdmVyIGltcGxlbWVudGluZyBzY2F0dGVyLWdhdGhlciB0aGlzIG1lYW5zOgorCisJc3RhdGljIGludCBkcnZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIAkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisJeworCQlzdHJ1Y3QgZHJ2ICpkcCA9IGRldi0+cHJpdjsKKworCQlsb2NrX3R4KGRwKTsKKwkJLi4uCisJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yIGxvZyBpdC4gKi8KKwkJaWYgKFRYX0JVRkZTX0FWQUlMKGRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSB7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQl1bmxvY2tfdHgoZHApOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS4uLiBxdWV1ZSBwYWNrZXQgdG8gY2FyZCAuLi4KKwkJLi4uIHVwZGF0ZSB0eCBjb25zdW1lciBpbmRleCAuLi4KKworCQlpZiAoVFhfQlVGRlNfQVZBSUwoZHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwkJLi4uCisJCXVubG9ja190eChkcCk7CisJCS4uLgorCX0KKworICAgQW5kIHRoZW4gYXQgdGhlIGVuZCBvZiB5b3VyIFRYIHJlY2xhaW1hdGlvbiBldmVudCBoYW5kbGluZzoKKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRwLT5kZXYpICYmCisgICAgICAgICAgICBUWF9CVUZGU19BVkFJTChkcCkgPiAoTUFYX1NLQl9GUkFHUyArIDEpKQorCQluZXRpZl93YWtlX3F1ZXVlKGRwLT5kZXYpOworCisgICBGb3IgYSBub24tc2NhdHRlci1nYXRoZXIgc3VwcG9ydGluZyBjYXJkLCB0aGUgdGhyZWUgdGVzdHMgc2ltcGx5IGJlY29tZToKKworCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciBsb2cgaXQuICovCisJCWlmIChUWF9CVUZGU19BVkFJTChkcCkgPD0gMCkKKworICAgYW5kOgorCisJCWlmIChUWF9CVUZGU19BVkFJTChkcCkgPT0gMCkKKworICAgYW5kOgorCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZHAtPmRldikgJiYKKyAgICAgICAgICAgIFRYX0JVRkZTX0FWQUlMKGRwKSA+IDApCisJCW5ldGlmX3dha2VfcXVldWUoZHAtPmRldik7CisKKzIpIERvIG5vdCBmb3JnZXQgdG8gdXBkYXRlIG5ldGRldi0+dHJhbnNfc3RhcnQgdG8gamlmZmllcyBhZnRlcgorICAgZWFjaCBuZXcgdHggcGFja2V0IGlzIGdpdmVuIHRvIHRoZSBoYXJkd2FyZS4KKworMykgRG8gbm90IGZvcmdldCB0aGF0IG9uY2UgeW91IHJldHVybiAwIGZyb20geW91ciBoYXJkX3N0YXJ0X3htaXQKKyAgIG1ldGhvZCwgaXQgaXMgeW91ciBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHVwIHRoZSBTS0IKKyAgIGFuZCBpbiBzb21lIGZpbml0ZSBhbW91bnQgb2YgdGltZS4KKworICAgRm9yIGV4YW1wbGUsIHRoaXMgbWVhbnMgdGhhdCBpdCBpcyBub3QgYWxsb3dlZCBmb3IgeW91ciBUWAorICAgbWl0aWdhdGlvbiBzY2hlbWUgdG8gbGV0IFRYIHBhY2tldHMgImhhbmcgb3V0IiBpbiB0aGUgVFgKKyAgIHJpbmcgdW5yZWNsYWltZWQgZm9yZXZlciBpZiBubyBuZXcgVFggcGFja2V0cyBhcmUgc2VudC4KKyAgIFRoaXMgZXJyb3IgY2FuIGRlYWRsb2NrIHNvY2tldHMgd2FpdGluZyBmb3Igc2VuZCBidWZmZXIgcm9vbQorICAgdG8gYmUgZnJlZWQgdXAuCisKKyAgIElmIHlvdSByZXR1cm4gMSBmcm9tIHRoZSBoYXJkX3N0YXJ0X3htaXQgbWV0aG9kLCB5b3UgbXVzdCBub3Qga2VlcAorICAgYW55IHJlZmVyZW5jZSB0byB0aGF0IFNLQiBhbmQgeW91IG11c3Qgbm90IGF0dGVtcHQgdG8gZnJlZSBpdCB1cC4KKworUHJvYmluZyBndWlkZWxpbmVzOgorCisxKSBBbnkgaGFyZHdhcmUgbGF5ZXIgYWRkcmVzcyB5b3Ugb2J0YWluIGZvciB5b3VyIGRldmljZSBzaG91bGQKKyAgIGJlIHZlcmlmaWVkLiAgRm9yIGV4YW1wbGUsIGZvciBldGhlcm5ldCBjaGVjayBpdCB3aXRoCisgICBsaW51eC9ldGhlcmRldmljZS5oOmlzX3ZhbGlkX2V0aGVyX2FkZHIoKQorCitDbG9zZS9zdG9wIGd1aWRlbGluZXM6CisKKzEpIEFmdGVyIHRoZSBkZXYtPnN0b3Agcm91dGluZSBoYXMgYmVlbiBjYWxsZWQsIHRoZSBoYXJkd2FyZSBtdXN0CisgICBub3QgcmVjZWl2ZSBvciB0cmFuc21pdCBhbnkgZGF0YS4gIEFsbCBpbiBmbGlnaHQgcGFja2V0cyBtdXN0CisgICBiZSBhYm9ydGVkLiBJZiBuZWNlc3NhcnksIHBvbGwgb3Igd2FpdCBmb3IgY29tcGxldGlvbiBvZiAKKyAgIGFueSByZXNldCBjb21tYW5kcy4KKworMikgVGhlIGRldi0+c3RvcCByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IHVucmVnaXN0ZXJfbmV0ZGV2aWNlCisgICBpZiBkZXZpY2UgaXMgc3RpbGwgVVAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmOWY3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dApAQCAtMCwwICsxLDE3MCBAQAorTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMCBGYW1pbHkgb2YgQWRhcHRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdmVtYmVyIDE3LCAyMDA0CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBEcml2ZXIgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gU3VwcG9ydAorCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAgRmFtaWx5IG9mCitBZGFwdGVycywgdmVyc2lvbiAzLjMueC4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIDIuNC54IGFuZCAyLjYueCBrZXJuZWxzLiAKKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJiAKK0RyaXZlciBJRCBHdWlkZSBhdDoKKworICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQorCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nIAord2Vic2l0ZS4gSW4gdGhlIHNlYXJjaCBmaWVsZCwgZW50ZXIgeW91ciBhZGFwdGVyIG5hbWUgb3IgdHlwZSwgb3IgdXNlIHRoZSAKK25ldHdvcmtpbmcgbGluayBvbiB0aGUgbGVmdCB0byBzZWFyY2ggZm9yIHlvdXIgYWRhcHRlcjoKKworICBodHRwOi8vZG93bmxvYWRmaW5kZXIuaW50ZWwuY29tL3NjcmlwdHMtZGYvc3VwcG9ydF9pbnRlbC5hc3AKKworRHJpdmVyIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAordW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworUnggRGVzY3JpcHRvcnM6IE51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzLiBBIHJlY2VpdmUgZGVzY3JpcHRvciBpcyBhIGRhdGEgCisgICBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSByZWNlaXZlIGJ1ZmZlciBhbmQgaXRzIGF0dHJpYnV0ZXMgdG8gdGhlIG5ldHdvcmsgCisgICBjb250cm9sbGVyLiBUaGUgZGF0YSBpbiB0aGUgZGVzY3JpcHRvciBpcyB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIHRvIHdyaXRlIAorICAgZGF0YSBmcm9tIHRoZSBjb250cm9sbGVyIHRvIGhvc3QgbWVtb3J5LiBJbiB0aGUgMy4wLnggZHJpdmVyIHRoZSB2YWxpZAorICAgcmFuZ2UgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIDY0LTI1Ni4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQuIFRoaXMgcGFyYW1ldGVyIAorICAgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGNvbW1hbmQgCisgCisgICBldGh0b29sIC1HIGV0aD8gcnggbiwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgcnggZGVzY3JpcHRvcnMuCisKK1R4IERlc2NyaXB0b3JzOiBOdW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMuIEEgdHJhbnNtaXQgZGVzY3JpcHRvciBpcyBhCisgICBkYXRhIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zbWl0IGJ1ZmZlciBhbmQgaXRzIGF0dHJpYnV0ZXMgdG8gdGhlCisgICBuZXR3b3JrIGNvbnRyb2xsZXIuIFRoZSBkYXRhIGluIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgdG8gCisgICByZWFkIGRhdGEgZnJvbSB0aGUgaG9zdCBtZW1vcnkgdG8gdGhlIGNvbnRyb2xsZXIuIEluIHRoZSAzLjAueCBkcml2ZXIgdGhlIAorICAgdmFsaWQgcmFuZ2UgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIDY0LTI1Ni4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQuIFRoaXMgCisgICBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGNvbW1hbmQgCisKKyAgIGV0aHRvb2wgLUcgZXRoPyB0eCBuLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCB0eCBkZXNjcmlwdG9ycy4KKworU3BlZWQvRHVwbGV4OiBUaGUgZHJpdmVyIGF1dG8tbmVnb3RpYXRlcyB0aGUgbGluayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGJ5IAorICAgZGVmYXVsdC4gRXRodG9vbCBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzIHRvIGZvcmNlIHNwZWVkL2R1cGxleC4gCisKKyAgIGV0aHRvb2wgLXMgZXRoPyAgYXV0b25lZyBvZmYgc3BlZWQgezEwfDEwMH0gZHVwbGV4IHtmdWxsfGhhbGZ9CisKKyAgIE5PVEU6IHNldHRpbmcgdGhlIHNwZWVkL2R1cGxleCB0byBpbmNvcnJlY3QgdmFsdWVzIHdpbGwgY2F1c2UgdGhlIGxpbmsgdG8KKyAgIGZhaWwuCisKK0V2ZW50IExvZyBNZXNzYWdlIExldmVsOiAgVGhlIGRyaXZlciB1c2VzIHRoZSBtZXNzYWdlIGxldmVsIGZsYWcgdG8gbG9nIGV2ZW50cyAKKyAgIHRvIHN5c2xvZy4gVGhlIG1lc3NhZ2UgbGV2ZWwgY2FuIGJlIHNldCBhdCBkcml2ZXIgbG9hZCB0aW1lLiBJdCBjYW4gYWxzbyBiZSAKKyAgIHNldCB1c2luZyB0aGUgY29tbWFuZAorCisgICBldGh0b29sIC1zIGV0aD8gbXNnbHZsIG4KKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZCBpcyAKKyAgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gVHlwaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGludm9sdmVzIGFkZGluZyAKKyAgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgCisgIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBNYW55IHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIAorICB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LiBUbyBsZWFybiB0aGUgcHJvcGVyIHdheSB0byAKKyAgY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLCByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiAKKyAgZG9jdW1lbnRhdGlvbi4gSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlIGFza2VkIGZvciB0aGUgZHJpdmVyIG9yIG1vZHVsZSAKKyAgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsIFBSTy8xMDAgRmFtaWx5IG9mIAorICBBZGFwdGVycyBpcyBlMTAwLgorCisgIEFzIGFuIGV4YW1wbGUsIGlmIHlvdSBpbnN0YWxsIHRoZSBlMTAwIGRyaXZlciBmb3IgdHdvIFBSTy8xMDAgYWRhcHRlcnMgCisgIChldGgwIGFuZCBldGgxKSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gbW9kdWxlcy5jb25mOgorCisgICAgICAgYWxpYXMgZXRoMCBlMTAwCisgICAgICAgYWxpYXMgZXRoMSBlMTAwCisKKyAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBJbiBvcmRlciB0byBzZWUgbGluayBtZXNzYWdlcyBhbmQgb3RoZXIgSW50ZWwgZHJpdmVyIGluZm9ybWF0aW9uIG9uIHlvdXIgCisgIGNvbnNvbGUsIHlvdSBtdXN0IHNldCB0aGUgZG1lc2cgbGV2ZWwgdXAgdG8gc2l4LiBUaGlzIGNhbiBiZSBkb25lIGJ5IAorICBlbnRlcmluZyB0aGUgZm9sbG93aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIGxvYWRpbmcgdGhlIGUxMDAgZHJpdmVyOiAKKworICAgICAgIGRtZXNnIC1uIDgKKworICBJZiB5b3Ugd2lzaCB0byBzZWUgYWxsIG1lc3NhZ2VzIGlzc3VlZCBieSB0aGUgZHJpdmVyLCBpbmNsdWRpbmcgZGVidWcgCisgIG1lc3NhZ2VzLCBzZXQgdGhlIGRtZXNnIGxldmVsIHRvIGVpZ2h0LgorCisgIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisKKyAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAorICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAorICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBhdDoKKyAgaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9na2VybmVsLiAgCisKKyAgTk9URTogVGhpcyBkcml2ZXIgdXNlcyBtaWkgc3VwcG9ydCBmcm9tIHRoZSBrZXJuZWwuIEFzIGEgcmVzdWx0LCB3aGVuIAorICB0aGVyZSBpcyBubyBsaW5rLCBldGh0b29sIHdpbGwgcmVwb3J0IHNwZWVkL2R1cGxleCB0byBiZSAxMC9oYWxmLgorCisgIE5PVEU6IEV0aHRvb2wgMS42IG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHNldCBvZiBldGh0b29sIG9wdGlvbnMuIFN1cHBvcnQgCisgIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcgCisgIGV0aHRvb2wgdG8gZXRodG9vbC0xLjguMS4gCisKKyAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXb0wgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4gRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoIFJlZCAKKyAgSGF0KiA4LjAuIEZvciBvdGhlciBMaW51eCBkaXN0cmlidXRpb25zLCBkb3dubG9hZCBhbmQgaW5zdGFsbCBFdGh0b29sIGZyb20gCisgIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLiAKKworICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSBFdGh0b29sIG1hbgorICBwYWdlLgorCisgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4gRm9yCisgIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwIGRyaXZlciBtdXN0IGJlIAorICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgorCisgIE5BUEkKKyAgLS0tLQorCisgIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgc3VwcG9ydGVkIGluIHRoZSBlMTAwIGRyaXZlci4KKworICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgorCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gCit0aGUgaXNzdWUgdG8gbGludXgubmljc0BpbnRlbC5jb20uCisKKworTGljZW5zZQorPT09PT09PQorCitUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQgCitiZXR3ZWVuIHlvdSAoJ0xpY2Vuc2VlJykgYW5kIEludGVsLiBEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBzb2Z0d2FyZSBvciBhbnkgCithc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5IAorcmVhZCB0aGUgZnVsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTElDRU5TRSBsb2NhdGVkIGluIHRoaXMgc29mdHdhcmUgCitwYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIAorQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QgCitpbnN0YWxsIG9yIHVzZSB0aGUgU29mdHdhcmUuCisKKyogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViZDQwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKQEAgLTAsMCArMSw0MDEgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseSBvZiBBZGFwdGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdmVtYmVyIDE3LCAyMDA0CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBDb21tYW5kIExpbmUgUGFyYW1ldGVycworLSBTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24KKy0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworLSBLbm93biBJc3N1ZXMKKy0gU3VwcG9ydAorCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseQorb2YgQWRhcHRlcnMsIHZlcnNpb24gNS54LnguICAKKworRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gCitzdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgUFJPLzEwMDAgYWRhcHRlci4gQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgCithcHBseSB0byB1c2Ugd2l0aCBMaW51eC4KKworTmF0aXZlIFZMQU5zIGFyZSBub3cgYXZhaWxhYmxlIHdpdGggc3VwcG9ydGVkIGtlcm5lbHMuCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYgCitEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQorCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nIAord2Vic2l0ZS4gSW4gdGhlIHNlYXJjaCBmaWVsZCwgZW50ZXIgeW91ciBhZGFwdGVyIG5hbWUgb3IgdHlwZSwgb3IgdXNlIHRoZSAKK25ldHdvcmtpbmcgbGluayBvbiB0aGUgbGVmdCB0byBzZWFyY2ggZm9yIHlvdXIgYWRhcHRlcjoKKworICAgIGh0dHA6Ly9kb3dubG9hZGZpbmRlci5pbnRlbC5jb20vc2NyaXB0cy1kZi9zdXBwb3J0X2ludGVsLmFzcAorCitDb21tYW5kIExpbmUgUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgCit1c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBvciBpbnNtb2QgY29tbWFuZAordXNpbmcgdGhpcyBzeW50YXg6CisKKyAgICAgbW9kcHJvYmUgZTEwMDAgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQorCisgICAgIGluc21vZCBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dIAorCitGb3IgZXhhbXBsZSwgd2l0aCB0d28gUFJPLzEwMDAgUENJIGFkYXB0ZXJzLCBlbnRlcmluZzoKKworICAgICBpbnNtb2QgZTEwMDAgVHhEZXNjcmlwdG9ycz04MCwxMjgKKworbG9hZHMgdGhlIGUxMDAwIGRyaXZlciB3aXRoIDgwIFRYIGRlc2NyaXB0b3JzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4IFRYIAorZGVzY3JpcHRvcnMgZm9yIHRoZSBzZWNvbmQgYWRhcHRlci4KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKK3VubGVzcyBvdGhlcndpc2Ugbm90ZWQuIEFsc28sIGlmIHRoZSBkcml2ZXIgaXMgc3RhdGljYWxseSBidWlsdCBpbnRvIHRoZQora2VybmVsLCB0aGUgZHJpdmVyIGlzIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLgorRXRodG9vbCBjYW4gYmUgdXNlZCB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgcGFyYW1ldGVycyBhdCBydW50aW1lLgorCisgICAgTk9URVM6IEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBdXRvTmVnLCBEdXBsZXgsIGFuZCBTcGVlZAorICAgICAgICAgICBwYXJhbWV0ZXJzLCBzZWUgdGhlICJTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4gCisgICAgICAgICAgIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSwgUnhJbnREZWxheSwgCisgICAgICAgICAgIFR4SW50RGVsYXksIFJ4QWJzSW50RGVsYXksIGFuZCBUeEFic0ludERlbGF5IHBhcmFtZXRlcnMsIHNlZSB0aGUgCisgICAgICAgICAgIGFwcGxpY2F0aW9uIG5vdGUgYXQ6CisgICAgICAgICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL2FwcGxub3RzL2FwNDUwLmh0bQorCisgICAgICAgICAgIEEgZGVzY3JpcHRvciBkZXNjcmliZXMgYSBkYXRhIGJ1ZmZlciBhbmQgYXR0cmlidXRlcyByZWxhdGVkIHRvIHRoZSAKKyAgICAgICAgICAgZGF0YSBidWZmZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgYnkgdGhlIGhhcmR3YXJlLgorCitBdXRvTmVnIChhZGFwdGVycyB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgb25seSkKK1ZhbGlkIFJhbmdlOiAweDAxLTB4MEYsIDB4MjAtMHgyRgorRGVmYXVsdCBWYWx1ZTogMHgyRgorICAgIFRoaXMgcGFyYW1ldGVyIGlzIGEgYml0IG1hc2sgdGhhdCBzcGVjaWZpZXMgd2hpY2ggc3BlZWQgYW5kIGR1cGxleAorICAgIHNldHRpbmdzIHRoZSBib2FyZCBhZHZlcnRpc2VzLiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQsIHRoZSBTcGVlZCBhbmQKKyAgICBEdXBsZXggcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBzcGVjaWZpZWQuCisgICAgTk9URTogUmVmZXIgdG8gdGhlIFNwZWVkIGFuZCBEdXBsZXggc2VjdGlvbiBvZiB0aGlzIHJlYWRtZSBmb3IgbW9yZSAKKyAgICAgICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgQXV0b05lZyBwYXJhbWV0ZXIuICAKKworRHVwbGV4IChhZGFwdGVycyB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgb25seSkKK1ZhbGlkIFJhbmdlOiAwLTIgKDA9YXV0by1uZWdvdGlhdGUsIDE9aGFsZiwgMj1mdWxsKQorRGVmYXVsdCBWYWx1ZTogMAorICAgIERlZmluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gZmxvdy4gQ2FuIGJlIGVpdGhlciBvbmUgCisgICAgb3IgdHdvLWRpcmVjdGlvbmFsLiBJZiBib3RoIER1cGxleCBhbmQgdGhlIGxpbmsgcGFydG5lciBhcmUgc2V0IHRvIGF1dG8tCisgICAgbmVnb3RpYXRlLCB0aGUgYm9hcmQgYXV0by1kZXRlY3RzIHRoZSBjb3JyZWN0IGR1cGxleC4gSWYgdGhlIGxpbmsgcGFydG5lcgorICAgIGlzIGZvcmNlZCAoZWl0aGVyIGZ1bGwgb3IgaGFsZiksIER1cGxleCBkZWZhdWx0cyB0byBoYWxmLWR1cGxleC4KKworRmxvd0NvbnRyb2wKK1ZhbGlkIFJhbmdlOiAwLTMgKDA9bm9uZSwgMT1SeCBvbmx5LCAyPVR4IG9ubHksIDM9UngmVHgpCitEZWZhdWx0OiBSZWFkIGZsb3cgY29udHJvbCBzZXR0aW5ncyBmcm9tIHRoZSBFRVBST00KKyAgICBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgYXV0b21hdGljIGdlbmVyYXRpb24oVHgpIGFuZCByZXNwb25zZShSeCkgdG8gCisgICAgRXRoZXJuZXQgUEFVU0UgZnJhbWVzLgorCitJbnRlcnJ1cHRUaHJvdHRsZVJhdGUKK1ZhbGlkIFJhbmdlOiAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljKQorRGVmYXVsdCBWYWx1ZTogODAwMAorICAgIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHRoZSAKKyAgICBjb250cm9sbGVyIGdlbmVyYXRlcy4gSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIGFub3RoZXIgc2V0dGluZyB1c2VkIGluIAorICAgIGludGVycnVwdCBtb2RlcmF0aW9uLiBEeW5hbWljIG1vZGUgdXNlcyBhIGhldXJpc3RpYyBhbGdvcml0aG0gdG8gYWRqdXN0IAorICAgIEludGVycnVwdFRocm90dGxlUmF0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCB0cmFmZmljIGxvYWQuCitVbi1zdXBwb3J0ZWQgQWRhcHRlcnM6IEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBOT1Qgc3VwcG9ydGVkIGJ5IDgyNTQyLCA4MjU0MworICAgIG9yIDgyNTQ0LWJhc2VkIGFkYXB0ZXJzLgorCisgICAgTk9URTogSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgVHhBYnNJbnREZWxheSBhbmQgCisgICAgICAgICAgUnhBYnNJbnREZWxheSBwYXJhbWV0ZXJzLiBJbiBvdGhlciB3b3JkcywgbWluaW1pemluZyB0aGUgcmVjZWl2ZSAKKyAgICAgICAgICBhbmQvb3IgdHJhbnNtaXQgYWJzb2x1dGUgZGVsYXlzIGRvZXMgbm90IGZvcmNlIHRoZSBjb250cm9sbGVyIHRvIAorICAgICAgICAgIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cyB0aGFuIHdoYXQgdGhlIEludGVycnVwdCBUaHJvdHRsZSBSYXRlIAorICAgICAgICAgIGFsbG93cy4KKyAgICBDQVVUSU9OOiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBJbnRlbCBQUk8vMTAwMCBDVCBOZXR3b3JrIENvbm5lY3Rpb24gCisgICAgICAgICAgICAgKGNvbnRyb2xsZXIgODI1NDcpLCBzZXR0aW5nIEludGVycnVwdFRocm90dGxlUmF0ZSB0byBhIHZhbHVlIAorICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiA3NSwwMDAsIG1heSBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgYWRhcHRlcnMgdW5kZXIgCisgICAgICAgICAgICAgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuIElmIHRoaXMgb2NjdXJzIGEgTkVUREVWIFdBVENIRE9HIAorICAgICAgICAgICAgIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gZXZlbnQgbG9nLiBJbiBhZGRpdGlvbiwgdGhlIAorICAgICAgICAgICAgIGNvbnRyb2xsZXIgaXMgYXV0b21hdGljYWxseSByZXNldCwgcmVzdG9yaW5nIHRoZSBuZXR3b3JrIAorICAgICAgICAgICAgIGNvbm5lY3Rpb24uIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsIGZvciB0aGUgaGFuZywgZW5zdXJlIAorICAgICAgICAgICAgIHRoYXQgSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIHNldCBubyBncmVhdGVyIHRoYW4gNzUsMDAwIGFuZCBpcyAKKyAgICAgICAgICAgICBub3Qgc2V0IHRvIDAuCisgICAgTk9URTogV2hlbiBlMTAwMCBpcyBsb2FkZWQgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGFuZCBtdWx0aXBsZSBhZGFwdGVycyBhcmUgCisgICAgICAgICAgaW4gdXNlIHNpbXVsdGFuZW91c2x5LCB0aGUgQ1BVIHV0aWxpemF0aW9uIG1heSBpbmNyZWFzZSBub24tbGluZWFybHkuIAorICAgICAgICAgIEluIG9yZGVyIHRvIGxpbWl0IHRoZSBDUFUgdXRpbGl6YXRpb24gd2l0aG91dCBpbXBhY3RpbmcgdGhlIG92ZXJhbGwgCisgICAgICAgICAgdGhyb3VnaHB1dCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxvYWQgdGhlIGRyaXZlciBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgIGluc21vZCBlMTAwMC5vIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAorCisgICAgICAgICAgVGhpcyBzZXRzIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMzAwMCBpbnRlcnJ1cHRzL3NlYyBmb3IgdGhlIAorICAgICAgICAgIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBpbnN0YW5jZXMgb2YgdGhlIGRyaXZlci4gVGhlIHJhbmdlIG9mIDIwMDAgdG8gCisgICAgICAgICAgMzAwMCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgd29ya3Mgb24gYSBtYWpvcml0eSBvZiBzeXN0ZW1zIGFuZCBpcyBhIAorICAgICAgICAgIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCB0aGUgb3B0aW1hbCB2YWx1ZSB3aWxsIGJlIHBsYXRmb3JtLXNwZWNpZmljLiAKKyAgICAgICAgICBJZiBDUFUgdXRpbGl6YXRpb24gaXMgbm90IGEgY29uY2VybiwgdXNlIFJYX1BPTExJTkcgKE5BUEkpIGFuZCBkZWZhdWx0IAorICAgICAgICAgIGRyaXZlciBzZXR0aW5ncy4KKworUnhEZXNjcmlwdG9ycworVmFsaWQgUmFuZ2U6IDgwLTI1NiBmb3IgODI1NDIgYW5kIDgyNTQzLWJhc2VkIGFkYXB0ZXJzCisgICAgICAgICAgICAgODAtNDA5NiBmb3IgYWxsIG90aGVyIHN1cHBvcnRlZCBhZGFwdGVycworRGVmYXVsdCBWYWx1ZTogMjU2CisgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuIAorICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBidWZmZXIgbW9yZSBpbmNvbWluZyBwYWNrZXRzLiAKKyAgICBFYWNoIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuICBBIHJlY2VpdmUgYnVmZmVyIGlzIGFsbG9jYXRlZCBmb3IgZWFjaAorICAgIGRlc2NyaXB0b3IgYW5kIGNhbiBlaXRoZXIgYmUgMjA0OCBvciA0MDk2IGJ5dGVzIGxvbmcsIGRlcGVuZGluZyBvbiB0aGUgTVRVIAorCisgICAgc2V0dGluZy4gQW4gaW5jb21pbmcgcGFja2V0IGNhbiBzcGFuIG9uZSBvciBtb3JlIHJlY2VpdmUgZGVzY3JpcHRvcnMuIAorICAgIFRoZSBtYXhpbXVtIE1UVSBzaXplIGlzIDE2MTEwLgorCisgICAgTk9URTogTVRVIGRlc2lnbmF0ZXMgdGhlIGZyYW1lIHNpemUuIEl0IG9ubHkgbmVlZHMgdG8gYmUgc2V0IGZvciBKdW1ibyAKKyAgICAgICAgICBGcmFtZXMuCisgICAgTk9URTogRGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFibGUgc3lzdGVtIHJlc291cmNlcywgdGhlIHJlcXVlc3QgZm9yIGEKKyAgICBoaWdoZXIgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgbWF5IGJlIGRlbmllZC4gIEluIHRoaXMgY2FzZSwKKyAgICB1c2UgYSBsb3dlciBudW1iZXIuCisKK1J4SW50RGVsYXkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDAKKyAgICBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgMS4wMjQgCisgICAgbWljcm9zZWNvbmRzLiAgUmVjZWl2ZSBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVSBlZmZpY2llbmN5IGlmIAorICAgIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhZGRzIAorICAgIGV4dHJhIGxhdGVuY3kgdG8gZnJhbWUgcmVjZXB0aW9uIGFuZCBjYW4gZW5kIHVwIGRlY3JlYXNpbmcgdGhlIHRocm91Z2hwdXQgCisgICAgb2YgVENQIHRyYWZmaWMuIElmIHRoZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgcmVjZWl2ZXMsIHRoaXMgdmFsdWUgCisgICAgbWF5IGJlIHNldCB0b28gaGlnaCwgY2F1c2luZyB0aGUgZHJpdmVyIHRvIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHJlY2VpdmUgCisgICAgZGVzY3JpcHRvcnMuCisKKyAgICBDQVVUSU9OOiBXaGVuIHNldHRpbmcgUnhJbnREZWxheSB0byBhIHZhbHVlIG90aGVyIHRoYW4gMCwgYWRhcHRlcnMgbWF5IAorICAgICAgICAgICAgIGhhbmcgKHN0b3AgdHJhbnNtaXR0aW5nKSB1bmRlciBjZXJ0YWluIG5ldHdvcmsgY29uZGl0aW9ucy4gSWYgCisgICAgICAgICAgICAgdGhpcyBvY2N1cnMgYSBORVRERVYgV0FUQ0hET0cgbWVzc2FnZSBpcyBsb2dnZWQgaW4gdGhlIHN5c3RlbQorICAgICAgICAgICAgIGV2ZW50IGxvZy4gSW4gYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIAorICAgICAgICAgICAgIHJlc3RvcmluZyB0aGUgbmV0d29yayBjb25uZWN0aW9uLiBUbyBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IKKyAgICAgICAgICAgICB0aGUgaGFuZyBlbnN1cmUgdGhhdCBSeEludERlbGF5IGlzIHNldCB0byAwLgorCitSeEFic0ludERlbGF5ICg4MjU0MCwgODI1NDUgYW5kIGxhdGVyIGFkYXB0ZXJzIG9ubHkpCitWYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitEZWZhdWx0IFZhbHVlOiAxMjgKKyAgICBUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYSAKKyAgICByZWNlaXZlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFVzZWZ1bCBvbmx5IGlmIFJ4SW50RGVsYXkgaXMgbm9uLXplcm8sIAorICAgIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgCisgICAgcGFja2V0IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGUgc2V0IGFtb3VudCBvZiB0aW1lLiAgUHJvcGVyIHR1bmluZywKKyAgICBhbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCisgICAgY29uZGl0aW9ucy4KKworU3BlZWQgKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQorVmFsaWQgU2V0dGluZ3M6IDAsIDEwLCAxMDAsIDEwMDAKK0RlZmF1bHQgVmFsdWU6IDAgKGF1dG8tbmVnb3RpYXRlIGF0IGFsbCBzdXBwb3J0ZWQgc3BlZWRzKQorICAgIFNwZWVkIGZvcmNlcyB0aGUgbGluZSBzcGVlZCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIG1lZ2FiaXRzIHBlciBzZWNvbmQKKyAgICAoTWJwcykuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgc2V0IHRvIDAgYW5kIHRoZSBsaW5rIAorICAgIHBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLCB0aGUgYm9hcmQgd2lsbCBhdXRvLWRldGVjdCB0aGUgY29ycmVjdCAKKyAgICBzcGVlZC4gRHVwbGV4IHNob3VsZCBhbHNvIGJlIHNldCB3aGVuIFNwZWVkIGlzIHNldCB0byBlaXRoZXIgMTAgb3IgMTAwLgorCitUeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogODAtMjU2IGZvciA4MjU0MiBhbmQgODI1NDMtYmFzZWQgYWRhcHRlcnMKKyAgICAgICAgICAgICA4MC00MDk2IGZvciBhbGwgb3RoZXIgc3VwcG9ydGVkIGFkYXB0ZXJzCitEZWZhdWx0IFZhbHVlOiAyNTYKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCisgICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIHF1ZXVlIG1vcmUgdHJhbnNtaXRzLiBFYWNoIAorICAgIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuCisKKyAgICBOT1RFOiBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQorICAgIGhpZ2hlciBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgbWF5IGJlIGRlbmllZC4gIEluIHRoaXMgY2FzZSwKKyAgICB1c2UgYSBsb3dlciBudW1iZXIuCisKK1R4SW50RGVsYXkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDY0CisgICAgVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgdHJhbnNtaXQgaW50ZXJydXB0cyBpbiB1bml0cyBvZiAKKyAgICAxLjAyNCBtaWNyb3NlY29uZHMuIFRyYW5zbWl0IGludGVycnVwdCByZWR1Y3Rpb24gY2FuIGltcHJvdmUgQ1BVCisgICAgZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJZiB0aGUKKyAgICBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgdHJhbnNtaXRzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gKKyAgICBjYXVzaW5nIHRoZSBkcml2ZXIgdG8gcnVuIG91dCBvZiBhdmFpbGFibGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMuCisKK1R4QWJzSW50RGVsYXkgKDgyNTQwLCA4MjU0NSBhbmQgbGF0ZXIgYWRhcHRlcnMgb25seSkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDY0CisgICAgVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEgCisgICAgdHJhbnNtaXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgVHhJbnREZWxheSBpcyBub24temVybywgCisgICAgdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbCAKKyAgICBwYWNrZXQgaXMgc2VudCBvbiB0aGUgd2lyZSB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCisgICAgYWxvbmcgd2l0aCBUeEludERlbGF5LCBtYXkgaW1wcm92ZSB0cmFmZmljIHRocm91Z2hwdXQgaW4gc3BlY2lmaWMgCisgICAgbmV0d29yayBjb25kaXRpb25zLgorCitYc3VtUlggKG5vdCBhdmFpbGFibGUgb24gdGhlIDgyNTQyLWJhc2VkIGFkYXB0ZXIpCitWYWxpZCBSYW5nZTogMC0xCitEZWZhdWx0IFZhbHVlOiAxCisgICAgQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCisgICAgb2ZmbG9hZCBmb3IgcmVjZWl2ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgaGFyZHdhcmUuCisKK1NwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RocmVlIGtleXdvcmRzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNwZWVkIGFuZCBkdXBsZXggY29uZmlndXJhdGlvbi4gVGhlc2UgCitrZXl3b3JkcyBhcmUgU3BlZWQsIER1cGxleCwgYW5kIEF1dG9OZWcuCisKK0lmIHRoZSBib2FyZCB1c2VzIGEgZmliZXIgaW50ZXJmYWNlLCB0aGVzZSBrZXl3b3JkcyBhcmUgaWdub3JlZCwgYW5kIHRoZSAKK2ZpYmVyIGludGVyZmFjZSBib2FyZCBvbmx5IGxpbmtzIGF0IDEwMDAgTWJwcyBmdWxsLWR1cGxleC4KKworRm9yIGNvcHBlci1iYXNlZCBib2FyZHMsIHRoZSBrZXl3b3JkcyBpbnRlcmFjdCBhcyBmb2xsb3dzOgorCisgIFRoZSBkZWZhdWx0IG9wZXJhdGlvbiBpcyBhdXRvLW5lZ290aWF0ZS4gVGhlIGJvYXJkIGFkdmVydGlzZXMgYWxsIHN1cHBvcnRlZAorICBzcGVlZCBhbmQgZHVwbGV4IGNvbWJpbmF0aW9ucywgYW5kIGl0IGxpbmtzIGF0IHRoZSBoaWdoZXN0IGNvbW1vbiBzcGVlZCBhbmQKKyAgZHVwbGV4IG1vZGUgSUYgdGhlIGxpbmsgcGFydG5lciBpcyBzZXQgdG8gYXV0by1uZWdvdGlhdGUuCisKKyAgSWYgU3BlZWQgPSAxMDAwLCBsaW1pdGVkIGF1dG8tbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBhbmQgb25seSAxMDAwIE1icHMgaXMKKyAgYWR2ZXJ0aXNlZCAoVGhlIDEwMDBCYXNlVCBzcGVjIHJlcXVpcmVzIGF1dG8tbmVnb3RpYXRpb24uKQorCisgIElmIFNwZWVkID0gMTAgb3IgMTAwLCB0aGVuIGJvdGggU3BlZWQgYW5kIER1cGxleCBzaG91bGQgYmUgc2V0LiBBdXRvLQorICBuZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgYW5kIHRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBQYXJ0bmVyIFNIT1VMRAorICBhbHNvIGJlIGZvcmNlZC4KKworVGhlIEF1dG9OZWcgcGFyYW1ldGVyIGlzIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wgaXMgcmVxdWlyZWQgb3ZlciB0aGUgYXV0by0KK25lZ290aWF0aW9uIHByb2Nlc3MuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgU3BlZWQgYW5kIER1cGxleCBwYXJhbWV0ZXJzIAorbXVzdCBub3QgYmUgc3BlY2lmaWVkLiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyBzdXBwb3J0ZWQgdmFsdWVzIGZvciB0aGUgCitBdXRvTmVnIHBhcmFtZXRlcjoKKworU3BlZWQgKE1icHMpICAgCQkgMTAwMCAgICAgIDEwMCAgICAxMDAgICAgMTAgICAgIDEwCitEdXBsZXggICAgICAgICAgICAgICAgICAgRnVsbCAgICAgIEZ1bGwgICBIYWxmICAgRnVsbCAgIEhhbGYKK1ZhbHVlIChpbiBiYXNlIDE2KSAgICAgICAweDIwICAgICAgMHgwOCAgIDB4MDQgICAweDAyICAgMHgwMQorCitFeGFtcGxlOiBpbnNtb2QgZTEwMDAgQXV0b05lZz0weDAzLCBsb2FkcyBlMTAwMCBhbmQgc3BlY2lmaWVzICgxMCBmdWxsIGR1cGxleCwgCisxMCBoYWxmIGR1cGxleCkgZm9yIG5lZ290aWF0aW9uIHdpdGggdGhlIHBlZXIuCisKK05vdGUgdGhhdCBzZXR0aW5nIEF1dG9OZWcgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGJvYXJkIHdpbGwgbGluayBhdCB0aGUgCitoaWdoZXN0IHNwZWNpZmllZCBzcGVlZCBvciBkdXBsZXggbW9kZSwgYnV0IHRoZSBib2FyZCB3aWxsIGxpbmsgYXQgdGhlIAoraGlnaGVzdCBwb3NzaWJsZSBzcGVlZC9kdXBsZXggb2YgdGhlIGxpbmsgcGFydG5lciBJRiB0aGUgbGluayBwYXJ0bmVyIGlzIGFsc28KK3NldCB0byBhdXRvLW5lZ290aWF0ZS4gSWYgdGhlIGxpbmsgcGFydG5lciBpcyBmb3JjZWQgc3BlZWQvZHVwbGV4LCB0aGUgCithZGFwdGVyIE1VU1QgYmUgZm9yY2VkIHRvIHRoZSBzYW1lIHNwZWVkL2R1cGxleC4KKworCitBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29uZmlndXJpbmcgdGhlIERyaXZlciBvbiBEaWZmZXJlbnQgRGlzdHJpYnV0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkIGlzCisgIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcyBhZGRpbmcKKyAgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgCisgIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE1hbnkgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHNoaXAgCisgIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvIAorICBjb25maWd1cmUgYSBuZXR3b3JrIGRldmljZSBmb3IgeW91ciBzeXN0ZW0sIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIAorICBkb2N1bWVudGF0aW9uLiBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIAorICBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwgUFJPLzEwMDAgRmFtaWx5IG9mIAorICBBZGFwdGVycyBpcyBlMTAwMC4KKworICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgZTEwMDAgZHJpdmVyIGZvciB0d28gUFJPLzEwMDAgYWRhcHRlcnMgCisgIChldGgwIGFuZCBldGgxKSBhbmQgc2V0IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHRvIDEwZnVsbCBhbmQgMTAwaGFsZiwgYWRkIHRoZSAKKyAgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZjoKKworICAgICAgIGFsaWFzIGV0aDAgZTEwMDAKKyAgICAgICBhbGlhcyBldGgxIGUxMDAwCisgICAgICAgb3B0aW9ucyBlMTAwMCBTcGVlZD0xMCwxMDAgRHVwbGV4PTIsMQorCisgIFZpZXdpbmcgTGluayBNZXNzYWdlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzIAorICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzIG9uIAorICB5b3VyIGNvbnNvbGUsIHNldCBkbWVzZyB0byBlaWdodCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgZG1lc2cgLW4gOAorCisgIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKyAgSnVtYm8gRnJhbWVzCisgIC0tLS0tLS0tLS0tLQorCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgSnVtYm8gRnJhbWVzIGZvciBhbGwgYWRhcHRlcnMgZXhjZXB0IDgyNTQyLWJhc2VkIAorICBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgCisgIGxhcmdlciB0aGFuIHRoZSBkZWZhdWx0IG9mIDE1MDAuIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0byBpbmNyZWFzZSB0aGUgCisgIE1UVSBzaXplLiBGb3IgZXhhbXBsZToKKworICAgICAgICBpZmNvbmZpZyBldGh4IG10dSA5MDAwIHVwCisKKyAgVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gVGhpcyB2YWx1ZSBjb2luY2lkZXMgCisgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgMTYxMjguCisKKyAgTk9URTogSnVtYm8gRnJhbWVzIGFyZSBzdXBwb3J0ZWQgYXQgMTAwMCBNYnBzIG9ubHkuIFVzaW5nIEp1bWJvIEZyYW1lcyBhdCAKKyAgMTAgb3IgMTAwIE1icHMgbWF5IHJlc3VsdCBpbiBwb29yIHBlcmZvcm1hbmNlIG9yIGxvc3Mgb2YgbGluay4KKworCisgIE5PVEU6IE1UVSBkZXNpZ25hdGVzIHRoZSBmcmFtZSBzaXplLiBUbyBlbmFibGUgSnVtYm8gRnJhbWVzLCBpbmNyZWFzZSB0aGUKKyAgTVRVIHNpemUgb24gdGhlIGludGVyZmFjZSBiZXlvbmQgMTUwMC4KKworICBFdGh0b29sCisgIC0tLS0tLS0KKworICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIHZlcnNpb24gMS42IG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKKyAgVGhlIGxhdGVzdCByZWxlYXNlIG9mIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGZyb20KKyAgaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9na2VybmVsLiAgCisKKyAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydCAKKyAgZm9yIGEgbW9yZSBjb21wbGV0ZSBldGh0b29sIGZlYXR1cmUgc2V0IGNhbiBiZSBlbmFibGVkIGJ5IHVwZ3JhZGluZyAKKyAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLiAKKworICBFbmFibGluZyBXYWtlIG9uIExBTiogKFdvTCkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4gRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoCisgIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiBGb3Igb3RoZXIgTGludXggZGlzdHJpYnV0aW9ucywgCisgIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IAorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisKKyAgRm9yIGluc3RydWN0aW9ucyBvbiBlbmFibGluZyBXb0wgd2l0aCBFdGh0b29sLCByZWZlciB0byB0aGUgd2Vic2l0ZSBsaXN0ZWQgCisgIGFib3ZlLgorCisgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4gCisgIEZvciB0aGlzIGRyaXZlciB2ZXJzaW9uLCBpbiBvcmRlciB0byBlbmFibGUgV29MLCB0aGUgZTEwMDAgZHJpdmVyIG11c3QgYmUgCisgIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCisKKyAgTkFQSQorICAtLS0tCisKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAwIGRyaXZlci4gTkFQSSBpcyBlbmFibGVkCisgIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBrZXJuZWwuIAorCisgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCisKKworS25vd24gSXNzdWVzCis9PT09PT09PT09PT0KKworICBKdW1ibyBGcmFtZXMgU3lzdGVtIFJlcXVpcmVtZW50CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgb24gTGludXggc3lzdGVtcyB3aXRoIDY0IE1CIAorICBvZiBSQU0gb3IgbGVzcyB0aGF0IGFyZSBydW5uaW5nIEp1bWJvIEZyYW1lcy4gSWYgeW91IGFyZSB1c2luZyBKdW1ibyBGcmFtZXMsCisgIHlvdXIgc3lzdGVtIG1heSByZXF1aXJlIG1vcmUgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBtaW5pbXVtIHJlcXVpcmVtZW50IG9mIDY0IE1CCisgIG9mIHN5c3RlbSBtZW1vcnkuCisKKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIAordGhlIGlzc3VlIHRvIGxpbnV4Lm5pY3NAaW50ZWwuY29tLgorCisKK0xpY2Vuc2UKKz09PT09PT0KKworVGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2UgYWdyZWVtZW50IAorYmV0d2VlbiB5b3UgKCdMaWNlbnNlZScpIGFuZCBJbnRlbC4gRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgb3IgYW55IAorYXNzb2NpYXRlZCBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSwgdGhlICdTb2Z0d2FyZScpIHVudGlsIHlvdSBoYXZlIGNhcmVmdWxseSAKK3JlYWQgdGhlIGZ1bGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExJQ0VOU0UgbG9jYXRlZCBpbiB0aGlzIHNvZnR3YXJlIAorcGFja2FnZS4gQnkgbG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyAKK0FncmVlbWVudC4gSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZG8gbm90IAoraW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLgorCisqIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lcWwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2VxbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxNTUwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lcWwudHh0CkBAIC0wLDAgKzEsNTI4IEBACisgIEVRTCBEcml2ZXI6IFNlcmlhbCBJUCBMb2FkIEJhbGFuY2luZyBIT1dUTworICBTaW1vbiAiR3VydSBBbGVwaC1OdWxsIiBKYW5lcywgc2ltb25AbmNtLmNvbQorICB2MS4xLCBGZWJydWFyeSAyNywgMTk5NQorCisgIFRoaXMgaXMgdGhlIG1hbnVhbCBmb3IgdGhlIEVRTCBkZXZpY2UgZHJpdmVyLiBFUUwgaXMgYSBzb2Z0d2FyZSBkZXZpY2UKKyAgdGhhdCBsZXRzIHlvdSBsb2FkLWJhbGFuY2UgSVAgc2VyaWFsIGxpbmtzIChTTElQIG9yIHVuY29tcHJlc3NlZCBQUFApCisgIHRvIGluY3JlYXNlIHlvdXIgYmFuZHdpZHRoLiBJdCB3aWxsIG5vdCByZWR1Y2UgeW91ciBsYXRlbmN5IChpLmUuIHBpbmcKKyAgdGltZXMpIGV4Y2VwdCBpbiB0aGUgY2FzZSB3aGVyZSB5b3UgYWxyZWFkeSBoYXZlIGxvdHMgb2YgdHJhZmZpYyBvbgorICB5b3VyIGxpbmssIGluIHdoaWNoIGl0IHdpbGwgaGVscCB0aGVtIG91dC4gVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkCisgIHdpdGggdGhlIDEuMS43NSBrZXJuZWwsIGFuZCBpcyBrbm93biB0byBoYXZlIHBhdGNoZWQgY2xlYW5seSB3aXRoCisgIDEuMS44Ni4gIFNvbWUgdGVzdGluZyB3aXRoIDEuMS45MiBoYXMgYmVlbiBkb25lIHdpdGggdGhlIHYxLjEgcGF0Y2gKKyAgd2hpY2ggd2FzIG9ubHkgY3JlYXRlZCB0byBwYXRjaCBjbGVhbmx5IGluIHRoZSB2ZXJ5IGxhdGVzdCBrZXJuZWwKKyAgc291cmNlIHRyZWVzLiAoWWVzLCBpdCB3b3JrZWQgZmluZS4pCisKKyAgMS4gIEludHJvZHVjdGlvbgorCisgIFdoaWNoIGlzIHdvcnNlPyBBIGh1Z2UgZmVlIGZvciBhIDU2SyBsZWFzZWQgbGluZSBvciB0d28gcGhvbmUgbGluZXM/CisgIEl0J3MgcHJvYmFibHkgdGhlIGZvcm1lci4gIElmIHlvdSBmaW5kIHlvdXJzZWxmIGNyYXZpbmcgbW9yZSBiYW5kd2lkdGgsCisgIGFuZCBoYXZlIGEgSVNQIHRoYXQgaXMgZmxleGlibGUsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBiaW5kIG1vZGVtcworICB0b2dldGhlciB0byB3b3JrIGFzIG9uZSBwb2ludC10by1wb2ludCBsaW5rIHRvIGluY3JlYXNlIHlvdXIKKyAgYmFuZHdpZHRoLiAgQWxsIHdpdGhvdXQgaGF2aW5nIHRvIGhhdmUgYSBzcGVjaWFsIGJsYWNrIGJveCBvbiBlaXRoZXIKKyAgc2lkZS4KKworCisgIFRoZSBlcWwgZHJpdmVyIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGggdGhlIExpdmluZ3N0b24gUG9ydE1hc3Rlci0yZQorICB0ZXJtaW5hbCBzZXJ2ZXIuIEkgZG8gbm90IGtub3cgaWYgb3RoZXIgdGVybWluYWwgc2VydmVycyBzdXBwb3J0IGxvYWQtCisgIGJhbGFuY2luZywgYnV0IEkgZG8ga25vdyB0aGF0IHRoZSBQb3J0TWFzdGVyIGRvZXMgaXQsIGFuZCBkb2VzIGl0CisgIGFsbW9zdCBhcyB3ZWxsIGFzIHRoZSBlcWwgZHJpdmVyIHNlZW1zIHRvIGRvIGl0ICgtLSBVbmZvcnR1bmF0ZWx5LCBpbgorICBteSB0ZXN0aW5nIHNvIGZhciwgdGhlIExpdmluZ3N0b24gUG9ydE1hc3RlciAyZSdzIGxvYWQtYmFsYW5jaW5nIGlzIGEKKyAgZ29vZCAxIHRvIDIgS0IvcyBzbG93ZXIgdGhhbiB0aGUgdGVzdCBtYWNoaW5lIHdvcmtpbmcgd2l0aCBhIDI4LjggS2JwcworICBhbmQgMTQuNCBLYnBzIGNvbm5lY3Rpb24uICBIb3dldmVyLCBJIGFtIG5vdCBzdXJlIHRoYXQgaXQgcmVhbGx5IGlzCisgIHRoZSBQb3J0TWFzdGVyLCBvciBpZiBpdCdzIExpbnV4J3MgVENQIGRyaXZlcnMuIEknbSB0b2xkIHRoYXQgTGludXgncworICBUQ1AgaW1wbGVtZW50YXRpb24gaXMgcHJldHR5IGZhc3QgdGhvdWdoLi0tKQorCisKKyAgSSBzdWdnZXN0IHRvIElTUHMgb3V0IHRoZXJlIHRoYXQgaXQgd291bGQgcHJvYmFibHkgYmUgZmFpciB0byBjaGFyZ2UKKyAgYSBsb2FkLWJhbGFuY2luZyBjbGllbnQgNzUlIG9mIHRoZSBjb3N0IG9mIHRoZSBzZWNvbmQgbGluZSBhbmQgNTAlIG9mCisgIHRoZSBjb3N0IG9mIHRoZSB0aGlyZCBsaW5lIGV0Yy4uLgorCisKKyAgSGV5LCB3ZSBjYW4gYWxsIGRyZWFtIHlvdSBrbm93Li4uCisKKworICAyLiAgS2VybmVsIENvbmZpZ3VyYXRpb24KKworICBIZXJlIEkgZGVzY3JpYmUgdGhlIGdlbmVyYWwgc3RlcHMgb2YgZ2V0dGluZyBhIGtlcm5lbCB1cCBhbmQgd29ya2luZworICB3aXRoIHRoZSBlcWwgZHJpdmVyLglGcm9tIHBhdGNoaW5nLCBidWlsZGluZywgdG8gaW5zdGFsbGluZy4KKworCisgIDIuMS4JUGF0Y2hpbmcgVGhlIEtlcm5lbAorCisgIElmIHlvdSBkbyBub3QgaGF2ZSBvciBjYW5ub3QgZ2V0IGEgY29weSBvZiB0aGUga2VybmVsIHdpdGggdGhlIGVxbAorICBkcml2ZXIgZm9sZGVkIGludG8gaXQsIGdldCB5b3VyIGNvcHkgb2YgdGhlIGRyaXZlciBmcm9tCisgIGZ0cDovL3NsYXVnaHRlci5uY20uY29tL3B1Yi9MaW51eC9MT0FEX0JBTEFOQ0lORy9lcWwtMS4xLnRhci5nei4KKyAgVW5wYWNrIHRoaXMgYXJjaGl2ZSBzb21lcGxhY2Ugb2J2aW91cyBsaWtlIC91c3IvbG9jYWwvc3JjLy4gIEl0IHdpbGwKKyAgY3JlYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIC1ydy1yLS1yLS0gZ3VydS9uY20JMTk4IEphbiAxOSAxODo1MyAxOTk1IGVxbC0xLjEvTk8tV0FSUkFOVFkKKyAgICAgICAtcnctci0tci0tIGd1cnUvbmNtCTMwNjIwIEZlYiAyNyAyMTo0MCAxOTk1IGVxbC0xLjEvZXFsLTEuMS5wYXRjaAorICAgICAgIC1yd3hyLXhyLXggZ3VydS9uY20JMTYxMTEgSmFuIDEyIDIyOjI5IDE5OTUgZXFsLTEuMS9lcWxfZW5zbGF2ZQorICAgICAgIC1ydy1yLS1yLS0gZ3VydS9uY20JMjE5NSBKYW4gMTAgMjE6NDggMTk5NSBlcWwtMS4xL2VxbF9lbnNsYXZlLmMKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgVW5wYWNrIGEgcmVjZW50IGtlcm5lbCAoc29tZXRoaW5nIGFmdGVyIDEuMS45Mikgc29tZXBsYWNlIGNvbnZlbmllbnQKKyAgbGlrZSBzYXkgL3Vzci9zcmMvbGludXgtMS4xLjkyLmVxbC4gVXNlIHN5bWJvbGljIGxpbmtzIHRvIHBvaW50CisgIC91c3Ivc3JjL2xpbnV4IHRvIHRoaXMgZGV2ZWxvcG1lbnQgZGlyZWN0b3J5LgorCisKKyAgQXBwbHkgdGhlIHBhdGNoIGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmRzOgorCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgY2QgL3Vzci9zcmMKKyAgICAgICBwYXRjaCA8L3Vzci9sb2NhbC9zcmMvZXFsLTEuMS9lcWwtMS4xLnBhdGNoCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgMi4yLglCdWlsZGluZyBUaGUgS2VybmVsCisKKyAgQWZ0ZXIgcGF0Y2hpbmcgdGhlIGtlcm5lbCwgcnVuIG1ha2UgY29uZmlnIGFuZCBjb25maWd1cmUgdGhlIGtlcm5lbAorICBmb3IgeW91ciBoYXJkd2FyZS4KKworCisgIEFmdGVyIGNvbmZpZ3VyYXRpb24sIG1ha2UgYW5kIGluc3RhbGwgYWNjb3JkaW5nIHRvIHlvdXIgaGFiaXQuCisKKworICAzLiAgTmV0d29yayBDb25maWd1cmF0aW9uCisKKyAgU28gZmFyLCBJIGhhdmUgb25seSB1c2VkIHRoZSBlcWwgZGV2aWNlIHdpdGggdGhlIERTTElQIFNMSVAgY29ubmVjdGlvbgorICBtYW5hZ2VyIGJ5IE1hdHQgRGlsbG9uICgtLSAiVGhlIG1hbiB3aG8gc29sZCBoaXMgc291bCB0byBjb2RlIHNvIG11Y2gKKyAgc28gcXVpY2tseS4iLS0pIC4gIEhvdyB5b3UgY29uZmlndXJlIGl0IGZvciBvdGhlciAiY29ubmVjdGlvbiIKKyAgbWFuYWdlcnMgaXMgdXAgdG8geW91LiAgTW9zdCBvdGhlciBjb25uZWN0aW9uIG1hbmFnZXJzIHRoYXQgSSd2ZSBzZWVuCisgIGRvbid0IGRvIGEgdmVyeSBnb29kIGpvYiB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIG1vcmUgdGhhbiBvbmUKKyAgY29ubmVjdGlvbi4KKworCisgIDMuMS4JL2V0Yy9yYy5kL3JjLmluZXQxCisKKyAgSW4gcmMuaW5ldDEsIGlmY29uZmlnIHRoZSBlcWwgZGV2aWNlIHRvIHRoZSBJUCBhZGRyZXNzIHlvdSB1c3VhbGx5IHVzZQorICBmb3IgeW91ciBtYWNoaW5lLCBhbmQgdGhlIE1UVSB5b3UgcHJlZmVyIGZvciB5b3VyIFNMSVAgbGluZXMuCU9uZQorICBjb3VsZCBhcmd1ZSB0aGF0IE1UVSBzaG91bGQgYmUgcm91Z2hseSBoYWxmIHRoZSB1c3VhbCBzaXplIGZvciB0d28KKyAgbW9kZW1zLCBvbmUtdGhpcmQgZm9yIHRocmVlLCBvbmUtZm91cnRoIGZvciBmb3VyLCBldGMuLi4gIEJ1dCBnb2luZworICB0b28gZmFyIGJlbG93IDI5NiBpcyBwcm9iYWJseSBvdmVya2lsbC4gSGVyZSBpcyBhbiBleGFtcGxlIGlmY29uZmlnCisgIGNvbW1hbmQgdGhhdCBzZXRzIHVwIHRoZSBlcWwgZGV2aWNlOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICBpZmNvbmZpZyBlcWwgMTk4LjY3LjMzLjIzOSBtdHUgMTAwNgorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIE9uY2UgdGhlIGVxbCBkZXZpY2UgaXMgdXAgYW5kIHJ1bm5pbmcsIGFkZCBhIHN0YXRpYyBkZWZhdWx0IHJvdXRlIHRvCisgIGl0IGluIHRoZSByb3V0aW5nIHRhYmxlIHVzaW5nIHRoZSBjb29sIG5ldyByb3V0ZSBzeW50YXggdGhhdCBtYWtlcworICBsaWZlIHNvIG11Y2ggZWFzaWVyOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBlcWwKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworICAzLjIuCUVuc2xhdmluZyBEZXZpY2VzIEJ5IEhhbmQKKworICBFbnNsYXZpbmcgZGV2aWNlcyBieSBoYW5kIHJlcXVpcmVzIHR3byB1dGlsaXR5IHByb2dyYW1zOiBlcWxfZW5zbGF2ZQorICBhbmQgZXFsX2VtYW5jaXBhdGUgKC0tIGVxbF9lbWFuY2lwYXRlIGhhc24ndCBiZWVuIHdyaXR0ZW4gYmVjYXVzZSB3aGVuCisgIGFuIGVuc2xhdmVkIGRldmljZSAiZGllcyIsIGl0IGlzIGF1dG9tYXRpY2FsbHkgdGFrZW4gb3V0IG9mIHRoZSBxdWV1ZS4KKyAgSSBoYXZlbid0IGZvdW5kIGEgZ29vZCByZWFzb24gdG8gd3JpdGUgaXQgeWV0Li4uIG90aGVyIHRoYW4gZm9yCisgIGNvbXBsZXRlbmVzcywgYnV0IHRoYXQgaXNuJ3QgYSBnb29kIG1vdGl2YXRvciBpcyBpdD8tLSkKKworCisgIFRoZSBzeW50YXggZm9yIGVuc2xhdmluZyBhIGRldmljZSBpcyAiZXFsX2Vuc2xhdmUgPG1hc3Rlci1uYW1lPgorICA8c2xhdmUtbmFtZT4gPGVzdGltYXRlZC1icHM+Ii4gIEhlcmUgYXJlIHNvbWUgZXhhbXBsZSBlbnNsYXZpbmdzOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICBlcWxfZW5zbGF2ZSBlcWwgc2wwIDI4ODAwCisgICAgICAgZXFsX2Vuc2xhdmUgZXFsIHBwcDAgMTQ0MDAKKyAgICAgICBlcWxfZW5zbGF2ZSBlcWwgc2wxIDU3NjAwCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgV2hlbiB5b3Ugd2FudCB0byBmcmVlIGEgZGV2aWNlIGZyb20gaXRzIGxpZmUgb2Ygc2xhdmVyeSwgeW91IGNhbgorICBlaXRoZXIgZG93biB0aGUgZGV2aWNlIHdpdGggaWZjb25maWcgKGVxbCB3aWxsIGF1dG9tYXRpY2FsbHkgYnVyeSB0aGUKKyAgZGVhZCBzbGF2ZSBhbmQgcmVtb3ZlIGl0IGZyb20gaXRzIHF1ZXVlKSBvciB1c2UgZXFsX2VtYW5jaXBhdGUgdG8gZnJlZQorICBpdC4gKC0tIE9yIGp1c3QgaWZjb25maWcgaXQgZG93biwgYW5kIHRoZSBlcWwgZHJpdmVyIHdpbGwgdGFrZSBpdCBvdXQKKyAgZm9yIHlvdS4tLSkKKworCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgZXFsX2VtYW5jaXBhdGUgZXFsIHNsMAorICAgICAgIGVxbF9lbWFuY2lwYXRlIGVxbCBwcHAwCisgICAgICAgZXFsX2VtYW5jaXBhdGUgZXFsIHNsMQorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIDMuMy4JRFNMSVAgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGVxbCBEZXZpY2UKKworICBUaGUgZ2VuZXJhbCBpZGVhIGlzIHRvIGJyaW5nIHVwIGFuZCBrZWVwIHVwIGFzIG1hbnkgU0xJUCBjb25uZWN0aW9ucworICBhcyB5b3UgbmVlZCwgYXV0b21hdGljYWxseS4KKworCisgIDMuMy4xLiAgL2V0Yy9zbGlwL3J1bnNsaXAuY29uZgorCisgIEhlcmUgaXMgYW4gZXhhbXBsZSBydW5zbGlwLmNvbmY6CisKKworCisKKworCisKKworCisKKworCisKKworCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgbmFtZQkJc2wtbGluZS0xCisgIGVuYWJsZWQKKyAgYmF1ZAkJMzg0MDAKKyAgbXR1CQk1NzYKKyAgZHVjbWQJCS1lIC9ldGMvc2xpcC9kaWFsb3V0L2N1YTItMjg4LnhwIC10IDkKKyAgY29tbWFuZAkgZXFsX2Vuc2xhdmUgZXFsICRpbnRlcmZhY2UgMjg4MDAKKyAgYWRkcmVzcwkgMTk4LjY3LjMzLjIzOQorICBsaW5lCQkvZGV2L2N1YTIKKworICBuYW1lCQlzbC1saW5lLTIKKyAgZW5hYmxlZAorICBiYXVkCQkzODQwMAorICBtdHUJCTU3NgorICBkdWNtZAkJLWUgL2V0Yy9zbGlwL2RpYWxvdXQvY3VhMy0yODgueHAgLXQgOQorICBjb21tYW5kCSBlcWxfZW5zbGF2ZSBlcWwgJGludGVyZmFjZSAyODgwMAorICBhZGRyZXNzCSAxOTguNjcuMzMuMjM5CisgIGxpbmUJCS9kZXYvY3VhMworICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworCisKKworICAzLjQuCVVzaW5nIFBQUCBhbmQgdGhlIGVxbCBEZXZpY2UKKworICBJIGhhdmUgbm90IHlldCBkb25lIGFueSBsb2FkLWJhbGFuY2luZyB0ZXN0aW5nIGZvciBQUFAgZGV2aWNlcywgbWFpbmx5CisgIGJlY2F1c2UgSSBkb24ndCBoYXZlIGEgUFBQLWNvbm5lY3Rpb24gbWFuYWdlciBsaWtlIFNMSVAgaGFzIHdpdGgKKyAgRFNMSVAuIEkgZGlkIGZpbmQgYSBnb29kIHRpcCBmcm9tIExpbnV4TkVUOkJpbGx5IGZvciBQUFAgcGVyZm9ybWFuY2U6CisgIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhc3luY21hcCBzZXQgdG8gc29tZXRoaW5nIHNvIHRoYXQgY29udHJvbAorICBjaGFyYWN0ZXJzIGFyZSBub3QgZXNjYXBlZC4KKworCisgIEkgdHJpZWQgdG8gZml4IHVwIGEgUFBQIHNjcmlwdC9zeXN0ZW0gZm9yIHJlZGlhbGluZyBsb3N0IFBQUAorICBjb25uZWN0aW9ucyBmb3IgdXNlIHdpdGggdGhlIGVxbCBkcml2ZXIgdGhlIHdlZWtlbmQgb2YgRmViIDI1LTI2ICc5NQorICAoSGVyZWFmdGVyIGtub3duIGFzIHRoZSA4LWhvdXIgUFBQIEhhdGUgRmVzdGl2YWwpLiAgUGVyaGFwcyBsYXRlciB0aGlzCisgIHllYXIuCisKKworICA0LiAgQWJvdXQgdGhlIFNsYXZlIFNjaGVkdWxlciBBbGdvcml0aG0KKworICBUaGUgc2xhdmUgc2NoZWR1bGVyIHByb2JhYmx5IGNvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBkb3plbiBvdGhlcgorICB0aGluZ3MgYW5kIHB1c2ggdHJhZmZpYyBtdWNoIGZhc3Rlci4JVGhlIGZvcm11bGEgaW4gdGhlIGN1cnJlbnQgc2V0CisgIHVwIG9mIHRoZSBkcml2ZXIgd2FzIHR1bmVkIHRvIGhhbmRsZSBzbGF2ZXMgd2l0aCB3aWxkbHkgZGlmZmVyZW50CisgIGJpdHMtcGVyLXNlY29uZCAicHJpb3JpdGllcyIuCisKKworICBBbGwgdGVzdGluZyBJIGhhdmUgZG9uZSB3YXMgd2l0aCB0d28gMjguOCBWLkZDIG1vZGVtcywgb25lIGNvbm5lY3RpbmcKKyAgYXQgMjg4MDAgYnBzIG9yIHNsb3dlciwgYW5kIHRoZSBvdGhlciBjb25uZWN0aW5nIGF0IDE0NDAwIGJwcyBhbGwgdGhlCisgIHRpbWUuCisKKworICBPbmUgdmVyc2lvbiBvZiB0aGUgc2NoZWR1bGVyIHdhcyBhYmxlIHRvIHB1c2ggNS4zIEsvcyB0aHJvdWdoIHRoZQorICAyODgwMCBhbmQgMTQ0MDAgY29ubmVjdGlvbnMsIGJ1dCB3aGVuIHRoZSBwcmlvcml0aWVzIG9uIHRoZSBsaW5rcyB3ZXJlCisgIHZlcnkgd2lkZSBhcGFydCAoNTc2MDAgdnMuIDE0NDAwKSB0aGUgImZhc3RlciIgbW9kZW0gcmVjZWl2ZWQgYWxsCisgIHRyYWZmaWMgYW5kIHRoZSAic2xvd2VyIiBtb2RlbSBzdGFydmVkLgorCisKKyAgNS4gIFRlc3RlcnMnIFJlcG9ydHMKKworICBTb21lIHBlb3BsZSBoYXZlIGV4cGVyaW1lbnRlZCB3aXRoIHRoZSBlcWwgZGV2aWNlIHdpdGggbmV3ZXIKKyAga2VybmVscyAodGhhbiAxLjEuNzUpLiAgSSBoYXZlIHNpbmNlIHVwZGF0ZWQgdGhlIGRyaXZlciB0byBwYXRjaAorICBjbGVhbmx5IGluIG5ld2VyIGtlcm5lbHMgYmVjYXVzZSBvZiB0aGUgcmVtb3ZhbCBvZiB0aGUgb2xkICJzbGF2ZS0KKyAgYmFsYW5jaW5nIiBkcml2ZXIgY29uZmlnIG9wdGlvbi4KKworCisgIG8gIGljZWUgZnJvbSBMaW51eE5FVCBwYXRjaGVkIDEuMS44NiB3aXRob3V0IGFueSByZWplY3RzIGFuZCB3YXMgYWJsZQorICAgICB0byBib290IHRoZSBrZXJuZWwgYW5kIGVuc2xhdmUgYSBjb3VwbGUgb2YgSVNETiBQUFAgbGlua3MuCisKKyAgNS4xLglSYW5kb2xwaCBCZW50c29uJ3MgVGVzdCBSZXBvcnQKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIEZyb20gYmVudHNvbkBncmllZy5zZWFzbHVnLm9yZyBXZWQgRmViICA4IDE5OjA4OjA5IDE5OTUKKyAgRGF0ZTogVHVlLCA3IEZlYiA5NSAyMjo1NyBQU1QKKyAgRnJvbTogUmFuZG9scGggQmVudHNvbiA8YmVudHNvbkBncmllZy5zZWFzbHVnLm9yZz4KKyAgVG86IGd1cnVAbmNtLmNvbQorICBTdWJqZWN0OiBFUUwgZHJpdmVyIHRlc3RzCisKKworICBJIGhhdmUgYmVlbiBjaGVja2luZyBvdXQgeW91ciBlcWwgZHJpdmVyLiAgKE5pY2Ugd29yaywgdGhhdCEpCisgIEFsdGhvdWdoIHlvdSBtYXkgYWxyZWFkeSBkb25lIHRoaXMgcGVyZm9ybWFuY2UgdGVzdGluZywgaGVyZQorICBhcmUgc29tZSBkYXRhIEkndmUgZGlzY292ZXJlZC4KKworICBSYW5kb2xwaCBCZW50c29uCisgIGJlbnRzb25AZ3JpZWcuc2Vhc2x1Zy5vcmcKKworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgIEEgcHNldWRvLWRldmljZSBkcml2ZXIsIEVRTCwgd3JpdHRlbiBieSBTaW1vbiBKYW5lcywgY2FuIGJlIHVzZWQKKyAgdG8gYnVuZGxlIG11bHRpcGxlIFNMSVAgY29ubmVjdGlvbnMgaW50byB3aGF0IGFwcGVhcnMgdG8gYmUgYQorICBzaW5nbGUgY29ubmVjdGlvbi4gIFRoaXMgYWxsb3dzIG9uZSB0byBpbXByb3ZlIGRpYWwtdXAgbmV0d29yaworICBjb25uZWN0aXZpdHkgZ3JhZHVhbGx5LCB3aXRob3V0IGhhdmluZyB0byBidXkgZXhwZW5zaXZlIERTVS9DU1UKKyAgaGFyZHdhcmUgYW5kIHNlcnZpY2VzLgorCisgIEkgaGF2ZSBkb25lIHNvbWUgdGVzdGluZyBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIHR3byBnb2FscyBpbgorICBtaW5kOiBmaXJzdCwgdG8gZW5zdXJlIGl0IGFjdHVhbGx5IHdvcmtzIGFzIGRlc2NyaWJlZCBhbmQKKyAgc2Vjb25kLCBhcyBhIG1ldGhvZCBvZiBleGVyY2lzaW5nIG15IGRldmljZSBkcml2ZXIuCisKKyAgVGhlIGZvbGxvd2luZyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgd2VyZSBkZXJpdmVkIGZyb20gYSBzZXQKKyAgb2YgU0xJUCBjb25uZWN0aW9ucyBydW4gYmV0d2VlbiB0d28gTGludXggc3lzdGVtcyAoMS4xLjg0KSB1c2luZworICBhIDQ4NkRYMi82NiB3aXRoIGEgQ3ljbG9tLThZcyBhbmQgYSA0ODZTTEMvNDAgd2l0aCBhIEN5Y2xvbS0xNlkuCisgIChQb3J0cyAwLDEsMiwzIHdlcmUgdXNlZC4gIEEgbGF0ZXIgY29uZmlndXJhdGlvbiB3aWxsIGRpc3RyaWJ1dGUKKyAgcG9ydCBzZWxlY3Rpb24gYWNyb3NzIHRoZSBkaWZmZXJlbnQgQ2lycnVzIGNoaXBzIG9uIHRoZSBib2FyZHMuKQorICBPbmNlIGEgbGluayB3YXMgZXN0YWJsaXNoZWQsIEkgdGltZWQgYSBiaW5hcnkgZnRwIHRyYW5zZmVyIG9mCisgIDI4OTI4NCBieXRlcyBvZiBkYXRhLglJZiB0aGVyZSB3ZXJlIG5vIG92ZXJoZWFkIChwYWNrZXQgaGVhZGVycywKKyAgaW50ZXItY2hhcmFjdGVyIGFuZCBpbnRlci1wYWNrZXQgZGVsYXlzLCBldGMuKSB0aGUgdHJhbnNmZXJzCisgIHdvdWxkIHRha2UgdGhlIGZvbGxvd2luZyB0aW1lczoKKworICAgICAgYml0cy9zZWMJc2Vjb25kcworICAgICAgMzQ1NjAwCTguMworICAgICAgMjM0NjAwCTEyLjMKKyAgICAgIDE3MjgwMAkxNi43CisgICAgICAxNTM2MDAJMTguOAorICAgICAgNzY4MDAJMzcuNgorICAgICAgNTc2MDAJNTAuMgorICAgICAgMzg0MDAJNzUuMworICAgICAgMjg4MDAJMTAwLjQKKyAgICAgIDE5MjAwCTE1MC42CisgICAgICA5NjAwCTMwMS4zCisKKyAgQSBzaW5nbGUgbGluZSBydW5uaW5nIGF0IHRoZSBsb3dlciBzcGVlZHMgYW5kIHdpdGggbGFyZ2UgcGFja2V0cworICBjb21lcyB0byB3aXRoaW4gMiUgb2YgdGhpcy4gIFBlcmZvcm1hbmNlIGlzIGxpbWl0ZWQgZm9yIHRoZSBoaWdoZXIKKyAgc3BlZWRzIChhcyBwcmVkaWN0ZWQgYnkgdGhlIENpcnJ1cyBkYXRhYm9vaykgdG8gYW4gYWdncmVnYXRlIG9mCisgIGFib3V0IDE2MCBrYml0cy9zZWMuCVRoZSBuZXh0IHJvdW5kIG9mIHRlc3Rpbmcgd2lsbCBkaXN0cmlidXRlCisgIHRoZSBsb2FkIGFjcm9zcyB0d28gb3IgbW9yZSBDaXJydXMgY2hpcHMuCisKKyAgVGhlIGdvb2QgbmV3cyBpcyB0aGF0IG9uZSBnZXRzIG5lYXJseSB0aGUgZnVsbCBhZHZhbnRhZ2Ugb2YgdGhlCisgIHNlY29uZCwgdGhpcmQsIGFuZCBmb3VydGggbGluZSdzIGJhbmR3aWR0aC4gIChUaGUgYmFkIG5ld3MgaXMKKyAgdGhhdCB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHNlZW1lZCBmcmFnaWxlIGZvciB0aGUgaGlnaGVyCisgIHNwZWVkcy4gIE9uY2UgZXN0YWJsaXNoZWQsIHRoZSBjb25uZWN0aW9uIHNlZW1lZCByb2J1c3QgZW5vdWdoLikKKworICAjbGluZXMgIHNwZWVkCW10dSAgc2Vjb25kcwl0aGVvcnkgIGFjdHVhbCAgJW9mCisJIGtiaXQvc2VjICAgICAgZHVyYXRpb24Jc3BlZWQJc3BlZWQJbWF4CisgIDMJMTE1MjAwICA5MDAJXwkzNDU2MDAKKyAgMwkxMTUyMDAgIDQwMAkxOC4xCTM0NTYwMCAgMTU5ODI1ICA0NgorICAyCTExNTIwMCAgOTAwCV8JMjMwNDAwCisgIDIJMTE1MjAwICA2MDAJMTguMQkyMzA0MDAgIDE1OTgyNSAgNjkKKyAgMgkxMTUyMDAgIDQwMAkxOS4zCTIzMDQwMCAgMTQ5ODg4ICA2NQorICA0CTU3NjAwCTkwMAlfCTIzNDYwMAorICA0CTU3NjAwCTYwMAlfCTIzNDYwMAorICA0CTU3NjAwCTQwMAlfCTIzNDYwMAorICAzCTU3NjAwCTYwMAkyMC45CTE3MjgwMCAgMTM4NDEzICA4MAorICAzCTU3NjAwCTkwMAkyMS4yCTE3MjgwMCAgMTM2NDU1ICA3OAorICAzCTExNTIwMCAgNjAwCTIxLjcJMzQ1NjAwICAxMzMzMTEgIDM4CisgIDMJNTc2MDAJNDAwCTIyLjUJMTcyODAwICAxMjg1NzEgIDc0CisgIDQJMzg0MDAJOTAwCTI1LjIJMTUzNjAwICAxMTQ3OTUgIDc0CisgIDQJMzg0MDAJNjAwCTI2LjQJMTUzNjAwICAxMDk1NzcgIDcxCisgIDQJMzg0MDAJNDAwCTI3LjMJMTUzNjAwICAxMDU5NjUgIDY4CisgIDIJNTc2MDAJOTAwCTI5LjEJMTE1MjAwICA5OTQxMC4zIDg2CisgIDEJMTE1MjAwICA5MDAJMzAuNwkxMTUyMDAgIDk0MjI5LjMgODEKKyAgMgk1NzYwMAk2MDAJMzAuMgkxMTUyMDAgIDk1Nzg5LjQgODMKKyAgMwkzODQwMAk5MDAJMzAuMwkxMTUyMDAgIDk1NDczLjMgODIKKyAgMwkzODQwMAk2MDAJMzEuMgkxMTUyMDAgIDkyNzE5LjIgODAKKyAgMQkxMTUyMDAgIDYwMAkzMS4zCTExNTIwMCAgOTI0MjMJODAKKyAgMgk1NzYwMAk0MDAJMzIuMwkxMTUyMDAgIDg5NTYxLjYgNzcKKyAgMQkxMTUyMDAgIDQwMAkzMi44CTExNTIwMCAgODgxOTYuMyA3NgorICAzCTM4NDAwCTQwMAkzMy41CTExNTIwMCAgODYzNTMuNCA3NAorICAyCTM4NDAwCTkwMAk0My43CTc2ODAwCTY2MTk3LjcgODYKKyAgMgkzODQwMAk2MDAJNDQJNzY4MDAJNjU3NDYuNCA4NQorICAyCTM4NDAwCTQwMAk0Ny4yCTc2ODAwCTYxMjg5CTc5CisgIDQJMTkyMDAJOTAwCTUwLjgJNzY4MDAJNTY5NDUuNyA3NAorICA0CTE5MjAwCTQwMAk1My4yCTc2ODAwCTU0Mzc2LjcgNzAKKyAgNAkxOTIwMAk2MDAJNTMuNwk3NjgwMAk1Mzg3MC40IDcwCisgIDEJNTc2MDAJOTAwCTU0LjYJNTc2MDAJNTI5ODIuNCA5MQorICAxCTU3NjAwCTYwMAk1Ni4yCTU3NjAwCTUxNDc0CTg5CisgIDMJMTkyMDAJOTAwCTYwLjUJNTc2MDAJNDc4MTUuNSA4MworICAxCTU3NjAwCTQwMAk2MC4yCTU3NjAwCTQ4MDUzLjggODMKKyAgMwkxOTIwMAk2MDAJNjIJNTc2MDAJNDY2NTguNyA4MQorICAzCTE5MjAwCTQwMAk2NC43CTU3NjAwCTQ0NzExLjYgNzcKKyAgMQkzODQwMAk5MDAJNzkuNAkzODQwMAkzNjQzMy44IDk0CisgIDEJMzg0MDAJNjAwCTgyLjQJMzg0MDAJMzUxMDcuMyA5MQorICAyCTE5MjAwCTkwMAk4NC40CTM4NDAwCTM0Mjc1LjQgODkKKyAgMQkzODQwMAk0MDAJODYuOAkzODQwMAkzMzMyNy42IDg2CisgIDIJMTkyMDAJNjAwCTg3LjYJMzg0MDAJMzMwMjMuMyA4NQorICAyCTE5MjAwCTQwMAk5MS4yCTM4NDAwCTMxNzE5LjcgODIKKyAgNAk5NjAwCTkwMAk5NC43CTM4NDAwCTMwNTQ3LjQgNzkKKyAgNAk5NjAwCTQwMAkxMDYJMzg0MDAJMjcyOTAuOSA3MQorICA0CTk2MDAJNjAwCTExMAkzODQwMAkyNjI5OC41IDY4CisgIDMJOTYwMAk5MDAJMTE4CTI4ODAwCTI0NTE1LjYgODUKKyAgMwk5NjAwCTYwMAkxMjAJMjg4MDAJMjQxMDcJODMKKyAgMwk5NjAwCTQwMAkxMzEJMjg4MDAJMjIwODIuNyA3NgorICAxCTE5MjAwCTkwMAkxNTUJMTkyMDAJMTg2NjMuNSA5NworICAxCTE5MjAwCTYwMAkxNjEJMTkyMDAJMTc5NjgJOTMKKyAgMQkxOTIwMAk0MDAJMTcwCTE5MjAwCTE3MDE2LjcgODgKKyAgMgk5NjAwCTYwMAkxNzYJMTkyMDAJMTY0MzYuNiA4NQorICAyCTk2MDAJOTAwCTE4MAkxOTIwMAkxNjA3MS4zIDgzCisgIDIJOTYwMAk0MDAJMTgxCTE5MjAwCTE1OTgyLjUgODMKKyAgMQk5NjAwCTkwMAkzMDUJOTYwMAk5NDg0LjcyIDk4CisgIDEJOTYwMAk2MDAJMzE0CTk2MDAJOTIxMi44NyA5NQorICAxCTk2MDAJNDAwCTMzMgk5NjAwCTg3MTMuMzcgOTAKKworCisKKworCisgIDUuMi4JQW50aG9ueSBIZWFseSdzIFJlcG9ydAorCisKKworCisKKworCisgIERhdGU6IE1vbiwgMTMgRmViIDE5OTUgMTY6MTc6MjkgKzExMDAgKEVTVCkKKyAgRnJvbTogQW50b255IEhlYWxleSA8YWhlYWxleUBzdC5uZXBlYW4udXdzLmVkdS5hdT4KKyAgVG86IFNpbW9uIEphbmVzIDxndXJ1QG5jbS5jb20+CisgIFN1YmplY3Q6IFJlOiBMb2FkIEJhbGFuY2luZworCisgIEhpIFNpbW9uLAorCSAgSSd2ZSBpbnN0YWxsZWQgeW91ciBwYXRjaCBhbmQgaXQgd29ya3MgZ3JlYXQuIEkgaGF2ZSB0cmlhbGVkCisJICBpdCBvdmVyIHR3aW4gU0wvSVAgbGluZXMsIGp1c3Qgb3ZlciBudWxsIG1vZGVtcywgYnV0IEkgd2FzCisJICBhYmxlIHRvIGRhdGEgYXQgb3ZlciA0OEtiL3MgW0lTRE4gbGluayAtU2ltb25dLiBJIG1hbmFnZWQgYQorCSAgdHJhbnNmZXIgb2YgdXAgdG8gNy41IEtieXRlL3Mgb24gb25lIGdvLCBidXQgYXZlcmFnZWQgYXJvdW5kCisJICA2LjQgS2J5dGUvcywgd2hpY2ggSSB0aGluayBpcyBwcmV0dHkgY29vbC4gIDopCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ld3JrMy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXdyazMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZTllNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXdyazMudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoZSBFdGhlcldPUktTIDMgIGRyaXZlciBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpcyAgZGVzaWduZWQgdG8gIHdvcmsgd2l0aCBhbGwKK2tlcm5lbHMgICA+ICAxLjEuMzMgICAoYXBwcm94KSAgYW5kICBpbmNsdWRlcyAgdG9vbHMgICBpbiAgdGhlICAnZXdyazN0b29scycKK3N1YmRpcmVjdG9yeSAgIHRvICBhbGxvdyAgc2V0ICAgdXAgb2YgICB0aGUgICBjYXJkLCAgc2ltaWxhciAgdG8gIHRoZSAgTVNET1MKKydOSUNTRVRVUC5FWEUnIHRvb2xzIHByb3ZpZGVkIG9uICB0aGUgRE9TIGRyaXZlcnMgIGRpc2sgKHR5cGUgJ21ha2UnIGluIHRoYXQKK3N1YmRpcmVjdG9yeSB0byBtYWtlIHRoZSB0b29scykuCisKK1RoZSBzdXBwb3J0ZWQgIGNhcmRzIGFyZSBERTIwMywgIERFMjA0IGFuZCBERTIwNS4gIEFsbCAgIG90aGVyIGNhcmRzIGFyZSBOT1QKK3N1cHBvcnRlZCAtIHJlZmVyIHRvICdkZXBjYS5jJyBmb3IgcnVubmluZyB0aGUgTEFOQ0UgYmFzZWQgbmV0d29yayBjYXJkcyBhbmQKKydkZTR4NS5jJyAgZm9yIHRoZSAgRElHSVRBTCAgIFNlbWljb25kdWN0b3IgUENJICBjaGlwICBiYXNlZCAgYWRhcHRlcnMgIGZyb20KK0RpZ2l0YWwuCisKK1RoZSBhYmlsaXR5IHRvIGxvYWQgIHRoaXMgZHJpdmVyIGFzIGEgIGxvYWRhYmxlIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBhbmQKK3VzZWQgZXh0ZW5zaXZlbHkgIGR1cmluZyB0aGUgZHJpdmVyICBkZXZlbG9wbWVudCAodG8gc2F2ZSB0aG9zZSAgbG9uZyByZWJvb3QKK3NlcXVlbmNlcykuIFRvIHV0aWxpc2UgdGhpcyBhYmlsaXR5LCB5b3UgaGF2ZSB0byBkbyA4IHRoaW5nczoKKworICAgIDApIGhhdmUgYSBjb3B5IG9mIHRoZSBsb2FkYWJsZSBtb2R1bGVzIGNvZGUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLgorICAgIDEpIGNvcHkgZXdyazMuYyBmcm9tIHRoZSAgL2xpbnV4L2RyaXZlcnMvbmV0IGRpcmVjdG9yeSB0byB5b3VyIGZhdm91cml0ZQorICAgIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgICAgMikgZWRpdCB0aGUgIHNvdXJjZSBjb2RlIG5lYXIgIGxpbmUgMTg5OCB0byByZWZsZWN0ICB0aGUgSS9PIGFkZHJlc3MgYW5kCisgICAgSVJRIHlvdSdyZSB1c2luZy4KKyAgICAzKSBjb21waWxlICBld3JrMy5jLCBidXQgaW5jbHVkZSAtRE1PRFVMRSBpbiAgdGhlIGNvbW1hbmQgbGluZSB0byBlbnN1cmUKKyAgICB0aGF0IHRoZSBjb3JyZWN0IGJpdHMgYXJlIGNvbXBpbGVkIChzZWUgZW5kIG9mIHNvdXJjZSBjb2RlKS4KKyAgICA0KSBpZiB5b3UgYXJlIHdhbnRpbmcgdG8gYWRkIGEgbmV3ICBjYXJkLCBnb3RvIDUuIE90aGVyd2lzZSwgcmVjb21waWxlIGEKKyAgICBrZXJuZWwgd2l0aCB0aGUgZXdyazMgY29uZmlndXJhdGlvbiB0dXJuZWQgb2ZmIGFuZCByZWJvb3QuCisgICAgNSkgaW5zbW9kIGV3cmszLm8KKyAgICAgICAgICBbQWxhbiBDb3g6IENoYW5nZWQgdGhpcyBzbyB5b3UgY2FuIGluc21vZCBld3JrMy5vIGlycT14IGlvPXldCisgICAgICAgICAgW0FkYW0gS3JvcGVsaW46IE11bHRpcGxlIGNhcmRzIG5vdyBzdXBwb3J0ZWQgYnkgaXJxPXgxLHgyIGlvPXkxLHkyXQorICAgIDYpIHJ1biB0aGUgbmV0IHN0YXJ0dXAgYml0cyBmb3IgeW91ciBuZXcgZXRoPz8gaW50ZXJmYWNlIG1hbnVhbGx5IAorICAgICh1c3VhbGx5IC9ldGMvcmMuaW5ldFsxMl0gYXQgYm9vdCB0aW1lKS4gCisgICAgNykgZW5qb3khCisKKyAgICBOb3RlIHRoYXQgYXV0b3Byb2JpbmcgaXMgbm90IGFsbG93ZWQgaW4gbG9hZGFibGUgbW9kdWxlcyAtIHRoZSBzeXN0ZW0gaXMKKyAgICBhbHJlYWR5IHVwIGFuZCBydW5uaW5nIGFuZCB5b3UncmUgbWVzc2luZyB3aXRoIGludGVycnVwdHMuCisKKyAgICBUbyB1bmxvYWQgYSBtb2R1bGUsIHR1cm4gb2ZmIHRoZSBhc3NvY2lhdGVkIGludGVyZmFjZSAKKyAgICAnaWZjb25maWcgZXRoPz8gZG93bicgdGhlbiAncm1tb2QgZXdyazMnLgorCitUaGUgcGVyZm9ybWFuY2Ugd2UndmUgIGFjaGlldmVkIHNvIGZhciAgaGFzIGJlZW4gbWVhc3VyZWQgdGhyb3VnaCB0aGUgJ3R0Y3AnCit0b29sICAgYXQgOTc1a0Ivcy4gIFRoaXMgIG1lYXN1cmVzICB0aGUgIHRvdGFsICBUQ1AgIHN0YWNrIHBlcmZvcm1hbmNlIHdoaWNoCitpbmNsdWRlcyB0aGUgICBjYXJkLCAgc28gZG9uJ3QgIGV4cGVjdCAgIHRvIGdldCAgIG11Y2ggbmVhcmVyICB0aGUgIDEuMjVNQi9zCit0aGVvcmV0aWNhbCBFdGhlcm5ldCByYXRlLgorCisKK0Vuam95IQorCitEYXZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjIwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnR4dApAQCAtMCwwICsxLDQyIEBACitmaWx0ZXIudHh0OiBMaW51eCBTb2NrZXQgRmlsdGVyaW5nCitXcml0dGVuIGJ5OiBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCisJTGludXggU29ja2V0IEZpbHRlcmluZyBpcyBkZXJpdmVkIGZyb20gdGhlIEJlcmtlbGV5CitQYWNrZXQgRmlsdGVyLiBUaGVyZSBhcmUgc29tZSBkaXN0aW5jdCBkaWZmZXJlbmNlcyBiZXR3ZWVuCit0aGUgQlNEIGFuZCBMaW51eCBLZXJuZWwgRmlsdGVyaW5nLgorCitMaW51eCBTb2NrZXQgRmlsdGVyaW5nIChMU0YpIGFsbG93cyBhIHVzZXItc3BhY2UgcHJvZ3JhbSB0bworYXR0YWNoIGEgZmlsdGVyIG9udG8gYW55IHNvY2tldCBhbmQgYWxsb3cgb3IgZGlzYWxsb3cgY2VydGFpbgordHlwZXMgb2YgZGF0YSB0byBjb21lIHRocm91Z2ggdGhlIHNvY2tldC4gTFNGIGZvbGxvd3MgZXhhY3RseQordGhlIHNhbWUgZmlsdGVyIGNvZGUgc3RydWN0dXJlIGFzIHRoZSBCU0QgQmVya2VsZXkgUGFja2V0IEZpbHRlcgorKEJQRiksIHNvIHJlZmVycmluZyB0byB0aGUgQlNEIGJwZi40IG1hbnBhZ2UgaXMgdmVyeSBoZWxwZnVsIGluCitjcmVhdGluZyBmaWx0ZXJzLgorCitMU0YgaXMgbXVjaCBzaW1wbGVyIHRoYW4gQlBGLiBPbmUgZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorZGV2aWNlcyBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFlvdSBzaW1wbHkgY3JlYXRlIHlvdXIgZmlsdGVyCitjb2RlLCBzZW5kIGl0IHRvIHRoZSBrZXJuZWwgdmlhIHRoZSBTT19BVFRBQ0hfRklMVEVSIGlvY3RsIGFuZAoraWYgeW91ciBmaWx0ZXIgY29kZSBwYXNzZXMgdGhlIGtlcm5lbCBjaGVjayBvbiBpdCwgeW91IHRoZW4KK2ltbWVkaWF0ZWx5IGJlZ2luIGZpbHRlcmluZyBkYXRhIG9uIHRoYXQgc29ja2V0LgorCitZb3UgY2FuIGFsc28gZGV0YWNoIGZpbHRlcnMgZnJvbSB5b3VyIHNvY2tldCB2aWEgdGhlCitTT19ERVRBQ0hfRklMVEVSIGlvY3RsLiBUaGlzIHdpbGwgcHJvYmFibHkgbm90IGJlIHVzZWQgbXVjaAorc2luY2Ugd2hlbiB5b3UgY2xvc2UgYSBzb2NrZXQgdGhhdCBoYXMgYSBmaWx0ZXIgb24gaXQgdGhlCitmaWx0ZXIgaXMgYXV0b21hZ2ljYWxseSByZW1vdmVkLiBUaGUgb3RoZXIgbGVzcyBjb21tb24gY2FzZQorbWF5IGJlIGFkZGluZyBhIGRpZmZlcmVudCBmaWx0ZXIgb24gdGhlIHNhbWUgc29ja2V0IHdoZXJlIHlvdSBoYWQgYW5vdGhlcgorZmlsdGVyIHRoYXQgaXMgc3RpbGwgcnVubmluZzogdGhlIGtlcm5lbCB0YWtlcyBjYXJlIG9mIHJlbW92aW5nCit0aGUgb2xkIG9uZSBhbmQgcGxhY2luZyB5b3VyIG5ldyBvbmUgaW4gaXRzIHBsYWNlLCBhc3N1bWluZyB5b3VyCitmaWx0ZXIgaGFzIHBhc3NlZCB0aGUgY2hlY2tzLCBvdGhlcndpc2UgaWYgaXQgZmFpbHMgdGhlIG9sZCBmaWx0ZXIKK3dpbGwgcmVtYWluIG9uIHRoYXQgc29ja2V0LgorCitFeGFtcGxlcworPT09PT09PT0KKworSW9jdGxzLQorc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0FUVEFDSF9GSUxURVIsICZGaWx0ZXIsIHNpemVvZihGaWx0ZXIpKTsKK3NldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19ERVRBQ0hfRklMVEVSLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworCitTZWUgdGhlIEJTRCBicGYuNCBtYW5wYWdlIGFuZCB0aGUgQlNEIFBhY2tldCBGaWx0ZXIgcGFwZXIgd3JpdHRlbiBieQorU3RldmVuIE1jQ2FubmUgYW5kIFZhbiBKYWNvYnNvbiBvZiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZvcmUyMDBlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mb3JlMjAwZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmMzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mb3JlMjAwZS50eHQKQEAgLTAsMCArMSw2NiBAQAorCitGT1JFIFN5c3RlbXMgUENBLTIwMEUvU0JBLTIwMEUgQVRNIE5JQyBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBGT1JFIFN5c3RlbXMgMjAwRS1zZXJpZXMgQVRNIGFkYXB0ZXJzCit0byB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gSXQgaXMgYmFzZWQgb24gdGhlIGVhcmxpZXIgUENBLTIwMEUgZHJpdmVyCit3cml0dGVuIGJ5IFV3ZSBEYW5ub3dza2kuCisKK1RoZSBkcml2ZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydHMgUENBLTIwMEUgYW5kIFNCQS0yMDBFIGFkYXB0ZXJzIG9uCitpMzg2LCBhbHBoYSAodW50ZXN0ZWQpLCBwb3dlcnBjLCBzcGFyYyBhbmQgc3BhcmM2NCBhcmNocy4KKworVGhlIGludGVudCBpcyB0byBlbmFibGUgdGhlIHVzZSBvZiBkaWZmZXJlbnQgbW9kZWxzIG9mIEZPUkUgYWRhcHRlcnMgYXQgdGhlCitzYW1lIHRpbWUsIGJ5IGhvc3RzIHRoYXQgaGF2ZSBzZXZlcmFsIGJ1cyBpbnRlcmZhY2VzIChzdWNoIGFzIFBDSStTQlVTLAorUENJK01DQSBvciBQQ0krRUlTQSkuCisKK09ubHkgUENJIGFuZCBTQlVTIGRldmljZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciwgYnV0IHN1cHBvcnQKK2ZvciBvdGhlciBidXMgaW50ZXJmYWNlcyBzdWNoIGFzIEVJU0Egc2hvdWxkIG5vdCBiZSB0b28gaGFyZCB0byBhZGQgKHRoaXMgbWF5CitiZSBtb3JlIHRyaWNreSBmb3IgdGhlIE1DQSBidXMsIHRob3VnaCwgYXMgRk9SRSBtYWRlIHNvbWUgTUNBLXNwZWNpZmljCittb2RpZmljYXRpb25zIHRvIHRoZSBhZGFwdGVyJ3MgQUFMSSBpbnRlcmZhY2UpLgorCisKK0Zpcm13YXJlIENvcHlyaWdodCBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHJlYWQgdGhlIGZvcmUyMDBlX2Zpcm13YXJlX2NvcHlyaWdodCBmaWxlIHByZXNlbnQKK2luIHRoZSBsaW51eC9kcml2ZXJzL2F0bSBkaXJlY3RvcnkgZm9yIGRldGFpbHMgYW5kIHJlc3RyaWN0aW9ucy4KKworCitGaXJtd2FyZSBVcGRhdGVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBGT1JFIFN5c3RlbXMgMjAwRS1zZXJpZXMgZHJpdmVyIGlzIHNoaXBwZWQgd2l0aCBmaXJtd2FyZSBkYXRhIGJlaW5nIAordXBsb2FkZWQgdG8gdGhlIEFUTSBhZGFwdGVycyBhdCBzeXN0ZW0gYm9vdCB0aW1lIG9yIGF0IG1vZHVsZSBsb2FkaW5nIHRpbWUuIAorVGhlIHN1cHBsaWVkIGZpcm13YXJlIGltYWdlcyBzaG91bGQgd29yayB3aXRoIGFsbCBhZGFwdGVycy4KKworSG93ZXZlciwgaWYgeW91IGVuY291bnRlciBwcm9ibGVtcyAodGhlIGZpcm13YXJlIGRvZXNuJ3Qgc3RhcnQgb3IgdGhlIGRyaXZlcgoraXMgdW5hYmxlIHRvIHJlYWQgdGhlIFBST00gZGF0YSksIHlvdSBtYXkgY29uc2lkZXIgdHJ5aW5nIGFub3RoZXIgZmlybXdhcmUKK3ZlcnNpb24uIEFsdGVybmF0aXZlIGJpbmFyeSBmaXJtd2FyZSBpbWFnZXMgY2FuIGJlIGZvdW5kIHNvbWV3aGVyZSBvbiB0aGUKK0ZvcmVUaG91Z2h0IENELVJPTSBzdXBwbGllZCB3aXRoIHlvdXIgYWRhcHRlciBieSBGT1JFIFN5c3RlbXMuCisKK1lvdSBjYW4gYWxzbyBnZXQgdGhlIGxhdGVzdCBmaXJtd2FyZSBpbWFnZXMgZnJvbSBGT1JFIFN5c3RlbXMgYXQKK2h0dHA6Ly93d3cuZm9yZS5jb20uIFJlZ2lzdGVyIFRBQ1RpY3MgT25saW5lIGFuZCBnbyB0bwordGhlICdzb2Z0d2FyZSB1cGRhdGVzJyBwYWdlcy4gVGhlIGZpcm13YXJlIGJpbmFyaWVzIGFyZSBwYXJ0IG9mCit0aGUgdmFyaW91cyBGb3JlVGhvdWdodCBzb2Z0d2FyZSBkaXN0cmlidXRpb25zLgorCitOb3RpY2UgdGhhdCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIFBDQS0yMDBFIGZpcm13YXJlIGV4aXN0LCBkZXBlbmRpbmcKK29uIHRoZSBlbmRpYW5lc3Mgb2YgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiBUaGUgZHJpdmVyIGlzIHNoaXBwZWQgd2l0aAorYm90aCBsaXR0bGUgYW5kIGJpZyBlbmRpYW4gUENBIGZpcm13YXJlIGltYWdlcy4KKworTmFtZSBhbmQgbG9jYXRpb24gb2YgdGhlIG5ldyBmaXJtd2FyZSBpbWFnZXMgY2FuIGJlIHNldCBhdCBrZXJuZWwKK2NvbmZpZ3VyYXRpb24gdGltZToKKworMS4gQ29weSB0aGUgbmV3IGZpcm13YXJlIGJpbmFyeSBmaWxlcyAod2l0aCAuYmluLCAuYmluMSBvciAuYmluMiBzdWZmaXgpCisgICB0byBzb21lIGRpcmVjdG9yeSwgc3VjaCBhcyBsaW51eC9kcml2ZXJzL2F0bS4KKworMi4gUmVjb25maWd1cmUgeW91ciBrZXJuZWwgdG8gc2V0IHRoZSBuZXcgZmlybXdhcmUgbmFtZSBhbmQgbG9jYXRpb24uCisgICBFeHBlY3RlZCBwYXRobmFtZXMgYXJlIGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHRoZSBkcml2ZXJzL2F0bSBkaXJlY3RvcnkuCisKKzMuIFJlYnVpbGQgYW5kIHJlLWluc3RhbGwgeW91ciBrZXJuZWwgb3IgeW91ciBtb2R1bGUuCisKKworRmVlZGJhY2sKKy0tLS0tLS0tCisKK0ZlZWRiYWNrIGlzIHdlbGNvbWUuIFBsZWFzZSBzZW5kIHN1Y2Nlc3Mgc3Rvcmllcy9idWcgcmVwb3J0cy8KK3BhdGNoZXMvaW1wcm92ZW1lbnQvY29tbWVudHMvZmxhbWVzIHRvIDxsaXp6aUBjbmFtLmZyPi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mcmFtZXJlbGF5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mcmFtZXJlbGF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTBiNzIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZyYW1lcmVsYXkudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0ZyYW1lIFJlbGF5IChGUikgc3VwcG9ydCBmb3IgbGludXggaXMgYnVpbHQgaW50byBhIHR3byB0aWVyZWQgc3lzdGVtIG9mIGRldmljZSAKK2RyaXZlcnMuICBUaGUgdXBwZXIgbGF5ZXIgaW1wbGVtZW50cyBSRkMxNDkwIEZSIHNwZWNpZmljYXRpb24sIGFuZCB1c2VzIHRoZQorRGF0YSBMaW5rIENvbm5lY3Rpb24gSWRlbnRpZmllciAoRExDSSkgYXMgaXRzIGhhcmR3YXJlIGFkZHJlc3MuICBVc3VhbGx5IHRoZXNlCithcmUgYXNzaWduZWQgYnkgeW91ciBuZXR3b3JrIHN1cHBsaWVyLCB0aGV5IGdpdmUgeW91IHRoZSBudW1iZXIvbnVtYmVycyBvZgordGhlIFZpcnR1YWwgQ29ubmVjdGlvbnMgKFZDKSBhc3NpZ25lZCB0byB5b3UuCisKK0VhY2ggRExDSSBpcyBhIHBvaW50LXRvLXBvaW50IGxpbmsgYmV0d2VlbiB5b3VyIG1hY2hpbmUgYW5kIGEgcmVtb3RlIG9uZS4KK0FzIHN1Y2gsIGEgc2VwYXJhdGUgZGV2aWNlIGlzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgcm91dGluZy4gIFdpdGhpbiB0aGUKK25ldC10b29scyBhcmNoaXZlcyBpcyAnZGxjaWNmZycuICBUaGlzIHByb2dyYW0gd2lsbCBjb21tdW5pY2F0ZSB3aXRoIHRoZQorYmFzZSAiRExDSSIgZGV2aWNlLCBhbmQgY3JlYXRlIG5ldyBuZXQgZGV2aWNlcyBuYW1lZCAnZGxjaTAwJywgJ2RsY2kwMScuLi4gCitUaGUgY29uZmlndXJhdGlvbiBzY3JpcHQgd2lsbCBhc2sgeW91IGhvdyBtYW55IERMQ0lzIHlvdSBuZWVkLCBhcyB3ZWxsIGFzCitob3cgbWFueSBETENJcyB5b3Ugd2FudCB0byBhc3NpZ24gdG8gZWFjaCBGcmFtZSBSZWxheSBBY2Nlc3MgRGV2aWNlIChGUkFEKS4KKworVGhlIERMQ0kgdXNlcyBhIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBGUkFELCBhbGwKK29mIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIEZSQUQncyBwcml2YXRlIGRhdGEgYXJlYS4gIGFzc29jL2RlYXNzb2MsIAorYWN0aXZhdGUvZGVhY3RpdmF0ZSBhbmQgZGxjaV9jb25maWcuICBUaGUgRExDSSBzdXBwbGllcyBhIHJlY2VpdmUgZnVuY3Rpb24KK3RvIHRoZSBGUkFEIHRvIGFjY2VwdCBpbmNvbWluZyBwYWNrZXRzLgorCitXaXRoIHRoaXMgaW5pdGlhbCBvZmZlcmluZywgb25seSAxIEZSQUQgZHJpdmVyIGlzIGF2YWlsYWJsZS4gIFdpdGggbWFueSB0aGFua3MKK3RvIFNhbmdvbWEgVGVjaG5vbG9naWVzLCBEYXZpZCBNYW5kZWxzdGFtICYgR2VuZSBLb3ppbiwgdGhlIFM1MDJBLCBTNTAyRSAmIAorUzUwOCBhcmUgc3VwcG9ydGVkLiAgVGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IHNldCB1cCBmb3Igb25seSBGUiwgYnV0IGFzIAorU2FuZ29tYSBtYWtlcyBtb3JlIGZpcm13YXJlIG1vZHVsZXMgYXZhaWxhYmxlLCBpdCBjYW4gYmUgdXBkYXRlZCB0byBwcm92aWRlCit0aGVtIGFzIHdlbGwuCisKK0NvbmZpZ3VyYXRpb24gb2YgdGhlIEZSQUQgbWFrZXMgdXNlIG9mIGFub3RoZXIgbmV0LXRvb2xzIHByb2dyYW0sICdmcmFkY2ZnJy4KK1RoaXMgcHJvZ3JhbSBtYWtlcyB1c2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgKHdoaWNoIGRsY2ljZmcgY2FuIGFsc28gcmVhZCkKK3RvIHNwZWNpZnkgdGhlIHR5cGVzIG9mIGJvYXJkcyB0byBiZSBjb25maWd1cmVkIGFzIEZSQURzLCBhcyB3ZWxsIGFzIHBlcmZvcm0KK2FueSBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiAgVGhlIFNhbmdvbWEgbW9kdWxlIG9mIGZyYWRjZmcgbG9hZHMgdGhlCitGUiBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLCBzZXRzIHRoZSBpcnEvcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24sIGFuZCBwcm92aWRlcworYW4gaW5pdGlhbCBjb25maWd1cmF0aW9uLgorCitBZGRpdGlvbmFsIEZSQUQgZGV2aWNlIGRyaXZlcnMgY2FuIGJlIGFkZGVkIGFzIGhhcmR3YXJlIGlzIGF2YWlsYWJsZS4KKworQXQgdGhpcyB0aW1lLCB0aGUgZGxjaWNmZyBhbmQgZnJhZGNmZyBwcm9ncmFtcyBoYXZlIG5vdCBiZWVuIGluY29ycG9yYXRlZCBpbnRvCit0aGUgbmV0LXRvb2xzIGRpc3RyaWJ1dGlvbi4gIFRoZXkgY2FuIGJlIGZvdW5kIGF0IGZ0cC5pbnZsb2dpYy5jb20sIGluIAorL3B1Yi9saW51eC4gIE5vdGUgdGhhdCB3aXRoIE9TLzIgRlRQRCwgeW91IGVuZCB1cCBpbiAvcHViIGJ5IGRlZmF1bHQsIHNvIGp1c3QKK3VzZSAnY2QgbGludXgnLiAgdjAuMTAgaXMgZm9yIHVzZSBvbiBwcmUtMi4wLjMgYW5kIGVhcmxpZXIsIHYwLjE1IGlzIGZvciAKK3ByZS0yLjAuNCBhbmQgbGF0ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5fc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbl9zdGF0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyOTdmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5fc3RhdHMudHh0CkBAIC0wLDAgKzEsMTE3IEBACitHZW5lcmljIG5ldHdvcmtpbmcgc3RhdGlzdGljcyBmb3IgbmV0bGluayB1c2VycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTdGF0aXN0aWMgY291bnRlcnMgYXJlIGdyb3VwZWQgaW50byBzdHJ1Y3RzOgorCitTdHJ1Y3QgICAgICAgICAgICAgICBUTFYgdHlwZSAgICAgICAgICAgICAgRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2duZXRfc3RhdHNfYmFzaWMgICAgIFRDQV9TVEFUU19CQVNJQyAgICAgICBCYXNpYyBzdGF0aXN0aWNzCitnbmV0X3N0YXRzX3JhdGVfZXN0ICBUQ0FfU1RBVFNfUkFURV9FU1QgICAgUmF0ZSBlc3RpbWF0b3IKK2duZXRfc3RhdHNfcXVldWUgICAgIFRDQV9TVEFUU19RVUVVRSAgICAgICBRdWV1ZSBzdGF0aXN0aWNzCitub25lICAgICAgICAgICAgICAgICBUQ0FfU1RBVFNfQVBQICAgICAgICAgQXBwbGljYXRpb24gc3BlY2lmaWMKKworCitDb2xsZWN0aW5nOgorLS0tLS0tLS0tLS0KKworRGVjbGFyZSB0aGUgc3RhdGlzdGljIHN0cnVjdHMgeW91IG5lZWQ6CitzdHJ1Y3QgbXlzdHJ1Y3QgeworCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljCWJzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CisJLi4uCit9OworCitVcGRhdGUgc3RhdGlzdGljczoKK215c3RydWN0LT50c3RhdHMucGFja2V0Kys7CitteXN0cnVjdC0+cXN0YXRzLmJhY2tsb2cgKz0gc2tiLT5wa3RfbGVuOworCisKK0V4cG9ydCB0byB1c2Vyc3BhY2UgKER1bXApOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK215X2R1bXBpbmdfcm91dGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAuLi4pCit7CisJc3RydWN0IGduZXRfZHVtcCBkdW1wOworCisJaWYgKGduZXRfc3RhdHNfc3RhcnRfY29weShza2IsIFRDQV9TVEFUUzIsICZteXN0cnVjdC0+bG9jaywgJmR1bXApIDwgMCkKKwkJZ290byBydGF0dHJfZmFpbHVyZTsKKworCWlmIChnbmV0X3N0YXRzX2NvcHlfYmFzaWMoJmR1bXAsICZteXN0cnVjdC0+YnN0YXRzKSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3F1ZXVlKCZkdW1wLCAmbXlzdHJ1Y3QtPnFzdGF0cykgPCAwIHx8CisJCWduZXRfc3RhdHNfY29weV9hcHAoJmR1bXAsICZ4c3RhdHMsIHNpemVvZih4c3RhdHMpKSA8IDApCisJCWdvdG8gcnRhdHRyX2ZhaWx1cmU7CisKKwlpZiAoZ25ldF9zdGF0c19maW5pc2hfY29weSgmZHVtcCkgPCAwKQorCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOworCS4uLgorfQorCitUQ0FfU1RBVFMvVENBX1hTVEFUUyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJpb3IgdXNlcnMgb2Ygc3RydWN0IHRjX3N0YXRzIGFuZCB4c3RhdHMgY2FuIG1haW50YWluIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5IGJ5IGNhbGxpbmcgdGhlIGNvbXBhdCB3cmFwcGVycyB0byBrZWVwIHByb3ZpZGluZyB0aGUKK2V4aXN0aW5nIFRMViB0eXBlcy4KKworbXlfZHVtcGluZ19yb3V0aW5lKHN0cnVjdCBza19idWZmICpza2IsIC4uLikKK3sKKyAgICBpZiAoZ25ldF9zdGF0c19zdGFydF9jb3B5X2NvbXBhdChza2IsIFRDQV9TVEFUUzIsIFRDQV9TVEFUUywKKwkJVENBX1hTVEFUUywgJm15c3RydWN0LT5sb2NrLCAmZHVtcCkgPCAwKQorCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOworCS4uLgorfQorCitBIHN0cnVjdCB0Y19zdGF0cyB3aWxsIGJlIGZpbGxlZCBvdXQgZHVyaW5nIGduZXRfc3RhdHNfY29weV8qIGNhbGxzCithbmQgYXBwZW5kZWQgdG8gdGhlIHNrYi4gVENBX1hTVEFUUyBpcyBwcm92aWRlZCBpZiBnbmV0X3N0YXRzX2NvcHlfYXBwCit3YXMgY2FsbGVkLgorCisKK0xvY2tpbmc6CistLS0tLS0tLQorCitMb2NrcyBhcmUgdGFrZW4gYmVmb3JlIHdyaXRpbmcgYW5kIHJlbGVhc2VkIG9uY2UgYWxsIHN0YXRpc3RpY3MgaGF2ZQorYmVlbiB3cml0dGVuLiBMb2NrcyBhcmUgYWx3YXlzIHJlbGVhc2VkIGluIGNhc2Ugb2YgYW4gZXJyb3IuIFlvdQorYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGF0IHRoZSBsb2NrIGlzIGluaXRpYWxpemVkLgorCisKK1JhdGUgRXN0aW1hdG9yOgorLS0tLS0tLS0tLS0tLS0KKworMCkgUHJlcGFyZSBhbiBlc3RpbWF0b3IgYXR0cmlidXRlLiBNb3N0IGxpa2VseSB0aGlzIHdvdWxkIGJlIGluIHVzZXIKKyAgIHNwYWNlLiBUaGUgdmFsdWUgb2YgdGhpcyBUTFYgc2hvdWxkIGNvbnRhaW4gYSB0Y19lc3RpbWF0b3Igc3RydWN0dXJlLgorICAgQXMgdXN1YWwsIHN1Y2ggYSBUTFYgbmVlcyB0byBiZSAzMiBiaXQgYWxpZ25lZCBhbmQgdGhlcmVmb3JlIHRoZQorICAgbGVuZ3RoIG5lZWRzIHRvIGJlIGFwcHJvcHJpYXRlbHkgc2V0IGV0Yy4gVGhlIGVzdGltYXRvciBpbnRlcnZhbAorICAgYW5kIGV3bWEgbG9nIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuCisgICB0Y19lc3RpbWF0b3IuYzo6dGNfc2V0dXBfZXN0aW1hdG9yKCkgaXMgYWR2aXNhYmxlIHRvIGJlIHVzZWQgYXMgdGhlCisgICBjb252ZXJzaW9uIHJvdXRpbmUuIEl0IGRvZXMgYSBmZXcgY2xldmVyIHRoaW5ncy4gSXQgdGFrZXMgYSB0aW1lCisgICBpbnRlcnZhbCBpbiBtaWNyb3NlY3MsIGEgdGltZSBjb25zdGFudCBhbHNvIGluIG1pY3Jvc2VjcyBhbmQgYSBzdHJ1Y3QKKyAgIHRjX2VzdGltYXRvciB0byAgYmUgcG9wdWxhdGVkLiBUaGUgcmV0dXJuZWQgdGNfZXN0aW1hdG9yIGNhbiBiZQorICAgdHJhbnNwb3J0ZWQgdG8gdGhlIGtlcm5lbC4gIFRyYW5zZmVyIHN1Y2ggYSBzdHJ1Y3R1cmUgaW4gYSBUTFYgb2YgdHlwZQorICAgVENBX1JBVEUgdG8geW91ciBjb2RlIGluIHRoZSBrZXJuZWwuCisKK0luIHRoZSBrZXJuZWwgd2hlbiBzZXR0aW5nIHVwOgorMSkgbWFrZSBzdXJlIHlvdSBoYXZlIGJhc2ljIHN0YXRzIGFuZCByYXRlIHN0YXRzIHNldHVwIGZpcnN0LgorMikgbWFrZSBzdXJlIHlvdSBoYXZlIGluaXRpYWxpemVkIHN0YXRzIGxvY2sgdGhhdCBpcyB1c2VkIHRvIHNldHVwIHN1Y2gKKyAgIHN0YXRzLgorMykgTm93IGluaXRpYWxpemUgYSBuZXcgZXN0aW1hdG9yOgorCisgICBpbnQgcmV0ID0gZ2VuX25ld19lc3RpbWF0b3IobXlfYmFzaWNzdGF0cyxteV9yYXRlX2VzdF9zdGF0cywKKyAgICAgICBteXN0YXRzX2xvY2ssIGF0dHJfd2l0aF90Y2VzdGltYXRvcl9zdHJ1Y3QpOworCisgICBpZiByZXQgPT0gMAorICAgICAgIHN1Y2Nlc3MKKyAgIGVsc2UKKyAgICAgICBmYWlsZWQKKworRnJvbSBub3cgb24sIGV2ZXJ5dGltZSB5b3UgZHVtcCBteV9yYXRlX2VzdF9zdGF0cyBpdCB3aWxsIGNvbnRhaW4KK3VwdG9kYXRlIGluZm8uCisKK09uY2UgeW91IGFyZSBkb25lLCBjYWxsIGdlbl9raWxsX2VzdGltYXRvcihteV9iYXNpY3N0YXRzLAorbXlfcmF0ZV9lc3Rfc3RhdHMpIE1ha2Ugc3VyZSB0aGF0IG15X2Jhc2ljc3RhdHMgYW5kIG15X3JhdGVfZXN0X3N0YXRzCithcmUgc3RpbGwgdmFsaWQgKGkuZSBzdGlsbCBleGlzdCkgYXQgdGhlIHRpbWUgb2YgbWFraW5nIHRoaXMgY2FsbC4KKworCitBdXRob3JzOgorLS0tLS0tLS0KK1Rob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgorSmFtYWwgSGFkaSBTYWxpbSA8aGFkaUBjeWJlcnVzLmNhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWMtaGRsYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuZXJpYy1oZGxjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDFkYzZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWMtaGRsYy50eHQKQEAgLTAsMCArMSwxMzEgQEAKK0dlbmVyaWMgSERMQyBsYXllcgorS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KK0phbnVhcnksIDIwMDMKKworCitHZW5lcmljIEhETEMgbGF5ZXIgY3VycmVudGx5IHN1cHBvcnRzOgorLSBGcmFtZSBSZWxheSAoQU5TSSwgQ0NJVFQgYW5kIG5vIExNSSksIHdpdGggQVJQIHN1cHBvcnQgKG5vIEluQVJQKS4KKyAgTm9ybWFsIChyb3V0ZWQpIGFuZCBFdGhlcm5ldC1icmlkZ2VkIChFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uKQorICBpbnRlcmZhY2VzIGNhbiBzaGFyZSBhIHNpbmdsZSBQVkMuCistIHJhdyBIRExDIC0gZWl0aGVyIElQIChJUHY0KSBpbnRlcmZhY2Ugb3IgRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbi4KKy0gQ2lzY28gSERMQywKKy0gUFBQICh1c2VzIHN5bmNwcHAuYyksCistIFguMjUgKHVzZXMgWC4yNSByb3V0aW5lcykuCisKK1RoZXJlIGFyZSBoYXJkd2FyZSBkcml2ZXJzIGZvciB0aGUgZm9sbG93aW5nIGNhcmRzOgorLSBDMTAxIGJ5IE1veGEgVGVjaG5vbG9naWVzIENvLiwgTHRkLgorLSBSSVNDb20vTjIgYnkgU0RMIENvbW11bmljYXRpb25zIEluYy4KKy0gYW5kIG90aGVycywgc29tZSBub3QgaW4gdGhlIG9mZmljaWFsIGtlcm5lbC4KKworRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbiAodXNpbmcgSERMQyBvciBGcmFtZS1SZWxheSBQVkMpIGlzIGNvbXBhdGlibGUKK3dpdGggSUVFRSA4MDIuMVEgKFZMQU5zKSBhbmQgODAyLjFEIChFdGhlcm5ldCBicmlkZ2luZykuCisKKworTWFrZSBzdXJlIHRoZSBoZGxjLm8gYW5kIHRoZSBoYXJkd2FyZSBkcml2ZXIgYXJlIGxvYWRlZC4gSXQgc2hvdWxkCitjcmVhdGUgYSBudW1iZXIgb2YgImhkbGMiIChoZGxjMCBldGMpIG5ldHdvcmsgZGV2aWNlcywgb25lIGZvciBlYWNoCitXQU4gcG9ydC4gWW91J2xsIG5lZWQgdGhlICJzZXRoZGxjIiB1dGlsaXR5LCBnZXQgaXQgZnJvbToKKwlodHRwOi8vaHEucG0ud2F3LnBsL2hkbGMvCisKK0NvbXBpbGUgc2V0aGRsYy5jIHV0aWxpdHk6CisJZ2NjIC1PMiAtV2FsbCAtbyBzZXRoZGxjIHNldGhkbGMuYworTWFrZSBzdXJlIHlvdSdyZSB1c2luZyBhIGNvcnJlY3QgdmVyc2lvbiBvZiBzZXRoZGxjIGZvciB5b3VyIGtlcm5lbC4KKworVXNlIHNldGhkbGMgdG8gc2V0IHBoeXNpY2FsIGludGVyZmFjZSwgY2xvY2sgcmF0ZSwgSERMQyBtb2RlIHVzZWQsCithbmQgYWRkIGFueSByZXF1aXJlZCBQVkNzIGlmIHVzaW5nIEZyYW1lIFJlbGF5LgorVXN1YWxseSB5b3Ugd2FudCBzb21ldGhpbmcgbGlrZToKKworCXNldGhkbGMgaGRsYzAgY2xvY2sgaW50IHJhdGUgMTI4MDAwCisJc2V0aGRsYyBoZGxjMCBjaXNjbyBpbnRlcnZhbCAxMCB0aW1lb3V0IDI1CitvcgorCXNldGhkbGMgaGRsYzAgcnMyMzIgY2xvY2sgZXh0CisJc2V0aGRsYyBoZGxjMCBmciBsbWkgYW5zaQorCXNldGhkbGMgaGRsYzAgY3JlYXRlIDk5CisJaWZjb25maWcgaGRsYzAgdXAKKwlpZmNvbmZpZyBwdmMwIGxvY2FsSVAgcG9pbnRvcG9pbnQgcmVtb3RlSVAKKworSW4gRnJhbWUgUmVsYXkgbW9kZSwgaWZjb25maWcgbWFzdGVyIGhkbGMgZGV2aWNlIHVwICh3aXRob3V0IGFzc2lnbmluZworYW55IElQIGFkZHJlc3MgdG8gaXQpIGJlZm9yZSB1c2luZyBwdmMgZGV2aWNlcy4KKworCitTZXR0aW5nIGludGVyZmFjZToKKworKiB2MzUgfCByczIzMiB8IHgyMSB8IHQxIHwgZTEgLSBzZXRzIHBoeXNpY2FsIGludGVyZmFjZSBmb3IgYSBnaXZlbiBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBjYXJkIGhhcyBzb2Z0d2FyZS1zZWxlY3RhYmxlIGludGVyZmFjZXMKKyAgbG9vcGJhY2sgLSBhY3RpdmF0ZSBoYXJkd2FyZSBsb29wYmFjayAoZm9yIHRlc3Rpbmcgb25seSkKKyogY2xvY2sgZXh0IC0gZXh0ZXJuYWwgY2xvY2sgKHVzZXMgRFRFIFJYIGFuZCBUWCBjbG9jaykKKyogY2xvY2sgaW50IC0gaW50ZXJuYWwgY2xvY2sgKHByb3ZpZGVzIGNsb2NrIHNpZ25hbCBvbiBEQ0UgY2xvY2sgb3V0cHV0KQorKiBjbG9jayB0eGludCAtIFRYIGludGVybmFsLCBSWCBleHRlcm5hbCAocHJvdmlkZXMgVFggY2xvY2sgb24gRENFIG91dHB1dCkKKyogY2xvY2sgdHhmcm9tcnggLSBUWCBjbG9jayBkZXJpdmVkIGZyb20gUlggY2xvY2sgKFRYIGNsb2NrIG9uIERDRSBvdXRwdXQpCisqIHJhdGUgLSBzZXRzIGNsb2NrIHJhdGUgaW4gYnBzIChub3QgcmVxdWlyZWQgZm9yIGV4dGVybmFsIGNsb2NrIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHhmcm9tcngpCisKK1NldHRpbmcgcHJvdG9jb2w6CisKKyogaGRsYyAtIHNldHMgcmF3IEhETEMgKElQLW9ubHkpIG1vZGUKKyAgbnJ6IC8gbnJ6aSAvIGZtLW1hcmsgLyBmbS1zcGFjZSAvIG1hbmNoZXN0ZXIgLSBzZXRzIHRyYW5zbWlzc2lvbiBjb2RlCisgIG5vLXBhcml0eSAvIGNyYzE2IC8gY3JjMTYtcHIwIChDUkMxNiB3aXRoIHByZXNldCB6ZXJvcykgLyBjcmMzMi1pdHUKKyAgY3JjMTYtaXR1IChDUkMxNiB3aXRoIElUVS1UIHBvbHlub21pYWwpIC8gY3JjMTYtaXR1LXByMCAtIHNldHMgcGFyaXR5CisKKyogaGRsYy1ldGggLSBFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uIHVzaW5nIEhETEMuIFBhcml0eSBhbmQgZW5jb2RpbmcKKyAgYXMgYWJvdmUuCisKKyogY2lzY28gLSBzZXRzIENpc2NvIEhETEMgbW9kZSAoSVAsIElQdjYgYW5kIElQWCBzdXBwb3J0ZWQpCisgIGludGVydmFsIC0gdGltZSBpbiBzZWNvbmRzIGJldHdlZW4ga2VlcGFsaXZlIHBhY2tldHMKKyAgdGltZW91dCAtIHRpbWUgaW4gc2Vjb25kcyBhZnRlciBsYXN0IHJlY2VpdmVkIGtlZXBhbGl2ZSBwYWNrZXQgYmVmb3JlCisgICAgICAgICAgICB3ZSBhc3N1bWUgdGhlIGxpbmsgaXMgZG93bgorCisqIHBwcCAtIHNldHMgc3luY2hyb25vdXMgUFBQIG1vZGUKKworKiB4MjUgLSBzZXRzIFguMjUgbW9kZQorCisqIGZyIC0gRnJhbWUgUmVsYXkgbW9kZQorICBsbWkgYW5zaSAvIGNjaXR0IC8gbm9uZSAtIExNSSAobGluayBtYW5hZ2VtZW50KSB0eXBlCisgIGRjZSAtIEZyYW1lIFJlbGF5IERDRSAobmV0d29yaykgc2lkZSBMTUkgaW5zdGVhZCBvZiBkZWZhdWx0IERURSAodXNlcikuCisgIEl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY2xvY2tzIQorICB0MzkxIC0gbGluayBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uIHBvbGxpbmcgdGltZXIgKGluIHNlY29uZHMpIC0gdXNlcgorICB0MzkyIC0gcG9sbGluZyB2ZXJpZmljYXRpb24gdGltZXIgKGluIHNlY29uZHMpIC0gbmV0d29yaworICBuMzkxIC0gZnVsbCBzdGF0dXMgcG9sbGluZyBjb3VudGVyIC0gdXNlcgorICBuMzkyIC0gZXJyb3IgdGhyZXNob2xkIC0gYm90aCB1c2VyIGFuZCBuZXR3b3JrCisgIG4zOTMgLSBtb25pdG9yZWQgZXZlbnRzIGNvdW50IC0gYm90aCB1c2VyIGFuZCBuZXR3b3JrCisKK0ZyYW1lLVJlbGF5IG9ubHk6CisqIGNyZWF0ZSBuIHwgZGVsZXRlIG4gLSBhZGRzIC8gZGVsZXRlcyBQVkMgaW50ZXJmYWNlIHdpdGggRExDSSAjbi4KKyAgTmV3bHkgY3JlYXRlZCBpbnRlcmZhY2Ugd2lsbCBiZSBuYW1lZCBwdmMwLCBwdmMxIGV0Yy4KKworKiBjcmVhdGUgZXRoZXIgbiB8IGRlbGV0ZSBldGhlciBuIC0gYWRkcyBhIGRldmljZSBmb3IgRXRoZXJuZXQtYnJpZGdlZAorICBmcmFtZXMuIFRoZSBkZXZpY2Ugd2lsbCBiZSBuYW1lZCBwdmNldGgwLCBwdmNldGgxIGV0Yy4KKworCisKKworQm9hcmQtc3BlY2lmaWMgaXNzdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbjIubyBhbmQgYzEwMS5vIG5lZWQgcGFyYW1ldGVycyB0byB3b3JrOgorCisJaW5zbW9kIG4yIGh3PWlvLGlycSxyYW0scG9ydHNbOmlvLGlycSwuLi5dCitleGFtcGxlOgorCWluc21vZCBuMiBodz0weDMwMCwxMCwweEQwMDAwLDAxCisKK29yCisJaW5zbW9kIGMxMDEgaHc9aXJxLHJhbVs6aXJxLC4uLl0KK2V4YW1wbGU6CisJaW5zbW9kIGMxMDEgaHc9OSwweGRjMDAwCisKK0lmIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgdGhlc2UgZHJpdmVycyBuZWVkIGtlcm5lbCAoY29tbWFuZCBsaW5lKSBwYXJhbWV0ZXJzOgorCW4yLmh3PWlvLGlycSxyYW0scG9ydHM6Li4uCitvcgorCWMxMDEuaHc9aXJxLHJhbTouLi4KKworCisKK0lmIHlvdSBoYXZlIGEgcHJvYmxlbSB3aXRoIE4yIG9yIEMxMDEgY2FyZCwgeW91IGNhbiBpc3N1ZSB0aGUgInByaXZhdGUiCitjb21tYW5kIHRvIHNlZSBwb3J0J3MgcGFja2V0IGRlc2NyaXB0b3IgcmluZ3MgKGluIGtlcm5lbCBsb2dzKToKKworCXNldGhkbGMgaGRsYzAgcHJpdmF0ZQorCitUaGUgaGFyZHdhcmUgZHJpdmVyIGhhcyB0byBiZSBidWlsZCB3aXRoIENPTkZJR19IRExDX0RFQlVHX1JJTkdTLgorQXR0YWNoaW5nIHRoaXMgaW5mbyB0byBidWcgcmVwb3J0cyB3b3VsZCBiZSBoZWxwZnVsLiBBbnl3YXksIGxldCBtZSBrbm93CitpZiB5b3UgaGF2ZSBwcm9ibGVtcyB1c2luZyB0aGlzLgorCitGb3IgcGF0Y2hlcyBhbmQgb3RoZXIgaW5mbyBsb29rIGF0IGh0dHA6Ly9ocS5wbS53YXcucGwvaGRsYy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZmVuc2xhdmUuYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZmVuc2xhdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE1ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lmZW5zbGF2ZS5jCkBAIC0wLDAgKzEsMTExMCBAQAorLyogTW9kZTogQzsKKyAqIGlmZW5zbGF2ZS5jOiBDb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIGZvciBwYXJhbGxlbCByb3V0aW5nLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBjb250cm9scyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgcnVubmluZyBtdWx0aXBsZQorICoJbmV0d29yayBpbnRlcmZhY2VzIGluIHBhcmFsbGVsLgorICoKKyAqIEF1dGhvcjoJRG9uYWxkIEJlY2tlciA8YmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292PgorICoJCUNvcHlyaWdodCAxOTk0LTE5OTYgRG9uYWxkIEJlY2tlcgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKyAqCQlhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKgkJTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKglUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIGJlY2tlckBDRVNESVMuZ3NmYy5uYXNhLmdvdiwgb3IgQy9PCisgKglDZW50ZXIgb2YgRXhjZWxsZW5jZSBpbiBTcGFjZSBEYXRhIGFuZCBJbmZvcm1hdGlvbiBTY2llbmNlcworICoJICAgQ29kZSA5MzAuNSwgR29kZGFyZCBTcGFjZSBGbGlnaHQgQ2VudGVyLCBHcmVlbmJlbHQgTUQgMjA3NzEKKyAqCisgKiAgQ2hhbmdlcyA6CisgKiAgICAtIDIwMDAvMTAvMDIgV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgbWV0YS14Lm9yZz4gOgorICogICAgICAgLSBmZXcgZml4ZXMuIE1hc3RlcidzIE1BQyBhZGRyZXNzIGlzIG5vdyBjb3JyZWN0bHkgdGFrZW4gZnJvbQorICogICAgICAgICB0aGUgZmlyc3QgZGV2aWNlIHdoZW4gbm90IHByZXZpb3VzbHkgc2V0IDsKKyAqICAgICAgIC0gZGV0YWNoIHN1cHBvcnQgOiBjYWxsIEJPTkRfUkVMRUFTRSB0byBkZXRhY2ggYW4gZW5zbGF2ZWQgaW50ZXJmYWNlLgorICogICAgICAgLSBnaXZlIGEgbWluaS1ob3d0byBmcm9tIGNvbW1hbmQtbGluZSBoZWxwIDogIyBpZmVuc2xhdmUgLWgKKyAqCisgKiAgICAtIDIwMDEvMDIvMTYgQ2hhZCBOLiBUaW5kZWwgPGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnPiA6CisgKiAgICAgICAtIE1hc3RlciBpcyBub3cgYnJvdWdodCBkb3duIGJlZm9yZSBzZXR0aW5nIHRoZSBNQUMgYWRkcmVzcy4gIEluCisgKiAgICAgICAgIHRoZSAyLjQga2VybmVsIHlvdSBjYW4ndCBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNzIHdoaWxlIHRoZSBkZXZpY2UgaXMKKyAqICAgICAgICAgdXAgYmVjYXVzZSB5b3UgZ2V0IEVCVVNZLgorICoKKyAqICAgIC0gMjAwMS8wOS8xMyBUYWthbyBJbmRvaCA8aW5kb3UgZG90IHRha2FvIGF0IGpwIGRvdCBmdWppdHN1IGRvdCBjb20+CisgKiAgICAgICAtIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgYWN0aXZlIGludGVyZmFjZSBvbiBhIG1vZGUgMSBib25kCisgKiAgICAgICAgIGF0IHJ1bnRpbWUuCisgKgorICogICAgLSAyMDAxLzEwLzIzIENoYWQgTi4gVGluZGVsIDxjdGluZGVsIGF0IGllZWUgZG90IG9yZz4gOgorICogICAgICAgLSBObyBsb25nZXIgc2V0IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbWFzdGVyLiAgVGhlIGJvbmQgZGV2aWNlIHdpbGwKKyAqICAgICAgICAgdGFrZSBjYXJlIG9mIHRoaXMgaXRzZWxmCisgKiAgICAgICAtIFRyeSB0aGUgU0lPQyoqKiB2ZXJzaW9ucyBvZiB0aGUgYm9uZGluZyBpb2N0bHMgYmVmb3JlIHVzaW5nIHRoZQorICogICAgICAgICBvbGQgdmVyc2lvbnMKKyAqICAgIC0gMjAwMi8wMi8xOCBFcmlrIEhhYmJpbmdhIDxlcmlrX2hhYmJpbmdhIEAgaHAgZG90IGNvbT4gOgorICogICAgICAgLSBpZnIyLmlmcl9mbGFncyB3YXMgbm90IGluaXRpYWxpemVkIGluIHRoZSBod2FkZHJfbm90c2V0IGNhc2UsCisgKiAgICAgICAgIFNJT0NHSUZGTEFHUyBub3cgY2FsbGVkIGJlZm9yZSBod2FkZHJfbm90c2V0IHRlc3QKKyAqCisgKiAgICAtIDIwMDIvMTAvMzEgVG9ueSBDdXJlaW5ndG9uIDx0b255LmN1cmVpbmd0b24gKiBocF9jb20+IDoKKyAqICAgICAgIC0gSWYgdGhlIG1hc3RlciBkb2VzIG5vdCBoYXZlIGEgaGFyZHdhcmUgYWRkcmVzcyB3aGVuIHRoZSBmaXJzdCBzbGF2ZQorICogICAgICAgICBpcyBlbnNsYXZlZCwgdGhlIG1hc3RlciBpcyBhc3NpZ25lZCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGF0CisgKiAgICAgICAgIHNsYXZlIC0gdGhlcmUgaXMgYSBjb21tZW50IGluIGJvbmRpbmcuYyBzdGF0aW5nICJpZmVuc2xhdmUgdGFrZXMKKyAqICAgICAgICAgY2FyZSBvZiB0aGlzIG5vdy4iIFRoaXMgY29ycmVjdHMgdGhlIHByb2JsZW0gb2Ygc2xhdmVzIGhhdmluZworICogICAgICAgICBkaWZmZXJlbnQgaGFyZHdhcmUgYWRkcmVzc2VzIGluIGFjdGl2ZS1iYWNrdXAgbW9kZSB3aGVuCisgKiAgICAgICAgIG11bHRpcGxlIGludGVyZmFjZXMgYXJlIHNwZWNpZmllZCBvbiBhIHNpbmdsZSBpZmVuc2xhdmUgY29tbWFuZAorICogICAgICAgICAoaWZlbnNsYXZlIGJvbmQwIGV0aDAgZXRoMSkuCisgKgorICogICAgLSAyMDAzLzAzLzE4IC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPiBhbmQKKyAqICAgICAgICAgICAgICAgICAgIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICogICAgICAgLSBNb3ZlZCBzZXR0aW5nIHRoZSBzbGF2ZSdzIG1hYyBhZGRyZXNzIGFuZCBvcGVubmluZyBpdCwgZnJvbQorICogICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gdGhlIGRyaXZlci4gVGhpcyBlbmFibGVzIHN1cHBvcnQgb2YgbW9kZXMKKyAqICAgICAgICAgdGhhdCBuZWVkIHRvIHVzZSB0aGUgdW5pcXVlIG1hYyBhZGRyZXNzIG9mIGVhY2ggc2xhdmUuCisgKiAgICAgICAgIFRoZSBkcml2ZXIgYWxzbyB0YWtlcyBjYXJlIG9mIGNsb3NpbmcgdGhlIHNsYXZlIGFuZCByZXN0b3JpbmcgaXRzCisgKiAgICAgICAgIG9yaWdpbmFsIG1hYyBhZGRyZXNzIHVwb24gcmVsZWFzZS4KKyAqICAgICAgICAgSW4gYWRkaXRpb24sIGJsb2NrIHBvc3NpYmlsaXR5IG9mIGVuc2xhdmluZyBiZWZvcmUgdGhlIG1hc3RlciBpcyB1cC4KKyAqICAgICAgICAgVGhpcyBwcmV2ZW50cyBwdXR0aW5nIHRoZSBzeXN0ZW0gaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICoKKyAqICAgIC0gMjAwMy8wNS8wMSAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+CisgKiAgICAgICAtIEFkZGVkIEFCSSB2ZXJzaW9uIGNvbnRyb2wgdG8gcmVzdG9yZSBjb21wYXRpYmlsaXR5IGJldHdlZW4KKyAqICAgICAgICAgbmV3L29sZCBpZmVuc2xhdmUgYW5kIG5ldy9vbGQgYm9uZGluZy4KKyAqICAgICAgIC0gUHJldmVudCBhZGRpbmcgYW4gYWRhcHRlciB0aGF0IGlzIGFscmVhZHkgYSBzbGF2ZS4KKyAqICAgICAgICAgRml4ZXMgdGhlIHByb2JsZW0gb2Ygc3RhbGxpbmcgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbGVhdmluZworICogICAgICAgICB0aGUgc2xhdmUgaW4gYSBkb3duIHN0YXRlLgorICoKKyAqICAgIC0gMjAwMy8wNS8wMSAtIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICogICAgICAgLSBQcmV2ZW50IGVuc2xhdmluZyBpZiB0aGUgYm9uZCBkZXZpY2UgaXMgZG93bi4KKyAqICAgICAgICAgRml4ZXMgdGhlIHByb2JsZW0gb2YgbGVhdmluZyB0aGUgc3lzdGVtIGluIHVuc3RhYmxlIHN0YXRlIGFuZAorICogICAgICAgICBoYWx0aW5nIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSB0aGUgbW9kdWxlLgorICogICAgICAgLSBDbG9zZSBzb2NrZXQgb24gYWxsIGFibm9ybWFsIGV4aXN0cy4KKyAqICAgICAgIC0gQWRkIHZlcnNpb25pbmcgc2NoZW1lIHRoYXQgZm9sbG93cyB0aGF0IG9mIHRoZSBib25kaW5nIGRyaXZlci4KKyAqICAgICAgICAgY3VycmVudCB2ZXJzaW9uIGlzIDEuMC4wIGFzIGEgYmFzZSBsaW5lLgorICoKKyAqICAgIC0gMjAwMy8wNS8yMiAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgorICoJIC0gaWZlbnNsYXZlIC1jIHdhcyBicm9rZW47IGl0J3Mgbm93IGZpeGVkCisgKgkgLSBGaXhlZCBwcm9ibGVtIHdpdGggcm91dGVzIHZhbmlzaGluZyBmcm9tIG1hc3RlciBkdXJpbmcgZW5zbGF2ZQorICoJICAgcHJvY2Vzc2luZy4KKyAqCisgKiAgICAtIDIwMDMvMDUvMjcgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgorICoJIC0gRml4IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWVzOgorICoJICAgRm9yIGRyaXZlcnMgbm90IHVzaW5nIEFCSSB2ZXJzaW9ucywgc2xhdmUgd2FzIHNldCBkb3duIHdoaWxlCisgKgkgICBpdCBzaG91bGQgYmUgbGVmdCB1cCBiZWZvcmUgZW5zbGF2aW5nLgorICoJICAgQWxzbywgbWFzdGVyIHdhcyBub3Qgc2V0IGRvd24gYW5kIHRoZSBkZWZhdWx0IHNldF9tYWNfYWRkcmVzcygpCisgKgkgICB3b3VsZCBmYWlsIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBzeXN0ZW0gbG9nLgorICogCSAtIEZvciBvcHRfYzogc2xhdmUgc2hvdWxkIG5vdCBiZSBzZXQgdG8gdGhlIG1hc3RlcidzIHNldHRpbmcKKyAqCSAgIHdoaWxlIGl0IGlzIHJ1bm5pbmcuIEl0IHdhcyBhbHJlYWR5IHNldCBkdXJpbmcgZW5zbGF2ZS4gVG8KKyAqCSAgIHNpbXBsaWZ5IHRoaW5ncywgaXQgaXMgbm93IGhhbmRlbGVkIHNlcGFyYXRlbHkuCisgKgorICogICAgLSAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+CisgKgkgLSBDb2RlIGNsZWFudXAgYW5kIHN0eWxlIGNoYW5nZXMKKyAqCSAgIHNldCB2ZXJzaW9uIHRvIDEuMS4wCisgKi8KKworI2RlZmluZSBBUFBfVkVSU0lPTgkiMS4xLjAiCisjZGVmaW5lIEFQUF9SRUxEQVRFCSJEZWNlbWJlciAxLCAyMDAzIgorI2RlZmluZSBBUFBfTkFNRQkiaWZlbnNsYXZlIgorCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9CitBUFBfTkFNRSAiLmM6diIgQVBQX1ZFUlNJT04gIiAoIiBBUFBfUkVMREFURSAiKVxuIgorIm8gRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KS5cbiIKKyJvIERldGFjaCBzdXBwb3J0IGFkZGVkIG9uIDIwMDAvMTAvMDIgYnkgV2lsbHkgVGFycmVhdSAod2lsbHkgYXQgbWV0YS14Lm9yZykuXG4iCisibyAyLjQga2VybmVsIHN1cHBvcnQgYWRkZWQgb24gMjAwMS8wMi8xNiBieSBDaGFkIE4uIFRpbmRlbFxuIgorIiAgKGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnKS5cbiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9tc2cgPQorIlVzYWdlOiBpZmVuc2xhdmUgWy1mXSA8bWFzdGVyLWlmPiA8c2xhdmUtaWY+IFs8c2xhdmUtaWY+Li4uXVxuIgorIiAgICAgICBpZmVuc2xhdmUgLWQgICA8bWFzdGVyLWlmPiA8c2xhdmUtaWY+IFs8c2xhdmUtaWY+Li4uXVxuIgorIiAgICAgICBpZmVuc2xhdmUgLWMgICA8bWFzdGVyLWlmPiA8c2xhdmUtaWY+XG4iCisiICAgICAgIGlmZW5zbGF2ZSAtLWhlbHBcbiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpoZWxwX21zZyA9CisiXG4iCisiICAgICAgIFRvIGNyZWF0ZSBhIGJvbmQgZGV2aWNlLCBzaW1wbHkgZm9sbG93IHRoZXNlIHRocmVlIHN0ZXBzIDpcbiIKKyIgICAgICAgLSBlbnN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgZHJpdmVycyBhcmUgcHJvcGVybHkgbG9hZGVkIDpcbiIKKyIgICAgICAgICAjIG1vZHByb2JlIGJvbmRpbmcgOyBtb2Rwcm9iZSA8M2M1OXh8ZWVwcm8xMDB8cGNuZXQzMnx0dWxpcHwuLi4+XG4iCisiICAgICAgIC0gYXNzaWduIGFuIElQIGFkZHJlc3MgdG8gdGhlIGJvbmQgZGV2aWNlIDpcbiIKKyIgICAgICAgICAjIGlmY29uZmlnIGJvbmQwIDxhZGRyPiBuZXRtYXNrIDxtYXNrPiBicm9hZGNhc3QgPGJjYXN0PlxuIgorIiAgICAgICAtIGF0dGFjaCBhbGwgdGhlIGludGVyZmFjZXMgeW91IG5lZWQgdG8gdGhlIGJvbmQgZGV2aWNlIDpcbiIKKyIgICAgICAgICAjIGlmZW5zbGF2ZSBbey1mfC0tZm9yY2V9XSBib25kMCBldGgwIFtldGgxIFtldGgyXS4uLl1cbiIKKyIgICAgICAgICBJZiBib25kMCBkaWRuJ3QgaGF2ZSBhIE1BQyBhZGRyZXNzLCBpdCB3aWxsIHRha2UgZXRoMCdzLiBUaGVuLCBhbGxcbiIKKyIgICAgICAgICBpbnRlcmZhY2VzIGF0dGFjaGVkIEFGVEVSIHRoaXMgYXNzaWdubWVudCB3aWxsIGdldCB0aGUgc2FtZSBNQUMgYWRkci5cbiIKKyIgICAgICAgICAoZXhjZXB0IGZvciBBTEIvVExCIG1vZGVzKVxuIgorIlxuIgorIiAgICAgICBUbyBzZXQgdGhlIGJvbmQgZGV2aWNlIGRvd24gYW5kIGF1dG9tYXRpY2FsbHkgcmVsZWFzZSBhbGwgdGhlIHNsYXZlcyA6XG4iCisiICAgICAgICAgIyBpZmNvbmZpZyBib25kMCBkb3duXG4iCisiXG4iCisiICAgICAgIFRvIGRldGFjaCBhIGRlYWQgaW50ZXJmYWNlIHdpdGhvdXQgc2V0dGluZyB0aGUgYm9uZCBkZXZpY2UgZG93biA6XG4iCisiICAgICAgICAgIyBpZmVuc2xhdmUgey1kfC0tZGV0YWNofSBib25kMCBldGgwIFtldGgxIFtldGgyXS4uLl1cbiIKKyJcbiIKKyIgICAgICAgVG8gY2hhbmdlIGFjdGl2ZSBzbGF2ZSA6XG4iCisiICAgICAgICAgIyBpZmVuc2xhdmUgey1jfC0tY2hhbmdlLWFjdGl2ZX0gYm9uZDAgZXRoMFxuIgorIlxuIgorIiAgICAgICBUbyBzaG93IG1hc3RlciBpbnRlcmZhY2UgaW5mb1xuIgorIiAgICAgICAgICMgaWZlbnNsYXZlIGJvbmQwXG4iCisiXG4iCisiICAgICAgIFRvIHNob3cgYWxsIGludGVyZmFjZXMgaW5mb1xuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LWF8LS1hbGwtaW50ZXJmYWNlc31cbiIKKyJcbiIKKyIgICAgICAgVG8gYmUgbW9yZSB2ZXJib3NlXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstdnwtLXZlcmJvc2V9IC4uLlxuIgorIlxuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LXV8LS11c2FnZX0gICBTaG93IHVzYWdlXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstVnwtLXZlcnNpb259IFNob3cgdmVyc2lvblxuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LWh8LS1oZWxwfSAgICBUaGlzIG1lc3NhZ2VcbiIKKyJcbiI7CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2JvbmRpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsJLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCit0eXBlZGVmIF9fdWludDMyX3QgdTMyOwkJLyogZGl0dG8gKi8KK3R5cGVkZWYgX191aW50MTZfdCB1MTY7CQkvKiBkaXR0byAqLwordHlwZWRlZiBfX3VpbnQ4X3QgdTg7CQkvKiBkaXR0byAqLworI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworc3RydWN0IG9wdGlvbiBsb25nb3B0c1tdID0geworCS8qIHsgbmFtZSAgaGFzX2FyZyAgKmZsYWcgIHZhbCB9ICovCisJeyJhbGwtaW50ZXJmYWNlcyIsCTAsIDAsICdhJ30sCS8qIFNob3cgYWxsIGludGVyZmFjZXMuICovCisJeyJjaGFuZ2UtYWN0aXZlIiwJMCwgMCwgJ2MnfSwJLyogQ2hhbmdlIHRoZSBhY3RpdmUgc2xhdmUuICAqLworCXsiZGV0YWNoIiwJCTAsIDAsICdkJ30sCS8qIERldGFjaCBhIHNsYXZlIGludGVyZmFjZS4gKi8KKwl7ImZvcmNlIiwJCTAsIDAsICdmJ30sCS8qIEZvcmNlIHRoZSBvcGVyYXRpb24uICovCisJeyJoZWxwIiwJCTAsIDAsICdoJ30sCS8qIEdpdmUgaGVscCAqLworCXsidXNhZ2UiLAkJMCwgMCwgJ3UnfSwJLyogR2l2ZSB1c2FnZSAqLworCXsidmVyYm9zZSIsCQkwLCAwLCAndid9LAkvKiBSZXBvcnQgZWFjaCBhY3Rpb24gdGFrZW4uICovCisJeyJ2ZXJzaW9uIiwJCTAsIDAsICdWJ30sCS8qIEVtaXQgdmVyc2lvbiBpbmZvcm1hdGlvbi4gKi8KKwl7IDAsIDAsIDAsIDB9Cit9OworCisvKiBDb21tYW5kLWxpbmUgZmxhZ3MuICovCit1bnNpZ25lZCBpbnQKK29wdF9hID0gMCwJLyogU2hvdy1hbGwtaW50ZXJmYWNlcyBmbGFnLiAqLworb3B0X2MgPSAwLAkvKiBDaGFuZ2UtYWN0aXZlLXNsYXZlIGZsYWcuICovCitvcHRfZCA9IDAsCS8qIERldGFjaCBhIHNsYXZlIGludGVyZmFjZS4gKi8KK29wdF9mID0gMCwJLyogRm9yY2UgdGhlIG9wZXJhdGlvbi4gKi8KK29wdF9oID0gMCwJLyogSGVscCAqLworb3B0X3UgPSAwLAkvKiBVc2FnZSAqLworb3B0X3YgPSAwLAkvKiBWZXJib3NlIGZsYWcuICovCitvcHRfViA9IDA7CS8qIFZlcnNpb24gKi8KKworaW50IHNrZmQgPSAtMTsJCS8qIEFGX0lORVQgc29ja2V0IGZvciBpb2N0bCgpIGNhbGxzLiovCitpbnQgYWJpX3ZlciA9IDA7CS8qIHVzZXJsYW5kIC0ga2VybmVsIEFCSSB2ZXJzaW9uICovCitpbnQgaHdhZGRyX3NldCA9IDA7CS8qIE1hc3RlcidzIGh3YWRkciBpcyBzZXQgKi8KK2ludCBzYXZlZF9lcnJubzsKKworc3RydWN0IGlmcmVxIG1hc3Rlcl9tdHUsIG1hc3Rlcl9mbGFncywgbWFzdGVyX2h3YWRkcjsKK3N0cnVjdCBpZnJlcSBzbGF2ZV9tdHUsIHNsYXZlX2ZsYWdzLCBzbGF2ZV9od2FkZHI7CisKK3N0cnVjdCBkZXZfaWZyIHsKKwlzdHJ1Y3QgaWZyZXEgKnJlcV9pZnI7CisJY2hhciAqcmVxX25hbWU7CisJaW50IHJlcV90eXBlOworfTsKKworc3RydWN0IGRldl9pZnIgbWFzdGVyX2lmcmFbXSA9IHsKKwl7Jm1hc3Rlcl9tdHUsICAgICAiU0lPQ0dJRk1UVSIsICAgICBTSU9DR0lGTVRVfSwKKwl7Jm1hc3Rlcl9mbGFncywgICAiU0lPQ0dJRkZMQUdTIiwgICBTSU9DR0lGRkxBR1N9LAorCXsmbWFzdGVyX2h3YWRkciwgICJTSU9DR0lGSFdBRERSIiwgIFNJT0NHSUZIV0FERFJ9LAorCXtOVUxMLCAiIiwgMH0KK307CisKK3N0cnVjdCBkZXZfaWZyIHNsYXZlX2lmcmFbXSA9IHsKKwl7JnNsYXZlX210dSwgICAgICJTSU9DR0lGTVRVIiwgICAgIFNJT0NHSUZNVFV9LAorCXsmc2xhdmVfZmxhZ3MsICAgIlNJT0NHSUZGTEFHUyIsICAgU0lPQ0dJRkZMQUdTfSwKKwl7JnNsYXZlX2h3YWRkciwgICJTSU9DR0lGSFdBRERSIiwgIFNJT0NHSUZIV0FERFJ9LAorCXtOVUxMLCAiIiwgMH0KK307CisKK3N0YXRpYyB2b2lkIGlmX3ByaW50KGNoYXIgKmlmbmFtZSk7CitzdGF0aWMgaW50IGdldF9kcnZfaW5mbyhjaGFyICptYXN0ZXJfaWZuYW1lKTsKK3N0YXRpYyBpbnQgZ2V0X2lmX3NldHRpbmdzKGNoYXIgKmlmbmFtZSwgc3RydWN0IGRldl9pZnIgaWZyYVtdKTsKK3N0YXRpYyBpbnQgZ2V0X3NsYXZlX2ZsYWdzKGNoYXIgKnNsYXZlX2lmbmFtZSk7CitzdGF0aWMgaW50IHNldF9tYXN0ZXJfaHdhZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKTsKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX2h3YWRkcihjaGFyICpzbGF2ZV9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKTsKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX210dShjaGFyICpzbGF2ZV9pZm5hbWUsIGludCBtdHUpOworc3RhdGljIGludCBzZXRfaWZfZmxhZ3MoY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncyk7CitzdGF0aWMgaW50IHNldF9pZl91cChjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKTsKK3N0YXRpYyBpbnQgc2V0X2lmX2Rvd24oY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncyk7CitzdGF0aWMgaW50IGNsZWFyX2lmX2FkZHIoY2hhciAqaWZuYW1lKTsKK3N0YXRpYyBpbnQgc2V0X2lmX2FkZHIoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKTsKK3N0YXRpYyBpbnQgY2hhbmdlX2FjdGl2ZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpOworc3RhdGljIGludCBlbnNsYXZlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSk7CitzdGF0aWMgaW50IHJlbGVhc2UoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKTsKKyNkZWZpbmUgdl9wcmludChmbXQsIGFyZ3MuLi4pCVwKKwlpZiAob3B0X3YpCQlcCisJCWZwcmludGYoc3RkZXJyLCBmbXQsICMjIGFyZ3MgKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNoYXIgKipzcHAsICptYXN0ZXJfaWZuYW1lLCAqc2xhdmVfaWZuYW1lOworCWludCBjLCBpLCBydjsKKwlpbnQgcmVzID0gMDsKKwlpbnQgZXhjbHVzaXZlID0gMDsKKworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2RmaHV2ViIsIGxvbmdvcHRzLCAwKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdhJzogb3B0X2ErKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdjJzogb3B0X2MrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdkJzogb3B0X2QrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdmJzogb3B0X2YrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdoJzogb3B0X2grKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICd1Jzogb3B0X3UrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICd2Jzogb3B0X3YrKzsgYnJlYWs7CisJCWNhc2UgJ1YnOiBvcHRfVisrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisKKwkJY2FzZSAnPyc6CisJCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJCXJlcyA9IDI7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIG9wdGlvbnMgY2hlY2sgKi8KKwlpZiAoZXhjbHVzaXZlID4gMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJcmVzID0gMjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9wdF92IHx8IG9wdF9WKSB7CisJCXByaW50Zih2ZXJzaW9uKTsKKwkJaWYgKG9wdF9WKSB7CisJCQlyZXMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAob3B0X3UpIHsKKwkJcHJpbnRmKHVzYWdlX21zZyk7CisJCXJlcyA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvcHRfaCkgeworCQlwcmludGYodXNhZ2VfbXNnKTsKKwkJcHJpbnRmKGhlbHBfbXNnKTsKKwkJcmVzID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogT3BlbiBhIGJhc2ljIHNvY2tldCAqLworCWlmICgoc2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCXJlcyA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvcHRfYSkgeworCQlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJCS8qIE5vIHJlbWFpbmluZyBhcmdzICovCisJCQkvKiBzaG93IGFsbCBpbnRlcmZhY2VzICovCisJCQlpZl9wcmludCgoY2hhciAqKU5VTEwpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQkvKiBKdXN0IHNob3cgdXNhZ2UgKi8KKwkJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQkJcmVzID0gMjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogQ29weSB0aGUgaW50ZXJmYWNlIG5hbWUgKi8KKwlzcHAgPSBhcmd2ICsgb3B0aW5kOworCW1hc3Rlcl9pZm5hbWUgPSAqc3BwKys7CisKKwlpZiAobWFzdGVyX2lmbmFtZSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQlyZXMgPSAyOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBleGNoYW5nZSBhYmkgdmVyc2lvbiB3aXRoIGJvbmRpbmcgbW9kdWxlICovCisJcmVzID0gZ2V0X2Rydl9pbmZvKG1hc3Rlcl9pZm5hbWUpOworCWlmIChyZXMpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiTWFzdGVyICclcyc6IEVycm9yOiBoYW5kc2hha2Ugd2l0aCBkcml2ZXIgZmFpbGVkLiAiCisJCQkiQWJvcnRpbmdcbiIsCisJCQltYXN0ZXJfaWZuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2xhdmVfaWZuYW1lID0gKnNwcCsrOworCisJaWYgKHNsYXZlX2lmbmFtZSA9PSBOVUxMKSB7CisJCWlmIChvcHRfZCB8fCBvcHRfYykgeworCQkJZnByaW50ZihzdGRlcnIsIHVzYWdlX21zZyk7CisJCQlyZXMgPSAyOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBBIHNpbmdsZSBhcmcgbWVhbnMgc2hvdyB0aGUKKwkJICogY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2UKKwkJICovCisJCWlmX3ByaW50KG1hc3Rlcl9pZm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXMgPSBnZXRfaWZfc2V0dGluZ3MobWFzdGVyX2lmbmFtZSwgbWFzdGVyX2lmcmEpOworCWlmIChyZXMpIHsKKwkJLyogUHJvYmFibHkgYSBnb29kIHJlYXNvbiBub3QgdG8gZ28gb24gKi8KKwkJZnByaW50ZihzdGRlcnIsCisJCQkiTWFzdGVyICclcyc6IEVycm9yOiBnZXQgc2V0dGluZ3MgZmFpbGVkOiAlcy4gIgorCQkJIkFib3J0aW5nXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3IocmVzKSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGlmIG1hc3RlciBpcyBpbmRlZWQgYSBtYXN0ZXI7CisJICogaWYgbm90IHRoZW4gZmFpbCBhbnkgb3BlcmF0aW9uCisJICovCisJaWYgKCEobWFzdGVyX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9NQVNURVIpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOyB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAnJXMnICIKKwkJCSJpcyBub3QgYSBtYXN0ZXIuIEFib3J0aW5nXG4iLAorCQkJbWFzdGVyX2lmbmFtZSk7CisJCXJlcyA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGlmIG1hc3RlciBpcyB1cDsgaWYgbm90IHRoZW4gZmFpbCBhbnkgb3BlcmF0aW9uICovCisJaWYgKCEobWFzdGVyX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9VUCkpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb247IHRoZSBzcGVjaWZpZWQgbWFzdGVyIGludGVyZmFjZSAiCisJCQkiJyVzJyBpcyBub3QgdXAuXG4iLAorCQkJbWFzdGVyX2lmbmFtZSk7CisJCXJlcyA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIE9ubHkgZm9yIGVuc2xhdmluZyAqLworCWlmICghb3B0X2MgJiYgIW9wdF9kKSB7CisJCXNhX2ZhbWlseV90IG1hc3Rlcl9mYW1pbHkgPSBtYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIuc2FfZmFtaWx5OworCQl1bnNpZ25lZCBjaGFyICpod2FkZHIgPQorCQkJKHVuc2lnbmVkIGNoYXIgKiltYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIuc2FfZGF0YTsKKworCQkvKiBUaGUgZmFtaWx5ICcxJyBpcyBBUlBIUkRfRVRIRVIgZm9yIGV0aGVybmV0LiAqLworCQlpZiAobWFzdGVyX2ZhbWlseSAhPSAxICYmICFvcHRfZikgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIklsbGVnYWwgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIG1hc3RlciAiCisJCQkJImludGVyZmFjZSAnJXMnIGlzIG5vdCBldGhlcm5ldC1saWtlLlxuICIKKwkJCQkiVGhpcyBwcm9ncmFtIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCAiCisJCQkJImV0aGVybmV0LWxpa2UgbmV0d29yayBpbnRlcmZhY2VzLlxuICIKKwkJCQkiVXNlIHRoZSAnLWYnIG9wdGlvbiB0byBmb3JjZSB0aGUgIgorCQkJCSJvcGVyYXRpb24uXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUpOworCQkJcmVzID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogQ2hlY2sgbWFzdGVyJ3MgaHcgYWRkciAqLworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQlpZiAoaHdhZGRyW2ldICE9IDApIHsKKwkJCQlod2FkZHJfc2V0ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChod2FkZHJfc2V0KSB7CisJCQl2X3ByaW50KCJjdXJyZW50IGhhcmR3YXJlIGFkZHJlc3Mgb2YgbWFzdGVyICclcycgIgorCQkJCSJpcyAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCwgIgorCQkJCSJ0eXBlICVkXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUsCisJCQkJaHdhZGRyWzBdLCBod2FkZHJbMV0sCisJCQkJaHdhZGRyWzJdLCBod2FkZHJbM10sCisJCQkJaHdhZGRyWzRdLCBod2FkZHJbNV0sCisJCQkJbWFzdGVyX2ZhbWlseSk7CisJCX0KKwl9CisKKwkvKiBBY2NlcHRzIG9ubHkgb25lIHNsYXZlICovCisJaWYgKG9wdF9jKSB7CisJCS8qIGNoYW5nZSBhY3RpdmUgc2xhdmUgKi8KKwkJcmVzID0gZ2V0X3NsYXZlX2ZsYWdzKHNsYXZlX2lmbmFtZSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogZ2V0IGZsYWdzIGZhaWxlZC4gIgorCQkJCSJBYm9ydGluZ1xuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVzID0gY2hhbmdlX2FjdGl2ZShtYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiTWFzdGVyICclcycsIFNsYXZlICclcyc6IEVycm9yOiAiCisJCQkJIkNoYW5nZSBhY3RpdmUgZmFpbGVkXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBBY2NlcHQgbXVsdGlwbGUgc2xhdmVzICovCisJCWRvIHsKKwkJCWlmIChvcHRfZCkgeworCQkJCS8qIGRldGFjaCBhIHNsYXZlIGludGVyZmFjZSBmcm9tIHRoZSBtYXN0ZXIgKi8KKwkJCQlydiA9IGdldF9zbGF2ZV9mbGFncyhzbGF2ZV9pZm5hbWUpOworCQkJCWlmIChydikgeworCQkJCQkvKiBDYW4ndCB3b3JrIHdpdGggdGhpcyBzbGF2ZS4gKi8KKwkJCQkJLyogcmVtZW1iZXIgdGhlIGVycm9yIGFuZCBza2lwIGl0Ki8KKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGdldCBmbGFncyAiCisJCQkJCQkiZmFpbGVkLiBTa2lwcGluZ1xuIiwKKwkJCQkJCXNsYXZlX2lmbmFtZSk7CisJCQkJCXJlcyA9IHJ2OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcnYgPSByZWxlYXNlKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIk1hc3RlciAnJXMnLCBTbGF2ZSAnJXMnOiBFcnJvcjogIgorCQkJCQkJIlJlbGVhc2UgZmFpbGVkXG4iLAorCQkJCQkJbWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJCQkJcmVzID0gcnY7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBhdHRhY2ggYSBzbGF2ZSBpbnRlcmZhY2UgdG8gdGhlIG1hc3RlciAqLworCQkJCXJ2ID0gZ2V0X2lmX3NldHRpbmdzKHNsYXZlX2lmbmFtZSwgc2xhdmVfaWZyYSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCS8qIENhbid0IHdvcmsgd2l0aCB0aGlzIHNsYXZlLiAqLworCQkJCQkvKiByZW1lbWJlciB0aGUgZXJyb3IgYW5kIHNraXAgaXQqLworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogZ2V0ICIKKwkJCQkJCSJzZXR0aW5ncyBmYWlsZWQ6ICVzLiAiCisJCQkJCQkiU2tpcHBpbmdcbiIsCisJCQkJCQlzbGF2ZV9pZm5hbWUsIHN0cmVycm9yKHJ2KSk7CisJCQkJCXJlcyA9IHJ2OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcnYgPSBlbnNsYXZlKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIk1hc3RlciAnJXMnLCBTbGF2ZSAnJXMnOiBFcnJvcjogIgorCQkJCQkJIkVuc2xhdmUgZmFpbGVkXG4iLAorCQkJCQkJbWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJCQkJcmVzID0gcnY7CisJCQkJfQorCQkJfQorCQl9IHdoaWxlICgoc2xhdmVfaWZuYW1lID0gKnNwcCsrKSAhPSBOVUxMKTsKKwl9CisKK291dDoKKwlpZiAoc2tmZCA+PSAwKSB7CisJCWNsb3NlKHNrZmQpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzaG9ydCBtaWZfZmxhZ3M7CisKKy8qIEdldCB0aGUgaW50ZWZhY2UgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBrZXJuZWwuICovCitzdGF0aWMgaW50IGlmX2dldGNvbmZpZyhjaGFyICppZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgbWV0cmljLCBtdHU7CS8qIFBhcmFtZXRlcnMgb2YgdGhlIG1hc3RlciBpbnRlcmZhY2UuICovCisJc3RydWN0IHNvY2thZGRyIGRzdGFkZHIsIGJyb2FkYWRkciwgbmV0bWFzazsKKwl1bnNpZ25lZCBjaGFyICpod2FkZHI7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGRkxBR1MsICZpZnIpIDwgMCkKKwkJcmV0dXJuIC0xOworCW1pZl9mbGFncyA9IGlmci5pZnJfZmxhZ3M7CisJcHJpbnRmKCJUaGUgcmVzdWx0IG9mIFNJT0NHSUZGTEFHUyBvbiAlcyBpcyAleC5cbiIsCisJICAgICAgIGlmbmFtZSwgaWZyLmlmcl9mbGFncyk7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGQUREUiwgJmlmcikgPCAwKQorCQlyZXR1cm4gLTE7CisJcHJpbnRmKCJUaGUgcmVzdWx0IG9mIFNJT0NHSUZBRERSIGlzICUyLjJ4LiUyLjJ4LiUyLjJ4LiUyLjJ4LlxuIiwKKwkgICAgICAgaWZyLmlmcl9hZGRyLnNhX2RhdGFbMF0sIGlmci5pZnJfYWRkci5zYV9kYXRhWzFdLAorCSAgICAgICBpZnIuaWZyX2FkZHIuc2FfZGF0YVsyXSwgaWZyLmlmcl9hZGRyLnNhX2RhdGFbM10pOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkhXQUREUiwgJmlmcikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBHb3R0YSBjb252ZXJ0IGZyb20gJ2NoYXInIHRvIHVuc2lnbmVkIGZvciBwcmludGYoKS4gKi8KKwlod2FkZHIgPSAodW5zaWduZWQgY2hhciAqKWlmci5pZnJfaHdhZGRyLnNhX2RhdGE7CisJcHJpbnRmKCJUaGUgcmVzdWx0IG9mIFNJT0NHSUZIV0FERFIgaXMgdHlwZSAlZCAgIgorCSAgICAgICAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnguXG4iLAorCSAgICAgICBpZnIuaWZyX2h3YWRkci5zYV9mYW1pbHksIGh3YWRkclswXSwgaHdhZGRyWzFdLAorCSAgICAgICBod2FkZHJbMl0sIGh3YWRkclszXSwgaHdhZGRyWzRdLCBod2FkZHJbNV0pOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRk1FVFJJQywgJmlmcikgPCAwKSB7CisJCW1ldHJpYyA9IDA7CisJfSBlbHNlCisJCW1ldHJpYyA9IGlmci5pZnJfbWV0cmljOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRk1UVSwgJmlmcikgPCAwKQorCQltdHUgPSAwOworCWVsc2UKKwkJbXR1ID0gaWZyLmlmcl9tdHU7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGRFNUQUREUiwgJmlmcikgPCAwKSB7CisJCW1lbXNldCgmZHN0YWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCX0gZWxzZQorCQlkc3RhZGRyID0gaWZyLmlmcl9kc3RhZGRyOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkJSREFERFIsICZpZnIpIDwgMCkgeworCQltZW1zZXQoJmJyb2FkYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCX0gZWxzZQorCQlicm9hZGFkZHIgPSBpZnIuaWZyX2Jyb2FkYWRkcjsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZORVRNQVNLLCAmaWZyKSA8IDApIHsKKwkJbWVtc2V0KCZuZXRtYXNrLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJfSBlbHNlCisJCW5ldG1hc2sgPSBpZnIuaWZyX25ldG1hc2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWZfcHJpbnQoY2hhciAqaWZuYW1lKQoreworCWNoYXIgYnVmZlsxMDI0XTsKKwlzdHJ1Y3QgaWZjb25mIGlmYzsKKwlzdHJ1Y3QgaWZyZXEgKmlmcjsKKwlpbnQgaTsKKworCWlmIChpZm5hbWUgPT0gKGNoYXIgKilOVUxMKSB7CisJCWlmYy5pZmNfbGVuID0gc2l6ZW9mKGJ1ZmYpOworCQlpZmMuaWZjX2J1ZiA9IGJ1ZmY7CisJCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGQ09ORiwgJmlmYykgPCAwKSB7CisJCQlwZXJyb3IoIlNJT0NHSUZDT05GIGZhaWxlZCIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWZyID0gaWZjLmlmY19yZXE7CisJCWZvciAoaSA9IGlmYy5pZmNfbGVuIC8gc2l6ZW9mKHN0cnVjdCBpZnJlcSk7IC0taSA+PSAwOyBpZnIrKykgeworCQkJaWYgKGlmX2dldGNvbmZpZyhpZnItPmlmcl9uYW1lKSA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiVzOiB1bmtub3duIGludGVyZmFjZS5cbiIsCisJCQkJCWlmci0+aWZyX25hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoKChtaWZfZmxhZ3MgJiBJRkZfVVApID09IDApICYmICFvcHRfYSkgY29udGludWU7CisJCQkvKmlmZV9wcmludCgmaWZlKTsqLworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGlmX2dldGNvbmZpZyhpZm5hbWUpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIiVzOiB1bmtub3duIGludGVyZmFjZS5cbiIsIGlmbmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Rydl9pbmZvKGNoYXIgKm1hc3Rlcl9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm87CisJY2hhciAqZW5kcHRyOworCisJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZpbmZvOworCisJaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPOworCXN0cm5jcHkoaW5mby5kcml2ZXIsICJpZmVuc2xhdmUiLCAzMik7CisJc25wcmludGYoaW5mby5md192ZXJzaW9uLCAzMiwgIiVkIiwgQk9ORF9BQklfVkVSU0lPTik7CisKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0VUSFRPT0wsICZpZnIpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkgeworCQkJZ290byBvdXQ7CisJCX0KKworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IGdldCBib25kaW5nIGluZm8gZmFpbGVkICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfQorCisJYWJpX3ZlciA9IHN0cnRvdWwoaW5mby5md192ZXJzaW9uLCAmZW5kcHRyLCAwKTsKKwlpZiAoKmVuZHB0cikgeworICAgICAgICAgICAgICAgIHZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogZ290IGludmFsaWQgc3RyaW5nIGFzIGFuIEFCSSAiCisJCQkidmVyc2lvbiBmcm9tIHRoZSBib25kaW5nIG1vZHVsZVxuIiwKKwkJCW1hc3Rlcl9pZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKK291dDoKKwl2X3ByaW50KCJBQkkgdmVyIGlzICVkXG4iLCBhYmlfdmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoYW5nZV9hY3RpdmUoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIShzbGF2ZV9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfU0xBVkUpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHNsYXZlIGludGVyZmFjZSAiCisJCQkiJyVzJyBpcyBub3QgYSBzbGF2ZVxuIiwKKwkJCXNsYXZlX2lmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJc3RybmNweShpZnIuaWZyX3NsYXZlLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlpZiAoKGlvY3RsKHNrZmQsIFNJT0NCT05EQ0hBTkdFQUNUSVZFLCAmaWZyKSA8IDApICYmCisJICAgIChpb2N0bChza2ZkLCBCT05EX0NIQU5HRV9BQ1RJVkVfT0xELCAmaWZyKSA8IDApKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgZmFpbGVkOiAiCisJCQkiJXNcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXMgPSAxOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZW5zbGF2ZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzbGF2ZV9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfU0xBVkUpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb246IFRoZSBzcGVjaWZpZWQgc2xhdmUgaW50ZXJmYWNlICIKKwkJCSInJXMnIGlzIGFscmVhZHkgYSBzbGF2ZVxuIiwKKwkJCXNsYXZlX2lmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCXJlcyA9IHNldF9pZl9kb3duKHNsYXZlX2lmbmFtZSwgc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzKTsKKwlpZiAocmVzKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIlNsYXZlICclcyc6IEVycm9yOiBicmluZyBpbnRlcmZhY2UgZG93biBmYWlsZWRcbiIsCisJCQlzbGF2ZV9pZm5hbWUpOworCQlyZXR1cm4gcmVzOworCX0KKworCWlmIChhYmlfdmVyIDwgMikgeworCQkvKiBPbGRlciBib25kaW5nIHZlcnNpb25zIHdvdWxkIHBhbmljIGlmIHRoZSBzbGF2ZSBoYXMgbm8gSVAKKwkJICogYWRkcmVzcywgc28gZ2V0IHRoZSBJUCBzZXR0aW5nIGZyb20gdGhlIG1hc3Rlci4KKwkJICovCisJCXJlcyA9IHNldF9pZl9hZGRyKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogc2V0IGFkZHJlc3MgZmFpbGVkXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfSBlbHNlIHsKKwkJcmVzID0gY2xlYXJfaWZfYWRkcihzbGF2ZV9pZm5hbWUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGNsZWFyIGFkZHJlc3MgZmFpbGVkXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQorCisJaWYgKG1hc3Rlcl9tdHUuaWZyX210dSAhPSBzbGF2ZV9tdHUuaWZyX210dSkgeworCQlyZXMgPSBzZXRfc2xhdmVfbXR1KHNsYXZlX2lmbmFtZSwgbWFzdGVyX210dS5pZnJfbXR1KTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlNsYXZlICclcyc6IEVycm9yOiBzZXQgTVRVIGZhaWxlZFxuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKworCWlmIChod2FkZHJfc2V0KSB7CisJCS8qIE1hc3RlciBhbHJlYWR5IGhhcyBhbiBod2FkZHIKKwkJICogc28gc2V0IGl0J3MgaHdhZGRyIHRvIHRoZSBzbGF2ZQorCQkgKi8KKwkJaWYgKGFiaV92ZXIgPCAxKSB7CisJCQkvKiBUaGUgZHJpdmVyIGlzIHVzaW5nIGFuIG9sZCBBQkksIHNvCisJCQkgKiB0aGUgYXBwbGljYXRpb24gc2V0cyB0aGUgc2xhdmUncworCQkJICogaHdhZGRyCisJCQkgKi8KKwkJCXJlcyA9IHNldF9zbGF2ZV9od2FkZHIoc2xhdmVfaWZuYW1lLAorCQkJCQkgICAgICAgJihtYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIpKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlNsYXZlICclcyc6IEVycm9yOiBzZXQgaHcgYWRkcmVzcyAiCisJCQkJCSJmYWlsZWRcbiIsCisJCQkJCXNsYXZlX2lmbmFtZSk7CisJCQkJZ290byB1bmRvX210dTsKKwkJCX0KKworCQkJLyogRm9yIG9sZCBBQkkgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGJyaW5nIHRoZQorCQkJICogc2xhdmUgYmFjayB1cAorCQkJICovCisJCQlyZXMgPSBzZXRfaWZfdXAoc2xhdmVfaWZuYW1lLCBzbGF2ZV9mbGFncy5pZnJfZmxhZ3MpOworCQkJaWYgKHJlcykgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGJyaW5nIGludGVyZmFjZSAiCisJCQkJCSJkb3duIGZhaWxlZFxuIiwKKwkJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCQlnb3RvIHVuZG9fc2xhdmVfbWFjOworCQkJfQorCQl9CisJCS8qIFRoZSBkcml2ZXIgaXMgdXNpbmcgYSBuZXcgQUJJLAorCQkgKiBzbyB0aGUgZHJpdmVyIHRha2VzIGNhcmUgb2Ygc2V0dGluZworCQkgKiB0aGUgc2xhdmUncyBod2FkZHIgYW5kIGJyaW5naW5nCisJCSAqIGl0IHVwIGFnYWluCisJCSAqLworCX0gZWxzZSB7CisJCS8qIE5vIGh3YWRkciBmb3IgbWFzdGVyIHlldCwgc28KKwkJICogc2V0IHRoZSBzbGF2ZSdzIGh3YWRkciB0byBpdAorCQkgKi8KKwkJaWYgKGFiaV92ZXIgPCAxKSB7CisJCQkvKiBGb3Igb2xkIEFCSSwgdGhlIG1hc3RlciBuZWVkcyB0byBiZQorCQkJICogZG93biBiZWZvcmUgc2V0dGluZyBpdCdzIGh3YWRkcgorCQkJICovCisJCQlyZXMgPSBzZXRfaWZfZG93bihtYXN0ZXJfaWZuYW1lLCBtYXN0ZXJfZmxhZ3MuaWZyX2ZsYWdzKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkJImRvd24gZmFpbGVkXG4iLAorCQkJCQltYXN0ZXJfaWZuYW1lKTsKKwkJCQlnb3RvIHVuZG9fbXR1OworCQkJfQorCQl9CisKKwkJcmVzID0gc2V0X21hc3Rlcl9od2FkZHIobWFzdGVyX2lmbmFtZSwKKwkJCQkJJihzbGF2ZV9od2FkZHIuaWZyX2h3YWRkcikpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiTWFzdGVyICclcyc6IEVycm9yOiBzZXQgaHcgYWRkcmVzcyAiCisJCQkJImZhaWxlZFxuIiwKKwkJCQltYXN0ZXJfaWZuYW1lKTsKKwkJCWdvdG8gdW5kb19tdHU7CisJCX0KKworCQlpZiAoYWJpX3ZlciA8IDEpIHsKKwkJCS8qIEZvciBvbGQgQUJJLCBicmluZyB0aGUgbWFzdGVyCisJCQkgKiBiYWNrIHVwCisJCQkgKi8KKwkJCXJlcyA9IHNldF9pZl91cChtYXN0ZXJfaWZuYW1lLCBtYXN0ZXJfZmxhZ3MuaWZyX2ZsYWdzKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkJInVwIGZhaWxlZFxuIiwKKwkJCQkJbWFzdGVyX2lmbmFtZSk7CisJCQkJZ290byB1bmRvX21hc3Rlcl9tYWM7CisJCQl9CisJCX0KKworCQlod2FkZHJfc2V0ID0gMTsKKwl9CisKKwkvKiBEbyB0aGUgcmVhbCB0aGluZyAqLworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJc3RybmNweShpZnIuaWZyX3NsYXZlLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlpZiAoKGlvY3RsKHNrZmQsIFNJT0NCT05ERU5TTEFWRSwgJmlmcikgPCAwKSAmJgorCSAgICAoaW9jdGwoc2tmZCwgQk9ORF9FTlNMQVZFX09MRCwgJmlmcikgPCAwKSkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IFNJT0NCT05ERU5TTEFWRSBmYWlsZWQ6ICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmVzID0gMTsKKwl9CisKKwlpZiAocmVzKSB7CisJCWdvdG8gdW5kb19tYXN0ZXJfbWFjOworCX0KKworCXJldHVybiAwOworCisvKiByb2xsYmFjayAoYmVzdCBlZmZvcnQpICovCit1bmRvX21hc3Rlcl9tYWM6CisJc2V0X21hc3Rlcl9od2FkZHIobWFzdGVyX2lmbmFtZSwgJihtYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIpKTsKKwlod2FkZHJfc2V0ID0gMDsKKwlnb3RvIHVuZG9fbXR1OwordW5kb19zbGF2ZV9tYWM6CisJc2V0X3NsYXZlX2h3YWRkcihzbGF2ZV9pZm5hbWUsICYoc2xhdmVfaHdhZGRyLmlmcl9od2FkZHIpKTsKK3VuZG9fbXR1OgorCXNldF9zbGF2ZV9tdHUoc2xhdmVfaWZuYW1lLCBzbGF2ZV9tdHUuaWZyX210dSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCByZWxlYXNlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJaWYgKCEoc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzICYgSUZGX1NMQVZFKSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbGxlZ2FsIG9wZXJhdGlvbjogVGhlIHNwZWNpZmllZCBzbGF2ZSBpbnRlcmZhY2UgIgorCQkJIiclcycgaXMgbm90IGEgc2xhdmVcbiIsCisJCQlzbGF2ZV9pZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCXN0cm5jcHkoaWZyLmlmcl9zbGF2ZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJaWYgKChpb2N0bChza2ZkLCBTSU9DQk9ORFJFTEVBU0UsICZpZnIpIDwgMCkgJiYKKwkgICAgKGlvY3RsKHNrZmQsIEJPTkRfUkVMRUFTRV9PTEQsICZpZnIpIDwgMCkpIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBTSU9DQk9ORFJFTEVBU0UgZmFpbGVkOiAlc1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoYWJpX3ZlciA8IDEpIHsKKwkJLyogVGhlIGRyaXZlciBpcyB1c2luZyBhbiBvbGQgQUJJLCBzbyB3ZSdsbCBzZXQgdGhlIGludGVyZmFjZQorCQkgKiBkb3duIHRvIGF2b2lkIGFueSBjb25mbGljdHMgZHVlIHRvIHNhbWUgTUFDL0lQCisJCSAqLworCQlyZXMgPSBzZXRfaWZfZG93bihzbGF2ZV9pZm5hbWUsIHNsYXZlX2ZsYWdzLmlmcl9mbGFncyk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkiZG93biBmYWlsZWRcbiIsCisJCQkJc2xhdmVfaWZuYW1lKTsKKwkJfQorCX0KKworCS8qIHNldCB0byBkZWZhdWx0IG10dSAqLworCXNldF9zbGF2ZV9tdHUoc2xhdmVfaWZuYW1lLCAxNTAwKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2lmX3NldHRpbmdzKGNoYXIgKmlmbmFtZSwgc3RydWN0IGRldl9pZnIgaWZyYVtdKQoreworCWludCBpOworCWludCByZXMgPSAwOworCisJZm9yIChpID0gMDsgaWZyYVtpXS5yZXFfaWZyOyBpKyspIHsKKwkJc3RybmNweShpZnJhW2ldLnJlcV9pZnItPmlmcl9uYW1lLCBpZm5hbWUsIElGTkFNU0laKTsKKwkJcmVzID0gaW9jdGwoc2tmZCwgaWZyYVtpXS5yZXFfdHlwZSwgaWZyYVtpXS5yZXFfaWZyKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6ICVzIGZhaWxlZDogJXNcbiIsCisJCQkJaWZuYW1lLCBpZnJhW2ldLnJlcV9uYW1lLAorCQkJCXN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisKKwkJCXJldHVybiBzYXZlZF9lcnJubzsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9zbGF2ZV9mbGFncyhjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJaW50IHJlcyA9IDA7CisKKwlzdHJuY3B5KHNsYXZlX2ZsYWdzLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DR0lGRkxBR1MsICZzbGF2ZV9mbGFncyk7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogRXJyb3I6IFNJT0NHSUZGTEFHUyBmYWlsZWQ6ICVzXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIlNsYXZlICVzOiBmbGFncyAlMDRYLlxuIiwKKwkJCXNsYXZlX2lmbmFtZSwgc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9tYXN0ZXJfaHdhZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKQoreworCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodW5zaWduZWQgY2hhciAqKWh3YWRkci0+c2FfZGF0YTsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwltZW1jcHkoJihpZnIuaWZyX2h3YWRkciksIGh3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZIV0FERFIsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogU0lPQ1NJRkhXQUREUiBmYWlsZWQ6ICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogaGFyZHdhcmUgYWRkcmVzcyBzZXQgdG8gIgorCQkJIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LlxuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIGFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sCisJCQlhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9zbGF2ZV9od2FkZHIoY2hhciAqc2xhdmVfaWZuYW1lLCBzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyICphZGRyID0gKHVuc2lnbmVkIGNoYXIgKilod2FkZHItPnNhX2RhdGE7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwltZW1jcHkoJihpZnIuaWZyX2h3YWRkciksIGh3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZIV0FERFIsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogRXJyb3I6IFNJT0NTSUZIV0FERFIgZmFpbGVkOiAlc1xuIiwKKwkJCXNsYXZlX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKworCQlpZiAoc2F2ZWRfZXJybm8gPT0gRUJVU1kpIHsKKwkJCXZfcHJpbnQoIiAgVGhlIGRldmljZSBpcyBidXN5OiBpdCBtdXN0IGJlIGlkbGUgIgorCQkJCSJiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXG4iKTsKKwkJfSBlbHNlIGlmIChzYXZlZF9lcnJubyA9PSBFT1BOT1RTVVBQKSB7CisJCQl2X3ByaW50KCIgIFRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nICIKKwkJCQkidGhlIE1BQyBhZGRyZXNzLlxuIgorCQkJCSIgIFlvdXIga2VybmVsIGxpa2VseSBkb2VzIG5vdCBzdXBwb3J0IHNsYXZlICIKKwkJCQkiZGV2aWNlcy5cbiIpOworCQl9IGVsc2UgaWYgKHNhdmVkX2Vycm5vID09IEVJTlZBTCkgeworCQkJdl9wcmludCgiICBUaGUgZGV2aWNlJ3MgYWRkcmVzcyB0eXBlIGRvZXMgbm90IG1hdGNoICIKKwkJCQkidGhlIG1hc3RlcidzIGFkZHJlc3MgdHlwZS5cbiIpOworCQl9CisJCXJldHVybiByZXM7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogaGFyZHdhcmUgYWRkcmVzcyBzZXQgdG8gIgorCQkJIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LlxuIiwKKwkJCXNsYXZlX2lmbmFtZSwgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwKKwkJCWFkZHJbM10sIGFkZHJbNF0sIGFkZHJbNV0pOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX210dShjaGFyICpzbGF2ZV9pZm5hbWUsIGludCBtdHUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmci5pZnJfbXR1ID0gbXR1OworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZNVFUsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIlNsYXZlICclcyc6IEVycm9yOiBTSU9DU0lGTVRVIGZhaWxlZDogJXNcbiIsCisJCQlzbGF2ZV9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogTVRVIHNldCB0byAlZC5cbiIsIHNsYXZlX2lmbmFtZSwgbXR1KTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9pZl9mbGFncyhjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZnIuaWZyX2ZsYWdzID0gZmxhZ3M7CisJc3RybmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwgSUZOQU1TSVopOworCisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ1NJRkZMQUdTLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NTSUZGTEFHUyBmYWlsZWQ6ICVzXG4iLAorCQkJaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBmbGFncyBzZXQgdG8gJTA0WC5cbiIsIGlmbmFtZSwgZmxhZ3MpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lmX3VwKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpCit7CisJcmV0dXJuIHNldF9pZl9mbGFncyhpZm5hbWUsIGZsYWdzIHwgSUZGX1VQKTsKK30KKworc3RhdGljIGludCBzZXRfaWZfZG93bihjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKQoreworCXJldHVybiBzZXRfaWZfZmxhZ3MoaWZuYW1lLCBmbGFncyAmIH5JRkZfVVApOworfQorCitzdGF0aWMgaW50IGNsZWFyX2lmX2FkZHIoY2hhciAqaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CisJaWZyLmlmcl9hZGRyLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisJbWVtc2V0KGlmci5pZnJfYWRkci5zYV9kYXRhLCAwLCBzaXplb2YoaWZyLmlmcl9hZGRyLnNhX2RhdGEpKTsKKworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZBRERSLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NTSUZBRERSIGZhaWxlZDogJXNcbiIsCisJCQlpZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IGFkZHJlc3MgY2xlYXJlZFxuIiwgaWZuYW1lKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9pZl9hZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXM7CisJdW5zaWduZWQgY2hhciAqaXBhZGRyOworCWludCBpOworCXN0cnVjdCB7CisJCWNoYXIgKnJlcV9uYW1lOworCQljaGFyICpkZXNjOworCQlpbnQgZ19pb2N0bDsKKwkJaW50IHNfaW9jdGw7CisJfSBpZnJhW10gPSB7CisJCXsiSUZBRERSIiwgImFkZHIiLCBTSU9DR0lGQUREUiwgU0lPQ1NJRkFERFJ9LAorCQl7IkRTVEFERFIiLCAiZGVzdGluYXRpb24gYWRkciIsIFNJT0NHSUZEU1RBRERSLCBTSU9DU0lGRFNUQUREUn0sCisJCXsiQlJEQUREUiIsICJicm9hZGNhc3QgYWRkciIsIFNJT0NHSUZCUkRBRERSLCBTSU9DU0lGQlJEQUREUn0sCisJCXsiTkVUTUFTSyIsICJuZXRtYXNrIiwgU0lPQ0dJRk5FVE1BU0ssIFNJT0NTSUZORVRNQVNLfSwKKwkJe05VTEwsIE5VTEwsIDAsIDB9LAorCX07CisKKwlmb3IgKGkgPSAwOyBpZnJhW2ldLnJlcV9uYW1lOyBpKyspIHsKKwkJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwkJcmVzID0gaW9jdGwoc2tmZCwgaWZyYVtpXS5nX2lvY3RsLCAmaWZyKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisJCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NHJXMgZmFpbGVkOiAlc1xuIiwKKwkJCQltYXN0ZXJfaWZuYW1lLCBpZnJhW2ldLnJlcV9uYW1lLAorCQkJCXN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisKKwkJCWlmci5pZnJfYWRkci5zYV9mYW1pbHkgPSBBRl9JTkVUOworCQkJbWVtc2V0KGlmci5pZnJfYWRkci5zYV9kYXRhLCAwLAorCQkJICAgICAgIHNpemVvZihpZnIuaWZyX2FkZHIuc2FfZGF0YSkpOworCQl9CisKKwkJc3RybmNweShpZnIuaWZyX25hbWUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCQlyZXMgPSBpb2N0bChza2ZkLCBpZnJhW2ldLnNfaW9jdGwsICZpZnIpOworCQlpZiAocmVzIDwgMCkgeworCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisKKwkJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBFcnJvcjogU0lPQ1MlcyBmYWlsZWQ6ICVzXG4iLAorCQkJCXNsYXZlX2lmbmFtZSwgaWZyYVtpXS5yZXFfbmFtZSwKKwkJCQlzdHJlcnJvcihzYXZlZF9lcnJubykpOworCisJCQlyZXR1cm4gcmVzOworCQl9CisKKwkJaXBhZGRyID0gaWZyLmlmcl9hZGRyLnNhX2RhdGE7CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBzZXQgSVAgJXMgdG8gJWQuJWQuJWQuJWRcbiIsCisJCQlzbGF2ZV9pZm5hbWUsIGlmcmFbaV0uZGVzYywKKwkJCWlwYWRkclswXSwgaXBhZGRyWzFdLCBpcGFkZHJbMl0sIGlwYWRkclszXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgdmVyc2lvbi1jb250cm9sOiB0CisgKiAga2VwdC1uZXctdmVyc2lvbnM6IDUKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiAgdGFiLXdpZHRoOiA0CisgKiAgY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIGlmZW5zbGF2ZS5jIC1vIGlmZW5zbGF2ZSIKKyAqIEVuZDoKKyAqLworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzg5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMCwwICsxLDg3OCBAQAorL3Byb2Mvc3lzL25ldC9pcHY0LyogVmFyaWFibGVzOgorCitpcF9mb3J3YXJkIC0gQk9PTEVBTgorCTAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKKwlub3QgMCAtIGVuYWJsZWQgCisKKwlGb3J3YXJkIFBhY2tldHMgYmV0d2VlbiBpbnRlcmZhY2VzLgorCisJVGhpcyB2YXJpYWJsZSBpcyBzcGVjaWFsLCBpdHMgY2hhbmdlIHJlc2V0cyBhbGwgY29uZmlndXJhdGlvbgorCXBhcmFtZXRlcnMgdG8gdGhlaXIgZGVmYXVsdCBzdGF0ZSAoUkZDMTEyMiBmb3IgaG9zdHMsIFJGQzE4MTIKKwlmb3Igcm91dGVycykKKworaXBfZGVmYXVsdF90dGwgLSBJTlRFR0VSCisJZGVmYXVsdCA2NAorCitpcF9ub19wbXR1X2Rpc2MgLSBCT09MRUFOCisJRGlzYWJsZSBQYXRoIE1UVSBEaXNjb3ZlcnkuCisJZGVmYXVsdCBGQUxTRQorCittaW5fcG10dSAtIElOVEVHRVIKKwlkZWZhdWx0IDU2MiAtIG1pbmltdW0gZGlzY292ZXJlZCBQYXRoIE1UVQorCittdHVfZXhwaXJlcyAtIElOVEVHRVIKKwlUaW1lLCBpbiBzZWNvbmRzLCB0aGF0IGNhY2hlZCBQTVRVIGluZm9ybWF0aW9uIGlzIGtlcHQuCisKK21pbl9hZHZfbXNzIC0gSU5URUdFUgorCVRoZSBhZHZlcnRpc2VkIE1TUyBkZXBlbmRzIG9uIHRoZSBmaXJzdCBob3Agcm91dGUgTVRVLCBidXQgd2lsbAorCW5ldmVyIGJlIGxvd2VyIHRoYW4gdGhpcyBzZXR0aW5nLgorCitJUCBGcmFnbWVudGF0aW9uOgorCitpcGZyYWdfaGlnaF90aHJlc2ggLSBJTlRFR0VSCisJTWF4aW11bSBtZW1vcnkgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbiAKKwlpcGZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAorCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwZnJhZ19sb3dfdGhyZXNoCisJaXMgcmVhY2hlZC4KKwkKK2lwZnJhZ19sb3dfdGhyZXNoIC0gSU5URUdFUgorCVNlZSBpcGZyYWdfaGlnaF90aHJlc2gJCisKK2lwZnJhZ190aW1lIC0gSU5URUdFUgorCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4JCisKK2lwZnJhZ19zZWNyZXRfaW50ZXJ2YWwgLSBJTlRFR0VSCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lIAorCWZvciB0aGUgaGFzaCBzZWNyZXQpIGZvciBJUCBmcmFnbWVudHMuCisJRGVmYXVsdDogNjAwCisKK0lORVQgcGVlciBzdG9yYWdlOgorCitpbmV0X3BlZXJfdGhyZXNob2xkIC0gSU5URUdFUgorCVRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIHRoZSBzdG9yYWdlLiAgU3RhcnRpbmcgZnJvbSB0aGlzIHRocmVzaG9sZAkKKwllbnRyaWVzIHdpbGwgYmUgdGhyb3duIGFnZ3Jlc3NpdmVseS4gIFRoaXMgdGhyZXNob2xkIGFsc28gZGV0ZXJtaW5lcworCWVudHJpZXMnIHRpbWUtdG8tbGl2ZSBhbmQgdGltZSBpbnRlcnZhbHMgYmV0d2VlbiBnYXJiYWdlIGNvbGxlY3Rpb24KKwlwYXNzZXMuICBNb3JlIGVudHJpZXMsIGxlc3MgdGltZS10by1saXZlLCBsZXNzIEdDIGludGVydmFsLgorCitpbmV0X3BlZXJfbWludHRsIC0gSU5URUdFUgorCU1pbmltdW0gdGltZS10by1saXZlIG9mIGVudHJpZXMuICBTaG91bGQgYmUgZW5vdWdoIHRvIGNvdmVyIGZyYWdtZW50CisJdGltZS10by1saXZlIG9uIHRoZSByZWFzc2VtYmxpbmcgc2lkZS4gIFRoaXMgbWluaW11bSB0aW1lLXRvLWxpdmUgIGlzCisJZ3VhcmFudGVlZCBpZiB0aGUgcG9vbCBzaXplIGlzIGxlc3MgdGhhbiBpbmV0X3BlZXJfdGhyZXNob2xkLgorCU1lYXN1cmVkIGluIGppZmZpZXMoMSkuCisKK2luZXRfcGVlcl9tYXh0dGwgLSBJTlRFR0VSCisJTWF4aW11bSB0aW1lLXRvLWxpdmUgb2YgZW50cmllcy4gIFVudXNlZCBlbnRyaWVzIHdpbGwgZXhwaXJlIGFmdGVyCisJdGhpcyBwZXJpb2Qgb2YgdGltZSBpZiB0aGVyZSBpcyBubyBtZW1vcnkgcHJlc3N1cmUgb24gdGhlIHBvb2wgKGkuZS4KKwl3aGVuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcG9vbCBpcyB2ZXJ5IHNtYWxsKS4KKwlNZWFzdXJlZCBpbiBqaWZmaWVzKDEpLgorCitpbmV0X3BlZXJfZ2NfbWludGltZSAtIElOVEVHRVIKKwlNaW5pbXVtIGludGVydmFsIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3Nlcy4gIFRoaXMgaW50ZXJ2YWwgaXMKKwlpbiBlZmZlY3QgdW5kZXIgaGlnaCBtZW1vcnkgcHJlc3N1cmUgb24gdGhlIHBvb2wuCisJTWVhc3VyZWQgaW4gamlmZmllcygxKS4KKworaW5ldF9wZWVyX2djX21heHRpbWUgLSBJTlRFR0VSCisJTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXNzZXMuICBUaGlzIGludGVydmFsIGlzCisJaW4gZWZmZWN0IHVuZGVyIGxvdyAob3IgYWJzZW50KSBtZW1vcnkgcHJlc3N1cmUgb24gdGhlIHBvb2wuCisJTWVhc3VyZWQgaW4gamlmZmllcygxKS4KKworVENQIHZhcmlhYmxlczogCisKK3RjcF9zeW5fcmV0cmllcyAtIElOVEVHRVIKKwlOdW1iZXIgb2YgdGltZXMgaW5pdGlhbCBTWU5zIGZvciBhbiBhY3RpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdAorCXdpbGwgYmUgcmV0cmFuc21pdHRlZC4gU2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAyNTUuIERlZmF1bHQgdmFsdWUKKwlpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byB+MTgwc2Vjb25kcy4KKwordGNwX3N5bmFja19yZXRyaWVzIC0gSU5URUdFUgorCU51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsCisJYmUgcmV0cmFuc21pdHRlZC4gU2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAyNTUuIERlZmF1bHQgdmFsdWUKKwlpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byB+MTgwc2Vjb25kcy4KKwordGNwX2tlZXBhbGl2ZV90aW1lIC0gSU5URUdFUgorCUhvdyBvZnRlbiBUQ1Agc2VuZHMgb3V0IGtlZXBhbGl2ZSBtZXNzYWdlcyB3aGVuIGtlZXBhbGl2ZSBpcyBlbmFibGVkLgorCURlZmF1bHQ6IDJob3Vycy4KKwordGNwX2tlZXBhbGl2ZV9wcm9iZXMgLSBJTlRFR0VSCisJSG93IG1hbnkga2VlcGFsaXZlIHByb2JlcyBUQ1Agc2VuZHMgb3V0LCB1bnRpbCBpdCBkZWNpZGVzIHRoYXQgdGhlCisJY29ubmVjdGlvbiBpcyBicm9rZW4uIERlZmF1bHQgdmFsdWU6IDkuCisKK3RjcF9rZWVwYWxpdmVfaW50dmwgLSBJTlRFR0VSCisJSG93IGZyZXF1ZW50bHkgdGhlIHByb2JlcyBhcmUgc2VuZCBvdXQuIE11bHRpcGxpZWQgYnkKKwl0Y3Bfa2VlcGFsaXZlX3Byb2JlcyBpdCBpcyB0aW1lIHRvIGtpbGwgbm90IHJlc3BvbmRpbmcgY29ubmVjdGlvbiwKKwlhZnRlciBwcm9iZXMgc3RhcnRlZC4gRGVmYXVsdCB2YWx1ZTogNzVzZWMgaS5lLiBjb25uZWN0aW9uCisJd2lsbCBiZSBhYm9ydGVkIGFmdGVyIH4xMSBtaW51dGVzIG9mIHJldHJpZXMuCisKK3RjcF9yZXRyaWVzMSAtIElOVEVHRVIKKwlIb3cgbWFueSB0aW1lcyB0byByZXRyeSBiZWZvcmUgZGVjaWRpbmcgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcKKwlhbmQgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlcG9ydCB0aGlzIHN1c3BpY2lvbiB0byBuZXR3b3JrIGxheWVyLgorCU1pbmltYWwgUkZDIHZhbHVlIGlzIDMsIGl0IGlzIGRlZmF1bHQsIHdoaWNoIGNvcnJlc3BvbmRzCisJdG8gfjNzZWMtOG1pbiBkZXBlbmRpbmcgb24gUlRPLgorCit0Y3BfcmV0cmllczIgLSBJTlRFR0VSCisJSG93IG1heSB0aW1lcyB0byByZXRyeSBiZWZvcmUga2lsbGluZyBhbGl2ZSBUQ1AgY29ubmVjdGlvbi4KKwlSRkMxMTIyIHNheXMgdGhhdCB0aGUgbGltaXQgc2hvdWxkIGJlIGxvbmdlciB0aGFuIDEwMCBzZWMuCisJSXQgaXMgdG9vIHNtYWxsIG51bWJlci4JRGVmYXVsdCB2YWx1ZSAxNSBjb3JyZXNwb25kcyB0byB+MTMtMzBtaW4KKwlkZXBlbmRpbmcgb24gUlRPLgorCit0Y3Bfb3JwaGFuX3JldHJpZXMgLSBJTlRFR0VSCisJSG93IG1heSB0aW1lcyB0byByZXRyeSBiZWZvcmUga2lsbGluZyBUQ1AgY29ubmVjdGlvbiwgY2xvc2VkCisJYnkgb3VyIHNpZGUuIERlZmF1bHQgdmFsdWUgNyBjb3JyZXNwb25kcyB0byB+NTBzZWMtMTZtaW4KKwlkZXBlbmRpbmcgb24gUlRPLiBJZiB5b3UgbWFjaGluZSBpcyBsb2FkZWQgV0VCIHNlcnZlciwKKwl5b3Ugc2hvdWxkIHRoaW5rIGFib3V0IGxvd2VyaW5nIHRoaXMgdmFsdWUsIHN1Y2ggc29ja2V0cworCW1heSBjb25zdW1lIHNpZ25pZmljYW50IHJlc291cmNlcy4gQ2YuIHRjcF9tYXhfb3JwaGFucy4KKwordGNwX2Zpbl90aW1lb3V0IC0gSU5URUdFUgorCVRpbWUgdG8gaG9sZCBzb2NrZXQgaW4gc3RhdGUgRklOLVdBSVQtMiwgaWYgaXQgd2FzIGNsb3NlZAorCWJ5IG91ciBzaWRlLiBQZWVyIGNhbiBiZSBicm9rZW4gYW5kIG5ldmVyIGNsb3NlIGl0cyBzaWRlLAorCW9yIGV2ZW4gZGllZCB1bmV4cGVjdGVkbHkuIERlZmF1bHQgdmFsdWUgaXMgNjBzZWMuCisJVXN1YWwgdmFsdWUgdXNlZCBpbiAyLjIgd2FzIDE4MCBzZWNvbmRzLCB5b3UgbWF5IHJlc3RvcmUKKwlpdCwgYnV0IHJlbWVtYmVyIHRoYXQgaWYgeW91ciBtYWNoaW5lIGlzIGV2ZW4gdW5kZXJsb2FkZWQgV0VCIHNlcnZlciwKKwl5b3UgcmlzayB0byBvdmVyZmxvdyBtZW1vcnkgd2l0aCBraWxvdG9ucyBvZiBkZWFkIHNvY2tldHMsCisJRklOLVdBSVQtMiBzb2NrZXRzIGFyZSBsZXNzIGRhbmdlcm91cyB0aGFuIEZJTi1XQUlULTEsCisJYmVjYXVzZSB0aGV5IGVhdCBtYXhpbXVtIDEuNUsgb2YgbWVtb3J5LCBidXQgdGhleSB0ZW5kCisJdG8gbGl2ZSBsb25nZXIuCUNmLiB0Y3BfbWF4X29ycGhhbnMuCisKK3RjcF9tYXhfdHdfYnVja2V0cyAtIElOVEVHRVIKKwlNYXhpbWFsIG51bWJlciBvZiB0aW1ld2FpdCBzb2NrZXRzIGhlbGQgYnkgc3lzdGVtIHNpbXVsdGFuZW91c2x5LgorCUlmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkIHRpbWUtd2FpdCBzb2NrZXQgaXMgaW1tZWRpYXRlbHkgZGVzdHJveWVkCisJYW5kIHdhcm5pbmcgaXMgcHJpbnRlZC4gVGhpcyBsaW1pdCBleGlzdHMgb25seSB0byBwcmV2ZW50CisJc2ltcGxlIERvUyBhdHRhY2tzLCB5b3UgX211c3RfIG5vdCBsb3dlciB0aGUgbGltaXQgYXJ0aWZpY2lhbGx5LAorCWJ1dCByYXRoZXIgaW5jcmVhc2UgaXQgKHByb2JhYmx5LCBhZnRlciBpbmNyZWFzaW5nIGluc3RhbGxlZCBtZW1vcnkpLAorCWlmIG5ldHdvcmsgY29uZGl0aW9ucyByZXF1aXJlIG1vcmUgdGhhbiBkZWZhdWx0IHZhbHVlLgorCit0Y3BfdHdfcmVjeWNsZSAtIEJPT0xFQU4KKwlFbmFibGUgZmFzdCByZWN5Y2xpbmcgVElNRS1XQUlUIHNvY2tldHMuIERlZmF1bHQgdmFsdWUgaXMgMC4KKwlJdCBzaG91bGQgbm90IGJlIGNoYW5nZWQgd2l0aG91dCBhZHZpY2UvcmVxdWVzdCBvZiB0ZWNobmljYWwKKwlleHBlcnRzLgorCit0Y3BfdHdfcmV1c2UgLSBCT09MRUFOCisJQWxsb3cgdG8gcmV1c2UgVElNRS1XQUlUIHNvY2tldHMgZm9yIG5ldyBjb25uZWN0aW9ucyB3aGVuIGl0IGlzCisJc2FmZSBmcm9tIHByb3RvY29sIHZpZXdwb2ludC4gRGVmYXVsdCB2YWx1ZSBpcyAwLgorCUl0IHNob3VsZCBub3QgYmUgY2hhbmdlZCB3aXRob3V0IGFkdmljZS9yZXF1ZXN0IG9mIHRlY2huaWNhbAorCWV4cGVydHMuCisKK3RjcF9tYXhfb3JwaGFucyAtIElOVEVHRVIKKwlNYXhpbWFsIG51bWJlciBvZiBUQ1Agc29ja2V0cyBub3QgYXR0YWNoZWQgdG8gYW55IHVzZXIgZmlsZSBoYW5kbGUsCisJaGVsZCBieSBzeXN0ZW0uCUlmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkIG9ycGhhbmVkIGNvbm5lY3Rpb25zIGFyZQorCXJlc2V0IGltbWVkaWF0ZWx5IGFuZCB3YXJuaW5nIGlzIHByaW50ZWQuIFRoaXMgbGltaXQgZXhpc3RzCisJb25seSB0byBwcmV2ZW50IHNpbXBsZSBEb1MgYXR0YWNrcywgeW91IF9tdXN0XyBub3QgcmVseSBvbiB0aGlzCisJb3IgbG93ZXIgdGhlIGxpbWl0IGFydGlmaWNpYWxseSwgYnV0IHJhdGhlciBpbmNyZWFzZSBpdAorCShwcm9iYWJseSwgYWZ0ZXIgaW5jcmVhc2luZyBpbnN0YWxsZWQgbWVtb3J5KSwKKwlpZiBuZXR3b3JrIGNvbmRpdGlvbnMgcmVxdWlyZSBtb3JlIHRoYW4gZGVmYXVsdCB2YWx1ZSwKKwlhbmQgdHVuZSBuZXR3b3JrIHNlcnZpY2VzIHRvIGxpbmdlciBhbmQga2lsbCBzdWNoIHN0YXRlcworCW1vcmUgYWdncmVzc2l2ZWx5LiBMZXQgbWUgdG8gcmVtaW5kIGFnYWluOiBlYWNoIG9ycGhhbiBlYXRzCisJdXAgdG8gfjY0SyBvZiB1bnN3YXBwYWJsZSBtZW1vcnkuCisKK3RjcF9hYm9ydF9vbl9vdmVyZmxvdyAtIEJPT0xFQU4KKwlJZiBsaXN0ZW5pbmcgc2VydmljZSBpcyB0b28gc2xvdyB0byBhY2NlcHQgbmV3IGNvbm5lY3Rpb25zLAorCXJlc2V0IHRoZW0uIERlZmF1bHQgc3RhdGUgaXMgRkFMU0UuIEl0IG1lYW5zIHRoYXQgaWYgb3ZlcmZsb3cKKwlvY2N1cnJlZCBkdWUgdG8gYSBidXJzdCwgY29ubmVjdGlvbiB3aWxsIHJlY292ZXIuIEVuYWJsZSB0aGlzCisJb3B0aW9uIF9vbmx5XyBpZiB5b3UgYXJlIHJlYWxseSBzdXJlIHRoYXQgbGlzdGVuaW5nIGRhZW1vbgorCWNhbm5vdCBiZSB0dW5lZCB0byBhY2NlcHQgY29ubmVjdGlvbnMgZmFzdGVyLiBFbmFibGluZyB0aGlzCisJb3B0aW9uIGNhbiBoYXJtIGNsaWVudHMgb2YgeW91ciBzZXJ2ZXIuCisKK3RjcF9zeW5jb29raWVzIC0gQk9PTEVBTgorCU9ubHkgdmFsaWQgd2hlbiB0aGUga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIENPTkZJR19TWU5DT09LSUVTCisJU2VuZCBvdXQgc3luY29va2llcyB3aGVuIHRoZSBzeW4gYmFja2xvZyBxdWV1ZSBvZiBhIHNvY2tldCAKKwlvdmVyZmxvd3MuIFRoaXMgaXMgdG8gcHJldmVudCBhZ2FpbnN0IHRoZSBjb21tb24gJ3N5biBmbG9vZCBhdHRhY2snCisJRGVmYXVsdDogRkFMU0UKKworCU5vdGUsIHRoYXQgc3luY29va2llcyBpcyBmYWxsYmFjayBmYWNpbGl0eS4KKwlJdCBNVVNUIE5PVCBiZSB1c2VkIHRvIGhlbHAgaGlnaGx5IGxvYWRlZCBzZXJ2ZXJzIHRvIHN0YW5kCisJYWdhaW5zdCBsZWdhbCBjb25uZWN0aW9uIHJhdGUuIElmIHlvdSBzZWUgc3luZmxvb2Qgd2FybmluZ3MKKwlpbiB5b3VyIGxvZ3MsIGJ1dCBpbnZlc3RpZ2F0aW9uCXNob3dzIHRoYXQgdGhleSBvY2N1cgorCWJlY2F1c2Ugb2Ygb3ZlcmxvYWQgd2l0aCBsZWdhbCBjb25uZWN0aW9ucywgeW91IHNob3VsZCB0dW5lCisJYW5vdGhlciBwYXJhbWV0ZXJzIHVudGlsIHRoaXMgd2FybmluZyBkaXNhcHBlYXIuCisJU2VlOiB0Y3BfbWF4X3N5bl9iYWNrbG9nLCB0Y3Bfc3luYWNrX3JldHJpZXMsIHRjcF9hYm9ydF9vbl9vdmVyZmxvdy4KKworCXN5bmNvb2tpZXMgc2VyaW91c2x5IHZpb2xhdGUgVENQIHByb3RvY29sLCBkbyBub3QgYWxsb3cKKwl0byB1c2UgVENQIGV4dGVuc2lvbnMsIGNhbiByZXN1bHQgaW4gc2VyaW91cyBkZWdyYWRhdGlvbgorCW9mIHNvbWUgc2VydmljZXMgKGYuZS4gU01UUCByZWxheWluZyksIHZpc2libGUgbm90IGJ5IHlvdSwKKwlidXQgeW91ciBjbGllbnRzIGFuZCByZWxheXMsIGNvbnRhY3RpbmcgeW91LiBXaGlsZSB5b3Ugc2VlCisJc3luZmxvb2Qgd2FybmluZ3MgaW4gbG9ncyBub3QgYmVpbmcgcmVhbGx5IGZsb29kZWQsIHlvdXIgc2VydmVyCisJaXMgc2VyaW91c2x5IG1pc2NvbmZpZ3VyZWQuCisKK3RjcF9zdGR1cmcgLSBCT09MRUFOCisJVXNlIHRoZSBIb3N0IHJlcXVpcmVtZW50cyBpbnRlcnByZXRhdGlvbiBvZiB0aGUgVENQIHVyZyBwb2ludGVyIGZpZWxkLgorCU1vc3QgaG9zdHMgdXNlIHRoZSBvbGRlciBCU0QgaW50ZXJwcmV0YXRpb24sIHNvIGlmIHlvdSB0dXJuIHRoaXMgb24KKwlMaW51eCBtaWdodCBub3QgY29tbXVuaWNhdGUgY29ycmVjdGx5IHdpdGggdGhlbS4JCisJRGVmYXVsdDogRkFMU0UgCisJCit0Y3BfbWF4X3N5bl9iYWNrbG9nIC0gSU5URUdFUgorCU1heGltYWwgbnVtYmVyIG9mIHJlbWVtYmVyZWQgY29ubmVjdGlvbiByZXF1ZXN0cywgd2hpY2ggYXJlCisJc3RpbGwgZGlkIG5vdCByZWNlaXZlIGFuIGFja25vd2xlZGdtZW50IGZyb20gY29ubmVjdGluZyBjbGllbnQuCisJRGVmYXVsdCB2YWx1ZSBpcyAxMDI0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDEyOE1iIG9mIG1lbW9yeSwKKwlhbmQgMTI4IGZvciBsb3cgbWVtb3J5IG1hY2hpbmVzLiBJZiBzZXJ2ZXIgc3VmZmVycyBvZiBvdmVybG9hZCwKKwl0cnkgdG8gaW5jcmVhc2UgdGhpcyBudW1iZXIuCisKK3RjcF93aW5kb3dfc2NhbGluZyAtIEJPT0xFQU4KKwlFbmFibGUgd2luZG93IHNjYWxpbmcgYXMgZGVmaW5lZCBpbiBSRkMxMzIzLgorCit0Y3BfdGltZXN0YW1wcyAtIEJPT0xFQU4KKwlFbmFibGUgdGltZXN0YW1wcyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCisKK3RjcF9zYWNrIC0gQk9PTEVBTgorCUVuYWJsZSBzZWxlY3QgYWNrbm93bGVkZ21lbnRzIChTQUNLUykuCisKK3RjcF9mYWNrIC0gQk9PTEVBTgorCUVuYWJsZSBGQUNLIGNvbmdlc3Rpb24gYXZvaWRhbmNlIGFuZCBmYXN0IHJldHJhbnNtaXNzaW9uLgorCVRoZSB2YWx1ZSBpcyBub3QgdXNlZCwgaWYgdGNwX3NhY2sgaXMgbm90IGVuYWJsZWQuCisKK3RjcF9kc2FjayAtIEJPT0xFQU4KKwlBbGxvd3MgVENQIHRvIHNlbmQgImR1cGxpY2F0ZSIgU0FDS3MuCisKK3RjcF9lY24gLSBCT09MRUFOCisJRW5hYmxlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIGluIFRDUC4KKwordGNwX3Jlb3JkZXJpbmcgLSBJTlRFR0VSCisJTWF4aW1hbCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaW4gYSBUQ1Agc3RyZWFtLgorCURlZmF1bHQ6IDMJCisKK3RjcF9yZXRyYW5zX2NvbGxhcHNlIC0gQk9PTEVBTgorCUJ1Zy10by1idWcgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgYnJva2VuIHByaW50ZXJzLgorCU9uIHJldHJhbnNtaXQgdHJ5IHRvIHNlbmQgYmlnZ2VyIHBhY2tldHMgdG8gd29yayBhcm91bmQgYnVncyBpbgorCWNlcnRhaW4gVENQIHN0YWNrcy4KKwordGNwX3dtZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKKwltaW46IEFtb3VudCBvZiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldC4KKwlFYWNoIFRDUCBzb2NrZXQgaGFzIHJpZ2h0cyB0byB1c2UgaXQgZHVlIHRvIGZhY3Qgb2YgaXRzIGJpcnRoLgorCURlZmF1bHQ6IDRLCisKKwlkZWZhdWx0OiBBbW91bnQgb2YgbWVtb3J5IGFsbG93ZWQgZm9yIHNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldAorCWJ5IGRlZmF1bHQuIFRoaXMgdmFsdWUgb3ZlcnJpZGVzIG5ldC5jb3JlLndtZW1fZGVmYXVsdCB1c2VkCisJYnkgb3RoZXIgcHJvdG9jb2xzLCBpdCBpcyB1c3VhbGx5IGxvd2VyIHRoYW4gbmV0LmNvcmUud21lbV9kZWZhdWx0LgorCURlZmF1bHQ6IDE2SworCisJbWF4OiBNYXhpbWFsIGFtb3VudCBvZiBtZW1vcnkgYWxsb3dlZCBmb3IgYXV0b21hdGljYWxseSBzZWxlY3RlZAorCXNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldC4gVGhpcyB2YWx1ZSBkb2VzIG5vdCBvdmVycmlkZQorCW5ldC5jb3JlLndtZW1fbWF4LCAic3RhdGljIiBzZWxlY3Rpb24gdmlhIFNPX1NOREJVRiBkb2VzIG5vdCB1c2UgdGhpcy4KKwlEZWZhdWx0OiAxMjhLCisKK3RjcF9ybWVtIC0gdmVjdG9yIG9mIDMgSU5URUdFUnM6IG1pbiwgZGVmYXVsdCwgbWF4CisJbWluOiBNaW5pbWFsIHNpemUgb2YgcmVjZWl2ZSBidWZmZXIgdXNlZCBieSBUQ1Agc29ja2V0cy4KKwlJdCBpcyBndWFyYW50ZWVkIHRvIGVhY2ggVENQIHNvY2tldCwgZXZlbiB1bmRlciBtb2RlcmF0ZSBtZW1vcnkKKwlwcmVzc3VyZS4KKwlEZWZhdWx0OiA4SworCisJZGVmYXVsdDogZGVmYXVsdCBzaXplIG9mIHJlY2VpdmUgYnVmZmVyIHVzZWQgYnkgVENQIHNvY2tldHMuCisJVGhpcyB2YWx1ZSBvdmVycmlkZXMgbmV0LmNvcmUucm1lbV9kZWZhdWx0IHVzZWQgYnkgb3RoZXIgcHJvdG9jb2xzLgorCURlZmF1bHQ6IDg3MzgwIGJ5dGVzLiBUaGlzIHZhbHVlIHJlc3VsdHMgaW4gd2luZG93IG9mIDY1NTM1IHdpdGgKKwlkZWZhdWx0IHNldHRpbmcgb2YgdGNwX2Fkdl93aW5fc2NhbGUgYW5kIHRjcF9hcHBfd2luOjAgYW5kIGEgYml0CisJbGVzcyBmb3IgZGVmYXVsdCB0Y3BfYXBwX3dpbi4gU2VlIGJlbG93IGFib3V0IHRoZXNlIHZhcmlhYmxlcy4KKworCW1heDogbWF4aW1hbCBzaXplIG9mIHJlY2VpdmUgYnVmZmVyIGFsbG93ZWQgZm9yIGF1dG9tYXRpY2FsbHkKKwlzZWxlY3RlZCByZWNlaXZlciBidWZmZXJzIGZvciBUQ1Agc29ja2V0LiBUaGlzIHZhbHVlIGRvZXMgbm90IG92ZXJyaWRlCisJbmV0LmNvcmUucm1lbV9tYXgsICJzdGF0aWMiIHNlbGVjdGlvbiB2aWEgU09fUkNWQlVGIGRvZXMgbm90IHVzZSB0aGlzLgorCURlZmF1bHQ6IDg3MzgwKjIgYnl0ZXMuCisKK3RjcF9tZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBwcmVzc3VyZSwgbWF4CisJbG93OiBiZWxvdyB0aGlzIG51bWJlciBvZiBwYWdlcyBUQ1AgaXMgbm90IGJvdGhlcmVkIGFib3V0IGl0cworCW1lbW9yeSBhcHBldGl0ZS4KKworCXByZXNzdXJlOiB3aGVuIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGJ5IFRDUCBleGNlZWRzIHRoaXMgbnVtYmVyCisJb2YgcGFnZXMsIFRDUCBtb2RlcmF0ZXMgaXRzIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgZW50ZXJzIG1lbW9yeQorCXByZXNzdXJlIG1vZGUsIHdoaWNoIGlzIGV4aXRlZCB3aGVuIG1lbW9yeSBjb25zdW1wdGlvbiBmYWxscworCXVuZGVyICJsb3ciLgorCisJaGlnaDogbnVtYmVyIG9mIHBhZ2VzIGFsbG93ZWQgZm9yIHF1ZXVlaW5nIGJ5IGFsbCBUQ1Agc29ja2V0cy4KKworCURlZmF1bHRzIGFyZSBjYWxjdWxhdGVkIGF0IGJvb3QgdGltZSBmcm9tIGFtb3VudCBvZiBhdmFpbGFibGUKKwltZW1vcnkuCisKK3RjcF9hcHBfd2luIC0gSU5URUdFUgorCVJlc2VydmUgbWF4KHdpbmRvdy8yXnRjcF9hcHBfd2luLCBtc3MpIG9mIHdpbmRvdyBmb3IgYXBwbGljYXRpb24KKwlidWZmZXIuIFZhbHVlIDAgaXMgc3BlY2lhbCwgaXQgbWVhbnMgdGhhdCBub3RoaW5nIGlzIHJlc2VydmVkLgorCURlZmF1bHQ6IDMxCisKK3RjcF9hZHZfd2luX3NjYWxlIC0gSU5URUdFUgorCUNvdW50IGJ1ZmZlcmluZyBvdmVyaGVhZCBhcyBieXRlcy8yXnRjcF9hZHZfd2luX3NjYWxlCisJKGlmIHRjcF9hZHZfd2luX3NjYWxlID4gMCkgb3IgYnl0ZXMtYnl0ZXMvMl4oLXRjcF9hZHZfd2luX3NjYWxlKSwKKwlpZiBpdCBpcyA8PSAwLgorCURlZmF1bHQ6IDIKKwordGNwX3JmYzEzMzcgLSBCT09MRUFOCisJSWYgc2V0LCB0aGUgVENQIHN0YWNrIGJlaGF2ZXMgY29uZm9ybWluZyB0byBSRkMxMzM3LiBJZiB1bnNldCwKKwl3ZSBhcmUgbm90IGNvbmZvcm1pbmcgdG8gUkZDLCBidXQgcHJldmVudCBUQ1AgVElNRV9XQUlUCisJYXNzYXNzaW5hdGlvbi4gICAKKwlEZWZhdWx0OiAwCisKK3RjcF9sb3dfbGF0ZW5jeSAtIEJPT0xFQU4KKwlJZiBzZXQsIHRoZSBUQ1Agc3RhY2sgbWFrZXMgZGVjaXNpb25zIHRoYXQgcHJlZmVyIGxvd2VyCisJbGF0ZW5jeSBhcyBvcHBvc2VkIHRvIGhpZ2hlciB0aHJvdWdocHV0LiAgQnkgZGVmYXVsdCwgdGhpcworCW9wdGlvbiBpcyBub3Qgc2V0IG1lYW5pbmcgdGhhdCBoaWdoZXIgdGhyb3VnaHB1dCBpcyBwcmVmZXJyZWQuCisJQW4gZXhhbXBsZSBvZiBhbiBhcHBsaWNhdGlvbiB3aGVyZSB0aGlzIGRlZmF1bHQgc2hvdWxkIGJlCisJY2hhbmdlZCB3b3VsZCBiZSBhIEJlb3d1bGYgY29tcHV0ZSBjbHVzdGVyLgorCURlZmF1bHQ6IDAKKwordGNwX3dlc3R3b29kIC0gQk9PTEVBTgorICAgICAgICBFbmFibGUgVENQIFdlc3R3b29kKyBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtLgorCVRDUCBXZXN0d29vZCsgaXMgYSBzZW5kZXItc2lkZSBvbmx5IG1vZGlmaWNhdGlvbiBvZiB0aGUgVENQIFJlbm8gCisJcHJvdG9jb2wgc3RhY2sgdGhhdCBvcHRpbWl6ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIFRDUCBjb25nZXN0aW9uIAorCWNvbnRyb2wuIEl0IGlzIGJhc2VkIG9uIGVuZC10by1lbmQgYmFuZHdpZHRoIGVzdGltYXRpb24gdG8gc2V0IAorCWNvbmdlc3Rpb24gd2luZG93IGFuZCBzbG93IHN0YXJ0IHRocmVzaG9sZCBhZnRlciBhIGNvbmdlc3Rpb24gCisJZXBpc29kZS4gVXNpbmcgdGhpcyBlc3RpbWF0aW9uLCBUQ1AgV2VzdHdvb2QrIGFkYXB0aXZlbHkgc2V0cyBhIAorCXNsb3cgc3RhcnQgdGhyZXNob2xkIGFuZCBhIGNvbmdlc3Rpb24gd2luZG93IHdoaWNoIHRha2VzIGludG8gCisJYWNjb3VudCB0aGUgYmFuZHdpZHRoIHVzZWQgIGF0IHRoZSB0aW1lIGNvbmdlc3Rpb24gaXMgZXhwZXJpZW5jZWQuIAorCVRDUCBXZXN0d29vZCsgc2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgZmFpcm5lc3Mgd3J0IFRDUCBSZW5vIGluIAorCXdpcmVkIG5ldHdvcmtzIGFuZCB0aHJvdWdocHV0IG92ZXIgd2lyZWxlc3MgbGlua3MuICAgCisgICAgICAgIERlZmF1bHQ6IDAKKwordGNwX3ZlZ2FzX2NvbmdfYXZvaWQgLSBCT09MRUFOCisJRW5hYmxlIFRDUCBWZWdhcyBjb25nZXN0aW9uIGF2b2lkYW5jZSBhbGdvcml0aG0uCisJVENQIFZlZ2FzIGlzIGEgc2VuZGVyLXNpZGUgb25seSBjaGFuZ2UgdG8gVENQIHRoYXQgYW50aWNpcGF0ZXMKKwl0aGUgb25zZXQgb2YgY29uZ2VzdGlvbiBieSBlc3RpbWF0aW5nIHRoZSBiYW5kd2lkdGguIFRDUCBWZWdhcworCWFkanVzdHMgdGhlIHNlbmRpbmcgcmF0ZSBieSBtb2RpZnlpbmcgdGhlIGNvbmdlc3Rpb24KKwl3aW5kb3cuIFRDUCBWZWdhcyBzaG91bGQgcHJvdmlkZSBsZXNzIHBhY2tldCBsb3NzLCBidXQgaXQgaXMKKwlub3QgYXMgYWdncmVzc2l2ZSBhcyBUQ1AgUmVuby4KKwlEZWZhdWx0OjAKKwordGNwX2JpYyAtIEJPT0xFQU4KKwlFbmFibGUgQklDIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtLgorCUJJQy1UQ1AgaXMgYSBzZW5kZXItc2lkZSBvbmx5IGNoYW5nZSB0aGF0IGVuc3VyZXMgYSBsaW5lYXIgUlRUCisJZmFpcm5lc3MgdW5kZXIgbGFyZ2Ugd2luZG93cyB3aGlsZSBvZmZlcmluZyBib3RoIHNjYWxhYmlsaXR5IGFuZAorCWJvdW5kZWQgVENQLWZyaWVuZGxpbmVzcy4gVGhlIHByb3RvY29sIGNvbWJpbmVzIHR3byBzY2hlbWVzCisJY2FsbGVkIGFkZGl0aXZlIGluY3JlYXNlIGFuZCBiaW5hcnkgc2VhcmNoIGluY3JlYXNlLiBXaGVuIHRoZQorCWNvbmdlc3Rpb24gd2luZG93IGlzIGxhcmdlLCBhZGRpdGl2ZSBpbmNyZWFzZSB3aXRoIGEgbGFyZ2UKKwlpbmNyZW1lbnQgZW5zdXJlcyBsaW5lYXIgUlRUIGZhaXJuZXNzIGFzIHdlbGwgYXMgZ29vZAorCXNjYWxhYmlsaXR5LiBVbmRlciBzbWFsbCBjb25nZXN0aW9uIHdpbmRvd3MsIGJpbmFyeSBzZWFyY2gKKwlpbmNyZWFzZSBwcm92aWRlcyBUQ1AgZnJpZW5kbGluZXNzLgorCURlZmF1bHQ6IDAKKwordGNwX2JpY19sb3dfd2luZG93IC0gSU5URUdFUgorCVNldHMgdGhlIHRocmVzaG9sZCB3aW5kb3cgKGluIHBhY2tldHMpIHdoZXJlIEJJQyBUQ1Agc3RhcnRzIHRvCisJYWRqdXN0IHRoZSBjb25nZXN0aW9uIHdpbmRvdy4gQmVsb3cgdGhpcyB0aHJlc2hvbGQgQklDIFRDUCBiZWhhdmVzCisJdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgVENQIFJlbm8uIAorCURlZmF1bHQ6IDE0CisKK3RjcF9iaWNfZmFzdF9jb252ZXJnZW5jZSAtIEJPT0xFQU4KKwlGb3JjZXMgQklDIFRDUCB0byBtb3JlIHF1aWNrbHkgcmVzcG9uZCB0byBjaGFuZ2VzIGluIGNvbmdlc3Rpb24KKwl3aW5kb3cuIEFsbG93cyB0d28gZmxvd3Mgc2hhcmluZyB0aGUgc2FtZSBjb25uZWN0aW9uIHRvIGNvbnZlcmdlCisJbW9yZSByYXBpZGx5LgorCURlZmF1bHQ6IDEKKwordGNwX2RlZmF1bHRfd2luX3NjYWxlIC0gSU5URUdFUgorCVNldHMgdGhlIG1pbmltdW0gd2luZG93IHNjYWxlIFRDUCB3aWxsIG5lZ290aWF0ZSBmb3Igb24gYWxsCisJY29uZWN0aW9ucy4KKwlEZWZhdWx0OiA3CisKK3RjcF90c29fd2luX2Rpdmlzb3IgLSBJTlRFR0VSCisgICAgICAgVGhpcyBhbGxvd3MgY29udHJvbCBvdmVyIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUgY29uZ2VzdGlvbiB3aW5kb3cKKyAgICAgICBjYW4gYmUgY29uc3VtZWQgYnkgYSBzaW5nbGUgVFNPIGZyYW1lLgorICAgICAgIFRoZSBzZXR0aW5nIG9mIHRoaXMgcGFyYW1ldGVyIGlzIGEgY2hvaWNlIGJldHdlZW4gYnVyc3RpbmVzcyBhbmQKKyAgICAgICBidWlsZGluZyBsYXJnZXIgVFNPIGZyYW1lcy4KKyAgICAgICBEZWZhdWx0OiA4CisKK3RjcF9mcnRvIC0gQk9PTEVBTgorCUVuYWJsZXMgRi1SVE8sIGFuIGVuaGFuY2VkIHJlY292ZXJ5IGFsZ29yaXRobSBmb3IgVENQIHJldHJhbnNtaXNzaW9uCisJdGltZW91dHMuICBJdCBpcyBwYXJ0aWN1bGFybHkgYmVuZWZpY2lhbCBpbiB3aXJlbGVzcyBlbnZpcm9ubWVudHMKKwl3aGVyZSBwYWNrZXQgbG9zcyBpcyB0eXBpY2FsbHkgZHVlIHRvIHJhbmRvbSByYWRpbyBpbnRlcmZlcmVuY2UKKwlyYXRoZXIgdGhhbiBpbnRlcm1lZGlhdGUgcm91dGVyIGNvbmdlc3Rpb24uCisKK3NvbWF4Y29ubiAtIElOVEVHRVIKKwlMaW1pdCBvZiBzb2NrZXQgbGlzdGVuKCkgYmFja2xvZywga25vd24gaW4gdXNlcnNwYWNlIGFzIFNPTUFYQ09OTi4KKwlEZWZhdWx0cyB0byAxMjguICBTZWUgYWxzbyB0Y3BfbWF4X3N5bl9iYWNrbG9nIGZvciBhZGRpdGlvbmFsIHR1bmluZworCWZvciBUQ1Agc29ja2V0cy4KKworSVAgVmFyaWFibGVzOgorCitpcF9sb2NhbF9wb3J0X3JhbmdlIC0gMiBJTlRFR0VSUworCURlZmluZXMgdGhlIGxvY2FsIHBvcnQgcmFuZ2UgdGhhdCBpcyB1c2VkIGJ5IFRDUCBhbmQgVURQIHRvCisJY2hvb3NlIHRoZSBsb2NhbCBwb3J0LiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBmaXJzdCwgdGhlIAorCXNlY29uZCB0aGUgbGFzdCBsb2NhbCBwb3J0IG51bWJlci4gRGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uCisJYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUgb24gdGhlIHN5c3RlbToKKwk+IDEyOE1iIDMyNzY4LTYxMDAwCisJPCAxMjhNYiAxMDI0LTQ5OTkgb3IgZXZlbiBsZXNzLgorCVRoaXMgbnVtYmVyIGRlZmluZXMgbnVtYmVyIG9mIGFjdGl2ZSBjb25uZWN0aW9ucywgd2hpY2ggdGhpcworCXN5c3RlbSBjYW4gaXNzdWUgc2ltdWx0YW5lb3VzbHkgdG8gc3lzdGVtcyBub3Qgc3VwcG9ydGluZworCVRDUCBleHRlbnNpb25zICh0aW1lc3RhbXBzKS4gV2l0aCB0Y3BfdHdfcmVjeWNsZSBlbmFibGVkCisJKGkuZS4gYnkgZGVmYXVsdCkgcmFuZ2UgMTAyNC00OTk5IGlzIGVub3VnaCB0byBpc3N1ZSB1cCB0bworCTIwMDAgY29ubmVjdGlvbnMgcGVyIHNlY29uZCB0byBzeXN0ZW1zIHN1cHBvcnRpbmcgdGltZXN0YW1wcy4KKworaXBfbm9ubG9jYWxfYmluZCAtIEJPT0xFQU4KKwlJZiBzZXQsIGFsbG93cyBwcm9jZXNzZXMgdG8gYmluZCgpIHRvIG5vbi1sb2NhbCBJUCBhZGRyZXNzZXMsCisJd2hpY2ggY2FuIGJlIHF1aXRlIHVzZWZ1bCAtIGJ1dCBtYXkgYnJlYWsgc29tZSBhcHBsaWNhdGlvbnMuCisJRGVmYXVsdDogMAorCitpcF9keW5hZGRyIC0gQk9PTEVBTgorCUlmIHNldCBub24temVybywgZW5hYmxlcyBzdXBwb3J0IGZvciBkeW5hbWljIGFkZHJlc3Nlcy4KKwlJZiBzZXQgdG8gYSBub24temVybyB2YWx1ZSBsYXJnZXIgdGhhbiAxLCBhIGtlcm5lbCBsb2cKKwltZXNzYWdlIHdpbGwgYmUgcHJpbnRlZCB3aGVuIGR5bmFtaWMgYWRkcmVzcyByZXdyaXRpbmcKKwlvY2N1cnMuCisJRGVmYXVsdDogMAorCitpY21wX2VjaG9faWdub3JlX2FsbCAtIEJPT0xFQU4KK2ljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cyAtIEJPT0xFQU4KKwlJZiBlaXRoZXIgaXMgc2V0IHRvIHRydWUsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGlnbm9yZSBlaXRoZXIgYWxsCisJSUNNUCBFQ0hPIHJlcXVlc3RzIHNlbnQgdG8gaXQgb3IganVzdCB0aG9zZSB0byBicm9hZGNhc3QvbXVsdGljYXN0CisJYWRkcmVzc2VzLCByZXNwZWN0aXZlbHkuCisKK2ljbXBfcmF0ZWxpbWl0IC0gSU5URUdFUgorCUxpbWl0IHRoZSBtYXhpbWFsIHJhdGVzIGZvciBzZW5kaW5nIElDTVAgcGFja2V0cyB3aG9zZSB0eXBlIG1hdGNoZXMKKwlpY21wX3JhdGVtYXNrIChzZWUgYmVsb3cpIHRvIHNwZWNpZmljIHRhcmdldHMuCisJMCB0byBkaXNhYmxlIGFueSBsaW1pdGluZywgb3RoZXJ3aXNlIHRoZSBtYXhpbWFsIHJhdGUgaW4gamlmZmllcygxKQorCURlZmF1bHQ6IDEwMAorCitpY21wX3JhdGVtYXNrIC0gSU5URUdFUgorCU1hc2sgbWFkZSBvZiBJQ01QIHR5cGVzIGZvciB3aGljaCByYXRlcyBhcmUgYmVpbmcgbGltaXRlZC4KKwlTaWduaWZpY2FudCBiaXRzOiBJSEdGRURDQkE5ODc2NTQzMjEwCisJRGVmYXVsdCBtYXNrOiAgICAgMDAwMDAwMTEwMDAwMDAxMTAwMCAoNjE2OCkKKworCUJpdCBkZWZpbml0aW9ucyAoc2VlIGluY2x1ZGUvbGludXgvaWNtcC5oKToKKwkJMCBFY2hvIFJlcGx5CisJCTMgRGVzdGluYXRpb24gVW5yZWFjaGFibGUgKgorCQk0IFNvdXJjZSBRdWVuY2ggKgorCQk1IFJlZGlyZWN0CisJCTggRWNobyBSZXF1ZXN0CisJCUIgVGltZSBFeGNlZWRlZCAqCisJCUMgUGFyYW1ldGVyIFByb2JsZW0gKgorCQlEIFRpbWVzdGFtcCBSZXF1ZXN0CisJCUUgVGltZXN0YW1wIFJlcGx5CisJCUYgSW5mbyBSZXF1ZXN0CisJCUcgSW5mbyBSZXBseQorCQlIIEFkZHJlc3MgTWFzayBSZXF1ZXN0CisJCUkgQWRkcmVzcyBNYXNrIFJlcGx5CisKKwkqIFRoZXNlIGFyZSByYXRlIGxpbWl0ZWQgYnkgZGVmYXVsdCAoc2VlIGRlZmF1bHQgbWFzayBhYm92ZSkKKworaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzIC0gQk9PTEVBTgorCVNvbWUgcm91dGVycyB2aW9sYXRlIFJGQzExMjIgYnkgc2VuZGluZyBib2d1cyByZXNwb25zZXMgdG8gYnJvYWRjYXN0CisJZnJhbWVzLiAgU3VjaCB2aW9sYXRpb25zIGFyZSBub3JtYWxseSBsb2dnZWQgdmlhIGEga2VybmVsIHdhcm5pbmcuCisJSWYgdGhpcyBpcyBzZXQgdG8gVFJVRSwgdGhlIGtlcm5lbCB3aWxsIG5vdCBnaXZlIHN1Y2ggd2FybmluZ3MsIHdoaWNoCisJd2lsbCBhdm9pZCBsb2cgZmlsZSBjbHV0dGVyLgorCURlZmF1bHQ6IEZBTFNFCisKK2lnbXBfbWF4X21lbWJlcnNoaXBzIC0gSU5URUdFUgorCUNoYW5nZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGdyb3VwcyB3ZSBjYW4gc3Vic2NyaWJlIHRvLgorCURlZmF1bHQ6IDIwCisKK2NvbmYvaW50ZXJmYWNlLyogIGNoYW5nZXMgc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlICh3aGVyZSAiaW50ZXJmYWNlIiBpcyAKKwkJICB0aGUgbmFtZSBvZiB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlKQorY29uZi9hbGwvKgkgIGlzIHNwZWNpYWwsIGNoYW5nZXMgdGhlIHNldHRpbmdzIGZvciBhbGwgaW50ZXJmYWNlcworCisKK2xvZ19tYXJ0aWFucyAtIEJPT0xFQU4KKwlMb2cgcGFja2V0cyB3aXRoIGltcG9zc2libGUgYWRkcmVzc2VzIHRvIGtlcm5lbCBsb2cuCisJbG9nX21hcnRpYW5zIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9sb2dfbWFydGlhbnMgaXMgc2V0IHRvIFRSVUUsCisJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKworYWNjZXB0X3JlZGlyZWN0cyAtIEJPT0xFQU4KKwlBY2NlcHQgSUNNUCByZWRpcmVjdCBtZXNzYWdlcy4KKwlhY2NlcHRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZjoKKwktIGJvdGggY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBhcmUgVFJVRSBpbiB0aGUgY2FzZSBmb3J3YXJkaW5nCisJICBmb3IgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkCisJb3IKKwktIGF0IGxlYXN0IG9uZSBvZiBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgaW4gdGhlIGNhc2UKKwkgIGZvcndhcmRpbmcgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQKKwlhY2NlcHRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisJZGVmYXVsdCBUUlVFIChob3N0KQorCQlGQUxTRSAocm91dGVyKQorCitmb3J3YXJkaW5nIC0gQk9PTEVBTgorCUVuYWJsZSBJUCBmb3J3YXJkaW5nIG9uIHRoaXMgaW50ZXJmYWNlLgorCittY19mb3J3YXJkaW5nIC0gQk9PTEVBTgorCURvIG11bHRpY2FzdCByb3V0aW5nLiBUaGUga2VybmVsIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHdpdGggQ09ORklHX01ST1VURQorCWFuZCBhIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbiBpcyByZXF1aXJlZC4KKwljb25mL2FsbC9tY19mb3J3YXJkaW5nIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBlbmFibGUgbXVsdGljYXN0IHJvdXRpbmcKKwlmb3IgdGhlIGludGVyZmFjZQorCittZWRpdW1faWQgLSBJTlRFR0VSCisJSW50ZWdlciB2YWx1ZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdGhlIGRldmljZXMgYnkgdGhlIG1lZGl1bSB0aGV5CisJYXJlIGF0dGFjaGVkIHRvLiBUd28gZGV2aWNlcyBjYW4gaGF2ZSBkaWZmZXJlbnQgaWQgdmFsdWVzIHdoZW4KKwl0aGUgYnJvYWRjYXN0IHBhY2tldHMgYXJlIHJlY2VpdmVkIG9ubHkgb24gb25lIG9mIHRoZW0uCisJVGhlIGRlZmF1bHQgdmFsdWUgMCBtZWFucyB0aGF0IHRoZSBkZXZpY2UgaXMgdGhlIG9ubHkgaW50ZXJmYWNlCisJdG8gaXRzIG1lZGl1bSwgdmFsdWUgb2YgLTEgbWVhbnMgdGhhdCBtZWRpdW0gaXMgbm90IGtub3duLgorCQorCUN1cnJlbnRseSwgaXQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIHByb3h5X2FycCBiZWhhdmlvcjoKKwl0aGUgcHJveHlfYXJwIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgcGFja2V0cyBmb3J3YXJkZWQgYmV0d2VlbgorCXR3byBkZXZpY2VzIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBtZWRpYS4KKworcHJveHlfYXJwIC0gQk9PTEVBTgorCURvIHByb3h5IGFycC4KKwlwcm94eV9hcnAgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L3Byb3h5X2FycCBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCitzaGFyZWRfbWVkaWEgLSBCT09MRUFOCisJU2VuZChyb3V0ZXIpIG9yIGFjY2VwdChob3N0KSBSRkMxNjIwIHNoYXJlZCBtZWRpYSByZWRpcmVjdHMuCisJT3ZlcnJpZGVzIGlwX3NlY3VyZV9yZWRpcmVjdHMuCisJc2hhcmVkX21lZGlhIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9zaGFyZWRfbWVkaWEgaXMgc2V0IHRvIFRSVUUsCisJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKwlkZWZhdWx0IFRSVUUKKworc2VjdXJlX3JlZGlyZWN0cyAtIEJPT0xFQU4KKwlBY2NlcHQgSUNNUCByZWRpcmVjdCBtZXNzYWdlcyBvbmx5IGZvciBnYXRld2F5cywKKwlsaXN0ZWQgaW4gZGVmYXVsdCBnYXRld2F5IGxpc3QuCisJc2VjdXJlX3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vc2VjdXJlX3JlZGlyZWN0cyBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCWRlZmF1bHQgVFJVRQorCitzZW5kX3JlZGlyZWN0cyAtIEJPT0xFQU4KKwlTZW5kIHJlZGlyZWN0cywgaWYgcm91dGVyLgorCXNlbmRfcmVkaXJlY3RzIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9zZW5kX3JlZGlyZWN0cyBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCURlZmF1bHQ6IFRSVUUKKworYm9vdHBfcmVsYXkgLSBCT09MRUFOCisJQWNjZXB0IHBhY2tldHMgd2l0aCBzb3VyY2UgYWRkcmVzcyAwLmIuYy5kIGRlc3RpbmVkCisJbm90IHRvIHRoaXMgaG9zdCBhcyBsb2NhbCBvbmVzLiBJdCBpcyBzdXBwb3NlZCwgdGhhdAorCUJPT1RQIHJlbGF5IGRhZW1vbiB3aWxsIGNhdGNoIGFuZCBmb3J3YXJkIHN1Y2ggcGFja2V0cy4KKwljb25mL2FsbC9ib290cF9yZWxheSBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIEJPT1RQIHJlbGF5CisJZm9yIHRoZSBpbnRlcmZhY2UKKwlkZWZhdWx0IEZBTFNFCisJTm90IEltcGxlbWVudGVkIFlldC4KKworYWNjZXB0X3NvdXJjZV9yb3V0ZSAtIEJPT0xFQU4KKwlBY2NlcHQgcGFja2V0cyB3aXRoIFNSUiBvcHRpb24uCisJY29uZi9hbGwvYWNjZXB0X3NvdXJjZV9yb3V0ZSBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gYWNjZXB0IHBhY2tldHMKKwl3aXRoIFNSUiBvcHRpb24gb24gdGhlIGludGVyZmFjZQorCWRlZmF1bHQgVFJVRSAocm91dGVyKQorCQlGQUxTRSAoaG9zdCkKKworcnBfZmlsdGVyIC0gQk9PTEVBTgorCTEgLSBkbyBzb3VyY2UgdmFsaWRhdGlvbiBieSByZXZlcnNlZCBwYXRoLCBhcyBzcGVjaWZpZWQgaW4gUkZDMTgxMgorCSAgICBSZWNvbW1lbmRlZCBvcHRpb24gZm9yIHNpbmdsZSBob21lZCBob3N0cyBhbmQgc3R1YiBuZXR3b3JrCisJICAgIHJvdXRlcnMuIENvdWxkIGNhdXNlIHRyb3VibGVzIGZvciBjb21wbGljYXRlZCAobm90IGxvb3AgZnJlZSkKKwkgICAgbmV0d29ya3MgcnVubmluZyBhIHNsb3cgdW5yZWxpYWJsZSBwcm90b2NvbCAoc29ydCBvZiBSSVApLAorCSAgICBvciB1c2luZyBzdGF0aWMgcm91dGVzLgorCisJMCAtIE5vIHNvdXJjZSB2YWxpZGF0aW9uLgorCisJY29uZi9hbGwvcnBfZmlsdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgorCW9uIHRoZSBpbnRlcmZhY2UKKworCURlZmF1bHQgdmFsdWUgaXMgMC4gTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQKKwlpbiBzdGFydHVwIHNjcmlwdHMuCisKK2FycF9maWx0ZXIgLSBCT09MRUFOCisJMSAtIEFsbG93cyB5b3UgdG8gaGF2ZSBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMgb24gdGhlIHNhbWUKKwlzdWJuZXQsIGFuZCBoYXZlIHRoZSBBUlBzIGZvciBlYWNoIGludGVyZmFjZSBiZSBhbnN3ZXJlZAorCWJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBrZXJuZWwgd291bGQgcm91dGUgYSBwYWNrZXQgZnJvbQorCXRoZSBBUlAnZCBJUCBvdXQgdGhhdCBpbnRlcmZhY2UgKHRoZXJlZm9yZSB5b3UgbXVzdCB1c2Ugc291cmNlCisJYmFzZWQgcm91dGluZyBmb3IgdGhpcyB0byB3b3JrKS4gSW4gb3RoZXIgd29yZHMgaXQgYWxsb3dzIGNvbnRyb2wKKwlvZiB3aGljaCBjYXJkcyAodXN1YWxseSAxKSB3aWxsIHJlc3BvbmQgdG8gYW4gYXJwIHJlcXVlc3QuCisKKwkwIC0gKGRlZmF1bHQpIFRoZSBrZXJuZWwgY2FuIHJlc3BvbmQgdG8gYXJwIHJlcXVlc3RzIHdpdGggYWRkcmVzc2VzCisJZnJvbSBvdGhlciBpbnRlcmZhY2VzLiBUaGlzIG1heSBzZWVtIHdyb25nIGJ1dCBpdCB1c3VhbGx5IG1ha2VzCisJc2Vuc2UsIGJlY2F1c2UgaXQgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2Ygc3VjY2Vzc2Z1bCBjb21tdW5pY2F0aW9uLgorCUlQIGFkZHJlc3NlcyBhcmUgb3duZWQgYnkgdGhlIGNvbXBsZXRlIGhvc3Qgb24gTGludXgsIG5vdCBieQorCXBhcnRpY3VsYXIgaW50ZXJmYWNlcy4gT25seSBmb3IgbW9yZSBjb21wbGV4IHNldHVwcyBsaWtlIGxvYWQtCisJYmFsYW5jaW5nLCBkb2VzIHRoaXMgYmVoYXZpb3VyIGNhdXNlIHByb2JsZW1zLgorCisJYXJwX2ZpbHRlciBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vYXJwX2ZpbHRlciBpcyBzZXQgdG8gVFJVRSwKKwlpdCB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCithcnBfYW5ub3VuY2UgLSBJTlRFR0VSCisJRGVmaW5lIGRpZmZlcmVudCByZXN0cmljdGlvbiBsZXZlbHMgZm9yIGFubm91bmNpbmcgdGhlIGxvY2FsCisJc291cmNlIElQIGFkZHJlc3MgZnJvbSBJUCBwYWNrZXRzIGluIEFSUCByZXF1ZXN0cyBzZW50IG9uCisJaW50ZXJmYWNlOgorCTAgLSAoZGVmYXVsdCkgVXNlIGFueSBsb2NhbCBhZGRyZXNzLCBjb25maWd1cmVkIG9uIGFueSBpbnRlcmZhY2UKKwkxIC0gVHJ5IHRvIGF2b2lkIGxvY2FsIGFkZHJlc3NlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHRhcmdldCdzCisJc3VibmV0IGZvciB0aGlzIGludGVyZmFjZS4gVGhpcyBtb2RlIGlzIHVzZWZ1bCB3aGVuIHRhcmdldAorCWhvc3RzIHJlYWNoYWJsZSB2aWEgdGhpcyBpbnRlcmZhY2UgcmVxdWlyZSB0aGUgc291cmNlIElQCisJYWRkcmVzcyBpbiBBUlAgcmVxdWVzdHMgdG8gYmUgcGFydCBvZiB0aGVpciBsb2dpY2FsIG5ldHdvcmsKKwljb25maWd1cmVkIG9uIHRoZSByZWNlaXZpbmcgaW50ZXJmYWNlLiBXaGVuIHdlIGdlbmVyYXRlIHRoZQorCXJlcXVlc3Qgd2Ugd2lsbCBjaGVjayBhbGwgb3VyIHN1Ym5ldHMgdGhhdCBpbmNsdWRlIHRoZQorCXRhcmdldCBJUCBhbmQgd2lsbCBwcmVzZXJ2ZSB0aGUgc291cmNlIGFkZHJlc3MgaWYgaXQgaXMgZnJvbQorCXN1Y2ggc3VibmV0LiBJZiB0aGVyZSBpcyBubyBzdWNoIHN1Ym5ldCB3ZSBzZWxlY3Qgc291cmNlCisJYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciBsZXZlbCAyLgorCTIgLSBBbHdheXMgdXNlIHRoZSBiZXN0IGxvY2FsIGFkZHJlc3MgZm9yIHRoaXMgdGFyZ2V0LgorCUluIHRoaXMgbW9kZSB3ZSBpZ25vcmUgdGhlIHNvdXJjZSBhZGRyZXNzIGluIHRoZSBJUCBwYWNrZXQKKwlhbmQgdHJ5IHRvIHNlbGVjdCBsb2NhbCBhZGRyZXNzIHRoYXQgd2UgcHJlZmVyIGZvciB0YWxrcyB3aXRoCisJdGhlIHRhcmdldCBob3N0LiBTdWNoIGxvY2FsIGFkZHJlc3MgaXMgc2VsZWN0ZWQgYnkgbG9va2luZworCWZvciBwcmltYXJ5IElQIGFkZHJlc3NlcyBvbiBhbGwgb3VyIHN1Ym5ldHMgb24gdGhlIG91dGdvaW5nCisJaW50ZXJmYWNlIHRoYXQgaW5jbHVkZSB0aGUgdGFyZ2V0IElQIGFkZHJlc3MuIElmIG5vIHN1aXRhYmxlCisJbG9jYWwgYWRkcmVzcyBpcyBmb3VuZCB3ZSBzZWxlY3QgdGhlIGZpcnN0IGxvY2FsIGFkZHJlc3MKKwl3ZSBoYXZlIG9uIHRoZSBvdXRnb2luZyBpbnRlcmZhY2Ugb3Igb24gYWxsIG90aGVyIGludGVyZmFjZXMsCisJd2l0aCB0aGUgaG9wZSB3ZSB3aWxsIHJlY2VpdmUgcmVwbHkgZm9yIG91ciByZXF1ZXN0IGFuZAorCWV2ZW4gc29tZXRpbWVzIG5vIG1hdHRlciB0aGUgc291cmNlIElQIGFkZHJlc3Mgd2UgYW5ub3VuY2UuCisKKwlUaGUgbWF4IHZhbHVlIGZyb20gY29uZi97YWxsLGludGVyZmFjZX0vYXJwX2Fubm91bmNlIGlzIHVzZWQuCisKKwlJbmNyZWFzaW5nIHRoZSByZXN0cmljdGlvbiBsZXZlbCBnaXZlcyBtb3JlIGNoYW5jZSBmb3IKKwlyZWNlaXZpbmcgYW5zd2VyIGZyb20gdGhlIHJlc29sdmVkIHRhcmdldCB3aGlsZSBkZWNyZWFzaW5nCisJdGhlIGxldmVsIGFubm91bmNlcyBtb3JlIHZhbGlkIHNlbmRlcidzIGluZm9ybWF0aW9uLgorCithcnBfaWdub3JlIC0gSU5URUdFUgorCURlZmluZSBkaWZmZXJlbnQgbW9kZXMgZm9yIHNlbmRpbmcgcmVwbGllcyBpbiByZXNwb25zZSB0bworCXJlY2VpdmVkIEFSUCByZXF1ZXN0cyB0aGF0IHJlc29sdmUgbG9jYWwgdGFyZ2V0IElQIGFkZHJlc3NlczoKKwkwIC0gKGRlZmF1bHQpOiByZXBseSBmb3IgYW55IGxvY2FsIHRhcmdldCBJUCBhZGRyZXNzLCBjb25maWd1cmVkCisJb24gYW55IGludGVyZmFjZQorCTEgLSByZXBseSBvbmx5IGlmIHRoZSB0YXJnZXQgSVAgYWRkcmVzcyBpcyBsb2NhbCBhZGRyZXNzCisJY29uZmlndXJlZCBvbiB0aGUgaW5jb21pbmcgaW50ZXJmYWNlCisJMiAtIHJlcGx5IG9ubHkgaWYgdGhlIHRhcmdldCBJUCBhZGRyZXNzIGlzIGxvY2FsIGFkZHJlc3MKKwljb25maWd1cmVkIG9uIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgYW5kIGJvdGggd2l0aCB0aGUKKwlzZW5kZXIncyBJUCBhZGRyZXNzIGFyZSBwYXJ0IGZyb20gc2FtZSBzdWJuZXQgb24gdGhpcyBpbnRlcmZhY2UKKwkzIC0gZG8gbm90IHJlcGx5IGZvciBsb2NhbCBhZGRyZXNzZXMgY29uZmlndXJlZCB3aXRoIHNjb3BlIGhvc3QsCisJb25seSByZXNvbHV0aW9ucyBmb3IgZ2xvYmFsIGFuZCBsaW5rIGFkZHJlc3NlcyBhcmUgcmVwbGllZAorCTQtNyAtIHJlc2VydmVkCisJOCAtIGRvIG5vdCByZXBseSBmb3IgYWxsIGxvY2FsIGFkZHJlc3NlcworCisJVGhlIG1heCB2YWx1ZSBmcm9tIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FycF9pZ25vcmUgaXMgdXNlZAorCXdoZW4gQVJQIHJlcXVlc3QgaXMgcmVjZWl2ZWQgb24gdGhlIHtpbnRlcmZhY2V9CisKK2FwcF9zb2xpY2l0IC0gSU5URUdFUgorCVRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9iZXMgdG8gc2VuZCB0byB0aGUgdXNlciBzcGFjZSBBUlAgZGFlbW9uCisJdmlhIG5ldGxpbmsgYmVmb3JlIGRyb3BwaW5nIGJhY2sgdG8gbXVsdGljYXN0IHByb2JlcyAoc2VlCisJbWNhc3Rfc29saWNpdCkuICBEZWZhdWx0cyB0byAwLgorCitkaXNhYmxlX3BvbGljeSAtIEJPT0xFQU4KKwlEaXNhYmxlIElQU0VDIHBvbGljeSAoU1BEKSBmb3IgdGhpcyBpbnRlcmZhY2UKKworZGlzYWJsZV94ZnJtIC0gQk9PTEVBTgorCURpc2FibGUgSVBTRUMgZW5jcnlwdGlvbiBvbiB0aGlzIGludGVyZmFjZSwgd2hhdGV2ZXIgdGhlIHBvbGljeQorCisKKwordGFnIC0gSU5URUdFUgorCUFsbG93cyB5b3UgdG8gd3JpdGUgYSBudW1iZXIsIHdoaWNoIGNhbiBiZSB1c2VkIGFzIHJlcXVpcmVkLgorCURlZmF1bHQgdmFsdWUgaXMgMC4KKworKDEpIEppZmZpZTogaW50ZXJuYWwgdGltZXVuaXQgZm9yIHRoZSBrZXJuZWwuIE9uIHRoZSBpMzg2IDEvMTAwcywgb24gdGhlCitBbHBoYSAxLzEwMjRzLiBTZWUgdGhlIEhaIGRlZmluZSBpbiAvdXNyL2luY2x1ZGUvYXNtL3BhcmFtLmggZm9yIHRoZSBleGFjdAordmFsdWUgb24geW91ciBzeXN0ZW0uIAorCitBbGV4ZXkgS3V6bmV0c292Lgora3V6bmV0QG1zMi5pbnIuYWMucnUKKworVXBkYXRlZCBieToKK0FuZGkgS2xlZW4KK2FrQG11Yy5kZQorTmljb2xhcyBEZWxvbgorZGVsb24ubmljb2xhc0B3YW5hZG9vLmZyCisKKworCisKKy9wcm9jL3N5cy9uZXQvaXB2Ni8qIFZhcmlhYmxlczoKKworSVB2NiBoYXMgbm8gZ2xvYmFsIHZhcmlhYmxlcyBzdWNoIGFzIHRjcF8qLiAgdGNwXyogc2V0dGluZ3MgdW5kZXIgaXB2NC8gYWxzbworYXBwbHkgdG8gSVB2NiBbWFhYP10uCisKK2JpbmR2Nm9ubHkgLSBCT09MRUFOCisJRGVmYXVsdCB2YWx1ZSBmb3IgSVBWNl9WNk9OTFkgc29ja2V0IG9wdGlvbiwKKwl3aGljaCByZXN0cmljdHMgdXNlIG9mIHRoZSBJUHY2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb24gCisJb25seS4KKwkJVFJVRTogZGlzYWJsZSBJUHY0LW1hcHBlZCBhZGRyZXNzIGZlYXR1cmUKKwkJRkFMU0U6IGVuYWJsZSBJUHY0LW1hcHBlZCBhZGRyZXNzIGZlYXR1cmUKKworCURlZmF1bHQ6IEZBTFNFIChhcyBzcGVjaWZpZWQgaW4gUkZDMjU1M2JpcykKKworSVB2NiBGcmFnbWVudGF0aW9uOgorCitpcDZmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUHY2IGZyYWdtZW50cy4gV2hlbiAKKwlpcDZmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKKwl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcDZmcmFnX2xvd190aHJlc2gKKwlpcyByZWFjaGVkLgorCQoraXA2ZnJhZ19sb3dfdGhyZXNoIC0gSU5URUdFUgorCVNlZSBpcDZmcmFnX2hpZ2hfdGhyZXNoCQorCitpcDZmcmFnX3RpbWUgLSBJTlRFR0VSCisJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVB2NiBmcmFnbWVudCBpbiBtZW1vcnkuCisKK2lwNmZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgorCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVB2NiBmcmFnbWVudHMuCisJRGVmYXVsdDogNjAwCisKK2NvbmYvZGVmYXVsdC8qOgorCUNoYW5nZSB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIGRlZmF1bHQgc2V0dGluZ3MuCisKKworY29uZi9hbGwvKjoKKwlDaGFuZ2UgYWxsIHRoZSBpbnRlcmZhY2Utc3BlY2lmaWMgc2V0dGluZ3MuICAKKworCVtYWFg6ICBPdGhlciBzcGVjaWFsIGZlYXR1cmVzIHRoYW4gZm9yd2FyZGluZz9dCisKK2NvbmYvYWxsL2ZvcndhcmRpbmcgLSBCT09MRUFOCisJRW5hYmxlIGdsb2JhbCBJUHY2IGZvcndhcmRpbmcgYmV0d2VlbiBhbGwgaW50ZXJmYWNlcy4gIAorCisJSVB2NCBhbmQgSVB2NiB3b3JrIGRpZmZlcmVudGx5IGhlcmU7IGUuZy4gbmV0ZmlsdGVyIG11c3QgYmUgdXNlZCAKKwl0byBjb250cm9sIHdoaWNoIGludGVyZmFjZXMgbWF5IGZvcndhcmQgcGFja2V0cyBhbmQgd2hpY2ggbm90LgorCisJVGhpcyBhbHNvIHNldHMgYWxsIGludGVyZmFjZXMnIEhvc3QvUm91dGVyIHNldHRpbmcgCisJJ2ZvcndhcmRpbmcnIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuICBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKKwlUaGlzIHJlZmVycmVkIHRvIGFzIGdsb2JhbCBmb3J3YXJkaW5nLgorCitjb25mL2ludGVyZmFjZS8qOgorCUNoYW5nZSBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UuCisKKwlUaGUgZnVuY3Rpb25hbCBiZWhhdmlvdXIgZm9yIGNlcnRhaW4gc2V0dGluZ3MgaXMgZGlmZmVyZW50IAorCWRlcGVuZGluZyBvbiB3aGV0aGVyIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCBvciBub3QuCisKK2FjY2VwdF9yYSAtIEJPT0xFQU4KKwlBY2NlcHQgUm91dGVyIEFkdmVydGlzZW1lbnRzOyBhdXRvY29uZmlndXJlIHVzaW5nIHRoZW0uCisJCisJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQuCisJCQkgICAgZGlzYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLgorCithY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgorCUFjY2VwdCBSZWRpcmVjdHMuCisKKwlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBkaXNhYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQuCisKK2F1dG9jb25mIC0gQk9PTEVBTgorCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIgCisJQWR2ZXJ0aXNlbWVudHMuCisKKwlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGVuYWJsZWQuCisJCQkgICAgZGlzYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGRpc2FibGVkLgorCitkYWRfdHJhbnNtaXRzIC0gSU5URUdFUgorCVRoZSBhbW91bnQgb2YgRHVwbGljYXRlIEFkZHJlc3MgRGV0ZWN0aW9uIHByb2JlcyB0byBzZW5kLgorCURlZmF1bHQ6IDEKKwkKK2ZvcndhcmRpbmcgLSBCT09MRUFOCisJQ29uZmlndXJlIGludGVyZmFjZS1zcGVjaWZpYyBIb3N0L1JvdXRlciBiZWhhdmlvdXIuICAKKworCU5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIGhhdmUgdGhlIHNhbWUgc2V0dGluZyBvbiBhbGwgCisJaW50ZXJmYWNlczsgbWl4ZWQgcm91dGVyL2hvc3Qgc2NlbmFyaW9zIGFyZSByYXRoZXIgdW5jb21tb24uCisKKwlGQUxTRToKKworCUJ5IGRlZmF1bHQsIEhvc3QgYmVoYXZpb3VyIGlzIGFzc3VtZWQuICBUaGlzIG1lYW5zOgorCisJMS4gSXNSb3V0ZXIgZmxhZyBpcyBub3Qgc2V0IGluIE5laWdoYm91ciBBZHZlcnRpc2VtZW50cy4KKwkyLiBSb3V0ZXIgU29saWNpdGF0aW9ucyBhcmUgYmVpbmcgc2VudCB3aGVuIG5lY2Vzc2FyeS4KKwkzLiBJZiBhY2NlcHRfcmEgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSb3V0ZXIgCisJICAgQWR2ZXJ0aXNlbWVudHMgKGFuZCBkbyBhdXRvY29uZmlndXJhdGlvbikuCisJNC4gSWYgYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJlZGlyZWN0cy4KKworCVRSVUU6CisKKwlJZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIFJvdXRlciBiZWhhdmlvdXIgaXMgYXNzdW1lZC4gCisJVGhpcyBtZWFucyBleGFjdGx5IHRoZSByZXZlcnNlIGZyb20gdGhlIGFib3ZlOgorCisJMS4gSXNSb3V0ZXIgZmxhZyBpcyBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgorCTIuIFJvdXRlciBTb2xpY2l0YXRpb25zIGFyZSBub3Qgc2VudC4KKwkzLiBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMgYXJlIGlnbm9yZWQuCisJNC4gUmVkaXJlY3RzIGFyZSBpZ25vcmVkLgorCisJRGVmYXVsdDogRkFMU0UgaWYgZ2xvYmFsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQgKGRlZmF1bHQpLAorCQkgb3RoZXJ3aXNlIFRSVUUuCisKK2hvcF9saW1pdCAtIElOVEVHRVIKKwlEZWZhdWx0IEhvcCBMaW1pdCB0byBzZXQuCisJRGVmYXVsdDogNjQKKworbXR1IC0gSU5URUdFUgorCURlZmF1bHQgTWF4aW11bSBUcmFuc2ZlciBVbml0CisJRGVmYXVsdDogMTI4MCAoSVB2NiByZXF1aXJlZCBtaW5pbXVtKQorCityb3V0ZXJfc29saWNpdGF0aW9uX2RlbGF5IC0gSU5URUdFUgorCU51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYWZ0ZXIgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAKKwliZWZvcmUgc2VuZGluZyBSb3V0ZXIgU29saWNpdGF0aW9ucy4KKwlEZWZhdWx0OiAxCisKK3JvdXRlcl9zb2xpY2l0YXRpb25faW50ZXJ2YWwgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIFJvdXRlciBTb2xpY2l0YXRpb25zLgorCURlZmF1bHQ6IDQKKworcm91dGVyX3NvbGljaXRhdGlvbnMgLSBJTlRFR0VSCisJTnVtYmVyIG9mIFJvdXRlciBTb2xpY2l0YXRpb25zIHRvIHNlbmQgdW50aWwgYXNzdW1pbmcgbm8gCisJcm91dGVycyBhcmUgcHJlc2VudC4KKwlEZWZhdWx0OiAzCisKK3VzZV90ZW1wYWRkciAtIElOVEVHRVIKKwlQcmVmZXJlbmNlIGZvciBQcml2YWN5IEV4dGVuc2lvbnMgKFJGQzMwNDEpLgorCSAgPD0gMCA6IGRpc2FibGUgUHJpdmFjeSBFeHRlbnNpb25zCisJICA9PSAxIDogZW5hYmxlIFByaXZhY3kgRXh0ZW5zaW9ucywgYnV0IHByZWZlciBwdWJsaWMKKwkgICAgICAgICBhZGRyZXNzZXMgb3ZlciB0ZW1wb3JhcnkgYWRkcmVzc2VzLgorCSAgPiAgMSA6IGVuYWJsZSBQcml2YWN5IEV4dGVuc2lvbnMgYW5kIHByZWZlciB0ZW1wb3JhcnkKKwkgICAgICAgICBhZGRyZXNzZXMgb3ZlciBwdWJsaWMgYWRkcmVzc2VzLgorCURlZmF1bHQ6ICAwIChmb3IgbW9zdCBkZXZpY2VzKQorCQkgLTEgKGZvciBwb2ludC10by1wb2ludCBkZXZpY2VzIGFuZCBsb29wYmFjayBkZXZpY2VzKQorCit0ZW1wX3ZhbGlkX2xmdCAtIElOVEVHRVIKKwl2YWxpZCBsaWZldGltZSAoaW4gc2Vjb25kcykgZm9yIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJRGVmYXVsdDogNjA0ODAwICg3IGRheXMpCisKK3RlbXBfcHJlZmVyZWRfbGZ0IC0gSU5URUdFUgorCVByZWZlcnJlZCBsaWZldGltZSAoaW4gc2Vjb25kcykgZm9yIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJRGVmYXVsdDogODY0MDAgKDEgZGF5KQorCittYXhfZGVzeW5jX2ZhY3RvciAtIElOVEVHRVIKKwlNYXhpbXVtIHZhbHVlIGZvciBERVNZTkNfRkFDVE9SLCB3aGljaCBpcyBhIHJhbmRvbSB2YWx1ZQorCXRoYXQgZW5zdXJlcyB0aGF0IGNsaWVudHMgZG9uJ3Qgc3luY2hyb25pemUgd2l0aCBlYWNoIAorCW90aGVyIGFuZCBnZW5lcmF0ZSBuZXcgYWRkcmVzc2VzIGF0IGV4YWN0bHkgdGhlIHNhbWUgdGltZS4KKwl2YWx1ZSBpcyBpbiBzZWNvbmRzLgorCURlZmF1bHQ6IDYwMAorCQorcmVnZW5fbWF4X3JldHJ5IC0gSU5URUdFUgorCU51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgZ2l2ZSB1cCBhdHRlbXB0aW5nIHRvIGdlbmVyYXRlCisJdmFsaWQgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiA1CisKK21heF9hZGRyZXNzZXMgLSBJTlRFR0VSCisJTnVtYmVyIG9mIG1heGltdW0gYWRkcmVzc2VzIHBlciBpbnRlcmZhY2UuICAwIGRpc2FibGVzIGxpbWl0YXRpb24uCisJSXQgaXMgcmVjb21tZW5kZWQgbm90IHNldCB0b28gbGFyZ2UgdmFsdWUgKG9yIDApIGJlY2F1c2UgaXQgd291bGQgCisJYmUgdG9vIGVhc3kgd2F5IHRvIGNyYXNoIGtlcm5lbCB0byBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YgCisJYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzLgorCURlZmF1bHQ6IDE2CisKK2ljbXAvKjoKK3JhdGVsaW1pdCAtIElOVEVHRVIKKwlMaW1pdCB0aGUgbWF4aW1hbCByYXRlcyBmb3Igc2VuZGluZyBJQ01QdjYgcGFja2V0cy4KKwkwIHRvIGRpc2FibGUgYW55IGxpbWl0aW5nLCBvdGhlcndpc2UgdGhlIG1heGltYWwgcmF0ZSBpbiBqaWZmaWVzKDEpCisJRGVmYXVsdDogMTAwCisKKworSVB2NiBVcGRhdGUgYnk6CitQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPgorWU9TSElGVUpJIEhpZGVha2kgLyBVU0FHSSBQcm9qZWN0IDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKworCisvcHJvYy9zeXMvbmV0L2JyaWRnZS8qIFZhcmlhYmxlczoKKworYnJpZGdlLW5mLWNhbGwtYXJwdGFibGVzIC0gQk9PTEVBTgorCTEgOiBwYXNzIGJyaWRnZWQgQVJQIHRyYWZmaWMgdG8gYXJwdGFibGVzJyBGT1JXQVJEIGNoYWluLgorCTAgOiBkaXNhYmxlIHRoaXMuCisJRGVmYXVsdDogMQorCiticmlkZ2UtbmYtY2FsbC1pcHRhYmxlcyAtIEJPT0xFQU4KKwkxIDogcGFzcyBicmlkZ2VkIElQdjQgdHJhZmZpYyB0byBpcHRhYmxlcycgY2hhaW5zLgorCTAgOiBkaXNhYmxlIHRoaXMuCisJRGVmYXVsdDogMQorCiticmlkZ2UtbmYtY2FsbC1pcDZ0YWJsZXMgLSBCT09MRUFOCisJMSA6IHBhc3MgYnJpZGdlZCBJUHY2IHRyYWZmaWMgdG8gaXA2dGFibGVzJyBjaGFpbnMuCisJMCA6IGRpc2FibGUgdGhpcy4KKwlEZWZhdWx0OiAxCisKK2JyaWRnZS1uZi1maWx0ZXItdmxhbi10YWdnZWQgLSBCT09MRUFOCisJMSA6IHBhc3MgYnJpZGdlZCB2bGFuLXRhZ2dlZCBBUlAvSVAgdHJhZmZpYyB0byBhcnB0YWJsZXMvaXB0YWJsZXMuCisJMCA6IGRpc2FibGUgdGhpcy4KKwlEZWZhdWx0OiAxCisKKworVU5ET0NVTUVOVEVEOgorCitkZXZfd2VpZ2h0IEZJWE1FCitkaXNjb3Zlcnlfc2xvdHMgRklYTUUKK2Rpc2NvdmVyeV90aW1lb3V0IEZJWE1FCitmYXN0X3BvbGxfaW5jcmVhc2UgRklYTUUKK2lwNl9xdWV1ZV9tYXhsZW4gRklYTUUKK2xhcF9rZWVwYWxpdmVfdGltZSBGSVhNRQorbG9fY29uZyBGSVhNRQorbWF4X2JhdWRfcmF0ZSBGSVhNRQorbWF4X2RncmFtX3FsZW4gRklYTUUKK21heF9ub3JlcGx5X3RpbWUgRklYTUUKK21heF90eF9kYXRhX3NpemUgRklYTUUKK21heF90eF93aW5kb3cgRklYTUUKK21pbl90eF90dXJuX3RpbWUgRklYTUUKK21vZF9jb25nIEZJWE1FCitub19jb25nIEZJWE1FCitub19jb25nX3RocmVzaCBGSVhNRQorc2xvdF90aW1lb3V0IEZJWE1FCit3YXJuX25vcmVwbHlfdGltZSBGSVhNRQorCiskSWQ6IGlwLXN5c2N0bC50eHQsdiAxLjIwIDIwMDEvMTIvMTMgMDk6MDA6MTggZGF2ZW0gRXhwICQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcF9keW5hZGRyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcF9keW5hZGRyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYzYzEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwX2R5bmFkZHIudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0lQIGR5bmFtaWMgYWRkcmVzcyBoYWNrLXBvcnQgdjAuMDMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoaXMgc3R1ZmYgYWxsb3dzIGRpYWxkIE9ORVNIT1QgY29ubmVjdGlvbnMgdG8gZ2V0IGVzdGFibGlzaGVkIGJ5CitkeW5hbWljYWxseSBjaGFuZ2luZyBwYWNrZXQgc291cmNlIGFkZHJlc3MgKGFuZCBzb2NrZXQncyBpZiBsb2NhbCBwcm9jcykuCitJdCBpcyBpbXBsZW1lbnRlZCBmb3IgVENQIGRpYWxkLWJveCBjb25uZWN0aW9ucygxKSBhbmQgSVBfTUFTUXVlcmFkaW5nKDIpLgorCitJZiBlbmFibGVkWypdIGFuZCBmb3J3YXJkaW5nIGludGVyZmFjZSBoYXMgY2hhbmdlZDoKKyAgMSkgIFNvY2tldCAoYW5kIHBhY2tldCkgc291cmNlIGFkZHJlc3MgaXMgcmV3cml0dGVuIE9OIFJFVFJBTlNNSVNTSU9OUworICAgICAgd2hpbGUgaW4gU1lOX1NFTlQgc3RhdGUgKGRpYWxkLWJveCBwcm9jZXNzZXMpLgorICAyKSAgT3V0LWJvdW5kZWQgTUFTUXVlcmFkZWQgc291cmNlIGFkZHJlc3MgY2hhbmdlcyBPTiBPVVRQVVQgKHdoZW4KKyAgICAgIGludGVybmFsIGhvc3QgZG9lcyByZXRyYW5zbWlzc2lvbikgdW50aWwgYSBwYWNrZXQgZnJvbSBvdXRzaWRlIGlzCisgICAgICByZWNlaXZlZCBieSB0aGUgdHVubmVsLgorCitUaGlzIGlzIHNwZWNpYWxseSBoZWxwZnVsIGZvciBhdXRvIGRpYWx1cCBsaW5rcyAoZGlhbGQpLCB3aGVyZSB0aGUKK2BgYWN0dWFsJycgb3V0Z29pbmcgYWRkcmVzcyBpcyB1bmtub3duIGF0IHRoZSBtb21lbnQgdGhlIGxpbmsgaXMKK2dvaW5nIHVwLiBTbywgdGhlICpzYW1lKiAobG9jYWwgQU5EIG1hc3F1ZXJhZGVkKSBjb25uZWN0aW9ucyByZXF1ZXN0cyB0aGF0CiticmluZyB0aGUgbGluayB1cCB3aWxsIGJlIGFibGUgdG8gZ2V0IGVzdGFibGlzaGVkLgorCitbKl0gQXQgYm9vdCwgYnkgZGVmYXVsdCBubyBhZGRyZXNzIHJld3JpdGluZyBpcyBhdHRlbXB0ZWQuIAorICBUbyBlbmFibGU6CisgICAgICMgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2R5bmFkZHIKKyAgVG8gZW5hYmxlIHZlcmJvc2UgbW9kZToKKyAgICAgIyBlY2hvIDIgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZHluYWRkcgorICBUbyBkaXNhYmxlIChkZWZhdWx0KQorICAgICAjIGVjaG8gMCA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9keW5hZGRyCisKK0Vuam95IQorCistLSBKdWFuam8gIDxqamNpYXJsYUByYWl6LnVuY3UuZWR1LmFyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGRkcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxYTU1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGRkcC50eHQKQEAgLTAsMCArMSw3OCBAQAorVGV4dCBmaWxlIGZvciBpcGRkcC5jOgorCUFwcGxlVGFsay1JUCBEZWNhcHN1bGF0aW9uIGFuZCBBcHBsZVRhbGstSVAgRW5jYXBzdWxhdGlvbgorCitUaGlzIHRleHQgZmlsZSBpcyB3cml0dGVuIGJ5IEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK0FwcGxlVGFsay1JUCAoSVBERFApIGlzIHRoZSBtZXRob2QgY29tcHV0ZXJzIGNvbm5lY3RlZCB0byBBcHBsZVRhbGsKK25ldHdvcmtzIGNhbiB1c2UgdG8gY29tbXVuaWNhdGUgdmlhIElQLiBBcHBsZVRhbGstSVAgaXMgc2ltcGx5IElQIGRhdGFncmFtcworaW5zaWRlIEFwcGxlVGFsayBwYWNrZXRzLgorCitUaHJvdWdoIHRoaXMgZHJpdmVyIHlvdSBjYW4gZWl0aGVyIGFsbG93IHlvdXIgTGludXggYm94IHRvIGNvbW11bmljYXRlCitJUCBvdmVyIGFuIEFwcGxlVGFsayBuZXR3b3JrIG9yIHlvdSBjYW4gcHJvdmlkZSBJUCBnYXRld2F5aW5nIGZ1bmN0aW9ucworZm9yIHlvdXIgQXBwbGVUYWxrIHVzZXJzLgorCitZb3UgY2FuIGN1cnJlbnRseSBlbmNhcHN1bGF0ZSBvciBkZWNhcHN1bGF0ZSBBcHBsZVRhbGstSVAgb24gTG9jYWxUYWxrLAorRXRoZXJUYWxrIGFuZCBQUFBUYWxrLiBUaGUgb25seSBsaW1pdCBvbiB0aGUgcHJvdG9jb2wgaXMgdGhhdCBvZiB3aGF0CitrZXJuZWwgQXBwbGVUYWxrIGxheWVyIGFuZCBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCisKK0VhY2ggbW9kZSByZXF1aXJlcyBpdHMgb3duIHVzZXIgc3BhY2Ugc29mdHdhcmUuCisKK0NvbXBpbGluZyBBcHBsZVRhbGstSVAgRGVjYXBzdWxhdGlvbi9FbmNhcHN1bGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FwcGxlVGFsay1JUCBkZWNhcHN1bGF0aW9uIG5lZWRzIHRvIGJlIGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwuIFlvdQord2lsbCBuZWVkIHRvIHR1cm4gb24gQXBwbGVUYWxrLUlQIGRyaXZlciBzdXBwb3J0LiBUaGVuIHlvdSB3aWxsIG5lZWQgdG8KK3NlbGVjdCBPTkUgb2YgdGhlIHR3byBvcHRpb25zOyBJUCB0byBBcHBsZVRhbGstSVAgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IG9yCitBcHBsZVRhbGstSVAgdG8gSVAgZGVjYXBzdWxhdGlvbiBzdXBwb3J0LiBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyCitzdGF0aWNhbGx5IHlvdSB3aWxsIG9ubHkgYmUgYWJsZSB0byB1c2UgdGhlIGRyaXZlciBmb3IgdGhlIGZ1bmN0aW9uIHlvdSBoYXZlCitlbmFibGVkIGluIHRoZSBrZXJuZWwuIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgeW91IGNhbgorc2VsZWN0IHdoYXQgbW9kZSB5b3Ugd2FudCBpdCB0byBydW4gaW4gdmlhIGEgbW9kdWxlIGxvYWRpbmcgcGFyYW0uCitpcGRkcF9tb2RlPTEgZm9yIEFwcGxlVGFsay1JUCBlbmNhcHN1bGF0aW9uIGFuZCBpcGRkcF9tb2RlPTIgZm9yCitBcHBsZVRhbGstSVAgdG8gSVAgZGVjYXBzdWxhdGlvbi4KKworQmFzaWMgaW5zdHJ1Y3Rpb25zIGZvciB1c2VyIHNwYWNlIHRvb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gZW5hYmxlIEFwcGxlVGFsay1JUCBkZWNhcHN1bGF0aW9uL2VuY2Fwc3VsYXRpb24geW91IHdpbGwgbmVlZCB0aGUgCitwcm9wZXIgdG9vbHMuIFlvdSBjYW4gZ2V0IHRoZSB0b29scyBmb3IgZGVjYXBzdWxhdGlvbiBmcm9tCitodHRwOi8vc3BhY3MxLnNwYWNzLmsxMi53aS51cy9+anNjaGxzdC9pbmRleC5odG1sIGFuZCBmb3IgZW5jYXBzdWxhdGlvbgorZnJvbSBodHRwOi8vd3d3Lm1hdGhzLnVubS5lZHUvfmJyYWRmb3JkL2x0cGMuaHRtbAorCitJIHdpbGwgYnJpZWZseSBkZXNjcmliZSB0aGUgb3BlcmF0aW9uIG9mIHRoZSB0b29scywgYnV0IHlvdSB3aWxsCituZWVkIHRvIGNvbnN1bHQgdGhlIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBzZXQgb2YgdG9vbHMuCisKK0RlY2Fwc3VsYXRpb24gLSBZb3Ugd2lsbCBuZWVkIHRvIGRvd25sb2FkIGEgc29mdHdhcmUgcGFja2FnZSBjYWxsZWQKK01hY0dhdGUuIEluIHRoaXMgZGlzdHJpYnV0aW9uIHRoZXJlIHdpbGwgYmUgYSB0b29sIGNhbGxlZCBNYWNSb3V0ZQord2hpY2ggZW5hYmxlcyB5b3UgdG8gYWRkIHJvdXRlcyB0byB0aGUga2VybmVsIGZvciB5b3VyIE1hY3MgYnkgaGFuZC4KK0Fsc28gdGhlIHRvb2wgTWFjUmVnR2F0ZVdheSBpcyBpbmNsdWRlZCB0byByZWdpc3RlciB0aGUKK3Byb3BlciBJUCBHYXRld2F5IGFuZCBJUCBhZGRyZXNzZXMgZm9yIHlvdXIgbWFjaGluZS4gSW5jbHVkZWQgaW4gdGhpcworZGlzdHJpYnV0aW9uIGlzIGEgcGF0Y2ggdG8gbmV0YXRhbGstMS40YjIrYXN1bjIuMGExNy4yIChhdmFpbGFibGUgZnJvbQorZnRwLnUud2FzaGluZ3Rvbi5lZHUvcHViL3VzZXItc3VwcG9ydGVkL2FzdW4vKSB0aGlzIHBhdGNoIGlzIG9wdGlvbmFsCitidXQgaXQgYWxsb3dzIGF1dG9tYXRpYyBhZGRpbmcgYW5kIGRlbGV0aW5nIG9mIHJvdXRlcyBmb3IgTWFjcy4gKEhhbmR5Citmb3IgbG9jYXRpb25zIHdpdGggbGFyZ2UgTWFjIGluc3RhbGxhdGlvbnMpCisKK0VuY2Fwc3VsYXRpb24gLSBZb3Ugd2lsbCBuZWVkIHRvIGRvd25sb2FkIGEgc29mdHdhcmUgZGFlbW9uIGNhbGxlZCBpcGRkcGQuCitUaGlzIHNvZnR3YXJlIGV4cGVjdHMgdGhlcmUgdG8gYmUgYW4gQXBwbGVUYWxrLUlQIGdhdGV3YXkgb24gdGhlIG5ldHdvcmsuCitZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gYWRkIHRoZSBwcm9wZXIgcm91dGVzIHRvIHJvdXRlIHlvdXIgTGludXggYm94J3MgSVAKK3RyYWZmaWMgb3V0IHRoZSBpcGRkcCBpbnRlcmZhY2UuCisKK0NvbW1vbiBVc2VzIG9mIGlwZGRwLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09mIGNvdXJzZSBBcHBsZVRhbGstSVAgZGVjYXBzdWxhdGlvbiBhbmQgZW5jYXBzdWxhdGlvbiwgYnV0IHNwZWNpZmljYWxseQorZGVjYXBzdWxhdGlvbiBpcyBiZWluZyB1c2VkIG1vc3QgZm9yIGNvbm5lY3RpbmcgTG9jYWxUYWxrIG5ldHdvcmtzIHRvCitJUCBuZXR3b3Jrcy4gQWx0aG91Z2ggaXQgaGFzIGJlZW4gdXNlZCBvbiBFdGhlclRhbGsgbmV0d29ya3MgdG8gYWxsb3cKK01hY3MgdGhhdCBhcmUgb25seSBhYmxlIHRvIHR1bm5lbCBJUCBvdmVyIEV0aGVyVGFsay4KKworRW5jYXBzdWxhdGlvbiBoYXMgYmVlbiB1c2VkIHRvIGFsbG93IGEgTGludXggYm94IHN0dWNrIG9uIGEgTG9jYWxUYWxrCituZXR3b3JrIHRvIHVzZSBJUC4gSXQgc2hvdWxkIHdvcmsgZXF1YWxseSB3ZWxsIGlmIHlvdSBhcmUgc3R1Y2sgb24gYW4KK0V0aGVyVGFsayBvbmx5IG5ldHdvcmsuCisKK0Z1cnRoZXIgQXNzaXN0YW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiBjb250YWN0IG1lIChKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPikgd2l0aCBhbnkKK3F1ZXN0aW9ucyByZWdhcmRpbmcgZGVjYXBzdWxhdGlvbiBvciBlbmNhcHN1bGF0aW9uLiBCcmFkZm9yZCBXLiBKb2huc29uCis8am9obnMzOTNAbWFyb29uLnRjLnVtbi5lZHU+IG9yaWdpbmFsbHkgd3JvdGUgdGhlIGlwZGRwLmMgZHJpdmVyIGZvciBJUAorZW5jYXBzdWxhdGlvbiBpbiBBcHBsZVRhbGsuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBoYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGhhc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Y2NiODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBoYXNlLnR4dApAQCAtMCwwICsxLDE1OCBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEIE1FIEZJU1JUCisJCSAgQVRNIChpKUNoaXAgSUEgTGludXggRHJpdmVyIFNvdXJjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIFJlYWQgVGhpcyBCZWZvcmUgWW91IEJlZ2luIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIFJFQURNRSBmaWxlIGZvciB0aGUgSW50ZXJwaGFzZSBQQ0kgQVRNIChpKUNoaXAgSUEgTGludXggZHJpdmVyIAorc291cmNlIHJlbGVhc2UuCisKK1RoZSBmZWF0dXJlcyBhbmQgbGltaXRhdGlvbnMgb2YgdGhpcyBkcml2ZXIgYXJlIGFzIGZvbGxvd3M6CisgICAgLSBBIHNpbmdsZSBWUEkgKFZQSSB2YWx1ZSBvZiAwKSBpcyBzdXBwb3J0ZWQuCisgICAgLSBTdXBwb3J0cyA0SyBWQ3MgZm9yIHRoZSBzZXJ2ZXIgYm9hcmQgKHdpdGggNTEySyBjb250cm9sIG1lbW9yeSkgYW5kIDFLIAorICAgICAgVkNzIGZvciB0aGUgY2xpZW50IGJvYXJkICh3aXRoIDEyOEsgY29udHJvbCBtZW1vcnkpLgorICAgIC0gVUJSLCBBQlIgYW5kIENCUiBzZXJ2aWNlIGNhdGVnb3JpZXMgYXJlIHN1cHBvcnRlZC4KKyAgICAtIE9ubHkgQUFMNSBpcyBzdXBwb3J0ZWQuIAorICAgIC0gU3VwcG9ydHMgc2V0dGluZyBvZiBQQ1Igb24gdGhlIFZDcy4gCisgICAgLSBNdWx0aXBsZSBhZGFwdGVycyBpbiBhIHN5c3RlbSBhcmUgc3VwcG9ydGVkLgorICAgIC0gQWxsIHZhcmlhbnRzIG9mIEludGVycGhhc2UgQVRNIFBDSSAoaSlDaGlwIGFkYXB0ZXIgY2FyZHMgYXJlIHN1cHBvcnRlZCwgCisgICAgICBpbmNsdWRpbmcgeDU3NSAoT0MzLCBjb250cm9sIG1lbW9yeSAxMjhLICwgNTEySyBhbmQgcGFja2V0IG1lbW9yeSAxMjhLLCAKKyAgICAgIDUxMksgYW5kIDFNKSwgeDUyNSAoVVRQMjUpIGFuZCB4NTMxIChEUzMgYW5kIEUzKS4gU2VlIAorICAgICAgICAgICBodHRwOi8vd3d3LmlwaGFzZS5jb20vcHJvZHVjdHMvQ2xhc3NTaGVldC5jZm0/Q2xhc3NJRD1BVE0gCisgICAgICBmb3IgZGV0YWlscy4KKyAgICAtIE9ubHkgeDg2IHBsYXRmb3JtcyBhcmUgc3VwcG9ydGVkLgorICAgIC0gU01QIGlzIHN1cHBvcnRlZC4KKworCitCZWZvcmUgWW91IFN0YXJ0CistLS0tLS0tLS0tLS0tLS0tIAorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKKzEuIEluc3RhbGxpbmcgdGhlIGFkYXB0ZXJzIGluIHRoZSBzeXN0ZW0KKyAgIFRvIGluc3RhbGwgdGhlIEFUTSBhZGFwdGVycyBpbiB0aGUgc3lzdGVtLCBmb2xsb3cgdGhlIHN0ZXBzIGJlbG93LgorICAgICAgIGEuIExvZ2luIGFzIHJvb3QuCisgICAgICAgYi4gU2h1dCBkb3duIHRoZSBzeXN0ZW0gYW5kIHBvd2VyIG9mZiB0aGUgc3lzdGVtLgorICAgICAgIGMuIEluc3RhbGwgb25lIG9yIG1vcmUgQVRNIGFkYXB0ZXJzIGluIHRoZSBzeXN0ZW0uCisgICAgICAgZC4gQ29ubmVjdCBlYWNoIGFkYXB0ZXIgdG8gYSBwb3J0IG9uIGFuIEFUTSBzd2l0Y2guIFRoZSBncmVlbiAnTGluaycgCisgICAgICAgICAgTEVEIG9uIHRoZSBmcm9udCBwYW5lbCBvZiB0aGUgYWRhcHRlciB3aWxsIGJlIG9uIGlmIHRoZSBhZGFwdGVyIGlzIAorICAgICAgICAgIGNvbm5lY3RlZCB0byB0aGUgc3dpdGNoIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBwb3dlcmVkIHVwLgorICAgICAgIGUuIFBvd2VyIG9uIGFuZCBib290IHRoZSBzeXN0ZW0uCisKKzIuIFsgUmVtb3ZlZCBdCisKKzMuIFJlYnVpbGQga2VybmVsIHdpdGggQUJSIHN1cHBvcnQKKyAgIFsgYS4gYW5kIGIuIHJlbW92ZWQgXQorICAgIGMuIFJlY29uZmlndXJlIHRoZSBrZXJuZWwsIGNob29zZSB0aGUgSW50ZXJwaGFzZSBpYSBkcml2ZXIgdGhyb3VnaCAibWFrZSAKKyAgICAgICBtZW51Y29uZmlnIiBvciAibWFrZSB4Y29uZmlnIi4KKyAgICBkLiBSZWJ1aWxkIHRoZSBrZXJuZWwsIGxvYWRhYmxlIG1vZHVsZXMgYW5kIHRoZSBhdG0gdG9vbHMuIAorICAgIGUuIEluc3RhbGwgdGhlIG5ldyBidWlsdCBrZXJuZWwgYW5kIG1vZHVsZXMgYW5kIHJlYm9vdC4KKworNC4gTG9hZCB0aGUgYWRhcHRlciBoYXJkd2FyZSBkcml2ZXIgKGlhIGRyaXZlcikgaWYgaXQgaXMgYnVpbHQgYXMgYSBtb2R1bGUKKyAgICAgICBhLiBMb2dpbiBhcyByb290LgorICAgICAgIGIuIENoYW5nZSBkaXJlY3RvcnkgdG8gL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vYXRtLgorICAgICAgIGMuIFJ1biAiaW5zbW9kIHN1bmkubztpbnNtb2QgaXBoYXNlLm8iCisJICBUaGUgeWVsbG93ICdzdGF0dXMnIExFRCBvbiB0aGUgZnJvbnQgcGFuZWwgb2YgdGhlIGFkYXB0ZXIgd2lsbCBibGluayAKKyAgICAgICAgICB3aGlsZSB0aGUgZHJpdmVyIGlzIGxvYWRlZCBpbiB0aGUgc3lzdGVtLgorICAgICAgIGQuIFRvIHZlcmlmeSB0aGF0IHRoZSAnaWEnIGRyaXZlciBpcyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCBydW4gdGhlIAorICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5kOgorCisgICAgICAgICAgICAgIGNhdCAvcHJvYy9hdG0vZGV2aWNlcworCisgICAgICAgICAgSWYgdGhlIGRyaXZlciBpcyBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIHdpbGwgCisgICAgICAgICAgYmUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGxpbmVzOgorCisgICAgICAgICAgICAgIEl0ZiBUeXBlICAgIEVTSS8iTUFDImFkZHIgQUFMKFRYLGVycixSWCxlcnIsZHJvcCkgLi4uCisgICAgICAgICAgICAgIDAgICBpYSAgICAgIHh4eHh4eHh4eCAgMCAoIDAgMCAwIDAgMCApICA1ICggMCAwIDAgMCAwICkKKworICAgICAgICAgIFlvdSBjYW4gYWxzbyBjaGVjayB0aGUgc3lzdGVtIGxvZyBmaWxlIC92YXIvbG9nL21lc3NhZ2VzIGZvciBtZXNzYWdlcworICAgICAgICAgIHJlbGF0ZWQgdG8gdGhlIEFUTSBkcml2ZXIuCisKKzUuIElhIERyaXZlciBDb25maWd1cmF0aW9uIAorCis1LjEgQ29uZmlndXJhdGlvbiBvZiBhZGFwdGVyIGJ1ZmZlcnMKKyAgICBUaGUgKGkpQ2hpcCBib2FyZHMgaGF2ZSAzIGRpZmZlcmVudCBwYWNrZXQgUkFNIHNpemUgdmFyaWFudHM6IDEyOEssIDUxMksgYW5kCisgICAgMU0uIFRoZSBSQU0gc2l6ZSBkZWNpZGVzIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbmQgYnVmZmVyIHNpemUuIFRoZSBkZWZhdWx0IAorICAgIHNpemUgYW5kIG51bWJlciBvZiBidWZmZXJzIGFyZSBzZXQgYXMgZm9sbG93aW5nOiAKKworICAgICAgICAgIFRvdG9sICAgIFJ4IFJBTSAgIFR4IFJBTSAgIFJ4IEJ1ZiAgIFR4IEJ1ZiAgIFJ4IGJ1ZiAgIFR4IGJ1ZgorICAgICAgICAgUkFNIHNpemUgICBzaXplICAgICBzaXplICAgICBzaXplICAgICBzaXplICAgICAgY250ICAgICAgY250CisgICAgICAgICAtLS0tLS0tLSAgLS0tLS0tICAgLS0tLS0tICAgLS0tLS0tICAgLS0tLS0tICAgLS0tLS0tICAgLS0tLS0tCisgICAgICAgICAgIDEyOEsgICAgICA2NEsgICAgICA2NEsgICAgICAxMEsgICAgICAxMEsgICAgICAgNiAgICAgICAgNgorICAgICAgICAgICA1MTJLICAgICAyNTZLICAgICAyNTZLICAgICAgMTBLICAgICAgMTBLICAgICAgMjUgICAgICAgMjUKKyAgICAgICAgICAgICAxTSAgICAgNTEySyAgICAgNTEySyAgICAgIDEwSyAgICAgIDEwSyAgICAgIDUxICAgICAgIDUxCisKKyAgICAgICBUaGVzZSBzZXR0aW5nIHNob3VsZCB3b3JrIHdlbGwgaW4gbW9zdCBlbnZpcm9ubWVudHMsIGJ1dCBjYW4gYmUKKyAgICAgICBjaGFuZ2VkIGJ5IHR5cGluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IAorIAorICAgICAgICAgICBpbnNtb2QgPElBX0RJUj4vaWEubyBJQV9SWF9CVUY9PFJYX0NOVD4gSUFfUlhfQlVGX1NaPTxSWF9TSVpFPiBcCisgICAgICAgICAgICAgICAgICAgSUFfVFhfQlVGPTxUWF9DTlQ+IElBX1RYX0JVRl9TWj08VFhfU0laRT4gCisgICAgICAgV2hlcmU6CisgICAgICAgICAgICBSWF9DTlQgPSBudW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJzIGluIHRoZSByYW5nZSAoMS0xMjgpCisgICAgICAgICAgICBSWF9TSVpFID0gc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlIHJhbmdlICg0OC02NEspCisgICAgICAgICAgICBUWF9DTlQgPSBudW1iZXIgb2YgdHJhbnNtaXQgYnVmZmVycyBpbiB0aGUgcmFuZ2UgKDEtMTI4KQorICAgICAgICAgICAgVFhfU0laRSA9IHNpemUgb2YgdHJhbnNtaXQgYnVmZmVycyBpbiB0aGUgcmFuZ2UgKDQ4LTY0SykKKworICAgICAgICAgICAgMS4gVHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuCisgICAgICAgICAgICAyLiBDYXJlIHNob3VsZCBiZSB0YWtlbiBzbyB0aGF0IHRoZSBtZW1vcnkgcmVxdWlyZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVycyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICAgICAgICAgICB0b3RhbCBhZGFwdGVyIHBhY2tldCBtZW1vcnkuICAgCisKKzUuMiBUdXJuIG9uIGlhIGRlYnVnIHRyYWNlCisKKyAgICBXaGVuIHRoZSBpYSBkcml2ZXIgaXMgYnVpbHQgd2l0aCB0aGUgQ09ORklHX0FUTV9JQV9ERUJVRyBmbGFnLCB0aGUgZHJpdmVyIAorICAgIGNhbiBwcm92aWRlIG1vcmUgZGVidWcgdHJhY2UgaWYgbmVlZGVkLiBUaGVyZSBpcyBhIGJpdCBtYXNrIHZhcmlhYmxlLCAKKyAgICBJQURlYnVnRmxhZywgd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCBvZiB0aGUgdHJhY2VzLiBZb3UgY2FuIGZpbmQgdGhlIGJpdCAKKyAgICBtYXAgb2YgdGhlIElBRGVidWdGbGFnIGluIGlwaGFzZS5oLiAKKyAgICBUaGUgZGVidWcgdHJhY2UgY2FuIGJlIHR1cm4gb24gdGhyb3VnaCB0aGUgaW5zbW9kIGNvbW1hbmQgbGluZSBvcHRpb24sIGZvciAKKyAgICBleGFtcGxlLCAiaW5zbW9kIGlwaGFzZS5vIElBRGVidWdGbGFnPTB4ZmZmZmZmZmYiIGNhbiB0dXJuIG9uIGFsbCB0aGUgZGVidWcgCisgICAgdHJhY2VzIHRvZ2V0aGVyIHdpdGggbG9hZGluZyB0aGUgZHJpdmVyLgorCis2LiBJYSBEcml2ZXIgVGVzdCBVc2luZyB0dGNwX2F0bSBhbmQgUFZDCisKKyAgIEZvciB0aGUgUFZDIHNldHVwLCB0aGUgdGVzdCBtYWNoaW5lcyBjYW4gZWl0aGVyIGJlIGNvbm5lY3RlZCBiYWNrLXRvLWJhY2sgb3IgCisgICB0aHJvdWdoIGEgc3dpdGNoLiBJZiBjb25uZWN0ZWQgdGhyb3VnaCB0aGUgc3dpdGNoLCB0aGUgc3dpdGNoIG11c3QgYmUgCisgICBjb25maWd1cmVkIGZvciB0aGUgUFZDKHMpLgorCisgICBhLiBGb3IgVUJSIHRlc3Q6CisgICAgICBBdCB0aGUgdGVzdCBtYWNoaW5lIGludGVuZGVkIHRvIHJlY2VpdmUgZGF0YSwgdHlwZToKKyAgICAgICAgIHR0Y3BfYXRtIC1yIC1hIC1zIDAuMTAwIAorICAgICAgQXQgdGhlIG90aGVyIHRlc3QgbWFjaGluZSwgdHlwZToKKyAgICAgICAgIHR0Y3BfYXRtIC10IC1hIC1zIDAuMTAwIC1uIDEwMDAwCisgICAgICBSdW4gInR0Y3BfYXRtIC1oIiB0byBkaXNwbGF5IG1vcmUgb3B0aW9ucyBvZiB0aGUgdHRjcF9hdG0gdG9vbC4KKyAgIGIuIEZvciBBQlIgdGVzdDoKKyAgICAgIEl0IGlzIHRoZSBzYW1lIGFzIHRoZSBVQlIgdGVzdGluZywgYnV0IHdpdGggYW4gZXh0cmEgY29tbWFuZCBvcHRpb246CisgICAgICAgICAtUGFicjptYXhfcGNyPTx4eHg+CisgICAgICAgICB3aGVyZToKKyAgICAgICAgICAgICB4eHggPSB0aGUgbWF4aW11bSBwZWFrIGNlbGwgcmF0ZSwgZnJvbSAxNzAgLSAzNTMyMDcuCisgICAgICAgICBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBvbiBib3RoIHRoZSBtYWNoaW5lcy4KKyAgIGMuIEZvciBDQlIgdGVzdDoKKyAgICAgIEl0IGlzIHRoZSBzYW1lIGFzIHRoZSBVQlIgdGVzdGluZywgYnV0IHdpdGggYW4gZXh0cmEgY29tbWFuZCBvcHRpb246CisgICAgICAgICAtUGNicjptYXhfcGNyPTx4eHg+CisgICAgICAgICB3aGVyZToKKyAgICAgICAgICAgICB4eHggPSB0aGUgbWF4aW11bSBwZWFrIGNlbGwgcmF0ZSwgZnJvbSAxNzAgLSAzNTMyMDcuCisgICAgICAgICBUaGlzIG9wdGlvbiBtYXkgb25seSBiZSBzZXQgb24gdGhlIHRyYW5zbWl0IG1hY2hpbmUuCisKKworT1VUU1RBTkRJTkcgSVNTVUVTCistLS0tLS0tLS0tLS0tLS0tLS0KKworCisKK0NvbnRhY3QgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICBDdXN0b21lciBTdXBwb3J0OgorICAgICAgICAgVW5pdGVkIFN0YXRlczoJVGVsZXBob25lOgkoMjE0KSA2NTQtNTU1NQorICAgICAJCQlGYXg6CQkoMjE0KSA2NTQtNTUwMAorCQkJRS1NYWlsOgkJaW50b3VjaEBpcGhhc2UuY29tCisJIEV1cm9wZToJVGVsZXBob25lOgkzMyAoMCkxIDQxIDE1IDQ0IDAwCisJCQlGYXg6CQkzMyAoMCkxIDQxIDE1IDEyIDEzCisgICAgIFdvcmxkIFdpZGUgV2ViOglodHRwOi8vd3d3LmlwaGFzZS5jb20KKyAgICAgQW5vbnltb3VzIEZUUDoJZnRwLmlwaGFzZS5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcmRhLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcmRhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTViOGU2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lyZGEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1RvIHVzZSB0aGUgSXJEQSBwcm90b2NvbHMgd2l0aGluIExpbnV4IHlvdSB3aWxsIG5lZWQgdG8gZ2V0IGEgc3VpdGFibGUgY29weQorb2YgdGhlIElyREEgVXRpbGl0aWVzLiBNb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIGFuZCBhc3NvY2lhdGVkCitwcm9ncmFtcyBjYW4gYmUgZm91bmQgb24gaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LworCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdXNlIHRoZSBJckRBIHByb3RvY29sIHN0YWNrLCBzZWUgdGhlCitMaW51eCBJbmZhcmVkIEhPV1RPIChodHRwOi8vd3d3LnR1eG1vYmlsLm9yZy9JbmZyYXJlZC1IT1dUTy9JbmZyYXJlZC1IT1dUTy5odG1sKQorYnkgV2VybmVyIEhldXNlciA8d2VoZUB0dXhtb2JpbC5vcmc+CisKK1RoZXJlIGlzIGFuIGFjdGl2ZSBtYWlsaW5nIGxpc3QgZm9yIGRpc2N1c3NpbmcgTGludXgtSXJEQSBtYXR0ZXJzIGNhbGxlZAorICAgIGlyZGEtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk4Mjc3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0CkBAIC0wLDAgKzEsMjEyIEBACitMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTBHYkUgRmFtaWx5IG9mIEFkYXB0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdmVtYmVyIDE3LCAyMDA0CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBDb21tYW5kIExpbmUgUGFyYW1ldGVycworLSBJbXByb3ZpbmcgUGVyZm9ybWFuY2UKKy0gU3VwcG9ydAorCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMEdiRSBGYW1pbHkgCitvZiBBZGFwdGVycywgdmVyc2lvbiAxLjAueC4gIAorCitGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiAKK3N1cHBsaWVkIHdpdGggeW91ciBJbnRlbCBQUk8vMTBHYkUgYWRhcHRlci4gQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgCithcHBseSB0byB1c2Ugd2l0aCBMaW51eC4KKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gdmVyaWZ5IHlvdXIgSW50ZWwgYWRhcHRlciBpcyBzdXBwb3J0ZWQsIGZpbmQgdGhlIGJvYXJkIElEIG51bWJlciBvbiB0aGUgCithZGFwdGVyLiBMb29rIGZvciBhIGxhYmVsIHRoYXQgaGFzIGEgYmFyY29kZSBhbmQgYSBudW1iZXIgaW4gdGhlIGZvcm1hdCAgCitBMTIzNDUtMDAxLiAKKworVXNlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBhbmQgdGhlIEFkYXB0ZXIgJiBEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9hZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0KKworRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgZ28gdG86CisKKyAgICBodHRwOi8vZG93bmxvYWRmaW5kZXIuaW50ZWwuY29tL3NjcmlwdHMtZGYvc3VwcG9ydF9pbnRlbC5hc3AKKworQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSAgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIAordXNlZCBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgb3IgaW5zbW9kIGNvbW1hbmQKK3VzaW5nIHRoaXMgc3ludGF4OgorCisgICAgIG1vZHByb2JlIGl4Z2IgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQorCisgICAgIGluc21vZCBpeGdiIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0KKworRm9yIGV4YW1wbGUsIHdpdGggdHdvIFBSTy8xMEdiRSBQQ0kgYWRhcHRlcnMsIGVudGVyaW5nOgorCisgICAgaW5zbW9kIGl4Z2IgVHhEZXNjcmlwdG9ycz04MCwxMjgKKworbG9hZHMgdGhlIGl4Z2IgZHJpdmVyIHdpdGggODAgVFggcmVzb3VyY2VzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4IFRYIAorcmVzb3VyY2VzIGZvciB0aGUgc2Vjb25kIGFkYXB0ZXIuCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlciBpcyBnZW5lcmFsbHkgdGhlIHJlY29tbWVuZGVkIHNldHRpbmcsCit1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLiBBbHNvLCBpZiB0aGUgZHJpdmVyIGlzIHN0YXRpY2FsbHkgYnVpbHQgaW50byB0aGUKK2tlcm5lbCwgdGhlIGRyaXZlciBpcyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgcGFyYW1ldGVycy4KK0V0aHRvb2wgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgYXQgcnVudGltZS4KKworRmxvd0NvbnRyb2wKK1ZhbGlkIFJhbmdlOiAwLTMgKDA9bm9uZSwgMT1SeCBvbmx5LCAyPVR4IG9ubHksIDM9UngmVHgpCitEZWZhdWx0OiBSZWFkIGZyb20gdGhlIEVFUFJPTQorICAgICAgICAgSWYgRUVQUk9NIGlzIG5vdCBkZXRlY3RlZCwgZGVmYXVsdCBpcyAzCisgICAgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGF1dG9tYXRpYyBnZW5lcmF0aW9uKFR4KSBhbmQgcmVzcG9uc2UoUngpIHRvIAorICAgIEV0aGVybmV0IFBBVVNFIGZyYW1lcy4KKworUnhEZXNjcmlwdG9ycworVmFsaWQgUmFuZ2U6IDY0LTUxMgorRGVmYXVsdCBWYWx1ZTogNTEyCisgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuIAorICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBidWZmZXIgbW9yZSBpbmNvbWluZyBwYWNrZXRzLiAKKyAgICBFYWNoIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuICBBIHJlY2VpdmUgYnVmZmVyIGlzIGFsc28gYWxsb2NhdGVkIGZvciAKKyAgICBlYWNoIGRlc2NyaXB0b3IgYW5kIGNhbiBiZSBlaXRoZXIgMjA0OCwgNDA1NiwgODE5Miwgb3IgMTYzODQgYnl0ZXMsIAorICAgIGRlcGVuZGluZyBvbiB0aGUgTVRVIHNldHRpbmcuIFdoZW4gdGhlIE1UVSBzaXplIGlzIDE1MDAgb3IgbGVzcywgdGhlIAorICAgIHJlY2VpdmUgYnVmZmVyIHNpemUgaXMgMjA0OCBieXRlcy4gV2hlbiB0aGUgTVRVIGlzIGdyZWF0ZXIgdGhhbiAxNTAwIHRoZQorICAgIHJlY2VpdmUgYnVmZmVyIHNpemUgd2lsbCBiZSBlaXRoZXIgNDA1NiwgODE5Miwgb3IgMTYzODQgYnl0ZXMuIFRoZSAKKyAgICBtYXhpbXVtIE1UVSBzaXplIGlzIDE2MTE0LgorCitSeEludERlbGF5CitWYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitEZWZhdWx0IFZhbHVlOiA2CisgICAgVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgcmVjZWl2ZSBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mIAorICAgIDAuODE5MiBtaWNyb3NlY29uZHMuICBSZWNlaXZlIGludGVycnVwdCByZWR1Y3Rpb24gY2FuIGltcHJvdmUgQ1BVIAorICAgIGVmZmljaWVuY3kgaWYgcHJvcGVybHkgdHVuZWQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYy4gSW5jcmVhc2luZyAKKyAgICB0aGlzIHZhbHVlIGFkZHMgZXh0cmEgbGF0ZW5jeSB0byBmcmFtZSByZWNlcHRpb24gYW5kIGNhbiBlbmQgdXAgCisgICAgZGVjcmVhc2luZyB0aGUgdGhyb3VnaHB1dCBvZiBUQ1AgdHJhZmZpYy4gSWYgdGhlIHN5c3RlbSBpcyByZXBvcnRpbmcgCisgICAgZHJvcHBlZCByZWNlaXZlcywgdGhpcyB2YWx1ZSBtYXkgYmUgc2V0IHRvbyBoaWdoLCBjYXVzaW5nIHRoZSBkcml2ZXIgdG8gCisgICAgcnVuIG91dCBvZiBhdmFpbGFibGUgcmVjZWl2ZSBkZXNjcmlwdG9ycy4KKworVHhEZXNjcmlwdG9ycworVmFsaWQgUmFuZ2U6IDY0LTQwOTYKK0RlZmF1bHQgVmFsdWU6IDI1NgorICAgIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KKyAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcXVldWUgbW9yZSB0cmFuc21pdHMuIEVhY2ggCisgICAgZGVzY3JpcHRvciBpcyAxNiBieXRlcy4KKworWHN1bVJYCitWYWxpZCBSYW5nZTogMC0xCitEZWZhdWx0IFZhbHVlOiAxCisgICAgQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCisgICAgb2ZmbG9hZCBmb3IgcmVjZWl2ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgaGFyZHdhcmUuCisKK1hzdW1UWAorVmFsaWQgUmFuZ2U6IDAtMQorRGVmYXVsdCBWYWx1ZTogMQorICAgIEEgdmFsdWUgb2YgJzEnIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgc2hvdWxkIGVuYWJsZSBJUCBjaGVja3N1bQorICAgIG9mZmxvYWQgZm9yIHRyYW5zbWl0dGVkIHBhY2tldHMgKGJvdGggVURQIGFuZCBUQ1ApIHRvIHRoZSBhZGFwdGVyIAorICAgIGhhcmR3YXJlLgorCitJbXByb3ZpbmcgUGVyZm9ybWFuY2UKKz09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBJbnRlbCBQUk8vMTAgR2JFIGFkYXB0ZXIsIHRoZSBkZWZhdWx0IExpbnV4IGNvbmZpZ3VyYXRpb24gd2lsbCB2ZXJ5IAorbGlrZWx5IGxpbWl0IHRoZSB0b3RhbCBhdmFpbGFibGUgdGhyb3VnaHB1dCBhcnRpZmljaWFsbHkuICBUaGVyZSBpcyBhIHNldCBvZiAKK3RoaW5ncyB0aGF0IHdoZW4gYXBwbGllZCB0b2dldGhlciBpbmNyZWFzZSB0aGUgYWJpbGl0eSBvZiBMaW51eCB0byB0cmFuc21pdCAKK2FuZCByZWNlaXZlIGRhdGEuICBUaGUgZm9sbG93aW5nIGVuaGFuY2VtZW50cyB3ZXJlIG9yaWdpbmFsbHkgYWNxdWlyZWQgZnJvbQorc2V0dGluZ3MgcHVibGlzaGVkIGF0IGh0dHA6Ly93d3cuc3BlYy5vcmcvd2ViOTkgZm9yIHZhcmlvdXMgc3VibWl0dGVkIHJlc3VsdHMgCit1c2luZyBMaW51eC4KKworTk9URTogVGhlc2UgY2hhbmdlcyBhcmUgb25seSBzdWdnZXN0aW9ucywgYW5kIHNlcnZlIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIAordHVuaW5nIHlvdXIgbmV0d29yayBwZXJmb3JtYW5jZS4KKworVGhlIGNoYW5nZXMgYXJlIG1hZGUgaW4gdGhyZWUgbWFqb3Igd2F5cywgbGlzdGVkIGluIG9yZGVyIG9mIGdyZWF0ZXN0IGVmZmVjdDoKKy0gVXNlIGlmY29uZmlnIHRvIG1vZGlmeSB0aGUgbXR1IChtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0KSBhbmQgdGhlIHR4cXVldWVsZW4gCisgIHBhcmFtZXRlci4KKy0gVXNlIHN5c2N0bCB0byBtb2RpZnkgL3Byb2MgcGFyYW1ldGVycyAoZXNzZW50aWFsbHkga2VybmVsIHR1bmluZykKKy0gVXNlIHNldHBjaSB0byBtb2RpZnkgdGhlIE1NUkJDIGZpZWxkIGluIFBDSS1YIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8gaW5jcmVhc2UgCisgIHRyYW5zbWl0IGJ1cnN0IGxlbmd0aHMgb24gdGhlIGJ1cy4KKworTk9URTogc2V0cGNpIG1vZGlmaWVzIHRoZSBhZGFwdGVyJ3MgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdG8gYWxsb3cgaXQgdG8gcmVhZCAKK3VwIHRvIDRrIGJ5dGVzIGF0IGEgdGltZSAoZm9yIHRyYW5zbWl0cykuICBIb3dldmVyLCBmb3Igc29tZSBzeXN0ZW1zIHRoZSAKK2JlaGF2aW9yIGFmdGVyIG1vZGlmeWluZyB0aGlzIHJlZ2lzdGVyIG1heSBiZSB1bmRlZmluZWQgKHBvc3NpYmx5IGVycm9ycyBvZiBzb21lIAora2luZCkuIEEgcG93ZXItY3ljbGUsIGhhcmQgcmVzZXQgb3IgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBlNiByZWdpc3RlciBiYWNrIHRvIAorMjIgKHNldHBjaSAtZCA4MDg2OjEwNDggZTYuYj0yMikgbWF5IGJlIHJlcXVpcmVkIHRvIGdldCBiYWNrIHRvIGEgc3RhYmxlIAorY29uZmlndXJhdGlvbi4KKworLSBDT1BZIHRoZXNlIGxpbmVzIGFuZCBwYXN0ZSB0aGVtIGludG8gaXhnYl9wZXJmLnNoOgorIyEvYmluL2Jhc2gKK2VjaG8gImNvbmZpZ3VyaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgLCBlZGl0IHRoaXMgZmlsZSB0byBjaGFuZ2UgdGhlIGludGVyZmFjZSIKKyMgc2V0IG1tcmJjIHRvIDRrIHJlYWRzLCBtb2RpZnkgb25seSBJbnRlbCAxMEdiRSBkZXZpY2UgSURzCitzZXRwY2kgLWQgODA4NjoxMDQ4IGU2LmI9MmUKKyMgc2V0IHRoZSBNVFUgKG1heCB0cmFuc21pc3Npb24gdW5pdCkgLSBpdCByZXF1aXJlcyB5b3VyIHN3aXRjaCBhbmQgY2xpZW50cyB0byBjaGFuZ2UgdG9vIQorIyBzZXQgdGhlIHR4cXVldWVsZW4KKyMgeW91ciBpeGdiIGFkYXB0ZXIgc2hvdWxkIGJlIGxvYWRlZCBhcyBldGgxIGZvciB0aGlzIHRvIHdvcmssIGNoYW5nZSBpZiBuZWVkZWQKK2lmY29uZmlnIGV0aDEgbXR1IDkwMDAgdHhxdWV1ZWxlbiAxMDAwIHVwCisjIGNhbGwgdGhlIHN5c2N0bCB1dGlsaXR5IHRvIG1vZGlmeSAvcHJvYy9zeXMgZW50cmllcyAKK3N5c2N0bCAtcCAuL3N5c2N0bF9peGdiLmNvbmYgCistIEVORCBpeGdiX3BlcmYuc2gKKworLSBDT1BZIHRoZXNlIGxpbmVzIGFuZCBwYXN0ZSB0aGVtIGludG8gc3lzY3RsX2l4Z2IuY29uZjoKKyMgc29tZSBvZiB0aGUgZGVmYXVsdHMgbWF5IGJlIGRpZmZlcmVudCBmb3IgeW91ciBrZXJuZWwKKyMgY2FsbCB0aGlzIGZpbGUgd2l0aCBzeXNjdGwgLXAgPHRoaXMgZmlsZT4KKyMgdGhlc2UgYXJlIGp1c3Qgc3VnZ2VzdGVkIHZhbHVlcyB0aGF0IHdvcmtlZCB3ZWxsIHRvIGluY3JlYXNlIHRocm91Z2hwdXQgaW4KKyMgc2V2ZXJhbCBuZXR3b3JrIGJlbmNobWFyayB0ZXN0cywgeW91ciBtaWxlYWdlIG1heSB2YXJ5CisKKyMjIyBJUFY0IHNwZWNpZmljIHNldHRpbmdzCituZXQuaXB2NC50Y3BfdGltZXN0YW1wcyA9IDAgIyB0dXJucyBUQ1AgdGltZXN0YW1wIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IDEsIHJlZHVjZXMgQ1BVIHVzZQorbmV0LmlwdjQudGNwX3NhY2sgPSAwICMgdHVybiBTQUNLIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IG9uCisjIG9uIHN5c3RlbXMgd2l0aCBhIFZFUlkgZmFzdCBidXMgLT4gbWVtb3J5IGludGVyZmFjZSB0aGlzIGlzIHRoZSBiaWcgZ2FpbmVyIAorbmV0LmlwdjQudGNwX3JtZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL2RlZmF1bHQvbWF4IFRDUCByZWFkIGJ1ZmZlciwgZGVmYXVsdCA0MDk2IDg3MzgwIDE3NDc2MAorbmV0LmlwdjQudGNwX3dtZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL3ByZXNzdXJlL21heCBUQ1Agd3JpdGUgYnVmZmVyLCBkZWZhdWx0IDQwOTYgMTYzODQgMTMxMDcyCituZXQuaXB2NC50Y3BfbWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9wcmVzc3VyZS9tYXggVENQIGJ1ZmZlciBzcGFjZSwgZGVmYXVsdCAzMTc0NCAzMjI1NiAzMjc2OAorCisjIyMgQ09SRSBzZXR0aW5ncyAobW9zdGx5IGZvciBzb2NrZXQgYW5kIFVEUCBlZmZlY3QpCituZXQuY29yZS5ybWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS53bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS5ybWVtX2RlZmF1bHQgPSA1MjQyODcgIyBkZWZhdWx0IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS53bWVtX2RlZmF1bHQgPSA1MjQyODcgIyBkZWZhdWx0IHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS5vcHRtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSBhbW91bnQgb2Ygb3B0aW9uIG1lbW9yeSBidWZmZXJzLCBkZWZhdWx0IDEwMjQwCituZXQuY29yZS5uZXRkZXZfbWF4X2JhY2tsb2cgPSAzMDAwMDAgIyBudW1iZXIgb2YgdW5wcm9jZXNzZWQgaW5wdXQgcGFja2V0cyBiZWZvcmUga2VybmVsIHN0YXJ0cyBkcm9wcGluZyB0aGVtLCBkZWZhdWx0IDMwMAorLSBFTkQgc3lzY3RsX2l4Z2IuY29uZgorCitFZGl0IHRoZSBpeGdiX3BlcmYuc2ggc2NyaXB0IGlmIG5lY2Vzc2FyeSB0byBjaGFuZ2UgZXRoMSB0byB3aGF0ZXZlciBpbnRlcmZhY2UgCit5b3VyIGl4Z2IgZHJpdmVyIGlzIHVzaW5nLgorCitOT1RFOiBVbmxlc3MgdGhlc2Ugc2NyaXB0cyBhcmUgYWRkZWQgdG8gdGhlIGJvb3QgcHJvY2VzcywgdGhlc2UgY2hhbmdlcyB3aWxsIAorb25seSBsYXN0IG9ubHkgdW50aWwgdGhlIG5leHQgc3lzdGVtIHJlYm9vdC4KKworCitSZXNvbHZpbmcgU2xvdyBVRFAgVHJhZmZpYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91ciBzZXJ2ZXIgZG9lcyBub3Qgc2VlbSB0byBiZSBhYmxlIHRvIHJlY2VpdmUgVURQIHRyYWZmaWMgYXMgZmFzdCBhcyBpdCAKK2NhbiByZWNlaXZlIFRDUCB0cmFmZmljLCBpdCBjb3VsZCBiZSBiZWNhdXNlIExpbnV4LCBieSBkZWZhdWx0LCBkb2VzIG5vdCBzZXQgCit0aGUgbmV0d29yayBzdGFjayBidWZmZXJzIGFzIGxhcmdlIGFzIHRoZXkgbmVlZCB0byBiZSB0byBzdXBwb3J0IGhpZ2ggVURQIAordHJhbnNmZXIgcmF0ZXMuIE9uZSB3YXkgdG8gYWxsZXZpYXRlIHRoaXMgcHJvYmxlbSBpcyB0byBhbGxvdyBtb3JlIG1lbW9yeSB0byAKK2JlIHVzZWQgYnkgdGhlIElQIHN0YWNrIHRvIHN0b3JlIGluY29taW5nIGRhdGEuIAorCitGb3IgaW5zdGFuY2UsIHVzZSB0aGUgY29tbWFuZHM6IAorICAgIHN5c2N0bCAtdyBuZXQuY29yZS5ybWVtX21heD0yNjIxNDMKK2FuZAorICAgIHN5c2N0bCAtdyBuZXQuY29yZS5ybWVtX2RlZmF1bHQ9MjYyMTQzCit0byBpbmNyZWFzZSB0aGUgcmVhZCBidWZmZXIgbWVtb3J5IG1heCBhbmQgZGVmYXVsdCB0byAyNjIxNDMgKDI1NmsgLSAxKSBmcm9tIAorZGVmYXVsdHMgb2YgbWF4PTEzMTA3MSAoMTI4ayAtIDEpIGFuZCBkZWZhdWx0PTY1NTM1ICg2NGsgLSAxKS4gVGhlc2UgdmFyaWFibGVzIAord2lsbCBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBuZXR3b3JrIHN0YWNrIGZvciByZWNlaXZlcywgYW5kIAorY2FuIGJlIGluY3JlYXNlZCBzaWduaWZpY2FudGx5IG1vcmUgaWYgbmVjZXNzYXJ5IGZvciB5b3VyIGFwcGxpY2F0aW9uLgorCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0LCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gCit0aGUgaXNzdWUgdG8gbGludXgubmljc0BpbnRlbC5jb20uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbGFwYi1tb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2xhcGItbW9kdWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZjOGYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2xhcGItbW9kdWxlLnR4dApAQCAtMCwwICsxLDI2MyBAQAorCQlUaGUgTGludXggTEFQQiBNb2R1bGUgSW50ZXJmYWNlIDEuMworCisJCSAgICAgIEpvbmF0aGFuIE5heWxvciAyOS4xMi45NgorCitDaGFuZ2VkIChIZW5uZXIgRWlzZW4sIDIwMDAtMTAtMjkpOiBpbnQgcmV0dXJuIHZhbHVlIGZvciBkYXRhX2luZGljYXRpb24oKSAKKworVGhlIExBUEIgbW9kdWxlIHdpbGwgYmUgYSBzZXBhcmF0ZWx5IGNvbXBpbGVkIG1vZHVsZSBmb3IgdXNlIGJ5IGFueSBwYXJ0cyBvZgordGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0gdGhhdCByZXF1aXJlIGEgTEFQQiBzZXJ2aWNlLiBUaGlzIGRvY3VtZW50CitkZWZpbmVzIHRoZSBpbnRlcmZhY2VzIHRvLCBhbmQgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLiBUaGUKK3Rlcm0gbW9kdWxlIGluIHRoaXMgY29udGV4dCBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSBMQVBCIG1vZHVsZSBpcyBhCitzZXBhcmF0ZWx5IGxvYWRhYmxlIG1vZHVsZSwgYWx0aG91Z2ggaXQgbWF5IGJlLiBUaGUgdGVybSBtb2R1bGUgaXMgdXNlZCBpbgoraXRzIG1vcmUgc3RhbmRhcmQgbWVhbmluZy4KKworVGhlIGludGVyZmFjZSB0byB0aGUgTEFQQiBtb2R1bGUgY29uc2lzdHMgb2YgZnVuY3Rpb25zIHRvIHRoZSBtb2R1bGUsCitjYWxsYmFja3MgZnJvbSB0aGUgbW9kdWxlIHRvIGluZGljYXRlIGltcG9ydGFudCBzdGF0ZSBjaGFuZ2VzLCBhbmQKK3N0cnVjdHVyZXMgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZS4KKworU3RydWN0dXJlcworLS0tLS0tLS0tLQorCitQcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgc3RydWN0dXJlIGlzIHRoZSBza2J1ZmYgc3RydWN0dXJlIGZvciBob2xkaW5nCityZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQgZGF0YSwgaG93ZXZlciBpdCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMKK2RvY3VtZW50LgorCitUaGUgdHdvIExBUEIgc3BlY2lmaWMgc3RydWN0dXJlcyBhcmUgdGhlIExBUEIgaW5pdGlhbGlzYXRpb24gc3RydWN0dXJlIGFuZAordGhlIExBUEIgcGFyYW1ldGVyIHN0cnVjdHVyZS4gVGhlc2Ugd2lsbCBiZSBkZWZpbmVkIGluIGEgc3RhbmRhcmQgaGVhZGVyCitmaWxlLCA8bGludXgvbGFwYi5oPi4gVGhlIGhlYWRlciBmaWxlIDxuZXQvbGFwYi5oPiBpcyBpbnRlcm5hbCB0byB0aGUgTEFQQgorbW9kdWxlIGFuZCBpcyBub3QgZm9yIHVzZS4KKworTEFQQiBJbml0aWFsaXNhdGlvbiBTdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3RydWN0dXJlIGlzIHVzZWQgb25seSBvbmNlLCBpbiB0aGUgY2FsbCB0byBsYXBiX3JlZ2lzdGVyIChzZWUgYmVsb3cpLgorSXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgc2VydmljZXMKK29mIHRoZSBMQVBCIG1vZHVsZS4KKworc3RydWN0IGxhcGJfcmVnaXN0ZXJfc3RydWN0IHsKKwl2b2lkICgqY29ubmVjdF9jb25maXJtYXRpb24pKGludCB0b2tlbiwgaW50IHJlYXNvbik7CisJdm9pZCAoKmNvbm5lY3RfaW5kaWNhdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwl2b2lkICgqZGlzY29ubmVjdF9jb25maXJtYXRpb24pKGludCB0b2tlbiwgaW50IHJlYXNvbik7CisJdm9pZCAoKmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwlpbnQgICgqZGF0YV9pbmRpY2F0aW9uKShpbnQgdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQgKCpkYXRhX3RyYW5zbWl0KShpbnQgdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworfTsKKworRWFjaCBtZW1iZXIgb2YgdGhpcyBzdHJ1Y3R1cmUgY29ycmVzcG9uZHMgdG8gYSBmdW5jdGlvbiBpbiB0aGUgZGV2aWNlIGRyaXZlcgordGhhdCBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgZXZlbnQgaW4gdGhlIExBUEIgbW9kdWxlIG9jY3Vycy4gVGhlc2Ugd2lsbAorYmUgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy4gSWYgYSBjYWxsYmFjayBpcyBub3QgcmVxdWlyZWQgKCEhKSB0aGVuIGEgTlVMTAorbWF5IGJlIHN1YnN0aXR1dGVkLgorCisKK0xBUEIgUGFyYW1ldGVyIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc3RydWN0dXJlIGlzIHVzZWQgd2l0aCB0aGUgbGFwYl9nZXRwYXJtcyBhbmQgbGFwYl9zZXRwYXJtcyBmdW5jdGlvbnMKKyhzZWUgYmVsb3cpLiBUaGV5IGFyZSB1c2VkIHRvIGFsbG93IHRoZSBkZXZpY2UgZHJpdmVyIHRvIGdldCBhbmQgc2V0IHRoZQorb3BlcmF0aW9uYWwgcGFyYW1ldGVycyBvZiB0aGUgTEFQQiBpbXBsZW1lbnRhdGlvbiBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgorCitzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgeworCXVuc2lnbmVkIGludCB0MTsKKwl1bnNpZ25lZCBpbnQgdDF0aW1lcjsKKwl1bnNpZ25lZCBpbnQgdDI7CisJdW5zaWduZWQgaW50IHQydGltZXI7CisJdW5zaWduZWQgaW50IG4yOworCXVuc2lnbmVkIGludCBuMmNvdW50OworCXVuc2lnbmVkIGludCB3aW5kb3c7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIGludCBtb2RlOworfTsKKworVDEgYW5kIFQyIGFyZSBwcm90b2NvbCB0aW1pbmcgcGFyYW1ldGVycyBhbmQgYXJlIGdpdmVuIGluIHVuaXRzIG9mIDEwMG1zLiBOMgoraXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRyaWVzIG9uIHRoZSBsaW5rIGJlZm9yZSBpdCBpcyBkZWNsYXJlZCBhIGZhaWx1cmUuCitUaGUgd2luZG93IHNpemUgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIGRhdGEgcGFja2V0cyBhbGxvd2VkIHRvCitiZSB1bmFja25vd2xlZGdlZCBieSB0aGUgcmVtb3RlIGVuZCwgdGhlIHZhbHVlIG9mIHRoZSB3aW5kb3cgaXMgYmV0d2VlbiAxCithbmQgNyBmb3IgYSBzdGFuZGFyZCBMQVBCIGxpbmssIGFuZCBiZXR3ZWVuIDEgYW5kIDEyNyBmb3IgYW4gZXh0ZW5kZWQgTEFQQgorbGluay4KKworVGhlIG1vZGUgdmFyaWFibGUgaXMgYSBiaXQgZmllbGQgdXNlZCBmb3Igc2V0dGluZyAoYXQgcHJlc2VudCkgdGhyZWUgdmFsdWVzLgorVGhlIGJpdCBmaWVsZHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCitCaXQJTWVhbmluZworMAlMQVBCIG9wZXJhdGlvbiAoMD1MQVBCX1NUQU5EQVJEIDE9TEFQQl9FWFRFTkRFRCkuCisxCVtTTV1MUCBvcGVyYXRpb24gKDA9TEFQQl9TTFAgMT1MQVBCPU1MUCkuCisyCURURS9EQ0Ugb3BlcmF0aW9uICgwPUxBUEJfRFRFIDE9TEFQQl9EQ0UpCiszLTMxCVJlc2VydmVkLCBtdXN0IGJlIDAuCisKK0V4dGVuZGVkIExBUEIgb3BlcmF0aW9uIGluZGljYXRlcyB0aGUgdXNlIG9mIGV4dGVuZGVkIHNlcXVlbmNlIG51bWJlcnMgYW5kCitjb25zZXF1ZW50bHkgbGFyZ2VyIHdpbmRvdyBzaXplcywgdGhlIGRlZmF1bHQgaXMgc3RhbmRhcmQgTEFQQiBvcGVyYXRpb24uCitNTFAgb3BlcmF0aW9uIGlzIHRoZSBzYW1lIGFzIFNMUCBvcGVyYXRpb24gZXhjZXB0IHRoYXQgdGhlIGFkZHJlc3NlcyB1c2VkIGJ5CitMQVBCIGFyZSBkaWZmZXJlbnQgdG8gaW5kaWNhdGUgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uLCB0aGUgZGVmYXVsdCBpcyBTaW5nbGUKK0xpbmsgUHJvY2VkdXJlLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIERDRSBhbmQgRFRFIG9wZXJhdGlvbiBpcyAoaSkgdGhlCithZGRyZXNzZXMgdXNlZCBmb3IgY29tbWFuZHMgYW5kIHJlc3BvbnNlcywgYW5kIChpaSkgd2hlbiB0aGUgRENFIGlzIG5vdAorY29ubmVjdGVkLCBpdCBzZW5kcyBETSB3aXRob3V0IHBvbGxzIHNldCwgZXZlcnkgVDEuIFRoZSB1cHBlciBjYXNlIGNvbnN0YW50CituYW1lcyB3aWxsIGJlIGRlZmluZWQgaW4gdGhlIHB1YmxpYyBMQVBCIGhlYWRlciBmaWxlLgorCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK1RoZSBMQVBCIG1vZHVsZSBwcm92aWRlcyBhIG51bWJlciBvZiBmdW5jdGlvbiBlbnRyeSBwb2ludHMuCisKKworaW50IGxhcGJfcmVnaXN0ZXIodm9pZCAqdG9rZW4sIHN0cnVjdCBsYXBiX3JlZ2lzdGVyX3N0cnVjdCk7CisKK1RoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBMQVBCIG1vZHVsZSBtYXkgYmUgdXNlZC4gSWYgdGhlIGNhbGwgaXMKK3N1Y2Nlc3NmdWwgdGhlbiBMQVBCX09LIGlzIHJldHVybmVkLiBUaGUgdG9rZW4gbXVzdCBiZSBhIHVuaXF1ZSBpZGVudGlmaWVyCitnZW5lcmF0ZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgdG8gYWxsb3cgZm9yIHRoZSB1bmlxdWUgaWRlbnRpZmljYXRpb24gb2YgdGhlCitpbnN0YW5jZSBvZiB0aGUgTEFQQiBsaW5rLiBJdCBpcyByZXR1cm5lZCBieSB0aGUgTEFQQiBtb2R1bGUgaW4gYWxsIG9mIHRoZQorY2FsbGJhY2tzLCBhbmQgaXMgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBpbiBhbGwgY2FsbHMgdG8gdGhlIExBUEIgbW9kdWxlLgorRm9yIG11bHRpcGxlIExBUEIgbGlua3MgaW4gYSBzaW5nbGUgZGV2aWNlIGRyaXZlciwgbXVsdGlwbGUgY2FsbHMgdG8KK2xhcGJfcmVnaXN0ZXIgbXVzdCBiZSBtYWRlLiBUaGUgZm9ybWF0IG9mIHRoZSBsYXBiX3JlZ2lzdGVyX3N0cnVjdCBpcyBnaXZlbgorYWJvdmUuIFRoZSByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkuCitMQVBCX0JBRFRPS0VOCQlUb2tlbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCitMQVBCX05PTUVNCQlPdXQgb2YgbWVtb3J5CisKKworaW50IGxhcGJfdW5yZWdpc3Rlcih2b2lkICp0b2tlbik7CisKK1RoaXMgcmVsZWFzZXMgYWxsIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgTEFQQiBsaW5rLiBBbnkgY3VycmVudAorTEFQQiBsaW5rIHdpbGwgYmUgYWJhbmRvbmVkIHdpdGhvdXQgZnVydGhlciBtZXNzYWdlcyBiZWluZyBwYXNzZWQuIEFmdGVyCit0aGlzIGNhbGwsIHRoZSB2YWx1ZSBvZiB0b2tlbiBpcyBubyBsb25nZXIgdmFsaWQgZm9yIGFueSBjYWxscyB0byB0aGUgTEFQQgorZnVuY3Rpb24uIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgdW5yZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseS4KK0xBUEJfQkFEVE9LRU4JCUludmFsaWQvdW5rbm93biBMQVBCIHRva2VuLgorCisKK2ludCBsYXBiX2dldHBhcm1zKHZvaWQgKnRva2VuLCBzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgKnBhcm1zKTsKKworVGhpcyBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gZ2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgTEFQQgordmFyaWFibGVzLCB0aGUgbGFwYl9wYXJtc19zdHJ1Y3QgaXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgdmFsaWQgcmV0dXJuIHZhbHVlcworYXJlOgorCitMQVBCX09LCQkJTEFQQiBnZXRwYXJtcyB3YXMgc3VjY2Vzc2Z1bC4KK0xBUEJfQkFEVE9LRU4JCUludmFsaWQvdW5rbm93biBMQVBCIHRva2VuLgorCisKK2ludCBsYXBiX3NldHBhcm1zKHZvaWQgKnRva2VuLCBzdHJ1Y3QgbGFwYl9wYXJtc19zdHJ1Y3QgKnBhcm1zKTsKKworVGhpcyBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgTEFQQgordmFyaWFibGVzLCB0aGUgbGFwYl9wYXJtc19zdHJ1Y3QgaXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgdmFsdWVzIG9mIHQxdGltZXIsCit0MnRpbWVyIGFuZCBuMmNvdW50IGFyZSBpZ25vcmVkLCBsaWtld2lzZSBjaGFuZ2luZyB0aGUgbW9kZSBiaXRzIHdoZW4KK2Nvbm5lY3RlZCB3aWxsIGJlIGlnbm9yZWQuIEFuIGVycm9yIGltcGxpZXMgdGhhdCBub25lIG9mIHRoZSB2YWx1ZXMgaGF2ZQorYmVlbiBjaGFuZ2VkLiBUaGUgdmFsaWQgcmV0dXJuIHZhbHVlcyBhcmU6CisKK0xBUEJfT0sJCQlMQVBCIGdldHBhcm1zIHdhcyBzdWNjZXNzZnVsLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCitMQVBCX0lOVkFMVUUJCU9uZSBvZiB0aGUgdmFsdWVzIHdhcyBvdXQgb2YgaXRzIGFsbG93YWJsZSByYW5nZS4KKworCitpbnQgbGFwYl9jb25uZWN0X3JlcXVlc3Qodm9pZCAqdG9rZW4pOworCitJbml0aWF0ZSBhIGNvbm5lY3QgdXNpbmcgdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmdzLiBUaGUgdmFsaWQgcmV0dXJuCit2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiBpcyBzdGFydGluZyB0byBjb25uZWN0LgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCitMQVBCX0NPTk5FQ1RFRAkJTEFQQiBtb2R1bGUgaXMgYWxyZWFkeSBjb25uZWN0ZWQuCisKKworaW50IGxhcGJfZGlzY29ubmVjdF9yZXF1ZXN0KHZvaWQgKnRva2VuKTsKKworSW5pdGlhdGUgYSBkaXNjb25uZWN0LiBUaGUgdmFsaWQgcmV0dXJuIHZhbHVlcyBhcmU6CisKK0xBUEJfT0sJCQlMQVBCIGlzIHN0YXJ0aW5nIHRvIGRpc2Nvbm5lY3QuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfTk9UQ09OTkVDVEVECUxBUEIgbW9kdWxlIGlzIG5vdCBjb25uZWN0ZWQuCisKKworaW50IGxhcGJfZGF0YV9yZXF1ZXN0KHZvaWQgKnRva2VuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworUXVldWUgZGF0YSB3aXRoIHRoZSBMQVBCIG1vZHVsZSBmb3IgdHJhbnNtaXR0aW5nIG92ZXIgdGhlIGxpbmsuIElmIHRoZSBjYWxsCitpcyBzdWNjZXNzZnVsIHRoZW4gdGhlIHNrYnVmZiBpcyBvd25lZCBieSB0aGUgTEFQQiBtb2R1bGUgYW5kIG1heSBub3QgYmUKK3VzZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgYWdhaW4uIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgaGFzIGFjY2VwdGVkIHRoZSBkYXRhLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCitMQVBCX05PVENPTk5FQ1RFRAlMQVBCIG1vZHVsZSBpcyBub3QgY29ubmVjdGVkLgorCisKK2ludCBsYXBiX2RhdGFfcmVjZWl2ZWQodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitRdWV1ZSBkYXRhIHdpdGggdGhlIExBUEIgbW9kdWxlIHdoaWNoIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4gSXQKK2lzIGV4cGVjdGVkIHRoYXQgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBMQVBCIG1vZHVsZSBoYXMgc2tiLT5kYXRhIHBvaW50aW5nCit0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBMQVBCIGRhdGEuIElmIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUgc2tidWZmCitpcyBvd25lZCBieSB0aGUgTEFQQiBtb2R1bGUgYW5kIG1heSBub3QgYmUgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBhZ2Fpbi4KK1RoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgaGFzIGFjY2VwdGVkIHRoZSBkYXRhLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCisKKworQ2FsbGJhY2tzCistLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIGFyZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGRldmljZSBkcml2ZXIgZm9yIHRoZSBMQVBCCittb2R1bGUgdG8gY2FsbCB3aGVuIGFuIGV2ZW50IG9jY3Vycy4gVGhleSBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBMQVBCCittb2R1bGUgd2l0aCBsYXBiX3JlZ2lzdGVyIChzZWUgYWJvdmUpIGluIHRoZSBzdHJ1Y3R1cmUgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QKKyhzZWUgYWJvdmUpLgorCisKK3ZvaWQgKCpjb25uZWN0X2NvbmZpcm1hdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYWZ0ZXIKK2JlaW5nIHJlcXVlc3RlZCBieSBhIGNhbGwgdG8gbGFwYl9jb25uZWN0X3JlcXVlc3QgKHNlZSBhYm92ZSkuIFRoZSByZWFzb24gaXMKK2Fsd2F5cyBMQVBCX09LLgorCisKK3ZvaWQgKCpjb25uZWN0X2luZGljYXRpb24pKHZvaWQgKnRva2VuLCBpbnQgcmVhc29uKTsKKworVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExBUEIgbW9kdWxlIHdoZW4gdGhlIGxpbmsgaXMgZXN0YWJsaXNoZWQgYnkgdGhlIHJlbW90ZQorc3lzdGVtLiBUaGUgdmFsdWUgb2YgcmVhc29uIGlzIGFsd2F5cyBMQVBCX09LLgorCisKK3ZvaWQgKCpkaXNjb25uZWN0X2NvbmZpcm1hdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBhbiBldmVudCBvY2N1cnMgYWZ0ZXIgdGhlIGRldmljZQorZHJpdmVyIGhhcyBjYWxsZWQgbGFwYl9kaXNjb25uZWN0X3JlcXVlc3QgKHNlZSBhYm92ZSkuIFRoZSByZWFzb24gaW5kaWNhdGVzCit3aGF0IGhhcyBoYXBwZW5lZC4gSW4gYWxsIGNhc2VzIHRoZSBMQVBCIGxpbmsgY2FuIGJlIHJlZ2FyZGVkIGFzIGJlaW5nCit0ZXJtaW5hdGVkLiBUaGUgdmFsdWVzIGZvciByZWFzb24gYXJlOgorCitMQVBCX09LCQkJVGhlIExBUEIgbGluayB3YXMgdGVybWluYXRlZCBub3JtYWxseS4KK0xBUEJfTk9UQ09OTkVDVEVECVRoZSByZW1vdGUgc3lzdGVtIHdhcyBub3QgY29ubmVjdGVkLgorTEFQQl9USU1FRE9VVAkJTm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGluIE4yIHRyaWVzIGZyb20gdGhlIHJlbW90ZQorCQkJc3lzdGVtLgorCisKK3ZvaWQgKCpkaXNjb25uZWN0X2luZGljYXRpb24pKHZvaWQgKnRva2VuLCBpbnQgcmVhc29uKTsKKworVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExBUEIgbW9kdWxlIHdoZW4gdGhlIGxpbmsgaXMgdGVybWluYXRlZCBieSB0aGUgcmVtb3RlCitzeXN0ZW0gb3IgYW5vdGhlciBldmVudCBoYXMgb2NjdXJyZWQgdG8gdGVybWluYXRlIHRoZSBsaW5rLiBUaGlzIG1heSBiZQorcmV0dXJuZWQgaW4gcmVzcG9uc2UgdG8gYSBsYXBiX2Nvbm5lY3RfcmVxdWVzdCAoc2VlIGFib3ZlKSBpZiB0aGUgcmVtb3RlCitzeXN0ZW0gcmVmdXNlZCB0aGUgcmVxdWVzdC4gVGhlIHZhbHVlcyBmb3IgcmVhc29uIGFyZToKKworTEFQQl9PSwkJCVRoZSBMQVBCIGxpbmsgd2FzIHRlcm1pbmF0ZWQgbm9ybWFsbHkgYnkgdGhlIHJlbW90ZQorCQkJc3lzdGVtLgorTEFQQl9SRUZVU0VECQlUaGUgcmVtb3RlIHN5c3RlbSByZWZ1c2VkIHRoZSBjb25uZWN0IHJlcXVlc3QuCitMQVBCX05PVENPTk5FQ1RFRAlUaGUgcmVtb3RlIHN5c3RlbSB3YXMgbm90IGNvbm5lY3RlZC4KK0xBUEJfVElNRURPVVQJCU5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZCBpbiBOMiB0cmllcyBmcm9tIHRoZSByZW1vdGUKKwkJCXN5c3RlbS4KKworCitpbnQgKCpkYXRhX2luZGljYXRpb24pKHZvaWQgKnRva2VuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworVGhpcyBpcyBjYWxsZWQgYnkgdGhlIExBUEIgbW9kdWxlIHdoZW4gZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIHRoZQorcmVtb3RlIHN5c3RlbSB0aGF0IHNob3VsZCBiZSBwYXNzZWQgb250byB0aGUgbmV4dCBsYXllciBpbiB0aGUgcHJvdG9jb2wKK3N0YWNrLiBUaGUgc2tidWZmIGJlY29tZXMgdGhlIHByb3BlcnR5IG9mIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCB0aGUgTEFQQgorbW9kdWxlIHdpbGwgbm90IHBlcmZvcm0gYW55IG1vcmUgYWN0aW9ucyBvbiBpdC4gVGhlIHNrYi0+ZGF0YSBwb2ludGVyIHdpbGwKK2JlIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgYWZ0ZXIgdGhlIExBUEIgaGVhZGVyLgorCitUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIE5FVF9SWF9EUk9QIChhcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIKK2ZpbGUgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCkgaWYgYW5kIG9ubHkgaWYgdGhlIGZyYW1lIHdhcyBkcm9wcGVkCitiZWZvcmUgaXQgY291bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSB1cHBlciBsYXllci4KKworCit2b2lkICgqZGF0YV90cmFuc21pdCkodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBkYXRhIGlzIHRvIGJlIHRyYW5zbWl0dGVkIHRvIHRoZQorcmVtb3RlIHN5c3RlbSBieSB0aGUgZGV2aWNlIGRyaXZlci4gVGhlIHNrYnVmZiBiZWNvbWVzIHRoZSBwcm9wZXJ0eSBvZiB0aGUKK2RldmljZSBkcml2ZXIgYW5kIHRoZSBMQVBCIG1vZHVsZSB3aWxsIG5vdCBwZXJmb3JtIGFueSBtb3JlIGFjdGlvbnMgb24gaXQuCitUaGUgc2tiLT5kYXRhIHBvaW50ZXIgd2lsbCBiZSBwb2ludGluZyB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgTEFQQiBoZWFkZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbHRwYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbHRwYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYTkxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sdHBjLnR4dApAQCAtMCwwICsxLDEzMSBAQAorVGhpcyBpcyB0aGUgQUxQSEEgdmVyc2lvbiBvZiB0aGUgbHRwYyBkcml2ZXIuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCB2ZXJzaW9uIDEuMy4zIG9mIHRoZQorbmV0YXRhbGsgcGFja2FnZSwgYW5kIHRoZSBBcHBsZSBvciBGYXJhbGxvbiBMb2NhbFRhbGsgUEMgY2FyZC4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgTG9jYWxUYWxrIGNhcmRzIGZvciB0aGUgUEM7IHRoaXMKK2RyaXZlciBhcHBsaWVzIG9ubHkgdG8gdGhlIG9uZSB3aXRoIHRoZSA2NWMwMiBwcm9jZXNzb3IgY2hpcCBvbiBpdC4KKworVG8gaW5jbHVkZSBpdCBpbiB0aGUga2VybmVsLCBzZWxlY3QgdGhlIENPTkZJR19MVFBDIHN3aXRjaCBpbiB0aGUKK2NvbmZpZ3VyYXRpb24gZGlhbG9nLiAgWW91IGNhbiBhbHNvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuCisKK1doaWxlIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGF1dG9wcm9iZSB0aGUgSS9PIHBvcnQgYWRkcmVzcywgSVJRCitsaW5lLCBhbmQgRE1BIGNoYW5uZWwgb2YgdGhlIGNhcmQsIHRoaXMgZG9lcyBub3QgYWx3YXlzIHdvcmsuICBGb3IKK3RoaXMgcmVhc29uLCB5b3Ugc2hvdWxkIGJlIHByZXBhcmVkIHRvIHN1cHBseSB0aGVzZSBwYXJhbWV0ZXJzCit5b3Vyc2VsZi4gIChzZWUgIkNhcmQgQ29uZmlndXJhdGlvbiIgYmVsb3cgZm9yIGhvdyB0byBkZXRlcm1pbmUgb3IKK2NoYW5nZSB0aGUgc2V0dGluZ3Mgb24geW91ciBjYXJkKQorCitXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB5b3UgY2FuIGFkZCBhIGxpbmUgc3VjaAorYXMgdGhlIGZvbGxvd2luZyB0byB5b3VyIC9ldGMvbGlsby5jb25mOgorCisgYXBwZW5kPSJsdHBjPTB4MjQwLDksMSIKKword2hlcmUgdGhlIHBhcmFtZXRlcnMgKGluIG9yZGVyKSBhcmUgdGhlIHBvcnQgYWRkcmVzcywgSVJRLCBhbmQgRE1BCitjaGFubmVsLiAgVGhlIHNlY29uZCBhbmQgdGhpcmQgdmFsdWVzIGNhbiBiZSBvbWl0dGVkLCBpbiB3aGljaCBjYXNlCit0aGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGVtIGl0c2VsZi4KKworSWYgeW91IGxvYWQgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IGNhbiBwYXNzIHRoZSBwYXJhbWV0ZXJzICJpbz0iLAorImlycT0iLCBhbmQgImRtYT0iIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCBpbnNtb2Qgb3IgbW9kcHJvYmUsIG9yIGFkZAordGhlbSBhcyBvcHRpb25zIGluIC9ldGMvbW9kcHJvYmUuY29uZjoKKworIGFsaWFzIGx0MCBsdHBjICMgYXV0b2xvYWQgdGhlIG1vZHVsZSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgY29uZmlndXJlZAorIG9wdGlvbnMgbHRwYyBpbz0weDI0MCBpcnE9OSBkbWE9MQorCitCZWZvcmUgc3RhcnRpbmcgdXAgdGhlIG5ldGF0YWxrIGRlbW9ucyAocGVyaGFwcyBpbiByYy5sb2NhbCksIHlvdQorbmVlZCB0byBhZGQgYSBsaW5lIHN1Y2ggYXM6CisKKyAvc2Jpbi9pZmNvbmZpZyBsdDAgMTI3LjAuMC40MgorCitUaGUgYWRkcmVzcyBpcyB1bmltcG9ydGFudCAtIGhvd2V2ZXIsIHRoZSBjYXJkIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQKK3dpdGggaWZjb25maWcgc28gdGhhdCBOZXRhdGFsayBjYW4gZmluZCBpdC4KKworVGhlIGFwcHJvcHJpYXRlIG5ldGF0YWxrIGNvbmZpZ3VyYXRpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHlvdSBhcmUKK2F0dGFjaGVkIHRvIGEgbmV0d29yayB0aGF0IGluY2x1ZGVzIEFwcGxlVGFsayByb3V0ZXJzIG9yIG5vdC4gIElmLAorbGlrZSBtZSwgeW91IGFyZSBzaW1wbHkgY29ubmVjdGluZyB0byB5b3VyIGhvbWUgTWFjaW50b3NoZXMgYW5kCitwcmludGVycywgeW91IG5lZWQgdG8gc2V0IHVwIG5ldGF0YWxrIHRvICJzZWVkIi4gIFRoZSB3YXkgSSBkbyB0aGlzCitpcyB0byBoYXZlIHRoZSBsaW5lcworCisgZHVtbXkgLXNlZWQgLXBoYXNlIDIgLW5ldCAyMDAwIC1hZGRyIDIwMDAuMjYgLXpvbmUgIjEwMzMiCisgbHQwIC1zZWVkIC1waGFzZSAxIC1uZXQgMTAzMyAtYWRkciAxMDMzLjI3IC16b25lICIxMDMzIgorCitpbiBteSBhdGFsa2QuY29uZi4gIFdoYXQgaXMgZ29pbmcgb24gaGVyZSBpcyB0aGF0IEkgbmVlZCB0byBmb29sCituZXRhdGFsayBpbnRvIHRoaW5raW5nIHRoYXQgdGhlcmUgYXJlIHR3byBBcHBsZVRhbGsgaW50ZXJmYWNlcworcHJlc2VudDsgb3RoZXJ3aXNlLCBpdCByZWZ1c2VzIHRvIHNlZWQuICBUaGlzIGlzIGEgaGFjaywgYW5kIGEgbW9yZQorcGVybWFuZW50IHNvbHV0aW9uIHdvdWxkIGJlIHRvIGFsdGVyIHRoZSBuZXRhdGFsayBjb2RlLiAgQWxzbywgbWFrZQorc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZHVtbXkgaW50ZXJmYWNlIC0gSWYgaXQncworY29tcGlsZWQgYXMgYSBtb2R1bGUsIHlvdSB3aWxsIG5lZWQgdG8gcmVmZXIgdG8gaXQgYXMgImR1bW15MCIgb3Igc29tZQorc3VjaC4KKworSWYgeW91IGFyZSBhdHRhY2hlZCB0byBhbiBleHRlbmRlZCBBcHBsZVRhbGsgbmV0d29yaywgd2l0aCByb3V0ZXJzIG9uCitpdCwgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBmb29sIGFyb3VuZCB3aXRoIHRoaXMgLS0gdGhlIGFwcHJvcHJpYXRlCitsaW5lIGluIGF0YWxrZC5jb25mIGlzCisKKyBsdDAgLXBoYXNlIDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2FyZCBDb25maWd1cmF0aW9uOgorCitUaGUgaW50ZXJydXB0cyBhbmQgc28gZm9ydGggYXJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBkaXBzd2l0Y2ggb24gdGhlCitib2FyZC4gIFNldCB0aGUgc3dpdGNoZXMgc28gYXMgbm90IHRvIGNvbmZsaWN0IHdpdGggb3RoZXIgaGFyZHdhcmUuCisKKyAgICAgICBJbnRlcnJ1cHRzIC0tIHNldCBhdCBtb3N0IG9uZS4gIElmIG5vbmUgYXJlIHNldCwgdGhlIGRyaXZlciB1c2VzCisgICAgICAgcG9sbGVkIG1vZGUuICBCZWNhdXNlIHRoZSBjYXJkIHdhcyBkZXZlbG9wZWQgaW4gdGhlIFhUIGVyYSwgdGhlCisgICAgICAgb3JpZ2luYWwgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gSVJRMi4gIFNpbmNlIHlvdSdsbCBiZSBydW5uaW5nCisgICAgICAgdGhpcyBvbiBhbiBBVCAob3IgbGF0ZXIpIGNsYXNzIG1hY2hpbmUsIHRoYXQgcmVhbGx5IG1lYW5zIElSUTkuCisKKyAgICAgICBTVzEgICAgIElSUSA0CisgICAgICAgU1cyICAgICBJUlEgMworICAgICAgIFNXMyAgICAgSVJRIDkgKDIgaW4gb3JpZ2luYWwgY2FyZCBkb2N1bWVudGF0aW9uIG9ubHkgYXBwbGllcyB0byBYVCkKKworCisgICAgICAgRE1BIC0tIGNob29zZSBETUEgMSBvciAzLCBhbmQgc2V0IGJvdGggY29ycmVzcG9uZGluZyBzd2l0Y2hlcy4KKworICAgICAgIFNXNCAgICAgRE1BIDMKKyAgICAgICBTVzUgICAgIERNQSAxCisgICAgICAgU1c2ICAgICBETUEgMworICAgICAgIFNXNyAgICAgRE1BIDEKKworCisgICAgICAgSS9PIGFkZHJlc3MgLS0gY2hvb3NlIG9uZS4KKworICAgICAgIFNXOCAgICAgMjIwIC8gMjQwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lQOgorCitZZXMsIGl0IGlzIHBvc3NpYmxlIHRvIGRvIElQIG92ZXIgTG9jYWxUYWxrLiAgSG93ZXZlciwgeW91IGNhbid0IGp1c3QKK3RyZWF0IHRoZSBMb2NhbFRhbGsgZGV2aWNlIGxpa2UgYW4gb3JkaW5hcnkgRXRoZXJuZXQgZGV2aWNlLCBldmVuIGlmCit0aGF0J3Mgd2hhdCBpdCBsb29rcyBsaWtlIHRvIE5ldGF0YWxrLgorCitJbnN0ZWFkLCB5b3UgZm9sbG93IHRoZSBzYW1lIHByb2NlZHVyZSBhcyBmb3IgZG9pbmcgSVAgaW4gRXRoZXJUYWxrLgorU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGRkcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitrZXJuZWwgZHJpdmVyIGFuZCB1c2Vyc3BhY2UgdG9vbHMgbmVlZGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCVUdTOgorCitJUlEgYXV0b3Byb2Jpbmcgb2Z0ZW4gZG9lc24ndCB3b3JrIG9uIGEgY29sZCBib290LiAgVG8gZ2V0IGFyb3VuZAordGhpcywgZWl0aGVyIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgb3IgcGFzcyB0aGUgcGFyYW1ldGVycworZm9yIHRoZSBjYXJkIHRvIHRoZSBrZXJuZWwgYXMgZGVzY3JpYmVkIGFib3ZlLgorCitBbHNvLCBhcyB1c3VhbCwgYXV0b3Byb2JpbmcgaXMgbm90IHJlY29tbWVuZGVkIHdoZW4geW91IHVzZSB0aGUgZHJpdmVyCithcyBhIG1vZHVsZS4gKHRob3VnaCBpdCB1c3VhbGx5IHdvcmtzIGF0IGJvb3QgdGltZSwgYXQgbGVhc3QpCisKK1BvbGxlZCBtb2RlIGlzICpyZWFsbHkqIHNsb3cgc29tZXRpbWVzLCBidXQgdGhpcyBzZWVtcyB0byBkZXBlbmQgb24KK3RoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBuZXR3b3JrLgorCitJdCBtYXkgdGhlb3JldGljYWxseSBiZSBwb3NzaWJsZSB0byB1c2UgdHdvIExUUEMgY2FyZHMgaW4gdGhlIHNhbWUKK21hY2hpbmUsIGJ1dCB0aGlzIGlzIHVuc3VwcG9ydGVkLCBzbyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhpcywKK3lvdSdsbCBwcm9iYWJseSBoYXZlIHRvIGhhY2sgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUgYSBiaXQuCisKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RIQU5LUzoKKwlUaGFua3MgdG8gQWxhbiBDb3ggZm9yIGhlbHBmdWwgZGlzY3Vzc2lvbnMgZWFybHkgb24gaW4gdGhpcword29yaywgYW5kIHRvIERlbmlzIEhhaW5zd29ydGggZm9yIGRvaW5nIHRoZSBibGVlZGluZy1lZGdlIHRlc3RpbmcuCisKKy0tIEJyYWRmb3JkIEpvaG5zb24gPGJyYWRmb3JkQG1hdGgudW1uLmVkdT4KKworLS0gVXBkYXRlZCAxMS8wOS8xOTk4IGJ5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tdWx0aWNhc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpY2FzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0OWE2NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9tdWx0aWNhc3QudHh0CkBAIC0wLDAgKzEsNjQgQEAKK0JlaGF2aW91ciBvZiBDYXJkcyBVbmRlciBNdWx0aWNhc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBob3cgdGhleSBjdXJyZW50bHkgYmVoYXZlLCBub3Qgd2hhdCB0aGUgaGFyZHdhcmUgY2FuIGRvLS1mb3IgZXhhbXBsZSwKK3RoZSBMYW5jZSBkcml2ZXIgZG9lc24ndCB1c2UgaXRzIGZpbHRlciwgZXZlbiB0aG91Z2ggdGhlIGNvZGUgZm9yIGxvYWRpbmcKK2l0IGlzIGluIHRoZSBERUMgTGFuY2UtYmFzZWQgZHJpdmVyLgorCitUaGUgZm9sbG93aW5nIGFyZSByZXF1aXJlbWVudHMgZm9yIG11bHRpY2FzdGluZyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBcHBsZVRhbGsJTXVsdGljYXN0CWhhcmR3YXJlIGZpbHRlcmluZyBub3QgaW1wb3J0YW50IGJ1dAorCQkJCSBhdm9pZCBjYXJkcyBvbmx5IGRvaW5nIHByb21pc2MKK0lQLU11bHRpY2FzdAlNdWx0aWNhc3QJaGFyZHdhcmUgZmlsdGVycyByZWFsbHkgaGVscAorSVAtTVJvdXRlCUFsbE11bHRpCWhhcmR3YXJlIGZpbHRlcnMgYXJlIG9mIG5vIGhlbHAKKworCitCb2FyZAkJTXVsdGljYXN0CUFsbE11bHRpCVByb21pc2MJCUZpbHRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszYzUwMQkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUKKzNjNTAzCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorM2M1MDUJCVlFUwkJTk8JCVlFUwkJSGFyZHdhcmUKKzNjNTA3CQlOTwkJTk8JCU5PCQlOL0EKKzNjNTA5CQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorM2M1OXgJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlCithYzMyMDAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCithcHJpY290CQlZRVMJCVBST01JU0MJCVlFUwkJSGFyZHdhcmUKK2FyY25ldAkJTk8JCU5PCQlOTwkJTi9BCithdDE3MDAJCVBST01JU0MJCVBST01JU0MJCVlFUwkJU29mdHdhcmUKK2F0cAkJUFJPTUlTQwkJUFJPTUlTQwkJWUVTCQlTb2Z0d2FyZQorY3M4OXgwCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorZGU0eDUJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitkZTYwMAkJTk8JCU5PCQlOTwkJTi9BCitkZTYyMAkJUFJPTUlTQwkJUFJPTUlTQwkJWUVTCQlTb2Z0d2FyZQorZGVwY2EJCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQorZG1mZQkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUoKikKK2UyMTAwCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorZWVwcm8JCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQorZWV4cHJlc3MJTk8JCU5PCQlOTwkJTi9BCitld3JrMwkJWUVTCQlQUk9NSVNDCQlZRVMJCUhhcmR3YXJlCitocC1wbHVzCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQoraHAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitocDEwMAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2libXRyCQlOTwkJTk8JCU5PCQlOL0EKK2lvYzMtZXRoCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitsYW5jZQkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUoIykKK25lCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorbmk1MgkJPC0tLS0tLS0tLS0tLS0tLS0tLSBCdWdneSAtLS0tLS0tLS0tLS0tLS0tLS0+CituaTY1CQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZSgjKQorc2VlcQkJTk8JCU5PCQlOTwkJTi9BCitzZ2lzZWVrCQk8LS0tLS0tLS0tLS0tLS0tLS0tIEJ1Z2d5IC0tLS0tLS0tLS0tLS0tLS0tLT4KK3NrX2cxNgkJTk8JCU5PCQlZRVMJCU4vQQorc21jLXVsdHJhCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitzdW5sYW5jZQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQordHVsaXAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit3YXZlbGFuCQlZRVMJCVBST01JU0MJCVlFUwkJSGFyZHdhcmUKK3dkCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQoreGlyYzJwc19jcwlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQorem5ldAkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUKKworCitQUk9NSVNDID0gVGhpcyBtdWx0aWNhc3QgbW9kZSBpcyBpbiBmYWN0IHByb21pc2N1b3VzIG1vZGUuIEF2b2lkIHVzaW5nCitjYXJkcyB3aG8gZ28gUFJPTUlTQyBvbiBhbnkgbXVsdGljYXN0IGluIGEgbXVsdGljYXN0IGtlcm5lbC4KKworKCMpID0gSGFyZHdhcmUgbXVsdGljYXN0IHN1cHBvcnQgaXMgbm90IHVzZWQgeWV0LgorKCopID0gSGFyZHdhcmUgc3VwcG9ydCBmb3IgRGF2aWNvbSA5MTMyIGNoaXBzZXQgb25seS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uY3NhLXRlbG5ldCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uY3NhLXRlbG5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdkMjhiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25jc2EtdGVsbmV0CkBAIC0wLDAgKzEsMTYgQEAKK05DU0EgdGVsbmV0IGRvZXNuJ3Qgd29yayB3aXRoIHBhdGggTVRVIGRpc2NvdmVyeSBlbmFibGVkLiBUaGlzIGlzIGR1ZSB0byBhCitidWcgaW4gTkNTQSB0aGF0IGFsc28gc3RvcHMgaXQgd29ya2luZyB3aXRoIG90aGVyIG1vZGVybiBuZXR3b3JraW5nIGNvZGUKK3N1Y2ggYXMgU29sYXJpcy4KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBjb3VydGVzeSBvZiAKK01hcmVrIDxtYXJla21AaTE3bGludXhiLmlzdHMucHdyLndyb2MucGw+CisKK1RoZXJlIGlzIGEgZml4ZWQgdmVyc2lvbiBzb21ld2hlcmUgb24gZnRwLnVwZS5hYy56YSAoc29ycnksIEkgZG9uJ3QKK3JlbWVtYmVyIHRoZSBleGFjdCBwYXRobmFtZSwgYW5kIHRoaXMgc2l0ZSBpcyB2ZXJ5IHNsb3cgZnJvbSBoZXJlKS4KK0l0IG1heSBvciBtYXkgbm90IGJlIGZhc3RlciBmb3IgeW91IHRvIGdldCBpdCBmcm9tCitmdHA6Ly9mdHAuaXN0cy5wd3Iud3JvYy5wbC9wdWIvbXNkb3MvdGVsbmV0L25jc2FfdXBlL3RlbDIzMDc0LnppcAorKHNvdXJjZSBpcyBpbiB2MjMwNzA0cy56aXApLiAgSSBoYXZlIHRlc3RlZCBpdCB3aXRoIDEuMy43OSAod2l0aAorcGF0aCBtdHUgZGlzY292ZXJ5IGVuYWJsZWQgLSBuY3NhIDIuMy4wOCBkaWRuJ3Qgd29yaykgYW5kIGl0IHNlZW1zCit0byB3b3JrLiAgSSBkb24ndCBrbm93IGlmIGFueW9uZSBpcyB3b3JraW5nIG9uIHRoaXMgY29kZSAtIHRoaXMKK3ZlcnNpb24gaXMgb3ZlciBhIHllYXIgb2xkLiAgVG9vIGJhZCAtIGl0J3MgZmFzdGVyIGFuZCBvZnRlbiBtb3JlCitzdGFibGUgdGhhbiB0aGVzZSB3aW5kb3plIHRlbG5ldHMsIGFuZCBydW5zIG9uIGFsbW9zdCBhbnl0aGluZy4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXQtbW9kdWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMGE4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXQtbW9kdWxlcy50eHQKQEAgLTAsMCArMSwzMjQgQEAKK1dlZCAyLUF1Zy05NSAgPG1hdHRpLmFhcm5pb0B1dHUuZmk+CisKKwkJTGludXggbmV0d29yayBkcml2ZXIgbW9kdWxlcworCisJRG8gbm90IG1pc3Rha2UgdGhpcyBmb3IgIlJFQURNRS5tb2R1bGVzIiBhdCB0aGUgdG9wLWxldmVsCisJZGlyZWN0b3J5ISAgVGhhdCBkb2N1bWVudCB0ZWxscyBhYm91dCBtb2R1bGVzIGluIGdlbmVyYWwsIHdoaWxlCisJdGhpcyBvbmUgdGVsbHMgb25seSBhYm91dCBuZXR3b3JrIGRldmljZSBkcml2ZXIgbW9kdWxlcy4KKworCVRoaXMgaXMgYSBwb3Rwb3Vycmkgb2YgSU5TTU9ELXRpbWUoKikgY29uZmlndXJhdGlvbiBvcHRpb25zCisJKGlmIHN1Y2ggZXhpc3RzKSBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgb2YgdmFyaW91cyBtb2R1bGVzCisJaW4gdGhlIExpbnV4IG5ldHdvcmsgZHJpdmVycyBjb2xsZWN0aW9uLgorCisJU29tZSBtb2R1bGVzIGhhdmUgYWxzbyBoaWRkZW4gKD0gbm9uLWRvY3VtZW50ZWQpIHR1bmFibGUgdmFsdWVzLgorCVRoZSBjaG9pY2Ugb2Ygbm90IGRvY3VtZW50aW5nIHRoZW0gaXMgYmFzZWQgb24gZ2VuZXJhbCBiZWxpZWYsIHRoYXQKKwl0aGUgbGVzcyB0aGUgdXNlciBuZWVkcyB0byBrbm93LCB0aGUgYmV0dGVyLiAgKFRoZXJlIGFyZSB0aGluZ3MgdGhhdAorCWRyaXZlciBkZXZlbG9wZXJzIGNhbiB1c2UsIG90aGVycyBzaG91bGQgbm90IGNvbmZ1c2UgdGhlbXNlbHZlcy4pCisKKwlJbiBtYW55IGNhc2VzIGl0IGlzIGhpZ2hseSBwcmVmZXJyZWQgdGhhdCBpbnNtb2Q6aW5nIGlzIGRvbmUKKwlPTkxZIHdpdGggZGVmaW5pbmcgYW4gZXhwbGljaXQgYWRkcmVzcyBmb3IgdGhlIGNhcmQsIEFORCBCWQorCU5PVCBVU0lORyBBVVRPLVBST0JJTkchCisKKwlOb3cgbW9zdCBjYXJkcyBoYXZlIHNvbWUgZXhwbGljaXRseSBkZWZpbmVkIGJhc2UgYWRkcmVzcyB0aGF0IHRoZXkKKwlhcmUgY29tcGlsZWQgd2l0aCAodG8gYXZvaWQgYXV0by1wcm9iaW5nLCBhbW9uZyBvdGhlciB0aGluZ3MpLgorCUlmIHRoYXQgY29tcGlsZWQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggeW91ciBhY3R1YWwgY29uZmlndXJhdGlvbiwKKwlkbyB1c2UgdGhlICJpbz0weFhYWCIgLXBhcmFtZXRlciBmb3IgdGhlIGluc21vZCwgYW5kIGdpdmUgdGhlcmUKKwlhIHZhbHVlIG1hdGNoaW5nIHlvdXIgZW52aXJvbm1lbnQuCisKKwlJZiB5b3UgYXJlIGFkdmVudHVyb3VzLCB5b3UgY2FuIGFzayB0aGUgZHJpdmVyIHRvIGF1dG9wcm9iZQorCWJ5IHVzaW5nIHRoZSAiaW89MCIgcGFyYW1ldGVyLCBob3dldmVyIGl0IGlzIGEgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzCisJdGhpbmcgdG8gZG8gaW4gYSBsaXZlIHN5c3RlbS4gIChJZiB5b3UgZG9uJ3Qga25vdyB3aGVyZSB0aGUKKwljYXJkIGlzIGxvY2F0ZWQsIHlvdSBjYW4gdHJ5IGF1dG9wcm9iaW5nLCBhbmQgYWZ0ZXIgcG9zc2libGUKKwljcmFzaCByZWNvdmVyeSwgaW5zbW9kIHdpdGggcHJvcGVyIElPLWFkZHJlc3MuLikKKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJKCopCSJJTlNNT0QtdGltZSIgbWVhbnMgd2hlbiB5b3UgbG9hZCBtb2R1bGUgd2l0aAorCQkvc2Jpbi9pbnNtb2QgIHlvdSBjYW4gZmVlZCBpdCBvcHRpb25hbCBwYXJhbWV0ZXJzLgorCQlTZWUgIm1hbiBpbnNtb2QiLgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCTgzOTAgYmFzZWQgTmV0d29yayBNb2R1bGVzCQkoUGF1bCBHb3J0bWFrZXIsIE5vdiAxMiwgMTk5NSkKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoSW5jbHVkZXM6IHNtYy11bHRyYSwgbmUsIHdkLCAzYzUwMywgaHAsIGhwLXBsdXMsIGUyMTAwIGFuZCBhYzMyMDApCisKK1RoZSA4MzkwIHNlcmllcyBvZiBuZXR3b3JrIGRyaXZlcnMgbm93IHN1cHBvcnQgbXVsdGlwbGUgY2FyZCBzeXN0ZW1zIHdpdGhvdXQgCityZWxvYWRpbmcgdGhlIHNhbWUgbW9kdWxlIG11bHRpcGxlIHRpbWVzIChtZW1vcnkgZWZmaWNpZW50ISkgVGhpcyBpcyBkb25lIGJ5IAorc3BlY2lmeWluZyBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLCBzdWNoIGFzOgorCisJaW5zbW9kIDNjNTAzLm8gaW89MHgyODAsMHgzMDAsMHgzMzAsMHgzNTAgIHhjdnI9MCwxLDAsMQorCitUaGUgYWJvdmUgd291bGQgaGF2ZSB0aGUgb25lIG1vZHVsZSBjb250cm9sbGluZyBmb3VyIDNjNTAzIGNhcmRzLCB3aXRoIGNhcmQgMgorYW5kIDQgdXNpbmcgZXh0ZXJuYWwgdHJhbnNjZWl2ZXJzLiBUaGUgImluc21vZCIgbWFudWFsIGRlc2NyaWJlcyB0aGUgdXNhZ2UKK29mIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZSBsaXN0cy4KKworSXQgaXMgKlNUUk9OR0xZIFJFQ09NTUVOREVEKiB0aGF0IHlvdSBzdXBwbHkgImlvPSIgaW5zdGVhZCBvZiBhdXRvcHJvYmluZy4KK0lmIGFuICJpbz0iIGFyZ3VtZW50IGlzIG5vdCBzdXBwbGllZCwgdGhlbiB0aGUgSVNBIGRyaXZlcnMgd2lsbCBjb21wbGFpbgorYWJvdXQgYXV0b3Byb2JpbmcgYmVpbmcgbm90IHJlY29tbWVuZGVkLCBhbmQgYmVncnVkZ2luZ2x5IGF1dG9wcm9iZSBmb3IKK2EgKlNJTkdMRSBDQVJEIE9OTFkqIC0tIGlmIHlvdSB3YW50IHRvIHVzZSBtdWx0aXBsZSBjYXJkcyB5b3UgKmhhdmUqIHRvIAorc3VwcGx5IGFuICJpbz0weE5OTiwweFFRUSwuLi4iIGFyZ3VtZW50LgorCitUaGUgbmUgbW9kdWxlIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUuIEEgTkUyMDAwIGlzIGVzc2VudGlhbGx5IGFuCis4MzkwIGNoaXAsIHNvbWUgYnVzIGdsdWUgYW5kIHNvbWUgUkFNLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBuZSBwcm9iZSBpcworbW9yZSBpbnZhc2l2ZSB0aGFuIHRoZSByZXN0LCBhbmQgc28gYXQgYm9vdCB3ZSBtYWtlIHN1cmUgdGhlIG5lIHByb2JlIGlzIAorZG9uZSBsYXN0IG9mIGFsbCB0aGUgODM5MCBjYXJkcyAoc28gdGhhdCBpdCB3b24ndCB0cmlwIG92ZXIgb3RoZXIgODM5MCBiYXNlZAorY2FyZHMpIFdpdGggbW9kdWxlcyB3ZSBjYW4ndCBlbnN1cmUgdGhhdCBhbGwgb3RoZXIgbm9uLW5lIDgzOTAgY2FyZHMgaGF2ZQorYWxyZWFkeSBiZWVuIGZvdW5kLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBuZSBtb2R1bGUgUkVRVUlSRVMgYW4gImlvPTB4Tk5OIiAKK2FyZ3VtZW50IHBhc3NlZCBpbiB2aWEgaW5zbW9kLiBJdCB3aWxsIHJlZnVzZSB0byBhdXRvcHJvYmUuCisKK0l0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgYXV0by1JUlEgcHJvYmFibHkgaXNuJ3QgYXMgcmVsaWFibGUgZHVyaW5nIAordGhlIGZsdXJyeSBvZiBpbnRlcnJ1cHQgYWN0aXZpdHkgb24gYSBydW5uaW5nIG1hY2hpbmUuIENhcmRzIHN1Y2ggYXMgdGhlIAorbmUyMDAwIHRoYXQgY2FuJ3QgZ2V0IHRoZSBJUlEgc2V0dGluZyBmcm9tIGFuIEVFUFJPTSBvciBjb25maWd1cmF0aW9uCityZWdpc3RlciBhcmUgcHJvYmFibHkgYmVzdCBzdXBwbGllZCB3aXRoIGFuICJpcnE9TSIgYXJndW1lbnQgYXMgd2VsbC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXJkL01vZHVsZSBMaXN0IC0gQ29uZmlndXJhYmxlIFBhcmFtZXRlcnMgYW5kIERlZmF1bHQgVmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzNjNTAxLmM6CisJaW8gID0gMHgyODAJSU8gYmFzZSBhZGRyZXNzCisJaXJxID0gNQkJSVJRCisJKFByb2JlcyBwb3J0czoJMHgyODAsIDB4MzAwKQorCiszYzUwMy5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgc29mdHdhcmUgc2VsZWN0ZWQgYnkgZHJpdmVyIHVzaW5nIGF1dG9JUlEpCisJeGN2ciA9IDAJKFVzZSB4Y3ZyPTEgdG8gc2VsZWN0IGV4dGVybmFsIHRyYW5zY2VpdmVyLikKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgzMTAsIDB4MzMwLCAweDM1MCwgMHgyNTAsIDB4MjgwLCAweDJBMCwgMHgyRTApCisKKzNjNTA1LmM6CisJaW8gPSAwCisJaXJxID0gMAorCWRtYSA9IDYgICAgICAgICAobm90IGF1dG9wcm9iZWQpCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MjgwLCAweDMxMCkKKworM2M1MDcuYzoKKwlpbyA9IDB4MzAwCisJaXJxID0gMAorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MjgwKQorCiszYzUwOS5jOgorCWlvID0gMAorCWlycSA9IDAKKwkoIE1vZHVsZSBsb2FkLXRpbWUgcHJvYmluZyBXb3JrcyByZWxpYWJseSBvbmx5IG9uIEVJU0EsIElTQSBJRC1QUk9CRQorCSAgSVMgTk9UIFJFTElBQkxFISAgQ29tcGlsZSB0aGlzIGRyaXZlciBzdGF0aWNhbGx5IGludG8ga2VybmVsIGZvcgorCSAgbm93LCBpZiB5b3UgbmVlZCBpdCBhdXRvLXByb2Jpbmcgb24gYW4gSVNBLWJ1cyBtYWNoaW5lLiApCisKKzgzOTAuYzoKKwkoTm8gcHVibGljIG9wdGlvbnMsIHNldmVyYWwgb3RoZXIgbW9kdWxlcyBuZWVkIHRoaXMgb25lKQorCithMjA2NS5jOgorCVNpbmNlIHRoaXMgaXMgYSBab3JybyBib2FyZCwgaXQgc3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZywgZXZlbiBmb3IKKwltdWx0aXBsZSBib2FyZHMuIChtNjhrL0FtaWdhKQorCithYzMyMDAuYzoKKwlpbyA9IDAJCShDaGVja3MgMHgxMDAwIHRvIDB4OGZmZiBpbiAweDEwMDAgaW50ZXJ2YWxzKQorCWlycSA9IDAJCShSZWFkIGZyb20gY29uZmlnIHJlZ2lzdGVyKQorCShFSVNBIHByb2JpbmcuLikKKworYXByaWNvdC5jOgorCWlvID0gMHgzMDAgIChDYW4ndCBiZSBhbHRlcmVkISkKKwlpcnEgPSAxMAorCithcmNuZXQuYzoKKwlpbyA9IDAKKwlpcnFudW0gPSAwCisJc2htZW0gPSAwCisJbnVtID0gMAorCURPIFNFVCBUSEVTRSBNQU5VQUxMWSBBVCBJTlNNT0QhCisJKFdoZW4gcHJvYmluZywgbG9va3MgYXQgdGhlIGZvbGxvd2luZyBwb3NzaWJsZSBhZGRyZXNzZXM6CisJIFN1Z2dlc3RlZCBvbmVzOgorCQkweDMwMCwgMHgyRTAsIDB4MkYwLCAweDJEMAorCSBPdGhlciBvbmVzOgorCQkweDIwMCwgMHgyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAsIDB4MjUwLCAweDI2MCwgMHgyNzAsCisJCTB4MjgwLCAweDI5MCwgMHgyQTAsIDB4MkIwLCAweDJDMCwKKwkJICAgICAgIDB4MzEwLCAweDMyMCwgMHgzMzAsIDB4MzQwLCAweDM1MCwgMHgzNjAsIDB4MzcwLAorCQkweDM4MCwgMHgzOTAsIDB4M0EwLAkJCSAgMHgzRTAsIDB4M0YwICApCisKK2FyaWFkbmUuYzoKKwlTaW5jZSB0aGlzIGlzIGEgWm9ycm8gYm9hcmQsIGl0IHN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcsIGV2ZW4gZm9yCisJbXVsdGlwbGUgYm9hcmRzLiAobTY4ay9BbWlnYSkKKworYXQxNzAwLmM6CisJaW8gPSAweDI2MAorCWlycSA9IDAKKwkoUHJvYmVzIHBvcnRzOiAweDI2MCwgMHgyODAsIDB4MkEwLCAweDI0MCwgMHgzNDAsIDB4MzIwLCAweDM4MCwgMHgzMDApCisKK2F0YXJpX2Jpb25ldC5jOgorCVN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcuIChtNjhrL0F0YXJpKQorCithdGFyaV9wYW1zbmV0LmM6CisJU3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZy4gKG02OGsvQXRhcmkpCisKK2F0YXJpbGFuY2UuYzoKKwlTdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLiAobTY4ay9BdGFyaSkKKworYXRwLmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFByb2JlcyBwb3J0czogMHgzNzgsIDB4Mjc4LCAweDNCQzsKKwkgZml4ZWQgSVJRczogNSBhbmQgNwkJCSkKKworY29wcy5jOgorCWlvID0gMHgyNDAKKwlpcnEgPSA1CisJbm9kZWlkID0gMAkoQXV0b1NlbGVjdCA9IDAsIE5vZGVJRCAxLTI1NCBpcyBoYW5kIHNlbGVjdGVkLikKKwkoUHJvYmVzIHBvcnRzOiAweDI0MCwgMHgzNDAsIDB4MjAwLCAweDIxMCwgMHgyMjAsIDB4MjMwLCAweDI2MCwKKwkJICAgICAgIDB4MkEwLCAweDMwMCwgMHgzMTAsIDB4MzIwLCAweDMzMCwgMHgzNTAsIDB4MzYwKQkKKworZGU0eDUuYzoKKwlpbyA9IDB4MDAwYgorCWlycSA9IDEwCisJaXNfbm90X2RlYyA9IDAgIC0tIEZvciBub24tREVDIGNhcmQgdXNpbmcgREVDIDIxMDQwLzIxMDQxLzIxMTQwIGNoaXAsIHNldCB0aGlzIHRvIDEKKwkoRUlTQSwgYW5kIFBDSSBwcm9iaW5nKQorCitkZTYwMC5jOgorCWRlNjAwX2RlYnVnID0gMAorCShPbiBwb3J0IDB4Mzc4LCBpcnEgNyAtLSBscHQxOyAgY29tcGlsZSB0aW1lIGNvbmZpZ3VyYWJsZSkKKworZGU2MjAuYzoKKwlibmMgPSAwLCB1dHAgPSAwICA8LS0gRm9yY2UgbWVkaWEgYnkgc2V0dGluZyBlaXRoZXIuCisJaW8gPSAweDM3OAkoYWxzbyBjb21waWxlLXRpbWUgY29uZmlndXJhYmxlKQorCWlycSA9IDcKKworZGVwY2EuYzoKKwlpbyA9IDB4MjAwCisJaXJxID0gNworCShQcm9iZXMgcG9ydHM6CUlTQTogIDB4MzAwLCAweDIwMDsKKwkJCUVJU0E6IDB4MGMwMAkJKQorCitkdW1teS5jOgorCU5vIG9wdGlvbnMKKworZTIxMDAuYzoKKwlpbyA9IDAJCShJdCB3aWxsIGNvbXBsYWluIGlmIHlvdSBkb24ndCBzdXBwbHkgYW4gImlvPTB4Tk5OIikKKwlpcnEgPSAwCQkoSVJRIHNvZnR3YXJlIHNlbGVjdGVkIGJ5IGRyaXZlcikKKwltZW0gPSAwCQkoT3ZlcnJpZGUgZGVmYXVsdCBzaGFyZWQgbWVtb3J5IHN0YXJ0IG9mIDB4ZDAwMDApCisJeGN2ciA9IDAJKFVzZSB4Y3ZyPTEgdG8gc2VsZWN0IGV4dGVybmFsIHRyYW5zY2VpdmVyLikKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgyODAsIDB4MzgwLCAweDIyMCkKKworZWVwcm8uYzoKKwlpbyA9IDB4MjAwCisJaXJxID0gMAorCShQcm9iZXMgcG9ydHM6IDB4MjAwLCAweDI0MCwgMHgyODAsIDB4MkMwLCAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworZWV4cHJlc3MuYzoKKwlpbyA9IDB4MzAwCisJaXJxID0gMAkJKElSUSB2YWx1ZSByZWFkIGZyb20gRUVQUk9NKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDI3MCwgMHgzMjAsIDB4MzQwKQorCitlcWwuYzoKKwkoTm8gcGFyYW1ldGVycykKKworZXdyazMuYzoKKwlpbyA9IDB4MzAwCisJaXJxID0gNQorCShXaXRoIG1vZHVsZSBubyBhdXRvcHJvYmluZyEKKwkgT24gRUlTQS1idXMgZG9lcyBFSVNBIHByb2JpbmcuCisJIFN0YXRpYyBsaW5rYWdlIHByb2JlcyBwb3J0cyBvbiBJU0EgYnVzOgorCQkweDEwMCwgMHgxMjAsIDB4MTQwLCAweDE2MCwgMHgxODAsIDB4MUEwLCAweDFDMCwKKwkJMHgyMDAsIDB4MjIwLCAweDI0MCwgMHgyNjAsIDB4MjgwLCAweDJBMCwgMHgyQzAsIDB4MkUwLAorCQkweDMwMCwgICAgICAgIDB4MzQwLCAweDM2MCwgMHgzODAsIDB4M0EwLCAweDNDMCkKKworaHAtcGx1cy5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgcmVhZCBmcm9tIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIpCisJKFByb2JlcyBwb3J0czogMHgyMDAsIDB4MjQwLCAweDI4MCwgMHgyQzAsIDB4MzAwLCAweDMyMCwgMHgzNDApCisKK2hwLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSBzb2Z0d2FyZSBzZWxlY3RlZCBieSBkcml2ZXIgdXNpbmcgYXV0b0lSUSkKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDI4MCwgMHgyQzAsIDB4MjAwLCAweDI0MCkKKworaHAxMDAuYzoKKwlocDEwMF9wb3J0ID0gMCAoSU8tYmFzZSBhZGRyZXNzKQorCShEb2VzIEVJU0EtcHJvYmluZywgaWYgb24gRUlTQS1zbG90OworCSBPbiBJU0EtYnVzIHByb2JlcyBhbGwgcG9ydHMgZnJvbSAweDEwMCB0aHJ1IHRvIDB4M0UwCisJIGluIGluY3JlbWVudHMgb2YgMHgwMjApCisKK2h5ZHJhLmM6CisJU2luY2UgdGhpcyBpcyBhIFpvcnJvIGJvYXJkLCBpdCBzdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLCBldmVuIGZvcgorCW11bHRpcGxlIGJvYXJkcy4gKG02OGsvQW1pZ2EpCisKK2libXRyLmM6CisJaW8gPSAweGEyMCwgMHhhMjQgKGF1dG9wcm9iZWQgYnkgZGVmYXVsdCkKKwlpcnEgPSAwIChkcml2ZXIgY2Fubm90IHNlbGVjdCBpcnEgLSByZWFkIGZyb20gaGFyZHdhcmUpCisJbWVtID0gMCAoc2hhcmVkIG1lbW9yeSBiYXNlIHNldCBhdCAweGQwMDAwIGFuZCBub3QgeWV0IAorCSAgICAgICAgIGFibGUgdG8gb3ZlcnJpZGUgdGhydSBtZW09IHBhcmFtZXRlci4pCisKK2xhbmNlLmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFBDSSwgYW5kIElTQSBwcm9iaW5nOyAiQ09ORklHX1BDSSIgbmVlZGVkIGZvciBQQ0kgc3VwcG9ydCkKKwkoUHJvYmVzIElTQSBwb3J0czogMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjApCisKK2xvb3BiYWNrLmM6ICpTdGF0aWMga2VybmVsIGNvbXBvbmVudCoKKworbmUuYzoKKwlpbyA9IDAJCShFeHBsaWNpdGx5ICpyZXF1aXJlcyogYW4gImlvPTB4Tk5OIiB2YWx1ZSkKKwlpcnEgPSAwCQkoVHJpZXMgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgSVJRIHZpYSBhdXRvSVJRKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDI4MCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworbmV0X2luaXQuYzogKlN0YXRpYyBrZXJuZWwgY29tcG9uZW50KgorCituaTUyLmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFByb2JlcyBwb3J0czoJMHgzMDAsIDB4MjgwLCAweDM2MCwgMHgzMjAsIDB4MzQwCisJCW1lbXM6CTB4RDAwMDAsIDB4RDIwMDAsIDB4QzgwMDAsIDB4Q0EwMDAsCisJCQkweEQ0MDAwLCAweEQ2MDAwLCAweEQ4MDAwICkKKworbmk2NS5jOiAqTm90IG1vZHVsYXJpemVkKiAgKioxNk1CIE1FTU9SWSBCQVJSSUVSIEJVRyoqCisJKFByb2JlcyBwb3J0czoJMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjApCisKK3BpMi5jOgkqTm90IG1vZHVsYXJpemVkKiAod2VsbCwgTk9OLVNUQU5EQVJEIG1vZHVsYXJpemF0aW9uISkKKwlPbmx5IG9uZSBjYXJkIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuCisJKFByb2JlcyBwb3J0czogMHgzODAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAweDNBMCkKKworcGxpcC5jOgorCWlvID0gMAorCWlycSA9IDAJCShieSBkZWZhdWx0LCB1c2VzIElSUSA1IGZvciBwb3J0IGF0IDB4M2JjLCBJUlEgNworCQkJZm9yIHBvcnQgYXQgMHgzNzgsIGFuZCBJUlEgMiBmb3IgcG9ydCBhdCAweDI3OCkKKwkoUHJvYmVzIHBvcnRzOiAweDI3OCwgMHgzNzgsIDB4M2JjKQorCitwcHAuYzoKKwlObyBvcHRpb25zIChwcHAtMi4yKyBoYXMgc29tZSwgdGhpcyBpcyBiYXNlZCBvbiBub24tZHluYW1pYworCXZlcnNpb24gZnJvbSBwcHAtMi4xLjJkKQorCitzZWVxODAwNS5jOiAqTm90IG1vZHVsYXJpemVkKgorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwKQorCitza19nMTYuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUHJvYmVzIHBvcnRzOiAweDEwMCwgMHgxODAsIDB4MjA4LCAweDIyMG0gMHgyODgsIDB4MzIwLCAweDMyOCwgMHgzOTApCisKK3NrZWxldG9uLmM6ICpTa2VsZXRvbioKKworc2xoYy5jOgorCU5vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworCitzbGlwLmM6CisJc2xpcF9tYXhkZXYgPSAyNTYgKGRlZmF1bHQgdmFsdWUgZnJvbSBTTF9OUlVOSVQgb24gc2xpcC5oKQorCisKK3NtYy11bHRyYS5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgdmFsLiByZWFkIGZyb20gRUVQUk9NKQorCShQcm9iZXMgcG9ydHM6CTB4MjAwLCAweDIyMCwgMHgyNDAsIDB4MjgwLCAweDMwMCwgMHgzNDAsIDB4MzgwKQorCit0dWxpcC5jOiAqUGFydGlhbCBtb2R1bGFyaXphdGlvbioKKwkoaW5pdC10aW1lIG1lbW9yeSBhbGxvY2F0aW9uIG1ha2VzIHByb2JsZW1zLi4pCisKK3R1bm5lbC5jOgorCU5vIGluc21vZCBwYXJhbWV0ZXJzCisKK3dhdmVsYW4uYzoKKwlpbyA9IDB4MzkwCShTZXR0YWJsZSwgYnV0IGNoYW5nZSBub3QgcmVjb21tZW5kZWQpCisJaXJxID0gMAkJKE5vdCBob25vdXJlZCwgaWYgY2hhbmdlZC4uKQorCit3ZC5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgdmFsLiByZWFkIGZyb20gRUVQUk9NLCBhbmNpZW50IGNhcmRzIHVzZSBhdXRvSVJRKQorCW1lbSA9IDAJCShGb3JjZSBzaGFyZWQtbWVtb3J5IG9uIGFkZHJlc3MgMHhDODAwMCwgb3Igd2hhdGV2ZXIuLikKKwltZW1fZW5kID0gMAkoRm9yY2Ugbm9uLXN0ZC4gbWVtLiBzaXplIHZpYSBzdXBwbHlpbmcgbWVtX2VuZCB2YWwuKQorCQkJKGVnLiBmb3IgMzJrIFdEODAwM0VCVCwgdXNlIG1lbT0weGQwMDAwIG1lbV9lbmQ9MHhkODAwMCkKKwkoUHJvYmVzIHBvcnRzOgkweDMwMCwgMHgyODAsIDB4MzgwLCAweDI0MCkKKworem5ldC5jOiAqTm90IG1vZHVsYXJpemVkKgorCShPbmx5IG9uZSBkZXZpY2Ugb24gIFplbml0aCBaLU5vdGUgKG5vdGVib29rPykgc3lzdGVtcywKKwkgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIChFRSlQUk9NKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQKQEAgLTAsMCArMSw1NyBAQAorCitzdGFydGVkIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPiwgMjAwMS4wOS4xNworMi42IHBvcnQgYW5kIG5ldHBvbGwgYXBpIGJ5IE1hdHQgTWFja2FsbCA8bXBtQHNlbGVuaWMuY29tPiwgU2VwIDkgMjAwMworCitQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBNYXR0IE1hY2thbGwgPG1wbUBzZWxlbmljLmNvbT4KKworVGhpcyBtb2R1bGUgbG9ncyBrZXJuZWwgcHJpbnRrIG1lc3NhZ2VzIG92ZXIgVURQIGFsbG93aW5nIGRlYnVnZ2luZyBvZgorcHJvYmxlbSB3aGVyZSBkaXNrIGxvZ2dpbmcgZmFpbHMgYW5kIHNlcmlhbCBjb25zb2xlcyBhcmUgaW1wcmFjdGljYWwuCisKK0l0IGNhbiBiZSB1c2VkIGVpdGhlciBidWlsdC1pbiBvciBhcyBhIG1vZHVsZS4gQXMgYSBidWlsdC1pbiwKK25ldGNvbnNvbGUgaW5pdGlhbGl6ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgTklDIGNhcmRzIGFuZCB3aWxsIGJyaW5nIHVwCit0aGUgc3BlY2lmaWVkIGludGVyZmFjZSBhcyBzb29uIGFzIHBvc3NpYmxlLiBXaGlsZSB0aGlzIGRvZXNuJ3QgYWxsb3cKK2NhcHR1cmUgb2YgZWFybHkga2VybmVsIHBhbmljcywgaXQgZG9lcyBjYXB0dXJlIG1vc3Qgb2YgdGhlIGJvb3QKK3Byb2Nlc3MuCisKK0l0IHRha2VzIGEgc3RyaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyICJuZXRjb25zb2xlIiBpbiB0aGUKK2ZvbGxvd2luZyBmb3JtYXQ6CisKKyBuZXRjb25zb2xlPVtzcmMtcG9ydF1AW3NyYy1pcF0vWzxkZXY+XSxbdGd0LXBvcnRdQDx0Z3QtaXA+L1t0Z3QtbWFjYWRkcl0KKworICAgd2hlcmUKKyAgICAgICAgc3JjLXBvcnQgICAgICBzb3VyY2UgZm9yIFVEUCBwYWNrZXRzIChkZWZhdWx0cyB0byA2NjY1KQorICAgICAgICBzcmMtaXAgICAgICAgIHNvdXJjZSBJUCB0byB1c2UgKGludGVyZmFjZSBhZGRyZXNzKQorICAgICAgICBkZXYgICAgICAgICAgIG5ldHdvcmsgaW50ZXJmYWNlIChldGgwKQorICAgICAgICB0Z3QtcG9ydCAgICAgIHBvcnQgZm9yIGxvZ2dpbmcgYWdlbnQgKDY2NjYpCisgICAgICAgIHRndC1pcCAgICAgICAgSVAgYWRkcmVzcyBmb3IgbG9nZ2luZyBhZ2VudAorICAgICAgICB0Z3QtbWFjYWRkciAgIGV0aGVybmV0IE1BQyBhZGRyZXNzIGZvciBsb2dnaW5nIGFnZW50IChicm9hZGNhc3QpCisKK0V4YW1wbGVzOgorCisgbGludXggbmV0Y29uc29sZT00NDQ0QDEwLjAuMC4xL2V0aDEsOTM1M0AxMC4wLjAuMi8xMjozNDo1Njo3ODo5YTpiYworCisgIG9yCisKKyBpbnNtb2QgbmV0Y29uc29sZSBuZXRjb25zb2xlPUAvLEAxMC4wLjAuMi8KKworQnVpbHQtaW4gbmV0Y29uc29sZSBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFRDUCBzdGFjayBpcworaW5pdGlhbGl6ZWQgYW5kIGF0dGVtcHRzIHRvIGJyaW5nIHVwIHRoZSBzdXBwbGllZCBkZXYgYXQgdGhlIHN1cHBsaWVkCithZGRyZXNzLgorCitUaGUgcmVtb3RlIGhvc3QgY2FuIHJ1biBlaXRoZXIgJ25ldGNhdCAtdSAtbCAtcCA8cG9ydD4nIG9yIHN5c2xvZ2QuCisKK1dBUk5JTkc6IHRoZSBkZWZhdWx0IHRhcmdldCBldGhlcm5ldCBzZXR0aW5nIHVzZXMgdGhlIGJyb2FkY2FzdAorZXRoZXJuZXQgYWRkcmVzcyB0byBzZW5kIHBhY2tldHMsIHdoaWNoIGNhbiBjYXVzZSBpbmNyZWFzZWQgbG9hZCBvbgorb3RoZXIgc3lzdGVtcyBvbiB0aGUgc2FtZSBldGhlcm5ldCBzZWdtZW50LgorCitOT1RFOiB0aGUgbmV0d29yayBkZXZpY2UgKGV0aDEgaW4gdGhlIGFib3ZlIGNhc2UpIGNhbiBydW4gYW55IGtpbmQKK29mIG90aGVyIG5ldHdvcmsgdHJhZmZpYywgbmV0Y29uc29sZSBpcyBub3QgaW50cnVzaXZlLiBOZXRjb25zb2xlCittaWdodCBjYXVzZSBzbGlnaHQgZGVsYXlzIGluIG90aGVyIHRyYWZmaWMgaWYgdGhlIHZvbHVtZSBvZiBrZXJuZWwKK21lc3NhZ2VzIGlzIGhpZ2gsIGJ1dCBzaG91bGQgaGF2ZSBubyBvdGhlciBpbXBhY3QuCisKK05ldGNvbnNvbGUgd2FzIGRlc2lnbmVkIHRvIGJlIGFzIGluc3RhbnRhbmVvdXMgYXMgcG9zc2libGUsIHRvCitlbmFibGUgdGhlIGxvZ2dpbmcgb2YgZXZlbiB0aGUgbW9zdCBjcml0aWNhbCBrZXJuZWwgYnVncy4gSXQgd29ya3MKK2Zyb20gSVJRIGNvbnRleHRzIGFzIHdlbGwsIGFuZCBkb2VzIG5vdCBlbmFibGUgaW50ZXJydXB0cyB3aGlsZQorc2VuZGluZyBwYWNrZXRzLiBEdWUgdG8gdGhlc2UgdW5pcXVlIG5lZWRzLCBjb25maWd1cmF0aW9uIGNhbiBub3QKK2JlIG1vcmUgYXV0b21hdGljLCBhbmQgc29tZSBmdW5kYW1lbnRhbCBsaW1pdGF0aW9ucyB3aWxsIHJlbWFpbjoKK29ubHkgSVAgbmV0d29ya3MsIFVEUCBwYWNrZXRzIGFuZCBldGhlcm5ldCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwOWYzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dApAQCAtMCwwICsxLDc1IEBACisKK05ldHdvcmsgRGV2aWNlcywgdGhlIEtlcm5lbCwgYW5kIFlvdSEKKworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhlIGZvbGxvd2luZyBpcyBhIHJhbmRvbSBjb2xsZWN0aW9uIG9mIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nCituZXR3b3JrIGRldmljZXMuCisKK3N0cnVjdCBuZXRfZGV2aWNlIGFsbG9jYXRpb24gcnVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZXMgbmVlZCB0byBwZXJzaXN0IGV2ZW4gYWZ0ZXIgbW9kdWxlIGlzIHVubG9hZGVkIGFuZAorbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCBrbWFsbG9jLiAgSWYgZGV2aWNlIGhhcyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseSwKK2l0IHdpbGwgYmUgZnJlZWQgb24gbGFzdCB1c2UgYnkgZnJlZV9uZXRkZXYuICBUaGlzIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGUKK3BhdGhvbG9naWMgY2FzZSBjbGVhbmx5IChleGFtcGxlOiBybW1vZCBteWRyaXZlciA8L3N5cy9jbGFzcy9uZXQvbXlldGgvbXR1ICkKKworVGhlcmUgYXJlIHJvdXRpbmVzIGluIG5ldF9pbml0LmMgdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZXMgb2YKK2FsbG9jX2V0aGVyZGV2LCBhbGxvY19uZXRkZXYuICBUaGVzZSByZXNlcnZlIGV4dHJhIHNwYWNlIGZvciBkcml2ZXIKK3ByaXZhdGUgZGF0YSB3aGljaCBnZXRzIGZyZWVkIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIGZyZWVkLiBJZgorc2VwYXJhdGVseSBhbGxvY2F0ZWQgZGF0YSBpcyBhdHRhY2hlZCB0byB0aGUgbmV0d29yayBkZXZpY2UKKyhkZXYtPnByaXYpIHRoZW4gaXQgaXMgdXAgdG8gdGhlIG1vZHVsZSBleGl0IGhhbmRsZXIgdG8gZnJlZSB0aGF0LgorCisKK3N0cnVjdCBuZXRfZGV2aWNlIHN5bmNocm9uaXphdGlvbiBydWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkZXYtPm9wZW46CisJU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuCisJQ29udGV4dDogcHJvY2VzcworCitkZXYtPnN0b3A6CisJU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuCisJQ29udGV4dDogcHJvY2VzcworCU5vdGUxOiBuZXRpZl9ydW5uaW5nKCkgaXMgZ3VhcmFudGVlZCBmYWxzZQorCU5vdGUyOiBkZXYtPnBvbGwoKSBpcyBndWFyYW50ZWVkIHRvIGJlIHN0b3BwZWQKKworZGV2LT5kb19pb2N0bDoKKwlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4KKwlDb250ZXh0OiBwcm9jZXNzCisKK2Rldi0+Z2V0X3N0YXRzOgorCVN5bmNocm9uaXphdGlvbjogZGV2X2Jhc2VfbG9jayByd2xvY2suCisJQ29udGV4dDogbm9taW5hbGx5IHByb2Nlc3MsIGJ1dCBkb24ndCBzbGVlcCBpbnNpZGUgYW4gcndsb2NrCisKK2Rldi0+aGFyZF9zdGFydF94bWl0OgorCVN5bmNocm9uaXphdGlvbjogZGV2LT54bWl0X2xvY2sgc3BpbmxvY2suCisJV2hlbiB0aGUgZHJpdmVyIHNldHMgTkVUSUZfRl9MTFRYIGluIGRldi0+ZmVhdHVyZXMgdGhpcyB3aWxsIGJlCisJY2FsbGVkIHdpdGhvdXQgaG9sZGluZyB4bWl0X2xvY2suIEluIHRoaXMgY2FzZSB0aGUgZHJpdmVyIAorCWhhcyB0byBsb2NrIGJ5IGl0c2VsZiB3aGVuIG5lZWRlZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgdHJ5IGxvY2sKKwlmb3IgdGhpcyBhbmQgcmV0dXJuIC0xIHdoZW4gdGhlIHNwaW4gbG9jayBmYWlscy4gCisJVGhlIGxvY2tpbmcgdGhlcmUgc2hvdWxkIGFsc28gcHJvcGVybHkgcHJvdGVjdCBhZ2FpbnN0IAorCXNldF9tdWx0aWNhc3RfbGlzdAorCUNvbnRleHQ6IEJIcyBkaXNhYmxlZAorCU5vdGVzOiBuZXRpZl9xdWV1ZV9zdG9wcGVkKCkgaXMgZ3VhcmFudGVlZCBmYWxzZQorCVJldHVybiBjb2RlczogCisJbyBORVRERVZfVFhfT0sgZXZlcnl0aGluZyBvay4gCisJbyBORVRERVZfVFhfQlVTWSBDYW5ub3QgdHJhbnNtaXQgcGFja2V0LCB0cnkgbGF0ZXIgCisJICBVc3VhbGx5IGEgYnVnLCBtZWFucyBxdWV1ZSBzdGFydC9zdG9wIGZsb3cgY29udHJvbCBpcyBicm9rZW4gaW4KKwkgIHRoZSBkcml2ZXIuIE5vdGU6IHRoZSBkcml2ZXIgbXVzdCBOT1QgcHV0IHRoZSBza2IgaW4gaXRzIERNQSByaW5nLgorCW8gTkVUREVWX1RYX0xPQ0tFRCBMb2NraW5nIGZhaWxlZCwgcGxlYXNlIHJldHJ5IHF1aWNrbHkuCisJICBPbmx5IHZhbGlkIHdoZW4gTkVUSUZfRl9MTFRYIGlzIHNldC4KKworZGV2LT50eF90aW1lb3V0OgorCVN5bmNocm9uaXphdGlvbjogZGV2LT54bWl0X2xvY2sgc3BpbmxvY2suCisJQ29udGV4dDogQkhzIGRpc2FibGVkCisJTm90ZXM6IG5ldGlmX3F1ZXVlX3N0b3BwZWQoKSBpcyBndWFyYW50ZWVkIHRydWUKKworZGV2LT5zZXRfbXVsdGljYXN0X2xpc3Q6CisJU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlDb250ZXh0OiBCSHMgZGlzYWJsZWQKKworZGV2LT5wb2xsOgorCVN5bmNocm9uaXphdGlvbjogX19MSU5LX1NUQVRFX1JYX1NDSEVEIGJpdCBpbiBkZXYtPnN0YXRlLiAgU2VlCisJCWRldl9jbG9zZSBjb2RlIGFuZCBjb21tZW50cyBpbiBuZXQvY29yZS9kZXYuYyBmb3IgbW9yZSBpbmZvLgorCUNvbnRleHQ6IHNvZnRpcnEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGlmLW1zZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0aWYtbXNnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFkNGNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGlmLW1zZy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitfX19fX19fX19fX19fX19fCitORVRJRiBNc2cgTGV2ZWwKKworVGhlIGRlc2lnbiBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgbWVzc2FnZSBsZXZlbCBzZXR0aW5nLgorCitIaXN0b3J5CisKKyBUaGUgZGVzaWduIG9mIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZSBpbnRlcmZhY2Ugd2FzIGd1aWRlZCBhbmQKKyBjb25zdHJhaW5lZCBieSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwcmV2aW91cyBwcmFjdGljZS4gIEl0IGlzIHVzZWZ1bAorIHRvIHVuZGVyc3RhbmQgdGhlIGhpc3RvcnkgYW5kIGV2b2x1dGlvbiBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGN1cnJlbnQKKyBwcmFjdGljZSBhbmQgcmVsYXRlIGl0IHRvIG9sZGVyIGRyaXZlciBzb3VyY2UgY29kZS4KKworIEZyb20gdGhlIGJlZ2lubmluZyBvZiBMaW51eCwgZWFjaCBuZXR3b3JrIGRldmljZSBkcml2ZXIgaGFzIGhhZCBhIGxvY2FsCisgaW50ZWdlciB2YXJpYWJsZSB0aGF0IGNvbnRyb2xzIHRoZSBkZWJ1ZyBtZXNzYWdlIGxldmVsLiAgVGhlIG1lc3NhZ2UKKyBsZXZlbCByYW5nZWQgZnJvbSAwIHRvIDcsIGFuZCBtb25vdG9uaWNhbGx5IGluY3JlYXNlZCBpbiB2ZXJib3NpdHkuCisKKyBUaGUgbWVzc2FnZSBsZXZlbCB3YXMgbm90IHByZWNpc2VseSBkZWZpbmVkIHBhc3QgbGV2ZWwgMywgYnV0IHdlcmUKKyBhbHdheXMgaW1wbGVtZW50ZWQgd2l0aGluICstMSBvZiB0aGUgc3BlY2lmaWVkIGxldmVsLiAgRHJpdmVycyB0ZW5kZWQKKyB0byBzaGVkIHRoZSBtb3JlIHZlcmJvc2UgbGV2ZWwgbWVzc2FnZXMgYXMgdGhleSBtYXR1cmVkLgorICAgIDAgIE1pbmltYWwgbWVzc2FnZXMsIG9ubHkgZXNzZW50aWFsIGluZm9ybWF0aW9uIG9uIGZhdGFsIGVycm9ycy4KKyAgICAxICBTdGFuZGFyZCBtZXNzYWdlcywgaW5pdGlhbGl6YXRpb24gc3RhdHVzLiAgTm8gcnVuLXRpbWUgbWVzc2FnZXMKKyAgICAyICBTcGVjaWFsIG1lZGlhIHNlbGVjdGlvbiBtZXNzYWdlcywgZ2VuZXJhbGx5IHRpbWVyLWRyaXZlci4KKyAgICAzICBJbnRlcmZhY2Ugc3RhcnRzIGFuZCBzdG9wcywgaW5jbHVkaW5nIG5vcm1hbCBzdGF0dXMgbWVzc2FnZXMKKyAgICA0ICBUeCBhbmQgUnggZnJhbWUgZXJyb3IgbWVzc2FnZXMsIGFuZCBhYm5vcm1hbCBkcml2ZXIgb3BlcmF0aW9uCisgICAgNSAgVHggcGFja2V0IHF1ZXVlIGluZm9ybWF0aW9uLCBpbnRlcnJ1cHQgZXZlbnRzLgorICAgIDYgIFN0YXR1cyBvbiBlYWNoIGNvbXBsZXRlZCBUeCBwYWNrZXQgYW5kIHJlY2VpdmVkIFJ4IHBhY2tldHMKKyAgICA3ICBJbml0aWFsIGNvbnRlbnRzIG9mIFR4IGFuZCBSeCBwYWNrZXRzCisKKyBJbml0aWFsbHkgdGhpcyBtZXNzYWdlIGxldmVsIHZhcmlhYmxlIHdhcyB1bmlxdWVseSBuYW1lZCBpbiBlYWNoIGRyaXZlcgorIGUuZy4gImxhbmNlX2RlYnVnIiwgc28gdGhhdCBhIGtlcm5lbCBzeW1ib2xpYyBkZWJ1Z2dlciBjb3VsZCBsb2NhdGUgYW5kCisgbW9kaWZ5IHRoZSBzZXR0aW5nLiAgV2hlbiBrZXJuZWwgbW9kdWxlcyBiZWNhbWUgY29tbW9uLCB0aGUgdmFyaWFibGVzCisgd2VyZSBjb25zaXN0ZW50bHkgcmVuYW1lZCB0byAiZGVidWciIGFuZCBhbGxvd2VkIHRvIGJlIHNldCBhcyBhIG1vZHVsZQorIHBhcmFtZXRlci4KKworIFRoaXMgYXBwcm9hY2ggd29ya2VkIHdlbGwuICBIb3dldmVyIHRoZXJlIGlzIGFsd2F5cyBhIGRlbWFuZCBmb3IKKyBhZGRpdGlvbmFsIGZlYXR1cmVzLiAgT3ZlciB0aGUgeWVhcnMgdGhlIGZvbGxvd2luZyBlbWVyZ2VkIGFzCisgcmVhc29uYWJsZSBhbmQgZWFzaWx5IGltcGxlbWVudGVkIGVuaGFuY2VtZW50cworICAgVXNpbmcgYW4gaW9jdGwoKSBjYWxsIHRvIG1vZGlmeSB0aGUgbGV2ZWwuCisgICBQZXItaW50ZXJmYWNlIHJhdGhlciB0aGFuIHBlci1kcml2ZXIgbWVzc2FnZSBsZXZlbCBzZXR0aW5nLgorICAgTW9yZSBzZWxlY3RpdmUgY29udHJvbCBvdmVyIHRoZSB0eXBlIG9mIG1lc3NhZ2VzIGVtaXR0ZWQuCisKKyBUaGUgbmV0aWZfbXNnIHJlY29tbWFuZGF0aW9uIGFkZHMgdGhlc2UgZmVhdHVyZXMgd2l0aCBvbmx5IGEgbWlub3IKKyBjb21wbGV4aXR5IGFuZCBjb2RlIHNpemUgaW5jcmVhc2UuCisKKyBUaGUgcmVjb21tZW5kYXRpb24gaXMgdGhlIGZvbGxvd2luZyBwb2ludHMKKyAgICBSZXRhaW5pbmcgdGhlIHBlci1kcml2ZXIgaW50ZWdlciB2YXJpYWJsZSAiZGVidWciIGFzIGEgbW9kdWxlCisgICAgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IGxldmVsIG9mICcxJy4KKworICAgIEFkZGluZyBhIHBlci1pbnRlcmZhY2UgcHJpdmF0ZSB2YXJpYWJsZSBuYW1lZCAibXNnX2VuYWJsZSIuICBUaGUKKyAgICB2YXJpYWJsZSBpcyBhIGJpdCBtYXAgcmF0aGVyIHRoYW4gYSBsZXZlbCwgYW5kIGlzIGluaXRpYWxpemVkIGFzCisgICAgICAgMSA8PCBkZWJ1ZworICAgIE9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGRlYnVnIDwgMCA/IDAgOiAxIDw8IG1pbihzaXplb2YoaW50KS0xLCBkZWJ1ZykKKworICAgIE1lc3NhZ2VzIHNob3VsZCBjaGFuZ2VzIGZyb20KKyAgICAgIGlmIChkZWJ1ZyA+IDEpCisgICAgICAgICAgIHByaW50ayhNU0dfREVCVUcgIiVzOiAuLi4KKyAgICB0bworICAgICAgaWYgKG5wLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHX0xJTkspCisgICAgICAgICAgIHByaW50ayhNU0dfREVCVUcgIiVzOiAuLi4KKworCitUaGUgc2V0IG9mIG1lc3NhZ2UgbGV2ZWxzIGlzIG5hbWVkCisgIE9sZCBsZXZlbCAgIE5hbWUgICBCaXQgcG9zaXRpb24KKyAgICAwICAgIE5FVElGX01TR19EUlYJCTB4MDAwMQorICAgIDEgICAgTkVUSUZfTVNHX1BST0JFCTB4MDAwMgorICAgIDIgICAgTkVUSUZfTVNHX0xJTksJCTB4MDAwNAorICAgIDIgICAgTkVUSUZfTVNHX1RJTUVSCTB4MDAwNAorICAgIDMgICAgTkVUSUZfTVNHX0lGRE9XTgkweDAwMDgKKyAgICAzICAgIE5FVElGX01TR19JRlVQCQkweDAwMDgKKyAgICA0ICAgIE5FVElGX01TR19SWF9FUlIJMHgwMDEwCisgICAgNCAgICBORVRJRl9NU0dfVFhfRVJSCTB4MDAxMAorICAgIDUgICAgTkVUSUZfTVNHX1RYX1FVRVVFRAkweDAwMjAKKyAgICA1ICAgIE5FVElGX01TR19JTlRSCQkweDAwMjAKKyAgICA2ICAgIE5FVElGX01TR19UWF9ET05FCTB4MDA0MAorICAgIDYgICAgTkVUSUZfTVNHX1JYX1NUQVRVUwkweDAwNDAKKyAgICA3ICAgIE5FVElGX01TR19QS1REQVRBCTB4MDA4MAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2x5bXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2x5bXBpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1YTk0MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dApAQCAtMCwwICsxLDc5IEBACisKK0lCTSBQQ0kgUGl0L1BpdC1QaHkvT2x5bXBpYyBDSElQU0VUIEJBU0VEIFRPS0VOIFJJTkcgQ0FSRFMgUkVBRE1FCisKK1JlbGVhc2UgMC4yLjAgLSBSZWxlYXNlICAgIAorCUp1bmUgOHRoIDE5OTkgUGV0ZXIgRGUgU2NocmlqdmVyICYgTWlrZSBQaGlsbGlwcworUmVsZWFzZSAwLjkuQyAtIFJlbGVhc2UKKwlBcHJpbCAxOHRoIDIwMDEgTWlrZSBQaGlsbGlwcworCitUaGFua3M6CitFcmlrIERlIENvY2ssIEFkcmlhbiBCcmlkZ2V0dCBhbmQgRnJhbmsgRmllbmUgZm9yIHRoZWlyIAorcGF0aWVuY2UgYW5kIHRlc3RpbmcuCitEb25hbGQgQ2hhbXBpb24gZm9yIHRoZSBjYXJkYnVzIHN1cHBvcnQKK0t5bGUgTHVja2UgZm9yIHRoZSBkbWEgYXBpIGNoYW5nZXMuICAgCitKb25hdGhvbiBCaXRuZXIgZm9yIGhhcmR3YXJlIHN1cHBvcnQuIAorRXZlcnlib2R5IG9uIGxpbnV4LXRyIGZvciB0aGVpciBjb250aW51ZWQgc3VwcG9ydC4gIAorIAorT3B0aW9uczoKKworVGhlIGRyaXZlciBhY2NlcHRzIGZvdXIgb3B0aW9uczogcmluZ3NwZWVkLCBwa3RfYnVmX3N6LCAgCittZXNzYWdlX2xldmVsIGFuZCBuZXR3b3JrX21vbml0b3IuCisKK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBmb3IgZWFjaCBjYXJkIGZvdW5kLiAKKworcmluZ3NwZWVkOiAgSGFzIG9uZSBvZiB0aHJlZSBzZXR0aW5ncyAwIChkZWZhdWx0KSwgNCBvciAxNi4gIDAgd2lsbCAKK21ha2UgdGhlIGNhcmQgYXV0b3NlbnNlIHRoZSByaW5nc3BlZWQgYW5kIGpvaW4gYXQgdGhlIGFwcHJvcHJpYXRlIHNwZWVkLCAKK3RoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvcHRpb24gZm9yIG1vc3QgcGVvcGxlLiAgNCBvciAxNiBhbGxvdyB5b3UgdG8gCitleHBsaWNpdGx5IGZvcmNlIHRoZSBjYXJkIHRvIG9wZXJhdGUgYXQgYSBjZXJ0YWluIHNwZWVkLiAgVGhlIGNhcmQgd2lsbCBmYWlsIAoraWYgeW91IHRyeSB0byBpbnNlcnQgaXQgYXQgdGhlIHdyb25nIHNwZWVkLiAoQWx0aG91Z2ggc29tZSBodWJzIHdpbGwgYWxsb3cgCit0aGlzIHNvIGJlICp2ZXJ5KiBjYXJlZnVsKS4gIFRoZSBtYWluIHB1cnBvc2UgZm9yIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgcmluZworc3BlZWQgaXMgZm9yIHdoZW4gdGhlIGNhcmQgaXMgZmlyc3Qgb24gdGhlIHJpbmcuICBJbiBhdXRvc2Vuc2UgbW9kZSwgaWYgdGhlIGNhcmQKK2Nhbm5vdCBkZXRlY3QgYW55IGFjdGl2ZSBtb25pdG9ycyBvbiB0aGUgcmluZyBpdCB3aWxsIG5vdCBvcGVuLCBzbyB5b3UgbXVzdCAKK3JlLWluaXQgdGhlIGNhcmQgYXQgdGhlIGFwcHJvcHJpYXRlIHNwZWVkLiAgVW5mb3J0dW5hdGVseSBhdCBwcmVzZW50IHRoZSBvbmx5Cit3YXkgb2YgZG9pbmcgdGhpcyBpcyBybW1vZCBhbmQgaW5zbW9kIHdoaWNoIGlzIGEgYml0IHRvdWdoIGlmIGl0IGlzIGNvbXBpbGVkCitpbiB0aGUga2VybmVsLgorCitwa3RfYnVmX3N6OiAgVGhpcyBpcyB0aGlzIGluaXRpYWwgcmVjZWl2ZSBidWZmZXIgYWxsb2NhdGlvbiBzaXplLiAgVGhpcyB3aWxsCitkZWZhdWx0IHRvIDQwOTYgaWYgbm8gdmFsdWUgaXMgZW50ZXJlZC4gWW91IG1heSBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiB0aGUgCitkcml2ZXIgYnkgc2V0dGluZyB0aGlzIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIG5ldHdvcmsgcGFja2V0IHNpemUsIGFsdGhvdWdoCit0aGUgZHJpdmVyIG5vdyByZS1zaXplcyBidWZmZXJzIGJhc2VkIG9uIE1UVSBzZXR0aW5ncyBhcyB3ZWxsLiAKKworbWVzc2FnZV9sZXZlbDogQ29udHJvbHMgbGV2ZWwgb2YgbWVzc2FnZXMgY3JlYXRlZCBieSB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byAwOgord2hpY2ggb25seSBkaXNwbGF5cyBzdGFydC11cCBhbmQgY3JpdGljYWwgbWVzc2FnZXMuICBQcmVzZW50bHkgYW55IG5vbi16ZXJvIAordmFsdWUgd2lsbCBkaXNwbGF5IGFsbCBzb2Z0IG1lc3NhZ2VzIGFzIHdlbGwuICBOQiBUaGlzIGRvZXMgbm90IHR1cm4gCitkZWJ1Z2dpbmcgbWVzc2FnZXMgb24sIHRoYXQgbXVzdCBiZSBkb25lIGJ5IG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZS4KKworbmV0d29ya19tb25pdG9yOiBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBwcm92aWRlIGEgcXVhc2kgbmV0d29yayBtb25pdG9yaW5nIAorbW9kZS4gIEFsbCB1bmV4cGVjdGVkIE1BQyBmcmFtZXMgKGJlYWNvbmluZyBldGMuKSB3aWxsIGJlIHJlY2VpdmVkCitieSB0aGUgZHJpdmVyIGFuZCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgcHJpbnRlZC4gCitBbHNvIGFuIGVudHJ5IHdpbGwgYmUgYWRkZWQgaW4gIC9wcm9jL25ldCBjYWxsZWQgb2x5bXBpY190ciVkLCB3aGVyZSB0ciVkCitpcyB0aGUgcmVnaXN0ZXJlZCBkZXZpY2UgbmFtZSwgaS5lIHRyMCwgdHIxLCBldGMuIFRoaXMgZGlzcGxheXMgbG93CitsZXZlbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcmluZyBhbmQgdGhlIGFkYXB0ZXIuCitUaGlzIGZlYXR1cmUgaGFzIGJlZW4gZGVzaWduZWQgZm9yIG5ldHdvcmsgYWRtaW5pc3RyYXRvcnMgdG8gYXNzaXN0IGluIAordGhlIGRpYWdub3NpcyBvZiBuZXR3b3JrIC8gcmluZyBwcm9ibGVtcy4gKFRoaXMgdXNlZCB0byBPTFlNUElDX05FVFdPUktfTU9OSVRPUiwKK2J1dCBoYXMgbm93IGNoYW5nZWQgdG8gYWxsb3cgZWFjaCBhZGFwdGVyIHRvIGJlIGNvbmZpZ3VyZWQgZGlmZmVyZW50bHkgYW5kCit0byBhbGxldmlhdGUgdGhlIG5lY2Vzc2l0eSB0byByZS1jb21waWxlIG9seW1waWMgdG8gdHVybiB0aGUgb3B0aW9uIG9uKS4KKworTXVsdGktY2FyZDoKKworVGhlIGRyaXZlciB3aWxsIGRldGVjdCBtdWx0aXBsZSBjYXJkcyBhbmQgd2lsbCB3b3JrIHdpdGggc2hhcmVkIGludGVycnVwdHMsCitlYWNoIGNhcmQgaXMgYXNzaWduZWQgdGhlIG5leHQgdG9rZW4gcmluZyBkZXZpY2UsIGkuZS4gdHIwICwgdHIxLCB0cjIuICBUaGUgCitkcml2ZXIgc2hvdWxkIGFsc28gaGFwcGlseSByZXNpZGUgaW4gdGhlIHN5c3RlbSB3aXRoIG90aGVyIGRyaXZlcnMuICBJdCBoYXMgCitiZWVuIHRlc3RlZCB3aXRoIGlibXRyLmMgcnVubmluZywgYW5kIEkgcGVyc29uYWxseSBoYXZlIGhhZCBvbmUgT2xpY29tIFBDSSAKK2NhcmQgYW5kIHR3byBJQk0gb2x5bXBpYyBjYXJkcyAoYWxsIG9uIHRoZSBzYW1lIGludGVycnVwdCksIGFsbCBydW5uaW5nCit0b2dldGhlci4gCisKK1ZhcmlhYmxlIE1UVSBzaXplOgorCitUaGUgZHJpdmVyIGNhbiBoYW5kbGUgYSBNVFUgc2l6ZSB1cHRvIGVpdGhlciA0NTAwIG9yIDE4MDAwIGRlcGVuZGluZyB1cG9uIAorcmluZyBzcGVlZC4gIFRoZSBkcml2ZXIgYWxzbyBjaGFuZ2VzIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXMgcGFydAorb2YgdGhlIG10dSByZS1zaXppbmcsIHNvIGlmIHlvdSBzZXQgbXR1ID0gMTgwMDAsIHlvdSB3aWxsIG5lZWQgdG8gYmUgYWJsZQordG8gYWxsb2NhdGUgMTYgKiAoc2tfYnVmZiB3aXRoIDE4MDAwIGJ1ZmZlciBzaXplKSBjYWxsIGl0IDE4NTAwIGJ5dGVzIHBlciByaW5nIAorcG9zaXRpb24gPSAyOTYsMDAwIGJ5dGVzIG9mIG1lbW9yeSBzcGFjZSwgcGx1cyBvZiBjb3Vyc2UgYW55dGhpbmcgCituZWNlc3NhcnkgZm9yIHRoZSB0eCBza19idWZmJ3MuICBSZW1lbWJlciB0aGlzIGlzIHBlciBjYXJkLCBzbyBpZiB5b3UgYXJlCitidWlsZGluZyByb3V0ZXJzLCBnYXRld2F5J3MgZXRjLCB5b3UgY291bGQgc3RhcnQgdG8gdXNlIGEgbG90IG9mIG1lbW9yeQorcmVhbCBmYXN0LgorCisKKzYvOC85OSBQZXRlciBEZSBTY2hyaWp2ZXIgYW5kIE1pa2UgUGhpbGxpcHMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0Y2Y3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKQEAgLTAsMCArMSwzOTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIEFCU1RSQUNUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBDT05GSUdfUEFDS0VUX01NQVAgb3B0aW9uIGF2YWlsYWJsZSB3aXRoIHRoZSBQQUNLRVQKK3NvY2tldCBpbnRlcmZhY2Ugb24gMi40IGFuZCAyLjYga2VybmVscy4gVGhpcyB0eXBlIG9mIHNvY2tldHMgaXMgdXNlZCBmb3IgCitjYXB0dXJlIG5ldHdvcmsgdHJhZmZpYyB3aXRoIHV0aWxpdGllcyBsaWtlIHRjcGR1bXAgb3IgYW55IG90aGVyIHRoYXQgdXNlcyAKK3RoZSBsaWJwY2FwIGxpYnJhcnkuIAorCitZb3UgY2FuIGZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQKKworICAgIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwLworCitQbGVhc2Ugc2VuZCBtZSB5b3VyIGNvbW1lbnRzIHRvCisKKyAgICBVbGlzc2VzIEFsb25zbyBDYW1hcvMgPHVhY2FAaS5oYXRlLnNwYW0uYWx1bW5pLnV2LmVzPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIFdoeSB1c2UgUEFDS0VUX01NQVAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIExpbnV4IDIuNC8yLjYgaWYgUEFDS0VUX01NQVAgaXMgbm90IGVuYWJsZWQsIHRoZSBjYXB0dXJlIHByb2Nlc3MgaXMgdmVyeQoraW5lZmZpY2llbnQuIEl0IHVzZXMgdmVyeSBsaW1pdGVkIGJ1ZmZlcnMgYW5kIHJlcXVpcmVzIG9uZSBzeXN0ZW0gY2FsbAordG8gY2FwdHVyZSBlYWNoIHBhY2tldCwgaXQgcmVxdWlyZXMgdHdvIGlmIHlvdSB3YW50IHRvIGdldCBwYWNrZXQncyAKK3RpbWVzdGFtcCAobGlrZSBsaWJwY2FwIGFsd2F5cyBkb2VzKS4KKworSW4gdGhlIG90aGVyIGhhbmQgUEFDS0VUX01NQVAgaXMgdmVyeSBlZmZpY2llbnQuIFBBQ0tFVF9NTUFQIHByb3ZpZGVzIGEgc2l6ZSAKK2NvbmZpZ3VyYWJsZSBjaXJjdWxhciBidWZmZXIgbWFwcGVkIGluIHVzZXIgc3BhY2UuIFRoaXMgd2F5IHJlYWRpbmcgcGFja2V0cyBqdXN0IAorbmVlZHMgdG8gd2FpdCBmb3IgdGhlbSwgbW9zdCBvZiB0aGUgdGltZSB0aGVyZSBpcyBubyBuZWVkIHRvIGlzc3VlIGEgc2luZ2xlIAorc3lzdGVtIGNhbGwuIEJ5IHVzaW5nIGEgc2hhcmVkIGJ1ZmZlciBiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHRoZSB1c2VyIAorYWxzbyBoYXMgdGhlIGJlbmVmaXQgb2YgbWluaW1pemluZyBwYWNrZXQgY29waWVzLgorCitJdCdzIGZpbmUgdG8gdXNlIFBBQ0tFVF9NTUFQIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBjYXB0dXJlIHByb2Nlc3MsIAorYnV0IGl0IGlzbid0IGV2ZXJ5dGhpbmcuIEF0IGxlYXN0LCBpZiB5b3UgYXJlIGNhcHR1cmluZyBhdCBoaWdoIHNwZWVkcyAodGhpcyAKK2lzIHJlbGF0aXZlIHRvIHRoZSBjcHUgc3BlZWQpLCB5b3Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBkZXZpY2UgZHJpdmVyIG9mIHlvdXIgCituZXR3b3JrIGludGVyZmFjZSBjYXJkIHN1cHBvcnRzIHNvbWUgc29ydCBvZiBpbnRlcnJ1cHQgbG9hZCBtaXRpZ2F0aW9uIG9yIAorKGV2ZW4gYmV0dGVyKSBpZiBpdCBzdXBwb3J0cyBOQVBJLCBhbHNvIG1ha2Ugc3VyZSBpdCBpcyBlbmFibGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSB0aGUgdXNlciBzdGFuZHBvaW50LCB5b3Ugc2hvdWxkIHVzZSB0aGUgaGlnaGVyIGxldmVsIGxpYnBjYXAgbGlicmFyeSwgd2ljaAoraXMgYSBkZSBmYWN0byBzdGFuZGFyZCwgcG9ydGFibGUgYWNyb3NzIG5lYXJseSBhbGwgb3BlcmF0aW5nIHN5c3RlbXMKK2luY2x1ZGluZyBXaW4zMi4gCisKK1NhaWQgdGhhdCwgYXQgdGltZSBvZiB0aGlzIHdyaXRpbmcsIG9mZmljaWFsIGxpYnBjYXAgMC44LjEgaXMgb3V0IGFuZCBkb2Vzbid0IGluY2x1ZGUKK3N1cHBvcnQgZm9yIFBBQ0tFVF9NTUFQLCBhbmQgYWxzbyBwcm9iYWJseSB0aGUgbGlicGNhcCBpbmNsdWRlZCBpbiB5b3VyIGRpc3RyaWJ1dGlvbi4gCisKK0knbSBhd2FyZSBvZiB0d28gaW1wbGVtZW50YXRpb25zIG9mIFBBQ0tFVF9NTUFQIGluIGxpYnBjYXA6CisKKyAgICBodHRwOi8vcHVzYS51di5lcy9+dWxpc3Nlcy9wYWNrZXRfbW1hcC8gIChieSBTaW1vbiBQYXRhcmluLCBiYXNlZCBvbiBsaWJwY2FwIDAuNi4yKQorICAgIGh0dHA6Ly9wdWJsaWMubGFubC5nb3YvY3B3LyAgICAgICAgICAgICAgKGJ5IFBoaWwgV29vZCwgYmFzZWQgb24gbGFzdGVzdCBsaWJwY2FwKQorCitUaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGlzIGludGVuZGVkIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gdW5kZXJzdGFuZAordGhlIGxvdyBsZXZlbCBkZXRhaWxzIG9yIHdhbnQgdG8gaW1wcm92ZSBsaWJwY2FwIGJ5IGluY2x1ZGluZyBQQUNLRVRfTU1BUAorc3VwcG9ydC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgSG93IHRvIHVzZSBDT05GSUdfUEFDS0VUX01NQVAgZGlyZWN0bHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Zyb20gdGhlIHN5c3RlbSBjYWxscyBzdGFuZCBwb2ludCwgdGhlIHVzZSBvZiBQQUNLRVRfTU1BUCBpbnZvbHZlcwordGhlIGZvbGxvd2luZyBwcm9jZXNzOgorCisKK1tzZXR1cF0gICAgIHNvY2tldCgpIC0tLS0tLS0+IGNyZWF0aW9uIG9mIHRoZSBjYXB0dXJlIHNvY2tldAorICAgICAgICAgICAgc2V0c29ja29wdCgpIC0tLT4gYWxsb2NhdGlvbiBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIChyaW5nKQorICAgICAgICAgICAgbW1hcCgpIC0tLS0tLS0tLT4gbWFwaW5nIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBwcm9jZXNzCisKK1tjYXB0dXJlXSAgIHBvbGwoKSAtLS0tLS0tLS0+IHRvIHdhaXQgZm9yIGluY29taW5nIHBhY2tldHMKKworW3NodXRkb3duXSAgY2xvc2UoKSAtLS0tLS0tLT4gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNhcHR1cmUgc29ja2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhbGxvY2F0aW9uIG9mIGFsbCBhc3NvY2lhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLgorCisKK3NvY2tldCBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gaXMgc3RyYWlnaHQgZm9yd2FyZCwgYW5kIGlzIGRvbmUgCit0aGUgc2FtZSB3YXkgd2l0aCBvciB3aXRob3V0IFBBQ0tFVF9NTUFQOgorCitpbnQgZmQ7CisKK2ZkPSBzb2NrZXQoUEZfUEFDS0VULCBtb2RlLCBodG9ucyhFVEhfUF9BTEwpKQorCit3aGVyZSBtb2RlIGlzIFNPQ0tfUkFXIGZvciB0aGUgcmF3IGludGVyZmFjZSB3ZXJlIGxpbmsgbGV2ZWwKK2luZm9ybWF0aW9uIGNhbiBiZSBjYXB0dXJlZCBvciBTT0NLX0RHUkFNIGZvciB0aGUgY29va2VkCitpbnRlcmZhY2Ugd2hlcmUgbGluayBsZXZlbCBpbmZvcm1hdGlvbiBjYXB0dXJlIGlzIG5vdCAKK3N1cHBvcnRlZCBhbmQgYSBsaW5rIGxldmVsIHBzZXVkby1oZWFkZXIgaXMgcHJvdmlkZWQgCitieSB0aGUga2VybmVsLgorCitUaGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHNvY2tldCBhbmQgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCitpcyBkb25lIGJ5IGEgc2ltcGxlIGNhbGwgdG8gY2xvc2UoZmQpLgorCitOZXh0IEkgd2lsbCBkZXNjcmliZSBQQUNLRVRfTU1BUCBzZXR0aW5ncyBhbmQgaXQncyBjb25zdHJhaW50cywKK2Fsc28gdGhlIG1hcGluZyBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIGluIHRoZSB1c2VyIHByb2Nlc3MgYW5kIAordGhlIHVzZSBvZiB0aGlzIGJ1ZmZlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgUEFDS0VUX01NQVAgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworVG8gc2V0dXAgUEFDS0VUX01NQVAgZnJvbSB1c2VyIGxldmVsIGNvZGUgaXMgZG9uZSB3aXRoIGEgY2FsbCBsaWtlCisKKyAgICAgc2V0c29ja29wdChmZCwgU09MX1BBQ0tFVCwgUEFDS0VUX1JYX1JJTkcsICh2b2lkICopICZyZXEsIHNpemVvZihyZXEpKQorCitUaGUgbW9zdCBzaWduaWZpY2FudCBhcmd1bWVudCBpbiB0aGUgcHJldmlvdXMgY2FsbCBpcyB0aGUgcmVxIHBhcmFtZXRlciwgCit0aGlzIHBhcmFtZXRlciBtdXN0IHRvIGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKKyAgICBzdHJ1Y3QgdHBhY2tldF9yZXEKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCAgICB0cF9ibG9ja19zaXplOyAgLyogTWluaW1hbCBzaXplIG9mIGNvbnRpZ3VvdXMgYmxvY2sgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRwX2Jsb2NrX25yOyAgICAvKiBOdW1iZXIgb2YgYmxvY2tzICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICB0cF9mcmFtZV9zaXplOyAgLyogU2l6ZSBvZiBmcmFtZSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdHBfZnJhbWVfbnI7ICAgIC8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKi8KKyAgICB9OworCitUaGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIC91c3IvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCBhbmQgZXN0YWJsaXNoZXMgYSAKK2NpcmN1bGFyIGJ1ZmZlciAocmluZykgb2YgdW5zd2FwcGFibGUgbWVtb3J5IG1hcHBlZCBpbiB0aGUgY2FwdHVyZSBwcm9jZXNzLiAKK0JlaW5nIG1hcHBlZCBpbiB0aGUgY2FwdHVyZSBwcm9jZXNzIGFsbG93cyByZWFkaW5nIHRoZSBjYXB0dXJlZCBmcmFtZXMgYW5kIAorcmVsYXRlZCBtZXRhLWluZm9ybWF0aW9uIGxpa2UgdGltZXN0YW1wcyB3aXRob3V0IHJlcXVpcmluZyBhIHN5c3RlbSBjYWxsLgorCitDYXB0dXJlZCBmcmFtZXMgYXJlIGdyb3VwZWQgaW4gYmxvY2tzLiBFYWNoIGJsb2NrIGlzIGEgcGh5c2ljYWxseSBjb250aWd1b3VzIAorcmVnaW9uIG9mIG1lbW9yeSBhbmQgaG9sZHMgdHBfYmxvY2tfc2l6ZS90cF9mcmFtZV9zaXplIGZyYW1lcy4gVGhlIHRvdGFsIG51bWJlciAKK29mIGJsb2NrcyBpcyB0cF9ibG9ja19uci4gTm90ZSB0aGF0IHRwX2ZyYW1lX25yIGlzIGEgcmVkdW5kYW50IHBhcmFtZXRlciBiZWNhdXNlCisKKyAgICBmcmFtZXNfcGVyX2Jsb2NrID0gdHBfYmxvY2tfc2l6ZS90cF9mcmFtZV9zaXplCisKK2luZGVlZCwgcGFja2V0X3NldF9yaW5nIGNoZWNrcyB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIHRydWUKKworICAgIGZyYW1lc19wZXJfYmxvY2sgKiB0cF9ibG9ja19uciA9PSB0cF9mcmFtZV9ucgorCisKK0xldHMgc2VlIGFuIGV4YW1wbGUsIHdpdGggdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICAgdHBfYmxvY2tfc2l6ZT0gNDA5NgorICAgICB0cF9mcmFtZV9zaXplPSAyMDQ4CisgICAgIHRwX2Jsb2NrX25yICA9IDQKKyAgICAgdHBfZnJhbWVfbnIgID0gOAorCit3ZSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIGJ1ZmZlciBzdHJ1Y3R1cmU6CisKKyAgICAgICAgYmxvY2sgIzEgICAgICAgICAgICAgICAgIGJsb2NrICMyICAgICAgICAgCisrLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rICAgIAorfCBmcmFtZSAxIHwgZnJhbWUgMiB8ICAgIHwgZnJhbWUgMyB8IGZyYW1lIDQgfCAgICAKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgCisKKyAgICAgICAgYmxvY2sgIzMgICAgICAgICAgICAgICAgIGJsb2NrICM0CisrLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rCit8IGZyYW1lIDUgfCBmcmFtZSA2IHwgICAgfCBmcmFtZSA3IHwgZnJhbWUgOCB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSstLS0tLS0tLS0rCisKK0EgZnJhbWUgY2FuIGJlIG9mIGFueSBzaXplIHdpdGggdGhlIG9ubHkgY29uZGl0aW9uIGl0IGNhbiBmaXQgaW4gYSBibG9jay4gQSBibG9jaworY2FuIG9ubHkgaG9sZCBhbiBpbnRlZ2VyIG51bWJlciBvZiBmcmFtZXMsIG9yIGluIG90aGVyIHdvcmRzLCBhIGZyYW1lIGNhbm5vdCAKK2JlIHNwYXduIGFjY3Jvc3MgdHdvIGJsb2NrcyBzbyB0aGVyZSBhcmUgc29tZSBkYXRhaWxzIHlvdSBoYXZlIHRvIHRha2UgaW50byAKK2FjY291bnQgd2hlbiBjaG9vc2luZyB0aGUgZnJhbWVfc2l6ZS4gU2VlICJNYXBpbmcgYW5kIHVzZSBvZiB0aGUgY2lyY3VsYXIgCitidWZmZXIgKHJpbmcpIi4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBQQUNLRVRfTU1BUCBzZXR0aW5nIGNvbnN0cmFpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBrZXJuZWwgdmVyc2lvbnMgcHJpb3IgdG8gMi40LjI2IChmb3IgdGhlIDIuNCBicmFuY2gpIGFuZCAyLjYuNSAoMi42IGJyYW5jaCksCit0aGUgUEFDS0VUX01NQVAgYnVmZmVyIGNvdWxkIGhvbGQgb25seSAzMjc2OCBmcmFtZXMgaW4gYSAzMiBiaXQgYXJjaGl0ZWN0dXJlIG9yCisxNjM4NCBpbiBhIDY0IGJpdCBhcmNoaXRlY3R1cmUuIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBrZXJuZWwgdmVyc2lvbnMKK3NlZSBodHRwOi8vcHVzYS51di5lcy9+dWxpc3Nlcy9wYWNrZXRfbW1hcC9wYWNrZXRfbW1hcC5wcmUtMi40LjI2XzIuNi41LnR4dAorCisgQmxvY2sgc2l6ZSBsaW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHN0YXRlZCBlYXJsaWVyLCBlYWNoIGJsb2NrIGlzIGEgY29udGlndW91cyBwaHlzaWNhbCByZWdpb24gb2YgbWVtb3J5LiBUaGVzZSAKK21lbW9yeSByZWdpb25zIGFyZSBhbGxvY2F0ZWQgd2l0aCBjYWxscyB0byB0aGUgX19nZXRfZnJlZV9wYWdlcygpIGZ1bmN0aW9uLiBBcyAKK3RoZSBuYW1lIGluZGljYXRlcywgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcGFnZXMgb2YgbWVtb3J5LCBhbmQgdGhlIHNlY29uZAorYXJndW1lbnQgaXMgIm9yZGVyIiBvciBhIHBvd2VyIG9mIHR3byBudW1iZXIgb2YgcGFnZXMsIHRoYXQgaXMgCisoZm9yIFBBR0VfU0laRSA9PSA0MDk2KSBvcmRlcj0wID09PiA0MDk2IGJ5dGVzLCBvcmRlcj0xID09PiA4MTkyIGJ5dGVzLCAKK29yZGVyPTIgPT0+IDE2Mzg0IGJ5dGVzLCBldGMuIFRoZSBtYXhpbXVtIHNpemUgb2YgYSAKK3JlZ2lvbiBhbGxvY2F0ZWQgYnkgX19nZXRfZnJlZV9wYWdlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBNQVhfT1JERVIgbWFjcm8uIE1vcmUgCitwcmVjaXNlbHkgdGhlIGxpbWl0IGNhbiBiZSBjYWxjdWxhdGVkIGFzOgorCisgICBQQUdFX1NJWkUgPDwgTUFYX09SREVSCisKKyAgIEluIGEgaTM4NiBhcmNoaXRlY3R1cmUgUEFHRV9TSVpFIGlzIDQwOTYgYnl0ZXMgCisgICBJbiBhIDIuNC9pMzg2IGtlcm5lbCBNQVhfT1JERVIgaXMgMTAKKyAgIEluIGEgMi42L2kzODYga2VybmVsIE1BWF9PUkRFUiBpcyAxMQorCitTbyBnZXRfZnJlZV9wYWdlcyBjYW4gYWxsb2NhdGUgYXMgbXVjaCBhcyA0TUIgb3IgOE1CIGluIGEgMi40LzIuNiBrZXJuZWwgCityZXNwZWN0aXZlbHksIHdpdGggYW4gaTM4NiBhcmNoaXRlY3R1cmUuCisKK1VzZXIgc3BhY2UgcHJvZ3JhbXMgY2FuIGluY2x1ZGUgL3Vzci9pbmNsdWRlL3N5cy91c2VyLmggYW5kIAorL3Vzci9pbmNsdWRlL2xpbnV4L21tem9uZS5oIHRvIGdldCBQQUdFX1NJWkUgTUFYX09SREVSIGRlY2xhcmF0aW9ucy4KKworVGhlIHBhZ2VzaXplIGNhbiBhbHNvIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkgd2l0aCB0aGUgZ2V0cGFnZXNpemUgKDIpIAorc3lzdGVtIGNhbGwuIAorCisKKyBCbG9jayBudW1iZXIgbGltaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIG9mIFBBQ0tFVF9NTUFQLCB3ZSBoYXZlIHRvIHNlZSB0aGUgc3RydWN0dXJlIAordXNlZCB0byBob2xkIHRoZSBwb2ludGVycyB0byBlYWNoIGJsb2NrLgorCitDdXJyZW50bHksIHRoaXMgc3RydWN0dXJlIGlzIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHZlY3RvciB3aXRoIGttYWxsb2MgCitjYWxsZWQgcGdfdmVjLCBpdHMgc2l6ZSBsaW1pdHMgdGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBjYW4gYmUgYWxsb2NhdGVkLgorCisgICAgKy0tLSstLS0rLS0tKy0tLSsKKyAgICB8IHggfCB4IHwgeCB8IHggfAorICAgICstLS0rLS0tKy0tLSstLS0rCisgICAgICB8ICAgfCAgIHwgICB8CisgICAgICB8ICAgfCAgIHwgICB2CisgICAgICB8ICAgfCAgIHYgIGJsb2NrICM0CisgICAgICB8ICAgdiAgYmxvY2sgIzMKKyAgICAgIHYgIGJsb2NrICMyCisgICAgIGJsb2NrICMxCisKKwora21hbGxvYyBhbGxvY2F0ZXMgYW55IG51bWJlciBvZiBieXRlcyBvZiBwaGlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZyb20gCithIHBvb2wgb2YgcHJlLWRldGVybWluZWQgc2l6ZXMuIFRoaXMgcG9vbCBvZiBtZW1vcnkgaXMgbWFudGFpbmVkIGJ5IHRoZSBzbGFiIAorYWxsb2NhdG9yIHdpY2ggaXMgYXQgdGhlIGVuZCB0aGUgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCAKK2hlbmNlIHdpY2ggaW1wb3NlcyB0aGUgbWF4aW11bSBtZW1vcnkgdGhhdCBrbWFsbG9jIGNhbiBhbGxvY2F0ZS4gCisKK0luIGEgMi40LzIuNiBrZXJuZWwgYW5kIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSwgdGhlIGxpbWl0IGlzIDEzMTA3MiBieXRlcy4gVGhlIAorcHJlZGV0ZXJtaW5lZCBzaXplcyB0aGF0IGttYWxsb2MgdXNlcyBjYW4gYmUgY2hlY2tlZCBpbiB0aGUgInNpemUtPGJ5dGVzPiIgCitlbnRyaWVzIG9mIC9wcm9jL3NsYWJpbmZvCisKK0luIGEgMzIgYml0IGFyY2hpdGVjdHVyZSwgcG9pbnRlcnMgYXJlIDQgYnl0ZXMgbG9uZywgc28gdGhlIHRvdGFsIG51bWJlciBvZiAKK3BvaW50ZXJzIHRvIGJsb2NrcyBpcworCisgICAgIDEzMTA3Mi80ID0gMzI3NjggYmxvY2tzCisKKworIFBBQ0tFVF9NTUFQIGJ1ZmZlciBzaXplIGNhbGN1bGF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWZpbml0aW9uczoKKworPHNpemUtbWF4PiAgICA6IGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgYWxsb2NhYmxlIHdpdGgga21hbGxvYyAoc2VlIC9wcm9jL3NsYWJpbmZvKQorPHBvaW50ZXIgc2l6ZT46IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSAtLSBzaXplb2Yodm9pZCAqKQorPHBhZ2Ugc2l6ZT4gICA6IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSAtLSBQQUdFX1NJWkUgb3IgZ2V0cGFnZXNpemUgKDIpCis8bWF4LW9yZGVyPiAgIDogaXMgdGhlIHZhbHVlIGRlZmluZWQgd2l0aCBNQVhfT1JERVIKKzxmcmFtZSBzaXplPiAgOiBpdCdzIGFuIHVwcGVyIGJvdW5kIG9mIGZyYW1lJ3MgY2FwdHVyZSBzaXplIChtb3JlIG9uIHRoaXMgbGF0ZXIpCisKK2Zyb20gdGhlc2UgZGVmaW5pdGlvbnMgd2Ugd2lsbCBkZXJpdmUgCisKKwk8YmxvY2sgbnVtYmVyPiA9IDxzaXplLW1heD4vPHBvaW50ZXIgc2l6ZT4KKwk8YmxvY2sgc2l6ZT4gPSA8cGFnZXNpemU+IDw8IDxtYXgtb3JkZXI+CisKK3NvLCB0aGUgbWF4IGJ1ZmZlciBzaXplIGlzCisKKwk8YmxvY2sgbnVtYmVyPiAqIDxibG9jayBzaXplPgorCithbmQsIHRoZSBudW1iZXIgb2YgZnJhbWVzIGJlCisKKwk8YmxvY2sgbnVtYmVyPiAqIDxibG9jayBzaXplPiAvIDxmcmFtZSBzaXplPgorCitTdXBvc3NlIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycywgd2ljaCBhcHBseSBmb3IgMi42IGtlcm5lbCBhbmQgYW4KK2kzODYgYXJjaGl0ZWN0dXJlOgorCisJPHNpemUtbWF4PiA9IDEzMTA3MiBieXRlcworCTxwb2ludGVyIHNpemU+ID0gNCBieXRlcworCTxwYWdlc2l6ZT4gPSA0MDk2IGJ5dGVzCisJPG1heC1vcmRlcj4gPSAxMQorCithbmQgYSB2YWx1ZSBmb3IgPGZyYW1lIHNpemU+IG9mIDIwNDggYnl0ZWFzLiBUaGVzZSBwYXJhbWV0ZXJzIHdpbGwgeWllbGQKKworCTxibG9jayBudW1iZXI+ID0gMTMxMDcyLzQgPSAzMjc2OCBibG9ja3MKKwk8YmxvY2sgc2l6ZT4gPSA0MDk2IDw8IDExID0gOCBNaUIuCisKK2FuZCBoZW5jZSB0aGUgYnVmZmVyIHdpbGwgaGF2ZSBhIDI2MjE0NCBNaUIgc2l6ZS4gU28gaXQgY2FuIGhvbGQgCisyNjIxNDQgTWlCIC8gMjA0OCBieXRlcyA9IDEzNDIxNzcyOCBmcmFtZXMKKworCitBY3R1YWxseSwgdGhpcyBidWZmZXIgc2l6ZSBpcyBub3QgcG9zc2libGUgd2l0aCBhbiBpMzg2IGFyY2hpdGVjdHVyZS4gCitSZW1lbWJlciB0aGF0IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGluIGtlcm5lbCBzcGFjZSwgaW4gdGhlIGNhc2Ugb2YgCithbiBpMzg2IGtlcm5lbCdzIG1lbW9yeSBzaXplIGlzIGxpbWl0ZWQgdG8gMUdpQi4KKworQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgbm90IGZyZWVkIHVudGlsIHRoZSBzb2NrZXQgaXMgY2xvc2VkLiBUaGUgbWVtb3J5IAorYWxsb2NhdGlvbnMgYXJlIGRvbmUgd2l0aCBHRlBfS0VSTkVMIHByaW9yaXR5LCB0aGlzIGJhc2ljYWxseSBtZWFucyB0aGF0IAordGhlIGFsbG9jYXRpb24gY2FuIHdhaXQgYW5kIHN3YXAgb3RoZXIgcHJvY2VzcycgbWVtb3J5IGluIG9yZGVyIHRvIGFsbG9jYXRlIAordGhlIG5lY2VjZXNzYXJ5IG1lbW9yeSwgc28gbm9ybWFsbHkgbGltaXRzIGNhbiBiZSByZWFjaGVkLgorCisgT3RoZXIgY29uc3RyYWludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGNoZWNrIHRoZSBzb3VyY2UgY29kZSB5b3Ugd2lsbCBzZWUgdGhhdCB3aGF0IEkgZHJhdyBoZXJlIGFzIGEgZnJhbWUKK2lzIG5vdCBvbmx5IHRoZSBsaW5rIGxldmVsIGZyYW1lLiBBdCB0aGUgYmVnaW5pbmcgb2YgZWFjaCBmcmFtZSB0aGVyZSBpcyBhIAoraGVhZGVyIGNhbGxlZCBzdHJ1Y3QgdHBhY2tldF9oZHIgdXNlZCBpbiBQQUNLRVRfTU1BUCB0byBob2xkIGxpbmsgbGV2ZWwncyBmcmFtZQorbWV0YSBpbmZvcm1hdGlvbiBsaWtlIHRpbWVzdGFtcC4gU28gd2hhdCB3ZSBkcmF3IGhlcmUgYSBmcmFtZSBpdCdzIHJlYWxseSAKK3RoZSBmb2xsb3dpbmcgKGZyb20gaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCk6CisKKy8qCisgICBGcmFtZSBzdHJ1Y3R1cmU6CisKKyAgIC0gU3RhcnQuIEZyYW1lIG11c3QgYmUgYWxpZ25lZCB0byBUUEFDS0VUX0FMSUdOTUVOVD0xNgorICAgLSBzdHJ1Y3QgdHBhY2tldF9oZHIKKyAgIC0gcGFkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIHN0cnVjdCBzb2NrYWRkcl9sbAorICAgLSBHYXAsIGNob3NlbiBzbyB0aGF0IHBhY2tldCBkYXRhIChTdGFydCt0cF9uZXQpIGFsaWduZXMgdG8gCisgICAgIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIFN0YXJ0K3RwX21hYzogWyBPcHRpb25hbCBNQUMgaGVhZGVyIF0KKyAgIC0gU3RhcnQrdHBfbmV0OiBQYWNrZXQgZGF0YSwgYWxpZ25lZCB0byBUUEFDS0VUX0FMSUdOTUVOVD0xNi4KKyAgIC0gUGFkIHRvIGFsaWduIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgKi8KKyAgICAgICAgICAgCisgCisgVGhlIGZvbGxvd2luZyBhcmUgY29uZGl0aW9ucyB0aGF0IGFyZSBjaGVja2VkIGluIHBhY2tldF9zZXRfcmluZworCisgICB0cF9ibG9ja19zaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBQQUdFX1NJWkUgKDEpCisgICB0cF9mcmFtZV9zaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIFRQQUNLRVRfSERSTEVOIChvYnZpb3VzKQorICAgdHBfZnJhbWVfc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgVFBBQ0tFVF9BTElHTk1FTlQKKyAgIHRwX2ZyYW1lX25yICAgbXVzdCBiZSBleGFjdGx5IGZyYW1lc19wZXJfYmxvY2sqdHBfYmxvY2tfbnIKKworTm90ZSB0aGF0IHRwX2Jsb2NrX3NpemUgc2hvdWxkIGJlIGNob29zZWQgdG8gYmUgYSBwb3dlciBvZiB0d28gb3IgdGhlcmUgd2lsbAorYmUgYSB3YXN0ZSBvZiBtZW1vcnkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIE1hcGluZyBhbmQgdXNlIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKHJpbmcpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFwaW5nIG9mIHRoZSBidWZmZXIgaW4gdGhlIHVzZXIgcHJvY2VzcyBpcyBkb25lIHdpdGggdGhlIGNvbnZlbnRpb25hbCAKK21tYXAgZnVuY3Rpb24uIEV2ZW4gdGhlIGNpcmN1bGFyIGJ1ZmZlciBpcyBjb21wb3VuZCBvZiBzZXZlcmFsIHBoeXNpY2FsbHkKK2Rpc2NvbnRpZ3VvdXMgYmxvY2tzIG9mIG1lbW9yeSwgdGhleSBhcmUgY29udGlndW91cyB0byB0aGUgdXNlciBzcGFjZSwgaGVuY2UKK2p1c3Qgb25lIGNhbGwgdG8gbW1hcCBpcyBuZWVkZWQ6CisKKyAgICBtbWFwKDAsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CisKK0lmIHRwX2ZyYW1lX3NpemUgaXMgYSBkaXZpc29yIG9mIHRwX2Jsb2NrX3NpemUgZnJhbWVzIHdpbGwgYmUgCitjb250aWd1b3NseSBzcGFjZWQgYnkgdHBfZnJhbWVfc2l6ZSBieXRlcy4gSWYgbm90LCBlYWNoIAordHBfYmxvY2tfc2l6ZS90cF9mcmFtZV9zaXplIGZyYW1lcyB0aGVyZSB3aWxsIGJlIGEgZ2FwIGJldHdlZW4gCit0aGUgZnJhbWVzLiBUaGlzIGlzIGJlY2F1c2UgYSBmcmFtZSBjYW5ub3QgYmUgc3Bhd24gYWNyb3NzIHR3bworYmxvY2tzLiAKKworQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZyYW1lIHRoZXJlIGlzIGFuIHN0YXR1cyBmaWVsZCAoc2VlIAorc3RydWN0IHRwYWNrZXRfaGRyKS4gSWYgdGhpcyBmaWVsZCBpcyAwIG1lYW5zIHRoYXQgdGhlIGZyYW1lIGlzIHJlYWR5Cit0byBiZSB1c2VkIGZvciB0aGUga2VybmVsLCBJZiBub3QsIHRoZXJlIGlzIGEgZnJhbWUgdGhlIHVzZXIgY2FuIHJlYWQgCithbmQgdGhlIGZvbGxvd2luZyBmbGFncyBhcHBseToKKworICAgICBmcm9tIGluY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKKworICAgICAjZGVmaW5lIFRQX1NUQVRVU19DT1BZICAgICAgICAgIDIgCisgICAgICNkZWZpbmUgVFBfU1RBVFVTX0xPU0lORyAgICAgICAgNCAKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfQ1NVTU5PVFJFQURZICA4IAorCisKK1RQX1NUQVRVU19DT1BZICAgICAgICA6IFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgZnJhbWUgKGFuZCBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhIGluZm9ybWF0aW9uKSBoYXMgYmVlbiB0cnVuY2F0ZWQgYmVjYXVzZSBpdCdzIAorICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VyIHRoYW4gdHBfZnJhbWVfc2l6ZS4gVGhpcyBwYWNrZXQgY2FuIGJlIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCBlbnRpcmVseSB3aXRoIHJlY3Zmcm9tKCkuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB3b3JrIGl0IG11c3QgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgcHJldmlvdXNseSB3aXRoIHNldHNvY2tvcHQoKSBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUEFDS0VUX0NPUFlfVEhSRVNIIG9wdGlvbi4gCisKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYW4gY2FuIGJlIGJ1ZmZlcmVkIHRvIAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVhZCB3aXRoIHJlY3Zmcm9tIGlzIGxpbWl0ZWQgbGlrZSBhIG5vcm1hbCBzb2NrZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIFNPX1JDVkJVRiBvcHRpb24gaW4gdGhlIHNvY2tldCAoNykgbWFuIHBhZ2UuCisKK1RQX1NUQVRVU19MT1NJTkcgICAgICA6IGluZGljYXRlcyB0aGVyZSB3ZXJlIHBhY2tldCBkcm9wcyBmcm9tIGxhc3QgdGltZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3Mgd2hlcmUgY2hlY2tlZCB3aXRoIGdldHNvY2tvcHQoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBQQUNLRVRfU1RBVElTVElDUyBvcHRpb24uCisKK1RQX1NUQVRVU19DU1VNTk9UUkVBRFk6IGN1cnJlbnRseSBpdCdzIHVzZWQgZm9yIG91dGdvaW5nIElQIHBhY2tldHMgd2ljaCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0J3MgY2hlY2tzdW0gd2lsbCBiZSBkb25lIGluIGhhcmR3YXJlLiBTbyB3aGlsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbmcgdGhlIHBhY2tldCB3ZSBzaG91bGQgbm90IHRyeSB0byBjaGVjayB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bS4gCisKK2ZvciBjb252ZW5pZW5jZSB0aGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nIGRlZmluZXM6CisKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfS0VSTkVMICAgICAgICAwCisgICAgICNkZWZpbmUgVFBfU1RBVFVTX1VTRVIgICAgICAgICAgMQorCitUaGUga2VybmVsIGluaXRpYWxpemVzIGFsbCBmcmFtZXMgdG8gVFBfU1RBVFVTX0tFUk5FTCwgd2hlbiB0aGUga2VybmVsCityZWNlaXZlcyBhIHBhY2tldCBpdCBwdXRzIGluIHRoZSBidWZmZXIgYW5kIHVwZGF0ZXMgdGhlIHN0YXR1cyB3aXRoCithdCBsZWFzdCB0aGUgVFBfU1RBVFVTX1VTRVIgZmxhZy4gVGhlbiB0aGUgdXNlciBjYW4gcmVhZCB0aGUgcGFja2V0LAorb25jZSB0aGUgcGFja2V0IGlzIHJlYWQgdGhlIHVzZXIgbXVzdCB6ZXJvIHRoZSBzdGF0dXMgZmllbGQsIHNvIHRoZSBrZXJuZWwgCitjYW4gdXNlIGFnYWluIHRoYXQgZnJhbWUgYnVmZmVyLgorCitUaGUgdXNlciBjYW4gdXNlIHBvbGwgKGFueSBvdGhlciB2YXJpYW50IHNob3VsZCBhcHBseSB0b28pIHRvIGNoZWNrIGlmIG5ldworcGFja2V0cyBhcmUgaW4gdGhlIHJpbmc6CisKKyAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsKKworICAgIHBmZC5mZCA9IGZkOworICAgIHBmZC5yZXZlbnRzID0gMDsKKyAgICBwZmQuZXZlbnRzID0gUE9MTElOfFBPTExSRE5PUk18UE9MTEVSUjsKKworICAgIGlmIChzdGF0dXMgPT0gVFBfU1RBVFVTX0tFUk5FTCkKKyAgICAgICAgcmV0dmFsID0gcG9sbCgmcGZkLCAxLCB0aW1lb3V0KTsKKworSXQgZG9lc24ndCBpbmN1ciBpbiBhIHJhY2UgY29uZGl0aW9uIHRvIGZpcnN0IGNoZWNrIHRoZSBzdGF0dXMgdmFsdWUgYW5kIAordGhlbiBwb2xsIGZvciBmcmFtZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIFRIQU5LUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIAorICAgSmVzc2UgQnJhbmRlYnVyZywgZm9yIGZpeGluZyBteSBncmFtbWF0aGljYWwvc3BlbGxpbmcgZXJyb3JzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0YjRkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CkBAIC0wLDAgKzEsMjE0IEBACisKKworICAgICAgICAgICAgICAgICAgSE9XVE8gZm9yIHRoZSBsaW51eCBwYWNrZXQgZ2VuZXJhdG9yIAorICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGU6IDA0MTIyMQorCitFbmFibGUgQ09ORklHX05FVF9QS1RHRU4gdG8gY29tcGlsZSBhbmQgYnVpbGQgcGt0Z2VuLm8gZWl0aGVyIGluIGtlcm5lbAorb3IgYXMgbW9kdWxlLiBNb2R1bGUgaXMgcHJlZmVycmVkLiBpbnNtb2QgcGt0Z2VuIGlmIG5lZWRlZC4gT25jZSBydW5uaW5nCitwa3RnZW4gY3JlYXRlcyBhIHRocmVhZCBvbiBlYWNoIENQVSB3aGVyZSBlYWNoIHRocmVhZCBoYXMgYWZmaW50eSBpdCdzIENQVS4KK01vbml0b3JpbmcgYW5kIGNvbnRyb2xsaW5nIGlzIGRvbmUgdmlhIC9wcm9jLiBFYXNpZXN0IHRvIHNlbGVjdCBhIHN1aXRhYmxlIAorYSBzYW1wbGUgc2NyaXB0IGFuZCBjb25maWd1cmUuCisKK09uIGEgZHVhbCBDUFU6CisKK3BzIGF1eCB8IGdyZXAgcGt0Cityb290ICAgICAgIDEyOSAgMC4zICAwLjAgICAgIDAgICAgMCA/ICAgICAgICBTVyAgICAyMDAzIDUyMzoyMCBbcGt0Z2VuLzBdCityb290ICAgICAgIDEzMCAgMC4zICAwLjAgICAgIDAgICAgMCA/ICAgICAgICBTVyAgICAyMDAzIDUwOTo1MCBbcGt0Z2VuLzFdCisKKworRm9yIG1vbnRvcmluZyBhbmQgY29udHJvbCBwa3RnZW4gY3JlYXRlczoKKwkvcHJvYy9uZXQvcGt0Z2VuL3BnY3RybAorCS9wcm9jL25ldC9wa3RnZW4va3BrdGdlbmRfWAorICAgICAgICAvcHJvYy9uZXQvcGt0Z2VuL2V0aFgKKworCitWaWV3aW5nIHRocmVhZHMKKz09PT09PT09PT09PT09PQorL3Byb2MvbmV0L3BrdGdlbi9rcGt0Z2VuZF8wIAorTmFtZToga3BrdGdlbmRfMCAgbWF4X2JlZm9yZV9zb2Z0aXJxOiAxMDAwMAorUnVubmluZzogCitTdG9wcGVkOiBldGgxIAorUmVzdWx0OiBPSzogbWF4X2JlZm9yZV9zb2Z0aXJxPTEwMDAwCisKK01vc3QgaW1wb3J0YW50IHRoZSBkZXZpY2VzIGFzc2lnZW5kIHRvIHRocmVhZC4gTm90ZSEgQSBkZXZpY2UgY2FuIG9ubHkgYmVsb25nIAordG8gb25lIHRocmVhZC4KKworCitWaWV3aW5nIGRldmljZXMKKz09PT09PT09PT09PT09PQorCitQYXJtIHNlY3Rpb24gaG9sZHMgY29uZmlndXJlZCBpbmZvLiBDdXJyZW50IGhvbGQgcnVubmluZyBzdGF0cy4gCitSZXN1bHQgaXMgcHJpbnRlZCBhZnRlciBydW4gb3IgYWZ0ZXIgaW50ZXJydXB0aW9uLiBFeGFtcGxlOgorCisvcHJvYy9uZXQvcGt0Z2VuL2V0aDEgICAgICAgCisKK1BhcmFtczogY291bnQgMTAwMDAwMDAgIG1pbl9wa3Rfc2l6ZTogNjAgIG1heF9wa3Rfc2l6ZTogNjAKKyAgICAgZnJhZ3M6IDAgIGRlbGF5OiAwICBjbG9uZV9za2I6IDEwMDAwMDAgIGlmbmFtZTogZXRoMQorICAgICBmbG93czogMCBmbG93bGVuOiAwCisgICAgIGRzdF9taW46IDEwLjEwLjExLjIgIGRzdF9tYXg6IAorICAgICBzcmNfbWluOiAgIHNyY19tYXg6IAorICAgICBzcmNfbWFjOiAwMDowMDowMDowMDowMDowMCAgZHN0X21hYzogMDA6MDQ6MjM6QUM6RkQ6ODIKKyAgICAgdWRwX3NyY19taW46IDkgIHVkcF9zcmNfbWF4OiA5ICB1ZHBfZHN0X21pbjogOSAgdWRwX2RzdF9tYXg6IDkKKyAgICAgc3JjX21hY19jb3VudDogMCAgZHN0X21hY19jb3VudDogMCAKKyAgICAgRmxhZ3M6IAorQ3VycmVudDoKKyAgICAgcGt0cy1zb2ZhcjogMTAwMDAwMDAgIGVycm9yczogMzk2NjQKKyAgICAgc3RhcnRlZDogMTEwMzA1Mzk4NjI0NTE4N3VzICBzdG9wcGVkOiAxMTAzMDUzOTk5MzQ2MzI5dXMgaWRsZTogODgwNDAxdXMKKyAgICAgc2VxX251bTogMTAwMDAwMTEgIGN1cl9kc3RfbWFjX29mZnNldDogMCAgY3VyX3NyY19tYWNfb2Zmc2V0OiAwCisgICAgIGN1cl9zYWRkcjogMHgxMGEwYTBhICBjdXJfZGFkZHI6IDB4MjBiMGEwYQorICAgICBjdXJfdWRwX2RzdDogOSAgY3VyX3VkcF9zcmM6IDkKKyAgICAgZmxvd3M6IDAKK1Jlc3VsdDogT0s6IDEzMTAxMTQyKGMxMjIyMDc0MStkODgwNDAxKSB1c2VjLCAxMDAwMDAwMCAoNjBieXRlLDBmcmFncykKKyAgNzYzMjkycHBzIDM5ME1iL3NlYyAoMzkwODA1NTA0YnBzKSBlcnJvcnM6IDM5NjY0CisKK0NvbmZndXJpbmcgdGhyZWFkcyBhbmQgZGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIGRvbmUgdmlhIHRoZSAvcHJvYyBpbnRlcmZhY2UgZWFzaWVzdCBkb25lIHZpYSBwZ3NldCBpbiB0aGUgc2NyaXB0cworCitFeGFtcGxlczoKKworIHBnc2V0ICJjbG9uZV9za2IgMSIgICAgIHNldHMgdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHNhbWUgcGFja2V0CisgcGdzZXQgImNsb25lX3NrYiAwIiAgICAgdXNlIHNpbmdsZSBTS0IgZm9yIGFsbCB0cmFuc21pdHMKKyBwZ3NldCAicGt0X3NpemUgOTAxNCIgICBzZXRzIHBhY2tldCBzaXplIHRvIDkwMTQKKyBwZ3NldCAiZnJhZ3MgNSIgICAgICAgICBwYWNrZXQgd2lsbCBjb25zaXN0IG9mIDUgZnJhZ21lbnRzCisgcGdzZXQgImNvdW50IDIwMDAwMCIgICAgc2V0cyBudW1iZXIgb2YgcGFja2V0cyB0byBzZW5kLCBzZXQgdG8gemVybworICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb250aW5pb3VzIHNlbmRzIHVudGlsbCBleHBsaWNpdGwgc3RvcHBlZC4KKworIHBnc2V0ICJkZWxheSA1MDAwIiAgICAgIGFkZHMgZGVsYXkgdG8gaGFyZF9zdGFydF94bWl0KCkuIG5hbm9zZWNvbmRzCisKKyBwZ3NldCAiZHN0IDEwLjAuMC4xIiAgICBzZXRzIElQIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAoQkVXQVJFISBUaGlzIGdlbmVyYXRvciBpcyB2ZXJ5IGFnZ3Jlc3NpdmUhKQorCisgcGdzZXQgImRzdF9taW4gMTAuMC4wLjEiICAgICAgICAgICAgU2FtZSBhcyBkc3QKKyBwZ3NldCAiZHN0X21heCAxMC4wLjAuMjU0IiAgICAgICAgICBTZXQgdGhlIG1heGltdW0gZGVzdGluYXRpb24gSVAuCisgcGdzZXQgInNyY19taW4gMTAuMC4wLjEiICAgICAgICAgICAgU2V0IHRoZSBtaW5pbXVtIChvciBvbmx5KSBzb3VyY2UgSVAuCisgcGdzZXQgInNyY19tYXggMTAuMC4wLjI1NCIgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIHNvdXJjZSBJUC4KKyBwZ3NldCAiZHN0NiBmZWMwOjoxIiAgICAgSVBWNiBkZXN0aW5hdGlvbiBhZGRyZXNzCisgcGdzZXQgInNyYzYgZmVjMDo6MiIgICAgIElQVjYgc291cmNlIGFkZHJlc3MKKyBwZ3NldCAiZHN0bWFjIDAwOjAwOjAwOjAwOjAwOjAwIiAgICBzZXRzIE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzCisgcGdzZXQgInNyY21hYyAwMDowMDowMDowMDowMDowMCIgICAgc2V0cyBNQUMgc291cmNlIGFkZHJlc3MKKworIHBnc2V0ICJzcmNfbWFjX2NvdW50IDEiIFNldHMgdGhlIG51bWJlciBvZiBNQUNzIHdlJ2xsIHJhbmdlIHRocm91Z2guICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgJ21pbmltdW0nIE1BQyBpcyB3aGF0IHlvdSBzZXQgd2l0aCBzcmNtYWMuCisKKyBwZ3NldCAiZHN0X21hY19jb3VudCAxIiBTZXRzIHRoZSBudW1iZXIgb2YgTUFDcyB3ZSdsbCByYW5nZSB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAnbWluaW11bScgTUFDIGlzIHdoYXQgeW91IHNldCB3aXRoIGRzdG1hYy4KKworIHBnc2V0ICJmbGFnIFtuYW1lXSIgICAgIFNldCBhIGZsYWcgdG8gZGV0ZXJtaW5lIGJlaGF2aW91ci4gIEN1cnJlbnQgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmU6IElQU1JDX1JORCAjSVAgU291cmNlIGlzIHJhbmRvbSAoYmV0d2VlbiBtaW4vbWF4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQRFNUX1JORCwgVURQU1JDX1JORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEUERTVF9STkQsIE1BQ1NSQ19STkQsIE1BQ0RTVF9STkQgCisKKyBwZ3NldCAidWRwX3NyY19taW4gOSIgICBzZXQgVURQIHNvdXJjZSBwb3J0IG1pbiwgSWYgPCB1ZHBfc3JjX21heCwgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlIHRocm91Z2ggdGhlIHBvcnQgcmFuZ2UuCisKKyBwZ3NldCAidWRwX3NyY19tYXggOSIgICBzZXQgVURQIHNvdXJjZSBwb3J0IG1heC4KKyBwZ3NldCAidWRwX2RzdF9taW4gOSIgICBzZXQgVURQIGRlc3RpbmF0aW9uIHBvcnQgbWluLCBJZiA8IHVkcF9kc3RfbWF4LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUgdGhyb3VnaCB0aGUgcG9ydCByYW5nZS4KKyBwZ3NldCAidWRwX2RzdF9tYXggOSIgICBzZXQgVURQIGRlc3RpbmF0aW9uIHBvcnQgbWF4LgorCisgcGdzZXQgc3RvcCAgICAJICAgICAgICAgIGFib3J0cyBpbmplY3Rpb24uIEFsc28sIF5DIGFib3J0cyBnZW5lcmF0b3IuCisKKworRXhhbXBsZSBzY3JpcHRzCis9PT09PT09PT09PT09PT0KKworQSBjb2xsZWN0aW9uIG9mIHNtYWxsIHR1dG9yaWFsIHNjcmlwdHMgZm9yIHBrdGdlbiBpcyBpbiBleHBhbXBsZXMgZGlyLgorCitwa3RnZW4uY29uZi0xLTEgICAgICAgICAgICAgICAgICAjIDEgQ1BVIDEgZGV2IAorcGt0Z2VuLmNvbmYtMS0yICAgICAgICAgICAgICAgICAgIyAxIENQVSAyIGRldgorcGt0Z2VuLmNvbmYtMi0xICAgICAgICAgICAgICAgICAgIyAyIENQVSdzIDEgZGV2IAorcGt0Z2VuLmNvbmYtMi0yICAgICAgICAgICAgICAgICAgIyAyIENQVSdzIDIgZGV2Citwa3RnZW4uY29uZi0xLTEtcmRvcyAgICAgICAgICAgICAjIDEgQ1BVIDEgZGV2IHcuIHJvdXRlIERvUyAKK3BrdGdlbi5jb25mLTEtMS1pcDYgICAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgaXB2NgorcGt0Z2VuLmNvbmYtMS0xLWlwNi1yZG9zICAgICAgICAgIyAxIENQVSAxIGRldiBpcHY2ICB3LiByb3V0ZSBEb1MKK3BrdGdlbi5jb25mLTEtMS1mbG93cyAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgbXVsdGlwbGUgZmxvd3MuCisKK1J1biBpbiBzaGVsbDogLi9wa3RnZW4uY29uZi1YLVkgSXQgZG9lcyBhbGwgdGhlIHNldHVwIGluY2x1ZGluZyBzZW5kaW5nLiAKKworCitJbnRlcnJ1cHQgYWZmaW5pdHkKKz09PT09PT09PT09PT09PT09PT0KK05vdGUgd2hlbiBhZGRpbmcgZGV2aWNlcyB0byBhIHNwZWNpZmljIENQVSB0aGVyZSBnb29kIGlkZWEgdG8gYWxzbyBhc3NpZ24gCisvcHJvYy9pcnEvWFgvc21wX2FmZmluaXR5IHNvIHRoZSBUWC1pbnRlcnJ1cHRzIGdldHMgYm91bmQgdG8gdGhlIHNhbWUgQ1BVLgorYXMgdGhpcyByZWR1Y2VzIGNhY2hlIGJvdW5jaW5nIHdoZW4gZnJlZWluZyBza2Incy4KKworCitDdXJyZW50IGNvbW1hbmRzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqKiBQZ2NvbnRyb2wgY29tbWFuZHM6CisKK3N0YXJ0CitzdG9wCisKKyoqIFRocmVhZCBjb21tYW5kczoKKworYWRkX2RldmljZQorcmVtX2RldmljZV9hbGwKK21heF9iZWZvcmVfc29mdGlycQorCisKKyoqIERldmljZSBjb21tYW5kczoKKworY291bnQKK2Nsb25lX3NrYgorZGVidWcKKworZnJhZ3MKK2RlbGF5CisKK3NyY19tYWNfY291bnQKK2RzdF9tYWNfY291bnQKKworcGt0X3NpemUgCittaW5fcGt0X3NpemUKK21heF9wa3Rfc2l6ZQorCit1ZHBfc3JjX21pbgordWRwX3NyY19tYXgKKwordWRwX2RzdF9taW4KK3VkcF9kc3RfbWF4CisKK2ZsYWcKKyAgSVBTUkNfUk5ECisgIFRYU0laRV9STkQKKyAgSVBEU1RfUk5ECisgIFVEUFNSQ19STkQKKyAgVURQRFNUX1JORAorICBNQUNTUkNfUk5ECisgIE1BQ0RTVF9STkQKKworZHN0X21pbgorZHN0X21heAorCitzcmNfbWluCitzcmNfbWF4CisKK2RzdF9tYWMKK3NyY19tYWMKKworY2xlYXJfY291bnRlcnMKKworZHN0Ngorc3JjNgorCitmbG93cworZmxvd2xlbgorCitSZWZlcmVuY2VzOgorZnRwOi8vcm9idXIuc2x1LnNlL3B1Yi9MaW51eC9uZXQtZGV2ZWxvcG1lbnQvcGt0Z2VuLXRlc3RpbmcvCitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9wa3RnZW4tdGVzdGluZy9leGFtcGxlcy8KKworUGFwZXIgZnJvbSBMaW51eC1Lb25ncmVzcyBpbiBFcmxhbmdlbiAyMDA0LgorZnRwOi8vcm9idXIuc2x1LnNlL3B1Yi9MaW51eC9uZXQtZGV2ZWxvcG1lbnQvcGt0Z2VuLXRlc3RpbmcvcGt0Z2VuX3BhcGVyLnBkZgorCitUaGFua3MgdG86CitHcmFudCBHcnVuZGxlciBmb3IgdGVzdGluZyBvbiBJQS02NCBhbmQgcGFyaXNjLCBIYXJhbGQgV2VsdGUsICBMZW5uZXJ0IEJ1eXRlbmhlaworU3RlcGhlbiBIZW1taW5nZXIsIEFuZGkgS2xlZW4sIERhdmUgTWlsbGVyIGFuZCBtYW55IG90aGVycy4KKworCitHb29kIGx1Y2sgd2l0aCB0aGUgbGludXggbmV0LWRldmVsb3BtZW50LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wb2xpY3ktcm91dGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcG9saWN5LXJvdXRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjY5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcG9saWN5LXJvdXRpbmcudHh0CkBAIC0wLDAgKzEsMTUwIEBACitDbGFzc2VzCistLS0tLS0tCisKKwkiQ2xhc3MiIGlzIGEgY29tcGxldGUgcm91dGluZyB0YWJsZSBpbiBjb21tb24gc2Vuc2UuCisJSS5lLiBpdCBpcyB0cmVlIG9mIG5vZGVzIChkZXN0aW5hdGlvbiBwcmVmaXgsIHRvcywgbWV0cmljKQorCXdpdGggYXR0YWNoZWQgaW5mb3JtYXRpb246IGdhdGV3YXksIGRldmljZSBldGMuCisJVGhpcyB0cmVlIGlzIGxvb2tlZCB1cCBhcyBzcGVjaWZpZWQgaW4gUkZDMTgxMiA1LjIuNC4zCisJMS4gQmFzaWMgbWF0Y2gKKwkyLiBMb25nZXN0IG1hdGNoCisJMy4gV2VhayBUT1MuCisJNC4gTWV0cmljLiAoc2hvdWxkIG5vdCBiZSBpbiBrZXJuZWwgc3BhY2UsIGJ1dCB0aGV5IGFyZSkKKwk1LiBBZGRpdGlvbmFsIHBydW5pbmcgcnVsZXMuIChub3QgaW4ga2VybmVsIHNwYWNlKS4KKwkKKwlXZSBoYXZlIHR3byBzcGVjaWFsIHR5cGUgb2Ygbm9kZXM6CisJUkVKRUNUIC0gYWJvcnQgcm91dGUgbG9va3VwIGFuZCByZXR1cm4gYW4gZXJyb3IgdmFsdWUuCisJVEhST1cgIC0gYWJvcnQgcm91dGUgbG9va3VwIGluIHRoaXMgY2xhc3MuCisKKworCUN1cnJlbnRseSB0aGUgbnVtYmVyIG9mIGNsYXNzZXMgaXMgbGltaXRlZCB0byAyNTUKKwkoMCBpcyByZXNlcnZlZCBmb3IgIm5vdCBzcGVjaWZpZWQgY2xhc3MiKQorCisJVGhyZWUgY2xhc3NlcyBhcmUgYnVpbHRpbjoKKworCVJUX0NMQVNTX0xPQ0FMPTI1NSAtIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzZXMsCisJYnJvYWRjYXN0cywgbmF0IGFkZHJlc3Nlcy4KKworCVJUX0NMQVNTX01BSU49MjU0ICAtIGFsbCBub3JtYWwgcm91dGVzIGFyZSBwdXQgdGhlcmUKKwlieSBkZWZhdWx0LgorCisJUlRfQ0xBU1NfREVGQVVMVD0yNTMgLSBpZiBpcF9maWJfbW9kZWw9PTEsIHRoZW4KKwlub3JtYWwgZGVmYXVsdCByb3V0ZXMgYXJlIHB1dCB0aGVyZSwgaWYgaXBfZmliX21vZGVsPT0yCisJYWxsIGdhdGV3YXkgcm91dGVzIGFyZSBwdXQgdGhlcmUuCisKKworUnVsZXMKKy0tLS0tCisJUnVsZSBpcyBhIHJlY29yZCBvZiAoc3JjIHByZWZpeCwgc3JjIGludGVyZmFjZSwgdG9zLCBkc3QgcHJlZml4KQorCXdpdGggYXR0YWNoZWQgaW5mb3JtYXRpb24uCisKKwlSdWxlIHR5cGVzOgorCVJUUF9ST1VURSAtIGxvb2t1cCBpbiBhdHRhY2hlZCBjbGFzcworCVJUUF9OQVQgICAtIGxvb2t1cCBpbiBhdHRhY2hlZCBjbGFzcyBhbmQgaWYgYSBtYXRjaCBpcyBmb3VuZCwKKwkJICAgIHRyYW5zbGF0ZSBwYWNrZXQgc291cmNlIGFkZHJlc3MuCisJUlRQX01BU1FVRVJBREUgLSBsb29rdXAgaW4gYXR0YWNoZWQgY2xhc3MgYW5kIGlmIGEgbWF0Y2ggaXMgZm91bmQsCisJCSAgICBtYXNxdWVyYWRlIHBhY2tldCBhcyBzb3VyY2VkIGJ5IHVzLgorCVJUUF9EUk9QICAgLSBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQuCisJUlRQX1JFSkVDVCAtIGRyb3AgdGhlIHBhY2tldCBhbmQgc2VuZCBJQ01QIE5FVCBVTlJFQUNIQUJMRS4KKwlSVFBfUFJPSElCSVQgLSBkcm9wIHRoZSBwYWNrZXQgYW5kIHNlbmQgSUNNUCBDT01NLiBBRE0uIFBST0hJQklURUQuCisKKwlSdWxlIGZsYWdzOgorCVJUUkZfTE9HIC0gbG9nIHJvdXRlIGNyZWF0aW9ucy4KKwlSVFJGX1ZBTFZFIC0gT25lIHdheSByb3V0ZSAodXNlZCB3aXRoIG1hc3F1ZXJhZGluZykKKworRGVmYXVsdCBzZXR1cDoKKworcm9vdEBhbWJlcjovcHViL2lwLXJvdXRpbmcgIyBpcHJvdXRlIC1yCitLZXJuZWwgcm91dGluZyBwb2xpY3kgcnVsZXMKK1ByZWYgU291cmNlICAgICAgICAgICAgIERlc3RpbmF0aW9uICAgICAgICBUT1MgSWZhY2UgICBDbAorICAgMCBkZWZhdWx0ICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDAwICAqICAgICAgIDI1NQorIDI1NCBkZWZhdWx0ICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDAwICAqICAgICAgIDI1NAorIDI1NSBkZWZhdWx0ICAgICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgIDAwICAqICAgICAgIDI1MworCisKK0xvb2t1cCBhbGdvcml0aG0KKy0tLS0tLS0tLS0tLS0tLS0KKworCVdlIHNjYW4gcnVsZXMgbGlzdCwgYW5kIGlmIGEgcnVsZSBpcyBtYXRjaGVkLCBhcHBseSBpdC4KKwlJZiBhIHJvdXRlIGlzIGZvdW5kLCByZXR1cm4gaXQuCisJSWYgaXQgaXMgbm90IGZvdW5kIG9yIGEgVEhST1cgbm9kZSB3YXMgbWF0Y2hlZCwgY29udGludWUKKwl0byBzY2FuIHJ1bGVzLgorCitBcHBsaWNhdGlvbnMKKy0tLS0tLS0tLS0tLQorCisxLglKdXN0IGlnbm9yZSBjbGFzc2VzLiBBbGwgdGhlIHJvdXRlcyBhcmUgcHV0IGludG8gTUFJTiBjbGFzcworCShhbmQvb3IgaW50byBERUZBVUxUIGNsYXNzKS4KKworCUhPV1RPOiAgaXByb3V0ZSBhZGQgUFJFRklYIFsgdG9zIFRPUyBdIFsgZ3cgR1cgXSBbIGRldiBERVYgXQorCQlbIG1ldHJpYyBNRVRSSUMgXSBbIHJlamVjdCBdIC4uLiAobG9vayBhdCBpcHJvdXRlIHV0aWxpdHkpCisKKwkJb3IgdXNlIHJvdXRlIHV0aWxpdHkgZnJvbSBjdXJyZW50IG5ldC10b29scy4KKwkJCisyLglPcHBvc2l0ZSBjYXNlLiBKdXN0IGZvcmdldCBhbGwgdGhhdCB5b3Uga25vdyBhYm91dCByb3V0aW5nCisJdGFibGVzLiBFdmVyeSBydWxlIGlzIHN1cHBsaWVkIHdpdGggaXRzIG93biBnYXRld2F5LCBkZXZpY2UKKwlpbmZvLiByZWNvcmQuIFRoaXMgYXBwcm9hY2ggaXMgbm90IGFwcHJvcHJpYXRlIGZvciBhdXRvbWF0ZWQKKwlyb3V0ZSBtYWludGVuYW5jZSwgYnV0IGl0IGlzIGlkZWFsIGZvciBtYW51YWwgY29uZmlndXJhdGlvbi4KKworCUhPV1RPOiAgaXByb3V0ZSBhZGRydWxlIFsgZnJvbSBQUkVGSVggXSBbIHRvIFBSRUZJWCBdIFsgdG9zIFRPUyBdCisJCVsgZGV2IElOUFVUREVWXSBbIHByZWYgUFJFRkVSRU5DRSBdIHJvdXRlIFsgZ3cgR0FURVdBWSBdCisJCVsgZGV2IE9VVERFViBdIC4uLi4uCisKKwlXYXJuaW5nOiBBcyBvZiBub3cgdGhlIHNpemUgb2YgdGhlIHJvdXRpbmcgdGFibGUgaW4gdGhpcworCWFwcHJvYWNoIGlzIGxpbWl0ZWQgdG8gMjU2LiBJZiBzb21lb25lIGxpa2VzIHRoaXMgbW9kZWwsIEknbGwKKwlyZWxheCB0aGlzIGxpbWl0YXRpb24uCisKKzMuCU9TUEYgY2xhc3NlcyAoc2VlIFJGQzE1ODMsIFJGQzE4MTIgRS4zLjMpCisJVmVyeSBjbGVhbiwgc3RhYmxlIGFuZCByb2J1c3QgYWxnb3JpdGhtIGZvciBPU1BGIHJvdXRpbmcKKwlkb21haW5zLiBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3Qgd2lkZWx5IHVzZWQgaW4gdGhlIEludGVybmV0LgorCisJUHJvcG9zZWQgc2V0dXA6CisJMjU1IGxvY2FsIGFkZHJlc3NlcworCTI1NCBpbnRlcmZhY2Ugcm91dGVzCisJMjUzIEFTRSByb3V0ZXMgd2l0aCBleHRlcm5hbCBtZXRyaWMKKwkyNTIgQVNFIHJvdXRlcyB3aXRoIGludGVybmFsIG1ldHJpYworCTI1MSBpbnRlci1hcmVhIHJvdXRlcworCTI1MCBpbnRyYS1hcmVhIHJvdXRlcyBmb3IgMXN0IGFyZWEKKwkyNDkgaW50cmEtYXJlYSByb3V0ZXMgZm9yIDJuZCBhcmVhCisJZXRjLgorCQorCVJ1bGVzOgorCWlwcm91dGUgYWRkcnVsZSBjbGFzcyAyNTMKKwlpcHJvdXRlIGFkZHJ1bGUgY2xhc3MgMjUyCisJaXByb3V0ZSBhZGRydWxlIGNsYXNzIDI1MQorCWlwcm91dGUgYWRkcnVsZSB0byBhLXByZWZpeC1mb3ItMXN0LWFyZWEgY2xhc3MgMjUwCisJaXByb3V0ZSBhZGRydWxlIHRvIGFub3RoZXItcHJlZml4LWZvci0xc3QtYXJlYSBjbGFzcyAyNTAKKwkuLi4KKwlpcHJvdXRlIGFkZHJ1bGUgdG8gYS1wcmVmaXgtZm9yLTJuZC1hcmVhIGNsYXNzIDI0OQorCS4uLgorCisJQXJlYSBjbGFzc2VzIG11c3QgYmUgdGVybWluYXRlZCB3aXRoIHJlamVjdCByZWNvcmQuCisJaXByb3V0ZSBhZGQgZGVmYXVsdCByZWplY3QgY2xhc3MgMjUwCisJaXByb3V0ZSBhZGQgZGVmYXVsdCByZWplY3QgY2xhc3MgMjQ5CisJLi4uCisKKzQuCVRoZSBWYXJpYW50IFJvdXRlciBSZXF1aXJlbWVudHMgQWxnb3JpdGhtIChSRkMxODEyIEUuMy4yKQorCUNyZWF0ZSAxNiBjbGFzc2VzIGZvciBkaWZmZXJlbnQgVE9TIHZhbHVlcy4KKwlJdCBpcyBhIGZ1bm55LCBidXQgcHJldHR5IHVzZWxlc3MgYWxnb3JpdGhtLgorCUkgbGlzdGVkIGl0IGp1c3QgdG8gc2hvdyB0aGUgcG93ZXIgb2YgbmV3IHJvdXRpbmcgY29kZS4KKworNS4JQWxsIHRoZSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucy4uLi4uLgorCisKK0dBVEVECistLS0tLQorCisJR2F0ZWQgZG9lcyBub3QgdW5kZXJzdGFuZCBjbGFzc2VzLCBidXQgaXQgd2lsbCB3b3JrCisJaGFwcGlseSBpbiBNQUlOK0RFRkFVTFQuIEFsbCBwb2xpY3kgcm91dGVzIGNhbiBiZSBzZXQKKwlhbmQgbWFpbnRhaW5lZCBtYW51YWxseS4KKworSU1QT1JUQU5UIE5PVEUKKy0tLS0tLS0tLS0tLS0tCisJcm91dGUuYyBoYXMgYSBjb21waWxhdGlvbiB0aW1lIHN3aXRjaCBDT05GSUdfSVBfTE9DQUxfUlRfUE9MSUNZLgorCUlmIGl0IGlzIHNldCwgbG9jYWxseSBvcmlnaW5hdGVkIHBhY2tldHMgYXJlIHJvdXRlZAorCXVzaW5nIGFsbCB0aGUgcG9saWN5IGxpc3QuIFRoaXMgaXMgbm90IHZlcnkgY29udmVuaWVudCBhbmQKKwlwcmV0dHkgYW1iaWd1b3VzIHdoZW4gdXNlZCB3aXRoIE5BVCBhbmQgbWFzcXVlcmFkaW5nLgorCUkgc2V0IGl0IHRvIEZBTFNFIGJ5IGRlZmF1bHQuCisKKworQWxleGV5IEt1em5ldG92CitrdXpuZXRAbXMyLmluci5hYy5ydQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViNTE3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy50eHQKQEAgLTAsMCArMSw0MzIgQEAKKwkJUFBQIEdlbmVyaWMgRHJpdmVyIGFuZCBDaGFubmVsIEludGVyZmFjZQorCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCSAgICBQYXVsIE1hY2tlcnJhcworCQkJICAgcGF1bHVzQHNhbWJhLm9yZworCQkJICAgICAgNyBGZWIgMjAwMgorCitUaGUgZ2VuZXJpYyBQUFAgZHJpdmVyIGluIGxpbnV4LTIuNCBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKK2Z1bmN0aW9uYWxpdHkgd2hpY2ggaXMgb2YgdXNlIGluIGFueSBQUFAgaW1wbGVtZW50YXRpb24sIGluY2x1ZGluZzoKKworKiB0aGUgbmV0d29yayBpbnRlcmZhY2UgdW5pdCAocHBwMCBldGMuKQorKiB0aGUgaW50ZXJmYWNlIHRvIHRoZSBuZXR3b3JraW5nIGNvZGUKKyogUFBQIG11bHRpbGluazogc3BsaXR0aW5nIGRhdGFncmFtcyBiZXR3ZWVuIG11bHRpcGxlIGxpbmtzLCBhbmQKKyAgb3JkZXJpbmcgYW5kIGNvbWJpbmluZyByZWNlaXZlZCBmcmFnbWVudHMKKyogdGhlIGludGVyZmFjZSB0byBwcHBkLCB2aWEgYSAvZGV2L3BwcCBjaGFyYWN0ZXIgZGV2aWNlCisqIHBhY2tldCBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgorKiBUQ1AvSVAgaGVhZGVyIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCisqIGRldGVjdGluZyBuZXR3b3JrIHRyYWZmaWMgZm9yIGRlbWFuZCBkaWFsbGluZyBhbmQgZm9yIGlkbGUgdGltZW91dHMKKyogc2ltcGxlIHBhY2tldCBmaWx0ZXJpbmcKKworRm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBQUFAgZnJhbWVzLCB0aGUgZ2VuZXJpYyBQUFAgZHJpdmVyIGNhbGxzIG9uCit0aGUgc2VydmljZXMgb2YgUFBQIGBjaGFubmVscycuICBBIFBQUCBjaGFubmVsIGVuY2Fwc3VsYXRlcyBhCittZWNoYW5pc20gZm9yIHRyYW5zcG9ydGluZyBQUFAgZnJhbWVzIGZyb20gb25lIG1hY2hpbmUgdG8gYW5vdGhlci4gIEEKK1BQUCBjaGFubmVsIGltcGxlbWVudGF0aW9uIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4IGludGVybmFsbHkgYnV0CitoYXMgYSB2ZXJ5IHNpbXBsZSBpbnRlcmZhY2Ugd2l0aCB0aGUgZ2VuZXJpYyBQUFAgY29kZTogaXQgbWVyZWx5IGhhcwordG8gYmUgYWJsZSB0byBzZW5kIFBQUCBmcmFtZXMsIHJlY2VpdmUgUFBQIGZyYW1lcywgYW5kIG9wdGlvbmFsbHkKK2hhbmRsZSBpb2N0bCByZXF1ZXN0cy4gIEN1cnJlbnRseSB0aGVyZSBhcmUgUFBQIGNoYW5uZWwKK2ltcGxlbWVudGF0aW9ucyBmb3IgYXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cywgc3luY2hyb25vdXMgc2VyaWFsCitwb3J0cywgYW5kIGZvciBQUFAgb3ZlciBldGhlcm5ldC4KKworVGhpcyBhcmNoaXRlY3R1cmUgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IFBQUCBtdWx0aWxpbmsgaW4gYQorbmF0dXJhbCBhbmQgc3RyYWlnaHRmb3J3YXJkIHdheSwgYnkgYWxsb3dpbmcgbW9yZSB0aGFuIG9uZSBjaGFubmVsIHRvCitiZSBsaW5rZWQgdG8gZWFjaCBwcHAgbmV0d29yayBpbnRlcmZhY2UgdW5pdC4gIFRoZSBnZW5lcmljIGxheWVyIGlzCityZXNwb25zaWJsZSBmb3Igc3BsaXR0aW5nIGRhdGFncmFtcyBvbiB0cmFuc21pdCBhbmQgcmVjb21iaW5pbmcgdGhlbQorb24gcmVjZWl2ZS4KKworCitQUFAgY2hhbm5lbCBBUEkKKy0tLS0tLS0tLS0tLS0tLQorCitTZWUgaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGVzIGFuZAorZnVuY3Rpb25zIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIgYW5kIFBQUAorY2hhbm5lbHMuCisKK0VhY2ggY2hhbm5lbCBoYXMgdG8gcHJvdmlkZSB0d28gZnVuY3Rpb25zIHRvIHRoZSBnZW5lcmljIFBQUCBsYXllciwKK3ZpYSB0aGUgcHBwX2NoYW5uZWwub3BzIHBvaW50ZXI6CisKKyogc3RhcnRfeG1pdCgpIGlzIGNhbGxlZCBieSB0aGUgZ2VuZXJpYyBsYXllciB3aGVuIGl0IGhhcyBhIGZyYW1lIHRvCisgIHNlbmQuICBUaGUgY2hhbm5lbCBoYXMgdGhlIG9wdGlvbiBvZiByZWplY3RpbmcgdGhlIGZyYW1lIGZvcgorICBmbG93LWNvbnRyb2wgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgc3RhcnRfeG1pdCgpIHNob3VsZCByZXR1cm4gMAorICBhbmQgdGhlIGNoYW5uZWwgc2hvdWxkIGNhbGwgdGhlIHBwcF9vdXRwdXRfd2FrZXVwKCkgZnVuY3Rpb24gYXQgYQorICBsYXRlciB0aW1lIHdoZW4gaXQgY2FuIGFjY2VwdCBmcmFtZXMgYWdhaW4sIGFuZCB0aGUgZ2VuZXJpYyBsYXllcgorICB3aWxsIHRoZW4gYXR0ZW1wdCB0byByZXRyYW5zbWl0IHRoZSByZWplY3RlZCBmcmFtZShzKS4gIElmIHRoZSBmcmFtZQorICBpcyBhY2NlcHRlZCwgdGhlIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDEuCisKKyogaW9jdGwoKSBwcm92aWRlcyBhbiBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB1c2VyLXNwYWNlCisgIHByb2dyYW0gdG8gY29udHJvbCBhc3BlY3RzIG9mIHRoZSBjaGFubmVsJ3MgYmVoYXZpb3VyLiAgVGhpcworICBwcm9jZWR1cmUgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHVzZXItc3BhY2UgcHJvZ3JhbSBkb2VzIGFuIGlvY3RsCisgIHN5c3RlbSBjYWxsIG9uIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIHdoaWNoIGlzIGJvdW5kIHRvIHRoZQorICBjaGFubmVsLiAgKFVzdWFsbHkgaXQgd291bGQgb25seSBiZSBwcHBkIHdoaWNoIHdvdWxkIGRvIHRoaXMuKQorCitUaGUgZ2VuZXJpYyBQUFAgbGF5ZXIgcHJvdmlkZXMgc2V2ZW4gZnVuY3Rpb25zIHRvIGNoYW5uZWxzOgorCisqIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHdoZW4gYSBjaGFubmVsIGhhcyBiZWVuIGNyZWF0ZWQsIHRvCisgIG5vdGlmeSB0aGUgUFBQIGdlbmVyaWMgbGF5ZXIgb2YgaXRzIHByZXNlbmNlLiAgRm9yIGV4YW1wbGUsIHNldHRpbmcKKyAgYSBzZXJpYWwgcG9ydCB0byB0aGUgUFBQRElTQyBsaW5lIGRpc2NpcGxpbmUgY2F1c2VzIHRoZSBwcHBfYXN5bmMKKyAgY2hhbm5lbCBjb2RlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4KKworKiBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHdoZW4gYSBjaGFubmVsIGlzIHRvIGJlCisgIGRlc3Ryb3llZC4gIEZvciBleGFtcGxlLCB0aGUgcHBwX2FzeW5jIGNoYW5uZWwgY29kZSBjYWxscyB0aGlzIHdoZW4KKyAgYSBoYW5ndXAgaXMgZGV0ZWN0ZWQgb24gdGhlIHNlcmlhbCBwb3J0LgorCisqIHBwcF9vdXRwdXRfd2FrZXVwKCkgaXMgY2FsbGVkIGJ5IGEgY2hhbm5lbCB3aGVuIGl0IGhhcyBwcmV2aW91c2x5CisgIHJlamVjdGVkIGEgY2FsbCB0byBpdHMgc3RhcnRfeG1pdCBmdW5jdGlvbiwgYW5kIGNhbiBub3cgYWNjZXB0IG1vcmUKKyAgcGFja2V0cy4KKworKiBwcHBfaW5wdXQoKSBpcyBjYWxsZWQgYnkgYSBjaGFubmVsIHdoZW4gaXQgaGFzIHJlY2VpdmVkIGEgY29tcGxldGUKKyAgUFBQIGZyYW1lLgorCisqIHBwcF9pbnB1dF9lcnJvcigpIGlzIGNhbGxlZCBieSBhIGNoYW5uZWwgd2hlbiBpdCBoYXMgZGV0ZWN0ZWQgdGhhdCBhCisgIGZyYW1lIGhhcyBiZWVuIGxvc3Qgb3IgZHJvcHBlZCAoZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYSBGQ1MgKGZyYW1lCisgIGNoZWNrIHNlcXVlbmNlKSBlcnJvcikuCisKKyogcHBwX2NoYW5uZWxfaW5kZXgoKSByZXR1cm5zIHRoZSBjaGFubmVsIGluZGV4IGFzc2lnbmVkIGJ5IHRoZSBQUFAKKyAgZ2VuZXJpYyBsYXllciB0byB0aGlzIGNoYW5uZWwuICBUaGUgY2hhbm5lbCBzaG91bGQgcHJvdmlkZSBzb21lIHdheQorICAoZS5nLiBhbiBpb2N0bCkgdG8gdHJhbnNtaXQgdGhpcyBiYWNrIHRvIHVzZXItc3BhY2UsIGFzIHVzZXItc3BhY2UKKyAgd2lsbCBuZWVkIGl0IHRvIGF0dGFjaCBhbiBpbnN0YW5jZSBvZiAvZGV2L3BwcCB0byB0aGlzIGNoYW5uZWwuCisKKyogcHBwX3VuaXRfbnVtYmVyKCkgcmV0dXJucyB0aGUgdW5pdCBudW1iZXIgb2YgdGhlIHBwcCBuZXR3b3JrCisgIGludGVyZmFjZSB0byB3aGljaCB0aGlzIGNoYW5uZWwgaXMgY29ubmVjdGVkLCBvciAtMSBpZiB0aGUgY2hhbm5lbAorICBpcyBub3QgY29ubmVjdGVkLgorCitDb25uZWN0aW5nIGEgY2hhbm5lbCB0byB0aGUgcHBwIGdlbmVyaWMgbGF5ZXIgaXMgaW5pdGlhdGVkIGZyb20gdGhlCitjaGFubmVsIGNvZGUsIHJhdGhlciB0aGFuIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIuICBUaGUgY2hhbm5lbCBpcworZXhwZWN0ZWQgdG8gaGF2ZSBzb21lIHdheSBmb3IgYSB1c2VyLWxldmVsIHByb2Nlc3MgdG8gY29udHJvbCBpdAoraW5kZXBlbmRlbnRseSBvZiB0aGUgcHBwIGdlbmVyaWMgbGF5ZXIuICBGb3IgZXhhbXBsZSwgd2l0aCB0aGUKK3BwcF9hc3luYyBjaGFubmVsLCB0aGlzIGlzIHByb3ZpZGVkIGJ5IHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlCitzZXJpYWwgcG9ydC4KKworR2VuZXJhbGx5IGEgdXNlci1sZXZlbCBwcm9jZXNzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgdW5kZXJseWluZworY29tbXVuaWNhdGlvbnMgbWVkaXVtIGFuZCBwcmVwYXJlIGl0IHRvIGRvIFBQUC4gIEZvciBleGFtcGxlLCB3aXRoIGFuCithc3luYyB0dHksIHRoaXMgY2FuIGludm9sdmUgc2V0dGluZyB0aGUgdHR5IHNwZWVkIGFuZCBtb2RlcywgaXNzdWluZworbW9kZW0gY29tbWFuZHMsIGFuZCB0aGVuIGdvaW5nIHRocm91Z2ggc29tZSBzb3J0IG9mIGRpYWxvZyB3aXRoIHRoZQorcmVtb3RlIHN5c3RlbSB0byBpbnZva2UgUFBQIHNlcnZpY2UgdGhlcmUuICBXZSByZWZlciB0byB0aGlzIHByb2Nlc3MKK2FzIGBkaXNjb3ZlcnknLiAgVGhlbiB0aGUgdXNlci1sZXZlbCBwcm9jZXNzIHRlbGxzIHRoZSBtZWRpdW0gdG8KK2JlY29tZSBhIFBQUCBjaGFubmVsIGFuZCByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIuCitUaGUgY2hhbm5lbCB0aGVuIGhhcyB0byByZXBvcnQgdGhlIGNoYW5uZWwgbnVtYmVyIGFzc2lnbmVkIHRvIGl0IGJhY2sKK3RvIHRoZSB1c2VyLWxldmVsIHByb2Nlc3MuICBGcm9tIHRoYXQgcG9pbnQsIHRoZSBQUFAgbmVnb3RpYXRpb24gY29kZQoraW4gdGhlIFBQUCBkYWVtb24gKHBwcGQpIGNhbiB0YWtlIG92ZXIgYW5kIHBlcmZvcm0gdGhlIFBQUAorbmVnb3RpYXRpb24sIGFjY2Vzc2luZyB0aGUgY2hhbm5lbCB0aHJvdWdoIHRoZSAvZGV2L3BwcCBpbnRlcmZhY2UuCisKK0F0IHRoZSBpbnRlcmZhY2UgdG8gdGhlIFBQUCBnZW5lcmljIGxheWVyLCBQUFAgZnJhbWVzIGFyZSBzdG9yZWQgaW4KK3NrYnVmZiBzdHJ1Y3R1cmVzIGFuZCBzdGFydCB3aXRoIHRoZSB0d28tYnl0ZSBQUFAgcHJvdG9jb2wgbnVtYmVyLgorVGhlIGZyYW1lIGRvZXMgKm5vdCogaW5jbHVkZSB0aGUgMHhmZiBgYWRkcmVzcycgYnl0ZSBvciB0aGUgMHgwMworYGNvbnRyb2wnIGJ5dGUgdGhhdCBhcmUgb3B0aW9uYWxseSB1c2VkIGluIGFzeW5jIFBQUC4gIE5vciBpcyB0aGVyZQorYW55IGVzY2FwaW5nIG9mIGNvbnRyb2wgY2hhcmFjdGVycywgbm9yIGFyZSB0aGVyZSBhbnkgRkNTIG9yIGZyYW1pbmcKK2NoYXJhY3RlcnMgaW5jbHVkZWQuICBUaGF0IGlzIGFsbCB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNoYW5uZWwKK2NvZGUsIGlmIGl0IGlzIG5lZWRlZCBmb3IgdGhlIHBhcnRpY3VsYXIgbWVkaXVtLiAgVGhhdCBpcywgdGhlIHNrYnVmZnMKK3ByZXNlbnRlZCB0byB0aGUgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIGNvbnRhaW4gb25seSB0aGUgMi1ieXRlCitwcm90b2NvbCBudW1iZXIgYW5kIHRoZSBkYXRhLCBhbmQgdGhlIHNrYnVmZnMgcHJlc2VudGVkIHRvIHBwcF9pbnB1dCgpCittdXN0IGJlIGluIHRoZSBzYW1lIGZvcm1hdC4KKworVGhlIGNoYW5uZWwgbXVzdCBwcm92aWRlIGFuIGluc3RhbmNlIG9mIGEgcHBwX2NoYW5uZWwgc3RydWN0IHRvCityZXByZXNlbnQgdGhlIGNoYW5uZWwuICBUaGUgY2hhbm5lbCBpcyBmcmVlIHRvIHVzZSB0aGUgYHByaXZhdGUnIGZpZWxkCitob3dldmVyIGl0IHdpc2hlcy4gIFRoZSBjaGFubmVsIHNob3VsZCBpbml0aWFsaXplIHRoZSBgbXR1JyBhbmQKK2BoZHJsZW4nIGZpZWxkcyBiZWZvcmUgY2FsbGluZyBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgpIGFuZCBub3QgY2hhbmdlCit0aGVtIHVudGlsIGFmdGVyIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLiAgVGhlIGBtdHUnIGZpZWxkCityZXByZXNlbnRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGRhdGEgcGFydCBvZiB0aGUgUFBQIGZyYW1lcywgdGhhdAoraXMsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIDItYnl0ZSBwcm90b2NvbCBudW1iZXIuCisKK0lmIHRoZSBjaGFubmVsIG5lZWRzIHNvbWUgaGVhZHJvb20gaW4gdGhlIHNrYnVmZnMgcHJlc2VudGVkIHRvIGl0IGZvcgordHJhbnNtaXNzaW9uIChpLmUuLCBzb21lIHNwYWNlIGZyZWUgaW4gdGhlIHNrYnVmZiBkYXRhIGFyZWEgYmVmb3JlIHRoZQorc3RhcnQgb2YgdGhlIFBQUCBmcmFtZSksIGl0IHNob3VsZCBzZXQgdGhlIGBoZHJsZW4nIGZpZWxkIG9mIHRoZQorcHBwX2NoYW5uZWwgc3RydWN0IHRvIHRoZSBhbW91bnQgb2YgaGVhZHJvb20gcmVxdWlyZWQuICBUaGUgZ2VuZXJpYworUFBQIGxheWVyIHdpbGwgYXR0ZW1wdCB0byBwcm92aWRlIHRoYXQgbXVjaCBoZWFkcm9vbSBidXQgdGhlIGNoYW5uZWwKK3Nob3VsZCBzdGlsbCBjaGVjayBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IGhlYWRyb29tIGFuZCBjb3B5IHRoZSBza2J1ZmYKK2lmIHRoZXJlIGlzbid0LgorCitPbiB0aGUgaW5wdXQgc2lkZSwgY2hhbm5lbHMgc2hvdWxkIGlkZWFsbHkgcHJvdmlkZSBhdCBsZWFzdCAyIGJ5dGVzIG9mCitoZWFkcm9vbSBpbiB0aGUgc2tidWZmcyBwcmVzZW50ZWQgdG8gcHBwX2lucHV0KCkuICBUaGUgZ2VuZXJpYyBQUFAKK2NvZGUgZG9lcyBub3QgcmVxdWlyZSB0aGlzIGJ1dCB3aWxsIGJlIG1vcmUgZWZmaWNpZW50IGlmIHRoaXMgaXMgZG9uZS4KKworCitCdWZmZXJpbmcgYW5kIGZsb3cgY29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGdlbmVyaWMgUFBQIGxheWVyIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZGF0YQordGhhdCBpdCBidWZmZXJzIGluIHRoZSB0cmFuc21pdCBkaXJlY3Rpb24uICBJdCBtYWludGFpbnMgYSBxdWV1ZSBvZgordHJhbnNtaXQgcGFja2V0cyBmb3IgdGhlIFBQUCB1bml0IChuZXR3b3JrIGludGVyZmFjZSBkZXZpY2UpIHBsdXMgYQorcXVldWUgb2YgdHJhbnNtaXQgcGFja2V0cyBmb3IgZWFjaCBhdHRhY2hlZCBjaGFubmVsLiAgTm9ybWFsbHkgdGhlCit0cmFuc21pdCBxdWV1ZSBmb3IgdGhlIHVuaXQgd2lsbCBjb250YWluIGF0IG1vc3Qgb25lIHBhY2tldDsgdGhlCitleGNlcHRpb25zIGFyZSB3aGVuIHBwcGQgc2VuZHMgcGFja2V0cyBieSB3cml0aW5nIHRvIC9kZXYvcHBwLCBhbmQKK3doZW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIGNhbGxzIHRoZSBnZW5lcmljIGxheWVyJ3Mgc3RhcnRfeG1pdCgpCitmdW5jdGlvbiB3aXRoIHRoZSBxdWV1ZSBzdG9wcGVkLCBpLmUuIHdoZW4gdGhlIGdlbmVyaWMgbGF5ZXIgaGFzCitjYWxsZWQgbmV0aWZfc3RvcF9xdWV1ZSgpLCB3aGljaCBvbmx5IGhhcHBlbnMgb24gYSB0cmFuc21pdCB0aW1lb3V0LgorVGhlIHN0YXJ0X3htaXQgZnVuY3Rpb24gYWx3YXlzIGFjY2VwdHMgYW5kIHF1ZXVlcyB0aGUgcGFja2V0IHdoaWNoIGl0CitpcyBhc2tlZCB0byB0cmFuc21pdC4KKworVHJhbnNtaXQgcGFja2V0cyBhcmUgZGVxdWV1ZWQgZnJvbSB0aGUgUFBQIHVuaXQgdHJhbnNtaXQgcXVldWUgYW5kCit0aGVuIHN1YmplY3RlZCB0byBUQ1AvSVAgaGVhZGVyIGNvbXByZXNzaW9uIGFuZCBwYWNrZXQgY29tcHJlc3Npb24KKyhEZWZsYXRlIG9yIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiksIGFzIGFwcHJvcHJpYXRlLiAgQWZ0ZXIgdGhpcworcG9pbnQgdGhlIHBhY2tldHMgY2FuIG5vIGxvbmdlciBiZSByZW9yZGVyZWQsIGFzIHRoZSBkZWNvbXByZXNzaW9uCithbGdvcml0aG1zIHJlbHkgb24gcmVjZWl2aW5nIGNvbXByZXNzZWQgcGFja2V0cyBpbiB0aGUgc2FtZSBvcmRlciB0aGF0Cit0aGV5IHdlcmUgZ2VuZXJhdGVkLgorCitJZiBtdWx0aWxpbmsgaXMgbm90IGluIHVzZSwgdGhpcyBwYWNrZXQgaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGF0dGFjaGVkCitjaGFubmVsJ3Mgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uLiAgSWYgdGhlIGNoYW5uZWwgcmVmdXNlcyB0byB0YWtlCit0aGUgcGFja2V0LCB0aGUgZ2VuZXJpYyBsYXllciBzYXZlcyBpdCBmb3IgbGF0ZXIgdHJhbnNtaXNzaW9uLiAgVGhlCitnZW5lcmljIGxheWVyIHdpbGwgY2FsbCB0aGUgY2hhbm5lbCdzIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBhZ2Fpbgord2hlbiB0aGUgY2hhbm5lbCBjYWxscyAgcHBwX291dHB1dF93YWtldXAoKSBvciB3aGVuIHRoZSBjb3JlCituZXR3b3JraW5nIGNvZGUgY2FsbHMgdGhlIGdlbmVyaWMgbGF5ZXIncyBzdGFydF94bWl0KCkgZnVuY3Rpb24KK2FnYWluLiAgVGhlIGdlbmVyaWMgbGF5ZXIgY29udGFpbnMgbm8gdGltZW91dCBhbmQgcmV0cmFuc21pc3Npb24KK2xvZ2ljOyBpdCByZWxpZXMgb24gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlIGZvciB0aGF0LgorCitJZiBtdWx0aWxpbmsgaXMgaW4gdXNlLCB0aGUgZ2VuZXJpYyBsYXllciBkaXZpZGVzIHRoZSBwYWNrZXQgaW50byBvbmUKK29yIG1vcmUgZnJhZ21lbnRzIGFuZCBwdXRzIGEgbXVsdGlsaW5rIGhlYWRlciBvbiBlYWNoIGZyYWdtZW50LiAgSXQKK2RlY2lkZXMgaG93IG1hbnkgZnJhZ21lbnRzIHRvIHVzZSBiYXNlZCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQKK2FuZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHdoaWNoIGFyZSBwb3RlbnRpYWxseSBhYmxlIHRvIGFjY2VwdCBhCitmcmFnbWVudCBhdCB0aGUgbW9tZW50LiAgQSBjaGFubmVsIGlzIHBvdGVudGlhbGx5IGFibGUgdG8gYWNjZXB0IGEKK2ZyYWdtZW50IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgZnJhZ21lbnRzIGN1cnJlbnRseSBxdWV1ZWQgdXAgZm9yIGl0Cit0byB0cmFuc21pdC4gIFRoZSBjaGFubmVsIG1heSBzdGlsbCByZWZ1c2UgYSBmcmFnbWVudDsgaW4gdGhpcyBjYXNlCit0aGUgZnJhZ21lbnQgaXMgcXVldWVkIHVwIGZvciB0aGUgY2hhbm5lbCB0byB0cmFuc21pdCBsYXRlci4gIFRoaXMKK3NjaGVtZSBoYXMgdGhlIGVmZmVjdCB0aGF0IG1vcmUgZnJhZ21lbnRzIGFyZSBnaXZlbiB0byBoaWdoZXItCitiYW5kd2lkdGggY2hhbm5lbHMuICBJdCBhbHNvIG1lYW5zIHRoYXQgdW5kZXIgbGlnaHQgbG9hZCwgdGhlIGdlbmVyaWMKK2xheWVyIHdpbGwgdGVuZCB0byBmcmFnbWVudCBsYXJnZSBwYWNrZXRzIGFjcm9zcyBhbGwgdGhlIGNoYW5uZWxzLAordGh1cyByZWR1Y2luZyBsYXRlbmN5LCB3aGlsZSB1bmRlciBoZWF2eSBsb2FkLCBwYWNrZXRzIHdpbGwgdGVuZCB0byBiZQordHJhbnNtaXR0ZWQgYXMgc2luZ2xlIGZyYWdtZW50cywgdGh1cyByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2YKK2ZyYWdtZW50YXRpb24uCisKKworU01QIHNhZmV0eQorLS0tLS0tLS0tLQorCitUaGUgUFBQIGdlbmVyaWMgbGF5ZXIgaGFzIGJlZW4gZGVzaWduZWQgdG8gYmUgU01QLXNhZmUuICBMb2NrcyBhcmUKK3VzZWQgYXJvdW5kIGFjY2Vzc2VzIHRvIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgbmVjZXNzYXJ5Cit0byBlbnN1cmUgdGhlaXIgaW50ZWdyaXR5LiAgQXMgcGFydCBvZiB0aGlzLCB0aGUgZ2VuZXJpYyBsYXllcgorcmVxdWlyZXMgdGhhdCB0aGUgY2hhbm5lbHMgYWRoZXJlIHRvIGNlcnRhaW4gcmVxdWlyZW1lbnRzIGFuZCBpbiB0dXJuCitwcm92aWRlcyBjZXJ0YWluIGd1YXJhbnRlZXMgdG8gdGhlIGNoYW5uZWxzLiAgRXNzZW50aWFsbHkgdGhlIGNoYW5uZWxzCithcmUgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgbG9ja2luZyBvbiB0aGUgcHBwX2NoYW5uZWwKK3N0cnVjdHVyZXMgdGhhdCBmb3JtIHRoZSBiYXNpcyBvZiB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZQorY2hhbm5lbCBhbmQgdGhlIGdlbmVyaWMgbGF5ZXIuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGNoYW5uZWwgcHJvdmlkZXMKK3RoZSBzdG9yYWdlIGZvciB0aGUgcHBwX2NoYW5uZWwgc3RydWN0dXJlLCBhbmQgc28gdGhlIGNoYW5uZWwgaXMKK3JlcXVpcmVkIHRvIHByb3ZpZGUgdGhlIGd1YXJhbnRlZSB0aGF0IHRoaXMgc3RvcmFnZSBleGlzdHMgYW5kIGlzCit2YWxpZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZXMuCisKK1RoZSBnZW5lcmljIGxheWVyIHJlcXVpcmVzIHRoZXNlIGd1YXJhbnRlZXMgZnJvbSB0aGUgY2hhbm5lbDoKKworKiBUaGUgcHBwX2NoYW5uZWwgb2JqZWN0IG11c3QgZXhpc3QgZnJvbSB0aGUgdGltZSB0aGF0CisgIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHVudGlsIGFmdGVyIHRoZSBjYWxsIHRvCisgIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLgorCisqIE5vIHRocmVhZCBtYXkgYmUgaW4gYSBjYWxsIHRvIGFueSBvZiBwcHBfaW5wdXQoKSwgcHBwX2lucHV0X2Vycm9yKCksCisgIHBwcF9vdXRwdXRfd2FrZXVwKCksIHBwcF9jaGFubmVsX2luZGV4KCkgb3IgcHBwX3VuaXRfbnVtYmVyKCkgZm9yIGEKKyAgY2hhbm5lbCBhdCB0aGUgdGltZSB0aGF0IHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgZm9yIHRoYXQKKyAgY2hhbm5lbC4KKworKiBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgpIGFuZCBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgbXVzdCBiZSBjYWxsZWQKKyAgZnJvbSBwcm9jZXNzIGNvbnRleHQsIG5vdCBpbnRlcnJ1cHQgb3Igc29mdGlycS9CSCBjb250ZXh0LgorCisqIFRoZSByZW1haW5pbmcgZ2VuZXJpYyBsYXllciBmdW5jdGlvbnMgbWF5IGJlIGNhbGxlZCBhdCBzb2Z0aXJxL0JICisgIGxldmVsIGJ1dCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBhIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLgorCisqIFRoZSBnZW5lcmljIGxheWVyIG1heSBjYWxsIHRoZSBjaGFubmVsIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBhdAorICBzb2Z0aXJxL0JIIGxldmVsIGJ1dCB3aWxsIG5vdCBjYWxsIGl0IGF0IGludGVycnVwdCBsZXZlbC4gIFRodXMgdGhlCisgIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBtYXkgbm90IGJsb2NrLgorCisqIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgb25seSBjYWxsIHRoZSBjaGFubmVsIGlvY3RsKCkgZnVuY3Rpb24gaW4KKyAgcHJvY2VzcyBjb250ZXh0LgorCitUaGUgZ2VuZXJpYyBsYXllciBwcm92aWRlcyB0aGVzZSBndWFyYW50ZWVzIHRvIHRoZSBjaGFubmVsczoKKworKiBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdCBjYWxsIHRoZSBzdGFydF94bWl0KCkgZnVuY3Rpb24gZm9yIGEKKyAgY2hhbm5lbCB3aGlsZSBhbnkgdGhyZWFkIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHRoYXQgZnVuY3Rpb24gZm9yCisgIHRoYXQgY2hhbm5lbC4KKworKiBUaGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdCBjYWxsIHRoZSBpb2N0bCgpIGZ1bmN0aW9uIGZvciBhIGNoYW5uZWwKKyAgd2hpbGUgYW55IHRocmVhZCBpcyBhbHJlYWR5IGV4ZWN1dGluZyBpbiB0aGF0IGZ1bmN0aW9uIGZvciB0aGF0CisgIGNoYW5uZWwuCisKKyogQnkgdGhlIHRpbWUgYSBjYWxsIHRvIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSByZXR1cm5zLCBubyB0aHJlYWQKKyAgd2lsbCBiZSBleGVjdXRpbmcgaW4gYSBjYWxsIGZyb20gdGhlIGdlbmVyaWMgbGF5ZXIgdG8gdGhhdCBjaGFubmVsJ3MKKyAgc3RhcnRfeG1pdCgpIG9yIGlvY3RsKCkgZnVuY3Rpb24sIGFuZCB0aGUgZ2VuZXJpYyBsYXllciB3aWxsIG5vdAorICBjYWxsIGVpdGhlciBvZiB0aG9zZSBmdW5jdGlvbnMgc3Vic2VxdWVudGx5LgorCisKK0ludGVyZmFjZSB0byBwcHBkCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgUFBQIGdlbmVyaWMgbGF5ZXIgZXhwb3J0cyBhIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlIGNhbGxlZAorL2Rldi9wcHAuICBUaGlzIGlzIHVzZWQgYnkgcHBwZCB0byBjb250cm9sIFBQUCBpbnRlcmZhY2UgdW5pdHMgYW5kCitjaGFubmVscy4gIEFsdGhvdWdoIHRoZXJlIGlzIG9ubHkgb25lIC9kZXYvcHBwLCBlYWNoIG9wZW4gaW5zdGFuY2Ugb2YKKy9kZXYvcHBwIGFjdHMgaW5kZXBlbmRlbnRseSBhbmQgY2FuIGJlIGF0dGFjaGVkIGVpdGhlciB0byBhIFBQUCB1bml0CitvciBhIFBQUCBjaGFubmVsLiAgVGhpcyBpcyBhY2hpZXZlZCB1c2luZyB0aGUgZmlsZS0+cHJpdmF0ZV9kYXRhIGZpZWxkCit0byBwb2ludCB0byBhIHNlcGFyYXRlIG9iamVjdCBmb3IgZWFjaCBvcGVuIGluc3RhbmNlIG9mIC9kZXYvcHBwLiAgSW4KK3RoaXMgd2F5IGFuIGVmZmVjdCBzaW1pbGFyIHRvIFNvbGFyaXMnIGNsb25lIG9wZW4gaXMgb2J0YWluZWQsCithbGxvd2luZyB1cyB0byBjb250cm9sIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgUFBQIGludGVyZmFjZXMgYW5kCitjaGFubmVscyB3aXRob3V0IGhhdmluZyB0byBmaWxsIHVwIC9kZXYgd2l0aCBodW5kcmVkcyBvZiBkZXZpY2UgbmFtZXMuCisKK1doZW4gL2Rldi9wcHAgaXMgb3BlbmVkLCBhIG5ldyBpbnN0YW5jZSBpcyBjcmVhdGVkIHdoaWNoIGlzIGluaXRpYWxseQordW5hdHRhY2hlZC4gIFVzaW5nIGFuIGlvY3RsIGNhbGwsIGl0IGNhbiB0aGVuIGJlIGF0dGFjaGVkIHRvIGFuCitleGlzdGluZyB1bml0LCBhdHRhY2hlZCB0byBhIG5ld2x5LWNyZWF0ZWQgdW5pdCwgb3IgYXR0YWNoZWQgdG8gYW4KK2V4aXN0aW5nIGNoYW5uZWwuICBBbiBpbnN0YW5jZSBhdHRhY2hlZCB0byBhIHVuaXQgY2FuIGJlIHVzZWQgdG8gc2VuZAorYW5kIHJlY2VpdmUgUFBQIGNvbnRyb2wgZnJhbWVzLCB1c2luZyB0aGUgcmVhZCgpIGFuZCB3cml0ZSgpIHN5c3RlbQorY2FsbHMsIGFsb25nIHdpdGggcG9sbCgpIGlmIG5lY2Vzc2FyeS4gIFNpbWlsYXJseSwgYW4gaW5zdGFuY2UKK2F0dGFjaGVkIHRvIGEgY2hhbm5lbCBjYW4gYmUgdXNlZCB0byBzZW5kIGFuZCByZWNlaXZlIFBQUCBmcmFtZXMgb24KK3RoYXQgY2hhbm5lbC4KKworSW4gbXVsdGlsaW5rIHRlcm1zLCB0aGUgdW5pdCByZXByZXNlbnRzIHRoZSBidW5kbGUsIHdoaWxlIHRoZSBjaGFubmVscworcmVwcmVzZW50IHRoZSBpbmRpdmlkdWFsIHBoeXNpY2FsIGxpbmtzLiAgVGh1cywgYSBQUFAgZnJhbWUgc2VudCBieSBhCit3cml0ZSB0byB0aGUgdW5pdCAoaS5lLiwgdG8gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgYXR0YWNoZWQgdG8gdGhlCit1bml0KSB3aWxsIGJlIHN1YmplY3QgdG8gYnVuZGxlLWxldmVsIGNvbXByZXNzaW9uIGFuZCB0byBmcmFnbWVudGF0aW9uCithY3Jvc3MgdGhlIGluZGl2aWR1YWwgbGlua3MgKGlmIG11bHRpbGluayBpcyBpbiB1c2UpLiAgSW4gY29udHJhc3QsIGEKK1BQUCBmcmFtZSBzZW50IGJ5IGEgd3JpdGUgdG8gdGhlIGNoYW5uZWwgd2lsbCBiZSBzZW50IGFzLWlzIG9uIHRoYXQKK2NoYW5uZWwsIHdpdGhvdXQgYW55IG11bHRpbGluayBoZWFkZXIuCisKK0EgY2hhbm5lbCBpcyBub3QgaW5pdGlhbGx5IGF0dGFjaGVkIHRvIGFueSB1bml0LiAgSW4gdGhpcyBzdGF0ZSBpdCBjYW4KK2JlIHVzZWQgZm9yIFBQUCBuZWdvdGlhdGlvbiBidXQgbm90IGZvciB0aGUgdHJhbnNmZXIgb2YgZGF0YSBwYWNrZXRzLgorSXQgY2FuIHRoZW4gYmUgY29ubmVjdGVkIHRvIGEgUFBQIHVuaXQgd2l0aCBhbiBpb2N0bCBjYWxsLCB3aGljaAorbWFrZXMgaXQgYXZhaWxhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBwYWNrZXRzIGZvciB0aGF0IHVuaXQuCisKK1RoZSBpb2N0bCBjYWxscyB3aGljaCBhcmUgYXZhaWxhYmxlIG9uIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIGRlcGVuZAorb24gd2hldGhlciBpdCBpcyB1bmF0dGFjaGVkLCBhdHRhY2hlZCB0byBhIFBQUCBpbnRlcmZhY2UsIG9yIGF0dGFjaGVkCit0byBhIFBQUCBjaGFubmVsLiAgVGhlIGlvY3RsIGNhbGxzIHdoaWNoIGFyZSBhdmFpbGFibGUgb24gYW4KK3VuYXR0YWNoZWQgaW5zdGFuY2UgYXJlOgorCisqIFBQUElPQ05FV1VOSVQgY3JlYXRlcyBhIG5ldyBQUFAgaW50ZXJmYWNlIGFuZCBtYWtlcyB0aGlzIC9kZXYvcHBwCisgIGluc3RhbmNlIHRoZSAib3duZXIiIG9mIHRoZSBpbnRlcmZhY2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvCisgIGFuIGludCB3aGljaCBpcyB0aGUgZGVzaXJlZCB1bml0IG51bWJlciBpZiA+PSAwLCBvciAtMSB0byBhc3NpZ24gdGhlCisgIGxvd2VzdCB1bnVzZWQgdW5pdCBudW1iZXIuICBCZWluZyB0aGUgb3duZXIgb2YgdGhlIGludGVyZmFjZSBtZWFucworICB0aGF0IHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBzaHV0IGRvd24gaWYgdGhpcyBpbnN0YW5jZSBvZiAvZGV2L3BwcCBpcworICBjbG9zZWQuCisKKyogUFBQSU9DQVRUQUNIIGF0dGFjaGVzIHRoaXMgaW5zdGFuY2UgdG8gYW4gZXhpc3RpbmcgUFBQIGludGVyZmFjZS4KKyAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgdW5pdCBudW1iZXIuCisgIFRoaXMgZG9lcyBub3QgbWFrZSB0aGlzIGluc3RhbmNlIHRoZSBvd25lciBvZiB0aGUgUFBQIGludGVyZmFjZS4KKworKiBQUFBJT0NBVFRDSEFOIGF0dGFjaGVzIHRoaXMgaW5zdGFuY2UgdG8gYW4gZXhpc3RpbmcgUFBQIGNoYW5uZWwuCisgIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gaW50IGNvbnRhaW5pbmcgdGhlIGNoYW5uZWwgbnVtYmVyLgorCitUaGUgaW9jdGwgY2FsbHMgYXZhaWxhYmxlIG9uIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIGF0dGFjaGVkIHRvIGEKK2NoYW5uZWwgYXJlOgorCisqIFBQUElPQ0RFVEFDSCBkZXRhY2hlcyB0aGUgaW5zdGFuY2UgZnJvbSB0aGUgY2hhbm5lbC4gIFRoaXMgaW9jdGwgaXMKKyAgZGVwcmVjYXRlZCBzaW5jZSB0aGUgc2FtZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNsb3NpbmcgdGhlCisgIGluc3RhbmNlLiAgSW4gb3JkZXIgdG8gcHJldmVudCBwb3NzaWJsZSByYWNlcyB0aGlzIGlvY3RsIHdpbGwgZmFpbAorICB3aXRoIGFuIEVJTlZBTCBlcnJvciBpZiBtb3JlIHRoYW4gb25lIGZpbGUgZGVzY3JpcHRvciByZWZlcnMgdG8gdGhpcworICBpbnN0YW5jZSAoaS5lLiBhcyBhIHJlc3VsdCBvZiBkdXAoKSwgZHVwMigpIG9yIGZvcmsoKSkuCisKKyogUFBQSU9DQ09OTkVDVCBjb25uZWN0cyB0aGlzIGNoYW5uZWwgdG8gYSBQUFAgaW50ZXJmYWNlLiAgVGhlCisgIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgaW50ZXJmYWNlIHVuaXQKKyAgbnVtYmVyLiAgSXQgd2lsbCByZXR1cm4gYW4gRUlOVkFMIGVycm9yIGlmIHRoZSBjaGFubmVsIGlzIGFscmVhZHkKKyAgY29ubmVjdGVkIHRvIGFuIGludGVyZmFjZSwgb3IgRU5YSU8gaWYgdGhlIHJlcXVlc3RlZCBpbnRlcmZhY2UgZG9lcworICBub3QgZXhpc3QuCisKKyogUFBQSU9DRElTQ09OTiBkaXNjb25uZWN0cyB0aGlzIGNoYW5uZWwgZnJvbSB0aGUgUFBQIGludGVyZmFjZSB0aGF0CisgIGl0IGlzIGNvbm5lY3RlZCB0by4gIEl0IHdpbGwgcmV0dXJuIGFuIEVJTlZBTCBlcnJvciBpZiB0aGUgY2hhbm5lbAorICBpcyBub3QgY29ubmVjdGVkIHRvIGFuIGludGVyZmFjZS4KKworKiBBbGwgb3RoZXIgaW9jdGwgY29tbWFuZHMgYXJlIHBhc3NlZCB0byB0aGUgY2hhbm5lbCBpb2N0bCgpIGZ1bmN0aW9uLgorCitUaGUgaW9jdGwgY2FsbHMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIGFuIGluc3RhbmNlIHRoYXQgaXMgYXR0YWNoZWQgdG8KK2FuIGludGVyZmFjZSB1bml0IGFyZToKKworKiBQUFBJT0NTTVJVIHNldHMgdGhlIE1SVSAobWF4aW11bSByZWNlaXZlIHVuaXQpIGZvciB0aGUgaW50ZXJmYWNlLgorICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSBuZXcgTVJVIHZhbHVlLgorCisqIFBQUElPQ1NGTEFHUyBzZXRzIGZsYWdzIHdoaWNoIGNvbnRyb2wgdGhlIG9wZXJhdGlvbiBvZiB0aGUKKyAgaW50ZXJmYWNlLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gYW4gaW50IGNvbnRhaW5pbmcKKyAgdGhlIG5ldyBmbGFncyB2YWx1ZS4gIFRoZSBiaXRzIGluIHRoZSBmbGFncyB2YWx1ZSB0aGF0IGNhbiBiZSBzZXQKKyAgYXJlOgorCVNDX0NPTVBfVENQCQllbmFibGUgdHJhbnNtaXQgVENQIGhlYWRlciBjb21wcmVzc2lvbgorCVNDX05PX1RDUF9DQ0lECQlkaXNhYmxlIGNvbm5lY3Rpb24taWQgY29tcHJlc3Npb24gZm9yCisJCQkJVENQIGhlYWRlciBjb21wcmVzc2lvbgorCVNDX1JFSl9DT01QX1RDUAkJZGlzYWJsZSByZWNlaXZlIFRDUCBoZWFkZXIgZGVjb21wcmVzc2lvbgorCVNDX0NDUF9PUEVOCQlDb21wcmVzc2lvbiBDb250cm9sIFByb3RvY29sIChDQ1ApIGlzCisJCQkJb3Blbiwgc28gaW5zcGVjdCBDQ1AgcGFja2V0cworCVNDX0NDUF9VUAkJQ0NQIGlzIHVwLCBtYXkgKGRlKWNvbXByZXNzIHBhY2tldHMKKwlTQ19MT09QX1RSQUZGSUMJCXNlbmQgSVAgdHJhZmZpYyB0byBwcHBkCisJU0NfTVVMVElMSU5LCQllbmFibGUgUFBQIG11bHRpbGluayBmcmFnbWVudGF0aW9uIG9uCisJCQkJdHJhbnNtaXR0ZWQgcGFja2V0cworCVNDX01QX1NIT1JUU0VRCQlleHBlY3Qgc2hvcnQgbXVsdGlsaW5rIHNlcXVlbmNlCisJCQkJbnVtYmVycyBvbiByZWNlaXZlZCBtdWx0aWxpbmsgZnJhZ21lbnRzCisJU0NfTVBfWFNIT1JUU0VRCQl0cmFuc21pdCBzaG9ydCBtdWx0aWxpbmsgc2VxdWVuY2Ugbm9zLgorCisgIFRoZSB2YWx1ZXMgb2YgdGhlc2UgZmxhZ3MgYXJlIGRlZmluZWQgaW4gPGxpbnV4L2lmX3BwcC5oPi4gIE5vdGUKKyAgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSBTQ19NVUxUSUxJTkssIFNDX01QX1NIT1JUU0VRIGFuZAorICBTQ19NUF9YU0hPUlRTRVEgYml0cyBhcmUgaWdub3JlZCBpZiB0aGUgQ09ORklHX1BQUF9NVUxUSUxJTksgb3B0aW9uCisgIGlzIG5vdCBzZWxlY3RlZC4KKworKiBQUFBJT0NHRkxBR1MgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHN0YXR1cy9jb250cm9sIGZsYWdzIGZvciB0aGUKKyAgaW50ZXJmYWNlIHVuaXQuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCB3aGVyZSB0aGUgaW9jdGwKKyAgd2lsbCBzdG9yZSB0aGUgZmxhZ3MgdmFsdWUuICBBcyB3ZWxsIGFzIHRoZSB2YWx1ZXMgbGlzdGVkIGFib3ZlIGZvcgorICBQUFBJT0NTRkxBR1MsIHRoZSBmb2xsb3dpbmcgYml0cyBtYXkgYmUgc2V0IGluIHRoZSByZXR1cm5lZCB2YWx1ZToKKwlTQ19DT01QX1JVTgkJQ0NQIGNvbXByZXNzb3IgaXMgcnVubmluZworCVNDX0RFQ09NUF9SVU4JCUNDUCBkZWNvbXByZXNzb3IgaXMgcnVubmluZworCVNDX0RDX0VSUk9SCQlDQ1AgZGVjb21wcmVzc29yIGRldGVjdGVkIG5vbi1mYXRhbCBlcnJvcgorCVNDX0RDX0ZFUlJPUgkJQ0NQIGRlY29tcHJlc3NvciBkZXRlY3RlZCBmYXRhbCBlcnJvcgorCisqIFBQUElPQ1NDT01QUkVTUyBzZXRzIHRoZSBwYXJhbWV0ZXJzIGZvciBwYWNrZXQgY29tcHJlc3Npb24gb3IKKyAgZGVjb21wcmVzc2lvbi4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBwcHBfb3B0aW9uX2RhdGEKKyAgc3RydWN0dXJlIChkZWZpbmVkIGluIDxsaW51eC9pZl9wcHAuaD4pLCB3aGljaCBjb250YWlucyBhCisgIHBvaW50ZXIvbGVuZ3RoIHBhaXIgd2hpY2ggc2hvdWxkIGRlc2NyaWJlIGEgYmxvY2sgb2YgbWVtb3J5CisgIGNvbnRhaW5pbmcgYSBDQ1Agb3B0aW9uIHNwZWNpZnlpbmcgYSBjb21wcmVzc2lvbiBtZXRob2QgYW5kIGl0cworICBwYXJhbWV0ZXJzLiAgVGhlIHBwcF9vcHRpb25fZGF0YSBzdHJ1Y3QgYWxzbyBjb250YWlucyBhIGB0cmFuc21pdCcKKyAgZmllbGQuICBJZiB0aGlzIGlzIDAsIHRoZSBpb2N0bCB3aWxsIGFmZmVjdCB0aGUgcmVjZWl2ZSBwYXRoLAorICBvdGhlcndpc2UgdGhlIHRyYW5zbWl0IHBhdGguCisKKyogUFBQSU9DR1VOSVQgcmV0dXJucywgaW4gdGhlIGludCBwb2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCwgdGhlIHVuaXQKKyAgbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlIHVuaXQuCisKKyogUFBQSU9DU0RFQlVHIHNldHMgdGhlIGRlYnVnIGZsYWdzIGZvciB0aGUgaW50ZXJmYWNlIHRvIHRoZSB2YWx1ZSBpbgorICB0aGUgaW50IHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LiAgT25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgIGlzIHVzZWQ7IGlmIHRoaXMgaXMgMSB0aGUgZ2VuZXJpYyBsYXllciB3aWxsIHByaW50IHNvbWUgZGVidWcKKyAgbWVzc2FnZXMgZHVyaW5nIGl0cyBvcGVyYXRpb24uICBUaGlzIGlzIG9ubHkgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZworICB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIgY29kZTsgaXQgaXMgZ2VuZXJhbGx5IG5vdCBoZWxwZnVsIGZvciB3b3JraW5nCisgIG91dCB3aHkgYSBQUFAgY29ubmVjdGlvbiBpcyBmYWlsaW5nLgorCisqIFBQUElPQ0dERUJVRyByZXR1cm5zIHRoZSBkZWJ1ZyBmbGFncyBmb3IgdGhlIGludGVyZmFjZSBpbiB0aGUgaW50CisgIHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LgorCisqIFBQUElPQ0dJRExFIHJldHVybnMgdGhlIHRpbWUsIGluIHNlY29uZHMsIHNpbmNlIHRoZSBsYXN0IGRhdGEKKyAgcGFja2V0cyB3ZXJlIHNlbnQgYW5kIHJlY2VpdmVkLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhCisgIHBwcF9pZGxlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiA8bGludXgvcHBwX2RlZnMuaD4pLiAgSWYgdGhlCisgIENPTkZJR19QUFBfRklMVEVSIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgc2V0IG9mIHBhY2tldHMgd2hpY2ggcmVzZXQKKyAgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkbGUgdGltZXJzIGlzIHJlc3RyaWN0ZWQgdG8gdGhvc2Ugd2hpY2gKKyAgcGFzcyB0aGUgYGFjdGl2ZScgcGFja2V0IGZpbHRlci4KKworKiBQUFBJT0NTTUFYQ0lEIHNldHMgdGhlIG1heGltdW0gY29ubmVjdGlvbi1JRCBwYXJhbWV0ZXIgKGFuZCB0aHVzIHRoZQorICBudW1iZXIgb2YgY29ubmVjdGlvbiBzbG90cykgZm9yIHRoZSBUQ1AgaGVhZGVyIGNvbXByZXNzb3IgYW5kCisgIGRlY29tcHJlc3Nvci4gIFRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSBpbnQgcG9pbnRlZCB0byBieSB0aGUKKyAgYXJndW1lbnQgc3BlY2lmeSB0aGUgbWF4aW11bSBjb25uZWN0aW9uLUlEIGZvciB0aGUgY29tcHJlc3Nvci4gIElmCisgIHRoZSB1cHBlciAxNiBiaXRzIG9mIHRoYXQgaW50IGFyZSBub24temVybywgdGhleSBzcGVjaWZ5IHRoZSBtYXhpbXVtCisgIGNvbm5lY3Rpb24tSUQgZm9yIHRoZSBkZWNvbXByZXNzb3IsIG90aGVyd2lzZSB0aGUgZGVjb21wcmVzc29yJ3MKKyAgbWF4aW11bSBjb25uZWN0aW9uLUlEIGlzIHNldCB0byAxNS4KKworKiBQUFBJT0NTTlBNT0RFIHNldHMgdGhlIG5ldHdvcmstcHJvdG9jb2wgbW9kZSBmb3IgYSBnaXZlbiBuZXR3b3JrCisgIHByb3RvY29sLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBucGlvY3RsIHN0cnVjdCAoZGVmaW5lZAorICBpbiA8bGludXgvaWZfcHBwLmg+KS4gIFRoZSBgcHJvdG9jb2wnIGZpZWxkIGdpdmVzIHRoZSBQUFAgcHJvdG9jb2wKKyAgbnVtYmVyIGZvciB0aGUgcHJvdG9jb2wgdG8gYmUgYWZmZWN0ZWQsIGFuZCB0aGUgYG1vZGUnIGZpZWxkCisgIHNwZWNpZmllcyB3aGF0IHRvIGRvIHdpdGggcGFja2V0cyBmb3IgdGhhdCBwcm90b2NvbDoKKworCU5QTU9ERV9QQVNTCW5vcm1hbCBvcGVyYXRpb24sIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhY2tldHMKKwlOUE1PREVfRFJPUAlzaWxlbnRseSBkcm9wIHBhY2tldHMgZm9yIHRoaXMgcHJvdG9jb2wKKwlOUE1PREVfRVJST1IJZHJvcCBwYWNrZXRzIGFuZCByZXR1cm4gYW4gZXJyb3Igb24gdHJhbnNtaXQKKwlOUE1PREVfUVVFVUUJcXVldWUgdXAgcGFja2V0cyBmb3IgdHJhbnNtaXQsIGRyb3AgcmVjZWl2ZWQKKwkJCXBhY2tldHMKKworICBBdCBwcmVzZW50IE5QTU9ERV9FUlJPUiBhbmQgTlBNT0RFX1FVRVVFIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisgIE5QTU9ERV9EUk9QLgorCisqIFBQUElPQ0dOUE1PREUgcmV0dXJucyB0aGUgbmV0d29yay1wcm90b2NvbCBtb2RlIGZvciBhIGdpdmVuCisgIHByb3RvY29sLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBucGlvY3RsIHN0cnVjdCB3aXRoIHRoZQorICBgcHJvdG9jb2wnIGZpZWxkIHNldCB0byB0aGUgUFBQIHByb3RvY29sIG51bWJlciBmb3IgdGhlIHByb3RvY29sIG9mCisgIGludGVyZXN0LiAgT24gcmV0dXJuIHRoZSBgbW9kZScgZmllbGQgd2lsbCBiZSBzZXQgdG8gdGhlIG5ldHdvcmstCisgIHByb3RvY29sIG1vZGUgZm9yIHRoYXQgcHJvdG9jb2wuCisKKyogUFBQSU9DU1BBU1MgYW5kIFBQUElPQ1NBQ1RJVkUgc2V0IHRoZSBgcGFzcycgYW5kIGBhY3RpdmUnIHBhY2tldAorICBmaWx0ZXJzLiAgVGhlc2UgaW9jdGxzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgQ09ORklHX1BQUF9GSUxURVIKKyAgb3B0aW9uIGlzIHNlbGVjdGVkLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIHNvY2tfZnByb2cKKyAgc3RydWN0dXJlIChkZWZpbmVkIGluIDxsaW51eC9maWx0ZXIuaD4pIGNvbnRhaW5pbmcgdGhlIGNvbXBpbGVkIEJQRgorICBpbnN0cnVjdGlvbnMgZm9yIHRoZSBmaWx0ZXIuICBQYWNrZXRzIGFyZSBkcm9wcGVkIGlmIHRoZXkgZmFpbCB0aGUKKyAgYHBhc3MnIGZpbHRlcjsgb3RoZXJ3aXNlLCBpZiB0aGV5IGZhaWwgdGhlIGBhY3RpdmUnIGZpbHRlciB0aGV5IGFyZQorICBwYXNzZWQgYnV0IHRoZXkgZG8gbm90IHJlc2V0IHRoZSB0cmFuc21pdCBvciByZWNlaXZlIGlkbGUgdGltZXIuCisKKyogUFBQSU9DU01SUlUgZW5hYmxlcyBvciBkaXNhYmxlcyBtdWx0aWxpbmsgcHJvY2Vzc2luZyBmb3IgcmVjZWl2ZWQKKyAgcGFja2V0cyBhbmQgc2V0cyB0aGUgbXVsdGlsaW5rIE1SUlUgKG1heGltdW0gcmVjb25zdHJ1Y3RlZCByZWNlaXZlCisgIHVuaXQpLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgbmV3IE1SUlUKKyAgdmFsdWUuICBJZiB0aGUgTVJSVSB2YWx1ZSBpcyAwLCBwcm9jZXNzaW5nIG9mIHJlY2VpdmVkIG11bHRpbGluaworICBmcmFnbWVudHMgaXMgZGlzYWJsZWQuICBUaGlzIGlvY3RsIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZQorICBDT05GSUdfUFBQX01VTFRJTElOSyBvcHRpb24gaXMgc2VsZWN0ZWQuCisKK0xhc3QgbW9kaWZpZWQ6IDctZmViLTIwMDIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcm9jX25ldF90Y3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Byb2NfbmV0X3RjcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljYjkxNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcm9jX25ldF90Y3AudHh0CkBAIC0wLDAgKzEsNDcgQEAKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2VzIC9wcm9jL25ldC90Y3AgYW5kIC9wcm9jL25ldC90Y3A2LgorCitUaGVzZSAvcHJvYyBpbnRlcmZhY2VzIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudGx5IGFjdGl2ZSBUQ1AgCitjb25uZWN0aW9ucywgYW5kIGFyZSBpbXBsZW1lbnRlZCBieSB0Y3BfZ2V0X2luZm8oKSBpbiBuZXQvaXB2NC90Y3BfaXB2NC5jIGFuZAordGNwNl9nZXRfaW5mbygpIGluIG5ldC9pcHY2L3RjcF9pcHY2LmMsIHJlc3BlY3RpdmVseS4KKworSXQgd2lsbCBmaXJzdCBsaXN0IGFsbCBsaXN0ZW5pbmcgVENQIHNvY2tldHMsIGFuZCBuZXh0IGxpc3QgYWxsIGVzdGFibGlzaGVkCitUQ1AgY29ubmVjdGlvbnMuIEEgdHlwaWNhbCBlbnRyeSBvZiAvcHJvYy9uZXQvdGNwIHdvdWxkIGxvb2sgbGlrZSB0aGlzIChzcGxpdCAKK3VwIGludG8gMyBwYXJ0cyBiZWNhdXNlIG9mIHRoZSBsZW5ndGggb2YgdGhlIGxpbmUpOgorCisgICA0NjogMDEwMzEwQUM6OUM0QyAwMzAzMTBBQzoxNzcwIDAxIAorICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICB8LS0+IGNvbm5lY3Rpb24gc3RhdGUKKyAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8LS0tLS0tPiByZW1vdGUgVENQIHBvcnQgbnVtYmVyCisgICB8ICAgICAgfCAgICAgIHwgICAgICB8LS0tLS0tLS0tLS0tLT4gcmVtb3RlIElQdjQgYWRkcmVzcworICAgfCAgICAgIHwgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0+IGxvY2FsIFRDUCBwb3J0IG51bWJlcgorICAgfCAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IGxvY2FsIElQdjQgYWRkcmVzcworICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IG51bWJlciBvZiBlbnRyeQorCisgICAwMDAwMDE1MDowMDAwMDAwMCAwMTowMDAwMDAxOSAwMDAwMDAwMCAgCisgICAgICB8ICAgICAgICB8ICAgICB8ICAgICB8ICAgICAgIHwtLT4gbnVtYmVyIG9mIHVucmVjb3ZlcmVkIFJUTyB0aW1lb3V0cworICAgICAgfCAgICAgICAgfCAgICAgfCAgICAgfC0tLS0tLS0tLS0+IG51bWJlciBvZiBqaWZmaWVzIHVudGlsIHRpbWVyIGV4cGlyZXMKKyAgICAgIHwgICAgICAgIHwgICAgIHwtLS0tLS0tLS0tLS0tLS0tPiB0aW1lcl9hY3RpdmUgKHNlZSBiZWxvdykKKyAgICAgIHwgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiByZWNlaXZlLXF1ZXVlCisgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdHJhbnNtaXQtcXVldWUKKworICAgMTAwMCAgICAgICAgMCA1NDE2NTc4NSA0IGNkMWU2MDQwIDI1IDQgMjcgMyAtMQorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfCB8LS0+IHNsb3cgc3RhcnQgc2l6ZSB0aHJlc2hvbGQsIAorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfCAgICAgIG9yIC0xIGlmIHRoZSB0cmVzaG9sZAorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfCAgICAgIGlzID49IDB4RkZGRgorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfCAgfC0tLS0+IHNlbmRpbmcgY29uZ2VzdGlvbiB3aW5kb3cKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8ICB8IHwtLS0tLS0tPiAoYWNrLnF1aWNrPDwxKXxhY2sucGluZ3BvbmcKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8ICB8LS0tLS0tLS0tPiBQcmVkaWN0ZWQgdGljayBvZiBzb2Z0IGNsb2NrCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgICAgICAgICAgICAgKGRlbGF5ZWQgQUNLIGNvbnRyb2wgZGF0YSkKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8LS0tLS0tLS0tLS0tPiByZXRyYW5zbWl0IHRpbWVvdXQKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8LS0tLS0tLS0tLS0tLS0tLS0tPiBsb2NhdGlvbiBvZiBzb2NrZXQgaW4gbWVtb3J5CisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gc29ja2V0IHJlZmVyZW5jZSBjb3VudAorICAgIHwgICAgICAgICAgfCAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IGlub2RlCisgICAgfCAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gdW5hbnN3ZXJlZCAwLXdpbmRvdyBwcm9iZXMKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB1aWQKKwordGltZXJfYWN0aXZlOgorICAwICBubyB0aW1lciBpcyBwZW5kaW5nCisgIDEgIHJldHJhbnNtaXQtdGltZXIgaXMgcGVuZGluZworICAyICBhbm90aGVyIHRpbWVyIChlLmcuIGRlbGF5ZWQgYWNrIG9yIGtlZXBhbGl2ZSkgaXMgcGVuZGluZworICAzICB0aGlzIGlzIGEgc29ja2V0IGluIFRJTUVfV0FJVCBzdGF0ZS4gTm90IGFsbCBmaWVsZHMgd2lsbCBjb250YWluIAorICAgICBkYXRhIChvciBldmVuIGV4aXN0KQorICA0ICB6ZXJvIHdpbmRvdyBwcm9iZSB0aW1lciBpcyBwZW5kaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHQudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3B0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU4ODhjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3B0LnR4dApAQCAtMCwwICsxLDU4IEBACitUaGlzIGlzIHRoZSBSRUFETUUgZm9yIHRoZSBHcmFjaWxpcyBQYWNrZXR3aW4gZGV2aWNlIGRyaXZlciwgdmVyc2lvbiAwLjUKK0FMUEhBIGZvciBMaW51eCAxLjMuNDMuCisKK1RoZXNlIGZpbGVzIHdpbGwgYWxsb3cgeW91IHRvIHRhbGsgdG8gdGhlIFBhY2tlVHdpbiAobm93IGtub3cgYXMgUFQpIGFuZAorY29ubmVjdCB0aHJvdWdoIGl0IGp1c3QgbGlrZSBhIHBhaXIgb2YgVE5Dcy4gIFRvIGRvIHRoaXMgeW91IHdpbGwgYWxzbworcmVxdWlyZSB0aGUgQVguMjUgY29kZSBpbiB0aGUga2VybmVsIGVuYWJsZWQuCisKK1RoZXJlIGFyZSBmb3VyIGZpbGVzIGluIHRoaXMgYXJjaGl2ZTsgdGhpcyByZWFkbWUsIGEgcGF0Y2ggZmlsZSwgYSAuYyBmaWxlCithbmQgZmluYWxseSBhIC5oIGZpbGUuICBUaGUgdHdvIHByb2dyYW0gZmlsZXMgbmVlZCB0byBiZSBwdXQgaW50byB0aGUKK2RyaXZlcnMvbmV0IGRpcmVjdG9yeSBpbiB0aGUgTGludXggc291cmNlIHRyZWUsIGZvciBtZSB0aGlzIGlzIHRoZQorZGlyZWN0b3J5IC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0LiAgVGhlIHBhdGNoIGZpbGUgbmVlZHMgdG8gYmUgcGF0Y2hlZCBpbgorYXQgdGhlIHRvcCBvZiB0aGUgTGludXggc291cmNlIHRyZWUgKC91c3Ivc3JjL2xpbnV4IGluIG15IGNhc2UpLgorCitZb3Ugd2lsbCBtb3N0IHByb2JhYmx5IGhhdmUgdG8gZWRpdCB0aGUgcHQuYyBmaWxlIHRvIHN1aXQgeW91ciBvd24gc2V0dXAsCit0aGlzIHNob3VsZCBqdXN0IGludm9sdmUgY2hhbmdpbmcgc29tZSBvZiB0aGUgZGVmaW5lcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiAKK1BsZWFzZSBub3RlIHRoYXQgaWYgeW91IHJ1biBhbiBleHRlcm5hbCBtb2RlbSB5b3UgbXVzdCBzcGVjaWZ5IGEgc3BlZWQgb2YgMC4KKworVGhlIHByb2dyYW0gaXMgY3VycmVudGx5IHNldHVwIHRvIHJ1biBhIDQ4MDAgYmF1ZCBleHRlcm5hbCBtb2RlbSBvbiBwb3J0IEEKK2FuZCBhIEthbnRyb25pY3MgREUtOTYwMCBkYXVnaHRlciBib2FyZCBvbiBwb3J0IEIgc28gaWYgeW91IGhhdmUgdGhpcyAob3IKK3NvbWV0aGluZyBzaW1pbGFyKSB0aGVuIHlvdSdyZSByaWdodC4KKworVG8gY29tcGlsZSBpbiB0aGUgZHJpdmVyLCBwdXQgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0IHBsYWNlIGFuZCBwYXRjaCBpbgordGhlIGRpZmYuICBZb3Ugd2lsbCBoYXZlIHRvIHJlLWNvbmZpZ3VyZSB0aGUga2VybmVsIGFnYWluIGJlZm9yZSB5b3UKK3JlY29tcGlsZSBpdC4gCisKK1RoZSBkcml2ZXIgaXMgbm90IHJlYWwgZ29vZCBhdCB0aGUgbW9tZW50IGZvciBmaW5kaW5nIHRoZSBjYXJkLiAgWW91IGNhbgorJ2hlbHAnIGl0IGJ5IGNoYW5naW5nIHRoZSBvcmRlciBvZiB0aGUgcG90ZW50aWFsIGFkZHJlc3NlcyBpbiB0aGUgc3RydWN0dXJlCitmb3VuZCBpbiB0aGUgcHRfaW5pdCgpIGZ1bmN0aW9uIHNvIHRoZSBhZGRyZXNzIG9mIHdoZXJlIHRoZSBjYXJkIGlzIGlzIHB1dAorZmlyc3QuCisKK0FmdGVyIGNvbXBpbGluZywgeW91IGhhdmUgdG8gZ2V0IHRoZW0gZ29pbmcsIHRoZXkgYXJlIHByZXR0eSB3ZWxsIGxpa2UgYW55CitvdGhlciBuZXQgZGV2aWNlIGFuZCBqdXN0IG5lZWQgaWZjb25maWcgdG8gZ2V0IHRoZW0gZ29pbmcuCitBcyBhbiBleGFtcGxlLCBoZXJlIGlzIG15IC9ldGMvcmMubmV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjCisjIENvbmZpZ3VyZSB0aGUgUGFja2VUd2luLCBwb3J0IEEuCisvc2Jpbi9pZmNvbmZpZyBwdDBhIDQ0LjEzNi44Ljg3IGh3IGF4MjUgdmsyeGx6IG10dSA1MTIgCisvc2Jpbi9pZmNvbmZpZyBwdDBhIDQ0LjEzNi44Ljg3IGJyb2FkY2FzdCA0NC4xMzYuOC4yNTUgbmV0bWFzayAyNTUuMjU1LjI1NS4wCisvc2Jpbi9yb3V0ZSBhZGQgLW5ldCA0NC4xMzYuOC4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCBkZXYgcHQwYQorL3NiaW4vcm91dGUgYWRkIC1uZXQgNDQuMC4wLjAgbmV0bWFzayAyNTUuMC4wLjAgZ3cgNDQuMTM2LjguNjggZGV2IHB0MGEKKy9zYmluL3JvdXRlIGFkZCAtbmV0IDEzOC4yNS4xNi4wIG5ldG1hc2sgMjU1LjI1NS4yNDAuMCBkZXYgcHQwYQorL3NiaW4vcm91dGUgYWRkIC1ob3N0IDQ0LjEzNi44LjI1NSBkZXYgcHQwYQorIworIyBDb25maWd1cmUgdGhlIFBhY2tlVHdpbiwgcG9ydCBCLgorL3NiaW4vaWZjb25maWcgcHQwYiA0NC4xMzYuOC44NyBodyBheDI1IHZrMnhsei0xIG10dSA1MTIKKy9zYmluL2lmY29uZmlnIHB0MGIgNDQuMTM2LjguODcgYnJvYWRjYXN0IDQ0LjI1NS4yNTUuMjU1IG5ldG1hc2sgMjU1LjAuMC4wCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMTM2LjguMjE2IGRldiBwdDBiCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMTM2LjguOTUgIGRldiBwdDBiCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMjU1LjI1NS4yNTUgZGV2IHB0MGIKKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgY29tZXMgdW5kZXIgdGhlIEdOVSBHUEwuICBJZiB5b3UgaGF2ZSBvbmUgb2YgbXkKK3ByZXZpb3VzIChub24tR1BMKSB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLCBwbGVhc2UgdXBkYXRlIHRvIHRoaXMgb25lLgorCitJIGhvcGUgdGhhdCB0aGlzIGFsbCB3b3JrcyB3ZWxsIGZvciB5b3UuICBJIHdvdWxkIGJlIHBsZWFzZWQgdG8gaGVhciBob3cKK21hbnkgcGVvcGxlIHVzZSB0aGUgZHJpdmVyIGFuZCBpZiBpdCBkb2VzIGl0cyBqb2IuCisKKyAgLSBDcmFpZyB2azJ4bHogPGNzbWFsbEBzbWFsbC5kcm9wYmVhci5pZC5hdT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkZWYwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0CkBAIC0wLDAgKzEsMTUxIEBACitTZXB0ZW1iZXIgMjEsIDE5OTkKKworQ29weXJpZ2h0IChjKSAxOTk4ICBDb3JleSBUaG9tYXMgKGNvcmV5QHdvcmxkLnN0ZC5jb20pCisKK1RoaXMgZmlsZSBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFJheWxpbmsgV2lyZWxlc3MgTEFOIGNhcmQgZHJpdmVyIGZvcgorTGludXguICBUaGUgUmF5bGluayB3aXJlbGVzcyBMQU4gY2FyZCBpcyBhIFBDTUNJQSBjYXJkIHdoaWNoIHByb3ZpZGVzIElFRUUKKzgwMi4xMSBjb21wYXRpYmxlIHdpcmVsZXNzIG5ldHdvcmsgY29ubmVjdGl2aXR5IGF0IDEgYW5kIDIgbWVnYWJpdHMvc2Vjb25kLgorU2VlIGh0dHA6Ly93d3cucmF5dGhlb24uY29tL21pY3JvL3JheWxpbmsvIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBSYXlsaW5rCitjYXJkLiAgVGhpcyBkcml2ZXIgaXMgaW4gZWFybHkgZGV2ZWxvcG1lbnQgYW5kIGRvZXMgaGF2ZSBidWdzLiAgU2VlIHRoZSBrbm93bgorYnVncyBhbmQgbGltaXRhdGlvbnMgYXQgdGhlIGVuZCBvZiB0aGlzIGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9uLgorVGhpcyBkcml2ZXIgYWxzbyB3b3JrcyB3aXRoIFdlYkdlYXIncyBBdmlhdG9yIDIuNCBhbmQgQXZpYXRvciBQcm8KK3dpcmVsZXNzIExBTiBjYXJkcy4KKworQXMgb2Yga2VybmVsIDIuMy4xOCwgdGhlIHJheV9jcyBkcml2ZXIgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsCitzb3VyY2UuICBNeSB3ZWIgcGFnZSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIHJheV9jcyBpcyBhdAoraHR0cDovL3dvcmxkLnN0ZC5jb20vfmNvcmV5L3JheWxpbmsuaHRtbCBhbmQgSSBjYW4gYmUgZW1haWxlZCBhdAorY29yZXlAd29ybGQuc3RkLmNvbQorCitUaGUga2VybmVsIGRyaXZlciBpcyBiYXNlZCBvbiByYXlfY3MtMS42Mi50Z3oKKworVGhlIGRyaXZlciBhdCBteSB3ZWIgcGFnZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGFuIGFkZCBvbiB0bworRGF2aWQgSGluZHMgcGNtY2lhIHBhY2thZ2UuICBBbGwgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFyZQorYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUuICBXaGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb25seQordGhlIGVzc2lkPSBzdHJpbmcgcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSB2aWEgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitUaGlzIHdpbGwgY2hhbmdlIGFmdGVyIHRoZSBtZXRob2Qgb2Ygc29ydGluZyBvdXQgcGFyYW1ldGVycyBmb3IgYWxsCit0aGUgUENNQ0lBIGRyaXZlcnMgaXMgYWdyZWVkIHVwb24uICBJZiB5b3UgbXVzdCBoYXZlIGEgYnVpbHQgaW4gZHJpdmVyCit3aXRoIG5vbmRlZmF1bHQgcGFyYW1ldGVycywgdGhleSBjYW4gYmUgZWRpdGVkIGluCisvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC9wY21jaWEvcmF5X2NzLmMuICBTZWFyY2hpbmcgZm9yIE1PRFVMRV9QQVJNCit3aWxsIGZpbmQgdGhlbSBhbGwuCisKK0luZm9ybWF0aW9uIG9uIGNhcmQgc2VydmljZXMgaXMgYXZhaWxhYmxlIGF0OgorCWZ0cDovL2h5cGVyLnN0YW5mb3JkLmVkdS9wdWIvcGNtY2lhL2RvYworICAgICAgICBodHRwOi8vaHlwZXIuc3RhbmZvcmQuZWR1L0h5cGVyTmV3cy9nZXQvcGNtY2lhL2hvbWUuaHRtbAorCisKK0NhcmQgc2VydmljZXMgdXNlciBwcm9ncmFtcyBhcmUgc3RpbGwgcmVxdWlyZWQgZm9yIFBDTUNJQSBkZXZpY2VzLgorcGNtY2lhLWNzLTMuMS4xIG9yIGdyZWF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoZSBrZXJuZWwgdmVyc2lvbiBvZgordGhlIGRyaXZlci4KKworQ3VycmVudGx5LCByYXlfY3MgaXMgbm90IHBhcnQgb2YgRGF2aWQgSGluZHMgY2FyZCBzZXJ2aWNlcyBwYWNrYWdlLAorc28gdGhlIGZvbGxvd2luZyBtYWdpYyBpcyByZXF1aXJlZC4KKworQXQgdGhlIGVuZCBvZiB0aGUgL2V0Yy9wY21jaWEvY29uZmlnLm9wdHMgZmlsZSwgYWRkIHRoZSBsaW5lOiAKK3NvdXJjZSAuL3JheV9jcy5vcHRzIAorVGhpcyB3aWxsIG1ha2UgY2FyZCBzZXJ2aWNlcyByZWFkIHRoZSByYXlfY3Mub3B0cyBmaWxlCit3aGVuIHN0YXJ0aW5nLiAgQ3JlYXRlIHRoZSBmaWxlIC9ldGMvcGNtY2lhL3JheV9jcy5vcHRzIGNvbnRhaW5pbmcgdGhlCitmb2xsb3dpbmc6CisKKyMjIyMgc3RhcnQgb2YgL2V0Yy9wY21jaWEvcmF5X2NzLm9wdHMgIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFJheWxpbmsgV2lyZWxlc3MgTEFOIFBDTUNJQSBjYXJkCitkZXZpY2UgInJheV9jcyIKKyAgY2xhc3MgIm5ldHdvcmsiIG1vZHVsZSAibWlzYy9yYXlfY3MiCisKK2NhcmQgIlJheUxpbmsgUEMgQ2FyZCBXTEFOIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxYTYsIDB4MDAwMAorICBiaW5kICJyYXlfY3MiCisKK21vZHVsZSAibWlzYy9yYXlfY3MiIG9wdHMgIiIKKyMjIyMgZW5kIG9mIC9ldGMvcGNtY2lhL3JheV9jcy5vcHRzICMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK1RvIGpvaW4gYW4gZXhpc3RpbmcgbmV0d29yayB3aXRoCitkaWZmZXJlbnQgcGFyYW1ldGVycywgY29udGFjdCB0aGUgbmV0d29yayBhZG1pbmlzdHJhdG9yIGZvciB0aGUgCitjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCBhbmQgZWRpdCAvZXRjL3BjbWNpYS9yYXlfY3Mub3B0cy4KK0FkZCB0aGUgcGFyYW1ldGVycyBiZWxvdyBiZXR3ZWVuIHRoZSBlbXB0eSBxdW90ZXMuCisKK1BhcmFtZXRlcnMgZm9yIHJheV9jcyBkcml2ZXIgd2hpY2ggbWF5IGJlIHNwZWNpZmllZCBpbiByYXlfY3Mub3B0czoKKworYmMgICAgICAgICAgICAgIGludGVnZXIgICAgICAgICAwID0gbm9ybWFsIG1vZGUgKDgwMi4xMSB0aW1pbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBzbG93IGRvd24gaW50ZXIgZnJhbWUgdGltaW5nIHRvIGFsbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gd2l0aCBvbGRlciBicmVlemVjb20gYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuCisKK2JlYWNvbl9wZXJpb2QJaW50ZWdlciAgICAgICAgIGJlYWNvbiBwZXJpb2QgaW4gS2lsby1taWNyb3NlY29uZHMKKwkJCQlsZWdhbCB2YWx1ZXMgPSBtdXN0IGJlIGludGVnZXIgbXVsdGlwbGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGhvcCBkd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gMjU2CisKK2NvdW50cnkgICAgICAgICBpbnRlZ2VyICAgICAgICAgMSA9IFVTQSAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IEV1cm9wZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gSmFwYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9IEtvcmVhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSBTcGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ID0gRnJhbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgPSBJc3JhZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCA9IEF1c3RyYWxpYQorCitlc3NpZAkJc3RyaW5nCQlFU1MgSUQgLSBuZXR3b3JrIG5hbWUgdG8gam9pbgorCQkJCXN0cmluZyB3aXRoIG1heGltdW0gbGVuZ3RoIG9mIDMyIGNoYXJzCisJCQkJZGVmYXVsdCB2YWx1ZSA9ICJBREhPQ19FU1NJRCIKKworaG9wX2R3ZWxsCWludGVnZXIgICAgICAgICBob3AgZHdlbGwgdGltZSBpbiBLaWxvLW1pY3Jvc2Vjb25kcyAKKwkJCQlsZWdhbCB2YWx1ZXMgPSAxNiwzMiw2NCwxMjgoZGVmYXVsdCksMjU2CisKK2lycV9tYXNrCWludGVnZXIgICAgICAgICBsaW51eCBzdGFuZGFyZCAxNiBiaXQgdmFsdWUgMWJpdC9JUlEKKwkJCQlsc2IgaXMgSVJRIDAsIGJpdCAxIGlzIElSUSAxIGV0Yy4KKwkJCQlVc2VkIHRvIHJlc3RyaWN0IGNob2ljZSBvZiBJUlEncyB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIG1ldGhvZCBmb3IgY29udHJvbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyBpcyBpbiAvZXRjL3BjbWNpYS9jb25maWcub3B0cworCituZXRfdHlwZQlpbnRlZ2VyCQkwIChkZWZhdWx0KSA9IGFkaG9jIG5ldHdvcmssIAorCQkJCTEgPSBpbmZyYXN0cnVjdHVyZQorCitwaHlfYWRkcglzdHJpbmcgICAgICAgICAgc3RyaW5nIGNvbnRhaW5pbmcgbmV3IE1BQyBhZGRyZXNzIGluCisJCQkJaGV4LCBtdXN0IHN0YXJ0IHdpdGggeCBlZworCQkJCXgwMDAwOGYxMjM0NTYKKworcHNtCQlpbnRlZ2VyICAgICAgICAgMCA9IGNvbnRpbnVvdXNseSBhY3RpdmUKKwkJCQkxID0gcG93ZXIgc2F2ZSBtb2RlIChub3QgdXNlZnVsIHlldCkKKworcGNfZGVidWcJaW50ZWdlcgkJKDAtNSkgbGFyZ2VyIHZhbHVlcyBmb3IgbW9yZSB2ZXJib3NlCisJCQkJbG9nZ2luZy4gIFJlcGxhY2VzIHJheV9kZWJ1Zy4KKworcmF5X2RlYnVnCWludGVnZXIJCVJlcGxhY2VkIHdpdGggcGNfZGVidWcKKworcmF5X21lbV9zcGVlZCAgIGludGVnZXIgICAgICAgICBkZWZhdWx0cyB0byA1MDAKKworc25pZmZlciAgICAgICAgIGludGVnZXIgICAgICAgICAwID0gbm90IHNuaWZmZXIgKGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBzbmlmZmVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlY29yZCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsgdHJhZmZpYyB1c2luZyB0Y3BkdW1wIG9yIHNpbWlsYXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IG5vIG5vcm1hbCBuZXR3b3JrIHVzZSBpcyBhbGxvd2VkLgorCit0cmFuc2xhdGUJaW50ZWdlcgkJMCA9IG5vIHRyYW5zbGF0aW9uIChlbmNhcHN1bGF0ZSBmcmFtZXMpCisJCQkJMSA9IHRyYW5zbGF0aW9uICAgIChSRkMxMDQyLzgwMi4xKQorCisKK01vcmUgb24gc25pZmZlciBtb2RlOgorCit0Y3BkdW1wIGRvZXMgbm90IHVuZGVyc3RhbmQgODAyLjExIGhlYWRlcnMsIHNvIGl0IGNhbid0CitpbnRlcnByZXQgdGhlIGNvbnRlbnRzLCBidXQgaXQgY2FuIHJlY29yZCB0byBhIGZpbGUuICBUaGlzIGlzIG9ubHkKK3VzZWZ1bCBmb3IgZGVidWdnaW5nIDgwMi4xMSBsb3dsZXZlbCBwcm90b2NvbHMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8KK2xpbnV4LiAgSWYgeW91IHdhbnQgdG8gd2F0Y2ggZnRwIHhmZXJzLCBvciBkbyBzaW1pbGFyIHRoaW5ncywgeW91Citkb24ndCBuZWVkIHRvIHVzZSBzbmlmZmVyIG1vZGUuICBBbHNvLCBzb21lIHBhY2tldCB0eXBlcyBhcmUgbmV2ZXIKK3NlbnQgdXAgYnkgdGhlIGNhcmQsIHNvIHlvdSB3aWxsIG5ldmVyIHNlZSB0aGVtIChhY2ssIHJ0cywgY3RzLCBwcm9iZQorZXRjLikgIFRoZXJlIGlzIGEgc2ltcGxlIHByb2dyYW0gKHNob3djYXApIGluY2x1ZGVkIGluIHRoZSByYXlfY3MKK3BhY2thZ2Ugd2hpY2ggcGFyc2VzIHRoZSA4MDIuMTEgaGVhZGVycy4KKworS25vd24gUHJvYmxlbXMgYW5kIG1pc3NpbmcgZmVhdHVyZXMKKworICAgICAgICBEb2VzIG5vdCB3b3JrIHdpdGggbm9uIHg4NgorCisJRG9lcyBub3Qgd29yayB3aXRoIFNNUAorCisJU3VwcG9ydCBmb3IgZGVmcmFnbWVudGluZyBmcmFtZXMgaXMgbm90IHlldCBkZWJ1Z2dlZCwgYW5kIGluCisJZmFjdCBpcyBrbm93biB0byBub3Qgd29yay4gIEkgaGF2ZSBuZXZlciBlbmNvdW50ZXJlZCBhIG5ldCBzZXQKKwl1cCB0byBmcmFnbWVudCwgYnV0IHN0aWxsLCBpdCBzaG91bGQgYmUgZml4ZWQuCisKKwlUaGUgaW9jdGwgc3VwcG9ydCBpcyBpbmNvbXBsZXRlLiAgVGhlIGhhcmR3YXJlIGFkZHJlc3MgY2Fubm90IGJlIHNldAorCXVzaW5nIGlmY29uZmlnIHlldC4gIElmIGEgZGlmZmVyZW50IGhhcmR3YXJlIGFkZHJlc3MgaXMgbmVlZGVkLCBpdCBtYXkKKwliZSBzZXQgdXNpbmcgdGhlIHBoeV9hZGRyIHBhcmFtZXRlciBpbiByYXlfY3Mub3B0cy4gIFRoaXMgcmVxdWlyZXMKKwlhIGNhcmQgaW5zZXJ0aW9uIHRvIHRha2UgZWZmZWN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JvdXRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JvdXRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjgzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcm91dGluZy50eHQKQEAgLTAsMCArMSw0NiBAQAorVGhlIGRpcmVjdG9yeSBmdHAuaW5yLmFjLnJ1Oi9pcC1yb3V0aW5nIGNvbnRhaW5zOgorCistIGlwcm91dGUuYyAtICJwcm9mZXNzaW9uYWwiIHJvdXRpbmcgdGFibGUgbWFpbnRlbmFuY2UgdXRpbGl0eS4KKworLSByZGlzYy50YXIuZ3ogLSByZGlzYyBkYWVtb24sIHBvcnRlZCBmcm9tIFN1bi4KKwlTVFJPTkdMWSBSRUNPTU1FTkRFRCBGT1IgQUxMIEhPU1RTLgorCistIHJvdXRpbmcudGd6IC0gb3JpZ2luYWwgTWlrZSBNY0xhZ2FuJ3Mgcm91dGUgYnkgc291cmNlIHBhdGNoLgorCQlDdXJyZW50bHkgaXQgaXMgb2Jzb2xldGUuCisKKy0gZ2F0ZWQuZGlmLXNzPE5FV0VTVD4uZ3ogLSBnYXRlZC1SM182QWxwaGFfMiBmaXhlcy4KKwkgICAgICAgIExvb2sgYXQgUkVBRE1FLmdhdGVkCisKKy0gbXJvdXRlZC0zLjguZGlmLmd6IC0gbXJvdXRlZC0zLjggZml4ZXMuCisKKy0gcnRtb24uYyAtIHRyaXZpYWwgZGVidWdnaW5nIHV0aWxpdHk6IHJlYWRzIGFuZCBzdG9yZXMgbmV0bGluay4KKworCitORVdTIGZvciB1c2VyLgorCistIFBvbGljeSBiYXNlZCByb3V0aW5nLiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSBvbiB0aGUgYmFzaXMKKyAgbm90IG9ubHkgb2YgZGVzdGluYXRpb24gYWRkcmVzcywgYnV0IGFsc28gc291cmNlIGFkZHJlc3MsCisgIFRPUyBhbmQgaW5jb21pbmcgaW50ZXJmYWNlLgorLSBDb21wbGV0ZSBzZXQgb2YgSVAgbGV2ZWwgY29udHJvbCBtZXNzYWdlcy4KKyAgTm93IExpbnV4IGlzIHRoZSBvbmx5IE9TIGluIHRoZSB3b3JsZCBjb21wbHlpbmcgdG8gUkZDIHJlcXVpcmVtZW50cy4KKyAgR3JlYXQgd2luIDgpCistIE5ldyBpbnRlcmZhY2UgYWRkcmVzc2luZyBwYXJhZGlnbS4KKyAgQXNzaWdubWVudCBvZiBhZGRyZXNzIHJhbmdlcyB0byBpbnRlcmZhY2UsCisgIG11bHRpcGxlIHByZWZpeGVzIGV0Yy4gZXRjLgorICBEbyBub3QgYm90aGVyLCBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCBvbmUuIE1vcmVvdmVyOgorLSBZb3UgZG9uJ3QgbmVlZCB0byBkbyAicm91dGUgYWRkIGFhYS5iYmIuY2NjLi4uIGV0aDAiIGFueW1vcmUsCisgIGl0IGlzIGRvbmUgYXV0b21hdGljYWxseS4KKy0gIkFic3RyYWN0IiBVTklYIHNvY2tldHMgYW5kIHNlY3VyaXR5IGVuaGFuY2VtZW50cy4KKyAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gdXNlIFRJUlBDIGFuZCBUTEkgZW11bGF0aW9uIGxpYnJhcnkuCisKK05FV1MgZm9yIGhhY2tlci4KKworLSBOZXcgZGVzdGluYXRpb24gY2FjaGUuIEZsZXhpYmxlLCByb2J1c3QgYW5kIGp1c3QgYmVhdXRpZnVsLgorLSBOZXR3b3JrIHN0YWNrIGlzIHJlb3JkZXJlZCwgc2ltcGxpZmllZCwgb3B0aW1pemVkLCBhIGxvdCBvZiBidWdzIGZpeGVkLgorICAod2VsbCwgYW5kIG5ldyBidWdzIHdlcmUgaW50cm9kdWNlZCwgYnV0IEkgaGF2ZW4ndCBzZWVuIHRoZW0geWV0IDgpKQorICBJdCBpcyBkaWZmaWN1bHQgdG8gZGVzY3JpYmUgYWxsIHRoZSBjaGFuZ2VzLCBsb29rIGludG8gc291cmNlLgorCitJZiB5b3Ugc2VlIHRoaXMgZmlsZSwgdGhlbiB0aGlzIHBhdGNoIHdvcmtzIDgpCisKK0FsZXhleSBLdXpuZXRzb3YuCitrdXpuZXRAbXMyLmluci5hYy5ydQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjZiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKQEAgLTAsMCArMSw0OCBAQAorUzJJTyBUZWNobm9sb2dpZXMgWEZyYW1lIDEwIEdpZyBhZGFwdGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJLiBNb2R1bGUgbG9hZGFibGUgcGFyYW1ldGVycy4KK1doZW4gbG9hZGVkIGFzIGEgbW9kdWxlLCB0aGUgZHJpdmVyIHByb3ZpZGVzIGEgaG9zdCBvZiBNb2R1bGUgbG9hZGFibGUKK3BhcmFtZXRlcnMsIHNvIHRoZSBkZXZpY2UgY2FuIGJlIHR1bmVkIGFzIHBlciB0aGUgdXNlcnMgbmVlZHMuCitBIGxpc3Qgb2YgdGhlIE1vZHVsZSBwYXJhbXMgaXMgZ2l2ZW4gYmVsb3cuCisoaSkJcmluZ19udW06IFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvZ3JhbSB0aGUgbnVtYmVyIG9mCisJCSByZWNlaXZlIHJpbmdzIHVzZWQgaW4gdGhlIGRyaXZlci4KKyhpaSkJcmluZ19sZW46IFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGVhY2ggcmluZworCQkgY2FuIGhhdmUuIFRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgOCByaW5ncy4KKyhpaWkpCWZyYW1lX2xlbjogVGhpcyBpcyBhbiBhcnJheSBvZiBzaXplIDguIFVzaW5nIHRoaXMgd2UgY2FuIAorCQkgc2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHJlY2VpdmVkIGZyYW1lIHRoYXQgY2FuCisJCSBiZSBzdGVlcmVkIGludG8gdGhlIGNvcnJzcG9uZGluZyByZWNlaXZlIHJpbmcuCQorKGl2KQlmaWZvX251bTogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgVHggRklGT3MgdGhhdHMgdXNlZCBpbgorCQkgdGhlIGRyaXZlci4gCisodikJZmlmb19sZW46IEVhY2ggZWxlbWVudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgCisgCQkgVHggZGVzY3JpcHRvcnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggCisJCSBjb3JyZXNwb25kaW5nIEZJRk8uIFRoZXJlIGFyZSBhIG1heGltdW0gb2YgOCBGSUZPcy4KKyh2aSkJdHhfcHJpbzogVGhpcyBpcyBhIGJvb2wsIGlmIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCBhIG5vbi16ZXJvCisJCXZhbHVlIGZvciB0eF9wcmlvIG11bHRpIEZJRk8gc2NoZW1lIGlzIGFjdGl2YXRlZC4KKyh2aWkpCXJ4X3ByaW86IFRoaXMgaXMgYSBib29sLCBpZiBtb2R1bGUgaXMgbG9hZGVkIHdpdGggYSBub24temVybworCQl2YWx1ZSBmb3IgdHhfcHJpbyBtdWx0aSBSSU5HIHNjaGVtZSBpcyBhY3RpdmF0ZWQuCisodmlpaSkJbGF0ZW5jeV90aW1lcjogVGhlIHZhbHVlIGdpdmVuIGFnYWluc3QgdGhpcyBwYXJhbSB3aWxsIGJlCisJCSBsb2FkZWQJaW50byB0aGUgbGF0ZW5jeSB0aW1lciByZWdpc3RlciBpbiBQQ0kgQ29uZmlnCisJCSBzcGFjZSwgZWxzZSB0aGUgcmVnaXN0ZXIgaXMgbGVmdCB3aXRoIGl0cyByZXNldCB2YWx1ZS4KKworSUkuIFBlcmZvcm1hbmNlIHR1bmluZy4KKyBCeSBjaGFuZ2luZyBhIGZldyBzeXNjdGwgcGFyYW1ldGVycy4KKwlDb3B5IHRoZSBmb2xsb3dpbmcgbGluZXMgaW50byBhIGZpbGUgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQsCisJInN5c2N0bCAtcCA8ZmlsZV9uYW1lPiIKKyMjIyBJUFY0IHNwZWNpZmljIHNldHRpbmdzCituZXQuaXB2NC50Y3BfdGltZXN0YW1wcyA9IDAgIyB0dXJucyBUQ1AgdGltZXN0YW1wIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IDEsIHJlZHVjZXMgQ1BVIHVzZQorbmV0LmlwdjQudGNwX3NhY2sgPSAwICMgdHVybiBTQUNLIHN1cHBvcnQgb2ZmLCBkZWZhdWx0IG9uCisjIG9uIHN5c3RlbXMgd2l0aCBhIFZFUlkgZmFzdCBidXMgLT4gbWVtb3J5IGludGVyZmFjZSB0aGlzIGlzIHRoZSBiaWcgZ2FpbmVyCituZXQuaXB2NC50Y3Bfcm1lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vZGVmYXVsdC9tYXggVENQIHJlYWQgYnVmZmVyLCBkZWZhdWx0IDQwOTYgODczODAgMTc0NzYwCituZXQuaXB2NC50Y3Bfd21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCB3cml0ZSBidWZmZXIsIGRlZmF1bHQgNDA5NiAxNjM4NCAxMzEwNzIKK25ldC5pcHY0LnRjcF9tZW0gPSAxMDAwMDAwMCAxMDAwMDAwMCAxMDAwMDAwMCAjIHNldHMgbWluL3ByZXNzdXJlL21heCBUQ1AgYnVmZmVyIHNwYWNlLCBkZWZhdWx0IDMxNzQ0IDMyMjU2IDMyNzY4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyMjIENPUkUgc2V0dGluZ3MgKG1vc3RseSBmb3Igc29ja2V0IGFuZCBVRFAgZWZmZWN0KQorbmV0LmNvcmUucm1lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQorbmV0LmNvcmUud21lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQorbmV0LmNvcmUucm1lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQorbmV0LmNvcmUud21lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQorbmV0LmNvcmUub3B0bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gYW1vdW50IG9mIG9wdGlvbiBtZW1vcnkgYnVmZmVycywgZGVmYXVsdCAxMDI0MAorbmV0LmNvcmUubmV0ZGV2X21heF9iYWNrbG9nID0gMzAwMDAwICMgbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGlucHV0IHBhY2tldHMgYmVmb3JlIGtlcm5lbCBzdGFydHMgZHJvcHBpbmcgdGhlbSwgZGVmYXVsdCAzMDAKKy0tLUVuZCBvZiBwZXJmb3JtYW5jZSB0dW5pbmcgZmlsZS0tLQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2N0cC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2N0cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3OTBhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY3RwLnR4dApAQCAtMCwwICsxLDM4IEBACitMaW51eCBLZXJuZWwgU0NUUCAKKworVGhpcyBpcyB0aGUgY3VycmVudCBCRVRBIHJlbGVhc2Ugb2YgdGhlIExpbnV4IEtlcm5lbCBTQ1RQIHJlZmVyZW5jZQoraW1wbGVtZW50YXRpb24uICAKKworU0NUUCAoU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sKSBpcyBhIElQIGJhc2VkLCBtZXNzYWdlIG9yaWVudGVkLAorcmVsaWFibGUgdHJhbnNwb3J0IHByb3RvY29sLCB3aXRoIGNvbmdlc3Rpb24gY29udHJvbCwgc3VwcG9ydCBmb3IKK3RyYW5zcGFyZW50IG11bHRpLWhvbWluZywgYW5kIG11bHRpcGxlIG9yZGVyZWQgc3RyZWFtcyBvZiBtZXNzYWdlcy4KK1JGQzI5NjAgZGVmaW5lcyB0aGUgY29yZSBwcm90b2NvbC4gIFRoZSBJRVRGIFNJR1RSQU4gd29ya2luZyBncm91cCBvcmlnaW5hbGx5CitkZXZlbG9wZWQgdGhlIFNDVFAgcHJvdG9jb2wgYW5kIGxhdGVyIGhhbmRlZCB0aGUgcHJvdG9jb2wgb3ZlciB0byB0aGUgCitUcmFuc3BvcnQgQXJlYSAoVFNWV0cpIHdvcmtpbmcgZ3JvdXAgZm9yIHRoZSBjb250aW51ZWQgZXZvbHZlbWVudCBvZiBTQ1RQIGFzIGEgCitnZW5lcmFsIHB1cnBvc2UgdHJhbnNwb3J0LiAgCisKK1NlZSB0aGUgSUVURiB3ZWJzaXRlIChodHRwOi8vd3d3LmlldGYub3JnKSBmb3IgZnVydGhlciBkb2N1bWVudHMgb24gU0NUUC4gCitTZWUgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjk2MC50eHQgCisKK1RoZSBpbml0aWFsIHByb2plY3QgZ29hbCBpcyB0byBjcmVhdGUgYW4gTGludXgga2VybmVsIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorb2YgU0NUUCB0aGF0IGlzIFJGQyAyOTYwIGNvbXBsaWFudCBhbmQgcHJvdmlkZXMgYW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIAorcmVmZXJyZWQgdG8gYXMgdGhlICBVRFAtc3R5bGUgQVBJIG9mIHRoZSBTb2NrZXRzIEV4dGVuc2lvbnMgZm9yIFNDVFAsIGFzIAorcHJvcG9zZWQgaW4gSUVURiBJbnRlcm5ldC1EcmFmdHMuICAgIAorCisKK0NhdmVhdHM6ICAKKworLWxrc2N0cCBjYW4gYmUgYnVpbHQgYXMgc3RhdGljYWxseSBvciBhcyBhIG1vZHVsZS4gIEhvd2V2ZXIsIGJlIGF3YXJlIHRoYXQgCittb2R1bGUgcmVtb3ZhbCBvZiBsa3NjdHAgaXMgbm90IHlldCBhIHNhZmUgYWN0aXZpdHkuICAgCisKKy1UaGVyZSBpcyB0ZW50YXRpdmUgc3VwcG9ydCBmb3IgSVB2NiwgYnV0IG1vc3Qgd29yayBoYXMgZ29uZSB0b3dhcmRzIAoraW1wbGVtZW50YXRpb24gYW5kIHRlc3RpbmcgbGtzY3RwIG9uIElQdjQuICAgCisKKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdCB0aGUgbGtzY3RwIHByb2plY3Qgd2Vic2l0ZToKKyAgIGh0dHA6Ly93d3cuc2YubmV0L3Byb2plY3RzL2xrc2N0cAorCitPciBjb250YWN0IHRoZSBsa3NjdHAgZGV2ZWxvcGVycyB0aHJvdWdoIHRoZSBtYWlsaW5nIGxpc3Q6CisgICA8bGtzY3RwLWRldmVsb3BlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0PiAKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2hhcGVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaGFwZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGViYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2hhcGVyLnR4dApAQCAtMCwwICsxLDQ4IEBACitUcmFmZmljIFNoYXBlciBGb3IgTGludXgKKworVGhpcyBpcyB0aGUgY3VycmVudCBCRVRBIHJlbGVhc2Ugb2YgdGhlIHRyYWZmaWMgc2hhcGVyIGZvciBMaW51eC4gSXQgd29ya3MKK3dpdGhpbiB0aGUgZm9sbG93aW5nIGxpbWl0czoKKworbwlNaW5pbXVtIHNoYXBpbmcgc3BlZWQgaXMgY3VycmVudGx5IGFib3V0IDk2MDAgYmF1ZCAoaXQgY2FuIG9ubHkKK3NoYXBlIGRvd24gdG8gMSBieXRlIHBlciBjbG9jayB0aWNrKQorCitvCU1heGltdW0gaXMgYWJvdXQgMjU2SywgaXQgd2lsbCBnbyBhYm92ZSB0aGlzIGJ1dCBnZXQgYSBiaXQgYmxvY2t5LgorCitvCUlmIHlvdSBpZmNvbmZpZyB0aGUgbWFzdGVyIGRldmljZSB0aGF0IGEgc2hhcGVyIGlzIGF0dGFjaGVkIHRvIGRvd24KK3RoZW4geW91ciBtYWNoaW5lIHdpbGwgZm9sbG93LgorCitvCVRoZSBzaGFwZXIgbXVzdCBiZSBhIG1vZHVsZS4KKworCitTZXR1cDoKKworCUEgc2hhcGVyIGRldmljZSBpcyBjb25maWd1cmVkIHVzaW5nIHRoZSBzaGFwZWNvbmZpZyBwcm9ncmFtLgorVHlwaWNhbGx5IHlvdSB3aWxsIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMKKworc2hhcGVjZmcgYXR0YWNoIHNoYXBlcjAgZXRoMQorc2hhcGVjZmcgc3BlZWQgc2hhcGVyMCA2NDAwMAoraWZjb25maWcgc2hhcGVyMCBteWhvc3QgbmV0bWFzayAyNTUuMjU1LjI1NS4yNDAgYnJvYWRjYXN0IDEuMi4zLjQuMjU1IHVwCityb3V0ZSBhZGQgLW5ldCBzb21lLm5ldHdvcmsgbmV0bWFzayBhLmIuYy5kIGRldiBzaGFwZXIwCisKK1RoZSBzaGFwZXIgc2hvdWxkIGhhdmUgdGhlIHNhbWUgSVAgYWRkcmVzcyBhcyB0aGUgZGV2aWNlIGl0IGlzIGF0dGFjaGVkIHRvCitmb3Igbm9ybWFsIHVzZS4KKworR290Y2hhczoKKworCVRoZSBzaGFwZXIgc2hhcGVzIHRyYW5zbWl0dGVkIHRyYWZmaWMuIEl0J3MgcmF0aGVyIGltcG9zc2libGUgdG8KK3NoYXBlIHJlY2VpdmVkIHRyYWZmaWMgZXhjZXB0IGF0IHRoZSBlbmQgKG9yIGEgcm91dGVyKSB0cmFuc21pdHRpbmcgaXQuCisKKwlHYXRlZC9yb3V0ZWQvcndob2QvbXJvdXRlZCBhbGwgc2VlIHRoZSBzaGFwZXIgYXMgYW4gYWRkaXRpb25hbCBkZXZpY2UKK2FuZCB3aWxsIHRyZWF0IGl0IGFzIHN1Y2ggdW5sZXNzIHBhdGNoZWQuIE5vdGUgdGhhdCBmb3IgbXJvdXRlZCB5b3UgY2FuIHJ1bgorbXJvdXRlZCB0dW5uZWxzIHZpYSBhIHRyYWZmaWMgc2hhcGVyIHRvIGNvbnRyb2wgYmFuZHdpZHRoIHVzYWdlLgorCisJVGhlIHNoYXBlciBpcyBkZXZpY2Uvcm91dGUgYmFzZWQuIFRoaXMgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIHVzZQord2l0aCBhbnkgc2V0dXAgQlVUIGxlc3MgZmxleGlibGUuIFlvdSBtYXkgbmVlZCB0byB1c2UgaXByb3V0ZTIgdG8gc2V0IHVwCittdWx0aXBsZSByb3V0ZSB0YWJsZXMgdG8gZ2V0IHRoZSBmbGV4aWJpbGl0eS4KKworCVRoZXJlIGlzIG5vICJib3Jyb3dpbmciIG9yICJzaGFyaW5nIiBzY2hlbWUuIFRoaXMgaXMgYSBzaW1wbGUKK3RyYWZmaWMgbGltaXRlci4gV2UgaW1wbGVtZW50IFZhbiBKYWNvYnNvbiBhbmQgU2FsbHkgRmxveWQncyBDQlEKK2FyY2hpdGVjdHVyZSBpbnRvIExpbnV4IDIuMi4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIHNvbHV0aW9uLiBTaGFwZXIgaXMKK2ZvciBzaW1wbGUgb3IgYmFjayBjb21wYXRpYmxlIHNldHVwcy4KKworQWxhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NpczkwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGRmZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NpczkwMC50eHQKQEAgLTAsMCArMSwyNTcgQEAKKworU2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgRGV2aWNlIERyaXZlcgorCitPbGxpZSBMaG8KKworTGVpIENodW4gQ2hhbmcKKworICAgQ29weXJpZ2h0IKkgMTk5OSBieSBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuCisgICAKKyAgIFRoaXMgZG9jdW1lbnQgZ2l2ZXMgc29tZSBpbmZvcm1hdGlvbiBvbiBpbnN0YWxsYXRpb24gYW5kIHVzYWdlIG9mIFNpUworICAgOTAwLzcwMTYgZGV2aWNlIGRyaXZlciB1bmRlciBMaW51eC4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgIFVTQQorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCisgICBUYWJsZSBvZiBDb250ZW50cworICAgMS4gSW50cm9kdWN0aW9uCisgICAyLiBDaGFuZ2VzCisgICAzLiBUZXN0ZWQgRW52aXJvbm1lbnQKKyAgIDQuIEZpbGVzIGluIFRoaXMgUGFja2FnZQorICAgNS4gSW5zdGFsbGF0aW9uCisgICAgICAgICAgCisgICAgICAgIEJ1aWxkaW5nIHRoZSBkcml2ZXIgYXMgbG9hZGFibGUgbW9kdWxlCisgICAgICAgIEJ1aWxkaW5nIHRoZSBkcml2ZXIgaW50byBrZXJuZWwKKyAgICAgICAgICAgICAgICAKKyAgIDYuIEtub3duIFByb2JsZW1zIGFuZCBCdWdzCisgICA3LiBSZXZpc2lvbiBIaXN0b3J5CisgICA4LiBBY2tub3dsZWRnZW1lbnRzCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgMS4gSW50cm9kdWN0aW9uCisKKyAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSByZXZpc2lvbiAxLjA2IGFuZCAxLjA3IG9mIFNpUyA5MDAvNzAxNgorICAgRmFzdCBFdGhlcm5ldCBkZXZpY2UgZHJpdmVyIHVuZGVyIExpbnV4LiBUaGUgZHJpdmVyIGlzIGRldmVsb3BlZCBieQorICAgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3JwLiBhbmQgZGlzdHJpYnV0ZWQgZnJlZWx5IHVuZGVyIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuIFRoZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbG9hZGFibGUKKyAgIG1vZHVsZSBhbmQgdXNlZCB1bmRlciBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjIueC4gKHJldi4gMS4wNikgV2l0aAorICAgbWluaW1hbCBjaGFuZ2VzLCB0aGUgZHJpdmVyIGNhbiBhbHNvIGJlIHVzZWQgdW5kZXIgMi4zLnggYW5kIDIuNC54CisgICBrZXJuZWwgKHJldi4gMS4wNyksIHBsZWFzZSBzZWUgQ2hhcHRlciA1LiBJZiB5b3UgYXJlIGludGVuZGVkIHRvIHVzZQorICAgdGhlIGRyaXZlciBmb3IgZWFybGllciBrZXJuZWxzLCB5b3UgYXJlIG9uIHlvdXIgb3duLgorICAgCisgICBUaGUgZHJpdmVyIGlzIHRlc3RlZCB3aXRoIHVzdWFsIFRDUC9JUCBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIEZUUCwKKyAgIFRlbG5ldCwgTmV0c2NhcGUgZXRjLiBhbmQgaXMgdXNlZCBjb25zdGFudGx5IGJ5IHRoZSBkZXZlbG9wZXJzLgorICAgCisgICBQbGVhc2Ugc2VuZCBhbGwgY29tbWVudHMvZml4ZXMvcXVlc3Rpb25zIHRvIExlaS1DaHVuIENoYW5nLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDIuIENoYW5nZXMKKworICAgQ2hhbmdlcyBtYWRlIGluIFJldmlzaW9uIDEuMDcKKyAgIAorICAgIDEuIFNlcGFyYXRpb24gb2Ygc2lzOTAwLmMgYW5kIHNpczkwMC5oIGluIG9yZGVyIHRvIG1vdmUgbW9zdCBjb25zdGFudAorICAgICAgIGRlZmluaXRpb24gdG8gc2lzOTAwLmggKG1hbnkgb2YgdGhvc2UgY29uc3RhbnRzIHdlcmUgY29ycmVjdGVkKQorICAgIDIuIENsZWFuIHVwIFBDSSBkZXRlY3Rpb24sIHRoZSBwY2ktc2NhbiBmcm9tIERvbmFsZCBCZWNrZXIgd2VyZSBub3QKKyAgICAgICB1c2VkLCBqdXN0IHNpbXBsZSBwY2lfZmluZF8qLgorICAgIDMuIE1JSSBkZXRlY3Rpb24gaXMgbW9kaWZpZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBtaWkgdHJhbnNjZWl2ZXIuCisgICAgNC4gQnVncyBpbiByZWFkX2VlcHJvbSwgbWRpb18qIHdlcmUgcmVtb3ZlZC4KKyAgICA1LiBMb3Qgb2Ygc2lzOTAwIGlycmVsZXZhbnQgY29tbWVudHMgd2VyZSByZW1vdmVkL2NoYW5nZWQgYW5kIG1vcmUKKyAgICAgICBjb21tZW50cyB3ZXJlIGFkZGVkIHRvIHJlZmxlY3QgdGhlIHJlYWwgc2l0dWF0aW9uLgorICAgIDYuIENsZWFuIHVwIG9mIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzcyBzcGFjZSBtZXNzIGluIGJ1ZmZlcgorICAgICAgIGRlc2NyaXB0b3JzLgorICAgIDcuIEJldHRlciB0cmFuc21pdC9yZWNlaXZlIGVycm9yIGhhbmRsaW5nLgorICAgIDguIFRoZSBkcml2ZXIgbm93IHVzZXMgemVyby1jb3B5IHNpbmdsZSBidWZmZXIgbWFuYWdlbWVudCBzY2hlbWUgdG8KKyAgICAgICBpbXByb3ZlIHBlcmZvcm1hbmNlLgorICAgIDkuIE5hbWVzIG9mIHZhcmlhYmxlcyB3ZXJlIGNoYW5nZWQgdG8gYmUgbW9yZSBjb25zaXN0ZW50LgorICAgMTAuIENsZWFuIHVwIG9mIGF1by1uZWdvdGlhdGlvbiBhbmQgdGltZXIgY29kZS4KKyAgIDExLiBBdXRvbWF0aWMgZGV0ZWN0aW9uIGFuZCBjaGFuZ2Ugb2YgUEhZIG9uIHRoZSBmbHkuCisgICAxMi4gQnVnIGluIG1hYyBwcm9iaW5nIGZpeGVkLgorICAgMTMuIEZpeCA2MzBFIGVxdWFsaWVyIHByb2JsZW0gYnkgbW9kaWZ5aW5nIHRoZSBlcXVhbGl6ZXIgd29ya2Fyb3VuZAorICAgICAgIHJ1bGUuCisgICAxNC4gU3VwcG9ydCBmb3IgSUNTMTg5MyAxMC8xMDAgSW50ZXJhdGVkIFBIWWNlaXZlci4KKyAgIDE1LiBTdXBwb3J0IGZvciBtZWRpYSBzZWxlY3QgYnkgaWZjb25maWcuCisgICAxNi4gQWRkZWQga2VybmVsLWRvYyBleHRyYXRhYmxlIGRvY3VtZW50YXRpb24uCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgMy4gVGVzdGVkIEVudmlyb25tZW50CisKKyAgIFRoaXMgZHJpdmVyIGlzIGRldmVsb3BlZCBvbiB0aGUgZm9sbG93aW5nIGhhcmR3YXJlCisgICAKKyAgICAgKiBJbnRlbCBDZWxlcm9uIDUwMCB3aXRoIFNpUyA2MzAgKHJldiAwMikgY2hpcHNldAorICAgICAqIFNpUyA5MDAgKHJldiAwMSkgYW5kIFNpUyA3MDE2LzcwMTQgRmFzdCBFdGhlcm5ldCBDYXJkCisgICAgICAgCisgICBhbmQgdGVzdGVkIHdpdGggdGhlc2Ugc29mdHdhcmUgZW52aXJvbm1lbnRzCisgICAKKyAgICAgKiBSZWQgSGF0IExpbnV4IHZlcnNpb24gNi4yCisgICAgICogTGludXgga2VybmVsIHZlcnNpb24gMi40LjAKKyAgICAgKiBOZXRzY2FwZSB2ZXJzaW9uIDQuNgorICAgICAqIE5jRlRQIDMuMC4wIGJldGEgMTgKKyAgICAgKiBTYW1iYSB2ZXJzaW9uIDIuMC4zCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgNC4gRmlsZXMgaW4gVGhpcyBQYWNrYWdlCisKKyAgIEluIHRoZSBwYWNrYWdlIHlvdSBjYW4gZmluZCB0aGVzZSBmaWxlczoKKyAgIAorICAgc2lzOTAwLmMKKyAgICAgICAgICBEcml2ZXIgc291cmNlIGZpbGUgaW4gQworICAgICAgICAgIAorICAgc2lzOTAwLmgKKyAgICAgICAgICBIZWFkZXIgZmlsZSBmb3Igc2lzOTAwLmMKKyAgICAgICAgICAKKyAgIHNpczkwMC5zZ21sCisgICAgICAgICAgRG9jQm9vayBTR01MIHNvdXJjZSBvZiB0aGUgZG9jdW1lbnQKKyAgICAgICAgICAKKyAgIHNpczkwMC50eHQKKyAgICAgICAgICBEcml2ZXIgZG9jdW1lbnQgaW4gcGxhaW4gdGV4dAorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDUuIEluc3RhbGxhdGlvbgorCisgICBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuIGlzIGNvb3BlcmF0aW5nIGNsb3NlbHkgd2l0aCBjb3JlIExpbnV4CisgICBLZXJuZWwgZGV2ZWxvcGVycy4gVGhlIHJldmlzaW9ucyBvZiBTaVMgOTAwIGRyaXZlciBhcmUgZGlzdHJpYnV0ZWQgYnkKKyAgIHRoZSB1c3VhbGwgY2hhbm5lbHMgZm9yIGtlcm5lbCB0YXIgZmlsZXMgYW5kIHBhdGNoZXMuIFRob3NlIGtlcm5lbCB0YXIKKyAgIGZpbGVzIGZvciBvZmZpY2lhbCBrZXJuZWwgYW5kIHBhdGNoZXMgZm9yIGtlcm5lbCBwcmUtcmVsZWFzZSBjYW4gYmUKKyAgIGRvd25sb2FkIGF0IG9mZmljaWFsIGtlcm5lbCBmdHAgc2l0ZSBhbmQgaXRzIG1pcnJvcnMuIFRoZSAxLjA2CisgICByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gbGF0ZXIgdGhhbiAyLjMuMTUgYW5kCisgICBwcmUtMi4yLjE0LCBhbmQgMS4wNyByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gMi40LjAuIElmCisgICB5b3UgaGF2ZSBubyBwcmlvciBleHBlcmllbmNlIGluIG5ldHdvcmtpbmcgdW5kZXIgTGludXgsIHBsZWFzZSByZWFkCisgICBFdGhlcm5ldCBIT1dUTyBhbmQgTmV0d29ya2luZyBIT1dUTyBhdmFpbGFibGUgZnJvbSBMaW51eCBEb2N1bWVudGF0aW9uCisgICBQcm9qZWN0IChMRFApLgorICAgCisgICBUaGUgZHJpdmVyIGlzIGJ1bmRsZWQgaW4gcmVsZWFzZSBsYXRlciB0aGFuIDIuMi4xMSBhbmQgMi4zLjE1IHNvIHRoaXMKKyAgIGlzIHRoZSBtb3N0IGVhc3kgY2FzZS4gQmUgc3VyZSB5b3UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZXMgZm9yCisgICBjb21waWxpbmcga2VybmVsIHNvdXJjZS4gVGhvc2UgcGFja2FnZXMgYXJlIGxpc3RlZCBpbiBEb2N1bWVudC9DaGFuZ2VzCisgICBpbiBrZXJuZWwgc291cmNlIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGhhdmUgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIG90aGVyCisgICB0aGFuIHRob3NlIGJ1bmRsZWQgaW4ga2VybmVsIHJlbGVhc2UsIHlvdSBzaG91bGQgaGF2ZSB5b3VyIGRyaXZlciBmaWxlCisgICBzaXM5MDAuYyBhbmQgc2lzOTAwLmggY29waWVkIGludG8gL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQvIGZpcnN0LgorICAgVGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZSB3YXlzIHRvIGluc3RhbGwgdGhlIGRyaXZlcgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitCdWlsZGluZyB0aGUgZHJpdmVyIGFzIGxvYWRhYmxlIG1vZHVsZQorCisgICBUbyBidWlsZCB0aGUgZHJpdmVyIGFzIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZSB5b3UgaGF2ZSB0bworICAgcmVjb25maWd1cmUgdGhlIGtlcm5lbCB0byBhY3RpdmF0ZSBuZXR3b3JrIHN1cHBvcnQgYnkKKyAgIAorbWFrZSBtZW51Y29uZmlnCisKKyAgIENob29zZSAiTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgLS0tPiIsIHRoZW4gc2VsZWN0ICJFbmFibGUgbG9hZGFibGUKKyAgIG1vZHVsZSBzdXBwb3J0Ii4KKyAgIAorICAgQ2hvb3NlICJOZXR3b3JrIERldmljZSBTdXBwb3J0IC0tLT4iLCBzZWxlY3QgIkV0aGVybmV0ICgxMCBvcgorICAgMTAwTWJpdCkiLiBUaGVuIHNlbGVjdCAiRUlTQSwgVkxCLCBQQ0kgYW5kIG9uIGJvYXJkIGNvbnRyb2xsZXJzIiwgYW5kCisgICBjaG9vc2UgIlNpUyA5MDAvNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnQiIHRvICJNIi4KKyAgIAorICAgQWZ0ZXIgcmVjb25maWd1cmluZyB0aGUga2VybmVsLCB5b3UgY2FuIG1ha2UgdGhlIGRyaXZlciBtb2R1bGUgYnkKKyAgIAorbWFrZSBtb2R1bGVzCisKKyAgIFRoZSBkcml2ZXIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGggbm8gZXJyb3JzLiBBZnRlciBjb21waWxpbmcgdGhlCisgICBkcml2ZXIsIHRoZSBkcml2ZXIgY2FuIGJlIGluc3RhbGxlZCB0byBwcm9wZXIgcGxhY2UgYnkKKyAgIAorbWFrZSBtb2R1bGVzX2luc3RhbGwKKworICAgTG9hZCB0aGUgZHJpdmVyIGludG8ga2VybmVsIGJ5CisgICAKK2luc21vZCBzaXM5MDAKKworICAgV2hlbiBsb2FkaW5nIHRoZSBkcml2ZXIgaW50byBtZW1vcnksIHNvbWUgaW5mb3JtYXRpb24gbWVzc2FnZSBjYW4gYmUKKyAgIHZpZXcgYnkKKyAgIAorZG1lc2cKKworICAgb3IKK2NhdCAvdmFyL2xvZy9tZXNzYWdlCisKKyAgIElmIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHByb3Blcmx5IHlvdSB3aWxsIGhhdmUgbWVzc2FnZXMgc2ltaWxhciB0bworICAgdGhpczoKKyAgIAorc2lzOTAwLmM6IHYxLjA3LjA2ICAxMS8wNy8yMDAwCitldGgwOiBTaVMgOTAwIFBDSSBGYXN0IEV0aGVybmV0IGF0IDB4ZDAwMCwgSVJRIDEwLCAwMDowMDplODo4Mzo3ZjphNC4KK2V0aDA6IFNpUyA5MDAgSW50ZXJuYWwgTUlJIFBIWSB0cmFuc2NlaXZlciBmb3VuZCBhdCBhZGRyZXNzIDEuCitldGgwOiBVc2luZyBTaVMgOTAwIEludGVybmFsIE1JSSBQSFkgYXMgZGVmYXVsdAorCisgICBzaG93aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgYW5kIHRoZSByZXN1bHRzIG9mIHByb2Jpbmcgcm91dGluZS4KKyAgIAorICAgT25jZSB0aGUgZHJpdmVyIGlzIGxvYWRlZCwgbmV0d29yayBjYW4gYmUgYnJvdWdodCB1cCBieQorICAgCisvc2Jpbi9pZmNvbmZpZyBldGgwIElQQUREUiBicm9hZGNhc3QgQlJPQURDQVNUIG5ldG1hc2sgTkVUTUFTSyBtZWRpYSBUWVBFCisKKyAgIHdoZXJlIElQQUREUiwgQlJPQURDQVNULCBORVRNQVNLIGFyZSB5b3VyIElQIGFkZHJlc3MsIGJyb2FkY2FzdAorICAgYWRkcmVzcyBhbmQgbmV0bWFzayByZXNwZWN0aXZlbHkuIFRZUEUgaXMgdXNlZCB0byBzZXQgbWVkaXVtIHR5cGUgdXNlZAorICAgYnkgdGhlIGRldmljZS4gVHlwaWNhbCB2YWx1ZXMgYXJlICIxMGJhc2VUIih0d2lzdGVkLXBhaXIgMTBNYnBzCisgICBFdGhlcm5ldCkgb3IgIjEwMGJhc2VUIiAodHdpc3RlZC1wYWlyIDEwME1icHMgRXRoZXJuZXQpLiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZSwgcGxlYXNlIHJlZmVyIHRvCisgICBOZXR3b3JraW5nIEhPV1RPLgorICAgCisgICBUaGUgbGluayBzdGF0dXMgaXMgYWxzbyBzaG93biBieSBrZXJuZWwgbWVzc2FnZXMuIEZvciBleGFtcGxlLCBhZnRlcgorICAgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGFjdGl2YXRlZCwgeW91IG1heSBoYXZlIHRoZSBtZXNzYWdlOgorICAgCitldGgwOiBNZWRpYSBMaW5rIE9uIDEwMG1icHMgZnVsbC1kdXBsZXgKKworICAgSWYgeW91IHRyeSB0byB1bnBsdWcgdGhlIHR3aXN0IHBhaXIgKFRQKSBjYWJsZSB5b3Ugd2lsbCBnZXQKKyAgIAorZXRoMDogTWVkaWEgTGluayBPZmYKKworICAgaW5kaWNhdGluZyB0aGF0IHRoZSBsaW5rIGlzIGZhaWxlZC4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQnVpbGRpbmcgdGhlIGRyaXZlciBpbnRvIGtlcm5lbAorCisgICBJZiB5b3Ugd2FudCB0byBtYWtlIHRoZSBkcml2ZXIgaW50byBrZXJuZWwsIGNob29zZSAiWSIgcmF0aGVyIHRoYW4gIk0iCisgICBvbiAiU2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydCIgd2hlbiBjb25maWd1cmluZworICAgdGhlIGtlcm5lbC4gQnVpbGQgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUgdXN1YWwgd2F5CisgICAKK21ha2UgY2xlYW4KKworbWFrZSBiemxpbG8KKworICAgTmV4dCB0aW1lIHRoZSBzeXN0ZW0gcmVib290LCB5b3UgaGF2ZSB0aGUgZHJpdmVyIGluIG1lbW9yeS4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciA2LiBLbm93biBQcm9ibGVtcyBhbmQgQnVncworCisgICBUaGVyZSBhcmUgc29tZSBrbm93biBwcm9ibGVtcyBhbmQgYnVncy4gSWYgeW91IGZpbmQgYW55IG90aGVyIGJ1Z3MKKyAgIHBsZWFzZSBtYWlsIHRvIGxjY2hhbmdAc2lzLmNvbS50dworICAgCisgICAgMS4gQU03OUM5MDEgSG9tZVBOQSBQSFkgaXMgbm90IHRob3JvdWdobHkgdGVzdGVkLCB0aGVyZSBtYXkgYmUgc29tZQorICAgICAgIGJ1Z3MgaW4gdGhlICJvbiB0aGUgZmx5IiBjaGFuZ2Ugb2YgdHJhbnNjZWl2ZXIuCisgICAgMi4gQSBidWcgaXMgaGlkZGVuIHNvbWV3aGVyZSBpbiB0aGUgcmVjZWl2ZSBidWZmZXIgbWFuYWdlbWVudCBjb2RlLAorICAgICAgIHRoZSBidWcgY2F1c2VzIE5VTEwgcG9pbnRlciByZWZlcmVuY2UgaW4gdGhlIGtlcm5lbC4gVGhpcyBmYXVsdCBpcworICAgICAgIGNhdWdodCBiZWZvcmUgYmFkIHRoaW5ncyBoYXBwZW4gYW5kIHJlcG9ydGVkIHdpdGggdGhlIG1lc3NhZ2U6CisgICAgICAgZXRoMDogTlVMTCBwb2ludGVyIGVuY291bnRlcmVkIGluIFJ4IHJpbmcsIHNraXBwaW5nIHdoaWNoIGNhbiBiZQorICAgICAgIHZpZXdlZCB3aXRoIGRtZXNnIG9yIGNhdCAvdmFyL2xvZy9tZXNzYWdlLgorICAgIDMuIFRoZSBtZWRpYSB0eXBlIGNoYW5nZSBmcm9tIDEwTWJwcyB0byAxMDBNYnBzIHR3aXN0ZWQtcGFpciBldGhlcm5ldAorICAgICAgIGJ5IGlmY29uZmlnIGNhdXNlcyB0aGUgbWVkaWEgbGluayBkb3duLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDcuIFJldmlzaW9uIEhpc3RvcnkKKworICAgICAqIE5vdmVtYmVyIDEzLCAyMDAwLCBSZXZpc2lvbiAxLjA3LCBzZXZlbnRoIHJlbGVhc2UsIDYzMEUgcHJvYmxlbQorICAgICAgIGZpeGVkIGFuZCBmdXJ0aGVyIGNsZWFuIHVwLgorICAgICAqIE5vdmVtYmVyIDQsIDE5OTksIFJldmlzaW9uIDEuMDYsIFNlY29uZCByZWxlYXNlLCBsb3RzIG9mIGNsZWFuIHVwCisgICAgICAgYW5kIG9wdGltaXphdGlvbi4KKyAgICAgKiBBdWd1c3QgOCwgMTk5OSwgUmV2aXNpb24gMS4wNSwgSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDguIEFja25vd2xlZGdlbWVudHMKKworICAgVGhpcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgZGVyaXZlZCBmb3JtIERvbmFsZCBCZWNrZXIncyBwY2ktc2tlbGV0b24KKyAgIGFuZCBydGw4MTM5IGRyaXZlcnMuIERvbmFsZCBhbHNvIHByb3ZpZGVkIHZhcmlvdXMgc3VnZ2VzdGlvbiByZWdhcmRlZAorICAgd2l0aCBpbXByb3ZlbWVudHMgbWFkZSBpbiByZXZpc2lvbiAxLjA2LgorICAgCisgICBUaGUgMS4wNSByZXZpc2lvbiB3YXMgY3JlYXRlZCBieSBKaW0gSHVhbmcsIEFNRCA3OWM5MDEgc3VwcG9ydCB3YXMKKyAgIGFkZGVkIGJ5IENoaW4tU2hhbiBMaS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zazk4bGluLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zazk4bGluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTFmYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0CkBAIC0wLDAgKzEsNTY4IEBACisoQylDb3B5cmlnaHQgMTk5OS0yMDA0IE1hcnZlbGwoUikuCitBbGwgcmlnaHRzIHJlc2VydmVkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2s5OGxpbi50eHQgY3JlYXRlZCAxMy1GZWItMjAwNAorCitSZWFkbWUgRmlsZSBmb3Igc2s5OGxpbiB2Ni4yMworTWFydmVsbCBZdWtvbi9TeXNLb25uZWN0IFNLLTk4eHggR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyIGZhbWlseSBkcml2ZXIgZm9yIExJTlVYCisKK1RoaXMgZmlsZSBjb250YWlucworIDEgIE92ZXJ2aWV3CisgMiAgUmVxdWlyZWQgRmlsZXMKKyAzICBJbnN0YWxsYXRpb24KKyAgICAzLjEgIERyaXZlciBJbnN0YWxsYXRpb24KKyAgICAzLjIgIEluY2x1c2lvbiBvZiBhZGFwdGVyIGF0IHN5c3RlbSBzdGFydAorIDQgIERyaXZlciBQYXJhbWV0ZXJzCisgICAgNC4xICBQZXItUG9ydCBQYXJhbWV0ZXJzCisgICAgNC4yICBBZGFwdGVyIFBhcmFtZXRlcnMKKyA1ICBMYXJnZSBGcmFtZSBTdXBwb3J0CisgNiAgVkxBTiBhbmQgTGluayBBZ2dyZWdhdGlvbiBTdXBwb3J0IChJRUVFIDgwMi4xLCA4MDIuMXEsIDgwMi4zYWQpCisgNyAgVHJvdWJsZXNob290aW5nCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzEgIE92ZXJ2aWV3Cis9PT09PT09PT09PQorCitUaGUgc2s5OGxpbiBkcml2ZXIgc3VwcG9ydHMgdGhlIE1hcnZlbGwgWXVrb24gYW5kIFN5c0tvbm5lY3QgCitTSy05OHh4L1NLLTk1eHggY29tcGxpYW50IEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciBvbiBMaW51eC4gSXQgaGFzIAorYmVlbiB0ZXN0ZWQgd2l0aCBMaW51eCBvbiBJbnRlbC94ODYgbWFjaGluZXMuCisqKioKKworCisyICBSZXF1aXJlZCBGaWxlcworPT09PT09PT09PT09PT09PT0KKworVGhlIGxpbnV4IGtlcm5lbCBzb3VyY2UuCitObyBhZGRpdGlvbmFsIGZpbGVzIHJlcXVpcmVkLgorKioqCisKKworMyAgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT0KKworSXQgaXMgcmVjb21tZW5kZWQgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgZnJvbSB0aGUgCitTeXNLb25uZWN0IHdlYiBzaXRlIHd3dy5zeXNrb25uZWN0LmNvbS4gSWYgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgbGF0ZXN0Citkcml2ZXIsIHRoZSBMaW51eCBrZXJuZWwgaGFzIHRvIGJlIHBhdGNoZWQgYmVmb3JlIHRoZSBkcml2ZXIgY2FuIGJlIAoraW5zdGFsbGVkLiBGb3IgZGV0YWlscyBvbiBob3cgdG8gcGF0Y2ggYSBMaW51eCBrZXJuZWwsIHJlZmVyIHRvIHRoZSAKK3BhdGNoLnR4dCBmaWxlLgorCiszLjEgIERyaXZlciBJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHRoZSBhY3Rpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGluc3RhbGwKK3RoZSBkcml2ZXIgYW5kIHRvIHN0YXJ0IGl0IG1hbnVhbGx5LiBUaGVzZSBzdGVwcyBzaG91bGQgYmUgY2FycmllZAorb3V0IGZvciB0aGUgaW5pdGlhbCBkcml2ZXIgc2V0dXAuIE9uY2UgY29uZmlybWVkIHRvIGJlIG9rLCB0aGV5IGNhbgorYmUgaW5jbHVkZWQgaW4gdGhlIHN5c3RlbSBzdGFydC4KKworTk9URSAxOiBUbyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGFza3MgeW91IG5lZWQgJ3Jvb3QnIGFjY2Vzcy4KKworTk9URSAyOiBJbiBjYXNlIG9mIHByb2JsZW1zLCBwbGVhc2UgcmVhZCB0aGUgc2VjdGlvbiAiVHJvdWJsZXNob290aW5nIiAKKyAgICAgICAgYmVsb3cuCisKK1RoZSBkcml2ZXIgY2FuIGVpdGhlciBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciBpdCBjYW4gYmUgY29tcGlsZWQgCithcyBhIG1vZHVsZS4gU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gZHVyaW5nIHRoZSBrZXJuZWwgCitjb25maWd1cmF0aW9uLgorCitDb21waWxlL3VzZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBjb21waWxlIHRoZSBkcml2ZXIsIGdvIHRvIHRoZSBkaXJlY3RvcnkgL3Vzci9zcmMvbGludXggYW5kCitleGVjdXRlIHRoZSBjb21tYW5kICJtYWtlIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciIGFuZCBwcm9jZWVkIGFzIAorZm9sbG93czoKKworVG8gaW50ZWdyYXRlIHRoZSBkcml2ZXIgcGVybWFuZW50bHkgaW50byB0aGUga2VybmVsLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIFNlbGVjdCB0aGUgbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIgYW5kIHRoZW4gIkV0aGVybmV0KDEwMDBNYml0KSIKKzIuIE1hcmsgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBmYW1pbHkgc3VwcG9ydCIgCisgICB3aXRoICgqKSAKKzMuIEJ1aWxkIGEgbmV3IGtlcm5lbCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhYm92ZSBvcHRpb25zIGlzIAorICAgZmluaXNoZWQuCis0LiBJbnN0YWxsIHRoZSBuZXcga2VybmVsLgorNS4gUmVib290IHlvdXIgc3lzdGVtLgorCitUbyB1c2UgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgcHJvY2VlZCBhcyBmb2xsb3dzOgorCisxLiBFbmFibGUgJ2xvYWRhYmxlIG1vZHVsZSBzdXBwb3J0JyBpbiB0aGUga2VybmVsLgorMi4gRm9yIGF1dG9tYXRpYyBkcml2ZXIgc3RhcnQsIGVuYWJsZSB0aGUgJ0tlcm5lbCBtb2R1bGUgbG9hZGVyJy4KKzMuIFNlbGVjdCB0aGUgbWVudSAiTmV0d29yayBkZXZpY2Ugc3VwcG9ydCIgYW5kIHRoZW4gIkV0aGVybmV0KDEwMDBNYml0KSIKKzQuIE1hcmsgIk1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBmYW1pbHkgc3VwcG9ydCIgCisgICB3aXRoIChNKQorNS4gRXhlY3V0ZSB0aGUgY29tbWFuZCAibWFrZSBtb2R1bGVzIi4KKzYuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgIm1ha2UgbW9kdWxlc19pbnN0YWxsIi4KKyAgIFRoZSBhcHByb3BpYXRlIG1vZHVsZXMgd2lsbCBiZSBpbnN0YWxsZWQuCis3LiBSZWJvb3QgeW91ciBzeXN0ZW0uCisKKworTG9hZCB0aGUgbW9kdWxlIG1hbnVhbGx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGxvYWQgdGhlIG1vZHVsZSBtYW51YWxseSwgcHJvY2VlZCBhcyBmb2xsb3dzOgorCisxLiBFbnRlciAibW9kcHJvYmUgc2s5OGxpbiIuCisyLiBJZiBhIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4IGFkYXB0ZXIgaXMgaW5zdGFsbGVkIGluIAorICAgeW91ciBjb21wdXRlciBhbmQgeW91IGhhdmUgYSAvcHJvYyBmaWxlIHN5c3RlbSwgZXhlY3V0ZSB0aGUgY29tbWFuZDoKKyAgICJscyAvcHJvYy9uZXQvc2s5OGxpbi8iIAorICAgVGhpcyBzaG91bGQgcHJvZHVjZSBhbiBvdXRwdXQgY29udGFpbmluZyBhIGxpbmUgd2l0aCB0aGUgZm9sbG93aW5nIAorICAgZm9ybWF0OgorICAgZXRoMCAgIGV0aDEgIC4uLgorICAgd2hpY2ggaW5kaWNhdGVzIHRoYXQgeW91ciBhZGFwdGVyIGhhcyBiZWVuIGZvdW5kIGFuZCBpbml0aWFsaXplZC4KKyAgIAorICAgTk9URSAxOiBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIE1hcnZlbGwgWXVrb24gb3IgU3lzS29ubmVjdCBTSy05OHh4IAorICAgICAgICAgICBhZGFwdGVyIGluc3RhbGxlZCwgdGhlIGFkYXB0ZXJzIHdpbGwgYmUgbGlzdGVkIGFzICdldGgwJywgCisgICAgICAgICAgICAgICAgICAgJ2V0aDEnLCAnZXRoMicsIGV0Yy4KKyAgICAgICAgICAgICAgICAgICBGb3IgZWFjaCBhZGFwdGVyLCByZXBlYXQgc3RlcHMgMyBhbmQgNCBiZWxvdy4KKworICAgTk9URSAyOiBJZiB5b3UgaGF2ZSBvdGhlciBFdGhlcm5ldCBhZGFwdGVycyBpbnN0YWxsZWQsIHlvdXIgTWFydmVsbAorICAgICAgICAgICBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHggYWRhcHRlciB3aWxsIGJlIG1hcHBlZCB0byB0aGUgCisgICAgICAgICAgICAgICAgICAgbmV4dCBhdmFpbGFibGUgbnVtYmVyLCBlLmcuICdldGgxJy4gVGhlIG1hcHBpbmcgaXMgZXhlY3V0ZWQgCisgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgVGhlIG1vZHVsZSBpbnN0YWxsYXRpb24gbWVzc2FnZSAoZGlzcGxheWVkIGVpdGhlciBpbiBhIHN5c3RlbQorICAgICAgICAgICBsb2cgZmlsZSBvciBvbiB0aGUgY29uc29sZSkgcHJpbnRzIGEgbGluZSBmb3IgZWFjaCBhZGFwdGVyIAorICAgICAgICAgICBmb3VuZCBjb250YWluaW5nIHRoZSBjb3JyZXNwb25kaW5nICdldGhYJy4KKworMy4gU2VsZWN0IGFuIElQIGFkZHJlc3MgYW5kIGFzc2lnbiBpdCB0byB0aGUgcmVzcGVjdGl2ZSBhZGFwdGVyIGJ5IAorICAgZW50ZXJpbmc6CisgICBpZmNvbmZpZyBldGgwIDxpcC1hZGRyZXNzPgorICAgV2l0aCB0aGlzIGNvbW1hbmQsIHRoZSBhZGFwdGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgRXRoZXJuZXQuIAorICAgCisgICBTSy05OHh4IEdpZ2FiaXQgRXRoZXJuZXQgU2VydmVyIEFkYXB0ZXJzOiBUaGUgeWVsbG93IExFRCBvbiB0aGUgYWRhcHRlciAKKyAgIGlzIG5vdyBhY3RpdmUsIHRoZSBsaW5rIHN0YXR1cyBMRUQgb2YgdGhlIHByaW1hcnkgcG9ydCBpcyBhY3RpdmUgYW5kIAorICAgdGhlIGxpbmsgc3RhdHVzIExFRCBvZiB0aGUgc2Vjb25kYXJ5IHBvcnQgKG9uIGR1YWwgcG9ydCBhZGFwdGVycykgaXMgCisgICBibGlua2luZyAoaWYgdGhlIHBvcnRzIGFyZSBjb25uZWN0ZWQgdG8gYSBzd2l0Y2ggb3IgaHViKS4KKyAgIFNLLTk4eHggVjIuMCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXJzOiBUaGUgbGluayBzdGF0dXMgTEVEIGlzIGFjdGl2ZS4KKyAgIEluIGFkZGl0aW9uLCB5b3Ugd2lsbCByZWNlaXZlIGEgc3RhdHVzIG1lc3NhZ2Ugb24gdGhlIGNvbnNvbGUgc3RhdGluZworICAgImV0aFg6IG5ldHdvcmsgY29ubmVjdGlvbiB1cCB1c2luZyBwb3J0IFkiIGFuZCBzaG93aW5nIHRoZSBzZWxlY3RlZCAKKyAgIGNvbm5lY3Rpb24gcGFyYW1ldGVycyAoeCBzdGFuZHMgZm9yIHRoZSBldGhlcm5ldCBkZXZpY2UgbnVtYmVyIAorICAgKDAsMSwyLCBldGMpLCB5IHN0YW5kcyBmb3IgdGhlIHBvcnQgbmFtZSAoQSBvciBCKSkuCisKKyAgIE5PVEU6IElmIHlvdSBhcmUgaW4gZG91YnQgYWJvdXQgSVAgYWRkcmVzc2VzLCBhc2sgeW91ciBuZXR3b3JrCisgICAgICAgICBhZG1pbmlzdHJhdG9yIGZvciBhc3Npc3RhbmNlLgorICAKKzQuIFlvdXIgYWRhcHRlciBzaG91bGQgbm93IGJlIGZ1bGx5IG9wZXJhdGlvbmFsLgorICAgVXNlICdwaW5nIDxvdGhlcnN0YXRpb24+JyB0byB2ZXJpZnkgdGhlIGNvbm5lY3Rpb24gdG8gb3RoZXIgY29tcHV0ZXJzIAorICAgb24geW91ciBuZXR3b3JrLgorNS4gVG8gY2hlY2sgdGhlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiB2aWV3IC9wcm9jL25ldC9zazk4bGluL1tkZXZpY2VuYW1lXS4KKyAgIEZvciBleGFtcGxlIGJ5IGV4ZWN1dGluZzogICAgCisgICAiY2F0IC9wcm9jL25ldC9zazk4bGluL2V0aDAiIAorCitVbmxvYWQgdGhlIG1vZHVsZQorLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0b3AgYW5kIHVubG9hZCB0aGUgZHJpdmVyIG1vZHVsZXMsIHByb2NlZWQgYXMgZm9sbG93czoKKworMS4gRXhlY3V0ZSB0aGUgY29tbWFuZCAiaWZjb25maWcgZXRoMCBkb3duIi4KKzIuIEV4ZWN1dGUgdGhlIGNvbW1hbmQgInJtbW9kIHNrOThsaW4iLgorCiszLjIgIEluY2x1c2lvbiBvZiBhZGFwdGVyIGF0IHN5c3RlbSBzdGFydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2UgYSBsYXJnZSBudW1iZXIgb2YgZGlmZmVyZW50IExpbnV4IGRpc3RyaWJ1dGlvbnMgYXJlIAorYXZhaWxhYmxlLCB3ZSBhcmUgdW5hYmxlIHRvIGRlc2NyaWJlIGEgZ2VuZXJhbCBpbnN0YWxsYXRpb24gcHJvY2VkdXJlCitmb3IgdGhlIGRyaXZlciBtb2R1bGUuCitCZWNhdXNlIHRoZSBkcml2ZXIgaXMgbm93IGludGVncmF0ZWQgaW4gdGhlIGtlcm5lbCwgaW5zdGFsbGF0aW9uIHNob3VsZAorYmUgZWFzeSwgdXNpbmcgdGhlIHN0YW5kYXJkIG1lY2hhbmlzbSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4KK1JlZmVyIHRvIHRoZSBkaXN0cmlidXRpb24ncyBtYW51YWwgZm9yIGluc3RhbGxhdGlvbiBvZiBldGhlcm5ldCBhZGFwdGVycy4KKworKioqCisKKzQgIERyaXZlciBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitQYXJhbWV0ZXJzIGNhbiBiZSBzZXQgYXQgdGhlIGNvbW1hbmQgbGluZSBhZnRlciB0aGUgbW9kdWxlIGhhcyBiZWVuIAorbG9hZGVkIHdpdGggdGhlIGNvbW1hbmQgJ21vZHByb2JlJy4KK0luIHNvbWUgZGlzdHJpYnV0aW9ucywgdGhlIGNvbmZpZ3VyYXRpb24gdG9vbHMgYXJlIGFibGUgdG8gcGFzcyBwYXJhbWV0ZXJzCit0byB0aGUgZHJpdmVyIG1vZHVsZS4KKworSWYgeW91IHVzZSB0aGUga2VybmVsIG1vZHVsZSBsb2FkZXIsIHlvdSBjYW4gc2V0IGRyaXZlciBwYXJhbWV0ZXJzCitpbiB0aGUgZmlsZSAvZXRjL21vZHByb2JlLmNvbmYgKG9yIC9ldGMvbW9kdWxlcy5jb25mIGluIDIuNCBvciBlYXJsaWVyKS4KK1RvIHNldCB0aGUgZHJpdmVyIHBhcmFtZXRlcnMgaW4gdGhpcyBmaWxlLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIEluc2VydCBhIGxpbmUgb2YgdGhlIGZvcm0gOgorICAgb3B0aW9ucyBzazk4bGluIC4uLgorICAgRm9yICIuLi4iLCB0aGUgc2FtZSBzeW50YXggaXMgcmVxdWlyZWQgYXMgZGVzY3JpYmVkIGZvciB0aGUgY29tbWFuZAorICAgbGluZSBwYXJhbWF0ZXJzIG9mIG1vZHByb2JlIGJlbG93LgorMi4gVG8gYWN0aXZhdGUgdGhlIG5ldyBwYXJhbWV0ZXJzLCBlaXRoZXIgcmVib290IHlvdXIgY29tcHV0ZXIKKyAgIG9yIAorICAgdW5sb2FkIGFuZCByZWxvYWQgdGhlIGRyaXZlci4KKyAgIFRoZSBzeW50YXggb2YgdGhlIGRyaXZlciBwYXJhbWV0ZXJzIGlzOgorCisgICAgICAgIG1vZHByb2JlIHNrOThsaW4gcGFyYW1ldGVyPXZhbHVlMVssdmFsdWUyWyx2YWx1ZTMuLi5dXQorCisgICB3aGVyZSB2YWx1ZTEgcmVmZXJzIHRvIHRoZSBmaXJzdCBhZGFwdGVyLCB2YWx1ZTIgdG8gdGhlIHNlY29uZCBldGMuCisKK05PVEU6IEFsbCBwYXJhbWV0ZXJzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gV3JpdGUgdGhlbSBleGFjdGx5IGFzIHNob3duIAorICAgICAgYmVsb3cuCisKK0V4YW1wbGU6CitTdXBwb3NlIHlvdSBoYXZlIHR3byBhZGFwdGVycy4gWW91IHdhbnQgdG8gc2V0IGF1dG8tbmVnb3RpYXRpb24KK29uIHRoZSBmaXJzdCBhZGFwdGVyIHRvIE9OIGFuZCBvbiB0aGUgc2Vjb25kIGFkYXB0ZXIgdG8gT0ZGLgorWW91IGFsc28gd2FudCB0byBzZXQgRHVwbGV4Q2FwYWJpbGl0aWVzIG9uIHRoZSBmaXJzdCBhZGFwdGVyCit0byBGVUxMLCBhbmQgb24gdGhlIHNlY29uZCBhZGFwdGVyIHRvIEhBTEYuCitUaGVuLCB5b3UgbXVzdCBlbnRlcjoKKworICAgICAgICBtb2Rwcm9iZSBzazk4bGluIEF1dG9OZWdfQT1PbixPZmYgRHVwQ2FwX0E9RnVsbCxIYWxmCisKK05PVEU6IFRoZSBudW1iZXIgb2YgYWRhcHRlcnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB0aGlzIHdheSBpcworICAgICAgbGltaXRlZCBpbiB0aGUgZHJpdmVyIChmaWxlIHNrZ2UuYywgY29uc3RhbnQgU0tfTUFYX0NBUkRfUEFSQU0pLgorICAgICAgVGhlIGN1cnJlbnQgbGltaXQgaXMgMTYuIElmIHlvdSBoYXBwZW4gdG8gaW5zdGFsbAorICAgICAgbW9yZSBhZGFwdGVycywgYWRqdXN0IHRoaXMgYW5kIHJlY29tcGlsZS4KKworCis0LjEgIFBlci1Qb3J0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIGZvciBlYWNoIHBvcnQgb24gdGhlIGFkYXB0ZXIuCitJbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uLCAnPycgc3RhbmRzIGZvciB0aGUgcG9ydCBmb3IKK3doaWNoIHlvdSBzZXQgdGhlIHBhcmFtZXRlciAoQSBvciBCKS4KKworU3BlZWQKKy0tLS0tCitQYXJhbWV0ZXI6ICAgIFNwZWVkXz8KK1ZhbHVlczogICAgICAgMTAsIDEwMCwgMTAwMCwgQXV0bworRGVmYXVsdDogICAgICBBdXRvCisKK1RoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBzcGVlZCBjYXBhYmlsaXRpZXMuIEl0IGlzIG9ubHkgdmFsaWQgCitmb3IgdGhlIFNLLTk4eHggVjIuMCBjb3BwZXIgYWRhcHRlcnMuCitVc3VhbGx5LCB0aGUgc3BlZWQgaXMgbmVnb3RpYXRlZCBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgZHVyaW5nIGxpbmsgCitlc3RhYmxpc2htZW50LiBJZiB0aGlzIGZhaWxzLCBhIHBvcnQgY2FuIGJlIGZvcmNlZCB0byBhIHNwZWNpZmljIHNldHRpbmcKK3dpdGggdGhpcyBwYXJhbWV0ZXIuCisKK0F1dG8tTmVnb3RpYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgQXV0b05lZ18/CitWYWx1ZXM6ICAgICAgIE9uLCBPZmYsIFNlbnNlCitEZWZhdWx0OiAgICAgIE9uCisgIAorVGhlICJTZW5zZSItbW9kZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciB0aGUgbGluayBwYXJ0bmVyIHN1cHBvcnRzCithdXRvLW5lZ290aWF0aW9uIG9yIG5vdC4KKworRHVwbGV4IENhcGFiaWxpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBEdXBDYXBfPworVmFsdWVzOiAgICAgICBIYWxmLCBGdWxsLCBCb3RoCitEZWZhdWx0OiAgICAgIEJvdGgKKworVGhpcyBwYXJhbWV0ZXJzIGlzIG9ubHkgcmVsZXZhbnQgaWYgYXV0by1uZWdvdGlhdGlvbiBmb3IgdGhpcyBwb3J0IGlzIAorbm90IHNldCB0byAiU2Vuc2UiLiBJZiBhdXRvLW5lZ290aWF0aW9uIGlzIHNldCB0byAiT24iLCBhbGwgdGhyZWUgdmFsdWVzCithcmUgcG9zc2libGUuIElmIGl0IGlzIHNldCB0byAiT2ZmIiwgb25seSAiRnVsbCIgYW5kICJIYWxmIiBhcmUgYWxsb3dlZC4KK1RoaXMgcGFyYW1ldGVyIGlzIHVzZWZ1bGwgaWYgeW91ciBsaW5rIHBhcnRuZXIgZG9lcyBub3Qgc3VwcG9ydCBhbGwKK3Bvc3NpYmxlIGNvbWJpbmF0aW9ucy4KKworRmxvdyBDb250cm9sCistLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgRmxvd0N0cmxfPworVmFsdWVzOiAgICAgICBTeW0sIFN5bU9yUmVtLCBMb2NTZW5kLCBOb25lCitEZWZhdWx0OiAgICAgIFN5bU9yUmVtCisKK1RoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZmxvdyBjb250cm9sIGNhcGFiaWxpdGllcyB0aGUgCitwb3J0IHJlcG9ydHMgZHVyaW5nIGF1dG8tbmVnb3RpYXRpb24uIEl0IGNhbiBiZSBzZXQgZm9yIGVhY2ggcG9ydCAKK2luZGl2aWR1YWxseS4KK1Bvc3NpYmxlIG1vZGVzOgorICAgLS0gU3ltICAgICAgPSBTeW1tZXRyaWM6IGJvdGggbGluayBwYXJ0bmVycyBhcmUgYWxsb3dlZCB0byBzZW5kIAorICAgICAgICAgICAgICAgICAgUEFVU0UgZnJhbWVzCisgICAtLSBTeW1PclJlbSA9IFN5bW1ldHJpY09yUmVtb3RlOiBib3RoIG9yIG9ubHkgcmVtb3RlIHBhcnRuZXIgCisgICAgICAgICAgICAgICAgICBhcmUgYWxsb3dlZCB0byBzZW5kIFBBVVNFIGZyYW1lcworICAgLS0gTG9jU2VuZCAgPSBMb2NhbFNlbmQ6IG9ubHkgbG9jYWwgbGluayBwYXJ0bmVyIGlzIGFsbG93ZWQgCisgICAgICAgICAgICAgICAgICB0byBzZW5kIFBBVVNFIGZyYW1lcworICAgLS0gTm9uZSAgICAgPSBubyBsaW5rIHBhcnRuZXIgaXMgYWxsb3dlZCB0byBzZW5kIFBBVVNFIGZyYW1lcworICAKK05PVEU6IFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgYXV0by1uZWdvdGlhdGlvbiBpcyBzZXQgdG8gIk9mZiIuCisKK1JvbGUgaW4gTWFzdGVyLVNsYXZlLU5lZ290aWF0aW9uICgxMDAwQmFzZS1UIG9ubHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBSb2xlXz8KK1ZhbHVlczogICAgICAgQXV0bywgTWFzdGVyLCBTbGF2ZQorRGVmYXVsdDogICAgICBBdXRvCisKK1RoaXMgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBTSy05ODIxIGFuZCBTSy05ODIyIGFkYXB0ZXJzLgorRm9yIHR3byAxMDAwQmFzZS1UIHBvcnRzIHRvIGNvbW11bmljYXRlLCBvbmUgbXVzdCB0YWtlIHRoZSByb2xlIG9mIHRoZQorbWFzdGVyIChwcm92aWRpbmcgdGltaW5nIGluZm9ybWF0aW9uKSwgd2hpbGUgdGhlIG90aGVyIG11c3QgYmUgdGhlIAorc2xhdmUuIFVzdWFsbHksIHRoaXMgaXMgbmVnb3RpYXRlZCBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgZHVyaW5nIGxpbmsgCitlc3RhYmxpc2htZW50LiBJZiB0aGlzIGZhaWxzLCBhIHBvcnQgY2FuIGJlIGZvcmNlZCB0byBhIHNwZWNpZmljIHNldHRpbmcKK3dpdGggdGhpcyBwYXJhbWV0ZXIuCisKKworNC4yICBBZGFwdGVyIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nvbm5lY3Rpb24gVHlwZSAoU0stOTh4eCBWMi4wIGNvcHBlciBhZGFwdGVycyBvbmx5KQorLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIENvblR5cGUKK1ZhbHVlczogICAgICAgQXV0bywgMTAwRkQsIDEwMEhELCAxMEZELCAxMEhECitEZWZhdWx0OiAgICAgIEF1dG8KKworVGhlIHBhcmFtZXRlciAnQ29uVHlwZScgaXMgYSBjb21iaW5hdGlvbiBvZiBhbGwgZml2ZSBwZXItcG9ydCBwYXJhbWV0ZXJzCit3aXRoaW4gb25lIHNpbmdsZSBwYXJhbWV0ZXIuIFRoaXMgc2ltcGxpZmllcyB0aGUgY29uZmlndXJhdGlvbiBvZiBib3RoIHBvcnRzCitvZiBhbiBhZGFwdGVyIGNhcmQhIFRoZSBkaWZmZXJlbnQgdmFsdWVzIG9mIHRoaXMgdmFyaWFibGUgcmVmbGVjdCB0aGUgbW9zdCAKK21lYW5pbmdmdWwgY29tYmluYXRpb25zIG9mIHBvcnQgcGFyYW1ldGVycy4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgdmFsdWVzIG9mICdDb25UeXBlJyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKK2NvbWJpbmF0aW9ucyBvZiB0aGUgcGVyLXBvcnQgcGFyYW1ldGVyczoKKworICAgIENvblR5cGUgICB8ICBEdXBDYXAgICBBdXRvTmVnICAgRmxvd0N0cmwgICBSb2xlICAgICAgICAgICAgIFNwZWVkCisgICAgLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBdXRvICAgICAgfCAgQm90aCAgICAgT24gICAgICAgIFN5bU9yUmVtICAgQXV0byAgICAgICAgICAgICBBdXRvCisgICAgMTAwRkQgICAgIHwgIEZ1bGwgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAwCisgICAgMTAwSEQgICAgIHwgIEhhbGYgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAwCisgICAgMTBGRCAgICAgIHwgIEZ1bGwgICAgIE9mZiAgICAgICBOb25lICAgICAgIEF1dG8gKGlnbm9yZWQpICAgMTAKKyAgICAxMEhEICAgICAgfCAgSGFsZiAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMAorCitTdGF0aW5nIGFueSBvdGhlciBwb3J0IHBhcmFtZXRlciB0b2dldGhlciB3aXRoIHRoaXMgJ0NvblR5cGUnIHZhcmlhYmxlCit3aWxsIHJlc3VsdCBpbiBhIG1lcmdlZCBjb25maWd1cmF0aW9uIG9mIHRob3NlIHNldHRpbmdzLiBUaGlzIGR1ZSB0byAKK3RoZSBmYWN0LCB0aGF0IHRoZSBwZXItcG9ydCBwYXJhbWV0ZXJzIChlLmcuIFNwZWVkXz8gKSBoYXZlIGEgaGlnaGVyCitwcmlvcml0eSB0aGFuIHRoZSBjb21iaW5lZCB2YXJpYWJsZSAnQ29uVHlwZScuCisKK05PVEU6IFRoaXMgcGFyYW1ldGVyIGlzIGFsd2F5cyB1c2VkIG9uIGJvdGggcG9ydHMgb2YgdGhlIGFkYXB0ZXIgY2FyZC4KKworSW50ZXJydXB0IE1vZGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIE1vZGVyYXRpb24KK1ZhbHVlczogICAgICAgTm9uZSwgU3RhdGljLCBEeW5hbWljCitEZWZhdWx0OiAgICAgIE5vbmUKKworSW50ZXJydXB0IG1vZGVyYXRpb24gaXMgZW1wbG95ZWQgdG8gbGltaXQgdGhlIG1heG1pbXVtIG51bWJlciBvZiBpbnRlcnJ1cHRzCit0aGUgZHJpdmVyIGhhcyB0byBzZXJ2ZS4gVGhhdCBpcywgb25lIG9yIG1vcmUgaW50ZXJydXB0cyAod2hpY2ggaW5kaWNhdGUgYW55Cit0cmFuc21pdCBvciByZWNlaXZlIHBhY2tldCB0byBiZSBwcm9jZXNzZWQpIGFyZSBxdWV1ZWQgdW50aWwgdGhlIGRyaXZlciAKK3Byb2Nlc3NlcyB0aGVtLiBXaGVuIHF1ZXVlZCBpbnRlcnJ1cHRzIGFyZSB0byBiZSBzZXJ2ZWQsIGlzIGRldGVybWluZWQgYnkgdGhlCisnSW50c1BlclNlYycgcGFyYW1ldGVyLCB3aGljaCBpcyBleHBsYWluZWQgbGF0ZXIgYmVsb3cuCisKK1Bvc3NpYmxlIG1vZGVzOgorCisgICAtLSBOb25lIC0gTm8gaW50ZXJydXB0IG1vZGVyYXRpb24gaXMgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLiAKKyAgICAgIFRoZXJlZm9yZSwgZWFjaCB0cmFuc21pdCBvciByZWNlaXZlIGludGVycnVwdCBpcyBzZXJ2ZWQgaW1tZWRpYXRlbHkKKyAgICAgIGFzIHNvb24gYXMgaXQgYXBwZWFycyBvbiB0aGUgaW50ZXJydXB0IGxpbmUgb2YgdGhlIGFkYXB0ZXIgY2FyZC4KKworICAgLS0gU3RhdGljIC0gSW50ZXJydXB0IG1vZGVyYXRpb24gaXMgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLiAKKyAgICAgIEFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpbnRlcnJ1cHRzIGFyZSBxdWV1ZWQgdW50aWwgYSBjb21wbGV0ZQorICAgICAgbW9kZXJhdGlvbiBpbnRlcnZhbCBlbmRzLiBJZiBzdWNoIGEgbW9kZXJhdGlvbiBpbnRlcnZhbCBlbmRzLCBhbGwKKyAgICAgIHF1ZXVlZCBpbnRlcnJ1cHRzIGFyZSBwcm9jZXNzZWQgaW4gb25lIGJpZyBidW5jaCB3aXRob3V0IGFueSBkZWxheS4KKyAgICAgIFRoZSB0ZXJtICdzdGF0aWMnIHJlZmxlY3RzIHRoZSBmYWN0LCB0aGF0IGludGVycnVwdCBtb2RlcmF0aW9uIGlzCisgICAgICBhbHdheXMgZW5hYmxlZCwgcmVnYXJkbGVzcyBob3cgbXVjaCBuZXR3b3JrIGxvYWQgaXMgY3VycmVudGx5IAorICAgICAgcGFzc2luZyB2aWEgYSBwYXJ0aWN1bGFyIGludGVyZmFjZS4gSW4gYWRkaXRpb24sIHRoZSBkdXJhdGlvbiBvZgorICAgICAgdGhlIG1vZGVyYXRpb24gaW50ZXJ2YWwgaGFzIGEgZml4ZWQgbGVuZ3RoIHRoYXQgbmV2ZXIgY2hhbmdlcyB3aGlsZQorICAgICAgdGhlIGRyaXZlciBpcyBvcGVyYXRpb25hbC4KKworICAgLS0gRHluYW1pYyAtIEludGVycnVwdCBtb2RlcmF0aW9uIG1pZ2h0IGJlIGFwcGxpZWQgb24gdGhlIGFkYXB0ZXIgY2FyZCwKKyAgICAgIGRlcGVuZGluZyBvbiB0aGUgbG9hZCBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgZHJpdmVyIGRldGVjdHMgdGhhdCB0aGUKKyAgICAgIHN5c3RlbSBsb2FkIGlzIHRvbyBoaWdoLCB0aGUgZHJpdmVyIHRyaWVzIHRvIHNoaWVsZCB0aGUgc3lzdGVtIGFnYWluc3QgCisgICAgICB0b28gbXVjaCBuZXR3b3JrIGxvYWQgYnkgZW5hYmxpbmcgaW50ZXJydXB0IG1vZGVyYXRpb24uIElmIC0gYXQgYSBsYXRlcgorICAgICAgdGltZSAtIHRoZSBDUFUgdXRpbGl6YXRvbiBkZWNyZWFzZXMgYWdhaW4gKG9yIGlmIHRoZSBuZXR3b3JrIGxvYWQgaXMgCisgICAgICBuZWdsaWdpYmxlKSB0aGUgaW50ZXJydXB0IG1vZGVyYXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLgorCitJbnRlcnJ1cHQgbW9kZXJhdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBkcml2ZXIgaGFzIHRvIGhhbmRsZSBvbmUgb3IgbW9yZQoraW50ZXJmYWNlcyB3aXRoIGEgaGlnaCBuZXR3b3JrIGxvYWQsIHdoaWNoIC0gYXMgYSBjb25zZXF1ZW5jZSAtIGxlYWRzIGFsc28gdG8gYQoraGlnaCBDUFUgdXRpbGl6YXRpb24uIFdoZW4gbW9kZXJhdGlvbiBpcyBhcHBsaWVkIGluIHN1Y2ggaGlnaCBuZXR3b3JrIGxvYWQgCitzaXR1YXRpb25zLCBDUFUgbG9hZCBtaWdodCBiZSByZWR1Y2VkIGJ5IDIwLTMwJS4KKworTk9URTogVGhlIGRyYXdiYWNrIG9mIHVzaW5nIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIGFuIGluY3JlYXNlIG9mIHRoZSByb3VuZC0KK3RyaXAtdGltZSAoUlRUKSwgZHVlIHRvIHRoZSBxdWV1ZWluZyBhbmQgc2VydmluZyBvZiBpbnRlcnJ1cHRzIGF0IGRlZGljYXRlZAorbW9kZXJhdGlvbiB0aW1lcy4KKworSW50ZXJydXB0cyBwZXIgc2Vjb25kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgSW50c1BlclNlYworVmFsdWVzOiAgICAgICAzMC4uLjQwMDAwIChpbnRlcnJ1cHRzIHBlciBzZWNvbmQpCitEZWZhdWx0OiAgICAgIDIwMDAKKworVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB1c2VkLCBpZiBlaXRoZXIgc3RhdGljIG9yIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24KK2lzIHVzZWQgb24gYSBuZXR3b3JrIGFkYXB0ZXIgY2FyZC4gVXNpbmcgdGhpcyBwYXJhbXRlciBpZiBubyBtb2RlcmF0aW9uIGlzCithcHBsaWVkLCB3aWxsIGxlYWQgdG8gbm8gYWN0aW9uIHBlcmZvcm1lZC4KKworVGhpcyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIGFueSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpbnRlcnZhbC4gCitBc3N1bWluZyB0aGF0IHN0YXRpYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyB0byBiZSB1c2VkLCBhbiAnSW50c1BlclNlYycgCitwYXJhbWV0ZXIgdmFsdWUgb2YgMjAwMCB3aWxsIGxlYWQgdG8gYW4gaW50ZXJydXB0IG1vZGVyYXRpb24gaW50ZXJ2YWwgb2YKKzUwMCBtaWNyb3NlY29uZHMuIAorCitOT1RFOiBUaGUgZHVyYXRpb24gb2YgdGhlIG1vZGVyYXRpb24gaW50ZXJ2YWwgaXMgdG8gYmUgY2hvc2VuIHdpdGggY2FyZS4KK0F0IGZpcnN0IGdsYW5jZSwgc2VsZWN0aW5nIGEgdmVyeSBsb25nIGR1cmF0aW9uIChlLmcuIG9ubHkgMTAwIGludGVycnVwdHMgcGVyIAorc2Vjb25kKSBzZWVtcyB0byBiZSBtZWFuaW5nZnVsLCBidXQgdGhlIGluY3JlYXNlIG9mIHBhY2tldC1wcm9jZXNzaW5nIGRlbGF5IAoraXMgdHJlbWVuZG91cy4gT24gdGhlIG90aGVyIGhhbmQsIHNlbGVjdGluZyBhIHZlcnkgc2hvcnQgbW9kZXJhdGlvbiB0aW1lIG1pZ2h0Citjb21wZW5zYXRlIHRoZSB1c2Ugb2YgYW55IG1vZGVyYXRpb24gYmVpbmcgYXBwbGllZC4KKworCitQcmVmZXJyZWQgUG9ydAorLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgUHJlZlBvcnQKK1ZhbHVlczogICAgICAgQSwgQgorRGVmYXVsdDogICAgICBBCisKK1RoaXMgaXMgdXNlZCB0byBmb3JjZSB0aGUgcHJlZmVycmVkIHBvcnQgdG8gQSBvciBCIChvbiBkdWFsLXBvcnQgbmV0d29yayAKK2FkYXB0ZXJzKS4gVGhlIHByZWZlcnJlZCBwb3J0IGlzIHRoZSBvbmUgdGhhdCBpcyB1c2VkIGlmIGJvdGggYXJlIGRldGVjdGVkCithcyBmdWxseSBmdW5jdGlvbmFsLgorCitSTE1UIE1vZGUgKFJlZHVuZGFudCBMaW5rIE1hbmFnZW1lbnQgVGVjaG5vbG9neSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBSbG10TW9kZQorVmFsdWVzOiAgICAgICBDaGVja0xpbmtTdGF0ZSxDaGVja0xvY2FsUG9ydCwgQ2hlY2tTZWcsIER1YWxOZXQKK0RlZmF1bHQ6ICAgICAgQ2hlY2tMaW5rU3RhdGUKKworUkxNVCBtb25pdG9ycyB0aGUgc3RhdHVzIG9mIHRoZSBwb3J0LiBJZiB0aGUgbGluayBvZiB0aGUgYWN0aXZlIHBvcnQgCitmYWlscywgUkxNVCBzd2l0Y2hlcyBpbW1lZGlhdGVseSB0byB0aGUgc3RhbmRieSBsaW5rLiBUaGUgdmlydHVhbCBsaW5rIGlzIAorbWFpbnRhaW5lZCBhcyBsb25nIGFzIGF0IGxlYXN0IG9uZSAncGh5c2ljYWwnIGxpbmsgaXMgdXAuIAorCitQb3NzaWJsZSBtb2RlczoKKworICAgLS0gQ2hlY2tMaW5rU3RhdGUgLSBDaGVjayBsaW5rIHN0YXRlIG9ubHk6IFJMTVQgdXNlcyB0aGUgbGluayBzdGF0ZQorICAgICAgcmVwb3J0ZWQgYnkgdGhlIGFkYXB0ZXIgaGFyZHdhcmUgZm9yIGVhY2ggaW5kaXZpZHVhbCBwb3J0IHRvIAorICAgICAgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwb3J0IGNhbiBiZSB1c2VkIGZvciBhbGwgbmV0d29yayB0cmFmZmljIG9yIAorICAgICAgbm90LgorCisgICAtLSBDaGVja0xvY2FsUG9ydCAtIEluIHRoaXMgbW9kZSwgUkxNVCBtb25pdG9ycyB0aGUgbmV0d29yayBwYXRoIAorICAgICAgYmV0d2VlbiB0aGUgdHdvIHBvcnRzIG9mIGFuIGFkYXB0ZXIgYnkgcmVndWxhcmx5IGV4Y2hhbmdpbmcgcGFja2V0cworICAgICAgYmV0d2VlbiB0aGVtLiBUaGlzIG1vZGUgcmVxdWlyZXMgYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaW4gd2hpY2ggCisgICAgICB0aGUgdHdvIHBvcnRzIGFyZSBhYmxlIHRvICJzZWUiIGVhY2ggb3RoZXIgKGkuZS4gdGhlcmUgbXVzdCBub3QgYmUgCisgICAgICBhbnkgcm91dGVyIGJldHdlZW4gdGhlIHBvcnRzKS4KKworICAgLS0gQ2hlY2tTZWcgLSBDaGVjayBsb2NhbCBwb3J0IGFuZCBzZWdtZW50YXRpb246IFRoaXMgbW9kZSBzdXBwb3J0cyB0aGUKKyAgICAgIHNhbWUgZnVuY3Rpb25zIGFzIHRoZSBDaGVja0xvY2FsUG9ydCBtb2RlIGFuZCBhZGRpdGlvbmFsbHkgY2hlY2tzIAorICAgICAgbmV0d29yayBzZWdtZW50YXRpb24gYmV0d2VlbiB0aGUgcG9ydHMuIFRoZXJlZm9yZSwgdGhpcyBtb2RlIGlzIG9ubHkKKyAgICAgIHRvIGJlIHVzZWQgaWYgR2lnYWJpdCBFdGhlcm5ldCBzd2l0Y2hlcyBhcmUgaW5zdGFsbGVkIG9uIHRoZSBuZXR3b3JrCisgICAgICB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIHVzZSB0aGUgU3Bhbm5pbmcgVHJlZSBwcm90b2NvbC4gCisKKyAgIC0tIER1YWxOZXQgLSBJbiB0aGlzIG1vZGUsIHBvcnRzIEEgYW5kIEIgYXJlIHVzZWQgYXMgc2VwYXJhdGUgZGV2aWNlcy4gCisgICAgICBJZiB5b3UgaGF2ZSBhIGR1YWwgcG9ydCBhZGFwdGVyLCBwb3J0IEEgd2lsbCBiZSBjb25maWd1cmVkIGFzIGV0aDAgCisgICAgICBhbmQgcG9ydCBCIGFzIGV0aDEuIEJvdGggcG9ydHMgY2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseSB3aXRoIAorICAgICAgZGlzdGluY3QgSVAgYWRkcmVzc2VzLiBUaGUgcHJlZmVycmVkIHBvcnQgc2V0dGluZyBpcyBub3QgdXNlZC4gCisgICAgICBSTE1UIGlzIHR1cm5lZCBvZmYuCisgICAKK05PVEU6IFJMTVQgbW9kZXMgQ0xQIGFuZCBDTFBTUyBhcmUgZGVzaWduZWQgdG8gb3BlcmF0ZSBpbiBjb25maWd1cmF0aW9ucyAKKyAgICAgIHdoZXJlIGEgbmV0d29yayBwYXRoIGJldHdlZW4gdGhlIHBvcnRzIG9uIG9uZSBhZGFwdGVyIGV4aXN0cy4gCisgICAgICBNb3Jlb3ZlciwgdGhleSBhcmUgbm90IGRlc2lnbmVkIHRvIHdvcmsgd2hlcmUgYWRhcHRlcnMgYXJlIGNvbm5lY3RlZAorICAgICAgYmFjay10by1iYWNrLgorKioqCisKKworNSAgTGFyZ2UgRnJhbWUgU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGxhcmdlIGZyYW1lcyAoYWxzbyBjYWxsZWQganVtYm8gZnJhbWVzKS4gVXNpbmcgbGFyZ2UgCitmcmFtZXMgY2FuIHJlc3VsdCBpbiBhbiBpbXByb3ZlZCB0aHJvdWdocHV0IGlmIHRyYW5zZmVycmluZyBsYXJnZSBhbW91bnRzIAorb2YgZGF0YS4KK1RvIGVuYWJsZSBsYXJnZSBmcmFtZXMsIHNldCB0aGUgTVRVIChtYXhpbXVtIHRyYW5zZmVyIHVuaXQpIG9mIHRoZSAKK2ludGVyZmFjZSB0byB0aGUgZGVzaXJlZCB2YWx1ZSAodXAgdG8gOTAwMCksIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyAKK2NvbW1hbmQ6CisgICAgICBpZmNvbmZpZyBldGgwIG10dSA5MDAwCitUaGlzIHdpbGwgb25seSB3b3JrIGlmIHlvdSBoYXZlIHR3byBhZGFwdGVycyBjb25uZWN0ZWQgYmFjay10by1iYWNrCitvciBpZiB5b3UgdXNlIGEgc3dpdGNoIHRoYXQgc3VwcG9ydHMgbGFyZ2UgZnJhbWVzLiBXaGVuIHVzaW5nIGEgc3dpdGNoLCAKK2l0IHNob3VsZCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGxhcmdlIGZyYW1lcyBhbmQgYXV0by1uZWdvdGlhdGlvbiBzaG91bGQgIAorYmUgc2V0IHRvIE9GRi4gVGhlIHNldHRpbmcgbXVzdCBiZSBjb25maWd1cmVkIG9uIGFsbCBhZGFwdGVycyB0aGF0IGNhbiBiZSAKK3JlYWNoZWQgYnkgdGhlIGxhcmdlIGZyYW1lcy4gSWYgb25lIGFkYXB0ZXIgaXMgbm90IHNldCB0byByZWNlaXZlIGxhcmdlIAorZnJhbWVzLCBpdCB3aWxsIHNpbXBseSBkcm9wIHRoZW0uCisKK1lvdSBjYW4gc3dpdGNoIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGV0aGVybmV0IGZyYW1lIHNpemUgYnkgZXhlY3V0aW5nIHRoZSAKK2ZvbGxvd2luZyBjb21tYW5kOgorICAgICAgaWZjb25maWcgZXRoMCBtdHUgMTUwMAorCitUbyBwZXJtYW5lbnRseSBjb25maWd1cmUgdGhpcyBzZXR0aW5nLCBhZGQgYSBzY3JpcHQgd2l0aCB0aGUgJ2lmY29uZmlnJyAKK2xpbmUgdG8gdGhlIHN5c3RlbSBzdGFydHVwIHNlcXVlbmNlIChuYW1lZCBzb21ldGhpbmcgbGlrZSAiUzk5c2s5OGxpbiIgCitpbiAvZXRjL3JjLmQvcmMyLmQpLgorKioqCisKKworNiAgVkxBTiBhbmQgTGluayBBZ2dyZWdhdGlvbiBTdXBwb3J0IChJRUVFIDgwMi4xLCA4MDIuMXEsIDgwMi4zYWQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIE1hcnZlbGwgWXVrb24vU3lzS29ubmVjdCBMaW51eCBkcml2ZXJzIGFyZSBhYmxlIHRvIHN1cHBvcnQgVkxBTiBhbmQgCitMaW5rIEFnZ3JlZ2F0aW9uIGFjY29yZGluZyB0byBJRUVFIHN0YW5kYXJkcyA4MDIuMSwgODAyLjFxLCBhbmQgODAyLjNhZC4gCitUaGVzZSBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIG9wZW4gc291cmNlIAorbW9kdWxlcyBhdmFpbGFibGUgb24gdGhlIEludGVybmV0OgorRm9yIFZMQU4gZ28gdG86IGh0dHA6Ly93d3cuY2FuZGVsYXRlY2guY29tL35ncmVlYXIvdmxhbi5odG1sCitGb3IgTGluayBBZ2dyZWdhdGlvbiBnbyB0bzogaHR0cDovL3d3dy5zdC5yaW0ub3IuanAvfnl1bW8KKworTk9URTogU3lzS29ubmVjdCBHbWJIIGRvZXMgbm90IG9mZmVyIGFueSBzdXBwb3J0IGZvciB0aGVzZSBvcGVuIHNvdXJjZSAKKyAgICAgIG1vZHVsZXMgYW5kIGRvZXMgbm90IHRha2UgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBhbnkga2luZCBvZiAKKyAgICAgIGZhaWx1cmVzIG9yIHByb2JsZW1zIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB3aXRoIHRoZXNlIG1vZHVsZXMuCisKK05PVEU6IENvbmZpZ3VyaW5nIExpbmsgQWdncmVnYXRpb24gb24gYSBTeXNLb25uZWN0IGR1YWwgbGluayBhZGFwdGVyIG1heSAKKyAgICAgIGNhdXNlIHByb2JsZW1zIHdoZW4gdW5sb2FkaW5nIHRoZSBkcml2ZXIuCisKKworNyAgVHJvdWJsZXNob290aW5nCis9PT09PT09PT09PT09PT09PT0KKworSWYgYW55IHByb2JsZW1zIG9jY3VyIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MsIGNoZWNrIHRoZSAKK2ZvbGxvd2luZyBsaXN0OgorCisKK1Byb2JsZW06ICBUaGUgU0stOTh4eCBhZGFwdGVyIGNhbiBub3QgYmUgZm91bmQgYnkgdGhlIGRyaXZlci4KK1NvbHV0aW9uOiBJbiAvcHJvYy9wY2kgc2VhcmNoIGZvciB0aGUgZm9sbG93aW5nIGVudHJ5OgorICAgICAgICAgICAgICdFdGhlcm5ldCBjb250cm9sbGVyOiBTeXNLb25uZWN0IFNLLTk4eHggLi4uJworICAgICAgICAgIElmIHRoaXMgZW50cnkgZXhpc3RzLCB0aGUgU0stOTh4eCBvciBTSy05OHh4IFYyLjAgYWRhcHRlciBoYXMgCisgICAgICAgICAgYmVlbiBmb3VuZCBieSB0aGUgc3lzdGVtIGFuZCBzaG91bGQgYmUgb3BlcmF0aW9uYWwuCisgICAgICAgICAgSWYgdGhpcyBlbnRyeSBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGUgZmlsZSAnL3Byb2MvcGNpJyBpcyBub3QgCisgICAgICAgICAgZm91bmQsIHRoZXJlIG1heSBiZSBhIGhhcmR3YXJlIHByb2JsZW0gb3IgdGhlIFBDSSBzdXBwb3J0IG1heSAKKyAgICAgICAgICBub3QgYmUgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4KKyAgICAgICAgICBUaGUgYWRhcHRlciBjYW4gYmUgY2hlY2tlZCB1c2luZyB0aGUgZGlhZ25vc3RpY3MgcHJvZ3JhbSB3aGljaCAKKyAgICAgICAgICBpcyBhdmFpbGFibGUgb24gdGhlIFN5c0tvbm5lY3Qgd2ViIHNpdGU6CisgICAgICAgICAgd3d3LnN5c2tvbm5lY3QuY29tCisgICAgICAgICAgCisgICAgICAgICAgU29tZSBDT01QQVEgbWFjaGluZXMgaGF2ZSBwcm9ibGVtcyBkZWFsaW5nIHdpdGggUENJIHVuZGVyIExpbnV4LgorICAgICAgICAgIExpbnV4LiBUaGlzIHByb2JsZW0gaXMgZGVzY3JpYmVkIGluIHRoZSAnUENJIGhvd3RvJyBkb2N1bWVudAorICAgICAgICAgIChpbmNsdWRlZCBpbiBzb21lIGRpc3RyaWJ1dGlvbnMgb3IgYXZhaWxhYmxlIGZyb20gdGhlCisgICAgICAgICAgd2ViLCBlLmcuIGF0ICd3d3cubGludXgub3JnJykuIAorCisKK1Byb2JsZW06ICBQcm9ncmFtcyBzdWNoIGFzICdpZmNvbmZpZycgb3IgJ3JvdXRlJyBjYW4gbm90IGJlIGZvdW5kIG9yIHRoZSAKKyAgICAgICAgICBlcnJvciBtZXNzYWdlICdPcGVyYXRpb24gbm90IHBlcm1pdHRlZCcgaXMgZGlzcGxheWVkLgorUmVhc29uOiAgIFlvdSBhcmUgbm90IGxvZ2dlZCBpbiBhcyB1c2VyICdyb290Jy4KK1NvbHV0aW9uOiBMb2dvdXQgYW5kIGxvZ2luIGFzICdyb290JyBvciBjaGFuZ2UgdG8gJ3Jvb3QnIHZpYSAnc3UnLgorCisKK1Byb2JsZW06ICBVcG9uIHVzZSBvZiB0aGUgY29tbWFuZCAncGluZyA8YWRkcmVzcz4nIHRoZSBtZXNzYWdlCisgICAgICAgICAgInBpbmc6IHNlbmR0bzogTmV0d29yayBpcyB1bnJlYWNoYWJsZSIgaXMgZGlzcGxheWVkLgorUmVhc29uOiAgIFlvdXIgcm91dGUgaXMgbm90IHNldCBjb3JyZWN0bHkuCitTb2x1dGlvbjogSWYgeW91IGFyZSB1c2luZyBSZWRIYXQsIHlvdSBwcm9iYWJseSBmb3Jnb3QgdG8gc2V0IHVwIHRoZSAKKyAgICAgICAgICByb3V0ZSBpbiB0aGUgJ25ldHdvcmsgY29uZmlndXJhdGlvbicuCisgICAgICAgICAgQ2hlY2sgdGhlIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZSAncm91dGUnIGNvbW1hbmQgYW5kIGNoZWNrIAorICAgICAgICAgIGlmIGFuIGVudHJ5IGZvciAnZXRoMCcgZXhpc3RzLCBhbmQgaWYgc28sIGlmIGl0IGlzIHNldCBjb3JyZWN0bHkuCisKKworUHJvYmxlbTogIFRoZSBkcml2ZXIgY2FuIGJlIHN0YXJ0ZWQsIHRoZSBhZGFwdGVyIGlzIGNvbm5lY3RlZCB0byB0aGUgCisgICAgICAgICAgbmV0d29yaywgYnV0IHlvdSBjYW5ub3QgcmVjZWl2ZSBvciB0cmFuc21pdCBhbnkgcGFja2V0czsgCisgICAgICAgICAgZS5nLiAncGluZycgZG9lcyBub3Qgd29yay4KK1JlYXNvbjogICBUaGVyZSBpcyBhbiBpbmNvcnJlY3Qgcm91dGUgaW4geW91ciByb3V0aW5nIHRhYmxlLgorU29sdXRpb246IENoZWNrIHRoZSByb3V0aW5nIHRhYmxlIHdpdGggdGhlIGNvbW1hbmQgJ3JvdXRlJyBhbmQgcmVhZCB0aGUgCisgICAgICAgICAgbWFudWFsIGhlbHAgcGFnZXMgZGVhbGluZyB3aXRoIHJvdXRlcyAoZW50ZXIgJ21hbiByb3V0ZScpLgorCitOT1RFOiBBbHRob3VnaCB0aGUgMi4yLngga2VybmVsIHZlcnNpb25zIGdlbmVyYXRlIHRoZSByb3V0aW5nIGVudHJ5IAorICAgICAgYXV0b21hdGljYWxseSwgcHJvYmxlbXMgb2YgdGhpcyBraW5kIG1heSBvY2N1ciBoZXJlIGFzIHdlbGwuIFdlJ3ZlIAorICAgICAgY29tZSBhY3Jvc3MgYSBzaXR1YXRpb24gaW4gd2hpY2ggdGhlIGRyaXZlciBzdGFydGVkIGNvcnJlY3RseSBhdCAKKyAgICAgIHN5c3RlbSBzdGFydCwgYnV0IGFmdGVyIHRoZSBkcml2ZXIgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgcmVsb2FkZWQsCisgICAgICB0aGUgcm91dGUgb2YgdGhlIGFkYXB0ZXIncyBuZXR3b3JrIHBvaW50ZWQgdG8gdGhlICdkdW1teTAnZGV2aWNlIAorICAgICAgYW5kIGhhZCB0byBiZSBjb3JyZWN0ZWQgbWFudWFsbHkuCisKKworUHJvYmxlbTogIFlvdXIgY29tcHV0ZXIgc2hvdWxkIGFjdCBhcyBhIHJvdXRlciBiZXR3ZWVuIG11bHRpcGxlIAorICAgICAgICAgIElQIHN1Ym5ldHdvcmtzICh1c2luZyBtdWx0aXBsZSBhZGFwdGVycyksIGJ1dCBjb21wdXRlcnMgaW4gCisgICAgICAgICAgb3RoZXIgc3VibmV0d29ya3MgY2Fubm90IGJlIHJlYWNoZWQuCitSZWFzb246ICAgRWl0aGVyIHRoZSByb3V0ZXIncyBrZXJuZWwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIElQIGZvcndhcmRpbmcgCisgICAgICAgICAgb3IgdGhlIHJvdXRpbmcgdGFibGUgYW5kIGdhdGV3YXkgY29uZmlndXJhdGlvbiBvZiBhdCBsZWFzdCBvbmUgCisgICAgICAgICAgY29tcHV0ZXIgaXMgbm90IHdvcmtpbmcuCisKK1Byb2JsZW06ICBVcG9uIGRyaXZlciBzdGFydCwgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlIGlzIGRpc3BsYXllZDoKKyAgICAgICAgICAiZXRoMDogLS0gRVJST1IgLS0KKyAgICAgICAgICBDbGFzczogaW50ZXJuYWwgU29mdHdhcmUgZXJyb3IKKyAgICAgICAgICBOcjogICAgMHhjYworICAgICAgICAgIE1zZzogICBTa0dlSW5pdFBvcnQoKSBjYW5ub3QgaW5pdCBydW5uaW5nIHBvcnRzIgorUmVhc29uOiAgIFlvdSBhcmUgdXNpbmcgYSBkcml2ZXIgY29tcGlsZWQgZm9yIHNpbmdsZSBwcm9jZXNzb3IgbWFjaGluZXMgCisgICAgICAgICAgb24gYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lIHdpdGggU01QIChTeW1tZXRyaWMgTXVsdGlQcm9jZXNzb3IpIAorICAgICAgICAgIGtlcm5lbC4KK1NvbHV0aW9uOiBDb25maWd1cmUgeW91ciBrZXJuZWwgYXBwcm9wcmlhdGVseSBhbmQgcmVjb21waWxlIHRoZSBrZXJuZWwgb3IKKyAgICAgICAgICB0aGUgbW9kdWxlcy4KKworCisKK0lmIHlvdXIgcHJvYmxlbSBpcyBub3QgbGlzdGVkIGhlcmUsIHBsZWFzZSBjb250YWN0IFN5c0tvbm5lY3QncyB0ZWNobmljYWwKK3N1cHBvcnQgZm9yIGhlbHAgKGxpbnV4QHN5c2tvbm5lY3QuZGUpLgorV2hlbiBjb250YWN0aW5nIG91ciB0ZWNobmljYWwgc3VwcG9ydCwgcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgCitpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6CistIFN5c3RlbSBNYW51ZmFjdHVyZXIgYW5kIEhXIEluZm9ybWF0aW9ucyAoQ1BVLCBNZW1vcnkuLi4gKQorLSBQQ0ktQm9hcmRzIGluIHlvdXIgc3lzdGVtCistIERpc3RyaWJ1dGlvbgorLSBLZXJuZWwgdmVyc2lvbgorLSBEcml2ZXIgdmVyc2lvbgorKioqCisKKworCisqKipFbmQgb2YgUmVhZG1lIEZpbGUqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9za2ZwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9za2ZwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTQxOWVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0CkBAIC0wLDAgKzEsMjIwIEBACisoQylDb3B5cmlnaHQgMTk5OC0yMDAwIFN5c0tvbm5lY3QsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2tmcC50eHQgY3JlYXRlZCAxMS1NYXktMjAwMAorCitSZWFkbWUgRmlsZSBmb3Igc2tmcC5vIHYyLjA2CisKKworVGhpcyBmaWxlIGNvbnRhaW5zCisoMSkgT1ZFUlZJRVcKKygyKSBTVVBQT1JURUQgQURBUFRFUlMKKygzKSBHRU5FUkFMIElORk9STUFUSU9OCisoNCkgSU5TVEFMTEFUSU9OCisoNSkgSU5DTFVTSU9OIE9GIFRIRSBBREFQVEVSIElOIFNZU1RFTSBTVEFSVAorKDYpIFRST1VCTEVTSE9PVElORworKDcpIEZVTkNUSU9OIE9GIFRIRSBBREFQVEVSIExFRFMKKyg4KSBISVNUT1JZCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKworKDEpIE9WRVJWSUVXCis9PT09PT09PT09PT0KKworVGhpcyBSRUFETUUgZXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgZHJpdmVyICdza2ZwJyBmb3IgTGludXggd2l0aCB5b3VyCituZXR3b3JrIGFkYXB0ZXIuCisKK0NoYXB0ZXIgMjogQ29udGFpbnMgYSBsaXN0IG9mIGFsbCBuZXR3b3JrIGFkYXB0ZXJzIHRoYXQgYXJlIHN1cHBvcnRlZCBieQorCSAgIHRoaXMgZHJpdmVyLgorCitDaGFwdGVyIDM6IEdpdmVzIHNvbWUgZ2VuZXJhbCBpbmZvcm1hdGlvbi4KKworQ2hhcHRlciA0OiBEZXNjcmliZXMgY29tbW9uIHByb2JsZW1zIGFuZCBzb2x1dGlvbnMuCisKK0NoYXB0ZXIgNTogU2hvd3MgdGhlIGNoYW5nZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWRhcHRlciBMRURzLgorCitDaGFwdGVyIDY6IEhpc3Rvcnkgb2YgZGV2ZWxvcG1lbnQuCisKKyoqKgorCisKKygyKSBTVVBQT1JURUQgQURBUFRFUlMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG5ldHdvcmsgZHJpdmVyICdza2ZwJyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG5ldHdvcmsgYWRhcHRlcnM6CitTeXNLb25uZWN0IGFkYXB0ZXJzOgorICAtIFNLLTU1MjEgKFNLLU5FVCBGRERJLVVQKQorICAtIFNLLTU1MjIgKFNLLU5FVCBGRERJLVVQIERBUykKKyAgLSBTSy01NTQxIChTSy1ORVQgRkRESS1GUCkKKyAgLSBTSy01NTQzIChTSy1ORVQgRkRESS1MUCkKKyAgLSBTSy01NTQ0IChTSy1ORVQgRkRESS1MUCBEQVMpCisgIC0gU0stNTgyMSAoU0stTkVUIEZEREktVVA2NCkKKyAgLSBTSy01ODIyIChTSy1ORVQgRkRESS1VUDY0IERBUykKKyAgLSBTSy01ODQxIChTSy1ORVQgRkRESS1GUDY0KQorICAtIFNLLTU4NDMgKFNLLU5FVCBGRERJLUxQNjQpCisgIC0gU0stNTg0NCAoU0stTkVUIEZEREktTFA2NCBEQVMpCitDb21wYXEgYWRhcHRlcnMgKG5vdCB0ZXN0ZWQpOgorICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIERBUyBGaWJyZSBTQworICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIFNBUyBGaWJyZSBTQworICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIERBUyBVVFAKKyAgLSBOZXRlbGxpZ2VudCAxMDAgRkRESSBTQVMgVVRQCisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgU0FTIEZpYnJlIE1JQworKioqCisKKworKDMpIEdFTkVSQUwgSU5GT1JNQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09CisKK0Zyb20gdjIuMDEgb24sIHRoZSBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbiB0aGUgbGludXgga2VybmVsIHNvdXJjZXMuCitUaGVyZWZvciwgdGhlIGluc3RhbGxhdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgYW55IG90aGVyIGFkYXB0ZXIKK3N1cHBvcnRlZCBieSB0aGUga2VybmVsLgorUmVmZXIgdG8gdGhlIG1hbnVhbCBvZiB5b3VyIGRpc3RyaWJ1dGlvbiBhYm91dCB0aGUgaW5zdGFsbGF0aW9uCitvZiBuZXR3b3JrIGFkYXB0ZXJzLgorTWFrZXMgbXkgbGlmZSBtdWNoIGVhc2llciA6LSkKKyoqKgorCisKKyg0KSBUUk9VQkxFU0hPT1RJTkcKKz09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IHJ1biBpbnRvIHByb2JsZW1zIGR1cmluZyBpbnN0YWxsYXRpb24sIGNoZWNrIHRob3NlIGl0ZW1zOgorCitQcm9ibGVtOiAgVGhlIEZEREkgYWRhcHRlciBjYW4gbm90IGJlIGZvdW5kIGJ5IHRoZSBkcml2ZXIuCitSZWFzb246ICAgTG9vayBpbiAvcHJvYy9wY2kgZm9yIHRoZSBmb2xsb3dpbmcgZW50cnk6CisgICAgICAgICAgICAgJ0ZEREkgbmV0d29yayBjb250cm9sbGVyOiBTeXNLb25uZWN0IFNLLUZEREktUENJIC4uLicKKwkgIElmIHRoaXMgZW50cnkgZXhpc3RzLCB0aGVuIHRoZSBGRERJIGFkYXB0ZXIgaGFzIGJlZW4KKwkgIGZvdW5kIGJ5IHRoZSBzeXN0ZW0gYW5kIHNob3VsZCBiZSBhYmxlIHRvIGJlIHVzZWQuCisJICBJZiB0aGlzIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSBmaWxlICcvcHJvYy9wY2knCisJICBpcyBub3QgdGhlcmUsIHRoZW4geW91IG1heSBoYXZlIGEgaGFyZHdhcmUgcHJvYmxlbSBvciBQQ0kKKwkgIHN1cHBvcnQgbWF5IG5vdCBiZSBlbmFibGVkIGluIHlvdXIga2VybmVsLgorCSAgVGhlIGFkYXB0ZXIgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIGRpYWdub3N0aWMgcHJvZ3JhbQorCSAgd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20gdGhlIFN5c0tvbm5lY3Qgd2ViIHNpdGU6CisJICAgICAgd3d3LnN5c2tvbm5lY3QuZGUKKwkgIFNvbWUgQ09NUEFRIG1hY2hpbmVzIGhhdmUgYSBwcm9ibGVtIHdpdGggUENJIHVuZGVyCisJICBMaW51eC4gVGhpcyBpcyBkZXNjcmliZWQgaW4gdGhlICdQQ0kgaG93dG8nIGRvY3VtZW50CisJICAoaW5jbHVkZWQgaW4gc29tZSBkaXN0cmlidXRpb25zIG9yIGF2YWlsYWJsZSBmcm9tIHRoZQorCSAgd3d3LCBlLmcuIGF0ICd3d3cubGludXgub3JnJykgYW5kIG5vIHdvcmthcm91bmQgaXMgYXZhaWxhYmxlLgorCitQcm9ibGVtOiAgWW91IHdhbnQgdG8gdXNlIHlvdXIgY29tcHV0ZXIgYXMgYSByb3V0ZXIgYmV0d2VlbgorICAgICAgICAgIG11bHRpcGxlIElQIHN1Ym5ldHdvcmtzICh1c2luZyBtdWx0aXBsZSBhZGFwdGVycyksIGJ1dAorCSAgeW91IGNhbiBub3QgcmVhY2ggY29tcHV0ZXJzIGluIG90aGVyIHN1Ym5ldHdvcmtzLgorUmVhc29uOiAgIEVpdGhlciB0aGUgcm91dGVyJ3Mga2VybmVsIGlzIG5vdCBjb25maWd1cmVkIGZvciBJUAorCSAgZm9yd2FyZGluZyBvciB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgcm91dGluZyB0YWJsZQorCSAgYW5kIGdhdGV3YXkgY29uZmlndXJhdGlvbiBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICBjb21wdXRlcnMuCisKK0lmIHlvdXIgcHJvYmxlbSBpcyBub3QgbGlzdGVkIGhlcmUsIHBsZWFzZSBjb250YWN0IG91cgordGVjaG5pY2FsIHN1cHBvcnQgZm9yIGhlbHAuIAorWW91IGNhbiBzZW5kIGVtYWlsIHRvOgorICBsaW51eEBzeXNrb25uZWN0LmRlCitXaGVuIGNvbnRhY3Rpbmcgb3VyIHRlY2huaWNhbCBzdXBwb3J0LAorcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlOgorLSBTeXN0ZW0gTWFudWZhY3R1cmVyIGFuZCBNb2RlbAorLSBCb2FyZHMgaW4geW91ciBzeXN0ZW0KKy0gRGlzdHJpYnV0aW9uCistIEtlcm5lbCB2ZXJzaW9uCisKKyoqKgorCisKKyg1KSBGVU5DVElPTiBPRiBUSEUgQURBUFRFUiBMRURTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBMRUQncyBvbiB0aGUgRkRESSBuZXR3b3JrIGFkYXB0ZXJzIHdhcworICAgICAgICBjaGFuZ2VkIGluIFNNVCB2ZXJzaW9uIHYyLjgyLiBXaXRoIHRoaXMgbmV3IFNNVCB2ZXJzaW9uLCB0aGUgeWVsbG93CisgICAgICAgIExFRCB3b3JrcyBhcyBhIHJpbmcgb3BlcmF0aW9uYWwgaW5kaWNhdG9yLiBBbiBhY3RpdmUgeWVsbG93IExFRAorICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgcmluZyBpcyBkb3duLiBUaGUgZ3JlZW4gTEVEIG9uIHRoZSBhZGFwdGVyIG5vdworICAgICAgICB3b3JrcyBhcyBhIGxpbmsgaW5kaWNhdG9yIHdoZXJlIGFuIGFjdGl2ZSBHUkVFTiBMRUQgaW5kaWNhdGVzIHRoYXQKKyAgICAgICAgdGhlIHJlc3BlY3RpdmUgcG9ydCBoYXMgYSBwaHlzaWNhbCBjb25uZWN0aW9uLgorCisgICAgICAgIFdpdGggdmVyc2lvbnMgb2YgU01UIHByaW9yIHRvIHYyLjgyIGEgcmluZyB1cCB3YXMgaW5kaWNhdGVkIGlmIHRoZQorICAgICAgICB5ZWxsb3cgTEVEIHdhcyBvZmYgd2hpbGUgdGhlIGdyZWVuIExFRChzKSBzaG93ZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgc3RhdHVzIG9mIHRoZSBhZGFwdGVyLiBEdXJpbmcgYSByaW5nIGRvd24gdGhlIGdyZWVuIExFRCB3YXMgb2ZmIGFuZAorICAgICAgICB0aGUgeWVsbG93IExFRCB3YXMgb24uCisKKyAgICAgICAgQWxsIGltcGxlbWVudGF0aW9ucyBpbmRpY2F0ZSB0aGF0IGEgZHJpdmVyIGlzIG5vdCBsb2FkZWQgaWYKKyAgICAgICAgYWxsIExFRHMgYXJlIG9mZi4KKworKioqCisKKworKDYpIEhJU1RPUlkKKz09PT09PT09PT09CisKK3YyLjA2ICgyMDAwMDUxMSkgKEluLUtlcm5lbCB2ZXJzaW9uKQorICAgIE5ldyBmZWF0dXJlczoKKwktIDY0IGJpdCBzdXBwb3J0CisJLSBuZXcgcGNpIGRtYSBpbnRlcmZhY2UKKwktIGluIGtlcm5lbCAyLjMuOTkKKwordjIuMDUgKDIwMDAwMjE3KSAoSW4tS2VybmVsIHZlcnNpb24pCisgICAgTmV3IGZlYXR1cmVzOgorCS0gQ2hhbmdlcyBmb3IgMi4zLjQ1IGtlcm5lbAorCit2Mi4wNCAoMjAwMDAyMDcpIChTdGFuZGFsb25lIHZlcnNpb24pCisgICAgTmV3IGZlYXR1cmVzOgorCS0gQWRkZWQgcngvdHggYnl0ZSBjb3VudGVyCisKK3YyLjAzICgyMDAwMDExMSkgKFN0YW5kYWxvbmUgdmVyc2lvbikKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIEZpeGVkIHByaW50ayBzdGF0ZW1lbnRzIGZyb20gdjIuMDIKKwordjIuMDIgKDk5MTIxNSkgKFN0YW5kYWxvbmUgdmVyc2lvbikKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIFJlbW92ZWQgdW5uZWNlc3Nhcnkgb3V0cHV0CisJLSBGaXhlZCBwYXRoIGZvciAicHJpbnR2ZXIuc2giIGluIG1ha2VmaWxlCisKK3YyLjAxICg5OTExMjIpIChJbi1LZXJuZWwgdmVyc2lvbikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBJbnRlZ3JhdGlvbiBpbiBMaW51eCBrZXJuZWwgc291cmNlcworCS0gU3VwcG9ydCBmb3IgbWVtb3J5IG1hcHBlZCBJL08uCisKK3YyLjAwICg5OTExMTIpCisgICAgTmV3IGZlYXR1cmVzOgorCS0gRnVsbCBzb3VyY2UgcmVsZWFzZWQgdW5kZXIgR1BMCisKK3YxLjA1ICg5OTEwMjMpCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJLSBDb21waWxhdGlvbiB3aXRoIGtlcm5lbCB2ZXJzaW9uIDIuMi4xMyBmYWlsZWQKKwordjEuMDQgKDk5MDQyNykKKyAgICBDaGFuZ2VzOgorCS0gTmV3IFNNVCBtb2R1bGUgaW5jbHVkZWQsIGNoYW5naW5nIExFRCBmdW5jdGlvbmFsaXR5CisgICAgUHJvYmxlbXMgZml4ZWQ6CisJLSBTeW5jaHJvbml6YXRpb24gb24gU01QIG1hY2hpbmVzIHdhcyBidWdneQorCit2MS4wMyAoOTkwMzI1KQorICAgIFByb2JsZW1zIGZpeGVkOgorCS0gSW50ZXJydXB0IHJvdXRpbmcgb24gU01QIG1hY2hpbmVzIGNvdWxkIGJlIGluY29ycmVjdAorCit2MS4wMiAoOTkwMzEwKQorICAgIE5ldyBmZWF0dXJlczoKKwktIFN1cHBvcnQgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjIueCBhZGRlZAorCS0gS2VybmVsIHBhdGNoIGluc3RlYWQgb2YgcHJpdmF0ZSBkdXBsaWNhdGUgb2Yga2VybmVsIGZ1bmN0aW9ucworCit2MS4wMSAoOTgwODEyKQorICAgIFByb2JsZW1zIGZpeGVkOgorCUNvbm5lY3Rpb24gaGFuZ3VwIHdpdGggdGVsbmV0CisJU2xvdyB0ZWxuZXQgY29ubmVjdGlvbgorCit2MS4wMCBiZXRhIDAxICg5ODA1MDcpCisgICAgTmV3IGZlYXR1cmVzOgorCU5vbmUuCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJTm9uZS4KKyAgICBLbm93biBsaW1pdGF0aW9uczoKKyAgICAgICAgLSB0YXIgYXJjaGl2ZSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHBhY2thZ2UgZm9ybWF0IChycG0pLgorCS0gRkRESSBzdGF0aXN0aWMgaXMgZW1wdHkuCisJLSBub3QgdGVzdGVkIHdpdGggMi4xLnh4IGtlcm5lbHMKKwktIGludGVncmF0aW9uIGluIGtlcm5lbCBub3QgdGVzdGVkCisJLSBub3QgdGVzdGVkIHNpbXVsdGFuZW91c2x5IHdpdGggRkRESSBhZGFwdGVycyBmcm9tIG90aGVyIHZlbmRvcnMuCisJLSBvbmx5IFg4NiBwcm9jZXNzb3JzIHN1cHBvcnRlZC4KKwktIFNCQSAoU3luY2hyb25vdXMgQmFuZHdpZHRoIEFsbG9jYXRvcikgcGFyYW1ldGVycyBjYW4KKwkgIG5vdCBiZSBjb25maWd1cmVkLgorCS0gZG9lcyBub3Qgd29yayBvbiBzb21lIENPTVBBUSBtYWNoaW5lcy4gU2VlIHRoZSBQQ0kgaG93dG8KKwkgIGRvY3VtZW50IGZvciBkZXRhaWxzIGFib3V0IHRoaXMgcHJvYmxlbS4KKwktIGRhdGEgY29ycnVwdGlvbiB3aXRoIGtlcm5lbCB2ZXJzaW9ucyBiZWxvdyAyLjAuMzMuCisKKyoqKiBFbmQgb2YgaW5mb3JtYXRpb24gZmlsZSAqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4gYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20uaHVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2YxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20uaHVuCkBAIC0wLDAgKzEsMzcxIEBACisKK1NsaWNlQ09NIGFkYXB0ZXIgZmVsaGFzem5hbG9pIGRva3VtZW50YWNpb2phIC0gMC41MSB2ZXJ6aW9ob3oKKworQmFydPNrIElzdHbhbiA8YmFydG9raUBpdGMuaHU+CitVdG9sc28gbW9kb3NpdGFzOiBXZWQgQXVnIDI5IDE3OjI2OjU4IENFU1QgMjAwMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIYXN6bmFsYXRhOgorCitGb3JkaXRhczoKKworQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisJWypdIFByb21wdCBmb3IgZGV2ZWxvcG1lbnQgYW5kL29yIGluY29tcGxldGUgY29kZS9kcml2ZXJzCisKK05ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKwlXYW4gaW50ZXJmYWNlcworCQk8TT4gTXVsdGlHYXRlIChDT01YKSBzeW5jaHJvbm91cworCQkJPE0+IFN1cHBvcnQgZm9yIE1VTklDSCBiYXNlZCBib2FyZHM6IFNsaWNlQ09NLCBQQ0lDT00gKE5FVykKKwkJCTxNPiBTdXBwb3J0IGZvciBIRExDIGFuZCBzeW5jUFBQLi4uCisKKworQSBtb2R1bG9rIGJldG9sdGVzZToKKworbW9kcHJvYmUgY29teAorCittb2Rwcm9iZSBjb214LXByb3RvLXBwcAkJIyBhIENpc2NvLUhETEMgZXMgYSBTeW5jUFBQIHByb3Rva29sbHQgaXMKKwkJCQkjIGV6IGEgbW9kdWwgYWRqYQorCittb2Rwcm9iZSBjb214LWh3LW11bmljaAkJIyBhIG1vZHVsIGJldG9sdG9kZXNrb3IgYXpvbm5hbCBqZWxlbnQgYQorCQkJCSMgc3lzbG9nYmEgYSBkZXRla3RhbHQga2FydHlha3JvbAorCisKK0tvbmZpZ3VyYWxhczoKKworIyBFemVuIGF6IGludGVyZmVzemVuIENpc2NvLUhETEMgdm9uYWxpIHByb3Rva29sbCBmb2cgZnV0bmkKKyMgQXogaW50ZXJmZXN6aGV6IHJlbmRlbHQgaWRvc3plbGV0ZWs6IDEsMiAoMTI4IGtiaXQvc2VjLWVzIHZvbmFsKQorIyAoYSBHLjcwMyBrZXJldGJlbiBheiBlbHNvIGFkYXRvdCB2aXZvIGlkb3N6ZWxldCBheiAxLWVzKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4xLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4xL2JvYXJkdHlwZQorZWNobyBoZGxjCT4vcHJvYy9jb214L2NvbXgwLjEvcHJvdG9jb2wKK2VjaG8gMSAyCT4vcHJvYy9jb214L2NvbXgwLjEvdGltZXNsb3RzCisKKworIyBFemVuIGF6IGludGVyZmVzemVuIFN5bmNQUFAgdm9uYWxpIHByb3Rva29sbCBmb2cgZnV0bmkKKyMgQXogaW50ZXJmZXN6aGV6IHJlbmRlbHQgaWRvc3plbGV0OiAzICg2NCBrYml0L3NlYy1lcyB2b25hbCkKKyMKK21rZGlyIC9wcm9jL2NvbXgvY29teDAuMi8KK2VjaG8gc2xpY2Vjb20JPi9wcm9jL2NvbXgvY29teDAuMi9ib2FyZHR5cGUKK2VjaG8gcHBwCT4vcHJvYy9jb214L2NvbXgwLjIvcHJvdG9jb2wKK2VjaG8gMwkJPi9wcm9jL2NvbXgvY29teDAuMi90aW1lc2xvdHMKKworLi4uCisKK2lmY29uZmlnIGNvbXgwLjEgdXAKK2lmY29uZmlnIGNvbXgwLjIgdXAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBDT01YIGRyaXZlcmVrIGRlZmF1bHQgMjAgY3NvbWFnbnlpIHRyYW5zbWl0IHF1ZXVlLXQgcmVuZGVsbmVrIGEgaGFsb3phdGkKK2ludGVyZmVzemVraGV6LiBXQU4gaGFsb3phdG9rYmFuIGVubmVsIGhvc3N6YWJiYXQgaXMgc3pva2FzIGhhc3puYWxuaQorKDIwIGVzIDEwMCBrb3pvdHQpLCBob2d5IGEgdm9uYWwga2loYXN6bmFsdHNhZ2EgbmFneSB0ZXJoZWxlcyBlc2V0ZW4gam9iYgorbGVneWVuIChiYXIgZXp6ZWwgbWVnbm8gYSB2YXJoYXRvIGtlc2xlbHRldGVzIGEgY3NvbWFnb2sgc29yYmFuIGFsbGFzYSBtaWF0dCk6CisKKyMgaWZjb25maWcgY29teDAgdHhxdWV1ZWxlbiA1MAorCitFenQgYSBiZWFsbGl0YXNpIGxlaGV0b3NlZ2V0IGNzYWsgYXogdWphYmIgZGlzenRyaWJ1Y2lvayBpZmNvbmZpZyBwYXJhbmNzYQordGFtb2dhdGphIChhbWlrIG1hciBhIDIuMiBrZXJuZWxla2hleiBrZXN6dWx0ZWssIG1pbnQgYSBSZWRIYXQgNi4xIHZhZ3kgYQorRGViaWFuIDIuMikuCisKK0EgMi4xLWVzIERlYmlhbiBkaXN6dHJpYnVjaW9ob3ogYSBodHRwOi8vd3d3LmRlYmlhbi5vcmcvfnJjdy8yLjIvbmV0YmFzZS8KK2NpbXJvbCB0b2x0aGV0byBsZSB1amFiYiBuZXRiYXNlIGNzb21hZywgYW1pIG1hciBpbHlldCB0YW1vZ2F0byBpZmNvbmZpZworcGFyYW5jc290IHRhcnRhbG1hei4gQm92ZWJiZW4gYSAyLjIga2VybmVsIGhhc3puYWxhdGFyb2wgRGViaWFuIDIuMSBhbGF0dDoKK2h0dHA6Ly93d3cuZGViaWFuLm9yZy9yZWxlYXNlcy9zdGFibGUvcnVubmluZy1rZXJuZWwtMi4yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Ega2FydHlhIExFRC1qZWluZWsgamVsZW50ZXNlOgorCitwaXJvcwktIGVnLCBoYSBSZW1vdGUgQWxhcm0tb3Qga3VsZCBhIHR1bG9sZGFsCit6b2xkCS0gZWcsIGhhIGEgdmV0dCBqZWxiZW4gbWVndGFsYWxqYSBhIGtlcmV0c3ppbmtyb250CisKK1Jlc3psZXRlc2ViYmVuOgorCitwaXJvczoJem9sZDoJamVsZW50ZXM6CisKKy0JLQluaW5jcyBrZXJldHN6aW5rcm9uIChuaW5jcyBqZWwsIHZhZ3kgcm9zc3ogYSBqZWwpCistCWVnCSJtaW5kZW4gcmVuZGJlbiIKK2VnCWVnCWEgdmV0ZWwgT0ssIGRlIGEgdHVsb2xkYWwgUmVtb3RlIEFsYXJtLW90IGt1bGQKK2VnCS0JZXogbmluY3MgZXJ0ZWxtZXp2ZSwgZWd5ZWxvcmUgZnVua2NpbyBuZWxrdWwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVzemxldGVzZWJiIGxlaXJhcyBhIGhhcmR2ZXIgYmVhbGxpdGFzaSBsZWhldG9zZWdlaXJvbDoKKworQXogYWx0YWxhbm9zLC0gZXMgYSBwcm90b2tvbGwtcmV0ZWdlayBiZWFsbGl0YXNpIGxlaGV0b3NlZ2Vpcm9sIGEgJ2NvbXgudHh0JworZmFqbGJhbiBsZWlydGFrIFNsaWNlQ09NIGthcnR5YW5hbCBpcyBlcnZlbnllc2VrLCBpdHQgY3NhayBhIGhhcmR2ZXItc3BlY2lmaWt1cworYmVhbGxpdGFzaSBsZWhldG9zZWdlayB2YW5uYWsgb3NzemVmb2dsYWx2YToKKworS29uZmlndXJhbGFzaSBpbnRlcmZlc3ogYSAvcHJvYy9jb214LyBhbGF0dDoKKworTWluZGVuIHRpbWVzbG90LWNzb3BvcnRuYWsga3Vsb24gY29teCogaW50ZXJmZXN6dCBrZWxsIGxldHJlaG96bmkgbWtkaXItcmVsOgorY29teDAsIGNvbXgxLCAuLiBzdGIuIEl0dCBiZWFsbGl0aGF0bywgaG9neSBheiBhZG90dCBpbnRlcmZlc3ogaGFueWFkaWsga2FydHlhCittZWx5aWsgdGltZXNsb3RqYShpKWJvbCBhbGxqb24gb3NzemUuIEEgQ2lzY28tZmVsZSBzZXJpYWwzOjEgZWxuZXZlemVzZWsKKyhzZXJpYWwzOjEgPSBhIDMuIGthcnR5YWJhbiBheiAxLWVzIGlkb3N6ZWxldC1jc29wb3J0KSBMaW51eG9uIGFsaWFzaW5nLW90CitqZWxlbnRlbmVuZWssIGV6ZXJ0IG1pIG5lbSB0dWR1bmsgaWx5ZW4gZWxuZXZlemVzdCBoYXN6bmFsbmkuCisKK1RvYmIga2FydHlhIGVzZXRlbiBhIGNvbXgwLjEsIGNvbXgwLjIsIC4uLiB2YWd5IHNsaWNlMC4xLCBzbGljZTAuMiBuZXZlaworaGFzem5hbGhhdG9hay4KKworVG9iYiBTbGljZUNPTSBrYXJ0eWEgaXMgbGVoZXQgZWd5IGdlcGJlbiwgZGUgc2FqYXQgaW50ZXJydXB0IGtlbGwgbWluZGVneWlrbmVrLAorbmVtIHR1ZCBtZWcgbWVnb3N6dG90dCBpbnRlcnJ1cHRvdCBrZXplbG5pLgorCitBeiBlZ2VzeiBrYXJ0eWF0IGVyaW50byBiZWFsbGl0YXNvazoKKworQXogaW9wb3J0IGVzIGlycSBiZWFsbGl0YXMgbmluY3M6IGFtaXQgYSBQQ0kgQklPUyBraW9zenQgYSByZW5kc3plcm5laywKK2F6dCBoYXN6bmFsamEgYSBkcml2ZXIuCisKKworY29teDAvYm9hcmRudW0JLSBoYW55YWRpayBTbGljZUNPTSBrYXJ0eWEgYSBnZXBiZW4gKGEgJ3Rlcm1lc3pldGVzJyBQQ0kKKwkJc29ycmVuZGJlbiBlcnR2ZTogYWhvZ3lhbiBhIC9wcm9jL3BjaS1iYW4gdmFneSBheiAnbHNwY2knCisJCWtpbWVuZXRlYmVuIG1lZ2plbGVuaWssIGFsdGFsYWJhbiBheiBhbGFwbGFwaSBQQ0kgbWVnaGFqdG8KKwkJYXJhbWtvcm9raG96IGtvemVsZWJiIGVzbyBrYXJ0eWFrIGEga2lzZWJiIHNvcnN6YW11YWspCisKKwkJRGVmYXVsdDogMCAoMC10b2wga2V6ZG9kaWsgYSBzemFtb2xhcykKKworCitCYXIgYSBrb3ZldGtlem9rZXQgY3NhayBlZ3ktZWd5IGludGVyZmVzemVuIGFsbGl0anVrIGF0LCBtZWdpcyBheiBlZ2VzeiBrYXJ0eWEKK211a29kZXNldCBlZ3lzemVycmUgYWxsaXRqYWsuIEEgbWVna290ZXMgaG9neSBjc2FrIFVQLWJhbiBsZXZvIGludGVyZmVzemVuCitoYXN6bmFsaGF0b2FrLCBhemVydCB2YW4sIG1lcnQga3Vsb25iZW4gbmVtIHZhcnQgZXJlZG1lbnlla3JlIHZlemV0bmUgZWd5IGlseWVuCitwYXJhbmNjc29yb3phdDoKKworCWVjaG8gMCAgICAgICAgPmJvYXJkbnVtCisJZWNobyBpbnRlcm5hbCA+Y2xvY2tfc291cmNlCisJZWNobyAxICAgICAgICA+Ym9hcmRudW0KKworLSBFeiBhIDAtcyBib2FyZCBjbG9ja19zb3VyY2UtYXQgYWxsaXRhbmEgYXQuCisKK0V6ZWsgYSBiZWFsbGl0YXNvayBtZWdtYXJhZG5hayBheiBvc3N6ZXMgaW50ZXJmZXN6IHRvcmxlc2Vrb3IsIGRlIHRvcmxvZG5laworYSBkcml2ZXIgbW9kdWwga2kvYmV0b2x0ZXNla29yLgorCisKK2NvbXgwL2Nsb2NrX3NvdXJjZSAtIEEgVHggb3JhamVsZm9ycmFzYSwgYSBDaXNjby12YWwgaGFzb25sYXRvc3JhIGtlc3p1bHQuCisJSGFzem5hbGF0YToKKworCXBhcGF5YTojIGVjaG8gbGluZSAgICAgPi9wcm9jL2NvbXgvY29teDAvY2xvY2tfc291cmNlCisJcGFwYXlhOiMgZWNobyBpbnRlcm5hbCA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKworCWxpbmUgICAgIC0gQSBUeCBvcmFqZWxldCBhIHZldHQgYWRhdGZvbHlhbWJvbCBkZWtvZG9samEsIGlneWVrc3ppaworCQlpZ2F6b2RuaSBob3p6YS4gSGEgbmVtIGxhdCBvcmFqZWxldCBheiBpbnB1dG9uLCBha2tvcgorCQlhdGFsbCBhIHNhamF0IG9yYWplbGdlbmVyYXRvcmFyYS4KKwlpbnRlcm5hbCAtIEEgVHggb3JhamVsZXQgYSBzYWphdCBvcmFqZWxnZW5lcmF0b3JhIHN6b2xnYWx0YXRqYS4KKworCURlZmF1bHQ6IGxpbmUKKworCU5vcm1hbCBvc3N6ZWFsbGl0YXMgZXNldGVuIGEgdGF2a296bGVzaSBzem9sZ2FsdGF0byBlc3prb3plCisJKHBsLiBIRFNMIG1vZGVtKSBhZGphIGF6IG9yYWplbGV0LCBlemVydCBleiBhIGRlZmF1bHQuCisKKworY29teDAvZnJhbWluZwktIEEgQ1JDNCBraS9iZSBrYXBjc29sYXNhCisKKwlBIENSQzQ6IDE2IFBDTSBrZXJldGV0IChBIFBDTSBrZXJldCBheiwgYW1pYmUgYSAzMiBkYXJhYiA2NAorCWtpbG9iaXRlcyBjc2F0b3JuYSB2YW4gYmVtdWx0aXBsZXhhbHZhLiBOZW0gb3NzemV0ZXZlc3p0ZW5kbyBhIEhETEMKKwlrZXJldHRlbC4pIDJ4OCAtYXMgY3NvcG9ydG9rcmEgb3N6dGFuYWssIGVzIGF6b2tob3ogNC00IGJpdGVzIENSQy10CisJc3phbW9sbmFrLiBFbHNvc29yYmFuIGEgdm9uYWwgbWlub3NlZ2VuZWsgYSBtb25pdG9yb3phc2FyYSBzem9sZ2FsLgorCisJcGFwYXlhOn4jIGVjaG8gY3JjNAk+L3Byb2MvY29teC9jb214MC9mcmFtaW5nCisJcGFwYXlhOn4jIGVjaG8gbm8tY3JjNAk+L3Byb2MvY29teC9jb214MC9mcmFtaW5nCisKKwlEZWZhdWx0IGEgJ2NyYzQnLCBhIE1BVEFWIHZvbmFsYWsgYWx0YWxhYmFuIGlneSBmdXRuYWsuIERlIGhhIG5lbQorCWVneWZvcm1hIGlzIGEgYmVhbGxpdGFzIGEgdm9uYWwga2V0IHZlZ2VuLCBhdHRvbCBhIGZvcmdhbG9tIGFsdGFsYWJhbgorCWF0IHR1ZCBtZW5uaS4KKworCitjb214MC9saW5lY29kZQktIEEgdm9uYWxpIGtvZG9sYXMgYmVhbGxpdGFzYQorCisJcGFwYXlhOn4jIGVjaG8gaGRiMwk+L3Byb2MvY29teC9jb214MC9saW5lY29kZQorCXBhcGF5YTp+IyBlY2hvIGFtaQk+L3Byb2MvY29teC9jb214MC9saW5lY29kZQorCisJRGVmYXVsdCBhICdoZGIzJywgYSBNQVRBViB2b25hbGFrIGlneSBmdXRuYWsuCisJCisJKGF6IEFNSSBrb2RvbGFzIGlnZW4gcml0a2EgRTEtZXMgdm9uYWxha25hbCkuIEhhIGV6IGEgYmVhbGxpdGFzIG5lbQorCWVneWV6aWsgYSB2b25hbCBrZXQgdmVnZW4sIGFra29yIGVsb2ZvcmR1bGhhdCBob2d5IGEga2VyZXRzemlua3JvbgorCW9zc3plam9uLCBkZSBDUkM0LWhpYmFrIGVzIGEgdm9uYWxha29uIGF0dml0dCBhZGF0b2tiYW4gaXMgaGliYWsKKwlrZWxldGtlem5layAoYW1pdCBhIEhETEMvU3luY1BQUCBzemludGVuIENSQy1oaWJhdmFsIGplbGV6KQorCisKK2NvbXgwL3JlZwktIGEga2FydHlhIGFyYW1rb3JlaW5laywgYSBNVU5JQ0ggKHJlZykgZXMgYSBGQUxDIChsYmlyZWcpCitjb214MC9sYmlyZWcJcmVnaXN6dGVyZWluZWsga296dmV0bGVuIGVsZXJlc2UuIEhhc3puYWxhdGE6CisKKwkJZWNobyA+cmVnIDB4MDQgMHgwCS0gYSA0LWVzIHJlZ2lzenRlcmJlIDAtdCBpcgorCQllY2hvID5yZWcgMHgxMDQJCS0gcHJpbnRrKCktdmFsIGtpaXJqYSBhIDQtZXMgcmVnaXN6dGVyCisJCQkJCXRhcnRhbG1hdCBhIHN5c2xvZ2JhLgorCisJCVdBUk5JTkc6IGV6ZWsgY3NhayBhIGZlamxlc3p0ZXNoZXoga2VzenVsdGVrLCBzb2sgZ2FsaWJhdAorCQlsZWhldCB2ZWx1ayBva296bmkhCisKKworY29teDAvbG9vcGJhY2sgLSBBIGthcnR5YSBHLjcwMyBqZWxlbmVrIGEgdmlzc3phaHVya29sYXNhcmEgaXMgdmFuIGxlaGV0b3NlZzoKKworCXBhcGF5YTojIGVjaG8gbm9uZSAgID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisJcGFwYXlhOiMgZWNobyBsb2NhbCAgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKwlwYXBheWE6IyBlY2hvIHJlbW90ZSA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCisJbm9uZSAgIC0gbmluY3Mgdmlzc3phaHVya29sYXMsIG5vcm1hbCBtdWtvZGVzCisJbG9jYWwgIC0gYSBrYXJ0eWEgYSBzYWphdCBtYWdhIGFsdGFsIGFkb3R0IGplbGV0IGthcGphIHZpc3N6YQorCXJlbW90ZSAtIGEga2FydHlhIGEga2l2dWxyb2wgdmV0dCBqZWxldCBhZGphIGtpZmVsZQorCisJRGVmYXVsdDogbm9uZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBeiBpbnRlcmZlc3poZXogKENpc2NvIHRlcm1pbm9sb2dpYWJhbiAnY2hhbm5lbC1ncm91cCcpIGthcGNzb2xvZG8gYmVhbGxpdGFzb2s6CisKK2NvbXgwL3RpbWVzbG90cwktIG1lbHkgdGltZXNsb3RvayAoaWRvc3plbGV0ZWspIHRhcnRvem5hayBheiBhZG90dCBpbnRlcmZlc3poZXouCisKKwlwYXBheWE6fiMgY2F0IC9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzCisJMSAzIDQgNSA2CisJcGFwYXlhOn4jCisKKwlFZ3kgdGltZXNsb3QgbWVna2VyZXNlc2UgKGhhbnlhcyBpbnRlcmZlc3piZSB0YXJ0b3ppayBuYWx1bmspOgorCisJcGFwYXlhOn4jIGdyZXAgJyA0JyAvcHJvYy9jb214L2NvbXgqL3RpbWVzbG90cworCS9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzOjEgMyA0IDUgNgorCXBhcGF5YTp+IworCisJQmVhbGxpdGFzYToKKwlwYXBheWE6fiMgZWNobyAnMSA1IDIgNiA3IDgnID4vcHJvYy9jb214L2NvbXgwL3RpbWVzbG90cworCQorCUEgdGltZXNsb3RvayBzb3JyZW5kamUgbmVtIHN6YW1pdCwgJzEgMyAyJyB1Z3lhbmF6IG1pbnQgYXogJzEgMiAzJy4KKworCUJlYWxsaXRhc2hveiBheiBhZG90dCBpbnRlcmZlc3puZWsgRE9XTi1iYW4ga2VsbCBsZW5uaWUKKwkoaWZjb25maWcgY29teDAgZG93biksIGRlIHVneWFuYW5uYWsgYSBrYXJ0eWFuYWsgYSB0b2JiaSBpbnRlcmZlc3plCisJdXplbWVsaGV0IGtvemJlbi4KKworCUJlYWxsaXRhc2tvciBsZWVsbGVub3J6aSwgaG9neSBheiB1aiB0aW1lc2xvdG9rIG5lbSB1dGtvem5lay1lIGVneQorCW1hc2lrIGludGVyZmVzeiB0aW1lc2xvdGphaXZhbC4gSGEgdXRrb3puZWssIGFra29yIG5lbSBhbGxpdGphIGF0LgorCisJTWluZGlnIDEwLWVzIHN6YW1yZW5kc3plcmJlbiB0b3J0ZW5payBhIHRpbWVzbG90b2sgZXJ0ZWxtZXplc2UsIG5laG9neQorCWEgMDgsIDA5IGFsYWt1IGZlbGlyYXN0IHJvc3N6dWwgZXJ0ZWxtZXp6ZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXogaW50ZXJmZXN6ZWsgZXMgYSBrYXJ0eWEgYWxsYXBvdGFuYWsgbGVrZXJkZXplc2U6CisKKy0gQSAnICctc3plbCBrZXpkb2RvIHNvcm9rIGF6IGVyZWRldGkga2ltZW5ldGV0LCBhIC8vLXJlbCBrZXpkb2RvIHNvcm9rIGEKK21hZ3lhcmF6YXRvdCBqZWx6aWsuCisKKyBwYXBheWE6fiQgY2F0IC9wcm9jL2NvbXgvY29teDEvc3RhdHVzCisgSW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlIHN0YXR1cyBpcyBVUCwgbW9kZW0gc3RhdHVzIGlzIFVQLCBwcm90b2NvbCBpcyBVUAorIE1vZGVtIHN0YXR1cyBjaGFuZ2VzOiAwLCBUcmFuc21pdHRlciBzdGF0dXMgaXMgSURMRSwgdGJ1c3k6IDAKKyBJbnRlcmZhY2UgbG9hZCAoaW5wdXQpOiA5NzgzNzYgLyA5NDc4MDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgICAgICAgICAgICAgICAob3V0cHV0KTogOTc4Mzc2IC8gOTQ3ODQ4IC8gOTUxMDI0IGJpdHMvcyAoNXMvNW0vMTVtKQorIERlYnVnIGZsYWdzOiBub25lCisgUlggZXJyb3JzOiBsZW46IDIyLCBvdmVycnVuOiAxLCBjcmM6IDAsIGFib3J0czogMAorICAgICAgICAgICAgYnVmZmVyIG92ZXJydW46IDAsIHBidWZmZXIgb3ZlcnJ1bjogMAorIFRYIGVycm9yczogdW5kZXJydW46IDAKKyBMaW5lIGtlZXBhbGl2ZSAodmFsdWU6IDEwKSBzdGF0dXMgVVAgWzBdCisKKy8vIEl0dCBrZXpkb2RpayBhIGhhcmR2ZXItc3BlY2lmaWt1cyByZXN6OgorIENvbnRyb2xsZXIgc3RhdHVzOgorICAgICAgICAgTm8gYWxhcm1zCisKKy8vIEFsYXJtOiBoaWJhamVsemVzOgorLy8KKy8vIE5vIGFsYXJtcyAtIG1pbmRlbiByZW5kYmVuCisvLworLy8gTE9TICAtIExvc3MgT2YgU2lnbmFsIC0gbmVtIGVyemVrZWwgamVsZXQgYSBiZW1lbmV0ZW4uCisvLyBBSVMgIC0gQWxhcm0gSW5kaWNhdGlvbiBTaWduYWwgLSBjc2FrIGVneW1hcyB1dGFuaSAxLWVzZWsgam9ubmVrCisvLwlhIGJlbWVuZXRlbiwgYSB0dWxvbGRhbCBpZ3kgaXMgamVsZXpoZXRpIGhvZ3kgbWVnaGliYXNvZG90dCB2YWd5CisvLwluaW5jcyBpbmljaWFsaXphbHZhLgorLy8gQVVYUCAtIEF1eGlsaWFyeSBQYXR0ZXJuIEluZGljYXRpb24gLSAwMTAxMDEwMS4uIHNvcm96YXQgam9uIGEgYmVtZW5ldGVuLgorLy8gTEZBICAtIExvc3Mgb2YgRnJhbWUgQWxpZ25tZW50IC0gbmluY3Mga2VyZXRzemlua3JvbgorLy8gUlJBICAtIFJlY2VpdmUgUmVtb3RlIEFsYXJtIC0gYSB0dWxvbGRhbCBlbCwgZGUgaGliYXQgamVsZXouCisvLyBMTUZBIC0gTG9zcyBvZiBDUkM0IE11bHRpZnJhbWUgQWxpZ25tZW50IC0gbmluY3MgQ1JDNC1tdWx0aWtlcmV0LXN6aW5rcm9uCisvLyBOTUYgIC0gTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIgNDAwIG1zZWMgLSBpbHllbiBhbGFybSBhIG5vLWNyYzQKKy8vCWVzIGNyYzQga2VyZXRlemVzZWsgZXNldGVuIG5pbmNzLCBsYXNkIGxlbnRlYmIKKy8vCisvLyBFZ3llYiBsZWhldHNlZ2VzIGhpYmFqZWx6ZXNlazoKKy8vCisvLyBUcmFuc21pdCBMaW5lIFNob3J0IC0gYSBrYXJ0eWEgdWd5IGVyemkgaG9neSBheiBhZGFzaSBraW1lbmV0ZSByb3ZpZHJlCisvLwl2YW4gemFydmEsIGV6ZXJ0IGtpa2FwY3NvbHRhIGF6IGFkYXN0LiAobmVtIGZlbHRldGxlbnVsIHZlc3ppIGVzenJlCisvLwlhIGt1bHNvIHJvdmlkemFyYXQpCisKKy8vIEEgdmV0ZWxpIG9sZGFsIGNzb21hZ2phaW5hayBsYW5jb2x0IGxpc3RhaSwgZGVidWcgY2Vsb2tyYToKKworIFJ4IHJpbmc6CisgICAgICAgICByYWZ1dG90dDogMAorICAgICAgICAgbGFzdGNoZWNrOiA1MDg0NTczMSwgamlmZmllczogNTEzMTQyODEKKyAgICAgICAgIGJhc2U6IDAxN2IxODU4CisgICAgICAgICByeF9kZXNjX3B0cjogMAorICAgICAgICAgcnhfZGVzY19wdHI6IDAxN2IxODU4CisgICAgICAgICBod19jdXJyX3B0cjogMDE3YjE4NTgKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODY4IDAxN2IxODk4IGMwMTZmZjAwCisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg3OCAwMTdiMWU5YyBjMDE2ZmYwMAorICAgICAgICAgNDYwNDAwMDAgMDE3YjE4ODggMDE3YjI0YTAgYzAxNmZmMDAKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODU4IDAxN2IyYWE0IGMwMTZmZjAwCisKKy8vIEEga2FydHlhdCBoYXN6bmFsbyB0b2JiaSBpbnRlcmZlc3o6IGEgMC1zIGNoYW5uZWwtZ3JvdXAgYSBjb214MSBpbnRlcmZlc3osCisvLyBlcyBheiAxLDIsLi4uLDE2IHRpbWVzbG90b2sgdGFydG96bmFrIGhvenphOgorCisgSW50ZXJmYWNlcyB1c2luZyB0aGlzIGJvYXJkOiAoY2hhbm5lbC1ncm91cCwgaW50ZXJmYWNlLCB0aW1lc2xvdHMpCisgICAgICAgICAgMCBjb214MTogMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYKKyAgICAgICAgICAxIGNvbXgyOiAxNworICAgICAgICAgIDIgY29teDM6IDE4CisgICAgICAgICAgMyBjb214NDogMTkKKyAgICAgICAgICA0IGNvbXg1OiAyMAorICAgICAgICAgIDUgY29teDY6IDIxCisgICAgICAgICAgNiBjb214NzogMjIKKyAgICAgICAgICA3IGNvbXg4OiAyMworICAgICAgICAgIDggY29teDk6IDI0CisgICAgICAgICAgOSBjb214MTA6IDI1CisgICAgICAgICAxMCBjb214MTE6IDI2CisgICAgICAgICAxMSBjb214MTI6IDI3CisgICAgICAgICAxMiBjb214MTM6IDI4CisgICAgICAgICAxMyBjb214MTQ6IDI5CisgICAgICAgICAxNCBjb214MTU6IDMwCisgICAgICAgICAxNSBjb214MTY6IDMxCisKKy8vIEhhbnkgZXNlbWVueXQga2V6ZWx0IGxlIGEgZHJpdmVyIGVneS1lZ3kgaGFyZHZlci1pbnRlcnJ1cHQga2lzem9sZ2FsYXNhbmFsOgorCisgSW50ZXJydXB0IHdvcmsgaGlzdG9ncmFtOgorIGhpc3RbIDBdOiAgICAgICAgMCBoaXN0WyAxXTogICAgICAgIDIgaGlzdFsgMl06ICAgIDE4NTc0IGhpc3RbIDNdOiAgICAgICA3OQorIGhpc3RbIDRdOiAgICAgICAxNCBoaXN0WyA1XTogICAgICAgIDEgaGlzdFsgNl06ICAgICAgICAwIGhpc3RbIDddOiAgICAgICAgMQorIGhpc3RbIDhdOiAgICAgICAgMCBoaXN0WyA5XTogICAgICAgIDcKKworLy8gSGFueSBraWt1bGRlbmRvIGNzb21hZyB2b2x0IG1hciBhIFR4LXJpbmdiZW4gYW1pa29yIHVqYWJiIGxldHQgaXJ2YSBiZWxlOgorCisgVHggcmluZyBoaXN0b2dyYW06CisgaGlzdFsgMF06ICAgICAyMzI5IGhpc3RbIDFdOiAgICAgICAgMCBoaXN0WyAyXTogICAgICAgIDAgaGlzdFsgM106ICAgICAgICAwCisKKy8vIEF6IEUxLWludGVyZmVzeiBoaWJhLXN6YW1sYWxvaSwgYXogcmZjMjQ5NS1uZWsgbWVnZmVsZWxvZW46CisvLyAoa2IuIGEgQ2lzY28gcm91dGVyZWsgInNob3cgY29udHJvbGxlcnMgZTEiIGZvcm1hdHVtYWJhbjogaHR0cDovL3d3dy5jaXNjby5jb20vdW5pdmVyY2QvY2MvdGQvZG9jL3Byb2R1Y3Qvc29mdHdhcmUvaW9zMTEvcmJvb2svcmludGVyZmMuaHRtI3h0b2NpZDI1NjY5MTI2KQorCitEYXRhIGluIGN1cnJlbnQgaW50ZXJ2YWwgKDkxIHNlY29uZHMgZWxhcHNlZCk6CisgICA5NTE2IExpbmUgQ29kZSBWaW9sYXRpb25zLCA2NSBQYXRoIENvZGUgVmlvbGF0aW9ucywgMiBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAyIEZyIExvc3MgU2VjcywgMiBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMTEgVW5hdmFpbCBTZWNzCitEYXRhIGluIEludGVydmFsIDEgKDE1IG1pbnV0ZXMpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gbGFzdCA0IGludGVydmFscyAoMSBob3VyKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCitEYXRhIGluIGxhc3QgOTYgaW50ZXJ2YWxzICgyNCBob3Vycyk6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZWhhbnkga3Vsb25sZWdlc2ViYiBiZWFsbGl0YXNpIGxlaGV0b3NlZyAoaWRvdmVsIGJlZXB1bGhldG5layBtYWpkIGEgZHJpdmVyYmUpOgorRXpla2tlbCBzb2sgZ2FsaWJhdCBsZWhldCBva296bmksIG5hZ3lvbiBvdmF0b3NhbiBrZWxsIG9rZXQgaGFzem5hbG5pIQorCisJbW9kaWZpZWQgQ1JDLTQsIGZvciBpbXByb3ZlZCBpbnRlcndvcmtpbmcgb2YgQ1JDLTQgYW5kIG5vbi1DUkMtNAorCWRldmljZXM6IChsYXNkIHBhZ2UgMTA3IGVzIGc3MDYgQW5uZXggQikKKwkJbGJpcmVnWyAweDFiIF0gfD0gMHgwOAorCQlsYmlyZWdbIDB4MWMgXSB8PSAweGMwCisJLSBpbHllbmtvciBlcnRlbG1lemV0dCBheiBOTUYgLSAnTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIKKwk0MDAgbXNlYycgYWxhcm0uCisKKwlGQUxDIC0gYSB2b25hbGkgbWVnaGFqdG8gSUMKKwlsb2NhbCBsb29wIC0gYSBzYWphdCBhZGFzb21hdCBoYWxsamFtIHZpc3N6YQorCXJlbW90ZSBsb29wIC0gYSBraXZ1bHJvbCBqb3ZvIGFkYXN0IGFkb20gdmlzc3phCisKKwlFZ3kgaGliYWtlcmVzZXNyZSBoYXN6bmFsaGF0byBkb2xvZzoKKwkJLSAxLWVzIHRpbWVzbG90IGxvY2FsIGxvb3AgYSBGQUxDLWJhbjoJZWNobyA+bGJpcmVnIDB4MWQgMHgyMQorCQktIGxvY2FsIGxvb3Aga2lrYXBjc29sYXNhOgkJZWNobyA+bGJpcmVnIDB4MWQgMHgwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS50eHQKQEAgLTAsMCArMSwzNjkgQEAKKworU2xpY2VDT00gYWRhcHRlciB1c2VyJ3MgZG9jdW1lbnRhdGlvbiAtIGZvciB0aGUgMC41MSBkcml2ZXIgdmVyc2lvbgorCitXcml0dGVuIGJ5IEJhcnTzayBJc3R24W4gPGJhcnRva2lAaXRjLmh1PgorCitFbmdsaXNoIHRyYW5zbGF0aW9uOiBMYWthdG9zIEd59nJneSA8Z3l1cmlAaXRjLmh1PgorTW9uIERlYyAxMSAxNToyODo0MiBDRVQgMjAwMAorCitMYXN0IG1vZGlmaWVkOiBXZWQgQXVnIDI5IDE3OjI1OjM3IENFU1QgMjAwMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2FnZToKKworQ29tcGlsaW5nIHRoZSBrZXJuZWw6CisKK0NvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworCVsqXSBQcm9tcHQgZm9yIGRldmVsb3BtZW50IGFuZC9vciBpbmNvbXBsZXRlIGNvZGUvZHJpdmVycworCitOZXR3b3JrIGRldmljZSBzdXBwb3J0CisJV2FuIGludGVyZmFjZXMKKwkJPE0+IE11bHRpR2F0ZSAoQ09NWCkgc3luY2hyb25vdXMKKwkJCTxNPiBTdXBwb3J0IGZvciBNVU5JQ0ggYmFzZWQgYm9hcmRzOiBTbGljZUNPTSwgUENJQ09NIChORVcpCisJCQk8TT4gU3VwcG9ydCBmb3IgSERMQyBhbmQgc3luY1BQUC4uLgorCisKK0xvYWRpbmcgdGhlIG1vZHVsZXM6CisKK21vZHByb2JlIGNvbXgKKworbW9kcHJvYmUgY29teC1wcm90by1wcHAJCSMgbW9kdWxlIGZvciAgQ2lzY28tSERMQyBhbmQgU3luY1BQUCBwcm90b2NvbHMKKworbW9kcHJvYmUgY29teC1ody1tdW5pY2gJCSMgdGhlIG1vZHVsZSBsb2dzIGluZm9ybWF0aW9uIGJ5IHRoZSBrZXJuZWwKKwkJCQkjIGFib3V0IHRoZSBkZXRlY3RlZCBib2FyZHMKKworCitDb25maWd1cmluZyB0aGUgYm9hcmQ6CisKKyMgVGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UgdGhlIENpc2NvLUhETEMgbGluZSBwcm90b2NvbCwKKyMgdGhlIHRpbWVzbGljZXMgYXNzaWduZWQgYXJlIDEsMiAoMTI4IEtpQml0IGxpbmUgc3BlZWQpCisjICh0aGUgZmlyc3QgZGF0YSB0aW1lc2xpY2UgaW4gdGhlIEcuNzAzIGZyYW1lIGlzIG5vLiAxKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4xLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4xL2JvYXJkdHlwZQorZWNobyBoZGxjCT4vcHJvYy9jb214L2NvbXgwLjEvcHJvdG9jb2wKK2VjaG8gMSAyCT4vcHJvYy9jb214L2NvbXgwLjEvdGltZXNsb3RzCisKKworIyBUaGlzIGludGVyZmFjZSB1c2VzIFN5bmNQUFAgbGluZSBwcm90b2NvbCwgdGhlIGFzc2lnbmVkIAorIyBpcyBuby4gMyAoNjQgS2lCaXQgbGluZSBzcGVlZCkKKyMKK21rZGlyIC9wcm9jL2NvbXgvY29teDAuMi8KK2VjaG8gc2xpY2Vjb20JPi9wcm9jL2NvbXgvY29teDAuMi9ib2FyZHR5cGUKK2VjaG8gcHBwCT4vcHJvYy9jb214L2NvbXgwLjIvcHJvdG9jb2wKK2VjaG8gMwkJPi9wcm9jL2NvbXgvY29teDAuMi90aW1lc2xvdHMKKworLi4uCisKK2lmY29uZmlnIGNvbXgwLjEgdXAKK2lmY29uZmlnIGNvbXgwLjIgdXAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIENPTVggaW50ZXJmYWNlcyB1c2UgYSAxMCBwYWNrZXQgdHJhbnNtaXQgcXVldWUgYnkgZGVmYXVsdCwgaG93ZXZlciBXQU4KK25ldHdvcmtzIHNvbWV0aW1lcyB1c2UgYmlnZ2VyIHZhbHVlcyAoMjAgdG8gMTAwKSwgdG8gdXRpbGl6ZSB0aGUgbGluZSBiZXR0ZXIKK2J5IGxhcmdlIHRyYWZmaWMgKHRob3VnaCB0aGUgbGluZSBkZWxheSBpbmNyZWFzZXMgYmVjYXVzZSBvZiBtb3JlIHBhY2tldHMKK2pvaW4gdGhlIHF1ZXVlKS4KKworIyBpZmNvbmZpZyBjb214MCB0eHF1ZXVlbGVuIDUwCisKK1RoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBpZmNvbmZpZyBjb21tYW5kIG9mIHRoZSBsYXRlciAKK2Rpc3RyaWJ1dGlvbnMsIHdoaWNoIGNhbWUgd2l0aCAyLjIga2VybmVscywgc3VjaCBhcyBSZWRIYXQgNi4xIG9yIERlYmlhbiAyLjIuCisKK1lvdSBjYW4gZG93bmxvYWQgYSBuZXdlciBuZXRiYXNlIHBhY2tldCBmcm9tIAoraHR0cDovL3d3dy5kZWJpYW4ub3JnL35yY3cvMi4yL25ldGJhc2UvIGZvciBEZWJpYW4gMi4xLCB3aGljaCBoYXMgYSBuZXcKK2lmY29uZmlnLiBZb3UgY2FuIGdldCBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIDIuMiBrZXJuZWwgd2l0aAorRGViaWFuIDIuMSBmcm9tIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9yZWxlYXNlcy9zdGFibGUvcnVubmluZy1rZXJuZWwtMi4yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBTbGljZUNvbSBMRURzOgorCityZWQJLSBvbiwgaWYgdGhlIGludGVyZmFjZSBpcyB1bmNvbmZpZ3VyZWQsIG9yIGl0IGdldHMgUmVtb3RlIEFsYXJtLXMKK2dyZWVuCS0gb24sIGlmIHRoZSBib2FyZCBmaW5kcyBmcmFtZS1zeW5jIGluIHRoZSByZWNlaXZlZCBzaWduYWwgCQorCitBIGJpdCBtb3JlIGRldGFpbGVkOgorCityZWQ6CWdyZWVuOgltZWFuaW5nOgorCistCS0Jbm8gZnJhbWUtc3luYywgbm8gc2lnbmFsIHJlY2VpdmVkLCBvciBzaWduYWwgU05BRlUuCistCW9uCSJFdmVyeXRoaW5nIGlzIE9LIgorb24Jb24JUmVjZXBpb24gaXMgb2ssIGJ1dCB0aGUgcmVtb3RlIGVuZCBzZW5kcyBSZW1vdGUgQWxhcm0KK29uCS0JVGhlIGludGVyZmFjZSBpcyB1bmNvbmZpZ3VyZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBoYXJkd2FyZSBzZXR0aW5nIG9wdGlvbnM6CisKK1RoZSBnZW5lcmFsIGFuZCB0aGUgcHJvdG9jb2wgbGF5ZXIgb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlICdjb214LnR4dCcgZmlsZQorYXBwbHkgdG8gdGhlIFNsaWNlQ29tIGFzIHdlbGwsIEkgb25seSBzdW1tYXJpemUgdGhlIFNsaWNlQ29tIGhhcmR3YXJlIHNwZWNpZmljCitzZXR0aW5ncyBiZWxvdy4KKworVGhlICcvcHJvYy9jb214JyBjb25maWd1cmluZyBpbnRlcmZhY2U6CisKK0FuIGludGVyZmFjZSBkaXJlY3Rvcnkgc2hvdWxkIGJlIGNyZWF0ZWQgZm9yIGV2ZXJ5IHRpbWVzbG90IGdyb3VwIHdpdGgKKydta2RpcicsIGUsZzogJ2NvbXgwJywgJ2NvbXgxJyBldGMuIFRoZSB0aW1lc2xvdHMgY2FuIGJlIGFzc2lnbmVkIGhlcmUgdG8gdGhlCitzcGVjaWZpYyBpbnRlcmZhY2UuIFRoZSBDaXNjby1saWtlIG5hbWluZyBjb252ZW50aW9uIChzZXJpYWwzOjEgLSBmaXJzdAordGltZXNsb3QgZ3JvdXAgb2YgdGhlIDNyZC4gYm9hcmQpIGNhbid0IGJlIHVzZWQgaGVyZSwgYmVjYXVzZSB0aGVzZSBtZWFuIElQCithbGlhc2luZyBpbiBMaW51eC4KKworWW91IGNhbiBnaXZlIGFueSBtZWFuaW5nZnVsIG5hbWUgdG8ga2VlcCB0aGUgY29uZmlndXJhdGlvbiBjbGVhcjsgCitlLmc6ICdjb214MC4xJywgJ2NvbXgwLjInLCAnY29teDEuMScsIGNvbXgxLjInLCBpZiB5b3UgaGF2ZSB0d28gYm9hcmRzCit3aXRoIHR3byBpbnRlcmZhY2VzIGVhY2guCisKK1NldHRpbmdzLCB3aGljaCBhcHBseSB0byB0aGUgYm9hcmQ6CisKK05laXRoZXIgJ2lvJyBub3IgJ2lycScgc2V0dGluZ3MgcmVxdWlyZWQsIHRoZSBkcml2ZXIgdXNlcyB0aGUgcmVzb3VyY2VzCitnaXZlbiBieSB0aGUgUENJIEJJT1MuCisKK2NvbXgwL2JvYXJkbnVtCS0gYm9hcmQgbnVtYmVyIG9mIHRoZSBTbGljZUNvbSBpbiB0aGUgUEMgKHVzaW5nIHRoZSAnbmF0dXJhbCcKKwkJUENJIG9yZGVyKSBhcyBsaXN0ZWQgaW4gJy9wcm9jL3BjaScgb3IgdGhlIG91dHB1dCBvZiB0aGUKKwkgCSdsc3BjaScgY29tbWFuZCwgZ2VuZXJhbGx5IHRoZSBzbG90cyBuZWFyZXIgdG8gdGhlIG1vdGhlcmJvYXJkCisJCVBDSSBkcml2ZXIgY2hpcHMgaGF2ZSB0aGUgbG93ZXIgbnVtYmVycy4KKwkJCisJCURlZmF1bHQ6IDAgKHRoZSBjb3VudGluZyBzdGFydHMgd2l0aCAwKQorCitUaG91Z2ggdGhlIG9wdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNldCBvbiBhIHNpbmdsZSBpbnRlcmZhY2UsIHRoZXkgYXBwbHkgdG8gdGhlCit3aG9sZSBib2FyZC4gVGhlIHJlc3RyaWN0aW9uLCB0byB1c2UgdGhlbSBvbiAnVVAnIGludGVyZmFjZXMsIGlzIGJlY2F1c2UgdGhlIAorY29tbWFuZCBzZXF1ZW5jZSBiZWxvdyBjb3VsZCBsZWFkIHRvIHVucHJlZGljYWJsZSByZXN1bHRzLgorCisJIyBlY2hvIDAgICAgICAgID5ib2FyZG51bQorCSMgZWNobyBpbnRlcm5hbCA+Y2xvY2tfc291cmNlCisJIyBlY2hvIDEgICAgICAgID5ib2FyZG51bQorCitUaGUgc2VxdWVuY2Ugd291bGQgc2V0IHRoZSBjbG9jayBzb3VyY2Ugb2YgYm9hcmQgMC4KKworVGhlc2Ugc2V0dGluZ3Mgd2lsbCBwZXJzaXN0IGFmdGVyIGFsbCB0aGUgaW50ZXJmYWNlcyBhcmUgY2xlYXJlZCwgYnV0IGFyZQorY2xlYXJlZCB3aGVuIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHVubG9hZGVkIGFuZCBsb2FkZWQgYWdhaW4uCisKK2NvbXgwL2Nsb2NrX3NvdXJjZSAtIHNvdXJjZSBvZiB0aGUgdHJhbnNtaXQgY2xvY2sKKwlVc2FnZToKKworCSMgZWNobyBsaW5lICAgICA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKwkjIGVjaG8gaW50ZXJuYWwgPi9wcm9jL2NvbXgvY29teDAvY2xvY2tfc291cmNlCisKKwlsaW5lCS0gVGhlIFR4IGNsb2NrIGlzIGJlaW5nIGRlY29kZWQgaWYgdGhlIGlucHV0IGRhdGEgc3RyZWFtLAorCQlpZiBubyBjbG9jayBzZWVuIG9uIHRoZSBpbnB1dCwgdGhlbiB0aGUgYm9hcmQgd2lsbCB1c2UgaXQncworCQlvd24gY2xvY2sgZ2VuZXJhdG9yLgorCisJaW50ZXJuYWwgLSBUaGUgVHggY2xvY2sgaXMgc3VwcGxpZWQgYnkgdGhlIGJ1aWx0aW4gY2xvY2sgZ2VuZXJhdG9yLiAJCisKKwlEZWZhdWx0OiBsaW5lCisKKwlOb3JtYWxseSwgdGhlIHRlbGVjb21tdW5pY2F0aW9uIGNvbXBhbnkncyBlbmQgZGV2aWNlICh0aGUgSERTTAorCW1vZGVtKSBwcm92aWRlcyB0aGUgVHggY2xvY2ssIHRoYXQncyB3aHkgJ2xpbmUnIGlzIHRoZSBkZWZhdWx0LgorCitjb214MC9mcmFtaW5nCS0gU3dpdGNoaW5nIENSQzQgb2ZmL29uCisKKwlDUkM0OiAxNiBQQ00gZnJhbWVzIChUaGUgMzIgNjRLaWJpdCBjaGFubmVscyBhcmUgbXVsdGlwbGV4ZWQgaW50byBhCisJUENNIGZyYW1lLCBub3RoaW5nIHRvIGRvIHdpdGggSERMQyBmcmFtZXMpIGFyZSBkaXZpZGVkIGludG8gMng4CisJZ3JvdXBzLCBlYWNoIGdyb3VwIGhhcyBhIDQgYml0IENSQy4KKworCSMgZWNobyBjcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKwkjIGVjaG8gbm8tY3JjNAk+L3Byb2MvY29teC9jb214MC9mcmFtaW5nCisKKwlEZWZhdWx0IGlzICdjcmM0JywgdGhlIEh1bmdhcmlhbiBNQVRBViBsaW5lcyBiZWhhdmUgbGlrZSB0aGlzLiAKKwlUaGUgdHJhZmZpYyBnZW5lcmFsbHkgcGFzc2VzIGlmIHRoaXMgc2V0dGluZyBvbiBib3RoIGVuZHMgZG9uJ3QgbWF0Y2guCisKK2NvbXgwL2xpbmVjb2RlCS0gU2V0dGluZyB0aGUgbGluZSBjb2RpbmcKKworCSMgZWNobyBoZGIzCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisJIyBlY2hvIGFtaQk+L3Byb2MvY29teC9jb214MC9saW5lY29kZQorCisJRGVmYXVsdCBhICdoZGIzJywgTUFUQVYgbGluZXMgdXNlIHRoaXMuCisJCisJKEFNSSBjb2RpbmcgaXMgcmFyZWx5IHVzZWQgd2l0aCBFMSBsaW5lcykuIEZyYW1lIHN5bmMgbWF5IG9jY3VyLCBpZgorCXRoaXMgc2V0dGluZyBkb2Vzbid0IG1hdGNoIHRoZSBvdGhlciBlbmQncywgYnV0IENSQzQgYW5kIGRhdGEgZXJyb3JzCisJd2lsbCBjb21lLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBDUkMgZXJyb3JzIG9uIEhETEMvU3luY1BQUCBsZXZlbC4gCisKK2NvbXgwL3JlZwktIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGJvYXJkJ3MgTVVOSUNIIChyZWcpIGFuZCBGQUxDIChsYmlyZWcpCitjb214MC9sYmlyZWcJY2lyY3VpdCdzIHJlZ2lzdGVycyAgCisKKwkjIGVjaG8gPnJlZyAweDA0IDB4MAktIHdyaXRlIDAgdG8gcmVnaXN0ZXIgNAorCSMgZWNobyA+cmVnIDB4MTA0CS0gd3JpdGUgdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVyIDQgd2l0aAorCQkJCXByaW50aygpIHRvIHN5c2xvZworCitXQVJOSU5HISBUaGVzZSBhcmUgb25seSBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMsIG1lc3Npbmcgd2l0aCB0aGlzIHdpbGwKKwlyZXN1bHQgbXVjaCB0cm91YmxlIQorCitjb214MC9sb29wYmFjayAtIFBsYWNlcyBhIGxvb3AgdG8gdGhlIGJvYXJkJ3MgRy43MDMgc2lnbmFscworCisJIyBlY2hvIG5vbmUgICA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCSMgZWNobyBsb2NhbCAgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKwkjIGVjaG8gcmVtb3RlID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisKKwlub25lICAgLSBub3JtYWwgb3BlcmF0aW9uLCBubyBsb29wCisJbG9jYWwgIC0gdGhlIGJvYXJkIHJlY2VpdmVzIGl0J3Mgb3duIG91dHB1dAorCXJlbW90ZSAtIHRoZSBib2FyZCBzZW5kcyB0aGUgcmVjZWl2ZWQgZGF0YSB0byB0aGUgcmVtb3RlIHNpZGUKKworCURlZmF1bHQ6IG5vbmUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50ZXJmYWNlIChjaGFubmVsIGdyb3VwIGluIENpc2NvIHRlcm1zKSBzZXR0aW5nczogCisKK2NvbXgwL3RpbWVzbG90cwktIHdoaWNoIHRpbWVzbG90cyBiZWxvbmcgdG8gdGhlIGdpdmVuIGludGVyZmFjZQorCisJU2V0dGluZzoKKworCSMgZWNobyAnMSA1IDIgNiA3IDgnID4vcHJvYy9jb214L2NvbXgwL3RpbWVzbG90cworCisJIyBjYXQgL3Byb2MvY29teC9jb214MC90aW1lc2xvdHMKKwkxIDIgNSA2IDcgOCAKKwkjCisKKwlGaW5kaW5nIGEgdGltZXNsb3Q6IAorCisJIyBncmVwICcgNCcgL3Byb2MvY29teC9jb214Ki90aW1lc2xvdHMKKwkvcHJvYy9jb214L2NvbXgwL3RpbWVzbG90czoxIDMgNCA1IDYKKwkjCisKKwlUaGUgdGltZXNsb3RzIGNhbiBiZSBpbiBhbnkgb3JkZXIsICcxIDIgMycgaXMgdGhlIHNhbWUgYXMgJzEgMyAyJy4KKworCVRoZSBpbnRlcmZhY2UgaGFzIHRvIGJlIERPV04gZHVyaW5nIHRoZSBzZXR0aW5nICgnaWZjb25maWcgY29teDAKKwlkb3duJyksIGJ1dCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBjb3VsZCBvcGVyYXRlIG5vcm1hbGx5LgorCisJVGhlIGRyaXZlciBjaGVja3MgaWYgdGhlIGFzc2lnbmVkIHRpbWVzbG90cyBhcmUgdmFjYW50LCBpZiBub3QsIHRoZW4KKwl0aGUgc2V0dGluZyB3b24ndCBiZSBhcHBsaWVkLgorCisJVGhlIHRpbWVzbG90IHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBkZWNpbWFsIG51bWJlcnMsIG5vdCB0byBtaXN1bmRlcnN0YW5kCisJdmFsdWVzIG9mIDA4LCAwOSBmb3JtLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVja2luZyB0aGUgaW50ZXJmYWNlIGFuZCBib2FyZCBzdGF0dXM6CisKKy0gTGluZXMgYmVnaW5uaW5nIHdpdGggJyAnIChzcGFjZSkgYmVsb25nIHRvIHRoZSBvcmlnaW5hbCBvdXRwdXQsIHRoZSBsaW5lcword2hpY2ggYmVnaW4gd2l0aCAnLy8nIGFyZSB0aGUgY29tbWVudHMuCisKKyBwYXBheWE6fiQgY2F0IC9wcm9jL2NvbXgvY29teDEvc3RhdHVzCisgSW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlIHN0YXR1cyBpcyBVUCwgbW9kZW0gc3RhdHVzIGlzIFVQLCBwcm90b2NvbCBpcyBVUAorIE1vZGVtIHN0YXR1cyBjaGFuZ2VzOiAwLCBUcmFuc21pdHRlciBzdGF0dXMgaXMgSURMRSwgdGJ1c3k6IDAKKyBJbnRlcmZhY2UgbG9hZCAoaW5wdXQpOiA5NzgzNzYgLyA5NDc4MDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgICAgICAgICAgICAgICAob3V0cHV0KTogOTc4Mzc2IC8gOTQ3ODQ4IC8gOTUxMDI0IGJpdHMvcyAoNXMvNW0vMTVtKQorIERlYnVnIGZsYWdzOiBub25lCisgUlggZXJyb3JzOiBsZW46IDIyLCBvdmVycnVuOiAxLCBjcmM6IDAsIGFib3J0czogMAorICAgICAgICAgICAgYnVmZmVyIG92ZXJydW46IDAsIHBidWZmZXIgb3ZlcnJ1bjogMAorIFRYIGVycm9yczogdW5kZXJydW46IDAKKyBMaW5lIGtlZXBhbGl2ZSAodmFsdWU6IDEwKSBzdGF0dXMgVVAgWzBdCisKKy8vIFRoZSBoYXJkd2FyZSBzcGVjaWZpYyBwYXJ0IHN0YXJ0cyBoZXJlOgorIENvbnRyb2xsZXIgc3RhdHVzOgorICAgICAgICAgTm8gYWxhcm1zCisKKy8vIEFsYXJtOiAKKy8vCisvLyBObyBhbGFybXMgLSBFdmVyeXRoaW5nIE9LCisvLworLy8gTE9TICAtIExvc3MgT2YgU2lnbmFsIC0gTm8gc2lnbmFsIHNlbnNlZCBvbiB0aGUgaW5wdXQKKy8vIEFJUyAgLSBBbGFybSBJbmRpY2F0aW9uIFNpZ25hbCAtIFRoZSByZW1vdCBzaWRlIHNlbmRzICcxMTExMTExMSctcywgCisvLwlpdCB0ZWxscywgdGhhdCB0aGVyZSdzIGFuIGVycm9yIGNvbmRpdGlvbiwgb3IgaXQncyBub3QKKy8vCWluaXRpYWxpc2VkLgorLy8gQVVYUCAtIEF1eGlsaWFyeSBQYXR0ZXJuIEluZGljYXRpb24gLSAwMTAxMDEwMS4uIHJlY2VpdmVkLgorLy8gTEZBICAtIExvc3Mgb2YgRnJhbWUgQWxpZ25tZW50IC0gbm8gZnJhbWUgc3luYyByZWNlaXZlZC4KKy8vIFJSQSAgLSBSZWNlaXZlIFJlbW90ZSBBbGFybSAtIHRoZSByZW1vdGUgZW5kJ3MgT0ssIGJ1dCBzaW5nbmFscyBlcnJvciBjb25kLgorLy8gTE1GQSAtIExvc3Mgb2YgQ1JDNCBNdWx0aWZyYW1lIEFsaWdubWVudCAtIG5vIENSQzQgbXVsdGlmcmFtZSBzeW5jLgorLy8gTk1GICAtIE5vIE11bHRpZnJhbWUgYWxpZ25tZW50IEZvdW5kIGFmdGVyIDQwMCBtc2VjIC0gbm8gc3VjaCBhbGFybSB1c2luZworLy8Jbm8tY3JjNCBvciBjcmM0IGZyYW1pbmcsIHNlZSBiZWxvdy4KKy8vCisvLyBPdGhlciBwb3NzaWJsZSBlcnJvciBtZXNzYWdlczoKKy8vCisvLyBUcmFuc21pdCBMaW5lIFNob3J0IC0gdGhlIGJvYXJkIGZlbHQsIHRoYXQgaXQncyBvdXRwdXQgaXMgc2hvcnQtY2lyY3VpdGVkLAorLy8gCXNvIGl0IHN3aXRjaGVkIHRoZSB0cmFuc21pc3Npb24gb2ZmLiAoVGhlIGJvYXJkIGNhbid0IGRlZmluaXRlbHkgdGVsbCwKKy8vCXRoYXQgaXQncyBvdXRwdXQgaXMgc2hvcnQtY2lyY3VpdGVkLikKKworLy8gQ2hhaW5lZCBsaXN0IG9mIHRoZSByZWNlaXZlZCBwYWNrZXRzLCBmb3IgZGVidWcgcHVycG9zZXM6CisKKyBSeCByaW5nOgorICAgICAgICAgcmFmdXRvdHQ6IDAKKyAgICAgICAgIGxhc3RjaGVjazogNTA4NDU3MzEsIGppZmZpZXM6IDUxMzE0MjgxCisgICAgICAgICBiYXNlOiAwMTdiMTg1OAorICAgICAgICAgcnhfZGVzY19wdHI6IDAKKyAgICAgICAgIHJ4X2Rlc2NfcHRyOiAwMTdiMTg1OAorICAgICAgICAgaHdfY3Vycl9wdHI6IDAxN2IxODU4CisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg2OCAwMTdiMTg5OCBjMDE2ZmYwMAorICAgICAgICAgMDYwNDAwMDAgMDE3YjE4NzggMDE3YjFlOWMgYzAxNmZmMDAKKyAgICAgICAgIDQ2MDQwMDAwIDAxN2IxODg4IDAxN2IyNGEwIGMwMTZmZjAwCisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg1OCAwMTdiMmFhNCBjMDE2ZmYwMAorCisvLyBBbGwgdGhlIGludGVyZmFjZXMgdXNpbmcgdGhlIGJvYXJkOiBjb214MSwgdXNpbmcgdGhlIDEsMiwuLi4xNiB0aW1lc2xvdHMsCisvLyBjb214MiwgdXNpbmcgdGltZXNsb3QgMTcsIGV0Yy4KKworIEludGVyZmFjZXMgdXNpbmcgdGhpcyBib2FyZDogKGNoYW5uZWwtZ3JvdXAsIGludGVyZmFjZSwgdGltZXNsb3RzKQorICAgICAgICAgIDAgY29teDE6IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2CisgICAgICAgICAgMSBjb214MjogMTcKKyAgICAgICAgICAyIGNvbXgzOiAxOAorICAgICAgICAgIDMgY29teDQ6IDE5CisgICAgICAgICAgNCBjb214NTogMjAKKyAgICAgICAgICA1IGNvbXg2OiAyMQorICAgICAgICAgIDYgY29teDc6IDIyCisgICAgICAgICAgNyBjb214ODogMjMKKyAgICAgICAgICA4IGNvbXg5OiAyNAorICAgICAgICAgIDkgY29teDEwOiAyNQorICAgICAgICAgMTAgY29teDExOiAyNgorICAgICAgICAgMTEgY29teDEyOiAyNworICAgICAgICAgMTIgY29teDEzOiAyOAorICAgICAgICAgMTMgY29teDE0OiAyOQorICAgICAgICAgMTQgY29teDE1OiAzMAorICAgICAgICAgMTUgY29teDE2OiAzMQorCisvLyBUaGUgbnVtYmVyIG9mIGV2ZW50cyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIgZHVyaW5nIGFuIGludGVycnVwdCBjeWNsZToKKworIEludGVycnVwdCB3b3JrIGhpc3RvZ3JhbToKKyBoaXN0WyAwXTogICAgICAgIDAgaGlzdFsgMV06ICAgICAgICAyIGhpc3RbIDJdOiAgICAxODU3NCBoaXN0WyAzXTogICAgICAgNzkKKyBoaXN0WyA0XTogICAgICAgMTQgaGlzdFsgNV06ICAgICAgICAxIGhpc3RbIDZdOiAgICAgICAgMCBoaXN0WyA3XTogICAgICAgIDEKKyBoaXN0WyA4XTogICAgICAgIDAgaGlzdFsgOV06ICAgICAgICA3CisKKy8vIFRoZSBudW1iZXIgb2YgcGFja2V0cyB0byBzZW5kIGluIHRoZSBUeCByaW5nLCB3aGVuIGEgbmV3IG9uZSBhcnJpdmVkOgorCisgVHggcmluZyBoaXN0b2dyYW06CisgaGlzdFsgMF06ICAgICAyMzI5IGhpc3RbIDFdOiAgICAgICAgMCBoaXN0WyAyXTogICAgICAgIDAgaGlzdFsgM106ICAgICAgICAwCisKKy8vIFRoZSBlcnJvciBjb3VudGVycyBvZiB0aGUgRTEgaW50ZXJmYWNlLCBhY2NvcmRpbmcgdG8gdGhlIFJGQzI0OTUsCisvLyAoc2ltaWxhciB0byB0aGUgQ2lzY28gInNob3cgY29udHJvbGxlcnMgZTEiIGNvbW1hbmQncyBvdXRwdXQ6CisvLyBodHRwOi8vd3d3LmNpc2NvLmNvbS91bml2ZXJjZC9jYy90ZC9kb2MvcHJvZHVjdC9zb2Z0d2FyZS9pb3MxMS9yYm9vay9yaW50ZXJmYy5odG0jeHRvY2lkMjU2NjkxMjYpCisKK0RhdGEgaW4gY3VycmVudCBpbnRlcnZhbCAoOTEgc2Vjb25kcyBlbGFwc2VkKToKKyAgIDk1MTYgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDY1IFBhdGggQ29kZSBWaW9sYXRpb25zLCAyIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDIgRnIgTG9zcyBTZWNzLCAyIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAxMSBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gSW50ZXJ2YWwgMSAoMTUgbWludXRlcyk6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworRGF0YSBpbiBsYXN0IDQgaW50ZXJ2YWxzICgxIGhvdXIpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gbGFzdCA5NiBpbnRlcnZhbHMgKDI0IGhvdXJzKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWUgdW5pcXVlIG9wdGlvbnMsIChtYXkgZ2V0IGludG8gdGhlIGRyaXZlciBsYXRlcik6CitUcmVhdCB0aGVtIHZlcnkgY2FyZWZ1bGx5LCB0aGVzZSBjYW4gY2F1c2UgbXVjaCB0cm91YmxlIQorCisJbW9kaWZpZWQgQ1JDLTQsIGZvciBpbXByb3ZlZCBpbnRlcndvcmtpbmcgb2YgQ1JDLTQgYW5kIG5vbi1DUkMtNAorCWRldmljZXM6IChzZWUgcGFnZSAxMDcgYW5kIGc3MDYgQW5uZXggQikKKwkJbGJpcmVnWyAweDFiIF0gfD0gMHgwOAorCQlsYmlyZWdbIDB4MWMgXSB8PSAweGMwCisKKwktIFRoZSBOTUYgLSAnTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIgNDAwIG1zZWMnIGFsYXJtIAorCWNvbWVzIGludG8gYWNjb3VudC4KKworCUZBTEMgLSB0aGUgbGluZSBkcml2ZXIgY2hpcC4KKwlsb2NhbCBsb29wIC0gSSBoZWFyIG15IHRyYW5zbWlzc2lvbiBiYWNrLgorCXJlbW90ZSBsb29wIC0gSSBlY2hvIHRoZSByZW1vdGUgdHJhbnNtaXNzaW9uIGJhY2suCisKKwlTb21ldGhpbmcgdXNlZnVsIGZvciBmaW5kaW5nIGVycm9yczoKKwkKKwkJLSBsb2NhbCBsb29wIGZvciB0aW1lc2xvdCAxIGluIHRoZSBGQUxDIGNoaXA6CisKKwkjIGVjaG8gPmxiaXJlZyAweDFkIDB4MjEKKworCQktIFN3aXRoaW5nIHRoZSBsb29wIG9mZjoKKworCSMgZWNobyA+bGJpcmVnIDB4MWQgMHgwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtYzkudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtYzkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTE1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jOS50eHQKQEAgLTAsMCArMSw0MiBAQAorCitTTUMgOXh4eHggRHJpdmVyIAorUmV2aXNpb24gMC4xMiAKKzMvNS85NgorQ29weXJpZ2h0IDE5OTYgIEVyaWsgU3RhaGxtYW4gCitSZWxlYXNlZCB1bmRlciB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIAorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIGluc3RydWN0aW9ucyBhbmQgY2F2ZWF0cyBmb3IgbXkgU01DOXh4eCBkcml2ZXIuICBZb3UKK3Nob3VsZCBub3QgYmUgdXNpbmcgdGhlIGRyaXZlciB3aXRob3V0IHJlYWRpbmcgdGhpcyBmaWxlLiAgCisKK1RoaW5ncyB0byBub3RlIGFib3V0IGluc3RhbGxhdGlvbjoKKworICAxLiBUaGUgZHJpdmVyIHNob3VsZCB3b3JrIG9uIGFsbCBrZXJuZWxzIGZyb20gMS4yLjEzIHVudGlsIDEuMy43MS4KKwkoQSBrZXJuZWwgcGF0Y2ggaXMgc3VwcGxpZWQgZm9yIDEuMy43MSApCisKKyAgMi4gSWYgeW91IGluY2x1ZGUgdGhpcyBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtaWdodCBuZWVkIHRvIGNoYW5nZSBzb21lCisJb3B0aW9ucywgc3VjaCBhcyBmb3IgZm9yY2luZyBJUlEuICAgCisKKyAKKyAgMy4gIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIHJ1biAnbWFrZScgLiAgIAorCU1ha2Ugd2lsbCBnaXZlIHlvdSB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBmb3IgdmFyaW91cyBrZXJuZWwgc3VwcG9ydC4KKyAKKyAgNC4gIExvYWRpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSA6CisKKwl1c2U6ICAgaW5zbW9kIHNtYzkxOTQubyAKKwlvcHRpb25hbCBwYXJhbWV0ZXJzOgorCQlpbz14eHh4ICAgIDogeW91ciBiYXNlIGFkZHJlc3MKKwkJaXJxPXh4CSAgIDogeW91ciBpcnEgCisJCWlmcG9ydD14ICAgOgkwIGZvciB3aGF0ZXZlciBpcyBkZWZhdWx0CisJCQkJMSBmb3IgdHdpc3RlZCBwYWlyCisJCQkJMiBmb3IgQVVJICAoIG9yIEJOQyBvbiBzb21lIGNhcmRzICkKKworSG93IHRvIG9idGFpbiB0aGUgbGF0ZXN0IHZlcnNpb24/IAorCQorRlRQOiAgCisJZnRwOi8vZmVucmlzLmNhbXB1cy52dC5lZHUvc21jOS9zbWM5LTEyLnRhci5negorCWZ0cDovL3NmYm94LnZ0LmVkdS9maWxlYm94L0YvZmVucmlzL3NtYzkvc21jOS0xMi50YXIuZ3ogCisgICAKKworQ29udGFjdGluZyBtZToKKyAgICBlcmlrQG1haWwudnQuZWR1CisgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jdHIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtY3RyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzg2NmY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NtY3RyLnR4dApAQCAtMCwwICsxLDY2IEBACitUZXh0IEZpbGUgZm9yIHRoZSBTTUMgVG9rZW5DYXJkIFRva2VuUmluZyBMaW51eCBkcml2ZXIgKHNtY3RyLmMpLgorICAgICAgICBCeSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitUaGUgTGludXggU01DIFRva2VuIFJpbmcgZHJpdmVyIHdvcmtzIHdpdGggdGhlIFNNQyBUb2tlbkNhcmQgRWxpdGUgKDgxMTVUKSAKK0lTQSBhbmQgU01DIFRva2VuQ2FyZCBFbGl0ZS9BICg4MTE1VC9BKSBNQ0EgYWRhcHRlcnMuCisKK0xhdGVzdCBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmUgb2J0YWluZWQgb24gdGhlIExpbnV4LVNOQSBXV1cgc2l0ZS4KK1BsZWFzZSBwb2ludCB5b3VyIGJyb3dzZXIgdG86IGh0dHA6Ly93d3cubGludXgtc25hLm9yZworCitUaGlzIGRyaXZlciBpcyByYXRoZXIgc2ltcGxlIHRvIHVzZS4gU2VsZWN0IFkgdG8gVG9rZW4gUmluZyBhZGFwdGVyIHN1cHBvcnQKK2luIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQSBjaG9pY2UgZm9yIFNNQyBUb2tlbiBSaW5nIGFkYXB0ZXJzIHdpbGwKK2FwcGVhci4gVGhpcyBkcml2ZXMgc3VwcG9ydHMgYWxsIFNNQyBJU0EvTUNBIGFkYXB0ZXJzLiBDaG9vc2UgdGhpcworb3B0aW9uLiBJIHBlcnNvbmFsbHkgcmVjb21tZW5kIGNvbXBpbGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlIChNKSwgYnV0IGlmIHlvdQoreW91IHdvdWxkIGxpa2UgdG8gY29tcGlsZSBpdCBzdGF0aWNseSBhbnN3ZXIgWSBpbnN0ZWFkLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBhZGFwdGVycyB3aXRob3V0IHRoZSBuZWVkIHRvIGxvYWQgbXVsdGlwbGUgY29waWVzCitvZiB0aGUgZHJpdmVyLiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gbG9hZCB1cCB0byA3IGFkYXB0ZXJzIHdpdGhvdXQgYW55IGtlcm5lbAorbW9kaWZpY2F0aW9ucywgaWYgeW91IGFyZSBpbiBuZWVkIG9mIG1vcmUgcGxlYXNlIGNvbnRhY3QgdGhlIG1haW50YWluZXIgb2YgdGhpcworZHJpdmVyLgorCitMb2FkIHRoZSBkcml2ZXIgZWl0aGVyIGJ5IGxpbG8vbG9hZGxpbiBvciBhcyBhIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSB1c2luZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIHdpbGwgc3VmZmljZSBmb3IgbW9zdDoKKworIyBtb2Rwcm9iZSBzbWN0cgorc21jdHIuYzogdjEuMDAgMTIvNi85OSBieSBqc2NobHN0QHNhbWJhLm9yZwordHIwOiBTTUMgVG9rZW5DYXJkIDgxMTVUIGF0IElvIDB4MzAwLCBJcnEgMTAsIFJvbSAweGQ4MDAwLCBSYW0gMHhjYzAwMC4KKworTm93IGp1c3Qgc2V0dXAgdGhlIGRldmljZSB2aWEgaWZjb25maWcgYW5kIHNldCBhbmQgcm91dGVzIHlvdSBtYXkgaGF2ZS4gQWZ0ZXIKK3RoaXMgeW91IGFyZSByZWFkeSB0byBzdGFydCBzZW5kaW5nIHNvbWUgdG9rZW5zLgorCitFcnJhdGE6CisxKS4gRm9yIGFueW9uZSB3b25kZXJpbmcgd2hlcmUgdG8gcGljayB1cCB0aGUgU01DIGFkYXB0ZXJzIHBsZWFzZSBicm93c2UKKyAgICB0byBodHRwOi8vd3d3LnNtYy5jb20KKworMikuIElmIHlvdSBhcmUgdGhlIGZpcnN0L29ubHkgVG9rZW4gUmluZyBDbGllbnQgb24gYSBUb2tlbiBSaW5nIExBTiwgcGxlYXNlCisgICAgc3BlY2lmeSB0aGUgcmluZ3NwZWVkIHdpdGggdGhlIHJpbmdzcGVlZD1bNC8xNl0gbW9kdWxlIG9wdGlvbi4gSWYgbm8KKyAgICByaW5nc3BlZWQgaXMgc3BlY2lmaWVkIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGF1dG9kZXRlY3QgdGhlIHJpbmcKKyAgICBzcGVlZCBhbmQvb3IgaWYgdGhlIGFkYXB0ZXIgaXMgdGhlIGZpcnN0L29ubHkgc3RhdGlvbiBvbiB0aGUgcmluZyB0YWtlCisgICAgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbnMuIAorCisgICAgTk9URTogRGVmYXVsdCByaW5nIHNwZWVkIGlzIDE2TUIgVVRQLgorCiszKS4gUG5QIHN1cHBvcnQgZm9yIHRoaXMgYWRhcHRlciBzdWNrcy4gSSByZWNvbW1lbmQgaGFyZCBzZXR0aW5nIHRoZSAKKyAgICBJTy9NRU0vSVJRIGJ5IHRoZSBqdW1wZXJzIG9uIHRoZSBhZGFwdGVyLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZQorICAgIGxvYWQgdGhlIG1vZHVsZSB3aXRoIHRoZSBmb2xsb3dpbmcgaW89W2lvYWRkcl0gbWVtPVttZW1fYWRkcl0KKyAgICBpcnE9W2lycV9udW1dLgorCisgICAgVGhlIGZvbGxvd2luZyBJUlEsIElPLCBhbmQgTUVNIHNldHRpbmdzIGFyZSBzdXBwb3J0ZWQuCisKKyAgICBJTyBwb3J0czoKKyAgICAweDIwMCwgMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODAsIDB4MkEwLCAweDJDMCwgMHgyRTAsIDB4MzAwLAorICAgIDB4MzIwLCAweDM0MCwgMHgzNjAsIDB4MzgwLgorCisgICAgSVJRczoKKyAgICAyLCAzLCA0LCA1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1CisKKyAgICBNZW1vcnkgYWRkcmVzc2VzOgorICAgIDB4QTAwMDAsIDB4QTQwMDAsIDB4QTgwMDAsIDB4QUMwMDAsIDB4QjAwMDAsIDB4QjQwMDAsCisgICAgMHhCODAwMCwgMHhCQzAwMCwgMHhDMDAwMCwgMHhDNDAwMCwgMHhDODAwMCwgMHhDQzAwMCwKKyAgICAweEQwMDAwLCAweEQ0MDAwLCAweEQ4MDAwLCAweERDMDAwLCAweEUwMDAwLCAweEU0MDAwLAorICAgIDB4RTgwMDAsIDB4RUMwMDAsIDB4RjAwMDAsIDB4RjQwMDAsIDB4RjgwMDAsIDB4RkMwMDAKKworVGhpcyBkcml2ZXIgaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJdHMgRmlybXdhcmUgaW1hZ2UgaXMKK2luY2x1ZGVkIGFzIGFuIGluaXRpYWxpemVkIEMtYXJyYXkgYW5kIGlzIGxpY2Vuc2VkIGJ5IFNNQyB0byB0aGUgTGludXgKK3VzZXJzIG9mIHRoaXMgZHJpdmVyLiBIb3dldmVyIG5vIHdhcnJhbnR5IGFib3V0IGl0cyBmaXRuZXNzIGlzIGV4cHJlc3NlZCBvcgoraW1wbGllZCBieSBTTUMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzQ5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGNwLnR4dApAQCAtMCwwICsxLDM5IEBACitIb3cgdGhlIG5ldyBUQ1Agb3V0cHV0IG1hY2hpbmUgW255aV0gd29ya3MuCisKKworRGF0YSBpcyBrZXB0IG9uIGEgc2luZ2xlIHF1ZXVlLiBUaGUgc2tiLT51c2VycyBmbGFnIHRlbGxzIHVzIGlmIHRoZSBmcmFtZSBpcworb25lIHRoYXQgaGFzIGJlZW4gcXVldWVkIGFscmVhZHkuIFRvIGFkZCBhIGZyYW1lIHdlIHRocm93IGl0IG9uIHRoZSBlbmQuIEFjaword2Fsa3MgZG93biB0aGUgbGlzdCBmcm9tIHRoZSBzdGFydC4KKworV2Uga2VlcCBhIHNldCBvZiBjb250cm9sIGZsYWdzCisKKworCXNrLT50Y3BfcGVuZF9ldmVudAorCisJCVRDUF9QRU5EX0FDSwkJCUFjayBuZWVkZWQKKwkJVENQX0FDS19OT1cJCQlOZWVkZWQgbm93CisJCVRDUF9XSU5ET1cJCQlXaW5kb3cgdXBkYXRlIGNoZWNrCisJCVRDUF9XSU5aRVJPCQkJWmVybyBwcm9iaW5nCisKKworCXNrLT50cmFuc21pdF9xdWV1ZQkJVGhlIHRyYW5zbWlzc2lvbiBmcmFtZSBiZWdpbgorCXNrLT50cmFuc21pdF9uZXcJCUZpcnN0IG5ldyBmcmFtZSBwb2ludGVyCisJc2stPnRyYW5zbWl0X2VuZAkJV2hlcmUgdG8gYWRkIGZyYW1lcworCisJc2stPnRjcF9sYXN0X3R4X2FjawkJTGFzdCBhY2sgc2VlbgorCXNrLT50Y3BfZHVwX2FjawkJCUR1cCBhY2sgY291bnQgZm9yIGZhc3QgcmV0cmFuc21pdAorCisKK0ZyYW1lcyBhcmUgcXVldWVkIGZvciBvdXRwdXQgYnkgdGNwX3dyaXRlLiBXZSBkbyBvdXIgYmVzdCB0byBzZW5kIHRoZSBmcmFtZXMKK29mZiBpbW1lZGlhdGVseSBpZiBwb3NzaWJsZSwgYnV0IG90aGVyd2lzZSBxdWV1ZSBhbmQgY29tcHV0ZSB0aGUgYm9keQorY2hlY2tzdW0gaW4gdGhlIGNvcHkuIAorCitXaGVuIGEgd3JpdGUgaXMgZG9uZSB3ZSB0cnkgdG8gY2xlYXIgYW55IHBlbmRpbmcgZXZlbnRzIGFuZCBwaWdneSBiYWNrIHRoZW0uCitJZiB0aGUgd2luZG93IGlzIGZ1bGwgd2UgcXVldWUgZnVsbCBzaXplZCBmcmFtZXMuIE9uIHRoZSBmaXJzdCB0aW1lb3V0IGluCit6ZXJvIHdpbmRvdyB3ZSBzcGxpdCB0aGlzLgorCitPbiBhIHRpbWVyIHdlIHdhbGsgdGhlIHJldHJhbnNtaXQgbGlzdCB0byBzZW5kIGFueSByZXRyYW5zbWl0cywgdXBkYXRlIHRoZQorYmFja29mZiB0aW1lcnMgZXRjLiBBIGNoYW5nZSBvZiByb3V0ZSB0YWJsZSBzdGFtcCBjYXVzZXMgYSBjaGFuZ2Ugb2YgaGVhZGVyCithbmQgcmVjb21wdXRlLiBXZSBhZGQgYW55IG5ldyB0Y3AgbGV2ZWwgaGVhZGVycyBhbmQgcmVmaW5pc2ggdGhlIGNoZWNrc3VtCitiZWZvcmUgc2VuZGluZy4gCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bGFuLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZhYTViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0CkBAIC0wLDAgKzEsMTE3IEBACisoQykgMTk5Ny0xOTk4IENhbGRlcmEsIEluYy4KKyhDKSAxOTk4IEphbWVzIEJhbmtzCisoQykgMTk5OS0yMDAxIFRvcmJlbiBNYXRoaWFzZW4gPHRtbUBpbWFnZS5kaywgdG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tPgorCitGb3IgZHJpdmVyIGluZm9ybWF0aW9uL3VwZGF0ZXMgdmlzaXQgaHR0cDovL29wZW5zb3VyY2UuY29tcGFxLmNvbQorCisKK1RMQU4gZHJpdmVyIGZvciBMaW51eCwgdmVyc2lvbiAxLjE0YQorUkVBRE1FCisKKworSS4gIFN1cHBvcnRlZCBEZXZpY2VzLgorCisgICAgT25seSBQQ0kgZGV2aWNlcyB3aWxsIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KKworICAgIFN1cHBvcnRlZDoKKyAgICBWZW5kb3IgSUQJRGV2aWNlIElECU5hbWUKKyAgICAwZTExCWFlMzIJCUNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggUENJIFVUUAorICAgIDBlMTEJYWUzNAkJQ29tcGFxIE5ldGVsbGlnZW50IDEwIFQgUENJIFVUUAorICAgIDBlMTEJYWUzNQkJQ29tcGFxIEludGVncmF0ZWQgTmV0RmxleCAzL1AKKyAgICAwZTExCWFlNDAJCUNvbXBhcSBOZXRlbGxpZ2VudCBEdWFsIDEwLzEwMCBUWCBQQ0kgVVRQCisgICAgMGUxMQlhZTQzCQlDb21wYXEgTmV0ZWxsaWdlbnQgSW50ZWdyYXRlZCAxMC8xMDAgVFggVVRQCisgICAgMGUxMQliMDExCQlDb21wYXEgTmV0ZWxsaWdlbnQgMTAvMTAwIFRYIEVtYmVkZGVkIFVUUAorICAgIDBlMTEJYjAxMgkJQ29tcGFxIE5ldGVsbGlnZW50IDEwIFQvMiBQQ0kgVVRQL0NvYXgKKyAgICAwZTExCWIwMzAJCUNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggVVRQCisgICAgMGUxMQlmMTMwCQlDb21wYXEgTmV0RmxleCAzL1AKKyAgICAwZTExCWYxNTAJCUNvbXBhcSBOZXRGbGV4IDMvUAorICAgIDEwOGQJMDAxMgkJT2xpY29tIE9DLTIzMjUJCisgICAgMTA4ZAkwMDEzCQlPbGljb20gT0MtMjE4MworICAgIDEwOGQJMDAxNAkJT2xpY29tIE9DLTIzMjYJCisKKworICAgIENhdmVhdHM6CisgICAgCisgICAgSSBhbSBub3Qgc3VyZSBpZiAxMDBCYXNlVFggZGF1Z2h0ZXJib2FyZHMgKGZvciB0aG9zZSBjYXJkcyB3aGljaAorICAgIHN1cHBvcnQgc3VjaCB0aGluZ3MpIHdpbGwgd29yay4gIEkgaGF2ZW4ndCBoYWQgYW55IHNvbGlkIGV2aWRlbmNlCisgICAgZWl0aGVyIHdheS4KKworICAgIEhvd2V2ZXIsIGlmIGEgY2FyZCBzdXBwb3J0cyAxMDBCYXNlVHggd2l0aG91dCByZXF1aXJpbmcgYW4gYWRkCisgICAgb24gZGF1Z2h0ZXJib2FyZCwgaXQgc2hvdWxkIHdvcmsgd2l0aCAxMDBCYXNlVHguCisKKyAgICBUaGUgIk5ldGVsbGlnZW50IDEwIFQvMiBQQ0kgVVRQL0NvYXgiIChiMDEyKSBkZXZpY2UgaXMgdW50ZXN0ZWQsCisgICAgYnV0IEkgZG8gbm90IGV4cGVjdCBhbnkgcHJvYmxlbXMuCisgICAgCisKK0lJLiAgIERyaXZlciBPcHRpb25zCisJMS4gWW91IGNhbiBhcHBlbmQgZGVidWc9eCB0byB0aGUgZW5kIG9mIHRoZSBpbnNtb2QgbGluZSB0byBnZXQKKyAgICAgICAgICAgZGVidWcgbWVzc2FnZXMsIHdoZXJlIHggaXMgYSBiaXQgZmllbGQgd2hlcmUgdGhlIGJpdHMgbWVhbgorCSAgIHRoZSBmb2xsb3dpbmc6CisJICAgCisJICAgMHgwMQkJVHVybiBvbiBnZW5lcmFsIGRlYnVnZ2luZyBtZXNzYWdlcy4KKwkgICAweDAyCQlUdXJuIG9uIHJlY2VpdmUgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgIDB4MDQJCVR1cm4gb24gdHJhbnNtaXQgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgIDB4MDgJCVR1cm4gb24gbGlzdCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisKKwkyLiBZb3UgY2FuIGFwcGVuZCBhdWk9MSB0byB0aGUgZW5kIG9mIHRoZSBpbnNtb2QgbGluZSB0byBjYXVzZQorICAgICAgICAgICB0aGUgYWRhcHRlciB0byB1c2UgdGhlIEFVSSBpbnRlcmZhY2UgaW5zdGVhZCBvZiB0aGUgMTAgQmFzZSBUCisgICAgICAgICAgIGludGVyZmFjZS4gIFRoaXMgaXMgYWxzbyB3aGF0IHRvIGRvIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgQk5DCisJICAgY29ubmVjdG9yIG9uIGEgVExBTiBiYXNlZCBkZXZpY2UuICAoU2V0dGluZyB0aGlzIG9wdGlvbiBvbiBhCisJICAgZGV2aWNlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbiBBVUkvQk5DIGNvbm5lY3RvciB3aWxsIHByb2JhYmx5CisJICAgY2F1c2UgaXQgdG8gbm90IGZ1bmN0aW9uIGNvcnJlY3RseS4pCisKKwkzLiBZb3UgY2FuIHNldCBkdXBsZXg9MSB0byBmb3JjZSBoYWxmIGR1cGxleCwgYW5kIGR1cGxleD0yIHRvCisJICAgZm9yY2UgZnVsbCBkdXBsZXguCisKKwk0LiBZb3UgY2FuIHNldCBzcGVlZD0xMCB0byBmb3JjZSAxME1icyBvcGVyYXRpb24sIGFuZCBzcGVlZD0xMDAKKwkgICB0byBmb3JjZSAxMDBNYnMgb3BlcmF0aW9uLiAoSSdtIG5vdCBzdXJlIHdoYXQgd2lsbCBoYXBwZW4KKwkgICBpZiBhIGNhcmQgd2hpY2ggb25seSBzdXBwb3J0cyAxME1icyBpcyBmb3JjZWQgaW50byAxMDBNYnMKKwkgICBtb2RlLikKKworCTUuIFlvdSBoYXZlIHRvIHVzZSBzcGVlZD1YIGR1cGxleD1ZIHRvZ2V0aGVyIG5vdy4gSWYgeW91IGp1c3QKKwkgICBkbyAiaW5zbW9kIHRsYW4ubyBzcGVlZD0xMDAiIHRoZSBkcml2ZXIgd2lsbCBkbyBBdXRvLU5lZy4KKwkgICBUbyBmb3JjZSBhIDEwTWJwcyBIYWxmLUR1cGxleCBsaW5rIGRvICJpbnNtb2QgdGxhbi5vIHNwZWVkPTEwIAorCSAgIGR1cGxleD0xIi4KKworCTYuIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCB5b3UgY2FuIHVzZSB0aGUgM3JkCisJICAgYW5kIDR0aCBwYXJhbWV0ZXJzIHRvIHNldCBhdWkgYW5kIGRlYnVnIHJlc3BlY3RpdmVseS4gIEZvcgorCSAgIGV4YW1wbGU6CisKKwkgICBldGhlcj0wLDAsMHgxLDB4NyxldGgwCisKKwkgICBUaGlzIHNldHMgYXVpIHRvIDB4MSBhbmQgZGVidWcgdG8gMHg3LCBhc3N1bWluZyBldGgwIGlzIGEKKwkgICBzdXBwb3J0ZWQgVExBTiBkZXZpY2UuCisKKwkgICBUaGUgYml0cyBpbiB0aGUgdGhpcmQgYnl0ZSBhcmUgYXNzaWduZWQgYXMgZm9sbG93czoKKworCQkweDAxID0gYXVpCisJCTB4MDIgPSB1c2UgaGFsZiBkdXBsZXgKKwkJMHgwNCA9IHVzZSBmdWxsIGR1cGxleAorCQkweDA4ID0gdXNlIDEwQmFzZVQKKwkJMHgxMCA9IHVzZSAxMDBCYXNlVHgKKworCSAgIFlvdSBhbHNvIG5lZWQgdG8gc2V0IGJvdGggc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyB3aGVuIGZvcmNpbmcKKwkgICBzcGVlZHMgd2l0aCBrZXJuZWwtcGFyYW1ldGVycy4gCisJICAgZXRoZXI9MCwwLDB4MTIsMCxldGgwIHdpbGwgZm9yY2UgbGluayB0byAxMDBNYnBzIEhhbGYtRHVwbGV4LgorCisJNy4gSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSB0bGFuIGFkYXB0ZXIgaW4geW91ciBzeXN0ZW0sIHlvdSBjYW4KKwkgICB1c2UgdGhlIGFib3ZlIG9wdGlvbnMgb24gYSBwZXIgYWRhcHRlciBiYXNpcy4gVG8gZm9yY2UgYSAxMDBNYml0L0hECisJICAgbGluayB3aXRoIHlvdXIgZXRoMSBhZGFwdGVyIHVzZToKKwkgICAKKwkgICBpbnNtb2QgdGxhbiBzcGVlZD0wLDEwMCBkdXBsZXg9MCwxCisKKwkgICBOb3cgZXRoMCB3aWxsIHVzZSBhdXRvLW5lZyBhbmQgZXRoMSB3aWxsIGJlIGZvcmNlZCB0byAxMDBNYml0L0hELgorCSAgIE5vdGUgdGhhdCB0aGUgdGxhbiBkcml2ZXIgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDggYWRhcHRlcnMuCisKKworSUlJLiAgVGhpbmdzIHRvIHRyeSBpZiB5b3UgaGF2ZSBwcm9ibGVtcy4KKwkxLiBNYWtlIHN1cmUgeW91ciBjYXJkJ3MgUENJIGlkIGlzIGFtb25nIHRob3NlIGxpc3RlZCBpbgorCSAgIHNlY3Rpb24gSSwgYWJvdmUuCisJMi4gTWFrZSBzdXJlIHJvdXRpbmcgaXMgY29ycmVjdC4KKwkzLiBUcnkgZm9yY2luZyBkaWZmZXJlbnQgc3BlZWQvZHVwbGV4IHNldHRpbmdzCisKKworVGhlcmUgaXMgYWxzbyBhIHRsYW4gbWFpbGluZyBsaXN0IHdoaWNoIHlvdSBjYW4gam9pbiBieSBzZW5kaW5nICJzdWJzY3JpYmUgdGxhbiIKK2luIHRoZSBib2R5IG9mIGFuIGVtYWlsIHRvIG1ham9yZG9tb0B2dXNlci52dS51bmlvbi5lZHUuCitUaGVyZSBpcyBhbHNvIGEgdGxhbiB3ZWJzaXRlIGF0IGh0dHA6Ly9vcGVuc291cmNlLmNvbXBhcS5jb20KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bXMzODB0ci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ZTUyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90bXMzODB0ci50eHQKQEAgLTAsMCArMSwxNDcgQEAKK1RleHQgZmlsZSBmb3IgdGhlIExpbnV4IFN5c0tvbm5lY3QgVG9rZW4gUmluZyBJU0EvUENJIEFkYXB0ZXIgRHJpdmVyLgorCVRleHQgZmlsZSBieTogSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworVGhlIExpbnV4IFN5c0tvbm5lY3QgVG9rZW4gUmluZyBkcml2ZXIgd29ya3Mgd2l0aCB0aGUgU3lzS29ubmVjdCBUUjQvMTYoKykgSVNBLAorU3lzS29ubmVjdCBUUjQvMTYoKykgUENJLCBTeXNLb25uZWN0IFRSNC8xNiBQQ0ksIGFuZCBvbGRlciByZXZpc2lvbnMgb2YgdGhlCitTSyBORVQgVFI0LzE2IElTQSBjYXJkLgorCitMYXRlc3QgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlIG9idGFpbmVkIG9uIHRoZSBMaW51eC1TTkEgV1dXIHNpdGUuCitQbGVhc2UgcG9pbnQgeW91ciBicm93c2VyIHRvOiAKK2h0dHA6Ly93d3cubGludXgtc25hLm9yZworCitNYW55IHRoYW5rcyB0byBDaHJpc3RvcGggR29vcyBmb3IgaGlzIGV4Y2VsbGVudCB3b3JrIG9uIHRoaXMgZHJpdmVyIGFuZAorU3lzS29ubmVjdCBmb3IgZG9uYXRpbmcgdGhlIGFkYXB0ZXJzIHRvIExpbnV4LVNOQSBmb3IgdGhlIHRlc3RpbmcgYW5kIAorbWFpbnRlbmFuY2Ugb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgorCitJbXBvcnRhbnQgaW5mb3JtYXRpb24gdG8gYmUgbm90ZWQ6CisxLiBBZGFwdGVycyBjYW4gYmUgc2xvdyB0byBvcGVuICh+MjAgc2VjcykgYW5kIGNsb3NlICh+NSBzZWNzKSwgcGxlYXNlIGJlIAorICAgcGF0aWVudC4KKzIuIFRoaXMgZHJpdmVyIHdvcmtzIHZlcnkgd2VsbCB3aGVuIGF1dG9wcm9iaW5nIGZvciBhZGFwdGVycy4gV2h5IGV2ZW4gCisgICB0aGluayBhYm91dCB0aG9zZSBuYXN0eSBpby9pbnQvZG1hIHNldHRpbmdzIG9mIG1vZHByb2JlIHdoZW4gdGhlIGRyaXZlciAKKyAgIHdpbGwgZG8gaXQgYWxsIGZvciB5b3UhCisKK1RoaXMgZHJpdmVyIGlzIHJhdGhlciBzaW1wbGUgdG8gdXNlLiBTZWxlY3QgWSB0byBUb2tlbiBSaW5nIGFkYXB0ZXIgc3VwcG9ydAoraW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBBIGNob2ljZSBmb3IgU3lzS29ubmVjdCBUb2tlbiBSaW5nIGFkYXB0ZXJzIHdpbGwKK2FwcGVhci4gVGhpcyBkcml2ZXMgc3VwcG9ydHMgYWxsIFN5c0tvbm5lY3QgSVNBIGFuZCBQQ0kgYWRhcHRlcnMuIENob29zZSB0aGlzCitvcHRpb24uIEkgcGVyc29uYWxseSByZWNvbW1lbmQgY29tcGlsaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKE0pLCBidXQgaWYgeW91Cit5b3Ugd291bGQgbGlrZSB0byBjb21waWxlIGl0IHN0YXRpY2x5IGFuc3dlciBZIGluc3RlYWQuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGFkYXB0ZXJzIHdpdGhvdXQgdGhlIG5lZWQgdG8gbG9hZCBtdWx0aXBsZSBjb3BpZXMKK29mIHRoZSBkcml2ZXIuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBsb2FkIHVwIHRvIDcgYWRhcHRlcnMgd2l0aG91dCBhbnkga2VybmVsCittb2RpZmljYXRpb25zLCBpZiB5b3UgYXJlIGluIG5lZWQgb2YgbW9yZSBwbGVhc2UgY29udGFjdCB0aGUgbWFpbnRhaW5lciBvZiB0aGlzCitkcml2ZXIuCisKK0xvYWQgdGhlIGRyaXZlciBlaXRoZXIgYnkgbGlsby9sb2FkbGluIG9yIGFzIGEgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIHVzaW5nIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBzdWZmaWNlIGZvciBtb3N0OgorCisjIG1vZHByb2JlIHNrdHIKKworVGhpcyB3aWxsIHByb2R1Y2Ugb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzogKE91dHB1dCBpcyB1c2VyIHNwZWNpZmljKQorCitza3RyLmM6IHYxLjAxIDA4LzI5Lzk3IGJ5IENocmlzdG9waCBHb29zCit0cjA6IFNLIE5FVCBUUiA0LzE2IFBDSSBmb3VuZCBhdCAweDYxMDAsIHVzaW5nIElSUSAxNy4KK3RyMTogU0sgTkVUIFRSIDQvMTYgUENJIGZvdW5kIGF0IDB4NjIwMCwgdXNpbmcgSVJRIDE2LgordHIyOiBTSyBORVQgVFIgNC8xNiBJU0EgZm91bmQgYXQgMHhhMjAsIHVzaW5nIElSUSAxMCBhbmQgRE1BIDUuCisKK05vdyBqdXN0IHNldHVwIHRoZSBkZXZpY2UgdmlhIGlmY29uZmlnIGFuZCBzZXQgYW5kIHJvdXRlcyB5b3UgbWF5IGhhdmUuIEFmdGVyCit0aGlzIHlvdSBhcmUgcmVhZHkgdG8gc3RhcnQgc2VuZGluZyBzb21lIHRva2Vucy4KKworRXJyYXRhOgorRm9yIGFueW9uZSB3b25kZXJpbmcgd2hlcmUgdG8gcGljayB1cCB0aGUgU3lzS29ubmVjdCBhZGFwdGVycyBwbGVhc2UgYnJvd3NlCit0byBodHRwOi8vd3d3LnN5c2tvbm5lY3QuY29tCisKK1RoaXMgZHJpdmVyIGlzIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSXRzIEZpcm13YXJlIGltYWdlIGlzIAoraW5jbHVkZWQgYXMgYW4gaW5pdGlhbGl6ZWQgQy1hcnJheSBhbmQgaXMgbGljZW5zZWQgYnkgU3lzS29ubmVjdCB0byB0aGUgTGludXggCit1c2VycyBvZiB0aGlzIGRyaXZlci4gSG93ZXZlciBubyB3YXJyYW50eSBhYm91dCBpdHMgZml0bmVzcyBpcyBleHByZXNzZWQgb3IgCitpbXBsaWVkIGJ5IFN5c0tvbm5lY3QuCisKK0JlbG93IGZpbmQgYXR0YWNoZWQgdGhlIHNldHRpbmcgZm9yIHRoZSBTSyBORVQgVFIgNC8xNiBJU0EgYWRhcHRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgKioqICAgQyBPIE4gVCBFIE4gVCBTICAgKioqCisgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgICAgICAgICAgICAgMSkgTG9jYXRpb24gb2YgRElQLVN3aXRjaCBXMQorICAgICAgICAgICAgICAgIDIpIERlZmF1bHQgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAzKSBESVAtU3dpdGNoIFcxIGRlc2NyaXB0aW9uCisKKworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDSEFQVEVSIDEgICAgIExPQ0FUSU9OIE9GIERJUC1TV0lUQ0gKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVcTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExL8KK/5VxMTExMTEvyAgICAgICAgICAgICAgICAgICAgICAgICBVxMTExMS/ICAgICAgICAgICAgVcTExL8gICAgICAgICD+Civ+QcTExMTExFUgICAgICAgICAgICAgICAgICAgICAgVzEgQcTExMTEVSAgICAgVcTExMS/IP4gICD+ICAgICAgICAg/gor/lXExMTExMS/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4gICAg/iD+ICAg/iAgICAgIFXExMW/Civ+QcTExMTExFUgICAgICAgICAgICAgIFXExMTExMTExMTExL8gICAgICAgICAgQcTExMRVIP4gICD+ICAgICAg/iAg/v4KK/5VxMTExMTEvyAgICAgICAgICAgICAg/iAgICAgICAgICAg/iAgICAgICAgICBVxMTEvyAgQcTExFUgICAgICBBxMTFVQor/kHExMTExMRVICAgICAgICAgICAgICD+IFRNUzM4MEMyNiD+ICAgICAgICAgIP4gICD+ICAgICAgICAgICAgICAgIP4KK/5VxMTExMTEvyAgICAgICAgICAgICAg/iAgICAgICAgICAg/iAgICAgICAgICBBxMTEVSAgICAgICAgICAgICAgICBBxL8KK/5BxMTExMTEVSAgICAgICAgICAgICAg/iAgICAgICAgICAg/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+IP4KK/4gICAgICAgICAgICAgICAgICAgICAgQcTExMTExMTExMTEVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+IP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+IP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBxFUKK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+Civ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+CitBxMTExMTExMTExMTEQcTExMTExMTExMTExMTExMRBxMRBxMTExMTExMTExMTExMTExMTExMTExMRBxMTExMTExMTEVQorICAgICAgICAgICAgIEHExMTExMTExMTExMTExMTEVSAgQcTExMTExMTExMTExMTExMTExMTExMTEVQorCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENIQVBURVIgMiAgICAgREVGQVVMVCBTRVRUSU5HUworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgVzEgICAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICB8IE9OICAgIFggICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8IE9GRiAgICAgIFggIFggIFggIFggIFggIFggIFggfAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAgIFcxLjEgPSBPTiAgICAgICAgICAgICAgIEFkYXB0ZXIgZHJpdmVzIGFkZHJlc3MgbGluZXMgU0ExNy4uMTkKKyAgICAgICAgVzEuMiAtIDEuNSA9IE9GRiAgICAgICAgQm9vdFJPTSBkaXNhYmxlZAorICAgICAgICBXMS42IC0gMS44ID0gT0ZGICAgICAgICBJL08gYWRkcmVzcyAwQTIwaAorCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENIQVBURVIgMyAgICAgRElQIFNXSVRDSCBXMSBERVNDUklQVElPTgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICBVxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEQcTExL8gIE9OCisgICAgICD+IDEg/iAyIP4gMyD+IDQg/iA1IP4gNiD+IDcg/iA4IP4KKyAgICAgIEHExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEVSAgT0ZGCisgICAgICB8QUQgfCBCb290Uk9NIEFkZHIuIHwgIEkvTyAgICAgIHwKKyAgICAgICstKy0rLS0tLS0tLSstLS0tLS0tKy0tLS0tKy0tLS0tKworICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0gNiAgICAgNyAgICAgOAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9OICAgICAgIDE5MDBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT0ZGICAgICAgMDkwMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPTiAgICAgICAxOTgwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9GRiAgICAgIDA5ODBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT0ZGICAgT04gICAgT04gICAgICAgMWIyMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPRkYgICBPTiAgICBPRkYgICAgICAwYjIwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9GRiAgIE9GRiAgIE9OICAgICAgIDFhMjBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT0ZGICAgT0ZGICAgT0ZGICAgICAgMGEyMGggICAgKCspCisgICAgICAgIHwgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICArLS0tLS0tLS0gMiAgICAgMyAgICAgNCAgICAgNQorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9GRiAgIHggICAgIHggICAgIHggICAgICAgZGlzYWJsZWQgICgrKQorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9OICAgIE9OICAgICAgQzAwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPTiAgICBPTiAgICBPRkYgICAgIEM0MDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT0ZGICAgT04gICAgICBDODAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9GRiAgIE9GRiAgICAgQ0MwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPTiAgICBPTiAgICAgIEQwMDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT0ZGICAgT04gICAgT0ZGICAgICBENDAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9GRiAgIE9OICAgICAgRDgwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPRkYgICBPRkYgICAgIERDMDAwCisgICAgICAgIHwKKyAgICAgICAgfAorICAgICAgICArLS0tLS0gMQorICAgICAgICAgICAgICAgT0ZGICAgIGFkYXB0ZXIgZG9lcyBOT1QgZHJpdmUgU0E8MTcuLjE5PgorICAgICAgICAgICAgICAgT04gICAgIGFkYXB0ZXIgZHJpdmVzIFNBPDE3Li4xOT4gICgrKQorCisKKyAgICAgICAgKCspIG1lYW5zIGRlZmF1bHQgc2V0dGluZworCisgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjM2QxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnR4dApAQCAtMCwwICsxLDE0NyBAQAorVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlci4KK0NvcHlyaWdodCAoQykgMTk5OS0yMDAwIE1heGltIEtyYXNueWFuc2t5IDxtYXhfbWtAeWFob28uY29tPgorCisgIExpbnV4LCBTb2xhcmlzIGRyaXZlcnMgCisgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIE1heGltIEtyYXNueWFuc2t5IDxtYXhfbWtAeWFob28uY29tPgorCisgIEZyZWVCU0QgVEFQIGRyaXZlciAKKyAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgTWFrc2ltIFlldm1lbmtpbiA8bV9ldm1lbmtpbkB5YWhvby5jb20+CisKKyAgUmV2aXNpb24gb2YgdGhpcyBkb2N1bWVudCAyMDAyIGJ5IEZsb3JpYW4gVGhpZWwgPGZsb3JpYW4udGhpZWxAZ214Lm5ldD4KKworMS4gRGVzY3JpcHRpb24KKyAgVFVOL1RBUCBwcm92aWRlcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24gZm9yIHVzZXIgc3BhY2UgcHJvZ3JhbXMuIAorICBJdCBjYW4gYmUgc2VlbiBhcyBhIHNpbXBsZSBQb2ludC10by1Qb2ludCBvciBFdGhlcm5ldCBkZXZpY2UsIHdoaWNoLAorICBpbnN0ZWFkIG9mIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gcGh5c2ljYWwgbWVkaWEsIHJlY2VpdmVzIHRoZW0gZnJvbSAKKyAgdXNlciBzcGFjZSBwcm9ncmFtIGFuZCBpbnN0ZWFkIG9mIHNlbmRpbmcgcGFja2V0cyB2aWEgcGh5c2ljYWwgbWVkaWEgCisgIHdyaXRlcyB0aGVtIHRvIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uIAorCisgIEluIG9yZGVyIHRvIHVzZSB0aGUgZHJpdmVyIGEgcHJvZ3JhbSBoYXMgdG8gb3BlbiAvZGV2L25ldC90dW4gYW5kIGlzc3VlIGEKKyAgY29ycmVzcG9uZGluZyBpb2N0bCgpIHRvIHJlZ2lzdGVyIGEgbmV0d29yayBkZXZpY2Ugd2l0aCB0aGUga2VybmVsLiBBIG5ldHdvcmsKKyAgZGV2aWNlIHdpbGwgYXBwZWFyIGFzIHR1blhYIG9yIHRhcFhYLCBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgY2hvc2VuLiBXaGVuCisgIHRoZSBwcm9ncmFtIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yLCB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGFsbAorICBjb3JyZXNwb25kaW5nIHJvdXRlcyB3aWxsIGRpc2FwcGVhci4KKworICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZGV2aWNlIGNob3NlbiB0aGUgdXNlcnNwYWNlIHByb2dyYW0gaGFzIHRvIHJlYWQvd3JpdGUKKyAgSVAgcGFja2V0cyAod2l0aCB0dW4pIG9yIGV0aGVybmV0IGZyYW1lcyAod2l0aCB0YXApLiBXaGljaCBvbmUgaXMgYmVpbmcgdXNlZAorICBkZXBlbmRzIG9uIHRoZSBmbGFncyBnaXZlbiB3aXRoIHRoZSBpb2N0bCgpLgorCisgIFRoZSBwYWNrYWdlIGZyb20gaHR0cDovL3Z0dW4uc291cmNlZm9yZ2UubmV0L3R1biBjb250YWlucyB0d28gc2ltcGxlIGV4YW1wbGVzCisgIGZvciBob3cgdG8gdXNlIHR1biBhbmQgdGFwIGRldmljZXMuIEJvdGggcHJvZ3JhbXMgd29yayBsaWtlIGEgYnJpZGdlIGJldHdlZW4KKyAgdHdvIG5ldHdvcmsgaW50ZXJmYWNlcy4KKyAgYnJfc2VsZWN0LmMgLSBicmlkZ2UgYmFzZWQgb24gc2VsZWN0IHN5c3RlbSBjYWxsLgorICBicl9zaWdpby5jICAtIGJyaWRnZSBiYXNlZCBvbiBhc3luYyBpbyBhbmQgU0lHSU8gc2lnbmFsLgorICBIb3dldmVyLCB0aGUgYmVzdCBleGFtcGxlIGlzIFZUdW4gaHR0cDovL3Z0dW4uc291cmNlZm9yZ2UubmV0IDopKQorCisyLiBDb25maWd1cmF0aW9uIAorICBDcmVhdGUgZGV2aWNlIG5vZGU6CisgICAgIG1rZGlyIC9kZXYvbmV0IChpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHkpCisgICAgIG1rbm9kIC9kZXYvbmV0L3R1biBjIDEwIDIwMAorICAKKyAgU2V0IHBlcm1pc3Npb25zOgorICAgICBlLmcuIGNobW9kIDA3MDAgL2Rldi9uZXQvdHVuCisgICAgIGlmIHlvdSB3YW50IHRoZSBkZXZpY2Ugb25seSBhY2Nlc3NpYmxlIGJ5IHJvb3QuIEdpdmluZyByZWd1bGFyIHVzZXJzIHRoZQorICAgICByaWdodCB0byBhc3NpZ24gbmV0d29yayBkZXZpY2VzIGlzIE5PVCBhIGdvb2QgaWRlYS4gVXNlcnMgY291bGQgYXNzaWduCisgICAgIGJvZ3VzIG5ldHdvcmsgaW50ZXJmYWNlcyB0byB0cmljayBmaXJld2FsbHMgb3IgYWRtaW5pc3RyYXRvcnMuCisKKyAgRHJpdmVyIG1vZHVsZSBhdXRvbG9hZGluZworCisgICAgIE1ha2Ugc3VyZSB0aGF0ICJLZXJuZWwgbW9kdWxlIGxvYWRlciIgLSBtb2R1bGUgYXV0by1sb2FkaW5nCisgICAgIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbC4gIFRoZSBrZXJuZWwgc2hvdWxkIGxvYWQgaXQgb24KKyAgICAgZmlyc3QgYWNjZXNzLgorICAKKyAgTWFudWFsIGxvYWRpbmcgCisgICAgIGluc2VydCB0aGUgbW9kdWxlIGJ5IGhhbmQ6CisgICAgICAgIG1vZHByb2JlIHR1bgorCisgIElmIHlvdSBkbyBpdCB0aGUgbGF0dGVyIHdheSwgeW91IGhhdmUgdG8gbG9hZCB0aGUgbW9kdWxlIGV2ZXJ5IHRpbWUgeW91CisgIG5lZWQgaXQsIGlmIHlvdSBkbyBpdCB0aGUgb3RoZXIgd2F5IGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsb2FkZWQgd2hlbgorICAvZGV2L25ldC90dW4gaXMgYmVpbmcgb3BlbmVkLgorCiszLiBQcm9ncmFtIGludGVyZmFjZSAKKyAgMy4xIE5ldHdvcmsgZGV2aWNlIGFsbG9jYXRpb246CisKKyAgY2hhciAqZGV2IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIHdpdGggYSBmb3JtYXQgc3RyaW5nIChlLmcuCisgICJ0dW4lZCIpLCBidXQgKGFzIGZhciBhcyBJIGNhbiBzZWUpIHRoaXMgY2FuIGJlIGFueSB2YWxpZCBuZXR3b3JrIGRldmljZSBuYW1lLgorICBOb3RlIHRoYXQgdGhlIGNoYXJhY3RlciBwb2ludGVyIGJlY29tZXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgcmVhbCBkZXZpY2UgbmFtZQorICAoZS5nLiAidHVuMCIpCisKKyAgI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisgICNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KKworICBpbnQgdHVuX2FsbG9jKGNoYXIgKmRldikKKyAgeworICAgICAgc3RydWN0IGlmcmVxIGlmcjsKKyAgICAgIGludCBmZCwgZXJyOworCisgICAgICBpZiggKGZkID0gb3BlbigiL2Rldi9uZXQvdHVuIiwgT19SRFdSKSkgPCAwICkKKyAgICAgICAgIHJldHVybiB0dW5fYWxsb2Nfb2xkKGRldik7CisKKyAgICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisKKyAgICAgIC8qIEZsYWdzOiBJRkZfVFVOICAgLSBUVU4gZGV2aWNlIChubyBFdGhlcm5ldCBoZWFkZXJzKSAKKyAgICAgICAqICAgICAgICBJRkZfVEFQICAgLSBUQVAgZGV2aWNlICAKKyAgICAgICAqCisgICAgICAgKiAgICAgICAgSUZGX05PX1BJIC0gRG8gbm90IHByb3ZpZGUgcGFja2V0IGluZm9ybWF0aW9uICAKKyAgICAgICAqLyAKKyAgICAgIGlmci5pZnJfZmxhZ3MgPSBJRkZfVFVOOyAKKyAgICAgIGlmKCAqZGV2ICkKKyAgICAgICAgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBkZXYsIElGTkFNU0laKTsKKworICAgICAgaWYoIChlcnIgPSBpb2N0bChmZCwgVFVOU0VUSUZGLCAodm9pZCAqKSAmaWZyKSkgPCAwICl7CisgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgc3RyY3B5KGRldiwgaWZyLmlmcl9uYW1lKTsKKyAgICAgIHJldHVybiBmZDsKKyAgfSAgICAgICAgICAgICAgCisgCisgIDMuMiBGcmFtZSBmb3JtYXQ6CisgIElmIGZsYWcgSUZGX05PX1BJIGlzIG5vdCBzZXQgZWFjaCBmcmFtZSBmb3JtYXQgaXM6IAorICAgICBGbGFncyBbMiBieXRlc10KKyAgICAgUHJvdG8gWzIgYnl0ZXNdCisgICAgIFJhdyBwcm90b2NvbChJUCwgSVB2NiwgZXRjKSBmcmFtZS4KKworVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uLgorICAgCisxLiBXaGF0IHBsYXRmb3JtcyBhcmUgc3VwcG9ydGVkIGJ5IFRVTi9UQVAgZHJpdmVyID8KK0N1cnJlbnRseSBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiBmb3IgMyBVbmljZXM6CisgICBMaW51eCBrZXJuZWxzIDIuMi54LCAyLjQueCAKKyAgIEZyZWVCU0QgMy54LCA0LngsIDUueAorICAgU29sYXJpcyAyLjYsIDcuMCwgOC4wCisKKzIuIFdoYXQgaXMgVFVOL1RBUCBkcml2ZXIgdXNlZCBmb3I/CitBcyBtZW50aW9uZWQgYWJvdmUsIG1haW4gcHVycG9zZSBvZiBUVU4vVEFQIGRyaXZlciBpcyB0dW5uZWxpbmcuIAorSXQgaXMgdXNlZCBieSBWVHVuIChodHRwOi8vdnR1bi5zb3VyY2Vmb3JnZS5uZXQpLgorCitBbm90aGVyIGludGVyZXN0aW5nIGFwcGxpY2F0aW9uIHVzaW5nIFRVTi9UQVAgaXMgcGlwc2VjZAorKGh0dHA6Ly9wZXJzby5lbnN0LmZyL35iZXlzc2FjL3BpcHNlYy8pLCBhbiB1c2Vyc3BhY2UgSVBTZWMKK2ltcGxlbWVudGF0aW9uIHRoYXQgY2FuIHVzZSBjb21wbGV0ZSBrZXJuZWwgcm91dGluZyAodW5saWtlIEZyZWVTL1dBTikuCisKKzMuIEhvdyBkb2VzIFZpcnR1YWwgbmV0d29yayBkZXZpY2UgYWN0dWFsbHkgd29yayA/IAorVmlydHVhbCBuZXR3b3JrIGRldmljZSBjYW4gYmUgdmlld2VkIGFzIGEgc2ltcGxlIFBvaW50LXRvLVBvaW50IG9yCitFdGhlcm5ldCBkZXZpY2UsIHdoaWNoIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBhIHBoeXNpY2FsIAorbWVkaWEsIHJlY2VpdmVzIHRoZW0gZnJvbSB1c2VyIHNwYWNlIHByb2dyYW0gYW5kIGluc3RlYWQgb2Ygc2VuZGluZyAKK3BhY2tldHMgdmlhIHBoeXNpY2FsIG1lZGlhIHNlbmRzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS4gCisKK0xldCdzIHNheSB0aGF0IHlvdSBjb25maWd1cmVkIElQWCBvbiB0aGUgdGFwMCwgdGhlbiB3aGVuZXZlciAKK3RoZSBrZXJuZWwgc2VuZHMgYW4gSVBYIHBhY2tldCB0byB0YXAwLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uCisoVlR1biBmb3IgZXhhbXBsZSkuIFRoZSBhcHBsaWNhdGlvbiBlbmNyeXB0cywgY29tcHJlc3NlcyBhbmQgc2VuZHMgaXQgdG8gCit0aGUgb3RoZXIgc2lkZSBvdmVyIFRDUCBvciBVRFAuIFRoZSBhcHBsaWNhdGlvbiBvbiB0aGUgb3RoZXIgc2lkZSBkZWNvbXByZXNzZXMKK2FuZCBkZWNyeXB0cyB0aGUgZGF0YSByZWNlaXZlZCBhbmQgd3JpdGVzIHRoZSBwYWNrZXQgdG8gdGhlIFRBUCBkZXZpY2UsIAordGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBwYWNrZXQgbGlrZSBpdCBjYW1lIGZyb20gcmVhbCBwaHlzaWNhbCBkZXZpY2UuCisKKzQuIFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBUVU4gZHJpdmVyIGFuZCBUQVAgZHJpdmVyPworVFVOIHdvcmtzIHdpdGggSVAgZnJhbWVzLiBUQVAgd29ya3Mgd2l0aCBFdGhlcm5ldCBmcmFtZXMuCisKK1RoaXMgbWVhbnMgdGhhdCB5b3UgaGF2ZSB0byByZWFkL3dyaXRlIElQIHBhY2tldHMgd2hlbiB5b3UgYXJlIHVzaW5nIHR1biBhbmQKK2V0aGVybmV0IGZyYW1lcyB3aGVuIHVzaW5nIHRhcC4KKworNS4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEJQRiBhbmQgVFVOL1RBUCBkcml2ZXI/CitCRlAgaXMgYW4gYWR2YW5jZWQgcGFja2V0IGZpbHRlci4gSXQgY2FuIGJlIGF0dGFjaGVkIHRvIGV4aXN0aW5nCituZXR3b3JrIGludGVyZmFjZS4gSXQgZG9lcyBub3QgcHJvdmlkZSBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UuCitBIFRVTi9UQVAgZHJpdmVyIGRvZXMgcHJvdmlkZSBhIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgYW5kIGl0IGlzIHBvc3NpYmxlCit0byBhdHRhY2ggQlBGIHRvIHRoaXMgaW50ZXJmYWNlLgorCis2LiBEb2VzIFRBUCBkcml2ZXIgc3VwcG9ydCBrZXJuZWwgRXRoZXJuZXQgYnJpZGdpbmc/CitZZXMuIExpbnV4IGFuZCBGcmVlQlNEIGRyaXZlcnMgc3VwcG9ydCBFdGhlcm5ldCBicmlkZ2luZy4gCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTJhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dApAQCAtMCwwICsxLDQ1MCBAQAorRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKK0FuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKzMwIEFwcmlsIDIwMDAKKworCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdXNhZ2UgYW5kIGVycmF0YSBvZiB0aGUgM0NvbSAiVm9ydGV4IiBkZXZpY2UKK2RyaXZlciBmb3IgTGludXgsIDNjNTl4LmMuCisKK1RoZSBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4KKworRG9uIGlzIG5vIGxvbmdlciB0aGUgcHJpbWUgbWFpbnRhaW5lciBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlci4gCitQbGVhc2UgcmVwb3J0IHByb2JsZW1zIHRvIG9uZSBvciBtb3JlIG9mOgorCisgIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKyAgTmV0ZGV2IG1haWxpbmcgbGlzdCA8bmV0ZGV2QG9zcy5zZ2kuY29tPgorICBMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorCitQbGVhc2Ugbm90ZSB0aGUgJ1JlcG9ydGluZyBhbmQgRGlhZ25vc2luZyBQcm9ibGVtcycgc2VjdGlvbiBhdCB0aGUgZW5kCitvZiB0aGlzIGZpbGUuCisKKworU2luY2Uga2VybmVsIDIuMy45OS1wcmU2LCB0aGlzIGRyaXZlciBpbmNvcnBvcmF0ZXMgdGhlIHN1cHBvcnQgZm9yIHRoZQorM2M1NzUtc2VyaWVzIENhcmRidXMgY2FyZHMgd2hpY2ggdXNlZCB0byBiZSBoYW5kbGVkIGJ5IDNjNTc1X2NiLmMuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmU6CisKKyAgIDNjNTkwIFZvcnRleCAxME1icHMKKyAgIDNjNTkyIEVJU0EgMTBtYnBzIERlbW9uL1ZvcnRleAorICAgM2M1OTcgRUlTQSBGYXN0IERlbW9uL1ZvcnRleAorICAgM2M1OTUgVm9ydGV4IDEwMGJhc2VUeAorICAgM2M1OTUgVm9ydGV4IDEwMGJhc2VUNAorICAgM2M1OTUgVm9ydGV4IDEwMGJhc2UtTUlJCisgICAzQ29tIFZvcnRleAorICAgM2M5MDAgQm9vbWVyYW5nIDEwYmFzZVQKKyAgIDNjOTAwIEJvb21lcmFuZyAxME1icHMgQ29tYm8KKyAgIDNjOTAwIEN5Y2xvbmUgMTBNYnBzIFRQTworICAgM2M5MDBCIEN5Y2xvbmUgMTBNYnBzIFQKKyAgIDNjOTAwIEN5Y2xvbmUgMTBNYnBzIENvbWJvCisgICAzYzkwMCBDeWNsb25lIDEwTWJwcyBUUEMKKyAgIDNjOTAwQi1GTCBDeWNsb25lIDEwYmFzZS1GTAorICAgM2M5MDUgQm9vbWVyYW5nIDEwMGJhc2VUeAorICAgM2M5MDUgQm9vbWVyYW5nIDEwMGJhc2VUNAorICAgM2M5MDVCIEN5Y2xvbmUgMTAwYmFzZVR4CisgICAzYzkwNUIgQ3ljbG9uZSAxMC8xMDAvQk5DCisgICAzYzkwNUItRlggQ3ljbG9uZSAxMDBiYXNlRngKKyAgIDNjOTA1QyBUb3JuYWRvCisgICAzYzk4MCBDeWNsb25lCisgICAzY1NPSE8xMDAtVFggSHVycmljYW5lCisgICAzYzU1NSBMYXB0b3AgSHVycmljYW5lCisgICAzYzU3NSBCb29tZXJhbmcgQ2FyZEJ1cworICAgM0NDRkU1NzUgQ3ljbG9uZSBDYXJkQnVzCisgICAzQ0NGRTU3NUNUIEN5Y2xvbmUgQ2FyZEJ1cworICAgM0NDRkU2NTYgQ3ljbG9uZSBDYXJkQnVzCisgICAzQ0NGRU02NTYgQ3ljbG9uZSBDYXJkQnVzCisgICAzYzQ1MCBDeWNsb25lL3Vua25vd24KKworCitNb2R1bGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHNldmVyYWwgcGFyYW1ldGVycyB3aGljaCBtYXkgYmUgcHJvdmlkZWQgdG8gdGhlIGRyaXZlciB3aGVuCitpdHMgbW9kdWxlIGlzIGxvYWRlZC4gIFRoZXNlIGFyZSB1c3VhbGx5IHBsYWNlZCBpbiAvZXRjL21vZHByb2JlLmNvbmYKKygvZXRjL21vZHVsZXMuY29uZiBpbiAyLjQpLiAgRXhhbXBsZToKKworb3B0aW9ucyAzYzU5eCBkZWJ1Zz0zIHJ4X2NvcHlicmVhaz0zMDAKKworSWYgeW91IGFyZSB1c2luZyB0aGUgUENNQ0lBIHRvb2xzIChjYXJkbWdyKSB0aGVuIHRoZSBvcHRpb25zIG1heSBiZQorcGxhY2VkIGluIC9ldGMvcGNtY2lhL2NvbmZpZy5vcHRzOgorCittb2R1bGUgIjNjNTl4IiBvcHRzICJkZWJ1Zz0zIHJ4X2NvcHlicmVhaz0zMDAiCisKKworVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZToKKworZGVidWc9TgorCisgIFdoZXJlIE4gaXMgYSBudW1iZXIgZnJvbSAwIHRvIDcuICBBbnl0aGluZyBhYm92ZSAzIHByb2R1Y2VzIGEgbG90CisgIG9mIG91dHB1dCBpbiB5b3VyIHN5c3RlbSBsb2dzLiAgZGVidWc9MSBpcyBkZWZhdWx0LgorCitvcHRpb25zPU4xLE4yLE4zLC4uLgorCisgIEVhY2ggbnVtYmVyIGluIHRoZSBsaXN0IHByb3ZpZGVzIGFuIG9wdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZworICBuZXR3b3JrIGNhcmQuICBTbyBpZiB5b3UgaGF2ZSB0d28gM2M5MDUncyBhbmQgeW91IHdpc2ggdG8gcHJvdmlkZQorICB0aGVtIHdpdGggb3B0aW9uIDB4MjA0IHlvdSB3b3VsZCB1c2U6CisKKyAgICBvcHRpb25zPTB4MjA0LDB4MjA0CisKKyAgVGhlIGluZGl2aWR1YWwgb3B0aW9ucyBhcmUgY29tcG9zZWQgb2YgYSBudW1iZXIgb2YgYml0ZmllbGRzIHdoaWNoCisgIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczoKKworICBQb3NzaWJsZSBtZWRpYSB0eXBlIHNldHRpbmdzCisJMAkxMGJhc2VUCisJMQkxME1icyBBVUkKKwkyCXVuZGVmaW5lZAorCTMJMTBiYXNlMiAoQk5DKQorCTQJMTAwYmFzZS1UWAorCTUJMTAwYmFzZS1GWAorCTYJTUlJIChNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UpCisJNwlVc2UgZGVmYXVsdCBzZXR0aW5nIGZyb20gRUVQUk9NCisJOCAgICAgICBBdXRvbmVnb3RpYXRlCisJOSAgICAgICBFeHRlcm5hbCBNSUkKKwkxMCAgICAgIFVzZSBkZWZhdWx0IHNldHRpbmcgZnJvbSBFRVBST00KKworICBXaGVuIGdlbmVyYXRpbmcgYSB2YWx1ZSBmb3IgdGhlICdvcHRpb25zJyBzZXR0aW5nLCB0aGUgYWJvdmUgbWVkaWEKKyAgc2VsZWN0aW9uIHZhbHVlcyBtYXkgYmUgT1InZWQgKG9yIGFkZGVkIHRvKSB0aGUgZm9sbG93aW5nOgorCisgIDB4ODAwMCAgU2V0IGRyaXZlciBkZWJ1Z2dpbmcgbGV2ZWwgdG8gNworICAweDQwMDAgIFNldCBkcml2ZXIgZGVidWdnaW5nIGxldmVsIHRvIDIKKyAgMHgwNDAwICBFbmFibGUgV2FrZS1vbi1MQU4KKyAgMHgwMjAwICBGb3JjZSBmdWxsIGR1cGxleCBtb2RlLgorICAweDAwMTAgIEJ1cy1tYXN0ZXIgZW5hYmxlIGJpdCAoT2xkIFZvcnRleCBjYXJkcyBvbmx5KQorCisgIEZvciBleGFtcGxlOgorCisgICAgaW5zbW9kIDNjNTl4IG9wdGlvbnM9MHgyMDQKKworICB3aWxsIGZvcmNlIGZ1bGwtZHVwbGV4IDEwMGJhc2UtVFgsIHJhdGhlciB0aGFuIGFsbG93aW5nIHRoZSB1c3VhbAorICBhdXRvbmVnb3RpYXRpb24uCisKK2dsb2JhbF9vcHRpb25zPU4KKworICBTZXRzIHRoZSBgb3B0aW9ucycgcGFyYW1ldGVyIGZvciBhbGwgM2M1OXggTklDcyBpbiB0aGUgbWFjaGluZS4gCisgIEVudHJpZXMgaW4gdGhlIGBvcHRpb25zJyBhcnJheSBhYm92ZSB3aWxsIG92ZXJyaWRlIGFueSBzZXR0aW5nIG9mCisgIHRoaXMuCisKK2Z1bGxfZHVwbGV4PU4xLE4yLE4zLi4uCisKKyAgU2ltaWxhciB0byBiaXQgOSBvZiAnb3B0aW9ucycuICBGb3JjZXMgdGhlIGNvcnJlc3BvbmRpbmcgY2FyZCBpbnRvCisgIGZ1bGwtZHVwbGV4IG1vZGUuICBQbGVhc2UgdXNlIHRoaXMgaW4gcHJlZmVyZW5jZSB0byB0aGUgYG9wdGlvbnMnCisgIHBhcmFtZXRlci4KKworICBJbiBmYWN0LCBwbGVhc2UgZG9uJ3QgdXNlIHRoaXMgYXQgYWxsISBZb3UncmUgYmV0dGVyIG9mZiBnZXR0aW5nCisgIGF1dG9uZWdvdGlhdGlvbiB3b3JraW5nIHByb3Blcmx5LgorCitnbG9iYWxfZnVsbF9kdXBsZXg9TjEKKworICBTZXRzIGZ1bGwgZHVwbGV4IG1vZGUgZm9yIGFsbCAzYzU5eCBOSUNzIGluIHRoZSBtYWNoaW5lLiAgRW50cmllcworICBpbiB0aGUgYGZ1bGxfZHVwbGV4JyBhcnJheSBhYm92ZSB3aWxsIG92ZXJyaWRlIGFueSBzZXR0aW5nIG9mIHRoaXMuCisKK2Zsb3dfY3RybD1OMSxOMixOMy4uLgorCisgIFVzZSA4MDIuM3ggTUFDLWxheWVyIGZsb3cgY29udHJvbC4gIFRoZSAzY29tIGNhcmRzIG9ubHkgc3VwcG9ydCB0aGUKKyAgUEFVU0UgY29tbWFuZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IHdpbGwgc3RvcCBzZW5kaW5nIHBhY2tldHMgZm9yIGEKKyAgc2hvcnQgcGVyaW9kIGlmIHRoZXkgcmVjZWl2ZSBhIFBBVVNFIGZyYW1lIGZyb20gdGhlIGxpbmsgcGFydG5lci4gCisKKyAgVGhlIGRyaXZlciBvbmx5IGFsbG93cyBmbG93IGNvbnRyb2wgb24gYSBsaW5rIHdoaWNoIGlzIG9wZXJhdGluZyBpbgorICBmdWxsIGR1cGxleCBtb2RlLgorCisgIFRoaXMgZmVhdHVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gd29yayBvbiB0aGUgM2M5MDUgLSBvbmx5IDNjOTA1QiBhbmQKKyAgM2M5MDVDIGhhdmUgYmVlbiB0ZXN0ZWQuCisKKyAgVGhlIDNjb20gY2FyZHMgYXBwZWFyIHRvIG9ubHkgcmVzcG9uZCB0byBQQVVTRSBmcmFtZXMgd2hpY2ggYXJlCisgIHNlbnQgdG8gdGhlIHJlc2VydmVkIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgMDE6ODA6YzI6MDA6MDA6MDEuICBUaGV5CisgIGRvIG5vdCBob25vdXIgUEFVU0UgZnJhbWVzIHdoaWNoIGFyZSBzZW50IHRvIHRoZSBzdGF0aW9uIE1BQyBhZGRyZXNzLgorCityeF9jb3B5YnJlYWs9TQorCisgIFRoZSBkcml2ZXIgcHJlYWxsb2NhdGVzIDMyIGZ1bGwtc2l6ZWQgKDE1MzYgYnl0ZSkgbmV0d29yayBidWZmZXJzCisgIGZvciByZWNlaXZpbmcuICBXaGVuIGEgcGFja2V0IGFycml2ZXMsIHRoZSBkcml2ZXIgaGFzIHRvIGRlY2lkZQorICB3aGV0aGVyIHRvIGxlYXZlIHRoZSBwYWNrZXQgaW4gaXRzIGZ1bGwtc2l6ZWQgYnVmZmVyLCBvciB0byBhbGxvY2F0ZQorICBhIHNtYWxsZXIgYnVmZmVyIGFuZCBjb3B5IHRoZSBwYWNrZXQgYWNyb3NzIGludG8gaXQuCisKKyAgVGhpcyBpcyBhIHNwZWVkL3NwYWNlIHRyYWRlb2ZmLgorCisgIFRoZSB2YWx1ZSBvZiByeF9jb3B5YnJlYWsgaXMgdXNlZCB0byBkZWNpZGUgd2hlbiB0byBtYWtlIHRoZSBjb3B5LiAKKyAgSWYgdGhlIHBhY2tldCBzaXplIGlzIGxlc3MgdGhhbiByeF9jb3B5YnJlYWssIHRoZSBwYWNrZXQgaXMgY29waWVkLiAKKyAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHJ4X2NvcHlicmVhayBpcyAyMDAgYnl0ZXMuCisKK21heF9pbnRlcnJ1cHRfd29yaz1OCisKKyAgVGhlIGRyaXZlcidzIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgY2FuIGhhbmRsZSBtYW55IHJlY2VpdmUgYW5kCisgIHRyYW5zbWl0IHBhY2tldHMgaW4gYSBzaW5nbGUgaW52b2NhdGlvbi4gIEl0IGRvZXMgdGhpcyBpbiBhIGxvb3AuIAorICBUaGUgdmFsdWUgb2YgbWF4X2ludGVycnVwdF93b3JrIGdvdmVybnMgaG93IG1uYXkgdGltZXMgdGhlIGludGVycnVwdAorICBzZXJ2aWNlIHJvdXRpbmUgd2lsbCBsb29wLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzIgbG9vcHMuICBJZiB0aGlzCisgIGlzIGV4Y2VlZGVkIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGdpdmVzIHVwIGFuZCBnZW5lcmF0ZXMgYQorICB3YXJuaW5nIG1lc3NhZ2UgImV0aDA6IFRvbyBtdWNoIHdvcmsgaW4gaW50ZXJydXB0Ii4KKworaHdfY2hlY2tzdW1zPU4xLE4yLE4zLC4uLgorCisgIFJlY2VudCAzY29tIE5JQ3MgYXJlIGFibGUgdG8gZ2VuZXJhdGUgSVB2NCwgVENQIGFuZCBVRFAgY2hlY2tzdW1zCisgIGluIGhhcmR3YXJlLiAgTGludXggaGFzIHVzZWQgdGhlIFJ4IGNoZWNrc3VtbWluZyBmb3IgYSBsb25nIHRpbWUuIAorICBUaGUgInplcm8gY29weSIgcGF0Y2ggd2hpY2ggaXMgcGxhbm5lZCBmb3IgdGhlIDIuNCBrZXJuZWwgc2VyaWVzCisgIGFsbG93cyB5b3UgdG8gbWFrZSB1c2Ugb2YgdGhlIE5JQydzIERNQSBzY2F0dGVyL2dhdGhlciBhbmQgdHJhbnNtaXQKKyAgY2hlY2tzdW1taW5nIGFzIHdlbGwuCisKKyAgVGhlIGRyaXZlciBpcyBzZXQgdXAgc28gdGhhdCwgd2hlbiB0aGUgemVyb2NvcHkgcGF0Y2ggaXMgYXBwbGllZCwKKyAgYWxsIFRvcm5hZG8gYW5kIEN5Y2xvbmUgZGV2aWNlcyB3aWxsIHVzZSBTL0cgYW5kIFR4IGNoZWNrc3Vtcy4KKworICBUaGlzIG1vZHVsZSBwYXJhbWV0ZXIgaGFzIGJlZW4gcHJvdmlkZWQgc28geW91IGNhbiBvdmVycmlkZSB0aGlzCisgIGRlY2lzaW9uLiAgSWYgeW91IHRoaW5rIHRoYXQgVHggY2hlY2tzdW1zIGFyZSBjYXVzaW5nIGEgcHJvYmxlbSwgeW91CisgIG1heSBkaXNhYmxlIHRoZSBmZWF0dXJlIHdpdGggYGh3X2NoZWNrc3Vtcz0wJy4KKworICBJZiB5b3UgdGhpbmsgeW91ciBOSUMgc2hvdWxkIGJlIHBlcmZvcm1pbmcgVHggY2hlY2tzdW1taW5nIGFuZCB0aGUKKyAgZHJpdmVyIGlzbid0IGVuYWJsaW5nIGl0LCB5b3UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgaGFyZHdhcmUgVHgKKyAgY2hlY2tzdW1taW5nIHdpdGggYGh3X2NoZWNrc3Vtcz0xJy4KKworICBUaGUgZHJpdmVyIGRyb3BzIGEgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZXMgdG8gaW5kaWNhdGUgd2hldGhlciBvcgorICBub3QgaXQgaXMgdXNpbmcgaGFyZHdhcmUgc2NhdHRlci9nYXRoZXIgYW5kIGhhcmR3YXJlIFR4IGNoZWNrc3Vtcy4KKworICBTY2F0dGVyL2dhdGhlciBhbmQgaGFyZHdhcmUgY2hlY2tzdW1zIHByb3ZpZGUgY29uc2lkZXJhYmxlCisgIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZvciB0aGUgc2VuZGZpbGUoKSBzeXN0ZW0gY2FsbCwgYnV0IGEgc21hbGwKKyAgZGVjcmVhc2UgaW4gdGhyb3VnaHB1dCBmb3Igc2VuZCgpLiAgVGhlcmUgaXMgbm8gZWZmZWN0IHVwb24gcmVjZWl2ZQorICBlZmZpY2llbmN5LgorCitjb21wYXFfaW9hZGRyPU4KK2NvbXBhcV9pcnE9TgorY29tcGFxX2RldmljZV9pZD1OCisKKyAgIlZhcmlhYmxlcyB0byB3b3JrLWFyb3VuZCB0aGUgQ29tcGFxIFBDSSBCSU9TMzIgcHJvYmxlbSIuLi4uCisKK3dhdGNoZG9nPU4KKworICBTZXRzIHRoZSB0aW1lIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIGFmdGVyIHdoaWNoIHRoZSBrZXJuZWwKKyAgZGVjaWRlcyB0aGF0IHRoZSB0cmFuc21pdHRlciBoYXMgYmVjb21lIHN0dWNrIGFuZCBuZWVkcyB0byBiZSByZXNldC4gCisgIFRoaXMgaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFsdGhvdWdoIGl0IG1heSBiZSBhZHZhbnRhZ2VvdXMKKyAgdG8gaW5jcmVhc2UgdGhpcyB2YWx1ZSBvbiBMQU5zIHdoaWNoIGhhdmUgdmVyeSBoaWdoIGNvbGxpc2lvbiByYXRlcy4KKyAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTAwMCAoNS4wIHNlY29uZHMpLgorCitlbmFibGVfd29sPU4xLE4yLE4zLC4uLgorCisgIEVuYWJsZSBXYWtlLW9uLUxBTiBzdXBwb3J0IGZvciB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlLiAgRG9uYWxkCisgIEJlY2tlcidzIGBldGhlci13YWtlJyBhcHBsaWNhdGlvbiBtYXkgYmUgdXNlZCB0byB3YWtlIHN1c3BlbmRlZAorICBtYWNoaW5lcy4KKworICBBbHNvIGVuYWJsZXMgdGhlIE5JQydzIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4KKworZ2xvYmFsX2VuYWJsZV93b2w9TgorCisgIFNldHMgZW5hYmxlX3dvbCBtb2RlIGZvciBhbGwgM2M1OXggTklDcyBpbiB0aGUgbWFjaGluZS4gIEVudHJpZXMgaW4KKyAgdGhlIGBlbmFibGVfd29sJyBhcnJheSBhYm92ZSB3aWxsIG92ZXJyaWRlIGFueSBzZXR0aW5nIG9mIHRoaXMuCisKK01lZGlhIHNlbGVjdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK0EgbnVtYmVyIG9mIHRoZSBvbGRlciBOSUNzIHN1Y2ggYXMgdGhlIDNjNTkwIGFuZCAzYzkwMCBzZXJpZXMgaGF2ZQorMTBiYXNlMiBhbmQgQVVJIGludGVyZmFjZXMuCisKK1ByaW9yIHRvIEphbnVhcnksIDIwMDEgdGhpcyBkcml2ZXIgd291bGQgYXV0b2VzZWxlY3QgdGhlIDEwYmFzZTIgb3IgQVVJCitwb3J0IGlmIGl0IGRpZG4ndCBkZXRlY3QgYWN0aXZpdHkgb24gdGhlIDEwYmFzZVQgcG9ydC4gIEl0IHdvdWxkIHRoZW4KK2dldCBzdHVjayBvbiB0aGUgMTBiYXNlMiBwb3J0IGFuZCBhIGRyaXZlciByZWxvYWQgd2FzIG5lY2Vzc2FyeSB0bworc3dpdGNoIGJhY2sgdG8gMTBiYXNlVC4gIFRoaXMgYmVoYXZpb3VyIGNvdWxkIG5vdCBiZSBwcmV2ZW50ZWQgd2l0aCBhCittb2R1bGUgb3B0aW9uIG92ZXJyaWRlLgorCitMYXRlciAoY3VycmVudCkgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciBfZG9fIHN1cHBvcnQgbG9ja2luZyBvZiB0aGUKK21lZGlhIHR5cGUuICBTbyBpZiB5b3UgbG9hZCB0aGUgZHJpdmVyIG1vZHVsZSB3aXRoCisKKwltb2Rwcm9iZSAzYzU5eCBvcHRpb25zPTAKKworaXQgd2lsbCBwZXJtYW5lbnRseSBzZWxlY3QgdGhlIDEwYmFzZVQgcG9ydC4gIEF1dG9tYXRpYyBzZWxlY3Rpb24gb2YKK290aGVyIG1lZGlhIHR5cGVzIGRvZXMgbm90IG9jY3VyLgorCisKK1RyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgcmVnaXN0ZXIgODIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIGNvbW1vbiBlcnJvciB3aGljaCBpcyBhbG1vc3QgYWx3YXlzIGNhdXNlZCBieSBhbm90aGVyIGhvc3Qgb24KK3RoZSBzYW1lIG5ldHdvcmsgYmVpbmcgaW4gZnVsbC1kdXBsZXggbW9kZSwgd2hpbGUgdGhpcyBob3N0IGlzIGluCitoYWxmLWR1cGxleCBtb2RlLiAgWW91IG5lZWQgdG8gZmluZCB0aGF0IG90aGVyIGhvc3QgYW5kIG1ha2UgaXQgcnVuIGluCitoYWxmLWR1cGxleCBtb2RlIG9yIGZpeCB0aGlzIGhvc3QgdG8gcnVuIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKK0FzIGEgbGFzdCByZXNvcnQsIHlvdSBjYW4gZm9yY2UgdGhlIDNjNTl4IGRyaXZlciBpbnRvIGZ1bGwtZHVwbGV4IG1vZGUKK3dpdGgKKworCW9wdGlvbnMgM2M1OXggZnVsbF9kdXBsZXg9MQorCitidXQgdGhpcyBoYXMgdG8gYmUgdmlld2VkIGFzIGEgd29ya2Fyb3VuZCBmb3IgYnJva2VuIG5ldHdvcmsgZ2VhciBhbmQKK3Nob3VsZCBvbmx5IHJlYWxseSBiZSB1c2VkIGZvciBlcXVpcG1lbnQgd2hpY2ggY2Fubm90IGF1dG9uZWdvdGlhdGUuCisKKworQWRkaXRpb25hbCByZXNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RldGFpbHMgb2YgdGhlIGRldmljZSBkcml2ZXIgaW1wbGVtZW50YXRpb24gYXJlIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBmaWxlLgorCitBZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IERvbiBCZWNrZXIncyBMaW51eCBEcml2ZXJzIHNpdGU6CisKKyAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay92b3J0ZXguaHRtbAorCitEb25hbGQgQmVja2VyJ3MgZHJpdmVyIGRldmVsb3BtZW50IHNpdGU6CisKKyAgICAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yaworCitEb25hbGQncyB2b3J0ZXgtZGlhZyBwcm9ncmFtIGlzIHVzZWZ1bCBmb3IgaW5zcGVjdGluZyB0aGUgTklDJ3Mgc3RhdGU6CisKKyAgICAgaHR0cDovL3d3dy5zY3lsZC5jb20vZGlhZy8jcGNpLWRpYWdzCisKK0RvbmFsZCdzIG1paS1kaWFnIHByb2dyYW0gbWF5IGJlIHVzZWQgZm9yIGluc3BlY3RpbmcgYW5kIG1hbmlwdWxhdGluZwordGhlIE5JQydzIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSBzdWJzeXN0ZW06CisKKyAgICAgaHR0cDovL3d3dy5zY3lsZC5jb20vZGlhZy8jbWlpLWRpYWcKKworRG9uYWxkJ3Mgd2FrZS1vbi1MQU4gcGFnZToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9leHBlcnQvd2FrZS1vbi1sYW4uaHRtbAorCiszQ29tJ3MgZG9jdW1lbnRhdGlvbiBmb3IgbWFueSBOSUNzLCBpbmNsdWRpbmcgdGhlIG9uZXMgc3VwcG9ydGVkIGJ5Cit0aGlzIGRyaXZlciBpcyBhdmFpbGFibGUgYXQgCisKKyAgICAgaHR0cDovL3N1cHBvcnQuM2NvbS5jb20vcGFydG5lcnMvZGV2ZWxvcGVyL2RldmVsb3Blcl9mb3JtLmh0bWwKKworM0NvbSdzIERPUy1iYXNlZCBhcHBsaWNhdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgTklDcyBFRVBST01zOgorCisJZnRwOi8vZnRwLjNjb20uY29tL3B1Yi9uaWMvM2M5MHgvM2M5MHh4Mi5leGUKKworRHJpdmVyIHVwZGF0ZXMgYW5kIGEgZGV0YWlsZWQgY2hhbmdlbG9nIGZvciB0aGUgbW9kaWZpY2F0aW9ucyB3aGljaAord2VyZSBtYWRlIGZvciB0aGUgMi4zLzIsNCBzZXJpZXMga2VybmVsIGlzIGF2YWlsYWJsZSBhdAorCisgICAgIGh0dHA6Ly93d3cudW93LmVkdS5hdS9+YW5kcmV3bS9saW51eC8jM2M1OXgtMi4zCisKKworQXV0b25lZ290aWF0aW9uIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgZHJpdmVyIHVzZXMgYSBvbmUtbWludXRlIGhlYXJ0YmVhdCBmb3IgYWRhcHRpbmcgdG8gY2hhbmdlcyBpbgorICB0aGUgZXh0ZXJuYWwgTEFOIGVudmlyb25tZW50LiAgVGhpcyBtZWFucyB0aGF0IHdoZW4sIGZvciBleGFtcGxlLCBhCisgIG1hY2hpbmUgaXMgdW5wbHVnZ2VkIGZyb20gYSBodWJiZWQgMTBiYXNlVCBMQU4gcGx1Z2dlZCBpbnRvIGEKKyAgc3dpdGNoZWQgMTAwYmFzZVQgTEFOLCB0aGUgdGhyb3VnaHB1dCB3aWxsIGJlIHF1aXRlIGRyZWFkZnVsIGZvciB1cAorICB0byBzaXh0eSBzZWNvbmRzLiAgQmUgcGF0aWVudC4KKworICBDaXNjbyBpbnRlcm9wZXJhYmlsaXR5IG5vdGUgZnJvbSBXYWx0ZXIgV29uZyA8d2N3K0BDTVUuRURVPjoKKworICBPbiBhIHNpZGUgbm90ZSwgYWRkaW5nIEhBU19OV0FZIHNlZW1zIHRvIHNoYXJlIGEgcHJvYmxlbSB3aXRoIHRoZQorICBDaXNjbyA2NTA5IHN3aXRjaC4gIFNwZWNpZmljYWxseSwgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBzcGFubmluZworICB0cmVlIHBhcmFtZXRlciBmb3IgdGhlIHBvcnQgdGhlIG1hY2hpbmUgaXMgcGx1Z2dlZCBpbnRvIHRvICdwb3J0ZmFzdCcKKyAgbW9kZS4gIE90aGVyd2lzZSwgdGhlIG5lZ290aWF0aW9uIGZhaWxzLiAgVGhpcyBoYXMgYmVlbiBhbiBpc3N1ZQorICB3ZSd2ZSBub3RpY2VkIGZvciBhIHdoaWxlIGJ1dCBoYXZlbid0IGhhZCB0aGUgdGltZSB0byB0cmFjayBkb3duLgorCisgIENpc2NvIHN3aXRjaGVzICAgIChKZWZmIEJ1c2NoIDxqYnVzY2hAZGVqYS5jb20+KQorCisgICAgTXkgInN0YW5kYXJkIGNvbmZpZyIgZm9yIHBvcnRzIHRvIHdoaWNoIFBDJ3Mvc2VydmVycyBjb25uZWN0IGRpcmVjdGx5OgorCisgICAgICAgIGludGVyZmFjZSBGYXN0RXRoZXJuZXQwL04KKyAgICAgICAgZGVzY3JpcHRpb24gbWFjaGluZW5hbWUKKyAgICAgICAgbG9hZC1pbnRlcnZhbCAzMAorICAgICAgICBzcGFubmluZy10cmVlIHBvcnRmYXN0CisKKyAgICBJZiBhdXRvbmVnb3RpYXRpb24gaXMgYSBwcm9ibGVtLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSAic3BlZWQKKyAgICAxMDAiIGFuZCAiZHVwbGV4IGZ1bGwiIGFzIHdlbGwgKG9yICJzcGVlZCAxMCIgYW5kICJkdXBsZXggaGFsZiIpLgorCisgICAgV0FSTklORzogRE8gTk9UIGhvb2sgdXAgaHVicy9zd2l0Y2hlcy9icmlkZ2VzIHRvIHRoZXNlCisgICAgc3BlY2lhbGx5LWNvbmZpZ3VyZWQgcG9ydHMhIFRoZSBzd2l0Y2ggd2lsbCBiZWNvbWUgdmVyeSBjb25mdXNlZC4KKworCitSZXBvcnRpbmcgYW5kIGRpYWdub3NpbmcgcHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWludGFpbmVycyBmaW5kIHRoYXQgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHByb2JsZW0gcmVwb3J0cyBhcmUKK2ludmFsdWFibGUgaW4gcmVzb2x2aW5nIGRyaXZlciBwcm9ibGVtcy4gIFdlIGFyZSBmcmVxdWVudGx5IG5vdCBhYmxlIHRvCityZXByb2R1Y2UgcHJvYmxlbXMgYW5kIG11c3QgcmVseSBvbiB5b3VyIHBhdGllbmNlIGFuZCBlZmZvcnRzIHRvIGdldCB0bwordGhlIGJvdHRvbSBvZiB0aGUgcHJvYmxlbS4KKworSWYgeW91IGJlbGlldmUgeW91IGhhdmUgYSBkcml2ZXIgcHJvYmxlbSBoZXJlIGFyZSBzb21lIG9mIHRoZQorc3RlcHMgeW91IHNob3VsZCB0YWtlOgorCistIElzIGl0IHJlYWxseSBhIGRyaXZlciBwcm9ibGVtPworCisgICBFbGltaW5hdGUgc29tZSB2YXJpYWJsZXM6IHRyeSBkaWZmZXJlbnQgY2FyZHMsIGRpZmZlcmVudAorICAgY29tcHV0ZXJzLCBkaWZmZXJlbnQgY2FibGVzLCBkaWZmZXJlbnQgcG9ydHMgb24gdGhlIHN3aXRjaC9odWIsCisgICBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbCBvciBvZnRoZSBkcml2ZXIsIGV0Yy4KKworLSBPSywgaXQncyBhIGRyaXZlciBwcm9ibGVtLgorCisgICBZb3UgbmVlZCB0byBnZW5lcmF0ZSBhIHJlcG9ydC4gIFR5cGljYWxseSB0aGlzIGlzIGFuIGVtYWlsIHRvIHRoZQorICAgbWFpbnRhaW5lciBhbmQvb3IgbGludXgtbmV0QHZnZXIua2VybmVsLm9yZy4gIFRoZSBtYWludGFpbmVyJ3MKKyAgIGVtYWlsIGFkZHJlc3Mgd2lsbCBiZSBpbnRoZSBkcml2ZXIgc291cmNlIG9yIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlLgorCistIFRoZSBjb250ZW50cyBvZiB5b3VyIHJlcG9ydCB3aWxsIHZhcnkgYSBsb3QgZGVwZW5kaW5nIHVwb24gdGhlCisgIHByb2JsZW0uICBJZiBpdCdzIGEga2VybmVsIGNyYXNoIHRoZW4geW91IHNob3VsZCByZWZlciB0byB0aGUKKyAgUkVQT1JUSU5HLUJVR1MgZmlsZS4KKworICBCdXQgZm9yIG1vc3QgcHJvYmxlbXMgaXQgaXMgdXNlZnVsIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZzoKKworICAgbyBLZXJuZWwgdmVyc2lvbiwgZHJpdmVyIHZlcnNpb24KKworICAgbyBBIGNvcHkgb2YgdGhlIGJhbm5lciBtZXNzYWdlIHdoaWNoIHRoZSBkcml2ZXIgZ2VuZXJhdGVzIHdoZW4KKyAgICAgaXQgaXMgaW5pdGlhbGlzZWQuICBGb3IgZXhhbXBsZToKKworICAgICBldGgwOiAzQ29tIFBDSSAzYzkwNUMgVG9ybmFkbyBhdCAweGE0MDAsICAwMDo1MDpkYTo2YTo4ODpmMCwgSVJRIDE5CisgICAgIDhLIGJ5dGUtd2lkZSBSQU0gNTozIFJ4OlR4IHNwbGl0LCBhdXRvc2VsZWN0L0F1dG9uZWdvdGlhdGUgaW50ZXJmYWNlLgorICAgICBNSUkgdHJhbnNjZWl2ZXIgZm91bmQgYXQgYWRkcmVzcyAyNCwgc3RhdHVzIDc4MmQuCisgICAgIEVuYWJsaW5nIGJ1cy1tYXN0ZXIgdHJhbnNtaXRzIGFuZCB3aG9sZS1mcmFtZSByZWNlaXZlcy4KKworICAgICBOT1RFOiBZb3UgbXVzdCBwcm92aWRlIHRoZSBgZGVidWc9MicgbW9kcHJvYmUgb3B0aW9uIHRvIGdlbmVyYXRlCisgICAgIGEgZnVsbCBkZXRlY3Rpb24gbWVzc2FnZS4gIFBsZWFzZSBkbyB0aGlzOgorCisJbW9kcHJvYmUgM2M1OXggZGVidWc9MgorCisgICBvIElmIGl0IGlzIGEgUENJIGRldmljZSwgdGhlIHJlbGV2YW50IG91dHB1dCBmcm9tICdsc3BjaSAtdngnLCBlZzoKKworICAgICAwMDowOS4wIEV0aGVybmV0IGNvbnRyb2xsZXI6IDNDb20gQ29ycG9yYXRpb24gM2M5MDVDLVRYIFtGYXN0IEV0aGVybGlua10gKHJldiA3NCkKKyAgICAgICAgICAgICBTdWJzeXN0ZW06IDNDb20gQ29ycG9yYXRpb246IFVua25vd24gZGV2aWNlIDkyMDAKKyAgICAgICAgICAgICBGbGFnczogYnVzIG1hc3RlciwgbWVkaXVtIGRldnNlbCwgbGF0ZW5jeSAzMiwgSVJRIDE5CisgICAgICAgICAgICAgSS9PIHBvcnRzIGF0IGE0MDAgW3NpemU9MTI4XQorICAgICAgICAgICAgIE1lbW9yeSBhdCBkYjAwMDAwMCAoMzItYml0LCBub24tcHJlZmV0Y2hhYmxlKSBbc2l6ZT0xMjhdCisgICAgICAgICAgICAgRXhwYW5zaW9uIFJPTSBhdCA8dW5hc3NpZ25lZD4gW2Rpc2FibGVkXSBbc2l6ZT0xMjhLXQorICAgICAgICAgICAgIENhcGFiaWxpdGllczogW2RjXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMgorICAgICAwMDogYjcgMTAgMDAgOTIgMDcgMDAgMTAgMDIgNzQgMDAgMDAgMDIgMDggMjAgMDAgMDAKKyAgICAgMTA6IDAxIGE0IDAwIDAwIDAwIDAwIDAwIGRiIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisgICAgIDIwOiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCBiNyAxMCAwMCAxMAorICAgICAzMDogMDAgMDAgMDAgMDAgZGMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDUgMDEgMGEgMGEKKworICAgbyBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnZpcm9ubWVudDogMTBiYXNlVD8gMTAwYmFzZVQ/CisgICAgIGZ1bGwvaGFsZiBkdXBsZXg/IHN3aXRjaGVkIG9yIGh1YmJlZD8KKworICAgbyBBbnkgYWRkaXRpb25hbCBtb2R1bGUgcGFyYW1ldGVycyB3aGljaCB5b3UgbWF5IGJlIHByb3ZpZGluZyB0byB0aGUgZHJpdmVyLgorCisgICBvIEFueSBrZXJuZWwgbG9ncyB3aGljaCBhcmUgcHJvZHVjZWQuICBUaGUgbW9yZSB0aGUgbWVycmllci4gCisgICAgIElmIHRoaXMgaXMgYSBsYXJnZSBmaWxlIGFuZCB5b3UgYXJlIHNlbmRpbmcgeW91ciByZXBvcnQgdG8gYQorICAgICBtYWlsaW5nIGxpc3QsIG1lbnRpb24gdGhhdCB5b3UgaGF2ZSB0aGUgbG9nZmlsZSwgYnV0IGRvbid0IHNlbmQKKyAgICAgaXQuICBJZiB5b3UncmUgcmVwb3J0aW5nIGRpcmVjdCB0byB0aGUgbWFpbnRhaW5lciB0aGVuIGp1c3Qgc2VuZAorICAgICBpdC4KKworICAgICBUbyBlbnN1cmUgdGhhdCBhbGwga2VybmVsIGxvZ3MgYXJlIGF2YWlsYWJsZSwgYWRkIHRoZQorICAgICBmb2xsb3dpbmcgbGluZSB0byAvZXRjL3N5c2xvZy5jb25mOgorCisgICAgICAgICBrZXJuLiogL3Zhci9sb2cvbWVzc2FnZXMKKworICAgICBUaGVuIHJlc3RhcnQgc3lzbG9nZCB3aXRoOgorCisgICAgICAgICAvZXRjL3JjLmQvaW5pdC5kL3N5c2xvZyByZXN0YXJ0CisKKyAgICAgKFRoZSBhYm92ZSBtYXkgdmFyeSwgZGVwZW5kaW5nIHVwb24gd2hpY2ggTGludXggZGlzdHJpYnV0aW9uIHlvdSB1c2UpLgorCisgICAgbyBJZiB5b3VyIHByb2JsZW0gaXMgcmVwcm9kdWNpYmxlIHRoZW4gdGhhdCdzIGdyZWF0LiAgVHJ5IHRoZQorICAgICAgZm9sbG93aW5nOgorCisgICAgICAxKSBJbmNyZWFzZSB0aGUgZGVidWcgbGV2ZWwuICBVc3VhbGx5IHRoaXMgaXMgZG9uZSB2aWE6CisKKyAgICAgICAgIGEpIG1vZHByb2JlIGRyaXZlciBkZWJ1Zz03CisgICAgICAgICBiKSBJbiAvZXRjL21vZHByb2JlLmNvbmYgKG9yIC9ldGMvbW9kdWxlcy5jb25mIGZvciAyLjQpOgorICAgICAgICAgICAgb3B0aW9ucyBkcml2ZXIgZGVidWc9NworCisgICAgICAyKSBSZWNyZWF0ZSB0aGUgcHJvYmxlbSB3aXRoIHRoZSBoaWdoZXIgZGVidWcgbGV2ZWwsCisgICAgICAgICBzZW5kIGFsbCBsb2dzIHRvIHRoZSBtYWludGFpbmVyLgorCisgICAgICAzKSBEb3dubG9hZCB5b3UgY2FyZCdzIGRpYWdub3N0aWMgdG9vbCBmcm9tIERvbmFsZAorICAgICAgICAgQmFja2VyJ3Mgd2Vic2l0ZSBodHRwOi8vd3d3LnNjeWxkLmNvbS9kaWFnLiAgRG93bmxvYWQKKyAgICAgICAgIG1paS1kaWFnLmMgYXMgd2VsbC4gIEJ1aWxkIHRoZXNlLgorCisgICAgICAgICBhKSBSdW4gJ3ZvcnRleC1kaWFnIC1hYWVlJyBhbmQgJ21paS1kaWFnIC12JyB3aGVuIHRoZSBjYXJkIGlzCisgICAgICAgICAgICB3b3JraW5nIGNvcnJlY3RseS4gIFNhdmUgdGhlIG91dHB1dC4KKworICAgICAgICAgYikgUnVuIHRoZSBhYm92ZSBjb21tYW5kcyB3aGVuIHRoZSBjYXJkIGlzIG1hbGZ1bmN0aW9uaW5nLiAgU2VuZAorICAgICAgICAgICAgYm90aCBzZXRzIG9mIG91dHB1dC4KKworRmluYWxseSwgcGxlYXNlIGJlIHBhdGllbnQgYW5kIGJlIHByZXBhcmVkIHRvIGRvIHNvbWUgd29yay4gIFlvdSBtYXkgZW5kIHVwIHdvcmtpbmcgb24KK3RoaXMgcHJvYmxlbSBmb3IgYSB3ZWVrIG9yIG1vcmUgYXMgdGhlIG1haW50YWluZXIgYXNrcyBtb3JlIHF1ZXN0aW9ucywgYXNrcyBmb3IgbW9yZQordGVzdHMsIGFza3MgZm9yIHBhdGNoZXMgdG8gYmUgYXBwbGllZCwgZXRjLiAgQXQgdGhlIGVuZCBvZiBpdCBhbGwsIHRoZSBwcm9ibGVtIG1heSBldmVuCityZW1haW4gdW5yZXNvbHZlZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbi1yb3V0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQKQEAgLTAsMCArMSw2MjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGludXggV0FOIFJvdXRlciBVdGlsaXRpZXMgUGFja2FnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWZXJzaW9uIDIuMi4xIAorTWFyIDI4LCAyMDAxCitBdXRob3I6IE5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJTlRST0RVQ1RJT04KKworV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSBhcmUgdXNlZCB0byBpbnRlcmNvbm5lY3QgTG9jYWwgQXJlYSBOZXR3b3JrcyAoTEFOcykKK2FuZC9vciBzdGFuZC1hbG9uZSBob3N0cyBvdmVyIHZhc3QgZGlzdGFuY2VzIHdpdGggZGF0YSB0cmFuc2ZlciByYXRlcworc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aG9zZSBhY2hpZXZhYmxlIHdpdGggY29tbW9ubHkgdXNlZCBkaWFsLXVwCitjb25uZWN0aW9ucy4KKworVXN1YWxseSBhbiBleHRlcm5hbCBkZXZpY2UgY2FsbGVkIGBXQU4gcm91dGVyJyBzaXR0aW5nIG9uIHlvdXIgbG9jYWwgbmV0d29yaworb3IgY29ubmVjdGVkIHRvIHlvdXIgbWFjaGluZSdzIHNlcmlhbCBwb3J0IHByb3ZpZGVzIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8KK1dBTi4gIEFsdGhvdWdoIHJvdXRlcidzIGpvYiBtYXkgYmUgYXMgc2ltcGxlIGFzIHRha2luZyB5b3VyIGxvY2FsIG5ldHdvcmsKK3RyYWZmaWMsIGNvbnZlcnRpbmcgaXQgdG8gV0FOIGZvcm1hdCBhbmQgcGlwaW5nIGl0IHRocm91Z2ggdGhlIFdBTiBsaW5rLCB0aGVzZQorZGV2aWNlcyBhcmUgbm90b3Jpb3VzbHkgZXhwZW5zaXZlLCB3aXRoIHByaWNlcyBhcyBtdWNoIGFzIDIgLSA1IHRpbWVzIGhpZ2hlcgordGhlbiB0aGUgcHJpY2Ugb2YgYSB0eXBpY2FsIFBDIGJveC4KKworQWx0ZXJuYXRpdmVseSwgY29uc2lkZXJpbmcgcm9idXN0bmVzcyBhbmQgbXVsdGl0YXNraW5nIGNhcGFiaWxpdGllcyBvZiBMaW51eCwKK2FuIGludGVybmFsIHJvdXRlciBjYW4gYmUgYnVpbHQgKG1vc3Qgcm91dGVycyB1c2Ugc29tZSBzb3J0IG9mIHN0cmlwcGVkIGRvd24KK1VuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGFueXdheSkuIFdpdGggYSBudW1iZXIgb2YgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZSBXQU4KK2ludGVyZmFjZSBjYXJkcyBhdmFpbGFibGUgb24gdGhlIG1hcmtldCwgYSBwZXJmZWN0bHkgdXNhYmxlIHJvdXRlciBjYW4gYmUKK2J1aWx0IGZvciBsZXNzIHRoYW4gaGFsZiBhIHByaWNlIG9mIGFuIGV4dGVybmFsIHJvdXRlci4gIFlldCBhIExpbnV4IGJveAorYWN0aW5nIGFzIGEgcm91dGVyIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcywgc3VjaCBhcyBmaXJlLXdhbGxpbmcsCitydW5uaW5nIEZUUCwgV1dXIG9yIEROUyBzZXJ2ZXIsIGV0Yy4KKworVGhpcyBrZXJuZWwgbW9kdWxlIGludHJvZHVjZXMgdGhlIG5vdGlvbiBvZiBhIFdBTiBMaW5rIERyaXZlciAoV0xEKSB0byBMaW51eAorb3BlcmF0aW5nIHN5c3RlbSBhbmQgcHJvdmlkZXMgZ2VuZXJpYyBoYXJkd2FyZS1pbmRlcGVuZGVudCBzZXJ2aWNlcyBmb3Igc3VjaAorZHJpdmVycy4gIFdoeSBjYW4gZXhpc3RpbmcgTGludXggbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlIG5vdCBiZSB1c2VkIGZvcgordGhpcyBwdXJwb3NlPyAgV2VsbCwgaXQgY2FuLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IGtleSBkaWZmZXJlbmNlcyBiZXR3ZWVuCithIHR5cGljYWwgbmV0d29yayBpbnRlcmZhY2UgKGUuZy4gRXRoZXJuZXQpIGFuZCBhIFdBTiBsaW5rLgorCitNYW55IFdBTiBwcm90b2NvbHMsIHN1Y2ggYXMgWC4yNSBhbmQgZnJhbWUgcmVsYXksIGFsbG93IGZvciBtdWx0aXBsZSBsb2dpY2FsCitjb25uZWN0aW9ucyAoa25vd24gYXMgYHZpcnR1YWwgY2lyY3VpdHMnIGluIFguMjUgdGVybWlub2xvZ3kpIG92ZXIgYSBzaW5nbGUKK3BoeXNpY2FsIGxpbmsuICBFYWNoIHN1Y2ggdmlydHVhbCBjaXJjdWl0IG1heSAoYW5kIGFsbW9zdCBhbHdheXMgZG9lcykgbGVhZAordG8gYSBkaWZmZXJlbnQgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIGFuZCwgdGhlcmVmb3JlLCBkaWZmZXJlbnQgbmV0d29yay4gIEFzIGEKK3Jlc3VsdCwgaXQgaXMgdGhlIHZpcnR1YWwgY2lyY3VpdCwgbm90IHRoZSBwaHlzaWNhbCBsaW5rLCB0aGF0IHJlcHJlc2VudHMgYQorcm91dGUgYW5kLCB0aGVyZWZvcmUsIGEgbmV0d29yayBpbnRlcmZhY2UgaW4gTGludXggdGVybXMuCisKK1RvIGZ1cnRoZXIgY29tcGxpY2F0ZSB0aGluZ3MsIHZpcnR1YWwgY2lyY3VpdHMgYXJlIHVzdWFsbHkgdm9sYXRpbGUgaW4gbmF0dXJlCisoZXhjbHVkaW5nIHNvIGNhbGxlZCBgcGVybWFuZW50JyB2aXJ0dWFsIGNpcmN1aXRzIG9yIFBWQ3MpLiAgV2l0aCBhbG1vc3Qgbm8KK3RpbWUgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYSB2aXJ0dWFsIGNpcmN1aXQsIGl0IGlzIGhpZ2hseSBkZXNpcmFibGUKK3RvIGltcGxlbWVudCBvbi1kZW1hbmQgY29ubmVjdGlvbnMgaW4gb3JkZXIgdG8gbWluaW1pemUgbmV0d29yayBjaGFyZ2VzLiAgU28KK3VubGlrZSBhIHR5cGljYWwgbmV0d29yayBkcml2ZXIsIHRoZSBXQU4gZHJpdmVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgbXVsdGlwbGUKK25ldHdvcmsgaW50ZXJmYWNlcyBhbmQgY29wZSBhcyBtdWx0aXBsZSB2aXJ0dWFsIGNpcmN1aXRzIGNvbWUgaW50byBleGlzdGVuY2UKK2FuZCBnbyBhd2F5IGR5bmFtaWNhbGx5LgorIAorTGFzdCwgYnV0IG5vdCBsZWFzdCwgV0FOIGNvbmZpZ3VyYXRpb24gaXMgbXVjaCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0IG9mIHNheQorRXRoZXJuZXQgYW5kIG1heSB3ZWxsIGFtb3VudCB0byBzZXZlcmFsIGRvemVucyBvZiBwYXJhbWV0ZXJzLiAgU29tZSBvZiB0aGVtCithcmUgImxpbmstd2lkZSIgIHdoaWxlIG90aGVycyBhcmUgdmlydHVhbCBjaXJjdWl0LXNwZWNpZmljLiAgVGhlIHNhbWUgaG9sZHMKK3RydWUgZm9yIFdBTiBzdGF0aXN0aWNzIHdoaWNoIGlzIGJ5IGZhciBtb3JlIGV4dGVuc2l2ZSBhbmQgZXh0cmVtZWx5IHVzZWZ1bAord2hlbiB0cm91Ymxlc2hvb3RpbmcgV0FOIGNvbm5lY3Rpb25zLiAgRXh0ZW5kaW5nIHRoZSBpZmNvbmZpZyB1dGlsaXR5IHRvIHN1aXQKK3RoZXNlIG5lZWRzIG1heSBiZSBwb3NzaWJsZSwgYnV0IGRvZXMgbm90IHNlZW0gcXVpdGUgcmVhc29uYWJsZS4gIFRoZXJlZm9yZSwgYQorV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyJ3MgaW50ZXJmYWNlCitpcyBuZWVkZWQgZm9yIHRoaXMgcHVycG9zZS4KKworTW9zdCBvZiB0aGVzZSBwcm9ibGVtcyBhcmUgdGFrZW4gY2FyZSBvZiBieSB0aGlzIG1vZHVsZS4gIEl0cyBnb2FsIGlzIHRvCitwcm92aWRlIGEgdXNlciB3aXRoIG1vcmUtb3ItbGVzcyBzdGFuZGFyZCBsb29rIGFuZCBmZWVsIGZvciBhbGwgV0FOIGRldmljZXMgYW5kCithc3Npc3QgYSBXQU4gZGV2aWNlIGRyaXZlciB3cml0ZXIgYnkgcHJvdmlkaW5nIGNvbW1vbiBzZXJ2aWNlcywgc3VjaCBhczoKKworIG8gVXNlci1sZXZlbCBpbnRlcmZhY2UgdmlhIC9wcm9jIGZpbGUgc3lzdGVtCisgbyBDZW50cmFsaXplZCBjb25maWd1cmF0aW9uCisgbyBEZXZpY2UgbWFuYWdlbWVudCAoc2V0dXAsIHNodXRkb3duLCBldGMuKQorIG8gTmV0d29yayBpbnRlcmZhY2UgbWFuYWdlbWVudCAoZHluYW1pYyBjcmVhdGlvbi9kZXN0cnVjdGlvbikKKyBvIFByb3RvY29sIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbgorCitUbyBiYSBhYmxlIHRvIHVzZSB0aGUgTGludXggV0FOIFJvdXRlciB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBXQU4gVG9vbHMgcGFja2FnZQorYXZhaWxhYmxlIGZyb20KKworCWZ0cC5zYW5nb21hLmNvbS9wdWIvbGludXgvY3VycmVudF93YW5waXBlL3dhbnBpcGUtWC5ZLloudGd6CisKK3doZXJlIHZYLlkuWiByZXByZXNlbnQgdGhlIHdhbnBpcGUgdmVyc2lvbiBudW1iZXIuCisKK0ZvciB0ZWNobmljYWwgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyBwbGVhc2UgZS1tYWlsIHRvIG5jb3JiaWNAc2FuZ29tYS5jb20uCitGb3IgZ2VuZXJhbCBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiBieQorCisJSG90bGluZToJMS04MDAtMzg4LTI0NzUJKFVTQSBhbmQgQ2FuYWRhLCB0b2xsIGZyZWUpCisJUGhvbmU6CQkoOTA1KSA0NzQtMTk5MCAgZXh0OiAxMDYKKwlGYXg6CQkoOTA1KSA0NzQtOTIyMworCUUtbWFpbDoJCWRtQHNhbmdvbWEuY29tCShEYXZpZCBNYW5kZWxzdGFtKQorCVdXVzoJCWh0dHA6Ly93d3cuc2FuZ29tYS5jb20KKworCitJTlNUQUxMQVRJT04KKworUGxlYXNlIHJlYWQgdGhlIFdhbnBpcGVGb3JMaW51eC5wZGYgbWFudWFsIG9uIGhvdyB0byAKK2luc3RhbGwgdGhlIFdBTlBJUEUgdG9vbHMgYW5kIGRyaXZlcnMgcHJvcGVybHkuIAorCisKK0FmdGVyIGluc3RhbGxpbmcgd2FucGlwZSBwYWNrYWdlOiAvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2MuIAorT24gdGhlIGZ0cC5zYW5nb21hLmNvbSA6IC9saW51eC9jdXJyZW50X3dhbnBpcGUvZG9jCisKKworQ09QWVJJR0hUIEFORCBMSUNFTlNJTkcgSU5GT1JNQVRJT04KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAordGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzCitBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisKK0FDS05PV0xFREdFTUVOVFMKKworVGhpcyBwcm9kdWN0IGlzIGJhc2VkIG9uIHRoZSBXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBSb3V0ZXIgZGV2ZWxvcGVkCitieSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGZvciBMaW51eCAyLjAueCBhbmQgMi4yLnguICBTdWNjZXNzIG9mIHRoZSBXQU5QSVBFCit0b2dldGhlciB3aXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgTGludXgga2VybmVsIGluIHN1bW1lciAxOTk2IGNvbW1hbmRlZAorYWRlcXVhdGUgY2hhbmdlcyB0byB0aGUgV0FOUElQRSBjb2RlIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgbmV3IExpbnV4CitmZWF0dXJlcy4KKworSW5zdGVhZCBvZiBjb250aW51aW5nIGRldmVsb3BpbmcgcHJvcHJpZXRhcnkgaW50ZXJmYWNlIHRpZWQgdG8gU2FuZ29tYSBXQU4KK2NhcmRzLCB3ZSBkZWNpZGVkIHRvIHNlcGFyYXRlIGFsbCBoYXJkd2FyZS1pbmRlcGVuZGVudCBjb2RlIGludG8gYSBzZXBhcmF0ZQorbW9kdWxlIGFuZCBkZWZpbmVkIHR3byBsZXZlbHMgb2YgaW50ZXJmYWNlcyAtIG9uZSBmb3IgdXNlci1sZXZlbCBhcHBsaWNhdGlvbnMKK2FuZCBhbm90aGVyIGZvciBrZXJuZWwtbGV2ZWwgV0FOIGRyaXZlcnMuICBXQU5QSVBFIGlzIG5vdyBpbXBsZW1lbnRlZCBhcyBhCitXQU4gZHJpdmVyIGNvbXBsaWFudCB3aXRoIHRoZSBXQU4gTGluayBEcml2ZXIgaW50ZXJmYWNlLiAgQWxzbyBhIGdlbmVyYWwKK3B1cnBvc2UgV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgYSBzZXQgb2Ygc2hlbGwgc2NyaXB0cyB3YXMgZGV2ZWxvcGVkIHRvIAorc3VwcG9ydCBXQU4gcm91dGVyIGF0IHRoZSB1c2VyIGxldmVsLgorCitNYW55IHVzZWZ1bCBpZGVhcyBjb25jZXJuaW5nIGhhcmR3YXJlLWluZGVwZW5kZW50IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbgord2VyZSBnaXZlbiBieSBNaWtlIE1jTGFnYW4gPG1pa2UubWNsYWdhbkBsaW51eC5vcmc+IGFuZCBoaXMgaW1wbGVtZW50YXRpb24KK29mIHRoZSBGcmFtZSBSZWxheSByb3V0ZXIgYW5kIGRyaXZlcnMgZm9yIFNhbmdvbWEgY2FyZHMgKGRsY2kvc2RsYSkuCisKK1dpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJcyBiZWluZyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgV0FOUElQRSwKK2Egc3BlY2lhbCB0aGFuayBnb2VzIHRvIEFsYW4gQ294IGluIHByb3ZpZGluZyBpbnNpZ2h0IGludG8gQlNEIHNvY2tldHMuCisKK1NwZWNpYWwgdGhhbmtzIHRvIGFsbCB0aGUgV0FOUElQRSB1c2VycyB3aG8gcGVyZm9ybWVkIGZpZWxkLXRlc3RpbmcsIHJlcG9ydGVkCitidWdzIGFuZCBtYWRlIHZhbHVhYmxlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyB0aGF0IGhlbHAgdXMgdG8gaW1wcm92ZSB0aGlzCitwcm9kdWN0LgorCisKKworTkVXIElOIFRISVMgUkVMRUFTRQorCisJbyBVcGRhdGVkIHRoZSBXQU5DRkcgdXRpbGl0eQorCQlDYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRAorCQlmb3IgYXN5bmMgY29ubmVjdGlvbnMuCisKKwlvIEFkZGVkIHRoZSBQUFBDT05GSUcgdXRpbGl0eQorCQlVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRCBkYW1lb24gZm9yIHRoZQorCQlXQU5QSVBFIEFzeW5jIFBQUCBhbmQgc3RhbmRhcmQgc2VyaWFsIHBvcnQuCisJCVRoZSB3YW5jZmcgY2FsbHMgdGhlIHBwcGNvbmZpZyB0byBjb25maWd1cmUKKwkJdGhlIHBwcGQuCisKKwlvIEZpeGVkIHRoZSBQQ0kgYXV0b2RldGVjdCBmZWF0dXJlLiAgCisJCVRoZSBTTE9UIDAgd2FzIHVzZWQgYXMgYW4gYXV0b2RldGVjdCBvcHRpb24KKwkJaG93ZXZlciwgc29tZSBoaWdoIGVuZCBQQydzIHNsb3QgbnVtYmVycyBzdGFydAorCQlmcm9tIDAuIAorCisJbyBUaGlzIHJlbGVhc2UgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIG5ldyBiYWNrdXBkCisJICBkYWVtb24gcmVsZWFzZS4KKwkKKworUFJPRFVDVCBDT01QT05FTlRTIEFORCBSRUxBVEVEIEZJTEVTCisKKy9ldGM6IChvciB1c2VyIGRlZmluZWQpCisJd2FucGlwZTEuY29uZglkZWZhdWx0IHJvdXRlciBjb25maWd1cmF0aW9uIGZpbGUKKworL2xpYi9tb2R1bGVzL1guWS5aL21pc2M6CisJd2Fucm91dGVyLm8Jcm91dGVyIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGUKKwlhZl93YW5waXBlLm8Jd2FucGlwZSBhcGkgc29ja2V0IG1vZHVsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbmV0OgorCXNkbGFkcnYubwlTYW5nb21hIFNETEEgc3VwcG9ydCBtb2R1bGUKKwl3YW5waXBlLm8JU2FuZ29tYSBXQU5QSVBFKHRtKSBkcml2ZXIgbW9kdWxlCisKKy9wcm9jL25ldC93YW5yb3V0ZXIKKwlDb25maWcJCXJlYWRzIGN1cnJlbnQgcm91dGVyIGNvbmZpZ3VyYXRpb24KKwlTdGF0dXMJCXJlYWRzIGN1cnJlbnQgcm91dGVyIHN0YXR1cworCXtuYW1lfQkJcmVhZHMgV0FOIGRyaXZlciBzdGF0aXN0aWNzCisKKy91c3Ivc2JpbjoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIHNjcmlwdAorCXdhbmNvbmZpZwl3YW5yb3V0ZXIgY29uZmlndXJhdGlvbiB1dGlsaXR5CisJc2RsYWR1bXAJV0FOUElQRSBhZGFwdGVyIG1lbW9yeSBkdW1wIHV0aWxpdHkKKyAgICAgICAgZnBpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIEZyYW1lIFJlbGF5CisgICAgICAgIGNwaXBlbW9uICAgICAgICBNb25pdG9yIGZvciBDaXNjbyBIRExDCisJcHBpcGVtb24gCU1vbml0b3IgZm9yIFBQUAorCXhwaXBlbW9uIAlNb25pdG9yIGZvciBYMjUKKwl3cGtiZG1vbiAgICAgICAgV0FOUElQRSBrZXlib2FyZCBsZWQgbW9uaXRvci9kZWJ1Z2dlcgorCisvdXNyL2xvY2FsL3dhbnJvdXRlcjoKKwlSRUFETUUJCXRoaXMgZmlsZQorCUNPUFlJTkcJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJU2V0dXAJCWluc3RhbGxhdGlvbiBzY3JpcHQKKwlGaWxlbGlzdAlkaXN0cmlidXRpb24gZGVmaW5pdGlvbiBmaWxlCisJd2Fucm91dGVyLnJjCW1ldGEtY29uZmlndXJhdGlvbiBmaWxlIAorCQkJKHVzZWQgYnkgdGhlIFNldHVwIGFuZCB3YW5yb3V0ZXIgc2NyaXB0KQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2M6CisJd2FucGlwZUZvckxpbnV4LnBkZiAJV0FOIFJvdXRlciBVc2VyJ3MgTWFudWFsCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXM6CisJd2Fucm91dGVyLXYyMjEzLmd6ICAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbHMgMi4yLjExIHVwIHRvIDIuMi4xMy4KKwl3YW5yb3V0ZXItdjIyMTQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjIuMTQuIAorCXdhbnJvdXRlci12MjIxNS5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTUgdG8gMi4yLjE3LgorCXdhbnJvdXRlci12MjIxOC5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTggYW5kIHVwLgorCXdhbnJvdXRlci12MjQwLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjAuICAKKwl3YW5yb3V0ZXItdjI0Mi5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuNC4yIGFuZCB1cC4KKwl3YW5yb3V0ZXItdjIwMzQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzQKKwl3YW5yb3V0ZXItdjIwMzYuZ3ogCXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi4wLjM2IGFuZCB1cC4gCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXMva2RyaXZlcnM6CisJU291cmNlcyBvZiB0aGUgbGF0ZXN0IFdBTlBJUEUgZGV2aWNlIGRyaXZlcnMuCisJVGhlc2UgYXJlIHVzZWQgdG8gVVBHUkFERSB0aGUgbGludXgga2VybmVsIHRvIHRoZSBuZXdlc3QKKwl2ZXJzaW9uIGlmIHRoZSBrZXJuZWwgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gcGF0aGNlZCB3aXRoCisJV0FOUElQRSBkcml2ZXJzLgorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9zYW1wbGVzOgorCWludGVyZmFjZQlzYW1wbGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZmlsZQorCXdhbnBpcGUxLmNwcmkgCUNIRExDIHByaW1hcnkgcG9ydAorICAgICAJd2FucGlwZTIuY3NlYyAJQ0hETEMgc2Vjb25kYXJ5IHBvcnQKKyAgICAgCXdhbnBpcGUxLmZyICAgCUZyYW1lIFJlbGF5IHByb3RvY29sCisgICAgIAl3YW5waXBlMS5wcHAgIAlQUFAgcHJvdG9jb2wgKSAKKwl3YW5waXBlMS5hc3kJQ0hETEMgQVNZTkMgcHJvdG9jb2wKKwl3YW5waXBlMS54MjUJWDI1IHByb3RvY29sCisJd2FucGlwZTEuc3R0eQlTeW5jIFRUWSBkcml2ZXIgKFVzZWQgYnkgS2VybmVsIFBQUEQgZGFlbW9uKQorCXdhbnBpcGUxLmF0dHkJQXN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2Fucm91dGVyLnJjCXNhbXBsZSBtZXRhLWNvbmZpZ3VyYXRpb24gZmlsZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci91dGlsOgorCSoJCXdhbi10b29scyB1dGlsaXRpZXMgc291cmNlIGNvZGUKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL3gyNToKKwkqCQl4MjUgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2FwaS9jaGRsYzoKKwkqCQljaGRsYyBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2ZyOgorCSoJCWZyIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9jb25maWcvd2FuY2ZnOgorCXdhbmNmZwkJV0FOUElQRSBHVUkgY29uZmlndXJhdGlvbiBwcm9ncmFtLgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyB3YW5waXBlIy5jb25mIGZpbGVzLiAKKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy9jZmdmdDE6CisJY2ZnZnQxCQlHVUkgQ1NVL0RTVSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisKKy91c3IvaW5jbHVkZS9saW51eDoKKwl3YW5yb3V0ZXIuaAlyb3V0ZXIgQVBJIGRlZmluaXRpb25zCisJd2FucGlwZS5oCVdBTlBJUEUgQVBJIGRlZmluaXRpb25zCisJc2RsYWRydi5oCVNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zCisJc2RsYXNmbS5oCVNETEEgZmlybXdhcmUgbW9kdWxlIGRlZmluaXRpb25zCisJaWZfd2FucGlwZS5oCVdBTlBJUEUgU29ja2V0IGRlZmluaXRpb25zCisJaWZfd2FucGlwZV9jb21tb24uaAlXQU5QSVBFIFNvY2tldC9Ecml2ZXIgY29tbW9uIGRlZmluaXRpb25zLgorCXNkbGFwY2kuaAlXQU5QSVBFIFBDSSBkZWZpbml0aW9ucworCQorCisvdXNyL3NyYy9saW51eC9uZXQvd2Fucm91dGVyOgorCSoJCXdhbnJvdXRlciBzb3VyY2UgY29kZQorCisvdmFyL2xvZzoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIGxvZyAoY3JlYXRlZCBieSB0aGUgU2V0dXAgc2NyaXB0KQorCisvdmFyL2xvY2s6ICAob3IgL3Zhci9sb2NrL3N1YnN5cyBmb3IgUmVkSGF0KQorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgbG9jayBmaWxlIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2Zpcm13YXJlOgorCWZyNTE0LnNmbQlGcmFtZSByZWxheSBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCWNkdWFsNTE0LnNmbQlEdWFsIFBvcnQgQ2lzY28gSERMQyBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCXBwcDUxNC5zZm0gICAgICBQUFAgRmlybXdhcmUgZm9yIFNhbmdvbWEgUzUwOCBhbmQgUzUxNCBjYXJkcworCXgyNV81MDguc2ZtCVgyNSBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGNhcmQuCisKKworUkVWSVNJT04gSElTVE9SWQorCisxLjAuMAlEZWNlbWJlciAzMSwgMTk5NglJbml0aWFsIHZlcnNpb24KKworMS4wLjEJSmFudWFyeSAzMCwgMTk5NwlTdGF0dXMgYW5kIHN0YXRpc3RpY3MgY2FuIGJlIHJlYWQgdmlhIC9wcm9jCisJCQkJZmlsZXN5c3RlbSBlbnRyaWVzLgorCisxLjAuMiAgIEFwcmlsIDMwLCAxOTk3ICAgICAgICAgIEFkZGVkIFVEUCBtYW5hZ2VtZW50IHZpYSBtb25pdG9ycy4KKworMS4wLjMJSnVuZSAzLCAxOTk3CQlVRFAgbWFuYWdlbWVudCBmb3IgbXVsdGlwbGUgYm9hcmRzIHVzaW5nIEZyYW1lCisJCQkJUmVsYXkgYW5kIFBQUAorCQkJCUVuYWJsZWQgY29udGludW91cyB0cmFuc21pc3Npb24gb2YgQ29uZmlndXJlIAorCQkJCVJlcXVlc3QgUGFja2V0IGZvciBQUFAgKGZvciA1MDggb25seSkKKwkJCQlDb25uZWN0aW9uIFRpbWVvdXQgZm9yIFBQUCBjaGFuZ2VkIGZyb20gOTAwIHRvIDAKKwkJCQlGbG93IENvbnRyb2wgUHJvYmxlbSBmaXhlZCBmb3IgRnJhbWUgUmVsYXkKKworMS4wLjQJSnVseSAxMCwgMTk5NwkJUzUwOC9GVDEgbW9uaXRvcmluZyBjYXBhYmlsaXR5IGluIGZwaXBlbW9uIGFuZAorCQkJCXBwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlDb25maWd1cmFibGUgVFRMIGZvciBVRFAgcGFja2V0cy4KKwkJCQlNdWx0aWNhc3QgYW5kIEJyb2FkY2FzdCBJUCBzb3VyY2UgYWRkcmVzc2VzIGFyZQorCQkJCXNpbGVudGx5IGRpc2NhcmRlZC4KKworMS4wLjUJSnVseSAyOCwgMTk5NwkJQ29uZmlndXJhYmxlIFQzOTEsVDM5MixOMzkxLE4zOTIsTjM5MyBmb3IgRnJhbWUKKwkJCQlSZWxheSBpbiByb3V0ZXIuY29uZi4KKwkJCQlDb25maWd1cmFibGUgTWVtb3J5IEFkZHJlc3MgdGhyb3VnaCByb3V0ZXIuY29uZiAKKwkJCQlmb3IgRnJhbWUgUmVsYXksIFBQUCBhbmQgWC4yNS4gKGNvbW1lbnRpbmcgdGhpcworIAkJCQlvdXQgZW5hYmxlcyBhdXRvLWRldGVjdGlvbikuCisJCQkJRml4ZWQgZnJlZWluZyB1cCByZWNlaXZlZCBidWZmZXJzIHVzaW5nIGtmcmVlKCkKKyAJCQkJZm9yIEZyYW1lIFJlbGF5IGFuZCBYLjI1LgorCQkJCVByb3RlY3Qgc2RsYV9wZWVrKCkgYnkgY2FsbGluZyBzYXZlX2ZsYWdzKCksCisJCQkJY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KKwkJCQlDaGFuZ2VkIG51bWJlciBvZiBUcmFjZSBlbGVtZW50cyBmcm9tIDMyIHRvIDIwCisJCQkJQWRkZWQgRExDSSBzcGVjaWZpYyBkYXRhIG1vbml0b3JpbmcgaW4gRlBJUEVNT04uIAorMi4wLjAJTm92IDA3LCAxOTk3CQlJbXBsZW1lbnRlZCBwcm90ZWN0aW9uIG9mIFJBQ0UgY29uZGl0aW9ucyBieSAKKwkJCQljcml0aWNhbCBmbGFncyBmb3IgRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlETENJIExpc3QgaW50ZXJydXB0IG1vZGUgaW1wbGVtZW50ZWQuCisJCQkJSVBYIHN1cHBvcnQgaW4gRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlJUFggU2VydmVyIFN1cHBvcnQgKE1BUlMpCisJCQkJTW9yZSBkcml2ZXIgc3BlY2lmaWMgc3RhdHMgaW5jbHVkZWQgaW4gRlBJUEVNT04KKwkJCQlhbmQgUElQRU1PTi4KKworMi4wLjEJTm92IDI4LCAxOTk3CQlCdWcgRml4ZXMgZm9yIHZlcnNpb24gMi4wLjAuCisJCQkJUHJvdGVjdGlvbiBvZiAiZW5hYmxlX2lycSgpIiB3aGlsZSAKKwkJCQkiZGlzYWJsZV9pcnEoKSIgaGFzIGJlZW4gZW5hYmxlZCBmcm9tIGFueSBvdGhlcgorCQkJCXJvdXRpbmUgKGZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYMjUpLgorCQkJCUFkZGVkIGFkZGl0aW9uYWwgU3RhdHMgZm9yIEZwaXBlbW9uIGFuZCBQcGlwZW1vbgorCQkJCUltcHJvdmVkIExvYWQgU2hhcmluZyBmb3IgbXVsdGlwbGUgYm9hcmRzCisKKzIuMC4yCURlYyAwOSwgMTk5NwkJU3VwcG9ydCBmb3IgUEFQIGFuZCBDSEFQIGZvciBwcHAgaGFzIGJlZW4KKwkJCQlpbXBsZW1lbnRlZC4KKworMi4wLjMJQXVnIDE1LCAxOTk4CQlOZXcgcmVsZWFzZSBzdXBwb3J0aW5nIENpc2NvIEhETEMsIENJUiBmb3IgRnJhbWUKKwkJCQlyZWxheSwgRHluYW1pYyBJUCBhc3NpZ25tZW50IGZvciBQUFAgYW5kIEludmVyc2UKKwkJCQlBcnAgc3VwcG9ydCBmb3IgRnJhbWUtcmVsYXkuICBNYW4gUGFnZXMgYXJlIAorCQkJCWluY2x1ZGVkIGZvciBiZXR0ZXIgc3VwcG9ydCBhbmQgYSBuZXcgdXRpbGl0eQorCQkJCWZvciBjb25maWd1cmluZyBGVDEgY2FyZHMuCisKKzIuMC40CURlYyAwOSwgMTk5OAkgICAgICAgIER1YWwgUG9ydCBzdXBwb3J0IGZvciBDaXNjbyBIRExDLgorCQkJCVN1cHBvcnQgZm9yIEhETEMgKExBUEIpIEFQSS4KKwkJCQlTdXBwb3J0cyBCaVN5bmMgU3RyZWFtaW5nIGNvZGUgZm9yIFM1MDJFIAorCQkJCWFuZCBTNTAzIGNhcmRzLgorCQkJCVN1cHBvcnQgZm9yIFN0cmVhbWluZyBIRExDIEFQSS4KKwkJCQlQcm92aWRlcyBhIEJTRCBzb2NrZXQgaW50ZXJmYWNlIGZvciAKKwkJCQljcmVhdGluZyBhcHBsaWNhdGlvbnMgdXNpbmcgQmlTeW5jCisgICAJCQkJc3RyZWFtaW5nLiAgICAgICAgCisKKzIuMC41ICAgQXVnIDA0LCAxOTk5IAkJQ0hETEMgaW5pdGlhbGl6YXRpbiBidWcgZml4LgorCQkJCVBQUCBpbnRlcnJ1cHQgZHJpdmVuIGRyaXZlcjogCisgIAkJCQlGaXggdG8gdGhlIFBQUCBsaW5lIGhhbmd1cCBwcm9ibGVtLgorCQkJCU5ldyBQUFAgZmlybXdhcmUKKwkJCQlBZGRlZCBjb21tZW50cyB0byB0aGUgc3RhcnR1cCBTWVNURU0gRVJST1IgbWVzc2FnZXMKKwkJCQlYcGlwZW1vbiBkZWJ1Z2dpbmcgYXBwbGljYXRpb24gZm9yIHRoZSBYMjUgcHJvdG9jb2wKKwkJCQlOZXcgVVNFUl9NQU5VQUwudHh0CisJCQkJRml4ZWQgdGhlIG9kZCBib3VuZGFyeSA0Ynl0ZSB3cml0ZXMgdG8gdGhlIGJvYXJkLgorCQkJCUJpU3luYyBTdHJlYW1pbmcgY29kZSBoYXMgYmVlbiB0YWtlbiBvdXQuICAKKwkJCQkgQXZhaWxhYmxlIGFzIGEgcGF0Y2guCisJCQkJU3RyZWFtaW5nIEhETEMgQVBJIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4gICAgICAgICAgICAgICAgIAorCisyLjAuNiAgIEF1ZyAxNywgMTk5OQkJSW5jcmVhc2VkIGRlYnVnZ2luZyBpbiBzdGF0dXAgc2NyaXB0cworCQkJCUZpeGVkIGluc2FsbGF0aW9uIGJ1Z3MgZnJvbSAyLjAuNQorCQkJCUtlcm5lbCBwYXRjaCB3b3JrcyBmb3IgYm90aCAyLjIuMTAgYW5kIDIuMi4xMSBrZXJuZWxzLgorCQkJCVRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcGFja2FnZXMgICAgICAgICAKKworMi4wLjcgICBBdWcgMjYsIDE5OTkJCW8gIE1lcmdlZCBYMjVBUEkgY29kZSBpbnRvIFdBTlBJUEUuCisJCQkJbyAgRml4ZWQgYSBtZW1lb3J5IGxlYWsgZm9yIFgyNUFQSQorCQkJCW8gIFVwZGF0ZWQgdGhlIFgyNUFQSSBjb2RlIGZvciAyLjIuWCBrZXJuZWxzLgorCQkJCW8gIEltcHJvdmVkIE5FTSBoYW5kbGluZy4gICAKKworMi4xLjAJT2N0IDI1LCAxOTk5CQlvIE5ldyBjb2RlIGZvciBTNTE0IFBDSSBDYXJkCisJCQkJbyBOZXcgQ0hETEMgYW5kIEZyYW1lIFJlbGF5IGRyaXZlcnMKKwkJCQlvIFBQUCBhbmQgWDI1IGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZSAgICAKKworMi4xLjEJTm92IDMwLCAxOTk5CQlvIFBQUCBzdXBwb3J0IGZvciBTNTE0IFBDSSBDYXJkcworCisyLjEuMyAgIEFwciAwNiwgMjAwMAkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIAorCQkJCW8gU29ja2V0IGJhc2VkIGNoZGxjIGFwaQorCQkJCW8gU29ja2V0IGJhc2VkIGZyIGFwaQorCQkJCW8gRHVhbCBQb3J0IFJlY2VpdmUgb25seSBDSERMQyBzdXBwb3J0LgorCQkJCW8gQXN5bmNocm9ub3VzIENIRExDIHN1cHBvcnQgKFNlY29uZGFyeSBQb3J0KQorCQkJCW8gY2ZnZnQxIEdVSSBjc3UvZHN1IGNvbmZpZ3VyYXRvcgorCQkJCW8gd2FuY2ZnIEdVSSBjb25maWd1cmF0aW9uIGZpbGUgCisJCQkJICBjb25maWd1cmF0b3IuCisJCQkJbyBBcmNoaXRlY3R1YWwgZGlyZWN0b3J5IGNoYW5nZXMuCisKK2JldGEtMi4xLjQgSnVsIDIwMDAJCW8gRHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbjoKKwkJCQkJTmV0d29yayBpbnRlcmZhY2VzIHJlZmxlY3QgdGhlIHN0YXRlCisJCQkJCW9mIHByb3RvY29sIGxheWVyLiAgSWYgdGhlIHByb3RvY29sIGJlY29tZXMKKwkJCQkJZGlzY29ubmVjdGVkLCBkcml2ZXIgd2lsbCBicmluZyBkb3duCisJCQkJCXRoZSBpbnRlcmZhY2UuICBPbmNlIHRoZSBwcm90b2NvbCByZWNvbm5lY3RzCisJCQkJCXRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBicm91Z2h0IHVwLiAKKwkJCQkJCisJCQkJCU5vdGU6IFRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KKworCQkJCW8gRHluYW1pYyB3YW5yb3V0ZXIgc2V0dXAgdXNpbmcgJ3dhbmNvbmZpZyc6CisJCQkJCXdhbmNvbmZpZyB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvCisJCQkJCXNodXRkb3duLHJlc3RhcnQsc3RhcnQgb3IgcmVjb25maWd1cmUgCisJCQkJCWEgdmlydHVhbCBjaXJjdWl0IGR5bmFtaWNhbGx5LgorCQkJCSAgICAgCisJCQkJCUZyYW1lIFJlbGF5OiAgRWFjaCBETENJIGNhbiBiZTogCisJCQkJCQkgICAgICBjcmVhdGVkLHN0b3BwZWQscmVzdGFydGVkIGFuZCByZWNvbmZpZ3VyZWQKKwkJCQkJCSAgICAgIGR5bmFtaWNhbGx5IHVzaW5nIHdhbmNvbmZpZy4KKwkJCQkJCisJCQkJCQkgICAgICBleDogd2FuY29uZmlnIGNhcmQgd2FucGlwZTEgZGV2IHdwMV9mcjE2IHVwCisJCQkJICAKKwkJCQlvIFdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgorCQkJCQl3YW5jb25maWcgYWxzbyBzdXBwb3J0cyB3YW5yb3V0ZXIgc3RhcnR1cCB2aWEgY29tbWFuZCBsaW5lCisJCQkJCWFyZ3VtZW50cy4gIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIGEgd2FucGlwZSMuY29uZgorCQkJCQljb25maWd1cmF0aW9uIGZpbGUuICAKKworCQkJCW8gU29ja2V0IGJhc2VkIHgyNWFwaSB1cGRhdGUvYnVnIGZpeGVzLgorCQkJCQlBZGRlZCBzdXBwb3J0IGZvciBMQ04gbnVtYmVycyBncmVhdGVyIHRoYW4gMjU1LgorCQkJCQlPcHRpb24gdG8gcGFzcyB1cCBtb2RlbSBtZXNzYWdlcy4KKwkJCQkJUHJvdmlkZWQgYSBQQ0kgSVJRIGNoZWNrLCBzbyBhIHNpbmdsZSBTNTE0CisJCQkJCWNhcmQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgbm9uLXNoYXJpbmcgaW50ZXJydXB0LgorCisJCQkJbyBGaXhlcyB0byB0aGUgd2FuY2ZnIHV0aWxpdHkuCisJCQkJbyBOZXcgRlQxIGRlYnVnZ2luZyBzdXBwb3J0IHZpYSAqcGlwZW1vbiB1dGlsaXRpZXMuCisJCQkJbyBGcmFtZSBSZWxheSBBUlAgc3VwcG9ydCBFbmFibGVkLgorCitiZXRhMy0yLjEuNCBKdWwgMjAwMAkJbyBYMjUgTV9CSVQgUHJvYmxlbSBmaXguCisJCQkJbyBBZGRlZCB0aGUgTXVsdGktUG9ydCBQUFAKKwkJCQkgIFVwZGF0ZWQgdXRpbGl0ZXMgZm9yIHRoZSBNdWx0aS1Qb3J0IFBQUC4KKworMi4xLjQJQXV0IDIwMDAKKwkJCQlvIEluIFgyNUFQSToKKwkJCQkJTWF4aW11bSBwYWNrZXQgYW4gYXBwbGljYXRpb24gY2FuIHNlbmQKKwkJCQkJdG8gdGhlIGRyaXZlciBoYXMgYmVlbiBleHRlbmRlZCB0byA0MDk2IGJ5dGVzLgorCisJCQkJCUZpeGVkIHRoZSB4MjUgc3RhcnR1cCBidWcuIEVuYWJsZSAKKwkJCQkJY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcworCQkJCQljb21lIHVwLiAgSElHSCBTVkMvUFZDIGlzIHVzZWQgdG8gY2FsY3VsYXRlCisJCQkJCXRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCisJCQkJCUVuYWJsZSBwcm90b2NvbCBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWFyZSBlbmFibGVkLgorCisJCQkJbyBBZGRlZCBhbiBleHRyYSBzdGF0ZSB0byB0aGUgRlQxIGNvbmZpZywga2VybmVsIG1vZHVsZS4KKwkJCQlvIFVwZGF0ZWQgdGhlIHBpcGVtb24gZGVidWdnZXJzLgorCisJCQkJbyBCbG9ja2VkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmcm9tIHJ1bm5pbmcgb24ga2VybmVscworCQkJCSAgMi4yLjE2IG9yIGdyZWF0ZXIsIGR1ZSB0byBzeW5jcHBwIGtlcm5lbCBtb2R1bGUKKwkJCQkgIGNoYW5nZS4gCisJICAKK2JldGExLTIuMS41IAlOb3YgMTUgMjAwMAorCQkJCW8gRml4ZWQgdGhlIE11bGl0UG9ydCBQUFAgU3VwcG9ydCBmb3Iga2VybmVscyAyLjIuMTYgYW5kIGFib3ZlLgorCQkJCSAgMi4yLlgga2VybmVscyBvbmx5CisKKwkJCQlvIFNlY3VyZWQgdGhlIGRyaXZlciBVRFAgZGVidWdnaW5nIGNhbGxzCisJCQkJCS0gQWxsIGlsbGVnYWwgbmV0b3dyayBkZWJ1Z2dpbmcgY2FsbHMgYXJlIHJlcG9ydGVkIHRvCisJCQkJCSAgdGhlIGxvZy4KKwkJCQkJLSBEZWZpbmVkIGEgc2V0IG9mIGFsbG93ZWQgY29tbWFuZHMsIGFsbCBvdGhlciBkZW5pZWQuCisJCQkJCQorCQkJCW8gQ3BpcGVtb24KKwkJCQkJLSBBZGRlZCBzZXQgRlQxIGNvbW1hbmRzIHRvIHRoZSBjcGlwZW1vbi4gVGh1cyBDU1UvRFNVCisJCQkJCSAgY29uZmlndXJhaXRvbiBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIGNwaXBlbW9uLgorCQkJCQkgIEFsbCBzeXN0ZW1zIHRoYXQgY2Fubm90IHJ1biBjZmdmdDEgR1VJIHV0aWxpdHkgc2hvdWxkCisJCQkJCSAgdXNlIGNwaXBlbW9uIHRvIGNvbmZpZ3VyZSB0aGUgb24gYm9hcmQgQ1NVL0RTVS4KKworCisJCQkJbyBLZXlib2FyZCBMZWQgTW9uaXRvci9EZWJ1Z2dlcgorCQkJCQktIEEgbmV3IHV0aWx0eSAvdXNyL3NiaW4vd3BrYmRtb24gdXNlcyBrZXlib2FyZCBsZWRzCisJCQkJCSAgdG8gY29udmV5IG9wZXJhdGluYWwgc3RhdGlzdGljIGluZm9ybWF0aW9uIG9mIHRoZSAKKwkJCQkJICBTYW5nb21hIFdBTlBJUEUgY2FyZHMuCisJCQkJCU5VTV9MT0NLICAgID0gTGluZSBTdGF0ZSAgKE9uPWNvbm5lY3RlZCwgICAgT2ZmPWRpc2Nvbm5lY3RlZCkKKwkJCQkJQ0FQU19MT0NLICAgPSBUeCBkYXRhICAgICAoT249dHJhbnNtaXR0aW5nLCBPZmY9bm8gdHggZGF0YSkKKwkJCQkJU0NST0xMX0xPQ0sgPSBSeCBkYXRhICAgICAoT249cmVjZWl2aW5nLCAgICBPZmY9bm8gcnggZGF0YQorCQkJCQkKKwkJCQlvIEhhcmR3YXJlIHByb2JlIG9uIG1vZHVsZSBsb2FkIGFuZCBkeW5hbWljIGRldmljZSBhbGxvY2F0aW9uCisJCQkJCS0gRHVyaW5nIFdBTlBJUEUgbW9kdWxlIGxvYWQsIGFsbCBTYW5nb21hIGNhcmRzIGFyZSBwcm9iZWQKKwkJCQkJICBhbmQgZm91bmQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBpbiB0aGUgL3Zhci9sb2cvbWVzc2FnZXMuCisJCQkJCS0gSWYgbm8gY2FyZHMgYXJlIGZvdW5kLCB0aGUgbW9kdWxlIGxvYWQgZmFpbHMuCisJCQkJCS0gQXBwcm9wcmlhdGUgbnVtYmVyIG9mIGRldmljZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCAKKwkJCQkJICBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIFNhbmdvbWEgY2FyZHMgZm91bmQuCisKKwkJCQkJICBOb3RlOiBUaGUga2VybmVsIGNvbmZpZ3VyYWl0b24gb3B0aW9uIAorCQkJCQkJQ09ORklHX1dBTlBJUEVfQ0FSRFMgaGFzIGJlZW4gdGFrZW4gb3V0LgorCQkJCQkKKwkJCQlvIEZpeGVkIHRoZSBGcmFtZSBSZWxheSBhbmQgQ2hkbGMgbmV0d29yayBpbnRlcmZhY2VzIHNvIHRoZXkgYXJlCisJCQkJICBjb21wYXRpYmxlIHdpdGggbGlicGNhcCBsaWJyYXJpZXMuICBNZWFuaW5nLCB0Y3BkdW1wLCBzbm9ydCwKKwkJCQkgIGV0aGVyZWFsLCBhbmQgYWxsIG90aGVyIHBhY2tldCBzbmlmZmVycyBhbmQgZGVidWdnZXJzIHdvcmsgb24KKwkJCQkgIGFsbCBXQU5QSVBFIG5ldG93cmsgaW50ZXJmYWNlcy4KKwkJCQkJLSBTZXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGVuY29kaW5nIHR5cGUgdG8gQVJQSFJEX1BQUC4KKwkJCQkJICBUaGlzIHRlbGwgdGhlIHNuaWZmZXJzIHRoYXQgZGF0YSBvYnRhaW5lZCBmcm9tIHRoZQorCQkJCQkgIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGluIHB1cmUgSVAgZm9ybWF0LgorCQkJCSAgRml4IGZvciAyLjIuWCBrZXJuZWxzIG9ubHkuCisJCQkJCisJCQkJbyBUcnVlIGludGVyZmFjZSBlbmNvZGluZyBvcHRpb24gZm9yIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQktIFRoZSBhYm92ZSBmaXggc2V0cyB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcKKwkJCQkJICB0eXBlIHRvIEFSUEhSRF9QUFAsIGhvd2V2ZXIgc29tZSBjdXN0b21lcnMgdXNlCisJCQkJCSAgdGhlIGVuY29kaW5nIGludGVyZmFjZSB0eXBlIHRvIGRldGVybWluZSB0aGUKKwkJCQkJICBwcm90b2NvbCBydW5uaW5nLiAgVGhlcmVmb3JlLCB0aGUgVFVSRSBFTkNPRElORworCQkJCQkgIG9wdGlvbiB3aWxsIHNldCB0aGUgaW50ZXJmYWNlIHR5cGUgYmFjayB0byB0aGUKKwkJCQkJICBvcmlnaW5hbCB2YWx1ZS4gIAorCisJCQkJCSAgTk9URTogSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB3aXRoIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQkJbGlicGNhcCBsaWJyYXJ5IHN1cHBvcnQgd2lsbCBiZSBicm9rZW4uICAKKwkJCQkJCWkuZS4gdGNwZHVtcCB3aWxsIG5vdCB3b3JrLgorCQkJCQlGaXggZm9yIDIuMi54IEtlcm5lbHMgb25seS4KKwkJCQkJCQorCQkJCW8gRXRoZXJuZXQgQnJpZGdpbmQgb3ZlciBGcmFtZSBSZWxheQorCQkJCQktIFRoZSBGcmFtZSBSZWxheSBicmlkZ2luZyBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgCisJCQkJCSAgS3Jpc3RpYW4gSG9mZm1hbm4gYW5kIE1hcmsgV2VsbHMuICAKKwkJCQkJLSBUaGUgTGludXgga2VybmVsIGJyaWRnZSBpcyB1c2VkIHRvIHNlbmQgZXRoZXJuZXQgCisJCQkJCSAgZGF0YSBvdmVyIHRoZSBmcmFtZSByZWxheSBsaW5rcy4KKwkJCQkJRm9yIDIuMi5YIEtlcm5lbHMgb25seS4KKworCQkJCW8gQWRkZWQgZXh0ZW5zaXZlIDIuMC5YIHN1cHBvcnQuIE1vc3QgbmV3IGZlYXR1cmVzIG9mCisJCQkJICAyLjEuNSBmb3IgcHJvdG9jb2xzIEZyYW1lIFJlbGF5LCBQUFAgYW5kIENIRExDIGFyZQorCQkJCSAgc3VwcG9ydGVkIHVuZGVyIDIuMC5YIGtlcm5lbHMuIAorCitiZXRhMS0yLjIuMCAJRGVjIDMwIDIwMDAKKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgMi40Llgga2VybmVscy4KKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgU01QIHN1cHBvcnQuCisJCQkJbyBYMjVBUEkgaXMgbm93IGFibGUgdG8gc2hhcmUgUENJIGludGVycnVwdHMuCisJCQkJbyBUb29rIG91dCBhIGdlbmVyYWwgcG9sbGluZyByb3V0aW5lIHRoYXQgd2FzIHVzZWQKKwkJCQkgIG9ubHkgYnkgWDI1QVBJLiAKKwkJCQlvIEFkZGVkIGFwcHJvcHJpYXRlIGxvY2tzIHRvIHRoZSBkeW5hbWljIHJlY29uZmlndXJhdGlvbgorCQkJCSAgY29kZS4KKwkJCQlvIEZpeGVkIGEgYnVnIGluIHRoZSBrZXlib2FyZCBkZWJ1ZyBtb25pdG9yLgorCitiZXRhMi0yLjIuMAlKYW4gOCAyMDAxCisJCQkJbyBQYXRjaGVzIGZvciAyLjQuMCBrZXJuZWwKKwkJCQlvIFBhdGNoZXMgZm9yIDIuMi4xOCBrZXJuZWwKKwkJCQlvIE1pbm9yIHVwZGF0ZXMgdG8gUFBQIGFuZCBDSExEQyBkcml2ZXJzLgorCQkJCSAgTm90ZTogTm8gZnVuY3RpbmFsIGRpZmZlcmVuY2UuIAorCitiZXRhMy0yLjIuOQlKYW4gMTAgMjAwMQorCQkJCW8gSSBtaXNzZWQgdGhlIDIuMi4xOCBrZXJuZWwgcGF0Y2hlcyBpbiBiZXRhMi0yLjIuMAorCQkJCSAgcmVsZWFzZS4gIFRoZXkgYXJlIGluY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworU3RhYmxlIFJlbGVhc2UKKzIuMi4wCQlGZWIgMDEgMjAwMQorCQkJCW8gQnVnIGZpeCBpbiB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRvci4KKwkJCQkJVGhlIGVkaXQgZnVuY3Rpb24gZGlkbid0IHdvcmsgcHJvcGVybHkuCisKKworYmF0YTEtMi4yLjEJRmViIDA5IDIwMDEKKwkJCW8gV0FOUElQRSBUVFkgRHJpdmVyIGVtdWxhdGlvbi4gCisJCQkgIFR3byBtb2RlcyBvZiBvcGVyYXRpb24gU3luYyBhbmQgQXN5bmMuCisJCQkJU3luYzogVXNpbmcgdGhlIFBQUEQgZGFlbW9uLCBrZXJuZWwgU3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV2FucGlwZSBzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sIAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIsIG92ZXIKKwkJCQkgICAgICBhIFQxIGxlYXNlZCBsaW5lLgorCQkJCisJCQkJICAgICAgVGhlIDIuNC4wIGtlcm5lbCBQUFAgbGF5ZXIgc3VwcG9ydHMgTVVMVElMSU5LCisJCQkJICAgICAgcHJvdG9jb2wsIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVuZGxlIGFueSBudW1iZXIgb2YgU2FuZ29tYQorCQkJCSAgICAgIGFkYXB0ZXJzIChUMSBsaW5lcykgaW50byBvbmUsIHVuZGVyIGEgc2luZ2xlIElQIGFkZHJlc3MuCisJCQkJICAgICAgVGh1cywgZWZmaWNpZW50bHkgb2J0YWluaW5nIG11bHRpcGxlIFQxIHRocm91Z2hwdXQuIAorCisJCQkJICAgICAgTk9URTogVGhlIHJlbW90ZSBzaWRlIG11c3QgYWxzbyBpbXBsZW1lbnQgTVVMVElMSU5LIFBQUAorCQkJCQkgICAgcHJvdG9jb2wuCisKKwkJCQlBc3luYzpVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBBc3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyOiBhIFBQUCBwcm90b2NvbAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIgYW5kCisJCQkJICAgICAgYSBtb2RlbSwgb3ZlciBhIHRlbGVwaG9uZSBsaW5lLgorCisJCQkJICAgICAgVGh1cywgdGhlIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciBzaW11bGF0ZXMgYSBzZXJpYWwKKwkJCQkgICAgICBUVFkgZHJpdmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB0byBpbnRlcmZhY2UgdGhlIAorCQkJCSAgICAgIE1PREVNIHRvIHRoZSBsaW51eCBrZXJuZWwuCisJCQkJCisJCQlvIFdBTlBJUEUgUFBQIEJhY2t1cCBVdGlsaXR5CisJCQkJVGhpcyB1dGlsaXR5IHdpbGwgbW9uaXRvciB0aGUgc3RhdGUgb2YgdGhlIFBQUCBUMSBsaW5lLgorCQkJCUluIGNhc2Ugb2YgZmFpbHVyZSwgYSBkaWFsIHVwIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZAorCQkJCXZpYSBwcHBkIGRhZW1vbiwgZXRoZXIgdmlhIGEgc2VyaWFsIHR0eSBkcml2ZXIgKHNlcmlhbCBwb3J0KSwgCisJCQkJb3IgYSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXIgKGluIGNhc2Ugc2VyaWFsIHBvcnQgaXMgdW5hdmFpbGFibGUpLgorCQkJCQorCQkJCUZ1cnRoZXJtb3JlLCB3aGlsZSBpbiBkaWFsIHVwIG1vZGUsIHRoZSBwcmltYXJ5IFBQUCBUMSBsaW5rCisJCQkJd2lsbCBiZSBtb25pdG9yZWQgZm9yIHNpZ25zIG9mIGxpZmUuICAKKworCQkJCUlmIHRoZSBQUFAgVDEgbGluayBjb21lcyBiYWNrIHRvIGxpZmUsIHRoZSBkaWFsIHVwIGNvbm5lY3Rpb24KKwkJCQl3aWxsIGJlIHNodXRkb3duIGFuZCBUMSBsaW5lIHJlLWVzdGFibGlzaGVkLgorCQkJCisKKwkJCW8gTmV3IFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJT3B0aW9uIHRvIFVQR1JBREUgZGV2aWNlIGRyaXZlcnMgaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzCisJCQkJYWxyZWFkeSBiZWVuIHBhdGNoZWQgd2l0aCBXQU5QSVBFLgorCisJCQkJT3B0aW9uIHRvIENPTVBJTEUgV0FOUElQRSBtb2R1bGVzIGFnYWluc3QgdGhlIGN1cnJlbnRseSAKKwkJCQlydW5uaW5nIGtlcm5lbCwgdGh1cyBubyBuZWVkIGZvciBtYW51YWwga2VybmVsIGFuZCBtb2R1bGUKKwkJCQlyZS1jb21waWxhdGluLgorCQkJCisJCQlvIFVwZGF0ZXMgYW5kIEJ1ZyBGaXhlcyB0byB3YW5jZmcgdXRpbGl0eS4KKworYmF0YTItMi4yLjEJRmViIDIwIDIwMDEKKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIENIRExDIGRldmljZSBkcml2ZXJzLgorCQkJCVRoZSBkcml2ZXIgaGFkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHVuZGVyIGtlcm5lbHMKKwkJCQkyLjIuMTQgb3IgbG93ZXIuCisKKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCQkJCVRoZSBkZXZpY2UgZHJpdmVycyBjb21waWxhdGlvbiBvcHRpb25zIGRpZG4ndCB3b3JrCisJCQkJcHJvcGVybHkuCisKKwkJCW8gVXBkYXRlIHRvIHRoZSB3cGJhY2t1cGQgZGFlbW9uLiAgCisJCQkJT3B0aW1pemVkIHRoZSBjcm9zcy1vdmVyIHRpbWVzLCBiZXR3ZWVuIHRoZSBwcmltYXJ5CisJCQkJbGluayBhbmQgdGhlIGJhY2t1cCBkaWFsdXAuCisKK2JldGEzLTIuMi4xCU1hciAwMiAyMDAxCisJCQlvIFBhdGNoZXMgZm9yIDIuNC4yIGtlcm5lbC4KKworCQkJbyBCdWcgZml4ZXMgdG8gdXRpbC8gbWFrZSBmaWxlcy4KKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCisJCQlvIFRvb2sgb3V0IHRoZSBiYWNrdXBkIHN1cHBvcnQgYW5kIG1hZGUgaXQgaW50bworCQkJICBhcyBzZXBhcmF0ZSBwYWNrYWdlLgorCQkJICAKK2JldGE0LTIuMi4xICAgICBNYXIgMTIgMjAwMQorCisJCW8gRml4IHRvIHRoZSBGcmFtZSBSZWxheSBEZXZpY2UgZHJpdmVyLgorCQkJSVBTQUMgc2VuZHMgYSBwYWNrZXQgb2YgemVybyBsZW5ndGgKKwkJCWhlYWRlciB0byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLiAgVGhlCisJCQlkcml2ZXIgdHJpZXMgdG8gcHVzaCBpdHMgb3duIDIgYnl0ZSBoZWFkZXIKKwkJCWludG8gdGhlIHBhY2tldCwgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8KKwkJCWNyYXNoLgorCisJCW8gRml4IHRoZSBXQU5QSVBFIHJlLWNvbmZpZ3VyYXRpb24gY29kZS4KKwkJCUJ1ZyB3YXMgZm91bmQgYnkgdHJ5aW5nIHRvIHJ1biAgdGhlIGNmZ2Z0MSB3aGlsZSB0aGUKKwkJCWludGVyZmFjZSB3YXMgYWxyZWFkeSBydW5uaW5nLiAgCisKKwkJbyBVcGRhdGVzIHRvIGNmZ2Z0MS4KKwkJCVdyaXRlcyBhIHdhbnBpcGUjLmNmZ2Z0MSBjb25maWd1cmF0aW9uIGZpbGUKKwkJCW9uY2UgdGhlIENTVS9EU1UgaXMgY29uZmlndXJlZC4gVGhpcyBmaWxlIGNhbgorCQkJaG9sZHMgdGhlIGN1cnJlbnQgQ1NVL0RTVSBjb25maWd1cmF0aW9uLgorCisKKworPj4+Pj4+IEVORCBPRiBSRUFETUUgPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbnBpcGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhbnBpcGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FucGlwZS50eHQKQEAgLTAsMCArMSw2MjIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGludXggV0FOIFJvdXRlciBVdGlsaXRpZXMgUGFja2FnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWZXJzaW9uIDIuMi4xIAorTWFyIDI4LCAyMDAxCitBdXRob3I6IE5lbmFkIENvcmJpYyA8bmNvcmJpY0BzYW5nb21hLmNvbT4KK0NvcHlyaWdodCAoYykgMTk5NS0yMDAxIFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJTlRST0RVQ1RJT04KKworV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSBhcmUgdXNlZCB0byBpbnRlcmNvbm5lY3QgTG9jYWwgQXJlYSBOZXR3b3JrcyAoTEFOcykKK2FuZC9vciBzdGFuZC1hbG9uZSBob3N0cyBvdmVyIHZhc3QgZGlzdGFuY2VzIHdpdGggZGF0YSB0cmFuc2ZlciByYXRlcworc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aG9zZSBhY2hpZXZhYmxlIHdpdGggY29tbW9ubHkgdXNlZCBkaWFsLXVwCitjb25uZWN0aW9ucy4KKworVXN1YWxseSBhbiBleHRlcm5hbCBkZXZpY2UgY2FsbGVkIGBXQU4gcm91dGVyJyBzaXR0aW5nIG9uIHlvdXIgbG9jYWwgbmV0d29yaworb3IgY29ubmVjdGVkIHRvIHlvdXIgbWFjaGluZSdzIHNlcmlhbCBwb3J0IHByb3ZpZGVzIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8KK1dBTi4gIEFsdGhvdWdoIHJvdXRlcidzIGpvYiBtYXkgYmUgYXMgc2ltcGxlIGFzIHRha2luZyB5b3VyIGxvY2FsIG5ldHdvcmsKK3RyYWZmaWMsIGNvbnZlcnRpbmcgaXQgdG8gV0FOIGZvcm1hdCBhbmQgcGlwaW5nIGl0IHRocm91Z2ggdGhlIFdBTiBsaW5rLCB0aGVzZQorZGV2aWNlcyBhcmUgbm90b3Jpb3VzbHkgZXhwZW5zaXZlLCB3aXRoIHByaWNlcyBhcyBtdWNoIGFzIDIgLSA1IHRpbWVzIGhpZ2hlcgordGhlbiB0aGUgcHJpY2Ugb2YgYSB0eXBpY2FsIFBDIGJveC4KKworQWx0ZXJuYXRpdmVseSwgY29uc2lkZXJpbmcgcm9idXN0bmVzcyBhbmQgbXVsdGl0YXNraW5nIGNhcGFiaWxpdGllcyBvZiBMaW51eCwKK2FuIGludGVybmFsIHJvdXRlciBjYW4gYmUgYnVpbHQgKG1vc3Qgcm91dGVycyB1c2Ugc29tZSBzb3J0IG9mIHN0cmlwcGVkIGRvd24KK1VuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGFueXdheSkuIFdpdGggYSBudW1iZXIgb2YgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZSBXQU4KK2ludGVyZmFjZSBjYXJkcyBhdmFpbGFibGUgb24gdGhlIG1hcmtldCwgYSBwZXJmZWN0bHkgdXNhYmxlIHJvdXRlciBjYW4gYmUKK2J1aWx0IGZvciBsZXNzIHRoYW4gaGFsZiBhIHByaWNlIG9mIGFuIGV4dGVybmFsIHJvdXRlci4gIFlldCBhIExpbnV4IGJveAorYWN0aW5nIGFzIGEgcm91dGVyIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcywgc3VjaCBhcyBmaXJlLXdhbGxpbmcsCitydW5uaW5nIEZUUCwgV1dXIG9yIEROUyBzZXJ2ZXIsIGV0Yy4KKworVGhpcyBrZXJuZWwgbW9kdWxlIGludHJvZHVjZXMgdGhlIG5vdGlvbiBvZiBhIFdBTiBMaW5rIERyaXZlciAoV0xEKSB0byBMaW51eAorb3BlcmF0aW5nIHN5c3RlbSBhbmQgcHJvdmlkZXMgZ2VuZXJpYyBoYXJkd2FyZS1pbmRlcGVuZGVudCBzZXJ2aWNlcyBmb3Igc3VjaAorZHJpdmVycy4gIFdoeSBjYW4gZXhpc3RpbmcgTGludXggbmV0d29yayBkZXZpY2UgaW50ZXJmYWNlIG5vdCBiZSB1c2VkIGZvcgordGhpcyBwdXJwb3NlPyAgV2VsbCwgaXQgY2FuLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IGtleSBkaWZmZXJlbmNlcyBiZXR3ZWVuCithIHR5cGljYWwgbmV0d29yayBpbnRlcmZhY2UgKGUuZy4gRXRoZXJuZXQpIGFuZCBhIFdBTiBsaW5rLgorCitNYW55IFdBTiBwcm90b2NvbHMsIHN1Y2ggYXMgWC4yNSBhbmQgZnJhbWUgcmVsYXksIGFsbG93IGZvciBtdWx0aXBsZSBsb2dpY2FsCitjb25uZWN0aW9ucyAoa25vd24gYXMgYHZpcnR1YWwgY2lyY3VpdHMnIGluIFguMjUgdGVybWlub2xvZ3kpIG92ZXIgYSBzaW5nbGUKK3BoeXNpY2FsIGxpbmsuICBFYWNoIHN1Y2ggdmlydHVhbCBjaXJjdWl0IG1heSAoYW5kIGFsbW9zdCBhbHdheXMgZG9lcykgbGVhZAordG8gYSBkaWZmZXJlbnQgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIGFuZCwgdGhlcmVmb3JlLCBkaWZmZXJlbnQgbmV0d29yay4gIEFzIGEKK3Jlc3VsdCwgaXQgaXMgdGhlIHZpcnR1YWwgY2lyY3VpdCwgbm90IHRoZSBwaHlzaWNhbCBsaW5rLCB0aGF0IHJlcHJlc2VudHMgYQorcm91dGUgYW5kLCB0aGVyZWZvcmUsIGEgbmV0d29yayBpbnRlcmZhY2UgaW4gTGludXggdGVybXMuCisKK1RvIGZ1cnRoZXIgY29tcGxpY2F0ZSB0aGluZ3MsIHZpcnR1YWwgY2lyY3VpdHMgYXJlIHVzdWFsbHkgdm9sYXRpbGUgaW4gbmF0dXJlCisoZXhjbHVkaW5nIHNvIGNhbGxlZCBgcGVybWFuZW50JyB2aXJ0dWFsIGNpcmN1aXRzIG9yIFBWQ3MpLiAgV2l0aCBhbG1vc3Qgbm8KK3RpbWUgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCB0ZWFyIGRvd24gYSB2aXJ0dWFsIGNpcmN1aXQsIGl0IGlzIGhpZ2hseSBkZXNpcmFibGUKK3RvIGltcGxlbWVudCBvbi1kZW1hbmQgY29ubmVjdGlvbnMgaW4gb3JkZXIgdG8gbWluaW1pemUgbmV0d29yayBjaGFyZ2VzLiAgU28KK3VubGlrZSBhIHR5cGljYWwgbmV0d29yayBkcml2ZXIsIHRoZSBXQU4gZHJpdmVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgbXVsdGlwbGUKK25ldHdvcmsgaW50ZXJmYWNlcyBhbmQgY29wZSBhcyBtdWx0aXBsZSB2aXJ0dWFsIGNpcmN1aXRzIGNvbWUgaW50byBleGlzdGVuY2UKK2FuZCBnbyBhd2F5IGR5bmFtaWNhbGx5LgorIAorTGFzdCwgYnV0IG5vdCBsZWFzdCwgV0FOIGNvbmZpZ3VyYXRpb24gaXMgbXVjaCBtb3JlIGNvbXBsZXggdGhhbiB0aGF0IG9mIHNheQorRXRoZXJuZXQgYW5kIG1heSB3ZWxsIGFtb3VudCB0byBzZXZlcmFsIGRvemVucyBvZiBwYXJhbWV0ZXJzLiAgU29tZSBvZiB0aGVtCithcmUgImxpbmstd2lkZSIgIHdoaWxlIG90aGVycyBhcmUgdmlydHVhbCBjaXJjdWl0LXNwZWNpZmljLiAgVGhlIHNhbWUgaG9sZHMKK3RydWUgZm9yIFdBTiBzdGF0aXN0aWNzIHdoaWNoIGlzIGJ5IGZhciBtb3JlIGV4dGVuc2l2ZSBhbmQgZXh0cmVtZWx5IHVzZWZ1bAord2hlbiB0cm91Ymxlc2hvb3RpbmcgV0FOIGNvbm5lY3Rpb25zLiAgRXh0ZW5kaW5nIHRoZSBpZmNvbmZpZyB1dGlsaXR5IHRvIHN1aXQKK3RoZXNlIG5lZWRzIG1heSBiZSBwb3NzaWJsZSwgYnV0IGRvZXMgbm90IHNlZW0gcXVpdGUgcmVhc29uYWJsZS4gIFRoZXJlZm9yZSwgYQorV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyJ3MgaW50ZXJmYWNlCitpcyBuZWVkZWQgZm9yIHRoaXMgcHVycG9zZS4KKworTW9zdCBvZiB0aGVzZSBwcm9ibGVtcyBhcmUgdGFrZW4gY2FyZSBvZiBieSB0aGlzIG1vZHVsZS4gIEl0cyBnb2FsIGlzIHRvCitwcm92aWRlIGEgdXNlciB3aXRoIG1vcmUtb3ItbGVzcyBzdGFuZGFyZCBsb29rIGFuZCBmZWVsIGZvciBhbGwgV0FOIGRldmljZXMgYW5kCithc3Npc3QgYSBXQU4gZGV2aWNlIGRyaXZlciB3cml0ZXIgYnkgcHJvdmlkaW5nIGNvbW1vbiBzZXJ2aWNlcywgc3VjaCBhczoKKworIG8gVXNlci1sZXZlbCBpbnRlcmZhY2UgdmlhIC9wcm9jIGZpbGUgc3lzdGVtCisgbyBDZW50cmFsaXplZCBjb25maWd1cmF0aW9uCisgbyBEZXZpY2UgbWFuYWdlbWVudCAoc2V0dXAsIHNodXRkb3duLCBldGMuKQorIG8gTmV0d29yayBpbnRlcmZhY2UgbWFuYWdlbWVudCAoZHluYW1pYyBjcmVhdGlvbi9kZXN0cnVjdGlvbikKKyBvIFByb3RvY29sIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbgorCitUbyBiYSBhYmxlIHRvIHVzZSB0aGUgTGludXggV0FOIFJvdXRlciB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBXQU4gVG9vbHMgcGFja2FnZQorYXZhaWxhYmxlIGZyb20KKworCWZ0cC5zYW5nb21hLmNvbS9wdWIvbGludXgvY3VycmVudF93YW5waXBlL3dhbnBpcGUtWC5ZLloudGd6CisKK3doZXJlIHZYLlkuWiByZXByZXNlbnQgdGhlIHdhbnBpcGUgdmVyc2lvbiBudW1iZXIuCisKK0ZvciB0ZWNobmljYWwgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyBwbGVhc2UgZS1tYWlsIHRvIG5jb3JiaWNAc2FuZ29tYS5jb20uCitGb3IgZ2VuZXJhbCBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3QgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLiBieQorCisJSG90bGluZToJMS04MDAtMzg4LTI0NzUJKFVTQSBhbmQgQ2FuYWRhLCB0b2xsIGZyZWUpCisJUGhvbmU6CQkoOTA1KSA0NzQtMTk5MCAgZXh0OiAxMDYKKwlGYXg6CQkoOTA1KSA0NzQtOTIyMworCUUtbWFpbDoJCWRtQHNhbmdvbWEuY29tCShEYXZpZCBNYW5kZWxzdGFtKQorCVdXVzoJCWh0dHA6Ly93d3cuc2FuZ29tYS5jb20KKworCitJTlNUQUxMQVRJT04KKworUGxlYXNlIHJlYWQgdGhlIFdhbnBpcGVGb3JMaW51eC5wZGYgbWFudWFsIG9uIGhvdyB0byAKK2luc3RhbGwgdGhlIFdBTlBJUEUgdG9vbHMgYW5kIGRyaXZlcnMgcHJvcGVybHkuIAorCisKK0FmdGVyIGluc3RhbGxpbmcgd2FucGlwZSBwYWNrYWdlOiAvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2MuIAorT24gdGhlIGZ0cC5zYW5nb21hLmNvbSA6IC9saW51eC9jdXJyZW50X3dhbnBpcGUvZG9jCisKKworQ09QWVJJR0hUIEFORCBMSUNFTlNJTkcgSU5GT1JNQVRJT04KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAordGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzCitBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisKK0FDS05PV0xFREdFTUVOVFMKKworVGhpcyBwcm9kdWN0IGlzIGJhc2VkIG9uIHRoZSBXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBSb3V0ZXIgZGV2ZWxvcGVkCitieSBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGZvciBMaW51eCAyLjAueCBhbmQgMi4yLnguICBTdWNjZXNzIG9mIHRoZSBXQU5QSVBFCit0b2dldGhlciB3aXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgTGludXgga2VybmVsIGluIHN1bW1lciAxOTk2IGNvbW1hbmRlZAorYWRlcXVhdGUgY2hhbmdlcyB0byB0aGUgV0FOUElQRSBjb2RlIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgbmV3IExpbnV4CitmZWF0dXJlcy4KKworSW5zdGVhZCBvZiBjb250aW51aW5nIGRldmVsb3BpbmcgcHJvcHJpZXRhcnkgaW50ZXJmYWNlIHRpZWQgdG8gU2FuZ29tYSBXQU4KK2NhcmRzLCB3ZSBkZWNpZGVkIHRvIHNlcGFyYXRlIGFsbCBoYXJkd2FyZS1pbmRlcGVuZGVudCBjb2RlIGludG8gYSBzZXBhcmF0ZQorbW9kdWxlIGFuZCBkZWZpbmVkIHR3byBsZXZlbHMgb2YgaW50ZXJmYWNlcyAtIG9uZSBmb3IgdXNlci1sZXZlbCBhcHBsaWNhdGlvbnMKK2FuZCBhbm90aGVyIGZvciBrZXJuZWwtbGV2ZWwgV0FOIGRyaXZlcnMuICBXQU5QSVBFIGlzIG5vdyBpbXBsZW1lbnRlZCBhcyBhCitXQU4gZHJpdmVyIGNvbXBsaWFudCB3aXRoIHRoZSBXQU4gTGluayBEcml2ZXIgaW50ZXJmYWNlLiAgQWxzbyBhIGdlbmVyYWwKK3B1cnBvc2UgV0FOIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgYSBzZXQgb2Ygc2hlbGwgc2NyaXB0cyB3YXMgZGV2ZWxvcGVkIHRvIAorc3VwcG9ydCBXQU4gcm91dGVyIGF0IHRoZSB1c2VyIGxldmVsLgorCitNYW55IHVzZWZ1bCBpZGVhcyBjb25jZXJuaW5nIGhhcmR3YXJlLWluZGVwZW5kZW50IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbgord2VyZSBnaXZlbiBieSBNaWtlIE1jTGFnYW4gPG1pa2UubWNsYWdhbkBsaW51eC5vcmc+IGFuZCBoaXMgaW1wbGVtZW50YXRpb24KK29mIHRoZSBGcmFtZSBSZWxheSByb3V0ZXIgYW5kIGRyaXZlcnMgZm9yIFNhbmdvbWEgY2FyZHMgKGRsY2kvc2RsYSkuCisKK1dpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJcyBiZWluZyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgV0FOUElQRSwKK2Egc3BlY2lhbCB0aGFuayBnb2VzIHRvIEFsYW4gQ294IGluIHByb3ZpZGluZyBpbnNpZ2h0IGludG8gQlNEIHNvY2tldHMuCisKK1NwZWNpYWwgdGhhbmtzIHRvIGFsbCB0aGUgV0FOUElQRSB1c2VycyB3aG8gcGVyZm9ybWVkIGZpZWxkLXRlc3RpbmcsIHJlcG9ydGVkCitidWdzIGFuZCBtYWRlIHZhbHVhYmxlIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyB0aGF0IGhlbHAgdXMgdG8gaW1wcm92ZSB0aGlzCitwcm9kdWN0LgorCisKKworTkVXIElOIFRISVMgUkVMRUFTRQorCisJbyBVcGRhdGVkIHRoZSBXQU5DRkcgdXRpbGl0eQorCQlDYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRAorCQlmb3IgYXN5bmMgY29ubmVjdGlvbnMuCisKKwlvIEFkZGVkIHRoZSBQUFBDT05GSUcgdXRpbGl0eQorCQlVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgUFBQRCBkYW1lb24gZm9yIHRoZQorCQlXQU5QSVBFIEFzeW5jIFBQUCBhbmQgc3RhbmRhcmQgc2VyaWFsIHBvcnQuCisJCVRoZSB3YW5jZmcgY2FsbHMgdGhlIHBwcGNvbmZpZyB0byBjb25maWd1cmUKKwkJdGhlIHBwcGQuCisKKwlvIEZpeGVkIHRoZSBQQ0kgYXV0b2RldGVjdCBmZWF0dXJlLiAgCisJCVRoZSBTTE9UIDAgd2FzIHVzZWQgYXMgYW4gYXV0b2RldGVjdCBvcHRpb24KKwkJaG93ZXZlciwgc29tZSBoaWdoIGVuZCBQQydzIHNsb3QgbnVtYmVycyBzdGFydAorCQlmcm9tIDAuIAorCisJbyBUaGlzIHJlbGVhc2UgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlIG5ldyBiYWNrdXBkCisJICBkYWVtb24gcmVsZWFzZS4KKwkKKworUFJPRFVDVCBDT01QT05FTlRTIEFORCBSRUxBVEVEIEZJTEVTCisKKy9ldGM6IChvciB1c2VyIGRlZmluZWQpCisJd2FucGlwZTEuY29uZglkZWZhdWx0IHJvdXRlciBjb25maWd1cmF0aW9uIGZpbGUKKworL2xpYi9tb2R1bGVzL1guWS5aL21pc2M6CisJd2Fucm91dGVyLm8Jcm91dGVyIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGUKKwlhZl93YW5waXBlLm8Jd2FucGlwZSBhcGkgc29ja2V0IG1vZHVsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbmV0OgorCXNkbGFkcnYubwlTYW5nb21hIFNETEEgc3VwcG9ydCBtb2R1bGUKKwl3YW5waXBlLm8JU2FuZ29tYSBXQU5QSVBFKHRtKSBkcml2ZXIgbW9kdWxlCisKKy9wcm9jL25ldC93YW5yb3V0ZXIKKwlDb25maWcJCXJlYWRzIGN1cnJlbnQgcm91dGVyIGNvbmZpZ3VyYXRpb24KKwlTdGF0dXMJCXJlYWRzIGN1cnJlbnQgcm91dGVyIHN0YXR1cworCXtuYW1lfQkJcmVhZHMgV0FOIGRyaXZlciBzdGF0aXN0aWNzCisKKy91c3Ivc2JpbjoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIHNjcmlwdAorCXdhbmNvbmZpZwl3YW5yb3V0ZXIgY29uZmlndXJhdGlvbiB1dGlsaXR5CisJc2RsYWR1bXAJV0FOUElQRSBhZGFwdGVyIG1lbW9yeSBkdW1wIHV0aWxpdHkKKyAgICAgICAgZnBpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIEZyYW1lIFJlbGF5CisgICAgICAgIGNwaXBlbW9uICAgICAgICBNb25pdG9yIGZvciBDaXNjbyBIRExDCisJcHBpcGVtb24gCU1vbml0b3IgZm9yIFBQUAorCXhwaXBlbW9uIAlNb25pdG9yIGZvciBYMjUKKwl3cGtiZG1vbiAgICAgICAgV0FOUElQRSBrZXlib2FyZCBsZWQgbW9uaXRvci9kZWJ1Z2dlcgorCisvdXNyL2xvY2FsL3dhbnJvdXRlcjoKKwlSRUFETUUJCXRoaXMgZmlsZQorCUNPUFlJTkcJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJU2V0dXAJCWluc3RhbGxhdGlvbiBzY3JpcHQKKwlGaWxlbGlzdAlkaXN0cmlidXRpb24gZGVmaW5pdGlvbiBmaWxlCisJd2Fucm91dGVyLnJjCW1ldGEtY29uZmlndXJhdGlvbiBmaWxlIAorCQkJKHVzZWQgYnkgdGhlIFNldHVwIGFuZCB3YW5yb3V0ZXIgc2NyaXB0KQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9kb2M6CisJd2FucGlwZUZvckxpbnV4LnBkZiAJV0FOIFJvdXRlciBVc2VyJ3MgTWFudWFsCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXM6CisJd2Fucm91dGVyLXYyMjEzLmd6ICAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbHMgMi4yLjExIHVwIHRvIDIuMi4xMy4KKwl3YW5yb3V0ZXItdjIyMTQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjIuMTQuIAorCXdhbnJvdXRlci12MjIxNS5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTUgdG8gMi4yLjE3LgorCXdhbnJvdXRlci12MjIxOC5neglwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTggYW5kIHVwLgorCXdhbnJvdXRlci12MjQwLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjAuICAKKwl3YW5yb3V0ZXItdjI0Mi5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuNC4yIGFuZCB1cC4KKwl3YW5yb3V0ZXItdjIwMzQuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzQKKwl3YW5yb3V0ZXItdjIwMzYuZ3ogCXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi4wLjM2IGFuZCB1cC4gCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3BhdGNoZXMva2RyaXZlcnM6CisJU291cmNlcyBvZiB0aGUgbGF0ZXN0IFdBTlBJUEUgZGV2aWNlIGRyaXZlcnMuCisJVGhlc2UgYXJlIHVzZWQgdG8gVVBHUkFERSB0aGUgbGludXgga2VybmVsIHRvIHRoZSBuZXdlc3QKKwl2ZXJzaW9uIGlmIHRoZSBrZXJuZWwgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gcGF0aGNlZCB3aXRoCisJV0FOUElQRSBkcml2ZXJzLgorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9zYW1wbGVzOgorCWludGVyZmFjZQlzYW1wbGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZmlsZQorCXdhbnBpcGUxLmNwcmkgCUNIRExDIHByaW1hcnkgcG9ydAorICAgICAJd2FucGlwZTIuY3NlYyAJQ0hETEMgc2Vjb25kYXJ5IHBvcnQKKyAgICAgCXdhbnBpcGUxLmZyICAgCUZyYW1lIFJlbGF5IHByb3RvY29sCisgICAgIAl3YW5waXBlMS5wcHAgIAlQUFAgcHJvdG9jb2wgKSAKKwl3YW5waXBlMS5hc3kJQ0hETEMgQVNZTkMgcHJvdG9jb2wKKwl3YW5waXBlMS54MjUJWDI1IHByb3RvY29sCisJd2FucGlwZTEuc3R0eQlTeW5jIFRUWSBkcml2ZXIgKFVzZWQgYnkgS2VybmVsIFBQUEQgZGFlbW9uKQorCXdhbnBpcGUxLmF0dHkJQXN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2Fucm91dGVyLnJjCXNhbXBsZSBtZXRhLWNvbmZpZ3VyYXRpb24gZmlsZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci91dGlsOgorCSoJCXdhbi10b29scyB1dGlsaXRpZXMgc291cmNlIGNvZGUKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL3gyNToKKwkqCQl4MjUgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2FwaS9jaGRsYzoKKwkqCQljaGRsYyBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2ZyOgorCSoJCWZyIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9jb25maWcvd2FuY2ZnOgorCXdhbmNmZwkJV0FOUElQRSBHVUkgY29uZmlndXJhdGlvbiBwcm9ncmFtLgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyB3YW5waXBlIy5jb25mIGZpbGVzLiAKKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy9jZmdmdDE6CisJY2ZnZnQxCQlHVUkgQ1NVL0RTVSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisKKy91c3IvaW5jbHVkZS9saW51eDoKKwl3YW5yb3V0ZXIuaAlyb3V0ZXIgQVBJIGRlZmluaXRpb25zCisJd2FucGlwZS5oCVdBTlBJUEUgQVBJIGRlZmluaXRpb25zCisJc2RsYWRydi5oCVNETEEgc3VwcG9ydCBtb2R1bGUgQVBJIGRlZmluaXRpb25zCisJc2RsYXNmbS5oCVNETEEgZmlybXdhcmUgbW9kdWxlIGRlZmluaXRpb25zCisJaWZfd2FucGlwZS5oCVdBTlBJUEUgU29ja2V0IGRlZmluaXRpb25zCisJaWZfd2FucGlwZV9jb21tb24uaAlXQU5QSVBFIFNvY2tldC9Ecml2ZXIgY29tbW9uIGRlZmluaXRpb25zLgorCXNkbGFwY2kuaAlXQU5QSVBFIFBDSSBkZWZpbml0aW9ucworCQorCisvdXNyL3NyYy9saW51eC9uZXQvd2Fucm91dGVyOgorCSoJCXdhbnJvdXRlciBzb3VyY2UgY29kZQorCisvdmFyL2xvZzoKKwl3YW5yb3V0ZXIJd2Fucm91dGVyIHN0YXJ0LXVwIGxvZyAoY3JlYXRlZCBieSB0aGUgU2V0dXAgc2NyaXB0KQorCisvdmFyL2xvY2s6ICAob3IgL3Zhci9sb2NrL3N1YnN5cyBmb3IgUmVkSGF0KQorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgbG9jayBmaWxlIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2Zpcm13YXJlOgorCWZyNTE0LnNmbQlGcmFtZSByZWxheSBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCWNkdWFsNTE0LnNmbQlEdWFsIFBvcnQgQ2lzY28gSERMQyBmaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4L1M1MTQgY2FyZAorCXBwcDUxNC5zZm0gICAgICBQUFAgRmlybXdhcmUgZm9yIFNhbmdvbWEgUzUwOCBhbmQgUzUxNCBjYXJkcworCXgyNV81MDguc2ZtCVgyNSBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGNhcmQuCisKKworUkVWSVNJT04gSElTVE9SWQorCisxLjAuMAlEZWNlbWJlciAzMSwgMTk5NglJbml0aWFsIHZlcnNpb24KKworMS4wLjEJSmFudWFyeSAzMCwgMTk5NwlTdGF0dXMgYW5kIHN0YXRpc3RpY3MgY2FuIGJlIHJlYWQgdmlhIC9wcm9jCisJCQkJZmlsZXN5c3RlbSBlbnRyaWVzLgorCisxLjAuMiAgIEFwcmlsIDMwLCAxOTk3ICAgICAgICAgIEFkZGVkIFVEUCBtYW5hZ2VtZW50IHZpYSBtb25pdG9ycy4KKworMS4wLjMJSnVuZSAzLCAxOTk3CQlVRFAgbWFuYWdlbWVudCBmb3IgbXVsdGlwbGUgYm9hcmRzIHVzaW5nIEZyYW1lCisJCQkJUmVsYXkgYW5kIFBQUAorCQkJCUVuYWJsZWQgY29udGludW91cyB0cmFuc21pc3Npb24gb2YgQ29uZmlndXJlIAorCQkJCVJlcXVlc3QgUGFja2V0IGZvciBQUFAgKGZvciA1MDggb25seSkKKwkJCQlDb25uZWN0aW9uIFRpbWVvdXQgZm9yIFBQUCBjaGFuZ2VkIGZyb20gOTAwIHRvIDAKKwkJCQlGbG93IENvbnRyb2wgUHJvYmxlbSBmaXhlZCBmb3IgRnJhbWUgUmVsYXkKKworMS4wLjQJSnVseSAxMCwgMTk5NwkJUzUwOC9GVDEgbW9uaXRvcmluZyBjYXBhYmlsaXR5IGluIGZwaXBlbW9uIGFuZAorCQkJCXBwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlDb25maWd1cmFibGUgVFRMIGZvciBVRFAgcGFja2V0cy4KKwkJCQlNdWx0aWNhc3QgYW5kIEJyb2FkY2FzdCBJUCBzb3VyY2UgYWRkcmVzc2VzIGFyZQorCQkJCXNpbGVudGx5IGRpc2NhcmRlZC4KKworMS4wLjUJSnVseSAyOCwgMTk5NwkJQ29uZmlndXJhYmxlIFQzOTEsVDM5MixOMzkxLE4zOTIsTjM5MyBmb3IgRnJhbWUKKwkJCQlSZWxheSBpbiByb3V0ZXIuY29uZi4KKwkJCQlDb25maWd1cmFibGUgTWVtb3J5IEFkZHJlc3MgdGhyb3VnaCByb3V0ZXIuY29uZiAKKwkJCQlmb3IgRnJhbWUgUmVsYXksIFBQUCBhbmQgWC4yNS4gKGNvbW1lbnRpbmcgdGhpcworIAkJCQlvdXQgZW5hYmxlcyBhdXRvLWRldGVjdGlvbikuCisJCQkJRml4ZWQgZnJlZWluZyB1cCByZWNlaXZlZCBidWZmZXJzIHVzaW5nIGtmcmVlKCkKKyAJCQkJZm9yIEZyYW1lIFJlbGF5IGFuZCBYLjI1LgorCQkJCVByb3RlY3Qgc2RsYV9wZWVrKCkgYnkgY2FsbGluZyBzYXZlX2ZsYWdzKCksCisJCQkJY2xpKCkgYW5kIHJlc3RvcmVfZmxhZ3MoKS4KKwkJCQlDaGFuZ2VkIG51bWJlciBvZiBUcmFjZSBlbGVtZW50cyBmcm9tIDMyIHRvIDIwCisJCQkJQWRkZWQgRExDSSBzcGVjaWZpYyBkYXRhIG1vbml0b3JpbmcgaW4gRlBJUEVNT04uIAorMi4wLjAJTm92IDA3LCAxOTk3CQlJbXBsZW1lbnRlZCBwcm90ZWN0aW9uIG9mIFJBQ0UgY29uZGl0aW9ucyBieSAKKwkJCQljcml0aWNhbCBmbGFncyBmb3IgRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlETENJIExpc3QgaW50ZXJydXB0IG1vZGUgaW1wbGVtZW50ZWQuCisJCQkJSVBYIHN1cHBvcnQgaW4gRlJBTUUgUkVMQVkgYW5kIFBQUC4KKwkJCQlJUFggU2VydmVyIFN1cHBvcnQgKE1BUlMpCisJCQkJTW9yZSBkcml2ZXIgc3BlY2lmaWMgc3RhdHMgaW5jbHVkZWQgaW4gRlBJUEVNT04KKwkJCQlhbmQgUElQRU1PTi4KKworMi4wLjEJTm92IDI4LCAxOTk3CQlCdWcgRml4ZXMgZm9yIHZlcnNpb24gMi4wLjAuCisJCQkJUHJvdGVjdGlvbiBvZiAiZW5hYmxlX2lycSgpIiB3aGlsZSAKKwkJCQkiZGlzYWJsZV9pcnEoKSIgaGFzIGJlZW4gZW5hYmxlZCBmcm9tIGFueSBvdGhlcgorCQkJCXJvdXRpbmUgKGZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYMjUpLgorCQkJCUFkZGVkIGFkZGl0aW9uYWwgU3RhdHMgZm9yIEZwaXBlbW9uIGFuZCBQcGlwZW1vbgorCQkJCUltcHJvdmVkIExvYWQgU2hhcmluZyBmb3IgbXVsdGlwbGUgYm9hcmRzCisKKzIuMC4yCURlYyAwOSwgMTk5NwkJU3VwcG9ydCBmb3IgUEFQIGFuZCBDSEFQIGZvciBwcHAgaGFzIGJlZW4KKwkJCQlpbXBsZW1lbnRlZC4KKworMi4wLjMJQXVnIDE1LCAxOTk4CQlOZXcgcmVsZWFzZSBzdXBwb3J0aW5nIENpc2NvIEhETEMsIENJUiBmb3IgRnJhbWUKKwkJCQlyZWxheSwgRHluYW1pYyBJUCBhc3NpZ25tZW50IGZvciBQUFAgYW5kIEludmVyc2UKKwkJCQlBcnAgc3VwcG9ydCBmb3IgRnJhbWUtcmVsYXkuICBNYW4gUGFnZXMgYXJlIAorCQkJCWluY2x1ZGVkIGZvciBiZXR0ZXIgc3VwcG9ydCBhbmQgYSBuZXcgdXRpbGl0eQorCQkJCWZvciBjb25maWd1cmluZyBGVDEgY2FyZHMuCisKKzIuMC40CURlYyAwOSwgMTk5OAkgICAgICAgIER1YWwgUG9ydCBzdXBwb3J0IGZvciBDaXNjbyBIRExDLgorCQkJCVN1cHBvcnQgZm9yIEhETEMgKExBUEIpIEFQSS4KKwkJCQlTdXBwb3J0cyBCaVN5bmMgU3RyZWFtaW5nIGNvZGUgZm9yIFM1MDJFIAorCQkJCWFuZCBTNTAzIGNhcmRzLgorCQkJCVN1cHBvcnQgZm9yIFN0cmVhbWluZyBIRExDIEFQSS4KKwkJCQlQcm92aWRlcyBhIEJTRCBzb2NrZXQgaW50ZXJmYWNlIGZvciAKKwkJCQljcmVhdGluZyBhcHBsaWNhdGlvbnMgdXNpbmcgQmlTeW5jCisgICAJCQkJc3RyZWFtaW5nLiAgICAgICAgCisKKzIuMC41ICAgQXVnIDA0LCAxOTk5IAkJQ0hETEMgaW5pdGlhbGl6YXRpbiBidWcgZml4LgorCQkJCVBQUCBpbnRlcnJ1cHQgZHJpdmVuIGRyaXZlcjogCisgIAkJCQlGaXggdG8gdGhlIFBQUCBsaW5lIGhhbmd1cCBwcm9ibGVtLgorCQkJCU5ldyBQUFAgZmlybXdhcmUKKwkJCQlBZGRlZCBjb21tZW50cyB0byB0aGUgc3RhcnR1cCBTWVNURU0gRVJST1IgbWVzc2FnZXMKKwkJCQlYcGlwZW1vbiBkZWJ1Z2dpbmcgYXBwbGljYXRpb24gZm9yIHRoZSBYMjUgcHJvdG9jb2wKKwkJCQlOZXcgVVNFUl9NQU5VQUwudHh0CisJCQkJRml4ZWQgdGhlIG9kZCBib3VuZGFyeSA0Ynl0ZSB3cml0ZXMgdG8gdGhlIGJvYXJkLgorCQkJCUJpU3luYyBTdHJlYW1pbmcgY29kZSBoYXMgYmVlbiB0YWtlbiBvdXQuICAKKwkJCQkgQXZhaWxhYmxlIGFzIGEgcGF0Y2guCisJCQkJU3RyZWFtaW5nIEhETEMgQVBJIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4gICAgICAgICAgICAgICAgIAorCisyLjAuNiAgIEF1ZyAxNywgMTk5OQkJSW5jcmVhc2VkIGRlYnVnZ2luZyBpbiBzdGF0dXAgc2NyaXB0cworCQkJCUZpeGVkIGluc2FsbGF0aW9uIGJ1Z3MgZnJvbSAyLjAuNQorCQkJCUtlcm5lbCBwYXRjaCB3b3JrcyBmb3IgYm90aCAyLjIuMTAgYW5kIDIuMi4xMSBrZXJuZWxzLgorCQkJCVRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcGFja2FnZXMgICAgICAgICAKKworMi4wLjcgICBBdWcgMjYsIDE5OTkJCW8gIE1lcmdlZCBYMjVBUEkgY29kZSBpbnRvIFdBTlBJUEUuCisJCQkJbyAgRml4ZWQgYSBtZW1lb3J5IGxlYWsgZm9yIFgyNUFQSQorCQkJCW8gIFVwZGF0ZWQgdGhlIFgyNUFQSSBjb2RlIGZvciAyLjIuWCBrZXJuZWxzLgorCQkJCW8gIEltcHJvdmVkIE5FTSBoYW5kbGluZy4gICAKKworMi4xLjAJT2N0IDI1LCAxOTk5CQlvIE5ldyBjb2RlIGZvciBTNTE0IFBDSSBDYXJkCisJCQkJbyBOZXcgQ0hETEMgYW5kIEZyYW1lIFJlbGF5IGRyaXZlcnMKKwkJCQlvIFBQUCBhbmQgWDI1IGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZSAgICAKKworMi4xLjEJTm92IDMwLCAxOTk5CQlvIFBQUCBzdXBwb3J0IGZvciBTNTE0IFBDSSBDYXJkcworCisyLjEuMyAgIEFwciAwNiwgMjAwMAkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIAorCQkJCW8gU29ja2V0IGJhc2VkIGNoZGxjIGFwaQorCQkJCW8gU29ja2V0IGJhc2VkIGZyIGFwaQorCQkJCW8gRHVhbCBQb3J0IFJlY2VpdmUgb25seSBDSERMQyBzdXBwb3J0LgorCQkJCW8gQXN5bmNocm9ub3VzIENIRExDIHN1cHBvcnQgKFNlY29uZGFyeSBQb3J0KQorCQkJCW8gY2ZnZnQxIEdVSSBjc3UvZHN1IGNvbmZpZ3VyYXRvcgorCQkJCW8gd2FuY2ZnIEdVSSBjb25maWd1cmF0aW9uIGZpbGUgCisJCQkJICBjb25maWd1cmF0b3IuCisJCQkJbyBBcmNoaXRlY3R1YWwgZGlyZWN0b3J5IGNoYW5nZXMuCisKK2JldGEtMi4xLjQgSnVsIDIwMDAJCW8gRHluYW1pYyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbjoKKwkJCQkJTmV0d29yayBpbnRlcmZhY2VzIHJlZmxlY3QgdGhlIHN0YXRlCisJCQkJCW9mIHByb3RvY29sIGxheWVyLiAgSWYgdGhlIHByb3RvY29sIGJlY29tZXMKKwkJCQkJZGlzY29ubmVjdGVkLCBkcml2ZXIgd2lsbCBicmluZyBkb3duCisJCQkJCXRoZSBpbnRlcmZhY2UuICBPbmNlIHRoZSBwcm90b2NvbCByZWNvbm5lY3RzCisJCQkJCXRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBicm91Z2h0IHVwLiAKKwkJCQkJCisJCQkJCU5vdGU6IFRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KKworCQkJCW8gRHluYW1pYyB3YW5yb3V0ZXIgc2V0dXAgdXNpbmcgJ3dhbmNvbmZpZyc6CisJCQkJCXdhbmNvbmZpZyB1dGlsaXR5IGNhbiBiZSB1c2VkIHRvCisJCQkJCXNodXRkb3duLHJlc3RhcnQsc3RhcnQgb3IgcmVjb25maWd1cmUgCisJCQkJCWEgdmlydHVhbCBjaXJjdWl0IGR5bmFtaWNhbGx5LgorCQkJCSAgICAgCisJCQkJCUZyYW1lIFJlbGF5OiAgRWFjaCBETENJIGNhbiBiZTogCisJCQkJCQkgICAgICBjcmVhdGVkLHN0b3BwZWQscmVzdGFydGVkIGFuZCByZWNvbmZpZ3VyZWQKKwkJCQkJCSAgICAgIGR5bmFtaWNhbGx5IHVzaW5nIHdhbmNvbmZpZy4KKwkJCQkJCisJCQkJCQkgICAgICBleDogd2FuY29uZmlnIGNhcmQgd2FucGlwZTEgZGV2IHdwMV9mcjE2IHVwCisJCQkJICAKKwkJCQlvIFdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzOgorCQkJCQl3YW5jb25maWcgYWxzbyBzdXBwb3J0cyB3YW5yb3V0ZXIgc3RhcnR1cCB2aWEgY29tbWFuZCBsaW5lCisJCQkJCWFyZ3VtZW50cy4gIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIGEgd2FucGlwZSMuY29uZgorCQkJCQljb25maWd1cmF0aW9uIGZpbGUuICAKKworCQkJCW8gU29ja2V0IGJhc2VkIHgyNWFwaSB1cGRhdGUvYnVnIGZpeGVzLgorCQkJCQlBZGRlZCBzdXBwb3J0IGZvciBMQ04gbnVtYmVycyBncmVhdGVyIHRoYW4gMjU1LgorCQkJCQlPcHRpb24gdG8gcGFzcyB1cCBtb2RlbSBtZXNzYWdlcy4KKwkJCQkJUHJvdmlkZWQgYSBQQ0kgSVJRIGNoZWNrLCBzbyBhIHNpbmdsZSBTNTE0CisJCQkJCWNhcmQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgbm9uLXNoYXJpbmcgaW50ZXJydXB0LgorCisJCQkJbyBGaXhlcyB0byB0aGUgd2FuY2ZnIHV0aWxpdHkuCisJCQkJbyBOZXcgRlQxIGRlYnVnZ2luZyBzdXBwb3J0IHZpYSAqcGlwZW1vbiB1dGlsaXRpZXMuCisJCQkJbyBGcmFtZSBSZWxheSBBUlAgc3VwcG9ydCBFbmFibGVkLgorCitiZXRhMy0yLjEuNCBKdWwgMjAwMAkJbyBYMjUgTV9CSVQgUHJvYmxlbSBmaXguCisJCQkJbyBBZGRlZCB0aGUgTXVsdGktUG9ydCBQUFAKKwkJCQkgIFVwZGF0ZWQgdXRpbGl0ZXMgZm9yIHRoZSBNdWx0aS1Qb3J0IFBQUC4KKworMi4xLjQJQXV0IDIwMDAKKwkJCQlvIEluIFgyNUFQSToKKwkJCQkJTWF4aW11bSBwYWNrZXQgYW4gYXBwbGljYXRpb24gY2FuIHNlbmQKKwkJCQkJdG8gdGhlIGRyaXZlciBoYXMgYmVlbiBleHRlbmRlZCB0byA0MDk2IGJ5dGVzLgorCisJCQkJCUZpeGVkIHRoZSB4MjUgc3RhcnR1cCBidWcuIEVuYWJsZSAKKwkJCQkJY29tbXVuaWNhdGlvbnMgb25seSBhZnRlciBhbGwgaW50ZXJmYWNlcworCQkJCQljb21lIHVwLiAgSElHSCBTVkMvUFZDIGlzIHVzZWQgdG8gY2FsY3VsYXRlCisJCQkJCXRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCisJCQkJCUVuYWJsZSBwcm90b2NvbCBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWFyZSBlbmFibGVkLgorCisJCQkJbyBBZGRlZCBhbiBleHRyYSBzdGF0ZSB0byB0aGUgRlQxIGNvbmZpZywga2VybmVsIG1vZHVsZS4KKwkJCQlvIFVwZGF0ZWQgdGhlIHBpcGVtb24gZGVidWdnZXJzLgorCisJCQkJbyBCbG9ja2VkIHRoZSBNdWx0aS1Qb3J0IFBQUCBmcm9tIHJ1bm5pbmcgb24ga2VybmVscworCQkJCSAgMi4yLjE2IG9yIGdyZWF0ZXIsIGR1ZSB0byBzeW5jcHBwIGtlcm5lbCBtb2R1bGUKKwkJCQkgIGNoYW5nZS4gCisJICAKK2JldGExLTIuMS41IAlOb3YgMTUgMjAwMAorCQkJCW8gRml4ZWQgdGhlIE11bGl0UG9ydCBQUFAgU3VwcG9ydCBmb3Iga2VybmVscyAyLjIuMTYgYW5kIGFib3ZlLgorCQkJCSAgMi4yLlgga2VybmVscyBvbmx5CisKKwkJCQlvIFNlY3VyZWQgdGhlIGRyaXZlciBVRFAgZGVidWdnaW5nIGNhbGxzCisJCQkJCS0gQWxsIGlsbGVnYWwgbmV0b3dyayBkZWJ1Z2dpbmcgY2FsbHMgYXJlIHJlcG9ydGVkIHRvCisJCQkJCSAgdGhlIGxvZy4KKwkJCQkJLSBEZWZpbmVkIGEgc2V0IG9mIGFsbG93ZWQgY29tbWFuZHMsIGFsbCBvdGhlciBkZW5pZWQuCisJCQkJCQorCQkJCW8gQ3BpcGVtb24KKwkJCQkJLSBBZGRlZCBzZXQgRlQxIGNvbW1hbmRzIHRvIHRoZSBjcGlwZW1vbi4gVGh1cyBDU1UvRFNVCisJCQkJCSAgY29uZmlndXJhaXRvbiBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIGNwaXBlbW9uLgorCQkJCQkgIEFsbCBzeXN0ZW1zIHRoYXQgY2Fubm90IHJ1biBjZmdmdDEgR1VJIHV0aWxpdHkgc2hvdWxkCisJCQkJCSAgdXNlIGNwaXBlbW9uIHRvIGNvbmZpZ3VyZSB0aGUgb24gYm9hcmQgQ1NVL0RTVS4KKworCisJCQkJbyBLZXlib2FyZCBMZWQgTW9uaXRvci9EZWJ1Z2dlcgorCQkJCQktIEEgbmV3IHV0aWx0eSAvdXNyL3NiaW4vd3BrYmRtb24gdXNlcyBrZXlib2FyZCBsZWRzCisJCQkJCSAgdG8gY29udmV5IG9wZXJhdGluYWwgc3RhdGlzdGljIGluZm9ybWF0aW9uIG9mIHRoZSAKKwkJCQkJICBTYW5nb21hIFdBTlBJUEUgY2FyZHMuCisJCQkJCU5VTV9MT0NLICAgID0gTGluZSBTdGF0ZSAgKE9uPWNvbm5lY3RlZCwgICAgT2ZmPWRpc2Nvbm5lY3RlZCkKKwkJCQkJQ0FQU19MT0NLICAgPSBUeCBkYXRhICAgICAoT249dHJhbnNtaXR0aW5nLCBPZmY9bm8gdHggZGF0YSkKKwkJCQkJU0NST0xMX0xPQ0sgPSBSeCBkYXRhICAgICAoT249cmVjZWl2aW5nLCAgICBPZmY9bm8gcnggZGF0YQorCQkJCQkKKwkJCQlvIEhhcmR3YXJlIHByb2JlIG9uIG1vZHVsZSBsb2FkIGFuZCBkeW5hbWljIGRldmljZSBhbGxvY2F0aW9uCisJCQkJCS0gRHVyaW5nIFdBTlBJUEUgbW9kdWxlIGxvYWQsIGFsbCBTYW5nb21hIGNhcmRzIGFyZSBwcm9iZWQKKwkJCQkJICBhbmQgZm91bmQgaW5mb3JtYXRpb24gaXMgcHJpbnRlZCBpbiB0aGUgL3Zhci9sb2cvbWVzc2FnZXMuCisJCQkJCS0gSWYgbm8gY2FyZHMgYXJlIGZvdW5kLCB0aGUgbW9kdWxlIGxvYWQgZmFpbHMuCisJCQkJCS0gQXBwcm9wcmlhdGUgbnVtYmVyIG9mIGRldmljZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCAKKwkJCQkJICBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIFNhbmdvbWEgY2FyZHMgZm91bmQuCisKKwkJCQkJICBOb3RlOiBUaGUga2VybmVsIGNvbmZpZ3VyYWl0b24gb3B0aW9uIAorCQkJCQkJQ09ORklHX1dBTlBJUEVfQ0FSRFMgaGFzIGJlZW4gdGFrZW4gb3V0LgorCQkJCQkKKwkJCQlvIEZpeGVkIHRoZSBGcmFtZSBSZWxheSBhbmQgQ2hkbGMgbmV0d29yayBpbnRlcmZhY2VzIHNvIHRoZXkgYXJlCisJCQkJICBjb21wYXRpYmxlIHdpdGggbGlicGNhcCBsaWJyYXJpZXMuICBNZWFuaW5nLCB0Y3BkdW1wLCBzbm9ydCwKKwkJCQkgIGV0aGVyZWFsLCBhbmQgYWxsIG90aGVyIHBhY2tldCBzbmlmZmVycyBhbmQgZGVidWdnZXJzIHdvcmsgb24KKwkJCQkgIGFsbCBXQU5QSVBFIG5ldG93cmsgaW50ZXJmYWNlcy4KKwkJCQkJLSBTZXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGVuY29kaW5nIHR5cGUgdG8gQVJQSFJEX1BQUC4KKwkJCQkJICBUaGlzIHRlbGwgdGhlIHNuaWZmZXJzIHRoYXQgZGF0YSBvYnRhaW5lZCBmcm9tIHRoZQorCQkJCQkgIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGluIHB1cmUgSVAgZm9ybWF0LgorCQkJCSAgRml4IGZvciAyLjIuWCBrZXJuZWxzIG9ubHkuCisJCQkJCisJCQkJbyBUcnVlIGludGVyZmFjZSBlbmNvZGluZyBvcHRpb24gZm9yIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQktIFRoZSBhYm92ZSBmaXggc2V0cyB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcKKwkJCQkJICB0eXBlIHRvIEFSUEhSRF9QUFAsIGhvd2V2ZXIgc29tZSBjdXN0b21lcnMgdXNlCisJCQkJCSAgdGhlIGVuY29kaW5nIGludGVyZmFjZSB0eXBlIHRvIGRldGVybWluZSB0aGUKKwkJCQkJICBwcm90b2NvbCBydW5uaW5nLiAgVGhlcmVmb3JlLCB0aGUgVFVSRSBFTkNPRElORworCQkJCQkgIG9wdGlvbiB3aWxsIHNldCB0aGUgaW50ZXJmYWNlIHR5cGUgYmFjayB0byB0aGUKKwkJCQkJICBvcmlnaW5hbCB2YWx1ZS4gIAorCisJCQkJCSAgTk9URTogSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB3aXRoIEZyYW1lIFJlbGF5IGFuZCBDSERMQworCQkJCQkJbGlicGNhcCBsaWJyYXJ5IHN1cHBvcnQgd2lsbCBiZSBicm9rZW4uICAKKwkJCQkJCWkuZS4gdGNwZHVtcCB3aWxsIG5vdCB3b3JrLgorCQkJCQlGaXggZm9yIDIuMi54IEtlcm5lbHMgb25seS4KKwkJCQkJCQorCQkJCW8gRXRoZXJuZXQgQnJpZGdpbmQgb3ZlciBGcmFtZSBSZWxheQorCQkJCQktIFRoZSBGcmFtZSBSZWxheSBicmlkZ2luZyBoYXMgYmVlbiBkZXZlbG9wZWQgYnkgCisJCQkJCSAgS3Jpc3RpYW4gSG9mZm1hbm4gYW5kIE1hcmsgV2VsbHMuICAKKwkJCQkJLSBUaGUgTGludXgga2VybmVsIGJyaWRnZSBpcyB1c2VkIHRvIHNlbmQgZXRoZXJuZXQgCisJCQkJCSAgZGF0YSBvdmVyIHRoZSBmcmFtZSByZWxheSBsaW5rcy4KKwkJCQkJRm9yIDIuMi5YIEtlcm5lbHMgb25seS4KKworCQkJCW8gQWRkZWQgZXh0ZW5zaXZlIDIuMC5YIHN1cHBvcnQuIE1vc3QgbmV3IGZlYXR1cmVzIG9mCisJCQkJICAyLjEuNSBmb3IgcHJvdG9jb2xzIEZyYW1lIFJlbGF5LCBQUFAgYW5kIENIRExDIGFyZQorCQkJCSAgc3VwcG9ydGVkIHVuZGVyIDIuMC5YIGtlcm5lbHMuIAorCitiZXRhMS0yLjIuMCAJRGVjIDMwIDIwMDAKKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgMi40Llgga2VybmVscy4KKwkJCQlvIFVwZGF0ZWQgZHJpdmVycyBmb3IgU01QIHN1cHBvcnQuCisJCQkJbyBYMjVBUEkgaXMgbm93IGFibGUgdG8gc2hhcmUgUENJIGludGVycnVwdHMuCisJCQkJbyBUb29rIG91dCBhIGdlbmVyYWwgcG9sbGluZyByb3V0aW5lIHRoYXQgd2FzIHVzZWQKKwkJCQkgIG9ubHkgYnkgWDI1QVBJLiAKKwkJCQlvIEFkZGVkIGFwcHJvcHJpYXRlIGxvY2tzIHRvIHRoZSBkeW5hbWljIHJlY29uZmlndXJhdGlvbgorCQkJCSAgY29kZS4KKwkJCQlvIEZpeGVkIGEgYnVnIGluIHRoZSBrZXlib2FyZCBkZWJ1ZyBtb25pdG9yLgorCitiZXRhMi0yLjIuMAlKYW4gOCAyMDAxCisJCQkJbyBQYXRjaGVzIGZvciAyLjQuMCBrZXJuZWwKKwkJCQlvIFBhdGNoZXMgZm9yIDIuMi4xOCBrZXJuZWwKKwkJCQlvIE1pbm9yIHVwZGF0ZXMgdG8gUFBQIGFuZCBDSExEQyBkcml2ZXJzLgorCQkJCSAgTm90ZTogTm8gZnVuY3RpbmFsIGRpZmZlcmVuY2UuIAorCitiZXRhMy0yLjIuOQlKYW4gMTAgMjAwMQorCQkJCW8gSSBtaXNzZWQgdGhlIDIuMi4xOCBrZXJuZWwgcGF0Y2hlcyBpbiBiZXRhMi0yLjIuMAorCQkJCSAgcmVsZWFzZS4gIFRoZXkgYXJlIGluY2x1ZGVkIGluIHRoaXMgcmVsZWFzZS4KKworU3RhYmxlIFJlbGVhc2UKKzIuMi4wCQlGZWIgMDEgMjAwMQorCQkJCW8gQnVnIGZpeCBpbiB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRvci4KKwkJCQkJVGhlIGVkaXQgZnVuY3Rpb24gZGlkbid0IHdvcmsgcHJvcGVybHkuCisKKworYmF0YTEtMi4yLjEJRmViIDA5IDIwMDEKKwkJCW8gV0FOUElQRSBUVFkgRHJpdmVyIGVtdWxhdGlvbi4gCisJCQkgIFR3byBtb2RlcyBvZiBvcGVyYXRpb24gU3luYyBhbmQgQXN5bmMuCisJCQkJU3luYzogVXNpbmcgdGhlIFBQUEQgZGFlbW9uLCBrZXJuZWwgU3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV2FucGlwZSBzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sIAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIsIG92ZXIKKwkJCQkgICAgICBhIFQxIGxlYXNlZCBsaW5lLgorCQkJCisJCQkJICAgICAgVGhlIDIuNC4wIGtlcm5lbCBQUFAgbGF5ZXIgc3VwcG9ydHMgTVVMVElMSU5LCisJCQkJICAgICAgcHJvdG9jb2wsIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVuZGxlIGFueSBudW1iZXIgb2YgU2FuZ29tYQorCQkJCSAgICAgIGFkYXB0ZXJzIChUMSBsaW5lcykgaW50byBvbmUsIHVuZGVyIGEgc2luZ2xlIElQIGFkZHJlc3MuCisJCQkJICAgICAgVGh1cywgZWZmaWNpZW50bHkgb2J0YWluaW5nIG11bHRpcGxlIFQxIHRocm91Z2hwdXQuIAorCisJCQkJICAgICAgTk9URTogVGhlIHJlbW90ZSBzaWRlIG11c3QgYWxzbyBpbXBsZW1lbnQgTVVMVElMSU5LIFBQUAorCQkJCQkgICAgcHJvdG9jb2wuCisKKwkJCQlBc3luYzpVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBBc3luY1BQUCBsYXllcgorCQkJCSAgICAgIGFuZCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyOiBhIFBQUCBwcm90b2NvbAorCQkJCSAgICAgIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBTYW5nb21hIGFkYXB0ZXIgYW5kCisJCQkJICAgICAgYSBtb2RlbSwgb3ZlciBhIHRlbGVwaG9uZSBsaW5lLgorCisJCQkJICAgICAgVGh1cywgdGhlIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciBzaW11bGF0ZXMgYSBzZXJpYWwKKwkJCQkgICAgICBUVFkgZHJpdmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgdXNlZCB0byBpbnRlcmZhY2UgdGhlIAorCQkJCSAgICAgIE1PREVNIHRvIHRoZSBsaW51eCBrZXJuZWwuCisJCQkJCisJCQlvIFdBTlBJUEUgUFBQIEJhY2t1cCBVdGlsaXR5CisJCQkJVGhpcyB1dGlsaXR5IHdpbGwgbW9uaXRvciB0aGUgc3RhdGUgb2YgdGhlIFBQUCBUMSBsaW5lLgorCQkJCUluIGNhc2Ugb2YgZmFpbHVyZSwgYSBkaWFsIHVwIGNvbm5lY3Rpb24gd2lsbCBiZSBlc3RhYmxpc2hlZAorCQkJCXZpYSBwcHBkIGRhZW1vbiwgZXRoZXIgdmlhIGEgc2VyaWFsIHR0eSBkcml2ZXIgKHNlcmlhbCBwb3J0KSwgCisJCQkJb3IgYSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXIgKGluIGNhc2Ugc2VyaWFsIHBvcnQgaXMgdW5hdmFpbGFibGUpLgorCQkJCQorCQkJCUZ1cnRoZXJtb3JlLCB3aGlsZSBpbiBkaWFsIHVwIG1vZGUsIHRoZSBwcmltYXJ5IFBQUCBUMSBsaW5rCisJCQkJd2lsbCBiZSBtb25pdG9yZWQgZm9yIHNpZ25zIG9mIGxpZmUuICAKKworCQkJCUlmIHRoZSBQUFAgVDEgbGluayBjb21lcyBiYWNrIHRvIGxpZmUsIHRoZSBkaWFsIHVwIGNvbm5lY3Rpb24KKwkJCQl3aWxsIGJlIHNodXRkb3duIGFuZCBUMSBsaW5lIHJlLWVzdGFibGlzaGVkLgorCQkJCisKKwkJCW8gTmV3IFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJT3B0aW9uIHRvIFVQR1JBREUgZGV2aWNlIGRyaXZlcnMgaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzCisJCQkJYWxyZWFkeSBiZWVuIHBhdGNoZWQgd2l0aCBXQU5QSVBFLgorCisJCQkJT3B0aW9uIHRvIENPTVBJTEUgV0FOUElQRSBtb2R1bGVzIGFnYWluc3QgdGhlIGN1cnJlbnRseSAKKwkJCQlydW5uaW5nIGtlcm5lbCwgdGh1cyBubyBuZWVkIGZvciBtYW51YWwga2VybmVsIGFuZCBtb2R1bGUKKwkJCQlyZS1jb21waWxhdGluLgorCQkJCisJCQlvIFVwZGF0ZXMgYW5kIEJ1ZyBGaXhlcyB0byB3YW5jZmcgdXRpbGl0eS4KKworYmF0YTItMi4yLjEJRmViIDIwIDIwMDEKKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIENIRExDIGRldmljZSBkcml2ZXJzLgorCQkJCVRoZSBkcml2ZXIgaGFkIGNvbXBpbGF0aW9uIHByb2JsZW1zIHVuZGVyIGtlcm5lbHMKKwkJCQkyLjIuMTQgb3IgbG93ZXIuCisKKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCQkJCVRoZSBkZXZpY2UgZHJpdmVycyBjb21waWxhdGlvbiBvcHRpb25zIGRpZG4ndCB3b3JrCisJCQkJcHJvcGVybHkuCisKKwkJCW8gVXBkYXRlIHRvIHRoZSB3cGJhY2t1cGQgZGFlbW9uLiAgCisJCQkJT3B0aW1pemVkIHRoZSBjcm9zcy1vdmVyIHRpbWVzLCBiZXR3ZWVuIHRoZSBwcmltYXJ5CisJCQkJbGluayBhbmQgdGhlIGJhY2t1cCBkaWFsdXAuCisKK2JldGEzLTIuMi4xCU1hciAwMiAyMDAxCisJCQlvIFBhdGNoZXMgZm9yIDIuNC4yIGtlcm5lbC4KKworCQkJbyBCdWcgZml4ZXMgdG8gdXRpbC8gbWFrZSBmaWxlcy4KKwkJCW8gQnVnIGZpeGVzIHRvIHRoZSBTZXR1cCBpbnN0YWxsYXRpb24gc2NyaXB0LgorCisJCQlvIFRvb2sgb3V0IHRoZSBiYWNrdXBkIHN1cHBvcnQgYW5kIG1hZGUgaXQgaW50bworCQkJICBhcyBzZXBhcmF0ZSBwYWNrYWdlLgorCQkJICAKK2JldGE0LTIuMi4xICAgICBNYXIgMTIgMjAwMQorCisJCW8gRml4IHRvIHRoZSBGcmFtZSBSZWxheSBEZXZpY2UgZHJpdmVyLgorCQkJSVBTQUMgc2VuZHMgYSBwYWNrZXQgb2YgemVybyBsZW5ndGgKKwkJCWhlYWRlciB0byB0aGUgZnJhbWUgcmVsYXkgZHJpdmVyLiAgVGhlCisJCQlkcml2ZXIgdHJpZXMgdG8gcHVzaCBpdHMgb3duIDIgYnl0ZSBoZWFkZXIKKwkJCWludG8gdGhlIHBhY2tldCwgd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8KKwkJCWNyYXNoLgorCisJCW8gRml4IHRoZSBXQU5QSVBFIHJlLWNvbmZpZ3VyYXRpb24gY29kZS4KKwkJCUJ1ZyB3YXMgZm91bmQgYnkgdHJ5aW5nIHRvIHJ1biAgdGhlIGNmZ2Z0MSB3aGlsZSB0aGUKKwkJCWludGVyZmFjZSB3YXMgYWxyZWFkeSBydW5uaW5nLiAgCisKKwkJbyBVcGRhdGVzIHRvIGNmZ2Z0MS4KKwkJCVdyaXRlcyBhIHdhbnBpcGUjLmNmZ2Z0MSBjb25maWd1cmF0aW9uIGZpbGUKKwkJCW9uY2UgdGhlIENTVS9EU1UgaXMgY29uZmlndXJlZC4gVGhpcyBmaWxlIGNhbgorCQkJaG9sZHMgdGhlIGN1cnJlbnQgQ1NVL0RTVSBjb25maWd1cmF0aW9uLgorCisKKworPj4+Pj4+IEVORCBPRiBSRUFETUUgPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8CisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYWNmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKQEAgLTAsMCArMSw3MyBAQAorCVRoZSBXYXZlbGFuIGRyaXZlcnMgc2FnYQorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQnkgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgorCisJVGhlIFdhdmVsYW4gaXMgYSBSYWRpbyBuZXR3b3JrIGFkYXB0ZXIgZGVzaWduZWQgYnkKK0x1Y2VudC4gVW5kZXIgdGhpcyBnZW5lcmljIG5hbWUgaXMgaGlkZGVuIHF1aXRlIGEgdmFyaWV0eSBvZiBoYXJkd2FyZSwKK2FuZCBtYW55IExpbnV4IGRyaXZlciB0byBzdXBwb3J0IGl0LgorCVRoZSBnZXQgdGhlIGZ1bGwgc3Rvcnkgb24gV2lyZWxlc3MgTEFOcywgcGxlYXNlIGNvbnN1bHQgOgorCQlodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4LworCisid2F2ZWxhbiIgZHJpdmVyIChvbGQgSVNBIFdhdmVsYW4pCistLS0tLS0tLS0tLS0tLS0tCisJbyBDb25maWcgOglOZXR3b3JrIGRldmljZSAtPiBXaXJlbGVzcyBMQU4gLT4gQVQmVCBXYXZlTEFOCisJbyBMb2NhdGlvbiA6CS4uLi9kcml2ZXJzL25ldC93YXZlbGFuKgorCW8gaW4tbGluZSBkb2MgOgkuLi4vZHJpdmVycy9uZXQvd2F2ZWxhbi5wLmgKKwlvIG9uLWxpbmUgZG9jIDoKKwkgICAgaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9XYXZlbGFuLmh0bWwKKworCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIElTQSB2ZXJzaW9uIG9mIHRoZSBmaXJzdCBnZW5lcmF0aW9uCitvZiB0aGUgV2F2ZWxhbiwgbm93IGRpc2NvbnRpbnVlZC4gVGhlIGRldmljZSBpcyAyIE1iL3MsIGNvbXBvc2VkIG9mIGEKK0ludGVsIDgyNTg2IGNvbnRyb2xsZXIgYW5kIGEgTHVjZW50IE1vZGVtLCBhbmQgaXMgTk9UIDgwMi4xMSBjb21wbGlhbnQuCisJVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDoKKwlvIFdhdmVsYW4gSVNBIDkxNSBNSHogKGZ1bGwgbGVuZ3RoIElTQSBjYXJkKSAKKwlvIFdhdmVsYW4gSVNBIDkxNSBNSHogMi4wIChoYWxmIGxlbmd0aCBJU0EgY2FyZCkgCisJbyBXYXZlbGFuIElTQSAyLjQgR0h6IChmdWxsIGxlbmd0aCBJU0EgY2FyZCwgZml4ZWQgZnJlcXVlbmN5KSAKKwlvIFdhdmVsYW4gSVNBIDIuNCBHSHogMi4wIChoYWxmIGxlbmd0aCBJU0EgY2FyZCwgZnJlcXVlbmN5IHNlbGVjdGFibGUpIAorCW8gQWJvdmUgY2FyZHMgd2l0aCB0aGUgb3B0aW9uYWwgREVTIGVuY3J5cHRpb24gZmVhdHVyZSAKKworIndhdmVsYW5fY3MiIGRyaXZlciAob2xkIFBjbWNpYSBXYXZlbGFuKQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCW8gQ29uZmlnIDoJTmV0d29yayBkZXZpY2UgLT4gUENNQ0lBIG5ldHdvcmsgLT4KKwkJCQlQY21jaWEgV2lyZWxlc3MgTEFOIC0+IEFUJlQvTHVjZW50IFdhdmVMQU4KKwlvIExvY2F0aW9uIDoJLi4uL2RyaXZlcnMvbmV0L3BjbWNpYS93YXZlbGFuKgorCW8gaW4tbGluZSBkb2MgOgkuLi4vZHJpdmVycy9uZXQvcGNtY2lhL3dhdmVsYW5fY3MuaAorCW8gb24tbGluZSBkb2MgOgorCSAgICBodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1dhdmVsYW4uaHRtbAorCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgUENNQ0lBIHZlcnNpb24gb2YgdGhlIGZpcnN0CitnZW5lcmF0aW9uIG9mIHRoZSBXYXZlbGFuLCBub3cgZGlzY29udGludWVkLiBUaGUgZGV2aWNlIGlzIDIgTWIvcywKK2NvbXBvc2VkIG9mIGEgSW50ZWwgODI1OTMgY29udHJvbGxlciAodG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgODI1ODYpCithbmQgYSBMdWNlbnQgTW9kZW0sIGFuZCBOT1QgODAyLjExIGNvbXBhdGlibGUuCisJVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDoKKwlvIFdhdmVsYW4gUGNtY2lhIDkxNSBNSHogMi4wIChQY21jaWEgY2FyZCArIHNlcGFyYXRlCisJCQkJCW1vZGVtL2FudGVubmEgYmxvY2spIAorCW8gV2F2ZWxhbiBQY21jaWEgMi40IEdIeiAyLjAgKFBjbWNpYSBjYXJkICsgc2VwYXJhdGUKKwkJCQkJbW9kZW0vYW50ZW5uYSBibG9jaykgCisKKyJ3dmxhbl9jcyIgZHJpdmVyIChXYXZlbGFuIElFRUUsIEdQTCkKKy0tLS0tLS0tLS0tLS0tLS0tCisJbyBDb25maWcgOglOb3QgeWV0IGluIGtlcm5lbAorCW8gTG9jYXRpb24gOglQY21jaWEgcGFja2FnZSAzLjEuMTArCisJbyBvbi1saW5lIGRvYyA6CWh0dHA6Ly93d3cuZmFzdGEuZmgtZG9ydG11bmQuZGUvdXNlcnMvYW5keS93dmxhbi8KKworCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBvZiBXYXZlbGFuIElFRUUsCit3aGljaCBpcyA4MDIuMTEgY29tcGF0aWJsZS4gRGVwZW5kaW5nIG9uIHZlcnNpb24sIGl0IGlzIDIgTWIvcyBvciAxMQorTWIvcywgd2l0aCBvciB3aXRob3V0IGVuY3J5cHRpb24sIGFsbCBpbXBsZW1lbnRlZCBpbiBMdWNlbnQgc3BlY2lmaWMKK0RTUCAodGhlIEhlcm1lcykuCisJVGhpcyBpcyBhIEdQTCBmdWxsIHNvdXJjZSBQQ01DSUEgZHJpdmVyIChJU0EgaXMganVzdCBhIFBjbWNpYQorY2FyZCB3aXRoIElTQS1QY21jaWEgYnJpZGdlKS4KKworIndhdmVsYW4yX2NzIiBkcml2ZXIgKFdhdmVsYW4gSUVFRSwgYmluYXJ5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlvIENvbmZpZyA6CU5vdCB5ZXQgaW4ga2VybmVsCisJbyBMb2NhdGlvbiA6CWZ0cDovL3NvdXJjZWZvcmdlLm9yZy9wY21jaWEvY29udHJpYi8KKworCVRoaXMgZHJpdmVyIHN1cHBvcnQgZXhhY3RseSB0aGUgc2FtZSBoYXJkd2FyZSBhcyB0aGUgcHJldmlvdXMKK2RyaXZlciwgdGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGlzIGJhc2VkIG9uIGEgYmluYXJ5IGxpYnJhcnkKK2FuZCBzdXBwb3J0ZWQgYnkgTHVjZW50LgorCisJSSBob3BlIGl0IGNsZWFycyB0aGUgY29uZnVzaW9uIDstKQorCisJSmVhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS1pZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzVjYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS1pZmFjZS50eHQKQEAgLTAsMCArMSwxMjMgQEAKKwkJCVguMjUgRGV2aWNlIERyaXZlciBJbnRlcmZhY2UgMS4xCisKKwkJCSAgIEpvbmF0aGFuIE5heWxvciAyNi4xMi45NgorCitUaGlzIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIG1lc3NhZ2VzIHRvIGJlIHBhc3NlZCBiZXR3ZWVuIHRoZSBYLjI1IFBhY2tldAorTGF5ZXIgYW5kIHRoZSBYLjI1IGRldmljZSBkcml2ZXIuIFRoZXkgYXJlIGRlc2lnbmVkIHRvIGFsbG93IGZvciB0aGUgZWFzeQorc2V0dGluZyBvZiB0aGUgTEFQQiBtb2RlIGZyb20gd2l0aGluIHRoZSBQYWNrZXQgTGF5ZXIuCisKK1RoZSBYLjI1IGRldmljZSBkcml2ZXIgd2lsbCBiZSBjb2RlZCBub3JtYWxseSBhcyBwZXIgdGhlIExpbnV4IGRldmljZSBkcml2ZXIKK3N0YW5kYXJkcy4gTW9zdCBYLjI1IGRldmljZSBkcml2ZXJzIHdpbGwgYmUgbW9kZXJhdGVseSBzaW1pbGFyIHRvIHRoZQorYWxyZWFkeSBleGlzdGluZyBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycy4gSG93ZXZlciB1bmxpa2UgdGhvc2UgZHJpdmVycywgdGhlCitYLjI1IGRldmljZSBkcml2ZXIgaGFzIGEgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGl0LCBhbmQgdGhpcyBpbmZvcm1hdGlvbgorbmVlZHMgdG8gYmUgcGFzc2VkIHRvIGFuZCBmcm9tIHRoZSBQYWNrZXQgTGF5ZXIgZm9yIHByb3BlciBvcGVyYXRpb24uCisKK0FsbCBtZXNzYWdlcyBhcmUgaGVsZCBpbiBza19idWZmJ3MganVzdCBsaWtlIHJlYWwgZGF0YSB0byBiZSB0cmFuc21pdHRlZAorb3ZlciB0aGUgTEFQQiBsaW5rLiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgc2tidWZmIGluZGljYXRlcyB0aGUgbWVhbmluZyBvZgordGhlIHJlc3Qgb2YgdGhlIHNrYnVmZiwgaWYgYW55IG1vcmUgaW5mb3JtYXRpb24gZG9lcyBleGlzdC4KKworCitQYWNrZXQgTGF5ZXIgdG8gRGV2aWNlIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QgQnl0ZSA9IDB4MDAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgc2tidWZmIGNvbnRhaW5zIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQKK292ZXIgdGhlIExBUEIgbGluay4gVGhlIExBUEIgbGluayBzaG91bGQgYWxyZWFkeSBleGlzdCBiZWZvcmUgYW55IGRhdGEgaXMKK3Bhc3NlZCBkb3duLgorCitGaXJzdCBCeXRlID0gMHgwMQorCitFc3RhYmxpc2ggdGhlIExBUEIgbGluay4gSWYgdGhlIGxpbmsgaXMgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGVuIHRoZSBjb25uZWN0Citjb25maXJtYXRpb24gbWVzc2FnZSBzaG91bGQgYmUgcmV0dXJuZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworRmlyc3QgQnl0ZSA9IDB4MDIKKworVGVybWluYXRlIHRoZSBMQVBCIGxpbmsuIElmIGl0IGlzIGFscmVhZHkgZGlzY29ubmVjdGVkIHRoZW4gdGhlIGRpc2Nvbm5lY3QKK2NvbmZpcm1hdGlvbiBtZXNzYWdlIHNob3VsZCBiZSByZXR1cm5lZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitGaXJzdCBCeXRlID0gMHgwMworCitMQVBCIHBhcmFtZXRlcnMuIFRvIGJlIGRlZmluZWQuCisKKworRGV2aWNlIERyaXZlciB0byBQYWNrZXQgTGF5ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IEJ5dGUgPSAweDAwCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHNrYnVmZiBjb250YWlucyBkYXRhIHRoYXQgaGFzIGJlZW4KK3JlY2VpdmVkIG92ZXIgdGhlIExBUEIgbGluay4KKworRmlyc3QgQnl0ZSA9IDB4MDEKKworTEFQQiBsaW5rIGhhcyBiZWVuIGVzdGFibGlzaGVkLiBUaGUgc2FtZSBtZXNzYWdlIGlzIHVzZWQgZm9yIGJvdGggYSBMQVBCCitsaW5rIGNvbm5lY3RfY29uZmlybWF0aW9uIGFuZCBhIGNvbm5lY3RfaW5kaWNhdGlvbi4KKworRmlyc3QgQnl0ZSA9IDB4MDIKKworTEFQQiBsaW5rIGhhcyBiZWVuIHRlcm1pbmF0ZWQuIFRoaXMgc2FtZSBtZXNzYWdlIGlzIHVzZWQgZm9yIGJvdGggYSBMQVBCCitsaW5rIGRpc2Nvbm5lY3RfY29uZmlybWF0aW9uIGFuZCBhIGRpc2Nvbm5lY3RfaW5kaWNhdGlvbi4KKworRmlyc3QgQnl0ZSA9IDB4MDMKKworTEFQQiBwYXJhbWV0ZXJzLiBUbyBiZSBkZWZpbmVkLgorCisKKworUG9zc2libGUgUHJvYmxlbXMKKz09PT09PT09PT09PT09PT09CisKKyhIZW5uZXIgRWlzZW4sIDIwMDAtMTAtMjgpCisKK1RoZSBYLjI1IHBhY2tldCBsYXllciBwcm90b2NvbCBkZXBlbmRzIG9uIGEgcmVsaWFibGUgZGF0YWxpbmsgc2VydmljZS4KK1RoZSBMQVBCIHByb3RvY29sIHByb3ZpZGVzIHN1Y2ggcmVsaWFibGUgc2VydmljZS4gQnV0IHRoaXMgcmVsaWFiaWxpdHkKK2lzIG5vdCBwcmVzZXJ2ZWQgYnkgdGhlIExpbnV4IG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpbnRlcmZhY2U6CisKKy0gV2l0aCBMaW51eCAyLjQueCAoYW5kIGFib3ZlKSBTTVAga2VybmVscywgcGFja2V0IG9yZGVyaW5nIGlzIG5vdAorICBwcmVzZXJ2ZWQuIEV2ZW4gaWYgYSBkZXZpY2UgZHJpdmVyIGNhbGxzIG5ldGlmX3J4KHNrYjEpIGFuZCBsYXRlcgorICBuZXRpZl9yeChza2IyKSwgc2tiMiBtaWdodCBiZSBkZWxpdmVyZWQgdG8gdGhlIG5ldHdvcmsgbGF5ZXIKKyAgZWFybGllciB0aGF0IHNrYjEuCistIERhdGEgcGFzc2VkIHVwc3RyZWFtIGJ5IG1lYW5zIG9mIG5ldGlmX3J4KCkgbWlnaHQgYmUgZHJvcHBlZCBieSB0aGUKKyAga2VybmVsIGlmIHRoZSBiYWNrbG9nIHF1ZXVlIGlzIGNvbmdlc3RlZC4KKworVGhlIFguMjUgcGFja2V0IGxheWVyIHByb3RvY29sIHdpbGwgZGV0ZWN0IHRoaXMgYW5kIHJlc2V0IHRoZSB2aXJ0dWFsCitjYWxsIGluIHF1ZXN0aW9uLiBCdXQgbWFueSB1cHBlciBsYXllciBwcm90b2NvbHMgYXJlIG5vdCBkZXNpZ25lZCB0bworaGFuZGxlIHN1Y2ggTi1SZXNldCBldmVudHMgZ3JhY2VmdWxseS4gQW5kIGZyZXF1ZW50IE4tUmVzZXQgZXZlbnRzCit3aWxsIGFsd2F5cyBkZWdyYWRlIHBlcmZvcm1hbmNlLgorCitUaHVzLCBkcml2ZXIgYXV0aG9ycyBzaG91bGQgbWFrZSBuZXRpZl9yeCgpIGFzIHJlbGlhYmxlIGFzIHBvc3NpYmxlOgorCitTTVAgcmUtb3JkZXJpbmcgd2lsbCBub3Qgb2NjdXIgaWYgdGhlIGRyaXZlcidzIGludGVycnVwdCBoYW5kbGVyIGlzCithbHdheXMgZXhlY3V0ZWQgb24gdGhlIHNhbWUgQ1BVLiBUaHVzLAorCistIERyaXZlciBhdXRob3JzIHNob3VsZCB1c2UgaXJxIGFmZmluaXR5IGZvciB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisKK1RoZSBwcm9iYWJpbGl0eSBvZiBwYWNrZXQgbG9zcyBkdWUgdG8gYmFja2xvZyBjb25nZXN0aW9uIGNhbiBiZQorcmVkdWNlZCBieSB0aGUgZm9sbG93aW5nIG1lYXN1cmVzIG9yIGEgY29tYmluYXRpb24gdGhlcmVvZjoKKworKDEpIERyaXZlcnMgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjQueCBhbmQgYWJvdmUgc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUKKyAgICByZXR1cm4gdmFsdWUgb2YgbmV0aWZfcngoKS4gSWYgaXQgcmV0dXJucyBORVRfUlhfRFJPUCwgdGhlCisgICAgZHJpdmVyJ3MgTEFQQiBwcm90b2NvbCBtdXN0IG5vdCBjb25maXJtIHJlY2VwdGlvbiBvZiB0aGUgZnJhbWUKKyAgICB0byB0aGUgcGVlci4gCisgICAgVGhpcyB3aWxsIHJlbGlhYmx5IHN1cHByZXNzIHBhY2tldCBsb3NzLiBUaGUgTEFQQiBwcm90b2NvbCB3aWxsCisgICAgYXV0b21hdGljYWxseSBjYXVzZSB0aGUgcGVlciB0byByZS10cmFuc21pdCB0aGUgZHJvcHBlZCBwYWNrZXQKKyAgICBsYXRlci4KKyAgICBUaGUgbGFwYiBtb2R1bGUgaW50ZXJmYWNlIHdhcyBtb2RpZmllZCB0byBzdXBwb3J0IHRoaXMuIEl0cworICAgIGRhdGFfaW5kaWNhdGlvbigpIG1ldGhvZCBzaG91bGQgbm93IHRyYW5zcGFyZW50bHkgcGFzcyB0aGUKKyAgICBuZXRpZl9yeCgpIHJldHVybiB2YWx1ZSB0byB0aGUgKGxhcGIgbW9wZHVsZSkgY2FsbGVyLgorKDIpIERyaXZlcnMgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjIueCBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBnbG9iYWwKKyAgICB2YXJpYWJsZSBuZXRkZXZfZHJvcHBpbmcgd2hlbiBhIG5ldyBmcmFtZSBpcyByZWNlaXZlZC4gVGhlIGRyaXZlcgorICAgIHNob3VsZCBvbmx5IGNhbGwgbmV0aWZfcngoKSBpZiBuZXRkZXZfZHJvcHBpbmcgaXMgemVyby4gT3RoZXJ3aXNlCisgICAgdGhlIGRyaXZlciBzaG91bGQgbm90IGNvbmZpcm0gZGVsaXZlcnkgb2YgdGhlIGZyYW1lIGFuZCBkcm9wIGl0LgorICAgIEFsdGVybmF0aXZlbHksIHRoZSBkcml2ZXIgY2FuIHF1ZXVlIHRoZSBmcmFtZSBpbnRlcm5hbGx5IGFuZCBjYWxsCisgICAgbmV0aWZfcngoKSBsYXRlciB3aGVuIG5ldGlmX2Ryb3BwaW5nIGlzIDAgYWdhaW4uIEluIHRoYXQgY2FzZSwgZGVsaXZlcnkKKyAgICBjb25maXJtYXRpb24gc2hvdWxkIGFsc28gYmUgZGVmZXJyZWQgc3VjaCB0aGF0IHRoZSBpbnRlcm5hbCBxdWV1ZQorICAgIGNhbm5vdCBncm93IHRvIG11Y2guCisgICAgVGhpcyB3aWxsIG5vdCByZWxpYWJseSBhdm9pZCBwYWNrZXQgbG9zcywgYnV0IHRoZSBwcm9iYWJpbGl0eQorICAgIG9mIHBhY2tldCBsb3NzIGluIG5ldGlmX3J4KCkgcGF0aCB3aWxsIGJlIHNpZ25pZmljYW50bHkgcmVkdWNlZC4KKygzKSBBZGRpdGlvbmFsbHksIGRyaXZlciBhdXRob3JzIG1pZ2h0IGNvbnNpZGVyIHRvIHN1cHBvcnQKKyAgICBDT05GSUdfTkVUX0hXX0ZMT1dDT05UUk9MLiBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGJlIHdva2VuIHVwCisgICAgd2hlbiBhIHByZXZpb3VzbHkgY29uZ2VzdGVkIGJhY2tsb2cgcXVldWUgYmVjb21lcyBlbXB0eSBhZ2Fpbi4KKyAgICBUaGUgZHJpdmVyIGNvdWxkIHVzZXMgdGhpcyBmb3IgZmxvdy1jb250cm9sbGluZyB0aGUgcGVlciBieSBtZWFucworICAgIG9mIHRoZSBMQVBCIHByb3RvY29sJ3MgZmxvdy1jb250cm9sIHNlcnZpY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWM2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LnR4dApAQCAtMCwwICsxLDQ0IEBACitMaW51eCBYLjI1IFByb2plY3QKKworQXMgbXkgdGhpcmQgeWVhciBkaXNzZXJ0YXRpb24gYXQgVW5pdmVyc2l0eSBJIGhhdmUgdGFrZW4gaXQgdXBvbiBteXNlbGYgdG8KK3dyaXRlIGFuIFguMjUgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4LiBNeSBhaW0gaXMgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIFguMjUKK1BhY2tldCBMYXllciBhbmQgYSBMQVBCIG1vZHVsZSB0byBhbGxvdyBmb3IgIm5vcm1hbCIgWC4yNSB0byBiZSBydW4gdXNpbmcKK0xpbnV4LiBUaGVyZSBhcmUgdHdvIHNvcnRzIG9mIFguMjUgY2FyZHMgYXZhaWxhYmxlLCBpbnRlbGxpZ2VudCBvbmVzIHRoYXQKK2ltcGxlbWVudCBMQVBCIG9uIHRoZSBjYXJkIGl0c2VsZiwgYW5kIHVuaW50ZWxsaWdlbnQgb25lcyB0aGF0IHNpbXBseSBkbworZnJhbWluZywgYml0LXN0dWZmaW5nIGFuZCBjaGVja3N1bW1pbmcuIFRoZXNlIGJvdGggbmVlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZQorc3lzdGVtLgorCitJIHRoZXJlZm9yZSBkZWNpZGVkIHRvIHdyaXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBzdWNoIHRoYXQgYXMgZmFyIGFzIHRoZQorUGFja2V0IExheWVyIGlzIGNvbmNlcm5lZCwgdGhlIGxpbmsgbGF5ZXIgd2FzIGJlaW5nIHBlcmZvcm1lZCBieSBhIGxvd2VyCitsYXllciBvZiB0aGUgTGludXgga2VybmVsIGFuZCB0aGVyZWZvcmUgaXQgZGlkIG5vdCBjb25jZXJuIGl0c2VsZiB3aXRoCitpbXBsZW1lbnRhdGlvbiBvZiBMQVBCLiBUaGVyZWZvcmUgdGhlIExBUEIgbW9kdWxlcyB3b3VsZCBiZSBjYWxsZWQgYnkKK3VuaW50ZWxsaWdlbnQgWC4yNSBjYXJkIGRyaXZlcnMgYW5kIG5vdCBieSBpbnRlbGxpZ2VudCBvbmVzLCB0aGlzIHdvdWxkCitwcm92aWRlIGEgdW5pZm9ybSBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgYW5kIHNpbXBsaWZ5IGNvbmZpZ3VyYXRpb24uCisKK1RvIGNvbmZ1c2UgbWF0dGVycyBhIGxpdHRsZSwgYW4gODAyLjIgTExDIGltcGxlbWVudGF0aW9uIGZvciBMaW51eCBpcyBiZWluZword3JpdHRlbiB3aGljaCB3aWxsIGFsbG93IFguMjUgdG8gYmUgcnVuIG92ZXIgYW4gRXRoZXJuZXQgKG9yIFRva2VuIFJpbmcpIGFuZAorY29uZm9ybSB3aXRoIHRoZSBKTlQgIlBpbmsgQm9vayIsIHRoaXMgd2lsbCBoYXZlIGEgZGlmZmVyZW50IGludGVyZmFjZSB0bwordGhlIFBhY2tldCBMYXllciBidXQgdGhlcmUgd2lsbCBiZSBubyBjb25mdXNpb24gc2luY2UgdGhlIGNsYXNzIG9mIGRldmljZQorYmVpbmcgc2VydmVkIGJ5IHRoZSBMTEMgd2lsbCBiZSBjb21wbGV0ZWx5IHNlcGFyYXRlIGZyb20gTEFQQi4gVGhlIExMQworaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgZG9uZSBhcyBwYXJ0IG9mIGFub3RoZXIgcHJvdG9jb2wgcHJvamVjdCAoU05BKSBhbmQKK2J5IGEgZGlmZmVyZW50IGF1dGhvci4KKworSnVzdCB3aGVuIHlvdSB0aG91Z2h0IHRoYXQgaXQgY291bGQgbm90IGJlY29tZSBtb3JlIGNvbmZ1c2luZywgYW5vdGhlcgorb3B0aW9uIGFwcGVhcmVkLCBYT1QuIFRoaXMgYWxsb3dzIFguMjUgUGFja2V0IExheWVyIGZyYW1lcyB0byBvcGVyYXRlIG92ZXIKK3RoZSBJbnRlcm5ldCB1c2luZyBUQ1AvSVAgYXMgYSByZWxpYWJsZSBsaW5rIGxheWVyLiBSRkMxNjEzIHNwZWNpZmllcyB0aGUKK2Zvcm1hdCBhbmQgYmVoYXZpb3VyIG9mIHRoZSBwcm90b2NvbC4gSWYgdGltZSBwZXJtaXRzIHRoaXMgb3B0aW9uIHdpbGwgYWxzbworYmUgYWN0aXZlbHkgY29uc2lkZXJlZC4KKworQSBsaW51eC14MjUgbWFpbGluZyBsaXN0IGhhcyBiZWVuIGNyZWF0ZWQgYXQgdmdlci5rZXJuZWwub3JnIHRvIHN1cHBvcnQgdGhlCitkZXZlbG9wbWVudCBhbmQgdXNlIG9mIExpbnV4IFguMjUuIEl0IGlzIGVhcmx5IGRheXMgeWV0LCBidXQgaW50ZXJlc3RlZAorcGFydGllcyBhcmUgd2VsY29tZSB0byBzdWJzY3JpYmUgdG8gaXQuIEp1c3Qgc2VuZCBhIG1lc3NhZ2UgdG8KK21ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgd2l0aCB0aGUgZm9sbG93aW5nIGluIHRoZSBtZXNzYWdlIGJvZHk6CisKK3N1YnNjcmliZSBsaW51eC14MjUKK2VuZAorCitUaGUgY29udGVudHMgb2YgdGhlIFN1YmplY3QgbGluZSBhcmUgaWdub3JlZC4KKworSm9uYXRoYW4KKworZzRrbHhAZzRrbHguZGVtb24uY28udWsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy96ODUzMGRydi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvejg1MzBkcnYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMDZhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvejg1MzBkcnYudHh0CkBAIC0wLDAgKzEsNjU3IEBACitUaGlzIGlzIGEgc3Vic2V0IG9mIHRoZSBkb2N1bWVudGF0aW9uLiBUbyB1c2UgdGhpcyBkcml2ZXIgeW91IE1VU1QgaGF2ZSB0aGUKK2Z1bGwgcGFja2FnZSBmcm9tOgorCitJbnRlcm5ldDoKKz09PT09PT09PQorCisxLiBmdHA6Ly9mdHAuY2NhYy5yd3RoLWFhY2hlbi5kZS9wdWIvanIvejg1MzBkcnYtdXRpbHNfMy4wLTMudGFyLmd6CisKKzIuIGZ0cDovL2Z0cC5wc3B0LmZpL3B1Yi9oYW0vbGludXgvYXgyNS96ODUzMGRydi11dGlsc18zLjAtMy50YXIuZ3oKKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBkb2N1bWVudCBtYXkgYmUgaG9wZWxlc3NseSBvdXRkYXRlZC4KK0EgbmV3IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50YXRpb24sIGFsb25nIHdpdGggbGlua3MgdG8gb3RoZXIgaW1wb3J0YW50CitMaW51eCBLZXJuZWwgQVguMjUgZG9jdW1lbnRhdGlvbiBhbmQgcHJvZ3JhbXMsIGlzIGF2YWlsYWJsZSBvbgoraHR0cDovL3lhaW5hLmRlL2pyZXV0ZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJIFNDQy5DIC0gTGludXggZHJpdmVyIGZvciBaODUzMCBiYXNlZCBIRExDIGNhcmRzIGZvciBBWC4yNSAgICAgIAorCisgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgICAgIChjKSAxOTkzLDIwMDAgYnkgSm9lcmcgUmV1dGVyIERMMUJLRSA8anJldXRlckB5YWluYS5kZT4KKworICAgICAgICBwb3J0aW9ucyAoYykgMTk5MyBHdWlkbyB0ZW4gRG9sbGUgUEUxTk5aCisKKyAgICAgICAgZm9yIHRoZSBjb21wbGV0ZSBjb3B5cmlnaHQgbm90aWNlIHNlZSA+PiBDb3B5aW5nLlo4NTMwRFJWIDw8CisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorCisKKzEuIEluaXRpYWxpemF0aW9uIG9mIHRoZSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gdXNlIHRoZSBkcml2ZXIsIDMgc3RlcHMgbXVzdCBiZSBwZXJmb3JtZWQ6CisKKyAgICAgMS4gaWYgY29tcGlsZWQgYXMgbW9kdWxlOiBsb2FkaW5nIHRoZSBtb2R1bGUKKyAgICAgMi4gU2V0dXAgb2YgaGFyZHdhcmUsIE1PREVNIGFuZCBLSVNTIHBhcmFtZXRlcnMgd2l0aCBzY2Npbml0CisgICAgIDMuIEF0dGFjaCBlYWNoIGNoYW5uZWwgdG8gdGhlIExpbnV4IGtlcm5lbCBBWC4yNSB3aXRoICJpZmNvbmZpZyIKKworVW5saWtlIHRoZSB2ZXJzaW9ucyBiZWxvdyAyLjQgdGhpcyBkcml2ZXIgaXMgYSByZWFsIG5ldHdvcmsgZGV2aWNlCitkcml2ZXIuIElmIHlvdSB3YW50IHRvIHJ1biB4Tk9TIGluc3RlYWQgb2Ygb3VyIGZpbmUga2VybmVsIEFYLjI1Cit1c2UgYSAyLnggdmVyc2lvbiAoYXZhaWxhYmxlIGZyb20gYWJvdmUgc2l0ZXMpIG9yIHJlYWQgdGhlCitBWC4yNS1IT1dUTyBvbiBob3cgdG8gZW11bGF0ZSBhIEtJU1MgVE5DIG9uIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuCisKKworMS4xIExvYWRpbmcgdGhlIG1vZHVsZQorPT09PT09PT09PT09PT09PT09PT09PQorCisoSWYgeW91J3JlIGdvaW5nIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZSwKKyBza2lwIHRoaXMgY2hhcHRlciBhbmQgY29udGludWUgd2l0aCAxLjIpCisKK0JlZm9yZSB5b3UgY2FuIHVzZSBhIG1vZHVsZSwgeW91J2xsIGhhdmUgdG8gbG9hZCBpdCB3aXRoCisKKwlpbnNtb2Qgc2NjLm8KKworcGxlYXNlIHJlYWQgJ21hbiBpbnNtb2QnIHRoYXQgY29tZXMgd2l0aCBtb2R1bGUtaW5pdC10b29scy4KKworWW91IHNob3VsZCBpbmNsdWRlIHRoZSBpbnNtb2QgaW4gb25lIG9mIHRoZSAvZXRjL3JjLmQvcmMuKiBmaWxlcywKK2FuZCBkb24ndCBmb3JnZXQgdG8gaW5zZXJ0IGEgY2FsbCBvZiBzY2Npbml0IGFmdGVyIHRoYXQuIEl0Cit3aWxsIHJlYWQgeW91ciAvZXRjL3o4NTMwZHJ2LmNvbmYuCisKKzEuMi4gL2V0Yy96ODUzMGRydi5jb25mCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBzZXR1cCBhbGwgcGFyYW1ldGVycyB5b3UgbXVzdCBydW4gL3NiaW4vc2NjaW5pdCBmcm9tIG9uZQorb2YgeW91ciByYy4qLWZpbGVzLiBUaGlzIGhhcyB0byBiZSBkb25lIEJFRk9SRSB5b3UgY2FuCisiaWZjb25maWciIGFuIGludGVyZmFjZS4gU2NjaW5pdCByZWFkcyB0aGUgZmlsZSAvZXRjL3o4NTMwZHJ2LmNvbmYKK2FuZCBzZXRzIHRoZSBoYXJkd2FyZSwgTU9ERU0gYW5kIEtJU1MgcGFyYW1ldGVycy4gQSBzYW1wbGUgZmlsZSBpcworZGVsaXZlcmVkIHdpdGggdGhpcyBwYWNrYWdlLiBDaGFuZ2UgaXQgdG8geW91ciBuZWVkcy4KKworVGhlIGZpbGUgaXRzZWxmIGNvbnNpc3RzIG9mIHR3byBtYWluIHNlY3Rpb25zLgorCisxLjIuMSBjb25maWd1cmF0aW9uIG9mIGhhcmR3YXJlIHBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaGFyZHdhcmUgc2V0dXAgc2VjdGlvbiBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBmb3IgZWFjaAorWjg1MzA6CisKK2NoaXAgICAgMQorZGF0YV9hICAweDMwMCAgICAgICAgICAgICAgICAgICAjIGRhdGEgcG9ydCBBCitjdHJsX2EgIDB4MzA0ICAgICAgICAgICAgICAgICAgICMgY29udHJvbCBwb3J0IEEKK2RhdGFfYiAgMHgzMDEgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBvcnQgQgorY3RybF9iICAweDMwNSAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2wgcG9ydCBCCitpcnEgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICMgSVJRIE5vLiA1CitwY2xvY2sgIDQ5MTUyMDAgICAgICAgICAgICAgICAgICMgY2xvY2sKK2JvYXJkICAgQkFZQ09NICAgICAgICAgICAgICAgICAgIyBoYXJkd2FyZSB0eXBlCitlc2NjICAgIG5vICAgICAgICAgICAgICAgICAgICAgICMgZW5oYW5jZWQgU0NDIGNoaXA/ICg4NTgwLzg1MTgwLzg1MjgwKQordmVjdG9yICAwICAgICAgICAgICAgICAgICAgICAgICAjIGxhdGNoIGZvciBpbnRlcnJ1cHQgdmVjdG9yCitzcGVjaWFsIG5vICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyBvZiBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyCitvcHRpb24gIDAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uIHRvIHNldCB2aWEgc2ZyCisKKworY2hpcAktIHRoaXMgaXMganVzdCBhIGRlbGltaXRlciB0byBtYWtlIHNjY2luaXQgYSBiaXQgc2ltcGxlciB0bworCSAgcHJvZ3JhbS4gQSBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdC4KKworZGF0YV9hICAtIHRoZSBhZGRyZXNzIG9mIHRoZSBkYXRhIHBvcnQgQSBvZiB0aGlzIFo4NTMwIChuZWVkZWQpCitjdHJsX2EgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgcG9ydCBBIChuZWVkZWQpCitkYXRhX2IgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgcG9ydCBCIChuZWVkZWQpCitjdHJsX2IgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2wgcG9ydCBCIChuZWVkZWQpCisKK2lycSAgICAgLSB0aGUgdXNlZCBJUlEgZm9yIHRoaXMgY2hpcC4gRGlmZmVyZW50IGNoaXBzIGNhbiB1c2UgZGlmZmVyZW50CisgICAgICAgICAgSVJRcyBvciB0aGUgc2FtZS4gSWYgdGhleSBzaGFyZSBhbiBpbnRlcnJ1cHQsIGl0IG5lZWRzIHRvIGJlCisJICBzcGVjaWZpZWQgd2l0aGluIG9uZSBjaGlwLWRlZmluaXRpb24gb25seS4KKworcGNsb2NrICAtIHRoZSBjbG9jayBhdCB0aGUgUENMSyBwaW4gb2YgdGhlIFo4NTMwIChvcHRpb24sIDQ5MTUyMDAgaXMKKyAgICAgICAgICBkZWZhdWx0KSwgbWVhc3VyZWQgaW4gSGVydHoKKworYm9hcmQgICAtIHRoZSAidHlwZSIgb2YgdGhlIGJvYXJkOgorCisJICAgU0NDIHR5cGUgICAgICAgICAgICAgICAgIHZhbHVlCisJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgUEEwSFpQIFNDQyBjYXJkICAgICAgICAgIFBBMEhaUAorCSAgIEVBR0xFIGNhcmQgICAgICAgICAgICAgICBFQUdMRQorCSAgIFBDMTAwIGNhcmQgICAgICAgICAgICAgICBQQzEwMAorCSAgIFBSSU1VUy1QQyAoREc5QkwpIGNhcmQgICBQUklNVVMKKwkgICBCYXlDb20gKFUpU0NDIGNhcmQgICAgICAgQkFZQ09NCisKK2VzY2MgICAgLSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFU0NDIGNoaXBzICg4NTgwLCA4NTE4MCwgODUyODApLCBzZXQKKyAgICAgICAgICB0aGlzIHRvICJ5ZXMiIChvcHRpb24sIGRlZmF1bHRzIHRvICJubyIpCisKK3ZlY3RvciAgLSBhZGRyZXNzIG9mIHRoZSB2ZWN0b3IgbGF0Y2ggKGFrYSAiaW50YWNrIHBvcnQiKSBmb3IgUEEwSFpQCisgICAgICAgICAgY2FyZHMuIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSB2ZWN0b3IgbGF0Y2ggZm9yIGFsbCBjaGlwcyEKKwkgIChvcHRpb24sIGRlZmF1bHRzIHRvIDApCisKK3NwZWNpYWwgLSBhZGRyZXNzIG9mIHRoZSBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyIG9uIHNldmVyYWwgY2FyZHMuCisgICAgICAgICAgKG9wdGlvbiwgZGVmYXVsdHMgdG8gMCkKKworb3B0aW9uICAtIFRoZSB2YWx1ZSB5b3Ugd3JpdGUgaW50byB0aGF0IHJlZ2lzdGVyIChvcHRpb24sIGRlZmF1bHQgaXMgMCkKKworWW91IGNhbiBzcGVjaWZ5IHVwIHRvIGZvdXIgY2hpcHMgKDggY2hhbm5lbHMpLiBJZiB0aGlzIGlzIG5vdCBlbm91Z2gsCitqdXN0IGNoYW5nZQorCisJI2RlZmluZSBNQVhTQ0MgNAorCit0byBhIGhpZ2hlciB2YWx1ZS4KKworRXhhbXBsZSBmb3IgdGhlIEJBWUNPTSBVU0NDOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjaGlwICAgIDEKK2RhdGFfYSAgMHgzMDAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBvcnQgQQorY3RybF9hICAweDMwNCAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2wgcG9ydCBBCitkYXRhX2IgIDB4MzAxICAgICAgICAgICAgICAgICAgICMgZGF0YSBwb3J0IEIKK2N0cmxfYiAgMHgzMDUgICAgICAgICAgICAgICAgICAgIyBjb250cm9sIHBvcnQgQgoraXJxICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAjIElSUSBOby4gNSAoIykKK2JvYXJkICAgQkFZQ09NICAgICAgICAgICAgICAgICAgIyBoYXJkd2FyZSB0eXBlICgqKQorIworIyBTQ0MgY2hpcCAyCisjCitjaGlwICAgIDIKK2RhdGFfYSAgMHgzMDIKK2N0cmxfYSAgMHgzMDYKK2RhdGFfYiAgMHgzMDMKK2N0cmxfYiAgMHgzMDcKK2JvYXJkICAgQkFZQ09NCisKK0FuIGV4YW1wbGUgZm9yIGEgUEEwSFpQIGNhcmQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjaGlwIDEKK2RhdGFfYSAweDE1MworZGF0YV9iIDB4MTUxCitjdHJsX2EgMHgxNTIKK2N0cmxfYiAweDE1MAoraXJxIDkKK3BjbG9jayA0OTE1MjAwCitib2FyZCBQQTBIWlAKK3ZlY3RvciAweDE2OAorZXNjYyBubworIworIworIworY2hpcCAyCitkYXRhX2EgMHgxNTcKK2RhdGFfYiAweDE1NQorY3RybF9hIDB4MTU2CitjdHJsX2IgMHgxNTQKK2lycSA5CitwY2xvY2sgNDkxNTIwMAorYm9hcmQgUEEwSFpQCit2ZWN0b3IgMHgxNjgKK2VzY2Mgbm8KKworQSBEUlNJIHdvdWxkIHNob3VsZCBwcm9iYWJseSB3b3JrIHdpdGggdGhpczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoYWN0dWFsbHk6IHR3byBEUlNJIGNhcmRzLi4uKQorCitjaGlwIDEKK2RhdGFfYSAweDMwMworZGF0YV9iIDB4MzAxCitjdHJsX2EgMHgzMDIKK2N0cmxfYiAweDMwMAoraXJxIDcKK3BjbG9jayA0OTE1MjAwCitib2FyZCBEUlNJCitlc2NjIG5vCisjCisjCisjCitjaGlwIDIKK2RhdGFfYSAweDMxMworZGF0YV9iIDB4MzExCitjdHJsX2EgMHgzMTIKK2N0cmxfYiAweDMxMAoraXJxIDcKK3BjbG9jayA0OTE1MjAwCitib2FyZCBEUlNJCitlc2NjIG5vCisKK05vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSB0aGUgb24tYm9hcmQgYmF1ZHJhdGUgZ2VuZXJhdG9yIG9mZiBEUlNJCitjYXJkcy4gVXNlICJtb2RlIGRwbGwiIGZvciBjbG9jayBzb3VyY2UgKHNlZSBiZWxvdykuCisKK1RoaXMgaXMgYmFzZWQgb24gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgTWlrZSBCaWxvdyAoYW5kIHZlcmlmaWVkCitieSBQYXVsIEhlbGF5KQorCitUaGUgdXRpbGl0eSAiZ2VuY2ZnIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG9ubHkga25vdyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIFBFMUNITCBkcml2ZXIgZm9yIERPUywKK3J1biBnZW5jZmcuIEl0IHdpbGwgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgcG9ydCBhZGRyZXNzZXMgKEkgaG9wZSkuCitJdHMgcGFyYW1ldGVycyBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgb25lcyB5b3UgdXNlIHdpdGgKK3RoZSAiYXR0YWNoIHNjYyIgY29tbWFuZCBpbiBuZXQsIGV4Y2VwdCB0aGF0IHRoZSBzdHJpbmcgImluaXQiIG11c3QgCitub3QgYXBwZWFyLiBFeGFtcGxlOgorCitnZW5jZmcgMiAweDE1MCA0IDIgMCAxIDB4MTY4IDkgNDkxNTIwMCAKKword2lsbCBwcmludCBhIHNrZWxldG9uIHo4NTMwZHJ2LmNvbmYgZm9yIHRoZSBPcHRvU0NDIHRvIHN0ZG91dC4KKworZ2VuY2ZnIDIgMHgzMDAgMiA0IDUgLTQgMCA3IDQ5MTUyMDAgMHgxMAorCitkb2VzIHRoZSBzYW1lIGZvciB0aGUgQkFZQ09NIFVTQ0MgY2FyZC4gSW4gbXkgb3BpbmlvbiBpdCBpcyBtdWNoIGVhc2llcgordG8gZWRpdCBzY2NfY29uZmlnLmguLi4gCisKKworMS4yLjIgY2hhbm5lbCBjb25maWd1cmF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNoYW5uZWwgZGVmaW5pdGlvbiBpcyBkaXZpZGVkIGludG8gdGhyZWUgc3ViIHNlY3Rpb25zIGZvciBlYWNoCitjaGFubmVsOgorCitBbiBleGFtcGxlIGZvciBzY2MwOgorCisjIERFVklDRQorCitkZXZpY2Ugc2NjMAkjIHRoZSBkZXZpY2UgZm9yIHRoZSBmb2xsb3dpbmcgcGFyYW1zCisKKyMgTU9ERU0gLyBCVUZGRVJTCisKK3NwZWVkIDEyMDAJCSMgdGhlIGRlZmF1bHQgYmF1ZHJhdGUKK2Nsb2NrIGRwbGwJCSMgY2xvY2sgc291cmNlOiAKKwkJCSMgCWRwbGwgICAgID0gbm9ybWFsIGhhbGYgZHVwbGV4IG9wZXJhdGlvbgorCQkJIyAJZXh0ZXJuYWwgPSBNT0RFTSBwcm92aWRlcyBvd24gUngvVHggY2xvY2sKKwkJCSMJZGl2aWRlciAgPSB1c2UgZnVsbCBkdXBsZXggZGl2aWRlciBpZgorCQkJIwkJICAgaW5zdGFsbGVkICgxKQorbW9kZSBucnppCQkjIEhETEMgZW5jb2RpbmcgbW9kZQorCQkJIwlucnppID0gMWsyIE1PREVNLCBHM1JVSCA5azYgTU9ERU0KKwkJCSMJbnJ6ICA9IERGOUlDIDlrNiBNT0RFTQorCQkJIworYnVmc2l6ZQkzODQJCSMgc2l6ZSBvZiBidWZmZXJzLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGluY2x1ZGUKKwkJCSMgdGhlIEFYLjI1IGhlYWRlciwgbm90IG9ubHkgdGhlIGRhdGEgZmllbGQhCisJCQkjIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gMzg0KQorCisjIEtJU1MgKExheWVyIDEpCisKK3R4ZGVsYXkgMzYgICAgICAgICAgICAgICMgKHNlZSBjaGFwdGVyIDEuNCkKK3BlcnNpc3QgNjQKK3Nsb3QgICAgOAordGFpbCAgICA4CitmdWxsZHVwIDAKK3dhaXQgICAgMTIKK21pbiAgICAgMworbWF4a2V5ICA3CitpZGxlICAgIDMKK21heGRlZiAgMTIwCitncm91cCAgIDAKK3R4b2ZmICAgb2ZmCitzb2Z0ZGNkIG9uICAgICAgICAgICAgICAgICAgIAorc2xpcCAgICBvZmYKKworVGhlIG9yZGVyIFdJVEhJTiB0aGVzZSBzZWN0aW9ucyBpcyB1bmltcG9ydGFudC4gVGhlIG9yZGVyIE9GIHRoZXNlCitzZWN0aW9ucyBJUyBpbXBvcnRhbnQuIFRoZSBNT0RFTSBwYXJhbWV0ZXJzIGFyZSBzZXQgd2l0aCB0aGUgZmlyc3QKK3JlY29nbml6ZWQgS0lTUyBwYXJhbWV0ZXIuLi4KKworUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2FuIGluaXRpYWxpemUgdGhlIGJvYXJkIG9ubHkgb25jZSBhZnRlciBib290Cisob3IgaW5zbW9kKS4gWW91IGNhbiBjaGFuZ2UgYWxsIHBhcmFtZXRlcnMgYnV0ICJtb2RlIiBhbmQgImNsb2NrIiAKK2xhdGVyIHdpdGggdGhlIFNjY3BhcmFtIHByb2dyYW0gb3IgdGhyb3VnaCBLSVNTLiBKdXN0IHRvIGF2b2lkIAorc2VjdXJpdHkgaG9sZXMuLi4gCisKKygxKSB0aGlzIGRpdmlkZXIgaXMgdXN1YWxseSBtb3VudGVkIG9uIHRoZSBTQ0MtUEJDIChQQTBIWlApIG9yIG5vdAorICAgIHByZXNlbnQgYXQgYWxsIChCYXlDb20pLiBJdCBmZWVkcyBiYWNrIHRoZSBvdXRwdXQgb2YgdGhlIERQTEwgCisgICAgKGRpZ2l0YWwgcGxsKSBhcyB0cmFuc21pdCBjbG9jay4gVXNpbmcgdGhpcyBtb2RlIHdpdGhvdXQgYSBkaXZpZGVyIAorICAgIGluc3RhbGxlZCB3aWxsIG5vcm1hbGx5IHJlc3VsdCBpbiBrZXlpbmcgdGhlIHRyYW5zY2VpdmVyIHVudGlsIAorICAgIG1heGtleSBleHBpcmVzIC0tLSBvZiBjb3Vyc2Ugd2l0aG91dCBzZW5kaW5nIGFueXRoaW5nICh1c2VmdWwpLgorCisyLiBBdHRhY2htZW50IG9mIGEgY2hhbm5lbCBieSB5b3VyIEFYLjI1IHNvZnR3YXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzIuMSBLZXJuZWwgQVguMjUKKz09PT09PT09PT09PT09PT0KKworVG8gc2V0IHVwIGFuIEFYLjI1IGRldmljZSB5b3UgY2FuIHNpbXBseSB0eXBlOgorCisJaWZjb25maWcgc2NjMCA0NC4xMjguMS4xIGh3IGF4MjUgZGwwdGhhLTcKKworVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldHdvcmsgaW50ZXJmYWNlIHdpdGggdGhlIElQIG51bWJlciA0NC4xMjguMjAuMTA3IAorYW5kIHRoZSBjYWxsc2lnbiAiZGwwdGhhIi4gSWYgeW91IGRvIG5vdCBoYXZlIGFueSBJUCBudW1iZXIgKHlldCkgeW91IAorY2FuIHVzZSBhbnkgb2YgdGhlIDQ0LjEyOC4wLjAgbmV0d29yay4gTm90ZSB0aGF0IHlvdSBkbyBub3QgbmVlZCAKK2F4YXR0YWNoLiBUaGUgcHVycG9zZSBvZiBheGF0dGFjaCAobGlrZSBzbGF0dGFjaCkgaXMgdG8gY3JlYXRlIGEgS0lTUyAKK25ldHdvcmsgZGV2aWNlIGxpbmtlZCB0byBhIFRUWS4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIAorYXgyNS11dGlscyBhbmQgdGhlIEFYLjI1LUhPV1RPIHRvIGxlYXJuIGhvdyB0byBzZXQgdGhlIHBhcmFtZXRlcnMgb2YKK3RoZSBrZXJuZWwgQVguMjUuCisKKzIuMiBOT1MsIE5FVCBhbmQgVEZLSVNTCis9PT09PT09PT09PT09PT09PT09PT09PQorCitTaW5jZSB0aGUgVFRZIGRyaXZlciAoYWthIEtJU1MgVE5DIGVtdWxhdGlvbikgaXMgZ29uZSB5b3UgbmVlZAordG8gZW11bGF0ZSB0aGUgb2xkIGJlaGF2aW91ci4gVGhlIGNvc3Qgb2YgdXNpbmcgdGhlc2UgcHJvZ3JhbXMgaXMKK3RoYXQgeW91IHByb2JhYmx5IG5lZWQgdG8gY29tcGlsZSB0aGUga2VybmVsIEFYLjI1LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKK3lvdSBhY3R1YWxseSB1c2UgaXQgb3Igbm90LiBGaXJzdCBzZXR1cCB5b3VyIC9ldGMvYXgyNS9heHBvcnRzLAorZm9yIGV4YW1wbGU6CisKKwk5azYJZGwwdGhhLTkgIDk2MDAgIDI1NSA0IDk2MDAgYmF1ZCBwb3J0IChzY2MzKQorCWF4bGluawlkbDB0aGEtMTUgMzg0MDAgMjU1IDQgTGluayB0byBOT1MKKworTm93ICJpZmNvbmZpZyIgdGhlIHNjYyBkZXZpY2U6CisKKwlpZmNvbmZpZyBzY2MzIDQ0LjEyOC4xLjEgaHcgYXgyNSBkbDB0aGEtOQorCitZb3UgY2FuIG5vdyBheGF0dGFjaCBhIHBzZXVkby1UVFk6CisKKwlheGF0dGFjaCAvZGV2L3B0eXMwIGF4bGluaworCithbmQgc3RhcnQgeW91ciBOT1MgYW5kIGF0dGFjaCAvZGV2L3B0eXMwIHRoZXJlLiBUaGUgcHJvYmxlbSBpcyB0aGF0CitOT1MgaXMgcmVhY2hhYmxlIG9ubHkgdmlhIGRpZ2lwZWF0aW5nIHRocm91Z2ggdGhlIGtlcm5lbCBBWC4yNQorKGRpc2FzdHJvdXMgb24gYSBEQU1BIGNvbnRyb2xsZWQgY2hhbm5lbCkuIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwKK2NvbmZpZ3VyZSAicnhlY2hvIiB0byBlY2hvIHRoZSBpbmNvbWluZyBmcmFtZXMgZnJvbSAiOWs2IiB0byAiYXhsaW5rIgorYW5kIG91dGdvaW5nIGZyYW1lcyBmcm9tICJheGxpbmsiIHRvICI5azYiIGFuZCBzdGFydDoKKworCXJ4ZWNobworCitPciBzaW1wbHkgdXNlICJraXNzYnJpZGdlIiBjb21pbmcgd2l0aCB6ODUzMGRydi11dGlsczoKKworCWlmY29uZmlnIHNjYzMgaHcgYXgyNSBkbDB0aGEtOQorCWtpc3NicmlkZ2Ugc2NjMyAvZGV2L3B0eXMwCisKKworMy4gQWRqdXN0bWVudCBhbmQgRGlzcGxheSBvZiBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMy4xIERpc3BsYXlpbmcgU0NDIFBhcmFtZXRlcnM6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT25jZSBhIFNDQyBjaGFubmVsIGhhcyBiZWVuIGF0dGFjaGVkLCB0aGUgcGFyYW1ldGVyIHNldHRpbmdzIGFuZCAKK3NvbWUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGNhbiBiZSBzaG93biB1c2luZyB0aGUgcGFyYW0gcHJvZ3JhbToKKworZGwxYmtlLXU6fiQgc2Njc3RhdCBzY2MwCisKK1BhcmFtZXRlcnM6CisKK3NwZWVkICAgICAgIDogMTIwMCBiYXVkCit0eGRlbGF5ICAgICA6IDM2CitwZXJzaXN0ICAgICA6IDI1NQorc2xvdHRpbWUgICAgOiAwCit0eHRhaWwgICAgICA6IDgKK2Z1bGxkdXAgICAgIDogMQord2FpdHRpbWUgICAgOiAxMgorbWludGltZSAgICAgOiAzIHNlYworbWF4a2V5dXAgICAgOiA3IHNlYworaWRsZXRpbWUgICAgOiAzIHNlYworbWF4ZGVmZXIgICAgOiAxMjAgc2VjCitncm91cCAgICAgICA6IDB4MDAKK3R4b2ZmICAgICAgIDogb2ZmCitzb2Z0ZGNkICAgICA6IG9uCitTTElQICAgICAgICA6IG9mZgorCitTdGF0dXM6CisKK0hETEMgICAgICAgICAgICAgICAgICBaODUzMCAgICAgICAgICAgSW50ZXJydXB0cyAgICAgICAgIEJ1ZmZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZW50ICAgICAgIDogICAgIDI3MyAgUnhPdmVyIDogICAgIDAgIFJ4SW50cyA6ICAgMTI1MDc0ICBTaXplICAgIDogIDM4NAorUmVjZWl2ZWQgICA6ICAgIDEwOTUgIFR4VW5kZXI6ICAgICAwICBUeEludHMgOiAgICAgNDY4NCAgTm9TcGFjZSA6ICAgIDAKK1J4RXJyb3JzICAgOiAgICAxNTkxICAgICAgICAgICAgICAgICAgRXhJbnRzIDogICAgMTE3NzYKK1R4RXJyb3JzICAgOiAgICAgICAwICAgICAgICAgICAgICAgICAgU3BJbnRzIDogICAgIDE1MDMKK1R4IFN0YXRlICAgOiAgICBpZGxlCisKKworVGhlIHN0YXR1cyBpbmZvIHNob3duIGlzOgorCitTZW50CQktIG51bWJlciBvZiBmcmFtZXMgdHJhbnNtaXR0ZWQKK1JlY2VpdmVkCS0gbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZAorUnhFcnJvcnMJLSBudW1iZXIgb2YgcmVjZWl2ZSBlcnJvcnMgKENSQywgQUJPUlQpCitUeEVycm9ycwktIG51bWJlciBvZiBkaXNjYXJkZWQgVHggZnJhbWVzIChkdWUgdG8gdmFyaW91cyByZWFzb25zKSAKK1R4IFN0YXRlCS0gc3RhdHVzIG9mIHRoZSBUeCBpbnRlcnJ1cHQgaGFuZGxlcjogaWRsZS9idXN5L2FjdGl2ZS90YWlsICgyKQorUnhPdmVyCQktIG51bWJlciBvZiByZWNlaXZlciBvdmVycnVucworVHhVbmRlcgkJLSBudW1iZXIgb2YgdHJhbnNtaXR0ZXIgdW5kZXJydW5zCitSeEludHMJCS0gbnVtYmVyIG9mIHJlY2VpdmVyIGludGVycnVwdHMKK1R4SW50cwkJLSBudW1iZXIgb2YgdHJhbnNtaXR0ZXIgaW50ZXJydXB0cworRXBJbnRzCQktIG51bWJlciBvZiByZWNlaXZlciBzcGVjaWFsIGNvbmRpdGlvbiBpbnRlcnJ1cHRzCitTcEludHMJCS0gbnVtYmVyIG9mIGV4dGVybmFsL3N0YXR1cyBpbnRlcnJ1cHRzCitTaXplCQktIG1heGltdW0gc2l6ZSBvZiBhbiBBWC4yNSBmcmFtZSAoKndpdGgqIEFYLjI1IGhlYWRlcnMhKQorTm9TcGFjZQkJLSBudW1iZXIgb2YgdGltZXMgYSBidWZmZXIgY291bGQgbm90IGdldCBhbGxvY2F0ZWQKKworQW4gb3ZlcnJ1biBpcyBhYm5vcm1hbC4gSWYgbG90cyBvZiB0aGVzZSBvY2N1ciwgdGhlIHByb2R1Y3Qgb2YKK2JhdWRyYXRlIGFuZCBudW1iZXIgb2YgaW50ZXJmYWNlcyBpcyB0b28gaGlnaCBmb3IgdGhlIHByb2Nlc3NpbmcKK3Bvd2VyIG9mIHlvdXIgY29tcHV0ZXIuIE5vU3BhY2UgZXJyb3JzIGFyZSB1bmxpa2VseSB0byBiZSBjYXVzZWQgYnkgdGhlCitkcml2ZXIgb3IgdGhlIGtlcm5lbCBBWC4yNS4KKworCiszLjIgU2V0dGluZyBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09CisKKworVGhlIHNldHRpbmcgb2YgcGFyYW1ldGVycyBvZiB0aGUgZW11bGF0ZWQgS0lTUyBUTkMgaXMgZG9uZSBpbiB0aGUgCitzYW1lIHdheSBpbiB0aGUgU0NDIGRyaXZlci4gWW91IGNhbiBjaGFuZ2UgcGFyYW1ldGVycyBieSB1c2luZwordGhlIGtpc3NwYXJtcyBwcm9ncmFtIGZyb20gdGhlIGF4MjUtdXRpbHMgcGFja2FnZSBvciB1c2UgdGhlIHByb2dyYW0gCisic2NjcGFyYW0iOgorCisgICAgIHNjY3BhcmFtIDxkZXZpY2U+IDxwYXJhbW5hbWU+IDxkZWNpbWFsLXxoZXhhZGVjaW1hbCB2YWx1ZT4KKworWW91IGNhbiBjaGFuZ2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitwYXJhbQkgICAgOiB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzcGVlZCAgICAgICA6IDEyMDAKK3R4ZGVsYXkgICAgIDogMzYKK3BlcnNpc3QgICAgIDogMjU1CitzbG90dGltZSAgICA6IDAKK3R4dGFpbCAgICAgIDogOAorZnVsbGR1cCAgICAgOiAxCit3YWl0dGltZSAgICA6IDEyCittaW50aW1lICAgICA6IDMKK21heGtleXVwICAgIDogNworaWRsZXRpbWUgICAgOiAzCittYXhkZWZlciAgICA6IDEyMAorZ3JvdXAgICAgICAgOiAweDAwCit0eG9mZiAgICAgICA6IG9mZgorc29mdGRjZCAgICAgOiBvbgorU0xJUCAgICAgICAgOiBvZmYKKworCitUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKworc3BlZWQ6CisgICAgIFRoZSBiYXVkcmF0ZSBvbiB0aGlzIGNoYW5uZWwgaW4gYml0cy9zZWMKKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzMgc3BlZWQgOTYwMAorCit0eGRlbGF5OgorICAgICBUaGUgZGVsYXkgKGluIHVuaXRzIG9mIDEwIG1zKSBhZnRlciBrZXlpbmcgb2YgdGhlIAorICAgICB0cmFuc21pdHRlciwgdW50aWwgdGhlIGZpcnN0IGJ5dGUgaXMgc2VudC4gVGhpcyBpcyB1c3VhbGx5IAorICAgICBjYWxsZWQgIlRYREVMQVkiIGluIGEgVE5DLiAgV2hlbiAwIGlzIHNwZWNpZmllZCwgdGhlIGRyaXZlciAKKyAgICAgd2lsbCBqdXN0IHdhaXQgdW50aWwgdGhlIENUUyBzaWduYWwgaXMgYXNzZXJ0ZWQuIFRoaXMgCisgICAgIGFzc3VtZXMgdGhlIHByZXNlbmNlIG9mIGEgdGltZXIgb3Igb3RoZXIgY2lyY3VpdHJ5IGluIHRoZSAKKyAgICAgTU9ERU0gYW5kL29yIHRyYW5zbWl0dGVyLCB0aGF0IGFzc2VydHMgQ1RTIHdoZW4gdGhlIAorICAgICB0cmFuc21pdHRlciBpcyByZWFkeSBmb3IgZGF0YS4KKyAgICAgQSBub3JtYWwgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgMzAtMzYuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIHR4ZCAyMAorCitwZXJzaXN0OgorICAgICBUaGlzIGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIAorICAgICB3aGVuIHRoZSBjaGFubmVsIGlzIGZvdW5kIHRvIGJlIGZyZWUuICBJdCBpcyBhIHZhbHVlIGZyb20gMCAKKyAgICAgdG8gMjU1LCBhbmQgdGhlIHByb2JhYmlsaXR5IGlzICh2YWx1ZSsxKS8yNTYuICBUaGUgdmFsdWUgCisgICAgIHNob3VsZCBiZSBzb21ld2hlcmUgbmVhciA1MC02MCwgYW5kIHNob3VsZCBiZSBsb3dlcmVkIHdoZW4gCisgICAgIHRoZSBjaGFubmVsIGlzIHVzZWQgbW9yZSBoZWF2aWx5LgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMiBwZXJzaXN0IDIwCisKK3Nsb3R0aW1lOgorICAgICBUaGlzIGlzIHRoZSB0aW1lIGJldHdlZW4gc2FtcGxlcyBvZiB0aGUgY2hhbm5lbC4gSXQgaXMgCisgICAgIGV4cHJlc3NlZCBpbiB1bml0cyBvZiAxMCBtcy4gIEFib3V0IDIwMC0zMDAgbXMgKHZhbHVlIDIwLTMwKSAKKyAgICAgc2VlbXMgdG8gYmUgYSBnb29kIHZhbHVlLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBzbG90IDIwCisKK3RhaWw6CisgICAgIFRoZSB0aW1lIHRoZSB0cmFuc21pdHRlciB3aWxsIHJlbWFpbiBrZXllZCBhZnRlciB0aGUgbGFzdCAKKyAgICAgYnl0ZSBvZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byB0aGUgU0NDLiBUaGlzIGlzIAorICAgICBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ1JDIGFuZCBhIGZsYWcgc3RpbGwgaGF2ZSB0byBsZWF2ZSB0aGUgCisgICAgIFNDQyBiZWZvcmUgdGhlIHRyYW5zbWl0dGVyIGlzIGtleWVkIGRvd24uIFRoZSB2YWx1ZSBkZXBlbmRzIAorICAgICBvbiB0aGUgYmF1ZHJhdGUgc2VsZWN0ZWQuICBBIGZldyBjaGFyYWN0ZXIgdGltZXMgc2hvdWxkIGJlIAorICAgICBzdWZmaWNpZW50LCBlLmcuIDQwbXMgYXQgMTIwMCBiYXVkLiAodmFsdWUgNCkKKyAgICAgVGhlIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIGluIDEwIG1zIHVuaXRzLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMiA0CisKK2Z1bGw6CisgICAgIFRoZSBmdWxsLWR1cGxleCBtb2RlIHN3aXRjaC4gVGhpcyBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgCisgICAgIHZhbHVlczoKKworICAgICAwOiAgIFRoZSBpbnRlcmZhY2Ugd2lsbCBvcGVyYXRlIGluIENTTUEgbW9kZSAodGhlIG5vcm1hbCAKKyAgICAgICAgICBoYWxmLWR1cGxleCBwYWNrZXQgcmFkaW8gb3BlcmF0aW9uKQorICAgICAxOiAgIEZ1bGxkdXBsZXggbW9kZSwgaS5lLiB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBrZXllZCBhdCAKKyAgICAgICAgICBhbnkgdGltZSwgd2l0aG91dCBjaGVja2luZyB0aGUgcmVjZWl2ZWQgY2Fycmllci4gIEl0IAorICAgICAgICAgIHdpbGwgYmUgdW5rZXllZCB3aGVuIHRoZXJlIGFyZSBubyBwYWNrZXRzIHRvIGJlIHNlbnQuCisgICAgIDI6ICAgTGlrZSAxLCBidXQgdGhlIHRyYW5zbWl0dGVyIHdpbGwgcmVtYWluIGtleWVkLCBhbHNvIAorICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIHBhY2tldHMgdG8gYmUgc2VudC4gIEZsYWdzIHdpbGwgYmUgCisgICAgICAgICAgc2VudCBpbiB0aGF0IGNhc2UsIHVudGlsIGEgdGltZW91dCAocGFyYW1ldGVyIDEwKSAKKyAgICAgICAgICBvY2N1cnMuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIGZ1bGxkdXAgb2ZmCisKK3dhaXQ6CisgICAgIFRoZSBpbml0aWFsIHdhaXR0aW1lIGJlZm9yZSBhbnkgdHJhbnNtaXQgYXR0ZW1wdCwgYWZ0ZXIgdGhlIAorICAgICBmcmFtZSBoYXMgYmVlbiBxdWV1ZSBmb3IgdHJhbnNtaXQuICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgCisgICAgIHRoZSBmaXJzdCBzbG90IGluIENTTUEgbW9kZS4gIEluIGZ1bGwgZHVwbGV4IG1vZGVzIGl0IGlzCisgICAgIHNldCB0byAwIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLgorICAgICBUaGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgaW4gMTAgbXMgdW5pdHMuIAorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMSB3YWl0IDQKKworbWF4a2V5OgorICAgICBUaGUgbWF4aW1hbCB0aW1lIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIHRvIHNlbmQgCisgICAgIHBhY2tldHMsIGluIHNlY29uZHMuICBUaGlzIGNhbiBiZSB1c2VmdWwgb24gYnVzeSBDU01BIAorICAgICBjaGFubmVscywgdG8gYXZvaWQgImdldHRpbmcgYSBiYWQgcmVwdXRhdGlvbiIgd2hlbiB5b3UgYXJlIAorICAgICBnZW5lcmF0aW5nIGEgbG90IG9mIHRyYWZmaWMuICBBZnRlciB0aGUgc3BlY2lmaWVkIHRpbWUgaGFzIAorICAgICBlbGFwc2VkLCBubyBuZXcgZnJhbWUgd2lsbCBiZSBzdGFydGVkLiBJbnN0ZWFkLCB0aGUgdHJhbnMtCisgICAgIG1pdHRlciB3aWxsIGJlIHN3aXRjaGVkIG9mZiBmb3IgYSBzcGVjaWZpZWQgdGltZSAocGFyYW1ldGVyIAorICAgICBtaW4pLCBhbmQgdGhlbiB0aGUgc2VsZWN0ZWQgYWxnb3JpdGhtIGZvciBrZXl1cCB3aWxsIGJlIAorICAgICBzdGFydGVkIGFnYWluLgorICAgICBUaGUgdmFsdWUgMCBhcyB3ZWxsIGFzICJvZmYiIHdpbGwgZGlzYWJsZSB0aGlzIGZlYXR1cmUsIAorICAgICBhbmQgYWxsb3cgaW5maW5pdGUgdHJhbnNtaXNzaW9uIHRpbWUuIAorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBtYXhrIDIwCisKK21pbjoKKyAgICAgVGhpcyBpcyB0aGUgdGltZSB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBzd2l0Y2hlZCBvZmYgd2hlbiAKKyAgICAgdGhlIG1heGltdW0gdHJhbnNtaXNzaW9uIHRpbWUgaXMgZXhjZWVkZWQuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MzIG1pbiAxMAorCitpZGxlCisgICAgIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbWF4aW11bSBpZGxlIHRpbWUgaW4gZnVsbCBkdXBsZXggCisgICAgIDIgbW9kZSwgaW4gc2Vjb25kcy4gIFdoZW4gbm8gZnJhbWVzIGhhdmUgYmVlbiBzZW50IGZvciB0aGlzIAorICAgICB0aW1lLCB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBrZXllZCBkb3duLiAgQSB2YWx1ZSBvZiAwIGlzCisgICAgIGhhcyBzYW1lIHJlc3VsdCBhcyB0aGUgZnVsbGR1cGxleCBtb2RlIDEuIFRoaXMgcGFyYW1ldGVyCisgICAgIGNhbiBiZSBkaXNhYmxlZC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzIgaWRsZSBvZmYJIyB0cmFuc21pdCBmb3JldmVyCisKK21heGRlZmVyCisgICAgIFRoaXMgaXMgdGhlIG1heGltdW0gdGltZSAoaW4gc2Vjb25kcykgdG8gd2FpdCBmb3IgYSBmcmVlIGNoYW5uZWwKKyAgICAgdG8gc2VuZC4gV2hlbiB0aGlzIHRpbWVyIGV4cGlyZXMgdGhlIHRyYW5zbWl0dGVyIHdpbGwgYmUga2V5ZWQgCisgICAgIElNTUVESUFURUxZLiBJZiB5b3UgbG92ZSB0byBnZXQgdHJvdWJsZSB3aXRoIG90aGVyIHVzZXJzIHlvdQorICAgICBzaG91bGQgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxvdyB2YWx1ZSA7LSkKKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgbWF4ZGVmZXIgMjQwCSMgMiBtaW51dGVzCisKKwordHhvZmY6CisgICAgIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSAwLCB0aGUgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMKKyAgICAgaXMgZW5hYmxlLiBPdGhlcndpc2UgaXQgaXMgZGlzYWJsZWQuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MyIHR4b2ZmIG9uCisKK2dyb3VwOgorICAgICBJdCBpcyBwb3NzaWJsZSB0byBidWlsZCBzcGVjaWFsIHJhZGlvIGVxdWlwbWVudCB0byB1c2UgbW9yZSB0aGFuIAorICAgICBvbmUgZnJlcXVlbmN5IG9uIHRoZSBzYW1lIGJhbmQsIGUuZy4gdXNpbmcgc2V2ZXJhbCByZWNlaXZlcnMgYW5kIAorICAgICBvbmx5IG9uZSB0cmFuc21pdHRlciB0aGF0IGNhbiBiZSBzd2l0Y2hlZCBiZXR3ZWVuIGZyZXF1ZW5jaWVzLgorICAgICBBbHNvLCB5b3UgY2FuIGNvbm5lY3Qgc2V2ZXJhbCByYWRpb3MgdGhhdCBhcmUgYWN0aXZlIG9uIHRoZSBzYW1lIAorICAgICBiYW5kLiAgSW4gdGhlc2UgY2FzZXMsIGl0IGlzIG5vdCBwb3NzaWJsZSwgb3Igbm90IGEgZ29vZCBpZGVhLCB0byAKKyAgICAgdHJhbnNtaXQgb24gbW9yZSB0aGFuIG9uZSBmcmVxdWVuY3kuICBUaGUgU0NDIGRyaXZlciBwcm92aWRlcyBhIAorICAgICBtZXRob2QgdG8gbG9jayB0cmFuc21pdHRlcnMgb24gZGlmZmVyZW50IGludGVyZmFjZXMsIHVzaW5nIHRoZSAKKyAgICAgInBhcmFtIDxpbnRlcmZhY2U+IGdyb3VwIDx4PiIgY29tbWFuZC4gIFRoaXMgd2lsbCBvbmx5IHdvcmsgd2hlbiAKKyAgICAgeW91IGFyZSB1c2luZyBDU01BIG1vZGUgKHBhcmFtZXRlciBmdWxsID0gMCkuCisgICAgIFRoZSBudW1iZXIgPHg+IG11c3QgYmUgMCBpZiB5b3Ugd2FudCBubyBncm91cCByZXN0cmljdGlvbnMsIGFuZCAKKyAgICAgY2FuIGJlIGNvbXB1dGVkIGFzIGZvbGxvd3MgdG8gY3JlYXRlIHJlc3RyaWN0ZWQgZ3JvdXBzOgorICAgICA8eD4gaXMgdGhlIHN1bSBvZiBzb21lIE9DVEFMIG51bWJlcnM6CisKKyAgICAgMjAwICBUaGlzIHRyYW5zbWl0dGVyIHdpbGwgb25seSBiZSBrZXllZCB3aGVuIGFsbCBvdGhlciAKKyAgICAgICAgICB0cmFuc21pdHRlcnMgaW4gdGhlIGdyb3VwIGFyZSBvZmYuCisgICAgIDEwMCAgVGhpcyB0cmFuc21pdHRlciB3aWxsIG9ubHkgYmUga2V5ZWQgd2hlbiB0aGUgY2FycmllciAKKyAgICAgICAgICBkZXRlY3Qgb2YgYWxsIG90aGVyIGludGVyZmFjZXMgaW4gdGhlIGdyb3VwIGlzIG9mZi4KKyAgICAgMHh4ICBBIGJ5dGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgZGlmZmVyZW50IGdyb3Vwcy4gIAorICAgICAgICAgIEludGVyZmFjZXMgYXJlIGluIHRoZSBzYW1lIGdyb3VwLCB3aGVuIHRoZSBsb2dpY2FsIEFORCAKKyAgICAgICAgICBiZXR3ZWVuIHRoZWlyIHh4IHZhbHVlcyBpcyBub256ZXJvLgorCisgICAgIEV4YW1wbGVzOgorICAgICBXaGVuIDIgaW50ZXJmYWNlcyB1c2UgZ3JvdXAgMjAxLCB0aGVpciB0cmFuc21pdHRlcnMgd2lsbCBuZXZlciBiZSAKKyAgICAga2V5ZWQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgV2hlbiAyIGludGVyZmFjZXMgdXNlIGdyb3VwIDEwMSwgdGhlIHRyYW5zbWl0dGVycyB3aWxsIG9ubHkga2V5IAorICAgICB3aGVuIGJvdGggY2hhbm5lbHMgYXJlIGNsZWFyIGF0IHRoZSBzYW1lIHRpbWUuICBXaGVuIGdyb3VwIDMwMSwgCisgICAgIHRoZSB0cmFuc21pdHRlcnMgd2lsbCBub3QgYmUga2V5ZWQgYXQgdGhlIHNhbWUgdGltZS4KKworICAgICBEb24ndCBmb3JnZXQgdG8gY29udmVydCB0aGUgb2N0YWwgbnVtYmVycyBpbnRvIGRlY2ltYWwgYmVmb3JlCisgICAgIHlvdSBzZXQgdGhlIHBhcmFtZXRlci4KKworICAgICBFeGFtcGxlOiAodG8gYmUgd3JpdHRlbikKKworc29mdGRjZDoKKyAgICAgdXNlIGEgc29mdHdhcmUgZGNkIGluc3RlYWQgb2YgdGhlIHJlYWwgb25lLi4uIFVzZWZ1bCBmb3IgYSB2ZXJ5CisgICAgIHNsb3cgc3F1ZWxjaC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgc29mdCBvbgorCisKKzQuIFByb2JsZW1zIAorPT09PT09PT09PT0KKworSWYgeW91IGhhdmUgdHgtcHJvYmxlbXMgd2l0aCB5b3VyIEJheUNvbSBVU0NDIGNhcmQgcGxlYXNlIGNoZWNrCit0aGUgbWFudWZhY3R1cmVyIG9mIHRoZSA4NTMwLiBTR1MgY2hpcHMgaGF2ZSBhIHNsaWdodGx5CitkaWZmZXJlbnQgdGltaW5nLiBUcnkgWmlsb2cuLi4gIEEgc29sdXRpb24gaXMgdG8gd3JpdGUgdG8gcmVnaXN0ZXIgOCAKK2luc3RlYWQgdG8gdGhlIGRhdGEgcG9ydCwgYnV0IHRoaXMgd29uJ3Qgd29yayB3aXRoIHRoZSBFU0NDIGNoaXBzLiAKKypTSUdIISoKKworQSB2ZXJ5IGNvbW1vbiBwcm9ibGVtIGlzIHRoYXQgdGhlIFBUVCBsb2NrcyB1bnRpbCB0aGUgbWF4a2V5dXAgdGltZXIKK2V4cGlyZXMsIGFsdGhvdWdoIGludGVycnVwdHMgYW5kIGNsb2NrIHNvdXJjZSBhcmUgY29ycmVjdC4gSW4gbW9zdAorY2FzZXMgY29tcGlsaW5nIHRoZSBkcml2ZXIgd2l0aCBDT05GSUdfU0NDX0RFTEFZIChzZXQgd2l0aAorbWFrZSBjb25maWcpIHNvbHZlcyB0aGUgcHJvYmxlbXMuIEZvciBtb3JlIGhpbnRzIHJlYWQgdGhlIChwc2V1ZG8pIEZBUSAKK2FuZCB0aGUgZG9jdW1lbnRhdGlvbiBjb21pbmcgd2l0aCB6ODUzMGRydi11dGlscy4KKworSSBnb3QgcmVwb3J0cyB0aGF0IHRoZSBkcml2ZXIgaGFzIHByb2JsZW1zIG9uIHNvbWUgMzg2LWJhc2VkIHN5c3RlbXMuCisoaS5lLiBBbXN0cmFkKSBUaG9zZSBzeXN0ZW1zIGhhdmUgYSBib2d1cyBBVCBidXMgdGltaW5nIHdoaWNoIHdpbGwKK2xlYWQgdG8gZGVsYXllZCBhbnN3ZXJzIG9uIGludGVycnVwdHMuIFlvdSBjYW4gcmVjb2duaXplIHRoZXNlCitwcm9ibGVtcyBieSBsb29raW5nIGF0IHRoZSBvdXRwdXQgb2YgU2Njc3RhdCBmb3IgdGhlIHN1c3BlY3RlZAorcG9ydC4gSWYgaXQgc2hvd3MgdW5kZXItIGFuZCBvdmVycnVucyB5b3Ugb3duIHN1Y2ggYSBzeXN0ZW0uCisKK0RlbGF5ZWQgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBkYXRhOiBUaGlzIGRlcGVuZHMgb24KKworLSB0aGUga2VybmVsIHZlcnNpb24KKworLSBrZXJuZWwgcHJvZmlsaW5nIGNvbXBpbGVkIG9yIG5vdAorCistIGEgaGlnaCBpbnRlcnJ1cHQgbG9hZAorCistIGEgaGlnaCBsb2FkIG9mIHRoZSBtYWNoaW5lIC0tLSBydW5uaW5nIFgsIFhtb3JwaCwgWFYgYW5kIFBvdnJheSwKKyAgd2hpbGUgY29tcGlsaW5nIHRoZSBrZXJuZWwuLi4gaG1tIC4uLiBldmVuIHdpdGggMzIgTUIgUkFNIC4uLiAgOy0pCisgIE9yIHJ1bm5pbmcgYSBuYW1lZCBmb3IgdGhlIHdob2xlIC5hbXByLm9yZyBkb21haW4gb24gYW4gOCBNQgorICBib3guLi4KKworLSB1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHJ4ZWNobyBvciBraXNzYnJpZGdlLgorCitLZXJuZWwgcGFuaWNzOiBwbGVhc2UgcmVhZCAvbGludXgvUkVBRE1FIGFuZCBmaW5kIG91dCBpZiBpdAorcmVhbGx5IG9jY3VycmVkIHdpdGhpbiB0aGUgc2NjIGRyaXZlci4KKworSWYgeW91IGNhbm5vdCBzb2x2ZSBhIHByb2JsZW0sIHNlbmQgbWUKKworLSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLAorLSBpbmZvcm1hdGlvbiBvbiB5b3VyIGhhcmR3YXJlIChjb21wdXRlciBzeXN0ZW0sIHNjYyBib2FyZCwgbW9kZW0pCistIHlvdXIga2VybmVsIHZlcnNpb24KKy0gdGhlIG91dHB1dCBvZiBjYXQgL3Byb2MvbmV0L3o4NTMwCisKKzQuIFRob3IgUkxDMTAwCis9PT09PT09PT09PT09PQorCitNeXN0ZXJpb3VzbHkgdGhpcyBib2FyZCBzZWVtcyBub3QgdG8gd29yayB3aXRoIHRoZSBkcml2ZXIuIEFueW9uZQorZ290IGl0IHVwLWFuZC1ydW5uaW5nPworCisKK01hbnkgdGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzIGFuZCBBbGFuIENveCBmb3IgaW5jbHVkaW5nIHRoZSBkcml2ZXIKK2luIHRoZSBMaW51eCBzdGFuZGFyZCBkaXN0cmlidXRpb24gYW5kIHRoZWlyIHN1cHBvcnQuCisKK0pvZXJnIFJldXRlcglhbXByLW5ldDogZGwxYmtlQGRiMHByYS5hbXByLm9yZworCQlBWC0yNSAgIDogREwxQktFIEAgREIwQUJILiNCQVkuREVVLkVVCisJCUludGVybmV0OiBqcmV1dGVyQHlhaW5hLmRlCisJCVdXVyAgICAgOiBodHRwOi8veWFpbmEuZGUvanJldXRlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dCBiL0RvY3VtZW50YXRpb24vbmZzcm9vdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3ZDRhZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmZzcm9vdC50eHQKQEAgLTAsMCArMSwyMTAgQEAKK01vdW50aW5nIHRoZSByb290IGZpbGVzeXN0ZW0gdmlhIE5GUyAobmZzcm9vdCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dyaXR0ZW4gMTk5NiBieSBHZXJvIEt1aGxtYW5uIDxnZXJvQGdrbWluaXguaGFuLmRlPgorVXBkYXRlZCAxOTk3IGJ5IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorCisKKworSWYgeW91IHdhbnQgdG8gdXNlIGEgZGlza2xlc3Mgc3lzdGVtLCBhcyBhbiBYLXRlcm1pbmFsIG9yIHByaW50ZXIKK3NlcnZlciBmb3IgZXhhbXBsZSwgeW91IGhhdmUgdG8gcHV0IHlvdXIgcm9vdCBmaWxlc3lzdGVtIG9udG8gYQorbm9uLWRpc2sgZGV2aWNlLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSByYW1kaXNrIChzZWUgaW5pdHJkLnR4dCBpbgordGhpcyBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pIG9yIGEgZmlsZXN5c3RlbSBtb3VudGVkCit2aWEgTkZTLiBUaGUgZm9sbG93aW5nIHRleHQgZGVzY3JpYmVzIG9uIGhvdyB0byB1c2UgTkZTIGZvciB0aGUKK3Jvb3QgZmlsZXN5c3RlbS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgdGV4dCAnY2xpZW50JyBtZWFucyB0aGUKK2Rpc2tsZXNzIHN5c3RlbSwgYW5kICdzZXJ2ZXInIG1lYW5zIHRoZSBORlMgc2VydmVyLgorCisKKworCisxLikgRW5hYmxpbmcgbmZzcm9vdCBjYXBhYmlsaXRpZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byB1c2UgbmZzcm9vdCB5b3UgaGF2ZSB0byBzZWxlY3Qgc3VwcG9ydCBmb3IgTkZTIGR1cmluZwora2VybmVsIGNvbmZpZ3VyYXRpb24uIE5vdGUgdGhhdCBORlMgY2Fubm90IGJlIGxvYWRlZCBhcyBhIG1vZHVsZQoraW4gdGhpcyBjYXNlLiBUaGUgY29uZmlndXJhdGlvbiBzY3JpcHQgd2lsbCB0aGVuIGFzayB5b3Ugd2hldGhlcgoreW91IHdhbnQgdG8gdXNlIG5mc3Jvb3QsIGFuZCBpZiB5ZXMgd2hhdCBraW5kIG9mIGF1dG8gY29uZmlndXJhdGlvbgorc3lzdGVtIHlvdSB3YW50IHRvIHVzZS4gU2VsZWN0aW5nIGJvdGggQk9PVFAgYW5kIFJBUlAgaXMgc2FmZS4KKworCisKKworMi4pIEtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdGhlIGtlcm5lbCBoYXMgYmVlbiBsb2FkZWQgYnkgYSBib290IGxvYWRlciAoZWl0aGVyIGJ5IGxvYWRsaW4sCitMSUxPIG9yIGEgbmV0d29yayBib290IHByb2dyYW0pIGl0IGhhcyB0byBiZSB0b2xkIHdoYXQgcm9vdCBmcyBkZXZpY2UKK3RvIHVzZSwgYW5kIHdoZXJlIHRvIGZpbmQgdGhlIHNlcnZlciBhbmQgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeQorb24gdGhlIHNlcnZlciB0byBtb3VudCBhcyByb290LiBUaGlzIGNhbiBiZSBlc3RhYmxpc2hlZCBieSBhIGNvdXBsZQorb2Yga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzOgorCisKK3Jvb3Q9L2Rldi9uZnMKKworICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhlIHBzZXVkby1ORlMtZGV2aWNlLiBOb3RlIHRoYXQgaXQncyBub3QgYQorICByZWFsIGRldmljZSBidXQganVzdCBhIHN5bm9ueW0gdG8gdGVsbCB0aGUga2VybmVsIHRvIHVzZSBORlMgaW5zdGVhZCBvZgorICBhIHJlYWwgZGV2aWNlLgorCisKK25mc3Jvb3Q9WzxzZXJ2ZXItaXA+Ol08cm9vdC1kaXI+Wyw8bmZzLW9wdGlvbnM+XQorCisgIElmIHRoZSBgbmZzcm9vdCcgcGFyYW1ldGVyIGlzIE5PVCBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgZGVmYXVsdAorICAiL3RmdHBib290LyVzIiB3aWxsIGJlIHVzZWQuCisKKyAgPHNlcnZlci1pcD4JU3BlY2lmaWVzIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyLiBJZiB0aGlzIGZpZWxkCisJCWlzIG5vdCBnaXZlbiwgdGhlIGRlZmF1bHQgYWRkcmVzcyBhcyBkZXRlcm1pbmVkIGJ5IHRoZQorCQlgaXAnIHZhcmlhYmxlIChzZWUgYmVsb3cpIGlzIHVzZWQuIE9uZSB1c2Ugb2YgdGhpcworCQlwYXJhbWV0ZXIgaXMgZm9yIGV4YW1wbGUgdG8gYWxsb3cgdXNpbmcgZGlmZmVyZW50IHNlcnZlcnMKKwkJZm9yIFJBUlAgYW5kIE5GUy4gVXN1YWxseSB5b3UgY2FuIGxlYXZlIHRoaXMgYmxhbmsuCisKKyAgPHJvb3QtZGlyPglOYW1lIG9mIHRoZSBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlciB0byBtb3VudCBhcyByb290LiBJZgorCQl0aGVyZSBpcyBhICIlcyIgdG9rZW4gaW4gdGhlIHN0cmluZywgdGhlIHRva2VuIHdpbGwgYmUKKwkJcmVwbGFjZWQgYnkgdGhlIEFTQ0lJLXJlcHJlc2VudGF0aW9uIG9mIHRoZSBjbGllbnQncyBJUAorCQlhZGRyZXNzLgorCisgIDxuZnMtb3B0aW9ucz4JU3RhbmRhcmQgTkZTIG9wdGlvbnMuIEFsbCBvcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLgorCQlJZiB0aGUgb3B0aW9ucyBmaWVsZCBpcyBub3QgZ2l2ZW4sIHRoZSBmb2xsb3dpbmcgZGVmYXVsdHMKKwkJd2lsbCBiZSB1c2VkOgorCQkJcG9ydAkJPSBhcyBnaXZlbiBieSBzZXJ2ZXIgcG9ydG1hcCBkYWVtb24KKwkJCXJzaXplCQk9IDEwMjQKKwkJCXdzaXplCQk9IDEwMjQKKwkJCXRpbWVvCQk9IDcKKwkJCXJldHJhbnMJCT0gMworCQkJYWNyZWdtaW4JPSAzCisJCQlhY3JlZ21heAk9IDYwCisJCQlhY2Rpcm1pbgk9IDMwCisJCQlhY2Rpcm1heAk9IDYwCisJCQlmbGFncwkJPSBoYXJkLCBub2ludHIsIG5vcG9zaXgsIGN0bywgYWMKKworCitpcD08Y2xpZW50LWlwPjo8c2VydmVyLWlwPjo8Z3ctaXA+OjxuZXRtYXNrPjo8aG9zdG5hbWU+OjxkZXZpY2U+OjxhdXRvY29uZj4KKworICBUaGlzIHBhcmFtZXRlciB0ZWxscyB0aGUga2VybmVsIGhvdyB0byBjb25maWd1cmUgSVAgYWRkcmVzc2VzIG9mIGRldmljZXMKKyAgYW5kIGFsc28gaG93IHRvIHNldCB1cCB0aGUgSVAgcm91dGluZyB0YWJsZS4gSXQgd2FzIG9yaWdpbmFsbHkgY2FsbGVkIGBuZnNhZGRycycsCisgIGJ1dCBub3cgdGhlIGJvb3QtdGltZSBJUCBjb25maWd1cmF0aW9uIHdvcmtzIGluZGVwZW5kZW50bHkgb2YgTkZTLCBzbyBpdAorICB3YXMgcmVuYW1lZCB0byBgaXAnIGFuZCB0aGUgb2xkIG5hbWUgcmVtYWluZWQgYXMgYW4gYWxpYXMgZm9yIGNvbXBhdGliaWxpdHkKKyAgcmVhc29ucy4KKworICBJZiB0aGlzIHBhcmFtZXRlciBpcyBtaXNzaW5nIGZyb20gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUsIGFsbCBmaWVsZHMgYXJlCisgIGFzc3VtZWQgdG8gYmUgZW1wdHksIGFuZCB0aGUgZGVmYXVsdHMgbWVudGlvbmVkIGJlbG93IGFwcGx5LiBJbiBnZW5lcmFsCisgIHRoaXMgbWVhbnMgdGhhdCB0aGUga2VybmVsIHRyaWVzIHRvIGNvbmZpZ3VyZSBldmVyeXRoaW5nIHVzaW5nIGJvdGgKKyAgUkFSUCBhbmQgQk9PVFAgKGRlcGVuZGluZyBvbiB3aGF0IGhhcyBiZWVuIGVuYWJsZWQgZHVyaW5nIGtlcm5lbCBjb25maS0KKyAgZ3VyYXRpb24sIGFuZCBpZiBib3RoIHdoYXQgcHJvdG9jb2wgYW5zd2VyIGdvdCBpbiBmaXJzdCkuCisKKyAgPGNsaWVudC1pcD4JSVAgYWRkcmVzcyBvZiB0aGUgY2xpZW50LiBJZiBlbXB0eSwgdGhlIGFkZHJlc3Mgd2lsbCBlaXRoZXIKKwkJYmUgZGV0ZXJtaW5lZCBieSBSQVJQIG9yIEJPT1RQLiBXaGF0IHByb3RvY29sIGlzIHVzZWQgZGUtCisJCXBlbmRzIG9uIHdoYXQgaGFzIGJlZW4gZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24KKwkJYW5kIG9uIHRoZSA8YXV0b2NvbmY+IHBhcmFtZXRlci4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90CisJCWVtcHR5LCBuZWl0aGVyIFJBUlAgbm9yIEJPT1RQIHdpbGwgYmUgdXNlZC4KKworICA8c2VydmVyLWlwPglJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyLiBJZiBSQVJQIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisJCXRoZSBjbGllbnQgYWRkcmVzcyBhbmQgdGhpcyBwYXJhbWV0ZXIgaXMgTk9UIGVtcHR5IG9ubHkKKwkJcmVwbGllcyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VydmVyIGFyZSBhY2NlcHRlZC4gVG8gdXNlCisJCWRpZmZlcmVudCBSQVJQIGFuZCBORlMgc2VydmVyLCBzcGVjaWZ5IHlvdXIgUkFSUCBzZXJ2ZXIKKwkJaGVyZSAob3IgbGVhdmUgaXQgYmxhbmspLCBhbmQgc3BlY2lmeSB5b3VyIE5GUyBzZXJ2ZXIgaW4KKwkJdGhlIGBuZnNyb290JyBwYXJhbWV0ZXIgKHNlZSBhYm92ZSkuIElmIHRoaXMgZW50cnkgaXMgYmxhbmsKKwkJdGhlIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciBpcyB1c2VkIHdoaWNoIGFuc3dlcmVkIHRoZSBSQVJQCisJCW9yIEJPT1RQIHJlcXVlc3QuCisKKyAgPGd3LWlwPglJUCBhZGRyZXNzIG9mIGEgZ2F0ZXdheSBpZiB0aGUgc2VydmVyIGlzIG9uIGEgZGlmZmVyZW50CisJCXN1Ym5ldC4gSWYgdGhpcyBlbnRyeSBpcyBlbXB0eSBubyBnYXRld2F5IGlzIHVzZWQgYW5kIHRoZQorCQlzZXJ2ZXIgaXMgYXNzdW1lZCB0byBiZSBvbiB0aGUgbG9jYWwgbmV0d29yaywgdW5sZXNzIGEKKwkJdmFsdWUgaGFzIGJlZW4gcmVjZWl2ZWQgYnkgQk9PVFAuCisKKyAgPG5ldG1hc2s+CU5ldG1hc2sgZm9yIGxvY2FsIG5ldHdvcmsgaW50ZXJmYWNlLiBJZiB0aGlzIGlzIGVtcHR5LAorCQl0aGUgbmV0bWFzayBpcyBkZXJpdmVkIGZyb20gdGhlIGNsaWVudCBJUCBhZGRyZXNzIGFzc3VtaW5nCisJCWNsYXNzZnVsIGFkZHJlc3NpbmcsIHVubGVzcyBvdmVycmlkZGVuIGluIEJPT1RQIHJlcGx5LgorCisgIDxob3N0bmFtZT4JTmFtZSBvZiB0aGUgY2xpZW50LiBJZiBlbXB0eSwgdGhlIGNsaWVudCBJUCBhZGRyZXNzIGlzCisJCXVzZWQgaW4gQVNDSUkgbm90YXRpb24sIG9yIHRoZSB2YWx1ZSByZWNlaXZlZCBieSBCT09UUC4KKworICA8ZGV2aWNlPglOYW1lIG9mIG5ldHdvcmsgZGV2aWNlIHRvIHVzZS4gSWYgdGhpcyBpcyBlbXB0eSwgYWxsCisJCWRldmljZXMgYXJlIHVzZWQgZm9yIFJBUlAgYW5kIEJPT1RQIHJlcXVlc3RzLCBhbmQgdGhlCisJCWZpcnN0IG9uZSB3ZSByZWNlaXZlIGEgcmVwbHkgb24gaXMgY29uZmlndXJlZC4gSWYgeW91IGhhdmUKKwkJb25seSBvbmUgZGV2aWNlLCB5b3UgY2FuIHNhZmVseSBsZWF2ZSB0aGlzIGJsYW5rLgorCisgIDxhdXRvY29uZj4JTWV0aG9kIHRvIHVzZSBmb3IgYXV0b2NvbmZpZ3VyYXRpb24uIElmIHRoaXMgaXMgZWl0aGVyCisJCSdyYXJwJyBvciAnYm9vdHAnLCB0aGUgc3BlY2lmaWVkIHByb3RvY29sIGlzIHVzZWQuCisJCUlmIHRoZSB2YWx1ZSBpcyAnYm90aCcgb3IgZW1wdHksIGJvdGggcHJvdG9jb2xzIGFyZSB1c2VkCisJCXNvIGZhciBhcyB0aGV5IGhhdmUgYmVlbiBlbmFibGVkIGR1cmluZyBrZXJuZWwgY29uZmlndXJhLQorCQl0aW9uLiAnb2ZmJyBtZWFucyBubyBhdXRvY29uZmlndXJhdGlvbi4KKworICBUaGUgPGF1dG9jb25mPiBwYXJhbWV0ZXIgY2FuIGFwcGVhciBhbG9uZSBhcyB0aGUgdmFsdWUgdG8gdGhlIGBpcCcKKyAgcGFyYW1ldGVyICh3aXRob3V0IGFsbCB0aGUgJzonIGNoYXJhY3RlcnMgYmVmb3JlKSBpbiB3aGljaCBjYXNlIGF1dG8tCisgIGNvbmZpZ3VyYXRpb24gaXMgdXNlZC4KKworCisKKworMy4pIEtlcm5lbCBsb2FkZXIKKyAgICAtLS0tLS0tLS0tLS0tCisKK1RvIGdldCB0aGUga2VybmVsIGludG8gbWVtb3J5IGRpZmZlcmVudCBhcHByb2FjaGVzIGNhbiBiZSB1c2VkLiBUaGV5CitkZXBlbmQgb24gd2hhdCBmYWNpbGl0aWVzIGFyZSBhdmFpbGFibGU6CisKKworMy4xKSAgV3JpdGluZyB0aGUga2VybmVsIG9udG8gYSBmbG9wcHkgdXNpbmcgZGQ6CisJQXMgYWx3YXlzIHlvdSBjYW4ganVzdCB3cml0ZSB0aGUga2VybmVsIG9udG8gYSBmbG9wcHkgdXNpbmcgZGQsCisJYnV0IHRoZW4gaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGtlcm5lbCBjb21tYW5kIGxpbmVzIGF0IGFsbC4KKwlUbyBzdWJzdGl0dXRlIHRoZSAncm9vdD0nIHBhcmFtZXRlciwgY3JlYXRlIGEgZHVtbXkgZGV2aWNlIG9uIGFueQorCWxpbnV4IHN5c3RlbSB3aXRoIG1ham9yIG51bWJlciAwIGFuZCBtaW5vciBudW1iZXIgMjU1IHVzaW5nIG1rbm9kOgorCisJCW1rbm9kIC9kZXYvYm9vdDI1NSBjIDAgMjU1CisKKwlUaGVuIGNvcHkgdGhlIGtlcm5lbCB6SW1hZ2UgZmlsZSBvbnRvIGEgZmxvcHB5IHVzaW5nIGRkOgorCisJCWRkIGlmPS91c3Ivc3JjL2xpbnV4L2FyY2gvaTM4Ni9ib290L3pJbWFnZSBvZj0vZGV2L2ZkMAorCisJQW5kIGZpbmFsbHkgdXNlIHJkZXYgdG8gc2V0IHRoZSByb290IGRldmljZToKKworCQlyZGV2IC9kZXYvZmQwIC9kZXYvYm9vdDI1NQorCisJWW91IGNhbiB0aGVuIHJlbW92ZSB0aGUgZHVtbXkgZGV2aWNlIC9kZXYvYm9vdDI1NSBhZ2Fpbi4gVGhlcmUKKwlpcyBubyByZWFsIGRldmljZSBhdmFpbGFibGUgZm9yIGl0LgorCVRoZSBvdGhlciB0d28ga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGNhbm5vdCBiZSBzdWJzdGktCisJdHV0ZWQgd2l0aCByZGV2LiBUaGVyZWZvcmUsIHVzaW5nIHRoaXMgbWV0aG9kIHRoZSBrZXJuZWwgd2lsbAorCWJ5IGRlZmF1bHQgdXNlIFJBUlAgYW5kL29yIEJPT1RQLCBhbmQgaWYgaXQgZ2V0cyBhbiBhbnN3ZXIgdmlhCisJUkFSUCB3aWxsIG1vdW50IHRoZSBkaXJlY3RvcnkgL3RmdHBib290LzxjbGllbnQtaXA+LyBhcyBpdHMKKwlyb290LiBJZiBpdCBnb3QgYSBCT09UUCBhbnN3ZXIgdGhlIGRpcmVjdG9yeSBuYW1lIGluIHRoYXQgYW5zd2VyCisJaXMgdXNlZC4KKworCiszLjIpIFVzaW5nIExJTE8KKwlXaGVuIHVzaW5nIExJTE8geW91IGNhbiBzcGVjaWZ5IGFsbCBuZWNlc3NhcnkgY29tbWFuZCBsaW5lCisJcGFyYW1ldGVycyB3aXRoIHRoZSAnYXBwZW5kPScgY29tbWFuZCBpbiB0aGUgTElMTyBjb25maWd1cmF0aW9uCisJZmlsZS4gSG93ZXZlciwgdG8gdXNlIHRoZSAncm9vdD0nIGNvbW1hbmQgeW91IGFsc28gbmVlZCB0bworCXNldCB1cCBhIGR1bW15IGRldmljZSBhcyBkZXNjcmliZWQgaW4gMy4xIGFib3ZlLiBGb3IgaG93IHRvIHVzZQorCUxJTE8gYW5kIGl0cyAnYXBwZW5kPScgY29tbWFuZCBwbGVhc2UgcmVmZXIgdG8gdGhlIExJTE8KKwlkb2N1bWVudGF0aW9uLgorCiszLjMpIFVzaW5nIGxvYWRsaW4KKwlXaGVuIHlvdSB3YW50IHRvIGJvb3QgTGludXggZnJvbSBhIERPUyBjb21tYW5kIHByb21wdCB3aXRob3V0CisJaGF2aW5nIGEgbG9jYWwgaGFyZCBkaXNrIHRvIG1vdW50IGFzIHJvb3QsIHlvdSBjYW4gdXNlIGxvYWRsaW4uCisJSSB3YXMgdG9sZCB0aGF0IGl0IHdvcmtzLCBidXQgaGF2ZW4ndCB1c2VkIGl0IG15c2VsZiB5ZXQuIEluCisJZ2VuZXJhbCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEga2VybmVsIGNvbW1hbmQgbGluZSBzaW1pLQorCWxhciB0byBob3cgTElMTyBpcyBkb2luZyBpdC4gUGxlYXNlIHJlZmVyIHRvIHRoZSBsb2FkbGluIGRvY3UtCisJbWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorCiszLjQpIFVzaW5nIGEgYm9vdCBST00KKwlUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGVsZWdhbnQgd2F5IG9mIGJvb3RpbmcgYSBkaXNrbGVzcworCWNsaWVudC4gV2l0aCBhIGJvb3QgUk9NIHRoZSBrZXJuZWwgZ2V0cyBsb2FkZWQgdXNpbmcgdGhlIFRGVFAKKwlwcm90b2NvbC4gQXMgZmFyIGFzIEkga25vdywgbm8gY29tbWVyY2lhbCBib290IFJPTXMgeWV0CisJc3VwcG9ydCBib290aW5nIExpbnV4IG92ZXIgdGhlIG5ldHdvcmssIGJ1dCB0aGVyZSBhcmUgdHdvCisJZnJlZSBpbXBsZW1lbnRhdGlvbnMgb2YgYSBib290IFJPTSBhdmFpbGFibGUgb24gc3Vuc2l0ZS51bmMuZWR1CisJYW5kIGl0cyBtaXJyb3JzLiBUaGV5IGFyZSBjYWxsZWQgJ25ldGJvb3QtbmZzJyBhbmQgJ2V0aGVyYm9vdCcuCisJQm90aCBjb250YWluIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gYm9vdCBhIGRpc2tsZXNzIExpbnV4IGNsaWVudC4KKworCisKKworNC4pIENyZWRpdHMKKyAgICAtLS0tLS0tCisKKyAgVGhlIG5mc3Jvb3QgY29kZSBpbiB0aGUga2VybmVsIGFuZCB0aGUgUkFSUCBzdXBwb3J0IGhhdmUgYmVlbiB3cml0dGVuCisgIGJ5IEdlcm8gS3VobG1hbm4gPGdlcm9AZ2ttaW5peC5oYW4uZGU+LgorCisgIFRoZSByZXN0IG9mIHRoZSBJUCBsYXllciBhdXRvY29uZmlndXJhdGlvbiBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4KKyAgYnkgTWFydGluIE1hcmVzIDxtakBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+LgorCisgIEluIG9yZGVyIHRvIHdyaXRlIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgbmZzcm9vdCBJIHdvdWxkIGxpa2UgdG8gdGhhbmsKKyAgSmVucy1Vd2UgTWFnZXIgPGp1bUBhbnViaXMuaGFuLmRlPiBmb3IgaGlzIGhlbHAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQgYi9Eb2N1bWVudGF0aW9uL25taV93YXRjaGRvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyNWE0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbm1pX3dhdGNoZG9nLnR4dApAQCAtMCwwICsxLDgxIEBACisKK1tOTUkgd2F0Y2hkb2cgaXMgYXZhaWxhYmxlIGZvciB4ODYgYW5kIHg4Ni02NCBhcmNoaXRlY3R1cmVzXQorCitJcyB5b3VyIHN5c3RlbSBsb2NraW5nIHVwIHVucHJlZGljdGFibHk/IE5vIGtleWJvYXJkIGFjdGl2aXR5LCBqdXN0CithIGZydXN0cmF0aW5nIGNvbXBsZXRlIGhhcmQgbG9ja3VwPyBEbyB5b3Ugd2FudCB0byBoZWxwIHVzIGRlYnVnZ2luZworc3VjaCBsb2NrdXBzPyBJZiBhbGwgeWVzIHRoZW4gdGhpcyBkb2N1bWVudCBpcyBkZWZpbml0ZWx5IGZvciB5b3UuCisKK09uIG1hbnkgeDg2L3g4Ni02NCB0eXBlIGhhcmR3YXJlIHRoZXJlIGlzIGEgZmVhdHVyZSB0aGF0IGVuYWJsZXMKK3VzIHRvIGdlbmVyYXRlICd3YXRjaGRvZyBOTUkgaW50ZXJydXB0cycuICAoTk1JOiBOb24gTWFza2FibGUgSW50ZXJydXB0Cit3aGljaCBnZXQgZXhlY3V0ZWQgZXZlbiBpZiB0aGUgc3lzdGVtIGlzIG90aGVyd2lzZSBsb2NrZWQgdXAgaGFyZCkuCitUaGlzIGNhbiBiZSB1c2VkIHRvIGRlYnVnIGhhcmQga2VybmVsIGxvY2t1cHMuICBCeSBleGVjdXRpbmcgcGVyaW9kaWMKK05NSSBpbnRlcnJ1cHRzLCB0aGUga2VybmVsIGNhbiBtb25pdG9yIHdoZXRoZXIgYW55IENQVSBoYXMgbG9ja2VkIHVwLAorYW5kIHByaW50IG91dCBkZWJ1Z2dpbmcgbWVzc2FnZXMgaWYgc28uICAKKworSW4gb3JkZXIgdG8gdXNlIHRoZSBOTUkgd2F0Y2hkb2csIHlvdSBuZWVkIHRvIGhhdmUgQVBJQyBzdXBwb3J0IGluIHlvdXIKK2tlcm5lbC4gRm9yIFNNUCBrZXJuZWxzLCBBUElDIHN1cHBvcnQgZ2V0cyBjb21waWxlZCBpbiBhdXRvbWF0aWNhbGx5LiBGb3IKK1VQLCBlbmFibGUgZWl0aGVyIENPTkZJR19YODZfVVBfQVBJQyAoUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIC0+IExvY2FsCitBUElDIHN1cHBvcnQgb24gdW5pcHJvY2Vzc29ycykgb3IgQ09ORklHX1g4Nl9VUF9JT0FQSUMgKFByb2Nlc3NvciB0eXBlIGFuZAorZmVhdHVyZXMgLT4gSU8tQVBJQyBzdXBwb3J0IG9uIHVuaXByb2Nlc3NvcnMpIGluIHlvdXIga2VybmVsIGNvbmZpZy4KK0NPTkZJR19YODZfVVBfQVBJQyBpcyBmb3IgdW5pcHJvY2Vzc29yIG1hY2hpbmVzIHdpdGhvdXQgYW4gSU8tQVBJQy4KK0NPTkZJR19YODZfVVBfSU9BUElDIGlzIGZvciB1bmlwcm9jZXNzb3Igd2l0aCBhbiBJTy1BUElDLiBbTm90ZTogY2VydGFpbgora2VybmVsIGRlYnVnZ2luZyBvcHRpb25zLCBzdWNoIGFzIEtlcm5lbCBTdGFjayBNZXRlciBvciBLZXJuZWwgVHJhY2VyLAorbWF5IGltcGxpY2l0bHkgZGlzYWJsZSB0aGUgTk1JIHdhdGNoZG9nLl0KKworRm9yIHg4Ni02NCwgdGhlIG5lZWRlZCBBUElDIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgYW5kIHRoZSBOTUkgd2F0Y2hkb2cgaXMKK2Fsd2F5cyBlbmFibGVkIHdpdGggSS9PLUFQSUMgbW9kZSAobm1pX3dhdGNoZG9nPTEpLiBDdXJyZW50bHksIGxvY2FsIEFQSUMKK21vZGUgKG5taV93YXRjaGRvZz0yKSBkb2VzIG5vdCB3b3JrIG9uIHg4Ni02NC4KKworVXNpbmcgbG9jYWwgQVBJQyAobm1pX3dhdGNoZG9nPTIpIG5lZWRzIHRoZSBmaXJzdCBwZXJmb3JtYW5jZSByZWdpc3Rlciwgc28KK3lvdSBjYW4ndCB1c2UgaXQgZm9yIG90aGVyIHB1cnBvc2VzIChzdWNoIGFzIGhpZ2ggcHJlY2lzaW9uIHBlcmZvcm1hbmNlCitwcm9maWxpbmcuKSBIb3dldmVyLCBhdCBsZWFzdCBvcHJvZmlsZSBhbmQgdGhlIHBlcmZjdHIgZHJpdmVyIGRpc2FibGUgdGhlCitsb2NhbCBBUElDIE5NSSB3YXRjaGRvZyBhdXRvbWF0aWNhbGx5LgorCitUbyBhY3R1YWxseSBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZywgdXNlIHRoZSAnbm1pX3dhdGNoZG9nPU4nIGJvb3QKK3BhcmFtZXRlci4gIEVnLiB0aGUgcmVsZXZhbnQgbGlsby5jb25mIGVudHJ5OgorCisgICAgICAgIGFwcGVuZD0ibm1pX3dhdGNoZG9nPTEiCisKK0ZvciBTTVAgbWFjaGluZXMgYW5kIFVQIG1hY2hpbmVzIHdpdGggYW4gSU8tQVBJQyB1c2Ugbm1pX3dhdGNoZG9nPTEuCitGb3IgVVAgbWFjaGluZXMgd2l0aG91dCBhbiBJTy1BUElDIHVzZSBubWlfd2F0Y2hkb2c9MiwgdGhpcyBvbmx5IHdvcmtzCitmb3Igc29tZSBwcm9jZXNzb3IgdHlwZXMuICBJZiBpbiBkb3VidCwgYm9vdCB3aXRoIG5taV93YXRjaGRvZz0xIGFuZAorY2hlY2sgdGhlIE5NSSBjb3VudCBpbiAvcHJvYy9pbnRlcnJ1cHRzOyBpZiB0aGUgY291bnQgaXMgemVybyB0aGVuCityZWJvb3Qgd2l0aCBubWlfd2F0Y2hkb2c9MiBhbmQgY2hlY2sgdGhlIE5NSSBjb3VudC4gIElmIGl0IGlzIHN0aWxsCit6ZXJvIHRoZW4gbG9nIGEgcHJvYmxlbSwgeW91IHByb2JhYmx5IGhhdmUgYSBwcm9jZXNzb3IgdGhhdCBuZWVkcyB0byBiZQorYWRkZWQgdG8gdGhlIG5taSBjb2RlLgorCitBICdsb2NrdXAnIGlzIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86IGlmIGFueSBDUFUgaW4gdGhlIHN5c3RlbSBkb2VzIG5vdAorZXhlY3V0ZSB0aGUgcGVyaW9kIGxvY2FsIHRpbWVyIGludGVycnVwdCBmb3IgbW9yZSB0aGFuIDUgc2Vjb25kcywgdGhlbgordGhlIE5NSSBoYW5kbGVyIGdlbmVyYXRlcyBhbiBvb3BzIGFuZCBraWxscyB0aGUgcHJvY2Vzcy4gVGhpcworJ2NvbnRyb2xsZWQgY3Jhc2gnIChhbmQgdGhlIHJlc3VsdGluZyBrZXJuZWwgbWVzc2FnZXMpIGNhbiBiZSB1c2VkIHRvCitkZWJ1ZyB0aGUgbG9ja3VwLiBUaHVzIHdoZW5ldmVyIHRoZSBsb2NrdXAgaGFwcGVucywgd2FpdCA1IHNlY29uZHMgYW5kCit0aGUgb29wcyB3aWxsIHNob3cgdXAgYXV0b21hdGljYWxseS4gSWYgdGhlIGtlcm5lbCBwcm9kdWNlcyBubyBtZXNzYWdlcwordGhlbiB0aGUgc3lzdGVtIGhhcyBjcmFzaGVkIHNvIGhhcmQgKGVnLiBoYXJkd2FyZS13aXNlKSB0aGF0IGVpdGhlciBpdAorY2Fubm90IGV2ZW4gYWNjZXB0IE5NSSBpbnRlcnJ1cHRzLCBvciB0aGUgY3Jhc2ggaGFzIG1hZGUgdGhlIGtlcm5lbAordW5hYmxlIHRvIHByaW50IG1lc3NhZ2VzLgorCitCZSBhd2FyZSB0aGF0IHdoZW4gdXNpbmcgbG9jYWwgQVBJQywgdGhlIGZyZXF1ZW5jeSBvZiBOTUkgaW50ZXJydXB0cworaXQgZ2VuZXJhdGVzLCBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0gbG9hZC4gVGhlIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLAorbGFja2luZyBhIGJldHRlciBzb3VyY2UsIHVzZXMgdGhlICJjeWNsZXMgdW5oYWx0ZWQiIGV2ZW50LiBBcyB5b3UgbWF5CitndWVzcyBpdCBkb2Vzbid0IHRpY2sgd2hlbiB0aGUgQ1BVIGlzIGluIHRoZSBoYWx0ZWQgc3RhdGUgKHdoaWNoIGhhcHBlbnMKK3doZW4gdGhlIHN5c3RlbSBpcyBpZGxlKSwgYnV0IGlmIHlvdXIgc3lzdGVtIGxvY2tzIHVwIG9uIGFueXRoaW5nIGJ1dCB0aGUKKyJobHQiIHByb2Nlc3NvciBpbnN0cnVjdGlvbiwgdGhlIHdhdGNoZG9nIHdpbGwgdHJpZ2dlciB2ZXJ5IHNvb24gYXMgdGhlCisiY3ljbGVzIHVuaGFsdGVkIiBldmVudCB3aWxsIGhhcHBlbiBldmVyeSBjbG9jayB0aWNrLiBJZiBpdCBsb2NrcyB1cCBvbgorImhsdCIsIHRoZW4geW91IGFyZSBvdXQgb2YgbHVjayAtLSB0aGUgZXZlbnQgd2lsbCBub3QgaGFwcGVuIGF0IGFsbCBhbmQgdGhlCit3YXRjaGRvZyB3b24ndCB0cmlnZ2VyLiBUaGlzIGlzIGEgc2hvcnRjb21pbmcgb2YgdGhlIGxvY2FsIEFQSUMgd2F0Y2hkb2cKKy0tIHVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gImNsb2NrIHRpY2tzIiBldmVudCB0aGF0IHdvdWxkIHdvcmsgYWxsIHRoZQordGltZS4gVGhlIEkvTyBBUElDIHdhdGNoZG9nIGlzIGRyaXZlbiBleHRlcm5hbGx5IGFuZCBoYXMgbm8gc3VjaCBzaG9ydGNvbWluZy4gIAorQnV0IGl0cyBOTUkgZnJlcXVlbmN5IGlzIG11Y2ggaGlnaGVyLCByZXN1bHRpbmcgaW4gYSBtb3JlIHNpZ25pZmljYW50IGhpdAordG8gdGhlIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLgorCitOT1RFOiBzdGFydGluZyB3aXRoIDIuNC4yLWFjMTggdGhlIE5NSS1vb3BzZXIgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwKK3lvdSBoYXZlIHRvIGVuYWJsZSBpdCB3aXRoIGEgYm9vdCB0aW1lIHBhcmFtZXRlci4gIFByaW9yIHRvIDIuNC4yLWFjMTgKK3RoZSBOTUktb29wc2VyIGlzIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5IG9uIHg4NiBTTVAgYm94ZXMuCisKK09uIHg4Ni02NCB0aGUgTk1JIG9vcHNlciBpcyBvbiBieSBkZWZhdWx0LiBPbiA2NGJpdCBJbnRlbCBDUFVzCitpdCB1c2VzIElPLUFQSUMgYnkgZGVmYXVsdCBhbmQgb24gQU1EIGl0IHVzZXMgbG9jYWwgQVBJQy4KKworWyBmZWVsIGZyZWUgdG8gc2VuZCBidWcgcmVwb3J0cywgc3VnZ2VzdGlvbnMgYW5kIHBhdGNoZXMgdG8KKyAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+IG9yIHRoZSBMaW51eCBTTVAgbWFpbGluZworICBsaXN0IGF0IDxsaW51eC1zbXBAdmdlci5rZXJuZWwub3JnPiBdCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGViZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0CkBAIC0wLDAgKzEsMTk4IEBACisJCQkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSBOTy1NTVUgTUVNT1JZIE1BUFBJTkcgU1VQUE9SVAorCQkJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBrZXJuZWwgaGFzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbWVtb3J5IG1hcHBpbmcgdW5kZXIgbm8tTU1VIGNvbmRpdGlvbnMsIHN1Y2gKK2FzIGFyZSB1c2VkIGluIHVDbGludXggZW52aXJvbm1lbnRzLiBGcm9tIHRoZSB1c2Vyc3BhY2UgcG9pbnQgb2YgdmlldywgbWVtb3J5CittYXBwaW5nIGlzIG1hZGUgdXNlIG9mIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCwgdGhlIHNobWF0KCkKK2NhbGwgYW5kIHRoZSBleGVjdmUoKSBzeXN0ZW0gY2FsbC4gRnJvbSB0aGUga2VybmVsJ3MgcG9pbnQgb2YgdmlldywgZXhlY3ZlKCkKK21hcHBpbmcgaXMgYWN0dWFsbHkgcGVyZm9ybWVkIGJ5IHRoZSBiaW5mbXQgZHJpdmVycywgd2hpY2ggY2FsbCBiYWNrIGludG8gdGhlCittbWFwKCkgcm91dGluZXMgdG8gZG8gdGhlIGFjdHVhbCB3b3JrLgorCitNZW1vcnkgbWFwcGluZyBiZWhhdmlvdXIgYWxzbyBpbnZvbHZlcyB0aGUgd2F5IGZvcmsoKSwgdmZvcmsoKSwgY2xvbmUoKSBhbmQKK3B0cmFjZSgpIHdvcmsuIFVuZGVyIHVDbGludXggdGhlcmUgaXMgbm8gZm9yaygpLCBhbmQgY2xvbmUoKSBtdXN0IGJlIHN1cHBsaWVkCit0aGUgQ0xPTkVfVk0gZmxhZy4KKworVGhlIGJlaGF2aW91ciBpcyBzaW1pbGFyIGJldHdlZW4gdGhlIE1NVSBhbmQgbm8tTU1VIGNhc2VzLCBidXQgbm90IGlkZW50aWNhbDsKK2FuZCBpdCdzIGFsc28gbXVjaCBtb3JlIHJlc3RyaWN0ZWQgaW4gdGhlIGxhdHRlciBjYXNlOgorCisgKCopIEFub255bW91cyBtYXBwaW5nLCBNQVBfUFJJVkFURQorCisJSW4gdGhlIE1NVSBjYXNlOiBWTSByZWdpb25zIGJhY2tlZCBieSBhcmJpdHJhcnkgcGFnZXM7IGNvcHktb24td3JpdGUKKwlhY3Jvc3MgZm9yay4KKworCUluIHRoZSBuby1NTVUgY2FzZTogVk0gcmVnaW9ucyBiYWNrZWQgYnkgYXJiaXRyYXJ5IGNvbnRpZ3VvdXMgcnVucyBvZgorCXBhZ2VzLgorCisgKCopIEFub255bW91cyBtYXBwaW5nLCBNQVBfU0hBUkVECisKKwlUaGVzZSBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgcHJpdmF0ZSBtYXBwaW5ncywgZXhjZXB0IHRoYXQgdGhleSdyZQorCXNoYXJlZCBhY3Jvc3MgZm9yaygpIG9yIGNsb25lKCkgd2l0aG91dCBDTE9ORV9WTSBpbiB0aGUgTU1VIGNhc2UuIFNpbmNlCisJdGhlIG5vLU1NVSBjYXNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGVzZSwgYmVoYXZpb3VyIGlzIGlkZW50aWNhbCB0bworCU1BUF9QUklWQVRFIHRoZXJlLgorCisgKCopIEZpbGUsIE1BUF9QUklWQVRFLCBQUk9UX1JFQUQgLyBQUk9UX0VYRUMsICFQUk9UX1dSSVRFCisKKwlJbiB0aGUgTU1VIGNhc2U6IFZNIHJlZ2lvbnMgYmFja2VkIGJ5IHBhZ2VzIHJlYWQgZnJvbSBmaWxlOyBjaGFuZ2VzIHRvCisJdGhlIHVuZGVybHlpbmcgZmlsZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBtYXBwaW5nOyBjb3BpZWQgYWNyb3NzIGZvcmsuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6CisKKyAgICAgICAgIC0gSWYgb25lIGV4aXN0cywgdGhlIGtlcm5lbCB3aWxsIHJlLXVzZSBhbiBleGlzdGluZyBtYXBwaW5nIHRvIHRoZQorICAgICAgICAgICBzYW1lIHNlZ21lbnQgb2YgdGhlIHNhbWUgZmlsZSBpZiB0aGF0IGhhcyBjb21wYXRpYmxlIHBlcm1pc3Npb25zLAorICAgICAgICAgICBldmVuIGlmIHRoaXMgd2FzIGNyZWF0ZWQgYnkgYW5vdGhlciBwcm9jZXNzLgorCisgICAgICAgICAtIElmIHBvc3NpYmxlLCB0aGUgZmlsZSBtYXBwaW5nIHdpbGwgYmUgZGlyZWN0bHkgb24gdGhlIGJhY2tpbmcgZGV2aWNlCisgICAgICAgICAgIGlmIHRoZSBiYWNraW5nIGRldmljZSBoYXMgdGhlIEJESV9DQVBfTUFQX0RJUkVDVCBjYXBhYmlsaXR5IGFuZAorICAgICAgICAgICBhcHByb3ByaWF0ZSBtYXBwaW5nIHByb3RlY3Rpb24gY2FwYWJpbGl0aWVzLiBSYW1mcywgcm9tZnMsIGNyYW1mcworICAgICAgICAgICBhbmQgbXRkIG1pZ2h0IGFsbCBwZXJtaXQgdGhpcy4KKworCSAtIElmIHRoZSBiYWNraW5nIGRldmljZSBkZXZpY2UgY2FuJ3Qgb3Igd29uJ3QgcGVybWl0IGRpcmVjdCBzaGFyaW5nLAorICAgICAgICAgICBidXQgZG9lcyBoYXZlIHRoZSBCRElfQ0FQX01BUF9DT1BZIGNhcGFiaWxpdHksIHRoZW4gYSBjb3B5IG9mIHRoZQorICAgICAgICAgICBhcHByb3ByaWF0ZSBiaXQgb2YgdGhlIGZpbGUgd2lsbCBiZSByZWFkIGludG8gYSBjb250aWd1b3VzIGJpdCBvZgorICAgICAgICAgICBtZW1vcnkgYW5kIGFueSBleHRyYW5lb3VzIHNwYWNlIGJleW9uZCB0aGUgRU9GIHdpbGwgYmUgY2xlYXJlZAorCisJIC0gV3JpdGVzIHRvIHRoZSBmaWxlIGRvIG5vdCBhZmZlY3QgdGhlIG1hcHBpbmc7IHdyaXRlcyB0byB0aGUgbWFwcGluZworCSAgIGFyZSB2aXNpYmxlIGluIG90aGVyIHByb2Nlc3NlcyAobm8gTU1VIHByb3RlY3Rpb24pLCBidXQgc2hvdWxkIG5vdAorCSAgIGhhcHBlbi4KKworICgqKSBGaWxlLCBNQVBfUFJJVkFURSwgUFJPVF9SRUFEIC8gUFJPVF9FWEVDLCBQUk9UX1dSSVRFCisKKwlJbiB0aGUgTU1VIGNhc2U6IGxpa2UgdGhlIG5vbi1QUk9UX1dSSVRFIGNhc2UsIGV4Y2VwdCB0aGF0IHRoZSBwYWdlcyBpbgorCXF1ZXN0aW9uIGdldCBjb3BpZWQgYmVmb3JlIHRoZSB3cml0ZSBhY3R1YWxseSBoYXBwZW5zLiBGcm9tIHRoYXQgcG9pbnQKKwlvbiB3cml0ZXMgdG8gdGhlIGZpbGUgdW5kZXJuZWF0aCB0aGF0IHBhZ2Ugbm8gbG9uZ2VyIGdldCByZWZsZWN0ZWQgaW50bworCXRoZSBtYXBwaW5nJ3MgYmFja2luZyBwYWdlcy4gVGhlIHBhZ2UgaXMgdGhlbiBiYWNrZWQgYnkgc3dhcCBpbnN0ZWFkLgorCisJSW4gdGhlIG5vLU1NVSBjYXNlOiB3b3JrcyBtdWNoIGxpa2UgdGhlIG5vbi1QUk9UX1dSSVRFIGNhc2UsIGV4Y2VwdAorCXRoYXQgYSBjb3B5IGlzIGFsd2F5cyB0YWtlbiBhbmQgbmV2ZXIgc2hhcmVkLgorCisgKCopIFJlZ3VsYXIgZmlsZSAvIGJsb2NrZGV2LCBNQVBfU0hBUkVELCBQUk9UX1JFQUQgLyBQUk9UX0VYRUMgLyBQUk9UX1dSSVRFCisKKwlJbiB0aGUgTU1VIGNhc2U6IFZNIHJlZ2lvbnMgYmFja2VkIGJ5IHBhZ2VzIHJlYWQgZnJvbSBmaWxlOyBjaGFuZ2VzIHRvCisJcGFnZXMgd3JpdHRlbiBiYWNrIHRvIGZpbGU7IHdyaXRlcyB0byBmaWxlIHJlZmxlY3RlZCBpbnRvIHBhZ2VzIGJhY2tpbmcKKwltYXBwaW5nOyBzaGFyZWQgYWNyb3NzIGZvcmsuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6IG5vdCBzdXBwb3J0ZWQuCisKKyAoKikgTWVtb3J5IGJhY2tlZCByZWd1bGFyIGZpbGUsIE1BUF9TSEFSRUQsIFBST1RfUkVBRCAvIFBST1RfRVhFQyAvIFBST1RfV1JJVEUKKworCUluIHRoZSBNTVUgY2FzZTogQXMgZm9yIG9yZGluYXJ5IHJlZ3VsYXIgZmlsZXMuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6IFRoZSBmaWxlc3lzdGVtIHByb3ZpZGluZyB0aGUgbWVtb3J5LWJhY2tlZCBmaWxlCisJKHN1Y2ggYXMgcmFtZnMgb3IgdG1wZnMpIG1heSBjaG9vc2UgdG8gaG9ub3VyIGFuIG9wZW4sIHRydW5jYXRlLCBtbWFwCisJc2VxdWVuY2UgYnkgcHJvdmlkaW5nIGEgY29udGlndW91cyBzZXF1ZW5jZSBvZiBwYWdlcyB0byBtYXAuIEluIHRoYXQKKwljYXNlLCBhIHNoYXJlZC13cml0YWJsZSBtZW1vcnkgbWFwcGluZyB3aWxsIGJlIHBvc3NpYmxlLiBJdCB3aWxsIHdvcmsKKwlhcyBmb3IgdGhlIE1NVSBjYXNlLiBJZiB0aGUgZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGFueSBzdWNoCisJc3VwcG9ydCwgdGhlbiB0aGUgbWFwcGluZyByZXF1ZXN0IHdpbGwgYmUgZGVuaWVkLgorCisgKCopIE1lbW9yeSBiYWNrZWQgYmxvY2tkZXYsIE1BUF9TSEFSRUQsIFBST1RfUkVBRCAvIFBST1RfRVhFQyAvIFBST1RfV1JJVEUKKworCUluIHRoZSBNTVUgY2FzZTogQXMgZm9yIG9yZGluYXJ5IHJlZ3VsYXIgZmlsZXMuCisKKwlJbiB0aGUgbm8tTU1VIGNhc2U6IEFzIGZvciBtZW1vcnkgYmFja2VkIHJlZ3VsYXIgZmlsZXMsIGJ1dCB0aGUKKwlibG9ja2RldiBtdXN0IGJlIGFibGUgdG8gcHJvdmlkZSBhIGNvbnRpZ3VvdXMgcnVuIG9mIHBhZ2VzIHdpdGhvdXQKKwl0cnVuY2F0ZSBiZWluZyBjYWxsZWQuIFRoZSByYW1kaXNrIGRyaXZlciBjb3VsZCBkbyB0aGlzIGlmIGl0IGFsbG9jYXRlZAorCWFsbCBpdHMgbWVtb3J5IGFzIGEgY29udGlndW91cyBhcnJheSB1cGZyb250LgorCisgKCopIE1lbW9yeSBiYWNrZWQgY2hhcmRldiwgTUFQX1NIQVJFRCwgUFJPVF9SRUFEIC8gUFJPVF9FWEVDIC8gUFJPVF9XUklURQorCisJSW4gdGhlIE1NVSBjYXNlOiBBcyBmb3Igb3JkaW5hcnkgcmVndWxhciBmaWxlcy4KKworCUluIHRoZSBuby1NTVUgY2FzZTogVGhlIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVyIG1heSBjaG9vc2UgdG8gaG9ub3VyCisJdGhlIG1tYXAoKSBieSBwcm92aWRpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBkZXZpY2UgaWYgaXQKKwlwcm92aWRlcyBtZW1vcnkgb3IgcXVhc2ktbWVtb3J5IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiBFeGFtcGxlcworCW9mIHN1Y2ggYXJlIGZyYW1lIGJ1ZmZlcnMgYW5kIGZsYXNoIGRldmljZXMuIElmIHRoZSBkcml2ZXIgZG9lcyBub3QKKwlwcm92aWRlIGFueSBzdWNoIHN1cHBvcnQsIHRoZW4gdGhlIG1hcHBpbmcgcmVxdWVzdCB3aWxsIGJlIGRlbmllZC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGVVJUSEVSIE5PVEVTIE9OIE5PLU1NVSBNTUFQCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAoKikgQSByZXF1ZXN0IGZvciBhIHByaXZhdGUgbWFwcGluZyBvZiBsZXNzIHRoYW4gYSBwYWdlIGluIHNpemUgbWF5IG5vdCByZXR1cm4KKyAgICAgYSBwYWdlLWFsaWduZWQgYnVmZmVyLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGtlcm5lbCBjYWxscyBrbWFsbG9jKCkgdG8KKyAgICAgYWxsb2NhdGUgdGhlIGJ1ZmZlciwgbm90IGdldF9mcmVlX3BhZ2UoKS4KKworICgqKSBBIGxpc3Qgb2YgYWxsIHRoZSBtYXBwaW5ncyBvbiB0aGUgc3lzdGVtIGlzIHZpc2libGUgdGhyb3VnaCAvcHJvYy9tYXBzIGluCisgICAgIG5vLU1NVSBtb2RlLgorCisgKCopIFN1cHBseWluZyBNQVBfRklYRUQgb3IgYSByZXF1ZXN0aW5nIGEgcGFydGljdWxhciBtYXBwaW5nIGFkZHJlc3Mgd2lsbAorICAgICByZXN1bHQgaW4gYW4gZXJyb3IuCisKKyAoKikgRmlsZXMgbWFwcGVkIHByaXZhdGVseSB1c3VhbGx5IGhhdmUgdG8gaGF2ZSBhIHJlYWQgbWV0aG9kIHByb3ZpZGVkIGJ5IHRoZQorICAgICBkcml2ZXIgb3IgZmlsZXN5c3RlbSBzbyB0aGF0IHRoZSBjb250ZW50cyBjYW4gYmUgcmVhZCBpbnRvIHRoZSBtZW1vcnkKKyAgICAgYWxsb2NhdGVkIGlmIG1tYXAoKSBjaG9vc2VzIG5vdCB0byBtYXAgdGhlIGJhY2tpbmcgZGV2aWNlIGRpcmVjdGx5LiBBbgorICAgICBlcnJvciB3aWxsIHJlc3VsdCBpZiB0aGV5IGRvbid0LiBUaGlzIGlzIG1vc3QgbGlrZWx5IHRvIGJlIGVuY291bnRlcmVkCisgICAgIHdpdGggY2hhcmFjdGVyIGRldmljZSBmaWxlcywgcGlwZXMsIGZpZm9zIGFuZCBzb2NrZXRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPVklESU5HIFNIQVJFQUJMRSBDSEFSQUNURVIgREVWSUNFIFNVUFBPUlQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHByb3ZpZGUgc2hhcmVhYmxlIGNoYXJhY3RlciBkZXZpY2Ugc3VwcG9ydCwgYSBkcml2ZXIgbXVzdCBwcm92aWRlIGEKK2ZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKCkgb3BlcmF0aW9uLiBUaGUgbW1hcCgpIHJvdXRpbmVzIHdpbGwgY2FsbCB0aGlzCit0byBnZXQgYSBwcm9wb3NlZCBhZGRyZXNzIGZvciB0aGUgbWFwcGluZy4gVGhpcyBtYXkgcmV0dXJuIGFuIGVycm9yIGlmIGl0Citkb2Vzbid0IHdpc2ggdG8gaG9ub3VyIHRoZSBtYXBwaW5nIGJlY2F1c2UgaXQncyB0b28gbG9uZywgYXQgYSB3ZWlyZCBvZmZzZXQsCit1bmRlciBzb21lIHVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGZsYWdzIG9yIHdoYXRldmVyLgorCitUaGUgZHJpdmVyIHNob3VsZCBhbHNvIHByb3ZpZGUgYmFja2luZyBkZXZpY2UgaW5mb3JtYXRpb24gd2l0aCBjYXBhYmlsaXRpZXMgc2V0Cit0byBpbmRpY2F0ZSB0aGUgcGVybWl0dGVkIHR5cGVzIG9mIG1hcHBpbmcgb24gc3VjaCBkZXZpY2VzLiBUaGUgZGVmYXVsdCBpcworYXNzdW1lZCB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUsIG5vdCBleGVjdXRhYmxlLCBhbmQgb25seSBzaGFyZWFibGUKK2RpcmVjdGx5IChjYW4ndCBiZSBjb3BpZWQpLgorCitUaGUgZmlsZS0+Zl9vcC0+bW1hcCgpIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBhY3R1YWxseSBpbmF1Z3VyYXRlIHRoZQorbWFwcGluZy4gSXQgY2FuIGJlIHJlamVjdGVkIGF0IHRoYXQgcG9pbnQuIFJldHVybmluZyB0aGUgRU5PU1lTIGVycm9yIHdpbGwKK2NhdXNlIHRoZSBtYXBwaW5nIHRvIGJlIGNvcGllZCBpbnN0ZWFkIGlmIEJESV9DQVBfTUFQX0NPUFkgaXMgc3BlY2lmaWVkLgorCitUaGUgdm1fb3BzLT5jbG9zZSgpIHJvdXRpbmUgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIGxhc3QgbWFwcGluZyBvbiBhIGNoYXJkZXYKK2lzIHJlbW92ZWQuIEFuIGV4aXN0aW5nIG1hcHBpbmcgd2lsbCBiZSBzaGFyZWQsIHBhcnRpYWxseSBvciBub3QsIGlmIHBvc3NpYmxlCit3aXRob3V0IG5vdGlmeWluZyB0aGUgZHJpdmVyLgorCitJdCBpcyBwZXJtaXR0ZWQgYWxzbyBmb3IgdGhlIGZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKCkgb3BlcmF0aW9uIHRvCityZXR1cm4gLUVOT1NZUy4gVGhpcyB3aWxsIGJlIHRha2VuIHRvIG1lYW4gdGhhdCB0aGlzIG9wZXJhdGlvbiBqdXN0IGRvZXNuJ3QKK3dhbnQgdG8gaGFuZGxlIGl0LCBkZXNwaXRlIHRoZSBmYWN0IGl0J3MgZ290IGFuIG9wZXJhdGlvbi4gRm9yIGluc3RhbmNlLCBpdAorbWlnaHQgdHJ5IGRpcmVjdGluZyB0aGUgY2FsbCB0byBhIHNlY29uZGFyeSBkcml2ZXIgd2hpY2ggdHVybnMgb3V0IG5vdCB0bworaW1wbGVtZW50IGl0LiBTdWNoIGlzIHRoZSBjYXNlIGZvciB0aGUgZnJhbWVidWZmZXIgZHJpdmVyIHdoaWNoIGF0dGVtcHRzIHRvCitkaXJlY3QgdGhlIGNhbGwgdG8gdGhlIGRldmljZS1zcGVjaWZpYyBkcml2ZXIuIFVuZGVyIHN1Y2ggY2lyY3Vtc3RhbmNlcywgdGhlCittYXBwaW5nIHJlcXVlc3Qgd2lsbCBiZSByZWplY3RlZCBpZiBCRElfQ0FQX01BUF9DT1BZIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCBhCitjb3B5IG1hcHBlZCBvdGhlcndpc2UuCisKK0lNUE9SVEFOVCBOT1RFOgorCisJU29tZSB0eXBlcyBvZiBkZXZpY2UgbWF5IHByZXNlbnQgYSBkaWZmZXJlbnQgYXBwZWFyYW5jZSB0byBhbnlvbmUKKwlsb29raW5nIGF0IHRoZW0gaW4gY2VydGFpbiBtb2Rlcy4gRmxhc2ggY2hpcHMgY2FuIGJlIGxpa2UgdGhpczsgZm9yCisJaW5zdGFuY2UgaWYgdGhleSdyZSBpbiBwcm9ncmFtbWluZyBvciBlcmFzZSBtb2RlLCB5b3UgbWlnaHQgc2VlIHRoZQorCXN0YXR1cyByZWZsZWN0ZWQgaW4gdGhlIG1hcHBpbmcsIGluc3RlYWQgb2YgdGhlIGRhdGEuCisKKwlJbiBzdWNoIGEgY2FzZSwgY2FyZSBtdXN0IGJlIHRha2VuIGxlc3QgdXNlcnNwYWNlIHNlZSBhIHNoYXJlZCBvciBhCisJcHJpdmF0ZSBtYXBwaW5nIHNob3dpbmcgc3VjaCBpbmZvcm1hdGlvbiB3aGVuIHRoZSBkcml2ZXIgaXMgYnVzeQorCWNvbnRyb2xsaW5nIHRoZSBkZXZpY2UuIFJlbWVtYmVyIGVzcGVjaWFsbHk6IHByaXZhdGUgZXhlY3V0YWJsZQorCW1hcHBpbmdzIG1heSBzdGlsbCBiZSBtYXBwZWQgZGlyZWN0bHkgb2ZmIHRoZSBkZXZpY2UgdW5kZXIgc29tZQorCWNpcmN1bXN0YW5jZXMhCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPVklESU5HIFNIQVJFQUJMRSBNRU1PUlktQkFDS0VEIEZJTEUgU1VQUE9SVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQcm92aXNpb24gb2Ygc2hhcmVkIG1hcHBpbmdzIG9uIG1lbW9yeSBiYWNrZWQgZmlsZXMgaXMgc2ltaWxhciB0byB0aGUgcHJvdmlzaW9uCitvZiBzdXBwb3J0IGZvciBzaGFyZWQgbWFwcGVkIGNoYXJhY3RlciBkZXZpY2VzLiBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlCitmaWxlc3lzdGVtIHByb3ZpZGluZyB0aGUgc2VydmljZSB3aWxsIHByb2JhYmx5IGFsbG9jYXRlIGEgY29udGlndW91cyBjb2xsZWN0aW9uCitvZiBwYWdlcyBhbmQgcGVybWl0IG1hcHBpbmdzIHRvIGJlIG1hZGUgb24gdGhhdC4KKworSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhIHRydW5jYXRlIG9wZXJhdGlvbiBhcHBsaWVkIHRvIHN1Y2ggYSBmaWxlIHRoYXQKK2luY3JlYXNlcyB0aGUgZmlsZSBzaXplLCBpZiB0aGF0IGZpbGUgaXMgZW1wdHksIGJlIHRha2VuIGFzIGEgcmVxdWVzdCB0byBnYXRoZXIKK2Vub3VnaCBwYWdlcyB0byBob25vdXIgYSBtYXBwaW5nLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgUE9TSVggc2hhcmVkCittZW1vcnkuCisKK01lbW9yeSBiYWNrZWQgZGV2aWNlcyBhcmUgaW5kaWNhdGVkIGJ5IHRoZSBtYXBwaW5nJ3MgYmFja2luZyBkZXZpY2UgaW5mbyBoYXZpbmcKK3RoZSBtZW1vcnlfYmFja2VkIGZsYWcgc2V0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST1ZJRElORyBTSEFSRUFCTEUgQkxPQ0sgREVWSUNFIFNVUFBPUlQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUHJvdmlzaW9uIG9mIHNoYXJlZCBtYXBwaW5ncyBvbiBibG9jayBkZXZpY2UgZmlsZXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBmb3IKK2NoYXJhY3RlciBkZXZpY2VzLiBJZiB0aGVyZSBpc24ndCBhIHJlYWwgZGV2aWNlIHVuZGVybmVhdGgsIHRoZW4gdGhlIGRyaXZlcgorc2hvdWxkIGFsbG9jYXRlIHN1ZmZpY2llbnQgY29udGlndW91cyBtZW1vcnkgdG8gaG9ub3VyIGFueSBzdXBwb3J0ZWQgbWFwcGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0IGIvRG9jdW1lbnRhdGlvbi9udW1hc3RhdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMzNhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbnVtYXN0YXQudHh0CkBAIC0wLDAgKzEsMjIgQEAKKworTnVtYSBwb2xpY3kgaGl0L21pc3Mgc3RhdGlzdGljcworCisvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSovbnVtYXN0YXQKKworQWxsIHVuaXRzIGFyZSBwYWdlcy4gSHVnZXBhZ2VzIGhhdmUgc2VwYXJhdGUgY291bnRlcnMuCisKK251bWFfaGl0CQkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGlzIG5vZGUsCisJCQkJCWFuZCBzdWNjZWVkZWQuCitudW1hX21pc3MJCQlBIHByb2Nlc3Mgd2FudGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoaXMgbm9kZSwKKwkJCQkJYnV0IGVuZGVkIHVwIHdpdGggbWVtb3J5IGZyb20gYW5vdGhlci4KK251bWFfZm9yZWlnbgkJQSBwcm9jZXNzIHdhbnRlZCB0byBhbGxvY2F0ZSBvbiBhbm90aGVyIG5vZGUsCisJCQkJICAgIGJ1dCBlbmRlZCB1cCB3aXRoIG1lbW9yeSBmcm9tIHRoaXMgb25lLgorbG9jYWxfbm9kZQkJCUEgcHJvY2VzcyByYW4gb24gdGhpcyBub2RlIGFuZCBnb3QgbWVtb3J5IGZyb20gaXQuCitvdGhlcl9ub2RlCQkJQSBwcm9jZXNzIHJhbiBvbiB0aGlzIG5vZGUgYW5kIGdvdCBtZW1vcnkgZnJvbSBhbm90aGVyIG5vZGUuCitpbnRlcmxlYXZlX2hpdCAJCUludGVybGVhdmluZyB3YW50ZWQgdG8gYWxsb2NhdGUgZnJvbSB0aGlzIG5vZGUKKwkJCQkJYW5kIHN1Y2NlZWRlZC4KKworRm9yIGVhc2llciByZWFkaW5nIHlvdSBjYW4gdXNlIHRoZSBudW1hc3RhdCB1dGlsaXR5IGZyb20gdGhlIG51bWFjdGwgcGFja2FnZQorKGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL2FrL251bWEvbnVtYWN0bCopLiBOb3RlIHRoYXQgaXQgb25seSB3b3Jrcword2VsbCByaWdodCBub3cgb24gbWFjaGluZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiBDUFVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MTEwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dApAQCAtMCwwICsxLDIyOSBAQAorTk9URToga3N5bW9vcHMgaXMgdXNlbGVzcyBvbiAyLjYuICBQbGVhc2UgdXNlIHRoZSBPb3BzIGluIGl0cyBvcmlnaW5hbCBmb3JtYXQKKyhmcm9tIGRtZXNnLCBldGMpLiAgSWdub3JlIGFueSByZWZlcmVuY2VzIGluIHRoaXMgb3Igb3RoZXIgZG9jcyB0byAiZGVjb2RpbmcKK3RoZSBPb3BzIiBvciAicnVubmluZyBpdCB0aHJvdWdoIGtzeW1vb3BzIi4gIElmIHlvdSBwb3N0IGFuIE9vcHMgZnJvbiAyLjYgdGhhdAoraGFzIGJlZW4gcnVuIHRocm91Z2gga3N5bW9vcHMsIHBlb3BsZSB3aWxsIGp1c3QgdGVsbCB5b3UgdG8gcmVwb3N0IGl0LgorCitRdWljayBTdW1tYXJ5CistLS0tLS0tLS0tLS0tCisKK0ZpbmQgdGhlIE9vcHMgYW5kIHNlbmQgaXQgdG8gdGhlIG1haW50YWluZXIgb2YgdGhlIGtlcm5lbCBhcmVhIHRoYXQgc2VlbXMgdG8gYmUKK2ludm9sdmVkIHdpdGggdGhlIHByb2JsZW0uICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBnZXR0aW5nIHRoZSB3cm9uZyBwZXJzb24uCitJZiB5b3UgYXJlIHVuc3VyZSBzZW5kIGl0IHRvIHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoZSBjb2RlIHJlbGV2YW50IHRvCit3aGF0IHlvdSB3ZXJlIGRvaW5nLiAgSWYgaXQgb2NjdXJzIHJlcGVhdGFibHkgdHJ5IGFuZCBkZXNjcmliZSBob3cgdG8gcmVjcmVhdGUKK2l0LiAgVGhhdCdzIHdvcnRoIGV2ZW4gbW9yZSB0aGFuIHRoZSBvb3BzLgorCitJZiB5b3UgYXJlIHRvdGFsbHkgc3R1bXBlZCBhcyB0byB3aG9tIHRvIHNlbmQgdGhlIHJlcG9ydCwgc2VuZCBpdCB0byAKK2xpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcuIFRoYW5rcyBmb3IgeW91ciBoZWxwIGluIG1ha2luZyBMaW51eCBhcworc3RhYmxlIGFzIGh1bWFubHkgcG9zc2libGUuCisKK1doZXJlIGlzIHRoZSBPb3BzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3JtYWxseSB0aGUgT29wcyB0ZXh0IGlzIHJlYWQgZnJvbSB0aGUga2VybmVsIGJ1ZmZlcnMgYnkga2xvZ2QgYW5kCitoYW5kZWQgdG8gc3lzbG9nZCB3aGljaCB3cml0ZXMgaXQgdG8gYSBzeXNsb2cgZmlsZSwgdHlwaWNhbGx5CisvdmFyL2xvZy9tZXNzYWdlcyAoZGVwZW5kcyBvbiAvZXRjL3N5c2xvZy5jb25mKS4gIFNvbWV0aW1lcyBrbG9nZCBkaWVzLAoraW4gd2hpY2ggY2FzZSB5b3UgY2FuIHJ1biBkbWVzZyA+IGZpbGUgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBrZXJuZWwKK2J1ZmZlcnMgYW5kIHNhdmUgaXQuICBPciB5b3UgY2FuIGNhdCAvcHJvYy9rbXNnID4gZmlsZSwgaG93ZXZlciB5b3UKK2hhdmUgdG8gYnJlYWsgaW4gdG8gc3RvcCB0aGUgdHJhbnNmZXIsIGttc2cgaXMgYSAibmV2ZXIgZW5kaW5nIGZpbGUiLgorSWYgdGhlIG1hY2hpbmUgaGFzIGNyYXNoZWQgc28gYmFkbHkgdGhhdCB5b3UgY2Fubm90IGVudGVyIGNvbW1hbmRzIG9yCit0aGUgZGlzayBpcyBub3QgYXZhaWxhYmxlIHRoZW4geW91IGhhdmUgdGhyZWUgb3B0aW9ucyA6LQorCisoMSkgSGFuZCBjb3B5IHRoZSB0ZXh0IGZyb20gdGhlIHNjcmVlbiBhbmQgdHlwZSBpdCBpbiBhZnRlciB0aGUgbWFjaGluZQorICAgIGhhcyByZXN0YXJ0ZWQuICBNZXNzeSBidXQgaXQgaXMgdGhlIG9ubHkgb3B0aW9uIGlmIHlvdSBoYXZlIG5vdAorICAgIHBsYW5uZWQgZm9yIGEgY3Jhc2guCisKKygyKSBCb290IHdpdGggYSBzZXJpYWwgY29uc29sZSAoc2VlIERvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0KSwKKyAgICBydW4gYSBudWxsIG1vZGVtIHRvIGEgc2Vjb25kIG1hY2hpbmUgYW5kIGNhcHR1cmUgdGhlIG91dHB1dCB0aGVyZQorICAgIHVzaW5nIHlvdXIgZmF2b3VyaXRlIGNvbW11bmljYXRpb24gcHJvZ3JhbS4gIE1pbmljb20gd29ya3Mgd2VsbC4KKworKDMpIFBhdGNoIHRoZSBrZXJuZWwgd2l0aCBvbmUgb2YgdGhlIGNyYXNoIGR1bXAgcGF0Y2hlcy4gIFRoZXNlIHNhdmUKKyAgICBkYXRhIHRvIGEgZmxvcHB5IGRpc2sgb3IgdmlkZW8gcm9tIG9yIGEgc3dhcCBwYXJ0aXRpb24uICBOb25lIG9mCisgICAgdGhlc2UgYXJlIHN0YW5kYXJkIGtlcm5lbCBwYXRjaGVzIHNvIHlvdSBoYXZlIHRvIGZpbmQgYW5kIGFwcGx5CisgICAgdGhlbSB5b3Vyc2VsZi4gIFNlYXJjaCBrZXJuZWwgYXJjaGl2ZXMgZm9yIGttc2dkdW1wLCBsa2NkIGFuZAorICAgIG9vcHMrc21yYW0uCisKKworRnVsbCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiB0aGUgbWVzc2FnZSBmcm9tIExpbnVzIGJlbG93IGFwcGxpZXMgdG8gMi40IGtlcm5lbC4gIEkgaGF2ZSBwcmVzZXJ2ZWQgaXQKK2ZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGFuZCBiZWNhdXNlIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGluIGl0IHN0aWxsCithcHBsaWVzLiAgRXNwZWNpYWxseSwgcGxlYXNlIGlnbm9yZSBhbnkgcmVmZXJlbmNlcyB0byBrc3ltb29wcy4gCisKK0Zyb206IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKworSG93IHRvIHRyYWNrIGRvd24gYW4gT29wcy4uIFtvcmlnaW5hbGx5IGEgbWFpbCB0byBsaW51eC1rZXJuZWxdCisKK1RoZSBtYWluIHRyaWNrIGlzIGhhdmluZyA1IHllYXJzIG9mIGV4cGVyaWVuY2Ugd2l0aCB0aG9zZSBwZXNreSBvb3BzIAorbWVzc2FnZXMgOy0pCisKK0FjdHVhbGx5LCB0aGVyZSBhcmUgdGhpbmdzIHlvdSBjYW4gZG8gdGhhdCBtYWtlIHRoaXMgZWFzaWVyLiBJIGhhdmUgdHdvIAorc2VwYXJhdGUgYXBwcm9hY2hlczoKKworCWdkYiAvdXNyL3NyYy9saW51eC92bWxpbnV4CisJZ2RiPiBkaXNhc3NlbWJsZSA8b2ZmZW5kaW5nX2Z1bmN0aW9uPgorCitUaGF0J3MgdGhlIGVhc3kgd2F5IHRvIGZpbmQgdGhlIHByb2JsZW0sIGF0IGxlYXN0IGlmIHRoZSBidWctcmVwb3J0IGlzIAord2VsbCBtYWRlIChsaWtlIHRoaXMgb25lIHdhcyAtIHJ1biB0aHJvdWdoIGtzeW1vb3BzIHRvIGdldCB0aGUgCitpbmZvcm1hdGlvbiBvZiB3aGljaCBmdW5jdGlvbiBhbmQgdGhlIG9mZnNldCBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCAKK2hhcHBlbmVkIGluKS4KKworT2gsIGl0IGhlbHBzIGlmIHRoZSByZXBvcnQgaGFwcGVucyBvbiBhIGtlcm5lbCB0aGF0IGlzIGNvbXBpbGVkIHdpdGggdGhlIAorc2FtZSBjb21waWxlciBhbmQgc2ltaWxhciBzZXR1cHMuCisKK1RoZSBvdGhlciB0aGluZyB0byBkbyBpcyBkaXNhc3NlbWJsZSB0aGUgIkNvZGU6IiBwYXJ0IG9mIHRoZSBidWcgcmVwb3J0OiAKK2tzeW1vb3BzIHdpbGwgZG8gdGhpcyB0b28gd2l0aCB0aGUgY29ycmVjdCB0b29scywgYnV0IGlmIHlvdSBkb24ndCBoYXZlCit0aGUgdG9vbHMgeW91IGNhbiBqdXN0IGRvIGEgc2lsbHkgcHJvZ3JhbToKKworCWNoYXIgc3RyW10gPSAiXHhYWFx4WFhceFhYLi4uIjsKKwltYWluKCl7fQorCithbmQgY29tcGlsZSBpdCB3aXRoIGdjYyAtZyBhbmQgdGhlbiBkbyAiZGlzYXNzZW1ibGUgc3RyIiAod2hlcmUgdGhlICJYWCIgCitzdHVmZiBhcmUgdGhlIHZhbHVlcyByZXBvcnRlZCBieSB0aGUgT29wcyAtIHlvdSBjYW4ganVzdCBjdXQtYW5kLXBhc3RlIAorYW5kIGRvIGEgcmVwbGFjZSBvZiBzcGFjZXMgdG8gIlx4IiAtIHRoYXQncyB3aGF0IEkgZG8sIGFzIEknbSB0b28gbGF6eSAKK3RvIHdyaXRlIGEgcHJvZ3JhbSB0byBhdXRvbWF0ZSB0aGlzIGFsbCkuCisKK0ZpbmFsbHksIGlmIHlvdSB3YW50IHRvIHNlZSB3aGVyZSB0aGUgY29kZSBjb21lcyBmcm9tLCB5b3UgY2FuIGRvCisKKwljZCAvdXNyL3NyYy9saW51eAorCW1ha2UgZnMvYnVmZmVyLnMgCSMgb3Igd2hhdGV2ZXIgZmlsZSB0aGUgYnVnIGhhcHBlbmVkIGluCisKK2FuZCB0aGVuIHlvdSBnZXQgYSBiZXR0ZXIgaWRlYSBvZiB3aGF0IGhhcHBlbnMgdGhhbiB3aXRoIHRoZSBnZGIgCitkaXNhc3NlbWJseS4KKworTm93LCB0aGUgdHJpY2sgaXMganVzdCB0aGVuIHRvIGNvbWJpbmUgYWxsIHRoZSBkYXRhIHlvdSBoYXZlOiB0aGUgQyAKK3NvdXJjZXMgKGFuZCBnZW5lcmFsIGtub3dsZWRnZSBvZiB3aGF0IGl0IF9zaG91bGRfIGRvKSwgdGhlIGFzc2VtYmx5IAorbGlzdGluZyBhbmQgdGhlIGNvZGUgZGlzYXNzZW1ibHkgKGFuZCBhZGRpdGlvbmFsbHkgdGhlIHJlZ2lzdGVyIGR1bXAgeW91IAorYWxzbyBnZXQgZnJvbSB0aGUgIm9vcHMiIG1lc3NhZ2UgLSB0aGF0IGNhbiBiZSB1c2VmdWwgdG8gc2VlIF93aGF0XyB0aGUgCitjb3JydXB0ZWQgcG9pbnRlcnMgd2VyZSwgYW5kIHdoZW4geW91IGhhdmUgdGhlIGFzc2VtYmxlciBsaXN0aW5nIHlvdSBjYW4gCithbHNvIG1hdGNoIHRoZSBvdGhlciByZWdpc3RlcnMgdG8gd2hhdGV2ZXIgQyBleHByZXNzaW9ucyB0aGV5IHdlcmUgdXNlZCAKK2ZvcikuCisKK0Vzc2VudGlhbGx5LCB5b3UganVzdCBsb29rIGF0IHdoYXQgZG9lc24ndCBtYXRjaCAoaW4gdGhpcyBjYXNlIGl0IHdhcyB0aGUgCisiQ29kZSIgZGlzYXNzZW1ibHkgdGhhdCBkaWRuJ3QgbWF0Y2ggd2l0aCB3aGF0IHRoZSBjb21waWxlciBnZW5lcmF0ZWQpLiAKK1RoZW4geW91IG5lZWQgdG8gZmluZCBvdXQgX3doeV8gdGhleSBkb24ndCBtYXRjaC4gT2Z0ZW4gaXQncyBzaW1wbGUgLSB5b3UgCitzZWUgdGhhdCB0aGUgY29kZSB1c2VzIGEgTlVMTCBwb2ludGVyIGFuZCB0aGVuIHlvdSBsb29rIGF0IHRoZSBjb2RlIGFuZCAKK3dvbmRlciBob3cgdGhlIE5VTEwgcG9pbnRlciBnb3QgdGhlcmUsIGFuZCBpZiBpdCdzIGEgdmFsaWQgdGhpbmcgdG8gZG8gCit5b3UganVzdCBjaGVjayBhZ2FpbnN0IGl0Li4KKworTm93LCBpZiBzb21lYm9keSBnZXRzIHRoZSBpZGVhIHRoYXQgdGhpcyBpcyB0aW1lLWNvbnN1bWluZyBhbmQgcmVxdWlyZXMgCitzb21lIHNtYWxsIGFtb3VudCBvZiBjb25jZW50cmF0aW9uLCB5b3UncmUgcmlnaHQuIFdoaWNoIGlzIHdoeSBJIHdpbGwgCittb3N0bHkganVzdCBpZ25vcmUgYW55IHBhbmljIHJlcG9ydHMgdGhhdCBkb24ndCBoYXZlIHRoZSBzeW1ib2wgdGFibGUgCitpbmZvIGV0YyBsb29rZWQgdXA6IGl0IHNpbXBseSBnZXRzIHRvbyBoYXJkIHRvIGxvb2sgaXQgdXAgKEkgaGF2ZSBzb21lIAorcHJvZ3JhbXMgdG8gc2VhcmNoIGZvciBzcGVjaWZpYyBwYXR0ZXJucyBpbiB0aGUga2VybmVsIGNvZGUgc2VnbWVudCwgYW5kIAorc29tZXRpbWVzIEkgaGF2ZSBiZWVuIGFibGUgdG8gbG9vayB1cCB0aG9zZSBraW5kcyBvZiBwYW5pY3MgdG9vLCBidXQgCit0aGF0IHJlYWxseSByZXF1aXJlcyBwcmV0dHkgZ29vZCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBqdXN0IHRvIGJlIGFibGUgCit0byBwaWNrIG91dCB0aGUgcmlnaHQgc2VxdWVuY2VzIGV0Yy4uKQorCitfU29tZXRpbWVzXyBpdCBoYXBwZW5zIHRoYXQgSSBqdXN0IHNlZSB0aGUgZGlzYXNzZW1ibGVkIGNvZGUgc2VxdWVuY2UgCitmcm9tIHRoZSBwYW5pYywgYW5kIEkga25vdyBpbW1lZGlhdGVseSB3aGVyZSBpdCdzIGNvbWluZyBmcm9tLiBUaGF0J3Mgd2hlbiAKK0kgZ2V0IHdvcnJpZWQgdGhhdCBJJ3ZlIGJlZW4gZG9pbmcgdGhpcyBmb3IgdG9vIGxvbmcgOy0pCisKKwkJTGludXMKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05vdGVzIG9uIE9vcHMgdHJhY2luZyB3aXRoIGtsb2dkOgorCitJbiBvcmRlciB0byBoZWxwIExpbnVzIGFuZCB0aGUgb3RoZXIga2VybmVsIGRldmVsb3BlcnMgdGhlcmUgaGFzIGJlZW4KK3N1YnN0YW50aWFsIHN1cHBvcnQgaW5jb3Jwb3JhdGVkIGludG8ga2xvZ2QgZm9yIHByb2Nlc3NpbmcgcHJvdGVjdGlvbgorZmF1bHRzLiAgSW4gb3JkZXIgdG8gaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIGFkZHJlc3MgcmVzb2x1dGlvbiBhdCBsZWFzdAordmVyc2lvbiAxLjMtcGwzIG9mIHRoZSBzeXNrbG9nZCBwYWNrYWdlIHNob3VsZCBiZSB1c2VkLgorCitXaGVuIGEgcHJvdGVjdGlvbiBmYXVsdCBvY2N1cnMgdGhlIGtsb2dkIGRhZW1vbiBhdXRvbWF0aWNhbGx5Cit0cmFuc2xhdGVzIGltcG9ydGFudCBhZGRyZXNzZXMgaW4gdGhlIGtlcm5lbCBsb2cgbWVzc2FnZXMgdG8gdGhlaXIKK3N5bWJvbGljIGVxdWl2YWxlbnRzLiAgVGhpcyB0cmFuc2xhdGVkIGtlcm5lbCBtZXNzYWdlIGlzIHRoZW4KK2ZvcndhcmRlZCB0aHJvdWdoIHdoYXRldmVyIHJlcG9ydGluZyBtZWNoYW5pc20ga2xvZ2QgaXMgdXNpbmcuICBUaGUKK3Byb3RlY3Rpb24gZmF1bHQgbWVzc2FnZSBjYW4gYmUgc2ltcGx5IGN1dCBvdXQgb2YgdGhlIG1lc3NhZ2UgZmlsZXMKK2FuZCBmb3J3YXJkZWQgdG8gdGhlIGtlcm5lbCBkZXZlbG9wZXJzLgorCitUd28gdHlwZXMgb2YgYWRkcmVzcyByZXNvbHV0aW9uIGFyZSBwZXJmb3JtZWQgYnkga2xvZ2QuICBUaGUgZmlyc3QgaXMKK3N0YXRpYyB0cmFuc2xhdGlvbiBhbmQgdGhlIHNlY29uZCBpcyBkeW5hbWljIHRyYW5zbGF0aW9uLiAgU3RhdGljCit0cmFuc2xhdGlvbiB1c2VzIHRoZSBTeXN0ZW0ubWFwIGZpbGUgaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgdGhhdAora3N5bW9vcHMgZG9lcy4gIEluIG9yZGVyIHRvIGRvIHN0YXRpYyB0cmFuc2xhdGlvbiB0aGUga2xvZ2QgZGFlbW9uCittdXN0IGJlIGFibGUgdG8gZmluZCBhIHN5c3RlbSBtYXAgZmlsZSBhdCBkYWVtb24gaW5pdGlhbGl6YXRpb24gdGltZS4KK1NlZSB0aGUga2xvZ2QgbWFuIHBhZ2UgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyBrbG9nZCBzZWFyY2hlcyBmb3IgbWFwCitmaWxlcy4KKworRHluYW1pYyBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGltcG9ydGFudCB3aGVuIGtlcm5lbCBsb2FkYWJsZSBtb2R1bGVzCithcmUgYmVpbmcgdXNlZC4gIFNpbmNlIG1lbW9yeSBmb3Iga2VybmVsIG1vZHVsZXMgaXMgYWxsb2NhdGVkIGZyb20gdGhlCitrZXJuZWwncyBkeW5hbWljIG1lbW9yeSBwb29scyB0aGVyZSBhcmUgbm8gZml4ZWQgbG9jYXRpb25zIGZvciBlaXRoZXIKK3RoZSBzdGFydCBvZiB0aGUgbW9kdWxlIG9yIGZvciBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgaW4gdGhlIG1vZHVsZS4KKworVGhlIGtlcm5lbCBzdXBwb3J0cyBzeXN0ZW0gY2FsbHMgd2hpY2ggYWxsb3cgYSBwcm9ncmFtIHRvIGRldGVybWluZQord2hpY2ggbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB0aGVpciBsb2NhdGlvbiBpbiBtZW1vcnkuICBVc2luZyB0aGVzZQorc3lzdGVtIGNhbGxzIHRoZSBrbG9nZCBkYWVtb24gYnVpbGRzIGEgc3ltYm9sIHRhYmxlIHdoaWNoIGNhbiBiZSB1c2VkCit0byBkZWJ1ZyBhIHByb3RlY3Rpb24gZmF1bHQgd2hpY2ggb2NjdXJzIGluIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZS4KKworQXQgdGhlIHZlcnkgbWluaW11bSBrbG9nZCB3aWxsIHByb3ZpZGUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aGljaAorZ2VuZXJhdGVkIHRoZSBwcm90ZWN0aW9uIGZhdWx0LiAgVGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgc3ltYm9saWMKK2luZm9ybWF0aW9uIGF2YWlsYWJsZSBpZiB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBsb2FkYWJsZSBtb2R1bGUgY2hvc2UgdG8KK2V4cG9ydCBzeW1ib2wgaW5mb3JtYXRpb24gZnJvbSB0aGUgbW9kdWxlLgorCitTaW5jZSB0aGUga2VybmVsIG1vZHVsZSBlbnZpcm9ubWVudCBjYW4gYmUgZHluYW1pYyB0aGVyZSBtdXN0IGJlIGEKK21lY2hhbmlzbSBmb3Igbm90aWZ5aW5nIHRoZSBrbG9nZCBkYWVtb24gd2hlbiBhIGNoYW5nZSBpbiBtb2R1bGUKK2Vudmlyb25tZW50IG9jY3Vycy4gIFRoZXJlIGFyZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBhdmFpbGFibGUgd2hpY2gKK2FsbG93IGtsb2dkIHRvIHNpZ25hbCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBkYWVtb24gdGhhdCBzeW1ib2wKK2luZm9ybWF0aW9uIHNob3VsZCBiZSByZWZyZXNoZWQuICBTZWUgdGhlIGtsb2dkIG1hbnVhbCBwYWdlIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworQSBwYXRjaCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBzeXNrbG9nZCBkaXN0cmlidXRpb24gd2hpY2ggbW9kaWZpZXMgdGhlCittb2R1bGVzLTIuMC4wIHBhY2thZ2UgdG8gYXV0b21hdGljYWxseSBzaWduYWwga2xvZ2Qgd2hlbmV2ZXIgYSBtb2R1bGUKK2lzIGxvYWRlZCBvciB1bmxvYWRlZC4gIEFwcGx5aW5nIHRoaXMgcGF0Y2ggcHJvdmlkZXMgZXNzZW50aWFsbHkKK3NlYW1sZXNzIHN1cHBvcnQgZm9yIGRlYnVnZ2luZyBwcm90ZWN0aW9uIGZhdWx0cyB3aGljaCBvY2N1ciB3aXRoCitrZXJuZWwgbG9hZGFibGUgbW9kdWxlcy4KKworVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGEgcHJvdGVjdGlvbiBmYXVsdCBpbiBhIGxvYWRhYmxlIG1vZHVsZQorcHJvY2Vzc2VkIGJ5IGtsb2dkOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6IFVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyByZXF1ZXN0IGF0IHZpcnR1YWwgYWRkcmVzcyBmMTVlOTdjYworQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiBjdXJyZW50LT50c3MuY3IzID0gMDA2MmQwMDAsICVjcjMgPSAwMDYyZDAwMAorQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiAqcGRlID0gMDAwMDAwMDAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogT29wczogMDAwMgorQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiBDUFU6ICAgIDAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogRUlQOiAgICAwMDEwOltvb3BzOl9vb3BzKzE2LzM4NjhdCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6IEVGTEFHUzogMDAwMTAyMTIKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogZWF4OiAzMTVlOTdjYyAgIGVieDogMDAzYTZmODAgICBlY3g6IDAwMWJlNzdiICAgZWR4OiAwMDIzN2MwYworQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiBlc2k6IDAwMDAwMDAwICAgZWRpOiBiZmZmZmRiMyAgIGVicDogMDA1ODlmOTAgICBlc3A6IDAwNTg5ZjhjCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6IGRzOiAwMDE4ICAgZXM6IDAwMTggICBmczogMDAyYiAgIGdzOiAwMDJiICAgc3M6IDAwMTgKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogUHJvY2VzcyBvb3BzX3Rlc3QgKHBpZDogMzM3NCwgcHJvY2VzcyBucjogMjEsIHN0YWNrcGFnZT0wMDU4OTAwMCkKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogU3RhY2s6IDMxNWU5N2NjIDAwNTg5Zjk4IDAxMDBiMGI0IGJmZmZmZWQ0IDAwMTJlMzhlIDAwMjQwYzY0IDAwM2E2ZjgwIDAwMDAwMDAxIAorQXVnIDI5IDA5OjUxOjAxIGJsaXphcmQga2VybmVsOiAgICAgICAgMDAwMDAwMDAgMDAyMzc4MTAgYmZmZmZmMDAgMDAxMGE3ZmEgMDAwMDAwMDMgMDAwMDAwMDEgMDAwMDAwMDAgYmZmZmZmMDAgCitBdWcgMjkgMDk6NTE6MDEgYmxpemFyZCBrZXJuZWw6ICAgICAgICBiZmZmZmRiMyBiZmZmZmVkNCBmZmZmZmZkYSAwMDAwMDAyYiAwMDA3MDAyYiAwMDAwMDAyYiAwMDAwMDAyYiAwMDAwMDAzNiAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogQ2FsbCBUcmFjZTogW29vcHM6X29vcHNfaW9jdGwrNDgvODBdIFtfc3lzX2lvY3RsKzI1NC8yNzJdIFtfc3lzdGVtX2NhbGwrODIvMTI4XSAKK0F1ZyAyOSAwOTo1MTowMSBibGl6YXJkIGtlcm5lbDogQ29kZTogYzcgMDAgMDUgMDAgMDAgMDAgZWIgMDggOTAgOTAgOTAgOTAgOTAgOTAgOTAgOTAgODkgZWMgNWQgYzMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHIuIEcuVy4gV2V0dHN0ZWluICAgICAgICAgICBPbmNvbG9neSBSZXNlYXJjaCBEaXYuIENvbXB1dGluZyBGYWNpbGl0eQorUm9nZXIgTWFyaXMgQ2FuY2VyIENlbnRlciAgICBJTlRFUk5FVDogZ3JlZ0B3aW5kLnJtY2MuY29tCis4MjAgNHRoIFN0LiBOLgorRmFyZ28sIE5EICA1ODEyMgorUGhvbmU6IDcwMS0yMzQtNzU1NgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGFpbnRlZCBrZXJuZWxzOgorCitTb21lIG9vcHMgcmVwb3J0cyBjb250YWluIHRoZSBzdHJpbmcgJ1RhaW50ZWQ6ICcgYWZ0ZXIgdGhlIHByb2dyYW0KK2NvdW50ZXIsIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGtlcm5lbCBoYXMgYmVlbiB0YWludGVkIGJ5IHNvbWUKK21lY2hhbmlzbS4gIFRoZSBzdHJpbmcgaXMgZm9sbG93ZWQgYnkgYSBzZXJpZXMgb2YgcG9zaXRpb24gc2Vuc2l0aXZlCitjaGFyYWN0ZXJzLCBlYWNoIHJlcHJlc2VudGluZyBhIHBhcnRpY3VsYXIgdGFpbnRlZCB2YWx1ZS4KKworICAxOiAnRycgaWYgYWxsIG1vZHVsZXMgbG9hZGVkIGhhdmUgYSBHUEwgb3IgY29tcGF0aWJsZSBsaWNlbnNlLCAnUCcgaWYKKyAgICAgYW55IHByb3ByaWV0YXJ5IG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuICBNb2R1bGVzIHdpdGhvdXQgYQorICAgICBNT0RVTEVfTElDRU5TRSBvciB3aXRoIGEgTU9EVUxFX0xJQ0VOU0UgdGhhdCBpcyBub3QgcmVjb2duaXNlZCBieQorICAgICBpbnNtb2QgYXMgR1BMIGNvbXBhdGlibGUgYXJlIGFzc3VtZWQgdG8gYmUgcHJvcHJpZXRhcnkuCisKKyAgMjogJ0YnIGlmIGFueSBtb2R1bGUgd2FzIGZvcmNlIGxvYWRlZCBieSBpbnNtb2QgLWYsICcgJyBpZiBhbGwKKyAgICAgbW9kdWxlcyB3ZXJlIGxvYWRlZCBub3JtYWxseS4KKworICAzOiAnUycgaWYgdGhlIG9vcHMgb2NjdXJyZWQgb24gYW4gU01QIGtlcm5lbCBydW5uaW5nIG9uIGhhcmR3YXJlIHRoYXQKKyAgICAgIGhhc24ndCBiZWVuIGNlcnRpZmllZCBhcyBzYWZlIHRvIHJ1biBtdWx0aXByb2Nlc3Nvci4KKwkgIEN1cnJlbnRseSB0aGlzIG9jY3VycyBvbmx5IG9uIHZhcmlvdXMgQXRobG9ucyB0aGF0IGFyZSBub3QKKwkgIFNNUCBjYXBhYmxlLgorCitUaGUgcHJpbWFyeSByZWFzb24gZm9yIHRoZSAnVGFpbnRlZDogJyBzdHJpbmcgaXMgdG8gdGVsbCBrZXJuZWwKK2RlYnVnZ2VycyBpZiB0aGlzIGlzIGEgY2xlYW4ga2VybmVsIG9yIGlmIGFueXRoaW5nIHVudXN1YWwgaGFzCitvY2N1cnJlZC4gIFRhaW50aW5nIGlzIHBlcm1hbmVudCwgZXZlbiBpZiBhbiBvZmZlbmRpbmcgbW9kdWxlIGlzCit1bmxvYWRpbmcgdGhlIHRhaW50ZWQgdmFsdWUgcmVtYWlucyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBrZXJuZWwgaXMgbm90Cit0cnVzdHdvcnRoeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGFyaWRlLnR4dCBiL0RvY3VtZW50YXRpb24vcGFyaWRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDMxMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0CkBAIC0wLDAgKzEsNDE3IEBACisKKwkJTGludXggYW5kIHBhcmFsbGVsIHBvcnQgSURFIGRldmljZXMKKworUEFSSURFIHYxLjAzICAgKGMpIDE5OTctOCAgR3JhbnQgR3VlbnRoZXIgPGdyYW50QHRvcnF1ZS5uZXQ+CisKKzEuIEludHJvZHVjdGlvbgorCitPd2luZyB0byB0aGUgc2ltcGxpY2l0eSBhbmQgbmVhciB1bml2ZXJzYWxpdHkgb2YgdGhlIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlCit0byBwZXJzb25hbCBjb21wdXRlcnMsIG1hbnkgZXh0ZXJuYWwgZGV2aWNlcyBzdWNoIGFzIHBvcnRhYmxlIGhhcmQtZGlzaywKK0NELVJPTSwgTFMtMTIwIGFuZCB0YXBlIGRyaXZlcyB1c2UgdGhlIHBhcmFsbGVsIHBvcnQgdG8gY29ubmVjdCB0byB0aGVpcgoraG9zdCBjb21wdXRlci4gIFdoaWxlIHNvbWUgZGV2aWNlcyAobm90YWJseSBzY2FubmVycykgdXNlIGFkLWhvYyBtZXRob2RzCit0byBwYXNzIGNvbW1hbmRzIGFuZCBkYXRhIHRocm91Z2ggdGhlIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlLCBtb3N0IAorZXh0ZXJuYWwgZGV2aWNlcyBhcmUgYWN0dWFsbHkgaWRlbnRpY2FsIHRvIGFuIGludGVybmFsIG1vZGVsLCBidXQgd2l0aAorYSBwYXJhbGxlbC1wb3J0IGFkYXB0ZXIgY2hpcCBhZGRlZCBpbi4gIFNvbWUgb2YgdGhlIG9yaWdpbmFsIHBhcmFsbGVsIHBvcnQKK2FkYXB0ZXJzIHdlcmUgbGl0dGxlIG1vcmUgdGhhbiBtZWNoYW5pc21zIGZvciBtdWx0aXBsZXhpbmcgYSBTQ1NJIGJ1cy4KKyhUaGUgSW9tZWdhIFBQQS0zIGFkYXB0ZXIgdXNlZCBpbiB0aGUgWklQIGRyaXZlcyBpcyBhbiBleGFtcGxlIG9mIHRoaXMKK2FwcHJvYWNoKS4gIE1vc3QgY3VycmVudCBkZXNpZ25zLCBob3dldmVyLCB0YWtlIGEgZGlmZmVyZW50IGFwcHJvYWNoLgorVGhlIGFkYXB0ZXIgY2hpcCByZXByb2R1Y2VzIGEgc21hbGwgSVNBIG9yIElERSBidXMgaW4gdGhlIGV4dGVybmFsIGRldmljZQorYW5kIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIHByb3ZpZGVzIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKK2RldmljZSByZWdpc3RlcnMsIGFzIHdlbGwgYXMgZGF0YSBibG9jayB0cmFuc2ZlciBmdW5jdGlvbnMuICBTb21ldGltZXMsCit0aGUgZGV2aWNlIGJlaW5nIGFkZHJlc3NlZCB2aWEgdGhlIHBhcmFsbGVsIGNhYmxlIGlzIGEgc3RhbmRhcmQgU0NTSQorY29udHJvbGxlciBsaWtlIGFuIE5DUiA1MzgwLiAgVGhlICJkaXR0byIgZmFtaWx5IG9mIGV4dGVybmFsIHRhcGUKK2RyaXZlcyB1c2UgdGhlIElTQSByZXBsaWNhdG9yIHRvIGludGVyZmFjZSBhIGZsb3BweSBkaXNrIGNvbnRyb2xsZXIsCit3aGljaCBpcyB0aGVuIGNvbm5lY3RlZCB0byBhIGZsb3BweS10YXBlIG1lY2hhbmlzbS4gIFRoZSB2YXN0IG1ham9yaXR5CitvZiBleHRlcm5hbCBwYXJhbGxlbCBwb3J0IGRldmljZXMsIGhvd2V2ZXIsIGFyZSBub3cgYmFzZWQgb24gc3RhbmRhcmQKK0lERSB0eXBlIGRldmljZXMsIHdoaWNoIHJlcXVpcmUgbm8gaW50ZXJtZWRpYXRlIGNvbnRyb2xsZXIuICBJZiBvbmUKK3dlcmUgdG8gb3BlbiB1cCBhIHBhcmFsbGVsIHBvcnQgQ0QtUk9NIGRyaXZlLCBmb3IgaW5zdGFuY2UsIG9uZSB3b3VsZAorZmluZCBhIHN0YW5kYXJkIEFUQVBJIENELVJPTSBkcml2ZSwgYSBwb3dlciBzdXBwbHksIGFuZCBhIHNpbmdsZSBhZGFwdGVyCit0aGF0IGludGVyY29ubmVjdGVkIGEgc3RhbmRhcmQgUEMgcGFyYWxsZWwgcG9ydCBjYWJsZSBhbmQgYSBzdGFuZGFyZAorSURFIGNhYmxlLiAgSXQgaXMgdXN1YWxseSBwb3NzaWJsZSB0byBleGNoYW5nZSB0aGUgQ0QtUk9NIGRldmljZSB3aXRoCithbnkgb3RoZXIgZGV2aWNlIHVzaW5nIHRoZSBJREUgaW50ZXJmYWNlLiAKKworVGhlIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3VwcG9ydCBpbiBMaW51eCBmb3IgcGFyYWxsZWwgcG9ydCBJREUKK2RldmljZXMuICBJdCBkb2VzIG5vdCBjb3ZlciBwYXJhbGxlbCBwb3J0IFNDU0kgZGV2aWNlcywgImRpdHRvIiB0YXBlCitkcml2ZXMgb3Igc2Nhbm5lcnMuICBNYW55IGRpZmZlcmVudCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIAorcGFyYWxsZWwgcG9ydCBJREUgc3Vic3lzdGVtLCBpbmNsdWRpbmc6CisKKwlNaWNyb1NvbHV0aW9ucyBiYWNrcGFjayBDRC1ST00KKwlNaWNyb1NvbHV0aW9ucyBiYWNrcGFjayBQRC9DRAorCU1pY3JvU29sdXRpb25zIGJhY2twYWNrIGhhcmQtZHJpdmVzCisJTWljcm9Tb2x1dGlvbnMgYmFja3BhY2sgODAwMHQgdGFwZSBkcml2ZQorCVN5UXVlc3QgRVotMTM1LCBFWi0yMzAgJiBTcGFyUSBkcml2ZXMKKwlBdmF0YXIgU2hhcmsKKwlJbWF0aW9uIFN1cGVyZGlzayBMUy0xMjAKKwlNYXhlbGwgU3VwZXJkaXNrIExTLTEyMAorCUZyZWVDb20gUG93ZXIgQ0QgCisJSGV3bGV0dC1QYWNrYXJkIDVHQiBhbmQgOEdCIHRhcGUgZHJpdmVzCisJSGV3bGV0dC1QYWNrYXJkIDcxMDAgYW5kIDcyMDAgQ0QtUlcgZHJpdmVzCisKK2FzIHdlbGwgYXMgbW9zdCBvZiB0aGUgY2xvbmUgYW5kIG5vLW5hbWUgcHJvZHVjdHMgb24gdGhlIG1hcmtldC4KKworVG8gc3VwcG9ydCBzdWNoIGEgd2lkZSByYW5nZSBvZiBkZXZpY2VzLCBQQVJJREUsIHRoZSBwYXJhbGxlbCBwb3J0IElERQorc3Vic3lzdGVtLCBpcyBhY3R1YWxseSBzdHJ1Y3R1cmVkIGluIHRocmVlIHBhcnRzLiAgIFRoZXJlIGlzIGEgYmFzZQorcGFyaWRlIG1vZHVsZSB3aGljaCBwcm92aWRlcyBhIHJlZ2lzdHJ5IGFuZCBzb21lIGNvbW1vbiBtZXRob2RzIGZvcgorYWNjZXNzaW5nIHRoZSBwYXJhbGxlbCBwb3J0cy4gIFRoZSBzZWNvbmQgY29tcG9uZW50IGlzIGEgc2V0IG9mIAoraGlnaC1sZXZlbCBkcml2ZXJzIGZvciBlYWNoIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc3VwcG9ydGVkIGRldmljZXM6IAorCisJcGQJSURFIGRpc2sKKwlwY2QJQVRBUEkgQ0QtUk9NCisJcGYJQVRBUEkgZGlzaworCXB0CUFUQVBJIHRhcGUKKwlwZwlBVEFQSSBnZW5lcmljCisKKyhDdXJyZW50bHksIHRoZSBwZyBkcml2ZXIgaXMgb25seSB1c2VkIHdpdGggQ0QtUiBkcml2ZXMpLgorCitUaGUgaGlnaC1sZXZlbCBkcml2ZXJzIGZ1bmN0aW9uIGFjY29yZGluZyB0byB0aGUgcmVsZXZhbnQgc3RhbmRhcmRzLgorVGhlIHRoaXJkIGNvbXBvbmVudCBvZiBQQVJJREUgaXMgYSBzZXQgb2YgbG93LWxldmVsIHByb3RvY29sIGRyaXZlcnMKK2ZvciBlYWNoIG9mIHRoZSBwYXJhbGxlbCBwb3J0IElERSBhZGFwdGVyIGNoaXBzLiAgVGhhbmtzIHRvIHRoZSBpbnRlcmVzdAorYW5kIGVuY291cmFnZW1lbnQgb2YgTGludXggdXNlcnMgZnJvbSBtYW55IHBhcnRzIG9mIHRoZSB3b3JsZCwgCitzdXBwb3J0IGlzIGF2YWlsYWJsZSBmb3IgYWxtb3N0IGFsbCBrbm93biBhZGFwdGVyIHByb3RvY29sczoKKworICAgICAgICBhdGVuICAgIEFURU4gRUgtMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIChISykKKyAgICAgICAgYnBjayAgICBNaWNyb3NvbHV0aW9ucyBiYWNrcGFjayAgICAgICAgICAgICAgICAoVVMpCisgICAgICAgIGNvbW0gICAgRGF0YVN0b3IgKG9sZC10eXBlKSAiY29tbXV0ZXIiIGFkYXB0ZXIgKFRXKQorICAgICAgICBkc3RyICAgIERhdGFTdG9yIEVQLTIwMDAgICAgICAgICAgICAgICAgICAgICAgIChUVykKKyAgICAgICAgZXBhdCAgICBTaHV0dGxlIEVQQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUspCisgICAgICAgIGVwaWEgICAgU2h1dHRsZSBFUElBICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVLKQorCWZpdDIgICAgRklUIFRELTIwMDAJCQkgICAgICAgKFVTKQorCWZpdDMgICAgRklUIFRELTMwMDAJCQkgICAgICAgKFVTKQorCWZyaXEgICAgRnJlZWNvbSBJUSBjYWJsZSAgICAgICAgICAgICAgICAgICAgICAgKERFKQorICAgICAgICBmcnB3ICAgIEZyZWVjb20gUG93ZXIgICAgICAgICAgICAgICAgICAgICAgICAgIChERSkKKyAgICAgICAga2JpYyAgICBLaW5nQnl0ZSBLQklDLTk1MUEgYW5kIEtCSUMtOTcxQSAgICAgICAoVFcpCisJa3R0aSAgICBLVCBUZWNobm9sb2d5IFBIZCBhZGFwdGVyICAgICAgICAgICAgICAoU0cpCisgICAgICAgIG9uMjAgICAgT25TcGVjIDkwYzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVTKQorICAgICAgICBvbjI2ICAgIE9uU3BlYyA5MGMyNiAgICAgICAgICAgICAgICAgICAgICAgICAgIChVUykKKworCisyLiBVc2luZyB0aGUgUEFSSURFIHN1YnN5c3RlbQorCitXaGlsZSBjb25maWd1cmluZyB0aGUgTGludXgga2VybmVsLCB5b3UgbWF5IGNob29zZSBlaXRoZXIgdG8gYnVpbGQKK3RoZSBQQVJJREUgZHJpdmVycyBpbnRvIHlvdXIga2VybmVsLCBvciB0byBidWlsZCB0aGVtIGFzIG1vZHVsZXMuCisKK0luIGVpdGhlciBjYXNlLCB5b3Ugd2lsbCBuZWVkIHRvIHNlbGVjdCAiUGFyYWxsZWwgcG9ydCBJREUgZGV2aWNlIHN1cHBvcnQiCithcyB3ZWxsIGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgaGlnaC1sZXZlbCBkcml2ZXJzIGFuZCBhdCBsZWFzdCBvbmUKK29mIHRoZSBwYXJhbGxlbCBwb3J0IGNvbW11bmljYXRpb24gcHJvdG9jb2xzLiAgSWYgeW91IGRvIG5vdCBrbm93Cit3aGF0IGtpbmQgb2YgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIGlzIHVzZWQgaW4geW91ciBkcml2ZSwgeW91IGNvdWxkCitiZWdpbiBieSBjaGVja2luZyB0aGUgZmlsZSBuYW1lcyBhbmQgYW55IHRleHQgZmlsZXMgb24geW91ciBET1MgCitpbnN0YWxsYXRpb24gZmxvcHB5LiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBsb29rIGF0IHRoZSBtYXJraW5ncyBvbgordGhlIGFkYXB0ZXIgY2hpcCBpdHNlbGYuICBUaGF0J3MgdXN1YWxseSBzdWZmaWNpZW50IHRvIGlkZW50aWZ5IHRoZQorY29ycmVjdCBkZXZpY2UuICAKKworWW91IGNhbiBhY3R1YWxseSBzZWxlY3QgYWxsIHRoZSBwcm90b2NvbCBtb2R1bGVzLCBhbmQgYWxsb3cgdGhlIFBBUklERQorc3Vic3lzdGVtIHRvIHRyeSB0aGVtIGFsbCBmb3IgeW91LgorCitGb3IgdGhlICJicmFuZC1uYW1lIiBwcm9kdWN0cyBsaXN0ZWQgYWJvdmUsIGhlcmUgYXJlIHRoZSBwcm90b2NvbAorYW5kIGhpZ2gtbGV2ZWwgZHJpdmVycyB0aGF0IHlvdSB3b3VsZCB1c2U6CisKKwlNYW51ZmFjdHVyZXIJCU1vZGVsCQlEcml2ZXIJUHJvdG9jb2wKKwkKKwlNaWNyb1NvbHV0aW9ucwkJQ0QtUk9NCQlwY2QJYnBjaworCU1pY3JvU29sdXRpb25zCQlQRCBkcml2ZQlwZglicGNrCisJTWljcm9Tb2x1dGlvbnMJCWhhcmQtZHJpdmUJcGQJYnBjaworCU1pY3JvU29sdXRpb25zICAgICAgICAgIDgwMDB0IHRhcGUgICAgICBwdCAgICAgIGJwY2sKKwlTeVF1ZXN0CQkJRVosIFNwYXJRCXBkCWVwYXQKKwlJbWF0aW9uCQkJU3VwZXJkaXNrCXBmCWVwYXQKKwlNYXhlbGwgICAgICAgICAgICAgICAgICBTdXBlcmRpc2sgICAgICAgcGYgICAgICBmcmlxCisJQXZhdGFyCQkJU2hhcmsJCXBkCWVwYXQKKwlGcmVlQ29tCQkJQ0QtUk9NCQlwY2QJZnJwdworCUhld2xldHQtUGFja2FyZAkJNUdCIFRhcGUJcHQJZXBhdAorCUhld2xldHQtUGFja2FyZAkJNzIwMGUgKENEKQlwY2QJZXBhdAorCUhld2xldHQtUGFja2FyZAkJNzIwMGUgKENELVIpCXBnCWVwYXQKKworMi4xICBDb25maWd1cmluZyBidWlsdC1pbiBkcml2ZXJzCisKK1dlIHJlY29tbWVuZCB0aGF0IHlvdSBnZXQgdG8ga25vdyBob3cgdGhlIGRyaXZlcnMgd29yayBhbmQgaG93IHRvCitjb25maWd1cmUgdGhlbSBhcyBsb2FkYWJsZSBtb2R1bGVzLCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjb21waWxlIGEKK2tlcm5lbCB3aXRoIHRoZSBkcml2ZXJzIGJ1aWx0LWluLgorCitJZiB5b3UgYnVpbHQgYWxsIG9mIHlvdXIgUEFSSURFIHN1cHBvcnQgZGlyZWN0bHkgaW50byB5b3VyIGtlcm5lbCwKK2FuZCB5b3UgaGF2ZSBqdXN0IGEgc2luZ2xlIHBhcmFsbGVsIHBvcnQgSURFIGRldmljZSwgeW91ciBrZXJuZWwgc2hvdWxkCitsb2NhdGUgaXQgYXV0b21hdGljYWxseSBmb3IgeW91LiAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBkZXZpY2UsCit5b3UgbWF5IG5lZWQgdG8gZ2l2ZSBzb21lIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHlvdXIgYm9vdGxvYWRlcgorKGVnOiBMSUxPKSwgaG93IHRvIGRvIHRoYXQgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgorCitUaGUgaGlnaC1sZXZlbCBkcml2ZXJzIGFjY2VwdCBhIG51bWJlciBvZiBjb21tYW5kIGxpbmUgcGFyYW1ldGVycywgYWxsCitvZiB3aGljaCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgc291cmNlIGZpbGVzIGluIGxpbnV4L2RyaXZlcnMvYmxvY2svcGFyaWRlLgorQnkgZGVmYXVsdCwgZWFjaCBkcml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSBhbGwgcGFyYWxsZWwgcG9ydHMgaXQKK2NhbiBmaW5kLCBhbmQgYWxsIHByb3RvY29sIHR5cGVzIHRoYXQgaGF2ZSBiZWVuIGluc3RhbGxlZCwgdW50aWwgaXQgZmluZHMKK2EgcGFyYWxsZWwgcG9ydCBJREUgYWRhcHRlci4gIE9uY2UgaXQgZmluZHMgb25lLCB0aGUgcHJvYmUgc3RvcHMuICBTbywKK2lmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgZGV2aWNlLCB5b3Ugd2lsbCBuZWVkIHRvIHRlbGwgdGhlIGRyaXZlcnMKK2hvdyB0byBpZGVudGlmeSB0aGVtLiAgVGhpcyByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSBwb3J0IGFkZHJlc3MsIHRoZQorcHJvdG9jb2wgaWRlbnRpZmljYXRpb24gbnVtYmVyIGFuZCwgZm9yIHNvbWUgZGV2aWNlcywgdGhlIGRyaXZlJ3MKK2NoYWluIElELiAgV2hpbGUgeW91ciBzeXN0ZW0gaXMgYm9vdGluZywgYSBudW1iZXIgb2YgbWVzc2FnZXMgYXJlCitkaXNwbGF5ZWQgb24gdGhlIGNvbnNvbGUuICBMaWtlIGFsbCBzdWNoIG1lc3NhZ2VzLCB0aGV5IGNhbiBiZQorcmV2aWV3ZWQgd2l0aCB0aGUgJ2RtZXNnJyBjb21tYW5kLiAgQW1vbmcgdGhvc2UgbWVzc2FnZXMgd2lsbCBiZQorc29tZSBsaW5lcyBsaWtlOgorCisJcGFyaWRlOiBicGNrIHJlZ2lzdGVyZWQgYXMgcHJvdG9jb2wgMAorCXBhcmlkZTogZXBhdCByZWdpc3RlcmVkIGFzIHByb3RvY29sIDEKKworVGhlIG51bWJlcnMgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgdW50aWwgeW91IGJ1aWxkIGEgbmV3IGtlcm5lbCB3aXRoCitkaWZmZXJlbnQgcHJvdG9jb2wgc2VsZWN0aW9ucy4gIFlvdSBzaG91bGQgbm90ZSB0aGVzZSBudW1iZXJzIGFzIHlvdQord2lsbCBuZWVkIHRoZW0gdG8gaWRlbnRpZnkgdGhlIGRldmljZXMuCisKK0lmIHlvdSBoYXBwZW4gdG8gYmUgdXNpbmcgYSBNaWNyb1NvbHV0aW9ucyBiYWNrcGFjayBkZXZpY2UsIHlvdSB3aWxsCithbHNvIG5lZWQgdG8ga25vdyB0aGUgdW5pdCBJRCBudW1iZXIgZm9yIGVhY2ggZHJpdmUuICBUaGlzIGlzIHVzdWFsbHkKK3RoZSBsYXN0IHR3byBkaWdpdHMgb2YgdGhlIGRyaXZlJ3Mgc2VyaWFsIG51bWJlciAoYnV0IHJlYWQgTWljcm9Tb2x1dGlvbnMnCitkb2N1bWVudGF0aW9uIGFib3V0IHRoaXMpLgorCitBcyBhbiBleGFtcGxlLCBsZXQncyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBhIE1pY3JvU29sdXRpb25zIFBEL0NEIGRyaXZlCit3aXRoIHVuaXQgSUQgbnVtYmVyIDM2IGNvbm5lY3RlZCB0byB0aGUgcGFyYWxsZWwgcG9ydCBhdCAweDM3OCwgYSBTeVF1ZXN0IAorRVotMTM1IGNvbm5lY3RlZCB0byB0aGUgY2hhaW5lZCBwb3J0IG9uIHRoZSBQRC9DRCBkcml2ZSBhbmQgYWxzbyBhbiAKK0ltYXRpb24gU3VwZXJkaXNrIGNvbm5lY3RlZCB0byBwb3J0IDB4Mjc4LiAgWW91IGNvdWxkIGdpdmUgdGhlIGZvbGxvd2luZyAKK29wdGlvbnMgb24geW91ciBib290IGNvbW1hbmQ6CisKKwlwZC5kcml2ZTA9MHgzNzgsMSBwZi5kcml2ZTA9MHgyNzgsMSBwZi5kcml2ZTE9MHgzNzgsMCwzNgorCitJbiB0aGUgbGFzdCBvcHRpb24sIHBmLmRyaXZlMSBjb25maWd1cmVzIGRldmljZSAvZGV2L3BmMSwgdGhlIDB4Mzc4CitpcyB0aGUgcGFyYWxsZWwgcG9ydCBiYXNlIGFkZHJlc3MsIHRoZSAwIGlzIHRoZSBwcm90b2NvbCByZWdpc3RyYXRpb24KK251bWJlciBhbmQgMzYgaXMgdGhlIGNoYWluIElELgorCitQbGVhc2Ugbm90ZTogIHdoaWxlIFBBUklERSB3aWxsIHdvcmsgYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSAKK1BBUlBPUlQgcGFyYWxsZWwgcG9ydCBzaGFyaW5nIHN5c3RlbSB0aGF0IGlzIGluY2x1ZGVkIGJ5IHRoZQorIlBhcmFsbGVsIHBvcnQgc3VwcG9ydCIgb3B0aW9uLCBQQVJQT1JUIG11c3QgYmUgaW5jbHVkZWQgYW5kIGVuYWJsZWQKK2lmIHlvdSB3YW50IHRvIHVzZSBjaGFpbnMgb2YgZGV2aWNlcyBvbiB0aGUgc2FtZSBwYXJhbGxlbCBwb3J0LgorCisyLjIgIExvYWRpbmcgYW5kIGNvbmZpZ3VyaW5nIFBBUklERSBhcyBtb2R1bGVzCisKK0l0IGlzIG11Y2ggZmFzdGVyIGFuZCBzaW1wbGVyIHRvIGdldCB0byB1bmRlcnN0YW5kIHRoZSBQQVJJREUgZHJpdmVycworaWYgeW91IHVzZSB0aGVtIGFzIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGVzLiAgIAorCitOb3RlIDE6ICB1c2luZyB0aGVzZSBkcml2ZXJzIHdpdGggdGhlICJrZXJuZWxkIiBhdXRvbWF0aWMgbW9kdWxlIGxvYWRpbmcKK3N5c3RlbSBpcyBub3QgcmVjb21tZW5kZWQgZm9yIGJlZ2lubmVycywgYW5kIGlzIG5vdCBkb2N1bWVudGVkIGhlcmUuICAKKworTm90ZSAyOiAgaWYgeW91IGJ1aWxkIFBBUlBPUlQgc3VwcG9ydCBhcyBhIGxvYWRhYmxlIG1vZHVsZSwgUEFSSURFIG11c3QKK2Fsc28gYmUgYnVpbHQgYXMgbG9hZGFibGUgbW9kdWxlcywgYW5kIFBBUlBPUlQgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZQorUEFSSURFIG1vZHVsZXMuCisKK1RvIHVzZSBQQVJJREUsIHlvdSBtdXN0IGJlZ2luIGJ5IAorCisJaW5zbW9kIHBhcmlkZQorCit0aGlzIGxvYWRzIGEgYmFzZSBtb2R1bGUgd2hpY2ggcHJvdmlkZXMgYSByZWdpc3RyeSBmb3IgdGhlIHByb3RvY29scywKK2Ftb25nIG90aGVyIHRhc2tzLgorCitUaGVuLCBsb2FkIGFzIG1hbnkgb2YgdGhlIHByb3RvY29sIG1vZHVsZXMgYXMgeW91IHRoaW5rIHlvdSBtaWdodCBuZWVkLgorQXMgeW91IGxvYWQgZWFjaCBtb2R1bGUsIGl0IHdpbGwgcmVnaXN0ZXIgdGhlIHByb3RvY29scyB0aGF0IGl0IHN1cHBvcnRzLAorYW5kIHByaW50IGEgbG9nIG1lc3NhZ2UgdG8geW91ciBrZXJuZWwgbG9nIGZpbGUgYW5kIHlvdXIgY29uc29sZS4gRm9yIAorZXhhbXBsZToKKworCSMgaW5zbW9kIGVwYXQKKwlwYXJpZGU6IGVwYXQgcmVnaXN0ZXJlZCBhcyBwcm90b2NvbCAwCisJIyBpbnNtb2Qga2JpYworCXBhcmlkZTogazk1MSByZWdpc3RlcmVkIGFzIHByb3RvY29sIDEKKyAgICAgICAgcGFyaWRlOiBrOTcxIHJlZ2lzdGVyZWQgYXMgcHJvdG9jb2wgMgorCitGaW5hbGx5LCB5b3UgY2FuIGxvYWQgaGlnaC1sZXZlbCBkcml2ZXJzIGZvciBlYWNoIGtpbmQgb2YgZGV2aWNlIHRoYXQKK3lvdSBoYXZlIGNvbm5lY3RlZC4gIEJ5IGRlZmF1bHQsIGVhY2ggZHJpdmVyIHdpbGwgYXV0b3Byb2JlIGZvciBhIHNpbmdsZSAKK2RldmljZSwgYnV0IHlvdSBjYW4gc3VwcG9ydCB1cCB0byBmb3VyIHNpbWlsYXIgZGV2aWNlcyBieSBnaXZpbmcgdGhlaXIKK2luZGl2aWR1YWwgY28tb3JkaW5hdGVzIHdoZW4geW91IGxvYWQgdGhlIGRyaXZlci4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgdHdvIG5vLW5hbWUgQ0QtUk9NIGRyaXZlcyBib3RoIHVzaW5nIHRoZQorS2luZ0J5dGUgS0JJQy05NTFBIGFkYXB0ZXIsIG9uZSBvbiBwb3J0IDB4Mzc4IGFuZCB0aGUgb3RoZXIgb24gMHgzYmMKK3lvdSBjb3VsZCBnaXZlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCSMgaW5zbW9kIHBjZCBkcml2ZTA9MHgzNzgsMSBkcml2ZTE9MHgzYmMsMQorCitGb3IgbW9zdCBhZGFwdGVycywgZ2l2aW5nIGEgcG9ydCBhZGRyZXNzIGFuZCBwcm90b2NvbCBudW1iZXIgaXMgc3VmZmljaWVudCwKK2J1dCBjaGVjayB0aGUgc291cmNlIGZpbGVzIGluIGxpbnV4L2RyaXZlcnMvYmxvY2svcGFyaWRlIGZvciBtb3JlIAoraW5mb3JtYXRpb24uICAoSG9wZWZ1bGx5IHNvbWVvbmUgd2lsbCB3cml0ZSBzb21lIG1hbiBwYWdlcyBvbmUgZGF5ICEpLgorCitBcyBhbm90aGVyIGV4YW1wbGUsIGhlcmUncyB3aGF0IGhhcHBlbnMgd2hlbiBQQVJQT1JUIGlzIGluc3RhbGxlZCwgYW5kCithIFN5UXVlc3QgRVotMTM1IGlzIGF0dGFjaGVkIHRvIHBvcnQgMHgzNzg6CisKKwkjIGluc21vZCBwYXJpZGUKKwlwYXJpZGU6IHZlcnNpb24gMS4wIGluc3RhbGxlZAorCSMgaW5zbW9kIGVwYXQKKwlwYXJpZGU6IGVwYXQgcmVnaXN0ZXJlZCBhcyBwcm90b2NvbCAwCisJIyBpbnNtb2QgcGQKKwlwZDogcGQgdmVyc2lvbiAxLjAsIG1ham9yIDQ1LCBjbHVzdGVyIDY0LCBuaWNlIDAKKwlwZGE6IFNoYXJpbmcgcGFycG9ydDEgYXQgMHgzNzgKKwlwZGE6IGVwYXQgMS4wLCBTaHV0dGxlIEVQQVQgY2hpcCBjMyBhdCAweDM3OCwgbW9kZSA1IChFUFAtMzIpLCBkZWxheSAxCisJcGRhOiBTeVF1ZXN0IEVaMTM1QSwgMjYyMTQ0IGJsb2NrcyBbMTI4TV0sICg1MTIvMTYvMzIpLCByZW1vdmFibGUgbWVkaWEKKwkgcGRhOiBwZGExCisKK05vdGUgdGhhdCB0aGUgbGFzdCBsaW5lIGlzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ2VuZXJpYyBwYXJ0aXRpb24gdGFibGUKK3NjYW5uZXIgLSBpbiB0aGlzIGNhc2UgaXQgcmVwb3J0cyB0aGF0IGl0IGhhcyBmb3VuZCBhIGRpc2sgd2l0aCBvbmUgcGFydGl0aW9uLgorCisyLjMgIFVzaW5nIGEgUEFSSURFIGRldmljZQorCitPbmNlIHRoZSBkcml2ZXJzIGhhdmUgYmVlbiBsb2FkZWQsIHlvdSBjYW4gYWNjZXNzIFBBUklERSBkZXZpY2VzIGluIHRoZQorc2FtZSB3YXkgYXMgdGhlaXIgdHJhZGl0aW9uYWwgY291bnRlcnBhcnRzLiAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0bworY3JlYXRlIHRoZSBkZXZpY2UgInNwZWNpYWwgZmlsZXMiLiAgSGVyZSBpcyBhIHNpbXBsZSBzY3JpcHQgdGhhdCB5b3UgY2FuCitjdXQgdG8gYSBmaWxlIGFuZCBleGVjdXRlOgorCisjIS9iaW4vYmFzaAorIworIyBta2QgLS0gYSBzY3JpcHQgdG8gY3JlYXRlIHRoZSBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBmb3IgdGhlIFBBUklERSBzdWJzeXN0ZW0KKyMKK2Z1bmN0aW9uIG1rZGV2IHsKKyAgbWtub2QgJDEgJDIgJDMgJDQgOyBjaG1vZCAwNjYwICQxIDsgY2hvd24gcm9vdDpkaXNrICQxCit9CisjCitmdW5jdGlvbiBwZCB7CisgIEQ9JCggcHJpbnRmIFxcJCggcHJpbnRmICJ4JTAzeCIgJFsgJDEgKyA5NyBdICkgKQorICBta2RldiBwZCREIGIgNDUgJFsgJDEgKiAxNiBdCisgIGZvciBQIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1CisgIGRvIG1rZGV2IHBkJEQkUCBiIDQ1ICRbICQxICogMTYgKyAkUCBdCisgIGRvbmUKK30KKyMKK2NkIC9kZXYKKyMKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBwZCAkdSA7IGRvbmUKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBwY2QkdSBiIDQ2ICR1IDsgZG9uZSAKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBwZiR1ICBiIDQ3ICR1IDsgZG9uZSAKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBwdCR1ICBjIDk2ICR1IDsgZG9uZSAKK2ZvciB1IGluIDAgMSAyIDMgOyBkbyBta2RldiBucHQkdSBjIDk2ICRbICR1ICsgMTI4IF0gOyBkb25lIAorZm9yIHUgaW4gMCAxIDIgMyA7IGRvIG1rZGV2IHBnJHUgIGMgOTcgJHUgOyBkb25lIAorIworIyBlbmQgb2YgbWtkCisKK1dpdGggdGhlIGRldmljZSBmaWxlcyBhbmQgZHJpdmVycyBpbiBwbGFjZSwgeW91IGNhbiBhY2Nlc3MgUEFSSURFIGRldmljZXMKK2xpa2UgYW55IG90aGVyIExpbnV4IGRldmljZS4gICBGb3IgZXhhbXBsZSwgdG8gbW91bnQgYSBDRC1ST00gaW4gcGNkMCwgdXNlOgorCisJbW91bnQgL2Rldi9wY2QwIC9jZHJvbQorCitJZiB5b3UgaGF2ZSBhIGZyZXNoIEF2YXRhciBTaGFyayBjYXJ0cmlkZ2UsIGFuZCB0aGUgZHJpdmUgaXMgcGRhLCB5b3UKK21pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgorCisJZmRpc2sgL2Rldi9wZGEJCS0tIG1ha2UgYSBuZXcgcGFydGl0aW9uIHRhYmxlIHdpdGgKKwkJCQkgICBwYXJ0aXRpb24gMSBvZiB0eXBlIDgzCisKKwlta2UyZnMgL2Rldi9wZGExCS0tIHRvIGJ1aWxkIHRoZSBmaWxlIHN5c3RlbQorCisJbWtkaXIgL3NoYXJrCQktLSBtYWtlIGEgcGxhY2UgdG8gbW91bnQgdGhlIGRpc2sKKworCW1vdW50IC9kZXYvcGRhMSAvc2hhcmsKKworRGV2aWNlcyBsaWtlIHRoZSBJbWF0aW9uIHN1cGVyZGlzayB3b3JrIGluIHRoZSBzYW1lIHdheSwgZXhjZXB0IHRoYXQKK3RoZXkgZG8gbm90IGhhdmUgYSBwYXJ0aXRpb24gdGFibGUuICBGb3IgZXhhbXBsZSB0byBtYWtlIGEgMTIwTUIKK2Zsb3BweSB0aGF0IHlvdSBjb3VsZCBzaGFyZSB3aXRoIGEgRE9TIHN5c3RlbToKKworCW1rZG9zZnMgL2Rldi9wZjAKKwltb3VudCAvZGV2L3BmMCAvbW50CisKKworMi40ICBUaGUgcGYgZHJpdmVyCisKK1RoZSBwZiBkcml2ZXIgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIHBhcmFsbGVsIHBvcnQgQVRBUEkgZGlzaworZGV2aWNlcy4gIFRoZSBtb3N0IGNvbW1vbiBkZXZpY2VzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIFBEIGRyaXZlcworYW5kIExTLTEyMCBkcml2ZXMuICBUcmFkaXRpb25hbGx5LCBtZWRpYSBmb3IgdGhlc2UgZGV2aWNlcyBhcmUgbm90CitwYXJ0aXRpb25lZC4gIENvbnNlcXVlbnRseSwgdGhlIHBmIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpdGlvbmVkCittZWRpYS4gIFRoaXMgbWF5IGJlIGNoYW5nZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiAKKworMi41ICBVc2luZyB0aGUgcHQgZHJpdmVyCisKK1RoZSBwdCBkcml2ZXIgZm9yIHBhcmFsbGVsIHBvcnQgQVRBUEkgdGFwZSBkcml2ZXMgaXMgYSBtaW5pbWFsIGRyaXZlci4KK0l0IGRvZXMgbm90IHlldCBzdXBwb3J0IG1hbnkgb2YgdGhlIHN0YW5kYXJkIHRhcGUgaW9jdGwgb3BlcmF0aW9ucy4gCitGb3IgYmVzdCBwZXJmb3JtYW5jZSwgYSBibG9jayBzaXplIG9mIDMyS0Igc2hvdWxkIGJlIHVzZWQuICBZb3Ugd2lsbAorcHJvYmFibHkgd2FudCB0byBzZXQgdGhlIHBhcmFsbGVsIHBvcnQgZGVsYXkgdG8gMCwgaWYgeW91IGNhbi4KKworMi42ICBVc2luZyB0aGUgcGcgZHJpdmVyCisKK1RoZSBwZyBkcml2ZXIgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgY2RyZWNvcmQgcHJvZ3JhbQordG8gY3JlYXRlIENELVJPTXMuICBQbGVhc2UgZ2V0IGNkcmVjb3JkIHZlcnNpb24gMS42LjEgb3IgbGF0ZXIKK2Zyb20gZnRwOi8vZnRwLmZva3VzLmdtZC5kZS9wdWIvdW5peC9jZHJlY29yZC8gLiAgVG8gcmVjb3JkIENELVIgbWVkaWEgCit5b3VyIHBhcmFsbGVsIHBvcnQgc2hvdWxkIGlkZWFsbHkgYmUgc2V0IHRvIEVQUCBtb2RlLCBhbmQgdGhlICJwb3J0IGRlbGF5IiAKK3Nob3VsZCBiZSBzZXQgdG8gMC4gIFdpdGggdGhvc2Ugc2V0dGluZ3MgaXQgaXMgcG9zc2libGUgdG8gcmVjb3JkIGF0IDJ4IAorc3BlZWQgd2l0aG91dCBhbnkgYnVmZmVyIHVuZGVycnVucy4gIElmIHlvdSBjYW5ub3QgZ2V0IHRoZSBkcml2ZXIgdG8gd29yaworaW4gRVBQIG1vZGUsIHRyeSB0byB1c2UgImJpZGlyZWN0aW9uYWwiIG9yICJQUy8yIiBtb2RlIGFuZCAxeCBzcGVlZHMgb25seS4KKworCiszLiBUcm91Ymxlc2hvb3RpbmcKKworMy4xICBVc2UgRVBQIG1vZGUgaWYgeW91IGNhbgorCitUaGUgbW9zdCBjb21tb24gcHJvYmxlbXMgdGhhdCBwZW9wbGUgcmVwb3J0IHdpdGggdGhlIFBBUklERSBkcml2ZXJzCitjb25jZXJuIHRoZSBwYXJhbGxlbCBwb3J0IENNT1Mgc2V0dGluZ3MuICBBdCB0aGlzIHRpbWUsIG5vbmUgb2YgdGhlCitQQVJJREUgcHJvdG9jb2wgbW9kdWxlcyBzdXBwb3J0IEVDUCBtb2RlLCBvciBhbnkgRUNQIGNvbWJpbmF0aW9uIG1vZGVzLgorSWYgeW91IGFyZSBhYmxlIHRvIGRvIHNvLCBwbGVhc2Ugc2V0IHlvdXIgcGFyYWxsZWwgcG9ydCBpbnRvIEVQUCBtb2RlCit1c2luZyB5b3VyIENNT1Mgc2V0dXAgcHJvY2VkdXJlLgorCiszLjIgIENoZWNrIHRoZSBwb3J0IGRlbGF5CisKK1NvbWUgcGFyYWxsZWwgcG9ydHMgY2Fubm90IHJlbGlhYmx5IHRyYW5zZmVyIGRhdGEgYXQgZnVsbCBzcGVlZC4gIFRvCitvZmZzZXQgdGhlIGVycm9ycywgdGhlIFBBUklERSBwcm90b2NvbCBtb2R1bGVzIGludHJvZHVjZSBhICJwb3J0CitkZWxheSIgYmV0d2VlbiBlYWNoIGFjY2VzcyB0byB0aGUgaS9vIHBvcnRzLiAgRWFjaCBwcm90b2NvbCBzZXRzCithIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgZGVsYXkuICBJbiBtb3N0IGNhc2VzLCB0aGUgdXNlciBjYW4gb3ZlcnJpZGUKK3RoZSBkZWZhdWx0IGFuZCBzZXQgaXQgdG8gMCAtIHJlc3VsdGluZyBpbiBzb21ld2hhdCBoaWdoZXIgdHJhbnNmZXIKK3JhdGVzLiAgSW4gc29tZSByYXJlIGNhc2VzIChlc3BlY2lhbGx5IHdpdGggb2xkZXIgNDg2IHN5c3RlbXMpIHRoZQorZGVmYXVsdCBkZWxheXMgYXJlIG5vdCBsb25nIGVub3VnaC4gIGlmIHlvdSBleHBlcmllbmNlIGNvcnJ1cHQgZGF0YQordHJhbnNmZXJzLCBvciB1bmV4cGVjdGVkIGZhaWx1cmVzLCB5b3UgbWF5IHdpc2ggdG8gaW5jcmVhc2UgdGhlCitwb3J0IGRlbGF5LiAgIFRoZSBkZWxheSBjYW4gYmUgcHJvZ3JhbW1lZCB1c2luZyB0aGUgImRyaXZlTiIgcGFyYW1ldGVycwordG8gZWFjaCBvZiB0aGUgaGlnaC1sZXZlbCBkcml2ZXJzLiAgUGxlYXNlIHNlZSB0aGUgbm90ZXMgYWJvdmUsIG9yCityZWFkIHRoZSBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkcml2ZXIgc291cmNlIGZpbGVzIGluCitsaW51eC9kcml2ZXJzL2Jsb2NrL3BhcmlkZS4KKworMy4zICBTb21lIGRyaXZlcyBuZWVkIGEgcHJpbnRlciByZXNldAorCitUaGVyZSBhcHBlYXIgdG8gYmUgYSBudW1iZXIgb2YgIm5vbmFtZSIgZXh0ZXJuYWwgZHJpdmVzIG9uIHRoZSBtYXJrZXQKK3RoYXQgZG8gbm90IGFsd2F5cyBwb3dlciB1cCBjb3JyZWN0bHkuICBXZSBoYXZlIG5vdGljZWQgdGhpcyB3aXRoIHNvbWUKK2RyaXZlcyBiYXNlZCBvbiBPblNwZWMgYW5kIG9sZGVyIEZyZWVjb20gYWRhcHRlcnMuICBJbiB0aGVzZSByYXJlIGNhc2VzLAordGhlIGFkYXB0ZXIgY2FuIG9mdGVuIGJlIHJlaW5pdGlhbGlzZWQgYnkgaXNzdWluZyBhICJwcmludGVyIHJlc2V0IiBvbgordGhlIHBhcmFsbGVsIHBvcnQuICBBcyB0aGUgcmVzZXQgb3BlcmF0aW9uIGlzIHBvdGVudGlhbGx5IGRpc3J1cHRpdmUgaW4gCittdWx0aXBsZSBkZXZpY2UgZW52aXJvbm1lbnRzLCB0aGUgUEFSSURFIGRyaXZlcnMgd2lsbCBub3QgZG8gaXQgCithdXRvbWF0aWNhbGx5LiAgWW91IGNhbiBob3dldmVyLCBmb3JjZSBhIHByaW50ZXIgcmVzZXQgYnkgZG9pbmc6CisKKwlpbnNtb2QgbHAgcmVzZXQ9MQorCXJtbW9kIGxwCisKK0lmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBtYXJnaW5hbCBjYXNlcywgeW91IHNob3VsZCBwcm9iYWJseSBidWlsZAoreW91ciBwYXJpZGUgZHJpdmVycyBhcyBtb2R1bGVzLCBhbmQgYXJyYW5nZSB0byBkbyB0aGUgcHJpbnRlciByZXNldAorYmVmb3JlIGxvYWRpbmcgdGhlIFBBUklERSBkcml2ZXJzLiAKKworMy40ICBVc2UgdGhlIHZlcmJvc2Ugb3B0aW9uIGFuZCBkbWVzZyBpZiB5b3UgbmVlZCBoZWxwCisKK1doaWxlIGEgbG90IG9mIHRlc3RpbmcgaGFzIGdvbmUgaW50byB0aGVzZSBkcml2ZXJzIHRvIG1ha2UgdGhlbSB3b3JrCithcyBzbW9vdGhseSBhcyBwb3NzaWJsZSwgcHJvYmxlbXMgd2lsbCBhcmlzZS4gIElmIHlvdSBkbyBoYXZlIHByb2JsZW1zLAorcGxlYXNlIGNoZWNrIGFsbCB0aGUgb2J2aW91cyB0aGluZ3MgZmlyc3Q6ICBkb2VzIHRoZSBkcml2ZSB3b3JrIGluCitET1Mgd2l0aCB0aGUgbWFudWZhY3R1cmVyJ3MgZHJpdmVycyA/ICBJZiB0aGF0IGRvZXNuJ3QgeWllbGQgYW55IHVzZWZ1bAorY2x1ZXMsIHRoZW4gcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIGRyaXZlIGlzIGhvb2tlZCB0byB5b3VyIHN5c3RlbSwKK2FuZCB0aGF0IGVpdGhlciAoYSkgUEFSUE9SVCBpcyBlbmFibGVkIG9yIChiKSBubyBvdGhlciBkZXZpY2UgZHJpdmVyCitpcyB1c2luZyB5b3VyIHBhcmFsbGVsIHBvcnQgKGNoZWNrIGluIC9wcm9jL2lvcG9ydHMpLiAgVGhlbiwgbG9hZCB0aGUKK2FwcHJvcHJpYXRlIGRyaXZlcnMgKHlvdSBjYW4gbG9hZCBzZXZlcmFsIHByb3RvY29sIG1vZHVsZXMgaWYgeW91IHdhbnQpCithcyBpbjoKKworCSMgaW5zbW9kIHBhcmlkZQorCSMgaW5zbW9kIGVwYXQKKwkjIGluc21vZCBicGNrCisJIyBpbnNtb2Qga2JpYworCS4uLgorCSMgaW5zbW9kIHBkIHZlcmJvc2U9MQorCisodXNpbmcgdGhlIGNvcnJlY3QgZHJpdmVyIGZvciB0aGUgdHlwZSBvZiBkZXZpY2UgeW91IGhhdmUsIG9mIGNvdXJzZSkuCitUaGUgdmVyYm9zZT0xIHBhcmFtZXRlciB3aWxsIGNhdXNlIHRoZSBkcml2ZXJzIHRvIGxvZyBhIHRyYWNlIG9mIHRoZWlyCithY3Rpdml0eSBhcyB0aGV5IGF0dGVtcHQgdG8gbG9jYXRlIHlvdXIgZHJpdmUuCisKK1VzZSAnZG1lc2cnIHRvIGNhcHR1cmUgYSBsb2cgb2YgYWxsIHRoZSBQQVJJREUgbWVzc2FnZXMgKGFueSBtZXNzYWdlcworYmVnaW5uaW5nIHdpdGggcGFyaWRlOiwgYSBwcm90b2NvbCBtb2R1bGUncyBuYW1lIG9yIGEgZHJpdmVyJ3MgbmFtZSkgYW5kCitpbmNsdWRlIHRoYXQgd2l0aCB5b3VyIGJ1ZyByZXBvcnQuICBZb3UgY2FuIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgaW4gb25lCitvZiB0d28gd2F5cy4gIEVpdGhlciBzZW5kIGl0IGRpcmVjdGx5IHRvIHRoZSBhdXRob3Igb2YgdGhlIFBBUklERSBzdWl0ZSwKK2J5IGUtbWFpbCB0byBncmFudEB0b3JxdWUubmV0LCBvciBqb2luIHRoZSBsaW51eC1wYXJwb3J0IG1haWxpbmcgbGlzdAorYW5kIHBvc3QgeW91ciByZXBvcnQgdGhlcmUuCisKKzMuNSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb3IgaGVscAorCitZb3UgY2FuIGpvaW4gdGhlIGxpbnV4LXBhcnBvcnQgbWFpbGluZyBsaXN0IGJ5IHNlbmRpbmcgYSBtYWlsIG1lc3NhZ2UKK3RvIAorCQlsaW51eC1wYXJwb3J0LXJlcXVlc3RAdG9ycXVlLm5ldAorCit3aXRoIHRoZSBzaW5nbGUgd29yZCAKKworCQlzdWJzY3JpYmUKKworaW4gdGhlIGJvZHkgb2YgdGhlIG1haWwgbWVzc2FnZSAobm90IGluIHRoZSBzdWJqZWN0IGxpbmUpLiAgIFBsZWFzZSBiZQorc3VyZSB0aGF0IHlvdXIgbWFpbCBwcm9ncmFtIGlzIGNvcnJlY3RseSBzZXQgdXAgd2hlbiB5b3UgZG8gdGhpcywgIGFzCit0aGUgbGlzdCBtYW5hZ2VyIGlzIGEgcm9ib3QgdGhhdCB3aWxsIHN1YnNjcmliZSB5b3UgdXNpbmcgdGhlIHJlcGx5CithZGRyZXNzIGluIHlvdXIgbWFpbCBoZWFkZXJzLiAgUkVNT1ZFIGFueSBhbnRpLXNwYW0gZ2ltbWlja3MgeW91IG1heQoraGF2ZSBpbiB5b3VyIG1haWwgaGVhZGVycywgd2hlbiBzZW5kaW5nIG1haWwgdG8gdGhlIGxpc3Qgc2VydmVyLgorCitZb3UgbWlnaHQgYWxzbyBmaW5kIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBsaW51eC1wYXJwb3J0Cit3ZWIgcGFnZXMgKGFsdGhvdWdoIHRoZXkgYXJlIG5vdCBhbHdheXMgdXAgdG8gZGF0ZSkgYXQKKworCWh0dHA6Ly93d3cudG9ycXVlLm5ldC9wYXJwb3J0LworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGFyaXNjLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9wYXJpc2MvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkMDYwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFyaXNjLzAwLUlOREVYCkBAIC0wLDAgKzEsNiBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZS4KK2RlYnVnZ2luZworCS0gc29tZSBkZWJ1Z2dpbmcgaGludHMgZm9yIHJlYWwtbW9kZSBjb2RlCityZWdpc3RlcnMKKwktIGN1cnJlbnQvcGxhbm5lZCB1c2FnZSBvZiByZWdpc3RlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGFyaXNjL2RlYnVnZ2luZyBiL0RvY3VtZW50YXRpb24vcGFyaXNjL2RlYnVnZ2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzI4NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wYXJpc2MvZGVidWdnaW5nCkBAIC0wLDAgKzEsMzkgQEAKK29rYXksIGhlcmUgYXJlIHNvbWUgaGludHMgZm9yIGRlYnVnZ2luZyB0aGUgbG93ZXItbGV2ZWwgcGFydHMgb2YKK2xpbnV4L3BhcmlzYy4KKworCisxLiBBYnNvbHV0ZSBhZGRyZXNzZXMKKworQSBsb3Qgb2YgdGhlIGFzc2VtYmx5IGNvZGUgY3VycmVudGx5IHJ1bnMgaW4gcmVhbCBtb2RlLCB3aGljaCBtZWFucworYWJzb2x1dGUgYWRkcmVzc2VzIGFyZSB1c2VkIGluc3RlYWQgb2YgdmlydHVhbCBhZGRyZXNzZXMgYXMgaW4gdGhlCityZXN0IG9mIHRoZSBrZXJuZWwuICBUbyB0cmFuc2xhdGUgYW4gYWJzb2x1dGUgYWRkcmVzcyB0byBhIHZpcnR1YWwKK2FkZHJlc3MgeW91IGNhbiBsb29rdXAgaW4gU3lzdGVtLm1hcCwgYWRkIF9fUEFHRV9PRkZTRVQgKDB4MTAwMDAwMDAKK2N1cnJlbnRseSkuCisKKworMi4gSFBNQ3MKKworV2hlbiByZWFsLW1vZGUgY29kZSB0cmllcyB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IG1lbW9yeSwgeW91J2xsIGdldAorYW4gSFBNQyBpbnN0ZWFkIG9mIGEga2VybmVsIG9vcHMuICBUbyBkZWJ1ZyBhbiBIUE1DLCB0cnkgdG8gZmluZAordGhlIFN5c3RlbSBSZXNwb25kZXIvUmVxdWVzdG9yIGFkZHJlc3Nlcy4gIFRoZSBTeXN0ZW0gUmVxdWVzdG9yCithZGRyZXNzIHNob3VsZCBtYXRjaCAob25lIG9mIHRoZSkgcHJvY2Vzc29yIEhQQXMgKGhpZ2ggYWRkcmVzc2VzIGluCit0aGUgSS9PIHJhbmdlKTsgdGhlIFN5c3RlbSBSZXNwb25kZXIgYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyByZWFsLW1vZGUKK2NvZGUgdHJpZWQgdG8gYWNjZXNzLgorCitUeXBpY2FsIHZhbHVlcyBmb3IgdGhlIFN5c3RlbSBSZXNwb25kZXIgYWRkcmVzcyBhcmUgYWRkcmVzc2VzIGxhcmdlcgordGhhbiBfX1BBR0VfT0ZGU0VUICgweDEwMDAwMDAwKSB3aGljaCBtZWFuIGEgdmlydHVhbCBhZGRyZXNzIGRpZG4ndAorZ2V0IHRyYW5zbGF0ZWQgdG8gYSBwaHlzaWNhbCBhZGRyZXNzIGJlZm9yZSByZWFsLW1vZGUgY29kZSB0cmllZCB0bworYWNjZXNzIGl0LgorCisKKzMuIFEgYml0IGZ1bgorCitDZXJ0YWluLCB2ZXJ5IGNyaXRpY2FsIGNvZGUgaGFzIHRvIGNsZWFyIHRoZSBRIGJpdCBpbiB0aGUgUFNXLiAgV2hhdAoraGFwcGVucyB3aGVuIHRoZSBRIGJpdCBpcyBjbGVhcmVkIGlzIHRoZSBDUFUgZG9lcyBub3QgdXBkYXRlIHRoZQorcmVnaXN0ZXJzIGludGVycnVwdGlvbiBoYW5kbGVycyByZWFkIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBtYWNoaW5lCit3YXMgaW50ZXJydXB0ZWQgLSBzbyBpZiB5b3UgZ2V0IGFuIGludGVycnVwdGlvbiBiZXR3ZWVuIHRoZSBpbnN0cnVjdGlvbgordGhhdCBjbGVhcnMgdGhlIFEgYml0IGFuZCB0aGUgUkZJIHRoYXQgc2V0cyBpdCBhZ2FpbiB5b3UgZG9uJ3Qga25vdword2hlcmUgZXhhY3RseSBpdCBoYXBwZW5lZC4gIElmIHlvdSdyZSBsdWNreSB0aGUgSUFPUSB3aWxsIHBvaW50IHRvIHRoZQoraW5zdHJ1Y2lvbiB0aGF0IGNsZWFyZWQgdGhlIFEgYml0LCBpZiB5b3UncmUgbm90IGl0IHBvaW50cyBhbnl3aGVyZQorYXQgYWxsLiAgVXN1YWxseSBRIGJpdCBwcm9ibGVtcyB3aWxsIHNob3cgdGhlbXNlbHZlcyBpbiB1bmV4cGxhaW5hYmxlCitzeXN0ZW0gaGFuZ3Mgb3IgcnVubmluZyBvZmYgdGhlIGVuZCBvZiBwaHlzaWNhbCBtZW1vcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BhcmlzYy9yZWdpc3RlcnMgYi9Eb2N1bWVudGF0aW9uL3BhcmlzYy9yZWdpc3RlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzY2FkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFyaXNjL3JlZ2lzdGVycwpAQCAtMCwwICsxLDEyMSBAQAorUmVnaXN0ZXIgVXNhZ2UgZm9yIExpbnV4L1BBLVJJU0MKKworWyBhbiBhc3RlcmlzayBpcyB1c2VkIGZvciBwbGFubmVkIHVzYWdlIHdoaWNoIGlzIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIF0KKworCUdlbmVyYWwgUmVnaXN0ZXJzIGFzIHNwZWNpZmllZCBieSBBQkkKKworCUNvbnRyb2wgUmVnaXN0ZXJzCisKK0NSIDAgKFJlY292ZXJ5IENvdW50ZXIpCQl1c2VkIGZvciBwdHJhY2UKK0NSIDEtQ1IgNyh1bmRlZmluZWQpCQl1bnVzZWQKK0NSIDggKFByb3RlY3Rpb24gSUQpCQlwZXItcHJvY2VzcyB2YWx1ZSoKK0NSIDksIDEyLCAxMyAoUElEUykJCXVudXNlZAorQ1IxMCAoQ0NSKQkJCWxhenkgRlBVIHNhdmluZyoKK0NSMTEJCQkJYXMgc3BlY2lmaWVkIGJ5IEFCSSAoU0FSKQorQ1IxNCAoaW50ZXJydXB0aW9uIHZlY3RvcikJaW5pdGlhbGl6ZWQgdG8gZmF1bHRfdmVjdG9yCitDUjE1IChFSUVNKQkJCWluaXRpYWxpemVkIHRvIGFsbCBvbmVzKgorQ1IxNiAoSW50ZXJ2YWwgVGltZXIpCQlyZWFkIGZvciBjeWNsZSBjb3VudC93cml0ZSBzdGFydHMgSW50ZXJ2YWwgVG1yCitDUjE3LUNSMjIJCQlpbnRlcnJ1cHRpb24gcGFyYW1ldGVycworQ1IxOQkJCQlJbnRlcnJ1cHQgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIKK0NSMjAJCQkJSW50ZXJydXB0IFNwYWNlIFJlZ2lzdGVyCitDUjIxCQkJCUludGVycnVwdCBPZmZzZXQgUmVnaXN0ZXIKK0NSMjIJCQkJSW50ZXJydXB0IFBTVworQ1IyMyAoRUlSUikJCQlyZWFkIGZvciBwZW5kaW5nIGludGVycnVwdHMvd3JpdGUgY2xlYXJzIGJpdHMKK0NSMjQgKFRSIDApCQkJS2VybmVsIFNwYWNlIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIKK0NSMjUgKFRSIDEpCQkJVXNlciAgIFNwYWNlIFBhZ2UgRGlyZWN0b3J5IFBvaW50ZXIKK0NSMjYgKFRSIDIpCQkJbm90IHVzZWQKK0NSMjcgKFRSIDMpCQkJVGhyZWFkIGRlc2NyaXB0b3IgcG9pbnRlcgorQ1IyOCAoVFIgNCkJCQlub3QgdXNlZAorQ1IyOSAoVFIgNSkJCQlub3QgdXNlZAorQ1IzMCAoVFIgNikJCQljdXJyZW50IC8gMAorQ1IzMSAoVFIgNykJCQlUZW1wb3JhcnkgcmVnaXN0ZXIsIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMKKworCVNwYWNlIFJlZ2lzdGVycyAoa2VybmVsIG1vZGUpCisKK1NSMAkJCQl0ZW1wb3Jhcnkgc3BhY2UgcmVnaXN0ZXIKK1NSNC1TUjcgCQkJc2V0IHRvIDAKK1NSMQkJCQl0ZW1wb3Jhcnkgc3BhY2UgcmVnaXN0ZXIKK1NSMgkJCQlrZXJuZWwgc2hvdWxkIG5vdCBjbG9iYmVyIHRoaXMKK1NSMwkJCQl1c2VkIGZvciB1c2Vyc3BhY2UgYWNjZXNzZXMgKGN1cnJlbnQgcHJvY2VzcykKKworCVNwYWNlIFJlZ2lzdGVycyAodXNlciBtb2RlKQorCitTUjAJCQkJdGVtcG9yYXJ5IHNwYWNlIHJlZ2lzdGVyCitTUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBzcGFjZSByZWdpc3RlcgorU1IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2xkcyBzcGFjZSBvZiBsaW51eCBnYXRld2F5IHBhZ2UKK1NSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHMgdXNlciBhZGRyZXNzIHNwYWNlIHZhbHVlIHdoaWxlIGluIGtlcm5lbAorU1I0LVNSNyAgICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHNob3J0IGFkZHJlc3Mgc3BhY2UgZm9yIHVzZXIva2VybmVsCisKKworCVByb2Nlc3NvciBTdGF0dXMgV29yZAorCitXICg2NC1iaXQgYWRkcmVzc2VzKQkJMAorRSAoTGl0dGxlLWVuZGlhbikJCTAKK1MgKFNlY3VyZSBJbnRlcnZhbCBUaW1lcikJMAorVCAoVGFrZW4gQnJhbmNoIFRyYXApCQkwCitIIChIaWdoZXItcHJpdmlsZWdlIHRyYXApCTAKK0wgKExvd2VyLXByaXZpbGVnZSB0cmFwKQkwCitOIChOdWxsaWZ5IG5leHQgaW5zdHJ1Y3Rpb24pCXVzZWQgYnkgQyBjb2RlCitYIChEYXRhIG1lbW9yeSBicmVhayBkaXNhYmxlKQkwCitCIChUYWtlbiBCcmFuY2gpCQl1c2VkIGJ5IEMgY29kZQorQyAoY29kZSBhZGRyZXNzIHRyYW5zbGF0aW9uKQkxLCAwIHdoaWxlIGV4ZWN1dGluZyByZWFsLW1vZGUgY29kZQorViAoZGl2aWRlIHN0ZXAgY29ycmVjdGlvbikJdXNlZCBieSBDIGNvZGUKK00gKEhQTUMgbWFzaykJCQkwLCAxIHdoaWxlIGV4ZWN1dGluZyBIUE1DIGhhbmRsZXIqCitDL0IgKGNhcnJ5L2JvcnJvdyBiaXRzKQkJdXNlZCBieSBDIGNvZGUKK08gKG9yZGVyZWQgcmVmZXJlbmNlcykJCTEqCitGIChwZXJmb3JtYW5jZSBtb25pdG9yKQkJMAorUiAoUmVjb3ZlcnkgQ291bnRlciB0cmFwKQkwCitRIChjb2xsZWN0IGludGVycnVwdGlvbiBzdGF0ZSkJMSAoMCBpbiBjb2RlIGRpcmVjdGx5IHByZWNlZGluZyBhbiByZmkpCitQIChQcm90ZWN0aW9uIElkZW50aWZpZXJzKQkxKgorRCAoRGF0YSBhZGRyZXNzIHRyYW5zbGF0aW9uKQkxLCAwIHdoaWxlIGV4ZWN1dGluZyByZWFsLW1vZGUgY29kZQorSSAoZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2spCXVzZWQgYnkgY2xpKCkvc3RpKCkgbWFjcm9zCisKKwkiSW52aXNpYmxlIiBSZWdpc3RlcnMKKworUFNXIGRlZmF1bHQgVyB2YWx1ZQkJMAorUFNXIGRlZmF1bHQgRSB2YWx1ZQkJMAorU2hhZG93IFJlZ2lzdGVycwkJdXNlZCBieSBpbnRlcnJ1cHRpb24gaGFuZGxlciBjb2RlCitUT0MgZW5hYmxlIGJpdAkJCTEKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVnaXN0ZXIgdXNhZ2Ugbm90ZXMsIG9yaWdpbmFsbHkgZnJvbSBKb2huIE1hcnZpbiwgd2l0aCBzb21lIGFkZGl0aW9uYWwKK25vdGVzIGZyb20gUmFuZG9scGggQ2h1bmcuCisKK0ZvciB0aGUgZ2VuZXJhbCByZWdpc3RlcnM6CisKK3IxLHIyLHIxOS1yMjYscjI4LHIyOSAmIHIzMSBjYW4gYmUgdXNlZCB3aXRob3V0IHNhdmluZyB0aGVtIGZpcnN0LiBBbmQgb2YKK2NvdXJzZSwgeW91IG5lZWQgdG8gc2F2ZSB0aGVtIGlmIHlvdSBjYXJlIGFib3V0IHRoZW0sIGJlZm9yZSBjYWxsaW5nCithbm90aGVyIHByb2NlZHVyZS4gU29tZSBvZiB0aGUgYWJvdmUgcmVnaXN0ZXJzIGRvIGhhdmUgc3BlY2lhbCBtZWFuaW5ncwordGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mOgorCisgICAgcjE6IFRoZSBhZGRpbCBpbnN0cnVjdGlvbiBpcyBoYXJkd2lyZWQgdG8gcGxhY2UgaXRzIHJlc3VsdCBpbiByMSwKKwlzbyBpZiB5b3UgdXNlIHRoYXQgaW5zdHJ1Y3Rpb24gYmUgYXdhcmUgb2YgdGhhdC4KKworICAgIHIyOiBUaGlzIGlzIHRoZSByZXR1cm4gcG9pbnRlci4gSW4gZ2VuZXJhbCB5b3UgZG9uJ3Qgd2FudCB0bworCXVzZSB0aGlzLCBzaW5jZSB5b3UgbmVlZCB0aGUgcG9pbnRlciB0byBnZXQgYmFjayB0byB5b3VyCisJY2FsbGVyLiBIb3dldmVyLCBpdCBpcyBncm91cGVkIHdpdGggdGhpcyBzZXQgb2YgcmVnaXN0ZXJzCisJc2luY2UgdGhlIGNhbGxlciBjYW4ndCByZWx5IG9uIHRoZSB2YWx1ZSBiZWluZyB0aGUgc2FtZQorCXdoZW4geW91IHJldHVybiwgaS5lLiB5b3UgY2FuIGNvcHkgcjIgdG8gYW5vdGhlciByZWdpc3RlcgorCWFuZCByZXR1cm4gdGhyb3VnaCB0aGF0IHJlZ2lzdGVyIGFmdGVyIHRyYXNoaW5nIHIyLCBhbmQKKwl0aGF0IHNob3VsZCBub3QgY2F1c2UgYSBwcm9ibGVtIGZvciB0aGUgY2FsbGluZyByb3V0aW5lLgorCisgICAgcjE5LXIyMjogdGhlc2UgYXJlIGdlbmVyYWxseSByZWdhcmRlZCBhcyB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgorCU5vdGUgdGhhdCBpbiA2NCBiaXQgdGhleSBhcmUgYXJnNy1hcmc0LgorCisgICAgcjIzLXIyNjogdGhlc2UgYXJlIGFyZzMtYXJnMCwgaS5lLiB5b3UgY2FuIHVzZSB0aGVtIGlmIHlvdQorCWRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlcyB0aGF0IHdlcmUgcGFzc2VkIGluIGFueW1vcmUuCisKKyAgICByMjgscjI5OiBhcmUgcmV0MCBhbmQgcmV0MS4gVGhleSBhcmUgd2hhdCB5b3UgcGFzcyByZXR1cm4gdmFsdWVzCisJaW4uIHIyOCBpcyB0aGUgcHJpbWFyeSByZXR1cm4uIFdoZW4gcmV0dXJuaW5nIHNtYWxsIHN0cnVjdHVyZXMKKwlyMjkgbWF5IGFsc28gYmUgdXNlZCB0byBwYXNzIGRhdGEgYmFjayB0byB0aGUgY2FsbGVyLgorCisgICAgcjMwOiBzdGFjayBwb2ludGVyCisKKyAgICByMzE6IHRoZSBibGUgaW5zdHJ1Y3Rpb24gcHV0cyB0aGUgcmV0dXJuIHBvaW50ZXIgaW4gaGVyZS4KKworCityMy1yMTgscjI3LHIzMCBuZWVkIHRvIGJlIHNhdmVkIGFuZCByZXN0b3JlZC4gcjMtcjE4IGFyZSBqdXN0CisgICAgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4gcjI3IGlzIHRoZSBkYXRhIHBvaW50ZXIsIGFuZCBpcworICAgIHVzZWQgdG8gbWFrZSByZWZlcmVuY2VzIHRvIGdsb2JhbCB2YXJpYWJsZXMgZWFzaWVyLiByMzAgaXMKKyAgICB0aGUgc3RhY2sgcG9pbnRlci4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wYXJwb3J0LWxvd2xldmVsLnR4dCBiL0RvY3VtZW50YXRpb24vcGFycG9ydC1sb3dsZXZlbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MDAwOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFycG9ydC1sb3dsZXZlbC50eHQKQEAgLTAsMCArMSwxNDkwIEBACitQQVJQT1JUIGludGVyZmFjZSBkb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RpbWUtc3RhbXA6IDwyMDAwLTAyLTI0IDEzOjMwOjIwIHR3YXVnaD4KKworRGVzY3JpYmVkIGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCitHbG9iYWwgZnVuY3Rpb25zOgorICBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcgorICBwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyCisgIHBhcnBvcnRfZW51bWVyYXRlCisgIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlCisgIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UKKyAgcGFycG9ydF9jbGFpbQorICBwYXJwb3J0X2NsYWltX29yX2Jsb2NrCisgIHBhcnBvcnRfcmVsZWFzZQorICBwYXJwb3J0X3lpZWxkCisgIHBhcnBvcnRfeWllbGRfYmxvY2tpbmcKKyAgcGFycG9ydF93YWl0X3BlcmlwaGVyYWwKKyAgcGFycG9ydF9wb2xsX3BlcmlwaGVyYWwKKyAgcGFycG9ydF93YWl0X2V2ZW50CisgIHBhcnBvcnRfbmVnb3RpYXRlCisgIHBhcnBvcnRfcmVhZAorICBwYXJwb3J0X3dyaXRlCisgIHBhcnBvcnRfb3BlbgorICBwYXJwb3J0X2Nsb3NlCisgIHBhcnBvcnRfZGV2aWNlX2lkCisgIHBhcnBvcnRfZGV2aWNlX251bQorICBwYXJwb3J0X2RldmljZV9jb29yZHMKKyAgcGFycG9ydF9maW5kX2NsYXNzCisgIHBhcnBvcnRfZmluZF9kZXZpY2UKKyAgcGFycG9ydF9zZXRfdGltZW91dAorCitQb3J0IGZ1bmN0aW9ucyAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgbG93LWxldmVsIGRyaXZlcnMpOgorICBTUFA6CisgICAgcG9ydC0+b3BzLT5yZWFkX2RhdGEKKyAgICBwb3J0LT5vcHMtPndyaXRlX2RhdGEKKyAgICBwb3J0LT5vcHMtPnJlYWRfc3RhdHVzCisgICAgcG9ydC0+b3BzLT5yZWFkX2NvbnRyb2wKKyAgICBwb3J0LT5vcHMtPndyaXRlX2NvbnRyb2wKKyAgICBwb3J0LT5vcHMtPmZyb2JfY29udHJvbAorICAgIHBvcnQtPm9wcy0+ZW5hYmxlX2lycQorICAgIHBvcnQtPm9wcy0+ZGlzYWJsZV9pcnEKKyAgICBwb3J0LT5vcHMtPmRhdGFfZm9yd2FyZAorICAgIHBvcnQtPm9wcy0+ZGF0YV9yZXZlcnNlCisKKyAgRVBQOgorICAgIHBvcnQtPm9wcy0+ZXBwX3dyaXRlX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVwcF9yZWFkX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVwcF93cml0ZV9hZGRyCisgICAgcG9ydC0+b3BzLT5lcHBfcmVhZF9hZGRyCisKKyAgRUNQOgorICAgIHBvcnQtPm9wcy0+ZWNwX3dyaXRlX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVjcF9yZWFkX2RhdGEKKyAgICBwb3J0LT5vcHMtPmVjcF93cml0ZV9hZGRyCisKKyAgT3RoZXI6CisgICAgcG9ydC0+b3BzLT5uaWJibGVfcmVhZF9kYXRhCisgICAgcG9ydC0+b3BzLT5ieXRlX3JlYWRfZGF0YQorICAgIHBvcnQtPm9wcy0+Y29tcGF0X3dyaXRlX2RhdGEKKworVGhlIHBhcnBvcnQgc3Vic3lzdGVtIGNvbXByaXNlcyAncGFycG9ydCcgKHRoZSBjb3JlIHBvcnQtc2hhcmluZworY29kZSksIGFuZCBhIHZhcmlldHkgb2YgbG93LWxldmVsIGRyaXZlcnMgdGhhdCBhY3R1YWxseSBkbyB0aGUgcG9ydAorYWNjZXNzZXMuICBFYWNoIGxvdy1sZXZlbCBkcml2ZXIgaGFuZGxlcyBhIHBhcnRpY3VsYXIgc3R5bGUgb2YgcG9ydAorKFBDLCBBbWlnYSwgYW5kIHNvIG9uKS4KKworVGhlIHBhcnBvcnQgaW50ZXJmYWNlIHRvIHRoZSBkZXZpY2UgZHJpdmVyIGF1dGhvciBjYW4gYmUgYnJva2VuIGRvd24KK2ludG8gZ2xvYmFsIGZ1bmN0aW9ucyBhbmQgcG9ydCBmdW5jdGlvbnMuCisKK1RoZSBnbG9iYWwgZnVuY3Rpb25zIGFyZSBtb3N0bHkgZm9yIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUgZGV2aWNlCitkcml2ZXIgYW5kIHRoZSBwYXJwb3J0IHN1YnN5c3RlbTogYWNxdWlyaW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgcG9ydHMsCitjbGFpbWluZyBhIHBvcnQgZm9yIGV4Y2x1c2l2ZSB1c2UsIGFuZCBzbyBvbi4gIFRoZXkgYWxzbyBpbmNsdWRlCisnZ2VuZXJpYycgZnVuY3Rpb25zIGZvciBkb2luZyBzdGFuZGFyZCB0aGluZ3MgdGhhdCB3aWxsIHdvcmsgb24gYW55CitJRUVFIDEyODQtY2FwYWJsZSBhcmNoaXRlY3R1cmUuCisKK1RoZSBwb3J0IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgdGhlIGxvdy1sZXZlbCBkcml2ZXJzLCBhbHRob3VnaCB0aGUKK2NvcmUgcGFycG9ydCBtb2R1bGUgcHJvdmlkZXMgZ2VuZXJpYyAnZGVmYXVsdHMnIGZvciBzb21lIHJvdXRpbmVzLgorVGhlIHBvcnQgZnVuY3Rpb25zIGNhbiBiZSBzcGxpdCBpbnRvIHRocmVlIGdyb3VwczogU1BQLCBFUFAsIGFuZCBFQ1AuCisKK1NQUCAoU3RhbmRhcmQgUGFyYWxsZWwgUG9ydCkgZnVuY3Rpb25zIG1vZGlmeSBzby1jYWxsZWQgJ1NQUCcKK3JlZ2lzdGVyczogZGF0YSwgc3RhdHVzLCBhbmQgY29udHJvbC4gIFRoZSBoYXJkd2FyZSBtYXkgbm90IGFjdHVhbGx5CitoYXZlIHJlZ2lzdGVycyBleGFjdGx5IGxpa2UgdGhhdCwgYnV0IHRoZSBQQyBkb2VzIGFuZCB0aGlzIGludGVyZmFjZSBpcworbW9kZWxsZWQgYWZ0ZXIgY29tbW9uIFBDIGltcGxlbWVudGF0aW9ucy4gIE90aGVyIGxvdy1sZXZlbCBkcml2ZXJzIG1heQorYmUgYWJsZSB0byBlbXVsYXRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuCisKK0VQUCAoRW5oYW5jZWQgUGFyYWxsZWwgUG9ydCkgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgcmVhZGluZyBhbmQKK3dyaXRpbmcgaW4gSUVFRSAxMjg0IEVQUCBtb2RlLCBhbmQgRUNQIChFeHRlbmRlZCBDYXBhYmlsaXRpZXMgUG9ydCkKK2Z1bmN0aW9ucyBhcmUgdXNlZCBmb3IgSUVFRSAxMjg0IEVDUCBtb2RlLiAoV2hhdCBhYm91dCBCRUNQPyBEb2VzCithbnlvbmUgY2FyZT8pCisKK0hhcmR3YXJlIGFzc2lzdGFuY2UgZm9yIEVQUCBhbmQvb3IgRUNQIHRyYW5zZmVycyBtYXkgb3IgbWF5IG5vdCBiZQorYXZhaWxhYmxlLCBhbmQgaWYgaXQgaXMgYXZhaWxhYmxlIGl0IG1heSBvciBtYXkgbm90IGJlIHVzZWQuICBJZgoraGFyZHdhcmUgaXMgbm90IHVzZWQsIHRoZSB0cmFuc2ZlciB3aWxsIGJlIHNvZnR3YXJlLWRyaXZlbi4gIEluIG9yZGVyCit0byBjb3BlIHdpdGggcGVyaXBoZXJhbHMgdGhhdCBvbmx5IHRlbnVvdXNseSBzdXBwb3J0IElFRUUgMTI4NCwgYQorbG93LWxldmVsIGRyaXZlciBzcGVjaWZpYyBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZm9yIGFsdGVyaW5nICdmdWRnZQorZmFjdG9ycycuCisMCitHTE9CQUwgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tCisKK3BhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBkZXZpY2UgZHJpdmVyIHdpdGggcGFycG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCphdHRhY2gpIChzdHJ1Y3QgcGFycG9ydCAqKTsKKwl2b2lkICgqZGV0YWNoKSAoc3RydWN0IHBhcnBvcnQgKik7CisJc3RydWN0IHBhcnBvcnRfZHJpdmVyICpuZXh0OworfTsKK2ludCBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHBhcnBvcnRfZHJpdmVyICpkcml2ZXIpOworCitERVNDUklQVElPTgorCitJbiBvcmRlciB0byBiZSBub3RpZmllZCBhYm91dCBwYXJhbGxlbCBwb3J0cyB3aGVuIHRoZXkgYXJlIGRldGVjdGVkLAorcGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIgc2hvdWxkIGJlIGNhbGxlZC4gIFlvdXIgZHJpdmVyIHdpbGwKK2ltbWVkaWF0ZWx5IGJlIG5vdGlmaWVkIG9mIGFsbCBwb3J0cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkLAorYW5kIG9mIGVhY2ggbmV3IHBvcnQgYXMgbG93LWxldmVsIGRyaXZlcnMgYXJlIGxvYWRlZC4KKworQSAnc3RydWN0IHBhcnBvcnRfZHJpdmVyJyBjb250YWlucyB0aGUgdGV4dHVhbCBuYW1lIG9mIHlvdXIgZHJpdmVyLAorYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdG8gaGFuZGxlIG5ldyBwb3J0cywgYW5kIGEgcG9pbnRlciB0byBhCitmdW5jdGlvbiB0byBoYW5kbGUgcG9ydHMgZ29pbmcgYXdheSBkdWUgdG8gYSBsb3ctbGV2ZWwgZHJpdmVyCit1bmxvYWRpbmcuICBQb3J0cyB3aWxsIG9ubHkgYmUgZGV0YWNoZWQgaWYgdGhleSBhcmUgbm90IGJlaW5nIHVzZWQKKyhpLmUuIHRoZXJlIGFyZSBubyBkZXZpY2VzIHJlZ2lzdGVyZWQgb24gdGhlbSkuCisKK1RoZSB2aXNpYmxlIHBhcnRzIG9mIHRoZSAnc3RydWN0IHBhcnBvcnQgKicgYXJndW1lbnQgZ2l2ZW4gdG8KK2F0dGFjaC9kZXRhY2ggYXJlOgorCitzdHJ1Y3QgcGFycG9ydAoreworCXN0cnVjdCBwYXJwb3J0ICpuZXh0OyAvKiBuZXh0IHBhcnBvcnQgaW4gbGlzdCAqLworCWNvbnN0IGNoYXIgKm5hbWU7ICAgICAvKiBwb3J0J3MgbmFtZSAqLworCXVuc2lnbmVkIGludCBtb2RlczsgICAvKiBiaXRmaWVsZCBvZiBoYXJkd2FyZSBtb2RlcyAqLworCXN0cnVjdCBwYXJwb3J0X2RldmljZV9pbmZvIHByb2JlX2luZm87CisJCQkgICAgICAvKiBJRUVFMTI4NCBpbmZvICovCisJaW50IG51bWJlcjsgICAgICAgICAgIC8qIHBhcnBvcnQgaW5kZXggKi8KKwlzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zICpvcHM7CisJLi4uCit9OworCitUaGVyZSBhcmUgb3RoZXIgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLCBidXQgdGhleSBzaG91bGQgbm90IGJlCit0b3VjaGVkLgorCitUaGUgJ21vZGVzJyBtZW1iZXIgc3VtbWFyaXNlcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCitoYXJkd2FyZS4gIEl0IGNvbnNpc3RzIG9mIGZsYWdzIHdoaWNoIG1heSBiZSBiaXR3aXNlLW9yZWQgdG9nZXRoZXI6CisKKyAgUEFSUE9SVF9NT0RFX1BDU1BQCQlJQk0gUEMgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUsCisJCQkJaS5lLiBmdW5jdGlvbnMgdGhhdCBhY3Qgb24gZGF0YSwKKwkJCQljb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIGFyZQorCQkJCXByb2JhYmx5IHdyaXRpbmcgZGlyZWN0bHkgdG8gdGhlCisJCQkJaGFyZHdhcmUuCisgIFBBUlBPUlRfTU9ERV9UUklTVEFURQkJVGhlIGRhdGEgZHJpdmVycyBtYXkgYmUgdHVybmVkIG9mZi4KKwkJCQlUaGlzIGFsbG93cyB0aGUgZGF0YSBsaW5lcyB0byBiZSB1c2VkCisJCQkJZm9yIHJldmVyc2UgKHBlcmlwaGVyYWwgdG8gaG9zdCkKKwkJCQl0cmFuc2ZlcnMuCisgIFBBUlBPUlRfTU9ERV9DT01QQVQJCVRoZSBoYXJkd2FyZSBjYW4gYXNzaXN0IHdpdGgKKwkJCQljb21wYXRpYmlsaXR5LW1vZGUgKHByaW50ZXIpCisJCQkJdHJhbnNmZXJzLCBpLmUuIGNvbXBhdF93cml0ZV9ibG9jay4KKyAgUEFSUE9SVF9NT0RFX0VQUAkJVGhlIGhhcmR3YXJlIGNhbiBhc3Npc3Qgd2l0aCBFUFAKKwkJCQl0cmFuc2ZlcnMuCisgIFBBUlBPUlRfTU9ERV9FQ1AJCVRoZSBoYXJkd2FyZSBjYW4gYXNzaXN0IHdpdGggRUNQCisJCQkJdHJhbnNmZXJzLgorICBQQVJQT1JUX01PREVfRE1BCQlUaGUgaGFyZHdhcmUgY2FuIHVzZSBETUEsIHNvIHlvdSBtaWdodAorCQkJCXdhbnQgdG8gcGFzcyBJU0EgRE1BLWFibGUgbWVtb3J5CisJCQkJKGkuZS4gbWVtb3J5IGFsbG9jYXRlZCB1c2luZyB0aGUKKwkJCQlHRlBfRE1BIGZsYWcgd2l0aCBrbWFsbG9jKSB0byB0aGUKKwkJCQlsb3ctbGV2ZWwgZHJpdmVyIGluIG9yZGVyIHRvIHRha2UKKwkJCQlhZHZhbnRhZ2Ugb2YgaXQuCisKK1RoZXJlIG1heSBiZSBvdGhlciBmbGFncyBpbiAnbW9kZXMnIGFzIHdlbGwuCisKK1RoZSBjb250ZW50cyBvZiAnbW9kZXMnIGlzIGFkdmlzb3J5IG9ubHkuICBGb3IgZXhhbXBsZSwgaWYgdGhlCitoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIERNQSwgYW5kIFBBUlBPUlRfTU9ERV9ETUEgaXMgaW4gJ21vZGVzJywgaXQKK2RvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IERNQSB3aWxsIGFsd2F5cyBiZSB1c2VkIHdoZW4gcG9zc2libGUuCitTaW1pbGFybHksIGhhcmR3YXJlIHRoYXQgaXMgY2FwYWJsZSBvZiBhc3Npc3RpbmcgRUNQIHRyYW5zZmVycyB3b24ndAorbmVjZXNzYXJpbHkgYmUgdXNlZC4KKworUkVUVVJOIFZBTFVFCisKK1plcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCisKK0VSUk9SUworCitOb25lLiAoQ2FuIGl0IGZhaWw/IFdoeSByZXR1cm4gaW50PykKKworRVhBTVBMRQorCitzdGF0aWMgdm9pZCBscF9hdHRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCS4uLgorCXByaXZhdGUgPSBrbWFsbG9jICguLi4pOworCWRldltjb3VudCsrXSA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlICguLi4pOworCS4uLgorfQorCitzdGF0aWMgdm9pZCBscF9kZXRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQoreworCS4uLgorfQorCitzdGF0aWMgc3RydWN0IHBhcnBvcnRfZHJpdmVyIGxwX2RyaXZlciA9IHsKKwkibHAiLAorCWxwX2F0dGFjaCwKKwlscF9kZXRhY2gsCisJTlVMTCAvKiBhbHdheXMgcHV0IE5VTEwgaGVyZSAqLworfTsKKworaW50IGxwX2luaXQgKHZvaWQpCit7CisJLi4uCisJaWYgKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyICgmbHBfZHJpdmVyKSkgeworCQkvKiBGYWlsZWQ7IG5vdGhpbmcgd2UgY2FuIGRvLiAqLworCQlyZXR1cm4gLUVJTzsKKwl9CisJLi4uCit9CisKK1NFRSBBTFNPCisKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIsIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLCBwYXJwb3J0X2VudW1lcmF0ZQorDAorcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlciAtIHRlbGwgcGFycG9ydCB0byBmb3JnZXQgYWJvdXQgdGhpcyBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCphdHRhY2gpIChzdHJ1Y3QgcGFycG9ydCAqKTsKKwl2b2lkICgqZGV0YWNoKSAoc3RydWN0IHBhcnBvcnQgKik7CisJc3RydWN0IHBhcnBvcnRfZHJpdmVyICpuZXh0OworfTsKK3ZvaWQgcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHBhcnBvcnRfZHJpdmVyICpkcml2ZXIpOworCitERVNDUklQVElPTgorCitUaGlzIHRlbGxzIHBhcnBvcnQgbm90IHRvIG5vdGlmeSB0aGUgZGV2aWNlIGRyaXZlciBvZiBuZXcgcG9ydHMgb3Igb2YKK3BvcnRzIGdvaW5nIGF3YXkuICBSZWdpc3RlcmVkIGRldmljZXMgYmVsb25naW5nIHRvIHRoYXQgZHJpdmVyIGFyZSBOT1QKK3VucmVnaXN0ZXJlZDogcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSBtdXN0IGJlIHVzZWQgZm9yIGVhY2ggb25lLgorCitFWEFNUExFCisKK3ZvaWQgY2xlYW51cF9tb2R1bGUgKHZvaWQpCit7CisJLi4uCisJLyogU3RvcCBub3RpZmljYXRpb25zLiAqLworCXBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIgKCZscF9kcml2ZXIpOworCisJLyogVW5yZWdpc3RlciBkZXZpY2VzLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fREVWUzsgaSsrKQorCQlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlIChkZXZbaV0pOworCS4uLgorfQorCitTRUUgQUxTTworCitwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlciwgcGFycG9ydF9lbnVtZXJhdGUKKwwKK3BhcnBvcnRfZW51bWVyYXRlIC0gcmV0cmlldmUgYSBsaXN0IG9mIHBhcmFsbGVsIHBvcnRzIChERVBSRUNBVEVEKQorLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnQgKnBhcnBvcnRfZW51bWVyYXRlICh2b2lkKTsKKworREVTQ1JJUFRJT04KKworUmV0cmlldmUgdGhlIGZpcnN0IG9mIGEgbGlzdCBvZiB2YWxpZCBwYXJhbGxlbCBwb3J0cyBmb3IgdGhpcyBtYWNoaW5lLgorU3VjY2Vzc2l2ZSBwYXJhbGxlbCBwb3J0cyBjYW4gYmUgZm91bmQgdXNpbmcgdGhlICdzdHJ1Y3QgcGFycG9ydAorKm5leHQnIGVsZW1lbnQgb2YgdGhlICdzdHJ1Y3QgcGFycG9ydCAqJyB0aGF0IGlzIHJldHVybmVkLiAgSWYgJ25leHQnCitpcyBOVUxMLCB0aGVyZSBhcmUgbm8gbW9yZSBwYXJhbGxlbCBwb3J0cyBpbiB0aGUgbGlzdC4gIFRoZSBudW1iZXIgb2YKK3BvcnRzIGluIHRoZSBsaXN0IHdpbGwgbm90IGV4Y2VlZCBQQVJQT1JUX01BWC4KKworUkVUVVJOIFZBTFVFCisKK0EgJ3N0cnVjdCBwYXJwb3J0IConIGRlc2NyaWJpbmcgYSB2YWxpZCBwYXJhbGxlbCBwb3J0IGZvciB0aGUgbWFjaGluZSwKK29yIE5VTEwgaWYgdGhlcmUgYXJlIG5vbmUuCisKK0VSUk9SUworCitUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbGxlbAorcG9ydHMgdG8gdXNlLgorCitFWEFNUExFCisKK2ludCBkZXRlY3RfZGV2aWNlICh2b2lkKQoreworCXN0cnVjdCBwYXJwb3J0ICpwb3J0OworCisJZm9yIChwb3J0ID0gcGFycG9ydF9lbnVtZXJhdGUgKCk7CisJICAgICBwb3J0ICE9IE5VTEw7CisJICAgICBwb3J0ID0gcG9ydC0+bmV4dCkgeworCQkvKiBUcnkgdG8gZGV0ZWN0IGEgZGV2aWNlIG9uIHRoZSBwb3J0Li4uICovCisJCS4uLgorICAgICAgICAgICAgIH0KKwl9CisKKwkuLi4KK30KKworTk9URVMKKworcGFycG9ydF9lbnVtZXJhdGUgaXMgZGVwcmVjYXRlZDsgcGFycG9ydF9yZWdpc3Rlcl9kcml2ZXIgc2hvdWxkIGJlCit1c2VkIGluc3RlYWQuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyLCBwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyCisMCitwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSAtIHJlZ2lzdGVyIHRvIHVzZSBhIHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3R5cGVkZWYgaW50ICgqcHJlZW1wdF9mdW5jKSAodm9pZCAqaGFuZGxlKTsKK3R5cGVkZWYgdm9pZCAoKndha2V1cF9mdW5jKSAodm9pZCAqaGFuZGxlKTsKK3R5cGVkZWYgaW50ICgqaXJxX2Z1bmMpIChpbnQgaXJxLCB2b2lkICpoYW5kbGUsIHN0cnVjdCBwdF9yZWdzICopOworCitzdHJ1Y3QgcGFyZGV2aWNlICpwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2Z1bmMgcHJlZW1wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdha2V1cF9mdW5jIHdha2V1cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9mdW5jIGlycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhbmRsZSk7CisKK0RFU0NSSVBUSU9OCisKK1VzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIHlvdXIgZGV2aWNlIGRyaXZlciBvbiBhIHBhcmFsbGVsIHBvcnQKKygncG9ydCcpLiAgT25jZSB5b3UgaGF2ZSBkb25lIHRoYXQsIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlCitwYXJwb3J0X2NsYWltIGFuZCBwYXJwb3J0X3JlbGVhc2UgaW4gb3JkZXIgdG8gdXNlIHRoZSBwb3J0LgorCitUaGlzIGZ1bmN0aW9uIHdpbGwgcmVnaXN0ZXIgdGhyZWUgY2FsbGJhY2tzIGludG8geW91ciBkcml2ZXI6CisncHJlZW1wdCcsICd3YWtldXAnIGFuZCAnaXJxJy4gIEVhY2ggb2YgdGhlc2UgbWF5IGJlIE5VTEwgaW4gb3JkZXIgdG8KK2luZGljYXRlIHRoYXQgeW91IGRvIG5vdCB3YW50IGEgY2FsbGJhY2suCisKK1doZW4gdGhlICdwcmVlbXB0JyBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IGlzIGJlY2F1c2UgYW5vdGhlciBkcml2ZXIKK3dpc2hlcyB0byB1c2UgdGhlIHBhcmFsbGVsIHBvcnQuICBUaGUgJ3ByZWVtcHQnIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4KK25vbi16ZXJvIGlmIHRoZSBwYXJhbGxlbCBwb3J0IGNhbm5vdCBiZSByZWxlYXNlZCB5ZXQgLS0gaWYgemVybyBpcworcmV0dXJuZWQsIHRoZSBwb3J0IGlzIGxvc3QgdG8gYW5vdGhlciBkcml2ZXIgYW5kIHRoZSBwb3J0IG11c3QgYmUKK3JlLWNsYWltZWQgYmVmb3JlIHVzZS4KKworVGhlICd3YWtldXAnIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGFub3RoZXIgZHJpdmVyIGhhcyByZWxlYXNlZCB0aGUKK3BvcnQgYW5kIG5vIG90aGVyIGRyaXZlciBoYXMgeWV0IGNsYWltZWQgaXQuICBZb3UgY2FuIGNsYWltIHRoZQorcGFyYWxsZWwgcG9ydCBmcm9tIHdpdGhpbiB0aGUgJ3dha2V1cCcgZnVuY3Rpb24gKGluIHdoaWNoIGNhc2UgdGhlCitjbGFpbSBpcyBndWFyYW50ZWVkIHRvIHN1Y2NlZWQpLCBvciBjaG9vc2Ugbm90IHRvIGlmIHlvdSBkb24ndCBuZWVkIGl0Citub3cuCisKK0lmIGFuIGludGVycnVwdCBvY2N1cnMgb24gdGhlIHBhcmFsbGVsIHBvcnQgeW91ciBkcml2ZXIgaGFzIGNsYWltZWQsCit0aGUgJ2lycScgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQuIChXcml0ZSBzb21ldGhpbmcgYWJvdXQgc2hhcmVkCitpbnRlcnJ1cHRzIGhlcmUuKQorCitUaGUgJ2hhbmRsZScgaXMgYSBwb2ludGVyIHRvIGRyaXZlci1zcGVjaWZpYyBkYXRhLCBhbmQgaXMgcGFzc2VkIHRvCit0aGUgY2FsbGJhY2sgZnVuY3Rpb25zLgorCisnZmxhZ3MnIG1heSBiZSBhIGJpdHdpc2UgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKKworICAgICAgICBGbGFnICAgICAgICAgICAgTWVhbmluZworICBQQVJQT1JUX0RFVl9FWENMCVRoZSBkZXZpY2UgY2Fubm90IHNoYXJlIHRoZSBwYXJhbGxlbCBwb3J0IGF0IGFsbC4KKwkJCVVzZSB0aGlzIG9ubHkgd2hlbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KKworVGhlIHR5cGVkZWZzIGFyZSBub3QgYWN0dWFsbHkgZGVmaW5lZCAtLSB0aGV5IGFyZSBvbmx5IHNob3duIGluIG9yZGVyCit0byBtYWtlIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgbW9yZSByZWFkYWJsZS4KKworVGhlIHZpc2libGUgcGFydHMgb2YgdGhlIHJldHVybmVkICdzdHJ1Y3QgcGFyZGV2aWNlJyBhcmU6CisKK3N0cnVjdCBwYXJkZXZpY2UgeworCXN0cnVjdCBwYXJwb3J0ICpwb3J0OwkvKiBBc3NvY2lhdGVkIHBvcnQgKi8KKwl2b2lkICpwcml2YXRlOwkJLyogRGV2aWNlIGRyaXZlcidzICdoYW5kbGUnICovCisJLi4uCit9OworCitSRVRVUk4gVkFMVUUKKworQSAnc3RydWN0IHBhcmRldmljZSAqJzogYSBoYW5kbGUgdG8gdGhlIHJlZ2lzdGVyZWQgcGFyYWxsZWwgcG9ydAorZGV2aWNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHBhcnBvcnRfY2xhaW0sIHBhcnBvcnRfcmVsZWFzZSwgZXRjLgorCitFUlJPUlMKKworQSByZXR1cm4gdmFsdWUgb2YgTlVMTCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSB3YXMgYSBwcm9ibGVtIHJlZ2lzdGVyaW5nCithIGRldmljZSBvbiB0aGF0IHBvcnQuCisKK0VYQU1QTEUKKworc3RhdGljIGludCBwcmVlbXB0ICh2b2lkICpoYW5kbGUpCit7CisJaWYgKGJ1c3lfcmlnaHRfbm93KQorCQlyZXR1cm4gMTsKKworCW11c3RfcmVjbGFpbV9wb3J0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2FrZXVwICh2b2lkICpoYW5kbGUpCit7CisJc3RydWN0IHRvYXN0ZXIgKnByaXZhdGUgPSBoYW5kbGU7CisJc3RydWN0IHBhcmRldmljZSAqZGV2ID0gcHJpdmF0ZS0+ZGV2OworCWlmICghZGV2KSByZXR1cm47IC8qIGF2b2lkIHJhY2VzICovCisKKwlpZiAod2FudF9wb3J0KQorCQlwYXJwb3J0X2NsYWltIChkZXYpOworfQorCitzdGF0aWMgaW50IHRvYXN0ZXJfZGV0ZWN0IChzdHJ1Y3QgdG9hc3RlciAqcHJpdmF0ZSwgc3RydWN0IHBhcnBvcnQgKnBvcnQpCit7CisJcHJpdmF0ZS0+ZGV2ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UgKHBvcnQsICJ0b2FzdGVyIiwgcHJlZW1wdCwKKwkJCQkJICAgICAgICB3YWtldXAsIE5VTEwsIDAsCisJCQkJCQlwcml2YXRlKTsKKwlpZiAoIXByaXZhdGUtPmRldikKKwkJLyogQ291bGRuJ3QgcmVnaXN0ZXIgd2l0aCBwYXJwb3J0LiAqLworCQlyZXR1cm4gLUVJTzsKKworCW11c3RfcmVjbGFpbV9wb3J0ID0gMDsKKwlidXN5X3JpZ2h0X25vdyA9IDE7CisJcGFycG9ydF9jbGFpbV9vcl9ibG9jayAocHJpdmF0ZS0+ZGV2KTsKKwkuLi4KKwkvKiBEb24ndCBuZWVkIHRoZSBwb3J0IHdoaWxlIHRoZSB0b2FzdGVyIHdhcm1zIHVwLiAqLworCWJ1c3lfcmlnaHRfbm93ID0gMDsKKwkuLi4KKwlidXN5X3JpZ2h0X25vdyA9IDE7CisJaWYgKG11c3RfcmVjbGFpbV9wb3J0KSB7CisJCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2sgKHByaXZhdGUtPmRldik7CisJCW11c3RfcmVjbGFpbV9wb3J0ID0gMDsKKwl9CisJLi4uCit9CisKK1NFRSBBTFNPCisKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UsIHBhcnBvcnRfY2xhaW0KKwwKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UgLSBmaW5pc2ggdXNpbmcgYSBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTlBPUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit2b2lkIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CisKK0RFU0NSSVBUSU9OCisKK1RoaXMgZnVuY3Rpb24gaXMgdGhlIG9wcG9zaXRlIG9mIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLiAgQWZ0ZXIgdXNpbmcKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UsICdkZXYnIGlzIG5vIGxvbmdlciBhIHZhbGlkIGRldmljZSBoYW5kbGUuCisKK1lvdSBzaG91bGQgbm90IHVucmVnaXN0ZXIgYSBkZXZpY2UgdGhhdCBpcyBjdXJyZW50bHkgY2xhaW1lZCwgYWx0aG91Z2gKK2lmIHlvdSBkbyBpdCB3aWxsIGJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkuCisKK0VYQU1QTEUKKworCS4uLgorCWtmcmVlIChkZXYtPnByaXZhdGUpOyAvKiBiZWZvcmUgd2UgbG9zZSB0aGUgcG9pbnRlciAqLworCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UgKGRldik7CisJLi4uCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIKKwwKK3BhcnBvcnRfY2xhaW0sIHBhcnBvcnRfY2xhaW1fb3JfYmxvY2sgLSBjbGFpbSB0aGUgcGFyYWxsZWwgcG9ydCBmb3IgYSBkZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworaW50IHBhcnBvcnRfY2xhaW0gKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CitpbnQgcGFycG9ydF9jbGFpbV9vcl9ibG9jayAoc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworREVTQ1JJUFRJT04KKworVGhlc2UgZnVuY3Rpb25zIGF0dGVtcHQgdG8gZ2FpbiBjb250cm9sIG9mIHRoZSBwYXJhbGxlbCBwb3J0IG9uIHdoaWNoCisnZGV2JyBpcyByZWdpc3RlcmVkLiAgJ3BhcnBvcnRfY2xhaW0nIGRvZXMgbm90IGJsb2NrLCBidXQKKydwYXJwb3J0X2NsYWltX29yX2Jsb2NrJyBtYXkgZG8uIChQdXQgc29tZXRoaW5nIGhlcmUgYWJvdXQgYmxvY2tpbmcKK2ludGVycnVwdGlibHkgb3Igbm9uLWludGVycnVwdGlibHkuKQorCitZb3Ugc2hvdWxkIG5vdCB0cnkgdG8gY2xhaW0gYSBwb3J0IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBjbGFpbWVkLgorCitSRVRVUk4gVkFMVUUKKworQSByZXR1cm4gdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgcG9ydCB3YXMgc3VjY2Vzc2Z1bGx5CitjbGFpbWVkLCBhbmQgdGhlIGNhbGxlciBub3cgaGFzIHBvc3Nlc3Npb24gb2YgdGhlIHBhcmFsbGVsIHBvcnQuCisKK0lmICdwYXJwb3J0X2NsYWltX29yX2Jsb2NrJyBibG9ja3MgYmVmb3JlIHJldHVybmluZyBzdWNjZXNzZnVsbHksIHRoZQorcmV0dXJuIHZhbHVlIGlzIHBvc2l0aXZlLgorCitFUlJPUlMKKworICAtRUFHQUlOICBUaGUgcG9ydCBpcyB1bmF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LCBidXQgYW5vdGhlciBhdHRlbXB0CisgICAgICAgICAgIHRvIGNsYWltIGl0IG1heSBzdWNjZWVkLgorCitTRUUgQUxTTworCitwYXJwb3J0X3JlbGVhc2UKKwwKK3BhcnBvcnRfcmVsZWFzZSAtIHJlbGVhc2UgdGhlIHBhcmFsbGVsIHBvcnQKKy0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit2b2lkIHBhcnBvcnRfcmVsZWFzZSAoc3RydWN0IHBhcmRldmljZSAqZGV2KTsKKworREVTQ1JJUFRJT04KKworT25jZSBhIHBhcmFsbGVsIHBvcnQgZGV2aWNlIGhhcyBiZWVuIGNsYWltZWQsIGl0IGNhbiBiZSByZWxlYXNlZCB1c2luZworJ3BhcnBvcnRfcmVsZWFzZScuICBJdCBjYW5ub3QgZmFpbCwgYnV0IHlvdSBzaG91bGQgbm90IHJlbGVhc2UgYQorZGV2aWNlIHRoYXQgeW91IGRvIG5vdCBoYXZlIHBvc3Nlc3Npb24gb2YuCisKK0VYQU1QTEUKKworc3RhdGljIHNpemVfdCB3cml0ZSAoc3RydWN0IHBhcmRldmljZSAqZGV2LCBjb25zdCB2b2lkICpidWYsCisJCSAgICAgc2l6ZV90IGxlbikKK3sKKwkuLi4KKwl3cml0dGVuID0gZGV2LT5wb3J0LT5vcHMtPndyaXRlX2VjcF9kYXRhIChkZXYtPnBvcnQsIGJ1ZiwKKwkJCQkJCSAgbGVuKTsKKwlwYXJwb3J0X3JlbGVhc2UgKGRldik7CisJLi4uCit9CisKKworU0VFIEFMU08KKworY2hhbmdlX21vZGUsIHBhcnBvcnRfY2xhaW0sIHBhcnBvcnRfY2xhaW1fb3JfYmxvY2ssIHBhcnBvcnRfeWllbGQKKwwKK3BhcnBvcnRfeWllbGQsIHBhcnBvcnRfeWllbGRfYmxvY2tpbmcgLSB0ZW1wb3JhcmlseSByZWxlYXNlIGEgcGFyYWxsZWwgcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitpbnQgcGFycG9ydF95aWVsZCAoc3RydWN0IHBhcmRldmljZSAqZGV2KQoraW50IHBhcnBvcnRfeWllbGRfYmxvY2tpbmcgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CisKK0RFU0NSSVBUSU9OCisKK1doZW4gYSBkcml2ZXIgaGFzIGNvbnRyb2wgb2YgYSBwYXJhbGxlbCBwb3J0LCBpdCBtYXkgYWxsb3cgYW5vdGhlcgorZHJpdmVyIHRvIHRlbXBvcmFyaWx5ICdib3Jyb3cnIGl0LiAgJ3BhcnBvcnRfeWllbGQnIGRvZXMgbm90IGJsb2NrOworJ3BhcnBvcnRfeWllbGRfYmxvY2tpbmcnIG1heSBkby4KKworUkVUVVJOIFZBTFVFCisKK0EgcmV0dXJuIHZhbHVlIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzdGlsbCBvd25zIHRoZSBwb3J0CithbmQgdGhlIGNhbGwgZGlkIG5vdCBibG9jay4KKworQSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSAncGFycG9ydF95aWVsZF9ibG9ja2luZycgaW5kaWNhdGVzIHRoYXQKK3RoZSBjYWxsZXIgc3RpbGwgb3ducyB0aGUgcG9ydCBhbmQgdGhlIGNhbGwgYmxvY2tlZC4KKworQSByZXR1cm4gdmFsdWUgb2YgLUVBR0FJTiBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIG5vIGxvbmdlciBvd25zIHRoZQorcG9ydCwgYW5kIGl0IG11c3QgYmUgcmUtY2xhaW1lZCBiZWZvcmUgdXNlLgorCitFUlJPUlMKKworICAtRUFHQUlOICBPd25lcnNoaXAgb2YgdGhlIHBhcmFsbGVsIHBvcnQgd2FzIGdpdmVuIGF3YXkuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfcmVsZWFzZQorDAorcGFycG9ydF93YWl0X3BlcmlwaGVyYWwgLSB3YWl0IGZvciBzdGF0dXMgbGluZXMsIHVwIHRvIDM1bXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X3dhaXRfcGVyaXBoZXJhbCAoc3RydWN0IHBhcnBvcnQgKnBvcnQsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgbWFzaywKKwkJCSAgICAgdW5zaWduZWQgY2hhciB2YWwpOworCitERVNDUklQVElPTgorCitXYWl0IGZvciB0aGUgc3RhdHVzIGxpbmVzIGluIG1hc2sgdG8gbWF0Y2ggdGhlIHZhbHVlcyBpbiB2YWwuCisKK1JFVFVSTiBWQUxVRQorCisgLUVJTlRSICBhIHNpZ25hbCBpcyBwZW5kaW5nCisgICAgICAwICB0aGUgc3RhdHVzIGxpbmVzIGluIG1hc2sgaGF2ZSB2YWx1ZXMgaW4gdmFsCisgICAgICAxICB0aW1lZCBvdXQgd2hpbGUgd2FpdGluZyAoMzVtcyBlbGFwc2VkKQorCitTRUUgQUxTTworCitwYXJwb3J0X3BvbGxfcGVyaXBoZXJhbAorDAorcGFycG9ydF9wb2xsX3BlcmlwaGVyYWwgLSB3YWl0IGZvciBzdGF0dXMgbGluZXMsIGluIHVzZWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X3BvbGxfcGVyaXBoZXJhbCAoc3RydWN0IHBhcnBvcnQgKnBvcnQsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgbWFzaywKKwkJCSAgICAgdW5zaWduZWQgY2hhciB2YWwsCisJCQkgICAgIGludCB1c2VjKTsKKworREVTQ1JJUFRJT04KKworV2FpdCBmb3IgdGhlIHN0YXR1cyBsaW5lcyBpbiBtYXNrIHRvIG1hdGNoIHRoZSB2YWx1ZXMgaW4gdmFsLgorCitSRVRVUk4gVkFMVUUKKworIC1FSU5UUiAgYSBzaWduYWwgaXMgcGVuZGluZworICAgICAgMCAgdGhlIHN0YXR1cyBsaW5lcyBpbiBtYXNrIGhhdmUgdmFsdWVzIGluIHZhbAorICAgICAgMSAgdGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgKHVzZWMgbWljcm9zZWNvbmRzIGhhdmUgZWxhcHNlZCkKKworU0VFIEFMU08KKworcGFycG9ydF93YWl0X3BlcmlwaGVyYWwKKwwKK3BhcnBvcnRfd2FpdF9ldmVudCAtIHdhaXQgZm9yIGFuIGV2ZW50IG9uIGEgcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X3dhaXRfZXZlbnQgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCBzaWduZWQgbG9uZyB0aW1lb3V0KQorCitERVNDUklQVElPTgorCitXYWl0IGZvciBhbiBldmVudCAoZS5nLiBpbnRlcnJ1cHQpIG9uIGEgcG9ydC4gIFRoZSB0aW1lb3V0IGlzIGluCitqaWZmaWVzLgorCitSRVRVUk4gVkFMVUUKKworICAgICAgMCAgc3VjY2VzcworICAgICA8MCAgZXJyb3IgKGV4aXQgYXMgc29vbiBhcyBwb3NzaWJsZSkKKyAgICAgPjAgIHRpbWVkIG91dAorDAorcGFycG9ydF9uZWdvdGlhdGUgLSBwZXJmb3JtIElFRUUgMTI4NCBuZWdvdGlhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworaW50IHBhcnBvcnRfbmVnb3RpYXRlIChzdHJ1Y3QgcGFycG9ydCAqLCBpbnQgbW9kZSk7CisKK0RFU0NSSVBUSU9OCisKK1BlcmZvcm0gSUVFRSAxMjg0IG5lZ290aWF0aW9uLgorCitSRVRVUk4gVkFMVUUKKworICAgICAwICBoYW5kc2hha2UgT0s7IElFRUUgMTI4NCBwZXJpcGhlcmFsIGFuZCBtb2RlIGF2YWlsYWJsZQorICAgIC0xICBoYW5kc2hha2UgZmFpbGVkOyBwZXJpcGhlcmFsIG5vdCBjb21wbGlhbnQgKG9yIG5vbmUgcHJlc2VudCkKKyAgICAgMSAgaGFuZHNoYWtlIE9LOyBJRUVFIDEyODQgcGVyaXBoZXJhbCBwcmVzZW50IGJ1dCBtb2RlIG5vdAorICAgICAgICBhdmFpbGFibGUKKworU0VFIEFMU08KKworcGFycG9ydF9yZWFkLCBwYXJwb3J0X3dyaXRlCisMCitwYXJwb3J0X3JlYWQgLSByZWFkIGRhdGEgZnJvbSBkZXZpY2UKKy0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzc2l6ZV90IHBhcnBvcnRfcmVhZCAoc3RydWN0IHBhcnBvcnQgKiwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKworREVTQ1JJUFRJT04KKworUmVhZCBkYXRhIGZyb20gZGV2aWNlIGluIGN1cnJlbnQgSUVFRSAxMjg0IHRyYW5zZmVyIG1vZGUuICBUaGlzIG9ubHkKK3dvcmtzIGZvciBtb2RlcyB0aGF0IHN1cHBvcnQgcmV2ZXJzZSBkYXRhIHRyYW5zZmVyLgorCitSRVRVUk4gVkFMVUUKKworSWYgbmVnYXRpdmUsIGFuIGVycm9yIGNvZGU7IG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLgorCitTRUUgQUxTTworCitwYXJwb3J0X3dyaXRlLCBwYXJwb3J0X25lZ290aWF0ZQorDAorcGFycG9ydF93cml0ZSAtIHdyaXRlIGRhdGEgdG8gZGV2aWNlCistLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3NzaXplX3QgcGFycG9ydF93cml0ZSAoc3RydWN0IHBhcnBvcnQgKiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKworREVTQ1JJUFRJT04KKworV3JpdGUgZGF0YSB0byBkZXZpY2UgaW4gY3VycmVudCBJRUVFIDEyODQgdHJhbnNmZXIgbW9kZS4gIFRoaXMgb25seQord29ya3MgZm9yIG1vZGVzIHRoYXQgc3VwcG9ydCBmb3J3YXJkIGRhdGEgdHJhbnNmZXIuCisKK1JFVFVSTiBWQUxVRQorCitJZiBuZWdhdGl2ZSwgYW4gZXJyb3IgY29kZTsgb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfcmVhZCwgcGFycG9ydF9uZWdvdGlhdGUKKwwKK3BhcnBvcnRfb3BlbiAtIHJlZ2lzdGVyIGRldmljZSBmb3IgcGFydGljdWxhciBkZXZpY2UgbnVtYmVyCistLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcmRldmljZSAqcGFycG9ydF9vcGVuIChpbnQgZGV2bnVtLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgICBpbnQgKCpwZikgKHZvaWQgKiksCisJCQkJdm9pZCAoKmtmKSAodm9pZCAqKSwKKwkJCQl2b2lkICgqaXJxZikgKGludCwgdm9pZCAqLAorCQkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJCQlpbnQgZmxhZ3MsIHZvaWQgKmhhbmRsZSk7CisKK0RFU0NSSVBUSU9OCisKK1RoaXMgaXMgbGlrZSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSBidXQgdGFrZXMgYSBkZXZpY2UgbnVtYmVyIGluc3RlYWQKK29mIGEgcG9pbnRlciB0byBhIHN0cnVjdCBwYXJwb3J0LgorCitSRVRVUk4gVkFMVUUKKworU2VlIHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLiAgSWYgbm8gZGV2aWNlIGlzIGFzc29jaWF0ZWQgd2l0aCBkZXZudW0sCitOVUxMIGlzIHJldHVybmVkLgorCitTRUUgQUxTTworCitwYXJwb3J0X3JlZ2lzdGVyX2RldmljZSwgcGFycG9ydF9kZXZpY2VfbnVtCisMCitwYXJwb3J0X2Nsb3NlIC0gdW5yZWdpc3RlciBkZXZpY2UgZm9yIHBhcnRpY3VsYXIgZGV2aWNlIG51bWJlcgorLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit2b2lkIHBhcnBvcnRfY2xvc2UgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CisKK0RFU0NSSVBUSU9OCisKK1RoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSBmb3IgcGFycG9ydF9vcGVuLgorCitTRUUgQUxTTworCitwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlLCBwYXJwb3J0X29wZW4KKwwKK3BhcnBvcnRfZGV2aWNlX2lkIC0gb2J0YWluIElFRUUgMTI4NCBEZXZpY2UgSUQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3NzaXplX3QgcGFycG9ydF9kZXZpY2VfaWQgKGludCBkZXZudW0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisKK0RFU0NSSVBUSU9OCisKK09idGFpbnMgdGhlIElFRUUgMTI4NCBEZXZpY2UgSUQgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZGV2aWNlLgorCitSRVRVUk4gVkFMVUUKKworSWYgbmVnYXRpdmUsIGFuIGVycm9yIGNvZGU7IG90aGVyd2lzZSwgdGhlIG51bWJlciBvZiBieXRlcyBvZiBidWZmZXIKK3RoYXQgY29udGFpbiB0aGUgZGV2aWNlIElELiAgVGhlIGZvcm1hdCBvZiB0aGUgZGV2aWNlIElEIGlzIGFzCitmb2xsb3dzOgorCitbbGVuZ3RoXVtJRF0KKworVGhlIGZpcnN0IHR3byBieXRlcyBpbmRpY2F0ZSB0aGUgaW5jbHVzaXZlIGxlbmd0aCBvZiB0aGUgZW50aXJlIERldmljZQorSUQsIGFuZCBhcmUgaW4gYmlnLWVuZGlhbiBvcmRlci4gIFRoZSBJRCBpcyBhIHNlcXVlbmNlIG9mIHBhaXJzIG9mIHRoZQorZm9ybToKKwora2V5OnZhbHVlOworCitOT1RFUworCitNYW55IGRldmljZXMgaGF2ZSBpbGwtZm9ybWVkIElFRUUgMTI4NCBEZXZpY2UgSURzLgorCitTRUUgQUxTTworCitwYXJwb3J0X2ZpbmRfY2xhc3MsIHBhcnBvcnRfZmluZF9kZXZpY2UsIHBhcnBvcnRfZGV2aWNlX251bQorDAorcGFycG9ydF9kZXZpY2VfbnVtIC0gY29udmVydCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gZGV2aWNlIG51bWJlcgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2ludCBwYXJwb3J0X2RldmljZV9udW0gKGludCBwYXJwb3J0LCBpbnQgbXV4LCBpbnQgZGFpc3kpOworCitERVNDUklQVElPTgorCitDb252ZXJ0IGJldHdlZW4gZGV2aWNlIGNvb3JkaW5hdGVzIChwb3J0LCBtdWx0aXBsZXhvciwgZGFpc3kgY2hhaW4KK2FkZHJlc3MpIGFuZCBkZXZpY2UgbnVtYmVyICh6ZXJvLWJhc2VkKS4KKworUkVUVVJOIFZBTFVFCisKK0RldmljZSBudW1iZXIsIG9yIC0xIGlmIG5vIGRldmljZSBhdCBnaXZlbiBjb29yZGluYXRlcy4KKworU0VFIEFMU08KKworcGFycG9ydF9kZXZpY2VfY29vcmRzLCBwYXJwb3J0X29wZW4sIHBhcnBvcnRfZGV2aWNlX2lkCisMCitwYXJwb3J0X2RldmljZV9jb29yZHMgLSBjb252ZXJ0IGRldmljZSBudW1iZXIgdG8gZGV2aWNlIGNvb3JkaW5hdGVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworaW50IHBhcnBvcnRfZGV2aWNlX2Nvb3JkcyAoaW50IGRldm51bSwgaW50ICpwYXJwb3J0LCBpbnQgKm11eCwKKwkJCSAgIGludCAqZGFpc3kpOworCitERVNDUklQVElPTgorCitDb252ZXJ0IGJldHdlZW4gZGV2aWNlIG51bWJlciAoemVyby1iYXNlZCkgYW5kIGRldmljZSBjb29yZGluYXRlcworKHBvcnQsIG11bHRpcGxleG9yLCBkYWlzeSBjaGFpbiBhZGRyZXNzKS4KKworUkVUVVJOIFZBTFVFCisKK1plcm8gb24gc3VjY2VzcywgaW4gd2hpY2ggY2FzZSB0aGUgY29vcmRpbmF0ZXMgYXJlICgqcGFycG9ydCwgKm11eCwKKypkYWlzeSkuCisKK1NFRSBBTFNPCisKK3BhcnBvcnRfZGV2aWNlX251bSwgcGFycG9ydF9vcGVuLCBwYXJwb3J0X2RldmljZV9pZAorDAorcGFycG9ydF9maW5kX2NsYXNzIC0gZmluZCBhIGRldmljZSBieSBpdHMgY2xhc3MKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCit0eXBlZGVmIGVudW0geworCVBBUlBPUlRfQ0xBU1NfTEVHQUNZID0gMCwgICAgICAgLyogTm9uLUlFRUUxMjg0IGRldmljZSAqLworCVBBUlBPUlRfQ0xBU1NfUFJJTlRFUiwKKwlQQVJQT1JUX0NMQVNTX01PREVNLAorCVBBUlBPUlRfQ0xBU1NfTkVULAorCVBBUlBPUlRfQ0xBU1NfSERDLCAgICAgICAgICAgICAgLyogSGFyZCBkaXNrIGNvbnRyb2xsZXIgKi8KKwlQQVJQT1JUX0NMQVNTX1BDTUNJQSwKKwlQQVJQT1JUX0NMQVNTX01FRElBLCAgICAgICAgICAgIC8qIE11bHRpbWVkaWEgZGV2aWNlICovCisJUEFSUE9SVF9DTEFTU19GREMsICAgICAgICAgICAgICAvKiBGbG9wcHkgZGlzayBjb250cm9sbGVyICovCisJUEFSUE9SVF9DTEFTU19QT1JUUywKKwlQQVJQT1JUX0NMQVNTX1NDQU5ORVIsCisJUEFSUE9SVF9DTEFTU19ESUdDQU0sCisJUEFSUE9SVF9DTEFTU19PVEhFUiwgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlICovCisJUEFSUE9SVF9DTEFTU19VTlNQRUMsICAgICAgICAgICAvKiBObyBDTFMgZmllbGQgaW4gSUQgKi8KKwlQQVJQT1JUX0NMQVNTX1NDU0lBREFQVEVSCit9IHBhcnBvcnRfZGV2aWNlX2NsYXNzOworCitpbnQgcGFycG9ydF9maW5kX2NsYXNzIChwYXJwb3J0X2RldmljZV9jbGFzcyBjbHMsIGludCBmcm9tKTsKKworREVTQ1JJUFRJT04KKworRmluZCBhIGRldmljZSBieSBjbGFzcy4gIFRoZSBzZWFyY2ggc3RhcnRzIGZyb20gZGV2aWNlIG51bWJlciBmcm9tKzEuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgZGV2aWNlIG51bWJlciBvZiB0aGUgbmV4dCBkZXZpY2UgaW4gdGhhdCBjbGFzcywgb3IgLTEgaWYgbm8gc3VjaAorZGV2aWNlIGV4aXN0cy4KKworTk9URVMKKworRXhhbXBsZSB1c2FnZToKKworaW50IGRldm51bSA9IC0xOword2hpbGUgKChkZXZudW0gPSBwYXJwb3J0X2ZpbmRfY2xhc3MgKFBBUlBPUlRfQ0xBU1NfRElHQ0FNLCBkZXZudW0pKSAhPSAtMSkgeworICAgIHN0cnVjdCBwYXJkZXZpY2UgKmRldiA9IHBhcnBvcnRfb3BlbiAoZGV2bnVtLCAuLi4pOworICAgIC4uLgorfQorCitTRUUgQUxTTworCitwYXJwb3J0X2ZpbmRfZGV2aWNlLCBwYXJwb3J0X29wZW4sIHBhcnBvcnRfZGV2aWNlX2lkCisMCitwYXJwb3J0X2ZpbmRfZGV2aWNlIC0gZmluZCBhIGRldmljZSBieSBpdHMgY2xhc3MKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitpbnQgcGFycG9ydF9maW5kX2RldmljZSAoY29uc3QgY2hhciAqbWZnLCBjb25zdCBjaGFyICptZGwsIGludCBmcm9tKTsKKworREVTQ1JJUFRJT04KKworRmluZCBhIGRldmljZSBieSB2ZW5kb3IgYW5kIG1vZGVsLiAgVGhlIHNlYXJjaCBzdGFydHMgZnJvbSBkZXZpY2UKK251bWJlciBmcm9tKzEuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgZGV2aWNlIG51bWJlciBvZiB0aGUgbmV4dCBkZXZpY2UgbWF0Y2hpbmcgdGhlIHNwZWNpZmljYXRpb25zLCBvcgorLTEgaWYgbm8gc3VjaCBkZXZpY2UgZXhpc3RzLgorCitOT1RFUworCitFeGFtcGxlIHVzYWdlOgorCitpbnQgZGV2bnVtID0gLTE7Cit3aGlsZSAoKGRldm51bSA9IHBhcnBvcnRfZmluZF9kZXZpY2UgKCJJT01FR0EiLCAiWklQKyIsIGRldm51bSkpICE9IC0xKSB7CisgICAgc3RydWN0IHBhcmRldmljZSAqZGV2ID0gcGFycG9ydF9vcGVuIChkZXZudW0sIC4uLik7CisgICAgLi4uCit9CisKK1NFRSBBTFNPCisKK3BhcnBvcnRfZmluZF9jbGFzcywgcGFycG9ydF9vcGVuLCBwYXJwb3J0X2RldmljZV9pZAorDAorcGFycG9ydF9zZXRfdGltZW91dCAtIHNldCB0aGUgaW5hY3Rpdml0eSB0aW1lb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK2xvbmcgcGFycG9ydF9zZXRfdGltZW91dCAoc3RydWN0IHBhcmRldmljZSAqZGV2LCBsb25nIGluYWN0aXZpdHkpOworCitERVNDUklQVElPTgorCitTZXQgdGhlIGluYWN0aXZpdHkgdGltZW91dCwgaW4gamlmZmllcywgZm9yIGEgcmVnaXN0ZXJlZCBkZXZpY2UuICBUaGUKK3ByZXZpb3VzIHRpbWVvdXQgaXMgcmV0dXJuZWQuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgcHJldmlvdXMgdGltZW91dCwgaW4gamlmZmllcy4KKworTk9URVMKKworU29tZSBvZiB0aGUgcG9ydC0+b3BzIGZ1bmN0aW9ucyBmb3IgYSBwYXJwb3J0IG1heSB0YWtlIHRpbWUsIG93aW5nIHRvCitkZWxheXMgYXQgdGhlIHBlcmlwaGVyYWwuICBBZnRlciB0aGUgcGVyaXBoZXJhbCBoYXMgbm90IHJlc3BvbmRlZCBmb3IKKydpbmFjdGl2aXR5JyBqaWZmaWVzLCBhIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgdGhlIGJsb2NraW5nIGZ1bmN0aW9uCit3aWxsIHJldHVybi4KKworQSB0aW1lb3V0IG9mIDAgamlmZmllcyBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIGZ1bmN0aW9uIG11c3QgZG8gYXMgbXVjaAorYXMgaXQgY2FuIHdpdGhvdXQgYmxvY2tpbmcgb3IgbGVhdmluZyB0aGUgaGFyZHdhcmUgaW4gYW4gdW5rbm93bgorc3RhdGUuICBJZiBwb3J0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBmcm9tIHdpdGhpbiBhbiBpbnRlcnJ1cHQKK2hhbmRsZXIsIGZvciBpbnN0YW5jZSwgYSB0aW1lb3V0IG9mIDAgamlmZmllcyBzaG91bGQgYmUgdXNlZC4KKworT25jZSBzZXQgZm9yIGEgcmVnaXN0ZXJlZCBkZXZpY2UsIHRoZSB0aW1lb3V0IHdpbGwgcmVtYWluIGF0IHRoZSBzZXQKK3ZhbHVlIHVudGlsIHNldCBhZ2Fpbi4KKworU0VFIEFMU08KKworcG9ydC0+b3BzLT54eHhfcmVhZC93cml0ZV95eXkKKwwKK1BPUlQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb25zIGluIHRoZSBwb3J0LT5vcHMgc3RydWN0dXJlIChzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zKQorYXJlIHByb3ZpZGVkIGJ5IHRoZSBsb3ctbGV2ZWwgZHJpdmVyIHJlc3BvbnNpYmxlIGZvciB0aGF0IHBvcnQuCisKK3BvcnQtPm9wcy0+cmVhZF9kYXRhIC0gcmVhZCB0aGUgZGF0YSByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdW5zaWduZWQgY2hhciAoKnJlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK0lmIHBvcnQtPm1vZGVzIGNvbnRhaW5zIHRoZSBQQVJQT1JUX01PREVfVFJJU1RBVEUgZmxhZyBhbmQgdGhlCitQQVJQT1JUX0NPTlRST0xfRElSRUNUSU9OIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlciBpcyBzZXQsIHRoaXMKK3JldHVybnMgdGhlIHZhbHVlIG9uIHRoZSBkYXRhIHBpbnMuICBJZiBwb3J0LT5tb2RlcyBjb250YWlucyB0aGUKK1BBUlBPUlRfTU9ERV9UUklTVEFURSBmbGFnIGFuZCB0aGUgUEFSUE9SVF9DT05UUk9MX0RJUkVDVElPTiBiaXQgaXMKK25vdCBzZXQsIHRoZSByZXR1cm4gdmFsdWUgX21heV8gYmUgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgZGF0YQorcmVnaXN0ZXIuICBPdGhlcndpc2UgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCisKK1NFRSBBTFNPCisKK3dyaXRlX2RhdGEsIHJlYWRfc3RhdHVzLCB3cml0ZV9jb250cm9sCisMCitwb3J0LT5vcHMtPndyaXRlX2RhdGEgLSB3cml0ZSB0aGUgZGF0YSByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXZvaWQgKCp3cml0ZV9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgZCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitXcml0ZXMgdG8gdGhlIGRhdGEgcmVnaXN0ZXIuICBNYXkgaGF2ZSBzaWRlLWVmZmVjdHMgKGEgU1RST0JFIHB1bHNlLAorZm9yIGluc3RhbmNlKS4KKworU0VFIEFMU08KKworcmVhZF9kYXRhLCByZWFkX3N0YXR1cywgd3JpdGVfY29udHJvbAorDAorcG9ydC0+b3BzLT5yZWFkX3N0YXR1cyAtIHJlYWQgdGhlIHN0YXR1cyByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl1bnNpZ25lZCBjaGFyICgqcmVhZF9zdGF0dXMpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitSZWFkcyBmcm9tIHRoZSBzdGF0dXMgcmVnaXN0ZXIuICBUaGlzIGlzIGEgYml0bWFzazoKKworLSBQQVJQT1JUX1NUQVRVU19FUlJPUiAocHJpbnRlciBmYXVsdCwgIm5GYXVsdCIpCistIFBBUlBPUlRfU1RBVFVTX1NFTEVDVCAob24tbGluZSwgIlNlbGVjdCIpCistIFBBUlBPUlRfU1RBVFVTX1BBUEVST1VUIChubyBwYXBlciwgIlBFcnJvciIpCistIFBBUlBPUlRfU1RBVFVTX0FDSyAoaGFuZHNoYWtlLCAibkFjayIpCistIFBBUlBPUlRfU1RBVFVTX0JVU1kgKGJ1c3ksICJCdXN5IikKKworVGhlcmUgbWF5IGJlIG90aGVyIGJpdHMgc2V0LgorCitTRUUgQUxTTworCityZWFkX2RhdGEsIHdyaXRlX2RhdGEsIHdyaXRlX2NvbnRyb2wKKwwKK3BvcnQtPm9wcy0+cmVhZF9jb250cm9sIC0gcmVhZCB0aGUgY29udHJvbCByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdW5zaWduZWQgY2hhciAoKnJlYWRfY29udHJvbCkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1JldHVybnMgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgY29udHJvbCByZWdpc3RlciAoZWl0aGVyIGZyb20KK3dyaXRlX2NvbnRyb2wgb3IgZnJvYl9jb250cm9sKS4gIE5vIHBvcnQgYWNjZXNzIGlzIHBlcmZvcm1lZC4KKworU0VFIEFMU08KKworcmVhZF9kYXRhLCB3cml0ZV9kYXRhLCByZWFkX3N0YXR1cywgd3JpdGVfY29udHJvbAorDAorcG9ydC0+b3BzLT53cml0ZV9jb250cm9sIC0gd3JpdGUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl2b2lkICgqd3JpdGVfc3RhdHVzKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgcyk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitXcml0ZXMgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuIFRoaXMgaXMgYSBiaXRtYXNrOgorICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fCistIFBBUlBPUlRfQ09OVFJPTF9TVFJPQkUgKG5TdHJvYmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX18KKy0gUEFSUE9SVF9DT05UUk9MX0FVVE9GRCAobkF1dG9GZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fCistIFBBUlBPUlRfQ09OVFJPTF9JTklUIChuSW5pdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fCistIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QgKG5TZWxlY3RJbikKKworU0VFIEFMU08KKworcmVhZF9kYXRhLCB3cml0ZV9kYXRhLCByZWFkX3N0YXR1cywgZnJvYl9jb250cm9sCisMCitwb3J0LT5vcHMtPmZyb2JfY29udHJvbCAtIHdyaXRlIGNvbnRyb2wgcmVnaXN0ZXIgYml0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdm9pZCAoKmZyb2JfY29udHJvbCkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2ssCisJCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcmVhZGluZyBmcm9tIHRoZSBjb250cm9sIHJlZ2lzdGVyLCBtYXNraW5nIG91dAordGhlIGJpdHMgaW4gbWFzaywgZXhjbHVzaXZlLW9yJ2luZyB3aXRoIHRoZSBiaXRzIGluIHZhbCwgYW5kIHdyaXRpbmcKK3RoZSByZXN1bHQgdG8gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCisKK0FzIHNvbWUgcG9ydHMgZG9uJ3QgYWxsb3cgcmVhZHMgZnJvbSB0aGUgY29udHJvbCBwb3J0LCBhIHNvZnR3YXJlIGNvcHkKK29mIGl0cyBjb250ZW50cyBpcyBtYWludGFpbmVkLCBzbyBmcm9iX2NvbnRyb2wgaXMgaW4gZmFjdCBvbmx5IG9uZQorcG9ydCBhY2Nlc3MuCisKK1NFRSBBTFNPCisKK3JlYWRfZGF0YSwgd3JpdGVfZGF0YSwgcmVhZF9zdGF0dXMsIHdyaXRlX2NvbnRyb2wKKwwKK3BvcnQtPm9wcy0+ZW5hYmxlX2lycSAtIGVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXZvaWQgKCplbmFibGVfaXJxKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworVGhlIHBhcmFsbGVsIHBvcnQgaGFyZHdhcmUgaXMgaW5zdHJ1Y3RlZCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGF0CithcHByb3ByaWF0ZSBtb21lbnRzLCBhbHRob3VnaCB0aG9zZSBtb21lbnRzIGFyZQorYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiAgRm9yIHRoZSBQQyBhcmNoaXRlY3R1cmUsIGludGVycnVwdHMgYXJlCitjb21tb25seSBnZW5lcmF0ZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIG5BY2suCisKK1NFRSBBTFNPCisKK2Rpc2FibGVfaXJxCisMCitwb3J0LT5vcHMtPmRpc2FibGVfaXJxIC0gZGlzYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl2b2lkICgqZGlzYWJsZV9pcnEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitUaGUgcGFyYWxsZWwgcG9ydCBoYXJkd2FyZSBpcyBpbnN0cnVjdGVkIG5vdCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzLgorVGhlIGludGVycnVwdCBpdHNlbGYgaXMgbm90IG1hc2tlZC4KKworU0VFIEFMU08KKworZW5hYmxlX2lycQorDAorcG9ydC0+b3BzLT5kYXRhX2ZvcndhcmQgLSBlbmFibGUgZGF0YSBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwl2b2lkICgqZGF0YV9mb3J3YXJkKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworRW5hYmxlcyB0aGUgZGF0YSBsaW5lIGRyaXZlcnMsIGZvciA4LWJpdCBob3N0LXRvLXBlcmlwaGVyYWwKK2NvbW11bmljYXRpb25zLgorCitTRUUgQUxTTworCitkYXRhX3JldmVyc2UKKwwKK3BvcnQtPm9wcy0+ZGF0YV9yZXZlcnNlIC0gdHJpc3RhdGUgdGhlIGJ1ZmZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJdm9pZCAoKmRhdGFfcmV2ZXJzZSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0KTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1BsYWNlcyB0aGUgZGF0YSBidXMgaW4gYSBoaWdoIGltcGVkYW5jZSBzdGF0ZSwgaWYgcG9ydC0+bW9kZXMgaGFzIHRoZQorUEFSUE9SVF9NT0RFX1RSSVNUQVRFIGJpdCBzZXQuCisKK1NFRSBBTFNPCisKK2RhdGFfZm9yd2FyZAorDAorcG9ydC0+b3BzLT5lcHBfd3JpdGVfZGF0YSAtIHdyaXRlIEVQUCBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKmVwcF93cml0ZV9kYXRhKSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4sIGludCBmbGFncyk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitXcml0ZXMgZGF0YSBpbiBFUFAgbW9kZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorCitUaGUgJ2ZsYWdzJyBwYXJhbWV0ZXIgbWF5IGJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcsCitiaXR3aXNlLW9yJ2VkIHRvZ2V0aGVyOgorCitQQVJQT1JUX0VQUF9GQVNUCVVzZSBmYXN0IHRyYW5zZmVycy4gU29tZSBjaGlwcyBwcm92aWRlIDE2LWJpdCBhbmQKKwkJCTMyLWJpdCByZWdpc3RlcnMuICBIb3dldmVyLCBpZiBhIHRyYW5zZmVyCisJCQl0aW1lcyBvdXQsIHRoZSByZXR1cm4gdmFsdWUgbWF5IGJlIHVucmVsaWFibGUuCisKK1NFRSBBTFNPCisKK2VwcF9yZWFkX2RhdGEsIGVwcF93cml0ZV9hZGRyLCBlcHBfcmVhZF9hZGRyCisMCitwb3J0LT5vcHMtPmVwcF9yZWFkX2RhdGEgLSByZWFkIEVQUCBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqZXBwX3JlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCB2b2lkICpidWYsCisJCQkJIHNpemVfdCBsZW4sIGludCBmbGFncyk7CisJLi4uCit9OworCitERVNDUklQVElPTgorCitSZWFkcyBkYXRhIGluIEVQUCBtb2RlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisKK1RoZSAnZmxhZ3MnIHBhcmFtZXRlciBtYXkgYmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZywKK2JpdHdpc2Utb3InZWQgdG9nZXRoZXI6CisKK1BBUlBPUlRfRVBQX0ZBU1QJVXNlIGZhc3QgdHJhbnNmZXJzLiBTb21lIGNoaXBzIHByb3ZpZGUgMTYtYml0IGFuZAorCQkJMzItYml0IHJlZ2lzdGVycy4gIEhvd2V2ZXIsIGlmIGEgdHJhbnNmZXIKKwkJCXRpbWVzIG91dCwgdGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgdW5yZWxpYWJsZS4KKworU0VFIEFMU08KKworZXBwX3dyaXRlX2RhdGEsIGVwcF93cml0ZV9hZGRyLCBlcHBfcmVhZF9hZGRyCisMCitwb3J0LT5vcHMtPmVwcF93cml0ZV9hZGRyIC0gd3JpdGUgRVBQIGFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqZXBwX3dyaXRlX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1dyaXRlcyBFUFAgYWRkcmVzc2VzICg4IGJpdHMgZWFjaCksIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgd3JpdHRlbi4KKworVGhlICdmbGFncycgcGFyYW1ldGVyIG1heSBiZSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nLAorYml0d2lzZS1vcidlZCB0b2dldGhlcjoKKworUEFSUE9SVF9FUFBfRkFTVAlVc2UgZmFzdCB0cmFuc2ZlcnMuIFNvbWUgY2hpcHMgcHJvdmlkZSAxNi1iaXQgYW5kCisJCQkzMi1iaXQgcmVnaXN0ZXJzLiAgSG93ZXZlciwgaWYgYSB0cmFuc2ZlcgorCQkJdGltZXMgb3V0LCB0aGUgcmV0dXJuIHZhbHVlIG1heSBiZSB1bnJlbGlhYmxlLgorCisoRG9lcyBQQVJQT1JUX0VQUF9GQVNUIG1ha2Ugc2Vuc2UgZm9yIHRoaXMgZnVuY3Rpb24/KQorCitTRUUgQUxTTworCitlcHBfd3JpdGVfZGF0YSwgZXBwX3JlYWRfZGF0YSwgZXBwX3JlYWRfYWRkcgorDAorcG9ydC0+b3BzLT5lcHBfcmVhZF9hZGRyIC0gcmVhZCBFUFAgYWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKmVwcF9yZWFkX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgdm9pZCAqYnVmLAorCQkJCSBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgRVBQIGFkZHJlc3NlcyAoOCBiaXRzIGVhY2gpLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIHJlYWQuCisKK1RoZSAnZmxhZ3MnIHBhcmFtZXRlciBtYXkgYmUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZywKK2JpdHdpc2Utb3InZWQgdG9nZXRoZXI6CisKK1BBUlBPUlRfRVBQX0ZBU1QJVXNlIGZhc3QgdHJhbnNmZXJzLiBTb21lIGNoaXBzIHByb3ZpZGUgMTYtYml0IGFuZAorCQkJMzItYml0IHJlZ2lzdGVycy4gIEhvd2V2ZXIsIGlmIGEgdHJhbnNmZXIKKwkJCXRpbWVzIG91dCwgdGhlIHJldHVybiB2YWx1ZSBtYXkgYmUgdW5yZWxpYWJsZS4KKworKERvZXMgUEFSUE9SVF9FUFBfRkFTVCBtYWtlIHNlbnNlIGZvciB0aGlzIGZ1bmN0aW9uPykKKworU0VFIEFMU08KKworZXBwX3dyaXRlX2RhdGEsIGVwcF9yZWFkX2RhdGEsIGVwcF93cml0ZV9hZGRyCisMCitwb3J0LT5vcHMtPmVjcF93cml0ZV9kYXRhIC0gd3JpdGUgYSBibG9jayBvZiBFQ1AgZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwlzaXplX3QgKCplY3Bfd3JpdGVfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCSAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworV3JpdGVzIGEgYmxvY2sgb2YgRUNQIGRhdGEuICBUaGUgJ2ZsYWdzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworUkVUVVJOIFZBTFVFCisKK1RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKworU0VFIEFMU08KKworZWNwX3JlYWRfZGF0YSwgZWNwX3dyaXRlX2FkZHIKKwwKK3BvcnQtPm9wcy0+ZWNwX3JlYWRfZGF0YSAtIHJlYWQgYSBibG9jayBvZiBFQ1AgZGF0YQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKmVjcF9yZWFkX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgYSBibG9jayBvZiBFQ1AgZGF0YS4gIFRoZSAnZmxhZ3MnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorCitSRVRVUk4gVkFMVUUKKworVGhlIG51bWJlciBvZiBieXRlcyByZWFkLiAgTkIuIFRoZXJlIG1heSBiZSBtb3JlIHVucmVhZCBkYXRhIGluIGEKK0ZJRk8uICBJcyB0aGVyZSBhIHdheSBvZiBzdHVubmluZyB0aGUgRklGTyB0byBwcmV2ZW50IHRoaXM/CisKK1NFRSBBTFNPCisKK2VjcF93cml0ZV9ibG9jaywgZWNwX3dyaXRlX2FkZHIKKwwKK3BvcnQtPm9wcy0+ZWNwX3dyaXRlX2FkZHIgLSB3cml0ZSBhIGJsb2NrIG9mIEVDUCBhZGRyZXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqZWNwX3dyaXRlX2FkZHIpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1dyaXRlcyBhIGJsb2NrIG9mIEVDUCBhZGRyZXNzZXMuICBUaGUgJ2ZsYWdzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworUkVUVVJOIFZBTFVFCisKK1RoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KKworTk9URVMKKworVGhpcyBtYXkgdXNlIGEgRklGTywgYW5kIGlmIHNvIHNoYWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIEZJRk8gaXMgZW1wdHkuCisKK1NFRSBBTFNPCisKK2VjcF9yZWFkX2RhdGEsIGVjcF93cml0ZV9kYXRhCisMCitwb3J0LT5vcHMtPm5pYmJsZV9yZWFkX2RhdGEgLSByZWFkIGEgYmxvY2sgb2YgZGF0YSBpbiBuaWJibGUgbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NZTk9QU0lTCisKKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKK3N0cnVjdCBwYXJwb3J0X29wZXJhdGlvbnMgeworCS4uLgorCXNpemVfdCAoKm5pYmJsZV9yZWFkX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgYSBibG9jayBvZiBkYXRhIGluIG5pYmJsZSBtb2RlLiAgVGhlICdmbGFncycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisKK1JFVFVSTiBWQUxVRQorCitUaGUgbnVtYmVyIG9mIHdob2xlIGJ5dGVzIHJlYWQuCisKK1NFRSBBTFNPCisKK2J5dGVfcmVhZF9kYXRhLCBjb21wYXRfd3JpdGVfZGF0YQorDAorcG9ydC0+b3BzLT5ieXRlX3JlYWRfZGF0YSAtIHJlYWQgYSBibG9jayBvZiBkYXRhIGluIGJ5dGUgbW9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTWU5PUFNJUworCisjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgorCitzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHsKKwkuLi4KKwlzaXplX3QgKCpieXRlX3JlYWRfZGF0YSkgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAorCQkJCSAgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOworCS4uLgorfTsKKworREVTQ1JJUFRJT04KKworUmVhZHMgYSBibG9jayBvZiBkYXRhIGluIGJ5dGUgbW9kZS4gIFRoZSAnZmxhZ3MnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorCitSRVRVUk4gVkFMVUUKKworVGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorCitTRUUgQUxTTworCituaWJibGVfcmVhZF9kYXRhLCBjb21wYXRfd3JpdGVfZGF0YQorDAorcG9ydC0+b3BzLT5jb21wYXRfd3JpdGVfZGF0YSAtIHdyaXRlIGEgYmxvY2sgb2YgZGF0YSBpbiBjb21wYXRpYmlsaXR5IG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU1lOT1BTSVMKKworI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KKworc3RydWN0IHBhcnBvcnRfb3BlcmF0aW9ucyB7CisJLi4uCisJc2l6ZV90ICgqY29tcGF0X3dyaXRlX2RhdGEpIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCQkgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKKwkuLi4KK307CisKK0RFU0NSSVBUSU9OCisKK1dyaXRlcyBhIGJsb2NrIG9mIGRhdGEgaW4gY29tcGF0aWJpbGl0eSBtb2RlLiAgVGhlICdmbGFncycgcGFyYW1ldGVyCitpcyBpZ25vcmVkLgorCitSRVRVUk4gVkFMVUUKKworVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorCitTRUUgQUxTTworCituaWJibGVfcmVhZF9kYXRhLCBieXRlX3JlYWRfZGF0YQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wYXJwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vcGFycG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhN2NlZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGFycG9ydC50eHQKQEAgLTAsMCArMSwyNjggQEAKK1RoZSBgcGFycG9ydCcgY29kZSBwcm92aWRlcyBwYXJhbGxlbC1wb3J0IHN1cHBvcnQgdW5kZXIgTGludXguICBUaGlzCitpbmNsdWRlcyB0aGUgYWJpbGl0eSB0byBzaGFyZSBvbmUgcG9ydCBiZXR3ZWVuIG11bHRpcGxlIGRldmljZQorZHJpdmVycy4KKworWW91IGNhbiBwYXNzIHBhcmFtZXRlcnMgdG8gdGhlIHBhcnBvcnQgY29kZSB0byBvdmVycmlkZSBpdHMgYXV0b21hdGljCitkZXRlY3Rpb24gb2YgeW91ciBoYXJkd2FyZS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB5b3Ugd2FudAordG8gdXNlIElSUXMsIHNpbmNlIGluIGdlbmVyYWwgdGhlc2UgY2FuJ3QgYmUgYXV0b3Byb2JlZCBzdWNjZXNzZnVsbHkuCitCeSBkZWZhdWx0IElSUXMgYXJlIG5vdCB1c2VkIGV2ZW4gaWYgdGhleSBfY2FuXyBiZSBwcm9iZWQuICBUaGlzIGlzCitiZWNhdXNlIHRoZXJlIGFyZSBhIGxvdCBvZiBwZW9wbGUgdXNpbmcgdGhlIHNhbWUgSVJRIGZvciB0aGVpcgorcGFyYWxsZWwgcG9ydCBhbmQgYSBzb3VuZCBjYXJkIG9yIG5ldHdvcmsgY2FyZC4KKworVGhlIHBhcnBvcnQgY29kZSBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0czogZ2VuZXJpYyAod2hpY2ggZGVhbHMgd2l0aAorcG9ydC1zaGFyaW5nKSBhbmQgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCAod2hpY2ggZGVhbHMgd2l0aCBhY3R1YWxseQordXNpbmcgdGhlIHBvcnQpLgorCisKK1BhcnBvcnQgYXMgbW9kdWxlcworPT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBsb2FkIHRoZSBwYXJwb3J0IGNvZGUgYXMgYSBtb2R1bGUsIHNheQorCisJIyBpbnNtb2QgcGFycG9ydAorCit0byBsb2FkIHRoZSBnZW5lcmljIHBhcnBvcnQgY29kZS4gIFlvdSB0aGVuIG11c3QgbG9hZCB0aGUKK2FyY2hpdGVjdHVyZS1kZXBlbmRlbnQgY29kZSB3aXRoIChmb3IgZXhhbXBsZSk6CisKKwkjIGluc21vZCBwYXJwb3J0X3BjIGlvPTB4M2JjLDB4Mzc4LDB4Mjc4IGlycT1ub25lLDcsYXV0bworCit0byB0ZWxsIHRoZSBwYXJwb3J0IGNvZGUgdGhhdCB5b3Ugd2FudCB0aHJlZSBQQy1zdHlsZSBwb3J0cywgb25lIGF0CisweDNiYyB3aXRoIG5vIElSUSwgb25lIGF0IDB4Mzc4IHVzaW5nIElSUSA3LCBhbmQgb25lIGF0IDB4Mjc4IHdpdGggYW4KK2F1dG8tZGV0ZWN0ZWQgSVJRLiAgQ3VycmVudGx5LCBQQy1zdHlsZSAocGFycG9ydF9wYyksIFN1biBgYnBwJywKK0FtaWdhLCBBdGFyaSwgYW5kIE1GQzMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLgorCitQQ0kgcGFyYWxsZWwgSS9PIGNhcmQgc3VwcG9ydCBjb21lcyBmcm9tIHBhcnBvcnRfcGMuICBCYXNlIEkvTworYWRkcmVzc2VzIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGZvciBzdXBwb3J0ZWQgUENJIGNhcmRzIHNpbmNlIHRoZXkKK2FyZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLgorCisKK0tNb2QKKy0tLS0KKworSWYgeW91IHVzZSBrbW9kLCB5b3Ugd2lsbCBmaW5kIGl0IHVzZWZ1bCB0byBlZGl0IC9ldGMvbW9kcHJvYmUuY29uZi4KK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgbGluZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkOgorCisJYWxpYXMgcGFycG9ydF9sb3dsZXZlbCBwYXJwb3J0X3BjCisJb3B0aW9ucyBwYXJwb3J0X3BjIGlvPTB4Mzc4LDB4Mjc4IGlycT03LGF1dG8KKworS01vZCB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBsb2FkIHBhcnBvcnRfcGMgKHdpdGggdGhlIG9wdGlvbnMKKyJpbz0weDM3OCwweDI3OCBpcnE9NyxhdXRvIikgd2hlbmV2ZXIgYSBwYXJhbGxlbCBwb3J0IGRldmljZSBkcml2ZXIKKyhzdWNoIGFzIGxwKSBpcyBsb2FkZWQuCisKK05vdGUgdGhhdCB0aGVzZSBhcmUgZXhhbXBsZSBsaW5lcyBvbmx5ISAgWW91IHNob3VsZG4ndCBpbiBnZW5lcmFsIG5lZWQKK3RvIHNwZWNpZnkgYW55IG9wdGlvbnMgdG8gcGFycG9ydF9wYyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBhCitwYXJhbGxlbCBwb3J0LgorCisKK1BhcnBvcnQgcHJvYmUgW29wdGlvbmFsXQorLS0tLS0tLS0tLS0tLQorCitJbiAyLjIga2VybmVscyB0aGVyZSB3YXMgYSBtb2R1bGUgY2FsbGVkIHBhcnBvcnRfcHJvYmUsIHdoaWNoIHdhcyB1c2VkCitmb3IgY29sbGVjdGluZyBJRUVFIDEyODQgZGV2aWNlIElEIGluZm9ybWF0aW9uLiAgVGhpcyBoYXMgbm93IGJlZW4KK2VuaGFuY2VkIGFuZCBub3cgbGl2ZXMgd2l0aCB0aGUgSUVFRSAxMjg0IHN1cHBvcnQuICBXaGVuIGEgcGFyYWxsZWwKK3BvcnQgaXMgZGV0ZWN0ZWQsIHRoZSBkZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBpdCBhcmUgYW5hbHlzZWQsCithbmQgaW5mb3JtYXRpb24gaXMgbG9nZ2VkIGxpa2UgdGhpczoKKworCXBhcnBvcnQwOiBQcmludGVyLCBCSkMtMjEwIChDYW5vbikKKworVGhlIHByb2JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmcm9tIGZpbGVzIGluIC9wcm9jL3N5cy9kZXYvcGFycG9ydC8uCisKKworUGFycG9ydCBsaW5rZWQgaW50byB0aGUga2VybmVsIHN0YXRpY2FsbHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBjb21waWxlIHRoZSBwYXJwb3J0IGNvZGUgaW50byB0aGUga2VybmVsLCB0aGVuIHlvdSBjYW4gdXNlCitrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzIHRvIGdldCB0aGUgc2FtZSBlZmZlY3QuICBBZGQgc29tZXRoaW5nIGxpa2UgdGhlCitmb2xsb3dpbmcgdG8geW91ciBMSUxPIGNvbW1hbmQgbGluZToKKworCXBhcnBvcnQ9MHgzYmMgcGFycG9ydD0weDM3OCw3IHBhcnBvcnQ9MHgyNzgsYXV0byxub2ZpZm8KKworWW91IGNhbiBoYXZlIG1hbnkgYHBhcnBvcnQ9Li4uJyBzdGF0ZW1lbnRzLCBvbmUgZm9yIGVhY2ggcG9ydCB5b3Ugd2FudAordG8gYWRkLiAgQWRkaW5nIGBwYXJwb3J0PTAnIHRvIHRoZSBrZXJuZWwgY29tbWFuZC1saW5lIHdpbGwgZGlzYWJsZQorcGFycG9ydCBzdXBwb3J0IGVudGlyZWx5LiAgQWRkaW5nIGBwYXJwb3J0PWF1dG8nIHRvIHRoZSBrZXJuZWwKK2NvbW1hbmQtbGluZSB3aWxsIG1ha2UgcGFycG9ydCB1c2UgYW55IElSUSBsaW5lcyBvciBETUEgY2hhbm5lbHMgdGhhdAoraXQgYXV0by1kZXRlY3RzLgorCisKK0ZpbGVzIGluIC9wcm9jCis9PT09PT09PT09PT09PQorCitJZiB5b3UgaGF2ZSBjb25maWd1cmVkIHRoZSAvcHJvYyBmaWxlc3lzdGVtIGludG8geW91ciBrZXJuZWwsIHlvdSB3aWxsCitzZWUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5OiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQuICBJbiB0aGVyZSB3aWxsIGJlIGEKK2RpcmVjdG9yeSBlbnRyeSBmb3IgZWFjaCBwYXJhbGxlbCBwb3J0IGZvciB3aGljaCBwYXJwb3J0IGlzCitjb25maWd1cmVkLiAgSW4gZWFjaCBvZiB0aG9zZSBkaXJlY3RvcmllcyBhcmUgYSBjb2xsZWN0aW9uIG9mIGZpbGVzCitkZXNjcmliaW5nIHRoYXQgcGFyYWxsZWwgcG9ydC4KKworVGhlIC9wcm9jL3N5cy9kZXYvcGFycG9ydCBkaXJlY3RvcnkgdHJlZSBsb29rcyBsaWtlOgorCitwYXJwb3J0Cit8LS0gZGVmYXVsdAorfCAgIHwtLSBzcGludGltZQorfCAgIGAtLSB0aW1lc2xpY2UKK3wtLSBwYXJwb3J0MAorfCAgIHwtLSBhdXRvcHJvYmUKK3wgICB8LS0gYXV0b3Byb2JlMAorfCAgIHwtLSBhdXRvcHJvYmUxCit8ICAgfC0tIGF1dG9wcm9iZTIKK3wgICB8LS0gYXV0b3Byb2JlMworfCAgIHwtLSBkZXZpY2VzCit8ICAgfCAgIHwtLSBhY3RpdmUKK3wgICB8ICAgYC0tIGxwCit8ICAgfCAgICAgICBgLS0gdGltZXNsaWNlCit8ICAgfC0tIGJhc2UtYWRkcgorfCAgIHwtLSBpcnEKK3wgICB8LS0gZG1hCit8ICAgfC0tIG1vZGVzCit8ICAgYC0tIHNwaW50aW1lCitgLS0gcGFycG9ydDEKKyAgICB8LS0gYXV0b3Byb2JlCisgICAgfC0tIGF1dG9wcm9iZTAKKyAgICB8LS0gYXV0b3Byb2JlMQorICAgIHwtLSBhdXRvcHJvYmUyCisgICAgfC0tIGF1dG9wcm9iZTMKKyAgICB8LS0gZGV2aWNlcworICAgIHwgICB8LS0gYWN0aXZlCisgICAgfCAgIGAtLSBwcGEKKyAgICB8ICAgICAgIGAtLSB0aW1lc2xpY2UKKyAgICB8LS0gYmFzZS1hZGRyCisgICAgfC0tIGlycQorICAgIHwtLSBkbWEKKyAgICB8LS0gbW9kZXMKKyAgICBgLS0gc3BpbnRpbWUKKworCitGaWxlOgkJQ29udGVudHM6CisKK2RldmljZXMvYWN0aXZlCUEgbGlzdCBvZiB0aGUgZGV2aWNlIGRyaXZlcnMgdXNpbmcgdGhhdCBwb3J0LiAgQSAiKyIKKwkJd2lsbCBhcHBlYXIgYnkgdGhlIG5hbWUgb2YgdGhlIGRldmljZSBjdXJyZW50bHkgdXNpbmcKKwkJdGhlIHBvcnQgKGl0IG1pZ2h0IG5vdCBhcHBlYXIgYWdhaW5zdCBhbnkpLiAgVGhlCisJCXN0cmluZyAibm9uZSIgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbm8gZGV2aWNlIGRyaXZlcnMKKwkJdXNpbmcgdGhhdCBwb3J0LgorCitiYXNlLWFkZHIJUGFyYWxsZWwgcG9ydCdzIGJhc2UgYWRkcmVzcywgb3IgYWRkcmVzc2VzIGlmIHRoZSBwb3J0CisJCWhhcyBtb3JlIHRoYW4gb25lIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgc2VwYXJhdGVkCisJCXdpdGggdGFicy4gIFRoZXNlIHZhbHVlcyBtaWdodCBub3QgaGF2ZSBhbnkgc2Vuc2libGUKKwkJbWVhbmluZyBmb3Igc29tZSBwb3J0cy4KKworaXJxCQlQYXJhbGxlbCBwb3J0J3MgSVJRLCBvciAtMSBpZiBub25lIGlzIGJlaW5nIHVzZWQuCisKK2RtYQkJUGFyYWxsZWwgcG9ydCdzIERNQSBjaGFubmVsLCBvciAtMSBpZiBub25lIGlzIGJlaW5nCisJCXVzZWQuCisKK21vZGVzCQlQYXJhbGxlbCBwb3J0J3MgaGFyZHdhcmUgbW9kZXMsIGNvbW1hLXNlcGFyYXRlZCwKKwkJbWVhbmluZzoKKworCQlQQ1NQUAkJUEMtc3R5bGUgU1BQIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlLgorCQlUUklTVEFURQlQb3J0IGlzIGJpZGlyZWN0aW9uYWwuCisJCUNPTVBBVAkJSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBwcmludGVycyBpcworCQkJCWF2YWlsYWJsZSBhbmQgd2lsbCBiZSB1c2VkLgorCQlFUFAJCUhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgRVBQIHByb3RvY29sCisJCQkJaXMgYXZhaWxhYmxlIGFuZCB3aWxsIGJlIHVzZWQuCisJCUVDUAkJSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBFQ1AgcHJvdG9jb2wKKwkJCQlpcyBhdmFpbGFibGUgYW5kIHdpbGwgYmUgdXNlZC4KKwkJRE1BCQlETUEgaXMgYXZhaWxhYmxlIGFuZCB3aWxsIGJlIHVzZWQuCisKKwkJTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgb25seSB0YWtlCisJCWFkdmFudGFnZSBvZiBDT01QQVQgYW5kIEVDUCBtb2RlcyBpZiBpdCBoYXMgYW4gSVJRCisJCWxpbmUgdG8gdXNlLgorCithdXRvcHJvYmUJQW55IElFRUUtMTI4NCBkZXZpY2UgSUQgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbgorCQlhY3F1aXJlZCBmcm9tIHRoZSAobm9uLUlFRUUgMTI4NC4zKSBkZXZpY2UuCisKK2F1dG9wcm9iZVswLTNdCUlFRUUgMTI4NCBkZXZpY2UgSUQgaW5mb3JtYXRpb24gcmV0cmlldmVkIGZyb20KKwkJZGFpc3ktY2hhaW4gZGV2aWNlcyB0aGF0IGNvbmZvcm0gdG8gSUVFRSAxMjg0LjMuCisKK3NwaW50aW1lCVRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHRvIGJ1c3ktbG9vcCB3aGlsZSB3YWl0aW5nCisJCWZvciB0aGUgcGVyaXBoZXJhbCB0byByZXNwb25kLiAgWW91IG1pZ2h0IGZpbmQgdGhhdAorCQlhZGp1c3RpbmcgdGhpcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSwgZGVwZW5kaW5nIG9uIHlvdXIKKwkJcGVyaXBoZXJhbHMuICBUaGlzIGlzIGEgcG9ydC13aWRlIHNldHRpbmcsIGkuZS4gaXQKKwkJYXBwbGllcyB0byBhbGwgZGV2aWNlcyBvbiBhIHBhcnRpY3VsYXIgcG9ydC4KKwordGltZXNsaWNlCVRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgYSBkZXZpY2UgZHJpdmVyIGlzCisJCWFsbG93ZWQgdG8ga2VlcCBhIHBvcnQgY2xhaW1lZCBmb3IuICBUaGlzIGlzIGFkdmlzb3J5LAorCQlhbmQgZHJpdmVyIGNhbiBpZ25vcmUgaXQgaWYgaXQgbXVzdC4KKworZGVmYXVsdC8qCVRoZSBkZWZhdWx0cyBmb3Igc3BpbnRpbWUgYW5kIHRpbWVzbGljZS4gV2hlbiBhIG5ldworCQlwb3J0IGlzCXJlZ2lzdGVyZWQsIGl0IHBpY2tzIHVwIHRoZSBkZWZhdWx0IHNwaW50aW1lLgorCQlXaGVuIGEgbmV3IGRldmljZSBpcyByZWdpc3RlcmVkLCBpdCBwaWNrcyB1cCB0aGUKKwkJZGVmYXVsdCB0aW1lc2xpY2UuCisKK0RldmljZSBkcml2ZXJzCis9PT09PT09PT09PT09PQorCitPbmNlIHRoZSBwYXJwb3J0IGNvZGUgaXMgaW5pdGlhbGlzZWQsIHlvdSBjYW4gYXR0YWNoIGRldmljZSBkcml2ZXJzIHRvCitzcGVjaWZpYyBwb3J0cy4gIE5vcm1hbGx5IHRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5OyBpZiB0aGUgbHAgZHJpdmVyCitpcyBsb2FkZWQgaXQgd2lsbCBjcmVhdGUgb25lIGxwIGRldmljZSBmb3IgZWFjaCBwb3J0IGZvdW5kLiAgWW91IGNhbgorb3ZlcnJpZGUgdGhpcywgdGhvdWdoLCBieSB1c2luZyBwYXJhbWV0ZXJzIGVpdGhlciB3aGVuIHlvdSBsb2FkIHRoZSBscAorZHJpdmVyOgorCisJIyBpbnNtb2QgbHAgcGFycG9ydD0wLDIKKworb3Igb24gdGhlIExJTE8gY29tbWFuZCBsaW5lOgorCisJbHA9cGFycG9ydDAgbHA9cGFycG9ydDIKKworQm90aCB0aGUgYWJvdmUgZXhhbXBsZXMgd291bGQgaW5mb3JtIGxwIHRoYXQgeW91IHdhbnQgL2Rldi9scDAgdG8gYmUKK3RoZSBmaXJzdCBwYXJhbGxlbCBwb3J0LCBhbmQgL2Rldi9scDEgdG8gYmUgdGhlIF90aGlyZF8gcGFyYWxsZWwgcG9ydCwKK3dpdGggbm8gbHAgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIHBvcnQgKHBhcnBvcnQxKS4gIE5vdGUKK3RoYXQgdGhpcyBpcyBkaWZmZXJlbnQgdG8gdGhlIHdheSBvbGRlciBrZXJuZWxzIHdvcmtlZDsgdGhlcmUgdXNlZCB0bworYmUgYSBzdGF0aWMgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgSS9PIHBvcnQgYWRkcmVzcyBhbmQgdGhlIGRldmljZQorbmFtZSwgc28gL2Rldi9scDAgd2FzIGFsd2F5cyB0aGUgcG9ydCBhdCAweDNiYy4gIFRoaXMgaXMgbm8gbG9uZ2VyIHRoZQorY2FzZSAtIGlmIHlvdSBvbmx5IGhhdmUgb25lIHBvcnQsIGl0IHdpbGwgZGVmYXVsdCB0byBiZWluZyAvZGV2L2xwMCwKK3JlZ2FyZGxlc3Mgb2YgYmFzZSBhZGRyZXNzLgorCitBbHNvOgorCisgKiBJZiB5b3Ugc2VsZWN0ZWQgdGhlIElFRUUgMTI4NCBzdXBwb3J0IGF0IGNvbXBpbGUgdGltZSwgeW91IGNhbiBzYXkKKyAgIGBscD1hdXRvJyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgYW5kIGxwIHdpbGwgY3JlYXRlIGRldmljZXMKKyAgIG9ubHkgZm9yIHRob3NlIHBvcnRzIHRoYXQgc2VlbSB0byBoYXZlIHByaW50ZXJzIGF0dGFjaGVkLgorCisgKiBJZiB5b3UgZ2l2ZSBQTElQIHRoZSBgdGltaWQnIHBhcmFtZXRlciwgZWl0aGVyIHdpdGggYHBsaXA9dGltaWQnIG9uCisgICB0aGUgY29tbWFuZCBsaW5lLCBvciB3aXRoIGBpbnNtb2QgcGxpcCB0aW1pZD0xJyB3aGVuIHVzaW5nIG1vZHVsZXMsCisgICBpdCB3aWxsIGF2b2lkIGFueSBwb3J0cyB0aGF0IHNlZW0gdG8gYmUgaW4gdXNlIGJ5IG90aGVyIGRldmljZXMuCisKKyAqIElSUSBhdXRvcHJvYmluZyB3b3JrcyBvbmx5IGZvciBhIGZldyBwb3J0IHR5cGVzIGF0IHRoZSBtb21lbnQuCisKK1JlcG9ydGluZyBwcmludGVyIHByb2JsZW1zIHdpdGggcGFycG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIHByaW50aW5nLCBwbGVhc2UgZ28gdGhyb3VnaCB0aGVzZSBzdGVwcyB0bwordHJ5IHRvIG5hcnJvdyBkb3duIHdoZXJlIHRoZSBwcm9ibGVtIGFyZWEgaXMuCisKK1doZW4gcmVwb3J0aW5nIHByb2JsZW1zIHdpdGggcGFycG9ydCwgcmVhbGx5IHlvdSBuZWVkIHRvIGdpdmUgYWxsIG9mCit0aGUgbWVzc2FnZXMgdGhhdCBwYXJwb3J0X3BjIHNwaXRzIG91dCB3aGVuIGl0IGluaXRpYWxpc2VzLiAgVGhlcmUgYXJlCitzZXZlcmFsIGNvZGUgcGF0aHM6CisKK28gcG9sbGluZworbyBpbnRlcnJ1cHQtZHJpdmVuLCBwcm90b2NvbCBpbiBzb2Z0d2FyZQorbyBpbnRlcnJ1cHQtZHJpdmVuLCBwcm90b2NvbCBpbiBoYXJkd2FyZSB1c2luZyBQSU8KK28gaW50ZXJydXB0LWRyaXZlbiwgcHJvdG9jb2wgaW4gaGFyZHdhcmUgdXNpbmcgRE1BCisKK1RoZSBrZXJuZWwgbWVzc2FnZXMgdGhhdCBwYXJwb3J0X3BjIGxvZ3MgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoCitjb2RlIHBhdGggaXMgYmVpbmcgdXNlZC4gKFRoZXkgY291bGQgYmUgYSBsb3QgYmV0dGVyIGFjdHVhbGx5Li4pCisKK0ZvciBub3JtYWwgcHJpbnRlciBwcm90b2NvbCwgaGF2aW5nIElFRUUgMTI4NCBtb2RlcyBlbmFibGVkIG9yIG5vdAorc2hvdWxkIG5vdCBtYWtlIGEgZGlmZmVyZW5jZS4KKworVG8gdHVybiBvZmYgdGhlICdwcm90b2NvbCBpbiBoYXJkd2FyZScgY29kZSBwYXRocywgZGlzYWJsZQorQ09ORklHX1BBUlBPUlRfUENfRklGTy4gIE5vdGUgdGhhdCB3aGVuIHRoZXkgYXJlIGVuYWJsZWQgdGhleSBhcmUgbm90CituZWNlc3NhcmlseSBfdXNlZF87IGl0IGRlcGVuZHMgb24gd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYXZhaWxhYmxlLAorZW5hYmxlZCBieSB0aGUgQklPUywgYW5kIGRldGVjdGVkIGJ5IHRoZSBkcml2ZXIuCisKK1NvLCB0byBzdGFydCB3aXRoLCBkaXNhYmxlIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8sIGFuZCBsb2FkIHBhcnBvcnRfcGMKK3dpdGggJ2lycT1ub25lJy4gU2VlIGlmIHByaW50aW5nIHdvcmtzIHRoZW4uICBJdCByZWFsbHkgc2hvdWxkLAorYmVjYXVzZSB0aGlzIGlzIHRoZSBzaW1wbGVzdCBjb2RlIHBhdGguCisKK0lmIHRoYXQgd29ya3MgZmluZSwgdHJ5IHdpdGggJ2lvPTB4Mzc4IGlycT03JyAoYWRqdXN0IGZvciB5b3VyCitoYXJkd2FyZSksIHRvIG1ha2UgaXQgdXNlIGludGVycnVwdC1kcml2ZW4gaW4tc29mdHdhcmUgcHJvdG9jb2wuCisKK0lmIF90aGF0XyB3b3JrcyBmaW5lLCB0aGVuIG9uZSBvZiB0aGUgaGFyZHdhcmUgbW9kZXMgaXNuJ3Qgd29ya2luZworcmlnaHQuICBFbmFibGUgQ09ORklHX1BBUlBPUlRfUENfRklGTyAobm8sIGl0IGlzbid0IGEgbW9kdWxlIG9wdGlvbiwKK2FuZCB5ZXMsIGl0IHNob3VsZCBiZSksIHNldCB0aGUgcG9ydCB0byBFQ1AgbW9kZSBpbiB0aGUgQklPUyBhbmQgbm90ZQordGhlIERNQSBjaGFubmVsLCBhbmQgdHJ5IHdpdGg6CisKKyAgICBpbz0weDM3OCBpcnE9NyBkbWE9bm9uZSAoZm9yIFBJTykKKyAgICBpbz0weDM3OCBpcnE9NyBkbWE9MyAoZm9yIERNQSkKKy0tCitwaGlsYkBnbnUub3JnCit0aW1AY3liZXJlbGsubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1MTRiZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGNpLnR4dApAQCAtMCwwICsxLDI4NCBAQAorCQkJIEhvdyBUbyBXcml0ZSBMaW51eCBQQ0kgRHJpdmVycworCisJCSAgIGJ5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PiBvbiAwNy1GZWItMjAwMAorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIHdvcmxkIG9mIFBDSSBpcyB2YXN0IGFuZCBpdCdzIGZ1bGwgb2YgKG1vc3RseSB1bnBsZWFzYW50KSBzdXJwcmlzZXMuCitEaWZmZXJlbnQgUENJIGRldmljZXMgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIGFuZCBkaWZmZXJlbnQgYnVncyAtLQorYmVjYXVzZSBvZiB0aGlzLCB0aGUgUENJIHN1cHBvcnQgbGF5ZXIgaW4gTGludXgga2VybmVsIGlzIG5vdCBhcyB0cml2aWFsCithcyBvbmUgd291bGQgd2lzaC4gVGhpcyBzaG9ydCBwYW1waGxldCB0cmllcyB0byBoZWxwIGFsbCBwb3RlbnRpYWwgZHJpdmVyCithdXRob3JzIGZpbmQgdGhlaXIgd2F5IHRocm91Z2ggdGhlIGRlZXAgZm9yZXN0cyBvZiBQQ0kgaGFuZGxpbmcuCisKKworMC4gU3RydWN0dXJlIG9mIFBDSSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZXJlIGV4aXN0IHR3byBraW5kcyBvZiBQQ0kgZHJpdmVyczogbmV3LXN0eWxlIG9uZXMgKHdoaWNoIGxlYXZlIG1vc3Qgb2YKK3Byb2JpbmcgZm9yIGRldmljZXMgdG8gdGhlIFBDSSBsYXllciBhbmQgc3VwcG9ydCBvbmxpbmUgaW5zZXJ0aW9uIGFuZCByZW1vdmFsCitvZiBkZXZpY2VzIFt0aHVzIHN1cHBvcnRpbmcgUENJLCBob3QtcGx1Z2dhYmxlIFBDSSBhbmQgQ2FyZEJ1cyBpbiBhIHNpbmdsZQorZHJpdmVyXSkgYW5kIG9sZC1zdHlsZSBvbmVzIHdoaWNoIGp1c3QgZG8gYWxsIHRoZSBwcm9iaW5nIHRoZW1zZWx2ZXMuIFVubGVzcworeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uIHRvIGRvIHNvLCBwbGVhc2UgZG9uJ3QgdXNlIHRoZSBvbGQgd2F5IG9mIHByb2JpbmcKK2luIGFueSBuZXcgY29kZS4gQWZ0ZXIgdGhlIGRyaXZlciBmaW5kcyB0aGUgZGV2aWNlcyBpdCB3aXNoZXMgdG8gb3BlcmF0ZQorb24gKGVpdGhlciB0aGUgb2xkIG9yIHRoZSBuZXcgd2F5KSwgaXQgbmVlZHMgdG8gcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisJRW5hYmxlIHRoZSBkZXZpY2UKKwlBY2Nlc3MgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UKKwlEaXNjb3ZlciByZXNvdXJjZXMgKGFkZHJlc3NlcyBhbmQgSVJRIG51bWJlcnMpIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UKKwlBbGxvY2F0ZSB0aGVzZSByZXNvdXJjZXMKKwlDb21tdW5pY2F0ZSB3aXRoIHRoZSBkZXZpY2UKKwlEaXNhYmxlIHRoZSBkZXZpY2UKKworTW9zdCBvZiB0aGVzZSB0b3BpY3MgYXJlIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgZm9yIHRoZSByZXN0Citsb29rIGF0IDxsaW51eC9wY2kuaD4sIGl0J3MgaG9wZWZ1bGx5IHdlbGwgY29tbWVudGVkLgorCitJZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBub3QgY29uZmlndXJlZCAoQ09ORklHX1BDSSBpcyBub3Qgc2V0KSwgbW9zdCBvZgordGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cgYXJlIGRlZmluZWQgYXMgaW5saW5lIGZ1bmN0aW9ucyBlaXRoZXIgY29tcGxldGVseQorZW1wdHkgb3IganVzdCByZXR1cm5pbmcgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMgdG8gYXZvaWQgbG90cyBvZiBpZmRlZnMKK2luIHRoZSBkcml2ZXJzLgorCisKKzEuIE5ldy1zdHlsZSBkcml2ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIG5ldy1zdHlsZSBkcml2ZXJzIGp1c3QgY2FsbCBwY2lfcmVnaXN0ZXJfZHJpdmVyIGR1cmluZyB0aGVpciBpbml0aWFsaXphdGlvbgord2l0aCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgZHJpdmVyIChzdHJ1Y3QgcGNpX2RyaXZlcikgd2hpY2gKK2NvbnRhaW5zOgorCisJbmFtZQkJTmFtZSBvZiB0aGUgZHJpdmVyCisJaWRfdGFibGUJUG9pbnRlciB0byB0YWJsZSBvZiBkZXZpY2UgSUQncyB0aGUgZHJpdmVyIGlzCisJCQlpbnRlcmVzdGVkIGluLiAgTW9zdCBkcml2ZXJzIHNob3VsZCBleHBvcnQgdGhpcworCQkJdGFibGUgdXNpbmcgTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksLi4uKS4KKwlwcm9iZQkJUG9pbnRlciB0byBhIHByb2JpbmcgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgKGR1cmluZworCQkJZXhlY3V0aW9uIG9mIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZm9yIGFscmVhZHkgZXhpc3RpbmcKKwkJCWRldmljZXMgb3IgbGF0ZXIgaWYgYSBuZXcgZGV2aWNlIGdldHMgaW5zZXJ0ZWQpIGZvciBhbGwKKwkJCVBDSSBkZXZpY2VzIHdoaWNoIG1hdGNoIHRoZSBJRCB0YWJsZSBhbmQgYXJlIG5vdCBoYW5kbGVkCisJCQlieSB0aGUgb3RoZXIgZHJpdmVycyB5ZXQuIFRoaXMgZnVuY3Rpb24gZ2V0cyBwYXNzZWQgYQorCQkJcG9pbnRlciB0byB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBkZXZpY2UKKwkJCWFuZCBhbHNvIHdoaWNoIGVudHJ5IGluIHRoZSBJRCB0YWJsZSBkaWQgdGhlIGRldmljZQorCQkJbWF0Y2guIEl0IHJldHVybnMgemVybyB3aGVuIHRoZSBkcml2ZXIgaGFzIGFjY2VwdGVkIHRoZQorCQkJZGV2aWNlIG9yIGFuIGVycm9yIGNvZGUgKG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLgorCQkJVGhpcyBmdW5jdGlvbiBhbHdheXMgZ2V0cyBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQsCisJCQlzbyBpdCBjYW4gc2xlZXAuCisJcmVtb3ZlCQlQb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYQorCQkJZGV2aWNlIGJlaW5nIGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIgaXMgcmVtb3ZlZCAoZWl0aGVyCisJCQlkdXJpbmcgZGVyZWdpc3RyYXRpb24gb2YgdGhlIGRyaXZlciBvciB3aGVuIGl0J3MKKwkJCW1hbnVhbGx5IHB1bGxlZCBvdXQgb2YgYSBob3QtcGx1Z2dhYmxlIHNsb3QpLiBUaGlzCisJCQlmdW5jdGlvbiBhbHdheXMgZ2V0cyBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQsIHNvIGl0CisJCQljYW4gc2xlZXAuCisJc2F2ZV9zdGF0ZQlTYXZlIGEgZGV2aWNlJ3Mgc3RhdGUgYmVmb3JlIGl0J3Mgc3VzcGVuZC4KKwlzdXNwZW5kCQlQdXQgZGV2aWNlIGludG8gbG93IHBvd2VyIHN0YXRlLgorCXJlc3VtZQkJV2FrZSBkZXZpY2UgZnJvbSBsb3cgcG93ZXIgc3RhdGUuCisJZW5hYmxlX3dha2UJRW5hYmxlIGRldmljZSB0byBnZW5lcmF0ZSB3YWtlIGV2ZW50cyBmcm9tIGEgbG93IHBvd2VyCisJCQlzdGF0ZS4KKworCQkJKFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0IGZvciBkZXNjcmlwdGlvbnMKKwkJCW9mIFBDSSBQb3dlciBNYW5hZ2VtZW50IGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMpCisKK1RoZSBJRCB0YWJsZSBpcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlbmRpbmcgd2l0aCBhIGFsbC16ZXJvIGVudHJ5LgorRWFjaCBlbnRyeSBjb25zaXN0cyBvZjoKKworCXZlbmRvciwgZGV2aWNlCVZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCXN1YnZlbmRvciwJU3Vic3lzdGVtIHZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCXN1YmRldmljZQorCWNsYXNzLAkJRGV2aWNlIGNsYXNzIHRvIG1hdGNoLiBUaGUgY2xhc3NfbWFzayB0ZWxscyB3aGljaCBiaXRzCisJY2xhc3NfbWFzawlvZiB0aGUgY2xhc3MgYXJlIGhvbm9yZWQgZHVyaW5nIHRoZSBjb21wYXJpc29uLgorCWRyaXZlcl9kYXRhCURhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyLgorCitNb3N0IGRyaXZlcnMgZG9uJ3QgbmVlZCB0byB1c2UgdGhlIGRyaXZlcl9kYXRhIGZpZWxkLiAgQmVzdCBwcmFjdGljZQorZm9yIHVzZSBvZiBkcml2ZXJfZGF0YSBpcyB0byB1c2UgaXQgYXMgYW4gaW5kZXggaW50byBhIHN0YXRpYyBsaXN0IG9mCitlcXVpdmFsYW50IGRldmljZSB0eXBlcywgbm90IHRvIHVzZSBpdCBhcyBhIHBvaW50ZXIuCisKK0hhdmUgYSB0YWJsZSBlbnRyeSB7UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0KK3RvIGhhdmUgcHJvYmUoKSBjYWxsZWQgZm9yIGV2ZXJ5IFBDSSBkZXZpY2Uga25vd24gdG8gdGhlIHN5c3RlbS4KKworTmV3IFBDSSBJRHMgbWF5IGJlIGFkZGVkIHRvIGEgZGV2aWNlIGRyaXZlciBhdCBydW50aW1lIGJ5IHdyaXRpbmcKK3RvIHRoZSBmaWxlIC9zeXMvYnVzL3BjaS9kcml2ZXJzL3tkcml2ZXJ9L25ld19pZC4gIFdoZW4gYWRkZWQsIHRoZQorZHJpdmVyIHdpbGwgcHJvYmUgZm9yIGFsbCBkZXZpY2VzIGl0IGNhbiBzdXBwb3J0LgorCitlY2hvICJ2ZW5kb3IgZGV2aWNlIHN1YnZlbmRvciBzdWJkZXZpY2UgY2xhc3MgY2xhc3NfbWFzayBkcml2ZXJfZGF0YSIgPiBcCisgL3N5cy9idXMvcGNpL2RyaXZlcnMve2RyaXZlcn0vbmV3X2lkCit3aGVyZSBhbGwgZmllbGRzIGFyZSBwYXNzZWQgaW4gYXMgaGV4YWRlY2ltYWwgdmFsdWVzIChubyBsZWFkaW5nIDB4KS4KK1VzZXJzIG5lZWQgcGFzcyBvbmx5IGFzIG1hbnkgZmllbGRzIGFzIG5lY2Vzc2FyeTsgdmVuZG9yLCBkZXZpY2UsCitzdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgZmllbGRzIGRlZmF1bHQgdG8gUENJX0FOWV9JRCAoRkZGRkZGRkYpLAorY2xhc3MgYW5kIGNsYXNzbWFzayBmaWVsZHMgZGVmYXVsdCB0byAwLCBhbmQgZHJpdmVyX2RhdGEgZGVmYXVsdHMgdG8KKzBVTC4gIERldmljZSBkcml2ZXJzIG11c3QgaW5pdGlhbGl6ZSB1c2VfZHJpdmVyX2RhdGEgaW4gdGhlIGR5bmlkcyBzdHJ1Y3QKK2luIHRoZWlyIHBjaV9kcml2ZXIgc3RydWN0IHByaW9yIHRvIGNhbGxpbmcgcGNpX3JlZ2lzdGVyX2RyaXZlciBpbiBvcmRlcgorZm9yIHRoZSBkcml2ZXJfZGF0YSBmaWVsZCB0byBnZXQgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIE90aGVyd2lzZSwgb25seSBhCiswIGlzIHBhc3NlZCBpbiB0aGF0IGZpZWxkLgorCitXaGVuIHRoZSBkcml2ZXIgZXhpdHMsIGl0IGp1c3QgY2FsbHMgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCkgYW5kIHRoZSBQQ0kgbGF5ZXIKK2F1dG9tYXRpY2FsbHkgY2FsbHMgdGhlIHJlbW92ZSBob29rIGZvciBhbGwgZGV2aWNlcyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIuCisKK1BsZWFzZSBtYXJrIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBmdW5jdGlvbnMgd2hlcmUgYXBwcm9wcmlhdGUKKyh0aGUgY29ycmVzcG9uZGluZyBtYWNyb3MgYXJlIGRlZmluZWQgaW4gPGxpbnV4L2luaXQuaD4pOgorCisJX19pbml0CQlJbml0aWFsaXphdGlvbiBjb2RlLiBUaHJvd24gYXdheSBhZnRlciB0aGUgZHJpdmVyCisJCQlpbml0aWFsaXplcy4KKwlfX2V4aXQJCUV4aXQgY29kZS4gSWdub3JlZCBmb3Igbm9uLW1vZHVsYXIgZHJpdmVycy4KKwlfX2RldmluaXQJRGV2aWNlIGluaXRpYWxpemF0aW9uIGNvZGUuIElkZW50aWNhbCB0byBfX2luaXQgaWYKKwkJCXRoZSBrZXJuZWwgaXMgbm90IGNvbXBpbGVkIHdpdGggQ09ORklHX0hPVFBMVUcsIG5vcm1hbAorCQkJZnVuY3Rpb24gb3RoZXJ3aXNlLgorCV9fZGV2ZXhpdAlUaGUgc2FtZSBmb3IgX19leGl0LgorCitUaXBzOgorCVRoZSBtb2R1bGVfaW5pdCgpL21vZHVsZV9leGl0KCkgZnVuY3Rpb25zIChhbmQgYWxsIGluaXRpYWxpemF0aW9uCisgICAgICAgIGZ1bmN0aW9ucyBjYWxsZWQgb25seSBmcm9tIHRoZXNlKSBzaG91bGQgYmUgbWFya2VkIF9faW5pdC9leGl0LgorCVRoZSBzdHJ1Y3QgcGNpX2RyaXZlciBzaG91bGRuJ3QgYmUgbWFya2VkIHdpdGggYW55IG9mIHRoZXNlIHRhZ3MuCisJVGhlIElEIHRhYmxlIGFycmF5IHNob3VsZCBiZSBtYXJrZWQgX19kZXZpbml0ZGF0YS4KKwlUaGUgcHJvYmUoKSBhbmQgcmVtb3ZlKCkgZnVuY3Rpb25zIChhbmQgYWxsIGluaXRpYWxpemF0aW9uCisJZnVuY3Rpb25zIGNhbGxlZCBvbmx5IGZyb20gdGhlc2UpIHNob3VsZCBiZSBtYXJrZWQgX19kZXZpbml0L2V4aXQuCisJSWYgeW91IGFyZSBzdXJlIHRoZSBkcml2ZXIgaXMgbm90IGEgaG90cGx1ZyBkcml2ZXIgdGhlbiB1c2Ugb25seSAKKwlfX2luaXQvZXhpdCBfX2luaXRkYXRhL2V4aXRkYXRhLgorCisgICAgICAgIFBvaW50ZXJzIHRvIGZ1bmN0aW9ucyBtYXJrZWQgYXMgX19kZXZleGl0IG11c3QgYmUgY3JlYXRlZCB1c2luZworICAgICAgICBfX2RldmV4aXRfcChmdW5jdGlvbl9uYW1lKS4gIFRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgbmFtZSBvciBOVUxMIGlmIHRoZSBfX2RldmV4aXQgZnVuY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuCisKKworMi4gSG93IHRvIGZpbmQgUENJIGRldmljZXMgbWFudWFsbHkgKHRoZSBvbGQgc3R5bGUpCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1BDSSBkcml2ZXJzIG5vdCB1c2luZyB0aGUgcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGludGVyZmFjZSBzZWFyY2gKK2ZvciBQQ0kgZGV2aWNlcyBtYW51YWxseSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdHM6CisKK1NlYXJjaGluZyBieSB2ZW5kb3IgYW5kIGRldmljZSBJRDoKKworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXdoaWxlIChkZXYgPSBwY2lfZ2V0X2RldmljZShWRU5ET1JfSUQsIERFVklDRV9JRCwgZGV2KSkKKwkJY29uZmlndXJlX2RldmljZShkZXYpOworCitTZWFyY2hpbmcgYnkgY2xhc3MgSUQgKGl0ZXJhdGUgaW4gYSBzaW1pbGFyIHdheSk6CisKKwlwY2lfZ2V0X2NsYXNzKENMQVNTX0lELCBkZXYpCisKK1NlYXJjaGluZyBieSBib3RoIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEOgorCisJcGNpX2dldF9zdWJzeXMoVkVORE9SX0lELCBERVZJQ0VfSUQsIFNVQlNZU19WRU5ET1JfSUQsIFNVQlNZU19ERVZJQ0VfSUQsIGRldikuCisKKyAgIFlvdSBjYW4gdXNlIHRoZSBjb25zdGFudCBQQ0lfQU5ZX0lEIGFzIGEgd2lsZGNhcmQgcmVwbGFjZW1lbnQgZm9yCitWRU5ET1JfSUQgb3IgREVWSUNFX0lELiAgVGhpcyBhbGxvd3Mgc2VhcmNoaW5nIGZvciBhbnkgZGV2aWNlIGZyb20gYQorc3BlY2lmaWMgdmVuZG9yLCBmb3IgZXhhbXBsZS4KKworICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBob3RwbHVnLXNhZmUuIFRoZXkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24KK3RoZSBwY2lfZGV2IHRoYXQgdGhleSByZXR1cm4uIFlvdSBtdXN0IGV2ZW50dWFsbHkgKHBvc3NpYmx5IGF0IG1vZHVsZSB1bmxvYWQpCitkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGVzZSBkZXZpY2VzIGJ5IGNhbGxpbmcgcGNpX2Rldl9wdXQoKS4KKworCiszLiBFbmFibGluZyBhbmQgZGlzYWJsaW5nIGRldmljZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICAgQmVmb3JlIHlvdSBkbyBhbnl0aGluZyB3aXRoIHRoZSBkZXZpY2UgeW91J3ZlIGZvdW5kLCB5b3UgbmVlZCB0byBlbmFibGUKK2l0IGJ5IGNhbGxpbmcgcGNpX2VuYWJsZV9kZXZpY2UoKSB3aGljaCBlbmFibGVzIEkvTyBhbmQgbWVtb3J5IHJlZ2lvbnMgb2YKK3RoZSBkZXZpY2UsIGFsbG9jYXRlcyBhbiBJUlEgaWYgbmVjZXNzYXJ5LCBhc3NpZ25zIG1pc3NpbmcgcmVzb3VyY2VzIGlmCituZWVkZWQgYW5kIHdha2VzIHVwIHRoZSBkZXZpY2UgaWYgaXQgd2FzIGluIHN1c3BlbmRlZCBzdGF0ZS4gUGxlYXNlIG5vdGUKK3RoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZmFpbC4KKworICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2UgaW4gYnVzIG1hc3RlcmluZyBtb2RlLCBjYWxsIHBjaV9zZXRfbWFzdGVyKCkKK3doaWNoIGVuYWJsZXMgdGhlIGJ1cyBtYXN0ZXIgYml0IGluIFBDSV9DT01NQU5EIHJlZ2lzdGVyIGFuZCBhbHNvIGZpeGVzCit0aGUgbGF0ZW5jeSB0aW1lciB2YWx1ZSBpZiBpdCdzIHNldCB0byBzb21ldGhpbmcgYm9ndXMgYnkgdGhlIEJJT1MuCisKKyAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgUENJIE1lbW9yeS1Xcml0ZS1JbnZhbGlkYXRlIHRyYW5zYWN0aW9uLAorY2FsbCBwY2lfc2V0X213aSgpLiAgVGhpcyBlbmFibGVzIHRoZSBQQ0lfQ09NTUFORCBiaXQgZm9yIE1lbS1Xci1JbnZhbAorYW5kIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgc2V0IGNvcnJlY3RseS4KK01ha2Ugc3VyZSB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHBjaV9zZXRfbXdpKCksIG5vdCBhbGwgYXJjaGl0ZWN0dXJlcworbWF5IHN1cHBvcnQgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUuCisKKyAgIElmIHlvdXIgZHJpdmVyIGRlY2lkZXMgdG8gc3RvcCB1c2luZyB0aGUgZGV2aWNlIChlLmcuLCB0aGVyZSB3YXMgYW4KK2Vycm9yIHdoaWxlIHNldHRpbmcgaXQgdXAgb3IgdGhlIGRyaXZlciBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQpLCBpdAorc2hvdWxkIGNhbGwgcGNpX2Rpc2FibGVfZGV2aWNlKCkgdG8gZGVhbGxvY2F0ZSBhbnkgSVJRIHJlc291cmNlcywgZGlzYWJsZQorUENJIGJ1cy1tYXN0ZXJpbmcsIGV0Yy4gIFlvdSBzaG91bGQgbm90IGRvIGFueXRoaW5nIHdpdGggdGhlIGRldmljZSBhZnRlcgorY2FsbGluZyBwY2lfZGlzYWJsZV9kZXZpY2UoKS4KKworNC4gSG93IHRvIGFjY2VzcyBQQ0kgY29uZmlnIHNwYWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIFlvdSBjYW4gdXNlIHBjaV8ocmVhZHx3cml0ZSlfY29uZmlnXyhieXRlfHdvcmR8ZHdvcmQpIHRvIGFjY2VzcyB0aGUgY29uZmlnCitzcGFjZSBvZiBhIGRldmljZSByZXByZXNlbnRlZCBieSBzdHJ1Y3QgcGNpX2RldiAqLiBBbGwgdGhlc2UgZnVuY3Rpb25zIHJldHVybiAwCit3aGVuIHN1Y2Nlc3NmdWwgb3IgYW4gZXJyb3IgY29kZSAoUENJQklPU18uLi4pIHdoaWNoIGNhbiBiZSB0cmFuc2xhdGVkIHRvIGEgdGV4dAorc3RyaW5nIGJ5IHBjaWJpb3Nfc3RyZXJyb3IuIE1vc3QgZHJpdmVycyBleHBlY3QgdGhhdCBhY2Nlc3NlcyB0byB2YWxpZCBQQ0kKK2RldmljZXMgZG9uJ3QgZmFpbC4KKworICAgSWYgeW91IGRvbid0IGhhdmUgYSBzdHJ1Y3QgcGNpX2RldiBhdmFpbGFibGUsIHlvdSBjYW4gY2FsbAorcGNpX2J1c18ocmVhZHx3cml0ZSlfY29uZmlnXyhieXRlfHdvcmR8ZHdvcmQpIHRvIGFjY2VzcyBhIGdpdmVuIGRldmljZQorYW5kIGZ1bmN0aW9uIG9uIHRoYXQgYnVzLgorCisgICBJZiB5b3UgYWNjZXNzIGZpZWxkcyBpbiB0aGUgc3RhbmRhcmQgcG9ydGlvbiBvZiB0aGUgY29uZmlnIGhlYWRlciwgcGxlYXNlCit1c2Ugc3ltYm9saWMgbmFtZXMgb2YgbG9jYXRpb25zIGFuZCBiaXRzIGRlY2xhcmVkIGluIDxsaW51eC9wY2kuaD4uCisKKyAgIElmIHlvdSBuZWVkIHRvIGFjY2VzcyBFeHRlbmRlZCBQQ0kgQ2FwYWJpbGl0eSByZWdpc3RlcnMsIGp1c3QgY2FsbAorcGNpX2ZpbmRfY2FwYWJpbGl0eSgpIGZvciB0aGUgcGFydGljdWxhciBjYXBhYmlsaXR5IGFuZCBpdCB3aWxsIGZpbmQgdGhlCitjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJsb2NrIGZvciB5b3UuCisKKworNS4gQWRkcmVzc2VzIGFuZCBpbnRlcnJ1cHRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIE1lbW9yeSBhbmQgcG9ydCBhZGRyZXNzZXMgYW5kIGludGVycnVwdCBudW1iZXJzIHNob3VsZCBOT1QgYmUgcmVhZCBmcm9tIHRoZQorY29uZmlnIHNwYWNlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdmFsdWVzIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZSBhcyB0aGV5IG1pZ2h0CitoYXZlIGJlZW4gcmVtYXBwZWQgYnkgdGhlIGtlcm5lbC4KKworICAgU2VlIERvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQgZm9yIGhvdyB0byBhY2Nlc3MgZGV2aWNlIG1lbW9yeS4KKworICAgWW91IHN0aWxsIG5lZWQgdG8gY2FsbCByZXF1ZXN0X3JlZ2lvbigpIGZvciBJL08gcmVnaW9ucyBhbmQKK3JlcXVlc3RfbWVtX3JlZ2lvbigpIGZvciBtZW1vcnkgcmVnaW9ucyB0byBtYWtlIHN1cmUgbm9ib2R5IGVsc2UgaXMgdXNpbmcgdGhlCitzYW1lIGRldmljZS4KKworICAgQWxsIGludGVycnVwdCBoYW5kbGVycyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIFNBX1NISVJRIGFuZCB1c2UgdGhlIGRldmlkCit0byBtYXAgSVJRcyB0byBkZXZpY2VzIChyZW1lbWJlciB0aGF0IGFsbCBQQ0kgaW50ZXJydXB0cyBhcmUgc2hhcmVkKS4KKworCis2LiBPdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorcGNpX2ZpbmRfc2xvdCgpCQkJRmluZCBwY2lfZGV2IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYnVzIGFuZAorCQkJCXNsb3QgbnVtYmVycy4KK3BjaV9zZXRfcG93ZXJfc3RhdGUoKQkJU2V0IFBDSSBQb3dlciBNYW5hZ2VtZW50IHN0YXRlICgwPUQwIC4uLiAzPUQzKQorcGNpX2ZpbmRfY2FwYWJpbGl0eSgpCQlGaW5kIHNwZWNpZmllZCBjYXBhYmlsaXR5IGluIGRldmljZSdzIGNhcGFiaWxpdHkKKwkJCQlsaXN0LgorcGNpX21vZHVsZV9pbml0KCkJCUlubGluZSBoZWxwZXIgZnVuY3Rpb24gZm9yIGVuc3VyaW5nIGNvcnJlY3QKKwkJCQlwY2lfZHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy4KK3BjaV9yZXNvdXJjZV9zdGFydCgpCQlSZXR1cm5zIGJ1cyBzdGFydCBhZGRyZXNzIGZvciBhIGdpdmVuIFBDSSByZWdpb24KK3BjaV9yZXNvdXJjZV9lbmQoKQkJUmV0dXJucyBidXMgZW5kIGFkZHJlc3MgZm9yIGEgZ2l2ZW4gUENJIHJlZ2lvbgorcGNpX3Jlc291cmNlX2xlbigpCQlSZXR1cm5zIHRoZSBieXRlIGxlbmd0aCBvZiBhIFBDSSByZWdpb24KK3BjaV9zZXRfZHJ2ZGF0YSgpCQlTZXQgcHJpdmF0ZSBkcml2ZXIgZGF0YSBwb2ludGVyIGZvciBhIHBjaV9kZXYKK3BjaV9nZXRfZHJ2ZGF0YSgpCQlSZXR1cm4gcHJpdmF0ZSBkcml2ZXIgZGF0YSBwb2ludGVyIGZvciBhIHBjaV9kZXYKK3BjaV9zZXRfbXdpKCkJCQlFbmFibGUgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUgdHJhbnNhY3Rpb25zLgorcGNpX2NsZWFyX213aSgpCQkJRGlzYWJsZSBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMuCisKKworNy4gTWlzY2VsbGFuZW91cyBoaW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorV2hlbiBkaXNwbGF5aW5nIFBDSSBzbG90IG5hbWVzIHRvIHRoZSB1c2VyIChmb3IgZXhhbXBsZSB3aGVuIGEgZHJpdmVyIHdhbnRzCit0byB0ZWxsIHRoZSB1c2VyIHdoYXQgY2FyZCBoYXMgaXQgZm91bmQpLCBwbGVhc2UgdXNlIHBjaV9uYW1lKHBjaV9kZXYpCitmb3IgdGhpcyBwdXJwb3NlLgorCitBbHdheXMgcmVmZXIgdG8gdGhlIFBDSSBkZXZpY2VzIGJ5IGEgcG9pbnRlciB0byB0aGUgcGNpX2RldiBzdHJ1Y3R1cmUuCitBbGwgUENJIGxheWVyIGZ1bmN0aW9ucyB1c2UgdGhpcyBpZGVudGlmaWNhdGlvbiBhbmQgaXQncyB0aGUgb25seQorcmVhc29uYWJsZSBvbmUuIERvbid0IHVzZSBidXMvc2xvdC9mdW5jdGlvbiBudW1iZXJzIGV4Y2VwdCBmb3IgdmVyeQorc3BlY2lhbCBwdXJwb3NlcyAtLSBvbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgcHJpbWFyeSBidXNlcyB0aGVpciBzZW1hbnRpY3MKK2NhbiBiZSBwcmV0dHkgY29tcGxleC4KKworSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBQQ0kgYnVzIG1hc3RlcmluZyBETUEsIHRha2UgYSBsb29rIGF0CitEb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dC4KKworRG9uJ3QgdHJ5IHRvIHR1cm4gb24gRmFzdCBCYWNrIHRvIEJhY2sgd3JpdGVzIGluIHlvdXIgZHJpdmVyLiAgQWxsIGRldmljZXMKK29uIHRoZSBidXMgbmVlZCB0byBiZSBjYXBhYmxlIG9mIGRvaW5nIGl0LCBzbyB0aGlzIGlzIHNvbWV0aGluZyB3aGljaCBuZWVkcwordG8gYmUgaGFuZGxlZCBieSBwbGF0Zm9ybSBhbmQgZ2VuZXJpYyBjb2RlLCBub3QgaW5kaXZpZHVhbCBkcml2ZXJzLgorCisKKzguIE9ic29sZXRlIGZ1bmN0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGVyZSBhcmUgc2V2ZXJhbCBmdW5jdGlvbnMgd2hpY2ggeW91IG1pZ2h0IGNvbWUgYWNyb3NzIHdoZW4gdHJ5aW5nIHRvCitwb3J0IGFuIG9sZCBkcml2ZXIgdG8gdGhlIG5ldyBQQ0kgaW50ZXJmYWNlLiAgVGhleSBhcmUgbm8gbG9uZ2VyIHByZXNlbnQKK2luIHRoZSBrZXJuZWwgYXMgdGhleSBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIGhvdHBsdWcgb3IgUENJIGRvbWFpbnMgb3IKK2hhdmluZyBzYW5lIGxvY2tpbmcuCisKK3BjaWJpb3NfcHJlc2VudCgpIGFuZAkJU2luY2UgYWdlcywgeW91IGRvbid0IG5lZWQgdG8gdGVzdCBwcmVzZW5jZQorcGNpX3ByZXNlbnQoKQkJCW9mIFBDSSBzdWJzeXN0ZW0gd2hlbiB0cnlpbmcgdG8gdGFsayB0byBpdC4KKwkJCQlJZiBpdCdzIG5vdCB0aGVyZSwgdGhlIGxpc3Qgb2YgUENJIGRldmljZXMKKwkJCQlpcyBlbXB0eSBhbmQgYWxsIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGZvcgorCQkJCWRldmljZXMganVzdCByZXR1cm4gTlVMTC4KK3BjaWJpb3NfKHJlYWR8d3JpdGUpXyoJCVN1cGVyc2VkZWQgYnkgdGhlaXIgcGNpXyhyZWFkfHdyaXRlKV8qCisJCQkJY291bnRlcnBhcnRzLgorcGNpYmlvc19maW5kXyoJCQlTdXBlcnNlZGVkIGJ5IHRoZWlyIHBjaV9nZXRfKiBjb3VudGVycGFydHMuCitwY2lfZm9yX2VhY2hfZGV2KCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9kZXZpY2UoKQorcGNpX2Zvcl9lYWNoX2Rldl9yZXZlcnNlKCkJU3VwZXJzZWRlZCBieSBwY2lfZmluZF9kZXZpY2VfcmV2ZXJzZSgpCitwY2lfZm9yX2VhY2hfYnVzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2ZpbmRfbmV4dF9idXMoKQorcGNpX2ZpbmRfZGV2aWNlKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9kZXZpY2UoKQorcGNpX2ZpbmRfc3Vic3lzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9zdWJzeXMoKQorcGNpYmlvc19maW5kX2NsYXNzKCkJCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9jbGFzcygpCitwY2lfZmluZF9jbGFzcygpCQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfY2xhc3MoKQorcGNpXyhyZWFkfHdyaXRlKV8qX25vZGV2KCkJU3VwZXJzZWRlZCBieSBwY2lfYnVzXyhyZWFkfHdyaXRlKV8qKCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2M2FlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG0udHh0CkBAIC0wLDAgKzEsMjUxIEBACisgICAgICAgICAgICAgICBMaW51eCBQb3dlciBNYW5hZ2VtZW50IFN1cHBvcnQKKworVGhpcyBkb2N1bWVudCBicmllZmx5IGRlc2NyaWJlcyBob3cgdG8gdXNlIHBvd2VyIG1hbmFnZW1lbnQgd2l0aCB5b3VyCitMaW51eCBzeXN0ZW0gYW5kIGhvdyB0byBhZGQgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0IHRvIExpbnV4IGRyaXZlcnMuCisKK0FQTSBvciBBQ1BJPworLS0tLS0tLS0tLS0tCitJZiB5b3UgaGF2ZSBhIHJlbGF0aXZlbHkgcmVjZW50IHg4NiBtb2JpbGUsIGRlc2t0b3AsIG9yIHNlcnZlciBzeXN0ZW0sCitvZGRzIGFyZSBpdCBzdXBwb3J0cyBlaXRoZXIgQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCAoQVBNKSBvcgorQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIChBQ1BJKS4gIEFDUEkgaXMgdGhlIG5ld2VyCitvZiB0aGUgdHdvIHRlY2hub2xvZ2llcyBhbmQgcHV0cyBwb3dlciBtYW5hZ2VtZW50IGluIHRoZSBoYW5kcyBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0sIGFsbG93aW5nIGZvciBtb3JlIGludGVsbGlnZW50IHBvd2VyIG1hbmFnZW1lbnQgdGhhbgoraXMgcG9zc2libGUgd2l0aCBCSU9TIGNvbnRyb2xsZWQgQVBNLgorCitUaGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoLCBpZiBlaXRoZXIsIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGlzIHRvCitidWlsZCBhIGtlcm5lbCB3aXRoIGJvdGggQUNQSSBhbmQgQVBNIGVuYWJsZWQgKGFzIG9mIDIuMy54IEFDUEkgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCkuICBJZiBhIHdvcmtpbmcgQUNQSSBpbXBsZW1lbnRhdGlvbiBpcyBmb3VuZCwgdGhlCitBQ1BJIGRyaXZlciB3aWxsIG92ZXJyaWRlIGFuZCBkaXNhYmxlIEFQTSwgb3RoZXJ3aXNlIHRoZSBBUE0gZHJpdmVyCit3aWxsIGJlIHVzZWQuCisKK05vIHNvcnJ5LCB5b3UgY2FuIG5vdCBoYXZlIGJvdGggQUNQSSBhbmQgQVBNIGVuYWJsZWQgYW5kIHJ1bm5pbmcgYXQKK29uY2UuICBTb21lIHBlb3BsZSB3aXRoIGJyb2tlbiBBQ1BJIG9yIGJyb2tlbiBBUE0gaW1wbGVtZW50YXRpb25zCit3b3VsZCBsaWtlIHRvIHVzZSBib3RoIHRvIGdldCBhIGZ1bGwgc2V0IG9mIHdvcmtpbmcgZmVhdHVyZXMsIGJ1dCB5b3UKK3NpbXBseSBjYW4gbm90IG1peCBhbmQgbWF0Y2ggdGhlIHR3by4gIE9ubHkgb25lIHBvd2VyIG1hbmFnZW1lbnQKK2ludGVyZmFjZSBjYW4gYmUgaW4gY29udHJvbCBvZiB0aGUgbWFjaGluZSBhdCBvbmNlLiAgVGhpbmsgYWJvdXQgaXQuLgorCitVc2VyLXNwYWNlIERhZW1vbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorQm90aCBBUE0gYW5kIEFDUEkgcmVseSBvbiB1c2VyLXNwYWNlIGRhZW1vbnMsIGFwbWQgYW5kIGFjcGlkCityZXNwZWN0aXZlbHksIHRvIGJlIGNvbXBsZXRlbHkgZnVuY3Rpb25hbC4gIE9idGFpbiBib3RoIG9mIHRoZXNlCitkYWVtb25zIGZyb20geW91ciBMaW51eCBkaXN0cmlidXRpb24gb3IgZnJvbSB0aGUgSW50ZXJuZXQgKHNlZSBiZWxvdykKK2FuZCBiZSBzdXJlIHRoYXQgdGhleSBhcmUgc3RhcnRlZCBzb21ldGltZSBpbiB0aGUgc3lzdGVtIGJvb3QgcHJvY2Vzcy4KK0dvIGFoZWFkIGFuZCBzdGFydCBib3RoLiAgSWYgQUNQSSBvciBBUE0gaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyCitzeXN0ZW0gdGhlIGFzc29jaWF0ZWQgZGFlbW9uIHdpbGwgZXhpdCBncmFjZWZ1bGx5LgorCisgIGFwbWQ6ICAgaHR0cDovL3dvcmxkdmlzaW9ucy5jYS9+YXBlbndhcnIvYXBtZC8KKyAgYWNwaWQ6ICBodHRwOi8vYWNwaWQuc2YubmV0LworCitEcml2ZXIgSW50ZXJmYWNlIC0tIE9CU09MRVRFLCBETyBOT1QgVVNFIQorLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqKioqKioqKioqKioqKioqKioKK0lmIHlvdSBhcmUgd3JpdGluZyBhIG5ldyBkcml2ZXIgb3IgbWFpbnRhaW5pbmcgYW4gb2xkIGRyaXZlciwgaXQKK3Nob3VsZCBpbmNsdWRlIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydC4gIFdpdGhvdXQgcG93ZXIgbWFuYWdlbWVudAorc3VwcG9ydCwgYSBzaW5nbGUgZHJpdmVyIG1heSBwcmV2ZW50IGEgc3lzdGVtIHdpdGggcG93ZXIgbWFuYWdlbWVudAorY2FwYWJpbGl0aWVzIGZyb20gZXZlciBiZWluZyBhYmxlIHRvIHN1c3BlbmQgKHNhZmVseSkuCisKK092ZXJ2aWV3OgorMSkgUmVnaXN0ZXIgZWFjaCBpbnN0YW5jZSBvZiBhIGRldmljZSB3aXRoICJwbV9yZWdpc3RlciIKKzIpIENhbGwgInBtX2FjY2VzcyIgYmVmb3JlIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUuCisgICAodGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBoYXJkd2FyZSBpcyBhd2FrZSBhbmQgcmVhZHkpCiszKSBZb3VyICJwbV9jYWxsYmFjayIgaXMgY2FsbGVkIGJlZm9yZSBnb2luZyBpbnRvIGEKKyAgIHN1c3BlbmQgc3RhdGUgKEFDUEkgRDEtRDMpIG9yIGFmdGVyIHJlc3VtaW5nIChBQ1BJIEQwKQorICAgZnJvbSBhIHN1c3BlbmQuCis0KSBDYWxsICJwbV9kZXZfaWRsZSIgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBiZWluZyB1c2VkCisgICAob3B0aW9uYWwgYnV0IHdpbGwgaW1wcm92ZSBkZXZpY2UgaWRsZSBkZXRlY3Rpb24pCis1KSBXaGVuIHVubG9hZGVkLCB1bnJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCAicG1fdW5yZWdpc3RlciIKKworLyoKKyAqIERlc2NyaXB0aW9uOiBSZWdpc3RlciBhIGRldmljZSB3aXRoIHRoZSBwb3dlci1tYW5hZ2VtZW50IHN1YnN5c3RlbQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIHR5cGUgLSBkZXZpY2UgdHlwZSAoUENJIGRldmljZSwgc3lzdGVtIGRldmljZSwgLi4uKQorICogICBpZCAtIGluc3RhbmNlIG51bWJlciBvciB1bmlxdWUgaWRlbnRpZmllcgorICogICBjYmFjayAtIHJlcXVlc3QgaGFuZGxlciBjYWxsYmFjayAoc3VzcGVuZCwgcmVzdW1lLCAuLi4pCisgKgorICogUmV0dXJuczogUmVnaXN0ZXJlZCBQTSBkZXZpY2Ugb3IgTlVMTCBvbiBlcnJvcgorICoKKyAqIEV4YW1wbGVzOgorICogICBkZXYgPSBwbV9yZWdpc3RlcihQTV9TWVNfREVWLCBQTV9TWVNfVkdBLCB2Z2FfY2FsbGJhY2spOworICoKKyAqICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBwY2lfZmluZF9kZXYoLi4uKTsKKyAqICAgZGV2ID0gcG1fcmVnaXN0ZXIoUE1fUENJX0RFViwgUE1fUENJX0lEKHBjaV9kZXYpLCBjYWxsYmFjayk7CisgKi8KK3N0cnVjdCBwbV9kZXYgKnBtX3JlZ2lzdGVyKHBtX2Rldl90IHR5cGUsIHVuc2lnbmVkIGxvbmcgaWQsIHBtX2NhbGxiYWNrIGNiYWNrKTsKKworLyoKKyAqIERlc2NyaXB0aW9uOiBVbnJlZ2lzdGVyIGEgZGV2aWNlIHdpdGggdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtCisgKgorICogUGFyYW1ldGVyczoKKyAqICAgZGV2IC0gUE0gZGV2aWNlIHByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSBwbV9yZWdpc3RlcgorICovCit2b2lkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KTsKKworLyoKKyAqIERlc2NyaXB0aW9uOiBVbnJlZ2lzdGVyIGFsbCBkZXZpY2VzIHdpdGggYSBtYXRjaGluZyBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIGNiYWNrIC0gcHJldmlvdXNseSByZWdpc3RlcmVkIHJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlczogUHJvdmlkZWQgZm9yIGVhc2llciBwb3J0aW5nIGZyb20gb2xkIEFQTSBpbnRlcmZhY2UKKyAqLwordm9pZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYmFjayk7CisKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50IHJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBkZXYgLSBQTSBkZXZpY2UgcHJldmlvdXNseSByZXR1cm5lZCBmcm9tIHBtX3JlZ2lzdGVyCisgKiAgIHJxc3QgLSByZXF1ZXN0IHR5cGUKKyAqICAgZGF0YSAtIGRhdGEsIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0CisgKgorICogUmV0dXJuczogMCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsCisgKiAgICAgICAgICBFSU5WQUwgaWYgdGhlIHJlcXVlc3QgaXMgbm90IHN1cHBvcnRlZAorICogICAgICAgICAgRUJVU1kgaWYgdGhlIGRldmljZSBpcyBub3cgYnVzeSBhbmQgY2FuIG5vdCBoYW5kbGUgdGhlIHJlcXVlc3QKKyAqICAgICAgICAgIEVOT01FTSBpZiB0aGUgZGV2aWNlIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0IGR1ZSB0byBtZW1vcnkKKyAqICAgICAgICAgIAorICogRGV0YWlsczogVGhlIGRldmljZSByZXF1ZXN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUKKyAqICAgICAgICAgIGRldmljZS9zeXN0ZW0gZW50ZXJzIGEgc3VzcGVuZCBzdGF0ZSAoQUNQSSBEMS1EMykgb3IKKyAqICAgICAgICAgIG9yIGFmdGVyIHRoZSBkZXZpY2Uvc3lzdGVtIHJlc3VtZXMgZnJvbSBzdXNwZW5kIChBQ1BJIEQwKS4KKyAqICAgICAgICAgIEZvciBQTV9TVVNQRU5ELCB0aGUgQUNQSSBELXN0YXRlIGJlaW5nIGVudGVyZWQgaXMgcGFzc2VkCisgKiAgICAgICAgICBhcyB0aGUgImRhdGEiIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjay4gIFRoZSBkZXZpY2UKKyAqICAgICAgICAgIGRyaXZlciBzaG91bGQgc2F2ZSAoUE1fU1VTUEVORCkgb3IgcmVzdG9yZSAoUE1fUkVTVU1FKQorICogICAgICAgICAgZGV2aWNlIGNvbnRleHQgd2hlbiB0aGUgcmVxdWVzdCBjYWxsYmFjayBpcyBjYWxsZWQuCisgKgorICogICAgICAgICAgT25jZSBhIGRyaXZlciByZXR1cm5zIDAgKHN1Y2Nlc3MpIGZyb20gYSBzdXNwZW5kCisgKiAgICAgICAgICByZXF1ZXN0LCBpdCBzaG91bGQgbm90IHByb2Nlc3MgYW55IGZ1cnRoZXIgcmVxdWVzdHMgb3IKKyAqICAgICAgICAgIGFjY2VzcyB0aGUgZGV2aWNlIGhhcmR3YXJlIHVudGlsIGEgY2FsbCB0byAicG1fYWNjZXNzIiBpcyBtYWRlLgorICovCit0eXBlZGVmIGludCAoKnBtX2NhbGxiYWNrKShzdHJ1Y3QgcG1fZGV2ICpkZXYsIHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpkYXRhKTsKKworRHJpdmVyIERldGFpbHMKKy0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGp1c3QgYSBxdWljayBRJkEgYXMgYSBzdG9wZ2FwIHVudGlsIGEgcmVhbCBkcml2ZXIgd3JpdGVycycKK3Bvd2VyIG1hbmFnZW1lbnQgZ3VpZGUgaXMgYXZhaWxhYmxlLgorCitROiBXaGVuIGlzIGEgZGV2aWNlIHN1c3BlbmRlZD8KKworRGV2aWNlcyBjYW4gYmUgc3VzcGVuZGVkIGJhc2VkIG9uIGRpcmVjdCB1c2VyIHJlcXVlc3QgKGVnLiBsYXB0b3AgbGlkCitjbG9zZXMpLCBzeXN0ZW0gcG93ZXIgcG9saWN5IChlZy4gIHNsZWVwIGFmdGVyIDMwIG1pbnV0ZXMgb2YgY29uc29sZQoraW5hY3Rpdml0eSksIG9yIGRldmljZSBwb3dlciBwb2xpY3kgKGVnLiBwb3dlciBkb3duIGRldmljZSBhZnRlciA1CittaW51dGVzIG9mIGluYWN0aXZpdHkpCisKK1E6IE11c3QgYSBkcml2ZXIgaG9ub3IgYSBzdXNwZW5kIHJlcXVlc3Q/CisKK05vLCBhIGRyaXZlciBjYW4gcmV0dXJuIC1FQlVTWSBmcm9tIGEgc3VzcGVuZCByZXF1ZXN0IGFuZCB0aGlzCit3aWxsIHN0b3AgdGhlIHN5c3RlbSBmcm9tIHN1c3BlbmRpbmcuICBXaGVuIGEgc3VzcGVuZCByZXF1ZXN0CitmYWlscywgYWxsIHN1c3BlbmRlZCBkZXZpY2VzIGFyZSByZXN1bWVkIGFuZCB0aGUgc3lzdGVtIGNvbnRpbnVlcwordG8gcnVuLiAgU3VzcGVuZCBjYW4gYmUgcmV0cmllZCBhdCBhIGxhdGVyIHRpbWUuCisKK1E6IENhbiB0aGUgZHJpdmVyIGJsb2NrIHN1c3BlbmQvcmVzdW1lIHJlcXVlc3RzPworCitZZXMsIGEgZHJpdmVyIGNhbiBkZWxheSBpdHMgcmV0dXJuIGZyb20gYSBzdXNwZW5kIG9yIHJlc3VtZQorcmVxdWVzdCB1bnRpbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGhhbmRsZSByZXF1ZXN0cy4gIEl0CitpcyBhZHZhbnRhZ2VvdXMgdG8gcmV0dXJuIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgZnJvbSBhCityZXF1ZXN0IGFzIHN1c3BlbmQvcmVzdW1lIGFyZSBkb25lIHNlcmlhbGx5LgorCitROiBXaGF0IGNvbnRleHQgaXMgYSBzdXNwZW5kL3Jlc3VtZSBpbml0aWF0ZWQgZnJvbT8KKworQSBzdXNwZW5kIG9yIHJlc3VtZSBpcyBpbml0aWF0ZWQgZnJvbSBhIGtlcm5lbCB0aHJlYWQgY29udGV4dC4KK0l0IGlzIHNhZmUgdG8gYmxvY2ssIGFsbG9jYXRlIG1lbW9yeSwgaW5pdGlhdGUgcmVxdWVzdHMKK29yIGFueXRoaW5nIGVsc2UgeW91IGNhbiBkbyB3aXRoaW4gdGhlIGtlcm5lbC4KKworUTogV2lsbCByZXF1ZXN0cyBjb250aW51ZSB0byBhcnJpdmUgYWZ0ZXIgYSBzdXNwZW5kPworCitQb3NzaWJseS4gIEl0IGlzIHRoZSBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0byBxdWV1ZSgqKSwKK2ZhaWwsIG9yIGRyb3AgYW55IHJlcXVlc3RzIHRoYXQgYXJyaXZlIGFmdGVyIHJldHVybmluZworc3VjY2VzcyB0byBhIHN1c3BlbmQgcmVxdWVzdC4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZQorZHJpdmVyIG5vdCBhY2Nlc3MgaXRzIGRldmljZSB1bnRpbCBhZnRlciBpdCByZWNlaXZlcworYSByZXN1bWUgcmVxdWVzdCBhcyB0aGUgZGV2aWNlJ3MgYnVzIG1heSBubyBsb25nZXIKK2JlIGFjdGl2ZS4KKworKCopIElmIGEgZHJpdmVyIHF1ZXVlcyByZXF1ZXN0cyBmb3IgcHJvY2Vzc2luZyBhZnRlcgorICAgIHJlc3VtZSBiZSBhd2FyZSB0aGF0IHRoZSBkZXZpY2UsIG5ldHdvcmssIGV0Yy4KKyAgICBtaWdodCBiZSBpbiBhIGRpZmZlcmVudCBzdGF0ZSB0aGFuIGF0IHN1c3BlbmQgdGltZS4KKyAgICBJdCdzIHByb2JhYmx5IGJldHRlciB0byBkcm9wIHJlcXVlc3RzIHVubGVzcworICAgIHRoZSBkcml2ZXIgaXMgYSBzdG9yYWdlIGRldmljZS4KKworUTogRG8gSSBoYXZlIHRvIG1hbmFnZSBidXMtc3BlY2lmaWMgcG93ZXIgbWFuYWdlbWVudCByZWdpc3RlcnMKKworTm8uICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGJ1cyBkcml2ZXIgdG8gbWFuYWdlCitQQ0ksIFVTQiwgZXRjLiBwb3dlciBtYW5hZ2VtZW50IHJlZ2lzdGVycy4gIFRoZSBidXMgZHJpdmVyCitvciB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2lsbCBhbHNvIGVuYWJsZSBhbnkKK3dha2Utb24gZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBkZXZpY2UgaGFzLgorCitROiBTbywgcmVhbGx5LCB3aGF0IGRvIEkgbmVlZCB0byBkbyB0byBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lPworCitZb3UgbmVlZCB0byBzYXZlIGFueSBkZXZpY2UgY29udGV4dCB0aGF0IHdvdWxkCitiZSBsb3N0IGlmIHRoZSBkZXZpY2Ugd2FzIHBvd2VyZWQgb2ZmIGFuZCB0aGVuIHJlc3RvcmUKK2l0IGF0IHJlc3VtZSB0aW1lLiAgV2hlbiBBQ1BJIGlzIGFjdGl2ZSwgdGhlcmUgYXJlCit0aHJlZSBsZXZlbHMgb2YgZGV2aWNlIHN1c3BlbmQgc3RhdGVzOyBEMSwgRDIsIGFuZCBEMy4KKyhUaGUgc3VzcGVuZCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlICJkYXRhIiBhcmd1bWVudAordG8gdGhlIGRldmljZSBjYWxsYmFjay4pICBXaXRoIEQzLCB0aGUgZGV2aWNlIGlzIHBvd2VyZWQKK29mZiBhbmQgbG9zZXMgYWxsIGNvbnRleHQsIEQxIGFuZCBEMiBhcmUgc2hhbGxvd2VyIHBvd2VyCitzdGF0ZXMgYW5kIHJlcXVpcmUgbGVzcyBkZXZpY2UgY29udGV4dCB0byBiZSBzYXZlZC4gIFRvCitwbGF5IGl0IHNhZmUsIGp1c3Qgc2F2ZSBldmVyeXRoaW5nIGF0IHN1c3BlbmQgYW5kIHJlc3RvcmUKK2V2ZXJ5dGhpbmcgYXQgcmVzdW1lLgorCitROiBXaGVyZSBkbyBJIHN0b3JlIGRldmljZSBjb250ZXh0IGZvciBzdXNwZW5kPworCitBbnl3aGVyZSBpbiBtZW1vcnksIGttYWxsb2MgYSBidWZmZXIgb3Igc3RvcmUgaXQKK2luIHRoZSBkZXZpY2UgZGVzY3JpcHRvci4gIFlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZQorY29udGVudHMgb2YgbWVtb3J5IHdpbGwgYmUgcmVzdG9yZWQgYW5kIGFjY2Vzc2libGUKK2JlZm9yZSByZXN1bWUsIGV2ZW4gd2hlbiB0aGUgc3lzdGVtIHN1c3BlbmRzIHRvIGRpc2suCisKK1E6IFdoYXQgZG8gSSBuZWVkIHRvIGRvIGZvciBBQ1BJIHZzLiBBUE0gdnMuIGV0Yz8KKworRHJpdmVycyBuZWVkIG5vdCBiZSBhd2FyZSBvZiB0aGUgc3BlY2lmaWMgcG93ZXIgbWFuYWdlbWVudAordGVjaG5vbG9neSB0aGF0IGlzIGFjdGl2ZS4gIFRoZXkganVzdCBuZWVkIHRvIGJlIGF3YXJlCitvZiB3aGVuIHRoZSBvdmVybHlpbmcgcG93ZXIgbWFuYWdlbWVudCBzeXN0ZW0gcmVxdWVzdHMKK3RoYXQgdGhleSBzdXNwZW5kIG9yIHJlc3VtZS4KKworUTogV2hhdCBhYm91dCBkZXZpY2UgZGVwZW5kZW5jaWVzPworCitXaGVuIGEgZHJpdmVyIHJlZ2lzdGVycyBhIGRldmljZSwgdGhlIHBvd2VyIG1hbmFnZW1lbnQKK3N1YnN5c3RlbSB1c2VzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byBidWlsZCBhCit0cmVlIG9mIGRldmljZSBkZXBlbmRlbmNpZXMgKGVnLiBVU0IgZGV2aWNlIFggaXMgb24KK1VTQiBjb250cm9sbGVyIFkgd2hpY2ggaXMgb24gUENJIGJ1cyBaKSAgV2hlbiBwb3dlcgorbWFuYWdlbWVudCB3YW50cyB0byBzdXNwZW5kIGEgZGV2aWNlLCBpdCBmaXJzdCBzZW5kcworYSBzdXNwZW5kIHJlcXVlc3QgdG8gaXRzIGRyaXZlciwgdGhlbiB0aGUgYnVzIGRyaXZlciwKK2FuZCBzbyBvbiB1cCB0byB0aGUgc3lzdGVtIGJ1cy4gIERldmljZSByZXN1bWVzCitwcm9jZWVkIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCisKK1E6IFdobyBkbyBJIGNvbnRhY3QgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQKKyAgIGVuYWJsaW5nIHBvd2VyIG1hbmFnZW1lbnQgZm9yIG15IHNwZWNpZmljIGRyaXZlci9kZXZpY2U/CisKK0FDUEkgRGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0OiBhY3BpLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitTeXN0ZW0gSW50ZXJmYWNlIC0tIE9CU09MRVRFLCBETyBOT1QgVVNFIQorLS0tLS0tLS0tLS0tLS0tLSoqKioqKioqKioqKioqKioqKioqKioqKioKK0lmIHlvdSBhcmUgcHJvdmlkaW5nIG5ldyBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgdG8gTGludXggKGllLgorYWRkaW5nIHN1cHBvcnQgZm9yIHNvbWV0aGluZyBsaWtlIEFQTSBvciBBQ1BJKSwgeW91IHNob3VsZAorY29tbXVuaWNhdGUgd2l0aCBkcml2ZXJzIHRocm91Z2ggdGhlIGV4aXN0aW5nIGdlbmVyaWMgcG93ZXIKK21hbmFnZW1lbnQgaW50ZXJmYWNlLgorCisvKgorICogU2VuZCBhIHJlcXVlc3QgdG8gYWxsIGRldmljZXMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBycXN0IC0gcmVxdWVzdCB0eXBlCisgKiAgIGRhdGEgLSBkYXRhLCBpZiBhbnksIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdAorICoKKyAqIFJldHVybnM6IDAgaWYgdGhlIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bAorICogICAgICAgICAgU2VlICJwbV9jYWxsYmFjayIgcmV0dXJuIGZvciBlcnJvcnMKKyAqCisgKiBEZXRhaWxzOiBXYWxrIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZpY2VzIGFuZCBjYWxsIHBtX3NlbmQKKyAqICAgICAgICAgIGZvciBlYWNoIHVudGlsIGNvbXBsZXRlIG9yIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLgorICogICAgICAgICAgSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgZm9yIGEgc3VzcGVuZCByZXF1ZXN0LAorICogICAgICAgICAgcmV0dXJuIGFsbCBkZXZpY2VzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gYmVmb3JlCisgKiAgICAgICAgICB0aGUgc3VzcGVuZCByZXF1ZXN0LgorICovCitpbnQgcG1fc2VuZF9hbGwocG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpOworCisvKgorICogRmluZCBhIG1hdGNoaW5nIGRldmljZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIHR5cGUgLSBkZXZpY2UgdHlwZSAoUENJIGRldmljZSwgc3lzdGVtIGRldmljZSwgb3IgMCB0byBtYXRjaCBhbGwgZGV2aWNlcykKKyAqICAgZnJvbSAtIHByZXZpb3VzIG1hdGNoIG9yIE5VTEwgdG8gc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nCisgKgorICogUmV0dXJuczogTWF0Y2hpbmcgZGV2aWNlIG9yIE5VTEwgaWYgbm9uZSBmb3VuZAorICovCitzdHJ1Y3QgcG1fZGV2ICpwbV9maW5kKHBtX2Rldl90IHR5cGUsIHN0cnVjdCBwbV9kZXYgKmZyb20pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wbnAudHh0IGIvRG9jdW1lbnRhdGlvbi9wbnAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMGY2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3BucC50eHQKQEAgLTAsMCArMSwyNDkgQEAKK0xpbnV4IFBsdWcgYW5kIFBsYXkgRG9jdW1lbnRhdGlvbgorYnkgQWRhbSBCZWxheSA8YW1ieDFAbmVvLnJyLmNvbT4KK2xhc3QgdXBkYXRlZDogT2N0LiAxNiwgMjAwMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitPdmVydmlldworLS0tLS0tLS0KKwlQbHVnIGFuZCBQbGF5IHByb3ZpZGVzIGEgbWVhbnMgb2YgZGV0ZWN0aW5nIGFuZCBzZXR0aW5nIHJlc291cmNlcyBmb3IgbGVnYWN5IG9yCitvdGhlcndpc2UgdW5jb25maWd1cmFibGUgZGV2aWNlcy4gIFRoZSBMaW51eCBQbHVnIGFuZCBQbGF5IExheWVyIHByb3ZpZGVzIHRoZXNlIAorc2VydmljZXMgdG8gY29tcGF0aWJsZSBkcml2ZXJzLgorCisKKworVGhlIFVzZXIgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0KKwlUaGUgTGludXggUGx1ZyBhbmQgUGxheSB1c2VyIGludGVyZmFjZSBwcm92aWRlcyBhIG1lYW5zIHRvIGFjdGl2YXRlIFBuUCBkZXZpY2VzCitmb3IgbGVnYWN5IGFuZCB1c2VyIGxldmVsIGRyaXZlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBMaW51eCBQbHVnIGFuZCBQbGF5LiAgVGhlIAordXNlciBpbnRlcmZhY2UgaXMgaW50ZWdyYXRlZCBpbnRvIGRyaXZlcmZzLgorCitJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgZHJpdmVyZnMgZmlsZSB0aGUgZm9sbG93aW5nIGFyZSBjcmVhdGVkIGluIGVhY2ggCitkZXZpY2UncyBkaXJlY3Rvcnk6CitpZCAtIGRpc3BsYXlzIGEgbGlzdCBvZiBzdXBwb3J0IEVJU0EgSURzCitvcHRpb25zIC0gZGlzcGxheXMgcG9zc2libGUgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMKK3Jlc291cmNlcyAtIGRpc3BsYXlzIGN1cnJlbnRseSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBhbGxvd3MgcmVzb3VyY2UgY2hhbmdlcworCistYWN0aXZhdGluZyBhIGRldmljZQorCisjZWNobyAiYXV0byIgPiByZXNvdXJjZXMKKwordGhpcyB3aWxsIGludm9rZSB0aGUgYXV0b21hdGljIHJlc291cmNlIGNvbmZpZyBzeXN0ZW0gdG8gYWN0aXZhdGUgdGhlIGRldmljZQorCistbWFudWFsbHkgYWN0aXZhdGluZyBhIGRldmljZQorCisjZWNobyAibWFudWFsIDxkZXBudW0+IDxtb2RlPiIgPiByZXNvdXJjZXMKKzxkZXBudW0+IC0gdGhlIGNvbmZpZ3VyYXRpb24gbnVtYmVyCis8bW9kZT4gLSBzdGF0aWMgb3IgZHluYW1pYworCQlzdGF0aWMgPSBmb3IgbmV4dCBib290CisJCWR5bmFtaWMgPSBub3cKKworLWRpc2FibGluZyBhIGRldmljZQorCisjZWNobyAiZGlzYWJsZSIgPiByZXNvdXJjZXMKKworCitFWEFNUExFOgorCitTdXBwb3NlIHlvdSBuZWVkIHRvIGFjdGl2YXRlIHRoZSBmbG9wcHkgZGlzayBjb250cm9sbGVyLgorMS4pIGNoYW5nZSB0byB0aGUgcHJvcGVyIGRpcmVjdG9yeSwgaW4gbXkgY2FzZSBpdCBpcyAKKy9kcml2ZXIvYnVzL3BucC9kZXZpY2VzLzAwOjBmCisjIGNkIC9kcml2ZXIvYnVzL3BucC9kZXZpY2VzLzAwOjBmCisjIGNhdCBuYW1lCitQQyBzdGFuZGFyZCBmbG9wcHkgZGlzayBjb250cm9sbGVyCisKKzIuKSBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgYWN0aXZlCisjIGNhdCByZXNvdXJjZXMKK0RJU0FCTEVECisKKy0gTm90aWNlIHRoZSBzdHJpbmcgIkRJU0FCTEVEIi4gIFRIaXMgbWVhbnMgdGhlIGRldmljZSBpcyBub3QgYWN0aXZlLgorCiszLikgY2hlY2sgdGhlIGRldmljZSdzIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIChvcHRpb25hbCkKKyMgY2F0IG9wdGlvbnMKK0RlcGVuZGVudDogMDEgLSBQcmlvcml0eSBhY2NlcHRhYmxlCisgICAgcG9ydCAweDNmMC0weDNmMCwgYWxpZ24gMHg3LCBzaXplIDB4NiwgMTYtYml0IGFkZHJlc3MgZGVjb2RpbmcKKyAgICBwb3J0IDB4M2Y3LTB4M2Y3LCBhbGlnbiAweDAsIHNpemUgMHgxLCAxNi1iaXQgYWRkcmVzcyBkZWNvZGluZworICAgIGlycSA2CisgICAgZG1hIDIgOC1iaXQgY29tcGF0aWJsZQorRGVwZW5kZW50OiAwMiAtIFByaW9yaXR5IGFjY2VwdGFibGUKKyAgICBwb3J0IDB4MzcwLTB4MzcwLCBhbGlnbiAweDcsIHNpemUgMHg2LCAxNi1iaXQgYWRkcmVzcyBkZWNvZGluZworICAgIHBvcnQgMHgzNzctMHgzNzcsIGFsaWduIDB4MCwgc2l6ZSAweDEsIDE2LWJpdCBhZGRyZXNzIGRlY29kaW5nCisgICAgaXJxIDYKKyAgICBkbWEgMiA4LWJpdCBjb21wYXRpYmxlCisKKzQuKSBub3cgYWN0aXZhdGUgdGhlIGRldmljZQorIyBlY2hvICJhdXRvIiA+IHJlc291cmNlcworCis1LikgZmluYWxseSBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIGFjdGl2ZQorIyBjYXQgcmVzb3VyY2VzCitpbyAweDNmMC0weDNmNQoraW8gMHgzZjctMHgzZjcKK2lycSA2CitkbWEgMgorCithbHNvIHRoZXJlIGFyZSBhIHNlcmllcyBvZiBrZXJuZWwgcGFyYW1ldGVyczoKK3BucF9yZXNlcnZlX2lycT1pcnExWyxpcnEyXSAuLi4uCitwbnBfcmVzZXJ2ZV9kbWE9ZG1hMVssZG1hMl0gLi4uLgorcG5wX3Jlc2VydmVfaW89aW8xLHNpemUxWyxpbzIsc2l6ZTJdIC4uLi4KK3BucF9yZXNlcnZlX21lbT1tZW0xLHNpemUxWyxtZW0yLHNpemUyXSAuLi4uCisKKworCitUaGUgVW5pZmllZCBQbHVnIGFuZCBQbGF5IExheWVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQWxsIFBsdWcgYW5kIFBsYXkgZHJpdmVycywgcHJvdG9jb2xzLCBhbmQgc2VydmljZXMgbWVldCBhdCBhIGNlbnRyYWwgbG9jYXRpb24gCitjYWxsZWQgdGhlIFBsdWcgYW5kIFBsYXkgTGF5ZXIuICBUaGlzIGxheWVyIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgZXhjaGFuZ2Ugb2YgCitpbmZvcm1hdGlvbiBiZXR3ZWVuIFBuUCBkcml2ZXJzIGFuZCBQblAgcHJvdG9jb2xzLiAgVGh1cyBpdCBhdXRvbWF0aWNhbGx5IAorZm9yd2FyZHMgY29tbWFuZHMgdG8gdGhlIHByb3BlciBwcm90b2NvbC4gIFRoaXMgbWFrZXMgd3JpdGluZyBQblAgZHJpdmVycyAKK3NpZ25pZmljYW50bHkgZWFzaWVyLgorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFBsdWcgYW5kIFBsYXkgTGF5ZXI6CisKK3BucF9nZXRfcHJvdG9jb2wKKy0gaW5jcmVtZW50cyB0aGUgbnVtYmVyIG9mIHVzZXMgYnkgb25lCisKK3BucF9wdXRfcHJvdG9jb2wKKy0gZGVpbmNyZW1lbnRzIHRoZSBudW1iZXIgb2YgdXNlcyBieSBvbmUKKworcG5wX3JlZ2lzdGVyX3Byb3RvY29sCistIHVzZSB0aGlzIHRvIHJlZ2lzdGVyIGEgbmV3IFBuUCBwcm90b2NvbAorCitwbnBfdW5yZWdpc3Rlcl9wcm90b2NvbAorLSB1c2UgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgYSBQblAgcHJvdG9jb2wgZnJvbSB0aGUgUGx1ZyBhbmQgUGxheSBMYXllcgorCitwbnBfcmVnaXN0ZXJfZHJpdmVyCistIGFkZHMgYSBQblAgZHJpdmVyIHRvIHRoZSBQbHVnIGFuZCBQbGF5IExheWVyCistIHRoaXMgaW5jbHVkZXMgZHJpdmVyIG1vZGVsIGludGVncmF0aW9uCisKK3BucF91bnJlZ2lzdGVyX2RyaXZlcgorLSByZW1vdmVzIGEgUG5QIGRyaXZlciBmcm9tIHRoZSBQbHVnIGFuZCBQbGF5IExheWVyCisKKworCitQbHVnIGFuZCBQbGF5IFByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlUaGlzIHNlY3Rpb24gY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIFBuUCBwcm90b2NvbCBkZXZlbG9wZXJzLgorCitUaGUgZm9sbG93aW5nIFByb3RvY29scyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgY29tcHV0aW5nIHdvcmxkOgorLSBQTlBCSU9TOiB1c2VkIGZvciBzeXN0ZW0gZGV2aWNlcyBzdWNoIGFzIHNlcmlhbCBhbmQgcGFyYWxsZWwgcG9ydHMuCistIElTQVBOUDogcHJvdmlkZXMgUG5QIHN1cHBvcnQgZm9yIHRoZSBJU0EgYnVzCistIEFDUEk6IGFtb25nIGl0cyBtYW55IHVzZXMsIEFDUEkgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgc3lzdGVtIGxldmVsIAorZGV2aWNlcy4KK0l0IGlzIG1lYW50IHRvIHJlcGxhY2UgdGhlIFBOUEJJT1MuICBJdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBMaW51eAorUGx1ZyBhbmQgUGxheSBidXQgaXQgaXMgcGxhbm5lZCB0byBiZSBpbiB0aGUgbmVhciBmdXR1cmUuCisKKworUmVxdWlyZW1lbnRzIGZvciBhIExpbnV4IFBuUCBwcm90b2NvbDoKKzEuKSB0aGUgcHJvdG9jb2wgbXVzdCB1c2UgRUlTQSBJRHMKKzIuKSB0aGUgcHJvdG9jb2wgbXVzdCBpbmZvcm0gdGhlIFBuUCBMYXllciBvZiBhIGRldmljZXMgY3VycmVudCBjb25maWd1cmF0aW9uCistIHRoZSBhYmlsaXR5IHRvIHNldCByZXNvdXJjZXMgaXMgb3B0aW9uYWwgYnV0IHByZWZlcmVkLgorCitUaGUgZm9sbG93aW5nIGFyZSBQblAgcHJvdG9jb2wgcmVsYXRlZCBmdW5jdGlvbnM6CisKK3BucF9hZGRfZGV2aWNlCistIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGFkZCBhIFBuUCBkZXZpY2UgdG8gdGhlIFBuUCBsYXllcgorLSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGFsbCB3YW50ZWQgdmFsdWVzIGFyZSBzZXQgaW4gdGhlIHBucF9kZXYgCitzdHJ1Y3R1cmUKKworcG5wX2luaXRfZGV2aWNlCistIGNhbGwgdGhpcyB0byBpbml0aWFsaXplIHRoZSBQblAgc3RydWN0dXJlCisKK3BucF9yZW1vdmVfZGV2aWNlCistIGNhbGwgdGhpcyB0byByZW1vdmUgYSBkZXZpY2UgZnJvbSB0aGUgUGx1ZyBhbmQgUGxheSBMYXllci4KKy0gaXQgd2lsbCBmYWlsIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgaW4gdXNlLgorLSBhdXRvbWF0aWNhbGx5IHdpbGwgZnJlZSBtZW0gdXNlZCBieSB0aGUgZGV2aWNlIGFuZCByZWxhdGVkIHN0cnVjdHVyZXMKKworcG5wX2FkZF9pZAorLSBhZGRzIGEgRUlTQSBJRCB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSURzIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBjb25zdWx0IHRoZSBzb3VyY2Ugb2YgYSBwcm90b2NvbCBzdWNoIGFzCisvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMuCisKKworCitMaW51eCBQbHVnIGFuZCBQbGF5IERyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVRoaXMgc2VjdGlvbiBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgbGludXggUG5QIGRyaXZlciBkZXZlbG9wZXJzLgorCitUaGUgTmV3IFdheQorLi4uLi4uLi4uLi4KKzEuKSBmaXJzdCBtYWtlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgRUlTQSBJRFMKK2V4Ogorc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfaWQgcG5wX2Rldl90YWJsZVtdID0geworCS8qIFN0YW5kYXJkIExQVCBQcmludGVyIFBvcnQgKi8KKwl7LmlkID0gIlBOUDA0MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKKwkvKiBFQ1AgUHJpbnRlciBQb3J0ICovCisJey5pZCA9ICJQTlAwNDAxIiwgLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICIifQorfTsKKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgY2hhcmFjdGVyICdYJyBjYW4gYmUgdXNlZCBhcyBhIHdpbGQgY2FyZCBpbiB0aGUgZnVuY3Rpb24KK3BvcnRpb24gKGxhc3QgZm91ciBjaGFyYWN0ZXJzKS4KK2V4OgorCS8qIFVua293biBQblAgbW9kZW1zICovCisJewkiUE5QQ1hYWCIsCQlVTktOT1dOX0RFVgl9LAorCitTdXBwb3J0ZWQgUG5QIGNhcmQgSURzIGNhbiBvcHRpb25hbGx5IGJlIGRlZmluZWQuCitleDoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2lkIHBucF9jYXJkX3RhYmxlW10gPSB7CisJewkiQU5ZREVWUyIsCQkwCX0sCisJewkiIiwJCQkwCX0KK307CisKKzIuKSBPcHRpb25hbGx5IGRlZmluZSBwcm9iZSBhbmQgcmVtb3ZlIGZ1bmN0aW9ucy4gIEl0IG1heSBtYWtlIHNlbnNlIG5vdCB0byAKK2RlZmluZSB0aGVzZSBmdW5jdGlvbnMgaWYgdGhlIGRyaXZlciBhbHJlYWR5IGhhcyBhIHJlbGlhYmxlIG1ldGhvZCBvZiBkZXRlY3RpbmcKK3RoZSByZXNvdXJjZXMsIHN1Y2ggYXMgdGhlIHBhcnBvcnRfcGMgZHJpdmVyLgorZXg6CitzdGF0aWMgaW50CitzZXJpYWxfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICogZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2lkICpjYXJkX2lkLCBjb25zdCAKKyAgICAgICAgICAgICAgICAgc3RydWN0IHBucF9pZCAqZGV2X2lkKQoreworLiAuIC4KKworZXg6CitzdGF0aWMgdm9pZCBzZXJpYWxfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqIGRldikKK3sKKy4gLiAuCisKK2NvbnN1bHQgL2RyaXZlcnMvc2VyaWFsLzgyNTBfcG5wLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKzMuKSBjcmVhdGUgYSBkcml2ZXIgc3RydWN0dXJlCitleDoKKworc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHNlcmlhbF9wbnBfZHJpdmVyID0geworCS5uYW1lCQk9ICJzZXJpYWwiLAorCS5jYXJkX2lkX3RhYmxlCT0gcG5wX2NhcmRfdGFibGUsCisJLmlkX3RhYmxlCT0gcG5wX2Rldl90YWJsZSwKKwkucHJvYmUJCT0gc2VyaWFsX3BucF9wcm9iZSwKKwkucmVtb3ZlCQk9IHNlcmlhbF9wbnBfcmVtb3ZlLAorfTsKKworKiBuYW1lIGFuZCBpZF90YWJsZSBjYW4gbm90IGJlIE5VTEwuCisKKzQuKSByZWdpc3RlciB0aGUgZHJpdmVyCitleDoKKworc3RhdGljIGludCBfX2luaXQgc2VyaWFsODI1MF9wbnBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfcG5wX2RyaXZlcik7Cit9CisKK1RoZSBPbGQgV2F5CisuLi4uLi4uLi4uLgorCithIHNlcmllcyBvZiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0byBtYWtlIGl0IGVhc3kgdG8gY29udmVydCAKKworSVNBUE5QIGRyaXZlcnMuICBUaGV5IHNob3VsZCBzZXJ2ZSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiBvbmx5LgorCit0aGV5IGFyZSBhcyBmb2xsb3dzOgorCitzdHJ1Y3QgcG5wX2NhcmQgKnBucF9maW5kX2NhcmQodW5zaWduZWQgc2hvcnQgdmVuZG9yLAorCQkJCSB1bnNpZ25lZCBzaG9ydCBkZXZpY2UsCisJCQkJIHN0cnVjdCBwbnBfY2FyZCAqZnJvbSkKKworc3RydWN0IHBucF9kZXYgKnBucF9maW5kX2RldihzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQsCisJCQkJdW5zaWduZWQgc2hvcnQgdmVuZG9yLAorCQkJCXVuc2lnbmVkIHNob3J0IGZ1bmN0aW9uLAorCQkJCXN0cnVjdCBwbnBfZGV2ICpmcm9tKQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDRhZTlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApAQCAtMCwwICsxLDMxOSBAQAorCitEZXZpY2UgUG93ZXIgTWFuYWdlbWVudAorCisKK0RldmljZSBwb3dlciBtYW5hZ2VtZW50IGVuY29tcGFzc2VzIHR3byBhcmVhcyAtIHRoZSBhYmlsaXR5IHRvIHNhdmUKK3N0YXRlIGFuZCB0cmFuc2l0aW9uIGEgZGV2aWNlIHRvIGEgbG93LXBvd2VyIHN0YXRlIHdoZW4gdGhlIHN5c3RlbSBpcworZW50ZXJpbmcgYSBsb3ctcG93ZXIgc3RhdGU7IGFuZCB0aGUgYWJpbGl0eSB0byB0cmFuc2l0aW9uIGEgZGV2aWNlIHRvCithIGxvdy1wb3dlciBzdGF0ZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgKGFuZCBpbmRlcGVuZGVudGx5IG9mCithbnkgb3RoZXIgcG93ZXIgbWFuYWdlbWVudCBhY3Rpdml0eSkuIAorCisKK01ldGhvZHMKKworVGhlIG1ldGhvZHMgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIGRldmljZXMgcmVzaWRlIGluIHN0cnVjdCBidXNfdHlwZTogCisKK3N0cnVjdCBidXNfdHlwZSB7CisgICAgICAgLi4uCisgICAgICAgaW50ICAgICAgICAgICAgICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyAgICAgICBpbnQgICAgICAgICAgICAgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworfTsKKworRWFjaCBidXMgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGltcGxlbWVudGluZyB0aGVzZSBtZXRob2RzLCB0cmFuc2xhdGluZwordGhlIGNhbGwgaW50byBhIGJ1cy1zcGVjaWZpYyByZXF1ZXN0IGFuZCBmb3J3YXJkaW5nIHRoZSBjYWxsIHRvIHRoZQorYnVzLXNwZWNpZmljIGRyaXZlcnMuIEZvciBleGFtcGxlLCBQQ0kgZHJpdmVycyBpbXBsZW1lbnQgc3VzcGVuZCgpIGFuZAorcmVzdW1lKCkgbWV0aG9kcyBpbiBzdHJ1Y3QgcGNpX2RyaXZlci4gVGhlIFBDSSBjb3JlIGlzIHNpbXBseQorcmVzcG9uc2libGUgZm9yIHRyYW5zbGF0aW5nIHRoZSBwb2ludGVycyB0byBQQ0ktc3BlY2lmaWMgb25lcyBhbmQKK2NhbGxpbmcgdGhlIGxvdy1sZXZlbCBkcml2ZXIuCisKK1RoaXMgaXMgZG9uZSB0byBhKSBlYXNlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwb3dlciBtYW5hZ2VtZW50IG1ldGhvZHMKK2FuZCBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgUE0gY29kZSBpbiB2YXJpb3VzIGJ1cyBkcml2ZXJzOyBiKSBhbGxvdworYnVzZXMgdG8gaW1wbGVtZW50IGdlbmVyaWMgYW5kIGRlZmF1bHQgUE0gcm91dGluZXMgZm9yIGRldmljZXMsIGFuZCBjKQorbWFrZSB0aGUgZmxvdyBvZiBleGVjdXRpb24gb2J2aW91cyB0byB0aGUgcmVhZGVyLiAKKworCitTeXN0ZW0gUG93ZXIgTWFuYWdlbWVudAorCitXaGVuIHRoZSBzeXN0ZW0gZW50ZXJzIGEgbG93LXBvd2VyIHN0YXRlLCB0aGUgZGV2aWNlIHRyZWUgaXMgd2Fsa2VkIGluCithIGRlcHRoLWZpcnN0IGZhc2hpb24gdG8gdHJhbnNpdGlvbiBlYWNoIGRldmljZSBpbnRvIGEgbG93LXBvd2VyCitzdGF0ZS4gVGhlIG9yZGVyaW5nIG9mIHRoZSBkZXZpY2UgdHJlZSBpcyBndWFyYW50ZWVkIGJ5IHRoZSBvcmRlciBpbgord2hpY2ggZGV2aWNlcyBnZXQgcmVnaXN0ZXJlZCAtIGNoaWxkcmVuIGFyZSBuZXZlciByZWdpc3RlcmVkIGJlZm9yZQordGhlaXIgYW5jZXN0b3JzLCBhbmQgZGV2aWNlcyBhcmUgcGxhY2VkIGF0IHRoZSBiYWNrIG9mIHRoZSBsaXN0IHdoZW4KK3JlZ2lzdGVyZWQuIEJ5IHdhbGtpbmcgdGhlIGxpc3QgaW4gcmV2ZXJzZSBvcmRlciwgd2UgYXJlIGd1YXJhbnRlZWQgdG8KK3N1c3BlbmQgZGV2aWNlcyBpbiB0aGUgcHJvcGVyIG9yZGVyLiAKKworRGV2aWNlcyBhcmUgc3VzcGVuZGVkIG9uY2Ugd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIERyaXZlcnMgYXJlCitleHBlY3RlZCB0byBzdG9wIEkvTyB0cmFuc2FjdGlvbnMsIHNhdmUgZGV2aWNlIHN0YXRlLCBhbmQgcGxhY2UgdGhlCitkZXZpY2UgaW50byBhIGxvdy1wb3dlciBzdGF0ZS4gRHJpdmVycyBtYXkgc2xlZXAsIGFsbG9jYXRlIG1lbW9yeSwKK2V0Yy4gYXQgd2lsbC4gCisKK1NvbWUgZGV2aWNlcyBhcmUgYnJva2VuIGFuZCB3aWxsIGluZXZpdGFibHkgaGF2ZSBwcm9ibGVtcyBwb3dlcmluZworZG93biBvciBkaXNhYmxpbmcgdGhlbXNlbHZlcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gRm9yIHRoZXNlCitzcGVjaWFsIGNhc2VzLCB0aGV5IG1heSByZXR1cm4gLUVBR0FJTi4gVGhpcyB3aWxsIHB1dCB0aGUgZGV2aWNlIG9uIGEKK2xpc3QgdG8gYmUgdGFrZW4gY2FyZSBvZiBsYXRlci4gV2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYmVmb3JlCit3ZSBlbnRlciB0aGUgbG93LXBvd2VyIHN0YXRlLCB0aGVpciBkcml2ZXJzIGFyZSBjYWxsZWQgYWdhaW4gdG8gcHV0Cit0aGVpciBkZXZpY2UgdG8gc2xlZXAuIAorCitPbiByZXN1bWUsIHRoZSBkZXZpY2VzIHRoYXQgcmV0dXJuZWQgLUVBR0FJTiB3aWxsIGJlIGNhbGxlZCB0byBwb3dlcgordGhlbXNlbHZlcyBiYWNrIG9uIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gT25jZSBpbnRlcnJ1cHRzIGhhdmUgYmVlbgorcmUtZW5hYmxlZCwgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlcnMgd2lsbCBiZSBjYWxsZWQgdG8gcmVzdW1lIHRoZWlyCitkZXZpY2VzLiBPbiByZXN1bWUsIGEgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBwb3dlcmluZyBiYWNrIG9uIGVhY2gKK2RldmljZSwgcmVzdG9yaW5nIHN0YXRlLCBhbmQgcmUtZW5hYmxpbmcgSS9PIHRyYW5zYWN0aW9ucyBmb3IgdGhhdAorZGV2aWNlLiAKKworU3lzdGVtIGRldmljZXMgZm9sbG93IGEgc2xpZ2h0bHkgZGlmZmVyZW50IEFQSSwgd2hpY2ggY2FuIGJlIGZvdW5kIGluCisKKwlpbmNsdWRlL2xpbnV4L3N5c2Rldi5oCisJZHJpdmVycy9iYXNlL3N5cy5jCisKK1N5c3RlbSBkZXZpY2VzIHdpbGwgb25seSBiZSBzdXNwZW5kZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBhbmQKK2FmdGVyIGFsbCBvdGhlciBkZXZpY2VzIGhhdmUgYmVlbiBzdXNwZW5kZWQuIE9uIHJlc3VtZSwgdGhleSB3aWxsIGJlCityZXN1bWVkIGJlZm9yZSBhbnkgb3RoZXIgZGV2aWNlcywgYW5kIGFsc28gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCisKK1J1bnRpbWUgUG93ZXIgTWFuYWdlbWVudAorCitNYW55IGRldmljZXMgYXJlIGFibGUgdG8gZHluYW1pY2FsbHkgcG93ZXIgZG93biB3aGlsZSB0aGUgc3lzdGVtIGlzCitzdGlsbCBydW5uaW5nLiBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBkZXZpY2VzIHRoYXQgYXJlIG5vdCBiZWluZwordXNlZCwgYW5kIGNhbiBvZmZlciBzaWduaWZpY2FudCBwb3dlciBzYXZpbmdzIG9uIGEgcnVubmluZyBzeXN0ZW0uIAorCitJbiBlYWNoIGRldmljZSdzIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSAncG93ZXInIGRpcmVjdG9yeSwgd2hpY2gKK2NvbnRhaW5zIGF0IGxlYXN0IGEgJ3N0YXRlJyBmaWxlLiBSZWFkaW5nIGZyb20gdGhpcyBmaWxlIGRpc3BsYXlzIHdoYXQKK3Bvd2VyIHN0YXRlIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGluLiBXcml0aW5nIHRvIHRoaXMgZmlsZSBpbml0aWF0ZXMKK2EgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIHBvd2VyIHN0YXRlLCB3aGljaCBtdXN0IGJlIGEgZGVjaW1hbCBpbgordGhlIHJhbmdlIDEtMywgaW5jbHVzaXZlOyBvciAwIGZvciAnT24nLgorCitUaGUgUE0gY29yZSB3aWxsIGNhbGwgdGhlIC0+c3VzcGVuZCgpIG1ldGhvZCBpbiB0aGUgYnVzX3R5cGUgb2JqZWN0Cit0aGF0IHRoZSBkZXZpY2UgYmVsb25ncyB0byBpZiB0aGUgc3BlY2lmaWVkIHN0YXRlIGlzIG5vdCAwLCBvcgorLT5yZXN1bWUoKSBpZiBpdCBpcy4gCisKK05vdGhpbmcgd2lsbCBoYXBwZW4gaWYgdGhlIHNwZWNpZmllZCBzdGF0ZSBpcyB0aGUgc2FtZSBzdGF0ZSB0aGUKK2RldmljZSBpcyBjdXJyZW50bHkgaW4uIAorCitJZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgaW4gYSBsb3ctcG93ZXIgc3RhdGUsIGFuZCB0aGUgc3BlY2lmaWVkIHN0YXRlCitpcyBhbm90aGVyLCBidXQgZGlmZmVyZW50LCBsb3ctcG93ZXIgc3RhdGUsIHRoZSAtPnJlc3VtZSgpIG1ldGhvZCB3aWxsCitmaXJzdCBiZSBjYWxsZWQgdG8gcG93ZXIgdGhlIGRldmljZSBiYWNrIG9uLCB0aGVuIC0+c3VzcGVuZCgpIHdpbGwgYmUKK2NhbGxlZCBhZ2FpbiB3aXRoIHRoZSBuZXcgc3RhdGUuIAorCitUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBzYXZpbmcgdGhlIHdvcmtpbmcgc3RhdGUgb2YgdGhlIGRldmljZQorYW5kIHB1dHRpbmcgaXQgaW50byB0aGUgbG93LXBvd2VyIHN0YXRlIHNwZWNpZmllZC4gSWYgdGhpcyB3YXMKK3N1Y2Nlc3NmdWwsIGl0IHJldHVybnMgMCwgYW5kIHRoZSBkZXZpY2UncyBwb3dlcl9zdGF0ZSBmaWVsZCBpcwordXBkYXRlZC4gCisKK1RoZSBkcml2ZXIgbXVzdCB0YWtlIGNhcmUgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhYmxlIHRvCitwcm9wZXJseSByZXN1bWUgdGhlIGRldmljZSwgaW5jbHVkaW5nIGFsbCBzdGVwIG9mIHJlaW5pdGlhbGl6YXRpb24KK25lY2Vzc2FyeS4gKFRoaXMgaXMgdGhlIGhhcmRlc3QgcGFydCwgYW5kIHRoZSBvbmUgbW9zdCBwcm90ZWN0ZWQgYnkKK05EQSdkIGRvY3VtZW50cykuIAorCitUaGUgZHJpdmVyIG11c3QgYWxzbyB0YWtlIGNhcmUgbm90IHRvIHN1c3BlbmQgYSBkZXZpY2UgdGhhdCBpcworY3VycmVudGx5IGluIHVzZS4gSXQgaXMgdGhlaXIgcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSB0aGVpciBvd24KK2V4Y2x1c2lvbiBtZWNoYW5pc21zLgorCitUaGUgcnVudGltZSBwb3dlciB0cmFuc2l0aW9uIGhhcHBlbnMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIElmIGEKK2RldmljZSBjYW5ub3Qgc3VwcG9ydCBiZWluZyBwb3dlcmVkIGRvd24gd2l0aCBpbnRlcnJ1cHRzLCBpdCBtYXkKK3JldHVybiAtRUFHQUlOIChhcyBpdCB3b3VsZCBkdXJpbmcgYSBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudAordHJhbnNpdGlvbiksICBidXQgaXQgd2lsbCBfbm90XyBiZSBjYWxsZWQgYWdhaW4sIGFuZCB0aGUgdHJhbnNhY3Rpb24KK3dpbGwgZmFpbC4KKworVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBrbm93IHdoYXQgc3RhdGVzIGEgZGV2aWNlIG9yIGRyaXZlcgorc3VwcG9ydHMgYSBwcmlvcmkuIFRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gCisKK3BtX21lc3NhZ2VfdCBtZWFuaW5nCisKK3BtX21lc3NhZ2VfdCBoYXMgdHdvIGZpZWxkcy4gZXZlbnQgKCJtYWpvciIpLCBhbmQgZmxhZ3MuICBJZiBkcml2ZXIKK2RvZXMgbm90IGtub3cgZXZlbnQgY29kZSwgaXQgYWJvcnRzIHRoZSByZXF1ZXN0LCByZXR1cm5pbmcgZXJyb3IuIFNvbWUKK2RyaXZlcnMgbWF5IG5lZWQgdG8gZGVhbCB3aXRoIHNwZWNpYWwgY2FzZXMgYmFzZWQgb24gdGhlIGFjdHVhbCB0eXBlCitvZiBzdXNwZW5kIG9wZXJhdGlvbiBiZWluZyBkb25lIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFRoaXMgaXMgd2h5Cit0aGVyZSBhcmUgZmxhZ3MuCisKK0V2ZW50IGNvZGVzIGFyZToKKworT04gLS0gbm8gbmVlZCB0byBkbyBhbnl0aGluZyBleGNlcHQgc3BlY2lhbCBjYXNlcyBsaWtlIGJyb2tlbgorSFcuCisKKyMgTk9USUZJQ0FUSU9OIC0tIHByZXR0eSBtdWNoIHNhbWUgYXMgT04/CisKK0ZSRUVaRSAtLSBzdG9wIERNQSBhbmQgaW50ZXJydXB0cywgYW5kIGJlIHByZXBhcmVkIHRvIHJlaW5pdCBIVyBmcm9tCitzY3JhdGNoLiBUaGF0IHByb2JhYmx5IG1lYW5zIHN0b3AgYWNjZXB0aW5nIHVwc3RyZWFtIHJlcXVlc3RzLCB0aGUKK2FjdHVhbCBwb2xpY3kgb2Ygd2hhdCB0byBkbyB3aXRoIHRoZW0gYmVlaW5nIHNwZWNpZmljIHRvIGEgZ2l2ZW4KK2RyaXZlci4gSXQncyBhY2NlcHRhYmxlIGZvciBhIG5ldHdvcmsgZHJpdmVyIHRvIGp1c3QgZHJvcCBwYWNrZXRzCit3aGlsZSBhIGJsb2NrIGRyaXZlciBpcyBleHBlY3RlZCB0byBibG9jayB0aGUgcXVldWUgc28gbm8gcmVxdWVzdCBpcworbG9zdC4gKFVzZSBJREUgYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gZG8gdGhhdCkuIEZSRUVaRSByZXF1aXJlcyBubworcG93ZXIgc3RhdGUgY2hhbmdlLCBhbmQgaXQncyBleHBlY3RlZCBmb3IgZHJpdmVycyB0byBiZSBhYmxlIHRvCitxdWlja2x5IHRyYW5zaXRpb24gYmFjayB0byBvcGVyYXRpbmcgc3RhdGUuCisKK1NVU1BFTkQgLS0gbGlrZSBGUkVFWkUsIGJ1dCBhbHNvIHB1dCBoYXJkd2FyZSBpbnRvIGxvdy1wb3dlciBzdGF0ZS4gSWYKK3RoZXJlJ3MgbmVlZCB0byBkaXN0aW5ndWlzaCBzZXZlcmFsIGxldmVscyBvZiBzbGVlcCwgYWRkaXRpb25hbCBmbGFnCitpcyBwcm9iYWJseSBiZXN0IHdheSB0byBkbyB0aGF0LgorCitUcmFuc2l0aW9ucyBhcmUgb25seSBmcm9tIGEgcmVzdW1lZCBzdGF0ZSB0byBhIHN1c3BlbmRlZCBzdGF0ZSwgbmV2ZXIKK2JldHdlZW4gMiBzdXNwZW5kZWQgc3RhdGVzLiAoT04gLT4gRlJFRVpFIG9yIE9OIC0+IFNVU1BFTkQgY2FuIGhhcHBlbiwKK0ZSRUVaRSAtPiBTVVNQRU5EIG9yIFNVU1BFTkQgLT4gRlJFRVpFIGNhbiBub3QpLgorCitBbGwgZXZlbnRzIGFyZToKKworW05PVEUgTk9URSBOT1RFOiBJZiB5b3UgYXJlIGRyaXZlciBhdXRob3IsIHlvdSBzaG91bGQgbm90IGNhcmU7IHlvdQorc2hvdWxkIG9ubHkgbG9vayBhdCBldmVudCwgYW5kIGlnbm9yZSBmbGFncy5dCisKKyNQcmVwYXJlIGZvciBzdXNwZW5kIC0tIHVzZXJsYW5kIGlzIHN0aWxsIHJ1bm5pbmcgYnV0IHdlIGFyZSBnb2luZyB0bworI2VudGVyIHN1c3BlbmQgc3RhdGUuIFRoaXMgZ2l2ZXMgZHJpdmVycyBjaGFuY2UgdG8gbG9hZCBmaXJtd2FyZSBmcm9tCisjZGlzayBhbmQgc3RvcmUgaXQgaW4gbWVtb3J5LCBvciBkbyBvdGhlciBhY3Rpdml0aWVzIHRhaHQgcmVxdWlyZQorI29wZXJhdGluZyB1c2VybGFuZCwgYWJpbGl0eSB0byBrbWFsbG9jIEdGUF9LRVJORUwsIGV0Yy4uLiBBbGwgb2YgdGhlc2UKKyNhcmUgZm9yYmlkZW4gb25jZSB0aGUgc3VzcGVuZCBkYW5jZSBpcyBzdGFydGVkLi4gZXZlbnQgPSBPTiwgZmxhZ3MgPQorI1BSRVBBUkVfVE9fU1VTUEVORAorCitBcG0gc3RhbmRieSAtLSBwcmVwYXJlIGZvciBBUE0gZXZlbnQuIFF1aWVzY2UgZGV2aWNlcyB0byBtYWtlIGxpZmUKK2Vhc2llciBmb3IgQVBNIEJJT1MuIGV2ZW50ID0gRlJFRVpFLCBmbGFncyA9IEFQTV9TVEFOREJZCisKK0FwbSBzdXNwZW5kIC0tIHNhbWUgYXMgQVBNX1NUQU5EQlksIGJ1dCBpdCB3ZSBzaG91bGQgcHJvYmFibHkgYXZvaWQKK3NwaW5uaW5nIGRvd24gZGlza3MuIGV2ZW50ID0gRlJFRVpFLCBmbGFncyA9IEFQTV9TVVNQRU5ECisKK1N5c3RlbSBoYWx0LCByZWJvb3QgLS0gcXVpZXNjZSBkZXZpY2VzIHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yIEJJT1MuIGV2ZW50Cis9IEZSRUVaRSwgZmxhZ3MgPSBTWVNURU1fSEFMVCBvciBTWVNURU1fUkVCT09UCisKK1N5c3RlbSBzaHV0ZG93biAtLSBhdCBsZWFzdCBkaXNrcyBuZWVkIHRvIGJlIHNwdW4gZG93biwgb3IgZGF0YSBtYXkgYmUKK2xvc3QuIFF1aWVzY2UgZGV2aWNlcywganVzdCB0byBtYWtlIGxpZmUgZWFzaWVyIGZvciBCSU9TLiBldmVudCA9CitGUkVFWkUsIGZsYWdzID0gU1lTVEVNX1NIVVRET1dOCisKK0tleGVjICAgIC0tIHR1cm4gb2ZmIERNQXMgYW5kIHB1dCBoYXJkd2FyZSBpbnRvIHNvbWUgc3RhdGUgd2hlcmUgbmV3CitrZXJuZWwgY2FuIHRha2Ugb3Zlci4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gS0VYRUMKKworUG93ZXJkb3duIGF0IGVuZCBvZiBzd3N1c3AgLS0gdmVyeSBzaW1pbGFyIHRvIFNZU1RFTV9TSFVURE9XTiwgZXhjZXB0IHdha2UKK21heSBuZWVkIHRvIGJlIGVuYWJsZWQgb24gc29tZSBkZXZpY2VzLiBUaGlzIGFjdHVhbGx5IGhhcyBhdCBsZWFzdCAzCitzdWJ0eXBlcywgc3lzdGVtIGNhbiByZWJvb3QsIGVudGVyIFM0IGFuZCBlbnRlciBTNSBhdCB0aGUgZW5kIG9mCitzd3N1c3AuIGV2ZW50ID0gRlJFRVpFLCBmbGFncyA9IFNXU1VTUCBhbmQgb25lIG9mIFNZU1RFTV9SRUJPT1QsCitTWVNURU1fU0hVVERPV04sIFNZU1RFTV9TNAorCitTdXNwZW5kIHRvIHJhbSAgLS0gcHV0IGRldmljZXMgaW50byBsb3cgcG93ZXIgc3RhdGUuIGV2ZW50ID0gU1VTUEVORCwKK2ZsYWdzID0gU1VTUEVORF9UT19SQU0KKworRnJlZXplIGZvciBzd3N1c3Agc25hcHNob3QgLS0gc3RvcCBETUEgYW5kIGludGVycnVwdHMuIE5vIG5lZWQgdG8gcHV0CitkZXZpY2VzIGludG8gbG93IHBvd2VyIG1vZGUsIGJ1dCB5b3UgbXVzdCBiZSBhYmxlIHRvIHJlaW5pdGlhbGl6ZQorZGV2aWNlIGZyb20gc2NyYXRjaCBpbiByZXN1bWUgbWV0aG9kLiBUaGlzIGhhcyB0d28gZmxhdm9ycywgaXRzIGRvbmUKK29uY2Ugb24gc3VzcGVuZGluZyBrZXJuZWwsIG9uY2Ugb24gcmVzdW1pbmcga2VybmVsLiBldmVudCA9IEZSRUVaRSwKK2ZsYWdzID0gRFVSSU5HX1NVU1BFTkQgb3IgRFVSSU5HX1JFU1VNRQorCitEZXZpY2UgZGV0YWNoIHJlcXVlc3RlZCBmcm9tIC9zeXMgLS0gZGVpbml0aWFsaXplIGRldmljZTsgcHJvYWJseSBzYW1lIGFzCitTWVNURU1fU0hVVERPV04sIEkgZG8gbm90IHVuZGVyc3RhbmQgdGhpcyBvbmUgdG9vIG11Y2guIHByb2JhYmx5IGV2ZW50Cis9IEZSRUVaRSwgZmxhZ3MgPSBERVZfREVUQUNILgorCisjVGhlc2UgYXJlIG5vdCByZWFsbHkgZXZlbnRzIHNlbnQ6CisjCisjU3lzdGVtIGZ1bGx5IG9uIC0tIGRldmljZSBpcyB3b3JraW5nIG5vcm1hbGx5OyB0aGlzIGlzIHByb2JhYmx5IG5ldmVyCisjcGFzc2VkIHRvIHN1c3BlbmQoKSBtZXRob2QuLi4gZXZlbnQgPSBPTiwgZmxhZ3MgPSAwCisjCisjUmVhZHkgYWZ0ZXIgcmVzdW1lIC0tIHVzZXJsYW5kIGlzIG5vdyBydW5uaW5nLCBhZ2Fpbi4gVGltZSB0byBmcmVlIGFueQorI21lbW9yeSB5b3UgYXRlIGR1cmluZyBwcmVwYXJlIHRvIHN1c3BlbmQuLi4gZXZlbnQgPSBPTiwgZmxhZ3MgPQorI1JFQURZX0FGVEVSX1JFU1VNRQorIworCitEcml2ZXIgRGV0YWNoIFBvd2VyIE1hbmFnZW1lbnQKKworVGhlIGtlcm5lbCBub3cgc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gcGxhY2UgYSBkZXZpY2UgaW4gYSBsb3ctcG93ZXIKK3N0YXRlIHdoZW4gaXQgaXMgZGV0YWNoZWQgZnJvbSBpdHMgZHJpdmVyLCB3aGljaCBoYXBwZW5zIHdoZW4gaXRzCittb2R1bGUgaXMgcmVtb3ZlZC4gCisKK0VhY2ggZGV2aWNlIGNvbnRhaW5zIGEgJ2RldGFjaF9zdGF0ZScgZmlsZSBpbiBpdHMgc3lzZnMgZGlyZWN0b3J5Cit3aGljaCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoaXMgc3RhdGUuIFJlYWRpbmcgZnJvbSB0aGlzIGZpbGUKK2Rpc3BsYXlzIHdoYXQgdGhlIGN1cnJlbnQgZGV0YWNoIHN0YXRlIGlzIHNldCB0by4gVGhpcyBpcyAwIChPbikgYnkKK2RlZmF1bHQuIEEgdXNlciBtYXkgd3JpdGUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvIHRoaXMgZmlsZSBpbiB0aGUKK3JhbmdlIG9mIDEtNCBpbmNsdXNpdmUuIAorCitBIHZhbHVlIG9mIDEtMyB3aWxsIGluZGljYXRlIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGF0Citsb3ctcG93ZXIgc3RhdGUsIHdoaWNoIHdpbGwgY2F1c2UgLT5zdXNwZW5kKCkgdG8gYmUgY2FsbGVkIGZvciB0aGF0CitkZXZpY2UuIEEgdmFsdWUgb2YgNCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIHNob3VsZCBiZSBzaHV0ZG93biwgc28KKy0+c2h1dGRvd24oKSB3aWxsIGJlIGNhbGxlZCBmb3IgdGhhdCBkZXZpY2UuIAorCitUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWluaXRpYWxpemluZyB0aGUgZGV2aWNlIHdoZW4gdGhlCittb2R1bGUgaXMgcmUtaW5zZXJ0ZWQgZHVyaW5nIGl0J3MgLT5wcm9iZSgpIChvciBlcXVpdmFsZW50KSBtZXRob2QuIAorVGhlIGRyaXZlciBjb3JlIHdpbGwgbm90IGNhbGwgYW55IGV4dHJhIGZ1bmN0aW9ucyB3aGVuIGJpbmRpbmcgdGhlCitkZXZpY2UgdG8gdGhlIGRyaXZlci4gCisKK3BtX21lc3NhZ2VfdCBtZWFuaW5nCisKK3BtX21lc3NhZ2VfdCBoYXMgdHdvIGZpZWxkcy4gZXZlbnQgKCJtYWpvciIpLCBhbmQgZmxhZ3MuICBJZiBkcml2ZXIKK2RvZXMgbm90IGtub3cgZXZlbnQgY29kZSwgaXQgYWJvcnRzIHRoZSByZXF1ZXN0LCByZXR1cm5pbmcgZXJyb3IuIFNvbWUKK2RyaXZlcnMgbWF5IG5lZWQgdG8gZGVhbCB3aXRoIHNwZWNpYWwgY2FzZXMgYmFzZWQgb24gdGhlIGFjdHVhbCB0eXBlCitvZiBzdXNwZW5kIG9wZXJhdGlvbiBiZWluZyBkb25lIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFRoaXMgaXMgd2h5Cit0aGVyZSBhcmUgZmxhZ3MuCisKK0V2ZW50IGNvZGVzIGFyZToKKworT04gLS0gbm8gbmVlZCB0byBkbyBhbnl0aGluZyBleGNlcHQgc3BlY2lhbCBjYXNlcyBsaWtlIGJyb2tlbgorSFcuCisKKyMgTk9USUZJQ0FUSU9OIC0tIHByZXR0eSBtdWNoIHNhbWUgYXMgT04/CisKK0ZSRUVaRSAtLSBzdG9wIERNQSBhbmQgaW50ZXJydXB0cywgYW5kIGJlIHByZXBhcmVkIHRvIHJlaW5pdCBIVyBmcm9tCitzY3JhdGNoLiBUaGF0IHByb2JhYmx5IG1lYW5zIHN0b3AgYWNjZXB0aW5nIHVwc3RyZWFtIHJlcXVlc3RzLCB0aGUKK2FjdHVhbCBwb2xpY3kgb2Ygd2hhdCB0byBkbyB3aXRoIHRoZW0gYmVpbmcgc3BlY2lmaWMgdG8gYSBnaXZlbgorZHJpdmVyLiBJdCdzIGFjY2VwdGFibGUgZm9yIGEgbmV0d29yayBkcml2ZXIgdG8ganVzdCBkcm9wIHBhY2tldHMKK3doaWxlIGEgYmxvY2sgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGJsb2NrIHRoZSBxdWV1ZSBzbyBubyByZXF1ZXN0IGlzCitsb3N0LiAoVXNlIElERSBhcyBhbiBleGFtcGxlIG9uIGhvdyB0byBkbyB0aGF0KS4gRlJFRVpFIHJlcXVpcmVzIG5vCitwb3dlciBzdGF0ZSBjaGFuZ2UsIGFuZCBpdCdzIGV4cGVjdGVkIGZvciBkcml2ZXJzIHRvIGJlIGFibGUgdG8KK3F1aWNrbHkgdHJhbnNpdGlvbiBiYWNrIHRvIG9wZXJhdGluZyBzdGF0ZS4KKworU1VTUEVORCAtLSBsaWtlIEZSRUVaRSwgYnV0IGFsc28gcHV0IGhhcmR3YXJlIGludG8gbG93LXBvd2VyIHN0YXRlLiBJZgordGhlcmUncyBuZWVkIHRvIGRpc3Rpbmd1aXNoIHNldmVyYWwgbGV2ZWxzIG9mIHNsZWVwLCBhZGRpdGlvbmFsIGZsYWcKK2lzIHByb2JhYmx5IGJlc3Qgd2F5IHRvIGRvIHRoYXQuCisKK1RyYW5zaXRpb25zIGFyZSBvbmx5IGZyb20gYSByZXN1bWVkIHN0YXRlIHRvIGEgc3VzcGVuZGVkIHN0YXRlLCBuZXZlcgorYmV0d2VlbiAyIHN1c3BlbmRlZCBzdGF0ZXMuIChPTiAtPiBGUkVFWkUgb3IgT04gLT4gU1VTUEVORCBjYW4gaGFwcGVuLAorRlJFRVpFIC0+IFNVU1BFTkQgb3IgU1VTUEVORCAtPiBGUkVFWkUgY2FuIG5vdCkuCisKK0FsbCBldmVudHMgYXJlOgorCitbTk9URSBOT1RFIE5PVEU6IElmIHlvdSBhcmUgZHJpdmVyIGF1dGhvciwgeW91IHNob3VsZCBub3QgY2FyZTsgeW91CitzaG91bGQgb25seSBsb29rIGF0IGV2ZW50LCBhbmQgaWdub3JlIGZsYWdzLl0KKworI1ByZXBhcmUgZm9yIHN1c3BlbmQgLS0gdXNlcmxhbmQgaXMgc3RpbGwgcnVubmluZyBidXQgd2UgYXJlIGdvaW5nIHRvCisjZW50ZXIgc3VzcGVuZCBzdGF0ZS4gVGhpcyBnaXZlcyBkcml2ZXJzIGNoYW5jZSB0byBsb2FkIGZpcm13YXJlIGZyb20KKyNkaXNrIGFuZCBzdG9yZSBpdCBpbiBtZW1vcnksIG9yIGRvIG90aGVyIGFjdGl2aXRpZXMgdGFodCByZXF1aXJlCisjb3BlcmF0aW5nIHVzZXJsYW5kLCBhYmlsaXR5IHRvIGttYWxsb2MgR0ZQX0tFUk5FTCwgZXRjLi4uIEFsbCBvZiB0aGVzZQorI2FyZSBmb3JiaWRlbiBvbmNlIHRoZSBzdXNwZW5kIGRhbmNlIGlzIHN0YXJ0ZWQuLiBldmVudCA9IE9OLCBmbGFncyA9CisjUFJFUEFSRV9UT19TVVNQRU5ECisKK0FwbSBzdGFuZGJ5IC0tIHByZXBhcmUgZm9yIEFQTSBldmVudC4gUXVpZXNjZSBkZXZpY2VzIHRvIG1ha2UgbGlmZQorZWFzaWVyIGZvciBBUE0gQklPUy4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gQVBNX1NUQU5EQlkKKworQXBtIHN1c3BlbmQgLS0gc2FtZSBhcyBBUE1fU1RBTkRCWSwgYnV0IGl0IHdlIHNob3VsZCBwcm9iYWJseSBhdm9pZAorc3Bpbm5pbmcgZG93biBkaXNrcy4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gQVBNX1NVU1BFTkQKKworU3lzdGVtIGhhbHQsIHJlYm9vdCAtLSBxdWllc2NlIGRldmljZXMgdG8gbWFrZSBsaWZlIGVhc2llciBmb3IgQklPUy4gZXZlbnQKKz0gRlJFRVpFLCBmbGFncyA9IFNZU1RFTV9IQUxUIG9yIFNZU1RFTV9SRUJPT1QKKworU3lzdGVtIHNodXRkb3duIC0tIGF0IGxlYXN0IGRpc2tzIG5lZWQgdG8gYmUgc3B1biBkb3duLCBvciBkYXRhIG1heSBiZQorbG9zdC4gUXVpZXNjZSBkZXZpY2VzLCBqdXN0IHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yIEJJT1MuIGV2ZW50ID0KK0ZSRUVaRSwgZmxhZ3MgPSBTWVNURU1fU0hVVERPV04KKworS2V4ZWMgICAgLS0gdHVybiBvZmYgRE1BcyBhbmQgcHV0IGhhcmR3YXJlIGludG8gc29tZSBzdGF0ZSB3aGVyZSBuZXcKK2tlcm5lbCBjYW4gdGFrZSBvdmVyLiBldmVudCA9IEZSRUVaRSwgZmxhZ3MgPSBLRVhFQworCitQb3dlcmRvd24gYXQgZW5kIG9mIHN3c3VzcCAtLSB2ZXJ5IHNpbWlsYXIgdG8gU1lTVEVNX1NIVVRET1dOLCBleGNlcHQgd2FrZQorbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCBvbiBzb21lIGRldmljZXMuIFRoaXMgYWN0dWFsbHkgaGFzIGF0IGxlYXN0IDMKK3N1YnR5cGVzLCBzeXN0ZW0gY2FuIHJlYm9vdCwgZW50ZXIgUzQgYW5kIGVudGVyIFM1IGF0IHRoZSBlbmQgb2YKK3N3c3VzcC4gZXZlbnQgPSBGUkVFWkUsIGZsYWdzID0gU1dTVVNQIGFuZCBvbmUgb2YgU1lTVEVNX1JFQk9PVCwKK1NZU1RFTV9TSFVURE9XTiwgU1lTVEVNX1M0CisKK1N1c3BlbmQgdG8gcmFtICAtLSBwdXQgZGV2aWNlcyBpbnRvIGxvdyBwb3dlciBzdGF0ZS4gZXZlbnQgPSBTVVNQRU5ELAorZmxhZ3MgPSBTVVNQRU5EX1RPX1JBTQorCitGcmVlemUgZm9yIHN3c3VzcCBzbmFwc2hvdCAtLSBzdG9wIERNQSBhbmQgaW50ZXJydXB0cy4gTm8gbmVlZCB0byBwdXQKK2RldmljZXMgaW50byBsb3cgcG93ZXIgbW9kZSwgYnV0IHlvdSBtdXN0IGJlIGFibGUgdG8gcmVpbml0aWFsaXplCitkZXZpY2UgZnJvbSBzY3JhdGNoIGluIHJlc3VtZSBtZXRob2QuIFRoaXMgaGFzIHR3byBmbGF2b3JzLCBpdHMgZG9uZQorb25jZSBvbiBzdXNwZW5kaW5nIGtlcm5lbCwgb25jZSBvbiByZXN1bWluZyBrZXJuZWwuIGV2ZW50ID0gRlJFRVpFLAorZmxhZ3MgPSBEVVJJTkdfU1VTUEVORCBvciBEVVJJTkdfUkVTVU1FCisKK0RldmljZSBkZXRhY2ggcmVxdWVzdGVkIGZyb20gL3N5cyAtLSBkZWluaXRpYWxpemUgZGV2aWNlOyBwcm9hYmx5IHNhbWUgYXMKK1NZU1RFTV9TSFVURE9XTiwgSSBkbyBub3QgdW5kZXJzdGFuZCB0aGlzIG9uZSB0b28gbXVjaC4gcHJvYmFibHkgZXZlbnQKKz0gRlJFRVpFLCBmbGFncyA9IERFVl9ERVRBQ0guCisKKyNUaGVzZSBhcmUgbm90IHJlYWxseSBldmVudHMgc2VudDoKKyMKKyNTeXN0ZW0gZnVsbHkgb24gLS0gZGV2aWNlIGlzIHdvcmtpbmcgbm9ybWFsbHk7IHRoaXMgaXMgcHJvYmFibHkgbmV2ZXIKKyNwYXNzZWQgdG8gc3VzcGVuZCgpIG1ldGhvZC4uLiBldmVudCA9IE9OLCBmbGFncyA9IDAKKyMKKyNSZWFkeSBhZnRlciByZXN1bWUgLS0gdXNlcmxhbmQgaXMgbm93IHJ1bm5pbmcsIGFnYWluLiBUaW1lIHRvIGZyZWUgYW55CisjbWVtb3J5IHlvdSBhdGUgZHVyaW5nIHByZXBhcmUgdG8gc3VzcGVuZC4uLiBldmVudCA9IE9OLCBmbGFncyA9CisjUkVBRFlfQUZURVJfUkVTVU1FCisjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ludGVyZmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ludGVyZmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlYmRhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvaW50ZXJmYWNlLnR4dApAQCAtMCwwICsxLDQzIEBACitQb3dlciBNYW5hZ2VtZW50IEludGVyZmFjZQorCisKK1RoZSBwb3dlciBtYW5hZ2VtZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhIHVuaWZpZWQgc3lzZnMgaW50ZXJmYWNlIHRvIAordXNlcnNwYWNlLCByZWdhcmRsZXNzIG9mIHdoYXQgYXJjaGl0ZWN0dXJlIG9yIHBsYXRmb3JtIG9uZSBpcworcnVubmluZy4gVGhlIGludGVyZmFjZSBleGlzdHMgaW4gL3N5cy9wb3dlci8gZGlyZWN0b3J5IChhc3N1bWluZyBzeXNmcworaXMgbW91bnRlZCBhdCAvc3lzKS4gCisKKy9zeXMvcG93ZXIvc3RhdGUgY29udHJvbHMgc3lzdGVtIHBvd2VyIHN0YXRlLiBSZWFkaW5nIGZyb20gdGhpcyBmaWxlCityZXR1cm5zIHdoYXQgc3RhdGVzIGFyZSBzdXBwb3J0ZWQsIHdoaWNoIGlzIGhhcmQtY29kZWQgdG8gJ3N0YW5kYnknCisoUG93ZXItT24gU3VzcGVuZCksICdtZW0nIChTdXNwZW5kLXRvLVJBTSksIGFuZCAnZGlzaycKKyhTdXNwZW5kLXRvLURpc2spLiAKKworV3JpdGluZyB0byB0aGlzIGZpbGUgb25lIG9mIHRob3NlIHN0cmluZ3MgY2F1c2VzIHRoZSBzeXN0ZW0gdG8KK3RyYW5zaXRpb24gaW50byB0aGF0IHN0YXRlLiBQbGVhc2Ugc2VlIHRoZSBmaWxlCitEb2N1bWVudGF0aW9uL3Bvd2VyL3N0YXRlcy50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBvZiB0aG9zZQorc3RhdGVzLgorCisKKy9zeXMvcG93ZXIvZGlzayBjb250cm9scyB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIHN1c3BlbmQtdG8tZGlzaworbWVjaGFuaXNtLiBTdXNwZW5kLXRvLWRpc2sgY2FuIGJlIGhhbmRsZWQgaW4gc2V2ZXJhbCB3YXlzLiBUaGUKK2dyZWF0ZXN0IGRpc3RpbmN0aW9uIGlzIHdobyB3cml0ZXMgbWVtb3J5IHRvIGRpc2sgLSB0aGUgZmlybXdhcmUgb3IKK3RoZSBrZXJuZWwuIElmIHRoZSBmaXJtd2FyZSBkb2VzIGl0LCB3ZSBhc3N1bWUgdGhhdCBpdCBhbHNvIGhhbmRsZXMKK3N1c3BlbmRpbmcgdGhlIHN5c3RlbS4gCisKK0lmIHRoZSBrZXJuZWwgZG9lcyBpdCwgdGhlbiB3ZSBoYXZlIHRocmVlIG9wdGlvbnMgZm9yIHB1dHRpbmcgdGhlIHN5c3RlbQordG8gc2xlZXAgLSB1c2luZyB0aGUgcGxhdGZvcm0gZHJpdmVyIChlLmcuIEFDUEkgb3Igb3RoZXIgUE0KK3JlZ2lzdGVycyksIHBvd2VyaW5nIG9mZiB0aGUgc3lzdGVtIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtIChmb3IKK3Rlc3RpbmcpLiBUaGUgc3lzdGVtIHdpbGwgc3VwcG9ydCBlaXRoZXIgJ2Zpcm13YXJlJyBvciAncGxhdGZvcm0nLCBhbmQKK3RoYXQgaXMga25vd24gYSBwcmlvcmkuIEJ1dCwgdGhlIHVzZXIgbWF5IGNob29zZSAnc2h1dGRvd24nIG9yCisncmVib290JyBhcyBhbHRlcm5hdGl2ZXMuIAorCitSZWFkaW5nIGZyb20gdGhpcyBmaWxlIHdpbGwgZGlzcGxheSB3aGF0IHRoZSBtb2RlIGlzIGN1cnJlbnRseSBzZXQKK3RvLiBXcml0aW5nIHRvIHRoaXMgZmlsZSB3aWxsIGFjY2VwdCBvbmUgb2YKKworICAgICAgICdmaXJtd2FyZScKKyAgICAgICAncGxhdGZvcm0nCisgICAgICAgJ3NodXRkb3duJworICAgICAgICdyZWJvb3QnCisKK0l0IHdpbGwgb25seSBjaGFuZ2UgdG8gJ2Zpcm13YXJlJyBvciAncGxhdGZvcm0nIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMKK2l0LiAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9rZXJuZWxfdGhyZWFkcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2tlcm5lbF90aHJlYWRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI1NDgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9rZXJuZWxfdGhyZWFkcy50eHQKQEAgLTAsMCArMSw0MSBAQAorS0VSTkVMIFRIUkVBRFMKKworCitGcmVlemVyCisKK1Vwb24gZW50ZXJpbmcgYSBzdXNwZW5kZWQgc3RhdGUgdGhlIHN5c3RlbSB3aWxsIGZyZWV6ZSBhbGwKK3Rhc2tzLiBUaGlzIGlzIGRvbmUgYnkgZGVsaXZlcmluZyBwc2V1ZG9zaWduYWxzLiBUaGlzIGFmZmVjdHMKK2tlcm5lbCB0aHJlYWRzLCB0b28uIFRvIHN1Y2Nlc3NmdWxseSBmcmVlemUgYSBrZXJuZWwgdGhyZWFkCit0aGUgdGhyZWFkIGhhcyB0byBjaGVjayBmb3IgdGhlIHBzZXVkb3NpZ25hbCBhbmQgZW50ZXIgdGhlCityZWZyaWdlcmF0b3IuIENvZGUgdG8gZG8gdGhpcyBsb29rcyBsaWtlIHRoaXM6CisKKwlkbyB7CisJCWh1Yl9ldmVudHMoKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGtodWJkX3dhaXQsICFsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpOworCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9GUkVFWkUpCisJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsKKwl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCitmcm9tIGRyaXZlcnMvdXNiL2NvcmUvaHViLmM6Omh1Yl90aHJlYWQoKQorCisKK1RoZSBVbmZyZWV6YWJsZQorCitTb21lIGtlcm5lbCB0aHJlYWRzIGhvd2V2ZXIsIG11c3Qgbm90IGJlIGZyb3plbi4gVGhlIGtlcm5lbCBtdXN0CitiZSBhYmxlIHRvIGZpbmlzaCBwZW5kaW5nIElPIG9wZXJhdGlvbnMgYW5kIGxhdGVyIG9uIGJlIGFibGUgdG8KK3dyaXRlIHRoZSBtZW1vcnkgaW1hZ2UgdG8gZGlzay4gS2VybmVsIHRocmVhZHMgbmVlZGVkIHRvIGRvIElPCittdXN0IHN0YXkgYXdha2UuIFN1Y2ggdGhyZWFkcyBtdXN0IG1hcmsgdGhlbXNlbHZlcyB1bmZyZWV6YWJsZQorbGlrZSB0aGlzOgorCisJLyoKKwkgKiBUaGlzIHRocmVhZCBkb2Vzbid0IG5lZWQgYW55IHVzZXItbGV2ZWwgYWNjZXNzLAorCSAqIHNvIGdldCByaWQgb2YgYWxsIG91ciByZXNvdXJjZXMuCisJICovCisJZGFlbW9uaXplKCJ1c2Itc3RvcmFnZSIpOworCisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisKK2Zyb20gZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYzo6dXNiX3N0b3JfY29udHJvbF90aHJlYWQoKQorCitTdWNoIGRyaXZlcnMgYXJlIHRoZW1zZWx2ZXMgcmVzcG9uc2libGUgZm9yIHN0YXlpbmcgcXVpZXQgZHVyaW5nCit0aGUgYWN0dWFsIHNuYXBzaG90dGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODU0MjhlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0CkBAIC0wLDAgKzEsMzMyIEBACisKK1BDSSBQb3dlciBNYW5hZ2VtZW50Cit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBbiBvdmVydmlldyBvZiB0aGUgY29uY2VwdHMgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgTGludXgga2VybmVsCisKK1BhdHJpY2sgTW9jaGVsIDxtb2NoZWxAdHJhbnNtZXRhLmNvbT4KKyhhbmQgb3RoZXJzKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gT3ZlcnZpZXcKKzIuIEhvdyB0aGUgUENJIFN1YnN5c3RlbSBEb2VzIFBvd2VyIE1hbmFnZW1lbnQKKzMuIFBDSSBVdGlsaXR5IEZ1bmN0aW9ucworNC4gUENJIERldmljZSBEcml2ZXJzCis1LiBSZXNvdXJjZXMKKworMS4gT3ZlcnZpZXcKK35+fn5+fn5+fn5+CisKK1RoZSBQQ0kgUG93ZXIgTWFuYWdlbWVudCBTcGVjaWZpY2F0aW9uIHdhcyBpbnRyb2R1Y2VkIGJldHdlZW4gdGhlIFBDSSAyLjEgYW5kCitQQ0kgMi4yIFNwZWNpZmljYXRpb25zLiBJdCBhIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgdmFyaW91cyAKK3Bvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy4KKworSW1wbGVtZW50YXRpb24gb2YgdGhlIFBDSSBQTSBTcGVjIGlzIG9wdGlvbmFsLCBhcyBhcmUgc2V2ZXJhbCBzdWItY29tcG9uZW50cyBvZgoraXQuIElmIGEgZGV2aWNlIHN1cHBvcnRzIHRoZSBQQ0kgUE0gU3BlYywgdGhlIGRldmljZSB3aWxsIGhhdmUgYW4gOCBieXRlCitjYXBhYmlsaXR5IGZpZWxkIGluIGl0cyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGRlc2NyaWJlCithbmQgY29udHJvbCB0aGUgc3RhbmRhcmQgUENJIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMuCisKK1RoZSBQQ0kgUE0gc3BlYyBkZWZpbmVzIDQgb3BlcmF0aW5nIHN0YXRlcyBmb3IgZGV2aWNlcyAoRDAgLSBEMykgYW5kIGZvciBidXNlcworKEIwIC0gQjMpLiBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBsZXNzIHBvd2VyIHRoZSBkZXZpY2UgY29uc3VtZXMuIEhvd2V2ZXIsCit0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBsb25nZXIgdGhlIGxhdGVuY3kgaXMgZm9yIHRoZSBkZXZpY2UgdG8gcmV0dXJuIHRvIAorYW4gb3BlcmF0aW9uYWwgc3RhdGUgKEQwKS4KKworVGhlcmUgYXJlIGFjdHVhbGx5IHR3byBEMyBzdGF0ZXMuICBXaGVuIHNvbWVvbmUgdGFsa3MgYWJvdXQgRDMsIHRoZXkgdXN1YWxseQorbWVhbiBEM2hvdCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gQUNQSSBEMiBzdGF0ZSAocG93ZXIgaXMgcmVkdWNlZCwgdGhlCitkZXZpY2UgbWF5IGxvc2Ugc29tZSBjb250ZXh0KS4gIEJ1dCB0aGV5IG1heSBhbHNvIG1lYW4gRDNjb2xkLCB3aGljaCBpcyBhbgorQUNQSSBEMyBzdGF0ZSAocG93ZXIgaXMgZnVsbHkgb2ZmLCBhbGwgc3RhdGUgd2FzIGRpc2NhcmRlZCk7IG9yIGJvdGguCisKK0J1cyBwb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBjb3ZlcmVkIGluIHRoaXMgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LgorCitOb3RlIHRoYXQgYWxsIFBDSSBkZXZpY2VzIHN1cHBvcnQgRDAgYW5kIEQzY29sZCBieSBkZWZhdWx0LCByZWdhcmRsZXNzIG9mCit3aGV0aGVyIG9yIG5vdCB0aGV5IGltcGxlbWVudCBhbnkgb2YgdGhlIFBDSSBQTSBzcGVjLgorCitUaGUgcG9zc2libGUgc3RhdGUgdHJhbnNpdGlvbnMgdGhhdCBhIGRldmljZSBjYW4gdW5kZXJnbyBhcmU6CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEN1cnJlbnQgU3RhdGUgfCBOZXcgU3RhdGUgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRDAgICAgICAgICAgICB8IEQxLCBEMiwgRDN8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBEMSAgICAgICAgICAgIHwgRDIsIEQzICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEQyICAgICAgICAgICAgfCBEMyAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRDEsIEQyLCBEMyAgICB8IEQwICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitOb3RlIHRoYXQgd2hlbiB0aGUgc3lzdGVtIGlzIGVudGVyaW5nIGEgZ2xvYmFsIHN1c3BlbmQgc3RhdGUsIGFsbCBkZXZpY2VzIHdpbGwKK2JlIHBsYWNlZCBpbnRvIEQzIGFuZCB3aGVuIHJlc3VtaW5nLCBhbGwgZGV2aWNlcyB3aWxsIGJlIHBsYWNlZCBpbnRvIEQwLgorSG93ZXZlciwgd2hlbiB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIG90aGVyIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBwb3NzaWJsZS4KKworMi4gSG93IFRoZSBQQ0kgU3Vic3lzdGVtIEhhbmRsZXMgUG93ZXIgTWFuYWdlbWVudAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgUENJIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzZWQgaW5kaXJlY3RseSB2aWEgdGhlIFBvd2VyCitNYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXQgYm9vdCwgdGhlIFBDSSBkcml2ZXIgcmVnaXN0ZXJzIGEgcG93ZXIgbWFuYWdlbWVudAorY2FsbGJhY2sgd2l0aCB0aGF0IGxheWVyLiBVcG9uIGVudGVyaW5nIGEgc3VzcGVuZCBzdGF0ZSwgdGhlIFBNIGxheWVyIGl0ZXJhdGVzCit0aHJvdWdoIGFsbCBvZiBpdHMgcmVnaXN0ZXJlZCBjYWxsYmFja3MuIFRoaXMgY3VycmVudGx5IHRha2VzIHBsYWNlIG9ubHkgZHVyaW5nCitBUE0gc3RhdGUgdHJhbnNpdGlvbnMuCisKK1Vwb24gZ29pbmcgdG8gc2xlZXAsIHRoZSBQQ0kgc3Vic3lzdGVtIHdhbGtzIGl0cyBkZXZpY2UgdHJlZSB0d2ljZS4gQm90aCB0aW1lcywKK2l0IGRvZXMgYSBkZXB0aCBmaXJzdCB3YWxrIG9mIHRoZSBkZXZpY2UgdHJlZS4gVGhlIGZpcnN0IHdhbGsgc2F2ZXMgZWFjaCBvZiB0aGUKK2RldmljZSdzIHN0YXRlIGFuZCBjaGVja3MgZm9yIGRldmljZXMgdGhhdCB3aWxsIHByZXZlbnQgdGhlIHN5c3RlbSBmcm9tIGVudGVyaW5nCithIGdsb2JhbCBwb3dlciBzdGF0ZS4gVGhlIG5leHQgd2FsayB0aGVuIHBsYWNlcyB0aGUgZGV2aWNlcyBpbiBhIGxvdyBwb3dlcgorc3RhdGUuCisKK1RoZSBmaXJzdCB3YWxrIGFsbG93cyBhIGdyYWNlZnVsIHJlY292ZXJ5IGluIHRoZSBldmVudCBvZiBhIGZhaWx1cmUsIHNpbmNlIG5vbmUKK29mIHRoZSBkZXZpY2VzIGhhdmUgYWN0dWFsbHkgYmVlbiBwb3dlcmVkIGRvd24uCisKK0luIGJvdGggd2Fsa3MsIGluIHBhcnRpY3VsYXIgdGhlIHNlY29uZCwgYWxsIGNoaWxkcmVuIG9mIGEgYnJpZGdlIGFyZSB0b3VjaGVkCitiZWZvcmUgdGhlIGFjdHVhbCBicmlkZ2UgaXRzZWxmLiBUaGlzIGFsbG93cyB0aGUgYnJpZGdlIHRvIHJldGFpbiBwb3dlciB3aGlsZQoraXRzIGNoaWxkcmVuIGFyZSBiZWluZyBhY2Nlc3NlZC4KKworVXBvbiByZXN1bWluZyBmcm9tIHNsZWVwLCBqdXN0IHRoZSBvcHBvc2l0ZSBtdXN0IGJlIHRydWU6IGFsbCBicmlkZ2VzIG11c3QgYmUKK3Bvd2VyZWQgb24gYW5kIHJlc3RvcmVkIGJlZm9yZSB0aGVpciBjaGlsZHJlbiBhcmUgcG93ZXJlZCBvbi4gVGhpcyBpcyBlYXNpbHkKK2FjY29tcGxpc2hlZCB3aXRoIGEgYnJlYWR0aC1maXJzdCB3YWxrIG9mIHRoZSBQQ0kgZGV2aWNlIHRyZWUuCisKKworMy4gUENJIFV0aWxpdHkgRnVuY3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgYXJlIGhlbHBlciBmdW5jdGlvbnMgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGJ5IGluZGl2aWR1YWwgZGV2aWNlIGRyaXZlcnMuCitBc3N1bWluZyB0aGF0IGEgZGV2aWNlIGJlaGF2ZXMgYXMgYWR2ZXJ0aXNlZCwgdGhlc2Ugc2hvdWxkIGJlIGFwcGxpY2FibGUgaW4gbW9zdAorY2FzZXMuIEhvd2V2ZXIsIHJlc3VsdHMgbWF5IHZhcnkuCisKK05vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5ldmVyIGltcGxpY2l0bHkgY2FsbGVkIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyCitpcyBhbHdheXMgcmVzcG9uc2libGUgZm9yIGRlY2lkaW5nIHdoZW4gYW5kIGlmIHRvIGNhbGwgdGhlc2UuCisKKworcGNpX3NhdmVfc3RhdGUKKy0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9zYXZlX3N0YXRlKGRldiwgYnVmZmVyKTsKKworRGVzY3JpcHRpb246CisJU2F2ZSBmaXJzdCA2NCBieXRlcyBvZiBQQ0kgY29uZmlnIHNwYWNlLiBCdWZmZXIgbXVzdCBiZSBhbGxvY2F0ZWQgYnkKKwljYWxsZXIuCisKKworcGNpX3Jlc3RvcmVfc3RhdGUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9yZXN0b3JlX3N0YXRlKGRldiwgYnVmZmVyKTsKKworRGVzY3JpcHRpb246CisJUmVzdG9yZSBwcmV2aW91c2x5IHNhdmVkIGNvbmZpZyBzcGFjZS4gKEZpcnN0IDY0IGJ5dGVzIG9ubHkpOworCisJSWYgYnVmZmVyIGlzIE5VTEwsIHRoZW4gcmVzdG9yZSB3aGF0IGluZm9ybWF0aW9uIHdlIGtub3cgYWJvdXQgdGhlCisJZGV2aWNlIGZyb20gYm9vdHVwOiBCQVJzIGFuZCBpbnRlcnJ1cHQgbGluZS4KKworCitwY2lfc2V0X3Bvd2VyX3N0YXRlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBzdGF0ZSk7CisKK0Rlc2NyaXB0aW9uOgorCVRyYW5zaXRpb24gZGV2aWNlIHRvIGxvdyBwb3dlciBzdGF0ZSB1c2luZyBQQ0kgUE0gQ2FwYWJpbGl0aWVzCisJcmVnaXN0ZXJzLgorCisJV2lsbCBmYWlsIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisJLSBJZiBzdGF0ZSBpcyBsZXNzIHRoYW4gY3VycmVudCBzdGF0ZSwgYnV0IG5vdCBEMCAoaWxsZWdhbCB0cmFuc2l0aW9uKQorCS0gRGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQTSBDYXBhYmlsaXRpZXMKKwktIERldmljZSBkb2VzIG5vdCBzdXBwb3J0IHJlcXVlc3RlZCBzdGF0ZQorCisKK3BjaV9lbmFibGVfd2FrZQorLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCXBjaV9lbmFibGVfd2FrZShkZXYsIHN0YXRlLCBlbmFibGUpOworCitEZXNjcmlwdGlvbjoKKwlFbmFibGUgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMgZHVyaW5nIGxvdyBwb3dlciBzdGF0ZSB1c2luZyBQQ0kgUE0gCisJQ2FwYWJpbGl0aWVzLgorCisJQ2hlY2tzIHdoZXRoZXIgaWYgZGV2aWNlIHN1cHBvcnRzIGdlbmVyYXRpbmcgUE1FIyBmcm9tIHJlcXVlc3RlZCBzdGF0ZQorCWFuZCBmYWlsIGlmIGl0IGRvZXMgbm90LCB1bmxlc3MgZW5hYmxlID09IDAgKHJlcXVlc3QgaXMgdG8gZGlzYWJsZSB3YWtlCisJZXZlbnRzLCB3aGljaCBpcyBpbXBsaWNpdCBpZiBpdCBkb2Vzbid0IGV2ZW4gc3VwcG9ydCBpdCBpbiB0aGUgZmlyc3QKKwlwbGFjZSkuCisKKwlOb3RlIHRoYXQgdGhlIFBNQyBSZWdpc3RlciBpbiB0aGUgZGV2aWNlJ3MgUE0gQ2FwYWJpbHRpZXMgaGFzIGEgYml0bWFzaworCW9mIHRoZSBzdGF0ZXMgaXQgc3VwcG9ydHMgZ2VuZXJhdGluZyBQTUUjIGZyb20uIEQzaG90IGlzIGJpdCAzIGFuZAorCUQzY29sZCBpcyBiaXQgNC4gU28sIHdoaWxlIGEgdmFsdWUgb2YgNCBhcyB0aGUgc3RhdGUgbWF5IG5vdCBzZWVtCisJc2VtYW50aWNhbGx5IGNvcnJlY3QsIGl0IGlzLiAKKworCis0LiBQQ0kgRGV2aWNlIERyaXZlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgaW5kaXZpZHVhbCBkcml2ZXJzLCBhbmQgYXJlIGRlZmluZWQgaW4gCitzdHJ1Y3QgcGNpX2RyaXZlcjoKKworICAgICAgICBpbnQgICgqc2F2ZV9zdGF0ZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSk7CisgICAgICAgIGludCAgKCpzdXNwZW5kKSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRlKTsKKyAgICAgICAgaW50ICAoKnJlc3VtZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworICAgICAgICBpbnQgICgqZW5hYmxlX3dha2UpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUsIGludCBlbmFibGUpOworCisKK3NhdmVfc3RhdGUKKy0tLS0tLS0tLS0KKworVXNhZ2U6CisKK2lmIChkZXYtPmRyaXZlciAmJiBkZXYtPmRyaXZlci0+c2F2ZV9zdGF0ZSkKKwlkZXYtPmRyaXZlci0+c2F2ZV9zdGF0ZShkZXYsc3RhdGUpOworCitUaGUgZHJpdmVyIHNob3VsZCB1c2UgdGhpcyBjYWxsYmFjayB0byBzYXZlIGRldmljZSBzdGF0ZS4gSXQgc2hvdWxkIHRha2UgaW50bworYWNjb3VudCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGV2aWNlIGFuZCB0aGUgcmVxdWVzdGVkIHN0YXRlIGluIG9yZGVyIHRvCithdm9pZCBhbnkgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucy4KKworRm9yIGV4YW1wbGUsIGEgdmlkZW8gY2FyZCB0aGF0IHN1cHBvcnRzIGFsbCA0IHN0YXRlcyAoRDAtRDMpLCBhbGwgY29udHJvbGxlcgorY29udGV4dCBpcyBwcmVzZXJ2ZWQgd2hlbiBlbnRlcmluZyBEMSwgYnV0IHRoZSBzY3JlZW4gaXMgcGxhY2VkIGludG8gYSBsb3cgcG93ZXIKK3N0YXRlIChibGFua2VkKS4gCisKK1RoZSBkcml2ZXIgY2FuIGFsc28gaW50ZXJwcmV0IHRoaXMgZnVuY3Rpb24gYXMgYSBub3RpZmljYXRpb24gdGhhdCBpdCBtYXkgYmUKK2VudGVyaW5nIGEgc2xlZXAgc3RhdGUgaW4gdGhlIG5lYXIgZnV0dXJlLiBJZiBpdCBrbm93cyB0aGF0IHRoZSBkZXZpY2UgY2Fubm90CitlbnRlciB0aGUgcmVxdWVzdGVkIHN0YXRlLCBlaXRoZXIgYmVjYXVzZSBvZiBsYWNrIG9mIHN1cHBvcnQgZm9yIGl0LCBvciBiZWNhdXNlCit0aGUgZGV2aWNlIGlzIG1pZGRsZSBvZiBzb21lIGNyaXRpY2FsIG9wZXJhdGlvbiwgdGhlbiBpdCBzaG91bGQgZmFpbC4KKworVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8gc2V0IGFueSBzdGF0ZSBpbiB0aGUgZGV2aWNlIG9yIHRoZSBkcml2ZXIKK2JlY2F1c2UgdGhlIGRldmljZSBtYXkgbm90IGFjdHVhbGx5IGVudGVyIHRoZSBzbGVlcCBzdGF0ZSAoZS5nLiBhbm90aGVyIGRyaXZlcgorbGF0ZXIgY2F1c2VzIGNhdXNlcyBhIGdsb2JhbCBzdGF0ZSB0cmFuc2l0aW9uIHRvIGZhaWwpLgorCitOb3RlIHRoYXQgaW4gaW50ZXJtZWRpYXRlIGxvdyBwb3dlciBzdGF0ZXMsIGEgZGV2aWNlJ3MgSS9PIGFuZCBtZW1vcnkgc3BhY2VzIG1heQorYmUgZGlzYWJsZWQgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIGluIHN1YnNlcXVlbnQgdHJhbnNpdGlvbnMgdG8gbG93ZXIgcG93ZXIKK3N0YXRlcy4KKworCitzdXNwZW5kCistLS0tLS0tCisKK1VzYWdlOgorCitpZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJZGV2LT5kcml2ZXItPnN1c3BlbmQoZGV2LHN0YXRlKTsKKworQSBkcml2ZXIgdXNlcyB0aGlzIGZ1bmN0aW9uIHRvIGFjdHVhbGx5IHRyYW5zaXRpb24gdGhlIGRldmljZSBpbnRvIGEgbG93IHBvd2VyCitzdGF0ZS4gVGhpcyBzaG91bGQgaW5jbHVkZSBkaXNhYmxpbmcgSS9PLCBJUlFzLCBhbmQgYnVzLW1hc3RlcmluZywgYXMgd2VsbCBhcworcGh5c2ljYWxseSB0cmFuc2l0aW9uaW5nIHRoZSBkZXZpY2UgdG8gYSBsb3dlciBwb3dlciBzdGF0ZTsgaXQgbWF5IGFsc28gaW5jbHVkZQorY2FsbHMgdG8gcGNpX2VuYWJsZV93YWtlKCkuCisKK0J1cyBtYXN0ZXJpbmcgbWF5IGJlIGRpc2FibGVkIGJ5IGRvaW5nOgorCitwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworRm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IHRoZSBQQ0kgUE0gU3BlYywgdGhpcyBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIGRldmljZSdzCitwb3dlciBzdGF0ZSB0byBtYXRjaCB0aGUgc3VzcGVuZCgpIHBhcmFtZXRlcjoKKworcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsc3RhdGUpOworCitUaGUgZHJpdmVyIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGRpc2FibGluZyBhbnkgb3RoZXIgZGV2aWNlLXNwZWNpZmljIGZlYXR1cmVzCisoZS5nIGJsYW5raW5nIHNjcmVlbiwgdHVybmluZyBvZmYgb24tY2FyZCBtZW1vcnksIGV0YykuCisKK1RoZSBkcml2ZXIgc2hvdWxkIGJlIHN1cmUgdG8gdHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRldmljZSwgYXMgaXQgbWF5CitvYnZpYXRlIHRoZSBuZWVkIGZvciBzb21lIG9wZXJhdGlvbnMuCisKK1RoZSBkcml2ZXIgc2hvdWxkIHVwZGF0ZSB0aGUgY3VycmVudF9zdGF0ZSBmaWVsZCBpbiBpdHMgcGNpX2RldiBzdHJ1Y3R1cmUgaW4KK3RoaXMgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgUE0tY2FwYWJsZSBkZXZpY2VzIHdoZW4gcGNpX3NldF9wb3dlcl9zdGF0ZSBpcyB1c2VkLgorCityZXN1bWUKKy0tLS0tLQorCitVc2FnZToKKworaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5zdXNwZW5kKQorCWRldi0+ZHJpdmVyLT5yZXN1bWUoZGV2KQorCitUaGUgcmVzdW1lIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgZnJvbSBhbnkgcG93ZXIgc3RhdGUsIGFuZCBpcyBhbHdheXMgbWVhbnQgdG8KK3RyYW5zaXRpb24gdGhlIGRldmljZSB0byB0aGUgRDAgc3RhdGUuIAorCitUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWVuYWJsaW5nIGFueSBmZWF0dXJlcyBvZiB0aGUgZGV2aWNlIHRoYXQgaGFkCitiZWVuIGRpc2FibGVkIGR1cmluZyBwcmV2aW91cyBzdXNwZW5kIGNhbGxzLCBzdWNoIGFzIElSUXMgYW5kIGJ1cyBtYXN0ZXJpbmcsCithcyB3ZWxsIGFzIGNhbGxpbmcgcGNpX3Jlc3RvcmVfc3RhdGUoKS4KKworSWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgaW4gRDMsIGl0IG1heSBuZWVkIHRvIGJlIHJlaW5pdGlhbGl6ZWQgaW4gcmVzdW1lKCkuCisKKyAgKiBTb21lIHR5cGVzIG9mIGRldmljZXMsIGxpa2UgYnVzIGNvbnRyb2xsZXJzLCB3aWxsIHByZXNlcnZlIGNvbnRleHQgaW4gRDNob3QKKyAgICAodXNpbmcgVmNjIHBvd2VyKS4gIFRoZWlyIGRyaXZlcnMgd2lsbCBvZnRlbiB3YW50IHRvIGF2b2lkIHJlLWluaXRpYWxpemluZworICAgIHRoZW0gYWZ0ZXIgcmUtZW50ZXJpbmcgRDAgKHBlcmhhcHMgdG8gYXZvaWQgcmVzZXR0aW5nIGRvd25zdHJlYW0gZGV2aWNlcykuCisKKyAgKiBPdGhlciBraW5kcyBvZiBkZXZpY2VzIGluIEQzaG90IHdpbGwgZGlzY2FyZCBkZXZpY2UgY29udGV4dCBhcyBwYXJ0IG9mIGEKKyAgICBzb2Z0IHJlc2V0IHdoZW4gcmUtZW50ZXJpbmcgdGhlIEQwIHN0YXRlLgorICAgIAorICAqIERldmljZXMgcmVzdW1pbmcgZnJvbSBEM2NvbGQgYWx3YXlzIGdvIHRocm91Z2ggYSBwb3dlci1vbiByZXNldC4gIFNvbWUKKyAgICBkZXZpY2UgY29udGV4dCBjYW4gYWxzbyBiZSBwcmVzZXJ2ZWQgdXNpbmcgVmF1eCBwb3dlci4KKworICAqIFNvbWUgc3lzdGVtcyBoaWRlIEQzY29sZCByZXN1bWUgcGF0aHMgZnJvbSBkcml2ZXJzLiAgRm9yIGV4YW1wbGUsIG9uIFBDcworICAgIHRoZSByZXN1bWUgcGF0aCBmb3Igc3VzcGVuZC10by1kaXNrIG9mdGVuIHJ1bnMgQklPUyBwb3dlcnVwIGNvZGUsIHdoaWNoCisgICAgd2lsbCBzb21ldGltZXMgcmUtaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgorCitUbyBoYW5kbGUgcmVzZXRzIGR1cmluZyBEMyB0byBEMCB0cmFuc2l0aW9ucywgaXQgbWF5IGJlIGNvbnZlbmllbnQgdG8gc2hhcmUKK2RldmljZSBpbml0aWFsaXphdGlvbiBjb2RlIGJldHdlZW4gcHJvYmUoKSBhbmQgcmVzdW1lKCkuICBEZXZpY2UgcGFyYW1ldGVycworY2FuIGFsc28gYmUgc2F2ZWQgYmVmb3JlIHRoZSBkcml2ZXIgc3VzcGVuZHMgaW50byBEMywgYXZvaWRpbmcgcmUtcHJvYmUuCisKK0lmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIFBDSSBQTSBTcGVjLCBpdCBjYW4gdXNlIHRoaXMgdG8gcGh5c2ljYWxseSB0cmFuc2l0aW9uCit0aGUgZGV2aWNlIHRvIEQwOgorCitwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwwKTsKKworTm90ZSB0aGF0IGlmIHRoZSBlbnRpcmUgc3lzdGVtIGlzIHRyYW5zaXRpb25pbmcgb3V0IG9mIGEgZ2xvYmFsIHNsZWVwIHN0YXRlLCBhbGwKK2RldmljZXMgd2lsbCBiZSBwbGFjZWQgaW4gdGhlIEQwIHN0YXRlLCBzbyB0aGlzIGlzIG5vdCBuZWNlc3NhcnkuIEhvd2V2ZXIsIGluCit0aGUgZXZlbnQgdGhhdCB0aGUgZGV2aWNlIGlzIHBsYWNlZCBpbiB0aGUgRDMgc3RhdGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sCit0aGlzIGNhbGwgaXMgbmVjZXNzYXJ5LiBJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdHdvIGV2ZW50cyBpcwordGFraW5nIHBsYWNlIGluIHRoZSBkcml2ZXIsIHNvIGl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBtYWtlIHRoYXQgY2FsbC4KKworVGhlIGRyaXZlciBzaG91bGQgdGFrZSBub3RlIG9mIHRoZSBzdGF0ZSB0aGF0IGl0IGlzIHJlc3VtaW5nIGZyb20gaW4gb3JkZXIgdG8KK2Vuc3VyZSBjb3JyZWN0IChhbmQgc3BlZWR5KSBvcGVyYXRpb24uCisKK1RoZSBkcml2ZXIgc2hvdWxkIHVwZGF0ZSB0aGUgY3VycmVudF9zdGF0ZSBmaWVsZCBpbiBpdHMgcGNpX2RldiBzdHJ1Y3R1cmUgaW4KK3RoaXMgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgUE0tY2FwYWJsZSBkZXZpY2VzIHdoZW4gcGNpX3NldF9wb3dlcl9zdGF0ZSBpcyB1c2VkLgorCisKK2VuYWJsZV93YWtlCistLS0tLS0tLS0tLQorCitVc2FnZToKKworaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5lbmFibGVfd2FrZSkKKwlkZXYtPmRyaXZlci0+ZW5hYmxlX3dha2UoZGV2LHN0YXRlLGVuYWJsZSk7CisKK1RoaXMgY2FsbGJhY2sgaXMgZ2VuZXJhbGx5IG9ubHkgcmVsZXZhbnQgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IHRoZSBQQ0kgUE0KK3NwZWMgYW5kIGhhdmUgdGhlIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBQTUUjIChQb3dlciBNYW5hZ2VtZW50IEV2ZW50IFNpZ25hbCkKK3RvIHdha2UgdGhlIHN5c3RlbSB1cC4gKEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBkZXZpY2UgbWF5IHN1cHBvcnQgCitzb21lIG5vbi1zdGFuZGFyZCB3YXkgb2YgZ2VuZXJhdGluZyBhIHdha2UgZXZlbnQgb24gc2xlZXAuKQorCitCaXRzIDE1OjExIG9mIHRoZSBQTUMgKFBvd2VyIE1nbXQgQ2FwYWJpbGl0aWVzKSBSZWdpc3RlciBpbiBhIGRldmljZSdzCitQTSBDYXBhYmlsdGllcyBkZXNjcmliZSB3aGF0IHBvd2VyIHN0YXRlcyB0aGUgZGV2aWNlIHN1cHBvcnRzIGdlbmVyYXRpbmcgYSAKK3dha2UgZXZlbnQgZnJvbToKKworKy0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIEJpdCAgfCAgU3RhdGUgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgMTEgICB8ICAgRDAgICAgIHwKK3wgIDEyICAgfCAgIEQxICAgICB8Cit8ICAxMyAgIHwgICBEMiAgICAgfAorfCAgMTQgICB8ICAgRDNob3QgIHwKK3wgIDE1ICAgfCAgIEQzY29sZCB8CisrLS0tLS0tLS0tLS0tLS0tLS0tKworCitBIGRldmljZSBjYW4gdXNlIHRoaXMgdG8gZW5hYmxlIHdha2UgZXZlbnRzOgorCisJIHBjaV9lbmFibGVfd2FrZShkZXYsc3RhdGUsZW5hYmxlKTsKKworTm90ZSB0aGF0IHRvIGVuYWJsZSBQTUUjIGZyb20gRDNjb2xkLCBhIHZhbHVlIG9mIDQgc2hvdWxkIGJlIHBhc3NlZCB0byAKK3BjaV9lbmFibGVfd2FrZSAoc2luY2UgaXQgdXNlcyBhbiBpbmRleCBpbnRvIGEgYml0bWFzaykuIElmIGEgZHJpdmVyIGdldHMKK2EgcmVxdWVzdCB0byBlbmFibGUgd2FrZSBldmVudHMgZnJvbSBEMywgdHdvIGNhbGxzIHNob3VsZCBiZSBtYWRlIHRvIAorcGNpX2VuYWJsZV93YWtlIChvbmUgZm9yIGJvdGggRDNob3QgYW5kIEQzY29sZCkuCisKKworNS4gUmVzb3VyY2VzCit+fn5+fn5+fn5+fn4KKworUENJIExvY2FsIEJ1cyBTcGVjaWZpY2F0aW9uIAorUENJIEJ1cyBQb3dlciBNYW5hZ2VtZW50IEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCisKKyAgaHR0cDovL3BjaXNpZy5vcmcKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zdGF0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zdGF0ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNWU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N0YXRlcy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitTeXN0ZW0gUG93ZXIgTWFuYWdlbWVudCBTdGF0ZXMKKworCitUaGUga2VybmVsIHN1cHBvcnRzIHRocmVlIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzIGdlbmVyaWNhbGx5LCB0aG91Z2gKK2VhY2ggaXMgZGVwZW5kZW50IG9uIHBsYXRmb3JtIHN1cHBvcnQgY29kZSB0byBpbXBsZW1lbnQgdGhlIGxvdy1sZXZlbAorZGV0YWlscyBmb3IgZWFjaCBzdGF0ZS4gVGhpcyBmaWxlIGRlc2NyaWJlcyBlYWNoIHN0YXRlLCB3aGF0IHRoZXkgYXJlCitjb21tb25seSBjYWxsZWQsIHdoYXQgQUNQSSBzdGF0ZSB0aGV5IG1hcCB0bywgYW5kIHdoYXQgc3RyaW5nIHRvIHdyaXRlCit0byAvc3lzL3Bvd2VyL3N0YXRlIHRvIGVudGVyIHRoYXQgc3RhdGUKKworCitTdGF0ZToJCVN0YW5kYnkgLyBQb3dlci1PbiBTdXNwZW5kCitBQ1BJIFN0YXRlOglTMQorU3RyaW5nOgkJInN0YW5kYnkiCisKK1RoaXMgc3RhdGUgb2ZmZXJzIG1pbmltYWwsIHRob3VnaCByZWFsLCBwb3dlciBzYXZpbmdzLCB3aGlsZSBwcm92aWRpbmcKK2EgdmVyeSBsb3ctbGF0ZW5jeSB0cmFuc2l0aW9uIGJhY2sgdG8gYSB3b3JraW5nIHN5c3RlbS4gTm8gb3BlcmF0aW5nCitzdGF0ZSBpcyBsb3N0ICh0aGUgQ1BVIHJldGFpbnMgcG93ZXIpLCBzbyB0aGUgc3lzdGVtIGVhc2lseSBzdGFydHMgdXAKK2FnYWluIHdoZXJlIGl0IGxlZnQgb2ZmLiAKKworV2UgdHJ5IHRvIHB1dCBkZXZpY2VzIGluIGEgbG93LXBvd2VyIHN0YXRlIGVxdWl2YWxlbnQgdG8gRDEsIHdoaWNoCithbHNvIG9mZmVycyBsb3cgcG93ZXIgc2F2aW5ncywgYnV0IGxvdyByZXN1bWUgbGF0ZW5jeS4gTm90IGFsbCBkZXZpY2VzCitzdXBwb3J0IEQxLCBhbmQgdGhvc2UgdGhhdCBkb24ndCBhcmUgbGVmdCBvbi4gCisKK0EgdHJhbnNpdGlvbiBmcm9tIFN0YW5kYnkgdG8gdGhlIE9uIHN0YXRlIHNob3VsZCB0YWtlIGFib3V0IDEtMgorc2Vjb25kcy4gCisKKworU3RhdGU6CQlTdXNwZW5kLXRvLVJBTQorQUNQSSBTdGF0ZToJUzMKK1N0cmluZzoJCSJtZW0iCisKK1RoaXMgc3RhdGUgb2ZmZXJzIHNpZ25pZmljYW50IHBvd2VyIHNhdmluZ3MgYXMgZXZlcnl0aGluZyBpbiB0aGUKK3N5c3RlbSBpcyBwdXQgaW50byBhIGxvdy1wb3dlciBzdGF0ZSwgZXhjZXB0IGZvciBtZW1vcnksIHdoaWNoIGlzCitwbGFjZWQgaW4gc2VsZi1yZWZyZXNoIG1vZGUgdG8gcmV0YWluIGl0cyBjb250ZW50cy4gCisKK1N5c3RlbSBhbmQgZGV2aWNlIHN0YXRlIGlzIHNhdmVkIGFuZCBrZXB0IGluIG1lbW9yeS4gQWxsIGRldmljZXMgYXJlCitzdXNwZW5kZWQgYW5kIHB1dCBpbnRvIEQzLiBJbiBtYW55IGNhc2VzLCBhbGwgcGVyaXBoZXJhbCBidXNlcyBsb3NlCitwb3dlciB3aGVuIGVudGVyaW5nIFNUUiwgc28gZGV2aWNlcyBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZQordHJhbnNpdGlvbiBiYWNrIHRvIHRoZSBPbiBzdGF0ZS4gCisKK0ZvciBhdCBsZWFzdCBBQ1BJLCBTVFIgcmVxdWlyZXMgc29tZSBtaW5pbWFsIGJvb3Qtc3RyYXBwaW5nIGNvZGUgdG8KK3Jlc3VtZSB0aGUgc3lzdGVtIGZyb20gU1RSLiBUaGlzIG1heSBiZSB0cnVlIG9uIG90aGVyIHBsYXRmb3Jtcy4gCisKK0EgdHJhbnNpdGlvbiBmcm9tIFN1c3BlbmQtdG8tUkFNIHRvIHRoZSBPbiBzdGF0ZSBzaG91bGQgdGFrZSBhYm91dAorMy01IHNlY29uZHMuIAorCisKK1N0YXRlOgkJU3VzcGVuZC10by1kaXNrCitBQ1BJIFN0YXRlOglTNAorU3RyaW5nOgkJImRpc2siCisKK1RoaXMgc3RhdGUgb2ZmZXJzIHRoZSBncmVhdGVzdCBwb3dlciBzYXZpbmdzLCBhbmQgY2FuIGJlIHVzZWQgZXZlbiBpbgordGhlIGFic2VuY2Ugb2YgbG93LWxldmVsIHBsYXRmb3JtIHN1cHBvcnQgZm9yIHBvd2VyIG1hbmFnZW1lbnQuIFRoaXMKK3N0YXRlIG9wZXJhdGVzIHNpbWlsYXJseSB0byBTdXNwZW5kLXRvLVJBTSwgYnV0IGluY2x1ZGVzIGEgZmluYWwgc3RlcAorb2Ygd3JpdGluZyBtZW1vcnkgY29udGVudHMgdG8gZGlzay4gT24gcmVzdW1lLCB0aGlzIGlzIHJlYWQgYW5kIG1lbW9yeQoraXMgcmVzdG9yZWQgdG8gaXRzIHByZS1zdXNwZW5kIHN0YXRlLiAKKworU1REIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBvciB0aGUga2VybmVsLiBJZiBpdCBpcyBoYW5kbGVkIGJ5Cit0aGUgZmlybXdhcmUsIGl0IHVzdWFsbHkgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgcGFydGl0aW9uIHRoYXQgbXVzdCBiZQorc2V0dXAgdmlhIGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBmb3IgaXQgdG8gdXNlLiBEZXNwaXRlIHRoZQoraW5jb252ZW5pZW5jZSwgdGhpcyBtZXRob2QgcmVxdWlyZXMgbWluaW1hbCB3b3JrIGJ5IHRoZSBrZXJuZWwsIHNpbmNlCit0aGUgZmlybXdhcmUgd2lsbCBhbHNvIGhhbmRsZSByZXN0b3JpbmcgbWVtb3J5IGNvbnRlbnRzIG9uIHJlc3VtZS4gCisKK0lmIHRoZSBrZXJuZWwgaXMgcmVzcG9uc2libGUgZm9yIHBlcnNpc3RhbnRseSBzYXZpbmcgc3RhdGUsIGEgbWVjaGFuaXNtIAorY2FsbGVkICdzd3N1c3AnIChTd2FwIFN1c3BlbmQpIGlzIHVzZWQgdG8gd3JpdGUgbWVtb3J5IGNvbnRlbnRzIHRvCitmcmVlIHN3YXAgc3BhY2UuIHN3c3VzcCBoYXMgc29tZSByZXN0cmljdGl2ZSByZXF1aXJlbWVudHMsIGJ1dCBzaG91bGQKK3dvcmsgaW4gbW9zdCBjYXNlcy4gU29tZSwgYWxiZWl0IG91dGRhdGVkLCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZAoraW4gRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0LiAKKworT25jZSBtZW1vcnkgc3RhdGUgaXMgd3JpdHRlbiB0byBkaXNrLCB0aGUgc3lzdGVtIG1heSBlaXRoZXIgZW50ZXIgYQorbG93LXBvd2VyIHN0YXRlIChsaWtlIEFDUEkgUzQpLCBvciBpdCBtYXkgc2ltcGx5IHBvd2VyIGRvd24uIFBvd2VyaW5nCitkb3duIG9mZmVycyBncmVhdGVyIHNhdmluZ3MsIGFuZCBhbGxvd3MgdGhpcyBtZWNoYW5pc20gdG8gd29yayBvbiBhbnkKK3N5c3RlbS4gSG93ZXZlciwgZW50ZXJpbmcgYSByZWFsIGxvdy1wb3dlciBzdGF0ZSBhbGxvd3MgdGhlIHVzZXIgdG8KK3RyaWdnZXIgd2FrZSB1cCBldmVudHMgKGUuZy4gcHJlc3NpbmcgYSBrZXkgb3Igb3BlbmluZyBhIGxhcHRvcCBsaWQpLiAKKworQSB0cmFuc2l0aW9uIGZyb20gU3VzcGVuZC10by1EaXNrIHRvIHRoZSBPbiBzdGF0ZSBzaG91bGQgdGFrZSBhYm91dCAzMAorc2Vjb25kcywgdGhvdWdoIGl0J3MgdHlwaWNhbGx5IGEgYml0IG1vcmUgd2l0aCB0aGUgY3VycmVudAoraW1wbGVtZW50YXRpb24uIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzM0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKQEAgLTAsMCArMSwyMzUgQEAKK0Zyb20ga2VybmVsL3N1c3BlbmQuYzoKKworICogQklHIEZBVCBXQVJOSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElmIHlvdSBoYXZlIHVuc3VwcG9ydGVkICgqKSBkZXZpY2VzIHVzaW5nIERNQS4uLgorICoJCQkJLi4uc2F5IGdvb2RieWUgdG8geW91ciBkYXRhLgorICoKKyAqIElmIHlvdSB0b3VjaCBhbnl0aGluZyBvbiBkaXNrIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lLi4uCisgKgkJCQkuLi5raXNzIHlvdXIgZGF0YSBnb29kYnllLgorICoKKyAqIElmIHlvdXIgZGlzayBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzdXNwZW5kLi4uIChJREUgZG9lcykKKyAqCQkJCS4uLnlvdSdkIGJldHRlciBmaW5kIG91dCBob3cgdG8gZ2V0IGFsb25nCisgKgkJCQkgICB3aXRob3V0IHlvdXIgZGF0YS4KKyAqCisgKiBJZiB5b3UgY2hhbmdlIGtlcm5lbCBjb21tYW5kIGxpbmUgYmV0d2VlbiBzdXNwZW5kIGFuZCByZXN1bWUuLi4KKyAqCQkJICAgICAgICAuLi5wcmVwYXJlIGZvciBuYXN0eSBmc2NrIG9yIHdvcnNlLgorICoKKyAqIElmIHlvdSBjaGFuZ2UgeW91ciBoYXJkd2FyZSB3aGlsZSBzeXN0ZW0gaXMgc3VzcGVuZGVkLi4uCisgKgkJCSAgICAgICAgLi4ud2VsbCwgaXQgd2FzIG5vdCBnb29kIGlkZWEuCisgKgorICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KKworWW91IG5lZWQgdG8gYXBwZW5kIHJlc3VtZT0vZGV2L3lvdXJfc3dhcF9wYXJ0aXRpb24gdG8ga2VybmVsIGNvbW1hbmQKK2xpbmUuIFRoZW4geW91IHN1c3BlbmQgYnkKKworZWNobyBzaHV0ZG93biA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCisuIElmIHlvdSBmZWVsIEFDUEkgd29ya3MgcHJldHR5IHdlbGwgb24geW91ciBzeXN0ZW0sIHlvdSBtaWdodCB0cnkKKworZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQorCisKKworQXJ0aWNsZSBhYm91dCBnb2FscyBhbmQgaW1wbGVtZW50YXRpb24gb2YgU29mdHdhcmUgU3VzcGVuZCBmb3IgTGludXgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitBdXRob3I6IEeC4WJvciBLdXRpCitMYXN0IHJldmlzZWQ6IDIwMDMtMTAtMjAgYnkgUGF2ZWwgTWFjaGVrCisKK0lkZWEgYW5kIGdvYWxzIHRvIGFjaGlldmUKKworTm93YWRheXMgaXQgaXMgY29tbW9uIGluIHNldmVyYWwgbGFwdG9wcyB0aGF0IHRoZXkgaGF2ZSBhIHN1c3BlbmQgYnV0dG9uLiBJdAorc2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtYWNoaW5lIHRvIGEgZmlsZXN5c3RlbSBvciB0byBhIHBhcnRpdGlvbiBhbmQgc3dpdGNoZXMKK3RvIHN0YW5kYnkgbW9kZS4gTGF0ZXIgcmVzdW1pbmcgdGhlIG1hY2hpbmUgdGhlIHNhdmVkIHN0YXRlIGlzIGxvYWRlZCBiYWNrIHRvCityYW0gYW5kIHRoZSBtYWNoaW5lIGNhbiBjb250aW51ZSBpdHMgd29yay4gSXQgaGFzIHR3byByZWFsIGJlbmVmaXRzLiBGaXJzdCB3ZQorc2F2ZSBvdXJzZWx2ZXMgdGhlIHRpbWUgbWFjaGluZSBnb2VzIGRvd24gYW5kIGxhdGVyIGJvb3RzIHVwLCBlbmVyZ3kgY29zdHMKK2FyZSByZWFsIGhpZ2ggd2hlbiBydW5uaW5nIGZyb20gYmF0dGVyaWVzLiBUaGUgb3RoZXIgZ2FpbiBpcyB0aGF0IHdlIGRvbid0IGhhdmUgdG8KK2ludGVycnVwdCBvdXIgcHJvZ3JhbXMgc28gcHJvY2Vzc2VzIHRoYXQgYXJlIGNhbGN1bGF0aW5nIHNvbWV0aGluZyBmb3IgYSBsb25nCit0aW1lIHNob3VsZG4ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW50ZXJydXB0aWJsZS4KKworc3dzdXNwIHNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbWFjaGluZSBpbnRvIGFjdGl2ZSBzd2FwcyBhbmQgdGhlbiByZWJvb3RzIG9yCitwb3dlcmRvd25zLiAgWW91IG11c3QgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBzd2FwIHBhcnRpdGlvbiB0byByZXN1bWUgZnJvbSB3aXRoCitgYHJlc3VtZT0nJyBrZXJuZWwgb3B0aW9uLiBJZiBzaWduYXR1cmUgaXMgZm91bmQgaXQgbG9hZHMgYW5kIHJlc3RvcmVzIHNhdmVkCitzdGF0ZS4gSWYgdGhlIG9wdGlvbiBgYG5vcmVzdW1lJycgaXMgc3BlY2lmaWVkIGFzIGEgYm9vdCBwYXJhbWV0ZXIsIGl0IHNraXBzCit0aGUgcmVzdW1pbmcuCisKK0luIHRoZSBtZWFudGltZSB3aGlsZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZCB5b3Ugc2hvdWxkIG5vdCBhZGQvcmVtb3ZlIGFueQorb2YgdGhlIGhhcmR3YXJlLCB3cml0ZSB0byB0aGUgZmlsZXN5c3RlbXMsIGV0Yy4KKworU2xlZXAgc3RhdGVzIHN1bW1hcnkKKz09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgaW50ZXJmYWNlcyB5b3UgY2FuIHVzZSwgL3Byb2MvYWNwaSBzaG91bGQKK3dvcmsgbGlrZSB0aGlzOgorCitJbiBhIHJlYWxseSBwZXJmZWN0IHdvcmxkOgorZWNobyAxID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdGFuZGJ5CitlY2hvIDIgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gcmFtCitlY2hvIDMgPiAvcHJvYy9hY3BpL3NsZWVwICAgICAgICMgZm9yIHN1c3BlbmQgdG8gcmFtLCBidXQgd2l0aCBtb3JlIHBvd2VyIGNvbnNlcnZhdGl2ZQorZWNobyA0ID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICAjIGZvciBzdXNwZW5kIHRvIGRpc2sKK2VjaG8gNSA+IC9wcm9jL2FjcGkvc2xlZXAgICAgICAgIyBmb3Igc2h1dGRvd24gdW5mcmllbmRseSB0aGUgc3lzdGVtCisKK2FuZCBwZXJoYXBzCitlY2hvIDRiID4gL3Byb2MvYWNwaS9zbGVlcCAgICAgICMgZm9yIHN1c3BlbmQgdG8gZGlzayB2aWEgczRiaW9zCisKK0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitROiB3ZWxsLCBzdXNwZW5kaW5nIGEgc2VydmVyIGlzIElNSE8gYSByZWFsbHkgc3R1cGlkIHRoaW5nLAorYnV0Li4uIChEaWVnbyBadWNjYXRvKToKKworQTogWW91IGJvdWdodCBuZXcgVVBTIGZvciB5b3VyIHNlcnZlci4gSG93IGRvIHlvdSBpbnN0YWxsIGl0IHdpdGhvdXQKK2JyaW5naW5nIG1hY2hpbmUgZG93bj8gU3VzcGVuZCB0byBkaXNrLCByZWFycmFuZ2UgcG93ZXIgY2FibGVzLAorcmVzdW1lLgorCitZb3UgaGF2ZSB5b3VyIHNlcnZlciBvbiBVUFMuIFBvd2VyIGRpZWQsIGFuZCBVUFMgaXMgaW5kaWNhdGluZyAzMAorc2Vjb25kcyB0byBmYWlsdXJlLiBXaGF0IGRvIHlvdSBkbz8gU3VzcGVuZCB0byBkaXNrLgorCitFdGhlcm5ldCBjYXJkIGluIHlvdXIgc2VydmVyIGRpZWQuIFlvdSB3YW50IHRvIHJlcGxhY2UgaXQuIFlvdXIKK3NlcnZlciBpcyBub3QgaG90cGx1ZyBjYXBhYmxlLiBXaGF0IGRvIHlvdSBkbz8gU3VzcGVuZCB0byBkaXNrLAorcmVwbGFjZSBldGhlcm5ldCBjYXJkLCByZXN1bWUuIElmIHlvdSBhcmUgZmFzdCB5b3VyIHVzZXJzIHdpbGwgbm90CitldmVuIHNlZSBicm9rZW4gY29ubmVjdGlvbnMuCisKKworUTogTWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBidXQgd2h5IGRvbid0IHRoZSByZWd1bGFyIEkvTyBwYXRocyB3b3JrPworCitBOiBXZSBkbyB1c2UgdGhlIHJlZ3VsYXIgSS9PIHBhdGhzLiBIb3dldmVyIHdlIGNhbm5vdCByZXN0b3JlIHRoZSBkYXRhCit0byBpdHMgb3JpZ2luYWwgbG9jYXRpb24gYXMgd2UgbG9hZCBpdC4gVGhhdCB3b3VsZCBjcmVhdGUgYW4KK2luY29uc2lzdGVudCBrZXJuZWwgc3RhdGUgd2hpY2ggd291bGQgY2VydGFpbmx5IHJlc3VsdCBpbiBhbiBvb3BzLgorSW5zdGVhZCwgd2UgbG9hZCB0aGUgaW1hZ2UgaW50byB1bnVzZWQgbWVtb3J5IGFuZCB0aGVuIGF0b21pY2FsbHkgY29weQoraXQgYmFjayB0byBpdCBvcmlnaW5hbCBsb2NhdGlvbi4gVGhpcyBpbXBsaWVzLCBvZiBjb3Vyc2UsIGEgbWF4aW11bQoraW1hZ2Ugc2l6ZSBvZiBoYWxmIHRoZSBhbW91bnQgb2YgbWVtb3J5LgorCitUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyB0byB0aGlzOgorCisqIHJlcXVpcmUgaGFsZiBvZiBtZW1vcnkgdG8gYmUgZnJlZSBkdXJpbmcgc3VzcGVuZC4gVGhhdCB3YXkgeW91IGNhbgorcmVhZCAibmV3IiBkYXRhIG9udG8gZnJlZSBzcG90cywgdGhlbiBjbGkgYW5kIGNvcHkKKworKiBhc3N1bWUgd2UgaGFkIHNwZWNpYWwgInBvbGxpbmciIGlkZSBkcml2ZXIgdGhhdCBvbmx5IHVzZXMgbWVtb3J5CitiZXR3ZWVuIDAtNjQwS0IuIFRoYXQgd2F5LCBJJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCAwLTY0MEtCIGlzIGZyZWUKK2R1cmluZyBzdXNwZW5kaW5nLCBidXQgb3RoZXJ3aXNlIGl0IHdvdWxkIHdvcmsuLi4KKworc3VzcGVuZDIgc2hhcmVzIHRoaXMgZnVuZGFtZW50YWwgbGltaXRhdGlvbiwgYnV0IGRvZXMgbm90IGluY2x1ZGUgdXNlcgorZGF0YSBhbmQgZGlzayBjYWNoZXMgaW50byAidXNlZCBtZW1vcnkiIGJ5IHNhdmluZyB0aGVtIGluCithZHZhbmNlLiBUaGF0IG1lYW5zIHRoYXQgdGhlIGxpbWl0YXRpb24gZ29lcyBhd2F5IGluIHByYWN0aWNlLgorCitROiBEb2VzIGxpbnV4IHN1cHBvcnQgQUNQSSBTND8KKworQTogWWVzLiBUaGF0J3Mgd2hhdCBlY2hvIHBsYXRmb3JtID4gL3N5cy9wb3dlci9kaXNrIGRvZXMuCisKK1E6IE15IG1hY2hpbmUgZG9lc24ndCB3b3JrIHdpdGggQUNQSS4gSG93IGNhbiBJIHVzZSBzd3N1c3AgdGhhbiA/CisKK0E6IERvIGEgcmVib290KCkgc3lzY2FsbCB3aXRoIHJpZ2h0IHBhcmFtZXRlcnMuIFdhcm5pbmc6IGdsaWJjIGdldHMgaW4KK2l0cyB3YXksIHNvIGNoZWNrIHdpdGggc3RyYWNlOgorCityZWJvb3QoTElOVVhfUkVCT09UX01BR0lDMSwgTElOVVhfUkVCT09UX01BR0lDMiwgMHhkMDAwZmNlMikKKworKFRoYW5rcyB0byBQZXRlciBPc3Rlcmx1bmQ6KQorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzY2FsbC5oPgorCisjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzEgICAgIDB4ZmVlMWRlYWQKKyNkZWZpbmUgTElOVVhfUkVCT09UX01BR0lDMiAgICAgNjcyMjc0NzkzCisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORCAgICAgMHhEMDAwRkNFMgorCitpbnQgbWFpbigpCit7CisgICAgc3lzY2FsbChTWVNfcmVib290LCBMSU5VWF9SRUJPT1RfTUFHSUMxLCBMSU5VWF9SRUJPT1RfTUFHSUMyLAorICAgICAgICAgICAgTElOVVhfUkVCT09UX0NNRF9TV19TVVNQRU5ELCAwKTsKKyAgICByZXR1cm4gMDsKK30KKworQWxzbyAvc3lzLyBpbnRlcmZhY2Ugc2hvdWxkIGJlIHN0aWxsIHByZXNlbnQuCisKK1E6IFdoYXQgaXMgJ3N1c3BlbmQyJz8KKworQTogc3VzcGVuZDIgaXMgJ1NvZnR3YXJlIFN1c3BlbmQgMicsIGEgZm9ya2VkIGltcGxlbWVudGF0aW9uIG9mCitzdXNwZW5kLXRvLWRpc2sgd2hpY2ggaXMgYXZhaWxhYmxlIGFzIHNlcGFyYXRlIHBhdGNoZXMgZm9yIDIuNCBhbmQgMi42CitrZXJuZWxzIGZyb20gc3dzdXNwLnNvdXJjZWZvcmdlLm5ldC4gSXQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgU01QLCA0R0IKK2hpZ2htZW0gYW5kIHByZWVtcHRpb24uIEl0IGFsc28gaGFzIGEgZXh0ZW5zaWJsZSBhcmNoaXRlY3R1cmUgdGhhdAorYWxsb3dzIGZvciBhcmJpdHJhcnkgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBpbWFnZSAoY29tcHJlc3Npb24sCitlbmNyeXB0aW9uKSBhbmQgYXJiaXRyYXJ5IGJhY2tlbmRzIGZvciB3cml0aW5nIHRoZSBpbWFnZSAoZWcgdG8gc3dhcAorb3IgYW4gTkZTIHNoYXJlW1dvcmsgSW4gUHJvZ3Jlc3NdKS4gUXVlc3Rpb25zIHJlZ2FyZGluZyBzdXNwZW5kMgorc2hvdWxkIGJlIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCBhdmFpbGFibGUgdGhyb3VnaCB0aGUgc3VzcGVuZDIKK3dlYnNpdGUsIGFuZCBub3QgdG8gdGhlIExpbnV4IEtlcm5lbCBNYWlsaW5nIExpc3QuIFdlIGFyZSB3b3JraW5nCit0b3dhcmQgbWVyZ2luZyBzdXNwZW5kMiBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwuCisKK1E6IEEga2VybmVsIHRocmVhZCBtdXN0IHZvbHVudGFyaWx5IGZyZWV6ZSBpdHNlbGYgKGNhbGwgJ3JlZnJpZ2VyYXRvcicpLgorSSBmb3VuZCBzb21lIGtlcm5lbCB0aHJlYWRzIHRoYXQgZG9uJ3QgZG8gaXQsIGFuZCB0aGV5IGRvbid0IGZyZWV6ZQorc28gdGhlIHN5c3RlbSBjYW4ndCBzbGVlcC4gSXMgdGhpcyBhIGtub3duIGJlaGF2aW9yPworCitBOiBBbGwgc3VjaCBrZXJuZWwgdGhyZWFkcyBuZWVkIHRvIGJlIGZpeGVkLCBvbmUgYnkgb25lLiBTZWxlY3QgdGhlCitwbGFjZSB3aGVyZSB0aGUgdGhyZWFkIGlzIHNhZmUgdG8gYmUgZnJvemVuIChubyBrZXJuZWwgc2VtYXBob3Jlcworc2hvdWxkIGJlIGhlbGQgYXQgdGhhdCBwb2ludCBhbmQgaXQgbXVzdCBiZSBzYWZlIHRvIHNsZWVwIHRoZXJlKSwgYW5kCithZGQ6CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkKKyAgICAgICAgICAgICAgICAgICAgcmVmcmlnZXJhdG9yKFBGX0ZSRUVaRSk7CisKK0lmIHRoZSB0aHJlYWQgaXMgbmVlZGVkIGZvciB3cml0aW5nIHRoZSBpbWFnZSB0byBzdG9yYWdlLCB5b3Ugc2hvdWxkCitpbnN0ZWFkIHNldCB0aGUgUEZfTk9GUkVFWkUgcHJvY2VzcyBmbGFnIHdoZW4gY3JlYXRpbmcgdGhlIHRocmVhZC4KKworCitROiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYmV0d2VlbiAicGxhdGZvcm0iLCAic2h1dGRvd24iIGFuZAorImZpcm13YXJlIiBpbiAvc3lzL3Bvd2VyL2Rpc2s/CisKK0E6CisKK3NodXRkb3duOiBzYXZlIHN0YXRlIGluIGxpbnV4LCB0aGVuIHRlbGwgYmlvcyB0byBwb3dlcmRvd24KKworcGxhdGZvcm06IHNhdmUgc3RhdGUgaW4gbGludXgsIHRoZW4gdGVsbCBiaW9zIHRvIHBvd2VyZG93biBhbmQgYmxpbmsKKyAgICAgICAgICAic3VzcGVuZGVkIGxlZCIKKworZmlybXdhcmU6IHRlbGwgYmlvcyB0byBzYXZlIHN0YXRlIGl0c2VsZiBbbmVlZHMgQklPUy1zcGVjaWZpYyBzdXNwZW5kCisJICBwYXJ0aXRpb24sIGFuZCBoYXMgdmVyeSBsaXR0bGUgdG8gZG8gd2l0aCBzd3N1c3BdCisKKyJwbGF0Zm9ybSIgaXMgYWN0dWFsbHkgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCAic2h1dGRvd24iIGlzIG1vc3QKK3JlbGlhYmxlLgorCitROiBJIGRvIG5vdCB1bmRlcnN0YW5kIHdoeSB5b3UgaGF2ZSBzdWNoIHN0cm9uZyBvYmplY3Rpb25zIHRvIGlkZWEgb2YKK3NlbGVjdGl2ZSBzdXNwZW5kLgorCitBOiBEbyBzZWxlY3RpdmUgc3VzcGVuZCBkdXJpbmcgcnVudGltZSBwb3dlciBtYW5hZ21lbnQsIHRoYXQncyBva2F5LiBCdXQKK2l0cyB1c2VsZXNzIGZvciBzdXNwZW5kLXRvLWRpc2suIChBbmQgSSBkbyBub3Qgc2VlIGhvdyB5b3UgY291bGQgdXNlCitpdCBmb3Igc3VzcGVuZC10by1yYW0sIEkgaG9wZSB5b3UgZG8gbm90IHdhbnQgdGhhdCkuCisKK0xldHMgc2VlLCBzbyB5b3Ugc3VnZ2VzdCB0bworCisqIFNVU1BFTkQgYWxsIGJ1dCBzd2FwIGRldmljZSBhbmQgcGFyZW50cworKiBTbmFwc2hvdAorKiBXcml0ZSBpbWFnZSB0byBkaXNrCisqIFNVU1BFTkQgc3dhcCBkZXZpY2UgYW5kIHBhcmVudHMKKyogUG93ZXJkb3duCisKK09oIG5vLCB0aGF0IGRvZXMgbm90IHdvcmssIGlmIHN3YXAgZGV2aWNlIG9yIGl0cyBwYXJlbnRzIHVzZXMgRE1BLAoreW91J3ZlIGNvcnJ1cHRlZCBkYXRhLiBZb3UnZCBoYXZlIHRvIGRvCisKKyogU1VTUEVORCBhbGwgYnV0IHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCisqIEZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cworKiBTbmFwc2hvdAorKiBVTkZSRUVaRSBzd2FwIGRldmljZSBhbmQgcGFyZW50cworKiBXcml0ZQorKiBTVVNQRU5EIHN3YXAgZGV2aWNlIGFuZCBwYXJlbnRzCisKK1doaWNoIG1lYW5zIHRoYXQgeW91IHN0aWxsIG5lZWQgdGhhdCBGUkVFWkUgc3RhdGUsIGFuZCB5b3UgZ2V0IG1vcmUKK2NvbXBsaWNhdGVkIGNvZGUuIChBbmQgSSBoYXZlIG5vdCB5ZXQgaW50cm9kdWNlIGRldGFpbHMgbGlrZSBzeXN0ZW0KK2RldmljZXMpLgorCitROiBUaGVyZSBkb24ndCBzZWVtIHRvIGJlIGFueSBnZW5lcmFsbHkgdXNlZnVsIGJlaGF2aW9yYWwKK2Rpc3RpbmN0aW9ucyBiZXR3ZWVuIFNVU1BFTkQgYW5kIEZSRUVaRS4KKworQTogRG9pbmcgU1VTUEVORCB3aGVuIHlvdSBhcmUgYXNrZWQgdG8gZG8gRlJFRVpFIGlzIGFsd2F5cyBjb3JyZWN0LAorYnV0IGl0IG1heSBiZSB1bm5lY2Nlc3NhcmlseSBzbG93LiBJZiB5b3Ugd2FudCBVU0IgdG8gc3RheSBzaW1wbGUsCitzbG93bmVzcyBtYXkgbm90IG1hdHRlciB0byB5b3UuIEl0IGNhbiBhbHdheXMgYmUgZml4ZWQgbGF0ZXIuCisKK0ZvciBkZXZpY2VzIGxpa2UgZGlzayBpdCBkb2VzIG1hdHRlciwgeW91IGRvIG5vdCB3YW50IHRvIHNwaW5kb3duIGZvcgorRlJFRVpFLgorCitROiBBZnRlciByZXN1bWluZywgc3lzdGVtIGlzIHBhZ2luZyBoZWF2aWxseSwgbGVhZGluZyB0byB2ZXJ5IGJhZCBpbnRlcmFjdGl2aXR5LgorCitBOiBUcnkgcnVubmluZworCitjYXQgYGNhdCAvcHJvYy9bMC05XSovbWFwcyB8IGdyZXAgLyB8IHNlZCAnczouKiAvOi86JyB8IHNvcnQgLXVgID4gL2Rldi9udWxsCisKK2FmdGVyIHJlc3VtZS4gc3dhcG9mZiAtYTsgc3dhcG9uIC1hIG1heSBhbHNvIGJlIHVzZWZ1bGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3RyaWNrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3RyaWNrcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkNThkMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdHJpY2tzLnR4dApAQCAtMCwwICsxLDI3IEBACisJc3dzdXNwL1MzIHRyaWNrcworCX5+fn5+fn5+fn5+fn5+fn4KK1BhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKworSWYgeW91IHdhbnQgdG8gdHJpY2sgc3dzdXNwL1MzIGludG8gd29ya2luZywgeW91IG1pZ2h0IHdhbnQgdG8gdHJ5OgorCisqIGdvIHdpdGggbWluaW1hbCBjb25maWcsIHR1cm4gb2ZmIGRyaXZlcnMgbGlrZSBVU0IsIEFHUCB5b3UgZG9uJ3QKKyAgcmVhbGx5IG5lZWQKKworKiB0dXJuIG9mZiBBUElDIGFuZCBwcmVlbXB0CisKKyogdXNlIGV4dDIuIEF0IGxlYXN0IGl0IGhhcyB3b3JraW5nIGZzY2suIFtJZiBzb21ldGhpbmcgc2VlbWVzIHRvIGdvCisgIHdyb25nLCBmb3JjZSBmc2NrIHdoZW4geW91IGhhdmUgYSBjaGFuY2VdCisKKyogdHVybiBvZmYgbW9kdWxlcworCisqIHVzZSB2Z2EgdGV4dCBjb25zb2xlLCBzaHV0IGRvd24gWC4gW0lmIHlvdSByZWFsbHkgd2FudCBYLCB5b3UgbWlnaHQKKyAgd2FudCB0byB0cnkgdmVzYWZiIGxhdGVyXQorCisqIHRyeSBydW5uaW5nIGFzIGZldyBwcm9jZXNzZXMgYXMgcG9zc2libGUsIHByZWZlcmFibHkgZ28gdG8gc2luZ2xlCisgIHVzZXIgbW9kZS4KKworKiBkdWUgdG8gdmlkZW8gaXNzdWVzLCBzd3N1c3Agc2hvdWxkIGJlIGVhc2llciB0byBnZXQgd29ya2luZyB0aGFuCisgIFMzLiBUcnkgdGhhdCBmaXJzdC4KKworV2hlbiB5b3UgbWFrZSBpdCB3b3JrLCB0cnkgdG8gZmluZCBvdXQgd2hhdCBleGFjdGx5IHdhcyBpdCB0aGF0IGJyb2tlCitzdXNwZW5kLCBhbmQgcHJlZmVyYWJseSBmaXggdGhhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4Njk2OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CkBAIC0wLDAgKzEsMTY5IEBACisKKwkJVmlkZW8gaXNzdWVzIHdpdGggUzMgcmVzdW1lCisJCX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgIDIwMDMtMjAwNSwgUGF2ZWwgTWFjaGVrCisKK0R1cmluZyBTMyByZXN1bWUsIGhhcmR3YXJlIG5lZWRzIHRvIGJlIHJlaW5pdGlhbGl6ZWQuIEZvciBtb3N0CitkZXZpY2VzLCB0aGlzIGlzIGVhc3ksIGFuZCBrZXJuZWwgZHJpdmVyIGtub3dzIGhvdyB0byBkbworaXQuIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBvbmUgZXhjZXB0aW9uOiB2aWRlbyBjYXJkLiBUaG9zZSBhcmUgdXN1YWxseQoraW5pdGlhbGl6ZWQgYnkgQklPUywgYW5kIGtlcm5lbCBkb2VzIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0bworYm9vdCB2aWRlbyBjYXJkLiAoS2VybmVsIHVzdWFsbHkgZG9lcyBub3QgZXZlbiBjb250YWluIHZpZGVvIGNhcmQKK2RyaXZlciAtLSB2ZXNhZmIgYW5kIHZnYWNvbiBhcmUgd2lkZWx5IHVzZWQpLgorCitUaGlzIGlzIG5vdCBwcm9ibGVtIGZvciBzd3N1c3AsIGJlY2F1c2UgZHVyaW5nIHN3c3VzcCByZXN1bWUsIEJJT1MgaXMKK3J1biBub3JtYWxseSBzbyB2aWRlbyBjYXJkIGlzIG5vcm1hbGx5IGluaXRpYWxpemVkLiBTMyBoYXMgYWJzb2x1dGVseQorbm8gY2hhbmNlIG9mIHdvcmtpbmcgd2l0aCBTTVAvSFQuIEJlIHN1cmUgaXQgdG8gdHVybiBpdCBvZmYgYmVmb3JlCit0ZXN0aW5nIChzd3N1c3Agc2hvdWxkIHdvcmsgb2ssIE9UT0gpLgorCitUaGVyZSBhcmUgYSBmZXcgdHlwZXMgb2Ygc3lzdGVtcyB3aGVyZSB2aWRlbyB3b3JrcyBhZnRlciBTMyByZXN1bWU6CisKKygxKSBzeXN0ZW1zIHdoZXJlIHZpZGVvIHN0YXRlIGlzIHByZXNlcnZlZCBvdmVyIFMzLgorCisoMikgc3lzdGVtcyB3aGVyZSBpdCBpcyBwb3NzaWJsZSB0byBjYWxsIHRoZSB2aWRlbyBCSU9TIGR1cmluZyBTMworICByZXN1bWUuIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBjb3JyZWN0IHRvIGNhbGwgdGhlIHZpZGVvIEJJT1MgYXQKKyAgdGhhdCBwb2ludCwgYnV0IGl0IGhhcHBlbnMgdG8gd29yayBvbiBzb21lIG1hY2hpbmVzLiBVc2UKKyAgYWNwaV9zbGVlcD1zM19iaW9zLgorCisoMykgc3lzdGVtcyB0aGF0IGluaXRpYWxpemUgdmlkZW8gY2FyZCBpbnRvIHZnYSB0ZXh0IG1vZGUgYW5kIHdoZXJlCisgIHRoZSBCSU9TIHdvcmtzIHdlbGwgZW5vdWdoIHRvIGJlIGFibGUgdG8gc2V0IHZpZGVvIG1vZGUuIFVzZQorICBhY3BpX3NsZWVwPXMzX21vZGUgb24gdGhlc2UuCisKKyg0KSBvbiBzb21lIHN5c3RlbXMgczNfYmlvcyBraWNrcyB2aWRlbyBpbnRvIHRleHQgbW9kZSwgYW5kCisgIGFjcGlfc2xlZXA9czNfYmlvcyxzM19tb2RlIGlzIG5lZWRlZC4KKworKDUpIHJhZGVvbiBzeXN0ZW1zLCB3aGVyZSBYIGNhbiBzb2Z0LWJvb3QgeW91ciB2aWRlbyBjYXJkLiBZb3UnbGwgbmVlZAorICBuZXcgZW5vdWdoIFgsIGFuZCBwbGFpbiB0ZXh0IGNvbnNvbGUgKG5vIHZlc2FmYiBvciByYWRlb25mYiksIHNlZQorICBodHRwOi8vd3d3LmRvZXNpLmdteGhvbWUuZGUvbGludXgvdG04MDBzMy9zMy5odG1sLiBBY3R1YWxseSB5b3UKKyAgc2hvdWxkIHByb2JhYmx5IHVzZSB2YmV0b29sICg2KSBpbnN0ZWFkLgorCisoNikgb3RoZXIgcmFkZW9uIHN5c3RlbXMsIHdoZXJlIHZiZXRvb2wgaXMgZW5vdWdoIHRvIGJyaW5nIHN5c3RlbSBiYWNrCisgIHRvIGxpZmUuIEl0IG5lZWRzIHRleHQgY29uc29sZSB0byBiZSB3b3JraW5nLiBEbyB2YmV0b29sIHZiZXN0YXRlCisgIHNhdmUgPiAvdG1wL2RlbG1lOyBlY2hvIDMgPiAvcHJvYy9hY3BpL3NsZWVwOyB2YmV0b29sIHBvc3Q7IHZiZXRvb2wKKyAgdmJlc3RhdGUgcmVzdG9yZSA8IC90bXAvZGVsbWU7IHNldGZvbnQgPHdoYXRldmVyPiwgYW5kIHlvdXIgdmlkZW8KKyAgc2hvdWxkIHdvcmsuCisKKyg3KSBvbiBzb21lIHN5c3RlbXMsIGl0IGlzIHBvc3NpYmxlIHRvIGJvb3QgbW9zdCBvZiBrZXJuZWwsIGFuZCB0aGVuCisgIFBPU1RpbmcgYmlvcyB3b3Jrcy4gT2xlIFJvaG5lIGhhcyBwYXRjaCB0byBkbyBqdXN0IHRoYXQgYXQKKyAgaHR0cDovL2Rldi5nZW50b28ub3JnL35tYXJpbmVhbS9wYXRjaC1yYWRlb25mYi0yLjYuMTEtcmMyLW1tMi4KKworTm93LCBpZiB5b3UgcGFzcyBhY3BpX3NsZWVwPXNvbWV0aGluZywgYW5kIGl0IGRvZXMgbm90IHdvcmsgd2l0aCB5b3VyCitiaW9zLCB5b3UnbGwgZ2V0IGEgaGFyZCBjcmFzaCBkdXJpbmcgcmVzdW1lLiBCZSBjYXJlZnVsLiBBbHNvIGl0IGlzCitzYWZlc3QgdG8gZG8geW91ciBleHBlcmltZW50cyB3aXRoIHBsYWluIG9sZCBWR0EgY29uc29sZS4gVGhlIHZlc2FmYgorYW5kIHJhZGVvbmZiIChldGMpIGRyaXZlcnMgaGF2ZSBhIHRlbmRlbmN5IHRvIGNyYXNoIHRoZSBtYWNoaW5lIGR1cmluZworcmVzdW1lLgorCitZb3UgbWF5IGhhdmUgYSBzeXN0ZW0gd2hlcmUgbm9uZSBvZiBhYm92ZSB3b3Jrcy4gQXQgdGhhdCBwb2ludCB5b3UKK2VpdGhlciBpbnZlbnQgYW5vdGhlciB1Z2x5IGhhY2sgdGhhdCB3b3Jrcywgb3Igd3JpdGUgcHJvcGVyIGRyaXZlciBmb3IKK3lvdXIgdmlkZW8gY2FyZCAoZ29vZCBsdWNrIGdldHRpbmcgZG9jcyA6LSgpLiBNYXliZSBzdXNwZW5kaW5nIGZyb20gWAorKHByb3BlciBYLCBrbm93aW5nIHlvdXIgaGFyZHdhcmUsIG5vdCBYRjY4X0ZCY29uKSBtaWdodCBoYXZlIGJldHRlcgorY2hhbmNlIG9mIHdvcmtpbmcuCisKK1RhYmxlIG9mIGtub3duIHdvcmtpbmcgc3lzdGVtczoKKworTW9kZWwgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWNrIChvciAiaG93IHRvIGRvIGl0IikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWNlciBBc3BpcmUgMTQwNkxDCQlvbGUncyBsYXRlIEJJT1MgaW5pdCAoNyksIHR1cm4gb2ZmIERSSQorQWNlciBUTSAyNDJGWAkJCXZiZXRvb2wgKDYpCitBY2VyIFRNIEMzMDAgICAgICAgICAgICAgICAgICAgIHZnYT1ub3JtYWwgKG9ubHkgc3VzcGVuZCBvbiBjb25zb2xlLCBub3QgaW4gWCksIHZiZXRvb2wgKDYpCitBY2VyIFRNIDQwNTJMQ2kJCSAgICAgICAgczNfYmlvcyAoMikKK0FjZXIgVE0gNjM2TGNpCQkJczNfYmlvcyB2Z2E9bm9ybWFsICgyKQorQWNlciBUTSA2NTAgKFJhZGVvbiBNNykJCXZnYT1ub3JtYWwgcGx1cyBib290LXJhZGVvbiAoNSkgZ2V0cyB0ZXh0IGNvbnNvbGUgYmFjaworQWNlciBUTSA2NjAJCQk/Pz8gKCopCitBY2VyIFRNIDgwMAkJCXZnYT1ub3JtYWwsIFggcGF0Y2hlcywgc2VlIHdlYnBhZ2UgKDUpIG9yIHZiZXRvb2wgKDYpCitBY2VyIFRNIDgwMwkJCXZnYT1ub3JtYWwsIFggcGF0Y2hlcywgc2VlIHdlYnBhZ2UgKDUpIG9yIHZiZXRvb2wgKDYpCitBY2VyIFRNIDgwM0xDaQkJCXZnYT1ub3JtYWwsIHZiZXRvb2wgKDYpCitBcmltYSBXNzMwYQkJCXZiZXRvb2wgbmVlZGVkICg2KQorQXN1cyBMMjQwMEQgICAgICAgICAgICAgICAgICAgICBzM19tb2RlICgzKSgqKiopIChTMSBhbHNvIHdvcmtzIE9LKQorQXN1cyBMMzgwMEMgKFJhZGVvbiBNNykJCXMzX2Jpb3MgKDIpIChTMSBhbHNvIHdvcmtzIE9LKQorQXN1cyBNNk5FCQkJPz8/ICgqKQorQXRobG9uNjQgZGVza3RvcCBwcm90b3R5cGUJczNfYmlvcyAoMikKK0NvbXBhbCBDTC01MAkJCT8/PyAoKikKK0NvbXBhcSBBcm1hZGEgRTUwMCAtIFAzLTcwMCAgICAgbm9uZSAoMSkgKFMxIGFsc28gd29ya3MgT0spCitDb21wYXEgRXZvIE42MjBjCQl2Z2E9bm9ybWFsLCBzM19iaW9zICgyKQorRGVsbCA2MDBtLCBBVEkgUjI1MCBMZgkJbm9uZSAoMSksIGJ1dCBuZWVkcyB4b3JnLXgxMS02LjguMS45MDItMQorRGVsbCBENjAwLCBBVEkgUlYyNTAgICAgICAgICAgICB2Z2E9bm9ybWFsIGFuZCBYLCBvciB0cnkgdmJlc3RhdGUgKDYpCitEZWxsIEluc3Bpcm9uIDQwMDAJCT8/PyAoKikKK0RlbGwgSW5zcGlyb24gNTAwbQkJPz8/ICgqKQorRGVsbCBJbnNwaXJvbiA2MDBtCQk/Pz8gKCopCitEZWxsIEluc3Bpcm9uIDgyMDAJCT8/PyAoKikKK0RlbGwgSW5zcGlyb24gODUwMAkJPz8/ICgqKQorRGVsbCBJbnNwaXJvbiA4NjAwCQk/Pz8gKCopCitlTWFjaGluZXMgYXRobG9uNjQgbWFjaGluZXMJdmJldG9vbCBuZWVkZWQgKDYpIChzb21lb25lIHBsZWFzZSBnZXQgbWUgbW9kZWwgI3MpCitIUCBOQzYwMDAJCQlzM19iaW9zLCBtYXkgbm90IHVzZSByYWRlb25mYiAoMik7IG9yIHZiZXRvb2wgKDYpCitIUCBOWDcwMDAJCQk/Pz8gKCopCitIUCBQYXZpbGlvbiBaRDcwMDAJCXZiZXRvb2wgcG9zdCBuZWVkZWQsIG5lZWQgb3Blbi1zb3VyY2UgbnYgZHJpdmVyIGZvciBYCitIUCBPbW5pYm9vayBYRTMJYXRobG9uIHZlcnNpb24Jbm9uZSAoMSkKK0hQIE9tbmlib29rIFhFM0dDCQlub25lICgxKSwgdmlkZW8gaXMgUzMgU2F2YWdlL0lYLU1WCitJQk0gVFAgVDIwLCBtb2RlbCAyNjQ3LTQ0Rwlub25lICgxKSwgdmlkZW8gaXMgUzMgSW5jLiA4NkMyNzAtMjk0IFNhdmFnZS9JWC1NViwgdmVzYWZiIGdldHMgImludGVyZXN0aW5nIiBidXQgWCB3b3JrLgorSUJNIFRQIEEzMSAvIFR5cGUgMjY1Mi1NNUcgICAgICBzM19tb2RlICgzKSBbd29ya3Mgb2sgd2l0aCBCSU9TIDEuMDQgMjAwMi0wOC0yMywgYnV0IG5vdCBhdCBhbGwgd2l0aCBCSU9TIDEuMTEgMjAwNC0xMS0wNSA6LShdCitJQk0gVFAgUjMyIC8gVHlwZSAyNjU4LU1NRyAgICAgIG5vbmUgKDEpCitJQk0gVFAgUjQwIDI3MjJCM0cJCT8/PyAoKikKK0lCTSBUUCBSNTBwIC8gVHlwZSAxODMyLTIyVSAgICAgczNfYmlvcyAoMikKK0lCTSBUUCBSNTEJCQk/Pz8gKCopCitJQk0gVFAgVDMwCTIzNjY4MUEJCT8/PyAoKikKK0lCTSBUUCBUNDAgLyBUeXBlIDIzNzMtTVU0ICAgICAgbm9uZSAoMSkKK0lCTSBUUCBUNDBwCQkJbm9uZSAoMSkKK0lCTSBUUCBSNDBwCQkJczNfYmlvcyAoMikKK0lCTSBUUCBUNDFwCQkJczNfYmlvcyAoMiksIHN3aXRjaCB0byBYIGFmdGVyIHJlc3VtZQorSUJNIFRQIFQ0MgkJCT8/PyAoKikKK0lCTSBUaGlua1BhZCBUNDJwICgyMzczLUdURykJczNfYmlvcyAoMikKK0lCTSBUUCBYMjAJCQk/Pz8gKCopCitJQk0gVFAgWDMwCQkJPz8/ICgqKQorSUJNIFRQIFgzMSAvIFR5cGUgMjY3Mi1YWEggICAgICBub25lICgxKSwgdXNlIHJhZGVvbnRvb2wgKGh0dHA6Ly9mZGQuY29tL3NvZnR3YXJlL3JhZGVvbi8pIHRvIHR1cm4gb2ZmIGJhY2tsaWdodC4KK0lCTSBUaGlua3BhZCBYNDAgVHlwZSAyMzcxLTdKRyAgczNfYmlvcyxzM19tb2RlICg0KQorTWVkaW9uIE1ENDIyMAkJCT8/PyAoKikKK1NhbXN1bmcgUDM1CQkJdmJldG9vbCBuZWVkZWQgKDYpCitTaGFycCBQQy1BUjEwIChBVEkgcmFnZSkJbm9uZSAoMSkKK1NvbnkgVmFpbyBQQ0ctRjQwMwkJPz8/ICgqKQorU29ueSBWYWlvIFBDRy1ONTA1U04JCT8/PyAoKikKK1NvbnkgVmFpbyB2Z24tczI2MAkJWCBvciBib290LXJhZGVvbiBjYW4gaW5pdCBpdCAoNSkKK1Rvc2hpYmEgTGlicmV0dG8gTDUJCW5vbmUgKDEpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDMwQ0RUCXMzX21vZGUgKDMpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDgwWENEVCAgICAgIHMzX21vZGUgKDMpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDkwWENEVCAgICAgID8/PyAoKikKK1Rvc2hpYmEgU2F0ZWxsaXRlIFAxMC01NTQgICAgICAgczNfYmlvcyxzM19tb2RlICg0KSgqKioqKQorVW5pd2lsbCAyNDRJSU8JCQk/Pz8gKCopCisKKworKCopIGZyb20gaHR0cDovL3d3dy51YnVudHVsaW51eC5vcmcvd2lraS9Ib2FyeVBNUmVzdWx0cywgbm90IHN1cmUKKyAgICB3aGljaCBvcHRpb25zIHRvIHVzZS4gSWYgeW91IGtub3csIHBsZWFzZSB0ZWxsIG1lLgorCisoKioqKSBUbyBiZSB0ZXN0ZWQgd2l0aCBhIG5ld2VyIGtlcm5lbC4KKworKCoqKiopIE5vdCB3aXRoIFNNUCBrZXJuZWwsIFVQIG9ubHkuCisKK1ZCRXRvb2wgZGV0YWlscworfn5+fn5+fn5+fn5+fn5+Cisod2l0aCB0aGFua3MgdG8gQ2FybC1EYW5pZWwgSGFpbGZpbmdlcikKKworRmlyc3QsIGJvb3QgaW50byBYIGFuZCBydW4gdGhlIGZvbGxvd2luZyBzY3JpcHQgT05DRToKKyMhL2Jpbi9iYXNoCitzdGF0ZWRpcj0vcm9vdC9zMy9zdGF0ZQorbWtkaXIgLXAgJHN0YXRlZGlyCitjaHZ0IDIKK3NsZWVwIDEKK3ZiZXRvb2wgdmJlc3RhdGUgc2F2ZSA+JHN0YXRlZGlyL3ZiZQorCisKK1RvIHN1c3BlbmQgYW5kIHJlc3VtZSBwcm9wZXJseSwgY2FsbCB0aGUgZm9sbG93aW5nIHNjcmlwdCBhcyByb290OgorIyEvYmluL2Jhc2gKK3N0YXRlZGlyPS9yb290L3MzL3N0YXRlCitjdXJjb25zPWBmZ2NvbnNvbGVgCitmdXNlciAvZGV2L3R0eSRjdXJjb25zIDI+L2Rldi9udWxsfHhhcmdzIHBzIC1vIGNvbW09IC1wfGdyZXAgLXEgWCAmJiBjaHZ0IDIKK2NhdCAvZGV2L3Zjc2EgPiRzdGF0ZWRpci92Y3NhCitzeW5jCitlY2hvIDMgPi9wcm9jL2FjcGkvc2xlZXAKK3N5bmMKK3ZiZXRvb2wgcG9zdAordmJldG9vbCB2YmVzdGF0ZSByZXN0b3JlIDwkc3RhdGVkaXIvdmJlCitjYXQgJHN0YXRlZGlyL3Zjc2EgPi9kZXYvdmNzYQorcmNrYmQgcmVzdGFydAorY2h2dCAkW2N1cmNvbnMlNisxXQorY2h2dCAkY3VyY29ucworCisKK1VubGVzcyB5b3UgY2hhbmdlIHlvdXIgZ3JhcGhpY3MgY2FyZCBvciBvdGhlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLAordGhlIHN0YXRlIG9uY2Ugc2F2ZWQgd2lsbCBiZSBPSyBmb3IgZXZlcnkgcmVzdW1lIGFmdGVyd2FyZHMuCitOT1RFOiBUaGUgInJja2JkIHJlc3RhcnQiIGNvbW1hbmQgbWF5IGJlIGRpZmZlcmVudCBmb3IgeW91cgorZGlzdHJpYnV0aW9uLiBTaW1wbHkgcmVwbGFjZSBpdCB3aXRoIHRoZSBjb21tYW5kIHlvdSB3b3VsZCB1c2UgdG8KK3NldCB0aGUgZm9udHMgb24gc2NyZWVuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlb19leHRlbnNpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlb19leHRlbnNpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzNkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvX2V4dGVuc2lvbi50eHQKQEAgLTAsMCArMSwzNCBAQAorVGhpcyBkcml2ZXIgaW1wbGVtZW50IHRoZSBBQ1BJIEV4dGVuc2lvbnMgRm9yIERpc3BsYXkgQWRhcHRlcnMKK2ZvciBpbnRlZ3JhdGVkIGdyYXBoaWNzIGRldmljZXMgb24gbW90aGVyYm9hcmQsIGFzIHNwZWNpZmllZCBpbgorQUNQSSAyLjAgU3BlY2lmaWNhdGlvbiwgQXBwZW5kaXggQiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBzb21lIGJhc2ljCitjb250cm9sIGxpa2UgZGVmaW5pbmcgdGhlIHZpZGVvIFBPU1QgZGV2aWNlLCByZXRyaWV2aW5nIEVESUQgaW5mb3JtYXRpb24KK29yIHRvIHNldHVwIGEgdmlkZW8gb3V0cHV0LCBldGMuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiByZWYuIGltcGxlbWVudGF0aW9uIG9ubHkuCitJdCBtYXkgb3IgbWF5IG5vdCB3b3JrIGZvciB5b3VyIGludGVncmF0ZWQgdmlkZW8gZGV2aWNlLgorCitJbnRlcmZhY2VzIGV4cG9zZWQgdG8gdXNlcmxhbmQgdGhyb3VnaCAvcHJvYy9hY3BpL3ZpZGVvOgorCitWR0EvaW5mbyA6IGRpc3BsYXkgdGhlIHN1cHBvcnRlZCB2aWRlbyBidXMgZGV2aWNlIGNhcGFiaWxpdHkgbGlrZSAsVmlkZW8gUk9NLCBDUlQvTENEL1RWLgorVkdBL1JPTSA6ICBVc2VkIHRvIGdldCBhIGNvcHkgb2YgdGhlIGRpc3BsYXkgZGV2aWNlcycgUk9NIGRhdGEgKHVwIHRvIDRrKS4KK1ZHQS9QT1NUX2luZm8gOiBVc2VkIHRvIGRldGVybWluZSB3aGF0IG9wdGlvbnMgYXJlIGltcGxlbWVudGVkLgorVkdBL1BPU1QgOiBVc2VkIHRvIGdldC9zZXQgUE9TVCBkZXZpY2UuCitWR0EvRE9TIDogVXNlZCB0byBnZXQvc2V0IG93bmVyc2hpcCBvZiBvdXRwdXQgc3dpdGNoaW5nOgorCVBsZWFzZSByZWZlciBBQ1BJIHNwZWMgQi40LjEgX0RPUworVkdBL0NSVCA6IENSVCBvdXRwdXQKK1ZHQS9MQ0QgOiBMQ0Qgb3V0cHV0CitWR0EvVFYgOiBUViBvdXRwdXQgCitWR0EvKi9icmlnaHRuZXNzIDogVXNlZCB0byBnZXQvc2V0IGJyaWdodG5lc3Mgb2Ygb3V0cHV0IGRldmljZQorCitOb3RpZnkgZXZlbnQgdGhyb3VnaCAvcHJvYy9hY3BpL2V2ZW50OgorCisjZGVmaW5lIEFDUElfVklERU9fTk9USUZZX1NXSVRDSCAgICAgICAgMHg4MAorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9QUk9CRSAgICAgICAgIDB4ODEKKyNkZWZpbmUgQUNQSV9WSURFT19OT1RJRllfQ1lDTEUgICAgICAgICAweDgyCisjZGVmaW5lIEFDUElfVklERU9fTk9USUZZX05FWFRfT1VUUFVUICAgMHg4MworI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9QUkVWX09VVFBVVCAgIDB4ODQKKworI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9DWUNMRV9CUklHSFRORVNTICAgICAgMHg4MgorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9JTkNfQlJJR0hUTkVTUyAgICAgICAgMHg4MworI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ERUNfQlJJR0hUTkVTUyAgICAgICAgMHg4NAorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9aRVJPX0JSSUdIVE5FU1MgICAgICAgMHg4NQorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ESVNQTEFZX09GRiAgICAgICAgICAgMHg4NgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZWEwYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy8wMC1JTkRFWApAQCAtMCwwICsxLDIwIEBACitJbmRleCBvZiBmaWxlcyBpbiBEb2N1bWVudGF0aW9uL3Bvd2VycGMuICBJZiB5b3UgdGhpbmsgc29tZXRoaW5nIGFib3V0CitMaW51eC9QUEMgbmVlZHMgYW4gZW50cnkgaGVyZSwgbmVlZHMgY29ycmVjdGlvbiBvciB5b3UndmUgd3JpdHRlbiBvbmUKK3BsZWFzZSBtYWlsIG1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcnQgRG91Z2FuIChjb3J0QGZzbWxhYnMuY29tKQorCiswMC1JTkRFWAorCS0gdGhpcyBmaWxlCitjcHVfZmVhdHVyZXMudHh0CisJLSBpbmZvIG9uIGhvdyB3ZSBzdXBwb3J0IGEgdmFyaWV0eSBvZiBDUFVzIHdpdGggbWluaW1hbCBjb21waWxlLXRpbWUKKwlvcHRpb25zLgorcHBjX2h0YWIudHh0CisJLSBpbmZvIGFib3V0IHRoZSBMaW51eC9QUEMgL3Byb2MvcHBjX2h0YWIgZW50cnkKK3NtcC50eHQKKwktIHVzZSBhbmQgc3RhdGUgaW5mbyBhYm91dCBMaW51eC9QUEMgb24gTVAgbWFjaGluZXMKK1NCQzgyNjBfbWVtb3J5X21hcHBpbmcudHh0CisJLSBFU1QgU0JDODI2MCBib2FyZCBpbmZvCitzb3VuZC50eHQKKwktIGluZm8gb24gc291bmQgc3VwcG9ydCB1bmRlciBMaW51eC9QUEMKK3pJbWFnZV9sYXlvdXQudHh0CisJLSBpbmZvIG9uIHRoZSBrZXJuZWwgaW1hZ2VzIGZvciBMaW51eC9QUEMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9TQkM4MjYwX21lbW9yeV9tYXBwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9TQkM4MjYwX21lbW9yeV9tYXBwaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmU5ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL1NCQzgyNjBfbWVtb3J5X21hcHBpbmcudHh0CkBAIC0wLDAgKzEsMTk3IEBACitQbGVhc2UgbWFpbCBtZSAoSm9uIERpZWtlbWEsIGRpZWtlbWFfam9uQHNpLmNvbSBvciBkaWVrZW1hQGNpZGVhcy5jb20pCitpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIGNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCisJKiBFU1QgU0JDODI2MCBMaW51eCBtZW1vcnkgbWFwcGluZyBydWxlcworCisJaHR0cDovL3d3dy5lc3RjLmNvbS8gCisJaHR0cDovL3d3dy5lc3RjLmNvbS9wcm9kdWN0cy9ib2FyZHMvU0JDODI2MC04MjQwX2RzLmh0bWwKKworCUluaXRpYWwgY29uZGl0aW9uczoKKwktLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJVGFza3MgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm0gYnkgdGhlIGJvb3QgUk9NIGJlZm9yZSBjb250cm9sIGlzCisJdHJhbnNmZXJyZWQgdG8gekltYWdlIChjb21wcmVzc2VkIExpbnV4IGtlcm5lbCk6CisKKwktIERlZmluZSB0aGUgSU1NUiB0byAweGYwMDAwMDAwCisKKwktIEluaXRpYWxpemUgdGhlIG1lbW9yeSBjb250cm9sbGVyIHNvIHRoYXQgUkFNIGlzIGF2YWlsYWJsZSBhdAorCSAgcGh5c2ljYWwgYWRkcmVzcyAweDAwMDAwMDAwLiAgT24gdGhlIFNCQzgyNjAgaXMgdGhpcyAxNk0gKDY0TSkKKwkgIFNEUkFNLgorCisJLSBUaGUgYm9vdCBST00gc2hvdWxkIG9ubHkgY2xlYXIgdGhlIFJBTSB0aGF0IGl0IGlzIHVzaW5nLgorCisJICBUaGUgcmVhc29uIGZvciBkb2luZyB0aGlzIGlzIHRvIGVuaGFuY2VzIHRoZSBjaGFuY2VzIG9mIGEKKwkgIHN1Y2Nlc3NmdWwgcG9zdCBtb3J0ZW0gb24gYSBMaW51eCBwYW5pYy4gIE9uZSBvZiB0aGUgZmlyc3QKKwkgIGl0ZW1zIHRvIGV4YW1pbmUgaXMgdGhlIDE2ayAoTE9HX0JVRl9MRU4pIGNpcmN1bGFyIGNvbnNvbGUKKwkgIGJ1ZmZlciBjYWxsZWQgbG9nX2J1ZiB3aGljaCBpcyBkZWZpbmVkIGluIGtlcm5lbC9wcmludGsuYy4KKworCS0gVG8gZW5oYW5jZSBib290IFJPTSBwZXJmb3JtYW5jZSwgdGhlIEktY2FjaGUgY2FuIGJlIGVuYWJsZWQuCisKKwkgIERhdGU6IE1vbiwgMjIgTWF5IDIwMDAgMTQ6MjE6MTAgLTA3MDAKKwkgIEZyb206IE5laWwgUnVzc2VsbCA8Y2FyZXRAYy1zaWRlLmNvbT4KKworCSAgTGlNb24gKExJbnV4IE1PTml0b3IpIHJ1bnMgd2l0aCBhbmQgc3RhcnRzIExpbnV4IHdpdGggTU1VCisJICBvZmYsIEktY2FjaGUgZW5hYmxlZCwgRC1jYWNoZSBkaXNhYmxlZC4gIFRoZSBJLWNhY2hlIGRvZXNuJ3QKKwkgIG5lZWQgaGludHMgZnJvbSB0aGUgTU1VIHRvIHdvcmsgY29ycmVjdGx5IGFzIHRoZSBELWNhY2hlCisJICBkb2VzLiAgTm8gRC1jYWNoZSBtZWFucyBubyBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIGRldmljZXMgaW4KKwkgIHRoZSBwcmVzZW5jZSBvZiBjYWNoZSAobm8gc25vb3BpbmcsIGV0YykuIFRoZSB1c2Ugb2YgdGhlCisJICBJLWNhY2hlIG1lYW5zIHRoYXQgdGhlIG1vbml0b3IgY2FuIHJ1biBhY2NlcHRhYmx5IGZhc3QKKwkgIGRpcmVjdGx5IGZyb20gUk9NLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gY29weSBpdCB0byBSQU0uCisKKwktIEJ1aWxkIHRoZSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKHNlZSAKKwkgIGluY2x1ZGUvYXNtLXBwYy9lc3Q4MjYwLmggZm9yIGl0cyBkZWZpbml0aW9uKQorCisJLSBUaGUgY29tcHJlc3NlZCBMaW51eCBrZXJuZWwgKHpJbWFnZSkgY29udGFpbnMgYSBib290c3RyYXAgbG9hZGVyIAorCSAgdGhhdCBpcyBwb3NpdGlvbiBpbmRlcGVuZGVudDsgeW91IGNhbiBsb2FkIGl0IGludG8gYW55IFJBTSwgCisJICBST00gb3IgRkxBU0ggbWVtb3J5IGFkZHJlc3MgPj0gMHgwMDUwMDAwMCAoYWJvdmUgNSBNQiksIG9yCisJICBhdCBpdHMgbGluayBhZGRyZXNzIG9mIDB4MDA0MDAwMDAgKDQgTUIpLgorCisJICBOb3RlOiBJZiB6SW1hZ2UgaXMgbG9hZGVkIGF0IGl0cyBsaW5rIGFkZHJlc3Mgb2YgMHgwMDQwMDAwMCAoNCBNQiksCisJICAgICAgICB0aGVuIHpJbWFnZSB3aWxsIHNraXAgdGhlIHN0ZXAgb2YgbW92aW5nIGl0c2VsZiB0byAKKwkJaXRzIGxpbmsgYWRkcmVzcy4KKworCS0gTG9hZCBSMyB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKworCS0gVHJhbnNmZXIgY29udHJvbCB0byB6SW1hZ2UKKworCS0gVGhlIExpbnV4IGNvbnNvbGUgcG9ydCBpcyBTTUMxLCBhbmQgdGhlIGJhdWQgcmF0ZSBpcyBjb250cm9sbGVkCisJICBmcm9tIHRoZSBiaV9iYXVkcmF0ZSBmaWVsZCBvZiB0aGUgYm9hcmQgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorCSAgT24gdGhpbmcgdG8ga2VlcCBpbiBtaW5kIHdoZW4gcGlja2luZyB0aGUgYmF1ZCByYXRlLCBpcyB0aGF0CisJICB0aGVyZSBpcyBubyBmbG93IGNvbnRyb2wgb24gdGhlIFNNQyBwb3J0cy4gIEkgd291bGQgc3RpY2sKKwkgIHdpdGggc29tZXRoaW5nIHNhZmUgYW5kIHN0YW5kYXJkIGxpa2UgMTkyMDAuCisKKwkgIE9uIHRoZSBFU1QgU0JDODI2MCwgdGhlIFNNQzEgcG9ydCBpcyBvbiB0aGUgQ09NMSBjb25uZWN0b3Igb2YKKwkgIHRoZSBib2FyZC4KKworCQorCUVTVCBTQkM4MjYwIGRlZmF1bHRzOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaXAKKyAgICAgICAgTWVtb3J5ICAgICAgICAgICAgICAgICAgU2VsICBCdXMgICBVc2UKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tICAtLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJMHgwMDAwMDAwMC0weDAzRkZGRkZGICAgQ1MyICA2MHggICAoMTZNIG9yIDY0TSkvNjRNIFNEUkFNCisJMHgwNDAwMDAwMC0weDA0RkZGRkZGICAgQ1M0ICBsb2NhbCAgNE0vMTZNIFNEUkFNIChzb2xkZXJlZCB0byB0aGUgYm9hcmQpCisJMHgyMTAwMDAwMC0weDIxMDAwMDAwICAgQ1M3ICA2MHggICAgMUIvNjRLIEZsYXNoIHByZXNlbnQgZGV0ZWN0IChmcm9tIHRoZSBmbGFzaCBTSU1NKQorCTB4MjEwMDAwMDEtMHgyMTAwMDAwMSAgIENTNyAgNjB4ICAgIDFCLzY0SyBTd2l0Y2hlcyAocmVhZCkgYW5kIExFRHMgKHdyaXRlKQorCTB4MjIwMDAwMDAtMHgyMjAwRkZGRiAgIENTNSAgNjB4ICAgIDhLLzY0SyBFRVBST00KKwkweEZDMDAwMDAwLTB4RkNGRkZGRkYgICBDUzYgIDYweCAgICAyTS8xNk0gZmxhc2ggKDggYml0cyB3aWRlLCBzb2xkZXJlZCB0byB0aGUgYm9hcmQpCisJMHhGRTAwMDAwMC0weEZGRkZGRkZGICAgQ1MwICA2MHggICAgNE0vMTZNIGZsYXNoIChTSU1NKQorCisJTm90ZXM6CisJLS0tLS0tCisKKwktIFRoZSBjaGlwIHNlbGVjdHMgY2FuIG1hcCAzMksgYmxvY2tzIGFuZCB1cCAocG93ZXJzIG9mIDIpCisKKwktIFRoZSBTRFJBTSBtYWNoaW5lIGNhbiBoYW5kbGVkIHVwIHRvIDEyOE1ieXRlcyBwZXIgY2hpcCBzZWxlY3QKKworCS0gTGludXggdXNlcyB0aGUgNjB4IGJ1cyBtZW1vcnkgKHRoZSBTRFJBTSBESU1NKSBmb3IgdGhlIAorCSAgY29tbXVuaWNhdGlvbnMgYnVmZmVycy4KKworCS0gQkFUcyBjYW4gbWFwIDEyOEstMjU2TWJ5dGVzIGVhY2guICBUaGVyZSBhcmUgZm91ciBkYXRhIEJBVHMgYW5kCisJICBmb3VyIGluc3RydWN0aW9uIEJBVHMuICBHZW5lcmFsbHkgdGhlIGRhdGEgYW5kIGluc3RydWN0aW9uIEJBVHMKKwkgIGFyZSBtYXBwZWQgdGhlIHNhbWUuCisKKwktIFRoZSBJTU1SIG11c3QgYmUgc2V0IGFib3ZlIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgYWRkcmVzc2VzLAorCSAgd2hpY2ggc3RhcnQgYXQgMHhDMDAwMDAwMC4gIE90aGVyd2lzZSwgdGhlIGtlcm5lbCBtYXkgY3Jhc2ggYXMKKwkgIHNvb24gYXMgeW91IHN0YXJ0IGFueSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBkdWUgdG8gVk0gY29sbGlzaW9ucyAKKwkgIGluIHRoZSBrZXJuZWwgb3IgdXNlciBwcm9jZXNzIHNwYWNlLgorCisKKwkgIERldGFpbHMgZnJvbSBEYW4gTWFsZWsgPGRhbl9tYWxla0BtdmlzdGEuY29tPiBvbiAxMC8yOS8xOTk5OgorCisJICBUaGUgdXNlciBhcHBsaWNhdGlvbiB2aXJ0dWFsIHNwYWNlIGNvbnN1bWVzIHRoZSBmaXJzdCAyIEdieXRlcworCSAgKDB4MDAwMDAwMDAgdG8gMHg3RkZGRkZGRikuICBUaGUga2VybmVsIHZpcnR1YWwgdGV4dCBzdGFydHMgYXQKKwkgIDB4QzAwMDAwMDAsIHdpdGggZGF0YSBmb2xsb3dpbmcuICBUaGVyZSBpcyBhICJwcm90ZWN0aW9uIGhvbGUiCisJICBiZXR3ZWVuIHRoZSBlbmQgb2Yga2VybmVsIGRhdGEgYW5kIHRoZSBzdGFydCBvZiB0aGUga2VybmVsCisJICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3BhY2UsIGJ1dCB0aGlzIHNwYWNlIGlzIHN0aWxsIHdpdGhpbgorCSAgMHhDeHh4eHh4eC4KKworCSAgT2J2aW91c2x5IHRoZSBrZXJuZWwgY2FuJ3QgbWFwIGFueSBwaHlzaWNhbCBhZGRyZXNzZXMgMToxIGluCisJICB0aGVzZSByYW5nZXMuCisKKworCSAgRGV0YWlscyBmcm9tIERhbiBNYWxlayA8ZGFuX21hbGVrQG12aXN0YS5jb20+IG9uIDUvMTkvMjAwMDoKKworCSAgRHVyaW5nIHRoZSBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHRoZSBrZXJuZWwgdmlydHVhbAorCSAgbWVtb3J5IGFsbG9jYXRvciBpcyBub3Qgb3BlcmF0aW9uYWwuICBQcmlvciB0byB0aGlzIEtWTQorCSAgaW5pdGlhbGl6YXRpb24sIHdlIGNob29zZSB0byBtYXAgdmlydHVhbCB0byBwaHlzaWNhbCBhZGRyZXNzZXMKKwkgIDE6MS4gIFRoYXQgaXMsIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGV4YWN0bHkgbWF0Y2hlcyB0aGUKKwkgIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIGJ1cy4gIFRoZXNlIG1hcHBpbmdzIGFyZSB0eXBpY2FsbHkgZG9uZQorCSAgaW4gYXJjaC9wcGMva2VybmVsL2hlYWQuUywgb3IgYXJjaC9wcGMvbW0vaW5pdC5jLiAgT25seQorCSAgYWJzb2x1dGVseSBuZWNlc3NhcnkgbWFwcGluZ3Mgc2hvdWxkIGJlIGRvbmUgYXQgdGhpcyB0aW1lLCBmb3IKKwkgIGV4YW1wbGUgYm9hcmQgY29udHJvbCByZWdpc3RlcnMgb3IgYSBzZXJpYWwgdWFydC4gIE5vcm1hbCBkZXZpY2UKKwkgIGRyaXZlciBpbml0aWFsaXphdGlvbiBzaG91bGQgbWFwIHJlc291cmNlcyBsYXRlciB3aGVuIG5lY2Vzc2FyeS4KKworCSAgQWx0aG91Z2ggcGxhdGZvcm0gZGVwZW5kZW50LCBhbmQgY2VydGFpbmx5IHRoZSBjYXNlIGZvciBlbWJlZGRlZAorCSAgOHh4LCB0cmFkaXRpb25hbGx5IG1lbW9yeSBpcyBtYXBwZWQgYXQgcGh5c2ljYWwgYWRkcmVzcyB6ZXJvLAorCSAgYW5kIEkvTyBkZXZpY2VzIGFib3ZlIHBoeXNpY2FsIGFkZHJlc3MgMHg4MDAwMDAwMC4gIFRoZSBsb3dlc3QKKwkgIGFuZCBoaWdoZXN0IChhYm92ZSAweGYwMDAwMDAwKSBJL08gYWRkcmVzc2VzIGFyZSB0cmFkaXRpb25hbGx5IAorCSAgdXNlZCBmb3IgZGV2aWNlcyBvciByZWdpc3RlcnMgd2UgbmVlZCB0byBtYXAgZHVyaW5nIGtlcm5lbCAKKwkgIGluaXRpYWxpemF0aW9uIGFuZCBwcmlvciB0byBLVk0gb3BlcmF0aW9uLiAgRm9yIHRoaXMgcmVhc29uLCAKKwkgIGFuZCBzaW5jZSBpdCBmb2xsb3dlZCBwcmlvciBQb3dlclBDIHBsYXRmb3JtIGV4YW1wbGVzLCBJIGNob3NlIAorCSAgdG8gbWFwIHRoZSBlbWJlZGRlZCA4eHgga2VybmVsIHRvIHRoZSAweGMwMDAwMDAwIHZpcnR1YWwgYWRkcmVzcy4KKwkgIFRoaXMgd2F5LCB3ZSBjYW4gZW5hYmxlIHRoZSBNTVUgdG8gbWFwIHRoZSBrZXJuZWwgZm9yIHByb3BlciAKKwkgIG9wZXJhdGlvbiwgYW5kIHN0aWxsIG1hcCBhIGZldyB3aW5kb3dzIGJlZm9yZSB0aGUgS1ZNIGlzIG9wZXJhdGlvbmFsLgorCisJICBPbiBzb21lIHN5c3RlbXMsIHlvdSBjb3VsZCBwb3NzaWJseSBydW4gdGhlIGtlcm5lbCBhdCB0aGUgCisJICAweDgwMDAwMDAwIG9yIGFueSBvdGhlciB2aXJ0dWFsIGFkZHJlc3MuICBJdCBqdXN0IGRlcGVuZHMgdXBvbiAKKwkgIG1hcHBpbmcgdGhhdCBtdXN0IGJlIGRvbmUgcHJpb3IgdG8gS1ZNIG9wZXJhdGlvbmFsLiAgWW91IGNhbiBuZXZlciAKKwkgIG1hcCBkZXZpY2VzIG9yIGtlcm5lbCBzcGFjZXMgdGhhdCBvdmVybGFwIHdpdGggdGhlIHVzZXIgdmlydHVhbCAKKwkgIHNwYWNlLiAgVGhpcyBpcyB3aHkgZGVmYXVsdCBJTU1SIG1hcHBpbmcgdXNlZCBieSBtb3N0IEJETSB0b29scyAKKwkgIHdvbid0IHdvcmsuICBUaGV5IHB1dCB0aGUgSU1NUiBhdCBzb21ldGhpbmcgbGlrZSAweDEwMDAwMDAwIG9yIAorCSAgMHgwMjAwMDAwMCBmb3IgZXhhbXBsZS4gIFlvdSBzaW1wbHkgY2FuJ3QgbWFwIHRoZXNlIGFkZHJlc3NlcyBlYXJseQorCSAgaW4gdGhlIGtlcm5lbCwgYW5kIGNvbnRpbnVlIHByb3BlciBzeXN0ZW0gb3BlcmF0aW9uLgorCisJICBUaGUgZW1iZWRkZWQgOHh4LzgyeHgga2VybmVsIGlzIG1hdHVyZSBlbm91Z2ggdGhhdCBhbGwgeW91IHNob3VsZCAKKwkgIG5lZWQgdG8gZG8gaXMgbWFwIHRoZSBJTU1SIHNvbWVwbGFjZSBhdCBvciBhYm92ZSAweGYwMDAwMDAwIGFuZCBpdCAKKwkgIHNob3VsZCBib290IGZhciBlbm91Z2ggdG8gZ2V0IHNlcmlhbCBjb25zb2xlIG1lc3NhZ2VzIGFuZCBLR0RCIAorCSAgY29ubmVjdGVkIG9uIGFueSBwbGF0Zm9ybS4gIFRoZXJlIGFyZSBsb3RzIG9mIG90aGVyIHN1YnRsZSBtZW1vcnkgCisJICBtYW5hZ2VtZW50IGRlc2lnbiBmZWF0dXJlcyB0aGF0IHlvdSBzaW1wbHkgZG9uJ3QgbmVlZCB0byB3b3JyeSAKKwkgIGFib3V0LiAgSWYgeW91IGFyZSBjaGFuZ2luZyBmdW5jdGlvbnMgcmVsYXRlZCB0byBNTVUgaW5pdGlhbGl6YXRpb24sCisJICB5b3UgYXJlIGxpa2VseSBicmVha2luZyB0aGluZ3MgdGhhdCBhcmUga25vd24gdG8gd29yayBhbmQgYXJlIAorCSAgaGVhZGluZyBkb3duIGEgcGF0aCBvZiBkaXNhc3RlciBhbmQgZnJ1c3RyYXRpb24uICBZb3VyIGNoYW5nZXMgCisJICBzaG91bGQgYmUgdG8gbWFrZSB0aGUgZmxleGliaWxpdHkgb2YgdGhlIHByb2Nlc3NvciBmaXQgTGludXgsIAorCSAgbm90IGZvcmNlIGFyYml0cmFyeSBhbmQgbm9uLXdvcmthYmxlIG1lbW9yeSBtYXBwaW5ncyBpbnRvIExpbnV4LgorCisJLSBZb3UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgS0VSTkVMTE9BRCBvciBLRVJORUxCQVNFLCBvdGhlcndpc2UgdGhlCisJICB2aXJ0dWFsIG1lbW9yeSBhbmQgTU1VIGNvZGUgd2lsbCBnZXQgY29uZnVzZWQuCisJCisJICBhcmNoL3BwYy9NYWtlZmlsZTpLRVJORUxMT0FEID0gMHhjMDAwMDAwMAorCisJICBpbmNsdWRlL2FzbS1wcGMvcGFnZS5oOiNkZWZpbmUgUEFHRV9PRkZTRVQgICAgMHhjMDAwMDAwMAorCSAgaW5jbHVkZS9hc20tcHBjL3BhZ2UuaDojZGVmaW5lIEtFUk5FTEJBU0UgICAgIFBBR0VfT0ZGU0VUCisKKwktIFJBTSBpcyBhdCBwaHlzaWNhbCBhZGRyZXNzIDB4MDAwMDAwMDAsIGFuZCBnZXRzIG1hcHBlZCB0byAKKwkgIHZpcnR1YWwgYWRkcmVzcyAweEMwMDAwMDAwIGZvciB0aGUga2VybmVsLgorCisKKwlQaHlzaWNhbCBhZGRyZXNzZXMgdXNlZCBieSB0aGUgTGludXgga2VybmVsOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkweDAwMDAwMDAwLTB4M0ZGRkZGRkYgICAxR0IgcmVzZXJ2ZWQgZm9yIFJBTQorCTB4RjAwMDAwMDAtMHhGMDAxRkZGRiAgIDEyOEsgSU1NUiAgNjRLIHVzZWQgZm9yIGR1YWwgcG9ydCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NEsgZm9yIDgyNjAgcmVnaXN0ZXJzCisKKwkKKyAgICAgICAgTG9naWNhbCBhZGRyZXNzZXMgdXNlZCBieSB0aGUgTGludXgga2VybmVsOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCTB4RjAwMDAwMDAtMHhGRkZGRkZGRiAgIDI1Nk0gQkFUMCAoSU1NUjogZHVhbCBwb3J0IFJBTSwgcmVnaXN0ZXJzKQorCTB4RTAwMDAwMDAtMHhFRkZGRkZGRiAgIDI1Nk0gQkFUMSAoSS9PIHNwYWNlIGZvciBjdXN0b20gYm9hcmRzKQorCTB4QzAwMDAwMDAtMHhDRkZGRkZGRiAgIDI1Nk0gQkFUMiAoUkFNKQorCTB4RDAwMDAwMDAtMHhERkZGRkZGRiAgIDI1Nk0gQkFUMyAoaWYgUkFNID4gMjU2TUJ5dGUpCisKKworCUVTVCBTQkM4MjYwIExpbnV4IG1hcHBpbmc6CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCURCQVQwLCBJQkFUMCwgY2FjaGUgaW5oaWJpdGVkOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaXAKKyAgICAgICAgTWVtb3J5ICAgICAgICAgICAgICAgICAgU2VsICBVc2UKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgMHhGMDAwMDAwMC0weEYwMDFGRkZGICAgbi9hICBJTU1SOiBkdWFsIHBvcnQgUkFNLCByZWdpc3RlcnMKKworICAgICAgICBEQkFUMSwgSUJBVDEsIGNhY2hlIGluaGliaXRlZDoKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2NwdV9mZWF0dXJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvY3B1X2ZlYXR1cmVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzI3Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2NwdV9mZWF0dXJlcy50eHQKQEAgLTAsMCArMSw1NiBAQAorSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzQGF1c3Rpbi5pYm0uY29tPgorNSBKdW4gMjAwMgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgc3lzdGVtIChpbmNsdWRpbmcgc2VsZi1tb2RpZnlpbmcgY29kZSkgdXNlZCBpbiB0aGUKK1BQQyBMaW51eCBrZXJuZWwgdG8gc3VwcG9ydCBhIHZhcmlldHkgb2YgUG93ZXJQQyBDUFVzIHdpdGhvdXQgcmVxdWlyaW5nCitjb21waWxlLXRpbWUgc2VsZWN0aW9uLgorCitFYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzIHRoZSBwcGMzMiBrZXJuZWwgZGV0ZWN0cyB0aGUgY3VycmVudCBDUFUgdHlwZSBhbmQKK2Nob29zZXMgYSBzZXQgb2YgZmVhdHVyZXMgYWNjb3JkaW5nbHkuIFNvbWUgZXhhbXBsZXMgaW5jbHVkZSBBbHRpdmVjIHN1cHBvcnQsCitzcGxpdCBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMsIGFuZCBpZiB0aGUgQ1BVIHN1cHBvcnRzIHRoZSBET1pFIGFuZCBOQVAKK3NsZWVwIG1vZGVzLgorCitEZXRlY3Rpb24gb2YgdGhlIGZlYXR1cmUgc2V0IGlzIHNpbXBsZS4gQSBsaXN0IG9mIHByb2Nlc3NvcnMgY2FuIGJlIGZvdW5kIGluCithcmNoL3BwYy9rZXJuZWwvY3B1dGFibGUuYy4gVGhlIFBWUiByZWdpc3RlciBpcyBtYXNrZWQgYW5kIGNvbXBhcmVkIHdpdGggZWFjaAordmFsdWUgaW4gdGhlIGxpc3QuIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBjcHVfZmVhdHVyZXMgb2YgY3VyX2NwdV9zcGVjIGlzCithc3NpZ25lZCB0byB0aGUgZmVhdHVyZSBiaXRtYXNrIGZvciB0aGlzIHByb2Nlc3NvciBhbmQgYSBfX3NldHVwX2NwdSBmdW5jdGlvbgoraXMgY2FsbGVkLgorCitDIGNvZGUgbWF5IHRlc3QgJ2N1cl9jcHVfc3BlY1tzbXBfcHJvY2Vzc29yX2lkKCldLT5jcHVfZmVhdHVyZXMnIGZvciBhCitwYXJ0aWN1bGFyIGZlYXR1cmUgYml0LiBUaGlzIGlzIGRvbmUgaW4gcXVpdGUgYSBmZXcgcGxhY2VzLCBmb3IgZXhhbXBsZQoraW4gcHBjX3NldHVwX2wyY3IoKS4KKworSW1wbGVtZW50aW5nIGNwdWZlYXR1cmVzIGluIGFzc2VtYmx5IGlzIGEgbGl0dGxlIG1vcmUgaW52b2x2ZWQuIFRoZXJlIGFyZQorc2V2ZXJhbCBwYXRocyB0aGF0IGFyZSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgd291bGQgc3VmZmVyIGlmIGFuIGFycmF5CitpbmRleCwgc3RydWN0dXJlIGRlcmVmZXJlbmNlLCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIHdlcmUgYWRkZWQuIFRvIGF2b2lkIHRoZQorcGVyZm9ybWFuY2UgcGVuYWx0eSBidXQgc3RpbGwgYWxsb3cgZm9yIHJ1bnRpbWUgKHJhdGhlciB0aGFuIGNvbXBpbGUtdGltZSkgQ1BVCitzZWxlY3Rpb24sIHVudXNlZCBjb2RlIGlzIHJlcGxhY2VkIGJ5ICdub3AnIGluc3RydWN0aW9ucy4gVGhpcyBub3AnaW5nIGlzCitiYXNlZCBvbiBDUFUgMCdzIGNhcGFiaWxpdGllcywgc28gYSBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtIHdpdGggbm9uLWlkZW50aWNhbAorcHJvY2Vzc29ycyB3aWxsIG5vdCB3b3JrIChidXQgc3VjaCBhIHN5c3RlbSB3b3VsZCBsaWtlbHkgaGF2ZSBvdGhlciBwcm9ibGVtcworYW55d2F5cykuCisKK0FmdGVyIGRldGVjdGluZyB0aGUgcHJvY2Vzc29yIHR5cGUsIHRoZSBrZXJuZWwgcGF0Y2hlcyBvdXQgc2VjdGlvbnMgb2YgY29kZQordGhhdCBzaG91bGRuJ3QgYmUgdXNlZCBieSB3cml0aW5nIG5vcCdzIG92ZXIgaXQuIFVzaW5nIGNwdWZlYXR1cmVzIHJlcXVpcmVzCitqdXN0IDIgbWFjcm9zIChmb3VuZCBpbiBpbmNsdWRlL2FzbS1wcGMvY3B1dGFibGUuaCksIGFzIHNlZW4gaW4gaGVhZC5TCit0cmFuc2Zlcl90b19oYW5kbGVyOgorCisJI2lmZGVmIENPTkZJR19BTFRJVkVDCisJQkVHSU5fRlRSX1NFQ1RJT04KKwkJbWZzcHIJcjIyLFNQUk5fVlJTQVZFCQkvKiBpZiBHNCwgc2F2ZSB2cnNhdmUgcmVnaXN0ZXIgdmFsdWUgKi8KKwkJc3R3CXIyMixUSFJFQURfVlJTQVZFKHIyMykKKwlFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQorCSNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLworCitJZiBDUFUgMCBzdXBwb3J0cyBBbHRpdmVjLCB0aGUgY29kZSBpcyBsZWZ0IHVudG91Y2hlZC4gSWYgaXQgZG9lc24ndCwgYm90aAoraW5zdHJ1Y3Rpb25zIGFyZSByZXBsYWNlZCB3aXRoIG5vcCdzLgorCitUaGUgRU5EX0ZUUl9TRUNUSU9OIG1hY3JvIGhhcyB0d28gc2ltcGxlciB2YXJpYXRpb25zOiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQKK2FuZCBFTkRfRlRSX1NFQ1RJT05fSUZDTFIuIFRoZXNlIHNpbXBseSB0ZXN0IGlmIGEgZmxhZyBpcyBzZXQgKGluCitjdXJfY3B1X3NwZWNbMF0tPmNwdV9mZWF0dXJlcykgb3IgaXMgY2xlYXJlZCwgcmVzcGVjdGl2ZWx5LiBUaGVzZSB0d28gbWFjcm9zCitzaG91bGQgYmUgdXNlZCBpbiB0aGUgbWFqb3JpdHkgb2YgY2FzZXMuCisKK1RoZSBFTkRfRlRSX1NFQ1RJT04gbWFjcm9zIGFyZSBpbXBsZW1lbnRlZCBieSBzdG9yaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKK2NvZGUgaW4gdGhlICdfX2Z0cl9maXh1cCcgRUxGIHNlY3Rpb24uIFdoZW4gZG9fY3B1X2Z0cl9maXh1cHMKKyhhcmNoL3BwYy9rZXJuZWwvbWlzYy5TKSBpcyBpbnZva2VkLCBpdCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgcmVjb3JkcyBpbgorX19mdHJfZml4dXAsIGFuZCBpZiB0aGUgcmVxdWlyZWQgZmVhdHVyZSBpcyBub3QgcHJlc2VudCBpdCB3aWxsIGxvb3Agd3JpdGluZworbm9wJ3MgZnJvbSBlYWNoIEJFR0lOX0ZUUl9TRUNUSU9OIHRvIEVORF9GVFJfU0VDVElPTi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9lZWgtcGNpLWVycm9yLXJlY292ZXJ5LnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9lZWgtcGNpLWVycm9yLXJlY292ZXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmZlNzFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2VlaC1wY2ktZXJyb3ItcmVjb3ZlcnkudHh0CkBAIC0wLDAgKzEsMzMyIEBACisKKworICAgICAgICAgICAgICAgICAgICAgIFBDSSBCdXMgRUVIIEVycm9yIFJlY292ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmFzIFZlcHN0YXMKKyAgICAgICAgICAgICAgICAgICAgICAgPGxpbmFzQGF1c3Rpbi5pYm0uY29tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAxMiBKYW51YXJ5IDIwMDUKKworCitPdmVydmlldzoKKy0tLS0tLS0tLQorVGhlIElCTSBQT1dFUi1iYXNlZCBwU2VyaWVzIGFuZCBpU2VyaWVzIGNvbXB1dGVycyBpbmNsdWRlIFBDSSBidXMKK2NvbnRyb2xsZXIgY2hpcHMgdGhhdCBoYXZlIGV4dGVuZGVkIGNhcGFiaWxpdGllcyBmb3IgZGV0ZWN0aW5nIGFuZAorcmVwb3J0aW5nIGEgbGFyZ2UgdmFyaWV0eSBvZiBQQ0kgYnVzIGVycm9yIGNvbmRpdGlvbnMuICBUaGVzZSBmZWF0dXJlcworZ28gdW5kZXIgdGhlIG5hbWUgb2YgIkVFSCIsIGZvciAiRXh0ZW5kZWQgRXJyb3IgSGFuZGxpbmciLiAgVGhlIEVFSAoraGFyZHdhcmUgZmVhdHVyZXMgYWxsb3cgUENJIGJ1cyBlcnJvcnMgdG8gYmUgY2xlYXJlZCBhbmQgYSBQQ0kKK2NhcmQgdG8gYmUgInJlYm9vdGVkIiwgd2l0aG91dCBhbHNvIGhhdmluZyB0byByZWJvb3QgdGhlIG9wZXJhdGluZworc3lzdGVtLgorCitUaGlzIGlzIGluIGNvbnRyYXN0IHRvIHRyYWRpdGlvbmFsIFBDSSBlcnJvciBoYW5kbGluZywgd2hlcmUgdGhlCitQQ0kgY2hpcCBpcyB3aXJlZCBkaXJlY3RseSB0byB0aGUgQ1BVLCBhbmQgYW4gZXJyb3Igd291bGQgY2F1c2UKK2EgQ1BVIG1hY2hpbmUtY2hlY2svY2hlY2stc3RvcCBjb25kaXRpb24sIGhhbHRpbmcgdGhlIENQVSBlbnRpcmVseS4KK0Fub3RoZXIgInRyYWRpdGlvbmFsIiB0ZWNobmlxdWUgaXMgdG8gaWdub3JlIHN1Y2ggZXJyb3JzLCB3aGljaAorY2FuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uLCBib3RoIG9mIHVzZXIgZGF0YSBvciBvZiBrZXJuZWwgZGF0YSwKK2h1bmcvdW5yZXNwb25zaXZlIGFkYXB0ZXJzLCBvciBzeXN0ZW0gY3Jhc2hlcy9sb2NrdXBzLiAgVGh1cywKK3RoZSBpZGVhIGJlaGluZCBFRUggaXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYW4gYmVjb21lIG1vcmUKK3JlbGlhYmxlIGFuZCByb2J1c3QgYnkgcHJvdGVjdGluZyBpdCBmcm9tIFBDSSBlcnJvcnMsIGFuZCBnaXZpbmcKK3RoZSBPUyB0aGUgYWJpbGl0eSB0byAicmVib290Ii9yZWNvdmVyIGluZGl2aWR1YWwgUENJIGRldmljZXMuCisKK0Z1dHVyZSBzeXN0ZW1zIGZyb20gb3RoZXIgdmVuZG9ycywgYmFzZWQgb24gdGhlIFBDSS1FIHNwZWNpZmljYXRpb24sCittYXkgY29udGFpbiBzaW1pbGFyIGZlYXR1cmVzLgorCisKK0NhdXNlcyBvZiBFRUggRXJyb3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorRUVIIHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIHRvIGd1YXJkIGFnYWluc3QgaGFyZHdhcmUgZmFpbHVyZSwgc3VjaAorYXMgUENJIGNhcmRzIGR5aW5nIGZyb20gaGVhdCwgaHVtaWRpdHksIGR1c3QsIHZpYnJhdGlvbiBhbmQgYmFkCitlbGVjdHJpY2FsIGNvbm5lY3Rpb25zLiBUaGUgdmFzdCBtYWpvcml0eSBvZiBFRUggZXJyb3JzIHNlZW4gaW4KKyJyZWFsIGxpZmUiIGFyZSBkdWUgdG8gZWl0aHIgcG9vcmx5IHNlYXRlZCBQQ0kgY2FyZHMsIG9yLAordW5mb3J0dW5hdGVseSBxdWl0ZSBjb21tb25seSwgZHVlIGRldmljZSBkcml2ZXIgYnVncywgZGV2aWNlIGZpcm13YXJlCitidWdzLCBhbmQgc29tZXRpbWVzIFBDSSBjYXJkIGhhcmR3YXJlIGJ1Z3MuCisKK1RoZSBtb3N0IGNvbW1vbiBzb2Z0d2FyZSBidWcsIGlzIG9uZSB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvCithdHRlbXB0IHRvIERNQSB0byBhIGxvY2F0aW9uIGluIHN5c3RlbSBtZW1vcnkgdGhhdCBoYXMgbm90IGJlZW4KK3Jlc2VydmVkIGZvciBETUEgYWNjZXNzIGZvciB0aGF0IGNhcmQuICBUaGlzIGlzIGEgcG93ZXJmdWwgZmVhdHVyZSwKK2FzIGl0IHByZXZlbnRzIHdoYXQ7IG90aGVyd2lzZSwgd291bGQgaGF2ZSBiZWVuIHNpbGVudCBtZW1vcnkKK2NvcnJ1cHRpb24gY2F1c2VkIGJ5IHRoZSBiYWQgRE1BLiAgQSBudW1iZXIgb2YgZGV2aWNlIGRyaXZlcgorYnVncyBoYXZlIGJlZW4gZm91bmQgYW5kIGZpeGVkIGluIHRoaXMgd2F5IG92ZXIgdGhlIHBhc3QgZmV3Cit5ZWFycy4gIE90aGVyIHBvc3NpYmxlIGNhdXNlcyBvZiBFRUggZXJyb3JzIGluY2x1ZGUgZGF0YSBvcgorYWRkcmVzcyBsaW5lIHBhcml0eSBlcnJvcnMgKGZvciBleGFtcGxlLCBkdWUgdG8gcG9vciBlbGVjdHJpY2FsCitjb25uZWN0aXZpdHkgZHVlIHRvIGEgcG9vcmx5IHNlYXRlZCBjYXJkKSwgYW5kIFBDSS1YIHNwbGl0LWNvbXBsZXRpb24KK2Vycm9ycyAoZHVlIHRvIHNvZnR3YXJlLCBkZXZpY2UgZmlybXdhcmUsIG9yIGRldmljZSBQQ0kgaGFyZHdhcmUgYnVncykuCitUaGUgdmFzdCBtYWpvcml0eSBvZiAidHJ1ZSBoYXJkd2FyZSBmYWlsdXJlcyIgY2FuIGJlIGN1cmVkIGJ5CitwaHlzaWNhbGx5IHJlbW92aW5nIGFuZCByZS1zZWF0aW5nIHRoZSBQQ0kgY2FyZC4KKworCitEZXRlY3Rpb24gYW5kIFJlY292ZXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiB0aGUgZm9sbG93aW5nIGRpc2N1c3Npb24sIGEgZ2VuZXJpYyBvdmVydmlldyBvZiBob3cgdG8gZGV0ZWN0CithbmQgcmVjb3ZlciBmcm9tIEVFSCBlcnJvcnMgd2lsbCBiZSBwcmVzZW50ZWQuIFRoaXMgaXMgZm9sbG93ZWQKK2J5IGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgTGludXgKK2tlcm5lbCBkb2VzIGl0LiAgVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZSwKK2FuZCBzb21lIG9mIHRoZSBmaW5lciBwb2ludHMgYXJlIHN0aWxsIGJlaW5nIGRlYmF0ZWQuICBUaGVzZQorbWF5IGluIHR1cm4gYmUgc3dheWVkIGlmIG9yIHdoZW4gb3RoZXIgYXJjaGl0ZWN0dXJlcyBpbXBsZW1lbnQKK3NpbWlsYXIgZnVuY3Rpb25hbGl0eS4KKworV2hlbiBhIFBDSSBIb3N0IEJyaWRnZSAoUEhCLCB0aGUgYnVzIGNvbnRyb2xsZXIgY29ubmVjdGluZyB0aGUKK1BDSSBidXMgdG8gdGhlIHN5c3RlbSBDUFUgZWxlY3Ryb25pY3MgY29tcGxleCkgZGV0ZWN0cyBhIFBDSSBlcnJvcgorY29uZGl0aW9uLCBpdCB3aWxsICJpc29sYXRlIiB0aGUgYWZmZWN0ZWQgUENJIGNhcmQuICBJc29sYXRpb24KK3dpbGwgYmxvY2sgYWxsIHdyaXRlcyAoZWl0aGVyIHRvIHRoZSBjYXJkIGZyb20gdGhlIHN5c3RlbSwgb3IKK2Zyb20gdGhlIGNhcmQgdG8gdGhlIHN5c3RlbSksIGFuZCBpdCB3aWxsIGNhdXNlIGFsbCByZWFkcyB0bworcmV0dXJuIGFsbC1mZidzICgweGZmLCAweGZmZmYsIDB4ZmZmZmZmZmYgZm9yIDgvMTYvMzItYml0IHJlYWRzKS4KK1RoaXMgdmFsdWUgd2FzIGNob3NlbiBiZWNhdXNlIGl0IGlzIHRoZSBzYW1lIHZhbHVlIHlvdSB3b3VsZAorZ2V0IGlmIHRoZSBkZXZpY2Ugd2FzIHBoeXNpY2FsbHkgdW5wbHVnZ2VkIGZyb20gdGhlIHNsb3QuCitUaGlzIGluY2x1ZGVzIGFjY2VzcyB0byBQQ0kgbWVtb3J5LCBJL08gc3BhY2UsIGFuZCBQQ0kgY29uZmlnCitzcGFjZS4gIEludGVycnVwdHM7IGhvd2V2ZXIsIHdpbGwgY29udGludWVkIHRvIGJlIGRlbGl2ZXJlZC4KKworRGV0ZWN0aW9uIGFuZCByZWNvdmVyeSBhcmUgcGVyZm9ybWVkIHdpdGggdGhlIGFpZCBvZiBwcGM2NAorZmlybXdhcmUuICBUaGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBpbiB0aGUgTGludXgga2VybmVsCitpbnRvIHRoZSBmaXJtd2FyZSBhcmUgcmVmZXJyZWQgdG8gYXMgUlRBUyAoUnVuLVRpbWUgQWJzdHJhY3Rpb24KK1NlcnZpY2VzKS4gIFRoZSBMaW51eCBrZXJuZWwgZG9lcyBub3QgKHNob3VsZCBub3QpIGFjY2VzcwordGhlIEVFSCBmdW5jdGlvbiBpbiB0aGUgUENJIGNoaXBzZXRzIGRpcmVjdGx5LCBwcmltYXJpbHkgYmVjYXVzZQordGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBjaGlwc2V0cyBvdXQgdGhlcmUsIGVhY2ggd2l0aAorZGlmZmVyZW50IGludGVyZmFjZXMgYW5kIHF1aXJrcy4gVGhlIGZpcm13YXJlIHByb3ZpZGVzIGEKK3VuaWZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCB3aWxsIHdvcmsgd2l0aCBhbGwgcFNlcmllcworYW5kIGlTZXJpZXMgaGFyZHdhcmUgKGFuZCBiZSBmb3J3YXJkcy1jb21wYXRpYmxlKS4KKworSWYgdGhlIE9TIG9yIGRldmljZSBkcml2ZXIgc3VzcGVjdHMgdGhhdCBhIFBDSSBzbG90IGhhcyBiZWVuCitFRUgtaXNvbGF0ZWQsIHRoZXJlIGlzIGEgZmlybXdhcmUgY2FsbCBpdCBjYW4gbWFrZSB0byBkZXRlcm1pbmUgaWYKK3RoaXMgaXMgdGhlIGNhc2UuIElmIHNvLCB0aGVuIHRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBwdXQgaXRzZWxmCitpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSAoZ2l2ZW4gdGhhdCBpdCB3b24ndCBiZSBhYmxlIHRvIGNvbXBsZXRlIGFueQorcGVuZGluZyB3b3JrKSBhbmQgc3RhcnQgcmVjb3Zlcnkgb2YgdGhlIGNhcmQuICBSZWNvdmVyeSBub3JtYWxseQord291bGQgY29uc2lzdCBvZiByZXNldGluZyB0aGUgUENJIGRldmljZSAoaG9sZGluZyB0aGUgUENJICNSU1QKK2xpbmUgaGlnaCBmb3IgdHdvIHNlY29uZHMpLCBmb2xsb3dlZCBieSBzZXR0aW5nIHVwIHRoZSBkZXZpY2UKK2NvbmZpZyBzcGFjZSAodGhlIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMgKEJBUidzKSwgbGF0ZW5jeSB0aW1lciwKK2NhY2hlIGxpbmUgc2l6ZSwgaW50ZXJydXB0IGxpbmUsIGFuZCBzbyBvbikuICBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEKK3JlaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSBkcml2ZXIuICBJbiBhIHdvcnN0LWNhc2Ugc2NlbmFyaW8sCit0aGUgcG93ZXIgdG8gdGhlIGNhcmQgY2FuIGJlIHRvZ2dsZWQsIGF0IGxlYXN0IG9uIGhvdC1wbHVnLWNhcGFibGUKK3Nsb3RzLiAgSW4gcHJpbmNpcGxlLCBsYXllcnMgZmFyIGFib3ZlIHRoZSBkZXZpY2UgZHJpdmVyIHByb2JhYmx5CitkbyBub3QgbmVlZCB0byBrbm93IHRoYXQgdGhlIFBDSSBjYXJkIGhhcyBiZWVuICJyZWJvb3RlZCIgaW4gdGhpcword2F5OyBpZGVhbGx5LCB0aGVyZSBzaG91bGQgYmUgYXQgbW9zdCBhIHBhdXNlIGluIEV0aGVybmV0L2Rpc2svVVNCCitJL08gd2hpbGUgdGhlIGNhcmQgaXMgYmVpbmcgcmVzZXQuCisKK0lmIHRoZSBjYXJkIGNhbm5vdCBiZSByZWNvdmVyZWQgYWZ0ZXIgdGhyZWUgb3IgZm91ciByZXNldHMsIHRoZQora2VybmVsL2RldmljZSBkcml2ZXIgc2hvdWxkIGFzc3VtZSB0aGUgd29yc3QtY2FzZSBzY2VuYXJpbywgdGhhdCB0aGUKK2NhcmQgaGFzIGRpZWQgY29tcGxldGVseSwgYW5kIHJlcG9ydCB0aGlzIGVycm9yIHRvIHRoZSBzeXNhZG1pbi4KK0luIGFkZGl0aW9uLCBlcnJvciBtZXNzYWdlcyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCBSVEFTIGFuZCBhbHNvIHRocm91Z2gKK3N5c2xvZ2QgKC92YXIvbG9nL21lc3NhZ2VzKSB0byBhbGVydCB0aGUgc3lzYWRtaW4gb2YgUENJIHJlc2V0cy4KK1RoZSBjb3JyZWN0IHdheSB0byBkZWFsIHdpdGggZmFpbGVkIGFkYXB0ZXJzIGlzIHRvIHVzZSB0aGUgc3RhbmRhcmQKK1BDSSBob3RwbHVnIHRvb2xzIHRvIHJlbW92ZSBhbmQgcmVwbGFjZSB0aGUgZGVhZCBjYXJkLgorCisKK0N1cnJlbnQgUFBDNjQgTGludXggRUVIIEltcGxlbWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXQgdGhpcyB0aW1lLCBhIGdlbmVyaWMgRUVIIHJlY292ZXJ5IG1lY2hhbmlzbSBoYXMgYmVlbiBpbXBsZW1lbnRlZCwKK3NvIHRoYXQgaW5kaXZpZHVhbCBkZXZpY2UgZHJpdmVycyBkbyBub3QgbmVlZCB0byBiZSBtb2RpZmllZCB0byBzdXBwb3J0CitFRUggcmVjb3ZlcnkuICBUaGlzIGdlbmVyaWMgbWVjaGFuaXNtIHBpZ2d5LWJhY2tzIG9uIHRoZSBQQ0kgaG90cGx1ZworaW5mcmFzdHJ1Y3R1cmUsICBhbmQgcGVyY29sYXRlcyBldmVudHMgdXAgdGhyb3VnaCB0aGUgaG90cGx1Zy91ZGV2CitpbmZyYXN0cnVjdHVyZS4gIEZvbGxvd2lpbmcgaXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBob3cgdGhpcyBpcworYWNjb21wbGlzaGVkLgorCitFRUggbXVzdCBiZSBlbmFibGVkIGluIHRoZSBQSEIncyB2ZXJ5IGVhcmx5IGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLAorYW5kIGlmIGEgUENJIHNsb3QgaXMgaG90LXBsdWdnZWQuIFRoZSBmb3JtZXIgaXMgcGVyZm9ybWVkIGJ5CitlZWhfaW5pdCgpIGluIGFyY2gvcHBjNjQva2VybmVsL2VlaC5jLCBhbmQgdGhlIGxhdGVyIGJ5Citkcml2ZXJzL3BjaS9ob3RwbHVnL3BTZXJpZXNfcGNpLmMgY2FsbGluZyBpbiB0byB0aGUgZWVoLmMgY29kZS4KK0VFSCBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIGEgUENJIHNjYW4gb2YgdGhlIGRldmljZSBjYW4gcHJvY2VlZC4KK0N1cnJlbnQgUG93ZXI1IGhhcmR3YXJlIHdpbGwgbm90IHdvcmsgdW5sZXNzIEVFSCBpcyBlbmFibGVkOworYWx0aG91Z2ggb2xkZXIgUG93ZXI0IGNhbiBydW4gd2l0aCBpdCBkaXNhYmxlZC4gIEVmZmVjdGl2ZWx5LAorRUVIIGNhbiBubyBsb25nZXIgYmUgdHVybmVkIG9mZi4gIFBDSSBkZXZpY2VzICptdXN0KiBiZQorcmVnaXN0ZXJlZCB3aXRoIHRoZSBFRUggY29kZTsgdGhlIEVFSCBjb2RlIG5lZWRzIHRvIGtub3cgYWJvdXQKK3RoZSBJL08gYWRkcmVzcyByYW5nZXMgb2YgdGhlIFBDSSBkZXZpY2UgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuCitlcnJvci4gIEdpdmVuIGFuIGFyYml0cmFyeSBhZGRyZXNzLCB0aGUgcm91dGluZQorcGNpX2dldF9kZXZpY2VfYnlfYWRkcigpIHdpbGwgZmluZCB0aGUgcGNpIGRldmljZSBhc3NvY2lhdGVkCit3aXRoIHRoYXQgYWRkcmVzcyAoaWYgYW55KS4KKworVGhlIGRlZmF1bHQgaW5jbHVkZS9hc20tcHBjNjQvaW8uaCBtYWNyb3MgcmVhZGIoKSwgaW5iKCksIGluc2IoKSwKK2V0Yy4gaW5jbHVkZSBhIGNoZWNrIHRvIHNlZSBpZiB0aGUgdGhlIGkvbyByZWFkIHJldHVybmVkIGFsbC0weGZmJ3MuCitJZiBzbywgdGhlc2UgbWFrZSBhIGNhbGwgdG8gZWVoX2RuX2NoZWNrX2ZhaWx1cmUoKSwgd2hpY2ggaW4gdHVybgorYXNrcyB0aGUgZmlybXdhcmUgaWYgdGhlIGFsbC1mZidzIHZhbHVlIGlzIHRoZSBzaWduIG9mIGEgdHJ1ZSBFRUgKK2Vycm9yLiAgSWYgaXQgaXMgbm90LCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBhcyBub3JtYWwuICBUaGUgZ3JhbmQKK3RvdGFsIG51bWJlciBvZiB0aGVzZSBmYWxzZSBhbGFybXMgb3IgImZhbHNlIHBvc2l0aXZlcyIgY2FuIGJlCitzZWVuIGluIC9wcm9jL3BwYzY0L2VlaCAoc3ViamVjdCB0byBjaGFuZ2UpLiAgTm9ybWFsbHksIGFsbW9zdAorYWxsIG9mIHRoZXNlIG9jY3VyIGR1cmluZyBib290LCB3aGVuIHRoZSBQQ0kgYnVzIGlzIHNjYW5uZWQsIHdoZXJlCithIGxhcmdlIG51bWJlciBvZiAweGZmIHJlYWRzIGFyZSBwYXJ0IG9mIHRoZSBidXMgc2NhbiBwcm9jZWR1cmUuCisKK0lmIGEgZnJvemVuIHNsb3QgaXMgZGV0ZWN0ZWQsIGNvZGUgaW4gYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMgd2lsbAorcHJpbnQgYSBzdGFjayB0cmFjZSB0byBzeXNsb2cgKC92YXIvbG9nL21lc3NhZ2VzKS4gIFRoaXMgc3RhY2sgdHJhY2UKK2hhcyBwcm92ZW4gdG8gYmUgdmVyeSB1c2VmdWwgdG8gZGV2aWNlLWRyaXZlciBhdXRob3JzIGZvciBmaW5kaW5nCitvdXQgYXQgd2hhdCBwb2ludCB0aGUgRUVIIGVycm9yIHdhcyBkZXRlY3RlZCwgYXMgdGhlIGVycm9yIGl0c2VsZgordXN1YWxseSBvY2N1cnMgc2xpZ2h0bHkgYmVmb3JlaGFuZC4KKworTmV4dCwgaXQgdXNlcyB0aGUgTGludXgga2VybmVsIG5vdGlmaWVyIGNoYWluL3dvcmsgcXVldWUgbWVjaGFuaXNtIHRvCithbGxvdyBhbnkgaW50ZXJlc3RlZCBwYXJ0aWVzIHRvIGZpbmQgb3V0IGFib3V0IHRoZSBmYWlsdXJlLiAgRGV2aWNlCitkcml2ZXJzLCBvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBjYW4gdXNlCitlZWhfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopIHRvIGZpbmQgb3V0IGFib3V0IEVFSAorZXZlbnRzLiAgVGhlIGV2ZW50IHdpbGwgaW5jbHVkZSBhIHBvaW50ZXIgdG8gdGhlIHBjaSBkZXZpY2UsIHRoZQorZGV2aWNlIG5vZGUgYW5kIHNvbWUgc3RhdGUgaW5mby4gIFJlY2VpdmVycyBvZiB0aGUgZXZlbnQgY2FuICJkbyBhcwordGhleSB3aXNoIjsgdGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIGJlIGRlc2NyaWJlZCBmdXJ0aGVyIGluIHRoaXMKK3NlY3Rpb24uCisKK1RvIGFzc2lzdCBpbiB0aGUgcmVjb3Zlcnkgb2YgdGhlIGRldmljZSwgZWVoLmMgZXhwb3J0cyB0aGUKK2ZvbGxvd2luZyBmdW5jdGlvbnM6CisKK3J0YXNfc2V0X3Nsb3RfcmVzZXQoKSAtLSBhc3NlcnQgdGhlICBQQ0kgI1JTVCBsaW5lIGZvciAxLzh0aCBvZiBhIHNlY29uZAorcnRhc19jb25maWd1cmVfYnJpZGdlKCkgLS0gYXNrIGZpcm13YXJlIHRvIGNvbmZpZ3VyZSBhbnkgUENJIGJyaWRnZXMKKyAgIGxvY2F0ZWQgdG9wb2xvZ2ljYWxseSB1bmRlciB0aGUgcGNpIHNsb3QuCitlZWhfc2F2ZV9iYXJzKCkgYW5kIGVlaF9yZXN0b3JlX2JhcnMoKTogc2F2ZSBhbmQgcmVzdG9yZSB0aGUgUENJCisgICBjb25maWctc3BhY2UgaW5mbyBmb3IgYSBkZXZpY2UgYW5kIGFueSBkZXZpY2VzIHVuZGVyIGl0LgorCisKK0EgaGFuZGxlciBmb3IgdGhlIEVFSCBub3RpZmllcl9ibG9jayBldmVudHMgaXMgaW1wbGVtZW50ZWQgaW4KK2RyaXZlcnMvcGNpL2hvdHBsdWcvcFNlcmllc19wY2kuYywgY2FsbGVkIGhhbmRsZV9lZWhfZXZlbnRzKCkuCitJdCBzYXZlcyB0aGUgZGV2aWNlIEJBUidzIGFuZCB0aGVuIGNhbGxzIHJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcigpLgorVGhpcyBsYXN0IGNhbGwgY2F1c2VzIHRoZSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgY2FyZCB0byBiZSBzdG9wcGVkLAord2hpY2ggY2F1c2VzIGhvdHBsdWcgZXZlbnRzIHRvIGdvIG91dCB0byB1c2VyIHNwYWNlLiBUaGlzIHRyaWdnZXJzCit1c2VyLXNwYWNlIHNjcmlwdHMgdGhhdCBtaWdodCBpc3N1ZSBjb21tYW5kcyBzdWNoIGFzICJpZmRvd24gZXRoMCIKK2ZvciBldGhlcm5ldCBjYXJkcywgYW5kIHNvIG9uLiAgVGhpcyBoYW5kbGVyIHRoZW4gc2xlZXBzIGZvciA1IHNlY29uZHMsCitob3BpbmcgdG8gZ2l2ZSB0aGUgdXNlci1zcGFjZSBzY3JpcHRzIGVub3VnaCB0aW1lIHRvIGNvbXBsZXRlLgorSXQgdGhlbiByZXNldHMgdGhlIFBDSSBjYXJkLCByZWNvbmZpZ3VyZXMgdGhlIGRldmljZSBCQVIncywgYW5kCithbnkgYnJpZGdlcyB1bmRlcm5lYXRoLiBJdCB0aGVuIGNhbGxzIHJwYXBocF9lbmFibGVfcGNpX3Nsb3QoKSwKK3doaWNoIHJlc3RhcnRzIHRoZSBkZXZpY2UgZHJpdmVyIGFuZCB0cmlnZ2VycyBtb3JlIHVzZXItc3BhY2UKK2V2ZW50cyAoZm9yIGV4YW1wbGUsIGNhbGxpbmcgImlmdXAgZXRoMCIgZm9yIGV0aGVybmV0IGNhcmRzKS4KKworCitEZXZpY2UgU2h1dGRvd24gYW5kIFVzZXItU3BhY2UgRXZlbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHdoYXQgaGFwcGVucyB3aGVuIGEgcGNpIHNsb3QgaXMgdW5jb25maWd1cmVkLAorZm9jdXNpbmcgb24gaG93IHRoZSBkZXZpY2UgZHJpdmVyIGdldHMgc2h1dCBkb3duLCBhbmQgb24gaG93IHRoZQorZXZlbnRzIGdldCBkZWxpdmVyZWQgdG8gdXNlci1zcGFjZSBzY3JpcHRzLgorCitGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBzZXF1ZW5jZSBvZiBldmVudHMgdGhhdCBjYXVzZSBhIGRldmljZSBkcml2ZXIKK2Nsb3NlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGZpcnN0IHBoYXNlIG9mIGFuIEVFSCByZXNldC4KK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2UgaXMgYW4gZXhhbXBsZSBvZiB0aGUgcGNuZXQzMiBkZXZpY2UgZHJpdmVyLgorCisgICAgcnBhX3BocF91bmNvbmZpZ19wY2lfYWRhcHRlciAoc3RydWN0IHNsb3QgKikgIC8vIGluIHJwYXBocF9wY2kuYworICAgIHsKKyAgICAgIGNhbGxzCisgICAgICBwY2lfcmVtb3ZlX2J1c19kZXZpY2UgKHN0cnVjdCBwY2lfZGV2ICopIC8vIGluIC9kcml2ZXJzL3BjaS9yZW1vdmUuYworICAgICAgeworICAgICAgICBjYWxscworICAgICAgICBwY2lfZGVzdHJveV9kZXYgKHN0cnVjdCBwY2lfZGV2ICopCisgICAgICAgIHsKKyAgICAgICAgICBjYWxscworICAgICAgICAgIGRldmljZV91bnJlZ2lzdGVyICgmZGV2LT5kZXYpIC8vIGluIC9kcml2ZXJzL2Jhc2UvY29yZS5jCisgICAgICAgICAgeworICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgIGRldmljZV9kZWwgKHN0cnVjdCBkZXZpY2UgKikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgICAgYnVzX3JlbW92ZV9kZXZpY2UoKSAvLyBpbiAvZHJpdmVycy9iYXNlL2J1cy5jCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYWxscworICAgICAgICAgICAgICAgIGRldmljZV9yZWxlYXNlX2RyaXZlcigpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyLT5yZW1vdmUoKSB3aGljaCBpcyBqdXN0CisgICAgICAgICAgICAgICAgICBwY2lfZGV2aWNlX3JlbW92ZSgpICAvLyBpbiAvZHJpdmVycy9wY2kvcGNpX2RyaXZlci5jCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZHJpdmVyLT5yZW1vdmUoKSB3aGljaCBpcyBqdXN0CisgICAgICAgICAgICAgICAgICAgIHBjbmV0MzJfcmVtb3ZlX29uZSgpIC8vIGluIC9kcml2ZXJzL25ldC9wY25ldDMyLmMKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl9uZXRkZXYoKSAvLyBpbiAvbmV0L2NvcmUvZGV2LmMKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxscworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Nsb3NlKCkgIC8vIGluIC9uZXQvY29yZS9kZXYuYworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHMgZGV2LT5zdG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBqdXN0IHBjbmV0MzJfY2xvc2UoKSAvLyBpbiBwY25ldDMyLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZG9lcyB3aGF0IHlvdSB3YW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RvcCB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgd2hpY2gKKyAgICAgICAgICAgICAgICAgICBmcmVlcyBwY25ldDMyIGRldmljZSBkcml2ZXIgbWVtb3J5CisgICAgICAgICAgICAgICAgfQorICAgICB9fX19fX0KKworCisgICAgaW4gZHJpdmVycy9wY2kvcGNpX2RyaXZlci5jLAorICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyLT5yZW1vdmUoKSBpcyBqdXN0IHBjaV9kZXZpY2VfcmVtb3ZlKCkKKyAgICB3aGljaCBjYWxscyBzdHJ1Y3QgcGNpX2RyaXZlci0+cmVtb3ZlKCkgd2hpY2ggaXMgcGNuZXQzMl9yZW1vdmVfb25lKCkKKyAgICB3aGljaCBjYWxscyB1bnJlZ2lzdGVyX25ldGRldigpICAoaW4gbmV0L2NvcmUvZGV2LmMpCisgICAgd2hpY2ggY2FsbHMgZGV2X2Nsb3NlKCkgIChpbiBuZXQvY29yZS9kZXYuYykKKyAgICB3aGljaCBjYWxscyBkZXYtPnN0b3AoKSB3aGljaCBpcyBwY25ldDMyX2Nsb3NlKCkKKyAgICB3aGljaCB0aGVuIGRvZXMgdGhlIGFwcHJvcHJpYXRlIHNodXRkb3duLgorCistLS0KK0ZvbGxvd2luZyBpcyB0aGUgYW5hbG9nb3VzIHN0YWNrIHRyYWNlIGZvciBldmVudHMgc2VudCB0byB1c2VyLXNwYWNlCit3aGVuIHRoZSBwY2kgZGV2aWNlIGlzIHVuY29uZmlndXJlZC4KKworcnBhX3BocF91bmNvbmZpZ19wY2lfYWRhcHRlcigpIHsgICAgICAgICAgICAgLy8gaW4gcnBhcGhwX3BjaS5jCisgIGNhbGxzCisgIHBjaV9yZW1vdmVfYnVzX2RldmljZSAoc3RydWN0IHBjaV9kZXYgKikgeyAvLyBpbiAvZHJpdmVycy9wY2kvcmVtb3ZlLmMKKyAgICBjYWxscworICAgIHBjaV9kZXN0cm95X2RldiAoc3RydWN0IHBjaV9kZXYgKikgeworICAgICAgY2FsbHMKKyAgICAgIGRldmljZV91bnJlZ2lzdGVyICgmZGV2LT5kZXYpIHsgICAgICAvLyBpbiAvZHJpdmVycy9iYXNlL2NvcmUuYworICAgICAgICBjYWxscworICAgICAgICBkZXZpY2VfZGVsKHN0cnVjdCBkZXZpY2UgKiBkZXYpIHsgIC8vIGluIC9kcml2ZXJzL2Jhc2UvY29yZS5jCisgICAgICAgICAgY2FsbHMKKyAgICAgICAgICBrb2JqZWN0X2RlbCgpIHsgICAgICAgICAgICAgICAgICAvL2luIC9saWJzL2tvYmplY3QuYworICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgIGtvYmplY3RfaG90cGx1ZygpIHsgICAgICAgICAgICAvLyBpbiAvbGlicy9rb2JqZWN0LmMKKyAgICAgICAgICAgICAgY2FsbHMKKyAgICAgICAgICAgICAga3NldF9ob3RwbHVnKCkgeyAgICAgICAgICAgICAvLyBpbiAvbGliL2tvYmplY3QuYworICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAga3NldC0+aG90cGx1Z19vcHMtPmhvdHBsdWcoKSB3aGljaCBpcyByZWFsbHkganVzdAorICAgICAgICAgICAgICAgIGEgY2FsbCB0bworICAgICAgICAgICAgICAgIGRldl9ob3RwbHVnKCkgeyAgICAgICAgICAgLy8gaW4gL2RyaXZlcnMvYmFzZS9jb3JlLmMKKyAgICAgICAgICAgICAgICAgIGNhbGxzCisgICAgICAgICAgICAgICAgICBkZXYtPmJ1cy0+aG90cGx1ZygpIHdoaWNoIGlzIHJlYWxseSBqdXN0IGEgY2FsbCB0bworICAgICAgICAgICAgICAgICAgcGNpX2hvdHBsdWcgKCkgeyAgICAgIC8vIGluIGRyaXZlcnMvcGNpL2hvdHBsdWcuYworICAgICAgICAgICAgICAgICAgICB3aGljaCBwcmludHMgZGV2aWNlIG5hbWUsIGV0Yy4uLi4KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgdGhlbiBrc2V0X2hvdHBsdWcoKSBjYWxscworICAgICAgICAgICAgICAgIGNhbGxfdXNlcm1vZGVoZWxwZXIgKCkgd2l0aAorICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF09aG90cGx1Z19wYXRoW10gd2hpY2ggaXMgIi9zYmluL2hvdHBsdWciCisgICAgICAgICAgICAgLS0+IGV2ZW50IHRvIHVzZXJzcGFjZSwKKyAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAga29iamVjdF9kZWwoKSB0aGVuIGNhbGxzIHN5c2ZzX3JlbW92ZV9kaXIoKSwgd2hpY2ggd291bGQKKyAgICAgICAgIHRyaWdnZXIgYW55IHVzZXItc3BhY2UgZGFlbW9uIHRoYXQgd2FzIHdhdGNoaW5nIC9zeXNmcywKKyAgICAgICAgIGFuZCBub3RpY2UgdGhlIGRlbGV0ZSBldmVudC4KKworCitQcm8ncyBhbmQgQ29uJ3Mgb2YgdGhlIEN1cnJlbnQgRGVzaWduCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBhcmUgc2V2ZXJhbCBpc3N1ZXMgd2l0aCB0aGUgY3VycmVudCBFRUggc29mdHdhcmUgcmVjb3ZlcnkgZGVzaWduLAord2hpY2ggbWF5IGJlIGFkZHJlc3NlZCBpbiBmdXR1cmUgcmV2aXNpb25zLiAgQnV0IGZpcnN0LCBub3RlIHRoYXQgdGhlCitiaWcgcGx1cyBvZiB0aGUgY3VycmVudCBkZXNpZ24gaXMgdGhhdCBubyBjaGFuZ2VzIG5lZWQgdG8gYmUgbWFkZSB0bworaW5kaXZpZHVhbCBkZXZpY2UgZHJpdmVycywgc28gdGhhdCB0aGUgY3VycmVudCBkZXNpZ24gdGhyb3dzIGEgd2lkZSBuZXQuCitUaGUgYmlnZ2VzdCBuZWdhdGl2ZSBvZiB0aGUgZGVzaWduIGlzIHRoYXQgaXQgcG90ZW50aWFsbHkgZGlzdHVyYnMKK25ldHdvcmsgZGFlbW9ucyBhbmQgZmlsZSBzeXN0ZW1zIHRoYXQgZGlkbid0IG5lZWQgdG8gYmUgZGlzdHVyYmVkLgorCistLSBBIG1pbm9yIGNvbXBsYWludCBpcyB0aGF0IHJlc2V0dGluZyB0aGUgbmV0d29yayBjYXJkIGNhdXNlcworICAgdXNlci1zcGFjZSBiYWNrLXRvLWJhY2sgaWZkb3duL2lmdXAgYnVycHMgdGhhdCBwb3RlbnRpYWxseSBkaXN0dXJiCisgICBuZXR3b3JrIGRhZW1vbnMsIHRoYXQgZGlkbid0IG5lZWQgdG8gZXZlbiBrbm93IHRoYXQgdGhlIHBjaQorICAgY2FyZCB3YXMgYmVpbmcgcmVib290ZWQuCisKKy0tIEEgbW9yZSBzZXJpb3VzIGNvbmNlcm4gaXMgdGhhdCB0aGUgc2FtZSByZXNldCwgZm9yIFNDU0kgZGV2aWNlcywKKyAgIGNhdXNlcyBoYXZvYyB0byBtb3VudGVkIGZpbGUgc3lzdGVtcy4gIFNjcmlwdHMgY2Fubm90IHBvc3QtZmFjdG8KKyAgIHVubW91bnQgYSBmaWxlIHN5c3RlbSB3aXRob3V0IGZsdXNoaW5nIHBlbmRpbmcgYnVmZmVycywgYnV0IHRoaXMKKyAgIGlzIGltcG9zc2libGUsIGJlY2F1c2UgSS9PIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZC4gIFRodXMsCisgICBpZGVhbGx5LCB0aGUgcmVzZXQgc2hvdWxkIGhhcHBlbiBhdCBvciBiZWxvdyB0aGUgYmxvY2sgbGF5ZXIsCisgICBzbyB0aGF0IHRoZSBmaWxlIHN5c3RlbXMgYXJlIG5vdCBkaXN0dXJiZWQuCisKKyAgIFJlaXNlcmZzIGRvZXMgbm90IHRvbGVyYXRlIGVycm9ycyByZXR1cm5lZCBmcm9tIHRoZSBibG9jayBkZXZpY2UuCisgICBFeHQzZnMgc2VlbXMgdG8gYmUgdG9sZXJhbnQsIHJldHJ5aW5nIHJlYWRzL3dyaXRlcyB1bnRpbCBpdCBkb2VzCisgICBzdWNjZWVkLiBCb3RoIGhhdmUgYmVlbiBvbmx5IGxpZ2h0bHkgdGVzdGVkIGluIHRoaXMgc2NlbmFyaW8uCisKKyAgIFRoZSBTQ1NJLWdlbmVyaWMgc3Vic3lzdGVtIGFscmVhZHkgaGFzIGJ1aWx0LWluIGNvZGUgZm9yIHBlcmZvcm1pbmcKKyAgIFNDU0kgZGV2aWNlIHJlc2V0cywgU0NTSSBidXMgcmVzZXRzLCBhbmQgU0NTSSBob3N0LWJ1cy1hZGFwdGVyCisgICAoSEJBKSByZXNldHMuICBUaGVzZSBhcmUgY2FzY2FkZWQgaW50byBhIGNoYWluIG9mIGF0dGVtcHRlZAorICAgcmVzZXRzIGlmIGEgU0NTSSBjb21tYW5kIGZhaWxzLiBUaGVzZSBhcmUgY29tcGxldGVseSBoaWRkZW4KKyAgIGZyb20gdGhlIGJsb2NrIGxheWVyLiAgSXQgd291bGQgYmUgdmVyeSBuYXR1cmFsIHRvIGFkZCBhbiBFRUgKKyAgIHJlc2V0IGludG8gdGhpcyBjaGFpbiBvZiBldmVudHMuCisKKy0tIElmIGEgU0NTSSBlcnJvciBvY2N1cnMgZm9yIHRoZSByb290IGRldmljZSwgYWxsIGlzIGxvc3QgdW5sZXNzCisgICB0aGUgc3lzYWRtaW4gaGFkIHRoZSBmb3Jlc2lnaHQgdG8gcnVuIC9iaW4sIC9zYmluLCAvZXRjLCAvdmFyCisgICBhbmQgc28gb24sIG91dCBvZiByYW1kaXNrL3RtcGZzLgorCisKK0NvbmNsdXNpb25zCistLS0tLS0tLS0tLQorVGhlcmUncyBmb3J3YXJkIHByb2dyZXNzIC4uLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE2MmUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2h2Y3MudHh0CkBAIC0wLDAgKzEsNTY3IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCQkgICBIVkNTCisJSUJNICJIeXBlcnZpc29yIFZpcnR1YWwgQ29uc29sZSBTZXJ2ZXIiIEluc3RhbGxhdGlvbiBHdWlkZQorCQkJICBmb3IgTGludXggS2VybmVsIDIuNi40KworCQkgICAgQ29weXJpZ2h0IChDKSAyMDA0IElCTSBDb3Jwb3JhdGlvbgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05PVEU6RWlnaHQgc3BhY2UgdGFicyBhcmUgdGhlIG9wdGltdW0gZWRpdG9yIHNldHRpbmcgZm9yIHJlYWRpbmcgdGhpcyBmaWxlLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICAgICAgQXV0aG9yKHMpIDogIFJ5YW4gUy4gQXJub2xkIDxyc2FAdXMuaWJtLmNvbT4KKwkJICAgICAgIERhdGUgQ3JlYXRlZDogTWFyY2gsIDAyLCAyMDA0CisJCSAgICAgICBMYXN0IENoYW5nZWQ6IEF1Z3VzdCwgMjQsIDIwMDQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWJsZSBvZiBjb250ZW50czoKKworCTEuICBEcml2ZXIgSW50cm9kdWN0aW9uOgorCTIuICBTeXN0ZW0gUmVxdWlyZW1lbnRzCisJMy4gIEJ1aWxkIE9wdGlvbnM6CisJCTMuMSAgQnVpbHQtaW46CisJCTMuMiAgTW9kdWxlOgorCTQuICBJbnN0YWxsYXRpb246CisJNS4gIENvbm5lY3Rpb246CisJNi4gIERpc2Nvbm5lY3Rpb246CisJNy4gIENvbmZpZ3VyYXRpb246CisJOC4gIFF1ZXN0aW9ucyAmIEFuc3dlcnM6CisJOS4gIFJlcG9ydGluZyBCdWdzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIERyaXZlciBJbnRyb2R1Y3Rpb246CisKK1RoaXMgaXMgdGhlIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJQk0gSHlwZXJ2aXNvciBWaXJ0dWFsIENvbnNvbGUgU2VydmVyLAorImh2Y3MiLiAgVGhlIElCTSBodmNzIHByb3ZpZGVzIGEgdHR5IGRyaXZlciBpbnRlcmZhY2UgdG8gYWxsb3cgTGludXggdXNlcgorc3BhY2UgYXBwbGljYXRpb25zIGFjY2VzcyB0byB0aGUgc3lzdGVtIGNvbnNvbGVzIG9mIGxvZ2ljYWxseSBwYXJ0aXRpb25lZAorb3BlcmF0aW5nIHN5c3RlbXMgKExpbnV4IGFuZCBBSVgpIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFydGl0aW9uZWQgUG93ZXI1CitwcGM2NCBzeXN0ZW0uICBQaHlzaWNhbCBoYXJkd2FyZSBjb25zb2xlcyBwZXIgcGFydGl0aW9uIGFyZSBub3QgcHJhY3RpY2FsCitvbiB0aGlzIGhhcmR3YXJlIHNvIHN5c3RlbSBjb25zb2xlcyBhcmUgYWNjZXNzZWQgYnkgdGhpcyBkcml2ZXIgdXNpbmcKK2Zpcm13YXJlIGludGVyZmFjZXMgdG8gdmlydHVhbCB0ZXJtaW5hbCBkZXZpY2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIuIFN5c3RlbSBSZXF1aXJlbWVudHM6CisKK1RoaXMgZGV2aWNlIGRyaXZlciB3YXMgd3JpdHRlbiB1c2luZyAyLjYuNCBMaW51eCBrZXJuZWwgQVBJcyBhbmQgd2lsbCBvbmx5CitidWlsZCBhbmQgcnVuIG9uIGtlcm5lbHMgb2YgdGhpcyB2ZXJzaW9uIG9yIGxhdGVyLgorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byBvcGVyYXRlIHNvbGVseSBvbiBJQk0gUG93ZXI1IHBwYzY0IGhhcmR3YXJlCit0aG91Z2ggc29tZSBjYXJlIHdhcyB0YWtlbiB0byBhYnN0cmFjdCB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmaXJtd2FyZQorY2FsbHMgZnJvbSB0aGUgZHJpdmVyIGNvZGUuCisKK1N5c2ZzIG11c3QgYmUgbW91bnRlZCBvbiB0aGUgc3lzdGVtIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGRldGVybWluZSB3aGljaAorbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHZ0eS1zZXJ2ZXIuICBEaXJlY3Rpb25zCitmb3Igc3lzZnMgbW91bnRpbmcgYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMy4gQnVpbGQgT3B0aW9uczoKKworVGhlIGh2Y3MgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgYXMgYSB0dHkgZHJpdmVyLiAgVGhlIHR0eSBsYXllcgorZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgYmxvY2sgb2YgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgaW4gYSBxdWFudGl0eQorcmVxdWVzdGVkIGJ5IHRoZSByZWdpc3RlcmluZyBkcml2ZXIuICBUaGUgaHZjcyBkcml2ZXIgYXNrcyB0aGUgdHR5IGxheWVyCitmb3IgNjQgb2YgdGhlc2UgbWFqb3IvbWlub3IgbnVtYmVycyBieSBkZWZhdWx0IHRvIHVzZSBmb3IgaHZjcyBkZXZpY2Ugbm9kZQorZW50cmllcy4KKworSWYgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGRldmljZSBlbnRyaWVzIGlzIGFkZXF1YXRlIHRoZW4gdGhpcyBkcml2ZXIgY2FuIGJlCitidWlsdCBpbnRvIHRoZSBrZXJuZWwuICBJZiBub3QsIHRoZSBkZWZhdWx0IGNhbiBiZSBvdmVyLXJpZGRlbiBieSBpbnNlcnRpbmcKK3RoZSBkcml2ZXIgYXMgYSBtb2R1bGUgd2l0aCBpbnNtb2QgcGFyYW1ldGVycy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszLjEgQnVpbHQtaW46CisKK1RoZSBmb2xsb3dpbmcgbWVudWNvbmZpZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBzZWxlY3RpbmcgdG8gYnVpbGQgdGhpcworZHJpdmVyIGludG8gdGhlIGtlcm5lbC4KKworCURldmljZSBEcml2ZXJzICAtLS0+CisJCUNoYXJhY3RlciBkZXZpY2VzICAtLS0+CisJCQk8Kj4gSUJNIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlIFNlcnZlciBTdXBwb3J0CisKK0JlZ2luIHRoZSBrZXJuZWwgbWFrZSBwcm9jZXNzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzMuMiBNb2R1bGU6CisKK1RoZSBmb2xsb3dpbmcgbWVudWNvbmZpZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBzZWxlY3RpbmcgdG8gYnVpbGQgdGhpcworZHJpdmVyIGFzIGEga2VybmVsIG1vZHVsZS4KKworCURldmljZSBEcml2ZXJzICAtLS0+CisJCUNoYXJhY3RlciBkZXZpY2VzICAtLS0+CisJCQk8TT4gSUJNIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlIFNlcnZlciBTdXBwb3J0CisKK1RoZSBtYWtlIHByb2Nlc3Mgd2lsbCBidWlsZCB0aGUgZm9sbG93aW5nIGtlcm5lbCBtb2R1bGVzOgorCisJaHZjcy5rbworCWh2Y3NlcnZlci5rbworCitUbyBpbnNlcnQgdGhlIG1vZHVsZSB3aXRoIHRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZXhlY3V0ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kcyBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXI6CisKKwlpbnNtb2QgaHZjc2VydmVyLmtvCisJaW5zbW9kIGh2Y3Mua28KKworVGhlIGh2Y3NlcnZlciBtb2R1bGUgY29udGFpbnMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpcm13YXJlIGNhbGxzIGFuZCBtdXN0CitiZSBpbnNlcnRlZCBmaXJzdCwgb3RoZXJ3aXNlIHRoZSBodmNzIG1vZHVsZSB3aWxsIG5vdCBmaW5kIHNvbWUgb2YgdGhlCitzeW1ib2xzIGl0IGV4cGVjdHMuCisKK1RvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHVzZSBhbiBpbnNtb2QgcGFyYW1ldGVyIGFzIGZvbGxvd3MgKHJlcXVlc3RpbmcgNAordHR5IGRldmljZXMgYXMgYW4gZXhhbXBsZSk6CisKKwlpbnNtb2QgaHZjcy5rbyBodmNzX3Bhcm1fbnVtX2RldnM9NAorCitUaGVyZSBpcyBhIG1heGltdW0gbnVtYmVyIG9mIGRldiBlbnRyaWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBvbiBpbnNtb2QuCitXZSB0aGluayB0aGF0IDEwMjQgaXMgY3VycmVudGx5IGEgZGVjZW50IG1heGltdW0gbnVtYmVyIG9mIHNlcnZlciBhZGFwdGVycwordG8gYWxsb3cuICBUaGlzIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBieSBtb2RpZnlpbmcgdGhlIGNvbnN0YW50IGluIHRoZQorc291cmNlIGZpbGUgYmVmb3JlIGJ1aWxkaW5nLgorCitOT1RFOiBUaGUgbGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgdG8gaW5zbW9kIHRoZSBkcml2ZXIgc2VlbXMgdG8gYmUgcmVsYXRlZAordG8gdGhlIG51bWJlciBvZiB0dHkgaW50ZXJmYWNlcyB0aGUgcmVnaXN0ZXJpbmcgZHJpdmVyIHJlcXVlc3RzLgorCitJbiBvcmRlciB0byByZW1vdmUgdGhlIGRyaXZlciBtb2R1bGUgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKwlybW1vZCBodmNzLmtvCisKK1RoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIGluc3RhbGxpbmcgaHZjcyBhcyBhIG1vZHVsZSBpcyB0byB1c2UgZGVwbW9kIHRvCitidWlsZCBhIGN1cnJlbnQgbW9kdWxlcy5kZXAgZmlsZSBpbiAvbGliL21vZHVsZXMvYHVuYW1lIC1yYCBhbmQgdGhlbgorZXhlY3V0ZToKKworbW9kcHJvYmUgaHZjcyBodmNzX3Bhcm1fbnVtX2RldnM9NAorCitUaGUgbW9kdWxlcy5kZXAgZmlsZSBpbmRpY2F0ZXMgdGhhdCBodmNzZXJ2ZXIua28gbmVlZHMgdG8gYmUgaW5zZXJ0ZWQKK2JlZm9yZSBodmNzLmtvIGFuZCBtb2Rwcm9iZSB1c2VzIHRoaXMgZmlsZSB0byBzbWFydGx5IGluc2VydCB0aGUgbW9kdWxlcyBpbgordGhlIHByb3BlciBvcmRlci4KKworVGhlIGZvbGxvd2luZyBtb2Rwcm9iZSBjb21tYW5kIGlzIHVzZWQgdG8gcmVtb3ZlIGh2Y3MgYW5kIGh2Y3NlcnZlciBpbiB0aGUKK3Byb3BlciBvcmRlcjoKKworbW9kcHJvYmUgLXIgaHZjcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzQuIEluc3RhbGxhdGlvbjoKKworVGhlIHR0eSBsYXllciBjcmVhdGVzIHN5c2ZzIGVudHJpZXMgd2hpY2ggY29udGFpbiB0aGUgbWFqb3IgYW5kIG1pbm9yCitudW1iZXJzIGFsbG9jYXRlZCBmb3IgdGhlIGh2Y3MgZHJpdmVyLiAgVGhlIGZvbGxvd2luZyBzbmlwcGV0IG9mICJ0cmVlIgorb3V0cHV0IG9mIHRoZSBzeXNmcyBkaXJlY3Rvcnkgc2hvd3Mgd2hlcmUgdGhlc2UgbnVtYmVycyBhcmUgcHJlc2VudGVkOgorCisJc3lzLworCXwtLSAqb3RoZXIgc3lzZnMgYmFzZSBkaXJzKgorCXwKKwl8LS0gY2xhc3MKKwl8ICAgfC0tICpvdGhlciBjbGFzc2VzIG9mIGRldmljZXMqCisJfCAgIHwKKwl8ICAgYC0tIHR0eQorCXwgICAgICAgfC0tICpvdGhlciB0dHkgZGV2aWNlcyoKKwl8ICAgICAgIHwKKwl8ICAgICAgIHwtLSBodmNzMAorCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwtLSBodmNzMQorCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwtLSBodmNzMgorCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwtLSBodmNzMworCXwgICAgICAgfCAgIGAtLSBkZXYKKwl8ICAgICAgIHwKKwl8ICAgICAgIHwtLSAqb3RoZXIgdHR5IGRldmljZXMqCisJfAorCXwtLSAqb3RoZXIgc3lzZnMgYmFzZSBkaXJzKgorCitGb3IgdGhlIGFib3ZlIGV4YW1wbGVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGlzIGEgcmVzdWx0IG9mIGNhdCdpbmcgdGhlCisiZGV2IiBlbnRyeSBpbiB0aGUgaHZjcyBkaXJlY3Rvcnk6CisKKwlQb3c1Oi9zeXMvY2xhc3MvdHR5L2h2Y3MwLyAjIGNhdCBkZXYKKwkyNTQ6MAorCisJUG93NTovc3lzL2NsYXNzL3R0eS9odmNzMS8gIyBjYXQgZGV2CisJMjU0OjEKKworCVBvdzU6L3N5cy9jbGFzcy90dHkvaHZjczIvICMgY2F0IGRldgorCTI1NDoyCisKKwlQb3c1Oi9zeXMvY2xhc3MvdHR5L2h2Y3MzLyAjIGNhdCBkZXYKKwkyNTQ6MworCitUaGUgb3V0cHV0IGZyb20gcmVhZGluZyB0aGUgImRldiIgYXR0cmlidXRlIGlzIHRoZSBjaGFyIGRldmljZSBtYWpvciBhbmQKK21pbm9yIG51bWJlcnMgdGhhdCB0aGUgdHR5IGxheWVyIGhhcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZHJpdmVyJ3MgdXNlLiAgTW9zdAorc3lzdGVtcyBydW5uaW5nIGh2Y3Mgd2lsbCBhbHJlYWR5IGhhdmUgdGhlIGRldmljZSBlbnRyaWVzIGNyZWF0ZWQgb3IgdWRldgord2lsbCBkbyBpdCBhdXRvbWF0aWNhbGx5LgorCitHaXZlbiB0aGUgZXhhbXBsZSBvdXRwdXQgYWJvdmUsIHRvIG1hbnVhbGx5IGNyZWF0ZSBhIC9kZXYvaHZjcyogbm9kZSBlbnRyeQorbWtub2QgY2FuIGJlIHVzZWQgYXMgZm9sbG93czoKKworCW1rbm9kIC9kZXYvaHZjczAgYyAyNTQgMAorCW1rbm9kIC9kZXYvaHZjczEgYyAyNTQgMQorCW1rbm9kIC9kZXYvaHZjczIgYyAyNTQgMgorCW1rbm9kIC9kZXYvaHZjczMgYyAyNTQgMworCitVc2luZyBta25vZCB0byBtYW51YWxseSBjcmVhdGUgdGhlIGRldmljZSBlbnRyaWVzIG1ha2VzIHRoZXNlIGRldmljZSBub2RlcworcGVyc2lzdGVudC4gIE9uY2UgY3JlYXRlZCB0aGV5IHdpbGwgZXhpc3QgcHJpb3IgdG8gdGhlIGRyaXZlciBpbnNtb2QuCisKK0F0dGVtcHRpbmcgdG8gY29ubmVjdCBhbiBhcHBsaWNhdGlvbiB0byAvZGV2L2h2Y3MqIHByaW9yIHRvIGluc2VydGlvbiBvZgordGhlIGh2Y3MgbW9kdWxlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIG1lc3NhZ2Ugc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCisJIi9kZXYvaHZjcyo6IE5vIHN1Y2ggZGV2aWNlIi4KKworTk9URTogSnVzdCBiZWNhdXNlIHRoZXJlIGlzIGEgZGV2aWNlIG5vZGUgcHJlc2VudCBkb2Vzbid0IG1lYW4gdGhhdCB0aGVyZQoraXMgYSB2dHktc2VydmVyIGRldmljZSBjb25maWd1cmVkIGZvciB0aGF0IG5vZGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNS4gQ29ubmVjdGlvbgorCitTaW5jZSB0aGlzIGRyaXZlciBjb250cm9scyBkZXZpY2VzIHRoYXQgcHJvdmlkZSBhIHR0eSBpbnRlcmZhY2UgYSB1c2VyIGNhbgoraW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIG5vZGUgZW50cmllcyB1c2luZyBhbnkgc3RhbmRhcmQgdHR5LWludGVyYWN0aXZlCittZXRob2QgKGUuZy4gImNhdCIsICJkZCIsICJlY2hvIikuICBUaGUgaW50ZW50IG9mIHRoaXMgZHJpdmVyIGhvd2V2ZXIsIGlzCit0byBwcm92aWRlIHJlYWwgdGltZSBjb25zb2xlIGludGVyYWN0aW9uIHdpdGggYSBMaW51eCBwYXJ0aXRpb24ncyBjb25zb2xlLAord2hpY2ggcmVxdWlyZXMgdGhlIHVzZSBvZiBhcHBsaWNhdGlvbnMgdGhhdCBwcm92aWRlIGJpLWRpcmVjdGlvbmFsLAoraW50ZXJhY3RpdmUgSS9PIHdpdGggYSB0dHkgZGV2aWNlLgorCitBcHBsaWNhdGlvbnMgKGUuZy4gIm1pbmljb20iIGFuZCAic2NyZWVuIikgdGhhdCBhY3QgYXMgdGVybWluYWwgZW11bGF0b3JzCitvciBwZXJmb3JtIHRlcm1pbmFsIHR5cGUgY29udHJvbCBzZXF1ZW5jZSBjb252ZXJzaW9uIG9uIHRoZSBkYXRhIGJlaW5nCitwYXNzZWQgdGhyb3VnaCB0aGVtIGFyZSBOT1QgYWNjZXB0YWJsZSBmb3IgcHJvdmlkaW5nIGludGVyYWN0aXZlIGNvbnNvbGUKK0kvTy4gIFRoZXNlIHByb2dyYW1zIG9mdGVuIGVtdWxhdGUgYW50aXF1YXRlZCB0ZXJtaW5hbCB0eXBlcyAodnQxMDAgYW5kCitBTlNJKSBhbmQgZXhwZWN0IGluYm91bmQgZGF0YSB0byB0YWtlIHRoZSBmb3JtIG9mIG9uZSBvZiB0aGVzZSBzdXBwb3J0ZWQKK3Rlcm1pbmFsIHR5cGVzIGJ1dCB0aGV5IGVpdGhlciBkbyBub3QgY29udmVydCwgb3IgZG8gbm90IF9hZGVxdWF0ZWx5XworY29udmVydCwgb3V0Ym91bmQgZGF0YSBpbnRvIHRoZSB0ZXJtaW5hbCB0eXBlIG9mIHRoZSB0ZXJtaW5hbCB3aGljaCBpbnZva2VkCit0aGVtICh0aG91Z2ggc2NyZWVuIG1ha2VzIGFuIGF0dGVtcHQgYW5kIGNhbiBhcHBhcmVudGx5IGJlIGNvbmZpZ3VyZWQgd2l0aAorbXVjaCB0ZXJtY2FwIHdyZXN0bGluZy4pCisKK0ZvciB0aGlzIHJlYXNvbiBrZXJtaXQgYW5kIGN1IGFyZSB0d28gb2YgdGhlIHJlY29tbWVuZGVkIGFwcGxpY2F0aW9ucyBmb3IKK2ludGVyYWN0aW5nIHdpdGggYSBMaW51eCBjb25zb2xlIHZpYSBhbiBodmNzIGRldmljZS4gIFRoZXNlIHByb2dyYW1zIHNpbXBseQorYWN0IGFzIGEgY29uZHVpdCBmb3IgZGF0YSB0cmFuc2ZlciB0byBhbmQgZnJvbSB0aGUgdHR5IGRldmljZS4gIFRoZXkgZG8gbm90CityZXF1aXJlIGluYm91bmQgZGF0YSB0byB0YWtlIHRoZSBmb3JtIG9mIGEgcGFydGljdWxhciB0ZXJtaW5hbCB0eXBlLCBub3IgZG8KK3RoZXkgY29vayBvdXRib3VuZCBkYXRhIHRvIGEgcGFydGljdWxhciB0ZXJtaW5hbCB0eXBlLgorCitJbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIGNvbnNvbGUgYXBwbGljYXRpb25zIG9uZSBtdXN0IG1ha2UKK3N1cmUgdGhhdCBvbmNlIGNvbm5lY3RlZCB0byBhIC9kZXYvaHZjcyBjb25zb2xlIHRoYXQgdGhlIGNvbnNvbGUncyAkVEVSTQorZW52IHZhcmlhYmxlIGlzIHNldCB0byB0aGUgZXhhY3QgdGVybWluYWwgdHlwZSBvZiB0aGUgdGVybWluYWwgZW11bGF0b3IKK3VzZWQgdG8gbGF1bmNoIHRoZSBpbnRlcmFjdGl2ZSBJL08gYXBwbGljYXRpb24uICBJZiBvbmUgaXMgdXNpbmcgeHRlcm0gYW5kCitrZXJtaXQgdG8gY29ubmVjdCB0byAvZGV2L2h2Y3MwIHdoZW4gdGhlIGNvbnNvbGUgcHJvbXB0IGJlY29tZXMgYXZhaWxhYmxlCitvbmUgc2hvdWxkICJleHBvcnQgVEVSTT14dGVybSIgb24gdGhlIGNvbnNvbGUuICBUaGlzIHRlbGxzIG5jdXJzZXMKK2FwcGxpY2F0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGZyb20gdGhlIGNvbnNvbGUgdGhhdCB0aGV5IHNob3VsZCBvdXRwdXQKK2NvbnRyb2wgc2VxdWVuY2VzIHRoYXQgeHRlcm0gY2FuIHVuZGVyc3RhbmQuCisKK0FzIGEgcHJlY2F1dGlvbmFyeSBtZWFzdXJlIGFuIGh2Y3MgdXNlciBzaG91bGQgYWx3YXlzICJleGl0IiBmcm9tIHRoZWlyCitzZXNzaW9uIGJlZm9yZSBkaXNjb25uZWN0aW5nIGFuIGFwcGxpY2F0aW9uIHN1Y2ggYXMga2VybWl0IGZyb20gdGhlIGRldmljZQorbm9kZS4gIElmIHRoaXMgaXMgbm90IGRvbmUsIHRoZSBuZXh0IHVzZXIgdG8gY29ubmVjdCB0byB0aGUgY29uc29sZSB3aWxsCitjb250aW51ZSB1c2luZyB0aGUgcHJldmlvdXMgdXNlcidzIGxvZ2dlZCBpbiBzZXNzaW9uIHdoaWNoIGluY2x1ZGVzCit1c2luZyB0aGUgJFRFUk0gdmFyaWFibGUgdGhhdCB0aGUgcHJldmlvdXMgdXNlciBzdXBwbGllZC4KKworSG90cGx1ZyBhZGQgYW5kIHJlbW92ZSBvZiB2dHktc2VydmVyIGFkYXB0ZXJzIGFmZmVjdHMgd2hpY2ggL2Rldi9odmNzKiBub2RlCitpcyB1c2VkIHRvIGNvbm5lY3QgdG8gZWFjaCB2dHktc2VydmVyIGFkYXB0ZXIuICBJbiBvcmRlciB0byBkZXRlcm1pbmUgd2hpY2gKK3Z0eS1zZXJ2ZXIgYWRhcHRlciBpcyBhc3NvY2lhdGVkIHdpdGggd2hpY2ggL2Rldi9odmNzKiBub2RlIGEgc3BlY2lhbCBzeXNmcworYXR0cmlidXRlIGhhcyBiZWVuIGFkZGVkIHRvIGVhY2ggdnR5LXNlcnZlciBzeXNmcyBlbnRyeS4gIFRoaXMgZW50cnkgaXMKK2NhbGxlZCAiaW5kZXgiIGFuZCBzaG93aW5nIGl0IHJldmVhbHMgYW4gaW50ZWdlciB0aGF0IHJlZmVycyB0byB0aGUKKy9kZXYvaHZjcyogZW50cnkgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhhdCBkZXZpY2UuICBGb3IgaW5zdGFuY2UgY2F0aW5nIHRoZQoraW5kZXggYXR0cmlidXRlIG9mIHZ0eS1zZXJ2ZXIgYWRhcHRlciAzMDAwMDAwNCBzaG93cyB0aGUgZm9sbG93aW5nLgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzLzMwMDAwMDA0ICMgY2F0IGluZGV4CisJMgorCitUaGlzIGluZGV4IG9mICcyJyBtZWFucyB0aGF0IGluIG9yZGVyIHRvIGNvbm5lY3QgdG8gdnR5LXNlcnZlciBhZGFwdGVyCiszMDAwMDAwNCB0aGUgdXNlciBzaG91bGQgaW50ZXJhY3Qgd2l0aCAvZGV2L2h2Y3MyLgorCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBkdWUgdG8gdGhlIHN5c3RlbSBob3RwbHVnIEkvTyBjYXBhYmlsaXRpZXMgb2YgYQorc3lzdGVtIHRoZSAvZGV2L2h2Y3MqIGVudHJ5IHRoYXQgaW50ZXJhY3RzIHdpdGggYSBwYXJ0aWN1bGFyIHZ0eS1zZXJ2ZXIKK2FkYXB0ZXIgaXMgbm90IGd1YXJlbnRlZWQgdG8gcmVtYWluIHRoZSBzYW1lIGFjcm9zcyBzeXN0ZW0gcmVib290cy4gIExvb2sKK2luIHRoZSBRICYgQSBzZWN0aW9uIGZvciBtb3JlIG9uIHRoaXMgaXNzdWUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNi4gRGlzY29ubmVjdGlvbgorCitBcyBhIHNlY3VyaXR5IGZlYXR1cmUgdG8gcHJldmVudCB0aGUgZGVsaXZlcnkgb2Ygc3RhbGUgZGF0YSB0byBhbgordW5pbnRlbmRlZCB0YXJnZXQgdGhlIFBvd2VyNSBzeXN0ZW0gZmlybXdhcmUgZGlzYWJsZXMgdGhlIGZldGNoaW5nIG9mIGRhdGEKK2FuZCBkaXNjYXJkcyB0aGF0IGRhdGEgd2hlbiBhIGNvbm5lY3Rpb24gYmV0d2VlbiBhIHZ0eS1zZXJ2ZXIgYW5kIGEgdnR5IGhhcworYmVlbiBzZXZlcmVkLiAgQXMgYW4gZXhhbXBsZSwgd2hlbiBhIHZ0eS1zZXJ2ZXIgaXMgaW1tZWRpYXRlbHkgZGlzY29ubmVjdGVkCitmcm9tIGEgdnR5IGZvbGxvd2luZyBvdXRwdXQgb2YgZGF0YSB0byB0aGUgdnR5IHRoZSB2dHkgYWRhcHRlciBtYXkgbm90IGhhdmUKK2Vub3VnaCB0aW1lIGJldHdlZW4gd2hlbiBpdCByZWNlaXZlZCB0aGUgZGF0YSBpbnRlcnJ1cHQgYW5kIHdoZW4gdGhlCitjb25uZWN0aW9uIHdhcyBzZXZlcmVkIHRvIGZldGNoIHRoZSBkYXRhIGZyb20gZmlybXdhcmUgYmVmb3JlIHRoZSBmZXRjaCBpcworZGlzYWJsZWQgYnkgZmlybXdhcmUuCisKK1doZW4gaHZjcyBpcyBiZWluZyB1c2VkIHRvIHNlcnZlIGNvbnNvbGVzIHRoaXMgYmVoYXZpb3IgaXMgbm90IGEgaHVnZSBpc3N1ZQorYmVjYXVzZSB0aGUgYWRhcHRlciBzdGF5cyBjb25uZWN0ZWQgZm9yIGxhcmdlIGFtb3VudHMgb2YgdGltZSBmb2xsb3dpbmcKK2FsbW9zdCBhbGwgZGF0YSB3cml0ZXMuICBXaGVuIGh2Y3MgaXMgYmVpbmcgdXNlZCBhcyBhIHR0eSBjb25kdWl0IHRvIHR1bm5lbAorZGF0YSBiZXR3ZWVuIHR3byBwYXJ0aXRpb25zIFtzZWUgUSAmIEEgYmVsb3ddIHRoaXMgaXMgYSBodWdlIHByb2JsZW0KK2JlY2F1c2UgdGhlIHN0YW5kYXJkIExpbnV4IGJlaGF2aW9yIHdoZW4gY2F0J2luZyBvciBkZCdpbmcgZGF0YSB0byBhIGRldmljZQoraXMgdG8gb3BlbiB0aGUgdHR5LCBzZW5kIHRoZSBkYXRhLCBhbmQgdGhlbiBjbG9zZSB0aGUgdHR5LiAgSWYgdGhpcyBkcml2ZXIKK21hbnVhbGx5IHRlcm1pbmF0ZWQgdnR5LXNlcnZlciBjb25uZWN0aW9ucyBvbiB0dHkgY2xvc2UgdGhpcyB3b3VsZCBjbG9zZQordGhlIHZ0eS1zZXJ2ZXIgYW5kIHZ0eSBjb25uZWN0aW9uIGJlZm9yZSB0aGUgdGFyZ2V0IHZ0eSBoYXMgaGFkIGEgY2hhbmNlIHRvCitmZXRjaCB0aGUgZGF0YS4KKworQWRkaXRpb25hbGx5LCBkaXNjb25uZWN0aW5nIGEgdnR5LXNlcnZlciBhbmQgdnR5IG9ubHkgb24gbW9kdWxlIHJlbW92YWwgb3IKK2FkYXB0ZXIgcmVtb3ZhbCBpcyBpbXByYWN0aWNhbCBiZWNhdXNlIG90aGVyIHZ0eS1zZXJ2ZXJzIGluIG90aGVyCitwYXJ0aXRpb25zIG1heSByZXF1aXJlIHRoZSB1c2FnZSBvZiB0aGUgdGFyZ2V0IHZ0eSBhdCBhbnkgdGltZS4KKworRHVlIHRvIHRoaXMgYmVoYXZpb3JhbCByZXN0cmljdGlvbiBkaXNjb25uZWN0aW9uIG9mIHZ0eS1zZXJ2ZXJzIGZyb20gdGhlCitjb25uZWN0ZWQgdnR5IGlzIGEgbWFudWFsIHByb2NlZHVyZSB1c2luZyBhIHdyaXRlIHRvIGEgc3lzZnMgYXR0cmlidXRlCitvdXRsaW5lZCBiZWxvdywgb24gdGhlIG90aGVyIGhhbmQgdGhlIGluaXRpYWwgdnR5LXNlcnZlciBjb25uZWN0aW9uIHRvIGEKK3Z0eSBpcyBlc3RhYmxpc2hlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgZHJpdmVyLiAgTWFudWFsIHZ0eS1zZXJ2ZXIKK2Nvbm5lY3Rpb24gaXMgbmV2ZXIgcmVxdWlyZWQuCisKK0luIG9yZGVyIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGEgdnR5LXNlcnZlciBhbmQgdnR5IHRoZQorInZ0ZXJtX3N0YXRlIiBzeXNmcyBhdHRyaWJ1dGUgd2l0aGluIGVhY2ggdnR5LXNlcnZlcidzIHN5c2ZzIGVudHJ5IGlzIHVzZWQuCitSZWFkaW5nIHRoaXMgYXR0cmlidXRlIHJldmVhbHMgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBzdGF0ZSBvZiB0aGUKK3Z0eS1zZXJ2ZXIgYWRhcHRlci4gIEEgemVybyBtZWFucyB0aGF0IHRoZSB2dHktc2VydmVyIGlzIG5vdCBjb25uZWN0ZWQgdG8gYQordnR5LiAgQSBvbmUgaW5kaWNhdGVzIHRoYXQgYSBjb25uZWN0aW9uIGlzIGFjdGl2ZS4KKworV3JpdGluZyBhICcwJyAoemVybykgdG8gdGhlIHZ0ZXJtX3N0YXRlIGF0dHJpYnV0ZSB3aWxsIGRpc2Nvbm5lY3QgdGhlIFZURVJNCitjb25uZWN0aW9uIGJldHdlZW4gdGhlIHZ0eS1zZXJ2ZXIgYW5kIHRhcmdldCB2dHkgT05MWSBpZiB0aGUgdnRlcm1fc3RhdGUKK3ByZXZpb3VzbHkgcmVhZCAnMScuICBUaGUgd3JpdGUgZGlyZWN0aXZlIGlzIGlnbm9yZWQgaWYgdGhlIHZ0ZXJtX3N0YXRlCityZWFkICcwJyBvciBpZiBhbnkgdmFsdWUgb3RoZXIgdGhhbiAnMCcgd2FzIHdyaXR0ZW4gdG8gdGhlIHZ0ZXJtX3N0YXRlCithdHRyaWJ1dGUuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgd2lsbCBzaG93IHRoZSBtZXRob2QgdXNlZCBmb3IgdmVyaWZ5aW5nCit0aGUgdnR5LXNlcnZlciBjb25uZWN0aW9uIHN0YXR1cyBhbmQgZGlzY29ubmVjdGluZyBhIHZ0eS1zZXJ2ZXIgY29ubmVjdGlvbi4KKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGNhdCB2dGVybV9zdGF0ZQorCTEKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGVjaG8gMCA+IHZ0ZXJtX3N0YXRlCisKKwlQb3c1Oi9zeXMvYnVzL3Zpby9kcml2ZXJzL2h2Y3MvMzAwMDAwMDQgIyBjYXQgdnRlcm1fc3RhdGUKKwkwCisKK0FsbCB2dHktc2VydmVyIGNvbm5lY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgd2hlbiB0aGUgZGV2aWNlIGlzCitob3RwbHVnIHJlbW92ZWQgYW5kIHdoZW4gdGhlIG1vZHVsZSBpcyByZW1vdmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzcuIENvbmZpZ3VyYXRpb24KKworRWFjaCB2dHktc2VydmVyIGhhcyBhIHN5c2ZzIGVudHJ5IGluIHRoZSAvc3lzL2RldmljZXMvdmlvIGRpcmVjdG9yeSwgd2hpY2gKK2lzIHN5bWxpbmtlZCBpbiBzZXZlcmFsIG90aGVyIHN5c2ZzIHRyZWUgZGlyZWN0b3JpZXMsIG5vdGFibHkgdW5kZXIgdGhlCitodmNzIGRyaXZlciBlbnRyeSwgd2hpY2ggbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisKKwlQb3c1Oi9zeXMvYnVzL3Zpby9kcml2ZXJzL2h2Y3MgIyBscworCS4gIC4uICAzMDAwMDAwMyAgMzAwMDAwMDQgIHJlc2NhbgorCitCeSBkZXNpZ24sIGZpcm13YXJlIG5vdGlmaWVzIHRoZSBodmNzIGRyaXZlciBvZiB2dHktc2VydmVyIGxpZmV0aW1lcyBhbmQKK3BhcnRuZXIgdnR5IHJlbW92YWxzIGJ1dCBub3QgdGhlIGFkZGl0aW9uIG9mIHBhcnRuZXIgdnR5cy4gIFNpbmNlIGFuIEhNQworU3VwZXIgQWRtaW4gY2FuIGFkZCBwYXJ0bmVyIGluZm8gZHluYW1pY2FsbHkgd2UgaGF2ZSBwcm92aWRlZCB0aGUgaHZjcworZHJpdmVyIHN5c2ZzIGRpcmVjdG9yeSB3aXRoIHRoZSAicmVzY2FuIiB1cGRhdGUgYXR0cmlidXRlIHdoaWNoIHdpbGwgcXVlcnkKK2Zpcm13YXJlIGFuZCB1cGRhdGUgdGhlIHBhcnRuZXIgaW5mbyBmb3IgYWxsIHRoZSB2dHktc2VydmVycyB0aGF0IHRoaXMKK2RyaXZlciBtYW5hZ2VzLiAgV3JpdGluZyBhICcxJyB0byB0aGUgYXR0cmlidXRlIHRyaWdnZXJzIHRoZSB1cGRhdGUuICBBbgorZXhwbGljaXQgZXhhbXBsZSBmb2xsb3dzOgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzICMgZWNobyAxID4gcmVzY2FuCisKK1JlYWRpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIGluZGljYXRlIGEgc3RhdGUgb2YgJzEnIG9yICcwJy4gIEEgb25lIGluZGljYXRlcwordGhhdCBhbiB1cGRhdGUgaXMgaW4gcHJvY2Vzcy4gIEEgemVybyBpbmRpY2F0ZXMgdGhhdCBhbiB1cGRhdGUgaGFzCitjb21wbGV0ZWQgb3Igd2FzIG5ldmVyIGV4ZWN1dGVkLgorCitWdHktc2VydmVyIGVudHJpZXMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGEgMzIgYml0IHBhcnRpdGlvbiB1bmlxdWUgdW5pdAorYWRkcmVzcyB0aGF0IGlzIGNyZWF0ZWQgYnkgZmlybXdhcmUuICBBbiBleGFtcGxlIHZ0eS1zZXJ2ZXIgc3lzZnMgZW50cnkKK2xvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGxzCisJLiAgIGN1cnJlbnRfdnR5ICAgZGV2c3BlYyAgbmFtZSAgICAgICAgICBwYXJ0bmVyX3Z0eXMKKwkuLiAgZGV0YWNoX3N0YXRlICBpbmRleCAgICBwYXJ0bmVyX2NsY3MgIHZ0ZXJtX3N0YXRlCisKK0VhY2ggZW50cnkgaXMgcHJvdmlkZWQsIGJ5IGRlZmF1bHQgd2l0aCBhICJuYW1lIiBhdHRyaWJ1dGUuICBSZWFkaW5nIHRoZQorIm5hbWUiIGF0dHJpYnV0ZSB3aWxsIHJldmVhbCB0aGUgZGV2aWNlIHR5cGUgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZworZXhhbXBsZToKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwMyAjIGNhdCBuYW1lCisJdnR5LXNlcnZlcgorCitFYWNoIGVudHJ5IGlzIGFsc28gcHJvdmlkZWQsIGJ5IGRlZmF1bHQsIHdpdGggYSAiZGV2c3BlYyIgYXR0cmlidXRlIHdoaWNoCityZXZlYWxzIHRoZSBmdWxsIGRldmljZSBzcGVjaWZpY2F0aW9uIHdoZW4gcmVhZCwgYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZworZXhhbXBsZToKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGNhdCBkZXZzcGVjCisJL3ZkZXZpY2UvdnR5LXNlcnZlckAzMDAwMDAwNAorCitFYWNoIHZ0eS1zZXJ2ZXIgc3lzZnMgZGlyIGlzIHByb3ZpZGVkIHdpdGggdHdvIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRoYXQKK3Byb3ZpZGUgbGlzdHMgb2YgZWFzaWx5IHBhcnNlZCBwYXJ0bmVyIHZ0eSBkYXRhOiAicGFydG5lcl92dHlzIiBhbmQKKyJwYXJ0bmVyX2NsY3MiLgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzLzMwMDAwMDA0ICMgY2F0IHBhcnRuZXJfdnR5cworCTMwMDAwMDAwCisJMzAwMDAwMDEKKwkzMDAwMDAwMgorCTMwMDAwMDAwCisJMzAwMDAwMDAKKworCVBvdzU6L3N5cy9idXMvdmlvL2RyaXZlcnMvaHZjcy8zMDAwMDAwNCAjIGNhdCBwYXJ0bmVyX2NsY3MKKwlVNTExMi40MjguMTAzMDQ4QS1WMy1DMAorCVU1MTEyLjQyOC4xMDMwNDhBLVYzLUMyCisJVTUxMTIuNDI4LjEwMzA0OEEtVjMtQzMKKwlVNTExMi40MjguMTAzMDQ4QS1WNC1DMAorCVU1MTEyLjQyOC4xMDMwNDhBLVY1LUMwCisKK1JlYWRpbmcgcGFydG5lcl92dHlzIHJldHVybnMgYSBsaXN0IG9mIHBhcnRuZXIgdnR5cy4gIFZ0eSB1bml0IGFkZHJlc3MKK251bWJlcmluZyBpcyBvbmx5IHBlci1wYXJ0aXRpb24tdW5pcXVlIHNvIGVudHJpZXMgd2lsbCBmcmVxdWVudGx5IHJlcGVhdC4KKworUmVhZGluZyBwYXJ0bmVyX2NsY3MgcmV0dXJucyBhIGxpc3Qgb2YgImNvbnZlcmdlZCBsb2NhdGlvbiBjb2RlcyIgd2hpY2ggYXJlCitjb21wb3NlZCBvZiBhIHN5c3RlbSBzZXJpYWwgbnVtYmVyIGZvbGxvd2VkIGJ5ICItVioiLCB3aGVyZSB0aGUgJyonIGlzIHRoZQordGFyZ2V0IHBhcnRpdGlvbiBudW1iZXIsIGFuZCAiLUMqIiwgd2hlcmUgdGhlICcqJyBpcyB0aGUgc2xvdCBvZiB0aGUKK2FkYXB0ZXIuICBUaGUgZmlyc3QgdnR5IHBhcnRuZXIgY29ycmVzcG9uZHMgdG8gdGhlIGZpcnN0IGNsYyBpdGVtLCB0aGUKK3NlY29uZCB2dHkgcGFydG5lciB0byB0aGUgc2Vjb25kIGNsYyBpdGVtLCBldGMuCisKK0EgdnR5LXNlcnZlciBjYW4gb25seSBiZSBjb25uZWN0ZWQgdG8gYSBzaW5nbGUgdnR5IGF0IGEgdGltZS4gIFRoZSBlbnRyeSwKKyJjdXJyZW50X3Z0eSIgcHJpbnRzIHRoZSBjbGMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXJ0bmVyIHZ0eSB3aGVuCityZWFkLgorCitUaGUgY3VycmVudF92dHkgY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyBhIHZhbGlkIHBhcnRuZXIgY2xjIHRvIHRoZSBlbnRyeQorYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgorCisJUG93NTovc3lzL2J1cy92aW8vZHJpdmVycy9odmNzLzMwMDAwMDA0ICMgZWNobyBVNTExMi40MjguMTAzMDQKKwk4QS1WNC1DMCA+IGN1cnJlbnRfdnR5CisKK0NoYW5naW5nIHRoZSBjdXJyZW50X3Z0eSB3aGVuIGEgdnR5LXNlcnZlciBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIHZ0eQorZG9lcyBub3QgYWZmZWN0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uICBUaGUgY2hhbmdlIHRha2VzIGVmZmVjdCB3aGVuIHRoZQorY3VycmVudGx5IG9wZW4gY29ubmVjdGlvbiBpcyBmcmVlZC4KKworSW5mb3JtYXRpb24gb24gdGhlICJ2dGVybV9zdGF0ZSIgYXR0cmlidXRlIHdhcyBjb3ZlcmVkIGVhcmxpZXIgb24gdGhlCitjaGFwdGVyIGVudGl0bGVkICJkaXNjb25uZWN0aW9uIi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis4LiBRdWVzdGlvbnMgJiBBbnN3ZXJzOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitROiBXaGF0IGFyZSB0aGUgc2VjdXJpdHkgY29uY2VybnMgaW52b2x2aW5nIGh2Y3M/CisKK0E6IFRoZXJlIGFyZSB0aHJlZSBtYWluIHNlY3VyaXR5IGNvbmNlcm5zOgorCisJMS4gVGhlIGNyZWF0b3Igb2YgdGhlIC9kZXYvaHZjcyogbm9kZXMgaGFzIHRoZSBhYmlsaXR5IHRvIHJlc3RyaWN0CisJdGhlIGFjY2VzcyBvZiB0aGUgZGV2aWNlIGVudHJpZXMgdG8gY2VydGFpbiB1c2VycyBvciBncm91cHMuICBJdAorCW1heSBiZSBiZXN0IHRvIGNyZWF0ZSBhIHNwZWNpYWwgaHZjcyBncm91cCBwcml2aWxlZ2UgZm9yIHByb3ZpZGluZworCWFjY2VzcyB0byBzeXN0ZW0gY29uc29sZXMuCisKKwkyLiBUbyBwcm92aWRlIG5ldHdvcmsgc2VjdXJpdHkgd2hlbiBncmFiYmluZyB0aGUgY29uc29sZSBpdCBpcworCXN1Z2dlc3RlZCB0aGF0IHRoZSB1c2VyIGNvbm5lY3QgdG8gdGhlIGNvbnNvbGUgaG9zdGluZyBwYXJ0aXRpb24KKwl1c2luZyBhIHNlY3VyZSBtZXRob2QsIHN1Y2ggYXMgU1NIIG9yIHNpdCBhdCBhIGhhcmR3YXJlIGNvbnNvbGUuCisKKwkzLiBNYWtlIHN1cmUgdG8gZXhpdCB0aGUgdXNlciBzZXNzaW9uIHdoZW4gZG9uZSB3aXRoIGEgY29uc29sZSBvcgorCXRoZSBuZXh0IHZ0eS1zZXJ2ZXIgY29ubmVjdGlvbiAod2hpY2ggbWF5IGJlIGZyb20gYW5vdGhlcgorCXBhcnRpdGlvbikgd2lsbCBleHBlcmllbmNlIHRoZSBwcmV2aW91c2x5IGxvZ2dlZCBpbiBzZXNzaW9uLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1E6IEhvdyBkbyBJIG11bHRpcGxleCBhIGNvbnNvbGUgdGhhdCBJIGdyYWIgdGhyb3VnaCBodmNzIHNvIHRoYXQgb3RoZXIKK3Blb3BsZSBjYW4gc2VlIGl0OgorCitBOiBZb3UgY2FuIHVzZSAic2NyZWVuIiB0byBkaXJlY3RseSBjb25uZWN0IHRvIHRoZSAvZGV2L2h2Y3MqIGRldmljZSBhbmQKK3NldHVwIGEgc2Vzc2lvbiBvbiB5b3VyIG1hY2hpbmUgd2l0aCB0aGUgY29uc29sZSBncm91cCBwcml2aWxlZ2VzLiAgQXMKK3BvaW50ZWQgb3V0IGVhcmxpZXIgYnkgZGVmYXVsdCBzY3JlZW4gZG9lc24ndCBwcm92aWRlIHRoZSB0ZXJtY2FwIHNldHRpbmdzCitmb3IgbW9zdCB0ZXJtaW5hbCBlbXVsYXRvcnMgdG8gcHJvdmlkZSBhZGVxdWF0ZSBjaGFyYWN0ZXIgY29udmVyc2lvbiBmcm9tCit0ZXJtIHR5cGUgInNjcmVlbiIgdG8gb3RoZXJzLiAgVGhpcyBtZWFucyB0aGF0IGN1cnNlcyBiYXNlZCBwcm9ncmFtcyBtYXkKK25vdCBkaXNwbGF5IHByb3Blcmx5IGluIHNjcmVlbiBzZXNzaW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitROiBXaHkgYXJlIHRoZSBjb2xvcnMgYWxsIG1lc3NlZCB1cD8KK1E6IFdoeSBhcmUgdGhlIGNvbnRyb2wgY2hhcmFjdGVycyBhY3Rpbmcgc3RyYW5nZSBvciBub3Qgd29ya2luZz8KK1E6IFdoeSBpcyB0aGUgY29uc29sZSBvdXRwdXQgYWxsIHN0cmFuZ2UgYW5kIHVuaW50ZWxsaWdpYmxlPworCitBOiBQbGVhc2Ugc2VlIHRoZSBwcmVjZWRpbmcgc2VjdGlvbiBvbiAiQ29ubmVjdGlvbiIgZm9yIGEgZGlzY3Vzc2lvbiBvZiBob3cKK2FwcGxpY2F0aW9ucyBjYW4gYWZmZWN0IHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlciBjb250cm9sIHNlcXVlbmNlcy4KK0FkZGl0aW9uYWxseSwganVzdCBiZWNhdXNlIHlvdSBsb2dnZWQgaW50byB0aGUgY29uc29sZSB1c2luZyBhbmQgeHRlcm0KK2RvZXNuJ3QgbWVhbiBzb21lb25lIGVsc2UgZGlkbid0IGxvZyBpbnRvIHRoZSBjb25zb2xlIHdpdGggdGhlIEhNQyBjb25zb2xlCisodnQzMjApIGJlZm9yZSB5b3UgYW5kIGxlYXZlIHRoZSBzZXNzaW9uIGxvZ2dlZCBpbi4gIFRoZSBiZXN0IHRoaW5nIHRvIGRvCitpcyB0byBleHBvcnQgVEVSTSB0byB0aGUgdGVybWluYWwgdHlwZSBvZiB5b3VyIHRlcm1pbmFsIGVtdWxhdG9yIHdoZW4geW91CitnZXQgdGhlIGNvbnNvbGUuICBBZGRpdGlvbmFsbHkgbWFrZSBzdXJlIHRvICJleGl0IiB0aGUgY29uc29sZSBiZWZvcmUgeW91CitkaXNjb25uZWN0IGZyb20gdGhlIGNvbnNvbGUuICBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIG5leHQgdXNlciBnZXRzCit0aGVpciBvd24gVEVSTSB0eXBlIHNldCB3aGVuIHRoZXkgbG9naW4uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogV2hlbiBJIHRyeSB0byBDT05ORUNUIGtlcm1pdCB0byBhbiBodmNzIGRldmljZSBJIGdldDoKKyJTb3JyeSwgY2FuJ3Qgb3BlbiBjb25uZWN0aW9uOiAvZGV2L2h2Y3MqIldoYXQgaXMgaGFwcGVuaW5nPworCitBOiBTb21lIG90aGVyIFBvd2VyNSBjb25zb2xlIG1lY2hhbmlzbSBoYXMgYSBjb25uZWN0aW9uIHRvIHRoZSB2dHkgYW5kCitpc24ndCBnaXZpbmcgaXQgdXAuICBZb3UgY2FuIHRyeSB0byBmb3JjZSBkaXNjb25uZWN0IHRoZSBjb25zb2xlcyBmcm9tIHRoZQorSE1DIGJ5IHJpZ2h0IGNsaWNraW5nIG9uIHRoZSBwYXJ0aXRpb24gYW5kIHRoZW4gc2VsZWN0aW5nICJjbG9zZSB0ZXJtaW5hbCIuCitPdGhlcndpc2UgeW91IGhhdmUgdG8gaHVudCBkb3duIHRoZSBwZW9wbGUgd2hvIGhhdmUgY29uc29sZSBhdXRob3JpdHkuICBJdAoraXMgcG9zc2libGUgdGhhdCB5b3UgYWxyZWFkeSBoYXZlIHRoZSBjb25zb2xlIG9wZW4gdXNpbmcgYW5vdGhlciBrZXJtaXQKK3Nlc3Npb24gYW5kIGp1c3QgZm9yZ290IGFib3V0IGl0LiAgUGxlYXNlIHJldmlldyB0aGUgY29uc29sZSBvcHRpb25zIGZvcgorUG93ZXI1IHN5c3RlbXMgdG8gZGV0ZXJtaW5lIHRoZSBtYW55IHdheXMgYSBzeXN0ZW0gY29uc29sZSBjYW4gYmUgaGVsZC4KKworT1IKKworQTogQW5vdGhlciB1c2VyIG1heSBub3QgaGF2ZSBhIGNvbm5lY3Rpdml0eSBtZXRob2QgY3VycmVudGx5IGF0dGFjaGVkIHRvIGEKKy9kZXYvaHZjcyBkZXZpY2UgYnV0IHRoZSB2dGVybV9zdGF0ZSBtYXkgcmV2ZWFsIHRoYXQgdGhleSBzdGlsbCBoYXZlIHRoZQordnR5LXNlcnZlciBjb25uZWN0aW9uIGVzdGFibGlzaGVkLiAgVGhleSBuZWVkIHRvIGZyZWUgdGhpcyB1c2luZyB0aGUgbWV0aG9kCitvdXRsaW5lZCBpbiB0aGUgc2VjdGlvbiBvbiAiRGlzY29ubmVjdGlvbiIgaW4gb3JkZXIgZm9yIG90aGVycyB0byBjb25uZWN0Cit0byB0aGUgdGFyZ2V0IHZ0eS4KKworT1IKKworQTogVGhlIHVzZXIgcHJvZmlsZSB5b3UgYXJlIHVzaW5nIHRvIGV4ZWN1dGUga2VybWl0IHByb2JhYmx5IGRvZXNuJ3QgaGF2ZQorcGVybWlzc2lvbnMgdG8gdXNlIHRoZSAvZGV2L2h2Y3MqIGRldmljZS4KKworT1IKKworQTogWW91IHByb2JhYmx5IGhhdmVuJ3QgaW5zZXJ0ZWQgdGhlIGh2Y3Mua28gbW9kdWxlIHlldCBidXQgdGhlIC9kZXYvaHZjcyoKK2VudHJ5IHN0aWxsIGV4aXN0cyAob24gc3lzdGVtcyB3aXRob3V0IHVkZXYpLgorCitPUgorCitBOiBUaGVyZSBpcyBub3QgYSBjb3JyZXNwb25kaW5nIHZ0eS1zZXJ2ZXIgZGV2aWNlIHRoYXQgbWFwcyB0byBhbiBleGlzdGluZworL2Rldi9odmNzKiBlbnRyeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitROiBXaGVuIEkgdHJ5IHRvIENPTk5FQ1Qga2VybWl0IHRvIGFuIGh2Y3MgZGV2aWNlIEkgZ2V0OgorIlNvcnJ5LCB3cml0ZSBhY2Nlc3MgdG8gVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkgZGVuaWVkLiIKKworQTogVGhlIC9kZXYvaHZjcyogZW50cnkgeW91IGhhdmUgc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3Qgd2hlcmUgeW91IHNhaWQgaXQKK2RvZXM/ICBNYXliZSB5b3UgaGF2ZW4ndCBpbnNlcnRlZCB0aGUgbW9kdWxlIChvbiBzeXN0ZW1zIHdpdGggdWRldikuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogSWYgSSBhbHJlYWR5IGhhdmUgb25lIExpbnV4IHBhcnRpdGlvbiBpbnN0YWxsZWQgY2FuIEkgdXNlIGh2Y3Mgb24gc2FpZAorcGFydGl0aW9uIHRvIHByb3ZpZGUgdGhlIGNvbnNvbGUgZm9yIHRoZSBpbnN0YWxsIG9mIGEgc2Vjb25kIExpbnV4CitwYXJ0aXRpb24/CisKK0E6IFllcyBncmFudGVkIHRoYXQgeW91ciBhcmUgY29ubmVjdGVkIHRvIHRoZSAvZGV2L2h2Y3MqIGRldmljZSB1c2luZwora2VybWl0IG9yIGN1IG9yIHNvbWUgb3RoZXIgcHJvZ3JhbSB0aGF0IGRvZXNuJ3QgcHJvdmlkZSB0ZXJtaW5hbCBlbXVsYXRpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogQ2FuIEkgY29ubmVjdCB0byBtb3JlIHRoYW4gb25lIHBhcnRpdGlvbidzIGNvbnNvbGUgYXQgYSB0aW1lIHVzaW5nIHRoaXMKK2RyaXZlcj8KKworQTogWWVzLiAgT2YgY291cnNlIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBtdXN0IGJlIG1vcmUgdGhhbiBvbmUgdnR5LXNlcnZlcgorY29uZmlndXJlZCBmb3IgdGhpcyBwYXJ0aXRpb24gYW5kIGVhY2ggbXVzdCBwb2ludCB0byBhIGRpc2Nvbm5lY3RlZCB2dHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogRG9lcyB0aGUgaHZjcyBkcml2ZXIgc3VwcG9ydCBkeW5hbWljIChob3RwbHVnKSBhZGRpdGlvbiBvZiBkZXZpY2VzPworCitBOiBZZXMsIGlmIHlvdSBoYXZlIGRscGFyIGFuZCBob3RwbHVnIGVuYWJsZWQgZm9yIHlvdXIgc3lzdGVtIGFuZCBpdCBoYXMKK2JlZW4gYnVpbHQgaW50byB0aGUga2VybmVsIHRoZSBodmNzIGRyaXZlcnMgaXMgY29uZmlndXJlZCB0byBkeW5hbWljYWxseQoraGFuZGxlIGFkZGl0aW9ucyBvZiBuZXcgZGV2aWNlcyBhbmQgcmVtb3ZhbHMgb2YgdW51c2VkIGRldmljZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUTogRm9yIHNvbWUgcmVhc29uIC9kZXYvaHZjcyogZG9lc24ndCBtYXAgdG8gdGhlIHNhbWUgdnR5LXNlcnZlciBhZGFwdGVyCithZnRlciBhIHJlYm9vdC4gIFdoYXQgaGFwcGVuZWQ/CisKK0E6IEFzc2lnbm1lbnQgb2YgdnR5LXNlcnZlciBhZGFwdGVycyB0byAvZGV2L2h2Y3MqIGVudHJpZXMgaXMgYWx3YXlzIGRvbmUKK2luIHRoZSBvcmRlciB0aGF0IHRoZSBhZGFwdGVycyBhcmUgZXhwb3NlZC4gIER1ZSB0byBob3RwbHVnIGNhcGFiaWxpdGllcyBvZgordGhpcyBkcml2ZXIgYXNzaWdubWVudCBvZiBob3RwbHVnIGFkZGVkIHZ0eS1zZXJ2ZXJzIG1heSBiZSBpbiBhIGRpZmZlcmVudAorb3JkZXIgdGhhbiBob3cgdGhleSB3b3VsZCBiZSBleHBvc2VkIG9uIG1vZHVsZSBsb2FkLiAgUmVib290aW5nIG9yCityZWxvYWRpbmcgdGhlIG1vZHVsZSBhZnRlciBkeW5hbWljIGFkZGl0aW9uIG1heSByZXN1bHQgaW4gdGhlIC9kZXYvaHZjcyoKK2FuZCB2dHktc2VydmVyIGNvdXBsaW5nIGNoYW5naW5nIGlmIGEgdnR5LXNlcnZlciBhZGFwdGVyIHdhcyBhZGRlZCBpbiBhCitzbG90IGluYmV0d2VlbiB0d28gb3RoZXIgdnR5LXNlcnZlciBhZGFwdGVycy4gIFJlZmVyIHRvIHRoZSBzZWN0aW9uIGFib3ZlCitvbiBob3cgdG8gZGV0ZXJtaW5lIHdoaWNoIHZ0eS1zZXJ2ZXIgZ29lcyB3aXRoIHdoaWNoIC9kZXYvaHZjcyogbm9kZS4KK0hpbnQ7IGxvb2sgYXQgdGhlIHN5c2ZzICJpbmRleCIgYXR0cmlidXRlIGZvciB0aGUgdnR5LXNlcnZlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitROiBDYW4gSSB1c2UgL2Rldi9odmNzKiBhcyBhIGNvbmR1aXQgdG8gYW5vdGhlciBwYXJ0aXRpb24gYW5kIHVzZSBhIHR0eQorZGV2aWNlIG9uIHRoYXQgcGFydGl0aW9uIGFzIHRoZSBvdGhlciBlbmQgb2YgdGhlIHBpcGU/CisKK0E6IFllcywgb24gUG93ZXI1IHBsYXRmb3JtcyB0aGUgaHZjX2NvbnNvbGUgZHJpdmVyIHByb3ZpZGVzIGEgdHR5IGludGVyZmFjZQorZm9yIGV4dHJhIC9kZXYvaHZjKiBkZXZpY2VzICh3aGVyZSAvZGV2L2h2YzAgaXMgbW9zdCBsaWtlbHkgdGhlIGNvbnNvbGUpLgorSW4gb3JkZXIgdG8gZ2V0IGEgdHR5IGNvbmR1aXQgd29ya2luZyBiZXR3ZWVuIHRoZSB0d28gcGFydGl0aW9ucyB0aGUgSE1DCitTdXBlciBBZG1pbiBtdXN0IGNyZWF0ZSBhbiBhZGRpdGlvbmFsICJzZXJpYWwgc2VydmVyIiBmb3IgdGhlIHRhcmdldAorcGFydGl0aW9uIHdpdGggdGhlIEhNQyBndWkgd2hpY2ggd2lsbCBzaG93IHVwIGFzIC9kZXYvaHZjKiB3aGVuIHRoZSB0YXJnZXQKK3BhcnRpdGlvbiBpcyByZWJvb3RlZC4KKworVGhlIEhNQyBTdXBlciBBZG1pbiB0aGVuIGNyZWF0ZXMgYW4gYWRkaXRpb25hbCAic2VyaWFsIGNsaWVudCIgZm9yIHRoZQorY3VycmVudCBwYXJ0aXRpb24gYW5kIHBvaW50cyB0aGlzIGF0IHRoZSB0YXJnZXQgcGFydGl0aW9uJ3MgbmV3bHkgY3JlYXRlZAorInNlcmlhbCBzZXJ2ZXIiIGFkYXB0ZXIgKHJlbWVtYmVyIHRoZSBzbG90KS4gIFRoaXMgc2hvd3MgdXAgYXMgYW4KK2FkZGl0aW9uYWwgL2Rldi9odmNzKiBkZXZpY2UuCisKK05vdyBhIHByb2dyYW0gb24gdGhlIHRhcmdldCBzeXN0ZW0gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmVhZCBvciB3cml0ZSB0bworL2Rldi9odmMqIGFuZCBhbm90aGVyIHByb2dyYW0gb24gdGhlIGN1cnJlbnQgcGFydGl0aW9uIGNhbiBiZSBjb25maWd1cmVkIHRvCityZWFkIG9yIHdyaXRlIHRvIC9kZXYvaHZjcyouICBOb3cgeW91IGhhdmUgYSB0dHkgY29uZHVpdCBiZXR3ZWVuIHR3bworcGFydGl0aW9ucy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis5LiBSZXBvcnRpbmcgQnVnczoKKworVGhlIHByb3BlciBjaGFubmVsIGZvciByZXBvcnRpbmcgYnVncyBpcyBlaXRoZXIgdGhyb3VnaCB0aGUgTGludXggT1MKK2Rpc3RyaWJ1dGlvbiBjb21wYW55IHRoYXQgcHJvdmlkZWQgeW91ciBPUyBvciBieSBwb3N0aW5nIGlzc3VlcyB0byB0aGUKK3BwYzY0IGRldmVsb3BtZW50IG1haWxpbmcgbGlzdCBhdDoKKworbGludXhwcGM2NC1kZXZAbGlzdHMubGludXhwcGMub3JnCisKK1RoaXMgcmVxdWVzdCBpcyB0byBwcm92aWRlIGEgZG9jdW1lbnRlZCBhbmQgc2VhcmNoYWJsZSBwdWJsaWMgZXhjaGFuZ2UKK29mIHRoZSBwcm9ibGVtcyBhbmQgc29sdXRpb25zIHN1cnJvdW5kaW5nIHRoaXMgZHJpdmVyIGZvciB0aGUgYmVuZWZpdCBvZgorYWxsIHVzZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZGQ0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvbXBjNTJ4eC50eHQKQEAgLTAsMCArMSwzOSBAQAorTGludXggMi42Lnggb24gTVBDNTJ4eCBmYW1pbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgbGF0ZXN0IGluZm8sIGdvIHRvIGh0dHA6Ly93d3cuMjQ2dE50LmNvbS9tcGM1Mnh4LworIAorVG8gY29tcGlsZS91c2UgOgorCisgIC0gVS1Cb290OgorICAgICAjIDxlZGl0IE1ha2VmaWxlIHRvIHNldCBBUkNIPXBwYyAmIENST1NTX0NPTVBJTEU9Li4uICggYWxzbyBFWFRSQVZFUlNJT04KKyAgICAgICAgaWYgeW91IHdpc2ggdG8gKS4KKyAgICAgIyBtYWtlIGxpdGU1MjAwX2RlZmNvbmZpZworICAgICAjIG1ha2UgdUltYWdlCisgICAgCisgICAgIHRoZW4sIG9uIFUtYm9vdDoKKyAgICAgPT4gdGZ0cGJvb3QgMjAwMDAwIHVJbWFnZQorICAgICA9PiB0ZnRwYm9vdCA0MDAwMDAgcFJhbWRpc2sKKyAgICAgPT4gYm9vdG0gMjAwMDAwIDQwMDAwMAorICAgIAorICAtIERCdWc6CisgICAgICMgPGVkaXQgTWFrZWZpbGUgdG8gc2V0IEFSQ0g9cHBjICYgQ1JPU1NfQ09NUElMRT0uLi4gKCBhbHNvIEVYVFJBVkVSU0lPTgorICAgICAgICBpZiB5b3Ugd2lzaCB0byApLgorICAgICAjIG1ha2UgbGl0ZTUyMDBfZGVmY29uZmlnCisgICAgICMgY3AgeW91cl9pbml0cmQuZ3ogYXJjaC9wcGMvYm9vdC9pbWFnZXMvcmFtZGlzay5pbWFnZS5negorICAgICAjIG1ha2UgekltYWdlLmluaXRyZCAKKyAgICAgIyBtYWtlIAorCisgICAgIHRoZW4gaW4gREJ1ZzoKKyAgICAgREJ1Zz4gZG4gLWkgekltYWdlLmluaXRyZC5saXRlNTIwMAorICAgICAKKworU29tZSByZW1hcmtzIDoKKyAtIFRoZSBwb3J0IGlzIG5hbWVkIG1wYzUyeHh4LCBhbmQgY29uZmlnIG9wdGlvbnMgYXJlIFBQQ19NUEM1Mnh4LiBUaGUgTUdUNTEwMAorICAgaXMgbm90IHN1cHBvcnRlZCwgYW5kIEknbSBub3Qgc3VyZSBhbnlvbmUgaXMgaW50ZXJlc3RpbmcgaW4gd29ya2luZyBvbiBpdAorICAgc28uIEkgZGlkbid0IHRvb2sgNXh4eCBiZWNhdXNlIHRoZXJlJ3MgYXBwYXJlbnRseSBhIGxvdCBvZiA1eHh4IHRoYXQgaGF2ZQorICAgbm90aGluZyB0byBkbyB3aXRoIHRoZSBNUEM1MjAwLiBJIGFsc28gaW5jbHVkZWQgdGhlICdNUEMnIGZvciB0aGUgc2FtZQorICAgcmVhc29uLgorIC0gT2YgY291cnNlLCBJIGluc3BpcmVkIG15c2VsZiBmcm9tIHRoZSAyLjQgcG9ydC4gSWYgeW91IHRoaW5rIEkgZm9yZ290IHRvCisgICBtZW50aW9uIHlvdS95b3VyIGNvbXBhbnkgaW4gdGhlIGNvcHlyaWdodCBvZiBzb21lIGNvZGUsIEknbGwgY29ycmVjdCBpdAorICAgQVNBUC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wcGNfaHRhYi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHBjX2h0YWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGM3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHBjX2h0YWIudHh0CkBAIC0wLDAgKzEsMTE4IEBACisgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IC9wcm9jL3BwY19odGFiCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBhbmQgdGhlIHJlbGF0ZWQgY29kZSB3YXMgd3JpdHRlbiBieSBtZSAoQ29ydCBEb3VnYW4pLCBwbGVhc2UKK2VtYWlsIG1lIChjb3J0QGZzbWxhYnMuY29tKSBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIGNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCitMYXN0IENoYW5nZTogMi4xNi45OAorCitUaGlzIGVudHJ5IGluIHRoZSBwcm9jIGRpcmVjdG9yeSBpcyByZWFkYWJsZSBieSBhbGwgdXNlcnMgYnV0IG9ubHkKK3dyaXRhYmxlIGJ5IHJvb3QuCisKK1RoZSBwcGNfaHRhYiBpbnRlcmZhY2UgaXMgYSB1c2VyIGxldmVsIHdheSBvZiBhY2Nlc3NpbmcgdGhlCitwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIHByb3ZpZGluZyBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIFBURSBoYXNoIHRhYmxlLgorCisxLiBSZWFkaW5nCisKKyAgUmVhZGluZyB0aGlzIGZpbGUgd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQKKyAgaGFzaCB0YWJsZSB0aGF0IHNlcnZlcyBhcyBhbiBleHRlbmRlZCB0bGIgZm9yIHBhZ2UgdHJhbnNsYXRpb24gb24gdGhlCisgIHBvd2VycGMuICBJdCB3aWxsIGFsc28gZ2l2ZSB5b3UgaW5mb3JtYXRpb24gYWJvdXQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQKKyAgc3BlY2lmaWMgdG8gdGhlIGNwdSB0aGF0IHlvdSBhcmUgdXNpbmcuCisKKyAgRXhwbGFuYXRpb24gb2YgdGhlIDYwNCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIEZpZWxkczoKKyAgICBNTUNSMCAtIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNTUNSMCByZWdpc3RlcgorICAgIFBNQzEKKyAgICBQTUMyIC0gdGhlIHZhbHVlIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYQorICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB3aGF0IGV2ZW50cyB0aGV5IGFyZSBjb3VudGluZworICAgICAgICAgICB3aGljaCBhcmUgYmFzZWQgb24gTU1DUjAgYml0IHNldHRpbmdzLgorICBFeHBsYW5hdGlvbiBvZiB0aGUgUFRFIEhhc2ggVGFibGUgZmllbGRzOgorCisgICAgU2l6ZSAtIGhhc2ggdGFibGUgc2l6ZSBpbiBLYi4KKyAgICBCdWNrZXRzIC0gIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSB0YWJsZS4KKyAgICBBZGRyZXNzIC0gdGhlIHZpcnR1YWwga2VybmVsIGFkZHJlc3Mgb2YgdGhlIGhhc2ggdGFibGUgYmFzZS4KKyAgICBFbnRyaWVzIC0gdGhlIG51bWJlciBvZiBwdGVzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgICBVc2VyL0tlcm5lbCAtIGhvdyBtYW55IHB0ZSdzIGFyZSBpbiB1c2UgYnkgdGhlIGtlcm5lbCBvciB1c2VyIGF0IHRoYXQgdGltZS4KKyAgICBPdmVyZmxvd3MgLSBIb3cgbWFueSBvZiB0aGUgZW50cmllcyBhcmUgaW4gdGhlaXIgc2Vjb25kYXJ5IGhhc2ggbG9jYXRpb24uCisgICAgUGVyY2VudCBmdWxsIC0gcmF0aW8gb2YgZnJlZSBwdGUgZW50cmllcyB0byBpbiB1c2UgZW50cmllcy4KKyAgICBSZWxvYWRzIC0gQ291bnQgb2YgaG93IG1hbnkgaGFzaCB0YWJsZSBtaXNzZXMgaGF2ZSBvY2N1cnJlZAorICAgICAgICAgICAgICB0aGF0IHdlcmUgZml4ZWQgd2l0aCBhIHJlbG9hZCBmcm9tIHRoZSBsaW51eCB0YWJsZXMuCisgICAgICAgICAgICAgIFNob3VsZCBhbHdheXMgYmUgMCBvbiA2MDMgYmFzZWQgbWFjaGluZXMuCisgICAgTm9uLWVycm9yIE1pc3NlcyAtIENvdW50IG9mIGhvdyBtYW55IGhhc2ggdGFibGUgbWlzc2VzIGhhdmUgb2NjdXJyZWQKKyAgICAgICAgICAgICAgdGhhdCB3ZXJlIGNvbXBsZXRlZCB3aXRoIHRoZSBjcmVhdGlvbiBvZiBhIHB0ZSBpbiB0aGUgbGludXgKKyAgICAgICAgICAgICAgdGFibGVzIHdpdGggYSBjYWxsIHRvIGRvX3BhZ2VfZmF1bHQoKS4KKyAgICBFcnJvciBNaXNzZXMgLSBOdW1iZXIgb2YgbWlzc2VzIGR1ZSB0byBlcnJvcnMgc3VjaCBhcyBiYWQgYWRkcmVzcworICAgICAgICAgICAgICBhbmQgcGVybWlzc2lvbiB2aW9sYXRpb25zLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgYWNjZXNzIG9mCisgICAgICAgICAgICAgIGJhZCB1c2VyIGFkZHJlc3NlcyB0aGF0IGFyZSBmaXhlZCB1cCBieSB0aGUgdHJhcCBoYW5kbGVyLgorCisgIE5vdGUgdGhhdCBjYWxjdWxhdGlvbiBvZiB0aGUgZGF0YSBkaXNwbGF5ZWQgZnJvbSAvcHJvYy9wcGNfaHRhYiB0YWtlcworICBhIGxvbmcgdGltZSBhbmQgc3BlbmRzIGEgZ3JlYXQgZGVhbCBvZiB0aW1lIGluIHRoZSBrZXJuZWwuICBJdCB3b3VsZAorICBiZSBxdWl0ZSBoYXJkIG9uIHBlcmZvcm1hbmNlIHRvIHJlYWQgdGhpcyBmaWxlIGNvbnN0YW50bHkuICBJbiB0aW1lCisgIHRoZXJlIG1heSBiZSBhIGNvdW50ZXIgaW4gdGhlIGtlcm5lbCB0aGF0IGFsbG93cyBzdWNjZXNzaXZlIHJlYWRzIGZyb20KKyAgdGhpcyBmaWxlIG9ubHkgYWZ0ZXIgYSBnaXZlbiBhbW91bnQgb2YgdGltZSBoYXMgcGFzc2VkIHRvIHJlZHVjZSB0aGUKKyAgcG9zc2liaWxpdHkgb2YgYSB1c2VyIHNsb3dpbmcgdGhlIHN5c3RlbSBieSByZWFkaW5nIHRoaXMgZmlsZS4KKworMi4gV3JpdGluZworCisgIFdyaXRpbmcgdG8gdGhlIHBwY19odGFiIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YKKyAgdGhlIHBvd2VycGMgUFRFIGhhc2ggdGFibGUgYW5kIHNldHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuCisKKyAgUmVzaXppbmcgdGhlIFBURSBoYXNoIHRhYmxlIGlzIG5vdCBlbmFibGVkIHJpZ2h0IG5vdyBkdWUgdG8gbWFueQorICBjb21wbGljYXRpb25zIHdpdGggbW92aW5nIHRoZSBoYXNoIHRhYmxlLCByZWhhc2hpbmcgdGhlIGVudHJpZXMKKyAgYW5kIG1hbnkgbWFueSBTTVAgaXNzdWVzIHRoYXQgd291bGQgaGF2ZSB0byBiZSBkZWFsdCB3aXRoLgorCisgIFdyaXRlIG9wdGlvbnMgdG8gcHBjX2h0YWI6CisgIAorICAgLSBUbyBzZXQgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgdG8gNjRLYjoKKworICAgICAgZWNobyAnc2l6ZSA2NCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIFRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NCBhbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAgNjQuCisKKyAgIC0gVG8gdHVybiBvZmYgcGVyZm9ybWFuY2UgbW9uaXRvcmluZzoKKworICAgICAgZWNobyAnb2ZmJyA+IC9wcm9jL3BwY19odGFiCisKKyAgIC0gVG8gcmVzZXQgdGhlIGNvdW50ZXJzIHdpdGhvdXQgY2hhbmdpbmcgd2hhdCB0aGV5J3JlIGNvdW50aW5nOgorCisgICAgICBlY2hvICdyZXNldCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIE5vdGUgdGhhdCBjb3VudGluZyB3aWxsIGNvbnRpbnVlIGFmdGVyIHRoZSByZXNldCBpZiBpdCBpcyBlbmFibGVkLgorCisgICAtIFRvIGNvdW50IG9ubHkgZXZlbnRzIGluIHVzZXIgbW9kZSBvciBvbmx5IGluIGtlcm5lbCBtb2RlOgorCisgICAgICBlY2hvICd1c2VyJyA+IC9wcm9jL3BwY19odGFiCisgICAgICAgLi4ub3IuLi4KKyAgICAgIGVjaG8gJ2tlcm5lbCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIE5vdGUgdGhhdCB0aGVzZSB0d28gb3B0aW9ucyBhcmUgZXhjbHVzaXZlIG9mIG9uZSBhbm90aGVyIGFuZCB0aGUKKyAgICAgbGFjayBvZiBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBjb3VudHMgdXNlciBhbmQga2VybmVsLgorICAgICBVc2luZyAncmVzZXQnIGFuZCAnb2ZmJyByZXNldCB0aGVzZSBmbGFncy4KKworICAgLSBUaGUgNjA0IGhhcyAyIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHdoaWNoIGNhbiBlYWNoIGNvdW50IGV2ZW50cyBmcm9tCisgICAgIGEgc3BlY2lmaWMgc2V0IG9mIGV2ZW50cy4gIFRoZXNlIHNldHMgYXJlIGRpc2pvaW50IHNvIGl0IGlzIG5vdAorICAgICBwb3NzaWJsZSB0byBjb3VudCBfYW55XyBjb21iaW5hdGlvbiBvZiAyIGV2ZW50cy4gIE9uZSBldmVudCBjYW4KKyAgICAgYmUgY291bnRlZCBieSBQTUMxIGFuZCBvbmUgYnkgUE1DMi4KKworICAgICBUbyBzdGFydCBjb3VudGluZyBhIHBhcnRpY3VsYXIgZXZlbnQgdXNlOgorCisgICAgICBlY2hvICdldmVudCcgPiAvcHJvYy9wcGNfaHRhYgorCisgICAgIGFuZCBjaG9vc2UgZnJvbSB0aGVzZSBldmVudHM6CisKKyAgICAgUE1DMQorICAgICAtLS0tCisgICAgICAnaWMgbWlzcycgLSBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKKyAgICAgICdkdGxiJyAtIGRhdGEgdGxiIG1pc3NlcyAobm90IGhhc2ggdGFibGUgbWlzc2VzKQorCisgICAgIFBNQzIKKyAgICAgLS0tLQorICAgICAgJ2RjIG1pc3MnIC0gZGF0YSBjYWNoZSBtaXNzZXMKKyAgICAgICdpdGxiJyAtIGluc3RydWN0aW9uIHRsYiBtaXNzZXMgKG5vdCBoYXNoIHRhYmxlIG1pc3NlcykKKyAgICAgICdsb2FkIG1pc3MgdGltZScgLSBjeWNsZXMgdG8gY29tcGxldGUgYSBsb2FkIG1pc3MKKworMy4gQnVncworCisgIFRoZSBQTUMxIGFuZCBQTUMyIGNvdW50ZXJzIGNhbiBvdmVyZmxvdyBhbmQgZ2l2ZSBubyBpbmRpY2F0aW9uIG9mIHRoYXQKKyAgaW4gL3Byb2MvcHBjX2h0YWIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc21wLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTgxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc21wLnR4dApAQCAtMCwwICsxLDM0IEBACisgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IExpbnV4L1BQQyBTTVAgbW9kZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgYW5kIHRoZSByZWxhdGVkIGNvZGUgd2FzIHdyaXR0ZW4gYnkgbWUKKyhDb3J0IERvdWdhbiwgY29ydEBmc21sYWJzLmNvbSkgcGxlYXNlIGVtYWlsIG1lIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywKK2NvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCitMYXN0IENoYW5nZTogMy4zMS45OQorCitJZiB5b3Ugd2FudCB0byBoZWxwIGJ5IHdyaXRpbmcgY29kZSBvciB0ZXN0aW5nIGRpZmZlcmVudCBoYXJkd2FyZSBwbGVhc2UKK2VtYWlsIG1lIQorCisxLiBTdGF0ZSBvZiBTdXBwb3J0ZWQgSGFyZHdhcmUKKworICBQb3dlclN1cmdlIEFyY2hpdGVjdHVyZSAtIHRlc3RlZCBvbiBVTUFYIHM5MDAsIEFwcGxlIDk2MDAKKyAgICBUaGUgc2Vjb25kIHByb2Nlc3NvciBvbiB0aGlzIG1hY2hpbmUgYm9vdHMgdXAganVzdCBmaW5lIGFuZAorICAgIGVudGVycyBpdHMgaWRsZSBsb29wLiAgSG9wZWZ1bGx5IGEgY29tcGxldGVseSB3b3JraW5nIFNNUCBrZXJuZWwKKyAgICBvbiB0aGlzIG1hY2hpbmUgd2lsbCBiZSBkb25lIHNob3J0bHkuCisKKyAgICBUaGUgY29kZSBtYWtlcyB0aGUgYXNzdW1wdGlvbiBvZiBvbmx5IHR3byBwcm9jZXNzb3JzLiAgVGhlIGNoYW5nZXMKKyAgICBuZWNlc3NhcnkgdG8gd29yayB3aXRoIGFueSBudW1iZXIgd291bGQgbm90IGJlIG92ZXJseSBkaWZmaWN1bHQgYnV0CisgICAgSSBkb24ndCBoYXZlIGFueSBtYWNoaW5lcyB3aXRoID4yIHByb2Nlc3NvcnMgc28gaXQncyBub3QgaGlnaCBvbiBteQorICAgIGxpc3Qgb2YgcHJpb3JpdGllcy4gIElmIGFueW9uZSBlbHNlIHdvdWxkIGxpa2UgZG8gdG8gdGhlIHdvcmsgZW1haWwKKyAgICBtZSBhbmQgSSBjYW4gcG9pbnQgb3V0IHRoZSBwbGFjZXMgdGhhdCBuZWVkIGNoYW5nZWQuICBJZiB5b3UgaGF2ZSA+MgorICAgIHByb2Nlc3NvcnMgYW5kIGRvbid0IHdhbnQgdG8gYWRkIHN1cHBvcnQgeW91cnNlbGYgbGV0IG1lIGtub3cgYW5kIEkKKyAgICBjYW4gdGFrZSBhIGxvb2sgaW50byBpdC4KKworICBCZUJveAorICAgIEJlQm94IHN1cHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdG8gdGhlIDIuMS5YIGtlcm5lbHMgZnJvbSAyLjAuWAorICAgIGJ1dCB3b3JrIGlzIGJlaW5nIGRvbmUgYW5kIFNNUCBzdXBwb3J0IGZvciBCZUJveCBpcyBpbiB0aGUgd29ya3MuCisKKyAgQ0hSUAorICAgIENIUlAgU01QIHdvcmtzIGFuZCBpcyBmYWlybHkgc29saWQuICBJdCdzIGJlZW4gdGVzdGVkIG9uIHRoZSBJQk0gRjUwCisgICAgd2l0aCA0IHByb2Nlc3NvcnMgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc291bmQudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3NvdW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIzZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3NvdW5kLnR4dApAQCAtMCwwICsxLDgxIEBACisgICAgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBQb3dlclBDIFNvdW5kIHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgbWFpbCBtZSAoQ29ydCBEb3VnYW4sIGNvcnRAZnNtbGFicy5jb20pIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywKK2NvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgorCitMYXN0IENoYW5nZTogNi4xNi45OQorCitUaGlzIGp1c3QgY292ZXJzIHNvdW5kIG9uIHRoZSBQUmVQIGFuZCBDSFJQIHN5c3RlbXMgZm9yIG5vdyBhbmQgbGF0ZXIKK3dpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB0aGUgUG93ZXJNYWMncy4KKworU291bmQgb24gUFJlUCBoYXMgYmVlbiB0ZXN0ZWQgYW5kIGlzIHdvcmtpbmcgd2l0aCB0aGUgUG93ZXJTdGFjayBhbmQgSUJNCitQb3dlciBTZXJpZXMgb25ib2FyZCBzb3VuZCBzeXN0ZW1zIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgY3M0MjMxKDIpIGNoaXAuCitUaGUgc291bmQgb3B0aW9ucyB3aGVuIGRvaW5nIHRoZSBtYWtlIGNvbmZpZyBhcmUgYSBiaXQgZGlmZmVyZW50IGZyb20KK3RoZSBkZWZhdWx0LCB0aG91Z2guCisKK1RoZSBJL08gYmFzZSwgaXJxIGFuZCBkbWEgbGluZXMgdGhhdCB5b3UgZW50ZXIgZHVyaW5nIHRoZSBtYWtlIGNvbmZpZworYXJlIGlnbm9yZWQgYW5kIGFyZSBzZXQgd2hlbiBib290aW5nIGFjY29yZGluZyB0byB0aGUgbWFjaGluZSB0eXBlLgorVGhpcyBpcyBzbyB0aGF0IG9uZSBiaW5hcnkgY2FuIGJlIHVzZWQgZm9yIE1vdG9yb2xhIGFuZCBJQk0gbWFjaGluZXMKK3doaWNoIHVzZSBkaWZmZXJlbnQgdmFsdWVzIGFuZCBpc24ndCBhbGxvd2VkIGJ5IHRoZSBkcml2ZXIsIHNvIHRoaW5ncworYXJlIGhhY2tlZCB0b2dldGhlciBpbiBzdWNoIGEgd2F5IGFzIHRvIGFsbG93IHRoaXMgaW5mb3JtYXRpb24gdG8gYmUKK3NldCBhdXRvbWF0aWNhbGx5IG9uIGJvb3QuCisKKzEuIE1vdG9yb2xhIFBvd2VyU3RhY2sgUFJlUCBtYWNoaW5lcworCisgIEVuYWJsZSBzdXBwb3J0IGZvciAiQ3J5c3RhbCBDUzQyMzIgYmFzZWQgKFBuUCkgY2FyZHMiIGFuZCBmb3IgdGhlCisgIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0uICBUaGUgTVNTIGlzbid0IHVzZWQsIGJ1dCBzb21lIG9mIHRoZSByb3V0aW5lcworICB0aGF0IHRoZSBDUzQyMzIgZHJpdmVyIHVzZXMgYXJlIGluIGl0LgorCisgIEFsdGhvdWdoIHRoZSBvcHRpb25zIHlvdSBzZXQgYXJlIGlnbm9yZWQgYW5kIGRldGVybWluZWQgYXV0b21hdGljYWxseQorICBvbiBib290IHRoZXNlIGFyZSBpbmNsdWRlZCBmb3IgaW5mb3JtYXRpb24gb25seToKKworICAoODMwKSBDUzQyMzIgYXVkaW8gSS9PIGJhc2UgNTMwLCA2MDQsIEU4MCBvciBGNDAKKyAgKDEwKSBDUzQyMzIgYXVkaW8gSVJRIDUsIDcsIDksIDExLCAxMiBvciAxNQorICAoNikgQ1M0MjMyIGF1ZGlvIERNQSAwLCAxIG9yIDMKKyAgKDcpIENTNDIzMiBzZWNvbmQgKGR1cGxleCkgRE1BIDAsIDEgb3IgMworCisgIFRoaXMgd2lsbCBhbGxvdyBzaW11bHRhbmVvdXMgcmVjb3JkIGFuZCBwbGF5YmFjaywgYXMgMiBkaWZmZXJlbnQgZG1hCisgIGNoYW5uZWxzIGFyZSB1c2VkLgorCisgIFRoZSBzb3VuZCB3aWxsIGJlIGFsbCBsZWZ0IGNoYW5uZWwgYW5kIHZlcnkgbG93IHZvbHVtZSBzaW5jZSB0aGUKKyAgYXV4aWxpYXJ5IGlucHV0IGlzbid0IG11dGVkIGJ5IGRlZmF1bHQuICBJIGhhZCB0aGUgY2hhbmdlcyBuZWNlc3NhcnkKKyAgZm9yIHRoaXMgaW4gdGhlIGtlcm5lbCBidXQgdGhlIHNvdW5kIGRyaXZlciBtYWludGFpbmVyIGRpZG4ndCB3YW50CisgIHRvIGluY2x1ZGUgdGhlbSBzaW5jZSBpdCB3YXNuJ3QgY29tbW9uIGluIG90aGVyIG1hY2hpbmVzLiAgVG8gZml4IHRoaXMKKyAgeW91IG5lZWQgdG8gbXV0ZSBpdCB1c2luZyBhIG1peGVyIHV0aWxpdHkgb2Ygc29tZSBzb3J0IChpZiB5b3UgZmluZCBvbmUKKyAgcGxlYXNlIGxldCBtZSBrbm93KSBvciBieSBwYXRjaGluZyB0aGUgZHJpdmVyIHlvdXJzZWxmIGFuZCByZWNvbXBpbGluZy4KKworICBUaGVyZSBpcyBhIHByb2JsZW0gb24gdGhlIFBvd2VyU3RhY2sgMidzIChQb3dlclN0YWNrIFBybydzKSB1c2luZyBhCisgIGRpZmZlcmVudCBpcnEvZHJxIHRoYW4gdGhlIGtlcm5lbCBleHBlY3RzLiAgVW5mb3J0dW5hdGVseSwgSSBkb24ndCBrbm93CisgIHdoaWNoIGlycS9kcnEgaXQgaXMgc28gaWYgYW55b25lIGtub3dzIHBsZWFzZSBlbWFpbCBtZS4KKworICBNaWRpIGlzIG5vdCBzdXBwb3J0ZWQgc2luY2UgdGhlIGNzNDIzMiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IG1pZGkgeWV0LgorCisyLiBJQk0gUG93ZXJQZXJzb25hbCBQUmVQIG1hY2hpbmVzCisKKyAgSSd2ZSBvbmx5IHRlc3RlZCBzb3VuZCBvbiB0aGUgUG93ZXIgUGVyc29uYWwgU2VyaWVzIG9mIElCTSB3b3Jrc3RhdGlvbnMKKyAgc28gaWYgeW91IHRyeSBpdCBvbiBvdGhlcnMgcGxlYXNlIGxldCBtZSBrbm93IHRoZSByZXN1bHQuICBJJ20gZXNwZWNpYWxseQorICBpbnRlcmVzdGVkIGluIHRoZSA0M3AncyBzb3VuZCBzeXN0ZW0sIHdoaWNoIEkga25vdyBub3RoaW5nIGFib3V0LgorCisgIEVuYWJsZSBzdXBwb3J0IGZvciAiQ3J5c3RhbCBDUzQyMzIgYmFzZWQgKFBuUCkgY2FyZHMiIGFuZCBmb3IgdGhlCisgIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0uICBUaGUgTVNTIGlzbid0IHVzZWQsIGJ1dCBzb21lIG9mIHRoZSByb3V0aW5lcworICB0aGF0IHRoZSBDUzQyMzIgZHJpdmVyIHVzZXMgYXJlIGluIGl0LgorCisgIEFsdGhvdWdoIHRoZSBvcHRpb25zIHlvdSBzZXQgYXJlIGlnbm9yZWQgYW5kIGRldGVybWluZWQgYXV0b21hdGljYWxseQorICBvbiBib290IHRoZXNlIGFyZSBpbmNsdWRlZCBmb3IgaW5mb3JtYXRpb24gb25seToKKworICAoNTMwKSBDUzQyMzIgYXVkaW8gSS9PIGJhc2UgNTMwLCA2MDQsIEU4MCBvciBGNDAKKyAgKDUpIENTNDIzMiBhdWRpbyBJUlEgNSwgNywgOSwgMTEsIDEyIG9yIDE1CisgICgxKSBDUzQyMzIgYXVkaW8gRE1BIDAsIDEgb3IgMworICAoNykgQ1M0MjMyIHNlY29uZCAoZHVwbGV4KSBETUEgMCwgMSBvciAzCisgICgzMzApIENTNDIzMiBNSURJIEkvTyBiYXNlIDMzMCwgMzcwLCAzQjAgb3IgM0YwCisgICg5KSBDUzQyMzIgTUlESSBJUlEgNSwgNywgOSwgMTEsIDEyIG9yIDE1CisKKyAgVGhpcyBzZXR1cCBkb2VzIF9OT1RfIGFsbG93IGZvciByZWNvcmRpbmcgeWV0LgorCisgIE1pZGkgaXMgbm90IHN1cHBvcnRlZCBzaW5jZSB0aGUgY3M0MjMyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgbWlkaSB5ZXQuCisKKzIuIElCTSBDSFJQCisKKyAgSSBoYXZlIG9ubHkgdGVzdGVkIHRoaXMgb24gdGhlIDQzUC0xNTAuICBCdWlsZCB0aGUga2VybmVsIHdpdGggdGhlIGNzNDIzMgorICBzZXQgYXMgYSBtb2R1bGUgYW5kIGxvYWQgdGhlIG1vZHVsZSB3aXRoIGlycT05IGRtYT0xIGRtYTI9MiBpbz0weDU1MApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3pJbWFnZV9sYXlvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3pJbWFnZV9sYXlvdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OGUwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvekltYWdlX2xheW91dC50eHQKQEAgLTAsMCArMSw0NyBAQAorICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eC9QUEMga2VybmVsIGltYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSBtYWlsIG1lIChDb3J0IERvdWdhbiwgY29ydEBmc21sYWJzLmNvbSkgaWYgeW91IGhhdmUgcXVlc3Rpb25zLAorY29tbWVudHMgb3IgY29ycmVjdGlvbnMuCisKK1RoaXMgZG9jdW1lbnQgaXMgbWVhbnQgdG8gYW5zd2VyIHNldmVyYWwgcXVlc3Rpb25zIEkndmUgaGFkIGFib3V0IGhvdwordGhlIFBSZVAgc3lzdGVtIGJvb3RzIGFuZCBob3cgTGludXgvUFBDIGludGVyYWN0cyB3aXRoIHRoYXQgbWVjaGFuaXNtLgorSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBoYXZlIGluZm9ybWF0aW9uIG9uIGhvdyBvdGhlciBhcmNoaXRlY3R1cmVzCitib290IGhlcmUgYXMgd2VsbC4gIElmIHlvdSBoYXZlIGFueXRoaW5nIHRvIGNvbnRyaWJ1dGUsIHBsZWFzZQorbGV0IG1lIGtub3cuCisKKworMS4gUFJlUCBib290IGZpbGUKKworICBUaGlzIGlzIHRoZSBmaWxlIG5lY2Vzc2FyeSB0byBib290IFBSZVAgc3lzdGVtcyBmcm9tIGZsb3BweSBvcgorICBoYXJkIGRyaXZlLiAgVGhlIGZpcm13YXJlIHJlYWRzIHRoZSBQUmVQIHBhcnRpdGlvbiB0YWJsZSBlbnRyeQorICBhbmQgd2lsbCBsb2FkIHRoZSBpbWFnZSBhY2NvcmRpbmdseS4KKworICBUbyBib290IHRoZSB6SW1hZ2UsIGNvcHkgaXQgb250byBhIGZsb3BweSB3aXRoIGRkIGlmPXpJbWFnZSBvZj0vZGV2L2ZkMGgxNDQwCisgIG9yIG9udG8gYSBQUmVQIGhhcmQgZHJpdmUgcGFydGl0aW9uIHdpdGggZGQgaWY9ekltYWdlIG9mPS9kZXYvc2RhNAorICBhc3N1bWluZyB5b3UndmUgY3JlYXRlZCBhIFBSZVAgcGFydGl0aW9uICh0eXBlIDB4NDEpIHdpdGggZmRpc2sgb24KKyAgL2Rldi9zZGE0LgorCisgIFRoZSBsYXlvdXQgb2YgdGhlIGltYWdlIGZvcm1hdCBpczoKKworICAweDAgICAgICstLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgICAgIHwgUFJlUCBwYXJ0aXRpb24gdGFibGUgZW50cnkKKyAgICAgICAgICB8ICAgICAgICAgICAgfAorICAweDQwMCAgICstLS0tLS0tLS0tLS0rCisgICAgICAgICAgfCAgICAgICAgICAgIHwgQm9vdHN0cmFwIHByb2dyYW0gY29kZSArIGRhdGEKKyAgICAgICAgICB8ICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgICAgfCBjb21wcmVzc2VkIGtlcm5lbCwgZWxmIGhlYWRlciByZW1vdmVkCisgICAgICAgICAgKy0tLS0tLS0tLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgICAgfCBpbml0cmQgKGlmIGxvYWRlZCkKKyAgICAgICAgICArLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgICAgICAgICAgICB8IEVsZiBzZWN0aW9uIHRhYmxlIGZvciBib290c3RyYXAgcHJvZ3JhbQorICAgICAgICAgICstLS0tLS0tLS0tLS0rCisKKworMi4gTUJYIGJvb3QgZmlsZQorCisgIFRoZSBNQlggYm9hcmRzIGNhbiBsb2FkIGFuIGVsZiBpbWFnZSwgYW5kIHJlbG9jYXRlIGl0IHRvIHRoZQorICBwcm9wZXIgbG9jYXRpb24gaW4gbWVtb3J5IC0gaXQgY29waWVzIHRoZSBpbWFnZSB0byB0aGUgbG9jYXRpb24gaXQgd2FzCisgIGxpbmtlZCBhdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJlZW1wdC1sb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcHJlZW1wdC1sb2NraW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzg4M2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmVlbXB0LWxvY2tpbmcudHh0CkBAIC0wLDAgKzEsMTM1IEBACisJCSAgUHJvcGVyIExvY2tpbmcgVW5kZXIgYSBQcmVlbXB0aWJsZSBLZXJuZWw6CisJCSAgICAgICBLZWVwaW5nIEtlcm5lbCBDb2RlIFByZWVtcHQtU2FmZQorCQkJIFJvYmVydCBMb3ZlIDxybWxAdGVjaDkubmV0PgorCQkJICBMYXN0IFVwZGF0ZWQ6IDI4IEF1ZyAyMDAyCisKKworSU5UUk9EVUNUSU9OCisKKworQSBwcmVlbXB0aWJsZSBrZXJuZWwgY3JlYXRlcyBuZXcgbG9ja2luZyBpc3N1ZXMuICBUaGUgaXNzdWVzIGFyZSB0aGUgc2FtZSBhcwordGhvc2UgdW5kZXIgU01QOiBjb25jdXJyZW5jeSBhbmQgcmVlbnRyYW5jeS4gIFRoYW5rZnVsbHksIHRoZSBMaW51eCBwcmVlbXB0aWJsZQora2VybmVsIG1vZGVsIGxldmVyYWdlcyBleGlzdGluZyBTTVAgbG9ja2luZyBtZWNoYW5pc21zLiAgVGh1cywgdGhlIGtlcm5lbAorcmVxdWlyZXMgZXhwbGljaXQgYWRkaXRpb25hbCBsb2NraW5nIGZvciB2ZXJ5IGZldyBhZGRpdGlvbmFsIHNpdHVhdGlvbnMuCisKK1RoaXMgZG9jdW1lbnQgaXMgZm9yIGFsbCBrZXJuZWwgaGFja2Vycy4gIERldmVsb3BpbmcgY29kZSBpbiB0aGUga2VybmVsCityZXF1aXJlcyBwcm90ZWN0aW5nIHRoZXNlIHNpdHVhdGlvbnMuCisgCisKK1JVTEUgIzE6IFBlci1DUFUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWQgZXhwbGljaXQgcHJvdGVjdGlvbgorCisKK1R3byBzaW1pbGFyIHByb2JsZW1zIGFyaXNlLiBBbiBleGFtcGxlIGNvZGUgc25pcHBldDoKKworCXN0cnVjdCB0aGlzX25lZWRzX2xvY2tpbmcgdHV4W05SX0NQVVNdOworCXR1eFtzbXBfcHJvY2Vzc29yX2lkKCldID0gc29tZV92YWx1ZTsKKwkvKiB0YXNrIGlzIHByZWVtcHRlZCBoZXJlLi4uICovCisJc29tZXRoaW5nID0gdHV4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisKK0ZpcnN0LCBzaW5jZSB0aGUgZGF0YSBpcyBwZXItQ1BVLCBpdCBtYXkgbm90IGhhdmUgZXhwbGljaXQgU01QIGxvY2tpbmcsIGJ1dAorcmVxdWlyZSBpdCBvdGhlcndpc2UuICBTZWNvbmQsIHdoZW4gYSBwcmVlbXB0ZWQgdGFzayBpcyBmaW5hbGx5IHJlc2NoZWR1bGVkLAordGhlIHByZXZpb3VzIHZhbHVlIG9mIHNtcF9wcm9jZXNzb3JfaWQgbWF5IG5vdCBlcXVhbCB0aGUgY3VycmVudC4gIFlvdSBtdXN0Citwcm90ZWN0IHRoZXNlIHNpdHVhdGlvbnMgYnkgZGlzYWJsaW5nIHByZWVtcHRpb24gYXJvdW5kIHRoZW0uCisKK1lvdSBjYW4gYWxzbyB1c2UgcHV0X2NwdSgpIGFuZCBnZXRfY3B1KCksIHdoaWNoIHdpbGwgZGlzYWJsZSBwcmVlbXB0aW9uLgorCisKK1JVTEUgIzI6IENQVSBzdGF0ZSBtdXN0IGJlIHByb3RlY3RlZC4KKworCitVbmRlciBwcmVlbXB0aW9uLCB0aGUgc3RhdGUgb2YgdGhlIENQVSBtdXN0IGJlIHByb3RlY3RlZC4gIFRoaXMgaXMgYXJjaC0KK2RlcGVuZGVudCwgYnV0IGluY2x1ZGVzIENQVSBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSBub3QgcHJlc2VydmVkIG92ZXIgYSBjb250ZXh0Citzd2l0Y2guICBGb3IgZXhhbXBsZSwgb24geDg2LCBlbnRlcmluZyBhbmQgZXhpdGluZyBGUFUgbW9kZSBpcyBub3cgYSBjcml0aWNhbAorc2VjdGlvbiB0aGF0IG11c3Qgb2NjdXIgd2hpbGUgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZC4gIFRoaW5rIHdoYXQgd291bGQgaGFwcGVuCitpZiB0aGUga2VybmVsIGlzIGV4ZWN1dGluZyBhIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uIGFuZCBpcyB0aGVuIHByZWVtcHRlZC4KK1JlbWVtYmVyLCB0aGUga2VybmVsIGRvZXMgbm90IHNhdmUgRlBVIHN0YXRlIGV4Y2VwdCBmb3IgdXNlciB0YXNrcy4gIFRoZXJlZm9yZSwKK3Vwb24gcHJlZW1wdGlvbiwgdGhlIEZQVSByZWdpc3RlcnMgd2lsbCBiZSBzb2xkIHRvIHRoZSBsb3dlc3QgYmlkZGVyLiAgVGh1cywKK3ByZWVtcHRpb24gbXVzdCBiZSBkaXNhYmxlZCBhcm91bmQgc3VjaCByZWdpb25zLgorCitOb3RlLCBzb21lIEZQVSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZXhwbGljaXRseSBwcmVlbXB0IHNhZmUuICBGb3IgZXhhbXBsZSwKK2tlcm5lbF9mcHVfYmVnaW4gYW5kIGtlcm5lbF9mcHVfZW5kIHdpbGwgZGlzYWJsZSBhbmQgZW5hYmxlIHByZWVtcHRpb24uCitIb3dldmVyLCBtYXRoX3N0YXRlX3Jlc3RvcmUgbXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorCisKK1JVTEUgIzM6IExvY2sgYWNxdWlyZSBhbmQgcmVsZWFzZSBtdXN0IGJlIHBlcmZvcm1lZCBieSBzYW1lIHRhc2sKKworCitBIGxvY2sgYWNxdWlyZWQgaW4gb25lIHRhc2sgbXVzdCBiZSByZWxlYXNlZCBieSB0aGUgc2FtZSB0YXNrLiAgVGhpcworbWVhbnMgeW91IGNhbid0IGRvIG9kZGJhbGwgdGhpbmdzIGxpa2UgYWNxdWlyZSBhIGxvY2sgYW5kIGdvIG9mZiB0bworcGxheSB3aGlsZSBhbm90aGVyIHRhc2sgcmVsZWFzZXMgaXQuICBJZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcKK2xpa2UgdGhpcywgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgdGFzayBpbiB0aGUgc2FtZSBjb2RlIHBhdGggYW5kCitoYXZlIHRoZSBjYWxsZXIgd2FpdCBvbiBhbiBldmVudCBieSB0aGUgb3RoZXIgdGFzay4KKworCitTT0xVVElPTgorCisKK0RhdGEgcHJvdGVjdGlvbiB1bmRlciBwcmVlbXB0aW9uIGlzIGFjaGlldmVkIGJ5IGRpc2FibGluZyBwcmVlbXB0aW9uIGZvciB0aGUKK2R1cmF0aW9uIG9mIHRoZSBjcml0aWNhbCByZWdpb24uCisKK3ByZWVtcHRfZW5hYmxlKCkJCWRlY3JlbWVudCB0aGUgcHJlZW1wdCBjb3VudGVyCitwcmVlbXB0X2Rpc2FibGUoKQkJaW5jcmVtZW50IHRoZSBwcmVlbXB0IGNvdW50ZXIKK3ByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKQlkZWNyZW1lbnQsIGJ1dCBkbyBub3QgaW1tZWRpYXRlbHkgcHJlZW1wdAorcHJlZW1wdF9jaGVja19yZXNjaGVkKCkJCWlmIG5lZWRlZCwgcmVzY2hlZHVsZQorcHJlZW1wdF9jb3VudCgpCQkJcmV0dXJuIHRoZSBwcmVlbXB0IGNvdW50ZXIKKworVGhlIGZ1bmN0aW9ucyBhcmUgbmVzdGFibGUuICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBjYWxsIHByZWVtcHRfZGlzYWJsZQorbi10aW1lcyBpbiBhIGNvZGUgcGF0aCwgYW5kIHByZWVtcHRpb24gd2lsbCBub3QgYmUgcmVlbmFibGVkIHVudGlsIHRoZSBuLXRoCitjYWxsIHRvIHByZWVtcHRfZW5hYmxlLiAgVGhlIHByZWVtcHQgc3RhdGVtZW50cyBkZWZpbmUgdG8gbm90aGluZyBpZgorcHJlZW1wdGlvbiBpcyBub3QgZW5hYmxlZC4KKworTm90ZSB0aGF0IHlvdSBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5IHByZXZlbnQgcHJlZW1wdGlvbiBpZiB5b3UgYXJlIGhvbGRpbmcKK2FueSBsb2NrcyBvciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgcHJlZW1wdGlvbiBpcyBpbXBsaWNpdGx5IGRpc2FibGVkCitpbiB0aG9zZSBjYXNlcy4KKworQnV0IGtlZXAgaW4gbWluZCB0aGF0ICdpcnFzIGRpc2FibGVkJyBpcyBhIGZ1bmRhbWVudGFsbHkgdW5zYWZlIHdheSBvZgorZGlzYWJsaW5nIHByZWVtcHRpb24gLSBhbnkgc3Bpbl91bmxvY2soKSBkZWNyZWFzaW5nIHRoZSBwcmVlbXB0aW9uIGNvdW50Cit0byAwIG1pZ2h0IHRyaWdnZXIgYSByZXNjaGVkdWxlLiBBIHNpbXBsZSBwcmludGsoKSBtaWdodCB0cmlnZ2VyIGEgcmVzY2hlZHVsZS4KK1NvIHVzZSB0aGlzIGltcGxpY2l0IHByZWVtcHRpb24tZGlzYWJsaW5nIHByb3BlcnR5IG9ubHkgaWYgeW91IGtub3cgdGhhdCB0aGUKK2FmZmVjdGVkIGNvZGVwYXRoIGRvZXMgbm90IGRvIGFueSBvZiB0aGlzLiBCZXN0IHBvbGljeSBpcyB0byB1c2UgdGhpcyBvbmx5IGZvcgorc21hbGwsIGF0b21pYyBjb2RlIHRoYXQgeW91IHdyb3RlIGFuZCB3aGljaCBjYWxscyBubyBjb21wbGV4IGZ1bmN0aW9ucy4KKworRXhhbXBsZToKKworCWNwdWNhY2hlX3QgKmNjOyAvKiB0aGlzIGlzIHBlci1DUFUgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwljYyA9IGNjX2RhdGEoc2VhcmNocCk7CisJaWYgKGNjICYmIGNjLT5hdmFpbCkgeworCQlfX2ZyZWVfYmxvY2soc2VhcmNocCwgY2NfZW50cnkoY2MpLCBjYy0+YXZhaWwpOworCQljYy0+YXZhaWwgPSAwOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOworCitOb3RpY2UgaG93IHRoZSBwcmVlbXB0aW9uIHN0YXRlbWVudHMgbXVzdCBlbmNvbXBhc3MgZXZlcnkgcmVmZXJlbmNlIG9mIHRoZQorY3JpdGljYWwgdmFyaWFibGVzLiAgQW5vdGhlciBleGFtcGxlOgorCisJaW50IGJ1ZltOUl9DUFVTXTsKKwlzZXRfY3B1X3ZhbChidWYpOworCWlmIChidWZbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9PSAtMSkgcHJpbnRmKEtFUk5fSU5GTyAid2VlIVxuIik7CisJc3Bpbl9sb2NrKCZidWZfbG9jayk7CisJLyogLi4uICovCisKK1RoaXMgY29kZSBpcyBub3QgcHJlZW1wdC1zYWZlLCBidXQgc2VlIGhvdyBlYXNpbHkgd2UgY2FuIGZpeCBpdCBieSBzaW1wbHkKK21vdmluZyB0aGUgc3Bpbl9sb2NrIHVwIHR3byBsaW5lcy4KKworCitQUkVWRU5USU5HIFBSRUVNUFRJT04gVVNJTkcgSU5URVJSVVBUIERJU0FCTElORworCisKK0l0IGlzIHBvc3NpYmxlIHRvIHByZXZlbnQgYSBwcmVlbXB0aW9uIGV2ZW50IHVzaW5nIGxvY2FsX2lycV9kaXNhYmxlIGFuZAorbG9jYWxfaXJxX3NhdmUuICBOb3RlLCB3aGVuIGRvaW5nIHNvLCB5b3UgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgdG8gbm90IGNhdXNlCithbiBldmVudCB0aGF0IHdvdWxkIHNldCBuZWVkX3Jlc2NoZWQgYW5kIHJlc3VsdCBpbiBhIHByZWVtcHRpb24gY2hlY2suICBXaGVuCitpbiBkb3VidCwgcmVseSBvbiBsb2NraW5nIG9yIGV4cGxpY2l0IHByZWVtcHRpb24gZGlzYWJsaW5nLgorCitOb3RlIGluIDIuNSBpbnRlcnJ1cHQgZGlzYWJsaW5nIGlzIG5vdyBvbmx5IHBlci1DUFUgKGUuZy4gbG9jYWwpLgorCitBbiBhZGRpdGlvbmFsIGNvbmNlcm4gaXMgcHJvcGVyIHVzYWdlIG9mIGxvY2FsX2lycV9kaXNhYmxlIGFuZCBsb2NhbF9pcnFfc2F2ZS4KK1RoZXNlIG1heSBiZSB1c2VkIHRvIHByb3RlY3QgZnJvbSBwcmVlbXB0aW9uLCBob3dldmVyLCBvbiBleGl0LCBpZiBwcmVlbXB0aW9uCittYXkgYmUgZW5hYmxlZCwgYSB0ZXN0IHRvIHNlZSBpZiBwcmVlbXB0aW9uIGlzIHJlcXVpcmVkIHNob3VsZCBiZSBkb25lLiAgSWYKK3RoZXNlIGFyZSBjYWxsZWQgZnJvbSB0aGUgc3Bpbl9sb2NrIGFuZCByZWFkL3dyaXRlIGxvY2sgbWFjcm9zLCB0aGUgcmlnaHQgdGhpbmcKK2lzIGRvbmUuICBUaGV5IG1heSBhbHNvIGJlIGNhbGxlZCB3aXRoaW4gYSBzcGluLWxvY2sgcHJvdGVjdGVkIHJlZ2lvbiwgaG93ZXZlciwKK2lmIHRoZXkgYXJlIGV2ZXIgY2FsbGVkIG91dHNpZGUgb2YgdGhpcyBjb250ZXh0LCBhIHRlc3QgZm9yIHByZWVtcHRpb24gc2hvdWxkCitiZSBtYWRlLiBEbyBub3RlIHRoYXQgY2FsbHMgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCBvciBib3R0b20gaGFsZi8gdGFza2xldHMKK2FyZSBhbHNvIHByb3RlY3RlZCBieSBwcmVlbXB0aW9uIGxvY2tzIGFuZCBzbyBtYXkgdXNlIHRoZSB2ZXJzaW9ucyB3aGljaCBkbworbm90IGNoZWNrIHByZWVtcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByaW9fdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ByaW9fdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiYjBjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcHJpb190cmVlLnR4dApAQCAtMCwwICsxLDEwNyBAQAorVGhlIHByaW9fdHJlZS5jIGNvZGUgaW5kZXhlcyB2bWFzIHVzaW5nIDMgZGlmZmVyZW50IGluZGV4ZXM6CisJKiBoZWFwX2luZGV4ICA9IHZtX3Bnb2ZmICsgdm1fc2l6ZV9pbl9wYWdlcyA6IGVuZF92bV9wZ29mZgorCSogcmFkaXhfaW5kZXggPSB2bV9wZ29mZiA6IHN0YXJ0X3ZtX3Bnb2ZmCisJKiBzaXplX2luZGV4ID0gdm1fc2l6ZV9pbl9wYWdlcworCitBIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgaW5kZXhlcyB2bWFzIHVzaW5nIG9ubHkgaGVhcF9pbmRleCBhbmQKK3JhZGl4X2luZGV4LiBUaGUgY29uZGl0aW9ucyBmb3IgaW5kZXhpbmcgYXJlOgorCSogLT5oZWFwX2luZGV4ID49IC0+bGVmdC0+aGVhcF9pbmRleCAmJgorCQktPmhlYXBfaW5kZXggPj0gLT5yaWdodC0+aGVhcF9pbmRleAorCSogaWYgKC0+aGVhcF9pbmRleCA9PSAtPmxlZnQtPmhlYXBfaW5kZXgpCisJCXRoZW4gLT5yYWRpeF9pbmRleCA8IC0+bGVmdC0+cmFkaXhfaW5kZXg7CisJKiBpZiAoLT5oZWFwX2luZGV4ID09IC0+cmlnaHQtPmhlYXBfaW5kZXgpCisJCXRoZW4gLT5yYWRpeF9pbmRleCA8IC0+cmlnaHQtPnJhZGl4X2luZGV4OworCSogbm9kZXMgYXJlIGhhc2hlZCB0byBsZWZ0IG9yIHJpZ2h0IHN1YnRyZWUgdXNpbmcgcmFkaXhfaW5kZXgKKwkgIHNpbWlsYXIgdG8gYSBwdXJlIGJpbmFyeSByYWRpeCB0cmVlLgorCitBIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgaGVscHMgdG8gc3RvcmUgYW5kIHF1ZXJ5CitpbnRlcnZhbHMgKHZtYXMpLiBIb3dldmVyLCBhIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgaXMgb25seQorc3VpdGFibGUgZm9yIHN0b3Jpbmcgdm1hcyB3aXRoIGRpZmZlcmVudCByYWRpeCBpbmRpY2VzICh2bV9wZ29mZikuCisKK1RoZXJlZm9yZSwgdGhlIHByaW9fdHJlZS5jIGV4dGVuZHMgdGhlIHJlZ3VsYXIgcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUKK3RvIGhhbmRsZSBtYW55IHZtYXMgd2l0aCB0aGUgc2FtZSB2bV9wZ29mZi4gU3VjaCB2bWFzIGFyZSBoYW5kbGVkIGluCisyIGRpZmZlcmVudCB3YXlzOiAxKSBBbGwgdm1hcyB3aXRoIHRoZSBzYW1lIHJhZGl4IF9hbmRfIGhlYXAgaW5kaWNlcyBhcmUKK2xpbmtlZCB1c2luZyB2bV9zZXQubGlzdCwgMikgaWYgdGhlcmUgYXJlIG1hbnkgdm1hcyB3aXRoIHRoZSBzYW1lIHJhZGl4CitpbmRleCwgYnV0IGRpZmZlcmVudCBoZWFwIGluZGljZXMgYW5kIGlmIHRoZSByZWd1bGFyIHJhZGl4LXByaW9yaXR5LXNlYXJjaAordHJlZSBjYW5ub3QgaW5kZXggdGhlbSBhbGwsIHdlIGJ1aWxkIGFuIG92ZXJmbG93LXN1Yi10cmVlIHRoYXQgaW5kZXhlcyBzdWNoCit2bWFzIHVzaW5nIGhlYXAgYW5kIHNpemUgaW5kaWNlcyBpbnN0ZWFkIG9mIGhlYXAgYW5kIHJhZGl4IGluZGljZXMuIEZvcgorZXhhbXBsZSwgaW4gdGhlIGZpZ3VyZSBiZWxvdyBzb21lIHZtYXMgd2l0aCB2bV9wZ29mZiA9IDAgKHplcm8pIGFyZQoraW5kZXhlZCBieSByZWd1bGFyIHJhZGl4LXByaW9yaXR5LXNlYXJjaC10cmVlIHdoZXJlYXMgb3RoZXJzIGFyZSBwdXNoZWQKK2ludG8gYW4gb3ZlcmZsb3ctc3VidHJlZS4gTm90ZSB0aGF0IGFsbCB2bWFzIGluIGFuIG92ZXJmbG93LXN1Yi10cmVlIGhhdmUKK3RoZSBzYW1lIHZtX3Bnb2ZmIChyYWRpeF9pbmRleCkgYW5kIGlmIG5lY2Vzc2FyeSB3ZSBidWlsZCBkaWZmZXJlbnQKK292ZXJmbG93LXN1Yi10cmVlcyB0byBoYW5kbGUgZWFjaCBwb3NzaWJsZSByYWRpeF9pbmRleC4gRm9yIGV4YW1wbGUsCitpbiBmaWd1cmUgd2UgaGF2ZSAzIG92ZXJmbG93LXN1Yi10cmVlcyBjb3JyZXNwb25kaW5nIHRvIHJhZGl4IGluZGljZXMKKzAsIDIsIGFuZCA0LgorCitJbiB0aGUgZmluYWwgdHJlZSB0aGUgZmlyc3QgZmV3IChwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cykgbGV2ZWxzCithcmUgaW5kZXhlZCB1c2luZyBoZWFwIGFuZCByYWRpeCBpbmRpY2VzIHdoZXJlYXMgdGhlIG92ZXJmbG93LXN1Yi10cmVlcyBiZWxvdwordGhvc2UgbGV2ZWxzIChpLmUuIGxldmVscyBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyArIDEgYW5kIGhpZ2hlcikgYXJlCitpbmRleGVkIHVzaW5nIGhlYXAgYW5kIHNpemUgaW5kaWNlcy4gSW4gb3ZlcmZsb3ctc3ViLXRyZWVzIHRoZSBzaXplX2luZGV4CitpcyB1c2VkIGZvciBoYXNoaW5nIHRoZSBub2RlcyB0byBhcHByb3ByaWF0ZSBwbGFjZXMuCisKK05vdywgYW4gZXhhbXBsZSBwcmlvX3RyZWU6CisKKyAgdm1hcyBhcmUgcmVwcmVzZW50ZWQgW3JhZGl4X2luZGV4LCBzaXplX2luZGV4LCBoZWFwX2luZGV4XQorICAgICAgICAgICAgICAgICBpLmUuLCBbc3RhcnRfdm1fcGdvZmYsIHZtX3NpemVfaW5fcGFnZXMsIGVuZF92bV9wZ29mZl0KKworbGV2ZWwgIHByaW9fdHJlZV9yb290LT5pbmRleF9iaXRzID0gMworLS0tLS0KKwkJCQkJCQkJCQkJCV8KKyAgMAkJCSAJCQkJWzAsNyw3XQkJCQkJIHwKKyAgCQkJCQkJCS8gICAgIFwJCQkJCSB8CisJCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLS0tLQkJCSB8ICAgICBSZWd1bGFyCisgIAkJCQkgICAgIC8JCQkJCSAgIFwJCQkgfCAgcmFkaXggcHJpb3JpdHkKKyAgMQkJIAkJWzEsNiw3XQkJCQkJICBbNCwzLDddCQkgfCAgIHNlYXJjaCB0cmVlCisgIAkJCQkvICAgICBcCQkJCQkgIC8gICAgIFwJCSB8CisJCQkgLS0tLS0tLSAgICAgICAtLS0tLQkJCSAgICAtLS0tLS0gICAgICAgLS0tLS0JCSB8ICBoZWFwLWFuZC1yYWRpeAorCQkJLwkJICAgIFwJCQkgICAvCQkgICAgICBcCQkgfCAgICAgIGluZGV4ZWQKKyAgMgkJICAgIFswLDYsNl0JIAkgICBbMiw1LDddCQlbNSwyLDddCQkgICAgWzYsMSw3XQkgfAorCQkgICAgLyAgICAgXAkJICAgLyAgICAgXAkJLyAgICAgXAkJICAgIC8gICAgIFwJIHwKKyAgMwkJWzAsNSw1XQlbMSw1LDZdCQlbMiw0LDZdCVszLDQsN10JICAgIFs0LDIsNl0gWzUsMSw2XQlbNiwwLDZdCVs3LDAsN10JIHwKKwkJICAgLwkJCSAgIC8JCSAgICAgICAvCQkgICAJCV8KKyAgICAgICAgICAgICAgICAgIC8JCSAgICAgICAgICAvCQkgICAgICAvCQkJCQlfCisgIDQJICAgICAgWzAsNCw0XQkJICAgICAgWzIsMyw1XQkJICAgWzQsMSw1XQkJCQkgfAorICAJCSAvCQkJIC8JCSAgICAgIC8JCQkJCSB8CisgIDUJICAgICBbMCwzLDNdCQkgICAgIFsyLDIsNF0JCSAgWzQsMCw0XQkJCQkgfCAgT3ZlcmZsb3ctc3ViLXRyZWVzCisgIAkJLwkJCS8JCQkJCQkJIHwKKyAgNgkgICAgWzAsMiwyXQkJICAgIFsyLDEsM10JCQkJCQkJIHwgICAgaGVhcC1hbmQtc2l6ZQorICAJICAgICAgIC8JCSAgICAgICAvCQkJCQkJCSB8ICAgICAgIGluZGV4ZWQKKyAgNwkgICBbMCwxLDFdCQkgICBbMiwwLDJdCQkJCQkJCSB8CisgIAkgICAgICAvCQkJCQkJCQkJCQkgfAorICA4CSAgWzAsMCwwXQkJCQkJCQkJCQkgfAorICAJCQkJCQkJCQkJCQlfCisKK05vdGUgdGhhdCB3ZSB1c2UgcHJpb190cmVlX3Jvb3QtPmluZGV4X2JpdHMgdG8gb3B0aW1pemUgdGhlIGhlaWdodAorb2YgdGhlIGhlYXAtYW5kLXJhZGl4IGluZGV4ZWQgdHJlZS4gU2luY2UgcHJpb190cmVlX3Jvb3QtPmluZGV4X2JpdHMgaXMKK3NldCBhY2NvcmRpbmcgdG8gdGhlIG1heGltdW0gZW5kX3ZtX3Bnb2ZmIG1hcHBlZCwgd2UgYXJlIHN1cmUgdGhhdCBhbGwKK2JpdHMgKGluIHZtX3Bnb2ZmKSBhYm92ZSBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyBhcmUgMCAoemVybykuIFRoZXJlZm9yZSwKK3dlIG9ubHkgdXNlIHRoZSBmaXJzdCBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyBhcyByYWRpeF9pbmRleC4KK1doZW5ldmVyIGluZGV4X2JpdHMgaXMgaW5jcmVhc2VkIGluIHByaW9fdHJlZV9leHBhbmQsIHdlIHNodWZmbGUgdGhlIHRyZWUKK3RvIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyBsZXZlbHMgb2YgdGhlIHRyZWUKK2lzIGluZGV4ZWQgcHJvcGVybHkgdXNpbmcgaGVhcCBhbmQgcmFkaXggaW5kaWNlcy4KKworV2UgZG8gbm90IG9wdGltaXplIHRoZSBoZWlnaHQgb2Ygb3ZlcmZsb3ctc3ViLXRyZWVzIHVzaW5nIGluZGV4X2JpdHMuCitUaGUgcmVhc29uIGlzOiB0aGVyZSBjYW4gYmUgbWFueSBzdWNoIG92ZXJmbG93LXN1Yi10cmVlcyBhbmQgYWxsIG9mCit0aGVtIGhhdmUgdG8gYmUgc3VmZmxlZCB3aGVuZXZlciB0aGUgaW5kZXhfYml0cyBpbmNyZWFzZXMuIFRoaXMgbWF5IGludm9sdmUKK3dhbGtpbmcgdGhlIHdob2xlIHByaW9fdHJlZSBpbiBwcmlvX3RyZWVfaW5zZXJ0LT5wcmlvX3RyZWVfZXhwYW5kIGNvZGUKK3BhdGggd2hpY2ggaXMgbm90IGRlc2lyYWJsZS4gSGVuY2UsIHdlIGRvIG5vdCBvcHRpbWl6ZSB0aGUgaGVpZ2h0IG9mIHRoZQoraGVhcC1hbmQtc2l6ZSBpbmRleGVkIG92ZXJmbG93LXN1Yi10cmVlcyB1c2luZyBwcmlvX3RyZWUtPmluZGV4X2JpdHMuCitJbnN0ZWFkIHRoZSBvdmVyZmxvdyBzdWItdHJlZXMgYXJlIGluZGV4ZWQgdXNpbmcgZnVsbCBCSVRTX1BFUl9MT05HIGJpdHMKK29mIHNpemVfaW5kZXguIFRoaXMgbWF5IGxlYWQgdG8gc2tld2VkIHN1Yi10cmVlcyBiZWNhdXNlIG1vc3Qgb2YgdGhlCitoaWdoZXIgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgc2l6ZV9pbmRleCBhcmUgbGlrZWx5IHRvIGJlIGJlIDAgKHplcm8pLiBJbgordGhlIGV4YW1wbGUgYWJvdmUsIGFsbCAzIG92ZXJmbG93LXN1Yi10cmVlcyBhcmUgc2tld2VkLiBUaGlzIG1heSBtYXJnaW5hbGx5CithZmZlY3QgdGhlIHBlcmZvcm1hbmNlLiBIb3dldmVyLCBwcm9jZXNzZXMgcmFyZWx5IG1hcCBtYW55IHZtYXMgd2l0aCB0aGUKK3NhbWUgc3RhcnRfdm1fcGdvZmYgYnV0IGRpZmZlcmVudCBlbmRfdm1fcGdvZmZzLiBUaGVyZWZvcmUsIHdlIG5vcm1hbGx5CitkbyBub3QgcmVxdWlyZSBvdmVyZmxvdy1zdWItdHJlZXMgdG8gaW5kZXggYWxsIHZtYXMuCisKK0Zyb20gdGhlIGFib3ZlIGRpc2N1c3Npb24gaXQgaXMgY2xlYXIgdGhhdCB0aGUgbWF4aW11bSBoZWlnaHQgb2YKK2EgcHJpb190cmVlIGNhbiBiZSBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cyArIEJJVFNfUEVSX0xPTkcuCitIb3dldmVyLCBpbiBtb3N0IG9mIHRoZSBjb21tb24gY2FzZXMgd2UgZG8gbm90IG5lZWQgb3ZlcmZsb3ctc3ViLXRyZWVzLAorc28gdGhlIHRyZWUgaGVpZ2h0IGluIHRoZSBjb21tb24gY2FzZXMgd2lsbCBiZSBwcmlvX3RyZWVfcm9vdC0+aW5kZXhfYml0cy4KKworSXQgaXMgZmFpciB0byBtZW50aW9uIGhlcmUgdGhhdCB0aGUgcHJpb190cmVlX3Jvb3QtPmluZGV4X2JpdHMKK2lzIGluY3JlYXNlZCBvbiBkZW1hbmQsIGhvd2V2ZXIsIHRoZSBpbmRleF9iaXRzIGlzIG5vdCBkZWNyZWFzZWQgd2hlbgordm1hcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBwcmlvX3RyZWUuIFRoYXQncyB0cmlja3kgdG8gZG8uIEhlbmNlLCBpdCdzCitsZWZ0IGFzIGEgaG9tZSB3b3JrIHByb2JsZW0uCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yYW1kaXNrLnR4dCBiL0RvY3VtZW50YXRpb24vcmFtZGlzay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyNTU4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcmFtZGlzay50eHQKQEAgLTAsMCArMSwxNjcgQEAKK1VzaW5nIHRoZSBSQU0gZGlzayBibG9jayBkZXZpY2Ugd2l0aCBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnRlbnRzOgorCisJMSkgT3ZlcnZpZXcKKwkyKSBLZXJuZWwgQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKwkzKSBVc2luZyAicmRldiAtciIKKwk0KSBBbiBFeGFtcGxlIG9mIENyZWF0aW5nIGEgQ29tcHJlc3NlZCBSQU0gRGlzayAKKworCisxKSBPdmVydmlldworLS0tLS0tLS0tLS0KKworVGhlIFJBTSBkaXNrIGRyaXZlciBpcyBhIHdheSB0byB1c2UgbWFpbiBzeXN0ZW0gbWVtb3J5IGFzIGEgYmxvY2sgZGV2aWNlLiAgSXQKK2lzIHJlcXVpcmVkIGZvciBpbml0cmQsIGFuIGluaXRpYWwgZmlsZXN5c3RlbSB1c2VkIGlmIHlvdSBuZWVkIHRvIGxvYWQgbW9kdWxlcworaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSByb290IGZpbGVzeXN0ZW0gKHNlZSBEb2N1bWVudGF0aW9uL2luaXRyZC50eHQpLiAgSXQgY2FuCithbHNvIGJlIHVzZWQgZm9yIGEgdGVtcG9yYXJ5IGZpbGVzeXN0ZW0gZm9yIGNyeXB0byB3b3JrLCBzaW5jZSB0aGUgY29udGVudHMKK2FyZSBlcmFzZWQgb24gcmVib290LgorCitUaGUgUkFNIGRpc2sgZHluYW1pY2FsbHkgZ3Jvd3MgYXMgbW9yZSBzcGFjZSBpcyByZXF1aXJlZC4gSXQgZG9lcyB0aGlzIGJ5IHVzaW5nCitSQU0gZnJvbSB0aGUgYnVmZmVyIGNhY2hlLiBUaGUgZHJpdmVyIG1hcmtzIHRoZSBidWZmZXJzIGl0IGlzIHVzaW5nIGFzIGRpcnR5CitzbyB0aGF0IHRoZSBWTSBzdWJzeXN0ZW0gZG9lcyBub3QgdHJ5IHRvIHJlY2xhaW0gdGhlbSBsYXRlci4KKworQWxzbywgdGhlIFJBTSBkaXNrIHN1cHBvcnRzIHVwIHRvIDE2IFJBTSBkaXNrcyBvdXQgb2YgdGhlIGJveCwgYW5kIGNhbgorYmUgcmVjb25maWd1cmVkIHRvIHN1cHBvcnQgdXAgdG8gMjU1IFJBTSBkaXNrcyAtIGNoYW5nZSAiI2RlZmluZSBOVU1fUkFNRElTS1MiCitpbiBkcml2ZXJzL2Jsb2NrL3JkLmMuICBUbyB1c2UgUkFNIGRpc2sgc3VwcG9ydCB3aXRoIHlvdXIgc3lzdGVtLCBydW4KKycuL01BS0VERVYgcmFtJyBmcm9tIHRoZSAvZGV2IGRpcmVjdG9yeS4gIFJBTSBkaXNrcyBhcmUgYWxsIG1ham9yIG51bWJlciAxLCBhbmQKK3N0YXJ0IHdpdGggbWlub3IgbnVtYmVyIDAgZm9yIC9kZXYvcmFtMCwgZXRjLiAgSWYgdXNlZCwgbW9kZXJuIGtlcm5lbHMgdXNlCisvZGV2L3JhbTAgZm9yIGFuIGluaXRyZC4KKworVGhlIG9sZCAicmFtZGlzaz08cmFtX3NpemU+IiBoYXMgYmVlbiBjaGFuZ2VkIHRvICJyYW1kaXNrX3NpemU9PHJhbV9zaXplPiIgdG8KK21ha2UgaXQgY2xlYXJlci4gIFRoZSBvcmlnaW5hbCAicmFtZGlzaz08cmFtX3NpemU+IiBoYXMgYmVlbiBrZXB0IGFyb3VuZCBmb3IKK2NvbXBhdGliaWxpdHkgcmVhc29ucywgYnV0IGl0IG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKK1RoZSBuZXcgUkFNIGRpc2sgYWxzbyBoYXMgdGhlIGFiaWxpdHkgdG8gbG9hZCBjb21wcmVzc2VkIFJBTSBkaXNrIGltYWdlcywKK2FsbG93aW5nIG9uZSB0byBzcXVlZXplIG1vcmUgcHJvZ3JhbXMgb250byBhbiBhdmVyYWdlIGluc3RhbGxhdGlvbiBvciAKK3Jlc2N1ZSBmbG9wcHkgZGlzay4KKworCisyKSBLZXJuZWwgQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJcmFtZGlza19zaXplPU4KKwk9PT09PT09PT09PT09PQorCitUaGlzIHBhcmFtZXRlciB0ZWxscyB0aGUgUkFNIGRpc2sgZHJpdmVyIHRvIHNldCB1cCBSQU0gZGlza3Mgb2YgTiBrIHNpemUuICBUaGUKK2RlZmF1bHQgaXMgNDA5NiAoNCBNQikgKDgxOTIgKDggTUIpIG9uIFMzOTApLgorCisJcmFtZGlza19ibG9ja3NpemU9TgorCT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBwYXJhbWV0ZXIgdGVsbHMgdGhlIFJBTSBkaXNrIGRyaXZlciBob3cgbWFueSBieXRlcyB0byB1c2UgcGVyIGJsb2NrLiAgVGhlCitkZWZhdWx0IGlzIDUxMi4KKworCiszKSBVc2luZyAicmRldiAtciIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdXNhZ2Ugb2YgdGhlIHdvcmQgKHR3byBieXRlcykgdGhhdCAicmRldiAtciIgc2V0cyBpbiB0aGUga2VybmVsIGltYWdlIGlzCithcyBmb2xsb3dzLiBUaGUgbG93IDExIGJpdHMgKDAgLT4gMTApIHNwZWNpZnkgYW4gb2Zmc2V0IChpbiAxIGsgYmxvY2tzKSBvZiB1cAordG8gMiBNQiAoMl4xMSkgb2Ygd2hlcmUgdG8gZmluZCB0aGUgUkFNIGRpc2sgKHRoaXMgdXNlZCB0byBiZSB0aGUgc2l6ZSkuIEJpdAorMTQgaW5kaWNhdGVzIHRoYXQgYSBSQU0gZGlzayBpcyB0byBiZSBsb2FkZWQsIGFuZCBiaXQgMTUgaW5kaWNhdGVzIHdoZXRoZXIgYQorcHJvbXB0L3dhaXQgc2VxdWVuY2UgaXMgdG8gYmUgZ2l2ZW4gYmVmb3JlIHRyeWluZyB0byByZWFkIHRoZSBSQU0gZGlzay4gU2luY2UKK3RoZSBSQU0gZGlzayBkeW5hbWljYWxseSBncm93cyBhcyBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gaW50byBpdCwgYSBzaXplIGZpZWxkCitpcyBub3QgcmVxdWlyZWQuIEJpdHMgMTEgdG8gMTMgYXJlIG5vdCBjdXJyZW50bHkgdXNlZCBhbmQgbWF5IGFzIHdlbGwgYmUgemVyby4KK1RoZXNlIG51bWJlcnMgYXJlIG5vIG1hZ2ljYWwgc2VjcmV0cywgYXMgc2VlbiBiZWxvdzoKKworLi9hcmNoL2kzODYva2VybmVsL3NldHVwLmM6I2RlZmluZSBSQU1ESVNLX0lNQUdFX1NUQVJUX01BU0sgICAgIDB4MDdGRgorLi9hcmNoL2kzODYva2VybmVsL3NldHVwLmM6I2RlZmluZSBSQU1ESVNLX1BST01QVF9GTEFHICAgICAgICAgIDB4ODAwMAorLi9hcmNoL2kzODYva2VybmVsL3NldHVwLmM6I2RlZmluZSBSQU1ESVNLX0xPQURfRkxBRyAgICAgICAgICAgIDB4NDAwMAorCitDb25zaWRlciBhIHR5cGljYWwgdHdvIGZsb3BweSBkaXNrIHNldHVwLCB3aGVyZSB5b3Ugd2lsbCBoYXZlIHRoZSAKK2tlcm5lbCBvbiBkaXNrIG9uZSwgYW5kIGhhdmUgYWxyZWFkeSBwdXQgYSBSQU0gZGlzayBpbWFnZSBvbnRvIGRpc2sgIzIuCisKK0hlbmNlIHlvdSB3YW50IHRvIHNldCBiaXRzIDAgdG8gMTMgYXMgMCwgbWVhbmluZyB0aGF0IHlvdXIgUkFNIGRpc2sKK3N0YXJ0cyBhdCBhbiBvZmZzZXQgb2YgMCBrQiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZsb3BweS4KK1RoZSBjb21tYW5kIGxpbmUgZXF1aXZhbGVudCBpczogInJhbWRpc2tfc3RhcnQ9MCIKKworWW91IHdhbnQgYml0IDE0IGFzIG9uZSwgaW5kaWNhdGluZyB0aGF0IGEgUkFNIGRpc2sgaXMgdG8gYmUgbG9hZGVkLgorVGhlIGNvbW1hbmQgbGluZSBlcXVpdmFsZW50IGlzOiAibG9hZF9yYW1kaXNrPTEiCisKK1lvdSB3YW50IGJpdCAxNSBhcyBvbmUsIGluZGljYXRpbmcgdGhhdCB5b3Ugd2FudCBhIHByb21wdC9rZXlwcmVzcworc2VxdWVuY2Ugc28gdGhhdCB5b3UgaGF2ZSBhIGNoYW5jZSB0byBzd2l0Y2ggZmxvcHB5IGRpc2tzLgorVGhlIGNvbW1hbmQgbGluZSBlcXVpdmFsZW50IGlzOiAicHJvbXB0X3JhbWRpc2s9MSIKKworUHV0dGluZyB0aGF0IHRvZ2V0aGVyIGdpdmVzIDJeMTUgKyAyXjE0ICsgMCA9IDQ5MTUyIGZvciBhbiByZGV2IHdvcmQuCitTbyB0byBjcmVhdGUgZGlzayBvbmUgb2YgdGhlIHNldCwgeW91IHdvdWxkIGRvOgorCisJL3Vzci9zcmMvbGludXgjIGNhdCBhcmNoL2kzODYvYm9vdC96SW1hZ2UgPiAvZGV2L2ZkMAorCS91c3Ivc3JjL2xpbnV4IyByZGV2IC9kZXYvZmQwIC9kZXYvZmQwCisJL3Vzci9zcmMvbGludXgjIHJkZXYgLXIgL2Rldi9mZDAgNDkxNTIKKworSWYgeW91IG1ha2UgYSBib290IGRpc2sgdGhhdCBoYXMgTElMTywgdGhlbiBmb3IgdGhlIGFib3ZlLCB5b3Ugd291bGQgdXNlOgorCWFwcGVuZCA9ICJyYW1kaXNrX3N0YXJ0PTAgbG9hZF9yYW1kaXNrPTEgcHJvbXB0X3JhbWRpc2s9MSIKK1NpbmNlIHRoZSBkZWZhdWx0IHN0YXJ0ID0gMCBhbmQgdGhlIGRlZmF1bHQgcHJvbXB0ID0gMSwgeW91IGNvdWxkIHVzZToKKwlhcHBlbmQgPSAibG9hZF9yYW1kaXNrPTEiCisKKworNCkgQW4gRXhhbXBsZSBvZiBDcmVhdGluZyBhIENvbXByZXNzZWQgUkFNIERpc2sgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGNyZWF0ZSBhIFJBTSBkaXNrIGltYWdlLCB5b3Ugd2lsbCBuZWVkIGEgc3BhcmUgYmxvY2sgZGV2aWNlIHRvCitjb25zdHJ1Y3QgaXQgb24uIFRoaXMgY2FuIGJlIHRoZSBSQU0gZGlzayBkZXZpY2UgaXRzZWxmLCBvciBhbgordW51c2VkIGRpc2sgcGFydGl0aW9uIChzdWNoIGFzIGFuIHVubW91bnRlZCBzd2FwIHBhcnRpdGlvbikuIEZvciB0aGlzIAorZXhhbXBsZSwgd2Ugd2lsbCB1c2UgdGhlIFJBTSBkaXNrIGRldmljZSwgIi9kZXYvcmFtMCIuCisKK05vdGU6IFRoaXMgdGVjaG5pcXVlIHNob3VsZCBub3QgYmUgZG9uZSBvbiBhIG1hY2hpbmUgd2l0aCBsZXNzIHRoYW4gOCBNQgorb2YgUkFNLiBJZiB1c2luZyBhIHNwYXJlIGRpc2sgcGFydGl0aW9uIGluc3RlYWQgb2YgL2Rldi9yYW0wLCB0aGVuIHRoaXMKK3Jlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5LgorCithKSBEZWNpZGUgb24gdGhlIFJBTSBkaXNrIHNpemUgdGhhdCB5b3Ugd2FudC4gU2F5IDIgTUIgZm9yIHRoaXMgZXhhbXBsZS4KKyAgIENyZWF0ZSBpdCBieSB3cml0aW5nIHRvIHRoZSBSQU0gZGlzayBkZXZpY2UuIChUaGlzIHN0ZXAgaXMgbm90IGN1cnJlbnRseQorICAgcmVxdWlyZWQsIGJ1dCBtYXkgYmUgaW4gdGhlIGZ1dHVyZS4pIEl0IGlzIHdpc2UgdG8gemVybyBvdXQgdGhlCisgICBhcmVhIChlc3AuIGZvciBkaXNrcykgc28gdGhhdCBtYXhpbWFsIGNvbXByZXNzaW9uIGlzIGFjaGlldmVkIGZvcgorICAgdGhlIHVudXNlZCBibG9ja3Mgb2YgdGhlIGltYWdlIHRoYXQgeW91IGFyZSBhYm91dCB0byBjcmVhdGUuCisKKwlkZCBpZj0vZGV2L3plcm8gb2Y9L2Rldi9yYW0wIGJzPTFrIGNvdW50PTIwNDgKKworYikgTWFrZSBhIGZpbGVzeXN0ZW0gb24gaXQuIFNheSBleHQyZnMgZm9yIHRoaXMgZXhhbXBsZS4KKworCW1rZTJmcyAtdm0wIC9kZXYvcmFtMCAyMDQ4CisKK2MpIE1vdW50IGl0LCBjb3B5IHRoZSBmaWxlcyB5b3Ugd2FudCB0byBpdCAoZWc6IC9ldGMvKiAvZGV2LyogLi4uKQorICAgYW5kIHVubW91bnQgaXQgYWdhaW4uCisKK2QpIENvbXByZXNzIHRoZSBjb250ZW50cyBvZiB0aGUgUkFNIGRpc2suIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbgorICAgd2lsbCBiZSBhcHByb3hpbWF0ZWx5IDUwJSBvZiB0aGUgc3BhY2UgdXNlZCBieSB0aGUgZmlsZXMuIFVudXNlZAorICAgc3BhY2Ugb24gdGhlIFJBTSBkaXNrIHdpbGwgY29tcHJlc3MgdG8gYWxtb3N0IG5vdGhpbmcuCisKKwlkZCBpZj0vZGV2L3JhbTAgYnM9MWsgY291bnQ9MjA0OCB8IGd6aXAgLXY5ID4gL3RtcC9yYW1faW1hZ2UuZ3oKKworZSkgUHV0IHRoZSBrZXJuZWwgb250byB0aGUgZmxvcHB5CisKKwlkZCBpZj16SW1hZ2Ugb2Y9L2Rldi9mZDAgYnM9MWsKKworZikgUHV0IHRoZSBSQU0gZGlzayBpbWFnZSBvbnRvIHRoZSBmbG9wcHksIGFmdGVyIHRoZSBrZXJuZWwuIFVzZSBhbiBvZmZzZXQKKyAgIHRoYXQgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCwgc28gdGhhdCB5b3UgY2FuIHB1dCBhbm90aGVyCisgICAocG9zc2libHkgbGFyZ2VyKSBrZXJuZWwgb250byB0aGUgc2FtZSBmbG9wcHkgbGF0ZXIgd2l0aG91dCBvdmVybGFwcGluZworICAgdGhlIFJBTSBkaXNrIGltYWdlLiBBbiBvZmZzZXQgb2YgNDAwIGtCIGZvciBrZXJuZWxzIGFib3V0IDM1MCBrQiBpbgorICAgc2l6ZSB3b3VsZCBiZSByZWFzb25hYmxlLiBNYWtlIHN1cmUgb2Zmc2V0K3NpemUgb2YgcmFtX2ltYWdlLmd6IGlzCisgICBub3QgbGFyZ2VyIHRoYW4gdGhlIHRvdGFsIHNwYWNlIG9uIHlvdXIgZmxvcHB5ICh1c3VhbGx5IDE0NDAga0IpLgorCisJZGQgaWY9L3RtcC9yYW1faW1hZ2UuZ3ogb2Y9L2Rldi9mZDAgYnM9MWsgc2Vlaz00MDAKKworZykgVXNlICJyZGV2IiB0byBzZXQgdGhlIGJvb3QgZGV2aWNlLCBSQU0gZGlzayBvZmZzZXQsIHByb21wdCBmbGFnLCBldGMuCisgICBGb3IgcHJvbXB0X3JhbWRpc2s9MSwgbG9hZF9yYW1kaXNrPTEsIHJhbWRpc2tfc3RhcnQ9NDAwLCBvbmUgd291bGQKKyAgIGhhdmUgMl4xNSArIDJeMTQgKyA0MDAgPSA0OTU1Mi4KKworCXJkZXYgL2Rldi9mZDAgL2Rldi9mZDAKKwlyZGV2IC1yIC9kZXYvZmQwIDQ5NTUyCisKK1RoYXQgaXMgaXQuIFlvdSBub3cgaGF2ZSB5b3VyIGJvb3Qvcm9vdCBjb21wcmVzc2VkIFJBTSBkaXNrIGZsb3BweS4gU29tZQordXNlcnMgbWF5IHdpc2ggdG8gY29tYmluZSBzdGVwcyAoZCkgYW5kIChmKSBieSB1c2luZyBhIHBpcGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJCQlQYXVsIEdvcnRtYWtlciAxMi85NQorCitDaGFuZ2Vsb2c6CistLS0tLS0tLS0tCisKKzEwLTIyLTA0IDoJVXBkYXRlZCB0byByZWZsZWN0IGNoYW5nZXMgaW4gY29tbWFuZCBsaW5lIG9wdGlvbnMsIHJlbW92ZQorCQlvYnNvbGV0ZSByZWZlcmVuY2VzLCBnZW5lcmFsIGNsZWFudXAuCisJCUphbWVzIE5lbHNvbiAoamFtZXM0NzY1QGdtYWlsLmNvbSkKKworCisxMi05NSA6CQlPcmlnaW5hbCBEb2N1bWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yaXNjb204LnR4dCBiL0RvY3VtZW50YXRpb24vcmlzY29tOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmNjFmZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcmlzY29tOC50eHQKQEAgLTAsMCArMSwzNiBAQAorKiBOT1RFIC0gdGhpcyBpcyBhbiB1bm1haW50YWluZWQgZHJpdmVyLiAgVGhlIG9yaWdpbmFsIGF1dGhvciBjYW5ub3QgYmUgbG9jYXRlZC4KKworU0RMIENvbW11bmljYXRpb25zIGlzIG5vdyBTQlMgVGVjaG5vbG9naWVzLCBhbmQgZG9lcyBub3QgaGF2ZSBhbnkKK2luZm9ybWF0aW9uIG9uIHRoZXNlIGFuY2llbnQgSVNBIGNhcmRzIG9uIHRoZWlyIHdlYnNpdGUuCisKK0phbWVzIE5lbHNvbiA8amFtZXM0NzY1QGdtYWlsLmNvbT4gLSAxMi0xMi0yMDA0CisKKwlUaGlzIGlzIHRoZSBSRUFETUUgZm9yIFJJU0NvbS84IG11bHRpLXBvcnQgc2VyaWFsIGRyaXZlcgorCShDKSAxOTk0LTE5OTYgRC5Hb3JvZGNoYW5pbgorCVNlZSBmaWxlIExJQ0VOU0UgZm9yIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCitOT1RFOiBFbmdsaXNoIGlzIG5vdCBteSBuYXRpdmUgbGFuZ3VhZ2UuIAorICAgICAgSSdtIHNvcnJ5IGZvciBhbnkgbWlzdGFrZXMgaW4gdGhpcyB0ZXh0LgorCitNaXNjLiBub3RlcyBmb3IgUklTQ29tLzggc2VyaWFsIGRyaXZlciwgaW4gbm8gcGFydGljdWxhciBvcmRlciA6KQorCisxKSBUaGlzIGRyaXZlciBjYW4gc3VwcG9ydCB1cCB0byA0IGJvYXJkcyBhdCB0aW1lLgorICAgVXNlIHN0cmluZyAicmlzY29tOD0weFhYWCwweFhYWCwweFhYWCwweFhYWCIgYXQgTElMTyBwcm9tcHQsIGZvcgorICAgc2V0dGluZyBJL08gYmFzZSBhZGRyZXNzZXMgZm9yIGJvYXJkcy4gSWYgeW91IGNvbXBpbGUgZHJpdmVyCisgICBhcyBtb2R1bGUgdXNlIG1vZHByb2JlIG9wdGlvbnMgImlvYmFzZT0weFhYWCBpb2Jhc2UxPTB4WFhYIGlvYmFzZTI9Li4uIgorCisyKSBUaGUgZHJpdmVyIHBhcnRpYWxseSBzdXBwb3J0cyBmYW1vdXMgJ3NldHNlcmlhbCcgcHJvZ3JhbSwgeW91IGNhbiB1c2UgYWxtb3N0CisgICBhbnkgb2YgaXRzIG9wdGlvbnMsIGV4Y2x1ZGluZyBwb3J0ICYgaXJxIHNldHRpbmdzLgorCiszKSBUaGVyZSBhcmUgc29tZSBtaXNjLiBkZWZpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgcmlzY29tOC5jLCBwbGVhc2UgcmVhZCB0aGUgCisgICBjb21tZW50cyBhbmQgdHJ5IHRvIGNoYW5nZSBzb21lIG9mIHRoZW0gaW4gY2FzZSBvZiBwcm9ibGVtcy4KKworNCkgSSBjb25zaWRlciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHJpdmVyIGFzIEJFVEEuCisKKzUpIFNETCBDb21tdW5pY2F0aW9ucyBXV1cgcGFnZSBpcyBodHRwOi8vd3d3LnNkbGNvbW0uY29tLgorCis2KSBZb3UgY2FuIHVzZSB0aGUgTUFLRURFViBwcm9ncmFtIHRvIGNyZWF0ZSBSSVNDb20vOCAvZGV2L3R0eUwqIGVudHJpZXMuCisKKzcpIE1pbm9yIG51bWJlcnMgZm9yIGZpcnN0IGJvYXJkIGFyZSAwLTcsIGZvciBzZWNvbmQgOC0xNSwgZXRjLgorCisyMiBBcHIgMTk5Ni4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcm9ja2V0LnR4dCBiL0RvY3VtZW50YXRpb24vcm9ja2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA2NzgwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yb2NrZXQudHh0CkBAIC0wLDAgKzEsMTg5IEBACitDb210cm9sKHRtKSBSb2NrZXRQb3J0KFIpL1JvY2tldE1vZGVtKFRNKSBTZXJpZXMgCitEZXZpY2UgRHJpdmVyIGZvciB0aGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworUFJPRFVDVCBPVkVSVklFVworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBwcm92aWRlcyBhIGxvYWRhYmxlIGtlcm5lbCBkcml2ZXIgZm9yIHRoZSBDb210cm9sIFJvY2tldFBvcnQKK2FuZCBSb2NrZXRNb2RlbSBQQ0kgYm9hcmRzLiBUaGVzZSBib2FyZHMgcHJvdmlkZSwgMiwgNCwgOCwgMTYsIG9yIDMyIAoraGlnaC1zcGVlZCBzZXJpYWwgcG9ydHMgb3IgbW9kZW1zLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gYSBjb21iaW5hdGlvbgorb2YgZm91ciBSb2NrZXRQb3J0IG9yIFJvY2tldE1vZGVtcyBib2FyZHMgaW4gb25lIG1hY2hpbmUgc2ltdWx0YW5lb3VzbHkuCitUaGlzIGZpbGUgYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIFJvY2tldFBvcnQgZHJpdmVyIHdoaWNoIGlzCitpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBzb3VyY2VzLiAgCisKK1RoZSBkcml2ZXIgY2FuIGFsc28gYmUgaW5zdGFsbGVkIGFzIGFuIGV4dGVybmFsIG1vZHVsZSB1c2luZyB0aGUgdXN1YWwgCisibWFrZTttYWtlIGluc3RhbGwiIHJvdXRpbmUuICBUaGlzIGV4dGVybmFsIG1vZHVsZSBkcml2ZXIsIG9idGFpbmFibGUgCitmcm9tIHRoZSBDb210cm9sIHdlYnNpdGUgbGlzdGVkIGJlbG93LCBpcyB1c2VmdWwgZm9yIHVwZGF0aW5nIHRoZSBkcml2ZXIKK29yIGluc3RhbGxpbmcgaXQgaW50byBrZXJuZWxzIHdoaWNoIGRvIG5vdCBoYXZlIHRoZSBkcml2ZXIgY29uZmlndXJlZAoraW50byB0aGVtLiAgSW5zdGFsbGF0aW9ucyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBleHRlcm5hbCBtb2R1bGUKK2FyZSBpbiB0aGUgaW5jbHVkZWQgUkVBRE1FIGFuZCBIV19JTlNUQUxMIGZpbGVzLgorCitSb2NrZXRQb3J0IElTQSBhbmQgUm9ja2V0TW9kZW0gSUkgUENJIGJvYXJkcyBjdXJyZW50bHkgYXJlIG9ubHkgc3VwcG9ydGVkIGJ5Cit0aGlzIGRyaXZlciBpbiBtb2R1bGUgZm9ybS4KKworVGhlIFJvY2tldFBvcnQgSVNBIGJvYXJkIHJlcXVpcmVzIEkvTyBwb3J0cyB0byBiZSBjb25maWd1cmVkIGJ5IHRoZSBESVAKK3N3aXRjaGVzIG9uIHRoZSBib2FyZC4gIFNlZSB0aGUgc2VjdGlvbiAiSVNBIFJvY2tldHBvcnQgQm9hcmRzIiBiZWxvdyBmb3IKK2luZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdGhlIERJUCBzd2l0Y2hlcy4KKworWW91IHBhc3MgdGhlIEkvTyBwb3J0IHRvIHRoZSBkcml2ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVyczoKKworYm9hcmQxIDoJSS9PIHBvcnQgZm9yIHRoZSBmaXJzdCBJU0EgYm9hcmQKK2JvYXJkMiA6CUkvTyBwb3J0IGZvciB0aGUgc2Vjb25kIElTQSBib2FyZAorYm9hcmQzIDoJSS9PIHBvcnQgZm9yIHRoZSB0aGlyZCBJU0EgYm9hcmQKK2JvYXJkNCA6CUkvTyBwb3J0IGZvciB0aGUgZm91cnRoIElTQSBib2FyZAorCitUaGVyZSBpcyBhIHNldCBvZiB1dGlsaXRpZXMgYW5kIHNjcmlwdHMgcHJvdmlkZWQgd2l0aCB0aGUgZXh0ZXJuYWwgZHJpdmVyCisoIGRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cuY29tdHJvbC5jb20gKSB0aGF0IGVhc2UgdGhlIGNvbmZpZ3VyYXRpb24gYW5kCitzZXR1cCBvZiB0aGUgSVNBIGNhcmRzLgorCitUaGUgUm9ja2V0TW9kZW0gSUkgUENJIGJvYXJkcyByZXF1aXJlIGZpcm13YXJlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBjYXJkCitiZWZvcmUgaXQgd2lsbCBmdW5jdGlvbi4gIFRoZSBkcml2ZXIgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgYXMgYSBtb2R1bGUgZm9yIHRoaXMKK2JvYXJkLgorCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworSU5TVEFMTEFUSU9OIFBST0NFRFVSRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JvY2tldFBvcnQvUm9ja2V0TW9kZW0gUENJIGNhcmRzIHJlcXVpcmUgbm8gZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHRoZXkgYXJlIAorYXV0b21hdGljYWxseSBkZXRlY3RlZCBhbmQgY29uZmlndXJlZC4KKworVGhlIFJvY2tldFBvcnQgZHJpdmVyIGNhbiBiZSBpbnN0YWxsZWQgYXMgYSBtb2R1bGUgKHJlY29tbWVuZGVkKSBvciBidWlsdCAKK2ludG8gdGhlIGtlcm5lbC4gVGhpcyBpcyBzZWxlY3RlZCwgYXMgZm9yIG90aGVyIGRyaXZlcnMsIHRocm91Z2ggdGhlIGBtYWtlIGNvbmZpZ2AKK2NvbW1hbmQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgTGludXggc291cmNlIHRyZWUgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gCisKK1RoZSBSb2NrZXRQb3J0L1JvY2tldE1vZGVtIHNlcmlhbCBwb3J0cyBpbnN0YWxsZWQgYnkgdGhpcyBkcml2ZXIgYXJlIGFzc2lnbmVkCitkZXZpY2UgbWFqb3IgbnVtYmVyIDQ2LCBhbmQgd2lsbCBiZSBuYW1lZCAvZGV2L3R0eVJ4LCB3aGVyZSB4IGlzIHRoZSBwb3J0IG51bWJlciAKK3N0YXJ0aW5nIGF0IHplcm8gKGV4LiAvZGV2L3R0eVIwLCAvZGV2dHR5UjEsIC4uLikuICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBjYXJkcworaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0sIHRoZSBtYXBwaW5nIG9mIHBvcnQgbmFtZXMgdG8gc2VyaWFsIHBvcnRzIGlzIGRpc3BsYXllZAoraW4gdGhlIHN5c3RlbSBsb2cgYXQgL3Zhci9sb2cvbWVzc2FnZXMuCisKK0lmIGluc3RhbGxlZCBhcyBhIG1vZHVsZSwgdGhlIG1vZHVsZSBtdXN0IGJlIGxvYWRlZC4gIFRoaXMgY2FuIGJlIGRvbmUKK21hbnVhbGx5IGJ5IGVudGVyaW5nICJtb2Rwcm9iZSByb2NrZXQiLiAgVG8gaGF2ZSB0aGUgbW9kdWxlIGxvYWRlZCBhdXRvbWF0aWNhbGx5Cit1cG9uIHN5c3RlbSBib290LCBlZGl0IHRoZSAvZXRjL21vZHByb2JlLmNvbmYgZmlsZSBhbmQgYWRkIHRoZSBsaW5lCisiYWxpYXMgY2hhci1tYWpvci00NiByb2NrZXQiLgorCitJbiBvcmRlciB0byB1c2UgdGhlIHBvcnRzLCB0aGVpciBkZXZpY2UgbmFtZXMgKG5vZGVzKSBtdXN0IGJlIGNyZWF0ZWQgd2l0aCBta25vZC4KK1RoaXMgaXMgb25seSByZXF1aXJlZCBvbmNlLCB0aGUgc3lzdGVtIHdpbGwgcmV0YWluIHRoZSBuYW1lcyBvbmNlIGNyZWF0ZWQuICBUbyAKK2NyZWF0ZSB0aGUgUm9ja2V0UG9ydC9Sb2NrZXRNb2RlbSBkZXZpY2UgbmFtZXMsIHVzZSB0aGUgY29tbWFuZCAKKyJta25vZCAvZGV2L3R0eVJ4IGMgNDYgeCIgd2hlcmUgeCBpcyB0aGUgcG9ydCBudW1iZXIgc3RhcnRpbmcgYXQgemVyby4gIEZvciBleGFtcGxlOgorCis+bWtub2QgL2Rldi90dHlSMCBjIDQ2IDAKKz5ta25vZCAvZGV2L3R0eVIxIGMgNDYgMQorPm1rbm9kIC9kZXYvdHR5UjIgYyA0NiAyICAKKworVGhlIExpbnV4IHNjcmlwdCBNQUtFREVWIHdpbGwgY3JlYXRlIHRoZSBmaXJzdCAxNiB0dHlSeCBkZXZpY2UgbmFtZXMgKG5vZGVzKQorZm9yIHlvdToKKworPi9kZXYvTUFLRURFViB0dHlSCisKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitJU0EgUm9ja2V0cG9ydCBCb2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbXVzdCBhc3NpZ24gYW5kIGNvbmZpZ3VyZSB0aGUgSS9PIGFkZHJlc3NlcyB1c2VkIGJ5IHRoZSBJU0EgUm9ja2V0cG9ydAorY2FyZCBiZWZvcmUgaW5zdGFsbGluZyBhbmQgdXNpbmcgaXQuICBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyBhIHNldCBvZiBESVAKK3N3aXRjaGVzIG9uIHRoZSBSb2NrZXRwb3J0IGJvYXJkLgorCisKK1NFVFRJTkcgVEhFIEkvTyBBRERSRVNTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWZvcmUgaW5zdGFsbGluZyBSb2NrZXRQb3J0KFIpIG9yIFJvY2tldFBvcnQgUkEgYm9hcmRzLCB5b3UgbXVzdCBmaW5kCithIHJhbmdlIG9mIEkvTyBhZGRyZXNzZXMgZm9yIGl0IHRvIHVzZS4gVGhlIGZpcnN0IFJvY2tldFBvcnQgY2FyZAorcmVxdWlyZXMgYSA2OC1ieXRlIGNvbnRpZ3VvdXMgYmxvY2sgb2YgSS9PIGFkZHJlc3Nlcywgc3RhcnRpbmcgYXQgb25lCitvZiB0aGUgZm9sbG93aW5nOiAweDEwMGgsIDB4MTQwaCwgMHgxODBoLCAweDIwMGgsIDB4MjQwaCwgMHgyODBoLAorMHgzMDBoLCAweDM0MGgsIDB4MzgwaC4gIFRoaXMgSS9PIGFkZHJlc3MgbXVzdCBiZSByZWZsZWN0ZWQgaW4gdGhlIERJUAorc3dpdGljaGVzIG9mICphbGwqIG9mIHRoZSBSb2NrZXRwb3J0IGNhcmRzLgorCitUaGUgc2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBSb2NrZXRQb3J0IGNhcmRzIHJlcXVpcmUgYSA2NC1ieXRlCitjb250aWd1b3VzIGJsb2NrIG9mIEkvTyBhZGRyZXNzZXMsIHN0YXJ0aW5nIGF0IG9uZSBvZiB0aGUgZm9sbG93aW5nCitJL08gYWRkcmVzc2VzOiAweDEwMGgsIDB4MTQwaCwgMHgxODBoLCAweDFDMGgsIDB4MjAwaCwgMHgyNDBoLCAweDI4MGgsCisweDJDMGgsIDB4MzAwaCwgMHgzNDBoLCAweDM4MGgsIDB4M0MwaC4gIFRoZSBJL08gYWRkcmVzcyB1c2VkIGJ5IHRoZQorc2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBSb2NrZXRwb3J0IGNhcmRzIChpZiBwcmVzZW50KSBhcmUgc2V0IHZpYQorc29mdHdhcmUgY29udHJvbC4gIFRoZSBESVAgc3dpdGNoIHNldHRpbmdzIGZvciB0aGUgSS9PIGFkZHJlc3MgbXVzdCBiZQorc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgUm9ja2V0cG9ydCBjYXJkcy4KKworSW4gb3JkZXIgdG8gZGVzdGluZ3Vpc2ggZWFjaCBvZiB0aGUgY2FyZCBmcm9tIHRoZSBvdGhlcnMsIGVhY2ggY2FyZAorbXVzdCBoYXZlIGEgdW5pcXVlIGJvYXJkIElEIHNldCBvbiB0aGUgZGlwIHN3aXRjaGVzLiAgVGhlIGZpcnN0CitSb2NrZXRwb3J0IGJvYXJkIG11c3QgYmUgc2V0IHdpdGggdGhlIERJUCBzd2l0Y2hlcyBjb3JyZXNwb25kaW5nIHRvCit0aGUgZmlyc3QgYm9hcmQsIHRoZSBzZWNvbmQgYm9hcmQgbXVzdCBiZSBzZXQgd2l0aCB0aGUgRElQIHN3aXRjaGVzCitjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWNvbmQgYm9hcmQsIGV0Yy4gIElNUE9SVEFOVDogVGhlIGJvYXJkIElEIGlzCit0aGUgb25seSBwbGFjZSB3aGVyZSB0aGUgRElQIHN3aXRjaCBzZXR0aW5ncyBzaG91bGQgZGlmZmVyIGJldHdlZW4gdGhlCit2YXJpb3VzIFJvY2tldHBvcnQgYm9hcmRzIGluIGEgc3lzdGVtLgorCitUaGUgSS9PIGFkZHJlc3MgcmFuZ2UgdXNlZCBieSBhbnkgb2YgdGhlIFJvY2tldFBvcnQgY2FyZHMgbXVzdCBub3QKK2NvbmZsaWN0IHdpdGggYW55IG90aGVyIGNhcmRzIGluIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyBvdGhlcgorUm9ja2V0UG9ydCBjYXJkcy4gIEJlbG93LCB5b3Ugd2lsbCBmaW5kIGEgbGlzdCBvZiBjb21tb25seSB1c2VkIEkvTworYWRkcmVzcyByYW5nZXMgd2hpY2ggbWF5IGJlIGluIHVzZSBieSBvdGhlciBkZXZpY2VzIGluIHlvdXIgc3lzdGVtLgorT24gYSBMaW51eCBzeXN0ZW0sICJjYXQgL3Byb2MvaW9wb3J0cyIgd2lsbCBhbHNvIGJlIGhlbHBmdWwgaW4KK2lkZW50aWZ5aW5nIHdoYXQgSS9PIGFkZHJlc3NlcyBhcmUgYmVpbmcgdXNlZCBieSBkZXZpY3Mgb24geW91cgorc3lzdGVtLgorCitSZW1lbWJlciwgdGhlIEZJUlNUIFJvY2tldFBvcnQgdXNlcyA2OCBJL08gYWRkcmVzc2VzLiAgU28sIGlmIHlvdSBzZXQgaXQKK2ZvciAweDEwMCwgaXQgd2lsbCBvY2N1cHkgMHgxMDAgdG8gMHgxNDMuICBUaGlzIHdvdWxkIG1lYW4gdGhhdCB5b3UKK0NBTiBOT1Qgc2V0IHRoZSBzZWNvbmQsIHRoaXJkIG9yIGZvdXJ0aCBib2FyZCBmb3IgYWRkcmVzcyAweDE0MCBzaW5jZQordGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhhdCByYW5nZSBhcmUgdXNlZCBieSB0aGUgZmlyc3QgYm9hcmQuICBZb3Ugd291bGQKK25lZWQgdG8gc2V0IHRoZSBzZWNvbmQsIHRoaXJkLCBvciBmb3VydGggYm9hcmQgdG8gb25lIG9mIHRoZSBuZXh0IGF2YWlsYWJsZQorYmxvY2tzIHN1Y2ggYXMgMHgxODAuCisKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitSb2NrZXRQb3J0IGFuZCBSb2NrZXRQb3J0IFJBIFNXMSBTZXR0aW5nczoKKworICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgOCB8IDcgfCA2IHwgNSB8IDQgfCAzIHwgMiB8IDEgfAorICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgVW51c2VkfCBDYXJkICB8IEkvTyBQb3J0IEJsb2NrfAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitESVAgU3dpdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUCBTd2l0Y2hlcworNyAgICA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAgIDUKKz09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PQorT24gICBPbiAgIFVOVVNFRCwgTVVTVCBCRSBPTi4gICAgICAgICAgICBPbiAgIE9uICAgRmlyc3QgQ2FyZCAgICA8PT09PSBEZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uICAgT2ZmICBTZWNvbmQgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYgIE9uICAgVGhpcmQgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmYgIE9mZiAgRm91cnRoIENhcmQKKworRElQIFN3aXRjaGVzICAgICAgICAgSS9PIEFkZHJlc3MgUmFuZ2UKKzQgICAgMyAgICAyICAgIDEgICAgIFVzZWQgYnkgdGhlIEZpcnN0IENhcmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK09uICAgT2ZmICBPbiAgIE9mZiAgIDEwMC0xNDMKK09uICAgT2ZmICBPZmYgIE9uICAgIDE0MC0xODMKK09uICAgT2ZmICBPZmYgIE9mZiAgIDE4MC0xQzMgICAgICAgPD09PT0gRGVmYXVsdAorT2ZmICBPbiAgIE9uICAgT2ZmICAgMjAwLTI0MworT2ZmICBPbiAgIE9mZiAgT24gICAgMjQwLTI4MworT2ZmICBPbiAgIE9mZiAgT2ZmICAgMjgwLTJDMworT2ZmICBPZmYgIE9uICAgT2ZmICAgMzAwLTM0MworT2ZmICBPZmYgIE9mZiAgT24gICAgMzQwLTM4MworT2ZmICBPZmYgIE9mZiAgT2ZmICAgMzgwLTNDMworCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworUkVQT1JUSU5HIEJVR1MKKy0tLS0tLS0tLS0tLS0tCisKK0ZvciB0ZWNobmljYWwgc3VwcG9ydCwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZworaW5mb3JtYXRpb246IERyaXZlciB2ZXJzaW9uLCBrZXJuZWwgcmVsZWFzZSwgZGlzdHJpYnV0aW9uIG9mCitrZXJuZWwsIGFuZCB0eXBlIG9mIGJvYXJkIHlvdSBhcmUgdXNpbmcuIEVycm9yIG1lc3NhZ2VzIGFuZCBsb2cKK3ByaW50b3V0cyBwb3J0IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBhcmUgZXNwZWNpYWxseSBoZWxwZnVsLgorCitVU0EKKyAgICBQaG9uZTogKDYxMikgNDk0LTQxMDAKKyAgICAgIEZBWDogKDYxMikgNDk0LTQxOTkKKyAgICBlbWFpbDogc3VwcG9ydEBjb210cm9sLmNvbQorCitDb210cm9sIEV1cm9wZQorICAgIFBob25lOiArNDQgKDApIDEgODY5IDMyMy0yMjAKKyAgICAgIEZBWDogKzQ0ICgwKSAxIDg2OSAzMjMtMjExCisgICAgZW1haWw6IHN1cHBvcnRAY29tdHJvbC5jby51aworCitXZWI6CWh0dHA6Ly93d3cuY29tdHJvbC5jb20KK0ZUUDoJZnRwLmNvbXRyb2wuY29tCisKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcnBjLWNhY2hlLnR4dCBiL0RvY3VtZW50YXRpb24vcnBjLWNhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVkNDQzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ycGMtY2FjaGUudHh0CkBAIC0wLDAgKzEsMTcxIEBACitUaGlzIGRvY3VtZW50IGdpdmVzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIHRoZSBjYWNoaW5nCittZWNoYW5pc21zIGluIHRoZSBzdW5ycGMgbGF5ZXIgdGhhdCBpcyB1c2VkLCBpbiBwYXJ0aWN1bGFyLAorZm9yIE5GUyBhdXRoZW50aWNhdGlvbi4KKworQ0FDSEVTCis9PT09PT0KK1RoZSBjYWNoaW5nIHJlcGxhY2VzIHRoZSBvbGQgZXhwb3J0cyB0YWJsZSBhbmQgYWxsb3dzIGZvcgorYSB3aWRlIHZhcmlldHkgb2YgdmFsdWVzIHRvIGJlIGNhY2hlcy4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGNhY2hlcyB0aGF0IGFyZSBzaW1pbGFyIGluIHN0cnVjdHVyZSB0aG91Z2gKK3F1aXRlIHBvc3NpYmx5IHZlcnkgZGlmZmVyZW50IGluIGNvbnRlbnQgYW5kIHVzZS4gIFRoZXJlIGlzIGEgY29ycHVzCitvZiBjb21tb24gY29kZSBmb3IgbWFuYWdpbmcgdGhlc2UgY2FjaGVzLgorCitFeGFtcGxlcyBvZiBjYWNoZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG5lZWRlZCBhcmU6CisgIC0gbWFwcGluZyBmcm9tIElQIGFkZHJlc3MgdG8gY2xpZW50IG5hbWUKKyAgLSBtYXBwaW5nIGZyb20gY2xpZW50IG5hbWUgYW5kIGZpbGVzeXN0ZW0gdG8gZXhwb3J0IG9wdGlvbnMKKyAgLSBtYXBwaW5nIGZyb20gVUlEIHRvIGxpc3Qgb2YgR0lEcywgdG8gd29yayBhcm91bmQgTkZTJ3MgbGltaXRhdGlvbgorICAgIG9mIDE2IGdpZHMuCisgIC0gbWFwcGluZ3MgYmV0d2VlbiBsb2NhbCBVSUQvR0lEIGFuZCByZW1vdGUgVUlEL0dJRCBmb3Igc2l0ZXMgdGhhdAorICAgIGRvIG5vdCBoYXZlIHVuaWZvcm0gdWlkIGFzc2lnbm1lbnQKKyAgLSBtYXBwaW5nIGZyb20gbmV0d29yayBpZGVudGlmeSB0byBwdWJsaWMga2V5IGZvciBjcnlwdG8gYXV0aGVudGljYXRpb24uCisKK1RoZSBjb21tb24gY29kZSBoYW5kbGVzIHN1Y2ggdGhpbmdzIGFzOgorICAgLSBnZW5lcmFsIGNhY2hlIGxvb2t1cCB3aXRoIGNvcnJlY3QgbG9ja2luZworICAgLSBzdXBwb3J0aW5nICdORUdBVElWRScgYXMgd2VsbCBhcyBwb3NpdGl2ZSBlbnRyaWVzCisgICAtIGFsbG93aW5nIGFuIEVYUElSRUQgdGltZSBvbiBjYWNoZSBpdGVtcywgYW5kIHJlbW92aW5nCisgICAgIGl0ZW1zIGFmdGVyIHRoZXkgZXhwaXJlLCBhbmQgYXJlIG5vIGxvbmdlIGluLXVzZS4KKworICAgRnV0dXJlIGNvZGUgZXh0ZW5zaW9ucyBhcmUgZXhwZWN0IHRvIGhhbmRsZQorICAgLSBtYWtpbmcgcmVxdWVzdHMgdG8gdXNlci1zcGFjZSB0byBmaWxsIGluIGNhY2hlIGVudHJpZXMKKyAgIC0gYWxsb3dpbmcgdXNlci1zcGFjZSB0byBkaXJlY3RseSBzZXQgZW50cmllcyBpbiB0aGUgY2FjaGUKKyAgIC0gZGVsYXlpbmcgUlBDIHJlcXVlc3RzIHRoYXQgZGVwZW5kIG9uIGFzLXlldCBpbmNvbXBsZXRlCisgICAgIGNhY2hlIGVudHJpZXMsIGFuZCByZXBsYXlpbmcgdGhvc2UgcmVxdWVzdHMgd2hlbiB0aGUgY2FjaGUgZW50cnkKKyAgICAgaXMgY29tcGxldGUuCisgICAtIG1haW50YWluaW5nIGxhc3QtYWNjZXNzIHRpbWVzIG9uIGNhY2hlIGVudHJpZXMKKyAgIC0gY2xlYW4gb3V0IG9sZCBlbnRyaWVzIHdoZW4gdGhlIGNhY2hlcyBiZWNvbWUgZnVsbAorCitUaGUgY29kZSBmb3IgcGVyZm9ybWluZyBhIGNhY2hlIGxvb2t1cCBpcyBhbHNvIGNvbW1vbiwgYnV0IGluIHRoZSBmb3JtCitvZiBhIHRlbXBsYXRlLiAgaS5lLiBhICNkZWZpbmUuCitFYWNoIGNhY2hlIGRlZmluZXMgYSBsb29rdXAgZnVuY3Rpb24gYnkgdXNpbmcgdGhlIERlZmluZUNhY2hlTG9va3VwCittYWNybywgb3IgdGhlIHNpbXBsZXIgRGVmaW5lU2ltcGxlQ2FjaGVMb29rdXAgbWFjcm8KKworQ3JlYXRpbmcgYSBDYWNoZQorLS0tLS0tLS0tLS0tLS0tLQorCisxLyBBIGNhY2hlIG5lZWRzIGEgZGF0dW0gdG8gY2FjaGUuICBUaGlzIGlzIGluIHRoZSBmb3JtIG9mIGEKKyAgIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRoYXQgbXVzdCBjb250YWluIGEKKyAgICAgc3RydWN0IGNhY2hlX2hlYWQKKyAgIGFzIGFuIGVsZW1lbnQsIHVzdWFsbHkgdGhlIGZpcnN0LgorICAgSXQgd2lsbCBhbHNvIGNvbnRhaW4gYSBrZXkgYW5kIHNvbWUgY29udGVudC4KKyAgIEVhY2ggY2FjaGUgZWxlbWVudCBpcyByZWZlcmVuY2UgY291bnRlZCBhbmQgY29udGFpbnMKKyAgIGV4cGlyeSBhbmQgdXBkYXRlIHRpbWVzIGZvciB1c2UgaW4gY2FjaGUgbWFuYWdlbWVudC4KKzIvIEEgY2FjaGUgbmVlZHMgYSAiY2FjaGVfZGV0YWlsIiBzdHJ1Y3R1cmUgdGhhdAorICAgZGVzY3JpYmVzIHRoZSBjYWNoZS4gIFRoaXMgc3RvcmVzIHRoZSBoYXNoIHRhYmxlLCBhbmQgc29tZQorICAgcGFyYW1ldGVycyBmb3IgY2FjaGUgbWFuYWdlbWVudC4KKzMvIEEgY2FjaGUgbmVlZHMgYSBsb29rdXAgZnVuY3Rpb24uICBUaGlzIGlzIGNyZWF0ZWQgdXNpbmcKKyAgIHRoZSBEZWZpbmVDYWNoZUxvb2t1cCBtYWNyby4gIFRoaXMgbG9va3VwIGZ1bmN0aW9uIGlzIHVzZWQgYm90aAorICAgdG8gZmluZCBlbnRyaWVzIGFuZCB0byB1cGRhdGUgZW50cmllcy4gIFRoZSBub3JtYWwgbW9kZSBmb3IKKyAgIHVwZGF0aW5nIGFuIGVudHJ5IGlzIHRvIHJlcGxhY2UgdGhlIG9sZCBlbnRyeSB3aXRoIGEgbmV3CisgICBlbnRyeS4gIEhvd2V2ZXIgaXQgaXMgcG9zc2libGUgdG8gYWxsb3cgdXBkYXRlLWluLXBsYWNlCisgICBmb3IgdGhvc2UgY2FjaGVzIHdoZXJlIGl0IG1ha2VzIHNlbnNlIChubyBhdG9taWNpdHkgaXNzdWVzCisgICBvciBpbmRpcmVjdCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUpCis0LyBBIGNhY2hlIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdXNpbmcgY2FjaGVfcmVnaXN0ZXIoKS4gIFRoaXMKKyAgIGluY2x1ZGVzIGluIG9uIGEgbGlzdCBvZiBjYWNoZXMgdGhhdCB3aWxsIGJlIHJlZ3VsYXJseQorICAgY2xlYW5lZCB0byBkaXNjYXJkIG9sZCBkYXRhLiAgRm9yIHRoaXMgdG8gd29yaywgc29tZQorICAgdGhyZWFkIG11c3QgcGVyaW9kaWNhbGx5IGNhbGwgY2FjaGVfY2xlYW4KKyAgIAorVXNpbmcgYSBjYWNoZQorLS0tLS0tLS0tLS0tLQorCitUbyBmaW5kIGEgdmFsdWUgaW4gYSBjYWNoZSwgY2FsbCB0aGUgbG9va3VwIGZ1bmN0aW9uIHBhc3NpbmcgaXQgYSB0aGUKK2RhdHVtIHdoaWNoIGNvbnRhaW5zIGtleSwgYW5kIHBvc3NpYmx5IGNvbnRlbnQsIGFuZCBhIGZsYWcgc2F5aW5nCit3aGV0aGVyIHRvIHVwZGF0ZSB0aGUgY2FjaGUgd2l0aCBuZXcgZGF0YSBmcm9tIHRoZSBkYXR1bS4gICBEZXBlbmRpbmcKK29uIGhvdyB0aGUgY2FjaGUgbG9va3VwIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBpdCBtYXkgdGFrZSBhbiBleHRyYQorYXJndW1lbnQgdG8gaWRlbnRpZnkgdGhlIHBhcnRpY3VsYXIgY2FjaGUgaW4gcXVlc3Rpb24uCisKK0V4Y2VwdCBpbiBjYXNlcyBvZiBrbWFsbG9jIGZhaWx1cmUsIHRoZSBsb29rdXAgZnVuY3Rpb24KK3dpbGwgcmV0dXJuIGEgbmV3IGRhdHVtIHdoaWNoIHdpbGwgc3RvcmUgdGhlIGtleSBhbmQKK21heSBjb250YWluIHZhbGlkIGNvbnRlbnQsIG9yIG1heSBub3QuCitUaGlzIGRhdHVtIGlzIHR5cGljYWxseSBwYXNzZWQgdG8gY2FjaGVfY2hlY2sgd2hpY2ggZGV0ZXJtaW5lcyB0aGUKK3ZhbGlkaXR5IG9mIHRoZSBkYXR1bSBhbmQgbWF5IGxhdGVyIGluaXRpYXRlIGFuIHVwY2FsbCB0byBmaWxsCitpbiB0aGUgZGF0YS4KKworY2FjaGVfY2hlY2sgY2FuIGJlIHBhc3NlZCBhICJzdHJ1Y3QgY2FjaGVfcmVxICoiLiAgVGhpcyBzdHJ1Y3R1cmUgaXMKK3R5cGljYWxseSBlbWJlZGRlZCBpbiB0aGUgYWN0dWFsIHJlcXVlc3QgYW5kIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhCitkZWZlcnJlZCBjb3B5IG9mIHRoZSByZXF1ZXN0IChzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxKS4gIFRoaXMgaXMKK2RvbmUgd2hlbiB0aGUgZm91bmQgY2FjaGUgaXRlbSBpcyBub3QgdXB0b2RhdGUsIGJ1dCB0aGUgaXMgcmVhc29uIHRvCitiZWxpZXZlIHRoYXQgdXNlcnNwYWNlIG1pZ2h0IHByb3ZpZGUgaW5mb3JtYXRpb24gc29vbi4gIFdoZW4gdGhlIGNhY2hlCitpdGVtIGRvZXMgYmVjb21lIHZhbGlkLCB0aGUgZGVmZXJyZWQgY29weSBvZiB0aGUgcmVxdWVzdCB3aWxsIGJlCityZXZpc2l0ZWQgKC0+cmV2aXNpdCkuICBJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgbWV0aG9kIHdpbGwKK3Jlc2NoZWR1bGUgdGhlIHJlcXVlc3QgZm9yIHByb2Nlc3NpbmcuCisKKworUG9wdWxhdGluZyBhIGNhY2hlCistLS0tLS0tLS0tLS0tLS0tLS0KKworRWFjaCBjYWNoZSBoYXMgYSBuYW1lLCBhbmQgd2hlbiB0aGUgY2FjaGUgaXMgcmVnaXN0ZXJlZCwgYSBkaXJlY3RvcnkKK3dpdGggdGhhdCBuYW1lIGlzIGNyZWF0ZWQgaW4gL3Byb2MvbmV0L3JwYworCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgY2FsbGVkICdjaGFubmVsJyB3aGljaCBpcyBhIGNoYW5uZWwKK2ZvciBjb21tdW5pY2F0aW5nIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIGZvciBwb3B1bGF0aW5nIHRoZSBjYWNoZS4KK1RoaXMgZGlyZWN0b3J5IG1heSBsYXRlciBjb250YWluIG90aGVyIGZpbGVzIG9mIGludGVyYWN0aW5nCit3aXRoIHRoZSBjYWNoZS4KKworVGhlICdjaGFubmVsJyB3b3JrcyBhIGJpdCBsaWtlIGEgZGF0YWdyYW0gc29ja2V0LiBFYWNoICd3cml0ZScgaXMKK3Bhc3NlZCBhcyBhIHdob2xlIHRvIHRoZSBjYWNoZSBmb3IgcGFyc2luZyBhbmQgaW50ZXJwcmV0YXRpb24uCitFYWNoIGNhY2hlIGNhbiB0cmVhdCB0aGUgd3JpdGUgcmVxdWVzdHMgZGlmZmVyZW50bHksIGJ1dCBpdCBpcworZXhwZWN0ZWQgdGhhdCBhIG1lc3NhZ2Ugd3JpdHRlbiB3aWxsIGNvbnRhaW46CisgIC0gYSBrZXkKKyAgLSBhbiBleHBpcnkgdGltZQorICAtIGEgY29udGVudC4KK3dpdGggdGhlIGludGVudGlvbiB0aGF0IGFuIGl0ZW0gaW4gdGhlIGNhY2hlIHdpdGggdGhlIGdpdmUga2V5CitzaG91bGQgYmUgY3JlYXRlIG9yIHVwZGF0ZWQgdG8gaGF2ZSB0aGUgZ2l2ZW4gY29udGVudCwgYW5kIHRoZQorZXhwaXJ5IHRpbWUgc2hvdWxkIGJlIHNldCBvbiB0aGF0IGl0ZW0uCisKK1JlYWRpbmcgZnJvbSBhIGNoYW5uZWwgaXMgYSBiaXQgbW9yZSBpbnRlcmVzdGluZy4gIFdoZW4gYSBjYWNoZQorbG9va3VwIGZhaWwsIG9yIHdoZW4gaXQgc3VjZWVkcyBidXQgZmluZHMgYW4gZW50cnkgdGhhdCBtYXkgc29vbgorZXhwaXJ5LCBhIHJlcXVlc3QgaXMgbG9kZ2VkIGZvciB0aGF0IGNhY2hlIGl0ZW0gdG8gYmUgdXBkYXRlZCBieQordXNlci1zcGFjZS4gIFRoZXNlIHJlcXVlc3RzIGFwcGVhciBpbiB0aGUgY2hhbm5lbCBmaWxlLgorCitTdWNjZXNzaXZlIHJlYWRzIHdpbGwgcmV0dXJuIHN1Y2Nlc3NpdmUgcmVxdWVzdHMuCitJZiB0aGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cyB0byByZXR1cm4sIHJlYWQgd2lsbCByZXR1cm4gRU9GLCBidXQgYQorc2VsZWN0IG9yIHBvbGwgZm9yIHJlYWQgd2lsbCBibG9jayB3YWl0aW5nIGZvciBhbm90aGVyIHJlcXVlc3QgdG8gYmUKK2FkZGVkLgorCitUaHVzIGEgdXNlci1zcGFjZSBoZWxwZXIgaXMgbGlrZWx5IHRvOgorICBvcGVuIHRoZSBjaGFubmVsLgorICAgIHNlbGVjdCBmb3IgcmVhZGFibGUKKyAgICByZWFkIGEgcmVxdWVzdAorICAgIHdyaXRlIGEgcmVzcG9uc2UKKyAgbG9vcC4KKworSWYgaXQgZGllcyBhbmQgbmVlZHMgdG8gYmUgcmVzdGFydGVkLCBhbnkgcmVxdWVzdHMgdGhhdCBoYXZlIG5vdCBiZQorYW5zd2VyZWQgd2lsbCBzdGlsbCBhcHBlYXIgaW4gdGhlIGZpbGUgYW5kIHdpbGwgYmUgcmVhZCBieSB0aGUgbmV3CitpbnN0YW5jZSBvZiB0aGUgaGVscGVyLgorCitFYWNoIGNhY2hlIHNob3VsZCBkZWZpbmUgYSAiY2FjaGVfcGFyc2UiIG1ldGhvZCB3aGljaCB0YWtlcyBhIG1lc3NhZ2UKK3dyaXR0ZW4gZnJvbSB1c2VyLXNwYWNlIGFuZCBwcm9jZXNzZXMgaXQuICBJdCBzaG91bGQgcmV0dXJuIGFuIGVycm9yCisod2hpY2ggcHJvcGFnYXRlcyBiYWNrIHRvIHRoZSB3cml0ZSBzeXNjYWxsKSBvciAwLgorCitFYWNoIGNhY2hlIHNob3VsZCBhbHNvIGRlZmluZSBhICJjYWNoZV9yZXF1ZXN0IiBtZXRob2Qgd2hpY2gKK3Rha2VzIGEgY2FjaGUgaXRlbSBhbmQgZW5jb2RlcyBhIHJlcXVlc3QgaW50byB0aGUgYnVmZmVyCitwcm92aWRlZC4KKworCitOb3RlOiBJZiBhIGNhY2hlIGhhcyBubyBhY3RpdmUgcmVhZGVycyBvbiB0aGUgY2hhbm5lbCwgYW5kIGhhcyBoYWQgbm90CithY3RpdmUgcmVhZGVycyBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMsIGZ1cnRoZXIgcmVxdWVzdHMgd2lsbCBub3QgYmUKK2FkZGVkIHRvIHRoZSBjaGFubmVsIGJ1dCBpbnN0ZWFkIGFsbCBsb29rcyB0aGF0IGRvIG5vdCBmaW5kIGEgdmFsaWQKK2VudHJ5IHdpbGwgZmFpbC4gIFRoaXMgaXMgcGFydGx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBUaGUKK3ByZXZpb3VzIG5mcyBleHBvcnRzIHRhYmxlIHdhcyBkZWVtZWQgdG8gYmUgYXV0aG9yaXRhdGl2ZSBhbmQgYQorZmFpbGVkIGxvb2t1cCBtZWFudCBhIGRlZmluaXRlICdubycuCisKK3JlcXVlc3QvcmVzcG9uc2UgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSBlYWNoIGNhY2hlIGlzIGZyZWUgdG8gdXNlIGl0J3Mgb3duIGZvcm1hdCBmb3IgcmVxdWVzdHMKK2FuZCByZXNwb25zZXMgb3ZlciBjaGFubmVsLCB0aGUgZm9sbG93aW5nIGlzIHJlY29tbWVuZGVkIGFyZQorYXBwcm9wcmlhdGUgYW5kIHN1cHBvcnQgcm91dGluZXMgYXJlIGF2YWlsYWJsZSB0byBoZWxwOgorRWFjaCByZXF1ZXN0IG9yIHJlc3BvbnNlIHJlY29yZCBzaG91bGQgYmUgcHJpbnRhYmxlIEFTQ0lJCit3aXRoIHByZWNpc2VseSBvbmUgbmV3bGluZSBjaGFyYWN0ZXIgd2hpY2ggc2hvdWxkIGJlIGF0IHRoZSBlbmQuCitGaWVsZHMgd2l0aGluIHRoZSByZWNvcmQgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIG5vcm1hbGx5IG9uZS4KK0lmIHNwYWNlcywgbmV3bGluZXMsIG9yIG51bCBjaGFyYWN0ZXJzIGFyZSBuZWVkZWQgaW4gYSBmaWVsZCB0aGV5CittdWNoIGJlIHF1b3Rlcy4gIHR3byBtZWNoYW5pc21zIGFyZSBhdmFpbGFibGU6CisxLyBJZiBhIGZpZWxkIGJlZ2lucyAnXHgnIHRoZW4gaXQgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mCisgICBoZXggZGlnaXRzLCBhbmQgcGFpcnMgb2YgdGhlc2UgZGlnaXRzIHByb3ZpZGUgdGhlIGJ5dGVzIGluIHRoZQorICAgZmllbGQuCisyLyBvdGhlcndpc2UgYSBcIGluIHRoZSBmaWVsZCBtdXN0IGJlIGZvbGxvd2VkIGJ5IDMgb2N0YWwgZGlnaXRzCisgICB3aGljaCBnaXZlIHRoZSBjb2RlIGZvciBhIGJ5dGUuICBPdGhlciBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkCisgICBhcyB0aGVtIHNlbHZlcy4gIEF0IHRoZSB2ZXJ5IGxlYXN0LCBzcGFjZSwgbmV3bGluZXMgbnVsLCBhbmQKKyAgICdcJyBtdXN0IGJlIHF1b3RlZCBpbiB0aGlzIHdheS4KKyAgIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ydGMudHh0IGIvRG9jdW1lbnRhdGlvbi9ydGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDE3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3J0Yy50eHQKQEAgLTAsMCArMSwyODIgQEAKKworCVJlYWwgVGltZSBDbG9jayBEcml2ZXIgZm9yIExpbnV4CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQWxsIFBDcyAoZXZlbiBBbHBoYSBtYWNoaW5lcykgaGF2ZSBhIFJlYWwgVGltZSBDbG9jayBidWlsdCBpbnRvIHRoZW0uCitVc3VhbGx5IHRoZXkgYXJlIGJ1aWx0IGludG8gdGhlIGNoaXBzZXQgb2YgdGhlIGNvbXB1dGVyLCBidXQgc29tZSBtYXkKK2FjdHVhbGx5IGhhdmUgYSBNb3Rvcm9sYSBNQzE0NjgxOCAob3IgY2xvbmUpIG9uIHRoZSBib2FyZC4gVGhpcyBpcyB0aGUKK2Nsb2NrIHRoYXQga2VlcHMgdGhlIGRhdGUgYW5kIHRpbWUgd2hpbGUgeW91ciBjb21wdXRlciBpcyB0dXJuZWQgb2ZmLgorCitIb3dldmVyIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgc2lnbmFscyBmcm9tIGEgc2xvdyAySHogdG8gYQorcmVsYXRpdmVseSBmYXN0IDgxOTJIeiwgaW4gaW5jcmVtZW50cyBvZiBwb3dlcnMgb2YgdHdvLiBUaGVzZSBzaWduYWxzCithcmUgcmVwb3J0ZWQgYnkgaW50ZXJydXB0IG51bWJlciA4LiAoT2ghIFNvICp0aGF0KiBpcyB3aGF0IElSUSA4IGlzCitmb3IuLi4pIEl0IGNhbiBhbHNvIGZ1bmN0aW9uIGFzIGEgMjRociBhbGFybSwgcmFpc2luZyBJUlEgOCB3aGVuIHRoZQorYWxhcm0gZ29lcyBvZmYuIFRoZSBhbGFybSBjYW4gYWxzbyBiZSBwcm9ncmFtbWVkIHRvIG9ubHkgY2hlY2sgYW55CitzdWJzZXQgb2YgdGhlIHRocmVlIHByb2dyYW1tYWJsZSB2YWx1ZXMsIG1lYW5pbmcgdGhhdCBpdCBjb3VsZCBiZSBzZXQgdG8KK3Jpbmcgb24gdGhlIDMwdGggc2Vjb25kIG9mIHRoZSAzMHRoIG1pbnV0ZSBvZiBldmVyeSBob3VyLCBmb3IgZXhhbXBsZS4KK1RoZSBjbG9jayBjYW4gYWxzbyBiZSBzZXQgdG8gZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHVwb24gZXZlcnkgY2xvY2sKK3VwZGF0ZSwgdGh1cyBnZW5lcmF0aW5nIGEgMUh6IHNpZ25hbC4KKworVGhlIGludGVycnVwdHMgYXJlIHJlcG9ydGVkIHZpYSAvZGV2L3J0YyAobWFqb3IgMTAsIG1pbm9yIDEzNSwgcmVhZCBvbmx5CitjaGFyYWN0ZXIgZGV2aWNlKSBpbiB0aGUgZm9ybSBvZiBhbiB1bnNpZ25lZCBsb25nLiBUaGUgbG93IGJ5dGUgY29udGFpbnMKK3RoZSB0eXBlIG9mIGludGVycnVwdCAodXBkYXRlLWRvbmUsIGFsYXJtLXJhbmcsIG9yIHBlcmlvZGljKSB0aGF0IHdhcworcmFpc2VkLCBhbmQgdGhlIHJlbWFpbmluZyBieXRlcyBjb250YWluIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBzaW5jZQordGhlIGxhc3QgcmVhZC4gIFN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZSBwc2V1ZG8tZmlsZQorL3Byb2MvZHJpdmVyL3J0YyBpZiB0aGUgL3Byb2MgZmlsZXN5c3RlbSB3YXMgZW5hYmxlZC4gIFRoZSBkcml2ZXIgaGFzCitidWlsdCBpbiBsb2NraW5nIHNvIHRoYXQgb25seSBvbmUgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIGhhdmUgdGhlIC9kZXYvcnRjCitpbnRlcmZhY2Ugb3BlbiBhdCBhIHRpbWUuCisKK0EgdXNlciBwcm9jZXNzIGNhbiBtb25pdG9yIHRoZXNlIGludGVycnVwdHMgYnkgZG9pbmcgYSByZWFkKDIpIG9yIGEKK3NlbGVjdCgyKSBvbiAvZGV2L3J0YyAtLSBlaXRoZXIgd2lsbCBibG9jay9zdG9wIHRoZSB1c2VyIHByb2Nlc3MgdW50aWwKK3RoZSBuZXh0IGludGVycnVwdCBpcyByZWNlaXZlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIHRoaW5ncyBsaWtlCityZWFzb25hYmx5IGhpZ2ggZnJlcXVlbmN5IGRhdGEgYWNxdWlzaXRpb24gd2hlcmUgb25lIGRvZXNuJ3Qgd2FudCB0bworYnVybiB1cCAxMDAlIENQVSBieSBwb2xsaW5nIGdldHRpbWVvZmRheSBldGMuIGV0Yy4KKworQXQgaGlnaCBmcmVxdWVuY2llcywgb3IgdW5kZXIgaGlnaCBsb2FkcywgdGhlIHVzZXIgcHJvY2VzcyBzaG91bGQgY2hlY2sKK3RoZSBudW1iZXIgb2YgaW50ZXJydXB0cyByZWNlaXZlZCBzaW5jZSB0aGUgbGFzdCByZWFkIHRvIGRldGVybWluZSBpZgordGhlcmUgaGFzIGJlZW4gYW55IGludGVycnVwdCAicGlsZXVwIiBzbyB0byBzcGVhay4gSnVzdCBmb3IgcmVmZXJlbmNlLCBhCit0eXBpY2FsIDQ4Ni0zMyBydW5uaW5nIGEgdGlnaHQgcmVhZCBsb29wIG9uIC9kZXYvcnRjIHdpbGwgc3RhcnQgdG8gc3VmZmVyCitvY2Nhc2lvbmFsIGludGVycnVwdCBwaWxldXAgKGkuZS4gPiAxIElSUSBldmVudCBzaW5jZSBsYXN0IHJlYWQpIGZvcgorZnJlcXVlbmNpZXMgYWJvdmUgMTAyNEh6LiBTbyB5b3UgcmVhbGx5IHNob3VsZCBjaGVjayB0aGUgaGlnaCBieXRlcworb2YgdGhlIHZhbHVlIHlvdSByZWFkLCBlc3BlY2lhbGx5IGF0IGZyZXF1ZW5jaWVzIGFib3ZlIHRoYXQgb2YgdGhlCitub3JtYWwgdGltZXIgaW50ZXJydXB0LCB3aGljaCBpcyAxMDBIei4KKworUHJvZ3JhbW1pbmcgYW5kL29yIGVuYWJsaW5nIGludGVycnVwdCBmcmVxdWVuY2llcyBncmVhdGVyIHRoYW4gNjRIeiBpcworb25seSBhbGxvd2VkIGJ5IHJvb3QuIFRoaXMgaXMgcGVyaGFwcyBhIGJpdCBjb25zZXJ2YXRpdmUsIGJ1dCB3ZSBkb24ndCB3YW50CithbiBldmlsIHVzZXIgZ2VuZXJhdGluZyBsb3RzIG9mIElSUXMgb24gYSBzbG93IDM4NnN4LTE2LCB3aGVyZSBpdCBtaWdodCBoYXZlCithIG5lZ2F0aXZlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gIE5vdGUgdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgb25seQorYSBmZXcgbGluZXMgb2YgY29kZSB0byBtaW5pbWl6ZSBhbnkgcG9zc2liaWxpdHkgb2YgdGhpcyBlZmZlY3QuCisKK0Fsc28sIGlmIHRoZSBrZXJuZWwgdGltZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCBhbiBleHRlcm5hbCBzb3VyY2UsIHRoZSAKK2tlcm5lbCB3aWxsIHdyaXRlIHRoZSB0aW1lIGJhY2sgdG8gdGhlIENNT1MgY2xvY2sgZXZlcnkgMTEgbWludXRlcy4gSW4gCit0aGUgcHJvY2VzcyBvZiBkb2luZyB0aGlzLCB0aGUga2VybmVsIGJyaWVmbHkgdHVybnMgb2ZmIFJUQyBwZXJpb2RpYyAKK2ludGVycnVwdHMsIHNvIGJlIGF3YXJlIG9mIHRoaXMgaWYgeW91IGFyZSBkb2luZyBzZXJpb3VzIHdvcmsuIElmIHlvdQorZG9uJ3Qgc3luY2hyb25pemUgdGhlIGtlcm5lbCB0aW1lIHdpdGggYW4gZXh0ZXJuYWwgc291cmNlICh2aWEgbnRwIG9yCit3aGF0ZXZlcikgdGhlbiB0aGUga2VybmVsIHdpbGwga2VlcCBpdHMgaGFuZHMgb2ZmIHRoZSBSVEMsIGFsbG93aW5nIHlvdQorZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZGV2aWNlIGZvciB5b3VyIGFwcGxpY2F0aW9ucy4KKworVGhlIGFsYXJtIGFuZC9vciBpbnRlcnJ1cHQgZnJlcXVlbmN5IGFyZSBwcm9ncmFtbWVkIGludG8gdGhlIFJUQyB2aWEKK3ZhcmlvdXMgaW9jdGwoMikgY2FsbHMgYXMgbGlzdGVkIGluIC4vaW5jbHVkZS9saW51eC9ydGMuaAorUmF0aGVyIHRoYW4gd3JpdGUgNTAgcGFnZXMgZGVzY3JpYmluZyB0aGUgaW9jdGwoKSBhbmQgc28gb24sIGl0IGlzCitwZXJoYXBzIG1vcmUgdXNlZnVsIHRvIGluY2x1ZGUgYSBzbWFsbCB0ZXN0IHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMKK2hvdyB0byB1c2UgdGhlbSwgYW5kIGRlbW9uc3RyYXRlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIGRyaXZlci4gVGhpcyBpcworcHJvYmFibHkgYSBsb3QgbW9yZSB1c2VmdWwgdG8gcGVvcGxlIGludGVyZXN0ZWQgaW4gd3JpdGluZyBhcHBsaWNhdGlvbnMKK3RoYXQgd2lsbCBiZSB1c2luZyB0aGlzIGRyaXZlci4KKworCQkJCQkJUGF1bCBHb3J0bWFrZXIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLSA4PCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKgorICoJUmVhbCBUaW1lIENsb2NrIERyaXZlciBUZXN0L0V4YW1wbGUgUHJvZ3JhbQorICoKKyAqCUNvbXBpbGUgd2l0aDoKKyAqCQlnY2MgLXMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyBydGN0ZXN0LmMgLW8gcnRjdGVzdAorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5NiwgUGF1bCBHb3J0bWFrZXIuCisgKgorICoJUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCisgKglpbmNsdWRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IG1haW4odm9pZCkgeworCitpbnQgaSwgZmQsIHJldHZhbCwgaXJxY291bnQgPSAwOwordW5zaWduZWQgbG9uZyB0bXAsIGRhdGE7CitzdHJ1Y3QgcnRjX3RpbWUgcnRjX3RtOworCitmZCA9IG9wZW4gKCIvZGV2L3J0YyIsIE9fUkRPTkxZKTsKKworaWYgKGZkID09ICAtMSkgeworCXBlcnJvcigiL2Rldi9ydGMiKTsKKwlleGl0KGVycm5vKTsKK30KKworZnByaW50ZihzdGRlcnIsICJcblx0XHRcdFJUQyBEcml2ZXIgVGVzdCBFeGFtcGxlLlxuXG4iKTsKKworLyogVHVybiBvbiB1cGRhdGUgaW50ZXJydXB0cyAob25lIHBlciBzZWNvbmQpICovCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX1VJRV9PTiwgMCk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorCitmcHJpbnRmKHN0ZGVyciwgIkNvdW50aW5nIDUgdXBkYXRlICgxL3NlYykgaW50ZXJydXB0cyBmcm9tIHJlYWRpbmcgL2Rldi9ydGM6Iik7CitmZmx1c2goc3RkZXJyKTsKK2ZvciAoaT0xOyBpPDY7IGkrKykgeworCS8qIFRoaXMgcmVhZCB3aWxsIGJsb2NrICovCisJcmV0dmFsID0gcmVhZChmZCwgJmRhdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoInJlYWQiKTsKKwkJZXhpdChlcnJubyk7CisJfQorCWZwcmludGYoc3RkZXJyLCAiICVkIixpKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlpcnFjb3VudCsrOworfQorCitmcHJpbnRmKHN0ZGVyciwgIlxuQWdhaW4sIGZyb20gdXNpbmcgc2VsZWN0KDIpIG9uIC9kZXYvcnRjOiIpOworZmZsdXNoKHN0ZGVycik7Citmb3IgKGk9MTsgaTw2OyBpKyspIHsKKwlzdHJ1Y3QgdGltZXZhbCB0diA9IHs1LCAwfTsJLyogNSBzZWNvbmQgdGltZW91dCBvbiBzZWxlY3QgKi8KKwlmZF9zZXQgcmVhZGZkczsKKworCUZEX1pFUk8oJnJlYWRmZHMpOworCUZEX1NFVChmZCwgJnJlYWRmZHMpOworCS8qIFRoZSBzZWxlY3Qgd2lsbCB3YWl0IHVudGlsIGFuIFJUQyBpbnRlcnJ1cHQgaGFwcGVucy4gKi8KKwlyZXR2YWwgPSBzZWxlY3QoZmQrMSwgJnJlYWRmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoInNlbGVjdCIpOworCQlleGl0KGVycm5vKTsKKwl9CisJLyogVGhpcyByZWFkIHdvbid0IGJsb2NrIHVubGlrZSB0aGUgc2VsZWN0LWxlc3MgY2FzZSBhYm92ZS4gKi8KKwlyZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXBlcnJvcigicmVhZCIpOworCQlleGl0KGVycm5vKTsKKwl9CisJZnByaW50ZihzdGRlcnIsICIgJWQiLGkpOworCWZmbHVzaChzdGRlcnIpOworCWlycWNvdW50Kys7Cit9CisKKy8qIFR1cm4gb2ZmIHVwZGF0ZSBpbnRlcnJ1cHRzICovCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX1VJRV9PRkYsIDApOworaWYgKHJldHZhbCA9PSAtMSkgeworCXBlcnJvcigiaW9jdGwiKTsKKwlleGl0KGVycm5vKTsKK30KKworLyogUmVhZCB0aGUgUlRDIHRpbWUvZGF0ZSAqLworcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19SRF9USU1FLCAmcnRjX3RtKTsKK2lmIChyZXR2YWwgPT0gLTEpIHsKKwlwZXJyb3IoImlvY3RsIik7CisJZXhpdChlcnJubyk7Cit9CisKK2ZwcmludGYoc3RkZXJyLCAiXG5cbkN1cnJlbnQgUlRDIGRhdGUvdGltZSBpcyAlZC0lZC0lZCwgJTAyZDolMDJkOiUwMmQuXG4iLAorCXJ0Y190bS50bV9tZGF5LCBydGNfdG0udG1fbW9uICsgMSwgcnRjX3RtLnRtX3llYXIgKyAxOTAwLAorCXJ0Y190bS50bV9ob3VyLCBydGNfdG0udG1fbWluLCBydGNfdG0udG1fc2VjKTsKKworLyogU2V0IHRoZSBhbGFybSB0byA1IHNlYyBpbiB0aGUgZnV0dXJlLCBhbmQgY2hlY2sgZm9yIHJvbGxvdmVyICovCitydGNfdG0udG1fc2VjICs9IDU7CitpZiAocnRjX3RtLnRtX3NlYyA+PSA2MCkgeworCXJ0Y190bS50bV9zZWMgJT0gNjA7CisJcnRjX3RtLnRtX21pbisrOworfQoraWYgIChydGNfdG0udG1fbWluID09IDYwKSB7CisJcnRjX3RtLnRtX21pbiA9IDA7CisJcnRjX3RtLnRtX2hvdXIrKzsKK30KK2lmICAocnRjX3RtLnRtX2hvdXIgPT0gMjQpCisJcnRjX3RtLnRtX2hvdXIgPSAwOworCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX0FMTV9TRVQsICZydGNfdG0pOworaWYgKHJldHZhbCA9PSAtMSkgeworCXBlcnJvcigiaW9jdGwiKTsKKwlleGl0KGVycm5vKTsKK30KKworLyogUmVhZCB0aGUgY3VycmVudCBhbGFybSBzZXR0aW5ncyAqLworcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19BTE1fUkVBRCwgJnJ0Y190bSk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorCitmcHJpbnRmKHN0ZGVyciwgIkFsYXJtIHRpbWUgbm93IHNldCB0byAlMDJkOiUwMmQ6JTAyZC5cbiIsCisJcnRjX3RtLnRtX2hvdXIsIHJ0Y190bS50bV9taW4sIHJ0Y190bS50bV9zZWMpOworCisvKiBFbmFibGUgYWxhcm0gaW50ZXJydXB0cyAqLworcmV0dmFsID0gaW9jdGwoZmQsIFJUQ19BSUVfT04sIDApOworaWYgKHJldHZhbCA9PSAtMSkgeworCXBlcnJvcigiaW9jdGwiKTsKKwlleGl0KGVycm5vKTsKK30KKworZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIDUgc2Vjb25kcyBmb3IgYWxhcm0uLi4iKTsKK2ZmbHVzaChzdGRlcnIpOworLyogVGhpcyBibG9ja3MgdW50aWwgdGhlIGFsYXJtIHJpbmcgY2F1c2VzIGFuIGludGVycnVwdCAqLworcmV0dmFsID0gcmVhZChmZCwgJmRhdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJyZWFkIik7CisJZXhpdChlcnJubyk7Cit9CitpcnFjb3VudCsrOworZnByaW50ZihzdGRlcnIsICIgb2theS4gQWxhcm0gcmFuZy5cbiIpOworCisvKiBEaXNhYmxlIGFsYXJtIGludGVycnVwdHMgKi8KK3JldHZhbCA9IGlvY3RsKGZkLCBSVENfQUlFX09GRiwgMCk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorCisvKiBSZWFkIHBlcmlvZGljIElSUSByYXRlICovCityZXR2YWwgPSBpb2N0bChmZCwgUlRDX0lSUVBfUkVBRCwgJnRtcCk7CitpZiAocmV0dmFsID09IC0xKSB7CisJcGVycm9yKCJpb2N0bCIpOworCWV4aXQoZXJybm8pOworfQorZnByaW50ZihzdGRlcnIsICJcblBlcmlvZGljIElSUSByYXRlIHdhcyAlbGRIei5cbiIsIHRtcCk7CisKK2ZwcmludGYoc3RkZXJyLCAiQ291bnRpbmcgMjAgaW50ZXJydXB0cyBhdDoiKTsKK2ZmbHVzaChzdGRlcnIpOworCisvKiBUaGUgZnJlcXVlbmNpZXMgMTI4SHosIDI1Nkh6LCAuLi4gODE5Mkh6IGFyZSBvbmx5IGFsbG93ZWQgZm9yIHJvb3QuICovCitmb3IgKHRtcD0yOyB0bXA8PTY0OyB0bXAqPTIpIHsKKworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfSVJRUF9TRVQsIHRtcCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiXG4lbGRIejpcdCIsIHRtcCk7CisJZmZsdXNoKHN0ZGVycik7CisKKwkvKiBFbmFibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfUElFX09OLCAwKTsKKwlpZiAocmV0dmFsID09IC0xKSB7CisJCXBlcnJvcigiaW9jdGwiKTsKKwkJZXhpdChlcnJubyk7CisJfQorCisJZm9yIChpPTE7IGk8MjE7IGkrKykgeworCQkvKiBUaGlzIGJsb2NrcyAqLworCQlyZXR2YWwgPSByZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJaWYgKHJldHZhbCA9PSAtMSkgeworCQkJcGVycm9yKCJyZWFkIik7CisJCQlleGl0KGVycm5vKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgIiAlZCIsaSk7CisJCWZmbHVzaChzdGRlcnIpOworCQlpcnFjb3VudCsrOworCX0KKworCS8qIERpc2FibGUgcGVyaW9kaWMgaW50ZXJydXB0cyAqLworCXJldHZhbCA9IGlvY3RsKGZkLCBSVENfUElFX09GRiwgMCk7CisJaWYgKHJldHZhbCA9PSAtMSkgeworCQlwZXJyb3IoImlvY3RsIik7CisJCWV4aXQoZXJybm8pOworCX0KK30KKworZnByaW50ZihzdGRlcnIsICJcblxuXHRcdFx0ICoqKiBUZXN0IGNvbXBsZXRlICoqKlxuIik7CitmcHJpbnRmKHN0ZGVyciwgIlxuVHlwaW5nIFwiY2F0IC9wcm9jL2ludGVycnVwdHNcIiB3aWxsIHNob3cgJWQgbW9yZSBldmVudHMgb24gSVJRIDguXG5cbiIsCisJCQkJCQkJCSBpcnFjb3VudCk7CisKK2Nsb3NlKGZkKTsKK3JldHVybiAwOworCit9IC8qIGVuZCBtYWluICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC5DaGFuZ2VMb2cgYi9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC5DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYzM2MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC8zMjcwLkNoYW5nZUxvZwpAQCAtMCwwICsxLDQ0IEBACitDaGFuZ2VMb2cgZm9yIHRoZSBVVFMgR2xvYmFsIDMyNzAtc3VwcG9ydCBwYXRjaAorCitTZXAgMjAwMjoJR2V0IGJvb3R1cCBjb2xvcnMgcmlnaHQgb24gMzI3MCBjb25zb2xlCisJKiBJbiB0dWJ0dHlibGQuYywgc3Vic3RhbnRpYWxseSByZXZpc2UgRVNDIHByb2Nlc3Npbmcgc28gdGhhdAorCSAgRVNDIHNlcXVlbmNlcyAoZXNwZWNpYWxseSBjb2xvcmluZyBvbmVzKSBhbmQgdGhlIHN0cmluZ3MKKwkgIHRoZXkgYWZmZWN0IHdvcmsgYXMgcmlnaHQgYXMgMzI3MCBjYW4gZ2V0IHRoZW0uICBBbHNvLCBzZXQKKwkgIHNjcmVlbiBoZWlnaHQgdG8gb21pdCB0aGUgdHdvIHJvd3MgdXNlZCBmb3IgaW5wdXQgYXJlYSwgaW4KKwkgIHR0eTMyNzBfb3BlbigpIGluIHR1YnR0eS5jLgorCitTZXAgMjAwMjoJRHluYW1pY2FsbHkgZ2V0IDMyNzAgaW5wdXQgYnVmZmVyCisJKiBPdmVyc2l6ZSAzMjcwIHNjcmVlbiB3aWR0aHMgbWF5IGV4Y2VlZCBHRU9NX01BWElOUExFTiBjb2x1bW5zLAorCSAgc28gZ2V0IGlucHV0LWFyZWEgYnVmZmVyIGR5bmFtaWNhbGx5IHdoZW4gc2l6aW5nIHRoZSBkZXZpY2UgaW4KKwkgIHR1Ym1ha2VtaW4oKSBpbiB0dWJhbGwuYyAoaWYgaXQncyB0aGUgY29uc29sZSkgb3IgdHR5MzI3MF9vcGVuKCkKKwkgIGluIHR1YnR0eS5jIChpZiBuZWVkZWQpLiAgQ2hhbmdlIHR1YnAtPnR0eV9pbnB1dCB0byBiZSBhCisJICBwb2ludGVyIHJhdGhlciB0aGFuIGFuIGFycmF5LCBpbiB0dWJpby5oLgorCitTZXAgMjAwMjoJRml4IHR1YmZzIGttYWxsb2MoKXMKKwkqIERvIHJlYWQgYW5kIHdyaXRlIGxlbmd0aHMgY29ycmVjdGx5IGluIGZzMzI3MF9yZWFkKCkKKwkgIGFuZCBmczMyNzBfd3JpdGUoKSwgd2hpbHN0IG5ldmVyIGFza2luZyBrbWFsbG9jKCkKKwkgIGZvciBtb3JlIHRoYW4gMHg4MDAgYnl0ZXMuICBBZmZlY3RzIHR1YmZzLmMgYW5kIHR1YmlvLmguCisKK1NlcCAyMDAyOglSZWNvZ25pemUgMzI3MCBjb250cm9sIHVuaXQgdHlwZSAzMTc0CisJKiBSZWNvZ25pemUgY29udHJvbC11bml0IHR5cGUgMHgzMTc0IGFzIHdlbGwgYXMgMHgzMjc/LgorCSAgVGhlIElCTSAyMDQ3IGRldmljZSBlbXVsYXRlcyBhIDMxNzQgY29udHJvbCB1bml0LgorCSAgTW9kdWxhcml6ZSBjb250cm9sLXVuaXQgcmVjb2duaXRpb24gaW4gdHViYWxsLmMgYnkKKwkgIGFkZGluZyBhbmQgaW52b2tpbmcgbmV3IHR1YjMyNzBfaXNfb3VycygpLgorCitBcHIgMjAwMjoJRml4IDMyNzAgY29uc29sZSByZWJvb3QgbG9vcAorCSogKEJlbGF0ZWQgbG9nIGVudHJ5KSBGaXhlZCByZWJvb3QgbG9vcCBpZiAzMjcwIGNvbnNvbGUsCisJICBpbiB0dWJ0dHkuYzp0dHUzMjcwX2JoKCkuCisKK0ZlYiA2LCAyMDAxOgorCSogVGhpcyBjaGFuZ2Vsb2cgaXMgbmV3CisJKiB0dWIzMjcwIG5vdyBzdXBwb3J0cyAzMjcwIGNvbnNvbGU6CisJCVNwZWNpZnkgeSBmb3IgQ09ORklHXzMyNzAgYW5kIHkgZm9yIENPTkZJR18zMjcwX0NPTlNPTEUuCisJCVN1cHBvcnQgZm9yIDMyMTUgd2lsbCBub3QgYXBwZWFyIGlmIDMyNzAgY29uc29sZSBzdXBwb3J0CisJCWlzIGNob3Nlbi4KKwkJTk9URTogIFRoZSBkZWZhdWx0IGlzIDMyNzAgY29uc29sZSBzdXBwb3J0LCBOT1QgMzIxNS4KKwkqIHRoZSBjb21wb25lbnRzIGFyZSByZW1vZHVsYXJpemVkOiBhZGRlZCBzb3VyY2UgbW9kdWxlcyBhcmUKKwkgIHR1YnR0eWJsZC5jIGFuZCB0dWJ0dHlzY2wuYywgZm9yIHNjcmVlbi1idWlsZGluZyBjb2RlIGFuZAorCSAgc2Nyb2xsLXRpbWVvdXQgY29kZS4KKwkqIHR1YjMyNzAgc291cmNlIGZvciB0aGlzICgyLjQuMCkgdmVyc2lvbiBpcyAjaWZkZWZmZWQgdG8KKwkgIGJ1aWxkIHdpdGggYm90aCAyLjQuMCBhbmQgMi4yLjE2LjIuCisJKiBjb2xvciBzdXBwb3J0IGFuZCBtaW5pbWFsIG90aGVyIEVTQy1zZXF1ZW5jZSBzdXBwb3J0IGlzIGFkZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwLzMyNzAudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwLzMyNzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDQ0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC50eHQKQEAgLTAsMCArMSwyNzQgQEAKK0lCTSAzMjcwIERpc3BsYXkgU3lzdGVtIHN1cHBvcnQKKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgZHJpdmVyIHRoYXQgc3VwcG9ydHMgbG9jYWwgY2hhbm5lbCBhdHRhY2htZW50CitvZiBJQk0gMzI3MCBkZXZpY2VzLiAgSXQgY29uc2lzdHMgb2YgdGhyZWUgc2VjdGlvbnM6CisJKiBJbnRyb2R1Y3Rpb24KKwkqIEluc3RhbGxhdGlvbgorCSogT3BlcmF0aW9uCisKKworSU5UUk9EVUNUSU9OLgorCitUaGlzIHBhcGVyIGRlc2NyaWJlcyBpbnN0YWxsaW5nIGFuZCBvcGVyYXRpbmcgMzI3MCBkZXZpY2VzIHVuZGVyCitMaW51eC8zOTAuICBBIDMyNzAgZGV2aWNlIGlzIGEgYmxvY2stbW9kZSByb3dzLWFuZC1jb2x1bW5zIHRlcm1pbmFsIG9mCit3aGljaCBJJ20gc3VyZSBodW5kcmVkcyBvZiBtaWxsaW9ucyB3ZXJlIHNvbGQgYnkgSUJNIGFuZCBjbG9uZW1ha2VycwordHdlbnR5IGFuZCB0aGlydHkgeWVhcnMgYWdvLgorCitZb3UgbWF5IGhhdmUgMzI3MHMgaW4taG91c2UgYW5kIG5vdCBrbm93IGl0LiAgSWYgeW91J3JlIHVzaW5nIHRoZQorVk0tRVNBIG9wZXJhdGluZyBzeXN0ZW0sIGRlZmluZSBhIDMyNzAgdG8geW91ciB2aXJ0dWFsIG1hY2hpbmUgYnkgdXNpbmcKK3RoZSBjb21tYW5kICJERUYgR1JBRiA8aGV4LWFkZHJlc3M+IiAgVGhpcyBwYXBlciBwcmVzdW1lcyB5b3Ugd2lsbCBiZQorZGVmaW5pbmcgZm91ciAzMjcwcyB3aXRoIHRoZSBDUC9DTVMgY29tbWFuZHMKKworCURFRiBHUkFGIDYyMAorCURFRiBHUkFGIDYyMQorCURFRiBHUkFGIDYyMgorCURFRiBHUkFGIDYyMworCitZb3VyIG5ldHdvcmsgY29ubmVjdGlvbiBmcm9tIFZNLUVTQSBhbGxvd3MgeW91IHRvIHVzZSB4MzI3MCwgdG4zMjcwLCBvcgorYW5vdGhlciAzMjcwIGVtdWxhdG9yLCBzdGFydGVkIGZyb20gYW4geHRlcm0gd2luZG93IG9uIHlvdXIgUEMgb3IKK3dvcmtzdGF0aW9uLiAgV2l0aCB0aGUgREVGIEdSQUYgY29tbWFuZCwgYW4gYXBwbGljYXRpb24gc3VjaCBhcyB4dGVybSwKK2FuZCB0aGlzIExpbnV4LTM5MCAzMjcwIGRyaXZlciwgeW91IGhhdmUgYW5vdGhlciB3YXkgb2YgdGFsa2luZyB0byB5b3VyCitMaW51eCBib3guCisKK1RoaXMgcGFwZXIgY292ZXJzIGluc3RhbGxhdGlvbiBvZiB0aGUgZHJpdmVyIGFuZCBvcGVyYXRpb24gb2YgYQorZGlhbGVkLWluIHgzMjcwLgorCisKK0lOU1RBTExBVElPTi4KKworWW91IGluc3RhbGwgdGhlIGRyaXZlciBieSBpbnN0YWxsaW5nIGEgcGF0Y2gsIGRvaW5nIGEga2VybmVsIGJ1aWxkLCBhbmQKK3J1bm5pbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IChjb25maWczMjcwLnNoLCBpbiB0aGlzIGRpcmVjdG9yeSkuCisKK1dBUk5JTkc6ICBJZiB5b3UgYXJlIHVzaW5nIDMyNzAgY29uc29sZSBzdXBwb3J0LCB5b3UgbXVzdCByZXJ1biB0aGUKK2NvbmZpZ3VyYXRpb24gc2NyaXB0IGV2ZXJ5IHRpbWUgeW91IGNoYW5nZSB0aGUgY29uc29sZSdzIGFkZHJlc3MgKHBlcmhhcHMKK2J5IHVzaW5nIHRoZSBjb25kZXY9IHBhcmFtZXRlciBpbiBzaWxvJ3MgL2Jvb3QvcGFybWZpbGUpLiAgTW9yZSBwcmVjaXNlbHksCit5b3Ugc2hvdWxkIHJlcnVuIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdCBldmVyeSB0aW1lIHlvdXIgc2V0IG9mIDMyNzBzLAoraW5jbHVkaW5nIHRoZSBjb25zb2xlIDMyNzAsIGNoYW5nZXMgc3ViY2hhbm5lbCBpZGVudGlmaWVyIHJlbGF0aXZlIHRvCitvbmUgYW5vdGhlci4gIFJlSVBMIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgcnVubmluZyB0aGUgY29uZmlndXJhdGlvbgorc2NyaXB0IGFuZCB0aGUgcmVzdWx0aW5nIC90bXAvbWtkZXYzMjcwLgorCitJZiB5b3UgaGF2ZSBjaG9zZW4gdG8gbWFrZSB0dWIzMjcwIGEgbW9kdWxlLCB5b3UgYWRkIGEgbGluZSB0bworL2V0Yy9tb2Rwcm9iZS5jb25mLiAgSWYgeW91IGFyZSB3b3JraW5nIG9uIGEgVk0gdmlydHVhbCBtYWNoaW5lLCB5b3UKK2NhbiB1c2UgREVGIEdSQUYgdG8gZGVmaW5lIHZpcnR1YWwgMzI3MCBkZXZpY2VzLgorCitZb3UgbWF5IGdlbmVyYXRlIGJvdGggMzI3MCBhbmQgMzIxNSBjb25zb2xlIHN1cHBvcnQsIG9yIG9uZSBvciB0aGUKK290aGVyLCBvciBuZWl0aGVyLiAgSWYgeW91IGdlbmVyYXRlIGJvdGgsIHRoZSBjb25zb2xlIHR5cGUgdW5kZXIgVk0gaXMKK25vdCBjaGFuZ2VkLiAgVXNlICNDUCBRIFRFUk0gdG8gc2VlIHdoYXQgdGhlIGN1cnJlbnQgY29uc29sZSB0eXBlIGlzLgorVXNlICNDUCBURVJNIENPTk1PREUgMzI3MCB0byBjaGFuZ2UgaXQgdG8gMzI3MC4gIElmIHlvdSBnZW5lcmF0ZSBvbmx5CiszMjcwIGNvbnNvbGUgc3VwcG9ydCwgdGhlbiB0aGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgY29udmVydHMgeW91ciBjb25zb2xlCithdCBib290IHRpbWUgdG8gYSAzMjcwIGlmIGl0IGlzIGEgMzIxNS4KKworSW4gYnJpZWYsIHRoZXNlIGFyZSB0aGUgc3RlcHM6CisJMS4gSW5zdGFsbCB0aGUgdHViMzI3MCBwYXRjaAorCTIuIChJZiBhIG1vZHVsZSkgYWRkIGEgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmYKKwkzLiAoSWYgVk0pIGRlZmluZSBkZXZpY2VzIHdpdGggREVGIEdSQUYKKwk0LiBSZWJvb3QKKwk1LiBDb25maWd1cmUKKworVG8gdGVzdCB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MsIGFzc3VtaW5nIFZNIGFuZCB4MzI3MCwKKwkxLiBCcmluZyB1cCBhbiB4MzI3MCB3aW5kb3cuCisJMi4gVXNlIHRoZSBESUFMIGNvbW1hbmQgaW4gdGhhdCB3aW5kb3cuCisJMy4gWW91IHNob3VsZCBpbW1lZGlhdGVseSBzZWUgYSBMaW51eCBsb2dpbiBzY3JlZW4uCisKK0hlcmUgYXJlIHRoZSBpbnN0YWxsYXRpb24gc3RlcHMgaW4gZGV0YWlsOgorCisJMS4gIFRoZSAzMjcwIGRyaXZlciBpcyBhIHBhcnQgb2YgdGhlIG9mZmljaWFsIExpbnV4IGtlcm5lbAorCXNvdXJjZS4gIEJ1aWxkIGEgdHJlZSB3aXRoIHRoZSBrZXJuZWwgc291cmNlIGFuZCBhbnkgbmVjZXNzYXJ5CisJcGF0Y2hlcy4gIFRoZW4gZG8KKwkJbWFrZSBvbGRjb25maWcKKwkJKElmIHlvdSB3aXNoIHRvIGRpc2FibGUgMzIxNSBjb25zb2xlIHN1cHBvcnQsIGVkaXQKKwkJLmNvbmZpZzsgY2hhbmdlIENPTkZJR19UTjMyMTUncyB2YWx1ZSB0byAibiI7CisJCWFuZCByZXJ1biAibWFrZSBvbGRjb25maWciLikKKwkJbWFrZSBpbWFnZQorCQltYWtlIG1vZHVsZXMKKwkJbWFrZSBtb2R1bGVzX2luc3RhbGwKKworCTIuIChQZXJmb3JtIHRoaXMgc3RlcCBvbmx5IGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdHViMzI3MCBhcyBhCisJbW9kdWxlLikgIEFkZCBhIGxpbmUgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mIHRvIGF1dG9tYXRpY2FsbHkKKwlsb2FkIHRoZSBkcml2ZXIgd2hlbiBpdCdzIG5lZWRlZC4gIFdpdGggdGhpcyBsaW5lIGFkZGVkLAorCXlvdSB3aWxsIHNlZSBsb2dpbiBwcm9tcHRzIGFwcGVhciBvbiB5b3VyIDMyNzBzIGFzIHNvb24gYXMKKwlib290IGlzIGNvbXBsZXRlIChvciB3aXRoIGVtdWxhdGVkIDMyNzBzLCBhcyBzb29uIGFzIHlvdSBkaWFsCisJaW50byB5b3VyIHZtIGd1ZXN0IHVzaW5nIHRoZSBjb21tYW5kICJESUFMIDx2bWd1ZXN0bmFtZT4iKS4KKwlTaW5jZSB0aGUgbGluZS1tb2RlIG1ham9yIG51bWJlciBpcyAyMjcsIHRoZSBsaW5lIHRvIGFkZCB0bworCS9ldGMvbW9kcHJvYmUuY29uZiBzaG91bGQgYmU6CisJCWFsaWFzIGNoYXItbWFqb3ItMjI3IHR1YjMyNzAKKworCTMuIERlZmluZSBncmFwaGljIGRldmljZXMgdG8geW91ciB2bSBndWVzdCBtYWNoaW5lLCBpZiB5b3UKKwloYXZlbid0IGFscmVhZHkuICBEZWZpbmUgdGhlbSBiZWZvcmUgeW91IHJlYm9vdCAocmVpcGwpOgorCQlERUZJTkUgR1JBRiA2MjAKKwkJREVGSU5FIEdSQUYgNjIxCisJCURFRklORSBHUkFGIDYyMgorCQlERUZJTkUgR1JBRiA2MjMKKworCTQuIFJlYm9vdC4gIFRoZSByZWJvb3QgcHJvY2VzcyBzY2FucyBoYXJkd2FyZSBkZXZpY2VzLCBpbmNsdWRpbmcKKwkzMjcwcywgYW5kIHRoaXMgZW5hYmxlcyB0aGUgdHViMzI3MCBkcml2ZXIgb25jZSBsb2FkZWQgdG8gcmVzcG9uZAorCWNvcnJlY3RseSB0byB0aGUgY29uZmlndXJhdGlvbiByZXF1ZXN0cyBvZiB0aGUgbmV4dCBzdGVwLiAgSWYKKwl5b3UgaGF2ZSBjaG9zZW4gMzI3MCBjb25zb2xlIHN1cHBvcnQsIHlvdXIgY29uc29sZSBub3cgYmVoYXZlcworCWFzIGEgMzI3MCwgbm90IGEgMzIxNS4KKworCTUuIFJ1biB0aGUgMzI3MCBjb25maWd1cmF0aW9uIHNjcmlwdCBjb25maWczMjcwLiAgSXQgaXMKKwlkaXN0cmlidXRlZCBpbiB0aGlzIHNhbWUgZGlyZWN0b3J5LCBEb2N1bWVudGF0aW9uL3MzOTAsIGFzCisJY29uZmlnMzI3MC5zaC4JSW5zcGVjdCB0aGUgb3V0cHV0IHNjcmlwdCBpdCBwcm9kdWNlcywKKwkvdG1wL21rZGV2MzI3MCwgYW5kIHRoZW4gcnVuIHRoYXQgc2NyaXB0LiAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUKKwluZWNlc3NhcnkgY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGVzIGFuZCBtYWtlIHRoZSBuZWNlc3NhcnkKKwljaGFuZ2VzIHRvIC9ldGMvaW5pdHRhYi4gIElmIHlvdSBoYXZlIHNlbGVjdGVkIERFVkZTLCB0aGUgZHJpdmVyCisJaXRzZWxmIGNyZWF0ZXMgdGhlIGRldmljZSBmaWxlcywgYW5kIC90bXAvbWtkZXYzMjcwIG9ubHkgY2hhbmdlcworCS9ldGMvaW5pdHRhYi4KKworCVRoZW4gbm90aWZ5IC9zYmluL2luaXQgdGhhdCAvZXRjL2luaXR0YWIgaGFzIGNoYW5nZWQsIGJ5IGlzc3VpbmcKKwl0aGUgdGVsaW5pdCBjb21tYW5kIHdpdGggdGhlIHEgb3BlcmFuZDoKKwkJY2QgRG9jdW1lbnRhdGlvbi9zMzkwCisJCXNoIGNvbmZpZzMyNzAuc2gKKwkJc2ggL3RtcC9ta2RldjMyNzAKKwkJdGVsaW5pdCBxCisKKwlUaGlzIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB5b3VyIGZpcnN0IHRpbWUuCUlmIHlvdXIgMzI3MAorCWNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgYW5kIHlvdSdyZSByZXVzaW5nIGNvbmZpZzMyNzAsIHlvdQorCXNob3VsZCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisJCUNoYW5nZSAzMjcwIGNvbmZpZ3VyYXRpb24KKwkJUmVib290CisJCVJ1biBjb25maWczMjcwIGFuZCAvdG1wL21rZGV2MzI3MAorCQlSZWJvb3QKKworSGVyZSBhcmUgdGhlIHRlc3Rpbmcgc3RlcHMgaW4gZGV0YWlsOgorCisJMS4gQnJpbmcgdXAgYW4geDMyNzAgd2luZG93LCBvciB1c2UgYW4gYWN0dWFsIGhhcmR3YXJlIDMyNzggb3IKKwkzMjc5LCBvciB1c2UgdGhlIDMyNzAgZW11bGF0b3Igb2YgeW91ciBjaG9pY2UuICBZb3Ugd291bGQgYmUKKwlydW5uaW5nIHRoZSBlbXVsYXRvciBvbiB5b3VyIFBDIG9yIHdvcmtzdGF0aW9uLiAgWW91IHdvdWxkIHVzZQorCXRoZSBjb21tYW5kLCBmb3IgZXhhbXBsZSwKKwkJeDMyNzAgdm0tZXNhLWRvbWFpbi1uYW1lICYKKwlpZiB5b3Ugd2FudGVkIGEgMzI3OCBNb2RlbCA0IHdpdGggNDMgcm93cyBvZiA4MCBjb2x1bW5zLCB0aGUKKwlkZWZhdWx0IG1vZGVsIG51bWJlci4gIFRoZSBkcml2ZXIgZG9lcyBub3QgdGFrZSBhZHZhbnRhZ2Ugb2YKKwlleHRlbmRlZCBhdHRyaWJ1dGVzLgorCisJVGhlIHNjcmVlbiB5b3Ugc2hvdWxkIG5vdyBzZWUgY29udGFpbnMgYSBWTSBsb2dvIHdpdGggaW5wdXQKKwlsaW5lcyBuZWFyIHRoZSBib3R0b20uICBVc2UgVEFCIHRvIG1vdmUgdG8gdGhlIGJvdHRvbSBsaW5lLAorCXByb2JhYmx5IGxhYmVsZWQgIkNPTU1BTkQgID09PT4iLgorCisJMi4gVXNlIHRoZSBESUFMIGNvbW1hbmQgaW5zdGVhZCBvZiB0aGUgTE9HSU4gY29tbWFuZCB0byBjb25uZWN0CisJdG8gb25lIG9mIHRoZSB2aXJ0dWFsIDMyNzBzIHlvdSBkZWZpbmVkIHdpdGggdGhlIERFRiBHUkFGCisJY29tbWFuZHM6CisJCWRpYWwgbXktdm0tZ3Vlc3QtbmFtZQorCisJMy4gWW91IHNob3VsZCBpbW1lZGlhdGVseSBzZWUgYSBsb2dpbiBwcm9tcHQgZnJvbSB5b3VyCisJTGludXgtMzkwIG9wZXJhdGluZyBzeXN0ZW0uICBJZiB0aGF0IGRvZXMgbm90IGhhcHBlbiwgeW91IHdvdWxkCisJc2VlIGluc3RlYWQgdGhlIGxpbmUgIkRJQUxFRCBUTyBteS12bS1ndWVzdC1uYW1lICAgMDYyMCIuCisKKwlUbyB0cm91Ymxlc2hvb3Q6ICBkbyB0aGVzZSB0aGluZ3MuCisKKwlBLiBJcyB0aGUgZHJpdmVyIGxvYWRlZD8gIFVzZSB0aGUgbHNtb2QgY29tbWFuZCAobm8gb3BlcmFuZHMpCisJdG8gZmluZCBvdXQuICBQcm9iYWJseSBpdCBpc24ndC4gIFRyeSBsb2FkaW5nIGl0IG1hbnVhbGx5LCB3aXRoCisJdGhlIGNvbW1hbmQgImluc21vZCB0dWIzMjcwIi4gIERvZXMgdGhhdCBjb21tYW5kIGdpdmUgZXJyb3IKKwltZXNzYWdlcz8gIEhhISAgVGhlcmUncyB5b3VyIHByb2JsZW0uCisKKwlCLiBJcyB0aGUgL2V0Yy9pbml0dGFiIGZpbGUgbW9kaWZpZWQgYXMgaW4gaW5zdGFsbGF0aW9uIHN0ZXAgMworCWFib3ZlPyAgVXNlIHRoZSBncmVwIGNvbW1hbmQgdG8gZmluZCBvdXQ7IGZvciBpbnN0YW5jZSwgaXNzdWUKKwkiZ3JlcCAzMjcwIC9ldGMvaW5pdHRhYiIuICBOb3RoaW5nIGZvdW5kPyAgVGhlcmUncyB5b3VyCisJcHJvYmxlbSEKKworCUMuIEFyZSB0aGUgZGV2aWNlIHNwZWNpYWwgZmlsZXMgY3JlYXRlZCwgYXMgaW4gaW5zdGFsbGF0aW9uCisJc3RlcCAyIGFib3ZlPyAgVXNlIHRoZSBscyAtbCBjb21tYW5kIHRvIGZpbmQgb3V0OyBmb3IgaW5zdGFuY2UsCisJaXNzdWUgImxzIC1sIC9kZXYvMzI3MC90dHk2MjAiLiAgVGhlIG91dHB1dCBzaG91bGQgc3RhcnQgd2l0aCB0aGUKKwlsZXR0ZXIgImMiIG1lYW5pbmcgY2hhcmFjdGVyIGRldmljZSBhbmQgc2hvdWxkIGNvbnRhaW4gIjIyNywgMSIKKwlqdXN0IHRvIHRoZSBsZWZ0IG9mIHRoZSBkZXZpY2UgbmFtZS4gIE5vIHN1Y2ggZmlsZT8gIG5vICJjIj8KKwlXcm9uZyBtYWpvciBudW1iZXI/ICBXcm9uZyBtaW5vciBudW1iZXI/ICBUaGVyZSdzIHlvdXIKKwlwcm9ibGVtIQorCisJRC4gRG8geW91IGdldCB0aGUgbWVzc2FnZQorCQkgIkhDUERJQTA0N0UgbXktdm0tZ3Vlc3QtbmFtZSAwNjIwIGRvZXMgbm90IGV4aXN0Ij8KKwlJZiBzbywgeW91IG11c3QgaXNzdWUgdGhlIGNvbW1hbmQgIkRFRiBHUkFGIDYyMCIgZnJvbSB5b3VyIFZNCisJMzIxNSBjb25zb2xlIGFuZCB0aGVuIHJlYm9vdCB0aGUgc3lzdGVtLgorCisKKworT1BFUkFUSU9OLgorCitUaGUgZHJpdmVyIGRlZmluZXMgdGhyZWUgYXJlYXMgb24gdGhlIDMyNzAgc2NyZWVuOiAgdGhlIGxvZyBhcmVhLCB0aGUKK2lucHV0IGFyZWEsIGFuZCB0aGUgc3RhdHVzIGFyZWEuCisKK1RoZSBsb2cgYXJlYSB0YWtlcyB1cCBhbGwgYnV0IHRoZSBib3R0b20gdHdvIGxpbmVzIG9mIHRoZSBzY3JlZW4uICBUaGUKK2RyaXZlciB3cml0ZXMgdGVybWluYWwgb3V0cHV0IHRvIGl0LCBzdGFydGluZyBhdCB0aGUgdG9wIGxpbmUgYW5kIGdvaW5nCitkb3duLiAgV2hlbiBpdCBmaWxscywgdGhlIHN0YXR1cyBhcmVhIGNoYW5nZXMgZnJvbSAiTGludXggUnVubmluZyIgdG8KKyJMaW51eCBNb3JlLi4uIi4gIEFmdGVyIGEgc2Nyb2xsaW5nIHRpbWVvdXQgb2YgKGRlZmF1bHQpIDUgc2VjLCB0aGUKK3NjcmVlbiBjbGVhcnMgYW5kIG1vcmUgb3V0cHV0IGlzIHdyaXR0ZW4sIGZyb20gdGhlIHRvcCBkb3duLgorCitUaGUgaW5wdXQgYXJlYSBleHRlbmRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kLXRvLWxhc3Qgc2NyZWVuCitsaW5lIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhdHVzIGFyZWEuICBZb3UgdHlwZSBjb21tYW5kcyBpbiB0aGlzIGFyZWEKK2FuZCBoaXQgRU5URVIgdG8gZXhlY3V0ZSB0aGVtLgorCitUaGUgc3RhdHVzIGFyZWEgaW5pdGlhbGl6ZXMgdG8gIkxpbnV4IFJ1bm5pbmciIHRvIGdpdmUgeW91IGEgd2FybQorZnV6enkgZmVlbGluZy4gIFdoZW4gdGhlIGxvZyBhcmVhIGZpbGxzIHVwIGFuZCBvdXRwdXQgYXdhaXRzLCBpdAorY2hhbmdlcyB0byAiTGludXggTW9yZS4uLiIuICBBdCB0aGlzIHRpbWUgeW91IGNhbiBkbyBzZXZlcmFsIHRoaW5ncyBvcgorbm90aGluZy4gIElmIHlvdSBkbyBub3RoaW5nLCB0aGUgc2NyZWVuIHdpbGwgY2xlYXIgaW4gKGRlZmF1bHQpIDUgc2VjCithbmQgbW9yZSBvdXRwdXQgd2lsbCBhcHBlYXIuICBZb3UgbWF5IGhpdCBFTlRFUiB3aXRoIG5vdGhpbmcgdHlwZWQgaW4KK3RoZSBpbnB1dCBhcmVhIHRvIHRvZ2dsZSBiZXR3ZWVuICJMaW51eCBNb3JlLi4uIiBhbmQgIkxpbnV4IEhvbGRpbmciLAord2hpY2ggaW5kaWNhdGVzIG5vIHNjcm9sbGluZyB3aWxsIG9jY3VyLiAgKElmIHlvdSBoaXQgRU5URVIgd2l0aCAiTGludXgKK1J1bm5pbmciIGFuZCBub3RoaW5nIHR5cGVkLCB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYSBuZXdsaW5lLikKKworWW91IG1heSBjaGFuZ2UgdGhlIHNjcm9sbGluZyB0aW1lb3V0IHZhbHVlLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgbGluZToKKwllY2hvIHNjcm9sbHRpbWU9NjAgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKK2NoYW5nZXMgdGhlIHNjcm9sbGluZyB0aW1lb3V0IHZhbHVlIHRvIDYwIHNlYy4gIFNldCBzY3JvbGx0aW1lIHRvIDAgaWYKK3lvdSB3aXNoIHRvIHByZXZlbnQgc2Nyb2xsaW5nIGVudGlyZWx5LgorCitPdGhlciB0aGluZ3MgeW91IG1heSBkbyB3aGVuIHRoZSBsb2cgYXJlYSBmaWxscyB1cCBhcmU6ICBoaXQgUEEyIHRvCitjbGVhciB0aGUgbG9nIGFyZWEgYW5kIHdyaXRlIG1vcmUgb3V0cHV0IHRvIGl0LCBvciBoaXQgQ0xFQVIgdG8gY2xlYXIKK3RoZSBsb2cgYXJlYSBhbmQgdGhlIGlucHV0IGFyZWEgYW5kIHdyaXRlIG1vcmUgb3V0cHV0IHRvIHRoZSBsb2cgYXJlYS4KKworU29tZSBvZiB0aGUgUHJvZ3JhbSBGdW5jdGlvbiAoUEYpIGFuZCBQcm9ncmFtIEF0dGVudGlvbiAoUEEpIGtleXMgYXJlCitwcmVhc3NpZ25lZCBzcGVjaWFsIGZ1bmN0aW9ucy4gIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCB5aWVsZCBhbiBhbGFybQord2hlbiBwcmVzc2VkLgorCitQQTEgY2F1c2VzIGEgU0lHSU5UIHRvIHRoZSBjdXJyZW50bHkgcnVubmluZyBhcHBsaWNhdGlvbi4gIFlvdSBtYXkgZG8KK3RoZSBzYW1lIHRoaW5nIGZyb20gdGhlIGlucHV0IGFyZWEsIGJ5IHR5cGluZyAiXkMiIGFuZCBoaXR0aW5nIEVOVEVSLgorCitQQTIgY2F1c2VzIHRoZSBsb2cgYXJlYSB0byBiZSBjbGVhcmVkLiAgSWYgb3V0cHV0IGF3YWl0cywgaXQgaXMgdGhlbgord3JpdHRlbiB0byB0aGUgbG9nIGFyZWEuCisKK1BGMyBjYXVzZXMgYW4gRU9GIHRvIGJlIHJlY2VpdmVkIGFzIGlucHV0IGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFlvdSBtYXkKK2NhdXNlIGFuIEVPRiBhbHNvIGJ5IHR5cGluZyAiXkQiIGFuZCBoaXR0aW5nIEVOVEVSLgorCitObyBQRiBrZXkgaXMgcHJlYXNzaWduZWQgdG8gY2F1c2UgYSBqb2Igc3VzcGVuc2lvbiwgYnV0IHlvdSBtYXkgY2F1c2UgYQoram9iIHN1c3BlbnNpb24gYnkgdHlwaW5nICJeWiIgYW5kIGhpdHRpbmcgRU5URVIuICBZb3UgbWF5IHdpc2ggdG8KK2Fzc2lnbiB0aGlzIGZ1bmN0aW9uIHRvIGEgUEYga2V5LiAgVG8gbWFrZSBQRjcgY2F1c2Ugam9iIHN1c3BlbnNpb24sCitleGVjdXRlIHRoZSBjb21tYW5kOgorCWVjaG8gcGY3PV56ID4gL3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCisKK0lmIHRoZSBpbnB1dCB5b3UgdHlwZSBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgdHdvIGNoYXJhY3RlcnMgIl5uIiwgdGhlCitkcml2ZXIgYXBwZW5kcyBhIG5ld2xpbmUgY2hhcmFjdGVyIGFuZCBzZW5kcyBpdCB0byB0aGUgdHR5IGRyaXZlcjsKK290aGVyd2lzZSB0aGUgZHJpdmVyIHN0cmlwcyB0aGUgIl5uIiBhbmQgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZS4KK1RoZSBJQk0gMzIxNSBkcml2ZXIgYmVoYXZlcyBzaW1pbGFybHkuCisKK1BmMTAgY2F1c2VzIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSB0dWJlJ3MKK2NvbW1hbmQgc3RhY2sgKGRlZmF1bHQgZGVwdGggMjApIGFuZCBkaXNwbGF5ZWQgaW4gdGhlIGlucHV0IGFyZWEuICBZb3UKK21heSBoaXQgUEYxMCBhZ2FpbiBmb3IgdGhlIG5leHQtbW9zdC1yZWNlbnQgY29tbWFuZCwgYW5kIHNvIG9uLiAgQQorY29tbWFuZCBpcyBlbnRlcmVkIGludG8gdGhlIHN0YWNrIG9ubHkgd2hlbiB0aGUgaW5wdXQgYXJlYSBpcyBub3QgbWFkZQoraW52aXNpYmxlIChzdWNoIGFzIGZvciBwYXNzd29yZCBlbnRyeSkgYW5kIGl0IGlzIG5vdCBpZGVudGljYWwgdG8gdGhlCitjdXJyZW50IHRvcCBlbnRyeS4gIFBGMTAgcm90YXRlcyBiYWNrd2FyZCB0aHJvdWdoIHRoZSBjb21tYW5kIHN0YWNrOworUEYxMSByb3RhdGVzIGZvcndhcmQuICBZb3UgbWF5IGFzc2lnbiB0aGUgYmFja3dhcmQgZnVuY3Rpb24gdG8gYW55IFBGCitrZXkgKG9yIFBBIGtleSwgZm9yIHRoYXQgbWF0dGVyKSwgc2F5LCBQQTMsIHdpdGggdGhlIGNvbW1hbmQ6CisJZWNobyAtZSBwYTM9XFwwMzNrID4gL3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCitUaGlzIGFzc2lnbnMgdGhlIHN0cmluZyBFU0MtayB0byBQQTMuICBTaW1pbGFybHksIHRoZSBzdHJpbmcgRVNDLWoKK3BlcmZvcm1zIHRoZSBmb3J3YXJkIGZ1bmN0aW9uLiAgKFJhdGlvbmFsZTogIEluIGJhc2ggd2l0aCB2aS1tb2RlIGxpbmUKK2VkaXRpbmcsIEVTQy1rIGFuZCBFU0MtaiByZXRyaWV2ZSBiYWNrd2FyZCBhbmQgZm9yd2FyZCBoaXN0b3J5LgorU3VnZ2VzdGlvbnMgd2VsY29tZS4pCisKK0lzIGEgc3RhY2sgc2l6ZSBvZiB0d2VudHkgY29tbWFuZHMgbm90IHRvIHlvdXIgbGlraW5nPyAgQ2hhbmdlIGl0IG9uCit0aGUgZmx5LiAgVG8gY2hhbmdlIHRvIHNhdmluZyB0aGUgbGFzdCAxMDAgY29tbWFuZHMsIGV4ZWN1dGUgdGhlCitjb21tYW5kOgorCWVjaG8gcmVjYWxsc2l6ZT0xMDAgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKKworSGF2ZSBhIGNvbW1hbmQgeW91IGlzc3VlIGZyZXF1ZW50bHk/ICBBc3NpZ24gaXQgdG8gYSBQRiBvciBQQSBrZXkhICBVc2UKK3RoZSBjb21tYW5kCisJZWNobyBwZjI0PSJta2RpciBmb29iYXI7IGNkIGZvb2JhciIgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAgCit0byBleGVjdXRlIHRoZSBjb21tYW5kcyBta2RpciBmb29iYXIgYW5kIGNkIGZvb2JhciBpbW1lZGlhdGVseSB3aGVuIHlvdQoraGl0IFBGMjQuICBXYW50IHRvIHNlZSB0aGUgY29tbWFuZCBsaW5lIGZpcnN0LCBiZWZvcmUgeW91IGV4ZWN1dGUgaXQ/CitVc2UgdGhlIC1uIG9wdGlvbiBvZiB0aGUgZWNobyBjb21tYW5kOgorCWVjaG8gLW4gcGYyND0ibWtkaXIgZm9vOyBjZCBmb28iID4gL3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCisKKworCitIYXBweSB0ZXN0aW5nISAgSSB3ZWxjb21lIGFueSBhbmQgYWxsIGNvbW1lbnRzIGFib3V0IHRoaXMgZG9jdW1lbnQsIHRoZQorZHJpdmVyLCBldGMgZXRjLgorCitEaWNrIEhpdHQgPHJiaDAwQHV0c2dsb2JhbC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8gYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTwpAQCAtMCwwICsxLDEwOSBAQAorUy8zOTAgY29tbW9uIEkvTy1MYXllciAtIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFuZCAvcHJvYyBlbnRyaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogY2lvX21zZyA9IHllcyB8IG5vCisgIAorICBEZXRlcm1pbmVzIHdoZXRoZXIgaW5mb3JtYXRpb24gb24gZm91bmQgZGV2aWNlcyBhbmQgc2Vuc2VkIGRldmljZSAKKyAgY2hhcmFjdGVyaXN0aWNzIHNob3VsZCBiZSBzaG93biBkdXJpbmcgc3RhcnR1cCwgaS4gZS4gbWVzc2FnZXMgb2YgdGhlIHR5cGVzIAorICAiRGV0ZWN0ZWQgZGV2aWNlIDAuMC40NzExIG9uIHN1YmNoYW5uZWwgMC4wLjAwNDIiIGFuZCAiU2Vuc2VJRDogRGV2aWNlCisgIDAuMC40NzExIHJlcG9ydHM6IC4uLiIuCisKKyAgRGVmYXVsdCBpcyBvZmYuCisKKworKiBjaW9faWdub3JlID0ge2FsbH0gfAorCSAgICAgICB7PGRldmljZT4gfCA8cmFuZ2Ugb2YgZGV2aWNlcz59IHwKKwkgICAgICAgeyE8ZGV2aWNlPiB8ICE8cmFuZ2Ugb2YgZGV2aWNlcz59CisKKyAgVGhlIGdpdmVuIGRldmljZXMgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21tb24gSS9PLWxheWVyOyBubyBkZXRlY3Rpb24KKyAgYW5kIGRldmljZSBzZW5zaW5nIHdpbGwgYmUgZG9uZSBvbiBhbnkgb2YgdGhvc2UgZGV2aWNlcy4gVGhlIHN1YmNoYW5uZWwgdG8gCisgIHdoaWNoIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gaXMgYXR0YWNoZWQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIG5vIGRldmljZSB3YXMKKyAgYXR0YWNoZWQuCisKKyAgQW4gaWdub3JlZCBkZXZpY2UgY2FuIGJlIHVuLWlnbm9yZWQgbGF0ZXI7IHNlZSB0aGUgIi9wcm9jIGVudHJpZXMiLXNlY3Rpb24gZm9yCisgIGRldGFpbHMuCisKKyAgVGhlIGRldmljZXMgbXVzdCBiZSBnaXZlbiBlaXRoZXIgYXMgYnVzIGlkcyAoMC4wLmFiY2QpIG9yIGFzIGhleGFkZWNpbWFsCisgIGRldmljZSBudW1iZXJzICgweGFiY2Qgb3IgYWJjZCwgZm9yIDIuNCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KKyAgWW91IGNhbiB1c2UgdGhlICdhbGwnIGtleXdvcmQgdG8gaWdub3JlIGFsbCBkZXZpY2VzLgorICBUaGUgJyEnIG9wZXJhdG9yIHdpbGwgY2F1c2UgdGhlIEkvTy1sYXllciB0byBfbm90XyBpZ25vcmUgYSBkZXZpY2UuCisgIFRoZSBvcmRlciBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIG5vdCBpbXBvcnRhbnQuCisKKyAgRm9yIGV4YW1wbGUsIAorCWNpb19pZ25vcmU9MC4wLjAwMjMtMC4wLjAwNDIsMC4wLjQ3MTEKKyAgd2lsbCBpZ25vcmUgYWxsIGRldmljZXMgcmFuZ2luZyBmcm9tIDAuMC4wMDIzIHRvIDAuMC4wMDQyIGFuZCB0aGUgZGV2aWNlCisgIDAuMC40NzExLCBpZiBkZXRlY3RlZC4KKyAgQXMgYW5vdGhlciBleGFtcGxlLAorCWNpb19pZ25vcmU9YWxsLCEwLjAuNDcxMSwhMC4wLmZkMDAtMC4wLmZkMDIKKyAgd2lsbCBpZ25vcmUgYWxsIGRldmljZXMgYnV0IDAuMC40NzExLCAwLjAuZmQwMCwgMC4wLmZkMDEsIDAuMC5mZDAyLgorCisgIEJ5IGRlZmF1bHQsIG5vIGRldmljZXMgYXJlIGlnbm9yZWQuCisKKworL3Byb2MgZW50cmllcworLS0tLS0tLS0tLS0tLQorCisqIC9wcm9jL2Npb19pZ25vcmUKKworICBMaXN0cyB0aGUgcmFuZ2VzIG9mIGRldmljZXMgKGJ5IGJ1cyBpZCkgd2hpY2ggYXJlIGlnbm9yZWQgYnkgY29tbW9uIEkvTy4KKworICBZb3UgY2FuIHVuLWlnbm9yZSBjZXJ0YWluIG9yIGFsbCBkZXZpY2VzIGJ5IHBpcGluZyB0byAvcHJvYy9jaW9faWdub3JlLiAKKyAgImZyZWUgYWxsIiB3aWxsIHVuLWlnbm9yZSBhbGwgaWdub3JlZCBkZXZpY2VzLCAKKyAgImZyZWUgPGRldmljZSByYW5nZT4sIDxkZXZpY2UgcmFuZ2U+LCAuLi4iIHdpbGwgdW4taWdub3JlIHRoZSBzcGVjaWZpZWQKKyAgZGV2aWNlcy4KKworICBGb3IgZXhhbXBsZSwgaWYgZGV2aWNlcyAwLjAuMDAyMyB0byAwLjAuMDA0MiBhbmQgMC4wLjQ3MTEgYXJlIGlnbm9yZWQsCisgIC0gZWNobyBmcmVlIDAuMC4wMDMwLTAuMC4wMDMyID4gL3Byb2MvY2lvX2lnbm9yZQorICAgIHdpbGwgdW4taWdub3JlIGRldmljZXMgMC4wLjAwMzAgdG8gMC4wLjAwMzIgYW5kIHdpbGwgbGVhdmUgZGV2aWNlcyAwLjAuMDAyMworICAgIHRvIDAuMC4wMDJmLCAwLjAuMDAzMyB0byAwLjAuMDA0MiBhbmQgMC4wLjQ3MTEgaWdub3JlZDsKKyAgLSBlY2hvIGZyZWUgMC4wLjAwNDEgPiAvcHJvYy9jaW9faWdub3JlIHdpbGwgZnVydGhlcm1vcmUgdW4taWdub3JlIGRldmljZQorICAgIDAuMC4wMDQxOworICAtIGVjaG8gZnJlZSBhbGwgPiAvcHJvYy9jaW9faWdub3JlIHdpbGwgdW4taWdub3JlIGFsbCByZW1haW5pbmcgaWdub3JlZCAKKyAgICBkZXZpY2VzLgorCisgIFdoZW4gYSBkZXZpY2UgaXMgdW4taWdub3JlZCwgZGV2aWNlIHJlY29nbml0aW9uIGFuZCBzZW5zaW5nIGlzIHBlcmZvcm1lZCBhbmQgCisgIHRoZSBkZXZpY2UgZHJpdmVyIHdpbGwgYmUgbm90aWZpZWQgaWYgcG9zc2libGUsIHNvIHRoZSBkZXZpY2Ugd2lsbCBiZWNvbWUKKyAgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCisKKyAgWW91IGNhbiBhbHNvIGFkZCByYW5nZXMgb2YgZGV2aWNlcyB0byBiZSBpZ25vcmVkIGJ5IHBpcGluZyB0byAKKyAgL3Byb2MvY2lvX2lnbm9yZTsgImFkZCA8ZGV2aWNlIHJhbmdlPiwgPGRldmljZSByYW5nZT4sIC4uLiIgd2lsbCBpZ25vcmUgdGhlCisgIHNwZWNpZmllZCBkZXZpY2VzLgorCisgIE5vdGU6IEFscmVhZHkga25vd24gZGV2aWNlcyBjYW5ub3QgYmUgaWdub3JlZC4KKworICBGb3IgZXhhbXBsZSwgaWYgZGV2aWNlIDAuMC5hYmNkIGlzIGFscmVhZHkga25vd24gYW5kIGFsbCBvdGhlciBkZXZpY2VzCisgIDAuMC5hMDAwLTAuMC5hZmZmIGFyZSBub3Qga25vd24sCisJImVjaG8gYWRkIDAuMC5hMDAwLTAuMC5hY2NjLCAwLjAuYWYwMC0wLjAuYWZmZiA+IC9wcm9jL2Npb19pZ25vcmUiCisgIHdpbGwgYWRkIDAuMC5hMDAwLTAuMC5hYmNjLCAwLjAuYWJjZS0wLjAuYWNjYyBhbmQgMC4wLmFmMDAtMC4wLmFmZmYgdG8gdGhlCisgIGxpc3Qgb2YgaWdub3JlZCBkZXZpY2VzIGFuZCBza2lwIDAuMC5hYmNkLgorCisgIFRoZSBkZXZpY2VzIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIGJ5IGJ1cyBpZCAoMC4wLmFiY2QpIG9yLCBmb3IgMi40IGJhY2t3YXJkCisgIGNvbXBhdGliaWx0eSwgYnkgdGhlIGRldmljZSBudW1iZXIgaW4gaGV4YWRlY2ltYWwgKDB4YWJjZCBvciBhYmNkKS4KKworCisqIC9wcm9jL3MzOTBkYmYvY2lvXyovIChTLzM5MCBkZWJ1ZyBmZWF0dXJlKQorCisgIFNvbWUgdmlld3MgZ2VuZXJhdGVkIGJ5IHRoZSBkZWJ1ZyBmZWF0dXJlIHRvIGhvbGQgdmFyaW91cyBkZWJ1ZyBvdXRwdXRzLgorCisgIC0gL3Byb2MvczM5MGRiZi9jaW9fY3J3L3NwcmludGYKKyAgICBNZXNzYWdlcyBmcm9tIHRoZSBwcm9jZXNzaW5nIG9mIHBlbmRpbmcgY2hhbm5lbCByZXBvcnQgd29yZHMgKG1hY2hpbmUgY2hlY2sKKyAgICBoYW5kbGluZyksIHdoaWNoIHdpbGwgYWxzbyBzaG93IHdoZW4gQ09ORklHX0RFQlVHX0NSVyBpcyBkZWZpbmVkLgorCisgIC0gL3Byb2MvczM5MGRiZi9jaW9fbXNnL3NwcmludGYKKyAgICBWYXJpb3VzIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIGNvbW1vbiBJL08tbGF5ZXI7IGdlbmVyYWxseSwgbWVzc2FnZXMgd2hpY2ggCisgICAgd2lsbCBhbHNvIHNob3cgd2hlbiBDT05GSUdfREVCVUdfSU8gaXMgZGVmaW5lZC4KKworICAtIC9wcm9jL3MzOTBkYmYvY2lvX3RyYWNlL2hleF9hc2NpaQorICAgIExvZ3MgdGhlIGNhbGxpbmcgb2YgZnVuY3Rpb25zIGluIHRoZSBjb21tb24gSS9PLWxheWVyIGFuZCwgaWYgYXBwbGljYWJsZSwgCisgICAgd2hpY2ggc3ViY2hhbm5lbCB0aGV5IHdlcmUgY2FsbGVkIGZvci4KKworICBUaGUgbGV2ZWwgb2YgbG9nZ2luZyBjYW4gYmUgY2hhbmdlZCB0byBiZSBtb3JlIG9yIGxlc3MgdmVyYm9zZSBieSBwaXBpbmcgdG8gCisgIC9wcm9jL3MzOTBkYmYvY2lvXyovbGV2ZWwgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA2OyBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24KKyAgdGhlIFMvMzkwIGRlYnVnIGZlYXR1cmUgKERvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dCkgZm9yIGRldGFpbHMuCisKKyogRm9yIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIHByZXNlbnQgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaW4gMi40IChuYW1lbHksCisgIC9wcm9jL3N1YmNoYW5uZWxzIGFuZCAvcHJvYy9jaHBpZHMpLCBzZWUgZHJpdmVyLW1vZGVsLnR4dC4KKyAgSW5mb3JtYXRpb24gZm9ybWVybHkgaW4gL3Byb2MvaXJxX2NvdW50IGlzIG5vdyBpbiAvcHJvYy9pbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0RBU0QgYi9Eb2N1bWVudGF0aW9uL3MzOTAvREFTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYzZjFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0RBU0QKQEAgLTAsMCArMSw3MyBAQAorREFTRCBkZXZpY2UgZHJpdmVyCisKK1MvMzkwJ3MgZGlzayBkZXZpY2VzIChEQVNEcykgYXJlIG1hbmFnZWQgYnkgTGludXggdmlhIHRoZSBEQVNEIGRldmljZQorZHJpdmVyLiBJdCBpcyB2YWxpZCBmb3IgYWxsIHR5cGVzIG9mIERBU0RzIGFuZCByZXByZXNlbnRzIHRoZW0gdG8KK0xpbnV4IGFzIGJsb2NrIGRldmljZXMsIG5hbWVseSAiZGQiLiBDdXJyZW50bHkgdGhlIERBU0QgZHJpdmVyIHVzZXMgYQorc2luZ2xlIG1ham9yIG51bWJlciAoMjU0KSBhbmQgNCBtaW5vciBudW1iZXJzIHBlciB2b2x1bWUgKDEgZm9yIHRoZQorcGh5c2ljYWwgdm9sdW1lIGFuZCAzIGZvciBwYXJ0aXRpb25zKS4gV2l0aCByZXNwZWN0IHRvIHBhcnRpdGlvbnMgc2VlCitiZWxvdy4gVGh1cyB5b3UgbWF5IGhhdmUgdXAgdG8gNjQgREFTRCBkZXZpY2VzIGluIHlvdXIgc3lzdGVtLgorCitUaGUga2VybmVsIHBhcmFtZXRlciAnZGFzZD1mcm9tLXRvLC4uLicgbWF5IGJlIGlzc3VlZCBhcmJpdHJhcnkgdGltZXMKK2luIHRoZSBrZXJuZWwncyBwYXJhbWV0ZXIgbGluZSBvciBub3QgYXQgYWxsLiBUaGUgJ2Zyb20nIGFuZCAndG8nCitwYXJhbWV0ZXJzIGFyZSB0byBiZSBnaXZlbiBpbiBoZXhhZGVjaW1hbCBub3RhdGlvbiB3aXRob3V0IGEgbGVhZGluZworMHguCitJZiB5b3Ugc3VwcGx5IGtlcm5lbCBwYXJhbWV0ZXJzIHRoZSBkaWZmZXJlbnQgaW5zdGFuY2VzIGFyZSBwcm9jZXNzZWQKK2luIG9yZGVyIG9mIGFwcGVhcmFuY2UgYW5kIGEgbWlub3IgbnVtYmVyIGlzIHJlc2VydmVkIGZvciBhbnkgZGV2aWNlCitjb3ZlcmVkIGJ5IHRoZSBzdXBwbGllZCByYW5nZSB1cCB0byA2NCB2b2x1bWVzLiBBZGRpdGlvbmFsIERBU0RzIGFyZQoraWdub3JlZC4gSWYgeW91IGRvIG5vdCBzdXBwbHkgdGhlICdkYXNkPScga2VybmVsIHBhcmFtZXRlciBhdCBhbGwsIHRoZSAKK0RBU0QgZHJpdmVyIHJlZ2lzdGVycyBhbGwgc3VwcG9ydGVkIERBU0RzIG9mIHlvdXIgc3lzdGVtIHRvIGEgbWlub3IKK251bWJlciBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGhlIHN1YmNoYW5uZWwgbnVtYmVyLgorCitUaGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyBFQ0tELWRldmljZXMgYW5kIHRoZXJlIGFyZSBzdHVicyBmb3IKK3N1cHBvcnQgb2YgdGhlIEZCQSBhbmQgQ0tEIGFyY2hpdGVjdHVyZXMuIEZvciB0aGUgRkJBIGFyY2hpdGVjdHVyZQorb25seSBzb21lIHNtYXJ0IGRhdGEgc3RydWN0dXJlcyBhcmUgbWlzc2luZyB0byBtYWtlIHRoZSBzdXBwb3J0Citjb21wbGV0ZS4gCitXZSBwZXJmb3JtZWQgb3VyIHRlc3Rpbmcgb24gMzM4MCBhbmQgMzM5MCB0eXBlIGRpc2tzIG9mIGRpZmZlcmVudAorc2l6ZXMsIHVuZGVyIFZNIGFuZCBvbiB0aGUgYmFyZSBoYXJkd2FyZSAoTFBBUiksIHVzaW5nIGludGVybmFsIGRpc2tzCitvZiB0aGUgbXVsdGlwcmlzZSBhcyB3ZWxsIGFzIGEgUkFNQUMgdmlydHVhbCBhcnJheS4gRGlza3MgZXhwb3J0ZWQgYnkKK2FuIEVudGVycHJpc2UgU3RvcmFnZSBTZXJ2ZXIgKFNlYXNjYXBlKSBzaG91bGQgd29yayBmaW5lIGFzIHdlbGwuCisKK1dlIGN1cnJlbnRseSBpbXBsZW1lbnQgb25lIHBhcnRpdGlvbiBwZXIgdm9sdW1lLCB3aGljaCBpcyB0aGUgd2hvbGUKK3ZvbHVtZSwgc2tpcHBpbmcgdGhlIGZpcnN0IGJsb2NrcyB1cCB0byB0aGUgdm9sdW1lIGxhYmVsLiBUaGVzZSBhcmUKK3Jlc2VydmVkIGZvciBJUEwgcmVjb3JkcyBhbmQgSUJNJ3Mgdm9sdW1lIGxhYmVsIHRvIGFzc3VyZQorYWNjZXNzaWJpbGl0eSBvZiB0aGUgREFTRCBmcm9tIG90aGVyIE9Tcy4gSW4gYSBsYXRlciBzdGFnZSB3ZSB3aWxsCitwcm92aWRlIHN1cHBvcnQgb2YgcGFydGl0aW9ucywgbWF5YmUgVlRPQyBvcmllbnRlZCBvciB1c2luZyBhIGtpbmQgb2YKK3BhcnRpdGlvbiB0YWJsZSBpbiB0aGUgbGFiZWwgcmVjb3JkLgorCitVU0FHRQorCistTG93LWxldmVsIGZvcm1hdCAoP0NLRCBvbmx5KQorRm9yIHVzaW5nIGFuIEVDS0QtREFTRCBhcyBhIExpbnV4IGhhcmRkaXNrIHlvdSBoYXZlIHRvIGxvdy1sZXZlbAorZm9ybWF0IHRoZSB0cmFja3MgYnkgaXNzdWluZyB0aGUgQkxLREFTREZPUk1BVC1pb2N0bCBvbiB0aGF0CitkZXZpY2UuIFRoaXMgd2lsbCBlcmFzZSBhbnkgZGF0YSBvbiB0aGF0IHZvbHVtZSBpbmNsdWRpbmcgSUJNIHZvbHVtZQorbGFiZWxzLCBWVE9DcyBldGMuIFRoZSBpb2N0bCBtYXkgdGFrZSBhICdzdHJ1Y3QgZm9ybWF0X2RhdGEgKicgb3IKKydOVUxMJyBhcyBhbiBhcmd1bWVudC4gIAordHlwZWRlZiBzdHJ1Y3QgeworCWludCBzdGFydF91bml0OworCWludCBzdG9wX3VuaXQ7CisJaW50IGJsa3NpemU7Cit9IGZvcm1hdF9kYXRhX3Q7CitXaGVuIGEgTlVMTCBhcmd1bWVudCBpcyBwYXNzZWQgdG8gdGhlIEJMS0RBU0RGT1JNQVQgaW9jdGwgdGhlIHdob2xlCitkaXNrIGlzIGZvcm1hdHRlZCB0byBhIGJsb2Nrc2l6ZSBvZiAxMDI0IGJ5dGVzLiBPdGhlcndpc2Ugc3RhcnRfdW5pdAorYW5kIHN0b3BfdW5pdCBhcmUgdGhlIGZpcnN0IGFuZCBsYXN0IHRyYWNrIHRvIGJlIGZvcm1hdHRlZC4gSWYKK3N0b3BfdW5pdCBpcyAtMSBpdCBpbXBsaWVzIHRoYXQgdGhlIERBU0QgaXMgZm9ybWF0dGVkIGZyb20gc3RhcnRfdW5pdAordXAgdG8gdGhlIGxhc3QgdHJhY2suIGJsa3NpemUgY2FuIGJlIGFueSBwb3dlciBvZiB0d28gYmV0d2VlbiA1MTIgYW5kCis0MDk2LiBXZSByZWNvbW1lbmQgbm8gYmxrc2l6ZSBsb3dlciB0aGFuIDEwMjQgYmVjYXVzZSB0aGUgZXh0MmZzIHVzZXMKKzFrQiBibG9ja3MgYW55d2F5IGFuZCB5b3UgZ2FpbiBhcHByb3guIDUwJSBvZiBjYXBhY2l0eSBpbmNyZWFzaW5nIHlvdXIKK2Jsa3NpemUgZnJvbSA1MTIgYnl0ZSB0byAxa0IuCisKKy1NYWtlIGEgZmlsZXN5c3RlbQorVGhlbiB5b3UgY2FuIG1rPz9mcyB0aGUgZmlsZXN5c3RlbSBvZiB5b3VyIGNob2ljZSBvbiB0aGF0IHZvbHVtZSBvcgorcGFydGl0aW9uLiBGb3IgcmVhc29ucyBvZiBzYW5pdHkgeW91IHNob3VsZCBidWlsZCB5b3VyIGZpbGVzeXN0ZW0gb24KK3RoZSBwYXJ0aXRpb24gL2Rldi9kZD8xIGluc3RlYWQgb2YgdGhlIHdob2xlIHZvbHVtZS4gWW91IG9ubHkgbG9zZSAza0IJCitidXQgbWF5IGJlIHN1cmUgdGhhdCB5b3UgY2FuIHJldXNlIHlvdXIgZGF0YSBhZnRlciBpbnRyb2R1Y3Rpb24gb2YgYQorcmVhbCBwYXJ0aXRpb24gdGFibGUuCisKK0JVR1M6CistIFBlcmZvcm1hbmNlIHNvbWV0aW1lcyBpcyByYXRoZXIgbG93IGJlY2F1c2Ugd2UgZG9uJ3QgZnVsbHkgZXhwbG9pdCBjbHVzdGVyaW5nCisKK1RPRE8tTGlzdDoKKy0gQWRkIElCTSdTIERpc2sgbGF5b3V0IHRvIGdlbmhkCistIEVuaGFuY2UgZHJpdmVyIHRvIHVzZSBtb3JlIHRoYW4gb25lIG1ham9yIG51bWJlcgorLSBFbmFibGUgdXNhZ2UgYXMgYSBtb2R1bGUKKy0gU3VwcG9ydCBDYWNoZSBmYXN0IHdyaXRlIGFuZCBEQVNEIGZhc3Qgd3JpdGUgKEVDS0QpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYmZlNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dApAQCAtMCwwICsxLDI1MzYgQEAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorCQkJICAgICAgICAgICAgICAgYnkKKwkJRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorCQlDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAorCitPdmVydmlldyBvZiBEb2N1bWVudDoKKz09PT09PT09PT09PT09PT09PT09PQorVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIGFuIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRvIGRlYnVnIAorTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgaXQgaXNuJ3QgaW50ZW5kZWQgYXMgYSBjb21wbGV0ZSByZWZlcmVuY2UgJiBub3QgYQordHV0b3JpYWwgb24gdGhlIGZ1bmRhbWVudGFscyBvZiBDICYgYXNzZW1ibHksIGl0IGRvc2VuJ3QgZ28gaW50bworMzkwIElPIGluIGFueSBkZXRhaWwuIEl0IGlzIGludGVuZGVkIHRvIGNvbXBsZW1lbnQgdGhlIGRvY3VtZW50cyBpbiB0aGUKK3JlZmVyZW5jZSBzZWN0aW9uIGJlbG93ICYgYW55IG90aGVyIHdvcnRod2hpbGUgcmVmZXJlbmNlcyB5b3UgZ2V0LgorCitJdCBpcyBpbnRlbmRlZCBsaWtlIHRoZSBFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeQordG8gYmUgcHJpbnRlZCBvdXQgJiB1c2VkIGFzIGEgcXVpY2sgY2hlYXQgc2hlZXQgc2VsZiBoZWxwIHN0eWxlIHJlZmVyZW5jZSB3aGVuCitwcm9ibGVtcyBvY2N1ci4KKworQ29udGVudHMKKz09PT09PT09CitSZWdpc3RlciBTZXQKK0FkZHJlc3MgU3BhY2VzIG9uIEludGVsIExpbnV4CitBZGRyZXNzIFNwYWNlcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorVGhlIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIEtlcm5lbCBUYXNrIFN0cnVjdHVyZQorUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzCitDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorRmlndXJpbmcgb3V0IGdjYyBjb21waWxlIGVycm9ycworRGVidWdnaW5nIFRvb2xzCitvYmpkdW1wCitzdHJhY2UKK1BlcmZvcm1hbmNlIERlYnVnZ2luZyAKK0RlYnVnZ2luZyB1bmRlciBWTQorcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldworRGVidWdnaW5nIElPIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgdW5kZXIgVk0KK0dEQiBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitTdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZAorRXhhbWluaW5nIGNvcmUgZHVtcHMKK2xkZAorRGVidWdnaW5nIG1vZHVsZXMKK1RoZSBwcm9jIGZpbGUgc3lzdGVtCitTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KK0R1bXB0b29sICYgTGNyYXNoCitTeXNScQorUmVmZXJlbmNlcworU3BlY2lhbCBUaGFua3MKKworUmVnaXN0ZXIgU2V0Cis9PT09PT09PT09PT0KK1RoZSBjdXJyZW50IGFyY2hpdGVjdHVyZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycy4KKyAKKzE2ICBHZW5lcmFsIHByb3Bvc2UgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCByMC1yMTUgb3IgZ3ByMC1ncHIxNSB1c2VkIGZvciBhcml0aG1ldGljICYgYWRkcmVzc2luZy4gCisKKzE2IENvbnRyb2wgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCAoIGNyMC1jcjE1IGtlcm5lbCB1c2FnZSBvbmx5ICkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsCitpbnRlcnJ1cHQgY29udHJvbCxkZWJ1Z2dpbmcgY29udHJvbCBldGMuCisKKzE2IEFjY2VzcyByZWdpc3RlcnMgKCBhcjAtYXIxNSApIDMyIGJpdCBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitub3QgdXNlZCBieSBub3JtYWwgcHJvZ3JhbXMgYnV0IHBvdGVudGlhbGx5IGNvdWxkIAorYmUgdXNlZCBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4gVGhlaXIgbWFpbiBwdXJwb3NlIGlzIHRoZWlyIDEgdG8gMQorYXNzb2NpYXRpb24gd2l0aCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCBhcmUgdXNlZCBpbgordGhlIGtlcm5lbCBmb3IgY29weWluZyBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBhZGRyZXNzIHNwYWNlcy4KK0FjY2VzcyByZWdpc3RlciAwICggJiBhY2Nlc3MgcmVnaXN0ZXIgMSBvbiB6L0FyY2hpdGVjdHVyZSAoIG5lZWRzIDY0IGJpdCAKK3BvaW50ZXIgKSApIGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwdGhyZWFkIGxpYnJhcnkgYXMgYSBwb2ludGVyIHRvCit0aGUgY3VycmVudCBydW5uaW5nIHRocmVhZHMgcHJpdmF0ZSBhcmVhLgorCisxNiA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChmcDAtZnAxNSApIElFRUUgJiBIRlAgZmxvYXRpbmcgCitwb2ludCBmb3JtYXQgY29tcGxpYW50IG9uIEc1IHVwd2FyZHMgJiBhIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnIChGUEMpIAorNCAgNjQgYml0IHJlZ2lzdGVycyAoZnAwLGZwMixmcDQgJiBmcDYpIEhGUCBvbmx5IG9uIG9sZGVyIG1hY2hpbmVzLgorTm90ZToKK0xpbnV4IChjdXJyZW50bHkpIGFsd2F5cyB1c2VzIElFRUUgJiBlbXVsYXRlcyBHNSBJRUVFIGZvcm1hdCBvbiBvbGRlciBtYWNoaW5lcywKKyggcHJvdmlkZWQgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciB0aGlzICkuCisKKworVGhlIFBTVyBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcmVnaXN0ZXIgb24gdGhlIG1hY2hpbmUgaXQKK2lzIDY0IGJpdCBvbiBzLzM5MCAmIDEyOCBiaXQgb24gei9BcmNoaXRlY3R1cmUgJiBzZXJ2ZXMgdGhlIHJvbGVzIG9mIAorYSBwcm9ncmFtIGNvdW50ZXIgKHBjKSwgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIsbWVtb3J5IHNwYWNlIGRlc2lnbmF0b3IuCitJbiBJQk0gc3RhbmRhcmQgbm90YXRpb24gSSBhbSBjb3VudGluZyBiaXQgMCBhcyB0aGUgTVNCLgorSXQgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIGEgbm9ybWFsIHByb2dyYW0gY291bnRlcgoraW4gdGhhdCB5b3UgY2FuIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uICYgcHJvZ3JhbSBjb3VudGVyIAoraW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uIFRvIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uLAorZS5nLiBzd2l0Y2hpbmcgYWRkcmVzcyB0cmFuc2xhdGlvbiBvZmYgcmVxdWlyZXMgdGhhdCB5b3UKK2hhdmUgYSBsb2dpY2FsPXBoeXNpY2FsIG1hcHBpbmcgZm9yIHRoZSBhZGRyZXNzIHlvdSBhcmUKK2N1cnJlbnRseSBydW5uaW5nIGF0LgorCisgICAgICBCaXQgICAgICAgICAgIFZhbHVlCitzLzM5MCB6L0FyY2hpdGVjdHVyZQorMCAgICAgICAwICAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApIG90aGVyd2lzZSBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMuCisKKzEgICAgICAgMSAgICAgUHJvZ3JhbSBFdmVudCBSZWNvcmRpbmcgMSBQRVIgZW5hYmxlZCwgCisJICAgICAgUEVSIGlzIHVzZWQgdG8gZmFjaWxpdGl0YXRlIGRlYnVnZ2luZyBlLmcuIHNpbmdsZSBzdGVwcGluZy4KKworMi00ICAgIDItNCAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApLiAKKworNSAgICAgICA1ICAgICBEeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gMT1EQVQgb24uCisKKzYgICAgICAgNiAgICAgSW5wdXQvT3V0cHV0IGludGVycnVwdCBNYXNrCisKKzcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKKwkgICAgICBjbG9jayBpbnRlcnJ1cHRzLgorCis4LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKKworMTIgICAgICAxMiAgICAxIG9uIHMvMzkwIDAgb24gei9BcmNoaXRlY3R1cmUKKworMTMgICAgICAxMyAgICBNYWNoaW5lIENoZWNrIE1hc2sgMT1lbmFibGUgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHRzCisKKzE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAorCSAgICAgIHRpbWUgdG8gb3RoZXIgTFBBUlMgdXNlZCBpbiBDUFUgaWRsZSBpbiB0aGUga2VybmVsIHRvIGluY3JlYXNlIG92ZXJhbGwgCisJICAgICAgdXNhZ2Ugb2YgcHJvY2Vzc29yIHJlc291cmNlcy4KKworMTUgICAgICAxNSAgICBQcm9ibGVtIHN0YXRlICggaWYgc2V0IHRvIDEgY2VydGFpbiBpbnN0cnVjdGlvbnMgYXJlIGRpc2FibGVkICkKKwkgICAgICBhbGwgbGludXggdXNlciBwcm9ncmFtcyBydW4gd2l0aCB0aGlzIGJpdCAxIAorCSAgICAgICggdXNlZnVsIGluZm8gZm9yIGRlYnVnZ2luZyB1bmRlciBWTSApLgorCisxNi0xNyAxNi0xNyAgIEFkZHJlc3MgU3BhY2UgQ29udHJvbAorCisJICAgICAgMDAgUHJpbWFyeSBTcGFjZSBNb2RlIHdoZW4gREFUIG9uCisJICAgICAgVGhlIGxpbnV4IGtlcm5lbCBjdXJyZW50bHkgcnVucyBpbiB0aGlzIG1vZGUsIENSMSBpcyBhZmZpbGlhdGVkIHdpdGggCisgICAgICAgICAgICAgIHRoaXMgbW9kZSAmIHBvaW50cyB0byB0aGUgcHJpbWFyeSBzZWdtZW50IHRhYmxlIG9yaWdpbiBldGMuCisKKwkgICAgICAwMSBBY2Nlc3MgcmVnaXN0ZXIgbW9kZSB0aGlzIG1vZGUgaXMgdXNlZCBpbiBmdW5jdGlvbnMgdG8gCisJICAgICAgY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KKworCSAgICAgIDEwIFNlY29uZGFyeSBzcGFjZSBtb2RlIG5vdCB1c2VkIGluIGxpbnV4IGhvd2V2ZXIgQ1I3IHRoZQorCSAgICAgIHJlZ2lzdGVyIGFmZmlsaWF0ZWQgd2l0aCB0aGlzIG1vZGUgaXMgJiB0aGlzICYgbm9ybWFsbHkKKwkgICAgICBDUjEzPUNSNyB0byBhbGxvdyB1cyB0byBjb3B5IGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIHNwYWNlLgorCSAgICAgIFdlIGRvIHRoaXMgYXMgZm9sbG93czoKKwkgICAgICBXZSBzZXQgYXIyIHRvIDAgdG8gZGVzaWduYXRlIGl0cworCSAgICAgIGFmZmlsaWF0ZWQgZ3ByICggZ3ByMiApdG8gcG9pbnQgdG8gcHJpbWFyeT1rZXJuZWwgc3BhY2UuCisJICAgICAgV2Ugc2V0IGFyNCB0byAxIHRvIGRlc2lnbmF0ZSBpdHMKKwkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjQgKSB0byBwb2ludCB0byBzZWNvbmRhcnk9aG9tZT11c2VyIHNwYWNlCisJICAgICAgJiB0aGVuIGVzc2VudGlhbGx5IGRvIGEgbWVtY29weShncHIyLGdwcjQsc2l6ZSkgdG8KKwkgICAgICBjb3B5IGRhdGEgYmV0d2VlbiB0aGUgYWRkcmVzcyBzcGFjZXMsIHRoZSByZWFzb24gd2UgdXNlIGhvbWUgc3BhY2UgZm9yIHRoZQorCSAgICAgIGtlcm5lbCAmIGRvbid0IGtlZXAgc2Vjb25kYXJ5IHNwYWNlIGZyZWUgaXMgdGhhdCBjb2RlIHdpbGwgbm90IHJ1biBpbiAKKwkgICAgICBzZWNvbmRhcnkgc3BhY2UuCisKKwkgICAgICAxMSBIb21lIFNwYWNlIE1vZGUgYWxsIHVzZXIgcHJvZ3JhbXMgcnVuIGluIHRoaXMgbW9kZS4KKwkgICAgICBpdCBpcyBhZmZpbGlhdGVkIHdpdGggQ1IxMy4KKworMTgtMTkgMTgtMTkgICBDb25kaXRpb24gY29kZXMgKENDKQorCisyMCAgICAyMCAgICAgIEZpeGVkIHBvaW50IG92ZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCAKKyAgICAgICAgICAgICAgb2NjdXIgKCBub3JtYWxseSAwICkgCisKKzIxICAgIDIxICAgICAgRGVjaW1hbCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCisgICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCisKKzIyICAgIDIyICAgICAgRXhwb25lbnQgdW5kZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKKyAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKKworMjMgICAgMjMgICAgICBTaWduaWZpY2FuY2UgTWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAorICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQorCisyNC0zMSAyNC0zMCAgIFJlc2VydmVkIE11c3QgYmUgMC4KKworICAgICAgMzEgICAgICBFeHRlbmRlZCBBZGRyZXNzaW5nIE1vZGUKKyAgICAgIDMyICAgICAgQmFzaWMgQWRkcmVzc2luZyBNb2RlCisgICAgICAgICAgICAgIFVzZWQgdG8gc2V0IGFkZHJlc3NpbmcgbW9kZQorCSAgICAgIFBTVyAzMSAgIFBTVyAzMgorICAgICAgICAgICAgICAgIDAgICAgICAgICAwICAgICAgICAyNCBiaXQKKyAgICAgICAgICAgICAgICAwICAgICAgICAgMSAgICAgICAgMzEgYml0CisgICAgICAgICAgICAgICAgMSAgICAgICAgIDEgICAgICAgIDY0IGJpdAorCiszMiAgICAgICAgICAgICAxPTMxIGJpdCBhZGRyZXNzaW5nIG1vZGUgMD0yNCBiaXQgYWRkcmVzc2luZyBtb2RlIChmb3IgYmFja3dhcmQgCisgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5ICksIGxpbnV4IGFsd2F5cyBydW5zIHdpdGggdGhpcyBiaXQgc2V0IHRvIDEKKworMzMtNjQgICAgICAgICAgSW5zdHJ1Y3Rpb24gYWRkcmVzcy4KKyAgICAgIDMzLTYzICAgIFJlc2VydmVkIG11c3QgYmUgMAorICAgICAgNjQtMTI3ICAgQWRkcmVzcworICAgICAgICAgICAgICAgSW4gMjQgYml0cyBtb2RlIGJpdHMgNjQtMTAzPTAgYml0cyAxMDQtMTI3IEFkZHJlc3MgCisgICAgICAgICAgICAgICBJbiAzMSBiaXRzIG1vZGUgYml0cyA2NC05Nj0wIGJpdHMgOTctMTI3IEFkZHJlc3MKKyAgICAgICAgICAgICAgIE5vdGU6IHVubGlrZSAzMSBiaXQgbW9kZSBvbiBzLzM5MCBiaXQgOTYgbXVzdCBiZSB6ZXJvCisJICAgICAgIHdoZW4gbG9hZGluZyB0aGUgYWRkcmVzcyB3aXRoIExQU1dFIG90aGVyd2lzZSBhIAorICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gb2NjdXJzLCBMUFNXIGlzIGZ1bGx5IGJhY2t3YXJkCisgICAgICAgICAgICAgICBjb21wYXRpYmxlLgorIAkgIAorCSAgCitQcmVmaXggUGFnZShzKQorLS0tLS0tLS0tLS0tLS0JICAKK1RoaXMgcGVyIGNwdSBtZW1vcnkgYXJlYSBpcyB0b28gaW50aW1hdGVseSB0aWVkIHRvIHRoZSBwcm9jZXNzb3Igbm90IHRvIG1lbnRpb24uCitJdCBleGlzdHMgYmV0d2VlbiB0aGUgcmVhbCBhZGRyZXNzZXMgMC00MDk2IG9uIHMvMzkwICYgMC04MTkyIHovQXJjaGl0ZWN0dXJlICYgaXMgZXhjaGFuZ2VkIAord2l0aCBhIDEgcGFnZSBvbiBzLzM5MCBvciAyIHBhZ2VzIG9uIHovQXJjaGl0ZWN0dXJlIGluIGFic29sdXRlIHN0b3JhZ2UgYnkgdGhlIHNldCAKK3ByZWZpeCBpbnN0cnVjdGlvbiBpbiBsaW51eCdlcyBzdGFydHVwLiAKK1RoaXMgcGFnZSBpcyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgcHJlZml4IGZvciBlYWNoIHByb2Nlc3NvciBpbiBhbiBTTVAgY29uZmlndXJhdGlvbgorKCBhc3N1bWluZyB0aGUgb3MgZGVzaWduZXIgaXMgc2FuZSBvZiBjb3Vyc2UgOi0pICkuCitCeXRlcyAwLTUxMiAoIDIwMCBoZXggKSBvbiBzLzM5MCAmIDAtNTEyLDQwOTYtNDU0NCw0NjA0LTUxMTkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlIAorYXJlIHVzZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYgZm9yIGhvbGRpbmcgc3VjaCBpbmZvcm1hdGlvbiBhcyBleGNlcHRpb24gaW5kaWNhdGlvbnMgJiAKK2VudHJ5IHBvaW50cyBmb3IgZXhjZXB0aW9ucy4KK0J5dGVzIGFmdGVyIDB4YzAwIGhleCBhcmUgdXNlZCBieSBsaW51eCBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgCisoIHRoZXJlIGlzIGEgZ2FwIG9uIHovQXJjaGl0ZWN1cmUgdG9vIGN1cnJlbnRseSBiZXR3ZWVuIDB4YzAwICYgMTAwMCB3aGljaCBsaW51eCB1c2VzICkuCitUaGUgY2xvc2VzdCB0aGluZyB0byB0aGlzIG9uIHRyYWRpdGlvbmFsIGFyY2hpdGVjdHVyZXMgaXMgdGhlIGludGVycnVwdAordmVjdG9yIHRhYmxlLiBUaGlzIGlzIGEgZ29vZCB0aGluZyAmIGRvZXMgc2ltcGxpZnkgc29tZSBvZiB0aGUga2VybmVsIGNvZGluZworaG93ZXZlciBpdCBtZWFucyB0aGF0IHdlIG5vdyBjYW5ub3QgY2F0Y2ggc3RyYXkgTlVMTCBwb2ludGVycyBpbiB0aGUKK2tlcm5lbCB3aXRob3V0IGhhcmQgY29kZWQgY2hlY2tzLgorCisKKworQWRkcmVzcyBTcGFjZXMgb24gSW50ZWwgTGludXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSB0cmFkaXRpb25hbCBJbnRlbCBMaW51eCBpcyBhcHByb3hpbWF0ZWx5IG1hcHBlZCBhcyBmb2xsb3dzIGZvcmdpdmUKK3RoZSBhc2NpaSBhcnQuCisweEZGRkZGRkZGIDRHQiBIaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogS2VybmVsIFNwYWNlICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKK1VzZXIgU3BhY2UgSGltZW0gKHR5cGljYWxseSAweEMwMDAwMDAwIDNHQiApKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgorCQkJCSAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJCQkJICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogTmV4dCBQcm9jZXNzICogICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgIHRvICAgICAgICogIAorCQkJCQkgICAgKiAgICAgICAgICAgICAgICogICAgPD09ICAgKiAgICAgUnVuICAgICAgKiAgPD09CisJCQkJCSAgICAqICBVc2VyIFByb2dyYW0gKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisJCQkJCSAgICAqICAgRGF0YSBCU1MgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoJIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAJCQkgICAgICAgICAgICAqICAgU2VjdGlvbnMgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisweDAwMDAwMDAwICAgICAgICAgCQkJICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKKworTm93IGl0IGlzIGVhc3kgdG8gc2VlIHRoYXQgb24gSW50ZWwgaXQgaXMgcXVpdGUgZWFzeSB0byByZWNvZ25pc2UgYSBrZXJuZWwgYWRkcmVzcyAKK2FzIGJlaW5nIG9uZSBncmVhdGVyIHRoYW4gdXNlciBzcGFjZSBoaW1lbSAoIGluIHRoaXMgY2FzZSAweEMwMDAwMDAwKS4KKyYgYWRkcmVzc2VzIG9mIGxlc3MgdGhhbiB0aGlzIGFyZSB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHByb2dyYW0gb24gdGhpcworcHJvY2Vzc29yICggaWYgYW4gc21wIGJveCApLgorSWYgdXNpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSAoIFZNICkgYXMgYSBkZWJ1Z2dlciBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8KK2tub3cgd2hpY2ggdXNlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgdGhlIGFkZHJlc3Mgc3BhY2UgeW91IGFyZSBsb29raW5nIGF0Citjb3VsZCBiZSBmcm9tIGFueSBwcm9jZXNzIGluIHRoZSBydW4gcXVldWUuCisKK1RoZSBsaW1pdGF0aW9uIG9mIEludGVscyBhZGRyZXNzaW5nIHRlY2huaXF1ZSBpcyB0aGF0IHRoZSBsaW51eAora2VybmVsIHVzZXMgYSB2ZXJ5IHNpbXBsZSByZWFsIGFkZHJlc3MgdG8gdmlydHVhbCBhZGRyZXNzaW5nIHRlY2huaXF1ZQorb2YgUmVhbCBBZGRyZXNzPVZpcnR1YWwgQWRkcmVzcy1Vc2VyIFNwYWNlIEhpbWVtLgorVGhpcyBtZWFucyB0aGF0IG9uIEludGVsIHRoZSBrZXJuZWwgbGludXggY2FuIHR5cGljYWxseSBvbmx5IGFkZHJlc3MKK0hpbWVtPTB4RkZGRkZGRkYtMHhDMDAwMDAwMD0xR0IgJiB0aGlzIGlzIGFsbCB0aGUgUkFNIHRoZXNlIG1hY2hpbmVzCitjYW4gdHlwaWNhbGx5IHVzZS4KK1RoZXkgY2FuIGxvd2VyIFVzZXIgSGltZW0gdG8gMkdCIG9yIGxvd2VyICYgdGh1cyBiZQorYWJsZSB0byB1c2UgMkdCIG9mIFJBTSBob3dldmVyIHRoaXMgc2hyaW5rcyB0aGUgbWF4aW11bSBzaXplCitvZiBVc2VyIFNwYWNlIGZyb20gM0dCIHRvIDJHQiB0aGV5IGhhdmUgYSBubyB3aW4gbGltaXQgb2YgNEdCIHVubGVzcwordGhleSBnbyB0byA2NCBCaXQuCisKKworT24gMzkwIG91ciBsaW1pdGF0aW9ucyAmIHN0cmVuZ3RocyBtYWtlIHVzIHNsaWdodGx5IGRpZmZlcmVudC4KK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIGFyZSBvbmx5IGFsbG93ZWQgdXNlIDMxIGJpdHMgKDJHQikKK29mIG91ciAzMiBiaXQgYWRkcmVzc2VzLGhvd2V2ZXIsIHdlIHVzZSBlbnRpcmVseSBzZXBhcmF0ZSBhZGRyZXNzIAorc3BhY2VzIGZvciB0aGUgdXNlciAmIGtlcm5lbC4KKworVGhpcyBtZWFucyB3ZSBjYW4gc3VwcG9ydCAyR0Igb2Ygbm9uIEV4dGVuZGVkIFJBTSBvbiBzLzM5MCwgJiBtb3JlCit3aXRoIHRoZSBFeHRlbmRlZCBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGRldmljZSAmIAorY3VycmVudGx5IDRUQiBvZiBwaHlzaWNhbCBtZW1vcnkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlLgorCisKK0FkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPdXIgYWRkcmVzc2luZyBzY2hlbWUgaXMgYXMgZm9sbG93cworCisKK0hpbWVtIDB4N2ZmZmZmZmYgMkdCIG9uIHMvMzkwICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKK2N1cnJlbnRseSAweDNmZmZmZmZmZmZmICgyXjQyKS0xICogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKK29uIHovQXJjaGl0ZWN0dXJlLgkJICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJICAgICAgICAgICAgICAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAKKwkJCSAgICAgICAgICogICAgICAgICAgICAgICAqICAgICAgICAgICogICAgS2VybmVsICAgICogIAorCQkgICAgICAgICAgICAgICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJICAgICAgICAgICAgICAgICAqICAgRGF0YSBCU1MgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisgICAgICAgICAgICAJCQkgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgorMHgwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgorCitUaGlzIGFsc28gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIFBTVyBwcm9ibGVtIHN0YXRlIGJpdAorb3IgdGhlIGFkZHJlc3NpbmcgbW9kZSB0byBkZWNpZGUgd2hldGhlciB3ZSBhcmUgbG9va2luZyBhdAordXNlciBvciBrZXJuZWwgc3BhY2UuCisKK1ZpcnR1YWwgQWRkcmVzc2VzIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSB2aXJ0dWFsIGFkZHJlc3Mgb24gcy8zOTAgaXMgbWFkZSB1cCBvZiAzIHBhcnRzCitUaGUgU1ggKCBzZWdtZW50IGluZGV4LCByb3VnaGx5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBHRCAmIFBNRCBpbiBsaW51eCB0ZXJtaW5vbG9neSApIAorYmVpbmcgYml0cyAxLTExLgorVGhlIFBYICggcGFnZSBpbmRleCwgY29ycmVzcG9uZGluZyB0byB0aGUgcGFnZSB0YWJsZSBlbnRyeSAocHRlKSBpbiBsaW51eCB0ZXJtaW5vbG9neSApCitiZWluZyBiaXRzIDEyLTE5LiAKK1RoZSByZW1haW5pbmcgYml0cyBCWCAodGhlIGJ5dGUgaW5kZXggYXJlIHRoZSBvZmZzZXQgaW4gdGhlIHBhZ2UgKQoraS5lLiBiaXRzIDIwIHRvIDMxLgorCitPbiB6L0FyY2hpdGVjdHVyZSBpbiBsaW51eCB3ZSBjdXJyZW50bHkgbWFrZSB1cCBhbiBhZGRyZXNzIGZyb20gNCBwYXJ0cy4KK1RoZSByZWdpb24gaW5kZXggYml0cyAoUlgpIDAtMzIgd2UgY3VycmVudGx5IHVzZSBiaXRzIDIyLTMyCitUaGUgc2VnbWVudCBpbmRleCAoU1gpIGJlaW5nIGJpdHMgMzMtNDMKK1RoZSBwYWdlIGluZGV4IChQWCkgYmVpbmcgYml0cyAgNDQtNTEKK1RoZSBieXRlIGluZGV4IChCWCkgYmVpbmcgYml0cyAgNTItNjMKKworTm90ZXM6CisxKSBzLzM5MCBoYXMgbm8gUE1EIHNvIHRoZSBQTUQgaXMgcmVhbGx5IHRoZSBQR0QgYWxzby4KK0EgbG90IG9mIHRoaXMgc3R1ZmYgaXMgZGVmaW5lZCBpbiBwZ3RhYmxlLmguCisKKzIpIEFsc28gc2VlaW5nIGFzIHMvMzkwJ3MgcGFnZSBpbmRleGVzIGFyZSBvbmx5IDFrICBpbiBzaXplIAorKGJpdHMgMTItMTkgeCA0IGJ5dGVzIHBlciBwdGUgKSB3ZSB1c2UgMSAoIHBhZ2UgNGsgKQordG8gbWFrZSB0aGUgYmVzdCB1c2Ugb2YgbWVtb3J5IGJ5IHVwZGF0aW5nIDQgc2VnbWVudCBpbmRpY2VzIAorZW50cmllcyBlYWNoIHRpbWUgd2UgbWVzcyB3aXRoIGEgUE1EICYgdXNlIG9mZnNldHMgCiswLDEwMjQsMjA0OCAmIDMwNzIgaW4gdGhpcyBwYWdlIGFzIGZvciBvdXIgc2VnbWVudCBpbmRleGVzLgorT24gei9BcmNoaXRlY3R1cmUgb3VyIHBhZ2UgaW5kZXhlcyBhcmUgbm93IDJrIGluIHNpemUKKyggYml0cyAxMi0xOSB4IDggYnl0ZXMgcGVyIHB0ZSApIHdlIGRvIGEgc2ltaWxhciB0cmljaworYnV0IG9ubHkgbWVzcyB3aXRoIDIgc2VnbWVudCBpbmRpY2VzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGgKK2EgUE1ELgorCiszKSBBcyB6L0FyY2hpdGVjdHVyZSBzdXBwb3J0cyB1cHRvIGEgbWFzc2l2ZSA1LWxldmVsIHBhZ2UgdGFibGUgbG9va3VwIHdlIAorY2FuIG9ubHkgdXNlIDMgY3VycmVudGx5IG9uIExpbnV4ICggYXMgdGhpcyBpcyBhbGwgdGhlIGdlbmVyaWMga2VybmVsCitjdXJyZW50bHkgc3VwcG9ydHMgKSBob3dldmVyIHRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUKK3RoaXMgYWxsb3dzIHVzIHRvIGFjY2VzcyAoIGFjY29yZGluZyB0byBteSBzdW1zICkKKzRUQiBvZiB2aXJ0dWFsIHN0b3JhZ2UgcGVyIHByb2Nlc3MgaS5lLgorNDA5Nio1MTIoUFRFUykqMTAyNChQTURTKSoyMDQ4KFBHRCkgPSA0Mzk4MDQ2NTExMTA0IGJ5dGVzLAorZW5vdWdoIGZvciBhbm90aGVyIDIgb3IgMyBvZiB5ZWFycyBJIHRoaW5rIDotKS4KK3RvIGRvIHRoaXMgd2UgdXNlIGEgcmVnaW9uLXRoaXJkLXRhYmxlIGRlc2lnbmF0aW9uIHR5cGUgaW4KK291ciBhZGRyZXNzIHNwYWNlIGNvbnRyb2wgcmVnaXN0ZXJzLgorIAorCitUaGUgTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgS2VybmVsIFRhc2sgU3RydWN0dXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFYWNoIHByb2Nlc3MvdGhyZWFkIHVuZGVyIExpbnV4IGZvciBTMzkwIGhhcyBpdHMgb3duIGtlcm5lbCB0YXNrX3N0cnVjdAorZGVmaW5lZCBpbiBsaW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKK1RoZSBTMzkwIG9uIGluaXRpYWxpc2F0aW9uICYgcmVzdW1pbmcgb2YgYSBwcm9jZXNzIG9uIGEgY3B1IHNldHMKK3RoZSBfX0xDX0tFUk5FTF9TVEFDSyB2YXJpYWJsZSBpbiB0aGUgc3BhcmUgcHJlZml4IGFyZWEgZm9yIHRoaXMgY3B1CisoIHdoaWNoIHdlIHVzZSBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzKS4KKworVGhlIGtlcm5lbCBzdGFjayBwb2ludGVyIGlzIGludGltYXRlbHkgdGllZCB3aXRoIHRoZSB0YXNrIHN0dWN0dXJlIGZvcgorZWFjaCBwcm9jZXNzb3IgYXMgZm9sbG93cy4KKworICAgICAgICAgICAgICAgICAgICAgIHMvMzkwCisgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICogIDEgcGFnZSBrZXJuZWwgc3RhY2sgKgorCSAgICAqICAgICAgICAoIDRLICkgICAgICAgICoKKyAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgKiAgIDEgcGFnZSB0YXNrX3N0cnVjdCAqICAgICAgICAKKyAgICAgICAgICAgICogICAgICAgICggNEsgKSAgICAgICAgKgorOEsgYWxpZ25lZCAgKioqKioqKioqKioqKioqKioqKioqKioqIAorCisgICAgICAgICAgICAgICAgIHovQXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICogIDIgcGFnZSBrZXJuZWwgc3RhY2sgKgorCSAgICAqICAgICAgICAoIDhLICkgICAgICAgICoKKyAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgKiAgMiBwYWdlIHRhc2tfc3RydWN0ICAqICAgICAgICAKKyAgICAgICAgICAgICogICAgICAgICggOEsgKSAgICAgICAgKgorMTZLIGFsaWduZWQgKioqKioqKioqKioqKioqKioqKioqKioqIAorCitXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZGljYXRlIGFueSByZWdpc3RlciBvciBnbG9iYWwgdmFyaWFibGUKK3RvIHBvaW50IHRvIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2VzcyAmIGNhbiByZXRyaWV2ZSBpdCB3aXRoIHRoZSBmb2xsb3dpbmcKK3Zlcnkgc2ltcGxlIGNvbnN0cnVjdCBmb3Igcy8zOTAgJiBvbmUgdmVyeSBzaW1pbGFyIGZvciB6L0FyY2hpdGVjdHVyZS4KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBnZXRfY3VycmVudCh2b2lkKQoreworICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQ7CisgICAgICAgIF9fYXNtX18oImxoaSAgICUwLC04MTkyXG5cdCIKKyAgICAgICAgICAgICAgICAibnIgICAgJTAsMTUiCisgICAgICAgICAgICAgICAgOiAiPXIiIChjdXJyZW50KSApOworICAgICAgICByZXR1cm4gY3VycmVudDsKK30KKworaS5lLiBqdXN0IGFuZGluZyB0aGUgY3VycmVudCBrZXJuZWwgc3RhY2sgcG9pbnRlciB3aXRoIHRoZSBtYXNrIC04MTkyLgorVGhhbmtmdWxseSBiZWNhdXNlIExpbnV4IGRvc2VuJ3QgaGF2ZSBzdXBwb3J0IGZvciBuZXN0ZWQgSU8gaW50ZXJydXB0cworJiBvdXIgZGV2aWNlcyBoYXZlIGxhcmdlIGJ1ZmZlcnMgY2FuIHN1cnZpdmUgaW50ZXJydXB0cyBiZWluZyBzaHV0IGZvciAKK3Nob3J0IGFtb3VudHMgb2YgdGltZSB3ZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgc3RhY2sgZm9yIGludGVycnVwdHMuCisKKworCisKK1JlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitPdmVydmlldzoKKy0tLS0tLS0tLQorVGhpcyBpcyB0aGUgY29kZSB0aGF0IGdjYyBwcm9kdWNlcyBhdCB0aGUgdG9wICYgdGhlIGJvdHRvbSBvZgorZWFjaCBmdW5jdGlvbiwgaXQgdXN1YWxseSBpcyBmYWlybHkgY29uc2lzdGVudCAmIHNpbWlsYXIgZnJvbSAKK2Z1bmN0aW9uIHRvIGZ1bmN0aW9uICYgaWYgeW91IGtub3cgaXRzIGxheW91dCB5b3UgY2FuIHByb2JhbGJ5CittYWtlIHNvbWUgaGVhZHdheSBpbiBmaW5kaW5nIHRoZSB1bHRpbWF0ZSBjYXVzZSBvZiBhIHByb2JsZW0KK2FmdGVyIGEgY3Jhc2ggd2l0aG91dCBhIHNvdXJjZSBsZXZlbCBkZWJ1Z2dlci4KKworTm90ZTogVG8gZm9sbG93IHN0YWNrZnJhbWVzIHJlcXVpcmVzIGEga25vd2xlZGdlIG9mIEMgb3IgUGFzY2FsICYKK2xpbWl0ZWQga25vd2xlZGdlIG9mIG9uZSBhc3NlbWJseSBsYW5ndWFnZS4KKworSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKK3MvMzkwICYgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0cyBhcyB0aGUgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0IGRpZG4ndCBoYXZlCit0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGlua2FnZSBmb3JtYXRzLgorCitHbG9zc2FyeToKKy0tLS0tLS0tLQorYWxsb2NhOgorVGhpcyBpcyBhIGJ1aWx0IGluIGNvbXBpbGVyIGZ1bmN0aW9uIGZvciBydW50aW1lIGFsbG9jYXRpb24KK29mIGV4dHJhIHNwYWNlIG9uIHRoZSBjYWxsZXJzIHN0YWNrIHdoaWNoIGlzIG9idmlvdXNseSBmcmVlZAordXAgb24gZnVuY3Rpb24gZXhpdCAoIGUuZy4gdGhlIGNhbGxlciBtYXkgY2hvb3NlIHRvIGFsbG9jYXRlIG5vdGhpbmcKK29mIGEgYnVmZmVyIG9mIDRrIGlmIHJlcXVpcmVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZXMgKSwgaXQgZ2VuZXJhdGVzIAordmVyeSBlZmZpY2llbnQgY29kZSAoIGEgZmV3IGN5Y2xlcyAgKSB3aGVuIGNvbXBhcmVkIHRvIGFsdGVybmF0aXZlcyAKK2xpa2UgbWFsbG9jLgorCithdXRvbWF0aWNzOiBUaGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBzdGFjaywKK2kuZSB0aGV5IGFyZW4ndCBpbiByZWdpc3RlcnMgJiB0aGV5IGFyZW4ndCBzdGF0aWMuCisKK2JhY2stY2hhaW46CitUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgc3RhY2sgcG9pbnRlciBiZWZvcmUgZW50ZXJpbmcgYQorZnJhbWVkIGZ1bmN0aW9ucyAoIHNlZSBmcmFtZWxlc3MgZnVuY3Rpb24gKSBwcm9sb2d1ZSBnb3QgYnkgCitkZWZlcmVuY2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyLAorIGkuZS4gZ290IGJ5IGFjY2Vzc2luZyB0aGUgMzIgYml0IHZhbHVlIGF0IHRoZSBzdGFjayBwb2ludGVycworY3VycmVudCBsb2NhdGlvbi4KKworYmFzZS1wb2ludGVyOgorVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJhY2sgb2YgdGhlIGxpdGVyYWwgcG9vbCB3aGljaAoraXMgYW4gYXJlYSBqdXN0IGJlaGluZCBlYWNoIHByb2NlZHVyZSB1c2VkIHRvIHN0b3JlIGNvbnN0YW50cworaW4gZWFjaCBmdW5jdGlvbi4KKworY2FsbC1jbG9iYmVyZWQ6IFRoZSBjYWxsZXIgcHJvYmFibHkgbmVlZHMgdG8gc2F2ZSB0aGVzZSByZWdpc3RlcnMgaWYgdGhlcmUgCitpcyBzb21ldGhpbmcgb2YgdmFsdWUgaW4gdGhlbSwgb24gdGhlIHN0YWNrIG9yIGVsc2V3aGVyZSBiZWZvcmUgbWFraW5nIGEgCitjYWxsIHRvIGFub3RoZXIgcHJvY2VkdXJlIHNvIHRoYXQgaXQgY2FuIHJlc3RvcmUgaXQgbGF0ZXIuCisKK2VwaWxvZ3VlOgorVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4KKworZnJhbWVsZXNzLWZ1bmN0aW9uCitBIGZyYW1lbGVzcyBmdW5jdGlvbiBpbiBMaW51eCBmb3IgczM5MCAmIHovQXJjaGl0ZWN0dXJlIGlzIG9uZSB3aGljaCBkb2Vzbid0IAorbmVlZCBtb3JlIHRoYW4gdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSAoIDk2IGJ5dGVzIG9uIHMvMzkwLCAxNjAgb24gei9BcmNoaXRlY3R1cmUgKQorZ2l2ZW4gdG8gaXQgYnkgdGhlIGNhbGxlci4KK0EgZnJhbWVsZXNzIGZ1bmN0aW9uIG5ldmVyOgorMSkgU2V0cyB1cCBhIGJhY2sgY2hhaW4uCisyKSBDYWxscyBhbGxvY2EuCiszKSBDYWxscyBvdGhlciBub3JtYWwgZnVuY3Rpb25zCis0KSBIYXMgYXV0b21hdGljcy4KKworR09ULXBvaW50ZXI6CitUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsLW9mZnNldC10YWJsZSBpbiBFTEYKKyggRXhlY3V0YWJsZSBMaW5rYWJsZSBGb3JtYXQsIExpbnV4J2VzIG1vc3QgY29tbW9uIGV4ZWN1dGFibGUgZm9ybWF0ICksCithbGwgZ2xvYmFscyAmIHNoYXJlZCBsaWJyYXJ5IG9iamVjdHMgYXJlIGZvdW5kIHVzaW5nIHRoaXMgcG9pbnRlci4KKworbGF6eS1iaW5kaW5nCitFTEYgc2hhcmVkIGxpYnJhcmllcyBhcmUgdHlwaWNhbGx5IG9ubHkgbG9hZGVkIHdoZW4gcm91dGluZXMgaW4gdGhlIHNoYXJlZAorbGlicmFyeSBhcmUgYWN0dWFsbHkgZmlyc3QgY2FsbGVkIGF0IHJ1bnRpbWUuIFRoaXMgaXMgbGF6eSBiaW5kaW5nLgorCitwcm9jZWR1cmUtbGlua2FnZS10YWJsZQorVGhpcyBpcyBhIHRhYmxlIGZvdW5kIGZyb20gdGhlIEdPVCB3aGljaCBjb250YWlucyBwb2ludGVycyB0byByb3V0aW5lcworaW4gb3RoZXIgc2hhcmVkIGxpYnJhcmllcyB3aGljaCBjYW4ndCBiZSBjYWxsZWQgdG8gYnkgZWFzaWVyIG1lYW5zLgorCitwcm9sb2d1ZToKK1RoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgdG8gc2V0IHVwIHRoZSBzdGFjayBmcmFtZS4KKworb3V0Z29pbmctYXJnczoKK1RoaXMgaXMgZXh0cmEgYXJlYSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlmIHRoZQorcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSdzIGNhbm5vdCBhbGwgYmUgcHV0IGluIHJlZ2lzdGVycywgdGhlIHNhbWUKK2FyZWEgY2FuIGJlIHJldXNlZCBieSBlYWNoIGZ1bmN0aW9uIHRoZSBjYWxsZXIgY2FsbHMuCisKK3JvdXRpbmUtZGVzY3JpcHRvcjoKK0EgQ09GRiAgZXhlY3V0YWJsZSBmb3JtYXQgYmFzZWQgY29uY2VwdCBvZiBhIHByb2NlZHVyZSByZWZlcmVuY2UgCithY3R1YWxseSBiZWluZyA4IGJ5dGVzIG9yIG1vcmUgYXMgb3Bwb3NlZCB0byBhIHNpbXBsZSBwb2ludGVyIHRvIHRoZSByb3V0aW5lLgorVGhpcyBpcyB0eXBpY2FsbHkgZGVmaW5lZCBhcyBmb2xsb3dzCitSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDA9UG9pbnRlciB0byBGdW5jdGlvbgorUm91dGluZSBEZXNjcmlwdG9yIG9mZnNldCA0PVBvaW50ZXIgdG8gVGFibGUgb2YgQ29udGVudHMKK1RoZSB0YWJsZSBvZiBjb250ZW50cy9UT0MgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGEgR09UIHBvaW50ZXIuCismIGl0IG1lYW5zIHRoYXQgc2hhcmVkIGxpYnJhcmllcyBldGMuIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsCitlbnZpcm9ubWVudHMgZWFjaCB3aXRoIHRoZWlyIG93biBUT0MuCisKKyAKK3N0YXRpYy1jaGFpbjogVGhpcyBpcyB1c2VkIGluIG5lc3RlZCBmdW5jdGlvbnMgYSBjb25jZXB0IGFkb3B0ZWQgZnJvbSBwYXNjYWwgCitieSBnY2Mgbm90IHVzZWQgaW4gYW5zaSBDIG9yIEMrKyAoIGFsdGhvdWdoIHF1aXRlIHVzZWZ1bCApLCBiYXNpY2FsbHkgaXQKK2lzIGEgcG9pbnRlciB1c2VkIHRvIHJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZXMgb2YgZW5jbG9zaW5nIGZ1bmN0aW9ucy4KK1lvdSBtaWdodCBjb21lIGFjcm9zcyB0aGlzIHN0dWZmIG9uY2Ugb3IgdHdpY2UgaW4geW91ciBsaWZldGltZS4KKworZS5nLgorVGhlIGZ1bmN0aW9uIGJlbG93IHNob3VsZCByZXR1cm4gMTEgdGhvdWdoIGdjYyBtYXkgZ2V0IHVwc2V0ICYgdG9zcyB3YXJuaW5ncyAKK2Fib3V0IHVudXNlZCB2YXJpYWJsZXMuCitpbnQgRnVuY3Rpb25BKGludCBhKQoreworCWludCBiOworCUZ1bmN0aW9uQyhpbnQgYykKKwl7CisJCWI9YysxOworCX0KKwlGdW5jdGlvbkMoMTApOworCXJldHVybihiKTsKK30KKworCitzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyIHVzYWdlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CityMCAgICAgICB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKK3IxCSB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKK3IyICAgICAgIGFyZ3VtZW50IDAgLyByZXR1cm4gdmFsdWUgMCAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjMgICAgICAgYXJndW1lbnQgMSAvIHJldHVybiB2YWx1ZSAxIChpZiBsb25nIGxvbmcpIGNhbGwtY2xvYmJlcmVkCityNCAgICAgICBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKK3I1ICAgICAgIGFyZ3VtZW50IDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjYJIGFyZ3VtZW50IDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjcgICAgICAgcG9pbnRlci10byBhcmd1bWVudHMgNSB0byAuLi4gICAgICAgICAgICAgIHNhdmVkICAgICAgCityOCAgICAgICB0aGlzICYgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKK3I5ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjEwICAgICAgc3RhdGljLWNoYWluICggaWYgbmVzdGVkIGZ1bmN0aW9uICkgICAgICAgIHNhdmVkCityMTEgICAgICBmcmFtZS1wb2ludGVyICggaWYgZnVuY3Rpb24gdXNlZCBhbGxvY2EgKSAgc2F2ZWQKK3IxMiAgICAgIGdvdC1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjEzICAgICAgYmFzZS1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCityMTQgICAgICByZXR1cm4tYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKK3IxNSAgICAgIHN0YWNrLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorCitmMCAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlICggZmxvYXQvZG91YmxlICkgY2FsbC1jbG9iYmVyZWQKK2YyICAgICAgIGFyZ3VtZW50IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorZjQgICAgICAgei9BcmNoaXRlY3R1cmUgYXJndW1lbnQgMiAgICAgICAgICAgICAgICAgIHNhdmVkCitmNiAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgc2F2ZWQKK1RoZSByZW1haW5pbmcgZmxvYXRpbmcgcG9pbnRzCitmMSxmMyxmNSBmNy1mMTUgYXJlIGNhbGwtY2xvYmJlcmVkLgorCitOb3RlczoKKy0tLS0tLQorMSkgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCByZWdpc3RlcnMgd2hpY2ggYXJlIHVzZWQKK2J5IHRoZSBjYWxsZWUgYXJlIHNhdmVkLCBlLmcuIHRoZSBjb21waWxlciBpcyBwZXJmZWN0bHkKK2NhcGlibGUgb2YgdXNpbmcgcjExIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGEgZnJhbWUgYQorZnJhbWUgcG9pbnRlciBpZiBhIGZyYW1lIHBvaW50ZXIgaXMgbm90IG5lZWRlZC4KKzIpIEluIGZ1bmN0aW9ucyB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cyBlLmcuIHByaW50ZiB0aGUgY2FsbGluZyBwcm9jZWR1cmUgCitpcyBpZGVudGljYWwgdG8gb25lIHdpdGhvdXQgdmFyaWFibGUgYXJndW1lbnRzICYgdGhlIHNhbWUgbnVtYmVyIG9mIAorcGFyYW1ldGVycy4gSG93ZXZlciwgdGhlIHByb2xvZ3VlIG9mIHRoaXMgZnVuY3Rpb24gaXMgc29tZXdoYXQgbW9yZQoraGFpcnkgb3dpbmcgdG8gaXQgaGF2aW5nIHRvIG1vdmUgdGhlc2UgcGFyYW1ldGVycyB0byB0aGUgc3RhY2sgdG8KK2dldCB2YV9zdGFydCwgdmFfYXJnICYgdmFfZW5kIHRvIHdvcmsuCiszKSBBY2Nlc3MgcmVnaXN0ZXJzIGFyZSBjdXJyZW50bHkgdW51c2VkIGJ5IGdjYyBidXQgYXJlIHVzZWQgaW4KK3RoZSBrZXJuZWwuIFBvc3NpYmlsaXRpZXMgZXhpc3QgdG8gdXNlIHRoZW0gYXQgdGhlIG1vbWVudCBmb3IKK3RlbXBvcmFyeSBzdG9yYWdlIGJ1dCBpdCBpc24ndCByZWNvbW1lbmRlZC4KKzQpIE9ubHkgNCBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvcgorcGFyYW1ldGVyIHBhc3NpbmcgYXMgb2xkZXIgbWFjaGluZXMgc3VjaCBhcyBHMyBvbmx5IGhhdmUgb25seSA0CismIGl0IGtlZXBzIHRoZSBzdGFjayBmcmFtZSBjb21wYXRpYmxlIHdpdGggb3RoZXIgY29tcGlsZXJzLgorSG93ZXZlciB3aXRoIElFRUUgZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIHVuZGVyIGxpbnV4IG9uIHRoZQorb2xkZXIgbWFjaGluZXMgeW91IGFyZSBmcmVlIHRvIHVzZSB0aGUgb3RoZXIgMTIuCis1KSBBIGxvbmcgbG9uZyBvciBkb3VibGUgcGFyYW1ldGVyIGNhbm5vdCBiZSBoYXZlIHRoZSAKK2ZpcnN0IDQgYnl0ZXMgaW4gYSByZWdpc3RlciAmIHRoZSBzZWNvbmQgZm91ciBieXRlcyBpbiB0aGUgCitvdXRnb2luZyBhcmdzIGFyZWEuIEl0IG11c3QgYmUgcHVyZWx5IGluIHRoZSBvdXRnb2luZyBhcmdzCithcmVhIGlmIGNyb3NzaW5nIHRoaXMgYm91bmRhcnkuCis2KSBGbG9hdGluZyBwb2ludCBwYXJhbWV0ZXJzIGFyZSBtaXhlZCB3aXRoIG91dGdvaW5nIGFyZ3MKK29uIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgaW4gdGhlIG9yZGVyIHRoZSBhcmUgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMuCis3KSBGbG9hdGluZyBwb2ludCBhcmd1bWVudHMgMiAmIDMgYXJlIHNhdmVkIGluIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgZm9yIAorei9BcmNoaXRlY3R1cmUKKworCitTdGFjayBGcmFtZSBMYXlvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLQorcy8zOTAgICAgIHovQXJjaGl0ZWN0dXJlCiswICAgICAgICAgMCAgICAgICAgICAgICBiYWNrIGNoYWluICggYSAwIGhlcmUgc2lnbmlmaWVzIGVuZCBvZiBiYWNrIGNoYWluICkKKzQgICAgICAgICA4ICAgICAgICAgICAgIGVvcyAoIGVuZCBvZiBzdGFjaywgbm90IHVzZWQgb24gTGludXggZm9yIFMzOTAgdXNlZCBpbiBvdGhlciBsaW5rYWdlIGZvcm1hdHMgKQorOCAgICAgICAgIDE2ICAgICAgICAgICAgZ2x1ZSB1c2VkIGluIG90aGVyIHMvMzkwIGxpbmthZ2UgZm9ybWF0cyBmb3Igc2F2ZWQgcm91dGluZSBkZXNjcmlwdG9ycyBldGMuCisxMiAgICAgICAgMjQgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KKzE2ICAgICAgICAzMiAgICAgICAgICAgIHNjcmF0Y2ggYXJlYQorMjAgICAgICAgIDQwICAgICAgICAgICAgc2NyYXRjaCBhcmVhCisyNCAgICAgICAgNDggICAgICAgICAgICBzYXZlZCByNiBvZiBjYWxsZXIgZnVuY3Rpb24KKzI4ICAgICAgICA1NiAgICAgICAgICAgIHNhdmVkIHI3IG9mIGNhbGxlciBmdW5jdGlvbgorMzIgICAgICAgIDY0ICAgICAgICAgICAgc2F2ZWQgcjggb2YgY2FsbGVyIGZ1bmN0aW9uCiszNiAgICAgICAgNzIgICAgICAgICAgICBzYXZlZCByOSBvZiBjYWxsZXIgZnVuY3Rpb24KKzQwICAgICAgICA4MCAgICAgICAgICAgIHNhdmVkIHIxMCBvZiBjYWxsZXIgZnVuY3Rpb24KKzQ0ICAgICAgICA4OCAgICAgICAgICAgIHNhdmVkIHIxMSBvZiBjYWxsZXIgZnVuY3Rpb24KKzQ4ICAgICAgICA5NiAgICAgICAgICAgIHNhdmVkIHIxMiBvZiBjYWxsZXIgZnVuY3Rpb24KKzUyICAgICAgICAxMDQgICAgICAgICAgIHNhdmVkIHIxMyBvZiBjYWxsZXIgZnVuY3Rpb24KKzU2ICAgICAgICAxMTIgICAgICAgICAgIHNhdmVkIHIxNCBvZiBjYWxsZXIgZnVuY3Rpb24KKzYwICAgICAgICAxMjAgICAgICAgICAgIHNhdmVkIHIxNSBvZiBjYWxsZXIgZnVuY3Rpb24KKzY0ICAgICAgICAxMjggICAgICAgICAgIHNhdmVkIGY0IG9mIGNhbGxlciBmdW5jdGlvbgorNzIgICAgICAgIDEzMiAgICAgICAgICAgc2F2ZWQgZjYgb2YgY2FsbGVyIGZ1bmN0aW9uCis4MCAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQKKzk2ICAgICAgICAxNjAgICAgICAgICAgIG91dGdvaW5nIGFyZ3MgcGFzc2VkIGZyb20gY2FsbGVyIHRvIGNhbGxlZQorOTYreCAgICAgIDE2MCt4ICAgICAgICAgcG9zc2libGUgc3RhY2sgYWxpZ25tZW50ICggOCBieXRlcyBkZXNpcmFibGUgKQorOTYreCt5ICAgIDE2MCt4K3kgICAgICAgYWxsb2NhIHNwYWNlIG9mIGNhbGxlciAoIGlmIHVzZWQgKQorOTYreCt5K3ogIDE2MCt4K3kreiAgICAgYXV0b21hdGljcyBvZiBjYWxsZXIgKCBpZiB1c2VkICkKKzAgICAgICAgICAgICAgICAgICAgICAgIGJhY2stY2hhaW4KKworQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gdGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIEl0IGRpZG4ndCBuZWVkIHRvIHNldCB1cCBhIHBvaW50ZXIgdG8gdGhlIGNvbnN0YW50IHBvb2wgZ3ByMTMgYXMgaXQgaXNuJ3QgdXNlZAorKCA6LSggKS4KKzIpIFRoaXMgaXMgYSBmcmFtZWxlc3MgZnVuY3Rpb24gJiBubyBzdGFjayBpcyBib3VnaHQuCiszKSBUaGUgY29tcGlsZXIgd2FzIGNsZXZlciBlbm91Z2ggdG8gcmVjb2duaXNlIHRoYXQgaXQgY291bGQgcmV0dXJuIHRoZQordmFsdWUgaW4gcjIgYXMgd2VsbCBhcyB1c2UgaXQgZm9yIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVyICggOi0pICkuCis0KSBUaGUgYmFzciAoIGJyYW5jaCByZWxhdGl2ZSAmIHNhdmUgKSB0cmljayB3b3JrcyBhcyBmb2xsb3dzIHRoZSBpbnN0cnVjdGlvbiAKK2hhcyBhIHNwZWNpYWwgY2FzZSB3aXRoIHIwLHIwIHdpdGggc29tZSBpbnN0cnVjdGlvbiBvcGVyYW5kcyBpcyB1bmRlcnN0b29kIGFzIAordGhlIGxpdGVyYWwgdmFsdWUgMCwgc29tZSByaXNjIGFyY2hpdGVjdHVyZXMgYWxzbyBkbyB0aGlzICkuIFNvIG5vdword2UgYXJlIGJyYW5jaGluZyB0byB0aGUgbmV4dCBhZGRyZXNzICYgdGhlIGFkZHJlc3MgbmV3IHByb2dyYW0gY291bnRlciBpcworaW4gcjEzLHNvIG5vdyB3ZSBzdWJ0cmFjdCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgd2UgaGF2ZSBleGVjdXRlZAorKyB0aGUgc2l6ZSBvZiB0aGUgbGl0ZXJhbCBwb29sIHRvIGdldCB0byB0aGUgdG9wIG9mIHRoZSBsaXRlcmFsIHBvb2wKKzAwNDAwMzdjIGludCB0ZXN0KGludCBiKQoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIHByb2xvZ3VlIGJlbG93CisgIDQwMDM3YzoJOTAgZGUgZjAgMzQgCXN0bQklcjEzLCVyMTQsNTIoJXIxNSkgIyBTYXZlIHJlZ2lzdGVycyByMTMgJiByMTQKKyAgNDAwMzgwOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcG9pbnRlciB0byBjb25zdGFudCBwb29sIHVzaW5nCisgIDQwMDM4MjoJYTcgZGEgZmYgZmEgCWFoaQklcjEzLC02ICAgICAgICAgICAgIyBiYXNyIHRyaWNrCisJcmV0dXJuKDUrYik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIdWdlIG1haW4gcHJvZ3JhbQorICA0MDAzODY6CWE3IDJhIDAwIDA1IAlhaGkJJXIyLDUgICAgICAgICAgICAgICMgYWRkIDUgdG8gcjIKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIGVwaWxvZ3VlIGJlbG93IAorICA0MDAzOGE6CTk4IGRlIGYwIDM0IAlsbQklcjEzLCVyMTQsNTIoJXIxNSkgIyByZXN0b3JlIHJlZ2lzdGVycyByMTMgJiAxNAorICA0MDAzOGU6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4KK30KKworQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIG1haW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxKSBUaGUgY29tcGlsZXIgZGlkIHRoaXMgZnVuY3Rpb24gb3B0aW1hbGx5ICggOC0pICkKKworTGl0ZXJhbCBwb29sIGZvciBtYWluLgorNDAwMzkwOglmZiBmZiBmZiBlYyAJLmxvbmcgMHhmZmZmZmZlYworbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKKyAgNDAwMzk0Ogk5MCBiZiBmMCAyYyAJc3RtCSVyMTEsJXIxNSw0NCglcjE1KSAjIFNhdmUgbmVjZXNzYXJ5IHJlZ2lzdGVycworICA0MDAzOTg6CTE4IDBmICAgICAgIAlscgklcjAsJXIxNSAgICAgICAgICAgIyBjb3B5IHN0YWNrIHBvaW50ZXIgdG8gcjAKKyAgNDAwMzlhOglhNyBmYSBmZiBhMCAJYWhpCSVyMTUsLTk2ICAgICAgICAgICAjIE1ha2UgYXJlYSBmb3IgY2FsbGVlIHNhdmluZyAKKyAgNDAwMzllOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcjEzIHRvIHBvaW50IHRvCisgIDQwMDNhMDoJYTcgZGEgZmYgZjAgCWFoaQklcjEzLC0xNiAgICAgICAgICAgIyBsaXRlcmFsIHBvb2wKKyAgNDAwM2E0Ogk1MCAwMCBmMCAwMCAJc3QJJXIwLDAoJXIxNSkgICAgICAgICMgU2F2ZSBiYWNrY2hhaW4KKworCXJldHVybih0ZXN0KDUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFpbiBQcm9ncmFtIEJlbG93CisgIDQwMDNhODoJNTggZTAgZDAgMDAgCWwJJXIxNCwwKCVyMTMpICAgICAgICMgbG9hZCByZWxhdGl2ZSBhZGRyZXNzIG9mIHRlc3QgZnJvbQorCQkJCQkJICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAorICA0MDAzYWM6CWE3IDI4IDAwIDA1IAlsaGkJJXIyLDUgICAgICAgICAgICAgICMgU2V0IGZpcnN0IHBhcmFtZXRlciB0byA1CisgIDQwMDNiMDoJNGQgZWUgZDAgMDAgCWJhcwklcjE0LDAoJXIxNCwlcjEzKSAgIyBqdW1wIHRvIHRlc3Qgc2V0dGluZyByMTQgYXMgcmV0dXJuCisJCQkJCQkJICAgIyBhZGRyZXNzIHVzaW5nIGJyYW5jaCAmIHNhdmUgaW5zdHJ1Y3Rpb24uCisKKwkJCQkJCQkgICAjIEZ1bmN0aW9uIEVwaWxvZ3VlIGJlbG93CisgIDQwMDNiNDoJOTggYmYgZjAgOGMgCWxtCSVyMTEsJXIxNSwxNDAoJXIxNSkjIFJlc3RvcmUgbmVjZXNzYXJ5IHJlZ2lzdGVycy4KKyAgNDAwM2I4OgkwNyBmZSAgICAgICAJYnIJJXIxNCAgICAgICAgICAgICAgICMgcmV0dXJuIHRvIGRvIHByb2dyYW0gZXhpdCAKK30KKworCitDb21waWxlciB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tCisKK21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQoreworICA0MDA0ZmM6CTkwIDdmIGYwIDFjICAgICAgIAlzdG0JJXI3LCVyMTUsMjgoJXIxNSkKKyAgNDAwNTAwOglhNyBkNSAwMCAwNCAgICAgICAJYnJhcwklcjEzLDQwMDUwOCA8bWFpbisweGM+CisgIDQwMDUwNDoJMDAgNDAgMDQgZjQgICAgICAgCS5sb25nCTB4MDA0MDA0ZjQgCisgICMgY29tcGlsZXIgbm93IHB1dHMgY29uc3RhbnQgcG9vbCBpbiBjb2RlIHRvIHNvIGl0IHNhdmVzIGFuIGluc3RydWN0aW9uIAorICA0MDA1MDg6CTE4IDBmICAgICAgICAgICAgIAlscgklcjAsJXIxNQorICA0MDA1MGE6CWE3IGZhIGZmIGEwICAgICAgIAlhaGkJJXIxNSwtOTYKKyAgNDAwNTBlOgk1MCAwMCBmMCAwMCAgICAgICAJc3QJJXIwLDAoJXIxNSkKKwlyZXR1cm4odGVzdCg1KSk7CisgIDQwMDUxMjoJNTggMTAgZDAgMDAgICAgICAgCWwJJXIxLDAoJXIxMykKKyAgNDAwNTE2OglhNyAyOCAwMCAwNSAgICAgICAJbGhpCSVyMiw1CisgIDQwMDUxYToJMGQgZTEgICAgICAgICAgICAgCWJhc3IJJXIxNCwlcjEKKyAgIyBjb21waWxlciBhZGRzIDEgZXh0cmEgaW5zdHJ1Y3Rpb24gdG8gZXBpbG9ndWUgdGhpcyBpcyBkb25lIHRvCisgICMgYXZvaWQgcHJvY2Vzc29yIHBpcGVsaW5lIHN0YWxscyBvd2luZyB0byBkYXRhIGRlcGVuZGVuY2llcyBvbiBnNSAmCisgICMgYWJvdmUgYXMgcmVnaXN0ZXIgMTQgaW4gdGhlIG9sZCBjb2RlIHdhcyBuZWVkZWQgZGlyZWN0bHkgYWZ0ZXIgYmVpbmcgbG9hZGVkIAorICAjIGJ5IHRoZSBsbQklcjExLCVyMTUsMTQwKCVyMTUpIGZvciB0aGUgYnIgJTE0LgorICA0MDA1MWM6CTU4IDQwIGYwIDk4ICAgICAgIAlsCSVyNCwxNTIoJXIxNSkKKyAgNDAwNTIwOgk5OCA3ZiBmMCA3YyAgICAgICAJbG0JJXI3LCVyMTUsMTI0KCVyMTUpCisgIDQwMDUyNDoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAorfQorCisKK0hhcnRtdXQgKCBvdXIgY29tcGlsZXIgZGV2ZWxvcGVyICkgYWxzbyBoYXMgYmVlbiB0aHJlYXRlbmluZyB0byB0YWtlIG91dCB0aGUKK3N0YWNrIGJhY2tjaGFpbiBpbiBvcHRpbWlzZWQgY29kZSBhcyB0aGlzIGFsc28gY2F1c2VzIHBpcGVsaW5lIHN0YWxscywgeW91CitoYXZlIGJlZW4gd2FybmVkLgorCis2NCBiaXQgei9BcmNoaXRlY3R1cmUgY29kZSBkaXNhc3NlbWJseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHVuZGVyc3RhbmQgdGhlIHN0dWZmIGFib3ZlIHlvdSdsbCB1bmRlcnN0YW5kIHRoZSBzdHVmZgorYmVsb3cgdG9vIHNvIEknbGwgYXZvaWQgcmVwZWF0aW5nIG15c2VsZiAmIGp1c3Qgc2F5IHRoYXQgCitzb21lIG9mIHRoZSBpbnN0cnVjdGlvbnMgaGF2ZSBnJ3Mgb24gdGhlIGVuZCBvZiB0aGVtIHRvIGluZGljYXRlCit0aGV5IGFyZSA2NCBiaXQgJiB0aGUgc3RhY2sgb2Zmc2V0cyBhcmUgYSBiaWdnZXIsIAordGhlIG9ubHkgb3RoZXIgZGlmZmVyZW5jZSB5b3UnbGwgZmluZCBiZXR3ZWVuIDMyICYgNjQgYml0IGlzIHRoYXQKK3dlIG5vdyB1c2UgZjQgJiBmNiBmb3IgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIG9uIDY0IGJpdC4KKzAwMDAwMDAwODAwMDA1YjAgPHRlc3Q+OgoraW50IHRlc3QoaW50IGIpCit7CisJcmV0dXJuKDUrYik7CisgICAgODAwMDA1YjA6CWE3IDJhIDAwIDA1ICAgICAgIAlhaGkJJXIyLDUKKyAgICA4MDAwMDViNDoJYjkgMTQgMDAgMjIgICAgICAgCWxnZnIJJXIyLCVyMiAjIGRvd25jYXN0IHRvIGludGVnZXIKKyAgICA4MDAwMDViODoJMDcgZmUgICAgICAgICAgICAgCWJyCSVyMTQKKyAgICA4MDAwMDViYToJMDcgMDcgICAgICAgICAgICAgCWJjcgkwLCVyNworCisKK30KKworMDAwMDAwMDA4MDAwMDViYyA8bWFpbj46CittYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKK3sgCisgICAgODAwMDA1YmM6CWViIGJmIGYwIDU4IDAwIDI0IAlzdG1nCSVyMTEsJXIxNSw4OCglcjE1KQorICAgIDgwMDAwNWMyOgliOSAwNCAwMCAxZiAgICAgICAJbGdyCSVyMSwlcjE1CisgICAgODAwMDA1YzY6CWE3IGZiIGZmIDYwICAgICAgIAlhZ2hpCSVyMTUsLTE2MAorICAgIDgwMDAwNWNhOgllMyAxMCBmMCAwMCAwMCAyNCAJc3RnCSVyMSwwKCVyMTUpCisJcmV0dXJuKHRlc3QoNSkpOworICAgIDgwMDAwNWQwOglhNyAyOSAwMCAwNSAgICAgICAJbGdoaQklcjIsNQorICAgICMgYnJhc2wgYWxsb3dzIGp1bXBzID4gNjRrICYgaXMgb3ZlcmtpbGwgaGVyZSBicmFzIHdvdWxkIGRvIGZ1bmUKKyAgICA4MDAwMDVkNDoJYzAgZTUgZmYgZmYgZmYgZWUgCWJyYXNsCSVyMTQsODAwMDA1YjAgPHRlc3Q+IAorICAgIDgwMDAwNWRhOgllMyA0MCBmMSAxMCAwMCAwNCAJbGcJJXI0LDI3MiglcjE1KQorICAgIDgwMDAwNWUwOgllYiBiZiBmMCBmOCAwMCAwNCAJbG1nCSVyMTEsJXIxNSwyNDgoJXIxNSkKKyAgICA4MDAwMDVlNjoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAorfQorCisKKworQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistZ2R3YXJmLTIgbm93IHdvcmtzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0IGRlYnVnZ2luZworZm9ybWF0IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIGFzIGl0IGlzIG1vcmUgcmVsaWFibGUgZm9yIGRlYnVnZ2luZworc2hhcmVkIGxpYnJhcmllcywgIG5vcm1hbCAtZyBkZWJ1Z2dpbmcgd29ya3MgbXVjaCBiZXR0ZXIgbm93CitUaGFua3MgdG8gdGhlIElCTSBqYXZhIGNvbXBpbGVyIGRldmVsb3BlcnMgYnVnIHJlcG9ydHMuIAorCitUaGlzIGlzIHR5cGljYWxseSBkb25lIGFkZGluZy9hcHBlbmRpbmcgdGhlIGZsYWdzIC1nIG9yIC1nZHdhcmYtMiB0byB0aGUgCitDRkxBR1MgJiBMREZMQUdTIHZhcmlhYmxlcyBNYWtlZmlsZSBvZiB0aGUgcHJvZ3JhbSBjb25jZXJuZWQuCisKK0lmIHVzaW5nIGdkYiAmIHlvdSB3b3VsZCBsaWtlIGFjY3VyYXRlIGRpc3BsYXlzIG9mIHJlZ2lzdGVycyAmCisgc3RhY2sgdHJhY2VzIGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24gaS5lIG1ha2Ugc3VyZQordGhhdCB0aGVyZSBpcyBubyAtTzIgb3Igc2ltaWxhciBvbiB0aGUgQ0ZMQUdTIGxpbmUgb2YgdGhlIE1ha2VmaWxlICYKK3RoZSBlbWl0dGVkIGdjYyBjb21tYW5kcywgb2J2aW91c2x5IHRoaXMgd2lsbCBwcm9kdWNlIHdvcnNlIGNvZGUgCisoIG5vdCBhZHZpc2FibGUgZm9yIHNoaXBtZW50ICkgYnV0IGl0IGlzIGFuICBhaWQgdG8gdGhlIGRlYnVnZ2luZyBwcm9jZXNzLgorCitUaGlzIGFpZHMgZGVidWdnaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHdpbGwgY29weSBwYXJhbWV0ZXJzIHBhc3NlZCBpbgoraW4gcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrIHNvIGJhY2t0cmFjaW5nICYgbG9va2luZyBhdCBwYXNzZWQgaW4KK3BhcmFtZXRlcnMgd2lsbCB3b3JrLCBob3dldmVyIHNvbWUgbGFyZ2VyIHByb2dyYW1zIHdoaWNoIHVzZSBpbmxpbmUgZnVuY3Rpb25zCit3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgb3B0aW1pc2F0aW9uLgorCitEZWJ1Z2dpbmcgd2l0aCBvcHRpbWlzYXRpb24gaGFzIHNpbmNlIG11Y2ggaW1wcm92ZWQgYWZ0ZXIgZml4aW5nCitzb21lIGJ1Z3MsIHBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBnZGItNS4wIG9yIGxhdGVyIGRldmVsb3BlZCAKK2FmdGVyIE5vdicyMDAwLgorCitGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJZiB5b3UgYXJlIGdldHRpbmcgYSBsb3Qgb2Ygc3ludGF4IGVycm9ycyBjb21waWxpbmcgYSBwcm9ncmFtICYgdGhlIHByb2JsZW0KK2lzbid0IGJsYXRhbnRseSBvYnZpb3VzIGZyb20gdGhlIHNvdXJjZS4KK0l0IG9mdGVuIGhlbHBzIHRvIGp1c3QgcHJlcHJvY2VzcyB0aGUgZmlsZSwgdGhpcyBpcyBkb25lIHdpdGggdGhlIC1FCitvcHRpb24gaW4gZ2NjLgorV2hhdCB0aGlzIGRvZXMgaXMgdGhhdCBpdCBydW5zIHRocm91Z2ggdGhlIHZlcnkgZmlyc3QgcGhhc2Ugb2YgY29tcGlsYXRpb24KKyggY29tcGlsYXRpb24gaW4gZ2NjIGlzIGRvbmUgaW4gc2V2ZXJhbCBzdGFnZXMgJiBnY2MgY2FsbHMgbWFueSBwcm9ncmFtcyB0bworYWNoaWV2ZSBpdHMgZW5kIHJlc3VsdCApIHdpdGggdGhlIC1FIG9wdGlvbiBnY2MganVzdCBjYWxscyB0aGUgZ2NjIHByZXByb2Nlc3NvciAoY3BwKS4KK1RoZSBjIHByZXByb2Nlc3NvciBkb2VzIHRoZSBmb2xsb3dpbmcsIGl0IGpvaW5zIGFsbCB0aGUgZmlsZXMgI2luY2x1ZGVkIHRvZ2V0aGVyCityZWN1cnNpdmVseSAoICNpbmNsdWRlIGZpbGVzIGNhbiAjaW5jbHVkZSBvdGhlciBmaWxlcyApICYgYWxzbyB0aGUgYyBmaWxlIHlvdSB3aXNoIHRvIGNvbXBpbGUuCitJdCBwdXRzIGEgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlICNpbmNsdWRlZCBmaWxlcyBpbiBhIGNvbW1lbnQgJiBpdAorZG9lcyBtYWNybyBleHBhbnNpb24uCitUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJlY2F1c2UKKzEpIFlvdSBjYW4gZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhlIGZpbGVzIHlvdSBleHBlY3QgdG8gYmUgaW5jbHVkZWQgYXJlIHRoZSBvbmVzCit0aGF0IGFyZSBiZWluZyBpbmNsdWRlZCAoIGUuZy4gZG91YmxlIGNoZWNrIHRoYXQgeW91IGFyZW4ndCBnb2luZyB0byB0aGUgaTM4NiBhc20gZGlyZWN0b3J5ICkuCisyKSBDaGVjayB0aGF0IG1hY3JvIGRlZmluaXRpb25zIGFyZW4ndCBjbGFzaGluZyB3aXRoIHR5cGVkZWZzLAorMykgQ2hlY2sgdGhhdCBkZWZpbml0b25zIGFyZW4ndCBiZWluZyB1c2VkIGJlZm9yZSB0aGV5IGFyZSBiZWluZyBpbmNsdWRlZC4KKzQpIEhlbHBzIHB1dCB0aGUgbGluZSBlbWl0dGluZyB0aGUgZXJyb3IgdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaWYgaXQgY29udGFpbnMgbWFjcm9zLgorCitGb3IgY29udmVuaWVuY2UgdGhlIExpbnV4IGtlcm5lbCdzIG1ha2VmaWxlIHdpbGwgZG8gcHJlcHJvY2Vzc2luZyBhdXRvbWF0aWNhbGx5IGZvciB5b3UKK2J5IHN1ZmZpeGluZyB0aGUgZmlsZSB5b3Ugd2FudCBidWlsdCB3aXRoIC5pICggaW5zdGVhZCBvZiAubyApCisKK2UuZy4KK2Zyb20gdGhlIGxpbnV4IGRpcmVjdG9yeSB0eXBlCittYWtlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkKK3RoaXMgd2lsbCBidWlsZAorCitzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1FIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKKz4gYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuaSAgCisKK05vdyBsb29rIGF0IHNpZ25hbC5pIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlLgorCisKKyMgMSAiL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7Cit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7Cit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCitJZiBpbnN0ZWFkIHlvdSBhcmUgZ2V0dGluZyBlcnJvcnMgZnVydGhlciBkb3duIGUuZy4KK3Vua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAibW92ZS5sIiBvciBiZXR0ZXIgc3RpbGwgdW5rbm93biBpbnN0cnVjdGlvbjoyNTE1IAorIkZpeG1lIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGNhbGwgTWFydGluIiB5b3UgYXJlIHByb2JhYmx5IGFyZSBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgc29tZSBjb2RlIAorbWVhbnQgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlIG9yIGNvZGUgdGhhdCBpcyBzaW1wbHkgbm90IGltcGxlbWVudGVkLCB3aXRoIGEgZml4bWUgc3RhdGVtZW50CitzdHVjayBpbnRvIHRoZSBpbmxpbmUgYXNzZW1ibHkgY29kZSBzbyB0aGF0IHRoZSBhdXRob3Igb2YgdGhlIGZpbGUgbm93IGtub3dzIGhlIGhhcyB3b3JrIHRvIGRvLgorVG8gbG9vayBhdCB0aGUgYXNzZW1ibHkgZW1pdHRlZCBieSBnY2MganVzdCBiZWZvcmUgaXQgaXMgYWJvdXQgdG8gY2FsbCBnYXMgKCB0aGUgZ251IGFzc2VtYmxlciApCit1c2UgdGhlIC1TIG9wdGlvbi4KK0FnYWluIGZvciB5b3VyIGNvbnZlbmllbmNlIHRoZSBMaW51eCBrZXJuZWwncyBNYWtlZmlsZSB3aWxsIGhvbGQgeW91ciBoYW5kICYKK2RvIGFsbCB0aGlzIGRvbmtleSB3b3JrIGZvciB5b3UgYWxzbyBieSBidWlsZGluZyB0aGUgZmlsZSB3aXRoIHRoZSAucyBzdWZmaXguCitlLmcuCitmcm9tIHRoZSBMaW51eCBkaXJlY3RvcnkgdHlwZSAKK21ha2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAKKworczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCistZm5vLXN0cmljdC1hbGlhc2luZyAtRF9fU01QX18gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgIC1TIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgCistbyBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zICAKKworCitUaGlzIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlLCAoIHBsZWFzZSBub3RlIHRoZSBjb25zdGFudCBwb29sICYgdGhlIHVzZWZ1bCBjb21tZW50cworaW4gdGhlIHByb2xvZ3VlIHRvIGdpdmUgeW91IGEgaGFuZCBhdCBpbnRlcnByZXRpbmcgaXQgKS4KKworLkxDNTQ6CisJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MTYgKikgaW4gX194Y2hnXG4iCisuTEM1NzoKKwkuc3RyaW5nCSJtaXNhbGlnbmVkIChfX3UzMiAqKSBpbiBfX3hjaGdcbiIKKy5MJFBHMTogIyBQb29sIHN5c19zaWdzdXNwZW5kCisuTEMxOTI6CisJLmxvbmcJLTI2MjQwMQorLkxDMTkzOgorCS5sb25nCS0xCisuTEMxOTQ6CisJLmxvbmcJc2NoZWR1bGUtLkwkUEcxCisuTEMxOTU6CisJLmxvbmcJZG9fc2lnbmFsLS5MJFBHMQorCS5hbGlnbiA0CisuZ2xvYmwgc3lzX3NpZ3N1c3BlbmQKKwkudHlwZQkgc3lzX3NpZ3N1c3BlbmQsQGZ1bmN0aW9uCitzeXNfc2lnc3VzcGVuZDoKKyMJbGVhZiBmdW5jdGlvbiAgICAgICAgICAgMAorIwlhdXRvbWF0aWNzICAgICAgICAgICAgICAxNgorIwlvdXRnb2luZyBhcmdzICAgICAgICAgICAwCisjCW5lZWQgZnJhbWUgcG9pbnRlciAgICAgIDAKKyMJY2FsbCBhbGxvY2EgICAgICAgICAgICAgMAorIwloYXMgdmFyYXJncyAgICAgICAgICAgICAwCisjCWluY29taW5nIGFyZ3MgKHN0YWNrKSAgIDAKKyMJZnVuY3Rpb24gbGVuZ3RoICAgICAgICAgMTY4CisJU1RNCTgsMTUsMzIoMTUpCisJTFIJMCwxNQorCUFISQkxNSwtMTEyCisJQkFTUgkxMywwCisuTCRDTzE6CUFISQkxMywuTCRQRzEtLkwkQ08xCisJU1QJMCwwKDE1KQorCUxSICAgIDgsMgorCU4gICAgIDUsLkxDMTkyLS5MJFBHMSgxMykgCisKK0FkZGluZyAtZyB0byB0aGUgYWJvdmUgb3V0cHV0IG1ha2VzIHRoZSBvdXRwdXQgZXZlbiBtb3JlIHVzZWZ1bAorZS5nLiB0eXBpbmcKK21ha2UgQ0M6PSJzMzkwLWdjYyAtZyIga2VybmVsL3NjaGVkLnMKKword2hpY2ggY29tcGlsZXMuCitzMzkwLWdjYyAtZyAtRF9fS0VSTkVMX18gLUkvaG9tZS9iYXJyb3cvbGludXgtMi4zL2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgICAtUyBrZXJuZWwvc2NoZWQuYyAtbyBrZXJuZWwvc2NoZWQucyAKKworYWxzbyBvdXRwdXRzIHN0YWJzICggZGVidWdnZXIgKSBpbmZvLCBmcm9tIHRoaXMgaW5mbyB5b3UgY2FuIGZpbmQgb3V0IHRoZQorb2Zmc2V0cyAmIHNpemVzIG9mIHZhcmlvdXMgZWxlbWVudHMgaW4gc3RydWN0dXJlcy4KK2UuZy4gdGhlIHN0YWIgZm9yIHRoZSBzdHJ1Y3R1cmUKK3N0cnVjdCBybGltaXQgeworCXVuc2lnbmVkIGxvbmcJcmxpbV9jdXI7CisJdW5zaWduZWQgbG9uZwlybGltX21heDsKK307CitpcworLnN0YWJzICJybGltaXQ6VCgxNTEsMik9czhybGltX2N1cjooMCw1KSwwLDMyO3JsaW1fbWF4OigwLDUpLDMyLDMyOzsiLDEyOCwwLDAsMAorZnJvbSB0aGlzIHN0YWIgeW91IGNhbiBzZWUgdGhhdCAKK3JsaW1pdF9jdXIgc3RhcnRzIGF0IGJpdCBvZmZzZXQgMCAmIGlzIDMyIGJpdHMgaW4gc2l6ZQorcmxpbWl0X21heCBzdGFydHMgYXQgYml0IG9mZnNldCAzMiAmIGlzIDMyIGJpdHMgaW4gc2l6ZS4KKworCitEZWJ1Z2dpbmcgVG9vbHM6Cis9PT09PT09PT09PT09PT09CisKK29iamR1bXAKKz09PT09PT0KK1RoaXMgaXMgYSB0b29sIHdpdGggbWFueSBvcHRpb25zIHRoZSBtb3N0IHVzZWZ1bCBiZWluZyAoIGlmIGNvbXBpbGVkIHdpdGggLWcpLgorb2JqZHVtcCAtLXNvdXJjZSA8dmljdGltIHByb2dyYW0gb3Igb2JqZWN0IGZpbGU+ID4gPHZpY3RpbXMgZGVidWcgbGlzdGluZyA+CisKKworVGhlIHdob2xlIGtlcm5lbCBjYW4gYmUgY29tcGlsZWQgbGlrZSB0aGlzICggRG9pbmcgdGhpcyB3aWxsIG1ha2UgYSAxN01CIGtlcm5lbAorJiBhIDIwMCBNQiBsaXN0aW5nICkgaG93ZXZlciB5b3UgaGF2ZSB0byBzdHJpcCBpdCBiZWZvcmUgYnVpbGRpbmcgdGhlIGltYWdlCit1c2luZyB0aGUgc3RyaXAgY29tbWFuZCB0byBtYWtlIGl0IGEgbW9yZSByZWFzb25hYmxlIHNpemUgdG8gYm9vdCBpdC4KKworQSBzb3VyY2UvYXNzZW1ibHkgbWl4ZWQgZHVtcCBvZiB0aGUga2VybmVsIGNhbiBiZSBkb25lIHdpdGggdGhlIGxpbmUKK29iamR1bXAgLS1zb3VyY2Ugdm1saW51eCA+IHZtbGludXgubHN0CitBbHNvIGlmIHRoZSBmaWxlIGlzbid0IGNvbXBpbGVkIC1nIHRoaXMgd2lsbCBvdXRwdXQgYXMgbXVjaCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KK2FzIGl0IGNhbiAoIGUuZy4gZnVuY3Rpb24gbmFtZXMgKSwgaG93ZXZlciwgdGhpcyBpcyB2ZXJ5IHNsb3cgYXMgaXQgc3BlbmRzIGxvdHMKK29mIHRpbWUgc2VhcmNoaW5nIGZvciBkZWJ1Z2dpbmcgaW5mbywgdGhlIGZvbGxvd2luZyBzZWxmIGV4cGxhbml0b3J5IGxpbmUgc2hvdWxkIGJlIHVzZWQgCitpbnN0ZWFkIGlmIHRoZSBjb2RlIGlzbid0IGNvbXBpbGVkIC1nLgorb2JqZHVtcCAtLWRpc2Fzc2VtYmxlLWFsbCAtLXN5bXMgdm1saW51eCA+IHZtbGludXgubHN0ICAKK2FzIGl0IGlzIG11Y2ggZmFzdGVyCisKK0FzIGhhcmQgZHJpdmUgc3BhY2UgaXMgdmFsdWJsZSBtb3N0IG9mIHVzIHVzZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoLgorMSkgTG9vayBhdCB0aGUgZW1pdHRlZCBwc3cgb24gdGhlIGNvbnNvbGUgdG8gZmluZCB0aGUgY3Jhc2ggYWRkcmVzcyBpbiB0aGUga2VybmVsLgorMikgTG9vayBhdCB0aGUgZmlsZSBTeXN0ZW0ubWFwICggaW4gdGhlIGxpbnV4IGRpcmVjdG9yeSApIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgCit0aGUga2VybmVsIHRvIGZpbmQgdGhlIGNsb3Nlc3QgYWRkcmVzcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgUFNXIHRvIGZpbmQgdGhlCitvZmZlbmRpbmcgZnVuY3Rpb24uCiszKSB1c2UgZ3JlcCBvciBzaW1pbGFyIHRvIHNlYXJjaCB0aGUgc291cmNlIHRyZWUgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBmaWxlCisgd2l0aCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBkb24ndCBrbm93IHdoZXJlIGl0IGlzLgorNCkgcmVidWlsZCB0aGlzIG9iamVjdCBmaWxlIHdpdGggLWcgb24sIGFzIGFuIGV4YW1wbGUgc3VwcG9zZSB0aGUgZmlsZSB3YXMKKyggL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gKSAKKzUpIEFzc3VtaW5nIHRoZSBmaWxlIHdpdGggdGhlIGVycm9uZW91cyBmdW5jdGlvbiBpcyBzaWduYWwuYyBNb3ZlIHRvIHRoZSBiYXNlIG9mIHRoZSAKK0xpbnV4IHNvdXJjZSB0cmVlLgorNikgcm0gL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KKzcpIG1ha2UgL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KKzgpIHdhdGNoIHRoZSBnY2MgY29tbWFuZCBsaW5lIGVtaXR0ZWQKKzkpIHR5cGUgaXQgaW4gYWdhaW4gb3IgYWxlcm5hdGl2ZWx5IGN1dCAmIHBhc3RlIGl0IG9uIHRoZSBjb25zb2xlIGFkZGluZyB0aGUgLWcgb3B0aW9uLgorMTApIG9iamR1bXAgLS1zb3VyY2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubyA+IHNpZ25hbC5sc3QKK1RoaXMgd2lsbCBvdXRwdXQgdGhlIHNvdXJjZSAmIHRoZSBhc3NlbWJseSBpbnRlcm1peGVkLCBhcyB0aGUgc25pcHBldCBiZWxvdyBzaG93cworVGhpcyB3aWxsIHVuZm9ydHVuYXRlbHkgb3V0cHV0IGFkZHJlc3NlcyB3aGljaCBhcmVuJ3QgdGhlIHNhbWUKK2FzIHRoZSBrZXJuZWwgb25lcyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFyb3VuZCB0aGUgbWVudGFsIGFyaXRobWV0aWMKK2J5IHBsYXlpbmcgd2l0aCB0aGUgLS1hZGp1c3Qtdm1hIHBhcmFtZXRlciB0byBvYmpkdW1wLgorCisKKworCitleHRlcm4gaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxwKQoreworICAgICAgYTA6ICAgICAgIDE4IDM0ICAgICAgICAgICBsciAgICAgICVyMywlcjQKKyAgICAgIGEyOiAgICAgICBhNyAzYSAwMyBiYyAgICAgYWhpICAgICAlcjMsOTU2CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZSgiICAgIGxoaSAgIDEsLTFcbiIKKyAgICAgIGE2OiAgICAgICBhNyAxOCBmZiBmZiAgICAgbGhpICAgICAlcjEsLTEKKyAgICAgIGFhOiAgICAgICAxZiAwMCAgICAgICAgICAgc2xyICAgICAlcjAsJXIwCisgICAgICBhYzogICAgICAgYmEgMDEgMzAgMDAgICAgIGNzICAgICAgJXIwLCVyMSwwKCVyMykKKyAgICAgIGIwOiAgICAgICBhNyA0NCBmZiBmZCAgICAgam0gICAgICBhYSA8c3lzX3NpZ3N1c3BlbmQrMHgyZT4KKyAgICAgICAgc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisgICAgICBiNDogICAgICAgZDIgMDcgZjAgNjggICAgIG12YyAgICAgMTA0KDgsJXIxNSksOTcyKCVyNCkKKyAgICAgIGI4OiAgICAgICA0MyBjYworICAgICAgICByZXR1cm4gKHNldC0+c2lnWzBdICYgbWFzaykgIT0gMDsKK30gCisKKzYpIElmIGRlYnVnZ2luZyB1bmRlciBWTSBnbyBkb3duIHRvIHRoYXQgc2VjdGlvbiBpbiB0aGUgZG9jdW1lbnQgZm9yIG1vcmUgaW5mby4KKworCitJIG5vdyBoYXZlIGEgdG9vbCB3aGljaCB0YWtlcyB0aGUgcGFpbiBvdXQgb2YgLS1hZGp1c3Qtdm1hCismIHlvdSBhcmUgYWJsZSB0byBkbyBzb21ldGhpbmcgbGlrZQorbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5sc3QKKyYgaXQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdGhlIGNvcnJlY3RseSByZWxvY2F0ZWQgZW50cmllcyBmb3IKK3RoZSB0ZXh0IHNlZ21lbnQgaW4gdHJhcHMubHN0LgorVGhpcyB0b29sIGlzIG5vdyBzdGFuZGFyZCBpbiBsaW51eCBkaXN0cm8ncyBpbiBzY3JpcHRzL21ha2Vsc3QKKworc3RyYWNlOgorLS0tLS0tLQorUS4gV2hhdCBpcyBpdCA/CitBLiBJdCBpcyBhIHRvb2wgZm9yIGludGVyY2VwdGluZyBjYWxscyB0byB0aGUga2VybmVsICYgbG9nZ2luZyB0aGVtCit0byBhIGZpbGUgJiBvbiB0aGUgc2NyZWVuLgorCitRLiBXaGF0IHVzZSBpcyBpdCA/CitBLiBZb3UgY2FuIHVzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBmaWxlcyBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBvcGVucy4KKworCisKK0V4YW1wbGUgMQorLS0tLS0tLS0tCitJZiB5b3Ugd2FudGVkIHRvIGtub3cgZG9lcyBwaW5nIHdvcmsgYnV0IGRpZG4ndCBoYXZlIHRoZSBzb3VyY2UgCitzdHJhY2UgcGluZyAtYyAxIDEyNy4wLjAuMSAgCismIHRoZW4gbG9vayBhdCB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIG9mIHRoZSBzeXNjYWxscyBiZWxvdywKKyggSW4gZmFjdCB0aGlzIGlzIHNvbWV0aW1lcyBlYXNpZXIgdGhhbiBsb29raW5nIGF0IHNvbWUgc3BhZ2V0dGkKK3NvdXJjZSB3aGljaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIGZvciBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKQorTm90IGV2ZXJ5dGhpbmcgdGhhdCBpdCB0aHJvd3Mgb3V0IG5lZWRzIHRvIG1ha2Ugc2Vuc2UgaW1tZWFkaWF0ZWx5CisKK0p1c3QgbG9va2luZyBxdWlja2x5IHlvdSBjYW4gc2VlIHRoYXQgaXQgaXMgbWFraW5nIHVwIGEgUkFXIHNvY2tldAorZm9yIHRoZSBJQ01QIHByb3RvY29sLgorRG9pbmcgYW4gYWxhcm0oMTApIGZvciBhIDEwIHNlY29uZCB0aW1lb3V0CismIGRvaW5nIGEgZ2V0dGltZW9mZGF5IGNhbGwgYmVmb3JlICYgYWZ0ZXIgZWFjaCByZWFkIHRvIHNlZSAKK2hvdyBsb25nIHRoZSByZXBsaWVzIHRvb2ssICYgd3JpdGluZyBzb21lIHRleHQgdG8gc3Rkb3V0IHNvIHRoZSB1c2VyCitoYXMgYW4gaWRlYSB3aGF0IGlzIGdvaW5nIG9uLgorCitzb2NrZXQoUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fSUNNUCkgPSAzCitnZXR1aWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCitzZXR1aWQoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCitzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9DL2xpYmMuY2F0IiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCitzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9saWJjL0MiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKK3N0YXQoIi91c3IvbG9jYWwvc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKK2dldHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDM1Mworc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIFsxXSwgNCkgPSAwCitzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgWzQ5MTUyXSwgNCkgPSAwCitmc3RhdCgxLCB7c3RfbW9kZT1TX0lGQ0hSfDA2MjAsIHN0X3JkZXY9bWFrZWRldigzLCAxKSwgLi4ufSkgPSAwCittbWFwKDAsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCkgPSAweDQwMDA4MDAwCitpb2N0bCgxLCBUQ0dFVFMsIHtCOTYwMCBvcG9zdCBpc2lnIGljYW5vbiBlY2hvIC4uLn0pID0gMAord3JpdGUoMSwgIlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkIi4uLiwgNDJQSU5HIDEyNy4wLjAuMSAoMTI3LjAuMC4xKTogNTYgZGF0YSBieXRlcworKSA9IDQyCitzaWdhY3Rpb24oU0lHSU5ULCB7MHg4MDQ5YmEwLCBbXSwgU0FfUkVTVEFSVH0sIHtTSUdfREZMfSkgPSAwIAorc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAKK2dldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxMzg5NTF9LCBOVUxMKSA9IDAKK3NlbmR0bygzLCAiXDEwXDBEXDIwMWFcMVwwXDBcMTcjXDIxNzhcMzA3XDM2Ii4uLiwgNjQsIDAsIHtzaW5fZmFtaWx5PUFGX0lORVQsCitzaW5fcG9ydD1odG9ucygwKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIDE2KSA9IDY0CitzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMAorc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9KSA9IDAKK2FsYXJtKDEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKK3JlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNVwwXDBAXDF8clwxNzdcMFwwXDFcMTc3Ii4uLiwgMTkyLCAwLCAKK3tzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKK2dldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjAyMjR9LCBOVUxMKSA9IDAKK3JlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNlwwXDBcMzc3XDFcMjc1cFwxNzdcMCIuLi4sIDE5MiwgMCwgCit7c2luX2ZhbWlseT1BRl9JTkVULCBzaW5fcG9ydD1odG9ucyg1MDg4MiksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCBbMTZdKSA9IDg0CitnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTY2OTUyfSwgTlVMTCkgPSAwCit3cml0ZSgxLCAiNjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2UiLi4uLCAKKzU3NjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2VxPTAgdHRsPTI1NSB0aW1lPTI4LjAgbXMKKworRXhhbXBsZSAyCistLS0tLS0tLS0KK3N0cmFjZSBwYXNzd2QgMj4mMSB8IGdyZXAgb3BlbgorcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQKK29wZW4oIi9ldGMvbGQuc28uY2FjaGUiLCBPX1JET05MWSkgICAgICA9IDMKK29wZW4oIi9vcHQva2RlL2xpYi9saWJjLnNvLjUiLCBPX1JET05MWSkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCitvcGVuKCIvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSAgICAgICAgPSAzCitvcGVuKCIvZGV2IiwgT19SRE9OTFkpICAgICAgICAgICAgICAgICAgPSAzCitvcGVuKCIvdmFyL3J1bi91dG1wIiwgT19SRE9OTFkpICAgICAgICAgPSAzCitvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCitvcGVuKCIvZXRjL3NoYWRvdyIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCitvcGVuKCIvZXRjL2xvZ2luLmRlZnMiLCBPX1JET05MWSkgICAgICAgPSA0CitvcGVuKCIvZGV2L3R0eSIsIE9fUkRPTkxZKSAgICAgICAgICAgICAgPSA0IAorCitUaGUgMj4mMSBpcyBkb25lIHRvIHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgJiBncmVwIGlzIHRoZW4gZmlsdGVyaW5nIHRoaXMgaW5wdXQgCit0aHJvdWdoIHRoZSBwaXBlIGZvciBlYWNoIGxpbmUgY29udGFpbmluZyB0aGUgc3RyaW5nIG9wZW4uCisKKworRXhhbXBsZSAzCistLS0tLS0tLS0KK0dldHRpbmcgc29waGlzdG9jYXRlZAordGVsbmV0ZCBjcmFzaGVzIG9uICYgSSBkb24ndCBrbm93IHdoeQorU3RlcHMKKy0tLS0tCisxKSBSZXBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiAvZXRjL2luZXRkLmNvbmYKK3RlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKK3dpdGgKK3RlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvYmxhaAorCisyKSBDcmVhdGUgdGhlIGZpbGUgL2JsYWggd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzIHRvIHN0YXJ0IHRyYWNpbmcgdGVsbmV0ZCAKKyMhL2Jpbi9iYXNoCisvdXNyL2Jpbi9zdHJhY2UgLW8vdDEgLWYgL3Vzci9zYmluL2luLnRlbG5ldGQgLWggCiszKSBjaG1vZCA3MDAgL2JsYWggdG8gbWFrZSBpdCBleGVjdXRhYmxlIG9ubHkgdG8gcm9vdAorNCkKK2tpbGxhbGwgLUhVUCBpbmV0ZAorb3IgcHMgYXV4IHwgZ3JlcCBpbmV0ZAorZ2V0IGluZXRkJ3MgcHJvY2VzcyBpZAorJiBraWxsIC1IVVAgaW5ldGQgdG8gcmVzdGFydCBpdC4KKworSW1wb3J0YW50IG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tCistbyBpcyB1c2VkIHRvIHRlbGwgc3RyYWNlIHRvIG91dHB1dCB0byBhIGZpbGUgaW4gb3VyIGNhc2UgdDEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5CistZiBpcyB0byBmb2xsb3cgY2hpbGRyZW4gaS5lLgorZS5nIGluIG91ciBjYXNlIGFib3ZlIHRlbG5ldGQgd2lsbCBzdGFydCB0aGUgbG9naW4gcHJvY2VzcyAmIHN1YnNlcXVlbnRseSBhIHNoZWxsIGxpa2UgYmFzaC4KK1lvdSB3aWxsIGJlIGFibGUgdG8gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBwcm9jZXNzIElEJ3MgbGlzdGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZQorb2YgdGhlIHN0cmFjZSBvdXRwdXQuCistcDxwaWQ+IHdpbGwgdGVsbCBzdHJhY2UgdG8gYXR0YWNoIHRvIGEgcnVubmluZyBwcm9jZXNzLCB5dXAgdGhpcyBjYW4gYmUgZG9uZSBwcm92aWRlZAorIGl0IGlzbid0IGJlaW5nIHRyYWNlZCBvciBkZWJ1Z2dlZCBhbHJlYWR5ICYgeW91IGhhdmUgZW5vdWdoIHByaXZpbGVnZXMsCit0aGUgcmVhc29uIDIgcHJvY2Vzc2VzIGNhbm5vdCB0cmFjZSBvciBkZWJ1ZyB0aGUgc2FtZSBwcm9ncmFtIGlzIHRoYXQgc3RyYWNlCitiZWNvbWVzIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgb25lIGJlaW5nIGRlYnVnZ2VkICYgcHJvY2Vzc2VzICggdW5saWtlIHBlb3BsZSApCitjYW4gaGF2ZSBvbmx5IG9uZSBwYXJlbnQuCisKKworSG93ZXZlciB0aGUgZmlsZSAvdDEgd2lsbCBnZXQgYmlnIHF1aXRlIHF1aWNrbHkKK3RvIHRlc3QgaXQgdGVsbmV0IDEyNy4wLjAuMQorCitub3cgbG9vayBhdCB3aGF0IGZpbGVzIGluLnRlbG5ldGQgZXhlY3ZlJ2QKKzQxMyAgIGV4ZWN2ZSgiL3Vzci9zYmluL2luLnRlbG5ldGQiLCBbIi91c3Ivc2Jpbi9pbi50ZWxuZXRkIiwgIi1oIl0sIFsvKiAxNyB2YXJzICovXSkgPSAwCis0MTQgICBleGVjdmUoIi9iaW4vbG9naW4iLCBbIi9iaW4vbG9naW4iLCAiLWgiLCAibG9jYWxob3N0IiwgIi1wIl0sIFsvKiAyIHZhcnMgKi9dKSA9IDAgCisKK1doZXkgaXQgd29ya2VkIS4KKworCitPdGhlciBoaW50czoKKy0tLS0tLS0tLS0tLQorSWYgdGhlIHByb2dyYW0gaXMgbm90IHZlcnkgaW50ZXJhY3RpdmUgKCBpLmUuIG5vdCBtdWNoIGtleWJvYXJkIGlucHV0ICkKKyYgaXMgY3Jhc2hpbmcgaW4gb25lIGFyY2hpdGVjdHVyZSBidXQgbm90IGluIGFub3RoZXIgeW91IGNhbiBkbyAKK2FuIHN0cmFjZSBvZiBib3RoIHByb2dyYW1zIHVuZGVyIGFzIGlkZW50aWNhbCBhIHNjZW5hcmlvIGFzIHlvdSBjYW4KK29uIGJvdGggYXJjaGl0ZWN0dXJlcyBvdXRwdXR0aW5nIHRvIGEgZmlsZSB0aGVuLgorZG8gYSBkaWZmIG9mIHRoZSB0d28gdHJhY2VzIHVzaW5nIHRoZSBkaWZmIHByb2dyYW0KK2kuZS4KK2RpZmYgb3V0cHV0MSBvdXRwdXQyCismIG1heWJlIHlvdSdsbCBiZSBhYmxlIHRvIHNlZSB3aGVyZSB0aGUgY2FsbCBwYXRocyBkaWZmZXJlZCwgdGhpcworaXMgcG9zc2libHkgbmVhciB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoLiAKKworTW9yZSBpbmZvCistLS0tLS0tLS0KK0xvb2sgYXQgbWFuIHBhZ2VzIGZvciBzdHJhY2UgJiB0aGUgdmFyaW91cyBzeXNjYWxscworZS5nLiBtYW4gc3RyYWNlLCBtYW4gYWxhcm0sIG1hbiBzb2NrZXQuCisKKworUGVyZm9ybWFuY2UgRGVidWdnaW5nCis9PT09PT09PT09PT09PT09PT09PT0KK2djYyBpcyBjYXBpYmxlIG9mIGNvbXBpbGluZyBpbiBwcm9maWxpbmcgY29kZSBqdXN0IGFkZCB0aGUgLXAgb3B0aW9uCit0byB0aGUgQ0ZMQUdTLCB0aGlzIG9idmlvdXNseSBhZmZlY3RzIHByb2dyYW0gc2l6ZSAmIHBlcmZvcm1hbmNlLgorVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZ3Byb2YgZ251IHByb2ZpbGluZyB0b29sIG9yIHRoZQorZ2NvdiB0aGUgZ251IGNvZGUgY292ZXJhZ2UgdG9vbCAoIGNvZGUgY292ZXJhZ2UgaXMgYSBtZWFucyBvZiB0ZXN0aW5nCitjb2RlIHF1YWxpdHkgYnkgY2hlY2tpbmcgaWYgYWxsIHRoZSBjb2RlIGluIGFuIGV4ZWN1dGFibGUgaW4gZXhlcmNpc2VkIGJ5CithIHRlc3RlciApLgorCisKK1VzaW5nIHRvcCB0byBmaW5kIG91dCB3aGVyZSBwcm9jZXNzZXMgYXJlIHNsZWVwaW5nIGluIHRoZSBrZXJuZWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGRvIHRoaXMgY29weSB0aGUgU3lzdGVtLm1hcCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB3aGVyZQordGhlIGxpbnV4IGtlcm5lbCB3YXMgYnVpbHQgdG8gdGhlIC9ib290IGRpcmVjdG9yeSBvbiB5b3VyIAorbGludXggbWFjaGluZS4KK1N0YXJ0IHRvcAorTm93IHR5cGUgZlU8cmV0dXJuPgorWW91IHNob3VsZCBzZWUgYSBuZXcgZmllbGQgY2FsbGVkIFdDSEFOIHdoaWNoCit0ZWxscyB5b3Ugd2hlcmUgZWFjaCBwcm9jZXNzIGlzIHNsZWVwaW5nIGhlcmUgaXMgYSB0eXBpY2FsIG91dHB1dC4KKyAKKyA2OjU5cG0gIHVwIDQxIG1pbiwgIDEgdXNlciwgIGxvYWQgYXZlcmFnZTogMC4wMCwgMC4wMCwgMC4wMAorMjggcHJvY2Vzc2VzOiAyNyBzbGVlcGluZywgMSBydW5uaW5nLCAwIHpvbWJpZSwgMCBzdG9wcGVkCitDUFUgc3RhdGVzOiAgMC4wJSB1c2VyLCAgMC4xJSBzeXN0ZW0sICAwLjAlIG5pY2UsIDk5LjglIGlkbGUKK01lbTogICAyNTQ5MDBLIGF2LCAgIDQ1OTc2SyB1c2VkLCAgMjA4OTI0SyBmcmVlLCAgICAgICAwSyBzaHJkLCAgIDI4NjM2SyBidWZmCitTd2FwOiAgICAgICAwSyBhdiwgICAgICAgMEsgdXNlZCwgICAgICAgMEsgZnJlZSAgICAgICAgICAgICAgICAgICAgODYyMEsgY2FjaGVkCisKKyAgUElEIFVTRVIgICAgIFBSSSAgTkkgIFNJWkUgIFJTUyBTSEFSRSBXQ0hBTiAgICAgU1RBVCAgTElCICVDUFUgJU1FTSAgIFRJTUUgQ09NTUFORAorICA3NTAgcm9vdCAgICAgIDEyICAgMCAgIDg0OCAgODQ4ICAgNzAwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMSAgMC4zICAgMDowMCBpbi50ZWxuZXRkCisgIDc2NyByb290ICAgICAgMTYgICAwICAxMTQwIDExNDAgICA5NjQgICAgICAgICAgIFIgICAgICAgMCAgMC4xICAwLjQgICAwOjAwIHRvcAorICAgIDEgcm9vdCAgICAgICA4ICAgMCAgIDIxMiAgMjEyICAgMTgwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMCAgMC4wICAgMDowMCBpbml0CisgICAgMiByb290ICAgICAgIDkgICAwICAgICAwICAgIDAgICAgIDAgZG93bl9pbnRlIFNXICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGttY2hlY2sKKworVGhlIHRpbWUgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLQorQW5vdGhlciByZWxhdGVkIGNvbW1hbmQgaXMgdGhlIHRpbWUgY29tbWFuZCB3aGljaCBnaXZlcyB5b3UgYW4gaW5kaWNhdGlvbgorb2Ygd2hlcmUgYSBwcm9jZXNzIGlzIHNwZW5kaW5nIHRoZSBtYWpvcml0eSBvZiBpdHMgdGltZS4KK2UuZy4KK3RpbWUgcGluZyAtYyA1IG5jCitvdXRwdXRzCityZWFsCTBtNC4wNTRzCit1c2VyCTBtMC4wMTBzCitzeXMJMG0wLjAxMHMKKworRGVidWdnaW5nIHVuZGVyIFZNCis9PT09PT09PT09PT09PT09PT0KKworTm90ZXMKKy0tLS0tCitBZGRyZXNzZXMgJiB2YWx1ZXMgaW4gdGhlIFZNIGRlYnVnZ2VyIGFyZSBhbHdheXMgaGV4IG5ldmVyIGRlY2ltYWwKK0FkZHJlc3MgcmFuZ2VzIGFyZSBvZiB0aGUgZm9ybWF0IDxIZXhWYWx1ZTE+LTxIZXhWYWx1ZTI+IG9yIDxIZXhWYWx1ZTE+LjxIZXhWYWx1ZTI+IAorZS5nLiBUaGUgYWRkcmVzcyByYW5nZSAgMHgyMDAwIHRvIDB4MzAwMCBjYW4gYmUgZGVzY3JpYmVkIGRlc2NyaWJlZCBhcworMjAwMC0zMDAwIG9yIDIwMDAuMTAwMAorCitUaGUgVk0gRGVidWdnZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KKworVk0ncyBzdHJlbmd0aHMgYXJlIHVzdWFsbHkgb3RoZXIgZGVidWdnZXJzIHdlYWtuZXNzZXMgeW91IGNhbiBnZXQgYXQgYW55IHJlc291cmNlCitubyBtYXR0ZXIgaG93IHNlbnNpdGl2ZSBlLmcuIG1lbW9yeSBtYW5hZ2VtZW50IHJlc291cmNlcyxjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbgoraW4gdGhlIFBTVy4gRm9yIGtlcm5lbCBoYWNraW5nIHlvdSB3aWxsIHJlYXAgZGl2aWRlbmRzIGlmIHlvdSBnZXQgZ29vZCBhdCBpdC4KKworVGhlIFZNIERlYnVnZ2VyIGRpc3BsYXlzIG9wZXJhdG9ycyBidXQgbm90IG9wZXJhbmRzLCBwcm9iYWJseSBiZWNhdXNlIHNvbWUKK29mIGl0IHdhcyB3cml0dGVuIHdoZW4gbWVtb3J5IHdhcyBleHBlbnNpdmUgJiB0aGUgcHJvZ3JhbW1lciB3YXMgcHJvYmFibHkgcHJvdWQgdGhhdAoraXQgZml0dGVkIGludG8gMmsgb2YgbWVtb3J5ICYgdGhlIHByb2dyYW1tZXJzICYgZGlkbid0IHdhbnQgdG8gc2hvY2sgaGFyZGNvcmUgVk0nZXJzIGJ5CitjaGFuZ2luZyB0aGUgaW50ZXJmYWNlIDotKSwgYWxzbyB0aGUgZGVidWdnZXIgZGlzcGxheXMgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUgJiAKK3RoZSBhdXRob3Igb2YgdGhlIGNvZGUgcHJvYmFibHkgZmVsdCB0aGF0IGl0IHdhcyBhIGdvb2QgaWRlYSBub3QgdG8gZ28gb3ZlciAKK3RoZSA4MCBjb2x1bW5zIG9uIHRoZSBzY3JlZW4uIAorCitBcyBzb21lIG9mIHlvdSBhcmUgcHJvYmFibHkgaW4gYSBwYW5pYyBub3cgdGhpcyBpc24ndCBhcyB1bmludHVpdGl2ZSBhcyBpdCBtYXkgc2VlbQorYXMgdGhlIDM5MCBpbnN0cnVjdGlvbnMgYXJlIGVhc3kgdG8gZGVjb2RlIG1lbnRhbGx5ICYgeW91IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhdCBhIGxvdCAKK29mIHRoZW0gYXMgYWxsIHRoZSBvcGVyYW5kcyBhcmUgbmliYmxlICggaGFsZiBieXRlIGFsaWduZWQgKSAmIGlmIHlvdSBoYXZlIGFuIG9iamR1bXAgbGlzdGluZworYWxzbyBpdCBpcyBxdWl0ZSBlYXN5IHRvIGZvbGxvdywgaWYgeW91IGRvbid0IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nIGtlZXAgYSBjb3B5IG9mCit0aGUgcy8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgJiBsb29rIGF0IGJldHdlZW4gcGFnZXMgMiAmIDcgb3IgYWx0ZXJuYXRpdmVseSB0aGUKK3MvMzkwIHByaW5jaXBsZXMgb2Ygb3BlcmF0aW9uLgorZS5nLiBldmVuIEkgY2FuIGd1ZXNzIHRoYXQgCiswMDAxQUZGOCcgTFIgICAgMTgwRiAgICAgICAgQ0MgMAoraXMgYSAoIGxvYWQgcmVnaXN0ZXIgKSBsciByMCxyMTUgCisKK0Fsc28gaXQgaXMgdmVyeSBlYXN5IHRvIHRlbGwgdGhlIGxlbmd0aCBvZiBhIDM5MCBpbnN0cnVjdGlvbiBmcm9tIHRoZSAyIG1vc3Qgc2lnbmlmaWNhbnQKK2JpdHMgaW4gdGhlIGluc3RydWN0aW9uICggbm90IHRoYXQgdGhpcyBpbmZvIGlzIHJlYWxseSB1c2VmdWwgZXhjZXB0IGlmIHlvdSBhcmUgdHJ5aW5nIHRvCittYWtlIHNlbnNlIG9mIGEgaGV4ZHVtcCBvZiBjb2RlICkuCitIZXJlIGlzIGEgdGFibGUKK0JpdHMgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIExlbmd0aAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswMCAgICAgICAgICAgICAgICAgICAgICAgICAgMiBCeXRlcworMDEgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKKzEwICAgICAgICAgICAgICAgICAgICAgICAgICA0IEJ5dGVzCisxMSAgICAgICAgICAgICAgICAgICAgICAgICAgNiBCeXRlcworCisKKworCitUaGUgZGVidWdnZXIgYWxzbyBkaXNwbGF5cyBvdGhlciB1c2VmdWwgaW5mbyBvbiB0aGUgc2FtZSBsaW5lIHN1Y2ggYXMgdGhlCithZGRyZXNzZXMgYmVpbmcgb3BlcmF0ZWQgb24gZGVzdGluYXRpb24gYWRkcmVzc2VzIG9mIGJyYW5jaGVzICYgY29uZGl0aW9uIGNvZGVzLgorZS5nLiAgCiswMDAxOTczNicgQUhJICAgQTdEQUZGMEUgICAgQ0MgMQorMDAwMTk4QkEnIEJSQyAgIEE3ODQwMDA0IC0+IDAwMDE5OEMyJyAgIENDIDAKKzAwMDE5OENFJyBTVE0gICA5MDBFRjA2OCA+PiAwRkE5NUU3OCAgICBDQyAyCisKKworCitVc2VmdWwgVk0gZGVidWdnZXIgY29tbWFuZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIHN1cHBvc2UgSSdkIGJldHRlciBtZW50aW9uIHRoaXMgYmVmb3JlIEkgc3RhcnQKK3RvIGxpc3QgdGhlIGN1cnJlbnQgYWN0aXZlIHRyYWNlcyBkbyAKK1EgVFIKK3RoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjU1IG9mIHRoZXNlIHBlciBzZXQKKyggbW9yZSBhYm91dCB0cmFjZSBzZXRzIGxhdGVyICkuCitUbyBzdG9wIHRyYWNlcyBpc3N1ZSBhCitUUiBFTkQuCitUbyBkZWxldGUgYSBwYXJ0aWN1bGFyIGJyZWFrcG9pbnQgaXNzdWUKK1RSIERFTCA8YnJlYWtwb2ludCBudW1iZXI+CisKK1RoZSBQQTEga2V5IGRyb3BzIHRvIENQIG1vZGUgc28geW91IGNhbiBpc3N1ZSBkZWJ1Z2dlciBjb21tYW5kcywKK0RvaW5nIGFsdCBjIChvbiBteSAzMjcwIGNvbnNvbGUgYXQgbGVhc3QgKSBjbGVhcnMgdGhlIHNjcmVlbi4gCitoaXR0aW5nIGIgPGVudGVyPiBjb21lcyBiYWNrIHRvIHRoZSBydW5uaW5nIG9wZXJhdGluZyBzeXN0ZW0KK2Zyb20gY3AgbW9kZSAoIGluIG91ciBjYXNlIGxpbnV4ICkuCitJdCBpcyB0eXBpY2FsbHkgdXNlZnVsIHRvIGFkZCBzaG9ydGN1dHMgdG8geW91ciBwcm9maWxlLmV4ZWMgZmlsZQoraWYgeW91IGhhdmUgb25lICggdGhpcyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYXV0b2V4ZWMuYmF0IGluIERPUyApLgorZmlsZSBoZXJlIGFyZSBhIGZldyBmcm9tIG1pbmUuCisvKiB0aGlzIGdpdmVzIG1lIGNvbW1hbmQgaGlzdG9yeSBvbiBpc3N1aW5nIGYxMiAqLworc2V0IHBmMTIgcmV0cmlldmUgCisvKiB0aGlzIGNvbnRpbnVlcyAqLworc2V0IHBmOCBpbW0gYgorLyogZ29lcyB0byB0cmFjZSBzZXQgYSAqLworc2V0IHBmMSBpbW0gdHIgZ290byBhCisvKiBnb2VzIHRvIHRyYWNlIHNldCBiICovCitzZXQgcGYyIGltbSB0ciBnb3RvIGIKKy8qIGdvZXMgdG8gdHJhY2Ugc2V0IGMgKi8KK3NldCBwZjMgaW1tIHRyIGdvdG8gYworCisKKworSW5zdHJ1Y3Rpb24gVHJhY2luZworLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0dGluZyBhIHNpbXBsZSBicmVha3BvaW50CitUUiBJIFBTV0EgPGFkZHJlc3M+CitUbyBkZWJ1ZyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdHJ5CitUUiBJIFIgPGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2U+CitUUiBJIG9uIGl0cyBvd24gd2lsbCBzaW5nbGUgc3RlcC4KK1RSIEkgREFUQSA8TU5FTU9OSUM+IDxPUFRJT05BTCBSQU5HRT4gd2lsbCB0cmFjZSBmb3IgcGFydGljdWxhciBtbmVtb25pY3MKK2UuZy4KK1RSIEkgREFUQSA0RCBSIDAxOTdCQy40MDAwCit3aWxsIHRyYWNlIGZvciBCQVMnZXMgKCBvcGNvZGUgNEQgKSBpbiB0aGUgcmFuZ2UgMDE5N0JDLjQwMDAKK2lmIHlvdSB3ZXJlIGluY2xpbmVkIHlvdSBjb3VsZCBhZGQgdHJhY2VzIGZvciBhbGwgYnJhbmNoIGluc3RydWN0aW9ucyAmCitzdWZmaXggdGhlbSB3aXRoIHRoZSBydW4gcHJlZml4IHNvIHlvdSB3b3VsZCBoYXZlIGEgYmFja3RyYWNlIG9uIHNjcmVlbiAKK3doZW4gYSBwcm9ncmFtIGNyYXNoZXMuCitUUiBCUiA8SU5UTyBPUiBGUk9NPiB3aWxsIHRyYWNlIGJyYW5jaGVzIGludG8gb3Igb3V0IG9mIGFuIGFkZHJlc3MuCitlLmcuCitUUiBCUiBJTlRPIDAgaXMgb2Z0ZW4gcXVpdGUgdXNlZnVsIGlmIGEgcHJvZ3JhbSBpcyBnZXR0aW5nIGF3a3dhcmQgJiBkZWNpZGluZwordG8gYnJhbmNoIHRvIDAgJiBjcmFzaGluZyBhcyB0aGlzIHdpbGwgc3RvcCBhdCB0aGUgYWRkcmVzcyBiZWZvcmUgaW4ganVtcHMgdG8gMC4KK1RSIEkgUiA8YWRkcmVzcyByYW5nZT4gUlVOIGNtZCBkIGcKK3NpbmdsZSBzdGVwcyBhIHJhbmdlIG9mIGFkZHJlc3NlcyBidXQgc3RheXMgcnVubmluZyAmCitkaXNwbGF5cyB0aGUgZ3BycyBvbiBlYWNoIHN0ZXAuCisKKworCitEaXNwbGF5aW5nICYgbW9kaWZ5aW5nIFJlZ2lzdGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0QgRyB3aWxsIGRpc3BsYXkgYWxsIHRoZSBncHJzCitBZGRpbmcgYSBleHRyYSBHIHRvIGFsbCB0aGUgY29tbWFuZHMgaXMgbmVjZXNzYXJ5IHRvIGFjY2VzcyB0aGUgZnVsbCA2NCBiaXQgCitjb250ZW50IGluIFZNIG9uIHovQXJjaGl0ZWN0dXJlIG9idmlvdXNseSB0aGlzIGlzbid0IHJlcXVpcmVkIGZvciBhY2Nlc3MgcmVnaXN0ZXJzCithcyB0aGVzZSBhcmUgc3RpbGwgMzIgYml0LgorZS5nLiBER0cgaW5zdGVhZCBvZiBERyAKK0QgWCB3aWxsIGRpc3BsYXkgYWxsIHRoZSBjb250cm9sIHJlZ2lzdGVycworRCBBUiB3aWxsIGRpc3BsYXkgYWxsIHRoZSBhY2Nlc3MgcmVnaXN0ZXJzCitEIEFSNC03IHdpbGwgZGlzcGxheSBhY2Nlc3MgcmVnaXN0ZXJzIDQgdG8gNworQ1BVIEFMTCBEIEcgd2lsbCBkaXNwbGF5IHRoZSBHUlBTIG9mIGFsbCBDUFVTIGluIHRoZSBjb25maWd1cmF0aW9uCitEIFBTVyB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgUFNXCitzdCBQU1cgMjAwMCB3aWxsIHB1dCB0aGUgdmFsdWUgMjAwMCBpbnRvIHRoZSBQU1cgJgorY2F1c2UgY3Jhc2ggeW91ciBtYWNoaW5lLgorRCBQUkVGSVggZGlzcGxheXMgdGhlIHByZWZpeCBvZmZzZXQKKworCitEaXNwbGF5aW5nIE1lbW9yeQorLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGRpc3BsYXkgbWVtb3J5IG1hcHBlZCB1c2luZyB0aGUgY3VycmVudCBQU1cncyBtYXBwaW5nIHRyeQorRCA8cmFuZ2U+CitUbyBtYWtlIFZNIGRpc3BsYXkgYSBtZXNzYWdlIGVhY2ggdGltZSBpdCBoaXRzIGEgcGFydGljdWxhciBhZGRyZXNzICYgY29udGludWUgdHJ5CitEIEk8cmFuZ2U+IHdpbGwgZGlzYXNzZW1ibGUvZGlzcGxheSBhIHJhbmdlIG9mIGluc3RydWN0aW9ucy4KK1NUIGFkZHIgMzIgYml0IHdvcmQgd2lsbCBzdG9yZSBhIDMyIGJpdCBhbGlnbmVkIGFkZHJlc3MKK0QgVDxyYW5nZT4gd2lsbCBkaXNwbGF5IHRoZSBFQkNESUMgaW4gYW4gYWRkcmVzcyAoIGlmIHlvdSBhcmUgdGhhdCB3YXkgaW5jbGluZWQgKQorRCBSPHJhbmdlPiB3aWxsIGRpc3BsYXkgcmVhbCBhZGRyZXNzZXMgKCB3aXRob3V0IERBVCApIGJ1dCB3aXRoIHByZWZpeGluZy4KK1RoZXJlIGFyZSBvdGhlciBjb21wbGV4IG9wdGlvbnMgdG8gZGlzcGxheSBpZiB5b3UgbmVlZCB0byBnZXQgYXQgc2F5IGhvbWUgc3BhY2UKK2J1dCBhcmUgaW4gcHJpbWFyeSBzcGFjZSB0aGUgZWFzaWVzdCB0aGluZyB0byBkbyBpcyB0byB0ZW1wb3JhcmlseQorbW9kaWZ5IHRoZSBQU1cgdG8gdGhlIG90aGVyIGFkZHJlc3NpbmcgbW9kZSwgZGlzcGxheSB0aGUgc3R1ZmYgJiB0aGVuCityZXN0b3JlIGl0LgorCisKKyAKK0hpbnRzCistLS0tLQorSWYgeW91IHdhbnQgdG8gaXNzdWUgYSBkZWJ1Z2dlciBjb21tYW5kIHdpdGhvdXQgaGFsdGluZyB5b3VyIHZpcnR1YWwgbWFjaGluZSB3aXRoIHRoZQorUEExIGtleSB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggI0NQIGUuZy4KKyNjcCB0ciBpIHBzd2EgMjAwMAorYWxzbyBzdWZmaXhpbmcgbW9zdCBkZWJ1Z2dlciBjb21tYW5kcyB3aXRoIFJVTiB3aWxsIGNhdXNlIHRoZW0gbm90Cit0byBzdG9wIGp1c3QgZGlzcGxheSB0aGUgbW5lbW9uaWMgYXQgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gb24gdGhlIGNvbnNvbGUuCitJZiB5b3UgaGF2ZSBzZXZlcmFsIGJyZWFrcG9pbnRzIHlvdSB3YW50IHRvIHB1dCBpbnRvIHlvdXIgcHJvZ3JhbSAmCit5b3UgZ2V0IGZlZCB1cCBvZiBjcm9zcyByZWZlcmVuY2luZyB3aXRoIFN5c3RlbS5tYXAKK3lvdSBjYW4gZG8gdGhlIGZvbGxvd2luZyB0cmljayBmb3Igc2V2ZXJhbCBzeW1ib2xzLgorZ3JlcCBkb19zaWduYWwgU3lzdGVtLm1hcCAKK3doaWNoIGVtaXRzIHRoZSBmb2xsb3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzCiswMDAxZjRlMCBUIGRvX3NpZ25hbCAKK25vdyB5b3UgY2FuIGRvCisKK1RSIEkgUFNXQSAwMDAxZjRlMCBjbWQgbXNnICogZG9fc2lnbmFsCitUaGlzIHNlbmRzIGEgbWVzc2FnZSB0byB5b3VyIG93biBjb25zb2xlIGVhY2ggdGltZSBkb19zaWduYWwgaXMgZW50ZXJlZC4KKyggQXMgYW4gYXNpZGUgSSB3cm90ZSBhIHBlcmwgc2NyaXB0IG9uY2Ugd2hpY2ggYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYSBSRVhYCitzY3JpcHQgd2l0aCBicmVha3BvaW50cyBvbiBldmVyeSBrZXJuZWwgcHJvY2VkdXJlLCB0aGlzIGlzbid0IGEgZ29vZCBpZGVhCitiZWNhdXNlIHRoZXJlIGFyZSB0aG91c2FuZHMgb2YgdGhlc2Ugcm91dGluZXMgJiBWTSBjYW4gb25seSBzZXQgMjU1IGJyZWFrcG9pbnRzCithdCBhIHRpbWUgc28geW91IG5lYXJseSBoYWQgdG8gc3BlbmQgYXMgbG9uZyBwcnVuaW5nIHRoZSBmaWxlIGRvd24gYXMgeW91IHdvdWxkIAorZW50ZXJpbmcgdGhlIG1zZydzIGJ5IGhhbmQgKSxob3dldmVyLCB0aGUgdHJpY2sgbWlnaHQgYmUgdXNlZnVsIGZvciBhIHNpbmdsZSBvYmplY3QgZmlsZS4KK09uIGxpbnV4J2VzIDMyNzAgZW11bGF0b3IgeDMyNzAgdGhlcmUgaXMgYSB2ZXJ5IHVzZWZ1bCBvcHRpb24gdW5kZXIgdGhlIGZpbGUgbWVudAorU2F2ZSBTY3JlZW5zIEluIEZpbGUgdGhpcyBpcyB2ZXJ5IGdvb2Qgb2Yga2VlcGluZyBhIGNvcHkgb2YgdHJhY2VzLiAKKworRnJvbSBDTVMgaGVscCA8Y29tbWFuZCBuYW1lPiB3aWxsIGdpdmUgeW91IG9ubGluZSBoZWxwIG9uIGEgcGFydGljdWxhciBjb21tYW5kLiAKK2UuZy4gCitIRUxQIERJU1BMQVkKKworQWxzbyBDUCBoYXMgYSBmaWxlIGNhbGxlZCBwcm9maWxlLmV4ZWMgd2hpY2ggYXV0b21hdGljYWxseSBnZXRzIGNhbGxlZAorb24gc3RhcnR1cCBvZiBDTVMgKCBsaWtlIGF1dG9leGVjLmJhdCApLCBrZWVwaW5nIG9uIGEgRE9TIGFuYWxvZ3kgc2Vzc2lvbgorQ1AgaGFzIGEgZmVhdHVyZSBzaW1pbGFyIHRvIGRvc2tleSwgaXQgbWF5IGJlIHVzZWZ1bCBmb3IgeW91IHRvCit1c2UgcHJvZmlsZS5leGVjIHRvIGRlZmluZSBzb21lIGtleXN0cm9rZXMuIAorZS5nLgorU0VUIFBGOSBJTU0gQgorVGhpcyBkb2VzIGEgc2luZ2xlIHN0ZXAgaW4gVk0gb24gcHJlc3NpbmcgRjguIAorU0VUIFBGMTAgIF4KK1RoaXMgc2V0cyB1cCB0aGUgXiBrZXkuCit3aGljaCBjYW4gYmUgdXNlZCBmb3IgXmMgKGN0cmwtYyksXnogKGN0cmwteikgd2hpY2ggY2FuJ3QgYmUgdHlwZWQgZGlyZWN0bHkgaW50byBzb21lIDMyNzAgY29uc29sZXMuCitTRVQgUEYxMSBeLQorVGhpcyB0eXBlcyB0aGUgc3RhcnRpbmcga2V5c3Ryb2tlcyBmb3IgYSBzeXNycSBzZWUgU3lzUnEgYmVsb3cuCitTRVQgUEYxMiBSRVRSSUVWRQorVGhpcyByZXRyaWV2ZXMgY29tbWFuZCBoaXN0b3J5IG9uIHByZXNzaW5nIEYxMi4KKworCitTb21ldGltZXMgaW4gVk0gdGhlIGRpc3BsYXkgaXMgc2V0IHVwIHRvIHNjcm9sbCBhdXRvbWF0aWNhbGx5IHRoaXMKK2NhbiBiZSB2ZXJ5IGFubm95aW5nIGlmIHRoZXJlIGFyZSBtZXNzYWdlcyB5b3Ugd2lzaCB0byBsb29rIGF0Cit0byBzdG9wIHRoaXMgZG8KK1RFUk0gTU9SRSAyNTUgMjU1CitUaGlzIHdpbGwgbmVhcmx5IHN0b3AgYXV0b21hdGljIHNjcmVlbiB1cGRhdGVzLCBob3dldmVyIGl0IHdpbGwKK2NhdXNlIGEgZGVuaWFsIG9mIHNlcnZpY2UgaWYgbG90cyBvZiBtZXNzYWdlcyBnbyB0byB0aGUgMzI3MCBjb25zb2xlLAorc28gaXQgd291bGQgYmUgZm9vbGlzaCB0byB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBvbiBhIHByb2R1Y3Rpb24gbWFjaGluZS4KKyAKKworVHJhY2luZyBwYXJ0aWN1bGFyIHByb2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGtlcm5lbCdzIHRleHQgc2VnbWVudCBpcyBpbnRlbnRpb25hbGx5IGF0IGFuIGFkZHJlc3MgaW4gbWVtb3J5IHRoYXQgaXQgd2lsbAordmVyeSBzZWxkb20gY29sbGlkZSB3aXRoIHRleHQgc2VnbWVudHMgb2YgdXNlciBwcm9ncmFtcyAoIHRoYW5rcyBNYXJ0aW4gKSwKK3RoaXMgc2ltcGxpZmllcyBkZWJ1Z2dpbmcgdGhlIGtlcm5lbC4KK0hvd2V2ZXIgaXQgaXMgcXVpdGUgY29tbW9uIGZvciB1c2VyIHByb2Nlc3NlcyB0byBoYXZlIGFkZHJlc3NlcyB3aGljaCBjb2xsaWRlCit0aGlzIGNhbiBtYWtlIGRlYnVnZ2luZyBhIHBhcnRpY3VsYXIgcHJvY2VzcyB1bmRlciBWTSBwYWluZnVsIHVuZGVyIG5vcm1hbAorY2lyY3Vtc3RhbmNlcyBhcyB0aGUgcHJvY2VzcyBtYXkgY2hhbmdlIHdoZW4gZG9pbmcgYSAKK1RSIEkgUiA8YWRkcmVzcyByYW5nZT4uCitUaGFua2Z1bGx5IGFmdGVyIHJlYWRpbmcgVk0ncyBvbmxpbmUgaGVscCBJIGZpZ3VyZWQgb3V0IGhvdyB0byBkZWJ1ZworSSBwYXJ0aWN1bGFyIHByb2Nlc3MuCisKK1lvdXIgZmlyc3QgcHJvYmxlbSBpcyB0byBmaW5kIHRoZSBTVEQgKCBzZWdtZW50IHRhYmxlIGRlc2lnbmF0aW9uICkKK29mIHRoZSBwcm9ncmFtIHlvdSB3aXNoIHRvIGRlYnVnLgorVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB5b3UgY2FuIGRvIHRoaXMgaGVyZSBhcmUgYSBmZXcKKzEpIG9iamR1bXAgLS1zeW1zIDxwcm9ncmFtIHRvIGJlIGRlYnVnZ2VkPiB8IGdyZXAgbWFpbgorVG8gZ2V0IHRoZSBhZGRyZXNzIG9mIG1haW4gaW4gdGhlIHByb2dyYW0uCit0ciBpIHBzd2EgPGFkZHJlc3Mgb2YgbWFpbj4KK1N0YXJ0IHRoZSBwcm9ncmFtLCBpZiBWTSBkcm9wcyB0byBDUCBvbiB3aGF0IGxvb2tzIGxpa2UgdGhlIGVudHJ5Citwb2ludCBvZiB0aGUgbWFpbiBmdW5jdGlvbiB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBwcm9jZXNzIHlvdSB3aXNoIHRvIGRlYnVnLgorTm93IGRvIGEgRCBYMTMgb3IgRCBYRzEzIG9uIHovQXJjaGl0ZWN0dXJlLgorT24gMzEgYml0IHRoZSBTVEQgaXMgYml0cyAxLTE5ICggdGhlIFNUTyBzZWdtZW50IHRhYmxlIG9yaWdpbiApIAorJiAyNS0zMSAoIHRoZSBTVEwgc2VnbWVudCB0YWJsZSBsZW5ndGggKSBvZiBDUjEzLgorbm93IHR5cGUKK1RSIEkgUiBTVEQgPENSMTMncyB2YWx1ZT4gMC43ZmZmZmZmZgorZS5nLgorVFIgSSBSIFNURCA4RjMyRTFGRiAwLjdmZmZmZmZmCitBbm90aGVyIHZlcnkgdXNlZnVsIHZhcmlhdGlvbiBpcworVFIgU1RPUkUgSU5UTyBTVEQgPENSMTMncyB2YWx1ZT4gPGFkZHJlc3MgcmFuZ2U+Citmb3IgZmluZGluZyBvdXQgd2hlbiBhIHBhcnRpY3VsYXIgdmFyaWFibGUgY2hhbmdlcy4KKworQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIGZpbmRpbmcgdGhlIFNURCBvZiBhIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgCitpcyB0byBkbyB0aGUgZm9sbG93aW5nLCAoIHRoaXMgbWV0aG9kIGlzIG1vcmUgY29tcGxleCBidXQKK2NvdWxkIGJlIHF1aXRlIGNvbnZpZW50IGlmIHlvdSBhcmVuJ3QgdXBkYXRpbmcgdGhlIGtlcm5lbCBtdWNoICYKK3NvIHlvdXIga2VybmVsIHN0cnVjdHVyZXMgd2lsbCBzdGF5IGNvbnN0YW50IGZvciBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCit0aW1lICkuCisKK2dyZXAgdGFzayAvcHJvYy88cGlkPi9zdGF0dXMKK2Zyb20gdGhpcyB5b3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQordGFzazogMGYxNjAwMDAga3NwOiAwZjE2MWRlOCBwdF9yZWdzOiAwZjE2MWY2OAorVGhpcyBub3cgZ2l2ZXMgeW91IGEgcG9pbnRlciB0byB0aGUgdGFzayBzdHJ1Y3R1cmUuCitOb3cgbWFrZSBDQzo9InMzOTAtZ2NjIC1nIiBrZXJuZWwvc2NoZWQucworVG8gZ2V0IHRoZSB0YXNrX3N0cnVjdCBzdGFiaW5mby4KKyggdGFza19zdHJ1Y3QgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmggKS4KK05vdyB3ZSB3YW50IHRvIGxvb2sgYXQKK3Rhc2stPmFjdGl2ZV9tbS0+cGdkCitvbiBteSBtYWNoaW5lIHRoZSBhY3RpdmVfbW0gaW4gdGhlIHRhc2sgc3RydWN0dXJlIHN0YWIgaXMKK2FjdGl2ZV9tbTooNCwxMiksNjcyLDMyCitpdHMgb2Zmc2V0IGlzIDY3Mi84PTg0PTB4NTQKK3RoZSBwZ2QgbWVtYmVyIGluIHRoZSBtbV9zdHJ1Y3Qgc3RhYiBpcworcGdkOig0LDYpPSooMjksNSksOTYsMzIKK3NvIGl0cyBvZmZzZXQgaXMgOTYvOD0xMj0weGMKKworc28gd2UnbGwKK2hleGR1bXAgLXMgMHhmMTYwMDU0IC9kZXYvbWVtIHwgbW9yZQoraS5lLiB0YXNrX3N0cnVjdCthY3RpdmVfbW0gb2Zmc2V0Cit0byBsb29rIGF0IHRoZSBhY3RpdmVfbW0gbWVtYmVyCitmMTYwMDU0IDBmZWUgY2M2MCAwMDE5IGUzMzQgMDAwMCAwMDAwIDAwMDAgMDAxMQoraGV4ZHVtcCAtcyAweDBmZWVjYzZjIC9kZXYvbWVtIHwgbW9yZQoraS5lLiBhY3RpdmVfbW0rcGdkIG9mZnNldAorZmVlY2M2YyAwZjJjIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMSAwMDAwIDAwMTAKK3dlIGdldCBzb21ldGhpbmcgbGlrZQorbm93IGRvIAorVFIgSSBSIFNURCA8cGdkfDB4N2Y+IDAuN2ZmZmZmZmYKK2kuZS4gdGhlIDB4N2YgaXMgYWRkZWQgYmVjYXVzZSB0aGUgcGdkIG9ubHkKK2dpdmVzIHRoZSBwYWdlIHRhYmxlIG9yaWdpbiAmIHdlIG5lZWQgdG8gc2V0IHRoZSBsb3cgYml0cwordG8gdGhlIG1heGltdW0gcG9zc2libGUgc2VnbWVudCB0YWJsZSBsZW5ndGguCitUUiBJIFIgU1REIDBmMmMwMDdmIDAuN2ZmZmZmZmYKK29uIHovQXJjaGl0ZWN0dXJlIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIGRvCitUUiBJIFIgU1REIDxwZ2R8MHg3PiAwLmZmZmZmZmZmZmZmZmZmZmYKK3RvIHNldCB0aGUgVGFibGVUeXBlIHRvIDB4MSAmIHRoZSBUYWJsZSBsZW5ndGggdG8gMy4KKworCisKK1RyYWNpbmcgUHJvZ3JhbSBFeGNlcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGdldCBhIGNyYXNoIHdoaWNoIHNheXMgc29tZXRoaW5nIGxpa2UKK2lsbGVnYWwgb3BlcmF0aW9uIG9yIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIGZvbGxvd2VkIGJ5IGEgcmVnaXN0ZXIgZHVtcAorWW91IGNhbiByZXN0YXJ0IGxpbnV4ICYgdHJhY2UgdGhlc2UgdXNpbmcgdGhlIHRyIHByb2cgPHJhbmdlIG9yIHZhbHVlPiB0cmFjZSBvcHRpb24uCisKKworCitUaGUgbW9zdCBjb21tb24gb25lcyB5b3Ugd2lsbCBub3JtYWxseSBiZSB0cmFjaW5nIGZvciBpcworMT1vcGVyYXRpb24gZXhjZXB0aW9uCisyPXByaXZpbGVnZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbgorND1wcm90ZWN0aW9uIGV4Y2VwdGlvbgorNT1hZGRyZXNzaW5nIGV4Y2VwdGlvbgorNj1zcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbgorMTA9c2VnbWVudCB0cmFuc2xhdGlvbiBleGNlcHRpb24KKzExPXBhZ2UgdHJhbnNsYXRpb24gZXhjZXB0aW9uCisKK1RoZSBmdWxsIGxpc3Qgb2YgdGhlc2UgaXMgb24gcGFnZSAyMiBvZiB0aGUgY3VycmVudCBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeS4KK2UuZy4KK3RyIHByb2cgMTAgd2lsbCB0cmFjZSBzZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbnMuCit0ciBwcm9nIG9uIGl0cyBvd24gd2lsbCB0cmFjZSBhbGwgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZXMuCisKK1RyYWNlIFNldHMKKy0tLS0tLS0tLS0KK09uIHN0YXJ0aW5nIFZNIHlvdSBhcmUgaW5pdGlhbGx5IGluIHRoZSBJTklUSUFMIHRyYWNlIHNldC4KK1lvdSBjYW4gZG8gYSBRIFRSIHRvIHZlcmlmeSB0aGlzLgorSWYgeW91IGhhdmUgYSBjb21wbGV4IHRyYWNpbmcgc2l0dWF0aW9uIHdoZXJlIHlvdSB3aXNoIHRvIHdhaXQgZm9yIGluc3RhbmNlIAordGlsbCBhIGRyaXZlciBpcyBvcGVuIGJlZm9yZSB5b3Ugc3RhcnQgdHJhY2luZyBJTywgYnV0IGtub3cgaW4geW91cgoraGVhcnQgdGhhdCB5b3UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzZXZlcmFsIHJ1bnMgdGhyb3VnaCB0aGUgY29kZSB0aWxsIHlvdQoraGF2ZSBhIGNsdWUgd2hhdHMgZ29pbmcgb24uIAorCitXaGF0IHlvdSBjYW4gZG8gaXMKK1RSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4KK2hpdCBiIHRvIGNvbnRpbnVlIHRpbGwgYnJlYWtwb2ludAorcmVhY2ggdGhlIGJyZWFrcG9pbnQKK25vdyBkbyB5b3VyCitUUiBHT1RPIEIgCitUUiBJTyA3YzA4LTdjMDkgaW5zdCBpbnQgcnVuIAorb3Igd2hhdGV2ZXIgdGhlIElPIGNoYW5uZWxzIHlvdSB3aXNoIHRvIHRyYWNlIGFyZSAmIGhpdCBiCisKK1RvIGdvdCBiYWNrIHRvIHRoZSBpbml0aWFsIHRyYWNlIHNldCBkbworVFIgR09UTyBJTklUSUFMCismIHRoZSBUUiBJIFBTV0EgPERyaXZlciBvcGVuIGFkZHJlc3M+IHdpbGwgYmUgdGhlIG9ubHkgYWN0aXZlIGJyZWFrcG9pbnQgYWdhaW4uCisKKworVHJhY2luZyBsaW51eCBzeXNjYWxscyB1bmRlciBWTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3lzY2FsbHMgYXJlIGltcGxlbWVudGVkIG9uIExpbnV4IGZvciBTMzkwIGJ5IHRoZSBTdXBlcnZpc29yIGNhbGwgaW5zdHJ1Y3Rpb24gKFNWQykgdGhlcmUgMjU2IAorcG9zc2liaWxpdGllcyBvZiB0aGVzZSBhcyB0aGUgaW5zdHJ1Y3Rpb24gaXMgbWFkZSB1cCBvZiBhICAweEEgb3Bjb2RlICYgdGhlIHNlY29uZCBieXRlIGJlaW5nCit0aGUgc3lzY2FsbCBudW1iZXIuIFRoZXkgYXJlIHRyYWNlZCB1c2luZyB0aGUgc2ltcGxlIGNvbW1hbmQuCitUUiBTVkMgIDxPcHRpb25hbCB2YWx1ZSBvciByYW5nZT4KK3RoZSBzeXNjYWxscyBhcmUgZGVmaW5lZCBpbiBsaW51eC9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCitlLmcuIHRvIHRyYWNlIGFsbCBmaWxlIG9wZW5zIGp1c3QgZG8KK1RSIFNWQyA1ICggYXMgdGhpcyBpcyB0aGUgc3lzY2FsbCBudW1iZXIgb2Ygb3BlbiApCisKKworU01QIFNwZWNpZmljIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKK1EgQ1BVUyBkaXNwbGF5cyBhbGwgdGhlIENQVSdzIGF2YWlsYWJsZSB0byB5b3VyIHZpcnR1YWwgbWFjaGluZQorVG8gZmluZCB0aGUgY3B1IHRoYXQgdGhlIGN1cnJlbnQgY3B1IFZNIGRlYnVnZ2VyIGNvbW1hbmRzIGFyZSBiZWluZyBkaXJlY3RlZCBhdCBkbworUSBDUFUgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGNwdSBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCitDUFUgPGRlc2lyZWQgY3B1IG5vPgorCitPbiBhIFNNUCBndWVzdCBpc3N1ZSBhIGNvbW1hbmQgdG8gYWxsIENQVXMgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoIGNwdSBhbGwuCitUbyBpc3N1ZSBhIGNvbW1hbmQgdG8gYSBwYXJ0aWN1bGFyIGNwdSB0cnkgY3B1IDxjcHUgbnVtYmVyPiBlLmcuCitDUFUgMDEgVFIgSSBSIDIwMDAuMzAwMAorSWYgeW91IGFyZSBydW5uaW5nIG9uIGEgZ3Vlc3Qgd2l0aCBzZXZlcmFsIGNwdXMgJiB5b3UgaGF2ZSBhIElPIHJlbGF0ZWQgcHJvYmxlbQorJiBjYW5ub3QgZm9sbG93IHRoZSBmbG93IG9mIGNvZGUgYnV0IHlvdSBrbm93IGl0IGlzbnQgc21wIHJlbGF0ZWQuCitmcm9tIHRoZSBiYXNoIHByb21wdCBpc3N1ZQorc2h1dGRvd24gLWggbm93IG9yIGhhbHQuCitkbyBhIFEgQ1BVUyB0byBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlCitkZXRhY2ggZWFjaCBvbmUgb2YgdGhlbSBmcm9tIGNwIGV4Y2VwdCBjcHUgMCAKK2J5IGlzc3VpbmcgYSAKK0RFVEFDSCBDUFUgMDEtKG51bWJlciBvZiBjcHVzIGluIGNvbmZpZ3VyYXRpb24pCismIGJvb3QgbGludXggYWdhaW4uCitUUiBTSUdQIHdpbGwgdHJhY2UgaW50ZXIgcHJvY2Vzc29yIHNpZ25hbCBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgorREVGSU5FIENQVSAwMS0obnVtYmVyIGluIGNvbmZpZ3VyYXRpb24pIAord2lsbCBnZXQgeW91ciBndWVzdHMgY3B1cyBiYWNrLgorCisKK0hlbHAgZm9yIGRpc3BsYXlpbmcgYXNjaWkgdGV4dHN0cmluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uIHRoZSB2ZXJ5IGxhdGVzdCBWTSBOdWNsZXVzJ2VzIFZNIGNhbiBub3cgZGlzcGxheSBhc2NpaQorKCB0aGFua3MgTmVhbGUgZm9yIHRoZSBoaW50ICkgYnkgZG9pbmcKK0QgVFg8bG93YWRkcj4uPGxlbj4KK2UuZy4KK0QgVFgwLjEwMAorCitBbHRlcm5hdGl2ZWx5Cis9PT09PT09PT09PT09CitVbmRlciBvbGRlciBWTSBkZWJ1Z2dlcnMgKCBJIGxvdmUgRUJESUMgdG9vICkgeW91IGNhbiB1c2UgdGhpcyBsaXR0bGUgcHJvZ3JhbSBJIHdyb3RlIHdoaWNoCit3aWxsIGNvbnZlcnQgYSBjb21tYW5kIGxpbmUgb2YgaGV4IGRpZ2l0cyB0byBhc2NpaSB0ZXh0IHdoaWNoIGNhbiBiZSBjb21waWxlZCB1bmRlciBsaW51eCAmIAoreW91IGNhbiBjb3B5IHRoZSBoZXggZGlnaXRzIGZyb20geW91ciB4MzI3MCB0ZXJtaW5hbCB0byB5b3VyIHh0ZXJtIGlmIHlvdSBhcmUgZGVidWdnaW5nCitmcm9tIGEgbGludXhib3guCisKK1RoaXMgaXMgcXVpdGUgdXNlZnVsIHdoZW4gbG9va2luZyBhdCBhIHBhcmFtZXRlciBwYXNzZWQgaW4gYXMgYSB0ZXh0IHN0cmluZwordW5kZXIgVk0gKCB1bmxlc3MgeW91IGFyZSBnb29kIGF0IGRlY29kaW5nIEFTQ0lJIGluIHlvdXIgaGVhZCApLgorCitlLmcuIGNvbnNpZGVyIHRyYWNpbmcgYW4gb3BlbiBzeXNjYWxsCitUUiBTVkMgNQorV2UgaGF2ZSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludAorMDAwMTUxQjAnIFNWQyAgIDBBMDUgICAgIC0+IDAwMDE5MDlBJyAgIENDIDAKKworRCAyMC44IHRvIGNoZWNrIHRoZSBTVkMgb2xkIHBzdyBpbiB0aGUgcHJlZml4IGFyZWEgJiBzZWUgd2FzIGl0IGZyb20gdXNlcnNwYWNlCisoIGZvciB0aGUgbGF5b3V0IG9mIHRoZSBwcmVmaXggYXJlYSBjb25zdWx0IFAxOCBvZiB0aGUgcy8zOTAgMzkwIFJlZmVyZW5jZSBTdW1tYXJ5IAoraWYgeW91IGhhdmUgaXQgYXZhaWxhYmxlICkuCitWMDAwMDAwMjAgIDA3MEMyMDAwIDgwMDE1MUIyCitUaGUgcHJvYmxlbSBzdGF0ZSBiaXQgd2Fzbid0IHNldCAmICBpdCdzIGFsc28gdG9vIGVhcmx5IGluIHRoZSBib290IHNlcXVlbmNlCitmb3IgaXQgdG8gYmUgYSB1c2Vyc3BhY2UgU1ZDIGlmIGl0IHdhcyB3ZSB3b3VsZCBoYXZlIHRvIHRlbXBvcmFyaWx5IHN3aXRjaCB0aGUgCitwc3cgdG8gdXNlciBzcGFjZSBhZGRyZXNzaW5nIHNvIHdlIGNvdWxkIGdldCBhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBvcGVuIGluCitncHIyLgorTmV4dCBkbyBhIAorRCBHMgorR1BSICAyID0gIDAwMDE0Q0I0CitOb3cgZGlzcGxheSB3aGF0IGdwcjIgaXMgcG9pbnRpbmcgdG8KK0QgMDAwMTRDQjQuMjAKK1YwMDAxNENCNCAgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAwMDFCRjUKK1YwMDAxNENDNCAgRkMwMDAxNEMgQjQwMDEwMDEgRTAwMDEwMDAgQjgwNzA3MDcKK05vdyBjb3B5IHRoZSB0ZXh0IHRpbGwgdGhlIGZpcnN0IDAwIGhleCAoIHdoaWNoIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZwordG8gYW4geHRlcm0gJiBkbyBoZXgyYXNjaWkgb24gaXQuCitoZXgyYXNjaWkgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAgCitvdXRwdXRzCitEZWNvZGVkIEhleDo9LyBkIGUgdiAvIGMgbyBuIHMgbyBsIGUgMHgwMCAKK1dlIHdlcmUgb3BlbmluZyB0aGUgY29uc29sZSBkZXZpY2UsCisKK1lvdSBjYW4gY29tcGlsZSB0aGUgY29kZSBiZWxvdyB5b3Vyc2VsZiBmb3IgcHJhY3RpY2UgOi0pLAorLyoKKyAqICAgIGhleDJhc2NpaS5jCisgKiAgICBhIHVzZWZ1bCBsaXR0bGUgdG9vbCBmb3IgY29udmVydGluZyBhIGhleGFkZWNpbWFsIGNvbW1hbmQgbGluZSB0byBhc2NpaQorICoKKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICogICAgKEMpIDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbi4KKyAqLyAgIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IGNudDEsY250MixsZW4sdG9nZ2xlPTA7CisgIGludCBzdGFydGNudD0xOworICB1bnNpZ25lZCBjaGFyIGMsaGV4OworICAKKyAgaWYoYXJnYz4xJiYoc3RyY21wKGFyZ3ZbMV0sIi1hIik9PTApKQorICAgICBzdGFydGNudD0yOworICBwcmludGYoIkRlY29kZWQgSGV4Oj0iKTsKKyAgZm9yKGNudDE9c3RhcnRjbnQ7Y250MTxhcmdjO2NudDErKykKKyAgeworICAgIGxlbj1zdHJsZW4oYXJndltjbnQxXSk7CisgICAgZm9yKGNudDI9MDtjbnQyPGxlbjtjbnQyKyspCisgICAgeworICAgICAgIGM9YXJndltjbnQxXVtjbnQyXTsKKyAgICAgICBpZihjPj0nMCcmJmM8PSc5JykKKwkgIGM9Yy0nMCc7CisgICAgICAgaWYoYz49J0EnJiZjPD0nRicpCisJICBjPWMtJ0EnKzEwOworICAgICAgIGlmKGM+PSdhJyYmYzw9J2YnKQorCSAgYz1jLSdhJysxMDsKKyAgICAgICBzd2l0Y2godG9nZ2xlKQorICAgICAgIHsKKwkgIGNhc2UgMDoKKwkgICAgIGhleD1jPDw0OworCSAgICAgdG9nZ2xlPTE7CisJICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgIGhleCs9YzsKKwkgICAgIGlmKGhleDwzMnx8aGV4PjEyNykKKwkgICAgIHsKKwkJaWYoc3RhcnRjbnQ9PTEpCisJCSAgIHByaW50ZigiMHglMDJYICIsKGludCloZXgpOworCQllbHNlCisJCSAgIHByaW50ZigiLiIpOworCSAgICAgfQorCSAgICAgZWxzZQorCSAgICAgeworCSAgICAgICBwcmludGYoIiVjIixoZXgpOworCSAgICAgICBpZihzdGFydGNudD09MSkKKwkJICBwcmludGYoIiAiKTsKKwkgICAgIH0KKwkgICAgIHRvZ2dsZT0wOworCSAgYnJlYWs7CisgICAgICAgfQorICAgIH0KKyAgfQorICBwcmludGYoIlxuIik7Cit9CisKKworCisKK1N0YWNrIHRyYWNpbmcgdW5kZXIgVk0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0EgYmFzaWMgYmFja3RyYWNlCistLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGFyZSB0aGUgdHJpY2tzIEkgdXNlIDkgb3V0IG9mIDEwIHRpbWVzIGl0IHdvcmtzIHByZXR0eSB3ZWxsLAorCitXaGVuIHlvdXIgYmFja2NoYWluIHJlYWNoZXMgYSBkZWFkIGVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgY2FuIGhhcHBlbiB3aGVuIGFuIGV4Y2VwdGlvbiBoYXBwZW5zIGluIHRoZSBrZXJuZWwgJiB0aGUga2VybmVsIGlzIGVudGVyZWQgdHdpY2UKK2lmIHlvdSByZWFjaCB0aGUgTlVMTCBwb2ludGVyIGF0IHRoZSBlbmQgb2YgdGhlIGJhY2sgY2hhaW4geW91IHNob3VsZCBiZQorYWJsZSB0byBzbmlmZiBmdXJ0aGVyIGJhY2sgaWYgeW91IGZvbGxvdyB0aGUgZm9sbG93aW5nIHRyaWNrcy4KKzEpIEEga2VybmVsIGFkZHJlc3Mgc2hvdWxkIGJlIGVhc3kgdG8gcmVjb2duaXNlIHNpbmNlIGl0IGlzIGluCitwcmltYXJ5IHNwYWNlICYgdGhlIHByb2JsZW0gc3RhdGUgYml0IGlzbid0IHNldCAmIGFsc28KK1RoZSBIaSBiaXQgb2YgdGhlIGFkZHJlc3MgaXMgc2V0LgorMikgQW5vdGhlciBiYWNrY2hhaW4gc2hvdWxkIGFsc28gYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgYW4gCithZGRyZXNzIHBvaW50aW5nIHRvIGFub3RoZXIgYWRkcmVzcyBhcHByb3hpbWF0ZWx5IDEwMCBieXRlcyBvciAweDcwIGhleAorYmVoaW5kIHRoZSBjdXJyZW50IHN0YWNrcG9pbnRlci4KKworCitIZXJlIGlzIHNvbWUgcHJhY3RpY2UuCitib290IHRoZSBrZXJuZWwgJiBoaXQgUEExIGF0IHNvbWUgcmFuZG9tIHRpbWUKK2QgZyB0byBkaXNwbGF5IHRoZSBncHJzLCB0aGlzIHNob3VsZCBkaXNwbGF5IHNvbWV0aGluZyBsaWtlCitHUFIgIDAgPSAgMDAwMDAwMDEgIDAwMTU2MDE4ICAwMDE0MzU5QyAgMDAwMDAwMDAKK0dQUiAgNCA9ICAwMDAwMDAwMSAgMDAxQjg4ODggIDAwMDAwM0UwICAwMDAwMDAwMAorR1BSICA4ID0gIDAwMTAwMDgwICAwMDEwMDA4NCAgMDAwMDAwMDAgIDAwMEZFMDAwCitHUFIgMTIgPSAgMDAwMTA0MDAgIDgwMDFCMkRDICA4MDAxQjM2QSAgMDAwRkZFRDgKK05vdGUgdGhhdCBHUFIxNCBpcyBhIHJldHVybiBhZGRyZXNzIGJ1dCBhcyB3ZSBhcmUgcmVhbCBtZW4gd2UgYXJlIGdvaW5nIHRvCit0cmFjZSB0aGUgc3RhY2suCitkaXNwbGF5IDB4NDAgYnl0ZXMgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIuCisKK1YwMDBGRkVEOCAgMDAwRkZGMzggODAwMUI4MzggODAwMTRDOEUgMDAwRkZGMzgKK1YwMDBGRkVFOCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAzRTAgMDAwMDAwMDAKK1YwMDBGRkVGOCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAwRkUwMDAKK1YwMDBGRkYwOCAgMDAwMTA0MDAgODAwMUIyREMgODAwMUIzNkEgMDAwRkZFRDgKKworCitBaCBub3cgbG9vayBhdCB3aGF0cyBpbiBzcCs1NiAoc3ArMHgzOCkgdGhpcyBpcyA4MDAxQjM2QSBvdXIgc2F2ZWQgcjE0IGlmCit5b3UgbG9vayBhYm92ZSBhdCBvdXIgc3RhY2tmcmFtZSAmIGFsc28gYWdyZWVzIHdpdGggR1BSMTQuCisKK25vdyBiYWNrY2hhaW4gCitkIDAwMEZGRjM4LjQwCit3ZSBub3cgYXJlIHRha2luZyB0aGUgY29udGVudHMgb2YgU1AgdG8gZ2V0IG91ciBmaXJzdCBiYWNrY2hhaW4uCisKK1YwMDBGRkYzOCAgMDAwRkZGQTAgMDAwMDAwMDAgMDAwMTQ5OTUgMDAxNDcwOTQKK1YwMDBGRkY0OCAgMDAxNDcwOTAgMDAxNDcwQTAgMDAwMDAzRTAgMDAwMDAwMDAKK1YwMDBGRkY1OCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAxQkYxRDAKK1YwMDBGRkY2OCAgMDAwMTA0MDAgODAwMTQ5QkEgODAwMTRDQTYgMDAwRkZGMzgKKworVGhpcyBkaXNwbGF5cyBhIDJuZCByZXR1cm4gYWRkcmVzcyBvZiA4MDAxNENBNgorCitub3cgZG8gZCAwMDBGRkZBMC40MCBmb3Igb3VyIDNyZCBiYWNrY2hhaW4KKworVjAwMEZGRkEwICAwNEI1MjAwMiAwMDAxMTA3RiAwMDAwMDAwMCAwMDAwMDAwMAorVjAwMEZGRkIwICAwMDAwMDAwMCAwMDAwMDAwMCBGRjAwMDAwMCAwMDAxMTA3RgorVjAwMEZGRkMwICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMAorVjAwMEZGRkQwICAwMDAxMDQwMCA4MDAxMDgwMiA4MDAxMDg1QSAwMDBGRkZBMAorCisKK291ciAzcmQgcmV0dXJuIGFkZHJlc3MgaXMgODAwMTA4NUEKKworYXMgdGhlIDA0QjUyMDAyIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIHJ1YmJpc2ggaXQgaXMgZmFpciB0byBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGVudHJ5IHJvdXRpbmVzCitmb3IgdGhlIHNha2Ugb2Ygb3B0aW1pc2F0aW9uIGRvbnQgc2V0IHVwIGEgYmFja2NoYWluLgorCitub3cgbG9vayBhdCBTeXN0ZW0ubWFwIHRvIHNlZSBpZiB0aGUgYWRkcmVzc2VzIG1ha2UgYW55IHNlbnNlLgorCitncmVwIC1pIDAwMDFiMyBTeXN0ZW0ubWFwCitvdXRwdXRzIGFtb25nIG90aGVyIHRoaW5ncworMDAwMWIzMDQgVCBjcHVfaWRsZSAKK3NvIDgwMDFCMzZBCitpcyBjcHVfaWRsZSsweDY2ICggcXVpZXQgdGhlIGNwdSBpcyBhc2xlZXAsIGRvbid0IHdha2UgaXQgKQorCisKK2dyZXAgLWkgMDAwMTQgU3lzdGVtLm1hcCAKK3Byb2R1Y2VzIGFtb25nIG90aGVyIHRoaW5ncworMDAwMTRhNzggVCBzdGFydF9rZXJuZWwgIAorc28gMDAxNENBNiBpcyBzdGFydF9rZXJuZWwrc29tZSBoZXggbnVtYmVyIEkgY2FuJ3QgYWRkIGluIG15IGhlYWQuCisKK2dyZXAgLWkgMDAxMDggU3lzdGVtLm1hcCAKK3RoaXMgcHJvZHVjZXMKKzAwMDEwODAwIFQgX3N0ZXh0CitzbyAgIDgwMDEwODVBIGlzIF9zdGV4dCsweDVhCisKK0NvbmdyYXRzIHlvdSd2ZSBkb25lIHlvdXIgZmlyc3QgYmFja2NoYWluLgorCisKKworcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJIGFtIG5vdCBnb2luZyB0byBnaXZlIGEgY291cnNlIGluIDM5MCBJTyBhcmNoaXRlY3R1cmUgYXMgdGhpcyB3b3VsZCB0YWtlIG1lIHF1aXRlIGEKK3doaWxlICYgSSdtIG5vIGV4cGVydC4gSW5zdGVhZCBJJ2xsIGdpdmUgYSAzOTAgSU8gYXJjaGl0ZWN0dXJlIHN1bW1hcnkgZm9yIER1bW1pZXMgaWYgeW91IGhhdmUgCit0aGUgcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24gYXZhaWxhYmxlIHJlYWQgdGhpcyBpbnN0ZWFkLiBJZiBub3RoaW5nIGVsc2UgeW91IG1heSBmaW5kIGEgZmV3IAordXNlZnVsIGtleXdvcmRzIGluIGhlcmUgJiBiZSBhYmxlIHRvIHVzZSB0aGVtIG9uIGEgd2ViIHNlYXJjaCBlbmdpbmUgbGlrZSBhbHRhdmlzdGEgdG8gZmluZCAKK21vcmUgdXNlZnVsIGluZm9ybWF0aW9uLgorCitVbmxpa2Ugb3RoZXIgYnVzIGFyY2hpdGVjdHVyZXMgbW9kZXJuIDM5MCBzeXN0ZW1zIGRvIHRoZWlyIElPIHVzaW5nIG1vc3RseQorZmlicmUgb3B0aWNzICYgZGV2aWNlcyBzdWNoIGFzIHRhcGVzICYgZGlza3MgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgbWFpbmZyYW1lcywKK2Fsc28gUzM5MCBjYW4gc3VwcG9ydCB1cHRvIDY1NTM2IGRldmljZXMgd2hpbGUgYSBoaWdoIGVuZCBQQyBiYXNlZCBzeXN0ZW0gbWlnaHQgYmUgY2hva2luZyAKK3dpdGggYXJvdW5kIDY0LiBIZXJlIGlzIHNvbWUgb2YgdGhlIGNvbW1vbiBJTyB0ZXJtaW5vbG9neQorCitTdWJjaGFubmVsOgorVGhpcyBpcyB0aGUgbG9naWNhbCBudW1iZXIgbW9zdCBJTyBjb21tYW5kcyB1c2UgdG8gdGFsayB0byBhbiBJTyBkZXZpY2UgdGhlcmUgY2FuIGJlIHVwdG8KKzB4MTAwMDAgKDY1NTM2KSBvZiB0aGVzZSBpbiBhIGNvbmZpZ3VyYXRpb24gdHlwaWNhbGx5IHRoZXJlIGlzIGEgZmV3IGh1bmRyZWQuIFVuZGVyIFZNCitmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGxvY2F0ZWQgY29udGlndW91c2x5LCBob3dldmVyIG9uIHRoZSBuYXRpdmUgaGFyZHdhcmUgdGhleSBhcmUgbm90Cit0aGV5IHR5cGljYWxseSBzdGF5IGNvbnNpc3RlbnQgYmV0d2VlbiBib290cyBwcm92aWRlZCBubyBuZXcgaGFyZHdhcmUgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KK1VuZGVyIExpbnV4IGZvciAzOTAgd2UgdXNlIHRoZXNlIGFzIElSUSdzICYgYWxzbyB3aGVuIGlzc3VpbmcgYW4gSU8gY29tbWFuZCAoQ0xFQVIgU1VCQ0hBTk5FTCwKK0hBTFQgU1VCQ0hBTk5FTCxNT0RJRlkgU1VCQ0hBTk5FTCxSRVNVTUUgU1VCQ0hBTk5FTCxTVEFSVCBTVUJDSEFOTkVMLFNUT1JFIFNVQkNIQU5ORUwgJiAKK1RFU1QgU1VCQ0hBTk5FTCApIHdlIHVzZSB0aGlzIGFzIHRoZSBJRCBvZiB0aGUgZGV2aWNlIHdlIHdpc2ggdG8gdGFsayB0bywgdGhlIG1vc3QKK2ltcG9ydGFudCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIFNUQVJUIFNVQkNIQU5ORUwgKCB0byBzdGFydCBJTyApLCBURVNUIFNVQkNIQU5ORUwgKCB0byBjaGVjaword2hldGhlciB0aGUgSU8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSApLCAmIEhBTFQgU1VCQ0hBTk5FTCAoIHRvIGtpbGwgSU8gKSwgYSBzdWJjaGFubmVsCitjYW4gaGF2ZSB1cCB0byA4IGNoYW5uZWwgcGF0aHMgdG8gYSBkZXZpY2UgdGhpcyBvZmZlcnMgcmVkdW5hbmN5IGlmIG9uZSBpcyBub3QgYXZhaWxhYmxlLgorCisKK0RldmljZSBOdW1iZXI6CitUaGlzIG51bWJlciByZW1haW5zIHN0YXRpYyAmIElzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUsIHRoZXJlIGFyZSA2NTUzNiBvZiB0aGVzZQorYWxzbyB0aGV5IGFyZSBtYWRlIHVwIG9mIGEgQ0hQSUQgKCBDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyApIAorJiBhbm90aGVyIGxzYiA4IGJpdHMuIFRoZXNlIHJlbWFpbiBzdGF0aWMgZXZlbiBpZiBtb3JlIGRldmljZXMgYXJlIGluc2VydGVkIG9yIHJlbW92ZWQKK2Zyb20gdGhlIGhhcmR3YXJlLCB0aGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gU3ViY2hhbm5lbHMgJiBEZXZpY2UgTnVtYmVycyBwcm92aWRlZAorZGV2aWNlcyBhcmVudCBpbnNlcnRlZCBvciByZW1vdmVkLgorCitDaGFubmVsIENvbnRyb2wgV29yZHM6CitDQ1dTIGFyZSBsaW5rZWQgbGlzdHMgb2YgaW5zdHJ1Y3Rpb25zIGluaXRpYWxseSBwb2ludGVkIHRvIGJ5IGFuIG9wZXJhdGlvbiByZXF1ZXN0IGJsb2NrIChPUkIpLAord2hpY2ggaXMgaW5pdGlhbGx5IGdpdmVuIHRvIFN0YXJ0IFN1YmNoYW5uZWwgKFNTQ0gpIGNvbW1hbmQgYWxvbmcgd2l0aCB0aGUgc3ViY2hhbm5lbCBudW1iZXIKK2ZvciB0aGUgSU8gc3Vic3lzdGVtIHRvIHByb2Nlc3Mgd2hpbGUgdGhlIENQVSBjb250aW51ZXMgZXhlY3V0aW5nIG5vcm1hbCBjb2RlLgorVGhlc2UgY29tZSBpbiB0d28gZmxhdm91cnMsIEZvcm1hdCAwICggMjQgYml0IGZvciBiYWNrd2FyZCApCitjb21wYXRpYmlsaXR5ICYgRm9ybWF0IDEgKCAzMSBiaXQgKS4gVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIHRvIGlzc3VlIHJlYWQgJiB3cml0ZSAKKyggJiBtYW55IG90aGVyIGluc3RydWN0aW9ucyApIHRoZXkgY29uc2lzdCBvZiBhIGxlbmd0aCBmaWVsZCAmIGFuIGFic29sdXRlIGFkZHJlc3MgZmllbGQuCitGb3IgZWFjaCBJTyB0eXBpY2FsbHkgZ2V0IDEgb3IgMiBpbnRlcnJ1cHRzIG9uZSBmb3IgY2hhbm5lbCBlbmQgKCBwcmltYXJ5IHN0YXR1cyApIHdoZW4gdGhlCitjaGFubmVsIGlzIGlkbGUgJiB0aGUgc2Vjb25kIGZvciBkZXZpY2UgZW5kICggc2Vjb25kYXJ5IHN0YXR1cyApIHNvbWV0aW1lcyB5b3UgZ2V0IGJvdGgKK2NvbmN1cnJlbnRseSwgeW91IGNoZWNrIGhvdyB0aGUgSU8gd2VudCBvbiBieSBpc3N1aW5nIGEgVEVTVCBTVUJDSEFOTkVMIGF0IGVhY2ggaW50ZXJydXB0LAorZnJvbSB3aGljaCB5b3UgcmVjZWl2ZSBhbiBJbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgKElSQikuIElmIHlvdSBnZXQgY2hhbm5lbCAmIGRldmljZSBlbmQgCitzdGF0dXMgaW4gdGhlIElSQiB3aXRob3V0IGNoYW5uZWwgY2hlY2tzIGV0Yy4geW91ciBJTyBwcm9iYWJseSB3ZW50IG9rYXkuIElmIHlvdSBkaWRuJ3QgeW91Citwcm9iYWJseSBuZWVkIGEgZG9jdG9ydG8gZXhhbWluZSB0aGUgSVJCICYgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgZXRjLgorSWYgYW4gZXJyb3Igb2NjdXJzIG1vcmUgc29waGlzdG9jYXRlZCBjb250cm9sIHVuaXRzIGhhdmUgYSBmYWNpdGl0eSBrbm93biBhcworY29uY3VycmVudCBzZW5zZSB0aGlzIG1lYW5zIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzIEV4dGVuZGVkIHNlbnNlIGluZm9ybWF0aW9uIHdpbGwKK2JlIHByZXNlbnRlZCBpbiB0aGUgRXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIElSQiBpZiBub3QgeW91IGhhdmUgdG8gaXNzdWUgYQorc3Vic2VxdWVudCBTRU5TRSBDQ1cgY29tbWFuZCBhZnRlciB0aGUgdGVzdCBzdWJjaGFubmVsLiAKKworCitUUEkoIFRlc3QgcGVuZGluZyBpbnRlcnJ1cHQpIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvbGxlZCBJTyBidXQgaW4gbXVsdGl0YXNraW5nIG11bHRpcHJvY2Vzc29yCitzeXN0ZW1zIGl0IGlzbid0IHJlY29tbWVuZGVkIGV4Y2VwdCBmb3IgY2hlY2tpbmcgc3BlY2lhbCBjYXNlcyAoIGkuZS4gbm9uIGxvb3BpbmcgY2hlY2tzIGZvcgorcGVuZGluZyBJTyBldGMuICkuCisKK1N0b3JlIFN1YmNoYW5uZWwgJiBNb2RpZnkgU3ViY2hhbm5lbCBjYW4gYmUgdXNlZCB0byBleGFtaW5lICYgbW9kaWZ5IG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpY3MKK29mIGEgc3ViY2hhbm5lbCAoIGUuZy4gY2hhbm5lbCBwYXRocyApLgorCitPdGhlciBJTyByZWxhdGVkIFRlcm1zOgorU3lzcGxleDogUzM5MCdzIENsdXN0ZXJpbmcgVGVjaG5vbG9neQorUURJTzogUzM5MCdzIG5ldyBoaWdoIHNwZWVkIElPIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IGRldmljZXMgc3VjaCBhcyBnaWdhYml0IGV0aGVybmV0LAordGhpcyBhcmNoaXRlY3R1cmUgaXMgYWxzbyBkZXNpZ25lZCB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCB1cCAmIGNvbWluZyA2NCBiaXQgbWFjaGluZXMuCisKKworR2VuZXJhbCBDb25jZXB0cyAKKworSW5wdXQgT3V0cHV0IFByb2Nlc3NvcnMgKElPUCdzKSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbW11bmljYXRpbmcgYmV0d2VlbgordGhlIG1haW5mcmFtZSBDUFUncyAmIHRoZSBjaGFubmVsICYgcmVsaWV2ZSB0aGUgbWFpbmZyYW1lIENQVSdzIGZyb20gdGhlCitidXJkZW4gb2YgY29tbXVuaWNhdGluZyB3aXRoIElPIGRldmljZXMgZGlyZWN0bHksIHRoaXMgYWxsb3dzIHRoZSBDUFUncyB0byAKK2NvbmNlbnRyYXRlIG9uIGRhdGEgcHJvY2Vzc2luZy4gCisKK0lPUCdzIGNhbiB1c2Ugb25lIG9yIG1vcmUgbGlua3MgKCBrbm93biBhcyBjaGFubmVsIHBhdGhzICkgdG8gdGFsayB0byBlYWNoIAorSU8gZGV2aWNlLiBJdCBmaXJzdCBjaGVja3MgZm9yIHBhdGggYXZhaWxhYmlsaXR5ICYgY2hvb3NlcyBhbiBhdmFpbGFibGUgb25lLAordGhlbiBzdGFydHMgKCAmIHNvbWV0aW1lcyB0ZXJtaW5hdGVzIElPICkuCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNoYW5uZWwgcGF0aCBFU0NPTiAmIHRoZSBQYXJhbGVsbCBJTyBpbnRlcmZhY2UuCisKK0lPIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGNvbnRyb2wgdW5pdHMsIGNvbnRyb2wgdW5pdHMgcHJvdmlkZSB0aGUKK2xvZ2ljIHRvIGludGVyZmFjZSB0aGUgY2hhbm5lbCBwYXRocyAmIGNoYW5uZWwgcGF0aCBJTyBwcm90b2NvbHMgdG8gCit0aGUgSU8gZGV2aWNlcywgdGhleSBjYW4gYmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBkZXZpY2VzIG9yIGhvdXNlZCBzZXBhcmF0ZWx5CismIG9mdGVuIHRhbGsgdG8gc2V2ZXJhbCBzaW1pbGFyIGRldmljZXMgKCB0eXBpY2FsIGV4YW1wbGVzIHdvdWxkIGJlIHJhaWQgCitjb250cm9sbGVycyBvciBhIGNvbnRyb2wgdW5pdCB3aGljaCBjb25uZWN0cyB0byAxMDAwIDMyNzAgdGVybWluYWxzICkuCisKKworICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwKKyAgICB8IHwgQ1BVIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgIHwgIE1haW4gICAgfCAgfCBFeHBhbmRlZCB8ICAgfAorICAgIHwgfCAgICAgfCB8ICAgICB8IHwgICAgIHwgfCAgICAgfCAgfCAgTWVtb3J5ICB8ICB8ICBTdG9yYWdlIHwgICB8CisgICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwgCisgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8ICAgSU9QICAgICAgICB8ICAgICAgSU9QICAgICAgfCAgICAgICBJT1AgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCAKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgfHwgIEJ1cyAmIFRhZyBDaGFubmVsIFBhdGggICAgICAgICAgICAgICAgICAgICAgfHwgRVNDT04KKyAgICAgICAgIHx8ICA9PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIHx8IENoYW5uZWwKKyAgICAgICAgIHx8ICB8fCAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgIHx8IFBhdGgKKyAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKKyAgICB8ICAgIENVICAgIHwgICAgICAgICAgICAgICB8ICAgIENVICAgIHwgICAgICAgICB8ICAgIENVICAgIHwKKyAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKKyAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKworfEkvTyBEZXZpY2V8IHxJL08gRGV2aWNlfCAgICAgIHxJL08gRGV2aWNlfCAgIHxJL08gRGV2aWNlfCB8SS9PIERldmljZXwKKystLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCisgIENQVSA9IENlbnRyYWwgUHJvY2Vzc2luZyBVbml0ICAgIAorICBDID0gQ2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAKKyAgSU9QID0gSVAgUHJvY2Vzc29yICAgICAgICAgICAgICAgCisgIENVID0gQ29udHJvbCBVbml0CisKK1RoZSAzOTAgSU8gc3lzdGVtcyBjb21lIGluIDIgZmxhdm91cnMgdGhlIGN1cnJlbnQgMzkwIG1hY2hpbmVzIHN1cHBvcnQgYm90aAorCitUaGUgT2xkZXIgMzYwICYgMzcwIEludGVyZmFjZSxzb21ldGltZXMgY2FsbGVkIHRoZSBwYXJhbGVsbCBJL08gaW50ZXJmYWNlLAorc29tZXRpbWVzIGNhbGxlZCBCdXMtYW5kIFRhZyAmIHNvbWV0aW1lcyBPcmlnaW5hbCBFcXVpcG1lbnQgTWFudWZhY3R1cmVycworSW50ZXJmYWNlIChPRU1JKS4KKworVGhpcyBieXRlIHdpZGUgcGFyYWxlbGwgY2hhbm5lbCBwYXRoL2J1cyBoYXMgcGFyaXR5ICYgZGF0YSBvbiB0aGUgIkJ1cyIgY2FibGUgCismIGNvbnRyb2wgbGluZXMgb24gdGhlICJUYWciIGNhYmxlLiBUaGVzZSBjYW4gb3BlcmF0ZSBpbiBieXRlIG11bHRpcGxleCBtb2RlIGZvcgorc2hhcmluZyBiZXR3ZWVuIHNldmVyYWwgc2xvdyBkZXZpY2VzIG9yIGJ1cnN0IG1vZGUgJiBtb25vcG9saXplIHRoZSBjaGFubmVsIGZvciB0aGUKK3dob2xlIGJ1cnN0LiBVcHRvIDI1NiBkZXZpY2VzIGNhbiBiZSBhZGRyZXNzZWQgIG9uIG9uZSBvZiB0aGVzZSBjYWJsZXMuIFRoZXNlIGNhYmxlcyBhcmUKK2Fib3V0IG9uZSBpbmNoIGluIGRpYW1ldGVyLiBUaGUgbWF4aW11bSB1bmV4dGVuZGVkIGxlbmd0aCBzdXBwb3J0ZWQgYnkgdGhlc2UgY2FibGVzIGlzCisxMjUgTWV0ZXJzIGJ1dCB0aGlzIGNhbiBiZSBleHRlbmRlZCB1cCB0byAya20gd2l0aCBhIGZpYnJlIG9wdGljIGNoYW5uZWwgZXh0ZW5kZWQgCitzdWNoIGFzIGEgMzA0NC4gVGhlIG1heGltdW0gYnVyc3Qgc3BlZWQgc3VwcG9ydGVkIGlzIDQuNSBtZWdhYnl0ZXMgcGVyIHNlY29uZCBob3dldmVyCitzb21lIHJlYWxseSBvbGQgcHJvY2Vzc29ycyBzdXBwb3J0IG9ubHkgdHJhbnNmZXIgcmF0ZXMgb2YgMy4wLCAyLjAgJiAxLjAgTUIvc2VjLgorT25lIG9mIHRoZXNlIHBhdGhzIGNhbiBiZSBkYWlzeSBjaGFpbmVkIHRvIHVwIHRvIDggY29udHJvbCB1bml0cy4KKworCitFU0NPTiBpZiBmaWJyZSBvcHRpYyBpdCBpcyBhbHNvIGNhbGxlZCBGSUNPTiAKK1dhcyBpbnRyb2R1Y2VkIGJ5IElCTSBpbiAxOTkwLiBIYXMgMiBmaWJyZSBvcHRpYyBjYWJsZXMgJiB1c2VzIGVpdGhlciBsZWRzIG9yIGxhc2VycworZm9yIGNvbW11bmljYXRpb24gYXQgYSBzaWduYWxpbmcgcmF0ZSBvZiB1cHRvIDIwMCBtZWdhYml0cy9zZWMuIEFzIDEwYml0cyBhcmUgdHJhbnNmZXJyZWQKK2ZvciBldmVyeSA4IGJpdHMgaW5mbyB0aGlzIGRyb3BzIHRvIDE2MCBtZWdhYml0cy9zZWMgJiB0byAxOC42IE1lZ2FieXRlcy9zZWMgb25jZQorY29udHJvbCBpbmZvICYgQ1JDIGFyZSBhZGRlZC4gRVNDT04gb25seSBvcGVyYXRlcyBpbiBidXJzdCBtb2RlLgorIAorRVNDT05zIHR5cGljYWwgbWF4IGNhYmxlIGxlbmd0aCBpcyAza20gZm9yIHRoZSBsZWQgdmVyc2lvbiAmIDIwa20gZm9yIHRoZSBsYXNlciB2ZXJzaW9uCitrbm93biBhcyBYREYgKCBleHRlbmRlZCBkaXN0YW5jZSBmYWNpbGl0eSApLiBUaGlzIGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IHVzaW5nIGFuCitFU0NPTiBkaXJlY3RvciB3aGljaCB0cmlwbGVzIHRoZSBhYm92ZSBtZW50aW9uZWQgcmFuZ2VzLiBVbmxpa2UgQnVzICYgVGFnIGFzIEVTQ09OIGlzCitzZXJpYWwgaXQgdXNlcyBhIHBhY2tldCBzd2l0Y2hpbmcgYXJjaGl0ZWN0dXJlIHRoZSBzdGFuZGFyZCBCdXMgJiBUYWcgY29udHJvbCBwcm90b2NvbAoraXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sIAordW5pdCB0aGF0IHVzZXMgb25lIG9mIHRoZXNlIGludGVyZmFjZXMuCisKK0NvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgorTmV0d29yayBhZGFwdGVycyB0eXBpY2FsbHkgT1NBMiwzMTcyJ3MsMjExNidzICYgT1NBLUUgZ2lnYWJpdCBldGhlcm5ldCBhZGFwdGVycywKK0NvbnNvbGVzIDMyNzAgJiAzMjE1ICggYSB0ZWxldHlwZSBlbXVsYXRlZCB1bmRlciBsaW51eCBmb3IgYSBsaW5lIG1vZGUgY29uc29sZSApLgorREFTRCdzIGRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzICggb3RoZXJ3aXNlIGtub3duIGFzIGhhcmQgZGlza3MgKS4KK1RhcGUgRHJpdmVzLgorQ1RDICggQ2hhbm5lbCB0byBDaGFubmVsIEFkYXB0ZXJzICksCitFU0NPTiBvciBQYXJhbGVsbCBDYWJsZXMgdXNlZCBhcyBhIHZlcnkgaGlnaCBzcGVlZCBzZXJpYWwgbGluaworYmV0d2VlbiAyIG1hY2hpbmVzLiBXZSB1c2UgMiBjYWJsZXMgdW5kZXIgbGludXggdG8gZG8gYSBiaS1kaXJlY3Rpb25hbCBzZXJpYWwgbGluay4KKworCitEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm93IHdlIGFyZSByZWFkeSB0byBnbyBvbiB3aXRoIElPIHRyYWNpbmcgY29tbWFuZHMgdW5kZXIgVk0KKworQSBmZXcgc2VsZiBleHBsYW5hdG9yeSBxdWVyaWVzOgorUSBPU0EKK1EgQ1RDCitRIERJU0sgKCBUaGlzIGNvbW1hbmQgaXMgQ01TIHNwZWNpZmljICkKK1EgREFTRAorCisKKworCisKKworUSBPU0Egb24gbXkgbWFjaGluZSByZXR1cm5zCitPU0EgIDdDMDggT04gT1NBICAgN0MwOCBTVUJDSEFOTkVMID0gMDAwMAorT1NBICA3QzA5IE9OIE9TQSAgIDdDMDkgU1VCQ0hBTk5FTCA9IDAwMDEKK09TQSAgN0MxNCBPTiBPU0EgICA3QzE0IFNVQkNIQU5ORUwgPSAwMDAyCitPU0EgIDdDMTUgT04gT1NBICAgN0MxNSBTVUJDSEFOTkVMID0gMDAwMworCitJZiB5b3UgaGF2ZSBhIGd1ZXN0IHdpdGggY2VydGFpbiBwcml2aWxpZ2VzIHlvdSBtYXkgYmUgYWJsZSB0byBzZWUgZGV2aWNlcword2hpY2ggZG9uJ3QgYmVsb25nIHRvIHlvdSB0byBhdm9pZCB0aGlzIGRvIGFkZCB0aGUgb3B0aW9uIFYuCitlLmcuCitRIFYgT1NBCisKK05vdyB1c2luZyB0aGUgZGV2aWNlIG51bWJlcnMgcmV0dXJuZWQgYnkgdGhpcyBjb21tYW5kIHdlIHdpbGwKK1RyYWNlIHRoZSBpbyBzdGFydGluZyB1cCBvbiB0aGUgZmlyc3QgZGV2aWNlIDdjMDggJiA3YzA5CitJbiBvdXIgc2ltcGxlc3QgY2FzZSB3ZSBjYW4gdHJhY2UgdGhlIAorc3RhcnQgc3ViY2hhbm5lbHMKK2xpa2UgVFIgU1NDSCA3QzA4LTdDMDkKK29yIHRoZSBoYWx0IHN1YmNoYW5uZWxzCitvciBUUiBIU0NIIDdDMDgtN0MwOQorTVNDSCdzICxTVFNDSCdzIEkgdGhpbmsgeW91IGNhbiBndWVzcyB0aGUgcmVzdAorCitJbmdvJ3MgZmF2b3VyaXRlIHRyaWNrIGlzIHRyYWNpbmcgYWxsIHRoZSBJTydzICYgQ0NXUyAmIHNwb29saW5nIHRoZW0gaW50byB0aGUgcmVhZGVyIG9mIGFub3RoZXIKK1ZNIGd1ZXN0IHNvIGhlIGNhbiBmdHAgdGhlIGxvZ2ZpbGUgYmFjayB0byBoaXMgb3duIG1hY2hpbmUuSSdsbCBkbyBhIHNtYWxsIGJpdCBvZiB0aGlzICYgZ2l2ZSB5b3UKKyBhIGxvb2sgYXQgdGhlIG91dHB1dC4KKworMSkgU3Bvb2wgc3Rkb3V0IHRvIFZNIHJlYWRlcgorU1AgUFJUIFRPIChhbm90aGVyIHZtIGd1ZXN0ICkgb3IgKiBmb3IgdGhlIGxvY2FsIHZtIGd1ZXN0CisyKSBGaWxsIHRoZSByZWFkZXIgd2l0aCB0aGUgdHJhY2UKK1RSIElPIDdjMDgtN2MwOSBJTlNUIElOVCBDQ1cgUFJUIFJVTgorMykgU3RhcnQgdXAgbGludXggCitpIDAwYyAgCis0KSBGaW5pc2ggdGhlIHRyYWNlCitUUiBFTkQKKzUpIGNsb3NlIHRoZSByZWFkZXIKK0MgUFJUCis2KSBsaXN0IHJlYWRlciBjb250ZW50cworUkRSTElTVAorNykgY29weSBpdCB0byBsaW51eDQncyBtaW5pZGlzayAKK1JFQ0VJVkUgLyBMT0cgVFhUIEExICggcmVwbGFjZQorOCkKK2ZpbGVsICYgcHJlc3MgRjExIHRvIGxvb2sgYXQgaXQKK1lvdSBzaG91bGQgc2VlIHNvbWV0aW5nIGxpa2UuCisKKzAwMDIwOTQyJyBTU0NIICBCMjMzNDAwMCAgICAwMDQ4ODEzQyAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CisgICAgICAgICAgQ1BBIDAwMEZGREYwICAgUEFSTSAwMEUyQzlDNCAgICBLRVkgMCAgRlBJIEMwICBMUE0gODAKKyAgICAgICAgICBDQ1cgICAgMDAwRkZERjAgIEU0MjAwMTAwIDAwNDg3RkU4ICAgMDAwMCAgRTQyNDAxMDAgLi4uLi4uLi4KKyAgICAgICAgICBJREFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0M0Q4QUZFOAorICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBGQjc2MDAwCiswMDAyMEIwQScgICBJL08gREVWIDdDMDggLT4gMDAwMTk3QkMnICAgU0NIIDAwMDAgICBQQVJNIDAwRTJDOUM0CiswMDAyMTYyOCcgVFNDSCAgQjIzNTQwMDAgPj4gMDA0ODgxNjQgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAorICAgICAgICAgIENDV0EgMDAwRkZERjggICBERVYgU1RTIDBDICBTQ0ggU1RTIDAwICBDTlQgMDBFQworICAgICAgICAgICBLRVkgMCAgIEZQSSBDMCAgQ0MgMCAgIENUTFMgNDAwNworMDAwMjIyMzgnIFNUU0NIIEIyMzQ0MDAwID4+IDAwNDg4MTA4ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKKworSWYgeW91IGRvbid0IGxpa2UgbWVzc2luZyB1cCB5b3VyIHJlYWRlZCAoIGJlY2F1c2UgeW91IHBvc3NpYmx5IGJvb3RlZCBmcm9tIGl0ICkKK3lvdSBjYW4gYWx0ZXJuYXRpdmVseSBzcG9vbCBpdCB0byBhbm90aGVyIHJlYWRlcnMgZ3Vlc3QuCisKKworT3RoZXIgY29tbW9uIFZNIGRldmljZSByZWxhdGVkIGNvbW1hbmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXNlIGNvbW1hbmRzIGFyZSBsaXN0ZWQgb25seSBiZWNhdXNlIHRoZXkgaGF2ZQorYmVlbiBvZiB1c2UgdG8gbWUgaW4gdGhlIHBhc3QgJiBtYXkgYmUgb2YgdXNlIHRvCit5b3UgdG9vLiBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvIG9uIGVhY2ggb2YgdGhlIGNvbW1hbmRzCit1c2UgdHlwZSBIRUxQIDxjb21tYW5kPiBmcm9tIENNUy4KK2RldGFjaGluZyBkZXZpY2VzCitERVQgPGRldm5vIHJhbmdlPgorQVRUIDxkZXZubyByYW5nZT4gPGd1ZXN0PiAKK2F0dGFjaCBhIGRldmljZSB0byBndWVzdCAqIGZvciB5b3VyIG93biBndWVzdAorUkVBRFkgPGRldm5vPiBjYXVzZSBWTSB0byBpc3N1ZSBhIGZha2UgaW50ZXJydXB0LgorCitUaGUgVkFSWSBjb21tYW5kIGlzIG5vcm1hbGx5IG9ubHkgYXZhaWxhYmxlIHRvIFZNIGFkbWluaXN0cmF0b3JzLgorVkFSWSBPTiBQQVRIIDxwYXRoPiBUTyA8ZGV2bm8gcmFuZ2U+CitWQVJZIE9GRiBQQVRIIDxQQVRIPiBGUk9NIDxkZXZubyByYW5nZT4KK1RoaXMgaXMgdXNlZCB0byBzd2l0Y2ggb24gb3Igb2ZmIGNoYW5uZWwgcGF0aHMgdG8gZGV2aWNlcy4KKworUSBDSFBJRCA8Y2hhbm5lbCBwYXRoIElEPgorVGhpcyBkaXNwbGF5cyBzdGF0ZSBvZiBkZXZpY2VzIHVzaW5nIHRoaXMgY2hhbm5lbCBwYXRoCitEIFNDSElCIDxzdWJjaGFubmVsPgorVGhpcyBkaXNwbGF5cyB0aGUgc3ViY2hhbm5lbCBpbmZvcm1hdGlvbiBTQ0hJQiBibG9jayBmb3IgdGhlIGRldmljZS4KK3RoaXMgSSBiZWxpZXZlIGlzIGFsc28gb25seSBhdmFpbGFibGUgdG8gYWRtaW5pc3RyYXRvcnMuCitERUZJTkUgQ1RDIDxkZXZubz4KK2RlZmluZXMgYSB2aXJ0dWFsIENUQyBjaGFubmVsIHRvIGNoYW5uZWwgY29ubmVjdGlvbgorMiBuZWVkIHRvIGJlIGRlZmluZWQgb24gZWFjaCBndWVzdCBmb3IgdGhlIENUQyBkcml2ZXIgdG8gdXNlLgorQ09VUExFICBkZXZubyB1c2VyaWQgcmVtb3RlIGRldm5vCitKb2lucyBhIGxvY2FsIHZpcnR1YWwgZGV2aWNlIHRvIGEgcmVtb3RlIHZpcnR1YWwgZGV2aWNlCisoIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBDVEMgZHJpdmVyICkuCisKK0J1aWxkaW5nIGEgVk0gcmFtZGlzayB1bmRlciBDTVMgd2hpY2ggbGludXggY2FuIHVzZQorZGVmIHZmYi08YmxvY2tzaXplPiA8c3ViY2hhbm5lbD4gPG51bWJlciBibG9ja3M+CitibG9ja3NpemUgaXMgY29tbW9ubHkgNDA5NiBmb3IgbGludXguCitGb3JtYXR0aW5nIGl0Citmb3JtYXQgPHN1YmNoYW5uZWw+IDxkcml2ZXIgbGV0dGVyIGUuZy4geD4gKGJsa3NpemUgPGJsb2Nrc2l6ZT4KKworU2hhcmluZyBhIGRpc2sgYmV0d2VlbiBtdWx0aXBsZSBndWVzdHMKK0xJTksgdXNlcmlkIGRldm5vMSBkZXZubzIgbW9kZSBwYXNzd29yZAorCisKKworR0RCIG9uIFMzOTAKKz09PT09PT09PT09CitOLkIuIGlmIGNvbXBpbGluZyBmb3IgZGVidWdnaW5nIGdkYiB3b3JrcyBiZXR0ZXIgd2l0aG91dCBvcHRpbWlzYXRpb24gCisoIHNlZSBDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyApCisKK2ludm9jYXRpb24KKy0tLS0tLS0tLS0KK2dkYiA8dmljdGltIHByb2dyYW0+IDxvcHRpb25hbCBjb3JlZmlsZT4KKworT25saW5lIGhlbHAKKy0tLS0tLS0tLS0tCitoZWxwOiBnaXZlcyBoZWxwIG9uIGNvbW1hbmRzCitlLmcuCitoZWxwCitoZWxwIGRpc3BsYXkKK05vdGUgZ2RiJ3Mgb25saW5lIGhlbHAgaXMgdmVyeSBnb29kIHVzZSBpdC4KKworCitBc3NlbWJseQorLS0tLS0tLS0KK2luZm8gcmVnaXN0ZXJzOiBkaXNwbGF5cyByZWdpc3RlcnMgb3RoZXIgdGhhbiBmbG9hdGluZyBwb2ludC4KK2luZm8gYWxsLXJlZ2lzdGVyczogZGlzcGxheXMgZmxvYXRpbmcgcG9pbnRzIGFzIHdlbGwuCitkaXNhc3NlbWJsZTogZGlzc2Fzc2VtYmxlcworZS5nLgorZGlzYXNzZW1ibGUgd2l0aG91dCBwYXJhbWV0ZXJzIHdpbGwgZGlzYXNzZW1ibGUgdGhlIGN1cnJlbnQgZnVuY3Rpb24KK2Rpc2Fzc2VtYmxlICRwYyAkcGMrMTAgCisKK1ZpZXdpbmcgJiBtb2RpZnlpbmcgdmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJpbnQgb3IgcDogZGlzcGxheXMgdmFyaWFibGUgb3IgcmVnaXN0ZXIKK2UuZy4gcC94ICRzcCB3aWxsIGRpc3BsYXkgdGhlIHN0YWNrIHBvaW50ZXIKKworZGlzcGxheTogcHJpbnRzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyIGVhY2ggdGltZSBwcm9ncmFtIHN0b3BzCitlLmcuCitkaXNwbGF5L3ggJHBjIHdpbGwgZGlzcGxheSB0aGUgcHJvZ3JhbSBjb3VudGVyCitkaXNwbGF5IGFyZ2MKKwordW5kaXNwbGF5IDogdW5kbydzIGRpc3BsYXkncworCitpbmZvIGJyZWFrcG9pbnRzOiBzaG93cyBhbGwgY3VycmVudCBicmVha3BvaW50cworCitpbmZvIHN0YWNrOiBzaG93cyBzdGFjayBiYWNrIHRyYWNlICggaWYgdGhpcyBkb3NlbnQgd29yayB0b28gd2VsbCwgSSdsbCBzaG93IHlvdSB0aGUKK3N0YWNrdHJhY2UgYnkgaGFuZCBiZWxvdyApLgorCitpbmZvIGxvY2FsczogZGlzcGxheXMgbG9jYWwgdmFyaWFibGVzLgorCitpbmZvIGFyZ3M6IGRpc3BsYXkgY3VycmVudCBwcm9jZWR1cmUgYXJndW1lbnRzLgorCitzZXQgYXJnczogd2lsbCBzZXQgYXJnYyAmIGFyZ3YgZWFjaCB0aW1lIHRoZSB2aWN0aW0gcHJvZ3JhbSBpcyBpbnZva2VkLgorCitzZXQgPHZhcmlhYmxlPj12YWx1ZQorc2V0IGFyZ2M9MTAwCitzZXQgJHBjPTAKKworCisKK01vZGlmeWluZyBleGVjdXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0ZXA6IHN0ZXBzIG4gbGluZXMgb2Ygc291cmNlY29kZQorc3RlcCBzdGVwcyAxIGxpbmUuCitzdGVwIDEwMCBzdGVwcyAxMDAgbGluZXMgb2YgY29kZS4KKworbmV4dDogbGlrZSBzdGVwIGV4Y2VwdCB0aGlzIHdpbGwgbm90IHN0ZXAgaW50byBzdWJyb3V0aW5lcworCitzdGVwaTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uLgorZS5nLiBzdGVwaSAxMDAKKworbmV4dGk6IHN0ZXBzIGEgc2luZ2xlIG1hY2hpbmUgY29kZSBpbnN0cnVjdGlvbiBidXQgd2lsbCBub3Qgc3RlcCBpbnRvIHN1YnJvdXRpbmVzLgorCitmaW5pc2g6IHdpbGwgcnVuIHVudGlsIGV4aXQgb2YgdGhlIGN1cnJlbnQgcm91dGluZQorCitydW46IChyZSlzdGFydHMgYSBwcm9ncmFtCisKK2NvbnQ6IGNvbnRpbnVlcyBhIHByb2dyYW0KKworcXVpdDogZXhpdHMgZ2RiLgorCisKK2JyZWFrcG9pbnRzCistLS0tLS0tLS0tLS0KKworYnJlYWsKK3NldHMgYSBicmVha3BvaW50CitlLmcuCisKK2JyZWFrIG1haW4KKworYnJlYWsgKiRwYworCiticmVhayAqMHg0MDA2MTgKKworaGVyZXMgYSByZWFsbHkgdXNlZnVsIG9uZSBmb3IgbGFyZ2UgcHJvZ3JhbXMKK3JicgorU2V0IGEgYnJlYWtwb2ludCBmb3IgYWxsIGZ1bmN0aW9ucyBtYXRjaGluZyBSRUdFWFAKK2UuZy4KK3JiciAzOTAKK3dpbGwgc2V0IGEgYnJlYWtwb2ludCB3aXRoIGFsbCBmdW5jdGlvbnMgd2l0aCAzOTAgaW4gdGhlaXIgbmFtZS4KKworaW5mbyBicmVha3BvaW50cworbGlzdHMgYWxsIGJyZWFrcG9pbnRzCisKK2RlbGV0ZTogZGVsZXRlIGJyZWFrcG9pbnQgYnkgbnVtYmVyIG9yIGRlbGV0ZSB0aGVtIGFsbAorZS5nLgorZGVsZXRlIDEgd2lsbCBkZWxldGUgdGhlIGZpcnN0IGJyZWFrcG9pbnQKK2RlbGV0ZSB3aWxsIGRlbGV0ZSB0aGVtIGFsbAorCit3YXRjaDogVGhpcyB3aWxsIHNldCBhIHdhdGNocG9pbnQgKCB1c3VhbGx5IGhhcmR3YXJlIGFzc2lzdGVkICksCitUaGlzIHdpbGwgd2F0Y2ggYSB2YXJpYWJsZSB0aWxsIGl0IGNoYW5nZXMKK2UuZy4KK3dhdGNoIGNudCwgd2lsbCB3YXRjaCB0aGUgdmFyaWFibGUgY250IHRpbGwgaXQgY2hhbmdlcy4KK0FzIGFuIGFzaWRlIHVuZm9ydHVuYXRlbHkgZ2RiJ3MsIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCB3YXRjaHBvaW50IGNvZGUKK2lzIGluY29uc2lzdGVudCAmIG5vdCB2ZXJ5IGdvb2QsIHdhdGNocG9pbnRzIHVzdWFsbHkgd29yayBidXQgbm90IGFsd2F5cy4KKworaW5mbyB3YXRjaHBvaW50czogRGlzcGxheSBjdXJyZW50bHkgYWN0aXZlIHdhdGNocG9pbnRzCisKK2NvbmRpdGlvbjogKCBhbm90aGVyIHVzZWZ1bCBvbmUgKQorU3BlY2lmeSBicmVha3BvaW50IG51bWJlciBOIHRvIGJyZWFrIG9ubHkgaWYgQ09ORCBpcyB0cnVlLgorVXNhZ2UgaXMgYGNvbmRpdGlvbiBOIENPTkQnLCB3aGVyZSBOIGlzIGFuIGludGVnZXIgYW5kIENPTkQgaXMgYW4KK2V4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIHdoZW5ldmVyIGJyZWFrcG9pbnQgTiBpcyByZWFjaGVkLgorCisKKworVXNlciBkZWZpbmVkIGZ1bmN0aW9ucy9tYWNyb3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWZpbmU6ICggTm90ZSB0aGlzIGlzIHZlcnkgdmVyeSB1c2VmdWwsc2ltcGxlICYgcG93ZXJmdWwgKQordXNhZ2UgZGVmaW5lIDxuYW1lPiA8bGlzdCBvZiBjb21tYW5kcz4gZW5kCisKK2V4YW1wbGVzIHdoaWNoIHlvdSBzaG91bGQgY29uc2lkZXIgcHV0dGluZyBpbnRvIC5nZGJpbml0IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKK2RlZmluZSBkCitzdGVwaQorZGlzYXNzZW1ibGUgJHBjICRwYysxMAorZW5kCisKK2RlZmluZSBlCituZXh0aQorZGlzYXNzZW1ibGUgJHBjICRwYysxMAorZW5kCisKKworT3RoZXIgaGFyZCB0byBjbGFzc2lmeSBzdHVmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2lnbmFsIG46CitzZW5kcyB0aGUgdmljdGltIHByb2dyYW0gYSBzaWduYWwuCitlLmcuIHNpZ25hbCAzIHdpbGwgc2VuZCBhIFNJR1FVSVQuCisKK2luZm8gc2lnbmFsczoKK3doYXQgZ2RiIGRvZXMgd2hlbiB0aGUgdmljdGltIHJlY2VpdmVzIGNlcnRhaW4gc2lnbmFscy4KKworbGlzdDoKK2UuZy4KK2xpc3QgbGlzdHMgY3VycmVudCBmdW5jdGlvbiBzb3VyY2UKK2xpc3QgMSwxMCBsaXN0IGZpcnN0IDEwIGxpbmVzIG9mIGN1cnJldCBmaWxlLgorbGlzdCB0ZXN0LmM6MSwxMAorCisKK2RpcmVjdG9yeToKK0FkZHMgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgZm9yIHNvdXJjZSBpZiBnZGIgY2Fubm90IGZpbmQgdGhlIHNvdXJjZS4KKyhub3RlIGl0IGlzIGEgYml0IHNlbnNpdGl0aXZlIGFib3V0IHNsYXNoZXMgKSAKK2UuZy4gVG8gYWRkIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBzZWFyY2hwYXRoIGRvCitkaXJlY3RvcnkgLy8KKworCitjYWxsIDxmdW5jdGlvbj4KK1RoaXMgY2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdmljdGltIHByb2dyYW0sIHRoaXMgaXMgcHJldHR5IHBvd2VyZnVsCitlLmcuCisoZ2RiKSBjYWxsIHByaW50ZigiaGVsbG8gd29ybGQiKQorb3V0cHV0czoKKyQxID0gMTEgCisKK1lvdSBtaWdodCBub3cgYmUgdGhpbmtpbmcgdGhhdCB0aGUgbGluZSBhYm92ZSBkaWRuJ3Qgd29yaywgc29tZXRoaW5nIGV4dHJhIGhhZCB0byBiZSBkb25lLgorKGdkYikgY2FsbCBmZmx1c2goc3Rkb3V0KQoraGVsbG8gd29ybGQkMiA9IDAKK0FzIGFuIGFzaWRlIHRoZSBkZWJ1Z2dlciBhbHNvIGNhbGxzIG1hbGxvYyAmIGZyZWUgdW5kZXIgdGhlIGhvb2QgCit0byBtYWtlIHNwYWNlIGZvciB0aGUgImhlbGxvIHdvcmxkIiBzdHJpbmcuCisKKworCitoaW50cworLS0tLS0KKzEpIGNvbW1hbmQgY29tcGxldGlvbiB3b3JrcyBqdXN0IGxpa2UgYmFzaCAKKyggaWYgeW91IGFyZSBhIGJhZCB0eXBpc3QgbGlrZSBtZSB0aGlzIHJlYWxseSBoZWxwcyApCitlLmcuIGhpdCBiciA8VEFCPiAmIGN1cnNvciB1cCAmIGRvd24gOi0pLgorCisyKSBpZiB5b3UgaGF2ZSBhIGRlYnVnZ2luZyBwcm9ibGVtIHRoYXQgdGFrZXMgYSBmZXcgc3RlcHMgdG8gcmVjcmVhdGUKK3B1dCB0aGUgc3RlcHMgaW50byBhIGZpbGUgY2FsbGVkIC5nZGJpbml0IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQoraWYgeW91IGhhdmUgZGVmaW5lZCBhIGZldyBleHRyYSB1c2VmdWwgdXNlciBkZWZpbmVkIGNvbW1hbmRzIHB1dCB0aGVzZSBpbiAKK3lvdXIgaG9tZSBkaXJlY3RvcnkgJiB0aGV5IHdpbGwgYmUgcmVhZCBlYWNoIHRpbWUgZ2RiIGlzIGxhdW5jaGVkLgorCitBIHR5cGljYWwgLmdkYmluaXQgZmlsZSBtaWdodCBiZS4KK2JyZWFrIG1haW4KK3J1bgorYnJlYWsgcnVudGltZV9leGNlcHRpb24KK2NvbnQgCisKKworc3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGRvbmUgdXNpbmcgYSB0aGUgc2FtZSB0cmljayBkZXNjcmliZWQgZm9yIFZNIAorcC94ICgqKCRzcCs1NikpJjB4N2ZmZmZmZmYgZ2V0IHRoZSBmaXJzdCBiYWNrY2hhaW4uCisKK0ZvciB6L0FyY2hpdGVjdHVyZQorUmVwbGFjZSA1NiB3aXRoIDExMiAmIGlnbm9yZSB0aGUgJjB4N2ZmZmZmZmYKK2luIHRoZSBtYWNyb3MgYmVsb3cgJiBkbyBuYXN0eSBjYXN0cyB0byBsb25ncyBsaWtlIHRoZSBmb2xsb3dpbmcKK2FzIGdkYiB1bmZvcnR1bmF0ZWx5IGRlYWxzIHdpdGggcHJpbnRlZCBhcmd1bWVudHMgYXMgaW50cyB3aGljaAorbWVzc2VzIHVwIGV2ZXJ5dGhpbmcuCitpLmUuIGhlcmUgaXMgYSAzcmQgYmFja2NoYWluIGRlcmVmZXJlbmNlCitwL3ggKihsb25nICopKCoqKihsb25nICoqKikkc3ArMTEyKQorCisKK3RoaXMgb3V0cHV0cyAKKyQ1ID0gMHg1MjhmMTggCitvbiBteSBtYWNoaW5lLgorTm93IHlvdSBjYW4gdXNlIAoraW5mbyBzeW1ib2wgKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiAKK3lvdSBtaWdodCBzZWUgc29tZXRoaW5nIGxpa2UuCitybF9nZXRjICsgMzYgaW4gc2VjdGlvbiAudGV4dCAgdGVsbGluZyB5b3Ugd2hhdCBpcyBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MjhmMTgKK05vdyBkby4KK3AveCAoKigqJHNwKzU2KSkmMHg3ZmZmZmZmZiAKK1RoaXMgb3V0cHV0cworJDYgPSAweDUyOGVkMAorTm93IGRvLgoraW5mbyBzeW1ib2wgKCooKiRzcCs1NikpJjB4N2ZmZmZmZmYKK3JsX3JlYWRfa2V5ICsgMTgwIGluIHNlY3Rpb24gLnRleHQKK25vdyBkbworcC94ICgqKCoqJHNwKzU2KSkmMHg3ZmZmZmZmZgorJiBzbyBvbi4KKworRGlzYXNzZW1ibGluZyBpbnN0cnVjdGlvbnMgd2l0aG91dCBkZWJ1ZyBpbmZvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dkYiB0eXBpY2FsbHkgY29tcGFpbnMgaWYgdGhlcmUgaXMgYSBsYWNrIG9mIGRlYnVnZ2luZworc3ltYm9scyBpbiAgdGhlIGRpc2Fzc2VtYmxlIGNvbW1hbmQgd2l0aCAKKyJObyBmdW5jdGlvbiBjb250YWlucyBzcGVjaWZpZWQgYWRkcmVzcy4iIHRvIGdldCBhcm91bmQKK3RoaXMgZG8gCit4LzxudW1iZXIgbGluZXMgdG8gZGlzYXNzZW1ibGU+eGkgPGFkZHJlc3M+CitlLmcuCit4LzIweGkgMHg0MDA3MzAKKworCisKK05vdGU6IFJlbWVtYmVyIGdkYiBoYXMgaGlzdG9yeSBqdXN0IGxpa2UgYmFzaCB5b3UgZG9uJ3QgbmVlZCB0byByZXR5cGUgdGhlCit3aG9sZSBsaW5lIGp1c3QgdXNlIHRoZSB1cCAmIGRvd24gYXJyb3dzLgorCisKKworRm9yIG1vcmUgaW5mbworLS0tLS0tLS0tLS0tLQorRnJvbSB5b3VyIGxpbnV4Ym94IGRvIAorbWFuIGdkYiBvciBpbmZvIGdkYi4KKworY29yZSBkdW1wcworLS0tLS0tLS0tLQorV2hhdCBhIGNvcmUgZHVtcCA/LAorQSBjb3JlIGR1bXAgaXMgYSBmaWxlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsICggaWYgYWxsb3dlZCApIHdoaWNoIGNvbnRhaW5zIHRoZSByZWdpc3RlcnMsCismIGFsbCBhY3RpdmUgcGFnZXMgb2YgdGhlIHByb2dyYW0gd2hpY2ggaGFzIGNyYXNoZWQuCitGcm9tIHRoaXMgZmlsZSBnZGIgd2lsbCBhbGxvdyB5b3UgdG8gbG9vayBhdCB0aGUgcmVnaXN0ZXJzICYgc3RhY2sgdHJhY2UgJiBtZW1vcnkgb2YgdGhlCitwcm9ncmFtIGFzIGlmIGl0IGp1c3QgY3Jhc2hlZCBvbiB5b3VyIHN5c3RlbSwgaXQgaXMgdXN1YWxseSBjYWxsZWQgY29yZSAmIGNyZWF0ZWQgaW4gdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpbiB0aGF0IGEgY3VzdG9tZXIgY2FuIG1haWwgYSBjb3JlIGR1bXAgdG8gYSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50CismIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50IGNhbiByZWNvbnN0cnVjdCB3aGF0IGhhcHBlbmVkLgorUHJvdmlkZWQgdGhlIGhhdmUgYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhpcyBwcm9ncmFtIHdpdGggZGVidWdnaW5nIHN5bWJvbHMgY29tcGlsZWQgaW4gJiAKK3RoZSBzb3VyY2UgYmFzZSBvZiB0aGlzIGJ1aWxkIGlzIGF2YWlsYWJsZS4KK0luIHNob3J0IGl0IGlzIGZhciBtb3JlIHVzZWZ1bCB0aGFuIHNvbWV0aGluZyBsaWtlIGEgY3Jhc2ggbG9nIGNvdWxkIGV2ZXIgaG9wZSB0byBiZS4KKworSW4gdGhlb3J5IGFsbCB0aGF0IGlzIG1pc3NpbmcgdG8gcmVzdGFydCBhIGNvcmUgZHVtcGVkIHByb2dyYW0gaXMgYSBrZXJuZWwgcGF0Y2ggd2hpY2gKK3dpbGwgZG8gdGhlIGZvbGxvd2luZy4KKzEpIE1ha2UgYSBuZXcga2VybmVsIHRhc2sgc3RydWN0dXJlCisyKSBSZWxvYWQgYWxsIHRoZSBkdW1wZWQgcGFnZXMgYmFjayBpbnRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLgorMykgRG8gdGhlIHJlcXVpcmVkIGNsb2NrIGZpeHVwcworNCkgR2V0IGFsbCBmaWxlcyAmIG5ldHdvcmsgY29ubmVjdGlvbnMgZm9yIHRoZSBwcm9jZXNzIGJhY2sgaW50byBhbiBpZGVudGljYWwgc3RhdGUgKCByZWFsbHkgZGlmZmljdWx0ICkuCis1KSBBIGZldyBtb3JlIGRpZmZpY3VsdCB0aGluZ3MgSSBoYXZlbid0IHRob3VnaHQgb2YuCisKKworCitXaHkgaGF2ZSBJIG5ldmVyIHNlZW4gb25lID8uCitQcm9iYWJseSBiZWNhdXNlIHlvdSBoYXZlbid0IHVzZWQgdGhlIGNvbW1hbmQgCit1bGltaXQgLWMgdW5saW1pdGVkIGluIGJhc2gKK3RvIGFsbG93IGNvcmUgZHVtcHMsIG5vdyBkbyAKK3VsaW1pdCAtYSAKK3RvIHZlcmlmeSB0aGF0IHRoZSBsaW1pdCB3YXMgYWNjZXB0ZWQuCisKK0Egc2FtcGxlIGNvcmUgZHVtcAorVG8gY3JlYXRlIHRoaXMgSSdtIGdvaW5nIHRvIGRvCit1bGltaXQgLWMgdW5saW1pdGVkCitnZGIgCit0byBsYXVuY2ggZ2RiIChteSB2aWN0aW0gYXBwLiApIG5vdyBiZSBiYWQgJiBkbyB0aGUgZm9sbG93aW5nIGZyb20gYW5vdGhlciAKK3RlbG5ldC94dGVybSBzZXNzaW9uIHRvIHRoZSBzYW1lIG1hY2hpbmUKK3BzIC1hdXggfCBncmVwIGdkYgora2lsbCAtU0lHU0VHViA8Z2RiJ3MgcGlkPgorb3IgYWx0ZXJuYXRpdmVseSB1c2Uga2lsbGFsbCAtU0lHU0VHViBnZGIgaWYgeW91IGhhdmUgdGhlIGtpbGxhbGwgY29tbWFuZC4KK05vdyBsb29rIGF0IHRoZSBjb3JlIGR1bXAuCisuL2dkYiAuL2dkYiBjb3JlCitEaXNwbGF5cyB0aGUgZm9sbG93aW5nCitHTlUgZ2RiIDQuMTgKK0NvcHlyaWdodCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFyZQord2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KK1R5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgorVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRldGFpbHMuCitUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiczM5MC1pYm0tbGludXgiLi4uCitDb3JlIHdhcyBnZW5lcmF0ZWQgYnkgYC4vZ2RiJy4KK1Byb2dyYW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCAxMSwgU2VnbWVudGF0aW9uIGZhdWx0LgorUmVhZGluZyBzeW1ib2xzIGZyb20gL3Vzci9saWIvbGlibmN1cnNlcy5zby40Li4uZG9uZS4KK1JlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGlibS5zby42Li4uZG9uZS4KK1JlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGliYy5zby42Li4uZG9uZS4KK1JlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGQtbGludXguc28uMi4uLmRvbmUuCisjMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKK1NldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBkZWJ1Z2dpbmcgZ2RiLgorQnJlYWtwb2ludCAxIGF0IDB4NGRjNmY4OiBmaWxlIHV0aWxzLmMsIGxpbmUgNDcxLgorQnJlYWtwb2ludCAyIGF0IDB4NGQ4N2E0OiBmaWxlIHRvcC5jLCBsaW5lIDI2MDkuCisodG9wLWdkYikgaW5mbyBzdGFjaworIzAgIDB4NDAxMjZkMWEgaW4gcmVhZCAoKSBmcm9tIC9saWIvbGliYy5zby42CisjMSAgMHg1MjhmMjYgaW4gcmxfZ2V0YyAoc3RyZWFtPTB4N2ZmZmZkZTgpIGF0IGlucHV0LmM6NDAyCisjMiAgMHg1MjhlZDAgaW4gcmxfcmVhZF9rZXkgKCkgYXQgaW5wdXQuYzozODEKKyMzICAweDUxNjdlNiBpbiByZWFkbGluZV9pbnRlcm5hbF9jaGFyICgpIGF0IHJlYWRsaW5lLmM6NDU0CisjNCAgMHg1MTY4ZWUgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhcmxvb3AgKCkgYXQgcmVhZGxpbmUuYzo1MDcKKyM1ICAweDUxNjkyYyBpbiByZWFkbGluZV9pbnRlcm5hbCAoKSBhdCByZWFkbGluZS5jOjUyMQorIzYgIDB4NTE2NGZlIGluIHJlYWRsaW5lIChwcm9tcHQ9MHg3ZmZmZjgxMCAiXDE3N4H/gfh4XDE3N4H/gfeB2FwxNzeB/4H4eIHAIikKKyAgICBhdCByZWFkbGluZS5jOjM0OQorIzcgIDB4NGQ3YThhIGluIGNvbW1hbmRfbGluZV9pbnB1dCAocHJyb21wdD0weDU2NDQyMCAiKGdkYikgIiwgcmVwZWF0PTEsCisgICAgYW5ub3RhdGlvbl9zdWZmaXg9MHg0ZDZiNDQgInByb21wdCIpIGF0IHRvcC5jOjIwOTEKKyM4ICAweDRkNmNmMCBpbiBjb21tYW5kX2xvb3AgKCkgYXQgdG9wLmM6MTM0NQorIzkgIDB4NGUyNWJjIGluIG1haW4gKGFyZ2M9MSwgYXJndj0weDdmZmZmZGY0KSBhdCBtYWluLmM6NjM1CisKKworTERECis9PT0KK1RoaXMgaXMgYSBwcm9ncmFtIHdoaWNoIGxpc3RzIHRoZSBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGEgbGlicmFyeSBuZWVkcywKK05vdGUgeW91IGFsc28gZ2V0IHRoZSByZWxvY2F0aW9ucyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgdGV4dCBzZWdtZW50cyB3aGljaAoraGVscCB3aGVuIHVzaW5nIG9iamR1bXAgLS1zb3VyY2UuCitlLmcuCisgbGRkIC4vZ2RiCitvdXRwdXRzCitsaWJuY3Vyc2VzLnNvLjQgPT4gL3Vzci9saWIvbGlibmN1cnNlcy5zby40ICgweDQwMDE4MDAwKQorbGlibS5zby42ID0+IC9saWIvbGlibS5zby42ICgweDQwMDVlMDAwKQorbGliYy5zby42ID0+IC9saWIvbGliYy5zby42ICgweDQwMDg0MDAwKQorL2xpYi9sZC1saW51eC5zby4yID0+IC9saWIvbGQtbGludXguc28uMiAoMHg0MDAwMDAwMCkKKworCitEZWJ1Z2dpbmcgc2hhcmVkIGxpYnJhcmllcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK01vc3QgcHJvZ3JhbXMgdXNlIHNoYXJlZCBsaWJyYXJpZXMsIGhvd2V2ZXIgaXQgY2FuIGJlIHZlcnkgcGFpbmZ1bAord2hlbiB5b3Ugc2luZ2xlIHN0ZXAgaW5zdHJ1Y3Rpb24gaW50byBhIGZ1bmN0aW9uIGxpa2UgcHJpbnRmIGZvciB0aGUgCitmaXJzdCB0aW1lICYgeW91IGVuZCB1cCBpbiBmdW5jdGlvbnMgbGlrZSBfZGxfcnVudGltZV9yZXNvbHZlIHRoaXMgaXMKK3RoZSBsZC5zbyBkb2luZyBsYXp5IGJpbmRpbmcsIGxhenkgYmluZGluZyBpcyBhIGNvbmNlcHQgaW4gRUxGIHdoZXJlIAorc2hhcmVkIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSBub3QgbG9hZGVkIGludG8gbWVtb3J5IHVubGVzcyB0aGV5IGFyZSAKK2FjdHVhbGx5IHVzZWQsIGdyZWF0IGZvciBzYXZpbmcgbWVtb3J5IGJ1dCBhIHBhaW4gdG8gZGVidWcuCitUbyBnZXQgYXJvdW5kIHRoaXMgZWl0aGVyIHJlbGluayB0aGUgcHJvZ3JhbSAtc3RhdGljIG9yIGV4aXQgZ2RiIHR5cGUgCitleHBvcnQgTERfQklORF9OT1c9dHJ1ZSB0aGlzIHdpbGwgc3RvcCBsYXp5IGJpbmRpbmcgJiByZXN0YXJ0IHRoZSBnZGInaW5nIAordGhlIHByb2dyYW0gaW4gcXVlc3Rpb24uCisgCisKKworRGVidWdnaW5nIG1vZHVsZXMKKz09PT09PT09PT09PT09PT09CitBcyBtb2R1bGVzIGFyZSBkeW5hbWljYWxseSBsb2FkZWQgaW50byB0aGUga2VybmVsIHRoZWlyIGFkZHJlc3MgY2FuIGJlCithbnl3aGVyZSB0byBnZXQgYXJvdW5kIHRoaXMgdXNlIHRoZSAtbSBvcHRpb24gd2l0aCBpbnNtb2QgdG8gZW1pdCBhIGxvYWQKK21hcCB3aGljaCBjYW4gYmUgcGlwZWQgaW50byBhIGZpbGUgaWYgcmVxdWlyZWQuCisKK1RoZSBwcm9jIGZpbGUgc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PQorV2hhdCBpcyBpdCA/LgorSXQgaXMgYSBmaWxlc3lzdGVtIGNyZWF0ZWQgYnkgdGhlIGtlcm5lbCB3aXRoIGZpbGVzIHdoaWNoIGFyZSBjcmVhdGVkIG9uIGRlbWFuZAorYnkgdGhlIGtlcm5lbCBpZiByZWFkLCBvciBjYW4gYmUgdXNlZCB0byBtb2RpZnkga2VybmVsIHBhcmFtZXRlcnMsCitpdCBpcyBhIHBvd2VyZnVsIGNvbmNlcHQuCisKK2UuZy4KKworY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkIAorT24gbXkgbWFjaGluZSBvdXRwdXRzIAorMCAKK3RlbGxpbmcgbWUgaXBfZm9yd2FyZGluZyBpcyBub3Qgb24gdG8gc3dpdGNoIGl0IG9uIEkgY2FuIGRvCitlY2hvIDEgPiAgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKK2NhdCBpdCBhZ2FpbgorY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkIAorT24gbXkgbWFjaGluZSBub3cgb3V0cHV0cworMQorSVAgZm9yd2FyZGluZyBpcyBvbi4KK1RoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiAmIGhhdmluZyBhIGxvb2sgYXJvdW5kLAorc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KKworQWxsIHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgbWFjaGluZSBoYXZlIHRoZXJlIG93biBlbnRyeSBkZWZpbmVkIGJ5CisvcHJvYy88cGlkPgorU28gbGV0cyBoYXZlIGEgbG9vayBhdCB0aGUgaW5pdCBwcm9jZXNzCitjZCAvcHJvYy8xCisKK2NhdCBjbWRsaW5lCitlbWl0cworaW5pdCBbMl0KKworY2QgL3Byb2MvMS9mZAorVGhpcyBjb250YWlucyBudW1lcmljYWwgZW50cmllcyBvZiBhbGwgdGhlIG9wZW4gZmlsZXMsCitzb21lIG9mIHRoZXNlIHlvdSBjYW4gY2F0IGUuZy4gc3Rkb3V0ICgyKQorCitjYXQgL3Byb2MvMjkvbWFwcworb24gbXkgbWFjaGluZSBlbWl0cworCiswMDQwMDAwMC0wMDQ3ODAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCiswMDQ3ODAwMC0wMDQ3ZTAwMCBydy1wIDAwMDc3MDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCiswMDQ3ZTAwMC0wMDQ5MjAwMCByd3hwIDAwMDAwMDAwIDAwOjAwIDAKKzQwMDAwMDAwLTQwMDE1MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCis0MDAxNTAwMC00MDAxNjAwMCBydy1wIDAwMDE0MDAwIDVmOjAwIDE0MzgyICAgICAgL2xpYi9sZC0yLjEuMi5zbworNDAwMTYwMDAtNDAwMTcwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCis0MDAxNzAwMC00MDAxODAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKKzQwMDE4MDAwLTQwMDFiMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKKzQwMDFiMDAwLTQwMDFjMDAwIHJ3LXAgMDAwMDIwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKKzQwMDFjMDAwLTQwMTBkMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KKzQwMTBkMDAwLTQwMTExMDAwIHJ3LXAgMDAwZjAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KKzQwMTExMDAwLTQwMTE0MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAorNDAxMTQwMDAtNDAxMWUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCis0MDExZTAwMC00MDExZjAwMCBydy1wIDAwMDA5MDAwIDVmOjAwIDE0NDA4ICAgICAgL2xpYi9saWJuc3NfZmlsZXMtMi4xLjIuc28KKzdmZmZkMDAwLTgwMDAwMDAwIHJ3eHAgZmZmZmUwMDAgMDA6MDAgMAorCisKK1Nob3dpbmcgdXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5pdCB1c2VzIHdoZXJlIHRoZXkgYXJlIGluIG1lbW9yeQorJiBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGZvciBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEuCisKKy9wcm9jLzEvY3dkIGlzIGEgc29mdGxpbmsgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisvcHJvYy8xL3Jvb3QgaXMgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gZm9yIHRoaXMgcHJvY2Vzcy4gCisKKy9wcm9jLzEvbWVtIGlzIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2Vzc2VzIG1lbW9yeSB3aGljaCB5b3UKK2NhbiByZWFkICYgd3JpdGUgdG8gbGlrZSBhIGZpbGUuCitzdHJhY2UgdXNlcyB0aGlzIHNvbWV0aW1lcyBhcyBpdCBpcyBhIGJpdCBmYXN0ZXIgdGhhbiB0aGUKK3JhdGhlciBpbmVmZmljZW50IHB0cmFjZSBpbnRlcmZhY2UgZm9yIHBlZWtpbmcgYXQgREFUQS4KKworCitjYXQgc3RhdHVzIAorCitOYW1lOiAgIGluaXQKK1N0YXRlOiAgUyAoc2xlZXBpbmcpCitQaWQ6ICAgIDEKK1BQaWQ6ICAgMAorVWlkOiAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAwCitHaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKK0dyb3VwczoKK1ZtU2l6ZTogICAgICA0MDgga0IKK1ZtTGNrOiAgICAgICAgIDAga0IKK1ZtUlNTOiAgICAgICAyMDgga0IKK1ZtRGF0YTogICAgICAgMjQga0IKK1ZtU3RrOiAgICAgICAgIDgga0IKK1ZtRXhlOiAgICAgICAzNjgga0IKK1ZtTGliOiAgICAgICAgIDAga0IKK1NpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMAorU2lnQmxrOiAwMDAwMDAwMDAwMDAwMDAwCitTaWdJZ246IDdmZmZmZmZmZDdmMGQ4ZmMKK1NpZ0NndDogMDAwMDAwMDAyODBiMjYwMworQ2FwSW5oOiAwMDAwMDAwMGZmZmZmZWZmCitDYXBQcm06IDAwMDAwMDAwZmZmZmZmZmYKK0NhcEVmZjogMDAwMDAwMDBmZmZmZmVmZgorCitVc2VyIFBTVzogICAgMDcwZGUwMDAgODA0MTQxNDYKK3Rhc2s6IDAwNGI2MDAwIHRzczogMDA0YjYyZDgga3NwOiAwMDRiN2NhOCBwdF9yZWdzOiAwMDRiN2Y2OAorVXNlciBHUFJTOgorMDAwMDA0MDAgIDAwMDAwMDAwICAwMDAwMDAwYiAgN2ZmZmZhOTAKKzAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwNDVkOWY0CiswMDQ1Y2FmYyAgN2ZmZmZhOTAgIDdmZmZmZjE4ICAwMDQ1Y2IwOAorMDAwMTA0MDAgIDgwNDAzOWU4ICA4MDQwM2FmOCAgN2ZmZmY4YjAKK1VzZXIgQUNSUzoKKzAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCiswMDAwMDAwMSAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMAorMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKKzAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCitLZXJuZWwgQmFja0NoYWluICBDYWxsQ2hhaW4gICAgQmFja0NoYWluICBDYWxsQ2hhaW4KKyAgICAgICAwMDRiN2NhOCAgIDgwMDJiZDBjICAgICAwMDRiN2QxOCAgIDgwMDJiOTJjCisgICAgICAgMDA0YjdkYjggICA4MDA1Y2Q1MCAgICAgMDA0YjdlMzggICA4MDA1ZDEyYQorICAgICAgIDAwNGI3ZjA4ICAgODAwMTkxMTQgICAgICAgICAgICAgICAgICAgICAKK1Nob3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzIG1lbW9yeSB1c2FnZSAmIHN0YXR1cyBvZiBzb21lIHNpZ25hbHMgJgordGhlIHByb2Nlc3NlcydlcyByZWdpc3RlcnMgZnJvbSB0aGUga2VybmVsIHRhc2tfc3RydWN0dXJlCithcyB3ZWxsIGFzIGEgYmFja2NoYWluIHdoaWNoIG1heSBiZSB1c2VmdWwgaWYgYSBwcm9jZXNzIGNyYXNoZXMKK2luIHRoZSBrZXJuZWwgZm9yIHNvbWUgdW5rbm93biByZWFzb24uCisKK1NvbWUgZHJpdmVyIGRlYnVnZ2luZyB0ZWNobmlxdWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGVidWcgZmVhdHVyZQorLS0tLS0tLS0tLS0tLQorU29tZSBvZiBvdXIgZHJpdmVycyBub3cgc3VwcG9ydCBhICJkZWJ1ZyBmZWF0dXJlIiBpbgorL3Byb2MvczM5MGRiZiBzZWUgczM5MGRiZi50eHQgaW4gdGhlIGxpbnV4L0RvY3VtZW50YXRpb24gZGlyZWN0b3J5Citmb3IgbW9yZSBpbmZvLgorZS5nLiAKK3RvIHN3aXRjaCBvbiB0aGUgbGNzICJkZWJ1ZyBmZWF0dXJlIgorZWNobyA1ID4gL3Byb2MvczM5MGRiZi9sY3MvbGV2ZWwKKyYgdGhlbiBhZnRlciB0aGUgZXJyb3Igb2NjdXJyZWQuCitjYXQgL3Byb2MvczM5MGRiZi9sY3Mvc3ByaW50ZiA+L2xvZ2ZpbGUKK3RoZSBsb2dmaWxlIG5vdyBjb250YWlucyBzb21lIGluZm9ybWF0aW9uIHdoaWNoIG1heSBoZWxwCit0ZWNoIHN1cHBvcnQgcmVzb2x2ZSBhIHByb2JsZW0gaW4gdGhlIGZpZWxkLgorCisKKworaGlnaCBsZXZlbCBkZWJ1Z2dpbmcgbmV0d29yayBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lmY29uZmlnIGlzIGEgcXVpdGUgdXNlZnVsIGNvbW1hbmQKK2l0IGdpdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5ldHdvcmsgZHJpdmVycy4KKworSWYgeW91IHN1c3BlY3QgeW91ciBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXMgZGVhZAorb25lIHdheSB0byBjaGVjayBpcyB0eXBlIAoraWZjb25maWcgPG5ldHdvcmsgZGV2aWNlPiAKK2UuZy4gdHIwCitZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQordHIwICAgICAgIExpbmsgZW5jYXA6MTYvNCBNYnBzIFRva2VuIFJpbmcgKE5ldykgIEhXYWRkciAwMDowNDpBQzoyMDo4RTo0OAorICAgICAgICAgIGluZXQgYWRkcjo5LjE2NC4xODUuMTMyICBCY2FzdDo5LjE2NC4xOTEuMjU1ICBNYXNrOjI1NS4yNTUuMjI0LjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNVUxUSUNBU1QgIE1UVToyMDAwICBNZXRyaWM6MQorICAgICAgICAgIFJYIHBhY2tldHM6MjQ2MTM0IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKKyAgICAgICAgICBUWCBwYWNrZXRzOjUgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCisgICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCisKK2lmIHRoZSBkZXZpY2UgZG9lc24ndCBzYXkgdXAKK3RyeQorL2V0Yy9yYy5kL2luaXQuZC9uZXR3b3JrIHN0YXJ0IAorKCB0aGlzIHN0YXJ0cyB0aGUgbmV0d29yayBzdGFjayAmIGhvcGVmdWxseSBjYWxscyBpZmNvbmZpZyB0cjAgdXAgKS4KK2lmY29uZmlnIGxvb2tzIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2MvbmV0L2RldiAmIHByZXNlbnRzIGl0IGluIGEgbW9yZSBwcmVzZW50YWJsZSBmb3JtCitOb3cgcGluZyB0aGUgZGV2aWNlIGZyb20gYSBtYWNoaW5lIGluIHRoZSBzYW1lIHN1Ym5ldC4KK2lmIHRoZSBSWCBwYWNrZXRzIGNvdW50ICYgVFggcGFja2V0cyBjb3VudHMgZG9uJ3QgaW5jcmVtZW50IHlvdSBwcm9iYWJseQoraGF2ZSBwcm9ibGVtcy4KK25leHQgCitjYXQgL3Byb2MvbmV0L2FycAorRG8geW91IHNlZSBhbnkgaGFyZHdhcmUgYWRkcmVzc2VzIGluIHRoZSBjYWNoZSBpZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLgorTmV4dCB0cnkKK3BpbmcgLWMgNSA8YnJvYWRjYXN0X2FkZHI+IGkuZS4gdGhlIEJjYXN0IGZpZWxkIGFib3ZlIGluIHRoZSBvdXRwdXQgb2YKK2lmY29uZmlnLiBEbyB5b3Ugc2VlIGFueSByZXBsaWVzIGZyb20gbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgbWFjaGluZQoraWYgbm90IHlvdSBtYXkgaGF2ZSBwcm9ibGVtcy4gYWxzbyBpZiB0aGUgVFggcGFja2V0cyBjb3VudCBpbiBpZmNvbmZpZworaGFzbid0IGluY3JlbWVudGVkIGVpdGhlciB5b3UgaGF2ZSBzZXJpb3VzIHByb2JsZW1zIGluIHlvdXIgZHJpdmVyIAorKGUuZy4gdGhlIHR4YnVzeSBmaWVsZCBvZiB0aGUgbmV0d29yayBkZXZpY2UgYmVpbmcgc3R1Y2sgb24gKSAKK29yIHlvdSBtYXkgaGF2ZSBtdWx0aXBsZSBuZXR3b3JrIGRldmljZXMgY29ubmVjdGVkLgorCisKK2NoYW5kZXYKKy0tLS0tLS0KK1RoZXJlIGlzIGEgbmV3IGRldmljZSBsYXllciBmb3IgY2hhbm5lbCBkZXZpY2VzLCBzb21lCitkcml2ZXJzIGUuZy4gbGNzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhpcyBsYXllci4KK0lmIHRoZSBkZXZpY2UgdXNlcyB0aGUgY2hhbm5lbCBkZXZpY2UgbGF5ZXIgeW91J2xsIGJlCithYmxlIHRvIGZpbmQgd2hhdCBpbnRlcnJ1cHRzIGl0IHVzZXMgJiB0aGUgY3VycmVudCBzdGF0ZSAKK29mIHRoZSBkZXZpY2UuCitTZWUgdGhlIG1hbnBhZ2UgY2hhbmRldi44ICZ0eXBlIGNhdCAvcHJvYy9jaGFuZGV2IGZvciBtb3JlIGluZm8uCisKKworCitTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitiYXNoL3NoCisKK2Jhc2ggLXggPHNjcmlwdG5hbWU+CitlLmcuIGJhc2ggLXggL3Vzci9iaW4vYmFzaGJ1ZworZGlzcGxheXMgdGhlIGZvbGxvd2luZyBsaW5lcyBhcyBpdCBleGVjdXRlcyB0aGVtLgorKyBNQUNISU5FPWk1ODYKKysgT1M9bGludXgtZ251CisrIENDPWdjYworKyBDRkxBR1M9IC1EUFJPR1JBTT0nYmFzaCcgLURIT1NUVFlQRT0naTU4NicgLURPU1RZUEU9J2xpbnV4LWdudScgLURNQUNIVFlQRT0naTU4Ni1wYy1saW51eC1nbnUnIC1EU0hFTEwgLURIQVZFX0NPTkZJR19IICAgLUkuIC1JLiAtSS4vbGliIC1PMiAtcGlwZQorKyBSRUxFQVNFPTIuMDEKKysgUEFUQ0hMRVZFTD0xCisrIFJFTFNUQVRVUz1yZWxlYXNlCisrIE1BQ0hUWVBFPWk1ODYtcGMtbGludXgtZ251ICAgCisKK3BlcmwgLWQgPHNjcmlwdG5hbWU+IHJ1bnMgdGhlIHBlcmxzY3JpcHQgaW4gYSBmdWxseSBpbnRlcmNhdGl2ZSBkZWJ1Z2dlcgorPGxpa2UgZ2RiPi4KK1R5cGUgJ2gnIGluIHRoZSBkZWJ1Z2dlciBmb3IgaGVscC4KKworZm9yIGRlYnVnZ2luZyBqYXZhIHR5cGUKK2pkYiA8ZmlsZW5hbWU+IGFub3RoZXIgZnVsbHkgaW50ZXJhY3RpdmUgZ2RiIHN0eWxlIGRlYnVnZ2VyLgorJiB0eXBlID8gaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgorCisKKworRHVtcHRvb2wgJiBMY3Jhc2ggKCBsa2NkICkKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitNaWNoYWVsIEhvbHpoZXUgJiBvdGhlcnMgaGVyZSBhdCBJQk0gaGF2ZSBhIGZhaXJseSBtYXR1cmUgcG9ydCBvZiAKK1NHSSdzIGxjcmFzaCB0b29sIHdoaWNoIGFsbG93cyBvbmUgdG8gbG9vayBhdCBrZXJuZWwgc3RydWN0dXJlcyBpbiBhCitydW5uaW5nIGtlcm5lbC4KKworSXQgYWxzbyBjb21wbGVtZW50cyBhIHRvb2wgY2FsbGVkIGR1bXB0b29sIHdoaWNoIGR1bXBzIGFsbCB0aGUga2VybmVsJ3MKK21lbW9yeSBwYWdlcyAmIHJlZ2lzdGVycyB0byBlaXRoZXIgYSB0YXBlIG9yIGEgZGlzay4KK1RoaXMgY2FuIGJlIHVzZWQgYnkgdGVjaCBzdXBwb3J0IG9yIGFuIGFtYml0aW91cyBlbmQgdXNlciBkbworcG9zdCBtb3J0ZW0gZGVidWdnaW5nIG9mIGEgbWFjaGluZSBsaWtlIGdkYiBjb3JlIGR1bXBzLgorCitHb2luZyBpbnRvIGhvdyB0byB1c2UgdGhpcyB0b29sIGluIGRldGFpbCB3aWxsIGJlIGV4cGxhaW5lZAoraW4gb3RoZXIgZG9jdW1lbnRhdGlvbiBzdXBwbGllZCBieSBJQk0gd2l0aCB0aGUgcGF0Y2hlcyAmIHRoZSAKK2xjcmFzaCBob21lcGFnZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvbGtjZC8gJiB0aGUgbGNyYXNoIG1hbnBhZ2UuCisKK0hvdyB0aGV5IHdvcmsKKy0tLS0tLS0tLS0tLS0KK0xjcmFzaCBpcyBhIHBlcmZlY3RseSBub3JtYWwgcHJvZ3JhbSxob3dldmVyLCBpdCByZXF1aXJlcyAyIAorYWRkaXRpb25hbCBmaWxlcywgS2VybnR5cGVzIHdoaWNoIGlzIGJ1aWx0IHVzaW5nIGEgcGF0Y2ggdG8gdGhlIAorbGludXgga2VybmVsIHNvdXJjZXMgaW4gdGhlIGxpbnV4IHJvb3QgZGlyZWN0b3J5ICYgdGhlIFN5c3RlbS5tYXAuCisKK0tlcm50eXBlcyBpcyBhbiBhbiBvYmplY3RmaWxlIHdob3NlIHNvbGUgcHVycG9zZSBpbiBsaWZlCitpcyB0byBwcm92aWRlIHN0YWJzIGRlYnVnIGluZm8gdG8gbGNyYXNoLCB0byBkbyB0aGlzCitLZXJudHlwZXMgaXMgYnVpbHQgZnJvbSBrZXJudHlwZXMuYyB3aGljaCBqdXN0IGluY2x1ZGVzIHRoZSBtb3N0IGNvbW1vbmx5CityZWZlcmVuY2VkIGhlYWRlciBmaWxlcyB1c2VkIHdoZW4gZGVidWdnaW5nLCBsY3Jhc2ggY2FuIHRoZW4gcmVhZCB0aGUKKy5zdGFicyBzZWN0aW9uIG9mIHRoaXMgZmlsZS4KKworRGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0gaXQgdXNlcyAvZGV2L21lbQorYWx0ZXJuYXRpdmVseSBmb3IgcG9zdCBtb3J0ZW0gZGVidWdnaW5nIGl0IHVzZXMgdGhlIGRhdGEgCitjb2xsZWN0ZWQgYnkgZHVtcHRvb2wuCisKKworCitTeXNScQorPT09PT0KK1RoaXMgaXMgbm93IHN1cHBvcnRlZCBieSBsaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4KK1RvIGVuYWJsZSBpdCBkbyBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCAKK0tlcm5lbCBIYWNraW5nIC0+IE1hZ2ljIFN5c1JxIEtleSBFbmFibGVkCitlY2hvICIxIiA+IC9wcm9jL3N5cy9rZXJuZWwvc3lzcnEKK2Fsc28gdHlwZQorZWNobyAiOCIgPi9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrCitUbyBtYWtlIHByaW50ayBvdXRwdXQgZ28gdG8gY29uc29sZS4KK09uIDM5MCBhbGwgY29tbWFuZHMgYXJlIHByZWZpeGVkIHdpdGgKK14tCitlLmcuCiteLXQgd2lsbCBzaG93IHRhc2tzLgorXi0/IG9yIHNvbWUgdW5rbm93biBjb21tYW5kIHdpbGwgZGlzcGxheSBoZWxwLgorVGhlIHN5c3JxIGtleSByZWFkaW5nIGlzIHZlcnkgcGlja3kgKCBJIGhhdmUgdG8gdHlwZSB0aGUga2V5cyBpbiBhbgorIHh0ZXJtIHNlc3Npb24gJiBwYXN0ZSB0aGVtICBpbnRvIHRoZSB4MzI3MCBjb25zb2xlICkKKyYgaXQgbWF5IGJlIHdpc2UgdG8gcHJlZGVmaW5lIHRoZSBrZXlzIGFzIGRlc2NyaWJlZCBpbiB0aGUgVk0gaGludHMgYWJvdmUKKworVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzeW5jaW5nIGRpc2tzIHVubW91bnRpbmcgJiByZWJvb3RpbmcKK2lmIHRoZSBtYWNoaW5lIGdldHMgcGFydGlhbGx5IGh1bmcuCisKK1JlYWQgRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgZm9yIG1vcmUgaW5mbworCitSZWZlcmVuY2VzOgorPT09PT09PT09PT0KK0VudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUmVmZXJlbmNlIFN1bW1hcnkKK0VudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24KK0hhcnRtdXQgUGVubmVycyBzMzkwIHN0YWNrIGZyYW1lIHNoZWV0LgorSUJNIE1haW5mcmFtZSBDaGFubmVsIEF0dGFjaG1lbnQgYSB0ZWNobm9sb2d5IGJyaWVmIGZyb20gYSBDSVNDTyB3ZWJwYWdlCitWYXJpb3VzIGJpdHMgb2YgbWFuICYgaW5mbyBwYWdlcyBvZiBMaW51eC4KK0xpbnV4ICYgR0RCIHNvdXJjZS4KK1ZhcmlvdXMgaW5mbyAmIG1hbiBwYWdlcy4KK0NNUyBIZWxwIG9uIHRyYWNpbmcgY29tbWFuZHMuCitMaW51eCBmb3Igcy8zOTAgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKK0xpbnV4IGZvciB6L1NlcmllcyBFbGYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoIEJvdGggSGlnaGx5IFJlY29tbWVuZGVkICkKK3ovQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzgzMi0wMAorRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgU0EyMi03MjA5LTAxICYgdGhlCitFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBTQTIyLTcyMDEtMDUKKworU3BlY2lhbCBUaGFua3MKKz09PT09PT09PT09PT09CitTcGVjaWFsIHRoYW5rcyB0byBOZWFsZSBGZXJndXNvbiB3aG8gbWFpbnRhaW5zIGEgbXVjaAorcHJldHRpZXIgSFRNTCB2ZXJzaW9uIG9mIHRoaXMgcGFnZSBhdAoraHR0cDovL3Blbmd1aW52bS5wcmluY2V0b24uZWR1L25vdGVzLmh0bWwjRGVidWczOTAKK0JvYiBHcmFpbmdlciBTdGVmYW4gQmFkZXIgJiBvdGhlcnMgZm9yIHJlcG9ydGluZyBidWdzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvVEFQRSBiL0RvY3VtZW50YXRpb24vczM5MC9UQVBFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzlhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvVEFQRQpAQCAtMCwwICsxLDEyMiBAQAorQ2hhbm5lbCBhdHRhY2hlZCBUYXBlIGRldmljZSBkcml2ZXIgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tV0FSTklORy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBpcyBjb25zaWRlcmVkIHRvIGJlIEVYUEVSSU1FTlRBTC4gRG8gTk9UIHVzZSBpdCBpbiAKK3Byb2R1Y3Rpb24gZW52aXJvbm1lbnRzLiBGZWVsIGZyZWUgdG8gdGVzdCBpdCBhbmQgcmVwb3J0IHByb2JsZW1zIGJhY2sgdG8gdXMuIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExJTlVYIGZvciB6U2VyaWVzIHRhcGUgZGV2aWNlIGRyaXZlciBtYW5hZ2VzIGNoYW5uZWwgYXR0YWNoZWQgdGFwZSBkcml2ZXMgCit3aGljaCBhcmUgY29tcGF0aWJsZSB0byBJQk0gMzQ4MCBvciBJQk0gMzQ5MCBtYWduZXRpYyB0YXBlIHN1YnN5c3RlbXMuIFRoaXMgCitpbmNsdWRlcyB2YXJpb3VzIG1vZGVscyBvZiB0aGVzZSBkZXZpY2VzIChmb3IgZXhhbXBsZSB0aGUgMzQ5MEUpLiAKKworCitUYXBlIGRyaXZlciBmZWF0dXJlcyAKKworVGhlIGRldmljZSBkcml2ZXIgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDEyOCB0YXBlIGRldmljZXMuIAorTm8gb2ZmaWNpYWwgTElOVVggZGV2aWNlIG1ham9yIG51bWJlciBpcyBhc3NpZ25lZCB0byB0aGUgelNlcmllcyB0YXBlIGRldmljZSAKK2RyaXZlci4gSXQgYWxsb2NhdGVzIG1ham9yIG51bWJlcnMgZHluYW1pY2FsbHkgYW5kIHJlcG9ydHMgdGhlbSBvbiBzeXN0ZW0gCitzdGFydHVwLiAKK1R5cGljYWxseSBpdCB3aWxsIGdldCBtYWpvciBudW1iZXIgMjU0IGZvciBib3RoIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGZyb250LWVuZCAKK2FuZCB0aGUgYmxvY2sgZGV2aWNlIGZyb250LWVuZC4gCisKK1RoZSB0YXBlIGRldmljZSBkcml2ZXIgbmVlZHMgbm8ga2VybmVsIHBhcmFtZXRlcnMuIEFsbCBzdXBwb3J0ZWQgZGV2aWNlcyAKK3ByZXNlbnQgYXJlIGRldGVjdGVkIG9uIGRyaXZlciBpbml0aWFsaXphdGlvbiBhdCBzeXN0ZW0gc3RhcnR1cCBvciBtb2R1bGUgbG9hZC4KK1RoZSBkZXZpY2VzIGRldGVjdGVkIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIHN1YmNoYW5uZWwgbnVtYmVycy4gVGhlIGRldmljZSB3aXRoIAordGhlIGxvd2VzdCBzdWJjaGFubmVsIG51bWJlciBiZWNvbWVzIGRldmljZSAwLCB0aGUgbmV4dCBvbmUgd2lsbCBiZSBkZXZpY2UgMSAKK2FuZCBzbyBvbi4gCisKKworVGFwZSBjaGFyYWN0ZXIgZGV2aWNlIGZyb250LWVuZCAKKworVGhlIHVzdWFsIHdheSB0byByZWFkIG9yIHdyaXRlIHRvIHRoZSB0YXBlIGRldmljZSBpcyB0aHJvdWdoIHRoZSBjaGFyYWN0ZXIgCitkZXZpY2UgZnJvbnQtZW5kLiBUaGUgelNlcmllcyB0YXBlIGRldmljZSBkcml2ZXIgcHJvdmlkZXMgdHdvIGNoYXJhY3RlciBkZXZpY2VzCitmb3IgZWFjaCBwaHlzaWNhbCBkZXZpY2UgLS0gdGhlIGZpcnN0IG9mIHRoZXNlIHdpbGwgcmV3aW5kIGF1dG9tYXRpY2FsbHkgd2hlbiAKK2l0IGlzIGNsb3NlZCwgdGhlIHNlY29uZCB3aWxsIG5vdCByZXdpbmQgYXV0b21hdGljYWxseS4gCisKK1RoZSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGVzIGFyZSBuYW1lZCAvZGV2L3J0aWJtMCAocmV3aW5kaW5nKSBhbmQgL2Rldi9udGlibTAgCisobm9uLXJld2luZGluZykgZm9yIHRoZSBmaXJzdCBkZXZpY2UsIC9kZXYvcnRpYm0xIGFuZCAvZGV2L250aWJtMSBmb3IgdGhlIAorc2Vjb25kLCBhbmQgc28gb24uIAorCitUaGUgY2hhcmFjdGVyIGRldmljZSBmcm9udC1lbmQgY2FuIGJlIHVzZWQgYXMgYW55IG90aGVyIExJTlVYIHRhcGUgZGV2aWNlLiBZb3UgCitjYW4gd3JpdGUgdG8gaXQgYW5kIHJlYWQgZnJvbSBpdCB1c2luZyBMSU5VWCBmYWNpbGl0aWVzIHN1Y2ggYXMgR05VIHRhci4gVGhlIAordG9vbCBtdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIGNvbnRyb2wgb3BlcmF0aW9ucywgc3VjaCBhcyByZXdpbmRpbmcgdGhlIHRhcGUgCitvciBza2lwcGluZyBhIGZpbGUuIAorCitNb3N0IExJTlVYIHRhcGUgc29mdHdhcmUgc2hvdWxkIHdvcmsgd2l0aCBlaXRoZXIgdGFwZSBjaGFyYWN0ZXIgZGV2aWNlLiAKKworCitUYXBlIGJsb2NrIGRldmljZSBmcm9udC1lbmQgCisKK1RoZSB0YXBlIGRldmljZSBtYXkgYWxzbyBiZSBhY2Nlc3NlZCBhcyBhIGJsb2NrIGRldmljZSBpbiByZWFkLW9ubHkgbW9kZS4gCitUaGlzIGNvdWxkIGJlIHVzZWQgZm9yIHNvZnR3YXJlIGluc3RhbGxhdGlvbiBpbiB0aGUgc2FtZSB3YXkgYXMgaXQgaXMgdXNlZCB3aXRoIAorb3RoZXIgb3BlcmF0aW9uIHN5c3RlbXMgb24gdGhlIHpTZXJpZXMgcGxhdGZvcm0gKGFuZCBtb3N0IExJTlVYIAorZGlzdHJpYnV0aW9ucyBhcmUgc2hpcHBlZCBvbiBjb21wYWN0IGRpc2sgdXNpbmcgSVNPOTY2MCBmaWxlc3lzdGVtcykuIAorCitPbmUgYmxvY2sgZGV2aWNlIG5vZGUgaXMgcHJvdmlkZWQgZm9yIGVhY2ggcGh5c2ljYWwgZGV2aWNlLiBUaGVzZSBhcmUgbmFtZWQgCisvZGV2L2J0aWJtMCBmb3IgdGhlIGZpcnN0IGRldmljZSwgL2Rldi9idGlibTEgZm9yIHRoZSBzZWNvbmQgYW5kIHNvIG9uLiAKK1lvdSBzaG91bGQgb25seSB1c2UgdGhlIElTTzk2NjAgZmlsZXN5c3RlbSBvbiBMSU5VWCBmb3IgelNlcmllcyB0YXBlcyBiZWNhdXNlIAordGhlIHBoeXNpY2FsIHRhcGUgZGV2aWNlcyBjYW5ub3QgcGVyZm9ybSBmYXN0IHNlZWtzIGFuZCB0aGUgSVNPOTY2MCBzeXN0ZW0gaXMgCitvcHRpbWl6ZWQgZm9yIHRoaXMgc2l0dWF0aW9uLiAKKworCitUYXBlIGJsb2NrIGRldmljZSBleGFtcGxlIAorCitJbiB0aGlzIGV4YW1wbGUgYSB0YXBlIHdpdGggYW4gSVNPOTY2MCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGZpcnN0IAordGFwZSBkZXZpY2UuIElTTzk2NjAgZmlsZXN5c3RlbSBzdXBwb3J0IG11c3QgYmUgYnVpbHQgaW50byB5b3VyIHN5c3RlbSBrZXJuZWwKK2ZvciB0aGlzLiAKK1RoZSBtdCBjb21tYW5kIGlzIHVzZWQgdG8gaXNzdWUgdGFwZSBjb21tYW5kcyBhbmQgdGhlIG1raXNvZnMgY29tbWFuZCB0byAKK2NyZWF0ZSBhbiBJU085NjYwIGZpbGVzeXN0ZW06IAorCistIGNyZWF0ZSBhIExJTlVYIGRpcmVjdG9yeSAoc29tZWRpcikgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGVzeXN0ZW0gCisgICAgIG1rZGlyIHNvbWVkaXIKKyAgICAgY3AgY29udGVudHMgc29tZWRpciAKKworLSBpbnNlcnQgYSB0YXBlIAorCistIGVuc3VyZSB0aGUgdGFwZSBpcyBhdCB0aGUgYmVnaW5uaW5nIAorICAgICBtdCAtZiAvZGV2L250aWJtMCByZXdpbmQgCisKKy0gc2V0IHRoZSBibG9ja3NpemUgb2YgdGhlIGNoYXJhY3RlciBkcml2ZXIuIFRoZSBibG9ja3NpemUgMjA0OCBieXRlcworICBpcyBjb21tb25seSB1c2VkIG9uIElTTzk2NjAgQ0QtUm9tcworICAgICBtdCAtZiAvZGV2L250aWJtMCBzZXRibGsgMjA0OCAKKworLSB3cml0ZSB0aGUgZmlsZXN5c3RlbSB0byB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgCisgICAgIG1raXNvZnMgLW8gL2Rldi9udGlibTAgc29tZWRpciAKKworLSByZXdpbmQgdGhlIHRhcGUgYWdhaW4gCisgICAgIG10IC1mIC9kZXYvbnRpYm0wIHJld2luZCAKKworLSBOb3cgeW91IGNhbiBtb3VudCB5b3VyIG5ldyBmaWxlc3lzdGVtIGFzIGEgYmxvY2sgZGV2aWNlOiAKKyAgICAgbW91bnQgLXQgaXNvOTY2MCAtbyBybyxibG9jaz0yMDQ4IC9kZXYvYnRpYm0wIC9tbnQgCisKK1RPRE8gTGlzdCAKKworICAgLSBEcml2ZXIgaGFzIHRvIGJlIHN0YWJpbGl6ZWQgc3RpbGwKKworQlVHUyAKKworVGhpcyBkcml2ZXIgaXMgY29uc2lkZXJlZCBCRVRBLCB3aGljaCBtZWFucyBzb21lIHdlYWtuZXNzZXMgbWF5IHN0aWxsCitiZSBpbiBpdC4KK0lmIGFuIGVycm9yIG9jY3VycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGUgY29kZSB5b3Ugd2lsbCBnZXQgYSAKK3NlbnNlLWRhdGEgZHVtcC5JbiB0aGF0IGNhc2UgcGxlYXNlIGRvIHRoZSBmb2xsb3dpbmc6IAorCisxLiBzZXQgdGhlIHRhcGUgZHJpdmVyIGRlYnVnIGxldmVsIHRvIG1heGltdW06IAorICAgICBlY2hvIDYgPi9wcm9jL3MzOTBkYmYvdGFwZS9sZXZlbCAKKworMi4gcmUtcGVyZm9ybSB0aGUgYWN0aW9ucyB3aGljaCBwcm9kdWNlZCB0aGUgYnVnLiAoSG9wZWZ1bGx5IHRoZSBidWcgd2lsbCAKKyAgIHJlYXBwZWFyLikgCisKKzMuIGdldCBhIHNuYXBzaG90IGZyb20gdGhlIGRlYnVnLWZlYXR1cmU6IAorICAgICBjYXQgL3Byb2MvczM5MGRiZi90YXBlL2hleF9hc2NpaSA+c29tZWZpbGUgCisKKzQuIE5vdyBwdXQgdGhlIHNuYXBzaG90IHRvZ2V0aGVyIHdpdGggYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc2l0dWF0aW9uIAorICAgdGhhdCBsZWQgdG8gdGhlIGJ1ZzogCisgLSBXaGljaCB0b29sIGRpZCB5b3UgdXNlPyAKKyAtIFdoaWNoIGhhcmR3YXJlIGRvIHlvdSBoYXZlPyAKKyAtIFdhcyB5b3VyIHRhcGUgdW5pdCBvbmxpbmU/IAorIC0gSXMgaXQgYSBzaGFyZWQgdGFwZSB1bml0PyAKKworNS4gU2VuZCBhbiBlbWFpbCB3aXRoIHlvdXIgYnVnIHJlcG9ydCB0bzogCisgICAgIG1haWx0bzpMaW51eDM5MEBkZS5pYm0uY29tIAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzOTcxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9jZHMudHh0CkBAIC0wLDAgKzEsNTEzIEBACitMaW51eCBmb3IgUy8zOTAgYW5kIHpTZXJpZXMKKworQ29tbW9uIERldmljZSBTdXBwb3J0IChDRFMpCitEZXZpY2UgRHJpdmVyIEkvTyBTdXBwb3J0IFJvdXRpbmVzCisKK0F1dGhvcnMgOiBJbmdvIEFkbHVuZworCSAgQ29ybmVsaWEgSHVjaworCitDb3B5cmlnaHQsIElCTSBDb3JwLiAxOTk5LTIwMDIKKworSW50cm9kdWN0aW9uCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBjb21tb24gZGV2aWNlIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4LzM5MC4KK0RpZmZlcmVudCB0aGFuIG90aGVyIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIEVTQS8zOTAgaGFzIGRlZmluZWQgYSB1bmlmaWVkCitJL08gYWNjZXNzIG1ldGhvZC4gVGhpcyBnaXZlcyByZWxpZWYgdG8gdGhlIGRldmljZSBkcml2ZXJzIGFzIHRoZXkgZG9uJ3QKK2hhdmUgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBidXMgdHlwZXMsIHBvbGxpbmcgdmVyc3VzIGludGVycnVwdAorcHJvY2Vzc2luZywgc2hhcmVkIHZlcnN1cyBub24tc2hhcmVkIGludGVycnVwdCBwcm9jZXNzaW5nLCBETUEgdmVyc3VzIHBvcnQKK0kvTyAoUElPKSwgYW5kIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG1vcmUuIEhvd2V2ZXIsIHRoaXMgaW1wbGllcyB0aGF0CitlaXRoZXIgZXZlcnkgc2luZ2xlIGRldmljZSBkcml2ZXIgbmVlZHMgdG8gaW1wbGVtZW50IHRoZSBoYXJkd2FyZSBJL08KK2F0dGFjaG1lbnQgZnVuY3Rpb25hbGl0eSBpdHNlbGYsIG9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHByb3ZpZGVzIGZvciBhCit1bmlmaWVkIG1ldGhvZCB0byBhY2Nlc3MgdGhlIGhhcmR3YXJlLCBwcm92aWRpbmcgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQKK2V2ZXJ5IHNpbmdsZSBkZXZpY2UgZHJpdmVyIHdvdWxkIGhhdmUgdG8gcHJvdmlkZSBpdHNlbGYuCisKK1RoZSBkb2N1bWVudCBkb2VzIG5vdCBpbnRlbmQgdG8gZXhwbGFpbiB0aGUgRVNBLzM5MCBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgaW4KK2V2ZXJ5IGRldGFpbC5UaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBFU0EvMzkwIFByaW5jaXBsZXMgb2YKK09wZXJhdGlvbiBtYW51YWwgKElCTSBGb3JtLiBOby4gU0EyMi03MjAxKS4KKworSW4gb3JkZXIgdG8gYnVpbGQgY29tbW9uIGRldmljZSBzdXBwb3J0IGZvciBFU0EvMzkwIEkvTyBpbnRlcmZhY2VzLCBhCitmdW5jdGlvbmFsIGxheWVyIHdhcyBpbnRyb2R1Y2VkIHRoYXQgcHJvdmlkZXMgZ2VuZXJpYyBJL08gYWNjZXNzIG1ldGhvZHMgdG8KK3RoZSBoYXJkd2FyZS4gCisKK1RoZSBjb21tb24gZGV2aWNlIHN1cHBvcnQgbGF5ZXIgY29tcHJpc2VzIHRoZSBJL08gc3VwcG9ydCByb3V0aW5lcyBkZWZpbmVkIAorYmVsb3cuIFNvbWUgb2YgdGhlbSBpbXBsZW1lbnQgY29tbW9uIExpbnV4IGRldmljZSBkcml2ZXIgaW50ZXJmYWNlcywgd2hpbGUgCitzb21lIG9mIHRoZW0gYXJlIEVTQS8zOTAgcGxhdGZvcm0gc3BlY2lmaWMuCisKK05vdGU6CitJbiBvcmRlciB0byB3cml0ZSBhIGRyaXZlciBmb3IgUy8zOTAsIHlvdSBhbHNvIG5lZWQgdG8gbG9vayBpbnRvIHRoZSBpbnRlcmZhY2UKK2Rlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dC4KKworTm90ZSBmb3IgcG9ydGluZyBkcml2ZXJzIGZyb20gMi40OgorVGhlIG1ham9yIGNoYW5nZXMgYXJlOgorKiBUaGUgZnVuY3Rpb25zIHVzZSBhIGNjd19kZXZpY2UgaW5zdGVhZCBvZiBhbiBpcnEgKHN1YmNoYW5uZWwpLgorKiBBbGwgZHJpdmVycyBtdXN0IGRlZmluZSBhIGNjd19kcml2ZXIgKHNlZSBkcml2ZXItbW9kZWwudHh0KSBhbmQgdGhlIGFzc29jaWF0ZWQKKyAgZnVuY3Rpb25zLgorKiByZXF1ZXN0X2lycSgpIGFuZCBmcmVlX2lycSgpIGFyZSBubyBsb25nZXIgZG9uZSBieSB0aGUgZHJpdmVyLgorKiBUaGUgb3Blcl9oYW5kbGVyIGlzIChraW5kb2YpIHJlcGxhY2VkIGJ5IHRoZSBwcm9iZSgpIGFuZCBzZXRfb25saW5lKCkgZnVuY3Rpb25zCisgIG9mIHRoZSBjY3dfZHJpdmVyLgorKiBUaGUgbm90X29wZXJfaGFuZGxlciBpcyAoa2luZG9mKSByZXBsYWNlZCBieSB0aGUgcmVtb3ZlKCkgYW5kIHNldF9vZmZsaW5lKCkKKyAgZnVuY3Rpb25zIG9mIHRoZSBjY3dfZHJpdmVyLgorKiBUaGUgY2hhbm5lbCBkZXZpY2UgbGF5ZXIgaXMgZ29uZS4KKyogVGhlIGludGVycnVwdCBoYW5kbGVycyBtdXN0IGJlIGFkYXB0ZWQgdG8gdXNlIGEgY2N3X2RldmljZSBhcyBhcmd1bWVudC4KKyAgTW9yZW92ZXIsIHRoZXkgZG9uJ3QgcmV0dXJuIGEgZGV2c3RhdCwgYnV0IGFuIGlyYi4KKyogQmVmb3JlIGluaXRpYXRpbmcgYW4gaW8sIHRoZSBvcHRpb25zIG11c3QgYmUgc2V0IHZpYSBjY3dfZGV2aWNlX3NldF9vcHRpb25zKCkuCisKK3JlYWRfZGV2X2NoYXJzKCkJCisgICByZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MKKyAgIAorcmVhZF9jb25mX2RhdGEoKQorICAgcmVhZCBjb25maWd1cmF0aW9uIGRhdGEuCisKK2Njd19kZXZpY2VfZ2V0X2NpdygpCisgICBnZXQgY29tbWFuZHMgZnJvbSBleHRlbmRlZCBzZW5zZSBkYXRhLgorCitjY3dfZGV2aWNlX3N0YXJ0KCkJCisgICBpbml0aWF0ZSBhbiBJL08gcmVxdWVzdC4KKworY2N3X2RldmljZV9yZXN1bWUoKQorICAgcmVzdW1lIGNoYW5uZWwgcHJvZ3JhbSBleGVjdXRpb24uCisKK2Njd19kZXZpY2VfaGFsdCgpCQorICAgdGVybWluYXRlIHRoZSBjdXJyZW50IEkvTyByZXF1ZXN0IHByb2Nlc3NlZCBvbiB0aGUgZGV2aWNlLgorCitkb19JUlEoKQkKKyAgIGdlbmVyaWMgaW50ZXJydXB0IHJvdXRpbmUuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBpbnRlcnJ1cHQgZW50cnkKKyAgIHJvdXRpbmUgd2hlbmV2ZXIgYW4gSS9PIGludGVycnVwdCBpcyBwcmVzZW50ZWQgdG8gdGhlIHN5c3RlbS4gVGhlIGRvX0lSUSgpCisgICByb3V0aW5lIGRldGVybWluZXMgdGhlIGludGVycnVwdCBzdGF0dXMgYW5kIGNhbGxzIHRoZSBkZXZpY2Ugc3BlY2lmaWMKKyAgIGludGVycnVwdCBoYW5kbGVyIGFjY29yZGluZyB0byB0aGUgcnVsZXMgKGZsYWdzKSBkZWZpbmVkIGR1cmluZyBJL08gcmVxdWVzdAorICAgaW5pdGlhdGlvbiB3aXRoIGRvX0lPKCkuCisKK1RoZSBuZXh0IGNoYXB0ZXJzIGRlc2NyaWJlIHRoZSBmdW5jdGlvbnMgb3RoZXIgdGhhbiBkb19JUlEoKSBpbiBtb3JlIGRldGFpbHMuCitUaGUgZG9fSVJRKCkgaW50ZXJmYWNlIGlzIG5vdCBkZXNjcmliZWQsIGFzIGl0IGlzIGNhbGxlZCBmcm9tIHRoZSBMaW51eC8zOTAKK2ZpcnN0IGxldmVsIGludGVycnVwdCBoYW5kbGVyIG9ubHkgYW5kIGRvZXMgbm90IGNvbXByaXNlIGEgZGV2aWNlIGRyaXZlcgorY2FsbGFibGUgaW50ZXJmYWNlLiBJbnN0ZWFkLCB0aGUgZnVuY3Rpb25hbCBkZXNjcmlwdGlvbiBvZiBkb19JTygpIGFsc28KK2Rlc2NyaWJlcyB0aGUgaW5wdXQgdG8gdGhlIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxlci4KKworTm90ZTogQWxsIGV4cGxhbmF0aW9ucyBhcHBseSBhbHNvIHRvIHRoZSA2NCBiaXQgYXJjaGl0ZWN0dXJlIHMzOTB4LgorCisKK0NvbW1vbiBEZXZpY2UgU3VwcG9ydCAoQ0RTKSBmb3IgTGludXgvMzkwIERldmljZSBEcml2ZXJzCisKK0dlbmVyYWwgSW5mb3JtYXRpb24KKworVGhlIGZvbGxvd2luZyBjaGFwdGVycyBkZXNjcmliZSB0aGUgSS9PIHJlbGF0ZWQgaW50ZXJmYWNlIHJvdXRpbmVzIHRoZQorTGludXgvMzkwIGNvbW1vbiBkZXZpY2Ugc3VwcG9ydCAoQ0RTKSBwcm92aWRlcyB0byBhbGxvdyBmb3IgZGV2aWNlIHNwZWNpZmljCitkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9uIHRoZSBJQk0gRVNBLzM5MCBoYXJkd2FyZSBwbGF0Zm9ybS4gVGhvc2UgaW50ZXJmYWNlcworaW50ZW5kIHRvIHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgZXZlcnkgZGV2aWNlIGRyaXZlcgoraW1wbGVtZW50YWlvbiB0byBhbGxvdyB0byBkcml2ZSBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSBvbiB0aGUgRVNBLzM5MAorcGxhdGZvcm0uIFNvbWUgb2YgdGhlIGludGVyZmFjZSByb3V0aW5lcyBhcmUgc3BlY2lmaWMgdG8gTGludXgvMzkwIGFuZCBzb21lCitvZiB0aGVtIGNhbiBiZSBmb3VuZCBvbiBvdGhlciBMaW51eCBwbGF0Zm9ybXMgaW1wbGVtZW50YXRpb25zIHRvby4KK01pc2NlbGxhbmVvdXMgZnVuY3Rpb24gcHJvdG90eXBlcywgZGF0YSBkZWNsYXJhdGlvbnMsIGFuZCBtYWNybyBkZWZpbml0aW9ucworY2FuIGJlIGZvdW5kIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgQyBoZWFkZXIgZmlsZQorbGludXgvaW5jbHVkZS9hc20tczM5MC9pcnEuaC4KKworT3ZlcnZpZXcgb2YgQ0RTIGludGVyZmFjZSBjb25jZXB0cworCitEaWZmZXJlbnQgdG8gb3RoZXIgaGFyZHdhcmUgcGxhdGZvcm1zLCB0aGUgRVNBLzM5MCBhcmNoaXRlY3R1cmUgZG9lc24ndCBkZWZpbmUKK2ludGVycnVwdCBsaW5lcyBtYW5hZ2VkIGJ5IGEgc3BlY2lmaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYW5kIGJ1cyBzeXN0ZW1zCit0aGF0IG1heSBvciBtYXkgbm90IGFsbG93IGZvciBzaGFyZWQgaW50ZXJydXB0cywgRE1BIHByb2Nlc3NpbmcsIGV0Yy4uIEluc3RlYWQsCit0aGUgRVNBLzM5MCBhcmNoaXRlY3R1cmUgaGFzIGltcGxlbWVudGVkIGEgc28gY2FsbGVkIGNoYW5uZWwgc3Vic3lzdGVtLCB0aGF0Citwcm92aWRlcyBhIHVuaWZpZWQgdmlldyBvZiB0aGUgZGV2aWNlcyBwaHlzaWNhbGx5IGF0dGFjaGVkIHRvIHRoZSBzeXN0ZW1zLgorVGhvdWdoIHRoZSBFU0EvMzkwIGhhcmR3YXJlIHBsYXRmb3JtIGtub3dzIGFib3V0IGEgaHVnZSB2YXJpZXR5IG9mIGRpZmZlcmVudAorcGVyaXBoZXJhbCBhdHRhY2htZW50cyBsaWtlIGRpc2sgZGV2aWNlcyAoYWthLiBEQVNEcyksIHRhcGVzLCBjb21tdW5pY2F0aW9uCitjb250cm9sbGVycywgZXRjLiB0aGV5IGNhbiBhbGwgYnkgYWNjZXNzZWQgYnkgYSB3ZWxsIGRlZmluZWQgYWNjZXNzIG1ldGhvZCBhbmQKK3RoZXkgYXJlIHByZXNlbnRpbmcgSS9PIGNvbXBsZXRpb24gYSB1bmlmaWVkIHdheSA6IEkvTyBpbnRlcnJ1cHRpb25zLiBFdmVyeQorc2luZ2xlIGRldmljZSBpcyB1bmlxdWVseSBpZGVudGlmaWVkIHRvIHRoZSBzeXN0ZW0gYnkgYSBzbyBjYWxsZWQgc3ViY2hhbm5lbCwKK3doZXJlIHRoZSBFU0EvMzkwIGFyY2hpdGVjdHVyZSBhbGxvd3MgZm9yIDY0ayBkZXZpY2VzIGJlIGF0dGFjaGVkLgorCitMaW51eCwgaG93ZXZlciwgd2FzIGZpcnN0IGJ1aWx0IG9uIHRoZSBJbnRlbCBQQyBhcmNoaXRlY3R1cmUsIHdpdGggaXRzIHR3bworY2FzY2FkZWQgODI1OSBwcm9ncmFtbWFibGUgaW50ZXJydXB0IGNvbnRyb2xsZXJzIChQSUNzKSwgdGhhdCBhbGxvdyBmb3IgYQorbWF4aW11bSBvZiAxNSBkaWZmZXJlbnQgaW50ZXJydXB0IGxpbmVzLiBBbGwgZGV2aWNlcyBhdHRhY2hlZCB0byBzdWNoIGEgc3lzdGVtCitzaGFyZSB0aG9zZSAxNSBpbnRlcnJ1cHQgbGV2ZWxzLiBEZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSBJU0EgYnVzIHN5c3RlbSBtdXN0Citub3Qgc2hhcmUgaW50ZXJydXB0IGxldmVscyAoYWthLiBJUlFzKSwgYXMgdGhlIElTQSBidXMgYmFzZXMgb24gZWRnZSB0cmlnZ2VyZWQKK2ludGVycnVwdHMuIE1DQSwgRUlTQSwgUENJIGFuZCBvdGhlciBidXMgc3lzdGVtcyBiYXNlIG9uIGxldmVsIHRyaWdnZXJlZAoraW50ZXJydXB0cywgYW5kIHRoZXJld2l0aCBhbGxvdyBmb3Igc2hhcmVkIElSUXMuIEhvd2V2ZXIsIGlmIG11bHRpcGxlIGRldmljZXMKK3ByZXNlbnQgdGhlaXIgaGFyZHdhcmUgc3RhdHVzIGJ5IHRoZSBzYW1lIChzaGFyZWQpIElSUSwgdGhlIG9wZXJhdGluZyBzeXN0ZW0KK2hhcyB0byBjYWxsIGV2ZXJ5IHNpbmdsZSBkZXZpY2UgZHJpdmVyIHJlZ2lzdGVyZWQgb24gdGhpcyBJUlEgaW4gb3JkZXIgdG8KK2RldGVybWluZSB0aGUgZGV2aWNlIGRyaXZlciBvd25pbmcgdGhlIGRldmljZSB0aGF0IHJhaXNlZCB0aGUgaW50ZXJydXB0LgorCitJbiBvcmRlciBub3QgdG8gaW50cm9kdWNlIGEgbmV3IEkvTyBjb25jZXB0IHRvIHRoZSBjb21tb24gTGludXggY29kZSwKK0xpbnV4LzM5MCBwcmVzZXJ2ZXMgdGhlIElSUSBjb25jZXB0IGFuZCBzZW1hbnRpY2FsbHkgbWFwcyB0aGUgRVNBLzM5MAorc3ViY2hhbm5lbHMgdG8gTGludXggYXMgSVJRcy4gVGhpcyBhbGxvd3MgTGludXgvMzkwIHRvIHN1cHBvcnQgdXAgdG8gNjRrCitkaWZmZXJlbnQgSVJRcywgdW5pcXVlbHkgcmVwcmVzZW50aWcgYSBzaW5nbGUgZGV2aWNlIGVhY2guCisKK1VwIHRvIGtlcm5lbCAyLjQsIExpbnV4LzM5MCB1c2VkIHRvIHByb3ZpZGUgaW50ZXJmYWNlcyB2aWEgdGhlIElSUSAoc3ViY2hhbm5lbCkuCitGb3IgaW50ZXJuYWwgdXNlIG9mIHRoZSBjb21tb24gSS9PIGxheWVyLCB0aGVzZSBhcmUgc3RpbGwgdGhlcmUuIEhvd2V2ZXIsIAorZGV2aWNlIGRyaXZlcnMgc2hvdWxkIHVzZSB0aGUgbmV3IGNhbGxpbmcgaW50ZXJmYWNlIHZpYSB0aGUgY2N3X2RldmljZSBvbmx5LgorCitEdXJpbmcgaXRzIHN0YXJ0dXAgdGhlIExpbnV4LzM5MCBzeXN0ZW0gY2hlY2tzIGZvciBwZXJpcGhlcmFsIGRldmljZXMuIEVhY2gKK29mIHRob3NlIGRldmljZXMgaXMgdW5pcXVlbHkgZGVmaW5lZCBieSBhIHNvIGNhbGxlZCBzdWJjaGFubmVsIGJ5IHRoZSBFU0EvMzkwCitjaGFubmVsIHN1YnN5c3RlbS4gV2hpbGUgdGhlIHN1YmNoYW5uZWwgbnVtYmVycyBhcmUgc3lzdGVtIGdlbmVyYXRlZCwgZWFjaAorc3ViY2hhbm5lbCBhbHNvIHRha2VzIGEgdXNlciBkZWZpbmVkIGF0dHJpYnV0ZSwgdGhlIHNvIGNhbGxlZCBkZXZpY2UgbnVtYmVyLgorQm90aCBzdWJjaGFubmVsIG51bWJlciBhbmQgZGV2aWNlIG51bWJlciBjYW4gbm90IGV4Y2VlZCA2NTUzNS4gRHVyaW5nIGRyaXZlcmZzCitpbml0aWFsaXNhdGlvbiwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGNvbnRyb2wgdW5pdCB0eXBlIGFuZCBkZXZpY2UgdHlwZXMgdGhhdCAKK2ltcGx5IHNwZWNpZmljIEkvTyBjb21tYW5kcyAoY2hhbm5lbCBjb21tYW5kIHdvcmRzIC0gQ0NXcykgaW4gb3JkZXIgdG8gb3BlcmF0ZQordGhlIGRldmljZSBhcmUgZ2F0aGVyZWQuIERldmljZSBkcml2ZXJzIGNhbiByZXRyaWV2ZSB0aGlzIHNldCBvZiBoYXJkd2FyZQoraW5mb3JtYXRpb24gZHVyaW5nIHRoZWlyIGluaXRpYWxpemF0aW9uIHN0ZXAgdG8gcmVjb2duaXplIHRoZSBkZXZpY2VzIHRoZXkKK3N1cHBvcnQgdXNpbmcgdGhlIGluZm9ybWF0aW9uIHNhdmVkIGluIHRoZSBzdHJ1Y3QgY2N3X2RldmljZSBnaXZlbiB0byB0aGVtLgorVGhpcyBtZXRob2RzIGltcGxpZXMgdGhhdCBMaW51eC8zOTAgZG9lc24ndCByZXF1aXJlIHRvIHByb2JlIGZvciBmcmVlIChub3QKK2FybWVkKSBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyAoSVJRcykgdG8gZHJpdmUgaXRzIGRldmljZXMgd2l0aC4gV2hlcmUKK2FwcGxpY2FibGUsIHRoZSBkZXZpY2UgZHJpdmVycyBjYW4gdXNlIHRoZSByZWFkX2Rldl9jaGFycygpIHRvIHJldHJpZXZlIGRldmljZQorY2hhcmFjdGVyaXN0aWNzLiBUaGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgaGF2aW5nIHRvIHJlcXVlc3QgZGV2aWNlIG93bmVyc2hpcAorcHJldmlvdXNseS4KKworSW4gb3JkZXIgdG8gYWxsb3cgZm9yIGVhc3kgSS9PIGluaXRpYXRpb24gdGhlIENEUyBsYXllciBwcm92aWRlcyBhCitjY3dfZGV2aWNlX3N0YXJ0KCkgaW50ZXJmYWNlIHRoYXQgdGFrZXMgYSBkZXZpY2Ugc3BlY2lmaWMgY2hhbm5lbCBwcm9ncmFtIChvbmUKK29yIG1vcmUgQ0NXcykgYXMgaW5wdXQgc2V0cyB1cCB0aGUgcmVxdWlyZWQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvbnRyb2wgYmxvY2tzCithbmQgaW5pdGlhdGVzIGFuIEkvTyByZXF1ZXN0IG9uIGJlaGFsZiBvZiB0aGUgZGV2aWNlIGRyaXZlci4gVGhlCitjY3dfZGV2aWNlX3N0YXJ0KCkgcm91dGluZSBhbGxvd3MgdG8gc3BlY2lmeSB3aGV0aGVyIGl0IGV4cGVjdHMgdGhlIENEUyBsYXllcgordG8gbm90aWZ5IHRoZSBkZXZpY2UgZHJpdmVyIGZvciBldmVyeSBpbnRlcnJ1cHQgaXQgb2JzZXJ2ZXMsIG9yIHdpdGggZmluYWwgc3RhdHVzCitvbmx5LiBTZWUgY2N3X2RldmljZV9zdGFydCgpIGZvciBtb3JlIGRldGFpbHMuIEEgZGV2aWNlIGRyaXZlciBtdXN0IG5ldmVyIGlzc3VlCitFU0EvMzkwIEkvTyBjb21tYW5kcyBpdHNlbGYsIGJ1dCBtdXN0IHVzZSB0aGUgTGludXgvMzkwIENEUyBpbnRlcmZhY2VzIGluc3RlYWQuCisKK0ZvciBsb25nIHJ1bm5pbmcgSS9PIHJlcXVlc3QgdG8gYmUgY2FuY2VsZWQsIHRoZSBDRFMgbGF5ZXIgcHJvdmlkZXMgdGhlCitjY3dfZGV2aWNlX2hhbHQoKSBmdW5jdGlvbi4gU29tZSBkZXZpY2VzIHJlcXVpcmUgdG8gaW5pdGlhbGx5IGlzc3VlIGEgSEFMVAorU1VCQ0hBTk5FTCAoSFNDSCkgY29tbWFuZCB3aXRob3V0IGhhdmluZyBwZW5kaW5nIEkvTyByZXF1ZXN0cy4gVGhpcyBmdW5jdGlvbiBpcworYWxzbyBjb3ZlcmVkIGJ5IGNjd19kZXZpY2VfaGFsdCgpLgorCisKK3JlYWRfZGV2X2NoYXJzKCkgLSBSZWFkIERldmljZSBDaGFyYWN0ZXJpc3RpY3MKKworVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGNoYXJhY3RlcmlzdGljcyBmb3IgdGhlIGRldmljZSBzcGVjaWZpZWQuCisKK1RoZSBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgd2l0aCBhbiBpcnEgaGFuZGxlciBpbiBwbGFjZTsgdGhhdCBpcywKK2F0IGVhcmxpZXN0IGR1cmluZyBzZXRfb25saW5lKCkgcHJvY2Vzc2luZy4KKworV2hpbGUgdGhlIHJlcXVlc3QgaXMgcHJvY2VzZWQgc3luY2hyb25vdXNseSwgdGhlIGRldmljZSBpbnRlcnJ1cHQKK2hhbmRsZXIgaXMgY2FsbGVkIGZvciBmaW5hbCBlbmRpbmcgc3RhdHVzLiBJbiBjYXNlIG9mIGVycm9yIHNpdHVhdGlvbnMgdGhlCitpbnRlcnJ1cHQgaGFuZGxlciBtYXkgcmVjb3ZlciBhcHByb3ByaWF0ZWx5LiBUaGUgZGV2aWNlIGlycSBoYW5kbGVyIGNhbgorcmVjb2duaXplIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdHMgYnkgdGhlIGludGVycnVwdGlvbiBwYXJhbWV0ZXIgYmUKKzB4MDA1MjQ0NDMuVGhlIGNjd19kZXZpY2UgbXVzdCBub3QgYmUgbG9ja2VkIHByaW9yIHRvIGNhbGxpbmcgcmVhZF9kZXZfY2hhcnMoKS4KKworVGhlIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZW5hYmxlZCBvciBkaXNhYmxlZC4KKworaW50IHJlYWRfZGV2X2NoYXJzKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB2b2lkICoqYnVmZmVyLCBpbnQgbGVuZ3RoICk7CisKK2NkZXYgICAtIHRoZSBjY3dfZGV2aWNlIHRoZSBpbmZvcm1hdGlvbiBpcyByZXF1ZXN0ZWQgZm9yLgorYnVmZmVyIC0gcG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyLiBUaGUgYnVmZmVyIHBvaW50ZXIgaXRzZWxmCisgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2YWxpZCBidWZmZXIgYXJlYS4KK2xlbmd0aCAtIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHByb3ZpZGVkLgorCitUaGUgcmVhZF9kZXZfY2hhcnMoKSBmdW5jdGlvbiByZXR1cm5zIDoKKworICAgICAgMCAtIHN1Y2Nlc3NmdWwgY29tcGxldGlvbgorLUVOT0RFViAtIGNkZXYgaW52YWxpZAorLUVJTlZBTCAtIGFuIGludmFsaWQgcGFyYW1ldGVyIHdhcyBkZXRlY3RlZCwgb3IgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgZWFybHkuCistRUJVU1kgIC0gYW4gaXJyZWNvdmVyYWJsZSBJL08gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIGRldmljZSBpcyBub3QKKyAgICAgICAgICBvcGVyYXRpb25hbC4KKworCityZWFkX2NvbmZfZGF0YSgpIC0gUmVhZCBDb25maWd1cmF0aW9uIERhdGEKKworUmV0cmlldmUgdGhlIGRldmljZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBkYXRhLiBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgeW91ciAKK2RldmljZSBkZXBlbmRlbnQgSS9PIGNvbW1hbmRzIGZvciB0aGUgZGV2aWNlIHNwZWNpZmljIGxheW91dCBvZiB0aGUgbm9kZSAKK2Rlc2NyaXB0b3IgZWxlbWVudHMuIAorCitUaGUgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIHdpdGggYW4gaXJxIGhhbmRsZXIgaW4gcGxhY2U7IHRoYXQgaXMsCithdCBlYXJsaWVzdCBkdXJpbmcgc2V0X29ubGluZSgpIHByb2Nlc3NpbmcuCisKK1RoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGJ1dCB0aGUgZGV2aWNlIG11c3Qgbm90IGJlCitsb2NrZWQKKworaW50IHJlYWRfY29uZl9kYXRhKHN0cnVjdCBjY3dfZGV2aWNlLCB2b2lkICoqYnVmZmVyLCBpbnQgKmxlbmd0aCwgX191OCBscG0pOworCitjZGV2ICAgLSB0aGUgY2N3X2RldmljZSB0aGUgZGF0YSBpcyByZXF1ZXN0ZWQgZm9yLgorYnVmZmVyIC0gUG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyLiBUaGUgcmVhZF9jb25mX2RhdGEoKSByb3V0aW5lCisgICAgICAgICB3aWxsIGFsbG9jYXRlIGEgYnVmZmVyIGFuZCBpbml0aWFsaXplIHRoZSBidWZmZXIgcG9pbnRlcgorICAgICAgICAgYWNjb3JkaW5nbHkuIEl0J3MgdGhlIGRldmljZSBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0bworICAgICAgICAgcmVsZWFzZSB0aGUga2VybmVsIG1lbW9yeSBpZiBubyBsb25nZXIgbmVlZGVkLiAKK2xlbmd0aCAtIExlbmd0aCBvZiB0aGUgYnVmZmVyIGFsbG9jYXRlZCBhbmQgcmV0cmlldmVkLgorbHBtICAgIC0gTG9naWNhbCBwYXRoIG1hc2sgdG8gYmUgdXNlZCBmb3IgcmV0cmlldmluZyB0aGUgZGF0YS4gSWYKKyAgICAgICAgIHplcm8gdGhlIGRhdGEgaXMgcmV0cmlldmVkIG9uIHRoZSBuZXh0IHBhdGggYXZhaWxhYmxlLgorCitUaGUgcmVhZF9jb25mX2RhdGEoKSBmdW5jdGlvbiByZXR1cm5zIDoKKyAgICAgICAgICAwIC0gU3VjY2Vzc2Z1bCBjb21wbGV0aW9uCistRU5PREVWICAgICAtIGNkZXYgaW52YWxpZC4KKy1FSU5WQUwgICAgIC0gQW4gaW52YWxpZCBwYXJhbWV0ZXIgd2FzIGRldGVjdGVkLCBvciB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBlYXJseS4KKy1FSU8gICAgICAgIC0gQW4gaXJyZWNvdmVyYWJsZSBJL08gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIGRldmljZSBpcworICAgICAgICAgICAgICBub3Qgb3BlcmF0aW9uYWwuCistRU5PTUVNICAgICAtIFRoZSByZWFkX2NvbmZfZGF0YSgpIHJvdXRpbmUgY291bGRuJ3Qgb2J0YWluIHN0b3JhZ2UuCistRU9QTk9UU1VQUCAtIFRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoZSByZWFkIGNvbmZpZ3VyYXRpb24gCisgICAgICAgICAgICAgIGRhdGEgY29tbWFuZC4KKworCitnZXRfY2l3KCkgLSBnZXQgY29tbWFuZCBpbmZvcm1hdGlvbiB3b3JkCisKK1RoaXMgY2FsbCBlbmFibGVzIGEgZGV2aWNlIGRyaXZlciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGNvbW1hbmRzCitmcm9tIHRoZSBleHRlbmRlZCBTZW5zZUlEIGRhdGEuCisKK3N0cnVjdCBjaXcgKgorY2N3X2RldmljZV9nZXRfY2l3KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBfX3UzMiBjbWQpOworCitjZGV2IC0gVGhlIGNjd19kZXZpY2UgZm9yIHdoaWNoIHRoZSBjb21tYW5kIGlzIHRvIGJlIHJldHJpZXZlZC4KK2NtZCAgLSBUaGUgY29tbWFuZCB0eXBlIHRvIGJlIHJldHJpZXZlZC4KKworY2N3X2RldmljZV9nZXRfY2l3KCkgcmV0dXJuczoKK05VTEwgICAgLSBObyBleHRlbmRlZCBkYXRhIGF2YWlsYWJsZSwgaW52YWxpZCBkZXZpY2Ugb3IgY29tbWFuZCBub3QgZm91bmQuCishTlVMTCAgIC0gVGhlIGNvbW1hbmQgcmVxdWVzdGVkLgorCisKK2Njd19kZXZpY2Vfc3RhcnQoKSAtIEluaXRpYXRlIEkvTyBSZXF1ZXN0CisKK1RoZSBjY3dfZGV2aWNlX3N0YXJ0KCkgcm91dGluZXMgaXMgdGhlIEkvTyByZXF1ZXN0IGZyb250LWVuZCBwcm9jZXNzb3IuIEFsbAorZGV2aWNlIGRyaXZlciBJL08gcmVxdWVzdHMgbXVzdCBiZSBpc3N1ZWQgdXNpbmcgdGhpcyByb3V0aW5lLiBBIGRldmljZSBkcml2ZXIKK211c3Qgbm90IGlzc3VlIEVTQS8zOTAgSS9PIGNvbW1hbmRzIGl0c2VsZi4gSW5zdGVhZCB0aGUgY2N3X2RldmljZV9zdGFydCgpCityb3V0aW5lIHByb3ZpZGVzIGFsbCBpbnRlcmZhY2VzIHJlcXVpcmVkIHRvIGRyaXZlIGFyYml0cmFyeSBkZXZpY2VzLgorCitUaGlzIGRlc2NyaXB0aW9uIGFsc28gY292ZXJzIHRoZSBzdGF0dXMgaW5mb3JtYXRpb24gcGFzc2VkIHRvIHRoZSBkZXZpY2UKK2RyaXZlcidzIGludGVycnVwdCBoYW5kbGVyIGFzIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgcnVsZXMgKGZsYWdzKSBkZWZpbmVkCit3aXRoIHRoZSBhc3NvY2lhdGVkIEkvTyByZXF1ZXN0IHdoZW4gY2FsbGluZyBjY3dfZGV2aWNlX3N0YXJ0KCkuCisKK2ludCBjY3dfZGV2aWNlX3N0YXJ0KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkgICAgIHN0cnVjdCBjY3cxICpjcGEsCisJCSAgICAgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorCQkgICAgIF9fdTggbHBtLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCitjZGV2ICAgICAgICAgOiBjY3dfZGV2aWNlIHRoZSBJL08gaXMgZGVzdGluZWQgZm9yCitjcGEgICAgICAgICAgOiBsb2dpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgY2hhbm5lbCBwcm9ncmFtCit1c2VyX2ludHBhcm0gOiB1c2VyIHNwZWNpZmljIGludGVycnVwdCBpbmZvcm1hdGlvbjsgd2lsbCBiZSBwcmVzZW50ZWQKKwkgICAgICAgYmFjayB0byB0aGUgZGV2aWNlIGRyaXZlcidzIGludGVycnVwdCBoYW5kbGVyLiBBbGxvd3MgYQorICAgICAgICAgICAgICAgZGV2aWNlIGRyaXZlciB0byBhc3NvY2lhdGUgdGhlIGludGVycnVwdCB3aXRoIGEKKyAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgSS9PIHJlcXVlc3QuCitscG0gICAgICAgICAgOiBkZWZpbmVzIHRoZSBjaGFubmVsIHBhdGggdG8gYmUgdXNlZCBmb3IgYSBzcGVjaWZpYyBJL08KKyAgICAgICAgICAgICAgIHJlcXVlc3QuIEEgdmFsdWUgb2YgMCB3aWxsIG1ha2UgY2lvIHVzZSB0aGUgb3BtLgorZmxhZyAgICAgICAgIDogZGVmaW5lcyB0aGUgYWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBmb3IgSS9PIHByb2Nlc3NpbmcKKworUG9zc2libGUgZmxhZyB2YWx1ZXMgYXJlIDoKKworRE9JT19BTExPV19TVVNQRU5EICAgICAgIC0gY2hhbm5lbCBwcm9ncmFtIG1heSBiZWNvbWUgc3VzcGVuZGVkCitET0lPX0RFTllfUFJFRkVUQ0ggICAgICAgLSBkb24ndCBhbGxvdyBmb3IgQ0NXIHByZWZldGNoOyB1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGltcGxpZXMgdGhlIGNoYW5uZWwgcHJvZ3JhbSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIG1vZGlmaWVkCitET0lPX1NVUFBSRVNTX0lOVEVSICAgICAtIGRvbid0IGNhbGwgdGhlIGhhbmRsZXIgb24gaW50ZXJtZWRpYXRlIHN0YXR1cworCitUaGUgY3BhIHBhcmFtZXRlciBwb2ludHMgdG8gdGhlIGZpcnN0IGZvcm1hdCAxIENDVyBvZiBhIGNoYW5uZWwgcHJvZ3JhbSA6CisKK3N0cnVjdCBjY3cxIHsKKyAgICAgIF9fdTggIGNtZF9jb2RlOy8qIGNvbW1hbmQgY29kZSAqLworICAgICAgX191OCAgZmxhZ3M7ICAgLyogZmxhZ3MsIGxpa2UgSURBIGFkZHJlc3NpbmcsIGV0Yy4gKi8KKyAgICAgIF9fdTE2IGNvdW50OyAgIC8qIGJ5dGUgY291bnQgKi8KKyAgICAgIF9fdTMyIGNkYTsgICAgIC8qIGRhdGEgYWRkcmVzcyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoOCkpKTsKKword2l0aCB0aGUgZm9sbG93aW5nIENDVyBmbGFncyB2YWx1ZXMgZGVmaW5lZCA6CisKK0NDV19GTEFHX0RDICAgICAgICAtIGRhdGEgY2hhaW5pbmcKK0NDV19GTEFHX0NDICAgICAgICAtIGNvbW1hbmQgY2hhaW5pbmcKK0NDV19GTEFHX1NMSSAgICAgICAtIHN1cHByZXNzIGluY29ycmN0IGxlbmd0aAorQ0NXX0ZMQUdfU0tJUCAgICAgIC0gc2tpcAorQ0NXX0ZMQUdfUENJICAgICAgIC0gUENJCitDQ1dfRkxBR19JREEgICAgICAgLSBpbmRpcmVjdCBhZGRyZXNzaW5nCitDQ1dfRkxBR19TVVNQRU5EICAgLSBzdXNwZW5kCisKKworVmlhIGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoKSwgdGhlIGRldmljZSBkcml2ZXIgbWF5IHNwZWNpZnkgdGhlIGZvbGxvd2luZworb3B0aW9ucyBmb3IgdGhlIGRldmljZToKKworRE9JT19FQVJMWV9OT1RJRklDQVRJT04gIC0gYWxsb3cgZm9yIGVhcmx5IGludGVycnVwdCBub3RpZmljYXRpb24KK0RPSU9fUkVQT1JUX0FMTCAgICAgICAgICAtIHJlcG9ydCBhbGwgaW50ZXJydXB0IGNvbmRpdGlvbnMKKworCitUaGUgY2N3X2RldmljZV9zdGFydCgpIGZ1bmN0aW9uIHJldHVybnMgOgorCisgICAgICAwIC0gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9yIHJlcXVlc3Qgc3VjY2Vzc2Z1bGx5IGluaXRpYXRlZAorLUVCVVNZICAtIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcgYSBwcmV2aW91cyBJL08gcmVxdWVzdCwgb3IgdGhlciBpcworICAgICAgICAgIGEgc3RhdHVzIHBlbmRpbmcgYXQgdGhlIGRldmljZS4KKy1FTk9ERVYgLSBjZGV2IGlzIGludmFsaWQsIHRoZSBkZXZpY2UgaXMgbm90IG9wZXJhdGlvbmFsIG9yIHRoZSBjY3dfZGV2aWNlIGlzCisgICAgICAgICAgbm90IG9ubGluZS4KKworV2hlbiB0aGUgSS9PIHJlcXVlc3QgY29tcGxldGVzLCB0aGUgQ0RTIGZpcnN0IGxldmVsIGludGVycnVwdCBoYW5kbGVyIHdpbGwKK2FjY3VtYWxhdGUgdGhlIHN0YXR1cyBpbiBhIHN0cnVjdCBpcmIgYW5kIHRoZW4gY2FsbCB0aGUgZGV2aWNlIGludGVycnVwdCBoYW5kbGVyLgorVGhlIGludHBhcm0gZmllbGQgd2lsbCBjb250YWluIHRoZSB2YWx1ZSB0aGUgZGV2aWNlIGRyaXZlciBoYXMgYXNzb2NpYXRlZCB3aXRoIGEgCitwYXJ0aWN1bGFyIEkvTyByZXF1ZXN0LiBJZiBhIHBlbmRpbmcgZGV2aWNlIHN0YXR1cyB3YXMgcmVjb2duaXplZCwgCitpbnRwYXJtIHdpbGwgYmUgc2V0IHRvIDAgKHplcm8pLiBUaGlzIG1heSBoYXBwZW4gZHVyaW5nIEkvTyBpbml0aWF0aW9uIG9yIGRlbGF5ZWQKK2J5IGFuIGFsZXJ0IHN0YXR1cyBub3RpZmljYXRpb24uIEluIGFueSBjYXNlIHRoaXMgc3RhdHVzIGlzIG5vdCByZWxhdGVkIHRvIHRoZQorY3VycmVudCAobGFzdCkgSS9PIHJlcXVlc3QuIEluIGNhc2Ugb2YgYSBkZWxheWVkIHN0YXR1cyBub3RpZmljYXRpb24gbm8gc3BlY2lhbAoraW50ZXJydXB0IHdpbGwgYmUgcHJlc2VudGVkIHRvIGluZGljYXRlIEkvTyBjb21wbGV0aW9uIGFzIHRoZSBJL08gcmVxdWVzdCB3YXMKK25ldmVyIHN0YXJ0ZWQsIGV2ZW4gdGhvdWdoIGNjd19kZXZpY2Vfc3RhcnQoKSByZXR1cm5lZCB3aXRoIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKworSWYgdGhlIGNvbmN1cnJlbnQgc2Vuc2UgZmxhZyBpbiB0aGUgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIGlyYiBpcyBzZXQsIHRoZQorZmllbGQgaXJiLT5zY3N3LmNvdW50IGRlc2NyaWJlcyB0aGUgbnVtZXIgb2YgZGV2aWNlIHNwZWNpZmljIHNlbnNlIGJ5dGVzCithdmFpbGFibGUgaW4gdGhlIGV4dGVuZGVkIGNvbnRyb2wgd29yZCBpcmItPnNjc3cuZWN3WzBdLiBObyBkZXZpY2Ugc2Vuc2luZyBieQordGhlIGRldmljZSBkcml2ZXIgaXRzZWxmIGlzIHJlcXVpcmVkLgorCitUaGUgZGV2aWNlIGludGVycnVwdCBoYW5kbGVyIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyB0byBpbnZlc3RpZ2F0ZQordGhlIHByaW1hcnkgdW5pdCBjaGVjayBzb3VyY2UgY29kZWQgaW4gc2Vuc2UgYnl0ZSAwIDoKKworU05TMF9DTURfUkVKRUNUICAgICAgICAgMHg4MAorU05TMF9JTlRFUlZFTlRJT05fUkVRICAgMHg0MAorU05TMF9CVVNfT1VUX0NIRUNLICAgICAgMHgyMAorU05TMF9FUVVJUE1FTlRfQ0hFQ0sgICAgMHgxMAorU05TMF9EQVRBX0NIRUNLICAgICAgICAgMHgwOAorU05TMF9PVkVSUlVOICAgICAgICAgICAgMHgwNAorU05TMF9JTkNPTVBMX0RPTUFJTiAgICAgMHgwMQorCitEZXBlbmRpbmcgb24gdGhlIGRldmljZSBzdGF0dXMsIG11bHRpcGxlIG9mIHRob3NlIHZhbHVlcyBtYXkgYmUgc2V0IHRvZ2V0aGVyLgorUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2Ugc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVGhlIGlyYi0+c2Nzdy5jc3RhdCBmaWVsZCBwcm92aWRlcyB0aGUgKGFjY3VtdWxhdGVkKSBzdWJjaGFubmVsIHN0YXR1cyA6CisKK1NDSE5fU1RBVF9QQ0kgICAgICAgICAgICAtIHByb2dyYW0gY29udHJvbGxlZCBpbnRlcnJ1cHQKK1NDSE5fU1RBVF9JTkNPUlJfTEVOICAgICAtIGluY29ycmVjdCBsZW5ndGgKK1NDSE5fU1RBVF9QUk9HX0NIRUNLICAgICAtIHByb2dyYW0gY2hlY2sKK1NDSE5fU1RBVF9QUk9UX0NIRUNLICAgICAtIHByb3RlY3Rpb24gY2hlY2sKK1NDSE5fU1RBVF9DSE5fREFUQV9DSEsgICAtIGNoYW5uZWwgZGF0YSBjaGVjaworU0NITl9TVEFUX0NITl9DVFJMX0NISyAgIC0gY2hhbm5lbCBjb250cm9sIGNoZWNrCitTQ0hOX1NUQVRfSU5URl9DVFJMX0NISyAgLSBpbnRlcmZhY2UgY29udHJvbCBjaGVjaworU0NITl9TVEFUX0NIQUlOX0NIRUNLICAgIC0gY2hhaW5pbmcgY2hlY2sKKworVGhlIGlyYi0+c2Nzdy5kc3RhdCBmaWVsZCBwcm92aWRlcyB0aGUgKGFjY3VtdWxhdGVkKSBkZXZpY2Ugc3RhdHVzIDoKKworREVWX1NUQVRfQVRURU5USU9OICAgLSBhdHRlbnRpb24KK0RFVl9TVEFUX1NUQVRfTU9EICAgIC0gc3RhdHVzIG1vZGlmaWVyCitERVZfU1RBVF9DVV9FTkQgICAgICAtIGNvbnRyb2wgdW5pdCBlbmQKK0RFVl9TVEFUX0JVU1kgICAgICAgIC0gYnVzeQorREVWX1NUQVRfQ0hOX0VORCAgICAgLSBjaGFubmVsIGVuZAorREVWX1NUQVRfREVWX0VORCAgICAgLSBkZXZpY2UgZW5kCitERVZfU1RBVF9VTklUX0NIRUNLICAtIHVuaXQgY2hlY2sKK0RFVl9TVEFUX1VOSVRfRVhDRVAgIC0gdW5pdCBleGNlcHRpb24KKworUGxlYXNlIHNlZSB0aGUgRVNBLzM5MCBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBtYW51YWwgZm9yIGRldGFpbHMgb24gdGhlCitpbmRpdmlkdWFsIGZsYWcgbWVhbmluZ3MuCisKK1VzYWdlIE5vdGVzIDoKKworUHJpb3IgdG8gY2FsbCBjY3dfZGV2aWNlX3N0YXJ0KCkgdGhlIGRldmljZSBkcml2ZXIgbXVzdCBhc3N1cmUgZGlzYWJsZWQgc3RhdGUsCitpLmUuIHRoZSBJL08gbWFzayB2YWx1ZSBpbiB0aGUgUFNXIG11c3QgYmUgZGlzYWJsZWQuIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZAorYnkgY2FsbGluZyBsb2NhbF9zYXZlX2ZsYWdzKCBmbGFncykuIFRoZSBjdXJyZW50IFBTVyBmbGFncyBhcmUgcHJlc2VydmVkIGFuZAorY2FuIGJlIHJlc3RvcmVkIGJ5IGxvY2FsX2lycV9yZXN0b3JlKCBmbGFncykgYXQgYSBsYXRlciB0aW1lLgorCitJZiB0aGUgZGV2aWNlIGRyaXZlciB2aW9sYXRlcyB0aGlzIHJ1bGUgd2hpbGUgcnVubmluZyBpbiBhIHVuaS1wcm9jZXNzb3IKK2Vudmlyb25tZW50IGFuIGludGVycnVwdCBtaWdodCBiZSBwcmVzZW50ZWQgcHJpb3IgdG8gdGhlIGNjd19kZXZpY2Vfc3RhcnQoKQorcm91dGluZSByZXR1cm5pbmcgdG8gdGhlIGRldmljZSBkcml2ZXIgbWFpbiBwYXRoLiBJbiB0aGlzIGNhc2Ugd2Ugd2lsbCBlbmQgaW4gYQorZGVhZGxvY2sgc2l0dWF0aW9uIGFzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIHRyeSB0byBvYnRhaW4gdGhlIGlycQorbG9jayB0aGUgZGV2aWNlIGRyaXZlciBzdGlsbCBvd25zIChzZWUgYmVsb3cpICEKKworVGhlIGRyaXZlciBtdXN0IGFzc3VyZSB0byBob2xkIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbG9jay4gVGhpcyBjYW4gYmUKK2FjY29tcGxpc2hlZCBieQorCisoaSkgIHNwaW5fbG9jayhnZXRfY2N3ZGV2X2xvY2soY2RldikpLCBvcgorKGlpKSBzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2RldiksIGZsYWdzKQorCitPcHRpb24gKGkpIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBjYWxsaW5nIHJvdXRpbmUgaXMgcnVubmluZyBkaXNhYmxlZCBmb3IKK0kvTyBpbnRlcnJ1cHRzIChzZWUgYWJvdmUpIGFscmVhZHkuIE9wdGlvbiAoaWkpIG9idGFpbnMgdGhlIGRldmljZSBnYXRlIHVuZAorcHV0cyB0aGUgQ1BVIGludG8gSS9PIGRpc2FibGVkIHN0YXRlIGJ5IHByZXNlcnZpbmcgdGhlIGN1cnJlbnQgUFNXIGZsYWdzLgorCitUaGUgZGV2aWNlIGRyaXZlciBpcyBhbGxvd2VkIHRvIGlzc3VlIHRoZSBuZXh0IGNjd19kZXZpY2Vfc3RhcnQoKSBjYWxsIGZyb20KK3dpdGhpbiBpdHMgaW50ZXJydXB0IGhhbmRsZXIgYWxyZWFkeS4gSXQgaXMgbm90IHJlcXVpcmVkIHRvIHNjaGVkdWxlIGEKK2JvdHRvbS1oYWxmLCB1bmxlc3MgYW4gbm9uIGRldGVybWluaXN0aWNseSBsb25nIHJ1bm5pbmcgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlCitvciBzaW1pbGFyIG5lZWRzIHRvIGJlIHNjaGVkdWxlZC4gRHVyaW5nIEkvTyBwcm9jZXNzaW5nIHRoZSBMaW51eC8zOTAgZ2VuZXJpYworSS9PIGRldmljZSBkcml2ZXIgc3VwcG9ydCBoYXMgYWxyZWFkeSBvYnRhaW5lZCB0aGUgSVJRIGxvY2ssIGkuZS4gdGhlIGhhbmRsZXIKK211c3Qgbm90IHRyeSB0byBvYnRhaW4gaXQgYWdhaW4gd2hlbiBjYWxsaW5nIGNjd19kZXZpY2Vfc3RhcnQoKSBvciB3ZSBlbmQgaW4gYQorZGVhZGxvY2sgc2l0dWF0aW9uIQorCitJZiBhIGRldmljZSBkcml2ZXIgcmVsaWVzIG9uIGFuIEkvTyByZXF1ZXN0IHRvIGJlIGNvbXBsZXRlZCBwcmlvciB0byBzdGFydCB0aGUKK25leHQgaXQgY2FuIHJlZHVjZSBJL08gcHJvY2Vzc2luZyBvdmVyaGVhZCBieSBjaGFpbmluZyBhIE5vT3AgSS9PIGNvbW1hbmQKK0NDV19DTURfTk9PUCB0byB0aGUgZW5kIG9mIHRoZSBzdWJtaXR0ZWQgQ0NXIGNoYWluLiBUaGlzIHdpbGwgZm9yY2UgQ2hhbm5lbC1FbmQKK2FuZCBEZXZpY2UtRW5kIHN0YXR1cyB0byBiZSBwcmVzZW50ZWQgdG9nZXRoZXIsIHdpdGggYSBzaW5nbGUgaW50ZXJydXB0LgorSG93ZXZlciwgdGhpcyBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUgYXMgaXQgaW1wbGllcyB0aGUgY2hhbm5lbCB3aWxsIHJlbWFpbgorYnVzeSwgbm90IGJlaW5nIGFibGUgdG8gcHJvY2VzcyBJL08gcmVxdWVzdHMgZm9yIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUKK2NoYW5uZWwuIFRoZXJlZm9yZSBlLmcuIHJlYWQgY29tbWFuZHMgc2hvdWxkIG5ldmVyIHVzZSB0aGlzIHRlY2huaXF1ZSwgYXMgdGhlCityZXN1bHQgd2lsbCBiZSBwcmVzZW50ZWQgYnkgYSBzaW5nbGUgaW50ZXJydXB0IGFueXdheS4KKworSW4gb3JkZXIgdG8gbWluaW1pemUgSS9PIG92ZXJoZWFkLCBhIGRldmljZSBkcml2ZXIgc2hvdWxkIHVzZSB0aGUKK0RPSU9fUkVQT1JUX0FMTCAgb25seSBpZiB0aGUgZGV2aWNlIGNhbiByZXBvcnQgaW50ZXJtZWRpYXRlIGludGVycnVwdAoraW5mb3JtYXRpb24gcHJpb3IgdG8gZGV2aWNlLWVuZCB0aGUgZGV2aWNlIGRyaXZlciB1cmdlbnRseSByZWxpZXMgb24uIEluIHRoaXMKK2Nhc2UgYWxsIEkvTyBpbnRlcnJ1cHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGRldmljZSBkcml2ZXIgdW50aWwgZmluYWwKK3N0YXR1cyBpcyByZWNvZ25pemVkLgorCitJZiBhIGRldmljZSBpcyBhYmxlIHRvIHJlY292ZXIgZnJvbSBhc3luY2hyb25vc2x5IHByZXNlbnRlZCBJL08gZXJyb3JzLCBpdCBjYW4KK3BlcmZvcm0gb3ZlcmxhcHBpbmcgSS9PIHVzaW5nIHRoZSBET0lPX0VBUkxZX05PVElGSUNBVElPTiBmbGFnLiBXaGlsZSBzb21lCitkZXZpY2VzIGFsd2F5cyByZXBvcnQgY2hhbm5lbC1lbmQgYW5kIGRldmljZS1lbmQgdG9nZXRoZXIsIHdpdGggYSBzaW5nbGUKK2ludGVycnVwdCwgb3RoZXJzIHByZXNlbnQgcHJpbWFyeSBzdGF0dXMgKGNoYW5uZWwtZW5kKSB3aGVuIHRoZSBjaGFubmVsIGlzCityZWFkeSBmb3IgdGhlIG5leHQgSS9PIHJlcXVlc3QgYW5kIHNlY29uZGFyeSBzdGF0dXMgKGRldmljZS1lbmQpIHdoZW4gdGhlIGRhdGEKK3RyYW5zbWlzc2lvbiBoYXMgYmVlbiBjb21wbGV0ZWQgYXQgdGhlIGRldmljZS4KKworQWJvdmUgZmxhZyBhbGxvd3MgdG8gZXhwbG9pdCB0aGlzIGZlYXR1cmUsIGUuZy4gZm9yIGNvbW11bmljYXRpb24gZGV2aWNlcyB0aGF0CitjYW4gaGFuZGxlIGxvc3QgZGF0YSBvbiB0aGUgbmV0d29yayB0byBhbGxvdyBmb3IgZW5oYW5jZWQgSS9PIHByb2Nlc3NpbmcuCisKK1VubGVzcyB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gYXQgYW55IHRpbWUgcHJlc2VudHMgYSBzZWNvbmRhcnkgc3RhdHVzIGludGVycnVwdCwKK2V4cGxvaXRpbmcgdGhpcyBmZWF0dXJlIHdpbGwgY2F1c2Ugb25seSBwcmltYXJ5IHN0YXR1cyBpbnRlcnJ1cHRzIHRvIGJlCitwcmVzZW50ZWQgdG8gdGhlIGRldmljZSBkcml2ZXIgd2hpbGUgb3ZlcmxhcHBpbmcgSS9PIGlzIHBlcmZvcm1lZC4gV2hlbiBhCitzZWNvbmRhcnkgc3RhdHVzIHdpdGhvdXQgZXJyb3IgKGFsZXJ0IHN0YXR1cykgaXMgcHJlc2VudGVkLCB0aGlzIGluZGljYXRlcworc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGZvciBhbGwgb3ZlcmxhcHBpbmcgY2N3X2RldmljZV9zdGFydCgpIHJlcXVlc3RzIHRoYXQgaGF2ZQorYmVlbiBpc3N1ZWQgc2luY2UgdGhlIGxhc3Qgc2Vjb25kYXJ5IChmaW5hbCkgc3RhdHVzLgorCitDaGFubmVsIHByb2dyYW1zIHRoYXQgaW50ZW5kIHRvIHNldCB0aGUgc3VzcGVuZCBmbGFnIG9uIGEgY2hhbm5lbCBjb21tYW5kIHdvcmQgCisoQ0NXKSAgbXVzdCBzdGFydCB0aGUgSS9PIG9wZXJhdGlvbiB3aXRoIHRoZSBET0lPX0FMTE9XX1NVU1BFTkQgb3B0aW9uIG9yIHRoZSAKK3N1c3BlbmQgZmxhZyB3aWxsIGNhdXNlIGEgY2hhbm5lbCBwcm9ncmFtIGNoZWNrLiBBdCB0aGUgdGltZSB0aGUgY2hhbm5lbCBwcm9ncmFtIAorYmVjb21lcyBzdXNwZW5kZWQgYW4gaW50ZXJtZWRpYXRlIGludGVycnVwdCB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY2hhbm5lbCAKK3N1YnN5c3RlbS4KKworY2N3X2RldmljZV9yZXN1bWUoKSAtIFJlc3VtZSBDaGFubmVsIFByb2dyYW0gRXhlY3V0aW9uIAorCitJZiBhIGRldmljZSBkcml2ZXIgY2hvb3NlcyB0byBzdXNwZW5kIHRoZSBjdXJyZW50IGNoYW5uZWwgcHJvZ3JhbSBleGVjdXRpb24gYnkgCitzZXR0aW5nIHRoZSBDQ1cgc3VzcGVuZCBmbGFnIG9uIGEgcGFydGljdWxhciBDQ1csIHRoZSBjaGFubmVsIHByb2dyYW0gZXhlY3V0aW9uIAoraXMgc3VzcGVuZGVkLiBJbiBvcmRlciB0byByZXN1bWUgY2hhbm5lbCBwcm9ncmFtIGV4ZWN1dGlvbiB0aGUgQ0lPIGxheWVyIAorcHJvdmlkZXMgdGhlIGNjd19kZXZpY2VfcmVzdW1lKCkgcm91dGluZS4gCisKK2ludCBjY3dfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CisKK2NkZXYgLSBjY3dfZGV2aWNlIHRoZSByZXN1bWUgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCBmb3IKKworVGhlIHJlc3VtZV9JTygpIGZ1bmN0aW9uIHJldHVybnM6CisKKyAgICAgICAgMCAgLSBzdXNwZW5kZWQgY2hhbm5lbCBwcm9ncmFtIGlzIHJlc3VtZWQKKy1FQlVTWSAgICAgLSBzdGF0dXMgcGVuZGluZworLUVOT0RFViAgICAtIGNkZXYgaW52YWxpZCBvciBub3Qtb3BlcmF0aW9uYWwgc3ViY2hhbm5lbCAKKy1FSU5WQUwgICAgLSByZXN1bWUgZnVuY3Rpb24gbm90IGFwcGxpY2FibGUgIAorLUVOT1RDT05OICAtIHRoZXJlIGlzIG5vIEkvTyByZXF1ZXN0IHBlbmRpbmcgZm9yIGNvbXBsZXRpb24gCisKK1VzYWdlIE5vdGVzOgorUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBjY3dfZGV2aWNlX3N0YXJ0KCkgdXNhZ2Ugbm90ZXMgZm9yIG1vcmUgZGV0YWlscyBvbgorc3VzcGVuZGVkIGNoYW5uZWwgcHJvZ3JhbXMuCisKK2Njd19kZXZpY2VfaGFsdCgpIC0gSGFsdCBJL08gUmVxdWVzdCBQcm9jZXNzaW5nCisKK1NvbWV0aW1lcyBhIGRldmljZSBkcml2ZXIgbWlnaHQgbmVlZCBhIHBvc3NpYmlsaXR5IHRvIHN0b3AgdGhlIHByb2Nlc3Npbmcgb2YKK2EgbG9uZy1ydW5uaW5nIGNoYW5uZWwgcHJvZ3JhbSBvciB0aGUgZGV2aWNlIG1pZ2h0IHJlcXVpcmUgdG8gaW5pdGlhbGx5IGlzc3VlCithIGhhbHQgc3ViY2hhbm5lbCAoSFNDSCkgSS9PIGNvbW1hbmQuIEZvciB0aG9zZSBwdXJwb3NlcyB0aGUgY2N3X2RldmljZV9oYWx0KCkKK2NvbW1hbmQgaXMgcHJvdmlkZWQuCisKK2ludCBjY3dfZGV2aWNlX2hhbHQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50cGFybSk7CisKK2NkZXYgICAgOiBjY3dfZGV2aWNlIHRoZSBoYWx0IG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgZm9yCitpbnRwYXJtIDogaW50ZXJydXB0aW9uIHBhcmFtZXRlcjsgdmFsdWUgaXMgb25seSB1c2VkIGlmIG5vIEkvTworICAgICAgICAgIGlzIG91dHN0YW5kaW5nLCBvdGhlcndpc2UgdGhlIGludHBhcm0gYXNzb2NpYXRlZCB3aXRoCisgICAgICAgICAgdGhlIEkvTyByZXF1ZXN0IGlzIHJldHVybmVkCisKK1RoZSBjY3dfZGV2aWNlX2hhbHQoKSBmdW5jdGlvbiByZXR1cm5zIDoKKworICAgICAgMCAtIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvciByZXF1ZXN0IHN1Y2Nlc3NmdWxseSBpbml0aWF0ZWQKKy1FQlVTWSAgLSB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBidXN5LCBvciBzdGF0dXMgcGVuZGluZy4KKy1FTk9ERVYgLSBjZGV2IGludmFsaWQuCistRUlOVkFMIC0gVGhlIGRldmljZSBpcyBub3Qgb3BlcmF0aW9uYWwgb3IgdGhlIGNjdyBkZXZpY2UgaXMgbm90IG9ubGluZS4KKworVXNhZ2UgTm90ZXMgOgorCitBIGRldmljZSBkcml2ZXIgbWF5IHdyaXRlIGEgbmV2ZXItZW5kaW5nIGNoYW5uZWwgcHJvZ3JhbSBieSB3cml0aW5nIGEgY2hhbm5lbAorcHJvZ3JhbSB0aGF0IGF0IGl0cyBlbmQgbG9vcHMgYmFjayB0byBpdHMgYmVnaW5uaW5nIGJ5IG1lYW5zIG9mIGEgdHJhbnNmZXIgaW4KK2NoYW5uZWwgKFRJQykgICBjb21tYW5kIChDQ1dfQ01EX1RJQykuIFVzdWFsbHkgdGhpcyBpcyBwZXJmb3JtZWQgYnkgbmV0d29yaworZGV2aWNlIGRyaXZlcnMgYnkgc2V0dGluZyB0aGUgUENJIENDVyBmbGFnIChDQ1dfRkxBR19QQ0kpLiBPbmNlIHRoaXMgQ0NXIGlzCitleGVjdXRlZCBhIHByb2dyYW0gY29udHJvbGxlZCBpbnRlcnJ1cHQgKFBDSSkgaXMgZ2VuZXJhdGVkLiBUaGUgZGV2aWNlIGRyaXZlcgorY2FuIHRoZW4gcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSBhY3Rpb24uIFByaW9yIHRvIGludGVycnVwdCBvZiBhbiBvdXRzdGFuZGluZworcmVhZCB0byBhIG5ldHdvcmsgZGV2aWNlICh3aXRoIG9yIHdpdGhvdXQgUENJIGZsYWcpIGEgY2N3X2RldmljZV9oYWx0KCkKK2lzIHJlcXVpcmVkIHRvIGVuZCB0aGUgcGVuZGluZyBvcGVyYXRpb24uCisKKworTWlzY2VsbGFuZW91cyBTdXBwb3J0IFJvdXRpbmVzCisKK1RoaXMgY2hhcHRlciBkZXNjcmliZXMgdmFyaW91cyByb3V0aW5lcyB0byBiZSB1c2VkIGluIGEgTGludXgvMzkwIGRldmljZQorZHJpdmVyIHByb2dyYW1taW5nIGVudmlyb25tZW50LgorCitnZXRfY2N3ZGV2X2xvY2soKQorCitHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBzcGVjaWZpYyBsb2NrLiBUaGlzIGlzIHRoZW4gdXNlZCBpbgorc3Bpbl9sb2NrKCkgLyBzcGluX3VubG9jaygpIGNhbGxzLgorCisKK19fdTggY2N3X2RldmljZV9nZXRfcGF0aF9tYXNrKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKKworR2V0IHRoZSBtYXNrIG9mIHRoZSBwYXRoIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIGNkZXYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvY29uZmlnMzI3MC5zaCBiL0RvY3VtZW50YXRpb24vczM5MC9jb25maWczMjcwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWUyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY29uZmlnMzI3MC5zaApAQCAtMCwwICsxLDc2IEBACisjIS9iaW4vc2gKKyMKKyMgY29uZmlnMzI3MCAtLSBBdXRvY29uZmlndXJlIC9kZXYvMzI3MC8qIGFuZCAvZXRjL2luaXR0YWIKKyMKKyMgICAgICAgVXNhZ2U6CisjICAgICAgICAgICAgICAgY29uZmlnMzI3MAorIworIyAgICAgICBPdXRwdXQ6CisjICAgICAgICAgICAgICAgL3RtcC9ta2RldjMyNzAKKyMKKyMgICAgICAgT3BlcmF0aW9uOgorIyAgICAgICAgICAgICAgIDEuIFJ1biB0aGlzIHNjcmlwdAorIyAgICAgICAgICAgICAgIDIuIFJ1biB0aGUgc2NyaXB0IGl0IHByb2R1Y2VzOiAvdG1wL21rZGV2MzI3MAorIyAgICAgICAgICAgICAgIDMuIElzc3VlICJ0ZWxpbml0IHEiIG9yIHJlYm9vdCwgYXMgYXBwcm9wcmlhdGUuCisjCitQPS9wcm9jL3R0eS9kcml2ZXIvdHR5MzI3MAorUk9PVD0KK0Q9JFJPT1QvZGV2CitTVUJEPTMyNzAKK1RUWT0kU1VCRC90dHkKK1RVQj0kU1VCRC90dWIKK1NDUj0kUk9PVC90bXAvbWtkZXYzMjcwCitTQ1JUTVA9JFNDUi5hCitHRVRUWUxJTkU9OjIzNDU6cmVzcGF3bjovc2Jpbi9taW5nZXR0eQorSU5JVFRBQj0kUk9PVC9ldGMvaW5pdHRhYgorTklOSVRUQUI9JFJPT1QvZXRjL05FV2luaXR0YWIKK09JTklUVEFCPSRST09UL2V0Yy9PTERpbml0dGFiCitBREROT1RFPVxcIiMgQWRkaXRpb25hbCBtaW5nZXR0eXMgZm9yIHRoZSAzMjcwL3R0eSogZHJpdmVyLCB0dWIzMjcwIC0tLVxcIgorCitpZiAhIGxzICRQID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwltb2Rwcm9iZSB0dWIzMjcwID4gL2Rldi9udWxsIDI+JjEKK2ZpCitscyAkUCA+IC9kZXYvbnVsbCAyPiYxIHx8IGV4aXQgMQorCisjIEluaXRpYWxpemUgdHdvIGZpbGVzLCBvbmUgZm9yIC9kZXYvMzI3MCBjb21tYW5kcyBhbmQgb25lCisjIHRvIHJlcGxhY2UgdGhlIC9ldGMvaW5pdHRhYiBmaWxlIChvbGQgb25lIHNhdmVkIGluIE9MRGluaXR0YWIpCitlY2hvICIjIS9iaW4vc2giID4gJFNDUiB8fCBleGl0IDEKK2VjaG8gIiAiID4+ICRTQ1IKK2VjaG8gIiMgU2NyaXB0IGJ1aWx0IGJ5IC9zYmluL2NvbmZpZzMyNzAiID4+ICRTQ1IKK2lmIFsgISAtZCAvZGV2L2Rhc2QgXTsgdGhlbgorCWVjaG8gcm0gLXJmICIkRC8kU1VCRC8qIiA+PiAkU0NSCitmaQorZWNobyAiZ3JlcCAtdiAkVFRZICRJTklUVEFCID4gJE5JTklUVEFCIiA+ICRTQ1JUTVAgfHwgZXhpdCAxCitlY2hvICJlY2hvICRBREROT1RFID4+ICROSU5JVFRBQiIgPj4gJFNDUlRNUAoraWYgWyAhIC1kIC9kZXYvZGFzZCBdOyB0aGVuCisJZWNobyBta2RpciAtcCAkRC8kU1VCRCA+PiAkU0NSCitmaQorCisjIE5vdyBxdWVyeSB0aGUgdHViMzI3MCBkcml2ZXIgZm9yIDMyNzAgZGV2aWNlIGluZm9ybWF0aW9uCisjIGFuZCBhZGQgYXBwcm9wcmlhdGUgbWtub2QgYW5kIG1pbmdldHR5IGxpbmVzIHRvIG91ciBmaWxlcworZWNobyB3aGF0PWNvbmZpZyA+ICRQCit3aGlsZSByZWFkIGRldm5vIG1haiBtaW47ZG8KKwlpZiBbICRtaW4gPSAwIF07IHRoZW4KKwkJZnNtYWo9JG1hagorCQlpZiBbICEgLWQgL2Rldi9kYXNkIF07IHRoZW4KKwkJCWVjaG8gbWtub2QgJEQvJFRVQiBjICRmc21haiAwID4+ICRTQ1IKKwkJCWVjaG8gY2htb2QgNjY2ICRELyRUVUIgPj4gJFNDUgorCQlmaQorCWVsaWYgWyAkbWFqID0gQ09OU09MRSBdOyB0aGVuCisJCWlmIFsgISAtZCAvZGV2L2Rhc2QgXTsgdGhlbgorCQkJZWNobyBta25vZCAkRC8kVFVCJGRldm5vIGMgJGZzbWFqICRtaW4gPj4gJFNDUgorCQlmaQorCWVsc2UKKwkJaWYgWyAhIC1kIC9kZXYvZGFzZCBdOyB0aGVuCisJCQllY2hvIG1rbm9kICRELyRUVFkkZGV2bm8gYyAkbWFqICRtaW4gPj4kU0NSCisJCQllY2hvIG1rbm9kICRELyRUVUIkZGV2bm8gYyAkZnNtYWogJG1pbiA+PiAkU0NSCisJCWZpCisJCWVjaG8gImVjaG8gdCRtaW4kR0VUVFlMSU5FICRUVFkkZGV2bm8gPj4gJE5JTklUVEFCIiA+PiAkU0NSVE1QCisJZmkKK2RvbmUgPCAkUAorCitlY2hvIG12ICRJTklUVEFCICRPSU5JVFRBQiA+PiAkU0NSVE1QIHx8IGV4aXQgMQorZWNobyBtdiAkTklOSVRUQUIgJElOSVRUQUIgPj4gJFNDUlRNUAorY2F0ICRTQ1JUTVAgPj4gJFNDUgorcm0gJFNDUlRNUAorZXhpdCAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvY3J5cHRvL2NyeXB0by1BUEkudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2NyeXB0by9jcnlwdG8tQVBJLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE3NzYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL2NyeXB0by9jcnlwdG8tQVBJLnR4dApAQCAtMCwwICsxLDgzIEBACitjcnlwdG8tQVBJIHN1cHBvcnQgZm9yIHo5OTAgTWVzc2FnZSBTZWN1cml0eSBBc3Npc3QgKE1TQSkgaW5zdHJ1Y3Rpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FVVEhPUjoJVGhvbWFzIFNwYXR6aWVyICh0c3BhdEBkZS5pYm0uY29tKQorCisKKzEuIEludHJvZHVjdGlvbiBjcnlwdG8tQVBJCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU2VlIERvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQgZm9yIGFuIGludHJvZHVjdGlvbi9kZXNjcmlwdGlvbiBvZiB0aGUKK2tlcm5lbCBjcnlwdG8gQVBJLgorQWNjb3JkaW5nIHRvIGFwaS1pbnRyby50eHQgc3VwcG9ydCBmb3Igejk5MCBjcnlwdG8gaW5zdHJ1Y3Rpb25zIGhhcyBiZWVuIGFkZGVkCitpbiB0aGUgYWxnb3JpdGhtIGFwaSBsYXllciBvZiB0aGUgY3J5cHRvIEFQSS4gU2V2ZXJhbCBmaWxlcyBjb250YWluaW5nIHo5OTAKK29wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMgb2YgY3J5cHRvIGFsZ29yaXRobXMgYXJlIHBsYWNlZCBpbiB0aGUKK2FyY2gvczM5MC9jcnlwdG8gZGlyZWN0b3J5LgorCisKKzIuIFByb2JpbmcgZm9yIGF2YWlsYWJpbGl0eSBvZiBNU0EKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0l0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgS2VybmVscyB3aXRoIHRoZSB6OTkwIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMgYm90aAorb24gbWFjaGluZXMgd2l0aCBNU0EgYXZhaWxhYmxlIGFuIG9uIHRob3NlIHdpdGhvdXQgTVNBIChwcmUgejk5MCBvciB6OTkwCit3aXRob3V0IE1TQSkuIFRoZXJlZm9yZSBhIHNpbXBsZSBwcm9iaW5nIG1lY2hhbmlzbXMgaGFzIGJlZW4gaW1wbGVtZW50ZWQ6CitJbiB0aGUgaW5pdCBmdW5jdGlvbiBvZiBlYWNoIGNyeXB0byBtb2R1bGUgdGhlIGF2YWlsYWJpbGl0eSBvZiBNU0EgYW5kIG9mIHRoZQorcmVzcGVjdGl2ZSBjcnlwdG8gYWxnb3JpdGhtIGluIHBhcnRpY3VsYXIgd2lsbCBiZSB0ZXN0ZWQuIElmIHRoZSBhbGdvcml0aG0gaXMKK2F2YWlsYWJsZSB0aGUgbW9kdWxlIHdpbGwgbG9hZCBhbmQgcmVnaXN0ZXIgaXRzIGFsZ29yaXRobSB3aXRoIHRoZSBjcnlwdG8gQVBJLgorCitJZiB0aGUgcmVzcGVjdGl2ZSBjcnlwdG8gYWxnb3JpdGhtIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBpbml0IGZ1bmN0aW9uIHdpbGwKK3JldHVybiAtRU5PU1lTLiBJbiB0aGF0IGNhc2UgYSBmYWxsYmFjayB0byB0aGUgc3RhbmRhcmQgc29mdHdhcmUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBjcnlwdG8gYWxnb3JpdGhtIG11c3QgYmUgdGFrZW4gKCAtPiB0aGUgc3RhbmRhcmQgY3J5cHRvIG1vZHVsZXMgYXJlCithbHNvIGJ1aWxkIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwpLgorCisKKzMuIEVuc3VyaW5nIHo5OTAgY3J5cHRvIG1vZHVsZSBwcmVmZXJlbmNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSWYgejk5MCBjcnlwdG8gaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUgdGhlIG9wdGltaXplZCBtb2R1bGVzIHNob3VsZCBiZQorcHJlZmVycmVkIGluc3RlYWQgb2Ygc3RhbmRhcmQgbW9kdWxlcy4KKworMy4xLiBjb21waWxlZC1pbiBtb2R1bGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0ZvciBjb21waWxlZC1pbiBtb2R1bGVzIGl0IGhhcyB0byBiZSBlbnN1cmVkIHRoYXQgdGhlIHo5OTAgbW9kdWxlcyBhcmUgbGlua2VkCitiZWZvcmUgdGhlIHN0YW5kYXJkIGNyeXB0byBtb2R1bGVzLiBUaGVuLCBvbiBzeXN0ZW0gc3RhcnR1cCB0aGUgaW5pdCBmdW5jdGlvbnMKK29mIHo5OTAgY3J5cHRvIG1vZHVsZXMgd2lsbCBiZSBjYWxsZWQgZmlyc3QgYW5kIHF1ZXJ5IGZvciBhdmFpbGFiaWxpdHkgb2Ygejk5MAorY3J5cHRvIGluc3RydWN0aW9ucy4gSWYgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLCB0aGUgejk5MCBtb2R1bGUgd2lsbCByZWdpc3RlcgoraXRzIGNyeXB0byBhbGdvcml0aG0gaW1wbGVtZW50YXRpb24gLT4gdGhlIGxvYWQgb2YgdGhlIHN0YW5kYXJkIG1vZHVsZSB3aWxsIGZhaWwKK3NpbmNlIHRoZSBhbGdvcml0aG0gaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorSWYgejk5MCBjcnlwdG8gaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSB0aGUgbG9hZCBvZiB0aGUgejk5MCBtb2R1bGUgd2lsbAorZmFpbCAtPiB0aGUgc3RhbmRhcmQgbW9kdWxlIHdpbGwgbG9hZCBhbmQgcmVnaXN0ZXIgaXRzIGFsZ29yaXRobS4KKworMy4yLiBkeW5hbWljIG1vZHVsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CitBIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGhhcyB0byB0YWtlIGNhcmUgb2YgZ2l2aW5nIHByZWZlcmVuY2UgdG8gejk5MCBjcnlwdG8KK21vZHVsZXMuIElmIE1TQSBpcyBhdmFpbGFibGUgYXBwcm9wcmlhdGUgbGluZXMgaGF2ZSB0byBiZSBhZGRlZCB0bworL2V0Yy9tb2Rwcm9iZS5jb25mLgorCitFeGFtcGxlOgl6OTkwIGNyeXB0byBpbnN0cnVjdGlvbiBmb3IgU0hBMSBhbGdvcml0aG0gaXMgYXZhaWxhYmxlCisKKwkJYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmYgKGFzc3VtaW5nIHRoZQorCQl6OTkwIGNyeXB0byBtb2R1bGVzIGZvciBTSEExIGlzIGNhbGxlZCBzaGExX3o5OTApOgorCisJCWFsaWFzIHNoYTEgc2hhMV96OTkwCisKKwkJLT4gd2hlbiB0aGUgc2hhMSBhbGdvcml0aG0gaXMgcmVxdWVzdGVkIHRocm91Z2ggdGhlIGNyeXB0byBBUEkKKwkJKHdoaWNoIGhhcyBhIG1vZHVsZSBhdXRvbG9hZGVyKSB0aGUgejk5MCBtb2R1bGUgd2lsbCBiZSBsb2FkZWQuCisKK1RCRDoJYSB1c2Vyc3BhY2UgbW9kdWxlIHByb2JpbiBtZWNoYW5pc20KKwlzb21ldGhpbmcgbGlrZSAncHJvYmUgc2hhMSBzaGExX3o5OTAgc2hhMScgaW4gbW9kcHJvYmUuY29uZgorCS0+IHRyeSBtb2R1bGUgc2hhMV96OTkwLCBpZiBpdCBmYWlscyB0byBsb2FkIGxvYWQgc3RhbmRhcmQgbW9kdWxlIHNoYTEKKwl0aGUgJ3Byb2JlJyBzdGF0ZW1lbnQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaW4gbW9kcHJvYmUuY29uZgorCisKKzQuIEN1cnJlbnRseSBpbXBsZW1lbnRlZCB6OTkwIGNyeXB0byBhbGdvcml0aG1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGZvbGxvd2luZyBjcnlwdG8gYWxnb3JpdGhtcyB3aXRoIHo5OTAgTVNBIHN1cHBvcnQgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KK1RoZSBuYW1lIG9mIGVhY2ggYWxnb3JpdGhtIHVuZGVyIHdoaWNoIGl0IGlzIHJlZ2lzdGVyZWQgaW4gY3J5cHRvIEFQSSBhbmQgdGhlCituYW1lIG9mIHRoZSByZXNwZWN0aXZlIG1vZHVsZSBpcyBnaXZlbiBpbiBzcXVhcmUgYnJhY2tldHMuCisKKy0gU0hBMSBEaWdlc3QgQWxnb3JpdGhtIFtzaGExIC0+IHNoYTFfejk5MF0KKy0gREVTIEVuY3J5cHQvRGVjcnlwdCBBbGdvcml0aG0gKDY0Yml0IGtleSkgW2RlcyAtPiBkZXNfejk5MF0KKy0gVHJpcHBsZSBERVMgRW5jcnlwdC9EZWNyeXB0IEFsZ29yaXRobSAoMTI4Yml0IGtleSkgW2RlczNfZWRlMTI4IC0+IGRlc196OTkwXQorLSBUcmlwcGxlIERFUyBFbmNyeXB0L0RlY3J5cHQgQWxnb3JpdGhtICgxOTJiaXQga2V5KSBbZGVzM19lZGUgLT4gZGVzX3o5OTBdCisKK0luIG9yZGVyIHRvIGxvYWQsIGZvciBleGFtcGxlLCB0aGUgc2hhMV96OTkwIG1vZHVsZSB3aGVuIHRoZSBzaGExIGFsZ29yaXRobSBpcworcmVxdWVzdGVkIChzZWUgMy4yLikgYWRkICdhbGlhcyBzaGExIHNoYTFfejk5MCcgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dApAQCAtMCwwICsxLDI2NSBAQAorUy8zOTAgZHJpdmVyIG1vZGVsIGludGVyZmFjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIENDVyBkZXZpY2VzCistLS0tLS0tLS0tLS0tLQorCitBbGwgZGV2aWNlcyB3aGljaCBjYW4gYmUgYWRkcmVzc2VkIGJ5IG1lYW5zIG9mIGNjd3MgYXJlIGNhbGxlZCAnQ0NXIGRldmljZXMnIC0KK2V2ZW4gaWYgdGhleSBhcmVuJ3QgYWN0dWFsbHkgZHJpdmVuIGJ5IGNjd3MuCisKK0FsbCBjY3cgZGV2aWNlcyBhcmUgYWNjZXNzZWQgdmlhIGEgc3ViY2hhbm5lbCwgdGhpcyBpcyByZWZsZWN0ZWQgaW4gdGhlIAorc3RydWN0dXJlcyB1bmRlciByb290LzoKKworcm9vdC8KKyAgICAgLSBzeXMKKyAgICAgLSBsZWdhY3kKKyAgICAgLSBjc3MwLworICAgICAgICAgICAtIDAuMC4wMDAwLzAuMC4wODE1LworCSAgIC0gMC4wLjAwMDEvMC4wLjQ3MTEvCisJICAgLSAwLjAuMDAwMi8KKwkgICAuLi4KKworSW4gdGhpcyBleGFtcGxlLCBkZXZpY2UgMDgxNSBpcyBhY2Nlc3NlZCB2aWEgc3ViY2hhbm5lbCAwLCBkZXZpY2UgNDcxMSB2aWEgCitzdWJjaGFubmVsIDEsIGFuZCBzdWJjaGFubmVsIDIgaXMgYSBub24tSS9PIHN1YmNoYW5uZWwuCisKK1lvdSBzaG91bGQgYWRkcmVzcyBhIGNjdyBkZXZpY2UgdmlhIGl0cyBidXMgaWQgKGUuZy4gMC4wLjQ3MTEpOyB0aGUgZGV2aWNlIGNhbgorYmUgZm91bmQgdW5kZXIgYnVzL2Njdy9kZXZpY2VzLy4KKworQWxsIGNjdyBkZXZpY2VzIGV4cG9ydCBzb21lIGRhdGEgdmlhIHN5c2ZzLgorCitjdXR5cGU6CSAgICBUaGUgY29udHJvbCB1bml0IHR5cGUgLyBtb2RlbC4KKworZGV2dHlwZTogICAgVGhlIGRldmljZSB0eXBlIC8gbW9kZWwsIGlmIGFwcGxpY2FibGUuCisKK2F2YWlsYWJpbGl0eTogQ2FuIGJlICdnb29kJyBvciAnYm94ZWQnOyAnbm8gcGF0aCcgb3IgJ25vIGRldmljZScgZm9yCisJICAgICAgZGlzY29ubmVjdGVkIGRldmljZXMuCisKK29ubGluZTogICAgIEFuIGludGVyZmFjZSB0byBzZXQgdGhlIGRldmljZSBvbmxpbmUgYW5kIG9mZmxpbmUuCisJICAgIEluIHRoZSBzcGVjaWFsIGNhc2Ugb2YgdGhlIGRldmljZSBiZWluZyBkaXNjb25uZWN0ZWQgKHNlZSB0aGUKKwkgICAgbm90aWZ5IGZ1bmN0aW9uIHVuZGVyIDEuMiksIHBpcGluZyAwIHRvIG9ubGluZSB3aWxsIGZvY2libHkgZGVsZXRlCisJICAgIHRoZSBkZXZpY2UuCisKK1RoZSBkZXZpY2UgZHJpdmVycyBjYW4gYWRkIGVudHJpZXMgdG8gZXhwb3J0IHBlci1kZXZpY2UgZGF0YSBhbmQgaW50ZXJmYWNlcy4KKworVGhlcmUgaXMgYWxzbyBzb21lIGRhdGEgZXhwb3J0ZWQgb24gYSBwZXItc3ViY2hhbm5lbCBiYXNpcyAoc2VlIHVuZGVyCitidXMvY3NzL2RldmljZXMvKToKKworY2hwaWRzOgkgICAgVmlhIHdoaWNoIGNocGlkcyB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZC4KKworcGltcGFtcG9tOiAgVGhlIHBhdGggaW5zdGFsbGVkLCBwYXRoIGF2YWlsYWJsZSBhbmQgcGF0aCBvcGVyYXRpb25hbCBtYXNrcy4KKworVGhlcmUgYWxzbyBtaWdodCBiZSBhZGRpdGlvbmFsIGRhdGEsIGZvciBleGFtcGxlIGZvciBibG9jayBkZXZpY2VzLgorCisKKzEuMSBCcmluZ2luZyB1cCBhIGNjdyBkZXZpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBkb25lIGluIHNldmVyYWwgc3RlcHMuCisKK2EuIEVhY2ggZHJpdmVyIGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIHBhcmFtZXRlciBpbnRlcmZhY2VzIHdoZXJlIHBhcmFtZXRlcnMgY2FuCisgICBiZSBzcGVjaWZpZWQuIFRoZXNlIGludGVyZmFjZXMgYXJlIGFsc28gaW4gdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5LgorYi4gQWZ0ZXIgYS4gaGFzIGJlZW4gcGVyZm9ybWVkLCBpZiBuZWNlc3NhcnksIHRoZSBkZXZpY2UgaXMgZmluYWxseSBicm91Z2h0IHVwCisgICB2aWEgdGhlICdvbmxpbmUnIGludGVyZmFjZS4KKworCisxLjIgV3JpdGluZyBhIGRyaXZlciBmb3IgY2N3IGRldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYmFzaWMgc3RydWN0IGNjd19kZXZpY2UgYW5kIHN0cnVjdCBjY3dfZHJpdmVyIGRhdGEgc3RydWN0dXJlcyBjYW4gYmUgZm91bmQKK3VuZGVyIGluY2x1ZGUvYXNtL2Njd2Rldi5oLgorCitzdHJ1Y3QgY2N3X2RldmljZSB7CisgICAgICAgIHNwaW5sb2NrX3QgKmNjd2xvY2s7CisgICAgICAgIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IGNjd19kZXZpY2VfaWQgaWQ7CQorCisJc3RydWN0IGNjd19kcml2ZXIgKmRydjsJCQorCXN0cnVjdCBkZXZpY2UgZGV2OwkJCisJaW50IG9ubGluZTsKKworCXZvaWQgKCpoYW5kbGVyKSAoc3RydWN0IGNjd19kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcmIgKmlyYik7Cit9OworCitzdHJ1Y3QgY2N3X2RyaXZlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CQkKKwlzdHJ1Y3QgY2N3X2RldmljZV9pZCAqaWRzOwkKKwlpbnQgKCpwcm9iZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOyAKKwlpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwlpbnQgKCpzZXRfb25saW5lKSAoc3RydWN0IGNjd19kZXZpY2UgKik7CisJaW50ICgqc2V0X29mZmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwlpbnQgKCpub3RpZnkpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwljaGFyICpuYW1lOworfTsKKworVGhlICdwcml2YXRlJyBmaWVsZCBjb250YWlucyBkYXRhIG5lZWRlZCBmb3IgaW50ZXJuYWwgaS9vIG9wZXJhdGlvbiBvbmx5LCBhbmQKK2lzIG5vdCBhdmFpbGFibGUgdG8gdGhlIGRldmljZSBkcml2ZXIuCisKK0VhY2ggZHJpdmVyIHNob3VsZCBkZWNsYXJlIGluIGEgTU9EVUxFX0RFVklDRV9UQUJMRSBpbnRvIHdoaWNoIENVIHR5cGVzL21vZGVscworYW5kL29yIGRldmljZSB0eXBlcy9tb2RlbHMgaXQgaXMgaW50ZXJlc3RlZC4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gbGF0ZXIgYmUgZm91bmQKK2ZvdW5kIGluIHRoZSBzdHJ1Y3QgY2N3X2RldmljZV9pZCBmaWVsZHM6CisKK3N0cnVjdCBjY3dfZGV2aWNlX2lkIHsKKwlfX3UxNgltYXRjaF9mbGFnczsJCisKKwlfX3UxNgljdV90eXBlOwkKKwlfX3UxNglkZXZfdHlwZTsJCisJX191OAljdV9tb2RlbDsJCisJX191OAlkZXZfbW9kZWw7CQorCisJdW5zaWduZWQgbG9uZyBkcml2ZXJfaW5mbzsKK307CisKK1RoZSBmdW5jdGlvbnMgaW4gY2N3X2RyaXZlciBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHdheToKK3Byb2JlOiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBkZXZpY2UgbGF5ZXIgZm9yIGVhY2ggZGV2aWNlIHRoZSBkcml2ZXIKKwkgaXMgaW50ZXJlc3RlZCBpbi4gVGhlIGRyaXZlciBzaG91bGQgb25seSBhbGxvY2F0ZSBwcml2YXRlIHN0cnVjdHVyZXMKKwkgdG8gcHV0IGluIGRldi0+ZHJpdmVyX2RhdGEgYW5kIGNyZWF0ZSBhdHRyaWJ1dGVzIChpZiBuZWVkZWQpLiBBbHNvLAorCSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKHNlZSBiZWxvdykgc2hvdWxkIGJlIHNldCBoZXJlLgorCitpbnQgKCpwcm9iZSkgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsgCisKK1BhcmFtZXRlcnM6ICBjZGV2ICAgICAtIHRoZSBkZXZpY2UgdG8gYmUgcHJvYmVkLgorCisKK3JlbW92ZTogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBkZXZpY2UgbGF5ZXIgdXBvbiByZW1vdmFsIG9mIHRoZSBkcml2ZXIsCisJIHRoZSBkZXZpY2Ugb3IgdGhlIG1vZHVsZS4gVGhlIGRyaXZlciBzaG91bGQgcGVyZm9ybSBjbGVhbnVwcyBoZXJlLgorCitpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CisKK1BhcmFtZXRlcnM6ICAgY2RldiAgICAtIHRoZSBkZXZpY2UgdG8gYmUgcmVtb3ZlZC4KKworCitzZXRfb25saW5lOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY29tbW9uIEkvTyBsYXllciB3aGVuIHRoZSBkZXZpY2UgaXMKKwkgICAgYWN0aXZhdGVkIHZpYSB0aGUgJ29ubGluZScgYXR0cmlidXRlLiBUaGUgZHJpdmVyIHNob3VsZCBmaW5hbGx5CisJICAgIHNldHVwIGFuZCBhY3RpdmF0ZSB0aGUgZGV2aWNlIGhlcmUuCisKK2ludCAoKnNldF9vbmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKworUGFyYW1ldGVyczogICBjZGV2CS0gdGhlIGRldmljZSB0byBiZSBhY3RpdmF0ZWQuIFRoZSBjb21tb24gbGF5ZXIgaGFzCisJCQkgIHZlcmlmaWVkIHRoYXQgdGhlIGRldmljZSBpcyBub3QgYWxyZWFkeSBvbmxpbmUuCisKKworc2V0X29mZmxpbmU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjb21tb24gSS9PIGxheWVyIHdoZW4gdGhlIGRldmljZSBpcworCSAgICAgZGUtYWN0aXZhdGVkIHZpYSB0aGUgJ29ubGluZScgYXR0cmlidXRlLiBUaGUgZHJpdmVyIHNob3VsZCBzaHV0CisJICAgICBkb3duIHRoZSBkZXZpY2UsIGJ1dCBub3QgZGUtYWxsb2NhdGUgaXRzIHByaXZhdGUgZGF0YS4KKworaW50ICgqc2V0X29mZmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKworUGFyYW1ldGVyczogICBjZGV2ICAgICAgIC0gdGhlIGRldmljZSB0byBiZSBkZWFjdGl2YXRlZC4gVGhlIGNvbW1vbiBsYXllciBoYXMKKwkJCSAgIHZlcmlmaWVkIHRoYXQgdGhlIGRldmljZSBpcyBvbmxpbmUuCisKKworbm90aWZ5OiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgY29tbW9uIEkvTyBsYXllciBmb3Igc29tZSBzdGF0ZSBjaGFuZ2VzCisJb2YgdGhlIGRldmljZS4KKwlTaWduYWxsZWQgdG8gdGhlIGRyaXZlciBhcmU6CisJKiBJbiBvbmxpbmUgc3RhdGUsIGRldmljZSBkZXRhY2hlZCAoQ0lPX0dPTkUpIG9yIGxhc3QgcGF0aCBnb25lCisJICAoQ0lPX05PX1BBVEgpLiBUaGUgZHJpdmVyIG11c3QgcmV0dXJuICEwIHRvIGtlZXAgdGhlIGRldmljZTsgZm9yCisJICByZXR1cm4gY29kZSAwLCB0aGUgZGV2aWNlIHdpbGwgYmUgZGVsZXRlZCBhcyB1c3VhbCAoYWxzbyB3aGVuIG5vCisJICBub3RpZnkgZnVuY3Rpb24gaXMgcmVnaXN0ZXJkKS4gSWYgdGhlIGRyaXZlciB3YW50cyB0byBrZWVwIHRoZQorCSAgZGV2aWNlLCBpdCBpcyBtb3ZlZCBpbnRvIGRpc2Nvbm5lY3RlZCBzdGF0ZS4KKwkqIEluIGRpc2Nvbm5lY3RlZCBzdGF0ZSwgZGV2aWNlIG9wZXJhdGlvbmFsIGFnYWluIChDSU9fT1BFUikuIFRoZQorCSAgY29tbW9uIEkvTyBsYXllciBwZXJmb3JtcyBzb21lIHNhbml0eSBjaGVja3Mgb24gZGV2aWNlIG51bWJlciBhbmQKKwkgIERldmljZSAvIENVIHRvIGJlIHJlYXNvbmFibHkgc3VyZSBpZiBpdCBpcyBzdGlsbCB0aGUgc2FtZSBkZXZpY2UuCisJICBJZiBub3QsIHRoZSBvbGQgZGV2aWNlIGlzIHJlbW92ZWQgYW5kIGEgbmV3IG9uZSByZWdpc3RlcmVkLiBCeSB0aGUKKwkgIHJldHVybiBjb2RlIG9mIHRoZSBub3RpZnkgZnVuY3Rpb24gdGhlIGRldmljZSBkcml2ZXIgc2lnbmFscyBpZiBpdAorCSAgd2FudHMgdGhlIGRldmljZSBiYWNrOiAhMCBmb3Iga2VlcGluZywgMCB0byBtYWtlIHRoZSBkZXZpY2UgYmVpbmcKKwkgIHJlbW92ZWQgYW5kIHJlLXJlZ2lzdGVyZWQuCisJCitpbnQgKCpub3RpZnkpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOworCitQYXJhbWV0ZXJzOiAgIGNkZXYgICAgLSB0aGUgZGV2aWNlIHdob3NlIHN0YXRlIGNoYW5nZWQuCisJICAgICAgZXZlbnQgICAtIHRoZSBldmVudCB0aGF0IGhhcHBlbmVkLiBUaGlzIGNhbiBiZSBvbmUgb2YgQ0lPX0dPTkUsCisJCSAgICAgICAgQ0lPX05PX1BBVEggb3IgQ0lPX09QRVIuCisKK1RoZSBoYW5kbGVyIGZpZWxkIG9mIHRoZSBzdHJ1Y3QgY2N3X2RldmljZSBpcyBtZWFudCB0byBiZSBzZXQgdG8gdGhlIGludGVycnVwdAoraGFuZGxlciBmb3IgdGhlIGRldmljZS4gSW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgZHJpdmVycyB3aGljaCB1c2Ugc2V2ZXJhbCAKK2Rpc3RpbmN0IGhhbmRsZXJzIChlLmcuIG11bHRpIHN1YmNoYW5uZWwgZGV2aWNlcyksIHRoaXMgaXMgYSBtZW1iZXIgb2YgY2N3X2RldmljZQoraW5zdGVhZCBvZiBjY3dfZHJpdmVyLgorVGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb21tb24gbGF5ZXIgZHVyaW5nIHNldF9vbmxpbmUoKSBwcm9jZXNzaW5nCitiZWZvcmUgdGhlIGRyaXZlciBpcyBjYWxsZWQsIGFuZCBpcyBkZXJlZ2lzdGVyZWQgZHVyaW5nIHNldF9vZmZsaW5lKCkgYWZ0ZXIgdGhlCitkcml2ZXIgaGFzIGJlZW4gY2FsbGVkLiBBbHNvLCBhZnRlciByZWdpc3RlcmluZyAvIGJlZm9yZSBkZXJlZ2lzdGVyaW5nLCBwYXRoIAorZ3JvdXBpbmcgcmVzcC4gZGlzYmFuZGluZyBvZiB0aGUgcGF0aCBncm91cCAoaWYgYXBwbGljYWJsZSkgYXJlIHBlcmZvcm1lZC4KKwordm9pZCAoKmhhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGludHBhcm0sIHN0cnVjdCBpcmIgKmlyYik7CisKK1BhcmFtZXRlcnM6CWRldgktIHRoZSBkZXZpY2UgdGhlIGhhbmRsZXIgaXMgY2FsbGVkIGZvcgorCQlpbnRwYXJtIC0gdGhlIGludHBhcm0gd2hpY2ggYWxsb3dzIHRoZSBkZXZpY2UgZHJpdmVyIHRvIGlkZW50aWZ5CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpL28gdGhlIGludGVycnVwdCBpcyBhc3NvY2lhdGVkIHdpdGgsIG9yIHRvIHJlY29nbml6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IGFzIHVuc29saWNpdGVkLgorICAgICAgICAgICAgICAgIGlyYiAgICAgLSBpbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgd2hpY2ggY29udGFpbnMgdGhlIGFjY3VtdWxhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy4KKworVGhlIGRldmljZSBkcml2ZXIgaXMgY2FsbGVkIGZyb20gdGhlIGNvbW1vbiBjY3dfZGV2aWNlIGxheWVyIGFuZCBjYW4gcmV0cmlldmUgCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJydXB0IGZyb20gdGhlIGlyYiBwYXJhbWV0ZXIuCisKKworMS4zIGNjd2dyb3VwIGRldmljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjY3dncm91cCBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gaGFuZGxlIGRldmljZXMgY29uc2lzdGluZyBvZiBtdWx0aXBsZSBjY3cKK2RldmljZXMsIGxpa2UgbGNzIG9yIGN0Yy4KKworVGhlIGNjdyBkcml2ZXIgcHJvdmlkZXMgYSAnZ3JvdXAnIGF0dHJpYnV0ZS4gUGlwaW5nIGJ1cyBpZHMgb2YgY2N3IGRldmljZXMgdG8KK3RoaXMgYXR0cmlidXRlcyBjcmVhdGVzIGEgY2N3Z3JvdXAgZGV2aWNlIGNvbnNpc3Rpbmcgb2YgdGhlc2UgY2N3IGRldmljZXMgKGlmCitwb3NzaWJsZSkuIFRoaXMgY2N3Z3JvdXAgZGV2aWNlIGNhbiBiZSBzZXQgb25saW5lIG9yIG9mZmxpbmUganVzdCBsaWtlIGEgbm9ybWFsCitjY3cgZGV2aWNlLgorCitFYWNoIGNjd2dyb3VwIGRldmljZSBhbHNvIHByb3ZpZGVzIGFuICd1bmdyb3VwJyBhdHRyaWJ1dGUgdG8gZGVzdHJveSB0aGUgZGV2aWNlCithZ2FpbiAob25seSB3aGVuIG9mZmxpbmUpLiBUaGlzIGlzIGEgZ2VuZXJpYyBjY3dncm91cCBtZWNoYW5pc20gKHRoZSBkcml2ZXIgZG9lcworbm90IG5lZWQgdG8gaW1wbGVtZW50IGFueXRoaW5nIGJleW9uZCBub3JtYWwgcmVtb3ZhbCByb3V0aW5lcykuCisKK1RvIGltcGxlbWVudCBhIGNjd2dyb3VwIGRyaXZlciwgcGxlYXNlIHJlZmVyIHRvIGluY2x1ZGUvYXNtL2Njd2dyb3VwLmguIEtlZXAgaW4KK21pbmQgdGhhdCBtb3N0IGRyaXZlcnMgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBib3RoIGEgY2N3Z3JvdXAgYW5kIGEgY2N3IGRyaXZlcgorKHVubGVzcyB5b3UgaGF2ZSBhIG1ldGEgY2N3IGRyaXZlciwgbGlrZSBjdTMwODggZm9yIGxjcyBhbmQgY3RjKS4KKworCisyLiBDaGFubmVsIHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLQorCitDaGFubmVsIHBhdGhzIHNob3cgdXAsIGxpa2Ugc3ViY2hhbm5lbHMsIHVuZGVyIHRoZSBjaGFubmVsIHN1YnN5c3RlbSByb290IChjc3MwKQorYW5kIGFyZSBjYWxsZWQgJ2NocDAuPGNocGlkPicuIFRoZXkgaGF2ZSBubyBkcml2ZXIgYW5kIGRvIG5vdCBiZWxvbmcgdG8gYW55IGJ1cy4KK1BsZWFzZSBub3RlLCB0aGF0IHVubGlrZSAvcHJvYy9jaHBpZHMgaW4gMi40LCB0aGUgY2hhbm5lbCBwYXRoIG9iamVjdHMgcmVmbGVjdAorb25seSB0aGUgbG9naWNhbCBzdGF0ZSBhbmQgbm90IHRoZSBwaHlzaWNhbCBzdGF0ZSwgc2luY2Ugd2UgY2Fubm90IHRyYWNrIHRoZQorbGF0dGVyIGNvbnNpc3RlbnRseSBkdWUgdG8gbGFja2luZyBtYWNoaW5lIHN1cHBvcnQgKHdlIGRvbid0IG5lZWQgdG8gYmUgYXdhcmUKK29mIGFueXdheSkuCisKK3N0YXR1cyAtIENhbiBiZSAnb25saW5lJyBvciAnb2ZmbGluZScuCisJIFBpcGluZyAnb24nIG9yICdvZmYnIHNldHMgdGhlIGNocGlkIGxvZ2ljYWxseSBvbmxpbmUvb2ZmbGluZS4KKwkgUGlwaW5nICdvbicgdG8gYW4gb25saW5lIGNocGlkIHRyaWdnZXJzIHBhdGggcmVwcm9iaW5nIGZvciBhbGwgZGV2aWNlcworCSB0aGUgY2hwaWQgY29ubmVjdHMgdG8uIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yY2UgdGhlIGtlcm5lbCB0byByZS11c2UKKwkgYSBjaGFubmVsIHBhdGggdGhlIHVzZXIga25vd3MgdG8gYmUgb25saW5lLCBidXQgdGhlIG1hY2hpbmUgaGFzbid0CisJIGNyZWF0ZWQgYSBtYWNoaW5lIGNoZWNrIGZvci4KKworCiszLiBTeXN0ZW0gZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogY3B1cyBtYXkgeWV0IGJlIGFkZGVkIGhlcmUuCisKKzMuMSB4cHJhbSAKKy0tLS0tLS0tLQorCit4cHJhbSBzaG93cyB1cCB1bmRlciBzeXMvIGFzICd4cHJhbScuCisKKworNC4gT3RoZXIgZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLQorCis0LjEgTmV0aXVjdgorLS0tLS0tLS0tLS0KKworVGhlIG5ldGl1Y3YgZHJpdmVyIGNyZWF0ZXMgYW4gYXR0cmlidXRlICdjb25uZWN0aW9uJyB1bmRlcgorYnVzL2l1Y3YvZHJpdmVycy9uZXRpdWN2LiBQaXBpbmcgdG8gdGhpcyBhdHRpYnV0ZSBjcmVhdGVzIGEgbmV3IG5ldGl1Y3YKK2Nvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBob3N0LgorCitOZXRpdWN2IGNvbm5lY3Rpb25zIHNob3cgdXAgdW5kZXIgZGV2aWNlcy9pdWN2LyBhcyAibmV0aXVjdjxpZm51bT4iLiBUaGUgaW50ZXJmYWNlCitudW1iZXIgaXMgYXNzaWduZWQgc2VxdWVudGlhbGx5IHRvIHRoZSBjb25uZWN0aW9ucyBkZWZpbmVkIHZpYSB0aGUgJ2Nvbm5lY3Rpb24nCithdHRyaWJ1dGUuCisKK3VzZXIJCQkgIC0gc2hvd3MgdGhlIGNvbm5lY3Rpb24gcGFydG5lci4KKworYnVmZmVyCQkJICAtIG1heGltdW0gYnVmZmVyIHNpemUuCisJCQkgICAgUGlwZSB0byBpdCB0byBjaGFuZ2UgYnVmZmVyIHNpemUuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvbW9ucmVhZGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODQzYmIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL21vbnJlYWRlci50eHQKQEAgLTAsMCArMSwxOTcgQEAKKworRGF0ZSAgOiAyMDA0LU5vdi0yNgorQXV0aG9yOiBHZXJhbGQgU2NoYWVmZXIgKGdlcmFsZHNjQGRlLmlibS5jb20pCisKKworICAgICAgICAgICAgIExpbnV4IEFQSSBmb3IgcmVhZCBhY2Nlc3MgdG8gei9WTSBNb25pdG9yIFJlY29yZHMKKyAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworRGVzY3JpcHRpb24KKz09PT09PT09PT09CitUaGlzIGl0ZW0gZGVsaXZlcnMgYSBuZXcgTGludXggQVBJIGluIHRoZSBmb3JtIG9mIGEgbWlzYyBjaGFyIGRldmljZSB0aGF0IGlzCit1c2VhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgYWxsb3dzIHJlYWQgYWNjZXNzIHRvIHRoZSB6L1ZNIE1vbml0b3IgUmVjb3JkcworY29sbGVjdGVkIGJ5IHRoZSAqTU9OSVRPUiBTeXN0ZW0gU2VydmljZSBvZiB6L1ZNLgorCisKK1VzZXIgUmVxdWlyZW1lbnRzCis9PT09PT09PT09PT09PT09PQorVGhlIHovVk0gZ3Vlc3Qgb24gd2hpY2ggeW91IHdhbnQgdG8gYWNjZXNzIHRoaXMgQVBJIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgaW4KK29yZGVyIHRvIGFsbG93IElVQ1YgY29ubmVjdGlvbnMgdG8gdGhlICpNT05JVE9SIHNlcnZpY2UsIGkuZS4gaXQgbmVlZHMgdGhlCitJVUNWICpNT05JVE9SIHN0YXRlbWVudCBpbiBpdHMgdXNlciBlbnRyeS4gSWYgdGhlIG1vbml0b3IgRENTUyB0byBiZSB1c2VkIGlzCityZXN0cmljdGVkIChsaWtlbHkpLCB5b3UgYWxzbyBuZWVkIHRoZSBOQU1FU0FWRSA8RENTUyBOQU1FPiBzdGF0ZW1lbnQuCitUaGlzIGl0ZW0gd2lsbCB1c2UgdGhlIElVQ1YgZGV2aWNlIGRyaXZlciB0byBhY2Nlc3MgdGhlIHovVk0gc2VydmljZXMsIHNvIHlvdQorbmVlZCBhIGtlcm5lbCB3aXRoIElVQ1Ygc3VwcG9ydC4gWW91IGFsc28gbmVlZCB6L1ZNIHZlcnNpb24gNC40IG9yIDUuMS4KKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBiZWluZyBhYmxlIHRvIGxvYWQgdGhlIG1vbml0b3IgRENTUyAoZXhhbXBsZXMgYXNzdW1lCit0aGF0IHRoZSBtb25pdG9yIERDU1MgYmVnaW5zIGF0IDE0NCBNQiBhbmQgZW5kcyBhdCAxNTIgTUIpLiBZb3UgY2FuIHF1ZXJ5IHRoZQorbG9jYXRpb24gb2YgdGhlIG1vbml0b3IgRENTUyB3aXRoIHRoZSBDbGFzcyBFIHByaXZpbGVnZWQgQ1AgY29tbWFuZCBRIE5TUyBNQVAKKyh0aGUgdmFsdWVzIEJFR1BBRyBhbmQgRU5EUEFHIGFyZSBnaXZlbiBpbiB1bml0cyBvZiA0SyBwYWdlcykuCisKK1NlZSBhbHNvICJDUCBDb21tYW5kIGFuZCBVdGlsaXR5IFJlZmVyZW5jZSIgKFNDMjQtNjA4MS0wMCkgZm9yIG1vcmUgaW5mb3JtYXRpb24KK29uIHRoZSBERUYgU1RPUiBhbmQgUSBOU1MgTUFQIGNvbW1hbmRzLCBhcyB3ZWxsIGFzICJTYXZlZCBTZWdtZW50cyBQbGFubmluZworYW5kIEFkbWluaXN0cmF0aW9uIiAoU0MyNC02MTE2LTAwKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBEQ1NTZXMuCisKKzFzdCBvcHRpb246CistLS0tLS0tLS0tLQorWW91IGNhbiB1c2UgdGhlIENQIGNvbW1hbmQgREVGIFNUT1IgQ09ORklHIHRvIGRlZmluZSBhICJtZW1vcnkgaG9sZSIgaW4geW91cgorZ3Vlc3QgdmlydHVhbCBzdG9yYWdlIGFyb3VuZCB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgRENTUy4KKworRXhhbXBsZTogREVGIFNUT1IgQ09ORklHIDAuMTQwTSAyMDBNLjIwME0KKworVGhpcyBkZWZpbmVzIHR3byBibG9ja3Mgb2Ygc3RvcmFnZSwgdGhlIGZpcnN0IGlzIDE0ME1CIGluIHNpemUgYW4gYmVnaW5zIGF0CithZGRyZXNzIDBNQiwgdGhlIHNlY29uZCBpcyAyMDBNQiBpbiBzaXplIGFuZCBiZWdpbnMgYXQgYWRkcmVzcyAyMDBNQiwKK3Jlc3VsdGluZyBpbiBhIHRvdGFsIHN0b3JhZ2Ugb2YgMzQwTUIuIE5vdGUgdGhhdCB0aGUgZmlyc3QgYmxvY2sgc2hvdWxkCithbHdheXMgc3RhcnQgYXQgMCBhbmQgYmUgYXQgbGVhc3QgNjRNQiBpbiBzaXplLgorCisybmQgb3B0aW9uOgorLS0tLS0tLS0tLS0KK1lvdXIgZ3Vlc3QgdmlydHVhbCBzdG9yYWdlIGhhcyB0byBlbmQgYmVsb3cgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIERDU1MKK2FuZCB5b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZSAibWVtPSIga2VybmVsIHBhcmFtZXRlciBpbiB5b3VyIHBhcm1maWxlIHdpdGggYQordmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgYWRkcmVzcyBvZiB0aGUgRENTUy4KKworRXhhbXBsZTogREVGIFNUT1IgMTQwTQorCitUaGlzIGRlZmluZXMgMTQwTUIgc3RvcmFnZSBzaXplIGZvciB5b3VyIGd1ZXN0LCB0aGUgcGFyYW1ldGVyICJtZW09MTYwTSIgaXMKK2FkZGVkIHRvIHRoZSBwYXJtZmlsZS4KKworCitVc2VyIEludGVyZmFjZQorPT09PT09PT09PT09PT0KK1RoZSBjaGFyIGRldmljZSBpcyBpbXBsZW1lbnRlZCBhcyBhIGtlcm5lbCBtb2R1bGUgbmFtZWQgIm1vbnJlYWRlciIsCit3aGljaCBjYW4gYmUgbG9hZGVkIHZpYSB0aGUgbW9kcHJvYmUgY29tbWFuZCwgb3IgaXQgY2FuIGJlIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwgaW5zdGVhZC4gVGhlcmUgaXMgb25lIG9wdGlvbmFsIG1vZHVsZSAob3Iga2VybmVsKSBwYXJhbWV0ZXIsICJtb25kY3NzIiwKK3RvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG1vbml0b3IgRENTUy4gSWYgdGhlIG1vZHVsZSBpcyBjb21waWxlZCBpbnRvIHRoZQora2VybmVsLCB0aGUga2VybmVsIHBhcmFtZXRlciAibW9ucmVhZGVyLm1vbmRjc3M9PERDU1MgTkFNRT4iIGNhbiBiZSBzcGVjaWZpZWQKK2luIHRoZSBwYXJtZmlsZS4KKworVGhlIGRlZmF1bHQgbmFtZSBmb3IgdGhlIERDU1MgaXMgIk1PTkRDU1MiIGlmIG5vbmUgaXMgc3BlY2lmaWVkLiBJbiBjYXNlIHRoYXQKK3RoZXJlIGFyZSBvdGhlciB1c2VycyBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgKk1PTklUT1Igc2VydmljZSAoZS5nLgorUGVyZm9ybWFuY2UgVG9vbGtpdCksIHRoZSBtb25pdG9yIERDU1MgaXMgYWxyZWFkeSBkZWZpbmVkIGFuZCB5b3UgaGF2ZSB0byB1c2UKK3RoZSBzYW1lIERDU1MuIFRoZSBDUCBjb21tYW5kIFEgTU9OSVRPUiAoQ2xhc3MgRSBwcml2aWxlZ2VkKSBzaG93cyB0aGUgbmFtZQorb2YgdGhlIG1vbml0b3IgRENTUywgaWYgYWxyZWFkeSBkZWZpbmVkLCBhbmQgdGhlIHVzZXJzIGNvbm5lY3RlZCB0byB0aGUKKypNT05JVE9SIHNlcnZpY2UuCitSZWZlciB0byB0aGUgInovVk0gUGVyZm9ybWFuY2UiIGJvb2sgKFNDMjQtNjEwOS0wMCkgb24gaG93IHRvIGNyZWF0ZSBhIG1vbml0b3IKK0RDU1MgaWYgeW91ciB6L1ZNIGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeSwgeW91IG5lZWQgQ2xhc3MgRSBwcml2aWxlZ2VzIHRvCitkZWZpbmUgYW5kIHNhdmUgYSBEQ1NTLgorCitFeGFtcGxlOgorLS0tLS0tLS0KK21vZHByb2JlIG1vbnJlYWRlciBtb25kY3NzPU1ZRENTUworCitUaGlzIGxvYWRzIHRoZSBtb2R1bGUgYW5kIHNldHMgdGhlIERDU1MgbmFtZSB0byAiTVlEQ1NTIi4KKworTk9URToKKy0tLS0tCitUaGlzIEFQSSBwcm92aWRlcyBubyBpbnRlcmZhY2UgdG8gY29udHJvbCB0aGUgKk1PTklUT1Igc2VydmljZSwgZS5nLiBzcGVjaWZpeQord2hpY2ggZGF0YSBzaG91bGQgYmUgY29sbGVjdGVkLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHRoZSBDUCBjb21tYW5kIE1PTklUT1IKKyhDbGFzcyBFIHByaXZpbGVnZWQpLCBzZWUgIkNQIENvbW1hbmQgYW5kIFV0aWxpdHkgUmVmZXJlbmNlIi4KKworRGV2aWNlIG5vZGVzIHdpdGggdWRldjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUsIGEgY2hhciBkZXZpY2Ugd2lsbCBiZSBjcmVhdGVkIGFsb25nIHdpdGggdGhlIGRldmljZQorbm9kZSAvPHVkZXYgZGlyZWN0b3J5Pi9tb25yZWFkZXIuCisKK0RldmljZSBub2RlcyB3aXRob3V0IHVkZXY6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91ciBkaXN0cmlidXRpb24gZG9lcyBub3Qgc3VwcG9ydCB1ZGV2LCBhIGRldmljZSBub2RlIHdpbGwgbm90IGJlIGNyZWF0ZWQKK2F1dG9tYXRpY2FsbHkgYW5kIHlvdSBoYXZlIHRvIGNyZWF0ZSBpdCBtYW51YWxseSBhZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUuCitUaGVyZWZvcmUgeW91IG5lZWQgdG8ga25vdyB0aGUgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgb2YgdGhlIGRldmljZS4gVGhlc2UKK251bWJlcnMgY2FuIGJlIGZvdW5kIGluIC9zeXMvY2xhc3MvbWlzYy9tb25yZWFkZXIvZGV2LgorVHlwaW5nIGNhdCAvc3lzL2NsYXNzL21pc2MvbW9ucmVhZGVyL2RldiB3aWxsIGdpdmUgYW4gb3V0cHV0IG9mIHRoZSBmb3JtCis8bWFqb3I+OjxtaW5vcj4uIFRoZSBkZXZpY2Ugbm9kZSBjYW4gYmUgY3JlYXRlZCB2aWEgdGhlIG1rbm9kIGNvbW1hbmQsIGVudGVyCitta25vZCA8bmFtZT4gYyA8bWFqb3I+IDxtaW5vcj4sIHdoZXJlIDxuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIG5vZGUKK3RvIGJlIGNyZWF0ZWQuCisKK0V4YW1wbGU6CistLS0tLS0tLQorIyBtb2Rwcm9iZSBtb25yZWFkZXIKKyMgY2F0IC9zeXMvY2xhc3MvbWlzYy9tb25yZWFkZXIvZGV2CisxMDo2MworIyBta25vZCAvZGV2L21vbnJlYWRlciBjIDEwIDYzCisKK1RoaXMgbG9hZHMgdGhlIG1vZHVsZSB3aXRoIHRoZSBkZWZhdWx0IG1vbml0b3IgRENTUyAoTU9ORENTUykgYW5kIGNyZWF0ZXMgYQorZGV2aWNlIG5vZGUuCisKK0ZpbGUgb3BlcmF0aW9uczoKKy0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmb2xsb3dpbmcgZmlsZSBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ6IG9wZW4sIHJlbGVhc2UsIHJlYWQsIHBvbGwuCitUaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIG1ldGhvZHMgZm9yIHJlYWRpbmc6IGVpdGhlciBub24tYmxvY2tpbmcgcmVhZCBpbgorY29uanVuY3Rpb24gd2l0aCBwb2xsaW5nLCBvciBibG9ja2luZyByZWFkIHdpdGhvdXQgcG9sbGluZy4gSU9DVExzIGFyZSBub3QKK3N1cHBvcnRlZC4KKworUmVhZDoKKy0tLS0tCitSZWFkaW5nIGZyb20gdGhlIGRldmljZSBwcm92aWRlcyBhIDEyIEJ5dGUgbW9uaXRvciBjb250cm9sIGVsZW1lbnQgKE1DRSksCitmb2xsb3dlZCBieSBhIHNldCBvZiBvbmUgb3IgbW9yZSBjb250aWd1b3VzIG1vbml0b3IgcmVjb3JkcyAoc2ltaWxhciB0byB0aGUKK291dHB1dCBvZiB0aGUgQ01TIHV0aWxpdHkgTU9OV1JJVEUgd2l0aG91dCB0aGUgNEsgY29udHJvbCBibG9ja3MpLiBUaGUgTUNFCitjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgdHlwZSBvZiB0aGUgZm9sbG93aW5nIHJlY29yZCBzZXQgKHNhbXBsZS9ldmVudAorZGF0YSksIHRoZSBtb25pdG9yIGRvbWFpbnMgY29udGFpbmVkIHdpdGhpbiBpdCBhbmQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzcworb2YgdGhlIHJlY29yZCBzZXQgaW4gdGhlIG1vbml0b3IgRENTUy4gVGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzcyBjYW4gYmUgdXNlZAordG8gZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSByZWNvcmQgc2V0LCB0aGUgZW5kIGFkZHJlc3MgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCitsYXN0IGJ5dGUgb2YgZGF0YS4gVGhlIHN0YXJ0IGFkZHJlc3MgaXMgbmVlZGVkIHRvIGhhbmRsZSAiZW5kLW9mLWZyYW1lIiByZWNvcmRzCitjb3JyZWN0bHkgKGRvbWFpbiAxLCByZWNvcmQgMTMpLCBpLmUuIGl0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVjb3JkCitzdGFydCBvZmZzZXQgcmVsYXRpdmUgdG8gYSA0SyBwYWdlIChmcmFtZSkgYm91bmRhcnkuCisKK1NlZSAiQXBwZW5kaXggQTogKk1PTklUT1IiIGluIHRoZSAiei9WTSBQZXJmb3JtYW5jZSIgZG9jdW1lbnQgZm9yIGEgZGVzY3JpcHRpb24KK29mIHRoZSBtb25pdG9yIGNvbnRyb2wgZWxlbWVudCBsYXlvdXQuIFRoZSBsYXlvdXQgb2YgdGhlIG1vbml0b3IgcmVjb3JkcyBjYW4KK2JlIGZvdW5kIGhlcmUgKHovVk0gNS4xKTogaHR0cDovL3d3dy52bS5pYm0uY29tL3B1YnMvbW9uNTEwL2luZGV4Lmh0bWwKKworVGhlIGxheW91dCBvZiB0aGUgZGF0YSBzdHJlYW0gcHJvdmlkZWQgYnkgdGhlIG1vbnJlYWRlciBkZXZpY2UgaXMgYXMgZm9sbG93czoKKy4uLgorPDAgYnl0ZSByZWFkPgorPGZpcnN0IE1DRT4gICAgICAgICAgICAgIFwKKzxmaXJzdCBzZXQgb2YgcmVjb3Jkcz4gICAgfAorLi4uICAgICAgICAgICAgICAgICAgICAgICB8LSBkYXRhIHNldAorPGxhc3QgTUNFPiAgICAgICAgICAgICAgICB8Cis8bGFzdCBzZXQgb2YgcmVjb3Jkcz4gICAgLworPDAgYnl0ZSByZWFkPgorLi4uCisKK1RoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGNvbWJpbmF0aW9uIG9mIE1DRSBhbmQgY29ycmVzcG9uZGluZyByZWNvcmQgc2V0Cit3aXRoaW4gb25lIGRhdGEgc2V0IGFuZCB0aGUgZW5kIG9mIGVhY2ggZGF0YSBzZXQgaXMgaW5kaWNhdGVkIGJ5IGEgc3VjY2Vzc2Z1bAorcmVhZCB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIDAgKDAgYnl0ZSByZWFkKS4KK0FueSByZWNlaXZlZCBkYXRhIG11c3QgYmUgY29uc2lkZXJlZCBpbnZhbGlkIHVudGlsIGEgY29tcGxldGUgc2V0IHdhcworcmVhZCBzdWNjZXNzZnVsbHksIGluY2x1ZGluZyB0aGUgY2xvc2luZyAwIGJ5dGUgcmVhZC4gVGhlcmVmb3JlIHlvdSBzaG91bGQKK2Fsd2F5cyByZWFkIHRoZSBjb21wbGV0ZSBzZXQgaW50byBhIGJ1ZmZlciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZGF0YS4KKworVGhlIG1heGltdW0gc2l6ZSBvZiBhIGRhdGEgc2V0IGNhbiBiZSBhcyBsYXJnZSBhcyB0aGUgc2l6ZSBvZiB0aGUKK21vbml0b3IgRENTUywgc28gZGVzaWduIHRoZSBidWZmZXIgYWRlcXVhdGVseSBvciB1c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4KK1RoZSBzaXplIG9mIHRoZSBtb25pdG9yIERDU1Mgd2lsbCBiZSBwcmludGVkIGludG8gc3lzbG9nIGFmdGVyIGxvYWRpbmcgdGhlCittb2R1bGUuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIChDbGFzcyBFIHByaXZpbGVnZWQpIENQIGNvbW1hbmQgUSBOU1MgTUFQIHRvCitsaXN0IGFsbCBhdmFpbGFibGUgc2VnbWVudHMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZW0uCisKK0FzIHdpdGggbW9zdCBjaGFyIGRldmljZXMsIGVycm9yIGNvbmRpdGlvbnMgYXJlIGluZGljYXRlZCBieSByZXR1cm5pbmcgYQorbmVnYXRpdmUgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSW4gdGhpcyBjYXNlLCB0aGUgZXJybm8gdmFyaWFibGUKK2luZGljYXRlcyB0aGUgZXJyb3IgY29uZGl0aW9uOgorCitFSU86IHJlcGx5IGZhaWxlZCwgcmVhZCBkYXRhIGlzIGludmFsaWQgYW5kIHRoZSBhcHBsaWNhdGlvbgorICAgICBzaG91bGQgZGlzY2FyZCB0aGUgZGF0YSByZWFkIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgcmVhZCB3aXRoIDAgc2l6ZS4KK0VGQVVMVDogY29weV90b191c2VyIGZhaWxlZCwgcmVhZCBkYXRhIGlzIGludmFsaWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAgICAgICAgZGlzY2FyZCB0aGUgZGF0YSByZWFkIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgcmVhZCB3aXRoIDAgc2l6ZS4KK0VBR0FJTjogb2NjdXJzIG9uIGEgbm9uLWJsb2NraW5nIHJlYWQgaWYgdGhlcmUgaXMgbm8gZGF0YSBhdmFpbGFibGUgYXQgdGhlCisgICAgICAgIG1vbWVudC4gVGhlcmUgaXMgbm8gZGF0YSBtaXNzaW5nIG9yIGNvcnJ1cHRlZCwganVzdCB0cnkgYWdhaW4gb3IgcmF0aGVyCisgICAgICAgIHVzZSBwb2xsaW5nIGZvciBub24tYmxvY2tpbmcgcmVhZHMuCitFT1ZFUkZMT1c6IG1lc3NhZ2UgbGltaXQgcmVhY2hlZCwgdGhlIGRhdGEgcmVhZCBzaW5jZSB0aGUgbGFzdCBzdWNjZXNzZnVsCisgICAgICAgICAgIHJlYWQgd2l0aCAwIHNpemUgaXMgdmFsaWQgYnV0IHN1YnNlcXVlbnQgcmVjb3JkcyBtYXkgYmUgbWlzc2luZy4KKworSW4gdGhlIGxhc3QgY2FzZSAoRU9WRVJGTE9XKSB0aGVyZSBtYXkgYmUgbWlzc2luZyBkYXRhLCBpbiB0aGUgZmlyc3QgdHdvIGNhc2VzCisoRUlPLCBFRkFVTFQpIHRoZXJlIHdpbGwgYmUgbWlzc2luZyBkYXRhLiBJdCdzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBpdCB3aWxsCitjb250aW51ZSByZWFkaW5nIHN1YnNlcXVlbnQgZGF0YSBvciByYXRoZXIgZXhpdC4KKworT3BlbjoKKy0tLS0tCitPbmx5IG9uZSB1c2VyIGlzIGFsbG93ZWQgdG8gb3BlbiB0aGUgY2hhciBkZXZpY2UuIElmIGl0IGlzIGFscmVhZHkgaW4gdXNlLCB0aGUKK29wZW4gZnVuY3Rpb24gd2lsbCBmYWlsIChyZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSkgYW5kIHNldCBlcnJubyB0byBFQlVTWS4KK1RoZSBvcGVuIGZ1bmN0aW9uIG1heSBhbHNvIGZhaWwgaWYgYW4gSVVDViBjb25uZWN0aW9uIHRvIHRoZSAqTU9OSVRPUiBzZXJ2aWNlCitjYW5ub3QgYmUgZXN0YWJsaXNoZWQuIEluIHRoaXMgY2FzZSBlcnJubyB3aWxsIGJlIHNldCB0byBFSU8gYW5kIGFuIGVycm9yCittZXNzYWdlIHdpdGggYW4gSVBVU0VSIFNFVkVSIGNvZGUgd2lsbCBiZSBwcmludGVkIGludG8gc3lzbG9nLiBUaGUgSVBVU0VSIFNFVkVSCitjb2RlcyBhcmUgZGVzY3JpYmVkIGluIHRoZSAiei9WTSBQZXJmb3JtYW5jZSIgYm9vaywgQXBwZW5kaXggQS4KKworTk9URToKKy0tLS0tCitBcyBzb29uIGFzIHRoZSBkZXZpY2UgaXMgb3BlbmVkLCBpbmNvbWluZyBtZXNzYWdlcyB3aWxsIGJlIGFjY2VwdGVkIGFuZCB0aGV5Cit3aWxsIGFjY291bnQgZm9yIHRoZSBtZXNzYWdlIGxpbWl0LCBpLmUuIG9wZW5pbmcgdGhlIGRldmljZSB3aXRob3V0IHJlYWRpbmcKK2Zyb20gaXQgd2lsbCBwcm92b2tlIHRoZSAibWVzc2FnZSBsaW1pdCByZWFjaGVkIiBlcnJvciAoRU9WRVJGTE9XIGVycm9yIGNvZGUpCitldmVudHVhbGx5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxY2Q5MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dApAQCAtMCwwICsxLDYxNSBAQAorUzM5MCBEZWJ1ZyBGZWF0dXJlCis9PT09PT09PT09PT09PT09PT0KKworZmlsZXM6IGFyY2gvczM5MC9rZXJuZWwvZGVidWcuYworICAgICAgIGluY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAorCitEZXNjcmlwdGlvbjoKKy0tLS0tLS0tLS0tLQorVGhlIGdvYWwgb2YgdGhpcyBmZWF0dXJlIGlzIHRvIHByb3ZpZGUgYSBrZXJuZWwgZGVidWcgbG9nZ2luZyBBUEkgCit3aGVyZSBsb2cgcmVjb3JkcyBjYW4gYmUgc3RvcmVkIGVmZmljaWVudGx5IGluIG1lbW9yeSwgd2hlcmUgZWFjaCBjb21wb25lbnQgCisoZS5nLiBkZXZpY2UgZHJpdmVycykgY2FuIGhhdmUgb25lIHNlcGFyYXRlIGRlYnVnIGxvZy4KK09uZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gaW5zcGVjdCB0aGUgZGVidWcgbG9ncyBhZnRlciBhIHByb2R1Y3Rpb24gc3lzdGVtIGNyYXNoCitpbiBvcmRlciB0byBhbmFseXplIHRoZSByZWFzb24gZm9yIHRoZSBjcmFzaC4KK0lmIHRoZSBzeXN0ZW0gc3RpbGwgcnVucyBidXQgb25seSBhIHN1YmNvbXBvbmVudCB3aGljaCB1c2VzIGRiZiBmYWlsZXMsCitpdCBpcyBwb3NzaWJsZSB0byBsb29rIGF0IHRoZSBkZWJ1ZyBsb2dzIG9uIGEgbGl2ZSBzeXN0ZW0gdmlhIHRoZSBMaW51eCBwcm9jCitmaWxlc3lzdGVtLgorVGhlIGRlYnVnIGZlYXR1cmUgbWF5IGFsc28gdmVyeSB1c2VmdWwgZm9yIGtlcm5lbCBhbmQgZHJpdmVyIGRldmVsb3BtZW50LgorCitEZXNpZ246CistLS0tLS0tCitLZXJuZWwgY29tcG9uZW50cyAoZS5nLiBkZXZpY2UgZHJpdmVycykgY2FuIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgYXQgdGhlIGRlYnVnIAorZmVhdHVyZSB3aXRoIHRoZSBmdW5jdGlvbiBjYWxsIGRlYnVnX3JlZ2lzdGVyKCkuIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSAKK2RlYnVnIGxvZyBmb3IgdGhlIGNhbGxlci4gRm9yIGVhY2ggZGVidWcgbG9nIGV4aXN0cyBhIG51bWJlciBvZiBkZWJ1ZyBhcmVhcyAKK3doZXJlIGV4YWN0bHkgb25lIGlzIGFjdGl2ZSBhdCBvbmUgdGltZS4gIEVhY2ggZGVidWcgYXJlYSBjb25zaXN0cyBvZiBjb250aWd1b3VzCitwYWdlcyBpbiBtZW1vcnkuIEluIHRoZSBkZWJ1ZyBhcmVhcyB0aGVyZSBhcmUgc3RvcmVkIGRlYnVnIGVudHJpZXMgKGxvZyByZWNvcmRzKQord2hpY2ggYXJlIHdyaXR0ZW4gYnkgZXZlbnQtIGFuZCBleGNlcHRpb24tY2FsbHMuIAorCitBbiBldmVudC1jYWxsIHdyaXRlcyB0aGUgc3BlY2lmaWVkIGRlYnVnIGVudHJ5IHRvIHRoZSBhY3RpdmUgZGVidWcKK2FyZWEgYW5kIHVwZGF0ZXMgdGhlIGxvZyBwb2ludGVyIGZvciB0aGUgYWN0aXZlIGFyZWEuIElmIHRoZSBlbmQgCitvZiB0aGUgYWN0aXZlIGRlYnVnIGFyZWEgaXMgcmVhY2hlZCwgYSB3cmFwIGFyb3VuZCBpcyBkb25lIChyaW5nIGJ1ZmZlcikgCithbmQgdGhlIG5leHQgZGVidWcgZW50cnkgd2lsbCBiZSB3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFjdGl2ZSAKK2RlYnVnIGFyZWEuCisKK0FuIGV4Y2VwdGlvbi1jYWxsIHdyaXRlcyB0aGUgc3BlY2lmaWVkIGRlYnVnIGVudHJ5IHRvIHRoZSBsb2cgYW5kCitzd2l0Y2hlcyB0byB0aGUgbmV4dCBkZWJ1ZyBhcmVhLiBUaGlzIGlzIGRvbmUgaW4gb3JkZXIgdG8gYmUgc3VyZQordGhhdCB0aGUgcmVjb3JkcyB3aGljaCBkZXNjcmliZSB0aGUgb3JpZ2luIG9mIHRoZSBleGNlcHRpb24gYXJlIG5vdAorb3ZlcndyaXR0ZW4gd2hlbiBhIHdyYXAgYXJvdW5kIGZvciB0aGUgY3VycmVudCBhcmVhIG9jY3Vycy4KKworVGhlIGRlYnVnIGFyZWFzIGl0c2VsdmUgYXJlIGFsc28gb3JkZXJlZCBpbiBmb3JtIG9mIGEgcmluZyBidWZmZXIuIAorV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIHRoZSBsYXN0IGRlYnVnIGFyZWEsIHRoZSBmb2xsb3dpbmcgZGVidWcgCitlbnRyaWVzIGFyZSB0aGVuIHdyaXR0ZW4gYWdhaW4gaW4gdGhlIHZlcnkgZmlyc3QgYXJlYS4KKworVGhlcmUgYXJlIHRocmVlIHZlcnNpb25zIGZvciB0aGUgZXZlbnQtIGFuZCBleGNlcHRpb24tY2FsbHM6IE9uZSBmb3IKK2xvZ2dpbmcgcmF3IGRhdGEsIG9uZSBmb3IgdGV4dCBhbmQgb25lIGZvciBudW1iZXJzLgorCitFYWNoIGRlYnVnIGVudHJ5IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGF0YToKKworLSBUaW1lc3RhbXAKKy0gQ3B1LU51bWJlciBvZiBjYWxsaW5nIHRhc2sKKy0gTGV2ZWwgb2YgZGVidWcgZW50cnkgKDAuLi42KQorLSBSZXR1cm4gQWRkcmVzcyB0byBjYWxsZXIKKy0gRmxhZywgaWYgZW50cnkgaXMgYW4gZXhjZXB0aW9uIG9yIG5vdAorCitUaGUgZGVidWcgbG9ncyBjYW4gYmUgaW5zcGVjdGVkIGluIGEgbGl2ZSBzeXN0ZW0gdGhyb3VnaCBlbnRyaWVzIGluCit0aGUgcHJvYy1maWxlc3lzdGVtLiBVbmRlciB0aGUgcGF0aCAvcHJvYy9zMzkwZGJmIHRoZXJlIGlzIAorYSBkaXJlY3RvcnkgZm9yIGVhY2ggcmVnaXN0ZXJlZCBjb21wb25lbnQsIHdoaWNoIGlzIG5hbWVkIGxpa2UgdGhlCitjb3JyZXNwb25kaW5nIGNvbXBvbmVudC4KKworVGhlIGNvbnRlbnQgb2YgdGhlIGRpcmVjdG9yaWVzIGFyZSBmaWxlcyB3aGljaCByZXByZXNlbnQgZGlmZmVyZW50IHZpZXdzCit0byB0aGUgZGVidWcgbG9nLiBFYWNoIGNvbXBvbmVudCBjYW4gZGVjaWRlIHdoaWNoIHZpZXdzIHNob3VsZCBiZQordXNlZCB0aHJvdWdoIHJlZ2lzdGVyaW5nIHRoZW0gd2l0aCB0aGUgZnVuY3Rpb24gZGVidWdfcmVnaXN0ZXJfdmlldygpLgorUHJlZGVmaW5lZCB2aWV3cyBmb3IgaGV4L2FzY2lpLCBzcHJpbnRmIGFuZCByYXcgYmluYXJ5IGRhdGEgYXJlIHByb3ZpZGVkLgorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkZWZpbmUgb3RoZXIgdmlld3MuIFRoZSBjb250ZW50IG9mCithIHZpZXcgY2FuIGJlIGluc3BlY3RlZCBzaW1wbHkgYnkgcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyBwcm9jIGZpbGUuCisKK0FsbCBkZWJ1ZyBsb2dzIGhhdmUgYW4gYW4gYWN0dWFsIGRlYnVnIGxldmVsIChyYW5nZSBmcm9tIDAgdG8gNikuCitUaGUgZGVmYXVsdCBsZXZlbCBpcyAzLiBFdmVudCBhbmQgRXhjZXB0aW9uIGZ1bmN0aW9ucyBoYXZlIGEgJ2xldmVsJworcGFyYW1ldGVyLiBPbmx5IGRlYnVnIGVudHJpZXMgd2l0aCBhIGxldmVsIHRoYXQgaXMgbG93ZXIgb3IgZXF1YWwKK3RoYW4gdGhlIGFjdHVhbCBsZXZlbCBhcmUgd3JpdHRlbiB0byB0aGUgbG9nLiBUaGlzIG1lYW5zLCB3aGVuCit3cml0aW5nIGV2ZW50cywgaGlnaCBwcmlvcml0eSBsb2cgZW50cmllcyBzaG91bGQgaGF2ZSBhIGxvdyBsZXZlbAordmFsdWUgd2hlcmVhcyBsb3cgcHJpb3JpdHkgZW50cmllcyBzaG91bGQgaGF2ZSBhIGhpZ2ggb25lLgorVGhlIGFjdHVhbCBkZWJ1ZyBsZXZlbCBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSBoZWxwIG9mIHRoZSBwcm9jLWZpbGVzeXN0ZW0gCit0aHJvdWdoIHdyaXRpbmcgYSBudW1iZXIgc3RyaW5nICJ4IiB0byB0aGUgJ2xldmVsJyBwcm9jIGZpbGUgd2hpY2ggaXMKK3Byb3ZpZGVkIGZvciBldmVyeSBkZWJ1ZyBsb2cuIERlYnVnZ2luZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIGNvbXBsZXRlbHkKK2J5IHVzaW5nICItIiBvbiB0aGUgJ2xldmVsJyBwcm9jIGZpbGUuCisKK0V4YW1wbGU6CisKKz4gZWNobyAiLSIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkZWFjdGl2YXRlIHRoZSBkZWJ1ZyBmZWF0dXJlIGdsb2JhbGx5IGZvciBldmVyeQorZGVidWcgbG9nLiBZb3UgY2FuIGNoYW5nZSB0aGUgYmVoYXZpb3IgdXNpbmcgIDIgc3lzY3RsIHBhcmFtZXRlcnMgaW4KKy9wcm9jL3N5cy9zMzkwZGJmOgorVGhlcmUgYXJlIGN1cnJlbnRseSAyIHBvc3NpYmxlIHRyaWdnZXJzLCB3aGljaCBzdG9wIHRoZSAgZGVidWcgZmVhdHVyZQorZ2xvYmFsbHkuIFRoZSBmaXJzdCBwb3NzYmlsaXR5IGlzIHRvIHVzZSB0aGUgImRlYnVnX2FjdGl2ZSIgc3lzY3RsLiBJZgorc2V0IHRvIDEgdGhlIGRlYnVnIGZlYXR1cmUgaXMgcnVubmluZy4gSWYgImRlYnVnX2FjdGl2ZSIgaXMgc2V0IHRvIDAgdGhlCitkZWJ1ZyBmZWF0dXJlIGlzIHR1cm5lZCBvZmYuCitUaGUgc2Vjb25kIHRyaWdnZXIgd2hpY2ggc3RvcHMgdGhlIGRlYnVnIGZlYXR1cmUgaXMgYW4ga2VybmVsIG9vcHMuCitUaGF0IHByZXZlbnRzIHRoZSBkZWJ1ZyBmZWF0dXJlIGZyb20gb3ZlcndyaXRpbmcgZGVidWcgaW5mb3JtYXRpb24gdGhhdAoraGFwcGVuZWQgYmVmb3JlIHRoZSBvb3BzLiBBZnRlciBhbiBvb3BzIHlvdSBjYW4gcmVhY3RpdmF0ZSB0aGUgZGVidWcgZmVhdHVyZQorYnkgcGlwaW5nIDEgdG8gL3Byb2Mvc3lzL3MzOTBkYmYvZGVidWdfYWN0aXZlLiBOZXZlcnRoZWxlc3MsIGl0cyBub3QKK3N1Z2dlc3RlZCB0byB1c2UgYW4gb29wc2VkIGtlcm5lbCBpbiBhbiBwcm9kdWN0aW9uIGVudmlyb25tZW50LgorSWYgeW91IHdhbnQgdG8gZGlzYWxsb3cgdGhlIGRlYWN0aXZhdGlvbiBvZiB0aGUgZGVidWcgZmVhdHVyZSwgeW91IGNhbiB1c2UKK3RoZSAiZGVidWdfc3RvcHBhYmxlIiBzeXNjdGwuIElmIHlvdSBzZXQgImRlYnVnX3N0b3BwYWJsZSIgdG8gMCB0aGUgZGVidWcKK2ZlYXR1cmUgY2Fubm90IGJlIHN0b3BwZWQuIElmIHRoZSBkZWJ1ZyBmZWF0dXJlIGlzIGFscmVhZHkgc3RvcHBlZCwgaXQKK3dpbGwgc3RheSBkZWFjdGl2YXRlZC4KKworS2VybmVsIEludGVyZmFjZXM6CistLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfaW5mb190ICpkZWJ1Z19yZWdpc3RlcihjaGFyICpuYW1lLCBpbnQgcGFnZXNfaW5kZXgsIGludCBucl9hcmVhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9zaXplKTsKKworUGFyYW1ldGVyOiAgICBuYW1lOiAgICAgICAgTmFtZSBvZiBkZWJ1ZyBsb2cgKGUuZy4gdXNlZCBmb3IgcHJvYyBlbnRyeSkgCisgICAgICAgICAgICAgIHBhZ2VzX2luZGV4OiAyXnBhZ2VzX2luZGV4IHBhZ2VzIHdpbGwgYmUgYWxsb2NhdGVkIHBlciBhcmVhCisgICAgICAgICAgICAgIG5yX2FyZWFzOiAgICBudW1iZXIgb2YgZGVidWcgYXJlYXMKKyAgICAgICAgICAgICAgYnVmX3NpemU6ICAgIHNpemUgb2YgZGF0YSBhcmVhIGluIGVhY2ggZGVidWcgZW50cnkKKworUmV0dXJuIFZhbHVlOiBIYW5kbGUgZm9yIGdlbmVyYXRlZCBkZWJ1ZyBhcmVhICAgCisgICAgICAgICAgICAgIE5VTEwgaWYgcmVnaXN0ZXIgZmFpbGVkIAorCitEZXNjcmlwdGlvbjogIEFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgZGVidWcgbG9nICAgICAKKyAgICAgICAgICAgICAgTXVzdCBub3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGRlYnVnX3VucmVnaXN0ZXIgKGRlYnVnX2luZm9fdCAqIGlkKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgIAorCitSZXR1cm4gVmFsdWU6ICBub25lIAorCitEZXNjcmlwdGlvbjogICBmcmVlcyBtZW1vcnkgZm9yIGEgZGVidWcgbG9nICAgICAKKyAgICAgICAgICAgICAgIE11c3Qgbm90IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBkZWJ1Z19zZXRfbGV2ZWwgKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbmV3X2xldmVsKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBuZXdfbGV2ZWw6IG5ldyBkZWJ1ZyBsZXZlbCAKKworUmV0dXJuIFZhbHVlOiAgbm9uZSAKKworRGVzY3JpcHRpb246ICAgU2V0cyBuZXcgYWN0dWFsIGRlYnVnIGxldmVsIGlmIG5ld19sZXZlbCBpcyB2YWxpZC4gCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK3ZvaWQgZGVidWdfc3RvcF9hbGwodm9pZCk7CisKK1BhcmFtZXRlcjogICAgIG5vbmUKKworUmV0dXJuIFZhbHVlOiAgbm9uZQorCitEZXNjcmlwdGlvbjogICBzdG9wcyB0aGUgZGVidWcgZmVhdHVyZSBpZiBzdG9wcGluZyBpcyBhbGxvd2VkLiBDdXJyZW50bHkKKyAgICAgICAgICAgICAgIHVzZWQgaW4gY2FzZSBvZiBhIGtlcm5lbCBvb3BzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnX2VudHJ5X3QqIGRlYnVnX2V2ZW50IChkZWJ1Z19pbmZvX3QqIGlkLCBpbnQgbGV2ZWwsIHZvaWQqIGRhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBwb2ludGVyIHRvIGRhdGEgZm9yIGRlYnVnIGVudHJ5ICAKKyAgICAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgICAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfaW50X2V2ZW50IChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRhdGEpOworZGVidWdfZW50cnlfdCogZGVidWdfbG9uZ19ldmVudChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBpbnRlZ2VyIHZhbHVlIGZvciBkZWJ1ZyBlbnRyeSAgICAgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgICAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfdGV4dF9ldmVudCAoZGVidWdfaW5mb190ICogaWQsIGludCBsZXZlbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogIGRlYnVnIGxldmVsICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRhdGE6ICAgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IGluIGFzY2lpIGZvcm1hdCB0byBhY3RpdmUgZGVidWcgYXJlYSAKKyAgICAgICAgICAgICAgIChpZiBsZXZlbCA8PSBhY3R1YWwgZGVidWcgbGV2ZWwpICAgICAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19zcHJpbnRmX2V2ZW50IChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHN0cmluZywuLi4pOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgCisgICAgICAgICAgICAgICBsZXZlbDogZGVidWcgbGV2ZWwKKyAgICAgICAgICAgICAgIHN0cmluZzogZm9ybWF0IHN0cmluZyBmb3IgZGVidWcgZW50cnkgCisgICAgICAgICAgICAgICAuLi46IHZhcmFyZ3MgdXNlZCBhcyBpbiBzcHJpbnRmKCkKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5CisKK0Rlc2NyaXB0aW9uOiAgIHdyaXRlcyBkZWJ1ZyBlbnRyeSB3aXRoIGZvcm1hdCBzdHJpbmcgYW5kIHZhcmFyZ3MgKGxvbmdzKSB0byAKKyAgICAgICAgICAgICAgIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCAkPD0kIGFjdHVhbCBkZWJ1ZyBsZXZlbCkuIAorICAgICAgICAgICAgICAgZmxvYXRzIGFuZCBsb25nIGxvbmcgZGF0YXR5cGVzIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmFyZ3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19leGNlcHRpb24gKGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgdm9pZCogZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBwb2ludGVyIHRvIGRhdGEgZm9yIGRlYnVnIGVudHJ5ICAKKyAgICAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoIG9mIGRhdGEgaW4gYnl0ZXMgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgYW5kIHN3aXRjaGVzIHRvIG5leHQgZGVidWcgYXJlYSAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfaW50X2V4Y2VwdGlvbiAoZGVidWdfaW5mb190ICogaWQsIGludCBsZXZlbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSk7CitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19sb25nX2V4Y2VwdGlvbihkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogIGRlYnVnIGxldmVsICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRhdGE6ICAgaW50ZWdlciB2YWx1ZSBmb3IgZGVidWcgZW50cnkgICAgICAgICAgIAorCitSZXR1cm4gVmFsdWU6ICBBZGRyZXNzIG9mIHdyaXR0ZW4gZGVidWcgZW50cnkgCisKK0Rlc2NyaXB0aW9uOiAgIHdyaXRlcyBkZWJ1ZyBlbnRyeSB0byBhY3RpdmUgZGVidWcgYXJlYSAoaWYgbGV2ZWwgPD0gYWN0dWFsIAorICAgICAgICAgICAgICAgZGVidWcgbGV2ZWwpIGFuZCBzd2l0Y2hlcyB0byBuZXh0IGRlYnVnIGFyZWEgIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnX2VudHJ5X3QqIGRlYnVnX3RleHRfZXhjZXB0aW9uIChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogIGRlYnVnIGxldmVsICAgICAgICAgICAKKyAgICAgICAgICAgICAgIGRhdGE6ICAgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IGluIGFzY2lpIGZvcm1hdCB0byBhY3RpdmUgZGVidWcgYXJlYSAKKyAgICAgICAgICAgICAgIChpZiBsZXZlbCA8PSBhY3R1YWwgZGVidWcgbGV2ZWwpIGFuZCBzd2l0Y2hlcyB0byBuZXh0IGRlYnVnIAorICAgICAgICAgICAgICAgYXJlYSAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfc3ByaW50Zl9leGNlcHRpb24gKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc3RyaW5nLC4uLik7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICBsZXZlbDogZGVidWcgbGV2ZWwgIAorICAgICAgICAgICAgICAgc3RyaW5nOiBmb3JtYXQgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAgCisgICAgICAgICAgICAgICAuLi46IHZhcmFyZ3MgdXNlZCBhcyBpbiBzcHJpbnRmKCkKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgd2l0aCBmb3JtYXQgc3RyaW5nIGFuZCB2YXJhcmdzIChsb25ncykgdG8gCisgICAgICAgICAgICAgICBhY3RpdmUgZGVidWcgYXJlYSAoaWYgbGV2ZWwgJDw9JCBhY3R1YWwgZGVidWcgbGV2ZWwpIGFuZAorICAgICAgICAgICAgICAgc3dpdGNoZXMgdG8gbmV4dCBkZWJ1ZyBhcmVhLiAKKyAgICAgICAgICAgICAgIGZsb2F0cyBhbmQgbG9uZyBsb25nIGRhdGF0eXBlcyBjYW5ub3QgYmUgdXNlZCBhcyB2YXJhcmdzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW50IGRlYnVnX3JlZ2lzdGVyX3ZpZXcgKGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldyk7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisgICAgICAgICAgICAgICB2aWV3OiAgcG9pbnRlciB0byBkZWJ1ZyB2aWV3IHN0cnVjdCAKKworUmV0dXJuIFZhbHVlOiAgMCAgOiBvayAKKyAgICAgICAgICAgICAgIDwgMDogRXJyb3IgCisKK0Rlc2NyaXB0aW9uOiAgIHJlZ2lzdGVycyBuZXcgZGVidWcgdmlldyBhbmQgY3JlYXRlcyBwcm9jIGRpciBlbnRyeSAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnQgZGVidWdfdW5yZWdpc3Rlcl92aWV3IChkZWJ1Z19pbmZvX3QgKiBpZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcpOyAKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIHZpZXc6ICBwb2ludGVyIHRvIGRlYnVnIHZpZXcgc3RydWN0IAorCitSZXR1cm4gVmFsdWU6ICAwICA6IG9rIAorICAgICAgICAgICAgICAgPCAwOiBFcnJvciAKKworRGVzY3JpcHRpb246ICAgdW5yZWdpc3RlcnMgZGVidWcgdmlldyBhbmQgcmVtb3ZlcyBwcm9jIGRpciBlbnRyeSAKKworCisKK1ByZWRlZmluZWQgdmlld3M6CistLS0tLS0tLS0tLS0tLS0tLQorCitleHRlcm4gc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfaGV4X2FzY2lpX3ZpZXc7CitleHRlcm4gc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfcmF3X3ZpZXc7CitleHRlcm4gc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfc3ByaW50Zl92aWV3OworCitFeGFtcGxlcworLS0tLS0tLS0KKworLyoKKyAqIGhleF9hc2NpaS0gKyByYXctdmlldyBFeGFtcGxlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworc3RhdGljIGRlYnVnX2luZm9fdCogZGVidWdfaW5mbzsKKworc3RhdGljIGludCBpbml0KHZvaWQpCit7CisgICAgLyogcmVnaXN0ZXIgNCBkZWJ1ZyBhcmVhcyB3aXRoIG9uZSBwYWdlIGVhY2ggYW5kIDQgYnl0ZSBkYXRhIGZpZWxkICovCisKKyAgICBkZWJ1Z19pbmZvID0gZGVidWdfcmVnaXN0ZXIgKCJ0ZXN0IiwgMCwgNCwgNCApOworICAgIGRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mbywmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOworICAgIGRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mbywmZGVidWdfcmF3X3ZpZXcpOworCisgICAgZGVidWdfdGV4dF9ldmVudChkZWJ1Z19pbmZvLCA0ICwgIm9uZSAiKTsKKyAgICBkZWJ1Z19pbnRfZXhjZXB0aW9uKGRlYnVnX2luZm8sIDQsIDQ3MTEpOworICAgIGRlYnVnX2V2ZW50KGRlYnVnX2luZm8sIDMsICZkZWJ1Z19pbmZvLCA0KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKHZvaWQpCit7CisgICAgZGVidWdfdW5yZWdpc3RlciAoZGVidWdfaW5mbyk7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoY2xlYW51cCk7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKgorICogc3ByaW50Zi12aWV3IEV4YW1wbGUKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCitzdGF0aWMgZGVidWdfaW5mb190KiBkZWJ1Z19pbmZvOworCitzdGF0aWMgaW50IGluaXQodm9pZCkKK3sKKyAgICAvKiByZWdpc3RlciA0IGRlYnVnIGFyZWFzIHdpdGggb25lIHBhZ2UgZWFjaCBhbmQgZGF0YSBmaWVsZCBmb3IgKi8KKyAgICAvKiBmb3JtYXQgc3RyaW5nIHBvaW50ZXIgKyAyIHZhcmFyZ3MgKD0gMyAqIHNpemVvZihsb25nKSkgICAgICAgKi8KKworICAgIGRlYnVnX2luZm8gPSBkZWJ1Z19yZWdpc3RlciAoInRlc3QiLCAwLCA0LCBzaXplb2YobG9uZykgKiAzKTsKKyAgICBkZWJ1Z19yZWdpc3Rlcl92aWV3KGRlYnVnX2luZm8sJmRlYnVnX3NwcmludGZfdmlldyk7CisKKyAgICBkZWJ1Z19zcHJpbnRmX2V2ZW50KGRlYnVnX2luZm8sIDIgLCAiZmlyc3QgZXZlbnQgaW4gJXM6JWlcbiIsX19GSUxFX18sX19MSU5FX18pOworICAgIGRlYnVnX3NwcmludGZfZXhjZXB0aW9uKGRlYnVnX2luZm8sIDEsICJwb2ludGVyIHRvIGRlYnVnIGluZm86ICVwXG4iLCZkZWJ1Z19pbmZvKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwKHZvaWQpCit7CisgICAgZGVidWdfdW5yZWdpc3RlciAoZGVidWdfaW5mbyk7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoY2xlYW51cCk7CisKKworCitQcm9jRlMgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCitWaWV3cyB0byB0aGUgZGVidWcgbG9ncyBjYW4gYmUgaW52ZXN0aWdhdGVkIHRocm91Z2ggcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyAKK3Byb2MtZmlsZXM6CisKK0V4YW1wbGU6CisKKz4gbHMgL3Byb2MvczM5MGRiZi9kYXNkCitmbHVzaCAgaGV4X2FzY2lpICBsZXZlbCAgICAgIHJhdyAKKz4gY2F0IC9wcm9jL3MzOTBkYmYvZGFzZC9oZXhfYXNjaWkgfCBzb3J0ICsxCiswMCAwMDk3NDczMzI3Mjo2ODAwOTkgMiAtIDAyIDAwMDZhZDdlICAwNyBlYSA0YSA5MCB8IC4uLi4KKzAwIDAwOTc0NzMzMjcyOjY4MjIxMCAyIC0gMDIgMDAwNmFkZTYgIDQ2IDUyIDQ1IDQ1IHwgRlJFRQorMDAgMDA5NzQ3MzMyNzI6NjgyMjEzIDIgLSAwMiAwMDA2YWRmNiAgMDcgZWEgNGEgOTAgfCAuLi4uCiswMCAwMDk3NDczMzI3Mjo2ODIyODEgMSAqIDAyIDAwMDZhYjA4ICA0MSA0YyA0YyA0MyB8IEVYQ1AgCiswMSAwMDk3NDczMzI3Mjo2ODIyODQgMiAtIDAyIDAwMDZhYjE2ICA0NSA0MyA0YiA0NCB8IEVDS0QKKzAxIDAwOTc0NzMzMjcyOjY4MjI4NyAyIC0gMDIgMDAwNmFiMjggIDAwIDAwIDAwIDA0IHwgLi4uLgorMDEgMDA5NzQ3MzMyNzI6NjgyMjg5IDIgLSAwMiAwMDA2YWIzZSAgMDAgMDAgMDAgMjAgfCAuLi4gCiswMSAwMDk3NDczMzI3Mjo2ODIyOTcgMiAtIDAyIDAwMDZhZDdlICAwNyBlYSA0YSA5MCB8IC4uLi4KKzAxIDAwOTc0NzMzMjcyOjY4NDM4NCAyIC0gMDAgMDAwNmFkZTYgIDQ2IDUyIDQ1IDQ1IHwgRlJFRQorMDEgMDA5NzQ3MzMyNzI6Njg0Mzg4IDIgLSAwMCAwMDA2YWRmNiAgMDcgZWEgNGEgOTAgfCAuLi4uCisKK1NlZSBzZWN0aW9uIGFib3V0IHByZWRlZmluZWQgdmlld3MgZm9yIGV4cGxhbmF0aW9uIG9mIHRoZSBhYm92ZSBvdXRwdXQhCisKK0NoYW5naW5nIHRoZSBkZWJ1ZyBsZXZlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4YW1wbGU6CisKKworPiBjYXQgL3Byb2MvczM5MGRiZi9kYXNkL2xldmVsCiszCis+IGVjaG8gIjUiID4gL3Byb2MvczM5MGRiZi9kYXNkL2xldmVsCis+IGNhdCAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwKKzUKKworRmx1c2hpbmcgZGVidWcgYXJlYXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitEZWJ1ZyBhcmVhcyBjYW4gYmUgZmx1c2hlZCB3aXRoIHBpcGluZyB0aGUgbnVtYmVyIG9mIHRoZSBkZXNpcmVkCithcmVhICgwLi4ubikgdG8gdGhlIHByb2MgZmlsZSAiZmx1c2giLiBXaGVuIHVzaW5nICItIiBhbGwgZGVidWcgYXJlYXMKK2FyZSBmbHVzaGVkLgorCitFeGFtcGxlczoKKworMS4gRmx1c2ggZGVidWcgYXJlYSAwOgorPiBlY2hvICIwIiA+IC9wcm9jL3MzOTBkYmYvZGFzZC9mbHVzaCAgCisKKzIuIEZsdXNoIGFsbCBkZWJ1ZyBhcmVhczoKKz4gZWNobyAiLSIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvZmx1c2gKKworU3Rvb3BpbmcgdGhlIGRlYnVnIGZlYXR1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFeGFtcGxlOgorCisxLiBDaGVjayBpZiBzdG9wcGluZyBpcyBhbGxvd2VkCis+IGNhdCAvcHJvYy9zeXMvczM5MGRiZi9kZWJ1Z19zdG9wcGFibGUKKzIuIFN0b3AgZGVidWcgZmVhdHVyZQorPiBlY2hvIDAgPiAvcHJvYy9zeXMvczM5MGRiZi9kZWJ1Z19hY3RpdmUKKworbGNyYXNoIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLQorSXQgaXMgcGxhbm5lZCB0aGF0IHRoZSBkdW1wIGFuYWx5c2lzIHRvb2wgbGNyYXNoIGdldHMgYW4gYWRkaXRpb25hbCBjb21tYW5kCisnczM5MGRiZicgdG8gZGlzcGxheSBhbGwgdGhlIGRlYnVnIGxvZ3MuIFdpdGggdGhpcyB0b29sIGl0IHdpbGwgYmUgcG9zc2libGUgCit0byBpbnZlc3RpZ2F0ZSB0aGUgZGVidWcgbG9ncyBvbiBhIGxpdmUgc3lzdGVtIGFuZCB3aXRoIGEgbWVtb3J5IGR1bXAgYWZ0ZXIgCithIHN5c3RlbSBjcmFzaC4KKworSW52ZXN0aWdhdGluZyByYXcgbWVtb3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uZSBsYXN0IHBvc3NpYmlsaXR5IHRvIGludmVzdGlnYXRlIHRoZSBkZWJ1ZyBsb2dzIGF0IGEgbGl2ZQorc3lzdGVtIGFuZCBhZnRlciBhIHN5c3RlbSBjcmFzaCBpcyB0byBsb29rIGF0IHRoZSByYXcgbWVtb3J5Cit1bmRlciBWTSBvciBhdCB0aGUgU2VydmljZSBFbGVtZW50LgorSXQgaXMgcG9zc2libGUgdG8gZmluZCB0aGUgYW5rZXIgb2YgdGhlIGRlYnVnLWxvZ3MgdGhyb3VnaAordGhlICdkZWJ1Z19hcmVhX2ZpcnN0JyBzeW1ib2wgaW4gdGhlIFN5c3RlbSBtYXAuIFRoZW4gb25lIGhhcwordG8gZm9sbG93IHRoZSBjb3JyZWN0IHBvaW50ZXJzIG9mIHRoZSBkYXRhLXN0cnVjdHVyZXMgZGVmaW5lZAoraW4gZGVidWcuaCBhbmQgZmluZCB0aGUgZGVidWctYXJlYXMgaW4gbWVtb3J5LgorTm9ybWFsbHkgbW9kdWxlcyB3aGljaCB1c2UgdGhlIGRlYnVnIGZlYXR1cmUgd2lsbCBhbHNvIGhhdmUKK2EgZ2xvYmFsIHZhcmlhYmxlIHdpdGggdGhlIHBvaW50ZXIgdG8gdGhlIGRlYnVnLWxvZ3MuIEZvbGxvd2luZwordGhpcyBwb2ludGVyIGl0IHdpbGwgYWxzbyBiZSBwb3NzaWJsZSB0byBmaW5kIHRoZSBkZWJ1ZyBsb2dzIGluCittZW1vcnkuCisKK0ZvciB0aGlzIG1ldGhvZCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgJzE2ICogeCArIDQnIGJ5dGUgKHggPSAwLi5uKQorZm9yIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgZmllbGQgaW4gZGVidWdfcmVnaXN0ZXIoKSBpbgorb3JkZXIgdG8gc2VlIHRoZSBkZWJ1ZyBlbnRyaWVzIHdlbGwgZm9ybWF0dGVkLgorCisKK1ByZWRlZmluZWQgVmlld3MKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHRocmVlIHByZWRlZmluZWQgdmlld3M6IGhleF9hc2NpaSwgcmF3IGFuZCBzcHJpbnRmLiAKK1RoZSBoZXhfYXNjaWkgdmlldyBzaG93cyB0aGUgZGF0YSBmaWVsZCBpbiBoZXggYW5kIGFzY2lpIHJlcHJlc2VudGF0aW9uIAorKGUuZy4gJzQ1IDQzIDRiIDQ0IHwgRUNLRCcpLiAKK1RoZSByYXcgdmlldyByZXR1cm5zIGEgYnl0ZXN0cmVhbSBhcyB0aGUgZGVidWcgYXJlYXMgYXJlIHN0b3JlZCBpbiBtZW1vcnkuCisKK1RoZSBzcHJpbnRmIHZpZXcgZm9ybWF0cyB0aGUgZGVidWcgZW50cmllcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIHNwcmludGYKK2Z1bmN0aW9uIHdvdWxkIGRvLiBUaGUgc3ByaW50ZiBldmVudC9leHBlY3Rpb24gZnVjdGlvbnMgd3JpdGUgdG8gdGhlIAorZGVidWcgZW50cnkgYSBwb2ludGVyIHRvIHRoZSBmb3JtYXQgc3RyaW5nIChzaXplID0gc2l6ZW9mKGxvbmcpKSAKK2FuZCBmb3IgZWFjaCB2YXJhcmcgYSBsb25nIHZhbHVlLiBTbyBlLmcuIGZvciBhIGRlYnVnIGVudHJ5IHdpdGggYSBmb3JtYXQgCitzdHJpbmcgcGx1cyB0d28gdmFyYXJncyBvbmUgd291bGQgbmVlZCB0byBhbGxvY2F0ZSBhICgzICogc2l6ZW9mKGxvbmcpKSAKK2J5dGUgZGF0YSBhcmVhIGluIHRoZSBkZWJ1Z19yZWdpc3RlcigpIGZ1bmN0aW9uLgorCisKK05PVEU6IElmIHVzaW5nIHRoZSBzcHJpbnRmIHZpZXcgZG8gTk9UIHVzZSBvdGhlciBldmVudC9leGNlcHRpb24gZnVuY3Rpb25zCit0aGFuIHRoZSBzcHJpbnRmLWV2ZW50IGFuZCAtZXhjZXB0aW9uIGZ1bmN0aW9ucy4KKworVGhlIGZvcm1hdCBvZiB0aGUgaGV4X2FzY2lpIGFuZCBzcHJpbnRmIHZpZXcgaXMgYXMgZm9sbG93czoKKy0gTnVtYmVyIG9mIGFyZWEKKy0gVGltZXN0YW1wIChmb3JtYXR0ZWQgYXMgc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzIHNpbmNlIDAwOjAwOjAwIENvb3JkaW5hdGVkIAorICBVbml2ZXJzYWwgVGltZSAoVVRDKSwgSmFudWFyeSAxLCAxOTcwKQorLSBsZXZlbCBvZiBkZWJ1ZyBlbnRyeQorLSBFeGNlcHRpb24gZmxhZyAoKiA9IEV4Y2VwdGlvbikKKy0gQ3B1LU51bWJlciBvZiBjYWxsaW5nIHRhc2sKKy0gUmV0dXJuIEFkZHJlc3MgdG8gY2FsbGVyCistIGRhdGEgZmllbGQKKworVGhlIGZvcm1hdCBvZiB0aGUgcmF3IHZpZXcgaXM6CistIEhlYWRlciBhcyBkZXNjcmliZWQgaW4gZGVidWcuaAorLSBkYXRhZmllbGQgCisKK0EgdHlwaWNhbCBsaW5lIG9mIHRoZSBoZXhfYXNjaWkgdmlldyB3aWxsIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nIChmaXJzdCBsaW5lIAoraXMgb25seSBmb3IgZXhwbGFuYXRpb24gYW5kIHdpbGwgbm90IGJlIGRpc3BsYXllZCB3aGVuICdjYXRpbmcnIHRoZSB2aWV3KToKKworYXJlYSAgdGltZSAgICAgICAgICAgbGV2ZWwgZXhjZXB0aW9uIGNwdSBjYWxsZXIgICAgZGF0YSAoaGV4ICsgYXNjaWkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDAgICAgMDA5NjQ0MTk0MDk6NDQwNjkwIDEgLSAgICAgICAgIDAwICA4ODAyM2ZlICAgCisKKworRGVmaW5pbmcgdmlld3MKKy0tLS0tLS0tLS0tLS0tCisKK1ZpZXdzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgJ2RlYnVnX3ZpZXcnIHN0cnVjdHVyZS4gVGhlcmUgYXJlIGRlZmluZWQKK2NhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgcHJvYyBmaWxlczoKKworc3RydWN0IGRlYnVnX3ZpZXcgeworICAgICAgICBjaGFyIG5hbWVbREVCVUdfTUFYX1BST0NGX0xFTl07ICAKKyAgICAgICAgZGVidWdfcHJvbG9nX3Byb2NfdCogcHJvbG9nX3Byb2M7IAorICAgICAgICBkZWJ1Z19oZWFkZXJfcHJvY190KiBoZWFkZXJfcHJvYzsKKyAgICAgICAgZGVidWdfZm9ybWF0X3Byb2NfdCogZm9ybWF0X3Byb2M7CisgICAgICAgIGRlYnVnX2lucHV0X3Byb2NfdCogIGlucHV0X3Byb2M7CisJdm9pZCogICAgICAgICAgICAgICAgcHJpdmF0ZV9kYXRhOworfTsKKword2hlcmUKKwordHlwZWRlZiBpbnQgKGRlYnVnX2hlYWRlcl9wcm9jX3QpIChkZWJ1Z19pbmZvX3QqIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2VudHJ5X3QqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBvdXRfYnVmKTsKKwordHlwZWRlZiBpbnQgKGRlYnVnX2Zvcm1hdF9wcm9jX3QpIChkZWJ1Z19pbmZvX3QqIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywgY2hhciogb3V0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5fYnVmKTsKK3R5cGVkZWYgaW50IChkZWJ1Z19wcm9sb2dfcHJvY190KSAoZGVidWdfaW5mb190KiBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRlYnVnX3ZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9idWYpOwordHlwZWRlZiBpbnQgKGRlYnVnX2lucHV0X3Byb2NfdCkgKGRlYnVnX2luZm9fdCogaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRlYnVnX3ZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUqIGZpbGUsIGNvbnN0IGNoYXIqIHVzZXJfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9idWZfc2l6ZSwgbG9mZl90KiBvZmZzZXQpOworCisKK1RoZSAicHJpdmF0ZV9kYXRhIiBtZW1iZXIgY2FuIGJlIHVzZWQgYXMgcG9pbnRlciB0byB2aWV3IHNwZWNpZmljIGRhdGEuCitJdCBpcyBub3QgdXNlZCBieSB0aGUgZGVidWcgZmVhdHVyZSBpdHNlbGYuCisKK1RoZSBvdXRwdXQgd2hlbiByZWFkaW5nIGEgZGVidWctcHJvYyBmaWxlIGlzIHN0cnVjdHVyZWQgbGlrZSB0aGlzOgorCisicHJvbG9nX3Byb2Mgb3V0cHV0IgorCisiaGVhZGVyX3Byb2Mgb3V0cHV0IDEiICAiZm9ybWF0X3Byb2Mgb3V0cHV0IDEiCisiaGVhZGVyX3Byb2Mgb3V0cHV0IDIiICAiZm9ybWF0X3Byb2Mgb3V0cHV0IDIiCisiaGVhZGVyX3Byb2Mgb3V0cHV0IDMiICAiZm9ybWF0X3Byb2Mgb3V0cHV0IDMiCisuLi4KKworV2hlbiBhIHZpZXcgaXMgcmVhZCBmcm9tIHRoZSBwcm9jIGZzLCB0aGUgRGVidWcgRmVhdHVyZSBjYWxscyB0aGUgCisncHJvbG9nX3Byb2MnIG9uY2UgZm9yIHdyaXRpbmcgdGhlIHByb2xvZy4KK1RoZW4gJ2hlYWRlcl9wcm9jJyBhbmQgJ2Zvcm1hdF9wcm9jJyBhcmUgY2FsbGVkIGZvciBlYWNoIAorZXhpc3RpbmcgZGVidWcgZW50cnkuCisKK1RoZSBpbnB1dF9wcm9jIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBmdW5jdGlvbmFsaXR5IHdoZW4gaXQgaXMgd3JpdHRlbiB0byAKK3RoZSB2aWV3IChlLmcuIGxpa2Ugd2l0aCAnZWNobyAiMCIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwpLgorCitGb3IgaGVhZGVyX3Byb2MgdGhlcmUgY2FuIGJlIHVzZWQgdGhlIGRlZmF1bHQgZnVuY3Rpb24KK2RlYnVnX2RmbHRfaGVhZGVyX2ZuKCkgd2hpY2ggaXMgZGVmaW5lZCBpbiBpbiBkZWJ1Zy5oLgorYW5kIHdoaWNoIHByb2R1Y2VzIHRoZSBzYW1lIGhlYWRlciBvdXRwdXQgYXMgdGhlIHByZWRlZmluZWQgdmlld3MuCitFLmc6CiswMCAwMDk2NDQxOTQwOTo0NDA3NjEgMiAtIDAwIDg4MDIzZWMKKworSW4gb3JkZXIgdG8gc2VlIGhvdyB0byB1c2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBkZWZhdWx0IHZpZXdzIQorCitFeGFtcGxlCisKKyNpbmNsdWRlIDxhc20vZGVidWcuaD4KKworI2RlZmluZSBVTktOT1dOU1RSICJkYXRhOiAlMDh4IgorCitjb25zdCBjaGFyKiBtZXNzYWdlc1tdID0KK3siVGhpcyBlcnJvci4uLi4uLi4uLi4uXG4iLAorICJUaGF0IGVycm9yLi4uLi4uLi4uLi5cbiIsCisgIlByb2JsZW0uLi4uLi4uLi4uLi4uLlxuIiwKKyAiU29tZXRoaW5nIHdlbnQgd3JvbmcuXG4iLAorICJFdmVyeXRoaW5nIG9rLi4uLi4uLi5cbiIsCisgTlVMTAorfTsKKworc3RhdGljIGludCBkZWJ1Z190ZXN0X2Zvcm1hdF9mbigKKyAgIGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywgCisgICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYKKykKK3sKKyAgaW50IGksIHJjID0gMDsKKworICBpZihpZC0+YnVmX3NpemUgPj0gNCkgeworICAgICBpbnQgbXNnX25yID0gKigoaW50Kilpbl9idWYpOworICAgICBpZihtc2dfbnIgPCBzaXplb2YobWVzc2FnZXMpL3NpemVvZihjaGFyKikgLSAxKQorICAgICAgICByYyArPSBzcHJpbnRmKG91dF9idWYsICIlcyIsIG1lc3NhZ2VzW21zZ19ucl0pOwkKKyAgICAgZWxzZQorICAgICAgICByYyArPSBzcHJpbnRmKG91dF9idWYsIFVOS05PV05TVFIsIG1zZ19ucik7CisgIH0KKyBvdXQ6CisgICByZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBkZWJ1Z192aWV3IGRlYnVnX3Rlc3RfdmlldyA9IHsKKyAgIm15dmlldyIsICAgICAgICAgICAgICAgICAvKiBuYW1lIG9mIHZpZXcgKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBubyBwcm9sb2cgKi8KKyAgJmRlYnVnX2RmbHRfaGVhZGVyX2ZuLCAgICAvKiBkZWZhdWx0IGhlYWRlciBmb3IgZWFjaCBlbnRyeSAqLworICAmZGVidWdfdGVzdF9mb3JtYXRfZm4sICAgIC8qIG91ciBvd24gZm9ybWF0IGZ1bmN0aW9uICovCisgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogbm8gaW5wdXQgZnVuY3Rpb24gKi8KKyAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAvKiBubyBwcml2YXRlIGRhdGEgKi8KK307CisKKz09PT09Cit0ZXN0OgorPT09PT0KK2RlYnVnX2luZm9fdCAqZGVidWdfaW5mbzsKKy4uLgorZGVidWdfaW5mbyA9IGRlYnVnX3JlZ2lzdGVyICgidGVzdCIsIDAsIDQsIDQgKSk7CitkZWJ1Z19yZWdpc3Rlcl92aWV3KGRlYnVnX2luZm8sICZkZWJ1Z190ZXN0X3ZpZXcpOworZm9yKGkgPSAwOyBpIDwgMTA7IGkgKyspIGRlYnVnX2ludF9ldmVudChkZWJ1Z19pbmZvLCAxLCBpKTsKKworPiBjYXQgL3Byb2MvczM5MGRiZi90ZXN0L215dmlldworMDAgMDA5NjQ0MTk3MzQ6NjExNDAyIDEgLSAwMCA4ODA0MmNhICAgVGhpcyBlcnJvci4uLi4uLi4uLi4uCiswMCAwMDk2NDQxOTczNDo2MTE0MDUgMSAtIDAwIDg4MDQyY2EgICBUaGF0IGVycm9yLi4uLi4uLi4uLi4KKzAwIDAwOTY0NDE5NzM0OjYxMTQwOCAxIC0gMDAgODgwNDJjYSAgIFByb2JsZW0uLi4uLi4uLi4uLi4uLgorMDAgMDA5NjQ0MTk3MzQ6NjExNDExIDEgLSAwMCA4ODA0MmNhICAgU29tZXRoaW5nIHdlbnQgd3JvbmcuCiswMCAwMDk2NDQxOTczNDo2MTE0MTQgMSAtIDAwIDg4MDQyY2EgICBFdmVyeXRoaW5nIG9rLi4uLi4uLi4KKzAwIDAwOTY0NDE5NzM0OjYxMTQxNyAxIC0gMDAgODgwNDJjYSAgIGRhdGE6IDAwMDAwMDA1CiswMCAwMDk2NDQxOTczNDo2MTE0MTkgMSAtIDAwIDg4MDQyY2EgICBkYXRhOiAwMDAwMDAwNgorMDAgMDA5NjQ0MTk3MzQ6NjExNDIyIDEgLSAwMCA4ODA0MmNhICAgZGF0YTogMDAwMDAwMDcKKzAwIDAwOTY0NDE5NzM0OjYxMTQyNSAxIC0gMDAgODgwNDJjYSAgIGRhdGE6IDAwMDAwMDA4CiswMCAwMDk2NDQxOTczNDo2MTE0MjggMSAtIDAwIDg4MDQyY2EgICBkYXRhOiAwMDAwMDAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZC1jb2RpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1jb2RpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzVlZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1jb2RpbmcudHh0CkBAIC0wLDAgKzEsMTI2IEBACisgICAgIFJlZmVyZW5jZSBmb3IgdmFyaW91cyBzY2hlZHVsZXItcmVsYXRlZCBtZXRob2RzIGluIHRoZSBPKDEpIHNjaGVkdWxlcgorCQlSb2JlcnQgTG92ZSA8cm1sQHRlY2g5Lm5ldD4sIE1vbnRhVmlzdGEgU29mdHdhcmUKKworCitOb3RlIG1vc3Qgb2YgdGhlc2UgbWV0aG9kcyBhcmUgbG9jYWwgdG8ga2VybmVsL3NjaGVkLmMgLSB0aGlzIGlzIGJ5IGRlc2lnbi4KK1RoZSBzY2hlZHVsZXIgaXMgbWVhbnQgdG8gYmUgc2VsZi1jb250YWluZWQgYW5kIGFic3RyYWN0ZWQgYXdheS4gIFRoaXMgZG9jdW1lbnQKK2lzIHByaW1hcmlseSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NoZWR1bGVyLCBub3QgaW50ZXJmYWNpbmcgdG8gaXQuICBTb21lIG9mCit0aGUgZGlzY3Vzc2VkIGludGVyZmFjZXMsIGhvd2V2ZXIsIGFyZSBnZW5lcmFsIHByb2Nlc3Mvc2NoZWR1bGluZyBtZXRob2RzLgorVGhleSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oLgorCisKK01haW4gU2NoZWR1bGluZyBNZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIGxvYWRfYmFsYW5jZShydW5xdWV1ZV90ICp0aGlzX3JxLCBpbnQgaWRsZSkKKwlBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb25lIGNwdSB0byBhbm90aGVyIHRvIGJhbGFuY2UgY3B1IHVzYWdlLAorCWlmIG5lZWRlZC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBleHBsaWNpdGx5IGlmIHRoZSBydW5xdWV1ZXMgYXJlCisJaW5iYWxhbmNlZCBvciBwZXJpb2RpY2FsbHkgYnkgdGhlIHRpbWVyIHRpY2suICBQcmlvciB0byBjYWxsaW5nLAorCXRoZSBjdXJyZW50IHJ1bnF1ZXVlIG11c3QgYmUgbG9ja2VkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCit2b2lkIHNjaGVkdWxlKCkKKwlUaGUgbWFpbiBzY2hlZHVsaW5nIGZ1bmN0aW9uLiAgVXBvbiByZXR1cm4sIHRoZSBoaWdoZXN0IHByaW9yaXR5CisJcHJvY2VzcyB3aWxsIGJlIGFjdGl2ZS4KKworCitMb2NraW5nCistLS0tLS0tCisKK0VhY2ggcnVucXVldWUgaGFzIGl0cyBvd24gbG9jaywgcnEtPmxvY2suICBXaGVuIG11bHRpcGxlIHJ1bnF1ZXVlcyBuZWVkCit0byBiZSBsb2NrZWQsIGxvY2sgYWNxdWlyZXMgbXVzdCBiZSBvcmRlcmVkIGJ5IGFzY2VuZGluZyAmcnVucXVldWUgdmFsdWUuCisKK0Egc3BlY2lmaWMgcnVucXVldWUgaXMgbG9ja2VkIHZpYQorCisJdGFza19ycV9sb2NrKHRhc2tfdCBwaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorCit3aGljaCBkaXNhYmxlcyBwcmVlbXB0aW9uLCBkaXNhYmxlcyBpbnRlcnJ1cHRzLCBhbmQgbG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcworcnVubmluZyBvbi4gIExpa2V3aXNlLAorCisJdGFza19ycV91bmxvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCisKK3VubG9ja3MgdGhlIHJ1bnF1ZXVlIHBpZCBpcyBydW5uaW5nIG9uLCByZXN0b3JlcyBpbnRlcnJ1cHRzIHRvIHRoZWlyIHByZXZpb3VzCitzdGF0ZSwgYW5kIHJlZW5hYmxlcyBwcmVlbXB0aW9uLgorCitUaGUgcm91dGluZXMKKworCWRvdWJsZV9ycV9sb2NrKHJ1bnF1ZXVlX3QgKnJxMSwgcnVucXVldWVfdCAqcnEyKQorCithbmQKKworCWRvdWJsZV9ycV91bmxvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCisKK3NhZmVseSBsb2NrIGFuZCB1bmxvY2ssIHJlc3BlY3RpdmVseSwgdGhlIHR3byBzcGVjaWZpZWQgcnVucXVldWVzLiAgVGhleSBkbworbm90LCBob3dldmVyLCBkaXNhYmxlIGFuZCByZXN0b3JlIGludGVycnVwdHMuICBVc2VycyBhcmUgcmVxdWlyZWQgdG8gZG8gc28KK21hbnVhbGx5IGJlZm9yZSBhbmQgYWZ0ZXIgY2FsbHMuCisKKworVmFsdWVzCistLS0tLS0KKworTUFYX1BSSU8KKwlUaGUgbWF4aW11bSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLCBzdG9yZWQgaW4gdGhlIHRhc2sgYXMgdGFzay0+cHJpby4KKwlMb3dlciBwcmlvcml0aWVzIGFyZSBoaWdoZXIuICBOb3JtYWwgKG5vbi1SVCkgcHJpb3JpdGllcyByYW5nZSBmcm9tCisJTUFYX1JUX1BSSU8gdG8gKE1BWF9QUklPIC0gMSkuCitNQVhfUlRfUFJJTworCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSBvZiB0aGUgc3lzdGVtLiAgVmFsaWQgUlQgcHJpb3JpdGllcworCXJhbmdlIGZyb20gMCB0byAoTUFYX1JUX1BSSU8gLSAxKS4KK01BWF9VU0VSX1JUX1BSSU8KKwlUaGUgbWF4aW11bSByZWFsLXRpbWUgcHJpb3JpdHkgdGhhdCBpcyBleHBvcnRlZCB0byB1c2VyLXNwYWNlLiAgU2hvdWxkCisJYWx3YXlzIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBNQVhfUlRfUFJJTy4gIFNldHRpbmcgaXQgbGVzcyBhbGxvd3MKKwlrZXJuZWwgdGhyZWFkcyB0byBoYXZlIGhpZ2hlciBwcmlvcml0aWVzIHRoYW4gYW55IHVzZXItc3BhY2UgdGFzay4KK01JTl9USU1FU0xJQ0UKK01BWF9USU1FU0xJQ0UKKwlSZXNwZWN0aXZlbHksIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHRpbWVzbGljZXMgKHF1YW50YSkgb2YgYSBwcm9jZXNzLgorCitEYXRhCistLS0tCisKK3N0cnVjdCBydW5xdWV1ZQorCVRoZSBtYWluIHBlci1DUFUgcnVucXVldWUgZGF0YSBzdHJ1Y3R1cmUuCitzdHJ1Y3QgdGFza19zdHJ1Y3QKKwlUaGUgbWFpbiBwZXItcHJvY2VzcyBkYXRhIHN0cnVjdHVyZS4KKworCitHZW5lcmFsIE1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLQorCitjcHVfcnEoY3B1KQorCVJldHVybnMgdGhlIHJ1bnF1ZXVlIG9mIHRoZSBzcGVjaWZpZWQgY3B1LgordGhpc19ycSgpCisJUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIGN1cnJlbnQgY3B1LgordGFza19ycShwaWQpCisJUmV0dXJucyB0aGUgcnVucXVldWUgd2hpY2ggaG9sZHMgdGhlIHNwZWNpZmllZCBwaWQuCitjcHVfY3VycihjcHUpCisJUmV0dXJucyB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgZ2l2ZW4gY3B1LgorcnRfdGFzayhwaWQpCisJUmV0dXJucyB0cnVlIGlmIHBpZCBpcyByZWFsLXRpbWUsIGZhbHNlIGlmIG5vdC4KKworCitQcm9jZXNzIENvbnRyb2wgTWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBzZXRfdXNlcl9uaWNlKHRhc2tfdCAqcCwgbG9uZyBuaWNlKQorCVNldHMgdGhlICJuaWNlIiB2YWx1ZSBvZiB0YXNrIHAgdG8gdGhlIGdpdmVuIHZhbHVlLgoraW50IHNldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCisJU2V0cyB0aGUgc2NoZWR1bGluZyBwb2xpY3kgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBnaXZlbiBwaWQuCitpbnQgc2V0X2NwdXNfYWxsb3dlZCh0YXNrX3QgKnAsIHVuc2lnbmVkIGxvbmcgbmV3X21hc2spCisJU2V0cyBhIGdpdmVuIHRhc2sncyBDUFUgYWZmaW5pdHkgYW5kIG1pZ3JhdGVzIGl0IHRvIGEgcHJvcGVyIGNwdS4KKwlDYWxsZXJzIG11c3QgaGF2ZSBhIHZhbGlkIHJlZmVyZW5jZSB0byB0aGUgdGFzayBhbmQgYXNzdXJlIHRoZQorCXRhc2sgbm90IGV4aXQgcHJlbWF0dXJlbHkuICBObyBsb2NrcyBjYW4gYmUgaGVsZCBkdXJpbmcgdGhlIGNhbGwuCitzZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQorCVNldHMgdGhlIGdpdmVuIHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCitzZXRfY3VycmVudF9zdGF0ZShzdGF0ZV92YWx1ZSkKKwlTZXRzIHRoZSBjdXJyZW50IHRhc2sncyBzdGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuCit2b2lkIHNldF90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBnaXZlbiB0YXNrLgordm9pZCBjbGVhcl90c2tfbmVlZF9yZXNjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorCUNsZWFycyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCit2b2lkIHNldF9uZWVkX3Jlc2NoZWQoKQorCVNldHMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCit2b2lkIGNsZWFyX25lZWRfcmVzY2hlZCgpCisJQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgY3VycmVudCB0YXNrLgoraW50IG5lZWRfcmVzY2hlZCgpCisJUmV0dXJucyB0cnVlIGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQgaW4gdGhlIGN1cnJlbnQgdGFzaywgZmFsc2UKKwlvdGhlcndpc2UuCit5aWVsZCgpCisJUGxhY2UgdGhlIGN1cnJlbnQgcHJvY2VzcyBhdCB0aGUgZW5kIG9mIHRoZSBydW5xdWV1ZSBhbmQgY2FsbCBzY2hlZHVsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWQtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtZGVzaWduLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA0ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZC1kZXNpZ24udHh0CkBAIC0wLDAgKzEsMTY1IEBACisJCSAgIEdvYWxzLCBEZXNpZ24gYW5kIEltcGxlbWVudGF0aW9uIG9mIHRoZQorCQkgICAgICBuZXcgdWx0cmEtc2NhbGFibGUgTygxKSBzY2hlZHVsZXIKKworCisgIFRoaXMgaXMgYW4gZWRpdGVkIHZlcnNpb24gb2YgYW4gZW1haWwgSW5nbyBNb2xuYXIgc2VudCB0bworICBsa21sIG9uIDQgSmFuIDIwMDIuICBJdCBkZXNjcmliZXMgdGhlIGdvYWxzLCBkZXNpZ24sIGFuZAorICBpbXBsZW1lbnRhdGlvbiBvZiBJbmdvJ3MgbmV3IHVsdHJhLXNjYWxhYmxlIE8oMSkgc2NoZWR1bGVyLgorICBMYXN0IFVwZGF0ZWQ6IDE4IEFwcmlsIDIwMDIuCisKKworR29hbAorPT09PQorCitUaGUgbWFpbiBnb2FsIG9mIHRoZSBuZXcgc2NoZWR1bGVyIGlzIHRvIGtlZXAgYWxsIHRoZSBnb29kIHRoaW5ncyB3ZSBrbm93CithbmQgbG92ZSBhYm91dCB0aGUgY3VycmVudCBMaW51eCBzY2hlZHVsZXI6CisKKyAtIGdvb2QgaW50ZXJhY3RpdmUgcGVyZm9ybWFuY2UgZXZlbiBkdXJpbmcgaGlnaCBsb2FkOiBpZiB0aGUgdXNlcgorICAgdHlwZXMgb3IgY2xpY2tzIHRoZW4gdGhlIHN5c3RlbSBtdXN0IHJlYWN0IGluc3RhbnRseSBhbmQgbXVzdCBleGVjdXRlCisgICB0aGUgdXNlciB0YXNrcyBzbW9vdGhseSwgZXZlbiBkdXJpbmcgY29uc2lkZXJhYmxlIGJhY2tncm91bmQgbG9hZC4KKworIC0gZ29vZCBzY2hlZHVsaW5nL3dha2V1cCBwZXJmb3JtYW5jZSB3aXRoIDEtMiBydW5uYWJsZSBwcm9jZXNzZXMuCisKKyAtIGZhaXJuZXNzOiBubyBwcm9jZXNzIHNob3VsZCBzdGF5IHdpdGhvdXQgYW55IHRpbWVzbGljZSBmb3IgYW55CisgICB1bnJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuIE5vIHByb2Nlc3Mgc2hvdWxkIGdldCBhbiB1bmp1c3RseSBoaWdoCisgICBhbW91bnQgb2YgQ1BVIHRpbWUuCisKKyAtIHByaW9yaXRpZXM6IGxlc3MgaW1wb3J0YW50IHRhc2tzIGNhbiBiZSBzdGFydGVkIHdpdGggbG93ZXIgcHJpb3JpdHksCisgICBtb3JlIGltcG9ydGFudCB0YXNrcyB3aXRoIGhpZ2hlciBwcmlvcml0eS4KKworIC0gU01QIGVmZmljaWVuY3k6IG5vIENQVSBzaG91bGQgc3RheSBpZGxlIGlmIHRoZXJlIGlzIHdvcmsgdG8gZG8uCisKKyAtIFNNUCBhZmZpbml0eTogcHJvY2Vzc2VzIHdoaWNoIHJ1biBvbiBvbmUgQ1BVIHNob3VsZCBzdGF5IGFmZmluZSB0bworICAgdGhhdCBDUFUuIFByb2Nlc3NlcyBzaG91bGQgbm90IGJvdW5jZSBiZXR3ZWVuIENQVXMgdG9vIGZyZXF1ZW50bHkuCisKKyAtIHBsdXMgYWRkaXRpb25hbCBzY2hlZHVsZXIgZmVhdHVyZXM6IFJUIHNjaGVkdWxpbmcsIENQVSBiaW5kaW5nLgorCithbmQgdGhlIGdvYWwgaXMgYWxzbyB0byBhZGQgYSBmZXcgbmV3IHRoaW5nczoKKworIC0gZnVsbHkgTygxKSBzY2hlZHVsaW5nLiBBcmUgeW91IHRpcmVkIG9mIHRoZSByZWNhbGN1bGF0aW9uIGxvb3AKKyAgIGJsb3dpbmcgdGhlIEwxIGNhY2hlIGF3YXkgZXZlcnkgbm93IGFuZCB0aGVuPyBEbyB5b3UgdGhpbmsgdGhlIGdvb2RuZXNzCisgICBsb29wIGlzIHRha2luZyBhIGJpdCB0b28gbG9uZyB0byBmaW5pc2ggaWYgdGhlcmUgYXJlIGxvdHMgb2YgcnVubmFibGUKKyAgIHByb2Nlc3Nlcz8gVGhpcyBuZXcgc2NoZWR1bGVyIHRha2VzIG5vIHByaXNvbmVyczogd2FrZXVwKCksIHNjaGVkdWxlKCksCisgICB0aGUgdGltZXIgaW50ZXJydXB0IGFyZSBhbGwgTygxKSBhbGdvcml0aG1zLiBUaGVyZSBpcyBubyByZWNhbGN1bGF0aW9uCisgICBsb29wLiBUaGVyZSBpcyBubyBnb29kbmVzcyBsb29wIGVpdGhlci4KKworIC0gJ3BlcmZlY3QnIFNNUCBzY2FsYWJpbGl0eS4gV2l0aCB0aGUgbmV3IHNjaGVkdWxlciB0aGVyZSBpcyBubyAnYmlnJworICAgcnVucXVldWVfbG9jayBhbnltb3JlIC0gaXQncyBhbGwgcGVyLUNQVSBydW5xdWV1ZXMgYW5kIGxvY2tzIC0gdHdvCisgICB0YXNrcyBvbiB0d28gc2VwYXJhdGUgQ1BVcyBjYW4gd2FrZSB1cCwgc2NoZWR1bGUgYW5kIGNvbnRleHQtc3dpdGNoCisgICBjb21wbGV0ZWx5IGluIHBhcmFsbGVsLCB3aXRob3V0IGFueSBpbnRlcmxvY2tpbmcuIEFsbAorICAgc2NoZWR1bGluZy1yZWxldmFudCBkYXRhIGlzIHN0cnVjdHVyZWQgZm9yIG1heGltdW0gc2NhbGFiaWxpdHkuCisKKyAtIGJldHRlciBTTVAgYWZmaW5pdHkuIFRoZSBvbGQgc2NoZWR1bGVyIGhhcyBhIHBhcnRpY3VsYXIgd2Vha25lc3MgdGhhdAorICAgY2F1c2VzIHRoZSByYW5kb20gYm91bmNpbmcgb2YgdGFza3MgYmV0d2VlbiBDUFVzIGlmL3doZW4gaGlnaGVyCisgICBwcmlvcml0eS9pbnRlcmFjdGl2ZSB0YXNrcywgdGhpcyB3YXMgb2JzZXJ2ZWQgYW5kIHJlcG9ydGVkIGJ5IG1hbnkKKyAgIHBlb3BsZS4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSB0aW1lc2xpY2UgcmVjYWxjdWxhdGlvbiBsb29wIGZpcnN0IG5lZWRzCisgICBldmVyeSBjdXJyZW50bHkgcnVubmluZyB0YXNrIHRvIGNvbnN1bWUgaXRzIHRpbWVzbGljZS4gQnV0IHdoZW4gdGhpcworICAgaGFwcGVucyBvbiBlZy4gYW4gOC13YXkgc3lzdGVtLCB0aGVuIHRoaXMgcHJvcGVydHkgc3RhcnZlcyBhbgorICAgaW5jcmVhc2luZyBudW1iZXIgb2YgQ1BVcyBmcm9tIGV4ZWN1dGluZyBhbnkgcHJvY2Vzcy4gT25jZSB0aGUgbGFzdAorICAgdGFzayB0aGF0IGhhcyBhIHRpbWVzbGljZSBsZWZ0IGhhcyBmaW5pc2hlZCB1c2luZyB1cCB0aGF0IHRpbWVzbGljZSwKKyAgIHRoZSByZWNhbGN1bGF0aW9uIGxvb3AgaXMgdHJpZ2dlcmVkIGFuZCBvdGhlciBDUFVzIGNhbiBzdGFydCBleGVjdXRpbmcKKyAgIHRhc2tzIGFnYWluIC0gYWZ0ZXIgaGF2aW5nIGlkbGVkIGFyb3VuZCBmb3IgYSBudW1iZXIgb2YgdGltZXIgdGlja3MuCisgICBUaGUgbW9yZSBDUFVzLCB0aGUgd29yc2UgdGhpcyBlZmZlY3QuCisKKyAgIEZ1cnRoZXJtb3JlLCB0aGlzIHNhbWUgZWZmZWN0IGNhdXNlcyB0aGUgYm91bmNpbmcgZWZmZWN0IGFzIHdlbGw6CisgICB3aGVuZXZlciB0aGVyZSBpcyBzdWNoIGEgJ3RpbWVzbGljZSBzcXVlZXplJyBvZiB0aGUgZ2xvYmFsIHJ1bnF1ZXVlLAorICAgaWRsZSBwcm9jZXNzb3JzIHN0YXJ0IGV4ZWN1dGluZyB0YXNrcyB3aGljaCBhcmUgbm90IGFmZmluZSB0byB0aGF0IENQVS4KKyAgIChiZWNhdXNlIHRoZSBhZmZpbmUgdGFza3MgaGF2ZSBmaW5pc2hlZCBvZmYgdGhlaXIgdGltZXNsaWNlcyBhbHJlYWR5LikKKworICAgVGhlIG5ldyBzY2hlZHVsZXIgc29sdmVzIHRoaXMgcHJvYmxlbSBieSBkaXN0cmlidXRpbmcgdGltZXNsaWNlcyBvbiBhCisgICBwZXItQ1BVIGJhc2lzLCB3aXRob3V0IGhhdmluZyBhbnkgZ2xvYmFsIHN5bmNocm9uaXphdGlvbiBvcgorICAgcmVjYWxjdWxhdGlvbi4KKworIC0gYmF0Y2ggc2NoZWR1bGluZy4gQSBzaWduaWZpY2FudCBwcm9wb3J0aW9uIG9mIGNvbXB1dGluZy1pbnRlbnNpdmUgdGFza3MKKyAgIGJlbmVmaXQgZnJvbSBiYXRjaC1zY2hlZHVsaW5nLCB3aGVyZSB0aW1lc2xpY2VzIGFyZSBsb25nIGFuZCBwcm9jZXNzZXMKKyAgIGFyZSByb3VuZHJvYmluIHNjaGVkdWxlZC4gVGhlIG5ldyBzY2hlZHVsZXIgZG9lcyBzdWNoIGJhdGNoLXNjaGVkdWxpbmcKKyAgIG9mIHRoZSBsb3dlc3QgcHJpb3JpdHkgdGFza3MgLSBzbyBuaWNlICsxOSBqb2JzIHdpbGwgZ2V0CisgICAnYmF0Y2gtc2NoZWR1bGVkJyBhdXRvbWF0aWNhbGx5LiBXaXRoIHRoaXMgc2NoZWR1bGVyLCBuaWNlICsxOSBqb2JzIGFyZQorICAgaW4gZXNzZW5jZSBTQ0hFRF9JRExFLCBmcm9tIGFuIGludGVyYWN0aXZlbmVzcyBwb2ludCBvZiB2aWV3LgorCisgLSBoYW5kbGUgZXh0cmVtZSBsb2FkcyBtb3JlIHNtb290aGx5LCB3aXRob3V0IGJyZWFrZG93biBhbmQgc2NoZWR1bGluZworICAgc3Rvcm1zLgorCisgLSBPKDEpIFJUIHNjaGVkdWxpbmcuIEZvciB0aG9zZSBSVCBmb2xrcyB3aG8gYXJlIHBhcmFub2lkIGFib3V0IHRoZQorICAgTyhucl9ydW5uaW5nKSBwcm9wZXJ0eSBvZiB0aGUgZ29vZG5lc3MgbG9vcCBhbmQgdGhlIHJlY2FsY3VsYXRpb24gbG9vcC4KKworIC0gcnVuIGZvcmsoKWVkIGNoaWxkcmVuIGJlZm9yZSB0aGUgcGFyZW50LiBBbmRyZWEgaGFzIHBvaW50ZWQgb3V0IHRoZQorICAgYWR2YW50YWdlcyBvZiB0aGlzIGEgZmV3IG1vbnRocyBhZ28sIGJ1dCBwYXRjaGVzIGZvciB0aGlzIGZlYXR1cmUKKyAgIGRvIG5vdCB3b3JrIHdpdGggdGhlIG9sZCBzY2hlZHVsZXIgYXMgd2VsbCBhcyB0aGV5IHNob3VsZCwKKyAgIGJlY2F1c2UgaWRsZSBwcm9jZXNzZXMgb2Z0ZW4gc3RlYWwgdGhlIG5ldyBjaGlsZCBiZWZvcmUgdGhlIGZvcmsoKWluZworICAgQ1BVIGdldHMgdG8gZXhlY3V0ZSBpdC4KKworCitEZXNpZ24KKz09PT09PQorCit0aGUgY29yZSBvZiB0aGUgbmV3IHNjaGVkdWxlciBhcmUgdGhlIGZvbGxvd2luZyBtZWNoYW5pem1zOgorCisgLSAqdHdvKiwgcHJpb3JpdHktb3JkZXJlZCAncHJpb3JpdHkgYXJyYXlzJyBwZXIgQ1BVLiBUaGVyZSBpcyBhbiAnYWN0aXZlJworICAgYXJyYXkgYW5kIGFuICdleHBpcmVkJyBhcnJheS4gVGhlIGFjdGl2ZSBhcnJheSBjb250YWlucyBhbGwgdGFza3MgdGhhdAorICAgYXJlIGFmZmluZSB0byB0aGlzIENQVSBhbmQgaGF2ZSB0aW1lc2xpY2VzIGxlZnQuIFRoZSBleHBpcmVkIGFycmF5CisgICBjb250YWlucyBhbGwgdGFza3Mgd2hpY2ggaGF2ZSB1c2VkIHVwIHRoZWlyIHRpbWVzbGljZXMgLSBidXQgdGhpcyBhcnJheQorICAgaXMga2VwdCBzb3J0ZWQgYXMgd2VsbC4gVGhlIGFjdGl2ZSBhbmQgZXhwaXJlZCBhcnJheSBpcyBub3QgYWNjZXNzZWQKKyAgIGRpcmVjdGx5LCBpdCdzIGFjY2Vzc2VkIHRocm91Z2ggdHdvIHBvaW50ZXJzIGluIHRoZSBwZXItQ1BVIHJ1bnF1ZXVlCisgICBzdHJ1Y3R1cmUuIElmIGFsbCBhY3RpdmUgdGFza3MgYXJlIHVzZWQgdXAgdGhlbiB3ZSAnc3dpdGNoJyB0aGUgdHdvCisgICBwb2ludGVycyBhbmQgZnJvbSBub3cgb24gdGhlIHJlYWR5LXRvLWdvIChmb3JtZXItKSBleHBpcmVkIGFycmF5IGlzIHRoZQorICAgYWN0aXZlIGFycmF5IC0gYW5kIHRoZSBlbXB0eSBhY3RpdmUgYXJyYXkgc2VydmVzIGFzIHRoZSBuZXcgY29sbGVjdG9yCisgICBmb3IgZXhwaXJlZCB0YXNrcy4KKworIC0gdGhlcmUgaXMgYSA2NC1iaXQgYml0bWFwIGNhY2hlIGZvciBhcnJheSBpbmRpY2VzLiBGaW5kaW5nIHRoZSBoaWdoZXN0CisgICBwcmlvcml0eSB0YXNrIGlzIHRodXMgYSBtYXR0ZXIgb2YgdHdvIHg4NiBCU0ZMIGJpdC1zZWFyY2ggaW5zdHJ1Y3Rpb25zLgorCit0aGUgc3BsaXQtYXJyYXkgc29sdXRpb24gZW5hYmxlcyB1cyB0byBoYXZlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYWN0aXZlCithbmQgZXhwaXJlZCB0YXNrcywgYW5kIHRoZSByZWNhbGN1bGF0aW9uIG9mIHRpbWVzbGljZXMgY2FuIGJlIGRvbmUKK2ltbWVkaWF0ZWx5IHdoZW4gdGhlIHRpbWVzbGljZSBleHBpcmVzLiBCZWNhdXNlIHRoZSBhcnJheXMgYXJlIGFsd2F5cworYWNjZXNzIHRocm91Z2ggdGhlIHBvaW50ZXJzIGluIHRoZSBydW5xdWV1ZSwgc3dpdGNoaW5nIHRoZSB0d28gYXJyYXlzIGNhbgorYmUgZG9uZSB2ZXJ5IHF1aWNrbHkuCisKK3RoaXMgaXMgYSBoeWJyaWRlIHByaW9yaXR5LWxpc3QgYXBwcm9hY2ggY291cGxlZCB3aXRoIHJvdW5kcm9iaW4KK3NjaGVkdWxpbmcgYW5kIHRoZSBhcnJheS1zd2l0Y2ggbWV0aG9kIG9mIGRpc3RyaWJ1dGluZyB0aW1lc2xpY2VzLgorCisgLSB0aGVyZSBpcyBhIHBlci10YXNrICdsb2FkIGVzdGltYXRvcicuCisKK29uZSBvZiB0aGUgdG91Z2hlc3QgdGhpbmdzIHRvIGdldCByaWdodCBpcyBnb29kIGludGVyYWN0aXZlIGZlZWwgZHVyaW5nCitoZWF2eSBzeXN0ZW0gbG9hZC4gV2hpbGUgcGxheWluZyB3aXRoIHZhcmlvdXMgc2NoZWR1bGVyIHZhcmlhbnRzIGkgZm91bmQKK3RoYXQgdGhlIGJlc3QgaW50ZXJhY3RpdmUgZmVlbCBpcyBhY2hpZXZlZCBub3QgYnkgJ2Jvb3N0aW5nJyBpbnRlcmFjdGl2ZQordGFza3MsIGJ1dCBieSAncHVuaXNoaW5nJyB0YXNrcyB0aGF0IHdhbnQgdG8gdXNlIG1vcmUgQ1BVIHRpbWUgdGhhbiB0aGVyZQoraXMgYXZhaWxhYmxlLiBUaGlzIG1ldGhvZCBpcyBhbHNvIG11Y2ggZWFzaWVyIHRvIGRvIGluIGFuIE8oMSkgZmFzaGlvbi4KKwordG8gZXN0YWJsaXNoIHRoZSBhY3R1YWwgJ2xvYWQnIHRoZSB0YXNrIGNvbnRyaWJ1dGVzIHRvIHRoZSBzeXN0ZW0sIGEKK2NvbXBsZXgtbG9va2luZyBidXQgcHJldHR5IGFjY3VyYXRlIG1ldGhvZCBpcyB1c2VkOiB0aGVyZSBpcyBhIDQtZW50cnkKKydoaXN0b3J5JyByaW5nYnVmZmVyIG9mIHRoZSB0YXNrJ3MgYWN0aXZpdGllcyBkdXJpbmcgdGhlIGxhc3QgNCBzZWNvbmRzLgorVGhpcyByaW5nYnVmZmVyIGlzIG9wZXJhdGVkIHdpdGhvdXQgbXVjaCBvdmVyaGVhZC4gVGhlIGVudHJpZXMgdGVsbCB0aGUKK3NjaGVkdWxlciBhIHByZXR0eSBhY2N1cmF0ZSBsb2FkLWhpc3Rvcnkgb2YgdGhlIHRhc2s6IGhhcyBpdCB1c2VkIHVwIG1vcmUKK0NQVSB0aW1lIG9yIGxlc3MgZHVyaW5nIHRoZSBwYXN0IE4gc2Vjb25kcy4gW3RoZSBzaXplICc0JyBhbmQgdGhlIGludGVydmFsCitvZiA0eCAxIHNlY29uZHMgd2FzIGZvdW5kIGJ5IGxvdHMgb2YgZXhwZXJpbWVudGF0aW9uIC0gdGhpcyBwYXJ0IGlzCitmbGV4aWJsZSBhbmQgY2FuIGJlIGNoYW5nZWQgaW4gYm90aCBkaXJlY3Rpb25zLl0KKwordGhlIHBlbmFsdHkgYSB0YXNrIGdldHMgZm9yIGdlbmVyYXRpbmcgbW9yZSBsb2FkIHRoYW4gdGhlIENQVSBjYW4gaGFuZGxlCitpcyBhIHByaW9yaXR5IGRlY3JlYXNlIC0gdGhlcmUgaXMgYSBtYXhpbXVtIGFtb3VudCB0byB0aGlzIHBlbmFsdHkKK3JlbGF0aXZlIHRvIHRoZWlyIHN0YXRpYyBwcmlvcml0eSwgc28gZXZlbiBmdWxseSBDUFUtYm91bmQgdGFza3Mgd2lsbAorb2JzZXJ2ZSBlYWNoIG90aGVyJ3MgcHJpb3JpdGllcywgYW5kIHdpbGwgc2hhcmUgdGhlIENQVSBhY2NvcmRpbmdseS4KKwordGhlIFNNUCBsb2FkLWJhbGFuY2VyIGNhbiBiZSBleHRlbmRlZC9zd2l0Y2hlZCB3aXRoIGFkZGl0aW9uYWwgcGFyYWxsZWwKK2NvbXB1dGluZyBhbmQgY2FjaGUgaGllcmFyY2h5IGNvbmNlcHRzOiBOVU1BIHNjaGVkdWxpbmcsIG11bHRpLWNvcmUgQ1BVcworY2FuIGJlIHN1cHBvcnRlZCBlYXNpbHkgYnkgY2hhbmdpbmcgdGhlIGxvYWQtYmFsYW5jZXIuIFJpZ2h0IG5vdyBpdCdzCit0dW5lZCBmb3IgbXkgU01QIHN5c3RlbXMuCisKK2kgc2tpcHBlZCB0aGUgcHJldi0+bW0gPT0gbmV4dC0+bW0gYWR2YW50YWdlIC0gbm8gd29ya2xvYWQgaSBrbm93IG9mIHNob3dzCithbnkgc2Vuc2l0aXZpdHkgdG8gdGhpcy4gSXQgY2FuIGJlIGFkZGVkIGJhY2sgYnkgc2FjcmlmaWNpbmcgTygxKQorc2NoZWR1bGUoKSBbdGhlIGN1cnJlbnQgYW5kIG9uZS1sb3dlciBwcmlvcml0eSBsaXN0IGNhbiBiZSBzZWFyY2hlZCBmb3IgYQordGhhdC0+bW0gPT0gY3VycmVudC0+bW0gY29uZGl0aW9uXSwgYnV0IGNvc3RzIGEgZmFpciBudW1iZXIgb2YgY3ljbGVzCitkdXJpbmcgYSBudW1iZXIgb2YgaW1wb3J0YW50IHdvcmtsb2Fkcywgc28gaSB3YW50ZWQgdG8gYXZvaWQgdGhpcyBhcyBtdWNoCithcyBwb3NzaWJsZS4KKworLSB0aGUgU01QIGlkbGUtdGFzayBzdGFydHVwIGNvZGUgd2FzIHN0aWxsIHJhY3kgYW5kIHRoZSBuZXcgc2NoZWR1bGVyCit0cmlnZ2VyZWQgdGhpcy4gU28gaSBzdHJlYW1saW5lZCB0aGUgaWRsZS1zZXR1cCBjb2RlIGEgYml0LiBXZSBkbyBub3QgY2FsbAoraW50byBzY2hlZHVsZSgpIGJlZm9yZSBhbGwgcHJvY2Vzc29ycyBoYXZlIHN0YXJ0ZWQgdXAgZnVsbHkgYW5kIGFsbCBpZGxlCit0aHJlYWRzIGFyZSBpbiBwbGFjZS4KKworLSB0aGUgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBudW1iZXIgb2YgYXNwZWN0cyBvZiBzY2hlZC5jIC0gbW92ZXMgY29kZQoraW50byBvdGhlciBhcmVhcyBvZiB0aGUga2VybmVsIHdoZXJlIGl0J3MgYXBwcm9wcmlhdGUsIGFuZCBzaW1wbGlmaWVzCitjZXJ0YWluIGNvZGUgcGF0aHMgYW5kIGRhdGEgY29uc3RydWN0cy4gQXMgYSByZXN1bHQsIHRoZSBuZXcgc2NoZWR1bGVyJ3MKK2NvZGUgaXMgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lLgorCisJSW5nbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZC1kb21haW5zLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtZG9tYWlucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllOTkwYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWQtZG9tYWlucy50eHQKQEAgLTAsMCArMSw3MCBAQAorRWFjaCBDUFUgaGFzIGEgImJhc2UiIHNjaGVkdWxpbmcgZG9tYWluIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKS4gVGhlc2UgYXJlCithY2Nlc3NlZCB2aWEgY3B1X3NjaGVkX2RvbWFpbihpKSBhbmQgdGhpc19zY2hlZF9kb21haW4oKSBtYWNyb3MuIFRoZSBkb21haW4KK2hpZXJhcmNoeSBpcyBidWlsdCBmcm9tIHRoZXNlIGJhc2UgZG9tYWlucyB2aWEgdGhlIC0+cGFyZW50IHBvaW50ZXIuIC0+cGFyZW50CitNVVNUIGJlIE5VTEwgdGVybWluYXRlZCwgYW5kIGRvbWFpbiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBwZXItQ1BVIGFzIHRoZXkKK2FyZSBsb2NrbGVzc2x5IHVwZGF0ZWQuCisKK0VhY2ggc2NoZWR1bGluZyBkb21haW4gc3BhbnMgYSBudW1iZXIgb2YgQ1BVcyAoc3RvcmVkIGluIHRoZSAtPnNwYW4gZmllbGQpLgorQSBkb21haW4ncyBzcGFuIE1VU1QgYmUgYSBzdXBlcnNldCBvZiBpdCBjaGlsZCdzIHNwYW4gKHRoaXMgcmVzdHJpY3Rpb24gY291bGQKK2JlIHJlbGF4ZWQgaWYgdGhlIG5lZWQgYXJpc2VzKSwgYW5kIGEgYmFzZSBkb21haW4gZm9yIENQVSBpIE1VU1Qgc3BhbiBhdCBsZWFzdAoraS4gVGhlIHRvcCBkb21haW4gZm9yIGVhY2ggQ1BVIHdpbGwgZ2VuZXJhbGx5IHNwYW4gYWxsIENQVXMgaW4gdGhlIHN5c3RlbQorYWx0aG91Z2ggc3RyaWN0bHkgaXQgZG9lc24ndCBoYXZlIHRvLCBidXQgdGhpcyBjb3VsZCBsZWFkIHRvIGEgY2FzZSB3aGVyZSBzb21lCitDUFVzIHdpbGwgbmV2ZXIgYmUgZ2l2ZW4gdGFza3MgdG8gcnVuIHVubGVzcyB0aGUgQ1BVcyBhbGxvd2VkIG1hc2sgaXMKK2V4cGxpY2l0bHkgc2V0LiBBIHNjaGVkIGRvbWFpbidzIHNwYW4gbWVhbnMgImJhbGFuY2UgcHJvY2VzcyBsb2FkIGFtb25nIHRoZXNlCitDUFVzIi4KKworRWFjaCBzY2hlZHVsaW5nIGRvbWFpbiBtdXN0IGhhdmUgb25lIG9yIG1vcmUgQ1BVIGdyb3VwcyAoc3RydWN0IHNjaGVkX2dyb3VwKQord2hpY2ggYXJlIG9yZ2FuaXNlZCBhcyBhIGNpcmN1bGFyIG9uZSB3YXkgbGlua2VkIGxpc3QgZnJvbSB0aGUgLT5ncm91cHMKK3BvaW50ZXIuIFRoZSB1bmlvbiBvZiBjcHVtYXNrcyBvZiB0aGVzZSBncm91cHMgTVVTVCBiZSB0aGUgc2FtZSBhcyB0aGUKK2RvbWFpbidzIHNwYW4uIFRoZSBpbnRlcnNlY3Rpb24gb2YgY3B1bWFza3MgZnJvbSBhbnkgdHdvIG9mIHRoZXNlIGdyb3VwcworTVVTVCBiZSB0aGUgZW1wdHkgc2V0LiBUaGUgZ3JvdXAgcG9pbnRlZCB0byBieSB0aGUgLT5ncm91cHMgcG9pbnRlciBNVVNUCitjb250YWluIHRoZSBDUFUgdG8gd2hpY2ggdGhlIGRvbWFpbiBiZWxvbmdzLiBHcm91cHMgbWF5IGJlIHNoYXJlZCBhbW9uZworQ1BVcyBhcyB0aGV5IGNvbnRhaW4gcmVhZCBvbmx5IGRhdGEgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc2V0IHVwLgorCitCYWxhbmNpbmcgd2l0aGluIGEgc2NoZWQgZG9tYWluIG9jY3VycyBiZXR3ZWVuIGdyb3Vwcy4gVGhhdCBpcywgZWFjaCBncm91cAoraXMgdHJlYXRlZCBhcyBvbmUgZW50aXR5LiBUaGUgbG9hZCBvZiBhIGdyb3VwIGlzIGRlZmluZWQgYXMgdGhlIHN1bSBvZiB0aGUKK2xvYWQgb2YgZWFjaCBvZiBpdHMgbWVtYmVyIENQVXMsIGFuZCBvbmx5IHdoZW4gdGhlIGxvYWQgb2YgYSBncm91cCBiZWNvbWVzCitvdXQgb2YgYmFsYW5jZSBhcmUgdGFza3MgbW92ZWQgYmV0d2VlbiBncm91cHMuCisKK0luIGtlcm5lbC9zY2hlZC5jLCByZWJhbGFuY2VfdGljayBpcyBydW4gcGVyaW9kaWNhbGx5IG9uIGVhY2ggQ1BVLiBUaGlzCitmdW5jdGlvbiB0YWtlcyBpdHMgQ1BVJ3MgYmFzZSBzY2hlZCBkb21haW4gYW5kIGNoZWNrcyB0byBzZWUgaWYgaGFzIHJlYWNoZWQKK2l0cyByZWJhbGFuY2UgaW50ZXJ2YWwuIElmIHNvLCB0aGVuIGl0IHdpbGwgcnVuIGxvYWRfYmFsYW5jZSBvbiB0aGF0IGRvbWFpbi4KK3JlYmFsYW5jZV90aWNrIHRoZW4gY2hlY2tzIHRoZSBwYXJlbnQgc2NoZWRfZG9tYWluIChpZiBpdCBleGlzdHMpLCBhbmQgdGhlCitwYXJlbnQgb2YgdGhlIHBhcmVudCBhbmQgc28gZm9ydGguCisKKyoqKiBJbXBsZW1lbnRpbmcgc2NoZWQgZG9tYWlucyAqKioKK1RoZSAiYmFzZSIgZG9tYWluIHdpbGwgInNwYW4iIHRoZSBmaXJzdCBsZXZlbCBvZiB0aGUgaGllcmFyY2h5LiBJbiB0aGUgY2FzZQorb2YgU01ULCB5b3UnbGwgc3BhbiBhbGwgc2libGluZ3Mgb2YgdGhlIHBoeXNpY2FsIENQVSwgd2l0aCBlYWNoIGdyb3VwIGJlaW5nCithIHNpbmdsZSB2aXJ0dWFsIENQVS4KKworSW4gU01QLCB0aGUgcGFyZW50IG9mIHRoZSBiYXNlIGRvbWFpbiB3aWxsIHNwYW4gYWxsIHBoeXNpY2FsIENQVXMgaW4gdGhlCitub2RlLiBFYWNoIGdyb3VwIGJlaW5nIGEgc2luZ2xlIHBoeXNpY2FsIENQVS4gVGhlbiB3aXRoIE5VTUEsIHRoZSBwYXJlbnQKK29mIHRoZSBTTVAgZG9tYWluIHdpbGwgc3BhbiB0aGUgZW50aXJlIG1hY2hpbmUsIHdpdGggZWFjaCBncm91cCBoYXZpbmcgdGhlCitjcHVtYXNrIG9mIGEgbm9kZS4gT3IsIHlvdSBjb3VsZCBkbyBtdWx0aS1sZXZlbCBOVU1BIG9yIE9wdGVyb24sIGZvciBleGFtcGxlLAorbWlnaHQgaGF2ZSBqdXN0IG9uZSBkb21haW4gY292ZXJpbmcgaXRzIG9uZSBOVU1BIGxldmVsLgorCitUaGUgaW1wbGVtZW50b3Igc2hvdWxkIHJlYWQgY29tbWVudHMgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oOgorc3RydWN0IHNjaGVkX2RvbWFpbiBmaWVsZHMsIFNEX0ZMQUdfKiwgU0RfKl9JTklUIHRvIGdldCBhbiBpZGVhIG9mCit0aGUgc3BlY2lmaWNzIGFuZCB3aGF0IHRvIHR1bmUuCisKK0ZvciBTTVQsIHRoZSBhcmNoaXRlY3R1cmUgbXVzdCBkZWZpbmUgQ09ORklHX1NDSEVEX1NNVCBhbmQgcHJvdmlkZSBhCitjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW05SX0NQVVNdLCB3aGVyZSBjcHVfc2libGluZ19tYXBbaV0gaXMgdGhlIG1hc2sgb2YKK2FsbCAiaSIncyBzaWJsaW5ncyBhcyB3ZWxsIGFzICJpIiBpdHNlbGYuCisKK0FyY2hpdGVjdHVyZXMgbWF5IHJldGFpbiB0aGUgcmVndWxhciBvdmVycmlkZSB0aGUgZGVmYXVsdCBTRF8qX0lOSVQgZmxhZ3MKK3doaWxlIHVzaW5nIHRoZSBnZW5lcmljIGRvbWFpbiBidWlsZGVyIGluIGtlcm5lbC9zY2hlZC5jIGlmIHRoZXkgd2lzaCB0bworcmV0YWluIHRoZSB0cmFkaXRpb25hbCBTTVQtPlNNUC0+TlVNQSB0b3BvbG9neSAob3Igc29tZSBzdWJzZXQgb2YgdGhhdCkuIFRoaXMKK2NhbiBiZSBkb25lIGJ5ICNkZWZpbmUnaW5nIEFSQ0hfSEFTSF9TQ0hFRF9UVU5FLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgYXJjaGl0ZWN0dXJlIG1heSBjb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSBnZW5lcmljIGRvbWFpbgorYnVpbGRlciBieSAjZGVmaW5lJ2luZyBBUkNIX0hBU0hfU0NIRURfRE9NQUlOLCBhbmQgZXhwb3J0aW5nIHlvdXIKK2FyY2hfaW5pdF9zY2hlZF9kb21haW5zIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYXR0YWNoIGRvbWFpbnMgdG8gYWxsCitDUFVzIHVzaW5nIGNwdV9hdHRhY2hfZG9tYWluLgorCitJbXBsZW1lbnRvcnMgc2hvdWxkIGNoYW5nZSB0aGUgbGluZQorI3VuZGVmIFNDSEVEX0RPTUFJTl9ERUJVRwordG8KKyNkZWZpbmUgU0NIRURfRE9NQUlOX0RFQlVHCitpbiBrZXJuZWwvc2NoZWQuYyBhcyB0aGlzIGVuYWJsZXMgYW4gZXJyb3IgY2hlY2tpbmcgcGFyc2Ugb2YgdGhlIHNjaGVkIGRvbWFpbnMKK3doaWNoIHNob3VsZCBjYXRjaCBtb3N0IHBvc3NpYmxlIGVycm9ycyAoZGVzY3JpYmVkIGFib3ZlKS4gSXQgYWxzbyBwcmludHMgb3V0Cit0aGUgZG9tYWluIHN0cnVjdHVyZSBpbiBhIHZpc3VhbCBmb3JtYXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkLXN0YXRzLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWQtc3RhdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNzIwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkLXN0YXRzLnR4dApAQCAtMCwwICsxLDE1MyBAQAorVmVyc2lvbiAxMCBvZiBzY2hlZHN0YXRzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHNjaGVkX2RvbWFpbnMsIHdoaWNoCitoaXQgdGhlIG1haW5saW5lIGtlcm5lbCBpbiAyLjYuNy4gIFNvbWUgY291bnRlcnMgbWFrZSBtb3JlIHNlbnNlIHRvIGJlCitwZXItcnVucXVldWU7IG90aGVyIHRvIGJlIHBlci1kb21haW4uICBOb3RlIHRoYXQgZG9tYWlucyAoYW5kIHRoZWlyIGFzc29jaWF0ZWQKK2luZm9ybWF0aW9uKSB3aWxsIG9ubHkgYmUgcGVydGluZW50IGFuZCBhdmFpbGFibGUgb24gbWFjaGluZXMgdXRpbGl6aW5nCitDT05GSUdfU01QLgorCitJbiB2ZXJzaW9uIDEwIG9mIHNjaGVkc3RhdCwgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGxldmVsIG9mIGRvbWFpbgorc3RhdGlzdGljcyBmb3IgZWFjaCBjcHUgbGlzdGVkLCBhbmQgdGhlcmUgbWF5IHdlbGwgYmUgbW9yZSB0aGFuIG9uZQorZG9tYWluLiAgRG9tYWlucyBoYXZlIG5vIHBhcnRpY3VsYXIgbmFtZXMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgYnV0Cit0aGUgaGlnaGVzdCBudW1iZXJlZCBvbmUgdHlwaWNhbGx5IGFyYml0cmF0ZXMgYmFsYW5jaW5nIGFjcm9zcyBhbGwgdGhlCitjcHVzIG9uIHRoZSBtYWNoaW5lLCB3aGlsZSBkb21haW4wIGlzIHRoZSBtb3N0IHRpZ2h0bHkgZm9jdXNlZCBkb21haW4sCitzb21ldGltZXMgYmFsYW5jaW5nIG9ubHkgYmV0d2VlbiBwYWlycyBvZiBjcHVzLiAgQXQgdGhpcyB0aW1lLCB0aGVyZQorYXJlIG5vIGFyY2hpdGVjdHVyZXMgd2hpY2ggbmVlZCBtb3JlIHRoYW4gdGhyZWUgZG9tYWluIGxldmVscy4gVGhlIGZpcnN0CitmaWVsZCBpbiB0aGUgZG9tYWluIHN0YXRzIGlzIGEgYml0IG1hcCBpbmRpY2F0aW5nIHdoaWNoIGNwdXMgYXJlIGFmZmVjdGVkCitieSB0aGF0IGRvbWFpbi4KKworVGhlc2UgZmllbGRzIGFyZSBjb3VudGVycywgYW5kIG9ubHkgaW5jcmVtZW50LiAgUHJvZ3JhbXMgd2hpY2ggbWFrZSB1c2UKK29mIHRoZXNlIHdpbGwgbmVlZCB0byBzdGFydCB3aXRoIGEgYmFzZWxpbmUgb2JzZXJ2YXRpb24gYW5kIHRoZW4gY2FsY3VsYXRlCit0aGUgY2hhbmdlIGluIHRoZSBjb3VudGVycyBhdCBlYWNoIHN1YnNlcXVlbnQgb2JzZXJ2YXRpb24uICBBIHBlcmwgc2NyaXB0Cit3aGljaCBkb2VzIHRoaXMgZm9yIG1hbnkgb2YgdGhlIGZpZWxkcyBpcyBhdmFpbGFibGUgYXQKKworICAgIGh0dHA6Ly9lYWdsZXQucmFpbi5jb20vcmljay9saW51eC9zY2hlZHN0YXQvCisKK05vdGUgdGhhdCBhbnkgc3VjaCBzY3JpcHQgd2lsbCBuZWNlc3NhcmlseSBiZSB2ZXJzaW9uLXNwZWNpZmljLCBhcyB0aGUgbWFpbgorcmVhc29uIHRvIGNoYW5nZSB2ZXJzaW9ucyBpcyBjaGFuZ2VzIGluIHRoZSBvdXRwdXQgZm9ybWF0LiAgRm9yIHRob3NlIHdpc2hpbmcKK3RvIHdyaXRlIHRoZWlyIG93biBzY3JpcHRzLCB0aGUgZmllbGRzIGFyZSBkZXNjcmliZWQgaGVyZS4KKworQ1BVIHN0YXRpc3RpY3MKKy0tLS0tLS0tLS0tLS0tCitjcHU8Tj4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjgKKworTk9URTogSW4gdGhlIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljcywgdGhlIGFjdGl2ZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGVtcHR5CisgICAgaWYgaXQgaGFzIG9ubHkgb25lIHByb2Nlc3MgaW4gaXQsIHNpbmNlIG9idmlvdXNseSB0aGUgcHJvY2VzcyBjYWxsaW5nCisgICAgc2NoZWRfeWllbGQoKSBpcyB0aGF0IHByb2Nlc3MuCisKK0ZpcnN0IGZvdXIgZmllbGRzIGFyZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3M6CisgICAgIDEpICMgb2YgdGltZXMgYm90aCB0aGUgYWN0aXZlIGFuZCB0aGUgZXhwaXJlZCBxdWV1ZSB3ZXJlIGVtcHR5CisgICAgIDIpICMgb2YgdGltZXMganVzdCB0aGUgYWN0aXZlIHF1ZXVlIHdhcyBlbXB0eQorICAgICAzKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGV4cGlyZWQgcXVldWUgd2FzIGVtcHR5CisgICAgIDQpICMgb2YgdGltZXMgc2NoZWRfeWllbGQoKSB3YXMgY2FsbGVkCisKK05leHQgZm91ciBhcmUgc2NoZWR1bGUoKSBzdGF0aXN0aWNzOgorICAgICA1KSAjIG9mIHRpbWVzIHRoZSBhY3RpdmUgcXVldWUgaGFkIGF0IGxlYXN0IG9uZSBvdGhlciBwcm9jZXNzIG9uIGl0CisgICAgIDYpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAorICAgICA3KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAorICAgICA4KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKKworTmV4dCBmb3VyIGFyZSBhY3RpdmVfbG9hZF9iYWxhbmNlKCkgc3RhdGlzdGljczoKKyAgICAgOSkgIyBvZiB0aW1lcyBhY3RpdmVfbG9hZF9iYWxhbmNlKCkgd2FzIGNhbGxlZAorICAgIDEwKSAjIG9mIHRpbWVzIGFjdGl2ZV9sb2FkX2JhbGFuY2UoKSBjYXVzZWQgdGhpcyBjcHUgdG8gZ2FpbiBhIHRhc2sKKyAgICAxMSkgIyBvZiB0aW1lcyBhY3RpdmVfbG9hZF9iYWxhbmNlKCkgY2F1c2VkIHRoaXMgY3B1IHRvIGxvc2UgYSB0YXNrCisgICAgMTIpICMgb2YgdGltZXMgYWN0aXZlX2xvYWRfYmFsYW5jZSgpIHRyaWVkIHRvIG1vdmUgYSB0YXNrIGFuZCBmYWlsZWQKKworTmV4dCB0aHJlZSBhcmUgdHJ5X3RvX3dha2VfdXAoKSBzdGF0aXN0aWNzOgorICAgIDEzKSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZAorICAgIDE0KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgc3VjY2Vzc2Z1bGx5IG1vdmVkIHRoZSBhd2FrZW5pbmcgdGFzaworICAgIDE1KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgYXR0ZW1wdGVkIHRvIG1vdmUgdGhlIGF3YWtlbmluZyB0YXNrCisKK05leHQgdHdvIGFyZSB3YWtlX3VwX25ld190YXNrKCkgc3RhdGlzdGljczoKKyAgICAxNikgIyBvZiB0aW1lcyB3YWtlX3VwX25ld190YXNrKCkgd2FzIGNhbGxlZAorICAgIDE3KSAjIG9mIHRpbWVzIHdha2VfdXBfbmV3X3Rhc2soKSBzdWNjZXNzZnVsbHkgbW92ZWQgdGhlIG5ldyB0YXNrCisKK05leHQgb25lIGlzIGEgc2NoZWRfbWlncmF0ZV90YXNrKCkgc3RhdGlzdGljOgorICAgIDE4KSAjIG9mIHRpbWVzIHNjaGVkX21pZ3JhdGVfdGFzaygpIHdhcyBjYWxsZWQKKworTmV4dCBvbmUgaXMgYSBzY2hlZF9iYWxhbmNlX2V4ZWMoKSBzdGF0aXN0aWM6CisgICAgMTkpICMgb2YgdGltZXMgc2NoZWRfYmFsYW5jZV9leGVjKCkgd2FzIGNhbGxlZAorCitOZXh0IHRocmVlIGFyZSBzdGF0aXN0aWNzIGRlc2NyaWJpbmcgc2NoZWR1bGluZyBsYXRlbmN5OgorICAgIDIwKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgcnVubmluZyBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gbXMpCisgICAgMjEpIHN1bSBvZiBhbGwgdGltZSBzcGVudCB3YWl0aW5nIHRvIHJ1biBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gbXMpCisgICAgMjIpICMgb2YgdGFza3MgKG5vdCBuZWNlc3NhcmlseSB1bmlxdWUpIGdpdmVuIHRvIHRoZSBwcm9jZXNzb3IKKworVGhlIGxhc3Qgc2l4IGFyZSBzdGF0aXN0aWNzIGRlYWxpbmcgd2l0aCBwdWxsX3Rhc2soKToKKyAgICAyMykgIyBvZiB0aW1lcyBwdWxsX3Rhc2soKSBtb3ZlZCBhIHRhc2sgdG8gdGhpcyBjcHUgd2hlbiBuZXdseSBpZGxlCisgICAgMjQpICMgb2YgdGltZXMgcHVsbF90YXNrKCkgc3RvbGUgYSB0YXNrIGZyb20gdGhpcyBjcHUgd2hlbiBhbm90aGVyIGNwdQorCXdhcyBuZXdseSBpZGxlCisgICAgMjUpICMgb2YgdGltZXMgcHVsbF90YXNrKCkgbW92ZWQgYSB0YXNrIHRvIHRoaXMgY3B1IHdoZW4gaWRsZQorICAgIDI2KSAjIG9mIHRpbWVzIHB1bGxfdGFzaygpIHN0b2xlIGEgdGFzayBmcm9tIHRoaXMgY3B1IHdoZW4gYW5vdGhlciBjcHUKKwl3YXMgaWRsZQorICAgIDI3KSAjIG9mIHRpbWVzIHB1bGxfdGFzaygpIG1vdmVkIGEgdGFzayB0byB0aGlzIGNwdSB3aGVuIGJ1c3kKKyAgICAyOCkgIyBvZiB0aW1lcyBwdWxsX3Rhc2soKSBzdG9sZSBhIHRhc2sgZnJvbSB0aGlzIGNwdSB3aGVuIGFub3RoZXIgY3B1CisJd2FzIGJ1c3kKKworCitEb21haW4gc3RhdGlzdGljcworLS0tLS0tLS0tLS0tLS0tLS0KK09uZSBvZiB0aGVzZSBpcyBwcm9kdWNlZCBwZXIgZG9tYWluIGZvciBlYWNoIGNwdSBkZXNjcmliZWQuIChOb3RlIHRoYXQgaWYKK0NPTkZJR19TTVAgaXMgbm90IGRlZmluZWQsICpubyogZG9tYWlucyBhcmUgdXRpbGl6ZWQgYW5kIHRoZXNlIGxpbmVzCit3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dC4pCisKK2RvbWFpbjxOPiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMAorCitUaGUgZmlyc3QgZmllbGQgaXMgYSBiaXQgbWFzayBpbmRpY2F0aW5nIHdoYXQgY3B1cyB0aGlzIGRvbWFpbiBvcGVyYXRlcyBvdmVyLgorCitUaGUgbmV4dCBmaWZ0ZWVuIGFyZSBhIHZhcmlldHkgb2YgbG9hZF9iYWxhbmNlKCkgc3RhdGlzdGljczoKKworICAgICAxKSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGxvYWRfYmFsYW5jZSgpIHdhcyBjYWxsZWQgd2hlbiB0aGUgY3B1CisJd2FzIGlkbGUKKyAgICAgMikgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBsb2FkX2JhbGFuY2UoKSB3YXMgY2FsbGVkIHdoZW4gdGhlIGNwdQorCXdhcyBidXN5CisgICAgIDMpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gbG9hZF9iYWxhbmNlKCkgd2FzIGNhbGxlZCB3aGVuIHRoZSBjcHUKKwl3YXMganVzdCBiZWNvbWluZyBpZGxlCisgICAgIDQpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gbG9hZF9iYWxhbmNlKCkgdHJpZWQgdG8gbW92ZSBvbmUgb3IgbW9yZQorCXRhc2tzIGFuZCBmYWlsZWQsIHdoZW4gdGhlIGNwdSB3YXMgaWRsZQorICAgICA1KSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGxvYWRfYmFsYW5jZSgpIHRyaWVkIHRvIG1vdmUgb25lIG9yIG1vcmUKKwl0YXNrcyBhbmQgZmFpbGVkLCB3aGVuIHRoZSBjcHUgd2FzIGJ1c3kKKyAgICAgNikgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBsb2FkX2JhbGFuY2UoKSB0cmllZCB0byBtb3ZlIG9uZSBvciBtb3JlCisJdGFza3MgYW5kIGZhaWxlZCwgd2hlbiB0aGUgY3B1IHdhcyBqdXN0IGJlY29taW5nIGlkbGUKKyAgICAgNykgc3VtIG9mIGltYmFsYW5jZXMgZGlzY292ZXJlZCAoaWYgYW55KSB3aXRoIGVhY2ggY2FsbCB0bworCWxvYWRfYmFsYW5jZSgpIGluIHRoaXMgZG9tYWluIHdoZW4gdGhlIGNwdSB3YXMgaWRsZQorICAgICA4KSBzdW0gb2YgaW1iYWxhbmNlcyBkaXNjb3ZlcmVkIChpZiBhbnkpIHdpdGggZWFjaCBjYWxsIHRvCisJbG9hZF9iYWxhbmNlKCkgaW4gdGhpcyBkb21haW4gd2hlbiB0aGUgY3B1IHdhcyBidXN5CisgICAgIDkpIHN1bSBvZiBpbWJhbGFuY2VzIGRpc2NvdmVyZWQgKGlmIGFueSkgd2l0aCBlYWNoIGNhbGwgdG8KKwlsb2FkX2JhbGFuY2UoKSBpbiB0aGlzIGRvbWFpbiB3aGVuIHRoZSBjcHUgd2FzIGp1c3QgYmVjb21pbmcgaWRsZQorICAgIDEwKSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGxvYWRfYmFsYW5jZSgpIHdhcyBjYWxsZWQgYnV0IGRpZCBub3QgZmluZAorCWEgYnVzaWVyIHF1ZXVlIHdoaWxlIHRoZSBjcHUgd2FzIGlkbGUKKyAgICAxMSkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBsb2FkX2JhbGFuY2UoKSB3YXMgY2FsbGVkIGJ1dCBkaWQgbm90IGZpbmQKKwlhIGJ1c2llciBxdWV1ZSB3aGlsZSB0aGUgY3B1IHdhcyBidXN5CisgICAgMTIpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gbG9hZF9iYWxhbmNlKCkgd2FzIGNhbGxlZCBidXQgZGlkIG5vdCBmaW5kCisJYSBidXNpZXIgcXVldWUgd2hpbGUgdGhlIGNwdSB3YXMganVzdCBiZWNvbWluZyBpZGxlCisgICAgMTMpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gYSBidXNpZXIgcXVldWUgd2FzIGZvdW5kIHdoaWxlIHRoZSBjcHUgd2FzCisJaWRsZSBidXQgbm8gYnVzaWVyIGdyb3VwIHdhcyBmb3VuZAorICAgIDE0KSAjIG9mIHRpbWVzIGluIHRoaXMgZG9tYWluIGEgYnVzaWVyIHF1ZXVlIHdhcyBmb3VuZCB3aGlsZSB0aGUgY3B1IHdhcworCWJ1c3kgYnV0IG5vIGJ1c2llciBncm91cCB3YXMgZm91bmQKKyAgICAxNSkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBhIGJ1c2llciBxdWV1ZSB3YXMgZm91bmQgd2hpbGUgdGhlIGNwdSB3YXMKKwlqdXN0IGJlY29taW5nIGlkbGUgYnV0IG5vIGJ1c2llciBncm91cCB3YXMgZm91bmQKKworTmV4dCB0d28gYXJlIHNjaGVkX2JhbGFuY2VfZXhlYygpIHN0YXRpc3RpY3M6CisgICAgMTcpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gc2NoZWRfYmFsYW5jZV9leGVjKCkgc3VjY2Vzc2Z1bGx5IHB1c2hlZAorCWEgdGFzayB0byBhIG5ldyBjcHUKKyAgICAxOCkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiBzY2hlZF9iYWxhbmNlX2V4ZWMoKSB0cmllZCBidXQgZmFpbGVkIHRvCisJcHVzaCBhIHRhc2sgdG8gYSBuZXcgY3B1CisKK05leHQgdHdvIGFyZSB0cnlfdG9fd2FrZV91cCgpIHN0YXRpc3RpY3M6CisgICAgMTkpICMgb2YgdGltZXMgaW4gdGhpcyBkb21haW4gdHJ5X3RvX3dha2VfdXAoKSB0cmllZCB0byBtb3ZlIGEgdGFzayBiYXNlZAorCW9uIGFmZmluaXR5IGFuZCBjYWNoZSB3YXJtdGgKKyAgICAyMCkgIyBvZiB0aW1lcyBpbiB0aGlzIGRvbWFpbiB0cnlfdG9fd2FrZV91cCgpIHRyaWVkIHRvIG1vdmUgYSB0YXNrIGJhc2VkCisJb24gbG9hZCBiYWxhbmNpbmcKKworCisvcHJvYy88cGlkPi9zY2hlZHN0YXQKKy0tLS0tLS0tLS0tLS0tLS0KK3NjaGVkc3RhdHMgYWxzbyBhZGRzIGEgbmV3IC9wcm9jLzxwaWQvc2NoZWRzdGF0IGZpbGUgdG8gaW5jbHVkZSBzb21lIG9mCit0aGUgc2FtZSBpbmZvcm1hdGlvbiBvbiBhIHBlci1wcm9jZXNzIGxldmVsLiAgVGhlcmUgYXJlIHRocmVlIGZpZWxkcyBpbgordGhpcyBmaWxlIGNvcnJlbGF0aW5nIHRvIGZpZWxkcyAyMCwgMjEsIGFuZCAyMiBpbiB0aGUgQ1BVIGZpZWxkcywgYnV0Cit0aGV5IG9ubHkgYXBwbHkgZm9yIHRoYXQgcHJvY2Vzcy4KKworQSBwcm9ncmFtIGNvdWxkIGJlIGVhc2lseSB3cml0dGVuIHRvIG1ha2UgdXNlIG9mIHRoZXNlIGV4dHJhIGZpZWxkcyB0bworcmVwb3J0IG9uIGhvdyB3ZWxsIGEgcGFydGljdWxhciBwcm9jZXNzIG9yIHNldCBvZiBwcm9jZXNzZXMgaXMgZmFyaW5nCit1bmRlciB0aGUgc2NoZWR1bGVyJ3MgcG9saWNpZXMuICBBIHNpbXBsZSB2ZXJzaW9uIG9mIHN1Y2ggYSBwcm9ncmFtIGlzCithdmFpbGFibGUgYXQKKyAgICBodHRwOi8vZWFnbGV0LnJhaW4uY29tL3JpY2svbGludXgvc2NoZWRzdGF0L3YxMC9sYXRlbmN5LmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpLzAwLUlOREVYCkBAIC0wLDAgKzEsNzAgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKKzUzYzcwMC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciA1M2M3MDAgYmFzZWQgYWRhcHRlcnMKK0FNNTNDOTc0LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFNNTNjOTc0IGJhc2VkIGFkYXB0ZXJzCitCdXNMb2dpYy50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBhZGFwdGVycyB3aXRoIEJ1c0xvZ2ljIGNoaXBzCitDaGFuZ2VMb2cKKwktIENoYW5nZXMgdG8gc2NzaSBmaWxlcywgaWYgbm90IGxpc3RlZCBlbHNld2hlcmUKK0NoYW5nZUxvZy5pcHMKKwktIElCTSBTZXJ2ZVJBSUQgZHJpdmVyIENoYW5nZWxvZworQ2hhbmdlTG9nLm5jcjUzYzh4eAorCS0gQ2hhbmdlcyB0byBuY3I1M2M4eHggZHJpdmVyCitDaGFuZ2VMb2cuc3ltNTNjOHh4CisJLSBDaGFuZ2VzIHRvIHN5bTUzYzh4eCBkcml2ZXIKK0NoYW5nZUxvZy5zeW01M2M4eHhfMgorCS0gQ2hhbmdlcyB0byBzZWNvbmQgZ2VuZXJhdGlvbiBvZiBzeW01M2M4eHggZHJpdmVyCitGbGFzaFBvaW50LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgYWRhcHRlcnMKK0xJQ0VOU0UuRmxhc2hQb2ludAorCS0gTGljZW5jZSBvZiB0aGUgRmxhc2hwb2ludCBkcml2ZXIKK015bGV4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE15bGV4IGFkYXB0ZXJzCitOaW5qYVNDU0kudHh0CisJLSBpbmZvIG9uIFdvcmtCaVQgTmluamFTQ1NJLTMyLzMyQmkgZHJpdmVyCithaGExNTJ4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFkYXB0ZWMgQUhBMTUyeCBiYXNlZCBhZGFwdGVycworYWljN3h4eC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzCithaWM3eHh4X29sZC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzLCBvbGQgZ2VuZXJhdGlvbgorY3BxZmMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQ29tcGFxIFRhY2h5b24gVFMgYWRhcHRlcnMKK2RwdGkudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgRFBUIFNtYXJ0UkFJRCBhbmQgQWRhcHRlYyBJMk8gUkFJRCBiYXNlZCBhZGFwdGVycworZHRjM3g4MC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBEVEMgMng4MCBiYXNlZCBhZGFwdGVycworZ19OQ1I1MzgwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzODAgYW5kIE5DUjUzYzQwMCBiYXNlZCBhZGFwdGVycworaWJtbWNhLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIElCTSBhZGFwdGVycyB3aXRoIE1DQSBidXMKK2luMjAwMC50eHQKKwktIGluZm8gb24gaW4yMDAwIGRyaXZlcgorbmNyNTNjN3h4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzd4eCBiYXNlZCBhZGFwdGVycworbmNyNTNjOHh4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzh4eCBiYXNlZCBhZGFwdGVycworb3NzdC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBPblN0cmVhbSBTQy14MCBTQ1NJIHRhcGUKK3BwYS50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBJT21lZ2EgemlwIGRyaXZlCitxbG9naWNmYXMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgUUxvZ2ljIEZBU3h4eCBiYXNlZCBhZGFwdGVycworcWxvZ2ljaXNwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIFFMb2dpYyBJU1AgMTAyMCBiYXNlZCBhZGFwdGVycworc2NzaS1nZW5lcmljLnR4dAorCS0gaW5mbyBvbiB0aGUgc2cgZHJpdmVyIGZvciBnZW5lcmljIChub24tZGlzay9DRC90YXBlKSBTQ1NJIGRldmljZXMuCitzY3NpLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gdXNpbmcgU0NTSSBzdXBwb3J0IGFzIGEgbW9kdWxlLgorc2NzaV9taWRfbG93X2FwaS50eHQKKwktIGluZm8gb24gQVBJIGJldHdlZW4gU0NTSSBsYXllciBhbmQgbG93IGxldmVsIGRyaXZlcnMKK3N0LnR4dAorCS0gaW5mbyBvbiBzY3NpIHRhcGUgZHJpdmVyCitzeW01M2M1MDBfY3MudHh0CisJLSBpbmZvIG9uIFBDTUNJQSBkcml2ZXIgZm9yIFN5bWJpb3MgTG9naWMgNTNjNTAwIGJhc2VkIGFkYXB0ZXJzCitzeW01M2M4eHhfMi50eHQKKwktIGluZm8gb24gc2Vjb25kIGdlbmVyYXRpb24gZHJpdmVyIGZvciBzeW01M2M4eHggYmFzZWQgYWRhcHRlcnMKK3Rtc2NzaW0udHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQU01M2M5NzQgYmFzZWQgYWRhcHRlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpLzUzYzcwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNjgxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0CkBAIC0wLDAgKzEsMTU0IEBACitHZW5lcmFsIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSA1M2M3MDAgYW5kIDUzYzcwMC02NiBjaGlwcy4gIEl0IGFsc28gc3VwcG9ydHMKK3RoZSA1M2M3MTAgYnV0IG9ubHkgaW4gNTNjNzAwIGVtdWxhdGlvbiBtb2RlLiAgSXQgaXMgZnVsbCBmZWF0dXJlZCBhbmQKK2RvZXMgc3luYyAoLTY2IGFuZCA3MTAgb25seSksIGRpc2Nvbm5lY3RzIGFuZCB0YWcgY29tbWFuZCBxdWV1ZWluZy4KKworU2luY2UgdGhlIDUzYzcwMCBtdXN0IGJlIGludGVyZmFjZWQgdG8gYSBidXMsIHlvdSBuZWVkIHRvIHdyYXBwZXIgdGhlCitjYXJkIGRldGVjdG9yIGFyb3VuZCB0aGlzIGRyaXZlci4gIEZvciBhbiBleGFtcGxlLCBzZWUgdGhlCitOQ1JfRDcwMC5bY2hdIG9yIGxhc2k3MDAuW2NoXSBmaWxlcy4KKworVGhlIGNvbW1lbnRzIGluIHRoZSA1M2M3MDAuW2NoXSBmaWxlcyB0ZWxsIHlvdSB3aGljaCBwYXJ0cyB5b3UgbmVlZCB0bworZmlsbCBpbiB0byBnZXQgdGhlIGRyaXZlciB3b3JraW5nLgorCisKK0NvbXBpbGUgVGltZSBGbGFncworPT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgbWF5IGJlIGVpdGhlciBpbyBtYXBwZWQgb3IgbWVtb3J5IG1hcHBlZC4gIFRoaXMgaXMKK3NlbGVjdGFibGUgYnkgY29uZmlndXJhdGlvbiBmbGFnczoKKworQ09ORklHXzUzQzcwMF9NRU1fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIG1lbW9yeSBtYXBwZWQuCisKK0NPTkZJR181M0M3MDBfSU9fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIHRvIGJlIGlvIG1hcHBlZC4KKworT25lIG9yIG90aGVyIG9mIHRoZSBhYm92ZSBmbGFncyAqbXVzdCogYmUgZGVmaW5lZC4KKworT3RoZXIgZmxhZ3MgYXJlOgorCitDT05GSUdfNTNDNzAwX0xFX09OX0JFCisKK2RlZmluZSBpZiB0aGUgY2hpcHNldCBtdXN0IGJlIHN1cHBvcnRlZCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUgKHVzZWQgZm9yIHRoZSA3MDAgb24gcGFyaXNjKS4KKworQ09ORklHXzUzQzcwMF9VU0VfQ09OU0lTVEVOVAorCithbGxvY2F0ZSBjb25zaXN0ZW50IG1lbW9yeSAoc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3VyIGFyY2hpdGVjdHVyZQoraGFzIGEgbWl4dHVyZSBvZiBjb25zaXN0ZW50IGFuZCBpbmNvbnNpc3RlbnQgbWVtb3J5KS4gIEZ1bGx5Citjb25zaXN0ZW50IG9yIGZ1bGx5IGluY29uc2lzdGVudCBhcmNoaXRlY3R1cmVzIHNob3VsZCBub3QgZGVmaW5lIHRoaXMuCisKKworVXNpbmcgdGhlIENoaXAgQ29yZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG9yZGVyIHRvIHBsdW1iIHRoZSA1M2M3MDAgY2hpcCBjb3JlIGRyaXZlciBpbnRvIGEgd29ya2luZyBTQ1NJCitkcml2ZXIsIHlvdSBuZWVkIHRvIGtub3cgdGhyZWUgdGhpbmdzIGFib3V0IHRoZSB3YXkgdGhlIGNoaXAgaXMgd2lyZWQKK2ludG8geW91ciBzeXN0ZW0gKG9yIGV4cGFuc2lvbiBjYXJkKS4KKworMS4gVGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBTQ1NJIGNvcmUKKzIuIFRoZSBpbnRlcnJ1cHQgbGluZSB1c2VkCiszLiBUaGUgbWVtb3J5IChvciBpbyBzcGFjZSkgbG9jYXRpb24gb2YgdGhlIDUzYzcwMCByZWdpc3RlcnMuCisKK09wdGlvbmFsbHksIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGtub3cgb3RoZXIgdGhpbmdzLCBsaWtlIGhvdyB0byByZWFkCit0aGUgU0NTSSBJZCBmcm9tIHRoZSBjYXJkIGJpb3Mgb3Igd2hldGhlciB0aGUgY2hpcCBpcyB3aXJlZCBmb3IKK2RpZmZlcmVudGlhbCBvcGVyYXRpb24uCisKK1VzdWFsbHkgeW91IGNhbiBmaW5kIGl0ZW1zIDIuIGFuZCAzLiBmcm9tIGdlbmVyYWwgc3BlYy4gZG9jdW1lbnRzIG9yCitldmVuIGJ5IGV4YW1pbmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHdvcmtpbmcgZHJpdmVyIHVuZGVyIGFub3RoZXIKK29wZXJhdGluZyBzeXN0ZW0uCisKK1RoZSBjbG9jayBzcGVlZCBpcyB1c3VhbGx5IGJ1cmllZCBkZWVwIGluIHRoZSB0ZWNobmljYWwgbGl0ZXJhdHVyZS4KK0l0IGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgaXMgdXNlZCB0byBzZXQgdXAgYm90aCB0aGUgc3luY2hyb25vdXMgYW5kCithc3luY2hyb25vdXMgZGl2aWRlcnMgZm9yIHRoZSBjaGlwLiAgQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsCittYW51ZmFjdHVyZXJzIHNldCB0aGUgY2xvY2sgc3BlZWQgYXQgdGhlIGxvd2VzdCBwb3NzaWJsZSBzZXR0aW5nCitjb25zaXN0ZW50IHdpdGggdGhlIGJlc3Qgb3BlcmF0aW9uIG9mIHRoZSBjaGlwIChhbHRob3VnaCBzb21lIGNob29zZQordG8gZHJpdmUgaXQgb2ZmIHRoZSBDUFUgb3IgYnVzIGNsb2NrIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBleHBlbnNlCitvZiBhbiBleHRyYSBjbG9jayBjaGlwKS4gIFRoZSBiZXN0IG9wZXJhdGlvbiBjbG9jayBzcGVlZHMgYXJlOgorCis1M2M3MDAgLSAyNU1IegorNTNjNzAwLTY2IC0gNTBNSHoKKzUzYzcxMCAtIDQwTWh6CisKK1dyaXRpbmcgWW91ciBHbHVlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgd2lsbCBiZSBhIHN0YW5kYXJkIFNDU0kgZHJpdmVyIChJIGRvbid0IGtub3cgb2YgYSBnb29kIGRvY3VtZW50CitkZXNjcmliaW5nIHRoaXMsIGp1c3QgY29weSBmcm9tIHNvbWUgb3RoZXIgZHJpdmVyKSB3aXRoIGF0IGxlYXN0IGEKK2RldGVjdCBhbmQgcmVsZWFzZSBlbnRyeS4KKworSW4gdGhlIGRldGVjdCByb3V0aW5lLCB5b3UgbmVlZCB0byBhbGxvY2F0ZSBhIHN0cnVjdAorTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgc2l6ZWQgbWVtb3J5IGFyZWEgYW5kIGNsZWFyIGl0IChzbyB0aGF0IHRoZQorZGVmYXVsdCB2YWx1ZXMgZm9yIGV2ZXJ5dGhpbmcgYXJlIDApLiAgVGhlbiB5b3UgbXVzdCBmaWxsIGluIHRoZQorcGFyYW1ldGVycyB0aGF0IG1hdHRlciB0byB5b3UgKHNlZSBiZWxvdyksIHBsdW1iIHRoZSBOQ1JfNzAwX2ludHIKK3JvdXRpbmUgaW50byB0aGUgaW50ZXJydXB0IGxpbmUgYW5kIGNhbGwgTkNSXzcwMF9kZXRlY3Qgd2l0aCB0aGUgaG9zdAordGVtcGxhdGUgYW5kIHRoZSBuZXcgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuICBZb3Ugc2hvdWxkIGFsc28gY2FsbAordGhlIHJlbGV2YW50IHJlcXVlc3RfKl9yZWdpb24gZnVuY3Rpb24gYW5kIHBsYWNlIHRoZSByZWdpc3RlciBiYXNlCithZGRyZXNzIGludG8gdGhlIGBiYXNlJyBwb2ludGVyIG9mIHRoZSBob3N0IHBhcmFtZXRlcnMuCisKK0luIHRoZSByZWxlYXNlIHJvdXRpbmUsIHlvdSBtdXN0IGZyZWUgdGhlIE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzIHRoYXQKK3lvdSBhbGxvY2F0ZWQsIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZV8qX3JlZ2lvbiBhbmQgZnJlZSB0aGUKK2ludGVycnVwdC4KKworSGFuZGxpbmcgSW50ZXJydXB0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIGp1c3QgcGx1bWIgdGhlIGNhcmQncyBpbnRlcnJ1cHQgbGluZSBpbiB3aXRoIAorCityZXF1ZXN0X2lycShpcnEsIE5DUl83MDBfaW50ciwgPGlycSBmbGFncz4sIDxkcml2ZXIgbmFtZT4sIGhvc3QpOworCit3aGVyZSBob3N0IGlzIHRoZSByZXR1cm4gZnJvbSB0aGUgcmVsZXZhbnQgTkNSXzcwMF9kZXRlY3QoKSByb3V0aW5lLgorCitZb3UgbWF5IGFsc28gd3JpdGUgeW91ciBvd24gaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUgd2hpY2ggY2FsbHMKK05DUl83MDBfaW50cigpIGRpcmVjdGx5LiAgSG93ZXZlciwgeW91IHNob3VsZCBvbmx5IHJlYWxseSBkbyB0aGlzIGlmCit5b3UgaGF2ZSBhIGNhcmQgd2l0aCBtb3JlIHRoYW4gb25lIGNoaXAgb24gaXQgYW5kIHlvdSBjYW4gcmVhZCBhCityZWdpc3RlciB0byB0ZWxsIHdoaWNoIHNldCBvZiBjaGlwcyB3YW50cyB0aGUgaW50ZXJydXB0LgorCitTZXR0YWJsZSBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhcmUgYSBsaXN0IG9mIHRoZSB1c2VyIHNldHRhYmxlIHBhcmFtZXRlcnM6CisKK2Nsb2NrOiAoTUFOREFUT1JZKQorCitTZXQgdG8gdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBjaGlwIGluIE1Iei4KKworYmFzZTogKE1BTkRBVE9SWSkKKworc2V0IHRvIHRoZSBiYXNlIG9mIHRoZSBpbyBvciBtZW0gcmVnaW9uIGZvciB0aGUgcmVnaXN0ZXIgc2V0LiBPbiA2NAorYml0IGFyY2hpdGVjdHVyZXMgdGhpcyBpcyBvbmx5IDMyIGJpdHMgd2lkZSwgc28gdGhlIHJlZ2lzdGVycyBtdXN0IGJlCittYXBwZWQgaW50byB0aGUgbG93IDMyIGJpdHMgb2YgbWVtb3J5LgorCitwY2lfZGV2OiAoT1BUSU9OQUwpCisKK3NldCB0byB0aGUgUENJIGJvYXJkIGRldmljZS4gIExlYXZlIE5VTEwgZm9yIGEgbm9uLXBjaSBib2FyZC4gIFRoaXMgaXMKK3VzZWQgZm9yIHRoZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIGFuZCBwY2lfbWFwXyooKSBmdW5jdGlvbnMuCisKK2Rtb2RlX2V4dHJhOiAoT1BUSU9OQUwsIDUzYzcxMCBvbmx5KQorCitleHRyYSBmbGFncyBmb3IgdGhlIERNT0RFIHJlZ2lzdGVyLiAgVGhlc2UgYXJlIHVzZWQgdG8gY29udHJvbCBidXMKK291dHB1dCBwaW5zIG9uIHRoZSA3MTAuICBUaGUgc2V0dGluZ3Mgc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2YKK0RNT0RFX0ZDMSBhbmQgRE1PREVfRkMyLiAgV2hhdCB0aGVzZSBwaW5zIGFjdHVhbGx5IGRvIGlzIGVudGlyZWx5IHVwCit0byB0aGUgYm9hcmQgZGVzaWduZXIuICBVc3VhbGx5IGl0IGlzIHNhZmUgdG8gaWdub3JlIHRoaXMgc2V0dGluZy4KKworZGlmZmVyZW50aWFsOiAoT1BUSU9OQUwpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGRyaXZlcyBhIGRpZmZlcmVudGlhbCBidXMuCisKK2ZvcmNlX2xlX29uX2JlOiAoT1BUSU9OQUwsIG9ubHkgaWYgQ09ORklHXzUzQzcwMF9MRV9PTl9CRSBpcyBzZXQpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGlzIG9wZXJhdGluZyBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUuCisKK2NoaXA3MTA6IChPUFRJT05BTCkKKworc2V0IHRvIDEgaWYgdGhlIGNoaXAgaXMgYSA1M2M3MTAuCisKK2J1cnN0X2Rpc2FibGU6IChPUFRJT05BTCwgNTNjNzEwIG9ubHkpCisKK2Rpc2FibGUgOCBieXRlIGJ1cnN0aW5nIGZvciBETUEgdHJhbnNmZXJzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQnVzTG9naWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODAyM2JhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApAQCAtMCwwICsxLDU2NiBAQAorCSAgIEJ1c0xvZ2ljIE11bHRpTWFzdGVyIGFuZCBGbGFzaFBvaW50IFNDU0kgRHJpdmVyIGZvciBMaW51eAorCisJCQkgVmVyc2lvbiAyLjAuMTUgZm9yIExpbnV4IDIuMAorCQkJIFZlcnNpb24gMi4xLjE1IGZvciBMaW51eCAyLjEKKworCQkJICAgICAgUFJPRFVDVElPTiBSRUxFQVNFCisKKwkJCQkxNyBBdWd1c3QgMTk5OAorCisJCQkgICAgICAgTGVvbmFyZCBOLiBadWJrb2ZmCisJCQkgICAgICAgRGFuZGVsaW9uIERpZ2l0YWwKKwkJCSAgICAgICBsbnpAZGFuZGVsaW9uLmNvbQorCisJIENvcHlyaWdodCAxOTk1LTE5OTggYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KKworCisJCQkJIElOVFJPRFVDVElPTgorCitCdXNMb2dpYywgSW5jLiBkZXNpZ25lZCBhbmQgbWFudWZhY3R1cmVkIGEgdmFyaWV0eSBvZiBoaWdoIHBlcmZvcm1hbmNlIFNDU0kKK2hvc3QgYWRhcHRlcnMgd2hpY2ggc2hhcmUgYSBjb21tb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFjcm9zcyBhIGRpdmVyc2UKK2NvbGxlY3Rpb24gb2YgYnVzIGFyY2hpdGVjdHVyZXMgYnkgdmlydHVlIG9mIHRoZWlyIE11bHRpTWFzdGVyIEFTSUMgdGVjaG5vbG9neS4KK0J1c0xvZ2ljIHdhcyBhY3F1aXJlZCBieSBNeWxleCBDb3Jwb3JhdGlvbiBpbiBGZWJydWFyeSAxOTk2LCBidXQgdGhlIHByb2R1Y3RzCitzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgb3JpZ2luYXRlZCB1bmRlciB0aGUgQnVzTG9naWMgbmFtZSBhbmQgc28gdGhhdCBuYW1lIGlzCityZXRhaW5lZCBpbiB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGFsbCBwcmVzZW50IEJ1c0xvZ2ljIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMsIGFuZCBzaG91bGQKK3N1cHBvcnQgYW55IGZ1dHVyZSBNdWx0aU1hc3RlciBkZXNpZ25zIHdpdGggbGl0dGxlIG9yIG5vIG1vZGlmaWNhdGlvbi4gIE1vcmUKK3JlY2VudGx5LCBCdXNMb2dpYyBpbnRyb2R1Y2VkIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMsIHdoaWNoIGFyZSBsZXNzCitjb3N0bHkgYW5kIHJlbHkgb24gdGhlIGhvc3QgQ1BVLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgYW4gb25ib2FyZCBwcm9jZXNzb3IuCitEZXNwaXRlIG5vdCBoYXZpbmcgYW4gb25ib2FyZCBDUFUsIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMgcGVyZm9ybSB2ZXJ5Cit3ZWxsIGFuZCBoYXZlIHZlcnkgbG93IGNvbW1hbmQgbGF0ZW5jeS4gIEJ1c0xvZ2ljIGhhcyByZWNlbnRseSBwcm92aWRlZCBtZSB3aXRoCit0aGUgRmxhc2hQb2ludCBEcml2ZXIgRGV2ZWxvcGVyJ3MgS2l0LCB3aGljaCBjb21wcmlzZXMgZG9jdW1lbnRhdGlvbiBhbmQgZnJlZWx5CityZWRpc3RyaWJ1dGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBGbGFzaFBvaW50IFNDQ0IgTWFuYWdlci4gIFRoZSBTQ0NCIE1hbmFnZXIKK2lzIHRoZSBsaWJyYXJ5IG9mIGNvZGUgdGhhdCBydW5zIG9uIHRoZSBob3N0IENQVSBhbmQgcGVyZm9ybXMgZnVuY3Rpb25zCithbmFsb2dvdXMgdG8gdGhlIGZpcm13YXJlIG9uIHRoZSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXJzLiAgVGhhbmtzIHRvIHRoZWlyCitoYXZpbmcgcHJvdmlkZWQgdGhlIFNDQ0IgTWFuYWdlciwgdGhpcyBkcml2ZXIgbm93IHN1cHBvcnRzIHRoZSBGbGFzaFBvaW50IEhvc3QKK0FkYXB0ZXJzIGFzIHdlbGwuCisKK015IHByaW1hcnkgZ29hbHMgaW4gd3JpdGluZyB0aGlzIGNvbXBsZXRlbHkgbmV3IEJ1c0xvZ2ljIGRyaXZlciBmb3IgTGludXggYXJlCit0byBhY2hpZXZlIHRoZSBmdWxsIHBlcmZvcm1hbmNlIHRoYXQgQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFuZCBtb2Rlcm4KK1NDU0kgcGVyaXBoZXJhbHMgYXJlIGNhcGFibGUgb2YsIGFuZCB0byBwcm92aWRlIGEgaGlnaGx5IHJvYnVzdCBkcml2ZXIgdGhhdCBjYW4KK2JlIGRlcGVuZGVkIHVwb24gZm9yIGhpZ2ggcGVyZm9ybWFuY2UgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMuICBBbGwgb2YKK3RoZSBtYWpvciBwZXJmb3JtYW5jZSBmZWF0dXJlcyBjYW4gYmUgY29uZmlndXJlZCBmcm9tIHRoZSBMaW51eCBrZXJuZWwgY29tbWFuZAorbGluZSBvciBhdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSwgYWxsb3dpbmcgaW5kaXZpZHVhbCBpbnN0YWxsYXRpb25zIHRvCit0dW5lIGRyaXZlciBwZXJmb3JtYW5jZSBhbmQgZXJyb3IgcmVjb3ZlcnkgdG8gdGhlaXIgcGFydGljdWxhciBuZWVkcy4KKworVGhlIGxhdGVzdCBpbmZvcm1hdGlvbiBvbiBMaW51eCBzdXBwb3J0IGZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMsIGFzCit3ZWxsIGFzIHRoZSBtb3N0IHJlY2VudCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIGFuZCB0aGUgbGF0ZXN0IGZpcm13YXJlIGZvciB0aGUKK0JULTk0OC85NTgvOTU4RCwgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIGZyb20gbXkgTGludXggSG9tZSBQYWdlIGF0IFVSTAorImh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8iLgorCitCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB2aWEgZWxlY3Ryb25pYyBtYWlsIHRvICJsbnpAZGFuZGVsaW9uLmNvbSIuICBQbGVhc2UKK2luY2x1ZGUgd2l0aCB0aGUgYnVnIHJlcG9ydCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBtZXNzYWdlcyByZXBvcnRlZCBieSB0aGUKK2RyaXZlciBhbmQgU0NTSSBzdWJzeXN0ZW0gYXQgc3RhcnR1cCwgYWxvbmcgd2l0aCBhbnkgc3Vic2VxdWVudCBzeXN0ZW0gbWVzc2FnZXMKK3JlbGV2YW50IHRvIFNDU0kgb3BlcmF0aW9ucywgYW5kIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncworaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKworTXlsZXggaGFzIGJlZW4gYW4gZXhjZWxsZW50IGNvbXBhbnkgdG8gd29yayB3aXRoIGFuZCBJIGhpZ2hseSByZWNvbW1lbmQgdGhlaXIKK3Byb2R1Y3RzIHRvIHRoZSBMaW51eCBjb21tdW5pdHkuICBJbiBOb3ZlbWJlciAxOTk1LCBJIHdhcyBvZmZlcmVkIHRoZQorb3Bwb3J0dW5pdHkgdG8gYmVjb21lIGEgYmV0YSB0ZXN0IHNpdGUgZm9yIHRoZWlyIGxhdGVzdCBNdWx0aU1hc3RlciBwcm9kdWN0LAordGhlIEJULTk0OCBQQ0kgVWx0cmEgU0NTSSBIb3N0IEFkYXB0ZXIsIGFuZCB0aGVuIGFnYWluIGZvciB0aGUgQlQtOTU4IFBDSSBXaWRlCitVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlciBpbiBKYW51YXJ5IDE5OTYuICBUaGlzIHdhcyBtdXR1YWxseSBiZW5lZmljaWFsIHNpbmNlCitNeWxleCByZWNlaXZlZCBhIGRlZ3JlZSBhbmQga2luZCBvZiB0ZXN0aW5nIHRoYXQgdGhlaXIgb3duIHRlc3RpbmcgZ3JvdXAgY2Fubm90CityZWFkaWx5IGFjaGlldmUsIGFuZCB0aGUgTGludXggY29tbXVuaXR5IGhhcyBhdmFpbGFibGUgaGlnaCBwZXJmb3JtYW5jZSBob3N0CithZGFwdGVycyB0aGF0IGhhdmUgYmVlbiB3ZWxsIHRlc3RlZCB3aXRoIExpbnV4IGV2ZW4gYmVmb3JlIGJlaW5nIGJyb3VnaHQgdG8KK21hcmtldC4gIFRoaXMgcmVsYXRpb25zaGlwIGhhcyBhbHNvIGdpdmVuIG1lIHRoZSBvcHBvcnR1bml0eSB0byBpbnRlcmFjdAorZGlyZWN0bHkgd2l0aCB0aGVpciB0ZWNobmljYWwgc3RhZmYsIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgaW50ZXJuYWwKK3dvcmtpbmdzIG9mIHRoZWlyIHByb2R1Y3RzLCBhbmQgaW4gdHVybiB0byBlZHVjYXRlIHRoZW0gYWJvdXQgdGhlIG5lZWRzIGFuZAorcG90ZW50aWFsIG9mIHRoZSBMaW51eCBjb21tdW5pdHkuCisKK01vcmUgcmVjZW50bHksIE15bGV4IGhhcyByZWFmZmlybWVkIHRoZSBjb21wYW55J3MgaW50ZXJlc3QgaW4gc3VwcG9ydGluZyB0aGUKK0xpbnV4IGNvbW11bml0eSwgYW5kIEkgYW0gbm93IHdvcmtpbmcgb24gYSBMaW51eCBkcml2ZXIgZm9yIHRoZSBEQUM5NjAgUENJIFJBSUQKK0NvbnRyb2xsZXJzLiAgTXlsZXgncyBpbnRlcmVzdCBhbmQgc3VwcG9ydCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLgorCitVbmxpa2Ugc29tZSBvdGhlciB2ZW5kb3JzLCBpZiB5b3UgY29udGFjdCBNeWxleCBUZWNobmljYWwgU3VwcG9ydCB3aXRoIGEKK3Byb2JsZW0gYW5kIGFyZSBydW5uaW5nIExpbnV4LCB0aGV5IHdpbGwgbm90IHRlbGwgeW91IHRoYXQgeW91ciB1c2Ugb2YgdGhlaXIKK3Byb2R1Y3RzIGlzIHVuc3VwcG9ydGVkLiAgVGhlaXIgbGF0ZXN0IHByb2R1Y3QgbWFya2V0aW5nIGxpdGVyYXR1cmUgZXZlbiBzdGF0ZXMKKyJNeWxleCBTQ1NJIGhvc3QgYWRhcHRlcnMgYXJlIGNvbXBhdGlibGUgd2l0aCBhbGwgbWFqb3Igb3BlcmF0aW5nIHN5c3RlbXMKK2luY2x1ZGluZzogLi4uIExpbnV4IC4uLiIuCisKK015bGV4IENvcnBvcmF0aW9uIGlzIGxvY2F0ZWQgYXQgMzQ1NTEgQXJkZW53b29kIEJsdmQuLCBGcmVtb250LCBDYWxpZm9ybmlhCis5NDU1NSwgVVNBIGFuZCBjYW4gYmUgcmVhY2hlZCBhdCA1MTAvNzk2LTYxMDAgb3Igb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0CitodHRwOi8vd3d3Lm15bGV4LmNvbS4gIE15bGV4IEhCQSBUZWNobmljYWwgU3VwcG9ydCBjYW4gYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljCittYWlsIGF0IHRlY2hzdXBAbXlsZXguY29tLCBieSBWb2ljZSBhdCA1MTAvNjA4LTI0MDAsIG9yIGJ5IEZBWCBhdCA1MTAvNzQ1LTc3MTUuCitDb250YWN0IGluZm9ybWF0aW9uIGZvciBvZmZpY2VzIGluIEV1cm9wZSBhbmQgSmFwYW4gaXMgYXZhaWxhYmxlIG9uIHRoZSBXZWIKK3NpdGUuCisKKworCQkJCURSSVZFUiBGRUFUVVJFUworCitvIENvbmZpZ3VyYXRpb24gUmVwb3J0aW5nIGFuZCBUZXN0aW5nCisKKyAgRHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgdGhlIGRyaXZlciByZXBvcnRzIGV4dGVuc2l2ZWx5IG9uIHRoZSBob3N0CisgIGFkYXB0ZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIHRoZSBzeW5jaHJvbm91cyB0cmFuc2ZlciBwYXJhbWV0ZXJzCisgIHJlcXVlc3RlZCBhbmQgbmVnb3RpYXRlZCB3aXRoIGVhY2ggdGFyZ2V0IGRldmljZS4gIEF1dG9TQ1NJIHNldHRpbmdzIGZvcgorICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbiwgV2lkZSBOZWdvdGlhdGlvbiwgYW5kIERpc2Nvbm5lY3QvUmVjb25uZWN0IGFyZQorICByZXBvcnRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlLCBhcyB3ZWxsIGFzIHRoZSBzdGF0dXMgb2YgVGFnZ2VkIFF1ZXVpbmcuCisgIElmIHRoZSBzYW1lIHNldHRpbmcgaXMgaW4gZWZmZWN0IGZvciBhbGwgdGFyZ2V0IGRldmljZXMsIHRoZW4gYSBzaW5nbGUgd29yZAorICBvciBwaHJhc2UgaXMgdXNlZDsgb3RoZXJ3aXNlLCBhIGxldHRlciBpcyBwcm92aWRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlIHRvCisgIGluZGljYXRlIHRoZSBpbmRpdmlkdWFsIHN0YXR1cy4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMKKyAgc2hvdWxkIGNsYXJpZnkgdGhpcyByZXBvcnRpbmcgZm9ybWF0OgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFVsdHJhCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGVuYWJsZWQgZm9yIGFsbCB0YXJnZXQgZGV2aWNlcyBhbmQgdGhlIGhvc3QKKyAgICAgIGFkYXB0ZXIgd2lsbCBhdHRlbXB0IHRvIG5lZ290aWF0ZSBmb3IgMjAuMCBtZWdhLXRyYW5zZmVycy9zZWNvbmQuCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogRmFzdAorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyBlbmFibGVkIGZvciBhbGwgdGFyZ2V0IGRldmljZXMgYW5kIHRoZSBob3N0CisgICAgICBhZGFwdGVyIHdpbGwgYXR0ZW1wdCB0byBuZWdvdGlhdGUgZm9yIDEwLjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFNsb3cKKworICAgICAgU3luY2hyb25vdXMgbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIHRhcmdldCBkZXZpY2VzIGFuZCB0aGUgaG9zdAorICAgICAgYWRhcHRlciB3aWxsIGF0dGVtcHQgdG8gbmVnb3RpYXRlIGZvciA1LjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IERpc2FibGVkCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGRpc2FibGVkIGFuZCBhbGwgdGFyZ2V0IGRldmljZXMgYXJlIGxpbWl0ZWQgdG8KKyAgICAgIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogVUZTTlVVVSNVVVVVVVVVVQorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiB0byBVbHRyYSBzcGVlZCBpcyBlbmFibGVkIGZvciB0YXJnZXQgZGV2aWNlcyAwCisgICAgICBhbmQgNCB0aHJvdWdoIDE1LCB0byBGYXN0IHNwZWVkIGZvciB0YXJnZXQgZGV2aWNlIDEsIHRvIFNsb3cgc3BlZWQgZm9yCisgICAgICB0YXJnZXQgZGV2aWNlIDIsIGFuZCBpcyBub3QgcGVybWl0dGVkIHRvIHRhcmdldCBkZXZpY2UgMy4gIFRoZSBob3N0CisgICAgICBhZGFwdGVyJ3MgU0NTSSBJRCBpcyByZXByZXNlbnRlZCBieSB0aGUgIiMiLgorCisgICAgVGhlIHN0YXR1cyBvZiBXaWRlIE5lZ290aWF0aW9uLCBEaXNjb25uZWN0L1JlY29ubmVjdCwgYW5kIFRhZ2dlZCBRdWV1aW5nCisgICAgYXJlIHJlcG9ydGVkIGFzICJFbmFibGVkIiwgRGlzYWJsZWQiLCBvciBhIHNlcXVlbmNlIG9mICJZIiBhbmQgIk4iIGxldHRlcnMuCisKK28gUGVyZm9ybWFuY2UgRmVhdHVyZXMKKworICBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgZGlyZWN0bHkgaW1wbGVtZW50IFNDU0ktMiBUYWdnZWQgUXVldWluZywgYW5kIHNvCisgIHN1cHBvcnQgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRyaXZlciB0byB1dGlsaXplIHRhZ2dlZCBxdWV1aW5nIHdpdGggYW55CisgIHRhcmdldCBkZXZpY2VzIHRoYXQgcmVwb3J0IGhhdmluZyB0aGUgdGFnZ2VkIHF1ZXVpbmcgY2FwYWJpbGl0eS4gIFRhZ2dlZAorICBxdWV1aW5nIGFsbG93cyBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgdG8gYmUgaXNzdWVkIHRvIGVhY2ggdGFyZ2V0CisgIGRldmljZSBvciBsb2dpY2FsIHVuaXQsIGFuZCBjYW4gaW1wcm92ZSBJL08gcGVyZm9ybWFuY2Ugc3Vic3RhbnRpYWxseS4gIEluCisgIGFkZGl0aW9uLCBCdXNMb2dpYydzIFN0cmljdCBSb3VuZCBSb2JpbiBNb2RlIGlzIHVzZWQgdG8gb3B0aW1pemUgaG9zdCBhZGFwdGVyCisgIHBlcmZvcm1hbmNlLCBhbmQgc2NhdHRlci9nYXRoZXIgSS9PIGNhbiBzdXBwb3J0IGFzIG1hbnkgc2VnbWVudHMgYXMgY2FuIGJlCisgIGVmZmVjdGl2ZWx5IHV0aWxpemVkIGJ5IHRoZSBMaW51eCBJL08gc3Vic3lzdGVtLiAgQ29udHJvbCBvdmVyIHRoZSB1c2Ugb2YKKyAgdGFnZ2VkIHF1ZXVpbmcgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSBhcyB3ZWxsIGFzIGluZGl2aWR1YWwgc2VsZWN0aW9uIG9mIHRoZQorICB0YWdnZWQgcXVldWUgZGVwdGggaXMgYXZhaWxhYmxlIHRocm91Z2ggZHJpdmVyIG9wdGlvbnMgcHJvdmlkZWQgb24gdGhlIGtlcm5lbAorICBjb21tYW5kIGxpbmUgb3IgYXQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUuICBCeSBkZWZhdWx0LCB0aGUgcXVldWUgZGVwdGgKKyAgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBob3N0IGFkYXB0ZXIncyB0b3RhbCBxdWV1ZSBkZXB0aCBhbmQKKyAgdGhlIG51bWJlciwgdHlwZSwgc3BlZWQsIGFuZCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhcmdldCBkZXZpY2VzIGZvdW5kLiAgSW4KKyAgYWRkaXRpb24sIHRhZ2dlZCBxdWV1aW5nIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbmV2ZXIgdGhlIGhvc3QgYWRhcHRlcgorICBmaXJtd2FyZSB2ZXJzaW9uIGlzIGtub3duIG5vdCB0byBpbXBsZW1lbnQgaXQgY29ycmVjdGx5LCBvciB3aGVuZXZlciBhIHRhZ2dlZAorICBxdWV1ZSBkZXB0aCBvZiAxIGlzIHNlbGVjdGVkLiAgVGFnZ2VkIHF1ZXVpbmcgaXMgYWxzbyBkaXNhYmxlZCBmb3IgaW5kaXZpZHVhbAorICB0YXJnZXQgZGV2aWNlcyBpZiBkaXNjb25uZWN0L3JlY29ubmVjdCBpcyBkaXNhYmxlZCBmb3IgdGhhdCBkZXZpY2UuCisKK28gUm9idXN0bmVzcyBGZWF0dXJlcworCisgIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBleHRlbnNpdmUgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlcy4gIFdoZW4gdGhlIGhpZ2hlcgorICBsZXZlbCBwYXJ0cyBvZiB0aGUgU0NTSSBzdWJzeXN0ZW0gcmVxdWVzdCB0aGF0IGEgdGltZWQgb3V0IGNvbW1hbmQgYmUgcmVzZXQsCisgIGEgc2VsZWN0aW9uIGlzIG1hZGUgYmV0d2VlbiBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0CisgIHZlcnN1cyBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCBtZXNzYWdlIHRvIHRoZSBpbmRpdmlkdWFsIHRhcmdldCBkZXZpY2UKKyAgYmFzZWQgb24gdGhlIHJlY29tbWVuZGF0aW9uIG9mIHRoZSBTQ1NJIHN1YnN5c3RlbS4gIEVycm9yIHJlY292ZXJ5IHN0cmF0ZWdpZXMKKyAgYXJlIHNlbGVjdGFibGUgdGhyb3VnaCBkcml2ZXIgb3B0aW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSwKKyAgYW5kIGFsc28gaW5jbHVkZSBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCB0byB0aGUgc3BlY2lmaWMgdGFyZ2V0IGRldmljZQorICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgYmVpbmcgcmVzZXQsIGFzIHdlbGwgYXMgc3VwcHJlc3NpbmcgZXJyb3IKKyAgcmVjb3ZlcnkgZW50aXJlbHkgdG8gYXZvaWQgcGVydHVyYmluZyBhbiBpbXByb3Blcmx5IGZ1bmN0aW9uaW5nIGRldmljZS4gIElmCisgIHRoZSBidXMgZGV2aWNlIHJlc2V0IGVycm9yIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIHNlbGVjdGVkIGFuZCBzZW5kaW5nIGEgYnVzCisgIGRldmljZSByZXNldCBkb2VzIG5vdCByZXN0b3JlIGNvcnJlY3Qgb3BlcmF0aW9uLCB0aGUgbmV4dCBjb21tYW5kIHRoYXQgaXMKKyAgcmVzZXQgd2lsbCBmb3JjZSBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0LiAgU0NTSSBidXMKKyAgcmVzZXRzIGNhdXNlZCBieSBvdGhlciBkZXZpY2VzIGFuZCBkZXRlY3RlZCBieSB0aGUgaG9zdCBhZGFwdGVyIGFyZSBhbHNvCisgIGhhbmRsZWQgYnkgaXNzdWluZyBhIHNvZnQgcmVzZXQgdG8gdGhlIGhvc3QgYWRhcHRlciBhbmQgcmUtaW5pdGlhbGl6YXRpb24uCisgIEZpbmFsbHksIGlmIHRhZ2dlZCBxdWV1aW5nIGlzIGFjdGl2ZSBhbmQgbW9yZSB0aGFuIG9uZSBjb21tYW5kIHJlc2V0IG9jY3VycworICBpbiBhIDEwIG1pbnV0ZSBpbnRlcnZhbCwgb3IgaWYgYSBjb21tYW5kIHJlc2V0IG9jY3VycyB3aXRoaW4gdGhlIGZpcnN0IDEwCisgIG1pbnV0ZXMgb2Ygb3BlcmF0aW9uLCB0aGVuIHRhZ2dlZCBxdWV1aW5nIHdpbGwgYmUgZGlzYWJsZWQgZm9yIHRoYXQgdGFyZ2V0CisgIGRldmljZS4gIFRoZXNlIGVycm9yIHJlY292ZXJ5IG9wdGlvbnMgaW1wcm92ZSBvdmVyYWxsIHN5c3RlbSByb2J1c3RuZXNzIGJ5CisgIHByZXZlbnRpbmcgaW5kaXZpZHVhbCBlcnJhbnQgZGV2aWNlcyBmcm9tIGNhdXNpbmcgdGhlIHN5c3RlbSBhcyBhIHdob2xlIHRvCisgIGxvY2sgdXAgb3IgY3Jhc2gsIGFuZCB0aGVyZWJ5IGFsbG93aW5nIGEgY2xlYW4gc2h1dGRvd24gYW5kIHJlc3RhcnQgYWZ0ZXIgdGhlCisgIG9mZmVuZGluZyBjb21wb25lbnQgaXMgcmVtb3ZlZC4KKworbyBQQ0kgQ29uZmlndXJhdGlvbiBTdXBwb3J0CisKKyAgT24gUENJIHN5c3RlbXMgcnVubmluZyBrZXJuZWxzIGNvbXBpbGVkIHdpdGggUENJIEJJT1Mgc3VwcG9ydCBlbmFibGVkLCB0aGlzCisgIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgdXNlIHRoZSBJL08gcG9ydAorICBhZGRyZXNzZXMgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSBCSU9TLCByYXRoZXIgdGhhbiB0aGUgSVNBIGNvbXBhdGlibGUgSS9PCisgIHBvcnQgYWRkcmVzc2VzLiAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGFkZHJlc3MgaXMgdGhlbiBkaXNhYmxlZCBieSB0aGUKKyAgZHJpdmVyLiAgT24gUENJIHN5c3RlbXMgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IHRoZSBBdXRvU0NTSSB1dGlsaXR5IGJlCisgIHVzZWQgdG8gZGlzYWJsZSB0aGUgSVNBIGNvbXBhdGlibGUgSS9PIHBvcnQgZW50aXJlbHkgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeS4KKyAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgb24gdGhlIEJULTk0OC85NTgvOTU4RC4KKworbyAvcHJvYyBGaWxlIFN5c3RlbSBTdXBwb3J0CisKKyAgQ29waWVzIG9mIHRoZSBob3N0IGFkYXB0ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0b2dldGhlciB3aXRoIHVwZGF0ZWQKKyAgZGF0YSB0cmFuc2ZlciBhbmQgZXJyb3IgcmVjb3Zlcnkgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlCisgIC9wcm9jL3Njc2kvQnVzTG9naWMvPE4+IGludGVyZmFjZS4KKworbyBTaGFyZWQgSW50ZXJydXB0cyBTdXBwb3J0CisKKyAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc2hhcmVkIGludGVycnVwdHMsIGFueSBudW1iZXIgb2YgQnVzTG9naWMgSG9zdAorICBBZGFwdGVycyBtYXkgc2hhcmUgdGhlIHNhbWUgaW50ZXJydXB0IHJlcXVlc3QgY2hhbm5lbC4KKworCisJCQkgICAgU1VQUE9SVEVEIEhPU1QgQURBUFRFUlMKKworVGhlIGZvbGxvd2luZyBsaXN0IGNvbXByaXNlcyB0aGUgc3VwcG9ydGVkIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyBhcyBvZgordGhlIGRhdGUgb2YgdGhpcyBkb2N1bWVudC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55b25lIHB1cmNoYXNpbmcgYSBCdXNMb2dpYworSG9zdCBBZGFwdGVyIG5vdCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGNvbnRhY3QgdGhlIGF1dGhvciBiZWZvcmVoYW5kIHRvIHZlcmlmeQordGhhdCBpdCBpcyBvciB3aWxsIGJlIHN1cHBvcnRlZC4KKworRmxhc2hQb2ludCBTZXJpZXMgUENJIEhvc3QgQWRhcHRlcnM6CisKK0ZsYXNoUG9pbnQgTFQgKEJULTkzMCkJVWx0cmEgU0NTSS0zCitGbGFzaFBvaW50IExUIChCVC05MzBSKQlVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVCAoQlQtOTIwKQlVbHRyYSBTQ1NJLTMgKEJULTkzMCB3aXRob3V0IEJJT1MpCitGbGFzaFBvaW50IERMIChCVC05MzIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgREwgKEJULTkzMlIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVyAoQlQtOTUwKQlXaWRlIFVsdHJhIFNDU0ktMworRmxhc2hQb2ludCBMVyAoQlQtOTUwUikJV2lkZSBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBEVyAoQlQtOTUyKQlEdWFsIENoYW5uZWwgV2lkZSBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgRFcgKEJULTk1MlIpCUR1YWwgQ2hhbm5lbCBXaWRlIFVsdHJhIFNDU0ktMyB3aXRoIFJBSURQbHVzCisKK011bHRpTWFzdGVyICJXIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtOTQ4CSAgICBQQ0kJCVVsdHJhIFNDU0ktMworQlQtOTU4CSAgICBQQ0kJCVdpZGUgVWx0cmEgU0NTSS0zCitCVC05NThECSAgICBQQ0kJCVdpZGUgRGlmZmVyZW50aWFsIFVsdHJhIFNDU0ktMworCitNdWx0aU1hc3RlciAiQyIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTk0NkMJICAgIFBDSQkJRmFzdCBTQ1NJLTIKK0JULTk1NkMJICAgIFBDSQkJV2lkZSBGYXN0IFNDU0ktMgorQlQtOTU2Q0QgICAgUENJCQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNDQ1QwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3QwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzU3QwkgICAgRUlTQQlXaWRlIEZhc3QgU0NTSS0yCitCVC03NTdDRCAgICBFSVNBCVdpZGUgRGlmZmVyZW50aWFsIEZhc3QgU0NTSS0yCitCVC01NDVDCSAgICBJU0EJCUZhc3QgU0NTSS0yCitCVC01NDBDRiAgICBJU0EJCUZhc3QgU0NTSS0yCisKK011bHRpTWFzdGVyICJTIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtNDQ1UwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3UwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzQ3RAkgICAgRUlTQQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc1N1MJICAgIEVJU0EJV2lkZSBGYXN0IFNDU0ktMgorQlQtNzU3RAkgICAgRUlTQQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNTQ1UwkgICAgSVNBCQlGYXN0IFNDU0ktMgorQlQtNTQyRAkgICAgSVNBCQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9uIEgpCitCVC01NDJCCSAgICBJU0EJCVNDU0ktMiAoNTQyQiByZXZpc2lvbiBIKQorCitNdWx0aU1hc3RlciAiQSIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9ucyBBIC0gRykKK0JULTU0MkIJICAgIElTQQkJU0NTSS0yICg1NDJCIHJldmlzaW9ucyBBIC0gRykKKworQU1JIEZhc3REaXNrIEhvc3QgQWRhcHRlcnMgdGhhdCBhcmUgdHJ1ZSBCdXNMb2dpYyBNdWx0aU1hc3RlciBjbG9uZXMgYXJlIGFsc28KK3N1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKworQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBhdmFpbGFibGUgcGFja2FnZWQgYm90aCBhcyBiYXJlIGJvYXJkcyBhbmQgYXMKK3JldGFpbCBraXRzLiAgVGhlIEJULSBtb2RlbCBudW1iZXJzIGFib3ZlIHJlZmVyIHRvIHRoZSBiYXJlIGJvYXJkIHBhY2thZ2luZy4KK1RoZSByZXRhaWwga2l0IG1vZGVsIG51bWJlcnMgYXJlIGZvdW5kIGJ5IHJlcGxhY2luZyBCVC0gd2l0aCBLVC0gaW4gdGhlIGFib3ZlCitsaXN0LiAgVGhlIHJldGFpbCBraXQgaW5jbHVkZXMgdGhlIGJhcmUgYm9hcmQgYW5kIG1hbnVhbCBhcyB3ZWxsIGFzIGNhYmxpbmcgYW5kCitkcml2ZXIgbWVkaWEgYW5kIGRvY3VtZW50YXRpb24gdGhhdCBhcmUgbm90IHByb3ZpZGVkIHdpdGggYmFyZSBib2FyZHMuCisKKworCQkJIEZMQVNIUE9JTlQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK28gUkFJRFBsdXMgU3VwcG9ydAorCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBub3cgaW5jbHVkZSBSQUlEUGx1cywgTXlsZXgncyBib290YWJsZSBzb2Z0d2FyZQorICBSQUlELiAgUkFJRFBsdXMgaXMgbm90IHN1cHBvcnRlZCBvbiBMaW51eCwgYW5kIHRoZXJlIGFyZSBubyBwbGFucyB0byBzdXBwb3J0CisgIGl0LiAgVGhlIE1EIGRyaXZlciBpbiBMaW51eCAyLjAgcHJvdmlkZXMgZm9yIGNvbmNhdGVuYXRpb24gKExJTkVBUikgYW5kCisgIHN0cmlwaW5nIChSQUlELTApLCBhbmQgc3VwcG9ydCBmb3IgbWlycm9yaW5nIChSQUlELTEpLCBmaXhlZCBwYXJpdHkgKFJBSUQtNCksCisgIGFuZCBkaXN0cmlidXRlZCBwYXJpdHkgKFJBSUQtNSkgaXMgYXZhaWxhYmxlIHNlcGFyYXRlbHkuICBUaGUgYnVpbHQtaW4gTGludXgKKyAgUkFJRCBzdXBwb3J0IGlzIGdlbmVyYWxseSBtb3JlIGZsZXhpYmxlIGFuZCBpcyBleHBlY3RlZCB0byBwZXJmb3JtIGJldHRlcgorICB0aGFuIFJBSURQbHVzLCBzbyB0aGVyZSBpcyBsaXR0bGUgaW1wZXR1cyB0byBpbmNsdWRlIFJBSURQbHVzIHN1cHBvcnQgaW4gdGhlCisgIEJ1c0xvZ2ljIGRyaXZlci4KKworbyBFbmFibGluZyBVbHRyYVNDU0kgVHJhbnNmZXJzCisKKyAgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeQorICBEZWZhdWx0IiBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkCisgIHRvIGJlIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzCisgIGFyZSBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudAorICBmb3IgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseQorICByZXNwb25kIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSQorICBtYXkgYmUgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kKKyAgc3BlZWQgdG8gYmUgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24KKyAgYW4gaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlcgorICB0aGUgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkgICAgICBCVC05NDgvOTU4Lzk1OEQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK1RoZSBCVC05NDgvOTU4Lzk1OEQgUENJIFVsdHJhIFNDU0kgSG9zdCBBZGFwdGVycyBoYXZlIHNvbWUgZmVhdHVyZXMgd2hpY2ggbWF5CityZXF1aXJlIGF0dGVudGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2hlbiBpbnN0YWxsaW5nIExpbnV4LgorCitvIFBDSSBJL08gUG9ydCBBc3NpZ25tZW50cworCisgIFdoZW4gY29uZmlndXJlZCB0byBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBvbmx5CisgIHJlY29nbml6ZSB0aGUgUENJIEkvTyBwb3J0IGFzc2lnbm1lbnRzIG1hZGUgYnkgdGhlIG1vdGhlcmJvYXJkJ3MgUENJIEJJT1MuCisgIFRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBub3QgcmVzcG9uZCB0byBhbnkgb2YgdGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0cworICB0aGF0IHByZXZpb3VzIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyByZXNwb25kIHRvLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMKKyAgdGhlIFBDSSBJL08gcG9ydCBhc3NpZ25tZW50cywgc28gdGhpcyBpcyB0aGUgcHJlZmVycmVkIGNvbmZpZ3VyYXRpb24uCisgIEhvd2V2ZXIsIGlmIHRoZSBvYnNvbGV0ZSBCdXNMb2dpYyBkcml2ZXIgbXVzdCBiZSB1c2VkIGZvciBhbnkgcmVhc29uLCBzdWNoIGFzCisgIGEgTGludXggZGlzdHJpYnV0aW9uIHRoYXQgZG9lcyBub3QgeWV0IHVzZSB0aGlzIGRyaXZlciBpbiBpdHMgYm9vdCBrZXJuZWwsCisgIEJ1c0xvZ2ljIGhhcyBwcm92aWRlZCBhbiBBdXRvU0NTSSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYSBsZWdhY3kgSVNBCisgIGNvbXBhdGlibGUgSS9PIHBvcnQuCisKKyAgVG8gZW5hYmxlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvcHRpb24sIGludm9rZSB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEKKyAgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeQorICBDb25maWd1cmF0aW9uIiwgYW5kIHRoZW4gY2hhbmdlIHRoZSAiSVNBIENvbXBhdGlibGUgUG9ydCIgc2V0dGluZyBmcm9tCisgICJEaXNhYmxlIiB0byAiUHJpbWFyeSIgb3IgIkFsdGVybmF0ZSIuICBPbmNlIHRoaXMgZHJpdmVyIGhhcyBiZWVuIGluc3RhbGxlZCwKKyAgdGhlICJJU0EgQ29tcGF0aWJsZSBQb3J0IiBvcHRpb24gc2hvdWxkIGJlIHNldCBiYWNrIHRvICJEaXNhYmxlIiB0byBhdm9pZAorICBwb3NzaWJsZSBmdXR1cmUgSS9PIHBvcnQgY29uZmxpY3RzLiAgVGhlIG9sZGVyIEJULTk0NkMvOTU2Qy85NTZDRCBhbHNvIGhhdmUKKyAgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IHRoZSBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZyBpcyAiUHJpbWFyeSIuCisKK28gUENJIFNsb3QgU2Nhbm5pbmcgT3JkZXIKKworICBJbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgQnVzTG9naWMgUENJIEhvc3QgQWRhcHRlcnMsIHRoZSBvcmRlciBpbiB3aGljaCB0aGUKKyAgUENJIHNsb3RzIGFyZSBzY2FubmVkIG1heSBhcHBlYXIgcmV2ZXJzZWQgd2l0aCB0aGUgQlQtOTQ4Lzk1OC85NThEIGFzCisgIGNvbXBhcmVkIHRvIHRoZSBCVC05NDZDLzk1NkMvOTU2Q0QuICBGb3IgYm9vdGluZyBmcm9tIGEgU0NTSSBkaXNrIHRvIHdvcmsKKyAgY29ycmVjdGx5LCBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgaG9zdCBhZGFwdGVyJ3MgQklPUyBhbmQgdGhlIGtlcm5lbCBhZ3JlZQorICBvbiB3aGljaCBkaXNrIGlzIHRoZSBib290IGRldmljZSwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGV5IHJlY29nbml6ZSB0aGUgUENJCisgIGhvc3QgYWRhcHRlcnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGUgbW90aGVyYm9hcmQncyBQQ0kgQklPUyBwcm92aWRlcyBhCisgIHN0YW5kYXJkIHdheSBvZiBlbnVtZXJhdGluZyB0aGUgUENJIGhvc3QgYWRhcHRlcnMsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIExpbnV4CisgIGtlcm5lbC4gIFNvbWUgUENJIEJJT1MgaW1wbGVtZW50YXRpb25zIGVudW1lcmF0ZSB0aGUgUENJIHNsb3RzIGluIG9yZGVyIG9mCisgIGluY3JlYXNpbmcgYnVzIG51bWJlciBhbmQgZGV2aWNlIG51bWJlciwgd2hpbGUgb3RoZXJzIGRvIHNvIGluIHRoZSBvcHBvc2l0ZQorICBkaXJlY3Rpb24uCisKKyAgVW5mb3J0dW5hdGVseSwgTWljcm9zb2Z0IGRlY2lkZWQgdGhhdCBXaW5kb3dzIDk1IHdvdWxkIGFsd2F5cyBlbnVtZXJhdGUgdGhlCisgIFBDSSBzbG90cyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGJ1cyBudW1iZXIgYW5kIGRldmljZSBudW1iZXIgcmVnYXJkbGVzcyBvZgorICB0aGUgUENJIEJJT1MgZW51bWVyYXRpb24sIGFuZCByZXF1aXJlcyB0aGF0IHRoZWlyIHNjaGVtZSBiZSBzdXBwb3J0ZWQgYnkgdGhlCisgIGhvc3QgYWRhcHRlcidzIEJJT1MgdG8gcmVjZWl2ZSBXaW5kb3dzIDk1IGNlcnRpZmljYXRpb24uICBUaGVyZWZvcmUsIHRoZQorICBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIEJULTk0OC85NTgvOTU4RCBlbnVtZXJhdGUgdGhlIGhvc3QgYWRhcHRlcnMKKyAgYnkgaW5jcmVhc2luZyBidXMgbnVtYmVyIGFuZCBkZXZpY2UgbnVtYmVyLiAgVG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIGludm9rZQorICB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIKKyAgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeSBDb25maWd1cmF0aW9uIiwgcHJlc3MgQ3RybC1GMTAsIGFuZCB0aGVuIGNoYW5nZQorICB0aGUgIlVzZSBCdXMgQW5kIERldmljZSAjIEZvciBQQ0kgU2Nhbm5pbmcgU2VxLiIgb3B0aW9uIHRvIE9GRi4KKworICBUaGlzIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBzZXR0aW5nIG9mIHRoZSBQQ0kgU2Nhbm5pbmcgU2VxdWVuY2Ugb3B0aW9uCisgIHNvIGFzIHRvIHJlY29nbml6ZSB0aGUgaG9zdCBhZGFwdGVycyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBlbnVtZXJhdGVkCisgIGJ5IHRoZSBob3N0IGFkYXB0ZXIncyBCSU9TLgorCitvIEVuYWJsaW5nIFVsdHJhU0NTSSBUcmFuc2ZlcnMKKworICBUaGUgQlQtOTQ4Lzk1OC85NThEIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeSBEZWZhdWx0IgorICBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkIHRvIGJlCisgIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzIGFyZQorICBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudCBmb3IKKyAgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSByZXNwb25kCisgIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSSBtYXkgYmUKKyAgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kgc3BlZWQgdG8gYmUKKyAgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24gYW4KKyAgaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlciB0aGUKKyAgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkJCURSSVZFUiBPUFRJT05TCisKK0J1c0xvZ2ljIERyaXZlciBPcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgZWl0aGVyIHZpYSB0aGUgTGludXggS2VybmVsIENvbW1hbmQKK0xpbmUgb3IgdmlhIHRoZSBMb2FkYWJsZSBLZXJuZWwgTW9kdWxlIEluc3RhbGxhdGlvbiBGYWNpbGl0eS4gIERyaXZlciBPcHRpb25zCitmb3IgbXVsdGlwbGUgaG9zdCBhZGFwdGVycyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBieSBzZXBhcmF0aW5nIHRoZSBvcHRpb24KK3N0cmluZ3MgYnkgYSBzZW1pY29sb24sIG9yIGJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgIkJ1c0xvZ2ljPSIgc3RyaW5ncyBvbiB0aGUKK2NvbW1hbmQgbGluZS4gIEluZGl2aWR1YWwgb3B0aW9uIHNwZWNpZmljYXRpb25zIGZvciBhIHNpbmdsZSBob3N0IGFkYXB0ZXIgYXJlCitzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhlIFByb2JpbmcgYW5kIERlYnVnZ2luZyBPcHRpb25zIGFwcGx5IHRvIGFsbCBob3N0CithZGFwdGVycyB3aGVyZWFzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhcHBseSBpbmRpdmlkdWFsbHkgb25seSB0byB0aGUKK3NlbGVjdGVkIGhvc3QgYWRhcHRlci4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBQcm9iaW5nIE9wdGlvbnMgY29tcHJpc2UgdGhlIGZvbGxvd2luZzoKKworSU86PGludGVnZXI+CisKKyAgVGhlICJJTzoiIG9wdGlvbiBzcGVjaWZpZXMgYW4gSVNBIEkvTyBBZGRyZXNzIHRvIGJlIHByb2JlZCBmb3IgYSBub24tUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlci4gIElmIG5laXRoZXIgIklPOiIgbm9yICJOb1Byb2JlSVNBIiBvcHRpb25zIGFyZQorICBzcGVjaWZpZWQsIHRoZW4gdGhlIHN0YW5kYXJkIGxpc3Qgb2YgQnVzTG9naWMgTXVsdGlNYXN0ZXIgSVNBIEkvTyBBZGRyZXNzZXMKKyAgd2lsbCBiZSBwcm9iZWQgKDB4MzMwLCAweDMzNCwgMHgyMzAsIDB4MjM0LCAweDEzMCwgYW5kIDB4MTM0KS4gIE11bHRpcGxlCisgICJJTzoiIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCB0byBwcmVjaXNlbHkgZGV0ZXJtaW5lIHRoZSBJL08gQWRkcmVzc2VzIHRvCisgIGJlIHByb2JlZCwgYnV0IHRoZSBwcm9iZSBvcmRlciB3aWxsIGFsd2F5cyBmb2xsb3cgdGhlIHN0YW5kYXJkIGxpc3QuCisKK05vUHJvYmUKKworICBUaGUgIk5vUHJvYmUiIG9wdGlvbiBkaXNhYmxlcyBhbGwgcHJvYmluZyBhbmQgdGhlcmVmb3JlIG5vIEJ1c0xvZ2ljIEhvc3QKKyAgQWRhcHRlcnMgd2lsbCBiZSBkZXRlY3RlZC4KKworTm9Qcm9iZUlTQQorCisgIFRoZSAiTm9Qcm9iZUlTQSIgb3B0aW9uIGRpc2FibGVzIHByb2Jpbmcgb2YgdGhlIHN0YW5kYXJkIEJ1c0xvZ2ljIElTQSBJL08KKyAgQWRkcmVzc2VzIGFuZCB0aGVyZWZvcmUgb25seSBQQ0kgTXVsdGlNYXN0ZXIgYW5kIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworICB3aWxsIGJlIGRldGVjdGVkLgorCitOb1Byb2JlUENJCisKKyAgVGhlICJOb1Byb2JlUENJIiBvcHRpb25zIGRpc2FibGVzIHRoZSBpbnRlcnJvZ2F0aW9uIG9mIFBDSSBDb25maWd1cmF0aW9uCisgIFNwYWNlIGFuZCB0aGVyZWZvcmUgb25seSBJU0EgTXVsdGltYXN0ZXIgSG9zdCBBZGFwdGVycyB3aWxsIGJlIGRldGVjdGVkLCBhcworICB3ZWxsIGFzIFBDSSBNdWx0aW1hc3RlciBIb3N0IEFkYXB0ZXJzIHRoYXQgaGF2ZSB0aGVpciBJU0EgQ29tcGF0aWJsZSBJL08KKyAgUG9ydCBzZXQgdG8gIlByaW1hcnkiIG9yICJBbHRlcm5hdGUiLgorCitOb1NvcnRQQ0kKKworICBUaGUgIk5vU29ydFBDSSIgb3B0aW9uIGZvcmNlcyBQQ0kgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZQorICBlbnVtZXJhdGVkIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSB0aGUgUENJIEJJT1MsIGlnbm9yaW5nIGFueSBzZXR0aW5nIG9mCisgIHRoZSBBdXRvU0NTSSAiVXNlIEJ1cyBBbmQgRGV2aWNlICMgRm9yIFBDSSBTY2FubmluZyBTZXEuIiBvcHRpb24uCisKK011bHRpTWFzdGVyRmlyc3QKKworICBUaGUgIk11bHRpTWFzdGVyRmlyc3QiIG9wdGlvbiBmb3JjZXMgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZSBwcm9iZWQKKyAgYmVmb3JlIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycy4gIEJ5IGRlZmF1bHQsIGlmIGJvdGggRmxhc2hQb2ludCBhbmQgUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMgYXJlIHByZXNlbnQsIHRoaXMgZHJpdmVyIHdpbGwgcHJvYmUgZm9yCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBmaXJzdCB1bmxlc3MgdGhlIEJJT1MgcHJpbWFyeSBkaXNrIGlzIGNvbnRyb2xsZWQKKyAgYnkgdGhlIGZpcnN0IFBDSSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXIsIGluIHdoaWNoIGNhc2UgTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycyB3aWxsIGJlIHByb2JlZCBmaXJzdC4KKworRmxhc2hQb2ludEZpcnN0CisKKyAgVGhlICJGbGFzaFBvaW50Rmlyc3QiIG9wdGlvbiBmb3JjZXMgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHRvIGJlIHByb2JlZAorICBiZWZvcmUgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycy4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBUYWdnZWQgUXVldWluZyBPcHRpb25zIGFsbG93IGZvciBleHBsaWNpdGx5IHNwZWNpZnlpbmcKK3RoZSBRdWV1ZSBEZXB0aCBhbmQgd2hldGhlciBUYWdnZWQgUXVldWluZyBpcyBwZXJtaXR0ZWQgZm9yIGVhY2ggVGFyZ2V0CitEZXZpY2UgKGFzc3VtaW5nIHRoYXQgdGhlIFRhcmdldCBEZXZpY2Ugc3VwcG9ydHMgVGFnZ2VkIFF1ZXVpbmcpLiAgVGhlIFF1ZXVlCitEZXB0aCBpcyB0aGUgbnVtYmVyIG9mIFNDU0kgQ29tbWFuZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBjb25jdXJyZW50bHkKK3ByZXNlbnRlZCBmb3IgZXhlY3V0aW9uIChlaXRoZXIgdG8gdGhlIEhvc3QgQWRhcHRlciBvciBUYXJnZXQgRGV2aWNlKS4gIE5vdGUKK3RoYXQgZXhwbGljaXRseSBlbmFibGluZyBUYWdnZWQgUXVldWluZyBtYXkgbGVhZCB0byBwcm9ibGVtczsgdGhlIG9wdGlvbiB0bworZW5hYmxlIG9yIGRpc2FibGUgVGFnZ2VkIFF1ZXVpbmcgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IHRvIGFsbG93IGRpc2FibGluZworVGFnZ2VkIFF1ZXVpbmcgb24gVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IGl0IGNvcnJlY3RseS4gIFRoZQorZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKworUXVldWVEZXB0aDo8aW50ZWdlcj4KKworICBUaGUgIlF1ZXVlRGVwdGg6IiBvciBRRDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIFF1ZXVlIERlcHRoIHRvIHVzZSBmb3IgYWxsCisgIFRhcmdldCBEZXZpY2VzIHRoYXQgc3VwcG9ydCBUYWdnZWQgUXVldWluZywgYXMgd2VsbCBhcyB0aGUgbWF4aW11bSBRdWV1ZQorICBEZXB0aCBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFRhZ2dlZCBRdWV1aW5nLiAgSWYgbm8gUXVldWUgRGVwdGgKKyAgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgUXVldWUgRGVwdGggd2lsbCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQKKyAgb24gdGhlIEhvc3QgQWRhcHRlcidzIFRvdGFsIFF1ZXVlIERlcHRoIGFuZCB0aGUgbnVtYmVyLCB0eXBlLCBzcGVlZCwgYW5kCisgIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV0ZWN0ZWQgVGFyZ2V0IERldmljZXMuICBGb3IgSG9zdCBBZGFwdGVycyB0aGF0CisgIHJlcXVpcmUgSVNBIEJvdW5jZSBCdWZmZXJzLCB0aGUgUXVldWUgRGVwdGggaXMgYXV0b21hdGljYWxseSBzZXQgYnkgZGVmYXVsdAorICB0byBCdXNMb2dpY19UYWdnZWRRdWV1ZURlcHRoQkIgb3IgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoQkIgdG8gYXZvaWQKKyAgZXhjZXNzaXZlIHByZWFsbG9jYXRpb24gb2YgRE1BIEJvdW5jZSBCdWZmZXIgbWVtb3J5LiAgVGFyZ2V0IERldmljZXMgdGhhdAorICBkbyBub3Qgc3VwcG9ydCBUYWdnZWQgUXVldWluZyBhbHdheXMgaGF2ZSB0aGVpciBRdWV1ZSBEZXB0aCBzZXQgdG8KKyAgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoIG9yIEJ1c0xvZ2ljX1VudGFnZ2VkUXVldWVEZXB0aEJCLCB1bmxlc3MgYQorICBsb3dlciBRdWV1ZSBEZXB0aCBvcHRpb24gaXMgcHJvdmlkZWQuICBBIFF1ZXVlIERlcHRoIG9mIDEgYXV0b21hdGljYWxseQorICBkaXNhYmxlcyBUYWdnZWQgUXVldWluZy4KKworUXVldWVEZXB0aDpbPGludGVnZXI+LDxpbnRlZ2VyPi4uLl0KKworICBUaGUgIlF1ZXVlRGVwdGg6Wy4uLl0iIG9yICJRRDpbLi4uXSIgb3B0aW9uIHNwZWNpZmllcyB0aGUgUXVldWUgRGVwdGgKKyAgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICBJZiBhbiA8aW50ZWdlcj4gaXMgb21pdHRlZCwgdGhlCisgIGFzc29jaWF0ZWQgVGFyZ2V0IERldmljZSB3aWxsIGhhdmUgaXRzIFF1ZXVlIERlcHRoIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuCisKK1RhZ2dlZFF1ZXVpbmc6RGVmYXVsdAorCisgIFRoZSAiVGFnZ2VkUXVldWluZzpEZWZhdWx0IiBvciAiVFE6RGVmYXVsdCIgb3B0aW9uIHBlcm1pdHMgVGFnZ2VkIFF1ZXVpbmcKKyAgYmFzZWQgb24gdGhlIGZpcm13YXJlIHZlcnNpb24gb2YgdGhlIEJ1c0xvZ2ljIEhvc3QgQWRhcHRlciBhbmQgYmFzZWQgb24KKyAgd2hldGhlciB0aGUgUXVldWUgRGVwdGggYWxsb3dzIHF1ZXVpbmcgbXVsdGlwbGUgY29tbWFuZHMuCisKK1RhZ2dlZFF1ZXVpbmc6RW5hYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkVuYWJsZSIgb3IgIlRROkVuYWJsZSIgb3B0aW9uIGVuYWJsZXMgVGFnZ2VkIFF1ZXVpbmcgZm9yCisgIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlciwgb3ZlcnJpZGluZyBhbnkgbGltaXRhdGlvbiB0aGF0CisgIHdvdWxkIG90aGVyd2lzZSBiZSBpbXBvc2VkIGJhc2VkIG9uIHRoZSBIb3N0IEFkYXB0ZXIgZmlybXdhcmUgdmVyc2lvbi4KKworVGFnZ2VkUXVldWluZzpEaXNhYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkRpc2FibGUiIG9yICJUUTpEaXNhYmxlIiBvcHRpb24gZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcKKyAgZm9yIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlci4KKworVGFnZ2VkUXVldWluZzo8VGFyZ2V0LVNwZWM+CisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOjxUYXJnZXQtU3BlYz4iIG9yICJUUTo8VGFyZ2V0LVNwZWM+IiBvcHRpb24gY29udHJvbHMKKyAgVGFnZ2VkIFF1ZXVpbmcgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICA8VGFyZ2V0LVNwZWM+IGlzIGEKKyAgc2VxdWVuY2Ugb2YgIlkiLCAiTiIsIGFuZCAiWCIgY2hhcmFjdGVycy4gICJZIiBlbmFibGVzIFRhZ2dlZCBRdWV1aW5nLCAiTiIKKyAgZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcsIGFuZCAiWCIgYWNjZXB0cyB0aGUgZGVmYXVsdCBiYXNlZCBvbiB0aGUgZmlybXdhcmUKKyAgdmVyc2lvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgcmVmZXJzIHRvIFRhcmdldCBEZXZpY2UgMCwgdGhlIHNlY29uZCB0bworICBUYXJnZXQgRGV2aWNlIDEsIGFuZCBzbyBvbjsgaWYgdGhlIHNlcXVlbmNlIG9mICJZIiwgIk4iLCBhbmQgIlgiIGNoYXJhY3RlcnMKKyAgZG9lcyBub3QgY292ZXIgYWxsIHRoZSBUYXJnZXQgRGV2aWNlcywgdW5zcGVjaWZpZWQgY2hhcmFjdGVycyBhcmUgYXNzdW1lZAorICB0byBiZSAiWCIuCisKK1RoZSBCdXNMb2dpYyBEcml2ZXIgTWlzY2VsbGFuZW91cyBPcHRpb25zIGNvbXByaXNlIHRoZSBmb2xsb3dpbmc6CisKK0J1c1NldHRsZVRpbWU6PHNlY29uZHM+CisKKyAgVGhlICJCdXNTZXR0bGVUaW1lOiIgb3IgIkJTVDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIEJ1cyBTZXR0bGUgVGltZSBpbgorICBzZWNvbmRzLiAgVGhlIEJ1cyBTZXR0bGUgVGltZSBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIGEgSG9zdAorICBBZGFwdGVyIEhhcmQgUmVzZXQgd2hpY2ggaW5pdGlhdGVzIGEgU0NTSSBCdXMgUmVzZXQgYW5kIGlzc3VpbmcgYW55IFNDU0kKKyAgQ29tbWFuZHMuICBJZiB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gQnVzTG9naWNfRGVmYXVsdEJ1c1NldHRsZVRpbWUuCisKK0luaGliaXRUYXJnZXRJbnF1aXJ5CisKKyAgVGhlICJJbmhpYml0VGFyZ2V0SW5xdWlyeSIgb3B0aW9uIGluaGliaXRzIHRoZSBleGVjdXRpb24gb2YgYW4gSW5xdWlyZQorICBUYXJnZXQgRGV2aWNlcyBvciBJbnF1aXJlIEluc3RhbGxlZCBEZXZpY2VzIGNvbW1hbmQgb24gTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycy4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB3aXRoIHNvbWUgb2xkZXIgVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QKKyAgcmVzcG9uZCBjb3JyZWN0bHkgd2hlbiBMb2dpY2FsIFVuaXRzIGFib3ZlIDAgYXJlIGFkZHJlc3NlZC4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBEZWJ1Z2dpbmcgT3B0aW9ucyBjb21wcmlzZSB0aGUgZm9sbG93aW5nOgorCitUcmFjZVByb2JlCisKKyAgVGhlICJUcmFjZVByb2JlIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlciBQcm9iaW5nLgorCitUcmFjZUhhcmR3YXJlUmVzZXQKKworICBUaGUgIlRyYWNlSGFyZHdhcmVSZXNldCIgb3B0aW9uIGVuYWJsZXMgdHJhY2luZyBvZiBIb3N0IEFkYXB0ZXIgSGFyZHdhcmUKKyAgUmVzZXQuCisKK1RyYWNlQ29uZmlndXJhdGlvbgorCisgIFRoZSAiVHJhY2VDb25maWd1cmF0aW9uIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlcgorICBDb25maWd1cmF0aW9uLgorCitUcmFjZUVycm9ycworCisgIFRoZSAiVHJhY2VFcnJvcnMiIG9wdGlvbiBlbmFibGVzIHRyYWNpbmcgb2YgU0NTSSBDb21tYW5kcyB0aGF0IHJldHVybiBhbgorICBlcnJvciBmcm9tIHRoZSBUYXJnZXQgRGV2aWNlLiAgVGhlIENEQiBhbmQgU2Vuc2UgRGF0YSB3aWxsIGJlIHByaW50ZWQgZm9yCisgIGVhY2ggU0NTSSBDb21tYW5kIHRoYXQgZmFpbHMuCisKK0RlYnVnCisKKyAgVGhlICJEZWJ1ZyIgb3B0aW9uIGVuYWJsZXMgYWxsIGRlYnVnZ2luZyBvcHRpb25zLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGRlbW9uc3RyYXRlIHNldHRpbmcgdGhlIFF1ZXVlIERlcHRoIGZvciBUYXJnZXQgRGV2aWNlcworMSBhbmQgMiBvbiB0aGUgZmlyc3QgaG9zdCBhZGFwdGVyIHRvIDcgYW5kIDE1LCB0aGUgUXVldWUgRGVwdGggZm9yIGFsbCBUYXJnZXQKK0RldmljZXMgb24gdGhlIHNlY29uZCBob3N0IGFkYXB0ZXIgdG8gMzEsIGFuZCB0aGUgQnVzIFNldHRsZSBUaW1lIG9uIHRoZQorc2Vjb25kIGhvc3QgYWRhcHRlciB0byAzMCBzZWNvbmRzLgorCitMaW51eCBLZXJuZWwgQ29tbWFuZCBMaW5lOgorCisgIGxpbnV4IEJ1c0xvZ2ljPVF1ZXVlRGVwdGg6Wyw3LDE1XTtRdWV1ZURlcHRoOjMxLEJ1c1NldHRsZVRpbWU6MzAKKworTElMTyBMaW51eCBCb290IExvYWRlciAoaW4gL2V0Yy9saWxvLmNvbmYpOgorCisgIGFwcGVuZCA9ICJCdXNMb2dpYz1RdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIgorCitJTlNNT0QgTG9hZGFibGUgS2VybmVsIE1vZHVsZSBJbnN0YWxsYXRpb24gRmFjaWxpdHk6CisKKyAgaW5zbW9kIEJ1c0xvZ2ljLm8gXAorICAgICAgJ0J1c0xvZ2ljPSJRdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIicKKworTk9URTogTW9kdWxlIFV0aWxpdGllcyAyLjEuNzEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgcGFyc2luZworICAgICAgb2YgZHJpdmVyIG9wdGlvbnMgY29udGFpbmluZyBjb21tYXMuCisKKworCQkJICAgICAgRFJJVkVSIElOU1RBTExBVElPTgorCitUaGlzIGRpc3RyaWJ1dGlvbiB3YXMgcHJlcGFyZWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMC4zNSwgYnV0IHNob3VsZCBiZQorY29tcGF0aWJsZSB3aXRoIDIuMC40IG9yIGFueSBsYXRlciAyLjAgc2VyaWVzIGtlcm5lbC4KKworVG8gaW5zdGFsbCB0aGUgbmV3IEJ1c0xvZ2ljIFNDU0kgZHJpdmVyLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLAorcmVwbGFjaW5nICIvdXNyL3NyYyIgd2l0aCB3aGVyZXZlciB5b3Uga2VlcCB5b3VyIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZToKKworICBjZCAvdXNyL3NyYworICB0YXIgLXh2emYgQnVzTG9naWMtMi4wLjE1LnRhci5negorICBtdiBSRUFETUUuKiBMSUNFTlNFLiogQnVzTG9naWMuW2NoXSBGbGFzaFBvaW50LmMgbGludXgvZHJpdmVycy9zY3NpCisgIHBhdGNoIC1wMCA8IEJ1c0xvZ2ljLnBhdGNoIChvbmx5IGZvciAyLjAuMzMgYW5kIGJlbG93KQorICBjZCBsaW51eAorICBtYWtlIGNvbmZpZworICBtYWtlIHpJbWFnZQorCitUaGVuIGluc3RhbGwgImFyY2gvaTM4Ni9ib290L3pJbWFnZSIgYXMgeW91ciBzdGFuZGFyZCBrZXJuZWwsIHJ1biBsaWxvIGlmCithcHByb3ByaWF0ZSwgYW5kIHJlYm9vdC4KKworCisJCSAgICAgIEJVU0xPR0lDIEFOTk9VTkNFTUVOVFMgTUFJTElORyBMSVNUCisKK1RoZSBCdXNMb2dpYyBBbm5vdW5jZW1lbnRzIE1haWxpbmcgTGlzdCBwcm92aWRlcyBhIGZvcnVtIGZvciBpbmZvcm1pbmcgTGludXgKK3VzZXJzIG9mIG5ldyBkcml2ZXIgcmVsZWFzZXMgYW5kIG90aGVyIGFubm91bmNlbWVudHMgcmVnYXJkaW5nIExpbnV4IHN1cHBvcnQKK2ZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMuICBUbyBqb2luIHRoZSBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIHRvCisiYnVzbG9naWMtYW5ub3VuY2UtcmVxdWVzdEBkYW5kZWxpb24uY29tIiB3aXRoIHRoZSBsaW5lICJzdWJzY3JpYmUiIGluIHRoZQorbWVzc2FnZSBib2R5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLjE5OTItMTk5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg4ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcKQEAgLTAsMCArMSwyMDIzIEBACitTYXQgSmFuIDE4IDE1OjUxOjQ1IDE5OTcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisJKiBEb24ndCBwbGF5IHdpdGggdXNhZ2VfY291bnQgZGlyZWN0bHksIGluc3RlYWQgaGFuZCBhcm91bmQKKwl0aGUgbW9kdWxlIGhlYWRlciBhbmQgdXNlIHRoZSBtb2R1bGUgbWFjcm9zLgorCitGcmkgTWF5IDE3IDAwOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDIuMC4zIFJlbGVhc2VkLgorCitUdWUgQXByIDE2IDIxOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4yIFJlbGVhc2VkLgorCitTdW4gRGVjIDMxIDIzOjI2OjAwIDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4xIFJlbGVhc2VkLgorCitGcmkgTm92IDEwIDE1OjI5OjQ5IDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIFJlbGVhc2VkIG5ldyBCdXNMb2dpYyBkcml2ZXIuCisKK1dlZCBBdWcgIDkgMjI6Mzc6MDQgMTk5NSAgQW5kcmllcyBCcm91d2VyICA8YWViQGN3aS5ubD4KKworCUFzIGEgcHJlcGFyYXRpb24gZm9yIG5ldyBkZXZpY2UgY29kZSwgc2VwYXJhdGVkIHRoZSB2YXJpb3VzCisJZnVuY3Rpb25zIHRoZSByZXF1ZXN0LT5kZXYgZmllbGQgaGFkIGludG8gdGhlIGRldmljZSBwcm9wZXIsCisJcmVxdWVzdC0+cnFfZGV2IGFuZCBhIHN0YXR1cyBmaWVsZCByZXF1ZXN0LT5ycV9zdGF0dXMuCisKKwlUaGUgMm5kIGFyZ3VtZW50IG9mIGJpb3NfcGFyYW0gaXMgbm93IGEga2Rldl90LgorCitXZWQgSnVsIDE5IDEwOjQzOjE1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHNjc2kuYyAoc2NzaV9wcm9jX2luZm8pOiAvcHJvYy9zY3NpL3Njc2kgbm93IGFsc28gbGlzdHMgYWxsCisJYXR0YWNoZWQgZGV2aWNlcy4KKworCSogc2NzaV9wcm9jLmMgKHByb2NfcHJpbnRfc2NzaWRldmljZSk6IEFkZGVkLiBVc2VkIGJ5IHNjc2kuYyBhbmQKKwllYXRhX2RtYV9wcm9jLmMgdG8gcHJvZHVjZSBzb21lIGRldmljZSBpbmZvIGZvciAvcHJvYy9zY3NpLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKShlYXRhX3Njc2lfZG9uZSk6CisJQ2hhbmdlZCBoYW5kbGluZyBvZiBpbnRlcm5hbCBTQ1NJIGNvbW1hbmRzIHNlbmQgdG8gdGhlIEhCQS4KKworCitXZWQgSnVsIDE5IDEwOjA5OjE3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjExIHJlbGVhc2VkLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKTogQWRkZWQgY29kZSB0byBkbworCWNvbW1hbmQgbGF0ZW5jeSBtZWFzdXJlbWVudHMgaWYgcmVxdWVzdGVkIGJ5IHJvb3QgdGhyb3VnaAorCS9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCVRocm91Z2hvdXQgVXNlIEhaIGNvbnN0YW50IGZvciB0aW1lIHJlZmVyZW5jZXMuCisKKwkqIGVhdGFfcGlvLmM6IFVzZSBIWiBjb25zdGFudCBmb3IgdGltZSByZWZlcmVuY2VzLgorCisJKiBhaWM3eHh4LmMsIGFpYzd4eHguaCwgYWljN3h4eF9hc20uYzogQ2hhbmdlZCBjb3B5cmlnaHQgZnJvbSBCU0QKKwl0byBHTlUgc3R5bGUuCisKKwkqIHNjc2kuaDogQWRkZWQgUkVBRF8xMiBjb21tYW5kIG9wY29kZSBjb25zdGFudAorCitXZWQgSnVsIDE5IDA5OjI1OjMwIDE5OTUgIE1pY2hhZWwgTmV1ZmZlciA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBMaW51eCAxLjMuMTAgcmVsZWFzZWQuCisKKwkqIHNjc2lfcHJvYy5jIChkaXNwYXRjaF9zY3NpX2luZm8pOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZS4KKworV2VkIEp1bCAxOSAwOToyNTozMCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy45IHJlbGVhc2VkLgorCisJKiBzY3NpLmMgQmxhY2tsaXN0IGNvbmNlcHQgZXhwYW5kZWQgdG8gJ3N1cHBvcnQnIG1vcmUgZGV2aWNlCisJZGVmaWNpZW5jaWVzLiBibGFja2xpc3RbXSByZW5hbWVkIHRvIGRldmljZV9saXN0W10KKwkoc2Nhbl9zY3Npcyk6IENvZGUgY2xlYW51cC4KKworCSogc2NzaV9kZWJ1Zy5jIChzY3NpX2RlYnVnX3Byb2NfaW5mbyk6IEFkZGVkIHN1cHBvcnQgdG8gY29udHJvbAorCWRldmljZSBsb2NrdXAgc2ltdWxhdGlvbiB2aWEgL3Byb2Mvc2NzaSBpbnRlcmZhY2UuCisKKworV2VkIEp1bCAxOSAwOToyMjozNCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy43IHJlbGVhc2VkLgorCisJKiBzY3NpX3Byb2MuYzogRml4ZWQgYSBudW1iZXIgb2YgYnVncyBpbiBkaXJlY3RvcnkgaGFuZGxpbmcKKworV2VkIEp1bCAxOSAwOToxODoyOCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy41IHJlbGVhc2VkLgorCisJKiBOYXRpdmUgd2lkZSwgbXVsdGljaGFubmVsIGFuZCAvcHJvYy9zY3NpIHN1cHBvcnQgbm93IGluIG9mZmljaWFsCisJa2VybmVsIGRpc3RyaWJ1dGlvbi4KKworICAgICAgICAqIHNjc2kuYy9oLCBob3N0cy5jL2ggZXQgYWwgcmVpbmRlbnRlZCB0byBpbmNyZWFzZSByZWFkYWJpbGl0eQorCShlc3BlY2lhbGx5IG9uIDgwIGNvbHVtbiB3aWRlIHRlcm1pbmFscykuCisKKwkqIHNjc2kuYywgc2NzaV9wcm9jLmMsIC4uLy4uL2ZzL3Byb2MvaW5vZGUuYzogQWRkZWQKKwkvcHJvYy9zY3NpL3Njc2kgd2hpY2ggYWxsb3dzIHJvb3QgdG8gc2NhbiBmb3IgaG90cGx1Z2dlZCBkZXZpY2VzLgorCisJKiBzY3NpLmMgKHNjc2lfcHJvY19pbmZvKTogQWRkZWQsIHRvIHN1cHBvcnQgL3Byb2Mvc2NzaS9zY3NpLgorCShzY2FuX3Njc2lzKTogQWRkZWQgc29tZSAnc3BhZ2hldHRpJyBjb2RlIHRvIGFsbG93IHNjYW5uaW5nIGZvcgorCXNpbmdsZSBkZXZpY2VzLgorCQorCitUaHUgSnVuIDIwIDE1OjIwOjI3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHByb2MuYzogUmVuYW1lZCB0byBzY3NpX3Byb2MuYworCitNb24gSnVuIDEyIDIwOjMyOjQ1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjAgcmVsZWFzZWQuCisKK01vbiBNYXkgMTUgMTk6MzM6MTQgMTk5NSAgTWljaGFlbCBOZXVmZmVyICA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBzY3NpLmM6IEFkZGVkIG5hdGl2ZSBtdWx0aWNoYW5uZWwgYW5kIHdpZGUgc2NzaSBzdXBwb3J0LgorCisJKiBwcm9jLmMgKGRpc3BhdGNoX3Njc2lfaW5mbykgKGJ1aWxkX3Byb2NfZGlyX2hiYV9lbnRyaWVzKToKKwlVcGRhdGVkIC9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCitUaHUgTWF5ICA0IDE3OjU4OjQ4IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogc2QuYyAocmVxdWV1ZV9zZF9yZXF1ZXN0KTogWmVybyBvdXQgdGhlIHNjYXR0ZXJsaXN0IG9ubHkgaWYKKwlzY3NpX21hbGxvYyByZXR1cm5lZCBtZW1vcnkgZm9yIGl0LgorCisJKiBlYXRhX2RtYS5jIChyZWdpc3Rlcl9IQkEpIChlYXRhX3F1ZXVlKTogQWRkIHN1cHBvcnQgZm9yCisJbGFyZ2Ugc2NhdHRlci9nYXRoZXIgdGFibGVzIGFuZCBzZXQgdXNlX2NsdXN0ZXJpbmcgYWNjb3JkaW5nbHkKKworCSogaG9zdHMuYzogTWFrZSB1c2VfY2x1c3RlcmluZyBjaGFuZ2VhYmxlIGluIHRoZSBTY3NpX0hvc3Qgc3RydWN0dXJlLgorCitXZWQgQXByIDEyIDE1OjI1OjUyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xNSAoRnJvbSBMZW9uYXJkIE4uIFp1YmtvZmYpLgorCUZpeGVkIGludGVycnVwdCByb3V0aW5lIHRvIGF2b2lkIHJhY2VzIHdoZW4gaGFuZGxpbmcgbXVsdGlwbGUKKwljb21wbGV0ZSBjb21tYW5kcyBwZXIgaW50ZXJydXB0LiAgU2VlbXMgdG8gY29tZSB1cCB3aXRoIGZhc3RlcgorCWNhcmRzLgorCisJKiBlYXRhX2RtYS5jOiBVcGRhdGUgdG8gMi4zLjVyLiBNb2R1bGFyaXplLiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZworICAgICAgICB0aHJvdWdob3V0IGFuZCBmaXhlZCBidWcgaW50ZXJydXB0IHJvdXRpbmUgd2hpY2ggcmVzdWx0ZWQgaW4gc2hpZnRlZAorICAgICAgICBzdGF0dXMgYnl0ZXMuIEFkZGVkIGJsaW5rIExFRCBzdGF0ZSBjaGVja3MgZm9yIElTQSBhbmQgRUlTQSBIQkFzLgorICAgICAgICBNZW1vcnkgbWFuYWdlbWVudCBidWcgc2VlbXMgdG8gaGF2ZSBkaXNhcHBlYXJlZCA9PT4gaW5jcmVhc2luZworICAgICAgICBDX1BfTF9DVVJSRU5UX01BWCB0byAxNiBmb3Igbm93LiBEZWNyZWFzaW5nIENfUF9MX0RJViB0byAzIGZvcgorICAgICAgICBwZXJmb3JtYW5jZSByZWFzb25zLgorCisJKiBzY3NpLmM6IElmIHdlIGdldCBhIEZNSywgRU9NLCBvciBJTEkgd2hlbiBhdHRlbXB0aW5nIHRvIHNjYW4KKwl0aGUgYnVzLCBhc3N1bWUgdGhhdCBpdCB3YXMganVzdCBub2lzZSBvbiB0aGUgYnVzLCBhbmQgaWdub3JlCisJdGhlIGRldmljZS4KKworCSogc2NzaS5oOiBVcGRhdGUgYW5kIGFkZCBhIGJ1bmNoIG9mIG1pc3NpbmcgY29tbWFuZHMgd2hpY2ggd2UKKwl3ZXJlIG5ldmVyIHVzaW5nLgorCisJKiBzZC5jOiBVc2UgcmVzdG9yZV9mbGFncyBpbiBkb19zZF9yZXF1ZXN0IC0gdGhpcyBtYXkgcmVzdWx0IGluCisJbGF0ZW5jeSBjb25kaXRpb25zLCBidXQgaXQgZ2V0cyByaWQgb2YgcmFjZXMgYW5kIGNyYXNoZXMuCisJRG8gbm90IHNhdmUgZmxhZ3MgYWdhaW4gd2hlbiBzZWFyY2hpbmcgZm9yIGEgc2Vjb25kIGNvbW1hbmQgdG8KKwlxdWV1ZS4KKworCSogc3QuYzogVXNlIGJ5dGVzLCBub3QgU1RQLT5idWZmZXItPmJ1ZmZlcl9zaXplIHdoZW4gcmVhZGluZworCWZyb20gdGFwZS4KKworCitUdWUgQXByICA0IDA5OjQyOjA4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNCByZWxlYXNlZC4KKworCSogc3QuYzogRml4IHR5cG8gLSByZXN0b3Jpbmcgd3JvbmcgZmxhZ3MuCisKK1dlZCBNYXIgMjkgMDY6NTU6MTIgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4zIHJlbGVhc2VkLgorCisJKiBzdC5jOiBQZXJmb3JtIHNvbWUgd2FpdGluZyBvcGVyYXRpb25zIHdpdGggaW50ZXJydXB0cyBvZmYuCisJSXMgdGhpcyBjb3JyZWN0Pz8/CisKK1dlZCBNYXIgMjIgMTA6MzQ6MjYgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4yIHJlbGVhc2VkLgorCisJKiBhaGExNTJ4LmM6IE1vZHVsYXJpemUuICBBZGQgc3VwcG9ydCBmb3IgUENNQ0lBLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDIuMC4gIEZpeGVkIGJ1ZyBwcmV2ZW50aW5nIG1lZGlhCisJZGV0ZWN0aW9uLiAgSWYgc2NzaV9yZWdpc3Rlcl9ob3N0IHJldHVybnMgTlVMTCwgZmFpbCBncmFjZWZ1bGx5LgorCisJKiBzY3NpLmM6IERldGVjdCBhcyBORUMgKGZvciBwaG90by1jZCBwdXJwb3NlcykgZm9yIHRoZSA4NAorCWFuZCAyNSBtb2RlbHMgYXMgIk5FQ19PTERDRFIiLgorCisJKiBzY3NpLmg6IEFkZCBkZWZpbmUgZm9yIE5FQ19PTERDRFIKKworCSogc3IuYzogQWRkIGhhbmRsaW5nIGZvciBORUNfT0xEQ0RSLiAgVHJlYXQgYXMgdW5rbm93bi4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gdmVyc2lvbiAyLjAuICBGaXhlZCBzYW1lIGJ1ZyBhcyBpbgorCWVhdGEuYy4KKworCitNb24gTWFyICA2IDExOjExOjIwIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuMCByZWxlYXNlZC4gIFllYWghISEKKworCSogTWlub3Igc3BlbGxpbmcvcHVuY3R1YXRpb24gY2hhbmdlcyB0aHJvdWdob3V0LiAgTm90aGluZworCXN1YnN0YW50aXZlLgorCitNb24gRmViIDIwIDIxOjMzOjAzIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTUgcmVsZWFzZWQuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjQxLgorCisJKiBzZWFnYXRlLmM6IENoYW5nZSBzb21lIG1lc3NhZ2UgdG8gYmUgbW9yZSBkZXNjcmlwdGl2ZSBhYm91dCB3aGF0CisJd2UgZGV0ZWN0ZWQuCisKKwkqIHNyLmM6IHNwZWxsaW5nL3doaXRlc3BhY2UgY2hhbmdlcy4KKworTW9uIEZlYiAyMCAyMTozMzowMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjk0IHJlbGVhc2VkLgorCitNb24gRmViIDIwIDA4OjU3OjE3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTMgcmVsZWFzZWQuCisKKwkqIGhvc3RzLmg6IENoYW5nZSBpb19wb3J0IHRvIGxvbmcgaW50IGZyb20gc2hvcnQuCisKKyAJKiA1M2M3LDh4eC5jOiBjcmFzaCBvbiBBRU4gZml4ZWQsIFNDU0kgcmVzZXQgaXMgbm8gbG9uZ2VyIGEgTk9QLAorIAkgIE5VTEwgcG9pbnRlciBwYW5pYyBvbiBvZGQgVURDcyBmaXhlZCwgdHdvIGJ1Z3MgaW4gZGlhZ25vc3RpYyBvdXRwdXQKKyAJICBmaXhlZCwgc2hvdWxkIGluaXRpYWxpemUgY29ycmVjdGx5IGlmIGxlZnQgcnVubmluZywgbm93IGxvYWRhYmxlLAorICAJICBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGV4dHJhbmVvdXMgZGlhZ25vc3RpYyBvdXRwdXQgc3VwcHJlc3NlZCwKKyAJICBzcGx4KCkgcmVwbGFjZWQgd2l0aCBzYXZlL3Jlc3RvcmUgZmxhZ3MuIFsgRHJldyBdCisKKwkqIGhvc3RzLmMsIGhvc3RzLmgsIHNjc2lfaW9jdGwuYywgc2QuYywgc2RfaW9jdGwuYywgc2cuYywgc3IuYywKKwlzcl9pb2N0bC5jOiBBZGQgc3BlY2lhbCBqdW5rIGF0IGVuZCB0aGF0IEVtYWNzIHdpbGwgdXNlIGZvcgorCWZvcm1hdHRpbmcgdGhlIGZpbGUuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdjAuNDBhLiAgSW1wcm92ZSBwYXJpdHkgaGFuZGxpbmcuCisKKwkqIHNjc2kuYzogQWRkIEhpdGFjaGkgREszMTJDIHRvIGJsYWNrbGlzdC4gIENoYW5nZSAifTsiIHRvICJ9IiBpbgorCW1hbnkgcGxhY2VzLiAgVXNlIHNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IGNvbW1hbmQgYmxvY2sgLSBtYXkKKwluZWVkIHRoaXMgdG8gYmUgZG1hIGNvbXBhdGlibGUgZm9yIHNvbWUgaG9zdCBhZGFwdGVycy4KKwlSZXN0b3JlIGludGVycnVwdHMgYWZ0ZXIgdW5yZWdpc3RlcmluZyBhIGhvc3QuCisKKwkqIHNkLmM6IFVzZSBzdGkgaW5zdGVhZCBvZiByZXN0b3JlIGZsYWdzIC0gY2F1c2VzIGxhdGVuY3kgcHJvYmxlbXMuCisKKwkqIHNlYWdhdGUuYzogVXNlIGNvbnRyb2xsZXJfdHlwZSB0byBkZXRlcm1pbmUgc3RyaW5nIHVzZWQgd2hlbgorCXJlZ2lzdGVyaW5nIGlycS4KKworCSogc3IuYzogTW9yZSBwaG90by1jZCBoYWNrcyB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSB4YSBzdHVmZiByaWdodC4KKwkqIHNyLmgsIHNyLmM6IENoYW5nZSBpc194YSB0byB4YV9mbGFncyBmaWVsZC4KKworCSogc3QuYzogRGlzYWJsZSByZXRyaWVzIGZvciB3cml0ZSBvcGVyYXRpb25zLgorCitXZWQgRmViIDE1IDEwOjUyOjU2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTIgcmVsZWFzZWQuCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIDEuMTcuCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSB0byAyLjMxYS4gQWRkIG1vcmUgc3VwcG9ydCBmb3IgL3Byb2Mvc2NzaS4KKyAgICAgICAgQ29udGludWluZyBtb2R1bGFyaXphdGlvbi4gTGVzcyBjcmFzaGVzIGJlY2F1c2Ugb2YgdGhlIGJ1ZyBpbiB0aGUKKyAgICAgICAgbWVtb3J5IG1hbmFnZW1lbnQgPT0+IGluY3JlYXNlIENfUF9MX0NVUlJFTlRfTUFYIHRvIDEwCisgICAgICAgIGFuZCBkZWNyZWFzZSBDX1BfTF9ESVYgdG8gNC4KKworCSogaG9zdHMuYzogSWYgd2UgcmVtb3ZlIGxhc3QgaG9zdCByZWdpc3RlcmVkLCByZXVzZSBob3N0IG51bWJlci4KKwlXaGVuIGZyZWVpbmcgbWVtb3J5IGZyb20gaG9zdCBiZWluZyBkZXJlZ2lzdGVyZWQsIGZyZWUgZXh0cmFfYnl0ZXMKKwl0b28uCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IG1lbXNldChTRHBudCwgMCkgYW5kIHNldCBTQ21kLmRldmljZSB0byBTRHBudC4KKwlDaGFuZ2UgbWVtb3J5IGFsbG9jYXRpb24gdG8gd29yayBhcm91bmQgYnVncyBpbiBfX2dldF9kbWFfcGFnZXMuCisJRG8gbm90IGZyZWUgaG9zdCBpZiB1c2FnZSBjb3VudCBpcyBub3QgemVybyAoZm9yIG1vZHVsZXMpLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDMwMDAuCisKKwkqIHN0LmM6IEFsbG93IGZvciBTVF9FWFRSQV9ERVZTIGluIHN0IGRhdGEgc3RydWN0dXJlcy4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gMS4xNy4KKworVGh1IEZlYiAgOSAxMDoxMToxNiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkxIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byAxLjE2LiAgVXNlIHdpc2hfYmxvY2sgaW5zdGVhZCBvZiBob3N0LT5ibG9jay4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSB3aXNoX2Jsb2NrIHRvIDAuCisKKwkqIGhvc3RzLmg6IEFkZCB3aXNoX2Jsb2NrLgorCisJKiBzY3NpLmM6IFVzZSB3aXNoX2Jsb2NrIGFzIGluZGljYXRvciB0aGF0IHRoZSBob3N0IHNob3VsZCBiZSBhZGRlZAorCXRvIGJsb2NrIGxpc3QuCisKKwkqIHNnLmM6IEFkZCBTR19FWFRSQV9ERVZTIHRvIG51bWJlciBvZiBzbG90cy4KKworCSogdTE0LTM0Zi5jOiBVc2Ugd2lzaF9ibG9jay4KKworVHVlIEZlYiAgNyAxMTo0NjowNCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkwIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IENoYW5nZSBuYW1pbmcgZnJvbSBlYXRhXyogdG8gZWF0YTJ4XyouICBOb3cgYXQgdmVycyAxLjE1LgorCVVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB0byB0YWtlIHB0X3JlZ3MgYXMgYXJnLiAgQWxsb3cgYmxvY2tpbmcKKwlldmVuIGlmIGxvYWRlZCBhcyBtb2R1bGUuICBJbml0aWFsaXplIHRhcmdldF90aW1lX291dCBhcnJheS4KKwlEbyBub3QgcHV0IHN0aSgpOyBpbiB0aW1pbmcgbG9vcC4KKworCSogaG9zdHMuYzogRG8gbm90IHJldXNlIGhvc3QgbnVtYmVycy4KKwlVc2Ugc2NzaV9tYWtlX2Jsb2NrZWRfbGlzdCB0byBnZW5lcmF0ZSBibG9ja2luZyBsaXN0LgorCisJKiBzY3JpcHRfYXNtLnBsOiAgQmVhdHMgbWUuICBEb24ndCBrbm93IHBlcmwuICBTb21ldGhpbmcgdG8gZG8gd2l0aAorCXBoYXNlIGluZGV4LgorCisJKiBzY3NpLmMgKHNjc2lfbWFrZV9ibG9ja2VkX2xpc3QpOiBOZXcgZnVuY3Rpb24gLSBjb2RlIGNvcGllZCBmcm9tCisJaG9zdHMuYy4KKworCSogc2NzaS5jOiBVcGRhdGUgY29kZSB0byBkaXNhYmxlIHBob3RvIENEIGZvciBUb3NoaWJhIGNkcm9tcy4KKwlVc2UganVzdCBtYW51ZmFjdHVyZXIgbmFtZSwgbm90IG1vZGVsIG51bWJlci4KKworCSogc3IuYzogRml4IHNldHRpbmcgZGVuc2l0eSBmb3IgVG9zaGliYSBkcml2ZXMuCisKKwkqIHUxNC0zNGYuYzogQ2xlYXIgdGFyZ2V0X3RpbWVfb3V0IGFycmF5IGR1cmluZyByZXNldC4KKworV2VkIEZlYiAgMSAwOToyMDo0NSAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjg5IHJlbGVhc2VkLgorCisJKiBNYWtlZmlsZSwgdTE0LTM0Zi5jOiBNb2R1bGFyaXplLgorCisJKiBNYWtlZmlsZSwgZWF0YS5jOiBNb2R1bGFyaXplLiAgTm93IHZlcnNpb24gMS4xNAorCisJKiBOQ1I1MzgwLmM6IFVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIG5ldyBhcmdsaXN0LiAgTWlub3IKKwljbGVhbnVwcy4KKworCSogZWF0YV9kbWEuYzogQmVnaW4gdG8gbW9kdWxhcml6ZS4gIEFkZCBob29rcyBmb3IgL3Byb2Mvc2NzaS4KKwlOZXcgdmVyc2lvbiAyLjMuMGEuIEFkZCBjb2RlIGluIGludGVycnVwdCBoYW5kbGVyIHRvIGFsbG93CisgICAgICAgIGNlcnRhaW4gQ0RST00gZHJpdmVycyB0byBiZSBkZXRlY3RlZCB3aGljaCByZXR1cm4gYQorICAgICAgICBDSEVDS19DT05ESVRJT04gZHVyaW5nIFNDU0kgYnVzIHNjYW4uIEFkZCBvcGNvZGUgY2hlY2sgdG8gZ2V0CisgICAgICAgIGFsbCBEQVRBIElOIGFuZCBEQVRBIE9VVCBwaGFzZXMgcmlnaHQuIFV0aWxpemUgSEJBX2ludGVycHJldCBmbGFnLgorCUltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uIFZhcmlvdXMgb3RoZXIgbWlub3Igc3R1ZmYuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgLT5kbWFfY2hhbm5lbCBhbmQgLT5pb19wb3J0IHdoZW4gcmVnaXN0ZXJpbmcKKwlhIG5ldyBob3N0LgorCisJKiBxbG9naWMuYzogTW9kdWxhcml6ZSBhbmQgYWRkIFBDTUNJQSBzdXBwb3J0LgorCisJKiBzY3NpLmM6IEFkZCBIaXRhY2hpIHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBDaGFuZ2UgZGVmYXVsdCB0byBubyBsdW4gc2NhbiAodG9vIG1hbnkgcHJvYmxlbSBkZXZpY2VzKS4KKworCSogc2NzaS5oOiBEZWZpbmUgUVVFVUVfRlVMTCBjb25kaXRpb24uCisKKwkqIHNkLmM6IERvIG5vdCBjaGVjayBmb3Igbm9uLWV4aXN0ZW50IHBhcnRpdGlvbiB1bnRpbCBhZnRlcgorCW5ldyBtZWRpYSBjaGVjay4KKworCSogc2cuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2Ugd2hpY2ggd2FzIHdyb25nLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDIwMDAuCisKKwkqIHN0LmM6IFBhdGNoZXMgZnJvbSBLYWkgLSBpbXByb3ZlIGZpbGVtYXJrIGhhbmRsaW5nLgorCitUdWUgSmFuIDMxIDE3OjMyOjEyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODggcmVsZWFzZWQuCisKKwkqIFRocm91Z2hvdXQgLSBzcGVsbGluZy9ncmFtbWFyIGZpeHVwcy4KKworCSogc2NzaS5jOiBNYWtlIHN1cmUgdGhhdCBhbGwgYnVmZmVycyBhcmUgMTYgYnl0ZSBhbGlnbmVkIC0gc29tZQorCWRyaXZlcnMgKGJ1c2xvZ2ljKSBuZWVkIHRoaXMuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IFJlbW92ZSBtZXNzYWdlIHByaW50ZWQuCisKKwkqIHNjc2kuYyAoc2NzaV9pbml0KTogTW92ZSBtZXNzYWdlIGhlcmUuCisKK01vbiBKYW4gMzAgMDY6NDA6MjUgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NyByZWxlYXNlZC4KKworCSogc3IuYzogUGhvdG8tY2QgcmVsYXRlZCBjaGFuZ2VzLiAoR2VyZCBLbm9ycj8/KS4KKworCSogc3QuYzogQ2hhbmdlcyBmcm9tIEthaSByZWxhdGVkIHRvIEVPTSBkZXRlY3Rpb24uCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NiByZWxlYXNlZC4KKworCSogNTNjNyw4eHguaDogQ2hhbmdlIFNHIHNpemUgdG8gMTI3LgorCisJKiBlYXRhX2RtYTogVXBkYXRlIHRvIHZlcnNpb24gMi4xMGkuIFJlbW92ZSBidWcgaW4gdGhlIHJlZ2lzdHJhdGlvbgorICAgICAgICBvZiBtdWx0aXBsZSBIQkFzIGFuZCBjaGFubmVscy4gTWlub3Igb3RoZXIgaW1wcm92ZW1lbnRzIGFuZCBzdHlsaXN0aWMKKyAgICAgICAgY2hhbmdlcy4KKworCSogc2NzaS5jOiBUZXN0IGZvciBUb3NoaWJhIFhNLTM0MDFUQSBhbmQgZXhjbHVkZSBmcm9tIGRldGVjdGlvbgorCWFzIHRvc2hpYmEgZHJpdmUgLSBwaG90byBjZCBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBkcml2ZS4KKworCSogc3IuYzogIFVwZGF0ZSBwaG90b2NkIGNvZGUuCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NSByZWxlYXNlZC4KKworCSogc3QuYywgc3RfaW9jdGwuYywgc2cuYywgc2RfaW9jdGwuYywgc2NzaV9pb2N0bC5jLCBob3N0cy5jOgorCWluY2x1ZGUgbGludXgvbW0uaAorCisJKiBxbG9naWMuYywgYnVzbG9naWMuYywgYWhhMTU0Mi5jOiBJbmNsdWRlIGxpbnV4L21vZHVsZS5oLgorCitTdW4gSmFuIDIyIDIyOjA4OjQ2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODQgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBTdXBwb3J0IGZvciBsb2FkYWJsZSBRTE9HSUMgYm9hcmRzLgorCisJKiBhaGExNTJ4LmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDEuOCBmcm9tIEp1ZXJnZW4uCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSBmcm9tIE1pY2hhZWwgTmV1ZmZlci4KKyAgICAgICAgUmVtb3ZlIGhhcmQgbGltaXQgb2YgMiBjb21tYW5kcyBwZXIgbHVuIGFuZCBtYWtlIGl0IGJldHRlcgorICAgICAgICBjb25maWd1cmFibGUuIEltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uCisKKwkqIGluMjAwMC5jOiBGaXggYmlvc3BhcmFtIHRvIHN1cHBvcnQgbGFyZ2UgZGlza3MuCisKKwkqIHFsb2dpYy5jOiBNaW5vciBjaGFuZ2VzIChjaGFuZ2Ugc3RpIC0+IHJlc3RvcmVfZmxhZ3MpLgorCitXZWQgSmFuIDE4IDIzOjMzOjA5IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODMgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuYyhhaGExNTQyX2ludHJfaGFuZGxlKTogVXNlIGFyZ3VtZW50cyBoYW5kZWQgZG93biB0byBmaW5kCisJd2hpY2ggaXJxLgorCisJKiBidXNsb2dpYy5jOiBMaWtld2lzZS4KKworCSogZWF0YV9kbWEuYzogVXNlIG1pbiBvZiAyIGNtZF9wZXJfbHVuIGZvciBPQ1NfZW5hYmxlZCBib2FyZHMuCisKKwkqIHNjc2kuYzogTWFrZSBSRUNPVkVSRURfRVJST1IgYSBTVUdHRVNUX0lTX09LLgorCisJKiBzZC5jOiBGYWlsIGlmIHdlIGFyZSBvcGVuaW5nIGEgbm9uLWV4aXN0ZW50IHBhcnRpdGlvbi4KKworCSogc3IuYzogQnVtcCBTUl9USU1FT1VUIHRvIDE1MDAwLgorCURvIG5vdCBwcm9iZSBmb3IgbWVkaWEgc2l6ZSBhdCBib290IHRpbWUoaGFyZCBvbiBjaGFuZ2VycykuCisJRmxhZyBkZXZpY2UgYXMgbmVlZGluZyBzZWN0b3Igc2l6ZSBpbnN0ZWFkLgorCisJKiBzcl9pb2N0bC5jOiBSZW1vdmUgQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCisJKiB1bHRyYXN0b3IuYzogRml4IGJ1ZyBpbiBjYWxsIHRvIHVsdHJhc3Rvcl9pbnRlcnJ1cHQgKHdyb25nICNhcmdzKS4KKworTW9uIEphbiAxNiAwNzoxODoyMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgyIHJlbGVhc2VkLgorCisJVGhyb3VnaG91dC4KKwktIENoYW5nZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGFjY2VwdCBuZXcgY2FsbGluZyBjb252ZW50aW9uLgorCUluIHBhcnRpY3VsYXIsIHdlIG5vdyByZWNlaXZlIHRoZSBpcnEgbnVtYmVyIGFzIG9uZSBvZiB0aGUgYXJndW1lbnRzLgorCisJKiBNb3JlIG1pbm9yIHNwZWxsaW5nIGNvcnJlY3Rpb25zIGluIHNvbWUgb2YgdGhlIG5ldyBmaWxlcy4KKworCSogYWhhMTU0Mi5jLCBidXNsb2dpYy5jOiBDbGVhbiB1cCBpbnRlcnJ1cHQgaGFuZGxlciBhIGxpdHRsZSBub3cKKwl0aGF0IHdlIHJlY2VpdmUgdGhlIGlycSBhcyBhbiBhcmcuCisKKwkqIGFoYTI3NHguYzogcy9zbmFyZl9yZWdpb24vcmVxdWVzdF9yZWdpb24vCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMi4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIHUxNC0zNGYuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMy4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIGVhdGFfZG1hLmM6IERlZmluZSBnZXRfYm9hcmRfZGF0YSBmdW5jdGlvbiAoc2VuZCBJTlFVSVJZIGNvbW1hbmQpLgorCVVzZSB0byBpbXByb3ZlIGRldGVjdGlvbiBvZiB2YXJpYW50cyBvZiBkaWZmZXJlbnQgRFBUIGJvYXJkcy4gIENoYW5nZQorCXZlcnNpb24gc3VibnVtYmVyIHRvICIwZyIuCisKKwkqIGZkb21haW4uYzogIFVwZGF0ZSB0byB2ZXJzaW9uIDUuMjYuICBJbXByb3ZlIGRldGVjdGlvbiBvZiBzb21lIGJvYXJkcworCXJlcGFja2FnZWQgYnkgSUJNLgorCisJKiBzY3NpLmMgKHNjc2lfcmVnaXN0ZXJfaG9zdCk6IENoYW5nZSAibmFtZSIgdG8gY29uc3QgY2hhciAqLgorCisJKiBzci5jOiBGaXggcHJvYmxlbSBpbiBzZXQgbW9kZSBjb21tYW5kIGZvciBUb3NoaWJhIGRyaXZlcy4KKworCSogc3IuYzogRml4IHR5cG8gZnJvbSBwYXRjaCA4MS4KKworRnJpIEphbiAxMyAxMjo1NDo0NiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgxIHJlbGVhc2VkLiAgQ29kZWZyZWV6ZSBmb3IgMS4yIHJlbGVhc2UgYW5ub3VuY2VkLgorCisJQmlnIGNoYW5nZXMgaGVyZS4KKworCSogZWF0YV9kbWEuKjogTmV3IGZpbGVzIGZyb20gTWljaGFlbCBOZXVmZmVyLgorCShuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGUpLiAgU2hvdWxkIHN1cHBvcnQKKwlhbGwgZWF0YS9kcHQgY2FyZHMuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBBZGQgZWF0YV9kbWEuCisKKwkqIFJFQURNRS5zdDogRG9jdW1lbnQgTVRFT00uCisKKwlQYXRjaGVzIGZyb20gbWUgKEVSWSkgdG8gZmluaXNoIHN1cHBvcnQgZm9yIGxvdy1sZXZlbCBsb2FkYWJsZSBzY3NpLgorCUl0IG5vdyB3b3JrcywgYW5kIGlzIGFjdHVhbGx5IHVzZWZ1bC4KKworCSogVGhyb3VnaG91dCAtIGFkZCBuZXcgYXJndW1lbnQgdG8gc2NzaV9pbml0X21hbGxvYyB0aGF0IHRha2VzIGFuCisJYWRkaXRpb25hbCBwYXJhbWV0ZXIuICBUaGlzIGlzIHVzZWQgYXMgYSBwcmlvcml0eSB0byBrbWFsbG9jLAorCWFuZCB5b3UgY2FuIHNwZWNpZnkgdGhlIEdGUF9ETUEgZmxhZyBpZiB5b3UgbmVlZCBETUEtYWJsZSBtZW1vcnkuCisKKwkqIE1ha2VmaWxlOiBGb3Igc291cmNlIGZpbGVzIHRoYXQgYXJlIGxvYWRhYmxlLCBhbHdheXMgYWRkIG5hbWUKKwl0byBTQ1NJX1NSQ1MuICBGaWxsIGluIG1vZHVsZXM6IHRhcmdldC4KKworCSogaG9zdHMuYzogIENoYW5nZSBuZXh0X2hvc3QgdG8gbmV4dF9zY3NpX2hvc3QsIGFuZCBtYWtlIGdsb2JhbC4KKwlQcmludCBob3N0cyBhZnRlciB3ZSBoYXZlIGlkZW50aWZpZWQgYWxsIG9mIHRoZW0uICBVc2UgaW5mbygpCisJZnVuY3Rpb24gaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHVzZSBuYW1lIGZpZWxkLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgYXR0YWNoIGZ1bmN0aW9uIHRvIHJldHVybiBpbnQsIG5vdCB2b2lkLgorCURlZmluZSBudW1iZXIgb2YgZGV2aWNlIHNsb3RzIHRvIGFsbG93IGZvciBsb2FkYWJsZSBkZXZpY2VzLgorCURlZmluZSB0YWdzIHRvIHRlbGwgc2NzaSBtb2R1bGUgY29kZSB3aGF0IHR5cGUgb2YgbW9kdWxlIHdlCisJYXJlIGxvYWRpbmcuCisKKwkqIHNjc2kuYzogRml4IHNjYW5fc2NzaXMgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGJ5IGEgdXNlciBwcm9jZXNzLgorCURvIG5vdCB1c2Ugd2FpdGluZyBsb29wcyAtIHVzZSB1cCBhbmQgZG93biBtZWNoYW5pc20gYXMgbG9uZworCWFzIGN1cnJlbnQgIT0gdGFza1swXS4KKworCSogc2NzaS5jKHNjYW5fc2NzaXMpOiBEbyBub3QgdXNlIHN0YWNrIHZhcmlhYmxlcyBmb3IgSS9PIC0gdGhpcworCWNvdWxkIGJlID4gMTZNYiBpZiB3ZSBhcmUgbG9hZGluZyBhIG1vZHVsZSBhdCBydW50aW1lIChpLmUuIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IHNvbWUgbWVtb3J5IHdlIGtub3cgd2lsbCBiZSBzYWZlKS4KKworCSogc2NzaS5jOiBDaGFuZ2UgZG1hIGZyZWVsaXN0IHRvIGJlIGEgc2V0IG9mIHBhZ2VzLiAgVGhpcyBhbGxvd3MKKwl1cyB0byBkeW5hbWljYWxseSBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGxpc3QgYnkgYWRkaW5nIG1vcmUgcGFnZXMKKwl0byB0aGUgcGFnZWxpc3QuICBGaXggc2NzaV9tYWxsb2MgYW5kIHNjc2lfZnJlZSBhY2NvcmRpbmdseS4KKworCSogc2NzaV9tb2R1bGUuYzogRml4IGluY2x1ZGUuCisKKwkqIHNkLmM6IERlY2xhcmUgZGV0YWNoIGZ1bmN0aW9uLiAgSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UKKwljb3VudCBhcyByZXF1aXJlZC4gIEZpeCBpbml0IGZ1bmN0aW9ucyB0byBhbGxvdyBsb2FkZWQgZGV2aWNlcy4KKwlSZXZhbGlkYXRlIGFsbCBuZXcgZGlza3Mgc28gd2UgZ2V0IHRoZSBwYXJ0aXRpb24gdGFibGVzLiAgRGVmaW5lCisJZGV0YWNoIGZ1bmN0aW9uLgorCisJKiBzci5jOiBMaWtld2lzZS4KKworCSogc2cuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBBbGxvdyBhdHRhY2htZW50IG9mIGRldmljZXMgb24KKwlsb2FkZWQgZHJpdmVycy4KKworCSogc3QuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBJbmNyZW1lbnQvZGVjcmVtZW50IG1vZHVsZSB1c2FnZQorCWNvdW50IGFzIHJlcXVpcmVkLgorCitUdWUgSmFuIDEwIDEwOjA5OjU4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzkgcmVsZWFzZWQuCisKKwlQYXRjaCBmcm9tIHNvbWUgdW5kZXRlcm1pbmVkIGluZGl2aWR1YWwgd2hvIG5lZWRzIHRvIGdldCBhIGxpZmUgOi0pLgorCisJKiBzci5jOiBBdHRhY2tlZCBieSBzcGVsbGluZyBiZWUuLi4KKworCVBhdGNoZXMgZnJvbSBHZXJkIEtub3JyOgorCisJKiBzci5jOiBtYWtlIHByaW50ayBtZXNzYWdlcyBmb3IgcGhvdG9DRCBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aXZlLgorCisJKiBzcl9pb2N0bC5jOiBGaXggQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCitNb24gSmFuICA5IDEwOjAxOjM3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzggcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBBZGQgZW1wdHkgbW9kdWxlczogdGFyZ2V0LgorCisJKiBXaGVlZS4gIE5vdyBjaGFuZ2UgcmVnaXN0ZXJfaW9tZW0gdG8gcmVxdWVzdF9yZWdpb24uCisKKwkqIGluMjAwMC5jOiBCdWdmaXggLSBhcHBhcmVudGx5IHRoaXMgaXMgdGhlIGZpeCB0aGF0IHdlIGhhdmUKKwlhbGwgYmVlbiB3YWl0aW5nIGZvci4gIEl0IGZpeGVzIGEgcHJvYmxlbSB3aGVyZWJ5IHRoZSBkcml2ZXIKKwlpcyBub3Qgc3RhYmxlIHVuZGVyIGhlYXZ5IGxvYWQuICBSYWNlIGNvbmRpdGlvbiBhbmQgYWxsIHRoYXQuCisJUGF0Y2ggZnJvbSBQZXRlciBMdS4KKworV2VkIEphbiAgNCAyMToxNzo0MCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjc3IHJlbGVhc2VkLgorCisJKiA1M2M3LDh4eC5jOiBGaXggZnJvbSBMaW51cyAtIGVtdWxhdGUgc3BseC4KKworCVRocm91Z2hvdXQ6CisKKwkJQ2hhbmdlICJzbmFyZl9yZWdpb24iIHdpdGggInJlZ2lzdGVyX2lvbWVtIi4KKworCSogc2NzaV9tb2R1bGUuYzogTmV3IGZpbGUuICBDb250YWlucyBzdXBwb3J0IGZvciBsb3ctbGV2ZWwgbG9hZGFibGUKKwkgIHNjc2kgZHJpdmVycy4gW0VSWV0uCisKKwkqIHNkLmM6IE1vcmUgcy9pbnQvbG9uZy8gY2hhbmdlcy4KKworCSogc2VhZ2F0ZS5jOiBFeHBsaWNpdGx5IGluY2x1ZGUgbGludXgvY29uZmlnLmgKKworCSogc2cuYzogSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UgY291bnQgb24gb3Blbi9jbG9zZS4KKworCSogc2cuYzogQmUgYSBiaXQgbW9yZSBjYXJlZnVsIGFib3V0IHRoZSB1c2VyIG5vdCBzdXBwbHlpbmcgZW5vdWdoCisJICBpbmZvcm1hdGlvbiBmb3IgYSB2YWxpZCBjb21tYW5kLiAgUGFzcyBjb3JyZWN0IHNpemUgZG93biB0bworCSAgc2NzaV9kb19jbWQuCisKKwkqIHNyLmM6ICBNb3JlIGNoYW5nZXMgZm9yIFBob3RvLUNELiAgVGhpcyBhcHBhcmVudGx5IGJyZWFrcyBORUMgZHJpdmVzLgorCisJKiBzcl9pb2N0bC5jOiAgU3VwcG9ydCBDRFJPTU1VTFRJU0VTU0lPTiBpb2N0bC4KKworCitTdW4gSmFuICAxIDE5OjU1OjIxIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzYgcmVsZWFzZWQuCisKKwkqIGNvbnN0YW50cy5jOiBBZGQgdHlwZSBjYXN0IGluIHN3aXRjaCBzdGF0ZW1lbnQuCisKKwkqIHNjc2kuYyAoc2NzaV9mcmVlKTogQ2hhbmdlIGRhdGF0eXBlIG9mICJvZmZzZXQiIHRvIGxvbmcuCisJICAoc2NzaV9tYWxsb2MpOiBDaGFuZ2UgYSBmZXcgbW9yZSB2YXJpYWJsZXMgdG8gbG9uZy4gIFdobworCSAgZGlkIHRoaXMgYW5kIHdoeSB3YXMgaXQgaW1wb3J0YW50PyAgNjQgYml0IG1hY2hpbmVzPworCisKKwlMb3RzIG9mIGNoYW5nZXMgdG8gdXNlIHNhdmVfc3RhdGUvcmVzdG9yZV9zdGF0ZSBpbnN0ZWFkIG9mIGNsaS9zdGkuCisJRmlsZXMgY2hhbmdlZCBpbmNsdWRlOgorCisJKiBhaGExNTQyLmM6CisJKiBhaGExNzQwLmM6CisJKiBidXNsb2dpYy5jOgorCSogaW4yMDAwLmM6CisJKiBzY3NpLmM6CisJKiBzY3NpX2RlYnVnLmM6CisJKiBzZC5jOgorCSogc3IuYzoKKwkqIHN0LmM6CisKK1dlZCBEZWMgMjggMTY6Mzg6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogU3BlbGxpbmcgZml4LgorCisJKiBzY3NpLmM6IEFkZCBIUCBDMTc5MEEgYW5kIEMyNTAwQSBzY2FuamV0IHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBTcGVsbGluZyBmaXh1cC4KKworCSogc2QuYzogQWRkIHN1cHBvcnQgZm9yIHNkX2hhcmRzaXplcyAoaGFyZCBzZWN0b3Igc2l6ZXMpLgorCisJKiB1bHRyYXN0b3IuYzogVXNlIHNhdmVfZmxhZ3MvcmVzdG9yZV9mbGFncyBpbnN0ZWFkIG9mIGNsaS9zdGkuCisKK0ZyaSBEZWMgMjMgMTM6MzY6MjUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NCByZWxlYXNlZC4KKworCSogUkVBRE1FLnN0OiBVcGRhdGUgZnJvbSBLYWkgTWFraXNhcmEuCisKKwkqIGVhdGEuYzogTmV3IHZlcnNpb24gZnJvbSBEYXJpbyAtIHZlcnNpb24gMS4xMS4KKwkgIHVzZSBzY3NpY2FtIGJpb3NfcGFyYW0gcm91dGluZS4gIEFkZCBzdXBwb3J0IGZvciAyMDExCisJICBhbmQgMjAyMSBib2FyZHMuCisKKwkqIGhvc3RzLmM6IEFkZCBzdXBwb3J0IGZvciBibG9ja2luZy4gIExpbmtlZCBsaXN0IGF1dG9tYXRpY2FsbHkKKwkgIGdlbmVyYXRlZCB3aGVuIHNocG50LT5ibG9jayBpcyBzZXQuCisKKwkqIHNjc2kuYzogQWRkIHNhbmt5byAmIEhQIHNjYW5qZXQgdG8gYmxhY2tsaXN0LiAgQWRkIHN1cHBvcnQgZm9yCisJICBraWNraW5nIHRoaW5ncyBsb29zZSB3aGVuIHdlIGRlYWRsb2NrLgorCisJKiBzY3NpLmM6IFJlY29nbml6ZSBzY2FubmVycyBhbmQgcHJvY2Vzc29ycyBpbiBzY2FuX3Njc2lzLgorCisJKiBzY3NpX2lvY3RsLmg6IEluY3JlYXNlIHRpbWVvdXQgdG8gOSBzZWNvbmRzLgorCisJKiBzdC5jOiBOZXcgdmVyc2lvbiBmcm9tIEthaSAtIGFkZCBiZXR0ZXIgc3VwcG9ydCBmb3IgYmFja3NwYWNlLgorCisJKiB1MTQtMzRmLmM6IE5ldyB2ZXJzaW9uIGZyb20gRGFyaW8uICBTdXBwb3J0cyBibG9ja2luZy4KKworV2VkIERlYyAxNCAxNDo0NjozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjczIHJlbGVhc2VkLgorCisJKiBidXNsb2dpYy5jOiBVcGRhdGUgZnJvbSBEYXZlIEdlbnR6ZWwuICBWZXJzaW9uIDEuMTQuCisJICBBZGQgbW9kdWxlIHJlbGF0ZWQgc3R1ZmYuICAgTW9yZSBmYXVsdCB0b2xlcmFudCBpZiBvdXQgb2YKKwkgIERNQSBtZW1vcnkuCisKKwkqIGZkb21haW4uYzogTmV3IHZlcnNpb24gZnJvbSBSaWsgRmFpdGggLSB2ZXJzaW9uIDUuMjIuICBBZGQgc3VwcG9ydAorCSAgZm9yIElTQS0yMDBTIFNDU0kgYWRhcHRlci4KKworCSogaG9zdHMuYzogU3BlbGxpbmcuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjM4YS4gIEFkZCBtb3JlIHN1cHBvcnQgZm9yIFBDTUNJQS4KKworCSogc2NzaS5jOiBNYXNrIGRldmljZSB0eXBlIHdpdGggMHgxZiBkdXJpbmcgc2Nhbl9zY3Npcy4KKwkgIEFkZCBzdXBwb3J0IGZvciBkZWFkbG9ja2luZywgZXJyLCBtYWtlIHRoYXQgZ2V0dGluZyBvdXQgb2YKKwkgIGRlYWRsb2NrIHNpdHVhdGlvbnMgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIHdlIGFsbG93IHRoZSB1c2VyCisJICB0byBsaW1pdCByZXF1ZXN0cyB0byBvbmUgaG9zdCBhZGFwdGVyIGF0IGEgdGltZS4KKworCSogc2NzaS5jOiBCdWdmaXggLSBwYXNzIHBpZCwgbm90IFNDcG50IGFzIHNlY29uZCBhcmcgdG8KKwkgIHNjc2lfdGltZXNfb3V0LgorCisJKiBzY3NpLmM6IFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHRvIHByZXZpb3VzIHZhbHVlIGluc3RlYWQgb2YgdXNpbmcKKwkgIGNsaS9zdGkgcGFpcnMuCisKKwkqIHNjc2kuYzogQWRkIGEgYnVuY2ggb2YgbW9kdWxlIHN0dWZmIChhbGwgY29tbWVudGVkIG91dCBmb3Igbm93KS4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBzY3NpX2R1bXBfc3RhdHVzLgorCitUdWUgRGVjICA2IDEyOjM0OjIwIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzIgcmVsZWFzZWQuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGFsd2F5cyB1c2Ugc2dfZnJlZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBiaWcgYnVmZi4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcxIHJlbGVhc2VkLgorCisJKiBzZy5jOiBDbGVhciBidWZmIGZpZWxkIHdoZW4gbm90IGluIHVzZS4gIE9ubHkgY2FsbCBzY3NpX2ZyZWUgaWYKKwlub24tbnVsbC4KKworCSogc2NzaS5oOiBDYWxsIHdha2VfdXAoJndhaXRfZm9yX3JlcXVlc3QpIHdoZW4gZG9uZSB3aXRoIGEKKwljb21tYW5kLgorCisJKiBzY3NpLmMgKHNjc2lfdGltZXNfb3V0KTogUGFzcyBwaWQgZG93biBzbyB0aGF0IHdlIGNhbiBwcm90ZWN0CisJYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuCisKKwkqIHNjc2kuYyAoc2NzaV9hYm9ydCk6IFplcm8gdGltZW91dCBmaWVsZCBpZiB3ZSBnZXQgdGhlCisJTk9UX1JVTk5JTkcgbWVzc2FnZSBiYWNrIGZyb20gbG93LWxldmVsIGRyaXZlci4KKworCisJKiBzY3NpLmMgKHNjc2lfZG9uZSk6IFJlc3RvcmUgY21kX2xlbiwgdXNlX3NnIGhlcmUuCisKKwkqIHNjc2kuYyAocmVxdWVzdF9zZW5zZSk6IE5vdCBoZXJlLgorCisJKiBob3N0cy5oOiBBZGQgbmV3IGZvcmJpZGRlbl9hZGRyLCBmb3JiaWRkZW5fc2l6ZSBmaWVsZHMuICBXaG8KKwlhZGRlZCB0aGVzZSBhbmQgd2h5Pz8/PworCisJKiBob3N0cy5jIChzY3NpX21lbV9pbml0KTogTWFyayBwYWdlcyBhcyByZXNlcnZlZCBpZiB0aGV5IGZhbGwgaW4KKwl0aGUgZm9yYmlkZGVuIHJlZ2lvbnMuICBJIGFtIG5vdCBzdXJlIC0gSSB0aGluayB0aGlzIGlzIHNvIHRoYXQKKwl3ZSBjYW4gZGVhbCB3aXRoIGJvYXJkcyB0aGF0IGRvIGluY29tcGxldGUgZGVjb2Rpbmcgb2YgdGhlaXIKKwlhZGRyZXNzIGxpbmVzIGZvciB0aGUgYmlvcyBjaGlwcywgYnV0IEkgYW0gbm90IGVudGlyZWx5IHN1cmUuCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBmb3JiaWRkZW5fYWRkciBzdHVmZiBpZiB1c2luZyBhIGJ1Z2d5IGJvYXJkLgorCisJKiBhaGExNzQwLmM6IFRlc3QgZm9yIE5VTEwgcG9pbnRlciBpbiBTQ3RtcC4gIFRoaXMgc2hvdWxkIG5vdAorCW9jY3VyLCBidXQgYSBuaWNlIG1lc3NhZ2UgaXMgYmV0dGVyIHRoYW4gYSBrZXJuZWwgc2VnZmF1bHQuCisKKwkqIDUzYzcsOHh4LmM6IEFkZCBuZXcgUENJIGNoaXAgSUQgZm9yIDgxNS4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcwIHJlbGVhc2VkLgorCisJKiBDaGFuZ2VMb2csIHN0LmM6IFNwZWxsaW5nLgorCitUdWUgTm92IDI5IDE4OjQ4OjQyIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNjkgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuaDogTm9uLWZ1bmN0aW9uYWwgY2hhbmdlLiAgW0RhcmlvXS4KKworCSogdTE0LTM0Zi5jOiBVc2UgYmxvY2sgZmllbGQgaW4gU2NzaV9Ib3N0IHRvIHByZXZlbnQgY29tbWFuZHMgZnJvbQorCWJlaW5nIHF1ZXVlZCB0byBtb3JlIHRoYW4gb25lIGhvc3QgYXQgdGhlIHNhbWUgdGltZSAodXNlZCB3aGVuCisJbW90aGVyYm9hcmQgZG9lcyBub3QgZGVhbCB3aXRoIG11bHRpcGxlIGJ1cy1tYXN0ZXJzIHZlcnkgd2VsbCkuCisJT25seSB3aGVuIFNJTkdMRV9IT1NUX09QRVJBVElPTlMgaXMgZGVmaW5lZC4KKwlVc2UgbmV3IGNtZF9wZXJfbHVuIGZpZWxkLiAgW0RhcmlvXQorCisJKiBlYXRhLmM6IExpa2V3aXNlLgorCisJKiBzdC5jOiBNb3JlIGNoYW5nZXMgZnJvbSBLYWkuICBBZGQgcmVhZHkgZmxhZyB0byBpbmRpY2F0ZSBkcml2ZQorCXN0YXR1cy4KKworCSogUkVBRE1FLnN0OiBEb2N1bWVudCB0aGlzLgorCisJKiBzci5jOiBCdWdmaXggKGRvIG5vdCBzdWJ0cmFjdCBDRF9CTE9DS19PRkZTRVQpIGZvciBwaG90by1jZAorCWNvZGUuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGZpeCBwcm9ibGVtIHdoZXJlIG9wY29kZSBpcyBub3QgY29ycmVjdGx5IHNldCB1cC4KKworCSogc2VhZ2F0ZS5bYyxoXTogVXNlICNkZWZpbmVzIHRvIHNldCBkcml2ZXIgbmFtZS4KKworCSogc2NzaV9pb2N0bC5jOiBaZXJvIGJ1ZmZlciBiZWZvcmUgZXhlY3V0aW5nIGNvbW1hbmQuCisKKwkqIHNjc2kuYzogVXNlIG5ldyBjbWRfcGVyX2x1biBmaWVsZCBpbiBTY3NpX0hvc3RzIGFzIGFwcHJvcHJpYXRlLgorCUFkZCBTb255IENEVTU1UyB0byBibGFja2xpc3QuCisKKwkqIGhvc3RzLmg6IEFkZCBuZXcgY21kX3Blcl9sdW4gZmllbGQgdG8gU2NzaV9Ib3N0cy4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSBjbWRfcGVyX2x1biBpbiBTY3NpX0hvc3RzIGZyb20gdGVtcGxhdGUuCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjbWRfcGVyX2x1biBmaWVsZCAtIGluaXRpYWxpemUgdG8gZGlmZmVyZW50CisJdmFsdWVzIGRlcGVuZGluZyB1cG9uIGJ1cyB0eXBlIChpLmUuIHVzZSAxIGlmIElTQSwgc28gd2UgZG8gbm90CisJaG9nIG1lbW9yeSkuICBVc2Ugb3RoZXIgcGF0Y2hlcyB3aGljaCBnb3QgbG9zdCBmcm9tIDEuMS42OC4KKworCSogYWhhMTU0Mi5jOiBTcGVsbGluZy4KKworVHVlIE5vdiAyOSAxNTo0Mzo1MCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjggcmVsZWFzZWQuCisKKwlBZGQgc3VwcG9ydCBmb3IgMTIgYnl0ZSB2ZW5kb3Igc3BlY2lmaWMgY29tbWFuZHMgaW4gc2NzaS1nZW5lcmljcywKKwltb3JlIChpLmUuIHRoZSBsYXN0IG1hbmRhdG9yeSkgbG93LWxldmVsIGNoYW5nZXMgdG8gc3VwcG9ydAorCWxvYWRhYmxlIG1vZHVsZXMsIHBsdXMgYSBmZXcgb3RoZXIgY2hhbmdlcyBwZW9wbGUgaGF2ZSByZXF1ZXN0ZWQKKwlsYXRlbHkuICBDaGFuZ2VzIGJ5IG1lIChFUlkpIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBTcGVsbGluZworCWNoYW5nZXMgYXBwZWFyIGZyb20gc29tZSB1bmtub3duIGNvcm5lciBvZiB0aGUgdW5pdmVyc2UuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBDT01NQU5EX1NJWkUoKSB0byB1c2UgU0NwbnQtPmNtZF9sZW4uCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBpbmZvKCkgbG93IGxldmVsIGZ1bmN0aW9uIHRvIHRha2UgYSBTY3NpX0hvc3QKKwlwb2ludGVyLiAgVGhpcyB3YXkgdGhlIGluZm8gZnVuY3Rpb24gY2FuIHJldHVybiBzcGVjaWZpYworCWluZm9ybWF0aW9uIGFib3V0IHRoZSBob3N0IGluIHF1ZXN0aW9uLCBpZiBkZXNpcmVkLgorCisJKiBBbGwgbG93LWxldmVsIGRyaXZlcnM6IEFkZCBOVUxMIGluIGluaXRpYWxpemVyIGZvciB0aGUKKwl1c2FnZV9jb3VudCBmaWVsZCBhZGRlZCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGFoYTE1MnguW2MsaF06IFJlbW92ZSByZWR1bmRhbnQgaW5mbygpIGZ1bmN0aW9uLgorCisJKiBhaGExNTQyLltjLGhdOiBMaWtld2lzZS4KKworCSogYWhhMTc0MC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIGFoYTI3NHguW2MsaF06IExpa2V3aXNlLgorCisJKiBlYXRhLltjLGhdOiBMaWtld2lzZS4KKworCSogcGFzMTYuW2MsaF06IExpa2V3aXNlLgorCisJKiBzY3NpX2RlYnVnLltjLGhdOiBMaWtld2lzZS4KKworCSogdDEyOC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIHUxNC0zNGYuW2MsaF06IExpa2V3aXNlLgorCisJKiB1bHRyYXN0b3IuW2MsaF06IExpa2V3aXNlLgorCisJKiB3ZDcwMDAuW2MsaF06IExpa2V3aXNlLgorCisJKiBhaGExNTQyLmM6IEFkZCBzdXBwb3J0IGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyB3aXRoIGxpbG8gdG8gc2V0CisJRE1BIHBhcmFtZXRlcnMsIEkvTyBwb3J0LiAgRnJvbSBNYXR0IEFhcm5pby4KKworCSogYnVzbG9naWMuW2MsaF06IE5ldyB2ZXJzaW9uICgxLjEzKSBmcm9tIERhdmUgR2VudHplbC4KKworCSogaG9zdHMuaDogQWRkIG5ldyBmaWVsZCB0byBTY3NpX0hvc3RzICJibG9jayIgdG8gYWxsb3cgYmxvY2tpbmcKKwlhbGwgSS9PIHRvIGNlcnRhaW4gb3RoZXIgY2FyZHMuICBIZWxwcyBwcmV2ZW50IHByb2JsZW1zIHdpdGggc29tZQorCUlTQSBtb3RoZXJib2FyZHMuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2FnZV9jb3VudCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBuX2lvX3BvcnQgdG8gU2NzaV9Ib3N0ICh1c2VkIHdoZW4gcmVsZWFzaW5nIG1vZHVsZSkuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgYmxvY2sgZmllbGQuCisKKwkqIGluMjAwMC5jOiBSZW1vdmUgInN0YXRpYyIgZGVjbGFyYXRpb25zIGZyb20gZXhwb3J0ZWQgZnVuY3Rpb25zLgorCisJKiBpbjIwMDAuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogQ29ycmVjdGx5IHNldCBjbWRfbGVuIGZpZWxkIGFzIHJlcXVpcmVkLiAgU2F2ZSBhbmQKKwljaGFuZ2Ugc2V0dGluZyB3aGVuIGRvaW5nIGEgcmVxdWVzdF9zZW5zZSwgcmVzdG9yZSB3aGVuIGRvbmUuCisJTW92ZSBhYm9ydCB0aW1lb3V0IG1lc3NhZ2UuICBGaXggcGFuaWMgaW4gcmVxdWVzdF9xdWV1ZWFibGUgdG8KKwlwcmludCBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuCisKKwkqIHNjc2kuYzogV2hlbiBpbmNyZW1lbnRpbmcgdXNhZ2UgY291bnQsIHdhbGsgYmxvY2sgbGlua2VkIGxpc3QKKwlmb3IgaG9zdCwgYW5kIG9yIGluIFNDU0lfSE9TVF9CTE9DSyBiaXQuICBXaGVuIGRlY3JlbWVudGluZyB1c2FnZQorCWNvdW50IHRvIDAsIGNsZWFyIHRoaXMgYml0IHRvIGFsbG93IHVzYWdlIHRvIGNvbnRpbnVlLCB3YWtlIHVwCisJcHJvY2Vzc2VzIHdhaXRpbmcuCisKKworCSogc2NzaV9pb2N0bC5jOiBJZiB3ZSBoYXZlIGFuIGluZm8oKSBmdW5jdGlvbiwgY2FsbCBpdCwgb3RoZXJ3aXNlCisJaWYgd2UgaGF2ZSBhICJuYW1lIiBmaWVsZCwgdXNlIGl0LCBlbHNlIGRvIG5vdGhpbmcuCisKKwkqIHNkLmMsIHNyLmM6IENsZWFyIGNtZF9sZW4gZmllbGQgcHJpb3IgdG8gZWFjaCBjb21tYW5kIHdlCisJZ2VuZXJhdGUuCisKKwkqIHNkLmg6IEFkZCAiaGFzX3BhcnRfdGFibGUiIGJpdCB0byByc2NzaV9kaXNrcy4KKworCSogc2cuW2MsaF06IEFkZCBzdXBwb3J0IGZvciB2ZW5kb3Igc3BlY2lmaWMgMTIgYnl0ZSBjb21tYW5kcyAoaS5lLgorCW92ZXJyaWRlIGNvbW1hbmQgbGVuZ3RoIGluIENPTU1BTkRfU0laRSkuCisKKwkqIHNyLmM6IEJ1Z2ZpeCBmcm9tIEdlcmQgaW4gcGhvdG9jZCBjb2RlLgorCisJKiBzci5jOiBCdWdmaXggaW4gZ2V0X3NlY3RvcnNpemUgLSBhbHdheXMgdXNlIHNjc2lfbWFsbG9jIGJ1ZmZlciAtCisJd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBzdGFjayBpcyA8IDE2TWIuCisKK1R1ZSBOb3YgMjIgMTU6NDA6NDYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjY3IHJlbGVhc2VkLgorCisJKiBzci5jOiBDaGFuZ2Ugc3BlbGxpbmcgb2YgbWFudWZhY3RvciB0byBtYW51ZmFjdHVyZXIuCisKKwkqIHNjc2kuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogTGlrZXdpc2UuCisKKwkqIHFsb2dpYy5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogaW4yMDAwLmg6IFNwZWxsaW5nIGNvcnJlY3Rpb25zLgorCisJKiBpbjIwMDAuYzogVXBkYXRlIGZyb20gQmlsbCBFYXJuZXN0LCBjaGFuZ2UgZnJvbQorCWpzaGlmZmxlQG5ldGNvbS5jb20uICBTdXBwb3J0IG5ldyBiaW9zIHZlcnNpb25zLgorCisJKiBSRUFETUUucWxvZ2ljOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitUdWUgTm92IDIyIDE1OjQwOjQ2IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NiByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogc3IuW2gsY106IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1zZXNzaW9uIENEcyBmcm9tIEdlcmQgS25vcnIuCisKKwkqIHNjc2kuaDogQWRkIG1hbnVmYWN0b3IgZmllbGQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGV2aWNlCisJbWFudWZhY3R1cmVyLgorCisJKiBzY3NpLmM6IE1vcmUgc3BlbGxpbmcgY29ycmVjdGlvbnMuCisKKwkqIHFsb2dpYy5oLCBxbG9naWMuYywgUkVBRE1FLnFsb2dpYzogTmV3IGRyaXZlciBmcm9tIFRvbSBaZXJ1Y2hhLgorCisJKiBpbjIwMDAuYywgaW4yMDAwLmg6IE5ldyBkcml2ZXIgZnJvbSBCcmFkIE1jTGVhbi9CaWxsIEVhcm5lc3QuCisKKwkqIGZkb21haW4uYzogU3BlbGxpbmcgY29ycmVjdGlvbi4KKworCSogZWF0YS5jOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitGcmkgTm92IDE4IDE1OjIyOjQ0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NSByZWxlYXNlZC4KKworCSogZWF0YS5oOiBVcGRhdGUgdmVyc2lvbiBzdHJpbmcgdG8gMS4wOC4wMC4KKworCSogZWF0YS5jOiBTZXQgc2dfdGFibGVzaXplIGNvcnJlY3RseSBmb3IgRFBUIFBNMjAxMiBib2FyZHMuCisKKwkqIGFoYTI3NHguc2VxOiBTcGVsbCBjaGVja2luZy4KKworCSogUkVBRE1FLnN0OiBMaWtld2lzZS4KKworCSogUkVBRE1FLmFoYTI3NHg6IExpa2V3aXNlLgorCisJKiBDaGFuZ2VMb2c6IExpa2V3aXNlLgorCitUdWUgTm92IDE1IDE1OjM1OjA4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NCByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5oOiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgdG8gMS4xMC4wMS4KKworCSogdTE0LTM0Zi5jOiBVc2UgU2NzaV9Ib3N0IGNhbl9xdWV1ZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9uZSBmcm9tIHRlbXBsYXRlLgorCisJKiBlYXRhLltjLGhdOiBOZXcgZHJpdmVyIGZvciBEUFQgYm9hcmRzIGZyb20gRGFyaW8gQmFsbGFiaW8uCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjYW5fcXVldWUgZmllbGQuCisKK1dlZCBOb3YgMzAgMTI6MDk6MDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjYzIHJlbGVhc2VkLgorCisJKiBzZC5jOiBHaXZlIEkvTyBlcnJvciBpZiB3ZSBhdHRlbXB0IDUxMiBieXRlIEkvTyB0byBhIGRpc2sgd2l0aAorCTEwMjQgYnl0ZSBzZWN0b3JzLgorCisJKiBzY3NpY2FtLmM6IE1ha2Ugc3VyZSB3ZSBkbyByZWFkIGZyb20gd2hvbGUgZGlzayAobWFzayBvZmYKKwlwYXJ0aXRpb24pLgorCisJKiBzY3NpLmM6IFVzZSBjYW5fcXVldWUgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKwlGaXggcGFuaWMgbWVzc2FnZSBhYm91dCBpbnZhbGlkIGhvc3QuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgY2FuX3F1ZXVlIGZyb20gdGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBjYW5fcXVldWUgdG8gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKworCSogYWhhMTc0MC5jOiBQcmludCBvdXQgd2FybmluZyBhYm91dCBOVUxMIGVjYnB0ci4KKworRnJpIE5vdiAgNCAxMjo0MDozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjIgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4yMC4gKEZyb20gUmlrIEZhaXRoKS4gIFN1cHBvcnQKKwlCSU9TIHZlcnNpb24gMy41LgorCisJKiBzdC5oOiBBZGQgU1RfRU9EIHN5bWJvbC4KKworCSogc3QuYzogUGF0Y2hlcyBmcm9tIEthaSBNYWtpc2FyYSAtIHN1cHBvcnQgYWRkaXRpb25hbCBkZW5zaXRpZXMsCisJYWRkIHN1cHBvcnQgZm9yIE1URlNTLCBNVEJTUywgTVRXU00gY29tbWFuZHMuCisKKwkqIFJFQURNRS5zdDogVXBkYXRlIHRvIGRvY3VtZW50IG5ldyBjb21tYW5kcy4KKworCSogc2NzaS5jOiBBZGQgTWVkaWF2aXNpb24gQ0RSLUg5M01WIHRvIGJsYWNrbGlzdC4KKworU2F0IE9jdCAyOSAyMDo1NzozNiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjAgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuW2MsaF06IE5ldyBkcml2ZXIgZnJvbSBEYXJpbyBCYWxsYWJpby4KKworCSogYWljNzc3MC5jLCBhaGEyNzR4X3NlcS5oLCBhaGEyNzR4LnNlcSwgYWhhMjc0eC5oLCBhaGEyNzR4LmMsCisJUkVBRE1FLmFoYTI3NHg6IE5ldyBmaWxlcywgbmV3IGRyaXZlciBmcm9tIEpvaG4gQXljb2NrLgorCisKK1R1ZSBPY3QgMTEgMDg6NDc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41NCByZWxlYXNlZC4KKworCSogQWRkIHRoaXJkIFBDSSBjaGlwIGlkLiAgW0RyZXddCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBCVVNMT0dJQ19DTURMVU4gYmFjayB0byAxIFtFcmljXS4KKworCSogdWx0cmFzdG9yLmM6IEZpeCBhc20gZGlyZWN0aXZlcyBmb3IgbmV3IEdDQy4KKworCSogc3IuYywgc2QuYzogVXNlIG5ldyBlbmRfc2NzaV9yZXF1ZXN0IGZ1bmN0aW9uLgorCisJKiBzY3NpLmgoZW5kX3Njc2lfcmVxdWVzdCk6IFJldHVybiBwb2ludGVyIHRvIGJsb2NrIGlmIHN0aWxsCisJYWN0aXZlLCBlbHNlIHJldHVybiBOVUxMIGlmIGluYWN0aXZlLiAgRml4ZXMgcmFjZSBjb25kaXRpb24uCisKK1N1biBPY3QgIDkgMjA6MjM6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MyByZWxlYXNlZC4KKworCSogc2NzaS5jOiBEbyBub3QgYWxsb2NhdGUgZG1hIGJvdW5jZSBidWZmZXJzIGlmIHdlIGhhdmUgZXhhY3RseQorCTE2TWIuCisKK0ZyaSBTZXAgIDkgMDU6MzU6MzAgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MSByZWxlYXNlZC4KKworCSogYWhhMTUyeC5jOiBBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIHRoZSBwYXJpdHkgY2hlY2suICBVcGRhdGUKKwl0byB2ZXJzaW9uIDEuNC4gW0p1ZXJnZW5dLgorCisJKiBzZWFnYXRlLmM6IFR3ZWFrIGRlYnVnZ2luZyBtZXNzYWdlLgorCitXZWQgQXVnIDMxIDEwOjE1OjU1IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNTAgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQWRkIGViODAwIGZvciBWdGVjaCBQbGF0aW51bSBTTVAgYm9hcmRzLiBbSnVlcmdlbl0uCisKKwkqIHNjc2kuYzogQWRkIFF1YW50dW0gUEQxMjI1UyB0byBibGFja2xpc3QuCisKK0ZyaSBBdWcgMjYgMDk6Mzg6NDUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40OSByZWxlYXNlZC4KKworCSogc2QuYzogRml4IGJ1ZyB3aGVuIHdlIHdlcmUgZGVsZXRpbmcgdGhlIHdyb25nIGVudHJ5IGlmIHdlCisJZ2V0IGFuIHVuc3VwcG9ydGVkIHNlY3RvciBzaXplIGRldmljZS4KKworCSogc3IuYzogQW5vdGhlciBzcGVsbGluZyBwYXRjaC4KKworVGh1IEF1ZyAyNSAwOToxNToyNyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQ4IHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBVc2UgbmV3IHNlbWFudGljcyBmb3IgcmVxdWVzdF9kbWEsIGFzIGFwcHJvcHJpYXRlLgorCisJKiBzci5jOiBQcmludCBjb3JyZWN0IGRldmljZSBudW1iZXIuCisKK1N1biBBdWcgMjEgMTc6NDk6MjMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NyByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBBZGQgc3VwcG9ydCBmb3IgTElNSVRfVFJBTlNGRVJTSVpFLgorCisJKiBjb25zdGFudHMuaDogQWRkIHByb3RvdHlwZSBmb3IgcHJpbnRfU2NzaV9DbW5kLgorCisJKiBwYXMxNi5jOiBTb21lIG1vcmUgbWlub3IgdHdlYWtzLiAgVGVzdCBmb3IgTWVkaWF2aXNpb24gYm9hcmQuCisJQWxsb3cgZm9yIGRpc2tzID4gMUdiLiAgW0RyZXc/P10KKworCSogc3IuYzogU2V0IFNDcG50LT50cmFuc2ZlcnNpemUuCisKK1R1ZSBBdWcgMTYgMTc6Mjk6MzUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NiByZWxlYXNlZC4KKworCSogVGhyb3VnaG91dDogTW9yZSBzcGVsbGluZyBmaXh1cHMuCisKKwkqIGJ1c2xvZ2ljLmM6IEFkZCBhIGZldyBtb3JlIGZpeHVwcyBmcm9tIERhdmUuICBEaXNrIHRyYW5zbGF0aW9uCisJbWFpbmx5LgorCisJKiBwYXMxNi5jOiBBZGQgYSBmZXcgcGF0Y2hlcyAoRHJldz8pLgorCisKK1RodSBBdWcgMTEgMjA6NDU6MTUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NCByZWxlYXNlZC4KKworCSogaG9zdHMuYzogQWRkIHR5cGUgY2FzdHMgZm9yIHNjc2lfaW5pdF9tYWxsb2MuCisKKwkqIHNjc2ljYW0uYzogQWRkIHR5cGUgY2FzdC4KKworV2VkIEF1ZyAxMCAxOToyMzowMSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQzIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTcGVsbGluZyBjbGVhbnVwcy4gWz8/XQorCisJKiBhaGExNTJ4LmMsIE5DUjUzKi5jLCBmZG9tYWluLmMsIGdfTkNSNTM4MC5jLCBwYXMxNi5jLCBzZWFnYXRlLmMsCisJIHQxMjguYzogVXNlIHJlcXVlc3RfaXJxLCBub3QgaXJxYWN0aW9uLiBbPz9dCisKKwkqIGFoYTE1NDIuYzogTW92ZSB0ZXN0IGZvciBzaG9zdCBiZWZvcmUgd2Ugc3RhcnQgdG8gdXNlIHNob3N0LgorCisJKiBhaGExNTQyLmMsIGFoYTE3NDAuYywgdWx0cmFzdG9yLmMsIHdkNzAwMC5jOiBVc2UgbmV3CisJY2FsbGluZyBzZXF1ZW5jZSBmb3IgcmVxdWVzdF9pcnEuCisKKwkqIGJ1c2xvZ2ljLmM6IFVwZGF0ZSBmcm9tIERhdmUgR2VudHplbC4KKworVHVlIEF1ZyAgOSAwOTozMjo1OSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQyIHJlbGVhc2VkLgorCisJKiBOQ1I1MzgwLmM6IENoYW5nZSBOQ1I1MzgwX3ByaW50X3N0YXR1cyB0byBzdGF0aWMuCisKKwkqIHNlYWdhdGUuYzogQSBmZXcgbW9yZSBidWdmaXhlcy4gIE9ubHkgRHJldyBrbm93cyB3aGF0IHRoZXkgYXJlCisJZm9yLgorCisJKiB1bHRyYXN0b3IuYzogVHdlYWsgc29tZSBfX2FzbV9fIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCB3b3JrcworCXdpdGggbmV3ZXIgY29tcGlsZXJzLiBbPz9dCisKK1NhdCBBdWcgIDYgMjE6Mjk6MzYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40MCByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBSZXR1cm4gU0NTSV9SRVNFVF9XQUtFVVAgZnJvbSByZXNldCBmdW5jdGlvbi4KKworCSogYWhhMTU0Mi5jOiBSZXNldCBtYWlsYm94IHN0YXR1cyBhZnRlciBhIGJ1cyBkZXZpY2UgcmVzZXQuCisKKwkqIGNvbnN0YW50cy5jOiBGaXggdHlwbyAoOzspLgorCisJKiBnX05DUjUzODAuYzoKKwkqIHBhczE2LmM6ICBDb3JyZWN0IHVzYWdlIG9mIE5DUjUzODBfaW5pdC4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IChhbmQgdW51c2VkIHZhcmlhYmxlcykuCisKKwkqIHNkLmM6IFVzZSBtZW1zZXQgdG8gY2xlYXIgYWxsIG9mIHJzY3NpX2Rpc2tzIGJlZm9yZSB3ZSB1c2UgaXQuCisKKwkqIHNnLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfZ2VuZXJpY3MuCisKKwkqIHNyLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfQ0RzLgorCisJKiBzdC5jOiBJbml0aWFsaXplIFNUcC0+ZGV2aWNlLgorCisJKiBzZWFnYXRlLmM6IEZpeCBidWcuIFtEcmV3XQorCitUaHUgQXVnICA0IDA4OjQ3OjI3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuMzkgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBGaXggdHlwbyBpbiBOQ1I1M0M3eHguCisKKwkqIHN0LmM6IFByaW50IGNvcnJlY3QgbnVtYmVyIGZvciBkZXZpY2UuCisKK1R1ZSBBdWcgIDIgMTE6Mjk6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzggcmVsZWFzZWQuCisKKwlMb3RzIG9mIGNoYW5nZXMgaW4gMS4xLjM4LiAgQWxsIGZyb20gRHJldyB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisJKiA1M2M3LDh4eC5jOiBOZXcgZmlsZSBmcm9tIERyZXcuICBQQ0kgZHJpdmVyLgorCisJKiA1M2M3LDh4eC5oOiBMaWtld2lzZS4KKworCSogNTNjNyw4eHguc2NyOiBMaWtld2lzZS4KKworCSogNTNjOHh4X2QuaCwgNTNjOHh4X3UuaCwgc2NyaXB0X2FzbS5wbDogTGlrZXdpc2UuCisKKwkqIHNjc2ljYW0uYzogTmV3IGZpbGUgZnJvbSBEcmV3LiAgUmVhZCBibG9jayAwIG9uIHRoZSBkaXNrIGFuZAorCXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZS4gIEF0dGVtcHQgdG8gZGVkdWNlIHRoZSBnZW9tZXRyeSBmcm9tCisJdGhlIHBhcnRpdGlvbiB0YWJsZSBpZiBwb3NzaWJsZS4gIE9ubHkgdXNlZCBieSA1M2NbNyw4XXh4IHJpZ2h0CisJbm93LCBidXQgY291bGQgYmUgdXNlZCBieSBhbnkgZGV2aWNlIGZvciB3aGljaCB3ZSBoYXZlIG5vIHdheQorCW9mIGlkZW50aWZ5aW5nIHRoZSBnZW9tZXRyeS4KKworCSogc2QuYzogVXNlIGRldmljZSBsZXR0ZXJzIGluc3RlYWQgb2Ygc2QlZCBpbiBhIGxvdCBvZiBtZXNzYWdlcy4KKworCSogc2VhZ2F0ZS5jOiBGaXggYnVnIHRoYXQgcmVzdWx0ZWQgaW4gbG9ja3VwcyB3aXRoIHNvbWUgZGV2aWNlcy4KKworCSogc3IuYyAoc3Jfb3Blbik6IFJldHVybiAtRVJPRlMsIG5vdCAtRUFDQ0VTIGlmIHdlIGF0dGVtcHQgdG8gb3BlbgorCWRldmljZSBmb3Igd3JpdGUuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBVcGRhdGUgZm9yIG5ldyBkcml2ZXIuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuaDogVXBkYXRlIGZyb20gRHJldyB0byBzdXBwb3J0CisJNTNDNDAwIGNoaXAuCisKKwkqIGNvbnN0YW50cy5jOiBEZWZpbmUgQ09OU1RfQ01ORCBhbmQgQ09OU1RfTVNHLiAgT3RoZXIgbWlub3IKKwljbGVhbnVwcyBhbG9uZyB0aGUgd2F5LiAgSW1wcm92ZSBoYW5kbGluZyBvZiBDT05TVF9NU0cuCisKKwkqIGZkb21haW4uYywgZmRvbWFpbi5oOiBOZXcgdmVyc2lvbiBmcm9tIFJpayBGYWl0aC4gIFVwZGF0ZSB0bworCTUuMTguICBTaG91bGQgbm93IHN1cHBvcnQgVE1DLTMyNjAgUENJIGNhcmQgd2l0aCAxOEMzMCBjaGlwLgorCisJKiBwYXMxNi5jOiBVcGRhdGUgd2l0aCBuZXcgaXJxIGluaXRpYWxpemF0aW9uLgorCisJKiB0MTI4LmM6IFVwZGF0ZSB3aXRoIG1pbm9yIGNsZWFudXBzLgorCisJKiBzY3NpLmMgKHNjc2lfcGlkKTogTmV3IHZhcmlhYmxlIC0gZ2l2ZXMgZWFjaCBjb21tYW5kIGEgdW5pcXVlCisJaWQuIEFkZCBRdWFudHVtIExQUzUyMzVTIHRvIGJsYWNrbGlzdC4gIENoYW5nZSBpbl9zY2FuIHRvCisJaW5fc2Nhbl9zY3NpcyBhbmQgbWFrZSBnbG9iYWwuCisKKwkqIHNjc2kuaDogQWRkIHNvbWUgZGVmaW5lcyBmb3IgZXh0ZW5kZWQgbWVzc2FnZSBoYW5kbGluZywKKwlJTklUSUFURS9SRUxFQVNFX1JFQ09WRVJZLiAgQWRkIGEgZmV3IG5ldyBmaWVsZHMgdG8gc3VwcG9ydCBzeW5jCisJdHJhbnNmZXJzLgorCisJKiBzY3NpX2lvY3RsLmg6IEFkZCBpb2N0bCB0byByZXF1ZXN0IHN5bmNocm9ub3VzIHRyYW5zZmVycy4KKworCitUdWUgSnVsIDI2IDIxOjM2OjU4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM3IHJlbGVhc2VkLgorCisJKiBhaGExNTQyLmM6IEFsd2F5cyBjYWxsIGFoYTE1NDJfbWJlbmFibGUsIHVzZSBuZXcgdWRlbGF5CisJbWVjaGFuaXNtIHNvIHdlIGRvIG5vdCB3YWl0IGEgbG9uZyB0aW1lIGlmIHRoZSBib2FyZCBkb2VzIG5vdAorCWltcGxlbWVudCB0aGlzIGNvbW1hbmQuCisKKwkqIGdfTkNSNTM4MC5jOiBSZW1vdmUgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiBhbmQgI2lmCisJZGVmaW5lZChDT05GSUdfU0NTSV8qKS4KKworCSogc2VhZ2F0ZS5jOiBMaWtld2lzZS4KKworCU5leHQgcm91bmQgb2YgY2hhbmdlcyB0byBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBHZXR0aW5nIGNsb3NlcgorCW5vdywgc3RpbGwgbm90IHBvc3NpYmxlIHRvIGRvIGFueXRoaW5nIHJlbW90ZWx5IHVzYWJsZS4KKworCWhvc3RzLmM6IENyZWF0ZSBhIGxpbmtlZCBsaXN0IG9mIGRldGVjdGVkIGhpZ2ggbGV2ZWwgZGV2aWNlcy4KKwkoc2NzaV9yZWdpc3Rlcl9kZXZpY2UpOiBOZXcgZnVuY3Rpb24gdG8gaW5zZXJ0IGludG8gdGhpcyBsaXN0LgorCShzY3NpX2luaXQpOiBDYWxsIHNjc2lfcmVnaXN0ZXJfZGV2aWNlIGZvciBlYWNoIG9mIHRoZSBrbm93biBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCWhvc3RzLmg6IEFkZCBwcm90b3R5cGUgZm9yIGxpbmtlZCBsaXN0IGhlYWRlci4gIEFkZCBzdHJ1Y3R1cmUKKwlkZWZpbml0aW9uIGZvciBkZXZpY2UgdGVtcGxhdGUgc3RydWN0dXJlIHdoaWNoIGRlZmluZXMgdGhlIGxpbmtlZAorCWxpc3QuCisKKwlzY3NpLmM6IChzY2FuX3Njc2lzKTogVXNlIGxpbmtlZCBsaXN0IGluc3RlYWQgb2Yga25vd2xlZGdlIGFib3V0CisJZXhpc3RpbmcgaGlnaCBsZXZlbCBkZXZpY2UgZHJpdmVycy4KKwkoc2NzaV9kZXZfaW5pdCk6IFVzZSBpbml0IGZ1bmN0aW9ucyBmb3IgZHJpdmVycyBvbiBsaW5rZWQgbGlzdAorCWluc3RlYWQgb2YgZXhwbGljaXQgbGlzdCB0byBpbml0aWFsaXplIGFuZCBhdHRhY2ggZGV2aWNlcyB0byBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCXNjc2kuaDogQWRkIG5ldyBmaWVsZCAiYXR0YWNoZWQiIHRvIHNjc2lfZGV2aWNlIC0gY291bnQgb2YgbnVtYmVyCisJb2YgaGlnaCBsZXZlbCBkZXZpY2VzIGF0dGFjaGVkLgorCisJc2QuYywgc3IuYywgc2cuYywgc3QuYzogQWRqdXN0IGluaXQvYXR0YWNoIGZ1bmN0aW9ucyB0byB1c2UgbmV3CisJc2NoZW1lLgorCitTYXQgSnVsIDIzIDEzOjAzOjE3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM1IHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlIGNvbnN0cmFpbnQgb24gYXNtKCkgb3BlcmFuZCBzbyB0aGF0IGl0IHdvcmtzCisJd2l0aCBnY2MgMi42LjAuCisKK1RodSBKdWwgMjEgMTA6Mzc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzMgcmVsZWFzZWQuCisKKwkqIHNyLmMoc3Jfb3Blbik6IERvIG5vdCBhbGxvdyBvcGVucyB3aXRoIHdyaXRlIGFjY2Vzcy4KKworTW9uIEp1bCAxOCAwOTo1MToyMiAxOTk0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjMxIHJlbGVhc2VkLgorCisJKiBzZC5jOiBJbmNyZWFzZSBTRF9USU1FT1VUIGZyb20gMzAwIHRvIDYwMC4KKworCSogc3IuYzogUmVtb3ZlIHN0cmF5IHRhc2tfc3RydWN0KiB2YXJpYWJsZSB0aGF0IHdhcyBubyBsb25nZXIKKwl1c2VkLgorCisJKiBzcl9pb2N0bC5jOiBGaXggdHlwbyBpbiB1cCgpIGNhbGwuCisKK1N1biBKdWwgMTcgMTY6MjU6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzAgcmVsZWFzZWQuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IEZpeCBkZXRlY3Rpb24gb2Ygc29tZSBUb3NoaWJhIENEUk9NIGRyaXZlcworCXRoYXQgcmVwb3J0IHRoZW1zZWx2ZXMgYXMgZGlzayBkcml2ZXMuCisKKwkqIChUaHJvdWdob3V0KTogVXNlIHJlcXVlc3Quc2VtIGluc3RlYWQgb2YgcmVxdWVzdC53YWl0aW5nLgorCVNob3VsZCBmaXggc3dhcCBwcm9ibGVtIHdpdGggZmRvbWFpbi4KKworVGh1IEp1bCAxNCAxMDo1MTo0MiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwkqIExpbnV4IDEuMS4yOSByZWxlYXNlZC4KKworCSogc2NzaS5jIChzY2FuX3Njc2lzKTogQWRkIG5ldyBkZXZpY2VzIHRvIGVuZCBvZiBsaW5rZWQgbGlzdCwgbm90CisJdG8gdGhlIGJlZ2lubmluZy4KKworCSogc2NzaS5oIChTQ1NJX1NMRUVQKTogUmVtb3ZlIGJyYWluIGRlYWQgaGFjayB0byB0cnkgdG8gc2F2ZQorCXRoZSB0YXNrIHN0YXRlIGJlZm9yZSBzbGVlcGluZy4KKworU2F0IEp1bCAgOSAxNTowMTowMyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwlNb3JlIGNoYW5nZXMgdG8gZXZlbnR1YWxseSBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBNYWlubHkKKwl3ZSB3YW50IHRvIHVzZSBsaW5rZWQgbGlzdHMgaW5zdGVhZCBvZiBhcnJheXMgYmVjYXVzZSBpdCBpcyBlYXNpZXIKKwl0byBkeW5hbWljYWxseSBhZGQgYW5kIHJlbW92ZSB0aGluZ3MgdGhpcyB3YXkuCisKKwlRdWl0ZSBhIGJpdCBtb3JlIHdvcmsgaXMgbmVlZGVkIGJlZm9yZSBsb2FkYWJsZSBtb2R1bGVzIGFyZQorCXBvc3NpYmxlIChhbmQgdXNhYmxlKSB3aXRoIHNjc2ksIGJ1dCB0aGlzIGlzIG1vc3Qgb2YgdGhlIGdydW5nZQorCXdvcmsuCisKKwkqIExpbnV4IDEuMS4yOCByZWxlYXNlZC4KKworCSogc2NzaS5jLCBzY3NpLmggKGFsbG9jYXRlX2RldmljZSwgcmVxdWVzdF9xdWV1ZWFibGUpOiBDaGFuZ2UKKwlhcmd1bWVudCBmcm9tIGluZGV4IGludG8gc2NzaV9kZXZpY2VzIHRvIGEgcG9pbnRlciB0byB0aGUKKwlTY3NpX0RldmljZSBzdHJ1Y3QuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBhbGwgY2FsbHMgdG8gYWxsb2NhdGVfZGV2aWNlLAorCXJlcXVlc3RfcXVldWVhYmxlIHRvIHVzZSBuZXcgY2FsbGluZyBzZXF1ZW5jZS4KKworCSogVGhyb3VnaG91dDogVXNlIFNDcG50LT5kZXZpY2UgaW5zdGVhZCBvZgorCXNjc2lfZGV2aWNlc1tTQ3BudC0+aW5kZXhdLiAgVWdoIC0gdGhlIHBvaW50ZXIgd2FzIHRoZXJlIGFsbCBhbG9uZworCS0gbXVjaCBjbGVhbmVyIHRoaXMgd2F5LgorCisJKiBzY3NpLmMgKHNjc2lfaW5pdF9tYWxsb2MsIHNjc2lfZnJlZV9tYWxsb2MpOiBOZXcgZnVuY3Rpb25zIC0KKwlhbGxvdyB1cyB0byBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgbWFsbG9jIHdoZW4gd2UKKwlpbml0aWFsaXplLiAgVXNlIHRoaXMgaW5zdGVhZCBvZiBwYXNzaW5nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZAorCWFyb3VuZCBhbGwgb3ZlciB0aGUgcGxhY2UuCisKKwkqIHNjc2kuaCwgc3QuYywgc3IuYywgc2QuYywgc2cuYzogQ2hhbmdlICpfaW5pdDEgZnVuY3Rpb25zIHRvIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MsIHJlbW92ZSBhbGwgYXJndW1lbnRzLCBubyByZXR1cm4gdmFsdWUuCisKKwkqIHNjc2kuaDogUmVtb3ZlIGluZGV4IGZpZWxkIGZyb20gU2NzaV9EZXZpY2UgYW5kIFNjc2lfQ21uZAorCXN0cnVjdHMuCisKKwkqIHNjc2kuYyAoc2NzaV9kZXZfaW5pdCk6IFNldCB1cCBmb3Igc2NzaV9pbml0X21hbGxvYy4KKwkoc2Nhbl9zY3Npcyk6IEdldCBTRHBudCBmcm9tIHNjc2lfaW5pdF9tYWxsb2MsIGFuZCByZWZyZXNoCisJd2hlbiB3ZSBkaXNjb3ZlciBhIGRldmljZS4gIEZyZWUgcG9pbnRlciBiZWZvcmUgcmV0dXJuaW5nLgorCUNoYW5nZSBzY3NpX2RldmljZXMgaW50byBhIGxpbmtlZCBsaXN0LgorCisJKiBzY3NpLmMgKHNjYW5fc2NzaXMpOiBDaGFuZ2UgdG8gb25seSBzY2FuIG9uZSBob3N0LgorCShzY3NpX2Rldl9pbml0KTogTG9vcCBvdmVyIGFsbCBkZXRlY3RlZCBob3N0cywgYW5kIHNjYW4gdGhlbS4KKworCSogaG9zdHMuYyAgKHNjc2lfaW5pdF9mcmVlKTogQ2hhbmdlIHNvIHRoYXQgIG51bWJlciBvZiBleHRyYSBieXRlcworCWlzIHN0b3JlZCBpbiBzdHJ1Y3QsIGFuZCB3ZSBkbyBub3QgaGF2ZSB0byBwYXNzIGl0IGVhY2ggdGltZS4KKworCSogaG9zdHMuaDogQ2hhbmdlIFNjc2lfSG9zdF9UZW1wbGF0ZSBzdHJ1Y3QgdG8gaW5jbHVkZSAibmV4dCIgYW5kCisJInJlbGVhc2UiIGZ1bmN0aW9ucy4gIEluaXRpYWxpemUgdG8gTlVMTCBpbiBhbGwgbG93IGxldmVsCisJYWRhcHRlcnMuCisKKwkqIGhvc3RzLmM6IFJlbmFtZSBzY3NpX2hvc3RzIHRvIGJ1aWx0aW5fc2NzaV9ob3N0cywgY3JlYXRlIGxpbmtlZAorCWxpc3Qgc2NzaV9ob3N0cywgbGlua2VkIHRvZ2V0aGVyIHdpdGggdGhlIG5ldyAibmV4dCIgZmllbGQuCisKK1dlZCBKdWwgIDYgMDU6NDU6MDIgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMjUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQ2hhbmdlcyBmcm9tIEp1ZXJnZW4gLSBjbGVhbnVwcyBhbmQgdXBkYXRlcy4KKworCSogc2QuYywgc3IuYzogVXNlIG5ldyBjaGVja19tZWRpYV9jaGFuZ2UgYW5kIHJldmFsaWRhdGUKKwlmaWxlX29wZXJhdGlvbnMgZmllbGRzLgorCisJKiBzdC5jLCBzdC5oOiBBZGQgY2hhbmdlcyBmcm9tIEthaSBNYWtpc2FyYSwgZGF0ZWQgSnVuIDIyLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgU0dfQUxMIGJhY2sgdG8gMHhmZi4gIEFwcGFyZW50bHkgc29mdCBlcnJvcgorCWluIC9kZXYvYnJhaW4gcmVzdWx0ZWQgaW4gaGF2aW5nIHRoaXMgYnVtcGVkIHVwLgorCUNoYW5nZSBmaXJzdCBwYXJhbWV0ZXIgaW4gYmlvc19wYXJhbSBmdW5jdGlvbiB0byBiZSBEaXNrICogaW5zdGVhZAorCW9mIGluZGV4IGludG8gcnNjc2lfZGlza3MuCisKKwkqIHNkX2lvY3RsLmM6IFBhc3MgcG9pbnRlciB0byByc2NzaV9kaXNrcyBlbGVtZW50IGluc3RlYWQgb2YgaW5kZXgKKwl0byBhcnJheS4KKworCSogc2QuaDogQWRkIHN0cnVjdCBuYW1lICJzY3NpX2Rpc2siIHRvIHR5cGVkZWYgZm9yIFNjc2lfRGlzay4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IE1heHRvciBYVDg3NjBTIGZyb20gYmxhY2tsaXN0LgorCUluIHNjc2lfcmVzZXQsIGFkZCBwcmludGsgd2hlbiBERUJVRyBkZWZpbmVkLgorCisJKiBBbGwgbG93IGxldmVsIGRyaXZlcnM6IE1vZGlmeSBkZWZpbml0aW9ucyBvZiBiaW9zX3BhcmFtIGluCisJYXBwcm9wcmlhdGUgd2F5LgorCitUaHUgSnVuIDE2IDEwOjMxOjU5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjIwIHJlbGVhc2VkLgorCisJKiBzY3NpX2lvY3RsLmM6IE9ubHkgcGFzcyBkb3duIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKwlyZXF1aXJlZCB0byBzY3NpX2RvX2NtZCwgbm90IHRoZSBvbmUgcm91bmRlZCB1cCB0byBhIGV2ZW4gbnVtYmVyCisJb2Ygc2VjdG9ycy4KKworCSogdWx0cmFzdG9yLmM6IENoYW5nZXMgZnJvbSBDYWxlYiBFcHN0ZWluIGZvciAyNGYgY2FyZHMuICBTdXBwb3J0CisJbGFyZ2VyIFNHIGxpc3RzLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlcyBmcm9tIG1lIC0gdXNlIHNjc2lfcmVnaXN0ZXIgdG8gcmVnaXN0ZXIKKwlob3N0LiAgQWRkIHNvbWUgY29uc2lzdGVuY3kgY2hlY2tpbmcsCisKK1dlZCBKdW4gIDEgMjE6MTI6MTMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTkgcmVsZWFzZWQuCisKKwkqIHNjc2kuaDogQWRkIG5ldyByZXR1cm4gY29kZSBmb3IgcmVzZXQoKSBmdW5jdGlvbjoKKwlTQ1NJX1JFU0VUX1BVTlQuCisKKwkqIHNjc2kuYzogTWFrZSBTQ1NJX1JFU0VUX1BVTlQgdGhlIHNhbWUgYXMgU0NTSV9SRVNFVF9XQUtFVVAgZm9yCisJbm93LgorCisJKiBhaGExNTQyLmM6IElmIHRoZSBjb21tYW5kIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVzZXQgaXMgbm90CisJcGVuZGluZywgcmV0dXJuIFNDU0lfUkVTRVRfUFVOVC4KKworCSogYWhhMTc0MC5jLCBidXNsb2dpYy5jLCB3ZDcwMDAuYywgdWx0cmFzdG9yLmM6IFJldHVybgorCVNDU0lfUkVTRVRfUFVOVCBpbnN0ZWFkIG9mIFNDU0lfUkVTRVRfU05PT1pFLgorCitUdWUgTWF5IDMxIDE5OjM2OjAxIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogYnVzbG9naWMuYzogRG8gbm90IHByaW50IG91dCBtZXNzYWdlIGFib3V0ICJtdXN0IGJlIEFkYXB0ZWMiCisJaWYgd2UgaGF2ZSBkZXRlY3RlZCBhIGJ1c2xvZ2ljIGNhcmQuICBQcmludCBvdXQgYSB3YXJuaW5nIG1lc3NhZ2UKKwlpZiB3ZSBhcmUgY29uZmlndXJpbmcgZm9yID4xNk1iLCBzaW5jZSB0aGUgNDQ1UyBhdCBib2FyZCBsZXZlbAorCUQgb3IgZWFybGllciBkb2VzIG5vdCB3b3JrIHJpZ2h0LiAgVGhlICJEIiBsZXZlbCBib2FyZCBjYW4gYmUgbWFkZQorCXRvIHdvcmsgYnkgZmxpcHBpbmcgYW4gdW5kb2N1bWVudGVkIHN3aXRjaCwgYnV0IHRoaXMgaXMgdG9vIHN1YnRsZS4KKworICAgIENoYW5nZXMgYmFzZWQgdXBvbiBwYXRjaGVzIGluIFlnZ2RyYXNpbCBkaXN0cmlidXRpb24uCisKKwkqIHNnLmMsIHNnLmg6IFJldHVybiBzZW5zZSBkYXRhIHRvIHVzZXIuCisKKwkqIGFoYTE1NDIuYywgYWhhMTc0MC5jLCBidXNsb2dpYy5jOiBEbyBub3QgcGFuaWMgaWYKKwlzZW5zZSBidWZmZXIgaXMgd3Jvbmcgc2l6ZS4KKworCSogaG9zdHMuYzogVGVzdCBmb3IgdWx0cmFzdG9yIGNhcmQgYmVmb3JlIGFueSBvZiB0aGUgb3RoZXJzLgorCisJKiBzY3NpLmM6IEFsbG93IGJvb3QtdGltZSBvcHRpb24gZm9yIG1heF9zY3NpX2x1bnM9PyBzbyB0aGF0CisJYnVnZ3kgZmlybXdhcmUgaGFzIGFuIGVhc3kgd29yay1hcm91bmQuCisKK1N1biBNYXkgMTUgMjA6MjQ6MzQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTUgcmVsZWFzZWQuCisKKwlQb3N0LWNvZGVmcmVlemUgdGhhdy4uLgorCisJKiBidXNsb2dpYy5bYyxoXTogTmV3IGRyaXZlciBmcm9tIERhdmlkIEdlbnR6ZWwuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2VfY2x1c3RlcmluZyBmaWVsZCB0byBleHBsaWNpdGx5IHNheSB3aGV0aGVyCisJY2x1c3RlcmluZyBzaG91bGQgYmUgdXNlZCBmb3IgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGlzIGhvc3QKKwlhZGFwdGVyLiAgVGhlIGJ1c2xvZ2ljIGJvYXJkIGFwcGFyZW50bHkgc3VwcG9ydHMgbGFyZ2UgU0cgbGlzdHMsCisJYnV0IGl0IGlzIGFwcGFyZW50bHkgZmFzdGVyIGlmIHNkLmMgY29uZGVuc2VzIHRoaXMgaW50byBhIHNtYWxsZXIKKwlsaXN0LgorCisJKiBzZC5jOiBVc2UgdGhpcyBmaWVsZCBpbnN0ZWFkIG9mIGhldXJpc3RpYy4KKworCSogQWxsIGhvc3QgYWRhcHRlciBpbmNsdWRlIGZpbGVzOiBBZGQgYXBwcm9wcmlhdGUgaW5pdGlhbGl6ZXIgZm9yCisJdXNlX2NsdXN0ZXJpbmcgZmllbGQuCisKKwkqIHNjc2kuaDogQWRkICNkZWZpbmVzIGZvciByZXR1cm4gY29kZXMgZm9yIHRoZSBhYm9ydCBhbmQgcmVzZXQKKwlmdW5jdGlvbnMuICBUaGVyZSBhcmUgbm93IGEgc3BlY2lmaWMgc2V0IG9mIHJldHVybiBjb2RlcyB0byBmdWxseQorCXNwZWNpZnkgYWxsIG9mIHRoZSBwb3NzaWJsZSB0aGluZ3MgdGhhdCB0aGUgbG93LWxldmVsIGFkYXB0ZXIKKwljb3VsZCBkby4KKworCSogc2NzaS5jOiBBY3QgYmFzZWQgdXBvbiByZXR1cm4gY29kZXMgZnJvbSBhYm9ydC9yZXNldCBmdW5jdGlvbnMuCisKKwkqIEFsbCBob3N0IGFkYXB0ZXIgYWJvcnQvcmVzZXQgZnVuY3Rpb25zOiBSZXR1cm4gbmV3IHJldHVybiBjb2RlLgorCisJKiBBZGQgY29kZSBpbiBzY3NpLmMgdG8gaGVscCBkZWJ1ZyB0aW1lb3V0cy4gIFVzZSAjZGVmaW5lCisJREVCVUdfVElNRU9VVCB0byBlbmFibGUgdGhpcy4KKworCSogc2NzaS5jOiBJZiB0aGUgaG9zdC0+aXJxIGZpZWxkIGlzIHNldCwgdXNlCisJZGlzYWJsZV9pcnEvZW5hYmxlX2lycSBiZWZvcmUgY2FsbGluZyBxdWV1ZWNvbW1hbmQgaWYgd2UKKwlhcmUgbm90IGFscmVhZHkgaW4gYW4gaW50ZXJydXB0LiAgUmVkdWNlIHJhY2VzLCBhbmQgd2UKKwljYW4gYmUgc2xvcHBpZXIgYWJvdXQgY2xpL3N0aSBpbiB0aGUgaW50ZXJydXB0IHJvdXRpbmVzIG5vdworCShyZWR1Y2UgaW50ZXJydXB0IGxhdGVuY3kpLgorCisJKiBjb25zdGFudHMuYzogRml4IHNvbWUgdGhpbmdzIHRvIGVsaW1pbmF0ZSB3YXJuaW5ncy4gIEFkZCBzb21lCisJc2Vuc2UgZGVzY3JpcHRpb25zIHRoYXQgd2VyZSBvbWl0dGVkIGJlZm9yZS4KKworCSogYWhhMTU0Mi5jOiBXYXRjaCBmb3IgU0NSRCBmcm9tIGhvc3QgYWRhcHRlciAtIGlmIHdlIHNlZSBpdCwgc2V0CisJYSBmbGFnLiAgQ3VycmVudGx5IHdlIG9ubHkgcHJpbnQgb3V0IHRoZSBudW1iZXIgb2YgcGVuZGluZworCWNvbW1hbmRzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQuCisKKwkqIGFoYTE1NDIuYyAoYWhhMTU0Ml9hYm9ydCk6IExvb2sgZm9yIGxvc3QgaW50ZXJydXB0cywgT0dNQiBzdGlsbAorCWZ1bGwsIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIuICBPdGhlcndpc2UgZ2l2ZSB1cC4KKworCSogYWhhMTU0Mi5jIChhaGExNTQyX3Jlc2V0KTogVHJ5IEJVUyBERVZJQ0UgUkVTRVQsIGFuZCB0aGVuIHBhc3MKKwlESURfUkVTRVQgYmFjayB1cCB0byB0aGUgdXBwZXIgbGV2ZWwgY29kZSBmb3IgYWxsIGNvbW1hbmRzIHJ1bm5pbmcKKwlvbiB0aGlzIHRhcmdldCAoZXZlbiBvbiBkaWZmZXJlbnQgTFVOcykuCisKK1NhdCBNYXkgIDcgMTQ6NTQ6MDEgMTk5NAorCisJKiBMaW51eCAxLjEuMTIgcmVsZWFzZWQuCisKKwkqIHN0LmMsIHN0Lmg6IE5ldyB2ZXJzaW9uIGZyb20gS2FpLiAgU3VwcG9ydHMgYm9vdCB0aW1lCisJc3BlY2lmaWNhdGlvbiBvZiBudW1iZXIgb2YgYnVmZmVycy4KKworCSogd2Q3MDAwLltjLGhdOiBVcGRhdGVkIGRyaXZlciBmcm9tIEpvaG4gQm95ZC4gIE5vdyBzdXBwb3J0cworCW1vcmUgdGhhbiBvbmUgd2Q3MDAwIGJvYXJkIGluIG1hY2hpbmUgYXQgb25lIHRpbWUsIGFtb25nIG90aGVyIHRoaW5ncy4KKworV2VkIEFwciAyMCAyMjoyMDozNSAxOTk0CisKKwkqIExpbnV4IDEuMS44IHJlbGVhc2VkLgorCisJKiBzZC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cyB3aGVyZSBzY3NpX21hbGxvYyBpcyBjYWxsZWQuCisKK1dlZCBBcHIgMTMgMTI6NTM6MjkgMTk5NAorCisJKiBMaW51eCAxLjEuNCByZWxlYXNlZC4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBhIGZldyBwcmludGtzICh1c2UgJXAgdG8gcHJpbnQgcG9pbnRlcnMpLgorCitXZWQgQXByIDEzIDExOjMzOjAyIDE5OTQKKworCSogTGludXggMS4xLjMgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworRnJpIEFwciAgOCAwODo1NzoxOSAxOTk0CisKKwkqIExpbnV4IDEuMS4yIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTQ1NJIHBvcnRpb24gb2YgY2x1c3RlciBkaWZmcyBhZGRlZC4KKworVHVlIEFwciAgNSAwNzo0MTo1MCAxOTk0CisKKwkqIExpbnV4IDEuMSBkZXZlbG9wbWVudCB0cmVlIGluaXRpYXRlZC4KKworCSogVGhlIGxpbnV4IDEuMCBkZXZlbG9wbWVudCB0cmVlIGlzIG5vdyBlZmZlY3RpdmVseSBmcm96ZW4gZXhjZXB0CisJZm9yIG9idmlvdXMgYnVnZml4ZXMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTdW4gQXByIDE3IDAwOjE3OjM5IDE5OTQKKworCSogTGludXggMS4wLCBwYXRjaGxldmVsIDkgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworVGh1IEFwciAgNyAwODozNjoyMCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDggcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNSBmcm9tIDUuOS4gIEhhbmRsZXMgMy40IGJpb3MuCisKK1N1biBBcHIgIDMgMTQ6NDM6MDMgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWw2IHJlbGVhc2VkLgorCisJKiB3ZDcwMDAuYzogTWFrZSBzdGFiIGF0IGZpeGluZyByYWNlIGNvbmRpdGlvbi4KKworU2F0IE1hciAyNiAxNDoxNDo1MCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYywgTWFrZWZpbGU6IEZpeCBhIGZldyBidWdzICh0b28gbXVjaCBkYXRhIG1lc3NhZ2UpLgorCUFkZCBhIGZldyBtb3JlIGJpb3Mgc2lnbmF0dXJlcy4gKFBhdGNoZXMgZnJvbSBKdWVyZ2VuKS4KKworCSogYWhhMTU0Mi5jOiBGaXggcmFjZSBjb25kaXRpb24gaW4gYWhhMTU0Ml9vdXQuCisKK01vbiBNYXIgMjEgMTY6MzY6MjAgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWwzIHJlbGVhc2VkLgorCisJKiBzZC5jLCBzdC5jLCBzci5jLCBzZy5jOiBSZXR1cm4gLUVOWElPLCBub3QgLUVOT0RFViBpZiB3ZSBhdHRlbXB0CisJdG8gb3BlbiBhIG5vbi1leGlzdGVudCBkZXZpY2UuCisKKwkqIHNjc2kuYzogQWRkIENoaW5vbiBjZHJvbSB0byBibGFja2xpc3QuCisKKwkqIHNyX2lvY3RsLmM6IENoZWNrIHJldHVybiBzdGF0dXMgb2YgdmVyaWZ5X2FyZWEuCisKK1NhdCBNYXIgIDYgMTY6MDY6MTkgMTk5NAorCisJKiBMaW51eCAxLjAgcmVsZWFzZWQgKHRlY2huaWNhbGx5IGEgcHJlLXJlbGVhc2UpLgorCisJKiBzY3NpLmM6IEFkZCBJTVMgQ0RENTIxLCBNYXh0b3IgWFQtODc2MFMgdG8gYmxhY2tsaXN0LgorCitUdWUgRmViIDE1IDEwOjU4OjIwIDE5OTQKKworICAgICAgICAqIHBsMTVlIHJlbGVhc2VkLgorCisgICAgICAgICogYWhhMTU0Mi5jOiBGb3IgMTU0MkMsIGFsbG93IGR5bmFtaWMgZGV2aWNlIHNjYW4gd2l0aCA+MUdiIHR1cm5lZAorCW9mZi4KKworCSogY29uc3RhbnRzLmM6IEZpeCB0eXBvIGluIGRlZmluaXRpb24gb2YgQ09OU1RBTlRTLgorCisgICAgICAgICogcGwxNWQgcmVsZWFzZWQuCisKK0ZyaSBGZWIgMTEgMTA6MTA6MTYgMTk5NAorCisgICAgICAgICogcGwxNWMgcmVsZWFzZWQuCisKKwkqIHNjc2kuYzogQWRkIE1heHRvciBYVC0zMjgwIGFuZCBSb2RpbWUgUk8zMDAwUyB0byBibGFja2xpc3QuCisKKwkqIHNjc2kuYzogQWxsb3cgdGFnZ2VkIHF1ZXVlaW5nIGZvciBzY3NpIDMgZGV2aWNlcyBhcyB3ZWxsLgorCVNvbWUgcmVhbGx5IG9sZCBkZXZpY2VzIHJlcG9ydCBhIHZlcnNpb24gbnVtYmVyIG9mIDAuICBEaXNhbGxvdworCUxVTiAhPSAwIGZvciB0aGVzZS4KKworVGh1IEZlYiAxMCAwOTo0ODo1NyAxOTk0CisKKyAgICAgICAgKiBwbDE1YiByZWxlYXNlZC4KKworU3VuIEZlYiAgNiAxMjoxOTo0NiAxOTk0CisKKyAgICAgICAgKiBwbDE1YSByZWxlYXNlZC4KKworRnJpIEZlYiAgNCAwOTowMjoxNyAxOTk0CisKKyAgICAgICAgKiBzY3NpLmM6IEFkZCBUZWFjIGNkcm9tIHRvIGJsYWNrbGlzdC4KKworVGh1IEZlYiAgMyAxNDoxNjo0MyAxOTk0CisKKwkqIHBsMTUgcmVsZWFzZWQuCisKK1R1ZSBGZWIgIDEgMTU6NDc6NDMgMTk5NAorCisJKiBwbDE0dyByZWxlYXNlZC4KKworCSogd2Q3MDAwLmMgKHdkX2Jhc2VzKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK01vbiBKYW4gMjQgMTc6Mzc6MjMgMTk5NAorCisJKiBwbDE0dSByZWxlYXNlZC4KKworCSogYWhhMTU0Mi5jOiBTdXBwb3J0IDE1NDJDRi9leHRlbmRlZCBiaW9zLiAgRGlmZmVyZW50IGZyb20gMTU0MkMKKworCSogd2Q3MDAwLmM6IEFsbG93IGJpb3MgYXQgMHhkODAwMCBhcyB3ZWxsLgorCisJKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIGN5bGluZGVycyB0byAxMDI0LgorCisJKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDUuOSAoYWRkIG5ldyBiaW9zIHNpZ25hdHVyZSkuCisKKwkqIE5DUjUzODAuYzogVXBkYXRlIGZyb20gRHJldyAtIHNob3VsZCB3b3JrIGEgbG90IGJldHRlciBub3cuCisKK1NhdCBKYW4gIDggMTU6MTM6MTAgMTk5NAorCisJKiBwbDE0byByZWxlYXNlZC4KKworCSogc3JfaW9jdGwuYzogWmVybyByZXNlcnZlZCBmaWVsZCBiZWZvcmUgdHJ5aW5nIHRvIHNldCBhdWRpbyB2b2x1bWUuCisKK1dlZCBKYW4gIDUgMTM6MjE6MTAgMTk5NAorCisJKiBwbDE0bSByZWxlYXNlZC4KKworCSogZmRvbWFpbi5jOiBVcGRhdGUgdG8gdmVyc2lvbiA1LjguICBObyBmdW5jdGlvbmFsIGRpZmZlcmVuY2U/Pz8KKworVHVlIEphbiAgNCAxNDoyNjoxMyAxOTk0CisKKwkqIHBsMTRsIHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogUmVtb3ZlIG91dGwsIGlubCBmdW5jdGlvbnMgKG5vdyBwcm92aWRlZCBlbHNld2hlcmUpLgorCitNb24gSmFuICAzIDEyOjI3OjI1IDE5OTQKKworCSogcGwxNGsgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogUmVtb3ZlIGluc3cgYW5kIG91dHN3IGZ1bmN0aW9ucy4KKworCSogZmRvbWFpbi5jOiBEaXR0by4KKworV2VkIERlYyAyOSAwOTo0NzoyMCAxOTkzCisKKwkqIHBsMTRpIHJlbGVhc2VkLgorCisJKiBzY3NpLmM6IFN1cHBvcnQgUkVDT1ZFUkVEX0VSUk9SIGZvciB0YXBlIGRyaXZlcy4KKworCSogc3QuYzogVXBkYXRlIG9mIHRhcGUgZHJpdmVyIGZyb20gS2FpLgorCitUdWUgRGVjIDIxIDA5OjE4OjMwIDE5OTMKKworCSogcGwxNGcgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuW2MsaF06IFN1cHBvcnQgZXh0ZW5kZWQgQklPUyBzdHVmZi4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBtZXNzYWdlcyBhYm91dCBkaXNrcywgc28gdGhleSBhcmUgZGlzcGxheWVkIGFzCisJc2RhLCBzZGIsIGV0YyBpbnN0ZWFkIG9mIHNkMCwgc2QxLCBldGMuCisKKwkqIHNyLmM6ICBGb3JjZSByZXJlYWQgb2YgY2FwYWNpdHkgaWYgZGlzayB3YXMgY2hhbmdlZC4KKwlDbGVhciBidWZmZXIgYmVmb3JlIGFza2luZyBmb3IgY2FwYWNpdHkvc2VjdG9yc2l6ZSAoc29tZSBkcml2ZXMKKwlkbyBub3QgcmVwb3J0IHRoaXMgcHJvcGVybHkpLiAgU2V0IG5lZWRzX3NlY3Rvcl9zaXplIGZsYWcgaWYKKwlkcml2ZSBkaWQgbm90IHJldHVybiBzZW5zaWJsZSBzZWN0b3Igc2l6ZS4KKworTW9uIERlYyAxMyAxMjoxMzo0NyAxOTkzCisKKwkqIGFoYTE1MnguYzogVXBkYXRlIHRvIHZlcnNpb24gLjEwMSBmcm9tIEp1ZXJnZW4uCisKK01vbiBOb3YgMjkgMDM6MDM6MDAgMTk5MworCisgICAgICAgICogbGludXggMC45OS4xNCByZWxlYXNlZC4KKworCSogQWxsIHNjc2kgc3R1ZmYgbW92ZWQgZnJvbSBrZXJuZWwvYmxrX2Rydi9zY3NpIHRvIGRyaXZlcnMvc2NzaS4KKworCSogVGhyb3VnaG91dDogR3JhbW1hdGljYWwgY29ycmVjdGlvbnMgdG8gdmFyaW91cyBjb21tZW50cy4KKworCSogTWFrZWZpbGU6IGZpeCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIGNvbXBpbGUgdGhpbmdzIHdlIGFyZQorCW5vdCBnb2luZyB0byB1c2UuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuYywgZ19OQ1I1MzgwLmgsIHBhczE2LmMsCisJcGFzMTYuaCwgdDEyOC5jLCB0MTI4Lmg6ICBOZXcgZmlsZXMgZnJvbSBEcmV3LgorCisJKiBhaGExNTJ4LmMsIGFoYTE1MnguaDogTmV3IGZpbGVzIGZyb20gSnVlcmdlbiBGaXNjaGVyLgorCisJKiBhaGExNTQyLmM6IFN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgMTU0MiBpbiB0aGUgbWFjaGluZQorCWF0IHRoZSBzYW1lIHRpbWUuICBNYWtlIGZ1bmN0aW9ucyBzdGF0aWMgdGhhdCBkbyBub3QgbmVlZAorCXZpc2liaWxpdHkuCisKKwkqIGFoYTE3NDAuYzogU2V0IE5FRURTX0pVTVBTVEFSVCBmbGFnIGluIHJlc2V0IGZ1bmN0aW9uLCBzbyB3ZQorCWtub3cgdG8gcmVzdGFydCB0aGUgY29tbWFuZC4gIENoYW5nZSBwcm90b3R5cGUgb2YgYWhhMTc0MF9yZXNldAorCXRvIHRha2UgYSBjb21tYW5kIHBvaW50ZXIuCisKKwkqIGNvbnN0YW50cy5jOiBDbGVhbiB1cCBhIGZldyB0aGluZ3MuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS42LiAgTW92ZSBzbmFyZl9yZWdpb24uICBBbGxvdworCWJvYXJkIHRvIGJlIHNldCBhdCBkaWZmZXJlbnQgU0NTSSBpZHMuICBSZW1vdmUgc3VwcG9ydCBmb3IKKwlyZXNlbGVjdGlvbiAoZGlkIG5vdCB3b3JrIHdlbGwpLiAgU2V0IEpVTVBTVEFSVCBmbGFnIGluIHJlc2V0CisJY29kZS4KKworCSogaG9zdHMuYzogU3VwcG9ydCBuZXcgbG93LWxldmVsIGFkYXB0ZXJzLiAgQWxsb3cgZm9yIG1vcmUgdGhhbgorCW9uZSBhZGFwdGVyIG9mIGEgZ2l2ZW4gdHlwZS4KKworCSogaG9zdHMuaDogQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUgYWRhcHRlciBvZiBhIGdpdmVuIHR5cGUuCisKKwkqIHNjc2kuYzogIEFkZCBzY3NpX2RldmljZV90eXBlcyBhcnJheSwgaWYgTkVFRFNfSlVNUFNUQVJUIGlzIHNldAorCWFmdGVyIGEgbG93LWxldmVsIHJlc2V0LCBzdGFydCB0aGUgY29tbWFuZCBhZ2Fpbi4gIFNvcnQgYmxhY2tsaXN0LAorCWFuZCBhZGQgTWF4dG9yIE1YVC0xMjQwUywgWFQtNDE3MFMsIE5FQyBDRFJPTSA4NCwgU2VhZ2F0ZSBTVDE1N04uCisKKwkqIHNjc2kuaDogQWRkIGNvbnN0YW50cyBmb3IgdGFnZ2VkIHF1ZXVlaW5nLgorCisJKiBUaHJvdWdob3V0OiBVc2UgY29uc3RhbnRzIGZyb20gbWFqb3IuaCBpbnN0ZWFkIG9mIGhhcmRjb2RlZAorCW51bWJlcnMgZm9yIG1ham9yIG51bWJlcnMuCisKKwkqIHNjc2lfaW9jdGwuYzogRml4IGJ1ZyBpbiBidWZmZXIgbGVuZ3RoIGluIGlvY3RsX2NvbW1hbmQuICBVc2UKKwl2ZXJpZnlfYXJlYSBpbiBHRVRfSURMVU4gaW9jdGwuICBBZGQgbmV3IGlvY3RscyBmb3IKKwlUQUdHRURfUVVFVUVfRU5BQkxFLCBESVNBQkxFLiAgT25seSBhbGxvdyBJT0NUTF9TRU5EX0NPTU1BTkQgYnkKKwlzdXBlcnVzZXIuCisKKwkqIHNkLmM6IE9ubHkgcGF5IGF0dGVudGlvbiB0byBVTklUX0FUVEVOVElPTiBmb3IgcmVtb3ZhYmxlIGRpc2tzLgorCUZpeCBidWcgd2hlcmUgc29tZXRpbWVzIHBvcnRpb25zIG9mIGJsb2NrcyB3b3VsZCBnZXQgbG9zdAorCXJlc3VsdGluZyBpbiBwcm9jZXNzZXMgaGFuZ2luZy4gIEFkZCBtZXNzYWdlcyB3aGVuIHdlIHNwaW4gdXAgYQorCWRpc2ssIGFuZCBmaXggYSBidWcgaW4gdGhlIHRpbWluZy4gIEluY3JlYXNlIHJlYWQtYWhlYWQgZm9yIGRpc2tzCisJdGhhdCBhcmUgb24gYSBzY2F0dGVyLWdhdGhlciBjYXBhYmxlIGhvc3QgYWRhcHRlci4KKworCSogc2VhZ2F0ZS5jOiBGaXggc28gdGhhdCBzb21lIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBmcm9tIHRoZSBsaWxvCisJcHJvbXB0LiAgU3VwcGx5IGp1bXBzdGFydCBmbGFnIGlmIHdlIGFyZSByZXNldHRpbmcgYW5kIG5lZWQgdGhlCisJY29tbWFuZCByZXN0YXJ0ZWQuICAgRml4IHNvIHRoYXQgd2UgcmV0dXJuIDEgaWYgd2UgZGV0ZWN0IGEgY2FyZAorCXNvIHRoYXQgbXVsdGlwbGUgY2FyZCBkZXRlY3Rpb24gd29ya3MgY29ycmVjdGx5LiAgQWRkIHlldCBhbm90aGVyCisJc2lnbmF0dXJlIGZvciBGRCBjYXJkcyAoOTUwKS4gIEFkZCBhbm90aGVyIHNpZ25hdHVyZSBmb3IgU1QweC4KKworCSogc2cuYywgc2cuaDogTmV3IGZpbGVzIGZyb20gTGF3cmVuY2UgRm9hcmQgZm9yIGdlbmVyaWMgc2NzaQorCWFjY2Vzcy4KKworCSogc3IuYzogIEFkZCB0eXBlIGNhc3RzIGZvciAodm9pZCopIHNvIHRoYXQgd2UgY2FuIGRvIHBvaW50ZXIKKwlhcml0aG1ldGljLiAgV29ya3Mgd2l0aCBHQ0Mgd2l0aG91dCB0aGlzLCBidXQgaXQgaXMgbm90IHN0cmljdGx5CisJY29ycmVjdC4gIFNhbWUgYnVnZml4IGFzIHdhcyBpbiBzZC5jLiAgSW5jcmVhc2UgcmVhZC1haGVhZCBhIGxhCisJZGlzayBkcml2ZXIuCisKKwkqIHNyX2lvY3RsLmM6IFVzZSBzY3NpX21hbGxvYyBidWZmZXIgaW5zdGVhZCBvZiBidWZmZXIgZnJvbSBzdGFjaworCXNpbmNlIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgc3RhY2sgaXMgPCAxNk1iLgorCisJdWx0cmFzdG9yLmM6IFVwZGF0ZSB0byBzdXBwb3J0IDI0ZiBwcm9wZXJseSAoSkZDJ3MgZHJpdmVyKS4KKworCXdkNzAwMC5jOiBTdXBwbHkganVtcHN0YXJ0IGZsYWcgZm9yIHJlc2V0LiAgRG8gbm90IHJvdW5kIHVwCisJbnVtYmVyIG9mIGN5bGluZGVycyBpbiBiaW9zcGFyYW0gZnVuY3Rpb24uCisKK1NhdCBTZXAgIDQgMjA6NDk6NTYgMTk5MworCisgICAgKiAwLjk5cGwxMyByZWxlYXNlZC4KKworICAgICogVGhyb3VnaG91dDogIFVzZSBjaGVja19yZWdpb24vc25hcmZfcmVnaW9uIGZvciBhbGwgbG93LWxldmVsCisgICAgZHJpdmVycy4KKworICAgICogYWhhMTU0Mi5jOiBEbyBoYXJkIHJlc2V0IGluc3RlYWQgb2Ygc29mdCAoc29tZSBldGhlcmNhcmQgcHJvYmVzCisgICAgc2NyZXcgdXMgdXApLgorCisgICAgKiBzY3NpLmM6IEFkZCBuZXcgZmxhZyBBU0tFRF9GT1JfU0VOU0Ugc28gdGhhdCB3ZSBjYW4gdGVsbCBpZiB3ZSBhcmUKKyAgICBpbiBhIGxvb3Agd2hlcmVieSB0aGUgZGV2aWNlIHJldHVybnMgbnVsbCBzZW5zZSBkYXRhLgorCisgICAgKiBzZC5jOiBBZGQgY29kZSB0byBzcGluIHVwIGEgZHJpdmUgaWYgaXQgaXMgbm90IGFscmVhZHkgc3Bpbm5pbmcuCisgICAgRG8gdGhpcyBvbmUgYXQgYSB0aW1lIHRvIG1ha2UgaXQgZWFzaWVyIG9uIHBvd2VyIHN1cHBsaWVzLgorCisgICAgKiBzZF9pb2N0bC5jOiBVc2Ugc3luY19kZXYgaW5zdGVhZCBvZiBmc3luY19kZXYgaW4gQkxLRkxTQlVGIGlvY3RsLgorCisgICAgKiBzZWFnYXRlLmM6IFN3aXRjaCBhcm91bmQgREFUQS9DT05UUk9MIGxpbmVzLgorCisgICAgKiBzdC5jOiBDaGFuZ2Ugc2Vuc2UgdG8gdW5zaWduZWQuCisKK1RodSBBdWcgIDUgMTE6NTk6MTggMTk5MworCisgICAgKiAwLjk5cGwxMiByZWxlYXNlZC4KKworICAgICogY29uc3RhbnRzLmMsIGNvbnN0YW50cy5oOiBOZXcgZmlsZXMgd2l0aCBhc2NpaSBkZXNjcmlwdGlvbnMgb2YKKyAgICB2YXJpb3VzIGNvbmRpdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBEbyBub3QgdHJ5IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgbG93LWxldmVsIGRyaXZlcnMsCisgICAganVzdCBnZW5lcmF0ZSB0aGUgbGlzdCBvZiAubyBmaWxlcy4KKworICAgICogYWhhMTU0Mi5jOiBSZXBsYWNlIDE2IHdpdGggc2l6ZW9mKFNDcG50LT5zZW5zZV9idWZmZXIpLiAgQWRkIHRlc3RzCisgICAgZm9yIGFkZHJlc3NlcyA+IDE2TWIsIHBhbmljIGlmIHdlIGZpbmQgb25lLgorCisgICAgKiBhaGExNzQwLmM6IERpdHRvIHdpdGggc2l6ZW9mKCkuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xOC4gIEFkZCBuZXcgc2lnbmF0dXJlLCByZWdpc3RlciBJUlEKKyAgICB3aXRoIGlycWFjdGlvbi4gIFVzZSBJRCA3IGZvciBuZXcgYm9hcmQuICBCZSBtb3JlIGludGVsbGlnZW50IGFib3V0CisgICAgb2J0YWluaW5nIHRoZSBoL3MvYyBudW1iZXJzIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIGhvc3RzLmM6IERvIG5vdCBkZXBlbmQgdXBvbiBNYWtlZmlsZSBnZW5lcmF0ZWQgY291bnQgb2YgdGhlIG51bWJlcgorICAgIG9mIGxvdy1sZXZlbCBob3N0IGFkYXB0ZXJzLgorCisgICAgKiBzY3NpLmM6IFVzZSBhcnJheSBmb3Igc2NzaV9jb21tYW5kX3NpemUgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uLiAgQWRkCisgICAgVGV4ZWwgY2Ryb20gYW5kIE1heHRvciBYVC00MzgwUyB0byBibGFja2xpc3QuICBBbGxvdyBjb21waWxlIHRpbWUKKyAgICBvcHRpb24gZm9yIG5vLW11bHRpIGx1biBzY2FuLiAgQWRkIHNlbWFwaG9yZSBmb3IgcG9zc2libGUgcHJvYmxlbXMKKyAgICB3aXRoIGhhbmRzaGFraW5nLCBhc3N1bWUgZGV2aWNlIGlzIGZhdWx0eSB1bnRpbCB3ZSBrbm93IGl0IG5vdCB0byBiZQorICAgIHRoZSBjYXNlLiAgQWRkIERFQlVHX0lOSVQgc3ltYm9sIHRvIGR1bXAgaW5mbyBhcyB3ZSBzY2FuIGZvciBkZXZpY2VzLgorICAgIFplcm8gc2Vuc2UgYnVmZmVyIHNvIHdlIGNhbiB0ZWxsIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdC4gIFdoZW4KKyAgICBleGFtaW5pbmcgc2Vuc2UgaW5mb3JtYXRpb24sIHJlcXVlc3Qgc2Vuc2UgaWYgYnVmZmVyIGlzIGFsbCB6ZXJvLgorICAgIElmIFJFU0VULCByZXF1ZXN0IHNlbnNlIGluZm9ybWF0aW9uIHRvIHNlZSB3aGF0IHRvIGRvIG5leHQuCisKKyAgICAqIHNjc2lfZGVidWcuYzogQ2hhbmdlIHNvbWUgY29uc3RhbnRzIHRvIHVzZSBzeW1ib2xzIGxpa2UgSU5UX01BWC4KKworICAgICogc2NzaV9pb2N0bC5jIChrZXJuZWxfc2NzaV9pb2N0bCk6IE5ldyBmdW5jdGlvbiAtZm9yIG1ha2luZyBpb2N0bAorICAgIGNhbGxzIGZyb20ga2VybmVsIHNwYWNlLgorCisgICAgKiBzZC5jOiBJbmNyZWFzZSB0aW1lb3V0IHRvIDMwMC4gIFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmggdG8KKyAgICBkaXNwbGF5IGluZm8uICBVc2Ugc2NzaV9tYWxsb2MgYnVmZmVyIGZvciBSRUFEX0NBUEFDSVRZLCBzaW5jZQorICAgIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBhIHN0YWNrIGJhc2VkIGJ1ZmZlciBpcyA8IDE2TWIuCisKKyAgICAqIHNkX2lvY3RsLmM6IEFkZCBCTEtGTFNCVUYgaW9jdGwuCisKKyAgICAqIHNlYWdhdGUuYzogQWRkIG5ldyBjb21waWxlIHRpbWUgb3B0aW9ucyBmb3IgQVJCSVRSQVRFLAorICAgIFNMT1dfSEFORFNIQUtFLCBhbmQgU0xPV19SQVRFLiAgVXBkYXRlIGFzc2VtYmx5IGxvb3BzIGZvciB0cmFuc2ZlcnJpbmcKKyAgICBkYXRhLiAgVXNlIGtlcm5lbF9zY3NpX2lvY3RsIHRvIHJlcXVlc3QgbW9kZSBwYWdlIHdpdGggZ2VvbWV0cnkuCisKKyAgICAqIHNyLmM6IFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmMgdG8gZGlzcGxheSBtZXNzYWdlcy4KKworICAgICogc3QuYzogU3VwcG9ydCBmb3IgdmFyaWFibGUgYmxvY2sgc2l6ZS4KKworICAgICogdWx0cmFzdG9yLmM6IERvIG5vdCB1c2UgY2FjaGUgZm9yIHRhcGUgZHJpdmVzLiAgU2V0CisgICAgdW5jaGVja2VkX2lzYV9kbWEgZmxhZywgZXZlbiB0aG91Z2ggdGhpcyBtYXkgbm90IGJlIG5lZWRlZCAoZ2V0cyBzZXQKKyAgICBsYXRlcikuCisKK1NhdCBKdWwgMTcgMTg6MzI6NDQgMTk5MworCisgICAgKiAwLjk5cGwxMSByZWxlYXNlZC4gIEMrKyBjb21waWxhYmxlLgorCisgICAgKiBUaHJvdWdob3V0OiBBZGQgdHlwZSBjYXN0cyBhbGwgb3ZlciB0aGUgcGxhY2UsIGFuZCB1c2UgImlwIiBpbnN0ZWFkCisgICAgb2YgImluZm8iIGluIHRoZSB2YXJpb3VzIGJpb3NwYXJhbSBmdW5jdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBDb21waWxlIHNlYWdhdGUuYyB3aXRoIEMrKyBjb21waWxlci4KKworICAgICogYWhhMTU0Mi5jOiBBbHdheXMgc2V0IGNjYiBwb2ludGVyIGFzIHRoaXMgZ2V0cyB0cmFzaGVkIHNvbWVob3cgb24KKyAgICBzb21lIHN5c3RlbXMuICBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIFVwZGF0ZSBiaW9zcGFyYW0gZnVuY3Rpb24gYSBsaXR0bGUuCisKKyAgICAqIGFoYTE3NDAuYzogQWRkIGEgZmV3IHR5cGUgY2FzdHMuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xNyBmcm9tIDMuNi4gIE5vdyB3b3JrcyB3aXRoCisgICAgVE1DLTE4QzUwLgorCisgICAgKiBzY3NpLmM6IE1pbm9yIGNoYW5nZXMgaGVyZSBhbmQgdGhlcmUgd2l0aCBkYXRhdHlwZXMuICBTYXZlIHVzZV9zZworICAgIHdoZW4gcmVxdWVzdGluZyBzZW5zZSBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoaXMgY2FuIHByb3Blcmx5IGJlCisgICAgcmVzdG9yZWQgaWYgd2UgcmV0cnkgdGhlIGNvbW1hbmQuICBTZXQgYXNpZGUgZG1hIGJ1ZmZlcnMgYXNzdW1pbmcgZWFjaAorICAgIGJsb2NrIGlzIDEgcGFnZSwgbm90IDFLYiBtaW5peCBibG9jay4KKworICAgICogc2NzaV9pb2N0bC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIE90aGVyIG1pbm9yIGNoYW5nZXMuCisKKyAgICAqIHNkLmM6ICBDb3JyZWN0bHkgIGZyZWUgYWxsIHNjc2lfbWFsbG9jJ2QgbWVtb3J5IGlmIHdlIHJ1biBvdXQgb2YKKyAgICBkbWFfcG9vbC4gU3RvcmUgYmxvY2tzaXplIGluZm9ybWF0aW9uIGZvciBlYWNoIHBhcnRpdGlvbi4KKworICAgICogc2VhZ2F0ZS5jOiBNaW5vciBjbGVhbnVwcyBoZXJlIGFuZCB0aGVyZS4KKworICAgICogc3IuYzogU2V0IHVwIGJsb2Nrc2l6ZSBhcnJheSBmb3IgYWxsIGRpc2NzLiAgRml4IGJ1ZyBpbiBmcmVlaW5nCisgICAgYnVmZmVycyBpZiB3ZSBydW4gb3V0IG9mIGRtYSBwb29sLgorCitUaHUgSnVuICAyIDE3OjU4OjExIDE5OTMKKworICAgICogMC45OXBsMTAgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogU3VwcG9ydCBmb3IgQlQgNDQ1UyAoVkwtYnVzIGJvYXJkIHdpdGggbm8gZG1hIGNoYW5uZWwpLgorCisgICAgKiBmZG9tYWluLmM6IFVwZ3JhZGUgdG8gdmVyc2lvbiAzLjYuIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFROQy0xOEM1MC4KKworICAgICogc2NzaS5jOiBGaXJzdCBhdHRlbXB0IHRvIGZpeCBwcm9ibGVtIHdpdGggb2xkX3VzZV9zZy4gIENoYW5nZQorICAgIE5PVF9SRUFEWSB0byBhIFNVR0dFU1RfQUJPUlQuICBGaXggdGltZW91dCByYWNlIHdoZXJlIHRpbWUgbWlnaHQKKyAgICBnZXQgZGVjcmVtZW50ZWQgcGFzdCB6ZXJvLgorCisgICAgKiBzZC5jOiBBZGQgYmxvY2tfZnN5bmMgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggdGFibGUuCisKKyAgICAqIHNyLmM6IEluY3JlYXNlIHRpbWVvdXQgdG8gNTAwIGZyb20gMjUwLiAgQWRkIGVudHJ5IGZvciBzeW5jIGluCisgICAgZGlzcGF0Y2ggdGFibGUgKHN1cHBseSBOVUxMKS4gIElmIHdlIGRvIG5vdCBoYXZlIGEgc2VjdG9yc2l6ZSwKKyAgICB0cnkgdG8gZ2V0IGl0IGluIHRoZSBzZF9vcGVuIGZ1bmN0aW9uLiAgQWRkIG5ldyBmdW5jdGlvbiBqdXN0IHRvCisgICAgb2J0YWluIHNlY3RvcnNpemUuCisKKyAgICAqIHNyLmg6IEFkZCBuZWVkc19zZWN0b3Jfc2l6ZSBzZW1hcGhvcmUuCisKKyAgICAqIHN0LmM6IEFkZCBOVUxMIGZvciBmc3luYyBpbiBkaXNwYXRjaCB0YWJsZS4KKworICAgICogd2Q3MDAwLmM6IEFsbG93IGFub3RoZXIgY29uZGl0aW9uIGZvciBwb3dlciBvbiB0aGF0IGFyZSBub3JtYWwKKyAgICBhbmQgZG8gbm90IHJlcXVpcmUgYSBwYW5pYy4KKworVGh1IEFwciAyMiAyMzoxMDoxMSAxOTkzCisKKyAgICAqIDAuOTlwbDkgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogVXNlICh2b2lkKSBpbnN0ZWFkIG9mICgpIGluIHNldHVwX21haWxib3hlcy4KKworICAgICogc2NzaS5jOiBJbml0aWFsaXplIHRyYW5zZmVyc2l6ZSBhbmQgdW5kZXJmbG93IGZpZWxkcyBpbiBTQ21kIHRvIDAuCisgICAgRG8gbm90IHBhbmljIGZvciB1bnN1cHBvcnRlZCBtZXNzYWdlIGJ5dGVzLgorCisgICAgKiBzY3NpLmg6IEFsbG9jYXRlIDEyIGJ5dGVzIGluc3RlYWQgb2YgMTAgZm9yIGNvbW1hbmRzLiAgQWRkCisgICAgdHJhbnNmZXJzaXplIGFuZCB1bmRlcmZsb3cgZmllbGRzLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEZ1cnRoZXIgYnVnZml4IHRvIGlvY3RsX3Byb2JlLgorCisgICAgKiBzZC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc2RfaW9jdGwuCisgICAgSW5pdGlhbGl6ZSB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuCisKKyAgICAqIHNkX2lvY3RsLmM6IERpdHRvIGZvciBzZF9pb2N0bCgsLCwsKTsKKworICAgICogc2VhZ2F0ZS5jOiBOZXcgdmVyc2lvbiBmcm9tIERyZXcuICBJbmNsdWRlcyBuZXcgc2lnbmF0dXJlcyBmb3IgRkQKKyAgICBjYXJkcy4gIFN1cHBvcnQgZm9yIDB3cyBqdW1wZXIuIENvcnJlY3RseSBpbml0aWFsaXplCisgICAgc2NzaV9ob3N0c1tob3N0bnVtXS50aGlzX2lkLiAgSW1wcm92ZWQgaGFuZGluZyBvZgorICAgIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBhbmQgc3VwcG9ydCBjb21tYW5kIGxpbmtpbmcuICBVc2UKKyAgICB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuICBTdXBwb3J0IHNjYXR0ZXItZ2F0aGVyLgorCisgICAgKiBzci5jLCBzcl9pb2N0bC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc3JfaW9jdGwuCisgICAgVXNlIGJ1ZmZlciBhbmQgYnVmbGVuZ3RoIGluIGRvX2lvY3RsLiAgUGF0Y2hlcyBmcm9tIENocmlzIE5ld2JvbGQgZm9yCisgICAgc2NzaS0yIGF1ZGlvIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogQ29tbWVudCBvdXQgaW5fYnl0ZSAoY29tcGlsZXIgd2FybmluZykuCisKKyAgICAqIHdkNzAwMC5jOiBDaGFuZ2UgKCkgdG8gKHZvaWQpIGluIHdkNzAwMF9lbmFibGVfZG1hLgorCitXZWQgTWFyIDMxIDE2OjM2OjI1IDE5OTMKKworICAgICogMC45OXBsOCByZWxlYXNlZC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgbWFpbGJveGVzIGJldHRlciBmb3IgMTU0MkMuCisgICAgICAgIERvIG5vdCB0cnVuY2F0ZSBudW1iZXIgb2YgY3lsaW5kZXJzIGF0IDEwMjQgZm9yIGJpb3NwYXJhbSBjYWxsLgorCisgICAgKiBhaGExNzQwLmM6IEZpeCBhIGZldyBtaW5vciBidWdzIGZvciBtdWx0aXBsZSBkZXZpY2VzLgorICAgICAgICBTYW1lIGFzIGFib3ZlIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIHNjc2kuYzogQWRkIGxvY2thYmxlIHNlbWFwaG9yZSBmb3IgcmVtb3ZhYmxlIGRldmljZXMgdGhhdCBjYW4gaGF2ZQorICAgIG1lZGlhIHJlbW92YWwgcHJldmVudGVkLiAgQWRkIGFub3RoZXIgc2lnbmF0dXJlIGZvciBmbG9wdGljYWxzLgorICAgIChhbGxvY2F0ZV9kZXZpY2UpOiBGaXggcmFjZSBjb25kaXRpb24uICBBbGxvdyBtb3JlIHNwYWNlIGluIGRtYSBwb29sCisgICAgZm9yIGJsb2Nrc2l6ZXMgb2YgdXAgdG8gNEtiLgorCisgICAgKiBzY3NpLmg6IERlZmluZSBDT01NQU5EX1NJWkUuICBEZWZpbmUgYSBTQ1NJIHNwZWNpZmljIHZlcnNpb24gb2YKKyAgICBJTklUX1JFUVVFU1QgdGhhdCBjYW4gcnVuIHdpdGggaW50ZXJydXB0cyBvZmYuCisKKyAgICAqIHNjc2lfaW9jdGwuYzogTWFrZSBpb2N0bF9wcm9iZSBmdW5jdGlvbiBtb3JlIGlkaW90LXByb29mLiAgSWYKKyAgICBhIHJlbW92YWJsZSBkZXZpY2Ugc2F5cyBJTExFR0FMIFJFUVVFU1QgdG8gYSBkb29yLWxvY2tpbmcgY29tbWFuZCwKKyAgICBjbGVhciBsb2NrYWJsZSBmbGFnLiAgQWRkIFNDU0lfSU9DVExfR0VUX0lETFVOIGlvY3RsLiAgRG8gbm90IGF0dGVtcHQKKyAgICB0byBsb2NrIGRvb3IgZm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBsb2NrYWJsZSBzZW1hcGhvcmUgc2V0LgorCisgICAgKiBzZC5jOiBGaXggcmFjZSBjb25kaXRpb24gZm9yIG11bHRpcGxlIGRpc2tzLiAgVXNlIElOSVRfU0NTSV9SRVFVRVNUCisgICAgaW5zdGVhZCBvZiBJTklUX1JFUVVFU1QuICBBbGxvdyBzZWN0b3Igc2l6ZXMgb2YgMTAyNCBhbmQgMjU2LiAgRm9yCisgICAgcmVtb3ZhYmxlIGRpc2tzIHRoYXQgYXJlIG5vdCByZWFkeSwgbWFyayB0aGVtIGFzIGhhdmluZyBhIG1lZGlhIGNoYW5nZQorICAgIChzb21lIGRyaXZlcyBkbyBub3QgcmVwb3J0IHRoaXMgbGF0ZXIpLgorCisgICAgKiBzZWFnYXRlLmM6IFVzZSB2b2xhdGlsZSBrZXl3b3JkIGZvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHBvaW50ZXJzLgorCisgICAgKiBzci5jOiBGaXggcmFjZSBjb25kaXRpb24sIGEgbGEgc2QuYy4gIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgcmV0cmllcworICAgIHRvIDEuICBVc2UgSU5JVF9TQ1NJX1JFUVVFU1QuICBBbGxvdyA1MTIgYnl0ZSBzZWN0b3Igc2l6ZXMuICBEbyBhCisgICAgcmVhZF9jYXBhY2l0eSB3aGVuIHdlIGluaXQgdGhlIGRldmljZSBzbyB3ZSBrbm93IHRoZSBzaXplIGFuZAorICAgIHNlY3RvcnNpemUuCisKKyAgICAqIHN0LmM6IElmIGlvY3RsIG5vdCBmb3VuZCBpbiBzdC5jLCB0cnkgc2NzaV9pb2N0bCBmb3Igb3RoZXJzLgorCisgICAgKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIG51bWJlciBvZiBjeWxpbmRlcnMgYXQgMTAyNCBmb3IKKyAgICBiaW9zcGFyYW0gY2FsbC4KKworICAgICogd2Q3MDAwLmM6IERpdHRvLgorICAgIFRocm91Z2hvdXQ6IFVzZSBDT01NQU5EX1NJWkUgbWFjcm8gdG8gZGV0ZXJtaW5lIGxlbmd0aCBvZiBzY3NpCisgICAgY29tbWFuZC4KKworCisKK1NhdCBNYXIgMTMgMTc6MzE6MjkgMTk5MworCisgICAgKiAwLjk5cGw3IHJlbGVhc2VkLgorCisgICAgVGhyb3VnaG91dDogSW1wcm92ZSBwdW5jdHVhdGlvbiBpbiBzb21lIG1lc3NhZ2VzLCBhbmQgdXNlIG5ldworICAgIHZlcmlmeV9hcmVhIHN5bnRheC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgdW5leHBlY3RlZCBpbnRlcnJ1cHRzIGJldHRlci4KKworICAgICogc2NzaS5jOiBEaXR0by4gIEhhbmRsZSByZXNldCBjb25kaXRpb25zIGEgYml0IGJldHRlciwgYXNraW5nIGZvcgorICAgIHNlbnNlIGluZm9ybWF0aW9uIGFuZCByZXRyeWluZyBpZiByZXF1aXJlZC4KKworICAgICogc2NzaV9pb2N0bC5jOiBBbGxvdyBmb3IgMTIgYnl0ZSBzY3NpIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogVXBkYXRlIHRvIHVzZSBzY2F0dGVyLWdhdGhlci4KKworU2F0IEZlYiAyMCAxNzo1NzoxNSAxOTkzCisKKyAgICAqIDAuOTlwbDYgcmVsZWFzZWQuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy41LiAgSGFuZGxlIHNwdXJpb3VzIGludGVycnVwdHMKKyAgICBiZXR0ZXIuCisKKyAgICAqIHNkLmM6IFVzZSByZWdpc3Rlcl9ibGtkZXYgZnVuY3Rpb24uCisKKyAgICAqIHNyLmM6IERpdHRvLgorCisgICAgKiBzdC5jOiBVc2UgcmVnaXN0ZXJfY2hyZGV2IGZ1bmN0aW9uLgorCisgICAgKiB3ZDcwMDAuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisKK1NhdCBGZWIgIDYgMTE6MjA6NDMgMTk5MworCisgICAgKiAwLjk5cGw1IHJlbGVhc2VkLgorCisgICAgKiBzY3NpLmM6IEZpeCBidWcgaW4gdGVzdGluZyBmb3IgVU5JVF9BVFRFTlRJT04uCisKKyAgICAqIHdkNzAwMC5jOiBDaGVjayBhdCBtb3JlIGFkZHJlc3NlcyBmb3IgYmlvcy4gIEZpeCBidWcgaW4gYmlvc3BhcmFtCisgICAgKGhlYWRzICYgc2VjdG9ycyB0dXJuZWQgYXJvdW5kKS4KKworV2VkIEphbiAyMCAxODoxMzo1OSAxOTkzCisKKyAgICAqIDAuOTlwbDQgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogSWdub3JlIGxlYWRpbmcgc3BhY2VzIHdoZW4gbG9va2luZyBmb3IgYmxhY2tsaXN0ZWQgZGV2aWNlcy4KKworICAgICogc2VhZ2F0ZS5jOiBBZGQgYSBmZXcgbmV3IHNpZ25hdHVyZXMgZm9yIEZEIGNhcmRzLiAgQW5vdGhlciBwYXRjaAorICAgIHdpdGggU0NpbnQgdG8gZml4IHJhY2UgY29uZGl0aW9uLiAgVXNlIHJlY3Vyc2lvbl9kZXB0aCB0byBrZWVwIHRyYWNrCisgICAgb2YgaG93IG1hbnkgdGltZXMgd2UgaGF2ZSBiZWVuIHJlY3Vyc2l2ZWx5IGNhbGxlZCwgYW5kIGRvIG5vdCBzdGFydAorICAgIGFub3RoZXIgY29tbWFuZCB1bmxlc3Mgd2UgYXJlIG9uIHRoZSBvdXRlciBsZXZlbC4gIEZpeGVzIGJ1ZworICAgIHdpdGggU3lxdWVzdCBjYXJ0cmlkZ2UgZHJpdmVzICh1c2VkIHRvIGNyYXNoIGtlcm5lbCksIGJlY2F1c2UKKyAgICB0aGV5IGRvIG5vdCBkaXNjb25uZWN0IHdpdGggbGFyZ2UgZGF0YSB0cmFuc2ZlcnMuCisKK1R1ZSBKYW4gMTIgMTQ6MzM6MzYgMTk5MworCisgICAgKiAwLjk5cGwzIHJlbGVhc2VkLgorCisgICAgKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDMuMyAoYSBmZXcgbmV3IHNpZ25hdHVyZXMpLgorCisgICAgKiBzY3NpLmM6IEFkZCBDRFUtNTQxLCBEZW5vbiBEUkQtMjVYIHRvIGJsYWNrbGlzdC4KKyAgICAoYWxsb2NhdGVfcmVxdWVzdCwgcmVxdWVzdF9xdWV1ZWFibGUpOiBJbml0IHJlcXVlc3Qud2FpdGluZyB0byBOVUxMIGlmCisgICAgbm9uLWJ1ZmZlciB0eXBlIG9mIHJlcXVlc3QuCisKKyAgICAqIHNlYWdhdGUuYzogIEFsbG93IGNvbnRyb2xsZXIgdG8gYmUgb3ZlcnJpZGRlbiB3aXRoIENPTlRST0xMRVIgc3ltYm9sLgorICAgIFNldCBTQ2ludD1OVUxMIHdoZW4gd2UgYXJlIGRvbmUsIHRvIHJlbW92ZSByYWNlIGNvbmRpdGlvbi4KKworICAgICogc3QuYzogQ2hhbmdlcyBmcm9tIEthaS4KKworV2VkIERlYyAzMCAyMDowMzo0NyAxOTkyCisKKyAgICAqIDAuOTlwbDIgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogQmxhY2tsaXN0IGJhY2sgaW4uICBSZW1vdmUgTmV3YnVyeSBkcml2ZSBhcyBvdGhlciBidWdmaXgKKyAgICBlbGltaW5hdGVzIG5lZWQgZm9yIGl0IGhlcmUuCisKKyAgICAqIHNkLmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFQUNDRVMgaWYgbm8gc3VjaCBkZXZpY2UgYXZhaWxhYmxlLgorICAgIChzZF9pbml0KSBJbml0IGJsa2Rldl9mb3BzIGVhcmxpZXIgc28gdGhhdCBzZF9vcGVuIGlzIGF2YWlsYWJsZSBzb29uZXIuCisKKyAgICAqIHNyLmM6IFNhbWUgYXMgYWJvdmUgZm9yIHNkLmMuCisKKyAgICAqIHN0LmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFTlhJTyBpZiBubyBkZXZpY2UuICBJbml0IGNocmRldl9mb3BzCisgICAgc29vbmVyLCBzbyB0aGF0IGl0IGlzIGFsd2F5cyB0aGVyZSBldmVuIGlmIG5vIHRhcGVzLgorCisgICAgKiBzZWFnYXRlLmMgKGNvbnRyb2xsZXJfdHlwZSk6IE5ldyB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mIFNUMHggb3IKKyAgICBGRC4gIE1vZGlmeSBzaWduYXR1cmVzIGxpc3QgdG8gaW5kaWNhdGUgY29udHJvbGxlciB0eXBlLCBhbmQgaW5pdAorICAgIGNvbnRyb2xsZXJfdHlwZSBvbmNlIHdlIGZpbmQgYSBtYXRjaC4KKworICAgICogd2Q3MDAwLmMgKHdkNzAwMF9zZXRfc3luYyk6IFJlbW92ZSByZWR1bmRhbnQgZnVuY3Rpb24uCisKK1N1biBEZWMgMjAgMTY6MjY6MjQgMTk5MgorCisgICAgKiAwLjk5cGwxIHJlbGVhc2VkLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEJ1Z2ZpeCAtIGNoZWNrIGRldi0+aW5kZXgsIG5vdCBkZXYtPmlkIGFnYWluc3QKKyAgICBOUl9TQ1NJX0RFVklDRVMuCisKKyAgICAqIHNyX2lvY3RsLmM6IFZlcmlmeSB0aGF0IGRldmljZSBleGlzdHMgYmVmb3JlIGFsbG93aW5nIGFuIGlvY3RsLgorCisgICAgKiBzdC5jOiBQYXRjaGVzIGZyb20gS2FpIC0gY2hhbmdlIHRpbWVvdXQgdmFsdWVzLCBpbXByb3ZlIGVuZCBvZiB0YXBlCisgICAgaGFuZGxpbmcuCisKK1N1biBEZWMgMTMgMTg6MTU6MjMgMTk5MgorCisgICAgKiAwLjk5IGtlcm5lbCByZWxlYXNlZC4gIEJhc2VsaW5lIGZvciB0aGlzIENoYW5nZUxvZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5pcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxOWY1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzCkBAIC0wLDAgKzEsMTIyIEBACitJQk0gU2VydmVSQUlEIGRyaXZlciBDaGFuZ2UgTG9nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICAgNS4wMC4wMSAgLSBTYXJhc290YSAoIDVpICkgYWRhcHRlcnMgbXVzdCBhbHdheXMgYmUgc2Nhbm5lZCBmaXJzdCAgCisgICAgICAgICAgICAgICAgIC0gR2V0IHJpZCBvbiBJT0NUTF9ORVdfQ09NTUFORCBjb2RlICAKKyAgICAgICAgICAgICAgICAgLSBBZGQgRXh0ZW5kZWQgRENEQiBDb21tYW5kcyBmb3IgVGFwZSBTdXBwb3J0IGluIDVJICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjExICAtIERvbid0IGFjdHVhbGx5IFJFU0VUIHVubGVzcyBpdCdzIHBoeXNpY2FsbHkgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgLSBSZW1vdmUgdW51c2VkIGNvbXBpbGUgb3B0aW9ucworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBEYXRhIENvcnJ1cHRpb24gaWYgRmlyc3QgU2NhdHRlciBHYXRoZXIgRWxlbWVudCBpcyA+IDY0SworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBJbmNyZWFzZSBEZWxheXMgaW4gRmxhc2hpbmcgKCBUcm9tYm9uZSBPbmx5IC0gNEggKSAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjA1ICAtIFVzZSBOZXcgUENJIEFyY2hpdGVjdHVyZSB0byBmYWNpbGl0YXRlIEhvdCBQbHVnIERldmVsb3BtZW50CisgICAgICAgIAorICAgICAgICA0LjkwLjAxICAtIEFkZCBTZXJ2ZVJBSUQgVmVyc2lvbiBDaGVja2luZworCisgICAgICAgIDQuODAuMjYgIC0gQ2xlYW4gdXAgcG90ZW50aWFsIGNvZGUgcHJvYmxlbXMgKCBBcmphbidzIHJlY29tbWVuZGF0aW9ucyApCisgICAgICAgIAorICAgICAgICA0LjgwLjIxICAtIENoYW5nZSBtZW1jcHkoKSB0byBjb3B5X3RvX3VzZXIoKSBpbiBOVlJBTSBQYWdlIDUgSU9DVEwgcGF0aCAgIAorICAgICAgICAKKyAgICAgICAgNC44MC4yMCAgLSBTZXQgbWF4X3NlY3RvcnMgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZSAoIGlmID49IDIuNC43IGtlcm5lbCApCisgICAgICAgICAgICAgICAgIC0gNSBzZWNvbmQgZGVsYXkgbmVlZGVkIGFmdGVyIHJlc2V0dGluZyBhbiBpOTYwIGFkYXB0ZXIKKyAgICAgICAgCisgICAgICAgIDQuODAuMTQgIC0gVGFrZSBhbGwgc2VtYXBob3JlcyBvZmYgc3RhY2sgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIENsZWFuIFVwIE5ld19JT0NUTCBwYXRoCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDQuODAuMDQgIC0gRWxpbWluYXRlIGNhbGxzIHRvIHN0cnRvaygpIGlmIDIuNC54IG9yIGdyZWF0ZXIgCisgICAgICAgICAgICAgICAgIC0gQWRqdXN0bWVudHMgdG8gRGV2aWNlIFF1ZXVlIERlcHRoICAgICAgICAgICAgICAgCisKKyAgICAgICAgNC44MC4wMCAgLSBNYWtlIGlhNjQgU2FmZSAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzIuMDEgIC0gSS9PIE1hcHBlZCBNZW1vcnkgcmVsZWFzZSAoIHNvICJpbnNtb2QgaXBzIiBkb2VzIG5vdCBGYWlsICkgICAgCisgICAgICAgICAgICAgICAgIC0gRG9uJ3QgSXNzdWUgSW50ZXJuYWwgRkZEQyBDb21tYW5kIGlmIHRoZXJlIGFyZSBBY3RpdmUgQ29tbWFuZHMgCisgICAgICAgICAgICAgICAgIC0gQ2xvc2UgV2luZG93IGZvciBnZXR0aW5nIHRvbyBtYW55IElPQ1RMJ3MgYWN0aXZlIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjcyLjAwICAtIEFsbG93IGZvciBhIFNjYXR0ZXItR2F0aGVyIEVsZW1lbnQgdG8gZXhjZWVkIE1BWF9YRkVSIFNpemUgICAgIAorICAgICAgICAKKyAgICAgICAgNC43MS4wMCAgLSBDaGFuZ2UgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBub3QgdXNlIEdGUF9ETUEgZmxhZyAKKyAgICAgICAgICAgICAgICAgLSBDb2RlIENsZWFuLVVwIGZvciAyLjQueCBrZXJuZWwgICAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzAuMTUgIC0gRml4IEJyZWFrdXAgZm9yIHZlcnkgbGFyZ2UgKCBub24tU0cgKSByZXF1ZXN0cworICAgICAgICAKKyAgICAgICAgNC43MC4xMyAgLSBEb24ndCByZWxlYXNlIEhBIExvY2sgaW4gaXBzX25leHQoKSB1bnRpbCBTQyB0YWtlbiBvZmYgcXVldWUgIAorICAgICAgICAgICAgICAgICAtIFVucmVnaXN0ZXIgU0NTSSBkZXZpY2UgaW4gaXBzX3JlbGVhc2UoKSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIERvbid0IFNlbmQgQ0RCJ3MgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQgIAorICAgICAgICAgICAgICAgICAKKyAgICAgICAgNC43MC4xMiAgLSBDb3JyZWN0aXZlIGFjdGlvbnMgZm9yIGJhZCBjb250cm9sbGVyICggZHVyaW5nIGluaXRpYWxpemF0aW9uICkKKyAgICAgICAgCisgICAgICAgIDQuNzAuMDkgIC0gVXNlIGEgQ29tbW9uICggTGFyZ2UgQnVmZmVyICkgZm9yIEZsYXNoaW5nIGZyb20gdGhlIEpDUk0gQ0QgICAgCisgICAgICAgICAgICAgICAgIC0gQWRkIElQU1NFTkQgRmxhc2ggU3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gU2V0IFNlbnNlIERhdGEgZm9yIFVua25vd24gU0NTSSBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gVXNlIFNsb3QgTnVtYmVyIGZyb20gTlZSQU0gUGFnZSA1IAorICAgICAgICAgICAgICAgICAtIFJlc3RvcmUgY2FsbGVyJ3MgRENEQiBTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjIwLjE0ICAtIFVwZGF0ZSBwYXRjaCBmaWxlcyBmb3Iga2VybmVsIDIuNC4wLXRlc3Q1CisKKyAgICAgICAgNC4yMC4xMyAgLSBGaXggc29tZSBmYWlsdXJlIGNhc2VzIC8gcmVzZXQgY29kZQorICAgICAgICAgICAgICAgICAtIEhvb2sgaW50byB0aGUgcmVib290X25vdGlmaWVyIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyCisgICAgICAgICAgICAgICAgICAgY2FjaGUKKworICAgICAgICA0LjIwLjAzIC0gUmVuYW1lIHZlcnNpb24gdG8gY29pbmNpZGUgd2l0aCBuZXcgcmVsZWFzZSBzY2hlZHVsZXMKKyAgICAgICAgICAgICAgICAtIFBlcmZvcm1hbmNlIGZpeGVzCisgICAgICAgICAgICAgICAgLSBGaXggdHJ1bmNhdGlvbiBvZiAvcHJvYyBmaWxlcyB3aXRoIGNhdAorICAgICAgICAgICAgICAgIC0gTWVyZ2UgaW4gY2hhbmdlcyB0aHJvdWdoIGtlcm5lbCAyLjQuMHRlc3QxYWMyMQorCisgICAgICAgIDQuMTAuMTMgLSBGaXggZm9yIGR5bmFtaWMgdW5sb2FkIGFuZCBwcm9jIGZpbGUgc3lzdGVtCisKKyAgICAgICAgNC4xMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNE0vNEwKKworICAgICAgICA0LjAwLjA2IC0gRml4IHRpbWVvdXQgd2l0aCBpbml0aWFsIEZGREMgY29tbWFuZAorCisgICAgICAgIDQuMDAuMDUgLSBSZW1vdmUgd2lzaF9ibG9jayBmcm9tIGluaXQgcm91dGluZQorICAgICAgICAgICAgICAgIC0gVXNlIGxpbnV4L3NwaW5sb2NrLmggaW5zdGVhZCBvZiBhc20vc3BpbmxvY2suaCBmb3Iga2VybmVscworICAgICAgICAgICAgICAgICAgMi4zLjE4IGFuZCBsYXRlcgorICAgICAgICAgICAgICAgIC0gU3luYyB3aXRoIG90aGVyIGNoYW5nZXMgZnJvbSB0aGUgMi4zIGtlcm5lbHMKKworICAgICAgICA0LjAwLjA0IC0gUmVuYW1lIHN0cnVjdHVyZXMvY29uc3RhbnRzIHRvIGJlIHByZWZpeGVkIHdpdGggSVBTXworCisgICAgICAgIDQuMDAuMDMgLSBBZGQgYWx0ZXJuYXRpdmUgcGFzc3RocnUgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgLSBBZGQgYWJpbGl0eSB0byBmbGFzaCBTZXJ2ZVJBSUQgQklPUworCisgICAgICAgIDQuMDAuMDIgLSBGaXggcHJvYmxlbSB3aXRoIFBUIERDREIgd2l0aCBubyBidWZmZXIKKworICAgICAgICA0LjAwLjAxIC0gQWRkIHN1cHBvcnQgZm9yIEZpcnN0IEZhaWx1cmUgRGF0YSBDYXB0dXJlCisKKyAgICAgICAgNC4wMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNAorCisgICAgICAgIDMuNjAuMDIgLSBNYWtlIERDREIgZGlyZWN0aW9uIGJhc2VkIG9uIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgICAgICAtIE9ubHkgYWxsb3cgb25lIERDREIgY29tbWFuZCB0byBhIFNDU0kgSUQgYXQgYSB0aW1lLgorCisgICAgICAgIDMuNjAuMDEgLSBSZW1vdmUgYm9ndXMgZXJyb3IgY2hlY2sgaW4gcGFzc3RocnUgcm91dGluZS4KKworICAgICAgICAzLjYwLjAwIC0gQnVtcCBtYXggY29tbWFuZHMgdG8gMTI4IGZvciB1c2Ugd2l0aCBTZXJ2ZVJBSUQKKyAgICAgICAgICAgICAgICAgIGZpcm13YXJlIDMuNjAuCisgICAgICAgICAgICAgICAgLSBDaGFuZ2UgdmVyc2lvbiB0byAzLjYwIHRvIGNvaW5jaWRlIHdpdGggU2VydmVSQUlEIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgIG51bWJlcmluZy4KKworICAgICAgICAxLjAwLjAwIC0gSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorICAgICAgICAgICAgICAgIC0gRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gMC45OS4wNQorCisgICAgICAgIDAuOTkuMDUgLSBGaXggYW4gb29wcyBvbiBjZXJ0YWluIHBhc3N0aHJ1IGNvbW1hbmRzCisKKyAgICAgICAgMC45OS4wNCAtIEZpeCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgcGFzc3RocnUgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgICAtLSB0aGlzIHJlcXVpcmVkIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHV0aWxpdGllcyB0byBjaGFuZ2UKKyAgICAgICAgICAgICAgICAtIEZpeCBlcnJvciByZWNvdmVyeSBjb2RlCisKKyAgICAgICAgMC45OS4wMyAtIE1ha2UgaW50ZXJydXB0IHJvdXRpbmUgaGFuZGxlIGFsbCBjb21wbGV0ZWQgcmVxdWVzdCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIGFkYXB0ZXIgbm90IGp1c3QgdGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgICAgIC0gTWFrZSBzdXJlIHBhc3N0aHJ1IGNvbW1hbmRzIGdldCB3b2tlbiB1cCBpZiB3ZSBydW4gb3V0IG9mCisgICAgICAgICAgICAgICAgICBTQ0JzCisgICAgICAgICAgICAgICAgLSBTZW5kIGFsbCBvZiB0aGUgY29tbWFuZHMgb24gdGhlIHF1ZXVlIGF0IG9uY2UgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgIG9uZSBhdCBhIHRpbWUgc2luY2UgdGhlIGNhcmQgd2lsbCBzdXBwb3J0IGl0LgorCisgICAgICAgIDAuOTkuMDIgLSBBZGRlZCBzb21lIGFkZGl0aW9uYWwgZGVidWcgc3RhdGVtZW50cyB0byBwcmludCBvdXQKKyAgICAgICAgICAgICAgICAgIGVycm9ycyBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIHJlYWQvd3JpdGUKKyAgICAgICAgICAgICAgICAgIHRvIGEgbG9naWNhbCBkcml2ZSAoSVBTX0RFQlVHKS4KKworICAgICAgICAgICAgICAgIC0gRml4ZWQgcmVhZC93cml0ZSBlcnJvcnMgd2hlbiB0aGUgYWRhcHRlciBpcyB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgOEsgc3RyaXBlIHNpemUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzU2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0wLDAgKzEsMzQ5IEBACitSZWxlYXNlIERhdGUJOiBUaHUgRmViIDAzIDEyOjI3OjIyIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC41IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglNb2RpZmllZCBuYW1lIG9mIHR3byBhdHRyaWJ1dGVzIGluIHNjc2lfaG9zdF90ZW1wbGF0ZS4KKwlPbiBXZWQsIDIwMDUtMDItMDIgYXQgMTA6NTYgLTA1MDAsIEp1LCBTZW9rbWFubiB3cm90ZToKKwk+ICsJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX2RldmljZV9hdHRycywKKwk+ICsJLnNob3N0X2F0dHJzCQkJPSBtZWdhcmFpZF9jbGFzc19kZXZpY2VfYXR0cnMsCisKKwlUaGVzZSBhcmUsIHBlcmhhcHMsIHNsaWdodGx5IGNvbmZ1c2luZyBuYW1lcy4KKwlUaGUgdGVybXMgZGV2aWNlIGFuZCBjbGFzc19kZXZpY2UgaGF2ZSB3ZWxsIGRlZmluZWQgbWVhbmluZ3MgaW4gdGhlCisJZ2VuZXJpYyBkZXZpY2UgbW9kZWwsIG5laXRoZXIgb2Ygd2hpY2ggaXMgd2hhdCB5b3UgbWVhbiBoZXJlLgorCVdoeSBub3Qgc2ltcGx5IG1lZ2FyYWlkX3NkZXZfYXR0cnMgYW5kIG1lZ2FyYWlkX3Nob3N0X2F0dHJzPworCisJT3RoZXIgdGhhbiB0aGlzLCBpdCBsb29rcyBmaW5lIHRvIG1lIHRvby4KKworUmVsZWFzZSBEYXRlCTogVGh1IEphbiAyNyAwMDowMTowMyBFU1QgMjAwNSAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4zIChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglCdW1wIHVwIHRoZSB2ZXJzaW9uIG9mIHNjc2kgbW9kdWxlIGR1ZSB0byBpdHMgY29uZmxpY3QuCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBKYW4gMjEgMDA6MDE6MDMgRVNUIDIwMDUgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMyAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNSAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKKworMS4JUmVtb3ZlIGRyaXZlciBpb2N0bCBmb3IgbG9naWNhbCBkcml2ZSB0byBzY3NpIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kCisJcmVwbGFjZSB3aXRoIHRoZSBzeXNmcyBhdHRyaWJ1dGUuIFRvIHJlbW92ZSBkcml2ZXMgYW5kIGNoYW5nZQorCWNhcGFjaXR5LCBhcHBsaWNhdGlvbiBzaGFsbCBub3cgdXNlIHRoZSBkZXZpY2UgYXR0cmlidXRlIHRvIGdldCB0aGUKKwlsb2dpY2FsIGRyaXZlIG51bWJlciBmb3IgYSBzY3NpIGRldmljZS4gRm9yIGFkZGluZyBuZXdseSBjcmVhdGVkCisJbG9naWNhbCBkcml2ZXMsIGNsYXNzIGRldmljZSBhdHRyaWJ1dGUgd291bGQgYmUgcmVxdWlyZWQgdG8gdW5pcXVlbHkKKwlpZGVudGlmeSBlYWNoIGNvbnRyb2xsZXIuCisJCS0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorCisJIkphbWVzLCBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhpcyBhIGxpdHRsZSBtb3JlLCBhbmQgeW91IG1heSBiZSBvbgorCXRvIHNvbWV0aGluZyBoZXJlLiBMZXQgZWFjaCBkcml2ZXIgYWRkIGZpbGVzIGFzIHN1Y2g6IgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMTIuMTUuMjAwNAorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIlRoZW4sIGlmIHlvdSBzaW1wbHkgcHVibGlzaCB5b3VyIExEIG51bWJlciBhcyBhbiBleHRyYSBwYXJhbWV0ZXIgb2YKKwl0aGUgZGV2aWNlLCB5b3UgY2FuIGxvb2sgdGhyb3VnaCAvc3lzIHRvIGZpbmQgaXQuIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDMuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIkkgZG9uJ3Qgc2VlIHdoeSBub3QgLi4uIGl0J3MgeW91ciBkcml2ZXIsIHlvdSBjYW4gcHVibGlzaCB3aGF0ZXZlcgorCWV4dHJhIGluZm9ybWF0aW9uIHlvdSBuZWVkIGFzIHNjc2lfZGV2aWNlIGF0dHJpYnV0ZXM7IHRoYXQgd2FzIG9uZSBvZgorCXRoZSBkZXNpZ25zIG9mIHRoZSBleHRlbnNpYmxlIGF0dHJpYnV0ZSBzeXN0ZW0uIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDYuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworMi4JQWRkIEFNSSBtZWdhcmFpZCBzdXBwb3J0IC0gQnJpYW4gS2luZyA8YnJraW5nQGNoYXJ0ZXIubmV0PgorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX1NVQlNZU19JRF9QRVJDM19EQywKKworMy4JTWFrZSBzb21lIGNvZGUgc3RhdGljIC0gQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorCURhdGU6CU1vbiwgMTUgTm92IDIwMDQgMDM6MTQ6NTcgKzAxMDAKKworCVRoZSBwYXRjaCBiZWxvdyBtYWtlcyBzb21lIG5lZWRsZXNzbHkgZ2xvYmFsIGNvZGUgc3RhdGljLgorCS13YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJK3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisKKwlTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CisKKzQuCUFkZGVkIE5FQyBST01CIHN1cHBvcnQgLSBORUMgTWVnYVJBSUQgUENJIEV4cHJlc3MgUk9NQiBjb250cm9sbGVyCisJCVBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX01FR0FSQUlEX05FQ19ST01CXzJFLAorCQlQQ0lfU1VCU1lTX0lEX05FQywgUENJX1NVQlNZU19JRF9NRUdBUkFJRF9ORUNfUk9NQl8yRSwKKworNS4JRml4ZWQgVGFwZSBkcml2ZSBpc3N1ZSA6IEZvciBhbnkgRGlyZWN0IENEQiBjb21tYW5kIHRvIHBoeXNpY2FsIGRldmljZQorCWluY2x1ZGluZyB0YXBlLCB0aW1lb3V0IHZhbHVlIHNldCBieSBkcml2ZXIgd2FzIDEwIG1pbnV0ZXMuIFdpdGggdGhpcyAKKwl2YWx1ZSwgbW9zdCBvZiBjb21tYW5kIHdpbGwgcmV0dXJuIHdpdGhpbiB0aW1lb3V0LiBIb3dldmVyLCBmb3IgdGhvc2UKKwljb21tYW5kIGxpa2UgRVJBU0Ugb3IgRk9STUFULCBpdCB0YWtlcyBtb3JlIHRoYW4gYW4gaG91ciBkZXBlbmRzIG9uCisJY2FwYWNpdHkgb2YgdGhlIGRldmljZSBhbmQgdGhlIGNvbW1hbmQgY291bGQgYmUgdGVybWluYXRlZCBiZWZvcmUgaXQgCisJY29tcGxldGVzLgorCVRvIGFkZHJlc3MgdGhpcyBpc3N1ZSwgdGhlICd0aW1lb3V0JyBmaWVsZCBpbiB0aGUgRENEQiBjb21tYW5kIHdpbGwgCisJaGF2ZSBOTyBUSU1FT1VUIChpLmUuLCA0KSB2YWx1ZSBhcyBpdHMgdGltZW91dCBvbiBEQ0RCIGNvbW1hbmQuCisKKworCitSZWxlYXNlIERhdGUJOiBUaHUgRGVjICA5IDE5OjEwOjIzIEVTVCAyMDA0CisJLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMyAoY21tIG1vZHVsZSkKKworaS4JSW50cm9kdWNlZCBkcml2ZXIgaW9jdGwgdGhhdCByZXR1cm5zIHNjc2kgYWRkcmVzcyBmb3IgYSBnaXZlbiBsZC4KKwkKKwkiV2h5IGNhbid0IHRoZSBleGlzdGluZyBzeXNmcyBpbnRlcmZhY2VzIGJlIHVzZWQgdG8gZG8gdGhpcz8iCisJCS0gQnJpYW4gS2luZyAoYnJraW5nQHVzLmlibS5jb20pCisJCisJIkkndmUgbG9va2VkIGludG8gc29sdmluZyB0aGlzIGFub3RoZXIgd2F5LCBidXQgSSBjYW5ub3Qgc2VlIGhvdworCXRvIGdldCB0aGlzIGRyaXZlci1wcml2YXRlIG1hcHBpbmcgb2YgbG9naWNhbCBkcml2ZSBudW1iZXItPiBIQ1RMCisJd2l0aG91dCBwdXR0aW5nIGNvZGUgc29tZXRoaW5nIGxpa2UgdGhpcyBpbnRvIHRoZSBkcml2ZXIuIgorCisJIi4uLmFuZCBieSBwcm92aWRpbmcgYSBtYXBwaW5nIGEgZnVuY3Rpb24gdG8gdXNlcnNwYWNlLCB0aGUgZHJpdmVyCisJaXMgZnJlZSB0byBjaGFuZ2UgaXRzIG1hcHBpbmcgYWxnb3JpdGhtIGluIHRoZSBmdXR1cmUgaWYgbmVjZXNzYXJ5IC4uIgorCQktIE1hdHQgRG9tc2NoIChNYXR0X0RvbXNjaEBkZWxsLmNvbSkKKworUmVsZWFzZSBEYXRlCTogVGh1IERlYyAgOSAxOTowMjoxNCBFU1QgMjAwNCAtIFNyZWVuaXZhcyBCYWdhbGtvdGUgPHNyZWVuaWJAbHNpbC5jb20+CisKK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4zIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4yIChjbW0gbW9kdWxlKQorCitpLglGaXggYSBidWcgaW4ga2lvYydzIGRtYSBidWZmZXIgZGVhbGxvY2F0aW9uCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBOb3YgIDQgMTg6MjQ6NTYgRVNUIDIwMDQgLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMiAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMSAoY21tIG1vZHVsZSkKKworaS4JSGFuZGxlIElPQ1RMIGNtZCB0aW1lb3V0cyBtb3JlIHByb3Blcmx5LgorCitpaS4JcGNpX2RtYV9zeW5jX3tzZyxzaW5nbGV9X2Zvcl9jcHUgd2FzIGludHJvZHVjZWQgaW50byBtZWdhcmFpZF9tYm94CisJaW5jb3JyZWN0bHkgKGluc3RlYWQgb2YgX2Zvcl9kZXZpY2UpLiBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIAorCXBjaV9kbWFfc3luY197c2csc2luZ2xlfV9mb3JfZGV2aWNlLgorCitSZWxlYXNlIERhdGUJOiBXZWQgT2N0IDA2IDExOjE1OjI5IEVEVCAyMDA0IC0gU3JlZW5pdmFzIEJhZ2Fsa290ZSA8c3JlZW5pYkBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4xIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorCitpLglSZW1vdmUgQ09ORklHX0NPTVBBVCBhcm91bmQgcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uCisKK1JlbGVhc2UgRGF0ZQk6IE1vbiBTZXAgMjcgMjI6MTU6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjMuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKKworaS4JRml4IGRhdGEgY29ycnVwdGlvbi4gQmVjYXVzZSBvZiBhIHR5cG8gaW4gdGhlIGRyaXZlciwgdGhlIElPIHBhY2tldHMKKwl3ZXJlIHdyb25nbHkgc2hhcmVkIGJ5IHRoZSBpb2N0bCBwYXRoLiBUaGlzIGNhdXNlcyBhIHdob2xlIElPIGNvbW1hbmQKKwl0byBiZSByZXBsYWNlZCBieSBhbiBpbmNvbWluZyBpb2N0bCBjb21tYW5kLgorCitSZWxlYXNlIERhdGUJOiBUdWUgQXVnIDI0IDA5OjQzOjM1IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4zLjEgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCitPbGRlciBWZXJzaW9uCTogMi4yMC4zLjAgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCisKK2kuCUZ1bmN0aW9uIHJlb3JkZXJpbmcgc28gdGhhdCBpbmxpbmUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGV5CisJYXJlIGFjdHVhbGx5IHVzZWQuIEl0IGlzIG5vdyBtYW5kYXRvcnkgZm9yIEdDQyAzLjQuMSAoY3VycmVudCBzdGFibGUpCisKKwlEZWNsYXJlIHNvbWUgaGVhdnktd2VpZ2h0IGZ1bmN0aW9ucyB0byBiZSBub24taW5saW5lZCwKKwltZWdhcmFpZF9tYm94X2J1aWxkX2NtZCwgbWVnYXJhaWRfbWJveF9ydW5wZW5kcSwKKwltZWdhcmFpZF9tYm94X3ByZXBhcmVfcHRocnUsIG1lZ2FyYWlkX21ib3hfcHJlcGFyZV9lcHRocnUsCisJbWVnYXJhaWRfYnVzeXdhaXRfbWJveAorCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCSJTb21ldGhpbmcgZWxzZSB0byBjbGVhbiB1cCBhZnRlciBpbmNsdXNpb246IGV2ZXJ5IGluc3RhbmNlIG9mIGFuCisJaW5saW5lIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlbmRlcmVkIGFzIGEgZnVsbCBmdW5jdGlvbiBjYWxsLCBiZWNhdXNlCisJdGhlIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkIGJlZm9yZSBpdCBpcyBkZWZpbmVkLiAgQXR1bCwgcGxlYXNlCisJcmUtYXJyYW5nZSB0aGUgY29kZSB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIG1vc3QgKGFsbCkgb2YgdGhlCisJZnVuY3Rpb24gcHJvdG90eXBlcyBhdCB0aGUgdG9wIG9mIGVhY2ggZmlsZSwgYW5kIGRlZmluZSAobm90IGp1c3QKKwlkZWNsYXJlIHdpdGggYSBwcm90b3R5cGUpIGVhY2ggaW5saW5lIGZ1bmN0aW9uIGJlZm9yZSBpdHMgZmlyc3QgdXNlIgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMDcuMjcuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCisKK2lpLglEaXNwbGF5IGVsYXBzZWQgdGltZSAoY291bnRkb3duKSB3aGlsZSB3YWl0aW5nIGZvciBGVyB0byBib290LgorCitpaWkuCU1vZHVsZSBjb21waWxhdGlvbiByZW9yZGVyIGluIE1ha2VmaWxlIHNvIHRoYXQgdW5yZXNvbHZlZCBzeW1ib2xzIGRvCisJbm90IG9jY3VyIHdoZW4gZHJpdmVyIGlzIGNvbXBpbGVkIG5vbi1tb2R1bGFyLgorCisJCVBhdHJpY2sgSi4gTG9QcmVzdGkgPHBhdGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgOC4yMi4yMDA0CisJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKKworUmVsZWFzZSBEYXRlCTogVGh1IEF1ZyAxOSAwOTo1ODozMyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMy4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuMi4wIChzY3NpIG1vZHVsZSksIDIuMjAuMS4wIChjbW0gbW9kdWxlKQorCitpLglXaGVuIGNvcHlpbmcgdGhlIG1haWxib3ggcGFja2V0cywgY29weSBvbmx5IGZpcnN0IDE0IGJ5dGVzIChmb3IgMzItYml0CisJbWFpbGJveGVzKSBhbmQgb25seSBmaXJzdCAyMiBieXRlcyAoZm9yIDY0LWJpdCBtYWlsYm94ZXMpLiBUaGlzIGlzIHRvCisJYXZvaWQgZ2V0dGluZyB0aGUgc3RhbGUgdmFsdWVzIGZvciBidXN5IGJpdC4gV2Ugd2FudCB0byBzZXQgdGhlIGJ1c3kKKwliaXQganVzdCBiZWZvcmUgaXNzdWluZyBjb21tYW5kIHRvIHRoZSBGVy4KKworaWkuCUluIHRoZSByZXNldCBoYW5kbGluZywgaWYgdGhlIHJlc2V0ZWQgY29tbWFuZCBpcyBub3Qgb3duZWQgYnkgdGhlCisJZHJpdmVyLCBkbyBub3QgKHdyb25nbHkpIHByaW50IGluZm9ybWF0aW9uIGZvciB0aGUgImF0dGFjaGVkIiBkcml2ZXIKKwlwYWNrZXQuCisKK2lpaS4JSGF2ZSBleHRlbmRlZCB3YWl0IHdoZW4gaXNzdWluZyBjb21tYW5kIGluIHN5bmNocm9ub3VzIG1vZGUuIFRoaXMgaXMKKwlyZXF1aXJlZCBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBvcHRpb24gUk9NIGlzIGRpc2FibGVkIGFuZCB0aGVyZSBpcworCW5vIEJJT1MgdG8gc3RhcnQgdGhlIGNvbnRyb2xsZXIuIFRoZSBGVyBzdGFydHMgdG8gYm9vdCBhZnRlciByZWNlaXZpbmcKKwl0aGUgZmlyc3QgY29tbWFuZCBmcm9tIHRoZSBkcml2ZXIuIFRoZSBjdXJyZW50IGRyaXZlciBoYXMgMSBzZWNvbmQKKwl0aW1lb3V0IGZvciB0aGUgc3luY2hyb25vdXMgY29tbWFuZHMsIHdoaWNoIGlzIGZhciBsZXNzIHRoYW4gd2hhdCBpcworCWFjdHVhbGx5IHJlcXVpcmVkLiBXZSBub3cgd2FpdCB1cCB0byBNQk9YX1JFU0VUX1RJTUUgKDE4MCBzZWNvbmRzKSBmb3IKKwlGVyBib290IHByb2Nlc3MuCisKK2l2LglJbiBtZWdhcmFpZF9tYm94X3Byb2R1Y3RfaW5mbywgY2xlYXIgdGhlIG1haWxib3ggY29udGVudHMgY29tcGxldGVseQorCWJlZm9yZSBwcmVwYXJpbmcgdGhlIGNvbW1hbmQgZm9yIGlucXVpcnkzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZQorCUZXIGRvZXMgbm90IGdldCBqdW5rIHZhbHVlcyBpbiB0aGUgY29tbWFuZC4KKwordi4JRG8gYXdheSB3aXRoIHRoZSByZWR1bmRhbnQgTFNJX0NPTkZJR19DT01QQVQgcmVkZWZpbml0aW9uIGZvcgorCUNPTkZJR19DT01QQVQuIFJlcGxhY2UgPGFzbS9pb2N0bDMyLmg+IHdpdGggPGxpbnV4L2lvY3RsMzIuaD4KKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA4LjE3LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3ZpLglBZGQgc3VwcG9ydCBmb3IgNjQtYml0IGFwcGxpY2F0aW9ucy4gQ3VycmVudCBkcml2ZXJzIGFzc3VtZSBvbmx5CisJMzItYml0IGFwcGxpY2F0aW9ucywgZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zLiBVc2UgdGhlICJkYXRhIiBhbmQKKwkiYnVmZmVyIiBmaWVsZHMgb2YgdGhlIG1pbWRfdCBzdHJ1Y3R1cmUsIGluc3RlYWQgb2YgZW1iZWRkZWQgMzItYml0CisJYWRkcmVzc2VzIGluIGFwcGxpY2F0aW9uIG1haWxib3ggYW5kIHBhc3N0aHJ1IHN0cnVjdHVyZXMuCisKK3ZpaS4JTW92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbWFuYWdlbWVudCBtb2R1bGUgZnJvbQorCW1lZ2FyYWlkX21tLmggdG8gbWVnYXJhaWRfbW0uYworCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKwordmlpaS4JQ2hhbmdlIGRlZmF1bHQgdmFsdWVzIGZvciBNRUdBUkFJRF9ORVdHRU4sIE1FR0FSQUlEX01NLCBhbmQKKwlNRUdBUkFJRF9NQUlMQk9YIHRvICduJyBpbiBLY29uZmlnLm1lZ2FyYWlkCisKKwkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCitpeC4JcmVwbGFjZSB1ZGVsYXkgd2l0aCBtc2xlZXAKKworeC4JVHlwb3MgY29ycmVjdGVkIGluIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlIGFkanVzdG1lbnRzLCBleHBsaWNpdAorCWdyb3VwaW5nIG9mIGV4cHJlc3Npb25zLgorCisKK1JlbGVhc2UgRGF0ZQk6IEZyaSBKdWwgMjMgMTU6MjI6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjIuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjEuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjEuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjAuMCAoY21tIG1vZHVsZSkKKworaS4JQWRkIFBDSSBpZHMgZm9yIEFjZXIgUk9NQiAyRSBzb2x1dGlvbgorCitpaS4JQWRkIFBDSSBpZHMgZm9yIEk0CisKK2lpaS4JVHlwbyBjb3JyZWN0ZWQgZm9yIHN1YnN5cyBpZCBmb3IgbWVnYXJhaWQgc2F0YSAzMDAtNHgKKworaXYuCVJlbW92ZSB5aWVsZCgpIHdoaWxlIG1haWxib3ggaGFuZHNoYWtlIGluIHN5bmNocm9ub3VzIGNvbW1hbmRzCisKKworCSJNeSBvdGhlciBtYWluIGdyaXBlIGlzIHRoaW5ncyBsaWtlIHRoaXM6CisKKwkrCS8vIHdhaXQgZm9yIG1heGltdW0gMSBzZWNvbmQgZm9yIHN0YXR1cyB0byBwb3N0CisJKwlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCSsJCWlmIChtYm94LT5udW1zdGF0dXMgIT0gMHhGRikgYnJlYWs7CisJKwkJdWRlbGF5KDI1KTsgeWllbGQoKTsKKwkrCX0KKworCXdoaWNoIGxpdHRlciB0aGUgZHJpdmVyLiAgVXNlIG9mIHlpZWxkKCkgaW4gZHJpdmVycyBpcyBkZXByZWNhdGVkLiIKKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA3LjE0LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3YuCVJlbW92ZSByZWR1bmRhbnQgX19tZWdhcmFpZF9idXN5d2FpdF9tYm94IHJvdXRpbmUKKwordmkuCUZpeCBidWcgaW4gdGhlIG1hbmFnbWVudCBtb2R1bGUsIHdoaWNoIGNhdXNlcyBhIHN5c3RlbSBsb2NrdXAgd2hlbiB0aGUKKwlJTyBtb2R1bGUgaXMgbG9hZGVkIGFuZCB0aGVuIHVubG9hZGVkLCBmb2xsb3dlZCBieSBleGVjdXRpbmcgYW55CisJbWFuYWdlbWVudCB1dGlsaXR5LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIG1hbmFnZW1lbnQgbW9kdWxlIGRvZXMgbm90CisJaGFuZGxlIHRoZSBhZGFwdGVyIHVucmVnaXN0ZXIgcHJvcGVybHkuCisKKwlTcGVjaWZpY2FsbHksIGl0IHN0aWxsIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSB1bnJlZ2lzdGVyZWQKKwljb250cm9sbGVycy4gVG8gYXZvaWQgdGhpcywgdGhlIHN0YXRpYyBhcnJheSBhZGFwdGVycyBoYXMgYmVlbgorCXJlcGxhY2VkIGJ5IGEgZHluYW1pYyBsaXN0LCB3aGljaCBnZXRzIHVwZGF0ZWQgZXZlcnkgdGltZSBhbiBhZGFwdGVyCisJaXMgYWRkZWQgb3IgcmVtb3ZlZC4KKworCUFsc28sIGR1cmluZyB1bnJlZ2lzdHJhdGlvbiBvZiB0aGUgSU8gbW9kdWxlLCB0aGUgcmVzb3VyY2VzIGFyZQorCW5vdyByZWxlYXNlZCBpbiB0aGUgZXhhY3QgcmV2ZXJzZSBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbiB0aW1lCisJc2VxdWVuY2UuCisKKworUmVsZWFzZSBEYXRlCTogRnJpIEp1biAyNSAxODo1ODo0MyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMS4wCitPbGRlciBWZXJzaW9uCTogbWVnYXJhaWQgMi4yMC4wLjEKKworaS4JU3RhbGUgbGlzdCBwb2ludGVyIGluIGFkYXB0ZXIgY2F1c2VzIGtlcm5lbCBwYW5pYyB3aGVuIG1vZHVsZQorCW1lZ2FyYWlkX21ib3ggaXMgdW5sb2FkZWQKKworCitSZWxlYXNlIERhdGUJOiBUaHUgSnVuIDI0IDIwOjM3OjExIEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjEKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAuMDAKKworaS4JTW9kdWxlcyBhcmUgbm90ICd5JyBieSBkZWZhdWx0LCBidXQgZGVwZW5kIG9uIGN1cnJlbnQgZGVmaW5pdGlvbiBvZgorCVNDU0kgJiBQQ0kuCisKK2lpLglSZWR1bmRhbnQgc3RydWN0dXJlIG1yYWlkX2RyaXZlcl90IHJlbW92ZWQuCisKK2lpaS4JTWlzY2VsbGFuZW91cyBpbmRlbnRhdGlvbiBhbmQgZ290by9sYWJlbCBmaXhlcy4KKwkJLSBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+LCAwNi4yNC4yMDA0IGxpbnV4LXNjc2kKKworaXYuCXNjc2lfaG9zdF9wdXQoKSwgZG8ganVzdCBiZWZvcmUgY29tcGxldGluZyBIQkEgc2h1dGRvd24uCisKKworCitSZWxlYXNlIERhdGUJOiBNb24gSnVuIDIxIDE5OjUzOjU0IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjAKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAucmMyIGFuZCAyLjAwLjMKKworaS4JSW5kZXBlbmRlbnQgbW9kdWxlIHRvIGludGVyYWN0IHdpdGggdXNlcmxhbmQgYXBwbGljYXRpb25zIGFuZAorCW11bHRpcGxleCBjb21tYW5kIHRvIGxvdyBsZXZlbCBSQUlEIG1vZHVsZShzKS4KKworCSJTaGFyZWQgY29kZSBpbiBhIHRoaXJkIG1vZHVsZSwgYSAibGlicmFyeSBtb2R1bGUiLCBpcyBhbiBhY2NlcHRhYmxlCisJc29sdXRpb24uIG1vZHByb2JlIGF1dG9tYXRpY2FsbHkgbG9hZHMgZGVwZW5kZW50IG1vZHVsZXMsIHNvIHVzZXJzCisJcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKKwlsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSBtb2R1bGUuIgorCisJCS0gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiAwMi4yNS4yMDA0IExLTUwKKworCSJBcyBKZWZmIGhpbnRlZCwgaWYgeW91ciB1c2Vyc3BhY2U8LT5kcml2ZXIgQVBJIGlzIGNvbnNpc3RlbnQgYmV0d2VlbgorCXlvdXIgbmV3IE1QVC1iYXNlZCBSQUlEIGNvbnRyb2xsZXJzIGFuZCB5b3VyIGV4aXN0aW5nIG1lZ2FyYWlkIGRyaXZlciwKKwl0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorCWJldHRlciBuYW1lKSwgbG9hZGVkIGJ5IGJvdGggbXB0cmFpZCBhbmQgbWVnYXJhaWQgYXV0b21hdGljYWxseSwgd2hpY2gKKwloYW5kbGVzIHJlZ2lzdGVyaW5nIHRoZSAvZGV2L21lZ2FyYWlkIG5vZGUgZHluYW1pY2FsbHkuIEluIHRoaXMgY2FzZSwKKwlib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKKwlhZGFwdGVyIGRpc2NvdmVyZWQsIGFuZCBsc2lpb2N0bCB3b3VsZCBlc3NlbnRpYWxseSBiZSBhIHN3aXRjaCwKKwlyZWRpcmVjdGluZyB1c2Vyc3BhY2UgdG9vbCBpb2N0bHMgdG8gdGhlIGFwcHJvcHJpYXRlIGRyaXZlci4iCisKKwkJLSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+IDAyLjI1LjIwMDQgTEtNTAorCitpaS4JUmVtb3ZlIEM5OSBpbml0aWFsaXphdGlvbnMgZnJvbSBwY2lfZGV2aWNlIGlkLgorCisJInBjaV9pZF90YWJsZV9nIHdvdWxkIGJlIG11Y2ggbW9yZSByZWFkYWJsZSB3aGVuIG5vdCB1c2luZyBDOTkKKwlpbml0aWFsaXplcnMuCisJUENJIHRhYmxlIGRvZXNuJ3QgY2hhbmdlLCB0aGVyZSdzIGxvdHMgb2YgdXNlcnMgdGhhdCBwcmVmZXIgdGhlIG1vcmUKKwlyZWFkYWJsZSB2YXJpYW50LiAgQW5kIGl0J3MgcmVhbGx5IGZhciBsZXNzIGFuZCBtdWNoIGVhc2llciB0byBncm9rCisJbGluZXMgd2l0aG91dCBDOTkgaW5pdGlhbGl6ZXJzLiIKKworCQktIENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4sIDA1LjI4LjIwMDQgbGludXgtc2NzaQorCitpaWkuCU1hbnkgZml4ZXMgYXMgc3VnZ2VzdGVkIGJ5IENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4gb24KKwlsaW51eC1zY3NpLCAwNS4yOC4yMDA0CisKK2l2LglXZSBub3cgc3VwcG9ydCB1cCB0byAzMiBwYXJhbGxlbCBpb2N0bCBjb21tYW5kcyBpbnN0ZWFkIG9mIGN1cnJlbnQgMS4KKwlUaGVyZSBpcyBhIGNvbnNjaW91cyBlZmZvcnQgdG8gbGV0IG1lbW9yeSBhbGxvY2F0aW9uIG5vdCBmYWlsIGZvciBpb2N0bAorCWNvbW1hbmRzLgorCit2LglEbyBhd2F5IHdpdGggaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQuIFVzZSBwY2lfcG9vbF8oY3JlYXRlfGFsbG9jKQorCWluc3RlYWQuCisKK3ZpLglLaWxsIHRhc2tsZXQgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKwordmlpLglEbyBub3QgdXNlICJob3N0X2xvY2snLCBkcml2ZXIgaGFzIGZpbmUtZ3JhaW4gbG9ja3Mgbm93IHRvIHByb3RlY3QgYWxsCisJZGF0YSBzdHJ1Y3R1cmVzLgorCit2aWlpLglPcHRpbWl6ZSB0aGUgYnVpbGQgc2NhdHRlci1nYXRoZXIgbGlzdCByb3V0aW5lLiBUaGUgY2FsbGVycyBhbHJlYWR5CisJa25vdyB0aGUgZGF0YSB0cmFuc2ZlciBhZGRyZXNzIGFuZCBsZW5ndGguCisKK2l4LglCZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5LiBEcml2ZXIgbm93CisJcGVyZm9ybXMgZXh0ZW5kZWQgZXJyb3JzIHJlY292ZXJ5IGZvciBpbnN0YW5jZXMgbGlrZSBzY3NpIGNhYmxlIHB1bGwuCisKK3guCURpc2Fzc29jaWF0ZSB0aGUgbWFuYWdlbWVudCBjb21tYW5kcyB3aXRoIGFuIG92ZXJsYWlkIHNjc2kgY29tbWFuZC4KKwlEcml2ZXIgbm93IHRyZWF0cyB0aGUgbWFuYWdlbWVudCBwYWNrZXRzIGFzIHNwZWNpYWwgcGFja2V0cyBhbmQgaGFzIGEKKwlkZWRpY2F0ZWQgY2FsbGJhY2sgcm91dGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwM2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4CkBAIC0wLDAgKzEsNDk1IEBACitTYXQgTWF5IDEyIDEyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIG5jcjUzYzh4eC0zLjQuM2IKKwktIEVuc3VyZSBMRURDIGJpdCBpbiBHUENOVEwgaXMgY2xlYXJlZCB3aGVuIHJlYWRpbmcgdGhlIE5WUkFNLgorCSAgRml4IHNlbnQgYnkgU3RpZyBUZWxmZXIgPHN0aWdAYXBpLW5ldHdvcmtzLmNvbT4uCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisKK01vbiBGZWIgMTIgMjI6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4zCisJLSBDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCkgYXMgQUMgd2FudHMgdGhpcyB0byBiZSBkb25lLgorCS0gR2V0IGJvdGggdGhlIEJBUiBjb29raWVzIGFjdHVhbCBhbmQgUENJIEJBUiB2YWx1ZXMuCisJICAoc2VlIENoYW5nZWxvZy5zeW01M2M4eHggcmV2LiAxLjcuMyBmb3IgZGV0YWlscykKKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjIKKwktIFNlZSBDaGFuZ2Vsb2cuc3ltNTNjOHh4LCBkcml2ZXIgdmVyc2lvbiAxLjcuMi4KKworV2VkIEp1bCAyNiAyMzozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjEKKwktIFByb3ZpZGUgT3BlbkZpcm1hcmUgcGF0aCB0aHJvdWdoIHRoZSBwcm9jIEZTIG9uIFBQQy4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgVXNlIFNDU0lfTkNSX0lPTUFQUEVEIGluc3RlYWQgb2YgTkNSX0lPTUFQUEVELgorCitUaHUgTWF5IDExICAgMTI6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiCisgCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJpCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIExldCB0aGUgZHJpdmVyIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCB0byAKKwkgIE9GRiBpbiB0aGUgTlZSQU0gYXMgaXQgZGlkIHByaW9yIHRvIHJldmlzaW9uIDMuMmcuCisKK1NhdCBBcHIgMSAgMTI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmgKKwktIEZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gb24gQWxwaGEgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDMuMmcuCisgICAgICAgICAgKGBwb3J0JyBjaGFuZ2VkIHRvIGBiYXNlX2lvJykuCisJLSBNb3ZlIGZyb20gYHN5bScgdG8gdGhpcyBkcml2ZXIgYSB0aW55IGNoYW5nZSBmb3IgX19zcGFyY19fIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworVGh1IE1hciAxNiAgIDk6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiLTMKKyAJLSBBZGRlZCBleGNsdXNpb24gZm9yIHRoZSA1M0MxMDEwIGFuZCA1M0MxMDEwXzY2IGNoaXBzCisJICB0byB0aGUgZHJpdmVyIChjaGFuZ2UgdG8gc3ltNTNjOHh4X2NvbW0uaCkuCisKK01vbiBNYXJjaCA2ICAyMzoxNSAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4yZworCS0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkIAorCSAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzICAKKwkgIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBvbmx5IGluY2x1ZGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyLCAKKwkgIGJ1dCB0aGluZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGxhdGVyLiBUaGlzIGNvZGUgYWRkcmVzc2VzIAorCSAgbm90YWJseToKKwkgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworCSAgKiBOVlJBTSBkZXRlY3Rpb24gYW5kIHJlYWRpbmcKKwkgICogRE1BIG1hcHBpbmcKKwkgICogQm9vdCBzZXR1cCBjb21tYW5kCisJICAqIEFuZCBzb21lIG90aGVyIC4uLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aGVuIHRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgorCitNb24gTWFyY2ggNiAgMjM6MTUgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKyAgICAgICAgKiByZXZpc2lvbiAzLjJnCisgICAgICAgIC0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkCisgICAgICAgICAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzCisgICAgICAgICAgYSBoZWFkZXIgZmlsZSB0aGF0IGlzIG9ubHkgaW5jbHVkZWQgYnkgdGhlIG5jcjUzYzh4eCBkcml2ZXIsCisgICAgICAgICAgYnV0IHRoaW5ncyB3aWxsIGJlIGNsZWFuZWQgdXAgbGF0ZXIuIFRoaXMgY29kZSBhZGRyZXNzZXMKKyAgICAgICAgICBub3RhYmx5OgorICAgICAgICAgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworICAgICAgICAgICogTlZSQU0gZGV0ZWN0aW9uIGFuZCByZWFkaW5nCisgICAgICAgICAgKiBETUEgbWFwcGluZworICAgICAgICAgICogQm9vdCBzZXR1cCBjb21tYW5kCisgICAgICAgICAgKiBBbmQgc29tZSBvdGhlciAuLi4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisgICAgICAgICAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorICAgICAgICAtIEdldCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIHRoZSBzY3NpIGNvbW1hbmQgc3RydWN0dXJlCisgICAgICAgICAgKFNjc2lfQ21uZCkgd2hlbiB0aGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKworRnJpIEphbiAxNCAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIHByZS0zLjNiLTEKKwktIE1lcmdlIHBhcmFsbGVsIGRyaXZlciBzZXJpZXMgMy4zMSBhbmQgMy4yZSAKKworVHVlIEphbiAxMSAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzEKKwktIEFkZGVkIHN1cHBvcnQgZm9yIG1vdW50aW5nIGRpc2tzIG9uIHdpZGUtbmFycm93LXdpZGUKKwkgIHNjc2kgY29uZmlndXJhdGlvbnMuICAKKwktIEJ1aWx0IG9mZiBvZiB2ZXJzaW9uIDMuMzAKKworTW9uIEphbiAxMCAxMzozMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gRGlzYWJsZWQgc3VwcG9ydCBmb3IgdGhlIDUzQzEwMTAuCisJLSBCdWlsdCBvZmYgb2YgdmVyc2lvbiAzLjJjCisKK1NhdCBKYW4gOCAgMjI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmUKKwktIEFkZCB5ZWFyIDIwMDAgY29weXJpZ2h0LgorCS0gRGlzcGxheSBjb3JyZWN0bHkgYnVzIHNpZ25hbHMgd2hlbiBidXMgaXMgZGV0ZWN0ZWQgd3JvbmcuCisJLSBSZW1vdmUgdGhlIGRlYWQgY29kZSB0aGF0IGJyb2tlIGRyaXZlciAzLjJkLgorCitNb24gRGVjIDYgIDIyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJkCisJLSBDaGFuZ2UgbWVzc2FnZXMgd3JpdHRlbiBieSB0aGUgZHJpdmVyIGF0IGluaXRpYWxpc2F0aW9uIGFuZCAKKwkgIHRocm91Z2ggdGhlIC9wcm9jIEZTIChyYXRoZXIgY29zbWV0aWMgY2hhbmdlcyB0aGF0IGNvbnNpc3QgaW4KKwkgIHByaW50aW5nIG91dCB0aGUgUENJIGJ1cyBudW1iZXIgYW5kIGRldmljZS9mdW5jdGlvbikuCisJLSBHZXQgcmlkIG9mIHRoZSBvbGQgUENJIGJpb3MgaW50ZXJmYWNlLCBidXQgcHJlc2VydmUga2VybmVsIDIuMCAKKwkgIGNvbXBhdGliaWxpdHkgZnJvbSBhIHNpbXBsZSB3cmFwcGVyLgorCS0gUmVtb3ZlIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gYWJvdXQgaGF2aW5nIHRvIGFjcXVpcmUgdGhlIAorCSAgaW9fcmVxdWVzdF9sb2NrIHNpbmNlIGl0IHNlZW1zIHRvIGJlIGEgZGVmaW5pdGUgZmVhdHVyZSBub3cuOikKKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCS0gQ2hhbmdlIHRoZSBkcml2ZXIgZGV0ZWN0aW9uIGNvZGUgYnkgdGhlIHN5bTUzYzh4eCBvbmUsIG1vZHVsbyAKKwkgIHNvbWUgbWlub3IgY2hhbmdlcy4gVGhlIGRyaXZlciBjYW4gbm93IGF0dGFjaCBhbnkgbnVtYmVyIG9mIAorCSAgY29udHJvbGxlcnMgKD40MCkgYW5kIGRvZXMgbm8gbG9uZ2VyIGhvZ2VyIHN0YWNrIHNwYWNlIGF0IAorCSAgaW5pdGlhbGlzYXRpb24uCisJLSBEZWZpbml0ZWx5IGRpc2FibGUgb3ZlcmxhcHBlZCBQQ0kgYXJiaXRyYXRpb24gZm9yIGFsbCBkdWFsIAorCSAgZnVuY3Rpb24gY2hpcHMsIHNpbmNlIEkgY2Fubm90IG1ha2Ugc3VyZSBmb3Igd2hhdCBjaGlwIHJldmlzaW9ucyAKKwkgIGl0IGlzIGFjdHVhbGx5IHNhZmUuCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNZTTUzQzE1MTBELgorCS0gVXBkYXRlIHRoZSBwb29yIFRla3JhbSBzeW5jIGZhY3RvciB0YWJsZS4KKwktIFJlbW92ZSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uIGFib3V0IGhhdmluZyB0byBhY3F1aXJlIHRoZSAKKwkgIGlvX3JlcXVlc3RfbG9jayBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIGRlZmluaXRlIGZlYXR1cmUgbm93LjopCisJLSBwcm9jX2RpciBzdHJ1Y3R1cmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3Iga2VybmVsID49IDIuMy4yNy4KKworU2F0IFNlcCAxMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmMKKwktIEhhbmRsZSBjb3JyZWN0bHkgKGhvcGVmdWxseSkgamlmZmllcyB3cmFwLWFyb3VuZC4KKwktIFJlc3RvcmUgdGhlIGVudHJ5IHVzZWQgdG8gZGV0ZWN0IDg3NSB1bnRpbCByZXZpc2lvbiAweGZmLgorCSAgKEkgcmVtb3ZlZCBpdCBpbmFkdmVydGVudGx5LCBpdCBzZWVtcyA6KSApCisJLSBSZXBsYWNlIF9faW5pdGZ1bmMoKSB3aGljaCBpcyBkZXByZWNhdGVkIHN0dWZmIGJ5IF9faW5pdCB3aGljaCAKKwkgIGlzIG5vdCB5ZXQgc28uIDstKQorCS0gQWRkIHN1cHBvcnQgb2Ygc29tZSAncmVzb3VyY2UgaGFuZGxpbmcnIGZvciBsaW51eC0yLjMuMTMuCisJICBCYXNpY2FsbHkgdGhlIEJBUnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUgY29tcGxleCAKKwkgIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZS4KKwktIFJlbW92ZSBzb21lIGRlcHJlY2F0ZWQgY29kZS4KKworU2F0IE1heSAxMCAgMTE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIHByZS0zLjJiLTEKKwktIFN1cHBvcnQgZm9yIHRoZSA1M0M4OTVBIGJ5IFBhbWVsYSBEZWxhbmV5IDxwYW0uZGVsYW5leUBsc2lsLmNvbT4KKwkgIFRoZSA1M0M4OTVBIGNvbnRhaW5zIGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIDg5NiBidXQgaGFzIG9ubHkgCisJICBvbmUgY2hhbm5lbCBhbmQgaGFzIGEgMzIgYml0IFBDSSBidXMuIEl0IGRvZXMgNjQgYml0IFBDSSBhZGRyZXNzaW5nIAorCSAgdXNpbmcgZHVhbCBjeWNsZSBQQ0kgZGF0YSB0cmFuc2ZlcnMuCisJLSBNaXNjZWxsYW5lb3VzIG1pbm9yIGZpeGVzLgorCS0gU29tZSBhZGRpdGlvbnMgdG8gdGhlIFJFQURNRS5uY3I1M2M4eHggZmlsZS4KKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmEKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBSZW1vdmUgbnZyYW0gbGF5b3V0cyBhbmQgZHJpdmVyIHNldC11cCBzdHJ1Y3R1cmVzIGZyb20gdGhlIEMgc291cmNlLAorCSAgYW5kIHVzZSB0aGUgb25lIGRlZmluZWQgaW4gc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCSAgKHNoYXJlZCBieSBib3RoIGRyaXZlcnMpLgorCS0gU2V0IGZvciBub3cgTUFYIExVTlMgdG8gMTYgKGluc3RlYWQgb2YgOCkuCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjIJICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gT25seSBkZWZpbmUgdGhlIGhvc3QgdGVtcGxhdGUgaW4gbmNyNTNjOHh4LmggYW5kIGluY2x1ZGUgdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCS0gRGVjbGFyZSBzdGF0aWMgYWxsIHN5bWJvbHMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSB2aXNpYmxlIGZyb20gCisJICBvdXRzaWRlIHRoZSBkcml2ZXIgY29kZS4KKwktIEFkZCAnZXhjbCcgYm9vdCBjb21tYW5kIG9wdGlvbiB0aGF0IGFsbG93cyB0byBwYXNzIHRvIHRoZSBkcml2ZXIgCisJICBpbyBhZGRyZXNzIG9mIGRldmljZXMgbm90IHRvIGF0dGFjaC4KKwktIEFkZCBpbmZvKCkgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIGhvc3QgdGVtcGxhdGUgdG8gcHJpbnQgCisJICBkcml2ZXIvaG9zdCBpbmZvcm1hdGlvbi4KKwktIE1pbm9yIGRvY3VtZW50YXRpb24gYWRkaXRpb25zLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFoCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgIDE0OjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFnCisJLSBEZWFsIGNvcnJlY3RseSB3aXRoIDY0IGJpdCBQQ0kgYWRkcmVzcyByZWdpc3RlcnMgb24gTGludXggMi4yLgorCSAgUG9pbnRlZCBvdXQgYnkgTGVvbmFyZCBadWJrb2ZmLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gVGlueSBtaXNwZWxsaW5nIGZpeGVkIChBQk9SVCBpbnN0ZWFkIG9mIEFCUlQpLiBXYXMgZm9ydHVuYXRlbHkgCisJICBoYXJtbGVzcy4KKwktIE5lZ290aWF0ZSBTWU5DIGRhdGEgdHJhbnNmZXJzIHdpdGggQ0NTIGRldmljZXMuCisKK1NhdCBKYW4gMTYgIDE3OjMwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFmCisJLSBTb21lIFBDSSBmaXgtdXBzIG5vdCBuZWVkZWQgYW55IG1vcmUgZm9yIFBQQyAoZnJvbSBDb3J0KS4KKwktIENhY2hlIGxpbmUgc2l6ZSBzZXQgdG8gMTYgRFdPUkRTIGZvciBTcGFyYyAgIChmcm9tIERTTSkuCisJLSBXYWl0aW5nIGxpc3QgbG9vay11cCBkaWRuJ3Qgd29yayBmb3IgdGhlIGZpcnN0IGNvbW1hbmQgb2YgdGhlIGxpc3QuCisJLSBSZW1vdmUgMiB1c2VsZXNzIGxpbmVzIG9mIGNvZGUuCisKK1N1biBEZWMgMTMgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFlCisJLSBTYW1lIHdvcmstYXJvdW5kIGFzIGZvciB0aGUgNTNjODc2IHJldiA8PSAweDE1IGZvciA1M2M4OTYgcmV2IDE6CisJICBEaXNhYmxlIG92ZXJsYXBwZWQgYXJiaXRyYXRpb24uIFRoaXMgd2lsbCBub3QgbWFrZSBkaWZmZXJlbmNlIAorCSAgc2luY2UgdGhlIGNoaXAgaGFzIG9uLWNoaXAgUkFNLgorCitUaHUgTm92IDI2ICAyMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4xZAorCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBNaW5vciBzcGVsbGluZyBmaXhlcyBpbiBkb2MgZmlsZXMuCisKK1NhdCBOb3YgMjEgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFjCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1dlZCBOb3YgMTEgIDEwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFiCisJLSBUaGUgZHJpdmVyIHdhcyB1bmhhcHB5IHdoZW4gY29uZmlndXJlZCB3aXRoIGRlZmF1bHRfdGFncyA+IE1BWF9UQUdTCisJICBIb3BlZnVsbHkgZG91Ymx5LWZpeGVkLgorCS0gVXBkYXRlIHRoZSBDb25maWd1cmUuaGVscCBkcml2ZXIgc2VjdGlvbiB0aGF0IHNwZWFrcyBvZiBUQUdTLgorCitXZWQgT2N0IDIxIDIxOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFhCisJLSBDaGFuZ2VzIGZyb20gRWRkaWUgRG9zdCBmb3IgU3BhcmMgYW5kIEFscGhhOgorCSAgaW9yZW1hcC9pb3VubWFwIHN1cHBvcnQgZm9yIFNwYXJjLgorCSAgcGNpdnRvcGh5cyBjaGFuZ2VkIHRvIGJ1c19kdm1hX3RvX3BoeXMuCisJLSBBZGQgdGhlIDUzYzg3NiBkZXNjcmlwdGlvbiB0byB0aGUgY2hpcCB0YWJsZS4gVGhpcyBpcyBvbmx5IHVzZWZ1bCAKKwkgIGZvciBwcmludGluZyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgY29udHJvbGxlci4KKwktIERFTC00NDEgSXRlbSAyIHdvcmstYXJvdW5kIGZvciB0aGUgNTNjODc2IHJldiA8PSA1ICgweDE1KS4KKwktIEFkZCBhZGRpdGlvbmFsIGNoZWNraW5nIG9mIElOUVVJUlkgZGF0YToKKwkgIENoZWNrIElOUVVJUlkgZGF0YSByZWNlaXZlZCBsZW5ndGggaXMgYXQgbGVhc3QgNy4gQnl0ZSA3IG9mIAorCSAgaW5xdWlyeSBkYXRhIGNvbnRhaW5zIGRldmljZSBmZWF0dXJlcyBiaXRzIGFuZCB0aGUgZHJpdmVyIG1pZ2h0IAorCSAgYmUgY29uZnVzZWQgYnkgZ2FyYmFnZS4gQWxzbyBjaGVjayBwZXJpcGhlcmFsIHF1YWxpZmllci4KKwktIENsZWFudXAgb2YgdGhlIFNDU0kgdGFza3MgbWFuYWdlbWVudDoKKwkgIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciAzMiB0YWdzLiBOb3cgdGhlIGRyaXZlciBvbmx5IHVzZXMgdGhlIAorCSAgc2NoZW1lIHRoYXQgYWxsb3dzIHVwIHRvIDY0IHRhZ3MgcGVyIExVTi4KKwkgIE1lcmdlIHNvbWUgY29kZSBmcm9tIHRoZSA4OTYgZHJpdmVyLgorCSAgVXNlIGEgMSwzLDUsLi4uTUFYVEFHUyoyKzEgdGFnIG51bWJlcmluZy4gUHJldmlvdXMgZHJpdmVyIGNvdWxkICAKKwkgIHVzZSBhbnkgdGFnIG51bWJlciBmcm9tIDEgdG8gMjUzIGFuZCBzb21lIG5vbiBjb25mb3JtYW50IGRldmljZXMgIAorCSAgbWlnaHQgaGF2ZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHRhZyBudW1iZXJzLgorCS0gJ25vX3N5bmMnIGNoYW5nZWQgdG8gJ25vX2Rpc2MnIGluIHRoZSBSRUFETUUgZmlsZS4gVGhpcyBpcyBhbiBvbGQgCisJICBhbmQgdHJpdmlhbCBtaXN0YWtlIHRoYXQgc2VlbXMgdG8gZGVtb25zdHJhdGUgdGhlIFJFQURNRSBmaWxlIGlzIAorCSAgbm90IG9mdGVuIHJlYWQuIDopCisKK1N1biBPY3QgIDQgMTQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGkKKwktIENvc21ldGljIGNoYW5nZXMgZm9yIHNwYXJjIChidXQgbm90IGZvciB0aGUgZHJpdmVyKSB0aGF0IG5lZWRzICAKKwkgIF9faXJxX2l0b2EoKSB0byBiZSB1c2VkIGZvciBwcmludGVkIElSUSB2YWx1ZSB0byBiZSB1bmRlcnN0YW5kYWJsZS4KKwktIFNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyIHRoYXQgZGlkbid0IG9jY3VyIHVzaW5nIGRyaXZlciAyLjVmIAorCSAgd2VyZSBkdWUgdG8gYSBTQ1NJIHNlbGVjdGlvbiBwcm9ibGVtIHRyaWdnZXJlZCBieSBhIGNsZWFybHkgCisJICBkb2N1bWVudGVkIGZlYXR1cmUgdGhhdCBpbiBmYWN0IHNlZW1zIG5vdCB0byB3b3JrOiAoNTNDOFhYIGNoaXBzICAKKwkgIGFyZSBjbGFpbWVkIGJ5IHRoZSBtYW51YWxzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBTQ1NJIHNjcmlwdHMganVzdCAKKwkgIGFmdGVyIGFiaXRyYXRpb24gd2hpbGUgdGhlIFNDU0kgY29yZSBpcyBwZXJmb3JtaW5nIFNDU0kgc2VsZWN0aW9uKS4KKwkgIFRoaXMgb3B0aW1pemF0aW9uIGlzIGJyb2tlbiBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4KKwktIFNvbWUgYnJva2VuIHNjc2kgZGV2aWNlcyBhcmUgY29uZnVzZWQgd2hlbiBhIG5lZ290aWF0aW9uIGlzIHN0YXJ0ZWQgCisJICBvbiBhIExVTiB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGRldmljZS4gQWNjb3JkaW5nIHRvIAorCSAgU0NTSSBzcGVjcywgdGhpcyBpcyBhIGRldmljZSBmaXJtd2FyZSBidWcuIFRoaXMgaGFzIGJlZW4gd29ya2VkIAorCSAgYXJvdW5kIGJ5IG9ubHkgc3RhcnRpbmcgbmVnb3RpYXRpb24gaWYgdGhlIExVTiBoYXMgcHJldmlvdXNseSBiZSAKKwkgIHVzZWQgZm9yIGF0IGxlYXN0IDEgc3VjY2Vzc2Z1bCBTQ1NJIGNvbW1hbmQuCisJLSBUaGUgJ2xhc3QgbWVzc2FnZSBzZW50JyBwcmludGVkIG91dCBvbiBNX1JFSkVDVCBtZXNzYWdlIHJlY2VwdGlvbiAKKwkgIHdhcyByZWFkIGZyb20gdGhlIFNGQlIgaS9vIHJlZ2lzdGVyIGFmdGVyIHRoZSBwcmV2aW91cyBtZXNzYWdlIGhhZCAKKwkgIGJlZW4gc2VudC4gCisJICBUaGlzIHdhcyBub3QgY29ycmVjdCBhbmQgYWZmZWN0cyBhbGwgcHJldmlvdXMgZHJpdmVyIHZlcnNpb25zIGFuZCAKKwkgIHRoZSBvcmlnaW5hbCBGcmVlQlNEIG9uZSBhcyB3ZWxsLiBUaGUgU0NTSSBzY3JpcHRzIGhhcyBiZWVuIGZpeGVkIAorCSAgc28gdGhhdCBpdCBub3cgcHJvdmlkZXMgdGhlIHJpZ2h0IGluZm9ybWF0aW9uIHRvIHRoZSBDIGNvZGUuCisKK1NhdCBKdWwgMTggMTM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGcKKwktIFByZWxpbWluYXJ5IGZpeGVzIGZvciBCaWcgRW5kaWFuIChzZW50IGJ5IEVkZGllIEMuIERvc3QpLgorCSAgQmlnIEVuZGlhbiBhcmNoaXRlY3R1cmVzIHNob3VsZCB3b3JrIGFnYWluIHdpdGggdGhlIGRyaXZlci4KKwkgIEVkZGllJ3MgcGF0Y2ggaGFzIGJlZW4gcGFydGlhbGx5IGFwcGxpZWQgc2luY2UgY3VycmVudCAyLjEuMTA5IAorCSAgZG9lcyBub3QgaGF2ZSBhbGwgdGhlIFNwYXJjIGNoYW5nZXMgb2YgdGhlIHZnZXIgdHJlZS4KKwktIFVzZSBvZiBCSVRTX1BFUl9MT05HIGluc3RlYWQgb2YgKH4wVUwgPT0gMHhmZmZmZmZmZlVMKSBoYXMgZml4ZWQKKwkgIHRoZSBwcm9ibGVtIG9ic2VydmVkIHdoZW4gdGhlIGRyaXZlciB3YXMgY29tcGlsZWQgdXNpbmcgRUdDUyBvciAKKwkgIFBHQ0MuCisKK01vbiBKdWwgMTMgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGYKKwktIFNvbWUgc3BlbGxpbmcgZml4ZXMuCisJLSBsaW51eC9jb25maWcuaCBtaXNwbGFjZWQgaW4gbmNyNTNjOHh4LmgKKwktIE1PRFVMRV9QQVJNIHN0dWZmIGFkZGVkIGZvciBsaW51eCAyLjEuCisJLSBjaGVjayBJTlFVSVJZIHJlc3BvbnNlIGRhdGEgZm9ybWF0IGlzIGV4YWN0bHkgMi4gCisJLSB1c2UgQklUU19QRVJfTE9ORyBpZiBkZWZpbmVkLiAKKworU3VuIEp1biAyOCAxMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wZQorCS0gU29tZSBjbGVhbnVwLCBzcGVsbGluZyBmaXhlcywgdmVyc2lvbiBjaGVja3MsIGRvY3VtZW50YXRpb25zIAorCSAgY2hhbmdlcywgZXRjIC4uLgorCitTYXQgSnVuIDIwIDIwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjBjCisJLSBBZGQgYSBib290IHNldHVwIG9wdGlvbiB0aGF0IGFsbG93cyB0byBzZXQgdXAgZGV2aWNlIHF1ZXVlIGRlcHRocyAKKwkgIGF0IGJvb3QtdXAuIFRoaXMgb3B0aW9uIGlzIHZlcnkgdXNlZnVsIHNpbmNlIExpbnV4IGRvZXMgbm90IAorCSAgYWxsb3cgdG8gY2hhbmdlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoIG9uY2UgdGhlIHN5c3RlbSBoYXMgYmVlbiAKKwkgIGJvb3RlZCB1cC4KKworU3VuIEp1biAxNSAyMzowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wYQorCS0gU3VwcG9ydCBmb3IgdXAgdG8gNjQgVEFHUyBwZXIgTFVOLgorCS0gUmV3cml0ZSB0aGUgVEFSR0VUIHZzIExVTiBjYXBhYmlsaXRpZXMgbWFuYWdlbWVudC4KKwkgIENtZFF1ZXVlIGlzIG5vdyBoYW5kbGVkIGFzIGEgTFVOIGNhcGFiaWxpdHkgYXMgaXQgc2hhbGwgYmUuCisJICBUaGlzIGFsc28gZml4ZXMgYSBidWcgdHJpZ2dlcmVkIHdoZW4gZGlzYWJsaW5nIHRhZ2dlZCBjb21tYW5kIAorCSAgcXVldWluZyBmb3IgYSBkZXZpY2UgdGhhdCBoYWQgdGhpcyBmZWF0dXJlIGVuYWJsZWQuCisJLSBSZW1vdmUgdGhlIG5jcl9vcGVubmluZ3MoKSBzdHVmZiB0aGF0IHdhcyB1c2VsZXNzIHVuZGVyIExpbnV4IAorCSAgYW5kIGhhcmQgdG8gdW5kZXJzdGFuZCB0byBtZS4KKwktIEFkZCAic2V0dmVyYm9zZSIgcHJvY2ZzIGRyaXZlciBjb21tYW5kLiBJdCBhbGxvd3MgdG8gdHVuZSAKKwkgIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4gU2V0dGluZyB0aGlzIGxldmVsIHRvIHplcm8sIGZvciAKKwkgIGV4YW1wbGUgYXZvaWQgZmxvb2RpbmcgdGhlIHN5c2xvZyBmaWxlLgorCS0gQWRkIEtFUk5fWFhYIHRvIHNvbWUgcHJpbnRrJ3MuCisKK1R1ZSBKdW4gMTAgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMAorCS0gTGludXggY29uZmlnIGNoYW5nZXMgZm9yIDIuMC4zNDoKKwkgIFJlbW92ZSBOVlJBTSBkZXRlY3Rpb24gY29uZmlnIG9wdGlvbi4gVGhpcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgCisJICBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgZWRpdGluZyB0aGUgZHJpdmVyIGhlYWRlciBmaWxlLgorCSAgQWRkIGEgUFJPRklMRSBjb25maWcgb3B0aW9uLgorCS0gVXBkYXRlIENvbmZpZ3VyZS5oZWxwCisJLSBBZGQgY2FsbHMgdG8gbmV3IGZ1bmN0aW9uIG1kZWxheSgpIGZvciBtaWxsaS1zZWNvbmRzIGRlbGF5IGlmIAorCSAga2VybmVsIHZlcnNpb24gPj0gMi4xLjEwNS4KKwktIFJlcGxhY2UgYWxsIHByaW50ZihzKSBieSBwcmludGsocykuIEFmdGVyIGFsbCwgdGhlIG5jcjUzYzh4eCBpcyAKKwkgIGEgZHJpdmVyIGZvciBMaW51eC4KKwktIFBlcmZvcm0gYXV0by1zZW5zZSBvbiBDT01NQU5EIFRFUk1JTkFURUQuIE5vdCBzdXJlIGl0IGlzIHVzZWZ1bC4KKwktIFNvbWUgb3RoZXIgbWlub3IgY2hhbmdlcy4KKworVHVlIEp1biA0IDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZuCisJLSBDb2RlIGNsZWFudXAgYW5kIHNpbXBsaWZpY2F0aW9uOgorCSAgUmVtb3ZlIGtlcm5lbCAxLjIuWCBhbmQgMS4zLlggc3VwcG9ydC4KKwkgIFJlbW92ZSB0aGUgX29sZF8gdGFyZ2V0IGNhcGFiaWxpdGllcyB0YWJsZS4KKwkgIFJlbW92ZSB0aGUgZXJyb3IgcmVjb3ZlcnkgY29kZSB0aGF0IGhhdmUnbnQgYmVlbiByZWFsbHkgdXNlZnVsLgorCSAgVXNlIGEgc2luZ2xlIGFsaWdubWVudCBib3VuZGFyeSAoQ0FDSEVfTElORV9TSVpFKSBmb3IgZGF0YSAKKwkgIHN0cnVjdHVyZXMuCisJLSBTZXZlcmFsIGFnZ3Jlc3NpdmUgU0NSSVBUUyBvcHRpbWl6YXRpb25zIGFuZCBjaGFuZ2VzOgorCSAgUmVzZWxlY3QgU0NSSVBUUyBjb2RlIHJld3JpdHRlbi4KKwkgIFN1cHBvcnQgZm9yIHNlbGVjdGlvbi9yZXNlbGVjdGlvbiB3aXRob3V0IEFUTi4KKwkgIEFuZCBzb21lIG90aGVycy4KKwktIE1pc2NhbGxhbmVvdXMgY2hhbmdlcyBpbiB0aGUgQyBjb2RlOgorCSAgQ291bnQgYWN0dWFsIG51bWJlciBvZiBDQ0IgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyIChmdXR1cmUgdXNlKS4KKwkgIExvdHMgb2Ygb3RoZXIgbWlub3IgY2hhbmdlcy4KKworV2VkIE1heSAxMyAyMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42bQorCS0gUHJvYmxlbSBvZiBtaXNzZWQgU0NTSSBidXMgcmVzZXQgd2l0aCB0aGUgNTNDODk1IGZpeGVkIGJ5IAorCSAgUmljaGFyZCBXYWx0aGFtLiBUaGUgNTNDODk1IG5lZWRzIGFib3V0IDY1MCB1cyBmb3IgdGhlIGJ1cyAKKwkgIG1vZGUgdG8gc2V0dGxlLiBEZWxheXMgdXNlZCB3aGlsZSByZXNldHRpbmcgdGhlIGNvbnRyb2xsZXIgCisJICBhbmQgdGhlIGJ1cyBoYXZlIGJlZW4gYWRqdXN0ZWQuIFRoYW5rcyBSaWNoYXJkIQorCS0gU29tZSBzaW1wbGlmaWNhdGlvbiBmb3IgNjQgYml0IGFyY2ggZG9uZSBjY2IgYWRkcmVzcyB0ZXN0aW5nLgorCS0gQWRkIGEgY2hlY2sgb2YgdGhlIE1TR19PVVQgcGhhc2UgYWZ0ZXIgU2VsZWN0aW9uIHdpdGggQVROLgorCS0gVGhlIG5ldyB0YWdnZWQgcXVldWUgc3R1ZmYgc2VlbXMgb2ssIHNvIHNvbWUgaW5mb3JtYXRpb25uYWwgCisJICBtZXNzYWdlIGhhdmUgYmVlbiBjb25kaXRpb25uZWQgYnkgdmVyYm9zZSA+PSAzLgorCS0gRG9ubm90IHJlc2V0IGlmIGEgU0JNQyBpbnRlcnJ1cHQgcmVwb3J0cyB0aGUgc2FtZSBidXMgbW9kZS4KKwktIFByaW50IG91dCB0aGUgd2hvbGUgZHJpdmVyIHNldC11cC4gU29tZSBvcHRpb25zIHdlcmUgbWlzc2luZyBhbmQgCisJICB0aGUgcHJpbnQgc3RhdGVtZW50IHdhcyBtaXNwbGFjZWQgZm9yIG1vZHVsZXMuCisJLSBJZ25vcmUgYSBTQ1NJIHBhcml0eSBpbnRlcnJ1cHQgaWYgdGhlIGNoaXAgaXMgbm90IGNvbm5lY3RlZCB0byAKKwkgIHRoZSBTQ1NJIGJ1cy4KKworU2F0IE1heSAxIDE2OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZsCisJLSBBZGQgQ0NCIGRvbmUgcXVldWUgc3VwcG9ydCBmb3IgQWxwaGEgYW5kIHBlcmhhcHMgc29tZSBvdGhlciAKKwkgIGFyY2hpdGVjdHVyZXMuCisJLSBBZGQgc29tZSBiYXJyaWVycyB0byBlbmZvcmNlIG1lbW9yeSBvcmRlcmluZyBmb3IgeDg2IGFuZCAKKwkgIEFscGhhIGFyY2hpdGVjdHVyZXMuCisJLSBGaXggc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhbiBvbGQgYnVnIGluIHRoZSBuZWdvIFNJUiAKKwkgIGludGVycnVwdCBjb2RlIGluIGNhc2Ugb2YgbmVnb3RpYXRpb24gZmFpbHVyZS4KKworU2F0IEFwciAyNSAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42aworCS0gUmVtb3ZlIGFsbCBhY2Nlc3NlcyB0byB0aGUgb24tY2hpcCBSQU0gZnJvbSB0aGUgQyBjb2RlOgorCSAgVXNlIFNDUklQVFMgdG8gbG9hZCB0aGUgb24tY2hpcCBSQU0uCisJICBVc2UgU0NSSVBUUyB0byByZXBhaXIgdGhlIHN0YXJ0IHF1ZXVlIG9uIHNlbGVjdGlvbiB0aW1lb3V0LgorCSAgVXNlIHRoZSBjb3B5IG9mIHNjcmlwdCBpbiBtYWluIG1lbW9yeSB0byBjYWxjdWxhdGUgdGhlIGNoaXAgCisJICBjb250ZXh0IG9uIHBoYXNlIG1pc21hdGNoLgorCS0gVGhlIGFib3ZlIGFsbG93cyBub3cgdG8gdXNlIHRoZSBvbi1jaGlwIFJBTSB3aXRob3V0IHJlcXVpcmluZyAKKwkgIHRvIGdldCBhY2Nlc3MgdG8gdGhlIG9uLWNoaXAgUkFNIGZyb20gdGhlIEMgY29kZS4gVGhpcyBtYWtlcyAKKwkgIG9uLWNoaXAgUkFNIHVzZWFibGUgZm9yIGxpbnV4LTEuMi4xMyBhbmQgZm9yIExpbnV4LUFscGhhIGZvciAKKwkgIGluc3RhbmNlLgorCS0gU29tZSBzaW1wbGlmaWNhdGlvbnMgYW5kIGNsZWFudXBzIGluIHRoZSBTQ1JJUFRTIGFuZCBDIGNvZGUuCisJLSBCdWdsZXQgZml4ZWQgaW4gcGFyaXR5IGVycm9yIHJlY292ZXJ5IFNDUklQVFMgKG5ldmVyIHRlc3RlZCkuCisJLSBNaW5vciB1cGRhdGVzIGluIFJFQURNRS5uY3I1M2M4eHguCisKK1dlZCBBcHIgMTUgMjE6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmoKKwktIEluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBsaW51eC0yLjEuOTUgbmNyNTNjOHh4IGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIFNNUCBzdXBwb3J0IGZvciBsaW51eC0yLjEuOTUgYW5kIGFib3ZlLgorCS0gRml4IGEgYnVnIHdoZW4gUVVFVUUgRlVMTCBpcyByZXR1cm5lZCBhbmQgbm8gY29tbWFuZHMgYXJlIAorCSAgZGlzY29ubmVjdGVkLiBUaGlzIGhhcHBlbnMgd2l0aCBBdGxhcyBJIC8gTDkxMiBhbmQgbWF5IGhhcHBlbiAKKwkgIHdpdGggQXRsYXMgSUkgLyBMWFk0LgorCS0gTmFpbCBhbm90aGVyIG9uZSBvbiBDSEVDSyBjb25kaXRpb24gd2hlbiByZXF1ZXVpbmcgdGhlIGNvbW1hbmQgCisJICBmb3IgYXV0by1zZW5zZS4KKwktIENhbGwgc2NzaV9kb25lKCkgZm9yIGFsbCBjb21wbGV0ZWQgY29tbWFuZHMgYWZ0ZXIgaW50ZXJydXB0IAorCSAgaGFuZGxpbmcuCisJLSBJbmNyZWFzZSB0aGUgZG9uZSBxdWV1ZSB0byAyNCBlbnRyaWVzLgorCitTYXQgQXByIDQgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmkKKwktIENURVNUMCBpcyB1c2VkIGJ5IHRoZSA1M0M4ODUgZm9yIFBvd2VyIE1hbmFnZW1lbnQgYW5kIAorCSAgcHJpb3JpdHkgc2V0dGluZyBiZXR3ZWVuIHRoZSAyIGZ1bmN0aW9ucy4KKwkgIFVzZSBTRElEIGluc3RlYWQgYXMgYWN0dWFsIHRhcmdldCBudW1iZXIuIEp1c3QgaGF2ZSBoYWQgdG8gCisJICBvdmVyd3JpdGUgaXQgd2l0aCBTU0lEIG9uIHJlc2VsZWN0aW9uLgorCS0gU3BsaXQgREFUQV9JTiBhbmQgREFUQV9PVVQgc2NyaXB0cyBpbnRvIDIgc3ViLXNjcmlwdHMuCisJICA2NCBzZWdtZW50cyBhcmUgbW92ZWQgZnJvbSBvbi1jaGlwIFJBTSBzY3JpcHRzLgorCSAgSWYgbW9yZSBzZWdtZW50cywgYSBzY3JpcHQgaW4gbWFpbiBtZW1vcnkgaXMgdXNlZCBmb3IgdGhlIAorCSAgYWRkaXRpb25hbCBzZWdtZW50cy4KKwktIFNpbmNlIHRoZSBTQ1JJUFRTIHByb2Nlc3NvciBjb250aW51ZXMgU0NSSVBUUyBleGVjdXRpb24gYWZ0ZXIgCisJICBoYXZpbmcgd29uIGFyYml0cmF0aW9uLCBkbyBzb21lIHN0dWZmIHByaW9yIHRvIHRlc3RpbmcgYW55IFNDU0kgCisJICBwaGFzZSBvbiByZXNlbGVjdGlvbi4gVGhpcyBzaG91bGQgaGF2ZSB0aGUgdmVydHVlIHRvIHByb2Nlc3MgCisJICBzY3JpcHRzIGluIHBhcmFsbGVsIHdpdGggdGhlIFNDU0kgY29yZSBwZXJmb3JtaW5nIHNlbGVjdGlvbi4KKwktIEluY3JlYXNlIHRoZSBkb25lIHF1ZXVlIHRvIDEyIGVudHJpZXMuCisKK1N1biBNYXIgMjkgMTI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmgKKwktIFNvbWUgZml4ZXMuCisKK1R1ZSBNYXIgMjYgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmcKKwktIE5ldyBkb25lIHF1ZXVlLiA4IGVudHJpZXMgYnkgZGVmYXVsdCAoNiBhbHdheXMgdXNlYWJsZSkuCisJICBDYW4gYmUgaW5jcmVhc2VkIGlmIG5lZWRlZC4KKwktIFJlc291cmNlcyBtYW5hZ2VtZW50IHVzaW5nIGRvdWJseSBsaW5rZWQgcXVldWVzLgorCS0gTmV3IGF1dG8tc2Vuc2UgYW5kIFFVRVVFIEZVTEwgaGFuZGxpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIAorCSAgc3RhbGwgdGhlIE5DUiBxdWV1ZSBhbnkgbW9yZS4KKwktIE5ldyBDQ0Igc3RhcnZhdGlvbiBhdm9pZGluZyBhbGdvcml0aG0uCisJLSBQcmVwYXJlIENDQnMgZm9yIFNDU0kgY29tbWFuZHMgdGhhdCBjYW5ub3QgYmUgcXVldWVkLCBpbnN0ZWFkIG9mIAorCSAgaW5zZXJ0aW5nIHRoZXNlIGNvbW1hbmRzIGludG8gdGhlIHdhaXRpbmcgbGlzdC4gVGhlIHdhaXRpbmcgbGlzdCAKKwkgIGlzIG5vdyBvbmx5IHVzZWQgd2hpbGUgcmVzZXR0aW5nIGFuZCB3aGVuIG1lbW9yeSBmb3IgQ0NCcyBpcyBub3QgCisJICB5ZXQgYXZhaWxhYmxlPworCitTdW4gRmViIDggMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmYKKwktIFNvbWUgZml4ZXMgaW4gb3JkZXIgdG8gcmVhbGx5IHN1cHBvcnQgdGhlIDUzQzg5NSwgYXQgbGVhc3Qgd2l0aCAKKwkgIEZBU1QtMjAgZGV2aWNlcy4KKwktIEhlYXZ5IGNoYW5nZXMgaW4gdGhlIHRhcmdldC9sdW4gcmVzb3VyY2VzIG1hbmFnZW1lbnQgdG8gYWxsb3cgCisJICB0aGUgc2NyaXB0cyB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBDQ0Igb24gcmVzZWxlY3Rpb24gaW5zdGVhZCAKKwkgIG9mIHdhbGtpbmcgb24gdGhlIGx1biBDQ0JzIGxpc3QuIFVwIHRvIDMyIHRhZ3MgcGVyIGx1biBhcmUgbm93IAorCSAgc3VwcG9ydGVkIHdpdGhvdXQgc2NyaXB0IHByb2Nlc3NvciBhbmQgUENJIHRyYWZmaWMgb3ZlcmhlYWQuCisKK1N1biBKYW4gMTEgMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmQKKwktIG5ldyAoZGlmZmVyZW50ID8pIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFydCBxdWV1ZToKKyAgICAgICAgICBVc2UgYSBzaW1wbGUgQ0FMTCB0byBhIGxhdW5jaCBzY3JpcHQgaW4gdGhlIENDQi4KKwktIGltcGxlbWVudCBhIG1pbmltYWwgZG9uZSBxdWV1ZSAoMSBlbnRyeSA6LSkgKS4KKyAgICAgICAgICB0aGlzIGF2b2lkIHNjYW5uaW5nIGFsbCBDQ0JzIG9uIElOVCBGTFkgKE9ubHkgc2NhbiBhbGwgQ0NCcywgb24gCisgICAgICAgICAgb3ZlcmZsb3cpLiBIaXQgcmF0aW8gaXMgYmV0dGVyIHRoYW4gOTkuOSAlIG9uIG15IHN5c3RlbSwgc28gbm8gCisgICAgICAgICAgbmVlZCB0byBoYXZlIGEgbGFyZ2VyIGRvbmUgcXVldWUuCisJLSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgcmVzdGFydCBvZiBDQ0Igb24gc3BlY2lhbCBjb25kaXRpb24gYXMgCisgICAgICAgICAgQWJvcnQsIFFVRVVFIEZVTEwsIENIRUNLIENPTkRJVElPTi4KKyAgICAgICAgICBUaGlzIGhhcyBiZWVuIGNhbGxlZCAnc2lsbHkgc2NoZWR1bGVyJy4KKwktIG1ha2UgYWxsIHRoZSBwcm9maWxpbmcgY29kZSBjb25kaXRpb25uZWQgYnkgYSBjb25maWcgb3B0aW9uLgorCSAgVGhpcyBzcGFyZSBzb21lIFBDSSB0cmFmZmljIGFuZCBDIGNvZGUgd2hlbiB0aGlzIGZlYXR1cmUgaXMgbm90IAorICAgICAgICAgIG5lZWRlZC4KKwktIGhhbmRsZSBtb3JlIGNsZWFubHkgdGhlIHNpdHVhdGlvbiB3aGVyZSBkaXJlY3Rpb24gaXMgdW5rbm93bi4KKwkgIFRoZSBwb2ludGVycyBwYXRjaGluZyBpcyBub3cgcGVyZm9ybWVkIGJ5IHRoZSBTQ1JJUFRTIHByb2Nlc3Nvci4KKwktIHJlbW92ZSBzb21lIHVzZWxlc3Mgc2NyaXB0cyBpbnN0cnVjdGlvbnMuCisKKwlQb3J0ZWQgZnJvbSBkcml2ZXIgMi41IHNlcmllczoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLSBVc2UgRkFTVC01IGluc3RlYWQgb2YgU0xPVyBmb3Igc2xvdyBzY3NpIGRldmljZXMgYWNjb3JkaW5nIHRvIAorCSAgbmV3IFNQSS0yIGRyYWZ0LgorCS0gTWFrZSBzb21lIGNoYW5nZXMgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgd2l0aCA4NzUgcmV2IDw9IDMgCisJICBkZXZpY2UgZXJyYXRhIGxpc3RpbmcgMzk3LiBNaW5vciBjb25zZXF1ZW5jZXMgYXJlOgorCSAgLiBMZWF2ZSB1c2Ugb2YgUENJIFdyaXRlIGFuZCBJbnZhbGlkYXRlIHVuZGVyIHVzZXIgY29udHJvbC4KKwkgICAgTm93LCBieSBkZWZhdWx0IHRoZSBkcml2ZXIgZG9lcyBub3QgZW5hYmxlIFBDSSBNV0kgYW5kIG9wdGlvbgorCSAgICAnc3BlY2Y6eScgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4KKwkgIC4gTWVtb3J5IFJlYWQgTGluZSBpcyBub3QgZW5hYmxlZCBmb3IgODc1IGFuZCA4NzUtbGlrZSBjaGlwcy4KKwkgIC4gUHJvZ3JhbW1lZCBidXJzdCBsZW5ndGggc2V0IHRvIDY0IERXT1JEUyAoaW5zdGVhZCBvZiAxMjgpLgorCSAgICAoTm90ZTogU1lNQklPUyB1c2VzIDMyIERXT1JEUyBmb3IgdGhlIFNETVMgQklPUykKKwktIEFkZCAnYnVzY2hrJyBib290IG9wdGlvbi4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY2hlY2tpbmcgb2YgU0NTSSBCVVMgZGF0YSBsaW5lcyBhZnRlciBTQ1NJIAorCSAgUkVTRVQgKHNldCBieSBkZWZhdWx0KS4gKFN1Ym1pdHRlZCBieSBSaWNoYXJkIFdhbHRoYW0pLgorCS0gVXBkYXRlIHRoZSBSRUFETUUgZmlsZS4KKwktIERpc3BhdGNoIENPTkRJVElPTiBNRVQgYW5kIFJFU0VSVkFUSU9OIENPTkZMSUNUIHNjc2kgc3RhdHVzIAorCSAgYXMgT0sgZHJpdmVyIHN0YXR1cy4KKwktIFVwZGF0ZSB0aGUgUkVBRE1FIGZpbGUgYW5kIHRoZSBTeW1iaW9zIE5WUkFNIGZvcm1hdCBkZWZpbml0aW9uIAorCSAgd2l0aCByZW1vdmFibGUgbWVkaWEgZmxhZ3MgdmFsdWVzIChhdmFpbGFibGUgd2l0aCBTRE1TIDQuMDkpLgorCS0gU2V2ZXJhbCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgZml4LXVwcyBmb3IgcG93ZXJwYy4KKwkgIChQYXRjaCBzZW50IGJ5IENvcnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHggYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLnN5bTUzYzh4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk4NWVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKQEAgLTAsMCArMSw1OTMgQEAKK1NhdCBNYXkgMTIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4zYworCS0gRW5zdXJlIExFREMgYml0IGluIEdQQ05UTCBpcyBjbGVhcmVkIHdoZW4gcmVhZGluZyB0aGUgTlZSQU0uCisJICBGaXggc2VudCBieSBTdGlnIFRlbGZlciA8c3RpZ0BhcGktbmV0d29ya3MuY29tPi4KKwktIEJhY2twb3J0IGZyb20gU1lNLTIgdGhlIHdvcmstYXJvdW5kIHRoYXQgYWxsb3dzIHRvIHN1cHBvcnQgCisJICBoYXJkd2FyZXMgdGhhdCBmYWlsIFBDSSBwYXJpdHkgY2hlY2tpbmcuCisJLSBDaGVjayB0aGF0IHdlIHJlY2VpdmVkIGF0IGxlYXN0IDggYnl0ZXMgb2YgSU5RVUlSWSByZXNwb25zZSAKKwkgIGZvciBieXRlIDcsIHRoYXQgY29udGFpbnMgZGV2aWNlIGNhcGFiaWxpdGllcywgdG8gYmUgdmFsaWQuCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisJLSArIEEgY291cGxlIG9mIG1pbm9yIGNoYW5nZXMuCisJICAKK1NhdCBBcHIgNyAxOTozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNiCisJLSBGaXggYW4gdW5hbGlnbmVkIExPQUQgZnJvbSBzY3JpcHRzICh3YXMgdXNlZCBhcyBkdW1teSByZWFkKS4KKwktIEluIG5jcl9zb2Z0X3Jlc2V0KCksIG9ubHkgdHJ5IHRvIEFCT1JUIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAKKwkgIGZvciBjaGlwcyB0aGF0IHN1cHBvcnQgU1JVTiBiaXQgaW4gSVNUQVQxIGFuZCBpZiBTQ1JJUFRTIGFyZSAKKwkgIGN1cnJlbnRseSBydW5uaW5nLCBhcyA4OTYgYW5kIDEwMTAgbWFudWFscyBzdWdnZXN0LgorCS0gSW4gdGhlIENDQiBhYm9ydCBwYXRoLCBkbyBub3QgYXNzdW1lIHRoYXQgdGhlIENDQiBpcyBjdXJyZW50bHkgCisJICBxdWV1ZWQgdG8gU0NSSVBUUy4gVGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIG5vdGFibHkgYWZ0ZXIgYSAKKwkgIFFVRVVFIEZVTEwgc3RhdHVzIG9yIHdoZW4gdXNpbmcgdW50YWdnZWQgY29tbWFuZHMuCisKK1N1biBNYXIgNCAxODozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNhCisJLSBGaXggYW4gaXNzdWUgaW4gdGhlIG5jcl9pbnRfdWRjKCkgKHVuZXhwZWN0ZWQgZGlzY29ubmVjdCkKKwkgIGhhbmRsaW5nLiBJZiB0aGUgRFNBIGRpZG4ndCBtYXRjaCBhIENDQiwgYSBiYWQgd3JpdGUgdG8gCisJICBtZW1vcnkgY291bGQgaGFwcGVuLgorCitNb24gRmViIDEyIDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMworCS0gU3VwcG9ydCBmb3IgaHBwYS4KKwkgIFRpbnkgcGF0Y2ggc2VudCB0byBtZSBieSBSb2JlcnQgSGlyc3QuCisJLSBUaW55IHBhdGNoIGZvciBpYTY0IHNlbnQgdG8gbWUgYnkgUGFtZWxhIERlbGFuZXkuCisKK1R1ZSBGZWIgNiAxMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjMtcHJlMQorCS0gQ2FsbCBwY2lfZW5hYmxlX2RldmljZSgpIGFzIEFDIHdhbnRzIHRoaXMgdG8gYmUgZG9uZS4KKwktIEdldCBib3RoIHRoZSBCQVIgY29va2llcyB1c2VkIGJ5IENQVSBhbmQgYWN0dWFsIFBDSSBCQVIgCisJICB2YWx1ZXMgdXNlZCBmcm9tIFNDUklQVFMuIFJlY2VudCBQQ0kgY2hpcHMgYXJlIGFibGUgdG8gCisJICBhY2Nlc3MgdGhlbXNlbHZlcyB1c2luZyBpbnRlcm5hbCBjeWNsZXMsIGJ1dCB0aGV5IGNvbXBhcmUgCisJICBCQVIgdmFsdWVzIHRvIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8gbWFrZSBkZWNpc2lvbi4KKwkgIEVhcmxpZXIgY2hpcHMgc2ltcGx5IHVzZSBQQ0kgdHJhbnNhY3Rpb25zIHRvIGFjY2VzcyBJTyAKKwkgIHJlZ2lzdGVycyBmcm9tIFNDUklQVFMuCisJICBUaGUgYnVzX2R2bWFfdG9fbWVtKCkgaW50ZXJmYWNlIHRoYXQgcmV2ZXJzZXMgdGhlIGFjdHVhbCAKKwkgIFBDSSBCQVIgdmFsdWUgZnJvbSB0aGUgQkFSIGNvb2tpZSBpcyBub3cgdXNlbGVzcy4KKwkgIFRoaXMgcG9pbnQgaGFkIGJlZW4gZGlzY3Vzc2VkIGF0IHRoZSBsaXN0IGFuZCB0aGUgc29sdXRpb24gCisJICBnb3QgYXBwcm92ZWQgYnkgUENJIGNvZGUgbWFpbnRhaW5lciAoTWFydGluIE1hcmVzKS4KKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKwktIEluY3JlYXNlIFNDU0kgbWVzc2FnZSBzaXplIHVwIHRvIDEyIGJ5dGVzLCBnaXZlbiB0aGF0IDggCisJICBieXRlcyB3YXMgbm90IGVub3VnaCBmb3IgdGhlIFBQUiBtZXNzYWdlIChmaXgpLgorCS0gQWRkIGZpZWxkICdtYXhvZmZzX3N0JyAobWF4IG9mZnNldCBmb3IgU1QgZGF0YSB0cmFuc2ZlcnMpLgorCSAgVGhlIEMxMDEwIHN1cHBvcnRzIG9mZnNldCA2MiBpbiBEVCBtb2RlIGJ1dCBvbmx5IDMxIGluIAorCSAgU1QgbW9kZSwgdG8gMiBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgbWF4IFNDU0kgb2Zmc2V0IAorCSAgYXJlIG5lZWRlZC4gUmVwbGFjZSB0aGUgb2J2aW91c2x5IHdyb25nIG1hc2tpbmcgb2YgdGhlIAorCSAgb2Zmc2V0IGFnYWluc3QgMHgxZiBmb3IgU1QgbW9kZSBieSBhIGxvd2VyaW5nIHRvIAorCSAgbWF4b2Zmc19zdCBvZiB0aGUgU0NTSSBvZmZzZXQgaW4gU1QgbW9kZS4KKwktIFJlZmluZSBhIHdvcmstYXJvdW5kIGZvciB0aGUgQzEwMTAtNjYuIFJldmlzaW9uIDEgZG9lcyAKKwkgIG5vdCByZXF1aXJlcyBleHRyYSBjeWNsZXMgaW4gRFQgREFUQSBPVVQgcGhhc2UuCisJLSBBZGQgYSBtaXNzaW5nIGVuZGlhbi1pemF0aW9uIChhYnJ0X3RibC5hZGRyKS4KKwktIE1pbm9yIGNsZWFuLXVwIGluIHRoZSBucCBzdHJ1Y3R1cmUgZm9yIGZpZWxkcyBhY2Nlc3NlZCAKKwkgIGZyb20gU0NSSVBUUyB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgYWxpZ25tZW50cy4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjIKKwktIFJlbW92ZSB0aGUgaGFjayBmb3IgUFBDIGFkZGVkIGluIHByZXZpb3VzIGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIEZFX0RBQyBmZWF0dXJlIGJpdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDY0IGJpdCBQQ0kgCisJICBhZGRyZXNzaW5nIChGRV9EQUMpIGFuZCA2NCBiaXQgUENJIGludGVyZmFjZSAoRkVfNjRCSVQpLgorCS0gR2V0IHJpZCBvZiB0aGUgYm9vdCBjb21tYW5kIGxpbmUgInVsdHJhOiIgYXJndW1lbnQuCisJICBUaGlzIHBhcmFtZXRlciB3YXNuJ3QgdGhhdCBjbGV2ZXIgc2luY2Ugd2UgY2FuIHVzZSAic3luYzoiIAorCSAgZm9yIFVsdHJhL1VsdHJhMiBzZXR0aW5ncywgYW5kIGZvciBVbHRyYTMgd2UgbWF5IHdhbnQgdG8gCisJICBwYXNzIFBQUiBvcHRpb25zIChmb3Igbm93IG9ubHkgRFQgY2xvY2tpbmcpLgorCS0gQWRkIEZFX1ZBUkNMSyBmZWF0dXJlIGJpdCB0aGF0IGluZGljYXRlcyB0aGF0IFNDU0kgY2xvY2sgCisJICBmcmVxdWVuY3kgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIGJvYXJkIGRlc2lnbiBhbmQgdGh1cywgCisJICB0aGUgZHJpdmVyIHNob3VsZCB0cnkgdG8gZXZhbHVhdGUgdGhlIFNDU0kgY2xvY2suCisJLSBTaW1wbGlmeSB0aGUgd2F5IHRoZSBkcml2ZXIgZGV0ZXJtaW5lIHRoZSBTQ1NJIGNsb2NrOgorCSAgVUxUUkEzIC0+IDE2MCBNSHosIFVMVFJBMiAtPiA4MCBNSHogb3RoZXJ3aXNlIDQwIE1Iei4KKwkgIE1lYXN1cmUgdGhlIFNDU0kgY2xvY2sgZnJlcXVlbmN5IGlmIEZFX1ZBUkNMSyBpcyBzZXQuCisJLSBSZW1vdmUgRkVfQ0xLODAgZmVhdHVyZSBiaXQgdGhhdCBnb3QgdXNlbGVzcy4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDODc1QSAoUGFtZWxhIERlbGFuZXkpLgorCitXZWQgSnVsIDI2IDIzOjMwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMQorCS0gUHJvdmlkZSBPcGVuRmlybWFyZSBwYXRoIHRocm91Z2ggdGhlIHByb2MgRlMgb24gUFBDLgorCS0gRG93bmxvYWQgb2Ygb24tY2hpcCBTUkFNIHVzaW5nIG1lbWNweV90b2lvKCkgZG9lc24ndCB3b3JrIAorCSAgb24gUFBDLiBSZXN0b3JlIHByZXZpb3VzIG1ldGhvZCAoTUVNT1JZIE1PVkUgZnJvbSBTQ1JJUFRTKS4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwkgICogU2ltcGxlciBoYW5kbGluZyBvZiBpbGxlZ2FsIHBoYXNlcyBhbmQgZGF0YSBvdmVycnVuIGZyb20gCisJICAgIFNDUklQVFMuIFRoZXNlIGVycm9ycyBhcmUgbm93IGltbWVkaWF0ZWx5IHJlcG9ydGVkIHRvIAorCSAgICB0aGUgQyBjb2RlIGJ5IGFuIGludGVycnVwdC4KKwkgICogU3luYyB0aGUgcmVzaWR1YWwgaGFuZGxpbmcgY29kZSB3aXRoIHN5bS0xLjYuMiBhbmQgbm93IAorCSAgICByZXBvcnQgYHJlc2lkJyB0byB1c2VyIGZvciBsaW51eCB2ZXJzaW9uID49IDIuMy45OSAKKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgUmVtb3ZlIHVudXNlZCBvcHRpb25zIHRoYXQgY2xhaW1lZCB0byBvcHRpbWl6ZSBmb3IgdGhlIDg5Ni4KKwkgIElmIGZhY3QsIHRoZXkgd2VyZSBub3QgdGhpcyBjbGV2ZXIuIDopCisJICBVc2UgU0NTSV9OQ1JfSU9NQVBQRUQgaW5zdGVhZCBvZiBOQ1JfSU9NQVBQRUQuCisJICBSZW1vdmUgYSBjb3VwbGUgb2YgdW51c2VkIGZpZWxkcyBmcm9tIGRhdGEgc3RydWN0dXJlcy4KKworVGh1IE1heSAxMSAxMjo0MCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmIKKwktIE1lcmdlZCB2ZXJzaW9uLgorCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVtCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIERvIG5vdCBlbmFibGUgUENJIERBQyBjeWNsZXMuIFRoaXMganVzdCBicm9rZSBzdXBwb3J0IGZvciAKKwkgIFNZTTUzNEM4OTYgb24gc3BhcmM2NC4gUHJvYmxlbSBmaXhlZCBieSBEYXZpZCBTLiBNaWxsZXIuCisKK0ZyaSBBcHIgMTQgOTowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmItOQorCS0gQWRkZWQgNTNDMTAxMF82NiBzdXBwb3J0LgorCS0gU21hbGwgZml4IHRvIGludGVncml0eSBjaGVja2luZyBjb2RlLgorCS0gUmVtb3ZlZCByZXF1aXJlbWVudCBmb3IgaW50ZWdyaXR5IGNoZWNraW5nIGlmIHdhbnQgdG8gcnVuCisJICBhdCB1bHRyYSAzLgorIAorU2F0IEFwciAxICAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41bAorCS0gVGlueSBjaGFuZ2UgZm9yIF9fc3BhcmNfXyBhcHBlYXJlZCBpbiAyLjMuOTktcHJlNC4xIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworU2F0IE1hciAxMSAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS42Yi01CisJLSBUZXN0IGFnYWluc3QgZXhwZWN0ZWQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSBTQ1JJUFRTLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCSAgTWFueSB0aGFua3MgdG8gRGF2aWQgUy4gTWlsbGVyIGZvciBoaXMgcHJlbGltaW5hcnkgY2hhbmdlcyAKKwkgIHRoYXQgaGF2ZSBiZWVuIHVzZWZ1bCBndWlkZWxpbmVzLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aXRoIGtlcm5lbHMgdGhhdCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uCisKK01vbiBNYXIgIDYgMjM6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWsKKwktIFRlc3QgYWdhaW5zdCBleHBlY3RlZCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIFNDUklQVFMuCisJLSBSZXZlcnQgdGhlIGNoYW5nZSBpbiAnbmNyX2ZsdXNoX2RvbmVfY21kcygpJyBidXQgdW5tYXAgdGhlIAorCSAgc2NzaSBkbWEgYnVmZmVyIHByaW9yIHRvIHF1ZXVlaW5nIHRoZSBjb21tYW5kIHRvIG91ciBkb25lIAorCSAgbGlzdC4KKwktIE1pc2NlbGxhbmVvdXMgKG1pbm9yKSBmaXhlcyBpbiB0aGUgY29kZSBhZGRlZCBpbiBkcml2ZXIgCisJICB2ZXJzaW9uIDEuNWouCisKK01vbiBGZWIgMTQgNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKyAJKiB2ZXJzaW9uIHN5bTUzYzh4eC1wcmUtMS42Yi0yLgorCS0gVXBkYXRlZCB0aGUgU0NSSVBUUyBlcnJvciBoYW5kbGluZyBvZiB0aGUgU1dJREUKKwkgIGNvbmRpdGlvbiAtIHRvIHJlbW92ZSBhbnkgcmVhZHMgb2YgdGhlIHNiZGwKKwkgIHJlZ2lzdGVyLiBDaGFuZ2VzIG5lZWRlZCBiZWNhdXNlIHRoZSA4OTYgYW5kIDEwMTAKKwkgIGNoaXBzIHdpbGwgY2hlY2sgcGFyaXR5IGluIHNvbWUgc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCSAgVGhpcyB3aWxsIGNhdXNlIGEgcGFyaXR5IGVycm9yIGludGVycnVwdCBpZiBub3QgaW4KKwkgIGRhdGEgcGhhc2UuICBDaGFuZ2VzIGJhc2VkIG9uIHRob3NlIG1hZGUgaW4gdGhlCisJICBGcmVlQlNEIGRyaXZlciB2ZXJzaW9uIDEuMy4yLgorCitTdW4gRmViIDIwIDExOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVqCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisJICBSZXF1aXJlcyBMaW51eC0yLjMuNDcgKHRlc3RlZCB3aXRoIHByZS0yLjMuNDctNikuCisJICBNYW55IHRoYW5rcyB0byBEYXZpZCBTLiBNaWxsZXIgZm9yIGhpcyBwcmVsaW1pbmFyeSBjaGFuZ2VzIAorCSAgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGd1aWRlbGluZXMsIGZvciBoYXZpbmcgcmV2aWV3ZWQgdGhlIAorCSAgY29kZSBhbmQgaGF2aW5nIHRlc3RlZCB0aGlzIGRyaXZlciB2ZXJzaW9uIG9uIFVsdHJhLVNwYXJjLgorCS0gMiB0aW55IGJ1Z3MgZml4ZWQgaW4gdGhlIFBDSSB3cmFwcGVyIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCAKKwkgIGZvciBlYXJseSBrZXJuZWxzIHdpdGhvdXQgcGNpIGRldmljZSBzdHJ1Y3R1cmUuCisJLSBHZXQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSB0aGUgc2NzaSBjb21tYW5kIHN0cnVjdHVyZSAKKwkgIChTY3NpX0NtbmQpIHdpdGgga2VybmVscyB0aGF0IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KKwktIEZpeCBhbiBvbGQgYnVnIHRoYXQgb25seSBhZmZlY3RlZCA4OTYgcmV2LiAxIHdoZW4gZHJpdmVyIAorCSAgcHJvZmlsZSBzdXBwb3J0IG9wdGlvbiB3YXMgc2V0IGluIGtlcm5lbCBjb25maWd1cmF0aW9uLgorCitGcmkgSmFuIDE0IDE0OjAwIDIwMDAgUGFtIERlbGFuZXkgKHBhbS5kZWxhbmV5QGxzaWwuY29tKQorIAkqIHZlcnNpb24gc3ltNTNjOHh4LXByZS0xLjZiLTEuCisJLSBNZXJnZSBwYXJhbGxlbCBkcml2ZXIgc2VyaWVzIDEuNjEgYW5kIDEuNWUgCisKK1R1ZSBKYW4gMTEgMTQ6MDAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjYxCisJLSBBZGRlZCBzdXBwb3J0IGZvciBtb3VudGluZyBkaXNrcyBvbiB3aWRlLW5hcnJvdy13aWRlCisJICBzY3NpIGNvbmZpZ3VyYXRpb25zLiAKKwktIE1vZGlmaWVkIG9mZnNldCB0byBiZSBhIG1heGltdW0gb2YgMzEgaW4gU1QgbW9kZSwgCisJICA2MiBpbiBEVCBtb2RlLgorCS0gQmFzZWQgb2ZmIG9mIDEuNjAKKworTW9uIEphbiAxMCAxMDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNjAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gIEFkZGVkIFBQUiBuZWdvdGlhdGlvbi4KKwktIEFkZGVkIHN1cHBvcnQgZm9yIDUzQzEwMTAgVWx0cmEgMyBwYXJ0LgorCS0gQmFzZWQgb2ZmIG9mIDEuNWYKKworU2F0IEphbiA4ICAyMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41aAorCS0gQWRkIHllYXIgMjAwMCBjb3B5cmlnaHQuCisJLSBEaXNwbGF5IGNvcnJlY3RseSBidXMgc2lnbmFscyB3aGVuIGJ1cyBpcyBkZXRlY3RlZCB3cm9uZy4KKwktIFNvbWUgZml4IGZvciBTcGFyYyBmcm9tIERTTSB0aGF0IHdlbnQgZGlyZWN0bHkgdG8ga2VybmVsIHRyZWUuCisKK01vbiBEZWMgNiAgMjI6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWcKKwktIENoYW5nZSBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoZSBkcml2ZXIgYXQgaW5pdGlhbGlzYXRpb24gYW5kIAorCSAgdGhyb3VnaCB0aGUgL3Byb2MgRlMgKHJhdGhlciBjb3NtZXRpYyBjaGFuZ2VzIHRoYXQgY29uc2lzdCBpbgorCSAgcHJpbnRpbmcgb3V0IHRoZSBQQ0kgYnVzIG51bWJlciBhbmQgUENJIGRldmljZS9mdW5jdGlvbikuCisJLSBFbnN1cmUgdGhlIFNDUklQVFMgcHJvY2Vzc29yIGlzIHN0b3BwZWQgd2hpbGUgY2FsaWJyYXRpbmcgdGhlIAorCSAgU0NTSSBjbG9jayAodGhlIGluaXRpYWxpc2F0aW9uIGNvZGUgaGFzIGJlZW4gYSBiaXQgcmV3b3JrZWQpLgorCSAgQ2hhbmdlIG1vdmVkIHRvIHRoZSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBTb21lIGZpeGVzIGluIHRoZSBNT0RJRllfRFAvSUdOX1JFU0lEVUUgY29kZSBhbmQgcmVzaWR1YWwgCisJICBjYWxjdWxhdGlvbiAobW92ZWQgZnJvbSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBBZGQgTlZSQU0gc3VwcG9ydCBmb3IgVGVrcmFtIGJvYXJkcyB0aGF0IHVzZSAyNEMxNiBFRVBST00uCisJICBDb2RlIG1vdmVkIGZyb20gdGhlIEZyZWVCU0Qgc3ltX2hpcGQgZHJpdmVyLCBzaW5jZSBpdCBoYXMgCisJICBiZWVuIHRoYXQgb25lIHRoYXQgZ290IHRoaXMgZmVhdHVyZSBmaXJzdC4KKwktIERlZmluaXRlbHkgZGlzYWJsZSBvdmVybGFwcGVkIFBDSSBhcmJpdHJhdGlvbiBmb3IgYWxsIGR1YWwgCisJICBmdW5jdGlvbiBjaGlwcywgc2luY2UgSSBjYW5ub3QgbWFrZSBzdXJlIGZvciB3aGF0IGNoaXAgcmV2aXNpb25zIAorCSAgaXQgaXMgYWN0dWFsbHkgc2FmZS4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDMTUxMEQgKGFsc28gZm9yIG5jcjUzYzh4eCkuCisJLSBGaXggdXAgcHJvcGVybHkgdGhlIFBDSSBsYXRlbmN5IHRpbWVyIHdoZW4gbmVlZGVkIG9yIGFza2VkIGZvci4KKwktIEdldCByaWQgb2YgdGhlIG9sZCBQQ0kgYmlvcyBpbnRlcmZhY2UsIGJ1dCBwcmVzZXJ2ZSBrZXJuZWwgMi4wIAorCSAgY29tcGF0aWJpbGl0eSBmcm9tIGEgc2ltcGxlIHdyYXBwZXIuCisJLSBVcGRhdGUgdGhlIHBvb3IgVGVrcmFtIHN5bmMgZmFjdG9yIHRhYmxlLgorCS0gRml4IGluIGEgdGlueSAncHJpbnRrJyBidWcgdGhhdCBtYXkgb29wcyBpbiBjYXNlIG9mIGV4dGVuZGVkIAorCSAgZXJyb3JzICh1bnJlY292ZXJlZCBwYXJpdHkgZXJyb3IsIGRhdGEgb3ZlcnJ1biwgZXRjIC4uLikKKwkgIChTZW50IGJ5IFBhbWVsYSBEZWxhbmV5IGZyb20gTFNJTE9HSUMpCisJLSBSZW1vdmUgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbiBhYm91dCBoYXZpbmcgdG8gYWNxdWlyZSB0aGUgCisJICBpb19yZXF1ZXN0X2xvY2sgc2luY2UgaXQgc2VlbXMgdG8gYmUgYSBkZWZpbml0ZSBmZWF0dXJlIG5vdy46KQorCS0gQ2hhbmdlIGdldF9wYWdlcyBieSBHZXRQYWdlcyBzaW5jZSBMaW51eCA+PSAyLjMuMjcgbm93IHdhbnRzIAorCSAgZ2V0X3BhZ2VzIHRvIGV2ZXIgYmUgdXNlZCBhcyBhIGtlcm5lbCBzeW1ib2wgKGZyb20gMi4zLjI3KS4KKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCitTdW4gT2N0ICAzICAxOTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41ZgorCS0gQ2hhbmdlIHRoZSB3YXkgdGhlIGRyaXZlciBjaGVja3MgdGhlIFBDSSBjbG9jayBmcmVxdWVuY3ksIHNvIAorCSAgdGhhdCBvdmVyY2xvY2tlZCBQQ0kgQlVTIHVwIHRvIDQ4IE1IeiB3aWxsIG5vdCBiZSByZWZ1c2VkLgorCSAgVGhlIG1vcmUgdGhlIEJVUyBpcyBvdmVyY2xvY2tlZCwgdGhlIGxlc3MgdGhlIGRyaXZlciB3aWxsIAorCSAgZ3VhcmFudGVlIHRoYXQgaXRzIG1lYXN1cmUgb2YgdGhlIFNDU0kgY2xvY2sgaXMgY29ycmVjdC4KKwktIEJhY2twb3J0IHNvbWUgbWlub3IgaW1wcm92ZW1lbnRzIG9mIFNDUklQVFMgZnJvbSB0aGUgc3ltX2hpcGQgCisJICBkcml2ZXIuCisJLSBCYWNrcG9ydCB0aGUgY29kZSByZXdyaXRlIG9mIHRoZSBTVEFSVCBRVUVVRSBkZXF1ZXVpbmcgKG9uIAorCSAgYmFkIHNjc2kgc3RhdHVzIHJlY2VpdmVkKSBmcm9tIHRoZSBzeW1faGlwZCBkcml2ZXIuCisKK1NhdCBTZXAgMTEgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVlCisJLSBOZXcgbGludXgtMi4zLjEzIF9fc2V0dXAgc2NoZW1lIHN1cHBvcnQgYWRkZWQuCisJLSBDbGVhbnVwIG9mIHRoZSBleHRlbmRlZCBlcnJvciBzdGF0dXMgaGFuZGxpbmc6CisJICBVc2UgMSBiaXQgcGVyIGVycm9yIHR5cGUuCisJLSBBbHNvIHNhdmUgdGhlIGV4dGVuZGVkIGVycm9yIHN0YXR1cyBwcmlvciB0byBhdXRvLXNlbnNlLgorCS0gQWRkIHRoZSBGRV9ESUZGIGNoaXAgZmVhdHVyZSBiaXQgdG8gaW5kaWNhdGUgc3VwcG9ydCBvZiAKKwkgIGRpZmYgcHJvYmluZyBmcm9tIEdQSU8zICg4MjUvODI1QS84NzYvODc1KS4KKwktIFJlbW92ZSB0aGUgcXVpcmsgaGFuZGxpbmcgdGhhdCBoYXMgYmVlbiB1c2VsZXNzIHNpbmNlIGRheSBvbmUuCisJLSBXb3JrLWFyb3VuZCBQQ0kgY2hpcHMgYmVpbmcgcmVwb3J0ZWQgdHdpY2Ugb24gc29tZSBwbGF0Zm9ybXMuCisJLSBBZGQgc29tZSByZWR1bmRhbnQgUENJIHJlYWRzIGluIG9yZGVyIHRvIGRlYWwgd2l0aCBjb21tb24gCisJICBicmlkZ2UgbWlzYmVoYXZpb3VyIHJlZ2FyZGluZyBwb3N0ZWQgd3JpdGUgZmx1c2hpbmcuCisJLSBBZGQgc29tZSBvdGhlciBjb25kaXRpb25uYWwgY29kZSBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIGRlYWwgCisJICB3aXRoIHJlYWxseSBicm9rZW4gYnJpZGdlcyAodGhleSB3aWxsIGhhdmUgdG8gZWRpdCBhIHNvdXJjZSAKKwkgIGZpbGUgdG8gdHJ5IHRoZXNlIG9wdGlvbnMpLgorCS0gSGFuZGxlIGNvcnJlY3RseSAoaG9wZWZ1bGx5KSBqaWZmaWVzIHdyYXAtYXJvdW5kLgorCS0gUmVzdG9yZSB0aGUgZW50cnkgdXNlZCB0byBkZXRlY3QgODc1IHVudGlsIHJldmlzaW9uIDB4ZmYuCisJICAoSSByZW1vdmVkIGl0IGluYWR2ZXJ0ZW50bHksIGl0IHNlZW1zIDopICkKKwktIFJlcGxhY2UgX19pbml0ZnVuYygpIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc3R1ZmYgYnkgX19pbml0IHdoaWNoIAorCSAgaXMgbm90IHlldCBzby4gOy0pCisJLSBSZXdyaXRlIHRoZSBNRVNTQUdFIElOIHNjcmlwdHMgbW9yZSBnZW5lcmljIGJ5IHVzaW5nIGEgTU9WRSAKKwkgIHRhYmxlIGluZGlyZWN0LiBFeHRlbmRlZCBtZXNzYWdlcyBvZiBhbnkgc2l6ZSBhcmUgYWNjZXB0ZWQgbm93LgorCSAgKFNpemUgaXMgbGltaXRlZCB0byA4IGZvciBub3csIGJ1dCBhIGNvbnN0YW50IGlzIGp1c3QgdG8gYmUgCisJICBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5KQorCS0gRml4IHNvbWUgYnVnIGluIHRoZSBmdWxseSB1bnRlc3RlZCBNRFAgaGFuZGxpbmc6KSBhbmQgc2hhcmUgCisJICBzb21lIGNvZGUgYmV0d2VlbiBNRFAgaGFuZGxpbmcgYW5kIHJlc2lkdWFsIGNhbGN1bGF0aW9uLgorCS0gQ2FsY3VsYXRlIHRoZSBkYXRhIHRyYW5zZmVyIHJlc2lkdWFsIGFzIHRoZSAyJ3MgY29tcGxlbWVudCAKKwkgIGludGVnZXIgKEEgcG9zaXRpdmUgdmFsdWUgaW4gcmV0dXJuZWQgb24gZGF0YSBvdmVycnVuLCBhbmQgCisJICBhIG5lZ2F0aXZlIG9uZSBvbiB1bmRlcnJ1bikuCisJLSBBZGQgc3VwcG9ydCBvZiBzb21lICdyZXNvdXJjZSBoYW5kbGluZycgZm9yIGxpbnV4LTIuMy4xMy4KKwkgIEJhc2ljYWxseSB0aGUgQkFScyBoYXZlIGJlZW4gY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4IAorCSAgaW4gdGhlIHBjaV9kZXYgc3RydWN0dXJlLgorCS0gUmVtb3ZlIHNvbWUgZGVwcmVjYXRlZCBjb2RlLgorCitTYXQgSnVuICA1ICAxMTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41YworCS0gRG8gbm90IG5lZ290aWF0ZSBvbiBhdXRvLXNlbnNlIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgOCBiaXQgCisJICBhc3luYyB0cmFuc2ZlciBmb3IgdGhlIHRhcmdldC4KKwktIE9ubHkgY2hlY2sgZm9yIFNJU0wvUkFJRCBvbiBpMzg2IHBsYXRmb3Jtcy4KKwkgIChBIHByb2JsZW0gaGFzIGJlZW4gcmVwb3J0ZWQgb24gUFBDIHdpdGggdGhhdCBjb2RlKS4KKwktIE9uIE1TRyBSRUpFQ1QgZm9yIGEgbmVnb3RpYXRpb24sIHRoZSBkcml2ZXIgYXR0ZW1wdGVkIHRvIHJlc3RhcnQgCisJICB0aGUgU0NSSVBUIHByb2Nlc3NvciB3aGVuIHRoaXMgb25lIHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisKK1NhdCBNYXkgMjkgIDEyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjViCisJLSBGb3JjZSBuZWdvdGlhdGlvbiBwcmlvciBhdXRvLXNlbnNlLgorCSAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlIGFibGUgdG8gZ3JhYiB0aGUgc2Vuc2UgZGF0YSAKKwkgIGZyb20gYSBkZXZpY2UgdGhhdCBoYXMgcmVjZWl2ZWQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgZnJvbSAKKwkgIGFub3RoZXIgaW5pdGlhdG9yLgorCS0gQ29tcGxldGUgYWxsIGRpc2Nvbm5lY3RlZCBDQ0JzIGZvciBhIGxvZ2ljYWwgVU5JVCBpZiB3ZSBhcmUgdG9sZCAKKwkgIGFib3V0IGEgVU5JVCBBVFRFTlRJT04gZm9yIGEgUkVTRVQgY29uZGl0aW9uIGJ5IHRoaXMgdGFyZ2V0LgorCS0gQWRkIHRoZSBjb250cm9sIGNvbW1hbmQgJ2NsZWFyZGV2JyB0aGF0IGFsbG93cyB0byBzZW5kIGEgQUJPUlQgIAorCSAgbWVzc2FnZSB0byBhIGxvZ2ljYWwgVU5JVCAoZm9yIHRlc3QgcHVycG9zZSkuCisKK1R1ZSBNYXkgMjUgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVhCisJLSBBZGQgc3VwcG9ydCBmb3IgdGFzayBhYm9ydCBhbmQgYnVzIGRldmljZSByZXNldCBTQ1NJIG1lc3NhZ2UgCisJICBhbmQgaW1wbGVtZW50IHByb3BlciBzeW5jaG9uaXNhdGlvbiB3aXRoIFNDUklQVFMgdG8gaGFuZGxlIAorICAgICAgICAgIGNvcnJlY3RseSB0YXNrIGFib3J0aW9uIHdpdGhvdXQgcmFjZXMuCisJLSBTZW5kIGFuIEFCT1JUIG1lc3NhZ2UgKGlmIHVudGFnZ2VkKSBvciBBQk9SVCBUQUcgbWVzc2FnZSAoaWYgdGFnZ2VkKQorCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHRvbGQgdG8gYWJvcnQgYSBjb21tYW5kIHRoYXQgaXMgZGlzY29ubmVjdGVkIGFuZCAKKwkgIGNvbXBsZXRlIHRoZSBjb21tYW5kIHdpdGggYXBwcm9wcmlhdGUgZXJyb3IuCisJICBJZiB0aGUgYWJvcnRlZCBjb21tYW5kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHN0YXJ0IAorCSAgcXVldWUgYW5kIGNvbXBsZXRlIGl0IHdpdGggZXJyb3IuCisJLSBBZGQgdGhlIGNvbnRyb2wgY29tbWFuZCAncmVzZXRkZXYnIHRoYXQgYWxsb3dzIHRvIHNlbmQgYSBCVVMgCisJICBERVZJQ0UgUkVTRVQgbWVzc2FnZSB0byBhIHRhcmdldCAoZm9yIHRlc3QgcHVycG9zZSkuCisJLSBDbGVhbi11cCBzb21lIHVudXNlZCBvciB1c2VsZXNzIGNvZGUuCisKK0ZyaSBNYXkgMjEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjUKKwktIEFkZCBzdXBwb3J0IGZvciBDSE1PViB3aXRoIFdpZGUgY29udHJvbGxlcnMuCisJLSBIYW5kbGluZyBvZiB0aGUgU1dJREUgKGxvdyBieXRlIHJlc2lkdWUgYXQgdGhlIGVuZCBvZiBhIENITU9WIAorCSAgaW4gREFUQSBJTiBwaGFzZSB3aXRoIFdJREUgdHJhbnNmZXIgd2hlbiB0aGUgYnl0ZSBjb3VudCBnZXRzIG9kZCkuCisJLSBIYW5kbGluZyBvZiB0aGUgSUdOT1JFIFdJREUgUkVTSURVRSBtZXNzYWdlLgorCSAgSGFuZGxlZCBmcm9tIFNDUklQVFMgYXMgcG9zc2libGUgd2l0aCBzb21lIG9wdGltaXphdGlvbnMgd2hlbiBib3RoIAorCSAgYSB3aWRlIGRldmljZSBhbmQgdGhlIGNvbnRyb2xsZXIgYXJlIG9kZCBhdCB0aGUgc2FtZSB0aW1lIChTV0lERSAKKwkgIHByZXNlbnQgYW5kIElHTk9SRSBXSURFIFJFU0lEVUUgbWVzc2FnZSBvbiB0aGUgQlVTIGF0IHRoZSBzYW1lIHRpbWUpLgorCS0gQ2hlY2sgYWdhaW5zdCBkYXRhIE9WRVJSVU4vVU5ERVJSVU4gY29uZGl0aW9uIGF0IHRoZSBlbmQgb2YgYSBkYXRhIAorCSAgdHJhbnNmZXIsIHdoYXRldmVyIGEgU1dJREUgaXMgcHJlc2VudCAoT1ZFUlJVTiBpbiBEQVRBIElOIHBoYXNlKSAKKwkgIG9yIHRoZSBTT0RMIGlzIGZ1bGwgKFVOREVSUlVOIGluIERBVEEgb3V0IHBoYXNlKS4KKwktIEhhbmRsaW5nIG9mIHRoZSBNT0RJRlkgREFUQSBQT0lOVEVSIG1lc3NhZ2UuCisJICBUaGlzIG9uZSBjYW5ub3QgYmUgaGFuZGxlZCBmcm9tIFNDUklQVFMsIGJ1dCBob3BlZnVsbHkgaXQgd2lsbCBub3QKKwkgIGhhcHBlbiB2ZXJ5IG9mdGVuLiA6KQorCS0gTGFyZ2UgcmV3cml0ZSBvZiB0aGUgU0NTSSBNRVNTQUdFIGhhbmRsaW5nLgorCitTdW4gTWF5IDkgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjQKKwktIFN1cHBvcnQgZm9yIElNTUVESUFURSBBUkJJVFJBVElPTi4KKwkgIFNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmVhdHVyZS4KKwkgIFJlcXVpcmVzIGJvdGggYSBjb21waWxlIG9wdGlvbiBhbmQgYSBib290IG9wdGlvbi4KKwktIE1pbm9yIFNDUklQVFMgb3B0aW1pemF0aW9uIGluIHJlc2VsZWN0aW9uIHBhdHRlcm4gZm9yIExVTiAwLgorCS0gU2ltcGxlciBhbGdvcml0aG0gdG8gZGVhbCB3aXRoIFNDU0kgY29tbWFuZCBzdGFydmF0aW9uLgorCSAgSnVzdCB1c2UgMiB0YWcgY291bnRlcnMgaW4gZmxpcC9mbG9wIGFuZCBzd2l0Y2ggdG8gdGhlIG90aGVyIAorCSAgb25lIGV2ZXJ5IDMgc2Vjb25kcy4KKwktIERvIHNvbWUgd29yayBpbiBTQ1JJUFRTIGFmdGVyIHRoZSBTRUxFQ1QgaW5zdHJ1Y3Rpb24gYW5kIHByaW9yIAorCSAgdG8gdGVzdGluZyBmb3IgYSBQSEFTRS4gU1lNQklPUyBzYXkgdGhpcyBmZWF0dXJlIGlzIHdvcmtpbmcgZmluZS4gCisJICAoQnR3LCBvbmx5IHByb2JsZW1zIHdpdGggVG9zaGliYSAzNDAxQiBoYWQgYmVlbiByZXBvcnRlZCkuCisJLSBNZWFzdXJlIHRoZSBQQ0kgY2xvY2sgc3BlZWQgYW5kIGRvIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgaWYgCisJICByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIDM3IE1Iei4gU2luY2UgdGhlIHByZWNpc2lvbiBvZiB0aGUgCisJICBhbGdvcml0aG0gKGZyb20gU3RlZmFuIEVzc2VyKSBpcyBiZXR0ZXIgdGhhbiAyJSwgdGhpcyBzaG91bGQgCisJICBiZSBmaW5lLgorCS0gRml4IHRoZSBtaXNkZXRlY3Rpb24gb2YgU1lNNTNDODc1RSAod2FzIGRldGVjdGVkIGFzIGEgODc2KS4KKwktIEZpeCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFNZTTUzQzgxMCBub3QgQSAod2FzIGRldGVjdGVkIGFzIGEgODEwQSkuCisJLSBTdXBwb3J0IGZvciB1cCB0byAyNTYgVEFHUyBwZXIgTFVOIChDTURfUEVSX0xVTikuCisJICBDdXJyZW50bHkgbGltaXRlZCB0byAyNTUgZHVlIHRvIExpbnV4IGxpbWl0YXRpb24uIDopCisJLSBTdXBwb3J0IGZvciB1cCB0byA1MDggYWN0aXZlIGNvbW1hbmRzIChDQU5fUVVFVUUpLgorCS0gU3VwcG9ydCBmb3IgdGhlIDUzQzg5NUEgYnkgUGFtZWxhIERlbGFuZXkgPHBhbS5kZWxhbmV5QGxzaWwuY29tPgorCSAgVGhlIDUzQzg5NUEgY29udGFpbnMgYWxsIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgODk2IGJ1dCBoYXMgb25seSAKKwkgIG9uZSBjaGFubmVsIGFuZCBoYXMgYSAzMiBiaXQgUENJIGJ1cy4gSXQgZG9lcyA2NCBiaXQgUENJIGFkZHJlc3NpbmcgCisJICB1c2luZyBkdWFsIGN5Y2xlIFBDSSBkYXRhIHRyYW5zZmVycy4KKwktIE1pc2NlbGxhbmVvdXMgbWlub3IgZml4ZXMuCisJLSBTb21lIGFkZGl0aW9ucyB0byB0aGUgUkVBRE1FLm5jcjUzYzh4eCBmaWxlLgorCitUdWUgQXByIDE1ICAxMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4zZQorCS0gU3VwcG9ydCBmb3IgYW55IG51bWJlciBvZiBMVU5zICg2NCkgKFNQSTItY29tcGxpYW50KS4KKwkgIChCdHcsIHRoaXMgbWF5IG9ubHkgYmUgZXZlciB1c2VmdWwgdW5kZXIgbGludXgtMi4yIDstKSkKKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2QKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBNYWtlIFNDUklQVFMgbm90IHVzZSBzZWxmLW1hc3RlcmluZyBmb3IgUENJLgorCSAgVGhlcmUgd2VyZSBzdGlsbCAyIHBsYWNlcyB0aGUgZHJpdmVyIHVzZWQgdGhpcyBmZWF0dXJlIG9mIHRoZSAKKwkgIDUzQzhYWCBmYW1pbHkuCisJLSBNb3ZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIChudnJhbSBsYXlvdXRzIGFuZCBkcml2ZXIgc2V0LXVwKSB0byAKKwkgIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUuIFNvLCB0aGUgYm90aCBkcml2ZXJzIHdpbGwgc2hhcmUgdGhlbS4KKwktIFNldCBNQVggTFVOUyB0byAxNiAoaW5zdGVhZCBvZiA4KS4KKworU2F0IE1hciAyMCAgMjE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2IKKwktIEFkZCBzdXBwb3J0IGZvciBOQ1IgUFFTIFBEUy4KKwkgIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QGNvbHVtYmlhc2MubmNyLmNvbT4KKwktIEFsbG93IHZhbHVlIDAgZm9yIGhvc3QgSUQuCisJLSBTdXBwb3J0IG1vcmUgdGhhbiA4IGNvbnRyb2xsZXJzICg+IDQwIGluIGZhY3QgOi0pICkKKwktIEFkZCAnZXhjbD0jaW9hZGRyJyBib290IG9wdGlvbjogZXhjbHVkZSBjb250cm9sbGVyLgorCSAgKFZlcnNpb24gMS4zYSBkcml2ZXIpCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjMgICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gRXF1aXZhbGVudCBjaGFuZ2VzIGFzIG5jcjUzYzh4eC0zLjIgZHVlIHRvIHRoZSBkcml2ZXIgYnVuZGxlLgorCSAgKFNlZSBDaGFuZ2Vsb2cubmNyNTNjOHh4KQorCS0gRG8gYSBub3JtYWwgc29mdCByZXNldCBhcyBmaXJzdCBjaGlwIHJlc2V0LCBzaW5jZSBhYm9ydGluZyBjdXJyZW50IAorCSAgb3BlcmF0aW9uIG1heSByYWlzZSBhbiBpbnRlcnJ1cHQgd2UgYXJlIG5vdCBhYmxlIHRvIGhhbmRsZSBzaW5jZSAKKwkgIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBub3QgeWV0IGVzdGFibGlzaGVkLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJiCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgMjEgIDIwOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJhCisJLSBUaGUgcmV3cml0ZSBvZiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGJyb2tlIHRoZSBTQk1DIGludGVycnVwdCAKKwkgIGhhbmRsaW5nIGR1ZSB0byBhIDEgYml0IG1hc2sgdGlueSBlcnJvci4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gSWYgSU5RVUlSWSBjYW1lIGZyb20gYSBzY2F0dGVyIGxpc3QsIHRoZSBkcml2ZXIgbG9va2VkIGludG8gCisJICB0aGUgc2NhdHRlcmxpc3QgaW5zdGVhZCBvZiB0aGUgZGF0YS46KSBTaW5jZSB0aGlzIHNob3VsZCBuZXZlcgorCSAgaGFwcGVuLCB3ZSBqdXN0IGRpc2NhcmQgdGhlIGRhdGEgaWYgdXNlX3NnIGlzIG5vdCB6ZXJvLgorCitGcmkgRmViIDEyICAyMzowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4yCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IHN0dWZmIGZvciAKKwkgIHRoZSBzdXBwb3J0IG9mIG5vbiBjb21wbGlhbnQgU0NTSSByZW1vdmFsLCBpbnNlcnRpb24gYW5kIGFsbCAKKwkgIGtpbmRzIG9mIHNjcmV3LXVwIHRoYXQgbWF5IGhhcHBlbiBvbiB0aGUgU0NTSSBCVVMuCisJICBIb3BlZnVsbHksIHRoZSBkcml2ZXIgaXMgbm93IHVuYnJlYWthYmxlIG9yIG1heS1iZSwgaXQgaXMganVzdCAKKwkgIHF1aXRlIGJyb2NrZW4uIDotKQorCSAgTWFueSB0aGFua3MgdG8gSm9obnNvbiBSdXNzZWwgKFN5bWJpb3MpIGZvciBoYXZpbmcgcmVzcG9uZGVkIHRvIAorCSAgbXkgcXVlc3Rpb25zIGFuZCBmb3IgaGlzIGludGVyZXN0aW5nIGFkdmljZXMgYW5kIGNvbW1lbnRzIGFib3V0IAorCSAgc3VwcG9ydCBvZiBTQ1NJIGhvdC1wbHVnLgorCS0gQWRkICdyZWNvdmVyeScgb3B0aW9uIHRvIGRyaXZlciBzZXQtdXAuCisJLSBOZWdvdGlhdGUgU1lOQyBkYXRhIHRyYW5zZmVycyB3aXRoIENDUyBkZXZpY2VzLgorCS0gRGVhbCBjb3JyZWN0bHkgd2l0aCA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXJzIG9uIExpbnV4IDIuMi4KKwkgIFBvaW50ZWQgb3V0IGJ5IExlb25hcmQgWnVia29mZi4KKworU3VuIEphbiAzMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuMWEKKwktIFNvbWUgODk2IGNoaXAgcmV2aXNpb25zIChhbGwgZm9yIG5vdyA6LSkpLCBtYXkgaGFuZy11cCBpZiB0aGUgCisJICBzb2Z0IHJlc2V0IGJpdCBpcyBzZXQgYXQgdGhlIHdyb25nIHRpbWUgd2hpbGUgU0NSSVBUUyBhcmUgcnVubmluZy4KKwkgIFdlIG5lZWQgdG8gZmlyc3QgYWJvcnQgdGhlIGN1cnJlbnQgU0NSSVBUUyBvcGVyYXRpb24gcHJpb3IgdG8gCisJICByZXNldHRpbmcgdGhlIGNoaXAuIFRoaXMgZml4IGhhcyBiZWVuIHNlbnQgdG8gbWUgYnkgU1lNQklPUy9MU0kgCisJICBhbmQgSSBqdXN0IHRyYW5zbGF0ZWQgaXQgaW50byBuY3I1M2M4eHggc3ludGF4LgorCSAgTXVzdCBiZSBjb25zaWRlcmVkIDEwMCAlIHRydXN0YWJsZSwgdW5sZXNzIEkgZGlkIHNvbWUgbWlzdGFrZSAKKwkgIHdoZW4gdHJhbnNsYXRpbmcgaXQuIDotKQorCitTdW4gSmFuIDI0ICAxODowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4xCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBTQ1NJIHBhcml0eSBlcnJvciBoYW5kbGluZy4KKwkgIFRoZSBpbmZvcm1hdGlvbnMgY29udGFpbmVkIGluIHRoZSBkYXRhIG1hbnVhbHMgYXJlIGluY29tcGxldGUgYWJvdXQgCisJICB0aGlzIGZlYXR1cmUuCisJICBJIGFza2VkIFNZTUJJT1MgYWJvdXQgYW5kIGdvdCBpbiByZXBseSB0aGUgZXhwbGFuYXRpb25zIHRoYXQgYXJlIAorCSAgX2luZGVlZF8gbWlzc2luZyBpbiB0aGUgZGF0YSBtYW51YWxzLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gRml4IGZvciA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXIgY2FsY3VsYXRpb24uIChMYW5jZSBSb2JpbnNvbikKKwktIEZpeCBmb3IgYmlnLWVuZGlhbiBpbiBwaGFzZSBtaXNtYXRjaCBoYW5kbGluZy4gKE1pY2hhbCBKYWVnZXJtYW5uKQorCitGcmkgSmFuICAxICAyMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wYQorCS0gV2FpdGluZyBsaXN0IGxvb2stdXAgZGlkbid0IHdvcmsgZm9yIHRoZSBmaXJzdCBjb21tYW5kIG9mIHRoZSBsaXN0LgorCSAgSG9wZWZ1bGx5IGZpeGVkLCBidXQgdGVzdGVkIG9uIHBhcGVyIG9ubHkuIDspCisJLSBSZW1vdmUgdGhlIG1vc3QgcGFydCBvZiBQUEMgc3BlY2lmaWMgY29kZSBmb3IgTGludXgtMi4yLgorCSAgVGhhbmtzIHRvIENvcnQuCisJLSBTb21lIG90aGVyIG1pbm9ycyBjaGFuZ2VzLgorCitTYXQgRGVjIDE5ICAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wCisJLSBEZWZpbmUgc29tZSBuZXcgSU8gcmVnaXN0ZXJzIGZvciB0aGUgODk2IChpc3RhdDEsIG1ib3gwLCBtYm94MSkKKwktIFJldmFtcCBzbGlnaGx5IHRoZSBTeW1iaW9zIE5WUkFNIGxheS1vdXQgYmFzZWQgb24gdGhlIGV4Y2VycHQgb2YgCisJICB0aGUgaGVhZGVyIGZpbGUgSSByZWNlaXZlZCBmcm9tIFN5bWJpb3MuCisJLSBDaGVjayB0aGUgUENJIGJ1cyBudW1iZXIgZm9yIHRoZSBib290IG9yZGVyIChVc2luZyBhIGZhc3QgCisJICBQQ0kgY29udHJvbGxlciBiZWhpbmcgYSBQQ0ktUENJIGJyaWRnZSBzZWVtcyBzdWItb3B0aW1hbCkuCisJLSBEaXNhYmxlIG92ZXJsYXBwZWQgUENJIGFyYml0cmF0aW9uIGZvciB0aGUgODk2IHJldmlzaW9uIDEuCisJLSBSZWR1Y2UgYSBiaXQgdGhlIG51bWJlciBvZiBJTyByZWdpc3RlciByZWFkcyBmb3IgcGhhc2UgbWlzbWF0Y2ggCisJICBieSByZWFkaW5nIERXT1JEUyBhdCBhIHRpbWUgaW5zdGVhZCBvZiBCWVRFUy4KKworVGh1IERlYyAgMyAgMjQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjE4CisJLSBJIHJlY2VpdmVkIHRoaXMgYWZ0ZXJub29uIGEgODk2IGZyb20gU1lNQklPUyBhbmQgc3RhcnRlZCB0ZXN0aW5nICAKKwkgIHRoZSBkcml2ZXIgd2l0aCB0aGlzIGJlYXN0LiBBZnRlciBoYXZpbmcgZml4ZWQgMyBidWdsZXRzLCBpdCB3b3JrZWQgIAorCSAgd2l0aCBhbGwgZmVhdHVyZXMgZW5hYmxlZCBpbmNsdWRpbmcgdGhlIHBoYXNlIG1pc21hdGNoIGhhbmRsaW5nIAorCSAgZnJvbSBTQ1JJUFRTLiBTaW5jZSB0aGlzIGZlYXR1cmUgaXMgbm90IHlldCB0ZXN0ZWQgZW5vdWdoLCB0aGUgCisJICBib290IG9wdGlvbiAnbmNyNTNjOHh4PXNwZWNmOjEnIGlzIHN0aWxsIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgCisJICBkcml2ZXIgdG8gaGFuZGxlIFBNIGZyb20gU0NSSVBUUy4gCisKK1N1biBOb3YgMjkgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNworCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBUaGUgUENJIG1lbW9yeSByZWFkIGZyb20gU0NSSVBUUyB0aGF0IHNob3VsZCBlbnN1cmUgb3JkZXJpbmcgCisJICB3YXMgaW4gZmFjdCBtaXNwbGFjZWQuIEJUVywgdGhpcyBtYXkgZXhwbGFpbiB3aHkgYnJva2VuIFBDSSAKKwkgIGRldmljZSBkcml2ZXJzIHJlZ2FyZGluZyBvcmRlcmluZyBhcmUgd29ya2luZyBzbyB3ZWxsLiA7LSkKKwktIFJld3JpdGUgbmNyNTNjOHh4X3NldHVwIChib290IGNvbW1hbmQgbGluZSBvcHRpb25zKSBzaW5jZSB0aGUgIAorCSAgYmluYXJ5IGNvZGUgd2FzIGEgYml0IHRvbyBibG9hdGVkIGluIG15IG9waW5pb24uCisJLSBNYWtlIHRoZSBjb2RlIHNpbXBsZXIgaW4gdGhlIHdha2V1cF9kb25lIHJvdXRpbmUuCisKK1R1ZSBOb3YgMjQgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNgorCS0gQWRkIFNDU0lfTkNSX09QVElNSVpFXzg5Nl8xIGNvbXBpbGUgb3B0aW9uIGFuZCAnb3B0aW0nIGJvb3Qgb3B0aW9uLgorCSAgV2hlbiBzZXQsIHRoZSBkcml2ZXIgdW5jb25kaXRpb25uYWx5IGFzc3VtZXMgdGhhdCB0aGUgaW50ZXJydXB0IAorCSAgaGFuZGxlciBpcyBjYWxsZWQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiwgdGhlbiBjbGVhcnMgSU5URiwgc2NhbnMgCisJICB0aGUgZG9uZSBxdWV1ZSBhbmQgcmV0dXJucyBpZiBzb21lIGNvbXBsZXRlZCBDQ0IgaXMgZm91bmQuIElmIG5vIAorCSAgY29tcGxldGVkIENDQiBhcmUgZm91bmQsIGludGVycnVwdCBoYW5kbGluZyB3aWxsIHByb2NlZWQgbm9ybWFsbHkuCisJICBXaXRoIGEgODk2IHRoYXQgaGFuZGxlcyBNQSBmcm9tIFNDUklQVFMsIHRoaXMgY2FuIGJlIGEgZ3JlYXQgd2luLCAKKwkgIHNpbmNlIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwZXJmb3JtcyBQQ0kgcmVhZCB0cmFuc2FjdGlvbnMsIGJ1dCAKKwkgIG9ubHkgUENJIHdyaXRlIHRyYW5zYWN0aW9ucyB0aGF0IG1heSBiZSBwb3N0ZWQuCisJICBJZiB0aGUgZHJpdmVyIGhhdmVuJ3QgdG8gYWxzbyByYWlzZSB0aGUgU0lHUCB0aGlzIHdvdWxkIGJlIHBlcmZlY3QuCisJICBFdmVuIHdpdGggdGhpcyBwZW5hbHR5LCBJIHRoaW5rIHRoYXQgdGhpcyB3aWxsIHdvcmsgZ3JlYXQuCisJICBPYnZpb3VzbHkgdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgc2Vuc2Ugb25seSBpZiB0aGUgSVJRIGlzIG5vdCAKKwkgIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1RodSBOb3YgMTkgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNQorCS0gQWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIExFRCBjb250cm9sIG9mIHRoZSA4OTYuCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gUHJldmVudCA4MTBBIHJldiAxMSBhbmQgODYwIHJldiAxIGZyb20gdXNpbmcgY2FjaGUgbGluZSBiYXNlZCAKKwkgIHRyYW5zYWN0aW9ucyBzaW5jZSB0aG9zZSBlYXJseSBjaGlwIHJldmlzaW9ucyBtYXkgdXNlIHN1Y2ggb24gCisJICBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyAod29yay1hcm91bmQpLgorCS0gUmVtb3ZlIHNvbWUgdXNlbGVzcyBhbmQgYmxvYXQgY29kZSBmcm9tIHRoZSBwY2kgaW5pdCBzdHVmZi4KKwktIERvIG5vdCB1c2UgdGhlIHJlYWRYKCkvd3JpdGVYKCkga2VybmVsIGZ1bmN0aW9ucyBmb3IgX19pMzg2X18sIAorCSAgc2luY2UgdGhleSBwZXJmb3JtIHVzZWxlc3MgbWFza2luZyBvcGVyYXRpb25zIGluIG9yZGVyIHRvIGRlYWwgCisJICB3aXRoIGJyb2tlbiBkcml2ZXIgaW4gMi4xLlgga2VybmVsLgorCitXZWQgTm92IDExICAxMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTQKKwktIFRoZSBkcml2ZXIgd2FzIHVuaGFwcHkgd2hlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdF90YWdzID4gTUFYX1RBR1MKKwkgIEhvcGVmdWxseSBkb3VibHktZml4ZWQuCisJLSBTZXQgUENJX1BBUklUWSBpbiBQQ0lfQ09NTUFORCByZWdpc3RlciBpbiBub3Qgc2V0IChQQ0kgZml4LXVwKS4KKwktIFByaW50IG91dCBzb21lIG1lc3NhZ2UgaWYgcGhhc2UgbWlzbWF0Y2ggaXMgaGFuZGxlZCBmcm9tIFNDUklQVFMuCisKK1N1biBOb3YgMSAgMTRIMDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjEzCisJLSBTb21lIHJld3JpdGUgb2YgdGhlIGRldmljZSBkZXRlY3Rpb24gY29kZS4gVGhpcyBjb2RlIGhhZCBiZWVuIAorCSAgcGF0Y2hlZCB0b28gbXVjaCBhbmQgbmVlZGVkIHRvIGJlIGZhY2UtbGlmdGVkIGEgYml0LgorCSAgUmVtb3ZlIGFsbCBwbGF0Zm9ybSBkZXBlbmRlbnQgZml4LXVwcyB0aGF0IHdhcyBub3QgbmVlZGVkIG9yCisJICBjb25mbGljdGVkIHdpdGggc29tZSBvdGhlciBkcml2ZXIgY29kZSBhcyB3b3JrLWFyb3VuZHMuCisJICBSZXJlYWQgdGhlIE5WUkFNIGJlZm9yZSB0aGUgY2FsbGluZyBvZiBuY3JfYXR0YWNoKCkuIFRoaXMgc3BhcmVzIAorCSAgc3RhY2sgc3BhY2UgYW5kIHNvIGFsbG93cyB0byBoYW5kbGUgbW9yZSBib2FyZHMuCisJICBIYW5kbGUgNjQgYml0IGJhc2UgYWRkcmVzc2VzIHVuZGVyIGxpbnV4LTIuMC5YLgorCSAgU2V0IE1BU1RFUiBiaXQgaW4gUENJIENPTU1BTkQgcmVnaXN0ZXIgaWYgbm90IHNldC4KKworV2VkIE9jdCAzMCAyMkgwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTIKKwktIERhbW5lZCEgSSBqdXN0IGJyb2tlIHRoZSBkcml2ZXIgZm9yIEFscGhhIGJ5IGxlYXZpbmcgYSBzdGFsZSAKKwkgIGluc3RydWN0aW9uIGluIHRoZSBzb3VyY2UgY29kZS4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gRG8gbm90IHNldCBQRkVOIHdoZW4gaXQgaXMgdXNlbGVzcy4gRG9pbmcgc28gd2UgYXJlIHN1cmUgdGhhdCBCT0YgCisJICB3aWxsIGJlIGFjdGl2ZSwgc2luY2UgdGhlIG1hbnVhbCBhcHBlYXJzIHRvIGJlIHZlcnkgdW5jbGVhciBvbiB3aGF0IAorCSAgZmVhdHVyZSBpcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjaGlwIHdoZW4gYm90aCBQRkVOIGFuZCBCT0YgYXJlIAorCSAgc2V0LgorCitTYXQgT2N0IDI0IDE2SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMQorCS0gTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd2VyZSBtaXNjb21waWxlZCBmb3IgcmVnaXN0ZXIgb2Zmc2V0cyAKKwkgIGJleW9uZCAweDdmLiBUaGlzIGJyb2tlIGFjY2Vzc2VzIHRvIDg5NicgbmV3IHJlZ2lzdGVycy4KKwktIERpc2FibGUgYnkgZGVmYXVsdCBQaGFzZSBNaXNtYXRjaCBoYW5kbGluZyBmcm9tIFNDUklQVFMsIHNpbmNlIAorCSAgY3VycmVudCA4OTYgcmV2LjEgc2VlbXMgbm90IHRvIG9wZXJhdGUgc2FmZWx5IHdpdGggdGhlIGRyaXZlcgorCSAgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCAoYW5kIGFib3ZlIExPQUQvU1RPUkUgZml4IGFwcGxpZWQpLgorCSAgSSB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdCB0byAnZW5hYmxlZCcgd2hlbiB0aGlzIHByb2JsZW0gd2lsbCBiZSAKKwkgIHNvbHZlZC4KKwkgIFVzaW5nIGJvb3Qgb3B0aW9uICduY3I1M2M4eHg9c3BlY2Y6MScgZW5hYmxlcyB0aGlzIGZlYXR1cmUuCisJLSBJbXBsZW1lbnQgYSB3b3JrLWFyb3VuZCAoREVMIDQ3MiAtIElURU0gNSkgdGhhdCBzaG91bGQgYWxsb3cgdGhlIAorCSAgZHJpdmVyIHRvIHNhZmVseSBlbmFibGUgaGFyZHdhcmUgcGhhc2UgbWlzbWF0Y2ggd2l0aCA4OTYgcmV2LiAxLgorCitUdWUgT2N0IDIwIDIySDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMAorCS0gQWRkIHRoZSA1M2M4NzYgZGVzY3JpcHRpb24gdG8gdGhlIGNoaXAgdGFibGUuIFRoaXMgaXMgb25seSB1c2VmdWwgCisJICBmb3IgcHJpbnRpbmcgdGhlIHJpZ2h0IG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIuCisJLSBBZGQgYWRkaXRpb25hbCBjaGVja2luZyBvZiBJTlFVSVJZIGRhdGE6CisJICBDaGVjayBJTlFVSVJZIGRhdGEgcmVjZWl2ZWQgbGVuZ3RoIGlzIGF0IGxlYXN0IDcuIEJ5dGUgNyBvZiAKKwkgIGlucXVpcnkgZGF0YSBjb250YWlucyBkZXZpY2UgZmVhdHVyZXMgYml0cyBhbmQgdGhlIGRyaXZlciBtaWdodCAKKwkgIGJlIGNvbmZ1c2VkIGJ5IGdhcmJhZ2UuIEFsc28gY2hlY2sgcGVyaXBoZXJhbCBxdWFsaWZpZXIuCisJLSBVc2UgYSAxLDMsNSwuLi5NQVhUQUdTKjIrMSB0YWcgbnVtYmVyaW5nLiBQcmV2aW91cyBkcml2ZXIgY291bGQgIAorCSAgdXNlIGFueSB0YWcgbnVtYmVyIGZyb20gMSB0byAyNTMgYW5kIHNvbWUgbm9uIGNvbmZvcm1hbnQgZGV2aWNlcyAgCisJICBtaWdodCBoYXZlIHByb2JsZW1zIHdpdGggbGFyZ2UgdGFnIG51bWJlcnMuCisJLSBVc2UgTkFNRTUzQyBhbmQgTkFNRTUzQzhYWCBmb3IgY2hpcCBuYW1lIHByZWZpeCBjaGlwIGZhbWlseSBuYW1lLgorCSAgSnVzdCBnaXZlIGEgdHJ5IHVzaW5nICJzeW01M2MiIGFuZCAic3ltNTNjOHh4IiBpbnN0ZWFkIG9mICJuY3I1M2MiIAorCSAgYW5kICJuY3I1M2M4eHgiLiA6LSkKKworU3VuIE9jdCAxMSAxN0gwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuOQorCS0gREVMLTQ0MSBJdGVtIDIgd29yay1hcm91bmQgZm9yIHRoZSA1M2M4NzYgcmV2IDw9IDUgKDB4MTUpLgorCS0gQnJlYWsgbmNyX3NjYXR0ZXIoKSBpbnRvIDIgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGd1YXJhbnRlZSBiZXN0IAorCSAgcG9zc2libGUgY29kZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBjYXNlIHdlIGdldCBhIHNjYXR0ZXIgbGlzdC4KKwktIEFkZCB0aGUgY29kZSBpbnRlbmRlZCB0byBzdXBwb3J0IHVwIHRvIDEgdGVyYS1ieXRlIGZvciA2NCBiaXQgc3lzdGVtcy4KKwkgIEl0IGlzIHByb2JhYmx5IHRvbyBlYXJseSwgYnV0IEkgd2FudGVkIHRvIGNvbXBsZXRlIHRoZSB0aGluZy4KKworU2F0IE9jdCAzIDE0SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC44CisJLSBEbyBzb21lIHRlc3Rpbmcgd2l0aCBpb19tYXBwZWQgYW5kIGZpeCB3aGF0IG5lZWRlZCB0byBiZSBzby4KKwktIFdhaXQgZm9yIFNDU0kgc2VsZWN0aW9uIHRvIGNvbXBsZXRlIG9yIHRpbWUtb3V0IGltbWVkaWF0ZWx5IGFmdGVyIAorCSAgdGhlIGNoaXAgd29uIGFyYml0cmF0aW9uLCBzaW5jZSBleGVjdXRpbmcgU0NSSVBUUyB3aGlsZSB0aGUgU0NTSSAKKwkgIGNvcmUgaXMgcGVyZm9ybWluZyBTQ1NJIHNlbGVjdGlvbiBicmVha3MgdGhlIHNlbGVjdGlvbiBwcm9jZWR1cmUgCisJICBhdCBsZWFzdCBmb3Igc29tZSBjaGlwIHJldmlzaW9ucy4KKwktIEludGVycnVwdCB0aGUgU0NSSVBUUyBpZiBhIGRldmljZSBkb2VzIG5vdCBnbyB0byBNU0cgT1VUIHBoYXNlIGFmdGVyIAorCSAgaGF2aW5nIGJlZW4gc2VsZWN0ZWQgd2l0aCBBVE4uIFN1Y2ggYSBzaXR1YXRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAKKwkgIGJldHRlciB0byBmYWlsIHdoZW4gd2UgYXJlIHN0dWNrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHhfMiBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKQEAgLTAsMCArMSwxNDQgQEAKK1NhdCBEZWMgMzAgMjE6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4wLTIwMDAxMjMwCisJLSBJbml0aWFsIHJlbGVhc2Ugb2YgU1lNLTIuCisKK01vbiBKYW4gMDggMjE6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xLTIwMDEwMTA4CisJLSBDaGFuZ2UgYSBjb3VwbGUgb2YgZGVmaW5lcyBjb250YWluaW5nIG5jciBvciBOQ1IgYnkgdGhlaXIgCisJICBlcXVpdmFsZW50IGNvbnRhaW5pbmcgc3ltIG9yIFNZTSBpbnN0ZWFkLgorCitTdW4gSmFuIDE0IDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMi0yMDAxMDExNAorCS0gRml4IGEgY291cGxlIG9mIHByaW50ZnM6CisJICAqIEFkZCB0aGUgdGFyZ2V0IG51bWJlciB0byB0aGUgZGlzcGxheSBvZiB0cmFuc2ZlciBwYXJhbWV0ZXJzLgorCSAgKiBNYWtlIHRoZSBkaXNwbGF5IG9mIFRDUSBhbmQgcXVldWUgZGVwdGggY2xlYXJlci4KKworV2VkIEphbiAxNyAyMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjMtMjAwMTAxMTcKKwktIFdyb25nIHJlc2lkdWFsIHZhbHVlcyB3ZXJlIHJldHVybmVkIGluIHNvbWUgc2l0dWF0aW9ucy4KKwkgIFRoaXMgYnJva2UgY2RyZWNvcmQgd2l0aCBsaW51eC0yLjQuMCwgZm9yIGV4YW1wbGUuCisKK1NhdCBKYW4gMjAgMTg6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS40LTIwMDEwMTIwCisJLSBBZGQgeWVhciAyMDAxIHRvIENvcHlyaWdodC4KKwktIEEgdGlueSBidWcgaW4gdGhlIGRtYSBtZW1vcnkgZnJlZWluZyBwYXRoIGhhcyBiZWVuIGZpeGVkLgorCSAgKERyaXZlciB1bmxvYWQgZmFpbGVkIHdpdGggYSBiYWQgYWRkcmVzcyByZWZlcmVuY2UpLgorCitXZWQgSmFuIDI0IDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuNS0yMDAxMDEyNAorCS0gTWFrZSB0aGUgZHJpdmVyIHdvcmsgdW5kZXIgTGludXgtMi40Lnggd2hlbiBzdGF0aWNhbGx5IGxpbmtlZCAKKwkgIHdpdGggdGhlIGtlcm5lbC4KKwktIENoZWNrIGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBmb3IgU0NSSVBUWiBhbmQgYWRkIHRoZSAKKwkgIG1pc3NpbmcgZnJlZSBvZiB0aGlzIG1lbW9yeSBvbiBpbnN0YW5jZSBkZXRhY2guCisJLSBDaGVjayBhZ2FpbnN0IEdQSU8zIHB1bGxlZCBsb3cgZm9yIEhWRCBjb250cm9sbGVycyAoZHJpdmVyIGRpZCAKKwkgIGp1c3QgdGhlIG9wcG9zaXRlKS4KKwkgIE1pc2RldGVjdGlvbiBvZiBCVVMgbW9kZSB3YXMgdHJpZ2dlcmVkIG9uIG1vZHVsZSByZWxvYWQgb25seSwgCisJICBzaW5jZSBCSU9TIHNldHRpbmdzIHdlcmUgdHJ1c3RlZCBpbnN0ZWFkIG9uIGZpcnN0IGxvYWQuCisKK1dlZCBGZWIgNyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjYtMjAwMTAyMDcKKwktIENhbGwgcGNpX2VuYWJsZV9kZXZpY2UoKSBhcyB3aXNoZWQgYnkga2VybmVsIG1haW50YWluZXJzLgorCS0gQ2hhbmdlIHRoZSBzeW1fcXVldWVfc2NzaWlvKCkgaW50ZXJmYWNlLgorCSAgVGhpcyBpcyBpbnRlbmRlZCB0byBzaW1wbGlmeSBwb3J0YWJpbGl0eS4KKwktIE1vdmUgdGhlIGNvZGUgaW50ZW5kZWQgdG8gZGVhbCB3aXRoIHRoZSBkb3dsb2FkaW5nIG9mIFNDUklQVFMgCisJICBmcm9tIFNDUklQVFMgOikgaW4gdGhlIHBhdGNoIG1ldGhvZCAod2FzIHdyb25nbHkgcGxhY2VkIGluIAorCSAgdGhlIFNDUklQVFMgc2V0dXAgbWV0aG9kKS4KKwktIEFkZCBhIG1pc3NpbmcgY3B1X3RvX3NjcigpICAobnAtPmFib3J0X3RibC5hZGRyKQorCS0gUmVtb3ZlIGEgd3JvbmcgY3B1X3RvX3NjcigpIChucC0+dGFyZ3RibF9iYSkKKwktIENsZWFudXAgYSBiaXQgdGhlIFBQUiBmYWlsdXJlIHJlY292ZXJ5IGNvZGUuCisKK1NhdCBNYXIgMyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCS0gQWRkIG9wdGlvbiBTWU1fT1BUX0FOTk9VTkNFX1RSQU5TRkVSX1JBVEUgYW5kIG1vdmUgdGhlIAorCSAgY29ycmVzcG9uZGluZyBjb2RlIHRvIGZpbGUgc3ltX21pc2MuYy4KKwkgIEFsc28gbW92ZSB0aGUgY29kZSB0aGF0IHNuaWZmZXMgSU5RVUlSWSB0byBzeW1fbWlzYy5jLgorCSAgVGhpcyBhbGxvd3MgdG8gc2hhcmUgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSB3aXRoIE5ldEJTRCAKKwkgIHdpdGhvdXQgcG9sbHVhdGluZyB0aGUgY29yZSBkcml2ZXIgc291cmNlIChzeW1faGlwZC5jKS4KKwktIEFkZCBvcHRpb25uYWwgY29kZSB0aGF0IGhhbmRsZXMgSU8gdGltZW91dHMgZnJvbSB0aGUgZHJpdmVyLgorCSAgKG5vdCB1c2VkIHVuZGVyIExpbnV4LCBidXQgcmVxdWlyZWQgZm9yIE5ldEJTRCkKKwktIERvbm5vdCBhc3N1bWUgYW55IGxvbmdlciB0aGF0IFBBR0VfU0hJRlQgYW5kIFBBR0VfU0laRSBhcmUgCisJICBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSwgYXMgYXQgbGVhc3QgTmV0QlNEIHVzZXMgdmFyaWFibGVzIAorCSAgaW4gbWVtb3J5IGZvciB0aGF0LgorCS0gUmVmaW5lIGEgd29yay1hcm91bmQgZm9yIHRoZSBDMTAxMC0zMyB0aGF0IGNvbnNpc3RzIGluIAorCSAgZGlzYWJsaW5nIGludGVybmFsIExPQUQvU1RPUkUuIFdhcyBhcHBsaWVkIHVwIHRvIHJldmlzaW9uIDEuCisJICBJcyBub3cgb25seSBhcHBsaWVkIHRvIHJldmlzaW9uIDAuCisJLSBTb21lIGNvZGUgcmVvcmdhbmlzYXRpb25zIGR1ZSB0byBjb2RlIG1vdmVzIGJldHdlZW4gZmlsZXMuCisKK1R1ZXMgQXByIDEwIDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuOS0yMDAxMDQxMgorCS0gUmVzZXQgNTNDODk2IGFuZCA1M0MxMDEwIGNoaXAgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwuCisJICAoaS5lLjogc2V0IHRoZSBBQlJUIGJpdCBpbiBJU1RBVCBpZiBTQ1JJUFRTIGFyZSBydW5uaW5nKQorCS0gU2V0ICNMVU4gaW4gcmVxdWVzdCBzZW5zZSBvbmx5IGlmIHNjc2kgdmVyc2lvbiA8PSAyIGFuZAorCSAgI0xVTiA8PSA3LgorCS0gU2V0IGJ1c3lfaXRsIGluIExDQiB0byAxIGlmIHRoZSBMQ0IgaXMgYWxsb2NhdGVkIGFuZCBhIAorCSAgU0NTSSBjb21tYW5kIGlzIGFjdGl2ZS4gVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uLgorCS0gSW4gc3ltX2hjYl9mcmVlKCksIGRvIG5vdCBzY2FuIHRoZSBmcmVlX2NjYnEgaWYgbm8gQ0NCcyAKKwkgIGhhcyBiZWVuIGFsbG9jYXRlZC4gVGhpcyBmaXhlcyBhIHBhbmljIGlmIGF0dGFjaCBmYWlsZWQuCisJLSBBZGQgRFQvU1QgKGRvdWJsZS9zaW1wbGUgdHJhbnNpdGlvbikgaW4gdGhlIHRyYW5zZmVyIAorCSAgbmVnb3RpYXRpb24gYW5ub3VuY2UuCisJLSBGb3JjZXMgdGhlIG1heCBudW1iZXIgb2YgdGFza3MgcGVyIExVTiB0byBhdCBsZWFzdCA2NC4KKwktIFVzZSBwY2lfc2V0X2RtYV9tYXNrKCkgZm9yIGxpbnV4LTIuNC4zIGFuZCBhYm92ZS4KKwktIEEgY291cGxlIG9mIGNvbW1lbnRzIGZpeGVzLgorCitXZWQgTWF5IDIyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTAtMjAwMTA1MDkKKwktIE1hc2sgR1BDTlRMIGFnYWluc3QgMHgxYyAod2FzIDB4ZmMpIGZvciB0aGUgcmVhZGluZyBvZiB0aGUgTlZSQU0uCisJICBUaGlzIGVuc3VyZSBMRURDIGJpdCB3aWxsIG5vdCBiZSBzZXQgb24gODk2IGFuZCBsYXRlciBjaGlwcy4KKwkgIEZpeCBzZW50IGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+LgorCS0gRGVmaW5lIHRoZSBudW1iZXIgb2YgUFFTIEJVU2VzIHN1cHBvcnRlZC4KKwkgIEZpeCBzZW50IGJ5IFN0aWcgVGVsZmVyIDxzdGlnQGFwaS1uZXR3b3Jrcy5jb20+CisJLSBNaXNjZWxsYW5lb3VzIGNvbW1vbiBjb2RlIHJlYXJyYW5nZW1lbnRzIGR1ZSB0byBOZXRCU0QgYWNjZWwgCisJICBpb2N0bCBzdXBwb3J0LCB3aXRob3V0IGltcGFjdCBvbiBMaW51eCAoaG9wZWZ1bGx5KS4KKworTW9uIEp1bHkgMiAxMjowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjExLTIwMDEwNzAyCisJLSBBZGQgVGVrcmFtIDM5MCBVMkIvVTJXIFNDU0kgTEVEIGhhbmRsaW5nLgorCSAgU3VibWl0dGVkIGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEB2YWxpbnV4LmNvbT4KKwktIEFkZCBjYWxsIHRvIHNjc2lfc2V0X3BjaV9kZXZpY2UoKSBmb3Iga2VybmVscyA+PSAyLjQuNC4KKwktIENoZWNrIHBjaSBkbWEgbWFwcGluZyBmYWlsdXJlcyBhbmQgY29tcGxldGUgdGhlIElPIHdpdGggc29tZSAKKwkgIGVycm9yIHdoZW4gc3VjaCBtYXBwaW5nIGZhaWxzLgorCS0gRmlsbCBpbiBpbnN0YW5jZS0+bWF4X2NtZF9sZW4gZm9yIGtlcm5lbHMgPiAyLjQuMC4KKwktIEEgY291cGxlIG9mIHRpbnkgZml4ZXMgLi4uCisKK1N1biBTZXAgOSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEyLTIwMDEwOTA5CisJLSBDaGFuZ2UgbXkgZW1haWwgYWRkcmVzcy4KKwktIEFkZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGZvcnRoY29taW5nIDY0IGJpdCBETUEgYWRkcmVzc2luZyBzdXBwb3J0LgorCSAgKEJhc2VkIG9uIFBDSSA2NCBiaXQgcGF0Y2ggZnJvbSBEYXZpZCBTLiBNaWxsZXIpCisJLSBEb25ub3QgdXNlIGFueW1vcmUgdm1fb2Zmc2V0X3QgdHlwZS4KKworU2F0IFNlcCAxNSAyMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEzLTIwMDEwOTE2CisJLSBBZGQgc3VwcG9ydCBmb3IgNjQgYml0IERNQSBhZGRyZXNzaW5nIHVzaW5nIHNlZ21lbnQgcmVnaXN0ZXJzLgorCSAgMTYgcmVnaXN0ZXJzIGZvciB1cCB0byA0IEdCIHggMTYgLT4gNjQgR0IuCisKK1NhdCBTZXAgMjIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xNC0yMDAxMDkyMgorCS0gQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgZWggaGFuZGxpbmcuIFRoZSBkcml2ZXIgaXMgbm93IHVzaW5nIGEgCisJICBzZW1hcGhvcmUgaW4gb3JkZXIgdG8gYmVoYXZlIHN5bmNocm9ub3VzbHkgYXMgcmVxdWlyZWQgYnkgdGhlIGVoIAorCSAgdGhyZWFkcy4gQSB0aW1lciBpcyBhbHNvIHVzZWQgdG8gcHJldmVudCBmcm9tIHdhaXRpbmcgaW5kZWZpbml0ZWx5LgorCitTdW4gU2VwIDMwIDE3OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTUtMjAwMTA5MzAKKwktIEluY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiB1bmNvbmRpdGlvbm5hbHkgYXMgZXhwZWN0ZWQgYnkgbGF0ZXN0CisJICBrZXJuZWxzLgorCS0gVXNlIGRlbF90aW1lcl9zeW5jKCkgZm9yIHJlY2VudCBrZXJuZWxzIHRvIGtpbGwgdGhlIGRyaXZlciB0aW1lciAKKwkgIG9uIG1vZHVsZSByZWxlYXNlLgorCitTdW4gT2N0IDI4IDE1OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTYtMjAwMTEwMjgKKwktIFNsaWdodGx5IHNpbXBsaWZ5IGRyaXZlciBjb25maWd1cmF0aW9uLgorCS0gUHJlcGFyZSBhIG5ldyBwYXRjaCBhZ2FpbnN0IGxpbnV4LTIuNC4xMy4KKworU2F0IE5vdiAxNyAxMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3CisJLSBGaXggYSBjb3VwbGUgb2YgZ2NjL2djYzMgd2FybmluZ3MuCisJLSBBbGxvY2F0ZSBzZXBhcmF0ZWx5IGZyb20gdGhlIEhDQiB0aGUgYXJyYXkgZm9yIENDQnMgaGFzaGVkIGJ5IERTQS4KKwkgIEFsbCBkcml2ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBub3cgbm90IGdyZWF0ZXIgdGhhbiAxIFBBR0UgCisJICBldmVuIG9uIFBQQzY0IC8gNEtCIFBBR0Ugc3VycHJpc2luZyBzZXR1cC4KKworU2F0IERlYyAwMSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3YQorCS0gVXNlIHVfbG9uZyBpbnN0ZWFkIG9mIFUzMiBmb3IgdGhlIElPIGJhc2UgY29va2llLiBUaGlzIGlzIG1vcmUgCisJICBjb25zaXN0ZW50IHdpdGggd2hhdCBhcmNocyBhcmUgZXhwZWN0aW5nLgorCS0gVXNlIE1NSU8gcGVyIGRlZmF1bHQgZm9yIFBvd2VyIFBDIGluc3RlYWQgb2Ygc29tZSBmYWtlIG5vcm1hbCBJTywKKwkgIGFzIFBhdWwgTWFja2VycmFzIHN0YXRlZCB0aGF0IE1NSU8gd29ya3MgZmluZSBub3cgb24gdGhpcyBhcmNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvRmxhc2hQb2ludC50eHQKQEAgLTAsMCArMSwxNjMgQEAKK1RoZSBCdXNMb2dpYyBGbGFzaFBvaW50IFNDU0kgSG9zdCBBZGFwdGVycyBhcmUgbm93IGZ1bGx5IHN1cHBvcnRlZCBvbiBMaW51eC4KK1RoZSB1cGdyYWRlIHByb2dyYW0gZGVzY3JpYmVkIGJlbG93IGhhcyBiZWVuIG9mZmljaWFsbHkgdGVybWluYXRlZCBlZmZlY3RpdmUKKzMxIE1hcmNoIDE5OTcgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworCisKKwkgIE1ZTEVYIElOVFJPRFVDRVMgTElOVVggT1BFUkFUSU5HIFNZU1RFTSBTVVBQT1JUIEZPUiBJVFMKKwkgICAgICBCVVNMT0dJQyBGTEFTSFBPSU5UIExJTkUgT0YgU0NTSSBIT1NUIEFEQVBURVJTCisKKworRlJFTU9OVCwgQ0EsIC0tIE9jdG9iZXIgOCwgMTk5NiAtLSBNeWxleCBDb3Jwb3JhdGlvbiBoYXMgZXhwYW5kZWQgTGludXgKK29wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydCB0byBpdHMgQnVzTG9naWMgYnJhbmQgb2YgRmxhc2hQb2ludCBVbHRyYSBTQ1NJCitob3N0IGFkYXB0ZXJzLiAgQWxsIG9mIEJ1c0xvZ2ljJ3Mgb3RoZXIgU0NTSSBob3N0IGFkYXB0ZXJzLCBpbmNsdWRpbmcgdGhlCitNdWx0aU1hc3RlciBsaW5lLCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gIExpbnV4Citkcml2ZXJzIGFuZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiBPY3RvYmVyIDE1dGggYXQKK2h0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8uCisKKyJNeWxleCBpcyBjb21taXR0ZWQgdG8gc3VwcG9ydGluZyB0aGUgTGludXggY29tbXVuaXR5LCIgc2F5cyBQZXRlciBTaGFtYm9yYSwKK3ZpY2UgcHJlc2lkZW50IG9mIG1hcmtldGluZyBmb3IgTXlsZXguICAiV2UgaGF2ZSBzdXBwb3J0ZWQgTGludXggZHJpdmVyCitkZXZlbG9wbWVudCBhbmQgcHJvdmlkZWQgdGVjaG5pY2FsIHN1cHBvcnQgZm9yIG91ciBob3N0IGFkYXB0ZXJzIGZvciBzZXZlcmFsCit5ZWFycywgYW5kIGFyZSBwbGVhc2VkIHRvIG5vdyBtYWtlIG91ciBGbGFzaFBvaW50IHByb2R1Y3RzIGF2YWlsYWJsZSB0byB0aGlzCit1c2VyIGJhc2UuIgorCitUaGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCitMaW51eCBpcyBhIGZyZWVseS1kaXN0cmlidXRlZCBpbXBsZW1lbnRhdGlvbiBvZiBVTklYIGZvciBJbnRlbCB4ODYsIFN1bgorU1BBUkMsIFNHSSBNSVBTLCBNb3Rvcm9sYSA2OGssIERpZ2l0YWwgQWxwaGEgQVhQIGFuZCBNb3Rvcm9sYSBQb3dlclBDCittYWNoaW5lcy4gIEl0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBYIFdpbmRvdworU3lzdGVtLCBFbWFjcywgYW5kIFRDUC9JUCBuZXR3b3JraW5nLiAgRnVydGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cubGludXgub3JnIGFuZCBodHRwOi8vd3d3LnNzYy5jb20vbGludXguCisKK0ZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworCitUaGUgRmxhc2hQb2ludCBmYW1pbHkgb2YgVWx0cmEgU0NTSSBob3N0IGFkYXB0ZXJzLCBkZXNpZ25lZCBmb3Igd29ya3N0YXRpb24KK2FuZCBmaWxlIHNlcnZlciBlbnZpcm9ubWVudHMsIGFyZSBhdmFpbGFibGUgaW4gbmFycm93LCB3aWRlLCBkdWFsIGNoYW5uZWwsCithbmQgZHVhbCBjaGFubmVsIHdpZGUgdmVyc2lvbnMuICBUaGVzZSBhZGFwdGVycyBmZWF0dXJlIFNlcUVuZ2luZQorYXV0b21hdGlvbiB0ZWNobm9sb2d5LCB3aGljaCBtaW5pbWl6ZXMgU0NTSSBjb21tYW5kIG92ZXJoZWFkIGFuZCByZWR1Y2VzCit0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHRvIHRoZSBDUFUuCisKK0Fib3V0IE15bGV4CisKK015bGV4IENvcnBvcmF0aW9uIChOQVNEQVEvTk0gU1lNQk9MOiBNWUxYKSwgZm91bmRlZCBpbiAxOTgzLCBpcyBhIGxlYWRpbmcKK3Byb2R1Y2VyIG9mIFJBSUQgdGVjaG5vbG9neSBhbmQgbmV0d29yayBtYW5hZ2VtZW50IHByb2R1Y3RzLiAgVGhlIGNvbXBhbnkKK3Byb2R1Y2VzIGhpZ2ggcGVyZm9ybWFuY2UgZGlzayBhcnJheSAoUkFJRCkgY29udHJvbGxlcnMsIGFuZCBjb21wbGVtZW50YXJ5Citjb21wdXRlciBwcm9kdWN0cyBmb3IgbmV0d29yayBzZXJ2ZXJzLCBtYXNzIHN0b3JhZ2Ugc3lzdGVtcywgd29ya3N0YXRpb25zCithbmQgc3lzdGVtIGJvYXJkcy4gIFRocm91Z2ggaXRzIHdpZGUgcmFuZ2Ugb2YgUkFJRCBjb250cm9sbGVycyBhbmQgaXRzCitCdXNMb2dpYyBsaW5lIG9mIFVsdHJhIFNDU0kgaG9zdCBhZGFwdGVyIHByb2R1Y3RzLCBNeWxleCBwcm92aWRlcyBlbmFibGluZworaW50ZWxsaWdlbnQgSS9PIHRlY2hub2xvZ2llcyB0aGF0IGluY3JlYXNlIG5ldHdvcmsgbWFuYWdlbWVudCBjb250cm9sLAorZW5oYW5jZSBDUFUgdXRpbGl6YXRpb24sIG9wdGltaXplIEkvTyBwZXJmb3JtYW5jZSwgYW5kIGVuc3VyZSBkYXRhIHNlY3VyaXR5CithbmQgYXZhaWxhYmlsaXR5LiAgUHJvZHVjdHMgYXJlIHNvbGQgZ2xvYmFsbHkgdGhyb3VnaCBhIG5ldHdvcmsgb2YgT0VNcywKK21ham9yIGRpc3RyaWJ1dG9ycywgVkFScywgYW5kIHN5c3RlbSBpbnRlZ3JhdG9ycy4gIE15bGV4IENvcnBvcmF0aW9uIGlzCitoZWFkcXVhcnRlcmVkIGF0IDM0NTUxIEFyZGVud29vZCBCbHZkLiwgRnJlbW9udCwgQ0EuCisKKwkJCQkgICAjIyMjCisKK0NvbnRhY3Q6CisKK1BldGVyIFNoYW1ib3JhCitWaWNlIFByZXNpZGVudCBvZiBNYXJrZXRpbmcKK015bGV4IENvcnAuCis1MTAvNzk2LTYxMDAKK3BldGVyc0BteWxleC5jb20KKwwKKwkJCSAgICAgICBBTk5PVU5DRU1FTlQKKwkgICAgICAgQnVzTG9naWMgRmxhc2hQb2ludCBMVC9CVC05NDggVXBncmFkZSBQcm9ncmFtCisJCQkgICAgICAxIEZlYnJ1YXJ5IDE5OTYKKworCQkJICBBRERJVElPTkFMIEFOTk9VTkNFTUVOVAorCSAgICAgICBCdXNMb2dpYyBGbGFzaFBvaW50IExXL0JULTk1OCBVcGdyYWRlIFByb2dyYW0KKwkJCSAgICAgICAxNCBKdW5lIDE5OTYKKworRXZlciBzaW5jZSBpdHMgaW50cm9kdWN0aW9uIGxhc3QgT2N0b2JlciwgdGhlIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgaGFzCitiZWVuIHByb2JsZW1hdGljIGZvciBtZW1iZXJzIG9mIHRoZSBMaW51eCBjb21tdW5pdHksIGluIHRoYXQgbm8gTGludXgKK2RyaXZlcnMgaGF2ZSBiZWVuIGF2YWlsYWJsZSBmb3IgdGhpcyBuZXcgVWx0cmEgU0NTSSBwcm9kdWN0LiAgRGVzcGl0ZSBpdCdzCitvZmZpY2lhbGx5IGJlaW5nIHBvc2l0aW9uZWQgYXMgYSBkZXNrdG9wIHdvcmtzdGF0aW9uIHByb2R1Y3QsIGFuZCBub3QgYmVpbmcKK3BhcnRpY3VsYXJseSB3ZWxsIHN1aXRlZCBmb3IgYSBoaWdoIHBlcmZvcm1hbmNlIG11bHRpdGFza2luZyBvcGVyYXRpbmcKK3N5c3RlbSBsaWtlIExpbnV4LCB0aGUgRmxhc2hQb2ludCBMVCBoYXMgYmVlbiB0b3V0ZWQgYnkgY29tcHV0ZXIgc3lzdGVtCit2ZW5kb3JzIGFzIHRoZSBsYXRlc3QgdGhpbmcsIGFuZCBoYXMgYmVlbiBzb2xkIGV2ZW4gb24gbWFueSBvZiB0aGVpciBoaWdoCitlbmQgc3lzdGVtcywgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgb2xkZXIgTXVsdGlNYXN0ZXIgcHJvZHVjdHMuICBUaGlzIGhhcworY2F1c2VkIGdyaWVmIGZvciBtYW55IHBlb3BsZSB3aG8gaW5hZHZlcnRlbnRseSBwdXJjaGFzZWQgYSBzeXN0ZW0gZXhwZWN0aW5nCit0aGF0IGFsbCBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgd2VyZSBzdXBwb3J0ZWQgYnkgTGludXgsIG9ubHkgdG8KK2Rpc2NvdmVyIHRoYXQgdGhlIEZsYXNoUG9pbnQgd2FzIG5vdCBzdXBwb3J0ZWQgYW5kIHdvdWxkIG5vdCBiZSBmb3IgcXVpdGUKK3NvbWUgdGltZSwgaWYgZXZlci4KKworQWZ0ZXIgdGhpcyBwcm9ibGVtIHdhcyBpZGVudGlmaWVkLCBCdXNMb2dpYyBjb250YWN0ZWQgaXRzIG1ham9yIE9FTQorY3VzdG9tZXJzIHRvIG1ha2Ugc3VyZSB0aGUgQlQtOTQ2Qy85NTZDIE11bHRpTWFzdGVyIGNhcmRzIHdvdWxkIHN0aWxsIGJlCittYWRlIGF2YWlsYWJsZSwgYW5kIHRoYXQgTGludXggdXNlcnMgd2hvIG1pc3Rha2VubHkgb3JkZXJlZCBzeXN0ZW1zIHdpdGgKK3RoZSBGbGFzaFBvaW50IHdvdWxkIGJlIGFibGUgdG8gdXBncmFkZSB0byB0aGUgQlQtOTQ2Qy4gIFdoaWxlIHRoaXMgaGVscGVkCittYW55IHB1cmNoYXNlcnMgb2YgbmV3IHN5c3RlbXMsIGl0IHdhcyBvbmx5IGEgcGFydGlhbCBzb2x1dGlvbiB0byB0aGUKK292ZXJhbGwgcHJvYmxlbSBvZiBGbGFzaFBvaW50IHN1cHBvcnQgZm9yIExpbnV4IHVzZXJzLiAgSXQgZGlkIG5vdGhpbmcgdG8KK2Fzc2lzdCB0aGUgcGVvcGxlIHdobyBpbml0aWFsbHkgcHVyY2hhc2VkIGEgRmxhc2hQb2ludCBmb3IgYSBzdXBwb3J0ZWQKK29wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZW4gbGF0ZXIgZGVjaWRlZCB0byBydW4gTGludXgsIG9yIHRob3NlIHdobyBoYWQKK2VuZGVkIHVwIHdpdGggYSBGbGFzaFBvaW50IExULCBiZWxpZXZpbmcgaXQgd2FzIHN1cHBvcnRlZCwgYW5kIHdlcmUgdW5hYmxlCit0byByZXR1cm4gaXQuCisKK0luIHRoZSBtaWRkbGUgb2YgRGVjZW1iZXIsIEkgYXNrZWQgdG8gbWVldCB3aXRoIEJ1c0xvZ2ljJ3Mgc2VuaW9yCittYW5hZ2VtZW50IHRvIGRpc2N1c3MgdGhlIGlzc3VlcyByZWxhdGVkIHRvIExpbnV4IGFuZCBmcmVlIHNvZnR3YXJlIHN1cHBvcnQKK2ZvciB0aGUgRmxhc2hQb2ludC4gIFJ1bW9ycyBvZiB2YXJ5aW5nIGFjY3VyYWN5IGhhZCBiZWVuIGNpcmN1bGF0aW5nCitwdWJsaWNseSBhYm91dCBCdXNMb2dpYydzIGF0dGl0dWRlIHRvd2FyZCB0aGUgTGludXggY29tbXVuaXR5LCBhbmQgSSBmZWx0CitpdCB3YXMgYmVzdCB0aGF0IHRoZXNlIGlzc3VlcyBiZSBhZGRyZXNzZWQgZGlyZWN0bHkuICBJIHNlbnQgYW4gZW1haWwKK21lc3NhZ2UgYWZ0ZXIgMTFwbSBvbmUgZXZlbmluZywgYW5kIHRoZSBtZWV0aW5nIHRvb2sgcGxhY2UgdGhlIG5leHQKK2FmdGVybm9vbi4gIFVuZm9ydHVuYXRlbHksIGNvcnBvcmF0ZSB3aGVlbHMgc29tZXRpbWVzIGdyaW5kIHNsb3dseSwKK2VzcGVjaWFsbHkgd2hlbiBhIGNvbXBhbnkgaXMgYmVpbmcgYWNxdWlyZWQsIGFuZCBzbyBpdCdzIHRha2VuIHVudGlsIG5vdworYmVmb3JlIHRoZSBkZXRhaWxzIHdlcmUgY29tcGxldGVseSBkZXRlcm1pbmVkIGFuZCBhIHB1YmxpYyBzdGF0ZW1lbnQgY291bGQKK2JlIG1hZGUuCisKK0J1c0xvZ2ljIGlzIG5vdCBwcmVwYXJlZCBhdCB0aGlzIHRpbWUgdG8gcmVsZWFzZSB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5Citmb3IgdGhpcmQgcGFydGllcyB0byB3cml0ZSBkcml2ZXJzIGZvciB0aGUgRmxhc2hQb2ludC4gIFRoZSBvbmx5IGV4aXN0aW5nCitGbGFzaFBvaW50IGRyaXZlcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gZGlyZWN0bHkgYnkgQnVzTG9naWMgRW5naW5lZXJpbmcsIGFuZAordGhlcmUgaXMgbm8gRmxhc2hQb2ludCBkb2N1bWVudGF0aW9uIHN1ZmZpY2llbnRseSBkZXRhaWxlZCB0byBhbGxvdyBvdXRzaWRlCitkZXZlbG9wZXJzIHRvIHdyaXRlIGEgZHJpdmVyIHdpdGhvdXQgc3Vic3RhbnRpYWwgYXNzaXN0YW5jZS4gIFdoaWxlIHRoZXJlCithcmUgcGVvcGxlIGF0IEJ1c0xvZ2ljIHdobyB3b3VsZCByYXRoZXIgbm90IHJlbGVhc2UgdGhlIGRldGFpbHMgb2YgdGhlCitGbGFzaFBvaW50IGFyY2hpdGVjdHVyZSBhdCBhbGwsIHRoYXQgZGViYXRlIGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCBlaXRoZXIKK3dheS4gIEluIGFueSBldmVudCwgZXZlbiBpZiBkb2N1bWVudGF0aW9uIHdlcmUgYXZhaWxhYmxlIHRvZGF5IGl0IHdvdWxkCit0YWtlIHF1aXRlIGEgd2hpbGUgZm9yIGEgdXNhYmxlIGRyaXZlciB0byBiZSB3cml0dGVuLCBlc3BlY2lhbGx5IHNpbmNlIEknbQorbm90IGNvbnZpbmNlZCB0aGF0IHRoZSBlZmZvcnQgcmVxdWlyZWQgd291bGQgYmUgd29ydGh3aGlsZS4KKworSG93ZXZlciwgQnVzTG9naWMgZG9lcyByZW1haW4gY29tbWl0dGVkIHRvIHByb3ZpZGluZyBhIGhpZ2ggcGVyZm9ybWFuY2UKK1NDU0kgc29sdXRpb24gZm9yIHRoZSBMaW51eCBjb21tdW5pdHksIGFuZCBkb2VzIG5vdCB3YW50IHRvIHNlZSBhbnlvbmUgbGVmdAordW5hYmxlIHRvIHJ1biBMaW51eCBiZWNhdXNlIHRoZXkgaGF2ZSBhIEZsYXNocG9pbnQgTFQuICBUaGVyZWZvcmUsIEJ1c0xvZ2ljCitoYXMgcHV0IGluIHBsYWNlIGEgZGlyZWN0IHVwZ3JhZGUgcHJvZ3JhbSB0byBhbGxvdyBhbnkgTGludXggdXNlciB3b3JsZHdpZGUKK3RvIHRyYWRlIGluIHRoZWlyIEZsYXNoUG9pbnQgTFQgZm9yIHRoZSBuZXcgQlQtOTQ4IE11bHRpTWFzdGVyIFBDSSBVbHRyYQorU0NTSSBIb3N0IEFkYXB0ZXIuICBUaGUgQlQtOTQ4IGlzIHRoZSBVbHRyYSBTQ1NJIHN1Y2Nlc3NvciB0byB0aGUgQlQtOTQ2QworYW5kIGhhcyBhbGwgdGhlIGJlc3QgZmVhdHVyZXMgb2YgYm90aCB0aGUgQlQtOTQ2QyBhbmQgRmxhc2hQb2ludCBMVCwKK2luY2x1ZGluZyBzbWFydCB0ZXJtaW5hdGlvbiBhbmQgYSBmbGFzaCBQUk9NIGZvciBlYXN5IGZpcm13YXJlIHVwZGF0ZXMsIGFuZAoraXMgb2YgY291cnNlIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJlc2VudCBMaW51eCBkcml2ZXIuICBUaGUgcHJpY2UgZm9yIHRoaXMKK3VwZ3JhZGUgaGFzIGJlZW4gc2V0IGF0IFVTICQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgYW5kIHRoZSB1cGdyYWRlCitwcm9ncmFtIHdpbGwgYmUgYWRtaW5pc3RlcmVkIHRocm91Z2ggQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQsIHdoaWNoIGNhbgorYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljIG1haWwgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20sIGJ5IFZvaWNlIGF0ICsxIDQwOAorNjU0LTA3NjAsIG9yIGJ5IEZBWCBhdCArMSA0MDggNDkyLTE1NDIuCisKK0FzIG9mIDE0IEp1bmUgMTk5NiwgdGhlIG9yaWdpbmFsIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgdG8gQlQtOTQ4IHVwZ3JhZGUKK3Byb2dyYW0gaGFzIG5vdyBiZWVuIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aGUgRmxhc2hQb2ludCBMVyBXaWRlIFVsdHJhCitTQ1NJIEhvc3QgQWRhcHRlci4gIEFueSBMaW51eCB1c2VyIHdvcmxkd2lkZSBtYXkgdHJhZGUgaW4gdGhlaXIgRmxhc2hQb2ludAorTFcgKEJULTk1MCkgZm9yIGEgQlQtOTU4IE11bHRpTWFzdGVyIFBDSSBVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlci4gIFRoZQorcHJpY2UgZm9yIHRoaXMgdXBncmFkZSBoYXMgYmVlbiBzZXQgYXQgVVMgJDY1IHBsdXMgc2hpcHBpbmcgYW5kIGhhbmRsaW5nLgorCitJIHdhcyBhIGJldGEgdGVzdCBzaXRlIGZvciB0aGUgQlQtOTQ4Lzk1OCwgYW5kIHZlcnNpb25zIDEuMi4xIGFuZCAxLjMuMSBvZgorbXkgQnVzTG9naWMgZHJpdmVyIGFscmVhZHkgaW5jbHVkZWQgbGF0ZW50IHN1cHBvcnQgZm9yIHRoZSBCVC05NDgvOTU4LgorQWRkaXRpb25hbCBjb3NtZXRpYyBzdXBwb3J0IGZvciB0aGUgVWx0cmEgU0NTSSBNdWx0aU1hc3RlciBjYXJkcyB3YXMgYWRkZWQKK3N1YnNlcXVlbnQgcmVsZWFzZXMuICBBcyBhIHJlc3VsdCBvZiB0aGlzIGNvb3BlcmF0aXZlIHRlc3RpbmcgcHJvY2VzcywKK3NldmVyYWwgZmlybXdhcmUgYnVncyB3ZXJlIGZvdW5kIGFuZCBjb3JyZWN0ZWQuICBNeSBoZWF2aWx5IGxvYWRlZCBMaW51eAordGVzdCBzeXN0ZW0gcHJvdmlkZWQgYW4gaWRlYWwgZW52aXJvbm1lbnQgZm9yIHRlc3RpbmcgZXJyb3IgcmVjb3ZlcnkKK3Byb2Nlc3NlcyB0aGF0IGFyZSBtdWNoIG1vcmUgcmFyZWx5IGV4ZXJjaXNlZCBpbiBwcm9kdWN0aW9uIHN5c3RlbXMsIGJ1dAorYXJlIGNydWNpYWwgdG8gb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiAgSXQgd2FzIGVzcGVjaWFsbHkgY29udmVuaWVudAorYmVpbmcgYWJsZSB0byB3b3JrIGRpcmVjdGx5IHdpdGggdGhlaXIgZmlybXdhcmUgZW5naW5lZXIgaW4gZGVtb25zdHJhdGluZwordGhlIHByb2JsZW1zIHVuZGVyIGNvbnRyb2wgb2YgdGhlIGZpcm13YXJlIGRlYnVnZ2luZyBlbnZpcm9ubWVudDsgdGhpbmdzCitzdXJlIGhhdmUgY29tZSBhIGxvbmcgd2F5IHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB3b3JrZWQgb24gZmlybXdhcmUgZm9yIGFuCitlbWJlZGRlZCBzeXN0ZW0uICBJIGFtIHByZXNlbnRseSB3b3JraW5nIG9uIHNvbWUgcGVyZm9ybWFuY2UgdGVzdGluZyBhbmQKK2V4cGVjdCB0byBoYXZlIHNvbWUgZGF0YSB0byByZXBvcnQgaW4gdGhlIG5vdCB0b28gZGlzdGFudCBmdXR1cmUuCisKK0J1c0xvZ2ljIGFza2VkIG1lIHRvIHNlbmQgdGhpcyBhbm5vdW5jZW1lbnQgc2luY2UgYSBsYXJnZSBwZXJjZW50YWdlIG9mIHRoZQorcXVlc3Rpb25zIHJlZ2FyZGluZyBzdXBwb3J0IGZvciB0aGUgRmxhc2hQb2ludCBoYXZlIGVpdGhlciBiZWVuIHNlbnQgdG8gbWUKK2RpcmVjdGx5IHZpYSBlbWFpbCwgb3IgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgTGludXggbmV3c2dyb3VwcyBpbiB3aGljaCBJCitwYXJ0aWNpcGF0ZS4gIFRvIHN1bW1hcml6ZSwgQnVzTG9naWMgaXMgb2ZmZXJpbmcgTGludXggdXNlcnMgYW4gdXBncmFkZQorZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVCAoQlQtOTMwKSB0byB0aGUgc3VwcG9ydGVkIEJULTk0OCBmb3IgVVMKKyQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgb3IgZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVworKEJULTk1MCkgdG8gdGhlIHN1cHBvcnRlZCBCVC05NTggZm9yICQ2NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZy4KK0NvbnRhY3QgQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20gb3IgKzEgNDA4Cis2NTQtMDc2MCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVpciBvZmZlci4KKworCQlMZW9uYXJkIE4uIFp1YmtvZmYKKwkJbG56QGRhbmRlbGlvbi5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLkZsYXNoUG9pbnQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50CkBAIC0wLDAgKzEsNjAgQEAKKyAgICAgICAgICAgICAgICAgICAgIEZsYXNoUG9pbnQgRHJpdmVyIERldmVsb3BlcidzIEtpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMAorCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBNeWxleCBDb3Jwb3JhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgICBhKSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiwKKworICAgIG9yCisKKyAgICBiKSB0aGUgIkJTRC1zdHlsZSBMaWNlbnNlIiBpbmNsdWRlZCBiZWxvdy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFksIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIG9yIHRoZSBCU0Qtc3R5bGUgTGljZW5zZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitUaGUgQlNELXN0eWxlIExpY2Vuc2UgaXMgYXMgZm9sbG93czoKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIExJQ0VOU0UuRmxhc2hQb2ludAorICAgZmlsZSwgd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIENvcHlyaWdodCAxOTk1LTE5OTYgYnkgTXlsZXggQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBib3RoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgICBhbmQgYSBCU0Qtc3R5bGUgY29weXJpZ2h0OyBzZWUgTElDRU5TRS5GbGFzaFBvaW50IGZvciBkZXRhaWxzLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgb2YgTXlsZXggQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1ZTEVYIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCitOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvTXlsZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGY2OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApAQCAtMCwwICsxLDUgQEAKK1BsZWFzZSBzZWUgdGhlIGZpbGUgUkVBRE1FLkJ1c0xvZ2ljIGZvciBpbmZvcm1hdGlvbiBhYm91dCBMaW51eCBzdXBwb3J0IGZvcgorTXlsZXggKGZvcm1lcmx5IEJ1c0xvZ2ljKSBNdWx0aU1hc3RlciBhbmQgRmxhc2hQb2ludCBTQ1NJIEhvc3QgQWRhcHRlcnMuCisKK1RoZSBNeWxleCBEQUM5NjAgUENJIFJBSUQgQ29udHJvbGxlcnMgYXJlIG5vdyBzdXBwb3J0ZWQuICBQbGVhc2UgY29uc3VsdAoraHR0cDovL3d3dy5kYW5kZWxpb24uY29tL0xpbnV4LyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgREFDOTYwIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL05pbmphU0NTSS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxNzgwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0CkBAIC0wLDAgKzEsMTMwIEBACisKKyAgICAgICAgIFdvcmtCaVQgTmluamFTQ1NJLTMvMzJCaSBkcml2ZXIgZm9yIExpbnV4CisKKzEuIENvbW1lbnQKKyBUaGlzIGlzIFdvcmtiaXQgY29ycC4ncyhodHRwOi8vd3d3LndvcmtiaXQuY28uanAvKSBOaW5qYVNDU0ktMworKGh0dHA6Ly93d3cud29ya2JpdC5jby5qcC90cy96X25qM3IuaHRtbCkgYW5kIE5pbmphU0NTSS0zMkJpCisoaHR0cDovL3d3dy53b3JrYml0LmNvLmpwL3RzL3pfbmpzYzMyYmkuaHRtbCkgUENNQ0lBIGNhcmQgZHJpdmVyIG1vZHVsZQorZm9yIExpbnV4LgorCisyLiBNeSBMaW51eCBlbnZpcm9ubWVudAorTGludXgga2VybmVsOiAyLjQuNyAvIDIuMi4xOQorcGNtY2lhLWNzOiAgICAzLjEuMjcKK2djYzogICAgICAgICAgZ2NjLTIuOTUuNAorUEMgY2FyZDogICAgICBJLU8gZGF0YSBQQ1NDLUYgKE5pbmphU0NTSS0zKQorICAgICAgICAgICAgICBJLU8gZGF0YSBDQlNDLUlJIGluIDE2IGJpdCBtb2RlIChOaW5qYVNDU0ktMzJCaSkKK1NDU0kgZGV2aWNlOiAgSS1PIGRhdGEgQ0RQUy1QWDI0IChDRC1ST00gZHJpdmUpCisgICAgICAgICAgICAgIE1lZGlhIEludGVsbGlnZW50IE1NTy02NDBHVCAoT3B0aWNhbCBkaXNrIGRyaXZlKQorCiszLiBJbnN0YWxsCitbMV0gQ2hlY2sgeW91ciBQQyBjYXJkIGlzIHRydWUgIk5pbmphU0NTSS0zIiBjYXJkLgorICAgIElmIHlvdSBpbnN0YWxsZWQgcGNtY2lhLWNzIGFscmVhZHksIHBjbWNpYSByZXBvcnRzIHlvdXIgY2FyZCBhcyBVTktOT1dOCisgICAgY2FyZCwgYW5kIHdyaXRlIFsiV0JUIiwgIk5pbmphU0NTSS0zIiwgIlIxLjAiXSBvciBzb21lIG90aGVyIHN0cmluZyB0bworICAgIHlvdXIgY29uc29sZSBvciBsb2cgZmlsZS4KKyAgICBZb3UgY2FuIGFsc28gdXNlICJjYXJkY3RsIiBwcm9ncmFtICh0aGlzIHByb2dyYW0gaXMgaW4gcGNtY2lhLWNzIHNvdXJjZQorICAgIGNvZGUpIHRvIGdldCBtb3JlIGluZm8uCisKKyMgY2F0IC92YXIvbG9nL21lc3NnYWVzCisuLi4KK0phbiAgMiAwMzo0NTowNiBsaW5kYmVyZyBjYXJkbWdyWzc4XTogdW5zdXBwb3J0ZWQgY2FyZCBpbiBzb2NrZXQgMQorSmFuICAyIDAzOjQ1OjA2IGxpbmRiZXJnIGNhcmRtZ3JbNzhdOiAgIHByb2R1Y3QgaW5mbzogIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorLi4uCisjIGNhcmRjdGwgaWRlbnQKK1NvY2tldCAwOgorICBubyBwcm9kdWN0IGluZm8gYXZhaWxhYmxlCitTb2NrZXQgMToKKyAgcHJvZHVjdCBpbmZvOiAiSU8gREFUQSIsICJDQlNDMTYgICAgICAgIiwgIjEiCisKKworWzJdIEdldCBMaW51eCBrZXJuZWwgc291cmNlLCBhbmQgZXh0cmFjdCBpdCB0byAvdXNyL3NyYy4KKyAgICBCZWNhdXNlIE5pbmphU0NTSSBkcml2ZXIgcmVxdWllcnMgc29tZSBTQ1NJIGhlYWRlciBmaWxlcyBpbiBMaW51eCBrZXJuZWwKKyAgICBzb3VyY2UuCisgICAgSSByZWNvbWVuZCByZWJ1aWxkaW5nIHlvdXIga2VybmVsLiBUaGlzIGVsaW1pbmF0ZSBzb21lIHZlcnNpb25pbmcgcHJvYmxlbS4KKyQgY2QgL3Vzci9zcmMKKyQgdGFyIC16eHZmIGxpbnV4LXgueC54LnRhci5negorJCBjZCBsaW51eAorJCBtYWtlIGNvbmZpZworLi4uCisKK1szXSBJZiB5b3UgdXNlIHRoaXMgZHJpdmVyIHdpdGggS2VybmVsIDIuMiwgVW5wYWNrIHBjbWNpYS1jcyBpbiBzb21lIGRpcmVjdG9yeQorICAgIGFuZCBtYWtlICYgaW5zdGFsbC4gVGhpcyBkcml2ZXIgcmVxdWllcyBwY21jaWEtY3MgaGVhZGVyIGZpbGUuCiskIGNkIC91c3Ivc3JjCiskIHRhciB6eHZmIGNzLXBjbWNpYS1jcy0zLngueC50YXIuZ3oKKy4uLgorCitbNF0gRXh0cmFjdCB0aGlzIGRyaXZlcidzIGFyY2hpdmUgc29tZXdoZXJlLCBhbmQgZWRpdCBNYWtlZmlsZSwgdGhlbiBkbyBtYWtlLgorJCB0YXIgLXp4dmYgbnNwX2NzLXgueC50YXIuZ3oKKyQgY2QgbnNwX2NzLXgueAorJCBlbWFjcyBNYWtlZmlsZQorLi4uCiskIG1ha2UKKworWzVdIENvcHkgbnNwX2NzLm8gdG8gc3VpdGFibGUgcGxhc2UsIGxpa2UgL2xpYi9tb2R1bGVzLzxLZXJuZWwgdmVyc2lvbj4vcGNtY2lhLyAuCisKK1s2XSBBZGQgdGhlc2UgbGluZXMgdG8gL2V0Yy9wY21jaWEvY29uZmlnIC4KKyAgICBJZiB5b3UgeXNlIHBjbWNpYS1jcy0zLjEuOCBvciBsYXRlciwgd2UgY2FuIHVzZSAibnNwX2NzLmNvbmYiIGZpbGUuCisgICAgU28sIHlvdSBkb24ndCBuZWVkIHRvIGVkaXQgZmlsZS4gSnVzdCBjb3B5IHRvIC9ldGMvcGNtY2lhLyAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSAibnNwX2NzIgorICBjbGFzcyAic2NzaSIgbW9kdWxlICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMiCisgIHZlcnNpb24gIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorICBiaW5kICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSIKKyAgdmVyc2lvbiAiV09SS0JJVCIsICJVbHRyYU5pbmphLTE2IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKworIyBPRU0KK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIElPLURBVEEiCisgIHZlcnNpb24gIklPIERBVEEiLCAiQ0JTQzE2ICAgICAgICIsICIxIgorICBiaW5kICJuc3BfY3MiCisKKyMgT0VNCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtMSIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDAxIiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIEtNRS0yIgorICB2ZXJzaW9uICJLTUUgICAgIiwgIlNDU0ktQ0FSRC0wMDIiLCAiMSIKKyAgYmluZCAibnNwX2NzIgorY2FyZCAiV29ya0JpdCBOaW5qYVNDU0ktMzJCaSAoMTZiaXQpIC8gS01FLTMiCisgIHZlcnNpb24gIktNRSAgICAiLCAiU0NTSS1DQVJELTAwMyIsICIxIgorICBiaW5kICJuc3BfY3MiCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtNCIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDA0IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWzddIFN0YXJ0IChvciByZXN0YXJ0KSBwY21jaWEtY3MuCisjIC9ldGMvcmMuZC9yYy5wY21jaWEgc3RhcnQgICAgICAgIChCU0Qgc3R5bGUpCitvcgorIyAvZXRjL2luaXQuZC9wY21jaWEgc3RhcnQgICAgICAgICAoU1lTViBzdHlsZSkKKworCis0LiBIaXN0b3J5CitTZWUgUkVBRE1FLm5pbl9jcyAuCisKKzUuIENhdXRpb24KKyBJZiB5b3UgZWplY3QgY2FyZCB3aGVuIGRvaW5nIHNvbWUgb3BlcmF0aW9uIGZvciB5b3VyIFNDU0kgZGV2aWNlIG9yIHN1c3BlbmQKK3lvdXIgY29tcHV0ZXIsIHlvdSBlbmNvdW50IHNvbWUgKkJBRCogZXJyb3IgbGlrZSBkaXNrIGNyYXNoLgorIEl0IHdvcmtzIGdvb2Qgd2hlbiBJIHVzaW5nIHRoaXMgZHJpdmVyIHJpZ2h0IHdheS4gQnV0IEknbSBub3QgZ3VhcmFudGVlCit5b3VyIGRhdGEuIFBsZWFzZSBiYWNrdXAgeW91ciBkYXRhIHdoZW4geW91IHVzZSB0aGlzIGRyaXZlci4KKworNi4gS25vd24gQnVncworIEluIDIuNCBrZXJuZWwsIHlvdSBjYW4ndCB1c2UgNjQwTUIgT3B0aWNhbCBkaXNrLiBUaGlzIGVycm9yIGNvbWVzIGZyb20KK2hpZ2ggbGV2ZWwgU0NTSSBkcml2ZXIuCisKKzcuIFRlc3RpbmcKKyBQbGVhc2Ugc2VuZCBtZSBzb21lIHJlcG9ydHMoYnVnIHJlcG9ydHMgZXRjLi4pIG9mIHRoaXMgc29mdHdhcmUuCitXaGVuIHlvdSBzZW5kIHJlcG9ydCwgcGxlYXNlIHRlbGwgbWUgdGhlc2Ugb3IgbW9yZS4KKwljYXJkIG5hbWUKKwlrZXJuZWwgdmVyc2lvbgorCXlvdXIgU0NTSSBkZXZpY2UgbmFtZShoYXJkIGRyaXZlLCBDRC1ST00sIGV0Yy4uLikKKworOC4gQ29weXJpZ2h0CisgU2VlIEdQTC4KKworCisyMDAxLzA4LzA4IHlva290YUBuZXRsYWIuaXMudHN1a3ViYS5hYy5qcCA8WU9LT1RBIEhpcm9zaGk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dApAQCAtMCwwICsxLDE4MyBAQAorJElkOiBSRUFETUUuYWhhMTUyeCx2IDEuMiAxOTk5LzEyLzI1IDE1OjMyOjMwIGZpc2NoZXIgRXhwIGZpc2NoZXIgJAorQWRhcHRlYyBBSEEtMTUyMC8xNTIyIFNDU0kgZHJpdmVyIGZvciBMaW51eCAoYWhhMTUyeCkKKworQ29weXJpZ2h0IDE5OTMtMTk5OSBK/HJnZW4gRmlzY2hlciA8ZmlzY2hlckBub3JiaXQuZGU+CitUQzE1NTAgcGF0Y2hlcyBieSBMdXVrIHZhbiBEaWprIChsZHpAeHM0YWxsLm5sKQorCisKK0luIFJldmlzaW9uIDIgdGhlIGRyaXZlciB3YXMgbW9kaWZpZWQgYSBsb3QgKGVzcGVjaWFsbHkgdGhlCitib3R0b20taGFsZiBoYW5kbGVyIGNvbXBsZXRlKCkpLgorCitUaGUgZHJpdmVyIGlzIG11Y2ggY2xlYW5lciBub3csIGhhcyBzdXBwb3J0IGZvciB0aGUgbmV3CitlcnJvciBoYW5kbGluZyBjb2RlIGluIDIuMywgcHJvZHVjZWQgbGVzcyBjcHUgbG9hZCAobXVjaAorbGVzcyBwb2xsaW5nIGxvb3BzKSwgaGFzIHNsaWdodGx5IGhpZ2hlciB0aHJvdWdocHV0IChhdAorbGVhc3Qgb24gbXkgYW5jaWVudCB0ZXN0IGJveDsgYSBpNDg2LzMzTWh6LzIwTUIpLgorCisKK0NPTkZJR1VSQVRJT04gQVJHVU1FTlRTOgorCitJT1BPUlQgICAgICAgIGJhc2UgaW8gYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM0MC8weDE0MCkKK0lSUSAgICAgICAgICAgaW50ZXJydXB0IGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKDktMTI7IGRlZmF1bHQgMTEpCitTQ1NJX0lEICAgICAgIHNjc2kgaWQgb2YgY29udHJvbGxlciAgICAgICAgICAgICAgICAgICAgICgwLTc7IGRlZmF1bHQgNykKK1JFQ09OTkVDVCAgICAgYWxsb3cgdGFyZ2V0cyB0byBkaXNjb25uZWN0IGZyb20gdGhlIGJ1cyAgKDAvMTsgZGVmYXVsdCAxIFtvbl0pCitQQVJJVFkgICAgICAgIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcgICAgICAgICAgICAgICAgICAgICgwLzE7IGRlZmF1bHQgMSBbb25dKQorU1lOQ0hST05PVVMgICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzICAgICAgICAgICAgICAoMC8xOyBkZWZhdWx0IDEgW29uXSkKK0RFTEFZOiAgICAgICAgYnVzIHJlc2V0IGRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMTAwKQorRVhUX1RSQU5TOiAgICBlbmFibGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gICAgICAgICAgICAgICAoMC8xOiBkZWZhdWx0IDAgW29mZl0pCisgICAgICAgICAgICAgIChzZWUgTk9URVMpCisKK0NPTVBJTEUgVElNRSBDT05GSUdVUkFUSU9OIChnbyBpbnRvIEFIQTE1MlggaW4gZHJpdmVycy9zY3NpL01ha2VmaWxlKToKKworLURBVVRPQ09ORgorIHVzZSBjb25maWd1cmF0aW9uIHRoZSBjb250cm9sbGVyIHJlcG9ydHMgKEFIQS0xNTJ4IG9ubHkpCisKKy1EU0tJUF9CSU9TVEVTVAorIERvbid0IHRlc3QgZm9yIEJJT1Mgc2lnbmF0dXJlIChBSEEtMTUxMCBvciBkaXNhYmxlZCBCSU9TKQorCistRFNFVFVQMD0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBmaXJzdCBjb250cm9sbGVyIAorCistRFNFVFVQMT0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBzZWNvbmQgY29udHJvbGxlcgorCistREFIQTE1MlhfREVCVUcKKyBlbmFibGUgZGVidWdnaW5nIG91dHB1dAorCistREFIQTE1MlhfU1RBVAorIGVuYWJsZSBzb21lIHN0YXRpc3RpY3MKKworCitMSUxPIENPTU1BTkQgTElORSBPUFRJT05TOgorCithaGExNTJ4PTxJT1BPUlQ+Wyw8SVJRPlssPFNDU0ktSUQ+Wyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT4gWyw8RVhUX1RSQU5TXV1dXV1dXQorCisgVGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgYSBjb21tYW5kIGxpbmUuCisgV2hlbiB5b3UgZG8gdGhpcywgdGhlIEJJT1MgdGVzdCBpcyBza2lwcGVkLiBFbnRlcmVkIHZhbHVlcyBoYXZlIHRvIGJlCisgdmFsaWQgKGtub3duKS4gIERvbid0IHVzZSB2YWx1ZXMgdGhhdCBhcmVuJ3Qgc3VwcG9ydGVkIHVuZGVyIG5vcm1hbAorIG9wZXJhdGlvbi4gIElmIHlvdSB0aGluayB0aGF0IHlvdSBuZWVkIG90aGVyIHZhbHVlczogY29udGFjdCBtZS4KKyBGb3IgdHdvIGNvbnRyb2xsZXJzIHVzZSB0aGUgYWhhMTUyeCBzdGF0ZW1lbnQgdHdpY2UuCisKKworU1lNQk9MUyBGT1IgTU9EVUxFIENPTkZJR1VSQVRJT046CisKK0Nob29zZSBmcm9tIDIgYWx0ZXJuYXRpdmVzOgorCisxLiBzcGVjaWZ5IGV2ZXJ5dGhpbmcgKG9sZCkKKworYWhhMTUyeD1JT1BPUlQsSVJRLFNDU0lfSUQsUkVDT05ORUNULFBBUklUWSxTWU5DSFJPTk9VUyxERUxBWSxFWFRfVFJBTlMKKyAgY29uZmlndXJhdGlvbiBvdmVycmlkZSBmb3IgZmlyc3QgY29udHJvbGxlcgorCisKK2FoYTE1MngxPUlPUE9SVCxJUlEsU0NTSV9JRCxSRUNPTk5FQ1QsUEFSSVRZLFNZTkNIUk9OT1VTLERFTEFZLEVYVF9UUkFOUworICBjb25maWd1cmF0aW9uIG92ZXJyaWRlIGZvciBzZWNvbmQgY29udHJvbGxlcgorCisyLiBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbmVlZCB0byAoaXJxIG9yIGlvIGlzIHJlcXVpcmVkOyBuZXcpCisKK2lvPUlPUE9SVDBbLElPUE9SVDFdCisgIElPUE9SVCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK2lycT1JUlEwWyxJUlExXQorICBJUlEgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzY3NpaWQ9U0NTSUlEMFssU0NTSUlEMV0KKyAgU0NTSUlEIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworcmVjb25uZWN0PVJFQ09OTkVDVDBbLFJFQ09OTkVDVDFdCisgIGFsbG93IHRhcmdldHMgdG8gZGlzY29ubmVjdCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK3Bhcml0eT1QQVIwW1BBUjFdCisgIHVzZSBwYXJpdHkgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzeW5jPVNZTkNIUk9OT1VTMFssU1lOQ0hST05PVVMxXQorICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZGVsYXk9REVMQVkwWyxERUxBWTFdCisgIHJlc2V0IERFTEFZIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZXh0dHJhbnM9RVhUVFJBTlMwWyxFWFRUUkFOUzFdCisgIGVuYWJsZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKKworSWYgeW91IHVzZSBib3RoIGFsdGVybmF0aXZlcyB0aGUgZmlyc3Qgd2lsbCBiZSB0YWtlbi4KKworCitOT1RFUyBPTiBFWFRfVFJBTlM6IAorCitTQ1NJIHVzZXMgYmxvY2sgbnVtYmVycyB0byBhZGRyZXNzIGJsb2Nrcy9zZWN0b3JzIG9uIGEgZGV2aWNlLgorVGhlIEJJT1MgdXNlcyBhIGN5bGluZGVyL2hlYWQvc2VjdG9yIGFkZHJlc3Npbmcgc2NoZW1lIChDL0gvUykKK3NjaGVtZSBpbnN0ZWFkLiAgRE9TIGV4cGVjdHMgYSBCSU9TIG9yIGRyaXZlciB0aGF0IHVuZGVyc3RhbmRzIHRoaXMKK0MvSC9TIGFkZHJlc3NpbmcuCisKK1RoZSBudW1iZXIgb2YgY3lsaW5kZXJzL2hlYWRzL3NlY3RvcnMgaXMgY2FsbGVkIGdlb21ldHJ5IGFuZCBpcyByZXF1aXJlZAorYXMgYmFzZSBmb3IgcmVxdWVzdHMgaW4gQy9IL1MgYWRkcmVzc2luZy4gIFNDU0kgb25seSBrbm93cyBhYm91dCB0aGUKK3RvdGFsIGNhcGFjaXR5IG9mIGRpc2tzIGluIGJsb2NrcyAoc2VjdG9ycykuCisKK1RoZXJlZm9yZSB0aGUgU0NTSSBCSU9TL0RPUyBkcml2ZXIgaGFzIHRvIGNhbGN1bGF0ZSBhIGxvZ2ljYWwvdmlydHVhbAorZ2VvbWV0cnkganVzdCB0byBiZSBhYmxlIHRvIHN1cHBvcnQgdGhhdCBhZGRyZXNzaW5nIHNjaGVtZS4gIFRoZSBnZW9tZXRyeQorcmV0dXJuZWQgYnkgdGhlIFNDU0kgQklPUyBpcyBhIHB1cmUgY2FsY3VsYXRpb24gYW5kIGhhcyBub3RoaW5nIHRvCitkbyB3aXRoIHRoZSByZWFsL3BoeXNpY2FsIGdlb21ldHJ5IG9mIHRoZSBkaXNrICh3aGljaCBpcyB1c3VhbGx5CitpcnJlbGV2YW50IGFueXdheSkuCisKK0Jhc2ljYWxseSB0aGlzIGhhcyBubyBpbXBhY3QgYXQgYWxsIG9uIExpbnV4LCBiZWNhdXNlIGl0IGFsc28gdXNlcyBibG9jaworaW5zdGVhZCBvZiBDL0gvUyBhZGRyZXNzaW5nLiAgVW5mb3J0dW5hdGVseSBDL0gvUyBhZGRyZXNzaW5nIGlzIGFsc28gdXNlZAoraW4gdGhlIHBhcnRpdGlvbiB0YWJsZSBhbmQgdGhlcmVmb3JlIGV2ZXJ5IG9wZXJhdGluZyBzeXN0ZW0gaGFzIHRvIGtub3cKK3RoZSByaWdodCBnZW9tZXRyeSB0byBiZSBhYmxlIHRvIGludGVycHJldCBpdC4KKworTW9yZW92ZXIgdGhlcmUgYXJlIGNlcnRhaW4gbGltaXRhdGlvbnMgdG8gdGhlIEMvSC9TIGFkZHJlc3Npbmcgc2NoZW1lLAorbmFtZWx5IHRoZSBhZGRyZXNzIHNwYWNlIGlzIGxpbWl0ZWQgdG8gdXB0byAyNTUgaGVhZHMsIHVwdG8gNjMgc2VjdG9ycworYW5kIGEgbWF4aW11bSBvZiAxMDIzIGN5bGluZGVycy4KKworVGhlIEFIQS0xNTIyIEJJT1MgY2FsY3VsYXRlcyB0aGUgZ2VvbWV0cnkgYnkgZml4aW5nIHRoZSBudW1iZXIgb2YgaGVhZHMKK3RvIDY0LCB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgdG8gMzIgYW5kIGJ5IGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YKK2N5bGluZGVycyBieSBkaXZpZGluZyB0aGUgY2FwYWNpdHkgcmVwb3J0ZWQgYnkgdGhlIGRpc2sgYnkgNjQqMzIgKDEgTUIpLgorVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uLgorCitXaXRoIHJlc3BlY3QgdG8gdGhlIGxpbWl0IG9mIDEwMjMgY3lsaW5kZXJzIHVzaW5nIEMvSC9TIHlvdSBjYW4gb25seQorYWRkcmVzcyB0aGUgZmlyc3QgR0Igb2YgeW91ciBkaXNrIGluIHRoZSBwYXJ0aXRpb24gdGFibGUuICBUaGVyZWZvcmUKK0JJT1NlcyBvZiBzb21lIG5ld2VyIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHRoZSBBSUMtNjI2MC82MzYwIHN1cHBvcnQKK2V4dGVuZGVkIHRyYW5zbGF0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBCSU9TIHVzZXMgMjU1IGZvciBoZWFkcywKKzYzIGZvciBzZWN0b3JzIGFuZCB0aGVuIGRpdmlkZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBkaXNrIGJ5IDI1NSo2MworKGFib3V0IDggTUIpLCBhcyBzb29uIGl0IHNlZXMgYSBkaXNrIGdyZWF0ZXIgdGhhbiAxIEdCLiAgVGhhdCByZXN1bHRzCitpbiBhIG1heGltdW0gb2YgYWJvdXQgOCBHQiBhZGRyZXNzYWJsZSBkaXNrc3BhY2UgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorKGJ1dCB0aGVyZSBhcmUgYWxyZWFkeSBiaWdnZXIgZGlza3Mgb3V0IHRoZXJlIHRvZGF5KS4KKworVG8gbWFrZSBpdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQgdGhlIHRyYW5zbGF0aW9uIG1vZGUgbWlnaHQvbWlnaHQKK25vdCBiZSBjb25maWd1cmFibGUgaW4gY2VydGFpbiBCSU9TIHNldHVwcy4KKworVGhpcyBkcml2ZXIgZG9lcyBzb21lIG1vcmUgb3IgbGVzcyBmYWlsc2FmZSBndWVzc2luZyB0byBnZXQgdGhlCitnZW9tZXRyeSByaWdodCBpbiBtb3N0IGNhc2VzOgorCistIGZvciBkaXNrczwxR0I6IHVzZSBkZWZhdWx0IHRyYW5zbGF0aW9uIChDLzMyLzY0KQorCistIGZvciBkaXNrcz4xR0I6CisgIC0gdGFrZSBjdXJyZW50IGdlb21ldHJ5IGZyb20gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICh1c2luZyBzY3NpY2FtX2Jpb3NfcGFyYW0gYW5kIGFjY2VwdCBvbmx5IGB2YWxpZCcgZ2VvbWV0cmllcywKKyAgICBpZS4gZWl0aGVyIChDLzMyLzY0KSBvciAoQy82My8yNTUpKS4gIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHRyYW5zbGF0aW9uCisgICAgZXZlbiBpZiBpdCdzIG5vdCBlbmFibGVkIGluIHRoZSBkcml2ZXIuCisKKyAgLSBpZiB0aGF0IGZhaWxzLCB0YWtlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIGlmIGVuYWJsZWQgYnkgb3ZlcnJpZGUsCisgICAga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXIsIG90aGVyd2lzZSB0YWtlIGRlZmF1bHQgdHJhbnNsYXRpb24gYW5kCisgICAgYXNrIHRoZSB1c2VyIGZvciB2ZXJpZmljYXRpb24uICBUaGlzIG1pZ2h0IG9uIG5vdCB5ZXQgcGFydGl0aW9uZWQKKyAgICBkaXNrcy4KKworCitSRUZFUkVOQ0VTIFVTRUQ6CisKKyAiQUlDLTYyNjAgU0NTSSBDaGlwIFNwZWNpZmljYXRpb24iLCBBZGFwdGVjIENvcnBvcmF0aW9uLgorCisgIlNDU0kgQ09NUFVURVIgU1lTVEVNIElOVEVSRkFDRSAtIDIgKFNDU0ktMikiLCBYM1Q5LjIvODYtMTA5IHJldi4gMTBoCisKKyAiV3JpdGluZyBhIFNDU0kgZGV2aWNlIGRyaXZlciBmb3IgTGludXgiLCBSaWsgRmFpdGggKGZhaXRoQGNzLnVuYy5lZHUpCisKKyAiS2VybmVsIEhhY2tlcidzIEd1aWRlIiwgTWljaGFlbCBLLiBKb2huc29uIChqb2huc29ubUBzdW5zaXRlLnVuYy5lZHUpCisKKyAiQWRhcHRlYyAxNTIwLzE1MjIgVXNlcidzIEd1aWRlIiwgQWRhcHRlYyBDb3Jwb3JhdGlvbi4KKworIE1pY2hhZWwgSy4gSm9obnNvbiAoam9obnNvbm1Ac3Vuc2l0ZS51bmMuZWR1KQorCisgRHJldyBFY2toYXJkdCAoZHJld0Bjcy5jb2xvcmFkby5lZHUpCisKKyBFcmljIFlvdW5nZGFsZSAoZXJpY0BhbmRhbnRlLm9yZykgCisKKyBzcGVjaWFsIHRoYW5rcyB0byBFcmljIFlvdW5nZGFsZSBmb3IgdGhlIGZyZWUoISkgc3VwcGx5aW5nIHRoZQorIGRvY3VtZW50YXRpb24gb24gdGhlIGNoaXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlZWY3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dApAQCAtMCwwICsxLDUxNiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgICAgICAgICAgQWRhcHRlYyBVbHRyYTMyMCBGYW1pbHkgTWFuYWdlciBTZXQgdjEuMy4xMSAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQorPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFETUUgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgID0KKz0gICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBPcGVyYXRpbmcgU3lzdGVtICAgICAgICAgICAgICAgICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGlzIGZpbGU6CisKKyAgMS4gU3VwcG9ydGVkIEhhcmR3YXJlCisgIDIuIFZlcnNpb24gSGlzdG9yeQorICAzLiBDb21tYW5kIExpbmUgT3B0aW9ucworICA0LiBBZGRpdGlvbmFsIE5vdGVzCisgIDUuIENvbnRhY3RpbmcgQWRhcHRlYworCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyAKKyAgIGRyaXZlciBzZXQuIAorCisgICBVbHRyYTMyMCBBU0lDICAgICAgICAgICAgICBEZXNjcmlwdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUlDLTc5MDFBICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDFCICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisgICBBSUMtNzkwMkE0ICAgICAgICAgICAgICAgICBEdWFsIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDJCICAgICAgICAgICAgICAgICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisKKyAgIFVsdHJhMzIwIEFkYXB0ZXJzICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNJQworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwICAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgNzkwMkE0Lzc5MDJCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbikKKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwQSAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgICAgNzkwMkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAob25lIGV4dGVybmFsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluLCB0d28gaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKSBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFJQy03OTAyQiBBU0lDCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMCAgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMEEgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMExQICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgTG93IFByb2ZpbGUgICAgICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktWCAxMzNNSHogdG8gVWx0cmEzMjAgU0NTSSBDYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT25lIGV4dGVybmFsIFZIREMsIG9uZSBpbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMjkzMjBBTFAgU2luZ2xlIENoYW5uZWwgNjQtYml0IExvdyBQcm9maWxlICAgICAgICA3OTAxQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJLVggMTMzTUh6IHRvIFVsdHJhMzIwIFNDU0kgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9uZSBleHRlcm5hbCBWSERDLCBvbmUgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbikKKzIuIFZlcnNpb24gSGlzdG9yeQorCisgICAxLjMuMTEgKEp1bHkgMTEsIDIwMDMpCisgICAgICAgIC0gRml4IHNldmVyYWwgZGVhZGxvY2sgaXNzdWVzLgorICAgICAgICAtIEFkZCAyOTMyMEFMUCBhbmQgMzkzMjBCIElkJ3MuCisKKyAgIDEuMy4xMCAoSnVuZSAzcmQsIDIwMDMpCisgICAgICAgIC0gQWxpZ24gdGhlIFNDQl9UQUcgZmllbGQgb24gYSAxNmJ5dGUgYm91bmRhcnkuICBUaGlzIGF2b2lkcworICAgICAgICAgIFNDQiBjb3JydXB0aW9uIG9uIHNvbWUgUENJLTMzIGJ1c3Nlcy4KKyAgICAgICAgLSBDb3JyZWN0IG5vbi16ZXJvIGx1bnMgb24gUmV2IEIuIGhhcmR3YXJlLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gSW1wbGVtZW50IGNvbnRyb2xsZXIgc3VzdXBlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgLSBDbGVhciBQQ0kgZXJyb3Igc3RhdGUgZHVyaW5nIGRyaXZlciBhdHRhY2ggc28gdGhhdCB3ZQorICAgICAgICAgIGRvbid0IGRpc2FibGUgbWVtb3J5IG1hcHBlZCBJL08gZHVlIHRvIGEgc3RyYXkgd3JpdGUKKyAgICAgICAgICBieSBzb21lIG90aGVyIGRyaXZlciBwcm9iZSB0aGF0IG9jY3VycmVkIGJlZm9yZSB3ZQorICAgICAgICAgIGNsYWltZWQgdGhlIGNvbnRyb2xsZXIuCisKKyAgIDEuMy45IChNYXkgMjJuZCwgMjAwMykKKyAgICAgICAgLSBGaXggY29tcGlsZXIgZXJyb3JzLgorICAgICAgICAtIFJlbW92ZSBTL0cgc3BsaXR0aW5nIGZvciBzZWdtZW50cyB0aGF0IGNyb3NzIGEgNEdCIGJvdW5kYXJ5LgorICAgICAgICAgIFRoaXMgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGFwcGVuIGluIExpbnV4LgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciBzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoKSBmb3VuZCBpbgorICAgICAgICAgIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQWRkIDc5MDFCIHN1cHBvcnQuCisgICAgICAgIC0gU2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIHBhY2t0aXplZCBsdW4gUmV2IEEgd29ya2Fyb3VuZC4KKyAgICAgICAgLSBDb3JyZWN0IGFuZCBzaW1wbGlmeSBoYW5kbGluZyBvZiB0aGUgaWdub3JlIHdpZGUgcmVzaWR1ZQorICAgICAgICAgIG1lc3NhZ2UuICBUaGUgcHJldmlvdXMgY29kZSB3b3VsZCBmYWlsIHRvIHJlcG9ydCBhIHJlc2lkdWFsCisgICAgICAgICAgaWYgdGhlIHRyYW5zYWN0aW9uIGRhdGEgbGVuZ3RoIHdhcyBldmVuIGFuZCB3ZSByZWNlaXZlZAorICAgICAgICAgIGFuIElXUiBtZXNzYWdlLgorCisgICAxLjMuOCAoQXByaWwgMjl0aCwgMjAwMykKKyAgICAgICAgLSBGaXggdHlwZXMgYWNjZXNzZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGNvZGUuCisgICAgICAgIC0gUGVyZm9ybSBhIGZldyBmaXJtd2FyZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAtIEZpeCAiVW5leHBlY3RlZCBQS1QgYnVzZnJlZSIgZXJyb3JzLgorICAgICAgICAtIFVzZSBhIHNlcXVlbmNlciBpbnRlcnJ1cHQgdG8gbm90aWZ5IHRoZSBob3N0IG9mCisgICAgICAgICAgY29tbWFuZHMgd2l0aCBiYWQgc3RhdHVzLiAgV2UgZGVmZXIgdGhlIG5vdGlmaWNhdGlvbgorICAgICAgICAgIHVudGlsIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBzZWxlY3Rpb25zIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIGhvc3QgaXMgaW50ZXJydXB0ZWQgZm9yIGFzIHNob3J0IGEgdGltZSBhcworICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAtIFJlbW92ZSBwcmUtMi4yLlggc3VwcG9ydC4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgbmV3IDIuNS5YIGludGVycnVwdCBBUEkuCisgICAgICAgIC0gQ29ycmVjdCBiaWctZW5kaWFuIGFyY2hpdGVjdHVyZSBzdXBwb3J0LgorCisgICAxLjMuNyAoQXByaWwgMTZ0aCwgMjAwMykKKyAgICAgICAgLSBVc2UgZGVsX3RpbWVyX3N5bmMoKSB0byBlbnN1cmUgdGhhdCBubyB0aW1lb3V0cworICAgICAgICAgIGFyZSBwZW5kaW5nIGR1cmluZyBjb250cm9sbGVyIHNodXRkb3duLgorICAgICAgICAtIEZvciBwcmUtMi41Llgga2VybmVscywgY2FyZWZ1bGx5IGFkanVzdCBvdXIgc2VnbWVudAorICAgICAgICAgIGxpc3Qgc2l6ZSB0byBhdm9pZCBTQ1NJIG1hbGxvYyBwb29sIGZyYWdtZW50YXRpb24uCisgICAgICAgIC0gQ2xlYW51cCBjaGFubmVsIGRpc3BsYXkgaW4gb3VyIC9wcm9jIG91dHB1dC4KKyAgICAgICAgLSBXb3JrYXJvdW5kIGR1cGxpY2F0ZSBkZXZpY2UgZW50cmllcyBpbiB0aGUgbWlkLWxheWVyCisgICAgICAgICAgZGV2bGljZSBsaXN0IGR1cmluZyBhZGQtc2luZ2xlLWRldmljZS4KKworICAgMS4zLjYgKE1hcmNoIDI4dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIGRvdWJsZSBmcmVlIGluIHRoZSBEb21haW4gVmFsaWRhdGlvbiBjb2RlLgorICAgICAgICAtIENvcnJlY3QgYSByZWZlcmVuY2UgdG8gZnJlZSdlZCBtZW1vcnkgZHVyaW5nIGNvbnRyb2xsZXIKKyAgICAgICAgICBzaHV0ZG93bi4KKyAgICAgICAgLSBSZXNldCB0aGUgYnVzIG9uIGFuIFNFLT5MVkQgY2hhbmdlLiAgVGhpcyBpcyByZXF1aXJlZAorICAgICAgICAgIHRvIHJlc2V0IG91ciB0cmFuc2NpZXZlcnMuCisKKyAgIDEuMy41IChNYXJjaCAyNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyByZWdpc3RlciB3aW5kb3cgbW9kZSBidWdzLgorICAgICAgICAtIEluY2x1ZGUgcmVhZCBzdHJlYW1pbmcgaW4gdGhlIFBQUiBmbGFncyB3ZSBkaXNwbGF5IGluCisgICAgICAgICAgZGlhZ25vc3RpY3MgYXMgd2VsbCBhcyAvcHJvYy4KKyAgICAgICAgLSBBZGQgUENJIGhvdCBwbHVnIHN1cHBvcnQgZm9yIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQ29ycmVjdCBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiB2YWx1ZSBmb3IgUmV2QSBoYXJkd2FyZS4KKyAgICAgICAgLSBGaXggRG9tYWluIFZhbGlkYXRpb24gdGhyZWFkIHNodXRkb3duLgorICAgICAgICAtIEFkZCBhIGZpcm13YXJlIHdvcmthcm91bmQgdG8gbWFrZSB0aGUgTEVEIGJsaW5rCisgICAgICAgICAgYnJpZ2h0ZXIgZHVyaW5nIHBhY2tldGl6ZWQgb3BlcmF0aW9ucyBvbiB0aGUgSDJBNC4KKyAgICAgICAgLSBDb3JyZWN0IC9wcm9jIGRpc3BsYXkgb2YgdXNlciByZWFkIHN0cmVhbWluZyBzZXR0aW5ncy4KKyAgICAgICAgLSBTaW1wbGlmeSBkcml2ZXIgbG9ja2luZyBieSByZWxlYXNpbmcgdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIHVwb24gZHJpdmVyIGVudHJ5IGZyb20gdGhlIG1pZC1sYXllci4KKyAgICAgICAgLSBDbGVhbnVwIGNvbW1hbmQgbGluZSBwYXJzaW5nIGFuZCBtb3ZlIG11Y2ggb2YgdGhpcyBjb2RlCisgICAgICAgICAgdG8gYWljbGliLgorCisgICAxLjMuNCAoRmVicnVhcnkgMjh0aCwgMjAwMykKKyAgICAgICAgLSBDb3JyZWN0IGEgcmFjZSBjb25kaXRpb24gaW4gb3VyIGVycm9yIHJlY292ZXJ5IGhhbmRsZXIuCisgICAgICAgIC0gQWxsb3cgVGVzdCBVbml0IFJlYWR5IGNvbW1hbmRzIHRvIHRha2UgYSBmdWxsIDUgc2Vjb25kcworICAgICAgICAgIGR1cmluZyBEb21haW4gVmFsaWRhdGlvbi4KKworICAgMS4zLjIgKEZlYnJ1YXJ5IDE5dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIFJldiBCLiByZWdyZXNzaW9uIGR1ZSB0byB0aGUgR0VNMzE4CisgICAgICAgICAgY29tcGF0aWJpbGl0eSBmaXggaW5jbHVkZWQgaW4gMS4zLjEuCisgICAgICAgICAgCisgICAxLjMuMSAoRmVicnVhcnkgMTF0aCwgMjAwMykKKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDM5MzIwQS4KKyAgICAgICAgLSBJbXByb3ZlIHJlY292ZXJ5IGZvciBjZXJ0YWluIFBDSS1YIGVycm9ycy4KKyAgICAgICAgLSBGaXggaGFuZGxpbmcgb2YgTFEvREFUQS9MUS9EQVRBIGZvciB0aGUKKyAgICAgICAgICBzYW1lIHdyaXRlIHRyYW5zYWN0aW9uIHRoYXQgY2FuIG9jY3VyIHdpdGhvdXQKKyAgICAgICAgICBpbnRlcnZlaW5pbmcgdHJhaW5pbmcuCisgICAgICAgIC0gQ29ycmVjdCBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHRoZSBHRU0zMTgKKyAgICAgICAgICBlbmNsb3N1cmUgc2VydmljZXMgZGV2aWNlLgorICAgICAgICAtIENvcnJlY3QgZGF0YSBjb3JydXB0aW9uIGlzc3VlIHRoYXQgb2NjdXJyZWQgdW5kZXIKKyAgICAgICAgICBoaWdoIHRhZyBkZXB0aCB3cml0ZSBsb2Fkcy4KKyAgICAgICAgLSBBZGFwdCB0byBhIGNoYW5nZSBpbiB0aGUgMi41LlggZGFlbW9uaXplKCkgQVBJLgorICAgICAgICAtIENvcnJlY3QgYSAiTWlzc2luZyBjYXNlIGluIGFoZF9oYW5kbGVfc2NzaWludCIgcGFuaWMuCisKKyAgIDEuMy4wIChKYW51YXJ5IDIxc3QsIDIwMDMpCisgICAgICAgIC0gRnVsbCByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIGFsbCBVMzIwIHByb2R1Y3RzIGNvbXBsZXRlZC4KKyAgICAgICAgLSBBZGRlZCBhYm9ydCBhbmQgdGFyZ2V0L2x1biByZXNldCBlcnJvciByZWNvdmVyeSBoYW5kbGVyIGFuZAorICAgICAgICAgIGludGVycnVwdCBjb2FsZXNzaW5nLgorCisgICAxLjIuMCAoTm92ZW1iZXIgMTR0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBEb21haW4gVmFsaWRhdGlvbgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgSGV3bGV0dC1QYWNrYXJkIHZlcnNpb24gb2YgdGhlIDM5MzIwRAorICAgICAgICAgIGFuZCBBSUMtNzkwMiBhZGFwdGVycy4KKyAgICAgICAgU3VwcG9ydCBmb3IgcHJldmlvdXMgYWRhcHRlcnMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZCBhbmQgc2hvdWxkCisgICAgICAgIG9ubHkgYmUgdXNlZCBhdCB0aGUgY3VzdG9tZXIncyBvd24gcmlzay4KKworICAgMS4xLjEgKFNlcHRlbWJlciAyNHRoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBMaW51eCAyLjUuWCBrZXJuZWwgc2VyaWVzCisKKyAgIDEuMS4wIChTZXB0ZW1iZXIgMTd0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBmb3VyIGFkZGl0aW9uYWwgU0NTSSBwcm9kdWN0czoKKyAgICAgICAgICBBU0MtMzkzMjAsIEFTQy0yOTMyMCwgQVNDLTI5MzIwTFAsIEFJQy03OTAxLgorCisgICAxLjAuMCAoTWF5IDMwdGgsIDIwMDIpCisgICAgICAgIC0gSW5pdGlhbCBkcml2ZXIgcmVsZWFzZS4KKworICAgMi4xLiBTb2Z0d2FyZS9IYXJkd2FyZSBGZWF0dXJlcworICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBTUEktNCAiVWx0cmEzMjAiIHN0YW5kYXJkOgorICAgICAgICAgIC0gMzIwTUIvcyB0cmFuc2ZlciByYXRlcworICAgICAgICAgIC0gUGFja2V0aXplZCBTQ1NJIFByb3RvY29sIGF0IDE2ME1CL3MgYW5kIDMyME1CL3MKKyAgICAgICAgICAtIFF1aWNrIEFyYml0cmF0aW9uIFNlbGVjdGlvbiAoUUFTKQorICAgICAgICAgIC0gUmV0YWluZWQgVHJhaW5pbmcgSW5mb3JtYXRpb24gKFJldiBCLiBBU0lDIG9ubHkpCisgICAgICAgIC0gSW50ZXJydXB0IENvYWxlc3NpbmcKKyAgICAgICAgLSBJbml0aWF0b3IgTW9kZSAodGFyZ2V0IG1vZGUgbm90IGN1cnJlbnRseSAKKyAgICAgICAgICBzdXBwb3J0ZWQpCisgICAgICAgIC0gU3VwcG9ydCBmb3IgdGhlIFBDSS1YIHN0YW5kYXJkIHVwIHRvIDEzM01IegorICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBQQ0kgdjIuMiBzdGFuZGFyZAorCS0gRG9tYWluIFZhbGlkYXRpb24KKworICAgMi4yLiBPcGVyYXRpbmcgU3lzdGVtIFN1cHBvcnQ6CisgICAgICAgIC0gUmVkaGF0IExpbnV4IDcuMiwgNy4zLCA4LjAsIEFkdmFuY2VkIFNlcnZlciAyLjEKKyAgICAgICAgLSBTdVNFIExpbnV4IDcuMywgOC4wLCA4LjEsIEVudGVycHJpc2UgU2VydmVyIDcKKyAgICAgICAgLSBvbmx5IEludGVsIGFuZCBBTUQgeDg2IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUKKyAgICAgICAgLSA+NEdCIG1lbW9yeSBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQuCisKKyAgICAgUmVmZXIgdG8gdGhlIFVzZXIncyBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisKKzMuIENvbW1hbmQgTGluZSBPcHRpb25zCisKKyAgICAgICAgV0FSTklORzogQUxURVJJTkcgT1IgQURESU5HIFRIRVNFIERSSVZFUiBQQVJBTUVURVJTCisgICAgICAgICAgICAgICAgIElOQ09SUkVDVExZIENBTiBSRU5ERVIgWU9VUiBTWVNURU0gSU5PUEVSQUJMRS4KKyAgICAgICAgICAgICAgICAgVVNFIFRIRU0gV0lUSCBDQVVUSU9OLiAKKworICAgRWRpdCB0aGUgZmlsZSAibW9kcHJvYmUuY29uZiIgaW4gdGhlIGRpcmVjdG9yeSAvZXRjIGFuZCBhZGQvZWRpdCBhCisgICBsaW5lIGNvbnRhaW5pbmcgJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PVtjb21tYW5kWyxjb21tYW5kLi4uXV0nIHdoZXJlCisgICAnY29tbWFuZCcgaXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdmVyYm9zZQorICAgICAgICAgIERlZmluaXRpb246IGVuYWJsZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBvcGVyYXRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZGVidWc6W3ZhbHVlXQorICAgICAgICAgIERlZmluaXRpb246IEVuYWJsZXMgdmFyaW91cyBsZXZlbHMgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgVGhlIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIGRlYnVnZ2luZyBtYXNrIGNhbgorICAgICAgICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIGRyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgIHRoZSAiRGVidWciIGhlYWRpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogMHgwMDAwID0gbm8gZGVidWdnaW5nLCAweGZmZmYgPSBmdWxsIGRlYnVnZ2luZworICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aAorICAgICAgICAgIERlZmluaXRpb246IEdsb2JhbCB0YWcgZGVwdGggZm9yIGFsbCB0YXJnZXRzIG9uIGFsbCBidXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCB0YWcgZGVwdGggd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgc2VsZWN0aXZlbHkgb3ZlcnJpZGRlbiB2aSB0aGUgdGFnX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHRhZ19pbmZvOnt7dmFsdWVbLHZhbHVlLi4uXX1bLHt2YWx1ZVssdmFsdWUuLi5dfS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IHRoZSBwZXItdGFyZ2V0IHRhZ2dlZCBxdWV1ZSBkZXB0aCBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgcGVyIGNvbnRyb2xsZXIgYmFzaXMuICBCb3RoIGNvbnRyb2xsZXJzIGFuZCB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCisgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAxNiBmb3IgdGFyZ2V0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDY0IGZvciB0YXJnZXQgMworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgOCBmb3IgdGFyZ2V0cyA0IGFuZCA1CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZlcyB0YXJnZXQgNiBhdCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMSwyLDctMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCBkZXB0aC4KKworICAgICAgICAgICAgICAgICAgICAgIHRhZ19pbmZvOnt7fSx7MzIsLDMyfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMCBhbmQgMgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJkX3N0cm06IHtyZF9zdHJtX2JpdG1hc2tbLHJkX3N0cm1fYml0bWFzay4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogRW5hYmxlIHJlYWQgc3RyZWFtaW5nIG9uIGEgcGVyIHRhcmdldCBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgcmRfc3RybV9iaXRtYXNrIGlzIGEgMTYgYml0IGhleCB2YWx1ZSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggYml0IHJlcHJlc2VudHMgYSB0YXJnZXQuICBTZXR0aW5nIHRoZSB0YXJnZXQncworICAgICAgICAgICAgICAgICAgICAgIGJpdCB0byAnMScgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC4gIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwNDF9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAwIGFuZCA2LgorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAxLTUsNy0xNS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwMjMsLDB4RkZGRn0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDEsMiwgYW5kIDUuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDMsNCw2LTE1LgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAyCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgcmVhZCBzdHJlYW1pbmcgZm9yIGFsbCB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCAtIDB4ZmZmZgorICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBkdjoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBEViBTZXJpYWwgRUVQUk9NIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAqKiogVGhlIGZvbGxvd2luZyB0aHJlZSBvcHRpb25zIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgKioqCisgICAqKiogdGhlIGRpcmVjdGlvbiBvZiBhIHRlY2huaWNhbCBzdXBwb3J0IHJlcHJlc2VudGF0aXZlLiAgKioqCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogcHJlY29tcDoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IElPIENlbGwgcHJlY29tcGVuc2F0aW9uIHZhbHVlIG9uIGEgcGVyLWNvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IHByZWNvbXA6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogcHJlY29tcDp7MSwsN30KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDIgc2V0IHByZWNvbXBlbnNhdGlvbiB0byA4LgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgLSA3CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2xld3JhdGU6IHt2YWx1ZVssdmFsdWUuLi5dfQorICAgICAgICAgIERlZmluaXRpb246IFNldCBJTyBDZWxsIHNsZXcgcmF0ZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgc2xldyByYXRlIHNldHRpbmcuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGU6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgc2xldyByYXRlIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGUgOnsxLCw4fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBzbGV3IHJhdGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgc2xldyByYXRlIHRvIDguCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMCAtIDE1CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogYW1wbGl0dWRlOiB7dmFsdWVbLHZhbHVlLi4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgSU8gQ2VsbCBzaWduYWwgYW1wbGl0dWRlIG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IGFtcGxpdHVkZTp7MHgxfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICBFeGFtcGxlOiBhbXBsaXR1ZGUgOnsxLCw3fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgYW1wbGl0dWRlIHRvIDcuCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBWYXJpZXMgYmFzZWQgb24gY2hpcCByZXZpc2lvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgRXhhbXBsZTogJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PXZlcmJvc2UscmRfc3RybTp7ezB4MDA0MX19JworICAgICAgICBlbmFibGVzIHZlcmJvc2Ugb3V0cHV0IGluIHRoZSBkcml2ZXIgYW5kIHR1cm5zIHJlYWQgc3RyZWFtaW5nIG9uCisgICAgICAgIGZvciB0YXJnZXRzIDAgYW5kIDYgb2YgQ29udHJvbGxlciAwLgorCis0LiBBZGRpdGlvbmFsIE5vdGVzCisKKyAgIDQuMS4gS25vd24vVW5yZXNvbHZlZCBvciBGWUkgSXNzdWVzCisKKyAgICAgICAgKiBVbmRlciBTdVNFIExpbnV4IEVudGVycHJpc2UgNywgdGhlIGRyaXZlciBtYXkgZmFpbCB0byBvcGVyYXRlCisgICAgICAgICAgY29ycmVjdGx5IGR1ZSB0byBhIHByb2JsZW0gd2l0aCBQQ0kgaW50ZXJydXB0IHJvdXRpbmcgaW4gdGhlCisgICAgICAgICAgTGludXgga2VybmVsLiAgUGxlYXNlIGNvbnRhY3QgU3VTRSBmb3IgYW4gdXBkYXRlZCBMaW51eAorICAgICAgICAgIGtlcm5lbC4KKworICAgNC4yLiBUaGlyZC1QYXJ0eSBDb21wYXRpYmlsaXR5IElzc3VlcworCisgICAgICAgICogQWRhcHRlYyBvbmx5IHN1cHBvcnRzIFVsdHJhMzIwIGhhcmQgZHJpdmVzIHJ1bm5pbmcKKyAgICAgICAgICB0aGUgbGF0ZXN0IGZpcm13YXJlIGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHdpdGgKKyAgICAgICAgICB5b3VyIGhhcmQgZHJpdmUgbWFudWZhY3R1cmVyIHRvIGVuc3VyZSB5b3UgaGF2ZSB0aGUKKyAgICAgICAgICBsYXRlc3QgdmVyc2lvbi4KKworICAgNC4zLiBPcGVyYXRpbmcgU3lzdGVtIG9yIFRlY2hub2xvZ3kgTGltaXRhdGlvbnMKKyAgICAgICAgCisgICAgICAgICogUENJIEhvdCBQbHVnIGlzIHVudGVzdGVkIGFuZCBtYXkgY2F1c2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0gCisgICAgICAgICAgdG8gc3RvcCByZXNwb25kaW5nLgorICAgICAgICAqIEx1bnMgdGhhdCBhcmUgbm90IG51bWJlcmVkIGNvbnRpZ3VvdXNseSBzdGFydGluZyB3aXRoIDAgbWlnaHQgbm90CisgICAgICAgICAgYmUgYXV0b21hdGljYWxseSBwcm9iZWQgZHVyaW5nIHN5c3RlbSBzdGFydHVwLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAgICAgICBvZiB0aGUgT1MuICBQbGVhc2UgY29udGFjdCB5b3VyIExpbnV4IHZlbmRvciBmb3IgaW5zdHJ1Y3Rpb25zIG9uCisgICAgICAgICAgbWFudWFsbHkgcHJvYmluZyBub24tY29udGlndW91cyBsdW5zLgorICAgICAgICAqIFVzaW5nIHRoZSBEcml2ZXIgVXBkYXRlIERpc2sgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UgZHVyaW5nIE9TCisgICAgICAgICAgaW5zdGFsbGF0aW9uIHVuZGVyIFJlZEhhdCBtaWdodCByZXN1bHQgaW4gdHdvIHZlcnNpb25zIG9mIHRoaXMKKyAgICAgICAgICBkcml2ZXIgYmVpbmcgaW5zdGFsbGVkIGludG8gdGhlIHN5c3RlbSBtb2R1bGUgZGlyZWN0b3J5LiAgVGhpcworICAgICAgICAgIG1pZ2h0IGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIC9zYmluL21raW5pdHJkIHByb2dyYW0gYW5kL29yCisgICAgICAgICAgb3RoZXIgUlBNIHBhY2thZ2VzIHRoYXQgdHJ5IHRvIGluc3RhbGwgc3lzdGVtIG1vZHVsZXMuICBUaGUgYmVzdAorICAgICAgICAgIHdheSB0byBjb3JyZWN0IHRoaXMgb25jZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgaXMgdG8gaW5zdGFsbAorICAgICAgICAgIHRoZSBsYXRlc3QgUlBNIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciwgYXZhaWxhYmxlIGZyb20KKyAgICAgICAgICBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorCisKKzUuIENvbnRhY3RpbmcgQWRhcHRlYworCisgICBBIFRlY2huaWNhbCBTdXBwb3J0IElkZW50aWZpY2F0aW9uIChUU0lEKSBOdW1iZXIgaXMgcmVxdWlyZWQgZm9yIAorICAgQWRhcHRlYyB0ZWNobmljYWwgc3VwcG9ydC4KKyAgICAtIFRoZSAxMi1kaWdpdCBUU0lEIGNhbiBiZSBmb3VuZCBvbiB0aGUgd2hpdGUgYmFyY29kZS10eXBlIGxhYmVsCisgICAgICBpbmNsdWRlZCBpbnNpZGUgdGhlIGJveCB3aXRoIHlvdXIgcHJvZHVjdC4gVGhlIFRTSUQgaGVscHMgdXMgCisgICAgICBwcm92aWRlIG1vcmUgZWZmaWNpZW50IHNlcnZpY2UgYnkgYWNjdXJhdGVseSBpZGVudGlmeWluZyB5b3VyIAorICAgICAgcHJvZHVjdCBhbmQgc3VwcG9ydCBzdGF0dXMuCisgICBTdXBwb3J0IE9wdGlvbnMKKyAgICAtIFNlYXJjaCB0aGUgQWRhcHRlYyBTdXBwb3J0IEtub3dsZWRnZWJhc2UgKEFTSykgYXQKKyAgICAgIGh0dHA6Ly9hc2suYWRhcHRlYy5jb20gZm9yIGFydGljbGVzLCB0cm91Ymxlc2hvb3RpbmcgdGlwcywgYW5kCisgICAgICBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBmb3IgeW91ciBwcm9kdWN0LgorICAgIC0gRm9yIHN1cHBvcnQgdmlhIEVtYWlsLCBzdWJtaXQgeW91ciBxdWVzdGlvbiB0byBBZGFwdGVjJ3MgCisgICAgICBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0cyBhdCBodHRwOi8vYXNrLmFkYXB0ZWMuY29tLgorICAgICAKKyAgIE5vcnRoIEFtZXJpY2EKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIEZpYnJlIENoYW5uZWwvUkFJRC9FeHRlcm5hbCBTdG9yYWdlIFRlY2huaWNhbAorICAgICAgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIDEtMzIxLTIwNy0yMDAwLAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDM6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBUZWNobmljYWwgU3VwcG9ydCBpbiBhbGwgb3RoZXIgdGVjaG5vbG9naWVzIGluY2x1ZGluZyAKKyAgICAgIFNDU0ksIGNhbGwgMS00MDgtOTM0LTcyNzQsCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgNjowMCBBLk0uIHRvIDU6MDAgUC5NLiwgUFNULgorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorICAgIC0gRm9yIGFmdGVyIGhvdXJzIHN1cHBvcnQsIGNhbGwgMS04MDAtNDE2LTgwNjYgKCQ5OS9jYWxsLCAKKyAgICAgICQxNDkvY2FsbCBvbiBob2xpZGF5cykKKyAgICAtIFRvIG9yZGVyIEFkYXB0ZWMgcHJvZHVjdHMgaW5jbHVkaW5nIHNvZnR3YXJlIGFuZCBjYWJsZXMsIGNhbGwKKyAgICAgIDEtODAwLTQ0Mi03Mjc0IG9yIDEtNDA4LTk1Ny03Mjc0LiBZb3UgY2FuIGFsc28gdmlzaXQgb3VyIAorICAgICAgb25saW5lIHN0b3JlIGF0IGh0dHA6Ly93d3cuYWRhcHRlY3N0b3JlLmNvbQorCisgICBFdXJvcGUKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMtZXVyb3BlLmNvbS4KKyAgICAtIEVuZ2xpc2ggYW5kIEZyZW5jaDogVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IAorICAgICAgU3BlY2lhbGlzdCwgY2FsbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBudW1iZXJzOgorICAgICAgICAtIEVuZ2xpc2g6ICszMi0yLTM1Mi0zNDcwCisgICAgICAgIC0gRnJlbmNoOiAgKzMyLTItMzUyLTM0NjAKKyAgICAgIEhvdXJzOiBNb25kYXktVGh1cnNkYXksIDEwOjAwIHRvIDEyOjMwLCAxMzozMCB0byAxNzozMCBDRVQgCisgICAgICAgICAgICAgRnJpZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgLSBHZXJtYW46IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LAorICAgICAgY2FsbCArNDktODktNDU2LTQwNjYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgICAgICAgICAgRnJpZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTU6MDAgQ0VUCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzLCBpbmNsdWRpbmcgYWNjZXNzb3JpZXMgYW5kIGNhYmxlczoKKyAgICAgICAgLSBVSzogKzA4MDAtOTYtNjUtMjYgb3IgZmF4ICswODAwLTczMS0wMi05NQorICAgICAgICAtIE90aGVyIEV1cm9wZWFuIGNvdW50cmllczogKzMyLTExLTMwMC0zNzkKKworICAgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbGFuZAorICAgIC0gVmlzaXQgb3VyIFdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWRhcHRlYy5jb20uYXUuCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs2MTItOTQxNi0wNjk4CisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgQS5NLiB0byA0OjMwIFAuTS4sIEVBVAorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorCisgICBKYXBhbgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODEtMy01MzA4LTYxMjAgCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgOTowMCBhLm0uIHRvIDEyOjAwIHAubS4sIDE6MDAgcC5tLiB0bworICAgICAgNjowMCBwLm0uIFRTQworCisgICBIb25nIEtvbmcgYW5kIENoaW5hCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs4NTItMjg2OS03MjAwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAuCisKKyAgIFNpbmdhcG9yZQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjUtMjQ1LTc0NzAKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAxMDowMCB0byAxNzowMC4KKyAgICAtIEZheCBUZWNobmljYWwgU3VwcG9ydCBhdCArODUyLTI4NjktNzEwMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzIEFkYXB0ZWMgSW5jLiA2OTEgUy4gTWlscGl0YXMgQmx2ZC4sIE1pbHBpdGFzIENBIDk1MDM1IFVTQS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IGFyZSBwZXJtaXR0ZWQgdG8gcmVkaXN0cmlidXRlLCB1c2UgYW5kIG1vZGlmeSB0aGlzIFJFQURNRSBmaWxlIGluIHdob2xlCisgKiBvciBpbiBwYXJ0IGluIGNvbmp1bmN0aW9uIHdpdGggcmVkaXN0cmlidXRpb24gb2Ygc29mdHdhcmUgZ292ZXJuZWQgYnkgdGhlCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIFJFQURNRSBmaWxlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAzLiBNb2RpZmljYXRpb25zIG9yIG5ldyBjb250cmlidXRpb25zIG11c3QgYmUgYXR0cmlidXRlZCBpbiBhIGNvcHlyaWdodAorICogICAgbm90aWNlIGlkZW50aWZ5aW5nIHRoZSBhdXRob3IgKCJDb250cmlidXRvciIpIGFuZCBhZGRlZCBiZWxvdyB0aGUKKyAqICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UuIFRoZSBjb3B5cmlnaHQgbm90aWNlIGlzIGZvciBwdXJwb3NlcyBvZgorICogICAgaWRlbnRpZnlpbmcgY29udHJpYnV0b3JzIGFuZCBzaG91bGQgbm90IGJlIGRlZW1lZCBhcyBwZXJtaXNzaW9uIHRvIGFsdGVyCisgKiAgICB0aGUgcGVybWlzc2lvbnMgZ2l2ZW4gYnkgQWRhcHRlYy4KKyAqCisgKiBUSElTIFJFQURNRSBGSUxFIElTIFBST1ZJREVEIEJZIEFEQVBURUMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkKKyAqIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCBPUiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorICogQURBUFRFQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBSRUFETUUKKyAqIEZJTEUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBlNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0CkBAIC0wLDAgKzEsNDE0IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBBZGFwdGVjIEFpYzd4eHggRmFzdCAtPiBVbHRyYTE2MCBGYW1pbHkgTWFuYWdlciBTZXQgdjYuMi4yOCAgID0KKz0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRE1FIGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0gICAgICAgICAgICAgICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhpcyBmaWxlOgorCisgIDEuIFN1cHBvcnRlZCBIYXJkd2FyZQorICAyLiBWZXJzaW9uIEhpc3RvcnkKKyAgMy4gQ29tbWFuZCBMaW5lIE9wdGlvbnMKKyAgNC4gQ29udGFjdGluZyBBZGFwdGVjCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBDaGlwcyBhbmQgSG9zdCBBZGFwdGVycyBhcmUgc3VwcG9ydGVkIGJ5CisgICB0aGUgYWljN3h4eCBkcml2ZXIuIAorCisgICBDaGlwICAgIE1JUFMgIEhvc3QgQnVzICBNYXhTeW5jICBNYXhXaWR0aCAgU0NCcyAgTm90ZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYWljNzc3MCAgMTAgICAgRUlTQS9WTCAgIDEwTUh6ICAgIDE2Qml0ICAgICAgNCAgIDEKKyAgIGFpYzc4NTAgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTUgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTYgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NTkgIDEwICAgIFBDSS8zMiAgICAyME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NjAgIDEwICAgIFBDSS8zMiAgICAyME1IeiAgICA4Qml0ICAgICAgIDMKKyAgIGFpYzc4NzAgIDEwICAgIFBDSS8zMiAgICAxME1IeiAgICAxNkJpdCAgICAgIDE2CisgICBhaWM3ODgwICAxMCAgICBQQ0kvMzIgICAgMjBNSHogICAgMTZCaXQgICAgICAxNgorICAgYWljNzg5MCAgMjAgICAgUENJLzMyICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5MSAgMjAgICAgUENJLzY0ICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5MiAgMjAgICBQQ0kvNjQtNjYgIDgwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgICAzIDQgNSA2IDcgOAorICAgYWljNzg5NSAgMTUgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNQorICAgYWljNzg5NUMgMTUgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSAgICAgOAorICAgYWljNzg5NiAgMjAgICAgUENJLzMyICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorICAgYWljNzg5NyAgMjAgICAgUENJLzY0ICAgIDQwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorICAgYWljNzg5OSAgMjAgICBQQ0kvNjQtNjYgIDgwTUh6ICAgIDE2Qml0ICAgICAgMTYgICAgMiAzIDQgNSA2IDcgOAorCisgICAxLiAgIE11bHRpcGxleGVkIFR3aW4gQ2hhbm5lbCBEZXZpY2UgLSBPbmUgY29udHJvbGxlciBzZXJ2aWNpbmcgdHdvCisgICAgICAgIGJ1c3Nlcy4KKyAgIDIuICAgTXVsdGktZnVuY3Rpb24gVHdpbiBDaGFubmVsIERldmljZSAtIFR3byBjb250cm9sbGVycyBvbiBvbmUgY2hpcC4KKyAgIDMuICAgQ29tbWFuZCBDaGFubmVsIFNlY29uZGFyeSBETUEgRW5naW5lIC0gQWxsb3dzIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKKyAgICAgICAgYW5kIFNDQiBwcmVmZXRjaC4KKyAgIDQuICAgNjQgQnl0ZSBTQ0IgU3VwcG9ydCAtIEFsbG93cyBkaXNjb25uZWN0ZWQsIHVudHRhZ2dlZCByZXF1ZXN0IHRhYmxlCisgICAgICAgIGZvciBhbGwgcG9zc2libGUgdGFyZ2V0L2x1biBjb21iaW5hdGlvbnMuCisgICA1LiAgIEJsb2NrIE1vdmUgSW5zdHJ1Y3Rpb24gU3VwcG9ydCAtIERvdWJsZXMgdGhlIHNwZWVkIG9mIGNlcnRhaW4KKyAgICAgICAgc2VxdWVuY2VyIG9wZXJhdGlvbnMuCisgICA2LiAgIGBCYXlvbmV0JyBzdHlsZSBTY2F0dGVyIEdhdGhlciBFbmdpbmUgLSBJbXByb3ZlcyBTL0cgcHJlZmV0Y2gKKyAgICAgICAgcGVyZm9ybWFuY2UuCisgICA3LiAgIFF1ZXVpbmcgUmVnaXN0ZXJzIC0gQWxsb3dzIHF1ZXVpbmcgb2YgbmV3IHRyYW5zYWN0aW9ucyB3aXRob3V0CisgICAgICAgIHBhdXNpbmcgdGhlIHNlcXVlbmNlci4KKyAgIDguICAgTXVsdGlwbGUgVGFyZ2V0IElEcyAtIEFsbG93cyB0aGUgY29udHJvbGxlciB0byByZXNwb25kIHRvIHNlbGVjdGlvbgorICAgICAgICBhcyBhIHRhcmdldCBvbiBtdWx0aXBsZSBTQ1NJIElEcy4KKworICAgQ29udHJvbGxlciAgICAgIENoaXAgICBIb3N0LUJ1cyAgICBJbnQtQ29ubmVjdG9ycyAgRXh0LUNvbm5lY3RvcnMgIE5vdGVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUhBLTI3NFhbQV0gICAgYWljNzc3MCAgIEVJU0EgICAgICAgICBTRS01ME0gICAgICAgICBTRS1IRDUwRgorICAgQUhBLTI3NFhbQV1XICAgYWljNzc3MCAgIEVJU0EgICAgICAgICBTRS1IRDY4RiAgICAgICBTRS1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yNzRYW0FdVCAgIGFpYzc3NzAgICBFSVNBICAgICAgIDIgWCBTRS01ME0gICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yODQyICAgICAgIGFpYzc3NzAgICAgVkwgICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTQwQVUgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFWQS0yOTAySSAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBVkEtMjkwMkUgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQVZBLTI5MDYgICAgICAgYWljNzg1NiAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICBTRS1EQjI1RgorICAgQVBDLTc4NTAgICAgICAgYWljNzg1MCAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIEFWQS0yOTQwICAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkyMEIgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MzBCICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTIwQyAgICAgIGFpYzc4NTYgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTMwQyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkzMEMgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MTBDICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTE1QyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjk0MEFVL0NOICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBSEEtMjk0NFcgICAgICBhaWM3ODcwICAgUENJLzMyICAgICBIVkQtSEQ2OEYgICAgICAgIEhWRC1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWRC01ME0KKyAgIEFIQS0zOTQwVyAgICAgIGFpYzc4NzAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgICAgU0UtSEQ2OEYgICAgICAgIDIKKyAgIEFIQS0yOTQwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICAgU0UtSEQ2OEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ2OEYKKyAgIEFIQS0yOTQwVSAgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yOTQwRCAgICAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIGFIQS0yOTQwIEEvVCAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0yOTQwRCBBL1QgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0zOTQwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgICAgU0UtSEQ2OEYgICAgICAgICAgMworICAgQUhBLTM5NDBVV0QgICAgYWljNzg4MCAgIFBDSS8zMiAgICAgMiBYIFNFLUhENjhGICAgMiBYIFNFLVZIRDY4RiAgICAgICAzCisgICBBSEEtMzk0MFUgICAgICBhaWM3ODgwICAgUENJLzMyICAgICAyIFggU0UtNTBNICAgICAgIFNFLUhENTBGICAgICAgICAgIDMKKyAgIEFIQS0yOTQ0VVcgICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgICBIVkQtSEQ2OEYgICAgICAgSFZELUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWRC01ME0KKyAgIEFIQS0zOTQ0VVdEICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBIVkQtSEQ2OEYgIDIgWCBIVkQtVkhENjhGICAgICAgMworICAgQUhBLTQ5NDRVVyAgICAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5MzBVVyAgICAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5NDBVVyBQcm8gYWljNzg4MCAgIFBDSS8zMiAgICAgIFNFLUhENjhGICAgICAgICBTRS1IRDY4RiAgICAgICAgICAgIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNCisgICBBSEEtMjk0MFVXL0NOICBhaWM3ODgwICAgUENJLzMyCisgICBBSEEtMjk0MFVEdWFsICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMjk0MFVXRHVhbCBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MFVXRCAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVVyAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVV0QgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0MEFVICAgICBhaWM3ODk1ICAgUENJLzMyCisgICBBSEEtMzk0NEFVV0QgICBhaWM3ODk1ICAgUENJLzMyICAgICAyIFggSFZELUhENjhGICAyIFggSFZELVZIRDY4RgorICAgQUhBLTI5NDBVMkIgICAgYWljNzg5MCAgIFBDSS8zMiAgICAgIExWRC1IRDY4RiAgICAgICBMVkQtSEQ2OEYKKyAgIEFIQS0yOTQwVTIgT0VNIGFpYzc4OTEgICBQQ0kvNjQKKyAgIEFIQS0yOTQwVTJXICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgTFZELUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtSEQ2OEYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLTUwTQorICAgQUhBLTI5NTBVMkIgICAgYWljNzg5MSAgIFBDSS82NCAgICAgIExWRC1IRDY4RiAgICAgICBMVkQtSEQ2OEYKKyAgIEFIQS0yOTMwVTIgICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgU0UtSEQ1MEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNIAorICAgQUhBLTM5NTBVMkIgICAgYWljNzg5NyAgIFBDSS82NAorICAgQUhBLTM5NTBVMkQgICAgYWljNzg5NyAgIFBDSS82NAorICAgQUhBLTI5MTYwICAgICAgYWljNzg5MiAgIFBDSS82NC02NgorICAgQUhBLTI5MTYwIENQUSAgYWljNzg5MiAgIFBDSS82NC02NgorICAgQUhBLTI5MTYwTiAgICAgYWljNzg5MiAgIFBDSS8zMiAgICAgIExWRC1IRDY4RiAgICAgICBTRS1IRDUwRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yOTE2MExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0xOTE2MCAgICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTE1MExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTEzMExQICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0zOTYwRCAgICAgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKyAgIEFIQS0zOTYwRCBDUFEgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKyAgIEFIQS0zOTE2MCAgICAgIGFpYzc4OTkgICBQQ0kvNjQtNjYgIDIgWCBMVkQtSEQ2OEYgIDIgWCBMVkQtVkhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExWRC01ME0KKworICAgMS4gTm8gQklPUyBzdXBwb3J0CisgICAyLiBERUMyMTA1MCBQQ0ktUENJIGJyaWRnZSB3aXRoIG11bHRpcGxlIGNvbnRyb2xsZXIgY2hpcHMgb24gc2Vjb25kYXJ5IGJ1cworICAgMy4gREVDMjExNVggUENJLVBDSSBicmlkZ2Ugd2l0aCBtdWx0aXBsZSBjb250cm9sbGVyIGNoaXBzIG9uIHNlY29uZGFyeSBidXMKKyAgIDQuIEFsbCB0aHJlZSBTQ1NJIGNvbm5lY3RvcnMgbWF5IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aG91dAorICAgICAgU0NTSSAic3R1YiIgZWZmZWN0cy4KKworMi4gVmVyc2lvbiBIaXN0b3J5CisgICA2LjIuMzYgKEp1bmUgM3JkLCAyMDAzKQorICAgICAgICAtIENvcnJlY3QgY29kZSB0aGF0IGRpc2FibGVzIFBDSSBwYXJpdHkgZXJyb3IgY2hlY2tpbmcuCisgICAgICAgIC0gQ29ycmVjdCBhbmQgc2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIGlnbm9yZSB3aWRlIHJlc2lkdWUKKyAgICAgICAgICBtZXNzYWdlLiAgVGhlIHByZXZpb3VzIGNvZGUgd291bGQgZmFpbCB0byByZXBvcnQgYSByZXNpZHVhbAorICAgICAgICAgIGlmIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGxlbmd0aCB3YXMgZXZlbiBhbmQgd2UgcmVjZWl2ZWQKKyAgICAgICAgICBhbiBJV1IgbWVzc2FnZS4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDIuNS5YIEVJU0EgZnJhbWV3b3JrLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gQ29ycmVjdCBEb21haW4gVmFsaWRhdGlvbiBjb21tYW5kLWxpbmUgb3B0aW9uIHBhcnNpbmcuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gQ2xlYXIgUENJIGVycm9yIHN0YXRlIGR1cmluZyBkcml2ZXIgYXR0YWNoIHNvIHRoYXQgd2UKKyAgICAgICAgICBkb24ndCBkaXNhYmxlIG1lbW9yeSBtYXBwZWQgSS9PIGR1ZSB0byBhIHN0cmF5IHdyaXRlCisgICAgICAgICAgYnkgc29tZSBvdGhlciBkcml2ZXIgcHJvYmUgdGhhdCBvY2N1cnJlZCBiZWZvcmUgd2UKKyAgICAgICAgICBjbGFpbWVkIHRoZSBjb250cm9sbGVyLgorCisgICA2LjIuMzUgKE1heSAxNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyBHQ0MgMy4zIGNvbXBpbGVyIHdhcm5pbmdzLgorICAgICAgICAtIENvcnJlY3Qgb3BlcmF0aW9uIG9uIEVJU0EgVHdpbiBDaGFubmVsIGNvbnRyb2xsZXIuCisgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIDIuNS5YJ3Mgc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KCkuCisKKyAgIDYuMi4zNCAoTWF5IDV0aCwgMjAwMykKKyAgICAgICAgLSBGaXggbG9ja2luZyByZWdyZXNzaW9uIGluc3Ryb2R1Y2VkIGluIDYuMi4yOSB0aGF0CisgICAgICAgICAgY291bGQgY3Vhc2UgYSBsb2NrIG9yZGVyIHJldmVyc2FsIGJldHdlZW4gdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIGFuZCBvdXIgcGVyLXNvZnRjIGxvY2suICBUaGlzIHdhcyBvbmx5IHBvc3NpYmxlIG9uIFJIOSwKKyAgICAgICAgICBTdVNFLCBhbmQga2VybmVsLm9yZyAyLjQuWCBrZXJuZWxzLgorCisgICA2LjIuMzMgKEFwcmlsIDMwdGgsIDIwMDMpCisgICAgICAgIC0gRHluYW1pY2FsbHkgZGlzYWJsZSBQQ0kgcGFyaXR5IGVycm9yIHJlcG9ydGluZyBhZnRlcgorICAgICAgICAgIDEwIGVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuICBUaGVzZSBlcnJvcnMgYXJlCisgICAgICAgICAgdGhlIHJlc3VsdCBvZiBzb21lIG90aGVyIGRldmljZSBpc3N1aW5nIFBDSSB0cmFuc2FjdGlvbnMKKyAgICAgICAgICB3aXRoIGJhZCBwYXJpdHkuICBPbmNlIHRoZSB1c2VyIGhhcyBiZWVuIGluZm9ybWVkIG9mIHRoZQorICAgICAgICAgIHByb2JsZW0sIGNvbnRpbnVpbmcgdG8gcmVwb3J0IHRoZSBlcnJvcnMganVzdCBkZWdyYWRlcworICAgICAgICAgIG91ciBwZXJmb3JtYW5jZS4KKworICAgNi4yLjMyIChNYXJjaCAyOHRoLCAyMDAzKQorICAgICAgICAtIER5bmFtaWNhbGx5IHNpemVkIFMvRyBsaXN0cyB0byBhdm9pZCBTQ1NJIG1hbGxvYworICAgICAgICAgIHBvb2wgZnJhZ21lbnRhdGlvbiBhbmQgU0NTSSBtaWQtbGF5ZXIgZGVhZGxvY2suCisKKyAgIDYuMi4yOCAoSmFudWFyeSAyMHRoLCAyMDAzKQorICAgICAgICAtIERvbWFpbiBWYWxpZGF0aW9uIEZpeGVzCisgICAgICAgIC0gQWRkIGFiaWxpdHkgdG8gZGlzYWJsZSBQQ0kgcGFyaXR5IGVycm9yIGNoZWNraW5nLgorICAgICAgICAtIEVuaGFuY2VkIE1lbW9yeSBNYXBwZWQgSS9PIHByb2JlCisKKyAgIDYuMi4yMCAoTm92ZW1iZXIgN3RoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIERvbWFpbiBWYWxpZGF0aW9uLgorCiszLiBDb21tYW5kIExpbmUgT3B0aW9ucworCisgICAgICAgIFdBUk5JTkc6IEFMVEVSSU5HIE9SIEFERElORyBUSEVTRSBEUklWRVIgUEFSQU1FVEVSUworICAgICAgICAgICAgICAgICBJTkNPUlJFQ1RMWSBDQU4gUkVOREVSIFlPVVIgU1lTVEVNIElOT1BFUkFCTEUuCisgICAgICAgICAgICAgICAgIFVTRSBUSEVNIFdJVEggQ0FVVElPTi4gCisKKyAgIEVkaXQgdGhlIGZpbGUgIm1vZHByb2JlLmNvbmYiIGluIHRoZSBkaXJlY3RvcnkgL2V0YyBhbmQgYWRkL2VkaXQgYQorICAgbGluZSBjb250YWluaW5nICdvcHRpb25zIGFpYzd4eHggYWljN3h4eD1bY29tbWFuZFssY29tbWFuZC4uLl1dJyB3aGVyZQorICAgJ2NvbW1hbmQnIGlzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHZlcmJvc2UKKyAgICAgICAgICBEZWZpbml0aW9uOiBlbmFibGUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgb3BlcmF0aW9uLgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGRlYnVnOlt2YWx1ZV0KKyAgICAgICAgICBEZWZpbml0aW9uOiBFbmFibGVzIHZhcmlvdXMgbGV2ZWxzIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCA9IG5vIGRlYnVnZ2luZywgMHhmZmZmID0gZnVsbCBkZWJ1Z2dpbmcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAweDAwMDAKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogbm9fcHJvYmUKKyAgICAgICAgICAgICAgT3B0aW9uOiBwcm9iZV9laXNhX3ZsCisgICAgICAgICAgRGVmaW5pdGlvbjogRG8gbm90IHByb2JlIGZvciBFSVNBL1ZMQiBjb250cm9sbGVycy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgdG9nZ2xlLiAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAgIHRvIG5vdCBwcm9iZSBFSVNBL1ZMQiBjb250cm9sbGVycyBieSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgIm5vX3Byb2JlIiB3aWxsIGVuYWJsZSB0aGlzIHByb2JpbmcuCisgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCB0byBwcm9iZSBFSVNBL1ZMQgorICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzIGJ5IGRlZmF1bHQsIHNwZWNpZnlpbmcgIm5vX3Byb2JlIgorICAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGlzYWJsZSB0aGlzIHByb2JpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSB0b2dnbGUKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBFSVNBL1ZMQiBwcm9iaW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBjaV9wYXJpdHkKKyAgICAgICAgICBEZWZpbml0aW9uOiBUb2dnbGVzIHRoZSBkZXRlY3Rpb24gb2YgUENJIHBhcml0eSBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICAgT24gbWFueSBtb3RoZXJib2FyZHMgd2l0aCBWSUEgY2hpcHNldHMsCisgICAgICAgICAgICAgICAgICAgICAgUENJIHBhcml0eSBpcyBub3QgZ2VuZXJhdGVkIGNvcnJlY3RseSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBQQ0kgYnVzLiAgSXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGhhcmR3YXJlIHRvCisgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlICJzcHVyaW91cyIgcGFyaXR5CisgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzIGFuZCByZWFsIHBhcml0eSBlcnJvcnMuICBUaGUgc3ltcHRvbSBvZgorICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvYmxlbSBpcyBhIHN0cmVhbSBvZiB0aGUgbWVzc2FnZToKKyAgICAic2NzaTA6IERhdGEgUGFyaXR5IEVycm9yIERldGVjdGVkIGR1cmluZyBhZGRyZXNzIG9yIHdyaXRlIGRhdGEgcGhhc2UiCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGJ5IHRoZSBkcml2ZXIuCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSB0b2dnbGUKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBQQ0kgUGFyaXR5IEVycm9yIHJlcG9ydGluZyBpcyBkaXNhYmxlZAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aDpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogR2xvYmFsIHRhZyBkZXB0aCBmb3IgYWxsIHRhcmdldHMgb24gYWxsIGJ1c3Nlcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHRhZyBkZXB0aCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBzZWxlY3RpdmVseSBvdmVycmlkZGVuIHZpIHRoZSB0YWdfaW5mbworICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgUG9zc2libGUgVmFsdWVzOiAxIC0gMjUzCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMzIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdGFnX2luZm86e3t2YWx1ZVssdmFsdWUuLi5dfVsse3ZhbHVlWyx2YWx1ZS4uLl19Li4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgdGhlIHBlci10YXJnZXQgdGFnZ2VkIHF1ZXVlIGRlcHRoIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgICBwZXIgY29udHJvbGxlciBiYXNpcy4gIEJvdGggY29udHJvbGxlcnMgYW5kIHRhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0IHRoZXkgc2hvdWxkIHJldGFpbgorICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRhZyBkZXB0aC4KKyAgICAgICAgICAgIEV4YW1wbGVzOiB0YWdfaW5mbzp7ezE2LDMyLDMyLDY0LDgsOCwsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJ9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDE2IGZvciB0YXJnZXQgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgNjQgZm9yIHRhcmdldCAzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiA4IGZvciB0YXJnZXRzIDQgYW5kIDUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhdmVzIHRhcmdldCA2IGF0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAzMiBmb3IgdGFyZ2V0cyAxLDIsNy0xNQorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorCisgICAgICAgICAgICAgICAgICAgICAgdGFnX2luZm86e3t9LHszMiwsMzJ9fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAxCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAzMiBmb3IgdGFyZ2V0cyAwIGFuZCAyCisgICAgICAgICAgICAgICAgICAgICAgICBBbGwgb3RoZXIgdGFyZ2V0cyByZXRhaW4gdGhlIGRlZmF1bHQgZGVwdGguCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgUG9zc2libGUgVmFsdWVzOiAxIC0gMjUzCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMzIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGR2OiB7dmFsdWVbLHZhbHVlLi4uXX0gCisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKworICAgICAgIERlZmF1bHQgVmFsdWU6IFNDU0ktU2VsZWN0IHNldHRpbmcgb24gY29udHJvbGxlcnMgd2l0aCBhIFNDU0kgU2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGZvciBEVi4gIE90aGVyd2lzZSwgb24gZm9yIGNvbnRyb2xsZXJzIHN1cHBvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgICBVMTYwIHNwZWVkcyBhbmQgb2ZmIGZvciBhbGwgb3RoZXIgY29udHJvbGxlciB0eXBlcy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEV4YW1wbGU6CisgICAnb3B0aW9ucyBhaWM3eHh4IGFpYzd4eHg9dmVyYm9zZSxub19wcm9iZSx0YWdfaW5mbzp7e30seywsMTB9fSxzZWx0aW1lOjEiCisgICAgICAgIGVuYWJsZXMgdmVyYm9zZSBsb2dnaW5nLCBEaXNhYmxlIEVJU0EvVkxCIHByb2JpbmcsCisgICAgICAgIGFuZCBzZXQgdGFnIGRlcHRoIG9uIENvbnRyb2xsZXIgMS9UYXJnZXQgMiB0byAxMCB0YWdzLgorCiszLiBDb250YWN0aW5nIEFkYXB0ZWMKKworICAgQSBUZWNobmljYWwgU3VwcG9ydCBJZGVudGlmaWNhdGlvbiAoVFNJRCkgTnVtYmVyIGlzIHJlcXVpcmVkIGZvciAKKyAgIEFkYXB0ZWMgdGVjaG5pY2FsIHN1cHBvcnQuCisgICAgLSBUaGUgMTItZGlnaXQgVFNJRCBjYW4gYmUgZm91bmQgb24gdGhlIHdoaXRlIGJhcmNvZGUtdHlwZSBsYWJlbAorICAgICAgaW5jbHVkZWQgaW5zaWRlIHRoZSBib3ggd2l0aCB5b3VyIHByb2R1Y3QuIFRoZSBUU0lEIGhlbHBzIHVzIAorICAgICAgcHJvdmlkZSBtb3JlIGVmZmljaWVudCBzZXJ2aWNlIGJ5IGFjY3VyYXRlbHkgaWRlbnRpZnlpbmcgeW91ciAKKyAgICAgIHByb2R1Y3QgYW5kIHN1cHBvcnQgc3RhdHVzLgorICAgU3VwcG9ydCBPcHRpb25zCisgICAgLSBTZWFyY2ggdGhlIEFkYXB0ZWMgU3VwcG9ydCBLbm93bGVkZ2ViYXNlIChBU0spIGF0CisgICAgICBodHRwOi8vYXNrLmFkYXB0ZWMuY29tIGZvciBhcnRpY2xlcywgdHJvdWJsZXNob290aW5nIHRpcHMsIGFuZAorICAgICAgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgZm9yIHlvdXIgcHJvZHVjdC4KKyAgICAtIEZvciBzdXBwb3J0IHZpYSBFbWFpbCwgc3VibWl0IHlvdXIgcXVlc3Rpb24gdG8gQWRhcHRlYydzIAorICAgICAgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdHMgYXQgaHR0cDovL2Fzay5hZGFwdGVjLmNvbS4KKyAgICAgCisgICBOb3J0aCBBbWVyaWNhCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLmNvbS4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBGaWJyZSBDaGFubmVsL1JBSUQvRXh0ZXJuYWwgU3RvcmFnZSBUZWNobmljYWwKKyAgICAgIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAxLTMyMS0yMDctMjAwMCwKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAzOjAwIEEuTS4gdG8gNTowMCBQLk0uLCBQU1QuCisgICAgICAoTm90IG9wZW4gb24gaG9saWRheXMpCisgICAgLSBGb3IgVGVjaG5pY2FsIFN1cHBvcnQgaW4gYWxsIG90aGVyIHRlY2hub2xvZ2llcyBpbmNsdWRpbmcgCisgICAgICBTQ1NJLCBjYWxsIDEtNDA4LTkzNC03Mjc0LAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDY6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBhZnRlciBob3VycyBzdXBwb3J0LCBjYWxsIDEtODAwLTQxNi04MDY2ICgkOTkvY2FsbCwgCisgICAgICAkMTQ5L2NhbGwgb24gaG9saWRheXMpCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzIGluY2x1ZGluZyBzb2Z0d2FyZSBhbmQgY2FibGVzLCBjYWxsCisgICAgICAxLTgwMC00NDItNzI3NCBvciAxLTQwOC05NTctNzI3NC4gWW91IGNhbiBhbHNvIHZpc2l0IG91ciAKKyAgICAgIG9ubGluZSBzdG9yZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWNzdG9yZS5jb20KKworICAgRXVyb3BlCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLWV1cm9wZS5jb20uCisgICAgLSBFbmdsaXNoIGFuZCBGcmVuY2g6IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCAKKyAgICAgIFNwZWNpYWxpc3QsIGNhbGwgb25lIG9mIHRoZSBmb2xsb3dpbmcgbnVtYmVyczoKKyAgICAgICAgLSBFbmdsaXNoOiArMzItMi0zNTItMzQ3MAorICAgICAgICAtIEZyZW5jaDogICszMi0yLTM1Mi0zNDYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTc6MzAgQ0VUIAorICAgICAgICAgICAgIEZyaWRheSwgMTA6MDAgdG8gMTI6MzAsIDEzOjMwIHRvIDE2OjMwIENFVAorICAgIC0gR2VybWFuOiBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwKKyAgICAgIGNhbGwgKzQ5LTg5LTQ1Ni00MDY2MAorICAgICAgSG91cnM6IE1vbmRheS1UaHVyc2RheSwgMDk6MzAgdG8gMTI6MzAsIDEzOjMwIHRvIDE2OjMwIENFVAorICAgICAgICAgICAgIEZyaWRheSwgMDk6MzAgdG8gMTI6MzAsIDEzOjMwIHRvIDE1OjAwIENFVAorICAgIC0gVG8gb3JkZXIgQWRhcHRlYyBwcm9kdWN0cywgaW5jbHVkaW5nIGFjY2Vzc29yaWVzIGFuZCBjYWJsZXM6CisgICAgICAgIC0gVUs6ICswODAwLTk2LTY1LTI2IG9yIGZheCArMDgwMC03MzEtMDItOTUKKyAgICAgICAgLSBPdGhlciBFdXJvcGVhbiBjb3VudHJpZXM6ICszMi0xMS0zMDAtMzc5CisKKyAgIEF1c3RyYWxpYSBhbmQgTmV3IFplYWxhbmQKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLmF1LgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjEyLTk0MTYtMDY5OAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIEEuTS4gdG8gNDozMCBQLk0uLCBFQVQKKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKworICAgSmFwYW4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzgxLTMtNTMwOC02MTIwIAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDk6MDAgYS5tLiB0byAxMjowMCBwLm0uLCAxOjAwIHAubS4gdG8KKyAgICAgIDY6MDAgcC5tLiBUU0MKKworICAgSG9uZyBLb25nIGFuZCBDaGluYQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODUyLTI4NjktNzIwMAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIHRvIDE3OjAwLgorICAgIC0gRmF4IFRlY2huaWNhbCBTdXBwb3J0IGF0ICs4NTItMjg2OS03MTAwLgorCisgICBTaW5nYXBvcmUKKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzY1LTI0NS03NDcwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBBZGFwdGVjIEluYy4gNjkxIFMuIE1pbHBpdGFzIEJsdmQuLCBNaWxwaXRhcyBDQSA5NTAzNSBVU0EuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBhcmUgcGVybWl0dGVkIHRvIHJlZGlzdHJpYnV0ZSwgdXNlIGFuZCBtb2RpZnkgdGhpcyBSRUFETUUgZmlsZSBpbiB3aG9sZQorICogb3IgaW4gcGFydCBpbiBjb25qdW5jdGlvbiB3aXRoIHJlZGlzdHJpYnV0aW9uIG9mIHNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoZQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBSRUFETUUgZmlsZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMy4gTW9kaWZpY2F0aW9ucyBvciBuZXcgY29udHJpYnV0aW9ucyBtdXN0IGJlIGF0dHJpYnV0ZWQgaW4gYSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSBpZGVudGlmeWluZyB0aGUgYXV0aG9yICgiQ29udHJpYnV0b3IiKSBhbmQgYWRkZWQgYmVsb3cgdGhlCisgKiAgICBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLiBUaGUgY29weXJpZ2h0IG5vdGljZSBpcyBmb3IgcHVycG9zZXMgb2YKKyAqICAgIGlkZW50aWZ5aW5nIGNvbnRyaWJ1dG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBkZWVtZWQgYXMgcGVybWlzc2lvbiB0byBhbHRlcgorICogICAgdGhlIHBlcm1pc3Npb25zIGdpdmVuIGJ5IEFkYXB0ZWMuCisgKgorICogVEhJUyBSRUFETUUgRklMRSBJUyBQUk9WSURFRCBCWSBBREFQVEVDIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZCisgKiBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQgT1IgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIEFEQVBURUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUkVBRE1FCisgKiBGSUxFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eF9vbGQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWU1YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dApAQCAtMCwwICsxLDUxMSBAQAorCQkJICAgIEFJQzd4eHggRHJpdmVyIGZvciBMaW51eAorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBBSUM3eHh4IFNDU0kgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgQWRhcHRlYyAoaHR0cDovL3d3dy5hZGFwdGVjLmNvbSkKK1NDU0kgY29udHJvbGxlcnMgYW5kIGNoaXBzZXRzLiBNYWpvciBwb3J0aW9ucyBvZiB0aGUgZHJpdmVyIGFuZCBkcml2ZXIKK2RldmVsb3BtZW50IGFyZSBzaGFyZWQgYmV0d2VlbiBib3RoIExpbnV4IGFuZCBGcmVlQlNELiBTdXBwb3J0IGZvciB0aGUKK0FJQy03eHh4IGNoaXBzZXRzIGhhdmUgYmVlbiBpbiB0aGUgZGVmYXVsdCBMaW51eCBrZXJuZWwgc2luY2UgYXBwcm94aW1hdGVseQorbGludXgtMS4xLnggYW5kIGZhaXJseSBzdGFibGUgc2luY2UgbGludXgtMS4yLngsIGFuZCBhcmUgYWxzbyBpbiBGcmVlQlNECisyLjEuMCBvciBsYXRlci4KKworICBTdXBwb3J0ZWQgY2FyZHMvY2hpcHNldHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFkYXB0ZWMgQ2FyZHMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUhBLTI3NHgKKyAgICBBSEEtMjc0eFQgICAgICAgICAgICAgICAKKyAgICBBSEEtMjg0MgorICAgIEFIQS0yOTEwQiAgICAgICAgICAgICAgIAorICAgIEFIQS0yOTIwQworICAgIEFIQS0yOTMwCisgICAgQUhBLTI5MzBVCisgICAgQUhBLTI5MzBDVQorICAgIEFIQS0yOTMwVTIKKyAgICBBSEEtMjk0MCAgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQwVyAgICAgICAgICAgICAgCisgICAgQUhBLTI5NDBVICAgICAgICAgICAgICAKKyAgICBBSEEtMjk0MFVXCisgICAgQUhBLTI5NDBVVy1QUk8KKyAgICBBSEEtMjk0MEFVIAorICAgIEFIQS0yOTQwVTJXCisgICAgQUhBLTI5NDBVMgorICAgIEFIQS0yOTQwVTJCCisgICAgQUhBLTI5NDBVMkJPRU0KKyAgICBBSEEtMjk0NEQgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQ0V0QKKyAgICBBSEEtMjk0NFVECisgICAgQUhBLTI5NDRVV0QKKyAgICBBSEEtMjk1MFUyCisgICAgQUhBLTI5NTBVMlcKKyAgICBBSEEtMjk1MFUyQgorICAgIEFIQS0yOTE2ME0KKyAgICBBSEEtMzk0MAorICAgIEFIQS0zOTQwVQorICAgIEFIQS0zOTQwVworICAgIEFIQS0zOTQwVVcKKyAgICBBSEEtMzk0MEFVVworICAgIEFIQS0zOTQwVTJXCisgICAgQUhBLTM5NTBVMkIKKyAgICBBSEEtMzk1MFUyRAorICAgIEFIQS0zOTYwRAorICAgIEFIQS0zOTE2ME0KKyAgICBBSEEtMzk4NQorICAgIEFIQS0zOTg1VQorICAgIEFIQS0zOTg1VworICAgIEFIQS0zOTg1VVcKKworICAgIE1vdGhlcmJvYXJkIENoaXBzZXRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFJQy03Nzd4ICAgCisgICAgQUlDLTc4NXgKKyAgICBBSUMtNzg2eAorICAgIEFJQy03ODd4CisgICAgQUlDLTc4OHgKKyAgICBBSUMtNzg5eAorICAgIEFJQy0zODYwCisKKyAgICBCdXMgVHlwZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVyAtIFdpZGUgU0NTSSwgU0NTSS0zLCAxNmJpdCBidXMsIDY4cGluIGNvbm5lY3Rvciwgd2lsbCBhbHNvIHN1cHBvcnQKKyAgICAgICAgU0NTSS0xL1NDU0ktMiA1MHBpbiBkZXZpY2VzLCB0cmFuc2ZlciByYXRlcyB1cCB0byAyME1CL3MuCisgICAgVSAtIFVsdHJhIFNDU0ksIHRyYW5zZmVyIHJhdGVzIHVwIHRvIDQwTUIvcy4KKyAgICBVMi0gVWx0cmEgMiBTQ1NJLCB0cmFuc2ZlciByYXRlcyB1cCB0byA4ME1CL3MuCisgICAgRCAtIERpZmZlcmVudGlhbCBTQ1NJLgorICAgIFQgLSBUd2luIENoYW5uZWwgU0NTSS4gVXAgdG8gMTQgU0NTSSBkZXZpY2VzLgorCisgICAgQUhBLTI3NHggLSBFSVNBIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0yODR4IC0gVkxCIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0yOXh4IC0gUENJIFNDU0kgY29udHJvbGxlcgorICAgIEFIQS0zOTR4IC0gUENJIGNvbnRyb2xsZXJzIHdpdGggdHdvIHNlcGFyYXRlIFNDU0kgY29udHJvbGxlcnMgb24tYm9hcmQuCisgICAgQUhBLTM5OHggLSBQQ0kgUkFJRCBjb250cm9sbGVycyB3aXRoIHRocmVlIHNlcGFyYXRlIFNDU0kgY29udHJvbGxlcnMKKyAgICAgICAgICAgICAgIG9uLWJvYXJkLgorCisgIE5vdCBTdXBwb3J0ZWQgRGV2aWNlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBZGFwdGVjIENhcmRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFIQS0yOTIwIChPbmx5IHRoZSBjYXJkcyB0aGF0IHVzZSB0aGUgRnV0dXJlIERvbWFpbiBjaGlwc2V0IGFyZSBub3QKKyAgICAgICAgICAgICAgc3VwcG9ydGVkLCBhbnkgMjkyMCBjYXJkcyBiYXNlZCBvbiBBZGFwdGVjIEFJQyBjaGlwc2V0cywKKwkgICAgICBzdWNoIGFzIHRoZSAyOTIwQywgYXJlIHN1cHBvcnRlZCkKKyAgICBBQUEtMTN4IFJhaWQgQWRhcHRlcnMKKyAgICBBQUEtMTEzeCBSYWlkIFBvcnQgQ2FyZAorCisgICAgTW90aGVyYm9hcmQgQ2hpcHNldHMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUlDLTc4MTAKKworICAgIEJ1cyBUeXBlcworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBSIC0gUmFpZCBQb3J0IGJ1c3NlcyBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgIFRoZSBoYXJkd2FyZSBSQUlEIGRldmljZXMgc29sZCBieSBBZGFwdGVjIGFyZSAqTk9UKiBzdXBwb3J0ZWQgYnkgdGhpcworICAgIGRyaXZlciAoYW5kIHdpbGwgcGVvcGxlIHBsZWFzZSBzdG9wIGVtYWlsaW5nIG1lIGFib3V0IHRoZW0sIHRoZXkgYXJlCisgICAgYSB0b3RhbGx5IHNlcGFyYXRlIGJlYXN0IGZyb20gdGhlIGJhcmUgU0NTSSBjb250cm9sbGVycyBhbmQgdGhpcyBkcml2ZXIKKyAgICBjYW4gbm90IGJlIHJldHJvZml0dGVkIGluIGFueSBzYW5lIG1hbm5lciB0byBzdXBwb3J0IHRoZSBoYXJkd2FyZSBSQUlECisgICAgZmVhdHVyZXMgb24gdGhvc2UgY2FyZHMgLSBEb3VnIExlZGZvcmQpLgorICAgIAorCisgIFBlb3BsZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBKdXN0aW4gVCBHaWJicyAgZ2liYnNAcGx1dG90ZWNoLmNvbQorICAgICAgKEJTRCBEcml2ZXIgQXV0aG9yKQorICAgIERhbiBFaXNjaGVuICAgICBkZWlzY2hlbkBpd29ya3MuSW50ZXJXb3Jrcy5vcmcKKyAgICAgIChPcmlnaW5hbCBMaW51eCBEcml2ZXIgQ28tbWFpbnRhaW5lcikKKyAgICBEZWFuIEdlaG5lcnQgICAgZGVhbmdAdGVsZXBvcnQuY29tCisgICAgICAoT3JpZ2luYWwgTGludXggRlRQL3BhdGNoIG1haW50YWluZXIpCisgICAgSmVzcyBKb2huc29uICAgIGplc3RlckBmcmVuenkuY29tCisgICAgICAoQUlDN3h4eCBGQVEgYXV0aG9yKQorICAgIERvdWcgTGVkZm9yZCAgICBkbGVkZm9yZEByZWRoYXQuY29tCisgICAgICAoQ3VycmVudCBMaW51eCBhaWM3eHh4LTUueC54IERyaXZlci9QYXRjaC9GVFAgbWFpbnRhaW5lcikKKyAgICAKKyAgICBTcGVjaWFsIHRoYW5rcyBnbyB0byBKb2huIEF5Y29jayAoYXljb2NrQGNwc2MudWNhbGdhcnkuY2EpLCB0aGUgb3JpZ2luYWwKKyAgICBhdXRob3Igb2YgdGhlIGRyaXZlci4gSm9obiBoYXMgc2luY2UgcmV0aXJlZCBmcm9tIHRoZSBwcm9qZWN0LiBUaGFua3MKKyAgICBhZ2FpbiBmb3IgYWxsIGhpcyB3b3JrIQorICAgIAorICBNYWlsaW5nIGxpc3QKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3QgYXZhaWxhYmxlIGZvciB1c2VycyB3aG8gd2FudCB0byB0cmFjayBkZXZlbG9wbWVudAorICAgIGFuZCBjb252ZXJzZSB3aXRoIG90aGVyIHVzZXJzIGFuZCBkZXZlbG9wZXJzLiBUaGlzIGxpc3QgaXMgZm9yIGJvdGgKKyAgICBGcmVlQlNEIGFuZCBMaW51eCBzdXBwb3J0IG9mIHRoZSBBSUM3eHh4IGNoaXBzZXRzLgorCisgICAgVG8gc3Vic2NyaWJlIHRvIHRoZSBBSUM3eHh4IG1haWxpbmcgbGlzdCBzZW5kIG1haWwgdG8gdGhlIGxpc3Qgc2VydmVyLAorICAgIHdpdGggInN1YnNjcmliZSBBSUM3eHh4IiBpbiB0aGUgYm9keSAobm8gU3ViamVjdDogcmVxdWlyZWQpOgorICAgICAgICBUbzogbWFqb3Jkb21vQEZyZWVCU0QuT1JHCisgICAgICAgIC0tLQorICAgICAgICBzdWJzY3JpYmUgQUlDN3h4eAorCisgICAgVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGUgbGlzdCwgc2VuZCBtYWlsIHRvIHRoZSBsaXN0IHNlcnZlciB3aXRoOgorICAgICAgICBUbzogbWFqb3Jkb21vQEZyZWVCU0QuT1JHCisgICAgICAgIC0tLQorICAgICAgICB1bnN1YnNjcmliZSBBSUM3eHh4CisKKyAgICBTZW5kIHJlZ3VsYXIgbWVzc2FnZXMgYW5kIHJlcGxpZXMgdG86IEFJQzd4eHhARnJlZUJTRC5PUkcKKyAgICAKKyAgQm9vdCBDb21tYW5kIGxpbmUgb3B0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAiYWljN3h4eD1ub19yZXNldCIgLSAgRWxpbWluYXRlIHRoZSBTQ1NJIGJ1cyByZXNldCBkdXJpbmcgc3RhcnR1cC4KKyAgICAgICAgU29tZSBTQ1NJIGRldmljZXMgbmVlZCB0aGUgaW5pdGlhbCByZXNldCB0aGF0IHRoaXMgb3B0aW9uIGRpc2FibGVzCisJaW4gb3JkZXIgdG8gd29yay4gIElmIHlvdSBoYXZlIHByb2JsZW1zIGF0IGJvb3R1cCwgcGxlYXNlIG1ha2Ugc3VyZQorCXlvdSBhcmVuJ3QgdXNpbmcgdGhpcyBvcHRpb24uCisJCisgICAgImFpYzd4eHg9cmV2ZXJzZV9zY2FuIiAtIENlcnRhaW4gUENJIG1vdGhlcmJvYXJkcyBzY2FuIGZvciBkZXZpY2VzIGF0CisgICAgICAgIGJvb3R1cCBieSBzY2FubmluZyBmcm9tIHRoZSBoaWdoZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UgdG8gdGhlCisJbG93ZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UsIG90aGVycyBkbyBqdXN0IHRoZSBvcHBvc2l0ZSBhbmQgc2NhbgorCWZyb20gbG93ZXN0IHRvIGhpZ2hlc3QgbnVtYmVyZWQgUENJIGRldmljZS4gIFRoZXJlIGlzIG5vIHJlbGlhYmxlCisJd2F5IHRvIGF1dG9kZXRlY3QgdGhpcyBvcmRlcmluZy4gIFNvLCB3ZSBkZWZhdWx0IHRvIHRoZSBtb3N0IGNvbW1vbgorCW9yZGVyLCB3aGljaCBpcyBsb3dlc3QgdG8gaGlnaGVzdC4gIFRoZW4sIGluIGNhc2UgeW91ciBtb3RoZXJib2FyZAorCXNjYW5zIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIHdlIGhhdmUgdGhpcyBvcHRpb24uICBJZiB5b3VyIEJJT1MKKwlmaW5kcyB0aGUgZHJpdmVzIG9uIGNvbnRyb2xsZXIgQSBiZWZvcmUgY29udHJvbGxlciBCIGJ1dCB0aGUgbGludXgKKwlrZXJuZWwgZmluZHMgeW91ciBkcml2ZXMgb24gY29udHJvbGxlciBCIGJlZm9yZSBBLCB0aGVuIHlvdSBzaG91bGQKKwl1c2UgdGhpcyBvcHRpb24uCisJCisgICAgImFpYzd4eHg9ZXh0ZW5kZWQiIC0gRm9yY2UgdGhlIGRyaXZlciB0byBkZXRlY3QgZXh0ZW5kZWQgZHJpdmUgdHJhbnNsYXRpb24KKyAgICAgICAgb24geW91ciBjb250cm9sbGVyLiAgVGhpcyBoZWxwcyB0aG9zZSBwZW9wbGUgd2hvIGhhdmUgY2FyZHMgd2l0aG91dAorICAgICAgICBhIFNFRVBST00gbWFrZSBzdXJlIHRoYXQgbGludXggYW5kIGFsbCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyB0aGluaworICAgICAgICB0aGUgc2FtZSB3YXkgYWJvdXQgeW91ciBoYXJkIGRyaXZlcy4KKworICAgICJhaWM3eHh4PXNjYnJhbSIgLSBTb21lIGNhcmRzIGhhdmUgZXh0ZXJuYWwgU0NCIFJBTSB0aGF0IGNhbiBiZSB1c2VkIHRvCisgICAgICAgIGdpdmUgdGhlIGNhcmQgbW9yZSBoYXJkd2FyZSBTQ0Igc2xvdHMuICBUaGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIHVzZQorCXRoYXQgU0NCIFJBTS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIHRoZSBkcml2ZXIgd29uJ3QgdG91Y2ggdGhlIFNDQgorCVJBTSBiZWNhdXNlIGl0IGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIG9uIGEgZmV3IGNhcmRzIG91dCB0aGVyZQorCShzdWNoIGFzIDM5ODUgY2xhc3MgY2FyZHMpLgorCQorICAgICJhaWM3eHh4PWlycV90cmlnZ2VyOngiIC0gUmVwbGFjZSB4IHdpdGggZWl0aGVyIDAgb3IgMSB0byBmb3JjZSB0aGUga2VybmVsCisgICAgICAgIHRvIHVzZSB0aGUgY29ycmVjdCBJUlEgdHlwZSBmb3IgeW91ciBjYXJkLiAgVGhpcyBvbmx5IGFwcGxpZXMgdG8gRUlTQQorICAgICAgICBiYXNlZCBjb250cm9sbGVycy4gIE9uIHRoZXNlIGNvbnRyb2xsZXJzLCAwIGlzIGZvciBFZGdlIHRyaWdnZXJlZAorICAgICAgICBpbnRlcnJ1cHRzLCBhbmQgMSBpcyBmb3IgTGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMuICBJZiB5b3UgYXJlbid0CisgICAgICAgIHN1cmUgb3IgZG9uJ3Qga25vdyB3aGljaCBJUlEgdHJpZ2dlciB0eXBlIHlvdXIgRUlTQSBjYXJkIHVzZXMsIHRoZW4KKyAgICAgICAgbGV0IHRoZSBrZXJuZWwgYXV0b2RldGVjdCB0aGUgdHJpZ2dlciB0eXBlLgorCQorICAgICJhaWM3eHh4PXZlcmJvc2UiIC0gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgeW91CisgICAgICAgIHNpbXBseSBzcGVjaWZ5IGFpYzd4eHg9dmVyYm9zZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgYXV0b21hdGljYWxseQorCXBpY2sgdGhlIGRlZmF1bHQgc2V0IG9mIHZlcmJvc2UgbWVzc2FnZXMgZm9yIHlvdSB0byBzZWUuCisJQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBjb21tYW5kIGFzIAorCSJhaWM3eHh4PXZlcmJvc2U6MHhYWFhYIiB3aGVyZSB0aGUgWCBlbnRyaWVzIGFyZSByZXBsYWNlZCB3aXRoCisJaGV4YWRlY2ltYWwgZGlnaXRzLiAgVGhpcyBvcHRpb24gaXMgYSBiaXQgZmllbGQgdHlwZSBvcHRpb24uICBGb3IKKwlhIGZ1bGwgbGlzdGluZyBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMsIHNlYXJjaCBmb3IgdGhlIAorCSNkZWZpbmUgVkVSQk9TRV94eHh4eHggbGluZXMgaW4gdGhlIGFpYzd4eHguYyBmaWxlLiAgSWYgeW91IHdhbnQKKwl2ZXJib3NlIG1lc3NhZ2VzLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHNpbXBseSB1c2UgdGhlCisJYWljN3h4eD12ZXJib3NlIHZhcmlhbnQgb2YgdGhpcyBjb21tYW5kLgorCQorICAgICJhaWM3eHh4PXBjaV9wYXJpdHk6eCIgLSBUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgZHJpdmVyCisgICAgICAgIGVuYWJsZXMgUENJIHBhcml0eSBlcnJvciBjaGVja2luZyBvbiB0aGUgUENJIGJ1cy4gIEJ5IGRlZmF1bHQsIHRoaXMKKyAgICAgICAgY2hlY2tpbmcgaXMgZGlzYWJsZWQuICBUbyBlbmFibGUgdGhlIGNoZWNrcywgc2ltcGx5IHNwZWNpZnkgcGNpX3Bhcml0eQorICAgICAgICB3aXRoIG5vIHZhbHVlIGFmdGVyd29yZHMuICBUbyByZXZlcnNlIHRoZSBwYXJpdHkgZnJvbSBldmVuIHRvIG9kZCwKKyAgICAgICAgc3VwcGx5IGFueSBudW1iZXIgb3RoZXIgdGhhbiAwIG9yIDI1NS4gIEluIHNob3J0OgorICAgICAgICAgIHBjaV9wYXJpdHkgICAgIC0gRXZlbiBwYXJpdHkgY2hlY2tpbmcgKGV2ZW4gaXMgdGhlIG5vcm1hbCBQQ0kgcGFyaXR5KQorICAgICAgICAgIHBjaV9wYXJpdHk6eCAgIC0gV2hlcmUgeCA+IDAsIE9kZCBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgICBwY2lfcGFyaXR5OjAgICAtIE5vIGNoZWNrIChkZWZhdWx0KQorICAgICAgICBOT1RFOiBJbiBvcmRlciB0byBnZXQgRXZlbiBQQ0kgcGFyaXR5IGNoZWNraW5nLCB5b3UgbXVzdCB1c2UgdGhlCisgICAgICAgIHZlcnNpb24gb2YgdGhlIG9wdGlvbiB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhlIDogYW5kIGEgbnVtYmVyIGF0CisgICAgICAgIHRoZSBlbmQgKHVubGVzcyB5b3Ugd2FudCB0byBlbnRlciBleGFjdGx5IDJeMzIgLSAxIGFzIHRoZSBudW1iZXIpLgorCQorICAgICJhaWM3eHh4PW5vX3Byb2JlIiAtIFRoaXMgb3B0aW9uIHdpbGwgZGlzYWJsZSB0aGUgcHJvYmluZyBmb3IgYW55IFZMQgorICAgICAgICBiYXNlZCAyODQyIGNvbnRyb2xsZXJzIGFuZCBhbnkgRUlTQSBiYXNlZCBjb250cm9sbGVycy4gIFRoaXMgaXMKKwluZWVkZWQgb24gY2VydGFpbiBuZXdlciBtb3RoZXJib2FyZHMgd2hlcmUgdGhlIG5vcm1hbCBFSVNBIEkvTyByYW5nZXMKKwloYXZlIGJlZW4gY2xhaW1lZCBieSBvdGhlciBQQ0kgZGV2aWNlcy4gIFByb2Jpbmcgb24gdGhvc2UgbWFjaGluZXMKKwl3aWxsIG9mdGVuIHJlc3VsdCBpbiB0aGUgbWFjaGluZSBjcmFzaGluZyBvciBzcG9udGFuZW91c2x5IHJlYm9vdGluZworCWR1cmluZyBzdGFydHVwLiAgRXhhbXBsZXMgb2YgbWFjaGluZXMgdGhhdCBuZWVkIHRoaXMgYXJlIHRoZQorCURlbGwgUG93ZXJFZGdlIDYzMDAgbWFjaGluZXMuCisKKyAgICAiYWljN3h4eD1zZWx0aW1lOjIiIC0gVGhpcyBvcHRpb24gY29udHJvbHMgaG93IGxvbmcgdGhlIGNhcmQgd2FpdHMKKyAgICAgICAgZHVyaW5nIGEgZGV2aWNlIHNlbGVjdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIGRldmljZSB0byByZXNwb25kLgorCVRoZSBvcmlnaW5hbCBTQ1NJIHNwZWMgc2F5cyB0aGF0IHRoaXMgInNob3VsZCBiZSIgMjU2bXMuICBUaGlzCisJaXMgZ2VuZXJhbGx5IG5vdCByZXF1aXJlZCB3aXRoIG1vZGVybiBkZXZpY2VzLiAgSG93ZXZlciwgc29tZQorCXZlcnkgb2xkIFNDU0kgSSBkZXZpY2VzIG5lZWQgdGhlIGZ1bGwgMjU2bXMuICBNb3N0IG1vZGVybiBkZXZpY2VzCisJY2FuIHJ1biBmaW5lIHdpdGggb25seSA2NG1zLiAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzCisJNjRtcy4gIElmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGlzIG9wdGlvbiwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZworCXRhYmxlIHRvIHNldCB0aGUgcHJvcGVyIHZhbHVlIGluIHRoZSBleGFtcGxlIGFib3ZlOgorCSAgMCAgLSAgMjU2bXMKKwkgIDEgIC0gIDEyOG1zCisJICAyICAtICAgNjRtcworCSAgMyAgLSAgIDMybXMKKwkKKyAgICAiYWljN3h4eD1wYW5pY19vbl9hYm9ydCIgLSBUaGlzIG9wdGlvbiBpcyBmb3IgZGVidWdnaW5nIGFuZCB3aWxsIGNhdXNlCisgICAgICAgIHRoZSBkcml2ZXIgdG8gcGFuaWMgdGhlIGxpbnV4IGtlcm5lbCBhbmQgZnJlZXplIHRoZSBzeXN0ZW0gdGhlIGZpcnN0CisJdGltZSB0aGUgZHJpdmVycyBhYm9ydCBvciByZXNldCByb3V0aW5lcyBhcmUgY2FsbGVkLiAgVGhpcyBpcyBtb3N0CisJaGVscGZ1bCB3aGVuIHNvbWUgcHJvYmxlbSBjYXVzZXMgaW5maW5pdGUgcmVzZXQgbG9vcHMgdGhhdCBzY3JvbGwgdG9vCisJZmFzdCB0byBzZWUuICBCeSB1c2luZyB0aGlzIG9wdGlvbiwgeW91IGNhbiB3cml0ZSBkb3duIHdoYXQgdGhlIGVycm9ycworCWFjdHVhbGx5IGFyZSBhbmQgc2VuZCB0aGF0IGluZm9ybWF0aW9uIHRvIG1lIHNvIGl0IGNhbiBiZSBmaXhlZC4KKwkKKyAgICAiYWljN3h4eD1kdW1wX2NhcmQiIC0gVGhpcyBvcHRpb24gd2lsbCBwcmludCBvdXQgdGhlICplbnRpcmUqIHNldCBvZgorICAgICAgICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBvbiB0aGUgY2FyZCBkdXJpbmcgdGhlIGluaXQgc2VxdWVuY2UuICBUaGlzCisJaXMgYSBkZWJ1Z2dpbmcgYWlkIHVzZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCBzdGF0ZSB0aGUgY2FyZCBpcyBpbgorCXdoZW4gd2UgZmluYWxseSBmaW5pc2ggb3VyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiAgSWYgeW91IGRvbid0CisJaGF2ZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBjaGlwc2V0cywgdGhpcyB3aWxsIGRvIHlvdSBhYnNvbHV0ZWx5CisJbm8gZ29vZCB1bmxlc3MgeW91IGFyZSBzaW1wbHkgdHJ5aW5nIHRvIHdyaXRlIGFsbCB0aGUgaW5mb3JtYXRpb24KKwlkb3duIGluIG9yZGVyIHRvIHNlbmQgaXQgdG8gbWUuCisJCisgICAgImFpYzd4eHg9ZHVtcF9zZXF1ZW5jZXIiIC0gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgYWJvdmUgb3B0aW9ucyBleGNlcHQKKyAgICAgICAgdGhhdCBpbnN0ZWFkIG9mIGR1bXBpbmcgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIG9uIHRoZSBjYXJkLCB0aGlzCisJb3B0aW9uIGR1bXBzIHRoZSBjb250ZW50cyBvZiB0aGUgc2VxdWVuY2VyIHByb2dyYW0gUkFNLiAgVGhpcyBnaXZlcworCXRoZSBhYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgZG93bmxvYWRlZCB0byB0aGUKKwljYXJkJ3Mgc2VxdWVuY2VyIGFyZSBpbmRlZWQgd2hhdCB0aGV5IGFyZSBzdXBwb3NzZWQgdG8gYmUuICBBZ2FpbiwKKwl1bmxlc3MgeW91IGhhdmUgZG9jdW1lbnRhdGlvbiB0byB0ZWxsIHlvdSBob3cgdG8gaW50ZXJwcmV0IHRoZXNlCisJbnVtYmVycywgdGhlbiBpdCBpcyB0b3RhbGx5IHVzZWxlc3MuCisJCisgICAgImFpYzd4eHg9b3ZlcnJpZGVfdGVybToweGZmZmZmZmZmIiAtIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZm9yY2UgdGhlCisgICAgCXRlcm1pbmF0aW9uIG9uIHlvdXIgU0NTSSBjb250cm9sbGVycyB0byBhIHBhcnRpY3VsYXIgc2V0dGluZy4gIFRoaXMKKwlpcyBhIGJpdCBtYXNrIHZhcmlhYmxlIHRoYXQgYXBwbGllcyBmb3IgdXAgdG8gOCBhaWM3eHh4IFNDU0kgY2hhbm5lbHMuCisJRWFjaCBjaGFubmVsIGdldHMgNCBiaXRzLCBkaXZpZGVkIGFzIGZvbGxvd3M6CisJYml0ICAgMyAgIDIgICAxICAgMAorCSAgICAgIHwgICB8ICAgfCAgIEVuYWJsZS9EaXNhYmxlIFNpbmdsZSBFbmRlZCBMb3cgQnl0ZSBUZXJtaW5hdGlvbgorCSAgICAgIHwgICB8ICAgRW4vRGlzYWJsZSBTaW5nbGUgRW5kZWQgSGlnaCBCeXRlIFRlcm1pbmF0aW9uCisJICAgICAgfCAgIEVuL0Rpc2FibGUgTG93IEJ5dGUgTFZEIFRlcm1pbmF0aW9uCisJICAgICAgRW4vRGlzYWJsZSBIaWdoIEJ5dGUgTFZEIFRlcm1pbmF0aW9uCisKKwlUaGUgdXBwZXIgMiBiaXRzIHRoYXQgZGVhbCB3aXRoIExWRCB0ZXJtaW5hdGlvbiBvbmx5IGFwcGx5IHRvIFVsdHJhMgorCWNvbnRyb2xsZXJzLiAgRnV0aGVybW9yZSwgZHVlIHRvIHRoZSBjdXJyZW50IFVsdHJhMiBjb250cm9sbGVyCisJZGVzaWducywgdGhlc2UgYml0cyBhcmUgdGllZCB0b2dldGhlciBzdWNoIHRoYXQgc2V0dGluZyBlaXRoZXIgYml0CisJZW5hYmxlcyBib3RoIGxvdyBhbmQgaGlnaCBieXRlIExWRCB0ZXJtaW5hdGlvbi4gIEl0IGlzIG5vdCBwb3NzaWJsZQorCXRvIG9ubHkgc2V0IGhpZ2ggb3IgbG93IGJ5dGUgTFZEIHRlcm1pbmF0aW9uIGluIHRoaXMgbWFubmVyLiAgVGhpcyBpcworCWFuIGFydGlmYWN0IG9mIHRoZSBCSU9TIGRlZmluaXRpb24gb24gVWx0cmEyIGNvbnRyb2xsZXJzLiAgRm9yIG90aGVyCisJY29udHJvbGxlcnMsIHRoZSBvbmx5IGltcG9ydGFudCBiaXRzIGFyZSB0aGUgdHdvIGxvd2VzdCBiaXRzLiAgU2V0dGluZworCXRoZSBoaWdoZXIgYml0cyBvbiBub24tVWx0cmEyIGNvbnRyb2xsZXJzIGhhcyBubyBlZmZlY3QuICBBIGZldworCWV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcyBvcHRpb246CisKKwlFbmFibGUgbG93IGFuZCBoaWdoIGJ5dGUgdGVybWluYXRpb24gb24gYSBub24tdWx0cmEyIGNvbnRyb2xsZXIgdGhhdAorCWlzIHRoZSBmaXJzdCBhaWM3eHh4IGNvbnRyb2xsZXIgKHRoZSBjb3JyZWN0IGJpdHMgYXJlIDAwMTEpLCAKKwlhaWM3eHh4PW92ZXJyaWRlX3Rlcm06MHgzCisKKwlFbmFibGUgYWxsIHRlcm1pbmF0aW9uIG9uIHRoZSB0aGlyZCBhaWM3eHh4IGNvbnRyb2xsZXIsIGhpZ2ggYnl0ZQorCXRlcm1pbmF0aW9uIG9uIHRoZSBzZWNvbmQgYWljN3h4eCBjb250cm9sbGVyLCBhbmQgbG93IGFuZCBoaWdoIGJ5dGUKKwlTRSB0ZXJtaW5hdGlvbiBvbiB0aGUgZmlyc3QgYWljN3h4eCBjb250cm9sbGVyIAorCShiaXRzIGFyZSAxMTExIDAwMTAgMDAxMSksIAorCWFpYzd4eHg9b3ZlcnJpZGVfdGVybToweGYyMworCQorCU5vIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBtYWtlIHRoaXMgb3B0aW9uIG5vbi1jcnlwdGljLiAgSXQgcmVhbGx5CisJc2hvdWxkbid0IGJlIHVzZWQgZXhjZXB0IGluIGRpcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGlmIHRoYXQgaGFwcGVucywKKwlJJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgdGVsbGluZyB5b3Ugd2hhdCB0byBzZXQgdGhpcyB0byBhbnl3YXkgOikKKworICAgICJhaWM3eHh4PXN0cHdsZXY6MHhmZmZmZmZmZiIgLSBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIFNUUFdMRVYKKyAgICAgICAgYml0IGluIHRoZSBERVZDT05GSUcgUENJIHJlZ2lzdGVyLiAgQ3VycmVudGx5LCB0aGlzIGlzIG9uZSBvZiB0aGUKKwl2ZXJ5IGZldyByZWdpc3RlcnMgdGhhdCB3ZSBoYXZlIGFic29sdXRlbHkgKm5vKiB3YXkgb2YgZGV0ZWN0aW5nCisJd2hhdCB0aGUgdmFyaWFibGUgc2hvdWxkIGJlLiAgSXQgZGVwZW5kcyBlbnRpcmVseSBvbiBob3cgdGhlIGNoaXBzZXQKKwlhbmQgZXh0ZXJuYWwgdGVybWluYXRvcnMgd2VyZSBjb3VwbGVkIGJ5IHRoZSBjYXJkL21vdGhlcmJvYXJkIG1ha2VyLgorCUZ1cnRoZXIsIGEgY2hpcCByZXNldCAoYXQgcG93ZXIgdXApIGFsd2F5cyBzZXRzIHRoaXMgYml0IHRvIDAuICBJZgorCXRoZXJlIGlzIG5vIEJJT1MgdG8gcnVuIG9uIHRoZSBjaGlwc2V0L2NhcmQgKHN1Y2ggYXMgd2l0aCBhIDI5MTBDCisJb3IgYSBtb3RoZXJib2FyZCBjb250cm9sbGVyIHdpdGggdGhlIEJJT1MgdG90YWxseSBkaXNhYmxlZCkgdGhlbgorCXRoZSB2YXJpYWJsZSBtYXkgbm90IGdldCBzZXQgcHJvcGVybHkuICBPZiBjb3Vyc2UsIGlmIHRoZSBwcm9wZXIKKwlzZXR0aW5nIHdhcyAwLCB0aGVuIHRoYXQncyB3aGF0IGl0IHdvdWxkIGJlIGFmdGVyIHRoZSByZXNldCwgYnV0IGlmCisJdGhlIHByb3BlciBzZXR0aW5nIGlzIGFjdHVhbGx5IDEuLi4uLnlvdSBnZXQgdGhlIHBpY3R1cmUuICBOb3csIHNpbmNlCisJd2UgY2FuJ3QgZGV0ZWN0IHRoaXMgYXQgYWxsLCBJJ3ZlIGFkZGVkIHRoaXMgb3B0aW9uIHRvIGZvcmNlIHRoZQorCXNldHRpbmcuICBJZiB5b3UgaGF2ZSBhIEJJT1Mgb24geW91ciBjb250cm9sbGVyIHRoZW4geW91IHNob3VsZCBuZXZlcgorCW5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLiAgSG93ZXZlciwgaWYgeW91IGFyZSBoYXZpbmcgbG90cyBvZiBTQ1NJCisJcmVzZXQgcHJvYmxlbXMgYW5kIGNhbid0IHNlZW0gdG8gZ2V0IHRoZW0ga25vY2tlZCBvdXQsIHRoaXMgbWF5IGhlbHAuCisKKwlIZXJlJ3MgYSB0ZXN0IHRvIGtub3cgZm9yIGNlcnRhaW4gaWYgeW91IG5lZWQgdGhpcyBvcHRpb24uICBNYWtlCisJYSBib290IGZsb3BweSB0aGF0IHlvdSBjYW4gdXNlIHRvIGJvb3QgeW91ciBjb21wdXRlciB1cCBhbmQgdGhhdAorCXdpbGwgZGV0ZWN0IHRoZSBhaWM3eHh4IGNvbnRyb2xsZXIuICBOZXh0LCBwb3dlciBkb3duIHlvdXIgY29tcHV0ZXIuCisJV2hpbGUgaXQncyBkb3duLCB1bnBsdWcgYWxsIFNDU0kgY2FibGVzIGZyb20geW91ciBBZGFwdGVjIFNDU0kKKwljb250cm9sbGVyLiAgQm9vdCB0aGUgc3lzdGVtIGJhY2sgdXAgdG8gdGhlIEFkYXB0ZWMgRVotU0NTSSBCSU9TCisJYW5kIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGVybWluYXRpb24gaXMgZW5hYmxlZCBvbiB5b3VyIGFkYXB0ZXIgKGlmCisJeW91IGhhdmUgYW4gQWRhcHRlYyBCSU9TIG9mIGNvdXJzZSkuICBOZXh0LCBib290IHVwIHRoZSBmbG9wcHkgeW91CisJbWFkZSBhbmQgd2FpdCBmb3IgaXQgdG8gZGV0ZWN0IHRoZSBhaWM3eHh4IGNvbnRyb2xsZXIuICBJZiB0aGUga2VybmVsCisJZmluZHMgdGhlIGNvbnRyb2xsZXIgZmluZSwgc2F5cyBzY3NpIDogeCBob3N0cyBhbmQgdGhlbiB0cmllcyB0bworCWRldGVjdCB5b3VyIGRldmljZXMgbGlrZSBub3JtYWwsIHVwIHRvIHRoZSBwb2ludCB3aGVyZSBpdCBmYWlscyB0bworCW1vdW50IHlvdXIgcm9vdCBmaWxlIHN5c3RlbSBhbmQgcGFuaWNzLCB0aGVuIHlvdSdyZSBmaW5lLiAgSWYsIG9uCisJdGhlIG90aGVyIGhhbmQsIHRoZSBzeXN0ZW0gZ29lcyBpbnRvIGFuIGluZmluaXRlIHJlc2V0IGxvb3AsIHRoZW4KKwl5b3UgbmVlZCB0byB1c2UgdGhpcyBvcHRpb24gYW5kL29yIHRoZSBwcmV2aW91cyBvcHRpb24gdG8gZm9yY2UgdGhlCisJcHJvcGVyIHRlcm1pbmF0aW9uIHNldHRpbmdzIG9uIHlvdXIgY29udHJvbGxlci4gICBJZiB0aGlzIGhhcHBlbnMsCisJdGhlbiB5b3UgbmV4dCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB5b3VyIHNldHRpbmdzIHNob3VsZCBiZS4KKworCVRvIGZpbmQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MsIHBvd2VyIHlvdXIgbWFjaGluZSBiYWNrIGRvd24sIGNvbm5lY3QKKwliYWNrIHVwIHRoZSBTQ1NJIGNhYmxlcywgYW5kIGJvb3QgYmFjayBpbnRvIHlvdXIgbWFjaGluZSBsaWtlIG5vcm1hbC4KKwlIb3dldmVyLCBib290IHdpdGggdGhlIGFpYzd4eHg9dmVyYm9zZToweDM5IG9wdGlvbi4gIFJlY29yZCB0aGUKKwlpbml0aWFsIERFVkNPTkZJRyB2YWx1ZXMgZm9yIGVhY2ggb2YgeW91ciBhaWM3eHh4IGNvbnRyb2xsZXJzIGFzCisJdGhleSBhcmUgbGlzdGVkLCBhbmQgYWxzbyByZWNvcmQgd2hhdCB0aGUgbWFjaGluZSBpcyBkZXRlY3RpbmcgYXMKKwl0aGUgcHJvcGVyIHRlcm1pbmF0aW9uIG9uIHlvdXIgY29udHJvbGxlcnMuICBOT1RFOiB0aGUgb3JkZXIgaW4KKwl3aGljaCB0aGUgaW5pdGlhbCBERVZDT05GSUcgdmFsdWVzIGFyZSBwcmludGVkIG91dCBpcyBub3QgZ2F1cmFudGVlZAorCXRvIGJlIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBTQ1NJIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkLiAgVGhlCisJYWJvdmUgb3B0aW9uIGFuZCB0aGlzIG9wdGlvbiBib3RoIHdvcmsgb24gdGhlIG9yZGVyIG9mIHRoZSBTQ1NJCisJY29udHJvbGxlcnMgYXMgdGhleSBhcmUgcmVnaXN0ZXJlZCwgc28gbWFrZSBzdXJlIHlvdSBtYXRjaCB0aGUgcmlnaHQKKwlERVZDT05GSUcgdmFsdWVzIHdpdGggdGhlIHJpZ2h0IGNvbnRyb2xsZXJzIGlmIHlvdSBoYXZlIG1vcmUgdGhhbgorCW9uZSBhaWM3eHh4IGNvbnRyb2xsZXIuCisKKwlPbmNlIHlvdSBoYXZlIHRoZSBkZXRlY3RlZCB0ZXJtaW5hdGlvbiBzZXR0aW5ncyBhbmQgdGhlIGluaXRpYWwKKwlERVZDT05GSUcgdmFsdWVzIGZvciBlYWNoIGNvbnRyb2xsZXIsIHRoZW4gZmlndXJlIG91dCB3aGF0IHRoZQorCXRlcm1pbmF0aW9uIG9uIGVhY2ggb2YgdGhlIGNvbnRyb2xsZXJzICpzaG91bGQqIGJlLiAgSG9wZWZ1bGx5LCB0aGF0CisJcGFydCBpcyBjb3JyZWN0LCBidXQgaXQgY291bGQgcG9zc2libHkgYmUgd3JvbmcgaWYgdGhlcmUgaXMKKwlib2d1cyBjYWJsZSBkZXRlY3Rpb24gbG9naWMgb24geW91ciBjb250cm9sbGVyIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorCUlmIGFsbCB0aGUgY29udHJvbGxlcnMgaGF2ZSB0aGUgY29ycmVjdCB0ZXJtaW5hdGlvbiBzZXR0aW5ncywgdGhlbgorCWRvbid0IHNldCB0aGUgYWljN3h4eD1vdmVycmlkZV90ZXJtIHZhcmlhYmxlIGF0IGFsbCwgbGVhdmUgaXQgYWxvbmUuCisJTmV4dCwgb24gYW55IGNvbnRyb2xsZXJzIHRoYXQgZ28gaW50byBhbiBpbmZpbml0ZSByZXNldCBsb29wIHdoZW4KKwl5b3UgdW5wbHVnIGFsbCB0aGUgU0NTSSBjYWJsZXMsIGdldCB0aGUgc3RhcnRpbmcgREVWQ09ORklHIHZhbHVlLgorCUlmIHRoZSBpbml0aWFsIERFVkNPTkZJRyB2YWx1ZSBpcyBkaXZpc2libGUgYnkgMiwgdGhlbiB0aGUgY29ycmVjdAorCXNldHRpbmcgZm9yIHRoYXQgY29udHJvbGxlciBpcyAwLiAgSWYgaXQncyBhbiBvZGQgbnVtYmVyLCB0aGVuCisJdGhlIGNvcnJlY3Qgc2V0dGluZyBmb3IgdGhhdCBjb250cm9sbGVyIGlzIDEuICBGb3IgYW55IG90aGVyCisJY29udHJvbGxlcnMgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBpbmZpbml0ZSByZXNldCBwcm9ibGVtLCB0aGVuIHJldmVyc2UKKwl0aGUgYWJvdmUgb3B0aW9ucy4gIElmIERFVkNPTkZJRyB3YXMgZXZlbiwgdGhlbiB0aGUgY29ycmVjdCBzZXR0aW5nCisJaXMgMSwgaWYgbm90IHRoZW4gdGhlIGNvcnJlY3Qgc2V0dGluZyBpcyAwLgorCisJTm93IHRoYXQgeW91IGtub3cgd2hhdCB0aGUgY29ycmVjdCBzZXR0aW5nIHdhcyBmb3IgZWFjaCBjb250cm9sbGVyLAorCXdlIG5lZWQgdG8gZW5jb2RlIHRoYXQgaW50byB0aGUgYWljN3h4eD1zdHB3bGV2OjB4Li4uIHZhcmlhYmxlLgorCVRoaXMgdmFyaWFibGUgaXMgYSBiaXQgZmllbGQgZW5jb2RlZCB2YXJpYWJsZS4gIEJpdCAwIGlzIGZvciB0aGUgZmlyc3QKKwlhaWM3eHh4IGNvbnRyb2xsZXIsIGJpdCAxIGZvciB0aGUgbmV4dCwgZXRjLiAgUHV0IGFsbCB0aGVzZSBiaXRzCisJdG9nZXRoZXIgYW5kIHlvdSBnZXQgYSBudW1iZXIuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHRoaXJkIGFpYzd4eHgKKwluZWVkZWQgYSAxLCBidXQgdGhlIHNlY29uZCBhbmQgZmlyc3QgYm90aCBuZWVkZWQgYSAwLCB0aGVuIHRoZSBiaXRzCisJd291bGQgYmUgMTAwIGluIGJpbmFyeS4gIFRoaXMgdGhlbiB0cmFuc2xhdGVzIHRvIDB4MDQuICBZb3Ugd291bGQKKwl0aGVyZWZvcmUgc2V0IGFpYzd4eHg9c3Rwd2xldjoweDA0LiAgVGhpcyBpcyBmYWlybHkgc3RhbmRhcmQgYmluYXJ5CisJdG8gaGV4YWRlY2ltYWwgY29udmVyc2lvbnMgaGVyZS4gIElmIHlvdSBhcmVuJ3QgdXAgdG8gc3BlZWQgb24gdGhlCisJYmluYXJ5LT5oZXggY29udmVyc2lvbiB0aGVuIHNlbmQgYW4gZW1haWwgdG8gdGhlIGFpYzd4eHggbWFpbGluZworCWxpc3QgYW5kIHNvbWVvbmUgY2FuIGhlbHAgeW91IG91dC4KKworICAgICJhaWM3eHh4PXRhZ19pbmZvOnt7OCw4Li59LHs4LDguLn0sLi59IiAtIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZQorICAgICAgICBvciBlbmFibGUgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcgKFRDUSkgb24gc3BlY2lmaWMgZGV2aWNlcy4gIEFzIG9mCisJZHJpdmVyIHZlcnNpb24gNS4xLjExLCBUQ1EgaXMgbm93IGVpdGhlciBvbiBvciBvZmYgYnkgZGVmYXVsdAorCWFjY29yZGluZyB0byB0aGUgc2V0dGluZyB5b3UgY2hvb3NlIGR1cmluZyB0aGUgbWFrZSBjb25maWcgcHJvY2Vzcy4KKwlJbiBvcmRlciB0byBlbi9kaXNhYmxlIFRDUSBmb3IgY2VydGlhbiBkZXZpY2VzIGF0IGJvb3QgdGltZSwgYSB1c2VyCisJbWF5IHVzZSB0aGlzIGJvb3QgcGFyYW0uICBUaGUgZHJpdmVyIHdpbGwgdGhlbiBwYXJzZSB0aGlzIG1lc3NhZ2Ugb3V0CisgICAgICAgIGFuZCBlbi9kaXNhYmxlIHRoZSBzcGVjaWZpYyBkZXZpY2UgZW50cmllcyB0aGF0IGFyZSBwcmVzZW50IGJhc2VkIHVwb24KKyAgICAgICAgdGhlIHZhbHVlIGdpdmVuLiAgVGhlIHBhcmFtIGxpbmUgaXMgcGFyc2VkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgorCisgICAgICAgICAgeyAtIGZpcnN0IGluc3RhbmNlIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGhpcyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICAgICAgICAgIHNlY29uZCBpbnN0YW5jZSBpcyB0aGUgc3RhcnQgb2YgZW50cmllcyBmb3IgYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgIGRldmljZSBlbnRyeQorICAgICAgICAgIH0gLSBlbmQgdGhlIGVudHJpZXMgZm9yIGEgcGFydGljdWxhciBob3N0IGFkYXB0ZXIsIG9yIGVuZCB0aGUgZW50aXJlCisgICAgICAgICAgICAgIHNldCBvZiBwYXJhbWV0ZXIgZW50cmllcworICAgICAgICAgICwgLSBtb3ZlIHRvIG5leHQgZW50cnkuICBJbnNpZGUgb2YgYSBzZXQgb2YgZGV2aWNlIGVudHJpZXMsIHRoaXMKKyAgICAgICAgICAgICAgbW92ZXMgdXMgdG8gdGhlIG5leHQgZGV2aWNlIG9uIHRoZSBsaXN0LiAgT3V0c2lkZSBvZiBkZXZpY2UKKyAgICAgICAgICAgICAgZW50cmllcywgdGhpcyBtb3ZlcyB1cyB0byB0aGUgbmV4dCBob3N0IGFkYXB0ZXIKKyAgICAgICAgICAuIC0gU2FtZSBlZmZlY3QgYXMgLCBidXQgaXMgc2FmZSB0byB1c2Ugd2l0aCBpbnNtb2QuCisgICAgICAgICAgeCAtIHRoZSBudW1iZXIgdG8gZW50ZXIgaW50byB0aGUgYXJyYXkgYXQgdGhpcyBwb3NpdGlvbi4gIAorICAgICAgICAgICAgICAwID0gRW5hYmxlIHRhZ2dlZCBxdWV1ZWluZyBvbiB0aGlzIGRldmljZSBhbmQgdXNlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICBxdWV1ZSBkZXB0aAorICAgICAgICAgICAgICAxLTI1NCA9IEVuYWJsZSB0YWdnZWQgcXVldWVpbmcgb24gdGhpcyBkZXZpY2UgYW5kIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGFzIHRoZSBxdWV1ZSBkZXB0aAorICAgICAgICAgICAgICAyNTUgPSBEaXNhYmxlIHRhZ2dlZCBxdWV1ZWluZyBvbiB0aGlzIGRldmljZS4KKyAgICAgICAgICAgICAgTm90ZTogYW55dGhpbmcgYWJvdmUgMzIgZm9yIGFuIGFjdHVhbCBxdWV1ZSBkZXB0aCBpcyB3YXN0ZWZ1bAorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IHJlY29tbWVuZGVkLgorCisgICAgICAgIEEgZmV3IGV4YW1wbGVzIG9mIGhvdyB0aGlzIGNhbiBiZSB1c2VkOgorCisgICAgICAgIHRhZ19pbmZvOnt7OCwxMiwsMCwsMjU1LDR9fQorICAgICAgICAgIFRoaXMgbGluZSB3aWxsIG9ubHkgZWZmZWN0IHRoZSBmaXJzdCBhaWM3eHh4IGNhcmQgcmVnaXN0ZXJlZC4gIEl0CisgICAgICAgICAgd2lsbCBzZXQgc2NzaSBpZCAwIHRvIGEgcXVldWUgZGVwdGggb2YgOCwgaWQgMSB0byAxMiwgbGVhdmUgaWQgMgorICAgICAgICAgIGF0IHRoZSBkZWZhdWx0LCBzZXQgaWQgMyB0byB0YWdnZWQgcXVldWVpbmcgZW5hYmxlZCBhbmQgdXNlIHRoZQorICAgICAgICAgIGRlZmF1bHQgcXVldWUgZGVwdGgsIGlkIDQgZGVmYXVsdCwgaWQgNSBkaXNhYmxlZCwgYW5kIGlkIDYgdG8gNC4KKyAgICAgICAgICBBbnkgbm90IHNwZWNpZmllZCBlbnRyaWVzIHN0YXkgYXQgdGhlIGRlZmF1bHQgdmFsdWUsIHJlcGVhdGVkCisgICAgICAgICAgY29tbWFzIHdpdGggbm8gdmFsdWUgc3BlY2lmaWVkIHdpbGwgc2ltcGx5IGluY3JlbWVudCB0byB0aGUgbmV4dCBpZAorICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgYW55dGhpbmcgZm9yIHRoZSBtaXNzaW5nIHZhbHVlcy4KKworICAgICAgICB0YWdfaW5mbzp7LCwseywsLDI1NX19CisgICAgICAgICAgRmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGFkYXB0ZXJzIGF0IGRlZmF1bHQgdmFsdWVzLiAgRm91cnRoCisgICAgICAgICAgYWRhcHRlciwgaWQgMyBpcyBkaXNhYmxlZC4gIE5vdGljZSB0aGF0IGxlYWRpbmcgY29tbWFzIHNpbXBseQorCSAgaW5jcmVtZW50IHdoYXQgdGhlIGZpcnN0IG51bWJlciBlZmZlY3RzLCBhbmQgdGhlcmUgYXJlIG5vIG5lZWQKKwkgIGZvciB0cmFpbGluZyBjb21tYXMuICBXaGVuIHlvdSBjbG9zZSBvdXQgYW4gYWRhcHRlciwgb3IgdGhlCisJICBlbnRpcmUgZW50cnksIGFueXRoaW5nIG5vdCBleHBsaWNpdGx5IHNldCBzdGF5cyBhdCB0aGUgZGVmYXVsdAorCSAgdmFsdWUuCisKKyAgICAgICAgQSBmaW5hbCBub3RlIG9uIHRoaXMgb3B0aW9uLiAgVGhlIHNjYW5uZXIgSSB1c2VkIGZvciB0aGlzIGlzbid0CisgICAgICAgIHBlcmZlY3Qgb3IgaGlnaGx5IHJvYnVzdC4gIElmIHlvdSBtZXNzIHRoZSBsaW5lIHVwLCB0aGUgd29yc3QgdGhhdAorICAgICAgICBzaG91bGQgaGFwcGVuIGlzIHRoYXQgdGhlIGxpbmUgd2lsbCBnZXQgaWdub3JlZC4gIElmIHlvdSBkb24ndAorICAgICAgICBjbG9zZSBvdXQgdGhlIGVudGlyZSBlbnRyeSB3aXRoIHRoZSBmaW5hbCBicmFja2V0LCB0aGVuIGFueSBvdGhlcgorICAgICAgICBhaWM3eHh4IG9wdGlvbnMgYWZ0ZXIgdGhpcyB3aWxsIGdldCBpZ25vcmVkLiAgU28sIGluIGdlbmVyYWwsIGJlCisgICAgICAgIHN1cmUgb2Ygd2hhdCB5b3UgYXJlIGVudGVyaW5nLCBhbmQgYWZ0ZXIgeW91IGhhdmUgaXQgcmlnaHQsIGp1c3QKKyAgICAgICAgYWRkIGl0IHRvIHRoZSBsaWxvLmNvbmYgZmlsZSBzbyB0aGVyZSB3b24ndCBiZSBhbnkgbWlzdGFrZXMuICBBcworICAgICAgICBhIG1lYW5zIG9mIGNoZWNraW5nIHRoaXMgcGFyc2VyLCB0aGUgZW50aXJlIHRhZ19pbmZvIGFycmF5IGZvcgorICAgICAgICBlYWNoIGNhcmQgaXMgbm93IHByaW50ZWQgb3V0IGluIHRoZSAvcHJvYy9zY3NpL2FpYzd4eHgveCBmaWxlLiAgWW91CisgICAgICAgIGNhbiB1c2UgdGhhdCB0byB2ZXJpZnkgdGhhdCB5b3VyIG9wdGlvbnMgd2VyZSBwYXJzZWQgY29ycmVjdGx5LiAKKyAgICAgICAgCisgICAgQm9vdCBjb21tYW5kIGxpbmUgb3B0aW9ucyBtYXkgYmUgY29tYmluZWQgdG8gZm9ybSB0aGUgcHJvcGVyIHNldCBvZiBvcHRpb25zCisgICAgYSB1c2VyIG1pZ2h0IG5lZWQuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyB2YWxpZDoKKyAgICAKKyAgICBhaWM3eHh4PXZlcmJvc2UsZXh0ZW5kZWQsaXJxX3RyaWdnZXI6MQorICAgIAorICAgIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgaW5kaXZpZHVhbCBvcHRpb25zIGJlIHNlcGFyYXRlZCBieSBhIGNvbW1hIG9yCisgICAgYSBwZXJpb2Qgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgCisgIE1vZHVsZSBMb2FkaW5nIGNvbW1hbmQgb3B0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBXaGVuIGxvYWRpbmcgdGhlIGFpYzd4eHggZHJpdmVyIGFzIGEgbW9kdWxlLCB0aGUgZXhhY3Qgc2FtZSBvcHRpb25zIGFyZQorICAgIGF2YWlsYWJsZSB0byB0aGUgdXNlci4gIEhvd2V2ZXIsIHRoZSBzeW50YXggdG8gc3BlY2lmeSB0aGUgb3B0aW9ucyBjaGFuZ2VzCisgICAgc2xpZ2h0bHkuICBGb3IgaW5zbW9kLCB5b3UgbmVlZCB0byB3cmFwIHRoZSBhaWM3eHh4PSBhcmd1bWVudCBpbiBxdW90ZXMKKyAgICBhbmQgcmVwbGFjZSBhbGwgJywnIHdpdGggJy4nLiAgU28sIGZvciBleGFtcGxlLCBhIHZhbGlkIGluc21vZCBsaW5lCisgICAgd291bGQgYmU6CisKKyAgICBpbnNtb2QgYWljN3h4eCBhaWM3eHh4PSd2ZXJib3NlLmlycV90cmlnZ2VyOjEuZXh0ZW5kZWQnCisKKyAgICBUaGlzIGxpbmUgc2hvdWxkIHJlc3VsdCBpbiB0aGUgKmV4YWN0KiBzYW1lIGJlaGF2aW91ciBhcyBpZiB5b3UgdHlwZWQKKyAgICBpdCBpbiBhdCB0aGUgbGlsbyBwcm9tcHQgYW5kIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbAorICAgIGluc3RlYWQgb2YgYmVpbmcgYSBtb2R1bGUuICBUaGUgcmVhc29uIGZvciB0aGUgc2luZ2xlIHF1b3RlIGlzIHNvIHRoYXQKKyAgICB0aGUgc2hlbGwgd29uJ3QgdHJ5IHRvIGludGVycHJldCBhbnl0aGluZyBpbiB0aGUgbGluZSwgc3VjaCBhcyB7LiAKKyAgICBJbnNtb2QgYXNzdW1lcyBhbnkgb3B0aW9ucyBzdGFydGluZyB3aXRoIGEgbGV0dGVyIGluc3RlYWQgb2YgYSBudW1iZXIKKyAgICBpcyBhIGNoYXJhY3RlciBzdHJpbmcgKHdoaWNoIGlzIHdoYXQgd2Ugd2FudCkgYW5kIGJ5IHN3aXRjaGluZyBhbGwgb2YKKyAgICB0aGUgY29tbWFzIHRvIHBlcmlvZHMsIGluc21vZCB3b24ndCBpbnRlcnByZXQgdGhpcyBhcyBtb3JlIHRoYW4gb25lCisgICAgc3RyaW5nIGFuZCB3cml0ZSBqdW5rIGludG8gb3VyIGJpbmFyeSBpbWFnZS4gIEkgY29uc2lkZXIgaXQgYSBidWcgaW4KKyAgICB0aGUgaW5zbW9kIHByb2dyYW0gdGhhdCBldmVuIGlmIHlvdSB3cmFwIHlvdXIgc3RyaW5nIGluIHF1b3RlcyAocXVvdGVzCisgICAgdGhhdCBwYXNzIHRoZSBzaGVsbCBtaW5kIHlvdSBhbmQgdGhhdCBpbnNtb2Qgc2VlcykgaXQgc3RpbGwgdHJlYXRlcworICAgIGEgY29tbWEgaW5zaWRlIG9mIHRob3NlIHF1b3RlcyBhcyBzdGFydGluZyBhIG5ldyB2YXJpYWJsZSwgcmVzdWx0aW5nCisgICAgaW4gbWVtb3J5IHNjcmliYmxlcyBpZiB5b3UgZG9uJ3Qgc3dpdGNoIHRoZSBjb21tYXMgdG8gcGVyaW9kcy4KKworCisgIEtlcm5lbCBDb21waWxlIG9wdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlIHZhcmlvdXMga2VybmVsIGNvbXBpbGUgdGltZSBvcHRpb25zIGZvciB0aGlzIGRyaXZlciBhcmUgbm93IGZhaXJseQorICAgIHdlbGwgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwLiAgSW4gb3JkZXIgdG8KKyAgICBzZWUgdGhpcyBkb2N1bWVudGF0aW9uLCB5b3UgbmVlZCB0byB1c2Ugb25lIG9mIHRoZSBhZHZhbmNlZCBjb25maWd1cmF0aW9uCisgICAgcHJvZ3JhbXMgKG1lbnVjb25maWcgYW5kIHhjb25maWcpLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgIm1ha2UgbWVudWNvbmZpZyIKKyAgICBtZXRob2Qgb2YgY29uZmlndXJpbmcgeW91ciBrZXJuZWwsIHRoZW4geW91IHdvdWxkIHNpbXBseSBoaWdobGlnaHQgdGhlCisgICAgb3B0aW9uIGluIHF1ZXN0aW9uIGFuZCBoaXQgdGhlID8ga2V5LiAgSWYgeW91IGFyZSB1c2luZyB0aGUgIm1ha2UgeGNvbmZpZyIKKyAgICBtZXRob2Qgb2YgY29uZmlndXJpbmcgeW91ciBrZXJuZWwsIHRoZW4gc2ltcGx5IGNsaWNrIG9uIHRoZSBoZWxwIGJ1dHRvbgorICAgIG5leHQgdG8gdGhlIG9wdGlvbiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQuICBUaGUgaGVscCBpbmZvcm1hdGlvbiBmcm9tCisgICAgdGhlIENvbmZpZ3VyZS5oZWxwIGZpbGUgd2lsbCB0aGVuIGdldCBhdXRvbWF0aWNhbGx5IGRpc3BsYXllZC4KKworICAvcHJvYyBzdXBwb3J0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFRoZSAvcHJvYyBzdXBwb3J0IGZvciB0aGUgQUlDN3h4eCBjYW4gYmUgZm91bmQgaW4gdGhlIC9wcm9jL3Njc2kvYWljN3h4eC8KKyAgICBkaXJlY3RvcnkuIFRoYXQgZGlyZWN0b3J5IGNvbnRhaW5zIGEgZmlsZSBmb3IgZWFjaCBTQ1NJIGNvbnRyb2xsZXIgaW4KKyAgICB0aGUgc3lzdGVtLiBFYWNoIGZpbGUgcHJlc2VudHMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgdHJhbnNmZXIKKyAgICBzdGF0aXN0aWNzIChlbmFibGVkIHdpdGggI2RlZmluZSBpbiBhaWM3eHh4LmMpIGZvciBlYWNoIGNvbnRyb2xsZXIuCisKKyAgICBUaGFua3MgdG8gTWljaGFlbCBOZXVmZmVyIGZvciBoaXMgdXBwZXItbGV2ZWwgU0NTSSBoZWxwLCBhbmQKKyAgICBNYXR0aGV3IEphY29iIGZvciBzdGF0aXN0aWNzIHN1cHBvcnQuCisKKyAgRGVidWdnaW5nIHRoZSBkcml2ZXIKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU2hvdWxkIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGFuZCB3b3VsZCBsaWtlIHNvbWUgaGVscCBpbgorICAgIGdldHRpbmcgdGhlbSBzb2x2ZWQsIHRoZXJlIGFyZSBhIGNvdXBsZSBkZWJ1Z2dpbmcgaXRlbXMgYnVpbHQgaW50bworICAgIHRoZSBkcml2ZXIgdG8gZmFjaWxpdGF0ZSBnZXR0aW5nIHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3lzdGVtLgorICAgIEluIGdlbmVyYWwsIEkgbmVlZCBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtLCB3aXRoIGFzIG1hbnkKKyAgICBsb2dzIGFzIHBvc3NpYmxlIGNvbmNlcm5pbmcgd2hhdCBoYXBwZW5zLiAgVG8gaGVscCB3aXRoIHRoaXMsIHRoZXJlIGlzCisgICAgYSBjb21tYW5kIG9wdGlvbiBhaWM3eHh4PXBhbmljX29uX2Fib3J0LiAgVGhpcyBvcHRpb24sIHdoZW4gc2V0LCBmb3JjZXMKKyAgICB0aGUgZHJpdmVyIHRvIHBhbmljIHRoZSBrZXJuZWwgb24gdGhlIGZpcnN0IFNDU0kgYWJvcnQgaXNzdWVkIGJ5IHRoZQorICAgIG1pZCBsZXZlbCBTQ1NJIGNvZGUuICBJZiB5b3VyIHN5c3RlbSBpcyBnb2luZyB0byByZXNldCBsb29wcyBhbmQgeW91CisgICAgY2FuJ3QgcmVhZCB0aGUgc2NyZWVuLCB0aGVuIHRoaXMgaXMgd2hhdCB5b3UgbmVlZC4gIE5vdCBvbmx5IHdpbGwgaXQKKyAgICBzdG9wIHRoZSBzeXN0ZW0sIGJ1dCBpdCBhbHNvIHByaW50cyBvdXQgYSBsYXJnZSBhbW91bnQgb2Ygc3RhdGUKKyAgICBpbmZvcm1hdGlvbiBpbiB0aGUgcHJvY2Vzcy4gIFNlY29uZCwgaWYgeW91IHNwZWNpZnkgdGhlIG9wdGlvbgorICAgICJhaWM3eHh4PXZlcmJvc2U6MHgxZmZmZiIsIHRoZSBzeXN0ZW0gd2lsbCBwcmludCBvdXQgKlNPT09PKiBtdWNoCisgICAgaW5mb3JtYXRpb24gYXMgaXQgcnVucyB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIHNlZSBhbnl0aGluZy4KKyAgICBIb3dldmVyLCB0aGlzIGNhbiBhY3R1YWxseSBiZSB2ZXJ5IHVzZWZ1bCBpZiB5b3VyIG1hY2hpbmUgc2ltcGx5CisgICAgbG9ja3MgdXAgd2hlbiB0cnlpbmcgdG8gYm9vdCwgc2luY2UgaXQgd2lsbCBwaW4tcG9pbnQgd2hhdCB3YXMgbGFzdAorICAgIGhhcHBlbmluZyAoaW4gcmVnYXJkcyB0byB0aGUgYWljN3h4eCBkcml2ZXIpIGltbWVkaWF0ZWx5IHByaW9yIHRvCisgICAgdGhlIGxvY2t1cC4gIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGlmIHlvdXIgbWFjaGluZSBzaW1wbHkgY2FuCisgICAgbm90IGJvb3QgdXAgc3VjY2Vzc2Z1bGx5LiAgSWYgeW91IGNhbiBnZXQgeW91ciBtYWNoaW5lIHRvIHJ1biwgdGhlbgorICAgIHRoaXMgd2lsbCBwcm9kdWNlIGZhciB0b28gbXVjaCBpbmZvcm1hdGlvbi4KKworICBGVFAgc2l0ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZnRwOi8vZnRwLnJlZGhhdC5jb20vcHViL2FpYy8KKyAgICAgIC0gT3V0IG9mIGRhdGUuICBJIHVzZWQgdG8ga2VlcCBzdHVmZiBoZXJlLCBidXQgdG9vIG1hbnkgcGVvcGxlCisgICAgICAgIGNvbXBsYWluZWQgYWJvdXQgaGF2aW5nIGEgaGFyZCB0aW1lIGdldHRpbmcgaW50byBSZWQgSGF0J3MgZnRwCisJc2VydmVyLiAgU28gdXNlIHRoZSB3ZWIgc2l0ZSBiZWxvdyBpbnN0ZWFkLgorICAgIGZ0cDovL2Z0cC5wY25ldC5jb20vdXNlcnMvZWlzY2hlbi9MaW51eC8KKyAgICAgIC0gRGFuIEVpc2NoZW4ncyBkcml2ZXIgZGlzdHJpYnV0aW9uIGFyZWEKKyAgICBmdHA6Ly9la2YyLnZzYi5jei9wdWIvbGludXgva2VybmVsL2FpYzd4eHgvZnRwLnRlbGVwb3J0LmNvbS8KKyAgICAgIC0gRXVyb3BlYW4gTGludXggbWlycm9yIG9mIFRlbGVwb3J0IHNpdGUKKworICBXZWIgc2l0ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL2RsZWRmb3JkLworICAgICAgLSBNeSB3ZWIgc2l0ZSwgYWxzbyB0aGUgcHJpbWFyeSBhaWM3eHh4IHNpdGUgd2l0aCBzZXZlcmFsIHJlbGF0ZWQKKyAgICAgICAgcGFnZXMuCisKK0RlYW4gVy4gR2VobmVydAorZGVhbmdAdGVsZXBvcnQuY29tCisKKyRSZXZpc2lvbjogMy4wICQKKworTW9kaWZpZWQgYnkgRG91ZyBMZWRmb3JkIDE5OTgtMjAwMAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvY3BxZmMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDMzZTYxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dApAQCAtMCwwICsxLDI3MiBAQAorTm90ZXMgZm9yIENQUUZDVFMgZHJpdmVyIGZvciBDb21wYXEgVGFjaHlvbiBUUworRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLCBQQ0kgNjQtYml0LCA2Nk1IegorZm9yIExpbnV4IChSSCA2LjEsIDYuMiBrZXJuZWwgMi4yLjEyLTMyLCAyLjIuMTQtNSkKK1NNUCB0ZXN0ZWQKK1Rlc3RlZCBpbiBzaW5nbGUgYW5kIGR1YWwgSEJBIGNvbmZpZ3VyYXRpb24sIDMyIGFuZCA2NGJpdCBidXNzZXMsCiszMyBhbmQgNjZNSHouICBPbmx5IHN1cHBvcnRzIEZDLUFMLgorU0VTVCBzaXplIDUxMiBFeGNoYW5nZXMgKHNpbXVsdGFuZW91cyBJL09zKSBsaW1pdGVkIGJ5IG1vZHVsZSBrbWFsbG9jKCkgCisJbWF4IG9mIDEyOGsgYnl0ZXMgY29udGlndW91cy4KKworVmVyIDIuNS40ICBPY3QgMDMsIDIwMDIKKyAgICogZml4ZWQgbWVtY3B5IG9mIHNlbnNlIGJ1ZmZlciBpbiBpb2N0bCB0byBjb3B5IHRoZSBzbWFsbGVyIGRlZmluZWQgc2l6ZQorVmVyIDIuNS4zICBBdWcgMDEsIDIwMDIKKyAgICogZml4IHRoZSBwYXNzdGhydSBpb2N0bCB0byBoYW5kbGUgdGhlIFNjc2lfQ21uZC0+cmVxdWVzdCBiZWluZyBhIHBvaW50ZXIKK1ZlciAyLjUuMSAgSnVsIDMwLCAyMDAyCisgICAqIGZpeCBpb2N0bCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpZWQgTFVOLgorVmVyIDIuNS4wICBOb3YgMjksIDIwMDEKKyAgICogZWxpbWluYXRlZCBpb19yZXF1ZXN0X2xvY2suICBUaGlzIGNoYW5nZSBtYWtlcyB0aGUgZHJpdmVyIHNwZWNpZmljCisgICAgIHRvIHRoZSAyLjUueCBrZXJuZWxzLgorICAgKiBzaWxlbmNlZCBleGNlc3NpdmVseSBub2lzeSBwcmludGtzLgorCitWZXIgMi4xLjIgIEp1bHkgMjMsIDIwMDIKKyAgICogaW5pdGlhbGl6ZSBEdW1DbW5kLT5sdW4gaW4gY3BxZmNUU19pb2N0bCAodXNlZCBpbiBmY0ZpbmRMb2dnZWRJblBvcnRzIGFzIExVTiBpbmRleCkKKworVmVyIDIuMS4xICBPY3QgMTgsIDIwMDEKKyAgICogcmVpbml0aWFsaXplIENtbmQtPlNDcC5zZW50X2NvbW1hbmQgKHVzZWQgdG8gaWRlbnRpZnkgY29tbWFuZHMgYXMKKyAgICAgcGFzc3RocnVzKSBvbiBjYWxsaW5nIHNjc2lfZG9uZSwgc2luY2UgdGhlIHNjc2kgbWlkIGxheWVyIGRvZXMgbm90CisgICAgIHVzZSAob3IgcmVpbml0aWFsaXplKSB0aGlzIGZpZWxkIHRvIHByZXZlbnQgc3Vic2VxdWVudCBjb21hbmRzIGZyb20KKyAgICAgaGF2aW5nIGl0IHNldCBpbmNvcnJlY3RseS4gCisKK1ZlciAyLjEuMCAgQXVnIDI3LCAyMDAxCisgICAqIFJldmlzZSBkcml2ZXIgdG8gdXNlIG5ldyBrZXJuZWwgMi40LnggUENJIERNQSBBUEksIGluc3RlYWQgb2YgCisgICAgIHZpcnRfdG9fYnVzKCkuICAoZW5hYmxlcyBkcml2ZXIgdG8gd29yayB3LyBpYTY0IHN5c3RlbXMgd2l0aCA+MkdiIFJBTS4pCisgICAgIFJld29yayBtYWluIHNjYXR0ZXItZ2F0aGVyIGNvZGUgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIFNHIGVsZW1lbnQKKyAgICAgbGVuZ3RocyBhcmUgbGFyZ2VyIHRoYW4gMHg3RkZGRiBieXRlcyBhbmQgdXNlIGFzIG1hbnkgc2NhdHRlciAKKyAgICAgZ2F0aGVyIHBhZ2VzIGFzIG5lY2Vzc2FyeS4gKFN0ZXZlIENhbWVyb24pCisgICAqIE1ha2VmaWxlIGNoYW5nZXMgdG8gYnJpbmcgY3BxZmMgaW50byBsaW5lIHcvIHJlc3Qgb2YgU0NTSSBkcml2ZXJzCisgICAgICh0aGFua3MgdG8gS2VpdGggT3dlbnMpCisKK1ZlciAyLjAuNSAgQXVnIDA2LCAyMDAxCisgICAqIFJlamVjdCBub24tZXhpc3RlbnQgbHVucyBpbiB0aGUgZHJpdmVyIHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIAorICAgICBoYXJkd2FyZSBkbyBpdC4gIChzb21lIEhXIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBvdGhlcnMgaW4gdGhpcyBhcmVhLikKKyAgICogQ2hhbmdlZCBNYWtlZmlsZSB0byByZWx5IG9uICJtYWtlIGRlcCIgaW5zdGVhZCBvZiBleHBsaWNpdCBkZXBlbmRlbmNpZXMKKyAgICogaWZkZWYnZWQgb3V0IGZpYnJlIGNoYW5uZWwgYW5hbHl6ZXIgdHJpZ2dlcmluZyBkZWJ1ZyBjb2RlCisgICAqIGZpeGVkIGEgamlmZmllcyB3cmFwcGluZyBpc3N1ZQorCitWZXIgMi4wLjQgIEF1ZyAwMSwgMjAwMQorICAgKiBJbmNvcnBvcmF0ZWQgZml4IGZvciB0YXJnZXQgZGV2aWNlIHJlc2V0IGZyb20gU3RlZWxleWUKKyAgICogRml4ZWQgcGFzc3Rocm91Z2ggaW9jdGwgc28gaXQgZG9lc24ndCBoYW5nLgorICAgKiBGaXhlZCBoYW5nIGluIGxhdW5jaF9GQ3dvcmtlcl90aHJlYWQoKSB0aGF0IG9jY3VycmVkIG9uIHNvbWUgbWFjaGluZXMuCisgICAqIEF2b2lkIHByb2JsZW0gd2hlbiBudW1iZXIgb2Ygdm9sdW1lcyBpbiBhIHNpbmdsZSBjYWJpbmV0ID4gOAorCitWZXIgMi4wLjIgIEp1bHkgMjMsIDIwMDEKKyAgIENoYW5nZWQgdGhlIHNlbWlwaG9yZSBjaGFuZ2VzIHNvIHRoZSBkcml2ZXIgd291bGQgY29tcGlsZSBpbiAyLjQuNy4gCisgICBUaGlzIHZlcnNpb24gaXMgZm9yIDIuNC43IGFuZCBiZXlvbmQuIAorIAorVmVyIDIuMC4xICBNYXkgCTcsIDIwMDEKKyAgIE1lcmdlZCB2ZXJzaW9uIDEuMy42IGZpeGVzIGludG8gdmVyc2lvbiAyLjAuMC4gICAKKworVmVyIDIuMC4wICBNYXkgICA3LCAyMDAxCisgIEZpeGVkIHByb2JsZW0gc28gc3BpbmxvY2sgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gVU5MT0NLRUQuIAorICBGaXhlZCB1cGRhdGVkIGRyaXZlciBzbyBpdCBjb21waWxlcyBpbiB0aGUgMi40IHRyZWUuIAorIAorIFZlciAxLjMuNiAgRmViICAyNywgMjAwMQorICAgQWRkZWQgVGFyZ2V0X0RldmljZV9SZXNldCBmdW5jdGlvbiBmb3IgU0NTSSBlcnJvciBoYW5kbGluZworICAgRml4ZWQgcHJvYmxlbSB3aXRoIG5vdCByZXNldGluZyBhZGRyZXNzaW5nIG1vZGUgYWZ0ZXIgaW1wbGljaXQgbG9nb3V0CisgCisKK1ZlciAxLjMuNCAgU2VwICAgNywgMjAwMAorICBBZGRlZCBNb2RpbmZvIGluZm9ybWF0aW9uCisgIEZpeGVkIHByb2JsZW0gd2l0aCBzdGF0aWNhbGx5IGxpbmtpbmcgdGhlIGRyaXZlcgorCitWZXIgMS4zLjMsIEF1ZyAgMjMsIDIwMDAKKyAgRml4ZWQgZGV2aWNlL2Z1bmN0aW9uIG51bWJlciBpbiBpb2N0bAorCitWZXIgMS4zLjIsIEp1bHkgMjcsIDIwMDAKKyAgQWRkIGluY2x1ZGUgZm9yIEFscGhhIGNvbXBpbGUgb24gMi4yLjE0IGtlcm5lbCAoY3BxKmkyYy5jKQorICBDaGFuZ2UgbG9naWMgZm9yIGRpZmZlcmVudCBGQ1AtUlNQIHNlbnNlX2J1ZmZlciBsb2NhdGlvbiBmb3IgSFNHODAgdGFyZ2V0CisgIEFuZCBzZWFyY2ggZm9yIEFnaWxlbnQgVGFjaHlvbiBYTDIgSEJBcyAobm90IGZpbmlzaGVkISAtIGluIHRlc3QpCisKK1Rlc3RlZCB3aXRoIAorKHN0b3JhZ2UpOgorICAgICAgICAgICBDb21wYXEgUkEtNHgwMDAsIFJBSUQgZmlybXdhcmUgdmVyIDIuNDAgLSAyLjU0CisgICAgICAgICAgIFNlYWdhdGUgRkMgZHJpdmVzIG1vZGVsIFNUMzkxMDJGQywgcmV2IDAwMDYKKyAgICAgICAgICAgSGl0YWNoaSBESzMxQ0otNzJGQyByZXYgSjhBOAorICAgICAgICAgICBJQk0gRERZRi1UMTgzNTBSIHJldiBGNjBLCisgICAgICAgICAgIENvbXBhcSBGQy1TQ1NJIGJyaWRnZSB3LyBETFQgMzUvNzAgR2IgRExUICh0YXBlKQorKHNlcnZlcnMpOgorICAgICAgICAgICBDb21wYXEgUEwtMTg1MFIKKyAgICAgICAgICAgQ29tcGFxIFBMLTY1MDAgWGVvbiAoNDAwTUh6KQorCSAgIENvbXBhcSBQTC04NTAwICg1MDBNSHosIDY2TUh6LCA2NGJpdCBQQ0kpCisgICAgICAgICAgIENvbXBhcSBBbHBoYSBEUzIwIChSSCA2LjEpCisoaHVicyk6CisgICAgICAgICAgIFZpeGVsIFJhcHBvcnQgMTAwMCAoNy1wb3J0ICJkdW1iIikKKwkgICBHYWR6b294IEdpYnJhbHRlciAoMTItcG9ydCAiZHVtYiIpCisJICAgR2Fkem9veCBDYXBlbGxpeCAyMDAwLCAzMDAwIAorKHN3aXRjaGVzKToKKyAgICAgICAgICAgQnJvY2FkZSAyMDEwLCAyNDAwLCAyODAwLCByZXYgMi4wLjNhICgmIGxhdGVyKQorICAgICAgICAgICBHYWR6b294IDMyMTAgKEZhYnJpYyBibGFkZSBiZXRhKQorICAgICAgICAgICBWaXhlbCA3MTAwIChGYWJyaWMgYmV0YSBmaXJtYXJlIC0ga25vd24gaG90IHBsdWcgaXNzdWVzKQordXNpbmcgInFhX3Rlc3QiIChlc3AuIGlvX3Rlc3Qgc2NyaXB0KSBzdWl0ZSBtb2RpZmllZCBmcm9tIFVuaXggdGVzdHMuCisJCitJbnN0YWxsYXRpb246CittYWtlIG1lbnVjb25maWcKKyAgKHNlbGVjdCBTQ1NJIGxvdy1sZXZlbCwgQ29tcGFxIEZDIEhCQSkKK21ha2UgbW9kdWxlcworbWFrZSBtb2R1bGVzX2luc3RhbGwKKworZS5nLiBpbnNtb2QgLWYgY3BxZmMKKworRHVlIHRvIEZhYnJpYy9zd2l0Y2ggZGVsYXlzLCBkcml2ZXIgcmVxdWlyZXMgNCBzZWNvbmRzIAordG8gaW5pdGlhbGl6ZS4gIElmIGFkYXB0ZXJzIGFyZSBmb3VuZCwgdGhlcmUgd2lsbCBiZSBhIGVudHJpZXMgYXQKKy9wcm9jL3Njc2kvY3BxZmNUUy8qCisKK3NhbXBsZSBjb250ZW50cyBvZiBzdGFydHVwIG1lc3NhZ2VzCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioKKyBzY3NpX3JlZ2lzdGVyIGFsbG9jYXRpbmcgMzU5NiBieXRlcyBmb3IgQ1BRRkNIQkEKKyBpb3JlbWFwJ2QgTWVtYmFzZTogYzg4N2U2MDAKKyAgSEJBIFRhY2h5b24gUmV2SWQgMS4yCitBbGxvY2F0aW5nIDExOTgwOCBmb3IgNTc2IEV4Y2hhbmdlcyBAIGMwZGMwMDAwCitBbGxvY2F0aW5nIDExMjkwNCBmb3IgTGlua1EgQCBjMGMyMDAwMCAoNTc2IGVsZW1lbnRzKQorQWxsb2NhdGluZyAxMTA2MDAgZm9yIFRhY2hTRVNUIGZvciA1MTIgRXhjaGFuZ2VzCisgIGNwcWZjVFM6IHdyaXRpbmcgSU1RIEJBU0UgN0MwMDAwaCAgICBQSSA3QzQwMDBoCisgIGNwcWZjVFM6IFNFU1QgYzBlNDAwMDAodmlydCk6IFdyb3RlIGJhc2UgRTQwMDAwaCBAIGM4ODdlNzQwCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRThoIFdXTjogNTAwNTA3NjUwNjQyNDk5RCBTQ1NJIENoYW4vVHJndCAwLzAKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFRmggV1dOOiA1MDAwMEUxMDAwMDBENUE2IFNDU0kgQ2hhbi9Ucmd0IDAvMQorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEU0aCBXV046IDIxMDAwMDIwMzcwMDk3QkIgU0NTSSBDaGFuL1RyZ3QgMC8yCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRTJoIFdXTjogMjEwMDAwMjAzNzAwOTk0NiBTQ1NJIENoYW4vVHJndCAwLzMKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFMWggV1dOOiAyMTAwMDAyMDM3MDA5OEZFIFNDU0kgQ2hhbi9Ucmd0IDAvNAorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEUwaCBXV046IDIxMDAwMDIwMzcwMDk3QjIgU0NTSSBDaGFuL1RyZ3QgMC81CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRENoIFdXTjogMjEwMDAwMjAzNzAwNkNDMSBTQ1NJIENoYW4vVHJndCAwLzYKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBEQWggV1dOOiAyMTAwMDAyMDM3MDA1OUY2IFNDU0kgQ2hhbi9Ucmd0IDAvNworY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMDBGaCBXV046IDUwMDgwNUYxRkFEQjBFMjAgU0NTSSBDaGFuL1RyZ3QgMC84CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwMDhoIFdXTjogNTAwODA1RjFGQURCMEVCQSBTQ1NJIENoYW4vVHJndCAwLzkKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwNGggV1dOOiA1MDA4MDVGMUZBREIxRUI5IFNDU0kgQ2hhbi9Ucmd0IDAvMTAKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwMmggV1dOOiA1MDA4MDVGMUZBREIxQURFIFNDU0kgQ2hhbi9Ucmd0IDAvMTEKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwMWggV1dOOiA1MDA4MDVGMUZBREJBMkNBIFNDU0kgQ2hhbi9Ucmd0IDAvMTIKK3Njc2k0IDogQ29tcGFxIEZpYnJlQ2hhbm5lbCBIQkEgVGFjaHlvbiBUUyBIUEZDLTUxNjZBLzEuMjogV1dOIDUwMDUwOEIyMDAxOTNGNTAKKyBvbiBQQ0kgYnVzIDAgZGV2aWNlIDB4YTBmYyBpcnEgNSBJT2Jhc2VMIDB4MzQwMCwgTUVNQkFTRSAweGM2ZWY4NjAwCitQQ0kgYnVzIHdpZHRoIDMyIGJpdHMsIGJ1cyBzcGVlZCAzMyBNSHoKK0ZDUC1TQ1NJIERyaXZlciB2MS4zLjAKK0dCSUMgZGV0ZWN0ZWQ6IFNob3J0LXdhdmUuICBMUFNNIDBoIE1vbml0b3IKK3Njc2kgOiA1IGhvc3RzLgorICBWZW5kb3I6IElCTSAgICAgICBNb2RlbDogRERZRi1UMTgzNTBSICAgICAgUmV2OiBGNjBLCisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAzCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RiIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDAsIGx1biAwCisgIFZlbmRvcjogSElUQUNISSAgIE1vZGVsOiBESzMxQ0otNzJGQyAgICAgICBSZXY6IEo4QTgKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGMgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgMSwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZCBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAyLCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RlIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDMsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGYgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNCwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZyBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA1LCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RoIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDYsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGkgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNywgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40OAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkaiBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA4LCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjQ4CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RrIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDgsIGx1biAxCisgIFZlbmRvcjogQ09NUEFRICAgIE1vZGVsOiBMT0dJQ0FMIFZPTFVNRSAgICBSZXY6IDIuNDAKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGwgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgOSwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40MAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkbSBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA5LCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RuIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEwLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RvIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDExLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RwIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDExLCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RxIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEyLCBsdW4gMAorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjU0CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RyIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEyLCBsdW4gMQorcmVzaXplX2RtYV9wb29sOiB1bmtub3duIGRldmljZSB0eXBlIDEyCityZXNpemVfZG1hX3Bvb2w6IHVua25vd24gZGV2aWNlIHR5cGUgMTIKK1NDU0kgZGV2aWNlIHNkYjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMzU4NDM2NzAgWzE3NTAxIE1CXSBbMTcuNSBHQl0KKyBzZGI6IHNkYjEKK1NDU0kgZGV2aWNlIHNkYzogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTQ0NDEwODgwIFs3MDUxMyBNQl0gWzcwLjUgR0JdCisgc2RjOiBzZGMxCitTQ1NJIGRldmljZSBzZGQ6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZDogc2RkMQorU0NTSSBkZXZpY2Ugc2RlOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGU6IHNkZTEKK1NDU0kgZGV2aWNlIHNkZjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RmOiBzZGYxCitTQ1NJIGRldmljZSBzZGc6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZzogc2RnMQorU0NTSSBkZXZpY2Ugc2RoOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGg6IHNkaDEKK1NDU0kgZGV2aWNlIHNkaTogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RpOiBzZGkxCitTQ1NJIGRldmljZSBzZGo6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDIwNTYxNjAgWzEwMDMgTUJdIFsxLjAgR0JdCisgc2RqOiBzZGoxCitTQ1NJIGRldmljZSBzZGs6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDIwNTI3MzYgWzEwMDIgTUJdIFsxLjAgR0JdCisgc2RrOiBzZGsxCitTQ1NJIGRldmljZSBzZGw6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkbDogc2RsMQorU0NTSSBkZXZpY2Ugc2RtOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSA4MzgwMzIwIFs0MDkxIE1CXSBbNC4xIEdCXQorIHNkbTogc2RtMQorU0NTSSBkZXZpY2Ugc2RuOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc2NDMyMCBbODY3MyBNQl0gWzguNyBHQl0KKyBzZG46IHNkbjEKK1NDU0kgZGV2aWNlIHNkbzogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3NjQzMjAgWzg2NzMgTUJdIFs4LjcgR0JdCisgc2RvOiBzZG8xCitTQ1NJIGRldmljZSBzZHA6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkcDogc2RwMQorU0NTSSBkZXZpY2Ugc2RxOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDU2MTYwIFsxMDAzIE1CXSBbMS4wIEdCXQorIHNkcTogc2RxMQorU0NTSSBkZXZpY2Ugc2RyOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDUyNzM2IFsxMDAyIE1CXSBbMS4wIEdCXQorIHNkcjogc2RyMQorCisqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0lmIGEgR0JJQyBvZiB0eXBlIFNob3J0LXdhdmUsIExvbmctd2F2ZSwgb3IgQ29wcGVyIGlzIGRldGVjdGVkLCBpdCB3aWxsCitwcmludCBvdXQ7IG90aGVyd2lzZSwgIm5vbmUiIGlzIGRpc3BsYXllZC4gIElmIHRoZSBjYWJsaW5nIGlzIGNvcnJlY3QKK2FuZCBhIGxvb3AgY2lyY3VpdCBpcyBjb21wbGV0ZWQsIHlvdSBzaG91bGQgc2VlICJNb25pdG9yIjsgb3RoZXJ3aXNlLCAKKyJMb29wRmFpbCIgKG9uIG9wZW4gY2lyY3VpdCkgb3Igc29tZSBMUFNNIG51bWJlci9zdGF0ZSB3aXRoIGJpdCAzIHNldC4KKworCitFUlJBVEE6CisxLiBOb3JtYWxseSwgTGludXggU2NzaSBxdWVyaWVzIEZDIGRldmljZXMgd2l0aCBJTlFVSVJZIHN0cmluZ3MuICBBbGwgTFVOcworZm91bmQgYWNjb3JkaW5nIHRvIElOUVVJUlkgc2hvdWxkIGdldCBSRUFEIGNvbW1hbmRzIGF0IHNlY3RvciAwIHRvIGZpbmQKK3BhcnRpdGlvbiB0YWJsZSwgZXRjLiAgT2xkZXIga2VybmVscyBvbmx5IHF1ZXJ5IHRoZSBmaXJzdCA0IGRldmljZXMuICBTb21lCitMaW51eCBrZXJuZWxzIG9ubHkgbG9vayBmb3Igb25lIExVTiBwZXIgdGFyZ2V0IChpLmUuIEZDIGRldmljZSkuCisKKzIuIFBoeXNpY2FsbHkgcmVtb3ZpbmcgYSBkZXZpY2UsIG9yIGEgbWFsZnVuY3Rpb25pbmcgc3lzdGVtIHdoaWNoIGhpZGVzIGEKK2RldmljZSwgbGVhZHMgdG8gYSAzMC1zZWNvbmQgdGltZW91dCBhbmQgc3Vic2VxdWVudCBfYWJvcnQgY2FsbC4gIAorSW4gc29tZSBwcm9jZXNzIGNvbnRleHRzLCB0aGlzIHdpbGwgaGFuZyB0aGUga2VybmVsIChjcmFzaGluZyB0aGUgc3lzdGVtKS4KK1NpbmdsZSBiaXQgZXJyb3JzIGluIGZyYW1lcyBhbmQgdmlydHVhbGx5IGFsbCBob3QgcGx1Z2dpbmcgZXZlbnRzIGFyZSAKK2dyYWNlZnVsbHkgaGFuZGxlZCB3aXRoIGludGVybmFsIGRyaXZlciB0aW1lciBhbmQgQWJvcnQgcHJvY2Vzc2luZy4KKworMy4gU29tZSBTQ1NJIGRyaXZlcyB3aXRoIGVycm9yIGNvbmRpdGlvbnMgd2lsbCBub3QgaGFuZGxlIHRoZSA3IHNlY29uZCB0aW1lb3V0CitpbiB0aGlzIHNvZnR3YXJlIGRyaXZlciwgbGVhZGluZyB0byBpbmZpbml0ZSByZXRyaWVzIG9uIHRpbWVkIG91dCBTQ1NJIGNvbW1hbmRzLgorVGhlIDcgc2VjcyBiYWxhbmNlcyB0aGUgbmVlZCB0byBxdWlja2x5IHJlY292ZXIgZnJvbSBsb3N0IGZyYW1lcyAoZXNwLiBvbiBzZXF1ZW5jZQoraW5pdGlhdGl2ZXMpIGFuZCB0aW1lIG5lZWRlZCBieSBvbGRlci9zbG93ZXIvZXJyb3Itc3RhdGUgZHJpdmVzIGluIHJlc3BvbmRpbmcuCitUaGlzIGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBpbiAiRXhjaGFuZ2VzW10udGltZU91dCIuCisKKzQuIER1ZSB0byB0aGUgbmF0dXJlIG9mIEZDIHNvZnQgYWRkcmVzc2luZywgdGhlcmUgaXMgbm8gYXNzdXJhbmNlIHRoYXQgdGhlIAorc2FtZSBMVU5zIChkcml2ZXMpIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXRoIChlLmcuIC9kZXYvc2RiMSkgZnJvbSBvbmUgYm9vdCB0bworbmV4dC4gIER5bmFtaWMgc29mdCBhZGRyZXNzIGNoYW5nZXMgKGkuZS4gMjQtYml0IEZDIHBvcnRfaWQpIGFyZQorc3VwcG9ydGVkIGR1cmluZyBydW4gdGltZSAoZS5nLiBkdWUgdG8gaG90IHBsdWcgZXZlbnQpIGJ5IHRoZSB1c2Ugb2YgV1dOIHRvCitTQ1NJIE5leHVzIChjaGFubmVsL3RhcmdldC9MVU4pIG1hcHBpbmcuCisKKzUuIENvbXBhcSBSQTR4MDAgZmlybXdhcmUgdmVyc2lvbiAyLjU0IGFuZCBsYXRlciBzdXBwb3J0cyBTU1AgKFNlbGVjdGl2ZSAKK1N0b3JhZ2UgUHJlc2VudGF0aW9uKSwgd2hpY2ggbWFwcyBMVU5zIHRvIGEgV1dOLiAgSWYgUkE0eDAwIGZpcm13YXJlIHByaW9yCisyLjU0IChlLmcuIG9sZGVyIGNvbnRyb2xsZXIpIGlzIHVzZWQsIG9yIHRoZSBGQyBIQkEgaXMgcmVwbGFjZWQgKGFub3RoZXIgV1dOCitpcyB1c2VkKSwgbG9naWNhbCB2b2x1bWVzIG9uIHRoZSBSQTR4MDAgd2lsbCBubyBsb25nZXIgYmUgdmlzaWJsZS4KKworCitTZW5kIHF1ZXN0aW9ucy9jb21tZW50cyB0bzoKK0FteSBWYW56YW50LUhvZGdlIChmaWJyZWNoYW5uZWxAY29tcGFxLmNvbSkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvZGMzOTV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNiNzlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQKQEAgLTAsMCArMSwxMDIgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgZGMzOTV4IFNDU0kgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU3RhdHVzCistLS0tLS0KK1RoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHdpdGggQ0QtUiBhbmQgQ0QtUi9XIGRyaXZlcy4gVGhlc2Ugc2hvdWxkCitiZSBzYWZlIHRvIHVzZS4gVGVzdGluZyB3aXRoIGhhcmQgZGlza3MgaGFzIG5vdCBiZWVuIGRvbmUgdG8gYW55CitncmVhdCBkZWdyZWUgYW5kIGNhdXRpb24gc2hvdWxkIGJlIGV4ZXJjaXNlZCBpZiB5b3Ugd2FudCB0byBhdHRlbXB0Cit0byB1c2UgdGhpcyBkcml2ZXIgd2l0aCBoYXJkIGRpc2tzLgorCitUaGlzIGlzIGEgMi41IG9ubHkgZHJpdmVyLiBGb3IgYSAyLjQgZHJpdmVyIHBsZWFzZSBzZWUgdGhlIG9yaWdpbmFsCitkcml2ZXIgKHdoaWNoIHRoaXMgZHJpdmVyIHN0YXJ0ZWQgZnJvbSkgYXQKK2h0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzk1LworCitQcm9ibGVtcywgcXVlc3Rpb25zIGFuZCBwYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gdGhlIG1haWxpbmcKK2xpc3QuIERldGFpbHMgb24gdGhlIGxpc3QsIGluY2x1ZGluZyBhcmNoaXZlcywgYXJlIGF2YWlsYWJsZSBhdAoraHR0cDovL2xpc3RzLnR3aWJibGUub3JnL21haWxtYW4vbGlzdGluZm8vZGMzOTV4LworCitQYXJhbWV0ZXJzCistLS0tLS0tLS0tCitUaGUgZHJpdmVyIHVzZXMgdGhlIHNldHRpbmdzIGZyb20gdGhlIEVFUFJPTSBzZXQgaW4gdGhlIFNDU0kgQklPUyAKK3NldHVwLiBJZiB0aGVyZSBpcyBubyBFRVBST00sIHRoZSBkcml2ZXIgdXNlcyBkZWZhdWx0IHZhbHVlcy4KK0JvdGggY2FuIGJlIG92ZXJyaWRlbiBieSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAobW9kdWxlIG9yIGtlcm5lbAorcGFyYW1ldGVycykuCisKK1RoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlOgorCisgLSBzYWZlCisgICBEZWZhdWx0OiAwLCBBY2NlcHRhYmxlIHZhbHVlczogMCBvciAxCisKKyAgIElmIHNhZmUgaXMgc2V0IHRvIDEgdGhlbiB0aGUgYWRhcHRlciB3aWxsIHVzZSBjb25zZXJ2YXRpdmUKKyAgICgic2FmZSIpIGRlZmF1bHQgc2V0dGluZ3MuIFRoaXMgc2V0czoKKworCQlzaG9ydGN1dCBmb3IgZGMzOTV4PTcsNCw5LDE1LDIsMTAKKworIC0gYWRhcHRlcl9pZAorICAgRGVmYXVsdDogNywgQWNjZXB0YWJsZSB2YWx1ZXM6IDAgdG8gMTUKKworICAgU2V0cyB0aGUgaG9zdCBhZGFwdGVyIFNDU0kgSUQuCisKKyAtIG1heF9zcGVlZAorICAgRGVmYXVsdDogMSwgQWNjZXB0YWJsZSB2YWx1ZTogMCB0byA3CisgICAwID0gMjAgICBNaHoKKyAgIDEgPSAxMi4yIE1oegorICAgMiA9IDEwICAgTWh6CisgICAzID0gOCAgICBNaHoKKyAgIDQgPSA2LjcgIE1oegorICAgNSA9IDUuOCAgSGh6CisgICA2ID0gNSAgICBNaHoKKyAgIDcgPSA0ICAgIE1oegorCisgLSBkZXZfbW9kZQorICAgQml0bWFwIGZvciBkZXZpY2UgY29uZmlndXJhdGlvbgorCisgICBEZXZNb2RlIGJpdCBkZWZpbml0aW9uOgorICAgICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAgICAqMCAgICAweDAxICAgICAgIDEgICAgIFBhcml0eSBjaGVjaworICAgICAgKjEgICAgMHgwMiAgICAgICAyICAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbgorICAgICAgKjIgICAgMHgwNCAgICAgICA0ICAgICBEaXNjb25uZWN0aW9uCisgICAgICAqMyAgICAweDA4ICAgICAgIDggICAgIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwLiAoTm90IHVzZWQpCisgICAgICAqNCAgICAweDEwICAgICAgMTYgICAgIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nCisgICAgICAqNSAgICAweDIwICAgICAgMzIgICAgIFdpZGUgTmVnb3RpYXRpb24KKworIC0gYWRhcHRlcl9tb2RlCisgICBCaXRtYXAgZm9yIGFkYXB0ZXIgY29uZmlndXJhdGlvbgorCisgICBBZGFwdE1vZGUgYml0IGRlZmluaXRpb24KKyAgICAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgICAgKjAgICAgMHgwMSAgICAgICAxICAgICBTdXBwb3J0IG1vcmUgdGhhbiB0d28gZHJpdmVzLiAoTm90IHVzZWQpCisgICAgICAqMSAgICAweDAyICAgICAgIDIgICAgIFVzZSBET1MgY29tcGF0aWJsZSBtYXBwaW5nIGZvciBIRHMgZ3JlYXRlciB0aGFuIDFHQi4KKyAgICAgICoyICAgIDB4MDQgICAgICAgNCAgICAgUmVzZXQgU0NTSSBCdXMgb24gc3RhcnR1cC4KKyAgICAgICozICAgIDB4MDggICAgICAgOCAgICAgQWN0aXZlIE5lZ2F0aW9uOiBJbXByb3ZlcyBTQ1NJIEJ1cyBub2lzZSBpbW11bml0eS4KKyAgICAgICA0ICAgIDB4MTAgICAgICAxNiAgICAgSW1tZWRpYXRlIHJldHVybiBvbiBCSU9TIHNlZWsgY29tbWFuZC4gKE5vdCB1c2VkKQorICAgICgqKTUgICAgMHgyMCAgICAgIDMyICAgICBDaGVjayBmb3IgTFVOcyA+PSAxLgorCisgLSB0YWdzCisgICBEZWZhdWx0OiAzLCBBY2NlcHRhYmxlIHZhbHVlczogMC01CisgICAKKyAgIFRoZSBudW1iZXIgb2YgdGFncyBpcyAxPDx4LCBpZiB4IGhhcyBiZWVuIHNwZWNpZmllZAorCisgLSByZXNldF9kZWxheQorICAgRGVmYXVsdDogMSwgQWNjZXB0YWJsZSB2YWx1ZXM6IDAtMTgwCisKKyAgIFRoZSBzZWNvbmRzIHRvIG5vdCBhY2NlcHQgY29tbWFuZHMgYWZ0ZXIgYSBTQ1NJIFJlc2V0CisKKworRm9yIHRoZSBidWlsdCAgaW4gZHJpdmVyIHRoZSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoCitkYzM5NXguIChlZyAiZGMzOTV4LnNhZmU9MSIpCisKKworQ29weXJpZ2h0CistLS0tLS0tLS0KK1RoZSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZS4gSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkuIFBsZWFzZSByZWFkIGl0LCBiZWZvcmUgdXNpbmcgdGhpcyBkcml2ZXIuIEl0IHNob3VsZCBiZQoraW5jbHVkZWQgaW4geW91ciBrZXJuZWwgc291cmNlcyBhbmQgd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSXQgY2FycmllcyB0aGUKK2ZpbGVuYW1lIENPUFlJTkcuIElmIHlvdSBkb24ndCBoYXZlIGl0LCBwbGVhc2UgYXNrIG1lIHRvIHNlbmQgeW91IG9uZSBieQorZW1haWwuCitOb3RlOiBUaGUgR05VIEdQTCBzYXlzIGFsc28gc29tZXRoaW5nIGFib3V0IHdhcnJhbnR5IGFuZCBsaWFiaWxpdHkuIAorUGxlYXNlIGJlIGF3YXJlIHRoZSBmb2xsb3dpbmc6IFdoaWxlIHdlIGRvIG15IGJlc3QgdG8gcHJvdmlkZSBhIHdvcmtpbmcgYW5kCityZWxpYWJsZSBkcml2ZXIsIHRoZXJlIGlzIGEgY2hhbmNlLCB0aGF0IGl0IHdpbGwga2lsbCB5b3VyIHZhbHVhYmxlIGRhdGEuIAorV2UgcmVmdXNlIHRvIHRha2UgYW55IHJlc3BvbnNpYmlsaXR5IGZvciB0aGF0LiBUaGUgZHJpdmVyIGlzIHByb3ZpZGVkIGFzLWlzCithbmQgWU9VIFVTRSBJVCBBVCBZT1VSIE9XTiBSRVNQT05TSUJJTElUWS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ1ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RwdGkudHh0CkBAIC0wLDAgKzEsODMgQEAKKyAvKiBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBVU0UKKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgZm9ybSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCByZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBhcyBpcycgYnkgQWRhcHRlYyBhbmQKKyAqIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZQorICogaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsCisgKiBhcmUgZGlzY2xhaW1lZC4gSW4gbm8gZXZlbnQgc2hhbGwgQWRhcHRlYyBiZQorICogbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5IG9yCisgKiBjb25zZXF1ZW50aWFsIGRhbWFnZXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBwcm9jdXJlbWVudCBvZgorICogc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHM7IG9yIGJ1c2luZXNzCisgKiBpbnRlcnJ1cHRpb25zKSBob3dldmVyIGNhdXNlZCBhbmQgb24gYW55IHRoZW9yeSBvZiBsaWFiaWxpdHksIHdoZXRoZXIgaW4KKyAqIGNvbnRyYWN0LCBzdHJpY3QgbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBvdGhlcndpc2UpCisgKiBhcmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIHRoZSB1c2Ugb2YgdGhpcyBkcml2ZXIgc29mdHdhcmUsIGV2ZW4gaWYgYWR2aXNlZAorICogb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFkYXB0ZWMgSTJPIFJBSUQgYW5kIERQVCBTbWFydFJBSUQgViBJMk8gYm9hcmRzLgorICoKKyAqIENSRURJVFM6CisgKiBUaGUgb3JpZ2luYWwgbGludXggZHJpdmVyIHdhcyBwb3J0ZWQgdG8gTGludXggYnkgS2FyZW4gV2hpdGUgd2hpbGUgYXQgCisgKiBEZWxsIENvbXB1dGVyLiAgSXQgd2FzIHBvcnRlZCBmcm9tIEJvYiBQYXN0ZXVyJ3MgKG9mIERQVCkgb3JpZ2luYWwgCisgKiBub24tTGludXggZHJpdmVyLiAgTWFyayBTYWx5enluIGFuZCBCb2IgUGFzdGV1ciBjb25zdWx0ZWQgb24gdGhlIG9yaWdpbmFsCisgKiBkcml2ZXIuIAorICogCisgKiAyLjAgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGJ5IERlYW5uYSBCb25kcyBhbmQgTWFyayBTYWx5enluLgorICoKKyAqIEhJU1RPUlk6CisgKiBUaGUgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IHBvcnRlZCB0byBsaW51eCB2ZXJzaW9uIDIuMC4zNCAKKyAqCisgKiBWMi4wIFJld3JpdGUgb2YgZHJpdmVyLiAgUmUtYXJjaGl0ZWN0dXJlZCBiYXNlZCBvbiBpMm8gc3Vic3lzdGVtLgorICogICBUaGlzIHdhcyB0aGUgZmlyc3QgZnVsbCBHUEwgdmVyc2lvbiBzaW5jZSB0aGUgbGFzdCB2ZXJzaW9uIHVzZWQKKyAqICAgaTJvc2lnIGhlYWRlcnMgd2hpY2ggd2VyZSBub3QgR1BMLiAgRGV2ZWxvcGVyIFRlc3RpbmcgdmVyc2lvbi4KKyAqIFYyLjEgSW50ZXJuYWwgdGVzdGluZworICogVjIuMiBGaXJzdCByZWxlYXNlZCB2ZXJzaW9uCisgKgorICogVjIuMyAKKyAqICAgQ2hhbmdlczoKKyAqICAgICAgQWRkZWQgUmFwdG9yIFN1cHBvcnQKKyAqICAgICAgRml4ZWQgYnVnIGNhdXNpbmcgc3lzdGVtIHRvIGhhbmcgdW5kZXIgZXh0cmVtZSBsb2FkIHdpdGggCisgKiAgICAgICAgIG1hbmFnZW1lbnQgdXRpbGl0aWVzIHJ1bm5pbmcgKHJlbW92ZWQgR0ZQX0RNQSBmcm9tIGttYWxsb2MgZmxhZ3MpCisgKgorICoKKyAqIFYyLjQgRmlyc3QgdmVyc2lvbiByZWFkeSB0byBiZSBzdWJtaXR0ZWQgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIGtlcm5lbAorICogICBDaGFuZ2VzOiAKKyAqICAgICAgSW1wbGVtZW50ZWQgc3VnZ2VzdGlvbnMgZnJvbSBBbGFuIENveAorICogICAgICBBZGRlZCBjYWxjdWxhdGlvbiBvZiByZXNpZCBmb3Igc2cgbGF5ZXIKKyAqICAgICAgQmV0dGVyIGVycm9yIGhhbmRsaW5nCisgKiAgICAgICAgIEFkZGVkIGNoZWNraW5nIHVuZGVyZmxvdyBjb25kdGlvbnMgCisgKiAgICAgICAgIEFkZGVkIERBVEFQUk9URUNUIGNoZWNraW5nCisgKiAgICAgICAgIENoYW5nZWQgZXJyb3IgcmV0dXJuIGNvZGVzCisgKiAgICAgICAgIEZpeGVkIHBvaW50ZXIgYnVnIGluIGJ1cyByZXNldCByb3V0aW5lCisgKiAgICAgIEVuYWJsZWQgaGJhIHJlc2V0IGZyb20gaW9jdGxzIChhbGxvd3MgYSBGVyBmbGFzaCB0byByZWJvb3QgYW5kIHVzZSB0aGUgbmV3CisgKiAgICAgICAgIEZXIHdpdGhvdXQgaGF2aW5nIHRvIHJlYm9vdCkKKyAqICAgICAgQ2hhbmdlZCBwcm9jIG91dHB1dAorICoKKyAqIFRPRE86CisgKiAgICAgIEFkZCA2NCBiaXQgU2NhdHRlciBHYXRoZXIgd2hlbiBjb21waWxlZCBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcworICogICAgICBBZGQgc3BhcnNlIGx1biBzY2FubmluZyAKKyAqICAgICAgQWRkIGNvZGUgdGhhdCBjaGVja3MgaWYgYSBkZXZpY2UgdGhhdCBoYWQgYmVlbiB0YWtlbiBvZmZsaW5lIGlzCisgKiAgICAgICAgIG5vdyBvbmxpbmUgKGF0IHRoZSBGVyBsZXZlbCkgd2hlbiB0ZXN0IHVuaXQgcmVhZHkgb3IgaW5xdWlyeSAKKyAqICAgICAgICAgY29tbWFuZCBmcm9tIHNjc2ktY29yZQorICogICAgICBBZGQgcHJvYyByZWFkIGludGVyZmFjZQorICogICAgICAgICBidXNyZXNjYW4gY29tbWFuZAorICogICAgICAgICByZXNjYW4gY29tbWFuZAorICogICAgICBBZGQgY29kZSB0byByZXNjYW4gcm91dGluZSB0aGF0IG5vdGlmaWVzIHNjc2ktY29yZSBhYm91dCBuZXcgZGV2aWNlcworICogICAgICBBZGQgc3VwcG9ydCBmb3IgQy1QQ0kgKGhvdHBsdWcgc3R1ZmYpCisgKiAgICAgIEFkZCBpb2N0bCBwYXNzdGhydSBlcnJvciByZWNvdmVyeQorICoKKyAqIE5PVEVTOgorICogVGhlIERQVCBjYXJkIG9wdGltaXplcyB0aGUgb3JkZXIgb2YgcHJvY2Vzc2luZyBjb21tYW5kcy4gIENvbnNlcXVlbnRseSwKKyAqIGEgY29tbWFuZCBtYXkgdGFrZSB1cCB0byA2IG1pbnV0ZXMgdG8gY29tcGxldGUgYWZ0ZXIgaXQgaGFzIGJlZW4gc2VudAorICogdG8gdGhlIGJvYXJkLiAgCisgKgorICogVGhlIGZpbGVzIGRwdGlfaW9jdGwuaCBkcHRzaWcuaCBvc2RfZGVmcy5oIG9zZF91dGlsLmggc3lzX2luZm8uaCBhcmUgcGFydCBvZiB0aGUKKyAqIGludGVyZmFjZSBmaWxlcyBmb3IgQWRhcHRlYydzIG1hbmFnZW1lbnQgcm91dGluZXMuICBUaGVzZSBkZWZpbmUgdGhlIHN0cnVjdHVyZXMgdXNlZAorICogaW4gdGhlIGlvY3Rscy4gIFRoZXkgYXJlIHdyaXR0ZW4gdG8gYmUgcG9ydGFibGUuICBUaGV5IGFyZSBoYXJkIHRvIHJlYWQsIGJ1dCBJIG5lZWQKKyAqIHRvIHVzZSB0aGVtICdhcyBpcycgb3IgSSBjYW4gbWlzcyBjaGFuZ2VzIGluIHRoZSBpbnRlcmZhY2UuCisgKgorICovCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFlNjIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2R0YzN4ODAudHh0CkBAIC0wLDAgKzEsNDMgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgTGludXggRFRDMzE4MC8zMjgwIHNjc2kgZHJpdmVyLgorYnkgUmF5IFZhbiBUYXNzbGUgKHJheXZ0QGNvbW0ubW90LmNvbSkgIE1hcmNoIDE5OTYKK0Jhc2VkIG9uIHRoZSBnZW5lcmljICYgY29yZSBOQ1I1MzgwIGNvZGUgYnkgRHJldyBFY2toYXJkCisKK1NDU0kgZGV2aWNlIGRyaXZlciBmb3IgdGhlIERUQyAzMTgwLzMyODAuCitEYXRhIFRlY2hub2xvZ3kgQ29ycC0tLWEgZGl2aXNpb24gb2YgUXVtZS4KKworVGhlIDMyODAgaGFzIGEgc3RhbmRhcmQgZmxvcHB5IGludGVyZmFjZS4KKworVGhlIDMxODAgZG9lcyBub3QuICBPdGhlcndpc2UsIHRoZXkgYXJlIGlkZW50aWNhbC4KKworVGhlIERUQzN4ODAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYnV0IGl0IGRvZXMgaGF2ZSBQc2V1ZG8tRE1BIHdoaWNoIGlzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworSXQncyBEVEM0MDYgc2NzaSBjaGlwIGlzIHN1cHBvc2VkbHkgY29tcGF0aWJsZSB3aXRoIHRoZSBOQ1IgNTNDNDAwLgorSXQgaXMgbWVtb3J5IG1hcHBlZCwgdXNlcyBhbiBJUlEsIGJ1dCBubyBkbWEgb3IgaW8tcG9ydC4gIFRoZXJlIGlzCitpbnRlcm5hbCBETUEsIGJldHdlZW4gU0NTSSBidXMgYW5kIGFuIG9uLWNoaXAgMTI4LWJ5dGUgYnVmZmVyLiAgRG91YmxlCitidWZmZXJpbmcgaXMgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5IHRoZSBjaGlwLiAgRGF0YSBpcyB0cmFuc2ZlcnJlZAorYmV0d2VlbiB0aGUgb24tY2hpcCBidWZmZXIgYW5kIENQVS9SQU0gdmlhIG1lbW9yeSBtb3Zlcy4KKworVGhlIGRyaXZlciBkZXRlY3RzIHRoZSBwb3NzaWJsZSBtZW1vcnkgYWRkcmVzc2VzIChqdW1wZXIgc2VsZWN0YWJsZSk6CisJQ0MwMCwgREMwMCwgQzgwMCwgYW5kIEQ4MDAKK1RoZSBwb3NzaWJsZSBJUlEncyAoanVtcGVyIHNlbGVjdGFibGUpIGFyZToKKwlJUlEgMTAsIDExLCAxMiwgMTUKK1Bhcml0eSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAsIGJ1dCBub3QgYnkgdGhpcyBkcml2ZXIuCitJbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSAvcHJvYy9zY3NpL2R0YzNjODAvTi4KKworTm90ZSBvbiBpbnRlcnJ1cHRzOgorCitUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgaXQgY2FuIGJlIHNldCB0byBpbnRlcnJ1cHQgd2hlbmV2ZXIgdGhlCitvbi1jaGlwIGJ1ZmZlciBuZWVkcyBDUFUgYXR0ZW50aW9uLiAgSSBjb3VsZG4ndCBnZXQgdGhpcyB0byB3b3JrLiAgU28KK3RoZSBkcml2ZXIgcG9sbHMgZm9yIGRhdGEtcmVhZHkgaW4gdGhlIHBzZXVkby1ETUEgdHJhbnNmZXIgcm91dGluZS4KK1RoZSBpbnRlcnJ1cHQgc3VwcG9ydCByb3V0aW5lcyBpbiB0aGUgTkNSMzI4MC5jIGNvcmUgbW9kdWxlcyBoYW5kbGUKK3Njc2kgZGlzY29ubmVjdC9yZWNvbm5lY3QsIGFuZCB0aGlzIChtb3N0bHkpIHdvcmtzLiAgSG93ZXZlci4uLi4uICBJCitoYXZlIHRlc3RlZCBpdCB3aXRoIDQgdG90YWxseSBkaWZmZXJlbnQgaGFyZCBkcml2ZXMgKGJvdGggU0NTSS0xIGFuZAorU0NTSS0yKSwgYW5kIG9uZSBDRFJPTSBkcml2ZS4gIEludGVycnVwdHMgd29ya3MgZ3JlYXQgZm9yIGFsbCBidXQgb25lCitzcGVjaWZpYyBoYXJkIGRyaXZlLiAgRm9yIHRoaXMgb25lLCB0aGUgZHJpdmVyIHdpbGwgZXZlbnR1YWxseSBoYW5nIGluCit0aGUgdHJhbnNmZXIgc3RhdGUuICBJIGhhdmUgdGVzdGVkIHdpdGg6ICJkZCBicz00ayBjb3VudD0yaworb2Y9L2Rldi9udWxsIGlmPS9kZXYvc2RiIi4gIEl0IHJlYWRzIG9rIGZvciBhIHdoaWxlLCB0aGVuIGhhbmdzLgorQWZ0ZXIgYmVhdGluZyBteSBoZWFkIGFnYWluc3QgdGhpcyBmb3IgYSBjb3VwbGUgb2Ygd2Vla3MsIGdldHRpbmcKK25vd2hlcmUsIEkgZ2l2ZSB1cC4gIFNvLi4uLi5UaGlzIGRyaXZlciBkb2VzIE5PVCB1c2UgaW50ZXJydXB0cywgZXZlbgoraWYgeW91IGhhdmUgdGhlIGNhcmQganVtcGVyZWQgdG8gYW4gSVJRLiAgUHJvYmFibHkgbm9ib2R5IHdpbGwgZXZlcgorY2FyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2dfTkNSNTM4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4MGY1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgTGludXggZ19OQ1I1MzgwIGRyaXZlci4KKworKGMpIDE5OTMgRHJldyBFY2toYXJkCitOQ1I1M2M0MDAgZXh0ZW5zaW9ucyAoYykgMTk5NCwxOTk1LDE5OTYgS2V2aW4gTGVudGluCisKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIE5DUjUzYzQwMCBleHRlbnNpb25zIGJ5IEtldmluIExlbnRpbiBhbmQgc29tZQorZW5oYW5jZW1lbnRzIHRvIHRoZSBOQ1I1MzgwIGNvcmUuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGJvdGggTkNSNTM4MCBhbmQgTkNSNTNjNDAwIGNhcmRzIGluIHBvcnQgb3IgbWVtb3J5CittYXBwZWQgbW9kZXMuIEN1cnJlbnRseSB0aGlzIGRyaXZlciBjYW4gb25seSBzdXBwb3J0IG9uZSBvZiB0aG9zZSBtYXBwaW5nCittb2RlcyBhdCBhIHRpbWUgYnV0IGl0IGRvZXMgc3VwcG9ydCBib3RoIG9mIHRoZXNlIGNoaXBzIGF0IHRoZSBzYW1lIHRpbWUuCitUaGUgbmV4dCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIHdpbGwgc3VwcG9ydCBwb3J0ICYgbWVtb3J5IG1hcHBlZCBjYXJkcyBhdAordGhlIHNhbWUgdGltZS4gSXQgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIG11bHRpcGxlIGRpZmZlcmVudCBjYXJkcyBpbiB0aGUKK3NhbWUgbWFjaGluZS4KKworVGhlIGRyaXZlcnMvc2NzaS9NYWtlZmlsZSBoYXMgYW4gb3ZlcnJpZGUgaW4gaXQgZm9yIHRoZSBtb3N0IGNvbW1vbgorTkNSNTNjNDAwIGNhcmQsIHRoZSBUcmFudG9yIFQxMzBCIGluIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb246CisJUG9ydDogMHgzNTAKKwlJUlEgOiA1CisKK1RoZSBOQ1I1M2M0MDAgZG9lcyBub3Qgc3VwcG9ydCBETUEgYnV0IGl0IGRvZXMgaGF2ZSBQc2V1ZG8tRE1BIHdoaWNoIGlzCitzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworSWYgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBkb2VzIG5vdCB3b3JrIGZvciB5b3UsIHlvdSBjYW4gdXNlIHRoZSBrZXJuZWwKK2NvbW1hbmQgbGluZXMgKGVnIHVzaW5nIHRoZSBsaWxvIGFwcGVuZCBjb21tYW5kKToKKwluY3I1MzgwPXBvcnQsaXJxLGRtYQorCW5jcjUzYzQwMD1wb3J0LGlycQorb3IKKwluY3I1MzgwPWJhc2UsaXJxLGRtYQorCW5jcjUzYzQwMD1iYXNlLGlycQorCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBhbnkgYWRkcmVzc2VzIG9yIHBvcnRzIG90aGVyIHRoYW4gdGhvc2UgaW4KK3RoZSBPVkVSUklERSBvciBnaXZlbiB0byB0aGUga2VybmVsIGFzIGFib3ZlLgorCitUaGlzIGRyaXZlciBwcm92aWRlcyBzb21lIGluZm9ybWF0aW9uIG9uIHdoYXQgaXQgaGFzIGRldGVjdGVkIGluCisvcHJvYy9zY3NpL2dfTkNSNTM4MC94IHdoZXJlIHggaXMgdGhlIHNjc2kgY2FyZCBudW1iZXIgYXMgZGV0ZWN0ZWQgYXQgYm9vdAordGltZS4gTW9yZSBpbmZvIHRvIGNvbWUgaW4gdGhlIGZ1dHVyZS4KKworV2hlbiBOQ1I1M2M0MDAgc3VwcG9ydCBpcyBjb21waWxlZCBpbiwgQklPUyBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQgYnkKK3RoZSBkcml2ZXIgKHRoZSByYXcgNTM4MCBkcml2ZXIgZG9lcyBub3QgYW5kIEkgZG9uJ3QgcGxhbiB0byBmaWRkbGUgd2l0aAoraXQhKS4KKworVGhpcyBkcml2ZXIgd29ya3MgYXMgYSBtb2R1bGUuCitXaGVuIGluY2x1ZGVkIGFzIGEgbW9kdWxlLCBwYXJhbWV0ZXJzIGNhbiBiZSBwYXNzZWQgb24gdGhlIGluc21vZC9tb2Rwcm9iZQorY29tbWFuZCBsaW5lOgorICBuY3JfaXJxPXh4ICAgdGhlIGludGVycnVwdAorICBuY3JfYWRkcj14eCAgdGhlIHBvcnQgb3IgYmFzZSBhZGRyZXNzIChmb3IgcG9ydCBvciBtZW1vcnkKKyAgICAgICAgICAgICAgIG1hcHBlZCwgcmVzcC4pCisgIG5jcl9kbWE9eHggICB0aGUgRE1BCisgIG5jcl81MzgwPTEgICB0byBzZXQgdXAgZm9yIGEgTkNSNTM4MCBib2FyZAorICBuY3JfNTNjNDAwPTEgdG8gc2V0IHVwIGZvciBhIE5DUjUzQzQwMCBib2FyZAorZS5nLgorbW9kcHJvYmUgZ19OQ1I1MzgwIG5jcl9pcnE9NSBuY3JfYWRkcj0weDM1MCBuY3JfNTM4MD0xCisgIGZvciBhIHBvcnQgbWFwcGVkIE5DUjUzODAgYm9hcmQgb3IKK21vZHByb2JlIGdfTkNSNTM4MCBuY3JfaXJxPTI1NSBuY3JfYWRkcj0weGM4MDAwIG5jcl81M2M0MDA9MQorICBmb3IgYSBtZW1vcnkgbWFwcGVkIE5DUjUzQzQwMCBib2FyZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisKKygyNTUgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3Igbm8gb3IgRE1BIGludGVycnVwdCwgMjU0IHRvIGF1dG9wcm9iZSBmb3IgYW4gCisgICAgIElSUSBsaW5lIGlmIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZS4pCisKKworS2V2aW4gTGVudGluCitLLkxlbnRpbkBjcy5tb25hc2guZWR1LmF1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTQ0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dApAQCAtMCwwICsxLDE0MDIgQEAKKworICAgICAgICAgICAgICAgLT08IFRoZSBJQk0gTWljcm9jaGFubmVsIFNDU0ktU3Vic3lzdGVtID49LQorCSAgICAgICAKKwkgICAgICAgICAgICAgICAgIGZvciB0aGUgSUJNIFBTLzIgc2VyaWVzCisJCSAKKwkgIAkgICBMb3cgTGV2ZWwgU29mdHdhcmUtRHJpdmVyIGZvciBMaW51eAorCQkgCisgICAgIENvcHlyaWdodCAoYykgMTk5NSBTdHJvbSBTeXN0ZW1zLCBJbmMuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIAorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWFydGluIEtvbGluZWssIERlY2VtYmVyIDE5OTUuCisgICBPZmZpY2lhbGx5IG1vZGlmaWVkIGFuZCBtYWludGFpbmVkIGJ5IE1pY2hhZWwgTGFuZyBzaW5jZSBKYW51YXJ5IDE5OTkuCisJICAgCisgCSAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA0LjBhCisJCisgICBMYXN0IHVwZGF0ZTogSmFudWFyeSAzLCAyMDAxCisgICAKKyAgIEJlZm9yZSB5b3UgU3RhcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgaXMgdGhlIGNvbW1vbiBSRUFETUUuaWJtbWNhIGZpbGUgZm9yIGFsbCBkcml2ZXIgcmVsZWFzZXMgb2YgdGhlIAorICAgSUJNIE1DQSBTQ1NJIGRyaXZlciBmb3IgTGludXguIFBsZWFzZSBub3RlLCB0aGF0IGRyaXZlciByZWxlYXNlcyA0LjAKKyAgIG9yIG5ld2VyIGRvIG5vdCB3b3JrIHdpdGgga2VybmVsIHZlcnNpb25zIG9sZGVyIHRoYW4gMi40LjAsIHdoaWxlIGRyaXZlcgorICAgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjAgZG8gbm90IHdvcmsgd2l0aCBrZXJuZWxzIDIuNC4wIG9yIGxhdGVyISBJZiB5b3UKKyAgIHRyeSB0byBjb21waWxlIHlvdXIga2VybmVsIHdpdGggdGhlIHdyb25nIGRyaXZlciBzb3VyY2UsIHRoZSAKKyAgIGNvbXBpbGF0aW9uIGlzIGFib3J0ZWQgYW5kIHlvdSBnZXQgYSBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMKKyAgIG5vIGJ1ZyBpbiB0aGUgZHJpdmVyLiBJdCBwcmV2ZW50cyB5b3UgZnJvbSB1c2luZyB0aGUgd3Jvbmcgc291cmNlY29kZQorICAgd2l0aCB0aGUgd3Jvbmcga2VybmVsIHZlcnNpb24uCisKKyAgIEF1dGhvcnMgb2YgdGhpcyBEcml2ZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAtIENocmlzIEJlYXVyZWdhcmQgKGltcHJvdmVtZW50IG9mIHRoZSBTQ1NJLWRldmljZSBtYXBwaW5nIGJ5IHRoZSBkcml2ZXIpCisgICAgLSBNYXJ0aW4gS29saW5layAob3JpZ2luLCBmaXJzdCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyKQorICAgIC0gS2xhdXMgS3VkaWVsa2EgKG11bHRpcGxlIFNDU0ktaG9zdCBtYW5hZ2VtZW50L2RldGVjdGlvbiwgYWRhcHRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICBMaW51eCBLZXJuZWwgMi4xLngsIG1vZHVsZSBzdXBwb3J0KQorICAgIC0gTWljaGFlbCBMYW5nIChhc3NpZ25pbmcgb3JpZ2luYWwgcHVuL2x1biBtYXBwaW5nLCBkeW5hbWljYWwgbGRuCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQsIHJld3JpdHRlbiBhZGFwdGVyIGRldGVjdGlvbiwgdGhpcyBmaWxlLCAKKwkJICAgIHBhdGNoZXMsIG9mZmljaWFsIGRyaXZlciBtYWludGVuYW5jZSBhbmQgc3Vic2VxdWVudCAKKwkJICAgIGRlYnVnZ2luZywgcmVsYXRlZCB3aXRoIHRoZSBkcml2ZXIpCisKKyAgIFRhYmxlIG9mIENvbnRlbnRzCisgICAtLS0tLS0tLS0tLS0tLS0tLQorICAgMSBBYnN0cmFjdAorICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KKyAgICAgMi4xICBJQk0gU0NTSS1TdWJzeXN0ZW0gRGV0ZWN0aW9uCisgICAgIDIuMiAgUGh5c2ljYWwgVW5pdHMsIExvZ2ljYWwgVW5pdHMsIGFuZCBMb2dpY2FsIERldmljZXMKKyAgICAgMi4zICBTQ1NJLURldmljZSBSZWNvZ25pdGlvbiBhbmQgZHluYW1pY2FsIGxkbiBBc3NpZ25tZW50CisgICAgIDIuNCAgU0NTSS1EZXZpY2UgT3JkZXIKKyAgICAgMi41ICBSZWd1bGFyIFNDU0ktQ29tbWFuZC1Qcm9jZXNzaW5nCisgICAgIDIuNiAgQWJvcnQgJiBSZXNldCBDb21tYW5kcworICAgICAyLjcgIERpc2sgR2VvbWV0cnkKKyAgICAgMi44ICBLZXJuZWwgQm9vdCBPcHRpb24KKyAgICAgMi45ICBEcml2ZXIgTW9kdWxlIFN1cHBvcnQKKyAgICAgMi4xMCBNdWx0aXBsZSBIb3N0YWRhcHRlciBTdXBwb3J0CisgICAgIDIuMTEgL3Byb2Mvc2NzaS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAgIDIuMTIgL3Byb2MvbWNhLUZpbGVzeXN0ZW0gSW5mb3JtYXRpb24KKyAgICAgMi4xMyBTdXBwb3J0ZWQgSUJNIFNDU0ktU3Vic3lzdGVtcworICAgICAyLjE0IExpbnV4IEtlcm5lbCBWZXJzaW9ucworICAgMyBDb2RlIEhpc3RvcnkKKyAgIDQgVG8gZG8KKyAgIDUgVXNlcnMnIE1hbnVhbAorICAgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycworICAgICA1LjIgVHJvdWJsZXNob290aW5nCisgICAgIDUuMyBCdWdyZXBvcnRzCisgICAgIDUuNCBTdXBwb3J0IFdXVy1wYWdlCisgICA2IFJlZmVyZW5jZXMKKyAgIDcgQ3JlZGl0cyB0bworICAgICA3LjEgUGVvcGxlCisgICAgIDcuMiBTcG9uc29ycyAmIFN1cHBvcnRlcnMKKyAgIDggVHJhZGVtYXJrcworICAgOSBEaXNjbGFpbWVyCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKiAqCisKKyAgIDEgQWJzdHJhY3QKKyAgIC0tLS0tLS0tLS0KKyAgIFRoaXMgUkVBRE1FLWZpbGUgZGVzY3JpYmVzIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gbG93IGxldmVsIGRyaXZlciBmb3IgCisgICBMaW51eC4gVGhlIGRlc2NyaXB0aW9ucyB3aGljaCB3ZXJlIGZvcm1lcmx5IGtlcHQgaW4gdGhlIHNvdXJjZS1jb2RlIGhhdmUgCisgICBiZWVuIHRha2VuIG91dCB0byB0aGlzIGZpbGUgdG8gZWFzaWZ5IHRoZSBjb2RlcycgcmVhZGFiaWxpdHkuIFRoZSBkcml2ZXIgCisgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBhcyBtb3N0IG9mIHRoZSBmb3JtZXIgZGVzY3JpcHRpb24gd2FzIGFscmVhZHkKKyAgIHF1aXRlIG91dGRhdGVkLiBUaGUgaGlzdG9yeSBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50IGlzIGFsc28ga2VwdCBpbnNpZGUgCisgICBoZXJlLiBNdWx0aXBsZSBoaXN0b3JpY2FsIGRldmVsb3BtZW50cyBoYXZlIGJlZW4gc3VtbWFyaXplZCB0byBzaG9ydGVuIHRoZSAKKyAgIHRleHRzaXplIGEgYml0LiBBdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSB5b3UgY2FuIGZpbmQgYSBzbWFsbCBtYW51YWwgZm9yIAorICAgdGhpcyBkcml2ZXIgYW5kIGhpbnRzIHRvIGdldCBpdCBydW5uaW5nIG9uIHlvdXIgbWFjaGluZS4KKworICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAyLjEgSUJNIFNDU0ktU3Vic3lzdGVtIERldGVjdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoaXMgaXMgZG9uZSBpbiB0aGUgaWJtbWNhX2RldGVjdCgpIGZ1bmN0aW9uLiBJdCBmaXJzdCBjaGVja3MsIGlmIHRoZQorICAgTWljcm9jaGFubmVsLWJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQsIGFzIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gbmVlZHMgdGhlCisgICBNaWNyb2NoYW5uZWwuIEluIGEgbmV4dCBzdGVwLCBhIGZyZWUgaW50ZXJydXB0IGlzIGNob3NlbiBhbmQgdGhlIG1haW4KKyAgIGludGVycnVwdCBoYW5kbGVyIGlzIGNvbm5lY3RlZCB0byBpdCB0byBoYW5kbGUgYW5zd2VycyBvZiB0aGUgU0NTSS0KKyAgIHN1YnN5c3RlbShzKS4gSWYgdGhlIEYvVyBTQ1NJLWFkYXB0ZXIgaXMgZm9yY2VkIGJ5IHRoZSBCSU9TIHRvIHVzZSBJUlExMQorICAgaW5zdGVhZCBvZiBJUlExNCwgSVJRMTEgaXMgdXNlZCBmb3IgdGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIuIEluIGEgCisgICBmdXJ0aGVyIHN0ZXAgaXQgaXMgY2hlY2tlZCwgaWYgdGhlIGFkYXB0ZXIgZ2V0cyBkZXRlY3RlZCBieSBmb3JjZSBmcm9tCisgICB0aGUga2VybmVsIGNvbW1hbmRsaW5lLCB3aGVyZSB0aGUgSS9PIHBvcnQgYW5kIHRoZSBTQ1NJLXN1YnN5c3RlbSBpZCBjYW4gCisgICBiZSBzcGVjaWZpZWQuIFRoZSBuZXh0IHN0ZXAgY2hlY2tzIGlmIHRoZXJlIGlzIGFuIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW0KKyAgIGluc3RhbGxlZC4gVGhpcyByZWdpc3RlciBhcmVhIGlzIGZpeGVkIHRocm91Z2ggYWxsIElCTSBQUy8yIE1DQS1tYWNoaW5lcyAKKyAgIGFuZCBhcHBlYXJzIGFzIHNvbWV0aGluZyBsaWtlIGEgdmlydHVhbCBzbG90IDEwIG9mIHRoZSBNQ0EtYnVzLiBPbiBtb3N0CisgICBQUy8yIG1hY2hpbmVzLCB0aGUgUE9TIHJlZ2lzdGVycyBvZiBzbG90IDEwIGFyZSBzZXQgdG8gMHhmZiBvciAweDAwIGlmIG5vdAorICAgaW50ZWdyYXRlZCBTQ1NJLWNvbnRyb2xsZXIgaXMgYXZhaWxhYmxlLiBCdXQgb24gY2VydGFpbiBQUy8ycywgbGlrZSBtb2RlbCAKKyAgIDk1OTUsIHRoaXMgc2xvdCAxMCBpcyB1c2VkIHRvIHN0b3JlIG90aGVyIGluZm9ybWF0aW9uIHdoaWNoIGF0IGVhcmxpZXIKKyAgIHN0YWdlIGNvbmZ1c2VkIHRoZSBkcml2ZXIgYW5kIHJlc3VsdGVkIGluIHRoZSBkZXRlY3Rpb24gb2Ygc29tZSBnaG9zdC1TQ1NJLiAKKyAgIElmIFBPUy1yZWdpc3RlciAyIGFuZCAzIGFyZSBub3QgMHgwMCBhbmQgbm90IDB4ZmYsIGJ1dCBhbGwgb3RoZXIgUE9TCisgICByZWdpc3RlcnMgYXJlIGVpdGhlciAweGZmIG9yIDB4MDAsIHRoZXJlIG11c3QgYmUgYW4gaW50ZWdyYXRlZCBTQ1NJLQorICAgc3Vic3lzdGVtIHByZXNlbnQgYW5kIGl0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyBJQk0gSW50ZWdyYXRlZCBTQ1NJLQorICAgU3Vic3lzdGVtLiBUaGUgbmV4dCBzdGVwIGNoZWNrcywgaWYgdGhlcmUgaXMgYSBzbG90LWFkYXB0ZXIgaW5zdGFsbGVkIG9uIAorICAgdGhlIE1DQS1idXMuIFRvIGdldCB0aGlzLCB0aGUgZmlyc3QgdHdvIFBPUy1yZWdpc3RlcnMsIHRoYXQgcmVwcmVzZW50IHRoZSAKKyAgIGFkYXB0ZXIgSUQgYXJlIGNoZWNrZWQuIElmIHRoZXkgZml0IHRvIG9uZSBvZiB0aGUgaWRzLCBzdG9yZWQgaW4gdGhlIAorICAgYWRhcHRlciBsaXN0LCBhIFNDU0ktc3Vic3lzdGVtIGlzIGFzc3VtZWQgdG8gYmUgZm91bmQgaW4gYSBzbG90IGFuZCB3aWxsIGJlIAorICAgcmVnaXN0ZXJlZC4gVGhpcyBjaGVjayBpcyBkb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIE1DQS1idXMgc2xvdHMgdG8gYWxsb3cgCisgICBtb3JlIHRoYW4gb25lIFNDU0ktYWRhcHRlciB0byBiZSBwcmVzZW50IGluIHRoZSBQUy8yLXN5c3RlbSBhbmQgdGhpcyBpcyAKKyAgIGFscmVhZHkgdGhlIGZpcnN0IHBvaW50IG9mIHByb2JsZW1zLiBMb29raW5nIGludG8gdGhlIHRlY2huaWNhbCByZWZlcmVuY2UgCisgICBtYW51YWwgZm9yIHRoZSBJQk0gUFMvMiBjb21tb24gaW50ZXJmYWNlcywgdGhlIFBPUzIgcmVnaXN0ZXIgbXVzdCBoYXZlIAorICAgZGlmZmVyZW50IGludGVycHJldGF0aW9uIG9mIGl0cyBzaW5nbGUgYml0cyB0byBhdm9pZCBvdmVybGFwcGluZyBJL08KKyAgIHJlZ2lvbnMuIFdoaWxlIG9uZSBjYW4gYXNzdW1lLCB0aGF0IHRoZSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBoYXMgYSBmaXggCisgICBJL08tYWRkcmVzcyBhdCAweDM1NDAgLSAweDM1NDcsIGZ1cnRoZXIgaW5zdGFsbGVkIElCTSBTQ1NJLWFkYXB0ZXJzIG11c3QgCisgICB1c2UgYSBkaWZmZXJlbnQgSS9PLWFkZHJlc3MuIFRoaXMgaXMgZXhwcmVzc2VkIGJ5IGJpdCAxIHRvIDMgb2YgUE9TMiAKKyAgIChtdWx0aXBsaWVkIGJ5IDggKyAweDM1NDApLiBCaXRzIDIgYW5kIDMgYXJlIHJlc2VydmVkIGZvciB0aGUgaW50ZWdyYXRlZCAKKyAgIHN1YnN5c3RlbSwgYnV0IG5vdCBmb3IgdGhlIGFkYXB0ZXJzISBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MsIGhvdyB0aGUgCisgICBiaXRzIG9mIFBPUzIgYW5kIFBPUzMgc2hvdWxkIGJlIGludGVycHJldGVkLgorICAgCisgICBUaGUgUE9TMi1yZWdpc3RlciBvZiBhbGwgUFMvMiBtb2RlbHMnIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW1zIGhhcyB0aGUgCisgICBmb2xsb3dpbmcgaW50ZXJwcmV0YXRpb24gb2YgYml0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNCA6IENoaXAgUmV2aXNpb24gSUQgKFJlbGVhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMyAtIDIgOiBSZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDEgICAgIDogOGsgTlZSQU0gRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAwICAgICA6IENoaXAgRW5hYmxlIChFTi1TaWduYWwpCisgICBUaGUgUE9TMy1yZWdpc3RlciBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzIChmb3IgbW9zdCBJQk0gU0NTSS1zdWJzeXMuKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNSA6IFNDU0kgSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA0IC0gMCA6IFJlc2VydmVkID0gMAorICAgVGhlIHNsb3QtYWRhcHRlcnMgaGF2ZSBkaWZmZXJlbnQgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgYml0cy4gVGhlIElCTSBTQ1NJCisgICBhZGFwdGVyICh3L0NhY2hlKSBhbmQgdGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgdXNlIHRoZSBmb2xsb3dpbmcKKyAgIGludGVycHJldGF0aW9uIG9mIHRoZSBQT1MyIHJlZ2lzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDcgLSA0IDogUk9NIFNlZ21lbnQgQWRkcmVzcyBTZWxlY3QKKwkJCSAgIEJpdCAzIC0gMSA6IEFkYXB0ZXIgSS9PIEFkZHJlc3MgU2VsZWN0ICgqOCsweDM1NDApCisJCQkgICBCaXQgMCAgICAgOiBBZGFwdGVyIEVuYWJsZSAoRU4tU2lnbmFsKQorICAgYW5kIGZvciB0aGUgUE9TMyByZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNSA6IFNDU0kgSUQgCisJCQkgICBCaXQgNCAgICAgOiBGYWlybmVzcyBFbmFibGUgKFNDU0kgSUQzIGYuIEYvVykKKwkJCSAgIEJpdCAzIC0gMCA6IEFyYml0cmF0aW9uIExldmVsCisgICBUaGUgbW9zdCBtb2Rlcm4gcHJvZHVjdCBvZiB0aGUgc2VyaWVzIGlzIHRoZSBJQk0gU0NTSS0yIEYvVyBhZGFwdGVyLCBpdCAKKyAgIGFsbG93cyBkdWFsLWJ1cyBTQ1NJIGFuZCBTQ1NJLXdpZGUgYWRkcmVzc2luZywgd2hpY2ggbWVhbnMsIFBVTnMgbWF5IGJlCisgICBiZXR3ZWVuIDAgYW5kIDE1LiBIZXJlLCBCaXQgNCBpcyB0aGUgaGlnaC1vcmRlciBiaXQgb2YgdGhlIDQtYml0IHdpZGUKKyAgIGFkYXB0ZXIgUFVOIGV4cHJlc3Npb24uIEluIHNob3J0IHdvcmRzLCB0aGlzIG1lYW5zLCB0aGF0IElCTSBQUy8yIG1hY2hpbmVzIAorICAgY2FuIG9ubHkgc3VwcG9ydCAxIHNpbmdsZSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBieSBkZWZhdWx0LiBBZGRpdGlvbmFsCisgICBzbG90LWFkYXB0ZXJzIGdldCBwb3J0cyBhc3NpZ25lZCBieSB0aGUgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gdG9vbC4KKworICAgT25lIGRheSBJIGZvdW5kIGEgcGF0Y2ggaW4gaWJtbWNhX2RldGVjdCgpLCBmb3JjaW5nIHRoZSBJL08tYWRkcmVzcyB0byBiZSAKKyAgIDB4MzU0MCBmb3IgaW50ZWdyYXRlZCBTQ1NJLXN1YnN5c3RlbXMsIHRoZXJlIHdhcyBhIHJlbWFyayBwbGFjZWQsIHRoYXQgb24gCisgICBpbnRlZ3JhdGVkIElCTSBTQ1NJLXN1YnN5c3RlbXMgb2YgbW9kZWwgNTYsIHRoZSBQT1MyIHJlZ2lzdGVyIHdhcyBzaG93aW5nIDUuCisgICBUaGlzIG1lYW5zLCB0aGF0IHJlYWxseSBmb3IgdGhlc2UgbW9kZWxzLCBQT1MyIGhhcyB0byBiZSBpbnRlcnByZXRlZAorICAgc3RpY2tpbmcgdG8gdGhlIHRlY2huaWNhbCByZWZlcmVuY2UgZ3VpZGUuIEluIHRoaXMgY2FzZSwgdGhlIGJpdCAyICg0KSBpcyAKKyAgIGEgcmVzZXJ2ZWQgYml0IGFuZCBtYXkgbm90IGJlIGludGVycHJldGVkLiBUaGVzZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSAKKyAgIGFkYXB0ZXJzIGFuZCB0aGUgaW50ZWdyYXRlZCBjb250cm9sbGVycyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGJ5IHRoZSAKKyAgIGRldGVjdGlvbiByb3V0aW5lIG9mIHRoZSBkcml2ZXIgb24gZnJvbSB2ZXJzaW9uID4zLjBnLiAKKworICAgRXZlcnkgdGltZSwgYSBTQ1NJLXN1YnN5c3RlbSBpcyBkaXNjb3ZlcmVkLCB0aGUgaWJtbWNhX3JlZ2lzdGVyKCkgZnVuY3Rpb24KKyAgIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiBjaGVja3MgZmlyc3QsIGlmIHRoZSByZXF1ZXN0ZWQgYXJlYSBmb3IgdGhlIEkvTy0KKyAgIGFkZHJlc3Mgb2YgdGhpcyBTQ1NJLXN1YnN5c3RlbSBpcyBzdGlsbCBhdmFpbGFibGUgYW5kIGFzc2lnbnMgdGhpcyBJL08tCisgICBhcmVhIHRvIHRoZSBTQ1NJLXN1YnN5c3RlbS4gVGhlcmUgYXJlIGFsd2F5cyA4IHNlcXVlbnRpYWwgSS9PLWFkZHJlc3NlcworICAgdGFrZW4gZm9yIGVhY2ggaW5kaXZpZHVhbCBTQ1NJLXN1YnN5c3RlbSBmb3VuZCwgd2hpY2ggYXJlOgorICAgCisgICAgIE9mZnNldCAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9ucworICAgICAgIDAgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDEgICAgUmVhZC9Xcml0ZQorICAgICAgIDEgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDIgICAgUmVhZC9Xcml0ZQorICAgICAgIDIgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDMgICAgUmVhZC9Xcml0ZQorICAgICAgIDMgICAgIENvbW1hbmQgSW50ZXJmYWNlIFJlZ2lzdGVyIDQgICAgUmVhZC9Xcml0ZQorICAgICAgIDQgICAgIEF0dGVudGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgUmVhZC9Xcml0ZQorICAgICAgIDUgICAgIEJhc2ljIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgUmVhZC9Xcml0ZQorICAgICAgIDYgICAgIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgICAgICAgUmVhZAorICAgICAgIDcgICAgIEJhc2ljIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgUmVhZAorICAgCisgICBBZnRlciB0aGUgSS9PLWFkZHJlc3MgcmFuZ2UgaXMgYXNzaWduZWQsIHRoZSBob3N0LWFkYXB0ZXIgaXMgYXNzaWduZWQKKyAgIHRvIGEgbG9jYWwgc3RydWN0dXJlIHdoaWNoIGtlZXBzIGFsbCBhZGFwdGVyIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisgICBkcml2ZXIgaXRzZWxmIGFuZCB0aGUgbWlkLSBhbmQgaGlnaGVyLWxldmVsIFNDU0ktZHJpdmVycy4gVGhlIFNDU0kgcHVuL2x1bgorICAgYW5kIHRoZSBhZGFwdGVycycgbGRuIHRhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGdldCBwcm9iZWQgYWZ0ZXJ3YXJkcyBieQorICAgdGhlIGNoZWNrX2RldmljZXMoKSBmdW5jdGlvbi4gSWYgbm8gZnVydGhlciBhZGFwdGVycyBhcmUgZm91bmQsIAorICAgaWJtbWNhX2RldGVjdCgpIHF1aXRzLgorICAgCisgICAyLjIgUGh5c2ljYWwgVW5pdHMsIExvZ2ljYWwgVW5pdHMsIGFuZCBMb2dpY2FsIERldmljZXMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlcmUgY2FuIGJlIHVwIHRvIDU2IGRldmljZXMgb24gdGhlIFNDU0kgYnVzIChiZXNpZGVzIHRoZSBhZGFwdGVyKToKKyAgIHRoZXJlIGFyZSB1cCB0byA3ICJwaHlzaWNhbCB1bml0cyIgKGVhY2ggaWRlbnRpZmllZCBieSBwaHlzaWNhbCB1bml0IAorICAgbnVtYmVyIG9yIHB1biwgYWxzbyBjYWxsZWQgdGhlIHNjc2kgaWQsIHRoaXMgaXMgdGhlIG51bWJlciB5b3Ugc2VsZWN0CisgICB3aXRoIGhhcmR3YXJlIGp1bXBlcnMpLCBhbmQgZWFjaCBwaHlzaWNhbCB1bml0IGNhbiBoYXZlIHVwIHRvIDggCisgICAibG9naWNhbCB1bml0cyIgKGVhY2ggaWRlbnRpZmllZCBieSBsb2dpY2FsIHVuaXQgbnVtYmVyLCBvciBsdW4sIAorICAgYmV0d2VlbiAwIGFuZCA3KS4gVGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgb2ZmZXJzIHRoaXMgb24gdXAgdG8gdHdvCisgICBidXNzZXMgYW5kIHByb3ZpZGVzIHN1cHBvcnQgZm9yIDMwIGxvZ2ljYWwgZGV2aWNlcyBhdCB0aGUgc2FtZSB0aW1lLCB3aGVyZQorICAgaW4gd2lkZS1hZGRyZXNzaW5nIG1vZGUgeW91IGNhbiBoYXZlIDE2IHB1bnMgd2l0aCAzMiBsdW5zIG9uIGVhY2ggZGV2aWNlLgorICAgVGhpcyBzZWN0aW9uIGRleHJpYmVzIHlvdSB0aGUgaGFuZGxpbmcgb2YgZGV2aWNlcyBvbiBub24tRi9XIGFkYXB0ZXJzLgorICAgSnVzdCBpbWFnaW5lLCB0aGF0IHlvdSBjYW4gaGF2ZSAxNiAqIDMyID0gNTEyIGRldmljZXMgb24gYSBGL1cgYWRhcHRlcgorICAgd2hpY2ggbWVhbnMgYSBsb3Qgb2YgcG9zc2libGUgZGV2aWNlcyBmb3Igc3VjaCBhIHNtYWxsIG1hY2hpbmUuCisKKyAgIFR5cGljYWxseSB0aGUgYWRhcHRlciBoYXMgcHVuPTcsIHNvIHB1bnMgb2Ygb3RoZXIgcGh5c2ljYWwgdW5pdHMKKyAgIGFyZSBiZXR3ZWVuIDAgYW5kIDYoMTUpLiBPbiBhIHdpZGUtYWRhcHRlciBhIHB1biBoaWdoZXIgdGhhbiA3IGlzCisgICBwb3NzaWJsZSwgYnV0IGlzIG5vcm1hbGx5IG5vdCB1c2VkLiBBbG1vc3QgYWxsIHBoeXNpY2FsIHVuaXRzIGhhdmUgb25seSAKKyAgIG9uZSBsb2dpY2FsIHVuaXQsIHdpdGggbHVuPTAuIEEgQ0QtUk9NIGp1a2Vib3ggd291bGQgYmUgYW4gZXhhbXBsZSBvZiBhIAorICAgcGh5c2ljYWwgdW5pdCB3aXRoIG1vcmUgdGhhbiBvbmUgbG9naWNhbCB1bml0LgorCisgICBUaGUgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3Igb2YgdGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBoaWRlcyB0aGUgY29tcGxleAorICAgdHdvLWRpbWVuc2lvbmFsIChwdW4sbHVuKSBvcmdhbml6YXRpb24gZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KKyAgIFdoZW4gdGhlIG1hY2hpbmUgaXMgcG93ZXJlZC11cCAob3IgcmVib290ZWQpLCB0aGUgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3IgCisgICBjaGVja3MsIG9uIGl0cyBvd24sIGFsbCA1NiBwb3NzaWJsZSAocHVuLGx1bikgY29tYmluYXRpb25zLCBhbmQgdGhlIGZpcnN0IAorICAgMTUgZGV2aWNlcyBmb3VuZCBhcmUgYXNzaWduZWQgaW50byBhIG9uZS1kaW1lbnNpb25hbCBhcnJheSBvZiBzby1jYWxsZWQgCisgICAibG9naWNhbCBkZXZpY2VzIiwgaWRlbnRpZmllZCBieSAibG9naWNhbCBkZXZpY2UgbnVtYmVycyIgb3IgbGRuLiBUaGUgbGFzdCAKKyAgIGxkbj0xNSBpcyByZXNlcnZlZCBmb3IgdGhlIHN1YnN5c3RlbSBpdHNlbGYuIFdpZGUgYWRhcHRlcnMgbWF5IGhhdmUgCisgICB0byBjaGVjayB1cCB0byAxNSAqIDggPSAxMjAgcHVuL2x1biBjb21iaW5hdGlvbnMuCisgICAKKyAgIDIuMyBTQ1NJLURldmljZSBSZWNvZ25pdGlvbiBhbmQgRHluYW1pY2FsIGxkbiBBc3NpZ25tZW50CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgT25lIGNvbnNlcXVlbmNlIG9mIGluZm9ybWF0aW9uIGhpZGluZyBpcyB0aGF0IHRoZSByZWFsIChwdW4sbHVuKSAgICAKKyAgIG51bWJlcnMgYXJlIGFsc28gaGlkZGVuLiBUaGUgdHdvIHBvc3NpYmlsaXRpZXMgdG8gZ2V0IGFyb3VuZCB0aGlzIHByb2JsZW0KKyAgIGlzIHRvIG9mZmVyIGZha2UgcHVuL2x1biBjb21iaW5hdGlvbnMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgdG8gCisgICBkZWxldGUgdGhlIHdob2xlIG1hcHBpbmcgb2YgdGhlIGFkYXB0ZXIgYW5kIHRvIHJlYXNzaWduIHRoZSBsZG5zLCB1c2luZworICAgdGhlIGltbWVkaWF0ZSBhc3NpZ24gY29tbWFuZCBvZiB0aGUgU0NTSS1zdWJzeXN0ZW0gZm9yIHByb2JpbmcgdGhyb3VnaAorICAgYWxsIHBvc3NpYmxlIHB1bi9sdW4gY29tYmluYXRpb25zLiBhIGxkbiBpcyBhICJsb2dpY2FsIGRldmljZSBudW1iZXIiCisgICB3aGljaCBpcyB1c2VkIGJ5IElCTSBTQ1NJLXN1YnN5c3RlbXMgdG8gYWNjZXNzIHNvbWUgdmFsaWQgU0NTSS1kZXZpY2UuCisgICBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlciwgdGhlIGZvbGxvd2luZyBhcHByb2FjaCAKKyAgIHdhcyB1c2VkOgorICAgCisgICBGaXJzdCwgdGhlIGRyaXZlciBjaGVja2VkIHRoZSBsZG4ncyAoMCB0byA2KSB0byBmaW5kIG91dCB3aGljaCBsZG4ncworICAgaGF2ZSBkZXZpY2VzIGFzc2lnbmVkLiBUaGlzIHdhcyBkb25lIGJ5IHRoZSBmdW5jdGlvbnMgY2hlY2tfZGV2aWNlcygpIGFuZAorICAgZGV2aWNlX2V4aXN0cygpLiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFzIGEgc3BlY2lhbCBwYXJhZ3JhcGggb2YgY29kZQorICAgKHNlZSBsb2NhbF9jaGVja2luZ19waGFzZV9mbGFnKSB0byBhc3Npc3QgaW4gdGhlIGNoZWNraW5nLiBBc3N1bWUsIGZvcgorICAgZXhhbXBsZSwgdGhhdCB0aHJlZSBsb2dpY2FsIGRldmljZXMgd2VyZSBmb3VuZCBhc3NpZ25lZCBhdCBsZG4gMCwgMSwgMi4KKyAgIFRoZXNlIGFyZSBwcmVzZW50ZWQgdG8gdGhlIHVwcGVyIGxheWVyIG9mIExpbnV4IFNDU0kgZHJpdmVyCisgICBhcyBkZXZpY2VzIHdpdGggYm9ndXMgKHB1biwgbHVuKSBlcXVhbCB0byAoMCwwKSwgKDEsMCksICgyLDApLiAKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgdXBwZXIgbGF5ZXIgaXNzdWVzIGEgY29tbWFuZCB0byBkZXZpY2UKKyAgIHNheSAoNCwwKSwgdGhpcyBkcml2ZXIgcmV0dXJucyBESURfTk9fQ09OTkVDVCBlcnJvci4KKworICAgSW4gYSBzZWNvbmQgc3RlcCBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50LCB0aGUgZm9sbG93aW5nIGltcHJvdmVtZW50IGhhcworICAgYmVlbiBhcHBsaWVkOiBUaGUgZmlyc3QgYXBwcm9hY2ggbGltaXRlZCB0aGUgbnVtYmVyIG9mIGRldmljZXMgdG8gNywgZmFyCisgICBmZXdlciB0aGFuIHRoZSAxNSB0aGF0IGl0IGNvdWxkIHVzZW0gdGhlbiBpdCBqdXN0IG1hcGVkIGxkbiAtPiAKKyAgIChsZG4vOCxsZG4lOCkgZm9yIHB1bixsdW4uICBXZSBlbmRlZCB1cCB3aXRoIGEgcmVhbCBtaXNobWFzaCBvZiBwdW5zCisgICBhbmQgbHVucywgYnV0IGl0IGFsbCBzZWVtZWQgdG8gd29yay4KKworICAgVGhlIGxhdGVzdCBkZXZlbG9wbWVudCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gMy4wCisgICBhbmQgbGF0ZXIsIHJlYWxpemVzIHRoZSBkZXZpY2UgcmVjb2duaXRpb24gaW4gdGhlIGZvbGxvd2luZyB3YXk6CisgICBUaGUgcGh5c2ljYWwgU0NTSS1kZXZpY2VzIG9uIHRoZSBTQ1NJLWJ1cyBhcmUgcHJvYmVkIHZpYSBpbW1lZGlhdGVfYXNzaWduLSAKKyAgIGFuZCBkZXZpY2VfaW5xdWlyeS1jb21tYW5kcywgdGhhdCBpcyBhbGwgaW1wbGVtZW50ZWQgaW4gYSBjb21wbGV0ZWx5IG5ldworICAgbWFkZSBjaGVja19kZXZpY2VzKCkgc3Vicm91dGluZS4gVGhpcyBkZWxpdmVycyBhbiBleGFjdCBtYXAgb2YgdGhlIHBoeXNpY2FsCisgICBTQ1NJLXdvcmxkIHRoYXQgaXMgbm93IHN0b3JlZCBpbiB0aGUgZ2V0X3Njc2lbXVtdLWFycmF5LiBUaGlzIG1lYW5zLAorICAgdGhhdCB0aGUgb25jZSBoaWRkZW4gcHVuLGx1biBhc3NpZ25tZW50IGlzIG5vdyBrbm93biB0byB0aGlzIGRyaXZlci4KKyAgIEl0IG5vIGxvbmdlciBiZWxpZXZlcyBpbiBkZWZhdWx0LXNldHRpbmdzIG9mIHRoZSBzdWJzeXN0ZW0gYW5kIG1hcHMgYWxsCisgICBsZG5zIHRvIGV4aXN0aW5nIHB1bixsdW4gImJ5IGZvb3QiLiBUaGlzIGFzc3VyZXMgZnVsbCBjb250cm9sIG9mIHRoZSBsZG4KKyAgIG1hcHBpbmcgYW5kIGFsbG93cyBkeW5hbWljYWwgcmVtYXBwaW5nIG9mIGxkbnMgdG8gZGlmZmVyZW50IHB1bixsdW4sIGlmCisgICB0aGVyZSBhcmUgbW9yZSBTQ1NJLWRldmljZXMgaW5zdGFsbGVkIHRoYW4gbGRucyBhdmFpbGFibGUgKG4+MTUpLiBUaGUKKyAgIGxkbnMgZnJvbSAwIHRvIDYgZ2V0ICdoYXJkd2lyZWQnIGJ5IHRoaXMgZHJpdmVyIHRvIHB1bnMgMCB0byA3IGF0IGx1bj0wLAorICAgZXhjbHVkaW5nIHRoZSBwdW4gb2YgdGhlIHN1YnN5c3RlbS4gVGhpcyBhc3N1cmVzLCB0aGF0IGF0IGxlYXN0IHNpbXBsZSAKKyAgIFNDU0ktaW5zdGFsbGF0aW9ucyBoYXZlIG9wdGltdW0gYWNjZXNzLXNwZWVkIGFuZCBhcmUgbm90IHRvdWNoZWQgYnkKKyAgIGR5bmFtaWNhbCByZW1hcHBpbmcuIFRoZSBsZG5zIDcgdG8gMTQgYXJlIHB1dCB0byBleGlzdGluZyBkZXZpY2VzIHdpdGggCisgICBsdW4+MCBvciB0byBub24tZXhpc3RpbmcgZGV2aWNlcywgaW4gb3JkZXIgdG8gc2F0aXNmeSB0aGUgc3Vic3lzdGVtLCBpZiAKKyAgIHRoZXJlIGFyZSBsZXNzIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGNvbm5lY3RlZC4gSW4gdGhlIGNhc2Ugb2YgbW9yZSB0aGFuIDE1IAorICAgZGV2aWNlcywgdGhlIGR5bmFtaWNhbCBtYXBwaW5nIGdvZXMgYWN0aXZlLiBJZiB0aGUgZ2V0X3Njc2lbXVtdIHJlcG9ydHMgYSAKKyAgIGRldmljZSB0byBiZSBleGlzdGFudCwgYnV0IGl0IGhhcyBubyBsZG4gYXNzaWduZWQsIGl0IGdldHMgYSBsZG4gb3V0IG9mIDcgCisgICB0byAxNC4gVGhlIG51bWJlcnMgYXJlIGFzc2lnbmVkIGluIGN5Y2xpYyBvcmRlci4gVGhlcmVmb3JlIGl0IHRha2VzIDggCisgICBkeW5hbWljYWwgcmVhc3NpZ25tZW50cyBvbiB0aGUgU0NTSS1kZXZpY2VzLCB1bnRpbCBhIGNlcnRhaW4gZGV2aWNlIAorICAgbG9zZXMgaXRzIGxkbiBhZ2Fpbi4gVGhpcyBhc3N1cmVzLCB0aGF0IGR5bmFtaWNhbCByZW1hcHBpbmcgaXMgYXZvaWRlZCAKKyAgIGR1cmluZyBpbnRlbnNlIEkvTyBiZXR3ZWVuIHVwIHRvIDE1IFNDU0ktZGV2aWNlcyAobWVhbnMgcHVuLGx1biAKKyAgIGNvbWJpbmF0aW9ucykuIEEgZnVydGhlciBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMsIHRoYXQgcGVvcGxlIHdobworICAgYnVpbGQgdGhlaXIga2VybmVsIHdpdGhvdXQgcHJvYmluZyBvbiBhbGwgbHVucyB3aWxsIGdldCB3aGF0IHRoZXkgZXhwZWN0LAorICAgYmVjYXVzZSB0aGUgZHJpdmVyIGp1c3Qgd29uJ3QgYXNzaWduIGV2ZXJ5dGhpbmcgd2l0aCBsdW4+MCB3aGVuIAorICAgbXVsdHBpbGUgbHVuIHByb2JpbmcgaXMgaW5hY3RpdmUuCisgCisgICAyLjQgU0NTSS1EZXZpY2UgT3JkZXIKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQmVjYXVzZSBvZiB0aGUgbm93IGNvcnJlY3QgcmVjb2duaXRpb24gb2YgcGh5c2ljYWwgcHVuLGx1biwgYW5kIAorICAgdGhlaXIgcmVwb3J0IHRvIG1pZC1sZXZlbC0gYW5kIGhpZ2hlci1sZXZlbC1kcml2ZXJzLCB0aGUgbmV3IHJlcG9ydGVkIHB1bnMKKyAgIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkLCBmYWtlZCBwdW5zLiBUaGVyZWZvcmUsIExpbnV4IHdpbGwgZXZlbnR1YWxseQorICAgY2hhbmdlIC9kZXYvc2RYWFggYXNzaWdubWVudHMgYW5kIHByb21wdCB5b3UgZm9yIGNvcnJ1cHRlZCBzdXBlcmJsb2NrCisgICByZXBhaXIgb24gYm9vdHRpbWUuIEluIHRoaXMgY2FzZSBETyBOT1QgUEFOSUMsIFlPVVIgRElTS1MgQVJFIFNUSUxMIE9LISEhCisgICBZb3UgaGF2ZSB0byByZWJvb3QgKENUUkwtRCkgd2l0aCBhbiBvbGQga2VybmVsIGFuZCBzZXQgdGhlIC9ldGMvZnN0YWItZmlsZQorICAgZW50cmllcyByaWdodC4gQWZ0ZXIgdGhhdCwgdGhlIHN5c3RlbSBzaG91bGQgY29tZSB1cCBhcyBlcnJvcmZyZWUgYXMgYmVmb3JlLgorICAgSWYgeW91ciBib290LXBhcnRpdGlvbiBpcyBub3QgY29taW5nIHVwLCBhbHNvIGVkaXQgdGhlIC9ldGMvbGlsby5jb25mLWZpbGUKKyAgIGluIGEgTGludXggc2Vzc2lvbiBib290ZWQgb24gb2xkIGtlcm5lbCBhbmQgcnVuIGxpbG8gYmVmb3JlIHJlYm9vdC4gQ2hlY2sKKyAgIGxpbG8uY29uZiBhbnl3YXkgdG8gZ2V0IGJvb3Qgb24gb3RoZXIgcGFydGl0aW9ucyB3aXRoIGZvcmVpZ24gT1NlcyByaWdodAorICAgYWdhaW4uIEJ1dCB0aGVyZSBleGlzdHMgYSBmZWF0dXJlIG9mIHRoaXMgZHJpdmVyIHRoYXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKKyAgIHRoZSBhc3NpZ25tZW50IG9yZGVyIG9mIHRoZSBTQ1NJLWRldmljZXMgYnkgZmxpcHBpbmcgdGhlIFBVTi1hc3NpZ25tZW50LgorICAgU2VlIHRoZSBuZXh0IHBhcmFncmFwaCBmb3IgYSBkZXNjcmlwdGlvbi4KKyAKKyAgIFRoZSBwcm9ibGVtIGZvciB0aGlzIGlzLCB0aGF0IExpbnV4IGRvZXMgbm90IGFzc2lnbiB0aGUgU0NTSS1kZXZpY2VzIGluIHRoZQorICAgd2F5IGFzIGRlc2NyaWJlZCBpbiB0aGUgQU5TSS1TQ1NJLXN0YW5kYXJkLiBMaW51eCBhc3NpZ25zIC9kZXYvc2RhIHRvIAorICAgdGhlIGRldmljZSB3aXRoIGF0IG1pbmltdW0gaWQgMC4gQnV0IHRoZSBmaXJzdCBkcml2ZSBzaG91bGQgYmUgYXQgaWQgNiwKKyAgIGJlY2F1c2UgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgZHJpdmUgYXQgaWQgNiBoYXMsIGJ5IGhhcmR3YXJlLCB0aGUgaGlnaGVzdAorICAgcHJpb3JpdHkgYW5kIGEgZHJpdmUgYXQgaWQgMCB0aGUgbG93ZXN0LiBJQk0gd2FzIG9uZSBvZiB0aGUgcmFyZSBwcm9kdWNlcnMsCisgICB3aGVyZSB0aGUgQklPUyBhc3NpZ25zIGRyaXZlcyBiZWxvbmdpbmcgdG8gdGhlIEFOU0ktU0NTSS1zdGFuZGFyZC4gTW9zdCAKKyAgIG90aGVyIHByb2R1Y2VycycgQklPUyBkb2VzIG5vdCAoSSB0aGluayBldmVuIEFkYXB0ZWMtQklPUykuIFRoZSAKKyAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIGZsYWcsIHdoaWNoIHlvdSBzZXQgd2hpbGUgY29uZmlndXJpbmcgdGhlCisgICBrZXJuZWwgZW5hYmxlcyB0byBjaG9vc2UgdGhlIHByZWZlcnJlZCB3YXkgb2YgU0NTSS1kZXZpY2UtYXNzaWdubWVudC4gCisgICBEZWZpbmluZyB0aGlzIGZsYWcgd291bGQgcmVzdWx0IGluIExpbnV4IGRldGVybWluaW5nIHRoZSBkZXZpY2VzIGluIHRoZSAKKyAgIHNhbWUgb3JkZXIgYXMgRE9TIGFuZCBPUy8yIGRvZXMgb24geW91ciBNQ0EtbWFjaGluZS4gVGhpcyBpcyBhbHNvIHN0YW5kYXJkIAorICAgb24gbW9zdCBpbmR1c3RyaWFsIGNvbXB1dGVycyBhbmQgT1NlcywgbGlrZSBlLmcuIE9TLTkuIExlYXZpbmcgdGhpcyBmbGFnIAorICAgdW5kZWZpbmVkIHdpbGwgZ2V0IHlvdXIgZGV2aWNlcyBvcmRlcmVkIGluIHRoZSBkZWZhdWx0IHdheSBvZiBMaW51eC4gU2VlIAorICAgYWxzbyB0aGUgcmVtYXJrcyBvZiBDaHJpcyBCZWF1cmVnYXJkIGZyb20gRGVjIDE1LCAxOTk3IGFuZCB0aGUgZm9sbG93dXBzIAorICAgaW4gc2VjdGlvbiAzLgorICAgCisgICAyLjUgUmVndWxhciBTQ1NJLUNvbW1hbmQtUHJvY2Vzc2luZworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE9ubHkgdGhyZWUgZnVuY3Rpb25zIGdldCBpbnZvbHZlZDogaWJtbWNhX3F1ZXVlY29tbWFuZCgpLCBpc3N1ZV9jbWQoKSwKKyAgIGFuZCBpbnRlcnJ1cHRfaGFuZGxlcigpLgorCisgICBUaGUgdXBwZXIgbGF5ZXIgaXNzdWVzIGEgc2NzaSBjb21tYW5kIGJ5IGNhbGxpbmcgZnVuY3Rpb24gCisgICBpYm1tY2FfcXVldWVjb21tYW5kKCkuIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAic3Vic3lzdGVtIGNvbnRyb2wgYmxvY2siCisgICAoc2NiKSBhbmQgY2FsbHMgYSBsb2NhbCBmdW5jdGlvbiBpc3N1ZV9jbWQoKSwgd2hpY2ggd3JpdGVzIGEgc2NiIAorICAgY29tbWFuZCBpbnRvIHN1YnN5c3RlbSBJL08gcG9ydHMuIE9uY2UgdGhlIHNjYiBjb21tYW5kIGlzIGNhcnJpZWQgb3V0LCAKKyAgIHRoZSBpbnRlcnJ1cHRfaGFuZGxlcigpIGlzIGludm9rZWQuIElmIGEgZGV2aWNlIGlzIGRldGVybWluZWQgdG8gYmUgCisgICBleGlzdGFudCBhbmQgaXQgaGFzIG5vdCBhc3NpZ25lZCBhbnkgbGRuLCBpdCBnZXRzIG9uZSBkeW5hbWljYWxseS4KKyAgIEZvciB0aGlzLCB0aGUgd2hvbGUgc3R1ZmYgaXMgZG9uZSBpbiBpYm1tY2FfcXVldWVjb21tYW5kKCkuCisKKyAgIDIuNiBBYm9ydCAmIFJlc2V0IENvbW1hbmRzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlc2UgYXJlIGltcGxlbWVudGVkIHdpdGggYnVzeSB3YWl0aW5nIGZvciBpbnRlcnJ1cHQgdG8gYXJyaXZlLgorICAgaWJtbWNhX3Jlc2V0KCkgYW5kIGlibW1jYV9hYm9ydCgpIGRvIG5vdCB3b3JrIHN1ZmZpY2VudGx5IHdlbGwKKyAgIHVwIHRvIG5vdyBhbmQgbmVlZCBzdGlsbCBhIGxvdCBvZiBkZXZlbG9wbWVudCB3b3JrLiBCdXQsIHRoaXMgc2VlbXMKKyAgIHRvIGJlIGV2ZW4gYSBwcm9ibGVtIHdpdGggb3RoZXIgU0NTSS1sb3cgbGV2ZWwgZHJpdmVycywgdG9vLiBIb3dldmVyLAorICAgdGhpcyBzaG91bGQgYmUgbm8gZXhjdXNlLgorCisgICAyLjcgRGlzayBHZW9tZXRyeQorICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBpYm1tY2FfYmlvc3BhcmFtcygpIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgZGlzayBnZW9tZXRyeSAKKyAgIGFzIHRoZSBiaW9zLiBUaGlzIGlzIG5lZWRlZCBmb3IgZmRpc2ssIGV0Yy4gVGhlIHJldHVybmVkIGdlb21ldHJ5IGlzIAorICAgY2VydGFpbmx5IGNvcnJlY3QgZm9yIGRpc2tzIHNtYWxsZXIgdGhhbiAxIGdpZ2FieXRlLiBJbiB0aGUgbWVhbnRpbWUsCisgICBpdCBoYXMgYmVlbiBwcm92ZWQsIHRoYXQgdGhpcyB3b3JrcyBmaW5lIGV2ZW4gd2l0aCBkaXNrcyBsYXJnZXIgdGhhbgorICAgMSBnaWdhYnl0ZS4KKworICAgMi44IEtlcm5lbCBCb290IE9wdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIGZ1bmN0aW9uIGlibW1jYV9zY3NpX3NldHVwKCkgaXMgY2FsbGVkIGlmIG9wdGlvbiBpYm1tY2FzY3NpPW4gCisgICBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbC4gU2VlIGZpbGUgbGludXgvaW5pdC9tYWluLmMgZm9yIGRldGFpbHMuCisgICAKKyAgIDIuOSBEcml2ZXIgTW9kdWxlIFN1cHBvcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIElzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgYnkgSy4gS3VkaWVsa2EuIFRoaXMgY291bGQgcHJvYmFibHkgbm90IHdvcmsKKyAgIG9uIGtlcm5lbHMgPDIuMS4wLgorICAKKyAgIDIuMTAgTXVsdGlwbGUgSG9zdGFkYXB0ZXIgU3VwcG9ydAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB1cCB0byBlaWdodCBpbnRlcmZhY2VzIG9mIHR5cGUgSUJNLVNDU0ktU3Vic3lzdGVtLiAKKyAgIEludGVncmF0ZWQtLCBhbmQgTUNBLWFkYXB0ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQuIFVucmVjb2duaXphYmxlCisgICBJQk0tU0NTSS1TdWJzeXN0ZW0gaW50ZXJmYWNlcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGtlcm5lbC1wYXJhbWV0ZXJzLgorIAorICAgMi4xMSAvcHJvYy9zY3NpLUZpbGVzeXN0ZW0gSW5mb3JtYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJpdmVyIGNvbmRpdGlvbiBpcyBnaXZlbiBpbiAKKyAgIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0X25vPi4gaWJtbWNhX3Byb2NfaW5mbygpIHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRpb24uCisgICAKKyAgIFRoaXMgdGFibGUgaXMgcXVpdGUgaW5mb3JtYXRpdmUgZm9yIGludGVyZXN0ZWQgdXNlcnMuIEl0IHNob3dzIHRoZSBsb2FkCisgICBvZiBjb21tYW5kcyBvbiB0aGUgc3Vic3lzdGVtIGFuZCB3ZXRoZXIgeW91IGFyZSBydW5uaW5nIHRoZSBieXBhc3NlZCAKKyAgIChzb2Z0d2FyZSkgb3IgaW50ZWdyYXRlZCAoaGFyZHdhcmUpIFNDU0ktY29tbWFuZCBzZXQgKHNlZSBiZWxvdykuIFRoZQorICAgYW1vdW50IG9mIGFjY2Vzc2VzIGlzIHNob3duLiBSZWFkLCB3cml0ZSwgbW9kZXNlbGVjdCBpcyBzaG93biBzZXBhcmF0ZWx5CisgICBpbiBvcmRlciB0byBoZWxwIGRlYnVnZ2luZyBwcm9ibGVtcyB3aXRoIENELVJPTXMgb3IgdGFwZWRyaXZlcy4KKyAgIAorICAgVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbGlzdCBvZiAxNSBsb2dpY2FsIGRldmljZSBudW1iZXJzLCB0aGF0IGFyZQorICAgdXNlZCBieSB0aGUgU0NTSS1zdWJzeXN0ZW0uIFRoZSBsb2FkIG9uIGVhY2ggbGRuIGlzIHNob3duIGluIHRoZSB0YWJsZSwKKyAgIGFnYWluLCByZWFkIGFuZCB3cml0ZSBjb21tYW5kcyBhcmUgc3BsaXQuIFRoZSBsYXN0IGNvbHVtbiBzaG93cyB0aGUgYW1vdW50CisgICBvZiByZWFzc2lnbm1lbnRzLCB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoZSBsZG5zLCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4KKyAgIDE1IHB1bi9sdW4gY29tYmluYXRpb25zIGF2YWlsYWJsZSBvbiB0aGUgU0NTSS1idXMuCisgICAKKyAgIFRoZSBsYXN0IHR3byB0YWJsZXMgc2hvdyB0aGUgcHVuL2x1biBtYXAgYW5kIHRoZSBwb3NpdGlvbnMgb2YgdGhlIGxkbnMKKyAgIG9uIHRoaXMgcHVuL2x1biBtYXAuIFRoaXMgbWF5IGNoYW5nZSBkdXJpbmcgb3BlcmF0aW9uLCB3aGVuIGEgbGRuIGlzCisgICByZWFzc2lnbmVkIHRvIGFub3RoZXIgcHVuL2x1biBjb21iaW5hdGlvbi4gSWYgdGhlIG5lY2Vzc2l0eSBmb3IgZHluYW1pY2FsCisgICBhc3NpZ25tZW50cyBpcyBzZXQgdG8gJ25vJywgdGhlIGxkbiBzdHJ1Y3R1cmUga2VlcHMgc3RhdGljLgorICAgCisgICAyLjEyIC9wcm9jL21jYS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgc2xvdC1maWxlIGNvbnRhaW5zIGFsbCBkZWZhdWx0IGVudHJpZXMgYW5kIGluIGFkZGl0aW9uIGNoaXAgYW5kIEkvTy0KKyAgIGFkZHJlc3MgaW5mb3JtYXRpb24gb2YgdGhlIFNDU0ktc3Vic3lzdGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkCisgICBieSBpYm1tY2FfZ2V0aW5mbygpLgorICAgCisgICAyLjEzIFN1cHBvcnRlZCBJQk0gU0NTSS1TdWJzeXN0ZW1zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgZm9sbG93aW5nIElCTSBTQ1NJLXN1YnN5c3RlbXMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKKyAgIAorICAgICAtIElCTSBGYXN0L1dpZGUgU0NTSS0yIEFkYXB0ZXIKKyAgICAgLSBJQk0gNzU2OCBJbmR1c3RyaWFsIENvbXB1dGVyIFNDU0kgQWRhcHRlciB3L0NhY2hlCisgICAgIC0gSUJNIEV4cGFuc2lvbiBVbml0IFNDU0kgQ29udHJvbGxlcgorICAgICAtIElCTSBTQ1NJIEFkYXB0ZXIgdy9DYWNoZQorICAgICAtIElCTSBTQ1NJIEFkYXB0ZXIKKyAgICAgLSBJQk0gSW50ZWdyYXRlZCBTQ1NJIENvbnRyb2xsZXIKKyAgICAgLSBBbGwgY2xvbmVzLCAxMDAlIGNvbXBhdGlibGUgd2l0aCB0aGUgY2hpcHNldCBhbmQgc3Vic3lzdGVtIGNvbW1hbmQKKyAgICAgICBzeXN0ZW0gb2YgSUJNIFNDU0ktYWRhcHRlcnMgKGZvcmNlZCBkZXRlY3Rpb24pCisgICAgIAorICAgMi4xNCBMaW51eCBLZXJuZWwgVmVyc2lvbnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgSUJNIFNDU0ktc3Vic3lzdGVtIGxvdyBsZXZlbCBkcml2ZXIgaXMgcHJlcGFyZWQgdG8gYmUgdXNlZCB3aXRoCisgICBhbGwgdmVyc2lvbnMgb2YgTGludXggYmV0d2VlbiAyLjAueCBhbmQgMi40LnguIFRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcworICAgYXJlIGZ1bGx5IGltcGxlbWVudGVkIHVwIGZyb20gdmVyc2lvbiAzLjFlIG9mIHRoZSBkcml2ZXIuIFRoaXMgbWVhbnMsIHRoYXQKKyAgIHlvdSBqdXN0IG5lZWQgdGhlIGxhdGVzdCBpYm1tY2EuaCBhbmQgaWJtbWNhLmMgZmlsZSBhbmQgY29weSBpdCBpbiB0aGUKKyAgIGxpbnV4L2RyaXZlcnMvc2NzaSBkaXJlY3RvcnkuIFRoZSBjb2RlIGlzIGF1dG9tYXRpY2FsbHkgYWRhcHRlZCBkdXJpbmcgCisgICBrZXJuZWwgY29tcGlsYXRpb24uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20ga2VybmVsIDIuNC4wISBIZXJlIHZlcnNpb24gCisgICA0LjAgb3IgbGF0ZXIgb2YgdGhlIGRyaXZlciBtdXN0IGJlIHVzZWQgZm9yIGtlcm5lbCAyLjQuMCBvciBsYXRlci4gVmVyc2lvbgorICAgNC4wIG9yIGxhdGVyIGRvZXMgbm90IHdvcmsgdG9nZXRoZXIgd2l0aCBvbGRlciBrZXJuZWxzISBEcml2ZXIgdmVyc2lvbnMKKyAgIG9sZGVyIHRoYW4gNC4wIGRvIG5vdCB3b3JrIHRvZ2V0aGVyIHdpdGgga2VybmVsIDIuNC4wIG9yIGxhdGVyLiBUaGV5IHdvcmsKKyAgIG9uIGFsbCBvbGRlciBrZXJuZWxzLgorCisgICAzIENvZGUgSGlzdG9yeQorICAgLS0tLS0tLS0tLS0tLS0KKyAgIEphbiAxNSAxOTk2OiAgRmlyc3QgcHVibGljIHJlbGVhc2UuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEphbiAyMyAxOTk2OiAgU2NyYXBwZWQgY29kZSB3aGljaCByZWFzc2lnbmVkIHNjc2kgZGV2aWNlcyB0byBsb2dpY2FsCisgICBkZXZpY2UgbnVtYmVycy4gSW5zdGVhZCwgdGhlIGV4aXN0aW5nIGFzc2lnbm1lbnQgKGNyZWF0ZWQKKyAgIHdoZW4gdGhlIG1hY2hpbmUgaXMgcG93ZXJlZC11cCBvciByZWJvb3RlZCkgaXMgdXNlZC4gCisgICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQgdGhlIHVwcGVyIGxheWVyIG9mIExpbnV4IFNDU0kgCisgICBkZXZpY2UgZHJpdmVyIGdldHMgYm9ndXMgc2NzaSBpZHMgKHRoaXMgaXMgYmVuaWduKSwgCisgICBhbmQgYWxzbyB0aGUgaGFyZCBkaXNrcyBhcmUgb3JkZXJlZCB1bmRlciBMaW51eCB0aGUgCisgICBzYW1lIHdheSBhcyB0aGV5IGFyZSB1bmRlciBkb3MgKGkuZS4sIEM6IGRpc2sgaXMgc2RhLCAKKyAgIEQ6IGRpc2sgaXMgc2RiLCBldGMuKS4KKyAgIC0gTWFydGluIEtvbGluZWsKKworICAgSSB0aGluayB0aGF0IHRoZSBDRC1ST00gaXMgbm93IGRldGVjdGVkIG9ubHkgaWYgYSBDRCBpcyAKKyAgIGluc2lkZSBDRF9ST00gd2hpbGUgTGludXggYm9vdHMuIFRoaXMgY2FuIGJlIGZpeGVkIGxhdGVyLAorICAgb25jZSB0aGUgZHJpdmVyIHdvcmtzIG9uIGFsbCB0eXBlcyBvZiBQUy8yJ3MuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEZlYiA3IDE5OTY6ICAgTW9kaWZpZWQgYmlvc3BhcmFtIGZ1bmN0aW9uLiBGaXhlZCB0aGUgQ0QtUk9NIGRldGVjdGlvbi4gCisgICBGb3Igbm93LCBkZXZpY2VzIG90aGVyIHRoYW4gaGFyZGRpc2sgYW5kIENEX1JPTSBhcmUgCisgICBpZ25vcmVkLiBUZW1wb3JhcmlseSBtb2RpZmllZCBhYm9ydCgpIGZ1bmN0aW9uIAorICAgdG8gYmVoYXZlIGxpa2UgcmVzZXQoKS4KKyAgIC0gTWFydGluIEtvbGluZWsKKworICAgTWFyIDMxIDE5OTY6ICBUaGUgaW50ZWdyYXRlZCBzY3NpIHN1YnN5c3RlbSBpcyBjb3JyZWN0bHkgZm91bmQKKyAgIGluIFBTLzIgbW9kZWxzIDU2LDU3LCBidXQgbm90IGluIG1vZGVsIDc2LiBUaGVyZWZvcmUKKyAgIHRoZSBpYm1tY2Ffc2NzaV9zZXR1cCgpIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHRvZGF5LgorICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gZm9yY2UgZGV0ZWN0aW9uIG9mCisgICBzY3NpIHN1YnN5c3RlbS4gVGhlIGtlcm5lbCBvcHRpb24gaGFzIGZvcm1hdAorICAgaWJtbWNhc2NzaT1uCisgICB3aGVyZSBuIGlzIHRoZSBzY3NpX2lkIChwdW4pIG9mIHRoZSBzdWJzeXN0ZW0uIE1vc3QgbGlrZWx5LCBuIGlzIDcuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEF1ZyAyMSAxOTk2OiAgTW9kaWZpZWQgdGhlIGNvZGUgd2hpY2ggbWFwcyBsZG5zIHRvIChwdW4sMCkuICBJdCB3YXMKKyAgIGluc3VmZmljaWVudCBmb3IgdGhvc2Ugb2YgdXMgd2l0aCBDRC1ST00gY2hhbmdlcnMuCisgICAtIENocmlzIEJlYXVyZWdhcmQKKyAKKyAgIERlYyAxNCAxOTk2OiBNb3JlIGltcHJvdmVtZW50cyB0byB0aGUgbGRuIG1hcHBpbmcuICBTZWUgY2hlY2tfZGV2aWNlcworICAgZm9yIGRldGFpbHMuICBEaWQgbW9yZSBmaWRkbGluZyB3aXRoIHRoZSBpbnRlZ3JhdGVkIFNDU0kgZGV0ZWN0aW9uLAorICAgYnV0IEkgdGhpbmsgaXQncyB1bHRpbWF0ZWx5IGhvcGVsZXNzIHdpdGhvdXQgYWN0dWFsbHkgdGVzdGluZyB0aGUKKyAgIG1vZGVsIG9mIHRoZSBtYWNoaW5lLiAgVGhlIDU2LCA1NywgNzYgYW5kIDk1ICh1bHRpbWVkaWEpIGFsbCBoYXZlCisgICBkaWZmZXJlbnQgaW50ZWdyYXRlZCBTQ1NJIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zLiAgSG93ZXZlciwgdGhlIDU2CisgICBhbmQgNTcgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBoYXZlIHByb2JsZW1zIHdpdGggZm9yY2VkIGRldGVjdGlvbi4KKyAgIC0gQ2hyaXMgQmVhdXJlZ2FyZAorIAorICAgTWFyIDgtMTYgMTk5NzogTW9kaWZpZWQgZHJpdmVyIHRvIHJ1biBhcyBhIG1vZHVsZSBhbmQgdG8gc3VwcG9ydCAKKyAgIG11bHRpcGxlIGFkYXB0ZXJzLiBBIHN0cnVjdHVyZSwgY2FsbGVkIGlibW1jYV9ob3N0ZGF0YSwgaXMgbm93CisgICBwcmVzZW50LCBjb250YWluaW5nIGFsbCB0aGUgdmFyaWFibGVzLCB0aGF0IHdlcmUgb25jZSBvbmx5CisgICBhdmFpbGFibGUgZm9yIG9uZSBzaW5nbGUgYWRhcHRlci4gVGhlIGZpbmRfc3Vic3lzdGVtLXJvdXRpbmUgaGFzIHZhbmlzaGVkLgorICAgVGhlIGhhcmR3YXJlIHJlY29nbml0aW9uIGlzIG5vdyBkb25lIGluIGlibW1jYV9kZXRlY3QgZGlyZWN0bHkuCisgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGZvciBwcmVzZW5jZSBvZiBNQ0EtYnVzLCBjaGVja3MgdGhlIGludGVycnVwdAorICAgbGV2ZWwgYW5kIGNvbnRpbnVlcyB3aXRoIGNoZWNraW5nIHRoZSBpbnN0YWxsZWQgaGFyZHdhcmUuCisgICBDZXJ0YWluIFBTLzItbW9kZWxzIGRvIG5vdCByZWNvZ25pemUgYSBTQ1NJLXN1YnN5c3RlbSBhdXRvbWF0aWNhbGx5LgorICAgSGVuY2UsIHRoZSBzZXR1cCBkZWZpbmVkIGJ5IGNvbW1hbmQtbGluZS1wYXJhbWV0ZXJzIGlzIGNoZWNrZWQgZmlyc3QuCisgICBUaGVyZWFmdGVyLCB0aGUgcm91dGluZSBwcm9iZXMgZm9yIGFuIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW0uCisgICBGaW5hbGx5LCBhZGFwdGVycyBhcmUgY2hlY2tlZC4gVGhpcyBtZXRob2QgaGFzIHRoZSBhZHZhbnRhZ2UgdG8gY292ZXIgYWxsCisgICBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgbXVsdGlwbGUgU0NTSS1zdWJzeXN0ZW1zIG9uIG9uZSBNQ0EtYm9hcmQuIFVwIHRvCisgICBlaWdodCBTQ1NJLXN1YnN5c3RlbXMgY2FuIGJlIHJlY29nbml6ZWQgYW5kIGFubm91bmNlZCB0byB0aGUgdXBwZXItbGV2ZWwKKyAgIGRyaXZlcnMgd2l0aCB0aGlzIGltcHJvdmVtZW50LiBBIHNldCBvZiBkZWZpbmVzIG1hZGUgY2hhbmdlcyB0byBvdGhlcgorICAgcm91dGluZXMgYXMgc21hbGwgYXMgcG9zc2libGUuCisgICAtIEtsYXVzIEt1ZGllbGthCisgICAKKyAgIE1heSAzMCAxOTk3OiAodjEuNWIpCisgICAxKSBTQ1NJLWNvbW1hbmQgY2FwYWJpbGl0eSBlbmxhcmdlZCBieSB0aGUgcmVjb2duaXRpb24gb2YgTU9ERV9TRUxFQ1QuCisgICAgICBUaGlzIG5lZWRzIHRoZSBSRC1CaXQgdG8gYmUgZGlzYWJsZWQgb24gSU1fT1RIRVJfU0NTSV9DTURfQ01EIHdoaWNoIAorICAgICAgYWxsb3dzIGRhdGEgdG8gYmUgd3JpdHRlbiBmcm9tIHRoZSBzeXN0ZW0gdG8gdGhlIGRldmljZS4gSXQgaXMgYQorICAgICAgbmVjZXNzYXJ5IHN0ZXAgdG8gYmUgYWxsb3dlZCB0byBzZXQgYmxvY2tzaXplIG9mIFNDU0ktdGFwZS1kcml2ZXMgYW5kIAorICAgICAgdGhlIHRhcGUtc3BlZWQsIHdoaXRob3V0IGNvbmZ1c2luZyB0aGUgU0NTSS1TdWJzeXN0ZW0uCisgICAyKSBUaGUgcmVjb2duaXRpb24gb2YgYSB0YXBlIGlzIGluY2x1ZGVkIGluIHRoZSBjaGVja19kZXZpY2VzIHJvdXRpbmUuCisgICAgICBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgZm9yIFRZUEVfVEFQRSwgdGhhdCBpcyBhbHJlYWR5IGRlZmluZWQgaW4KKyAgICAgIHRoZSBrZXJuZWwtc2NzaS1lbnZpcm9ubWVudC4gVGhlIG1hcmt1cCBvZiBhIHRhcGUgaXMgZG9uZSBpbiB0aGUgCisgICAgICBnbG9iYWwgbGRuX2lzX3RhcGVbXSBhcnJheS4gSWYgdGhlIGVudHJ5IG9uIGluZGV4IGxkbiAKKyAgICAgIGlzIDEsIHRoZXJlIGlzIGEgdGFwZWRyaXZlIGNvbm5lY3RlZC4KKyAgIDMpIFRoZSBsZG5faXNfdGFwZVtdIGFycmF5IGlzIG5lY2Vzc2FyeSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRhcGUtIGFuZCAKKyAgICAgIG90aGVyIGRldmljZXMuIEZpeGVkIGJsb2NrbGVuZ3RoIGRldmljZXMgc2hvdWxkIG5vdCBjYXVzZSBhIHByb2JsZW0KKyAgICAgIHdpdGggdGhlIFNDQi1jb21tYW5kIGZvciByZWFkIGFuZCB3cml0ZSBpbiB0aGUgaWJtbWNhX3F1ZXVlY29tbWFuZAorICAgICAgc3Vicm91dGluZS4gVGhlcmVmb3JlLCBJIG9ubHkgZGVyaXZhdGUgdGhlIFJFQURfWFgsIFdSSVRFX1hYIGZvcgorICAgICAgdGhlIHRhcGUtZGV2aWNlcywgYXMgcmVjb21tZW5kZWQgYnkgSUJNIGluIHRoaXMgVGVjaG5pY2FsIFJlZmVyZW5jZSwKKyAgICAgIG1lbnRpb25lZCBiZWxvdy4gKElCTSByZWNvbW1lbmRzIHRvIGF2b2lkIHVzaW5nIHRoZSByZWFkL3dyaXRlIG9mIHRoZQorICAgICAgc3Vic3lzdGVtLCBidXQgdGhlIGZhY3Qgd2FzLCB0aGF0IHJlYWQvd3JpdGUgY2F1c2VzIGEgY29tbWFuZCBlcnJvciBmcm9tCisgICAgICB0aGUgc3Vic3lzdGVtIGFuZCB0aGlzIGNhdXNlcyBrZXJuZWwtcGFuaWMuKQorICAgNCkgSW4gYWRkaXRpb24sIEkgcHJvcG9zZSB0byB1c2UgdGhlIGxkbiBpbnN0ZWFkIG9mIGEgZml4IGNoYXIgZm9yIHRoZQorICAgICAgZGlzcGxheSBvZiBQUzJfRElTS19MRURfT04oKS4gT24gOTUsIG9uZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKKyAgICAgIGRldmljZXMgdGhhdCBhcmUgYWNjZXNzZWQuIEl0IHNob3dzIGFjdGl2aXR5IGFuZCBlYXN5ZmllcyBkZWJ1Z2dpbmcuICAgCisgICBUaGUgdGFwZS1zdXBwb3J0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgU09OWSBTRFQtNTIwMCBhbmQgYSBIUCBERFMtMgorICAgKEkgZG8gbm90IGtub3cgeWV0IHRoZSB0eXBlKS4gT3B0aW1pemF0aW9uIGFuZCBDRC1ST00gYXVkaW8tc3VwcG9ydCwgCisgICBJIGFtIHdvcmtpbmcgb24gLi4uCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdW5lIDE5IDE5OTc6ICh2MS42YikKKyAgIDEpIFN1Ym1pdHRpbmcgdGhlIGV4dHJhLWFycmF5IGxkbl9pc190YXBlW10gLT4gdG8gdGhlIGxvY2FsIGxkW10KKyAgICAgIGRldmljZS1hcnJheS4gCisgICAyKSBDRC1ST00gQXVkaW8tUGxheSBzZWVtcyB0byB3b3JrIG5vdy4KKyAgIDMpIFdoZW4gdXNpbmcgRERTLTIgKDEyME0pIERBVC1UYXBlcywgbXRzdCBzaG93cyBzdGlsbCBkZW5zaXR5LWNvZGUKKyAgICAgIDB4MTMgZm9yIG9yZGluYXJ5IEREUyAoNjEwMDAgQlBNKSBpbnN0ZWFkIDB4MjQgZm9yIEREUy0yLiBUaGlzIGFwcGVhcnMgCisgICAgICBhbHNvIG9uIEFkYXB0ZWMgMjk0MCBhZGFwdG9yIGluIGEgUENJLVN5c3RlbS4gVGhlcmVmb3JlLCBJIGFzc3VtZSB0aGF0IAorICAgICAgdGhlIHByb2JsZW0gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGxvdy1sZXZlbC1kcml2ZXIvYnVzLWFyY2hpdGVjdHVyZS4KKyAgIDQpIEhleGFkZWNpbWFsIGxkbiBvbiBQUy8yLTk1IExFRC1kaXNwbGF5LgorICAgNSkgRml4aW5nIG9mIHRoZSBQUy8yLUxFRCBvbi9vZmYgdGhhdCBpdCB3b3JrcyByaWdodCB3aXRoIHRhcGVkcml2ZXMgYW5kCisgICAgICBkb2VzIG5vdCBjb25mdXNlIHRoZSBkaXNrX3J3X2luX3Byb2dyZXNzIGNvdW50ZXIuCisgICAtIE1pY2hhZWwgTGFuZworICAKKyAgIEp1bmUgMjEgMTk5NzogKHYxLjdiKQorICAgMSkgQWRkaW5nIG9mIGEgcHJvY19pbmZvIHJvdXRpbmUgdG8gaW5mb3JtIGluIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0PiB0aGUKKyAgICAgIG91dGVyLXdvcmxkIGFib3V0IG9wZXJhdGlvbmFsIGxvYWQgc3RhdGlzdGljcyBvbiB0aGUgZGlmZmVyZW50IGxkbnMsCisgICAgICBzZWVuIGJ5IHRoZSBkcml2ZXIuIEV2ZXJ5Ym9keSB0aGF0IGhhcyBtb3JlIHRoYW4gb25lIElCTS1TQ1NJIHNob3VsZAorICAgICAgdGVzdCB0aGlzLCBiZWNhdXNlIEkgb25seSBoYXZlIG9uZSBhbmQgY2Fubm90IHNlZSB3aGF0IGhhcHBlbnMgd2l0aCBtb3JlCisgICAgICB0aGFuIG9uZSBJQk0tU0NTSSBob3N0cy4KKyAgIDIpIERlZmluaXRpb24gb2YgYSBkcml2ZXIgdmVyc2lvbi1udW1iZXIgdG8gaGF2ZSBhIGJldHRlciByZWNvZ25pdGlvbiBvZiAKKyAgICAgIHRoZSBzb3VyY2Ugd2hlbiB0aGVyZSBhcmUgZXhpc3RpbmcgdG9vIG11Y2ggcmVsZWFzZXMgdGhhdCBtYXkgY29uZnVzZQorICAgICAgdGhlIHVzZXIsIHdoZW4gcmVhZGluZyBhYm91dCByZWxlYXNlLXNwZWNpZmljIHByb2JsZW1zLiBVcCB0byBrbm93LAorICAgICAgSSBjYWxjdWxhdGVkIHRoZSB2ZXJzaW9uLW51bWJlciB0byBiZSAxLjcuIEJlY2F1c2Ugd2UgYXJlIGluIEJFVEEtdGVzdAorICAgICAgeWV0LCBpdCBpcyB0b2RheSAxLjdiLgorICAgMykgU29ycnkgZm9yIHRoZSBoZWF2eSBidWcgSSBwcm9ncmFtbWVkIG9uIEp1bmUgMTkgMTk5NyEgQWZ0ZXIgdGhhdCwgdGhlCisgICAgICBDRC1ST00gZGlkIG5vdCB3b3JrIGFueSBtb3JlISBUaGUgQzctY29tbWFuZCB3YXMgYSBmYWtlIGltcHJlc3Npb24KKyAgICAgIEkgZ290IHdoaWxlIHByb2dyYW1taW5nLiBOb3csIHRoZSBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgQ0QtUk9NIGFyZQorICAgICAgbm8gbG9uZ2VyIHJ1bm5pbmcgb3ZlciB0aGUgc3Vic3lzdGVtLCBidXQganVzdCBvdmVyIAorICAgICAgSU1fT1RIRVJfU0NTSV9DTURfQ01ELiBPbiBteSBvYnNlcnZhdGlvbnMgKFBTLzItOTUpLCBub3cgQ0QtUk9NIG1vdW50cworICAgICAgbXVjaCBmYXN0ZXIoISkgYW5kIGhvcGVmdWxseSBhbGwgZmFuY3kgbXVsdGltZWRpYS1mdW5jdGlvbnMsIGxpa2UgZGlyZWN0CisgICAgICBkaWdpdGFsIHJlY29yZGluZyBmcm9tIGF1ZGlvLUNEcyBhbHNvIHdvcmsuIChJIHRyaWVkIGl0IHdpdGggY2RkYTJ3YXYKKyAgICAgIGZyb20gdGhlIGNkd3Rvb2xzLXBhY2thZ2UgYW5kIGl0IGZpbGxlZCB1cCB0aGUgaGFyZGRpc2sgaW1tZWRpYXRlbHkgOi0pLikKKyAgICAgIFRvIGVhc2lmeSBib29sZWFuIGxvZ2ljcywgYSBmdXJ0aGVyIGxvY2FsIGRldmljZS10eXBlIGluIGxkW10sIGNhbGxlZAorICAgICAgaXNfY2Ryb20gaGFzIGJlZW4gaW5jbHVkZWQuCisgICA0KSBJZiBvbmUgdXNlcyBhIFNDU0ktZGV2aWNlIG9mIHVuc3VwcG9ydGVkIHR5cGUvY29tbWFuZHMsIG9uZQorICAgICAgaW1tZWRpYXRlbHkgcnVucyBpbnRvIGEga2VybmVsLXBhbmljIGNhdXNlZCBieSBDb21tYW5kIEVycm9yLiBUbyBiZXR0ZXIKKyAgICAgIHVuZGVyc3RhbmQgd2hpY2ggU0NTSS1jb21tYW5kIGNhdXNlZCB0aGUgcHJvYmxlbSwgSSBleHRlbmRlZCB0aGlzCisgICAgICBzcGVjaWZpYyBwYW5pYy1tZXNzYWdlIHNsaWdodGx5LgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bmUgMjUgMTk5NzogKHYxLjhiKQorICAgMSkgU29tZSBjb3NtZXRpY2FsIGNoYW5nZXMgZm9yIHRoZSBoYW5kbGluZyBvZiBTQ1NJLWRldmljZS10eXBlcy4KKyAgICAgIE5vdywgYWxzbyBDRC1CdXJuZXJzIC8gV09STXMgYW5kIFNDU0ktc2Nhbm5lcnMgc2hvdWxkIHdvcmsuIEZvcgorICAgICAgTU8tZHJpdmVzIEkgaGF2ZSBubyBleHBlcmllbmNlLCB0aGVyZWZvcmUgbm90IHlldCBzdXBwb3J0ZWQuCisgICAgICBJbiBsb2dpY2FsX2RldmljZXMgSSBjaGFuZ2VkIGZyb20gZGlmZmVyZW50IHR5cGUtdmFyaWFibGVzIHRvIG9uZQorICAgICAgY2FsbGVkICdkZXZpY2VfdHlwZScgd2hlcmUgdGhlIHZhbHVlcywgY29ycmVzcG9uZGluZyB0byBzY3NpLmgsCisgICAgICBvZiBhIFNDU0ktZGV2aWNlIGFyZSBzdG9yZWQuCisgICAyKSBUaGVyZSBleGlzdGVkIGEgc21hbGwgYnVnLCB0aGF0IG1hcHMgYSBkZXZpY2UsIGNvbWluZyBhZnRlciBhIFNDU0ktdGFwZQorICAgICAgd3JvbmcuIFRoZXJlZm9yZSwgZS5nLiBhIENELVJPTSBjaGFuZ2VyIHdvdWxkIGhhdmUgYmVlbiBtYXBwZWQgd3JvbmcKKyAgICAgIC0+IHByb2JsZW0gcmVtb3ZlZC4KKyAgIDMpIEV4dGVuc2lvbiBvZiB0aGUgbG9naWNhbF9kZXZpY2Ugc3RydWN0dXJlLiBOb3cgaXQgY29udGFpbnMgYWxzbyBkZXZpY2UsCisgICAgICB2ZW5kb3IgYW5kIHJldmlzaW9uLWxldmVsIG9mIGEgU0NTSS1kZXZpY2UgZm9yIGludGVybmFsIHVzYWdlLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgSnVuZSAyNi0yOSAxOTk3OiAodjIuMGIpCisgICAxKSBUaGUgcmVsZWFzZSBudW1iZXIgMi4wYiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGUgY29tcGxldGVseSBuZXcgZG9uZQorICAgICAgcmVjb2duaXRpb24gYW5kIGhhbmRsaW5nIG9mIFNDU0ktZGV2aWNlcyB3aXRoIHRoZSBhZGFwdGVyLiBBcyBJIGdvdAorICAgICAgZnJvbSBDaHJpcyB0aGUgaGludCwgdGhhdCB0aGUgc3Vic3lzdGVtIGNhbiByZWFzc2lnbiBsZG5zIGR5bmFtaWNhbGx5LAorICAgICAgSSByZW1lbWJlcmVkIHRoaXMgaW1tZWRpYXRlX2Fzc2lnbi1jb21tYW5kLCBJIGZvdW5kIG9uY2UgaW4gdGhlIGhhbmRib29rLgorICAgICAgTm93LCB0aGUgZHJpdmVyIGZpcnN0IGtpbGxzIGFsbCBsZG4gYXNzaWdubWVudHMgdGhhdCBhcmUgc2V0IGJ5IGRlZmF1bHQKKyAgICAgIG9uIHRoZSBTQ1NJLXN1YnN5c3RlbS4gQWZ0ZXIgdGhhdCwgaXQgcHJvYmVzIG9uIGFsbCBwdW5zIGFuZCBsdW5zIGZvcgorICAgICAgZGV2aWNlcyBieSBnb2luZyB0aHJvdWdoIGFsbCBjb21iaW5hdGlvbnMgd2l0aCBpbW1lZGlhdGVfYXNzaWduIGFuZAorICAgICAgcHJvYmluZyBmb3IgZGV2aWNlcywgdXNpbmcgZGV2aWNlX2lucXVpcnkuIFRoZSBmb3VuZCBwaHlzaWNhbCghKSBwdW4sbHVuCisgICAgICBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGluIGdldF9zY3NpW11bXSBhcyBkZXZpY2UgdHlwZXMuIFRoaXMgaXMgZm9sbG93ZWQKKyAgICAgIGJ5IHRoZSBhc3NpZ25tZW50IG9mIGFsbCBsZG5zIHRvIGV4aXN0aW5nIFNDU0ktZGV2aWNlcy4gSWYgbW9yZSBsZG5zCisgICAgICB0aGFuIGRldmljZXMgYXJlIGF2YWlsYWJsZSwgdGhleSBhcmUgYXNzaWduZWQgdG8gbm9uIGV4aXN0aW5nIHB1bixsdW4KKyAgICAgIGNvbWJpbmF0aW9ucyB0byBzYXRpc2Z5IHRoZSBhZGFwdGVyLiBXaXRoIHRoaXMsIHRoZSBkeW5hbWljYWwgbWFwcGluZworICAgICAgd2FzIHBvc3NpYmxlIHRvIGltcGxlbWVudC4gKEZvciBmdXJ0aGVyIGluZm8gc2VlIHRoZSB0ZXh0IGluIHRoZSAKKyAgICAgIHNvdXJjZS1jb2RlIGFuZCBpbiB0aGUgZGVzY3JpcHRpb24gYmVsb3cuIFJlYWQgdGhlIGRlc2NyaXB0aW9uCisgICAgICBiZWxvdyBCRUZPUkUgaW5zdGFsbGluZyB0aGlzIGRyaXZlciBvbiB5b3VyIHN5c3RlbSEpCisgICAyKSBDaGFuZ2VkIHRoZSBuYW1lIElCTU1DQV9EUklWRVJfVkVSU0lPTiB0byBJQk1NQ0FfU0NTSV9EUklWRVJfVkVSU0lPTi4KKyAgIDMpIFRoZSBMRUQtZGlzcGxheSBzaG93cyBvbiBQUy8yLTk1IG5vIGxvbmdlciB0aGUgbGRuLCBidXQgdGhlIFNDU0ktSUQKKyAgICAgIChwdW4pIG9mIHRoZSBhY2Nlc3NlZCBTQ1NJLWRldmljZS4gVGhpcyBpcyBub3cgc2Vuc2VmdWwsIGJlY2F1c2UgdGhlIAorICAgICAgcHVuIGtub3duIHdpdGhpbiB0aGUgZHJpdmVyIGlzIGV4YWN0bHkgdGhlIHB1biBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlCisgICAgICBhbmQgbm8gbG9uZ2VyIGEgZmFrZSBvbmUuCisgICA0KSBUaGUgL3Byb2Mvc2NzaS9pYm1tY2EvPGhvc3Rfbm8+IGNvbnNpc3RzIG5vdyBvZiB0aGUgZmlyc3QgcGFydCwgd2hlcmUKKyAgICAgIGhpdC1zdGF0aXN0aWNzIG9mIGxkbnMgaXMgc2hvd24gYW5kIGEgc2Vjb25kIHBhcnQsIHdoZXJlIHRoZSBtYXBzIG9mIAorICAgICAgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgU0NTSS1kZXZpY2VzIGFyZSBkaXNwbGF5ZWQuIFRoaXMgY291bGQgYmUgdmVyeSAKKyAgICAgIGludGVyZXN0aW5nLCB3aGVuIG9uZSBpcyB1c2luZyBtb3JlIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGluIG9yZGVyIHRvIAorICAgICAgZm9sbG93IHRoZSBkeW5hbWljYWwgcmVtYXBwaW5nIG9mIGxkbnMuCisgICAtIE1pY2hhZWwgTGFuZworIAorICAgSnVuZSAyNi0yOSAxOTk3OiAodjIuMGItMSkKKyAgIDEpIEkgZm9yZ290IHRvIHN3aXRjaCB0aGUgbG9jYWxfY2hlY2tpbmdfcGhhc2VfZmxhZyB0byAxIGFuZCBiYWNrIHRvIDAKKyAgICAgIGluIHRoZSBkeW5hbWljYWwgcmVtYXBwaW5nIHBhcnQgaW4gaWJtbWNhX3F1ZXVlY29tbWFuZCBmb3IgdGhlIAorICAgICAgZGV2aWNlX2V4aXN0IHJvdXRpbmUuIFNvcnJ5LgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bHkgMS0xMyAxOTk3OiAodjMuMGIsYykKKyAgIDEpIE1lcmdpbmcgb2YgdGhlIGRyaXZlci1kZXZlbG9wbWVudHMgb2YgS2xhdXMgS3VkaWVsa2EgYW5kIE1pY2hhZWwgTGFuZyAKKyAgICAgIGluIG9yZGVyIHRvIGdldCBhIG9wdGltdW0gYW5kIHVuaWZpZWQgZHJpdmVyLXJlbGVhc2UgZm9yIHRoZSAKKyAgICAgIElCTS1TQ1NJLVN1YnN5c3RlbS1BZGFwdGVyKHMpLgorICAgICAgICAgRm9yIHBlb3BsZSwgdXNpbmcgdGhlIEtlcm5lbC1yZWxlYXNlID49Mi4xLjAsIG1vZHVsZS1zdXBwb3J0IHNob3VsZCAKKyAgICAgIGJlIG5vIHByb2JsZW0uIEZvciB1c2VycywgcnVubmluZyB1bmRlciA8Mi4xLjAsIG1vZHVsZS1zdXBwb3J0IG1heSBub3QgCisgICAgICB3b3JrLCBiZWNhdXNlIHRoZSBtZXRob2RzIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIDIuMC54IGFuZCAyLjEueC4KKyAgIDIpIEFkZGVkIHNvbWUgbW9yZSBlZmZlY3RpdmUgc3RhdGlzdGljcyBmb3IgL3Byb2Mtb3V0cHV0LgorICAgMykgQ2hhbmdlIHR5cGVjYXN0aW5nIGF0IG5lY2Vzc2FyeSBwb2ludHMgZnJvbSAodW5zaWduZWQgbG9uZykgdG8KKyAgICAgIHZpcnRfdG9fYnVzKCkuCisgICA0KSBJbmNsdWRlZCAjaWYuLi4gYXQgc3BlY2lhbCBwb2ludHMgdG8gaGF2ZSBzcGVjaWZpYyBhZGFwdGlvbiBvZiB0aGUKKyAgICAgIGRyaXZlciB0byBrZXJuZWwgMi4wLnggYW5kIDIuMS54LiBJdCBzaG91bGQgdGhlcmVmb3JlIGFsc28gcnVuIHdpdGggCisgICAgICBsYXRlciByZWxlYXNlcy4KKyAgIDUpIE1hZ25ldG8tT3B0aWNhbCBkcml2ZXMgYW5kIG1lZGl1bS1jaGFuZ2VycyBhcmUgYWxzbyByZWNvZ25pemVkLCBub3cuCisgICAgICBUaGVyZWZvcmUsIHdlIGhhdmUgYSBjb21wbGV0ZWx5IGdhcGZyZWUgcmVjb2duaXRpb24gb2YgYWxsIFNDU0ktCisgICAgICBkZXZpY2UtdHlwZXMsIHRoYXQgYXJlIGtub3duIGJ5IExpbnV4IHVwIHRvIGtlcm5lbCAyLjEuMzEuCisgICA2KSBUaGUgZmxhZyBTQ1NJX0lCTU1DQV9ERVZfUkVTRVQgaGFzIGJlZW4gaW5zZXJ0ZWQuIElmIGl0IGlzIHNldCB3aXRoaW4KKyAgICAgIHRoZSBjb25maWd1cmF0aW9uLCBlYWNoIGNvbm5lY3RlZCBTQ1NJLWRldmljZSB3aWxsIGdldCBhIHJlc2V0IGNvbW1hbmQKKyAgICAgIGR1cmluZyBib290dGltZS4gVGhpcyBjYW4gYmUgbmVjZXNzYXJ5IGZvciBzb21lIHNwZWNpYWwgU0NTSS1kZXZpY2VzLgorICAgICAgVGhpcyBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBDb25maWcuaW4uCisgICAgICAoU2VlIGFsc28gdGhlIG5ldyBDb25maWcuaW4gZmlsZS4pCisgICBQcm9iYWJsZSBuZXh0IGltcHJvdmVtZW50OiBiYWQgZGlzayBoYW5kbGVyLgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIFNlcHQgMTQgMTk5NzogKHYzLjBjKQorICAgMSkgU29tZSBkZWJ1Z2dpbmcgYW5kIHNwZWVkIG9wdGltaXphdGlvbiBhcHBsaWVkLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgRGVjIDE1LCAxOTk3CisgICAgLSBjaHJpc2JAdHJ1ZXNwZWN0cmEuY29tCisgICAgLSBtYWRlIHRoZSBmcm9udCBwYW5lbCBkaXNwbGF5IHRoaW5neSBvcHRpb25hbCwgc3BlY2lmaWVkIGZyb20gdGhlCisgICAgY29tbWFuZC1saW5lIHZpYSBpYm1tY2FzY3NpPWRpc3BsYXkuICBBbG9uZyB0aGUgbGluZXMgb2YgdGhlIC9MRUQKKyAgICBvcHRpb24gZm9yIHRoZSBPUy8yIGRyaXZlci4KKyAgICAtIGZpeGVkIHNtYWxsIGJ1ZyBpbiB0aGUgTEVEIGRpc3BsYXkgdGhhdCB3b3VsZCBoYW5nIHNvbWUgbWFjaGluZXMuCisgICAgLSByZXZlcnNlZCBvcmRlcmluZyBvZiB0aGUgZHJpdmVzICh1c2luZyB0aGUKKyAgICBJQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCBkZWZpbmUpLiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHR3byBtYWluCisgICAgcmVhc29uczoKKwktIHVzZXJzIHdobyd2ZSBhbHJlYWR5IGluc3RhbGxlZCBMaW51eCB3b24ndCBiZSBzY3Jld2VkLiAgS2VlcAorCWluIG1pbmQgdGhhdCBub3QgZXZlcnlvbmUgaXMgYSBrZXJuZWwgaGFja2VyLgorCS0gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCSU9TIG9yZGVyaW5nIG9mIHRoZSBkcml2ZXMuICBJbiB0aGUKKwlCSU9TLCBpZCA2IGlzIEM6LCBpZCAwIG1pZ2h0IGJlIEQ6LiAgV2l0aCB0aGlzIHNjaGVtZSwgdGhleSdkIGJlCisJYmFja3dhcmRzLiAgVGhpcyBjb25mdXNlcyB0aGUgY3JhcCBvdXQgb2YgdGhvc2UgaGVhdGhlbnMgd2hvJ3ZlCisJZ290IGEgaW1wdXJlIExpbnV4IGluc3RhbGxhdGlvbiAod2hpY2gsIDx3aW5jZT4sIEknbSBvbmUgb2YpLgorICAgIFRoaXMgd2hvbGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBJQk0gaXMgYWN0dWFsbHkgbm9uLXN0YW5kYXJkIHdpdGgKKyAgICB0aGUgaWQgdG8gQklPUyBtYXBwaW5ncy4gIFlvdSdsbCBmaW5kLCBpbiBmZG9tYWluLmMsIGEgc2ltaWxhcgorICAgIGNvbW1lbnQgYWJvdXQgYSBmZXcgRkQgQklPUyByZXZpc2lvbnMuICBUaGUgTGludXggKGFuZCBhcHBhcmVudGx5CisgICAgaW5kdXN0cnkpIHN0YW5kYXJkIGlzIHRoYXQgQzogbWFwcyB0byBzY3NpIGlkICgwLDApLiAgTGV0J3Mgc3RpY2sKKyAgICB3aXRoIHRoYXQgc3RhbmRhcmQuCisgICAgLSBTaW5jZSB0aGlzIGlzIHRlY2huaWNhbGx5IGEgYnJhbmNoIG9mIG15IG93biwgSSBjaGFuZ2VkIHRoZQorICAgIHZlcnNpb24gbnVtYmVyIHRvIDMuMGUtY3BiLgorCisgICBKYW4gMTcsIDE5OTg6ICh2My4wZikKKyAgIDEpIEFkZGl0aW9uIG9mIHNvbWUgc3RhdGlzdGljYWwgaW5mbyBmb3IgL3Byb2MgaW4gcHJvY19pbmZvLgorICAgMikgVGFraW5nIGNhcmUgb2YgdGhlIFNDU0ktYXNzaWdubWVudCBwcm9ibGVtLCBkZWFsZWQgYnkgQ2hyaXMgYXQgRGVjIDE1CisgICAgICAxOTk3LiBJbiBmYWN0LCBJQk0gaXMgcmlnaHQsIGNvbmNlcm5pbmcgdGhlIGFzc2lnbm1lbnQgb2YgU0NTSS1kZXZpY2VzIAorICAgICAgdG8gZHJpdmVsZXR0ZXJzLiBJdCBpcyBjb25mb3JtIHRvIHRoZSBBTlNJLWRlZmluaXRpb24gb2YgdGhlIFNDU0ktCisgICAgICBzdGFuZGFyZCB0byBhc3NpZ24gZHJpdmUgQzogdG8gU0NTSS1pZCA2LCBiZWNhdXNlIGl0IGlzIHRoZSBoaWdoZXN0CisgICAgICBoYXJkd2FyZSBwcmlvcml0eSBhZnRlciB0aGUgaG9zdGFkYXB0ZXIgKHRoYXQgaGFzIHN0aWxsIHRvZGF5IGJ5CisgICAgICBkZWZhdWx0IGV2ZXJ5d2hlcmUgaWQgNykuIEFsc28gcmVhbHRpbWUtb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBJIHVzZSwgCisgICAgICBsaWtlIEx5bnhPUyBhbmQgT1M5LCB3aGljaCBhcmUgcXVpdGUgaW5kdXN0cmlhbCBzeXN0ZW1zIHVzZSB0b3AtZG93bgorICAgICAgbnVtYmVyaW5nIG9mIHRoZSBoYXJkZGlza3MsIHRoYXQgaXMgYWxzbyBzdGFydGluZyBhdCBpZCA2LiBOb3csIG9uZQorICAgICAgc2l0cyBhIGJpdCBiZXR3ZWVuIHR3byBjaGFpcnMuIE9uIG9uZSBoYW5kIHNpZGUsIHVzaW5nIHRoZSBkZWZpbmUKKyAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIG1ha2VzIExpbnV4IGFzc2lnbmluZyBkaXNrcyBjb25mb3JtIHRvCisgICAgICB0aGUgSUJNLSBhbmQgQU5TSS1TQ1NJLXN0YW5kYXJkIGFuZCBrZWVwcyB0aGlzIGRyaXZlciBkb3dud2FyZAorICAgICAgY29tcGF0aWJsZSB0byBvbGRlciByZWxlYXNlcywgb24gdGhlIG90aGVyIGhhbmQgc2lkZSwgcGVvcGxlIGlzIHF1aXRlCisgICAgICBoYWJpdHVhdGVkIGluIGJlbGlldmluZyB0aGF0IEM6IGlzIGFzc2lnbmVkIHRvICgwLDApIGFuZCBtdWNoIG90aGVyCisgICAgICBTQ1NJLUJJT1MgZG8gc28uIFRoZXJlZm9yZSwgSSBtb3ZlZCB0aGUgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgCisgICAgICBkZWZpbmUgb3V0IG9mIHRoZSBkcml2ZXIgYW5kIHB1dCBpdCBpbnRvIENvbmZpZy5pbiBhcyBzdWJpdGVtIG9mIAorICAgICAgJ0lCTSBTQ1NJIHN1cHBvcnQnLiBBIGhlbHAsIGFkZGVkIHRvIERvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAgCisgICAgICBleHBsYWlucyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzYXlpbmcgJ3knIG9yICduJyB0byB0aGUgdXNlciwgd2hlbiAKKyAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIHByb21wdHMsIHNvIHRoZSBvcmRpbmFyeSB1c2VyIGlzIGVuYWJsZWQgdG8gCisgICAgICBjaG9vc2UgdGhlIHdheSBvZiBhc3NpZ25tZW50LCBkZXBlbmRpbmcgb24gaGlzIG93biBzaXR1YXRpb24gYW5kIGd1c3RvLgorICAgMykgQWRhcHRlZCBTQ1NJX0lCTU1DQV9ERVZfUkVTRVQgdG8gdGhlIGxvY2FsIG5hbWluZyBjb252ZW50aW9uLCBzbyBpdCBpcworICAgICAgbm93IGNhbGxlZCBJQk1NQ0FfU0NTSV9ERVZfUkVTRVQuCisgICA0KSBPcHRpbWl6YXRpb24gb2YgcHJvY19pbmZvIGFuZCBpdHMgc3Vicm91dGluZXMuCisgICA1KSBBZGRlZCBtb3JlIGluLXNvdXJjZS1jb21tZW50cyBhbmQgZXh0ZW5kZWQgdGhlIGRyaXZlciBkZXNjcmlwdGlvbiBieQorICAgICAgc29tZSBleHBsYW5hdGlvbiBhYm91dCB0aGUgU0NTSS1kZXZpY2UtYXNzaWdubWVudCBwcm9ibGVtLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSmFuIDE4LCAxOTk4OiAodjMuMGcpCisgICAxKSBDb3JyZWN0aW5nIG5hbWVzIHRvIGJlIGFic29sdXRlbHkgY29uZm9ybSB0byB0aGUgbGF0ZXIgMi4xLnggcmVsZWFzZXMuCisgICAgICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgCisgICAgICAgICAgICBJQk1NQ0FfU0NTSV9ERVZfUkVTRVQgLT4gQ09ORklHX0lCTU1DQV9TQ1NJX0RFVl9SRVNFVAorICAgICAgICAgICAgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgLT4gQ09ORklHX0lCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJECisgICAtIE1pY2hhZWwgTGFuZworIAorICAgSmFuIDE4LCAxOTk5OiAodjMuMSBNQ0EtdGVhbSBpbnRlcm5hbCkKKyAgIDEpIFRoZSBtdWx0aXBsZSBob3N0cyBzdHJ1Y3R1cmUgaXMgYWNjZXNzZWQgZnJvbSBldmVyeSBzdWJyb3V0aW5lLCBzbyB0aGVyZQorICAgICAgaXMgbm8gbG9uZ2VyIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHBhc3NlZCBmcm9tIGZ1bmN0aW9uCisgICAgICB0byBmdW5jdGlvbiwgYnV0IG9ubHkgdGhlIGhvc3RpbmRleC4gQSBjYWxsIGJ5IHZhbHVlLCBub3RoaW5nIG1vcmUuIFRoaXMKKyAgICAgIHNob3VsZCByZWFsbHkgYmUgdW5kZXJzdG9vZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZSBzdWJzeXN0ZW0gc2hvdWxkIGdldAorICAgICAgdGhlIHJpZ2h0IHZhbHVlcyBhbmQgYWRkcmVzc2VzLgorICAgMikgVGhlIFNDU0ktc3Vic3lzdGVtIGRldGVjdGlvbiB3YXMgbm90IGNvbXBsZXRlIGFuZCBxdWl0ZSBodWdlbHkgYnVnZ3kgdXAKKyAgICAgIHRvIG5vdywgY29tcGFyZWQgdG8gdGhlIHRlY2huaWNhbCBtYW51YWwuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcG9zMgorICAgICAgcmVnaXN0ZXIgaXMgbm90IGFzIGFzc3VtZWQgYnkgcGVvcGxlIGJlZm9yZSwgdGhlcmVmb3JlLCBJIGRyb3BwZWQgYSBub3RlCisgICAgICBpbiB0aGUgaWJtbWNhX2RldGVjdCBmdW5jdGlvbiB0byBzaG93IHRoZSByZWdpc3RlcnMnIGludGVycHJldGF0aW9uLgorICAgICAgVGhlIHBvcy1yZWdpc3RlcnMgb2YgaW50ZWdyYXRlZCBTQ1NJLXN1YnN5c3RlbXMgZG8gbm90IGNvbnRhaW4gYW55IAorICAgICAgaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUgSU8tcG9ydCBvZmZzZXQsIHJlYWxseS4gSW5zdGVhZCwgdGhleSBjb250YWluCisgICAgICBzb21lIGluZm8gYWJvdXQgdGhlIGFkYXB0ZXIsIHRoZSBjaGlwLCB0aGUgTlZSQU0gLi4uLiBUaGUgSS9PLXBvcnQgaXMKKyAgICAgIGZpeGVkIHRvIDB4MzU0MCAtIDB4MzU0Ny4gVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgYWRhcHRlcnMgaW4gdGhlIAorICAgICAgc2xvdHMgYW5kIHRoZXkgZ2V0IGFuIG9mZnNldCBmb3IgdGhlIEkvTyBhcmVhIGluIG9yZGVyIHRvIGdldCB0aGVpciBvd24KKyAgICAgIEkvTy1hZGRyZXNzIGFyZWEuIFNlZSBjaGFwdGVyIDIgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uLiBBdCBsZWFzdCwgdGhlIAorICAgICAgZGV0ZWN0aW9uIHNob3VsZCBub3cgd29yayByaWdodCwgZXZlbiBvbiBtb2RlbHMgb3RoZXIgdGhhbiA5NS4gVGhlIDk1ZXJzCisgICAgICBjYW1lIGhhcHBpbHkgYXJvdW5kIHRoZSBidWcsIGFzIHRoZWlyIHBvczIgcmVnaXN0ZXIgY29udGFpbnMgYWx3YXlzIDAgCisgICAgICBpbiB0aGUgY3JpdGljYWwgYXJlYS4gUmVzZXJ2ZWQgYml0cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgaW50ZXJwcmV0ZWQsIAorICAgICAgdGhlcmVmb3JlLCBJQk0gaXMgYWxsb3dlZCB0byBzZXQgdGhvc2UgYml0cyBhcyB0aGV5IGxpa2UgYW5kIHRoZXkgbWF5IAorICAgICAgcmVhbGx5IHZhcnkgYmV0d2VlbiBkaWZmZXJlbnQgUFMvMiBtb2RlbHMuIFNvLCBub3csIG5vIGludGVycHJldGF0aW9uIAorICAgICAgb2YgcmVzZXJ2ZWQgYml0cyAtIGhvcGVmdWxseSBubyB0cm91YmxlIGhlcmUgYW55bW9yZS4KKyAgIDMpIFRoZSBjb21tYW5kIGVycm9yLCB3aGljaCB5b3UgbWF5IGdldCBvbiBtb2RlbHMgNTUsIDU2LCA1NywgNzAsIDc3IGFuZAorICAgICAgUDcwIG1heSBoYXZlIGJlZW4gY2F1c2VkIGJ5IHRoZSBmYWN0LCB0aGF0IGFkYXB0ZXJzIG9mIG9sZGVyIGRlc2lnbiBkbworICAgICAgbm90IGxpa2Ugc2VuZGluZyBjb21tYW5kcyB0byBub24tZXhpc3RpbmcgU0NTSS1kZXZpY2VzIGFuZCB3aWxsIHJlYWN0CisgICAgICB3aXRoIGEgY29tbWFuZCBlcnJvciBhcyBhIHNpZ24gb2YgcHJvdGVzdC4gV2hpbGUgdGhpcyBlcnJvciBpcyBub3QKKyAgICAgIHByZXNlbnQgb24gSUJNIFNDU0kgQWRhcHRlciB3L2NhY2hlLCBpdCBhcHBlYXJzIG9uIElCTSBJbnRlZ3JhdGVkIFNDU0kKKyAgICAgIEFkYXB0ZXJzLiBUaGVyZWZvcmUsIEkgaW1wbGVtZW50ZWQgYSB3b3JrYXJyb3VuZCB0byBmb3JnaXZlIHRob3NlIAorICAgICAgYWRhcHRlcnMgdGhlaXIgcHJvdGVzdHMsIGJ1dCBpdCBpcyBtYXJrZWQgdXAgaW4gdGhlIHN0YXRpc2N0aXMsIHNvCisgICAgICBhZnRlciBhIHN1Y2Nlc3NmdWwgYm9vdCwgeW91IGNhbiBzZWUgaW4gL3Byb2Mvc2NzaS9pYm1tY2EvPGhvc3RfbnVtYmVyPgorICAgICAgaG93IG9mdGVuIHRoZSBjb21tYW5kIGVycm9ycyBoYXZlIGJlZW4gZm9yZ2l2ZW4gdG8gdGhlIFNDU0ktc3Vic3lzdGVtLgorICAgICAgSWYgdGhlIG51bWJlciBpcyBiaWdnZXIgdGhhbiAwLCB5b3UgaGF2ZSBhIFNDU0kgc3Vic3lzdGVtIG9mIG9sZGVyCisgICAgICBkZXNpZ24sIHdoYXQgc2hvdWxkIG5vIGxvbmdlciBtYXR0ZXIuCisgICA0KSBpYm1tY2FfZ2V0aW5mbygpIGhhcyBiZWVuIGFkYXB0ZWQgdmVyeSBjYXJlZnVsbHksIHNvIGl0IHNob3dzIGluIHRoZSAKKyAgICAgIHNsb3RuIGZpbGUgcmVhbGx5LCB3aGF0IGlzIHNlbnNlZnVsIHRvIGJlIHByZXNlbnRlZC4KKyAgIDUpIGlibW1jYV9yZWdpc3RlcigpIGhhcyBiZWVuIGV4dGVuZGVkIGluIGl0cyBwYXJhbWV0ZXIgbGlzdCBpbiBvcmRlciB0bworICAgICAgcGFzcyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgU0NTSS1hZGFwdGVyIHRvIExpbnV4LgorICAgLSBNaWNoYWVsIExhbmcKKworICAgRmViIDYsIDE5OTk6ICh2My4xKQorICAgMSkgRmluYWxseSwgYWZ0ZXIgc29tZSAzLjFCZXRhLXJlbGVhc2VzLCB0aGUgMy4xIHJlbGVhc2UuIFNvcnJ5LCBmb3IgCisgICAgICB0aGUgZGVsYXllZCByZWxlYXNlLCBidXQgaXQgd2FzIG5vdCBmaW5pc2hlZCB3aXRoIHRoZSByZWxlYXNlIG9mIAorICAgICAgS2VybmVsIDIuMi4wLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgRmViIDEwLCAxOTk5ICh2My4xKQorICAgMSkgQWRkZWQgYSBuZXcgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGNhbGxlZCAnYnlwYXNzJyBpbiBvcmRlciB0byBieXBhc3MKKyAgICAgIGV2ZXJ5IGludGVncmF0ZWQgc3Vic3lzdGVtIFNDU0ktY29tbWFuZCBjb25zZXF1ZW50bHkgaW4gY2FzZSBvZgorICAgICAgdHJvdWJsZXMuCisgICAyKSBDb25jYXRlbmF0ZWQgcmVhZF9jYXBhY2l0eSByZXF1ZXN0cyB0byB0aGUgaGFyZGRpc2tzLiBJdCBnYXZlIGEgbG90CisgICAgICBvZiB0cm91YmxlcyB3aXRoIHNvbWUgY29udHJvbGxlcnMgYW5kIGFmdGVyIEkgd2FudGVkIHRvIGFwcGx5IHNvbWUKKyAgICAgIGV4dGVuc2lvbnMsIGl0IGp1bXBlZCBvdXQgaW4gdGhlIHNhbWUgc2l0dWF0aW9uLCBvbiBteSB3L2NhY2hlLCBhcyBsaWtlIAorICAgICAgb24gRC4gV2VpbmVoYWxscycgTW9kZWwgNTYsIGhhdmluZyBpbnRlZ3JhdGVkIFNDU0kuIFRoaXMgZ2F2ZSBtZSB0aGUgCisgICAgICBkZXNjaXNzaXZlIGhpbnQgdG8gbW92ZSB0aGUgY29kZS1wYXJ0IG91dCBhbmQgZGVjbGFyZSBpdCBnbG9iYWwuIE5vdywKKyAgICAgIGl0IHNlZW1zIHRvIHdvcmsgYnkgZmFyIG11Y2ggYmV0dGVyIGFuIG1vcmUgc3RhYmxlLiBMZXQgdXMgc2VlLCB3aGF0CisgICAgICB0aGUgd29ybGQgdGhpbmtzIG9mIGl0Li4uCisgICAzKSBCeSB0aGUgd2F5LCBvbmx5IFNvbnkgREFULWRyaXZlcyBzZWVtIHRvIHNob3cgZGVuc2l0eSBjb2RlIDB4MTMuIEEKKyAgICAgIHRlc3Qgd2l0aCBhIEhQIGRyaXZlIGdhdmUgcmlnaHQgcmVzdWx0cywgc28gdGhlIHByb2JsZW0gaXMgdmVuZG9yLQorICAgICAgc3BlY2lmaWMgYW5kIG5vdCBhIHByb2JsZW0gb2YgdGhlIE9TIG9yIHRoZSBkcml2ZXIuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBGZWIgMTgsIDE5OTkgKHYzLjFkKQorICAgMSkgVGhlIGFib3J0IGNvbW1hbmQgYW5kIHRoZSByZXNldCBmdW5jdGlvbiBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgCisgICAgICBpbmNvbnNpc3RlbmNpZXMuIEZyb20gdGhlIGxvZ2ljYWwgcG9pbnQgb2YgdGhpbmtpbmcsIHRoZXkgd29yaworICAgICAgYXQgdGhlaXIgb3B0aW11bSwgbm93LCBidXQgYXMgdGhlIHN1YnN5c3RlbSBkb2VzIG5vdCBhbnN3ZXIgd2l0aCBhbgorICAgICAgaW50ZXJydXB0LCBhYm9ydCBuZXZlciBmaW5pc2hlcywgc2lnaC4uLgorICAgMikgRXZlcnl0aGluZywgdGhhdCBpcyBhY2Nlc3NlZCBieSBhIGJ1c21hc3RlciByZXF1ZXN0IGZyb20gdGhlIGFkYXB0ZXIKKyAgICAgIGlzIG5vdyBkZWNsYXJlZCBhcyBnbG9iYWwgdmFyaWFibGUsIGV2ZW4gdGhlIHJldHVybi1idWZmZXIgaW4gdGhlCisgICAgICBsb2NhbCBjaGVja2luZyBwaGFzZS4gVGhpcyBhc3N1cmVzLCB0aGF0IG5vIGFjY2Vzc2VzIHRvIHVuZGVmaW5lZCBtZW1vcnkKKyAgICAgIGFyZWFzIGFyZSBwZXJmb3JtZWQuCisgICAzKSBJbiBpYm1tY2EuaCwgdGhlIGxpbmUgdW5jaGVja2VkX2lzYV9kbWEgaXMgYWRkZWQgd2l0aCAxIGluIG9yZGVyIHRvCisgICAgICBhdm9pZCBtZW1vcnktcG9pbnRlcnMgZm9yIHRoZSBhcmVhcyBoaWdoZXIgdGhhbiAxNk1CeXRlIGluIG9yZGVyIHRvCisgICAgICBiZSBzdXJlLCBpdCBhbHNvIHdvcmtzIG9uIDE2LUJpdCBNaWNyb2NoYW5uZWwgYnVzIHN5c3RlbXMuCisgICA0KSBBIGxvdCBvZiBzbWFsbCB0aGluZ3MgaGF2ZSBiZWVuIGZvdW5kLCBidXQgbm90aGluZyB0aGF0IGVuZGFuZ2VyZWQgdGhlCisgICAgICBkcml2ZXIgb3BlcmF0aW9ucy4gSnVzdCBpdCBzaG91bGQgYmUgbW9yZSBzdGFibGUsIG5vdy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAgICAKKyAgIEZlYiAyMCwgMTk5OSAodjMuMWUpCisgICAxKSBJIHRvb2sgdGhlIHdhcm5pbmcgZnJvbSB0aGUgTGludXggS2VybmVsIEhhY2tlcnMgR3VpZGUgc2VyaW91cyBhbmQgCisgICAgICBjaGVja2VkIHRoZSBjbWQtPnJlc3VsdCByZXR1cm4gdmFsdWUgdG8gdGhlIGRvbmUtZnVuY3Rpb24gdmVyeSBjYXJlZnVsbHkuCisgICAgICBJdCBpcyBvYnZpb3VzLCB0aGF0IHRoZSBJQk0gU0NTSSBvbmx5IGRlbGl2ZXJzIHRoZSB0c2IuZGV2X3N0YXR1cywgaWYKKyAgICAgIHNvbWUgZXJyb3IgYXBwZWFyZWQsIGVsc2UgaXQgaXMgdW5kZWZpbmVkLiBOb3csIHRoaXMgaXMgZml4ZWQuIEJlZm9yZQorICAgICAgYW55IFNDQiBjb21tYW5kIGdldHMgcXVldWVkLCB0aGUgdHNiLmRldl9zdGF0dXMgaXMgc2V0IHRvIDAsIHNvIHRoZSAKKyAgICAgIGNtZC0+cmVzdWx0IHdvbid0IHNjcmV3IHVwIExpbnV4IGhpZ2hlciBsZXZlbCBkcml2ZXJzLgorICAgMikgVGhlIHJlc2V0LWZ1bmN0aW9uIGhhcyBzbGlnaHRseSBpbXByb3ZlZC4gVGhpcyBpcyBzdGlsbCBwbGFuZWQgZm9yIAorICAgICAgYWJvcnQuIER1cmluZyB0aGUgYWJvcnQgYW5kIHRoZSByZXNldCBmdW5jdGlvbiwgbm8gaW50ZXJydXB0cyBhcmUgCisgICAgICBhbGxvd2VkLiBUaGlzIGlzIGhvd2V2ZXIgcXVpdGUgaGFyZCB0byBjb3BlIHdpdGgsIHNvIHRoZSBJTlQtc3RhdHVzCisgICAgICByZWdpc3RlciBpcyByZWFkLiBXaGVuIHRoZSBpbnRlcnJ1cHQgZ2V0cyBxdWV1ZWQsIG9uZSBjYW4gZmluZCBpdHMKKyAgICAgIHN0YXR1cyBpbW1lZGlhdGVseSBvbiB0aGF0IHJlZ2lzdGVyIGFuZCBpcyBlbmFibGVkIHRvIGNvbnRpbnVlIGluIHRoZQorICAgICAgcmVzZXQgZnVuY3Rpb24uIEkgaGFkIG5vIGNoYW5jZSB0byB0ZXN0IHRoaXMgcmVhbGx5LCBvbmx5IGluIGEgYm9ndXMgCisgICAgICBzaXR1YXRpb24sIEkgZ290IHRoaXMgZnVuY3Rpb24gcnVubmluZywgYnV0IHRoZSBzaXR1YXRpb24gd2FzIHRvbyBtdWNoCisgICAgICB3b3JzZSBmb3IgTGludXggOi0oLCBzbyB0ZXN0cyB3aWxsIGNvbnRpbnVlLgorICAgMykgQnVmZmVycyBnb3Qgbm93IGNvbnNpc3RlbnQuIE5vIG9wZW4gYWRkcmVzcyBtYXBwaW5nLCBhcyBiZWZvcmUgYW5kCisgICAgICB0aGVyZWZvcmUgbm8gZnVydGhlciB0cm91YmxlcyB3aXRoIHRoZSB1bmFzc2lnbmVkIG1lbW9yeSBzZWdtZW50YXRpb24KKyAgICAgIGZhdWx0cyB0aGF0IHNjcmFtYmxlZCBwcm9iZXMgb24gOTVYWCBzZXJpZXMgYW5kIGV2ZW4gb24gODVYWCBzZXJpZXMsCisgICAgICB3aGVuIHRoZSBrZXJuZWwgaXMgZG9uZSBpbiBhIG5vdCBzbyBwZXJmZWN0bHkgZml0dGluZyB3YXkuCisgICA0KSBTcG9udGFuZW91cyBpbnRlcnJ1cHRzIGZyb20gdGhlIHN1YnN5c3RlbSwgYXBwZWFyaW5nIHdpdGhvdXQgYW55CisgICAgICBjb21tYW5kIHByZXZpb3VzbHkgcXVldWVkIGFyZSBhbnN3ZXJlZCB3aXRoIGEgRElEX0JBRF9JTlRSIHJlc3VsdC4KKyAgIDUpIFRha2VuIGludG8gYWNjb3VudCBaUCBHdXMnIHByb3Bvc2FscyB0byByZXZlcnNlIHRoZSBTQ1NJLWRldmljZQorICAgICAgc2NhbiBvcmRlci4gQXMgaXQgZG9lcyBub3Qgd29yayBvbiBLZXJuZWwgMi4xLnggb3IgMi4yLngsIGFzIHByb3Bvc2VkCisgICAgICBieSBoaW0sIEkgaW1wbGVtZW50ZWQgaXQgaW4gYSBzbGlnaHRseSBkZXJpdmVkIHdheSwgd2hpY2ggb2ZmZXJzIGluIAorICAgICAgYWRkaXRpb24gbW9yZSBmbGV4aWJpbGl0eS4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEFwciAyMywgMjAwMCAodjMuMnByZTEpCisgICAxKSBEdXJpbmcgYSB2ZXJ5IGxvbmcgdGltZSwgSSBjb2xsZWN0ZWQgYSBodWdlIGFtb3VudCBvZiBidWdyZXBvcnRzIGZyb20KKyAgICAgIHZhcmlvdXMgcGVvcGxlLCB0cnlpbmcgcmVhbGx5IHF1aXRlIGRpZmZlcmVudCB0aGluZ3Mgb24gdGhlaXIgU0NTSS0KKyAgICAgIFBTLzJzLiBUb2RheSwgYWxsIHRoZXNlIGJ1Z3JlcG9ydHMgYXJlIHRha2VuIGludG8gYWNjb3VudCBhbmQgc2hvdWxkIGJlCisgICAgICBtb3N0bHkgc29sdmVkLiBUaGUgbWFqb3IgdG9waWNzIHdlcmU6CisgICAgICAtIERyaXZlciBjcmFzaGVzIGR1cmluZyBib290dGltZSBieSBubyBvYnZpb3VzIHJlYXNvbi4KKyAgICAgIC0gRHJpdmVyIHBhbmljcyB3aGlsZSB0aGUgbWlkbGV2ZWwtU0NTSS1kcml2ZXIgaXMgdHJ5aW5nIHRvIGlucXVpcmUKKyAgICAgICAgdGhlIFNDU0ktZGV2aWNlIHByb3BlcnRpZXMsIGV2ZW4gdGhvdWdoIGhhcmR3YXJlIGlzIGluIHBlcmZlY3Qgc3RhdGUuCisgICAgICAtIERpc3BsYXllZCBpbmZvIGZvciB0aGUgdmFyaW91cyBzbG90LWNhcmRzIGlzIGludGVycHJldGVkIHdyb25nLgorICAgICAgVGhlIG1haW4gcmVhc29ucyBmb3IgdGhlIGNyYXNoZXMgd2VyZSB0d286CisgICAgICAxKSBUaGUgY29tbWFuZHMgdG8gY2hlY2sgZm9yIGRldmljZSBpbmZvcm1hdGlvbiBsaWtlIElOUVVJUlksIAorICAgICAgICAgVEVTVF9VTklUX1JFQURZLCBSRVFVRVNUX1NFTlNFIGFuZCBNT0RFX1NFTlNFIGNhdXNlIHRoZSBkZXZpY2VzCisJIHRvIGRlbGl2ZXIgaW5mb3JtYXRpb24gb2YgdXAgdG8gMjU1IGJ5dGVzLiBNaWRsZXZlbCBkcml2ZXJzIG9mZmVyCisJIDEwMjQgYnl0ZXMgb2Ygc3BhY2UgZm9yIHRoZSBhbnN3ZXIsIGJ1dCB0aGUgSUJNLVNDU0ktYWRhcHRlcnMgZG8KKwkgbm90IGFjY2VwdCB0aGlzLCBhcyB0aGV5IHN0aWNrIHF1aXRlIG5lYXIgdG8gQU5TSS1TQ1NJIGFuZCByZXBvcnQKKwkgYSBDT01NQU5EX0VSUk9SIG1lc3NhZ2Ugd2hpY2ggY2F1c2VzIHRoZSBkcml2ZXIgdG8gcGFuaWMuIFRoZSBtYWluCisJIHByb2JsZW0gd2FzIGxvY2F0ZWQgYXJvdW5kIHRoZSBJTlFVSVJZIGNvbW1hbmQuIE5vdywgZm9yIGFsbCB0aGUKKwkgbWVudGlvbmVkIGNvbW1hbmRzLCB0aGUgYnVmZmVyc2l6ZSwgc2VudCB0byB0aGUgYWRhcHRlciBpcyBhdCAKKwkgbWF4aW11bSAyNTUgd2hpY2ggc2VlbXMgdG8gYmUgYSBxdWl0ZSByZWFzb25hYmxlIHNvbHV0aW9uLiAKKwkgVEVTVF9VTklUX1JFQURZIGdldHMgYSBidWZmZXJzaXplIG9mIDAgdG8gbWFrZSBzdXJlLCB0aGF0IG5vIAorCSBkYXRhIGlzIHRyYW5zZmVycmVkIGluIG9yZGVyIHRvIGF2b2lkIGFueSBwb3NzaWJsZSBjb21tYW5kIGZhaWx1cmUuCisgICAgICAyKSBPbiB1bnN1Y2Nlc3NmdWwgVEVTVF9VTklUX1JFQURZLCB0aGUgbWlkbGV2ZWwtZHJpdmVyIGhhcyB0byBzZW5kCisgICAgICAgICBhIFJFUVVFU1RfU0VOU0UgaW4gb3JkZXIgdG8gc2VlLCB3aGVyZSB0aGUgcHJvYmxlbSBpcyBsb2NhdGVkLiBUaGlzCisJIFJFUVVFU1RfU0VOU0UgbWF5IGhhdmUgdmFyaW91cyBsZW5ndGggaW4gaXRzIGFuc3dlci1idWZmZXIuIElCTQorCSBTQ1NJLXN1YnN5c3RlbXMgcmVwb3J0IGEgY29tbWFuZCBmYWlsdXJlLCBpZiB0aGUgcmV0dXJuZWQgYnVmZmVyc2l6ZQorCSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2VudCBidWZmZXJzaXplLCBidXQgdGhpcyBjYW4gYmUgc3VwcmVzc2VkIGJ5CisJIGEgc3BlY2lhbCBiaXQsIHdoaWNoIGlzIG5vdyBkb25lIGFuZCBwcm9ibGVtcyBzZWVtIHRvIGJlIHNvbHZlZC4KKyAgIDIpIENvZGUgYWRhcHRpb24gdG8gYWxsIGtlcm5lbC1yZWxlYXNlcy4gTm93LCB0aGUgMy4yIGNvZGUgY29tcGlsZXMgb24gCisgICAgICAyLjAueCwgMi4xLngsIDIuMi54IGFuZCAyLjMueCBrZXJuZWwgcmVsZWFzZXMgd2l0aG91dCBhbnkgY29kZS1jaGFuZ2VzLgorICAgMykgQ29tbWFuZGxpbmUtcGFyYW1ldGVycyBhcmUgcmVjb2duaXplZCBhZ2FpbiwgZXZlbiB1bmRlciBLZXJuZWwgMi4zLnggb3IKKyAgICAgIGhpZ2hlci4KKyAgIC0gTWljaGFlbCBMYW5nICAgCisKKyAgIEFwcmlsIDI3LCAyMDAwICh2My4ycHJlMikKKyAgIDEpIEJ5cGFzc2VkIGNvbW1hbmRzIGdldCByZWFkIGJ5IHRoZSBhZGFwdGVyIGJ5IG9uZSBjeWNsZSBpbnN0ZWFkIG9mIHR3by4KKyAgICAgIFRoaXMgaW5jcmVhc2VzIFNDU0ktcGVyZm9ybWFuY2UuCisgICAyKSBTeW5jaHJvbm91cyBkYXRhdHJhbnNmZXIgaXMgcHJvdmlkZWQgZm9yIHN1cmUgdG8gYmUgNSBNSHogb24gb2xkZXIKKyAgICAgIFNDU0kgYW5kIDEwIE1IeiBvbiBpbnRlcm5hbCBGL1cgU0NTSS1hZGFwdGVyLgorICAgMykgTmV3IGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMgYWxsb3cgdG8gZm9yY2UgdGhlIGFkYXB0ZXIgdG8gc2xvdyBkb3duIHdoaWxlCisgICAgICBpbiBzeW5jaHJvbm91cyB0cmFuc2Zlci4gQ291bGQgYmUgaGVscGZ1bCBmb3IgdmVyeSBvbGQgZGV2aWNlcy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bmUgMiwgMjAwMCAodjMuMnByZTUpCisgICAxKSBBZGRlZCBKaW0gU2hvcm5leSdzIGNvbnRyaWJ1dGlvbiB0byBtYWtlIHRoZSBhY3Rpdml0eSBpbmRpY2F0b3IKKyAgICAgIGZsYXNoaW5nIGluIGFkZGl0aW9uIHRvIHRoZSBMRUQtYWxwaGFudW1lcmljIGRpc3BsYXktcGFuZWwgb24KKyAgICAgIG1vZGVscyA5NUEuIFRvIGJlIGVuYWJsZWQgdG8gY2hvb3NlIHRoaXMgZmVhdHVyZSBmcmVlbHksIGEgbmV3CisgICAgICBjb21tYW5kbGluZSBwYXJhbWV0ZXIgaXMgYWRkZWQsIGNhbGxlZCAnYWN0aXZpdHknLgorICAgMikgQWRkZWQgdGhlIFJFQURfQ09OVFJPTCBiaXQgZm9yIHRlc3RfdW5pdF9yZWFkeSBTQ1NJLWNvbW1hbmQuCisgICAzKSBBZGRlZCBzb21lIHN1cHByZXNzX2V4Y2VwdGlvbiBiaXRzIHRvIHJlYWRfZGV2aWNlX2NhcGFjaXR5IGFuZAorICAgICAgYWxsIGRldmljZV9pbnF1aXJ5IG9jY3VycmVuY2VzIGluIHRoZSBkcml2ZXIgY29kZS4KKyAgIDQpIENvbXBsYWludHMgYWJvdXQgdGhlIHZhcmlvdXMgS0VSTkVMX1ZFUlNJT04gaW1wbGVtZW50YXRpb25zIGFyZQorICAgICAgdGFrZW4gaW50byBhY2NvdW50LiBFdmVyeSBsb2NhbF9MaW51eEtlcm5lbFZlcnNpb24gb2NjdXJyZW5jZSBpcworICAgICAgbm93IHJlcGxhY2VkIGJ5IEtFUk5FTF9WRVJTSU9OLCBkZWZpbmVkIGluIGxpbnV4L3ZlcnNpb24uaC4gCisgICAgICBDb3JyZXNwb25kaW5nIGNoYW5nZXMgd2VyZSBhcHBsaWVkIHRvIGlibW1jYS5oLCB0b28uIFRoaXMgd2FzIGEKKyAgICAgIGNvbnRyaWJ1dGlvbiB0byBhbGwga2VybmVsLXBhcnRzIGJ5IFBoaWxpcHAgSGFobi4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bHkgMTcsIDIwMDAgKHYzLjJwcmU4KQorICAgQSBsb25nIHBlcmlvZCBvZiBjb2xsZWN0aW5nIGJ1Z3JlcG9ydHMgZnJvbSBhbGwgY29ybmVycyBvZiB0aGUgd29ybGQKKyAgIG5vdyBsZWFkIHRvIHRoZSBmb2xsb3dpbmcgY29ycmVjdGlvbnMgdG8gdGhlIGNvZGU6CisgICAxKSBTQ1NJLTIgRi9XIHN1cHBvcnQgY3Jhc2hlZCB3aXRoIGEgQ09NTUFORCBFUlJPUi4gVGhlIHJlYXNvbiBmb3IgdGhpcyAKKyAgICAgIHdhcywgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBkaXNiYWxlIEZhc3QtU0NTSSBmb3IgdGhlIGV4dGVybmFsIGJ1cy4KKyAgICAgIFRoZSBmZWF0dXJlLWNvbnRyb2wgY29tbWFuZCwgd2hlcmUgdGhpcyBjcmFzaCBhcHBlYXJlZCByZWd1bGFybHkgdHJpZWQKKyAgICAgIHRvIHNldCB0aGUgbWF4aW11bSBzcGVlZCBvZiAxME1IeiBzeW5jaHJvbm91cyB0cmFuc2ZlciBzcGVlZCBhbmQgdGhhdAorICAgICAgcmVwb3J0cyBhIENPTU1BTkQgRVJST1IsIGlmIGV4dGVybmFsIGJ1cyBGYXN0LVNDU0kgaXMgZGlzYWJsZWQuIE5vdywKKyAgICAgIHRoZSBmZWF0dXJlLWNvbW1hbmQgcHJvYmVzIGRvd24gZnJvbSBtYXhpbXVtIHNwZWVkIHVudGlsIHRoZSBhZGFwdGVyIAorICAgICAgc3RvcHMgdG8gY29tcGxhaW4sIHdoaWNoIGlzIGF0IHRoZSBzYW1lIHRpbWUgdGhlIG1heGltdW0gcG9zc2libGUKKyAgICAgIHNwZWVkIHNlbGVjdGVkIGluIHRoZSByZWZlcmVuY2UgcHJvZ3JhbS4gU28sIEYvVyBleHRlcm5hbCBjYW4gcnVuIGF0CisgICAgICA1IE1IeiAoc2xvdy0pIG9yIDEwIE1IeiAoZmFzdC1TQ1NJKS4gRHVyaW5nIGZlYXR1cmUgcHJvYmluZywgdGhlIAorICAgICAgQ09NTUFORCBFUlJPUiBtZXNzYWdlIGlzIHVzZWQgdG8gZGV0ZWN0IGlmIHRoZSBhZGFwdGVyIGRvZXMgbm90IGNvbXBsYWluLgorICAgMikgVXAgdG8gbm93LCBvbmx5IGNvbWJpbmVkIGJ1c21vZGUgaXMgc3VwcG9ydGVkLCBpZiB5b3UgdXNlIGV4dGVybmFsCisgICAgICBTQ1NJLWRldmljZXMsIGF0dGFjaGVkIHRvIHRoZSBGL1ctY29udHJvbGxlci4gSWYgZHVhbCBidXMgaXMgc2VsZWN0ZWQsCisgICAgICBvbmx5IHRoZSBpbnRlcm5hbCBTQ1NJLWRldmljZXMgZ2V0IGFjY2Vzc2VkIGJ5IExpbnV4LiBGb3IgbW9zdCAKKyAgICAgIGFwcGxpY2F0aW9ucywgdGhpcyBzaG91bGQgZG8gZmluZS4gCisgICAzKSBXaWRlLVNDU0ktYWRkcmVzc2luZyAoMTYtQml0KSBpcyBub3cgcG9zc2libGUgZm9yIHRoZSBpbnRlcm5hbCBGL1cKKyAgICAgIGJ1cyBvbiB0aGUgRi9XIGFkYXB0ZXIuIElmIEYvVyBhZGFwdGVyIGlzIGRldGVjdGVkLCB0aGUgZHJpdmVyCisgICAgICBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIGV4dGVuZGVkIFBVTi9MVU4gPC0+IExETiBtYXBwaW5nIHRhYmxlcywgd2hpY2gKKyAgICAgIGFyZSBub3cgbmV3IGZyb20gMy4ycHJlOC4gVGhpcyBhbGxvd3MgUFVOcyBiZXR3ZWVuIDAgYW5kIDE1IGFuZCBzaG91bGQKKyAgICAgIHByb3ZpZGUgbW9yZSBmdW4gd2l0aCB0aGUgRi9XIGFkYXB0ZXIuCisgICA0KSBTZXZlcmFsIG1hY2hpbmVzIHVzZSB0aGUgU0NTSTogUE9TIHJlZ2lzdGVycyBmb3IgaW50ZXJuYWwvdW5kb2N1bWVudGVkCisgICAgICBzdG9yYWdlIG9mIHN5c3RlbSByZWxldmFudCBpbmZvLiBUaGlzIGNvbmZ1c2VkIHRoZSBkcml2ZXIsIG1haW5seSBvbgorICAgICAgbW9kZWxzIDk1OTUsIGFzIGl0IGV4cGVjdGVkIG5vIG9uYm9hcmQgU0NTSSBvbmx5LCBpZiBhbGwgUE9TIGluCisgICAgICB0aGUgaW50ZWdyYXRlZCBTQ1NJLWFyZWEgYXJlIHNldCB0byAweDAwIG9yIDB4ZmYuIE5vdywgdGhlIG1lY2hhbmlzbQorICAgICAgdG8gY2hlY2sgZm9yIGludGVncmF0ZWQgU0NTSSBpcyBtdWNoIG1vcmUgcmVzdHJpY3RpdmUgYW5kIHRoZXNlIHByb2JsZW1zCisgICAgICBzaG91bGQgYmUgaGlzdG9yeS4KKyAgIC0gTWljaGFlbCBMYW5nICAgICAgICAgIAorCisgICBKdWx5IDE4LCAyMDAwICh2My4ycHJlOSkKKyAgIFRoaXMgZGV2ZWxvcCByYXRoZXIgcXVpY2tseSBhdCB0aGUgbW9tZW50LiBUd28gbWFqb3IgdGhpbmdzIHdlcmUgc3RpbGwKKyAgIG1pc3NpbmcgaW4gMy4ycHJlODoKKyAgIDEpIFRoZSBhZGFwdGVyIFBVTiBmb3IgRi9XIGFkYXB0ZXJzIGhhcyA0LWJpdHMsIHdoaWxlIGFsbCBvdGhlciBhZGFwdGVycworICAgICAgaGF2ZSAzLWJpdHMuIFRoaXMgaXMgbm93IHRha2VuIGludG8gYWNjb3VudCBmb3IgRi9XLgorICAgMikgV2hlbiB5b3Ugc2VsZWN0IENPTkZJR19JQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCwgeW91IHNob3VsZCAKKyAgICAgIG5vcm1hbGx5IGdldCB0aGUgaW52ZXJzZSBwcm9iaW5nIG9yZGVyIG9mIHlvdXIgZGV2aWNlcyBvbiB0aGUgU0NTSS1idXMuCisgICAgICBUaGUgQU5TSSBkZXZpY2Ugb3JkZXIgZ2V0cyBzY3JhbWJsZWQgaW4gdmVyc2lvbiAzLjJwcmU4ISEgTm93LCBhIG5ldworICAgICAgYW5kIHRlc3RlZCBhbGdvcml0aG0gaW52ZXJ0cyB0aGUgZGV2aWNlLW9yZGVyIG9uIHRoZSBTQ1NJLWJ1cyBhbmQKKyAgICAgIGF1dG9tYXRpY2FsbHkgYXZvaWRzIGFjY2lkZW50YWwgYWNjZXNzIHRvIHdoYXRldmVyIFNDU0kgUFVOIHRoZSBhZGFwdGVyIAorICAgICAgaXMgc2V0IGFuZCB3b3JrcyB3aXRoIFNDU0ktIGFuZCBXaWRlLVNDU0ktYWRkcmVzc2luZy4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEp1bHkgMjMsIDIwMDAgKHYzLjJwcmUxMCB1bnB1Ymxpc2hlZCkgCisgICAxKSBMRUQgcGFuZWwgZGlzcGxheSBzdXBwb3J0cyB3aWRlLWFkZHJlc3NpbmcgaW4gaWJtbWNhPWRpc3BsYXkgbW9kZS4KKyAgIDIpIEFkYXB0ZXItaW5mb3JtYXRpb24gYW5kIGF1dG9hZGFwdGlvbiB0byBhZGRyZXNzLXNwYWNlIGlzIGRvbmUuCisgICAzKSBBdXRvLXByb2JpbmcgZm9yIG1heGltdW0gc3luY2hyb25vdXMgU0NTSSB0cmFuc2ZlciByYXRlIGlzIHdvcmtpbmcuCisgICA0KSBPcHRpbWl6YXRpb24gdG8gc29tZSBlbWJlZGRlZCBmdW5jdGlvbiBjYWxscyBpcyBhcHBsaWVkLgorICAgNSkgQWRkZWQgc29tZSBjb21tZW50IGZvciB0aGUgdXNlciB0byB3YWl0IGZvciBTQ1NJLWRldmljZXMgYmVpbmcgcHJvYmVkLgorICAgNikgRmluaXNoZWQgdmVyc2lvbiAzLjIgZm9yIEtlcm5lbCAyLjQuMC4gSXQgbGVhc3QsIEkgdGhvdWdodCBpdCBpcyBidXQuLi4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEp1bHkgMjYsIDIwMDAgKHYzLjJwcmUxMSkKKyAgIDEpIEkgcGFzc2VkIGEgaG9ycmlibGUgd2Vla2VuZCBnZXR0aW5nIG1hZCB3aXRoIE5NSXMgb24ga2VybmVsIDIuMi4xNCBhbmQKKyAgICAgIGEgbW9kZWwgOTU5NS4gQXNraW5nIGFyb3VuZCBpbiB0aGUgY29tbXVuaXR5LCBub2JvZHkgZXhjZXB0IG9mIG1lIGhhcworICAgICAgc2VlbiBzdWNoIGVycm9ycy4gV2VpcmVkLCBidXQgSSBhbSB0cnlpbmcgdG8gcmVjb21waWxlIGV2ZXJ5dGhpbmcgb24KKyAgICAgIHRoZSBtb2RlbCA5NTk1LiBNYXliZSwgYXMgSSB1c2UgYSBzcGVjaWFsbHkgbW9kaWZpZWQgZ2NjLCB0aGF0IGNvdWxkCisgICAgICBjYXVzZSBwcm9ibGVtcy4gQnV0LCBpdCB3YXMgbm90IHRoZSByZWFzb24uIFRoZSB0cnVlIGJhY2tncm91bmQgd2FzLAorICAgICAgdGhhdCB0aGUga2VybmVsIHdhcyBjb21waWxlZCBmb3IgaTM4NiBhbmQgdGhlIDk1OTUgaGFzIGEgNDg2RFgtMi4gCisgICAgICBOb3JtYWxseSwgbm8gdHJvdWJsZXMgc2hvdWxkIGFwcGVhciwgYnV0IGZvciB0aGlzIHNwZWNpYWwgbWFjaGluZSwKKyAgICAgIG9ubHkgdGhlIHJpZ2h0IHByb2Nlc3NvciBzdXBwb3J0IGlzIHdvcmtpbmcgZmluZSEKKyAgIDIpIFByZXZpb3VzIHByb2JsZW1zIHdpdGggc3luY2hyb25vdXMgc3BlZWQsIHNsb3dpbmcgZG93biBmcm9tIG9uZSBhZGFwdGVyIAorICAgICAgdG8gdGhlIG5leHQgZHVyaW5nIHByb2JpbmcgYXJlIGNvcnJlY3RlZC4gTm93LCBsb2NhbCB2YXJpYWJsZXMgc3RvcmUKKyAgICAgIHRoZSBzeW5jaHJvbm91cyBiaXRtYXNrIGZvciBldmVyeSBzaW5nbGUgYWRhcHRlciBmb3VuZCBvbiB0aGUgTUNBIGJ1cy4KKyAgIDMpIExFRCBhbHBoYW51bWVyaWMgcGFuZWwgc3VwcG9ydCBmb3IgWFg5NSBzeXN0ZW1zIGlzIG5vdyBzaG93aW5nIHNvbWUKKyAgICAgIGFsaXZlIHJvdGF0b3IgZHVyaW5nIGJvb3R0aW1lLiBUaGlzIG1ha2VzIHNlbnNlLCB3aGVuIG5vIG1vbml0b3IgaXMgCisgICAgICBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gWW91IGNhbiBnZXQgcmlkIG9mIGFsbCBkaXNwbGF5IGFjdGl2aXR5LCBpZgorICAgICAgeW91IGRvIG5vdCB1c2UgYW55IHBhcmFtZXRlciBvciBqdXN0IGlibW1jYXNjc2k9YWN0aXZpdHksIGZvciB0aGUgCisgICAgICBoYXJkZHJpdmUgYWN0aXZpdHkgTEVELCBleGlzdGFudCBvbiBhbGwgUFMvMiwgZXhjZXB0IG1vZGVscyA4NTk1LVhYWC4KKyAgICAgIElmIG5vIG1vbml0b3IgaXMgYXZhaWxhYmxlLCBwbGVhc2UgdXNlIGlibW1jYXNjc2k9ZGlzcGxheSwgd2hpY2ggd29ya3MKKyAgICAgIGZpbmUgdG9nZXRoZXIgd2l0aCB0aGUgbGludXhpbmZvIHV0aWxpdHkgZm9yIHRoZSBMRUQtcGFuZWwuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdWx5IDI5LCAyMDAwICh2My4yKQorICAgMSkgU3VibWlzc2lvbiBvZiB0aGlzIGRyaXZlciBmb3Iga2VybmVsIDIuNHRlc3QtWFggYW5kIDIuMi4xNy4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIERlY2VtYmVyIDI4LCAyMDAwICh2My4yZCAvIHY0LjApCisgICAxKSBUaGUgaW50ZXJydXB0IGhhbmRsZXIgaGFkIHNvbWUgd3Jvbmcgc3RhdGVtZW50IHRvIHdhaXQgZm9yLiBUaGlzCisgICAgICB3YXMgZG9uZSBkdWUgdG8gZXhwZXJpbWVudGFsIHJlYXNvbnMgZHVyaW5nIDMuMiBkZXZlbG9wbWVudCBidXQgaXQKKyAgICAgIGhhcyBzaG93biB0aGF0IHRoaXMgaXMgbm90IHN0YWJsZSBlbm91Z2guIEdvaW5nIGJhY2sgdG8gd2FpdCBmb3IgdGhlCisgICAgICBhZGFwdGVyIHRvIGJlIG5vdCBidXN5IGlzIGJlc3QuCisgICAyKSBJbnF1aXJ5IHJlcXVlc3RzIGNhbiBiZSBzaG9ydGVyIHRoYW4gMjU1IGJ5dGVzIG9mIHJldHVybiBidWZmZXIuIER1ZQorICAgICAgdG8gYSBidWcgaW4gdGhlIGlibW1jYV9xdWV1ZWNvbW1hbmQgcm91dGluZSwgdGhpcyBidWZmZXIgd2FzIGZvcmNlZAorICAgICAgdG8gMjU1IGF0IG1pbmltdW0uIElmIHRoZSBtZW1vcnkgYWRkcmVzcywgdGhpcyByZXR1cm4gYnVmZmVyIGlzIHBvaW50aW5nCisgICAgICB0byBkb2VzIG5vdCBvZmZlciBtb3JlIHNwYWNlLCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBkZXN0YWJpbGl6ZWQgdGhlCisgICAgICBrZXJuZWwuCisgICAzKSB2ZXJzaW9uIDQuMCBpcyBvbmx5IHZhbGlkIGZvciBrZXJuZWwgMi40LjAgb3IgbGF0ZXIuIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgICB0byByZW1vdmUgb2xkIGtlcm5lbCB2ZXJzaW9uIGRlcGVuZGVudCB3YXN0ZSBmcm9tIHRoZSBkcml2ZXIuIDMuMmQgaXMKKyAgICAgIG9ubHkgZGlzdHJpYnV0ZWQgd2l0aCBvbGRlciBrZXJuZWxzIGJ1dCBrZWVwcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKKyAgICAgIGtlcm5lbCB2ZXJzaW9ucy4gNC4wIGFuZCBoaWdoZXIgdmVyc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCBvbGRlciAKKyAgICAgIGtlcm5lbHMgYW55bW9yZSEhIFlvdSBtdXN0IGhhdmUgYXQgbGVhc3Qga2VybmVsIDIuNC4wISEKKyAgIDQpIFRoZSBjb21tYW5kbGluZSBhcmd1bWVudCAnYnlwYXNzJyBhbmQgYWxsIGl0cyBmdW5jdGlvbmFsaXR5IGdvdCByZW1vdmVkCisgICAgICBpbiB2ZXJzaW9uIDQuMC4gVGhpcyB3YXMgbmV2ZXIgcmVhbGx5IG5lY2Vzc2FyeSwgYXMgYWxsIHRyb3VibGVzIHdlcmUKKyAgICAgIGJhc2VkIG9uIG5vbi1jb21tYW5kIHJlbGF0ZWQgcmVhc29ucyB1cCB0byBub3csIHNvIGJ5cGFzc2luZyBjb21tYW5kcworICAgICAgZGlkIG5vdCBoZWxwIHRvIGF2b2lkIGFueSBidWdzLiBJdCBpcyBrZXB0IGluIDMuMlggZm9yIGRlYnVnZ2luZyByZWFzb25zLgorICAgNSkgRHluYW1pY2FsIHJlYXNzaWdubWVudCBvZiBsZG5zIHdhcyBhZ2FpbiB2ZXJpZmllZCBhbmQgYW5hbHl6ZWQgdG8gYmUKKyAgICAgIGNvbXBsZXRlbHkgaW5vcGVyYXRpb25hbC4gVGhpcyBpcyBjb3JyZWN0ZWQgYW5kIHNob3VsZCB3b3JrIG5vdy4KKyAgIDYpIEFsbCBjb21tYW5kcyB0aGF0IGdldCBzZW50IHRvIHRoZSBTQ1NJIGFkYXB0ZXIgd2VyZSB2ZXJpZmllZCBhbmQKKyAgICAgIGNvbXBsZXRlZCBpbiBzdWNoIGEgd2F5LCB0aGF0IHRoZXkgYXJlIG5vdyBjb21wbGV0ZWx5IGNvbmZvcm0gdG8gdGhlCisgICAgICBkZW1hbmRzIGluIHRoZSB0ZWNobmljYWwgZGVzY3JpcHRpb24gb2YgSUJNLiBNYWluIGNhbmRpZGF0ZXMgd2VyZSB0aGUKKyAgICAgIERFVklDRV9JTlFVSVJZLCBSRVFVRVNUX1NFTlNFIGFuZCBERVZJQ0VfQ0FQQUNJVFkgY29tbWFuZHMuIFRoZXkgbXVzdAorICAgICAgYmUgdHJhbmZlcnJlZCBieSBieXBhc3NpbmcgdGhlIGludGVybmFsIGNvbW1hbmQgYnVmZmVyIG9mIHRoZSBhZGFwdGVyCisgICAgICBvciBlbHNlIHRoZSByZXNwb25zZSBjYW4gYmUgYSByYW5kb20gcmVzdWx0LiBHRVRfUE9TX0lORk8gd291bGQgYmUgbW9yZQorICAgICAgc2FmZSBpbiB1c2FnZSwgaWYgb25lIGNvdWxkIHVzZSB0aGUgU1VQUkVTU19FWENFUFRJT05fU0hPUlQsIGJ1dCB0aGlzCisgICAgICBpcyBub3QgYWxsb3dlZCBieSB0aGUgdGVjaG5pY2FsIHJlZmVyZW5jZXMgb2YgSUJNLiAoU29ycnksIGZvbGtzLCB0aGUKKyAgICAgIG1vZGVsIDgwIHByb2JsZW0gaXMgc3RpbGwgYSB0YXNrIHRvIGJlIHNvbHZlZCBpbiBhIGRpZmZlcmVudCB3YXkuKQorICAgNykgdjMuMmQgaXMgc3RpbGwgaG9sZCBiYWNrIGZvciBzb21lIGRheXMgZm9yIHRlc3RpbmcsIHdoaWxlIDQuMCBpcyAKKyAgICAgIHJlbGVhc2VkLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSmFudWFyeSAzLCAyMDAxICh2NC4wYSkKKyAgIDEpIEEgbG90IG9mIGNvbXBsYWlucyBhZnRlciB0aGUgMi40LjAtcHJlcmVsZWFzZSBrZXJuZWwgY2FtZSBpbiBhYm91dAorICAgICAgdGhlIGltcG9zc2liaWxpdHkgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLiBUaGlzIHByb2JsZW0gaXMKKyAgICAgIHNvbHZlZC4gSW4gY29tYmluYXRpb24gd2l0aCB0aGF0IHByb2JsZW0sIHNvbWUgdW5wcmVjaXNlIGRlY2xhcmF0aW9uCisgICAgICBvZiB0aGUgZnVuY3Rpb24gb3B0aW9uX3NldHVwKCkgZ2F2ZSBzb21lIHdhcm5pbmdzIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgIFRoaXMgaXMgc29sdmVkLCB0b28gYnkgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIGluIGlibW1jYS5jLgorICAgMikgI2lmZGVmIGFyZ3VtZW50IGNvbmNlcm5pbmcgQ09ORklHX1NDU0lfSUJNTUNBIGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kCisgICAgICB3YXMgZW50aXJlbHkgcmVtb3ZlZC4KKyAgIDMpIFNvbWUgc3dpdGNoIHN0YXRlbWVudHMgZ290IG9wdGltaXplZCBpbiBjb2RlLCBhcyBzb21lIG1pbm9yIHZhcmlhYmxlcworICAgICAgaW4gaW50ZXJuYWwgU0NTSS1jb21tYW5kIGhhbmRsZXJzLgorICAgLSBNaWNoYWVsIExhbmcKKworICAgNCBUbyBkbworICAgLS0tLS0tLQorICAgICAgICAtIElCTSBTQ1NJLTIgRi9XIGV4dGVybmFsIFNDU0kgYnVzIHN1cHBvcnQgaW4gc2VwYXJhdGUgbW9kZSEKKwktIEl0IHNlZW1zIHRoYXQgdGhlIGhhbmRsaW5nIG9mIGJhZCBkaXNrcyBpcyByZWFsbHkgYmFkIC0KKwkgIG5vbi1leGlzdGVudCwgaW4gZmFjdC4gSG93ZXZlciwgYSBsb3ctbGV2ZWwgZHJpdmVyIGNhbm5vdCBoZWxwCisJICBtdWNoLCBpZiBzdWNoIHRoaW5ncyBoYXBwZW4uCisKKyAgIDUgVXNlcnMnIE1hbnVhbAorICAgLS0tLS0tLS0tLS0tLS0tCisgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZXJlIGV4aXN0IHNldmVyYWwgZmVhdHVyZXMgZm9yIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gZHJpdmVyLgorICAgVGhlIGNvbW1hbmRsaW5lIHBhcmFtZXRlciBmb3JtYXQgaXM6CisgICAKKyAgICAgICAgIGlibW1jYXNjc2k9PGNvbW1hbmQxPiw8Y29tbWFuZDI+LDxjb21tYW5kMz4sLi4uCisJIAorICAgd2hlcmUgY29tbWFuZE4gY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgCisgICAgICAgICBkaXNwbGF5ICAgIE93bmVycyBvZiBhIG1vZGVsIDk1IG9yIG90aGVyIFBTLzIgc3lzdGVtcyB3aXRoIGFuCisJICAgICAgICAgICAgYWxwaGFudW1lcmljIExFRCBkaXNwbGF5IG1heSBzZXQgdGhpcyB0byBoYXZlIHRoZWlyCisJCSAgICBkaXNwbGF5IHNob3dpbmcgdGhlIGZvbGxvd2luZyBvdXRwdXQgb2YgdGhlIDggZGlnaXRzOgorCQkgICAgICAKKwkJICAgICAgICAgICAgICAgIC0tLS0tLURBCisJCQkJCisJCSAgICB3aGVyZSAnLScgc3RheXMgZGFyaywgJ0QnIHNob3dzIHRoZSBTQ1NJLWRldmljZSBpZAorCQkgICAgYW5kICdBJyBzaG93cyB0aGUgU0NTSSBob3N0aW5kZXgsIGJlaW5nIGN1cnJlbnRseSAKKwkJICAgIGFjY2Vzc2VkLiBEdXJpbmcgYm9vdHRpbWUsIHRoaXMgd2lsbCBnaXZlIHRoZSBtZXNzYWdlCisJCSAgICAKKwkJICAgICAgICAgICAgICAgIFNDU0lpbmkqCisJCQkJCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBMRUQtcGFuZWwsIHdoZXJlIHRoZSAqIHJlcHJlc2VudHMgYSByb3RhdG9yLCAKKwkJICAgIHNob3dpbmcgdGhlIGFjdGl2aXR5IGR1cmluZyB0aGUgcHJvYmluZyBwaGFzZSBvZiB0aGUKKwkJICAgIGRyaXZlciB3aGljaCBjYW4gdGFrZSB1cCB0byB0d28gbWludXRlcyBwZXIgU0NTSS1hZGFwdGVyLgorCSBhZGlzcGxheSAgIFRoaXMgd29ya3MgbGlrZSBkaXNwbGF5LCBidXQgZ2l2ZXMgbW9yZSBvcHRpY2FsIG92ZXJ2aWV3IAorCSAgICAgICAgICAgIG9mIHRoZSBhY3Rpdml0aWVzIG9uIHRoZSBTQ1NJLWJ1cy4gVGhlIGRpc3BsYXkgd2lsbCBoYXZlCisJCSAgICB0aGUgZm9sbG93aW5nIG91dHB1dDoKKwkJICAgIAorCQkgICAgICAgICAgICAgICAgNjU0MzIxMEEKKwkJCQkKKwkJICAgIHdoZXJlIHRoZSBudW1iZXJzIDAgdG8gNiBsaWdodCB1cCBhdCB0aGUgc2hvd24gcG9zaXRpb24sCisJCSAgICB3aGVuIHRoZSBTQ1NJLWRldmljZSBpcyBhY2Nlc3NlZC4gJ0EnIHNob3dzIGFnYWluIHRoZSBTQ1NJCisJCSAgICBob3N0aW5kZXguIElmIGRpc3BsYXkgbm9yIGFkaXNwbGF5IGlzIHNldCwgdGhlIGludGVybmFsCisJCSAgICBQUy8yIGhhcmRkaXNrIExFRCBpcyB1c2VkIGZvciBtZWRpYS1hY3Rpdml0aWVzLiBTbywgaWYKKwkJICAgIHlvdSByZWFsbHkgZG8gbm90IGhhdmUgYSBzeXN0ZW0gd2l0aCBhIExFRC1kaXNwbGF5LCB5b3UKKwkJICAgIHNob3VsZCBub3Qgc2V0IGRpc3BsYXkgb3IgYWRpc3BsYXkuIEtlZXAgaW4gbWluZCwgdGhhdAorCQkgICAgZGlzcGxheSBhbmQgYWRpc3BsYXkgY2FuIG9ubHkgYmUgdXNlZCBhbHRlcm5hdGl2ZWx5LiBJdAorCQkgICAgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIG9wdGlvbiwgaWYgeW91IGhhdmUgc29tZQorCQkgICAgd2lkZS1hZGRyZXNzZWQgZGV2aWNlcyBlLmcuIGF0IHRoZSBTQ1NJLTIgRi9XIGFkYXB0ZXIgaW4KKwkJICAgIHlvdXIgc3lzdGVtLiBJbiBhZGRpdGlvbiwgdGhlIHVzYWdlIG9mIHRoZSBkaXNwbGF5IGZvcgorCQkgICAgb3RoZXIgdGFza3MgaW4gcGFyYWxsZWwsIGxpa2UgdGhlIGxpbnV4aW5mby11dGlsaXR5IG1ha2VzIAorCQkgICAgbm8gc2Vuc2Ugd2l0aCB0aGlzIG9wdGlvbi4KKwkgYWN0aXZpdHkgICBUaGlzIGVuYWJsZXMgdGhlIFBTLzIgaGFyZGRpc2sgTEVEIGFjdGl2aXR5IGluZGljYXRvci4KKwkgICAgICAgICAgICBNb3N0IFBTLzIgaGF2ZSBubyBhbHBoYW51bWVyaWMgTEVEIGRpc3BsYXksIGJ1dCBzb21lCisJCSAgICBpbmRpY2F0b3IuIFNvIHlvdSBzaG91bGQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGFjdGl2YXRlIGl0LgorCQkgICAgSWYgeW91IG93biBtb2RlbCA5NTk1IChTZXJ2ZXI5NSksIHlvdSBjYW4gaGF2ZSBib3RoLCB0aGUgCisJCSAgICBMRUQgcGFuZWwgYW5kIHRoZSBhY3Rpdml0eSBpbmRpY2F0b3IgaW4gcGFyYWxsZWwuIEhvd2V2ZXIsCisJCSAgICBzb21lIFBTLzJzLCBsaWtlIHRoZSA4NTk1IGRvIG5vdCBoYXZlIGFueSBoYXJkZGlzayBMRUQgCisJCSAgICBhY3Rpdml0eSBpbmRpY2F0b3IsIHdoaWNoIG1lYW5zLCB0aGF0IHlvdSBtdXN0IHVzZSB0aGUKKwkJICAgIGFscGhhbnVtZXJpYyBMRUQgZGlzcGxheSBpZiB5b3Ugd2FudCB0byBtb25pdG9yIFNDU0ktCisJCSAgICBhY3Rpdml0eS4KKwkgYnlwYXNzICAgICBUaGlzIGlzIG9ic29sZXRlIGZyb20gZHJpdmVyIHZlcnNpb24gNC4wLCBhcyB0aGUgYWRhcHRlcnMKKwkgICAgICAgICAgICBnb3QgdGhhdCBmYXIgdW5kZXJzdG9vZCwgdGhhdCB0aGUgc2VsZWN0aW9uIGJldHdlZW4gCisJCSAgICBpbnRlZ3JhdGVkIGFuZCBieXBhc3NlZCBjb21tYW5kcyBzaG91bGQgbm93IHdvcmsgY29tcGxldGVseQorCQkgICAgY29ycmVjdCEgRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlIG9sZCBkZXNjcmlwdGlvbiBpcworCQkgICAga2VwdCBoZXJlOgorCSAgICAgICAgICAgIFRoaXMgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGZvcmNlcyB0aGUgZHJpdmVyIG5ldmVyIHRvIHVzZQorCSAgICAgICAgICAgIFNDU0ktc3Vic3lzdGVtcycgaW50ZWdyYXRlZCBTQ1NJLWNvbW1hbmQgc2V0LiBFeGNlcHQgb2YKKwkJICAgIHRoZSBpbW1lZGlhdGUgYXNzaWduLCB3aGljaCBpcyBvZiB2aXRhbCBpbXBvcnRhbmNlIGZvcgorCQkgICAgZXZlcnkgSUJNIFNDU0ktc3Vic3lzdGVtIHRvIHNldCBpdHMgbGRucyByaWdodC4gSW5zdGVhZCwKKwkJICAgIHRoZSBvcmRpbmFyeSBBTlNJLVNDU0ktY29tbWFuZHMgYXJlIHVzZWQgYW5kIHBhc3NlZCBieSB0aGUKKwkJICAgIGNvbnRyb2xsZXIgdG8gdGhlIFNDU0ktZGV2aWNlcywgdGhlcmVmb3JlICdieXBhc3MnLiBUaGUKKwkJICAgIGVmZm9ydCwgZG9uZSBieSB0aGUgc3Vic3lzdGVtIGlzIHF1aXRlIGJvZ3VzIGFuZCBhdCBhCisJCSAgICBtaW5pbXVtIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkIHdvcmsgZXZlcnl3aGVyZS4gVGhpcworCQkgICAgY291bGQgbWF5YmUgc29sdmUgdHJvdWJsZXMgd2l0aCBvbGQgb3IgaW50ZWdyYXRlZCBTQ1NJLQorCQkgICAgY29udHJvbGxlcnMgYW5kIG5hc3R5IGhhcmRkaXNrcy4gS2VlcCBpbiBtaW5kLCB0aGF0IHVzaW5nIAorCQkgICAgdGhpcyBmbGFnIHdpbGwgc2xvdy1kb3duIFNDU0ktYWNjZXNzZXMgc2xpZ2h0bHksIGFzIHRoZSAKKwkJICAgIHNvZnR3YXJlIGdlbmVyYXRlZCBjb21tYW5kcyBhcmUgYWx3YXlzIHNsb3dlciB0aGFuIHRoZSAKKwkJICAgIGhhcmR3YXJlLiBOb24taGFyZGRpc2sgZGV2aWNlcyBhbHdheXMgZ2V0IHJlYWQvd3JpdGUtCisJCSAgICBjb21tYW5kcyBpbiBieXBhc3MgbW9kZS4gT24gdGhlIG1vc3QgcmVjZW50IHJlbGVhc2VzIG9mIAorCQkgICAgdGhlIExpbnV4IElCTS1TQ1NJLWRyaXZlciwgdGhlIGJ5cGFzcyBjb21tYW5kIHNob3VsZCBiZQorCQkgICAgbm8gbG9uZ2VyIGEgbmVjZXNzYXJ5IHRoaW5nLCBpZiB5b3UgYXJlIHN1cmUgYWJvdXQgeW91cgorCQkgICAgU0NTSS1oYXJkd2FyZSEKKwkgbm9ybWFsICAgICBUaGlzIGlzIHRoZSBwYXJhbWV0ZXIsIGludHJvZHVjZWQgb24gdGhlIDIuMC54IGRldmVsb3BtZW50CisJICAgICAgICAgICAgcmFpbCBieSBaUCBHdS4gVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgU0NTSS1kZXZpY2UKKwkJICAgIHNjYW4gb3JkZXIgaW4gdGhlIG5ldyBpbmR1c3RyeSBzdGFuZGFyZC4gVGhpcyBtZWFucywgdGhhdAorCQkgICAgdGhlIGZpcnN0IFNDU0ktZGV2aWNlIGlzIHRoZSBvbmUgd2l0aCB0aGUgbG93ZXN0IHB1bi4KKwkJICAgIEUuZy4gaGFyZGRpc2sgYXQgcHVuPTAgaXMgc2Nhbm5lZCBiZWZvcmUgaGFyZGRpc2sgYXQKKwkJICAgIHB1bj02LCB3aGljaCBtZWFucywgdGhhdCBoYXJkZGlzayBhdCBwdW49MCBnZXRzIHNkYQorCQkgICAgYW5kIHRoZSBvbmUgYXQgcHVuPTYgZ2V0cyBzZGIuCisJIGFuc2kgICAgICAgVGhlIEFOU0ktc3RhbmRhcmQgZm9yIHRoZSByaWdodCBzY2FuIG9yZGVyLCBhcyBkb25lIGJ5CisJICAgICAgICAgICAgSUJNLCBNaWNyb3dhcmUgYW5kIE1pY3Jvc29mdCwgc2NhbnMgU0NTSS1kZXZpY2VzIHN0YXJ0aW5nCisJCSAgICBhdCB0aGUgaGlnaGVzdCBwdW4sIHdoaWNoIG1lYW5zLCB0aGF0IGUuZy4gaGFyZGRpc2sgYXQKKwkJICAgIHB1bj02IGdldHMgc2RhIGFuZCBhIGhhcmRkaXNrIGF0IHB1bj0wIGdldHMgc2RiLiBJZiB5b3UKKwkJICAgIGxpa2UgdG8gaGF2ZSB0aGUgc2FtZSBTQ1NJLWRldmljZSBvcmRlciwgYXMgaW4gRE9TLCBPUy05CisJCSAgICBvciBPUy8yLCBqdXN0IHVzZSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgIGZhc3QgICAgICAgU0NTSS1JL08gaW4gc3luY2hyb25vdXMgbW9kZSBpcyBkb25lIGF0IDUgTUh6IGZvciBJQk0tCisgICAgICAgICAgICAgICAgICAgIFNDU0ktZGV2aWNlcy4gU0NTSS0yIEZhc3QvV2lkZSBBZGFwdGVyL0EgZXh0ZXJuYWwgYnVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0aGVuIHJ1biBhdCAxMCBNSHogaWYgRmFzdC1TQ1NJIGlzIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgIGFuZCBhdCA1IE1IeiBpZiBGYXN0LVNDU0kgaXMgZGlzYWJsZWQgb24gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgIGJ1cy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nIHdoZW4gbm90aGluZyBpcyAKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGhlcmUuCisgICAgICAgICBtZWRpdW0gICAgIFN5bmNocm9ub3VzIHJhdGUgaXMgYXQgNTAlIGFwcHJveGltYXRlbHksIHdoaWNoIG1lYW5zCisgICAgICAgICAgICAgICAgICAgIDIuNSBNSHogZm9yIElCTSBTQ1NJLWFkYXB0ZXJzIGFuZCA1LjAgTUh6IGZvciBGL1cgZXh0LgorICAgICAgICAgICAgICAgICAgICBTQ1NJLWJ1cyAod2hlbiBGYXN0LVNDU0kgc3BlZWQgZW5hYmxlZCBvbiBleHRlcm5hbCBidXMpLgorICAgICAgICAgc2xvdyAgICAgICBUaGUgc2xvd2VzdCBwb3NzaWJsZSBzeW5jaHJvbm91cyB0cmFuc2ZlciByYXRlIGlzIHNldC4gCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgMS44MiBNSHogZm9yIElCTSBTQ1NJLWFkYXB0ZXJzIGFuZCAyLjAgTUh6CisgICAgICAgICAgICAgICAgICAgIGZvciBGL1cgZXh0ZXJuYWwgYnVzIGF0IEZhc3QtU0NTSSBzcGVlZCBvbiB0aGUgZXh0ZXJuYWwKKwkJICAgIGJ1cy4KKwkJICAgIAorICAgQSBmdXJ0aGVyIG9wdGlvbiBpcyB0aGF0IHlvdSBjYW4gZm9yY2UgdGhlIFNDU0ktZHJpdmVyIHRvIGFjY2VwdCBhIFNDU0ktCisgICBzdWJzeXN0ZW0gYXQgYSBjZXJ0YWluIEkvTy1hZGRyZXNzIHdpdGggYSBwcmVkZWZpbmVkIGFkYXB0ZXIgUFVOLiBUaGlzCisgICBpcyBkb25lIGJ5IGVudGVyaW5nIAorCisgICAgICAgICAgICAgICAgICBjb21tYW5kTiAgID0gSS9PLWJhc2UKKwkJICBjb21tYW5kTisxID0gYWRhcHRlciBQVU4KKwkJICAKKyAgIGUuZy4gaWJtbWNhc2NzaT0weDM1NDAsNyB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gZGV0ZWN0IGEgU0NTSS1zdWJzeXN0ZW0gCisgICBhdCBJL08tYWRkcmVzcyAweDM1NDAgd2l0aCBhZGFwdGVyIFBVTiA3LiBQbGVhc2Ugb25seSB1c2UgdGhpcyBtZXRob2QsIGlmCisgICB0aGUgZHJpdmVyIGRvZXMgcmVhbGx5IG5vdCByZWNvZ25pemUgeW91ciBTQ1NJLWFkYXB0ZXIhIFdpdGggZHJpdmVyIHZlcnNpb24KKyAgIDMuMiwgdGhpcyByZWNvZ25pdGlvbiBvZiB2YXJpb3VzIGFkYXB0ZXJzIHdhcyBodWdlbHkgaW1wcm92ZWQgYW5kIHlvdQorICAgc2hvdWxkIHRyeSBmaXJzdCB0byByZW1vdmUgeW91ciBjb21tYW5kbGluZSBhcmd1bWVudHMgb2Ygc3VjaCB0eXBlIHdpdGggYSAKKyAgIG5ld2VyIGRyaXZlci4gSSBiZXQsIGl0IHdpbGwgYmUgcmVjb2duaXplZCBjb3JyZWN0bHkuIEV2ZW4gbXVsdGlwbGUgYW5kIAorICAgZGlmZmVyZW50IHR5cGVzIG9mIElCTSBTQ1NJLWFkYXB0ZXJzIHNob3VsZCBiZSByZWNvZ25pemVkIGNvcnJlY3RseSwgdG9vLgorICAgVXNlIHRoZSBmb3JjZWQgZGV0ZWN0aW9uIG1ldGhvZCBvbmx5IGFzIGxhc3Qgc29sdXRpb24hCisgICAKKyAgIEV4YW1wbGVzOgorICAgCisgICAgICAgIGlibW1jYXNjc2k9YWRpc3BsYXkKKwkKKyAgIFRoaXMgd2lsbCB1c2UgdGhlIGFkdmFuY2VkIGRpc3BsYXkgbW9kZSBmb3IgdGhlIG1vZGVsIDk1IExFRCBhbHBoYW51bWVyaWMKKyAgIGRpc3BsYXkuCisgICAKKyAgICAgICAgaWJtbWNhc2NzaT1kaXNwbGF5LDB4MzU1OCw3CisJCisgICBUaGlzIHdpbGwgYWN0aXZhdGUgdGhlIGRlZmF1bHQgZGlzcGxheSBtb2RlIGZvciB0aGUgbW9kZWwgOTUgTEVEIGRpc3BsYXkKKyAgIGFuZCB3aWxsIGZvcmNlIHRoZSBkcml2ZXIgdG8gYWNjZXB0IGEgU0NTSS1zdWJzeXN0ZW0gYXQgSS9PLWJhc2UgMHgzNTU4CisgICB3aXRoIGFkYXB0ZXIgUFVOIDcuCisgICAKKyAgIDUuMiBUcm91Ymxlc2hvb3RpbmcKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBmb2xsb3dpbmcgRkFRcyBzaG91bGQgaGVscCB5b3UgdG8gc29sdmUgc29tZSBtYWpvciBwcm9ibGVtcyB3aXRoIHRoaXMKKyAgIGRyaXZlci4KKyAgIAorICAgICBROiAiUmVzZXQgU0NTSS1kZXZpY2VzIGF0IGJvb3R0aW1lIiBoYWx0cyB0aGUgc3lzdGVtIGF0IGJvb3R0aW1lLCB3aHk/CisgICAgIEE6IFRoaXMgaXMgb25seSB0ZXN0ZWQgd2l0aCB0aGUgSUJNIFNDU0kgQWRhcHRlciB3L2NhY2hlLiBJdCBpcyBub3QKKyAgICAgICAgeWV0IHByb292ZWQgdG8gcnVuIG9uIG90aGVyIGFkYXB0ZXJzLCBob3dldmVyIHlvdSBtYXkgYmUgbHVja3kuCisJSW4gdmVyc2lvbiAzLjFkIHRoaXMgaGFzIGJlZW4gaHVnZWx5IGltcHJvdmVkIGFuZCBzaG91bGQgd29yayBiZXR0ZXIsCisJbm93LiBOb3JtYWxseSB5b3UgcmVhbGx5IHdvbid0IG5lZWQgdG8gYWN0aXZhdGUgdGhpcyBmbGFnIGluIHRoZQorCWtlcm5lbCBjb25maWd1cmF0aW9uLCBhcyBhbGwgcG9zdCAxOTg5IFNDU0ktZGV2aWNlcyBzaG91bGQgYWNjZXB0CisJdGhlIHJlc2V0LXNpZ25hbCwgd2hlbiB0aGUgY29tcHV0ZXIgaXMgc3dpdGNoZWQgb24uIFRoZSBTQ1NJLQorCXN1YnN5c3RlbSBnZW5lcmF0ZXMgdGhpcyByZXNldCB3aGlsZSBiZWluZyBpbml0aWFsaXplZC4gVGhpcyBmbGFnCisJaXMgcmVhbGx5IHJlc2VydmVkIGZvciB1c2VycyB3aXRoIHZlcnkgb2xkLCB2ZXJ5IHN0cmFuZ2Ugb3Igc2VsZi1tYWRlCisJU0NTSS1kZXZpY2VzLgorICAgICBROiBXaHkgaXMgdGhlIFNDU0ktb3JkZXIgb2YgbXkgZHJpdmVzIG1pcnJvcmVkIHRvIHRoZSBkZXZpY2Utb3JkZXIKKyAgICAgICAgc2VlbiBmcm9tIE9TLzIgb3IgRE9TID8KKyAgICAgQTogSXQgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgaWYgaXQgbG9va3MgYXQgdGhlIGRldmljZXMgaW4KKyAgICAgICAgQU5TSS1TQ1NJLXN0YW5kYXJkIChzdGFydGluZyBmcm9tIHB1biA2IGFuZCBnb2luZyBkb3duIHRvIHB1biAwKSBvcgorCWlmIGl0IGp1c3Qgc3RhcnRzIGF0IHB1biAwIGFuZCBjb3VudHMgdXAuIElmIHlvdSB3YW50IHRvIGJlIGNvbmZvcm0KKwl3aXRoIE9TLzIgYW5kIERPUywgeW91IGhhdmUgdG8gYWN0aXZhdGUgdGhpcyBmbGFnIGluIHRoZSBrZXJuZWwKKwljb25maWd1cmF0aW9uIG9yIHlvdSBzaG91bGQgc2V0ICdhbnNpJyBhcyBwYXJhbWV0ZXIgZm9yIHRoZSBrZXJuZWwuCisJVGhlIHBhcmFtZXRlciAnbm9ybWFsJyBzZXRzIHRoZSBuZXcgaW5kdXN0cnkgc3RhbmRhcmQsIHN0YXJ0aW5nCisJZnJvbSBwdW4gMCwgc2Nhbm5pbmcgdXAgdG8gcHVuIDYuIFRoaXMgYWxsb3dzIHlvdSB0byBjaGFuZ2UgeW91ciAKKwlvcGluaW9uIHN0aWxsIGFmdGVyIGhhdmluZyBhbHJlYWR5IGNvbXBpbGVkIHRoZSBrZXJuZWwuCisgICAgIFE6IFdoeSBJIGNhbm5vdCBmaW5kIHRoZSBJQk0gTUNBIFNDU0kgc3VwcG9ydCBpbiB0aGUgY29uZmlnIG1lbnVlPworICAgICBBOiBZb3UgaGF2ZSB0byBhY3RpdmF0ZSBNQ0EgYnVzIHN1cHBvcnQsIGZpcnN0LgorICAgICBROiBXaGVyZSBjYW4gSSBmaW5kIHRoZSBsYXRlc3QgaW5mbyBhYm91dCB0aGlzIGRyaXZlcj8KKyAgICAgQTogU2VlIHRoZSBmaWxlIE1BSU5UQUlORVJTIGZvciB0aGUgY3VycmVudCBXV1ctYWRkcmVzcywgd2hpY2ggb2ZmZXJzCisgICAgICAgIHVwZGF0ZXMsIGluZm8gYW5kIFEvQSBsaXN0cy4gQXQgdGhpcyBmaWxlcycgb3JpZ2luLCB0aGUgd2ViYWRkcmVzcworCXdhczogaHR0cDovL3d3dy51bmktbWFpbnouZGUvfmxhbmdtMDAwL2xpbnV4Lmh0bWwKKyAgICAgUTogTXkgU0NTSS1hZGFwdGVyIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHdoYXQgY2FuIEkgZG8/CisgICAgIEE6IEp1c3QgZm9yY2UgaXQgdG8gYmUgcmVjb2duaXplZCBieSBrZXJuZWwgcGFyYW1ldGVycy4gU2VlIHNlY3Rpb24gNS4xLgorICAgICAgICBJZiB0aGlzIHJlYWxseSBoYXBwZW5zLCBkbyBhbHNvIHNlbmQgZS1tYWlsIHRvIHRoZSBtYWludGFpbmVyLCBhcworCWZvcmNlZCBkZXRlY3Rpb24gc2hvdWxkIGJlIG5ldmVyIG5lY2Vzc2FyeS4gRm9yY2VkIGRldGVjdGlvbiBpcyBpbgorCXByaW5jaXBhbCBzb21lIGZsYXcgb2YgdGhlIGRyaXZlciBhZGFwdGVyIGRldGVjdGlvbiBhbmQgZ29lcyBpbnRvIAorCWJ1Z3JlcG9ydHMuCisgICAgIFE6IFRoZSBkcml2ZXIgc2NyZXdzIHVwLCBpZiBpdCBzdGFydHMgdG8gcHJvYmUgU0NTSS1kZXZpY2VzLCBpcyB0aGVyZQorICAgICAgICBzb21lIHdheSBvdXQgb2YgaXQ/CisgICAgIEE6IFllcywgdGhhdCB3YXMgc29tZSByZWNvZ25pdGlvbiBwcm9ibGVtIG9mIHRoZSBjb3JyZWN0IFNDU0ktYWRhcHRlcgorICAgICAgICBhbmQgaXRzIEkvTyBiYXNlIGFkZHJlc3Nlcy4gVXBncmFkZSB5b3VyIGRyaXZlciB0byB0aGUgbGF0ZXN0IHJlbGVhc2UKKwlhbmQgaXQgc2hvdWxkIGJlIGZpbmUgYWdhaW4uCisgICAgIFE6IEkgZ2V0IGEgbWVzc2FnZTogcGFuaWMgSUJNIE1DQSBTQ1NJOiBjb21tYW5kIGVycm9yIC4uLi4gLCB3aGF0IGNhbgorICAgICAgICBJIGRvIGFnYWluc3QgdGhpcz8KKyAgICAgQTogUHJldmlvdXNseSwgSSBmb2xsb3dlZCB0aGUgd2F5IGJ5IGlnbm9yaW5nIGNvbW1hbmQgZXJyb3JzIGJ5IHVzaW5nCisgICAgICAgIGlibW1jYXNjc2k9Zm9yZ2l2ZWFsbCwgYnV0IHRoaXMgY29tbWFuZCBubyBsb25nZXIgZXhpc3RzIGFuZCBpcworCW9ic29sZXRlLiBJZiBzdWNoIGEgcHJvYmxlbSBhcHBlYXJzLCBpdCBpcyBjYXVzZWQgYnkgc29tZSBzZWdtZW50YXRpb24KKwlmYXVsdCBvZiB0aGUgZHJpdmVyLCB3aGljaCBtYXBzIHRvIHNvbWUgdW5hbGxvd2VkIGFyZWEuIFRoZSBsYXRlc3QgCisJdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHNob3VsZCBiZSBvaywgYXMgbW9zdCBidWdzIGhhdmUgYmVlbiBzb2x2ZWQuCisgICAgIFE6IFRoZXJlIGFyZSBzdGlsbCBrZXJuZWwgcGFuaWNzLCBldmVuIGFmdGVyIGhhdmluZyBzZXQgCisgICAgICAgIGlibW1jYXNjc2k9Zm9yZ2l2ZWFsbC4gQXJlIHRoZXJlIG90aGVyIHBvc3NpYmlsaXRpZXMgdG8gcHJldmVudAorCXN1Y2ggcGFuaWNzPworICAgICBBOiBObywgZ2V0IGp1c3QgdGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBkcml2ZXIgYW5kIGl0IHNob3VsZCB3b3JrIAorICAgICAgICBiZXR0ZXIgYW5kIGJldHRlciB3aXRoIGluY3JlYXNpbmcgdmVyc2lvbiBudW1iZXIuIEZvcmdldCBhYm91dCB0aGlzCisJaWJtbWNhc2NzaT1mb3JnaXZlYWxsLCBhcyBhbHNvIGlnbm9yZWNtZCBhcmUgb2Jzb2xldGUuIQorICAgICBROiBMaW51eCBwYW5pY3Mgb3Igc3RvcHMgd2l0aG91dCBhbnkgY29tbWVudCwgYnV0IGl0IGlzIHByb2JhYmxlLCB0aGF0IG15CisgICAgICAgIGhhcmRkaXNrKHMpIGhhdmUgYmFkIGJsb2Nrcy4KKyAgICAgQTogU29ycnksIHRoZSBiYWQtYmxvY2sgaGFuZGxpbmcgaXMgc3RpbGwgYSBmZWVibGUgcG9pbnQgb2YgdGhpcyBkcml2ZXIsCisgICAgICAgIGJ1dCBpcyBvbiB0aGUgc2NoZWR1bGUgZm9yIGRldmVsb3BtZW50IGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgICAgUTogTGludXggcGFuaWNzIHdoaWxlIGR5bmFtaWNhbGx5IGFzc2lnbmluZyBTQ1NJLWlkcyBvciBsZG5zLgorICAgICBBOiBJZiB5b3UgZGlzY29ubmVjdCBhIFNDU0ktZGV2aWNlIGZyb20gdGhlIG1hY2hpbmUsIHdoaWxlIExpbnV4IGlzIHVwCisgICAgICAgIGFuZCB0aGUgZHJpdmVyIHVzZXMgZHluYW1pY2FsIHJlYXNzaWdubWVudCBvZiBsb2dpY2FsIGRldmljZSBudW1iZXJzCisJKGxkbiksIGl0IHJlYWxseSBnZXRzICJhbmdyeSIgaWYgaXQgd29uJ3QgZmluZCBkZXZpY2VzLCB0aGF0IHdlcmUgc3RpbGwKKwlwcmVzZW50IGF0IGJvb3R0aW1lIGFuZCBzdG9wcyBMaW51eC4KKyAgICAgUTogVGhlIHN5c3RlbSBkb2VzIG5vdCByZWNvdmVyIGFmdGVyIGFuIGFib3J0LWNvbW1hbmQgaGFzIGJlZW4gZ2VuZXJhdGVkLgorICAgICBBOiBUaGlzIGlzIHJlZ3JldHRhYmx5IHRydWUsIGFzIGl0IGlzIG5vdCB5ZXQgdW5kZXJzdG9vZCwgd2h5IHRoZSAKKyAgICAgICAgU0NTSS1hZGFwdGVyIGRvZXMgcmVhbGx5IE5PVCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0IGF0IHRoZSBlbmQgb2YKKwl0aGUgYWJvcnQtY29tbWFuZC4gQXMgbm8gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgdGhlIGFib3J0IGNvbW1hbmQKKwljYW5ub3QgZ2V0IGZpbmlzaGVkIGFuZCB0aGUgc3lzdGVtIGhhbmdzLCBzb3JyeSwgYnV0IGNoZWNrcyBhcmUgCisJcnVubmluZyB0byBodW50IGRvd24gdGhpcyBwcm9ibGVtLiBJZiB0aGVyZSBpcyBhIHJlYWwgcGVuZGluZyBjb21tYW5kLAorCXRoZSBpbnRlcnJ1cHQgTVVTVCBnZXQgZ2VuZXJhdGVkIGFmdGVyIGFib3J0LiBJbiB0aGlzIGNhc2UsIGl0CisJc2hvdWxkIGZpbmlzaCB3ZWxsLgorICAgICBROiBUaGUgc3lzdGVtIGdldHMgaW4gYmFkIHNoYXBlIGFmdGVyIGEgU0NTSS1yZXNldCwgaXMgdGhpcyBrbm93bj8KKyAgICAgQTogWWVzLCBhcyB0aGVyZSBhcmUgYSBsb3Qgb2YgcHJlc2NyaXB0aW9ucyAoc2VlIHRoZSBMaW51eCBIYWNrZXJzJworICAgICAgICBHdWlkZSkgd2hhdCBoYXMgdG8gYmUgZG9uZSBmb3IgcmVzZXQsIHdlIHN0aWxsIHNoYXJlIHRoZSBiYWQgc2hhcGUgb2YKKwl0aGUgcmVzZXQgZnVuY3Rpb25zIHdpdGggYWxsIG90aGVyIGxvdyBsZXZlbCBTQ1NJLWRyaXZlcnMuIAorCUFzdG9uaXNoaW5nbHksIHJlc2V0IHdvcmtzIGluIG1vc3QgY2FzZXMgcXVpdGUgb2ssIGJ1dCB0aGUgaGFyZGRpc2tzCisJd29uJ3QgcnVuIGluIHN5bmNob25vdXMgbW9kZSBhbnltb3JlIGFmdGVyIGEgcmVzZXQsIHVudGlsIHlvdSByZWJvb3QuCisgICAgIFE6IFdoeSBkb2VzIG15IFhYWCB3L0NhY2hlIGFkYXB0ZXIgbm90IHVzZSByZWFkLXByZWZldGNoPworICAgICBBOiBPaywgdGhhdCBpcyBub3QgY29tcGxldGVseSBwb3NzaWJsZS4gSWYgYSBjYWNoZSBpcyBwcmVzZW50LCB0aGUgCisgICAgICAgIGFkYXB0ZXIgdHJpZXMgdG8gdXNlIGl0IGludGVybmFsbHkuIEV4cGxpY2l0bHksIG9uZSBjYW4gdXNlIHRoZSBjYWNoZQorCXdpdGggYSByZWFkIHByZWZldGNoIGNvbW1hbmQsIG1heWJlIGluIGZ1dHVyZSwgYnV0IHRoaXMgcmVxdWlyZXMKKwlzb21lIG1ham9yIG92ZXJoZWFkIG9mIFNDU0ktY29tbWFuZHMgdGhhdCByaXNrcyB0aGUgcGVyZm9ybWFuY2UgdG8KKwlnbyBkb3duIG1vcmUgdGhhbiBpdCBnZXRzIGltcHJvdmVkLiBUZXN0cyB3aXRoIHRoYXQgYXJlIHJ1bm5pbmcuCisgICAgIFE6IEkgaGF2ZSBhIElCTSBTQ1NJLTIgRmFzdC9XaWRlIGFkYXB0ZXIsIGl0IGJvb3RzIGluIHNvbWUgd2F5IGFuZCBoYW5ncy4KKyAgICAgQTogWWVzLCB0aGF0IGlzIHVuZGVyc3Rvb2QsIGFzIGZvciBzdXJlLCB5b3VyIFNDU0ktMiBGYXN0L1dpZGUgYWRhcHRlcgorICAgICAgICB3YXMgaW4gc3VjaCBhIGNhc2UgcmVjb2duaXplZCBhcyBpbnRlZ3JhdGVkIFNDU0ktYWRhcHRlciBvciBzb21ldGhpbmcgCisJZWxzZSwgYnV0IG5vdCBhcyB0aGUgY29ycmVjdCBhZGFwdGVyLiBBcyB0aGUgSS9PLXBvcnRzIGdldCBhc3NpZ25lZCAKKwl3cm9uZ2x5IGJ5IHRoYXQgcmVhc29uLCB0aGUgc3lzdGVtIHNob3VsZCBjcmFzaCBpbiBtb3N0IGNhc2VzLiBZb3UgCisJc2hvdWxkIHVwZ3JhZGUgdG8gdGhlIGxhdGVzdCByZWxlYXNlIG9mIHRoZSBTQ1NJLWRyaXZlci4gVGhlIAorCXJlY29tbWVuZGVkIHZlcnNpb24gaXMgMy4yIG9yIGxhdGVyLiBIZXJlLCB0aGUgRi9XIHN1cHBvcnQgaXMgaW4KKwlhIHN0YWJsZSBhbmQgcmVsaWFibGUgY29uZGl0aW9uLiBXaWRlLWFkZHJlc3NpbmcgaXMgaW4gYWRkaXRpb24gCisJc3VwcG9ydGVkLgorICAgICBROiBJIGdldCBhIE9vb3BzIG1lc3NhZ2UgYW5kIHNvbWV0aGluZyBsaWtlICJraWxsaW5nIGludGVycnVwdCIuCisgICAgIEE6IFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIG9ubHkgc2VuZHMgYSAKKyAgICAgICAgdGVybWluYXRpb24gc3RhdHVzIGJhY2ssIGlmIHNvbWUgZXJyb3IgYXBwZWFyZWQuIEluIGZvcm1lciByZWxlYXNlcworCW9mIHRoZSBkcml2ZXIsIGl0IHdhcyBub3QgY2hlY2tlZCwgaWYgdGhlIHRlcm1pbmF0aW9uIHN0YXR1cyBibG9jaworCWlzIE5VTEwuIEZyb20gdmVyc2lvbiAzLjIsIGl0IGlzIHRha2VuIGNhcmUgb2YgdGhpcy4KKyAgICAgUTogSSBoYXZlIGEgRi9XIGFkYXB0ZXIgYW5kIHRoZSBkcml2ZXIgc2VlcyBteSBpbnRlcm5hbCBTQ1NJLWRldmljZXMsCisgICAgICAgIGJ1dCBpZ25vcmVzIHRoZSBleHRlcm5hbCBvbmVzLgorICAgICBBOiBTZWxlY3QgY29tYmluZWQgYnVzbW9kZSBpbiB0aGUgSUJNIGNvbmZpZy1wcm9ncmFtIGFuZCBjaGVjayBmb3IgdGhhdAorICAgICAgICBubyBTQ1NJLWlkIG9uIHRoZSBleHRlcm5hbCBkZXZpY2VzIGFwcGVhcnMgb24gaW50ZXJuYWwgZGV2aWNlcy4KKyAgICAgICAgUmVib290IGFmdGVyd2FyZHMuIER1YWwgYnVzbW9kZSBpcyBzdXBwb3J0ZWQsIGJ1dCB3b3JrcyBvbmx5IGZvciB0aGUKKwlpbnRlcm5hbCBidXMsIHlldC4gRXh0ZXJuYWwgYnVzIGlzIHN0aWxsIGlnbm9yZWQuIFRha2UgY2FyZSBmb3IgeW91cgorCVNDU0ktaWRzLiBJZiBjb21iaW5lZCBidXMtbW9kZSBpcyBhY3RpdmF0ZWQsIG9uIHNvbWUgYWRhcHRlcnMsIAorCXRoZSB3aWRlLWFkZHJlc3NpbmcgaXMgbm90IHBvc3NpYmxlLCBzbyBkZXZpY2VzIHdpdGggaWRzIGJldHdlZW4gOCAKKwlhbmQgMTUgZ2V0IGlnbm9yZWQgYnkgdGhlIGRyaXZlciAmIGFkYXB0ZXIhCisgICAgIFE6IEkgaGF2ZSBhIDk1OTUgYW5kIEkgZ2V0IGEgTk1JIGR1cmluZyBoZWF2eSBTQ1NJIEkvTyBlLmcuIGR1cmluZyBmc2NrLgorICAgICAgICBBIENPTU1BTkQgRVJST1IgaXMgcmVwb3J0ZWQgYW5kIGNoYXJhY3RlcnMgb24gdGhlIHNjcmVlbiBhcmUgbWlzc2luZy4KKwlXYXJtIHJlYm9vdCBpcyBub3QgcG9zc2libGUuIFRoaW5ncyBsb29rIGxpa2UgcXVpdGUgd2VpcmVkLgorICAgICBBOiBDaGVjayB0aGUgcHJvY2Vzc29yIHR5cGUgb2YgeW91ciA5NTk1LiBJZiB5b3UgaGF2ZSBhbiA4MDQ4NiBvciA0ODZEWC0yCisgICAgICAgIHByb2Nlc3NvciBjb21wbGV4IG9uIHlvdXIgbWFpbmJvYXJkIGFuZCB5b3UgY29tcGlsZWQgYSBrZXJuZWwgdGhhdAorCXN1cHBvcnRzIDgwMzg2IHByb2Nlc3NvcnMsIGl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoZSBrZXJuZWwgY2Fubm90CisJa2VlcCB0cmFjayBvZiB0aGUgUFMvMiBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHN0b3BzIG9uIGFuIE5NSS4gSnVzdAorCWNvbXBpbGUgYSBrZXJuZWwgZm9yIHRoZSBjb3JyZWN0IHByb2Nlc3NvciB0eXBlIG9mIHlvdXIgUFMvMiBhbmQKKwlldmVyeXRoaW5nIHNob3VsZCBiZSBmaW5lLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIG9uZSBhc3N1bWVzLAorCXRoYXQgc29tZSA4MDQ4NiBzeXN0ZW0gc2hvdWxkIGJlIGRvd253YXJkIGNvbXBhdGlibGUgdG8gODAzODYKKwlzb2Z0d2FyZS4KKyAgICAgUTogU29tZSBjb21tYW5kcyBoYW5nIGFuZCBpbnRlcnJ1cHRzIGJsb2NrIHRoZSBtYWNoaW5lLiBBZnRlciBzb21lCisgICAgICAgIHRpbWVvdXQsIHRoZSBzeXNsb2cgcmVwb3J0cyB0aGF0IGl0IHRyaWVzIHRvIGNhbGwgYWJvcnQsIGJ1dCB0aGUKKwltYWNoaW5lIGlzIGZyb3plbi4KKyAgICAgQTogVGhpcyBjYW4gYmUgYSBidXN5IHdhaXQgYnVnIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBvZiBkcml2ZXIgCisgICAgICAgIHZlcnNpb24gMy4yLiBZb3Ugc2hvdWxkIGF0IGxlYXN0IHVwZ3JhZGUgdG8gMy4yYyBpZiB5b3UgdXNlIAorCWtlcm5lbCA8IDIuNC4wIGFuZCBkcml2ZXIgdmVyc2lvbiA0LjAgaWYgeW91IHVzZSBrZXJuZWwgMi40LjAgb3IgCisJbGF0ZXIgKGluY2x1ZGluZyBhbGwgdGVzdCByZWxlYXNlcykuCisgICAgIFE6IEkgaGF2ZSBhIFBTLzIgbW9kZWwgODAgYW5kIG1vcmUgdGhhbiAxNiBNQnl0ZXMgb2YgUkFNLiBUaGUgZHJpdmVyCisgICAgICAgIGNvbXBsZXRlbHkgcmVmdXNlcyB0byB3b3JrLCByZXBvcnRzIE5NSXMsIENPTU1BTkQgRVJST1JzIG9yIG90aGVyCisJYW1iaWd1b3VzIHN0dWZmLiBXaGVuIHJlZHVjaW5nIHRoZSBSQU0gc2l6ZSBkb3duIGJlbG93IDE2IE1CLCAKKwlldmVyeXRoaW5nIGlzIHJ1bm5pbmcgc21vb3RobHkuCisgICAgIEE6IE5vIHJlYWwgYW5zd2VyLCB5ZXQuIEluIGFueSBjYXNlLCBvbmUgc2hvdWxkIGZvcmNlIHRoZSBrZXJuZWwgdG8KKyAgICAgICAgcHJlc2VudCBTQ0JzIG9ubHkgYmVsb3cgdGhlIDE2IE1CeXRlcyBiYXJyaWVyLiBNYXliZSB0aGlzIHNvbHZlcyB0aGUKKwlwcm9ibGVtLiBOb3QgeWV0IHRyaWVkLCBidXQgZ3Vlc3NpbmcgdGhhdCBpdCBjb3VsZCB3b3JrLiBUbyBnZXQgdGhpcywKKwlzZXQgdW5jaGVja2VkX2lzYV9kbWEgYXJndW1lbnQgb2YgaWJtbWNhLmggZnJvbSAwIHRvIDEuCisKKyAgIDUuMyBCdWdyZXBvcnRzCisgICAtLS0tLS0tLS0tLS0tLQorICAgSWYgeW91IHJlYWxseSBmaW5kIGJ1Z3MgaW4gdGhlIHNvdXJjZWNvZGUgb3IgdGhlIGRyaXZlciB3aWxsIHN1Y2Nlc3NmdWxseQorICAgcmVmdXNlIHRvIHdvcmsgb24geW91ciBtYWNoaW5lLCB5b3Ugc2hvdWxkIHNlbmQgYSBidWcgcmVwb3J0IHRvIG1lLiBUaGUKKyAgIGJlc3QgZm9yIHRoaXMgaXMgdG8gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgb24gdGhlIFdXVy1wYWdlIGZvciB0aGlzCisgICBkcml2ZXIuIEZpbGwgb3V0IHRoZSBidWctcmVwb3J0IGZvcm0sIHBsYWNlZCBvbiB0aGUgV1dXLXBhZ2UgYW5kIHNoaXAgaXQsCisgICBzbyB0aGUgYnVncyBjYW4gYmUgdGFrZW4gaW50byBhY2NvdW50IHdpdGggbWF4aW11bSBlZmZvcnRzLiBCdXQsIHBsZWFzZQorICAgZG8gbm90IHNlbmQgYnVnIHJlcG9ydHMgYWJvdXQgdGhpcyBkcml2ZXIgdG8gTGludXMgVG9ydmFsZHMgb3IgTGVvbmFyZAorICAgWnVia29mZiwgYXMgTGludXMgaXMgYnVycmllZCBpbiBFLU1haWwgYW5kIExlb25hcmQgaXMgc3VwZXJ2aXNpbmcgYWxsCisgICBTQ1NJLWRyaXZlcnMgYW5kIHdvbid0IGhhdmUgdGhlIHRpbWUgbGVmdCB0byBsb29rIGluc2lkZSBldmVyeSBzaW5nbGUKKyAgIGRyaXZlciB0byBmaXggYSBidWcgYW5kIGVzcGVjaWFsbHkgRE8gTk9UIHNlbmQgbW9kaWZpZWQgY29kZSB0byBMaW51cworICAgVG9ydmFsZHMgb3IgQWxhbiBKLiBDb3ggd2hpY2ggaGFzIG5vdCBiZWVuIGNoZWNrZWQgaGVyZSEhISBUaGV5IGFyZSBib3RoCisgICBxdWl0ZSBidXJyaWVkIGluIEUtbWFpbCAoYXMgbWUsIHNvbWV0aW1lcywgdG9vKSBhbmQgb25lIHNob3VsZCBmaXJzdCBjaGVjaworICAgZm9yIHByb2JsZW1zIG9uIG15IGxvY2FsIHRlc3RzdGFuZC4gUmVjZW50bHksIEkgZ290IGEgbG90IG9mIAorICAgYnVncmVwb3J0cyBmb3IgZXJyb3JzIGluIHRoZSBpYm1tY2EuYyBjb2RlLCB3aGljaCBJIGNvdWxkIG5vdCBpbWFnaW5lLCBidXQKKyAgIGEgbG9vayBpbnNpZGUgc29tZSBMaW51eC1kaXN0cmlidXRpb24gc2hvd2VkIG1lIHF1aXRlIG9mdGVuIHNvbWUgbW9kaWZpZWQKKyAgIGNvZGUsIHdoaWNoIGRpZCBubyBsb25nZXIgd29yayBvbiBtb3N0IG90aGVyIG1hY2hpbmVzIHRoYW4gdGhlIG9uZSBvZiB0aGUKKyAgIG1vZGlmaWVyLiBPaywgc28gbm93IHRoYXQgdGhlcmUgaXMgbWFpbnRlbmFuY2Ugc2VydmljZSBhdmFpbGFibGUgZm9yIHRoaXMKKyAgIGRyaXZlciwgcGxlYXNlIHVzZSB0aGlzIGFkZHJlc3MgZmlyc3QgaW4gb3JkZXIgdG8ga2VlcCB0aGUgbGV2ZWwgb2YKKyAgIGNvbmZ1c2lvbiBsb3cuIFRoYW5rIHlvdSEKKyAgIAorICAgV2hlbiB5b3UgZ2V0IGEgU0NTSS1lcnJvciBtZXNzYWdlIHRoYXQgcGFuaWNzIHlvdXIgc3lzdGVtLCBhIGxpc3Qgb2YKKyAgIHJlZ2lzdGVyLWVudHJpZXMgb2YgdGhlIFNDU0ktc3Vic3lzdGVtIGlzIHNob3duIChmcm9tIFZlcnNpb24gMy4xZCkuIFdpdGggCisgICB0aGlzIGxpc3QsIGl0IGlzIHZlcnkgZWFzeSBmb3IgdGhlIG1haW50YWluZXIgdG8gbG9jYWxpemUgdGhlIHByb2JsZW0gaW4gCisgICB0aGUgZHJpdmVyIG9yIGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB1c2VyLiBQbGVhc2Ugd3JpdGUgZG93biBhbGwgdGhlIAorICAgdmFsdWVzIGZyb20gdGhpcyByZXBvcnQgYW5kIHNlbmQgdGhlbSB0byB0aGUgbWFpbnRhaW5lci4gVGhpcyB3b3VsZCByZWFsbHkgCisgICBoZWxwIGEgbG90IGFuZCBtYWtlcyBsaWZlIGVhc2llciBjb25jZXJuaW5nIG1pc3VuZGVyc3RhbmRpbmdzLgorICAgCisgICBVc2UgdGhlIGJ1Zy1yZXBvcnQgZm9ybSAoc2VlIDUuNCBmb3IgaXRzIGFkZHJlc3MpIHRvIHNlbmQgYWxsIHRoZSBidWctCisgICBzdHVmZiB0byB0aGUgbWFpbnRhaW5lciBvciB3cml0ZSBlLW1haWwgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIHRhYmxlLiAKKyAgIAorICAgNS40IFN1cHBvcnQgV1dXLXBhZ2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgYWRkcmVzcyBvZiB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIHN1cHBvcnRpbmcgV1dXLXBhZ2UgaXM6CisgICAKKyAgICAgICAgaHR0cDovL3d3dy51bmktbWFpbnouZGUvfmxhbmdtMDAwL2xpbnV4Lmh0bWwKKwkKKyAgIEhlcmUgeW91IGNhbiBmaW5kIGluZm8gYWJvdXQgdGhlIGJhY2tncm91bmQgb2YgdGhpcyBkcml2ZXIsIHBhdGNoZXMsCisgICB0cm91Ymxlc2hvb3Rpbmcgc3VwcG9ydCwgbmV3cyBhbmQgYSBidWdyZXBvcnQgZm9ybS4gUGxlYXNlIGNoZWNrIHRoYXQKKyAgIFdXVy1wYWdlIHJlZ3VsYXJseSBmb3IgbGF0ZXN0IGhpbnRzLiBJZiBldmVyIHRoaXMgVVJMIGNoYW5nZXMsIHBsZWFzZSAKKyAgIHJlZmVyIHRvIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGluIG9yZGVyIHRvIGdldCB0aGUgbGF0ZXN0IGFkZHJlc3MuCisgICAKKyAgIEZvciB0aGUgYnVncmVwb3J0LCBwbGVhc2UgZmlsbCBvdXQgdGhlIGZvcm11bGFyIG9uIHRoZSBjb3JyZXNwb25kaW5nCisgICBXV1ctcGFnZS4gUmVhZCB0aGUgZGVkaWNhdGVkIGluc3RydWN0aW9ucyBhbmQgd3JpdGUgYXMgbXVjaCBhcyB5b3UKKyAgIGtub3cgYWJvdXQgeW91ciBwcm9ibGVtLiBJZiB5b3UgZG8gbm90IGxpa2Ugc3VjaCBmb3JtdWxhcnMsIHBsZWFzZSBzZW5kCisgICBzb21lIGUtbWFpbCBkaXJlY3RseSwgYnV0IGF0IGxlYXN0IHdpdGggdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgcmVxdWlyZWQgYnkKKyAgIHRoZSBmb3JtdWxhci4KKyAgIAorICAgSWYgeW91IGhhdmUgZXh0ZW5zaXZlIGJ1Z3JlcG9ydHMsIGluY2x1ZGluZyBPb29wcyBtZXNzYWdlcyBhbmQgCisgICBzY3JlZW4tc2hvdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gc2VuZCBpdCBkaXJlY3RseSB0byB0aGUgYWRkcmVzcworICAgb2YgdGhlIG1haW50YWluZXIsIHRvby4gVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgbWFpbnRhaW5lciBpczoKKyAgIAorICAgICAgICAgICAgTWljaGFlbCBMYW5nIDxsYW5nYTJAa3BoLnVuaS1tYWluei5kZT4KKyAgIAorICAgNiBSZWZlcmVuY2VzCisgICAtLS0tLS0tLS0tLS0KKyAgIElCTSBDb3JwLiwgIlVwZGF0ZSBmb3IgdGhlIFBTLzIgSGFyZHdhcmUgSW50ZXJmYWNlIFRlY2huaWNhbCBSZWZlcmVuY2UsIAorICAgQ29tbW9uIEludGVyZmFjZXMiLCBBcm1vbmssIFNlcHRlbWJlciAxOTkxLCBQTiAwNEczMjgxLCAKKyAgIChhdmFpbGFibGUgaW4gdGhlIFUuUy4gZm9yICQyMS43NSBhdCAxLTgwMC1JQk0tUENUQiBvciBpbiBHZXJtYW55IGZvcgorICAgYXJvdW5kIDQwLC1ETSBhdCAiSGFsbG8gSUJNIikuCisgIAorICAgSUJNIENvcnAuLCAiUGVyc29uYWwgU3lzdGVtLzIgTWljcm8gQ2hhbm5lbCBTQ1NJCisgICBBZGFwdGVyIHdpdGggQ2FjaGUgVGVjaG5pY2FsIFJlZmVyZW5jZSIsIEFybW9uaywgTWFyY2ggMTk5MCwgUE4gNjhYMjM2NS4KKworICAgSUJNIENvcnAuLCAiUGVyc29uYWwgU3lzdGVtLzIgTWljcm8gQ2hhbm5lbCBTQ1NJCisgICBBZGFwdGVyIFRlY2huaWNhbCBSZWZlcmVuY2UiLCBBcm1vbmssIE1hcmNoIDE5OTAsIFBOIDY4WDIzOTcuCisKKyAgIElCTSBDb3JwLiwgIlNDU0ktMiBGYXN0L1dpZGUgQWRhcHRlci9BIFRlY2huaWNhbCBSZWZlcmVuY2UgLSBEdWFsIEJ1cyIsCisgICBBcm1vbmssIE1hcmNoIDE5OTQsIFBOIDgzRzc1NDUuCisgCisgICBGcmllZGhlbG0gU2NobWlkdCwgIlNDU0ktQnVzIHVuZCBJREUtU2Nobml0dHN0ZWxsZSAtIE1vZGVybmUgUGVyaXBoZXJpZS0KKyAgIFNjaG5pdHRzdGVsbGVuOiBIYXJkd2FyZSwgUHJvdG9rb2xsYmVzY2hyZWlidW5nIHVuZCBBbndlbmR1bmciLCAyLiBBdWZsLgorICAgQWRkaXNvbiBXZXNsZXksIDE5OTYuCisgICAKKyAgIE1pY2hhZWwgSy4gSm9obnNvbiwgIlRoZSBMaW51eCBLZXJuZWwgSGFja2VycycgR3VpZGUiLCBWZXJzaW9uIDAuNiwgQ2hhcGVsCisgICBIaWxsIC0gTm9ydGggQ2Fyb2xpbmEsIDE5OTUKKyAgIAorICAgQW5kcmVhcyBLYWlzZXIsICJTQ1NJIFRBUEUgQkFDS1VQIGZvciBPUy8yIDIuMCIsIFZlcnNpb24gMi4xMiwgU3R1dHRnYXJ0CisgICAxOTkzCisgICAKKyAgIEhlbG11dCBSb21wZWwsICJJQk0gQ29tcHV0ZXJ3ZWx0IEdVSURFIiwgV2hhdCBpcyB3aGF0IGJlaSBJQk0uLCBTeXN0ZW1lICoKKyAgIFByb2dyYW1tZSAqIEJlZ3JpZmZlLCBJV1QtVmVybGFnIEdtYkggLSBNdWVuY2hlbiwgMTk4OAorICAgCisgICA3IENyZWRpdHMgdG8KKyAgIC0tLS0tLS0tLS0tLQorICAgNy4xIFBlb3BsZQorICAgLS0tLS0tLS0tLQorICAgS2xhdXMgR3JpbW0KKyAgICAgICAgICAgICAgICB3aG8gYWxyZWFkeSBhIGxvbmcgdGltZSBhZ28gZ2F2ZSBtZSB0aGUgb2xkIGNvZGUgZnJvbSB0aGUKKwkJU0NTSS1kcml2ZXIgaW4gb3JkZXIgdG8gZ2V0IGl0IHJ1bm5pbmcgZm9yIHNvbWUgb2xkIG1hY2hpbmUKKwkJaW4gb3VyIGluc3RpdHV0ZS4KKyAgIE1hcnRpbiBLb2xpbmVrCisgICAgICAgICAgICAgICAgd2hvIHdyb3RlIHRoZSBmaXJzdCByZWxlYXNlIG9mIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gZHJpdmVyLgorICAgQ2hyaXMgQmVhdXJlZ2FyZAorICAgICAgICAgICAgICAgIHdobyBmb3IgYSBsb25nIHRpbWUgbWFpbnRhaW5lZCBNQ0EtTGludXggYW5kIHRoZSBTQ1NJLWRyaXZlcgorCQlpbiB0aGUgYmVnaW5uaW5nLiBDaHJpcywgd2hlcmV2ZXIgeW91IGFyZTogQ2hlZXJzIHRvIHlvdSEKKyAgIEtsYXVzIEt1ZGllbGthCisgICAgICAgICAgICAgICAgd2l0aCB3aG9tIGluIHRoZSAyLjEueCB0aW1lcywgSSBoYWQgYSBxdWl0ZSBmcnVpdGZ1bAorICAgICAgICAgICAgICAgIGNvb3BlcmF0aW9uIHRvIGdldCB0aGUgZHJpdmVyIHJ1bm5pbmcgYXMgYSBtb2R1bGUgYW5kIHRvIGdldAorCQlpdCBydW5uaW5nIHdpdGggbXVsdGlwbGUgU0NTSS1hZGFwdGVycy4KKyAgIERhdmlkIFdlaW5laGFsbAorICAgICAgICAgICAgICAgIGZvciBoaXMgZXhjZWxsZW50IG1haW50ZW5hbmNlIG9mIHRoZSBNQ0Etc3R1ZmYgYW5kIHRoZSBxdWl0ZSAKKwkJZGV0YWlsZWQgYnVnIHJlcG9ydHMgYW5kIGlkZWFzIGZvciB0aGlzIGRyaXZlciAoYW5kIGhpcyAKKwkJcGF0aWVuY2UgOy0pKS4KKyAgIEFsYW4gSi4gQ294ICAKKyAgICAgICAgICAgICAgICBmb3IgaGlzIGJ1Z3JlcG9ydHMgYW5kIGhpcyBib2xkIGFjdGl2aXRpZXMgaW4gY3Jvc3MtY2hlY2tpbmcKKwkJdGhlIGRyaXZlci1jb2RlIHdpdGggaGlzIHRlc3RzdGFuZC4KKwkJCisgICA3LjIgU3BvbnNvcnMgJiBTdXBwb3J0ZXJzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAiSGFsbG8gSUJNIiwKKyAgIElCTS1EZXV0c2NobGFuZCBHbWJICisgICAgICAgICAgICAgICAgdGhlIHNlcnZpY2Ugb2YgSUJNLURldXRzY2hsYW5kIGZvciBjdXN0b21lcnMuIFRoZWlyIEUtTWFpbAorCQlzZXJ2aWNlIGlzIHVuYmVhdGFibGUuIFdoYXRldmVyIG9sZCBzdHVmZiBJIGFza2VkIGZvciwgSSAKKwkJYWx3YXlzIGdvdCBzb21lIGhlbHBmdWwgYW5zd2Vycy4KKyAgIEthcmwtT3R0byBSZWltZXJzLAorICAgSUJNIEtsdWIgLSBTcGFydGUgSUJNIEdlc2NoaWNodGUsIFNpbmRlbGZpbmdlbgorICAgICAgICAgICAgICAgIGZvciBzZW5kaW5nIG1lIGEgY29weSBvZiB0aGUgdy9DYWNoZSBtYW51YWwgZnJvbSB0aGUgCisJCUlCTS1EZXV0c2NobGFuZCBhcmNoaXZlcy4KKyAgIEhhcmFsZCBTdGFpZ2VyCisgICAgICAgICAgICAgICAgZm9yIGhpcyBleHRlbnNpdmUgaGFyZHdhcmUgZG9uYXRpb25zIHdoaWNoIGFsbG93cyBtZSB0b2RheQorCQlzdGlsbCB0byB0ZXN0IHRoZSBkcml2ZXIgaW4gdmFyaW91cyBjb25zdGVsbGF0aW9ucy4KKyAgIEVyaWNoIEZyaXRzY2hlcgorICAgICAgICAgICAgICAgIGZvciBoaXMgdmVyeSBraW5kIHNwb25zb3JpbmcuCisgICBMb3VpcyBPaGxhbmQsCisgICBDaGFybGVzIExhc2l0dGVyCisgICAgICAgICAgICAgICAgZm9yIHN1cHBvcnQgYnkgc2hpcHBpbmcgbWUgYW4gSUJNIFNDU0ktMiBGYXN0L1dpZGUgbWFudWFsLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCB0aGUgY29udHJpYnV0aW9uIG9mIHZhcmlvdXMgaGFyZHdhcmUgaXMgcXVpdGUgCisgICAgICAgICAgICAgICAgZGVjZXNzaXZlIGFuZCB3aWxsIG1ha2UgaXQgcG9zc2libGUgdG8gYWRkIEZXU1IgKFJBSUQpCisgICAgICAgICAgICAgICAgYWRhcHRlciBzdXBwb3J0IHRvIHRoZSBkcml2ZXIgaW4gdGhlIG5lYXIgZnV0dXJlISBTbywKKyAgICAgICAgICAgICAgICBjb21wbGFpbnRzIGFib3V0IG5vIFJBSUQgc3VwcG9ydCB3b24ndCByZW1haW4gZm9yZXZlci4KKyAgICAgICAgICAgICAgICBZZXMsIGZvbGtzLCB0aGF0IGlzIG5vIGpva2UsIFJBSUQgc3VwcG9ydCBpcyBnb2luZyB0byByaXNlIQorICAgRXJpayBXZWJlcgorICAgICAgICAgICAgICAgIGZvciB0aGUgZ3JlYXQgZGVhbCB3ZSBtYWRlIGFib3V0IGEgbW9kZWwgOTU5NSBhbmQgdGhlIG5pY2UKKyAgICAgICAgICAgICAgICBzdXJyb3VuZGluZyBlcXVpcG1lbnQgYW5kIHRoZSBjb29sIHRyaXAgdG8gTWFubmhlaW0KKyAgICAgICAgICAgICAgICBzZWNvbmQtaGFuZCBjb21wdXRlciBtYXJrZXQuIEluIGFkZGl0aW9uLCBJIHdvdWxkIGxpa2UKKwkJdG8gdGhhbmsgaGltIGZvciBoaXMgZXhoYXVzdGl2ZSBTQ1NJLWRyaXZlciB0ZXN0aW5nIG9uIGhpcyAKKwkJOTVlciBQUy8yIHBhcmsuCisgICBBbnRob255IEhvZ2JpbgorICAgICAgICAgICAgICAgIGZvciBoaXMgZGlyZWN0IHNoaXBtZW50IG9mIGEgU0NTSSBGL1cgYWRhcHRlciwgd2hpY2ggYWxsb3dlZAorICAgICAgICAgICAgICAgIG1lIGltbWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCBzdGFnZSB0byB0cnkgaXQgb24gbW9kZWwgODU1NworICAgICAgICAgICAgICAgIHRvZ2V0aGVyIHdpdGggb25ib2FyZCBTQ1NJIGFkYXB0ZXIgYW5kIHNvbWUgU0NTSSB3L0NhY2hlLgorICAgQW5kcmVhcyBIb3R6CisgICAgICAgICAgICAgICAgZm9yIGhpcyBzdXBwb3J0IGJ5IG1lbW9yeSBhbmQgYW4gSUJNIFNDU0ktYWRhcHRlci4gQ29sbGVjdGluZworICAgICAgICAgICAgICAgIGFsbCB0aGlzIHRvZ2V0aGVyIG5vdyBhbGxvd3MgbWUgdG8gdHJ5IHJlYWxseSB0aGluZ3Mgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBkcml2ZXIgYXQgbWF4aW11bSBsb2FkIGFuZCB2YXJpZXR5IG9uIHZhcmlvdXMgbW9kZWxzIGluCisgICAgICAgICAgICAgICAgYSB2ZXJ5IHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5LgorICAgUGV0ZXIgSmVubmV3ZWluCisgICAgICAgICAgICAgICAgZm9yIGhpcyBtb2RlbCAzMCwgd2hpY2ggc2VydmVzIG1lIGFzIHBhcnQgb2YgbXkgdGVzdHN0YW5kCisJCWFuZCBoaXMgY29vbCByZW1hcmsgYWJvdXQgaG93IHlvdSBtYWtlIGFuIG9yZGluYXJ5IGRpc2tldHRlCisJCWRyaXZlIHdvcmtpbmcgYW5kIGhvdyB0byBjb25uZWN0IGl0IHRvIGFuIElCTS1kaXNrZXR0ZSBwb3J0LgorICAgSm9oYW5uZXMgR3V0ZW5iZXJnLVVuaXZlcnNpdGFldCwgTWFpbnogJgorICAgSW5zdGl0dXQgZnVlciBLZXJucGh5c2lrLCBNYWlueiBNaWNyb3Ryb24gKE1BTUkpCisgICAgICAgICAgICAgICAgZm9yIHRoZSBvZmZlcmVkIHNwYWNlLCB0aGUgbGluaywgcGxhY2VkIG9uIHRoZSBjZW50cmFsCisgICAgICAgICAgICAgICAgaG9tZXBhZ2UgYW5kIHRoZSBzcGFjZSB0byBzdG9yZSBhbmQgb2ZmZXIgdGhlIGRyaXZlciBhbmQgCisJCXJlbGF0ZWQgbWF0ZXJpYWwgYW5kIHRoZSBmcmVlIHdvcmtpbmcgdGltZXMsIHdoaWNoIGFsbG93CisgICAgICAgICAgICAgICAgbWUgdG8gYW5zd2VyIGFsbCB5b3VyIGUtbWFpbC4KKyAgICAgICAgICAgICAgICAgICAKKyAgIDggVHJhZGVtYXJrcworICAgLS0tLS0tLS0tLS0tCisgICBJQk0sIFBTLzIsIE9TLzIsIE1pY3JvY2hhbm5lbCBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIEludGVybmF0aW9uYWwgCisgICBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbgorICAgCisgICBNUy1ET1MgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKyAgIAorICAgTWljcm93YXJlLCBPUy05IGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTWljcm93YXJlIFN5c3RlbXMKKyAgIAorICAgOSBEaXNjbGFpbWVyCisgICAtLS0tLS0tLS0tLS0KKyAgIEJlc2lkZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRoZSBkZXBlbmRlbnQgZGlzY2xhaW1lcnMgYW5kIGRpc2NsYWltZXJzCisgICBjb25jZXJuaW5nIHRoZSBMaW51eC1rZXJuZWwgaW4gc3BlY2lhbCwgdGhpcyBTQ1NJLWRyaXZlciBjb21lcyB3aXRob3V0IGFueQorICAgd2FycmFudHkuIEl0cyBmdW5jdGlvbmFsaXR5IGlzIHRlc3RlZCBhcyBnb29kIGFzIHBvc3NpYmxlIG9uIGNlcnRhaW4gCisgICBtYWNoaW5lcyBhbmQgY29tYmluYXRpb25zIG9mIGNvbXB1dGVyIGhhcmR3YXJlLCB3aGljaCBkb2VzIG5vdCBleGNsdWRlLAorICAgdGhhdCBkYXRhbG9zcyBvciBzZXZlcmUgZGFtYWdlIG9mIGhhcmR3YXJlIGlzIHBvc3NpYmxlIHdoaWxlIHVzaW5nIHRoaXMKKyAgIHBhcnQgb2Ygc29mdHdhcmUgb24gc29tZSBhcmJpdHJhcnkgY29tcHV0ZXIgaGFyZHdhcmUgb3IgaW4gY29tYmluYXRpb24gCisgICB3aXRoIG90aGVyIHNvZnR3YXJlIHBhY2thZ2VzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gbWFrZSBiYWNrdXAKKyAgIGNvcGllcyBvZiB5b3VyIGRhdGEgYmVmb3JlIHVzaW5nIHRoaXMgc29mdHdhcmUuIEZ1cnRoZXJtb3JlLCBwZXJzb25hbAorICAgaW5qdXJpZXMgYnkgaGFyZHdhcmUgZGVmZWN0cywgdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgdGhpcyBTQ1NJLWRyaXZlciBhcmUKKyAgIG5vdCBleGNsdWRlZCBhbmQgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGhhbmRsZSB0aGlzIGRyaXZlciB3aXRoIGEKKyAgIG1heGltdW0gb2YgY2FyZWZ1bG5lc3MuCisgICAKKyAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlLCBwcm9kdWNlZCBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgICBDb3Jwb3JhdGlvbiAoSUJNKS4KKyAgIAorLS0tLS0tCitNaWNoYWVsIExhbmcgCisobGFuZ2EyQGtwaC51bmktbWFpbnouZGUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pbjIwMDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dApAQCAtMCwwICsxLDIwMiBAQAorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMzIC0gMjYgQXVnIDk4CisKKyAgIEludGVycnVwdCBtYW5hZ2VtZW50IGluIHRoaXMgZHJpdmVyIGhhcyBiZWNvbWUsIG92ZXIKKyAgIHRpbWUsIGluY3JlYXNpbmdseSBvZGQgYW5kIGRpZmZpY3VsdCB0byBleHBsYWluIC0gdGhpcworICAgaGFzIGJlZW4gbW9zdGx5IGR1ZSB0byBteSBvd24gbWVudGFsIGluYWRlcXVhY2llcy4gSW4KKyAgIHJlY2VudCBrZXJuZWxzLCBpdCBoYXMgZmFpbGVkIHRvIGZ1bmN0aW9uIGF0IGFsbCB3aGVuCisgICBjb21waWxlZCBmb3IgU01QLiBJJ3ZlIGZpeGVkIHRoYXQgcHJvYmxlbSwgYW5kIGFmdGVyCisgICB0YWtpbmcgYSBmcmVzaCBsb29rIGF0IGludGVycnVwdHMgaW4gZ2VuZXJhbCwgZ3JlYXRseQorICAgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSB0aGV5J3JlIGZpZGRsZWQKKyAgIHdpdGguIERvbmUgc29tZSBoZWF2eSB0ZXN0aW5nIGFuZCBpdCBsb29rcyB2ZXJ5IGdvb2QuCisgICBUaGUgZHJpdmVyIG5vdyBtYWtlcyB1c2Ugb2YgdGhlIF9faW5pdGZ1bmMoKSBhbmQKKyAgIF9faW5pdGRhdGEgbWFjcm9zIHRvIHNhdmUgYWJvdXQgNGsgb2Yga2VybmVsIG1lbW9yeS4KKyAgIE9uY2UgYWdhaW4sIHRoZSBzYW1lIGNvZGUgd29ya3MgZm9yIGJvdGggMi4wLnh4IGFuZAorICAgMi4xLnh4IGtlcm5lbHMuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMzIgLSAyOCBNYXIgOTgKKworICAgUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIGxlZ2FsIElOMjAwMCBoYXJkd2FyZSB2ZXJzaW9uczoKKyAgIEl0IGFwcGVhcnMgdGhhdCB0aGUgZHJpdmVyIHdvcmtzIGZpbmUgd2l0aCBzZXJpYWwKKyAgIEVQUk9NcyAodGhlIDgtcGluIGNoaXAgdGhhdCBkZWZpbmVzIGhhcmR3YXJlIHJldikgYXMKKyAgIG9sZCBhcyAyLjEsIHNvIHdlJ2xsIGFzc3VtZSB0aGF0IGFsbCBjYXJkcyBhcmUgT0suCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMzEgLSA2IEp1bCA5NworCisgICBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBpbmNvcnJlY3QgU0NTSSBzdGF0dXMgYnl0ZXMgdG8gYmUKKyAgIHJldHVybmVkIGZyb20gY29tbWFuZHMgc2VudCB0byBMVU4ncyBncmVhdGVyIHRoYW4gMC4gVGhpcworICAgbWVhbnMgdGhhdCBDRFJPTSBjaGFuZ2VycyB3b3JrIG5vdyEgRml4ZWQgYSBidWcgaW4gdGhlCisgICBoYW5kbGluZyBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHdoZW4gbG9hZGVkIGFzIGEgbW9kdWxlLgorICAgQWxzbyBwdXQgYWxsIHRoZSBoZWFkZXIgZGF0YSBpbiBpbjIwMDAuaCB3aGVyZSBpdCBiZWxvbmdzLgorICAgVGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGlzIGRyaXZlciBpbgorICAgdGhlIDIuMS54eCBzb3VyY2UgdHJlZSBhbmQgdGhlIDIuMC54eCB0cmVlLCBhcyBvZiAyLjAuMzEKKyAgIGFuZCAyLjEuNDUgKG9yIGlzIGl0IC40Nj8pIC0gdGhpcyBtYWtlcyB0aGluZ3MgbXVjaCBlYXNpZXIKKyAgIGZvciBtZS4uLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMwIC0gMTQgT2N0IDk2CisKKyAgIEZpeGVkIGEgYnVnIGluIHRoZSBjb2RlIHRoYXQgc2V0cyB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uCisgICBiaXQgKERFU1RJRF9EUEQgaW4gdGhlIFdEX0RFU1RJTkFUSU9OX0lEIHJlZ2lzdGVyKS4gVGhlcmUKKyAgIGFyZSBxdWl0ZSBhIGZldyBTQ1NJIGNvbW1hbmRzIHRoYXQgZG8gYSB3cml0ZS10by1kZXZpY2U7CisgICBub3cgd2UgZGVhbCB3aXRoIGFsbCBvZiB0aGVtIGNvcnJlY3RseS4gVGhhbmtzIHRvIEpvZXJnCisgICBEb3JjaGFpbiBmb3IgY2F0Y2hpbmcgdGhpcyBvbmUuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjkgLSAyNCBTZXAgOTYKKworICAgVGhlIG1lbW9yeS1tYXBwZWQgaGFyZHdhcmUgb24gdGhlIGNhcmQgaXMgbm93IGFjY2Vzc2VkIHZpYQorICAgdGhlICdyZWFkYigpJyBhbmQgJ3JlYWRsKCknIG1hY3JvcyAtIHJlcXVpcmVkIGJ5IHRoZSBuZXcKKyAgIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBpbiB0aGUgMi4xLngga2VybmVsIHNlcmllcy4KKyAgIEFzIHN1Z2dlc3RlZCBieSBBbmRyaWVzIEJyb3V3ZXIsICdiaW9zX3BhcmFtKCknIG5vIGxvbmdlcgorICAgZm9yY2VzIGFuIGFydGlmaWNpYWwgMTAyMyB0cmFjayBsaW1pdCBvbiBkcml2ZXMuIEFsc28KKyAgIHJlbW92ZWQgc29tZSBrbHVkZ2UtY29kZSBsZWZ0IG92ZXIgZnJvbSBzdHJ1Z2dsZXMgd2l0aAorICAgb2xkZXIgKGJ1Z2d5KSBjb21waWxlcnMuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjggLSAwNyBNYXkgOTYKKworICAgVGlnaHRlbmVkIHVwIHRoZSAiaW50ZXJydXB0cyBlbmFibGVkL2Rpc2FibGVkIiBkaXNjaXBsaW5lCisgICBpbiAnaW4yMDAwX3F1ZXVlY29tbWFuZCgpJyBhbmQgbWF5YmUgMSBvciAyIG90aGVyIHBsYWNlcy4KKyAgIEkgX3RoaW5rXyBpdCBtYXkgaGF2ZSBiZWVuIGEgbGl0dGxlIHRvbyBsYXgsIGNhdXNpbmcgYW4KKyAgIG9jY2FzaW9uYWwgY3Jhc2ggZHVyaW5nIGZ1bGwgbW9vbi4gQSBmdWxseSBmdW5jdGlvbmFsCisgICAvcHJvYyBpbnRlcmZhY2UgaXMgbm93IGluIHBsYWNlIC0gaWYgeW91IHdhbnQgdG8gcGxheQorICAgd2l0aCBpdCwgc3RhcnQgYnkgZG9pbmcgJ2NhdCAvcHJvYy9zY3NpL2luMjAwMC8wJy4gWW91CisgICBjYW4gYWxzbyB1c2UgaXQgdG8gY2hhbmdlIGEgZmV3IHJ1bi10aW1lIHBhcmFtZXRlcnMgb24KKyAgIHRoZSBmbHksIGJ1dCBpdCdzIG1vc3RseSBmb3IgZGVidWdnaW5nLiBUaGUgY3VyaW91cworICAgc2hvdWxkIHRha2UgYSBnb29kIGxvb2sgYXQgJ2luMjAwMF9wcm9jX2luZm8oKScgaW4gdGhlCisgICBpbjIwMDAuYyBmaWxlIHRvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQncyBhbGwKKyAgIGFib3V0OyBJIGZpZ3VyZSB0aGF0IHBlb3BsZSB3aG8gYXJlIHJlYWxseSBpbnRvIGl0IHdpbGwKKyAgIHdhbnQgdG8gYWRkIGZlYXR1cmVzIHN1aXRlZCB0byB0aGVpciBvd24gbmVlZHMuLi4KKyAgIEFsc28sIHN5bmMgaXMgbm93IERJU0FCTEVEIGJ5IGRlZmF1bHQuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjcgLSAxMCBBcHIgOTYKKworICAgRml4ZWQgYSB3ZWxsLWhpZGRlbiBidWcgaW4gdGhlIGFkYXB0aXZlLWRpc2Nvbm5lY3QgY29kZQorICAgdGhhdCB3b3VsZCBzaG93IHVwIGV2ZXJ5IG5vdyBhbmQgdGhlbiBkdXJpbmcgZXh0cmVtZQorICAgaGVhdnkgbG9hZHMgaW52b2x2aW5nIDIgb3IgbW9yZSBzaW11bHRhbmVvdXNseSBhY3RpdmUKKyAgIGRldmljZXMuIFRoYW5rcyB0byBKb2UgTWFjayBmb3Iga2VlcGluZyBteSBub3NlIHRvIHRoZQorICAgZ3JpbmRzdG9uZSBvbiB0aGlzIG9uZS4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNiAtIDA3IE1hciA5NgorCisgICAxLjI1IGhhZCBhIG5hc3R5IGJ1ZyB0aGF0IGJpdCBwZW9wbGUgd2l0aCBzd2FwIHBhcnRpdGlvbnMKKyAgIGFuZCB0YXBlIGRyaXZlcy4gQWxzbywgaW4gbXkgYXR0ZW1wdCB0byBndWVzcyBteSB3YXkKKyAgIHRocm91Z2ggSW50ZWwgYXNzZW1ibHkgbGFuZ3VhZ2UsIEkgbWFkZSBhbiBlcnJvciBpbiB0aGUKKyAgIGlubGluZSBjb2RlIGZvciBJTyB3cml0ZXMuIE1hZGUgYSBmZXcgb3RoZXIgY2hhbmdlcyBhbmQKKyAgIHJlcGFpcnMgLSB0aGlzIHZlcnNpb24gKGZpbmdlcnMgY3Jvc3NlZCkgc2hvdWxkIHdvcmsgd2VsbC4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNSAtIDA1IE1hciA5NgorCisgICBLZXJuZWwgMS4zLjcwIGludGVycnVwdCBtb2RzIGFkZGVkOyBvbGQga2VybmVscyBzdGlsbCBPSy4KKyAgIEJpZyBoZWxwIGZyb20gQmlsbCBFYXJuZXN0IGFuZCBEYXZpZCBXaWxsbW9yZSBvbiBzcGVlZAorICAgdGVzdGluZyBhbmQgb3B0aW1pemluZzogSSB0aGluayB0aGVyZSdzIGEgcmVhbCBpbXByb3ZlbWVudAorICAgaW4gdGhpcyBhcmVhLgorICAgTmV3ISBVc2VyLWZyaWVuZGx5IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExJTE8gYW5kCisgICBtb2R1bGUgbG9hZGluZyAtIHRoZSBvbGQgbWV0aG9kIGlzIGdvbmUsIHNvIHlvdSdsbCBuZWVkCisgICB0byByZWFkIHRoZSBjb21tZW50cyBmb3IgJ3NldHVwX3N0cmluZ3MnIG5lYXIgdGhlIHRvcAorICAgb2YgaW4yMDAwLmMuIEZvciBwZW9wbGUgd2l0aCBDRFJPTSdzIG9yIG90aGVyIGRldmljZXMKKyAgIHRoYXQgaGF2ZSBhIHRvdWdoIHRpbWUgd2l0aCBzeW5jIG5lZ290aWF0aW9uLCB5b3UgY2FuCisgICBub3cgc2VsZWN0aXZlbHkgZGlzYWJsZSBzeW5jIG9uIGluZGl2aWR1YWwgZGV2aWNlcyAtCisgICBzZWFyY2ggZm9yIHRoZSAnbm9zeW5jJyBrZXl3b3JkIGluIHRoZSBjb21tYW5kLWxpbmUKKyAgIGNvbW1lbnRzLiBTb21lIG9mIHlvdSBkaXNhYmxlIHRoZSBCSU9TIG9uIHRoZSBjYXJkLCB3aGljaAorICAgY2F1c2VkIHRoZSBhdXRvLWRldGVjdCBmdW5jdGlvbiB0byBmYWlsOyB0aGVyZSBpcyBub3cgYQorICAgY29tbWFuZC1saW5lIG9wdGlvbiB0byBmb3JjZSBkZXRlY3Rpb24gb2YgYSBST00tbGVzcyBjYXJkLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI0YSAtIDI0IEZlYiA5NgorCisgICBUaGVyZSB3YXMgYSBidWcgaW4gdGhlIHN5bmNocm9ub3VzIHRyYW5zZmVyIGNvZGUuIE9ubHkKKyAgIGEgZmV3IHBlb3BsZSBkb3dubG9hZGVkIGJlZm9yZSBJIGNhdWdodCBpdCAtIGNvdWxkIGhhdmUKKyAgIGJlZW4gd29yc2UuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjQgLSAyMyBGZWIgOTYKKworICAgTG90cyBvZiBnb29kIGNoYW5nZXMuIEFkdmljZSBmcm9tIEJpbGwgRWFybmVzdCByZXN1bHRlZAorICAgaW4gbXVjaCBiZXR0ZXIgZGV0ZWN0aW9uIG9mIGNhcmRzLCBtb3JlIGVmZmljaWVudCB1c2FnZQorICAgb2YgdGhlIGZpZm8sIGFuZCAoaG9wZWZ1bGx5KSBmYXN0ZXIgZGF0YSB0cmFuc2ZlcnMuIFRoZQorICAganVyeSBpcyBzdGlsbCBvdXQgb24gc3BlZWQgLSBJIGhvcGUgaXQncyBpbXByb3ZlZCBzb21lLgorICAgT25lIG5pZnR5IG5ldyBmZWF0dXJlIGlzIGEgY29vbCB3YXkgb2YgZG9pbmcgZGlzY29ubmVjdC8KKyAgIHJlc2VsZWN0LiBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIHdoYXQgSSdtIGNhbGxpbmcKKyAgICdhZGFwdGl2ZSBkaXNjb25uZWN0JyAtIG1lYW5pbmcgdGhhdCBlYWNoIGNvbW1hbmQgaXMKKyAgIGV2YWx1YXRlZCBpbmRpdmlkdWFsbHkgYXMgdG8gd2hldGhlciBvciBub3QgaXQgc2hvdWxkIGJlCisgICBydW4gd2l0aCB0aGUgb3B0aW9uIHRvIGRpc2Nvbm5lY3QvcmVzZWxlY3QgKGlmIHRoZSBkZXZpY2UKKyAgIGNob29zZXMpLCBvciBhcyBhICJTQ1NJLWJ1cy1ob2ciLiBXaGVuIHNldmVyYWwgZGV2aWNlcworICAgYXJlIG9wZXJhdGluZyBzaW11bHRhbmVvdXNseSwgZGlzY29ubmVjdHMgYXJlIHVzdWFsbHkgYW4KKyAgIGFkdmFudGFnZS4gSW4gYSBzaW5nbGUgZGV2aWNlIHN5c3RlbSwgb3IgaWYgb25seSAxIGRldmljZQorICAgaXMgYmVpbmcgYWNjZXNzZWQsIHRyYW5zZmVycyB1c3VhbGx5IGdvIGZhc3RlciBpZiBkaXNjb25uZWN0cworICAgYXJlIG5vdCBhbGxvd2VkLgorCisKKworVGhlIGRlZmF1bHQgYXJndW1lbnRzICh5b3UgZ2V0IHRoZXNlIHdoZW4geW91IGRvbid0IGdpdmUgYW4gJ2luMjAwMCcKK2NvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgeW91IGdpdmUgYSBibGFuayBhcmd1bWVudCkgd2lsbCBjYXVzZQordGhlIGRyaXZlciB0byBkbyBhZGFwdGl2ZSBkaXNjb25uZWN0LCBzeW5jaHJvbm91cyB0cmFuc2ZlcnMsIGFuZCBhCittaW5pbXVtIG9mIGRlYnVnIG1lc3NhZ2VzLiBJZiB5b3Ugd2FudCB0byBmb29sIHdpdGggdGhlIG9wdGlvbnMsCitzZWFyY2ggZm9yICdzZXR1cF9zdHJpbmdzJyBuZWFyIHRoZSB0b3Agb2YgdGhlIGluMjAwMC5jIGZpbGUgYW5kCitjaGVjayB0aGUgJ2hvc3RkYXRhLT5hcmdzJyBzZWN0aW9uIGluIGluMjAwMC5oIC0gYnV0IGJlIHdhcm5lZCEgTm90CitldmVyeXRoaW5nIGlzIHdvcmtpbmcgeWV0IChzb21lIHRoaW5ncyB3aWxsIG5ldmVyIHdvcmssIHByb2JhYmx5KS4KK0kgYmVsaWV2ZSB0aGF0IGRpc2FibGluZyBkaXNjb25uZWN0cyAoRElTX05FVkVSKSB3aWxsIGFsbG93IHlvdQordG8gY2hvb3NlIGEgTEVWRUwyIHZhbHVlIGhpZ2hlciB0aGFuICdMMl9CQVNJQycsIGJ1dCBJIGhhdmVuJ3QKK3NwZW50IGEgbG90IG9mIHRpbWUgdGVzdGluZyB0aGlzLiBZb3UgbWlnaHQgdHJ5ICdFTkFCTEVfQ0xVU1RFUklORycKK3RvIHNlZSB3aGF0IGhhcHBlbnM6IG15IHRlc3RzIHNob3dlZCBsaXR0bGUgZGlmZmVyZW5jZSBlaXRoZXIgd2F5LgorVGhlcmUncyBhbHNvIGEgZGVmaW5lIGNhbGxlZCAnREVGQVVMVF9TWF9QRVInOyB0aGlzIHNldHMgdGhlIGRhdGEKK3RyYW5zZmVyIHNwZWVkIGZvciB0aGUgYXN5bmNocm9ub3VzIG1vZGUuIEkndmUgcHV0IGl0IGF0IDUwMCBucworZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBjYXJkIGNvdWxkIGhhbmRsZSBzZXR0aW5ncyBvZiAzNzYgb3IKKzI1MiwgYmVjYXVzZSBoaWdoZXIgc3BlZWRzIG1heSBiZSBhIHByb2JsZW0gd2l0aCBwb29yIHF1YWxpdHkKK2NhYmxlcyBvciBpbXByb3BlciB0ZXJtaW5hdGlvbjsgNTAwIG5zIGlzIGEgY29tcHJvbWlzZS4gWW91IGNhbgorY2hvb3NlIHlvdXIgb3duIGRlZmF1bHQgdGhyb3VnaCB0aGUgY29tbWFuZC1saW5lIHdpdGggdGhlCisncGVyaW9kJyBrZXl3b3JkLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKioqKioqKioqKiogIERJUCBzd2l0Y2ggc2V0dGluZ3MgICoqKioqKioqKioqKioqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgc3cxLTEgc3cxLTIgICAgQklPUyBhZGRyZXNzIChoZXgpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgICAgQzgwMDAgLSBDQkZGMAorICAgIG9uICAgIG9mZiAgICAgRDgwMDAgLSBEQkZGMAorICAgIG9mZiAgIG9uICAgICAgRDAwMDAgLSBEM0ZGMAorICAgIG9uICAgIG9uICAgICAgQklPUyBkaXNhYmxlZAorCisgICBzdzEtMyBzdzEtNCAgICBJTyBwb3J0IGFkZHJlc3MgKGhleCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgICAgMjIwIC0gMjJGCisgICAgb24gICAgb2ZmICAgICAyMDAgLSAyMEYKKyAgICBvZmYgICBvbiAgICAgIDExMCAtIDExRgorICAgIG9uICAgIG9uICAgICAgMTAwIC0gMTBGCisKKyAgIHN3MS01IHN3MS02IHN3MS03ICAgIEludGVycnVwdAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgb2ZmICAgb2ZmICAgb2ZmICAgICAxNQorICAgIG9mZiAgIG9uICAgIG9mZiAgICAgMTQKKyAgICBvZmYgICBvZmYgICBvbiAgICAgIDExCisgICAgb2ZmICAgb24gICAgb24gICAgICAxMAorICAgIG9uICAgIC0gICAgIC0gICAgICAgZGlzYWJsZWQKKworICAgc3cxLTggZnVuY3Rpb24gZGVwZW5kcyBvbiBCSU9TIHZlcnNpb24uIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhpcworICAgY29udHJvbGxlZCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIHN1cHBvcnQgZm9yIE1TRE9TOgorICAgICAgb2ZmID0gZGlzYWJsZWQKKyAgICAgIG9uICA9IGVuYWJsZWQKKyAgIEluIGxhdGVyIFJPTXMgKHN0YXJ0aW5nIHdpdGggMDEuMyBpbiBBcHJpbCAxOTk0KSBzdzEtOCBjb250cm9scworICAgdGhlICJncmVhdGVyIHRoYW4gMiBkaXNrIGRyaXZlIiBmZWF0dXJlIHRoYXQgZmlyc3QgYXBwZWFyZWQgaW4KKyAgIE1TRE9TIDUuMCAoaWdub3JlZCBieSBMaW51eCk6CisgICAgICBvZmYgPSAyIGRyaXZlcyBtYXhpbXVtCisgICAgICBvbiAgPSA3IGRyaXZlcyBtYXhpbXVtCisKKyAgIHN3MS05ICAgIEZsb3BweSBjb250cm9sbGVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgICAgZGlzYWJsZWQKKyAgICBvbiAgICAgIGVuYWJsZWQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIEkgc2hvdWxkIG1lbnRpb24gdGhhdCBEcmV3IEVja2hhcmR0J3MgJ0dlbmVyaWMgTkNSNTM4MCcgc291cmNlcworICAgd2VyZSBteSBtYWluIGluc3BpcmF0aW9uLCB3aXRoIGxvdHMgb2YgcmVmZXJlbmNlIHRvIHRoZSBJTjIwMDAKKyAgIGRyaXZlciBjdXJyZW50bHkgZGlzdHJpYnV0ZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgYWxzbyBvd2UKKyAgIG11Y2ggdG8gYSBkcml2ZXIgd3JpdHRlbiBieSBIYW1pc2ggTWFjZG9uYWxkIGZvciBMaW51eC1tNjhrKCEpLgorICAgQW5kIHRvIEVyaWMgV3JpZ2h0IGZvciBiZWluZyBhbiBBTFBIQSBndWluZWEgcGlnLiBBbmQgdG8gQmlsbAorICAgRWFybmVzdCBmb3IgMiB0b25zIG9mIGdyZWF0IGlucHV0IGFuZCBpbmZvcm1hdGlvbi4gQW5kIHRvIERhdmlkCisgICBXaWxsbW9yZSBmb3IgZXh0ZW5zaXZlICdib25uaWUnIHRlc3RpbmcuIEFuZCB0byBKb2UgTWFjayBmb3IKKyAgIGNvbnRpbnVhbCB0ZXN0aW5nIGFuZCBmZWVkYmFjay4KKworCisgICAgICAgICAgICBKb2huIFNoaWZmbGV0dCAgICBqc2hpZmZsZUBuZXRjb20uY29tCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9tZWdhcmFpZC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODY0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0CkBAIC0wLDAgKzEsNzAgQEAKKwkJCU5vdGVzIG9uIE1hbmFnZW1lbnQgTW9kdWxlCisJCQl+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPdmVydmlldzoKKy0tLS0tLS0tCisKK0RpZmZlcmVudCBjbGFzc2VzIG9mIGNvbnRyb2xsZXJzIGZyb20gTFNJIExvZ2ljLCBhY2NlcHQgYW5kIHJlc3BvbmQgdG8gdGhlCit1c2VyIGFwcGxpY2F0aW9ucyBpbiBhIHNpbWlsYXIgd2F5LiBUaGV5IHVuZGVyc3RhbmQgdGhlIHNhbWUgZmlybXdhcmUgY29udHJvbAorY29tbWFuZHMuIEZ1cnRoZXJtb3JlLCB0aGUgYXBwbGljYXRpb25zIGFsc28gY2FuIHRyZWF0IGRpZmZlcmVudCBjbGFzc2VzIG9mCit0aGUgY29udHJvbGxlcnMgdW5pZm9ybWx5LiBIZW5jZSBpdCBpcyBsb2dpY2FsIHRvIGhhdmUgYSBzaW5nbGUgbW9kdWxlIHRoYXQKK2ludGVyZWZhY2VzIHdpdGggdGhlIGFwcGxpY2F0aW9ucyBvbiBvbmUgc2lkZSBhbmQgYWxsIHRoZSBsb3cgbGV2ZWwgZHJpdmVycworb24gdGhlIG90aGVyLgorCitUaGUgYWR2YW50YWdlcywgdGhvdWdoIG9idmlvdXMsIGFyZSBsaXN0ZWQgZm9yIGNvbXBsZXRlbmVzczoKKworCWkuCUF2b2lkIGR1cGxpY2F0ZSBjb2RlIGZyb20gdGhlIGxvdyBsZXZlbCBkcml2ZXJzLgorCWlpLglVbmJ1cmRlbiB0aGUgbG93IGxldmVsIGRyaXZlcnMgZnJvbSBoYXZpbmcgdG8gZXhwb3J0IHRoZQorCQljaGFyYWN0ZXIgbm9kZSBkZXZpY2UgYW5kIHJlbGF0ZWQgaGFuZGxpbmcuCisJaWlpLglJbXBsZW1lbnQgYW55IHBvbGljeSBtZWNoYW5pc21zIGluIG9uZSBwbGFjZS4KKwlpdi4JQXBwbGljYXRpb25zIGhhdmUgdG8gaW50ZXJmYWNlIHdpdGggb25seSBtb2R1bGUgaW5zdGVhZCBvZgorCQltdWx0aXBsZSBsb3cgbGV2ZWwgZHJpdmVycy4KKworQ3VycmVudGx5IHRoaXMgbW9kdWxlIChjYWxsZWQgQ29tbW9uIE1hbmFnZW1lbnQgTW9kdWxlKSBpcyB1c2VkIG9ubHkgdG8gaXNzdWUKK2lvY3RsIGNvbW1hbmRzLiBCdXQgdGhpcyBtb2R1bGUgaXMgZW52aXNpb25lZCB0byBoYW5kbGUgYWxsIHVzZXIgc3BhY2UgbGV2ZWwKK2ludGVyYWN0aW9ucy4gU28gYW55ICdwcm9jJywgJ3N5c2ZzJyBpbXBsZW1lbnRhdGlvbnMgd2lsbCBiZSBsb2NhbGl6ZWQgaW4gdGhpcworY29tbW9uIG1vZHVsZS4KKworQ3JlZGl0czoKKy0tLS0tLS0KKworIlNoYXJlZCBjb2RlIGluIGEgdGhpcmQgbW9kdWxlLCBhICJsaWJyYXJ5IG1vZHVsZSIsIGlzIGFuIGFjY2VwdGFibGUKK3NvbHV0aW9uLiBtb2Rwcm9iZSBhdXRvbWF0aWNhbGx5IGxvYWRzIGRlcGVuZGVudCBtb2R1bGVzLCBzbyB1c2VycworcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKK2xvYWQgdGhlIHNoYXJlZCBsaWJyYXJ5IG1vZHVsZS4iCisKKwkJLSBKZWZmIEdhcnppayAoamdhcnppa0Bwb2JveC5jb20pLCAwMi4yNS4yMDA0IExLTUwKKworIkFzIEplZmYgaGludGVkLCBpZiB5b3VyIHVzZXJzcGFjZTwtPmRyaXZlciBBUEkgaXMgY29uc2lzdGVudCBiZXR3ZWVuCit5b3VyIG5ldyBNUFQtYmFzZWQgUkFJRCBjb250cm9sbGVycyBhbmQgeW91ciBleGlzdGluZyBtZWdhcmFpZCBkcml2ZXIsCit0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorYmV0dGVyIG5hbWUpLCBsb2FkZWQgYnkgYm90aCBtcHRyYWlkIGFuZCBtZWdhcmFpZCBhdXRvbWF0aWNhbGx5LCB3aGljaAoraGFuZGxlcyByZWdpc3RlcmluZyB0aGUgL2Rldi9tZWdhcmFpZCBub2RlIGR5bmFtaWNhbGx5LiBJbiB0aGlzIGNhc2UsCitib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKK2FkYXB0ZXIgZGlzY292ZXJlZCwgYW5kIGxzaWlvY3RsIHdvdWxkIGVzc2VudGlhbGx5IGJlIGEgc3dpdGNoLAorcmVkaXJlY3RpbmcgdXNlcnNwYWNlIHRvb2wgaW9jdGxzIHRvIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIuIgorCisJCS0gTWF0dCBEb21zY2gsIChNYXR0X0RvbXNjaEBkZWxsLmNvbSksIDAyLjI1LjIwMDQgTEtNTAorCitEZXNpZ246CistLS0tLS0KKworVGhlIENvbW1vbiBNYW5hZ2VtZW50IE1vZHVsZSBpcyBpbXBsZW1lbnRlZCBpbiBtZWdhcmFpZF9tbS5bY2hdIGZpbGVzLiBUaGlzCittb2R1bGUgYWN0cyBhcyBhIHJlZ2lzdHJ5IGZvciBsb3cgbGV2ZWwgaGJhIGRyaXZlcnMuIFRoZSBsb3cgbGV2ZWwgZHJpdmVycworKGN1cnJlbnRseSBvbmx5IG1lZ2FyYWlkKSByZWdpc3RlciBlYWNoIGNvbnRyb2xsZXIgd2l0aCB0aGUgY29tbW9uIG1vZHVsZS4KKworVGhlIGFwcGxpY2F0aW9ucyBpbnRlcmZhY2Ugd2l0aCB0aGUgY29tbW9uIG1vZHVsZSB2aWEgdGhlIGNoYXJhY3RlciBkZXZpY2UKK25vZGUgZXhwb3J0ZWQgYnkgdGhlIG1vZHVsZS4KKworVGhlIGxvd2VyIGxldmVsIGRyaXZlcnMgbm93IHVuZGVyc3RhbmQgb25seSBhIG5ldyBpbXByb3ZlZCBpb2N0bCBwYWNrZXQgY2FsbGVkCit1aW9jX3QuIFRoZSBtYW5hZ2VtZW50IG1vZHVsZSBjb252ZXJ0cyB0aGUgb2xkZXIgaW9jdGwgcGFja2V0cyBmcm9tIHRoZSBvbGRlcgorYXBwbGljYXRpb25zIGludG8gdWlvY190LiBBZnRlciBkcml2ZXIgaGFuZGxlcyB0aGUgdWlvY190LCB0aGUgY29tbW9uIG1vZHVsZQord2lsbCBjb252ZXJ0IHRoYXQgYmFjayBpbnRvIHRoZSBvbGQgZm9ybWF0IGJlZm9yZSByZXR1cm5pbmcgdG8gYXBwbGljYXRpb25zLgorCitBcyBuZXcgYXBwbGljYXRpb25zIGV2b2x2ZSBhbmQgcmVwbGFjZSB0aGUgb2xkIG9uZXMsIHRoZSBvbGQgcGFja2V0IGZvcm1hdCAKK3dpbGwgYmUgcmV0aXJlZC4KKworQ29tbW9uIG1vZHVsZSBkZWRpY2F0ZXMgb25lIHVpb2NfdCBwYWNrZXQgdG8gZWFjaCBjb250cm9sbGVyIHJlZ2lzdGVyZWQuIFRoaXMKK2NhbiBlYXNpbHkgYmUgbW9yZSB0aGFuIG9uZS4gQnV0IHNpbmNlIG1lZ2FyYWlkIGlzIHRoZSBvbmx5IGxvdyBsZXZlbCBkcml2ZXIKK3RvZGF5LCBhbmQgaXQgY2FuIGhhbmRsZSBvbmx5IG9uZSBpb2N0bCwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGhhdmUgbW9yZS4gQnV0CithcyBuZXcgY29udHJvbGxlciBjbGFzc2VzIGdldCBhZGRlZCwgdGhpcyB3aWxsIGJlIHR1bmVkIGFwcHJvcHJpYXRlbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M3eHgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTk1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dApAQCAtMCwwICsxLDQwIEBACitSRUFETUUgZm9yIFdhcnBFbmdpbmUvQTQwMDBUL0E0MDkxIFNDU0kga2VybmVscy4KKworVXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBkaXNhYmxlIG9wdGlvbnMgaW4gdGhlIFNDU0kgZHJpdmVyLgorCitVc2luZyBhbWlib290IGZvciBleGFtcGxlLi4uLi4KKworVG8gZGlzYWJsZSBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbi4uLi4KKworCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub3N5bmM6MAkKKworVG8gZGlzYWJsZSBEaXNjb25uZWN0aW9uLi4uLgorCQorCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub2Rpc2Nvbm5lY3Q6MAorCitUbyBkaXNhYmxlIGNlcnRhaW4gU0NTSSBkZXZpY2VzLi4uCisKKwlhbWlib290IC1rIGtlcm5lbCA1M2M3eHg9dmFsaWRpZHM6MHgzRgorCisJdGhpcyBhbGxvd3Mgb25seSBkZXZpY2UgSUQncyAwLDEsMiwzLDQgYW5kIDUgZm9yIGxpbnV4IHRvIGhhbmRsZS4KKwkodGhpcyBpcyBhIGJpdG1hc2tlZCBmaWVsZCAtIGkuZS4gZWFjaCBiaXQgcmVwcmVzZW50cyBhIFNDU0kgSUQpCisKK1RoZXNlIGNvbW1hbmRzIHdvcmsgb24gYSBwZXIgY29udHJvbGxlciBiYXNpcyBhbmQgdXNlIHRoZSBvcHRpb24gJ25leHQnIHRvCittb3ZlIHRvIHRoZSBuZXh0IGNvbnRyb2xsZXIgaW4gdGhlIHN5c3RlbS4KKworZS5nLgorCWFtaWJvb3QgLWsga2VybmVsIDUzYzd4eD1ub2Rpc2Nvbm5lY3Q6MCxuZXh0LG5vc3luYzowCisKKwl0aGlzIHVzZXMgTm8gRGlzY29ubmVjdGlvbiBvbiB0aGUgZmlyc3QgY29udHJvbGxlciBhbmQgQXN5bmNocm9ub3VzCisJU0NTSSBvbiB0aGUgc2Vjb25kIGNvbnRyb2xsZXIuCisKK0tub3duIElzc3VlczoKKworVHdvIGRldmljZXMgYXJlIGtub3duIG5vdCB0byBmdW5jdGlvbiB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHVzaW5nCitzeW5jaHJvbm91cyBTQ1NJLiBUaGVzZSBhcmUgdGhlIEFyY2hpdmUgVmlwZXIgMTUwIFRhcGUgRHJpdmUgYW5kIHRoZSAKK1N5UXVlc3QgU1E1NTUgcmVtb3ZlYWJsZSBoYXJkIGRyaXZlLiBXaGVuIHVzaW5nIHRoZXNlIGRldmljZXMgb24gYSBjb250cm9sbGVyCit1c2UgdGhlICdub3N5bmM6MCcgb3B0aW9uLgorCitQbGVhc2UgdHJ5IHRoZXNlIG9wdGlvbnMgYW5kIHBvc3QgYW55IHByb2JsZW1zL3N1Y2Nlc3NlcyB0byBtZS4KKworQWxhbiBIb3VyaWhhbmUgPGFsYW5oQGZhaXJsaXRlLmRlbW9uLmNvLnVrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjOHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJkMmFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKQEAgLTAsMCArMSwxODU0IEBACitUaGUgTGludXggTkNSNTNDOFhYL1NZTTUzQzhYWCBkcml2ZXJzIFJFQURNRSBmaWxlCisKK1dyaXR0ZW4gYnkgR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CisyMSBSdWUgQ2Fybm90Cis5NTE3MCBERVVJTCBMQSBCQVJSRSAtIEZSQU5DRQorCisyOSBNYXkgMTk5OQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgSW50cm9kdWN0aW9uCisyLiAgU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCiszLiAgQWR2YW50YWdlcyBvZiB0aGUgZW5oYW5jZWQgODk2IGRyaXZlcgorICAgICAgMy4xIE9wdGltaXplZCBTQ1NJIFNDUklQVFMKKyAgICAgIDMuMiBOZXcgZmVhdHVyZXMgb2YgdGhlIFNZTTUzQzg5NiAoNjQgYml0IFBDSSBkdWFsIExWRCBTQ1NJIGNvbnRyb2xsZXIpCis0LiAgTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKzUuICBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworNi4gIFBhcml0eSBjaGVja2luZworNy4gIFByb2ZpbGluZyBpbmZvcm1hdGlvbgorOC4gIENvbnRyb2wgY29tbWFuZHMKKyAgICAgIDguMSAgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kCisgICAgICA4LjIgIFNldCB3aWRlIHNpemUKKyAgICAgIDguMyAgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICA4LjQgIFNldCBvcmRlciB0eXBlIGZvciB0YWdnZWQgY29tbWFuZAorICAgICAgOC41ICBTZXQgZGVidWcgbW9kZQorICAgICAgOC42ICBDbGVhciBwcm9maWxlIGNvdW50ZXJzCisgICAgICA4LjcgIFNldCBmbGFnIChub19kaXNjKQorICAgICAgOC44ICBTZXQgdmVyYm9zZSBsZXZlbAorICAgICAgOC45ICBSZXNldCBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorICAgICAgOC4xMCBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKzkuICBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisgICAgICAxMC4xIFN5bnRheAorICAgICAgMTAuMiBBdmFpbGFibGUgYXJndW1lbnRzCisgICAgICAgICAgICAgMTAuMi4xICBNYXN0ZXIgcGFyaXR5IGNoZWNraW5nCisgICAgICAgICAgICAgMTAuMi4yICBTY3NpIHBhcml0eSBjaGVja2luZworICAgICAgICAgICAgIDEwLjIuMyAgU2NzaSBkaXNjb25uZWN0aW9ucworICAgICAgICAgICAgIDEwLjIuNCAgU3BlY2lhbCBmZWF0dXJlcworICAgICAgICAgICAgIDEwLjIuNSAgVWx0cmEgU0NTSSBzdXBwb3J0CisgICAgICAgICAgICAgMTAuMi42ICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAxMC4yLjcgIERlZmF1bHQgc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorICAgICAgICAgICAgIDEwLjIuOCAgTmVnb3RpYXRlIHN5bmNocm9ub3VzIHdpdGggYWxsIGRldmljZXMKKyAgICAgICAgICAgICAxMC4yLjkgIFZlcmJvc2l0eSBsZXZlbAorICAgICAgICAgICAgIDEwLjIuMTAgRGVidWcgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTEgQnVyc3QgbWF4CisgICAgICAgICAgICAgMTAuMi4xMiBMRUQgc3VwcG9ydAorICAgICAgICAgICAgIDEwLjIuMTMgTWF4IHdpZGUKKyAgICAgICAgICAgICAxMC4yLjE0IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgICAgICAgMTAuMi4xNSBJUlEgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTYgUmV2ZXJzZSBwcm9iZQorICAgICAgICAgICAgIDEwLjIuMTcgRml4IHVwIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgICAgICAgICAgICAgMTAuMi4xOCBTZXJpYWwgTlZSQU0KKyAgICAgICAgICAgICAxMC4yLjE5IENoZWNrIFNDU0kgQlVTIAorICAgICAgICAgICAgIDEwLjIuMjAgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgICAgICAgIDEwLjIuMjEgU3VnZ2VzdCBhIGRlZmF1bHQgU0NTSSBpZCBmb3IgaG9zdHMKKyAgICAgICAgICAgICAxMC4yLjIyIEVuYWJsZSB1c2Ugb2YgSU1NRURJQVRFIEFSQklUUkFUSU9OCisgICAgICAxMC4zIEFkdmlzZWQgYm9vdCBzZXR1cCBjb21tYW5kcworICAgICAgMTAuNCBQQ0kgY29uZmlndXJhdGlvbiBmaXgtdXAgYm9vdCBvcHRpb24KKyAgICAgIDEwLjUgU2VyaWFsIE5WUkFNIHN1cHBvcnQgYm9vdCBvcHRpb24KKyAgICAgIDEwLjYgU0NTSSBCVVMgY2hlY2tpbmcgYm9vdCBvcHRpb24KKyAgICAgIDEwLjcgSU1NRURJQVRFIEFSQklUUkFUSU9OIGJvb3Qgb3B0aW9uCisxMS4gU29tZSBjb25zdGFudHMgYW5kIGZsYWdzIG9mIHRoZSBuY3I1M2M4eHguaCBoZWFkZXIgZmlsZQorMTIuIEluc3RhbGxhdGlvbgorMTMuIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZmVhdHVyZXMKKzE0LiBLbm93biBwcm9ibGVtcworICAgICAgMTQuMSBUYWdnZWQgY29tbWFuZHMgd2l0aCBJb21lZ2EgSmF6IGRldmljZQorICAgICAgMTQuMiBEZXZpY2UgbmFtZXMgY2hhbmdlIHdoZW4gYW5vdGhlciBjb250cm9sbGVyIGlzIGFkZGVkCisgICAgICAxNC4zIFVzaW5nIG9ubHkgOCBiaXQgZGV2aWNlcyB3aXRoIGEgV0lERSBTQ1NJIGNvbnRyb2xsZXIuCisgICAgICAxNC40IFBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgYSBNZW1vcnkgV3JpdGUgYW5kIEludmFsaWRhdGUKKyAgICAgIDE0LjUgSVJRIHNoYXJpbmcgcHJvYmxlbXMKKzE1LiBTQ1NJIHByb2JsZW0gdHJvdWJsZXNob290aW5nCisgICAgICAxNS4xIFByb2JsZW0gdHJhY2tpbmcKKyAgICAgIDE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisxNi4gU3luY2hvbm91cyB0cmFuc2ZlciBuZWdvdGlhdGlvbiB0YWJsZXMKKyAgICAgIDE2LjEgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgNTNDODc1IGFuZCA1M0M4NjAgVWx0cmEtU0NTSSBjb250cm9sbGVycworICAgICAgMTYuMiBTeW5jaHJvbm91cyB0aW1pbmdzIGZvciBmYXN0IFNDU0ktMiA1M0M4WFggY29udHJvbGxlcnMKKzE3LiBTZXJpYWwgTlZSQU0gc3VwcG9ydCAoYnkgUmljaGFyZCBXYWx0aGFtKQorICAgICAgMTcuMSBGZWF0dXJlcworICAgICAgMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorICAgICAgMTcuMyBUZWtyYW0gIE5WUkFNIGxheW91dAorMTguIFN1cHBvcnQgZm9yIEJpZyBFbmRpYW4KKyAgICAgIDE4LjEgQmlnIEVuZGlhbiBDUFUKKyAgICAgIDE4LjIgTkNSIGNoaXAgaW4gQmlnIEVuZGlhbiBtb2RlIG9mIG9wZXJhdGlvbnMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBJbnRyb2R1Y3Rpb24KKworVGhlIGluaXRpYWwgTGludXggbmNyNTNjOHh4IGRyaXZlciBoYXMgYmVlbiBhIHBvcnQgb2YgdGhlIG5jciBkcml2ZXIgZnJvbSAKK0ZyZWVCU0QgdGhhdCBoYXMgYmVlbiBhY2hpZXZlZCBpbiBOb3ZlbWJlciAxOTk1IGJ5OgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyICAgICAgICAgICAgICA8Z3JvdWRpZXJAZnJlZS5mcj4KKworVGhlIG9yaWdpbmFsIGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIGZvciAzODZic2QgYW5kIEZyZWVCU0QgYnk6CisgICAgICAgICAgV29sZmdhbmcgU3RhbmdsbWVpZXIgICAgICAgIDx3b2xmQGNvbG9nbmUuZGU+CisgICAgICAgICAgU3RlZmFuIEVzc2VyICAgICAgICAgICAgICAgIDxzZUBtaS5VbmktS29lbG4uZGU+CisKK0l0IGlzIG5vdyBhdmFpbGFibGUgYXMgYSBidW5kbGUgb2YgMiBkcml2ZXJzOgorCistIG5jcjUzYzh4eCBnZW5lcmljIGRyaXZlciB0aGF0IHN1cHBvcnRzIGFsbCB0aGUgU1lNNTNDOFhYIGZhbWlseSBpbmNsdWRpbmcgCisgIHRoZSBlYWxpZXN0IDgxMCByZXYuIDEsIHRoZSBsYXRlc3QgODk2ICgyIGNoYW5uZWwgTFZEIFNDU0kgY29udHJvbGxlcikgYW5kCisgIHRoZSBuZXcgODk1QSAoMSBjaGFubmVsIExWRCBTQ1NJIGNvbnRyb2xsZXIpLgorLSBzeW01M2M4eHggZW5oYW5jZWQgZHJpdmVyIChhLmsuYS4gODk2IGRyaXZlcnMpIHRoYXQgZHJvcHMgc3VwcG9ydCBvZiBvbGRlc3QgCisgIGNoaXBzIGluIG9yZGVyIHRvIGdhaW4gYWR2YW50YWdlIG9mIG5ldyBmZWF0dXJlcywgYXMgTE9BRC9TVE9SRSBpbnRydWN0aW9ucyAKKyAgYXZhaWxhYmxlIHNpbmNlIHRoZSA4MTBBIGFuZCBoYXJkd2FyZSBwaGFzZSBtaXNtYXRjaCBhdmFpbGFibGUgd2l0aCB0aGUgCisgIDg5NiBhbmQgdGhlIDg5NUEuCisKK1lvdSBjYW4gZmluZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE5DUiA4eHggZmFtaWx5IGluIHRoZQorUENJLUhPV1RPIHdyaXR0ZW4gYnkgTWljaGFlbCBXaWxsIGFuZCBpbiB0aGUgU0NTSS1IT1dUTyB3cml0dGVuIGJ5CitEcmV3IEVja2hhcmR0LgorCitJbmZvcm1hdGlvbiBhYm91dCBuZXcgY2hpcHMgaXMgYXZhaWxhYmxlIGF0IExTSUxPR0lDIHdlYiBzZXJ2ZXI6CisKKyAgICAgICAgICBodHRwOi8vd3d3LmxzaWxvZ2ljLmNvbS8KKworU0NTSSBzdGFuZGFyZCBkb2N1bWVudGF0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IFNZTUJJT1MgZnRwIHNlcnZlcjoKKworICAgICAgICAgIGZ0cDovL2Z0cC5zeW1iaW9zLmNvbS8KKworVXNlZnVsbCBTQ1NJIHRvb2xzIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZ2RhbGUgYXJlIGF2YWlsYWJsZSBhdCB0c3gtMTE6CisKKyAgICAgICAgICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvc2NzaS9zY3NpaW5mby1YLlkudGFyLmd6CisgICAgICAgICAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL3Njc2kvc2NzaWRldi1YLlkudGFyLmd6CisKK1RoZXNlIHRvb2xzIGFyZSBub3QgQUxQSEEgYnV0IHF1aXRlIGNsZWFuIGFuZCB3b3JrIHF1aXRlIHdlbGwuCitJdCBpcyBlc3NlbnRpYWwgeW91IGhhdmUgdGhlICdzY3NpaW5mbycgcGFja2FnZS4KKworVGhpcyBzaG9ydCBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIGdlbmVyaWMgYW5kIGVuaGFuY2VkCitkcml2ZXJzLCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIGNvbnRyb2wgY29tbWFuZHMgYXZhaWxhYmxlIHRocm91Z2ggCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtIHJlYWQgLyB3cml0ZSBvcGVyYXRpb25zLgorCitUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgT0sgd2l0aCBsaW51eC9pMzg2LCBMaW51eC9BbHBoYSBhbmQgTGludXgvUFBDLgorCitMYXRlc3QgZHJpdmVyIHZlcnNpb24gYW5kIHBhdGNoZXMgYXJlIGF2YWlsYWJsZSBhdDoKKworICAgICAgICAgIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9wZW9wbGUvZ2VyYXJkLXJvdWRpZXIKK29yCisgICAgICAgICAgZnRwOi8vZnRwLnN5bWJpb3MuY29tL21pcnJvci9mdHAudHV4Lm9yZy9wdWIvdHV4L3JvdWRpZXIvZHJpdmVycworCitJIGFtIG5vdCBhIG5hdGl2ZSBzcGVha2VyIG9mIEVuZ2xpc2ggYW5kIHRoZXJlIGFyZSBwcm9iYWJseSBsb3RzIG9mCittaXN0YWtlcyBpbiB0aGlzIFJFQURNRSBmaWxlLiBBbnkgaGVscCB3aWxsIGJlIHdlbGNvbWUuCisKKworMi4gU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBmb3IgYWxsIGNoaXBzOgorCisJU3luY2hyb25vdXMgbmVnb3RpYXRpb24KKwlEaXNjb25uZWN0aW9uCisJVGFnZ2VkIGNvbW1hbmQgcXVldWluZworCVNDU0kgcGFyaXR5IGNoZWNraW5nCisJTWFzdGVyIHBhcml0eSBjaGVja2luZworCisiV2lkZSBuZWdvdGlhdGlvbiIgaXMgc3VwcG9ydGVkIGZvciBjaGlwcyB0aGF0IGFsbG93IGl0LiAgVGhlCitmb2xsb3dpbmcgdGFibGUgc2hvd3Mgc29tZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgTkNSIDh4eCBmYW1pbHkgY2hpcHMgCithbmQgd2hhdCBkcml2ZXJzIHN1cHBvcnQgdGhlbS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWQgYnkgICBTdXBwb3J0ZWQgYnkKKyAgICAgICBPbiBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdlbmVyaWMgICAgdGhlIGVuaGFuY2VkIAorQ2hpcCAgIFNETVMgQklPUyAgIFdpZGUgICBTQ1NJIHN0ZC4gICBNYXguIHN5bmMgICBkcml2ZXIgICAgICAgICBkcml2ZXIKKy0tLS0gICAtLS0tLS0tLS0gICAtLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLQorODEwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgxMEEgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4MTUgICAgICAgIFkgICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODI1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QxMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgyNUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4NjAgICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDIwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODc1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg3NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTUgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk1QSAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NiAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTcgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTUxMEQgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzEwMTAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUODAgICAxNjAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBZCisxMDEwXzY2KiAgIFkgICAgICAgICBZICAgICAgRkFTVDgwICAgMTYwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgWQorCisqIENoaXAgc3VwcG9ydHMgMzNNSHogYW5kIDY2TUh6IFBDSSBidXNlcy4KKworCitTdW1tYXJ5IG9mIG90aGVyIHN1cHBvcnRlZCBmZWF0dXJlczoKKworTW9kdWxlOiAgICAgICAgICAgICAgICBhbGxvdyB0byBsb2FkIHRoZSBkcml2ZXIKK01lbW9yeSBtYXBwZWQgSS9POiAgICAgaW5jcmVhc2VzIHBlcmZvcm1hbmNlCitQcm9maWxpbmcgaW5mb3JtYXRpb246IHJlYWQgb3BlcmF0aW9ucyBmcm9tIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0KK0NvbnRyb2wgY29tbWFuZHM6ICAgICAgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtCitEZWJ1Z2dpbmcgaW5mb3JtYXRpb246IHdyaXR0ZW4gdG8gc3lzbG9nIChleHBlcnQgb25seSkKK1NjYXR0ZXIgLyBnYXRoZXIKK1NoYXJlZCBpbnRlcnJ1cHQKK0Jvb3Qgc2V0dXAgY29tbWFuZHMKK1NlcmlhbCBOVlJBTTogICAgICAgICAgU3ltYmlvcyBhbmQgVGVrcmFtIGZvcm1hdHMKKworCiszLiBBZHZhbnRhZ2VzIG9mIHRoZSBlbmhhbmNlZCA4OTYgZHJpdmVyCisKKzMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTLgorCitUaGUgODEwQSwgODI1QSwgODc1LCA4OTUsIDg5NiBhbmQgODk1QSBzdXBwb3J0IG5ldyBTQ1NJIFNDUklQVFMgaW5zdHJ1Y3Rpb25zIAorbmFtZWQgTE9BRCBhbmQgU1RPUkUgdGhhdCBhbGxvdyB0byBtb3ZlIHVwIHRvIDEgRFdPUkQgZnJvbS90byBhbiBJTyByZWdpc3RlciAKK3RvL2Zyb20gbWVtb3J5IG11Y2ggZmFzdGVyIHRoYXQgdGhlIE1PVkUgTUVNT1JZIGluc3RydWN0aW9uIHRoYXQgaXMgc3VwcG9ydGVkIAorYnkgdGhlIDUzYzd4eCBhbmQgNTNjOHh4IGZhbWlseS4KK1RoZSBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyBzdXBwb3J0IGFic29sdXRlIGFuZCBEU0EgcmVsYXRpdmUgYWRkcmVzc2luZyAKK21vZGVzLiAgVGhlIFNDU0kgU0NSSVBUUyBoYWQgYmVlbiBlbnRpcmVseSByZXdyaXR0ZW4gdXNpbmcgTE9BRC9TVE9SRSBpbnN0ZWFkIAorb2YgTU9WRSBNRU1PUlkgaW5zdHJ1Y3Rpb25zLgorCiszLjIgTmV3IGZlYXR1cmVzIG9mIHRoZSBTWU01M0M4OTYgKDY0IGJpdCBQQ0kgZHVhbCBMVkQgU0NTSSBjb250cm9sbGVyKQorCitUaGUgODk2IGFuZCB0aGUgODk1QSBhbGxvd3MgaGFuZGxpbmcgb2YgdGhlIHBoYXNlIG1pc21hdGNoIGNvbnRleHQgZnJvbSAKK1NDUklQVFMgKGF2b2lkcyB0aGUgcGhhc2UgbWlzbWF0Y2ggaW50ZXJydXB0IHRoYXQgc3RvcHMgdGhlIFNDU0kgcHJvY2Vzc29yIAordW50aWwgdGhlIEMgY29kZSBoYXMgc2F2ZWQgdGhlIGNvbnRleHQgb2YgdGhlIHRyYW5zZmVyKS4KK0ltcGxlbWVudGluZyB0aGlzIHdpdGhvdXQgdXNpbmcgTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd291bGQgYmUgcGFpbmZ1bGwgCithbmQgSSBkaWQnbnQgZXZlbiB3YW50IHRvIHRyeSBpdC4KKworVGhlIDg5NiBjaGlwIHN1cHBvcnRzIDY0IGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCBhZGRyZXNzaW5nLCB3aGlsZSB0aGUgCis4OTVBIHN1cHBvcnRzIDMyIGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCA2NCBiaXQgYWRkcmVzc2luZy4KK1RoZSBTQ1JJUFRTIHByb2Nlc3NvciBvZiB0aGVzZSBjaGlwcyBpcyBub3QgdHJ1ZSA2NCBiaXQsIGJ1dCB1c2VzIHNlZ21lbnQgCityZWdpc3RlcnMgZm9yIGJpdCAzMi02My4gQW5vdGhlciBpbnRlcmVzdGluZyBmZWF0dXJlIGlzIHRoYXQgTE9BRC9TVE9SRSAKK2luc3RydWN0aW9ucyB0aGF0IGFkZHJlc3MgdGhlIG9uLWNoaXAgUkFNICg4aykgcmVtYWluIGludGVybmFsIHRvIHRoZSBjaGlwLgorCitEdWUgdG8gdGhlIHVzZSBvZiBMT0FEL1NUT1JFIFNDUklQVFMgaW5zdHJ1Y3Rpb25zLCB0aGlzIGRyaXZlciBkb2VzIG5vdCAKK3N1cHBvcnQgdGhlIGZvbGxvd2luZyBjaGlwczoKKy0gU1lNNTNDODEwIHJldmlzaW9uIDwgMHgxMCAoMTYpCistIFNZTTUzQzgxNSBhbGwgcmV2aXNpb25zCistIFNZTTUzQzgyNSByZXZpc2lvbiA8IDB4MTAgKDE2KQorCis0LiBNZW1vcnkgbWFwcGVkIEkvTyB2ZXJzdXMgbm9ybWFsIEkvTworCitNZW1vcnkgbWFwcGVkIEkvTyBoYXMgbGVzcyBsYXRlbmN5IHRoYW4gbm9ybWFsIEkvTy4gIFNpbmNlCitsaW51eC0xLjMueCwgbWVtb3J5IG1hcHBlZCBJL08gaXMgdXNlZCByYXRoZXIgdGhhbiBub3JtYWwgSS9PLiAgTWVtb3J5CittYXBwZWQgSS9PIHNlZW1zIHRvIHdvcmsgZmluZSBvbiBtb3N0IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBidXQKK3NvbWUgcG9vcmx5IGRlc2lnbmVkIG1vdGhlcmJvYXJkcyBtYXkgYnJlYWsgdGhpcyBmZWF0dXJlLgorCitUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1NDU0lfTkNSNTNDOFhYX0lPTUFQUEVEIGZvcmNlcyB0aGUKK2RyaXZlciB0byB1c2Ugbm9ybWFsIEkvTyBpbiBhbGwgY2FzZXMuCisKKworNS4gVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKworUXVldWluZyBtb3JlIHRoYW4gMSBjb21tYW5kIGF0IGEgdGltZSB0byBhIGRldmljZSBhbGxvd3MgaXQgdG8gcGVyZm9ybSAKK29wdGltaXphdGlvbnMgYmFzZWQgb24gYWN0dWFsIGhlYWQgcG9zaXRpb25zIGFuZCBpdHMgbWVjaGFuaWNhbCAKK2NoYXJhY3RlcmlzdGljcy4gVGhpcyBmZWF0dXJlIG1heSBhbHNvIHJlZHVjZSBhdmVyYWdlIGNvbW1hbmQgbGF0ZW5jeS4KK0luIG9yZGVyIHRvIHJlYWxseSBnYWluIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUsIGRldmljZXMgbXVzdCBoYXZlIAorYSByZWFzb25hYmxlIGNhY2hlIHNpemUgKE5vIG1pcmFjbGUgaXMgdG8gYmUgZXhwZWN0ZWQgZm9yIGEgbG93LWVuZCAKK2hhcmQgZGlzayB3aXRoIDEyOCBLQiBvciBsZXNzKS4KK1NvbWUga293biBTQ1NJIGRldmljZXMgZG8gbm90IHByb3Blcmx5IHN1cHBvcnQgdGFnZ2VkIGNvbW1hbmQgcXVldWluZy4KK0dlbmVyYWxseSwgZmlybXdhcmUgcmV2aXNpb25zIHRoYXQgZml4IHRoaXMga2luZCBvZiBwcm9ibGVtcyBhcmUgYXZhaWxhYmxlIAorYXQgcmVzcGVjdGl2ZSB2ZW5kb3Igd2ViL2Z0cCBzaXRlcy4KK0FsbCBJIGNhbiBzYXkgaXMgdGhhdCB0aGUgaGFyZCBkaXNrcyBJIHVzZSBvbiBteSBtYWNoaW5lcyBiZWhhdmUgd2VsbCB3aXRoIAordGhpcyBkcml2ZXIgd2l0aCB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGVuYWJsZWQ6CisKKy0gSUJNIFMxMiAwNjYyCistIENvbm5lciAxMDgwUworLSBRdWFudHVtIEF0bGFzIEkKKy0gUXVhbnR1bSBBdGxhcyBJSQorCitJZiB5b3VyIGNvbnRyb2xsZXIgaGFzIE5WUkFNLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGZlYXR1cmUgcGVyIHRhcmdldCAKK2Zyb20gdGhlIHVzZXIgc2V0dXAgdG9vbC4gVGhlIFRla3JhbSBTZXR1cCBwcm9ncmFtIGFsbG93cyB0byB0dW5lIHRoZSAKK21heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyB1cCB0byAzMi4gVGhlIFN5bWJpb3MgU2V0dXAgb25seSBhbGxvd3MgCit0byBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZlYXR1cmUuCisKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGRldmljZQoraXMgY3VycmVudGx5IHNldCB0byA4IGJ5IGRlZmF1bHQuICBUaGlzIHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0IFNDU0kKK2Rpc2tzLiAgV2l0aCBsYXJnZSBTQ1NJIGRpc2tzICg+PSAyR0IsIGNhY2hlID49IDUxMktCLCBhdmVyYWdlIHNlZWsgdGltZQorPD0gMTAgbXMpLCB1c2luZyBhIGxhcmdlciB2YWx1ZSBtYXkgZ2l2ZSBiZXR0ZXIgcGVyZm9ybWFuY2VzLgorCitUaGUgc3ltNTNjOHh4IGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTUgY29tbWFuZHMgcGVyIGRldmljZSwgYW5kIHRoZSAKK2dlbmVyaWMgbmNyNTNjOHh4IGRyaXZlciBzdXBwb3J0cyB1cCB0byA2NCwgYnV0IHVzaW5nIG1vcmUgdGhhbiAzMiBpcyAKK2dlbmVyYWxseSBub3Qgd29ydGgtd2hpbGUsIHVubGVzcyB5b3UgYXJlIHVzaW5nIGEgdmVyeSBsYXJnZSBkaXNrIG9yIGRpc2sgCithcnJheS4gSXQgaXMgbm90aWNlYWJsZSB0aGF0IG1vc3Qgb2YgcmVjZW50IGhhcmQgZGlza3Mgc2VlbSBub3QgdG8gYWNjZXB0IAorbW9yZSB0aGFuIDY0IHNpbXVsdGFuZW91cyBjb21tYW5kcy4gU28sIHVzaW5nIG1vcmUgdGhhbiA2NCBxdWV1ZWQgY29tbWFuZHMgCitpcyBwcm9iYWJseSBqdXN0IHJlc291cmNlIHdhc3RpbmcuCisKK0lmIHlvdXIgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIE5WUkFNIG9yIGlmIGl0IGlzIG1hbmFnZWQgYnkgdGhlIFNETVMgCitCSU9TL1NFVFVQLCB5b3UgY2FuIGNvbmZpZ3VyZSB0YWdnZWQgcXVldWVpbmcgZmVhdHVyZSBhbmQgZGV2aWNlIHF1ZXVlIAorZGVwdGhzIGZyb20gdGhlIGJvb3QgY29tbWFuZC1saW5lLiBGb3IgZXhhbXBsZToKKworICBuY3I1M2M4eHg9dGFnczo0L3QydDNxMTUtdDRxNy90MXUwcTMyCisKK3dpbGwgc2V0IHRhZ2dlZCBjb21tYW5kcyBxdWV1ZSBkZXB0aHMgYXMgZm9sbG93OgorCistIHRhcmdldCAyICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAxNQorLSB0YXJnZXQgMyAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gMTUKKy0gdGFyZ2V0IDQgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+ICA3CistIHRhcmdldCAxICBsdW4gMCAgICAgb24gY29udHJvbGxlciAxIC0tPiAzMgorLSBhbGwgb3RoZXIgdGFyZ2V0L2x1biAgICAgICAgICAgICAgICAtLT4gIDQKKworSW4gc29tZSBzcGVjaWFsIGNvbmRpdGlvbnMsIHNvbWUgU0NTSSBkaXNrIGZpcm13YXJlcyBtYXkgcmV0dXJuIGEKK1FVRVVFIEZVTEwgc3RhdHVzIGZvciBhIFNDU0kgY29tbWFuZC4gVGhpcyBiZWhhdmlvdXIgaXMgbWFuYWdlZCBieSB0aGUKK2RyaXZlciB1c2luZyB0aGUgZm9sbG93aW5nIGhldXJpc3RpYzoKKworLSBFYWNoIHRpbWUgYSBRVUVVRSBGVUxMIHN0YXR1cyBpcyByZXR1cm5lZCwgdGFnZ2VkIHF1ZXVlIGRlcHRoIGlzIHJlZHVjZWQgCisgIHRvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGRpc2Nvbm5lY3RlZCBjb21tYW5kcy4gCisKKy0gRXZlcnkgMTAwMCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIFNDU0kgY29tbWFuZHMsIGlmIGFsbG93ZWQgYnkgdGhlCisgIGN1cnJlbnQgbGltaXQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWFibGUgY29tbWFuZHMgaXMgaW5jcmVtZW50ZWQuCisKK1NpbmNlIFFVRVVFIEZVTEwgc3RhdHVzIHJlY2VwdGlvbiBhbmQgaGFuZGxpbmcgaXMgcmVzb3VyY2Ugd2FzdGluZywgdGhlIAorZHJpdmVyIG5vdGlmaWVzIGJ5IGRlZmF1bHQgdGhpcyBwcm9ibGVtIHRvIHVzZXIgYnkgaW5kaWNhdGluZyB0aGUgYWN0dWFsIAorbnVtYmVyIG9mIGNvbW1hbmRzIHVzZWQgYW5kIHRoZWlyIHN0YXR1cywgYXMgd2VsbCBhcyBpdHMgZGVjaXNpb24gb24gdGhlIAorZGV2aWNlIHF1ZXVlIGRlcHRoIGNoYW5nZS4KK1RoZSBoZXVyaXN0aWMgdXNlZCBieSB0aGUgZHJpdmVyIGluIGhhbmRsaW5nIFFVRVVFIEZVTEwgZW5zdXJlcyB0aGF0IHRoZSAKK2ltcGFjdCBvbiBwZXJmb3JtYW5jZXMgaXMgbm90IHRvbyBiYWQuIFlvdSBjYW4gZ2V0IHJpZCBvZiB0aGUgbWVzc2FnZXMgYnkgCitzZXR0aW5nIHZlcmJvc2UgbGV2ZWwgdG8gemVybywgYXMgZm9sbG93OgorCisxc3QgbWV0aG9kOiBib290IHlvdXIgc3lzdGVtIHVzaW5nICduY3I1M2M4eHg9dmVyYjowJyBvcHRpb24uCisybmQgbWV0aG9kOiBhcHBseSAic2V0dmVyYm9zZSAwIiBjb250cm9sIGNvbW1hbmQgdG8gdGhlIHByb2MgZnMgZW50cnkgCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHlvdXIgY29udHJvbGxlciBhZnRlciBib290LXVwLgorCis2LiBQYXJpdHkgY2hlY2tpbmcKKworVGhlIGRyaXZlciBzdXBwb3J0cyBTQ1NJIHBhcml0eSBjaGVja2luZyBhbmQgUENJIGJ1cyBtYXN0ZXIgcGFyaXR5CitjaGVja2luZy4gIFRoZXNlIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byBlbnN1cmUgc2FmZSBkYXRhCit0cmFuc2ZlcnMuICBIb3dldmVyLCBzb21lIGZsYXdlZCBkZXZpY2VzIG9yIG1vdGhlciBib2FyZHMgd2lsbCBoYXZlCitwcm9ibGVtcyB3aXRoIHBhcml0eS4gWW91IGNhbiBkaXNhYmxlIGVpdGhlciBQQ0kgcGFyaXR5IG9yIFNDU0kgcGFyaXR5IAorY2hlY2tpbmcgYnkgZW50ZXJpbmcgYXBwcm9wcmlhdGUgb3B0aW9ucyBmcm9tIHRoZSBib290IGNvbW1hbmQgbGluZS4KKyhTZWUgMTA6IEJvb3Qgc2V0dXAgY29tbWFuZHMpLgorCis3LiBQcm9maWxpbmcgaW5mb3JtYXRpb24KKworUHJvZmlsaW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0uCitTaW5jZSBnYXRoZXJpbmcgcHJvZmlsaW5nIGluZm9ybWF0aW9uIG1heSBpbXBhY3QgcGVyZm9ybWFuY2VzLCB0aGlzIAorZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCByZXF1aXJlcyBhIGNvbXBpbGF0aW9uIGNvbmZpZ3VyYXRpb24gCitvcHRpb24gdG8gYmUgc2V0IHRvIFkuCisKK1RoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgaG9zdCBoYXMgdGhlIGZvbGxvd2luZyBwYXRobmFtZToKKworICAgICAgICAgIC9wcm9jL3Njc2kvbmNyNTNjOHh4L04gICAgIChOPTAsMSwyIC4uLi4pCisKK0dlbmVyYWxseSwgb25seSAxIGJvYXJkIGlzIHVzZWQgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgZGV2aWNlIGlzOgorICAgICAgICAgIC9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKworSG93ZXZlciwgaWYgdGhlIGRyaXZlciBoYXMgYmVlbiBtYWRlIGFzIG1vZHVsZSwgdGhlIG51bWJlciBvZiB0aGUKK2hvc3RzIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgZHJpdmVyIGlzIGxvYWRlZC4KKworSW4gb3JkZXIgdG8gZGlzcGxheSBwcm9maWxpbmcgaW5mb3JtYXRpb24sIGp1c3QgZW50ZXI6CisKKyAgICAgICAgIGNhdCAvcHJvYy9zY3NpL25jcjUzYzh4eC8wCisKK2FuZCB5b3Ugd2lsbCBnZXQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmFsIGluZm9ybWF0aW9uOgorICBDaGlwIE5DUjUzQzgxMCwgZGV2aWNlIGlkIDB4MSwgcmV2aXNpb24gaWQgMHgyCisgIElPIHBvcnQgYWRkcmVzcyAweDYwMDAsIElSUSBudW1iZXIgMTAKKyAgVXNpbmcgbWVtb3J5IG1hcHBlZCBJTyBhdCB2aXJ0dWFsIGFkZHJlc3MgMHgyODJjMDAwCisgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHBlcmlvZCAyNSwgbWF4IGNvbW1hbmRzIHBlciBsdW4gNAorUHJvZmlsaW5nIGluZm9ybWF0aW9uOgorICBudW1fdHJhbnMgICAgPSAxODAxNAorICBudW1fa2J5dGVzICAgPSA2NzEzMTQKKyAgbnVtX2Rpc2MgICAgID0gMjU3NjMKKyAgbnVtX2JyZWFrICAgID0gMTY3MworICBudW1faW50ICAgICAgPSAxNjg1CisgIG51bV9mbHkgICAgICA9IDE4MDM4CisgIG1zX3NldHVwICAgICA9IDQ5NDAKKyAgbXNfZGF0YSAgICAgID0gMzY5OTQwCisgIG1zX2Rpc2MgICAgICA9IDE4MzA5MAorICBtc19wb3N0ICAgICAgPSAxMzIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dlbmVyYWwgaW5mb3JtYXRpb24gaXMgZWFzeSB0byB1bmRlcnN0YW5kLiBUaGUgZGV2aWNlIElEIGFuZCB0aGUKK3JldmlzaW9uIElEIGlkZW50aWZ5IHRoZSBTQ1NJIGNoaXAgYXMgZm9sbG93czoKKworQ2hpcCAgICBEZXZpY2UgaWQgICAgIFJldmlzaW9uIElkCistLS0tICAgIC0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0KKzgxMCAgICAgICAweDEgICAgICAgICAgICA8ICAweDEwCis4MTBBICAgICAgMHgxICAgICAgICAgICAgPj0gMHgxMAorODE1ICAgICAgIDB4NAorODI1ICAgICAgIDB4MyAgICAgICAgICAgIDwgIDB4MTAKKzg2MCAgICAgICAweDYKKzgyNUEgICAgICAweDMgICAgICAgICAgICA+PSAweDEwCis4NzUgICAgICAgMHhmCis4OTUgICAgICAgMHhjCisKK1RoZSBwcm9maWxpbmcgaW5mb3JtYXRpb24gaXMgdXBkYXRlZCB1cG9uIGNvbXBsZXRpb24gb2YgU0NTSSBjb21tYW5kcy4KK0EgZGF0YSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgd2hlbiB0aGUgaG9zdCBhZGFwdGVyIGlzCithdHRhY2hlZC4gU28sIGlmIHRoZSBkcml2ZXIgaXMgYSBtb2R1bGUsIHRoZSBwcm9maWxlIGNvdW50ZXJzIGFyZQorY2xlYXJlZCBlYWNoIHRpbWUgdGhlIGRyaXZlciBpcyBsb2FkZWQuICBUaGUgImNsZWFycHJvZiIgY29tbWFuZAorYWxsb3dzIHlvdSB0byBjbGVhciB0aGVzZSBjb3VudGVycyBhdCBhbnkgdGltZS4KKworVGhlIGZvbGxvd2luZyBjb3VudGVycyBhcmUgYXZhaWxhYmxlOgorCisoIm51bSIgcHJlZml4IG1lYW5zICJudW1iZXIgb2YiLAorIm1zIiBtZWFucyBtaWxsaS1zZWNvbmRzKQorCitudW1fdHJhbnMKKwlOdW1iZXIgb2YgY29tcGxldGVkIGNvbW1hbmRzCisJRXhhbXBsZSBhYm92ZTogMTgwMTQgY29tcGxldGVkIGNvbW1hbmRzCisKK251bV9rYnl0ZXMKKwlOdW1iZXIgb2Yga2J5dGVzIHRyYW5zZmVycmVkCisJRXhhbXBsZSBhYm92ZTogNjcxIE1CIHRyYW5zZmVycmVkCisKK251bV9kaXNjCisJTnVtYmVyIG9mIFNDU0kgZGlzY29ubmVjdGlvbnMKKwlFeGFtcGxlIGFib3ZlOiAyNTc2MyBTQ1NJIGRpc2Nvbm5lY3Rpb25zCisKK251bV9icmVhaworCW51bWJlciBvZiBzY3JpcHQgaW50ZXJydXB0aW9ucyAocGhhc2UgbWlzbWF0Y2gpCisJRXhhbXBsZSBhYm92ZTogMTY3MyBzY3JpcHQgaW50ZXJydXB0aW9ucworCitudW1faW50CisJTnVtYmVyIG9mIGludGVycnVwdHMgb3RoZXIgdGhhbiAib24gdGhlIGZseSIKKwlFeGFtcGxlIGFib3ZlOiAxNjg1IGludGVycnVwdGlvbnMgbm90ICJvbiB0aGUgZmx5IgorCitudW1fZmx5CisJTnVtYmVyIG9mIGludGVycnVwdHMgIm9uIHRoZSBmbHkiCisJRXhhbXBsZSBhYm92ZTogMTgwMzggaW50ZXJydXB0aW9ucyAib24gdGhlIGZseSIKKworbXNfc2V0dXAKKwlFbGFwc2VkIHRpbWUgZm9yIFNDU0kgY29tbWFuZHMgc2V0dXBzCisJRXhhbXBsZSBhYm92ZTogNC45NCBzZWNvbmRzCisKK21zX2RhdGEKKwlFbGFwc2VkIHRpbWUgZm9yIGRhdGEgdHJhbnNmZXJzCisJRXhhbXBsZSBhYm92ZTogMzY5Ljk0IHNlY29uZHMgc3BlbnQgZm9yIGRhdGEgdHJhbnNmZXIKKworbXNfZGlzYworCUVsYXBzZWQgdGltZSBmb3IgU0NTSSBkaXNjb25uZWN0aW9ucworCUV4YW1wbGUgYWJvdmU6IDE4My4wOSBzZWNvbmRzIHNwZW50IGRpc2Nvbm5lY3RlZAorCittc19wb3N0CisJRWxhcHNlZCB0aW1lIGZvciBjb21tYW5kIHBvc3QgcHJvY2Vzc2luZworCSh0aW1lIGZyb20gU0NTSSBzdGF0dXMgZ2V0IHRvIGNvbW1hbmQgY29tcGxldGlvbiBjYWxsKQorCUV4YW1wbGUgYWJvdmU6IDEuMzIgc2Vjb25kcyBzcGVudCBmb3IgcG9zdCBwcm9jZXNzaW5nCisKK0R1ZSB0byB0aGUgMS8xMDAgc2Vjb25kIHRpY2sgb2YgdGhlIHN5c3RlbSBjbG9jaywgIm1zX3Bvc3QiIHRpbWUgbWF5CitiZSB3cm9uZy4KKworSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdlIGdvdCAxODAzOCBpbnRlcnJ1cHRzICJvbiB0aGUgZmx5IiBhbmQgb25seQorMTY3MyBzY3JpcHQgYnJlYWtzIGdlbmVyYWxseSBkdWUgdG8gZGlzY29ubmVjdGlvbnMgaW5zaWRlIGEgc2VnbWVudCAKK29mIHRoZSBzY2F0dGVyIGxpc3QuCisKKworOC4gQ29udHJvbCBjb21tYW5kcworCitDb250cm9sIGNvbW1hbmRzIGNhbiBiZSBzZW50IHRvIHRoZSBkcml2ZXIgd2l0aCB3cml0ZSBvcGVyYXRpb25zIHRvCit0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtLiBUaGUgZ2VuZXJpYyBjb21tYW5kIHN5bnRheCBpcyB0aGUKK2ZvbGxvd2luZzoKKworICAgICAgZWNobyAiPHZlcmI+IDxwYXJhbWV0ZXJzPiIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgICAgIChhc3N1bWVzIGNvbnRyb2xsZXIgbnVtYmVyIGlzIDApCisKK1VzaW5nICJhbGwiIGZvciAiPHRhcmdldD4iIHBhcmFtZXRlciB3aXRoIHRoZSBjb21tYW5kcyBiZWxvdyB3aWxsCithcHBseSB0byBhbGwgdGFyZ2V0cyBvZiB0aGUgU0NTSSBjaGFpbiAoZXhjZXB0IHRoZSBjb250cm9sbGVyKS4KKworQXZhaWxhYmxlIGNvbW1hbmRzOgorCis4LjEgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kIGZhY3RvcgorCisgICAgc2V0c3luYyA8dGFyZ2V0PiA8cGVyaW9kIGZhY3Rvcj4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHBlcmlvZDogICAgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QuCisgICAgICAgICAgICAgICBNYXhpbXVtIHNwZWVkID0gMTAwMC8oNCpwZXJpb2QgZmFjdG9yKSBleGNlcHQgZm9yIHNwZWNpYWwKKyAgICAgICAgICAgICAgIGNhc2VzIGJlbG93LgorCisgICAgU3BlY2lmeSBhIHBlcmlvZCBvZiAyNTUsIHRvIGZvcmNlIGFzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlLgorCisgICAgICAxMCBtZWFucyAyNSBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMSBtZWFucyAzMCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisgICAgICAxMiBtZWFucyA1MCBuYW5vLXNlY29uZHMgc3luY2hyb25vdXMgcGVyaW9kCisKKzguMiBTZXQgd2lkZSBzaXplCisKKyAgICBzZXR3aWRlIDx0YXJnZXQ+IDxzaXplPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgc2l6ZTogICAgICAwPTggYml0cywgMT0xNmJpdHMKKworOC4zIFNldCBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworIAorICAgIHNldHRhZ3MgPHRhcmdldD4gPHRhZ3M+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICB0YWdzOiAgICAgIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworICAgICAgICAgICAgICAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIFNDU0lfTkNSX01BWF9UQUdTIChkZWZhdWx0OiA4KQorCis4LjQgU2V0IG9yZGVyIHR5cGUgZm9yIHRhZ2dlZCBjb21tYW5kCisKKyAgICBzZXRvcmRlciA8b3JkZXI+CisKKyAgICBvcmRlcjogICAgIDMgcG9zc2libGUgdmFsdWVzOgorICAgICAgICAgICAgICAgc2ltcGxlOiB1c2UgU0lNUExFIFRBRyBmb3IgYWxsIG9wZXJhdGlvbnMgKHJlYWQgYW5kIHdyaXRlKQorICAgICAgICAgICAgICAgb3JkZXJlZDogdXNlIE9SREVSRUQgVEFHIGZvciBhbGwgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgZGVmYXVsdDogdXNlIGRlZmF1bHQgdGFnIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBTSU1QTEUgIFRBRyBmb3IgcmVhZCAgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgT1JERVJFRCBUQUcgZm9yIHdyaXRlIG9wZXJhdGlvbnMKKworCis4LjUgU2V0IGRlYnVnIG1vZGUKKworICAgIHNldGRlYnVnIDxsaXN0IG9mIGRlYnVnIGZsYWdzPgorCisgICAgQXZhaWxhYmxlIGRlYnVnIGZsYWdzOgorICAgICAgICBhbGxvYzogICBwcmludCBpbmZvIGFib3V0IG1lbW9yeSBhbGxvY2F0aW9ucyAoY2NiLCBsY2IpCisgICAgICAgIHF1ZXVlOiAgIHByaW50IGluZm8gYWJvdXQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBjb21tYW5kIHN0YXJ0IHF1ZXVlCisgICAgICAgIHJlc3VsdDogIHByaW50IHNlbnNlIGRhdGEgb24gQ0hFQ0sgQ09ORElUSU9OIHN0YXR1cworICAgICAgICBzY2F0dGVyOiBwcmludCBpbmZvIGFib3V0IHRoZSBzY2F0dGVyIHByb2Nlc3MKKyAgICAgICAgc2NyaXB0czogcHJpbnQgaW5mbyBhYm91dCB0aGUgc2NyaXB0IGJpbmRpbmcgcHJvY2VzcworCXRpbnk6ICAgIHByaW50IG1pbmltYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uCisJdGltaW5nOiAgcHJpbnQgdGltaW5nIGluZm9ybWF0aW9uIG9mIHRoZSBOQ1IgY2hpcAorCW5lZ286ICAgIHByaW50IGluZm9ybWF0aW9uIGFib3V0IFNDU0kgbmVnb3RpYXRpb25zCisJcGhhc2U6ICAgcHJpbnQgaW5mb3JtYXRpb24gb24gc2NyaXB0IGludGVycnVwdGlvbnMKKworICAgIFVzZSAic2V0ZGVidWciIHdpdGggbm8gYXJndW1lbnQgdG8gcmVzZXQgZGVidWcgZmxhZ3MuCisKKworOC42IENsZWFyIHByb2ZpbGUgY291bnRlcnMKKworICAgIGNsZWFycHJvZgorCisgICAgVGhlIHByb2ZpbGUgY291bnRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIHRoZSBhbW91bnQgb2YKKyAgICBkYXRhIHRyYW5zZmVycmVkIHJlYWNoZXMgMTAwMCBHQiBpbiBvcmRlciB0byBhdm9pZCBvdmVyZmxvdy4KKyAgICBUaGUgImNsZWFycHJvZiIgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNsZWFyIHRoZXNlIGNvdW50ZXJzIGF0IGFueSB0aW1lLgorCisKKzguNyBTZXQgZmxhZyAobm9fZGlzYykKKyAKKyAgICBzZXRmbGFnIDx0YXJnZXQ+IDxmbGFnPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisKKyAgICBGb3IgdGhlIG1vbWVudCwgb25seSBvbmUgZmxhZyBpcyBhdmFpbGFibGU6CisKKyAgICAgICAgbm9fZGlzYzogICBub3QgYWxsb3cgdGFyZ2V0IHRvIGRpc2Nvbm5lY3QuCisKKyAgICBEbyBub3Qgc3BlY2lmeSBhbnkgZmxhZyBpbiBvcmRlciB0byByZXNldCB0aGUgZmxhZy4gRm9yIGV4YW1wbGU6CisgICAgLSBzZXRmbGFnIDQKKyAgICAgIHdpbGwgcmVzZXQgbm9fZGlzYyBmbGFnIGZvciB0YXJnZXQgNCwgc28gd2lsbCBhbGxvdyBpdCBkaXNjb25uZWN0aW9ucy4KKyAgICAtIHNldGZsYWcgYWxsCisgICAgICB3aWxsIGFsbG93IGRpc2Nvbm5lY3Rpb24gZm9yIGFsbCBkZXZpY2VzIG9uIHRoZSBTQ1NJIGJ1cy4KKworCis4LjggU2V0IHZlcmJvc2UgbGV2ZWwKKworICAgIHNldHZlcmJvc2UgI2xldmVsCisKKyAgICBUaGUgZHJpdmVyIGRlZmF1bHQgdmVyYm9zZSBsZXZlbCBpcyAxLiBUaGlzIGNvbW1hbmQgYWxsb3dzIHRvIGNoYW5nZSAKKyAgICB0aCBkcml2ZXIgdmVyYm9zZSBsZXZlbCBhZnRlciBib290LXVwLgorCis4LjkgUmVzZXQgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKworICAgIHJlc2V0ZGV2IDx0YXJnZXQ+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIHNlbmQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgdG8gdGhlIHRhcmdldC4KKyAgICAoT25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgYW5kIHByb3ZpZGVkIGZvciB0ZXN0IHB1cnBvc2UpCisKKzguMTAgQWJvcnQgYWxsIHRhc2tzIG9mIGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICBjbGVhcmRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQUJPUlQgbWVzc2FnZSB0byBhbGwgdGhlIGxvZ2ljYWwgdW5pdHMgCisgICAgb2YgdGhlIHRhcmdldC4KKyAgICAoT25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgYW5kIHByb3ZpZGVkIGZvciB0ZXN0IHB1cnBvc2UpCisKKworOS4gQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisKK0lmIHRoZSBmaXJtd2FyZSBvZiBhbGwgeW91ciBkZXZpY2VzIGlzIHBlcmZlY3QgZW5vdWdoLCBhbGwgdGhlCitmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBjYW4gYmUgZW5hYmxlZCBhdCBzdGFydC11cC4gIEhvd2V2ZXIsCitpZiBvbmx5IG9uZSBoYXMgYSBmbGF3IGZvciBzb21lIFNDU0kgZmVhdHVyZSwgeW91IGNhbiBkaXNhYmxlIHRoZQorc3VwcG9ydCBieSB0aGUgZHJpdmVyIG9mIHRoaXMgZmVhdHVyZSBhdCBsaW51eCBzdGFydC11cCBhbmQgZW5hYmxlCit0aGlzIGZlYXR1cmUgYWZ0ZXIgYm9vdC11cCBvbmx5IGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBpdCBzYWZlbHkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9QUk9GSUxFX1NVUFBPUlQgIChkZWZhdWx0IGFuc3dlcjogbikKKyAgICBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBmb3IgcHJvZmlsaW5nIGluZm9ybWF0aW9uIHRvIGJlIGdhdGhlcmVkIAorICAgIGFuZCBwcmludGVkIG91dCB0aHJvdWdoIHRoZSBwcm9jIGZpbGUgc3lzdGVtLiBUaGlzIGZlYXR1cmVzIG1heSAKKyAgICBpbXBhY3QgcGVyZm9ybWFuY2VzLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfSU9NQVBQRUQgICAgICAgKGRlZmF1bHQgYW5zd2VyOiBuKQorICAgIEFuc3dlciAieSIgaWYgeW91IHN1c3BlY3QgeW91ciBtb3RoZXIgYm9hcmQgdG8gbm90IGFsbG93IG1lbW9yeSBtYXBwZWQgSS9PLgorICAgIE1heSBzbG93IGRvd24gcGVyZm9ybWFuY2UgYSBsaXR0bGUuICBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBieQorICAgIExpbnV4L1BQQyBhbmQgaXMgdXNlZCBubyBtYXR0ZXIgd2hhdCB5b3Ugc2VsZWN0IGhlcmUuICBMaW51eC9QUEMKKyAgICBzdWZmZXJzIG5vIHBlcmZvcm1hbmNlIGxvc3Mgd2l0aCB0aGlzIG9wdGlvbiBzaW5jZSBhbGwgSU8gaXMgbWVtb3J5CisgICAgbWFwcGVkIGFueXdheS4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0RFRkFVTFRfVEFHUyAgICAoZGVmYXVsdCBhbnN3ZXI6IDgpCisgICAgRGVmYXVsdCB0YWdnZWQgY29tbWFuZCBxdWV1ZSBkZXB0aC4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX01BWF9UQUdTICAgICAgICAgKGRlZmF1bHQgYW5zd2VyOiA4KQorICAgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzIAorICAgIHRoYXQgY2FuIGJlIHF1ZXVlZCB0byBhIGRldmljZS4gVGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIDMyLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lOQyAgICAgICAgICAgIChkZWZhdWx0IGFuc3dlcjogNSkKKyAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGZyZXF1ZW5jeSBpbiBNSHogdGhlIGRyaXZlciAKKyAgICB3aWxsIHVzZSBhdCBib290IHRpbWUgZm9yIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXIgbmVnb3RpYXRpb25zLgorICAgIFRoaXMgZnJlcXVlbmN5IGNhbiBiZSBjaGFuZ2VkIGxhdGVyIHdpdGggdGhlICJzZXRzeW5jIiBjb250cm9sIGNvbW1hbmQuCisgICAgMCBtZWFucyAiYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIi4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0ZPUkNFX1NZTkNfTkVHTyAoZGVmYXVsdCBhbnN3ZXI6IG4pCisgICAgRm9yY2Ugc3luY2hyb25vdXMgbmVnb3RpYXRpb24gZm9yIGFsbCBTQ1NJLTIgZGV2aWNlcy4KKyAgICBTb21lIFNDU0ktMiBkZXZpY2VzIGRvIG5vdCByZXBvcnQgdGhpcyBmZWF0dXJlIGluIGJ5dGUgNyBvZiBpbnF1aXJ5IAorICAgIHJlc3BvbnNlIGJ1dCBkbyBzdXBwb3J0IGl0IHByb3Blcmx5IChUQU1BUkFDSyBzY2FubmVycyBmb3IgZXhhbXBsZSkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9OT19ESVNDT05ORUNUICAgKGRlZmF1bHQgYW5kIG9ubHkgcmVhc29uYWJsZSBhbnN3ZXI6IG4pCisgICAgSWYgeW91IHN1c3BlY3QgYSBkZXZpY2Ugb2YgeW91cnMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBkaXNjb25uZWN0aW9ucywKKyAgICB5b3UgY2FuIGFuc3dlciAieSIuIFRoZW4sIGFsbCBTQ1NJIGRldmljZXMgd2lsbCBuZXZlciBkaXNjb25uZWN0IHRoZSBidXMgCisgICAgZXZlbiB3aGlsZSBwZXJmb3JtaW5nIGxvbmcgU0NTSSBvcGVyYXRpb25zLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lNQklPU19DT01QQVQKKyAgICBHZW51aW5lIFNZTUJJT1MgYm9hcmRzIHVzZSBHUElPMCBpbiBvdXRwdXQgZm9yIGNvbnRyb2xsZXIgTEVEIGFuZCBHUElPMyAKKyAgICBiaXQgYXMgYSBmbGFnIGluZGljYXRpbmcgc2luZ2xlZC1lbmRlZC9kaWZmZXJlbnRpYWwgaW50ZXJmYWNlLgorICAgIElmIGFsbCB0aGUgYm9hcmRzIG9mIHlvdXIgc3lzdGVtIGFyZSBnZW51aW5lIFNZTUJJT1MgYm9hcmRzIG9yIHVzZQorICAgIEJJT1MgYW5kIGRyaXZlcnMgZnJvbSBTWU1CSU9TLCB5b3Ugd291bGQgd2FudCB0byBlbmFibGUgdGhpcyBvcHRpb24uCisgICAgVGhpcyBvcHRpb24gbXVzdCBOT1QgYmUgZW5hYmxlZCBpZiB5b3VyIHN5c3RlbSBoYXMgYXQgbGVhc3Qgb25lIDUzQzhYWCAKKyAgICBiYXNlZCBzY3NpIGJvYXJkIHdpdGggYSB2ZW5kb3Itc3BlY2lmaWMgQklPUy4KKyAgICBGb3IgZXhhbXBsZSwgVGVrcmFtIERDLTM5MC9VLCBEQy0zOTAvVyBhbmQgREMtMzkwL0Ygc2NzaSBjb250cm9sbGVycyAKKyAgICB1c2UgYSB2ZW5kb3Itc3BlY2lmaWMgQklPUyBhbmQgYXJlIGtub3duIHRvIG5vdCB1c2UgU1lNQklPUyBjb21wYXRpYmxlIAorICAgIEdQSU8gd2lyaW5nLiBTbywgdGhpcyBvcHRpb24gbXVzdCBub3QgYmUgZW5hYmxlZCBpZiB5b3VyIHN5c3RlbSBoYXMgCisgICAgc3VjaCBhIGJvYXJkIGluc3RhbGxlZC4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX05WUkFNX0RFVEVDVAorICAgIEVuYWJsZSBzdXBwb3J0IGZvciByZWFkaW5nIHRoZSBzZXJpYWwgTlZSQU0gZGF0YSBvbiBTeW1iaW9zIGFuZAorICAgIHNvbWUgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzLCBhbmQgVGVrcmFtIERDMzkwVy9VL0YgY2FyZHMuIFVzZWZ1bCBmb3IKKyAgICBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBTeW1iaW9zIGNvbXBhdGlibGUgY29udHJvbGxlciB3aGVyZSBhdCBsZWFzdAorICAgIG9uZSBoYXMgYSBzZXJpYWwgTlZSQU0sIG9yIGZvciBhIHN5c3RlbSB3aXRoIGEgbWl4dHVyZSBvZiBTeW1iaW9zIGFuZAorICAgIFRla3JhbSBjYXJkcy4gRW5hYmxlcyBzZXR0aW5nIHRoZSBib290IG9yZGVyIG9mIGhvc3QgYWRhcHRvcnMKKyAgICB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvcmRlciBvciAicmV2ZXJzZSBwcm9iZSIgb3JkZXIuIAorICAgIEFsc28gZW5hYmxlcyBTeW1iaW9zIGFuZCBUZWtyYW0gY2FyZHMgdG8gYmUgZGlzdGluZ3Vpc2hlZCBzbworICAgIENPTkZJR19TQ1NJX05DUjUzQzhYWF9TWU1CSU9TX0NPTVBBVCBtYXkgYmUgc2V0IGluIGEgc3lzdGVtIHdpdGggYQorICAgIG1peHR1cmUgb2YgU3ltYmlvcyBhbmQgVGVrcmFtIGNhcmRzIHNvIHRoZSBTeW1iaW9zIGNhcmRzIGNhbiBtYWtlIHVzZSBvZgorICAgIHRoZSBmdWxsIHJhbmdlIG9mIFN5bWJpb3MgZmVhdHVyZXMsIGRpZmZlcmVudGlhbCwgbGVkIHBpbiwgd2l0aG91dAorICAgIGNhdXNpbmcgcHJvYmxlbXMgZm9yIHRoZSBUZWtyYW0gY2FyZChzKS4KKworMTAuIEJvb3Qgc2V0dXAgY29tbWFuZHMKKworMTAuMSBTeW50YXgKKworU2V0dXAgY29tbWFuZHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGVpdGhlciBhdCBib290IHRpbWUgb3IgYXMgYSAKK3N0cmluZyB2YXJpYWJsZSB1c2luZyAnaW5zbW9kJy4KKworQSBib290IHNldHVwIGNvbW1hbmQgZm9yIHRoZSBuY3I1M2M4eHggKHN5bTUzYzh4eCkgZHJpdmVyIGJlZ2lucyB3aXRoIHRoZSAKK2RyaXZlciBuYW1lICJuY3I1M2M4eHg9IihzeW01M2M4eHgpLiBUaGUga2VybmVsIHN5bnRheCBwYXJzZXIgdGhlbiBleHBlY3RzIAorYW4gb3B0aW9ubmFsIGxpc3Qgb2YgaW50ZWdlcnMgc2VwYXJhdGVkIHdpdGggY29tbWEgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgCitsaXN0IG9mICBjb21tYS1zZXBhcmF0ZWQgc3RyaW5ncy4gRXhhbXBsZSBvZiBib290IHNldHVwIGNvbW1hbmQgdW5kZXIgbGlsbyAKK3Byb21wdDoKKworbGlsbzogbGludXggcm9vdD0vZGV2L2hkYTIgbmNyNTNjOHh4PXRhZ3M6NCxzeW5jOjEwLGRlYnVnOjB4MjAwCisKKy0gZW5hYmxlIHRhZ2dlZCBjb21tYW5kcywgdXAgdG8gNCB0YWdnZWQgY29tbWFuZHMgcXVldWVkLgorLSBzZXQgc3luY2hyb25vdXMgbmVnb3RpYXRpb24gc3BlZWQgdG8gMTAgTWVnYS10cmFuc2ZlcnMgLyBzZWNvbmQuCistIHNldCBERUJVR19ORUdPIGZsYWcuCisKK1NpbmNlIGNvbW1hIHNlZW1zIG5vdCB0byBiZSBhbGxvd2VkIHdoZW4gZGVmaW5pbmcgYSBzdHJpbmcgdmFyaWFibGUgdXNpbmcgIAorJ2luc21vZCcsIHRoZSBkcml2ZXIgYWxzbyBhY2NlcHRzIDxzcGFjZT4gYXMgb3B0aW9uIHNlcGFyYXRvci4gCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBpbnN0YWxsIGRyaXZlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIAorYWJvdmUuCisKKyAgICBpbnNtb2QgbmNyNTNjOHh4Lm8gbmNyNTNjOHh4PSJ0YWdzOjQgc3luYzoxMCBkZWJ1ZzoweDIwMCIKKworRm9yIHRoZSBtb21lbnQsIHRoZSBpbnRlZ2VyIGxpc3Qgb2YgYXJndW1lbnRzIGlzIGRpc2NhcmRlZCBieSB0aGUgZHJpdmVyLiAKK0l0IHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIGluIG9yZGVyIHRvIGFsbG93IGEgcGVyIGNvbnRyb2xsZXIgc2V0dXAuCisKK0VhY2ggc3RyaW5nIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzICJrZXl3b3JkOnZhbHVlIi4gT25seSBsb3dlci1jYXNlIAorY2hhcmFjdGVycyBhbmQgZGlnaXRzIGFyZSBhbGxvd2VkLgorCitJbiBhIHN5c3RlbSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIDUzQzh4eCBhZGFwdGVycyBpbnNtb2Qgd2lsbCBpbnN0YWxsIHRoZSAKK3NwZWNpZmllZCBkcml2ZXIgb24gZWFjaCBhZGFwdGVyLiBUbyBleGNsdWRlIGEgY2hpcCB1c2UgdGhlICdleGNsJyBrZXl3b3JkLgorCitUaGUgc2VxdWVuY2Ugb2YgY29tbWFuZHMsIAorCisgICAgaW5zbW9kIHN5bTUzYzh4eCBzeW01M2M4eHg9ZXhjbDoweDE0MDAKKyAgICBpbnNtb2QgbmNyNTNjOHh4CisKK2luc3RhbGxzIHRoZSBzeW01M2M4eHggZHJpdmVyIG9uIGFsbCBhZGFwdGVycyBleGNlcHQgdGhlIG9uZSBhdCBJTyBwb3J0IAorYWRkcmVzcyAweDE0MDAgYW5kIHRoZW4gaW5zdGFsbHMgdGhlIG5jcjUzYzh4eCBkcml2ZXIgdG8gdGhlIGFkYXB0ZXIgYXQgSU8gCitwb3J0IGFkZHJlc3MgMHgxNDAwLgorCisKKzEwLjIgQXZhaWxhYmxlIGFyZ3VtZW50cworCisxMC4yLjEgIE1hc3RlciBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgbXBhcjp5ICAgICBlbmFibGVkCisgICAgICAgIG1wYXI6biAgICAgZGlzYWJsZWQKKworMTAuMi4yICBTY3NpIHBhcml0eSBjaGVja2luZworICAgICAgICBzcGFyOnkgICAgIGVuYWJsZWQKKyAgICAgICAgc3BhcjpuICAgICBkaXNhYmxlZAorCisxMC4yLjMgIFNjc2kgZGlzY29ubmVjdGlvbnMKKyAgICAgICAgZGlzYzp5ICAgICBlbmFibGVkCisgICAgICAgIGRpc2M6biAgICAgZGlzYWJsZWQKKyAKKzEwLjIuNCAgU3BlY2lhbCBmZWF0dXJlcworICAgT25seSBhcHBseSB0byA4MTBBLCA4MjVBLCA4NjAsIDg3NSBhbmQgODk1IGNvbnRyb2xsZXJzLgorICAgSGF2ZSBubyBlZmZlY3Qgd2l0aCBvdGhlciBvbmVzLgorICAgICAgICBzcGVjZjp5ICAgIChvciAxKSBlbmFibGVkCisgICAgICAgIHNwZWNmOm4gICAgKG9yIDApIGRpc2FibGVkCisgICAgICAgIHNwZWNmOjMgICAgICAgICAgIGVuYWJsZWQgZXhjZXB0IE1lbW9yeSBXcml0ZSBBbmQgSW52YWxpZGF0ZQorICAgVGhlIGRlZmF1bHQgZHJpdmVyIHNldHVwIGlzICdzcGVjZjozJy4gQXMgYSBjb25zZXF1ZW5jZSwgb3B0aW9uICdzcGVjZjp5JyAKKyAgIG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSBib290IHNldHVwIGNvbW1hbmQgdG8gZW5hYmxlIE1lbW9yeSBXcml0ZSBBbmQgCisgICBJbnZhbGlkYXRlLgorCisxMC4yLjUgIFVsdHJhIFNDU0kgc3VwcG9ydAorICAgT25seSBhcHBseSB0byA4NjAsIDg3NSwgODk1LCA4OTVhLCA4OTYsIDEwMTAgYW5kIDEwMTBfNjYgY29udHJvbGxlcnMuCisgICBIYXZlIG5vIGVmZmVjdCB3aXRoIG90aGVyIG9uZXMuCisgICAgICAgIHVsdHJhOm4gICAgQWxsIHVsdHJhIHNwZWVkcyBlbmFibGVkCisgICAgICAgIHVsdHJhOjIgICAgVWx0cmEyIGVuYWJsZWQKKyAgICAgICAgdWx0cmE6MSAgICBVbHRyYSBlbmFibGVkCisgICAgICAgIHVsdHJhOjAgICAgVWx0cmEgc3BlZWRzIGRpc2FibGVkCisKKzEwLjIuNiAgRGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgIHRhZ3M6MCAgICAgKG9yIHRhZ3M6MSApIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQKKyAgICAgICAgdGFnczojdGFncyAoI3RhZ3MgID4gMSkgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBlbmFibGVkCisgICN0YWdzIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBtYXggcXVldWVkIGNvbW1hbmRzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgorICBUaGlzIG9wdGlvbiBhbHNvIGFsbG93cyB0byBzcGVjaWZ5IGEgY29tbWFuZCBxdWV1ZSBkZXB0aCBmb3IgZWFjaCBkZXZpY2UgCisgIHRoYXQgc3VwcG9ydCB0YWdnZWQgY29tbWFuZCBxdWV1ZWluZy4KKyAgRXhhbXBsZToKKyAgICAgIG5jcjUzYzh4eD10YWdzOjEwL3QydDNxMTYtdDVxMjQvdDF1MnEzMgorICAgICAgICAgICAgICAgd2lsbCBzZXQgZGV2aWNlcyBxdWV1ZSBkZXB0aCBhcyBmb2xsb3c6CisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICMyIGFuZCB0YXJnZXQgIzMgICAgICAgICAgICAgICAgICAtPiAxNiBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMCB0YXJnZXQgIzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IDI0IGNvbW1hbmRzLAorICAgICAgLSBjb250cm9sbGVyICMxIHRhcmdldCAjMSBsb2dpY2FsIHVuaXQgIzIgICAgICAgICAgICAgICAgLT4gMzIgY29tbWFuZHMsCisgICAgICAtIGFsbCBvdGhlciBsb2dpY2FsIHVuaXRzIChhbGwgdGFyZ2V0cywgYWxsIGNvbnRyb2xsZXJzKSAtPiAxMCBjb21tYW5kcy4KKworMTAuMi43ICBEZWZhdWx0IHN5bmNocm9ub3VzIHBlcmlvZCBmYWN0b3IKKyAgICAgICAgc3luYzoyNTUgICAgIGRpc2FibGVkIChhc3luY2hyb25vdXMgdHJhbnNmZXIgbW9kZSkKKyAgICAgICAgc3luYzojZmFjdG9yCisgICNmYWN0b3IgPSAxMCAgICAgVWx0cmEtMiBTQ1NJIDQwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPSAxMSAgICAgVWx0cmEtMiBTQ1NJIDMzIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPCAyNSAgICAgVWx0cmEgICBTQ1NJIDIwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kCisgICNmYWN0b3IgPCA1MCAgICAgRmFzdCAgICBTQ1NJLTIKKworICBJbiBhbGwgY2FzZXMsIHRoZSBkcml2ZXIgd2lsbCB1c2UgdGhlIG1pbmltdW0gdHJhbnNmZXIgcGVyaW9kIHN1cHBvcnRlZCBieSAKKyAgY29udHJvbGxlcnMgYWNjb3JkaW5nIHRvIE5DUjUzQzhYWCBjaGlwIHR5cGUuCisKKzEwLjIuOCAgTmVnb3RpYXRlIHN5bmNocm9ub3VzIHdpdGggYWxsIGRldmljZXMKKyAgICAgICAgKGZvcmNlIHN5bmMgbmVnbykKKyAgICAgICAgZnNuOnkgICAgICBlbmFibGVkCisgICAgICAgIGZzbjpuICAgICAgZGlzYWJsZWQKKworMTAuMi45ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgdmVyYjowICAgICBtaW5pbWFsCisgICAgICAgIHZlcmI6MSAgICAgbm9ybWFsCisgICAgICAgIHZlcmI6MiAgICAgdG9vIG11Y2gKKworMTAuMi4xMCBEZWJ1ZyBtb2RlCisgICAgICAgIGRlYnVnOjAJIGNsZWFyIGRlYnVnIGZsYWdzCisgICAgICAgIGRlYnVnOiN4ICAgc2V0IGRlYnVnIGZsYWdzCisgICN4IGlzIGFuIGludGVnZXIgdmFsdWUgY29tYmluaW5nIHRoZSBmb2xsb3dpbmcgcG93ZXItb2YtMiB2YWx1ZXM6CisgIERFQlVHX0FMTE9DICAgICAgIDB4MQorICBERUJVR19QSEFTRSAgICAgICAweDIKKyAgREVCVUdfUE9MTCAgICAgICAgMHg0CisgIERFQlVHX1FVRVVFICAgICAgIDB4OAorICBERUJVR19SRVNVTFQgICAgIDB4MTAKKyAgREVCVUdfU0NBVFRFUiAgICAweDIwCisgIERFQlVHX1NDUklQVCAgICAgMHg0MAorICBERUJVR19USU5ZICAgICAgIDB4ODAKKyAgREVCVUdfVElNSU5HICAgIDB4MTAwCisgIERFQlVHX05FR08gICAgICAweDIwMAorICBERUJVR19UQUdTICAgICAgMHg0MDAKKyAgREVCVUdfRlJFRVpFICAgIDB4ODAwCisgIERFQlVHX1JFU1RBUlQgIDB4MTAwMAorCisgIFlvdSBjYW4gcGxheSBzYWZlbHkgd2l0aCBERUJVR19ORUdPLiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIGZsYWdzIG1heSAKKyAgZ2VuZXJhdGUgYnVuY2hlcyBvZiBzeXNsb2cgbWVzc2FnZXMuIAorCisxMC4yLjExIEJ1cnN0IG1heAorICAgICAgICBidXJzdDowICAgIGJ1cnN0IGRpc2FibGVkCisgICAgICAgIGJ1cnN0OjI1NSAgZ2V0IGJ1cnN0IGxlbmd0aCBmcm9tIGluaXRpYWwgSU8gcmVnaXN0ZXIgc2V0dGluZ3MuCisgICAgICAgIGJ1cnN0OiN4ICAgYnVyc3QgZW5hYmxlZCAoMTw8I3ggYnVyc3QgdHJhbnNmZXJzIG1heCkKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBsb2cgYmFzZSAyIG9mIHRoZSBidXJzdCB0cmFuc2ZlcnMgbWF4LgorICBUaGUgTkNSNTNDODc1IGFuZCBOQ1I1M0M4MjVBIHN1cHBvcnQgdXAgdG8gMTI4IGJ1cnN0IHRyYW5zZmVycyAoI3ggPSA3KS4KKyAgT3RoZXIgY2hpcHMgb25seSBzdXBwb3J0IHVwIHRvIDE2ICgjeCA9IDQpLgorICBUaGlzIGlzIGEgbWF4aW11bSB2YWx1ZS4gVGhlIGRyaXZlciBzZXQgdGhlIGJ1cnN0IGxlbmd0aCBhY2NvcmRpbmcgdG8gY2hpcCAKKyAgYW5kIHJldmlzaW9uIGlkcy4gQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHVzZXMgdGhlIG1heGltdW0gdmFsdWUgc3VwcG9ydGVkIAorICBieSB0aGUgY2hpcC4KKworMTAuMi4xMiBMRUQgc3VwcG9ydAorICAgICAgICBsZWQ6MSAgICAgIGVuYWJsZSAgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkOjAgICAgICBkaXNhYmxlIExFRCBzdXBwb3J0CisgIERvbm5vdCBlbmFibGUgTEVEIHN1cHBvcnQgaWYgeW91ciBzY3NpIGJvYXJkIGRvZXMgbm90IHVzZSBTRE1TIEJJT1MuCisgIChTZWUgJ0NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycpCisKKzEwLjIuMTMgTWF4IHdpZGUKKyAgICAgICAgd2lkZToxICAgICAgd2lkZSBzY3NpIGVuYWJsZWQKKyAgICAgICAgd2lkZTowICAgICAgd2lkZSBzY3NpIGRpc2FibGVkCisgIFNvbWUgc2NzaSBib2FyZHMgdXNlIGEgODc1ICh1bHRyYSB3aWRlKSBhbmQgb25seSBzdXBwbHkgbmFycm93IGNvbm5lY3RvcnMuCisgIElmIHlvdSBoYXZlIGNvbm5lY3RlZCBhIHdpZGUgZGV2aWNlIHdpdGggYSA1MCBwaW5zIHRvIDY4IHBpbnMgY2FibGUgCisgIGNvbnZlcnRlciwgYW55IGFjY2VwdGVkIHdpZGUgbmVnb3RpYXRpb24gd2lsbCBicmVhayBmdXJ0aGVyIGRhdGEgdHJhbnNmZXJzLgorICBJbiBzdWNoIGEgY2FzZSwgdXNpbmcgIndpZGU6MCIgaW4gdGhlIGJvb3R1cCBjb21tYW5kIHdpbGwgYmUgaGVscGZ1bGwuIAorCisxMC4yLjE0IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgIGRpZmY6MAluZXZlciBzZXQgdXAgZGlmZiBtb2RlCisgICAgICAgIGRpZmY6MQlzZXQgdXAgZGlmZiBtb2RlIGlmIEJJT1Mgc2V0IGl0CisgICAgICAgIGRpZmY6MglhbHdheXMgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmOjMJc2V0IGRpZmYgbW9kZSBpZiBHUElPMyBpcyBub3Qgc2V0CisKKzEwLjIuMTUgSVJRIG1vZGUKKyAgICAgICAgaXJxbTowICAgICBhbHdheXMgb3BlbiBkcmFpbgorICAgICAgICBpcnFtOjEgICAgIHNhbWUgYXMgaW5pdGlhbCBzZXR0aW5ncyAoYXNzdW1lZCBCSU9TIHNldHRpbmdzKQorICAgICAgICBpcnFtOjIgICAgIGFsd2F5cyB0b3RlbSBwb2xlCisgICAgICAgIGlycW06MHgxMCAgZHJpdmVyIHdpbGwgbm90IHVzZSBTQV9TSElSUSBmbGFnIHdoZW4gcmVxdWVzdGluZyBpcnEKKyAgICAgICAgaXJxbToweDIwICBkcml2ZXIgd2lsbCBub3QgdXNlIFNBX0lOVEVSUlVQVCBmbGFnIHdoZW4gcmVxdWVzdGluZyBpcnEKKworICAgIChCaXRzIDB4MTAgYW5kIDB4MjAgY2FuIGJlIGNvbWJpbmVkIHdpdGggaGFyZHdhcmUgaXJxIG1vZGUgb3B0aW9uKQorCisxMC4yLjE2IFJldmVyc2UgcHJvYmUKKyAgICAgICAgcmV2cHJvYjpuICAgcHJvYmUgY2hpcCBpZHMgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gaW4gdGhpcyBvcmRlcjoKKyAgICAgICAgICAgICAgICAgICAgODEwLCA4MTUsIDgyMCwgODYwLCA4NzUsIDg4NSwgODk1LCA4OTYKKyAgICAgICAgcmV2cHJvYjp5ICAgcHJvYmUgY2hpcCBpZHMgaW4gdGhlIHJldmVyc2Ugb3JkZXIuCisKKzEwLjIuMTcgRml4IHVwIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgICAgICAgIHBjaWZpeDo8b3B0aW9uIGJpdHM+CisKKyAgICBBdmFpbGFibGUgb3B0aW9uIGJpdHM6CisgICAgICAgIDB4MDogICBObyBhdHRlbXB0IHRvIGZpeCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSByZWdpc3RlcnMgdmFsdWVzLgorICAgICAgICAweDE6ICAgU2V0IFBDSSBjYWNoZS1saW5lIHNpemUgcmVnaXN0ZXIgaWYgbm90IHNldC4KKyAgICAgICAgMHgyOiAgIFNldCB3cml0ZSBhbmQgaW52YWxpZGF0ZSBiaXQgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisgICAgICAgIDB4NDogICBJbmNyZWFzZSBpZiBuZWNlc3NhcnkgUENJIGxhdGVuY3kgdGltZXIgYWNjb3JkaW5nIHRvIGJ1cnN0IG1heC4KKworICAgIFVzZSAncGNpZml4OjcnIGluIG9yZGVyIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gZml4IHVwIGFsbCBQQ0kgZmVhdHVyZXMuCisKKzEwLjIuMTggU2VyaWFsIE5WUkFNCisgICAgICAgIG52cmFtOm4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KKyAgICAgICAgbnZyYW06eSAgICAgdGVzdCBjb250cm9sbGVycyBmb3Igb25ib2FyZCBzZXJpYWwgTlZSQU0KKyAgICAgICAgKGFsdGVybmF0ZSBiaW5hcnkgZm9ybSkKKyAgICAgICAgbXZyYW09PGJpdHMgb3B0aW9ucz4KKyAgICAgICAgMHgwMSAgIGxvb2sgZm9yIE5WUkFNICAoZXF1aXZhbGVudCB0byBudnJhbT15KQorICAgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwNCAgIGlnbm9yZSBOVlJBTSAiV2lkZSBuZWdvdGlhdGlvbiIgIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHgwOCAgIGlnbm9yZSBOVlJBTSAiU2NhbiBhdCBib290IHRpbWUiIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworMTAuMi4xOSBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgYnVzY2hrOjxvcHRpb24gYml0cz4KKworICAgIEF2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAgICAgMHgwOiAgIE5vIGNoZWNrLgorICAgICAgICAweDE6ICAgQ2hlY2sgYW5kIGRvIG5vdCBhdHRhY2ggdGhlIGNvbnRyb2xsZXIgb24gZXJyb3IuICAKKyAgICAgICAgMHgyOiAgIENoZWNrIGFuZCBqdXN0IHdhcm4gb24gZXJyb3IuCisgICAgICAgIDB4NDogICBEaXNhYmxlIFNDU0kgYnVzIGludGVncml0eSBjaGVja2luZy4KKworMTAuMi4yMCBFeGNsdWRlIGEgaG9zdCBmcm9tIGJlaW5nIGF0dGFjaGVkCisgICAgICAgIGV4Y2w9PGlvX2FkZHJlc3M+CisKKyAgICBQcmV2ZW50IGhvc3QgYXQgYSBnaXZlbiBpbyBhZGRyZXNzIGZyb20gYmVpbmcgYXR0YWNoZWQuCisgICAgRm9yIGV4YW1wbGUgJ25jcjUzYzh4eD1leGNsOjB4YjQwMCxleGNsOjB4YzAwMCcgaW5kaWNhdGUgdG8gdGhlIAorICAgIG5jcjUzYzh4eCBkcml2ZXIgbm90IHRvIGF0dGFjaCBob3N0cyBhdCBhZGRyZXNzIDB4YjQwMCBhbmQgMHhjMDAwLgorCisxMC4yLjIxIFN1Z2dlc3QgYSBkZWZhdWx0IFNDU0kgaWQgZm9yIGhvc3RzCisgICAgICAgIGhvc3RpZDoyNTUJbm8gaWQgc3VnZ2VzdGVkLgorICAgICAgICBob3N0aWQ6I3ggICAoMCA8IHggPCA3KSB4IHN1Z2dlc3RlZCBmb3IgaG9zdHMgU0NTSSBpZC4KKworICAgIElmIGEgaG9zdCBTQ1NJIGlkIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBOVlJBTSwgdGhlIGRyaXZlciB3aWxsIGlnbm9yZSAKKyAgICBhbnkgdmFsdWUgc3VnZ2VzdGVkIGFzIGJvb3Qgb3B0aW9uLiBPdGhlcndpc2UsIGlmIGEgc3VnZ2VzdGVkIHZhbHVlIAorICAgIGRpZmZlcmVudCBmcm9tIDI1NSBoYXMgYmVlbiBzdXBwbGllZCwgaXQgd2lsbCB1c2UgaXQuIE90aGVyd2lzZSwgaXQgd2lsbCAKKyAgICB0cnkgdG8gZGVkdWNlIHRoZSB2YWx1ZSBwcmV2aW91c2x5IHNldCBpbiB0aGUgaGFyZHdhcmUgYW5kIHVzZSB2YWx1ZSAKKyAgICA3IGlmIHRoZSBoYXJkd2FyZSB2YWx1ZSBpcyB6ZXJvLgorCisxMC4yLjIyIEVuYWJsZSB1c2Ugb2YgSU1NRURJQVRFIEFSQklUUkFUSU9OCisgICAgICAgIChvbmx5IHN1cHBvcnRlZCBieSB0aGUgc3ltNTNjOHh4IGRyaXZlci4gU2VlIDEwLjcgZm9yIG1vcmUgZGV0YWlscykKKyAgICAgICAgaWFyYjowICAgIGRvIG5vdCB1c2UgdGhpcyBmZWF0dXJlLgorICAgICAgICBpYXJiOiN4ICAgdXNlIHRoaXMgZmVhdHVyZSBhY2NvcmRpbmcgdG8gYml0IGZpZWxkcyBhcyBmb2xsb3c6CisKKyAgICBiaXQgMCAoMSkgOiBlbmFibGUgSUFSQiBlYWNoIHRpbWUgdGhlIGluaXRpYXRvciBoYXMgYmVlbiByZXNlbGVjdGVkIAorICAgICAgICAgICAgICAgIHdoZW4gaXQgYXJiaXRyYXRlZCBmb3IgdGhlIFNDU0kgQlVTLgorICAgICgjeCA+PiA0KSA6IG1heGltdW0gbnVtYmVyIG9mIHN1Y2Nlc3NpdmUgc2V0dGluZ3Mgb2YgSUFSQiBpZiB0aGUgaW5pdGlhdG9yIAorICAgICAgICAgICAgICAgIHdpbiBhcmJpdHJhdGlvbiBhbmQgaXQgaGFzIG90aGVyIGNvbW1hbmRzIHRvIHNlbmQgdG8gYSBkZXZpY2UuCisKK0Jvb3QgZmFpbCBzYWZlCisgICAgc2FmZTp5CWxvYWQgdGhlIGZvbGxvd2luZyBhc3N1bWVkIGZhaWwgc2FmZSBpbml0aWFsIHNldHVwCisKKyAgbWFzdGVyIHBhcml0eQkJCWRpc2FibGVkCQltcGFyOm4KKyAgc2NzaSBwYXJpdHkJCQllbmFibGVkCQkJc3Bhcjp5CisgIGRpc2Nvbm5lY3Rpb25zCQlub3QgYWxsb3dlZAkJZGlzYzpuCisgIHNwZWNpYWwgZmVhdHVyZXMJCWRpc2FibGVkCQlzcGVjZjpuCisgIHVsdHJhIHNjc2kJCQlkaXNhYmxlZAkJdWx0cmE6bgorICBmb3JjZSBzeW5jIG5lZ290aWF0aW9uCWRpc2FibGVkCQlmc246bgorICByZXZlcnNlIHByb2JlCQkJZGlzYWJsZWQJCXJldnByb2I6bgorICBQQ0kgZml4IHVwICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCAgICAgICAgICAgICAgICBwY2lmaXg6MAorICBzZXJpYWwgTlZSQU0gICAgICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgICBudnJhbTp5CisgIHZlcmJvc2l0eSBsZXZlbAkJMgkJCXZlcmI6MgorICB0YWdnZWQgY29tbWFuZCBxdWV1aW5nCWRpc2FibGVkCQl0YWdzOjAKKyAgc3luY2hyb25vdXMgbmVnb3RpYXRpb24JZGlzYWJsZWQJCXN5bmM6MjU1CisgIGRlYnVnIGZsYWdzCQkJbm9uZQkJCWRlYnVnOjAKKyAgYnVyc3QgbGVuZ3RoCQkJZnJvbSBCSU9TIHNldHRpbmdzCWJ1cnN0OjI1NQorICBMRUQgc3VwcG9ydAkJCWRpc2FibGVkCQlsZWQ6MAorICB3aWRlIHN1cHBvcnQJCQlkaXNhYmxlZAkJd2lkZTowCisgIHNldHRsZSB0aW1lCQkJMTAgc2Vjb25kcwkJc2V0dGxlOjEwCisgIGRpZmZlcmVudGlhbCBzdXBwb3J0CQlmcm9tIEJJT1Mgc2V0dGluZ3MJZGlmZjoxCisgIGlycSBtb2RlCQkJZnJvbSBCSU9TIHNldHRpbmdzCWlycW06MQorICBTQ1NJIEJVUyBjaGVjawkJZG8gbm90IGF0dGFjaCBvbiBlcnJvcglidXNjaGs6MQorICBpbW1lZGlhdGUgYXJiaXRyYXRpb24JCWRpc2FibGVkCQlpYXJiOjAKKworMTAuMyBBZHZpc2VkIGJvb3Qgc2V0dXAgY29tbWFuZHMKKworSWYgdGhlIGRyaXZlciBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdCBvcHRpb25zLCB0aGUgZXF1aXZhbGVudCAKK2Jvb3Qgc2V0dXAgaXM6CisKKyAgIG5jcjUzYzh4eD1tcGFyOnksc3Bhcjp5LGRpc2M6eSxzcGVjZjozLGZzbjpuLHVsdHJhOjIsZnNuOm4scmV2cHJvYjpuLHZlcmI6MVwKKyAgICAgICAgICAgICB0YWdzOjAsc3luYzo1MCxkZWJ1ZzowLGJ1cnN0OjcsbGVkOjAsd2lkZToxLHNldHRsZToyLGRpZmY6MCxpcnFtOjAKKworRm9yIGFuIGluc3RhbGxhdGlvbiBkaXNrZXR0ZSBvciBhIHNhZmUgYnV0IG5vdCBmYXN0IHN5c3RlbSwKK2Jvb3Qgc2V0dXAgY2FuIGJlOgorCisgICAgbmNyNTNjOHh4PXNhZmU6eSxtcGFyOnksZGlzYzp5CisgICAgbmNyNTNjOHh4PXNhZmU6eSxkaXNjOnkKKyAgICBuY3I1M2M4eHg9c2FmZTp5LG1wYXI6eQorICAgIG5jcjUzYzh4eD1zYWZlOnkKKworTXkgcGVyc29ubmFsIHN5c3RlbSB3b3JrcyBmbGF3bGVzc2x5IHdpdGggdGhlIGZvbGxvd2luZyBlcXVpdmFsZW50IHNldHVwOgorCisgICBuY3I1M2M4eHg9bXBhcjp5LHNwYXI6eSxkaXNjOnksc3BlY2Y6MSxmc246bix1bHRyYToyLGZzbjpuLHJldnByb2I6bix2ZXJiOjFcCisgICAgICAgICAgICAgdGFnczozMixzeW5jOjEyLGRlYnVnOjAsYnVyc3Q6NyxsZWQ6MSx3aWRlOjEsc2V0dGxlOjIsZGlmZjowLGlycW06MAorCitUaGUgZHJpdmVyIHByaW50cyBpdHMgYWN0dWFsIHNldHVwIHdoZW4gdmVyYm9zaXR5IGxldmVsIGlzIDIuIFlvdSBjYW4gdHJ5IAorIm5jcjUzYzh4eD12ZXJiOjIiIHRvIGdldCB0aGUgInN0YXRpYyIgc2V0dXAgb2YgdGhlIGRyaXZlciwgb3IgYWRkICJ2ZXJiOjIiIAordG8geW91ciBib290IHNldHVwIGNvbW1hbmQgaW4gb3JkZXIgdG8gY2hlY2sgdGhlIGFjdHVhbCBzZXR1cCB0aGUgZHJpdmVyIGlzIAordXNpbmcuCisKKzEwLjQgUENJIGNvbmZpZ3VyYXRpb24gZml4LXVwIGJvb3Qgb3B0aW9uCisKK3BjaWZpeDo8b3B0aW9uIGJpdHM+CisKK0F2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAweDE6ICAgICBTZXQgUENJIGNhY2hlLWxpbmUgc2l6ZSByZWdpc3RlciBpZiBub3Qgc2V0LgorICAgIDB4MjogICAgIFNldCB3cml0ZSBhbmQgaW52YWxpZGF0ZSBiaXQgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisKK1VzZSAncGNpZml4OjMnIGluIG9yZGVyIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gZml4IGJvdGggUENJIGZlYXR1cmVzLgorCitUaGVzZSBvcHRpb25zIG9ubHkgYXBwbHkgdG8gbmV3IFNZTUJJT1MgY2hpcHMgODEwQSwgODI1QSwgODYwLCA4NzUgCithbmQgODk1IGFuZCBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIFBlbnRpdW0gYW5kIDQ4NiBjbGFzcyBwcm9jZXNzb3JzLgorUmVjZW50IFNZTUJJT1MgNTNDOFhYIHNjc2kgcHJvY2Vzc29ycyBhcmUgYWJsZSB0byB1c2UgUENJIHJlYWQgbXVsdGlwbGUgCithbmQgUENJIHdyaXRlIGFuZCBpbnZhbGlkYXRlIGNvbW1hbmRzLiBUaGVzZSBmZWF0dXJlcyByZXF1aXJlIHRoZSAKK2NhY2hlIGxpbmUgc2l6ZSByZWdpc3RlciB0byBiZSBwcm9wZXJseSBzZXQgaW4gdGhlIFBDSSBjb25maWd1cmF0aW9uIAorc3BhY2Ugb2YgdGhlIGNoaXBzLiBPbiB0aGUgb3RoZXIgaGFuZCwgY2hpcHMgd2lsbCB1c2UgUENJIHdyaXRlIGFuZCAKK2ludmFsaWRhdGUgY29tbWFuZHMgb25seSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0IHRvIDEgaW4gdGhlIAorUENJIGNvbW1hbmQgcmVnaXN0ZXIuCisKK05vdCBhbGwgUENJIGJpb3NlcyBzZXQgdGhlIFBDSSBjYWNoZSBsaW5lIHJlZ2lzdGVyIGFuZCB0aGUgUENJIHdyaXRlIGFuZCAKK2ludmFsaWRhdGUgYml0IGluIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBvZiA1M0M4WFggY2hpcHMuCitPcHRpbWl6ZWQgUENJIGFjY2Vzc2VzIG1heSBiZSBicm9rZW4gZm9yIHNvbWUgUENJL21lbW9yeSBjb250cm9sbGVycyBvciAKK21ha2UgcHJvYmxlbXMgd2l0aCBzb21lIFBDSSBib2FyZHMuCisKK1RoaXMgZml4LXVwIHdvcmtlZCBmbGF3bGVzc2x5IG9uIG15IHByZXZpb3VzIHN5c3RlbS4KKyhNQiBUcml0b24gSFggLyA1M0M4NzUgLyA1M0M4MTBBKQorSSB1c2UgdGhlc2Ugb3B0aW9ucyBhdCBteSBvd24gcmlza3MgYXMgeW91IHdpbGwgZG8gaWYgeW91IGRlY2lkZSB0byAKK3VzZSB0aGVtIHRvby4KKworCisxMC41IFNlcmlhbCBOVlJBTSBzdXBwb3J0IGJvb3Qgb3B0aW9uCisKK252cmFtOm4gICAgIGRvIG5vdCBsb29rIGZvciBzZXJpYWwgTlZSQU0KK252cmFtOnkgICAgIHRlc3QgY29udHJvbGxlcnMgZm9yIG9uYm9hcmQgc2VyaWFsIE5WUkFNCisKK1RoaXMgb3B0aW9uIGNhbiBhbHNvIGJlZW4gZW50ZXJlZCBhcyBhbiBoZXhhZGVjaW1hbCB2YWx1ZSB0aGF0IGFsbG93cyAKK3RvIGNvbnRyb2wgd2hhdCBpbmZvcm1hdGlvbiB0aGUgZHJpdmVyIHdpbGwgZ2V0IGZyb20gdGhlIE5WUkFNIGFuZCB3aGF0IAoraW5mb3JtYXRpb24gaXQgd2lsbCBpZ25vcmUuCitGb3IgZGV0YWlscyBzZWUgJzE3LiBTZXJpYWwgTlZSQU0gc3VwcG9ydCcuCisKK1doZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB0cmllcyB0byBkZXRlY3QgYWxsIGJvYXJkcyB1c2luZyAKK2EgU2VyaWFsIE5WUkFNLiBUaGlzIG1lbW9yeSBpcyB1c2VkIHRvIGhvbGQgdXNlciBzZXQgdXAgcGFyYW1ldGVycy4KKworVGhlIHBhcmFtZXRlcnMgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGdldCBmcm9tIHRoZSBOVlJBTSBkZXBlbmQgb24gdGhlIAorZGF0YSBmb3JtYXQgdXNlZCwgYXMgZm9sbG93OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWtyYW0gZm9ybWF0ICAgICAgU3ltYmlvcyBmb3JtYXQKK0dlbmVyYWwgYW5kIGhvc3QgcGFyYW1ldGVycworICAgIEJvb3Qgb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisgICAgSG9zdCBTQ1NJIElEICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBTQ1NJIHBhcml0eSBjaGVja2luZyAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFZlcmJvc2UgYm9vdCBtZXNzYWdlcyAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCitTQ1NJIGRldmljZXMgcGFyYW1ldGVycworICAgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHNwZWVkICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgV2lkZSAxNiAvIE5hcnJvdyAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBUYWdnZWQgQ29tbWFuZCBRdWV1aW5nIGVuYWJsZWQgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIERpc2Nvbm5lY3Rpb25zIGVuYWJsZWQgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU2NhbiBhdCBib290IHRpbWUgICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKKworSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHN5c3RlbSBib290LCBmb3IgZWFjaCBkZXZpY2UgY29uZmlndXJlZCB3aXRob3V0IAordGhlICJzY2FuIGF0IGJvb3QgdGltZSIgb3B0aW9uLCB0aGUgZHJpdmVyIGZvcmNlcyBhbiBlcnJvciBvbiB0aGUgCitmaXJzdCBURVNUIFVOSVQgUkVBRFkgY29tbWFuZCByZWNlaXZlZCBmb3IgdGhpcyBkZXZpY2UuCisKK1NvbWUgU0RNUyBCSU9TIHJldmlzaW9ucyBzZWVtIHRvIGJlIHVuYWJsZSB0byBib290IGNsZWFubHkgd2l0aCB2ZXJ5IGZhc3QgCitoYXJkIGRpc2tzLiBJbiBzdWNoIGEgc2l0dWF0aW9uIHlvdSBjYW5ub3QgY29uZmlndXJlIHRoZSBOVlJBTSB3aXRoIAorb3B0aW1pemVkIHBhcmFtZXRlcnMgdmFsdWUuCisKK1RoZSAnbnZyYW0nIGJvb3Qgb3B0aW9uIGNhbiBiZSBlbnRlcmVkIGluIGhleGFkZWNpbWFsIGZvcm0gaW4gb3JkZXIgCit0byBpZ25vcmUgc29tZSBvcHRpb25zIGNvbmZpZ3VyZWQgaW4gdGhlIE5WUkFNLCBhcyBmb2xsb3c6CisKK212cmFtPTxiaXRzIG9wdGlvbnM+CisgICAgICAweDAxICAgbG9vayBmb3IgTlZSQU0gIChlcXVpdmFsZW50IHRvIG52cmFtPXkpCisgICAgICAweDAyICAgaWdub3JlIE5WUkFNICJTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiIgcGFyYW1ldGVycyBmb3IgYWxsIGRldmljZXMKKyAgICAgIDB4MDQgICBpZ25vcmUgTlZSQU0gIldpZGUgbmVnb3RpYXRpb24iICBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAweDA4ICAgaWdub3JlIE5WUkFNICJTY2FuIGF0IGJvb3QgdGltZSIgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgMHg4MCAgIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNIChzeW01M2M4eHggb25seSkKKworT3B0aW9uIDB4ODAgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIHN5bTUzYzh4eCBkcml2ZXIgYW5kIGlzIGRpc2FibGVkIGJ5IAorZGVmYXVsdC4gUmVzdWx0IGlzIHRoYXQsIGJ5IGRlZmF1bHQgKG9wdGlvbiBub3Qgc2V0KSwgdGhlIHN5bTUzYzh4eCBkcml2ZXIgCit3aWxsIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgc2V0IHRvIE9GRiBpbiB0aGUgTlZSQU0uCisKK1RoZSBuY3I1M2M4eHggYWx3YXlzIHRyaWVzIHRvIGF0dGFjaCBhbGwgdGhlIGNvbnRyb2xsZXJzLiBPcHRpb24gMHg4MCBoYXMgCitub3QgYmVlbiBhZGRlZCB0byB0aGUgbmNyNTNjOHh4IGRyaXZlciwgc2luY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gCitjb25mdXNlIHVzZXJzIHdobyB1c2UgdGhpcyBkcml2ZXIgc2luY2UgYSBsb25nIHRpbWUuIElmIHlvdSBkZXNpcmUgYSAKK2NvbnRyb2xsZXIgbm90IHRvIGJlIGF0dGFjaGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyIGF0IExpbnV4IGJvb3QsIHlvdSAKK211c3QgdXNlIHRoZSAnZXhjbCcgZHJpdmVyIGJvb3Qgb3B0aW9uLgorCisxMC42IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uLgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgZHJpdmVyIGNoZWNrcyBTQ1NJIGxpbmVzIAorbG9naWMgc3RhdGUsIDEwMCBtaWNyby1zZWNvbmRzIGFmdGVyIGhhdmluZyBhc3NlcnRlZCB0aGUgU0NTSSBSRVNFVCBsaW5lLgorVGhlIGRyaXZlciBqdXN0IHJlYWRzIFNDU0kgbGluZXMgYW5kIGNoZWNrcyBhbGwgbGluZXMgcmVhZCBGQUxTRSBleGNlcHQgUkVTRVQuCitTaW5jZSBTQ1NJIGRldmljZXMgc2hhbGwgcmVsZWFzZSB0aGUgQlVTIGF0IG1vc3QgODAwIG5hbm8tc2Vjb25kcyBhZnRlciBTQ1NJIAorUkVTRVQgaGFzIGJlZW4gYXNzZXJ0ZWQsIGFueSBzaWduYWwgdG8gVFJVRSBtYXkgaW5kaWNhdGUgYSBTQ1NJIEJVUyBwcm9ibGVtLgorVW5mb3J0dW5hdGVseSwgdGhlIGZvbGxvd2luZyBjb21tb24gU0NTSSBCVVMgcHJvYmxlbXMgYXJlIG5vdCBkZXRlY3RlZDoKKy0gT25seSAxIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorLSBNaXNwbGFjZWQgdGVybWluYXRvcnMuCistIEJhZCBxdWFsaXR5IHRlcm1pbmF0b3JzLgorT24gdGhlIG90aGVyIGhhbmQsIGVpdGhlciBiYWQgY2FibGluZywgYnJva2VuIGRldmljZXMsIG5vdCBjb25mb3JtYW50IAorZGV2aWNlcywgLi4uIG1heSBjYXVzZSBhIFNDU0kgc2lnbmFsIHRvIGJlIHdyb25nIHdoZW4gdGUgZHJpdmVyIHJlYWRzIGl0LgorCisxMC43IElNTUVESUFURSBBUkJJVFJBVElPTiBib290IG9wdGlvbgorCitUaGlzIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSB0aGUgU1lNNTNDOFhYIGRyaXZlciAobm90IGJ5IHRoZSBOQ1I1M0M4WFgpLgorCitTWU1CSU9TIDUzQzhYWCBjaGlwcyBhcmUgYWJsZSB0byBhcmJpdHJhdGUgZm9yIHRoZSBTQ1NJIEJVUyBhcyBzb29uIGFzIHRoZXkgCitoYXZlIGRldGVjdGVkIGFuIGV4cGVjdGVkIGRpc2Nvbm5lY3Rpb24gKEJVUyBGUkVFIFBIQVNFKS4gRm9yIHRoaXMgcHJvY2VzcyAKK3RvIGJlIHN0YXJ0ZWQsIGJpdCAxIG9mIFNDTlRMMSBJTyByZWdpc3RlciBtdXN0IGJlIHNldCB3aGVuIHRoZSBjaGlwIGlzIAorY29ubmVjdGVkIHRvIHRoZSBTQ1NJIEJVUy4KKworV2hlbiB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiwgdGhlIGNoaXAgaGFzIAorZXZlcnkgY2hhbmNlIHRvIHdpbiBhcmJpdHJhdGlvbiBpZiBvbmx5IGRldmljZXMgd2l0aCBsb3dlciBwcmlvcml0eSBhcmUgCitjb21wZXRpbmcgZm9yIHRoZSBTQ1NJIEJVUy4gQnkgdGhlIHdheSwgd2hlbiB0aGUgY2hpcCBpcyB1c2luZyBTQ1NJIGlkIDcsIAordGhlbiBpdCB3aWxsIGZvciBzdXJlIHdpbiB0aGUgbmV4dCBTQ1NJIEJVUyBhcmJpdHJhdGlvbi4KKworU2luY2UsIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoYXQgZGV2aWNlcyBhcmUgdHJ5aW5nIHRvIGFyYml0cmF0ZSBmb3IgdGhlIAorQlVTLCB1c2luZyB0aGlzIGZlYXR1cmUgY2FuIGJlIGV4dHJlbWVseSB1bmZhaXIuIFNvLCB5b3UgYXJlIG5vdCBhZHZpc2VkCit0byBlbmFibGUgaXQsIG9yIGF0IG1vc3QgZW5hYmxlIHRoaXMgZmVhdHVyZSBmb3IgdGhlIGNhc2UgdGhlIGNoaXAgbG9zdCAKK3RoZSBwcmV2aW91cyBhcmJpdHJhdGlvbiAoYm9vdCBvcHRpb24gJ2lhcmI6MScpLgorCitUaGlzIGZlYXR1cmUgaGFzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoKKworYSkgQWxsb3cgdGhlIGluaXRpYXRvciB3aXRoIElEIDcgdG8gd2luIGFyYml0cmF0aW9uIHdoZW4gaXQgd2FudHMgc28uCitiKSBPdmVybGFwIGF0IGxlYXN0IDQgbWljcm8tc2Vjb25kcyBvZiBhcmJpdHJhdGlvbiB0aW1lIHdpdGggdGhlIGV4ZWN1dGlvbiAKKyAgIG9mIFNDUklQVFMgdGhhdCBkZWFsIHdpdGggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uIGFuZCB0aGF0IAorICAgc3RhcnRzIHRoZSBuZXh0IGpvYi4KKworSG1tbS4uLiBCdXQgKGEpIG1heSBqdXN0IHByZXZlbnQgb3RoZXIgZGV2aWNlcyBmcm9tIHJlc2VsZWN0aW5nIHRoZSBpbml0aWF0b3IsIAorYW5kIGRlbGF5IGRhdGEgdHJhbnNmZXJzIG9yIHN0YXR1cy9jb21wbGV0aW9ucywgYW5kIChiKSBtYXkganVzdCB3YXN0ZSAKK1NDU0kgQlVTIGJhbmR3aWR0aCBpZiB0aGUgU0NSSVBUUyBleGVjdXRpb24gbGFzdHMgbW9yZSB0aGFuIDQgbWljcm8tc2Vjb25kcy4KKworVGhlIHVzZSBvZiBJQVJCIG5lZWRzIHRoZSBTQ1NJX05DUl9JQVJCX1NVUFBPUlQgb3B0aW9uIHRvIGhhdmUgYmVlbiBkZWZpbmVkIAorYXQgY29tcGlsZSB0aW1lIGFuZCB0aGUgJ2lhcmInIGJvb3Qgb3B0aW9uIHRvIGhhdmUgYmVlbiBzZXQgdG8gYSBub24gemVybyAKK3ZhbHVlIGF0IGJvb3QgdGltZS4gSXQgaXMgbm90IHRoYXQgdXNlZnVsIGZvciByZWFsIHdvcmssIGJ1dCBjYW4gYmUgdXNlZCAKK3RvIHN0cmVzcyBTQ1NJIGRldmljZXMgb3IgZm9yIHNvbWUgYXBwbGljYXRpb25zIHRoYXQgY2FuIGdhaW4gYWR2YW50YWdlIG9mIAoraXQuIEJ5IHRoZSB3YXksIGlmIHlvdSBleHBlcmllbmNlIGJhZG5lc3NlcyBsaWtlICd1bmV4cGVjdGVkIGRpc2Nvbm5lY3Rpb25zJywgCisnYmFkIHJlc2VsZWN0aW9ucycsIGV0Yy4uLiB3aGVuIHVzaW5nIElBUkIgb24gaGVhdnkgSU8gbG9hZCwgeW91IHNob3VsZCBub3QgCitiZSBzdXJwcmlzZWQsIGJlY2F1c2UgZm9yY2UtZmVlZGluZyBhbnl0aGluZyBhbmQgYmxvY2tpbmcgaXRzIGFyc2UgYXQgdGhlIAorc2FtZSB0aW1lIGNhbm5vdCB3b3JrIGZvciBhIGxvbmcgdGltZS4gOi0pKQorCisKKzExLiBTb21lIGNvbnN0YW50cyBhbmQgZmxhZ3Mgb2YgdGhlIG5jcjUzYzh4eC5oIGhlYWRlciBmaWxlCisKK1NvbWUgb2YgdGhlc2UgYXJlIGRlZmluZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiAgVG8KK2NoYW5nZSBvdGhlciAiZGVmaW5lcyIsIHlvdSBtdXN0IGVkaXQgdGhlIGhlYWRlciBmaWxlLiAgRG8gdGhhdCBvbmx5CitpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK1NDU0lfTkNSX1NFVFVQX1NQRUNJQUxfRkVBVFVSRVMJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgdGhlIGRyaXZlciB3aWxsIGVuYWJsZSBzb21lIHNwZWNpYWwgZmVhdHVyZXMgYWNjb3JkaW5nICAKKwl0byBjaGlwIGFuZCByZXZpc2lvbiBpZC4KKyAgICAgICAgRm9yIDgxMEEsIDg2MCwgODI1QSwgODc1IGFuZCA4OTUgc2NzaSBjaGlwcywgdGhpcyBvcHRpb24gZW5hYmxlcyAKKwlzdXBwb3J0IG9mIGZlYXR1cmVzIHRoYXQgcmVkdWNlIGxvYWQgb2YgUENJIGJ1cyBhbmQgbWVtb3J5IGFjY2Vzc2VzIAorCWR1cmluZyAgc2NzaSB0cmFuc2ZlciBwcm9jZXNzaW5nOiBidXJzdCBvcC1jb2RlIGZldGNoLCByZWFkIG11bHRpcGxlLCAKKyAgICAgICAgcmVhZCBsaW5lLCBwcmVmZXRjaCwgY2FjaGUgbGluZSwgd3JpdGUgYW5kIGludmFsaWRhdGUsIAorICAgICAgICBidXJzdCAxMjggKDg3NSBvbmx5KSwgbGFyZ2UgZG1hIGZpZm8gKDg3NSBvbmx5KSwgb2Zmc2V0IDE2ICg4NzUgb25seSkuCisJQ2FuIGJlIGNoYW5nZWQgYnkgdGhlIGZvbGxvd2luZyBib290IHNldHVwIGNvbW1hbmQ6CisJCW5jcjUzYzh4eD1zcGVjZjpuCisKK1NDU0lfTkNSX0lPTUFQUEVECQkoZGVmYXVsdDogbm90IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgbm9ybWFsIEkvTyBpcyBmb3JjZWQuCisKK1NDU0lfTkNSX1NIQVJFX0lSUQkJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgcmVxdWVzdCBzaGFyZWQgSVJRLgorCQorU0NTSV9OQ1JfTUFYX1RBR1MJCShkZWZhdWx0OiA4KQorCU1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgdG8gYSBkZXZpY2UuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldHRhZ3MgPHRhcmdldD4gPG1heHRhZ3M+IgorCitTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1NZTkMgICAgIChkZWZhdWx0OiA1MCkKKwlUcmFuc2ZlciBwZXJpb2QgZmFjdG9yIHRoZSBkcml2ZXIgd2lsbCB1c2UgYXQgYm9vdCB0aW1lIGZvciBzeW5jaHJvbm91cyAKKwluZWdvdGlhdGlvbi4gMCBtZWFucyBhc3luY2hyb25vdXMuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldHN5bmMgPHRhcmdldD4gPHBlcmlvZCBmYWN0b3I+IgorCitTQ1NJX05DUl9TRVRVUF9ERUZBVUxUX1RBR1MgICAgIChkZWZhdWx0OiA4KQorCURlZmF1bHQgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgdG8gYSBkZXZpY2UuCisJPCAxIG1lYW5zIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZGlzYWJsZWQgYXQgc3RhcnQtdXAuCisKK1NDU0lfTkNSX0FMV0FZU19TSU1QTEVfVEFHCShkZWZhdWx0OiBkZWZpbmVkKQorCVVzZSBTSU1QTEUgVEFHIGZvciByZWFkIGFuZCB3cml0ZSBjb21tYW5kcy4KKwlDYW4gYmUgY2hhbmdlZCBieSAic2V0b3JkZXIgPG9yZGVyZWR8c2ltcGxlfGRlZmF1bHQ+IgorCitTQ1NJX05DUl9TRVRVUF9ESVNDT05ORUNUSU9OCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHRhcmdldHMgYXJlIGFsbG93ZWQgdG8gZGlzY29ubmVjdC4KKworU0NTSV9OQ1JfU0VUVVBfRk9SQ0VfU1lOQ19ORUdPCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyB0cmllZCBmb3IgYWxsIFNDU0ktMiBkZXZpY2VzLgorCUNhbiBiZSBjaGFuZ2VkIGJ5ICJzZXRzeW5jIDx0YXJnZXQ+IDxwZXJpb2Q+IgorCitTQ1NJX05DUl9TRVRVUF9NQVNURVJfUEFSSVRZCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIG1hc3RlciBwYXJpdHkgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKworU0NTSV9OQ1JfU0VUVVBfTUFTVEVSX1BBUklUWQkoZGVmYXVsdDogZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBTQ1NJIHBhcml0eSBjaGVja2luZyBpcyBlbmFibGVkLgorCitTQ1NJX05DUl9QUk9GSUxFX1NVUFBPUlQJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHByb2ZpbGluZyBpbmZvcm1hdGlvbiBpcyBnYXRoZXJlZC4KKworU0NTSV9OQ1JfTUFYX1NDQVRURVIJCShkZWZhdWx0OiAxMjgpCisJU2NhdHRlciBsaXN0IHNpemUgb2YgdGhlIGRyaXZlciBjY2IuCisKK1NDU0lfTkNSX01BWF9UQVJHRVQJCShkZWZhdWx0OiAxNikKKwlNYXggbnVtYmVyIG9mIHRhcmdldHMgcGVyIGhvc3QuCisKK1NDU0lfTkNSX01BWF9IT1NUCQkoZGVmYXVsdDogMikKKwlNYXggbnVtYmVyIG9mIGhvc3QgY29udHJvbGxlcnMuCisKK1NDU0lfTkNSX1NFVFRMRV9USU1FCQkoZGVmYXVsdDogMikKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0aGUgZHJpdmVyIHdpbGwgd2FpdCBhZnRlciByZXNldC4KKworU0NTSV9OQ1JfVElNRU9VVF9BTEVSVAkJKGRlZmF1bHQ6IDMpCisJSWYgYSBwZW5kaW5nIGNvbW1hbmQgd2lsbCB0aW1lIG91dCBhZnRlciB0aGlzIGFtb3VudCBvZiBzZWNvbmRzLAorCWFuIG9yZGVyZWQgdGFnIGlzIHVzZWQgZm9yIHRoZSBuZXh0IGNvbW1hbmQuCisJQXZvaWRzIHRpbWVvdXRzIGZvciB1bm9yZGVyZWQgdGFnZ2VkIGNvbW1hbmRzLgorCitTQ1NJX05DUl9DQU5fUVVFVUUJCShkZWZhdWx0OiA3KlNDU0lfTkNSX01BWF9UQUdTKQorCU1heCBudW1iZXIgb2YgY29tbWFuZHMgdGhhdCBjYW4gYmUgcXVldWVkIHRvIGEgaG9zdC4KKworU0NTSV9OQ1JfQ01EX1BFUl9MVU4JCShkZWZhdWx0OiBTQ1NJX05DUl9NQVhfVEFHUykKKwlNYXggbnVtYmVyIG9mIGNvbW1hbmRzIHF1ZXVlZCB0byBhIGhvc3QgZm9yIGEgZGV2aWNlLgorCitTQ1NJX05DUl9TR19UQUJMRVNJWkUJCShkZWZhdWx0OiBTQ1NJX05DUl9NQVhfU0NBVFRFUi0xKQorCU1heCBzaXplIG9mIHRoZSBMaW51eCBzY2F0dGVyL2dhdGhlciBsaXN0LgorCitTQ1NJX05DUl9NQVhfTFVOCShkZWZhdWx0OiA4KQorCU1heCBudW1iZXIgb2YgTFVOcyBwZXIgdGFyZ2V0LgorCisKKzEyLiBJbnN0YWxsYXRpb24KKworVGhpcyBkcml2ZXIgaXMgcGFydCBvZiB0aGUgbGludXgga2VybmVsIGRpc3RyaWJ1dGlvbi4KK0RyaXZlciBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgc3ViLWRpcmVjdG9yeSAiZHJpdmVycy9zY3NpIiBvZiB0aGUgCitrZXJuZWwgc291cmNlIHRyZWUuCisKK0RyaXZlciBmaWxlczoKKworCVJFQURNRS5uY3I1M2M4eHgJOiB0aGlzIGZpbGUKKwlDaGFuZ2VMb2cubmNyNTNjOHh4CTogY2hhbmdlIGxvZworCW5jcjUzYzh4eC5oCQk6IGRlZmluaXRpb25zCisJbmNyNTNjOHh4LmMJCTogdGhlIGRyaXZlciBjb2RlCisKK05ldyBkcml2ZXIgdmVyc2lvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIHNlcGFyYXRlbHkgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdGluZyAKK2NoYW5nZXMgYW5kIG5ldyBmZWF0dXJlcyBwcmlvciB0byBpbmNsdWRpbmcgdGhlbSBpbnRvIHRoZSBsaW51eCBrZXJuZWwgCitkaXN0cmlidXRpb24uIFRoZSBmb2xsb3dpbmcgVVJMIHByb3ZpZGVzIGluZm9ybWF0aW9ucyBvbiBsYXRlc3QgYXZhbGFpYmxlIAorcGF0Y2hlczogCisKKyAgICAgIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9wZW9wbGUvZ2VyYXJkLXJvdWRpZXIvUkVBRE1FCisKKworMTMuIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZmVhdHVyZXMuCisKKzxOb3QgeWV0IHdyaXR0ZW4+CisKKworMTQuIEtub3duIHByb2JsZW1zCisKKzE0LjEgVGFnZ2VkIGNvbW1hbmRzIHdpdGggSW9tZWdhIEpheiBkZXZpY2UKKworSSBoYXZlIG5vdCB0cmllZCB0aGlzIGRldmljZSwgaG93ZXZlciBpdCBoYXMgYmVlbiByZXBvcnRlZCB0byBtZSB0aGUKK2ZvbGxvd2luZzogVGhpcyBkZXZpY2UgaXMgY2FwYWJsZSBvZiBUYWdnZWQgY29tbWFuZCBxdWV1aW5nLiBIb3dldmVyCit3aGlsZSBzcGlubmluZyB1cCwgaXQgcmVqZWN0cyBUYWdnZWQgY29tbWFuZHMuIFRoaXMgYmVoYXZpb3VyIGlzCitjb25mb3JtcyB0byA2LjguMiBvZiBTQ1NJLTIgc3BlY2lmaWNhdGlvbnMuIFRoZSBjdXJyZW50IGJlaGF2aW91ciBvZgordGhlIGRyaXZlciBpbiB0aGF0IHNpdHVhdGlvbiBpcyBub3Qgc2F0aXNmeWluZy4gU28gZG8gbm90IGVuYWJsZQorVGFnZ2VkIGNvbW1hbmQgcXVldWluZyBmb3IgZGV2aWNlcyB0aGF0IGFyZSBhYmxlIHRvIHNwaW4gZG93bi4gIFRoZQorb3RoZXIgcHJvYmxlbSB0aGF0IG1heSBhcHBlYXIgaXMgdGltZW91dHMuIFRoZSBvbmx5IHdheSB0byBhdm9pZAordGltZW91dHMgc2VlbXMgdG8gZWRpdCBsaW51eC9kcml2ZXJzL3Njc2kvc2QuYyBhbmQgdG8gaW5jcmVhc2UgdGhlCitjdXJyZW50IHRpbWVvdXQgdmFsdWVzLgorCisxNC4yIERldmljZSBuYW1lcyBjaGFuZ2Ugd2hlbiBhbm90aGVyIGNvbnRyb2xsZXIgaXMgYWRkZWQuCisKK1doZW4geW91IGFkZCBhIG5ldyBOQ1I1M0M4WFggY2hpcCBiYXNlZCBjb250cm9sbGVyIHRvIGEgc3lzdGVtIHRoYXQgYWxyZWFkeSAKK2hhcyBvbmUgb3IgbW9yZSBjb250cm9sbGVycyBvZiB0aGlzIGZhbWlseSwgaXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBvcmRlciAKK3RoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZW0gdG8gdGhlIGtlcm5lbCBjYXVzZXMgcHJvYmxlbXMgZHVlIHRvIGRldmljZSAKK25hbWUgY2hhbmdlcy4KK1doZW4gYXQgbGVhc3Qgb25lIGNvbnRyb2xsZXIgdXNlcyBOdlJBTSwgU0RNUyBCSU9TIHZlcnNpb24gNCBhbGxvd3MgeW91IHRvIAorZGVmaW5lIHRoZSBvcmRlciB0aGUgQklPUyB3aWxsIHNjYW4gdGhlIHNjc2kgYm9hcmRzLiBUaGUgZHJpdmVyIGF0dGFjaGVzIAorY29udHJvbGxlcnMgYWNjb3JkaW5nIHRvIEJJT1MgaW5mb3JtYXRpb24gaWYgTnZSQU0gZGV0ZWN0IG9wdGlvbiBpcyBzZXQuCisKK0lmIHlvdXIgY29udHJvbGxlcnMgZG8gbm90IGhhdmUgTnZSQU0sIHlvdSBjYW46CisKKy0gQXNrIHRoZSBkcml2ZXIgdG8gcHJvYmUgY2hpcCBpZHMgaW4gcmV2ZXJzZSBvcmRlciBmcm9tIHRoZSBib290IGNvbW1hbmQKKyAgbGluZTogbmNyNTNjOHh4PXJldnByb2I6eQorLSBNYWtlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlIGZzdGFiLgorLSBVc2UgdGhlICdzY3NpZGV2JyB0b29sIGZyb20gRXJpYyBZb3VuZ2RhbGUuCisKKzE0LjMgVXNpbmcgb25seSA4IGJpdCBkZXZpY2VzIHdpdGggYSBXSURFIFNDU0kgY29udHJvbGxlci4KKworV2hlbiBvbmx5IDggYml0IE5BUlJPVyBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdG8gYSAxNiBiaXQgV0lERSBTQ1NJIGNvbnRyb2xsZXIsIAoreW91IG11c3QgZW5zdXJlIHRoYXQgbGluZXMgb2YgdGhlIHdpZGUgcGFydCBvZiB0aGUgU0NTSSBCVVMgYXJlIHB1bGxlZC11cC4KK1RoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IEVOQUJMSU5HIHRoZSBXSURFIFRFUk1JTkFUT1IgcG9ydGlvbiBvZiB0aGUgU0NTSSAKK2NvbnRyb2xsZXIgY2FyZC4KK1RoZSBUWUFOIDEzNjUgZG9jdW1lbnRhdGlvbiByZXZpc2lvbiAxLjIgaXMgbm90IGNvcnJlY3QgYWJvdXQgc3VjaCBzZXR0aW5ncy4KKyhwYWdlIDEwLCBmaWd1cmUgMy4zKS4KKworMTQuNCBQb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gZHVyaW5nIGEgTWVtb3J5IFdyaXRlIGFuZCBJbnZhbGlkYXRlCisKK1RoaXMgcHJvYmxlbSBpcyBkZXNjcmliZWQgaW4gU1lNQklPUyBERUwgMzk3LCBQYXJ0IE51bWJlciA2OS0wMzkyNDEsIElURU0gNC4KKworSW4gc29tZSBjb21wbGV4IHNpdHVhdGlvbnMsIDUzQzg3NSBjaGlwcyByZXZpc2lvbiA8PSAzIG1heSBzdGFydCBhIFBDSSAKK1dyaXRlIGFuZCBJbnZhbGlkYXRlIENvbW1hbmQgYXQgYSBub3QgY2FjaGUtbGluZS1hbGlnbmVkIDQgRFdPUkRTIGJvdW5kYXJ5LgorVGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gQ2FjaGUgTGluZSBTaXplIGlzIDggRFdPUkRTIG9yIGdyZWF0ZXIuCitQZW50aXVtIHN5c3RlbXMgdXNlIGEgOCBEV09SRFMgY2FjaGUgbGluZSBzaXplIGFuZCBzbyBhcmUgY29uY2VybmVkIGJ5IAordGhpcyBjaGlwIGJ1ZywgdW5saWtlIGk0ODYgc3lzdGVtcyB0aGF0IHVzZSBhIDQgRFdPUkRTIGNhY2hlIGxpbmUgc2l6ZS4KKworV2hlbiB0aGlzIHNpdHVhdGlvbiBvY2N1cnMsIHRoZSBjaGlwIG1heSBjb21wbGV0ZSB0aGUgV3JpdGUgYW5kIEludmFsaWRhdGUgCitjb21tYW5kIGFmdGVyIGhhdmluZyBvbmx5IGZpbGxlZCBwYXJ0IG9mIHRoZSBsYXN0IGNhY2hlIGxpbmUgaW52b2x2ZWQgaW4gCit0aGUgdHJhbnNmZXIsIGxlYXZpbmcgdG8gZGF0YSBjb3JydXB0aW9uIHRoZSByZW1haW5kZXIgb2YgdGhpcyBjYWNoZSBsaW5lLgorCitOb3QgdXNpbmcgV3JpdGUgQW5kIEludmFsaWRhdGUgb2J2aW91c2x5IGdldHMgcmlkIG9mIHRoaXMgY2hpcCBidWcsIGFuZCBzbyAKK2l0IGlzIG5vdyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBkcml2ZXIuCitIb3dldmVyLCBmb3IgcGVvcGxlIGxpa2UgbWUgd2hvIHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgSSBoYXZlIGFkZGVkIAorcGFydCBvZiBhIHdvcmstYXJvdW5kIHN1Z2dlc3RlZCBieSBTWU1CSU9TLiBUaGlzIHdvcmstYXJvdW5kIHJlc2V0cyB0aGUgCithZGRyZXNzaW5nIGxvZ2ljIHdoZW4gdGhlIERBVEEgSU4gcGhhc2UgaXMgZW50ZXJlZCBhbmQgc28gcHJldmVudHMgdGhlIGJ1ZyAKK2Zyb20gYmVpbmcgdHJpZ2dlcmVkIGZvciB0aGUgZmlyc3QgU0NTSSBNT1ZFIG9mIHRoZSBwaGFzZS4gVGhpcyB3b3JrLWFyb3VuZCAKK3Nob3VsZCBiZSBlbm91Z2ggYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBvbmx5IGRyaXZlciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiA4IERXT1JEUyAgYW5kIAordGhhdCBpcyBtb3ZlZCBieSB0aGUgU0NSSVBUUyBwcm9jZXNzb3IgaXMgdGhlICdDQ0IgaGVhZGVyJyB0aGF0IGNvbnRhaW5zIAordGhlIGNvbnRleHQgb2YgdGhlIFNDU0kgdHJhbnNmZXIuIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgYWxpZ25lZCBvbiA4IERXT1JEUyAKK2JvdW5kYXJ5IChQZW50aXVtIENhY2hlIExpbmUgU2l6ZSksIGFuZCBzbyBpcyBpbW11bmUgdG8gdGhpcyBjaGlwIGJ1ZywgYXQgCitsZWFzdCBvbiBQZW50aXVtIHN5c3RlbXMuCitCdXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBidWcgY2FuIGJlIG1ldCB3aGVuIGEgU0NTSSByZWFkIGNvbW1hbmQgaXMgCitwZXJmb3JtZWQgdXNpbmcgYSBidWZmZXIgdGhhdCBpcyA0IERXT1JEUyBidXQgbm90IGNhY2hlLWxpbmUgYWxpZ25lZC4KK1RoaXMgY2Fubm90IGhhcHBlbiB1bmRlciBMaW51eCB3aGVuIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzIGFyZSB1c2VkIHNpbmNlIAordGhleSBvbmx5IHJlZmVyIHRvIHN5c3RlbSBidWZmZXJzIHRoYXQgYXJlIHdlbGwgYWxpZ25lZC4gU28sIGEgd29yayBhcm91bmQgCittYXkgb25seSBiZSBuZWVkZWQgdW5kZXIgTGludXggd2hlbiBhIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgaXMgbm90IHVzZWQgYW5kIAord2hlbiB0aGUgU0NTSSBEQVRBIElOIHBoYXNlIGlzIHJlZW50ZXJlZCBhZnRlciBhIHBoYXNlIG1pc21hdGNoLgorCisxNC41IElSUSBzaGFyaW5nIHByb2JsZW1zCisKK1doZW4gYW4gSVJRIGlzIHNoYXJlZCBieSBkZXZpY2VzIHRoYXQgYXJlIGhhbmRsZWQgYnkgZGlmZmVyZW50IGRyaXZlcnMsIGl0IAorbWF5IGhhcHBlbiB0aGF0IG9uZSBkcml2ZXIgY29tcGxhaW5zIGFib3V0IHRoZSByZXF1ZXN0IG9mIHRoZSBJUlEgaGF2aW5nIAorZmFpbGVkLiBJbmRlciBMaW51eC0yLjAsIHRoaXMgbWF5IGJlIGR1ZSB0byBvbmUgZHJpdmVyIGhhdmluZyByZXF1ZXN0ZWQgdGhlIAorSVJRIHVzaW5nIHRoZSBTQV9JTlRFUlJVUFQgZmxhZyBidXQgc29tZSBvdGhlciBoYXZpbmcgcmVxdWVzdGVkIHRoZSBzYW1lIElSUSAKK3dpdGhvdXQgdGhpcyBmbGFnLiBVbmRlciBib3RoIExpbnV4LTIuMCBhbmQgbGludXgtMi4yLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkgCitvbmUgZHJpdmVyIG5vdCBoYXZpbmcgcmVxdWVzdGVkIHRoZSBJUlEgd2l0aCB0aGUgU0FfU0hJUlEgZmxhZy4KKworQnkgZGVmYXVsdCwgdGhlIG5jcjUzYzh4eCBhbmQgc3ltNTNjOHh4IGRyaXZlcnMgcmVxdWVzdCBJUlFzIHdpdGggYm90aCB0aGUgCitTQV9JTlRFUlJVUFQgYW5kIHRoZSBTQV9TSElSUSBmbGFnIHVuZGVyIExpbnV4LTIuMCBhbmQgd2l0aCBvbmx5IHRoZSBTQV9TSElSUSAKK2ZsYWcgdW5kZXIgTGludXgtMi4yLgorCitVbmRlciBMaW51eC0yLjAsIHlvdSBjYW4gZGlzYWJsZSB1c2Ugb2YgU0FfSU5URVJSVVBUIGZsYWcgZnJvbSB0aGUgYm9vdCAKK2NvbW1hbmQgbGluZSBieSB1c2luZyB0aGUgZm9sbG93aW5nIG9wdGlvbjoKKworICAgICBuY3I1M2M4eHg9aXJxbToweDIwICAgKGZvciB0aGUgZ2VuZXJpYyBuY3I1M2M4eHggZHJpdmVyKQorICAgICBzeW01M2M4eHg9aXJxbToweDIwICAgKGZvciB0aGUgc3ltNTNjOHh4IGRyaXZlcikKKworSWYgdGhpcyBkb2VzIG5vdCBmaXggdGhlIHByb2JsZW0sIHRoZW4geW91IG1heSB3YW50IHRvIGNoZWNrIGhvdyBhbGwgb3RoZXIgCitkcml2ZXJzIGFyZSByZXF1ZXN0aW5nIHRoZSBJUlEgYW5kIHJlcG9ydCB0aGUgcHJvYmxlbS4gTm90ZSB0aGF0IGlmIGF0IGxlYXN0IAorYSBzaW5nbGUgZHJpdmVyIGRvZXMgbm90IHJlcXVlc3QgdGhlIElSUSB3aXRoIHRoZSBTQV9TSElSUSBmbGFnIChzaGFyZSBJUlEpLCAKK3RoZW4gdGhlIHJlcXVlc3Qgb2YgdGhlIElSUSBvYnZpb3VzbHkgd2lsbCBub3Qgc3VjY2VlZCBmb3IgYWxsIHRoZSBkcml2ZXJzLgorCisxNS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworCisxNS4xIFByb2JsZW0gdHJhY2tpbmcKKworTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0byBidWdneQorZGV2aWNlcy4gIElmIGluZm9ydHVuYXRlbHkgeW91IGhhdmUgU0NTSSBwcm9ibGVtcywgeW91IGNhbiBjaGVjayB0aGUKK2ZvbGxvd2luZyB0aGluZ3M6CisKKy0gU0NTSSBidXMgY2FibGVzCistIHRlcm1pbmF0aW9ucyBhdCBib3RoIGVuZCBvZiB0aGUgU0NTSSBjaGFpbgorLSBsaW51eCBzeXNsb2cgbWVzc2FnZXMgKHNvbWUgb2YgdGhlbSBtYXkgaGVscCB5b3UpCisKK0lmIHlvdSBkbyBub3QgZmluZCB0aGUgc291cmNlIG9mIHByb2JsZW1zLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUKK2RyaXZlciB3aXRoIG5vIGZlYXR1cmVzIGVuYWJsZWQuCisKKy0gb25seSBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMKKy0gdGFnZ2VkIGNvbW1hbmRzIGRpc2FibGVkCistIGRpc2Nvbm5lY3Rpb25zIG5vdCBhbGxvd2VkCisKK05vdywgaWYgeW91ciBTQ1NJIGJ1cyBpcyBvaywgeW91ciBzeXN0ZW0gaGF2ZSBldmVyeSBjaGFuY2UgdG8gd29yaword2l0aCB0aGlzIHNhZmUgY29uZmlndXJhdGlvbiBidXQgcGVyZm9ybWFuY2VzIHdpbGwgbm90IGJlIG9wdGltYWwuCisKK0lmIGl0IHN0aWxsIGZhaWxzLCB0aGVuIHlvdSBjYW4gc2VuZCB5b3VyIHByb2JsZW0gZGVzY3JpcHRpb24gdG8KK2FwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3cy1ncm91cHMuICBTZW5kIG1lIGEgY29weSBpbiBvcmRlciB0bworYmUgc3VyZSBJIHdpbGwgcmVjZWl2ZSBpdC4gIE9idmlvdXNseSwgYSBidWcgaW4gdGhlIGRyaXZlciBjb2RlIGlzCitwb3NzaWJsZS4KKworICAgICBNeSBlbWFpbCBhZGRyZXNzOiBHZXJhcmQgUm91ZGllciA8Z3JvdWRpZXJAZnJlZS5mcj4KKworQWxsb3dpbmcgZGlzY29ubmVjdGlvbnMgaXMgaW1wb3J0YW50IGlmIHlvdSB1c2Ugc2V2ZXJhbCBkZXZpY2VzIG9uCit5b3VyIFNDU0kgYnVzIGJ1dCBvZnRlbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBidWdneSBkZXZpY2VzLgorU3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMgaW5jcmVhc2VzIHRocm91Z2hwdXQgb2YgZmFzdCBkZXZpY2VzIGxpa2UKK2hhcmQgZGlza3MuICBHb29kIFNDU0kgaGFyZCBkaXNrcyB3aXRoIGEgbGFyZ2UgY2FjaGUgZ2FpbiBhZHZhbnRhZ2Ugb2YKK3RhZ2dlZCBjb21tYW5kcyBxdWV1aW5nLgorCitUcnkgdG8gZW5hYmxlIG9uZSBmZWF0dXJlIGF0IGEgdGltZSB3aXRoIGNvbnRyb2wgY29tbWFuZHMuICBGb3IgZXhhbXBsZToKKworLSBlY2hvICJzZXRzeW5jIGFsbCAyNSIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgV2lsbCBlbmFibGUgZmFzdCBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBhbGwgdGFyZ2V0cy4KKworLSBlY2hvICJzZXRmbGFnIDMiID4vcHJvYy9zY3NpL25jcjUzYzh4eC8wCisgIFdpbGwgcmVzZXQgZmxhZ3MgKG5vX2Rpc2MpIGZvciB0YXJnZXQgMywgYW5kIHNvIHdpbGwgYWxsb3cgaXQgdG8gZGlzY29ubmVjdCAKKyAgdGhlIFNDU0kgQnVzLgorCistIGVjaG8gInNldHRhZ3MgMyA4IiA+L3Byb2Mvc2NzaS9uY3I1M2M4eHgvMAorICBXaWxsIGVuYWJsZSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGZvciB0YXJnZXQgMyBpZiB0aGF0IGRldmljZSBzdXBwb3J0cyBpdC4KKworT25jZSB5b3UgaGF2ZSBmb3VuZCB0aGUgZGV2aWNlIGFuZCB0aGUgZmVhdHVyZSB0aGF0IGNhdXNlIHByb2JsZW1zLCBqdXN0IAorZGlzYWJsZSB0aGF0IGZlYXR1cmUgZm9yIHRoYXQgZGV2aWNlLgorCisxNS4yIFVuZGVyc3RhbmRpbmcgaGFyZHdhcmUgZXJyb3IgcmVwb3J0cworCitXaGVuIHRoZSBkcml2ZXIgZGV0ZWN0cyBhbiB1bmV4cGVjdGVkIGVycm9yIGNvbmRpdGlvbiwgaXQgbWF5IGRpc3BsYXkgYSAKK21lc3NhZ2Ugb2YgdGhlIGZvbGxvd2luZyBwYXR0ZXJuLgorCitzeW01M2M4NzYtMDoxOiBFUlJPUiAoMDo0OCkgKDEtMjEtNjUpIChmLzk1KSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KK3N5bTUzYzg3Ni0wOiBzY3JpcHQgY21kID0gMTkwMDAwMDAKK3N5bTUzYzg3Ni0wOiByZWdkdW1wOiBkYSAxMCA4MCA5NSA0NyAwZiAwMSAwNyA3NSAwMSA4MSAyMSA4MCAwMSAwOSAwMC4KKworU29tZSBmaWVsZHMgaW4gc3VjaCBhIG1lc3NhZ2UgbWF5IGhlbHAgeW91IHVuZGVyc3RhbmQgdGhlIGNhdXNlIG9mIHRoZSAKK3Byb2JsZW0sIGFzIGZvbGxvd3M6CisKK3N5bTUzYzg3Ni0wOjE6IEVSUk9SICgwOjQ4KSAoMS0yMS02NSkgKGYvOTUpIEAgKHNjcmlwdCA3YzA6MTkwMDAwMDApLgorLi4uLi4uLi4uLi4uQS4uLi4uLi4uLkIuQy4uLi5ELkUuLkYuLi4uRy5ILi4uLi4uLkkuLi4uLkouLi5LLi4uLi4uLgorCitGaWVsZCBBIDogdGFyZ2V0IG51bWJlci4KKyAgU0NTSSBJRCBvZiB0aGUgZGV2aWNlIHRoZSBjb250cm9sbGVyIHdhcyB0YWxraW5nIHdpdGggYXQgdGhlIG1vbWVudCB0aGUgCisgIGVycm9yIG9jY3Vycy4KKworRmllbGQgQiA6IERTVEFUIGlvIHJlZ2lzdGVyIChETUEgU1RBVFVTKQorICBCaXQgMHg0MCA6IE1EUEUgTWFzdGVyIERhdGEgUGFyaXR5IEVycm9yCisgICAgICAgICAgICAgRGF0YSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgb24gdGhlIFBDSSBCVVMuCisgIEJpdCAweDIwIDogQkYgICBCdXMgRmF1bHQKKyAgICAgICAgICAgICBQQ0kgYnVzIGZhdWx0IGNvbmRpdGlvbiBkZXRlY3RlZAorICBCaXQgMHgwMSA6IElJRCAgSWxsZWdhbCBJbnN0cnVjdGlvbiBEZXRlY3RlZAorICAgICAgICAgICAgIFNldCBieSB0aGUgY2hpcCB3aGVuIGl0IGRldGVjdHMgYW4gSWxsZWdhbCBJbnN0cnVjdGlvbiBmb3JtYXQgCisgICAgICAgICAgICAgb24gc29tZSBjb25kaXRpb24gdGhhdCBtYWtlcyBhbiBpbnN0cnVjdGlvbiBpbGxlZ2FsLgorICBCaXQgMHg4MCA6IERGRSBEbWEgRmlmbyBFbXB0eQorICAgICAgICAgICAgIFB1cmUgc3RhdHVzIGJpdCB0aGF0IGRvZXMgbm90IGluZGljYXRlIGFuIGVycm9yLgorICBJZiB0aGUgcmVwb3J0ZWQgRFNUQVQgdmFsdWUgY29udGFpbnMgYSBjb21iaW5hdGlvbiBvZiBNRFBFICgweDQwKSwgCisgIEJGICgweDIwKSwgdGhlbiB0aGUgY2F1c2UgbWF5IGJlIGxpa2VseSBkdWUgdG8gYSBQQ0kgQlVTIHByb2JsZW0uCisKK0ZpZWxkIEMgOiBTSVNUIGlvIHJlZ2lzdGVyIChTQ1NJIEludGVycnVwdCBTdGF0dXMpCisgIEJpdCAweDA4IDogU0dFICBTQ1NJIEdST1NTIEVSUk9SCisgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGNoaXAgZGV0ZWN0ZWQgYSBzZXZlcmUgZXJyb3IgY29uZGl0aW9uIAorICAgICAgICAgICAgIG9uIHRoZSBTQ1NJIEJVUyB0aGF0IHByZXZlbnRzIHRoZSBTQ1NJIHByb3RvY29sIGZyb20gZnVuY3Rpb25pbmcKKyAgICAgICAgICAgICBwcm9wZXJseS4KKyAgQml0IDB4MDQgOiBVREMgIFVuZXhwZWN0ZWQgRGlzY29ubmVjdGlvbgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgcmVsZWFzZWQgdGhlIFNDU0kgQlVTIHdoZW4gdGhlIGNoaXAgCisgICAgICAgICAgICAgd2FzIG5vdCBleHBlY3RpbmcgdGhpcyB0byBoYXBwZW4uIEEgZGV2aWNlIG1heSBiZWhhdmUgc28gdG8gCisgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIFNDU0kgaW5pdGlhdG9yIHRoYXQgYW4gZXJyb3IgY29uZGl0aW9uIG5vdCByZXBvcnRhYmxlICAgICAgICAgICAgICB1c2luZyB0aGUgU0NTSSBwcm90b2NvbCBoYXMgb2NjdXJyZWQuCisgIEJpdCAweDAyIDogUlNUICBTQ1NJIEJVUyBSZXNldAorICAgICAgICAgICAgIEdlbmVyYWxseSBTQ1NJIHRhcmdldHMgZG8gbm90IHJlc2V0IHRoZSBTQ1NJIEJVUywgYWx0aG91Z2ggYW55IAorICAgICAgICAgICAgIGRldmljZSBvbiB0aGUgQlVTIGNhbiByZXNldCBpdCBhdCBhbnkgdGltZS4KKyAgQml0IDB4MDEgOiBQQVIgIFBhcml0eQorICAgICAgICAgICAgIFNDU0kgcGFyaXR5IGVycm9yIGRldGVjdGVkLgorICBPbiBhIGZhdWx0eSBTQ1NJIEJVUywgYW55IGVycm9yIGNvbmRpdGlvbiBhbW9uZyBTR0UgKDB4MDgpLCBVREMgKDB4MDQpIGFuZCAKKyAgUEFSICgweDAxKSBtYXkgYmUgZGV0ZWN0ZWQgYnkgdGhlIGNoaXAuIElmIHlvdXIgU0NTSSBzeXN0ZW0gc29tZXRpbWVzIAorICBlbmNvdW50ZXJzIHN1Y2ggZXJyb3IgY29uZGl0aW9ucywgZXNwZWNpYWxseSBTQ1NJIEdST1NTIEVSUk9SLCB0aGVuIGEgU0NTSSAKKyAgQlVTIHByb2JsZW0gaXMgbGlrZWx5IHRoZSBjYXVzZSBvZiB0aGVzZSBlcnJvcnMuCisKK0ZvciBmaWVsZHMgRCxFLEYsRyBhbmQgSCwgeW91IG1heSBsb29rIGludG8gdGhlIHN5bTUzYzh4eF9kZWZzLmggZmlsZSAKK3RoYXQgY29udGFpbnMgc29tZSBtaW5pbWFsIGNvbW1lbnRzIG9uIElPIHJlZ2lzdGVyIGJpdHMuCitGaWVsZCBEIDogU09DTCAgU2NzaSBPdXRwdXQgQ29udHJvbCBMYXRjaAorICAgICAgICAgIFRoaXMgcmVnaXN0ZXIgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBTQ1NJIGNvbnRyb2wgbGluZXMgdGhlIAorICAgICAgICAgIGNoaXAgd2FudCB0byBkcml2ZSBvciBjb21wYXJlIGFnYWluc3QuCitGaWVsZCBFIDogU0JDTCAgU2NzaSBCdXMgQ29udHJvbCBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBjb250cm9sIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEYgOiBTQkRMICBTY3NpIEJ1cyBEYXRhIExpbmVzCisgICAgICAgICAgQWN0dWFsIHZhbHVlIG9mIGRhdGEgbGluZXMgb24gdGhlIFNDU0kgQlVTLgorRmllbGQgRyA6IFNYRkVSICBTQ1NJIFRyYW5zZmVyCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGhlIFN5bmNocm9ub3VzIFBlcmlvZCBmb3Igb3V0cHV0IGFuZCAKKyAgICAgICAgICB0aGUgY3VycmVudCBTeW5jaHJvbm91cyBvZmZzZXQgKG9mZnNldCAwIG1lYW5zIGFzeW5jaHJvbm91cykuCitGaWVsZCBIIDogU0NOVEwzIFNjc2kgQ29udHJvbCBSZWdpc3RlciAzCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGltaW5nIHZhbHVlcyBmb3IgYm90aCBhc3luY2hyb25vdXMgYW5kIAorICAgICAgICAgIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzLiAKKworVW5kZXJzdGFuZGluZyBGaWVsZHMgSSwgSiwgSyBhbmQgZHVtcHMgcmVxdWlyZXMgdG8gaGF2ZSBnb29kIGtub3dsZWRnZSBvZiAKK1NDU0kgc3RhbmRhcmRzLCBjaGlwIGNvcmVzIGZ1bmN0aW9ubmFscyBhbmQgaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGRlY29kZSBhbmQgdW5kZXJzdGFuZCB0aGVtLCB1bmxlc3MgeW91IHdhbnQgdG8gaGVscCAKK21haW50YWluIHRoZSBkcml2ZXIgY29kZS4KKworMTYuIFN5bmNob25vdXMgdHJhbnNmZXIgbmVnb3RpYXRpb24gdGFibGVzCisKK1RhYmxlcyBiZWxvdyBoYXZlIGJlZW4gY3JlYXRlZCBieSBjYWxsaW5nIHRoZSByb3V0aW5lIHRoZSBkcml2ZXIgdXNlcworZm9yIHN5bmNocm9uaXNhdGlvbiBuZWdvdGlhdGlvbiB0aW1pbmcgY2FsY3VsYXRpb24gYW5kIGNoaXAgc2V0dGluZy4KK1RoZSBmaXJzdCB0YWJsZSBjb3JyZXNwb25kcyB0byBVbHRyYSBjaGlwcyA1Mzg3NSBhbmQgNTNDODYwIHdpdGggODAgTUh6IAorY2xvY2sgYW5kIDUgY2xvY2sgZGl2aXNvcnMuCitUaGUgc2Vjb25kIG9uZSBoYXMgYmVlbiBjYWxjdWxhdGVkIGJ5IHNldHRpbmcgdGhlIHNjc2kgY2xvY2sgdG8gNDAgTWh6IAorYW5kIHVzaW5nIDQgY2xvY2sgZGl2aXNvcnMgYW5kIHNvIGFwcGxpZXMgdG8gYWxsIE5DUjUzQzhYWCBjaGlwcyBpbiBmYXN0IAorU0NTSS0yIG1vZGUuCisKK1BlcmlvZHMgYXJlIGluIG5hbm8tc2Vjb25kcyBhbmQgc3BlZWRzIGFyZSBpbiBNZWdhLXRyYW5zZmVycyBwZXIgc2Vjb25kLgorMSBNZWdhLXRyYW5zZmVycy9zZWNvbmQgbWVhbnMgMSBNQi9zIHdpdGggOCBiaXRzIFNDU0kgYW5kIDIgTUIvcyB3aXRoIAorV2lkZTE2IFNDU0kuCisKKzE2LjEgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgNTNDODk1LCA1M0M4NzUgYW5kIDUzQzg2MCBTQ1NJIGNvbnRyb2xsZXJzCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVnb3RpYXRlZCAgICAgICAgICAgICAgICAgICAgIE5DUiBzZXR0aW5ncworIEZhY3RvciAgIFBlcmlvZCAgIFNwZWVkICAgICAgICBQZXJpb2QgICBTcGVlZAorIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLSAgICAgICAtLS0tLS0gICAtLS0tLS0KKyAxMCAgICAgICAyNSAgICAgICA0MC4wMDAgICAgICAgMjUgICAgICAgNDAuMDAwICAgKDUzQzg5NSBvbmx5KQorIDExICAgICAgIDMwLjIgICAgIDMzLjExMiAgICAgICAzMS4yNSAgICAzMi4wMDAgICAoNTNDODk1IG9ubHkpCisgMTIgICAgICAgNTAgICAgICAgMjAuMDAwICAgICAgIDUwICAgICAgIDIwLjAwMAorIDEzICAgICAgIDUyICAgICAgIDE5LjIzMCAgICAgICA2MiAgICAgICAxNi4wMDAKKyAxNCAgICAgICA1NiAgICAgICAxNy44NTcgICAgICAgNjIgICAgICAgMTYuMDAwCisgMTUgICAgICAgNjAgICAgICAgMTYuNjY2ICAgICAgIDYyICAgICAgIDE2LjAwMAorIDE2ICAgICAgIDY0ICAgICAgIDE1LjYyNSAgICAgICA3NSAgICAgICAxMy4zMzMKKyAxNyAgICAgICA2OCAgICAgICAxNC43MDUgICAgICAgNzUgICAgICAgMTMuMzMzCisgMTggICAgICAgNzIgICAgICAgMTMuODg4ICAgICAgIDc1ICAgICAgIDEzLjMzMworIDE5ICAgICAgIDc2ICAgICAgIDEzLjE1NyAgICAgICA4NyAgICAgICAxMS40MjgKKyAyMCAgICAgICA4MCAgICAgICAxMi41MDAgICAgICAgODcgICAgICAgMTEuNDI4CisgMjEgICAgICAgODQgICAgICAgMTEuOTA0ICAgICAgIDg3ICAgICAgIDExLjQyOAorIDIyICAgICAgIDg4ICAgICAgIDExLjM2MyAgICAgICA5MyAgICAgICAxMC42NjYKKyAyMyAgICAgICA5MiAgICAgICAxMC44NjkgICAgICAgOTMgICAgICAgMTAuNjY2CisgMjQgICAgICAgOTYgICAgICAgMTAuNDE2ICAgICAgMTAwICAgICAgIDEwLjAwMAorIDI1ICAgICAgMTAwICAgICAgIDEwLjAwMCAgICAgIDEwMCAgICAgICAxMC4wMDAKKyAyNiAgICAgIDEwNCAgICAgICAgOS42MTUgICAgICAxMTIgICAgICAgIDguODg4CisgMjcgICAgICAxMDggICAgICAgIDkuMjU5ICAgICAgMTEyICAgICAgICA4Ljg4OAorIDI4ICAgICAgMTEyICAgICAgICA4LjkyOCAgICAgIDExMiAgICAgICAgOC44ODgKKyAyOSAgICAgIDExNiAgICAgICAgOC42MjAgICAgICAxMjUgICAgICAgIDguMDAwCisgMzAgICAgICAxMjAgICAgICAgIDguMzMzICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMxICAgICAgMTI0ICAgICAgICA4LjA2NCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMiAgICAgIDEyOCAgICAgICAgNy44MTIgICAgICAxMzEgICAgICAgIDcuNjE5CisgMzMgICAgICAxMzIgICAgICAgIDcuNTc1ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM0ICAgICAgMTM2ICAgICAgICA3LjM1MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNSAgICAgIDE0MCAgICAgICAgNy4xNDIgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzYgICAgICAxNDQgICAgICAgIDYuOTQ0ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM3ICAgICAgMTQ4ICAgICAgICA2Ljc1NiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzOCAgICAgIDE1MiAgICAgICAgNi41NzggICAgICAxNzUgICAgICAgIDUuNzE0CisgMzkgICAgICAxNTYgICAgICAgIDYuNDEwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQwICAgICAgMTYwICAgICAgICA2LjI1MCAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MSAgICAgIDE2NCAgICAgICAgNi4wOTcgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDIgICAgICAxNjggICAgICAgIDUuOTUyICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQzICAgICAgMTcyICAgICAgICA1LjgxMyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0NCAgICAgIDE3NiAgICAgICAgNS42ODEgICAgICAxODcgICAgICAgIDUuMzMzCisgNDUgICAgICAxODAgICAgICAgIDUuNTU1ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ2ICAgICAgMTg0ICAgICAgICA1LjQzNCAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NyAgICAgIDE4OCAgICAgICAgNS4zMTkgICAgICAyMDAgICAgICAgIDUuMDAwCisgNDggICAgICAxOTIgICAgICAgIDUuMjA4ICAgICAgMjAwICAgICAgICA1LjAwMAorIDQ5ICAgICAgMTk2ICAgICAgICA1LjEwMiAgICAgIDIwMCAgICAgICAgNS4wMDAKKworCisxNi4yIFN5bmNocm9ub3VzIHRpbWluZ3MgZm9yIGZhc3QgU0NTSS0yIDUzQzhYWCBjb250cm9sbGVycworCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lZ290aWF0ZWQgICAgICAgICAgICAgICAgICAgICBOQ1Igc2V0dGluZ3MKKyBGYWN0b3IgICBQZXJpb2QgICBTcGVlZCAgICAgICAgUGVyaW9kICAgU3BlZWQKKyAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAgICAgLS0tLS0tICAgLS0tLS0tCisgMjUgICAgICAxMDAgICAgICAgMTAuMDAwICAgICAgMTAwICAgICAgIDEwLjAwMAorIDI2ICAgICAgMTA0ICAgICAgICA5LjYxNSAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAyNyAgICAgIDEwOCAgICAgICAgOS4yNTkgICAgICAxMjUgICAgICAgIDguMDAwCisgMjggICAgICAxMTIgICAgICAgIDguOTI4ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDI5ICAgICAgMTE2ICAgICAgICA4LjYyMCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMCAgICAgIDEyMCAgICAgICAgOC4zMzMgICAgICAxMjUgICAgICAgIDguMDAwCisgMzEgICAgICAxMjQgICAgICAgIDguMDY0ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMyICAgICAgMTI4ICAgICAgICA3LjgxMiAgICAgIDEzMSAgICAgICAgNy42MTkKKyAzMyAgICAgIDEzMiAgICAgICAgNy41NzUgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzQgICAgICAxMzYgICAgICAgIDcuMzUyICAgICAgMTUwICAgICAgICA2LjY2NgorIDM1ICAgICAgMTQwICAgICAgICA3LjE0MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNiAgICAgIDE0NCAgICAgICAgNi45NDQgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzcgICAgICAxNDggICAgICAgIDYuNzU2ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM4ICAgICAgMTUyICAgICAgICA2LjU3OCAgICAgIDE3NSAgICAgICAgNS43MTQKKyAzOSAgICAgIDE1NiAgICAgICAgNi40MTAgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDAgICAgICAxNjAgICAgICAgIDYuMjUwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQxICAgICAgMTY0ICAgICAgICA2LjA5NyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MiAgICAgIDE2OCAgICAgICAgNS45NTIgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDMgICAgICAxNzIgICAgICAgIDUuODEzICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQ0ICAgICAgMTc2ICAgICAgICA1LjY4MSAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NSAgICAgIDE4MCAgICAgICAgNS41NTUgICAgICAxODcgICAgICAgIDUuMzMzCisgNDYgICAgICAxODQgICAgICAgIDUuNDM0ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ3ICAgICAgMTg4ICAgICAgICA1LjMxOSAgICAgIDIwMCAgICAgICAgNS4wMDAKKyA0OCAgICAgIDE5MiAgICAgICAgNS4yMDggICAgICAyMDAgICAgICAgIDUuMDAwCisgNDkgICAgICAxOTYgICAgICAgIDUuMTAyICAgICAgMjAwICAgICAgICA1LjAwMAorCisKKzE3LiBTZXJpYWwgTlZSQU0gKGFkZGVkIGJ5IFJpY2hhcmQgV2FsdGhhbTogZG9ybW91c2VAZmFyc3JvYnQuZGVtb24uY28udWspCisKKzE3LjEgRmVhdHVyZXMKKworRW5hYmxpbmcgc2VyaWFsIE5WUkFNIHN1cHBvcnQgZW5hYmxlcyBkZXRlY3Rpb24gb2YgdGhlIHNlcmlhbCBOVlJBTSBpbmNsdWRlZAorb24gU3ltYmlvcyBhbmQgc29tZSBTeW1iaW9zIGNvbXBhdGlibGUgaG9zdCBhZGFwdG9ycywgYW5kIFRla3JhbSBib2FyZHMuIFRoZSAKK3NlcmlhbCBOVlJBTSBpcyB1c2VkIGJ5IFN5bWJpb3MgYW5kIFRla3JhbSB0byBob2xkIHNldCB1cCBwYXJhbWV0ZXJzIGZvciB0aGUgCitob3N0IGFkYXB0b3IgYW5kIGl0J3MgYXR0YWNoZWQgZHJpdmVzLgorCitUaGUgU3ltYmlvcyBOVlJBTSBhbHNvIGhvbGRzIGRhdGEgb24gdGhlIGJvb3Qgb3JkZXIgb2YgaG9zdCBhZGFwdG9ycyBpbiBhCitzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIGhvc3QgYWRhcHRvci4gVGhpcyBlbmFibGVzIHRoZSBvcmRlciBvZiBzY2FubmluZwordGhlIGNhcmRzIGZvciBkcml2ZXMgdG8gYmUgY2hhbmdlZCBmcm9tIHRoZSBkZWZhdWx0IHVzZWQgZHVyaW5nIGhvc3QgYWRhcHRvcgorZGV0ZWN0aW9uLgorCitUaGlzIGNhbiBiZSBkb25lIHRvIGEgbGltaXRlZCBleHRlbnQgYXQgdGhlIG1vbWVudCB1c2luZyAicmV2ZXJzZSBwcm9iZSIgYnV0Cit0aGlzIG9ubHkgY2hhbmdlcyB0aGUgb3JkZXIgb2YgZGV0ZWN0aW9uIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBjYXJkcy4gVGhlCitOVlJBTSBib290IG9yZGVyIHNldHRpbmdzIGNhbiBkbyB0aGlzIGFzIHdlbGwgYXMgY2hhbmdlIHRoZSBvcmRlciB0aGUgc2FtZQordHlwZXMgb2YgY2FyZHMgYXJlIHNjYW5uZWQgaW4sIHNvbWV0aGluZyAicmV2ZXJzZSBwcm9iZSIgY2Fubm90IGRvLgorCitUZWtyYW0gYm9hcmRzIHVzaW5nIFN5bWJpb3MgY2hpcHMsIERDMzkwVy9GL1UsIHdoaWNoIGhhdmUgTlZSQU0gYXJlIGRldGVjdGVkCithbmQgdGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gU3ltYmlvcyBjb21wYXRpYmxlIGFuZCBUZWtyYW0gaG9zdCAKK2FkYXB0b3JzLiBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgU3ltYmlvcyBjb21wYXRpYmxlICJkaWZmIiBzZXR0aW5nCitpbmNvcnJlY3RseSBzZXQgb24gVGVrcmFtIGJvYXJkcyBpZiB0aGUgQ09ORklHX1NDU0lfNTNDOFhYX1NZTUJJT1NfQ09NUEFUIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IGVuYWJsaW5nIGJvdGggU3ltYmlvcyBhbmQgVGVrcmFtIGJvYXJkcyB0byBiZSAKK3VzZWQgdG9nZXRoZXIgd2l0aCB0aGUgU3ltYmlvcyBjYXJkcyB1c2luZyBhbGwgdGhlaXIgZmVhdHVyZXMsIGluY2x1ZGluZworImRpZmYiIHN1cHBvcnQuICgibGVkIHBpbiIgc3VwcG9ydCBmb3IgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzIGNhbiByZW1haW4KK2VuYWJsZWQgd2hlbiB1c2luZyBUZWtyYW0gY2FyZHMuIEl0IGRvZXMgbm90aGluZyB1c2VmdWwgZm9yIFRla3JhbSBob3N0CithZGFwdG9ycyBidXQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgZWl0aGVyLikKKworCisxNy4yIFN5bWJpb3MgTlZSQU0gbGF5b3V0CisKK3R5cGljYWwgZGF0YSBhdCBOVlJBTSBhZGRyZXNzIDB4MTAwICg1M2M4MTBhIE5WUkFNKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAwIDAwCis2NCAwMQorOGUgMGIKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAgCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIAorMDQgMDAgMDMgMDAgMDAgMTAgMDAgNTggMDAgMDAgMDEgMDAgMDAgNjMgCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworZmUgZmUKKzAwIDAwCiswMCAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05WUkFNIGxheW91dCBkZXRhaWxzCisKK05WUkFNIEFkZHJlc3MgMHgwMDAtMHgwZmYgbm90IHVzZWQKKyAgICAgICAgICAgICAgMHgxMDAtMHgyNmYgaW5pdGlhbGlzZWQgZGF0YQorICAgICAgICAgICAgICAweDI3MC0weDdmZiBub3QgdXNlZAorCitnZW5lcmFsIGxheW91dAorCisgICAgICAgIGhlYWRlciAgLSAgIDYgYnl0ZXMsCisgICAgICAgIGRhdGEgICAgLSAzNTYgYnl0ZXMgKGNoZWNrc3VtIGlzIGJ5dGUgc3VtIG9mIHRoaXMgZGF0YSkKKyAgICAgICAgdHJhaWxlciAtICAgNiBieXRlcworICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAzNjggYnl0ZXMKKworZGF0YSBhcmVhIGxheW91dAorCisgICAgICAgIGNvbnRyb2xsZXIgc2V0IHVwICAtICAyMCBieXRlcworICAgICAgICBib290IGNvbmZpZ3VyYXRpb24gLSAgNTYgYnl0ZXMgKDR4MTQgYnl0ZXMpCisgICAgICAgIGRldmljZSBzZXQgdXAgICAgICAtIDEyOCBieXRlcyAoMTZ4OCBieXRlcykKKyAgICAgICAgdW51c2VkIChzcGFyZT8pICAgIC0gMTUyIGJ5dGVzICgxOXg4IGJ5dGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0KKyAgICAgICAgdG90YWwgICAgICAgICAgICAgICAgMzU2IGJ5dGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitoZWFkZXIKKworMDAgMDAgICAtID8/IHN0YXJ0IG1hcmtlcgorNjQgMDEgICAtIGJ5dGUgY291bnQgKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCis4ZSAwYiAgIC0gY2hlY2tzdW0gKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29udHJvbGxlciBzZXQgdXAKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgIC0tIGhvc3QgSUQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgIC0tUmVtb3ZhYmxlIE1lZGlhIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMCA9IG5vbmUKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMSA9IEJvb3RhYmxlIERldmljZQorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAweDAyID0gQWxsIHdpdGggTWVkaWEKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgIC0tZmxhZyBiaXRzIDIKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAweDAwMDAwMDAxPSBzY2FuIG9yZGVyIGhpLT5sb3cKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgKGRlZmF1bHQgMHgwMCAtIHNjYW4gbG93LT5oaSkKKyAgICAgICAgICAgICAgICAgICAgLS1mbGFnIGJpdHMgMQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIHNjYW0gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgcGFyaXR5IGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwIHZlcmJvc2UgYm9vdCBtc2dzCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAgZm9yIGFueSBvZiB0aGUgY29udHJvbGxlcnMuCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCisoUmVtb3ZhYmxlIE1lZGlhIGFkZGVkIFN5bWJpb3MgQklPUyB2ZXJzaW9uIDQuMDkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9vdCBjb25maWd1cmF0aW9uCisKK2Jvb3Qgb3JkZXIgc2V0IGJ5IG9yZGVyIG9mIHRoZSBkZXZpY2VzIGluIHRoaXMgdGFibGUKKworMDQgMDAgMGYgMDAgMDAgMTAgMDAgNTAgMDAgMDAgMDEgMDAgMDAgNjIgLS0gMXN0IGNvbnRyb2xsZXIKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzICAgIDJuZCBjb250cm9sbGVyCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAgICAzcmQgY29udHJvbGxlcgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgICAgNHRoIGNvbnRyb2xsZXIKKyAgICAgICB8ICB8ICB8ICB8ICAgICB8ICAgICAgICB8ICAgICB8ICB8CisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgIC0tLS0gUENJIGlvIHBvcnQgYWRyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgIC0tMHgwMSBpbml0L3NjYW4gYXQgYm9vdCB0aW1lCisgICAgICAgfCAgfCAgfCAgfCAgICAgIC0tUENJIGRldmljZS9mdW5jdGlvbiBudW1iZXIgKDB4ZGRkZGRmZmYpCisgICAgICAgfCAgfCAgIC0tLS0tID8/IFBDSSB2ZW5kb3IgSUQgKGxzYi9tc2IpCisgICAgICAgIC0tLS1QQ0kgZGV2aWNlIElEIChsc2IvbXNiKQorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSBzZXQgdXAgKHVwIHRvIDE2IGRldmljZXMgLSBpbmNsdWRlcyBjb250cm9sbGVyKQorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIC0gaWQgMTUKKyB8ICAgICB8ICB8ICB8ICAgICB8ICB8CisgfCAgICAgfCAgfCAgfCAgICAgIC0tLS10aW1lb3V0IChsc2IvbXNiKQorIHwgICAgIHwgIHwgICAtLXN5bmNoIHBlcmlvZCAoMHg/PyA0MCBNdHJhbnMvc2VjLSBmYXN0IDQwKSAocHJvYmFibHkgMHgyOCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4MzAgMjAgTXRyYW5zL3NlYy0gZmFzdCAyMCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4NjQgMTAgTXRyYW5zL3NlYy0gZmFzdCApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweGM4ICA1IE10cmFucy9zZWMpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDAwICBhc3luY2hyb25vdXMpCisgfCAgICAgfCAgIC0tID8/IG1heCBzeW5jIG9mZnNldCAoMHgwOCBpbiBOVlJBTSBvbiA1M2M4MTBhKSAKKyB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIGluIE5WUkFNIG9uIDUzYzg3NSkKKyB8ICAgICAgLS1kZXZpY2UgYnVzIHdpZHRoICgweDA4IG5hcnJvdykKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIDE2IGJpdCB3aWRlKQorICAtLWZsYWcgYml0cworICAgIDB4MDAwMDAwMDEgLSBkaXNjb25uZWN0IGVuYWJsZWQKKyAgICAweDAwMDAwMDEwIC0gc2NhbiBhdCBib290IHRpbWUKKyAgICAweDAwMDAwMTAwIC0gc2NhbiBsdW5zCisgICAgMHgwMDAwMTAwMCAtIHF1ZXVlIHRhZ3MgZW5hYmxlZAorCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwCisKKz8/IHVzZSBvZiB0aGlzIGRhdGEgaXMgYSBndWVzcyBidXQgc2VlbXMgcmVhc29uYWJsZSAKKyhidXQgaXQgY291bGQgYmUgbWF4IGJ1cyB3aWR0aCkKKworZGVmYXVsdCBzZXQgdXAgZm9yIDUzYzgxMGEgTlZSQU0KK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4NzUgTlZSQU0gLSBidXMgd2lkdGggICAgIC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgb2Zmc2V0ID8gLSAweDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3luYyBwZXJpb2QgICAtIDB4MzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis/PyBzcGFyZSBkZXZpY2Ugc3BhY2UgKDMyIGJpdCBidXMgPz8pCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAoMTl4OGJ5dGVzKQorLgorLgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0cmFpbGVyCisKK2ZlIGZlICAgLSA/IGVuZCBtYXJrZXIgPworMDAgMDAKKzAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworMTcuMyBUZWtyYW0gTlZSQU0gbGF5b3V0CisKK252cmFtIDY0eDE2ICgxMDI0IGJpdCkKKworRHJpdmUgc2V0dGluZ3MKKworRHJpdmUgSUQgMC0xNSAoYWRkciAweDB5eXl5MCA9IGRldmljZSBzZXR1cCwgeXl5eSA9IElEKQorICAgICAgICAgICAgICAoYWRkciAweDB5eXl5MSA9IDB4MDAwMCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgIC0tLS0tIHBhcml0eSBjaGVjayAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgIC0tLS0tLS0gc3luYyBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAtLS0tLS0tLS0gZGlzY29ubmVjdCAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgIC0tLS0tLS0tLS0tIHN0YXJ0IGNtZCAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAtLS0tLS0tLS0tLS0tLSB0YWdnZWQgY21kcyAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgLS0tLS0tLS0tLS0tLS0tLSB3aWRlIG5lZyAgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3luYyByYXRlICAgICAgMCAtIDEwLjAgTXRyYW5zL3NlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDguMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDYuNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gIDUuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDUuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDQuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC0gIDMuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0gMjAuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5IC0gMTYuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC0gMTMuOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC0gMTEuOQorCitHbG9iYWwgc2V0dGluZ3MKKworSG9zdCBmbGFncyAwIChhZGRyIDB4MTAwMDAwLCAzMikgCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgfCB8IHwgfCAgfCB8IHwgfCAgICAgICAgICAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgICAtLS0tLS0tLS0tLSBob3N0IElEICAgIDB4MDAgLSAweDBmCisgICAgfCB8IHwgfCAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGZvciAgICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgID4gMiBkcml2ZXMgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfCB8IAorICAgIHwgfCB8IHwgIHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGRyaXZlcyAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMUdieXRlcyAgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfAorICAgIHwgfCB8IHwgIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBidXMgcmVzZXQgb24gICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93ZXIgb24gICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwKKyAgICB8IHwgfCB8ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWN0aXZlIG5lZyAgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwgfCB8CisgICAgfCB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltbSBzZWVrICAgICAgIDAgLSBvZmYKKyAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwKKyAgICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbiBsdW5zICAgICAgMCAtIG9mZgorICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVtb3ZhYmxlICAgICAgMCAtIGRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgQklPUyBkZXYgICAgMSAtIGJvb3QgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBhbGwKKworSG9zdCBmbGFncyAxIChhZGRyIDB4MTAwMDAxLCAzMykKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgIHwgfCB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgIC0tLS0tLS0tLSBib290IGRlbGF5ICAgICAwIC0gICAzIHNlYworICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gICA1CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgMTAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICAyMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDMwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgLSAgNjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtIDEyMAorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWF4IHRhZyBjbWRzICAgMCAtICAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIDE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAzMgorCitIb3N0IGZsYWdzIDIgKGFkZHIgMHgxMDAwMTAsIDM0KQorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gRjIvRjYgZW5hYmxlICAgMCAtIG9mZiA/Pz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uICA/Pz8KKworY2hlY2tzdW0gKGFkZHIgMHgxMTExMTEpCisKK2NoZWNrc3VtID0gMHgxMjM0IC0gKHN1bSBhZGRyIDAtNjMpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmYXVsdCBudnJhbSBkYXRhOgorCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIAorCisweDBmMDcgMHgwNDAwIDB4MDAwMSAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHhmYmJjCisKKworMTguIFN1cHBvcnQgZm9yIEJpZyBFbmRpYW4KKworVGhlIFBDSSBsb2NhbCBidXMgaGFzIGJlZW4gcHJpbWFyaWx5IGRlc2lnbmVkIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgorQXMgYSBjb25zZXF1ZW5jZSwgUENJIGRldmljZXMgZ2VuZXJhbGx5IGV4cGVjdCBEV09SRFMgdXNpbmcgbGl0dGxlIGVuZGlhbiAKK2J5dGUgb3JkZXJpbmcuCisKKzE4LjEgQmlnIEVuZGlhbiBDUFUKKworSW4gb3JkZXIgdG8gc3VwcG9ydCBOQ1IgY2hpcHMgb24gYSBCaWcgRW5kaWFuIGFyY2hpdGVjdHVyZSB0aGUgZHJpdmVyIGhhcyB0byAKK3BlcmZvcm0gYnl0ZSByZW9yZGVyaW5nIGVhY2ggdGltZSBpdCBpcyBuZWVkZWQuIFRoaXMgZmVhdHVyZSBoYXMgYmVlbiAKK2FkZGVkIHRvIHRoZSBkcml2ZXIgYnkgQ29ydCA8Y29ydEBjcy5ubXQuZWR1PiBhbmQgaXMgYXZhaWxhYmxlIGluIGRyaXZlciAKK3ZlcnNpb24gMi41IGFuZCBsYXRlciBvbmVzLiBGb3IgdGhlIG1vbWVudCBCaWcgRW5kaWFuIHN1cHBvcnQgaGFzIG9ubHkgCitiZWVuIHRlc3RlZCBvbiBMaW51eC9QUEMgKFBvd2VyUEMpLgorCisxOC4yIE5DUiBjaGlwIGluIEJpZyBFbmRpYW4gbW9kZSBvZiBvcGVyYXRpb25zCisKK0l0IGNhbiBiZSByZWFkIGluIFNZTUJJT1MgZG9jdW1lbnRhdGlvbiB0aGF0IHNvbWUgY2hpcHMgc3VwcG9ydCBhIHNwZWNpYWwgCitCaWcgRW5kaWFuIG1vZGUsIG9uIHBhcGVyOiA1M0M4MTUsIDUzQzgyNUEsIDUzQzg3NSwgNTNDODc1TiwgNTNDODk1LgorVGhpcyBtb2RlIG9mIG9wZXJhdGlvbnMgaXMgbm90IHNvZnR3YXJlLXNlbGVjdGFibGUsIGJ1dCBuZWVkcyBwaW4gbmFtZWQgCitCaWdMaXQgdG8gYmUgcHVsbGVkLXVwLiBVc2luZyB0aGlzIG1vZGUsIG1vc3Qgb2YgYnl0ZSByZW9yZGVyaW5ncyBzaG91bGQgCitiZSBhdm9pZGVkIHdoZW4gdGhlIGRyaXZlciBpcyBydW5uaW5nIG9uIGEgQmlnIEVuZGlhbiBDUFUuCitEcml2ZXIgdmVyc2lvbiAyLjUgaXMgYWxzbywgaW4gdGhlb3J5LCByZWFkeSBmb3IgdGhpcyBmZWF0dXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitFbmQgb2YgTkNSNTNDOFhYIGRyaXZlciBSRUFETUUgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvb3NzdC50eHQKQEAgLTAsMCArMSwyMTkgQEAKK1JFQURNRSBmaWxlIGZvciB0aGUgb3NzdCBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyh3KSBLdXJ0IEdhcmxvZmYgPGdhcmxvZmZAc3VzZS5kZT4gMTIvMjAwMAorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBvc3N0IGRyaXZlciBhcyBvZiB2ZXJzaW9uIDAuOC54LzAuOS54LCB0aGUgcmVsZWFzZWQKK3ZlcnNpb24gb2YgdGhlIG9zc3QgZHJpdmVyLgorSXQgaXMgaW50ZW5kZWQgdG8gaGVscCBhZHZhbmNlZCB1c2VycyB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIG9zc3QgYW5kIHRvCitnZXQgdGhlbSBzdGFydGVkIHVzaW5nIChhbmQgbWF5YmUgZGVidWdnaW5nKSBpdC4KK0l0IHdvbid0IGFkZHJlc3MgaXNzdWVzIGxpa2UgIkhvdyBkbyBJIGNvbXBpbGUgYSBrZXJuZWw/IiBvciAiSG93IGRvIEkgbG9hZAorYSBtb2R1bGU/IiwgYXMgdGhlc2UgYXJlIHRvbyBiYXNpYy4KK09uY2UgdGhlIE9uU3RyZWFtIGdvdCBtZXJnZWQgaW50byB0aGUgb2ZmaWNpYWwga2VybmVsLCB0aGUgZGlzdHJvIG1ha2Vycword2lsbCBwcm92aWRlIHRoZSBPblN0cmVhbSBzdXBwb3J0IGZvciB0aG9zZSB3aG8gYXJlIG5vdCBmYW1pbGlhciB3aXRoCitoYWNraW5nIHRoZWlyIGtlcm5lbHMuCisKKworUHVycG9zZQorLS0tLS0tLQorVGhlIG9zc3QgZHJpdmVyIHdhcyBkZXZlbG9wZWQsIGJlY2F1c2UgdGhlIHN0YW5kYXJkIFNDU0kgdGFwZSBkcml2ZXIgaW4KK0xpbnV4LCBzdCwgZG9lcyBub3Qgc3VwcG9ydCB0aGUgT25TdHJlYW0gU0MteDAgU0NTSSB0YXBlLiBUaGUgc3QgaXMgbm90IHRvCitibGFtZSBmb3IgdGhhdCwgYXMgdGhlIE9uU3RyZWFtIHRhcGUgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IHRoZSBzdGFuZGFyZCBTQ1NJCitjb21tYW5kIHNldCBmb3IgU2VyaWFsIEFjY2VzcyBTdG9yYWdlIERldmljZXMgKFNBU0RzKSwgd2hpY2ggYmFzaWNhbGx5Citjb3JyZXNwb25kcyB0byB0aGUgUUlDLTE1NyBzcGVjLgorTmV2ZXJ0aGVsZXNzLCB0aGUgT25TdHJlYW0gdGFwZXMgYXJlIG5pY2UgcGllY2VzIG9mIGhhcmR3YXJlIGFuZCB0aGVyZWZvcmUKK3RoZSBvc3N0IGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIHRvIG1ha2UgdGhlc2UgdGFwZSBkZXZzIHN1cHBvcnRlZCBieSBMaW51eC4KK1RoZSBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZS4gSXQncyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdQTCBhbmQgcGxhbm5lZCB0bworYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBtYWluc3RyZWFtIGtlcm5lbC4KKworCitJbXBsZW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK1RoZSBvc3N0IGlzIGEgbmV3IGhpZ2gtbGV2ZWwgU0NTSSBkcml2ZXIsIGp1c3QgbGlrZSBzdCwgc3IsIHNkIGFuZCBzZy4gSXQKK2NhbiBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3IgbG9hZGVkIGFzIGEgbW9kdWxlLgorQXMgaXQgcmVwcmVzZW50cyBhIG5ldyBkZXZpY2UsIGl0IGdvdCBhc3NpZ25lZCBhIG5ldyBkZXZpY2Ugbm9kZTogL2Rldi9vc3N0WAorYXJlIGNoYXJhY3RlciBkZXZpY2VzIHdpdGggbWFqb3Igbm8gMjA2IGFuZCBtaW5vciBudW1iZXJzIGxpa2UgdGhlIC9kZXYvc3RYCitkZXZpY2VzLiBJZiB0aG9zZSBhcmUgbm90IHByZXNlbnQsIHlvdSBtYXkgY3JlYXRlIHRoZW0gYnkgY2FsbGluZworTWFrZWRldnMuc2ggYXMgcm9vdCAoc2VlIGJlbG93KS4KK1RoZSBkcml2ZXIgc3RhcnRlZCBiZWluZyBhIGNvcHkgb2Ygc3QgYW5kIGFzIHN1Y2gsIHRoZSBvc3N0IGRldmljZXMnCitiZWhhdmlvciBsb29rcyB2ZXJ5IG11Y2ggdGhlIHNhbWUgYXMgc3QgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuCisKKworSGlzdG9yeQorLS0tLS0tLQorSW4gdGhlIGZpcnN0IHBsYWNlLCBvc3N0IHNoYXJlZCBpdCdzIGlkZW50aXR5IHZlcnkgbXVjaCB3aXRoIHN0LiBUaGF0IG1lYW50Cit0aGF0IGl0IHVzZWQgdGhlIHNhbWUga2VybmVsIHN0cnVjdHVyZXMgYW5kIHRoZSBzYW1lIGRldmljZSBub2RlIGFzIHN0LgorU28geW91IGNvdWxkIG9ubHkgaGF2ZSBlaXRoZXIgb2YgdGhlbSBiZWluZyBwcmVzZW50IGluIHRoZSBrZXJuZWwuIFRoaXMgaGFzCitiZWVuIGZpeGVkIGJ5IHJlZ2lzdGVyaW5nIGFuIG93biBkZXZpY2UsIG5vdy4KK3N0IGFuZCBvc3N0IGNhbiBjb2V4aXN0LCBlYWNoIG9ubHkgYWNjZXNzaW5nIHRoZSBkZXZpY2VzIGl0IGNhbiBzdXBwb3J0IGJ5Cit0aGVtc2VsdmVzLgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCitvc3N0IGdvdCBpbnRlZ3JhdGVkIGludG8gdGhlIGxpbnV4IGtlcm5lbC4gU2VsZWN0IGl0IGR1cmluZyBrZXJuZWwKK2NvbmZpZ3VyYXRpb24gYXMgbW9kdWxlIG9yIGNvbXBpbGUgc3RhdGljYWxseSBpbnRvIHRoZSBrZXJuZWwuCitDb21waWxlIHlvdXIga2VybmVsIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGVzLgorCitOb3csIHlvdXIgb3NzdCBkcml2ZXIgaXMgaW5zaWRlIHRoZSBrZXJuZWwgb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLAorZGVwZW5kaW5nIG9uIHlvdXIgY2hvaWNlIGR1cmluZyBrZXJuZWwgY29uZmlnLiBZb3UgbWF5IHN0aWxsIG5lZWQgdG8gY3JlYXRlCit0aGUgZGV2aWNlIG5vZGVzIGJ5IGNhbGxpbmcgdGhlIE1ha2VkZXZzLnNoIHNjcmlwdCAoc2VlIGJlbG93KSBtYW51YWxseSwKK3VubGVzcyB5b3UgdXNlIGEgZGV2ZnMga2VybmVsLCB3aGVyZSB0aGlzIHdvbid0IGJlIG5lZWRlZC4KKworVG8gbG9hZCB5b3VyIG1vZHVsZSwgeW91IG1heSB1c2UgdGhlIGNvbW1hbmQgCittb2Rwcm9iZSBvc3N0CithcyByb290LiBkbWVzZyBzaG91bGQgc2hvdyB5b3UsIHdoZXRoZXIgeW91ciBPblN0cmVhbSB0YXBlcyBoYXZlIGJlZW4KK3JlY29nbml6ZWQuCisKK0lmIHlvdSB3YW50IHRvIGhhdmUgdGhlIG1vZHVsZSBhdXRvbG9hZGVkIG9uIGFjY2VzcyB0byAvZGV2L29zc3QsIHlvdSBtYXkKK2FkZCBzb21ldGhpbmcgbGlrZQorYWxpYXMgY2hhci1tYWpvci0yMDYgb3NzdAordG8geW91ciAvZXRjL21vZHByb2JlLmNvbmYgKGJlZm9yZSAyLjY6IG1vZHVsZXMuY29uZikuCisKK1lvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgCitsbiAtcyBub3NzdDAgL2Rldi90YXBlCit0byBtYWtlIHByb2dyYW1zIGFzc3VtaW5nIGEgZGVmYXVsdCBuYW1lIG9mIC9kZXYvdGFwZSBtb3JlIGNvbnZlbmllbnQgdG8KK3VzZS4KKworVGhlIGRldmljZSBub2RlcyBmb3Igb3NzdCBoYXZlIHRvIGJlIGNyZWF0ZWQuIFVzZSB0aGUgTWFrZWRldnMuc2ggc2NyaXB0CithdHRhY2hlZCB0byB0aGlzIGZpbGUuCisKKworVXNpbmcgaXQKKy0tLS0tLS0tCitZb3UgbWF5IHVzZSB0aGUgT25TdHJlYW0gdGFwZSBkcml2ZXIgd2l0aCB5b3VyIHN0YW5kYXJkIGJhY2t1cCBzb2Z0d2FyZSwKK3doaWNoIG1heSBiZSB0YXIsIGNwaW8sIGFtYW5kYSwgYXJrZWlhLCBCUlUsIExvbmUgVGFyLCAuLi4KK2J5IHNwZWNpZnlpbmcgL2Rldi8obilvc3N0MCBhcyB0aGUgdGFwZSBkZXZpY2UgdG8gdXNlIG9yIHVzaW5nIHRoZSBhYm92ZQorc3ltbGluayB0cmljay4gVGhlIElPQ1RMcyB0byBjb250cm9sIHRhcGUgb3BlcmF0aW9uIGFyZSBhbHNvIG1vc3RseQorc3VwcG9ydGVkIGFuZCB5b3UgbWF5IHRyeSB0aGUgbXQgKG9yIG10X3N0KSBwcm9ncmFtIHRvIGp1bXAgYmV0d2VlbgorZmlsZW1hcmtzLCBlamVjdCB0aGUgdGFwZSwgLi4uCisKK1RoZXJlJ3Mgb25lIGxpbWl0YXRpb246IFlvdSBuZWVkIHRvIHVzZSBhIGJsb2NrIHNpemUgb2YgMzJrQi4KKworKFRoaXMgbGltaXRhdGlvbiBpcyB3b3JrZWQgb24gYW5kIHdpbGwgYmUgZml4ZWQgaW4gdmVyc2lvbiAwLjguOCBvZgorIHRoaXMgZHJpdmVyLikKKworSWYgeW91IGp1c3Qgd2FudCB0byBnZXQgc3RhcnRlZCB3aXRoIHN0YW5kYXJkIHNvZnR3YXJlLCBoZXJlIGlzIGFuIGV4YW1wbGUKK2ZvciBjcmVhdGluZyBhbmQgcmVzdG9yaW5nIGEgZnVsbCBiYWNrdXA6CisjIEJhY2t1cAordGFyIGN2ZiAtIC8gLS1leGNsdWRlIC9wcm9jIHwgYnVmZmVyIC1zIDMyayAtbSAyNE0gLUIgLXQgLW8gL2Rldi9ub3NzdDAKKyMgUmVzdG9yZQorYnVmZmVyIC1zIDMyayAtbSA4TSAtQiAtdCAtaSAvZGV2L29zc3QwIHwgdGFyIHh2ZiAtIC1DIC8KKworVGhlIGJ1ZmZlciBjb21tYW5kIGhhcyBiZWVuIHVzZWQgdG8gYnVmZmVyIHRoZSBkYXRhIGJlZm9yZSBpdCBnb2VzIHRvIHRoZQordGFwZSAob3IgdGhlIGZpbGUgc3lzdGVtKSBpbiBvcmRlciB0byBzbW9vdGggb3V0IHRoZSBkYXRhIHN0cmVhbSBhbmQgcHJldmVudAordGhlIHRhcGUgZnJvbSBuZWVkaW5nIHRvIHN0b3AgYW5kIHJld2luZC4gVGhlIE9uU3RyZWFtIGRvZXMgaGF2ZSBhbiBpbnRlcm5hbAorYnVmZmVyIGFuZCBhIHZhcmlhYmxlIHNwZWVkIHdoaWNoIGhlbHAgdGhpcywgYnV0IGVzcGVjaWFsbHkgb24gd3JpdGluZywgdGhlCitidWZmZXJpbmcgc3RpbGwgcHJvdmVzIHVzZWZ1bCBpbiBtb3N0IGNhc2VzLiBJdCBhbHNvIHBhZHMgdGhlIGRhdGEgdG8KK2d1YXJhbnRlZXMgdGhlIGJsb2NrIHNpemUgb2YgMzJrLiAoT3RoZXJ3aXNlIHlvdSBtYXkgcGFzcyB0aGUgLWI2NCBvcHRpb24gdG8KK3Rhci4pCitFeHBlY3Qgc29tZXRoaW5nIGxpa2UgMS44TUIvcyBmb3IgdGhlIFNDLXgwIGRyaXZlcyBhbmQgMC45TUIvcyBmb3IgdGhlIERJLTMwLgorVGhlIFVTQiBkcml2ZSB3aWxsIGdpdmUgeW91IGFib3V0IDAuN01CL3MuCitPbiBhIGZhc3QgbWFjaGluZSwgeW91IG1heSBwcm9maXQgZnJvbSBzb2Z0d2FyZSBkYXRhIGNvbXByZXNzaW9uICh6IGZsYWcgZm9yCit0YXIpLgorCisKK1VTQiBhbmQgSURFCistLS0tLS0tLS0tLQorVmlhIHRoZSBTQ1NJIGVtdWxhdGlvbiBsYXllcnMgdXNiLXN0b3JhZ2UgYW5kIGlkZS1zY3NpLCB5b3UgY2FuIGFsc28gdXNlIHRoZQorb3NzdCBkcml2ZXIgdG8gZHJpdmUgdGhlIFVTQi0zMCBhbmQgdGhlIERJLTMwIGRyaXZlcy4gKFVuZm9ydHVuYXRlbHksIHRoZXJlCitpcyBubyBzdWNoIGxheWVyIGZvciB0aGUgcGFyYWxsZWwgcG9ydCwgb3RoZXJ3aXNlIHRoZSBEUC0zMCB3b3VsZCB3b3JrIGFzCit3ZWxsLikgRm9yIHRoZSBVU0Igc3VwcG9ydCwgeW91IG5lZWQgdGhlIGxhdGVzdCAyLjQuMC10ZXN0IGtlcm5lbHMgYW5kIHRoZSAKK2xhdGVzdCB1c2Itc3RvcmFnZSBkcml2ZXIgZnJvbSAKK2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy8KK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvY3ZzLz9ncm91cF9pZD0zNTgxCisKK05vdGUgdGhhdCB0aGUgaWRlLXRhcGUgZHJpdmVyIGFzIG9mIDEuMTZmIHVzZXMgYSBzbGlnaHRseSBvdXRkYXRlZCBvbi10YXBlCitmb3JtYXQgYW5kIHRoZXJlZm9yZSBpcyBub3QgY29tcGxldGVseSBpbnRlcm9wZXJhYmxlIHdpdGggb3NzdCB0YXBlcy4KKworVGhlIEFEUi14MCBsaW5lIGlzIGZ1bGx5IFNDU0ktMiBjb21wbGlhbnQgYW5kIGlzIHN1cHBvcnRlZCBieSBzdCwgbm90IG9zc3QuCitUaGUgb24tdGFwZSBmb3JtYXQgaXMgc3VwcG9zZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgdXNlZCBieSBvc3N0LgorCisKK0ZlZWRiYWNrIGFuZCB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGRyaXZlciBkZXZlbG9wbWVudCBpcyBjb29yZGluYXRlZCB0aHJvdWdoIGEgbWFpbGluZyBsaXN0Cis8b3NzdEBsaW51eDEub25zdHJlYW0ubmw+CithIENWUyByZXBvc2l0b3J5IGFuZCBzb21lIHdlYiBwYWdlcy4gCitUaGUgdGVzdGVyJ3MgcGFnZXMgd2hpY2ggY29udGFpbiByZWNlbnQgbmV3cyBhbmQgdXBkYXRlZCBkcml2ZXJzIHRvIGRvd25sb2FkCitjYW4gYmUgZm91bmQgb24KK2h0dHA6Ly9saW51eDEub25zdHJlYW0ubmwvdGVzdC8KKworSWYgeW91IGZpbmQgYW55IHByb2JsZW1zLCBwbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIHRlc3RlcidzIHBhZ2UgaW4gb3JkZXIKK3RvIHNlZSB3aGV0aGVyIHRoZSBwcm9ibGVtIGlzIGFscmVhZHkga25vd24gYW5kIHNvbHZlZC4gT3RoZXJ3aXNlLCBwbGVhc2UKK3JlcG9ydCBpdCB0byB0aGUgbWFpbGluZyBsaXN0LiBZb3VyIGZlZWRiYWNrIGlzIHdlbGNvbWUuIChUaGlzIGhvbGRzIGFsc28KK2ZvciByZXBvcnRzIG9mIHN1Y2Nlc3NmdWwgdXNhZ2UsIG9mIGNvdXJzZS4pIAorSW4gY2FzZSBvZiB0cm91YmxlLCBwbGVhc2UgZG8gYWx3YXlzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvOgorKiBkcml2ZXIgYW5kIGtlcm5lbCB2ZXJzaW9uIHVzZWQgKHNlZSBzeXNsb2cpCisqIGRyaXZlciBtZXNzYWdlcyAoc3lzbG9nKQorKiBTQ1NJIGNvbmZpZyBhbmQgT25TdHJlYW0gRmlybXdhcmUgKC9wcm9jL3Njc2kvc2NzaSkKKyogZGVzY3JpcHRpb24gb2YgZXJyb3IuIElzIGl0IHJlcHJvZHVjaWJsZT8KKyogc29mdHdhcmUgYW5kIGNvbW1hbmRzIHVzZWQKKworWW91IG1heSBzdWJzY3JpYmUgdG8gdGhlIG1haWxpbmcgbGlzdCwgQlRXLCBpdCdzIGEgbWFqb3Jkb21vIGxpc3QuCisKKworU3RhdHVzCistLS0tLS0KKzAuOC4wIHdhcyB0aGUgZmlyc3Qgd2lkZXNwcmVhZCBCRVRBIHJlbGVhc2UuIFNpbmNlIHRoZW4gYSBsb3Qgb2YgcmVwb3J0cworaGF2ZSBiZWVuIHNlbnQsIGJ1dCBtb3N0bHkgcmVwb3J0ZWQgc3VjY2VzcyBvciBvbmx5IG1pbm9yIHRyb3VibGUuCitBbGwgdGhlIGlzc3VlcyBoYXZlIGJlZW4gYWRkcmVzc2VkLgorQ2hlY2sgdGhlIHdlYiBwYWdlcyBmb3IgbW9yZSBpbmZvIGFib3V0IHRoZSBjdXJyZW50IGRldmVsb3BtZW50cy4KKzAuOS54IGlzIHRoZSB0cmVlIGZvciB0aGUgMi4zLzIuNCBrZXJuZWwuCisKKworQWNrbm93bGVkZ21lbnRzCistLS0tLS0tLS0tLS0tLS0tCitUaGUgZHJpdmVyIGhhcyBiZWVuIHN0YXJ0ZWQgYnkgbWFraW5nIGEgY29weSBvZiBLYWkgTWFraXNhcmEncyBzdCBkcml2ZXIuCitNb3N0IG9mIHRoZSBkZXZlbG9wbWVudCBoYXMgYmVlbiBkb25lIGJ5IFdpbGxlbSBSaWVkZS4gVGhlIHByZXNlbmNlIG9mIHRoZQordXNlcnNwYWNlIHByb2dyYW0gb3NnIChvbnN0cmVhbXNnKSBmcm9tIFRlcnJ5IEhhcmRpZSBoYXMgYmVlbiByYXRoZXIKK2hlbHBmdWwuIFRoZSBzYW1lIGhvbGRzIGZvciBHYWRpIE94bWFuJ3MgaWRlLXRhcGUgc3VwcG9ydCBmb3IgdGhlIERJLTMwLgorSSBkaWQgYWRkIHNvbWUgcGF0Y2hlcyB0byB0aG9zZSBkcml2ZXJzIGFzIHdlbGwgYW5kIGNvb3JkaW5hdGVkIHRoaW5ncyBhCitsaXR0bGUgYml0LiAKK05vdGUgdGhhdCBtb3N0IG9mIHRoZW0gZGlkIG1vc3RseSBzcGVuZCB0aGVpciBzcGFyZSB0aW1lIGZvciB0aGUgY3JlYXRpb24gb2YKK3RoaXMgZHJpdmVyLgorVGhlIHBlb3BsZSBmcm9tIE9uU3RyZWFtLCBlc3BlY2lhbGx5IEphY2sgQm9tYmVlY2sgZGlkIHN1cHBvcnQgdGhpcyBwcm9qZWN0CithbmQgYWx3YXlzIHRyaWVkIHRvIGFuc3dlciBIVyBvciBGVyByZWxhdGVkIHF1ZXN0aW9ucy4gRnVydGhlcm1vcmUsIGhlCitwdXNoZWQgdGhlIEZXIGRldmVsb3BlcnMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5ncy4KK1N1U0UgZGlkIHN1cHBvcnQgdGhpcyBwcm9qZWN0IGJ5IGFsbG93aW5nIG1lIHRvIHdvcmsgb24gaXQgZHVyaW5nIG15IHdvcmtpbmcKK3RpbWUgZm9yIHRoZW0gYW5kIGJ5IGludGVncmF0aW5nIHRoZSBkcml2ZXIgaW50byB0aGVpciBkaXN0cm8uCisKK01vcmUgcGVvcGxlIGRpZCBoZWxwIGJ5IHNlbmRpbmcgdXNlZnVsIGNvbW1lbnRzLiBTb3JyeSB0byB0aG9zZSB3aG8gaGF2ZQorYmVlbiBmb3Jnb3R0ZW4uIFRoYW5rcyB0byBhbGwgdGhlIEdOVS9GU0YgYW5kIExpbnV4IGRldmVsb3BlcnMgd2hvIG1hZGUgdGhpcworcGxhdGZvcm0gc3VjaCBhbiBpbnRlcmVzdGluZywgbmljZSBhbmQgc3RhYmxlIHBsYXRmb3JtLgorVGhhbmtzIGdvIHRvIHRob3NlIHdobyB0ZXN0ZWQgdGhlIGRyaXZlcnMgYW5kIGRpZCBzZW5kIHVzZWZ1bCByZXBvcnRzLiBZb3VyCitoZWxwIGlzIG5lZWRlZCEKKworCitNYWtlZGV2cy5zaAorLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorIyBTY3JpcHQgdG8gY3JlYXRlIE9uU3RyZWFtIFNDLXgwIGRldmljZSBub2RlcyAobWFqb3IgMjA2KQorIyBVc2FnZTogTWFrZWRldnMuc2ggW25vcyBbcGF0aCB0byBkZXZdXQorIyAkSWQ6IFJFQURNRS5vc3N0Lmtlcm5lbCx2IDEuNCAyMDAwLzEyLzIwIDE0OjEzOjE1IGdhcmxvZmYgRXhwICQKK21ham9yPTIwNgorbnJzPTQKK2Rpcj0vZGV2Cit0ZXN0IC16ICIkMSIgfHwgbnJzPSQxCit0ZXN0IC16ICIkMiIgfHwgZGlyPSQyCitkZWNsYXJlIC1pIG5yCitucj0wCit0ZXN0IC1kICRkaXIgfHwgbWtkaXIgLXAgJGRpcgord2hpbGUgdGVzdCAkbnIgLWx0ICRucnM7IGRvCisgIG1rbm9kICRkaXIvb3NzdCRuciBjICRtYWpvciAkbnIKKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCRucjsgY2htb2QgNjYwICRkaXIvb3NzdCRucjsKKyAgbWtub2QgJGRpci9ub3NzdCRuciBjICRtYWpvciAkW25yKzEyOF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3QkbnI7IGNobW9kIDY2MCAkZGlyL25vc3N0JG5yOworICBta25vZCAkZGlyL29zc3Qke25yfWwgYyAkbWFqb3IgJFtuciszMl0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9bDsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9bDsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9bCBjICRtYWpvciAkW25yKzE2MF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfWw7IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1sOworICBta25vZCAkZGlyL29zc3Qke25yfW0gYyAkbWFqb3IgJFtucis2NF0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9bTsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9bTsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9bSBjICRtYWpvciAkW25yKzE5Ml0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfW07IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1tOworICBta25vZCAkZGlyL29zc3Qke25yfWEgYyAkbWFqb3IgJFtucis5Nl0KKyAgY2hvd24gMC5kaXNrICRkaXIvb3NzdCR7bnJ9YTsgY2htb2QgNjYwICRkaXIvb3NzdCR7bnJ9YTsKKyAgbWtub2QgJGRpci9ub3NzdCR7bnJ9YSBjICRtYWpvciAkW25yKzIyNF0KKyAgY2hvd24gMC5kaXNrICRkaXIvbm9zc3Qke25yfWE7IGNobW9kIDY2MCAkZGlyL25vc3N0JHtucn1hOworICBsZXQgbnIrPTEKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3BwYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhYzg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0CkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tLS0tIFRlcnNlIHdoZXJlIHRvIGdldCBaSVAgRHJpdmUgaGVscCBpbmZvIC0tLS0tLS0tCisKK0dlbmVyYWwgSW9tZWdhIFpJUCBkcml2ZSBwYWdlIGZvciBMaW51eDoKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvCisKK0RyaXZlciBhY2hpdmUgZm9yIG9sZCBkcml2ZXJzOgoraHR0cDovL3d3dy50b3JxdWUubmV0L35jYW1wYmVsbC9wcGEvCisKK0xpbnV4IFBhcnBvcnQgcGFnZSAocGFyYWxsZWwgcG9ydCkKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9wYXJwb3J0LworCitFbWFpbCBsaXN0IGZvciBMaW51eCBQYXJwb3J0CitsaW51eC1wYXJwb3J0QHRvcnF1ZS5uZXQKKworRW1haWwgZm9yIHByb2JsZW1zIHdpdGggWklQIG9yIFpJUCBQbHVzIGRyaXZlcnMKK2NhbXBiZWxsQHRvcnF1ZS5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3FsYTJ4eHgucmV2aXNpb24ubm90ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwY2RhZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogUUxvZ2ljIElTUDIyMDAgYW5kIElTUDIzMDAgTGludXggRHJpdmVyIFJldmlzaW9uIExpc3QgRmlsZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZXZpc2lvbiBIaXN0b3J5CisgKgorICogIFJldiAgOC4wMC4wMGI4CURlY2VtYmVyIDUsIDIwMDMJQVYKKyAqCS0gSW5zdHJ1Y3QgbWlkLWxheWVyIHRvIHBlcmZvcm0gaW5pdGlhbCBzY2FuLgorICoKKyAqICBSZXYgIDguMDAuMDBiNwlEZWNlbWJlciA1LCAyMDAzCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0MTEuCisgKgktIEFkZCBiYXNpYyBOVlJBTSBwYXJzZXIgKGV4dHJhcy9xbGFfbnZyKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlMTEgRGVjZW1iZXIgMywgMjAwMwlBVgorICoJLSBTYW5pdGl6ZSB0aGUgc2NzaV9xbGFfaG9zdCBzdHJ1Y3R1cmU6CisgKgkgIC0gUHVyZ2UgdW51c2VkIGVsZW1lbnRzLgorICoJICAtIFJlb3JnYW5pemUgaGlnaC1wcmlvcml0eSBtZW1iZXJzIChjYWNoZSBjb2hlcmVuY3kpLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgTlZSQU0gYWNjZXNzIHZpYSBhIHN5c2ZzIGJpbmFyeSBhdHRyaWJ1dGU6CisgKgkgIC0gQ29uc29saWRhdGUgc2VtYXBob3JlIGxvY2tpbmcgYWNjZXNzLgorICoJLSBGaXggbW9yZSBQQ0kgcG9zdGluZyBpc3N1ZXMuCisgKgktIEFkZCBleHRyYXMgZGlyZWN0b3J5IGZvciBkdW1wL05WUkFNIHRvb2xzLgorICoJLSBSZW1vdmUgdW51c2VkIHFsYV92ZW5kb3IuYyBmaWxlLgorICoKKyAqICBSZXYgIDguMDAuMDBiNy1wcmUxMSBOb3ZlbWJlciAyNiwgMjAwMwlERy9BVgorICoJLSBNZXJnZSBzZXZlcmFsIHBhdGNoZXMgZnJvbSBDaHJpc3RvcGggSGVsbHdpZyBbaGNoQGxzdC5kZV06CisgKgkgIC0gaW4gTGludXggMi42IGJvdGggcGNpIGFuZCB0aGUgc2NzaSBsYXllciB1c2UgdGhlIGdlbmVyaWMKKyAqCSAgICBkbWEgZGlyZWN0aW9uIGJpdHMsIHVzZSB0aGVtIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIHNjc2kKKyAqCSAgICBhbmQgcGNpIHZhcmlhbnRzIGFuZCB0aGUgKG5vb3ApIGNvbnZlcnNpb24gcm91dGluZXMuCisgKgktIEZpeCBfSU9YWF9CQUQoKSB1c2FnZSBmb3IgZXh0ZXJuYWwgSU9DVEwgaW50ZXJmYWNlLgorICoJLSBVc2UgYXRvbWljIGNvbnN0cnVjdCBmb3IgSEEgbG9vcF9zdGF0ZSBtZW1iZXIuCisgKgktIEFkZCBnZW5lcmljIG1vZGVsIGRlc2NyaXB0aW9uIHRleHQgZm9yIEhCQSB0eXBlcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlNQlOb3ZlbWJlciAxNywgMjAwMwlBVgorICoJLSBNZXJnZSBzZXZlcmFsIHBhdGNoZXMgZnJvbSBDaHJpc3RvcGggSGVsbHdpZyBbaGNoQGxzdC5kZV06CisgKgkgIC0gcGF0Y2ggdG8gc3BsaXQgdGhlIGRyaXZlciBpbnRvIGEgY29tbW9uIHFsYTJ4eHgua28gYW5kIGEKKyAqCSAgICBxbGEyPzAwLmtvIGZvciBlYWNoIEhCQSB0eXBlIC0gdGhlIGxhdHRlciBtb2R1bGVzIGFyZQorICoJICAgIG9ubHkgdmVyeSBzbWFsbCB3cmFwcGVycywgbW9zdGx5IGZvciB0aGUgZmlybXdhcmUKKyAqCSAgICBpbWFnZXMsIGFsbCB0aGUgbWVhdCBpcyBpbiB0aGUgY29tbW9uIHFsYTJ4eHgua28uCisgKgkgIC0gbWFrZSB0aGUgZmFpbG92ZXIgY29kZSBvcHRpb25hbC4KKyAqCSAgLSBraWxsIHVzZWxlc3MgbG9ja19rZXJuZWwgaW4gZHBjIHRocmVhZCBzdGFydHVwLgorICoJICAtIG5vIG5lZWQgZm9yIG1vZHZlcnNpb25zIGhhY2tzIGluIDIuNiAob3IgMi40KS4KKyAqCSAgLSBraWxsIHFsYTJ4MDBfcmVnaXN0ZXJfd2l0aF9MaW51eC4KKyAqCSAgLSBzaW1wbGlmeSBFSCBjb2RlLCBjbWQgb3IgaXQncyBob3N0ZGF0YSBjYW4ndCBiZSBOVUxMLCBubworICoJICAgIG5lZWQgdG8gc2VhcmNoIHdoZXRoZXIgdGhlIGhvc3QgaXQncyBvdXJzLCB0aGUgbWlkbGF5ZXIKKyAqCSAgICBtYWtlcyBzdXJlIGl0IHdvbid0IGNhbGwgaW50byBhIGRyaXZlciBmb3Igc29tZSBlbHNlCisgKgkgICAgaG9zdC4KKyAqCS0gTWVyZ2Ugc2V2ZXJhbCBwYXRjaGVzIGZyb20gSmVzIFNvcmVuc2VuCisgKgkgIFtqZXNAd2lsZG9wZW5zb3VyY2UuY29tXToKKyAqCSAgLSBDYWxsIHFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKCkgYmVmb3JlIHBlcmZvcm1pbmcKKyAqCSAgICBhbnkgY29uc2lzdGVudCBhbGxvY2F0aW9ucy4gVGhpcyBpcyByZXF1aXJlZCBzaW5jZSB0aGUKKyAqCSAgICBkbWEgbWFzayBzZXR0aW5ncyB3aWxsIGFmZmVjdCB0aGUgbWVtb3J5CisgKgkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB3aWxsIHJldHVybi4KKyAqCSAgLSBDYWxsIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpIHRvIGFsbG93IGZvciA2NCBiaXQKKyAqCSAgICBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCByZXF1aXJlZCBvbiBzb21lIHBsYXRmb3JtcyBzdWNoCisgKgkgICAgYXMgdGhlIFNOMi4KKyAqCSAgLSBXYWl0IDIwIHVzZWNzIChub3Qgc3VyZSBob3cgbG9uZyBpcyByZWFsbHkgbmVjZXNzYXJ5LAorICoJICAgIGJ1dCB0aGlzIHNlZW1zIHNhZmUpIGFmdGVyIHNldHRpbmcgQ1NSX0lTUF9TT0ZUX1JFU0VUIGluCisgKgkgICAgdGhlIGN0cmxfc3RhdHVzIHJlZ2lzdGVyIGFzIHRoZSBjYXJkIGRvZXNuJ3QgcmVzcG9uZCB0bworICoJICAgIFBDSSByZWFkcyB3aGlsZSBpbiByZXNldCBzdGF0ZS4gVGhpcyBjYXVzZXMgYSBtYWNoaW5lCisgKgkgICAgY2hlY2sgb24gc29tZSBhcmNoaXRlY3R1cmVzLgorICoJICAtIEZsdXNoIFBDSSB3cml0ZXMgYmVmb3JlIGNhbGxpbmcgdWRlbGF5KCkgdG8gZW5zdXJlIHRoZQorICoJICAgIHdyaXRlIGlzIG5vdCBzaXR0aW5nIGlkbGUgaW4tZmxpZ2h0IGZvciBhIHdoaWxlIGJlZm9yZQorICoJICAgIGhpdHRpbmcgdGhlIGhhcmR3YXJlLgorICoJICAtIEluY2x1ZGUgbGludXgvdm1hbGxvYy5oIGluIHFsYV9vcy5jIHNpbmNlIGl0IHVzZXMKKyAqCSAgICB2bWFsbG9jKCkuCisgKgkgIC0gVXNlIGF1dG8tbmVnb3RpYXRlIGxpbmsgc3BlZWQgd2hlbiB1c2luZyBkZWZhdWx0CisgKgkgICAgcGFyYW1ldGVycyByYXRoZXIgdGhhbiBOVlJBTSBzZXR0aW5ncy4gRGlzYWJsZSBOVlJBTQorICoJICAgIHJlYWRpbmcgb24gU04yIHNpbmNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGV4ZWN1dGUgdGhlCisgKgkgICAgSEJBJ3MgQklPUyBvbiBhbiBTTjIuIEkgc3VnZ2VzdCBkb2luZyBzb21ldGhpbmcgc2ltaWxhcgorICoJICAgIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBwcm92aWRlIHg4NiBCSU9TCisgKgkgICAgZW11bGF0aW9uLgorICoJLSBDbGVhbi11cCBzbGFiLWNhY2hlIGFsbG9jYXRpb25zOgorICoJICAtIGxvY2tpbmcuCisgKgkgIC0gbWVtcG9vbCBhbGxvY2F0aW9ucyBpbiBjYXNlIG9mIGxvdy1tZW1vcnkgc2l0dWF0aW9ucy4KKyAqCS0gRmFsbGJhY2sgdG8gR0FfTlhUIHNjYW4gaWYgR0lEX1BUIGNhbGwgcmV0dXJucyBtb3JlIHRoYW4KKyAqCSAgTUFYX0ZJQlJFX0RFVklDRVMuCisgKgktIFByZXNlcnZlIGl0ZXJhdGluZyBwb3J0IElEIGFjcm9zcyBHQV9OWFQgY2FsbHMgaW4KKyAqCSAgcWxhMngwMF9maW5kX2FsbF9mYWJyaWNfZGV2cygpLgorICoJLSBQcmUtY2FsY3VsYXRlIEFTQ0lJIGZpcm13YXJlIGR1bXAgbGVuZ3RoIGFzIHRvIG5vdCBpbmN1ciB0aGUKKyAqCSAgY29zdC10by1jYWxjdWxhdGUgYXQgZWFjaCBpbnZvY2F0aW9uIG9mIGEgcmVhZCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNglOb3ZlbWJlciA0LCAyMDAzCUFWCisgKgktIEFkZCBuZXcgMjMwMCBUUFggZmlybXdhcmUgKDMuMDIuMTgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUyNSBPY3RvYmVyIDIwLCAyMDAzCVJBL0FWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0OS4KKyAqCS0gUmV3b3JrIGZpcm13YXJlIGR1bXAgcHJvY2VzczoKKyAqCSAgLSBVc2UgYmluYXJ5IGF0dHJpYnV0ZSB3aXRoaW4gc3lzZnMgdHJlZS4KKyAqCSAgLSBBZGQgdXNlci1zcGFjZSB0b29sIChnZHVtcC5zaCkgdG8gcmV0cmlldmUgZm9ybWF0dGVkCisgKgkgICAgYnVmZmVyLgorICoJICAtIEFkZCBJU1AyMTAwIHN1cHBvcnQuCisgKgktIFVzZSBhIHNsYWIgY2FjaGUgZm9yIFNSQiBhbGxvY2F0aW9ucyB0byByZWR1Y2UgbWVtb3J5CisgKgkgIHByZXNzdXJlLgorICoJLSBJbml0aWFsIGNvbnZlcnNpb24gb2YgZHJpdmVyIGxvZ2dpbmcgbWV0aG9kcyB0byBhIG5ldworICoJICBxbGFfcHJpbnRrKCkgZnVuY3Rpb24gd2hpY2ggdXNlcyBkZXZfcHJpbnRrIChEYW5pZWwKKyAqCSAgU3Rla2xvZmYsIElCTSkuCisgKgktIEZ1cnRoZXIgcmVkdWNlIHN0YWNrIHVzYWdlIGluIHFsYTJ4MDBfY29uZmlndXJlX2xvY2FsX2xvb3AoKQorICoJICBhbmQgcWxhMngwMF9maW5kX2FsbF9mYWJyaWNfZGV2cygpLgorICoJLSBTZXBhcmF0ZSBwb3J0IHN0YXRlIHVzZWQgZm9yIHJvdXRpbmcgb2YgSS9PJ3MgZnJvbSBwb3J0CisgKgkgIG1nbXQtbG9naW4gcmV0cnkgZXRjLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUxOSBPY3RvYmVyIDEzLCAyMDAzCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0Ny1iazUuCisgKgktIEFkZCBpbnRlbGxpZ2VudCBSU0NOIGV2ZW50IGhhbmRsaW5nOgorICoJICAtIHJlZHVjZSBzY2FuIHRpbWUgZHVyaW5nICdwb3J0JyBSU0NOIGV2ZW50cyBieSBvbmx5CisgKgkgICAgcXVlcnlpbmcgc3BlY2lmaWVkIHBvcnQgaWRzLgorICoJICAtIEF2YWlsYWJsZSBvbiBJU1AyM3h4IGNhcmRzIG9ubHkuCisgKgktIEluY3JlYXNlIG1heGltdW0gbnVtYmVyIG9mIHJlY29nbml6YWJsZSB0YXJnZXRzIGZyb20gMjU2CisgKgkgIHRvIDUxMi4KKyAqCSAgLSBCYWNrZW5kIGNoYW5nZXMgd2VyZSBwcmV2aW91c2x5IGFkZGVkIHRvIHN1cHBvcnQgVFBYCisgKgkgICAgKDJLIGxvZ2lucykgZmlybXdhcmUuICBNaWQtbGF5ZXIgY2FuIG5vdyBzY2FuIGZvciB0YXJnZXRzCisgKgkgICAgKEgsIEIsIFQsIEwpIHdoZXJlIDUxMiA8IFQgPj0gMC4KKyAqCS0gUmVtb3ZlIElQIHN1cHBvcnQgZnJvbSBkcml2ZXIuCisgKgkgIC0gU3dpdGNoIGZpcm13YXJlIHR5cGVzIGZyb20gSVAtPlRQIGZvciBJU1AyMnh4IGFuZAorICoJICAgIElQWC0+VFBYIGZvciBJU1AyM3h4IGNhcmRzLgorICoJICAtIFJlbW92ZSBmaWxlcyBxbGFfaXAuW2NoXS4KKyAqCS0gUmVtb3ZlIHR5cGUgZGVzaWduYXRpb25zIGZyb20gZmlybXdhcmUgZmlsZW5hbWVzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNi1wcmUxMSBTZXB0ZW1iZXIgMTUsIDIwMDMJREcvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMC4KKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNi4wLXRlc3Q1LWJrMy4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xNSkuCisgKgorICogIFJldiAgOC4wMC4wMGI1CUp1bHkgMzEsIDIwMDMJCUFWCisgKgktIEFsd2F5cyBjcmVhdGUgYW4gZmNfbHVuX3QgZW50cnkgZm9yIGx1biAwIC0gYXMgdGhlIG1pZC0KKyAqCSAgbGF5ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIHRoaXMgbHVuIGZvciBkaXNjb3ZlcnkgdG8gb2NjdXIuCisgKgktIEdlbmVyYWwgc2FuaXRpemluZzoKKyAqCSAgLSBBZGQgZ2VuZXJpYyBmaXJtd2FyZSBvcHRpb24gZGVmaW5pdGlvbnMuCisgKgkgIC0gR2VuZXJhbGl6ZSByZXRyaWV2YWwvdXBkYXRlIG9mIGZpcm13YXJlIG9wdGlvbnMuCisgKgkgIC0gRml4IGNvbXBpbGUgZXJyb3JzIHdoaWNoIG9jY3VyIHdpdGggZXh0ZW5kZWQgZGVidWcuCisgKgkgIC0gSGFuZGxlIGZhaWx1cmUgY2FzZXMgZm9yIHNjc2lfYWRkX2hvc3QoKSBhbmQKKyAqCSAgICBkb3duX2ludGVycnVwdGlibGUoKS4KKyAqCS0gSG9zdCB0ZW1wbGF0ZSB1cGRhdGVzOgorICoJICAtIFVzZSBzdGFuZGFyZCBiaW9zX3BhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uLgorICoJICAtIERpc2FibGUgY2x1c3RlcmluZy4KKyAqCSAgLSBSZW1vdmUgdW5jaGVja2VkX2lzX2RtYSBlbnRyeS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjUtcHJlNQlKdWx5IDI5LCAyMDAzCQlERy9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEzLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDIuCisgKgktIFBhc3MgdGhlIGNvbXBsZXRlIGxvb3BfaWQsIG5vdCB0aGUgbWFza2VkICgweGZmKSB2YWx1ZQorICoJICB3aGlsZSBpc3N1aW5nIG1haWxib3ggY29tbWFuZHMgKHFsYV9tYnguYy9xbGFfZm8uYy8KKyAqCSAgcWxhX2lvY2IuYy9xbGFfaW5pdC5jKS4KKyAqCS0gUHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIHJldHVybiBzdGF0dXMgZm9yIGFuIFJMQyBDREIuCisgKgktIENyZWF0ZSBhbiBmY2x1bl90IHN0cnVjdHVyZSBmb3IgJ2Rpc2Nvbm5lY3RlZCcgbHVucywKKyAqCSAgcGVyaXBoZXJhbC1xdWFsaWZpZXIgb2YgMDAxYi4KKyAqCS0gUmVtb3ZlIHVudXNlZCBMSVAtc2VxdWVuY2UgcmVnaXN0ZXIgYWNjZXNzIGR1cmluZyBBRSA4MDEwLgorICoJLSBHZW5lcmFsaXplIHFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCgpIHRvIGhhbmRsZSBmb3JjZWQgCisgKgkgIGxvZ2luIHJlcXVlc3QgLS0gbW9kaWZ5IGFsbCBkaXJlY3QvaW5kaXJlY3QgaW52b2NhdGlvbnMgCisgKgkgIHdpdGggcHJvcGVyIGZsYWcuCisgKgktIFNhdmUgUlNDTiBub3RpZmljYXRpb24gKEFFIDgwMTVoKSBkYXRhIGluIGEgcHJvcGVyIGFuZCAKKyAqCSAgY29uc2lzdGVudCBmb3JtYXQgKGRvbWFpbiwgYXJlYSwgYWxfcGEpLgorICoJLSBHZW5lcmFsIHNhbml0aXppbmc6CisgKgkgIC0gc2NzaV9xbGFfaG9zdCBzdHJ1Y3R1cmUgbWVtYmVyIHJlb3JkZXJpbmcgZm9yIGNhY2hlLWxpbmUKKyAqCSAgICBjb2hlcmVuY3kuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBTQ1NJIG9wY29kZXMsIGVuZGlhbi1zd2FwIGRlZmluaXRpb25zLgorICoJICAtIFJlbW92ZSBDTURfKiBwcmUtcHJvY2Vzc29yIGRlZmluZXMuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBTQ1NJRkNIT1RTV0FQL0dBTUFQL01VTFRJSE9TVCBjb2Rlcy4KKyAqCS0gQmFja291dCBwYXRjaCB3aGljaCBhZGRlZCBhIHBlci1zY3NpX3FsYV9ob3N0IHNjc2kgaG9zdAorICoJICBzcGlubG9jaywgc2luY2UgbWlkLWxheWVyIGFscmVhZHkgZGVmaW5lcyBvbmUuCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNAlKdWx5IDE0LCAyMDAzCQlSQS9ERy9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEyLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDEuCisgKgktIFJlbW92ZSBJT0NCIHRocm90dGxpbmcgY29kZSAtLSBvcmlnaW5hbGx5ICNpZidkLgorICoJLSBSZW1vdmUgYXBpZGV2XyooKSByb3V0aW5lcyBzaW5jZSBwcm9jX21rbm9kKCkgaGFzIGJlZW4KKyAqCSAgcmVtb3ZlZCAtLSBuZWVkIGFsdGVybmF0ZSBJT0NUTCBpbnRlcmZhY2UuCisgKgktIE1lcmdlIHNldmVyYWwgcGVyZm9ybWFuY2UvZml4IHBhdGNoZXMgZnJvbSBBcmphbiB2YW4gZGUKKyAqCSAgVmVuOgorICoJICAtIFVuZGVmaW5lZCBvcGVyYXRpb24gPj4gMzIuCisgKgkgIC0gTm8gbmVlZCB0byBhY3F1aXJlIG1pZC1sYXllciBsb2NrIGR1cmluZyBjb21tYW5kCisgKgkgICAgY2FsbGJhY2suIAorICoJICAtIFVzZSBhIHBlci1IQkEgbWlkLWxheWVyIGxvY2suCisgKgkgIC0gVXNlIGEgbm9uLWxvY2tlZCBjeWNsZSBmb3Igc2V0dGluZyB0aGUgY291bnQgb2YgdGhlCisgKgkgICAgbmV3bHkgYWxsb2NhdGVkIHNwIChxbGEyeDAwX2dldF9uZXdfc3AoKSkuCisgKgkgIC0gTW9kaWZ5IHNlbWFudGljIGJlaGF2aW9yIG9mIHFsYTJ4MDBfcXVldWVjb21tYW5kKCk6CisgKgkgICAgLSBSZWR1Y2UgY2FjaGVsaW5lIGJvdW5jaW5nIGJ5IGhhdmluZyBJL09zIHN1Ym1pdHRlZAorICoJICAgICAgYnkgdGhlIElSUSBoYW5kbGVyLgorICoJICAgIC0gUmVtb3ZlIGV4dHJhbmVvdXMgY2FsbHMgdG8gcWxhMngwMF9uZXh0KCkgZHVyaW5nIEkvTworICoJICAgICAgcXVldWluZy4KKyAqCSAgLSBVc2UgbGlzdF9zcGxpY2VfaW5pdCgpIGR1cmluZyBxbGEyeDAwX2RvbmUoKSBoYW5kbGluZworICoJICAgIG9mIGNvbW1hbmRzIHRvIHJlZHVjZSBsaXN0X2xvY2sgY29udGVudGlvbi4KKyAqCSAgLSBSSU8gbW9kZSBzdXBwb3J0IGZvciBJU1AyMjAwOgorICoJICAgIC0gSW1wbGVtZW50YXRpb24gZGlmZmVycyBzbGlnaHRseSBmcm9tIG9yaWdpbmFsIHBhdGNoLgorICoJICAtIERvIG5vdCB1c2UgYm90dG9tLWhhbGYgaGFuZGxlciAodGFza2xldC93b3JrIHF1ZXVlKQorICoJICAgIGZvciBxbGEyeDAwX2RvbmUoKSBwcm9jZXNzaW5nLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUyMiBKdWx5IDEyLCAyMDAzCQlBVgorICoJLSBDaGVjayBmb3IgJ1Byb2Nlc3MgUmVzcG9uc2UgUXVldWUnIHJlcXVlc3RzIGVhcmx5IGR1cmluZworICoJICB0aGUgSG9zdCBTdGF0dXMgY2hlY2suCisgKgktIEdlbmVyYWwgc2FuaXRpemluZzoKKyAqCSAgLSBzcmJfdCBzdHJ1Y3R1cmUgcmV3cml0ZSwgcmVtb3ZhbCBvZiB1bnVzZWQgbWVtYmVycy4KKyAqCSAgLSBSZW1vdmUgdW51c2VkIGZjZGV2IGFycmF5LCBmYWJyaWNpZCwgYW5kIFBPUlRfKgorICoJICAgIGRlZmluaXRpb25zLgorICoJICAtIFJlbW92ZSB1bnVzZWQgY29uZmlnX3JlZ190IFBDSSBkZWZpbml0aW9ucy4KKyAqCS0gQWRkIG5ldyAyMjAwIElQIGZpcm13YXJlICgyLjAyLjA2KS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xNCkuCisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTE5IEp1bmUgMzAsIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzMtYms4LgorICoJLSBSZXdvcmsgSU9DQiBjb21tYW5kIHF1ZXVpbmcgbWV0aG9kczoKKyAqCSAgLSBVcHBlci1sYXllciBkcml2ZXIgKk1VU1QqIHByb3Blcmx5IHNldCB0aGUgZGlyZWN0aW9uCisgKgkgICAgYml0IG9mIFNDU0kgY29tbWFuZHMuCisgKgkgIC0gR2VuZXJhbGl6ZSAzMmJpdC82NGJpdCBxdWV1aW5nIHBhdGggZnVuY3Rpb25zLgorICoJICAtIFJlbW92ZSBjb3N0bHkgcGFnZS1ib3VuZGFyeSBjcm9zcyBjaGVjayB3aGVuIHVzaW5nCisgKgkgICAgNjRiaXQgYWRkcmVzcyBjYXBhYmxlIElPQ0JzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxNSBKdW5lIDE5LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjExLgorICoJLSBDb250aW51ZSBmY3BvcnQgbGlzdCBjb25zb2xpZGF0aW9uIHdvcms6CisgKgkgIC0gVXBkYXRlZCBJT0NUTCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIG5ldyBmY3BvcnRzIAorICoJICAgIGxpc3QuCisgKgktIE1vZGlmaWVkIHByb2R1Y3QgSUQgY2hlY2sgdG8gbm90IHZlcmlmeSBJU1AgY2hpcAorICoJICByZXZpc2lvbiAtLSBJU1AyMzEyIHYzIChxbGEyeDAwX2NoaXBfZGlhZygpKS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMyk6CisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTEzIEp1bmUgMTksIDIwMDMJCUFWCisgKgktIEZpeCBidWlsZCBwcm9jZXNzIGZvciBxbGEyMTAwIGRyaXZlciAtLSBubyBzdXBwb3J0CisgKgkgIGZvciBJUC4KKyAqCS0gU0NTSSBob3N0IHRlbXBsYXRlIG1vZGlmaWNhdGlvbnM6CisgKgkgIC0gU2V0IHNnX3RhYmxlc2l6ZSBiYXNlZCBvbiB0aGUgZGVyaXZlZCBETUEgbWFzay4KKyAqCSAgLSBJbmNyZWFzZSBtYXhfc2VjdG9ycyBzaW5jZSBvbmx5IGxpbWl0IHdpdGhpbiBSSVNDCisgKgkgICAgaXMgdHJhbnNmZXIgb2YgKCgoMl4zMikgLSAxKSA+PiA5KSBzZWN0b3JzLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxMiBKdW5lIDE4LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEwLgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjcyLgorICoJLSBJbml0aWFsIGZjcG9ydCBsaXN0IGNvbnNvbGlkYXRpb24gd29yazoKKyAqCSAgLSBmY3BvcnRzL2ZjaW5pdGlhdG9ycy9mY2Rldi9mY19pcCAtLT4gaGEtPmZjcG9ydHMKKyAqCSAgICBsaXN0LgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmU3CSBKdW5lIDA1LCAyMDAzCQlBVgorICoJLSBQcm9wZXJseSByZWxlYXNlIFBDSSByZXNvdWNlcyBpbiBpbml0LWZhaWx1cmUgY2FzZS4KKyAqCS0gUmVjb25jaWxlIGRpc3Bhcml0ZSBmdW5jdGlvbiByZXR1cm4gY29kZSBkZWZpbml0aW9ucy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlNAkgSnVuZSAwMywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS43MC1iazg6CisgKgkgIC0gU0hUIHByb2NfaW5mbygpIGNoYW5nZXMuCisgKgktIFJlc3RydWN0dXJlIFNOUyBHZW5lcmljIFNlcnZpY2VzIHJvdXRpbmVzOgorICoJICAtIEFkZCBxbGFfZ3MuYyBmaWxlIHRvIGRyaXZlciBkaXN0cmlidXRpb24uCisgKgktIENvbmZpZ3VyZSBQQ0kgbGF0ZW5jeSB0aW1lciBmb3IgSVNQMjN4eC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlMwkgSnVuZSAwMiwgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGI1LgorICoJLSBSZXdvcmsgKGFnYWluKSBQQ0kgSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24KKyAqCSAgKEFudG9uIEJsYW5jaGFyZCk6CisgKgkgIC0gVXNlIHBjaV9zZXRfbXdpKCkgcm91dGluZTsKKyAqCSAgICAtIFJlbW92ZSB1bmVlZGVkIHFsYTJ4MDBfc2V0X2NhY2hlX2xpbmUoKSBmdW5jdGlvbi4KKyAqCSAgLSBSZW1vdmUgZXh0cmFuZW91cyBtb2RpZmljYXRpb24gb2YgUENJX0NPTU1BTkQgd29yZC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMgCSBNYXkgMjksIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzAuCisgKgktIE1vdmUgUklTQyBwYXVzZWQgY2hlY2sgZnJvbSBJU1IgZmFzdC1wYXRoLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmU4IE1heSAyNiwgMjAwMwkJQVYKKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMik6CisgKgktIFJld29yayBQQ0kgSS9PIHNwYWNlIGNvbmZpZ3VyYXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTYJTWF5IDIyLCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjMuCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTQJTWF5IDIxIDIwMDMJCUFWCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTEpOgorICoJICAtIFJlbW92ZSAyMzAwIFRQWCBmaXJtd2FyZSBmcm9tIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMtcHJlMwlNYXkgMjEgMjAwMwkJQVYKKyAqCS0gUHJvcGVybHkgc2V0dXAgUENJIGNvbmZpZ3VhdGlvbiBzcGFjZSBkdXJpbmcKKyAqCSAgaW5pdGlhbGl6YXRpb246CisgKgkgIC0gUHJvcGVybHkgY29uZmlndXJlIE1lbW9yeS1NYXBwZWQgSS9PIGR1cmluZyBlYXJseQorICoJICAgIGNvbmZpZ3VyYXRpb24gc3RhZ2UuCisgKgktIFJld29yayBJUCBmdW5jdGlvbmFsaXR5IHRvIHN1cHBvcnQgMmsgbG9naW5zLgorICoJLSBBZGQgbmV3IDIzMDAgSVBYIGZpcm13YXJlICgzLjAyLjExKToKKyAqCSAgLSBSZW1vdmUgMjMwMCBUUFggZmlybXdhcmUgZnJvbSBkaXN0cmlidXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTIJTWF5ID8/LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA2LjAwYjEuCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTEJTWF5ID8/LCAyMDAzCQlSQSwgREcsIFJMLCBBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwLgorICoKKyAqICBSZXYgIDguMDAuMDBiMglNYXkgMTksIDIwMDMJCUFWCisgKgktIFNpbXBsaWZ5IGRtYV9hZGRyX3QgaGFuZGxpbmcgZHVyaW5nIGNvbW1hbmQgcXVldWluZyBnaXZlbgorICoJICBuZXcgYmxvY2stbGF5ZXIgZGVmaW5lZCByZXN0cmljdGlvbnM6CisgKgkgIC0gUGh5c2ljYWwgYWRkcmVzc2VzIG5vdCBzcGFubmluZyA0R0IgYm91bmRhcmllcy4KKyAqCS0gRmlybXdhcmUgdmVyc2lvbnM6IDIxMDAgVFAgKDEuMTkuMjQpLCAyMjAwIElQICgyLjAyLjA1KSwKKyAqCSAgMjMwMCBUUFggKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMi1wcmUxCU1heSAxMywgMjAwMwkJQVYKKyAqCS0gQWRkIHN1cHBvcnQgZm9yIG5ldyAnSG90cGx1ZyBpbml0aWFsaXphdGlvbicgbW9kZWwuIAorICoJLSBTaW1wbGlmeSBob3N0IHRlbXBsYXRlIGJ5IHJlbW92aW5nIHVudXNlZCBjYWxsYmFja3MuCisgKgktIFVzZSBzY3NpY2FtIGZhY2lsaXRpZXMgdG8gZGV0ZXJtaW5lIGdlb21ldHJ5LgorICoJLSBGaXggY29tcGlsYXRpb24gaXNzdWVzIGZvciBub24tSVNQMjN4eCBidWlsZHM6CisgKgkgIC0gQ29ycmVjdCByZWdpc3RlciByZWZlcmVuY2VzIGluIHFsYV9kYmcuYy4KKyAqCSAgLSBDb3JyZWN0IE1ha2VmaWxlIGJ1aWxkIHByb2Nlc3MuCisgKgorICogIFJldiAgOC4wMC4wMGIxCU1heSAwNSwgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42OS4KKyAqCS0gRmlybXdhcmUgdmVyc2lvbnM6IDIxMDAgVFAgKDEuMTkuMjQpLCAyMjAwIFRQICgyLjAyLjA1KSwKKyAqCSAgMjMwMCBUUFggKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0NSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42OC1iazExOgorICoJLSBGaXggaW1wcm9wZXIgcmV0dXJuLWNvZGUgYXNzaWdubWVudCBkdXJpbmcgZmFicmljCisgKgkgIGRpc2NvdmVyeS4KKyAqCS0gUmVtb3ZlIGFkZGl0aW9uYWwgZXh0cmFuZW91cyAjZGVmaW5lcyBmcm9tCisgKgkgIHFsYV9zZXR0aW5ncy5oLgorICoJICAtIFVTRV9QT1JUTkFNRSAtLSBGTyB3aWxsIGFsd2F5cyB1c2UgcG9ydG5hbWUuCisgKgktIERlZmF1bHQgcXVldWUgZGVwdGggc2l6ZSBzZXQgdG8gNjQuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTQyIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBDb252ZXJ0IGJvdHRvbS1oYWxmIHRhc2tsZXQgdG8gYSB3b3JrX3F1ZXVlLgorICoJLSBJbml0aWFsIGJhc2ljIGNvZGluZyBvZiBkeW5hbWljIHF1ZXVlIGRlcHRoIGhhbmRsaW5nCisgKgkgIGR1cmluZyBRVUVVRSBGVUxMIHN0YXR1c2VzLgorICoJLSBGaXggbWFpbGJveCBpbnRlcmZhY2UgcHJvYmxlbSB3aXRoCisgKgkgIHFsYTJ4MDBfZ2V0X3JldHJ5X2NudCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0MSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gQ29udmVydCBidWlsZCBkZWZpbmVzIHFsYTJbMXwyfDNdMDAgbWFjcm9zIHRvCisgKgkgIHFsYTJbMXwyfDNdeHggZHVlIHRvIG1vZHVsZSBuYW1lIHN0cmluZ2lmaWNhdGlvbiBjbGFzaGVzLgorICoJLSBBZGQgYWRkaXRpb25hbCBJU1AyMzIyIGNoZWNrcyBkdXJpbmcgYm9hcmQgY29uZmlndXJhdGlvbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlNDAgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjgtYms4OgorICoJICAtIFVwZGF0ZWQgSVJRIGhhbmRsZXIgaW50ZXJmYWNlLgorICoJLSBBZGQgSVNQIGR1bXAgY29kZSAoc3R1YikgaW4gY2FzZSBvZiBTWVNURU1fRVJST1Igb24KKyAqCSAgSVNQMjEwMC4KKyAqCS0gQWRkIG5ldyAyMjAwIElQIGZpcm13YXJlICgyLjAyLjA1KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMzkgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjguCisgKgktIEFkZCBzaW1wbGUgYnVpbGQuc2ggc2NyaXB0IHRvIGFpZCBpbiBleHRlcm5hbCBjb21waWxhdGlvbi4KKyAqCS0gQ2xlYW4tYnJlYWsgd2l0aCBLZXJuZWwgMi40IGNvbXBhdGliaWxpdHkuCisgKgkgIC0gUmV3b3JrIERQQyByb3V0aW5lIC0tIGNvbXBsZXRpb24gcm91dGluZXMgZm9yIHNpZ25hbGluZy4KKyAqCS0gUmUtYWRkIEhCQUFQSSBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgZm9yIElPQ1RMIHN1cHBvcnQuCisgKgktIFJlbW92ZSByZXNpZHVhbCBRTEEyWF9QRVJGT1JNQU5DRSBkZWZpbmVzLgorICoJLSBBbGxvY2F0ZSBTUCBwb29sIHZpYSBfX2dldF9mcmVlX3BhZ2VzKCkgcmF0aGVyIHRoYW4KKyAqCSAgaW5kaXZpZHVhbCBrbWFsbG9jKCkncy4KKyAqCS0gSW5mb3JtIFNDU0kgbWlkLWxheWVyIG9mIDE2LWJ5dGUgQ0RCIHN1cHBvcnQKKyAqCSAgKGhvc3QtPm1heF9jbWRfbGVuKToKKyAqCSAgLSBSZW1vdmUgdW5lY2Vzc2FyeSAnbW9yZV9jZGInIGhhbmRsaW5nIGNvZGUgZnJvbQorICoJICAgIHFsYV9pb2NiLmMgYW5kIHFsYV94aW9jdC5jLgorICoJLSBSZWR1Y2UgZHVwbGljYXRlIGNvZGUgaW4gZmFicmljIHNjYW5uaW5nIGxvZ2ljIChNUyBJT0NCCisgKgkgIHByZXBhcmF0aW9uKS4KKyAqCS0gQWRkIElTUCBkdW1wIGNvZGUgaW4gY2FzZSBvZiBTWVNURU1fRVJST1IuCisgKgktIFJlbW92ZSAyMzAwIFZJWCBmaXJtd2FyZSBmcm9tIGRpc3RyaWJ1dGlvbjoKKyAqCSAgLSBBZGQgaW5pdGlhbCBjb2RlIGZvciBJUFggc3VwcG9ydC4KKyAqCS0gQWRkIG5ldyAyMzAwIFRQWCBmaXJtd2FyZSAoMy4wMi4xMCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTM0IEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjY3LgorICoJLSBVc2UgZG9tYWluL2FyZWEvYWxfcGEgZmllbGRzIHdoZW4gZGlzcGxheWluZyBQb3J0SUQgCisgKgkgIHZhbHVlcyAtLSBhZGRyZXNzZXMgZW5kaWFuZXNzIGlzc3Vlcy4KKyAqCS0gUmV3b3JrIGxhcmdlIGNhc2Ugc3RhdGVtZW50IHRvIGNoZWNrICdjb21tb24nIENEQiBjb21tYW5kcworICoJICBlYXJseSBpbiBxbGEyeDAwX2dldF9jbWRfZGlyZWN0aW9uKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTMxIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBVcGRhdGUgbWFrZWZpbGUgdG8gc3VwcG9ydCBQUEM2NCBidWlsZC4KKyAqCS0gUmV0b29sIE5WUkFNIGNvbmZpZ3VyYXRpb24gcm91dGluZSBhbmQgc3RydWN0dXJlczoKKyAqCSAgLSBDb25zb2xkYXRlIElTUDIxeHgvSVNQMjJ4eC9JU1AyM3h4IGNvbmZpZ3VyYXRpb24KKyAqCSAgICAoc3RydWN0IG52cmFtX3QpLgorICoJICAtIFJlbW92ZSBiaWcvbGl0dGxlIGVuZGlhbiBzdXBwb3J0IHN0cnVjdHVyZXMgaW4gZmF2b3Igb2YKKyAqCSAgICBzaW1wbGlmaWVkIGJpdC1vcGVyYXRpb25zIHdpdGhpbiBieXRlIGZpZWxkcy4KKyAqCS0gRml4IGxvbmctc3RhbmRpbmcgJ3N0YXRpYycgYnVmZmVyIHNoYXJpbmcgcHJvYmxlbSBpbiAKKyAqCSAgcWxhMngwMF9jb25maWd1cmVfZmFicmljKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTMwIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBDb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBHSURfUFQgc2Nhbi4KKyAqCS0gVXNlIGNvbnNpc3RlbnQgTVMgSU9DQiBpbnZvY2F0aW9uIG1ldGhvZCB0byBxdWVyeSBTTlM6CisgKgkgIC0gQWRkIFJOTl9JRCBhbmQgUlNOTl9OTiByZWdpc3RyYXRpb25zIGluIGEgZmFicmljLgorICoJLSBSZW1vdmUgdW51c2VkIE1haWxib3ggQ29tbWFuZCA2RWggKFNlbmQgU05TKSBzdXBwb3J0CisgKgkgIHN0cnVjdHVyZXMuCisgKgktIFVzZSA2NGJpdCBzYWZlIElPQ0JzIHdoaWxlIGlzc3VpbmcgSU5RVUlSWSBhbmQgUkxDIGR1cmluZworICoJICB0b3BvbG9neSBzY2FuLgorICoJLSBVbnRpbCByZWltcGxlbWVudGF0aW9uIG9mIGZjZGV2X3QvZmNwb3J0IGxpc3QKKyAqCSAgY29uc29saWRhdGlvbiwgdmFsaWQgbG9vcF9pZCByYW5nZXMgYXJlIHN0aWxsIGxpbWl0ZWQgZnJvbQorICoJICAweDAwIHRocm91Z2ggMHhGRiAtLSBlbmZvcmNlIHRoaXMgd2l0aGluIHRoZSBjb2RlLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUyNyBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI5LgorICoJLSBSZXRvb2wgSEJBIFBDSSBjb25maWd1cmF0aW9uIC0tIHFsYTJ4MDBfcGNpX2NvbmZpZygpLgorICoJLSBSZW1vdmUgaW5jb25zaXN0ZW50IHVzZSBvZiBkZWxheSByb3V0aW5lcyAoVURFTEFZL1NZUyopLgorICoJLSBDb250aW51ZSB0byB0ZWFyZG93bi9jbGVhbi9hZGQgY29tbWVudHMgYW5kIGRlYnVnCisgKgkgIHJvdXRpbmVzLgorICoJLSBQcm9wZXJseSBzd2FwIGJ5dGVzIG9mIHRoZSBkZXZpY2UncyBub2RlbmFtZSBpbgorICoJICBxbGEyeDAwX2NvbmZpZ3VyZV9sb2NhbF9sb29wKCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTI1IE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjguCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTIzIE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZW1vdmUgKCNkZWZpbmUpIElPQ0IgdXNhZ2UgdGhyb3R0bGluZy4KKyAqCS0gQWJzdHJhY3QgaW50ZXJydXB0IHBvbGxpbmcgd2l0aCBxbGEyeDAwX3BvbGwoKS4KKyAqCS0gTW9kaWZ5IGx1biBzY2FubmluZyBsb2dpYzoKKyAqCSAgLSBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIFNDU0kgUmVwb3J0IEx1bnMKKyAqCSAgICBjb21tYW5kLCB0aGUgZHJpdmVyIHdpbGwgbm93IG9ubHkgc2NhbiBmcm9tIDAgdG8gdGhlCisgKgkgICAgbWF4Iy1sdW5zIGFzIGRlZmluZWQgaW4gdGhlIE5WUkFNIChCSU9TKSwgcmF0aGVyIHRoYW4KKyAqCSAgICBibGluZGx5IHNjYW5uaW5nIGZyb20gMCB0byAyNTUgLS0gd2hpY2ggY291bGQgcmVzdWx0IGluCisgKgkgICAgYW4gaW5jcmVhc2UgaW4gc3RhcnR1cCB0aW1lIHdoZW4gcnVubmluZyBhZ2FpbnN0IHNsb3cKKyAqCSAgICAoSkJPRCkgZGV2aWNlcy4KKyAqCS0gUmV3b3JrIHJlc2V0IGxvZ2ljIGluIHFsYTJ4MDBfcmVzZXRfY2hpcCgpIChzcGVjKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMjIgTWFyY2ggPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIDYuMDUuMDBiNy4KKyAqCS0gQ2xlYW51cCAocmV3cml0ZSkgSVNSIGhhbmRsZXIuCisgKgktIFJlbmFtZSBrbWVtX3phbGxvYyAtLT4gcWxhMngwMF9rbWVtX3phbGxvYygpOgorICoJICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCisgKgktIEFkZCBuZXcgMjMwMCBWSVggZmlybXdhcmUgKDMuMDIuMDkpOgorICoJICAtIFN1cHBvcnQgZm9yIFRhcGUsIEZhYnJpYywgMksgbG9naW5zLCBJUCwgYW5kIFZJLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUxOCBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gU3VwcG9ydCAyMzJ4IHR5cGUgSVNQcy4KKyAqCS0gU3VwcG9ydCBzaW5nbGUgZmlybXdhcmUgZm9yIGVhY2ggSVNQIHR5cGU6CisgKgkgIC0gUmVzdHJ1Y3R1cmUgYnJkX2luZm8vZndfaW5mbyBtZXRob2RzLgorICoJICAtIFN0cmVhbWxpbmUgZmlybXdhcmUgbG9hZCBwcm9jZXNzLgorICoJICAtIFByb3Blcmx5IHF1ZXJ5IGZpcm13YXJlIGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICoJLSBSZW1vdmUgZXh0cmFuZW91cyBzY3NpX3FsYV9ob3N0IG1lbWJlcnM6CisgKgkgIC0gZGV2aWNlX2lkID09PiBwZGV2LT5kZXZpY2UKKyAqCS0gRml4IGZjNCBmZWF0dXJlcyAoUkZGX0lEKSByZWdpc3RyYXRpb24uCisgKgktIENvbnZlcnQga21lbV96YWxsb2MgLS0+IHFsYTJ4MDBfa21lbV96YWxsb2MoKS4KKyAqCS0gUmVtb3ZlIHVudXNlZC9leHRyYW5lb3VzICNkZWZpbmVzIChVU0VfUE9SVE5BTUUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUxNCBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI2LgorICoJLSBJbml0aWFsIHNvdXJjZS1jb2RlIHJlc3RydWN0dXJpbmcgZWZmb3J0LgorICoJICAtIEJ1aWxkIHByb2NlZHVyZS4KKyAqCSAgLSBTb3VyY2UgZmlsZSBsYXlvdXQgLS0gaW50dWl0aXZlIGNvbXBvbmVudCBsYXlvdXQuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCAjZGVmaW5lcyAoKlBFUkZPUk1BTkNFLCBXT1JEX0ZXX0xPQUQsIGV0YykuCisgKgktIEFkZCBzdXBwb3J0IGZvciAySyBsb2dpbnMgKFRQWCAtLSBmaXJtd2FyZSkuCisgKgktIEFkZCBtb2R1bGUgcGFyYW1ldGVyIHFsMnhzdXNwZW5kY291bnQuCisgKgktIEFkZCBuZXcgMjIwMCBJUC9UUCBmaXJtd2FyZSAoMi4wMi4wNCkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTkJTWFyY2ggPz8sIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gVXNlIGtlcm5lbCBzdHJ1Y3QgbGlzdF9oZWFkIGZvciBmY3BvcnQgYW5kIGZjbHVuIGxpc3RzLgorICoJLSBSZW1vdmUgZXh0cmFuZW91cyAoTHxNKVNfNjRCSVRTKCkgYW5kIFFMMjFfNjQqKCkgZGVmaW5lcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlOAlGZWJydWFyeSAyOCwgMjAwMwlSTC9ERy9SQS9BVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjMuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTcJRmVicnVhcnkgMjMsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gQWRkIGFsdGVybmF0ZSBmYWJyaWMgc2Nhbm5pbmcgbG9naWMgKEdJRF9QVC9HTk5fSUQvR1BOX0lEKS4KKyAqCS0gUmVtb3ZlIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uIGNoZWNrX3JlZ2lvbigpLgorICoJLSBBZGQgbmV3IDIzMDAgSVAvVFAgZmlybXdhcmUgKDMuMDIuMDgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU1CUphbnVhcnkgMjgsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGIzLgorICoJLSBDb25zb2xpZGF0ZSBkZXZpY2VfcmVnIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgSVNQIHR5cGVzLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgbmV3IHF1ZXVlLWRlcHRoIHNlbGVjdGlvbi4KKyAqCS0gQWRkIG5ldyAyMzAwIElQL1RQIGZpcm13YXJlICgzLjAyLjA3KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMQlKYW51YXJ5IDE3LCAyMDAzCUFWCisgKgktIEluaXRpYWwgYnJhbmNoIGZyb20gNi4wNC4wMGI4IGRyaXZlci4KKyAqCS0gUmVtb3ZlIFZNV0FSRSBzcGVjaWZpYyBjb2RlLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgcGNpX2RyaXZlciBpbnRlcmZhY2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcWxvZ2ljZmFzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThmOTkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKQEAgLTAsMCArMSw3OSBAQAorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUWxvZ2ljIEZBU1hYWCBmYW1pbHkgb2YgY2hpcHMuICBUaGlzIGRyaXZlcgorb25seSB3b3JrcyB3aXRoIHRoZSBJU0EsIFZMQiwgYW5kIFBDTUNJQSB2ZXJzaW9ucyBvZiB0aGUgUWxvZ2ljCitGYXN0U0NTSSEgIGNhcmRzIGFzIHdlbGwgYXMgYW55IG90aGVyIGNhcmQgYmFzZWQgb24gdGhlIEZBU1hYIGNoaXAKKyhpbmNsdWRpbmcgdGhlIENvbnRyb2wgQ29uY2VwdHMgU0NTSS9JREUvU0lPL1BJTy9GREMgY2FyZHMpLgorCitUaGlzIGRyaXZlciBkb2VzIE5PVCBzdXBwb3J0IHRoZSBQQ0kgdmVyc2lvbi4gIFN1cHBvcnQgZm9yIHRoZXNlIFBDSQorUWxvZ2ljIGJvYXJkczoKKworCSogSVEtUENJCisJKiBJUS1QQ0ktMTAKKwkqIElRLVBDSS1ECisKK2lzIHByb3ZpZGVkIGJ5IHRoZSBxbG9naWNpc3AuYyBkcml2ZXIuICBDaGVjayBSRUFETUUucWxvZ2ljaXNwIGZvcgorZGV0YWlscy4KKworTm9yIGRvZXMgaXQgc3VwcG9ydCB0aGUgUENJLUJhc2ljLCB3aGljaCBpcyBzdXBwb3J0ZWQgYnkgdGhlCisnYW01M2M5NzQnIGRyaXZlci4KKworUENNQ0lBIFNVUFBPUlQKKworVGhpcyBjdXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgY2FyZCBpcyBlbmFibGVkIGZpcnN0IGZyb20gRE9TLiAgVGhpcworbWVhbnMgeW91IHdpbGwgaGF2ZSB0byBsb2FkIHlvdXIgc29ja2V0IGFuZCBjYXJkIHNlcnZpY2VzLCBhbmQKK1FMNDFET1MuU1lTIGFuZCBRTDQwRU5CTC5TWVMuICBUaGVzZSBhcmUgYSBtaW5pbXVtLCBidXQgbG9hZGluZyB0aGUKK3Jlc3Qgb2YgdGhlIG1vZHVsZXMgd29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIG9wZXJhdGlvbi4gIFRoZSBuZXh0Cit0aGluZyB0byBkbyBpcyBsb2FkIHRoZSBrZXJuZWwgd2l0aG91dCByZXNldHRpbmcgdGhlIGhhcmR3YXJlLCB3aGljaAorY2FuIGJlIGEgc2ltcGxlIGN0cmwtYWx0LWRlbGV0ZSB3aXRoIGEgYm9vdCBmbG9wcHksIG9yIGJ5IHVzaW5nCitsb2FkbGluIHdpdGggdGhlIGtlcm5lbCBpbWFnZSBhY2Nlc3NpYmxlIGZyb20gRE9TLiAgSWYgeW91IGFyZSB1c2luZwordGhlIExpbnV4IFBDTUNJQSBkcml2ZXIsIHlvdSB3aWxsIGhhdmUgdG8gYWRqdXN0IGl0IG9yIG90aGVyd2lzZSBzdG9wCitpdCBmcm9tIGNvbmZpZ3VyaW5nIHRoZSBjYXJkLgorCitJIGFtIHdvcmtpbmcgd2l0aCB0aGUgUENNQ0lBIGdyb3VwIHRvIG1ha2UgaXQgbW9yZSBmbGV4aWJsZSwgYnV0IHRoYXQKK21heSB0YWtlIGEgd2hpbGUuCisKK0FMTCBDQVJEUworCitUaGUgdG9wIG9mIHRoZSBxbG9naWMuYyBmaWxlIGhhcyBhIG51bWJlciBvZiBkZWZpbmVzIHRoYXQgY29udHJvbHMKK2NvbmZpZ3VyYXRpb24uICBBcyBzaGlwcGVkLCBpdCBwcm92aWRlcyBhIGJhbGFuY2UgYmV0d2VlbiBzcGVlZCBhbmQKK2Z1bmN0aW9uLiAgSWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgdHJ5IHNldHRpbmcgU0xPV19DQUJMRSB0byAxLCBhbmQKK3RoZW4gdHJ5IGNoYW5naW5nIFVTRV9JUlEgYW5kIFRVUkJPX1BETUEgdG8gemVyby4gIElmIHlvdSBhcmUgZmFtaWxpYXIKK3dpdGggU0NTSSwgdGhlcmUgYXJlIG90aGVyIHNldHRpbmdzIHdoaWNoIGNhbiB0dW5lIHRoZSBidXMuCisKK0l0IG1heSBiZSBhIGdvb2QgaWRlYSB0byBlbmFibGUgUkVTRVRfQVRfU1RBUlQsIGVzcGVjaWFsbHkgaWYgdGhlCitkZXZpY2VzIG1heSBub3QgaGF2ZSBiZWVuIGp1c3QgcG93ZXJlZCB1cCwgb3IgaWYgeW91IGFyZSByZXN0YXJ0aW5nCithZnRlciBhIGNyYXNoLCBzaW5jZSB0aGV5IG1heSBiZSBidXN5IHRyeWluZyB0byBjb21wbGV0ZSB0aGUgbGFzdAorY29tbWFuZCBvciBzb21ldGhpbmcuICBJdCBjb21lcyB1cCBmYXN0ZXIgaWYgdGhpcyBpcyBzZXQgdG8gemVybywgYW5kCitpZiB5b3UgaGF2ZSByZWxpYWJsZSBoYXJkd2FyZSBhbmQgY29ubmVjdGlvbnMgaXQgbWF5IGJlIG1vcmUgdXNlZnVsIHRvCitub3QgcmVzZXQgdGhpbmdzLgorCitTT01FIFRST1VCTEVTSE9PVElORyBUSVBTCisKK01ha2Ugc3VyZSBpdCB3b3JrcyBwcm9wZXJseSB1bmRlciBET1MuICBZb3Ugc2hvdWxkIGFsc28gZG8gYW4gaW5pdGlhbCBGRElTSworb24gYSBuZXcgZHJpdmUgaWYgeW91IHdhbnQgcGFydGl0aW9ucy4KKworRG9uJ3QgZW5hYmxlIGFsbCB0aGUgc3BlZWR1cHMgZmlyc3QuICBJZiBhbnl0aGluZyBpcyB3cm9uZywgdGhleSB3aWxsIG1ha2UKK2FueSBwcm9ibGVtIHdvcnNlLgorCitJTVBPUlRBTlQKKworVGhlIGJlc3Qgd2F5IHRvIHRlc3QgaWYgeW91ciBjYWJsZXMsIHRlcm1pbmF0aW9uLCBldGMuIGFyZSBnb29kIGlzIHRvCitjb3B5IGEgdmVyeSBiaWcgZmlsZSAoZS5nLiBhIGRvdWJsZXNwYWNlIGNvbnRhaW5lciBmaWxlLCBvciBhIHZlcnkKK2xhcmdlIGV4ZWN1dGFibGUgb3IgYXJjaGl2ZSkuICBJdCBzaG91bGQgYmUgYXQgbGVhc3QgNSBtZWdhYnl0ZXMsIGJ1dAoreW91IGNhbiBkbyBtdWx0aXBsZSB0ZXN0cyBvbiBzbWFsbGVyIGZpbGVzLiAgVGhlbiBkbyBhIENPTVAgdG8gdmVyaWZ5Cit0aGF0IHRoZSBmaWxlIGNvcGllZCBwcm9wZXJseS4gIChUdXJuIG9mZiBhbGwgY2FjaGluZyB3aGVuIGRvaW5nIHRoZXNlCit0ZXN0cywgb3RoZXJ3aXNlIHlvdSB3aWxsIHRlc3QgeW91ciBSQU0gYW5kIG5vdCB0aGUgZmlsZXMpLiAgVGhlbiBkbworMTAgQ09NUHMsIGNvbXBhcmluZyB0aGUgc2FtZSBmaWxlIG9uIHRoZSBTQ1NJIGhhcmQgZHJpdmUsIGkuZS4gIkNPTVAKK3JlYWxiaWcuZG9jIHJlYWxiaWcuZG9jIi4gIFRoZW4gZG8gaXQgYWZ0ZXIgdGhlIGNvbXB1dGVyIGdldHMgd2FybS4KKworSSBub3RpY2VkIG15IHN5c3RlbSB3aGljaCBzZWVtcyB0byB3b3JrIDEwMCUgd291bGQgZmFpbCB0aGlzIHRlc3QgaWYKK3RoZSBjb21wdXRlciB3YXMgbGVmdCBvbiBmb3IgYSBmZXcgaG91cnMuICBJdCB3YXMgd29yc2Ugd2l0aCBsb25nZXIKK2NhYmxlcywgYW5kIG1vcmUgZGV2aWNlcyBvbiB0aGUgU0NTSSBidXMuICBXaGF0IHNlZW1zIHRvIGhhcHBlbiBpcwordGhhdCBpdCBnZXRzIGEgZmFsc2UgQUNLIGNhdXNpbmcgYW4gZXh0cmEgYnl0ZSB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZQorc3RyZWFtIChhbmQgdGhpcyBpcyBub3QgZGV0ZWN0ZWQpLiAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGJhZAordGVybWluYXRpb24gKHRoZSBBQ0sgY2FuIGJlIHJlZmxlY3RlZCksIG9yIGJ5IG5vaXNlIHdoZW4gdGhlIGNoaXBzCit3b3JrIGxlc3Mgd2VsbCBiZWNhdXNlIG9mIHRoZSBoZWF0LCBvciB3aGVuIGNhYmxlcyBnZXQgdG9vIGxvbmcgZm9yCit0aGUgc3BlZWQuCisKK1JlbWVtYmVyLCBpZiBpdCBkb2Vzbid0IHdvcmsgdW5kZXIgRE9TLCBpdCBwcm9iYWJseSB3b24ndCB3b3JrIHVuZGVyCitMaW51eC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2lzcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyMGY2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0CkBAIC0wLDAgKzEsMzAgQEAKK05vdGVzIGZvciB0aGUgUUxvZ2ljIElTUDEwMjAgUENJIFNDU0kgRHJpdmVyOgorCitUaGlzIGRyaXZlciB3b3JrcyB3ZWxsIGluIHByYWN0aWNlLCBidXQgZG9lcyBub3Qgc3VwcG9ydCBkaXNjb25uZWN0LworcmVjb25uZWN0LCB3aGljaCBtYWtlcyB1c2luZyBpdCB3aXRoIHRhcGUgZHJpdmVzIGltcHJhY3RpY2FsLgorCitJdCBzaG91bGQgd29yayBmb3IgbW9zdCBob3N0IGFkYXB0b3JzIHdpdGggdGhlIElTUDEwMjAgY2hpcC4gIFRoZQorUUxvZ2ljIENvcnBvcmF0aW9uIHByb2R1Y2VzIHNldmVyYWwgUENJIFNDU0kgYWRhcHRlcnMgd2hpY2ggc2hvdWxkCit3b3JrOgorCisJKiBJUS1QQ0kKKwkqIElRLVBDSS0xMAorCSogSVEtUENJLUQKKworVGhpcyBkcml2ZXIgbWF5IHdvcmsgd2l0aCBib2FyZHMgY29udGFpbmluZyB0aGUgSVNQMTAyMEEgb3IgSVNQMTA0MEEKK2NoaXBzLCBidXQgdGhhdCBoYXMgbm90IGJlZW4gdGVzdGVkLgorCitUaGlzIGRyaXZlciB3aWxsIE5PVCB3b3JrIHdpdGg6CisKKwkqIElTQSBvciBWTCBCdXMgUWxvZ2ljIGNhcmRzICh0aGV5IHVzZSB0aGUgJ3Fsb2dpY2ZhcycgZHJpdmVyKQorCSogUENJLWJhc2ljIChpdCB1c2VzIHRoZSAnYW01M2M5NzQnIGRyaXZlcikKKworTXVjaCB0aGFua3MgdG8gUUxvZ2ljJ3MgdGVjaCBzdXBwb3J0IGZvciBwcm92aWRpbmcgdGhlIGxhdGVzdCBJU1AxMDIwCitmaXJtd2FyZSwgYW5kIGZvciB0YWtpbmcgdGhlIHRpbWUgdG8gcmV2aWV3IG15IGNvZGUuCisKK0VyaWsgTW9lCitlaG1AY3Jpcy5jb20KKworUmV2aXNlZDoKK01pY2hhZWwgQS4gR3JpZmZpdGgKK2dyaWZAY3MudWNyLmVkdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhlMmIzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy50eHQKQEAgLTAsMCArMSwxMDEgQEAKKyAgICAgICAgICAgIE5vdGVzIG9uIExpbnV4IFNDU0kgR2VuZXJpYyAoc2cpIGRyaXZlcgorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDIwMTI2CitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhlIFNDU0kgR2VuZXJpYyBkcml2ZXIgKHNnKSBpcyBvbmUgb2YgdGhlIGZvdXIgImhpZ2ggbGV2ZWwiIFNDU0kgZGV2aWNlCitkcml2ZXJzIGFsb25nIHdpdGggc2QsIHN0IGFuZCBzciAoZGlzaywgdGFwZSBhbmQgQ0RST00gcmVzcGVjdGl2ZWx5KS4gU2cKK2lzIG1vcmUgZ2VuZXJhbGl6ZWQgKGJ1dCBsb3dlciBsZXZlbCkgdGhhbiBpdHMgc2libGluZ3MgYW5kIHRlbmRzIHRvIGJlCit1c2VkIG9uIFNDU0kgZGV2aWNlcyB0aGF0IGRvbid0IGZpdCBpbnRvIHRoZSBhbHJlYWR5IHNlcnZpY2VkIGNhdGVnb3JpZXMuCitUaHVzIHNnIGlzIHVzZWQgZm9yIHNjYW5uZXJzLCBDRCB3cml0ZXJzIGFuZCByZWFkaW5nIGF1ZGlvIENEcyBkaWdpdGFsbHkKK2Ftb25nc3Qgb3RoZXIgdGhpbmdzLgorCitSYXRoZXIgdGhhbiBkb2N1bWVudCB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIGhlcmUsIHZlcnNpb24gaW5mb3JtYXRpb24KK2lzIHByb3ZpZGVkIHBsdXMgcG9pbnRlcnMgKGkuZS4gVVJMcykgd2hlcmUgdG8gZmluZCBkb2N1bWVudGF0aW9uCithbmQgZXhhbXBsZXMuCisKKworTWFqb3IgdmVyc2lvbnMgb2YgdGhlIHNnIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlcmUgYXJlIHRocmVlIG1ham9yIHZlcnNpb25zIG9mIHNnIGZvdW5kIGluIHRoZSBsaW51eCBrZXJuZWwgKGxrKToKKyAgICAgIC0gc2cgdmVyc2lvbiAxIChvcmlnaW5hbCkgZnJvbSAxOTkyIHRvIGVhcmx5IDE5OTkgKGxrIDIuMi41KSAuIAorCUl0IGlzIGJhc2VkIGluIHRoZSBzZ19oZWFkZXIgaW50ZXJmYWNlIHN0cnVjdHVyZS4KKyAgICAgIC0gc2cgdmVyc2lvbiAyIGZyb20gbGsgMi4yLjYgaW4gdGhlIDIuMiBzZXJpZXMuIEl0IGlzIGJhc2VkIG9uCisJYW4gZXh0ZW5kZWQgdmVyc2lvbiBvZiB0aGUgc2dfaGVhZGVyIGludGVyZmFjZSBzdHJ1Y3R1cmUuCisgICAgICAtIHNnIHZlcnNpb24gMyBmb3VuZCBpbiB0aGUgbGsgMi40IHNlcmllcyAoYW5kIHRoZSBsayAyLjUgc2VyaWVzKS4KKwlJdCBhZGRzIHRoZSBzZ19pb19oZHIgaW50ZXJmYWNlIHN0cnVjdHVyZS4KKworCitTZyBkcml2ZXIgZG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBtb3N0IHJlY2VudCBkb2N1bWVudGF0aW9uIG9mIHRoZSBzZyBkcml2ZXIgaXMga2VwdCBhdCB0aGUgTGludXgKK0RvY3VtZW50YXRpb24gUHJvamVjdCdzIChMRFApIHNpdGU6IAoraHR0cDovL3d3dy50bGRwLm9yZy9IT1dUTy9TQ1NJLUdlbmVyaWMtSE9XVE8KK1RoaXMgZGVzY3JpYmVzIHRoZSBzZyB2ZXJzaW9uIDMgZHJpdmVyIGZvdW5kIGluIHRoZSBsayAyLjQgc2VyaWVzLgorVGhlIExEUCByZW5kZXJzIGRvY3VtZW50cyBpbiBzaW5nbGUgYW5kIG11bHRpcGxlIHBhZ2UgSFRNTCwgcG9zdHNjcmlwdAorYW5kIHBkZi4gVGhpcyBkb2N1bWVudCBjYW4gYWxzbyBiZSBmb3VuZCBhdDoKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9zZy9wL3NnX3YzX2hvLmh0bWwKKworRG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZlcnNpb24gMiBzZyBkcml2ZXIgZm91bmQgaW4gdGhlIGxrIDIuMiBzZXJpZXMgY2FuCitiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zY3NpLWdlbmVyaWMudHh0IC4gQSBsYXJnZXIgdmVyc2lvbgoraXMgYXQ6ICBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9zY3NpLWdlbmVyaWNfbG9uZy50eHQgLgorCitUaGUgb3JpZ2luYWwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNnIGRyaXZlciAocHJpb3IgdG8gbGsgMi4yLjYpIGNhbiBiZQorZm91bmQgYXQgaHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avb3JpZ2luYWwvU0NTSS1Qcm9ncmFtbWluZy1IT1dUTy50eHQKK2FuZCBpbiB0aGUgTERQIGFyY2hpdmVzLgorCitBIGNoYW5nZWxvZyB3aXRoIGJyaWVmIG5vdGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUKKy91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvc2NzaS9zZy5oIGZpbGUuIE5vdGUgdGhhdCB0aGUgZ2xpYmMgbWFpbnRhaW5lcnMgY29weSAKK2FuZCBlZGl0IHRoaXMgZmlsZSAocmVtb3ZpbmcgaXRzIGNoYW5nZWxvZyBmb3IgZXhhbXBsZSkgYmVmb3JlIHBsYWNpbmcgaXQgCitpbiAvdXNyL2luY2x1ZGUvc2NzaS9zZy5oIC4gRHJpdmVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgbm90ZXMgCitjYW4gYmUgZm91bmQgYXQgdGhlIHRvcCBvZiB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9zY3NpL3NnLmMgZmlsZS4KKworQSBtb3JlIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgdGhlIExpbnV4IFNDU0kgc3Vic3lzdGVtIG9mIHdoaWNoIHNnIGlzIGEgCitwYXJ0IGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL1NDU0ktMi40LUhPV1RPIC4KKworCitFeGFtcGxlIGNvZGUgYW5kIHV0aWxpdGllcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZXJlIGFyZSB0d28gcGFja2FnZXMgb2Ygc2cgdXRpbGl0aWVzOgorICAtIHNnM191dGlscyAgIGZvciB0aGUgc2cgdmVyc2lvbiAzIGRyaXZlciBmb3VuZCBpbiBsayAyLjQKKyAgLSBzZ191dGlscyAgICBmb3IgdGhlIHNnIHZlcnNpb24gMiAoYW5kIG9yaWdpbmFsKSBkcml2ZXIgZm91bmQgaW4gbGsgMi4yCisgICAgICAgICAgICAgICAgYW5kIGVhcmxpZXIKK0JvdGggcGFja2FnZXMgd2lsbCB3b3JrIGluIHRoZSBsayAyLjQgc2VyaWVzIGhvd2V2ZXIgc2czX3V0aWxzIG9mZmVycyBtb3JlCitjYXBhYmlsaXRpZXMuIFRoZXkgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cgYW5kIAorZnJlc2htZWF0Lm5ldAorCitBbm90aGVyIGFwcHJvYWNoIGlzIHRvIGxvb2sgYXQgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgc2cgZHJpdmVyLgorVGhlc2UgaW5jbHVkZSBjZHJlY29yZCwgY2RwYXJhbm9pYSwgU0FORSBhbmQgY2RyZGFvLgorCisKK01hcHBpbmcgb2YgTGludXgga2VybmVsIHZlcnNpb25zIHRvIHNnIGRyaXZlciB2ZXJzaW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitIZXJlIGlzIGEgbGlzdCBvZiBsaW51eCBrZXJuZWxzIGluIHRoZSAyLjQgc2VyaWVzIHRoYXQgaGFkIG5ldyB2ZXJzaW9uCitvZiB0aGUgc2cgZHJpdmVyOgorICAgICAgbGsgMi40LjAgOiBzZyB2ZXJzaW9uIDMuMS4xNworICAgICAgbGsgMi40LjcgOiBzZyB2ZXJzaW9uIDMuMS4xOSAKKyAgICAgIGxrIDIuNC4xMCA6IHNnIHZlcnNpb24gMy4xLjIwICAqKgorICAgICAgbGsgMi40LjE3IDogc2cgdmVyc2lvbiAzLjEuMjIgCisKKyoqIFRoZXJlIHdlcmUgMyBjaGFuZ2VzIHRvIHNnIHZlcnNpb24gMy4xLjIwIGJ5IHRoaXJkIHBhcnRpZXMgaW4gdGhlCisgICBuZXh0IHNpeCBsaW51eCBrZXJuZWwgdmVyc2lvbnMuCisKK0ZvciByZWZlcmVuY2UgaGVyZSBpcyBhIGxpc3Qgb2YgbGludXgga2VybmVscyBpbiB0aGUgMi4yIHNlcmllcyB0aGF0IGhhZCAKK25ldyB2ZXJzaW9uIG9mIHRoZSBzZyBkcml2ZXI6CisgICAgICBsayAyLjIuMCA6IG9yaWdpbmFsIHNnIHZlcnNpb24gW3dpdGggbm8gdmVyc2lvbiBudW1iZXJdCisgICAgICBsayAyLjIuNiA6IHNnIHZlcnNpb24gMi4xLjMxCisgICAgICBsayAyLjIuOCA6IHNnIHZlcnNpb24gMi4xLjMyCisgICAgICBsayAyLjIuMTAgOiBzZyB2ZXJzaW9uIDIuMS4zNCBbU0dfR0VUX1ZFUlNJT05fTlVNIGlvY3RsIGZpcnN0IGFwcGVhcmVkXQorICAgICAgbGsgMi4yLjE0IDogc2cgdmVyc2lvbiAyLjEuMzYKKyAgICAgIGxrIDIuMi4xNiA6IHNnIHZlcnNpb24gMi4xLjM4CisgICAgICBsayAyLjIuMTcgOiBzZyB2ZXJzaW9uIDIuMS4zOQorICAgICAgbGsgMi4yLjIwIDogc2cgdmVyc2lvbiAyLjEuNDAKKworVGhlIGxrIDIuNSBkZXZlbG9wbWVudCBzZXJpZXMgaGFzIHJlY2VudGx5IGNvbW1lbmNlZCBhbmQgaXQgY3VycmVudGx5Citjb250YWlucyBzZyB2ZXJzaW9uIDMuNS4yMyB3aGljaCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBzZwordmVyc2lvbiAzLjEuMjIgZm91bmQgaW4gbGsgMi40LjE3IC4KKworCitEb3VnbGFzIEdpbGJlcnQKKzI2dGggSmFudWFyeSAyMDAyCitkZ2lsYmVydEBpbnRlcmxvZy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDFiYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1NDU0kgc3Vic3lzdGVtIGRvY3VtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMaW51eCBEb2N1bWVudGF0aW9uIFByb2plY3QgKExEUCkgbWFpbnRhaW5zIGEgZG9jdW1lbnQgZGVzY3JpYmluZwordGhlIFNDU0kgc3Vic3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwgKGxrKSAyLjQgc2VyaWVzLiBTZWU6CitodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL1NDU0ktMi40LUhPV1RPIC4gVGhlIExEUCBoYXMgc2luZ2xlCithbmQgbXVsdGlwbGUgcGFnZSBIVE1MIHJlbmRlcmluZ3MgYXMgd2VsbCBhcyBwb3N0c2NyaXB0IGFuZCBwZGYuCitJdCBjYW4gYWxzbyBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2NzaS9TQ1NJLTIuNC1IT1dUTyAuCisKKworTm90ZXMgb24gdXNpbmcgbW9kdWxlcyBpbiB0aGUgU0NTSSBzdWJzeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgc2NzaSBzdXBwb3J0IGluIHRoZSBsaW51eCBrZXJuZWwgY2FuIGJlIG1vZHVsYXJpemVkIGluIGEgbnVtYmVyIG9mIAorZGlmZmVyZW50IHdheXMgZGVwZW5kaW5nIHVwb24gdGhlIG5lZWRzIG9mIHRoZSBlbmQgdXNlci4gIFRvIHVuZGVyc3RhbmQKK3lvdXIgb3B0aW9ucywgd2Ugc2hvdWxkIGZpcnN0IGRlZmluZSBhIGZldyB0ZXJtcy4KKworVGhlIHNjc2ktY29yZSAoYWxzbyBrbm93biBhcyB0aGUgIm1pZCBsZXZlbCIpIGNvbnRhaW5zIHRoZSBjb3JlIG9mIHNjc2kgCitzdXBwb3J0LiAgV2l0aG91dCBpdCB5b3UgY2FuIGRvIG5vdGhpbmcgd2l0aCBhbnkgb2YgdGhlIG90aGVyIHNjc2kgZHJpdmVycy4KK1RoZSBzY3NpIGNvcmUgc3VwcG9ydCBjYW4gYmUgYSBtb2R1bGUgKHNjc2lfbW9kLm8pLCBvciBpdCBjYW4gYmUgYnVpbHQgaW50bwordGhlIGtlcm5lbC4gSWYgdGhlIGNvcmUgaXMgYSBtb2R1bGUsIGl0IG11c3QgYmUgdGhlIGZpcnN0IHNjc2kgbW9kdWxlIAorbG9hZGVkLCBhbmQgaWYgeW91IHVubG9hZCB0aGUgbW9kdWxlcywgaXQgd2lsbCBoYXZlIHRvIGJlIHRoZSBsYXN0IG9uZSAKK3VubG9hZGVkLiAgSW4gcHJhY3RpY2UgdGhlIG1vZHByb2JlIGFuZCBybW1vZCBjb21tYW5kcyAoYW5kICJhdXRvY2xlYW4iKQord2lsbCBlbmZvcmNlIHRoZSBjb3JyZWN0IG9yZGVyaW5nIG9mIGxvYWRpbmcgYW5kIHVubG9hZGluZyBtb2R1bGVzIGluCit0aGUgU0NTSSBzdWJzeXN0ZW0uCisKK1RoZSBpbmRpdmlkdWFsIHVwcGVyIGFuZCBsb3dlciBsZXZlbCBkcml2ZXJzIGNhbiBiZSBsb2FkZWQgaW4gYW55IG9yZGVyIAorb25jZSB0aGUgc2NzaSBjb3JlIGlzIHByZXNlbnQgaW4gdGhlIGtlcm5lbCAoZWl0aGVyIGNvbXBpbGVkIGluIG9yIGxvYWRlZAorYXMgYSBtb2R1bGUpLiAgVGhlIGRpc2sgZHJpdmVyIChzZF9tb2QubyksIGNkcm9tIGRyaXZlciAoc3JfbW9kLm8pLAordGFwZSBkcml2ZXIgKiogKHN0Lm8pIGFuZCBzY3NpIGdlbmVyaWNzIGRyaXZlciAoc2cubykgcmVwcmVzZW50IHRoZSB1cHBlciAKK2xldmVsIGRyaXZlcnMgdG8gc3VwcG9ydCB0aGUgdmFyaW91cyBhc3NvcnRlZCBkZXZpY2VzIHdoaWNoIGNhbiBiZSAKK2NvbnRyb2xsZWQuICBZb3UgY2FuIGZvciBleGFtcGxlIGxvYWQgdGhlIHRhcGUgZHJpdmVyIHRvIHVzZSB0aGUgdGFwZSBkcml2ZSwgCithbmQgdGhlbiB1bmxvYWQgaXQgb25jZSB5b3UgaGF2ZSBubyBmdXJ0aGVyIG5lZWQgZm9yIHRoZSBkcml2ZXIgKGFuZCByZWxlYXNlCit0aGUgYXNzb2NpYXRlZCBtZW1vcnkpLgorCitUaGUgbG93ZXIgbGV2ZWwgZHJpdmVycyBhcmUgdGhlIG9uZXMgdGhhdCBzdXBwb3J0IHRoZSBpbmRpdmlkdWFsIGNhcmRzIHRoYXQKK2FyZSBzdXBwb3J0ZWQgZm9yIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSB0aGF0IHlvdSBhcmUgcnVubmluZyB1bmRlci4gVGhvc2UKK2luZGl2aWR1YWwgY2FyZHMgYXJlIG9mdGVuIGNhbGxlZCBIb3N0IEJ1cyBBZGFwdGVycyAoSEJBcykuIEZvciBleGFtcGxlIHRoZQorYWljN3h4eC5vIGRyaXZlciBpcyB1c2VkIHRvIGNvbnRyb2wgYWxsIHJlY2VudCBTQ1NJIGNvbnRyb2xsZXIgY2FyZHMgZnJvbSAKK0FkYXB0ZWMuIEFsbW9zdCBhbGwgbG93ZXIgbGV2ZWwgZHJpdmVycyBjYW4gYmUgYnVpbHQgZWl0aGVyIGFzIG1vZHVsZXMgb3IgCitidWlsdCBpbnRvIHRoZSBrZXJuZWwuCisKKworKiogVGhlcmUgaXMgYSB2YXJpYW50IG9mIHRoZSBzdCBkcml2ZXIgZm9yIGNvbnRyb2xsaW5nIE9uU3RyZWFtIHRhcGUKKyAgIGRldmljZXMuIEl0cyBtb2R1bGUgbmFtZSBpcyBvc3N0Lm8gLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9taWRfbG93X2FwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyNDEyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApAQCAtMCwwICsxLDE1NDYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggS2VybmVsIDIuNiBzZXJpZXMKKyAgICAgICAgICAgICAgICAgU0NTSSBtaWRfbGV2ZWwgLSBsb3dlcl9sZXZlbCBkcml2ZXIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIExpbnV4IFNDU0kgbWlkIGxldmVsIGFuZAorU0NTSSBsb3dlciBsZXZlbCBkcml2ZXJzLiBMb3dlciBsZXZlbCBkcml2ZXJzIChMTERzKSBhcmUgdmFyaW91c2x5IGNhbGxlZCAKK2hvc3QgYnVzIGFkYXB0ZXIgKEhCQSkgZHJpdmVycyBhbmQgaG9zdCBkcml2ZXJzIChIRCkuIEEgImhvc3QiIGluIHRoaXMKK2NvbnRleHQgaXMgYSBicmlkZ2UgYmV0d2VlbiBhIGNvbXB1dGVyIElPIGJ1cyAoZS5nLiBQQ0kgb3IgSVNBKSBhbmQgYQorc2luZ2xlIFNDU0kgaW5pdGlhdG9yIHBvcnQgb24gYSBTQ1NJIHRyYW5zcG9ydC4gQW4gImluaXRpYXRvciIgcG9ydAorKFNDU0kgdGVybWlub2xvZ3ksIHNlZSBTQU0tMyBhdCBodHRwOi8vd3d3LnQxMC5vcmcpIHNlbmRzIFNDU0kgY29tbWFuZHMKK3RvICJ0YXJnZXQiIFNDU0kgcG9ydHMgKGUuZy4gZGlza3MpLiBUaGVyZSBjYW4gYmUgbWFueSBMTERzIGluIGEgcnVubmluZworc3lzdGVtLCBidXQgb25seSBvbmUgcGVyIGhhcmR3YXJlIHR5cGUuIE1vc3QgTExEcyBjYW4gY29udHJvbCBvbmUgb3IgbW9yZQorU0NTSSBIQkFzLiBTb21lIEhCQXMgY29udGFpbiBtdWx0aXBsZSBob3N0cy4KKworSW4gc29tZSBjYXNlcyB0aGUgU0NTSSB0cmFuc3BvcnQgaXMgYW4gZXh0ZXJuYWwgYnVzIHRoYXQgYWxyZWFkeSBoYXMKK2l0cyBvd24gc3Vic3lzdGVtIGluIExpbnV4IChlLmcuIFVTQiBhbmQgaWVlZTEzOTQpLiBJbiBzdWNoIGNhc2VzIHRoZQorU0NTSSBzdWJzeXN0ZW0gTExEIGlzIGEgc29mdHdhcmUgYnJpZGdlIHRvIHRoZSBvdGhlciBkcml2ZXIgc3Vic3lzdGVtLgorRXhhbXBsZXMgYXJlIHRoZSB1c2Itc3RvcmFnZSBkcml2ZXIgKGZvdW5kIGluIHRoZSBkcml2ZXJzL3VzYi9zdG9yYWdlCitkaXJlY3RvcnkpIGFuZCB0aGUgaWVlZTEzOTQvc2JwMiBkcml2ZXIgKGZvdW5kIGluIHRoZSBkcml2ZXJzL2llZWUxMzk0CitkaXJlY3RvcnkpLgorCitGb3IgZXhhbXBsZSwgdGhlIGFpYzd4eHggTExEIGNvbnRyb2xzIEFkYXB0ZWMgU0NTSSBwYXJhbGxlbCBpbnRlcmZhY2UKKyhTUEkpIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHRoYXQgY29tcGFueSdzIDd4eHggY2hpcCBzZXJpZXMuIFRoZSBhaWM3eHh4CitMTEQgY2FuIGJlIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBsb2FkZWQgYXMgYSBtb2R1bGUuIFRoZXJlIGNhbiBvbmx5IGJlCitvbmUgYWljN3h4eCBMTEQgcnVubmluZyBpbiBhIExpbnV4IHN5c3RlbSBidXQgaXQgbWF5IGJlIGNvbnRyb2xsaW5nIG1hbnkgCitIQkFzLiBUaGVzZSBIQkFzIG1pZ2h0IGJlIGVpdGhlciBvbiBQQ0kgZGF1Z2h0ZXItYm9hcmRzIG9yIGJ1aWx0IGludG8gCit0aGUgbW90aGVyYm9hcmQgKG9yIGJvdGgpLiBTb21lIGFpYzd4eHggYmFzZWQgSEJBcyBhcmUgZHVhbCBjb250cm9sbGVycworYW5kIHRodXMgcmVwcmVzZW50IHR3byBob3N0cy4gTGlrZSBtb3N0IG1vZGVybiBIQkFzLCBlYWNoIGFpYzd4eHggaG9zdAoraGFzIGl0cyBvd24gUENJIGRldmljZSBhZGRyZXNzLiBbVGhlIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbgorYSBTQ1NJIGhvc3QgYW5kIGEgUENJIGRldmljZSBpcyBjb21tb24gYnV0IG5vdCByZXF1aXJlZCAoZS5nLiB3aXRoCitJU0Egb3IgTUNBIGFkYXB0ZXJzKS5dCisKK1RoZSBTQ1NJIG1pZCBsZXZlbCBpc29sYXRlcyBhbiBMTEQgZnJvbSBvdGhlciBsYXllcnMgc3VjaCBhcyB0aGUgU0NTSQordXBwZXIgbGF5ZXIgZHJpdmVycyBhbmQgdGhlIGJsb2NrIGxheWVyLgorCitUaGlzIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IHJvdWdobHkgbWF0Y2hlcyBsaW51eCBrZXJuZWwgdmVyc2lvbiAyLjYuOCAuCisKK0RvY3VtZW50YXRpb24KKz09PT09PT09PT09PT0KK1RoZXJlIGlzIGEgU0NTSSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgCit0eXBpY2FsbHkgRG9jdW1lbnRhdGlvbi9zY3NpIC4gTW9zdCBkb2N1bWVudHMgYXJlIGluIHBsYWluCisoaS5lLiBBU0NJSSkgdGV4dC4gVGhpcyBmaWxlIGlzIG5hbWVkIHNjc2lfbWlkX2xvd19hcGkudHh0IGFuZCBjYW4gYmUgCitmb3VuZCBpbiB0aGF0IGRpcmVjdG9yeS4gQSBtb3JlIHJlY2VudCBjb3B5IG9mIHRoaXMgZG9jdW1lbnQgbWF5IGJlIGZvdW5kCithdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dC5neiAuIAorTWFueSBMTERzIGFyZSBkb2N1bWVudGVkIHRoZXJlIChlLmcuIGFpYzd4eHgudHh0KS4gVGhlIFNDU0kgbWlkLWxldmVsIGlzCiticmllZmx5IGRlc2NyaWJlZCBpbiBzY3NpLnR4dCB3aGljaCBjb250YWlucyBhIHVybCB0byBhIGRvY3VtZW50IAorZGVzY3JpYmluZyB0aGUgU0NTSSBzdWJzeXN0ZW0gaW4gdGhlIGxrIDIuNCBzZXJpZXMuIFR3byB1cHBlciBsZXZlbCAKK2RyaXZlcnMgaGF2ZSBkb2N1bWVudHMgaW4gdGhhdCBkaXJlY3Rvcnk6IHN0LnR4dCAoU0NTSSB0YXBlIGRyaXZlcikgYW5kIAorc2NzaS1nZW5lcmljLnR4dCAoZm9yIHRoZSBzZyBkcml2ZXIpLgorCitTb21lIGRvY3VtZW50YXRpb24gKG9yIHVybHMpIGZvciBMTERzIG1heSBiZSBmb3VuZCBpbiB0aGUgQyBzb3VyY2UgY29kZQorb3IgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBDIHNvdXJjZSBjb2RlLiBGb3IgZXhhbXBsZSB0byBmaW5kIGEgdXJsCithYm91dCB0aGUgVVNCIG1hc3Mgc3RvcmFnZSBkcml2ZXIgc2VlIHRoZSAKKy91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvdXNiL3N0b3JhZ2UgZGlyZWN0b3J5LgorCitUaGUgTGludXgga2VybmVsIHNvdXJjZSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svc2NzaWRyaXZlcnMudG1wbCBmaWxlCityZWZlcnMgdG8gdGhpcyBmaWxlLiBXaXRoIHRoZSBhcHByb3ByaWF0ZSBEb2NCb29rIHRvb2wtc2V0LCB0aGlzIHBlcm1pdHMKK3VzZXJzIHRvIGdlbmVyYXRlIGh0bWwsIHBzIGFuZCBwZGYgcmVuZGVyaW5ncyBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gdGhpcworZmlsZSAoZS5nLiB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucykuCisKK0RyaXZlciBzdHJ1Y3R1cmUKKz09PT09PT09PT09PT09PT0KK1RyYWRpdGlvbmFsbHkgYW4gTExEIGZvciB0aGUgU0NTSSBzdWJzeXN0ZW0gaGFzIGJlZW4gYXQgbGVhc3QgdHdvIGZpbGVzIGluCit0aGUgZHJpdmVycy9zY3NpIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIGEgZHJpdmVyIGNhbGxlZCAieHl6IiBoYXMgYSBoZWFkZXIKK2ZpbGUgInh5ei5oIiBhbmQgYSBzb3VyY2UgZmlsZSAieHl6LmMiLiBbQWN0dWFsbHkgdGhlcmUgaXMgbm8gZ29vZCByZWFzb24KK3doeSB0aGlzIGNvdWxkbid0IGFsbCBiZSBpbiBvbmUgZmlsZTsgdGhlIGhlYWRlciBmaWxlIGlzIHN1cGVyZmx1b3VzLl0gU29tZQorZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBwb3J0ZWQgdG8gc2V2ZXJhbCBvcGVyYXRpbmcgc3lzdGVtcyBoYXZlIG1vcmUgdGhhbgordHdvIGZpbGVzLiBGb3IgZXhhbXBsZSB0aGUgYWljN3h4eCBkcml2ZXIgaGFzIHNlcGFyYXRlIGZpbGVzIGZvciBnZW5lcmljIAorYW5kIE9TLXNwZWNpZmljIGNvZGUgKGUuZy4gRnJlZUJTRCBhbmQgTGludXgpLiBTdWNoIGRyaXZlcnMgdGVuZCB0byBoYXZlCit0aGVpciBvd24gZGlyZWN0b3J5IHVuZGVyIHRoZSBkcml2ZXJzL3Njc2kgZGlyZWN0b3J5LgorCitXaGVuIGEgbmV3IExMRCBpcyBiZWluZyBhZGRlZCB0byBMaW51eCwgdGhlIGZvbGxvd2luZyBmaWxlcyAoZm91bmQgaW4gdGhlCitkcml2ZXJzL3Njc2kgZGlyZWN0b3J5KSB3aWxsIG5lZWQgc29tZSBhdHRlbnRpb246IE1ha2VmaWxlIGFuZCBLY29uZmlnIC4KK0l0IGlzIHByb2JhYmx5IGJlc3QgdG8gc3R1ZHkgaG93IGV4aXN0aW5nIExMRHMgYXJlIG9yZ2FuaXplZC4KKworQXMgdGhlIDIuNSBzZXJpZXMgZGV2ZWxvcG1lbnQga2VybmVscyBldm9sdmUgaW50byB0aGUgMi42IHNlcmllcworcHJvZHVjdGlvbiBzZXJpZXMsIGNoYW5nZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgaW50byB0aGlzIGludGVyZmFjZS4gQW4KK2V4YW1wbGUgb2YgdGhpcyBpcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gY29kZSB3aGVyZSB0aGVyZSBhcmUgbm93IDIgbW9kZWxzCithdmFpbGFibGUuIFRoZSBvbGRlciBvbmUsIHNpbWlsYXIgdG8gd2hhdCB3YXMgZm91bmQgaW4gdGhlIGxrIDIuNCBzZXJpZXMsCitpcyBiYXNlZCBvbiBob3N0cyB0aGF0IGFyZSBkZXRlY3RlZCBhdCBIQkEgZHJpdmVyIGxvYWQgdGltZS4gVGhpcyB3aWxsIGJlCityZWZlcnJlZCB0byB0aGUgInBhc3NpdmUiIGluaXRpYWxpemF0aW9uIG1vZGVsLiBUaGUgbmV3ZXIgbW9kZWwgYWxsb3dzIEhCQXMKK3RvIGJlIGhvdCBwbHVnZ2VkIChhbmQgdW5wbHVnZ2VkKSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBMTEQgYW5kIHdpbGwKK2JlIHJlZmVycmVkIHRvIGFzIHRoZSAiaG90cGx1ZyIgaW5pdGlhbGl6YXRpb24gbW9kZWwuIFRoZSBuZXdlciBtb2RlbCBpcworcHJlZmVycmVkIGFzIGl0IGNhbiBoYW5kbGUgYm90aCB0cmFkaXRpb25hbCBTQ1NJIGVxdWlwbWVudCB0aGF0IGlzCitwZXJtYW5lbnRseSBjb25uZWN0ZWQgYXMgd2VsbCBhcyBtb2Rlcm4gIlNDU0kiIGRldmljZXMgKGUuZy4gVVNCIG9yCitJRUVFIDEzOTQgY29ubmVjdGVkIGRpZ2l0YWwgY2FtZXJhcykgdGhhdCBhcmUgaG90cGx1Z2dlZC4gQm90aCAKK2luaXRpYWxpemF0aW9uIG1vZGVscyBhcmUgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisKK0FuIExMRCBpbnRlcmZhY2VzIHRvIHRoZSBTQ1NJIHN1YnN5c3RlbSBzZXZlcmFsIHdheXM6CisgIGEpIGRpcmVjdGx5IGludm9raW5nIGZ1bmN0aW9ucyBzdXBwbGllZCBieSB0aGUgbWlkIGxldmVsCisgIGIpIHBhc3NpbmcgYSBzZXQgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYSByZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAgICAgc3VwcGxpZWQgYnkgdGhlIG1pZCBsZXZlbC4gVGhlIG1pZCBsZXZlbCB3aWxsIHRoZW4gaW52b2tlIHRoZXNlCisgICAgIGZ1bmN0aW9ucyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuIFRoZSBMTEQgd2lsbCBzdXBwbHkKKyAgICAgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAgYykgZGlyZWN0IGFjY2VzcyB0byBpbnN0YW5jZXMgb2Ygd2VsbCBrbm93biBkYXRhIHN0cnVjdHVyZXMgbWFpbnRhaW5lZAorICAgICBieSB0aGUgbWlkIGxldmVsCisKK1Rob3NlIGZ1bmN0aW9ucyBpbiBncm91cCBhKSBhcmUgbGlzdGVkIGluIGEgc2VjdGlvbiBlbnRpdGxlZCAiTWlkIGxldmVsCitzdXBwbGllZCBmdW5jdGlvbnMiIGJlbG93LgorCitUaG9zZSBmdW5jdGlvbnMgaW4gZ3JvdXAgYikgYXJlIGxpc3RlZCBpbiBhIHNlY3Rpb24gZW50aXRsZWQgIkludGVyZmFjZQorZnVuY3Rpb25zIiBiZWxvdy4gVGhlaXIgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHBsYWNlZCBpbiB0aGUgbWVtYmVycyBvZgorInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiLCBhbiBpbnN0YW5jZSBvZiB3aGljaCBpcyBwYXNzZWQgdG8KK3Njc2lfaG9zdF9hbGxvYygpICoqIC4gIFRob3NlIGludGVyZmFjZSBmdW5jdGlvbnMgdGhhdCB0aGUgTExEIGRvZXMgbm90IAord2lzaCB0byBzdXBwbHkgc2hvdWxkIGhhdmUgTlVMTCBwbGFjZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWVtYmVyIG9mIAorc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZS4gIERlZmluaW5nIGFuIGluc3RhbmNlIG9mIHN0cnVjdCAKK3Njc2lfaG9zdF90ZW1wbGF0ZSBhdCBmaWxlIHNjb3BlIHdpbGwgY2F1c2UgTlVMTCB0byBiZSAgcGxhY2VkIGluIGZ1bmN0aW9uCisgcG9pbnRlciBtZW1iZXJzIG5vdCBleHBsaWNpdGx5IGluaXRpYWxpemVkLgorCitUaG9zZSB1c2FnZXMgaW4gZ3JvdXAgYykgc2hvdWxkIGJlIGhhbmRsZWQgd2l0aCBjYXJlLCBlc3BlY2lhbGx5IGluIGEKKyJob3RwbHVnIiBlbnZpcm9ubWVudC4gTExEcyBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIGxpZmV0aW1lIG9mIGluc3RhbmNlcwordGhhdCBhcmUgc2hhcmVkIHdpdGggdGhlIG1pZCBsZXZlbCBhbmQgb3RoZXIgbGF5ZXJzLgorCitBbGwgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGFuIExMRCBhbmQgYWxsIGRhdGEgZGVmaW5lZCBhdCBmaWxlIHNjb3BlCitzaG91bGQgYmUgc3RhdGljLiBGb3IgZXhhbXBsZSB0aGUgc2xhdmVfYWxsb2MoKSBmdW5jdGlvbiBpbiBhbiBMTEQKK2NhbGxlZCAieHh4IiBjb3VsZCBiZSBkZWZpbmVkIGFzIAorInN0YXRpYyBpbnQgeHh4X3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYpIHsgLyogY29kZSAqLyB9IgorCisqKiB0aGUgc2NzaV9ob3N0X2FsbG9jKCkgZnVuY3Rpb24gaXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIHJhdGhlciB2YWd1ZWx5CituYW1lZCBzY3NpX3JlZ2lzdGVyKCkgZnVuY3Rpb24gaW4gbW9zdCBzaXR1YXRpb25zLiBUaGUgc2NzaV9yZWdpc3RlcigpCithbmQgc2NzaV91bnJlZ2lzdGVyKCkgZnVuY3Rpb25zIHJlbWFpbiB0byBzdXBwb3J0IGxlZ2FjeSBMTERzIHRoYXQgdXNlCit0aGUgcGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbC4KKworCitIb3RwbHVnIGluaXRpYWxpemF0aW9uIG1vZGVsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbiB0aGlzIG1vZGVsIGFuIExMRCBjb250cm9scyB3aGVuIFNDU0kgaG9zdHMgYXJlIGludHJvZHVjZWQgYW5kIHJlbW92ZWQKK2Zyb20gdGhlIFNDU0kgc3Vic3lzdGVtLiBIb3N0cyBjYW4gYmUgaW50cm9kdWNlZCBhcyBlYXJseSBhcyBkcml2ZXIKK2luaXRpYWxpemF0aW9uIGFuZCByZW1vdmVkIGFzIGxhdGUgYXMgZHJpdmVyIHNodXRkb3duLiBUeXBpY2FsbHkgYSBkcml2ZXIKK3dpbGwgcmVzcG9uZCB0byBhIHN5c2ZzIHByb2JlKCkgY2FsbGJhY2sgdGhhdCBpbmRpY2F0ZXMgYW4gSEJBIGhhcyBiZWVuCitkZXRlY3RlZC4gQWZ0ZXIgY29uZmlybWluZyB0aGF0IHRoZSBuZXcgZGV2aWNlIGlzIG9uZSB0aGF0IHRoZSBMTEQgd2FudHMKK3RvIGNvbnRyb2wsIHRoZSBMTEQgd2lsbCBpbml0aWFsaXplIHRoZSBIQkEgYW5kIHRoZW4gcmVnaXN0ZXIgYSBuZXcgaG9zdAord2l0aCB0aGUgU0NTSSBtaWQgbGV2ZWwuCisKK0R1cmluZyBMTEQgaW5pdGlhbGl6YXRpb24gdGhlIGRyaXZlciBzaG91bGQgcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlCithcHByb3ByaWF0ZSBJTyBidXMgb24gd2hpY2ggaXQgZXhwZWN0cyB0byBmaW5kIEhCQShzKSAoZS5nLiB0aGUgUENJIGJ1cykuCitUaGlzIGNhbiBwcm9iYWJseSBiZSBkb25lIHZpYSBzeXNmcy4gQW55IGRyaXZlciBwYXJhbWV0ZXJzIChlc3BlY2lhbGx5Cit0aG9zZSB0aGF0IGFyZSB3cml0YWJsZSBhZnRlciB0aGUgZHJpdmVyIGlzIGxvYWRlZCkgY291bGQgYWxzbyBiZQorcmVnaXN0ZXJlZCB3aXRoIHN5c2ZzIGF0IHRoaXMgcG9pbnQuIFRoZSBTQ1NJIG1pZCBsZXZlbCBmaXJzdCBiZWNvbWVzCithd2FyZSBvZiBhbiBMTEQgd2hlbiB0aGF0IExMRCByZWdpc3RlcnMgaXRzIGZpcnN0IEhCQS4KKworQXQgc29tZSBsYXRlciB0aW1lLCB0aGUgTExEIGJlY29tZXMgYXdhcmUgb2YgYW4gSEJBIGFuZCB3aGF0IGZvbGxvd3MKK2lzIGEgdHlwaWNhbCBzZXF1ZW5jZSBvZiBjYWxscyBiZXR3ZWVuIHRoZSBMTEQgYW5kIHRoZSBtaWQgbGV2ZWwuCitUaGlzIGV4YW1wbGUgc2hvd3MgdGhlIG1pZCBsZXZlbCBzY2FubmluZyB0aGUgbmV3bHkgaW50cm9kdWNlZCBIQkEgZm9yIDMgCitzY3NpIGRldmljZXMgb2Ygd2hpY2ggb25seSB0aGUgZmlyc3QgMiByZXNwb25kOgorCisgICAgIEhCQSBQUk9CRTogYXNzdW1lIDIgU0NTSSBkZXZpY2VzIGZvdW5kIGluIHNjYW4KK0xMRCAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitzY3NpX2hvc3RfYWxsb2MoKSAgLS0+CitzY3NpX2FkZF9ob3N0KCkgIC0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKSAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkgICAqKioKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBMTEQgd2FudHMgdG8gYWRqdXN0IHRoZSBkZWZhdWx0IHF1ZXVlIHNldHRpbmdzLCBpdCBjYW4gaW52b2tlCitzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIGluIGl0cyBzbGF2ZV9jb25maWd1cmUoKSByb3V0aW5lLgorCisqKiogRm9yIHNjc2kgZGV2aWNlcyB0aGF0IHRoZSBtaWQgbGV2ZWwgdHJpZXMgdG8gc2NhbiBidXQgZG8gbm90CisgICAgcmVzcG9uZCwgYSBzbGF2ZV9hbGxvYygpLCBzbGF2ZV9kZXN0cm95KCkgcGFpciBpcyBjYWxsZWQuCisKK1doZW4gYW4gSEJBIGlzIGJlaW5nIHJlbW92ZWQgaXQgY291bGQgYmUgYXMgcGFydCBvZiBhbiBvcmRlcmx5IHNodXRkb3duCithc3NvY2lhdGVkIHdpdGggdGhlIExMRCBtb2R1bGUgYmVpbmcgdW5sb2FkZWQgKGUuZy4gd2l0aCB0aGUgInJtbW9kIgorY29tbWFuZCkgb3IgaW4gcmVzcG9uc2UgdG8gYSAiaG90IHVucGx1ZyIgaW5kaWNhdGVkIGJ5IHN5c2ZzKCkncworcmVtb3ZlKCkgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC4gSW4gZWl0aGVyIGNhc2UsIHRoZSBzZXF1ZW5jZSBpcyB0aGUKK3NhbWU6CisKKyAgICAgICAgSEJBIFJFTU9WRTogYXNzdW1lIDIgU0NTSSBkZXZpY2VzIGF0dGFjaGVkCitMTEQgICAgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorc2NzaV9yZW1vdmVfaG9zdCgpIC0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorc2NzaV9ob3N0X3B1dCgpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgIAorSXQgbWF5IGJlIHVzZWZ1bCBmb3IgYSBMTEQgdG8ga2VlcCB0cmFjayBvZiBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlcworKGEgcG9pbnRlciBpcyByZXR1cm5lZCBieSBzY3NpX2hvc3RfYWxsb2MoKSkuIFN1Y2ggaW5zdGFuY2VzIGFyZSAib3duZWQiCitieSB0aGUgbWlkLWxldmVsLiAgc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZXMgYXJlIGZyZWVkIGZyb20KK3Njc2lfaG9zdF9wdXQoKSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgaGl0cyB6ZXJvLgorCitIb3QgdW5wbHVnZ2luZyBhbiBIQkEgdGhhdCBjb250cm9scyBhIGRpc2sgd2hpY2ggaXMgcHJvY2Vzc2luZyBTQ1NJCitjb21tYW5kcyBvbiBhIG1vdW50ZWQgZmlsZSBzeXN0ZW0gaXMgYW4gaW50ZXJlc3Rpbmcgc2l0dWF0aW9uLiBSZWZlcmVuY2UKK2NvdW50aW5nIGxvZ2ljIGlzIGJlaW5nIGludHJvZHVjZWQgaW50byB0aGUgbWlkIGxldmVsIHRvIGNvcGUgd2l0aCBtYW55CitvZiB0aGUgaXNzdWVzIGludm9sdmVkLiBTZWUgdGhlIHNlY3Rpb24gb24gcmVmZXJlbmNlIGNvdW50aW5nIGJlbG93LgorCisKK1RoZSBob3RwbHVnIGNvbmNlcHQgbWF5IGJlIGV4dGVuZGVkIHRvIFNDU0kgZGV2aWNlcy4gQ3VycmVudGx5LCB3aGVuIGFuCitIQkEgaXMgYWRkZWQsIHRoZSBzY3NpX2FkZF9ob3N0KCkgZnVuY3Rpb24gY2F1c2VzIGEgc2NhbiBmb3IgU0NTSSBkZXZpY2VzCithdHRhY2hlZCB0byB0aGUgSEJBJ3MgU0NTSSB0cmFuc3BvcnQuIE9uIG5ld2VyIFNDU0kgdHJhbnNwb3J0cyB0aGUgSEJBCittYXkgYmVjb21lIGF3YXJlIG9mIGEgbmV3IFNDU0kgZGV2aWNlIF9hZnRlcl8gdGhlIHNjYW4gaGFzIGNvbXBsZXRlZC4KK0FuIExMRCBjYW4gdXNlIHRoaXMgc2VxdWVuY2UgdG8gbWFrZSB0aGUgbWlkIGxldmVsIGF3YXJlIG9mIGEgU0NTSSBkZXZpY2U6CisKKyAgICAgICAgICAgICAgICAgU0NTSSBERVZJQ0UgaG90cGx1ZworTExEICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK3Njc2lfYWRkX2RldmljZSgpICAtLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAgWy0tPiBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGEgc2ltaWxhciBmYXNoaW9uLCBhbiBMTEQgbWF5IGJlY29tZSBhd2FyZSB0aGF0IGEgU0NTSSBkZXZpY2UgaGFzIGJlZW4KK3JlbW92ZWQgKHVucGx1Z2dlZCkgb3IgdGhlIGNvbm5lY3Rpb24gdG8gaXQgaGFzIGJlZW4gaW50ZXJydXB0ZWQuIFNvbWUKK2V4aXN0aW5nIFNDU0kgdHJhbnNwb3J0cyAoZS5nLiBTUEkpIG1heSBub3QgYmVjb21lIGF3YXJlIHRoYXQgYSBTQ1NJCitkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCB1bnRpbCBhIHN1YnNlcXVlbnQgU0NTSSBjb21tYW5kIGZhaWxzIHdoaWNoIHdpbGwKK3Byb2JhYmx5IGNhdXNlIHRoYXQgZGV2aWNlIHRvIGJlIHNldCBvZmZsaW5lIGJ5IHRoZSBtaWQgbGV2ZWwuIEFuIExMRCB0aGF0CitkZXRlY3RzIHRoZSByZW1vdmFsIG9mIGEgU0NTSSBkZXZpY2UgY2FuIGluc3RpZ2F0ZSBpdHMgcmVtb3ZhbCBmcm9tCit1cHBlciBsYXllcnMgd2l0aCB0aGlzIHNlcXVlbmNlOgorCisgICAgICAgICAgICAgICAgICBTQ1NJIERFVklDRSBob3QgdW5wbHVnCitMTEQgICAgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorc2NzaV9yZW1vdmVfZGV2aWNlKCkgLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBtYXkgYmUgdXNlZnVsIGZvciBhbiBMTEQgdG8ga2VlcCB0cmFjayBvZiBzdHJ1Y3Qgc2NzaV9kZXZpY2UgaW5zdGFuY2VzCisoYSBwb2ludGVyIGlzIHBhc3NlZCBhcyB0aGUgcGFyYW1ldGVyIHRvIHNsYXZlX2FsbG9jKCkgYW5kCitzbGF2ZV9jb25maWd1cmUoKSBjYWxsYmFja3MpLiBTdWNoIGluc3RhbmNlcyBhcmUgIm93bmVkIiBieSB0aGUgbWlkLWxldmVsLgorc3RydWN0IHNjc2lfZGV2aWNlIGluc3RhbmNlcyBhcmUgZnJlZWQgYWZ0ZXIgc2xhdmVfZGVzdHJveSgpLgorCisKK1Bhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZXNlIG9sZGVyIExMRHMgaW5jbHVkZSBhIGZpbGUgY2FsbGVkICJzY3NpX21vZHVsZS5jIiBbeWVzIHRoZSAiLmMiIGlzIGEKK2xpdHRsZSBzdXJwcmlzaW5nXSBpbiB0aGVpciBzb3VyY2UgY29kZS4gRm9yIHRoYXQgZmlsZSB0byB3b3JrIGFuCitpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHdpdGggdGhlIG5hbWUgImRyaXZlcl90ZW1wbGF0ZSIKK25lZWRzIHRvIGJlIGRlZmluZWQuIEhlcmUgaXMgYSB0eXBpY2FsIGNvZGUgc2VxdWVuY2UgdXNlZCBpbiB0aGlzIG1vZGVsOgorICAgIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKKyAgICAgICAgLi4uCisgICAgfTsKKyAgICAjaW5jbHVkZSAic2NzaV9tb2R1bGUuYyIKKworVGhlIHNjc2lfbW9kdWxlLmMgZmlsZSBjb250YWlucyB0d28gZnVuY3Rpb25zOgorICAtIGluaXRfdGhpc19zY3NpX2RyaXZlcigpIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIExMRCBpcworICAgIGluaXRpYWxpemVkIChpLmUuIGJvb3QgdGltZSBvciBtb2R1bGUgbG9hZCB0aW1lKQorICAtIGV4aXRfdGhpc19zY3NpX2RyaXZlcigpIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIExMRCBpcyBzaHV0CisgICAgZG93biAoaS5lLiBtb2R1bGUgdW5sb2FkIHRpbWUpCitOb3RlOiBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHRhZ2dlZCB3aXRoIF9faW5pdCBhbmQgX19leGl0IHF1YWxpZmllcnMKK2FuIExMRCBzaG91bGQgbm90IGNhbGwgdGhlbSBleHBsaWNpdGx5IChzaW5jZSB0aGUga2VybmVsIGRvZXMgdGhhdCkuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB3aGVuIHR3byBob3N0cyBhcmUKK2RldGVjdGVkIChzbyBkZXRlY3QoKSByZXR1cm5zIDIpIGFuZCB0aGUgU0NTSSBidXMgc2NhbiBvbiBlYWNoIGhvc3QKK2ZpbmRzIDEgU0NTSSBkZXZpY2UgKGFuZCBhIHNlY29uZCBkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkuCisKK0xMRCAgICAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitpbml0X3RoaXNfc2NzaV9kcml2ZXIoKSAtLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3QoKSAgLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgc2NzaV9yZWdpc3RlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBzY3NpX3JlZ2lzdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpICAtLT4gIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpICAgKioqCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpICAgKioqCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpICoqKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtaWQgbGV2ZWwgaW52b2tlcyBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpIHdpdGggdGFnZ2VkIHF1ZXVpbmcgb2ZmIGFuZAorImNtZF9wZXJfbHVuIiBmb3IgdGhhdCBob3N0IGFzIHRoZSBxdWV1ZSBsZW5ndGguIFRoZXNlIHNldHRpbmdzIGNhbiBiZQorb3ZlcnJpZGRlbiBieSBhIHNsYXZlX2NvbmZpZ3VyZSgpIHN1cHBsaWVkIGJ5IHRoZSBMTEQuCisKKyoqKiBGb3Igc2NzaSBkZXZpY2VzIHRoYXQgdGhlIG1pZCBsZXZlbCB0cmllcyB0byBzY2FuIGJ1dCBkbyBub3QKKyAgICByZXNwb25kLCBhIHNsYXZlX2FsbG9jKCksIHNsYXZlX2Rlc3Ryb3koKSBwYWlyIGlzIGNhbGxlZC4KKworSGVyZSBpcyBhbiBMTEQgc2h1dGRvd24gc2VxdWVuY2U6CisKK0xMRCAgICAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitleGl0X3RoaXNfc2NzaV9kcml2ZXIoKSAtLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSgpICAgLS0+ICAgc2NzaV91bnJlZ2lzdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UoKSAgIC0tPiAgIHNjc2lfdW5yZWdpc3RlcigpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gTExEIG5lZWQgbm90IGRlZmluZSBzbGF2ZV9kZXN0cm95KCkgKGkuZS4gaXQgaXMgb3B0aW9uYWwpLiAKKworVGhlIHNob3J0Y29taW5nIG9mIHRoZSAicGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbCIgaXMgdGhhdCBob3N0CityZWdpc3RyYXRpb24gYW5kIGRlLXJlZ2lzdHJhdGlvbiBhcmUgKHR5cGljYWxseSkgdGllZCB0byBMTEQgaW5pdGlhbGl6YXRpb24KK2FuZCBzaHV0ZG93bi4gT25jZSB0aGUgTExEIGlzIGluaXRpYWxpemVkIHRoZW4gYSBuZXcgaG9zdCB0aGF0IGFwcGVhcnMKKyhlLmcuIHZpYSBob3RwbHVnZ2luZykgY2Fubm90IGVhc2lseSBiZSBhZGRlZCB3aXRob3V0IGEgcmVkdW5kYW50Citkcml2ZXIgc2h1dGRvd24gYW5kIHJlLWluaXRpYWxpemF0aW9uLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gd3JpdGUgYW4gTExECit0aGF0IHVzZXMgYm90aCBpbml0aWFsaXphdGlvbiBtb2RlbHMuCisKKworUmVmZXJlbmNlIENvdW50aW5nCis9PT09PT09PT09PT09PT09PT0KK1RoZSBTY3NpX0hvc3Qgc3RydWN0dXJlIGhhcyBoYWQgcmVmZXJlbmNlIGNvdW50aW5nIGluZnJhc3RydWN0dXJlIGFkZGVkLgorVGhpcyBlZmZlY3RpdmVseSBzcHJlYWRzIHRoZSBvd25lcnNoaXAgb2Ygc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZXMKK2Fjcm9zcyB0aGUgdmFyaW91cyBTQ1NJIGxheWVycyB3aGljaCB1c2UgdGhlbS4gUHJldmlvdXNseSBzdWNoIGluc3RhbmNlcword2VyZSBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgbWlkIGxldmVsLiBMTERzIHdvdWxkIG5vdCB1c3VhbGx5IG5lZWQgdG8KK2RpcmVjdGx5IG1hbmlwdWxhdGUgdGhlc2UgcmVmZXJlbmNlIGNvdW50cyBidXQgdGhlcmUgbWF5IGJlIHNvbWUgY2FzZXMKK3doZXJlIHRoZXkgZG8uCisKK1RoZXJlIGFyZSAzIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXNzb2NpYXRlZCB3aXRoCitzdHJ1Y3QgU2NzaV9Ib3N0OgorICAtIHNjc2lfaG9zdF9hbGxvYygpOiByZXR1cm5zIGEgcG9pbnRlciB0byBuZXcgaW5zdGFuY2Ugb2Ygc3RydWN0IAorICAgICAgICBTY3NpX0hvc3Qgd2hpY2ggaGFzIGl0cyByZWZlcmVuY2UgY291bnQgXl4gc2V0IHRvIDEKKyAgLSBzY3NpX2hvc3RfZ2V0KCk6IGFkZHMgMSB0byB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBpbnN0YW5jZQorICAtIHNjc2lfaG9zdF9wdXQoKTogZGVjcmVtZW50cyAxIGZyb20gdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4KKyAgICAgICAgaW5zdGFuY2UuIElmIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwIHRoZW4gdGhlIGdpdmVuIGluc3RhbmNlCisgICAgICAgIGlzIGZyZWVkCisKK1RoZSBTY3NpX2RldmljZSBzdHJ1Y3R1cmUgaGFzIGhhZCByZWZlcmVuY2UgY291bnRpbmcgaW5mcmFzdHJ1Y3R1cmUgYWRkZWQuCitUaGlzIGVmZmVjdGl2ZWx5IHNwcmVhZHMgdGhlIG93bmVyc2hpcCBvZiBzdHJ1Y3QgU2NzaV9kZXZpY2UgaW5zdGFuY2VzCithY3Jvc3MgdGhlIHZhcmlvdXMgU0NTSSBsYXllcnMgd2hpY2ggdXNlIHRoZW0uIFByZXZpb3VzbHkgc3VjaCBpbnN0YW5jZXMKK3dlcmUgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIG1pZCBsZXZlbC4gU2VlIHRoZSBhY2Nlc3MgZnVuY3Rpb25zIGRlY2xhcmVkCit0b3dhcmRzIHRoZSBlbmQgb2YgaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggLiBJZiBhbiBMTEQgd2FudHMgdG8ga2VlcAorYSBjb3B5IG9mIGEgcG9pbnRlciB0byBhIFNjc2lfZGV2aWNlIGluc3RhbmNlIGl0IHNob3VsZCB1c2Ugc2NzaV9kZXZpY2VfZ2V0KCkKK3RvIGJ1bXAgaXRzIHJlZmVyZW5jZSBjb3VudC4gV2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIHRoZSBwb2ludGVyIGl0IGNhbgordXNlIHNjc2lfZGV2aWNlX3B1dCgpIHRvIGRlY3JlbWVudCBpdHMgcmVmZXJlbmNlIGNvdW50IChhbmQgcG90ZW50aWFsbHkKK2RlbGV0ZSBpdCkuCisKK15eIHN0cnVjdCBTY3NpX0hvc3QgYWN0dWFsbHkgaGFzIDIgcmVmZXJlbmNlIGNvdW50cyB3aGljaCBhcmUgbWFuaXB1bGF0ZWQKK2luIHBhcmFsbGVsIGJ5IHRoZXNlIGZ1bmN0aW9ucy4KKworCitDb252ZW50aW9ucworPT09PT09PT09PT0KK0ZpcnN0LCBMaW51cyBUb3J2YWxkcydzIHRob3VnaHRzIG9uIEMgY29kaW5nIHN0eWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUKK0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgZmlsZS4gCisKK05leHQsIHRoZXJlIGlzIGEgbW92ZW1lbnQgdG8gIm91dGxhdyIgdHlwZWRlZnMgaW50cm9kdWNpbmcgc3lub255bXMgZm9yIAorc3RydWN0IHRhZ3MuIEJvdGggY2FuIGJlIHN0aWxsIGZvdW5kIGluIHRoZSBTQ1NJIHN1YnN5c3RlbSwgYnV0Cit0aGUgdHlwZWRlZnMgaGF2ZSBiZWVuIG1vdmVkIHRvIGEgc2luZ2xlIGZpbGUsIHNjc2lfdHlwZWRlZnMuaCB0bworbWFrZSB0aGVpciBmdXR1cmUgcmVtb3ZhbCBlYXNpZXIsIGZvciBleGFtcGxlOiAKKyJ0eXBlZGVmIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgU2NzaV9Ib3N0X1RlbXBsYXRlOyIKKworQWxzbywgbW9zdCBDOTkgZW5oYW5jZW1lbnRzIGFyZSBlbmNvdXJhZ2VkIHRvIHRoZSBleHRlbnQgdGhleSBhcmUgc3VwcG9ydGVkCitieSB0aGUgcmVsZXZhbnQgZ2NjIGNvbXBpbGVycy4gU28gQzk5IHN0eWxlIHN0cnVjdHVyZSBhbmQgYXJyYXkKK2luaXRpYWxpemVycyBhcmUgZW5jb3VyYWdlZCB3aGVyZSBhcHByb3ByaWF0ZS4gRG9uJ3QgZ28gdG9vIGZhciwKK1ZMQXMgYXJlIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQgeWV0LiAgQW4gZXhjZXB0aW9uIHRvIHRoaXMgaXMgdGhlIHVzZSBvZgorIi8vIiBzdHlsZSBjb21tZW50czsgLyouLi4qLyBjb21tZW50cyBhcmUgc3RpbGwgcHJlZmVycmVkIGluIExpbnV4LgorCitXZWxsIHdyaXR0ZW4sIHRlc3RlZCBhbmQgZG9jdW1lbnRlZCBjb2RlLCBuZWVkIG5vdCBiZSByZS1mb3JtYXR0ZWQgdG8KK2NvbXBseSB3aXRoIHRoZSBhYm92ZSBjb252ZW50aW9ucy4gRm9yIGV4YW1wbGUsIHRoZSBhaWM3eHh4IGRyaXZlcgorY29tZXMgdG8gTGludXggZnJvbSBGcmVlQlNEIGFuZCBBZGFwdGVjJ3Mgb3duIGxhYnMuIE5vIGRvdWJ0IEZyZWVCU0QKK2FuZCBBZGFwdGVjIGhhdmUgdGhlaXIgb3duIGNvZGluZyBjb252ZW50aW9ucy4KKworCitNaWQgbGV2ZWwgc3VwcGxpZWQgZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGVzZSBmdW5jdGlvbnMgYXJlIHN1cHBsaWVkIGJ5IHRoZSBTQ1NJIG1pZCBsZXZlbCBmb3IgdXNlIGJ5IExMRHMuCitUaGUgbmFtZXMgKGkuZS4gZW50cnkgcG9pbnRzKSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIAorc28gYW4gTExEIHRoYXQgaXMgYSBtb2R1bGUgY2FuIGFjY2VzcyB0aGVtLiBUaGUga2VybmVsIHdpbGwKK2FycmFuZ2UgZm9yIHRoZSBTQ1NJIG1pZCBsZXZlbCB0byBiZSBsb2FkZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhbnkgTExECitpcyBpbml0aWFsaXplZC4gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbGlzdGVkIGFscGhhYmV0aWNhbGx5IGFuZCB0aGVpcgorbmFtZXMgYWxsIHN0YXJ0IHdpdGggInNjc2lfIi4KKworU3VtbWFyeToKKyAgIHNjc2lfYWN0aXZhdGVfdGNxIC0gdHVybiBvbiB0YWcgY29tbWFuZCBxdWV1ZWluZworICAgc2NzaV9hZGRfZGV2aWNlIC0gY3JlYXRlcyBuZXcgc2NzaSBkZXZpY2UgKGx1KSBpbnN0YW5jZQorICAgc2NzaV9hZGRfaG9zdCAtIHBlcmZvcm0gc3lzZnMgcmVnaXN0cmF0aW9uIGFuZCBTQ1NJIGJ1cyBzY2FuLgorICAgc2NzaV9hZGRfdGltZXIgLSAocmUtKXN0YXJ0IHRpbWVyIG9uIGEgU0NTSSBjb21tYW5kLgorICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBjaGFuZ2UgdGhlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKKyAgIHNjc2lfYXNzaWduX2xvY2sgLSByZXBsYWNlIGRlZmF1bHQgaG9zdF9sb2NrIHdpdGggZ2l2ZW4gbG9jaworICAgc2NzaV9iaW9zX3B0YWJsZSAtIHJldHVybiBjb3B5IG9mIGJsb2NrIGRldmljZSdzIHBhcnRpdGlvbiB0YWJsZQorICAgc2NzaV9ibG9ja19yZXF1ZXN0cyAtIHByZXZlbnQgZnVydGhlciBjb21tYW5kcyBiZWluZyBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICAgc2NzaV9kZWFjdGl2YXRlX3RjcSAtIHR1cm4gb2ZmIHRhZyBjb21tYW5kIHF1ZXVlaW5nCisgICBzY3NpX2RlbGV0ZV90aW1lciAtIGNhbmNlbCB0aW1lciBvbiBhIFNDU0kgY29tbWFuZC4KKyAgIHNjc2lfaG9zdF9hbGxvYyAtIHJldHVybiBhIG5ldyBzY3NpX2hvc3QgaW5zdGFuY2Ugd2hvc2UgcmVmY291bnQ9PTEKKyAgIHNjc2lfaG9zdF9nZXQgLSBpbmNyZW1lbnRzIFNjc2lfSG9zdCBpbnN0YW5jZSdzIHJlZmNvdW50CisgICBzY3NpX2hvc3RfcHV0IC0gZGVjcmVtZW50cyBTY3NpX0hvc3QgaW5zdGFuY2UncyByZWZjb3VudCAoZnJlZSBpZiAwKQorICAgc2NzaV9wYXJ0c2l6ZSAtIHBhcnNlIHBhcnRpdGlvbiB0YWJsZSBpbnRvIGN5bGluZGVycywgaGVhZHMgKyBzZWN0b3JzCisgICBzY3NpX3JlZ2lzdGVyIC0gY3JlYXRlIGFuZCByZWdpc3RlciBhIHNjc2kgaG9zdCBhZGFwdGVyIGluc3RhbmNlLgorICAgc2NzaV9yZW1vdmVfZGV2aWNlIC0gZGV0YWNoIGFuZCByZW1vdmUgYSBTQ1NJIGRldmljZQorICAgc2NzaV9yZW1vdmVfaG9zdCAtIGRldGFjaCBhbmQgcmVtb3ZlIGFsbCBTQ1NJIGRldmljZXMgb3duZWQgYnkgaG9zdAorICAgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0IC0gcmVwb3J0IHNjc2kgX2J1c18gcmVzZXQgb2JzZXJ2ZWQKKyAgIHNjc2lfc2V0X2RldmljZSAtIHBsYWNlIGRldmljZSByZWZlcmVuY2UgaW4gaG9zdCBzdHJ1Y3R1cmUKKyAgIHNjc2lfdG9fcGNpX2RtYV9kaXIgLSBjb252ZXJ0IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnIHRvIFBDSQorICAgc2NzaV90b19zYnVzX2RtYV9kaXIgLSBjb252ZXJ0IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnIHRvIFNCVVMKKyAgIHNjc2lfdHJhY2tfcXVldWVfZnVsbCAtIHRyYWNrIHN1Y2Nlc3NpdmUgUVVFVUVfRlVMTCBldmVudHMgCisgICBzY3NpX3VuYmxvY2tfcmVxdWVzdHMgLSBhbGxvdyBmdXJ0aGVyIGNvbW1hbmRzIHRvIGJlIHF1ZXVlZCB0byBnaXZlbiBob3N0CisgICBzY3NpX3VucmVnaXN0ZXIgLSBbY2FsbHMgc2NzaV9ob3N0X3B1dCgpXQorCisKK0RldGFpbHM6CisKKy8qKgorICogc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nICgib3JkZXJlZCIgdGFzayBhdHRyaWJ1dGUpCisgKiBAc2RldjogICAgICAgZGV2aWNlIHRvIHR1cm4gb24gVENRIGZvcgorICogQGRlcHRoOiAgICAgIHF1ZXVlIGRlcHRoCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IEV2ZW50dWFsbHksIGl0IGlzIGhvcGVkIGRlcHRoIHdvdWxkIGJlIHRoZSBtYXhpbXVtIGRlcHRoCisgKiAgICAgIHRoZSBkZXZpY2UgY291bGQgY29wZSB3aXRoIGFuZCB0aGUgcmVhbCBxdWV1ZSBkZXB0aAorICogICAgICB3b3VsZCBiZSBhZGp1c3RhYmxlIGZyb20gMCB0byBkZXB0aC4KKyAqCisgKiAgICAgIERlZmluZWQgKGlubGluZSkgaW46IGluY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCisgKiovCit2b2lkIHNjc2lfYWN0aXZhdGVfdGNxKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQorCisKKy8qKgorICogc2NzaV9hZGRfZGV2aWNlIC0gY3JlYXRlcyBuZXcgc2NzaSBkZXZpY2UgKGx1KSBpbnN0YW5jZQorICogQHNob3N0OiAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IGluc3RhbmNlCisgKiBAY2hhbm5lbDogY2hhbm5lbCBudW1iZXIgKHJhcmVseSBvdGhlciB0aGFuIDApCisgKiBAaWQ6ICAgICAgdGFyZ2V0IGlkIG51bWJlcgorICogQGx1bjogICAgIGxvZ2ljYWwgdW5pdCBudW1iZXIKKyAqCisgKiAgICAgIFJldHVybnMgcG9pbnRlciB0byBuZXcgc3RydWN0IHNjc2lfZGV2aWNlIGluc3RhbmNlIG9yIAorICogICAgICBFUlJfUFRSKC1FTk9ERVYpIChvciBzb21lIG90aGVyIGJlbnQgcG9pbnRlcikgaWYgc29tZXRoaW5nIGlzCisgKiAgICAgIHdyb25nIChlLmcuIG5vIGx1IHJlc3BvbmRzIGF0IGdpdmVuIGFkZHJlc3MpCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogVGhpcyBjYWxsIGlzIHVzdWFsbHkgcGVyZm9ybWVkIGludGVybmFsbHkgZHVyaW5nIGEgc2NzaQorICogICAgICBidXMgc2NhbiB3aGVuIGFuIEhCQSBpcyBhZGRlZCAoaS5lLiBzY3NpX2FkZF9ob3N0KCkpLiBTbyBpdAorICogICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIEhCQSBiZWNvbWVzIGF3YXJlIG9mIGEgbmV3IHNjc2kKKyAqICAgICAgZGV2aWNlIChsdSkgYWZ0ZXIgc2NzaV9hZGRfaG9zdCgpIGhhcyBjb21wbGV0ZWQuIElmIHN1Y2Nlc3NmdWwKKyAqICAgICAgdGhpcyBjYWxsIHdlIGxlYWQgdG8gc2xhdmVfYWxsb2MoKSBhbmQgc2xhdmVfY29uZmlndXJlKCkgY2FsbGJhY2tzCisgKiAgICAgIGludG8gdGhlIExMRC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworICoqLworc3RydWN0IHNjc2lfZGV2aWNlICogc2NzaV9hZGRfZGV2aWNlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBsdW4pCisKKworLyoqCisgKiBzY3NpX2FkZF9ob3N0IC0gcGVyZm9ybSBzeXNmcyByZWdpc3RyYXRpb24gYW5kIFNDU0kgYnVzIHNjYW4uCisgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqIEBkZXY6ICAgICBwb2ludGVyIHRvIHN0cnVjdCBkZXZpY2Ugb2YgdHlwZSBzY3NpIGNsYXNzCisgKgorICogICAgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb2YgZmFpbHVyZSAoZS5nLiAtRU5PTUVNKQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogT25seSByZXF1aXJlZCBpbiAiaG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlbCIgYWZ0ZXIgYQorICogICAgICBzdWNjZXNzZnVsIGNhbGwgdG8gc2NzaV9ob3N0X2FsbG9jKCkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYworICoqLworaW50IHNjc2lfYWRkX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHN0cnVjdCBkZXZpY2UgKiBkZXYpCisKKworLyoqCisgKiBzY3NpX2FkZF90aW1lciAtIChyZS0pc3RhcnQgdGltZXIgb24gYSBTQ1NJIGNvbW1hbmQuCisgKiBAc2NtZDogICAgcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgaW5zdGFuY2UKKyAqIEB0aW1lb3V0OiBkdXJhdGlvbiBvZiB0aW1lb3V0IGluICJqaWZmaWVzIgorICogQGNvbXBsZXRlOiBwb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGltZW91dCBleHBpcmVzCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IEVhY2ggc2NzaSBjb21tYW5kIGhhcyBpdHMgb3duIHRpbWVyLCBhbmQgYXMgaXQgaXMgYWRkZWQKKyAqICAgICAgdG8gdGhlIHF1ZXVlLCB3ZSBzZXQgdXAgdGhlIHRpbWVyLiBXaGVuIHRoZSBjb21tYW5kIGNvbXBsZXRlcywgCisgKiAgICAgIHdlIGNhbmNlbCB0aGUgdGltZXIuIEFuIExMRCBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlCisgKiAgICAgIHRoZSBleGlzdGluZyB0aW1lb3V0IHZhbHVlLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworICoqLwordm9pZCBzY3NpX2FkZF90aW1lcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCBpbnQgdGltZW91dCwgCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjb21wbGV0ZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKKworCisvKioKKyAqIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoIC0gYWxsb3cgTExEIHRvIGNoYW5nZSBxdWV1ZSBkZXB0aCBvbiBhIFNDU0kgZGV2aWNlCisgKiBAc2RldjogICAgICAgcG9pbnRlciB0byBTQ1NJIGRldmljZSB0byBjaGFuZ2UgcXVldWUgZGVwdGggb24KKyAqIEB0YWdnZWQ6ICAgICAwIC0gbm8gdGFnZ2VkIHF1ZXVpbmcKKyAqICAgICAgICAgICAgICBNU0dfU0lNUExFX1RBRyAtIHNpbXBsZSB0YWdnZWQgcXVldWluZworICogICAgICAgICAgICAgIE1TR19PUkRFUkVEX1RBRyAtIG9yZGVyZWQgdGFnZ2VkIHF1ZXVpbmcKKyAqIEB0YWdzICAgICAgICBOdW1iZXIgb2YgdGFncyBhbGxvd2VkIGlmIHRhZ2dlZCBxdWV1aW5nIGVuYWJsZWQsCisgKiAgICAgICAgICAgICAgb3IgbnVtYmVyIG9mIGNvbW1hbmRzIHRoZSBMTEQgY2FuIHF1ZXVlIHVwCisgKiAgICAgICAgICAgICAgaW4gbm9uLXRhZ2dlZCBtb2RlIChhcyBwZXIgY21kX3Blcl9sdW4pLgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBDYW4gYmUgaW52b2tlZCBhbnkgdGltZSBvbiBhIFNDU0kgZGV2aWNlIGNvbnRyb2xsZWQgYnkgdGhpcworICogICAgICBMTEQuIFtTcGVjaWZpY2FsbHkgZHVyaW5nIGFuZCBhZnRlciBzbGF2ZV9jb25maWd1cmUoKSBhbmQgcHJpb3IgdG8KKyAqICAgICAgc2xhdmVfZGVzdHJveSgpLl0gQ2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gaW50ZXJydXB0IGNvZGUuIEFjdHVhbAorICogICAgICBxdWV1ZSBkZXB0aCBjaGFuZ2UgbWF5IGJlIGRlbGF5ZWQgdW50aWwgdGhlIG5leHQgY29tbWFuZCBpcyBiZWluZworICogICAgICBwcm9jZXNzZWQuIFNlZSBhbHNvIHNjc2lfYWN0aXZhdGVfdGNxKCkgYW5kIHNjc2lfZGVhY3RpdmF0ZV90Y3EoKS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpLmMgW3NlZSBzb3VyY2UgY29kZSBmb3IgbW9yZSBub3Rlc10KKyAqCisgKiovCit2b2lkIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYsIGludCB0YWdnZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFncykKKworCisvKioKKyAqIHNjc2lfYXNzaWduX2xvY2sgLSByZXBsYWNlIGRlZmF1bHQgaG9zdF9sb2NrIHdpdGggZ2l2ZW4gbG9jaworICogQHNob3N0OiBhIHBvaW50ZXIgdG8gYSBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqIEBsb2NrOiBwb2ludGVyIHRvIGxvY2sgdG8gcmVwbGFjZSBob3N0X2xvY2sgZm9yIHRoaXMgaG9zdAorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCAuCisgKiovCit2b2lkIHNjc2lfYXNzaWduX2xvY2soc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHNwaW5sb2NrX3QgKmxvY2spCisKKworLyoqCisgKiBzY3NpX2Jpb3NfcHRhYmxlIC0gcmV0dXJuIGNvcHkgb2YgYmxvY2sgZGV2aWNlJ3MgcGFydGl0aW9uIHRhYmxlCisgKiBAZGV2OiAgICAgICAgcG9pbnRlciB0byBibG9jayBkZXZpY2UKKyAqCisgKiAgICAgIFJldHVybnMgcG9pbnRlciB0byBwYXJ0aXRpb24gdGFibGUsIG9yIE5VTEwgZm9yIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBDYWxsZXIgb3ducyBtZW1vcnkgcmV0dXJuZWQgKGZyZWUgd2l0aCBrZnJlZSgpICkKKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpY2FtLmMKKyAqKi8KK3Vuc2lnbmVkIGNoYXIgKnNjc2lfYmlvc19wdGFibGUoc3RydWN0IGJsb2NrX2RldmljZSAqZGV2KQorCisKKy8qKgorICogc2NzaV9ibG9ja19yZXF1ZXN0cyAtIHByZXZlbnQgZnVydGhlciBjb21tYW5kcyBiZWluZyBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICoKKyAqIEBzaG9zdDogcG9pbnRlciB0byBob3N0IHRvIGJsb2NrIGNvbW1hbmRzIG9uCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IFRoZXJlIGlzIG5vIHRpbWVyIG5vciBhbnkgb3RoZXIgbWVhbnMgYnkgd2hpY2ggdGhlIHJlcXVlc3RzCisgKiAgICAgIGdldCB1bmJsb2NrZWQgb3RoZXIgdGhhbiB0aGUgTExEIGNhbGxpbmcgc2NzaV91bmJsb2NrX3JlcXVlc3RzKCkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKiovCit2b2lkIHNjc2lfYmxvY2tfcmVxdWVzdHMoc3RydWN0IFNjc2lfSG9zdCAqIHNob3N0KQorCisKKy8qKgorICogc2NzaV9kZWFjdGl2YXRlX3RjcSAtIHR1cm4gb2ZmIHRhZyBjb21tYW5kIHF1ZXVlaW5nCisgKiBAc2RldjogICAgICAgZGV2aWNlIHRvIHR1cm4gb2ZmIFRDUSBmb3IKKyAqIEBkZXB0aDogICAgICBxdWV1ZSBkZXB0aCAoc3RvcmVkIGluIHNkZXYpCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCAoaW5saW5lKSBpbjogaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKKyAqKi8KK3ZvaWQgc2NzaV9kZWFjdGl2YXRlX3RjcShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCkKKworCisvKioKKyAqIHNjc2lfZGVsZXRlX3RpbWVyIC0gY2FuY2VsIHRpbWVyIG9uIGEgU0NTSSBjb21tYW5kLgorICogQHNjbWQ6ICAgIHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIGluc3RhbmNlCisgKgorICogICAgICBSZXR1cm5zIDEgaWYgYWJsZSB0byBjYW5jZWwgdGltZXIgZWxzZSAwIChpLmUuIHRvbyBsYXRlIG9yIGFscmVhZHkKKyAqICAgICAgY2FuY2VsbGVkKS4KKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubyBbbWF5IGluIHRoZSBmdXR1cmUgaWYgaXQgaW52b2tlcyBkZWxfdGltZXJfc3luYygpXQorICoKKyAqICAgICAgTm90ZXM6IEFsbCBjb21tYW5kcyBpc3N1ZWQgYnkgdXBwZXIgbGV2ZWxzIGFscmVhZHkgaGF2ZSBhIHRpbWVvdXQKKyAqICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEFuIExMRCBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZQorICogICAgICB0aW1lci4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKyAqKi8KK2ludCBzY3NpX2RlbGV0ZV90aW1lcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQorCisKKy8qKgorICogc2NzaV9ob3N0X2FsbG9jIC0gY3JlYXRlIGEgc2NzaSBob3N0IGFkYXB0ZXIgaW5zdGFuY2UgYW5kIHBlcmZvcm0gYmFzaWMKKyAqICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgorICogQHNodDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCisgKiBAcHJpdnNpemU6ICAgZXh0cmEgYnl0ZXMgdG8gYWxsb2NhdGUgaW4gaG9zdGRhdGEgYXJyYXkgKHdoaWNoIGlzIHRoZQorICogICAgICAgICAgICAgIGxhc3QgbWVtYmVyIG9mIHRoZSByZXR1cm5lZCBTY3NpX0hvc3QgaW5zdGFuY2UpCisgKgorICogICAgICBSZXR1cm5zIHBvaW50ZXIgdG8gbmV3IFNjc2lfSG9zdCBpbnN0YW5jZSBvciBOVUxMIG9uIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBXaGVuIHRoaXMgY2FsbCByZXR1cm5zIHRvIHRoZSBMTEQsIHRoZSBTQ1NJIGJ1cyBzY2FuIG9uCisgKiAgICAgIHRoaXMgaG9zdCBoYXMgX25vdF8geWV0IGJlZW4gZG9uZS4KKyAqICAgICAgVGhlIGhvc3RkYXRhIGFycmF5IChieSBkZWZhdWx0IHplcm8gbGVuZ3RoKSBpcyBhIHBlciBob3N0IHNjcmF0Y2ggCisgKiAgICAgIGFyZWEgZm9yIHRoZSBMTEQncyBleGNsdXNpdmUgdXNlLgorICogICAgICBCb3RoIGFzc29jaWF0ZWQgcmVmY291bnRpbmcgb2JqZWN0cyBoYXZlIHRoZWlyIHJlZmNvdW50IHNldCB0byAxLgorICogICAgICBGdWxsIHJlZ2lzdHJhdGlvbiAoaW4gc3lzZnMpIGFuZCBhIGJ1cyBzY2FuIGFyZSBwZXJmb3JtZWQgbGF0ZXIgd2hlbgorICogICAgICBzY3NpX2FkZF9ob3N0KCkgaXMgY2FsbGVkLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgorICoqLworc3RydWN0IFNjc2lfSG9zdCAqIHNjc2lfaG9zdF9hbGxvYyhzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogc2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpdnNpemUpCisKKworLyoqCisgKiBzY3NpX2hvc3RfZ2V0IC0gaW5jcmVtZW50IFNjc2lfSG9zdCBpbnN0YW5jZSByZWZjb3VudAorICogQHNob3N0OiAgIHBvaW50ZXIgdG8gc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogY3VycmVudGx5IG1heSBibG9jayBidXQgbWF5IGJlIGNoYW5nZWQgdG8gbm90IGJsb2NrCisgKgorICogICAgICBOb3RlczogQWN0dWFsbHkgaW5jcmVtZW50cyB0aGUgY291bnRzIGluIHR3byBzdWItb2JqZWN0cworICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMKKyAqKi8KK3ZvaWQgc2NzaV9ob3N0X2dldChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKKworCisvKioKKyAqIHNjc2lfaG9zdF9wdXQgLSBkZWNyZW1lbnQgU2NzaV9Ib3N0IGluc3RhbmNlIHJlZmNvdW50LCBmcmVlIGlmIDAKKyAqIEBzaG9zdDogICBwb2ludGVyIHRvIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IGN1cnJlbnRseSBtYXkgYmxvY2sgYnV0IG1heSBiZSBjaGFuZ2VkIHRvIG5vdCBibG9jaworICoKKyAqICAgICAgTm90ZXM6IEFjdHVhbGx5IGRlY3JlbWVudHMgdGhlIGNvdW50cyBpbiB0d28gc3ViLW9iamVjdHMuIElmIHRoZQorICogICAgICBsYXR0ZXIgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgU2NzaV9Ib3N0IGluc3RhbmNlIGlzIGZyZWVkLgorICogICAgICBUaGUgTExEIG5lZWQgbm90IHdvcnJ5IGV4YWN0bHkgd2hlbiB0aGUgU2NzaV9Ib3N0IGluc3RhbmNlIGlzCisgKiAgICAgIGZyZWVkLCBpdCBqdXN0IHNob3VsZG4ndCBhY2Nlc3MgdGhlIGluc3RhbmNlIGFmdGVyIGl0IGhhcyBiYWxhbmNlZAorICogICAgICBvdXQgaXRzIHJlZmNvdW50IHVzYWdlLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMKKyAqKi8KK3ZvaWQgc2NzaV9ob3N0X3B1dChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKKworCisvKioKKyAqIHNjc2lfcGFydHNpemUgLSBwYXJzZSBwYXJ0aXRpb24gdGFibGUgaW50byBjeWxpbmRlcnMsIGhlYWRzICsgc2VjdG9ycworICogQGJ1ZjogcG9pbnRlciB0byBwYXJ0aXRpb24gdGFibGUKKyAqIEBjYXBhY2l0eTogc2l6ZSBvZiAodG90YWwpIGRpc2sgaW4gNTEyIGJ5dGUgc2VjdG9ycworICogQGN5bHM6IG91dHB1dHMgbnVtYmVyIG9mIGN5bGluZGVycyBjYWxjdWxhdGVkIHZpYSB0aGlzIHBvaW50ZXIKKyAqIEBoZHM6IG91dHB1dHMgbnVtYmVyIG9mIGhlYWRzIGNhbGN1bGF0ZWQgdmlhIHRoaXMgcG9pbnRlcgorICogQHNlY3M6IG91dHB1dHMgbnVtYmVyIG9mIHNlY3RvcnMgY2FsY3VsYXRlZCB2aWEgdGhpcyBwb2ludGVyCisgKgorICogICAgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogQ2FsbGVyIG93bnMgbWVtb3J5IHJldHVybmVkIChmcmVlIHdpdGgga2ZyZWUoKSApCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaWNhbS5jCisgKiovCitpbnQgc2NzaV9wYXJ0c2l6ZSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgY2FwYWNpdHksCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmN5bHMsIHVuc2lnbmVkIGludCAqaGRzLCB1bnNpZ25lZCBpbnQgKnNlY3MpCisKKworLyoqCisgKiBzY3NpX3JlZ2lzdGVyIC0gY3JlYXRlIGFuZCByZWdpc3RlciBhIHNjc2kgaG9zdCBhZGFwdGVyIGluc3RhbmNlLgorICogQHNodDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IHRlbXBsYXRlCisgKiBAcHJpdnNpemU6ICAgZXh0cmEgYnl0ZXMgdG8gYWxsb2NhdGUgaW4gaG9zdGRhdGEgYXJyYXkgKHdoaWNoIGlzIHRoZQorICogICAgICAgICAgICAgIGxhc3QgbWVtYmVyIG9mIHRoZSByZXR1cm5lZCBTY3NpX0hvc3QgaW5zdGFuY2UpCisgKgorICogICAgICBSZXR1cm5zIHBvaW50ZXIgdG8gbmV3IFNjc2lfSG9zdCBpbnN0YW5jZSBvciBOVUxMIG9uIGZhaWx1cmUKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBXaGVuIHRoaXMgY2FsbCByZXR1cm5zIHRvIHRoZSBMTEQsIHRoZSBTQ1NJIGJ1cyBzY2FuIG9uCisgKiAgICAgIHRoaXMgaG9zdCBoYXMgX25vdF8geWV0IGJlZW4gZG9uZS4KKyAqICAgICAgVGhlIGhvc3RkYXRhIGFycmF5IChieSBkZWZhdWx0IHplcm8gbGVuZ3RoKSBpcyBhIHBlciBob3N0IHNjcmF0Y2ggCisgKiAgICAgIGFyZWEgZm9yIHRoZSBMTEQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYyAuCisgKiovCitzdHJ1Y3QgU2NzaV9Ib3N0ICogc2NzaV9yZWdpc3RlcihzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogc2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByaXZzaXplKQorCisKKy8qKgorICogc2NzaV9yZW1vdmVfZGV2aWNlIC0gZGV0YWNoIGFuZCByZW1vdmUgYSBTQ1NJIGRldmljZQorICogQHNkZXY6ICAgICAgYSBwb2ludGVyIHRvIGEgc2NzaSBkZXZpY2UgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgdmFsdWU6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBkZXZpY2Ugbm90IGF0dGFjaGVkCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogSWYgYW4gTExEIGJlY29tZXMgYXdhcmUgdGhhdCBhIHNjc2kgZGV2aWNlIChsdSkgaGFzCisgKiAgICAgIGJlZW4gcmVtb3ZlZCBidXQgaXRzIGhvc3QgaXMgc3RpbGwgcHJlc2VudCB0aGVuIGl0IGNhbiByZXF1ZXN0CisgKiAgICAgIHRoZSByZW1vdmFsIG9mIHRoYXQgc2NzaSBkZXZpY2UuIElmIHN1Y2Nlc3NmdWwgdGhpcyBjYWxsIHdpbGwKKyAqICAgICAgbGVhZCB0byB0aGUgc2xhdmVfZGVzdHJveSgpIGNhbGxiYWNrIGJlaW5nIGludm9rZWQuIHNkZXYgaXMgYW4gCisgKiAgICAgIGludmFsaWQgcG9pbnRlciBhZnRlciB0aGlzIGNhbGwuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIC4KKyAqKi8KK2ludCBzY3NpX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorCisKKy8qKgorICogc2NzaV9yZW1vdmVfaG9zdCAtIGRldGFjaCBhbmQgcmVtb3ZlIGFsbCBTQ1NJIGRldmljZXMgb3duZWQgYnkgaG9zdAorICogQHNob3N0OiAgICAgIGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyB2YWx1ZTogMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUgKGUuZy4gTExEIGJ1c3kgPz8pCisgKgorICogICAgICBNaWdodCBibG9jazogeWVzCisgKgorICogICAgICBOb3RlczogU2hvdWxkIG9ubHkgYmUgaW52b2tlZCBpZiB0aGUgImhvdHBsdWcgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgbW9kZWwiIGlzIGJlaW5nIHVzZWQuIEl0IHNob3VsZCBiZSBjYWxsZWQgX3ByaW9yXyB0byAgCisgKiAgICAgIHNjc2lfdW5yZWdpc3RlcigpLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgorICoqLworaW50IHNjc2lfcmVtb3ZlX2hvc3Qoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCisKKworLyoqCisgKiBzY3NpX3JlcG9ydF9idXNfcmVzZXQgLSByZXBvcnQgc2NzaSBfYnVzXyByZXNldCBvYnNlcnZlZAorICogQHNob3N0OiBhIHBvaW50ZXIgdG8gYSBzY3NpIGhvc3QgaW52b2x2ZWQKKyAqIEBjaGFubmVsOiBjaGFubmVsICh3aXRoaW4pIGhvc3Qgb24gd2hpY2ggc2NzaSBidXMgcmVzZXQgb2NjdXJyZWQKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZCBpZiB0aGUgcmVzZXQgaXMgb25lIHdoaWNoCisgKiAgICAgIG9yaWdpbmF0ZXMgZnJvbSBhbiB1bmtub3duIGxvY2F0aW9uLiAgUmVzZXRzIG9yaWdpbmF0ZWQgYnkgdGhlIAorICogICAgICBtaWQgbGV2ZWwgaXRzZWxmIGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzLCBidXQgdGhlcmUgc2hvdWxkIGJlIAorICogICAgICBubyBoYXJtLiAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGEKKyAqICAgICAgQ0hFQ0tfQ09ORElUSU9OIGlzIHByb3Blcmx5IHRyZWF0ZWQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIC4KKyAqKi8KK3ZvaWQgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCwgaW50IGNoYW5uZWwpCisKKworLyoqCisgKiBzY3NpX3NldF9kZXZpY2UgLSBwbGFjZSBkZXZpY2UgcmVmZXJlbmNlIGluIGhvc3Qgc3RydWN0dXJlCisgKiBAc2hvc3Q6IGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnN0YW5jZQorICogQHBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIGluc3RhbmNlIHRvIGFzc2lnbgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCAuCisgKiovCit2b2lkIHNjc2lfc2V0X2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hvc3QsIHN0cnVjdCBkZXZpY2UgKiBkZXYpCisKKworLyoqCisgKiBzY3NpX3RvX3BjaV9kbWFfZGlyIC0gY29udmVydCBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZyB0byBQQ0kKKyAqIEBzY3NpX2RhdGFfZGlyZWN0aW9uOiBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZworICoKKyAqICAgICAgUmV0dXJucyBETUFfVE9fREVWSUNFIGdpdmVuIFNDU0lfREFUQV9XUklURSwKKyAqICAgICAgICAgICAgICBETUFfRlJPTV9ERVZJQ0UgZ2l2ZW4gU0NTSV9EQVRBX1JFQUQKKyAqICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCBnaXZlbiBTQ1NJX0RBVEFfVU5LTk9XTgorICogICAgICAgICAgICAgIGVsc2UgcmV0dXJucyBETUFfTk9ORQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogVGhlIFNDU0kgc3Vic3lzdGVtIG5vdyB1c2VzIHRoZSBzYW1lIHZhbHVlcyBmb3IgdGhlc2UKKyAqICAgICAgY29uc3RhbnRzIGFzIHRoZSBQQ0kgc3Vic3lzdGVtIHNvIHRoaXMgZnVuY3Rpb24gaXMgYSBub3AuCisgKiAgICAgIFRoZSByZWNvbW1lbmRhdGlvbiBpcyBub3QgdG8gdXNlIHRoaXMgY29udmVyc2lvbiBmdW5jdGlvbiBhbnltb3JlCisgKiAgICAgIChpbiB0aGUgMi42IGtlcm5lbCBzZXJpZXMpIGFzIGl0IGlzIG5vdCBuZWVkZWQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaS5oIC4KKyAqKi8KK2ludCBzY3NpX3RvX3BjaV9kbWFfZGlyKHVuc2lnbmVkIGNoYXIgc2NzaV9kYXRhX2RpcmVjdGlvbikKKworCisvKioKKyAqIHNjc2lfdG9fc2J1c19kbWFfZGlyIC0gY29udmVydCBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZyB0byBTQlVTCisgKiBAc2NzaV9kYXRhX2RpcmVjdGlvbjogU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcKKyAqCisgKiAgICAgIFJldHVybnMgRE1BX1RPX0RFVklDRSBnaXZlbiBTQ1NJX0RBVEFfV1JJVEUsCisgKiAgICAgICAgICAgICAgRlJPTV9ERVZJQ0UgZ2l2ZW4gU0NTSV9EQVRBX1JFQUQKKyAqICAgICAgICAgICAgICBETUFfQklESVJFQ1RJT05BTCBnaXZlbiBTQ1NJX0RBVEFfVU5LTk9XTgorICogICAgICAgICAgICAgIGVsc2UgcmV0dXJucyBETUFfTk9ORQorICoKKyAqICAgICAgTm90ZXM6IFRoZSBTQ1NJIHN1YnN5c3RlbSBub3cgdXNlcyB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZXNlCisgKiAgICAgIGNvbnN0YW50cyBhcyB0aGUgU0JVUyBzdWJzeXN0ZW0gc28gdGhpcyBmdW5jdGlvbiBpcyBhIG5vcC4KKyAqICAgICAgVGhlIHJlY29tbWVuZGF0aW9uIGlzIG5vdCB0byB1c2UgdGhpcyBjb252ZXJzaW9uIGZ1bmN0aW9uIGFueW1vcmUKKyAqICAgICAgKGluIHRoZSAyLjYga2VybmVsIHNlcmllcykgYXMgaXQgaXMgbm90IG5lZWRlZC4KKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuaCAuCisgKiovCitpbnQgc2NzaV90b19zYnVzX2RtYV9kaXIodW5zaWduZWQgY2hhciBzY3NpX2RhdGFfZGlyZWN0aW9uKQorCisKKy8qKgorICogc2NzaV90cmFja19xdWV1ZV9mdWxsIC0gdHJhY2sgc3VjY2Vzc2l2ZSBRVUVVRV9GVUxMIGV2ZW50cyBvbiBnaXZlbgorICogICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIGRldGVybWluZSBpZiBhbmQgd2hlbiB0aGVyZSBpcyBhIG5lZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIGFkanVzdCB0aGUgcXVldWUgZGVwdGggb24gdGhlIGRldmljZS4KKyAqIEBzZGV2OiAgcG9pbnRlciB0byBTQ1NJIGRldmljZSBpbnN0YW5jZQorICogQGRlcHRoOiBDdXJyZW50IG51bWJlciBvZiBvdXRzdGFuZGluZyBTQ1NJIGNvbW1hbmRzIG9uIHRoaXMgZGV2aWNlLAorICogICAgICAgICBub3QgY291bnRpbmcgdGhlIG9uZSByZXR1cm5lZCBhcyBRVUVVRV9GVUxMLgorICoKKyAqICAgICAgUmV0dXJucyAwICAtIG5vIGNoYW5nZSBuZWVkZWQKKyAqICAgICAgICAgICAgICA+MCAtIGFkanVzdCBxdWV1ZSBkZXB0aCB0byB0aGlzIG5ldyBkZXB0aAorICogICAgICAgICAgICAgIC0xIC0gZHJvcCBiYWNrIHRvIHVudGFnZ2VkIG9wZXJhdGlvbiB1c2luZyBob3N0LT5jbWRfcGVyX2x1bgorICogICAgICAgICAgICAgICAgICAgYXMgdGhlIHVudGFnZ2VkIGNvbW1hbmQgZGVwdGgKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IExMRHMgbWF5IGNhbGwgdGhpcyBhdCBhbnkgdGltZSBhbmQgd2Ugd2lsbCBkbyAiVGhlIFJpZ2h0CisgKiAgICAgICAgICAgICAgVGhpbmciOyBpbnRlcnJ1cHQgY29udGV4dCBzYWZlLiAKKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpLmMgLgorICoqLworaW50IHNjc2lfdHJhY2tfcXVldWVfZnVsbChTY3NpX0RldmljZSAqc2RldiwgaW50IGRlcHRoKQorCisKKy8qKgorICogc2NzaV91bmJsb2NrX3JlcXVlc3RzIC0gYWxsb3cgZnVydGhlciBjb21tYW5kcyB0byBiZSBxdWV1ZWQgdG8gZ2l2ZW4gaG9zdAorICoKKyAqIEBzaG9zdDogcG9pbnRlciB0byBob3N0IHRvIHVuYmxvY2sgY29tbWFuZHMgb24KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9saWIuYyAuCisqKi8KK3ZvaWQgc2NzaV91bmJsb2NrX3JlcXVlc3RzKHN0cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCkKKworCisvKioKKyAqIHNjc2lfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYW5kIGZyZWUgbWVtb3J5IHVzZWQgYnkgaG9zdCBpbnN0YW5jZQorICogQHNocDogICAgICAgIHBvaW50ZXIgdG8gc2NzaSBob3N0IGluc3RhbmNlIHRvIHVucmVnaXN0ZXIuCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IFNob3VsZCBub3QgYmUgaW52b2tlZCBpZiB0aGUgImhvdHBsdWcgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgbW9kZWwiIGlzIGJlaW5nIHVzZWQuIENhbGxlZCBpbnRlcm5hbGx5IGJ5IGV4aXRfdGhpc19zY3NpX2RyaXZlcigpCisgKiAgICAgIGluIHRoZSAicGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbCIuIEhlbmNlIGEgTExEIGhhcyBubyBuZWVkIHRvCisgKiAgICAgIGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jIC4KKyAqKi8KK3ZvaWQgc2NzaV91bnJlZ2lzdGVyKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworCisKK0ludGVyZmFjZSBGdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT0KK0ludGVyZmFjZSBmdW5jdGlvbnMgYXJlIHN1cHBsaWVkIChkZWZpbmVkKSBieSBMTERzIGFuZCB0aGVpciBmdW5jdGlvbgorcG9pbnRlcnMgYXJlIHBsYWNlZCBpbiBhbiBpbnN0YW5jZSBvZiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHdoaWNoCitpcyBwYXNzZWQgdG8gc2NzaV9ob3N0X2FsbG9jKCkgW29yIHNjc2lfcmVnaXN0ZXIoKSAvIGluaXRfdGhpc19zY3NpX2RyaXZlcigpXS4KK1NvbWUgYXJlIG1hbmRhdG9yeS4gSW50ZXJmYWNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZGVjbGFyZWQgc3RhdGljLiBUaGUKK2FjY2VwdGVkIGNvbnZlbnRpb24gaXMgdGhhdCBkcml2ZXIgInh5eiIgd2lsbCBkZWNsYXJlIGl0cyBzbGF2ZV9jb25maWd1cmUoKSAKK2Z1bmN0aW9uIGFzOgorICAgIHN0YXRpYyBpbnQgeHl6X3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2KTsKK2FuZCBzbyBmb3J0aCBmb3IgYWxsIGludGVyZmFjZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93LgorCitBIHBvaW50ZXIgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSAnc2xhdmVfY29uZmlndXJlJyBtZW1iZXIKK29mIGEgInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiIGluc3RhbmNlLiBBIHBvaW50ZXIgdG8gc3VjaCBhbiBpbnN0YW5jZQorc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgbWlkIGxldmVsJ3Mgc2NzaV9ob3N0X2FsbG9jKCkgW29yIHNjc2lfcmVnaXN0ZXIoKSAvCitpbml0X3RoaXNfc2NzaV9kcml2ZXIoKV0uCisKK1RoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFyZSBhbHNvIGRlc2NyaWJlZCBpbiB0aGUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCitmaWxlIGltbWVkaWF0ZWx5IGFib3ZlIHRoZWlyIGRlZmluaXRpb24gcG9pbnQgaW4gInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiLgorSW4gc29tZSBjYXNlcyBtb3JlIGRldGFpbCBpcyBnaXZlbiBpbiBzY3NpX2hvc3QuaCB0aGFuIGJlbG93LgorCitUaGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgbGlzdGVkIGJlbG93IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworU3VtbWFyeToKKyAgIGJpb3NfcGFyYW0gLSBmZXRjaCBoZWFkLCBzZWN0b3IsIGN5bGluZGVyIGluZm8gZm9yIGEgZGlzaworICAgZGV0ZWN0IC0gZGV0ZWN0cyBIQkFzIHRoaXMgZHJpdmVyIHdhbnRzIHRvIGNvbnRyb2wKKyAgIGVoX3RpbWVkX291dCAtIG5vdGlmeSB0aGUgaG9zdCB0aGF0IGEgY29tbWFuZCB0aW1lciBleHBpcmVkCisgICBlaF9hYm9ydF9oYW5kbGVyIC0gYWJvcnQgZ2l2ZW4gY29tbWFuZAorICAgZWhfYnVzX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGJ1cyByZXNldAorICAgZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGRldmljZSByZXNldAorICAgZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgaG9zdCAoaG9zdCBidXMgYWRhcHRlcikKKyAgIGVoX3N0cmF0ZWd5X2hhbmRsZXIgLSBkcml2ZXIgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIHNjc2lfdW5qYW1faG9zdCgpCisgICBpbmZvIC0gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGhvc3QKKyAgIGlvY3RsIC0gZHJpdmVyIGNhbiByZXNwb25kIHRvIGlvY3RscworICAgcHJvY19pbmZvIC0gc3VwcG9ydHMgL3Byb2Mvc2NzaS97ZHJpdmVyX25hbWV9L3tob3N0X25vfQorICAgcXVldWVjb21tYW5kIC0gcXVldWUgc2NzaSBjb21tYW5kLCBpbnZva2UgJ2RvbmUnIG9uIGNvbXBsZXRpb24KKyAgIHJlbGVhc2UgLSByZWxlYXNlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhvc3QKKyAgIHNsYXZlX2FsbG9jIC0gcHJpb3IgdG8gYW55IGNvbW1hbmRzIGJlaW5nIHNlbnQgdG8gYSBuZXcgZGV2aWNlIAorICAgc2xhdmVfY29uZmlndXJlIC0gZHJpdmVyIGZpbmUgdHVuaW5nIGZvciBnaXZlbiBkZXZpY2UgYWZ0ZXIgYXR0YWNoCisgICBzbGF2ZV9kZXN0cm95IC0gZ2l2ZW4gZGV2aWNlIGlzIGFib3V0IHRvIGJlIHNodXQgZG93bgorCisKK0RldGFpbHM6CisKKy8qKgorICogICAgICBiaW9zX3BhcmFtIC0gZmV0Y2ggaGVhZCwgc2VjdG9yLCBjeWxpbmRlciBpbmZvIGZvciBhIGRpc2sKKyAqICAgICAgQHNkZXY6IHBvaW50ZXIgdG8gc2NzaSBkZXZpY2UgY29udGV4dCAoZGVmaW5lZCBpbiAKKyAqICAgICAgICAgICAgIGluY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oKQorICogICAgICBAYmRldjogcG9pbnRlciB0byBibG9jayBkZXZpY2UgY29udGV4dCAoZGVmaW5lZCBpbiBmcy5oKQorICogICAgICBAY2FwYWNpdHk6ICBkZXZpY2Ugc2l6ZSAoaW4gNTEyIGJ5dGUgc2VjdG9ycykKKyAqICAgICAgQHBhcmFtczogdGhyZWUgZWxlbWVudCBhcnJheSB0byBwbGFjZSBvdXRwdXQ6CisgKiAgICAgICAgICAgICAgcGFyYW1zWzBdIG51bWJlciBvZiBoZWFkcyAobWF4IDI1NSkKKyAqICAgICAgICAgICAgICBwYXJhbXNbMV0gbnVtYmVyIG9mIHNlY3RvcnMgKG1heCA2MykKKyAqICAgICAgICAgICAgICBwYXJhbXNbMl0gbnVtYmVyIG9mIGN5bGluZGVycyAKKyAqCisgKiAgICAgIFJldHVybiB2YWx1ZSBpcyBpZ25vcmVkCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzIChzZCkKKyAqCisgKiAgICAgIE5vdGVzOiBhbiBhcmJpdHJhcnkgZ2VvbWV0cnkgKGJhc2VkIG9uIFJFQUQgQ0FQQUNJVFkpIGlzIHVzZWQKKyAqICAgICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQuIFRoZSBwYXJhbXMgYXJyYXkgaXMKKyAqICAgICAgcHJlLWluaXRpYWxpemVkIHdpdGggbWFkZSB1cCB2YWx1ZXMganVzdCBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gCisgKiAgICAgIGRvZXNuJ3Qgb3V0cHV0IGFueXRoaW5nLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgYmlvc19wYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgcGFyYW1zWzNdKQorCisKKy8qKgorICogICAgICBkZXRlY3QgLSBkZXRlY3RzIEhCQXMgdGhpcyBkcml2ZXIgd2FudHMgdG8gY29udHJvbAorICogICAgICBAc2h0cDogaG9zdCB0ZW1wbGF0ZSBmb3IgdGhpcyBkcml2ZXIuCisgKgorICogICAgICBSZXR1cm5zIG51bWJlciBvZiBob3N0cyB0aGlzIGRyaXZlciB3YW50cyB0byBjb250cm9sLiAwIG1lYW5zIG5vCisgKiAgICAgIHN1aXRhYmxlIGhvc3RzIGZvdW5kLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUgaGVsZAorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzIFtpbnZva2VkIGZyb20gaW5pdF90aGlzX3Njc2lfZHJpdmVyKCldCisgKgorICogICAgICBOb3RlczogRmlyc3QgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIFNDU0kgbWlkIGxldmVsIG9uIHRoaXMKKyAqICAgICAgZHJpdmVyLiBVcHBlciBsZXZlbCBkcml2ZXJzIChlLmcuIHNkKSBtYXkgbm90ICh5ZXQpIGJlIHByZXNlbnQuCisgKiAgICAgIEZvciBlYWNoIGhvc3QgZm91bmQsIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIHNjc2lfcmVnaXN0ZXIoKSAKKyAqICAgICAgW3NlZSBob3N0cy5jXS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IExMRCAocmVxdWlyZWQgaWYgInBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZSIgaXMgdXNlZCwKKyAqICAgICAgICAgICAgICAgICAgICAgICBub3QgaW52b2tlZCBpbiAiaG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlIikKKyAqKi8KKyAgICBpbnQgZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiBzaHRwKQorCisKKy8qKgorICogICAgICBlaF90aW1lZF9vdXQgLSBUaGUgdGltZXIgZm9yIHRoZSBjb21tYW5kIGhhcyBqdXN0IGZpcmVkCisgKiAgICAgIEBzY3A6IGlkZW50aWZpZXMgY29tbWFuZCB0aW1pbmcgb3V0CisgKgorICogICAgICBSZXR1cm5zOgorICoKKyAqICAgICAgRUhfSEFORExFRDogICAgICAgICAgICAgSSBmaXhlZCB0aGUgZXJyb3IsIHBsZWFzZSBjb21wbGV0ZSB0aGUgY29tbWFuZAorICogICAgICBFSF9SRVNFVF9USU1FUjogICAgICAgICBJIG5lZWQgbW9yZSB0aW1lLCByZXNldCB0aGUgdGltZXIgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIGNvdW50aW5nIGFnYWluCisgKiAgICAgIEVIX05PVF9IQU5ETEVEICAgICAgICAgIEJlZ2luIG5vcm1hbCBlcnJvciByZWNvdmVyeQorICoKKyAqCisgKiAgICAgIExvY2tzOiBOb25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogaW50ZXJydXB0CisgKgorICogICAgICBOb3RlczogVGhpcyBpcyB0byBnaXZlIHRoZSBMTEQgYW4gb3Bwb3J0dW5pdHkgdG8gZG8gbG9jYWwgcmVjb3ZlcnkuCisgKiAgICAgIFRoaXMgcmVjb3ZlcnkgaXMgbGltaXRlZCB0byBkZXRlcm1pbmluZyBpZiB0aGUgb3V0c3RhbmRpbmcgY29tbWFuZAorICogICAgICB3aWxsIGV2ZXIgY29tcGxldGUuICBZb3UgbWF5IG5vdCBhYm9ydCBhbmQgcmVzdGFydCB0aGUgY29tbWFuZCBmcm9tCisgKiAgICAgIHRoaXMgY2FsbGJhY2suCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2Fib3J0X2hhbmRsZXIgLSBhYm9ydCBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCBzY3AKKyAqICAgICAgQHNjcDogaWRlbnRpZmllcyBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqCisgKiAgICAgIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqCisgKiAgICAgIExvY2tzOiBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgaGVsZCAod2l0aCBpcnFzYXZlKSBvbiBlbnRyeSAKKyAqICAgICAgYW5kIGFzc3VtZWQgdG8gYmUgaGVsZCBvbiByZXR1cm4uCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIE5vIG90aGVyIGNvbW1hbmRzIHdpbGwgYmUKKyAqICAgICAgcXVldWVkIG9uIGN1cnJlbnQgaG9zdCBkdXJpbmcgZWguCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfYWJvcnRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwKQorCisKKy8qKgorICogICAgICBlaF9idXNfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgYnVzIHJlc2V0CisgKiAgICAgIEBzY3A6IFNDU0kgYnVzIHRoYXQgY29udGFpbnMgdGhpcyBkZXZpY2Ugc2hvdWxkIGJlIHJlc2V0CisgKgorICogICAgICBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgKHdpdGggaXJxc2F2ZSkgb24gZW50cnkgCisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2RldmljZV9yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBkZXZpY2UgcmVzZXQKKyAqICAgICAgQHNjcDogaWRlbnRpZmllcyBTQ1NJIGRldmljZSB0byBiZSByZXNldAorICoKKyAqICAgICAgUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkICh3aXRoIGlycXNhdmUpIG9uIGVudHJ5CisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2hvc3RfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGhvc3QgKGhvc3QgYnVzIGFkYXB0ZXIpCisgKiAgICAgIEBzY3A6IFNDU0kgaG9zdCB0aGF0IGNvbnRhaW5zIHRoaXMgZGV2aWNlIHNob3VsZCBiZSByZXNldAorICoKKyAqICAgICAgUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkICh3aXRoIGlycXNhdmUpIG9uIGVudHJ5CisgKiAgICAgIGFuZCBhc3N1bWVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBObyBvdGhlciBjb21tYW5kcyB3aWxsIGJlCisgKiAgICAgIHF1ZXVlZCBvbiBjdXJyZW50IGhvc3QgZHVyaW5nIGVoLiAKKyAqICAgICAgV2l0aCB0aGUgZGVmYXVsdCBlaF9zdHJhdGVneSBpbiBwbGFjZSwgaWYgbm9uZSBvZiB0aGUgX2Fib3J0XywgCisgKiAgICAgIF9kZXZpY2VfcmVzZXRfLCBfYnVzX3Jlc2V0XyBvciB0aGlzIGVoIGhhbmRsZXIgZnVuY3Rpb24gYXJlIAorICogICAgICBkZWZpbmVkIChvciB0aGV5IGFsbCByZXR1cm4gRkFJTEVEKSB0aGVuIHRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gCisgKiAgICAgIHdpbGwgYmUgc2V0IG9mZmxpbmUgd2hlbmV2ZXIgZWggaXMgaW52b2tlZC4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCkKKworCisvKioKKyAqICAgICAgZWhfc3RyYXRlZ3lfaGFuZGxlciAtIGRyaXZlciBzdXBwbGllZCBhbHRlcm5hdGUgdG8gc2NzaV91bmphbV9ob3N0KCkKKyAqICAgICAgQHNocDogaG9zdCBvbiB3aGljaCBlcnJvciBoYXMgb2NjdXJyZWQKKyAqCisgKiAgICAgIFJldHVybnMgVFJVRSBpZiBob3N0IHVuamFtbWVkLCBlbHNlIEZBTFNFLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAorICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTExEIHN1cHBsaWVkIGFsdGVybmF0ZSB0byAKKyAqICAgICAgc2NzaV91bmphbV9ob3N0KCkgZm91bmQgaW4gc2NzaV9lcnJvci5jCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfc3RyYXRlZ3lfaGFuZGxlcihzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwKQorCisKKy8qKgorICogICAgICBpbmZvIC0gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0IGdpdmVuIGhvc3Q6IGRyaXZlciBuYW1lIHBsdXMgZGF0YQorICogICAgICAgICAgICAgdG8gZGlzdGluZ3Vpc2ggZ2l2ZW4gaG9zdAorICogICAgICBAc2hwOiBob3N0IHRvIHN1cHBseSBpbmZvcm1hdGlvbiBhYm91dAorICoKKyAqICAgICAgUmV0dXJuIEFTQ0lJIG51bGwgdGVybWluYXRlZCBzdHJpbmcuIFtUaGlzIGRyaXZlciBpcyBhc3N1bWVkIHRvCisgKiAgICAgIG1hbmFnZSB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYW5kIG1haW50YWluIGl0LCB0eXBpY2FsbHkgZm9yIHRoZQorICogICAgICBsaWZldGltZSBvZiB0aGlzIGhvc3QuXQorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IE9mdGVuIHN1cHBsaWVzIFBDSSBvciBJU0EgaW5mb3JtYXRpb24gc3VjaCBhcyBJTyBhZGRyZXNzZXMKKyAqICAgICAgYW5kIGludGVycnVwdCBudW1iZXJzLiBJZiBub3Qgc3VwcGxpZWQgc3RydWN0IFNjc2lfSG9zdDo6bmFtZSB1c2VkCisgKiAgICAgIGluc3RlYWQuIEl0IGlzIGFzc3VtZWQgdGhlIHJldHVybmVkIGluZm9ybWF0aW9uIGZpdHMgb24gb25lIGxpbmUgCisgKiAgICAgIChpLmUuIGRvZXMgbm90IGluY2x1ZGVkIGVtYmVkZGVkIG5ld2xpbmVzKS4KKyAqICAgICAgVGhlIFNDU0lfSU9DVExfUFJPQkVfSE9TVCBpb2N0bCB5aWVsZHMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGlzCisgKiAgICAgIGZ1bmN0aW9uIChvciBzdHJ1Y3QgU2NzaV9Ib3N0OjpuYW1lIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiAgICAgIGF2YWlsYWJsZSkuCisgKiAgICAgIEluIGEgc2ltaWxhciBtYW5uZXIsIGluaXRfdGhpc19zY3NpX2RyaXZlcigpIG91dHB1dHMgdG8gdGhlIGNvbnNvbGUKKyAqICAgICAgZWFjaCBob3N0J3MgImluZm8iIChvciBuYW1lKSBmb3IgdGhlIGRyaXZlciBpdCBpcyByZWdpc3RlcmluZy4KKyAqICAgICAgQWxzbyBpZiBwcm9jX2luZm8oKSBpcyBub3Qgc3VwcGxpZWQsIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbgorICogICAgICBpcyB1c2VkIGluc3RlYWQuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGNvbnN0IGNoYXIgKiBpbmZvKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworLyoqCisgKiAgICAgIGlvY3RsIC0gZHJpdmVyIGNhbiByZXNwb25kIHRvIGlvY3RscworICogICAgICBAc2RwOiBkZXZpY2UgdGhhdCBpb2N0bCB3YXMgaXNzdWVkIGZvcgorICogICAgICBAY21kOiBpb2N0bCBudW1iZXIKKyAqICAgICAgQGFyZzogcG9pbnRlciB0byByZWFkIG9yIHdyaXRlIGRhdGEgZnJvbS4gU2luY2UgaXQgcG9pbnRzIHRvCisgKiAgICAgICAgICAgIHVzZXIgc3BhY2UsIHNob3VsZCB1c2UgYXBwcm9wcmlhdGUga2VybmVsIGZ1bmN0aW9ucworICogICAgICAgICAgICAoZS5nLiBjb3B5X2Zyb21fdXNlcigpICkuIEluIHRoZSBVbml4IHN0eWxlIHRoaXMgYXJndW1lbnQKKyAqICAgICAgICAgICAgY2FuIGFsc28gYmUgdmlld2VkIGFzIGFuIHVuc2lnbmVkIGxvbmcuCisgKgorICogICAgICBSZXR1cm5zIG5lZ2F0aXZlICJlcnJubyIgdmFsdWUgd2hlbiB0aGVyZSBpcyBhIHByb2JsZW0uIDAgb3IgYQorICogICAgICBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgc3VjY2VzcyBhbmQgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIgc3BhY2UuCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogVGhlIFNDU0kgc3Vic3lzdGVtIHVzZXMgYSAidHJpY2tsZSBkb3duIiBpb2N0bCBtb2RlbC4KKyAqICAgICAgVGhlIHVzZXIgaXNzdWVzIGFuIGlvY3RsKCkgYWdhaW5zdCBhbiB1cHBlciBsZXZlbCBkcml2ZXIKKyAqICAgICAgKGUuZy4gL2Rldi9zZGMpIGFuZCBpZiB0aGUgdXBwZXIgbGV2ZWwgZHJpdmVyIGRvZXNuJ3QgcmVjb2duaXplCisgKiAgICAgIHRoZSAnY21kJyB0aGVuIGl0IGlzIHBhc3NlZCB0byB0aGUgU0NTSSBtaWQgbGV2ZWwuIElmIHRoZSBTQ1NJCisgKiAgICAgIG1pZCBsZXZlbCBkb2VzIG5vdCByZWNvZ25pemUgaXQsIHRoZW4gdGhlIExMRCB0aGF0IGNvbnRyb2xzCisgKiAgICAgIHRoZSBkZXZpY2UgcmVjZWl2ZXMgdGhlIGlvY3RsLiBBY2NvcmRpbmcgdG8gcmVjZW50IFVuaXggc3RhbmRhcmRzCisgKiAgICAgIHVuc3VwcG9ydGVkIGlvY3RsKCkgJ2NtZCcgbnVtYmVycyBzaG91bGQgcmV0dXJuIC1FTk9UVFkuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBpb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCwgaW50IGNtZCwgdm9pZCAqYXJnKQorCisKKy8qKgorICogICAgICBwcm9jX2luZm8gLSBzdXBwb3J0cyAvcHJvYy9zY3NpL3tkcml2ZXJfbmFtZX0ve2hvc3Rfbm99CisgKiAgICAgIEBidWZmZXI6IGFuY2hvciBwb2ludCB0byBvdXRwdXQgdG8gKDA9PXdyaXRldG8xX3JlYWQwKSBvciBmZXRjaCBmcm9tCisgKiAgICAgICAgICAgICAgICgxPT13cml0ZXRvMV9yZWFkMCkuCisgKiAgICAgIEBzdGFydDogd2hlcmUgImludGVyZXN0aW5nIiBkYXRhIGlzIHdyaXR0ZW4gdG8uIElnbm9yZWQgd2hlbgorICogICAgICAgICAgICAgIDE9PXdyaXRldG8xX3JlYWQwLgorICogICAgICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIGJ1ZmZlciAwPT13cml0ZXRvMV9yZWFkMCBpcyBhY3R1YWxseQorICogICAgICAgICAgICAgICBpbnRlcmVzdGVkIGluLiBJZ25vcmVkIHdoZW4gMT09d3JpdGV0bzFfcmVhZDAgLgorICogICAgICBAbGVuZ3RoOiBtYXhpbXVtIChvciBhY3R1YWwpIGV4dGVudCBvZiBidWZmZXIKKyAqICAgICAgQGhvc3Rfbm86IGhvc3QgbnVtYmVyIG9mIGludGVyZXN0IChzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X25vKQorICogICAgICBAd3JpdGV0bzFfcmVhZDA6IDEgLT4gZGF0YSBjb21pbmcgZnJvbSB1c2VyIHNwYWNlIHRvd2FyZHMgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiZWNobyBzb21lX3N0cmluZyA+IC9wcm9jL3Njc2kveHl6LzIiKQorICogICAgICAgICAgICAgICAgICAgICAgIDAgLT4gdXNlciB3aGF0IGRhdGEgZnJvbSB0aGlzIGRyaXZlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gImNhdCAvcHJvYy9zY3NpL3h5ei8yIikKKyAqCisgKiAgICAgIFJldHVybnMgbGVuZ3RoIHdoZW4gMT09d3JpdGV0bzFfcmVhZDAuIE90aGVyd2lzZSBudW1iZXIgb2YgY2hhcnMKKyAqICAgICAgb3V0cHV0IHRvIGJ1ZmZlciBwYXN0IG9mZnNldC4KKyAqCisgKiAgICAgIExvY2tzOiBub25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IERyaXZlbiBmcm9tIHNjc2lfcHJvYy5jIHdoaWNoIGludGVyZmFjZXMgdG8gcHJvY19mcy4gcHJvY19mcworICogICAgICBzdXBwb3J0IGNhbiBub3cgYmUgY29uZmlndXJlZCBvdXQgb2YgdGhlIHNjc2kgc3Vic3lzdGVtLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgcHJvY19pbmZvKGNoYXIgKiBidWZmZXIsIGNoYXIgKiogc3RhcnQsIG9mZl90IG9mZnNldCwgCisgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLCBpbnQgaG9zdF9ubywgaW50IHdyaXRldG8xX3JlYWQwKQorCisKKy8qKgorICogICAgICBxdWV1ZWNvbW1hbmQgLSBxdWV1ZSBzY3NpIGNvbW1hbmQsIGludm9rZSAnZG9uZScgb24gY29tcGxldGlvbgorICogICAgICBAc2NwOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqICAgICAgQGRvbmU6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgaW52b2tlZCBvbiBjb21wbGV0aW9uCisgKgorICogICAgICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqCisgKiAgICAgIElmIHRoZXJlJ3MgYSBmYWlsdXJlLCByZXR1cm4gZWl0aGVyOgorICoKKyAqICAgICAgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIGlmIHRoZSBkZXZpY2UgcXVldWUgaXMgZnVsbCwgb3IKKyAqICAgICAgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSBpZiB0aGUgZW50aXJlIGhvc3QgcXVldWUgaXMgZnVsbAorICoKKyAqICAgICAgT24gYm90aCBvZiB0aGVzZSByZXR1cm5zLCB0aGUgbWlkLWxheWVyIHdpbGwgcmVxdWV1ZSB0aGUgSS9PCisgKgorICogICAgICAtIGlmIHRoZSByZXR1cm4gaXMgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZLCBvbmx5IHRoYXQgcGFydGljdWxhcgorICogICAgICBkZXZpY2Ugd2lsbCBiZSBwYXVzZWQsIGFuZCBpdCB3aWxsIGJlIHVucGF1c2VkIHdoZW4gYSBjb21tYW5kIHRvCisgKiAgICAgIHRoZSBkZXZpY2UgcmV0dXJucyAob3IgYWZ0ZXIgYSBicmllZiBkZWxheSBpZiB0aGVyZSBhcmUgbm8gbW9yZQorICogICAgICBvdXRzdGFuZGluZyBjb21tYW5kcyB0byBpdCkuICBDb21tYW5kcyB0byBvdGhlciBkZXZpY2VzIGNvbnRpbnVlCisgKiAgICAgIHRvIGJlIHByb2Nlc3NlZCBub3JtYWxseS4KKyAqCisgKiAgICAgIC0gaWYgdGhlIHJldHVybiBpcyBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZLCBhbGwgSS9PIHRvIHRoZSBob3N0CisgKiAgICAgIGlzIHBhdXNlZCBhbmQgd2lsbCBiZSB1bnBhdXNlZCB3aGVuIGFueSBjb21tYW5kIHJldHVybnMgZnJvbQorICogICAgICB0aGUgaG9zdCAob3IgYWZ0ZXIgYSBicmllZiBkZWxheSBpZiB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKKyAqICAgICAgY29tbWFuZHMgdG8gdGhlIGhvc3QpLgorICoKKyAqICAgICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIHF1ZXVlY29tbWFuZCwgYW55CisgKiAgICAgIG90aGVyIHJldHVybiB2YWx1ZSBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzCisgKiAgICAgIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kuCisgKgorICogICAgICBPdGhlciB0eXBlcyBvZiBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgaW1tZWRpYXRlbHkgbWF5IGJlCisgKiAgICAgIGZsYWdnZWQgYnkgc2V0dGluZyBzY3AtPnJlc3VsdCB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZSwKKyAqICAgICAgaW52b2tpbmcgdGhlICdkb25lJyBjYWxsYmFjaywgYW5kIHRoZW4gcmV0dXJuaW5nIDAgZnJvbSB0aGlzCisgKiAgICAgIGZ1bmN0aW9uLiBJZiB0aGUgY29tbWFuZCBpcyBub3QgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IChhbmQgdGhlCisgKiAgICAgIExMRCBpcyBzdGFydGluZyAob3Igd2lsbCBzdGFydCkgdGhlIGdpdmVuIGNvbW1hbmQpIHRoZW4gdGhpcworICogICAgICBmdW5jdGlvbiBzaG91bGQgcGxhY2UgMCBpbiBzY3AtPnJlc3VsdCBhbmQgcmV0dXJuIDAuCisgKgorICogICAgICBDb21tYW5kIG93bmVyc2hpcC4gIElmIHRoZSBkcml2ZXIgcmV0dXJucyB6ZXJvLCBpdCBvd25zIHRoZQorICogICAgICBjb21tYW5kIGFuZCBtdXN0IHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIGVuc3VyaW5nIHRoZSAnZG9uZScKKyAqICAgICAgY2FsbGJhY2sgaXMgZXhlY3V0ZWQuICBOb3RlOiB0aGUgZHJpdmVyIG1heSBjYWxsIGRvbmUgYmVmb3JlCisgKiAgICAgIHJldHVybmluZyB6ZXJvLCBidXQgYWZ0ZXIgaXQgaGFzIGNhbGxlZCBkb25lLCBpdCBtYXkgbm90CisgKiAgICAgIHJldHVybiBhbnkgdmFsdWUgb3RoZXIgdGhhbiB6ZXJvLiAgSWYgdGhlIGRyaXZlciBtYWtlcyBhCisgKiAgICAgIG5vbi16ZXJvIHJldHVybiwgaXQgbXVzdCBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZCdzIGRvbmUKKyAqICAgICAgY2FsbGJhY2sgYXQgYW55IHRpbWUuCisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgb24gZW50cnkgKHdpdGggImlycXNhdmUiKQorICogICAgICAgICAgICAgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgb24gcmV0dXJuLgorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBpbiBpbnRlcnJ1cHQgKHNvZnQgaXJxKSBvciBwcm9jZXNzIGNvbnRleHQKKyAqCisgKiAgICAgIE5vdGVzOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZWxhdGl2ZWx5IGZhc3QuIE5vcm1hbGx5IGl0IHdpbGwKKyAqICAgICAgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBIZW5jZSB0aGUgJ2RvbmUnIGNhbGxiYWNrIGlzIGludm9rZWQgCisgKiAgICAgIChvZnRlbiBkaXJlY3RseSBmcm9tIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUpIHNvbWUgdGltZSBhZnRlcgorICogICAgICB0aGlzIGZ1bmN0aW9uIGhhcyByZXR1cm5lZC4gSW4gc29tZSBjYXNlcyAoZS5nLiBwc2V1ZG8gYWRhcHRlciAKKyAqICAgICAgZHJpdmVycyB0aGF0IG1hbnVmYWN0dXJlIHRoZSByZXNwb25zZSB0byBhIFNDU0kgSU5RVUlSWSkKKyAqICAgICAgdGhlICdkb25lJyBjYWxsYmFjayBtYXkgYmUgaW52b2tlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorICogICAgICBJZiB0aGUgJ2RvbmUnIGNhbGxiYWNrIGlzIG5vdCBpbnZva2VkIHdpdGhpbiBhIGNlcnRhaW4gcGVyaW9kCisgKiAgICAgIHRoZSBTQ1NJIG1pZCBsZXZlbCB3aWxsIGNvbW1lbmNlIGVycm9yIHByb2Nlc3NpbmcuCisgKiAgICAgIElmIGEgc3RhdHVzIG9mIENIRUNLIENPTkRJVElPTiBpcyBwbGFjZWQgaW4gInJlc3VsdCIgd2hlbiB0aGUKKyAqICAgICAgJ2RvbmUnIGNhbGxiYWNrIGlzIGludm9rZWQsIHRoZW4gdGhlIExMRCBkcml2ZXIgc2hvdWxkIAorICogICAgICBwZXJmb3JtIGF1dG9zZW5zZSBhbmQgZmlsbCBpbiB0aGUgc3RydWN0IHNjc2lfY21uZDo6c2Vuc2VfYnVmZmVyCisgKiAgICAgIGFycmF5LiBUaGUgc2NzaV9jbW5kOjpzZW5zZV9idWZmZXIgYXJyYXkgaXMgemVyb2VkIHByaW9yIHRvCisgKiAgICAgIHRoZSBtaWQgbGV2ZWwgcXVldWluZyBhIGNvbW1hbmQgdG8gYW4gTExELgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHF1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwLCAKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQorCisKKy8qKgorICogICAgICByZWxlYXNlIC0gcmVsZWFzZSBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBob3N0CisgKiAgICAgIEBzaHA6IGhvc3QgdG8gYmUgcmVsZWFzZWQuCisgKgorICogICAgICBSZXR1cm4gdmFsdWUgaWdub3JlZCAoY291bGQgc29vbiBiZSBhIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkKS4KKyAqCisgKiAgICAgIExvY2tzOiBub25lIGhlbGQKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX21vZHVsZS5jJ3MgZXhpdF90aGlzX3Njc2lfZHJpdmVyKCkuCisgKiAgICAgIExMRCdzIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGNhbGwgCisgKiAgICAgIHNjc2lfdW5yZWdpc3RlcihzaHApIHByaW9yIHRvIHJldHVybmluZy4KKyAqICAgICAgT25seSBuZWVkZWQgZm9yIG9sZC1zdHlsZSBob3N0IHRlbXBsYXRlcy4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IExMRCAocmVxdWlyZWQgaW4gInBhc3NpdmUgaW5pdGlhbGl6YXRpb24gbW9kZWwiLAorICogICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgZGVmaW5lZCBpbiBob3RwbHVnIG1vZGVsKQorICoqLworICAgIGludCByZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworLyoqCisgKiAgICAgIHNsYXZlX2FsbG9jIC0gICBwcmlvciB0byBhbnkgY29tbWFuZHMgYmVpbmcgc2VudCB0byBhIG5ldyBkZXZpY2UgCisgKiAgICAgICAgICAgICAgICAgICAgICAoaS5lLiBqdXN0IHByaW9yIHRvIHNjYW4pIHRoaXMgY2FsbCBpcyBtYWRlCisgKiAgICAgIEBzZHA6IHBvaW50ZXIgdG8gbmV3IGRldmljZSAoYWJvdXQgdG8gYmUgc2Nhbm5lZCkKKyAqCisgKiAgICAgIFJldHVybnMgMCBpZiBvay4gQW55IG90aGVyIHJldHVybiBpcyBhc3N1bWVkIHRvIGJlIGFuIGVycm9yIGFuZAorICogICAgICB0aGUgZGV2aWNlIGlzIGlnbm9yZWQuCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogQWxsb3dzIHRoZSBkcml2ZXIgdG8gYWxsb2NhdGUgYW55IHJlc291cmNlcyBmb3IgYSBkZXZpY2UKKyAqICAgICAgcHJpb3IgdG8gaXRzIGluaXRpYWwgc2Nhbi4gVGhlIGNvcnJlc3BvbmRpbmcgc2NzaSBkZXZpY2UgbWF5IG5vdAorICogICAgICBleGlzdCBidXQgdGhlIG1pZCBsZXZlbCBpcyBqdXN0IGFib3V0IHRvIHNjYW4gZm9yIGl0IChpLmUuIHNlbmQKKyAqICAgICAgYW5kIElOUVVJUlkgY29tbWFuZCBwbHVzIC4uLikuIElmIGEgZGV2aWNlIGlzIGZvdW5kIHRoZW4KKyAqICAgICAgc2xhdmVfY29uZmlndXJlKCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgaWYgYSBkZXZpY2UgaXMgbm90IGZvdW5kCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKSBpcyBjYWxsZWQuCisgKiAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggZmlsZS4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHNsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQorCisKKy8qKgorICogICAgICBzbGF2ZV9jb25maWd1cmUgLSBkcml2ZXIgZmluZSB0dW5pbmcgZm9yIGdpdmVuIGRldmljZSBqdXN0IGFmdGVyIGl0CisgKiAgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIGZpcnN0IHNjYW5uZWQgKGkuZS4gaXQgcmVzcG9uZGVkIHRvIGFuCisgKiAgICAgICAgICAgICAgICAgICAgIElOUVVJUlkpCisgKiAgICAgIEBzZHA6IGRldmljZSB0aGF0IGhhcyBqdXN0IGJlZW4gYXR0YWNoZWQKKyAqCisgKiAgICAgIFJldHVybnMgMCBpZiBvay4gQW55IG90aGVyIHJldHVybiBpcyBhc3N1bWVkIHRvIGJlIGFuIGVycm9yIGFuZAorICogICAgICB0aGUgZGV2aWNlIGlzIHRha2VuIG9mZmxpbmUuIFtvZmZsaW5lIGRldmljZXMgd2lsbCBfbm90XyBoYXZlCisgKiAgICAgIHNsYXZlX2Rlc3Ryb3koKSBjYWxsZWQgb24gdGhlbSBzbyBjbGVhbiB1cCByZXNvdXJjZXMuXQorICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IEFsbG93cyB0aGUgZHJpdmVyIHRvIGluc3BlY3QgdGhlIHJlc3BvbnNlIHRvIHRoZSBpbml0aWFsCisgKiAgICAgIElOUVVJUlkgZG9uZSBieSB0aGUgc2Nhbm5pbmcgY29kZSBhbmQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uCisgKiAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggZmlsZS4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IHNsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKKworCisvKioKKyAqICAgICAgc2xhdmVfZGVzdHJveSAtIGdpdmVuIGRldmljZSBpcyBhYm91dCB0byBiZSBzaHV0IGRvd24uIEFsbAorICogICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHkgaGFzIGNlYXNlZCBvbiB0aGlzIGRldmljZS4KKyAqICAgICAgQHNkcDogZGV2aWNlIHRoYXQgaXMgYWJvdXQgdG8gYmUgc2h1dCBkb3duCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBNaWQgbGV2ZWwgc3RydWN0dXJlcyBmb3IgZ2l2ZW4gZGV2aWNlIGFyZSBzdGlsbCBpbiBwbGFjZQorICogICAgICBidXQgYXJlIGFib3V0IHRvIGJlIHRvcm4gZG93bi4gQW55IHBlciBkZXZpY2UgcmVzb3VyY2VzIGFsbG9jYXRlZAorICogICAgICBieSB0aGlzIGRyaXZlciBmb3IgZ2l2ZW4gZGV2aWNlIHNob3VsZCBiZSBmcmVlZCBub3cuIE5vIGZ1cnRoZXIKKyAqICAgICAgY29tbWFuZHMgd2lsbCBiZSBzZW50IGZvciB0aGlzIHNkcCBpbnN0YW5jZS4gW0hvd2V2ZXIgdGhlIGRldmljZQorICogICAgICBjb3VsZCBiZSByZS1hdHRhY2hlZCBpbiB0aGUgZnV0dXJlIGluIHdoaWNoIGNhc2UgYSBuZXcgaW5zdGFuY2UKKyAqICAgICAgb2Ygc3RydWN0IHNjc2lfZGV2aWNlIHdvdWxkIGJlIHN1cHBsaWVkIGJ5IGZ1dHVyZSBzbGF2ZV9hbGxvYygpCisgKiAgICAgIGFuZCBzbGF2ZV9jb25maWd1cmUoKSBjYWxscy5dCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIHZvaWQgc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKKworCisKK0RhdGEgU3RydWN0dXJlcworPT09PT09PT09PT09PT09CitzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBvbmUgInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiIGluc3RhbmNlIHBlciBMTEQgKioqLiBJdCBpcwordHlwaWNhbGx5IGluaXRpYWxpemVkIGFzIGEgZmlsZSBzY29wZSBzdGF0aWMgaW4gYSBkcml2ZXIncyBoZWFkZXIgZmlsZS4gVGhhdAord2F5IG1lbWJlcnMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2lsbCBiZSBzZXQgdG8gMCBvciBOVUxMLgorTWVtYmVyIG9mIGludGVyZXN0OgorICAgIG5hbWUgICAgICAgICAtIG5hbWUgb2YgZHJpdmVyIChtYXkgY29udGFpbiBzcGFjZXMsIHBsZWFzZSBsaW1pdCB0bworICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiA4MCBjaGFyYWN0ZXJzKQorICAgIHByb2NfbmFtZSAgICAtIG5hbWUgdXNlZCBpbiAiL3Byb2Mvc2NzaS88cHJvY19uYW1lPi88aG9zdF9ubz4iIGFuZAorICAgICAgICAgICAgICAgICAgIGJ5IHN5c2ZzIGluIG9uZSBvZiBpdHMgImRyaXZlcnMiIGRpcmVjdG9yaWVzLiBIZW5jZQorICAgICAgICAgICAgICAgICAgICJwcm9jX25hbWUiIHNob3VsZCBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyBhY2NlcHRhYmxlCisgICAgICAgICAgICAgICAgICAgdG8gYSBVbml4IGZpbGUgbmFtZS4KKyAgICgqcXVldWVjb21tYW5kKSgpIC0gcHJpbWFyeSBjYWxsYmFjayB0aGF0IHRoZSBtaWQgbGV2ZWwgdXNlcyB0byBpbmplY3QKKyAgICAgICAgICAgICAgICAgICBTQ1NJIGNvbW1hbmRzIGludG8gYW4gTExELgorVGhlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCBjb21tZW50ZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisKKyoqKiBJbiBleHRyZW1lIHNpdHVhdGlvbnMgYSBzaW5nbGUgZHJpdmVyIG1heSBoYXZlIHNldmVyYWwgaW5zdGFuY2VzCisgICAgaWYgaXQgY29udHJvbHMgc2V2ZXJhbCBkaWZmZXJlbnQgY2xhc3NlcyBvZiBoYXJkd2FyZSAoZS5nLiBhbiBMTEQKKyAgICB0aGF0IGhhbmRsZXMgYm90aCBJU0EgYW5kIFBDSSBjYXJkcyBhbmQgaGFzIGEgc2VwYXJhdGUgaW5zdGFuY2Ugb2YKKyAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGZvciBlYWNoIGNsYXNzKS4KKworc3RydWN0IFNjc2lfSG9zdAorLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgaXMgb25lIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UgcGVyIGhvc3QgKEhCQSkgdGhhdCBhbiBMTEQKK2NvbnRyb2xzLiBUaGUgc3RydWN0IFNjc2lfSG9zdCBzdHJ1Y3R1cmUgaGFzIG1hbnkgbWVtYmVycyBpbiBjb21tb24KK3dpdGggInN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUiLiBXaGVuIGEgbmV3IHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UKK2lzIGNyZWF0ZWQgKGluIHNjc2lfaG9zdF9hbGxvYygpIGluIGhvc3RzLmMpIHRob3NlIGNvbW1vbiBtZW1iZXJzIGFyZQoraW5pdGlhbGl6ZWQgZnJvbSB0aGUgZHJpdmVyJ3Mgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpbnN0YW5jZS4gTWVtYmVycworb2YgaW50ZXJlc3Q6CisgICAgaG9zdF9ubyAgICAgIC0gc3lzdGVtIHdpZGUgdW5pcXVlIG51bWJlciB0aGF0IGlzIHVzZWQgZm9yIGlkZW50aWZ5aW5nCisgICAgICAgICAgICAgICAgICAgdGhpcyBob3N0LiBJc3N1ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZyb20gMC4KKyAgICBjYW5fcXVldWUgICAgLSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwOyBkbyBub3Qgc2VuZCBtb3JlIHRoYW4gY2FuX3F1ZXVlCisgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgdG8gdGhlIGFkYXB0ZXIuCisgICAgdGhpc19pZCAgICAgIC0gc2NzaSBpZCBvZiBob3N0IChzY3NpIGluaXRpYXRvcikgb3IgLTEgaWYgbm90IGtub3duCisgICAgc2dfdGFibGVzaXplIC0gbWF4aW11bSBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyBhbGxvd2VkIGJ5IGhvc3QuCisgICAgICAgICAgICAgICAgICAgMCBpbXBsaWVzIHNjYXR0ZXIgZ2F0aGVyIG5vdCBzdXBwb3J0ZWQgYnkgaG9zdAorICAgIG1heF9zZWN0b3JzICAtIG1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgKHVzdWFsbHkgNTEyIGJ5dGVzKSBhbGxvd2VkCisgICAgICAgICAgICAgICAgICAgaW4gYSBzaW5nbGUgU0NTSSBjb21tYW5kLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAwIGxlYWRzCisgICAgICAgICAgICAgICAgICAgdG8gYSBzZXR0aW5nIG9mIFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUyAoZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgIHNjc2lfaG9zdC5oKSB3aGljaCBpcyBjdXJyZW50bHkgc2V0IHRvIDEwMjQuIFNvIGZvciBhCisgICAgICAgICAgICAgICAgICAgZGlzayB0aGUgbWF4aW11bSB0cmFuc2ZlciBzaXplIGlzIDUxMiBLQiB3aGVuIG1heF9zZWN0b3JzCisgICAgICAgICAgICAgICAgICAgaXMgbm90IGRlZmluZWQuIE5vdGUgdGhhdCB0aGlzIHNpemUgbWF5IG5vdCBiZSBzdWZmaWNpZW50CisgICAgICAgICAgICAgICAgICAgZm9yIGRpc2sgZmlybXdhcmUgdXBsb2Fkcy4KKyAgICBjbWRfcGVyX2x1biAgLSBtYXhpbXVtIG51bWJlciBvZiBjb21tYW5kcyB0aGF0IGNhbiBiZSBxdWV1ZWQgb24gZGV2aWNlcworICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWQgYnkgdGhlIGhvc3QuIE92ZXJyaWRkZW4gYnkgTExEIGNhbGxzIHRvCisgICAgICAgICAgICAgICAgICAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKS4KKyAgICB1bmNoZWNrZWRfaXNhX2RtYSAtIDE9Pm9ubHkgdXNlIGJvdHRvbSAxNiBNQiBvZiByYW0gKElTQSBETUEgYWRkcmVzc2luZworICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uKSwgMD0+Y2FuIHVzZSBmdWxsIDMyIGJpdCAob3IgYmV0dGVyKSBETUEKKyAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHNwYWNlCisgICAgdXNlX2NsdXN0ZXJpbmcgLSAxPT5TQ1NJIGNvbW1hbmRzIGluIG1pZCBsZXZlbCdzIHF1ZXVlIGNhbiBiZSBtZXJnZWQsCisgICAgICAgICAgICAgICAgICAgICAwPT5kaXNhbGxvdyBTQ1NJIGNvbW1hbmQgbWVyZ2luZworICAgIGhvc3R0ICAgICAgICAtIHBvaW50ZXIgdG8gZHJpdmVyJ3Mgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBmcm9tIHdoaWNoCisgICAgICAgICAgICAgICAgICAgdGhpcyBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlIHdhcyBzcGF3bmVkCisgICAgaG9zdHQtPnByb2NfbmFtZSAgLSBuYW1lIG9mIExMRC4gVGhpcyBpcyB0aGUgZHJpdmVyIG5hbWUgdGhhdCBzeXNmcyB1c2VzCisgICAgdHJhbnNwb3J0dCAgIC0gcG9pbnRlciB0byBkcml2ZXIncyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAoaWYgYW55KS4gRkMgYW5kIFNQSSB0cmFuc3BvcnRzIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgc2hfbGlzdCAgICAgIC0gYSBkb3VibGUgbGlua2VkIGxpc3Qgb2YgcG9pbnRlcnMgdG8gYWxsIHN0cnVjdCBTY3NpX0hvc3QKKyAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgKGN1cnJlbnRseSBvcmRlcmVkIGJ5IGFzY2VuZGluZyBob3N0X25vKQorICAgIG15X2RldmljZXMgICAtIGEgZG91YmxlIGxpbmtlZCBsaXN0IG9mIHBvaW50ZXJzIHRvIHN0cnVjdCBzY3NpX2RldmljZSAKKyAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBob3N0LgorICAgIGhvc3RkYXRhWzBdICAtIGFyZWEgcmVzZXJ2ZWQgZm9yIExMRCBhdCBlbmQgb2Ygc3RydWN0IFNjc2lfSG9zdC4gU2l6ZQorICAgICAgICAgICAgICAgICAgIGlzIHNldCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50IChuYW1lZCAneHRyX2J5dGVzJykgdG8KKyAgICAgICAgICAgICAgICAgICBzY3NpX2hvc3RfYWxsb2MoKSBvciBzY3NpX3JlZ2lzdGVyKCkuCisKK1RoZSBzY3NpX2hvc3Qgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisKK3N0cnVjdCBzY3NpX2RldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmFsbHksIHRoZXJlIGlzIG9uZSBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdHVyZSBmb3IgZWFjaCBTQ1NJIGxvZ2ljYWwgdW5pdAorb24gYSBob3N0LiBTY3NpIGRldmljZXMgY29ubmVjdGVkIHRvIGEgaG9zdCBhcmUgdW5pcXVlbHkgaWRlbnRpZmllZCBieSBhCitjaGFubmVsIG51bWJlciwgdGFyZ2V0IGlkIGFuZCBsb2dpY2FsIHVuaXQgbnVtYmVyIChsdW4pLgorVGhlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIGluY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisKK3N0cnVjdCBzY3NpX2NtbmQKKy0tLS0tLS0tLS0tLS0tLS0KK0luc3RhbmNlcyBvZiB0aGlzIHN0cnVjdHVyZSBjb252ZXkgU0NTSSBjb21tYW5kcyB0byB0aGUgTExEIGFuZCByZXNwb25zZXMKK2JhY2sgdG8gdGhlIG1pZCBsZXZlbC4gVGhlIFNDU0kgbWlkIGxldmVsIHdpbGwgZW5zdXJlIHRoYXQgbm8gbW9yZSBTQ1NJCitjb21tYW5kcyBiZWNvbWUgcXVldWVkIGFnYWluc3QgdGhlIExMRCB0aGFuIGFyZSBpbmRpY2F0ZWQgYnkKK3Njc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkgKG9yIHN0cnVjdCBTY3NpX0hvc3Q6OmNtZF9wZXJfbHVuKS4gVGhlcmUgd2lsbAorYmUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIHN0cnVjdCBzY3NpX2NtbmQgYXZhaWxhYmxlIGZvciBlYWNoIFNDU0kgZGV2aWNlLgorTWVtYmVycyBvZiBpbnRlcmVzdDoKKyAgICBjbW5kICAgICAgICAgLSBhcnJheSBjb250YWluaW5nIFNDU0kgY29tbWFuZAorICAgIGNtbmRfbGVuICAgICAtIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIFNDU0kgY29tbWFuZAorICAgIHNjX2RhdGFfZGlyZWN0aW9uIC0gZGlyZWN0aW9uIG9mIGRhdGEgdHJhbnNmZXIgaW4gZGF0YSBwaGFzZS4gU2VlCisgICAgICAgICAgICAgICAgImVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIiBpbiBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKyAgICByZXF1ZXN0X2J1ZmZsZW4gLSBudW1iZXIgb2YgZGF0YSBieXRlcyB0byB0cmFuc2ZlciAoMCBpZiBubyBkYXRhIHBoYXNlKQorICAgIHVzZV9zZyAgICAgICAtID09MCAtPiBubyBzY2F0dGVyIGdhdGhlciBsaXN0LCBoZW5jZSB0cmFuc2ZlciBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvL2Zyb20gcmVxdWVzdF9idWZmZXIKKyAgICAgICAgICAgICAgICAgLSA+MCAtPiAgc2NhdHRlciBnYXRoZXIgbGlzdCAoYWN0dWFsbHkgYW4gYXJyYXkpIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfYnVmZmVyIHdpdGggdXNlX3NnIGVsZW1lbnRzCisgICAgcmVxdWVzdF9idWZmZXIgLSBlaXRoZXIgY29udGFpbnMgZGF0YSBidWZmZXIgb3Igc2NhdHRlciBnYXRoZXIgbGlzdAorICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5nIG9mIHVzZV9zZy4gU2NhdHRlciBnYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIGFyZSBkZWZpbmVkIGJ5ICdzdHJ1Y3Qgc2NhdHRlcmxpc3QnIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICBpbiBpbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIC4KKyAgICBkb25lICAgICAgICAgLSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgc2hvdWxkIGJlIGludm9rZWQgYnkgTExEIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgU0NTSSBjb21tYW5kIGlzIGNvbXBsZXRlZCAoc3VjY2Vzc2Z1bGx5IG9yIG90aGVyd2lzZSkuCisgICAgICAgICAgICAgICAgICAgU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGFuIExMRCBpZiB0aGUgTExEIGhhcyBhY2NlcHRlZAorICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIChpLmUuIHF1ZXVlY29tbWFuZCgpIHJldHVybmVkIG9yIHdpbGwgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgMCkuIFRoZSBMTEQgbWF5IGludm9rZSAnZG9uZScgIHByaW9yIHRvIHF1ZXVlY29tbWFuZCgpCisgICAgICAgICAgICAgICAgICAgZmluaXNoaW5nLgorICAgIHJlc3VsdCAgICAgICAtIHNob3VsZCBiZSBzZXQgYnkgTExEIHByaW9yIHRvIGNhbGxpbmcgJ2RvbmUnLiBBIHZhbHVlCisgICAgICAgICAgICAgICAgICAgb2YgMCBpbXBsaWVzIGEgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBjb21tYW5kIChhbmQgYWxsCisgICAgICAgICAgICAgICAgICAgZGF0YSAoaWYgYW55KSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCB0byBvciBmcm9tIHRoZSBTQ1NJCisgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZSkuICdyZXN1bHQnIGlzIGEgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgdGhhdAorICAgICAgICAgICAgICAgICAgIGNhbiBiZSB2aWV3ZWQgYXMgNCByZWxhdGVkIGJ5dGVzLiBUaGUgU0NTSSBzdGF0dXMgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICBpbiB0aGUgTFNCLiBTZWUgaW5jbHVkZS9zY3NpL3Njc2kuaCBzdGF0dXNfYnl0ZSgpLAorICAgICAgICAgICAgICAgICAgIG1zZ19ieXRlKCksIGhvc3RfYnl0ZSgpIGFuZCBkcml2ZXJfYnl0ZSgpIG1hY3JvcyBhbmQKKyAgICAgICAgICAgICAgICAgICByZWxhdGVkIGNvbnN0YW50cy4KKyAgICBzZW5zZV9idWZmZXIgLSBhbiBhcnJheSAobWF4aW11bSBzaXplOiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgYnl0ZXMpIHRoYXQKKyAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgd3JpdHRlbiB3aGVuIHRoZSBTQ1NJIHN0YXR1cyAoTFNCIG9mICdyZXN1bHQnKQorICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byBDSEVDS19DT05ESVRJT04gKDIpLiBXaGVuIENIRUNLX0NPTkRJVElPTiBpcworICAgICAgICAgICAgICAgICAgIHNldCwgaWYgdGhlIHRvcCBuaWJibGUgb2Ygc2Vuc2VfYnVmZmVyWzBdIGhhcyB0aGUgdmFsdWUgNworICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIG1pZCBsZXZlbCB3aWxsIGFzc3VtZSB0aGUgc2Vuc2VfYnVmZmVyIGFycmF5CisgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYSB2YWxpZCBTQ1NJIHNlbnNlIGJ1ZmZlcjsgb3RoZXJ3aXNlIHRoZSBtaWQKKyAgICAgICAgICAgICAgICAgICBsZXZlbCB3aWxsIGlzc3VlIGEgUkVRVUVTVF9TRU5TRSBTQ1NJIGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICByZXRyaWV2ZSB0aGUgc2Vuc2UgYnVmZmVyLiBUaGUgbGF0dGVyIHN0cmF0ZWd5IGlzIGVycm9yCisgICAgICAgICAgICAgICAgICAgcHJvbmUgaW4gdGhlIHByZXNlbmNlIG9mIGNvbW1hbmQgcXVldWluZyBzbyB0aGUgTExEIHNob3VsZAorICAgICAgICAgICAgICAgICAgIGFsd2F5cyAiYXV0by1zZW5zZSIuCisgICAgZGV2aWNlICAgICAgIC0gcG9pbnRlciB0byBzY3NpX2RldmljZSBvYmplY3QgdGhhdCB0aGlzIGNvbW1hbmQgaXMKKyAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGguCisgICAgcmVzaWQgICAgICAgIC0gYW4gTExEIHNob3VsZCBzZXQgdGhpcyBzaWduZWQgaW50ZWdlciB0byB0aGUgcmVxdWVzdGVkCisgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgbGVuZ3RoIChpLmUuICdyZXF1ZXN0X2J1ZmZsZW4nKSBsZXNzIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICBvZiBieXRlcyB0aGF0IGFyZSBhY3R1YWxseSB0cmFuc2ZlcnJlZC4gJ3Jlc2lkJyBpcworICAgICAgICAgICAgICAgICAgIHByZXNldCB0byAwIHNvIGFuIExMRCBjYW4gaWdub3JlIGl0IGlmIGl0IGNhbm5vdCBkZXRlY3QKKyAgICAgICAgICAgICAgICAgICB1bmRlcnJ1bnMgKG92ZXJydW5zIHNob3VsZCBiZSByYXJlKS4gSWYgcG9zc2libGUgYW4gTExECisgICAgICAgICAgICAgICAgICAgc2hvdWxkIHNldCAncmVzaWQnIHByaW9yIHRvIGludm9raW5nICdkb25lJy4gVGhlIG1vc3QKKyAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZyBjYXNlIGlzIGRhdGEgdHJhbnNmZXJzIGZyb20gYSBTQ1NJIHRhcmdldAorICAgICAgICAgICAgICAgICAgIGRldmljZSBkZXZpY2UgKGkuZS4gUkVBRHMpIHRoYXQgdW5kZXJydW4uIAorICAgIHVuZGVyZmxvdyAgICAtIExMRCBzaG91bGQgcGxhY2UgKERJRF9FUlJPUiA8PCAxNikgaW4gJ3Jlc3VsdCcgaWYKKyAgICAgICAgICAgICAgICAgICBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGlzIGxlc3MgdGhhbiB0aGlzCisgICAgICAgICAgICAgICAgICAgZmlndXJlLiBOb3QgbWFueSBMTERzIGltcGxlbWVudCB0aGlzIGNoZWNrIGFuZCBzb21lIHRoYXQKKyAgICAgICAgICAgICAgICAgICBkbyBqdXN0IG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIHRvIHRoZSBsb2cgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICByZXBvcnQgYSBESURfRVJST1IuIEJldHRlciBmb3IgYW4gTExEIHRvIGltcGxlbWVudAorICAgICAgICAgICAgICAgICAgICdyZXNpZCcuCisKK1RoZSBzY3NpX2NtbmQgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCisKKworTG9ja3MKKz09PT09CitFYWNoIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2UgaGFzIGEgc3Bpbl9sb2NrIGNhbGxlZCBzdHJ1Y3QgCitTY3NpX0hvc3Q6OmRlZmF1bHRfbG9jayB3aGljaCBpcyBpbml0aWFsaXplZCBpbiBzY3NpX2hvc3RfYWxsb2MoKSBbZm91bmQgaW4gCitob3N0cy5jXS4gV2l0aGluIHRoZSBzYW1lIGZ1bmN0aW9uIHRoZSBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgcG9pbnRlcgoraXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgYXQgZGVmYXVsdF9sb2NrIHdpdGggdGhlIHNjc2lfYXNzaWduX2xvY2soKSBmdW5jdGlvbi4KK1RoZXJlYWZ0ZXIgbG9jayBhbmQgdW5sb2NrIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZSBtaWQgbGV2ZWwgdXNlIHRoZQorc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIHBvaW50ZXIuCisKK0xMRHMgY2FuIG92ZXJyaWRlIHRoZSB1c2Ugb2Ygc3RydWN0IFNjc2lfSG9zdDo6ZGVmYXVsdF9sb2NrIGJ5Cit1c2luZyBzY3NpX2Fzc2lnbl9sb2NrKCkuIFRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSB0byBkbyB0aGlzIHdvdWxkCitiZSBpbiB0aGUgZGV0ZWN0KCkgZnVuY3Rpb24gYWZ0ZXIgaXQgaGFzIGludm9rZWQgc2NzaV9yZWdpc3RlcigpLiBJdAorY291bGQgYmUgcmVwbGFjZWQgYnkgYSBjb2Fyc2VyIGdyYWluIGxvY2sgKGUuZy4gcGVyIGRyaXZlcikgb3IgYQorbG9jayBvZiBlcXVhbCBncmFudWxhcml0eSAoaS5lLiBwZXIgaG9zdCkuIFVzaW5nIGZpbmVyIGdyYWluIGxvY2tzIAorKGUuZy4gcGVyIFNDU0kgZGV2aWNlKSBtYXkgYmUgcG9zc2libGUgYnkganVnZ2xpbmcgbG9ja3MgaW4KK3F1ZXVlY29tbWFuZCgpLgorCitBdXRvc2Vuc2UKKz09PT09PT09PQorQXV0b3NlbnNlIChvciBhdXRvLXNlbnNlKSBpcyBkZWZpbmVkIGluIHRoZSBTQU0tMiBkb2N1bWVudCBhcyAidGhlCithdXRvbWF0aWMgcmV0dXJuIG9mIHNlbnNlIGRhdGEgdG8gdGhlIGFwcGxpY2F0aW9uIGNsaWVudCBjb2luY2lkZW50Cit3aXRoIHRoZSBjb21wbGV0aW9uIG9mIGEgU0NTSSBjb21tYW5kIiB3aGVuIGEgc3RhdHVzIG9mIENIRUNLIENPTkRJVElPTgorb2NjdXJzLiBMTERzIHNob3VsZCBwZXJmb3JtIGF1dG9zZW5zZS4gVGhpcyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBMTEQKK2RldGVjdHMgYSBDSEVDSyBDT05ESVRJT04gc3RhdHVzIGJ5IGVpdGhlcjogCisgICAgYSkgaW5zdHJ1Y3RpbmcgdGhlIFNDU0kgcHJvdG9jb2wgKGUuZy4gU0NTSSBQYXJhbGxlbCBJbnRlcmZhY2UgKFNQSSkpCisgICAgICAgdG8gcGVyZm9ybSBhbiBleHRyYSBkYXRhIGluIHBoYXNlIG9uIHN1Y2ggcmVzcG9uc2VzCisgICAgYikgb3IsIHRoZSBMTEQgaXNzdWluZyBhIFJFUVVFU1QgU0VOU0UgY29tbWFuZCBpdHNlbGYKKworRWl0aGVyIHdheSwgd2hlbiBhIHN0YXR1cyBvZiBDSEVDSyBDT05ESVRJT04gaXMgZGV0ZWN0ZWQsIHRoZSBtaWQgbGV2ZWwKK2RlY2lkZXMgd2hldGhlciB0aGUgTExEIGhhcyBwZXJmb3JtZWQgYXV0b3NlbnNlIGJ5IGNoZWNraW5nIHN0cnVjdCAKK3Njc2lfY21uZDo6c2Vuc2VfYnVmZmVyWzBdIC4gSWYgdGhpcyBieXRlIGhhcyBhbiB1cHBlciBuaWJibGUgb2YgNyAob3IgMHhmKQordGhlbiBhdXRvc2Vuc2UgaXMgYXNzdW1lZCB0byBoYXZlIHRha2VuIHBsYWNlLiBJZiBpdCBoYXMgYW5vdGhlciB2YWx1ZSAoYW5kCit0aGlzIGJ5dGUgaXMgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgZWFjaCBjb21tYW5kKSB0aGVuIHRoZSBtaWQgbGV2ZWwgd2lsbAoraXNzdWUgYSBSRVFVRVNUIFNFTlNFIGNvbW1hbmQuCisKK0luIHRoZSBwcmVzZW5jZSBvZiBxdWV1ZWQgY29tbWFuZHMgdGhlICJuZXh1cyIgdGhhdCBtYWludGFpbnMgc2Vuc2UKK2J1ZmZlciBkYXRhIGZyb20gdGhlIGNvbW1hbmQgdGhhdCBmYWlsZWQgdW50aWwgYSBmb2xsb3dpbmcgUkVRVUVTVCBTRU5TRQorbWF5IGdldCBvdXQgb2Ygc3luY2hyb25pemF0aW9uLiBUaGlzIGlzIHdoeSBpdCBpcyBiZXN0IGZvciB0aGUgTExECit0byBwZXJmb3JtIGF1dG9zZW5zZS4KKworCitDaGFuZ2VzIHNpbmNlIGxrIDIuNCBzZXJpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQoraW9fcmVxdWVzdF9sb2NrIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHNldmVyYWwgZmluZXIgZ3JhaW5lZCBsb2Nrcy4gVGhlIGxvY2sgCityZWxldmFudCB0byBMTERzIGlzIHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBhbmQgdGhlcmUgaXMKK29uZSBwZXIgU0NTSSBob3N0LgorCitUaGUgb2xkZXIgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgbWVhbnMgdGhlCitMTEQgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhYm9ydCgpIGFuZCByZXNldCgpIGhhdmUgYmVlbiByZW1vdmVkLgorVGhlIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGU6OnVzZV9uZXdfZWhfY29kZSBmbGFnIGhhcyBiZWVuIHJlbW92ZWQuCisKK0luIHRoZSAyLjQgc2VyaWVzIHRoZSBTQ1NJIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9ucyB3ZXJlIAorYWdncmVnYXRlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0aW9ucyBmcm9tIGFsbCBvdGhlciBMaW51eCAKK3N1YnN5c3RlbXMgaW4gdGhlIERvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAgZmlsZS4gSW4gdGhlIDIuNiBzZXJpZXMsIAordGhlIFNDU0kgc3Vic3lzdGVtIG5vdyBoYXMgaXRzIG93biAobXVjaCBzbWFsbGVyKSBkcml2ZXJzL3Njc2kvS2NvbmZpZworZmlsZSB0aGF0IGNvbnRhaW5zIGJvdGggY29uZmlndXJhdGlvbiBhbmQgaGVscCBpbmZvcm1hdGlvbi4KKworc3RydWN0IFNIVCBoYXMgYmVlbiByZW5hbWVkIHRvIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUuCisKK0FkZGl0aW9uIG9mIHRoZSAiaG90cGx1ZyBpbml0aWFsaXphdGlvbiBtb2RlbCIgYW5kIG1hbnkgZXh0cmEgZnVuY3Rpb25zCit0byBzdXBwb3J0IGl0LgorCisKK0NyZWRpdHMKKz09PT09PT0KK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBkb2N1bWVudDoKKyAgICAgICAgTWlrZSBBbmRlcnNvbiA8YW5kbWlrZSBhdCB1cyBkb3QgaWJtIGRvdCBjb20+CisgICAgICAgIEphbWVzIEJvdHRvbWxleSA8SmFtZXMgZG90IEJvdHRvbWxleSBhdCBzdGVlbGV5ZSBkb3QgY29tPiAKKyAgICAgICAgUGF0cmljayBNYW5zZmllbGQgPHBhdG1hbnMgYXQgdXMgZG90IGlibSBkb3QgY29tPiAKKyAgICAgICAgQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaCBhdCBpbmZyYWRlYWQgZG90IG9yZz4KKyAgICAgICAgRG91ZyBMZWRmb3JkIDxkbGVkZm9yZCBhdCByZWRoYXQgZG90IGNvbT4KKyAgICAgICAgQW5kcmllcyBCcm91d2VyIDxBbmRyaWVzIGRvdCBCcm91d2VyIGF0IGN3aSBkb3Qgbmw+CisgICAgICAgIFJhbmR5IER1bmxhcCA8cmRkdW5sYXAgYXQgb3NkbCBkb3Qgb3JnPgorICAgICAgICBBbGFuIFN0ZXJuIDxzdGVybiBhdCByb3dsYW5kIGRvdCBoYXJ2YXJkIGRvdCBlZHU+CisKKworRG91Z2xhcyBHaWxiZXJ0CitkZ2lsYmVydCBhdCBpbnRlcmxvZyBkb3QgY29tCisyMXN0IFNlcHRlbWJlciAyMDA0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGUzMGNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N0LnR4dApAQCAtMCwwICsxLDQ5OSBAQAorVGhpcyBmaWxlIGNvbnRhaW5zIGJyaWVmIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTQ1NJIHRhcGUgZHJpdmVyLgorVGhlIGRyaXZlciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBLYWkgTeRraXNhcmEgKGVtYWlsCitLYWkuTWFraXNhcmFAa29sdW1idXMuZmkpCisKK0xhc3QgbW9kaWZpZWQ6IE1vbiBNYXIgIDcgMjE6MTQ6NDQgMjAwNSBieSBrYWkubWFraXNhcmEKKworCitCQVNJQ1MKKworVGhlIGRyaXZlciBpcyBnZW5lcmljLCBpLmUuLCBpdCBkb2VzIG5vdCBjb250YWluIGFueSBjb2RlIHRhaWxvcmVkCit0byBhbnkgc3BlY2lmaWMgdGFwZSBkcml2ZS4gVGhlIHRhcGUgcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIHdpdGgKK29uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHM6CisKKzEuIEVhY2ggdXNlciBjYW4gc3BlY2lmeSB0aGUgdGFwZSBwYXJhbWV0ZXJzIGhlL3NoZSB3YW50cyB0byB1c2UKK2RpcmVjdGx5IHdpdGggaW9jdGxzLiBUaGlzIGlzIGFkbWluaXN0cmF0aXZlbHkgYSB2ZXJ5IHNpbXBsZSBhbmQKK2ZsZXhpYmxlIG1ldGhvZCBhbmQgYXBwbGljYWJsZSB0byBzaW5nbGUtdXNlciB3b3Jrc3RhdGlvbnMuIEhvd2V2ZXIsCitpbiBhIG11bHRpdXNlciBlbnZpcm9ubWVudCB0aGUgbmV4dCB1c2VyIGZpbmRzIHRoZSB0YXBlIHBhcmFtZXRlcnMgaW4KK3N0YXRlIHRoZSBwcmV2aW91cyB1c2VyIGxlZnQgdGhlbS4KKworMi4gVGhlIHN5c3RlbSBtYW5hZ2VyIChyb290KSBjYW4gZGVmaW5lIGRlZmF1bHQgdmFsdWVzIGZvciBzb21lIHRhcGUKK3BhcmFtZXRlcnMsIGxpa2UgYmxvY2sgc2l6ZSBhbmQgZGVuc2l0eSB1c2luZyB0aGUgTVRTRVREUlZCVUZGRVIgaW9jdGwuCitUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBwcm9ncmFtbWVkIHRvIGNvbWUgaW50byBlZmZlY3QgZWl0aGVyIHdoZW4gYQorbmV3IHRhcGUgaXMgbG9hZGVkIGludG8gdGhlIGRyaXZlIG9yIGlmIHdyaXRpbmcgYmVnaW5zIGF0IHRoZQorYmVnaW5uaW5nIG9mIHRoZSB0YXBlLiBUaGUgc2Vjb25kIG1ldGhvZCBpcyBhcHBsaWNhYmxlIGlmIHRoZSB0YXBlCitkcml2ZSBwZXJmb3JtcyBhdXRvLWRldGVjdGlvbiBvZiB0aGUgdGFwZSBmb3JtYXQgd2VsbCAobGlrZSBzb21lCitRSUMtZHJpdmVzKS4gVGhlIHJlc3VsdCBpcyB0aGF0IGFueSB0YXBlIGNhbiBiZSByZWFkLCB3cml0aW5nIGNhbiBiZQorY29udGludWVkIHVzaW5nIGV4aXN0aW5nIGZvcm1hdCwgYW5kIHRoZSBkZWZhdWx0IGZvcm1hdCBpcyB1c2VkIGlmCit0aGUgdGFwZSBpcyByZXdyaXR0ZW4gZnJvbSB0aGUgYmVnaW5uaW5nIChvciBhIG5ldyB0YXBlIGlzIHdyaXR0ZW4KK2ZvciB0aGUgZmlyc3QgdGltZSkuIFRoZSBmaXJzdCBtZXRob2QgaXMgYXBwbGljYWJsZSBpZiB0aGUgZHJpdmUKK2RvZXMgbm90IHBlcmZvcm0gYXV0by1kZXRlY3Rpb24gd2VsbCBlbm91Z2ggYW5kIHRoZXJlIGlzIGEgc2luZ2xlCisic2Vuc2libGUiIG1vZGUgZm9yIHRoZSBkZXZpY2UuIEFuIGV4YW1wbGUgaXMgYSBEQVQgZHJpdmUgdGhhdCBpcwordXNlZCBvbmx5IGluIHZhcmlhYmxlIGJsb2NrIG1vZGUgKEkgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIHNlbnNpYmxlCitvciBub3QgOi0pLgorCitUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCBieSB0aGUgc3lzdGVtCittYW5hZ2VyLiBUaGUgY2hhbmdlcyBwZXJzaXN0IHVudGlsIHRoZSBkZWZhdWx0cyBhZ2FpbiBjb21lIGludG8KK2VmZmVjdC4KKworMy4gQnkgZGVmYXVsdCwgdXAgdG8gZm91ciBtb2RlcyBjYW4gYmUgZGVmaW5lZCBhbmQgc2VsZWN0ZWQgdXNpbmcgdGhlIG1pbm9yCitudW1iZXIgKGJpdHMgNSBhbmQgNikuIFRoZSBudW1iZXIgb2YgbW9kZXMgY2FuIGJlIGNoYW5nZWQgYnkgY2hhbmdpbmcKK1NUX05CUl9NT0RFX0JJVFMgaW4gc3QuaC4gTW9kZSAwIGNvcnJlc3BvbmRzIHRvIHRoZSBkZWZhdWx0cyBkaXNjdXNzZWQKK2Fib3ZlLiBBZGRpdGlvbmFsIG1vZGVzIGFyZSBkb3JtYW50IHVudGlsIHRoZXkgYXJlIGRlZmluZWQgYnkgdGhlCitzeXN0ZW0gbWFuYWdlciAocm9vdCkuIFdoZW4gc3BlY2lmaWNhdGlvbiBvZiBhIG5ldyBtb2RlIGlzIHN0YXJ0ZWQsCit0aGUgY29uZmlndXJhdGlvbiBvZiBtb2RlIDAgaXMgdXNlZCB0byBwcm92aWRlIGEgc3RhcnRpbmcgcG9pbnQgZm9yCitkZWZpbml0aW9uIG9mIHRoZSBuZXcgbW9kZS4KKworVXNpbmcgdGhlIG1vZGVzIGFsbG93cyB0aGUgc3lzdGVtIG1hbmFnZXIgdG8gZ2l2ZSB0aGUgdXNlcnMgY2hvaWNlcworb3ZlciBzb21lIG9mIHRoZSBidWZmZXJpbmcgcGFyYW1ldGVycyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byB0aGUKK3VzZXJzIChidWZmZXJlZCBhbmQgYXN5bmNocm9ub3VzIHdyaXRlcykuIFRoZSBtb2RlcyBhbHNvIGFsbG93IGNob2ljZXMKK2JldHdlZW4gZm9ybWF0cyBpbiBtdWx0aS10YXBlIG9wZXJhdGlvbnMgKHRoZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4KK3BhcmFtZXRlcnMgYXJlIHJlc2V0IHdoZW4gYSBuZXcgdGFwZSBpcyBsb2FkZWQpLgorCitJZiBtb3JlIHRoYW4gb25lIG1vZGUgaXMgdXNlZCwgYWxsIG1vZGVzIHNob3VsZCBjb250YWluIGRlZmluaXRpb25zCitmb3IgdGhlIHNhbWUgc2V0IG9mIHBhcmFtZXRlcnMuCisKK01hbnkgVW5pY2VzIGNvbnRhaW4gaW50ZXJuYWwgdGFibGVzIHRoYXQgYXNzb2NpYXRlIGRpZmZlcmVudCBtb2RlcyB0bworc3VwcG9ydGVkIGRldmljZXMuIFRoZSBMaW51eCBTQ1NJIHRhcGUgZHJpdmVyIGRvZXMgbm90IGNvbnRhaW4gc3VjaAordGFibGVzIChhbmQgd2lsbCBub3QgZG8gdGhhdCBpbiBmdXR1cmUpLiBJbnN0ZWFkIG9mIHRoYXQsIGEgdXRpbGl0eQorcHJvZ3JhbSBjYW4gYmUgbWFkZSB0aGF0IGZldGNoZXMgdGhlIGlucXVpcnkgZGF0YSBzZW50IGJ5IHRoZSBkZXZpY2UsCitzY2FucyBpdHMgZGF0YWJhc2UsIGFuZCBzZXRzIHVwIHRoZSBtb2RlcyB1c2luZyB0aGUgaW9jdGxzLiBBbm90aGVyCithbHRlcm5hdGl2ZSBpcyB0byBtYWtlIGEgc21hbGwgc2NyaXB0IHRoYXQgdXNlcyBtdCB0byBzZXQgdGhlIGRlZmF1bHRzCit0YWlsb3JlZCB0byB0aGUgc3lzdGVtLgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGZpeGVkIGFuZCB2YXJpYWJsZSBibG9jayBzaXplICh3aXRoaW4gYnVmZmVyCitsaW1pdHMpLiBCb3RoIHRoZSBhdXRvLXJld2luZCAobWlub3IgZXF1YWxzIGRldmljZSBudW1iZXIpIGFuZAorbm9uLXJld2luZCBkZXZpY2VzIChtaW5vciBpcyAxMjggKyBkZXZpY2UgbnVtYmVyKSBhcmUgaW1wbGVtZW50ZWQuCisKK0luIHZhcmlhYmxlIGJsb2NrIG1vZGUsIHRoZSBieXRlIGNvdW50IGluIHdyaXRlKCkgZGV0ZXJtaW5lcyB0aGUgc2l6ZQorb2YgdGhlIHBoeXNpY2FsIGJsb2NrIG9uIHRhcGUuIFdoZW4gcmVhZGluZywgdGhlIGRyaXZlIHJlYWRzIHRoZSBuZXh0Cit0YXBlIGJsb2NrIGFuZCByZXR1cm5zIHRvIHRoZSB1c2VyIHRoZSBkYXRhIGlmIHRoZSByZWFkKCkgYnl0ZSBjb3VudAoraXMgYXQgbGVhc3QgdGhlIGJsb2NrIHNpemUuIE90aGVyd2lzZSwgZXJyb3IgRU5PTUVNIGlzIHJldHVybmVkLgorCitJbiBmaXhlZCBibG9jayBtb2RlLCB0aGUgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBkcml2ZSBhbmQgdGhlCitkcml2ZXIgaXMgaW4gbXVsdGlwbGVzIG9mIHRoZSBibG9jayBzaXplLiBUaGUgd3JpdGUoKSBieXRlIGNvdW50IG11c3QKK2JlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuIFRoaXMgaXMgbm90IHJlcXVpcmVkIHdoZW4gcmVhZGluZyBidXQKK21heSBiZSBhZHZpc2FibGUgZm9yIHBvcnRhYmlsaXR5LgorCitTdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBjaGFuZ2luZyB0aGUgdGFwZSBwYXJ0aXRpb24gYW5kIHBhcnRpdGlvbmluZworb2YgdGhlIHRhcGUgd2l0aCBvbmUgb3IgdHdvIHBhcnRpdGlvbnMuIEJ5IGRlZmF1bHQgc3VwcG9ydCBmb3IKK3BhcnRpdGlvbmVkIHRhcGUgaXMgZGlzYWJsZWQgZm9yIGVhY2ggZHJpdmVyIGFuZCBpdCBjYW4gYmUgZW5hYmxlZAord2l0aCB0aGUgaW9jdGwgTVRTRVREUlZCVUZGRVIuCisKK0J5IGRlZmF1bHQgdGhlIGRyaXZlciB3cml0ZXMgb25lIGZpbGVtYXJrIHdoZW4gdGhlIGRldmljZSBpcyBjbG9zZWQgYWZ0ZXIKK3dyaXRpbmcgYW5kIHRoZSBsYXN0IG9wZXJhdGlvbiBoYXMgYmVlbiBhIHdyaXRlLiBUd28gZmlsZW1hcmtzIGNhbiBiZQorb3B0aW9uYWxseSB3cml0dGVuLiBJbiBib3RoIGNhc2VzIGVuZCBvZiBkYXRhIGlzIHNpZ25pZmllZCBieQorcmV0dXJuaW5nIHplcm8gYnl0ZXMgZm9yIHR3byBjb25zZWN1dGl2ZSByZWFkcy4KKworSWYgcmV3aW5kLCBvZmZsaW5lLCBic2YsIG9yIHNlZWsgaXMgZG9uZSBhbmQgcHJldmlvdXMgdGFwZSBvcGVyYXRpb24gd2FzCit3cml0ZSwgYSBmaWxlbWFyayBpcyB3cml0dGVuIGJlZm9yZSBtb3ZpbmcgdGFwZS4KKworVGhlIGNvbXBpbGUgb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZSBsaW51eC9kcml2ZXJzL3Njc2kvc3Rfb3B0aW9ucy5oLgorCis0LiBJZiB0aGUgb3BlbiBvcHRpb24gT19OT05CTE9DSyBpcyB1c2VkLCBvcGVuIHN1Y2NlZWRzIGV2ZW4gaWYgdGhlCitkcml2ZSBpcyBub3QgcmVhZHkuIElmIE9fTk9OQkxPQ0sgaXMgbm90IHVzZWQsIHRoZSBkcml2ZXIgd2FpdHMgZm9yCit0aGUgZHJpdmUgdG8gYmVjb21lIHJlYWR5LiBJZiB0aGlzIGRvZXMgbm90IGhhcHBlbiBpbiBTVF9CTE9DS19TRUNPTkRTCitzZWNvbmRzLCBvcGVuIGZhaWxzIHdpdGggdGhlIGVycm5vIHZhbHVlIEVJTy4gV2l0aCBPX05PTkJMT0NLIHRoZQorZGV2aWNlIGNhbiBiZSBvcGVuZWQgZm9yIHdyaXRpbmcgZXZlbiBpZiB0aGVyZSBpcyBhIHdyaXRlIHByb3RlY3RlZAordGFwZSBpbiB0aGUgZHJpdmUgKGNvbW1hbmRzIHRyeWluZyB0byB3cml0ZSBzb21ldGhpbmcgcmV0dXJuIGVycm9yIGlmCithdHRlbXB0ZWQpLgorCisKK01JTk9SIE5VTUJFUlMKKworVGhlIHRhcGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyAxMjggZHJpdmVzIGJ5IGRlZmF1bHQuIFRoaXMgbnVtYmVyCitjYW4gYmUgaW5jcmVhc2VkIGJ5IGVkaXRpbmcgc3QuaCBhbmQgcmVjb21waWxpbmcgdGhlIGRyaXZlciBpZgorbmVjZXNzYXJ5LiBUaGUgdXBwZXIgbGltaXQgaXMgMl4xNyBkcml2ZXMgaWYgNCBtb2RlcyBmb3IgZWFjaCBkcml2ZQorYXJlIHVzZWQuCisKK1RoZSBtaW5vciBudW1iZXJzIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBiaXQgZmllbGRzOgorCitkZXZfdXBwZXIgbm9uLXJldyBtb2RlIGRldi1sb3dlcgorICAyMCAtICA4ICAgICA3ICAgIDYgNSAgNCAgICAgIDAKK1RoZSBub24tcmV3aW5kIGJpdCBpcyBhbHdheXMgYml0IDcgKHRoZSB1cHBlcm1vc3QgYml0IGluIHRoZSBsb3dlcm1vc3QKK2J5dGUpLiBUaGUgYml0cyBkZWZpbmluZyB0aGUgbW9kZSBhcmUgYmVsb3cgdGhlIG5vbi1yZXdpbmQgYml0LiBUaGUKK3JlbWFpbmluZyBiaXRzIGRlZmluZSB0aGUgdGFwZSBkZXZpY2UgbnVtYmVyLiBUaGlzIG51bWJlcmluZyBpcworYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXJpbmcgdXNlZCB3aGVuIHRoZSBtaW5vciBudW1iZXIgd2FzCitvbmx5IDggYml0cyB3aWRlLgorCisKK1NZU0ZTIFNVUFBPUlQKKworVGhlIGRyaXZlciBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgL3N5cy9jbGFzcy9zY3NpX3RhcGUgYW5kIHBvcHVsYXRlcyBpdCB3aXRoCitkaXJlY3RvcmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleGlzdGluZyB0YXBlIGRldmljZXMuIFRoZXJlIGFyZSBhdXRvcmV3aW5kCithbmQgbm9uLXJld2luZCBlbnRyaWVzIGZvciBlYWNoIG1vZGUuIFRoZSBuYW1lcyBhcmUgc3R4eSBhbmQgbnN0eHksIHdoZXJlIHgKK2lzIHRoZSB0YXBlIG51bWJlciBhbmQgeSBhIGNoYXJhY3RlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2RlIChub25lLCBsLCBtLAorYSkuIEZvciBleGFtcGxlLCB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBmaXJzdCB0YXBlIGRldmljZSBhcmUgKGFzc3VtaW5nIGZvdXIKK21vZGVzKTogc3QwICBuc3QwICBzdDBsICBuc3QwbCAgc3QwbSAgbnN0MG0gIHN0MGEgIG5zdDBhLgorCitFYWNoIGRpcmVjdG9yeSBjb250YWlucyB0aGUgZW50cmllczogZGVmYXVsdF9ibGtzaXplICBkZWZhdWx0X2NvbXByZXNzaW9uCitkZWZhdWx0X2RlbnNpdHkgIGRlZmluZWQgIGRldiAgZGV2aWNlICBkcml2ZXIuIFRoZSBmaWxlICdkZWZpbmVkJyBjb250YWlucyAxCitpZiB0aGUgbW9kZSBpcyBkZWZpbmVkIGFuZCB6ZXJvIGlmIG5vdCBkZWZpbmVkLiBUaGUgZmlsZXMgJ2RlZmF1bHRfKicgY29udGFpbgordGhlIGRlZmF1bHRzIHNldCBieSB0aGUgdXNlci4gVGhlIHZhbHVlIC0xIG1lYW5zIHRoZSBkZWZhdWx0IGlzIG5vdCBzZXQuIFRoZQorZmlsZSAnZGV2JyBjb250YWlucyB0aGUgZGV2aWNlIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGlzIGRldmljZS4gVGhlIGxpbmtzCisnZGV2aWNlJyBhbmQgJ2RyaXZlcicgcG9pbnQgdG8gdGhlIFNDU0kgZGV2aWNlIGFuZCBkcml2ZXIgZW50cmllcy4KKworQSBsaW5rIG5hbWVkICd0YXBlJyBpcyBtYWRlIGZyb20gdGhlIFNDU0kgZGV2aWNlIGRpcmVjdG9yeSB0byB0aGUgY2xhc3MKK2RpcmVjdG9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2RlIDAgYXV0by1yZXdpbmQgZGV2aWNlIChlLmcuLCBzdDApLiAKKworCitCU0QgQU5EIFNZUyBWIFNFTUFOVElDUworCitUaGUgdXNlciBjYW4gY2hvb3NlIGJldHdlZW4gdGhlc2UgdHdvIGJlaGF2aW91cnMgb2YgdGhlIHRhcGUgZHJpdmVyIGJ5CitkZWZpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbCBTVF9TWVNWLiBUaGUgc2VtYW50aWNzIGRpZmZlciB3aGVuIGEKK2ZpbGUgYmVpbmcgcmVhZCBpcyBjbG9zZWQuIFRoZSBCU0Qgc2VtYW50aWNzIGxlYXZlcyB0aGUgdGFwZSB3aGVyZSBpdAorY3VycmVudGx5IGlzIHdoZXJlYXMgdGhlIFNZUyBWIHNlbWFudGljcyBtb3ZlcyB0aGUgdGFwZSBwYXN0IHRoZSBuZXh0CitmaWxlbWFyayB1bmxlc3MgdGhlIGZpbGVtYXJrIGhhcyBqdXN0IGJlZW4gY3Jvc3NlZC4KKworVGhlIGRlZmF1bHQgaXMgQlNEIHNlbWFudGljcy4KKworCitCVUZGRVJJTkcKKworVGhlIGRyaXZlciB0cmllcyB0byBkbyB0cmFuc2ZlcnMgZGlyZWN0bHkgdG8vZnJvbSB1c2VyIHNwYWNlLiBJZiB0aGlzCitpcyBub3QgcG9zc2libGUsIGEgZHJpdmVyIGJ1ZmZlciBhbGxvY2F0ZWQgYXQgcnVuLXRpbWUgaXMgdXNlZC4gSWYKK2RpcmVjdCBpL28gaXMgbm90IHBvc3NpYmxlIGZvciB0aGUgd2hvbGUgdHJhbnNmZXIsIHRoZSBkcml2ZXIgYnVmZmVyCitpcyB1c2VkIChpLmUuLCBib3VuY2UgYnVmZmVycyBmb3IgaW5kaXZpZHVhbCBwYWdlcyBhcmUgbm90Cit1c2VkKS4gRGlyZWN0IGkvbyBjYW4gYmUgaW1wb3NzaWJsZSBiZWNhdXNlIG9mIHNldmVyYWwgcmVhc29ucywgZS5nLjoKKy0gb25lIG9yIG1vcmUgcGFnZXMgYXJlIGF0IGFkZHJlc3NlcyBub3QgcmVhY2hhYmxlIGJ5IHRoZSBIQkEKKy0gdGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgdHJhbnNmZXIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mCisgIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHBlcm1pdHRlZCBieSB0aGUgSEJBCistIG9uZSBvciBtb3JlIHBhZ2VzIGNhbid0IGJlIGxvY2tlZCBpbnRvIG1lbW9yeSAoc2hvdWxkIG5vdCBoYXBwZW4gaW4KKyAgYW55IHJlYXNvbmFibGUgc2l0dWF0aW9uKQorCitUaGUgc2l6ZSBvZiB0aGUgZHJpdmVyIGJ1ZmZlcnMgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSB0YXBlIGJsb2NrLiBJbiBmaXhlZAorYmxvY2sgbW9kZSwgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgZGVmaW5lZCAoaW4gMTAyNCBieXRlIHVuaXRzKSBieQorU1RfRklYRURfQlVGRkVSX0JMT0NLUy4gV2l0aCBzbWFsbCBibG9jayBzaXplIHRoaXMgYWxsb3dzIGJ1ZmZlcmluZyBvZgorc2V2ZXJhbCBibG9ja3MgYW5kIHVzaW5nIG9uZSBTQ1NJIHJlYWQgb3Igd3JpdGUgdG8gdHJhbnNmZXIgYWxsIG9mIHRoZQorYmxvY2tzLiBCdWZmZXJpbmcgb2YgZGF0YSBhY3Jvc3Mgd3JpdGUgY2FsbHMgaW4gZml4ZWQgYmxvY2sgbW9kZSBpcworYWxsb3dlZCBpZiBTVF9CVUZGRVJfV1JJVEVTIGlzIG5vbi16ZXJvIGFuZCBkaXJlY3QgaS9vIGlzIG5vdCB1c2VkLgorQnVmZmVyIGFsbG9jYXRpb24gdXNlcyBjaHVua3Mgb2YgbWVtb3J5IGhhdmluZyBzaXplcyAyXm4gKiAocGFnZQorc2l6ZSkuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUKK21pbmltdW0gYWxsb3dhYmxlIGJ1ZmZlciBzaXplLgorCitOT1RFIHRoYXQgaWYgZGlyZWN0IGkvbyBpcyB1c2VkLCB0aGUgc21hbGwgd3JpdGVzIGFyZSBub3QgYnVmZmVyZWQuIFRoaXMgbWF5CitjYXVzZSBhIHN1cnByaXNlIHdoZW4gbW92aW5nIGZyb20gMi40LiBUaGVyZSBzbWFsbCB3cml0ZXMgKGUuZy4sIHRhciB3aXRob3V0CistYiBvcHRpb24pIG1heSBoYXZlIGhhZCBnb29kIHRocm91Z2hwdXQgYnV0IHRoaXMgaXMgbm90IHRydWUgYW55IG1vcmUgd2l0aAorMi42LiBEaXJlY3QgaS9vIGNhbiBiZSB0dXJuZWQgb2ZmIHRvIHNvbHZlIHRoaXMgcHJvYmxlbSBidXQgYSBiZXR0ZXIgc29sdXRpb24KK2lzIHRvIHVzZSBiaWdnZXIgd3JpdGUoKSBieXRlIGNvdW50cyAoZS5nLiwgdGFyIC1iIDY0KS4KKworQXN5bmNocm9ub3VzIHdyaXRpbmcuIFdyaXRpbmcgdGhlIGJ1ZmZlciBjb250ZW50cyB0byB0aGUgdGFwZSBpcworc3RhcnRlZCBhbmQgdGhlIHdyaXRlIGNhbGwgcmV0dXJucyBpbW1lZGlhdGVseS4gVGhlIHN0YXR1cyBpcyBjaGVja2VkCithdCB0aGUgbmV4dCB0YXBlIG9wZXJhdGlvbi4gQXN5bmNocm9ub3VzIHdyaXRlcyBhcmUgbm90IGRvbmUgd2l0aAorZGlyZWN0IGkvbyBhbmQgbm90IGluIGZpeGVkIGJsb2NrIG1vZGUuCisKK0J1ZmZlcmVkIHdyaXRlcyBhbmQgYXN5bmNocm9ub3VzIHdyaXRlcyBtYXkgaW4gc29tZSByYXJlIGNhc2VzIGNhdXNlCitwcm9ibGVtcyBpbiBtdWx0aXZvbHVtZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb24gdGhlCit0YXBlIGFmdGVyIHRoZSBlYXJseS13YXJuaW5nIG1hcmsgdG8gZmx1c2ggdGhlIGRyaXZlciBidWZmZXIuCisKK1JlYWQgYWhlYWQgZm9yIGZpeGVkIGJsb2NrIG1vZGUgKFNUX1JFQURfQUhFQUQpLiBGaWxsaW5nIHRoZSBidWZmZXIgaXMKK2F0dGVtcHRlZCBldmVuIGlmIHRoZSB1c2VyIGRvZXMgbm90IHdhbnQgdG8gZ2V0IGFsbCBvZiB0aGUgZGF0YSBhdAordGhpcyByZWFkIGNvbW1hbmQuIFNob3VsZCBiZSBkaXNhYmxlZCBmb3IgdGhvc2UgZHJpdmVzIHRoYXQgZG9uJ3QgbGlrZQorYSBmaWxlbWFyayB0byB0cnVuY2F0ZSBhIHJlYWQgcmVxdWVzdCBvciB0aGF0IGRvbid0IGxpa2UgYmFja3NwYWNpbmcuCisKK1NjYXR0ZXIvZ2F0aGVyIGJ1ZmZlcnMgKGJ1ZmZlcnMgdGhhdCBjb25zaXN0IG9mIGNodW5rcyBub24tY29udGlndW91cworaW4gdGhlIHBoeXNpY2FsIG1lbW9yeSkgYXJlIHVzZWQgaWYgY29udGlndW91cyBidWZmZXJzIGNhbid0IGJlCithbGxvY2F0ZWQuIFRvIHN1cHBvcnQgYWxsIFNDU0kgYWRhcHRlcnMgKGluY2x1ZGluZyB0aG9zZSBub3QKK3N1cHBvcnRpbmcgc2NhdHRlci9nYXRoZXIpLCBidWZmZXIgYWxsb2NhdGlvbiBpcyB1c2luZyB0aGUgZm9sbG93aW5nCit0aHJlZSBraW5kcyBvZiBjaHVua3M6CisxLiBUaGUgaW5pdGlhbCBzZWdtZW50IHRoYXQgaXMgdXNlZCBmb3IgYWxsIFNDU0kgYWRhcHRlcnMgaW5jbHVkaW5nCit0aG9zZSBub3Qgc3VwcG9ydGluZyBzY2F0dGVyL2dhdGhlci4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgd2lsbCBiZQorKFBBR0VfU0laRSA8PCBTVF9GSVJTVF9PUkRFUikgYnl0ZXMgaWYgdGhlIHN5c3RlbSBjYW4gZ2l2ZSBhIGNodW5rIG9mCit0aGlzIHNpemUgKGFuZCBpdCBpcyBub3QgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlciBzaXplIHNwZWNpZmllZCBieQorU1RfQlVGRkVSX0JMT0NLUykuIElmIHRoaXMgc2l6ZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZHJpdmVyIGhhbHZlcwordGhlIHNpemUgYW5kIHRyaWVzIGFnYWluIHVudGlsIHRoZSBzaXplIG9mIG9uZSBwYWdlLiBUaGUgZGVmYXVsdAorc2V0dGluZ3MgaW4gc3Rfb3B0aW9ucy5oIG1ha2UgdGhlIGRyaXZlciB0byB0cnkgdG8gYWxsb2NhdGUgYWxsIG9mIHRoZQorYnVmZmVyIGFzIG9uZSBjaHVuay4KKzIuIFRoZSBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyB0byBmaWxsIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHNpemUgYXJlCithbGxvY2F0ZWQgc28gdGhhdCBhcyBtYW55IHNlZ21lbnRzIGFzIHBvc3NpYmxlIGFyZSB1c2VkIGJ1dCB0aGUgbnVtYmVyCitvZiBzZWdtZW50cyBkb2VzIG5vdCBleGNlZWQgU1RfRklSU1RfU0cuCiszLiBUaGUgcmVtYWluaW5nIHNlZ21lbnRzIGJldHdlZW4gU1RfTUFYX1NHIChvciB0aGUgbW9kdWxlIHBhcmFtZXRlcgorbWF4X3NnX3NlZ3MpIGFuZCB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgaW4gcGhhc2VzIDEgYW5kIDIKK2FyZSB1c2VkIHRvIGV4dGVuZCB0aGUgYnVmZmVyIGF0IHJ1bi10aW1lIGlmIHRoaXMgaXMgbmVjZXNzYXJ5LiBUaGUKK251bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cyBhbGxvd2VkIGZvciB0aGUgU0NTSSBhZGFwdGVyIGlzIG5vdAorZXhjZWVkZWQgaWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzY2F0dGVyL2dhdGhlcgorc2VnbWVudHMgc3BlY2lmaWVkLiBJZiB0aGUgbWF4aW11bSBudW1iZXIgYWxsb3dlZCBmb3IgdGhlIFNDU0kgYWRhcHRlcgoraXMgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgdXNlZCBpbiBwaGFzZXMgMSBhbmQgMiwKK2V4dGVuZGluZyB0aGUgYnVmZmVyIHdpbGwgYWx3YXlzIGZhaWwuCisKKworRU9NIEJFSEFWSU9VUiBXSEVOIFdSSVRJTkcKKworV2hlbiB0aGUgZW5kIG9mIG1lZGl1bSBlYXJseSB3YXJuaW5nIGlzIGVuY291bnRlcmVkLCB0aGUgY3VycmVudCB3cml0ZQoraXMgZmluaXNoZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgaXMgcmV0dXJuZWQuIFRoZSBuZXh0IHdyaXRlCityZXR1cm5zIC0xIGFuZCBlcnJubyBpcyBzZXQgdG8gRU5PU1BDLiBUbyBlbmFibGUgd3JpdGluZyBhIHRyYWlsZXIsCit0aGUgbmV4dCB3cml0ZSBpcyBhbGxvd2VkIHRvIHByb2NlZWQgYW5kLCBpZiBzdWNjZXNzZnVsLCB0aGUgbnVtYmVyIG9mCitieXRlcyBpcyByZXR1cm5lZC4gQWZ0ZXIgdGhpcywgLTEgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXJlCithbHRlcm5hdGVseSByZXR1cm5lZCB1bnRpbCB0aGUgcGh5c2ljYWwgZW5kIG9mIG1lZGl1bSAob3Igc29tZSBvdGhlcgorZXJyb3IpIGlzIGVuY291bnRlcmVkLgorCisKK01PRFVMRSBQQVJBTUVURVJTCisKK1RoZSBidWZmZXIgc2l6ZSwgd3JpdGUgdGhyZXNob2xkLCBhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFsbG9jYXRlZCBidWZmZXJzCithcmUgY29uZmlndXJhYmxlIHdoZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQgYXMgYSBtb2R1bGUuIFRoZSBrZXl3b3JkcyBhcmU6CisKK2J1ZmZlcl9rYnM9eHh4ICAgICAgICAgICAgIHRoZSBidWZmZXIgc2l6ZSBmb3IgZml4ZWQgYmxvY2sgbW9kZSBpcyBzZXQKKwkJCSAgIHRvIHh4eCBraWxvYnl0ZXMKK3dyaXRlX3RocmVzaG9sZF9rYnM9eHh4ICAgIHRoZSB3cml0ZSB0aHJlc2hvbGQgaW4ga2lsb2J5dGVzIHNldCB0byB4eHgKK21heF9zZ19zZWdzPXh4eAkJICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCisJCQkgICBzZWdtZW50cwordHJ5X2RpcmVjdF9pbz14CQkgICB0cnkgZGlyZWN0IHRyYW5zZmVyIGJldHdlZW4gdXNlciBidWZmZXIgYW5kCisJCQkgICB0YXBlIGRyaXZlIGlmIHRoaXMgaXMgbm9uLXplcm8KKworTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBpcyBjaGFuZ2VkIGJ1dCB0aGUgd3JpdGUgdGhyZXNob2xkIGlzIG5vdAorc2V0LCB0aGUgd3JpdGUgdGhyZXNob2xkIGlzIHNldCB0byB0aGUgbmV3IGJ1ZmZlciBzaXplIC0gMiBrQi4KKworCitCT09UIFRJTUUgQ09ORklHVVJBVElPTgorCitJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlIHNhbWUgcGFyYW1ldGVycyBjYW4gYmUKK2Fsc28gc2V0IHVzaW5nLCBlLmcuLCB0aGUgTElMTyBjb21tYW5kIGxpbmUuIFRoZSBwcmVmZXJyZWQgc3ludGF4IGlzCitpcyB0byB1c2UgdGhlIHNhbWUga2V5d29yZCB1c2VkIHdoZW4gbG9hZGluZyBhcyBtb2R1bGUgYnV0IHByZXBlbmRlZAord2l0aCAnc3QuJy4gRm9yIGluc3RhbmNlLCB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCitzZWdtZW50cywgdGhlIHBhcmFtZXRlciAnc3QubWF4X3NnX3NlZ3M9eHgnIHNob3VsZCBiZSB1c2VkICh4eCBpcyB0aGUKK251bWJlciBvZiBzY2F0dGVyL2dhdGhlciBzZWdtZW50cykuCisKK0ZvciBjb21wYXRpYmlsaXR5LCB0aGUgb2xkIHN5bnRheCBmcm9tIGVhcmx5IDIuNSBhbmQgMi40IGtlcm5lbAordmVyc2lvbnMgaXMgc3VwcG9ydGVkLiBUaGUgc2FtZSBrZXl3b3JkcyBjYW4gYmUgdXNlZCBhcyB3aGVuIGxvYWRpbmcKK3RoZSBkcml2ZXIgYXMgbW9kdWxlLiBJZiBzZXZlcmFsIHBhcmFtZXRlcnMgYXJlIHNldCwgdGhlIGtleXdvcmQtdmFsdWUKK3BhaXJzIGFyZSBzZXBhcmF0ZWQgd2l0aCBhIGNvbW1hIChubyBzcGFjZXMgYWxsb3dlZCkuIEEgY29sb24gY2FuIGJlCit1c2VkIGluc3RlYWQgb2YgdGhlIGVxdWFsIG1hcmsuIFRoZSBkZWZpbml0aW9uIGlzIHByZXBlbmRlZCBieSB0aGUKK3N0cmluZyBzdD0uIEhlcmUgaXMgYW4gZXhhbXBsZToKKworCXN0PWJ1ZmZlcl9rYnM6NjQsd3JpdGVfdGhyZWhvbGRfa2JzOjYwCisKK1RoZSBmb2xsb3dpbmcgc3ludGF4IHVzZWQgYnkgdGhlIG9sZCBrZXJuZWwgdmVyc2lvbnMgaXMgYWxzbyBzdXBwb3J0ZWQ6CisKKyAgICAgICAgICAgc3Q9YWFbLGJiWyxkZF1dCisKK3doZXJlCisgIGFhIGlzIHRoZSBidWZmZXIgc2l6ZSBmb3IgZml4ZWQgYmxvY2sgbW9kZSBpbiAxMDI0IGJ5dGUgdW5pdHMKKyAgYmIgaXMgdGhlIHdyaXRlIHRocmVzaG9sZCBpbiAxMDI0IGJ5dGUgdW5pdHMKKyAgZGQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzCisKKworSU9DVExTCisKK1RoZSB0YXBlIGlzIHBvc2l0aW9uZWQgYW5kIHRoZSBkcml2ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgd2l0aCBpb2N0bHMKK2RlZmluZWQgaW4gbXRpby5oIFRoZSB0YXBlIGNvbnRyb2wgcHJvZ3JhbSAnbXQnIHVzZXMgdGhlc2UgaW9jdGxzLiBUcnkKK3RvIGZpbmQgYW4gbXQgdGhhdCBzdXBwb3J0cyBhbGwgb2YgdGhlIExpbnV4IFNDU0kgdGFwZSBpb2N0bHMgYW5kCitvcGVucyB0aGUgZGV2aWNlIGZvciB3cml0aW5nIGlmIHRoZSB0YXBlIGNvbnRlbnRzIHdpbGwgYmUgbW9kaWZpZWQKKyhsb29rIGZvciBhIHBhY2thZ2UgbXQtc3QqIGZyb20gdGhlIExpbnV4IGZ0cCBzaXRlczsgdGhlIEdOVSBtdCBkb2VzCitub3Qgb3BlbiBmb3Igd3JpdGluZyBmb3IsIGUuZy4sIGVyYXNlKS4KKworVGhlIHN1cHBvcnRlZCBpb2N0bHMgYXJlOgorCitUaGUgZm9sbG93aW5nIHVzZSB0aGUgc3RydWN0dXJlIG10b3A6CisKK01URlNGICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IGZpbGVtYXJrcy4gVGFwZSBwb3NpdGlvbmVkIGFmdGVyIGZpbGVtYXJrLgorTVRGU0ZNICBBcyBhYm92ZSBidXQgdGFwZSBwb3NpdGlvbmVkIGJlZm9yZSBmaWxlbWFyay4KK01UQlNGCVNwYWNlIGJhY2t3YXJkIG92ZXIgY291bnQgZmlsZW1hcmtzLiBUYXBlIHBvc2l0aW9uZWQgYmVmb3JlCisgICAgICAgIGZpbGVtYXJrLgorTVRCU0ZNICBBcyBhYm92ZSBidXQgYXBlIHBvc2l0aW9uZWQgYWZ0ZXIgZmlsZW1hcmsuCitNVEZTUiAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCByZWNvcmRzLgorTVRCU1IgICBTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IHJlY29yZHMuCitNVEZTUyAgIFNwYWNlIGZvcndhcmQgb3ZlciBjb3VudCBzZXRtYXJrcy4KK01UQlNTICAgU3BhY2UgYmFja3dhcmQgb3ZlciBjb3VudCBzZXRtYXJrcy4KK01UV0VPRiAgV3JpdGUgY291bnQgZmlsZW1hcmtzLgorTVRXU00gICBXcml0ZSBjb3VudCBzZXRtYXJrcy4KK01UUkVXICAgUmV3aW5kIHRhcGUuCitNVE9GRkwgIFNldCBkZXZpY2Ugb2ZmIGxpbmUgKG9mdGVuIHJld2luZCBwbHVzIGVqZWN0KS4KK01UTk9QICAgRG8gbm90aGluZyBleGNlcHQgZmx1c2ggdGhlIGJ1ZmZlcnMuCitNVFJFVEVOIFJlLXRlbnNpb24gdGFwZS4KK01URU9NICAgU3BhY2UgdG8gZW5kIG9mIHJlY29yZGVkIGRhdGEuCitNVEVSQVNFIEVyYXNlIHRhcGUuIElmIHRoZSBhcmd1bWVudCBpcyB6ZXJvLCB0aGUgc2hvcnQgZXJhc2UgY29tbWFuZAorCWlzIHVzZWQuIFRoZSBsb25nIGVyYXNlIGNvbW1hbmQgaXMgdXNlZCB3aXRoIGFsbCBvdGhlciB2YWx1ZXMKKwlvZiB0aGUgYXJndW1lbnQuCitNVFNFRUsJU2VlayB0byB0YXBlIGJsb2NrIGNvdW50LiBVc2VzIFRhbmRiZXJnLWNvbXBhdGlibGUgc2VlayAoUUZBKQorICAgICAgICBmb3IgU0NTSS0xIGRyaXZlcyBhbmQgU0NTSS0yIHNlZWsgZm9yIFNDU0ktMiBkcml2ZXMuIFRoZSBmaWxlIGFuZAorCWJsb2NrIG51bWJlcnMgaW4gdGhlIHN0YXR1cyBhcmUgbm90IHZhbGlkIGFmdGVyIGEgc2Vlay4KK01UU0VUQkxLIFNldCB0aGUgZHJpdmUgYmxvY2sgc2l6ZS4gU2V0dGluZyB0byB6ZXJvIHNldHMgdGhlIGRyaXZlIGludG8KKyAgICAgICAgdmFyaWFibGUgYmxvY2sgbW9kZSAoaWYgYXBwbGljYWJsZSkuCitNVFNFVERFTlNJVFkgU2V0cyB0aGUgZHJpdmUgZGVuc2l0eSBjb2RlIHRvIGFyZy4gU2VlIGRyaXZlCisgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGF2YWlsYWJsZSBjb2Rlcy4KK01UTE9DSyBhbmQgTVRVTkxPQ0sgRXhwbGljaXRseSBsb2NrL3VubG9jayB0aGUgdGFwZSBkcml2ZSBkb29yLgorTVRMT0FEIGFuZCBNVFVOTE9BRCBFeHBsaWNpdGx5IGxvYWQgYW5kIHVubG9hZCB0aGUgdGFwZS4gSWYgdGhlCisJY29tbWFuZCBhcmd1bWVudCB4IGlzIGJldHdlZW4gTVRfU1RfSFBMT0FERVJfT0ZGU0VUICsgMSBhbmQKKwlNVF9TVF9IUExPQURFUl9PRkZTRVQgKyA2LCB0aGUgbnVtYmVyIHggaXMgdXNlZCBzZW50IHRvIHRoZQorCWRyaXZlIHdpdGggdGhlIGNvbW1hbmQgYW5kIGl0IHNlbGVjdHMgdGhlIHRhcGUgc2xvdCB0byB1c2Ugb2YKKwlIUCBDMTU1M0EgY2hhbmdlci4KK01UQ09NUFJFU1NJT04gU2V0cyBjb21wcmVzc2luZyBvciB1bmNvbXByZXNzaW5nIGRyaXZlIG1vZGUgdXNpbmcgdGhlCisJU0NTSSBtb2RlIHBhZ2UgMTUuIE5vdGUgdGhhdCBzb21lIGRyaXZlcyBvdGhlciBtZXRob2RzIGZvcgorCWNvbnRyb2wgb2YgY29tcHJlc3Npb24uIFNvbWUgZHJpdmVzIChsaWtlIHRoZSBFeGFieXRlcykgdXNlCisJZGVuc2l0eSBjb2RlcyBmb3IgY29tcHJlc3Npb24gY29udHJvbC4gU29tZSBkcml2ZXMgdXNlIGFub3RoZXIKKwltb2RlIHBhZ2UgYnV0IHRoaXMgcGFnZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4gdGhlCisJZHJpdmVyLiBTb21lIGRyaXZlcyB3aXRob3V0IGNvbXByZXNzaW9uIGNhcGFiaWxpdHkgd2lsbCBhY2NlcHQKKwlhbnkgY29tcHJlc3Npb24gbW9kZSB3aXRob3V0IGVycm9yLgorTVRTRVRQQVJUIE1vdmVzIHRoZSB0YXBlIHRvIHRoZSBwYXJ0aXRpb24gZ2l2ZW4gYnkgdGhlIGFyZ3VtZW50IGF0IHRoZQorCW5leHQgdGFwZSBvcGVyYXRpb24uIFRoZSBibG9jayBhdCB3aGljaCB0aGUgdGFwZSBpcyBwb3NpdGlvbmVkCisJaXMgdGhlIGJsb2NrIHdoZXJlIHRoZSB0YXBlIHdhcyBwcmV2aW91c2x5IHBvc2l0aW9uZWQgaW4gdGhlCisJbmV3IGFjdGl2ZSBwYXJ0aXRpb24gdW5sZXNzIHRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uIGlzCisJTVRTRUVLLiBJbiB0aGlzIGNhc2UgdGhlIHRhcGUgaXMgbW92ZWQgZGlyZWN0bHkgdG8gdGhlIGJsb2NrCisJc3BlY2lmaWVkIGJ5IE1UU0VFSy4gTVRTRVRQQVJUIGlzIGluYWN0aXZlIHVubGVzcworCU1UX1NUX0NBTl9QQVJUSVRJT05TIHNldC4KK01UTUtQQVJUIEZvcm1hdHMgdGhlIHRhcGUgd2l0aCBvbmUgcGFydGl0aW9uIChhcmd1bWVudCB6ZXJvKSBvciB0d28KKwlwYXJ0aXRpb25zICh0aGUgYXJndW1lbnQgZ2l2ZXMgaW4gbWVnYWJ5dGVzIHRoZSBzaXplIG9mCisJcGFydGl0aW9uIDEgdGhhdCBpcyBwaHlzaWNhbGx5IHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YgdGhlCisJdGFwZSkuIFRoZSBkcml2ZSBoYXMgdG8gc3VwcG9ydCBwYXJ0aXRpb25zIHdpdGggc2l6ZSBzcGVjaWZpZWQKKwlieSB0aGUgaW5pdGlhdG9yLiBJbmFjdGl2ZSB1bmxlc3MgTVRfU1RfQ0FOX1BBUlRJVElPTlMgc2V0LgorTVRTRVREUlZCVUZGRVIKKwlJcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLiBUaGUgY29tbWFuZCBpcyBvYnRhaW5lZCBmcm9tIGNvdW50CisgICAgICAgIHdpdGggbWFzayBNVF9TRVRfT1BUSU9OUywgdGhlIGxvdyBvcmRlciBiaXRzIGFyZSB1c2VkIGFzIGFyZ3VtZW50LgorCVRoaXMgY29tbWFuZCBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSBzdXBlcnVzZXIgKHJvb3QpLiBUaGUKKwlzdWJjb21tYW5kcyBhcmU6CisJMAorICAgICAgICAgICBUaGUgZHJpdmUgYnVmZmVyIG9wdGlvbiBpcyBzZXQgdG8gdGhlIGFyZ3VtZW50LiBaZXJvIG1lYW5zCisgICAgICAgICAgIG5vIGJ1ZmZlcmluZy4KKyAgICAgICAgTVRfU1RfQk9PTEVBTlMKKyAgICAgICAgICAgU2V0cyB0aGUgYnVmZmVyaW5nIG9wdGlvbnMuIFRoZSBiaXRzIGFyZSB0aGUgbmV3IHN0YXRlcworICAgICAgICAgICAoZW5hYmxlZC9kaXNhYmxlZCkgdGhlIGZvbGxvd2luZyBvcHRpb25zIChpbiB0aGUKKwkgICBwYXJlbnRoZXNpcyBpcyBzcGVjaWZpZWQgd2hldGhlciB0aGUgb3B0aW9uIGlzIGdsb2JhbCBvcgorCSAgIGNhbiBiZSBzcGVjaWZpZWQgZGlmZmVyZW50bHkgZm9yIGVhY2ggbW9kZSk6CisJICAgICBNVF9TVF9CVUZGRVJfV1JJVEVTIHdyaXRlIGJ1ZmZlcmluZyAobW9kZSkKKwkgICAgIE1UX1NUX0FTWU5DX1dSSVRFUyBhc3luY2hyb25vdXMgd3JpdGVzIChtb2RlKQorICAgICAgICAgICAgIE1UX1NUX1JFQURfQUhFQUQgIHJlYWQgYWhlYWQgKG1vZGUpCisgICAgICAgICAgICAgTVRfU1RfVFdPX0ZNIHdyaXRpbmcgb2YgdHdvIGZpbGVtYXJrcyAoZ2xvYmFsKQorCSAgICAgTVRfU1RfRkFTVF9FT00gdXNpbmcgdGhlIFNDU0kgc3BhY2luZyB0byBFT0QgKGdsb2JhbCkKKwkgICAgIE1UX1NUX0FVVE9fTE9DSyBhdXRvbWF0aWMgbG9ja2luZyBvZiB0aGUgZHJpdmUgZG9vciAoZ2xvYmFsKQorICAgICAgICAgICAgIE1UX1NUX0RFRl9XUklURVMgdGhlIGRlZmF1bHRzIGFyZSBtZWFudCBvbmx5IGZvciB3cml0ZXMgKG1vZGUpCisJICAgICBNVF9TVF9DQU5fQlNSIGJhY2tzcGFjaW5nIG92ZXIgbW9yZSB0aGFuIG9uZSByZWNvcmRzIGNhbgorCQliZSB1c2VkIGZvciByZXBvc2l0aW9uaW5nIHRoZSB0YXBlIChnbG9iYWwpCisJICAgICBNVF9TVF9OT19CTEtMSU1TIHRoZSBkcml2ZXIgZG9lcyBub3QgYXNrIHRoZSBibG9jayBsaW1pdHMKKwkJZnJvbSB0aGUgZHJpdmUgKGJsb2NrIHNpemUgY2FuIGJlIGNoYW5nZWQgb25seSB0bworCQl2YXJpYWJsZSkgKGdsb2JhbCkKKwkgICAgIE1UX1NUX0NBTl9QQVJUSVRJT05TIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQKKwkJdGFwZXMgKGdsb2JhbCkKKwkgICAgIE1UX1NUX1NDU0kyTE9HSUNBTCB0aGUgbG9naWNhbCBibG9jayBudW1iZXIgaXMgdXNlZCBpbgorCQl0aGUgTVRTRUVLIGFuZCBNVElPQ1BPUyBmb3IgU0NTSS0yIGRyaXZlcyBpbnN0ZWFkIG9mCisJCXRoZSBkZXZpY2UgZGVwZW5kZW50IGFkZHJlc3MuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldAorCQl0aGlzIGZsYWcgdW5sZXNzIHRoZXJlIGFyZSB0YXBlcyB1c2luZyB0aGUgZGV2aWNlCisJCWRlcGVuZGVudCAoZnJvbSB0aGUgb2xkIHRpbWVzKSAoZ2xvYmFsKQorCSAgICAgTVRfU1RfU1lTViBzZXRzIHRoZSBTWVNWIHNlbWF0aWNzIChtb2RlKQorCSAgICAgTVRfU1RfTk9XQUlUIGVuYWJsZXMgaW1tZWRpYXRlIG1vZGUgKGkuZS4sIGRvbid0IHdhaXQgZm9yCisJICAgICAgICB0aGUgY29tbWFuZCB0byBmaW5pc2gpIGZvciBzb21lIGNvbW1hbmRzIChlLmcuLCByZXdpbmQpCisJICAgICBNVF9TVF9ERUJVR0dJTkcgZGVidWdnaW5nIChnbG9iYWw7IGRlYnVnZ2luZyBtdXN0IGJlCisJCWNvbXBpbGVkIGludG8gdGhlIGRyaXZlcikKKwlNVF9TVF9TRVRCT09MRUFOUworCU1UX1NUX0NMRUFSQk9PTEVBTlMKKwkgICBTZXRzIG9yIGNsZWFycyB0aGUgb3B0aW9uIGJpdHMuCisgICAgICAgIE1UX1NUX1dSSVRFX1RIUkVTSE9MRAorICAgICAgICAgICBTZXRzIHRoZSB3cml0ZSB0aHJlc2hvbGQgZm9yIHRoaXMgZGV2aWNlIHRvIGtpbG9ieXRlcworICAgICAgICAgICBzcGVjaWZpZWQgYnkgdGhlIGxvd2VzdCBiaXRzLgorCU1UX1NUX0RFRl9CTEtTSVpFCisJICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBibG9jayBzaXplIHNldCBhdXRvbWF0aWNhbGx5LiBWYWx1ZQorCSAgIDB4ZmZmZmZmIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgaXMgbm90IHVzZWQgYW55IG1vcmUuCisJTVRfU1RfREVGX0RFTlNJVFkKKwlNVF9TVF9ERUZfRFJWQlVGRkVSCisJICAgVXNlZCB0byBzZXQgb3IgY2xlYXIgdGhlIGRlbnNpdHkgKDggYml0cyksIGFuZCBkcml2ZSBidWZmZXIKKwkgICBzdGF0ZSAoMyBiaXRzKS4gSWYgdGhlIHZhbHVlIGlzIE1UX1NUX0NMRUFSX0RFRkFVTFQKKwkgICAoMHhmZmZmZikgdGhlIGRlZmF1bHQgd2lsbCBub3QgYmUgdXNlZCBhbnkgbW9yZS4gT3RoZXJ3aXNlCisJICAgdGhlIGxvd2VybW9zdCBiaXRzIG9mIHRoZSB2YWx1ZSBjb250YWluIHRoZSBuZXcgdmFsdWUgb2YKKwkgICB0aGUgcGFyYW1ldGVyLgorCU1UX1NUX0RFRl9DT01QUkVTU0lPTgorCSAgIFRoZSBjb21wcmVzc2lvbiBkZWZhdWx0IHdpbGwgbm90IGJlIHVzZWQgaWYgdGhlIHZhbHVlIG9mCisJICAgdGhlIGxvd2VybW9zdCBieXRlIGlzIDB4ZmYuIE90aGVyd2lzZSB0aGUgbG93ZXJtb3N0IGJpdAorCSAgIGNvbnRhaW5zIHRoZSBuZXcgZGVmYXVsdC4gSWYgdGhlIGJpdHMgOC0xNSBhcmUgc2V0IHRvIGEKKwkgICBub24temVybyBudW1iZXIsIGFuZCB0aGlzIG51bWJlciBpcyBub3QgMHhmZiwgdGhlIG51bWJlciBpcworCSAgIHVzZWQgYXMgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gVGhlIHZhbHVlCisJICAgTVRfU1RfQ0xFQVJfREVGQVVMVCBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgY29tcHJlc3Npb24KKwkgICBkZWZhdWx0LgorCU1UX1NUX1NFVF9USU1FT1VUCisJICAgU2V0IHRoZSBub3JtYWwgdGltZW91dCBpbiBzZWNvbmRzIGZvciB0aGlzIGRldmljZS4gVGhlCisJICAgZGVmYXVsdCBpcyA5MDAgc2Vjb25kcyAoMTUgbWludXRlcykuIFRoZSB0aW1lb3V0IHNob3VsZCBiZQorCSAgIGxvbmcgZW5vdWdoIGZvciB0aGUgcmV0cmllcyBkb25lIGJ5IHRoZSBkZXZpY2Ugd2hpbGUKKwkgICByZWFkaW5nL3dyaXRpbmcuCisJTVRfU1RfU0VUX0xPTkdfVElNRU9VVAorCSAgIFNldCB0aGUgbG9uZyB0aW1lb3V0IHRoYXQgaXMgdXNlZCBmb3Igb3BlcmF0aW9ucyB0aGF0IGFyZQorCSAgIGtub3duIHRvIHRha2UgYSBsb25nIHRpbWUuIFRoZSBkZWZhdWx0IGlzIDE0MDAwIHNlY29uZHMKKwkgICAoMy45IGhvdXJzKS4gRm9yIGVyYXNlIHRoaXMgdmFsdWUgaXMgZnVydGhlciBtdWx0aXBsaWVkIGJ5CisJICAgZWlnaHQuCisJTVRfU1RfU0VUX0NMTgorCSAgIFNldCB0aGUgY2xlYW5pbmcgcmVxdWVzdCBpbnRlcnByZXRhdGlvbiBwYXJhbWV0ZXJzIHVzaW5nCisJICAgdGhlIGxvd2VzdCAyNCBiaXRzIG9mIHRoZSBhcmd1bWVudC4gVGhlIGRyaXZlciBjYW4gc2V0IHRoZQorCSAgIGdlbmVyaWMgc3RhdHVzIGJpdCBHTVRfQ0xOIGlmIGEgY2xlYW5pbmcgcmVxdWVzdCBiaXQgcGF0dGVybgorCSAgIGlzIGZvdW5kIGZyb20gdGhlIGV4dGVuZGVkIHNlbnNlIGRhdGEuIE1hbnkgZHJpdmVzIHNldCBvbmUgb3IKKwkgICBtb3JlIGJpdHMgaW4gdGhlIGV4dGVuZGVkIHNlbnNlIGRhdGEgd2hlbiB0aGUgZHJpdmUgbmVlZHMKKwkgICBjbGVhbmluZy4gVGhlIGJpdHMgYXJlIGRldmljZS1kZXBlbmRlbnQuIFRoZSBkcml2ZXIgaXMKKwkgICBnaXZlbiB0aGUgbnVtYmVyIG9mIHRoZSBzZW5zZSBkYXRhIGJ5dGUgKHRoZSBsb3dlc3QgZWlnaHQKKwkgICBiaXRzIG9mIHRoZSBhcmd1bWVudDsgbXVzdCBiZSA+PSAxOCAodmFsdWVzIDEgLSAxNworCSAgIHJlc2VydmVkKSBhbmQgPD0gdGhlIG1heGltdW0gcmVxdWVzdGVkIHNlbnNlIGRhdGEgc2l4ZSksIAorCSAgIGEgbWFzayB0byBzZWxlY3QgdGhlIHJlbGV2YW50IGJpdHMgKHRoZSBiaXRzIDktMTYpLCBhbmQgdGhlCisJICAgYml0IHBhdHRlcm4gKGJpdHMgMTctMjMpLiBJZiB0aGUgYml0IHBhdHRlcm4gaXMgemVybywgb25lCisJICAgb3IgbW9yZSBiaXRzIHVuZGVyIHRoZSBtYXNrIGluZGljYXRlIGNsZWFuaW5nIHJlcXVlc3QuIElmCisJICAgdGhlIHBhdHRlcm4gaXMgbm9uLXplcm8sIHRoZSBwYXR0ZXJuIG11c3QgbWF0Y2ggdGhlIG1hc2tlZAorCSAgIHNlbnNlIGRhdGEgYnl0ZS4KKworCSAgIChUaGUgY2xlYW5pbmcgYml0IGlzIHNldCBpZiB0aGUgYWRkaXRpb25hbCBzZW5zZSBjb2RlIGFuZAorCSAgIHF1YWxpZmllciAwMGggMTdoIGFyZSBzZWVuIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YKKwkgICBNVF9TVF9TRVRfQ0xOLikKKworVGhlIGZvbGxvd2luZyBpb2N0bCB1c2VzIHRoZSBzdHJ1Y3R1cmUgbXRwb3M6CitNVElPQ1BPUyBSZWFkcyB0aGUgY3VycmVudCBwb3NpdGlvbiBmcm9tIHRoZSBkcml2ZS4gVXNlcworICAgICAgICBUYW5kYmVyZy1jb21wYXRpYmxlIFFGQSBmb3IgU0NTSS0xIGRyaXZlcyBhbmQgdGhlIFNDU0ktMgorICAgICAgICBjb21tYW5kIGZvciB0aGUgU0NTSS0yIGRyaXZlcy4KKworVGhlIGZvbGxvd2luZyBpb2N0bCB1c2VzIHRoZSBzdHJ1Y3R1cmUgbXRnZXQgdG8gcmV0dXJuIHRoZSBzdGF0dXM6CitNVElPQ0dFVCBSZXR1cm5zIHNvbWUgc3RhdHVzIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgZmlsZSBudW1iZXIgYW5kIGJsb2NrIG51bWJlciB3aXRoaW4gZmlsZSBhcmUgcmV0dXJuZWQuIFRoZQorICAgICAgICBibG9jayBpcyAtMSB3aGVuIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGUuZy4sIGFmdGVyIE1UQlNGKS4KKyAgICAgICAgVGhlIGRyaXZlIHR5cGUgaXMgZWl0aGVyIE1USVNTQ1NJMSBvciBNVElTU0NTSTIuCisgICAgICAgIFRoZSBudW1iZXIgb2YgcmVjb3ZlcmVkIGVycm9ycyBzaW5jZSB0aGUgcHJldmlvdXMgc3RhdHVzIGNhbGwKKyAgICAgICAgaXMgc3RvcmVkIGluIHRoZSBsb3dlciB3b3JkIG9mIHRoZSBmaWVsZCBtdF9lcnJlZy4KKyAgICAgICAgVGhlIGN1cnJlbnQgYmxvY2sgc2l6ZSBhbmQgdGhlIGRlbnNpdHkgY29kZSBhcmUgc3RvcmVkIGluIHRoZSBmaWVsZAorICAgICAgICBtdF9kc3JlZyAoc2hpZnRzIGZvciB0aGUgc3ViZmllbGRzIGFyZSBNVF9TVF9CTEtTSVpFX1NISUZUIGFuZAorICAgICAgICBNVF9TVF9ERU5TSVRZX1NISUZUKS4KKwlUaGUgR01UX3h4eCBzdGF0dXMgYml0cyByZWZsZWN0IHRoZSBkcml2ZSBzdGF0dXMuIEdNVF9EUl9PUEVOCisJaXMgc2V0IGlmIHRoZXJlIGlzIG5vIHRhcGUgaW4gdGhlIGRyaXZlLiBHTVRfRU9EIG1lYW5zIGVpdGhlcgorCWVuZCBvZiByZWNvcmRlZCBkYXRhIG9yIGVuZCBvZiB0YXBlLiBHTVRfRU9UIG1lYW5zIGVuZCBvZiB0YXBlLgorCisKK01JU0NFTExBTkVPVVMgQ09NUElMRSBPUFRJT05TCisKK1RoZSByZWNvdmVyZWQgd3JpdGUgZXJyb3JzIGFyZSBjb25zaWRlcmVkIGZhdGFsIGlmIFNUX1JFQ09WRVJFRF9XUklURV9GQVRBTAoraXMgZGVmaW5lZC4KKworVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhcGUgZGV2aWNlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZWZpbmUKK1NUX01BWF9UQVBFUy4gSWYgbW9yZSB0YXBlcyBhcmUgZGV0ZWN0ZWQgYXQgZHJpdmVyIGluaXRpYWxpemF0aW9uLCB0aGUKK21heGltdW0gaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCisKK0ltbWVkaWF0ZSByZXR1cm4gZnJvbSB0YXBlIHBvc2l0aW9uaW5nIFNDU0kgY29tbWFuZHMgY2FuIGJlIGVuYWJsZWQgYnkKK2RlZmluaW5nIFNUX05PV0FJVC4gSWYgdGhpcyBpcyBkZWZpbmVkLCB0aGUgdXNlciBzaG91bGQgdGFrZSBjYXJlIHRoYXQKK3RoZSBuZXh0IHRhcGUgb3BlcmF0aW9uIGlzIG5vdCBzdGFydGVkIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lIGhhcworZmluaXNoZWQuIFRoZSBkcml2ZXMgYW5kIFNDU0kgYWRhcHRlcnMgc2hvdWxkIGhhbmRsZSB0aGlzIGNvbmRpdGlvbgorZ3JhY2VmdWxseSwgYnV0IHNvbWUgZHJpdmUvYWRhcHRlciBjb21iaW5hdGlvbnMgYXJlIGtub3duIHRvIGhhbmcgdGhlCitTQ1NJIGJ1cyBpbiB0aGlzIGNhc2UuCisKK1RoZSBNVEVPTSBjb21tYW5kIGlzIGJ5IGRlZmF1bHQgaW1wbGVtZW50ZWQgYXMgc3BhY2luZyBvdmVyIDMyNzY3CitmaWxlbWFya3MuIFdpdGggdGhpcyBtZXRob2QgdGhlIGZpbGUgbnVtYmVyIGluIHRoZSBzdGF0dXMgaXMKK2NvcnJlY3QuIFRoZSB1c2VyIGNhbiByZXF1ZXN0IHVzaW5nIGRpcmVjdCBzcGFjaW5nIHRvIEVPRCBieSBzZXR0aW5nCitTVF9GQVNUX0VPTSAxIChvciB1c2luZyB0aGUgTVRfU1RfT1BUSU9OUyBpb2N0bCkuIEluIHRoaXMgY2FzZSB0aGUgZmlsZQorbnVtYmVyIHdpbGwgYmUgaW52YWxpZC4KKworV2hlbiB1c2luZyByZWFkIGFoZWFkIG9yIGJ1ZmZlcmVkIHdyaXRlcyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBmaWxlCittYXkgbm90IGJlIGNvcnJlY3QgYWZ0ZXIgdGhlIGZpbGUgaXMgY2xvc2VkIChjb3JyZWN0IHBvc2l0aW9uIG1heQorcmVxdWlyZSBiYWNrc3BhY2luZyBvdmVyIG1vcmUgdGhhbiBvbmUgcmVjb3JkKS4gVGhlIGNvcnJlY3QgcG9zaXRpb24KK3dpdGhpbiBmaWxlIGNhbiBiZSBvYnRhaW5lZCBpZiBTVF9JTl9GSUxFX1BPUyBpcyBkZWZpbmVkIGF0IGNvbXBpbGUKK3RpbWUgb3IgdGhlIE1UX1NUX0NBTl9CU1IgYml0IGlzIHNldCBmb3IgdGhlIGRyaXZlIHdpdGggYW4gaW9jdGwuCisoVGhlIGRyaXZlciBhbHdheXMgYmFja3Mgb3ZlciBhIGZpbGVtYXJrIGNyb3NzZWQgYnkgcmVhZCBhaGVhZCBpZiB0aGUKK3VzZXIgZG9lcyBub3QgcmVxdWVzdCBkYXRhIHRoYXQgZmFyLikKKworCitERUJVR0dJTkcgSElOVFMKKworVG8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcywgZWRpdCBzdC5jIGFuZCAjZGVmaW5lIERFQlVHIDEuIEFzIHNlZW4KK2Fib3ZlLCBkZWJ1Z2dpbmcgY2FuIGJlIHN3aXRjaGVkIG9mZiB3aXRoIGFuIGlvY3RsIGlmIGRlYnVnZ2luZyBpcworY29tcGlsZWQgaW50byB0aGUgZHJpdmVyLiBUaGUgZGVidWdnaW5nIG91dHB1dCBpcyBub3Qgdm9sdW1pbm91cy4KKworSWYgdGhlIHRhcGUgc2VlbXMgdG8gaGFuZywgSSB3b3VsZCBiZSB2ZXJ5IGludGVyZXN0ZWQgdG8gaGVhciB3aGVyZQordGhlIGRyaXZlciBpcyB3YWl0aW5nLiBXaXRoIHRoZSBjb21tYW5kICdwcyAtbCcgeW91IGNhbiBzZWUgdGhlIHN0YXRlCitvZiB0aGUgcHJvY2VzcyB1c2luZyB0aGUgdGFwZS4gSWYgdGhlIHN0YXRlIGlzIEQsIHRoZSBwcm9jZXNzIGlzCit3YWl0aW5nIGZvciBzb21ldGhpbmcuIFRoZSBmaWVsZCBXQ0hBTiB0ZWxscyB3aGVyZSB0aGUgZHJpdmVyIGlzCit3YWl0aW5nLiBJZiB5b3UgaGF2ZSB0aGUgY3VycmVudCBTeXN0ZW0ubWFwIGluIHRoZSBjb3JyZWN0IHBsYWNlIChpbgorL2Jvb3QgZm9yIHRoZSBwcm9jcHMgSSB1c2UpIG9yIGhhdmUgdXBkYXRlZCAvZXRjL3BzZGF0YWJhc2UgKGZvciBrbWVtCitwcyksIHBzIHdyaXRlcyB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgV0NIQU4gZmllbGQuIElmIG5vdCwgeW91IGhhdmUKK3RvIGxvb2sgdXAgdGhlIGZ1bmN0aW9uIGZyb20gU3lzdGVtLm1hcC4KKworTm90ZSBhbHNvIHRoYXQgdGhlIHRpbWVvdXRzIGFyZSB2ZXJ5IGxvbmcgY29tcGFyZWQgdG8gbW9zdCBvdGhlcgorZHJpdmVycy4gVGhpcyBtZWFucyB0aGF0IHRoZSBMaW51eCBkcml2ZXIgbWF5IGFwcGVhciBodW5nIGFsdGhvdWdoIHRoZQorcmVhbCByZWFzb24gaXMgdGhhdCB0aGUgdGFwZSBmaXJtd2FyZSBoYXMgZ290IGNvbmZ1c2VkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzUwMF9jcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjNTAwX2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZlYmNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzUwMF9jcy50eHQKQEAgLTAsMCArMSwyMyBAQAorVGhlIHN5bTUzYzUwMF9jcyBkcml2ZXIgb3JpZ2luYXRlZCBhcyBhbiBhZGQtb24gdG8gRGF2aWQgSGluZHMnIHBjbWNpYS1jcworcGFja2FnZSwgYW5kIHdhcyB3cml0dGVuIGJ5IFRvbSBDb3JuZXIgKHRjb3JuZXJAdmlhLmF0KS4gIEEgcmV3cml0ZSB3YXMKK2xvbmcgb3ZlcmR1ZSwgYW5kIHRoZSBjdXJyZW50IHZlcnNpb24gYWRkcmVzc2VzIHRoZSBmb2xsb3dpbmcgY29uY2VybnM6CisKKwkoMSkgZXh0ZW5zaXZlIGtlcm5lbCBjaGFuZ2VzIGJldHdlZW4gMi40IGFuZCAyLjYuCisJKDIpIGRlcHJlY2F0ZWQgUENNQ0lBIHN1cHBvcnQgb3V0c2lkZSB0aGUga2VybmVsLgorCitBbGwgdGhlIFVTRV9CSU9TIGNvZGUgaGFzIGJlZW4gcmlwcGVkIG91dC4gIEl0IHdhcyBuZXZlciB1c2VkLCBhbmQgY291bGQKK25vdCBoYXZlIHdvcmtlZCBhbnl3YXkuICBUaGUgVVNFX0RNQSBjb2RlIGlzIGxpa2V3aXNlIGdvbmUuICBNYW55IHRoYW5rcwordG8gWU9LT1RBIEhpcm9zaGkgKG5zcF9jcyBkcml2ZXIpIGFuZCBEYXZpZCBIaW5kcyAocWxvZ2ljX2NzIGRyaXZlcikgZm9yCit0aGUgY29kZSBmcmFnbWVudHMgSSBzaGFtZWxlc3NseSBhZGFwdGVkIGZvciB0aGlzIHdvcmsuICBUaGFua3MgYWxzbyB0bworQ2hyaXN0b3BoIEhlbGx3aWcgZm9yIGhpcyBwYXRpZW50IHR1dGVsYWdlIHdoaWxlIEkgc3R1bWJsZWQgYWJvdXQuCisKK1RoZSBTeW1iaW9zIExvZ2ljIDUzYzUwMCBjaGlwIHdhcyB1c2VkIGluIHRoZSAibmV3ZXIiIChjaXJjYSAxOTk3KSB2ZXJzaW9uCitvZiB0aGUgTmV3IE1lZGlhIEJ1cyBUb2FzdGVyIFBDTUNJQSBTQ1NJIGNvbnRyb2xsZXIuICBQcmVzdW1hYmx5IHRoZXJlIGFyZQorb3RoZXIgcHJvZHVjdHMgdXNpbmcgdGhpcyBjaGlwLCBidXQgSSd2ZSBuZXZlciBsYWlkIGV5ZXMgKG11Y2ggbGVzcyBoYW5kcykKK29uIG9uZS4KKworVGhyb3VnaCB0aGUgeWVhcnMsIHRoZXJlIGhhdmUgYmVlbiBhIG51bWJlciBvZiBkb3dubG9hZHMgb2YgdGhlIHBjbWNpYS1jcwordmVyc2lvbiBvZiB0aGlzIGRyaXZlciwgYW5kIEkgZ3Vlc3MgaXQgd29ya2VkIGZvciB0aG9zZSB1c2Vycy4gIEl0IHdvcmtlZAorZm9yIFRvbSBDb3JuZXIsIGFuZCBpdCB3b3JrcyBmb3IgbWUuICBZb3VyIG1pbGVhZ2Ugd2lsbCBwcm9iYWJseSB2YXJ5LgorCistLUJvYiBUcmFjeSAocmN0QGZydXMuY29tKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzh4eF8yLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1MTZjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M4eHhfMi50eHQKQEAgLTAsMCArMSwxMDU5IEBACitUaGUgTGludXggU1lNLTIgZHJpdmVyIGRvY3VtZW50YXRpb24gZmlsZQorCitXcml0dGVuIGJ5IEdlcmFyZCBSb3VkaWVyIDxncm91ZGllckBmcmVlLmZyPgorMjEgUnVlIENhcm5vdAorOTUxNzAgREVVSUwgTEEgQkFSUkUgLSBGUkFOQ0UKKworVXBkYXRlZCBieSBNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+CisKKzIwMDQtMTAtMDkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gIEludHJvZHVjdGlvbgorMi4gIFN1cHBvcnRlZCBjaGlwcyBhbmQgU0NTSSBmZWF0dXJlcworMy4gIEFkdmFudGFnZXMgb2YgdGhpcyBkcml2ZXIgZm9yIG5ld2VyIGNoaXBzLgorICAgICAgMy4xIE9wdGltaXplZCBTQ1NJIFNDUklQVFMKKyAgICAgIDMuMiBOZXcgZmVhdHVyZXMgYXBwZWFyZWQgd2l0aCB0aGUgU1lNNTNDODk2Cis0LiAgTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKzUuICBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworNi4gIFBhcml0eSBjaGVja2luZworNy4gIFByb2ZpbGluZyBpbmZvcm1hdGlvbgorOC4gIENvbnRyb2wgY29tbWFuZHMKKyAgICAgIDguMSAgU2V0IG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kCisgICAgICA4LjIgIFNldCB3aWRlIHNpemUKKyAgICAgIDguMyAgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICA4LjQgIFNldCBkZWJ1ZyBtb2RlCisgICAgICA4LjUgIFNldCBmbGFnIChub19kaXNjKQorICAgICAgOC42ICBTZXQgdmVyYm9zZSBsZXZlbAorICAgICAgOC43ICBSZXNldCBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorICAgICAgOC44ICBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKzkuICBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisgICAgICAxMC4xIFN5bnRheAorICAgICAgMTAuMiBBdmFpbGFibGUgYXJndW1lbnRzCisgICAgICAgICAgICAgMTAuMi4xICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAxMC4yLjIgIEJ1cnN0IG1heAorICAgICAgICAgICAgIDEwLjIuMyAgTEVEIHN1cHBvcnQKKyAgICAgICAgICAgICAxMC4yLjQgIERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgICAgICAgMTAuMi41ICBJUlEgbW9kZQorICAgICAgICAgICAgIDEwLjIuNiAgQ2hlY2sgU0NTSSBCVVMgCisgICAgICAgICAgICAgMTAuMi43ICBTdWdnZXN0IGEgZGVmYXVsdCBTQ1NJIGlkIGZvciBob3N0cworICAgICAgICAgICAgIDEwLjIuOCAgVmVyYm9zaXR5IGxldmVsCisgICAgICAgICAgICAgMTAuMi45ICBEZWJ1ZyBtb2RlCisgICAgICAgICAgICAgMTAuMi4xMCBTZXR0bGUgZGVsYXkKKyAgICAgICAgICAgICAxMC4yLjExIFNlcmlhbCBOVlJBTQorICAgICAgICAgICAgIDEwLjIuMTIgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgMTAuMyBDb252ZXJ0aW5nIGZyb20gb2xkIG9wdGlvbnMKKyAgICAgIDEwLjQgU0NTSSBCVVMgY2hlY2tpbmcgYm9vdCBvcHRpb24KKzExLiBTQ1NJIHByb2JsZW0gdHJvdWJsZXNob290aW5nCisgICAgICAxNS4xIFByb2JsZW0gdHJhY2tpbmcKKyAgICAgIDE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisxMi4gU2VyaWFsIE5WUkFNIHN1cHBvcnQgKGJ5IFJpY2hhcmQgV2FsdGhhbSkKKyAgICAgIDE3LjEgRmVhdHVyZXMKKyAgICAgIDE3LjIgU3ltYmlvcyBOVlJBTSBsYXlvdXQKKyAgICAgIDE3LjMgVGVrcmFtICBOVlJBTSBsYXlvdXQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBJbnRyb2R1Y3Rpb24KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIHdob2xlIFNZTTUzQzhYWCBmYW1pbHkgb2YgUENJLVNDU0kgY29udHJvbGxlcnMuCitJdCBhbHNvIHN1cHBvcnQgdGhlIHN1YnNldCBvZiBMU0k1M0MxMFhYIFBDSS1TQ1NJIGNvbnRyb2xsZXJzIHRoYXQgYXJlIGJhc2VkIAorb24gdGhlIFNZTTUzQzhYWCBTQ1JJUFRTIGxhbmd1YWdlLgorCitJdCByZXBsYWNlcyB0aGUgc3ltNTNjOHh4K25jcjUzYzh4eCBkcml2ZXIgYnVuZGxlIGFuZCBzaGFyZXMgaXRzIGNvcmUgY29kZSAKK3dpdGggdGhlIEZyZWVCU0QgU1lNLTIgZHJpdmVyLiBUaGUgYGdsdWUnIHRoYXQgYWxsb3dzIHRoaXMgZHJpdmVyIHRvIHdvcmsgCit1bmRlciBMaW51eCBpcyBjb250YWluZWQgaW4gMiBmaWxlcyBuYW1lZCBzeW1fZ2x1ZS5oIGFuZCBzeW1fZ2x1ZS5jLgorT3RoZXIgZHJpdmVycyBmaWxlcyBhcmUgaW50ZW5kZWQgbm90IHRvIGRlcGVuZCBvbiB0aGUgT3BlcmF0aW5nIFN5c3RlbSAKK29uIHdoaWNoIHRoZSBkcml2ZXIgaXMgdXNlZC4KKworVGhlIGhpc3Rvcnkgb2YgdGhpcyBkcml2ZXIgY2FuIGJlIHN1bW1lcml6ZWQgYXMgZm9sbG93czoKKworMTk5MzogbmNyIGRyaXZlciB3cml0dGVuIGZvciAzODZic2QgYW5kIEZyZWVCU0QgYnk6CisgICAgICAgICAgV29sZmdhbmcgU3RhbmdsbWVpZXIgICAgICAgIDx3b2xmQGNvbG9nbmUuZGU+CisgICAgICAgICAgU3RlZmFuIEVzc2VyICAgICAgICAgICAgICAgIDxzZUBtaS5VbmktS29lbG4uZGU+CisKKzE5OTY6IHBvcnQgb2YgdGhlIG5jciBkcml2ZXIgdG8gTGludXgtMS4yLjEzIGFuZCByZW5hbWUgaXQgbmNyNTNjOHh4LgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzE5OTg6IG5ldyBzeW01M2M4eHggZHJpdmVyIGZvciBMaW51eCBiYXNlZCBvbiBMT0FEL1NUT1JFIGluc3RydWN0aW9uIGFuZCB0aGF0IAorICAgICAgYWRkcyBmdWxsIHN1cHBvcnQgZm9yIHRoZSA4OTYgYnV0IGRyb3BzIHN1cHBvcnQgZm9yIGVhcmx5IE5DUiBkZXZpY2VzLgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzE5OTk6IHBvcnQgb2YgdGhlIHN5bTUzYzh4eCBkcml2ZXIgdG8gRnJlZUJTRCBhbmQgc3VwcG9ydCBmb3IgdGhlIExTSTUzQzEwMTAgCisgICAgICAzMyBNSHogYW5kIDY2TUh6IFVsdHJhLTMgY29udHJvbGxlcnMuIFRoZSBuZXcgZHJpdmVyIGlzIG5hbWVkIGBzeW0nLgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzIwMDA6IEFkZCBzdXBwb3J0IGZvciBlYXJseSBOQ1IgZGV2aWNlcyB0byBGcmVlQlNEIGBzeW0nIGRyaXZlci4KKyAgICAgIEJyZWFrIHRoZSBkcml2ZXIgaW50byBzZXZlcmFsIHNvdXJjZXMgYW5kIHNlcGFyYXRlIHRoZSBPUyBnbHVlIAorICAgICAgY29kZSBmcm9tIHRoZSBjb3JlIGNvZGUgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBPL1Nlcy4KKyAgICAgIFdyaXRlIGEgZ2x1ZSBjb2RlIGZvciBMaW51eC4KKyAgICAgICAgICBHZXJhcmQgUm91ZGllcgorCisyMDA0OiBSZW1vdmUgRnJlZUJTRCBjb21wYXRpYmlsaXR5IGNvZGUuICBSZW1vdmUgc3VwcG9ydCBmb3IgdmVyc2lvbnMgb2YKKyAgICAgIExpbnV4IGJlZm9yZSAyLjYuICBTdGFydCB1c2luZyBMaW51eCBmYWNpbGl0aWVzLgorCitUaGlzIFJFQURNRSBmaWxlIGFkZHJlc3NlcyB0aGUgTGludXggdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiBVbmRlciBGcmVlQlNELCAKK3RoZSBkcml2ZXIgZG9jdW1lbnRhdGlvbiBpcyB0aGUgc3ltLjggbWFuIHBhZ2UuCisKK0luZm9ybWF0aW9uIGFib3V0IG5ldyBjaGlwcyBpcyBhdmFpbGFibGUgYXQgTFNJTE9HSUMgd2ViIHNlcnZlcjoKKworICAgICAgICAgIGh0dHA6Ly93d3cubHNpbG9naWMuY29tLworCitTQ1NJIHN0YW5kYXJkIGRvY3VtZW50YXRpb25zIGFyZSBhdmFpbGFibGUgYXQgVDEwIHNpdGU6CisKKyAgICAgICAgICBodHRwOi8vd3d3LnQxMC5vcmcvCisKK1VzZWZ1bCBTQ1NJIHRvb2xzIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZ2RhbGUgYXJlIHBhcnQgb2YgbW9zdCBMaW51eCAKK2Rpc3RyaWJ1dGlvbnM6CisgICBzY3NpaW5mbzogICAgY29tbWFuZCBsaW5lIHRvb2wKKyAgIHNjc2ktY29uZmlnOiBUQ0wvVGsgdG9vbCB1c2luZyBzY3NpaW5mbworCisyLiBTdXBwb3J0ZWQgY2hpcHMgYW5kIFNDU0kgZmVhdHVyZXMKKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkIGZvciBhbGwgY2hpcHM6CisKKwlTeW5jaHJvbm91cyBuZWdvdGlhdGlvbgorCURpc2Nvbm5lY3Rpb24KKwlUYWdnZWQgY29tbWFuZCBxdWV1aW5nCisJU0NTSSBwYXJpdHkgY2hlY2tpbmcKKwlQQ0kgTWFzdGVyIHBhcml0eSBjaGVja2luZworCitPdGhlciBmZWF0dXJlcyBkZXBlbmRzIG9uIGNoaXAgY2FwYWJpbGl0aWVzLgorVGhlIGRyaXZlciBub3RhYmx5IHVzZXMgb3B0aW1pemVkIFNDUklQVFMgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IAorTE9BRC9TVE9SRSBhbmQgaGFuZGxlcyBQSEFTRSBNSVNNQVRDSCBmcm9tIFNDUklQVFMgZm9yIGRldmljZXMgdGhhdCAKK3N1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgZmVhdHVyZS4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBzb21lIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgY2hpcCBmYW1pbHkuCisKKyAgICAgICBPbiBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9BRC9TVE9SRSAgIEhBUkRXQVJFCitDaGlwICAgU0RNUyBCSU9TICAgV2lkZSAgIFNDU0kgc3RkLiAgIE1heC4gc3luYyAgIFNDUklQVFMgICAgICBQSEFTRSBNSVNNQVRDSAorLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0KKzgxMCAgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBOCis4MTBBICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODE1ICAgICAgICBZICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBOICAgICAgICAgICAgIE4KKzgyNSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgTiAgICAgICAgICAgICBOCis4MjVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDEwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODYwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QyMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg3NSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4NzVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDIwICAgIDQwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODc2ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg5NSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4OTVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk2ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NyAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisxNTEwRCAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTAxMCAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q4MCAgIDE2MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzEwMTBfNjYqICAgWSAgICAgICAgIFkgICAgICBGQVNUODAgICAxNjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisKKyogQ2hpcCBzdXBwb3J0cyAzM01IeiBhbmQgNjZNSHogUENJIGJ1cyBjbG9jay4KKworCitTdW1tYXJ5IG9mIG90aGVyIHN1cHBvcnRlZCBmZWF0dXJlczoKKworTW9kdWxlOiAgICAgICAgICAgICAgICBhbGxvdyB0byBsb2FkIHRoZSBkcml2ZXIKK01lbW9yeSBtYXBwZWQgSS9POiAgICAgaW5jcmVhc2VzIHBlcmZvcm1hbmNlCitDb250cm9sIGNvbW1hbmRzOiAgICAgIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHByb2MgU0NTSSBmaWxlIHN5c3RlbQorRGVidWdnaW5nIGluZm9ybWF0aW9uOiB3cml0dGVuIHRvIHN5c2xvZyAoZXhwZXJ0IG9ubHkpCitTY2F0dGVyIC8gZ2F0aGVyCitTaGFyZWQgaW50ZXJydXB0CitCb290IHNldHVwIGNvbW1hbmRzCitTZXJpYWwgTlZSQU06ICAgICAgICAgIFN5bWJpb3MgYW5kIFRla3JhbSBmb3JtYXRzCisKKworMy4gQWR2YW50YWdlcyBvZiB0aGlzIGRyaXZlciBmb3IgbmV3ZXIgY2hpcHMuCisKKzMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTLgorCitBbGwgY2hpcHMgZXhjZXB0IHRoZSA4MTAsIDgxNSBhbmQgODI1LCBzdXBwb3J0IG5ldyBTQ1NJIFNDUklQVFMgaW5zdHJ1Y3Rpb25zIAorbmFtZWQgTE9BRCBhbmQgU1RPUkUgdGhhdCBhbGxvdyB0byBtb3ZlIHVwIHRvIDEgRFdPUkQgZnJvbS90byBhbiBJTyByZWdpc3RlciAKK3RvL2Zyb20gbWVtb3J5IG11Y2ggZmFzdGVyIHRoYXQgdGhlIE1PVkUgTUVNT1JZIGluc3RydWN0aW9uIHRoYXQgaXMgc3VwcG9ydGVkIAorYnkgdGhlIDUzYzd4eCBhbmQgNTNjOHh4IGZhbWlseS4KKworVGhlIExPQUQvU1RPUkUgaW5zdHJ1Y3Rpb25zIHN1cHBvcnQgYWJzb2x1dGUgYW5kIERTQSByZWxhdGl2ZSBhZGRyZXNzaW5nIAorbW9kZXMuIFRoZSBTQ1NJIFNDUklQVFMgaGFkIGJlZW4gZW50aXJlbHkgcmV3cml0dGVuIHVzaW5nIExPQUQvU1RPUkUgaW5zdGVhZCAKK29mIE1PVkUgTUVNT1JZIGluc3RydWN0aW9ucy4KKworRHVlIHRvIHRoZSBsYWNrIG9mIExPQUQvU1RPUkUgU0NSSVBUUyBpbnN0cnVjdGlvbnMgYnkgZWFybGllciBjaGlwcywgdGhpcyAKK2RyaXZlciBhbHNvIGluY29ycG9yYXRlcyBhIGRpZmZlcmVudCBTQ1JJUFRTIHNldCBiYXNlZCBvbiBNRU1PUlkgTU9WRSwgaW4gCitvcmRlciB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBlbnRpcmUgU1lNNTNDOFhYIGNoaXBzIGZhbWlseS4KKworMy4yIE5ldyBmZWF0dXJlcyBhcHBlYXJlZCB3aXRoIHRoZSBTWU01M0M4OTYKKworTmV3ZXIgY2hpcHMgKHNlZSBhYm92ZSkgYWxsb3dzIGhhbmRsaW5nIG9mIHRoZSBwaGFzZSBtaXNtYXRjaCBjb250ZXh0IGZyb20gCitTQ1JJUFRTIChhdm9pZHMgdGhlIHBoYXNlIG1pc21hdGNoIGludGVycnVwdCB0aGF0IHN0b3BzIHRoZSBTQ1NJIHByb2Nlc3NvciAKK3VudGlsIHRoZSBDIGNvZGUgaGFzIHNhdmVkIHRoZSBjb250ZXh0IG9mIHRoZSB0cmFuc2ZlcikuCisKK1RoZSA4OTYgYW5kIDEwMTAgY2hpcHMgc3VwcG9ydCA2NCBiaXQgUENJIHRyYW5zYWN0aW9ucyBhbmQgYWRkcmVzc2luZywgCit3aGlsZSB0aGUgODk1QSBzdXBwb3J0cyAzMiBiaXQgUENJIHRyYW5zYWN0aW9ucyBhbmQgNjQgYml0IGFkZHJlc3NpbmcuCitUaGUgU0NSSVBUUyBwcm9jZXNzb3Igb2YgdGhlc2UgY2hpcHMgaXMgbm90IHRydWUgNjQgYml0LCBidXQgdXNlcyBzZWdtZW50IAorcmVnaXN0ZXJzIGZvciBiaXQgMzItNjMuIEFub3RoZXIgaW50ZXJlc3RpbmcgZmVhdHVyZSBpcyB0aGF0IExPQUQvU1RPUkUgCitpbnN0cnVjdGlvbnMgdGhhdCBhZGRyZXNzIHRoZSBvbi1jaGlwIFJBTSAoOGspIHJlbWFpbiBpbnRlcm5hbCB0byB0aGUgY2hpcC4KKworNC4gTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKworTWVtb3J5IG1hcHBlZCBJL08gaGFzIGxlc3MgbGF0ZW5jeSB0aGFuIG5vcm1hbCBJL08gYW5kIGlzIHRoZSByZWNvbW1lbmRlZCAKK3dheSBmb3IgZG9pbmcgSU8gd2l0aCBQQ0kgZGV2aWNlcy4gTWVtb3J5IG1hcHBlZCBJL08gc2VlbXMgdG8gd29yayBmaW5lIG9uIAorbW9zdCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgYnV0IHNvbWUgcG9vcmx5IGRlc2lnbmVkIGNoaXBzZXRzIG1heSBicmVhayAKK3RoaXMgZmVhdHVyZS4gQSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcm92aWRlZCBmb3Igbm9ybWFsIEkvTyB0byBiZSAKK3VzZWQgYnV0IHRoZSBkcml2ZXIgZGVmYXVsdHMgdG8gTU1JTy4KKworNS4gVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKworUXVldWluZyBtb3JlIHRoYW4gMSBjb21tYW5kIGF0IGEgdGltZSB0byBhIGRldmljZSBhbGxvd3MgaXQgdG8gcGVyZm9ybSAKK29wdGltaXphdGlvbnMgYmFzZWQgb24gYWN0dWFsIGhlYWQgcG9zaXRpb25zIGFuZCBpdHMgbWVjaGFuaWNhbCAKK2NoYXJhY3RlcmlzdGljcy4gVGhpcyBmZWF0dXJlIG1heSBhbHNvIHJlZHVjZSBhdmVyYWdlIGNvbW1hbmQgbGF0ZW5jeS4KK0luIG9yZGVyIHRvIHJlYWxseSBnYWluIGFkdmFudGFnZSBvZiB0aGlzIGZlYXR1cmUsIGRldmljZXMgbXVzdCBoYXZlIAorYSByZWFzb25hYmxlIGNhY2hlIHNpemUgKE5vIG1pcmFjbGUgaXMgdG8gYmUgZXhwZWN0ZWQgZm9yIGEgbG93LWVuZCAKK2hhcmQgZGlzayB3aXRoIDEyOCBLQiBvciBsZXNzKS4KK1NvbWUga293biBvbGQgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSBzdXBwb3J0IHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcuCitHZW5lcmFsbHksIGZpcm13YXJlIHJldmlzaW9ucyB0aGF0IGZpeCB0aGlzIGtpbmQgb2YgcHJvYmxlbXMgYXJlIGF2YWlsYWJsZSAKK2F0IHJlc3BlY3RpdmUgdmVuZG9yIHdlYi9mdHAgc2l0ZXMuCitBbGwgSSBjYW4gc2F5IGlzIHRoYXQgSSBuZXZlciBoYXZlIGhhZCBwcm9ibGVtIHdpdGggdGFnZ2VkIHF1ZXVpbmcgdXNpbmcgCit0aGlzIGRyaXZlciBhbmQgaXRzIHByZWRlY2Vzc29ycy4gSGFyZCBkaXNrcyB0aGF0IGJlaGF2ZWQgY29ycmVjdGx5IGZvciAKK21lIHVzaW5nIHRhZ2dlZCBjb21tYW5kcyBhcmUgdGhlIGZvbGxvd2luZzoKKworLSBJQk0gUzEyIDA2NjIKKy0gQ29ubmVyIDEwODBTCistIFF1YW50dW0gQXRsYXMgSQorLSBRdWFudHVtIEF0bGFzIElJCistIFNlYWdhdGUgQ2hlZXRhaCBJCistIFF1YW50dW0gVmlraW5nIElJCistIElCTSBEUlZTCistIFF1YW50dW0gQXRsYXMgSVYKKy0gU2VhZ2F0ZSBDaGVldGFoIElJCisKK0lmIHlvdXIgY29udHJvbGxlciBoYXMgTlZSQU0sIHlvdSBjYW4gY29uZmlndXJlIHRoaXMgZmVhdHVyZSBwZXIgdGFyZ2V0IAorZnJvbSB0aGUgdXNlciBzZXR1cCB0b29sLiBUaGUgVGVrcmFtIFNldHVwIHByb2dyYW0gYWxsb3dzIHRvIHR1bmUgdGhlIAorbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbW1hbmRzIHVwIHRvIDMyLiBUaGUgU3ltYmlvcyBTZXR1cCBvbmx5IGFsbG93cyAKK3RvIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKworVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0YWdnZWQgY29tbWFuZHMgcXVldWVkIHRvIGEgZGV2aWNlCitpcyBjdXJyZW50bHkgc2V0IHRvIDE2IGJ5IGRlZmF1bHQuICBUaGlzIHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0IFNDU0kKK2Rpc2tzLiAgV2l0aCBsYXJnZSBTQ1NJIGRpc2tzICg+PSAyR0IsIGNhY2hlID49IDUxMktCLCBhdmVyYWdlIHNlZWsgdGltZQorPD0gMTAgbXMpLCB1c2luZyBhIGxhcmdlciB2YWx1ZSBtYXkgZ2l2ZSBiZXR0ZXIgcGVyZm9ybWFuY2VzLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB1cCB0byAyNTUgY29tbWFuZHMgcGVyIGRldmljZSwgYW5kIGJ1dCB1c2luZyBtb3JlIHRoYW4gCis2NCBpcyBnZW5lcmFsbHkgbm90IHdvcnRoLXdoaWxlLCB1bmxlc3MgeW91IGFyZSB1c2luZyBhIHZlcnkgbGFyZ2UgZGlzayBvciAKK2Rpc2sgYXJyYXlzLiBJdCBpcyBub3RpY2VhYmxlIHRoYXQgbW9zdCBvZiByZWNlbnQgaGFyZCBkaXNrcyBzZWVtIG5vdCB0byAKK2FjY2VwdCBtb3JlIHRoYW4gNjQgc2ltdWx0YW5lb3VzIGNvbW1hbmRzLiBTbywgdXNpbmcgbW9yZSB0aGFuIDY0IHF1ZXVlZCAKK2NvbW1hbmRzIGlzIHByb2JhYmx5IGp1c3QgcmVzb3VyY2Ugd2FzdGluZy4KKworSWYgeW91ciBjb250cm9sbGVyIGRvZXMgbm90IGhhdmUgTlZSQU0gb3IgaWYgaXQgaXMgbWFuYWdlZCBieSB0aGUgU0RNUyAKK0JJT1MvU0VUVVAsIHlvdSBjYW4gY29uZmlndXJlIHRhZ2dlZCBxdWV1ZWluZyBmZWF0dXJlIGFuZCBkZXZpY2UgcXVldWUgCitkZXB0aHMgZnJvbSB0aGUgYm9vdCBjb21tYW5kLWxpbmUuIEZvciBleGFtcGxlOgorCisgIHN5bTUzYzh4eD10YWdzOjQvdDJ0M3ExNS10NHE3L3QxdTBxMzIKKword2lsbCBzZXQgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlIGRlcHRocyBhcyBmb2xsb3c6CisKKy0gdGFyZ2V0IDIgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+IDE1CistIHRhcmdldCAzICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAxNQorLSB0YXJnZXQgNCAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gIDcKKy0gdGFyZ2V0IDEgIGx1biAwICAgICBvbiBjb250cm9sbGVyIDEgLS0+IDMyCistIGFsbCBvdGhlciB0YXJnZXQvbHVuICAgICAgICAgICAgICAgIC0tPiAgNAorCitJbiBzb21lIHNwZWNpYWwgY29uZGl0aW9ucywgc29tZSBTQ1NJIGRpc2sgZmlybXdhcmVzIG1heSByZXR1cm4gYQorUVVFVUUgRlVMTCBzdGF0dXMgZm9yIGEgU0NTSSBjb21tYW5kLiBUaGlzIGJlaGF2aW91ciBpcyBtYW5hZ2VkIGJ5IHRoZQorZHJpdmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgaGV1cmlzdGljOgorCistIEVhY2ggdGltZSBhIFFVRVVFIEZVTEwgc3RhdHVzIGlzIHJldHVybmVkLCB0YWdnZWQgcXVldWUgZGVwdGggaXMgcmVkdWNlZCAKKyAgdG8gdGhlIGFjdHVhbCBudW1iZXIgb2YgZGlzY29ubmVjdGVkIGNvbW1hbmRzLiAKKworLSBFdmVyeSAyMDAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBTQ1NJIGNvbW1hbmRzLCBpZiBhbGxvd2VkIGJ5IHRoZQorICBjdXJyZW50IGxpbWl0LCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVhYmxlIGNvbW1hbmRzIGlzIGluY3JlbWVudGVkLgorCitTaW5jZSBRVUVVRSBGVUxMIHN0YXR1cyByZWNlcHRpb24gYW5kIGhhbmRsaW5nIGlzIHJlc291cmNlIHdhc3RpbmcsIHRoZSAKK2RyaXZlciBub3RpZmllcyBieSBkZWZhdWx0IHRoaXMgcHJvYmxlbSB0byB1c2VyIGJ5IGluZGljYXRpbmcgdGhlIGFjdHVhbCAKK251bWJlciBvZiBjb21tYW5kcyB1c2VkIGFuZCB0aGVpciBzdGF0dXMsIGFzIHdlbGwgYXMgaXRzIGRlY2lzaW9uIG9uIHRoZSAKK2RldmljZSBxdWV1ZSBkZXB0aCBjaGFuZ2UuCitUaGUgaGV1cmlzdGljIHVzZWQgYnkgdGhlIGRyaXZlciBpbiBoYW5kbGluZyBRVUVVRSBGVUxMIGVuc3VyZXMgdGhhdCB0aGUgCitpbXBhY3Qgb24gcGVyZm9ybWFuY2VzIGlzIG5vdCB0b28gYmFkLiBZb3UgY2FuIGdldCByaWQgb2YgdGhlIG1lc3NhZ2VzIGJ5IAorc2V0dGluZyB2ZXJib3NlIGxldmVsIHRvIHplcm8sIGFzIGZvbGxvdzoKKworMXN0IG1ldGhvZDogYm9vdCB5b3VyIHN5c3RlbSB1c2luZyAnc3ltNTNjOHh4PXZlcmI6MCcgb3B0aW9uLgorMm5kIG1ldGhvZDogYXBwbHkgInNldHZlcmJvc2UgMCIgY29udHJvbCBjb21tYW5kIHRvIHRoZSBwcm9jIGZzIGVudHJ5IAorICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB5b3VyIGNvbnRyb2xsZXIgYWZ0ZXIgYm9vdC11cC4KKworNi4gUGFyaXR5IGNoZWNraW5nCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgU0NTSSBwYXJpdHkgY2hlY2tpbmcgYW5kIFBDSSBidXMgbWFzdGVyIHBhcml0eQorY2hlY2tpbmcuICBUaGVzZSBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHNhZmUKK2RhdGEgdHJhbnNmZXJzLiAgU29tZSBmbGF3ZWQgZGV2aWNlcyBvciBtb3RoZXIgYm9hcmRzIG1heSBoYXZlIHByb2JsZW1zCit3aXRoIHBhcml0eS4gIFRoZSBvcHRpb25zIHRvIGRlZmVhdCBwYXJpdHkgY2hlY2tpbmcgaGF2ZSBiZWVuIHJlbW92ZWQKK2Zyb20gdGhlIGRyaXZlci4KKworNy4gUHJvZmlsaW5nIGluZm9ybWF0aW9uCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgcHJvZmlsaW5nIGluZm9ybWF0aW9ucyBhcyBkaWQgaXRzIHByZWRlY2Vzc29ycy4KK1RoaXMgZmVhdHVyZSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBjb2RlLiAKK0FzIHRoZSBkcml2ZXIgY29kZSBnb3QgbW9yZSBjb21wbGV4LCBJIGhhdmUgZGVjaWRlZCB0byByZW1vdmUgZXZlcnl0aGluZyAKK3RoYXQgZGlkbid0IHNlZW0gYWN0dWFsbHkgdXNlZnVsLgorCis4LiBDb250cm9sIGNvbW1hbmRzCisKK0NvbnRyb2wgY29tbWFuZHMgY2FuIGJlIHNlbnQgdG8gdGhlIGRyaXZlciB3aXRoIHdyaXRlIG9wZXJhdGlvbnMgdG8KK3RoZSBwcm9jIFNDU0kgZmlsZSBzeXN0ZW0uIFRoZSBnZW5lcmljIGNvbW1hbmQgc3ludGF4IGlzIHRoZQorZm9sbG93aW5nOgorCisgICAgICBlY2hvICI8dmVyYj4gPHBhcmFtZXRlcnM+IiA+L3Byb2Mvc2NzaS9zeW01M2M4eHgvMAorICAgICAgKGFzc3VtZXMgY29udHJvbGxlciBudW1iZXIgaXMgMCkKKworVXNpbmcgImFsbCIgZm9yICI8dGFyZ2V0PiIgcGFyYW1ldGVyIHdpdGggdGhlIGNvbW1hbmRzIGJlbG93IHdpbGwKK2FwcGx5IHRvIGFsbCB0YXJnZXRzIG9mIHRoZSBTQ1NJIGNoYWluIChleGNlcHQgdGhlIGNvbnRyb2xsZXIpLgorCitBdmFpbGFibGUgY29tbWFuZHM6CisKKzguMSBTZXQgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QgZmFjdG9yCisKKyAgICBzZXRzeW5jIDx0YXJnZXQ+IDxwZXJpb2QgZmFjdG9yPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgcGVyaW9kOiAgICBtaW5pbXVtIHN5bmNocm9ub3VzIHBlcmlvZC4KKyAgICAgICAgICAgICAgIE1heGltdW0gc3BlZWQgPSAxMDAwLyg0KnBlcmlvZCBmYWN0b3IpIGV4Y2VwdCBmb3Igc3BlY2lhbAorICAgICAgICAgICAgICAgY2FzZXMgYmVsb3cuCisKKyAgICBTcGVjaWZ5IGEgcGVyaW9kIG9mIDAsIHRvIGZvcmNlIGFzeW5jaHJvbm91cyB0cmFuc2ZlciBtb2RlLgorCisgICAgICAgOSBtZWFucyAxMi41IG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDEwIG1lYW5zIDI1IG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDExIG1lYW5zIDMwIG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDEyIG1lYW5zIDUwIG5hbm8tc2Vjb25kcyBzeW5jaHJvbm91cyBwZXJpb2QKKworOC4yIFNldCB3aWRlIHNpemUKKworICAgIHNldHdpZGUgPHRhcmdldD4gPHNpemU+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBzaXplOiAgICAgIDA9OCBiaXRzLCAxPTE2Yml0cworCis4LjMgU2V0IG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgCisgICAgc2V0dGFncyA8dGFyZ2V0PiA8dGFncz4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHRhZ3M6ICAgICAgbnVtYmVyIG9mIGNvbmN1cnJlbnQgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgICAgICAgICBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gY29uZmlndXJlZCAoZGVmYXVsdDogMTYpCisKKzguNCBTZXQgZGVidWcgbW9kZQorCisgICAgc2V0ZGVidWcgPGxpc3Qgb2YgZGVidWcgZmxhZ3M+CisKKyAgICBBdmFpbGFibGUgZGVidWcgZmxhZ3M6CisgICAgICAgIGFsbG9jOiAgIHByaW50IGluZm8gYWJvdXQgbWVtb3J5IGFsbG9jYXRpb25zIChjY2IsIGxjYikKKyAgICAgICAgcXVldWU6ICAgcHJpbnQgaW5mbyBhYm91dCBpbnNlcnRpb25zIGludG8gdGhlIGNvbW1hbmQgc3RhcnQgcXVldWUKKyAgICAgICAgcmVzdWx0OiAgcHJpbnQgc2Vuc2UgZGF0YSBvbiBDSEVDSyBDT05ESVRJT04gc3RhdHVzCisgICAgICAgIHNjYXR0ZXI6IHByaW50IGluZm8gYWJvdXQgdGhlIHNjYXR0ZXIgcHJvY2VzcworICAgICAgICBzY3JpcHRzOiBwcmludCBpbmZvIGFib3V0IHRoZSBzY3JpcHQgYmluZGluZyBwcm9jZXNzCisJdGlueTogICAgcHJpbnQgbWluaW1hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKwl0aW1pbmc6ICBwcmludCB0aW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIE5DUiBjaGlwCisJbmVnbzogICAgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgU0NTSSBuZWdvdGlhdGlvbnMKKwlwaGFzZTogICBwcmludCBpbmZvcm1hdGlvbiBvbiBzY3JpcHQgaW50ZXJydXB0aW9ucworCisgICAgVXNlICJzZXRkZWJ1ZyIgd2l0aCBubyBhcmd1bWVudCB0byByZXNldCBkZWJ1ZyBmbGFncy4KKworCis4LjUgU2V0IGZsYWcgKG5vX2Rpc2MpCisgCisgICAgc2V0ZmxhZyA8dGFyZ2V0PiA8ZmxhZz4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorCisgICAgRm9yIHRoZSBtb21lbnQsIG9ubHkgb25lIGZsYWcgaXMgYXZhaWxhYmxlOgorCisgICAgICAgIG5vX2Rpc2M6ICAgbm90IGFsbG93IHRhcmdldCB0byBkaXNjb25uZWN0LgorCisgICAgRG8gbm90IHNwZWNpZnkgYW55IGZsYWcgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIGZsYWcuIEZvciBleGFtcGxlOgorICAgIC0gc2V0ZmxhZyA0CisgICAgICB3aWxsIHJlc2V0IG5vX2Rpc2MgZmxhZyBmb3IgdGFyZ2V0IDQsIHNvIHdpbGwgYWxsb3cgaXQgZGlzY29ubmVjdGlvbnMuCisgICAgLSBzZXRmbGFnIGFsbAorICAgICAgd2lsbCBhbGxvdyBkaXNjb25uZWN0aW9uIGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgU0NTSSBidXMuCisKKworOC42IFNldCB2ZXJib3NlIGxldmVsCisKKyAgICBzZXR2ZXJib3NlICNsZXZlbAorCisgICAgVGhlIGRyaXZlciBkZWZhdWx0IHZlcmJvc2UgbGV2ZWwgaXMgMS4gVGhpcyBjb21tYW5kIGFsbG93cyB0byBjaGFuZ2UgCisgICAgdGggZHJpdmVyIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4KKworOC43IFJlc2V0IGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICByZXNldGRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQlVTIERFVklDRSBSRVNFVCBtZXNzYWdlIHRvIHRoZSB0YXJnZXQuCisKKzguOCBBYm9ydCBhbGwgdGFza3Mgb2YgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKworICAgIGNsZWFyZGV2IDx0YXJnZXQ+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIHNlbmQgYSBBQk9SVCBtZXNzYWdlIHRvIGFsbCB0aGUgbG9naWNhbCB1bml0cyAKKyAgICBvZiB0aGUgdGFyZ2V0LgorCisKKzkuIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworCitVbmRlciBrZXJuZWwgY29uZmlndXJhdGlvbiB0b29scyAobWFrZSBtZW51Y29uZmlnLCBmb3IgZXhhbXBsZSksIGl0IGlzIAorcG9zc2libGUgdG8gY2hhbmdlIHNvbWUgZGVmYXVsdCBkcml2ZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorSWYgdGhlIGZpcm13YXJlIG9mIGFsbCB5b3VyIGRldmljZXMgaXMgcGVyZmVjdCBlbm91Z2gsIGFsbCB0aGUKK2ZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGNhbiBiZSBlbmFibGVkIGF0IHN0YXJ0LXVwLiBIb3dldmVyLAoraWYgb25seSBvbmUgaGFzIGEgZmxhdyBmb3Igc29tZSBTQ1NJIGZlYXR1cmUsIHlvdSBjYW4gZGlzYWJsZSB0aGUKK3N1cHBvcnQgYnkgdGhlIGRyaXZlciBvZiB0aGlzIGZlYXR1cmUgYXQgbGludXggc3RhcnQtdXAgYW5kIGVuYWJsZQordGhpcyBmZWF0dXJlIGFmdGVyIGJvb3QtdXAgb25seSBmb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQgc2FmZWx5LgorCitDb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6CisKK1VzZSBub3JtYWwgSU8gICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgYW5zd2VyOiBuKQorICAgIEFuc3dlciAieSIgaWYgeW91IHN1c3BlY3QgeW91ciBtb3RoZXIgYm9hcmQgdG8gbm90IGFsbG93IG1lbW9yeSBtYXBwZWQgSS9PLgorICAgIE1heSBzbG93IGRvd24gcGVyZm9ybWFuY2UgYSBsaXR0bGUuCisKK0RlZmF1bHQgdGFnZ2VkIGNvbW1hbmQgcXVldWUgZGVwdGggICAgKGRlZmF1bHQgYW5zd2VyOiAxNikKKyAgICBFbnRlcmluZyAwIGRlZmF1bHRzIHRvIHRhZ2dlZCBjb21tYW5kcyBub3QgYmVpbmcgdXNlZC4KKyAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lLgorCitNYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29tbWFuZHMgICAgIChkZWZhdWx0IGFuc3dlcjogMzIpCisgICAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMgCisgICAgdGhhdCBjYW4gYmUgcXVldWVkIHRvIGEgZGV2aWNlLiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgaXMgMjU1LgorCitTeW5jaHJvbm91cyB0cmFuc2ZlcnMgZnJlcXVlbmN5ICAgICAgIChkZWZhdWx0IGFuc3dlcjogODApCisgICAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBmcmVxdWVuY3kgaW4gTUh6IHRoZSBkcml2ZXIgCisgICAgd2lsbCB1c2UgYXQgYm9vdCB0aW1lIGZvciBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG5lZ290aWF0aW9ucy4KKyAgICAwIG1lYW5zICJhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMiLgorCisxMC4gQm9vdCBzZXR1cCBjb21tYW5kcworCisxMC4xIFN5bnRheAorCitTZXR1cCBjb21tYW5kcyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgZWl0aGVyIGF0IGJvb3QgdGltZSBvciBhcworcGFyYW1ldGVycyB0byBtb2Rwcm9iZSwgYXMgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisKK0V4YW1wbGUgb2YgYm9vdCBzZXR1cCBjb21tYW5kIHVuZGVyIGxpbG8gcHJvbXB0OgorCitsaWxvOiBsaW51eCByb290PS9kZXYvc2RhMiBzeW01M2M4eHguY21kX3Blcl9sdW49NCBzeW01M2M4eHguc3luYz0xMCBzeW01M2M4eHguZGVidWc9MHgyMDAKKworLSBlbmFibGUgdGFnZ2VkIGNvbW1hbmRzLCB1cCB0byA0IHRhZ2dlZCBjb21tYW5kcyBxdWV1ZWQuCistIHNldCBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBzcGVlZCB0byAxMCBNZWdhLXRyYW5zZmVycyAvIHNlY29uZC4KKy0gc2V0IERFQlVHX05FR08gZmxhZy4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgaW5zdGFsbCB0aGUgZHJpdmVyIG1vZHVsZSB3aXRoIHRoZSBzYW1lCitvcHRpb25zIGFzIGFib3ZlLgorCisgICAgbW9kcHJvYmUgc3ltNTNjOHh4IGNtZF9wZXJfbHVuPTQgc3luYz0xMCBkZWJ1Zz0weDIwMAorCisxMC4yIEF2YWlsYWJsZSBhcmd1bWVudHMKKworMTAuMi4xICBEZWZhdWx0IG51bWJlciBvZiB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgY21kX3Blcl9sdW49MCAob3IgY21kX3Blcl9sdW49MSkgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBkaXNhYmxlZAorICAgICAgICBjbWRfcGVyX2x1bj0jdGFncyAoI3RhZ3MgPiAxKSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGVuYWJsZWQKKyAgI3RhZ3Mgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIG1heCBxdWV1ZWQgY29tbWFuZHMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCisKKzEwLjIuMiAgRGV0YWlsZWQgY29udHJvbCBvZiB0YWdnZWQgY29tbWFuZHMKKyAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgY29tbWFuZCBxdWV1ZSBkZXB0aCBmb3IgZWFjaCBkZXZpY2UgCisgIHRoYXQgc3VwcG9ydHMgdGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcuCisgIEV4YW1wbGU6CisgICAgICB0YWdfY3RybD0xMC90MnQzcTE2LXQ1cTI0L3QxdTJxMzIKKyAgd2lsbCBzZXQgZGV2aWNlcyBxdWV1ZSBkZXB0aCBhcyBmb2xsb3c6CisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICMyIGFuZCB0YXJnZXQgIzMgICAgICAgICAgICAgICAgICAtPiAxNiBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMCB0YXJnZXQgIzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IDI0IGNvbW1hbmRzLAorICAgICAgLSBjb250cm9sbGVyICMxIHRhcmdldCAjMSBsb2dpY2FsIHVuaXQgIzIgICAgICAgICAgICAgICAgLT4gMzIgY29tbWFuZHMsCisgICAgICAtIGFsbCBvdGhlciBsb2dpY2FsIHVuaXRzIChhbGwgdGFyZ2V0cywgYWxsIGNvbnRyb2xsZXJzKSAtPiAxMCBjb21tYW5kcy4KKworMTAuMi4zIEJ1cnN0IG1heAorICAgICAgICBidXJzdD0wICAgIGJ1cnN0IGRpc2FibGVkCisgICAgICAgIGJ1cnN0PTI1NSAgZ2V0IGJ1cnN0IGxlbmd0aCBmcm9tIGluaXRpYWwgSU8gcmVnaXN0ZXIgc2V0dGluZ3MuCisgICAgICAgIGJ1cnN0PSN4ICAgYnVyc3QgZW5hYmxlZCAoMTw8I3ggYnVyc3QgdHJhbnNmZXJzIG1heCkKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCBpcyBsb2cgYmFzZSAyIG9mIHRoZSBidXJzdCB0cmFuc2ZlcnMgbWF4LgorICBCeSBkZWZhdWx0IHRoZSBkcml2ZXIgdXNlcyB0aGUgbWF4aW11bSB2YWx1ZSBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAuCisKKzEwLjIuNCBMRUQgc3VwcG9ydAorICAgICAgICBsZWQ9MSAgICAgIGVuYWJsZSAgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkPTAgICAgICBkaXNhYmxlIExFRCBzdXBwb3J0CisgIERvIG5vdCBlbmFibGUgTEVEIHN1cHBvcnQgaWYgeW91ciBzY3NpIGJvYXJkIGRvZXMgbm90IHVzZSBTRE1TIEJJT1MuCisgIChTZWUgJ0NvbmZpZ3VyYXRpb24gcGFyYW1ldGVycycpCisKKzEwLjIuNCBEaWZmZXJlbnRpYWwgbW9kZQorICAgICAgICBkaWZmPTAJbmV2ZXIgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmPTEJc2V0IHVwIGRpZmYgbW9kZSBpZiBCSU9TIHNldCBpdAorICAgICAgICBkaWZmPTIJYWx3YXlzIHNldCB1cCBkaWZmIG1vZGUKKyAgICAgICAgZGlmZj0zCXNldCBkaWZmIG1vZGUgaWYgR1BJTzMgaXMgbm90IHNldAorCisxMC4yLjUgSVJRIG1vZGUKKyAgICAgICAgaXJxbT0wICAgICBhbHdheXMgb3BlbiBkcmFpbgorICAgICAgICBpcnFtPTEgICAgIHNhbWUgYXMgaW5pdGlhbCBzZXR0aW5ncyAoYXNzdW1lZCBCSU9TIHNldHRpbmdzKQorICAgICAgICBpcnFtPTIgICAgIGFsd2F5cyB0b3RlbSBwb2xlCisKKzEwLjIuNiBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgYnVzY2hrPTxvcHRpb24gYml0cz4KKworICAgIEF2YWlsYWJsZSBvcHRpb24gYml0czoKKyAgICAgICAgMHgwOiAgIE5vIGNoZWNrLgorICAgICAgICAweDE6ICAgQ2hlY2sgYW5kIGRvIG5vdCBhdHRhY2ggdGhlIGNvbnRyb2xsZXIgb24gZXJyb3IuICAKKyAgICAgICAgMHgyOiAgIENoZWNrIGFuZCBqdXN0IHdhcm4gb24gZXJyb3IuCisKKzEwLjIuNyBTdWdnZXN0IGEgZGVmYXVsdCBTQ1NJIGlkIGZvciBob3N0cworICAgICAgICBob3N0aWQ9MjU1CW5vIGlkIHN1Z2dlc3RlZC4KKyAgICAgICAgaG9zdGlkPSN4ICAgKDAgPCB4IDwgNykgeCBzdWdnZXN0ZWQgZm9yIGhvc3RzIFNDU0kgaWQuCisKKyAgICBJZiBhIGhvc3QgU0NTSSBpZCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgTlZSQU0sIHRoZSBkcml2ZXIgd2lsbCBpZ25vcmUgCisgICAgYW55IHZhbHVlIHN1Z2dlc3RlZCBhcyBib290IG9wdGlvbi4gT3RoZXJ3aXNlLCBpZiBhIHN1Z2dlc3RlZCB2YWx1ZSAKKyAgICBkaWZmZXJlbnQgZnJvbSAyNTUgaGFzIGJlZW4gc3VwcGxpZWQsIGl0IHdpbGwgdXNlIGl0LiBPdGhlcndpc2UsIGl0IHdpbGwgCisgICAgdHJ5IHRvIGRlZHVjZSB0aGUgdmFsdWUgcHJldmlvdXNseSBzZXQgaW4gdGhlIGhhcmR3YXJlIGFuZCB1c2UgdmFsdWUgCisgICAgNyBpZiB0aGUgaGFyZHdhcmUgdmFsdWUgaXMgemVyby4KKworMTAuMi44ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgdmVyYj0wICAgICBtaW5pbWFsCisgICAgICAgIHZlcmI9MSAgICAgbm9ybWFsCisgICAgICAgIHZlcmI9MiAgICAgdG9vIG11Y2gKKworMTAuMi45IERlYnVnIG1vZGUKKyAgICAgICAgZGVidWc9MAkgY2xlYXIgZGVidWcgZmxhZ3MKKyAgICAgICAgZGVidWc9I3ggICBzZXQgZGVidWcgZmxhZ3MKKyAgI3ggaXMgYW4gaW50ZWdlciB2YWx1ZSBjb21iaW5pbmcgdGhlIGZvbGxvd2luZyBwb3dlci1vZi0yIHZhbHVlczoKKyAgREVCVUdfQUxMT0MgICAgICAgMHgxCisgIERFQlVHX1BIQVNFICAgICAgIDB4MgorICBERUJVR19QT0xMICAgICAgICAweDQKKyAgREVCVUdfUVVFVUUgICAgICAgMHg4CisgIERFQlVHX1JFU1VMVCAgICAgMHgxMAorICBERUJVR19TQ0FUVEVSICAgIDB4MjAKKyAgREVCVUdfU0NSSVBUICAgICAweDQwCisgIERFQlVHX1RJTlkgICAgICAgMHg4MAorICBERUJVR19USU1JTkcgICAgMHgxMDAKKyAgREVCVUdfTkVHTyAgICAgIDB4MjAwCisgIERFQlVHX1RBR1MgICAgICAweDQwMAorICBERUJVR19GUkVFWkUgICAgMHg4MDAKKyAgREVCVUdfUkVTVEFSVCAgMHgxMDAwCisKKyAgWW91IGNhbiBwbGF5IHNhZmVseSB3aXRoIERFQlVHX05FR08uIEhvd2V2ZXIsIHNvbWUgb2YgdGhlc2UgZmxhZ3MgbWF5IAorICBnZW5lcmF0ZSBidW5jaGVzIG9mIHN5c2xvZyBtZXNzYWdlcy4gCisKKzEwLjIuMTAgU2V0dGxlIGRlbGF5CisgICAgICAgIHNldHRsZT1uCWRlbGF5IGZvciBuIHNlY29uZHMKKworICBBZnRlciBhIGJ1cyByZXNldCwgdGhlIGRyaXZlciB3aWxsIGRlbGF5IGZvciBuIHNlY29uZHMgYmVmb3JlIHRhbGtpbmcKKyAgdG8gYW55IGRldmljZSBvbiB0aGUgYnVzLiAgVGhlIGRlZmF1bHQgaXMgMyBzZWNvbmRzIGFuZCBzYWZlIG1vZGUgd2lsbAorICBkZWZhdWx0IGl0IHRvIDEwLgorCisxMC4yLjExIFNlcmlhbCBOVlJBTQorCU5COiBvcHRpb24gbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKyAgICAgICAgbnZyYW09biAgICAgZG8gbm90IGxvb2sgZm9yIHNlcmlhbCBOVlJBTQorICAgICAgICBudnJhbT15ICAgICB0ZXN0IGNvbnRyb2xsZXJzIGZvciBvbmJvYXJkIHNlcmlhbCBOVlJBTQorICAgICAgICAoYWx0ZXJuYXRlIGJpbmFyeSBmb3JtKQorICAgICAgICBudnJhbT08Yml0cyBvcHRpb25zPgorICAgICAgICAweDAxICAgbG9vayBmb3IgTlZSQU0gIChlcXVpdmFsZW50IHRvIG52cmFtPXkpCisgICAgICAgIDB4MDIgICBpZ25vcmUgTlZSQU0gIlN5bmNocm9ub3VzIG5lZ290aWF0aW9uIiBwYXJhbWV0ZXJzIGZvciBhbGwgZGV2aWNlcworICAgICAgICAweDA0ICAgaWdub3JlIE5WUkFNICJXaWRlIG5lZ290aWF0aW9uIiAgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgICAweDA4ICAgaWdub3JlIE5WUkFNICJTY2FuIGF0IGJvb3QgdGltZSIgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgICAweDgwICAgYWxzbyBhdHRhY2ggY29udHJvbGxlcnMgc2V0IHRvIE9GRiBpbiB0aGUgTlZSQU0gKHN5bTUzYzh4eCBvbmx5KQorCisxMC4yLjEyIEV4Y2x1ZGUgYSBob3N0IGZyb20gYmVpbmcgYXR0YWNoZWQKKyAgICAgICAgZXhjbD08aW9fYWRkcmVzcz4sLi4uCisKKyAgICBQcmV2ZW50IGhvc3QgYXQgYSBnaXZlbiBpbyBhZGRyZXNzIGZyb20gYmVpbmcgYXR0YWNoZWQuCisgICAgRm9yIGV4YW1wbGUgJ2V4Y2w9MHhiNDAwLDB4YzAwMCcgaW5kaWNhdGUgdG8gdGhlIAorICAgIGRyaXZlciBub3QgdG8gYXR0YWNoIGhvc3RzIGF0IGFkZHJlc3MgMHhiNDAwIGFuZCAweGMwMDAuCisKKzEwLjMgQ29udmVydGluZyBmcm9tIG9sZCBzdHlsZSBvcHRpb25zCisKK1ByZXZpb3VzbHksIHRoZSBzeW0yIGRyaXZlciBhY2NlcHRlZCBhcmd1bWVudHMgb2YgdGhlIGZvcm0KKwlzeW01M2M4eHg9dGFnczo0LHN5bmM6MTAsZGVidWc6MHgyMDAKKworQXMgYSByZXN1bHQgb2YgdGhlIG5ldyBtb2R1bGUgcGFyYW1ldGVycywgdGhpcyBpcyBubyBsb25nZXIgYXZhaWxhYmxlLgorTW9zdCBvZiB0aGUgb3B0aW9ucyBoYXZlIHJlbWFpbmVkIHRoZSBzYW1lLCBidXQgdGFncyBoYXMgc3BsaXQgaW50bworY21kX3Blcl9sdW4gYW5kIHRhZ19jdHJsIGZvciBpdHMgdHdvIGRpZmZlcmVudCBwdXJwb3Nlcy4gIFRoZSBzYW1wbGUgYWJvdmUKK3dvdWxkIGJlIHNwZWNpZmllZCBhczoKKwltb2Rwcm9iZSBzeW01M2M4eHggY21kX3Blcl9sdW49NCBzeW5jPTEwIGRlYnVnPTB4MjAwCisKK29yIG9uIHRoZSBrZXJuZWwgYm9vdCBsaW5lIGFzOgorCXN5bTUzYzh4eC5jbWRfcGVyX2x1bj00IHN5bTUzYzh4eC5zeW5jPTEwIHN5bTUzYzh4eC5kZWJ1Zz0weDIwMAorCisxMC40IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uLgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgZHJpdmVyIGNoZWNrcyBTQ1NJIGxpbmVzIAorbG9naWMgc3RhdGUsIDEwMCBtaWNyby1zZWNvbmRzIGFmdGVyIGhhdmluZyBhc3NlcnRlZCB0aGUgU0NTSSBSRVNFVCBsaW5lLgorVGhlIGRyaXZlciBqdXN0IHJlYWRzIFNDU0kgbGluZXMgYW5kIGNoZWNrcyBhbGwgbGluZXMgcmVhZCBGQUxTRSBleGNlcHQgUkVTRVQuCitTaW5jZSBTQ1NJIGRldmljZXMgc2hhbGwgcmVsZWFzZSB0aGUgQlVTIGF0IG1vc3QgODAwIG5hbm8tc2Vjb25kcyBhZnRlciBTQ1NJIAorUkVTRVQgaGFzIGJlZW4gYXNzZXJ0ZWQsIGFueSBzaWduYWwgdG8gVFJVRSBtYXkgaW5kaWNhdGUgYSBTQ1NJIEJVUyBwcm9ibGVtLgorVW5mb3J0dW5hdGVseSwgdGhlIGZvbGxvd2luZyBjb21tb24gU0NTSSBCVVMgcHJvYmxlbXMgYXJlIG5vdCBkZXRlY3RlZDoKKy0gT25seSAxIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorLSBNaXNwbGFjZWQgdGVybWluYXRvcnMuCistIEJhZCBxdWFsaXR5IHRlcm1pbmF0b3JzLgorT24gdGhlIG90aGVyIGhhbmQsIGVpdGhlciBiYWQgY2FibGluZywgYnJva2VuIGRldmljZXMsIG5vdCBjb25mb3JtYW50IAorZGV2aWNlcywgLi4uIG1heSBjYXVzZSBhIFNDU0kgc2lnbmFsIHRvIGJlIHdyb25nIHdoZW4gdGUgZHJpdmVyIHJlYWRzIGl0LgorCisxNS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworCisxNS4xIFByb2JsZW0gdHJhY2tpbmcKKworTW9zdCBTQ1NJIHByb2JsZW1zIGFyZSBkdWUgdG8gYSBub24gY29uZm9ybWFudCBTQ1NJIGJ1cyBvciB0b28gYnVnZ3kKK2RldmljZXMuICBJZiBpbmZvcnR1bmF0ZWx5IHlvdSBoYXZlIFNDU0kgcHJvYmxlbXMsIHlvdSBjYW4gY2hlY2sgdGhlCitmb2xsb3dpbmcgdGhpbmdzOgorCistIFNDU0kgYnVzIGNhYmxlcworLSB0ZXJtaW5hdGlvbnMgYXQgYm90aCBlbmQgb2YgdGhlIFNDU0kgY2hhaW4KKy0gbGludXggc3lzbG9nIG1lc3NhZ2VzIChzb21lIG9mIHRoZW0gbWF5IGhlbHAgeW91KQorCitJZiB5b3UgZG8gbm90IGZpbmQgdGhlIHNvdXJjZSBvZiBwcm9ibGVtcywgeW91IGNhbiBjb25maWd1cmUgdGhlCitkcml2ZXIgb3IgZGV2aWNlcyBpbiB0aGUgTlZSQU0gd2l0aCBtaW5pbWFsIGZlYXR1cmVzLgorCistIG9ubHkgYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzCistIHRhZ2dlZCBjb21tYW5kcyBkaXNhYmxlZAorLSBkaXNjb25uZWN0aW9ucyBub3QgYWxsb3dlZAorCitOb3csIGlmIHlvdXIgU0NTSSBidXMgaXMgb2ssIHlvdXIgc3lzdGVtIGhhcyBldmVyeSBjaGFuY2UgdG8gd29yaword2l0aCB0aGlzIHNhZmUgY29uZmlndXJhdGlvbiBidXQgcGVyZm9ybWFuY2VzIHdpbGwgbm90IGJlIG9wdGltYWwuCisKK0lmIGl0IHN0aWxsIGZhaWxzLCB0aGVuIHlvdSBjYW4gc2VuZCB5b3VyIHByb2JsZW0gZGVzY3JpcHRpb24gdG8KK2FwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3cy1ncm91cHMuICBTZW5kIG1lIGEgY29weSBpbiBvcmRlciB0bworYmUgc3VyZSBJIHdpbGwgcmVjZWl2ZSBpdC4gIE9idmlvdXNseSwgYSBidWcgaW4gdGhlIGRyaXZlciBjb2RlIGlzCitwb3NzaWJsZS4KKworICBNeSBjeXJyZW50IGVtYWlsIGFkZHJlc3M6IEdlcmFyZCBSb3VkaWVyIDxncm91ZGllckBmcmVlLmZyPgorCitBbGxvd2luZyBkaXNjb25uZWN0aW9ucyBpcyBpbXBvcnRhbnQgaWYgeW91IHVzZSBzZXZlcmFsIGRldmljZXMgb24KK3lvdXIgU0NTSSBidXMgYnV0IG9mdGVuIGNhdXNlcyBwcm9ibGVtcyB3aXRoIGJ1Z2d5IGRldmljZXMuCitTeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycyBpbmNyZWFzZXMgdGhyb3VnaHB1dCBvZiBmYXN0IGRldmljZXMgbGlrZQoraGFyZCBkaXNrcy4gIEdvb2QgU0NTSSBoYXJkIGRpc2tzIHdpdGggYSBsYXJnZSBjYWNoZSBnYWluIGFkdmFudGFnZSBvZgordGFnZ2VkIGNvbW1hbmRzIHF1ZXVpbmcuCisKKzE1LjIgVW5kZXJzdGFuZGluZyBoYXJkd2FyZSBlcnJvciByZXBvcnRzCisKK1doZW4gdGhlIGRyaXZlciBkZXRlY3RzIGFuIHVuZXhwZWN0ZWQgZXJyb3IgY29uZGl0aW9uLCBpdCBtYXkgZGlzcGxheSBhIAorbWVzc2FnZSBvZiB0aGUgZm9sbG93aW5nIHBhdHRlcm4uCisKK3N5bTA6MTogRVJST1IgKDA6NDgpICgxLTIxLTY1KSAoZi85NS8wKSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KK3N5bTA6IHNjcmlwdCBjbWQgPSAxOTAwMDAwMAorc3ltMDogcmVnZHVtcDogZGEgMTAgODAgOTUgNDcgMGYgMDEgMDcgNzUgMDEgODEgMjEgODAgMDEgMDkgMDAuCisKK1NvbWUgZmllbGRzIGluIHN1Y2ggYSBtZXNzYWdlIG1heSBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSBjYXVzZSBvZiB0aGUgCitwcm9ibGVtLCBhcyBmb2xsb3dzOgorCitzeW0wOjE6IEVSUk9SICgwOjQ4KSAoMS0yMS02NSkgKGYvOTUvMCkgQCAoc2NyaXB0IDdjMDoxOTAwMDAwMCkuCisuLi4uLkEuLi4uLi4uLi5CLkMuLi4uRC5FLi5GLi4uLkcuSC4uSS4uLi4uLi5KLi4uLi5LLi4uTC4uLi4uLi4KKworRmllbGQgQSA6IHRhcmdldCBudW1iZXIuCisgIFNDU0kgSUQgb2YgdGhlIGRldmljZSB0aGUgY29udHJvbGxlciB3YXMgdGFsa2luZyB3aXRoIGF0IHRoZSBtb21lbnQgdGhlIAorICBlcnJvciBvY2N1cnMuCisKK0ZpZWxkIEIgOiBEU1RBVCBpbyByZWdpc3RlciAoRE1BIFNUQVRVUykKKyAgQml0IDB4NDAgOiBNRFBFIE1hc3RlciBEYXRhIFBhcml0eSBFcnJvcgorICAgICAgICAgICAgIERhdGEgcGFyaXR5IGVycm9yIGRldGVjdGVkIG9uIHRoZSBQQ0kgQlVTLgorICBCaXQgMHgyMCA6IEJGICAgQnVzIEZhdWx0CisgICAgICAgICAgICAgUENJIGJ1cyBmYXVsdCBjb25kaXRpb24gZGV0ZWN0ZWQKKyAgQml0IDB4MDEgOiBJSUQgIElsbGVnYWwgSW5zdHJ1Y3Rpb24gRGV0ZWN0ZWQKKyAgICAgICAgICAgICBTZXQgYnkgdGhlIGNoaXAgd2hlbiBpdCBkZXRlY3RzIGFuIElsbGVnYWwgSW5zdHJ1Y3Rpb24gZm9ybWF0IAorICAgICAgICAgICAgIG9uIHNvbWUgY29uZGl0aW9uIHRoYXQgbWFrZXMgYW4gaW5zdHJ1Y3Rpb24gaWxsZWdhbC4KKyAgQml0IDB4ODAgOiBERkUgRG1hIEZpZm8gRW1wdHkKKyAgICAgICAgICAgICBQdXJlIHN0YXR1cyBiaXQgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBhbiBlcnJvci4KKyAgSWYgdGhlIHJlcG9ydGVkIERTVEFUIHZhbHVlIGNvbnRhaW5zIGEgY29tYmluYXRpb24gb2YgTURQRSAoMHg0MCksIAorICBCRiAoMHgyMCksIHRoZW4gdGhlIGNhdXNlIG1heSBiZSBsaWtlbHkgZHVlIHRvIGEgUENJIEJVUyBwcm9ibGVtLgorCitGaWVsZCBDIDogU0lTVCBpbyByZWdpc3RlciAoU0NTSSBJbnRlcnJ1cHQgU3RhdHVzKQorICBCaXQgMHgwOCA6IFNHRSAgU0NTSSBHUk9TUyBFUlJPUgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBjaGlwIGRldGVjdGVkIGEgc2V2ZXJlIGVycm9yIGNvbmRpdGlvbiAKKyAgICAgICAgICAgICBvbiB0aGUgU0NTSSBCVVMgdGhhdCBwcmV2ZW50cyB0aGUgU0NTSSBwcm90b2NvbCBmcm9tIGZ1bmN0aW9uaW5nCisgICAgICAgICAgICAgcHJvcGVybHkuCisgIEJpdCAweDA0IDogVURDICBVbmV4cGVjdGVkIERpc2Nvbm5lY3Rpb24KKyAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIHJlbGVhc2VkIHRoZSBTQ1NJIEJVUyB3aGVuIHRoZSBjaGlwIAorICAgICAgICAgICAgIHdhcyBub3QgZXhwZWN0aW5nIHRoaXMgdG8gaGFwcGVuLiBBIGRldmljZSBtYXkgYmVoYXZlIHNvIHRvIAorICAgICAgICAgICAgIGluZGljYXRlIHRoZSBTQ1NJIGluaXRpYXRvciB0aGF0IGFuIGVycm9yIGNvbmRpdGlvbiBub3QgcmVwb3J0YWJsZSAgICAgICAgICAgICAgdXNpbmcgdGhlIFNDU0kgcHJvdG9jb2wgaGFzIG9jY3VycmVkLgorICBCaXQgMHgwMiA6IFJTVCAgU0NTSSBCVVMgUmVzZXQKKyAgICAgICAgICAgICBHZW5lcmFsbHkgU0NTSSB0YXJnZXRzIGRvIG5vdCByZXNldCB0aGUgU0NTSSBCVVMsIGFsdGhvdWdoIGFueSAKKyAgICAgICAgICAgICBkZXZpY2Ugb24gdGhlIEJVUyBjYW4gcmVzZXQgaXQgYXQgYW55IHRpbWUuCisgIEJpdCAweDAxIDogUEFSICBQYXJpdHkKKyAgICAgICAgICAgICBTQ1NJIHBhcml0eSBlcnJvciBkZXRlY3RlZC4KKyAgT24gYSBmYXVsdHkgU0NTSSBCVVMsIGFueSBlcnJvciBjb25kaXRpb24gYW1vbmcgU0dFICgweDA4KSwgVURDICgweDA0KSBhbmQgCisgIFBBUiAoMHgwMSkgbWF5IGJlIGRldGVjdGVkIGJ5IHRoZSBjaGlwLiBJZiB5b3VyIFNDU0kgc3lzdGVtIHNvbWV0aW1lcyAKKyAgZW5jb3VudGVycyBzdWNoIGVycm9yIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgU0NTSSBHUk9TUyBFUlJPUiwgdGhlbiBhIFNDU0kgCisgIEJVUyBwcm9ibGVtIGlzIGxpa2VseSB0aGUgY2F1c2Ugb2YgdGhlc2UgZXJyb3JzLgorCitGb3IgZmllbGRzIEQsRSxGLEcgYW5kIEgsIHlvdSBtYXkgbG9vayBpbnRvIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUgCit0aGF0IGNvbnRhaW5zIHNvbWUgbWluaW1hbCBjb21tZW50cyBvbiBJTyByZWdpc3RlciBiaXRzLgorRmllbGQgRCA6IFNPQ0wgIFNjc2kgT3V0cHV0IENvbnRyb2wgTGF0Y2gKKyAgICAgICAgICBUaGlzIHJlZ2lzdGVyIHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgU0NTSSBjb250cm9sIGxpbmVzIHRoZSAKKyAgICAgICAgICBjaGlwIHdhbnQgdG8gZHJpdmUgb3IgY29tcGFyZSBhZ2FpbnN0LgorRmllbGQgRSA6IFNCQ0wgIFNjc2kgQnVzIENvbnRyb2wgTGluZXMKKyAgICAgICAgICBBY3R1YWwgdmFsdWUgb2YgY29udHJvbCBsaW5lcyBvbiB0aGUgU0NTSSBCVVMuCitGaWVsZCBGIDogU0JETCAgU2NzaSBCdXMgRGF0YSBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBkYXRhIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEcgOiBTWEZFUiAgU0NTSSBUcmFuc2ZlcgorICAgICAgICAgIENvbnRhaW5zIHRoZSBzZXR0aW5nIG9mIHRoZSBTeW5jaHJvbm91cyBQZXJpb2QgZm9yIG91dHB1dCBhbmQgCisgICAgICAgICAgdGhlIGN1cnJlbnQgU3luY2hyb25vdXMgb2Zmc2V0IChvZmZzZXQgMCBtZWFucyBhc3luY2hyb25vdXMpLgorRmllbGQgSCA6IFNDTlRMMyBTY3NpIENvbnRyb2wgUmVnaXN0ZXIgMworICAgICAgICAgIENvbnRhaW5zIHRoZSBzZXR0aW5nIG9mIHRpbWluZyB2YWx1ZXMgZm9yIGJvdGggYXN5bmNocm9ub3VzIGFuZCAKKyAgICAgICAgICBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycy4gCitGaWVsZCBJIDogU0NOVEw0IFNjc2kgQ29udHJvbCBSZWdpc3RlciA0CisgICAgICAgICAgT25seSBtZWFuaW5mdWwgZm9yIDUzQzEwMTAgVWx0cmEzIGNvbnRyb2xsZXJzLgorCitVbmRlcnN0YW5kaW5nIEZpZWxkcyBKLCBLLCBMIGFuZCBkdW1wcyByZXF1aXJlcyB0byBoYXZlIGdvb2Qga25vd2xlZGdlIG9mIAorU0NTSSBzdGFuZGFyZHMsIGNoaXAgY29yZXMgZnVuY3Rpb25uYWxzIGFuZCBpbnRlcm5hbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gZGVjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZW0sIHVubGVzcyB5b3Ugd2FudCB0byBoZWxwIAorbWFpbnRhaW4gdGhlIGRyaXZlciBjb2RlLgorCisxNy4gU2VyaWFsIE5WUkFNIChhZGRlZCBieSBSaWNoYXJkIFdhbHRoYW06IGRvcm1vdXNlQGZhcnNyb2J0LmRlbW9uLmNvLnVrKQorCisxNy4xIEZlYXR1cmVzCisKK0VuYWJsaW5nIHNlcmlhbCBOVlJBTSBzdXBwb3J0IGVuYWJsZXMgZGV0ZWN0aW9uIG9mIHRoZSBzZXJpYWwgTlZSQU0gaW5jbHVkZWQKK29uIFN5bWJpb3MgYW5kIHNvbWUgU3ltYmlvcyBjb21wYXRpYmxlIGhvc3QgYWRhcHRvcnMsIGFuZCBUZWtyYW0gYm9hcmRzLiBUaGUgCitzZXJpYWwgTlZSQU0gaXMgdXNlZCBieSBTeW1iaW9zIGFuZCBUZWtyYW0gdG8gaG9sZCBzZXQgdXAgcGFyYW1ldGVycyBmb3IgdGhlIAoraG9zdCBhZGFwdG9yIGFuZCBpdCdzIGF0dGFjaGVkIGRyaXZlcy4KKworVGhlIFN5bWJpb3MgTlZSQU0gYWxzbyBob2xkcyBkYXRhIG9uIHRoZSBib290IG9yZGVyIG9mIGhvc3QgYWRhcHRvcnMgaW4gYQorc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBob3N0IGFkYXB0b3IuICBUaGlzIGluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciB1c2VkCithcyBpdCdzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGhvdHBsdWcgUENJIG1vZGVsLgorCitUZWtyYW0gYm9hcmRzIHVzaW5nIFN5bWJpb3MgY2hpcHMsIERDMzkwVy9GL1UsIHdoaWNoIGhhdmUgTlZSQU0gYXJlIGRldGVjdGVkCithbmQgdGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gU3ltYmlvcyBjb21wYXRpYmxlIGFuZCBUZWtyYW0gaG9zdCAKK2FkYXB0b3JzLiBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgU3ltYmlvcyBjb21wYXRpYmxlICJkaWZmIiBzZXR0aW5nCitpbmNvcnJlY3RseSBzZXQgb24gVGVrcmFtIGJvYXJkcyBpZiB0aGUgQ09ORklHX1NDU0lfNTNDOFhYX1NZTUJJT1NfQ09NUEFUIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IGVuYWJsaW5nIGJvdGggU3ltYmlvcyBhbmQgVGVrcmFtIGJvYXJkcyB0byBiZSAKK3VzZWQgdG9nZXRoZXIgd2l0aCB0aGUgU3ltYmlvcyBjYXJkcyB1c2luZyBhbGwgdGhlaXIgZmVhdHVyZXMsIGluY2x1ZGluZworImRpZmYiIHN1cHBvcnQuICgibGVkIHBpbiIgc3VwcG9ydCBmb3IgU3ltYmlvcyBjb21wYXRpYmxlIGNhcmRzIGNhbiByZW1haW4KK2VuYWJsZWQgd2hlbiB1c2luZyBUZWtyYW0gY2FyZHMuIEl0IGRvZXMgbm90aGluZyB1c2VmdWwgZm9yIFRla3JhbSBob3N0CithZGFwdG9ycyBidXQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgZWl0aGVyLikKKworVGhlIHBhcmFtZXRlcnMgdGhlIGRyaXZlciBpcyBhYmxlIHRvIGdldCBmcm9tIHRoZSBOVlJBTSBkZXBlbmQgb24gdGhlIAorZGF0YSBmb3JtYXQgdXNlZCwgYXMgZm9sbG93OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWtyYW0gZm9ybWF0ICAgICAgU3ltYmlvcyBmb3JtYXQKK0dlbmVyYWwgYW5kIGhvc3QgcGFyYW1ldGVycworICAgIEJvb3Qgb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisgICAgSG9zdCBTQ1NJIElEICAgICAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBTQ1NJIHBhcml0eSBjaGVja2luZyAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFZlcmJvc2UgYm9vdCBtZXNzYWdlcyAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCitTQ1NJIGRldmljZXMgcGFyYW1ldGVycworICAgIFN5bmNocm9ub3VzIHRyYW5zZmVyIHNwZWVkICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgV2lkZSAxNiAvIE5hcnJvdyAgICAgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBUYWdnZWQgQ29tbWFuZCBRdWV1aW5nIGVuYWJsZWQgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIERpc2Nvbm5lY3Rpb25zIGVuYWJsZWQgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU2NhbiBhdCBib290IHRpbWUgICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKKworSW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHN5c3RlbSBib290LCBmb3IgZWFjaCBkZXZpY2UgY29uZmlndXJlZCB3aXRob3V0IAordGhlICJzY2FuIGF0IGJvb3QgdGltZSIgb3B0aW9uLCB0aGUgZHJpdmVyIGZvcmNlcyBhbiBlcnJvciBvbiB0aGUgCitmaXJzdCBURVNUIFVOSVQgUkVBRFkgY29tbWFuZCByZWNlaXZlZCBmb3IgdGhpcyBkZXZpY2UuCisKKworMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorCit0eXBpY2FsIGRhdGEgYXQgTlZSQU0gYWRkcmVzcyAweDEwMCAoNTNjODEwYSBOVlJBTSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswMCAwMAorNjQgMDEKKzhlIDBiCisKKzAwIDMwIDAwIDAwIDAwIDAwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3IDA0IDEwIDA0IDAwIDAwIAorCiswNCAwMCAwZiAwMCAwMCAxMCAwMCA1MCAwMCAwMCAwMSAwMCAwMCA2MiAKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzIAorMDQgMDAgMDEgMDAgMDAgMTAgMDAgNDggMDAgMDAgMDEgMDAgMDAgNjEgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKK2ZlIGZlCiswMCAwMAorMDAgMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOVlJBTSBsYXlvdXQgZGV0YWlscworCitOVlJBTSBBZGRyZXNzIDB4MDAwLTB4MGZmIG5vdCB1c2VkCisgICAgICAgICAgICAgIDB4MTAwLTB4MjZmIGluaXRpYWxpc2VkIGRhdGEKKyAgICAgICAgICAgICAgMHgyNzAtMHg3ZmYgbm90IHVzZWQKKworZ2VuZXJhbCBsYXlvdXQKKworICAgICAgICBoZWFkZXIgIC0gICA2IGJ5dGVzLAorICAgICAgICBkYXRhICAgIC0gMzU2IGJ5dGVzIChjaGVja3N1bSBpcyBieXRlIHN1bSBvZiB0aGlzIGRhdGEpCisgICAgICAgIHRyYWlsZXIgLSAgIDYgYnl0ZXMKKyAgICAgICAgICAgICAgICAgIC0tLQorICAgICAgICB0b3RhbCAgICAgMzY4IGJ5dGVzCisKK2RhdGEgYXJlYSBsYXlvdXQKKworICAgICAgICBjb250cm9sbGVyIHNldCB1cCAgLSAgMjAgYnl0ZXMKKyAgICAgICAgYm9vdCBjb25maWd1cmF0aW9uIC0gIDU2IGJ5dGVzICg0eDE0IGJ5dGVzKQorICAgICAgICBkZXZpY2Ugc2V0IHVwICAgICAgLSAxMjggYnl0ZXMgKDE2eDggYnl0ZXMpCisgICAgICAgIHVudXNlZCAoc3BhcmU/KSAgICAtIDE1MiBieXRlcyAoMTl4OCBieXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAgICAgICAgICAgIDM1NiBieXRlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGVhZGVyCisKKzAwIDAwICAgLSA/PyBzdGFydCBtYXJrZXIKKzY0IDAxICAgLSBieXRlIGNvdW50IChsc2IvbXNiIGV4Y2x1ZGVzIGhlYWRlci90cmFpbGVyKQorOGUgMGIgICAtIGNoZWNrc3VtIChsc2IvbXNiIGV4Y2x1ZGVzIGhlYWRlci90cmFpbGVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbnRyb2xsZXIgc2V0IHVwCisKKzAwIDMwIDAwIDAwIDAwIDAwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3IDA0IDEwIDA0IDAwIDAwCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAtLSBob3N0IElECisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAtLVJlbW92YWJsZSBNZWRpYSBTdXBwb3J0CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDAgPSBub25lCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDEgPSBCb290YWJsZSBEZXZpY2UKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMiA9IEFsbCB3aXRoIE1lZGlhCisgICAgICAgICAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgICAtLWZsYWcgYml0cyAyCisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgMHgwMDAwMDAwMT0gc2NhbiBvcmRlciBoaS0+bG93CisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIChkZWZhdWx0IDB4MDAgLSBzY2FuIGxvdy0+aGkpCisgICAgICAgICAgICAgICAgICAgIC0tZmxhZyBiaXRzIDEKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSBzY2FtIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwIHBhcml0eSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB2ZXJib3NlIGJvb3QgbXNncworCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwIGZvciBhbnkgb2YgdGhlIGNvbnRyb2xsZXJzLgorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorKFJlbW92YWJsZSBNZWRpYSBhZGRlZCBTeW1iaW9zIEJJT1MgdmVyc2lvbiA0LjA5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Jvb3QgY29uZmlndXJhdGlvbgorCitib290IG9yZGVyIHNldCBieSBvcmRlciBvZiB0aGUgZGV2aWNlcyBpbiB0aGlzIHRhYmxlCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIC0tIDFzdCBjb250cm9sbGVyCiswNCAwMCAwMyAwMCAwMCAxMCAwMCA1OCAwMCAwMCAwMSAwMCAwMCA2MyAgICAybmQgY29udHJvbGxlcgorMDQgMDAgMDEgMDAgMDAgMTAgMDAgNDggMDAgMDAgMDEgMDAgMDAgNjEgICAgM3JkIGNvbnRyb2xsZXIKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAgIDR0aCBjb250cm9sbGVyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgfCAgfAorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgIHwgICAgICAtLS0tIFBDSSBpbyBwb3J0IGFkcgorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgICAtLTB4MDEgaW5pdC9zY2FuIGF0IGJvb3QgdGltZQorICAgICAgIHwgIHwgIHwgIHwgICAgICAtLVBDSSBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyICgweGRkZGRkZmZmKQorICAgICAgIHwgIHwgICAtLS0tLSA/PyBQQ0kgdmVuZG9yIElEIChsc2IvbXNiKQorICAgICAgICAtLS0tUENJIGRldmljZSBJRCAobHNiL21zYikKKworPz8gdXNlIG9mIHRoaXMgZGF0YSBpcyBhIGd1ZXNzIGJ1dCBzZWVtcyByZWFzb25hYmxlCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZXZpY2Ugc2V0IHVwICh1cCB0byAxNiBkZXZpY2VzIC0gaW5jbHVkZXMgY29udHJvbGxlcikKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgLSBpZCAwCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDE1CisgfCAgICAgfCAgfCAgfCAgICAgfCAgfAorIHwgICAgIHwgIHwgIHwgICAgICAtLS0tdGltZW91dCAobHNiL21zYikKKyB8ICAgICB8ICB8ICAgLS1zeW5jaCBwZXJpb2QgKDB4Pz8gNDAgTXRyYW5zL3NlYy0gZmFzdCA0MCkgKHByb2JhYmx5IDB4MjgpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDMwIDIwIE10cmFucy9zZWMtIGZhc3QgMjApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDY0IDEwIE10cmFucy9zZWMtIGZhc3QgKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHhjOCAgNSBNdHJhbnMvc2VjKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHgwMCAgYXN5bmNocm9ub3VzKQorIHwgICAgIHwgICAtLSA/PyBtYXggc3luYyBvZmZzZXQgKDB4MDggaW4gTlZSQU0gb24gNTNjODEwYSkgCisgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCBpbiBOVlJBTSBvbiA1M2M4NzUpCisgfCAgICAgIC0tZGV2aWNlIGJ1cyB3aWR0aCAoMHgwOCBuYXJyb3cpCisgfCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCAxNiBiaXQgd2lkZSkKKyAgLS1mbGFnIGJpdHMKKyAgICAweDAwMDAwMDAxIC0gZGlzY29ubmVjdCBlbmFibGVkCisgICAgMHgwMDAwMDAxMCAtIHNjYW4gYXQgYm9vdCB0aW1lCisgICAgMHgwMDAwMDEwMCAtIHNjYW4gbHVucworICAgIDB4MDAwMDEwMDAgLSBxdWV1ZSB0YWdzIGVuYWJsZWQKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUgCisoYnV0IGl0IGNvdWxkIGJlIG1heCBidXMgd2lkdGgpCisKK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4MTBhIE5WUkFNCitkZWZhdWx0IHNldCB1cCBmb3IgNTNjODc1IE5WUkFNIC0gYnVzIHdpZHRoICAgICAtIDB4MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzeW5jIG9mZnNldCA/IC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgcGVyaW9kICAgLSAweDMwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPz8gc3BhcmUgZGV2aWNlIHNwYWNlICgzMiBiaXQgYnVzID8/KQorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgKDE5eDhieXRlcykKKy4KKy4KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHJhaWxlcgorCitmZSBmZSAgIC0gPyBlbmQgbWFya2VyID8KKzAwIDAwCiswMCAwMAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKzE3LjMgVGVrcmFtIE5WUkFNIGxheW91dAorCitudnJhbSA2NHgxNiAoMTAyNCBiaXQpCisKK0RyaXZlIHNldHRpbmdzCisKK0RyaXZlIElEIDAtMTUgKGFkZHIgMHgweXl5eTAgPSBkZXZpY2Ugc2V0dXAsIHl5eXkgPSBJRCkKKyAgICAgICAgICAgICAgKGFkZHIgMHgweXl5eTEgPSAweDAwMDApCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8ICAtLS0tLSBwYXJpdHkgY2hlY2sgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8ICAtLS0tLS0tIHN5bmMgbmVnICAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCAgLS0tLS0tLS0tIGRpc2Nvbm5lY3QgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgICAtLS0tLS0tLS0tLSBzdGFydCBjbWQgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAgLS0tLS0tLS0tLS0tLS0gdGFnZ2VkIGNtZHMgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0gd2lkZSBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5bmMgcmF0ZSAgICAgIDAgLSAxMC4wIE10cmFucy9zZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICA4LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICA2LjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICA1LjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtICA1LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAtICA0LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtICAzLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAtICAyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAtICAyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtIDIwLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAtIDE2LjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAtIDEzLjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAtIDExLjkKKworR2xvYmFsIHNldHRpbmdzCisKK0hvc3QgZmxhZ3MgMCAoYWRkciAweDEwMDAwMCwgMzIpIAorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgIHwgfCB8IHwKKyAgICB8IHwgfCB8ICB8IHwgfCB8ICAgICAgICAgICAgLS0tLS0tLS0tLS0gaG9zdCBJRCAgICAweDAwIC0gMHgwZgorICAgIHwgfCB8IHwgIHwgfCB8IHwKKyAgICB8IHwgfCB8ICB8IHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VwcG9ydCBmb3IgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICA+IDIgZHJpdmVzICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8IHwgfCAKKyAgICB8IHwgfCB8ICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VwcG9ydCBkcml2ZXMgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IDFHYnl0ZXMgICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8IHwKKyAgICB8IHwgfCB8ICB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnVzIHJlc2V0IG9uICAgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyIG9uICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8CisgICAgfCB8IHwgfCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFjdGl2ZSBuZWcgICAgIDAgLSBvZmYKKyAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwgfAorICAgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbW0gc2VlayAgICAgICAwIC0gb2ZmCisgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgIHwgfCB8CisgICAgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNjYW4gbHVucyAgICAgIDAgLSBvZmYKKyAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlbW92YWJsZSAgICAgIDAgLSBkaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIEJJT1MgZGV2ICAgIDEgLSBib290IGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gYWxsCisKK0hvc3QgZmxhZ3MgMSAoYWRkciAweDEwMDAwMSwgMzMpCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICB8IHwgfCAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAtLS0tLS0tLS0gYm9vdCBkZWxheSAgICAgMCAtICAgMyBzZWMKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICAgNQorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDEwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAgMjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtICAzMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDYwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgLSAxMjAKKyAgICAgICAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1heCB0YWcgY21kcyAgIDAgLSAgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gMzIKKworSG9zdCBmbGFncyAyIChhZGRyIDB4MTAwMDEwLCAzNCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tIEYyL0Y2IGVuYWJsZSAgIDAgLSBvZmYgPz8/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbiAgPz8/CisKK2NoZWNrc3VtIChhZGRyIDB4MTExMTExKQorCitjaGVja3N1bSA9IDB4MTIzNCAtIChzdW0gYWRkciAwLTYzKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZmF1bHQgbnZyYW0gZGF0YToKKworMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAKKworMHgwZjA3IDB4MDQwMCAweDAwMDEgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4ZmJiYworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0VuZCBvZiBMaW51eCBTWU0tMiBkcml2ZXIgZG9jdW1lbnRhdGlvbiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvdG1zY3NpbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NTIyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dApAQCAtMCwwICsxLDQ0OSBAQAorVGhlIHRtc2NzaW0gZHJpdmVyCis9PT09PT09PT09PT09PT09PT0KKworMS4gUHVycG9zZSBhbmQgaGlzdG9yeQorMi4gSW5zdGFsbGF0aW9uCiszLiBGZWF0dXJlcworNC4gQ29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8KKzUuIENvbmZpZ3VyYXRpb24gdmlhIGJvb3QvbW9kdWxlIHBhcmFtcworNi4gUG90ZW50aWFsIGltcHJvdmVtZW50cworNy4gQnVnIHJlcG9ydHMsIGRlYnVnZ2luZyBhbmQgdXBkYXRlcworOC4gQWNrbm93bGVkZ2VtZW50cworOS4gQ29weXJpZ2h0CisKKworMS4gUHVycG9zZSBhbmQgaGlzdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHRtc2NzaW0gZHJpdmVyIHN1cHBvcnRzIFBDSSBTQ1NJIEhvc3QgQWRhcHRlcnMgYmFzZWQgb24gdGhlIEFNNTNDOTc0CitjaGlwLiBBTTUzQzk3NCBiYXNlZCBTQ1NJIGFkYXB0ZXJzIGluY2x1ZGU6IAorIFRla3JhbSBEQzM5MCwgREMzOTBUCisgRGF3aWNvbnRyb2wgMjk3NAorIFFMb2dpYyBGYXN0ISBQQ0kgQmFzaWMKKyBzb21lIG9uLWJvYXJkIGFkYXB0ZXJzCisoVGhpcyBpcyBtb3N0IHByb2JhYmx5IG5vdCBhIGNvbXBsZXRlIGxpc3QpCisKK0l0IGhhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQy5MLiBIdWFuZyBmcm9tIHRoZSBUZWtyYW0gY29ycC4gdG8gc3VwcG9ydCB0aGUKK1Rla3JhbSBEQzM5MChUKSBhZGFwdGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBuYW1lIGNvbWVzIGZyb206IHRtID0gVGVrcmFtCitzY3NpID0gU0NTSSBkcml2ZXIsIG0gPSBBTUQgKD8pIGFzIG9wcG9zZWQgdG8gdyBmb3IgdGhlIERDMzkwVy9VL0YKKyhOQ1I1M2M4WDUsIFg9Mi83KSBkcml2ZXIuIFllcywgdGhlcmUgd2FzIGFsc28gYSBkcml2ZXIgZm9yIHRoZSBsYXR0ZXIsCit0bXNjc2l3LCB3aGljaCBzdXBwb3J0ZWQgREMzOTBXL1UvRiBhZGFwdGVycy4gSXQncyBub3QgbWFpbnRhaW5lZCBhbnkgbW9yZSwKK2FzIHRoZSBuY3I1M2M4eHggaXMgcGVyZmVjdGx5IHN1cHBvcnRpbmcgdGhlc2UgYWRwYXRlcnMgc2luY2Ugc29tZSB0aW1lLgorCitUaGUgZHJpdmVyIGZpcnN0IGFwcGVhcmVkIGluIEFwcmlsIDE5OTYsIGV4Y2x1c2l2ZWx5IHN1cHBvcnRlZCB0aGUgREMzOTAgCithbmQgaGFzIGJlZW4gZW5oYW5jZWQgc2luY2UgdGhlbiBpbiB2YXJpb3VzIHN0ZXBzLiBJbiBNYXkgMTk5OCBzdXBwb3J0IGZvciAKK2dlbmVyYWwgQU01M0M5NzQgYmFzZWQgYWRhcHRlcnMgYW5kIHNvbWUgcG9zc2liaWxpdGllcyB0byBjb25maWd1cmUgaXQgd2VyZQorYWRkZWQuIFRoZSBub24tREMzOTAgc3VwcG9ydCB3b3JrcyBieSBhc3N1bWluZyBzb21lIHZhbHVlcyBmb3IgdGhlIGRhdGEKK25vcm1hbGx5IHRha2VuIGZyb20gdGhlIERDMzkwIEVFUFJPTS4gU2VlIGJlbG93IChjaGFwdGVyIDUpIGZvciBkZXRhaWxzLgorCitXaGVuIHVzaW5nIHRoZSBEQzM5MCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RpbGwgYmUgZG9uZSB1c2luZyB0aGUgREMzOTAKK0JJT1Mgc2V0dXAuIFRoZSBEQzM5MCBFRVBST00gaXMgcmVhZCBhbmQgdXNlZCBieSB0aGUgZHJpdmVyLCBhbnkgYm9vdCBvcgorbW9kdWxlIHBhcmFtZXRlcnMgKGNoYXB0ZXIgNSkgYXJlIGlnbm9yZWQhIEhvd2V2ZXIsIHlvdSBjYW4gY2hhbmdlIHNldHRpbmdzCitkeW5hbWljYWxseSwgYXMgZGVzY3JpYmVkIGluIGNoYXB0ZXIgNC4gCisKK0ZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGRyaXZlcidzIGhpc3RvcnksIHNlZSB0aGUgZmlyc3QgbGluZXMKK29mIHRtc2NzaW0uYy4KK1RoZSBudW1iZXJpbmcgc2NoZW1lIGlzbid0IGNvbnNpc3RlbnQuIFRoZSBmaXJzdCB2ZXJzaW9ucyB3ZW50IGZyb20gMS4wMCB0bworMS4xMiwgdGhlbiAxLjIwYSB0byAxLjIwdC4gRmluYWxseSBJIGRlY2lkZWQgdG8gdXNlIHRoZSBuY3I1M2M4eHggc2NoZW1lLiBTbwordGhlIG5leHQgcmV2aXNpb25zIHdpbGwgYmUgMi4wYSB0byAyLjBYIChzdGFibGUpLCAyLjFhIHRvIDIuMVggKGV4cGVyaW1lbnRhbCksCisyLjJhIHRvIDIuMlggKHN0YWJsZSwgYWdhaW4pIGV0Yy4gKFggPSBhbnl0aGluZyBiZXR3ZWVuIGEgYW5kIHouKSBJZiBJIHNlbmQKK2ZpeGVzIHRvIHBlb3BsZSBmb3IgdGVzdGluZywgSSBjcmVhdGUgaW50ZXJtZWRpYXRlIHZlcnNpb25zIHdpdGggYSBkaWdpdCAKK2FwcGVuZGVkLCBlLmcuIDIuMGMzLgorCisKKzIuIEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgZ290IGFueSByZWNlbnQga2VybmVsIHdpdGggdGhpcyBkcml2ZXIgYW5kIGRvY3VtZW50IGluY2x1ZGVkIGluCitsaW51eC9kcml2ZXJzL3Njc2ksIHlvdSBiYXNpY2FsbHkgaGF2ZSB0byBkbyBub3RoaW5nIHNwZWNpYWwgdG8gdXNlIHRoaXMKK2RyaXZlci4gT2YgY291cnNlIHlvdSBoYXZlIHRvIGNob29zZSB0byBjb21waWxlIFNDU0kgc3VwcG9ydCBhbmQgREMzOTAoVCkKK3N1cHBvcnQgaW50byB5b3VyIGtlcm5lbCBvciBhcyBtb2R1bGUgd2hlbiBjb25maWd1cmluZyB5b3VyIGtlcm5lbCBmb3IKK2NvbXBpbGluZy4KK05FVzogWW91IG1heSBhcyB3ZWxsIGNvbXBpbGUgdGhpcyBtb2R1bGUgb3V0c2lkZSB5b3VyIGtlcm5lbCwgdXNpbmcgdGhlCitzdXBwbGllZCBNYWtlZmlsZS4KKworIElmIHlvdSBnb3QgYW4gb2xkIGtlcm5lbCAocHJlIDIuMS4xMjcsIHByZSAyLjAuMzdwMSkgd2l0aCBhbiBvbGQgdmVyc2lvbiBvZgorIHRoaXMgZHJpdmVyOiBHZXQgZGMzOTAtMjExMjUtMjBiLmRpZmYuZ3ogb3IgZGMzOTAtMjAzNnAyMS0yMGIxLmRpZmYuZ3ogZnJvbQorIG15IHdlYiBwYWdlIGFuZCBhcHBseSB0aGUgcGF0Y2guIEFwcGx5IGZ1cnRoZXIgcGF0Y2hlcyB0byB1cGdyYWRlIHRvIHRoZSAKKyBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLgorCisgSWYgeW91IHdhbnQgdG8gZG8gaXQgbWFudWFsbHksIHlvdSBzaG91bGQgY29weSB0aGUgZmlsZXMgKGRjMzkwLmgsCisgdG1zY3NpbS5oLCB0bXNjc2ltLmMsIHNjc2lpb20uYyBhbmQgUkVBRE1FLnRtc2NzaW0pIGZyb20gdGhpcyBkaXJlY3RvcnkgdG8KKyBsaW51eC9kcml2ZXJzL3Njc2kuIFlvdSBoYXZlIHRvIHJlY29tcGlsZSB5b3VyIGtlcm5lbC9tb2R1bGUgb2YgY291cnNlLgorCisgWW91IHNob3VsZCBhcHBseSB0aGUgdGhyZWUgcGF0Y2hlcyBpbmNsdWRlZCBpbiBkYzM5MC0xMjAta2VybmVsLmRpZmYKKyAoQXBwbHlpbmcgdGhlbTogY2QgL3Vzci9zcmM7IHBhdGNoIC1wMCA8fi9kYzM5MC0xMjAta2VybmVsLmRpZmYpCisgVGhlIHBhdGNoZXMgYXJlIGFnYWluc3QgMi4xLjEyNSwgc28geW91IG1pZ2h0IGhhdmUgdG8gbWFudWFsbHkgcmVzb2x2ZQorIHJlamVjdGlvbnMgd2hlbiBhcHBseWluZyB0byBhbm90aGVyIGtlcm5lbCB2ZXJzaW9uLgorCisgVGhlIHBhdGNoZXMgd2lsbCB1cGRhdGUgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUgdG8gYWxsb3cgYm9vdCBwYXJhbWV0ZXJzIHRvCisgYmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIsIHVwZGF0ZSB0aGUgRG9jdW1lbnRhdGlvbiBhbmQgZmluYWxseSBvZmZlciB5b3UgdGhlCisgcG9zc2liaWxpdHkgdG8gb21pdCB0aGUgbm9uLURDMzkwIHBhcnRzIG9mIHRoZSBkcml2ZXIuCisgKEJ5IHNlbGVjdGluZyAiT21pdCBzdXBwb3J0IGZvciBub24gREMzOTAiIHlvdSBiYXNpY2FsbHkgZGlzYWJsZSB0aGUKKyBlbXVsYXRpb24gb2YgYSBEQzM5MCBFRVBST00gZm9yIG5vbiBEQzM5MCBhZGFwdGVycy4gVGhpcyBzYXZlcyBhIGZldyBieXRlcworIG9mIG1lbW9yeS4pCisKK0lmIHlvdSBnb3QgYSB2ZXJ5IG9sZCBrZXJuZWwgd2l0aG91dCB0aGUgdG1zY3NpbSBkcml2ZXIgKHByZSAyLjAuMzEpCitJIHJlY29tbWVuZCB1cGdyYWRpbmcgeW91ciBrZXJuZWwuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCB3YW50IHRvLCBwbGVhc2UKK2NvbnRhY3QgbWUgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBwYXRjaGVzLgorCisKK1VwZ3JhZGluZyBhIFNDU0kgZHJpdmVyIGlzIGFsd2F5cyBhIGRlbGljYXRlIHRoaW5nIHRvIGRvLiBUaGUgMi4wIGRyaXZlciBoYXMKK3Byb3ZlbiBzdGFibGUgb24gbWFueSBzeXN0ZW1zLCBidXQgaXQncyBzdGlsbCBhIGdvb2QgaWRlYSB0byB0YWtlIHNvbWUKK3ByZWNhdXRpb25zLiBJbiBhbiBpZGVhbCB3b3JsZCB5b3Ugd291bGQgaGF2ZSBhIGZ1bGwgYmFja3VwIG9mIHlvdXIgZGlza3MuCitUaGUgd29ybGQgaXNuJ3QgaWRlYWwgYW5kIG1vc3QgcGVvcGxlIGRvbid0IGhhdmUgZnVsbCBiYWNrdXBzIChtZSBuZWl0aGVyKS4KK1NvIHRha2UgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBtZWFzdXJlczoKKyogbWFrZSB5b3VyIGtlcm5lbCByZW1vdW50IHRoZSBGUyByZWFkLW9ubHkgb24gZGV0ZWN0aW5nIGFuIGVycm9yOgorICB0dW5lMmZzIC1lIHJlbW91bnQtcm8gL2Rldi9zZD8/CisqIGhhdmUgY29waWVzIG9mIHlvdXIgU0NTSSBkaXNrJ3MgcGFydGl0aW9uIHRhYmxlcyBvbiBzb21lIHNhZmUgbG9jYXRpb246CisgIGRkIGlmPS9kZXYvc2RhIG9mPS9tbnQvZmxvcHB5L3NkYSBicz01MTIgY291bnQ9MQorICBvciBqdXN0IHByaW50IGl0IHdpdGg6CisgIGZkaXNrIC1sIHwgbHByCisqIG1ha2Ugc3VyZSB5b3UgYXJlIGFibGUgdG8gYm9vdCBMaW51eCAoZS5nLiBmcm9tIGZsb3BweSBkaXNrIHVzaW5nIEluaXRSRCkKKyAgaWYgeW91ciBTQ1NJIGRpc2sgZ2V0cyBjb3JydXB0ZWQuIFlvdSBjYW4gdXNlIAorICBmdHA6Ly9zdHVkZW50LnBoeXNpay51bmktZG9ydG11bmQuZGUvcHViL2xpbnV4L2tlcm5lbC9ib290ZGlzay5negorCitPbmUgbW9yZSB3YXJuaW5nOiBJIHVzZWQgdG8gb3ZlcmNsb2NrIG15IFBDSSBidXMgdG8gNDEuNjcgTUh6LiBNeSBUZWtyYW0KK0RDMzkwRiAoU3ltNTNjODc1KSBhY2NlcHRlZCB0aGlzIGFzIHdlbGwgYXMgbXkgTWlsbGVuaXVtLiBCdXQgdGhlIEFtNTNDOTc0Citwcm9kdWNlZCBlcnJvcnMgYW5kIHN0YXJ0ZWQgdG8gY29ycnVwdCBteSBkaXNrcy4gU28gZG9uJ3QgZG8gdGhhdCEgQSAzNy41MAorTUh6IFBDSSBidXMgd29ya3MgZm9yIG1lLCB0aG91Z2gsIGJ1dCBJIGRvbid0IHJlY29tbWVuZCB1c2luZyBoaWdoZXIgY2xvY2tzCit0aGFuIHRoZSAzMy4zMyBNSHogYmVpbmcgaW4gdGhlIFBDSSBzcGVjLgorCitJZiB5b3Ugd2FudCB0byBzaGFyZSB0aGUgSVJRIHdpdGggYW5vdGhlciBkZXZpY2UgYW5kIHRoZSBkcml2ZXIgcmVmdXNlcyB0bworZG8gc28sIHlvdSBtaWdodCBzdWNjZWVkIHdpdGggY2hhbmdpbmcgdGhlIERDMzkwX0lSUSB0eXBlIGluIHRtc2NzaW0uYyB0byAKK1NBX1NISVJRIHwgU0FfSU5URVJSVVBULgorCisKKzMuRmVhdHVyZXMKKy0tLS0tLS0tLS0KKy0gU0NTSQorICogVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKyAqIFN5bmMgc3BlZWQgdXAgdG8gMTAgTUh6CisgKiBEaXNjb25uZWN0aW9uCisgKiBNdWx0aXBsZSBMVU5zCisKKy0gR2VuZXJhbCAvIExpbnV4IGludGVyZmFjZQorICogU3VwcG9ydCBmb3IgdXAgdG8gNCBBTTUzQzk3NCBhZGFwdGVycy4KKyAqIERDMzkwIEVFUFJPTSB1c2FnZSBvciBib290L21vZHVsZSBwYXJhbXMKKyAqIEluZm9ybWF0aW9uIHZpYSBjYXQgL3Byb2Mvc2NzaS90bXNjc2ltLz8KKyAqIER5bmFtaWNhbGx5IGNvbmZpZ3VyYWJsZSBieSB3cml0aW5nIHRvIC9wcm9jL3Njc2kvdG1zY3NpbS8/CisgKiBEeW5hbWljIGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzCisgKiBTTVAgc3VwcG9ydDogTG9ja2luZyBvbiBpb19yZXF1ZXN0IGxvY2sgKExpbnV4IDIuMS8yLjIpIG9yIGFkYXB0ZXIgCisgICAgc3BlY2lmaWMgbG9ja3MgKExpbnV4IDIuNT8pCisgKiBVbmlmb3JtIHNvdXJjZSBjb2RlIGZvciBMaW51eC0yLngueQorICogU3VwcG9ydCBmb3IgZHluLiBhZGRpdGlvbi9yZW1vdmFsIG9mIGRldmljZXMgdmlhIGFkZC9yZW1vdmUtc2luZ2xlLWRldmljZQorICAgKFRyeTogZWNobyAic2NzaSBhZGQtc2luZ2xlLWRldmljZSBDIEIgVCBVIiA+L3Byb2Mvc2NzaS9zY3NpIAorICAgIEMgPSBDb250cm9sbGVyLCBCID0gQnVzLCBUID0gVGFyZ2V0IFNDU0kgSUQsIFUgPSBVbml0IFNDU0kgTFVOLikgCisgICAgVXNlIHdpdGggY2FyZSEKKyAqIFRyeSB0byB1c2UgdGhlIHBhcnRpdGlvbiB0YWJsZSBmb3IgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIG1hcHBpbmcKKworCis0LiBDb25maWd1cmF0aW9uIHZpYSAvcHJvYy9zY3NpL3Rtc2NzaW0vPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZpcnN0IG9mIGFsbCBsb29rIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYnkgdHlwaW5nCisgY2F0IC9wcm9jL3Njc2kvdG1zY3NpbS8/CitUaGUgIj8iIHNob3VsZCBiZSByZXBsYWNlZCBieSB0aGUgU0NTSSBob3N0IG51bWJlci4gKFRoZSBzaGVsbCBtaWdodCBkbyB0aGlzCitmb3IgeW91LikKK1lvdSB3aWxsIHNlZSBzb21lIGluZm8gcmVnYXJkaW5nIHRoZSBhZGFwdGVyIGFuZCwgYXQgdGhlIGVuZCwgYSBsaXN0aW5nIG9mCit0aGUgYXR0YWNoZWQgZGV2aWNlcyBhbmQgdGhlaXIgc2V0dGluZ3MuCisKK0hlcmUncyBhbiBleGFtcGxlOgorZ2FybG9mZkBrdXJ0Oi9ob21lL2dhcmxvZmYgPiBjYXQgL3Byb2Mvc2NzaS90bXNjc2ltLzAKK1Rla3JhbSBEQzM5MC9BTTUzQzk3NCBQQ0kgU0NTSSBIb3N0IEFkYXB0ZXIsIERyaXZlciBWZXJzaW9uIDIuMGU3IDIwMDAtMTEtMjgKK1NDU0kgSG9zdCBOciAxLCBBTTUzQzk3NCBBZGFwdGVyIE5yIDAKK0lPUG9ydEJhc2UgMHhiMDAwLCBJUlEgMTAKK01heElEIDgsIE1heExVTiA4LCBBZGFwdGVySUQgNiwgU2VsVGltZW91dCAyNTAgbXMsIERlbGF5UmVzZXQgMSBzCitUYWdNYXhOdW0gMTYsIFN0YXR1cyAweDAwLCBBQ0JGbGFnIDB4MDAsIEdsaXRjaEVhdGVyIDI0IG5zCitTdGF0aXN0aWNzOiBDbW5kcyAxNDcwMTY1LCBDbW5kcyBub3Qgc2VudCBkaXJlY3RseSAwLCBPdXQgb2YgU1JCIGNvbmRzIDAKKyAgICAgICAgICAgIExvc3QgYXJiaXRyYXRpb25zIDU4NywgIFNlbC4gY29ubmVjdGVkIDAsIENvbm5lY3RlZDogTm8KK05yIG9mIGF0dGFjaGVkIGRldmljZXM6IDQsIE5yIG9mIERDQnM6IDQKK01hcCBvZiBhdHRhY2hlZCBMVU5zOiAwMSAwMCAwMCAwMyAwMSAwMCAwMCAwMAorSWR4IElEIExVTiBQcnR5IFN5bmMgRHNDbiBTbmRTIFRhZ1EgTmVnb1BlcmlvZCBTeW5jU3BlZWQgU3luY09mZnMgTWF4Q21kCiswMCAgMDAgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIFllcyAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDE2CiswMSAgMDMgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCiswMiAgMDMgIDAxICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCiswMyAgMDQgIDAwICBZZXMgIFllcyAgWWVzICBZZXMgIE5vICAgIDEwMCBucyAgICAxMC4wIE0gICAgICAxNSAgICAgIDAxCisKK05vdGUgdGhhdCB0aGUgc2V0dGluZ3MgTWF4SUQgYW5kIE1heExVTiBhcmUgbm90IHplcm8tIGJ1dCBvbmUtYmFzZWQsIHdoaWNoCittZWFucyB0aGF0IGEgc2V0dGluZyBNYXhMVU49NCwgd2lsbCByZXN1bHQgaW4gdGhlIHN1cHBvcnQgb2YgTFVOcyAwLi4zLiBUaGlzCitpcyBzb21laG93IGluY29udmVuaWVudCwgYnV0IHRoZSB3YXkgdGhlIG1pZC1sZXZlbCBTQ1NJIGNvZGUgZXhwZWN0cyBpdCB0byBiZS4KKworQUNCIGFuZCBEQ0IgYXJlIGFjcm9ueW1zIGZvciBBZGFwdGVyIENvbnRyb2wgQmxvY2sgYW5kIERldmljZSBDb250cm9sIEJsb2NrLgorVGhlc2UgYXJlIGRhdGEgc3RydWN0dXJlcyBvZiB0aGUgZHJpdmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCithZGFwdGVyIGFuZCB0aGUgY29ubmVjdGVkIFNDU0kgZGV2aWNlcyByZXNwZWN0aXZlbHkuCisKK0lkeCBpcyB0aGUgZGV2aWNlIGluZGV4IChqdXN0IGEgY29uc2VjdXRpdmUgbnVtYmVyIGZvciB0aGUgZHJpdmVyKSwgSUQgYW5kCitMVU4gYXJlIHRoZSBTQ1NJIElEIGFuZCBMVU4sIFBydHkgbWVhbnMgUGFyaXR5IGNoZWNraW5nLCBTeW5jIHN5bmNocm9ub3VzCituZWdvdGlhdGlvbiwgRHNDbiBEaXNjb25uZWN0aW9uLCBTbmRTIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwIChub3QKK3VzZWQgYnkgdGhlIGRyaXZlcikgYW5kIFRhZ1EgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcuIE5lZ29QZXJpb2QgYW5kCitTeW5jU3BlZWQgYXJlIHNvbWVob3cgcmVkdW5kYW50LCBiZWNhdXNlIHRoZXkgYXJlIHJlY2lwcm9jYWwgdmFsdWVzIAorKDEgLyAxMTIgbnMgPSA4LjkgTUh6KS4gQXQgbGVhc3QgaW4gdGhlb3J5LiBUaGUgZHJpdmVyIGlzIGFibGUgdG8gYWRqdXN0IHRoZQorTmVnb1BlcmlvZCBtb3JlIGFjY3VyYXRlICg0bnMpIHRoYW4gdGhlIFN5bmNTcGVlZCAoMSAvIDI1bnMpLiBJIGRvbid0IGtub3cKK2lmIGNlcnRhaW4gZGV2aWNlcyB3aWxsIGhhdmUgcHJvYmxlbXMgd2l0aCB0aGlzIGRpc2NyZXBhbmN5LiBNYXguIHNwZWVkIGlzCisxMCBNSHogY29ycmVzcC4gdG8gYSBtaW4uIE5lZ29QZXJpb2Qgb2YgMTAwIG5zLiAKKyhUaGUgZHJpdmVyIGFsbG93cyBzbGlnaHRseSBoaWdoZXIgc3BlZWRzIGlmIHRoZSBkZXZpY2VzIChVbHRyYSBTQ1NJKSBhY2NlcHQKK2l0LCBidXQgdGhhdCdzIG91dCBvZiBhZGFwdGVyIHNwZWMsIG9uIHlvdXIgb3duIHJpc2sgYW5kIHVubGlrZWx5IHRvIGltcHJvdmUKK3BlcmZvcm1hbmNlLiBZb3UncmUgbGlrZWx5IHRvIGNyYXNoIHlvdXIgZGlza3MuKSAKK1N5bmNPZmZzIGlzIHRoZSBvZmZzZXQgdXNlZCBmb3Igc3luY2hyb25vdXMgbmVnb3RpYXRpb25zOyBtYXguIGlzIDE1LiAKK1RoZSBsYXN0IHZhbHVlcyBhcmUgb25seSBzaG93biwgaWYgU3luYyBpcyBlbmFibGVkLiAoTmVnb1BlcmlvZCBpcyBzdGlsbAorZGlzcGxheWVkIGluIGJyYWNrZXRzIHRvIHNob3cgdGhlIHZhbHVlcyB3aGljaCB3aWxsIGJlIHVzZWQgYWZ0ZXIgZW5hYmxpbmcKK1N5bmMuKQorTWF4Q21kIGlzdCB0aGUgbnVtYmVyIG9mIGNvbW1hbmRzICg9dGFncykgd2hpY2ggY2FuIGJlIHByb2Nlc3NlZCBhdCB0aGUgc2FtZQordGltZSBieSB0aGUgZGV2aWNlLgorCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgYSBzZXR0aW5nLCB5b3UgY2FuIGRvIHRoYXQgYnkgd3JpdGluZyB0bworL3Byb2Mvc2NzaS90bXNjc2ltLz8uIEJhc2ljYWxseSB5b3UgaGF2ZSB0byBpbWl0YXRlIHRoZSBvdXRwdXQgb2YgZHJpdmVyLgorKERvbid0IHVzZSB0aGUgYnJhY2tldHMgZm9yIE5lZ29QZXJpb2Qgb24gU3luYyBkaXNhYmxlZCBkZXZpY2VzLikKK1lvdSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgY2FwaXRhbGlzYXRpb24uIFRoZSBkcml2ZXIgd2lsbCBhY2NlcHQgc3BhY2UsCit0YWIsIGNvbW1hLCA9IGFuZCA6IGFzIHNlcGFyYXRvcnMuCisKK1RoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiBjaGFuZ2VzOiAKKworKDEpIENoYW5nZSBkcml2ZXIgc2V0dGluZ3M6IAorICAgIFlvdSB0eXBlIHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyBhbmQgdGhlIHBhcmFtcyBmb2xsb3dpbmcgaXQuCisgICAgRXhhbXBsZToKKyAgICAgZWNobyAiTWF4TFVOPTggc2VsdGltZW91dCAyMDAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorCisgICAgTm90ZSB0aGF0IHlvdSBjYW4gb25seSBjaGFuZ2UgTWF4SUQsIE1heExVTiwgQWRhcHRlcklELCBTZWxUaW1lT3V0LAorICAgIFRhZ01heE51bSwgQUNCRmxhZywgR2xpdGNoRWF0ZXIgYW5kIERlbGF5UmVzZXQuIERvbid0IGNoYW5nZSBBQ0JGbGFnCisgICAgdW5sZXNzIHlvdSB3YW50IHRvIHNlZSB3aGF0IGhhcHBlbnMsIGlmIHRoZSBkcml2ZXIgaGFuZ3MuCisKKygyKSBDaGFuZ2UgZGV2aWNlIHNldHRpbmdzOiBZb3Ugd3JpdGUgYSBjb25maWcgbGluZSB0byB0aGUgZHJpdmVyLiBUaGUgTnIKKyAgICBtdXN0IG1hdGNoIHRoZSBJRCBhbmQgTFVOIGdpdmVuLiBJZiB5b3UgZ2l2ZSAiLSIgYXMgcGFyYW1ldGVyLCBpdCBpcworICAgIGlnbm9yZWQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNldHRpbmcgd29uJ3QgYmUgY2hhbmdlZC4gCisgICAgWW91IGNhbiB1c2UgInkiIG9yICJuIiBpbnN0ZWFkIG9mICJZZXMiIGFuZCAiTm8iIGlmIHlvdSB3YW50IHRvLgorICAgIFlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBmdWxsIGxpbmUuIFRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBwZXJmb3JtcworICAgIGFuIElOUVVJUlkgb24gdGhlIGRldmljZSBpZiBuZWNlc3NhcnkgdG8gY2hlY2sgaWYgaXQgaXMgY2FwYWJsZSB0byBvcGVyYXRlCisgICAgd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3MgKFN5bmMsIFRhZ1EpLgorICAgIEV4YW1wbGVzOgorICAgICBlY2hvICIwIDAgMCB5IHkgeSAtIHkgLSAxMCAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorICAgICBlY2hvICIzIDUgMCB5IG4geSAiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorCisgICAgVG8gZ2l2ZSBhIHNob3J0IGV4cGxhbmF0aW9uIG9mIHRoZSBmaXJzdCBleGFtcGxlOiAKKyAgICBUaGUgZmlyc3QgdGhyZWUgbnVtYmVycywgIjAgMCAwIiAoRGV2aWNlIGluZGV4IDAsIFNDU0kgSUQgMCwgU0NTSSBMVU4gMCksCisgICAgc2VsZWN0IHRoZSBkZXZpY2UgdG8gd2hpY2ggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFwcGx5LiBOb3RlIHRoYXQgaXQKKyAgICB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIHVzZSB0aGUgaW5kZXggb3IgYm90aCBTQ1NJIElEIGFuZCBMVU4sIGJ1dCBJIGNob3NlCisgICAgdG8gcmVxdWlyZSBhbGwgdGhyZWUgdG8gaGF2ZSBhIHN5bnRheCBzaW1pbGFyIHRvIHRoZSBvdXRwdXQuCisgICAgVGhlIGZvbGxvd2luZyAieSB5IHkgLSB5IiBlbmFibGVzIFBhcml0eSBjaGVja2luZywgZW5hYmxlcyBTeW5jaHJvbm91cworICAgIHRyYW5zZmVycywgRGlzY29ubmVjdGlvbiwgbGVhdmVzIFNlbmQgU3RhcnQgKG5vdCB1c2VkKSB1bnRvdWNoZWQgYW5kCisgICAgZW5hYmxlcyBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZyBmb3IgdGhlIHNlbGVjdGVkIGRldmljZS4gVGhlICItIiBza2lwcworICAgIHRoZSBOZWdvdGlhdGlvbiBQZXJpb2Qgc2V0dGluZyBidXQgdGhlICIxMCIgc2V0cyB0aGUgbWF4IHN5bmMuIHNwZWVkIHRvCisgICAgMTAgTUh6LiBJdCdzIHVzZWxlc3MgdG8gc3BlY2lmeSBib3RoIE5lZ29QZXJpb2QgYW5kIFN5bmNTcGVlZCBhcworICAgIGRpc2N1c3NlZCBhYm92ZS4gVGhlIHZhbHVlcyB1c2VkIGluIHRoaXMgZXhhbXBsZSB3aWxsIHJlc3VsdCBpbiBtYXhpbXVtCisgICAgcGVyZm9ybWFuY2UuCisKKygzKSBTcGVjaWFsIGNvbW1hbmRzOiBZb3UgY2FuIGZvcmNlIGEgU0NTSSBidXMgcmVzZXQsIGFuIElOUVVJUlkgY29tbWFuZCwgdGhlCisgICAgcmVtb3ZhbCBvciB0aGUgYWRkaXRpb24gb2YgYSBkZXZpY2UncyBEQ0IgYW5kIGEgU0NTSSByZWdpc3RlciBkdW1wLgorICAgIFRoaXMgaXMgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgd2hlbiB5b3UgbWVldCBwcm9ibGVtcy4gVGhlIHBhcmFtZXRlciBvZgorICAgIHRoZSBJTlFVSVJZIGFuZCBSRU1PVkUgY29tbWFuZHMgaXMgdGhlIGRldmljZSBpbmRleCBhcyBzaG93biBieSB0aGUKKyAgICBvdXRwdXQgb2YgL3Byb2Mvc2NzaS90bXNjc2ltLz8gaW4gdGhlIGRldmljZSBsaXN0aW5nIGluIHRoZSBmaXJzdCBjb2x1bW4KKyAgICAoSWR4KS4gQUREIHRha2VzIHRoZSBTQ1NJIElEIGFuZCBMVU4uCisgICAgRXhhbXBsZXM6CisgICAgIGVjaG8gInJlc2V0IiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKyAgICAgZWNobyAiaW5xdWlyeSAxIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKyAgICAgZWNobyAicmVtb3ZlIDIiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMQorICAgICBlY2hvICJhZGQgMiAzIiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8KKyAgICAgZWNobyAiZHVtcCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisKKyAgICBOb3RlIHRoYXQgeW91IHdpbGwgbWVldCBwcm9ibGVtcyB3aGVuIHlvdSBSRU1PVkUgYSBkZXZpY2UncyBEQ0Igd2l0aCB0aGUKKyAgICByZW1vdmUgY29tbWFuZCBpZiBpdCBjb250YWlucyBwYXJ0aXRpb25zIHdoaWNoIGFyZSBtb3VudGVkLiBPbmx5IHVzZSBpdAorICAgIGFmdGVyIHVubW91bnRpbmcgaXRzIHBhcnRpdGlvbnMsIHRlbGxpbmcgdGhlIFNDU0kgbWlkLWxldmVsIGNvZGUgdG8KKyAgICByZW1vdmUgaXQgKHNjc2kgcmVtb3ZlLXNpbmdsZS1kZXZpY2UpIGFuZCB5b3UgcmVhbGx5IG5lZWQgYSBmZXcgYnl0ZXMgb2YKKyAgICBtZW1vcnkuCisgICAgVGhlIEFERCBjb21tYW5kIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGEgZGV2aWNlIGJlZm9yZSB5b3UgdGVsbCB0aGUKKyAgICBtaWQtbGV2ZWwgY29kZSB0byB0cnkgZGV0ZWN0aW9uLgorCisKK0knZCBzdWdnZXN0IHJldmlld2luZyB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGFmdGVyIGNoYW5naW5nCitzZXR0aW5ncyB0byBzZWUgaWYgZXZlcnl0aGluZyBjaGFuZ2VkIGFzIHJlcXVlc3RlZC4KKworCis1LiBDb25maWd1cmF0aW9uIHZpYSBib290L21vZHVsZSBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaXRoIHRoZSBEQzM5MCwgdGhlIGRyaXZlciByZWFkcyBpdHMgRUVQUk9NIHNldHRpbmdzIGFuZCB0cmllcyB0byB1c2UgdGhlbS4KK0J1dCB5b3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIHNldHRpbmdzIHByaW9yIHRvIGJlaW5nIGFibGUgdG8gY2hhbmdlIHRoZQorZHJpdmVyIGNvbmZpZ3VyYXRpb24gdmlhIC9wcm9jL3Njc2kvdG1zY3NpbS8/LgorSWYgeW91IGRvIGhhdmUgYW5vdGhlciBBTTUzQzk3NCBiYXNlZCBhZGFwdGVyLCB0aGF0J3MgZXZlbiB0aGUgb25seQorcG9zc2liaWxpdHkgdG8gYWRqdXN0IHNldHRpbmdzIGJlZm9yZSB5b3UgYXJlIGFibGUgdG8gd3JpdGUgdG8gdGhlCisvcHJvYy9zY3NpL3Rtc2NzaW0vPyBwc2V1ZG8tZmlsZSwgZS5nLiBpZiB5b3Ugd2FudCB0byB1c2UgYW5vdGhlciAKK2FkYXB0ZXIgSUQgdGhhbiA3LiAgCisoQlRXLCB0aGUgbG9nIG1lc3NhZ2UgIkRDMzkwOiBObyBFRVBST00gZm91bmQhIiBpcyBub3JtYWwgd2l0aG91dCBhIERDMzkwLikKK0ZvciB0aGlzIHB1cnBvc2UsIHlvdSBjYW4gcGFzcyBvcHRpb25zIHRvIHRoZSBkcml2ZXIgYmVmb3JlIGl0IGlzIGluaXRpYWxpc2VkCitieSB1c2luZyBrZXJuZWwgb3IgbW9kdWxlIHBhcmFtZXRlcnMuIFNlZSBsaWxvKDgpIG9yIG1vZHByb2JlKDEpIG1hbnVhbAorcGFnZXMgb24gaG93IHRvIHBhc3MgcGFyYW1zIHRvIHRoZSBrZXJuZWwgb3IgYSBtb2R1bGUuCitbTk9URTogRm9ybWVybHksIGl0IHdhcyBub3QgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIEVFUFJPTSBzdXBwbGllZAorIHNldHRpbmdzIG9mIHRoZSBEQzM5MCB3aXRoIGNtZCBsaW5lIHBhcmFtZXRlcnMuIFRoaXMgaGFzIGNoYW5nZWQgc2luY2UKKyAyLjBlN10KKworVGhlIHN5bnRheCBvZiB0aGUgcGFyYW1zIGlzIG11Y2ggc2hvcnRlciB0aGFuIHRoZSBzeW50YXggb2YgdGhlIC9wcm9jLy4uLgoraW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGEgbGl0dGxlIGJpdCBtb3JlIGRpZmZpY3VsdCB0byB1c2UuIEhvd2V2ZXIsIGxvbmcKK3BhcmFtZXRlciBsaW5lcyBoYXZlIHRoZSByaXNrIHRvIGJlIG1pc2ludGVycHJldGVkIGFuZCB0aGUgbGVuZ3RoIG9mIGtlcm5lbAorcGFyYW1ldGVycyBpcyBsaW1pdGVkLgorCitBcyB0aGUgc3VwcG9ydCBmb3Igbm9uLURDMzkwIGFkYXB0ZXJzIHdvcmtzIGJ5IHNpbXVsYXRpbmcgdGhlIHZhbHVlcyBvZiB0aGUKK0RDMzkwIEVFUFJPTSwgdGhlIHNldHRpbmdzIGFyZSBnaXZlbiBpbiBhIERDMzkwIEJJT1MnIHdheS4KKworSGVyZSdzIHRoZSBzeW50YXg6Cit0bXNjc2ltPUFkYXB0SUQsU3BkSWR4LERldk1vZGUsQWRhcHRNb2RlLFRhZ2dlZENtbmRzLERlbGF5UmVzZXQKKworRWFjaCBvZiB0aGUgcGFyYW1ldGVycyBpcyBhIG51bWJlciwgY29udGFpbmluZyB0aGUgZGVzY3JpYmVkIGluZm9ybWF0aW9uOgorCisqIEFkYXB0SUQ6IFRoZSBTQ1NJIElEIG9mIHRoZSBob3N0IGFkYXB0ZXIuIE11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjcKKyAgRGVmYXVsdCBpcyA3LgorCisqIFNwZElkeDogVGhlIGluZGV4IG9mIHRoZSBtYXhpbXVtIHNwZWVkIGFzIGluIHRoZSBEQzM5MCBCSU9TLiBUaGUgdmFsdWVzCisgIDAuLjcgbWVhbiAxMCwgOC4wLCA2LjcsIDUuNywgNS4wLCA0LjAsIDMuMSBhbmQgMiBNSHogcmVzcC4gRGVmYXVsdCBpcworICAwICgxMC4wIE1IeikuCisKKyogRGV2TW9kZSBpcyBhIGJpdCBtYXBwZWQgdmFsdWUgZGVzY3JpYmluZyB0aGUgcGVyLWRldmljZSBmZWF0dXJlcy4gSXQKKyAgYXBwbGllcyB0byBhbGwgZGV2aWNlcy4gKFN5bmMsIERpc2MgYW5kIFRhZ1Egd2lsbCBvbmx5IGFwcGx5LCBpZiB0aGUKKyAgZGV2aWNlIHN1cHBvcnRzIGl0LikgVGhlIG1lYW5pbmcgb2YgdGhlIGJpdHMgKCogPSBkZWZhdWx0KToKKworICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAqMAkgMHgwMQkgICAgMQkgIFBhcml0eSBjaGVjaworICAgKjEJIDB4MDIJICAgIDIJICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbgorICAgKjIJIDB4MDQJICAgIDQJICBEaXNjb25uZWN0aW9uCisgICAqMwkgMHgwOAkgICAgOAkgIFNlbmQgU3RhcnQgY29tbWFuZCBvbiBzdGFydHVwLiAoTm90IHVzZWQpCisgICAqNAkgMHgxMAkgICAxNgkgIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nCisKKyAgQXMgdXN1YWwsIHRoZSBkZXNpcmVkIHZhbHVlIGlzIG9idGFpbmVkIGJ5IGFkZGluZyB0aGUgd2FudGVkIHZhbHVlcy4gSWYKKyAgeW91IHdhbnQgdG8gZW5hYmxlIGFsbCB2YWx1ZXMsIGUuZy4sIHlvdSB3b3VsZCB1c2UgMzEoMHgxZikuIERlZmF1bHQgaXMgMzEuCisKKyogQWRhcHRNb2RlIGlzIGEgYml0IG1hcHBlZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSBlbmFibGVkIGFkYXB0ZXIgZmVhdHVyZXMuCisKKyAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgKjAJIDB4MDEJICAgIDEJICBTdXBwb3J0IG1vcmUgdGhhbiB0d28gZHJpdmVzLiAoTm90IHVzZWQpCisgICAqMQkgMHgwMgkgICAgMgkgIFVzZSBET1MgY29tcGF0aWJsZSBtYXBwaW5nIGZvciBIRHMgZ3JlYXRlciB0aGFuIDFHQi4KKyAgICoyCSAweDA0CSAgICA0CSAgUmVzZXQgU0NTSSBCdXMgb24gc3RhcnR1cC4KKyAgICozCSAweDA4CSAgICA4CSAgQWN0aXZlIE5lZ2F0aW9uOiBJbXByb3ZlcyBTQ1NJIEJ1cyBub2lzZSBpbW11bml0eS4KKyAgICA0CSAweDEwCSAgIDE2CSAgSW1tZWRpYXRlIHJldHVybiBvbiBCSU9TIHNlZWsgY29tbWFuZC4gKE5vdCB1c2VkKQorICgqKTUJIDB4MjAJICAgMzIJICBDaGVjayBmb3IgTFVOcyA+PSAxLgorICAKKyAgVGhlIGRlZmF1bHQgZm9yIExVTiBDaGVjayBkZXBlbmRzIG9uIENPTkZJR19TQ1NJX01VTFRJX0xVTi4KKworKiBUYWdnZWRDbW5kcyBpcyBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMuCisgIEl0IGlzIHRoZSBiaW5hcnkgbG9nYXJpdGhtIC0gMSBvZiB0aGUgYWN0dWFsIG51bWJlci4gTWF4IGlzIDQgKDMyKS4KKyAgIFZhbHVlICBOdW1iZXIgb2YgVGFnZ2VkIENvbW1hbmRzCisgICAgIDAJCSAyCisgICAgIDEJCSA0CisgICAgIDIJCSA4CisgICAgKjMJCTE2CisgICAgIDQJCTMyCisKKyogRGVsYXlSZXNldCBpcyB0aGUgdGltZSBpbiBzZWNvbmRzIChtaW51cyAwLjVzKSwgdGhlIGFkYXB0ZXIgd2FpdHMsIGFmdGVyIGEKKyAgYnVzIHJlc2V0LiBEZWZhdWx0IGlzIDEgKGNvcnJlc3AuIHRvIDEuNXMpLgorCitFeGFtcGxlOgorIG1vZHByb2JlIHRtc2NzaW0gdG1zY3NpbT02LDIsMzEKK3dvdWxkIHNldCB0aGUgYWRhcHRlciBJRCB0byA2LCBtYXguIHNwZWVkIHRvIDYuNyBNSHosIGVuYWJsZSBhbGwgZGV2aWNlCitmZWF0dXJlcyBhbmQgbGVhdmUgdGhlIGFkYXB0ZXIgZmVhdHVyZXMsIHRoZSBudW1iZXIgb2YgVGFnZ2VkIENvbW1hbmRzCithbmQgdGhlIERlbGF5IGFmdGVyIGEgcmVzZXQgdG8gdGhlIGRlZmF1bHRzLgorCitBcyB5b3UgY2FuIHNlZSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhbGwgb2YgdGhlIHNpeCBwYXJhbXMuCitJZiB5b3Ugd2FudCB2YWx1ZXMgdG8gYmUgaWdub3JlZCAoaS5lLiB0aGUgRUVwcm9tIHNldHRpbmdzIG9yIHRoZSBkZWZhdWx0cword2lsbCBiZSB1c2VkKSwgeW91IG1heSBwYXNzIC0yIChub3QgMCEpIGF0IHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLgorCitUaGUgZGVmYXVsdHMgKDcsMCwzMSwxNSwzLDEpIGFyZSBhZ2dyZXNzaXZlIHRvIGFsbG93IGdvb2QgcGVyZm9ybWFuY2UuIFlvdQorY2FuIHVzZSB0bXNjc2ltPTcsMCwzMSw2Myw0LDAgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UsIGlmIHlvdXIgU0NTSSBjaGFpbgorYWxsb3dzIGl0LiBJZiB5b3UgbWVldCBwcm9ibGVtcywgeW91IGNhbiB1c2UgdG1zY3NpbT0tMSB3aGljaCBpcyBhIHNob3J0Y3V0Citmb3IgdG1zY3NpbT03LDQsOSwxNSwyLDEwLgorCisKKzYuIFBvdGVudGlhbCBpbXByb3ZlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01vc3Qgb2YgdGhlIGludGVuZGVkIHdvcmsgb24gdGhlIGRyaXZlciBoYXMgYmVlbiBkb25lLiBIZXJlIGFyZSBhIGZldyBpZGVhcwordG8gZnVydGhlciBpbXByb3ZlIGl0cyB1c2FiaWxpdHk6CisKKyogQ2xlYW5seSBzZXBhcmF0ZSBwZXItVGFyZ2V0IGFuZCBwZXItTFVOIHByb3BlcnRpZXMgKERDQikKKyogTW9yZSBpbnRlbGxpZ2VudCBhYm9ydCgpIHJvdXRpbmUKKyogVXNlIG5ld19laCBjb2RlIChMaW51eC0yLjErKQorKiBIYXZlIHRoZSBtaWQtbGV2ZWwgKE1MKSBjb2RlIChhbmQgbm90IHRoZSBkcml2ZXIpIGhhbmRsZSBtb3JlIG9mIHRoZQorICB2YXJpb3VzIGNvbmRpdGlvbnMuCisqIENvbW1hbmQgcXVldWVpbmcgaW4gdGhlIGRyaXZlcjogRWxpbWluYXRlIFF1ZXJ5IGxpc3QgYW5kIHVzZSBNTCBpbnN0ZWFkLgorKiBNb3JlIHVzZXIgZnJpZW5kbHkgYm9vdC9tb2R1bGUgcGFyYW0gc3ludGF4CisKK0Z1cnRoZXIgaW52ZXN0aWdhdGlvbiBvbiB0aGVzZSBwcm9ibGVtczoKKworKiBEcml2ZXIgaGFuZ3Mgd2l0aCBzeW5jIHJlYWRjZGRhICh4Y2Ryb2FzdCkgKG1vc3QgcHJvYmFibHkgVklBIFBDSSBlcnJvcikKKworS25vd24gcHJvYmxlbXM6IAorUGxlYXNlIHNlZSBodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC9wcm9ibGVtcy5odG1sCisKKyogQ2hhbmdpbmcgdGhlIHBhcmFtZXRlcnMgb2YgbXVsdGktbHVuIGJ5IHRoZSB0bXNjc2ltLz8gaW50ZXJmYWNlIHdpbGwKKyAgY2F1c2UgcHJvYmxlbXMsIGNhdXNlIHRoZXNlIHNldHRpbmdzIGFyZSBtb3N0bHkgcGVyIFRhcmdldCBhbmQgbm90IHBlciBMVU4KKyAgYW5kIHNob3VsZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LiBUbyBiZSBmaXhlZCBmb3IgMi4wZDI0LgorKiBDRFJzIChlZyBZYW0gQ1JXNDQxNikgbm90IHJlY29nbml6ZWQsIGJlY2F1c2Ugc29tZSBidWdneSBkZXZpY2VzIGRvbid0IAorICByZWNvdmVyIGZyb20gYSBTQ1NJIHJlc2V0IGluIHRpbWUuIFVzZSBhIGhpZ2hlciBkZWxheSBvciBkb24ndCBpc3N1ZQorICBhIFNDU0kgYnVzIHJlc2V0IG9uIGRyaXZlciBpbml0aWFsaXphdGlvbi4gU2VlIHByb2JsZW1zIHBhZ2UuCisgIEZvciB0aGUgQ1JXNDQxNlMsIHRoaXMgc2VlbXMgdG8gYmUgc29sdmVkIHdpdGggZmlybXdhcmUgMS4wZyAocmVwb3J0ZWQgYnkgCisgIEplYW4tWXZlcyBCYXJiaWVyKS4KKyogVEVBQyBDRC01MzJTIG5vdCBiZWluZyByZWNvZ25pemVkLiAoV29ya3Mgd2l0aCAxLjExKS4KKyogU2Nhbm5lcnMgKGVnLiBBc3RyYSBVTUFYIDEyMjBTKSBkb24ndCB3b3JrOiBEaXNhYmxlIFN5bmMgTmVnb3RpYXRpb24uCisgIElmIHRoaXMgZG9lcyBub3QgaGVscCwgdHJ5IGVjaG8gIklOUVVJUlkgdCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/ICh0CisgIHJlcGxhY2VkIGJ5IHRoZSBkZXYgaW5kZXggb2YgeW91ciBzY2FubmVyKS4gWW91IG1heSB0cnkgdG8gcmVzZXQgeW91ciBTQ1NJCisgIGJ1cyBhZnRlcndhcmRzIChlY2hvICJSRVNFVCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8/KS4KKyAgVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgc29sdmVkIGFzIG9mIDIuMGQxOCwgdGhhbmtzIHRvIEFuZHJlYXMgUmljay4KKyogSWYgdGhlcmUgaXMgYSB2YWxpZCBwYXJ0aXRpb24gdGFibGUsIHRoZSBkcml2ZXIgd2lsbCB1c2UgaXQgZm9yIGRldGVybWluZworICB0aGUgbWFwcGluZy4gSWYgdGhlcmUncyBub25lLCBhIHJlYXNvbmFibGUgbWFwcGluZyAoU3ltYmlvcy1saWtlKSB3aWxsIGJlCisgIGFzc3VtZWQuIE90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIG1heSBub3QgbGlrZSB0aGlzIG1hcHBpbmcsIHRob3VnaAorICBpdCdzIGNvbnNpc3RlbnQgd2l0aCB0aGUgQklPUycgYmVoYXZpb3VyLiBPbGQgREMzOTAgZHJpdmVycyBpZ25vcmVkIHRoZQorICBwYXJ0aXRpb24gdGFibGUgYW5kIHVzZWQgYSBIL1MgPSA2NC8zMiBvciAyNTUvNjMgdHJhbnNsYXRpb24uIFNvIGlmIHlvdQorICB3YW50IHRvIGJlIGNvbXBhdGlibGUgdG8gdGhvc2UsIHVzZSB0aGlzIG9sZCBtYXBwaW5nIHdoZW4gY3JlYXRpbmcKKyAgcGFydGl0aW9uIHRhYmxlcy4gRXZlbiB3b3JzZSwgb24gYm9vdHVwIHRoZSBEQzM5MCBtaWdodCBjb21wbGFpbiBpZiBvdGhlcgorICBtYXBwaW5ncyBhcmUgZm91bmQsIHNvIGF1dG8gcmVib290aW5nIG1heSBmYWlsLgorKiBJbiBzb21lIHNpdHVhdGlvbnMsIHRoZSBkcml2ZXIgd2lsbCBnZXQgc3R1Y2sgaW4gYW4gYWJvcnQgbG9vcC4gVGhpcyBpcyBhCisgIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBNaWQtTGF5ZXIgb2YgTGludXgnIFNDU0kgY29kZSBhbmQgdGhlIGRyaXZlci4KKyAgVHJ5IHRvIGRpc2FibGUgRHNDbiwgaWYgeW91IG1lZXQgdGhpcyBwcm9ibGVtLiBQbGVhc2UgY29udGFjdCBtZSBmb3IKKyAgZnVydGhlciBkZWJ1Z2dpbmcuCisKKworNy4gQnVnIHJlcG9ydHMsIGRlYnVnZ2luZyBhbmQgdXBkYXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hlbmV2ZXIgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyLCB5b3UgYXJlIGludml0ZWQgdG8gYXNrIHRoZQorYXV0aG9yIGZvciBoZWxwLiBIb3dldmVyLCBJJ2Qgc3VnZ2VzdCByZWFkaW5nIHRoZSBkb2NzIGFuZCB0cnlpbmcgdG8gc29sdmUKK3RoZSBwcm9ibGVtIHlvdXJzZWxmLCBmaXJzdC4gCitJZiB5b3UgZmluZCBzb21ldGhpbmcsIHdoaWNoIHlvdSBiZWxpZXZlIHRvIGJlIGEgYnVnLCBwbGVhc2UgcmVwb3J0IGl0IHRvIG1lLiAKK1BsZWFzZSBhcHBlbmQgdGhlIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Njc2ksIC9wcm9jL3Njc2kvdG1zY3NpbS8/IGFuZAorbWF5YmUgdGhlIERDMzkwIGxvZyBtZXNzYWdlcyB0byB0aGUgcmVwb3J0LiAKKworQnVnIHJlcG9ydHMgc2hvdWxkIGJlIHNlbmQgdG8gbWUgKEt1cnQgR2FybG9mZiA8ZGMzOTBAZ2FybG9mZi5kZT4pIGFzIHdlbGwKK2FzIHRvIHRoZSBsaW51eC1zY3NpIGxpc3QgKDxsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZz4pLCBhcyBzb21ldGltZXMgYnVncworYXJlIGNhdXNlZCBieSB0aGUgU0NTSSBtaWQtbGV2ZWwgY29kZS4KKworSSB3aWxsIGFzayB5b3UgZm9yIHNvbWUgbW9yZSBkZXRhaWxzIGFuZCBwcm9iYWJseSBJIHdpbGwgYWxzbyBhc2sgeW91IHRvCitlbmFibGUgc29tZSBvZiB0aGUgREVCVUcgb3B0aW9ucyBpbiB0aGUgZHJpdmVyICh0bXNjc2ltLmM6REMzOTBfREVCVUdYWFgKK2RlZmluZXMpLiBUaGUgZHJpdmVyIHdpbGwgcHJvZHVjZSBzb21lIGRhdGEgZm9yIHRoZSBzeXNsb2cgZmFjaWxpdHkgdGhlbi4KK0Jld2FyZTogSWYgeW91ciBzeXNsb2cgZ2V0cyB3cml0dGVuIHRvIGEgU0NTSSBkaXNrIGNvbm5lY3RlZCB0byB5b3VyCitBTTUzQzk3NCwgdGhlIGxvZ2dpbmcgbWlnaHQgcHJvZHVjZSBsb2cgb3V0cHV0IGFnYWluLCBhbmQgeW91IG1pZ2h0IGVuZAoraGF2aW5nIHlvdXIgYm94IHNwZW5kaW5nIG1vc3Qgb2YgaXRzIHRpbWUgZG9pbmcgdGhlIGxvZ2dpbmcuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKKyBodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5MC8KKyBmdHA6Ly9mdHAuc3VzZS5jb20vcHViL3Blb3BsZS9nYXJsb2ZmL2xpbnV4L2RjMzkwLworCisKKzguIEFja25vd2xlZGdlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoYW5rcyB0byBMaW51cyBUb3J2YWxkcywgQWxhbiBDb3gsIHRoZSBGU0YgcGVvcGxlLCB0aGUgWEZyZWU4NiB0ZWFtIGFuZCAKK2FsbCB0aGUgb3RoZXJzIGZvciB0aGUgd29uZGVyZnVsIE9TIGFuZCBzb2Z0d2FyZS4KK1RoYW5rcyB0byBDLkwuIEh1YW5nIGFuZCBQaGlsaXAgR2lhbmcgKFRla3JhbSkgZm9yIHRoZSBpbml0aWFsIGRyaXZlcgorcmVsZWFzZSBhbmQgc3VwcG9ydC4KK1RoYW5rcyB0byBEb3VnIExlZGZvcmQsIEfpcmFyZCBSb3VkaWVyIGZvciBzdXBwb3J0IHdpdGggU0NTSSBjb2RpbmcuCitUaGFua3MgdG8gYSBsb3Qgb2YgcGVvcGxlIChlc3BlYy4gQ2hpYWtpIElzaGlrYXdhLCBBbmRyZWFzIEhhdW1lciwgSHViZXJ0IAorVG9ubmVhdSkgZm9yIGludGVuc2l2ZWx5IHRlc3RpbmcgdGhlIGRyaXZlciAoYW5kIGV2ZW4gcmlza2luZyBkYXRhIGxvc3MKK2RvaW5nIHRoaXMgZHVyaW5nIGVhcmx5IHJldmlzaW9ucykuCitSZWNlbnRseSwgU3VTRSBHbWJILCBOdWVybmJlcmcsIEZSRywgaGFzIGJlZW4gcGF5aW5nIG1lIGZvciB0aGUgZHJpdmVyCitkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UuIFNwZWNpYWwgdGhhbmtzIQorCisKKzkuIENvcHlyaWdodAorLS0tLS0tLS0tLS0tCisgVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorIElmIHlvdSB3YW50IHRvIHVzZSBhbnkgbGF0ZXIgdmVyc2lvbiBvZiB0aGUgR05VIEdQTCwgeW91IHdpbGwgcHJvYmFibHkKKyBiZSBhbGxvd2VkIHRvLCBidXQgeW91IGhhdmUgdG8gYXNrIG1lIGFuZCBUZWtyYW0gPGVyaWNoQHRla3JhbS5jb20udHc+CisgYmVmb3JlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXcml0dGVuIGJ5IEt1cnQgR2FybG9mZiA8a3VydEBnYXJsb2ZmLmRlPiAxOTk4LzA2LzExCitMYXN0IHVwZGF0ZWQgMjAwMC8xMS8yOCwgZHJpdmVyIHJldmlzaW9uIDIuMGU3CiskSWQ6IFJFQURNRS50bXNjc2ltLHYgMi4yNS4yLjcgMjAwMC8xMi8yMCAwMTowNzoxMiBnYXJsb2ZmIEV4cCAkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY2x2bC50eHQgYi9Eb2N1bWVudGF0aW9uL3NlY2x2bC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyNzRkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2VjbHZsLnR4dApAQCAtMCwwICsxLDk3IEBACitCU0QgU2VjdXJlIExldmVscyBMaW51eCBTZWN1cml0eSBNb2R1bGUKK01pY2hhZWwgQS4gSGFsY3JvdyA8bWlrZUBoYWxjcm93LnVzPgorCisKK0ludHJvZHVjdGlvbgorCitVbmRlciB0aGUgQlNEIFNlY3VyZSBMZXZlbHMgc2VjdXJpdHkgbW9kZWwsIHNldHMgb2YgcG9saWNpZXMgYXJlCithc3NvY2lhdGVkIHdpdGggbGV2ZWxzLiBMZXZlbHMgcmFuZ2UgZnJvbSAtMSB0byAyLCB3aXRoIC0xIGJlaW5nIHRoZQord2Vha2VzdCBhbmQgMiBiZWluZyB0aGUgc3Ryb25nZXN0LiBUaGVzZSBzZWN1cml0eSBwb2xpY2llcyBhcmUKK2VuZm9yY2VkIGF0IHRoZSBrZXJuZWwgbGV2ZWwsIHNvIG5vdCBldmVuIHRoZSBzdXBlcnVzZXIgaXMgYWJsZSB0bworZGlzYWJsZSBvciBjaXJjdW12ZW50IHRoZW0uIFRoaXMgaGFyZGVucyB0aGUgbWFjaGluZSBhZ2FpbnN0IGF0dGFja2Vycword2hvIGdhaW4gcm9vdCBhY2Nlc3MgdG8gdGhlIHN5c3RlbS4KKworCitMZXZlbHMgYW5kIFBvbGljaWVzCisKK0xldmVsIC0xIChQZXJtYW5lbnRseSBJbnNlY3VyZSk6CisgLSBDYW5ub3QgaW5jcmVhc2UgdGhlIHNlY3VyZSBsZXZlbAorCitMZXZlbCAwIChJbnNlY3VyZSk6CisgLSBDYW5ub3QgcHRyYWNlIHRoZSBpbml0IHByb2Nlc3MKKworTGV2ZWwgMSAoRGVmYXVsdCk6CisgLSAvZGV2L21lbSBhbmQgL2Rldi9rbWVtIGFyZSByZWFkLW9ubHkKKyAtIElNTVVUQUJMRSBhbmQgQVBQRU5EIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGlmIHNldCwgbWF5IG5vdCBiZSB1bnNldAorIC0gQ2Fubm90IGxvYWQgb3IgdW5sb2FkIGtlcm5lbCBtb2R1bGVzCisgLSBDYW5ub3Qgd3JpdGUgZGlyZWN0bHkgdG8gYSBtb3VudGVkIGJsb2NrIGRldmljZQorIC0gQ2Fubm90IHBlcmZvcm0gcmF3IEkvTyBvcGVyYXRpb25zCisgLSBDYW5ub3QgcGVyZm9ybSBuZXR3b3JrIGFkbWluaXN0cmF0aXZlIHRhc2tzCisgLSBDYW5ub3Qgc2V0dWlkIGFueSBmaWxlCisKK0xldmVsIDIgKFNlY3VyZSk6CisgLSBDYW5ub3QgZGVjcmVtZW50IHRoZSBzeXN0ZW0gdGltZQorIC0gQ2Fubm90IHdyaXRlIHRvIGFueSBibG9jayBkZXZpY2UsIHdoZXRoZXIgbW91bnRlZCBvciBub3QKKyAtIENhbm5vdCB1bm1vdW50IGFueSBtb3VudGVkIGZpbGVzeXN0ZW1zCisKKworQ29tcGlsYXRpb24KKworVG8gY29tcGlsZSB0aGUgQlNEIFNlY3VyZSBMZXZlbHMgTFNNLCBzZWNsdmwua28sIGVuYWJsZSB0aGUKK1NFQ1VSSVRZX1NFQ0xWTCBjb25maWd1cmF0aW9uIG9wdGlvbi4gIFRoaXMgaXMgZm91bmQgdW5kZXIgU2VjdXJpdHkKK29wdGlvbnMgLT4gQlNEIFNlY3VyZSBMZXZlbHMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG1lbnUuCisKKworQmFzaWMgVXNhZ2UKKworT25jZSB0aGUgbWFjaGluZSBpcyBpbiBhIHJ1bm5pbmcgc3RhdGUsIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgbW9kdWxlcworbG9hZGVkIGFuZCBhbGwgdGhlIGZpbGVzeXN0ZW1zIG1vdW50ZWQsIHlvdSBjYW4gbG9hZCB0aGUgc2VjbHZsLmtvCittb2R1bGU6CisKKyMgaW5zbW9kIHNlY2x2bC5rbworCitUaGUgbW9kdWxlIGRlZmF1bHRzIHRvIHNlY3VyZSBsZXZlbCAxLCBleGNlcHQgd2hlbiBjb21waWxlZCBkaXJlY3RseQoraW50byB0aGUga2VybmVsLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIHNlY3VyZSBsZXZlbCAwLiBUbyByYWlzZQordGhlIHNlY3VyZSBsZXZlbCB0byAyLCB0aGUgYWRtaW5pc3RyYXRvciB3cml0ZXMgYGAyJycgdG8gdGhlCitzZWNsdmwvc2VjbHZsIGZpbGUgdW5kZXIgdGhlIHN5c2ZzIG1vdW50IHBvaW50IChhc3N1bWVkIHRvIGJlIC9zeXMgaW4KK3RoZXNlIGV4YW1wbGVzKToKKworIyBlY2hvIC1uICIyIiA+IC9zeXMvc2VjbHZsL3NlY2x2bAorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGluaXRpYWxpemUgdGhlIG1vZHVsZSBhdCBzZWN1cmUgbGV2ZWwgMiB3aXRoCit0aGUgaW5pdGx2bCBtb2R1bGUgcGFyYW1ldGVyOgorCisjIGluc21vZCBzZWNsdmwua28gaW5pdGx2bD0yCisKK0F0IHRoaXMgcG9pbnQsIGl0IGlzIGltcG9zc2libGUgdG8gcmVtb3ZlIHRoZSBtb2R1bGUgb3IgcmVkdWNlIHRoZQorc2VjdXJlIGxldmVsLiAgSWYgdGhlIGFkbWluaXN0cmF0b3Igd2lzaGVzIHRvIGhhdmUgdGhlIG9wdGlvbiBvZiBkb2luZworc28sIGhlIG11c3QgcHJvdmlkZSBhIG1vZHVsZSBwYXJhbWV0ZXIsIHNoYTFfcGFzc3dkLCB0aGF0IHNwZWNpZmllcwordGhlIFNIQTEgaGFzaCBvZiB0aGUgcGFzc3dvcmQgdGhhdCBjYW4gYmUgdXNlZCB0byByZWR1Y2UgdGhlIHNlY3VyZQorbGV2ZWwgdG8gMC4KKworVG8gZ2VuZXJhdGUgdGhpcyBTSEExIGhhc2gsIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiB1c2UgT3BlblNTTDoKKworIyBlY2hvIC1uICJib29nYWJvb2dhIiB8IG9wZW5zc2wgc2hhMQorYWJlZGE0ZTBmMzNkZWZhNTE3NDEyMTc1OTJiZjU5NWVmYjhkMjg5YworCitJbiBvcmRlciB0byB1c2UgcGFzc3dvcmQtaW5zdGlnYXRlZCBzZWN1cmUgbGV2ZWwgcmVkdWN0aW9uLCB0aGUgU0hBMQorY3J5cHRvIG1vZHVsZSBtdXN0IGJlIGxvYWRlZCBvciBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWw6CisKKyMgaW5zbW9kIHNoYTEua28KKworVGhlIGFkbWluaXN0cmF0b3IgY2FuIHRoZW4gaW5zbW9kIHRoZSBzZWNsdmwgbW9kdWxlLCBpbmNsdWRpbmcgdGhlCitTSEExIGhhc2ggb2YgdGhlIHBhc3N3b3JkOgorCisjIGluc21vZCBzZWNsdmwua28KKyAgICAgICAgIHNoYTFfcGFzc3dkPWFiZWRhNGUwZjMzZGVmYTUxNzQxMjE3NTkyYmY1OTVlZmI4ZDI4OWMKKworVG8gcmVkdWNlIHRoZSBzZWN1cmUgbGV2ZWwsIHdyaXRlIHRoZSBwYXNzd29yZCB0byBzZWNsdmwvcGFzc3dkIHVuZGVyCit5b3VyIHN5c2ZzIG1vdW50IHBvaW50OgorCisjIGVjaG8gLW4gImJvb2dhYm9vZ2EiID4gL3N5cy9zZWNsdmwvcGFzc3dkCisKK1RoZSBTZXB0ZW1iZXIgMjAwNCBlZGl0aW9uIG9mIFN5cyBBZG1pbiBNYWdhemluZSBoYXMgYW4gYXJ0aWNsZSBhYm91dAordGhlIEJTRCBTZWN1cmUgTGV2ZWxzIExTTS4gIEkgZW5jb3VyYWdlIHlvdSB0byByZWZlciB0byB0aGF0IGFydGljbGUKK2ZvciBhIG1vcmUgaW4tZGVwdGggdHJlYXRtZW50IG9mIHRoaXMgc2VjdXJpdHkgbW9kdWxlOgorCitodHRwOi8vd3d3LnNhbWFnLmNvbS9kb2N1bWVudHMvcz05MzA0L3NhbTA0MDlhLzA0MDlhLmh0bQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwtY29uc29sZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC1jb25zb2xlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzY4OWIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwtY29uc29sZS50eHQKQEAgLTAsMCArMSwxMDQgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgTGludXggU2VyaWFsIENvbnNvbGUKKworVG8gdXNlIGEgc2VyaWFsIHBvcnQgYXMgY29uc29sZSB5b3UgbmVlZCB0byBjb21waWxlIHRoZSBzdXBwb3J0IGludG8geW91cgora2VybmVsIC0gYnkgZGVmYXVsdCBpdCBpcyBub3QgY29tcGlsZWQgaW4uIEZvciBQQyBzdHlsZSBzZXJpYWwgcG9ydHMKK2l0J3MgdGhlIGNvbmZpZyBvcHRpb24gbmV4dCB0byAiU3RhbmRhcmQvZ2VuZXJpYyAoZHVtYikgc2VyaWFsIHN1cHBvcnQiLgorWW91IG11c3QgY29tcGlsZSBzZXJpYWwgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgYW5kIG5vdCBhcyBhIG1vZHVsZS4KKworSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBtdWx0aXBsZSBkZXZpY2VzIGZvciBjb25zb2xlIG91dHB1dC4gWW91IGNhbgorZGVmaW5lIGEgbmV3IGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIHNlbGVjdCB3aGljaCBkZXZpY2UocykgdG8KK3VzZSBmb3IgY29uc29sZSBvdXRwdXQuCisKK1RoZSBmb3JtYXQgb2YgdGhpcyBvcHRpb24gaXM6CisKKwljb25zb2xlPWRldmljZSxvcHRpb25zCisKKwlkZXZpY2U6CQl0dHkwIGZvciB0aGUgZm9yZWdyb3VuZCB2aXJ0dWFsIGNvbnNvbGUKKwkJCXR0eVggZm9yIGFueSBvdGhlciB2aXJ0dWFsIGNvbnNvbGUKKwkJCXR0eVN4IGZvciBhIHNlcmlhbCBwb3J0CisJCQlscDAgZm9yIHRoZSBmaXJzdCBwYXJhbGxlbCBwb3J0CisKKwlvcHRpb25zOglkZXBlbmQgb24gdGhlIGRyaXZlci4gRm9yIHRoZSBzZXJpYWwgcG9ydCB0aGlzCisJCQlkZWZpbmVzIHRoZSBiYXVkcmF0ZS9wYXJpdHkvYml0cyBvZiB0aGUgcG9ydCwKKwkJCWluIHRoZSBmb3JtYXQgQkJCQlBOLCB3aGVyZSBCQkJCIGlzIHRoZSBzcGVlZCwKKwkJCVAgaXMgcGFyaXR5IChuL28vZSksIGFuZCBOIGlzIGJpdHMuIERlZmF1bHQgaXMKKwkJCTk2MDBuOC4gVGhlIG1heGltdW0gYmF1ZHJhdGUgaXMgMTE1MjAwLgorCitZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgY29uc29sZT0gb3B0aW9ucyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KK091dHB1dCB3aWxsIGFwcGVhciBvbiBhbGwgb2YgdGhlbS4gVGhlIGxhc3QgZGV2aWNlIHdpbGwgYmUgdXNlZCB3aGVuCit5b3Ugb3BlbiAvZGV2L2NvbnNvbGUuIFNvLCBmb3IgZXhhbXBsZToKKworCWNvbnNvbGU9dHR5UzEsOTYwMCBjb25zb2xlPXR0eTAKKworZGVmaW5lcyB0aGF0IG9wZW5pbmcgL2Rldi9jb25zb2xlIHdpbGwgZ2V0IHlvdSB0aGUgY3VycmVudCBmb3JlZ3JvdW5kCit2aXJ0dWFsIGNvbnNvbGUsIGFuZCBrZXJuZWwgbWVzc2FnZXMgd2lsbCBhcHBlYXIgb24gYm90aCB0aGUgVkdBCitjb25zb2xlIGFuZCB0aGUgMm5kIHNlcmlhbCBwb3J0ICh0dHlTMSBvciBDT00yKSBhdCA5NjAwIGJhdWQuCisKK05vdGUgdGhhdCB5b3UgY2FuIG9ubHkgZGVmaW5lIG9uZSBjb25zb2xlIHBlciBkZXZpY2UgdHlwZSAoc2VyaWFsLCB2aWRlbykuCisKK0lmIG5vIGNvbnNvbGUgZGV2aWNlIGlzIHNwZWNpZmllZCwgdGhlIGZpcnN0IGRldmljZSBmb3VuZCBjYXBhYmxlIG9mCithY3RpbmcgYXMgYSBzeXN0ZW0gY29uc29sZSB3aWxsIGJlIHVzZWQuIEF0IHRoaXMgdGltZSwgdGhlIHN5c3RlbQorZmlyc3QgbG9va3MgZm9yIGEgVkdBIGNhcmQgYW5kIHRoZW4gZm9yIGEgc2VyaWFsIHBvcnQuIFNvIGlmIHlvdSBkb24ndAoraGF2ZSBhIFZHQSBjYXJkIGluIHlvdXIgc3lzdGVtIHRoZSBmaXJzdCBzZXJpYWwgcG9ydCB3aWxsIGF1dG9tYXRpY2FsbHkKK2JlY29tZSB0aGUgY29uc29sZS4KKworWW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBuZXcgZGV2aWNlIHRvIHVzZSAvZGV2L2NvbnNvbGUuIFRoZSBvZmZpY2lhbAorL2Rldi9jb25zb2xlIGlzIG5vdyBjaGFyYWN0ZXIgZGV2aWNlIDUsMS4KKworSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCB3aWxsIHVzZSAvZGV2L3R0eVMxIChDT00yKSBhcyB0aGUgY29uc29sZS4KK1JlcGxhY2UgdGhlIHNhbXBsZSB2YWx1ZXMgYXMgbmVlZGVkLgorCisxLiBDcmVhdGUgL2Rldi9jb25zb2xlIChyZWFsIGNvbnNvbGUpIGFuZCAvZGV2L3R0eTAgKG1hc3RlciB2aXJ0dWFsCisgICBjb25zb2xlKToKKworICAgY2QgL2RldgorICAgcm0gLWYgY29uc29sZSB0dHkwCisgICBta25vZCAtbSA2MjIgY29uc29sZSBjIDUgMQorICAgbWtub2QgLW0gNjIyIHR0eTAgYyA0IDAKKworMi4gTElMTyBjYW4gYWxzbyB0YWtlIGlucHV0IGZyb20gYSBzZXJpYWwgZGV2aWNlLiBUaGlzIGlzIGEgdmVyeQorICAgdXNlZnVsIG9wdGlvbi4gVG8gdGVsbCBMSUxPIHRvIHVzZSB0aGUgc2VyaWFsIHBvcnQ6CisgICBJbiBsaWxvLmNvbmYgKGdsb2JhbCBzZWN0aW9uKTogCisKKyAgIHNlcmlhbCAgPSAxLDk2MDBuOCAodHR5UzEsIDk2MDAgYmQsIG5vIHBhcml0eSwgOCBiaXRzKQorCiszLiBBZGp1c3QgdG8ga2VybmVsIGZsYWdzIGZvciB0aGUgbmV3IGtlcm5lbCwKKyAgIGFnYWluIGluIGxpbG8uY29uZiAoa2VybmVsIHNlY3Rpb24pCisKKyAgIGFwcGVuZCA9ICJjb25zb2xlPXR0eVMxLDk2MDAiIAorCis0LiBNYWtlIHN1cmUgYSBnZXR0eSBydW5zIG9uIHRoZSBzZXJpYWwgcG9ydCBzbyB0aGF0IHlvdSBjYW4gbG9naW4gdG8KKyAgIGl0IG9uY2UgdGhlIHN5c3RlbSBpcyBkb25lIGJvb3RpbmcuIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcgYSBsaW5lCisgICBsaWtlIHRoaXMgdG8gL2V0Yy9pbml0dGFiIChleGFjdCBzeW50YXggZGVwZW5kcyBvbiB5b3VyIGdldHR5KToKKworICAgUzE6MjM6cmVzcGF3bjovc2Jpbi9nZXR0eSAtTCB0dHlTMSA5NjAwIHZ0MTAwCisKKzUuIEluaXQgYW5kIC9ldGMvaW9jdGwuc2F2ZQorCisgICBTeXN2aW5pdCByZW1lbWJlcnMgaXRzIHN0dHkgc2V0dGluZ3MgaW4gYSBmaWxlIGluIC9ldGMsIGNhbGxlZAorICAgYC9ldGMvaW9jdGwuc2F2ZScuIFJFTU9WRSBUSElTIEZJTEUgYmVmb3JlIHVzaW5nIHRoZSBzZXJpYWwKKyAgIGNvbnNvbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBiZWNhdXNlIG90aGVyd2lzZSBpbml0IHdpbGwgcHJvYmFibHkKKyAgIHNldCB0aGUgYmF1ZHJhdGUgdG8gMzg0MDAgKGJhdWRyYXRlIG9mIHRoZSB2aXJ0dWFsIGNvbnNvbGUpLgorCis2LiAvZGV2L2NvbnNvbGUgYW5kIFgKKyAgIFByb2dyYW1zIHRoYXQgd2FudCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgdmlydHVhbCBjb25zb2xlIHVzdWFsbHkKKyAgIG9wZW4gL2Rldi9jb25zb2xlLiBJZiB5b3UgaGF2ZSBjcmVhdGVkIHRoZSBuZXcgL2Rldi9jb25zb2xlIGRldmljZSwKKyAgIGFuZCB5b3VyIGNvbnNvbGUgaXMgTk9UIHRoZSB2aXJ0dWFsIGNvbnNvbGUgc29tZSBwcm9ncmFtcyB3aWxsIGZhaWwuCisgICBUaG9zZSBhcmUgcHJvZ3JhbXMgdGhhdCB3YW50IHRvIGFjY2VzcyB0aGUgVlQgaW50ZXJmYWNlLCBhbmQgdXNlCisgICAvZGV2L2NvbnNvbGUgaW5zdGVhZCBvZiAvZGV2L3R0eTAuIFNvbWUgb2YgdGhvc2UgcHJvZ3JhbXMgYXJlOgorCisgICBYZnJlZTg2LCBzdmdhbGliLCBncG0sIFNWR0FUZXh0TW9kZQorCisgICBJdCBzaG91bGQgYmUgZml4ZWQgaW4gbW9kZXJuIHZlcnNpb25zIG9mIHRoZXNlIHByb2dyYW1zIHRob3VnaC4KKworICAgTm90ZSB0aGF0IGlmIHlvdSBib290IHdpdGhvdXQgYSBjb25zb2xlPSBvcHRpb24gKG9yIHdpdGgKKyAgIGNvbnNvbGU9L2Rldi90dHkwKSwgL2Rldi9jb25zb2xlIGlzIHRoZSBzYW1lIGFzIC9kZXYvdHR5MC4gSW4gdGhhdAorICAgY2FzZSBldmVyeXRoaW5nIHdpbGwgc3RpbGwgd29yay4KKworNy4gVGhhbmtzCisKKyAgIFRoYW5rcyB0byBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgorICAgZm9yIHBvcnRpbmcgdGhlIHBhdGNoZXMgZnJvbSAyLjEuNHggdG8gMi4xLjZ4IGZvciB0YWtpbmcgY2FyZSBvZgorICAgdGhlIGludGVncmF0aW9uIG9mIHRoZXNlIHBhdGNoZXMgaW50byBtNjhrLCBwcGMgYW5kIGFscGhhLgorCitNaXF1ZWwgdmFuIFNtb29yZW5idXJnIDxtaXF1ZWxzQGNpc3Ryb24ubmw+LCAxMS1KdW4tMjAwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyIGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvZHJpdmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzAxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9kcml2ZXIKQEAgLTAsMCArMSwzMzAgQEAKKworCQkJTG93IExldmVsIFNlcmlhbCBBUEkKKwkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworICAgJElkOiBkcml2ZXIsdiAxLjEwIDIwMDIvMDcvMjIgMTU6Mjc6MzAgcm1rIEV4cCAkCisKKworVGhpcyBkb2N1bWVudCBpcyBtZWFudCBhcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHNvbWUgYXNwZWN0cyBvZiB0aGUgbmV3IHNlcmlhbAorZHJpdmVyLiAgSXQgaXMgbm90IGNvbXBsZXRlLCBhbnkgcXVlc3Rpb25zIHlvdSBoYXZlIHNob3VsZCBiZSBkaXJlY3RlZCB0bworPHJta0Bhcm0ubGludXgub3JnLnVrPgorCitUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGNvbnRhaW5lZCB3aXRoaW4gc2VyaWFsX2FtYmEuYy4KKworCisKK0xvdyBMZXZlbCBTZXJpYWwgSGFyZHdhcmUgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbG93IGxldmVsIHNlcmlhbCBoYXJkd2FyZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHN1cHBseWluZyBwb3J0CitpbmZvcm1hdGlvbiAoZGVmaW5lZCBieSB1YXJ0X3BvcnQpIGFuZCBhIHNldCBvZiBjb250cm9sIG1ldGhvZHMgKGRlZmluZWQKK2J5IHVhcnRfb3BzKSB0byB0aGUgY29yZSBzZXJpYWwgZHJpdmVyLiAgVGhlIGxvdyBsZXZlbCBkcml2ZXIgaXMgYWxzbworcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGludGVycnVwdHMgZm9yIHRoZSBwb3J0LCBhbmQgcHJvdmlkaW5nIGFueQorY29uc29sZSBzdXBwb3J0LgorCisKK0NvbnNvbGUgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzZXJpYWwgY29yZSBwcm92aWRlcyBhIGZldyBoZWxwZXIgZnVuY3Rpb25zLiAgVGhpcyBpbmNsdWRlcyBpZGVudGlmaW5nCit0aGUgY29ycmVjdCBwb3J0IHN0cnVjdHVyZSAodmlhIHVhcnRfZ2V0X2NvbnNvbGUpIGFuZCBkZWNvZGluZyBjb21tYW5kIGxpbmUKK2FyZ3VtZW50cyAodWFydF9wYXJzZV9vcHRpb25zKS4KKworCitMb2NraW5nCistLS0tLS0tCisKK0l0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgbG93IGxldmVsIGhhcmR3YXJlIGRyaXZlciB0byBwZXJmb3JtIHRoZQorbmVjZXNzYXJ5IGxvY2tpbmcgdXNpbmcgcG9ydC0+bG9jay4gIFRoZXJlIGFyZSBzb21lIGV4Y2VwdGlvbnMgKHdoaWNoCithcmUgZGVzY3JpYmVkIGluIHRoZSB1YXJ0X29wcyBsaXN0aW5nIGJlbG93LikKKworVGhlcmUgYXJlIHRocmVlIGxvY2tzLiAgQSBwZXItcG9ydCBzcGlubG9jaywgYSBwZXItcG9ydCB0bXBidWYgc2VtYXBob3JlLAorYW5kIGFuIG92ZXJhbGwgc2VtYXBob3JlLgorCitGcm9tIHRoZSBjb3JlIGRyaXZlciBwZXJzcGVjdGl2ZSwgdGhlIHBvcnQtPmxvY2sgbG9ja3MgdGhlIGZvbGxvd2luZworZGF0YToKKworCXBvcnQtPm1jdHJsCisJcG9ydC0+aWNvdW50CisJaW5mby0+eG1pdC5oZWFkIChjaXJjLT5oZWFkKQorCWluZm8tPnhtaXQudGFpbCAoY2lyYy0+dGFpbCkKKworVGhlIGxvdyBsZXZlbCBkcml2ZXIgaXMgZnJlZSB0byB1c2UgdGhpcyBsb2NrIHRvIHByb3ZpZGUgYW55IGFkZGl0aW9uYWwKK2xvY2tpbmcuCisKK1RoZSBjb3JlIGRyaXZlciB1c2VzIHRoZSBpbmZvLT50bXBidWZfc2VtIGxvY2sgdG8gcHJldmVudCBtdWx0aS10aHJlYWRlZAorYWNjZXNzIHRvIHRoZSBpbmZvLT50bXBidWYgYm91bmNlYnVmZmVyIHVzZWQgZm9yIHBvcnQgd3JpdGVzLgorCitUaGUgcG9ydF9zZW0gc2VtYXBob3JlIGlzIHVzZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHBvcnRzIGJlaW5nIGFkZGVkLworcmVtb3ZlZCBvciByZWNvbmZpZ3VyZWQgYXQgaW5hcHByb3ByaWF0ZSB0aW1lcy4KKworCit1YXJ0X29wcworLS0tLS0tLS0KKworVGhlIHVhcnRfb3BzIHN0cnVjdHVyZSBpcyB0aGUgbWFpbiBpbnRlcmZhY2UgYmV0d2VlbiBzZXJpYWxfY29yZSBhbmQgdGhlCitoYXJkd2FyZSBzcGVjaWZpYyBkcml2ZXIuICBJdCBjb250YWlucyBhbGwgdGhlIG1ldGhvZHMgdG8gY29udHJvbCB0aGUKK2hhcmR3YXJlLgorCisgIHR4X2VtcHR5KHBvcnQpCisJVGhpcyBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZSB0cmFuc21pdHRlciBmaWZvIGFuZCBzaGlmdGVyCisJZm9yIHRoZSBwb3J0IGRlc2NyaWJlZCBieSAncG9ydCcgaXMgZW1wdHkuICBJZiBpdCBpcyBlbXB0eSwKKwl0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gVElPQ1NFUl9URU1ULCBvdGhlcndpc2UgcmV0dXJuIDAuCisJSWYgdGhlIHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgdGhlbiBpdCBzaG91bGQKKwlyZXR1cm4gVElPQ1NFUl9URU1ULgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCVRoaXMgY2FsbCBtdXN0IG5vdCBzbGVlcAorCisgIHNldF9tY3RybChwb3J0LCBtY3RybCkKKwlUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1vZGVtIGNvbnRyb2wgbGluZXMgZm9yIHBvcnQgZGVzY3JpYmVkCisJYnkgJ3BvcnQnIHRvIHRoZSBzdGF0ZSBkZXNjcmliZWQgYnkgbWN0cmwuICBUaGUgcmVsZXZhbnQgYml0cworCW9mIG1jdHJsIGFyZToKKwkJLSBUSU9DTV9SVFMJUlRTIHNpZ25hbC4KKwkJLSBUSU9DTV9EVFIJRFRSIHNpZ25hbC4KKwkJLSBUSU9DTV9PVVQxCU9VVDEgc2lnbmFsLgorCQktIFRJT0NNX09VVDIJT1VUMiBzaWduYWwuCisJSWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQsIHRoZSBzaWduYWwgc2hvdWxkIGJlIGRyaXZlbgorCWFjdGl2ZS4gIElmIHRoZSBiaXQgaXMgY2xlYXIsIHRoZSBzaWduYWwgc2hvdWxkIGJlIGRyaXZlbgorCWluYWN0aXZlLgorCisJTG9ja2luZzogcG9ydC0+bG9jayB0YWtlbi4KKwlJbnRlcnJ1cHRzOiBsb2NhbGx5IGRpc2FibGVkLgorCVRoaXMgY2FsbCBtdXN0IG5vdCBzbGVlcAorCisgIGdldF9tY3RybChwb3J0KQorCVJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbW9kZW0gY29udHJvbCBpbnB1dHMuICBUaGUgc3RhdGUKKwlvZiB0aGUgb3V0cHV0cyBzaG91bGQgbm90IGJlIHJldHVybmVkLCBzaW5jZSB0aGUgY29yZSBrZWVwcworCXRyYWNrIG9mIHRoZWlyIHN0YXRlLiAgVGhlIHN0YXRlIGluZm9ybWF0aW9uIHNob3VsZCBpbmNsdWRlOgorCQktIFRJT0NNX0RDRAlzdGF0ZSBvZiBEQ0Qgc2lnbmFsCisJCS0gVElPQ01fQ1RTCXN0YXRlIG9mIENUUyBzaWduYWwKKwkJLSBUSU9DTV9EU1IJc3RhdGUgb2YgRFNSIHNpZ25hbAorCQktIFRJT0NNX1JJCXN0YXRlIG9mIFJJIHNpZ25hbAorCVRoZSBiaXQgaXMgc2V0IGlmIHRoZSBzaWduYWwgaXMgY3VycmVudGx5IGRyaXZlbiBhY3RpdmUuICBJZgorCXRoZSBwb3J0IGRvZXMgbm90IHN1cHBvcnQgQ1RTLCBEQ0Qgb3IgRFNSLCB0aGUgZHJpdmVyIHNob3VsZAorCWluZGljYXRlIHRoYXQgdGhlIHNpZ25hbCBpcyBwZXJtYW5lbnRseSBhY3RpdmUuICBJZiBSSSBpcworCW5vdCBhdmFpbGFibGUsIHRoZSBzaWduYWwgc2hvdWxkIG5vdCBiZSBpbmRpY2F0ZWQgYXMgYWN0aXZlLgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCVRoaXMgY2FsbCBtdXN0IG5vdCBzbGVlcAorCisgIHN0b3BfdHgocG9ydCx0dHlfc3RvcCkKKwlTdG9wIHRyYW5zbWl0dGluZyBjaGFyYWN0ZXJzLiAgVGhpcyBtaWdodCBiZSBkdWUgdG8gdGhlIENUUworCWxpbmUgYmVjb21pbmcgaW5hY3RpdmUgb3IgdGhlIHR0eSBsYXllciBpbmRpY2F0aW5nIHdlIHdhbnQKKwl0byBzdG9wIHRyYW5zbWlzc2lvbi4KKworCXR0eV9zdG9wOiAxIGlmIHRoaXMgY2FsbCBpcyBkdWUgdG8gdGhlIFRUWSBsYXllciBpc3N1aW5nIGEKKwkgICAgICAgICAgVFRZIHN0b3AgdG8gdGhlIGRyaXZlciAoZXF1aXYgdG8gcnNfc3RvcCkuCisKKwlMb2NraW5nOiBwb3J0LT5sb2NrIHRha2VuLgorCUludGVycnVwdHM6IGxvY2FsbHkgZGlzYWJsZWQuCisJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCisKKyAgc3RhcnRfdHgocG9ydCx0dHlfc3RhcnQpCisJc3RhcnQgdHJhbnNtaXR0aW5nIGNoYXJhY3RlcnMuICAoaW5jaWRlbnRhbGx5LCBub25lbXB0eSB3aWxsCisJYWx3YXlzIGJlIG5vbnplcm8sIGFuZCBzaG91bGRuJ3QgYmUgdXNlZCAtIGl0IHdpbGwgYmUgZHJvcHBlZCkuCisKKwl0dHlfc3RhcnQ6IDEgaWYgdGhpcyBjYWxsIHdhcyBkdWUgdG8gdGhlIFRUWSBsYXllciBpc3N1aW5nCisJICAgICAgICAgICBhIFRUWSBzdGFydCB0byB0aGUgZHJpdmVyIChlcXVpdiB0byByc19zdGFydCkKKworCUxvY2tpbmc6IHBvcnQtPmxvY2sgdGFrZW4uCisJSW50ZXJydXB0czogbG9jYWxseSBkaXNhYmxlZC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBzdG9wX3J4KHBvcnQpCisJU3RvcCByZWNlaXZpbmcgY2hhcmFjdGVyczsgdGhlIHBvcnQgaXMgaW4gdGhlIHByb2Nlc3Mgb2YKKwliZWluZyBjbG9zZWQuCisKKwlMb2NraW5nOiBwb3J0LT5sb2NrIHRha2VuLgorCUludGVycnVwdHM6IGxvY2FsbHkgZGlzYWJsZWQuCisJVGhpcyBjYWxsIG11c3Qgbm90IHNsZWVwCisKKyAgZW5hYmxlX21zKHBvcnQpCisJRW5hYmxlIHRoZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cy4KKworCUxvY2tpbmc6IHBvcnQtPmxvY2sgdGFrZW4uCisJSW50ZXJydXB0czogbG9jYWxseSBkaXNhYmxlZC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBicmVha19jdGwocG9ydCxjdGwpCisJQ29udHJvbCB0aGUgdHJhbnNtaXNzaW9uIG9mIGEgYnJlYWsgc2lnbmFsLiAgSWYgY3RsIGlzCisJbm9uemVybywgdGhlIGJyZWFrIHNpZ25hbCBzaG91bGQgYmUgdHJhbnNtaXR0ZWQuICBUaGUgc2lnbmFsCisJc2hvdWxkIGJlIHRlcm1pbmF0ZWQgd2hlbiBhbm90aGVyIGNhbGwgaXMgbWFkZSB3aXRoIGEgemVybworCWN0bC4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKwlUaGlzIGNhbGwgbXVzdCBub3Qgc2xlZXAKKworICBzdGFydHVwKHBvcnQpCisJR3JhYiBhbnkgaW50ZXJydXB0IHJlc291cmNlcyBhbmQgaW5pdGlhbGlzZSBhbnkgbG93IGxldmVsIGRyaXZlcgorCXN0YXRlLiAgRW5hYmxlIHRoZSBwb3J0IGZvciByZWNlcHRpb24uICBJdCBzaG91bGQgbm90IGFjdGl2YXRlCisJUlRTIG5vciBEVFI7IHRoaXMgd2lsbCBiZSBkb25lIHZpYSBhIHNlcGFyYXRlIGNhbGwgdG8gc2V0X21jdHJsLgorCisJTG9ja2luZzogcG9ydF9zZW0gdGFrZW4uCisJSW50ZXJydXB0czogZ2xvYmFsbHkgZGlzYWJsZWQuCisKKyAgc2h1dGRvd24ocG9ydCkKKwlEaXNhYmxlIHRoZSBwb3J0LCBkaXNhYmxlIGFueSBicmVhayBjb25kaXRpb24gdGhhdCBtYXkgYmUgaW4KKwllZmZlY3QsIGFuZCBmcmVlIGFueSBpbnRlcnJ1cHQgcmVzb3VyY2VzLiAgSXQgc2hvdWxkIG5vdCBkaXNhYmxlCisJUlRTIG5vciBEVFI7IHRoaXMgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBkb25lIHZpYSBhIHNlcGFyYXRlCisJY2FsbCB0byBzZXRfbWN0cmwuCisKKwlMb2NraW5nOiBwb3J0X3NlbSB0YWtlbi4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCisgIHNldF90ZXJtaW9zKHBvcnQsdGVybWlvcyxvbGR0ZXJtaW9zKQorCUNoYW5nZSB0aGUgcG9ydCBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgd29yZCBsZW5ndGgsIHBhcml0eSwgc3RvcAorCWJpdHMuICBVcGRhdGUgcmVhZF9zdGF0dXNfbWFzayBhbmQgaWdub3JlX3N0YXR1c19tYXNrIHRvIGluZGljYXRlCisJdGhlIHR5cGVzIG9mIGV2ZW50cyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiByZWNlaXZpbmcuICBSZWxldmFudAorCXRlcm1pb3MtPmNfY2ZsYWcgYml0cyBhcmU6CisJCUNTSVpFCS0gd29yZCBzaXplCisJCUNTVE9QQgktIDIgc3RvcCBiaXRzCisJCVBBUkVOQgktIHBhcml0eSBlbmFibGUKKwkJUEFST0RECS0gb2RkIHBhcml0eSAod2hlbiBQQVJFTkIgaXMgaW4gZm9yY2UpCisJCUNSRUFECS0gZW5hYmxlIHJlY2VwdGlvbiBvZiBjaGFyYWN0ZXJzIChpZiBub3Qgc2V0LAorCQkJICBzdGlsbCByZWNlaXZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgcG9ydCwgYnV0CisJCQkgIHRocm93IHRoZW0gYXdheS4KKwkJQ1JUU0NUUwktIGlmIHNldCwgZW5hYmxlIENUUyBzdGF0dXMgY2hhbmdlIHJlcG9ydGluZworCQlDTE9DQUwJLSBpZiBub3Qgc2V0LCBlbmFibGUgbW9kZW0gc3RhdHVzIGNoYW5nZQorCQkJICByZXBvcnRpbmcuCisJUmVsZXZhbnQgdGVybWlvcy0+Y19pZmxhZyBiaXRzIGFyZToKKwkJSU5QQ0sJLSBlbmFibGUgZnJhbWUgYW5kIHBhcml0eSBlcnJvciBldmVudHMgdG8gYmUKKwkJCSAgcGFzc2VkIHRvIHRoZSBUVFkgbGF5ZXIuCisJCUJSS0lOVAorCQlQQVJNUksJLSBib3RoIG9mIHRoZXNlIGVuYWJsZSBicmVhayBldmVudHMgdG8gYmUKKwkJCSAgcGFzc2VkIHRvIHRoZSBUVFkgbGF5ZXIuCisKKwkJSUdOUEFSCS0gaWdub3JlIHBhcml0eSBhbmQgZnJhbWluZyBlcnJvcnMKKwkJSUdOQlJLCS0gaWdub3JlIGJyZWFrIGVycm9ycywgIElmIElHTlBBUiBpcyBhbHNvCisJCQkgIHNldCwgaWdub3JlIG92ZXJydW4gZXJyb3JzIGFzIHdlbGwuCisJVGhlIGludGVyYWN0aW9uIG9mIHRoZSBpZmxhZyBiaXRzIGlzIGFzIGZvbGxvd3MgKHBhcml0eSBlcnJvcgorCWdpdmVuIGFzIGFuIGV4YW1wbGUpOgorCVBhcml0eSBlcnJvcglJTlBDSwlJR05QQVIKKwlOb25lCQluL2EJbi9hCWNoYXJhY3RlciByZWNlaXZlZAorCVllcwkJbi9hCTAJY2hhcmFjdGVyIGRpc2NhcmRlZAorCVllcwkJMAkxCWNoYXJhY3RlciByZWNlaXZlZCwgbWFya2VkIGFzCisJCQkJCVRUWV9OT1JNQUwKKwlZZXMJCTEJMQljaGFyYWN0ZXIgcmVjZWl2ZWQsIG1hcmtlZCBhcworCQkJCQlUVFlfUEFSSVRZCisKKwlPdGhlciBmbGFncyBtYXkgYmUgdXNlZCAoZWcsIHhvbi94b2ZmIGNoYXJhY3RlcnMpIGlmIHlvdXIKKwloYXJkd2FyZSBzdXBwb3J0cyBoYXJkd2FyZSAic29mdCIgZmxvdyBjb250cm9sLgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCVRoaXMgY2FsbCBtdXN0IG5vdCBzbGVlcAorCisgIHBtKHBvcnQsc3RhdGUsb2xkc3RhdGUpCisJUGVyZm9ybSBhbnkgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGFjdGl2aXRpZXMgb24gdGhlIHNwZWNpZmllZAorCXBvcnQuICBTdGF0ZSBpbmRpY2F0ZXMgdGhlIG5ldyBzdGF0ZSAoZGVmaW5lZCBieSBBQ1BJIEQwLUQzKSwKKwlvbGRzdGF0ZSBpbmRpY2F0ZXMgdGhlIHByZXZpb3VzIHN0YXRlLiAgRXNzZW50aWFsbHksIEQwIG1lYW5zCisJZnVsbHkgb24sIEQzIG1lYW5zIHBvd2VyZWQgZG93bi4KKworCVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGdyYWIgYW55IHJlc291cmNlcy4KKworCVRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcG9ydCBpcyBpbml0aWFsbHkgb3BlbmVkIGFuZCBmaW5hbGx5CisJY2xvc2VkLCBleGNlcHQgd2hlbiB0aGUgcG9ydCBpcyBhbHNvIHRoZSBzeXN0ZW0gY29uc29sZS4gIFRoaXMKKwl3aWxsIG9jY3VyIGV2ZW4gaWYgQ09ORklHX1BNIGlzIG5vdCBzZXQuCisKKwlMb2NraW5nOiBub25lLgorCUludGVycnVwdHM6IGNhbGxlciBkZXBlbmRlbnQuCisKKyAgdHlwZShwb3J0KQorCVJldHVybiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29uc3RhbnQgZGVzY3JpYmluZyB0aGUgc3BlY2lmaWVkCisJcG9ydCwgb3IgcmV0dXJuIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIHN0cmluZyAndW5rbm93bicgaXMKKwlzdWJzdGl0dXRlZC4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworICByZWxlYXNlX3BvcnQocG9ydCkKKwlSZWxlYXNlIGFueSBtZW1vcnkgYW5kIElPIHJlZ2lvbiByZXNvdXJjZXMgY3VycmVudGx5IGluIHVzZSBieQorCXRoZSBwb3J0LgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCisgIHJlcXVlc3RfcG9ydChwb3J0KQorCVJlcXVlc3QgYW55IG1lbW9yeSBhbmQgSU8gcmVnaW9uIHJlc291cmNlcyByZXF1aXJlZCBieSB0aGUgcG9ydC4KKwlJZiBhbnkgZmFpbCwgbm8gcmVzb3VyY2VzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdoZW4gdGhpcyBmdW5jdGlvbgorCXJldHVybnMsIGFuZCBpdCBzaG91bGQgcmV0dXJuIC1FQlVTWSBvbiBmYWlsdXJlLgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCisgIGNvbmZpZ19wb3J0KHBvcnQsdHlwZSkKKwlQZXJmb3JtIGFueSBhdXRvY29uZmlndXJhdGlvbiBzdGVwcyByZXF1aXJlZCBmb3IgdGhlIHBvcnQuICBgdHlwZWAKKwljb250YWlucyBhIGJpdCBtYXNrIG9mIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uLiAgVUFSVF9DT05GSUdfVFlQRQorCWluZGljYXRlcyB0aGF0IHRoZSBwb3J0IHJlcXVpcmVzIGRldGVjdGlvbiBhbmQgaWRlbnRpZmljYXRpb24uCisJcG9ydC0+dHlwZSBzaG91bGQgYmUgc2V0IHRvIHRoZSB0eXBlIGZvdW5kLCBvciBQT1JUX1VOS05PV04gaWYKKwlubyBwb3J0IHdhcyBkZXRlY3RlZC4KKworCVVBUlRfQ09ORklHX0lSUSBpbmRpY2F0ZXMgYXV0b2NvbmZpZ3VyYXRpb24gb2YgdGhlIGludGVycnVwdCBzaWduYWwsCisJd2hpY2ggc2hvdWxkIGJlIHByb2JlZCB1c2luZyBzdGFuZGFyZCBrZXJuZWwgYXV0b3Byb2JpbmcgdGVjaG5pcXVlcy4KKwlUaGlzIGlzIG5vdCBuZWNlc3Nhcnkgb24gcGxhdGZvcm1zIHdoZXJlIHBvcnRzIGhhdmUgaW50ZXJydXB0cworCWludGVybmFsbHkgaGFyZCB3aXJlZCAoZWcsIHN5c3RlbSBvbiBhIGNoaXAgaW1wbGVtZW50YXRpb25zKS4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworICB2ZXJpZnlfcG9ydChwb3J0LHNlcmluZm8pCisJVmVyaWZ5IHRoZSBuZXcgc2VyaWFsIHBvcnQgaW5mb3JtYXRpb24gY29udGFpbmVkIHdpdGhpbiBzZXJpbmZvIGlzCisJc3VpdGFibGUgZm9yIHRoaXMgcG9ydCB0eXBlLgorCisJTG9ja2luZzogbm9uZS4KKwlJbnRlcnJ1cHRzOiBjYWxsZXIgZGVwZW5kZW50LgorCisgIGlvY3RsKHBvcnQsY21kLGFyZykKKwlQZXJmb3JtIGFueSBwb3J0IHNwZWNpZmljIElPQ1RMcy4gIElPQ1RMIGNvbW1hbmRzIG11c3QgYmUgZGVmaW5lZAorCXVzaW5nIHRoZSBzdGFuZGFyZCBudW1iZXJpbmcgc3lzdGVtIGZvdW5kIGluIDxhc20vaW9jdGwuaD4KKworCUxvY2tpbmc6IG5vbmUuCisJSW50ZXJydXB0czogY2FsbGVyIGRlcGVuZGVudC4KKworT3RoZXIgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0KKwordWFydF91cGRhdGVfdGltZW91dChwb3J0LGNmbGFnLHF1b3QpCisJVXBkYXRlIHRoZSBGSUZPIGRyYWluIHRpbWVvdXQsIHBvcnQtPnRpbWVvdXQsIGFjY29yZGluZyB0byB0aGUKKwludW1iZXIgb2YgYml0cywgcGFyaXR5LCBzdG9wIGJpdHMgYW5kIHF1b3RpZW50LgorCisJTG9ja2luZzogY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHRha2UgcG9ydC0+bG9jaworCUludGVycnVwdHM6IG4vYQorCit1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCx0ZXJtaW9zKQorCVJldHVybiB0aGUgbnVtZXJpYyBiYXVkIHJhdGUgZm9yIHRoZSBzcGVjaWZpZWQgdGVybWlvcywgdGFraW5nCisJYWNjb3VudCBvZiB0aGUgc3BlY2lhbCAzODQwMCBiYXVkICJrbHVkZ2UiLiAgVGhlIEIwIGJhdWQgcmF0ZQorCWlzIG1hcHBlZCB0byA5NjAwIGJhdWQuCisKKwlMb2NraW5nOiBjYWxsZXIgZGVwZW5kZW50LgorCUludGVycnVwdHM6IG4vYQorCit1YXJ0X2dldF9kaXZpc29yKHBvcnQsdGVybWlvcyxvbGR0ZXJtaW9zKQorCVJldHVybiB0aGUgZGl2c29yIChiYXVkX2Jhc2UgLyBiYXVkKSBmb3IgdGhlIHNlbGVjdGVkIGJhdWQgcmF0ZQorCXNwZWNpZmllZCBieSB0ZXJtaW9zLiAgSWYgdGhlIGJhdWQgcmF0ZSBpcyBvdXQgb2YgcmFuZ2UsIHRyeQorCXRoZSBvcmlnaW5hbCBiYXVkIHJhdGUgc3BlY2lmaWVkIGJ5IG9sZHRlcm1pb3MgKGlmIG5vbi1OVUxMKS4KKwlJZiB0aGF0IGZhaWxzLCB0cnkgOTYwMCBiYXVkLgorCisJSWYgMzg0MDAgYmF1ZCBhbmQgY3VzdG9tIGRpdmlzb3IgaXMgc2VsZWN0ZWQsIHJldHVybiB0aGUKKwljdXN0b20gZGl2aXNvciBpbnN0ZWFkLgorCisJTG9ja2luZzogY2FsbGVyIGRlcGVuZGVudC4KKwlJbnRlcnJ1cHRzOiBuL2EKKworT3RoZXIgbm90ZXMKKy0tLS0tLS0tLS0tCisKK0l0IGlzIGludGVuZGVkIHNvbWUgZGF5IHRvIGRyb3AgdGhlICd1bnVzZWQnIGVudHJpZXMgZnJvbSB1YXJ0X3BvcnQsIGFuZAorYWxsb3cgbG93IGxldmVsIGRyaXZlcnMgdG8gcmVnaXN0ZXIgdGhlaXIgb3duIGluZGl2aWR1YWwgdWFydF9wb3J0J3Mgd2l0aAordGhlIGNvcmUuICBUaGlzIHdpbGwgYWxsb3cgZHJpdmVycyB0byB1c2UgdWFydF9wb3J0IGFzIGEgcG9pbnRlciB0byBhCitzdHJ1Y3R1cmUgY29udGFpbmluZyBib3RoIHRoZSB1YXJ0X3BvcnQgZW50cnkgd2l0aCB0aGVpciBvd24gZXh0ZW5zaW9ucywKK3RodXM6CisKKwlzdHJ1Y3QgbXlfcG9ydCB7CisJCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKKwkJaW50CQkJbXlfc3R1ZmY7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2dpLXZpc3dzLnR4dCBiL0RvY3VtZW50YXRpb24vc2dpLXZpc3dzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmYwODExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zZ2ktdmlzd3MudHh0CkBAIC0wLDAgKzEsMTMgQEAKKworVGhlIFNHSSBWaXN1YWwgV29ya3N0YXRpb25zIChtb2RlbHMgMzIwIGFuZCA1NDApIGFyZSBiYXNlZCBhcm91bmQKK3RoZSBDb2JhbHQsIExpdGhpdW0sIGFuZCBBcnNlbmljIEFTSUNzLiAgVGhlIENvYmFsdCBBU0lDIGlzIHRoZQorbWFpbiBzeXN0ZW0gQVNJQyB3aGljaCBpbnRlcmZhY2VzIHRoZSAxLTQgSUEzMiBjcHVzLCB0aGUgbWVtb3J5CitzeXN0ZW0sIGFuZCB0aGUgSS9PIHN5c3RlbSBpbiB0aGUgTGl0aGl1bSBBU0lDLiAgVGhlIENvYmFsdCBBU0lDCithbHNvIGNvbnRhaW5zIHRoZSAzRCBnZnggcmVuZGVyaW5nIGVuZ2luZSB3aGljaCByZW5kZXJzIHRvIG1haW4KK3N5c3RlbSBtZW1vcnkgLS0gcGFydCBvZiB3aGljaCBpcyB1c2VkIGFzIHRoZSBmcmFtZSBidWZmZXIgd2hpY2gKK2lzIERNQSdlZCB0byBhIHZpZGVvIGNvbm5lY3RvciB1c2luZyB0aGUgQXJzZW5pYyBBU0lDLiAgQSBQSUlYNAorY2hpcCBhbmQgTlM4NzMwNyBhcmUgdXNlZCB0byBwcm92aWRlIGxlZ2FjeSBkZXZpY2Ugc3VwcG9ydCAoSURFLAorc2VyaWFsLCBmbG9wcHksIGFuZCBwYXJhbGxlbCkuCisKK1RoZSBWaXN1YWwgV29ya3N0YXRpb24gY2hpcHNldCBsYXJnZWx5IGNvbmZvcm1zIHRvIHRoZSBQQyBhcmNoaXRlY3R1cmUKK3dpdGggc29tZSBub3RhYmxlIGV4Y2VwdGlvbnMgc3VjaCBhcyBpbnRlcnJ1cHQgaGFuZGxpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NoL2tnZGIudHh0IGIvRG9jdW1lbnRhdGlvbi9zaC9rZ2RiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA0ZjdmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zaC9rZ2RiLnR4dApAQCAtMCwwICsxLDE3OSBAQAorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBiZWhhdmlvciBvZiBLR0RCIGZvciB0aGUgU0gKK2tlcm5lbC4gQmFzZWQgb24gYSBkZXNjcmlwdGlvbiBmcm9tIEhlbnJ5IEJlbGwgPGhlbnJ5LmJlbGxAc3QuY29tPiwgaXQKK2hhcyBiZWVuIG1vZGlmaWVkIHRvIGFjY291bnQgZm9yIHF1aXJrcyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KKworVmVyc2lvbgorPT09PT09PQorCitUaGlzIHZlcnNpb24gb2YgS0dEQiB3YXMgd3JpdHRlbiBmb3IgMi40Lnh4IGtlcm5lbHMgZm9yIHRoZSBTSCBhcmNoaXRlY3R1cmUuCitGdXJ0aGVyIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIGxpbnV4LXNoIHByb2plY3Qgd2Vic2l0ZS4KKworCitEZWJ1Z2dpbmcgU2V0dXA6IEhvc3QKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHR3byBtYWNoaW5lcyB3aWxsIGJlIGNvbm5lY3RlZCB0b2dldGhlciB2aWEgYSBzZXJpYWwgbGluZSAtIHRoaXMKK3Nob3VsZCBiZSBhIG51bGwgbW9kZW0gY2FibGUgaS5lLiB3aXRoIGEgdHdpc3QuCisKK09uIHlvdXIgREVWRUxPUE1FTlQgbWFjaGluZSwgZ28gdG8geW91ciBrZXJuZWwgc291cmNlIGRpcmVjdG9yeSBhbmQKK2J1aWxkIHRoZSBrZXJuZWwsIGVuYWJsaW5nIEtHREIgc3VwcG9ydCBpbiB0aGUgImtlcm5lbCBoYWNraW5nIiBzZWN0aW9uLgorVGhpcyBpbmNsdWRlcyB0aGUgS0dEQiBjb2RlLCBhbmQgYWxzbyBtYWtlcyB0aGUga2VybmVsIGJlIGNvbXBpbGVkIHdpdGgKK3RoZSAiLWciIG9wdGlvbiBzZXQgLS0gbmVjZXNzYXJ5IGZvciBkZWJ1Z2dpbmcuCisKK1RvIGluc3RhbGwgdGhpcyBuZXcga2VybmVsLCB1c2UgdGhlIGZvbGxvd2luZyBpbnN0YWxsYXRpb24gcHJvY2VkdXJlLgorCitEZWNpZGUgb24gd2hpY2ggdHR5IHBvcnQgeW91IHdhbnQgdGhlIG1hY2hpbmVzIHRvIGNvbW11bmljYXRlLCB0aGVuCitjYWJsZSB0aGVtIHVwIGJhY2stdG8tYmFjayB1c2luZyB0aGUgbnVsbCBtb2RlbS4gIE9uIHRoZSBERVZFTE9QTUVOVAorbWFjaGluZSwgeW91IG1heSB3aXNoIHRvIGNyZWF0ZSBhbiBpbml0aWFsaXphdGlvbiBmaWxlIGNhbGxlZCAuZ2RiaW5pdAorKGluIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeSBvciBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5KSB0byBleGVjdXRlIAorY29tbW9ubHktdXNlZCBjb21tYW5kcyBhdCBzdGFydHVwLgorCitBIG1pbmltYWwgLmdkYmluaXQgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisKKyAgZmlsZSB2bWxpbnV4CisgIHNldCByZW1vdGViYXVkIDExNTIwMAorICB0YXJnZXQgcmVtb3RlIC9kZXYvdHR5UzAKKworQ2hhbmdlIHRoZSAidGFyZ2V0IiBkZWZpbml0aW9uIHNvIHRoYXQgaXQgc3BlY2lmaWVzIHRoZSB0dHkgcG9ydCB0aGF0Cit5b3UgaW50ZW5kIHRvIHVzZS4gIENoYW5nZSB0aGUgInJlbW90ZWJhdWQiIGRlZmluaXRpb24gdG8gbWF0Y2ggdGhlCitkYXRhIHJhdGUgdGhhdCB5b3UgYXJlIGdvaW5nIHRvIHVzZSBmb3IgdGhlIGNvbSBsaW5lICgxMTUyMDAgaXMgdGhlCitkZWZhdWx0KS4gCisKK0RlYnVnZ2luZyBTZXR1cDogVGFyZ2V0Cis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQnkgZGVmYXVsdCwgdGhlIEtHREIgc3R1YiB3aWxsIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QgR0RCIHVzaW5nCit0dHlTQzEgYXQgMTE1MjAwIGJhdWQsIDggZGF0YWJpdHMsIG5vIHBhcml0eTsgdGhlc2UgZGVmYXVsdHMgY2FuIGJlCitjaGFuZ2VkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQXMgdGhlIGtlcm5lbCBzdGFydHMgdXAsIEtHREIgd2lsbAoraW5pdGlhbGl6ZSBzbyB0aGF0IGJyZWFrcG9pbnRzLCBrZXJuZWwgc2VnZmF1bHRzLCBhbmQgc28gZm9ydGggd2lsbAorZ2VuZXJhbGx5IGVudGVyIHRoZSBkZWJ1Z2dlci4KKworVGhpcyBiZWhhdmlvciBjYW4gYmUgbW9kaWZpZWQgYnkgaW5jbHVkaW5nIHRoZSAia2dkYiIgb3B0aW9uIGluIHRoZQora2VybmVsIGNvbW1hbmQgbGluZTsgdGhpcyBvcHRpb24gaGFzIHRoZSBnZW5lcmFsIGZvcm06CisKKyAga2dkYj08dHR5c3BlYz4sPGFjdGlvbj4KKworVGhlIDx0dHlzcGVjPiBpbmRpY2F0ZXMgdGhlIHBvcnQgdG8gdXNlLCBhbmQgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeQorYmF1ZCwgcGFyaXR5IGFuZCBkYXRhYml0cyAtLSBlLmcuICJ0dHlTQzAsOTYwME44IiBvciAidHR5U0MxLDE5MjAwIi4KKworVGhlIDxhY3Rpb24+IGNhbiBiZSAiaGFsdCIgb3IgImRpc2FibGVkIi4gIFRoZSAiaGFsdCIgYWN0aW9uIGVudGVycyB0aGUKK2RlYnVnZ2VyIHZpYSBhIGJyZWFrcG9pbnQgYXMgc29vbiBhcyBrZ2RiIGlzIGluaXRpYWxpemVkOyB0aGUgImRpc2FibGVkIgorYWN0aW9uIGNhdXNlcyBrZ2RiIHRvIGlnbm9yZSBrZXJuZWwgc2VnZmF1bHRzIGFuZCBzdWNoIHVudGlsIGV4cGxpY2l0bHkKK2VudGVyZWQgYnkgYSBicmVha3BvaW50IGluIHRoZSBjb2RlIG9yIGJ5IGV4dGVybmFsIGFjdGlvbiAoc3lzcnEgb3IgTk1JKS4gCisKKyhCb3RoIDx0dHlzcGVjPiBhbmQgPGFjdGlvbj4gY2FuIGFwcGVhciBhbG9uZSwgdy9vIHRoZSBzZXBhcmF0aW5nIGNvbW1hLikKKworRm9yIGV4YW1wbGUsIGlmIHlvdSB3aXNoIHRvIGRlYnVnIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwIGNvZGUsIHlvdQorbWlnaHQgc3BlY2lmeSB0aGUgaGFsdCBvcHRpb246CisKKyAga2dkYj1oYWx0CisKK0Jvb3QgdGhlIFRBUkdFVCBtYWNoaW5lbSwgd2hpY2ggd2lsbCBhcHBlYXIgdG8gaGFuZy4gCisKK09uIHlvdXIgREVWRUxPUE1FTlQgbWFjaGluZSwgY2QgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgYW5kIHJ1biB0aGUgZ2RiCitwcm9ncmFtLiAgKFRoaXMgaXMgbGlrZWx5IHRvIGJlIGEgY3Jvc3MgR0RCIHdoaWNoIHJ1bnMgb24geW91ciBob3N0IGJ1dAoraXMgYnVpbHQgZm9yIGFuIFNIIHRhcmdldC4pIElmIGV2ZXJ5dGhpbmcgaXMgd29ya2luZyBjb3JyZWN0bHkgeW91CitzaG91bGQgc2VlIGdkYiBwcmludCBvdXQgYSBmZXcgbGluZXMgaW5kaWNhdGluZyB0aGF0IGEgYnJlYWtwb2ludCBoYXMKK2JlZW4gdGFrZW4uICBJdCB3aWxsIGFjdHVhbGx5IHNob3cgYSBsaW5lIG9mIGNvZGUgaW4gdGhlIHRhcmdldCBrZXJuZWwKK2luc2lkZSB0aGUgZ2Ric3R1YiBhY3RpdmF0aW9uIGNvZGUuCisKK05PVEU6IEJFIFNVUkUgVE8gVEVSTUlOQVRFIE9SIFNVU1BFTkQgYW55IG90aGVyIGhvc3QgYXBwbGljYXRpb24gd2hpY2gKK21heSBiZSB1c2luZyB0aGUgc2FtZSBzZXJpYWwgcG9ydCAoZm9yIGV4YW1wbGUsIGEgdGVybWluYWwgZW11bGF0b3IgeW91CitoYXZlIGJlZW4gdXNpbmcgdG8gY29ubmVjdCB0byB0aGUgdGFyZ2V0IGJvb3QgY29kZS4pICBPdGhlcndpc2UsIGRhdGEKK2Zyb20gdGhlIHRhcmdldCBtYXkgbm90IGFsbCBnZXQgdG8gR0RCIQorCitZb3UgY2FuIG5vdyB1c2Ugd2hhdGV2ZXIgZ2RiIGNvbW1hbmRzIHlvdSBsaWtlIHRvIHNldCBicmVha3BvaW50cy4KK0VudGVyICJjb250aW51ZSIgdG8gc3RhcnQgeW91ciB0YXJnZXQgbWFjaGluZSBleGVjdXRpbmcgYWdhaW4uICBBdCB0aGlzCitwb2ludCB0aGUgdGFyZ2V0IHN5c3RlbSB3aWxsIHJ1biBhdCBmdWxsIHNwZWVkIHVudGlsIGl0IGVuY291bnRlcnMKK3lvdXIgYnJlYWtwb2ludCBvciBnZXRzIGEgc2VnbWVudCB2aW9sYXRpb24gaW4gdGhlIGtlcm5lbCwgb3Igd2hhdGV2ZXIuCisKK1NlcmlhbCBQb3J0czogS0dEQiwgQ29uc29sZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHZlcnNpb24gb2YgS0dEQiBtYXkgbm90IGdyYWNlZnVsbHkgaGFuZGxlIGNvbmZsaWN0IHdpdGggb3RoZXIKK2RyaXZlcnMgaW4gdGhlIGtlcm5lbCB1c2luZyB0aGUgc2FtZSBwb3J0LiBJZiBLR0RCIGlzIGNvbmZpZ3VyZWQgb24gdGhlCitzYW1lIHBvcnQgKGFuZCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMpIGFzIHRoZSBrZXJuZWwgY29uc29sZSwgb3IgaWYKK0NPTkZJR19TSF9LR0RCX0NPTlNPTEUgaXMgY29uZmlndXJlZCwgdGhpbmdzIHNob3VsZCBiZSBmaW5lICh0aG91Z2ggaW4KK3NvbWUgY2FzZXMgY29uc29sZSBtZXNzYWdlcyBtYXkgYXBwZWFyIHR3aWNlIHRocm91Z2ggR0RCKS4gIEJ1dCBpZiB0aGUKK0tHREIgcG9ydCBpcyBub3QgdGhlIGtlcm5lbCBjb25zb2xlIGFuZCB1c2VkIGJ5IGFub3RoZXIgc2VyaWFsIGRyaXZlcgord2hpY2ggYXNzdW1lcyBkaWZmZXJlbnQgc2VyaWFsIHBhcmFtZXRlcnMgKGUuZy4gYmF1ZCByYXRlKSBLR0RCIG1heSBub3QKK3JlY292ZXIuCisKK0Fsc28sIHdoZW4gS0dEQiBpcyBlbnRlcmVkIHZpYSBzeXNycS1nIChyZXF1aXJlcyBDT05GSUdfS0dEQl9TWVNSUSkgYW5kCit0aGUga2dkYiBwb3J0IHVzZXMgdGhlIHNhbWUgcG9ydCBhcyB0aGUgY29uc29sZSwgZGV0YWNoaW5nIEdEQiB3aWxsIG5vdAorcmVzdG9yZSB0aGUgY29uc29sZSB0byB3b3JraW5nIG9yZGVyIHdpdGhvdXQgdGhlIHBvcnQgYmVpbmcgcmUtb3BlbmVkLgorCitBbm90aGVyIHNlcmlvdXMgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IEdEQiBjdXJyZW50bHkgQ0FOTk9UIGJyZWFrCitpbnRvIEtHREIgZXh0ZXJuYWxseSAoZS5nLiB2aWEgXkMgb3IgPEJSRUFLPik7IHVubGVzcyBhIGJyZWFrcG9pbnQgb3IKK2Vycm9yIGlzIGVuY291bnRlcmVkLCB0aGUgb25seSB3YXkgdG8gZW50ZXIgS0dEQiBhZnRlciB0aGUgaW5pdGlhbCBoYWx0Cisoc2VlIGFib3ZlKSBpcyB2aWEgTk1JIChDT05GSUdfS0dEQl9OTUkpIG9yIHN5c3JxLWcgKENPTkZJR19LR0RCX1NZU1JRKS4KKworQ29kZSBpcyBpbmNsdWRlZCBmb3IgdGhlIGJhc2ljIEhpdGFjaGkgU29sdXRpb24gRW5naW5lIGJvYXJkcyB0byBhbGxvdwordGhlIHVzZSBvZiB0dHlTMCBmb3IgS0dEQiBpZiBkZXNpcmVkOyB0aGlzIGlzIGxlc3Mgcm9idXN0LCBidXQgbWF5IGJlCit1c2VmdWwgaW4gc29tZSBjYXNlcy4gIChUaGlzIGNhbm5vdCBiZSBzZWxlY3RlZCB1c2luZyB0aGUgY29uZmlnIGZpbGUsIAorYnV0IG9ubHkgdGhyb3VnaCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSwgZS5nLiAia2dkYj10dHlTMCIsIHRob3VnaCB0aGUKK2NvbmZpZ3VyZWQgZGVmYXVsdHMgZm9yIGJhdWQgcmF0ZSBldGMuIHN0aWxsIGFwcGx5IGlmIG5vdCBvdmVycmlkZGVuLikKKworSWYgZ2Ric3R1YiBEb2VzIE5vdCBXb3JrCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgaXQgZG9lc24ndCB3b3JrLCB5b3Ugd2lsbCBoYXZlIHRvIHRyb3VibGVzaG9vdCBpdC4gIERvIHRoZSBlYXN5Cit0aGluZ3MgZmlyc3QgbGlrZSBkb3VibGUgY2hlY2tpbmcgeW91ciBjYWJsaW5nIGFuZCBkYXRhIHJhdGVzLiAgWW91CittaWdodCB0cnkgc29tZSBub24ta2VybmVsIGJhc2VkIHByb2dyYW1zIHRvIHNlZSBpZiB0aGUgYmFjay10by1iYWNrCitjb25uZWN0aW9uIHdvcmtzIHByb3Blcmx5LiAgSnVzdCBzb21ldGhpbmcgc2ltcGxlIGxpa2UgY2F0IC9ldGMvaG9zdHMKKy9kZXYvdHR5UzAgb24gb25lIG1hY2hpbmUgYW5kIGNhdCAvZGV2L3R0eVMwIG9uIHRoZSBvdGhlciB3aWxsIHRlbGwgeW91CitpZiB5b3UgY2FuIHNlbmQgZGF0YSBmcm9tIG9uZSBtYWNoaW5lIHRvIHRoZSBvdGhlci4gIFRoZXJlIGlzIG5vIHBvaW50CitpbiB0ZWFyaW5nIG91dCB5b3VyIGhhaXIgaW4gdGhlIGtlcm5lbCBpZiB0aGUgbGluZSBkb2Vzbid0IHdvcmsuCisKK0lmIHlvdSBuZWVkIHRvIGRlYnVnIHRoZSBHREIvS0dEQiBjb21tdW5pY2F0aW9uIGl0c2VsZiwgdGhlIGdkYiBjb21tYW5kcworInNldCBkZWJ1ZyByZW1vdGUgMSIgYW5kICJzZXQgZGVidWcgc2VyaWFsIDEiIG1heSBiZSB1c2VmdWwsIGJ1dCBiZQord2FybmVkOiB0aGV5IHByb2R1Y2UgYSBsb3Qgb2Ygb3V0cHV0LgorCitUaHJlYWRzCis9PT09PT09CisKK0VhY2ggcHJvY2VzcyBpbiBhIHRhcmdldCBtYWNoaW5lIGlzIHNlZW4gYXMgYSBnZGIgdGhyZWFkLiBnZGIgdGhyZWFkIHJlbGF0ZWQKK2NvbW1hbmRzIChpbmZvIHRocmVhZHMsIHRocmVhZCBuKSBjYW4gYmUgdXNlZC4gQ09ORklHX0tHREJfVEhSRUFEIG11c3QKK2JlIGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKworSW4gdGhpcyB2ZXJzaW9uLCBrZ2RiIHJlcG9ydHMgUElEX01BWCAoMzI3NjgpIGFzIHRoZSBwcm9jZXNzIElEIGZvciB0aGUKK2lkbGUgcHJvY2VzcyAocGlkIDApLCBzaW5jZSBHREIgZG9lcyBub3QgYWNjZXB0IDAgYXMgYW4gSUQuCisKK0RldGFjaGluZyAoZXhpdGluZyBLR0RCKQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gcmVzdW1lIGZ1bGwtc3BlZWQgdGFyZ2V0IGV4ZWN1dGlvbjogImNvbnRpbnVlIiBhbmQKKyJkZXRhY2giLiBXaXRoICJjb250aW51ZSIsIEdEQiBpbnNlcnRzIGFueSBzcGVjaWZpZWQgYnJlYWtwb2ludHMgaW4gdGhlCit0YXJnZXQgY29kZSBhbmQgcmVzdW1lcyBleGVjdXRpb247IHRoZSB0YXJnZXQgaXMgc3RpbGwgaW4gImdkYiBtb2RlIi4KK0lmIGEgYnJlYWtwb2ludCBvciBvdGhlciBkZWJ1ZyBldmVudCAoZS5nLiBOTUkpIGhhcHBlbnMsIHRoZSB0YXJnZXQKK2hhbHRzIGFuZCBjb21tdW5pY2F0ZXMgd2l0aCBHREIgYWdhaW4sIHdoaWNoIGlzIHdhaXRpbmcgZm9yIGl0LgorCitXaXRoICJkZXRhY2giLCBHREIgZG9lcyAqbm90KiBpbnNlcnQgYW55IGJyZWFrcG9pbnRzOyB0YXJnZXQgZXhlY3V0aW9uCitpcyByZXN1bWVkIGFuZCBHREIgc3RvcHMgY29tbXVuaWNhdGluZyAoZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHRhcmdldCkuCitJbiB0aGlzIGNhc2UsIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIGluICJnZGIgbW9kZSIgLS0gZm9yIGV4YW1wbGUsCitjb25zb2xlIG1lc3NhZ2VzIG5vIGxvbmdlciBnZXQgc2VudCBzZXBhcmF0ZWx5IHRvIHRoZSBLR0RCIHBvcnQsIG9yCitlbmNhcHN1bGF0ZWQgZm9yIEdEQi4gIElmIGEgZGVidWcgZXZlbnQgKGUuZy4gTk1JKSBvY2N1cnMsIHRoZSB0YXJnZXQKK3dpbGwgcmUtZW50ZXIgImdkYiBtb2RlIiBhbmQgd2lsbCBkaXNwbGF5IHRoaXMgZmFjdCBvbiB0aGUgY29uc29sZTsgeW91CittdXN0IGdpdmUgYSBuZXcgInRhcmdldCByZW1vdGUiIGNvbW1hbmQgdG8gZ2RiLgorCitOT1RFOiBUTyBBVk9JRCBMT1NTSU5HIENPTlNPTEUgTUVTU0FHRVMgSU4gQ0FTRSBUSEUgS0VSTkVMIENPTlNPTEUgQU5ECitLR0RCIFVTSU5HIFRIRSBTQU1FIFBPUlQsIFRIRSBUQVJHRVQgV0FJVFMgRk9SIEFOWSBJTlBVVCBDSEFSQUNURVIgT04KK1RIRSBLR0RCIFBPUlQgQUZURVIgQSBERVRBQ0ggQ09NTUFORC4gIEZvciBleGFtcGxlLCBhZnRlciB0aGUgZGV0YWNoIHlvdQorY291bGQgc3RhcnQgYSB0ZXJtaW5hbCBlbXVsYXRvciBvbiB0aGUgc2FtZSBob3N0IHBvcnQgYW5kIGVudGVyIGEgPGNyPjsKK2hvd2V2ZXIsIHRoaXMgcHJvZ3JhbSBtdXN0IHRoZW4gYmUgdGVybWluYXRlZCBvciBzdXNwZW5kZWQgaW4gb3JkZXIgdG8KK3VzZSBHQkQgYWdhaW4gaWYgS0dEQiBpcyByZS1lbnRlcmVkLgorCisKK0Fja25vd2xlZGdlbWVudHMKKz09PT09PT09PT09PT09PT0KKworVGhpcyBjb2RlIHdhcyBtb3N0bHkgZ2VuZXJhdGVkIGJ5IEhlbnJ5IEJlbGwgPGhlbnJ5LmJlbGxAc3QuY29tPjsKK2xhcmdlbHkgZnJvbSBLR0RCIGJ5IEFtaXQgUy4gS2FsZSA8YWthbGVAdmVyaXRhcy5jb20+IC0gZXh0cmFjdHMgZnJvbQorY29kZSBieSBHbGVubiBFbmdlbCwgSmltIEtpbmdkb24sIERhdmlkIEdyb3RoZSA8ZGF2ZUBnY29tLmNvbT4sIFRpZ3JhbgorQWl2YXppYW4gPHRpZ3JhbkBzY28uY29tPiwgV2lsbGlhbSBHYXRsaWZmIDxiZ2F0QG9wZW4td2lkZ2V0cy5jb20+LCBCZW4KK0xlZSwgU3RldmUgQ2hhbWJlcmxhaW4gYW5kIEJlbm9pdCBNaWxsZXIgPGZ1bGdAaW5hbWUuY29tPiBhcmUgYWxzbworaW5jbHVkZWQuIAorCitKZXJlbXkgU2llZ2VsCis8anNpZWdlbEBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zaC9uZXctbWFjaGluZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NoL25ldy1tYWNoaW5lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjJkZDJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zaC9uZXctbWFjaGluZS50eHQKQEAgLTAsMCArMSwzMDYgQEAKKworICAgICAgICAgICAgICAgIEFkZGluZyBhIG5ldyBib2FyZCB0byBMaW51eFNICisgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICBQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPgorCitUaGlzIGRvY3VtZW50IGF0dGVtcHRzIHRvIG91dGxpbmUgd2hhdCBzdGVwcyBhcmUgbmVjZXNzYXJ5IHRvIGFkZCBzdXBwb3J0Citmb3IgbmV3IGJvYXJkcyB0byB0aGUgTGludXhTSCBwb3J0IHVuZGVyIHRoZSBuZXcgMi41IGFuZCAyLjYga2VybmVscy4gVGhpcworYWxzbyBhdHRlbXB0cyB0byBvdXRsaW5lIHNvbWUgb2YgdGhlIG5vdGljZWFibGUgY2hhbmdlcyBiZXR3ZWVuIHRoZSAyLjQKK2FuZCB0aGUgMi41LzIuNiBTSCBiYWNrZW5kLgorCisxLiBOZXcgRGlyZWN0b3J5IFN0cnVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUgaXMgdGhlIG5ldyBkaXJlY3Rvcnkgc3RydWN0dXJlLiBVbmRlciAyLjQsIG1vc3QKK29mIHRoZSBib2FyZC1zcGVjaWZpYyBjb2RlICh3aXRoIHRoZSBleGNlcHRpb24gb2Ygc3Rib2FyZHMpIGVuZGVkIHVwCitpbiBhcmNoL3NoL2tlcm5lbC8gZGlyZWN0bHksIHdpdGggYm9hcmQtc3BlY2lmaWMgaGVhZGVycyBlbmRpbmcgdXAgaW4KK2luY2x1ZGUvYXNtLXNoLy4gRm9yIHRoZSBuZXcga2VybmVsLCB0aGluZ3MgYXJlIGJyb2tlbiBvdXQgYnkgYm9hcmQgdHlwZSwKK2NvbXBhbmlvbiBjaGlwIHR5cGUsIGFuZCBDUFUgdHlwZS4gTG9va2luZyBhdCBhIHRyZWUgdmlldyBvZiB0aGlzIGRpcmVjdG9yeQoraGVpcmFyY2h5IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworQm9hcmQtc3BlY2lmaWMgY29kZToKKworLgorfC0tIGFyY2gKK3wgICBgLS0gc2gKK3wgICAgICAgYC0tIGJvYXJkcworfCAgICAgICAgICAgfC0tIGFkeAorfCAgICAgICAgICAgfCAgIGAtLSBib2FyZC1zcGVjaWZpYyBmaWxlcworfCAgICAgICAgICAgfC0tIGJpZ3N1cgorfCAgICAgICAgICAgfCAgIGAtLSBib2FyZC1zcGVjaWZpYyBmaWxlcworfCAgICAgICAgICAgfAorfCAgICAgICAgICAgLi4uIG1vcmUgYm9hcmRzIGhlcmUgLi4uCit8CitgLS0gaW5jbHVkZQorICAgIGAtLSBhc20tc2gKKyAgICAgICAgfC0tIGFkeAorICAgICAgICB8ICAgYC0tIGJvYXJkLXNwZWNpZmljIGhlYWRlcnMKKyAgICAgICAgfC0tIGJpZ3N1cgorICAgICAgICB8ICAgYC0tIGJvYXJkLXNwZWNpZmljIGhlYWRlcnMKKyAgICAgICAgfAorCS4uIG1vcmUgYm9hcmRzIGhlcmUgLi4uCisKK0l0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgZWFjaCBib2FyZCBpcyByZXF1aXJlZCB0byBoYXZlIHNvbWUgY2VydGFpbgoraGVhZGVycy4gQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBpby5oIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgbmVlZHMKK3RvIGJlIHByb3ZpZGVkIGZvciBlYWNoIGJvYXJkLCBhbmQgY2FuIGdlbmVyYWxseSBqdXN0IHJlZmVyZW5jZSBnZW5lcmljCitmdW5jdGlvbnMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBpc2FfcG9ydDJhZGRyKS4KKworTmV4dCwgZm9yIGNvbXBhbmlvbiBjaGlwczoKKy4KK2AtLSBhcmNoCisgICAgYC0tIHNoCisgICAgICAgIGAtLSBjY2hpcHMKKyAgICAgICAgICAgIGAtLSBoZDY0NDZ4CisgICAgICAgICAgICAgICAgfC0tIGhkNjQ0NjEKKyAgICAgICAgICAgICAgICB8ICAgYC0tIGNjaGlwLXNwZWNpZmljIGZpbGVzCisgICAgICAgICAgICAgICAgYC0tIGhkNjQ0NjUKKyAgICAgICAgICAgICAgICAgICAgYC0tIGNjaGlwLXNwZWNpZmljIGZpbGVzCisKKy4uLiBhbmQgc28gb24uIEhlYWRlcnMgZm9yIHRoZSBjb21wYW5pb24gY2hpcHMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5IGFzCitib2FyZC1zcGVjaWZpYyBoZWFkZXJzLiBUaHVzLCBpbmNsdWRlL2FzbS1zaC9oZDY0NDYxIGlzIGhvbWUgdG8gYWxsIG9mIHRoZQoraGQ2NDQ2MS1zcGVjaWZpYyBoZWFkZXJzLgorCitGaW5hbGx5LCBDUFUgZmFtaWx5IHN1cHBvcnQgaXMgYWxzbyBhYnN0cmFjdGVkOgorLgorfC0tIGFyY2gKK3wgICBgLS0gc2gKK3wgICAgICAgfC0tIGtlcm5lbAorfCAgICAgICB8ICAgYC0tIGNwdQorfCAgICAgICB8ICAgICAgIHwtLSBzaDIKK3wgICAgICAgfCAgICAgICB8ICAgYC0tIFNILTIgZ2VuZXJpYyBmaWxlcworfCAgICAgICB8ICAgICAgIHwtLSBzaDMKK3wgICAgICAgfCAgICAgICB8ICAgYC0tIFNILTMgZ2VuZXJpYyBmaWxlcworfCAgICAgICB8ICAgICAgIGAtLSBzaDQKK3wgICAgICAgfCAgICAgICAgICAgYC0tIFNILTQgZ2VuZXJpYyBmaWxlcworfCAgICAgICBgLS0gbW0KK3wgICAgICAgICAgIGAtLSBUaGlzIGlzIGFsc28gYnJva2VuIG91dCBwZXIgQ1BVIGZhbWlseSwgc28gZWFjaCBmYW1pbHkgY2FuCit8ICAgICAgICAgICAgICAgaGF2ZSB0aGVpciBvd24gc2V0IG9mIGNhY2hlL3RsYiBmdW5jdGlvbnMuCit8CitgLS0gaW5jbHVkZQorICAgIGAtLSBhc20tc2gKKyAgICAgICAgfC0tIGNwdS1zaDIKKyAgICAgICAgfCAgIGAtLSBTSC0yIHNwZWNpZmljIGhlYWRlcnMKKyAgICAgICAgfC0tIGNwdS1zaDMKKyAgICAgICAgfCAgIGAtLSBTSC0zIHNwZWNpZmljIGhlYWRlcnMKKyAgICAgICAgYC0tIGNwdS1zaDQKKyAgICAgICAgICAgIGAtLSBTSC00IHNwZWNpZmljIGhlYWRlcnMKKworSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgQ1BVIHN1YnR5cGVzIGFyZSBfbm90XyBhYnN0cmFjdGVkLiBUaHVzLCB0aGVzZSBzdGlsbAorbmVlZCB0byBiZSBkZWFsdCB3aXRoIGJ5IHRoZSBDUFUgZmFtaWx5IHNwZWNpZmljIGNvZGUuCisKKzIuIEFkZGluZyBhIE5ldyBCb2FyZAorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmaXJzdCB0aGluZyB0byBkZXRlcm1pbmUgaXMgd2hldGhlciB0aGUgYm9hcmQgeW91IGFyZSBhZGRpbmcgd2lsbCBiZQoraXNvbGF0ZWQsIG9yIHdoZXRoZXIgaXQgd2lsbCBiZSBwYXJ0IG9mIGEgZmFtaWx5IG9mIGJvYXJkcyB0aGF0IGNhbiBtb3N0bHkKK3NoYXJlIHRoZSBzYW1lIGJvYXJkLXNwZWNpZmljIGNvZGUgd2l0aCBtaW5vciBkaWZmZXJlbmNlcy4KKworSW4gdGhlIGZpcnN0IGNhc2UsIHRoaXMgaXMganVzdCBhIG1hdHRlciBvZiBtYWtpbmcgYSBkaXJlY3RvcnkgZm9yIHlvdXIKK2JvYXJkIGluIGFyY2gvc2gvYm9hcmRzLyBhbmQgYWRkaW5nIHJ1bGVzIHRvIGhvb2sgeW91ciBib2FyZCBpbiB3aXRoIHRoZQorYnVpbGQgc3lzdGVtIChtb3JlIG9uIHRoaXMgaW4gdGhlIG5leHQgc2VjdGlvbikuIEhvd2V2ZXIsIGZvciBib2FyZCBmYW1pbGllcworaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBoYXZlIGEgY29tbW9uIHRvcC1sZXZlbCBhcmNoL3NoL2JvYXJkcy8gZGlyZWN0b3J5CithbmQgdGhlbiBwb3B1bGF0ZSB0aGF0IHdpdGggc3ViLWRpcmVjdG9yaWVzIGZvciBlYWNoIG1lbWJlciBvZiB0aGUgZmFtaWx5LgorQm90aCB0aGUgU29sdXRpb24gRW5naW5lIGFuZCB0aGUgaHA2eHggYm9hcmRzIGFyZSBhbiBleGFtcGxlIG9mIHRoaXMuCisKK0FmdGVyIHlvdSBoYXZlIHNldHVwIHlvdXIgbmV3IGFyY2gvc2gvYm9hcmRzLyBkaXJlY3RvcnksIHJlbWVtYmVyIHRoYXQgeW91CithbHNvIG11c3QgYWRkIGEgZGlyZWN0b3J5IGluIGluY2x1ZGUvYXNtLXNoIGZvciBoZWFkZXJzIGxvY2FsaXplZCB0byB0aGlzCitib2FyZC4gSW4gb3JkZXIgdG8gaW50ZXJvcGVyYXRlIHNlYW1sZXNzbHkgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBpdCdzIGJlc3QKK3RvIGhhdmUgdGhpcyBkaXJlY3RvcnkgdGhlIHNhbWUgYXMgdGhlIGFyY2gvc2gvYm9hcmRzLyBkaXJlY3RvcnkgbmFtZSwKK3Rob3VnaCBpZiB5b3VyIGJvYXJkIGlzIGFnYWluIHBhcnQgb2YgYSBmYW1pbHksIHRoZSBidWlsZCBzeXN0ZW0gaGFzIHdheXMKK29mIGRlYWxpbmcgd2l0aCB0aGlzLCBhbmQgeW91IGNhbiBmZWVsIGZyZWUgdG8gbmFtZSB0aGUgZGlyZWN0b3J5IGFmdGVyCit0aGUgZmFtaWx5IG1lbWJlciBpdHNlbGYuCisKK1RoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhhdCBlYWNoIGJvYXJkIGlzIHJlcXVpcmVkIHRvIGhhdmUsIGJvdGggaW4gdGhlCithcmNoL3NoL2JvYXJkcyBhbmQgdGhlIGluY2x1ZGUvYXNtLXNoLyBoZWlyYXJjaHkuIEluIG9yZGVyIHRvIGJldHRlcgorZXhwbGFpbiB0aGlzLCB3ZSB1c2Ugc29tZSBleGFtcGxlcyBmb3IgYWRkaW5nIGFuIGltYWdpbmFyeSBib2FyZC4gRm9yCitzZXR1cCBjb2RlLCB3ZSdyZSByZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdCB0byBwcm92aWRlIGRlZmluaXRpb25zIGZvcgorZ2V0X3N5c3RlbV90eXBlKCkgYW5kIHBsYXRmb3JtX3NldHVwKCkuIEZvciBvdXIgaW1hZ2luYXJ5IGJvYXJkLCB0aGlzCittaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOgorCisvKgorICogYXJjaC9zaC9ib2FyZHMvdmFwb3Ivc2V0dXAuYyAtIFNldHVwIGNvZGUgZm9yIGltYWdpbmFyeSBib2FyZAorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gIkZvb1RlY2ggVmFwb3Jib2FyZCI7Cit9CisKK2ludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKK3sKKyAgCS8qCisJICogSWYgb3VyIGhhcmR3YXJlIGFjdHVhbGx5IGV4aXN0ZWQsIHdlIHdvdWxkIGRvIHJlYWwKKwkgKiBzZXR1cCBoZXJlLiBUaG91Z2ggaXQncyBhbHNvIHNhbmUgdG8gbGVhdmUgdGhpcyBlbXB0eQorCSAqIGlmIHRoZXJlJ3Mgbm8gcmVhbCBpbml0IHdvcmsgdGhhdCBoYXMgdG8gYmUgZG9uZSBmb3IKKwkgKiB0aGlzIGJvYXJkLgorCSAqLworCisgIAkvKiAKKwkgKiBQcmVzdW1lIGFsbCBGb29UZWNoIGJvYXJkcyBoYXZlIHRoZSBzYW1lIGJyb2tlbiB0aW1lciwKKwkgKiBhbmQgYWxzbyBwcmVzdW1lIHRoYXQgd2UndmUgZGVmaW5lZCBmb29fdGltZXJfaW5pdCB0bworCSAqIGRvIHNvbWV0aGluZyB1c2VmdWwuCisJICovCisgIAlib2FyZF90aW1lX2luaXQgPSBmb29fdGltZXJfaW5pdDsKKworCS8qIFN0YXJ0LXVwIGltYWdpbmFyeSBQQ0kgLi4uICovCisKKwkvKiBBbmQgd2hhdGV2ZXIgZWxzZSAuLi4gKi8KKworCXJldHVybiAwOworfQorCitPdXIgbmV3IGltYWdpbmFyeSBib2FyZCB3aWxsIGFsc28gaGF2ZSB0byB0aWUgaW50byB0aGUgbWFjaHZlYyBpbiBvcmRlciBmb3IgaXQKK3RvIGJlIG9mIGFueSB1c2UuIEN1cnJlbnRseSB0aGUgbWFjaHZlYyBpcyBzbG93bHkgb24gaXRzIHdheSBvdXQsIGJ1dCBpcyBzdGlsbAorcmVxdWlyZWQgZm9yIHRoZSB0aW1lIGJlaW5nLiBBcyBzdWNoLCBsZXQgdXMgdGFrZSBhIGxvb2sgYXQgd2hhdCBuZWVkcyB0byBiZQorZG9uZSBmb3IgdGhlIG1hY2h2ZWMgYXNzaWdubWVudC4KKworbWFjaHZlYyBmdW5jdGlvbnMgZmFsbCBpbnRvIGEgbnVtYmVyIG9mIGNhdGVnb3JpZXM6CisKKyAtIEkvTyBmdW5jdGlvbnMgdG8gSU8gbWVtb3J5IChpbmIgZXRjKSBhbmQgUENJL21haW4gbWVtb3J5IChyZWFkYiBldGMpLgorIC0gSS9PIHJlbWFwcGluZyBmdW5jdGlvbnMgKGlvcmVtYXAgZXRjKQorIC0gc29tZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMKKyAtIGEgJ2hlYXJ0YmVhdCcgZnVuY3Rpb24KKyAtIHNvbWUgbWlzY2VsbGFuZW91cyBmbGFncworCitUaGUgdHJlZSBjYW4gYmUgYnVpbHQgaW4gdHdvIHdheXM6CisgLSBhcyBhIGZ1bGx5IGdlbmVyaWMgYnVpbGQuIEFsbCBkcml2ZXJzIGFyZSBsaW5rZWQgaW4sIGFuZCBhbGwgZnVuY3Rpb25zCisgICBnbyB0aHJvdWdoIHRoZSBtYWNodmVjCisgLSBhcyBhIG1hY2hpbmUgc3BlY2lmaWMgYnVpbGQuIEluIHRoaXMgY2FzZSBvbmx5IHRoZSByZXF1aXJlZCBkcml2ZXJzCisgICB3aWxsIGJlIGxpbmtlZCBpbiwgYW5kIHNvbWUgbWFjcm9zIG1heSBiZSByZWRlZmluZWQgdG8gbm90IGdvIHRocm91Z2gKKyAgIHRoZSBtYWNodmVjIHdoZXJlIHBlcmZvcm1hbmNlIGlzIGltcG9ydGFudCAoaW4gcGFydGljdWxhciBJTyBmdW5jdGlvbnMpLgorCitUaGVyZSBhcmUgdGhyZWUgd2F5cyBpbiB3aGljaCBJTyBjYW4gYmUgcGVyZm9ybWVkOgorIC0gbm9uZSBhdCBhbGwuIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGZvciB0aGUgJ3Vua25vd24nIG1hY2hpbmUgdHlwZSwKKyAgIHdoaWNoIHVzIGRlc2lnbmVkIHRvIHJ1biBvbiBhIG1hY2hpbmUgYWJvdXQgd2hpY2ggd2Uga25vdyBub3RoaW5nLCBhbmQKKyAgIHNvIGFsbCBhbGwgSU8gaW5zdHJ1Y3Rpb25zIGRvIG5vdGhpbmcuCisgLSBmdWxseSBjdXN0b20uIEluIHRoaXMgY2FzZSBhbGwgSU8gZnVuY3Rpb25zIGdvIHRvIGEgbWFjaGluZSBzcGVjaWZpYworICAgc2V0IG9mIGZ1bmN0aW9ucyB3aGljaCBjYW4gZG8gd2hhdCB0aGV5IGxpa2UKKyAtIGEgZ2VuZXJpYyBzZXQgb2YgZnVuY3Rpb25zLiBUaGVzZSB3aWxsIGNvcGUgd2l0aCBtb3N0IHNpdHVhdGlvbnMsCisgICBhbmQgcmVseSBvbiBhIHNpbmdsZSBmdW5jdGlvbiwgbXZfcG9ydDJhZGRyLCB3aGljaCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUKKyAgIG1hY2hpbmUgdmVjdG9yLCBhbmQgY29udmVydHMgYW4gSU8gYWRkcmVzcyBpbnRvIGEgbWVtb3J5IGFkZHJlc3MsIHdoaWNoCisgICBjYW4gYmUgcmVhZCBmcm9tL3dyaXR0ZW4gdG8gZGlyZWN0bHkuCisKK1RodXMgYWRkaW5nIGEgbmV3IG1hY2hpbmUgaW52b2x2ZXMgdGhlIGZvbGxvd2luZyBzdGVwcyAoSSB3aWxsIGFzc3VtZSBJIGFtCithZGRpbmcgYSBtYWNoaW5lIGNhbGxlZCB2YXBvcik6CisKKyAtIGFkZCBhIG5ldyBmaWxlIGluY2x1ZGUvYXNtLXNoL3ZhcG9yL2lvLmggd2hpY2ggY29udGFpbnMgcHJvdG90eXBlcyBmb3IKKyAgIGFueSBtYWNoaW5lIHNwZWNpZmljIElPIGZ1bmN0aW9ucyBwcmVmaXhlZCB3aXRoIHRoZSBtYWNoaW5lIG5hbWUsIGZvcgorICAgZXhhbXBsZSB2YXBvcl9pbmIuIFRoZXNlIHdpbGwgYmUgbmVlZGVkIHdoZW4gZmlsbGluZyBvdXQgdGhlIG1hY2hpbmUKKyAgIHZlY3Rvci4KKworICAgVGhpcyBpcyB0aGUgbWluaW11bSB0aGF0IGlzIHJlcXVpcmVkLCBob3dldmVyIHRoZXJlIGFyZSBhbXBsZQorICAgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWlzZSB0aGlzLiBJbiBwYXJ0aWN1bGFyLCBieSBtYWtpbmcgdGhlIHByb3RvdHlwZXMKKyAgIGlubGluZSBmdW5jdGlvbiBkZWZpbml0aW9ucywgaXQgaXMgcG9zc2libGUgdG8gaW5saW5lIHRoZSBmdW5jdGlvbiB3aGVuCisgICBidWlsZGluZyBtYWNoaW5lIHNwZWNpZmljIHZlcnNpb25zLiBOb3RlIHRoYXQgdGhlIG1hY2hpbmUgdmVjdG9yCisgICBmdW5jdGlvbnMgd2lsbCBzdGlsbCBiZSBuZWVkZWQsIHNvIHRoYXQgYSBtb2R1bGUgYnVpbHQgZm9yIGEgZ2VuZXJpYworICAgc2V0dXAgY2FuIGJlIGxvYWRlZC4KKworIC0gYWRkIGEgbmV3IGZpbGUgYXJjaC9zaC9ib2FyZHMvdmFwb3IvbWFjaC5jLiBUaGlzIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uCisgICBvZiB0aGUgbWFjaGluZSB2ZWN0b3IuIFdoZW4gYnVpbGRpbmcgdGhlIG1hY2hpbmUgc3BlY2lmaWMgdmVyc2lvbiwgdGhpcworICAgd2lsbCBiZSB0aGUgcmVhbCBtYWNoaW5lIHZlY3RvciAodmlhIGFuIGFsaWFzKSwgd2hpbGUgaW4gdGhlIGdlbmVyaWMKKyAgIHZlcnNpb24gaXMgdXNlZCB0byBpbml0aWFsaXNlIHRoZSBtYWNoaW5lIHZlY3RvciwgYW5kIHRoZW4gZnJlZWQsIGJ5CisgICBtYWtpbmcgaXQgaW5pdGRhdGEuIFRoaXMgc2hvdWxkIGJlIGRlZmluZWQgYXM6CisKKyAgICAgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3ZhcG9yIF9faW5pdG12ID0geworICAgICAgIC5tdl9uYW1lID0gInZhcG9yIiwKKyAgICAgfQorICAgICBBTElBU19NVih2YXBvcikKKworIC0gZmluYWxseSBhZGQgYSBmaWxlIGFyY2gvc2gvYm9hcmRzL3ZhcG9yL2lvLmMsIHdoaWNoIGNvbnRhaW5zCisgICBkZWZpbml0aW9ucyBvZiB0aGUgbWFjaGluZSBzcGVjaWZpYyBpbyBmdW5jdGlvbnMuCisKK0Egbm90ZSBhYm91dCBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMuIFRocmVlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyBhcmUKK3Byb3ZpZGVkIGluIHRoZSBtYWNoaW5lIHZlY3RvcjoKKyAtIG12X2FyY2hfaW5pdCAtIGNhbGxlZCB2ZXJ5IGVhcmx5IG9uIGZyb20gc2V0dXBfYXJjaAorIC0gbXZfaW5pdF9pcnEgLSBjYWxsZWQgZnJvbSBpbml0X0lSUSwgYWZ0ZXIgdGhlIGdlbmVyaWMgU0ggaW50ZXJydXB0CisgICBpbml0aWFsaXNhdGlvbgorIC0gbXZfaW5pdF9wY2kgLSBjdXJyZW50bHkgbm90IHVzZWQKKworQW55IG90aGVyIHJlbWFpbmluZyBmdW5jdGlvbnMgd2hpY2ggbmVlZCB0byBiZSBjYWxsZWQgYXQgc3RhcnQgdXAgY2FuIGJlCithZGRlZCB0byB0aGUgbGlzdCB1c2luZyB0aGUgX19pbml0Y2FsbHMgbWFjcm8gKG9yIG1vZHVsZV9pbml0IGlmIHRoZSBjb2RlCitjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUpLiBNYW55IGdlbmVyaWMgZHJpdmVycyBwcm9iZSB0byBzZWUgaWYgdGhlIGRldmljZQordGhleSBhcmUgdGFyZ2V0aW5nIGlzIHByZXNlbnQsIGhvd2V2ZXIgdGhpcyBtYXkgbm90IGFsd2F5cyBiZSBhcHByb3ByaWF0ZSwKK3NvIGEgZmxhZyBjYW4gYmUgYWRkZWQgdG8gdGhlIG1hY2hpbmUgdmVjdG9yIHdoaWNoIHdpbGwgYmUgc2V0IG9uIHRob3NlCittYWNoaW5lcyB3aGljaCBoYXZlIHRoZSBoYXJkd2FyZSBpbiBxdWVzdGlvbiwgcmVkdWNpbmcgdGhlIHByb2JlIHRvIGEKK3NpbmdsZSBjb25kaXRpb25hbC4KKworMy4gSG9va2luZyBpbnRvIHRoZSBCdWlsZCBTeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdyB0aGF0IHdlIGhhdmUgdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3JpZXMgc2V0dXAsIGFuZCBhbGwgb2YgdGhlCitib2FyZC1zcGVjaWZpYyBjb2RlIGlzIGluIHBsYWNlLCBpdCdzIHRpbWUgdG8gbG9vayBhdCBob3cgdG8gZ2V0IHRoZQord2hvbGUgbWVzcyB0byBmaXQgaW50byB0aGUgYnVpbGQgc3lzdGVtLgorCitMYXJnZSBwb3J0aW9ucyBvZiB0aGUgYnVpbGQgc3lzdGVtIGFyZSBub3cgZW50aXJlbHkgZHluYW1pYywgYW5kIG1lcmVseQorcmVxdWlyZSB0aGUgcHJvcGVyIGVudHJ5IGhlcmUgYW5kIHRoZXJlIGluIG9yZGVyIHRvIGdldCB0aGluZ3MgZG9uZS4KKworVGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGFkZCBhbiBlbnRyeSB0byBhcmNoL3NoL0tjb25maWcsIHVuZGVyIHRoZQorIlN5c3RlbSB0eXBlIiBtZW51OgorCitjb25maWcgU0hfVkFQT1IKKwlib29sICJWYXBvciIKKwloZWxwCisJICBzZWxlY3QgVmFwb3IgaWYgY29uZmlndXJpbmcgZm9yIGEgRm9vVGVjaCBWYXBvcmJvYXJkLgorCituZXh0LCB0aGlzIGhhcyB0byBiZSBhZGRlZCBpbnRvIGFyY2gvc2gvTWFrZWZpbGUuIEFsbCBib2FyZHMgcmVxdWlyZSBhCittYWNoZGlyLXkgZW50cnkgaW4gb3JkZXIgdG8gYmUgYnVpbHQuIFRoaXMgZW50cnkgbmVlZHMgdG8gYmUgdGhlIG5hbWUgb2YKK3RoZSBib2FyZCBkaXJlY3RvcnkgYXMgaXQgYXBwZWFycyBpbiBhcmNoL3NoL2JvYXJkcywgZXZlbiBpZiBpdCBpcyBpbiBhCitzdWItZGlyZWN0b3J5IChpbiB3aGljaCBjYXNlLCBhbGwgcGFyZW50IGRpcmVjdG9yaWVzIGJlbG93IGFyY2gvc2gvYm9hcmRzLworbmVlZCB0byBiZSBsaXN0ZWQpLiBGb3Igb3VyIG5ldyBib2FyZCwgdGhpcyBlbnRyeSBjYW4gbG9vayBsaWtlOgorCittYWNoZGlyLSQoQ09ORklHX1NIX1ZBUE9SKQkrPSB2YXBvcgorCitwcm92aWRlZCB0aGF0IHdlJ3ZlIHBsYWNlZCBldmVyeXRoaW5nIGluIHRoZSBhcmNoL3NoL2JvYXJkcy92YXBvci8gZGlyZWN0b3J5LgorCitOZXh0LCB0aGUgYnVpbGQgc3lzdGVtIGFzc3VtZXMgdGhhdCB5b3VyIGluY2x1ZGUvYXNtLXNoIGRpcmVjdG9yeSB3aWxsIGFsc28KK2JlIG5hbWVkIHRoZSBzYW1lLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSAoYXMgaXMgdGhlIGNhc2Ugd2l0aCBtdWx0aXBsZQorYm9hcmRzIGJlbG9uZ2luZyB0byBhIGNvbW1vbiBmYW1pbHkpLCB0aGVuIHRoZSBkaXJlY3RvcnkgbmFtZSBuZWVkcyB0byBiZQoraW1wbGljaXRseSBhcHBlbmRlZCB0byBpbmNkaXIteS4gVGhlIGV4aXN0aW5nIGNvZGUgbWFuYWdlcyB0aGlzIGZvciB0aGUKK1NvbHV0aW9uIEVuZ2luZSBhbmQgaHA2eHggYm9hcmRzLCBzbyBzZWUgdGhlc2UgZm9yIGFuIGV4YW1wbGUuCisKK09uY2UgdGhhdCBpcyB0YWtlbiBjYXJlIG9mLCBpdCdzIHRpbWUgdG8gYWRkIGFuIGVudHJ5IGZvciB0aGUgbWFjaCB0eXBlLgorVGhpcyBpcyBkb25lIGJ5IGFkZGluZyBhbiBlbnRyeSB0byB0aGUgZW5kIG9mIHRoZSBhcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKK2xpc3QuIFRoZSBtZXRob2QgZm9yIGRvaW5nIHRoaXMgaXMgc2VsZiBleHBsYW5hdG9yeSwgYW5kIHNvIHdlIHdvbid0IHdhc3RlCitzcGFjZSByZXN0YXRpbmcgaXQgaGVyZS4gQWZ0ZXIgdGhpcyBpcyBkb25lLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHVzZQoraW1wbGljaXQgY2hlY2tzIGZvciB5b3VyIGJvYXJkIGlmIHlvdSBuZWVkIHRoaXMgc29tZXdoZXJlIHRocm91Z2hvdXQgdGhlCitjb21tb24gY29kZSwgc3VjaCBhczoKKworCS8qIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgRm9vVGVjaCBWYXBvcmJvYXJkICovCisJaWYgKCFtYWNoX2lzX3ZhcG9yKCkpCisJCXJldHVybiAtRU5PREVWOworCithbHNvIG5vdGUgdGhhdCB0aGUgbWFjaF9pc19ib2FyZG5hbWUoKSBjaGVjayB3aWxsIGJlIGltcGxpY2l0bHkgZm9yY2VkIHRvCitsb3dlcmNhc2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGZhY3QgdGhhdCB0aGUgbWFjaC10eXBlcyBlbnRyaWVzIGFyZSBhbGwKK3VwcGVyY2FzZS4gWW91IGNhbiByZWFkIHRoZSBzY3JpcHQgaWYgeW91IHJlYWxseSBjYXJlLCBidXQgaXQncyBwcmV0dHkgdWdseSwKK3NvIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGRvIHRoYXQuCisKK05vdyBhbGwgdGhhdCdzIGxlZnQgdG8gZG8gaXMgcHJvdmlkaW5nIGEgZGVmY29uZmlnIGZvciB5b3VyIG5ldyBib2FyZC4gVGhpcword2F5LCBvdGhlciBwZW9wbGUgd2hvIGVuZCB1cCB3aXRoIHRoaXMgYm9hcmQgY2FuIHNpbXBseSB1c2UgdGhpcyBjb25maWcKK2ZvciByZWZlcmVuY2UgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZ3Vlc3Mgd2hhdCBzZXR0aW5ncyBhcmUgc3VwcG9zZWQgdG8gYmUKK3VzZWQgb24gaXQuCisKK0Fsc28sIGFzIHNvb24gYXMgeW91IGhhdmUgY29waWVkIG92ZXIgYSBzYW1wbGUgLmNvbmZpZyBmb3IgeW91ciBuZXcgYm9hcmQKKyhhc3N1bWUgYXJjaC9zaC9jb25maWdzL3ZhcG9yX2RlZmNvbmZpZyksIHlvdSBjYW4gYWxzbyB1c2UgdGhpcyBkaXJlY3RseSBhcyBhCitidWlsZCB0YXJnZXQsIGFuZCBpdCB3aWxsIGJlIGltcGxpY2l0bHkgbGlzdGVkIGFzIHN1Y2ggaW4gdGhlIGhlbHAgdGV4dC4KKworTG9va2luZyBhdCB0aGUgJ21ha2UgaGVscCcgb3V0cHV0LCB5b3Ugc2hvdWxkIG5vdyBzZWUgc29tZXRoaW5nIGxpa2U6CisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyB0YXJnZXRzIChzaCk6CisgIHpJbWFnZSAgICAgICAgICAgICAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgKGFyY2gvc2gvYm9vdC96SW1hZ2UpCisgIGFkeF9kZWZjb25maWcgICAgICAgICAgIC0gQnVpbGQgZm9yIGFkeAorICBjcXJlZWtfZGVmY29uZmlnICAgICAgICAtIEJ1aWxkIGZvciBjcXJlZWsKKyAgZHJlYW1jYXN0X2RlZmNvbmZpZyAgICAgLSBCdWlsZCBmb3IgZHJlYW1jYXN0CisuLi4KKyAgdmFwb3JfZGVmY29uZmlnICAgICAgICAgLSBCdWlsZCBmb3IgdmFwb3IKKword2hpY2ggdGhlbiBhbGxvd3MgeW91IHRvIGRvOgorCiskIG1ha2UgQVJDSD1zaCBDUk9TU19DT01QSUxFPXNoNC1saW51eC0gdmFwb3JfZGVmY29uZmlnIHZtbGludXgKKword2hpY2ggd2lsbCBpbiB0dXJuIGNvcHkgdGhlIGRlZmNvbmZpZyBmb3IgdGhpcyBib2FyZCwgcnVuIGl0IHRocm91Z2gKK29sZGNvbmZpZyAocHJvbXB0aW5nIHlvdSBmb3IgYW55IG5ldyBvcHRpb25zIHNpbmNlIHRoZSB0aW1lIG9mIGNyZWF0aW9uKSwKK2FuZCBzdGFydCB5b3Ugb24geW91ciB3YXkgdG8gaGF2aW5nIGEgZnVuY3Rpb25hbCBrZXJuZWwgZm9yIHlvdXIgbmV3Citib2FyZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zbWFydC1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9zbWFydC1jb25maWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YmVkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NtYXJ0LWNvbmZpZy50eHQKQEAgLTAsMCArMSwxMDIgQEAKK1NtYXJ0IENPTkZJR18qIERlcGVuZGVuY2llcworMSBBdWd1c3QgMTk5OQorCitNaWNoYWVsIENoYXN0YWluICAgPG1lY0BzaG91dC5uZXQ+CitXZXJuZXIgQWxtZXNiZXJnZXIgPGFsbWVzYmVyQGxyYy5kaS5lcGZsLmNoPgorTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AbWlyYS5pc2RuLmNzLnR1LWJlcmxpbi5kZT4KKworSGVyZSBpcyB0aGUgcHJvYmxlbToKKworICAgIFN1cHBvc2UgdGhhdCBkcml2ZXJzL25ldC9mb28uYyBoYXMgdGhlIGZvbGxvd2luZyBsaW5lczoKKworCSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworCS4uLgorCisJI2lmZGVmIENPTkZJR19GT09fQVVUT0ZST0IKKwkgICAgLyogQ29kZSBmb3IgYXV0by1mcm9iYmluZyAqLworCSNlbHNlCisJICAgIC8qIE1hbnVhbCBmcm9iYmluZyBvbmx5ICovCisJI2VuZGlmCisKKwkuLi4KKworCSNpZmRlZiBDT05GSUdfRk9PX01PREVMX1RXTworCSAgICAvKiBDb2RlIGZvciBtb2RlbCB0d28gKi8KKwkjZW5kaWYKKworICAgIE5vdyBzdXBwb3NlIHRoZSB1c2VyICh0aGUgcGVyc29uIGJ1aWxkaW5nIGtlcm5lbHMpIHJlY29uZmlndXJlcyB0aGUKKyAgICBrZXJuZWwgdG8gY2hhbmdlIHNvbWUgdW5yZWxhdGVkIHNldHRpbmcuICBUaGlzIHdpbGwgcmVnZW5lcmF0ZSB0aGUKKyAgICBmaWxlIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCwgd2hpY2ggd2lsbCBjYXVzZSBpbmNsdWRlL2xpbnV4L2NvbmZpZy5oCisgICAgdG8gYmUgb3V0IG9mIGRhdGUsIHdoaWNoIHdpbGwgY2F1c2UgZHJpdmVycy9uZXQvZm9vLmMgdG8gYmUgcmVjb21waWxlZC4KKworICAgIE1vc3Qga2VybmVsIHNvdXJjZXMsIHBlcmhhcHMgODAlIG9mIHRoZW0sIGhhdmUgYXQgbGVhc3Qgb25lIENPTkZJR18qCisgICAgZGVwZW5kZW5jeSBzb21ld2hlcmUuICBTbyBjaGFuZ2luZyBfYW55XyBDT05GSUdfKiBzZXR0aW5nIHJlcXVpcmVzCisgICAgYWxtb3N0IF9hbGxfIG9mIHRoZSBrZXJuZWwgdG8gYmUgcmVjb21waWxlZC4KKworSGVyZSBpcyB0aGUgc29sdXRpb246CisKKyAgICBXZSd2ZSBtYWRlIHRoZSBkZXBlbmRlbmN5IGdlbmVyYXRvciwgbWtkZXAuYywgc21hcnRlci4gIEluc3RlYWQgb2YKKyAgICBnZW5lcmF0aW5nIHRoaXMgZGVwZW5kZW5jeToKKworCWRyaXZlcnMvbmV0L2Zvby5jOiBpbmNsdWRlL2xpbnV4L2NvbmZpZy5oCisKKyAgICBJdCBub3cgZ2VuZXJhdGVzIHRoZXNlIGRlcGVuZGVuY2llczoKKworCWRyaXZlcnMvbmV0L2Zvby5jOiBcCisJICAgIGluY2x1ZGUvY29uZmlnL2Zvby9hdXRvZnJvYi5oIFwKKwkgICAgaW5jbHVkZS9jb25maWcvZm9vL21vZGVsL3R3by5oCisKKyAgICBTbyBkcml2ZXJzL25ldC9mb28uYyBkZXBlbmRzIG9ubHkgb24gdGhlIENPTkZJR18qIGxpbmVzIHRoYXQKKyAgICBpdCBhY3R1YWxseSB1c2VzLgorCisgICAgQSBuZXcgcHJvZ3JhbSwgc3BsaXQtaW5jbHVkZS5jLCBydW5zIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICBjb21waWxhdGlvbiAobWFrZSBiekltYWdlIG9yIG1ha2UgekltYWdlKS4gIHNwbGl0LWluY2x1ZGUgcmVhZHMKKyAgICBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmggYW5kIHVwZGF0ZXMgdGhlIGluY2x1ZGUvY29uZmlnLyB0cmVlLAorICAgIHdyaXRpbmcgb25lIGZpbGUgcGVyIG9wdGlvbi4gIEl0IHVwZGF0ZXMgb25seSB0aGUgZmlsZXMgZm9yIG9wdGlvbnMKKyAgICB0aGF0IGhhdmUgY2hhbmdlZC4KKworICAgIG1rZGVwLmMgbm8gbG9uZ2VyIGdlbmVyYXRlcyB3YXJuaW5nIG1lc3NhZ2VzIGZvciBtaXNzaW5nIG9yIHVubmVlZGVkCisgICAgPGxpbnV4L2NvbmZpZy5oPiBsaW5lcy4gIFRoZSBuZXcgdG9wLWxldmVsIHRhcmdldCAnbWFrZSBjaGVja2NvbmZpZycKKyAgICBjaGVja3MgZm9yIHRoZXNlIHByb2JsZW1zLgorCitGbGFnIERlcGVuZGVuY2llcworCisgICAgTWFydGluIFZvbiBMb2V3aXMgY29udHJpYnV0ZWQgYW5vdGhlciBmZWF0dXJlIHRvIHRoaXMgcGF0Y2g6CisgICAgJ2ZsYWcgZGVwZW5kZW5jaWVzJy4gIFRoZSBpZGVhIGlzIHRoYXQgYSAubyBmaWxlIGRlcGVuZHMgb24KKyAgICB0aGUgY29tcGlsYXRpb24gZmxhZ3MgdXNlZCB0byBidWlsZCBpdC4gIFRoZSBmaWxlIGZvby5vIGhhcworICAgIGl0cyBmbGFncyBzdG9yZWQgaW4gLmZsYWdzLmZvby5vLgorCisgICAgU3VwcG9zZSB0aGUgdXNlciBjaGFuZ2VzIHRoZSBmb28gZHJpdmVyIGZyb20gcmVzaWRlbnQgdG8gbW9kdWxhci4KKyAgICAnbWFrZScgd2lsbCBub3RpY2UgdGhhdCB0aGUgY3VycmVudCBmb28ubyB3YXMgbm90IGNvbXBpbGVkIHdpdGgKKyAgICAtRE1PRFVMRSBhbmQgd2lsbCByZWNvbXBpbGUgZm9vLmMuCisKKyAgICBBbGwgLm8gZmlsZXMgbWFkZSBmcm9tIEMgc291cmNlIGhhdmUgZmxhZyBkZXBlbmRlbmNpZXMuICBTbyBkbyAubworICAgIGZpbGVzIG1hZGUgd2l0aCBsZCwgYW5kIC5hIGZpbGVzIG1hZGUgd2l0aCBhci4gIEhvd2V2ZXIsIC5vIGZpbGVzCisgICAgbWFkZSBmcm9tIGFzc2VtYmx5IHNvdXJjZSBkbyBub3QgaGF2ZSBmbGFnIGRlcGVuZGVuY2llcyAobm9ib2R5CisgICAgbmVlZHMgdGhpcyB5ZXQsIGJ1dCBpdCB3b3VsZCBiZSBnb29kIHRvIGZpeCkuCisKK1Blci1zb3VyY2UtZmlsZSBGbGFncworCisgICAgRmxhZyBkZXBlbmRlbmNpZXMgYWxzbyB3b3JrIHdpdGggcGVyLXNvdXJjZS1maWxlIGZsYWdzLgorICAgIFlvdSBjYW4gc3BlY2lmeSBjb21waWxhdGlvbiBmbGFncyBmb3IgaW5kaXZpZHVhbCBzb3VyY2UgZmlsZXMKKyAgICBsaWtlIHRoaXM6CisKKwlDRkxBR1NfZm9vLm8gPSAtRFNQRUNJQUxfRk9PX0RFRklORQorCisgICAgVGhpcyBoZWxwcyBjbGVhbiB1cCBkcml2ZXJzL25ldC9NYWtlZmlsZSwgZHJpdmVycy9zY3NpL01ha2VmaWxlLAorICAgIGFuZCBzZXZlcmFsIG90aGVyIE1ha2VmaWxlcy4KKworQ3JlZGl0CisKKyAgICBXZXJuZXIgQWxtZXNiZXJnZXIgaGFkIHRoZSBvcmlnaW5hbCBpZGVhIGFuZCB3cm90ZSB0aGUgZmlyc3QKKyAgICB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2guCisgICAgCisgICAgTWljaGFlbCBDaGFzdGFpbiBwaWNrZWQgaXQgdXAgYW5kIGNvbnRpbnVlZCBkZXZlbG9wbWVudC4gIEhlIGlzCisgICAgbm93IHRoZSBwcmluY2lwYWwgYXV0aG9yIGFuZCBtYWludGFpbmVyLiAgUGxlYXNlIHJlcG9ydCBhbnkgYnVncworICAgIHRvIGhpbS4KKworICAgIE1hcnRpbiB2b24gTG9ld2lzIHdyb3RlIGZsYWcgZGVwZW5kZW5jaWVzLCB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucworICAgIGJ5IE1pY2hhZWwgQ2hhc3RhaW4uCisKKyAgICBUaGFua3MgdG8gYWxsIG9mIHRoZSBiZXRhIHRlc3RlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NtcC50eHQgYi9Eb2N1bWVudGF0aW9uL3NtcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmYzUwYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc21wLnR4dApAQCAtMCwwICsxLDIyIEBACitUbyBzZXQgdXAgU01QCisKK0NvbmZpZ3VyZSB0aGUga2VybmVsIGFuZCBhbnN3ZXIgWSB0byBDT05GSUdfU01QLgorCitJZiB5b3UgYXJlIHVzaW5nIExJTE8sIGl0IGlzIGhhbmR5IHRvIGhhdmUgYm90aCBTTVAgYW5kIG5vbi1TTVAKK2tlcm5lbCBpbWFnZXMgb24gaGFuZC4gRWRpdCAvZXRjL2xpbG8uY29uZiB0byBjcmVhdGUgYW4gZW50cnkKK2ZvciBhbm90aGVyIGtlcm5lbCBpbWFnZSBjYWxsZWQgImxpbnV4LXNtcCIgb3Igc29tZXRoaW5nLgorCitUaGUgbmV4dCB0aW1lIHlvdSBjb21waWxlIHRoZSBrZXJuZWwsIHdoZW4gcnVubmluZyBhIFNNUCBrZXJuZWwsCitlZGl0IGxpbnV4L01ha2VmaWxlIGFuZCBjaGFuZ2UgIk1BS0U9bWFrZSIgdG8gIk1BS0U9bWFrZSAtak4iCisod2hlcmUgTiA9IG51bWJlciBvZiBDUFUgKyAxLCBvciBpZiB5b3UgaGF2ZSB0b25zIG9mIG1lbW9yeS9zd2FwCisgeW91IGNhbiBqdXN0IHVzZSAiLWoiIHdpdGhvdXQgYSBudW1iZXIpLiBGZWVsIGZyZWUgdG8gZXhwZXJpbWVudAord2l0aCB0aGlzIG9uZS4KKworT2YgY291cnNlIHlvdSBzaG91bGQgdGltZSBob3cgbG9uZyBlYWNoIGJ1aWxkIHRha2VzIDotKQorRXhhbXBsZToKKyAgIG1ha2UgY29uZmlnCisgICB0aW1lIC12IHNoIC1jICdtYWtlIGNsZWFuIGluc3RhbGwgbW9kdWxlcyBtb2R1bGVzX2luc3RhbGwnCisKK0lmIHlvdSBhcmUgdXNpbmcgc29tZSBDb21wYXEgTVAgY29tcGxpYW50IG1hY2hpbmVzIHlvdSB3aWxsIG5lZWQgdG8gc2V0Cit0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiB0aGUgQklPUyBzZXR0aW5ncyB0byAiVW5peHdhcmUiIC0gZG9uJ3QgYXNrIG1lCit3aHkgQ29tcGFxcyBkb24ndCB3b3JrIG90aGVyd2lzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc29ueXBpLnR4dCBiL0RvY3VtZW50YXRpb24vc29ueXBpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNiMjQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb255cGkudHh0CkBAIC0wLDAgKzEsMTQyIEBACitTb255IFByb2dyYW1tYWJsZSBJL08gQ29udHJvbCBEZXZpY2UgRHJpdmVyIFJlYWRtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgorCUNvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY/R2ZSA8d3d3LmFsY292ZS5jb20+CisJQ29weXJpZ2h0IChDKSAyMDAxIE1pY2hhZWwgQXNobGV5IDxtLmFzaGxleUB1bnN3LmVkdS5hdT4KKwlDb3B5cmlnaHQgKEMpIDIwMDEgSnVuaWNoaSBNb3JpdGEgPGp1bjFtQG1hcnMuZHRpLm5lLmpwPgorCUNvcHlyaWdodCAoQykgMjAwMCBUYWtheWEgS2luam8gPHQta2luam9AdGM0LnNvLW5ldC5uZS5qcD4KKwlDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmV3IFRyaWRnZWxsIDx0cmlkZ2VAc2FtYmEub3JnPgorCitUaGlzIGRyaXZlciBlbmFibGVzIGFjY2VzcyB0byB0aGUgU29ueSBQcm9ncmFtbWFibGUgSS9PIENvbnRyb2wgRGV2aWNlIHdoaWNoCitjYW4gYmUgZm91bmQgaW4gbWFueSBTb255IFZhaW8gbGFwdG9wcy4gU29tZSBuZXdlciBTb255IGxhcHRvcHMgKHNlZW1zIHRvIGJlCitsaW1pdGVkIHRvIG5ldyBGWCBzZXJpZXMgbGFwdG9wcywgYXQgbGVhc3QgdGhlIEZYNTAxIGFuZCB0aGUgRlg3MDIpIGxhY2sgYQorc29ueXBpIGRldmljZSBhbmQgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIGJ5IHRoaXMgZHJpdmVyLgorCitJdCB3aWxsIGdpdmUgYWNjZXNzICh0aHJvdWdoIGEgdXNlciBzcGFjZSB1dGlsaXR5KSB0byBzb21lIGV2ZW50cyB0aG9zZSBsYXB0b3BzCitnZW5lcmF0ZSwgbGlrZToKKwktIGpvZ2RpYWwgZXZlbnRzICh0aGUgc21hbGwgd2hlZWwgb24gdGhlIHNpZGUgb2YgVmFpb3MpCisJLSBjYXB0dXJlIGJ1dHRvbiBldmVudHMgKG9ubHkgb24gVmFpbyBQaWN0dXJlYm9vayBzZXJpZXMpCisJLSBGbiBrZXlzCisJLSBibHVldG9vdGggYnV0dG9uIChvbmx5IG9uIEMxVlIgbW9kZWwpCisJLSBwcm9ncmFtbWFibGUga2V5cywgYmFjaywgaGVscCwgem9vbSwgdGh1bWJwaHJhc2UgYnV0dG9ucywgZXRjLgorCSAgKHdoZW4gYXZhaWxhYmxlKQorCitUaG9zZSBldmVudHMgKHNlZSBsaW51eC9zb255cGkuaCkgY2FuIGJlIHBvbGxlZCB1c2luZyB0aGUgY2hhcmFjdGVyIGRldmljZSBub2RlCisvZGV2L3NvbnlwaSAobWFqb3IgMTAsIG1pbm9yIGF1dG8gYWxsb2NhdGVkIG9yIHNwZWNpZmllZCBhcyBhIG9wdGlvbikuCitBIHNpbXBsZSBkYWVtb24gd2hpY2ggdHJhbnNsYXRlcyB0aGUgam9nZGlhbCBtb3ZlbWVudHMgaW50byBtb3VzZSB3aGVlbCBldmVudHMKK2NhbiBiZSBkb3dubG9hZGVkIGF0OiA8aHR0cDovL3BvcGllcy5uZXQvc29ueXBpLz4KKworQW5vdGhlciBvcHRpb24gdG8gaW50ZXJjZXB0IHRoZSBldmVudHMgaXMgdG8gZ2V0IHRoZW0gZGlyZWN0bHkgdGhyb3VnaCB0aGUKK2lucHV0IGxheWVyLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBhbHNvIHNvbWUgaW9jdGwgY29tbWFuZHMgZm9yIHNldHRpbmcgdGhlIExDRCBzY3JlZW4KK2JyaWdodG5lc3MgYW5kIHF1ZXJ5aW5nIHRoZSBiYXR0ZXJpZXMgY2hhcmdlIGluZm9ybWF0aW9uIChzb21lIG1vcmUKK2NvbW1hbmRzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlKS4KKworVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBzZXQgdGhlIGNhbWVyYSBjb250cm9scyBvbiBQaWN0dXJlYm9vayBzZXJpZXMKKyhicmlnaHRuZXNzLCBjb250cmFzdCBldGMpLCBhbmQgaXMgdXNlZCBieSB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUKK01vdGlvbiBFeWUgY2FtZXJhLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZHJpdmVyIHdhcyBjcmVhdGVkIGJ5IHJldmVyc2UgZW5naW5lZXJpbmcgdGhlIFdpbmRvd3MKK2RyaXZlciBhbmQgdGhlIEFDUEkgQklPUywgYmVjYXVzZSBTb255IGRvZXNuJ3QgYWdyZWUgdG8gcmVsZWFzZSBhbnkgcHJvZ3JhbW1pbmcKK3NwZWNzIGZvciBpdHMgbGFwdG9wcy4gSWYgc29tZW9uZSBjb252aW5jZXMgdGhlbSB0byBkbyBzbywgZHJvcCBtZSBhIG5vdGUuCisKK0RyaXZlciBvcHRpb25zOgorLS0tLS0tLS0tLS0tLS0tCisKK1NldmVyYWwgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBzb255cGkgZHJpdmVyIHVzaW5nIHRoZSBzdGFuZGFyZAorbW9kdWxlIGFyZ3VtZW50IHN5bnRheCAoPHBhcmFtPj08dmFsdWU+IHdoZW4gcGFzc2luZyB0aGUgb3B0aW9uIHRvIHRoZQorbW9kdWxlIG9yIHNvbnlwaS48cGFyYW0+PTx2YWx1ZT4gb24gdGhlIGtlcm5lbCBib290IGxpbmUgd2hlbiBzb255cGkgaXMKK3N0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCkuIFRob3NlIG9wdGlvbnMgYXJlOgorCisJbWlub3I6IAkJbWlub3IgbnVtYmVyIG9mIHRoZSBtaXNjIGRldmljZSAvZGV2L3NvbnlwaSwKKwkJCWRlZmF1bHQgaXMgLTEgKGF1dG9tYXRpYyBhbGxvY2F0aW9uLCBzZWUgL3Byb2MvbWlzYworCQkJb3Iga2VybmVsIGxvZ3MpCisKKwljYW1lcmE6CQlpZiB5b3UgaGF2ZSBhIFBpY3R1cmVCb29rIHNlcmllcyBWYWlvICh3aXRoIHRoZQorCQkJaW50ZWdyYXRlZCBNb3Rpb25FeWUgY2FtZXJhKSwgc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDEKKwkJCWluIG9yZGVyIHRvIGxldCB0aGUgZHJpdmVyIGFjY2VzcyB0byB0aGUgY2FtZXJhCisKKwlmbmtleWluaXQ6CW9uIHNvbWUgVmFpb3MgKEMxVkUsIEMxVlIgZXRjKSwgdGhlIEZuIGtleSBldmVudHMgZG9uJ3QKKwkJCWdldCBlbmFibGVkIHVubGVzcyB5b3Ugc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDEuCisJCQlEbyBub3QgdXNlIHRoaXMgb3B0aW9uIHVubGVzcyBpdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeSwKKwkJCXNvbWUgVmFpbyBtb2RlbHMgZG9uJ3QgZGVhbCB3ZWxsIHdpdGggdGhpcyBvcHRpb24uCisJCQlUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUga2VybmVsIGlzCisJCQljb21waWxlZCB3aXRob3V0IEFDUEkgc3VwcG9ydCAoc2luY2UgaXQgY29uZmxpY3RzCisJCQl3aXRoIGl0IGFuZCBpdCBzaG91bGRuJ3QgYmUgcmVxdWlyZWQgYW55d2F5IGlmCisJCQlBQ1BJIGlzIGFscmVhZHkgZW5hYmxlZCkuCisKKwl2ZXJib3NlOglzZXQgdG8gMSB0byBwcmludCB1bmtub3duIGV2ZW50cyByZWNlaXZlZCBmcm9tIHRoZQorCQkJc29ueXBpIGRldmljZS4KKwkJCXNldCB0byAyIHRvIHByaW50IGFsbCBldmVudHMgcmVjZWl2ZWQgZnJvbSB0aGUKKwkJCXNvbnlwaSBkZXZpY2UuCisKKwljb21wYXQ6CQl1c2VzIHNvbWUgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBlbmFibGluZyB0aGUgc29ueXBpCisJCQlldmVudHMuIElmIHRoZSBkcml2ZXIgd29ya2VkIGZvciB5b3UgaW4gdGhlIHBhc3QKKwkJCShwcmlvciB0byB2ZXJzaW9uIDEuNSkgYW5kIGRvZXMgbm90IHdvcmsgYW55bW9yZSwKKwkJCWFkZCB0aGlzIG9wdGlvbiBhbmQgcmVwb3J0IHRvIHRoZSBhdXRob3IuCisKKwltYXNrOgkJZXZlbnQgbWFzayB0ZWxsaW5nIHRoZSBkcml2ZXIgd2hhdCBldmVudHMgd2lsbCBiZQorCQkJcmVwb3J0ZWQgdG8gdGhlIHVzZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvcgorCQkJc29tZSBWYWlvIG1vZGVscyB3aGVyZSB0aGUgaGFyZHdhcmUgcmV1c2VzIHZhbHVlcworCQkJdXNlZCBpbiBvdGhlciBWYWlvIG1vZGVscyAobGlrZSB0aGUgRlggc2VyaWVzIHdobyBkb2VzCisJCQlub3QgaGF2ZSBhIGpvZ2RpYWwgYnV0IHJldXNlcyB0aGUgam9nZGlhbCBldmVudHMgZm9yCisJCQlwcm9ncmFtbWFibGUga2V5cyBldmVudHMpLiBUaGUgZGVmYXVsdCBldmVudCBtYXNrIGlzCisJCQlzZXQgdG8gMHhmZmZmZmZmZiwgbWVhbmluZyB0aGF0IGFsbCBwb3NzaWJsZSBldmVudHMKKwkJCXdpbGwgYmUgdHJpZWQuIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgYml0cyB0bworCQkJY29uc3RydWN0IHlvdXIgb3duIGV2ZW50IG1hc2sgKGZyb20KKwkJCWRyaXZlcnMvY2hhci9zb255cGkuaCk6CisJCQkJU09OWVBJX0pPR0dFUl9NQVNLIAkJMHgwMDAxCisJCQkJU09OWVBJX0NBUFRVUkVfTUFTSyAJCTB4MDAwMgorCQkJCVNPTllQSV9GTktFWV9NQVNLIAkJMHgwMDA0CisJCQkJU09OWVBJX0JMVUVUT09USF9NQVNLIAkJMHgwMDA4CisJCQkJU09OWVBJX1BLRVlfTUFTSyAJCTB4MDAxMAorCQkJCVNPTllQSV9CQUNLX01BU0sgCQkweDAwMjAKKwkJCQlTT05ZUElfSEVMUF9NQVNLIAkJMHgwMDQwCisJCQkJU09OWVBJX0xJRF9NQVNLIAkJMHgwMDgwCisJCQkJU09OWVBJX1pPT01fTUFTSyAJCTB4MDEwMAorCQkJCVNPTllQSV9USFVNQlBIUkFTRV9NQVNLIAkweDAyMDAKKwkJCQlTT05ZUElfTUVZRV9NQVNLCQkweDA0MDAKKwkJCQlTT05ZUElfTUVNT1JZU1RJQ0tfTUFTSwkJMHgwODAwCisJCQkJU09OWVBJX0JBVFRFUllfTUFTSwkJMHgxMDAwCisKKwl1c2VpbnB1dDoJaWYgc2V0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCkgdHdvIGlucHV0IGRldmljZXMgYXJlCisJCQljcmVhdGVkLCBvbmUgd2hpY2ggaW50ZXJwcmV0cyB0aGUgam9nZGlhbCBldmVudHMgYXMKKwkJCW1vdXNlIGV2ZW50cywgdGhlIG90aGVyIG9uZSB3aGljaCBhY3RzIGxpa2UgYQorCQkJa2V5Ym9hcmQgcmVwb3J0aW5nIHRoZSBwcmVzc2luZyBvZiB0aGUgc3BlY2lhbCBrZXlzLgorCitNb2R1bGUgdXNlOgorLS0tLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gYXV0b21hdGljYWxseSBsb2FkIHRoZSBzb255cGkgbW9kdWxlIG9uIHVzZSwgeW91IGNhbiBwdXQgdGhvc2UKK2xpbmVzIGluIHlvdXIgL2V0Yy9tb2Rwcm9iZS5jb25mIGZpbGU6CisKKwlhbGlhcyBjaGFyLW1ham9yLTEwLTI1MCBzb255cGkKKwlvcHRpb25zIHNvbnlwaSBtaW5vcj0yNTAKKworVGhpcyBzdXBwb3NlcyB0aGUgdXNlIG9mIG1pbm9yIDI1MCBmb3IgdGhlIHNvbnlwaSBkZXZpY2U6CisKKwkjIG1rbm9kIC9kZXYvc29ueXBpIGMgMTAgMjUwCisKK0J1Z3M6CistLS0tLQorCisJLSBzZXZlcmFsIHVzZXJzIHJlcG9ydGVkIHRoYXQgdGhpcyBkcml2ZXIgZGlzYWJsZXMgdGhlIEJJT1MtbWFuYWdlZAorCSAgRm4ta2V5cyB3aGljaCBwdXQgdGhlIGxhcHRvcCBpbiBzbGVlcGluZyBzdGF0ZSwgb3Igc3dpdGNoIHRoZQorCSAgZXh0ZXJuYWwgbW9uaXRvciBvbi9vZmYuIFRoZXJlIGlzIG5vIHdvcmthcm91bmQgeWV0LCBzaW5jZSB0aGlzCisJICBkcml2ZXIgZGlzYWJsZXMgYWxsIEFQTSBtYW5hZ2VtZW50IGZvciB0aG9zZSBrZXlzLCBieSBlbmFibGluZyB0aGUKKwkgIEFDUEkgbWFuYWdlbWVudCAoYW5kIHRoZSBBQ1BJIGNvcmUgc3R1ZmYgaXMgbm90IGNvbXBsZXRlIHlldCkuIElmCisJICB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UgbGFwdG9wcyB3aXRoIHdvcmtpbmcgRm4ga2V5cyBhbmQgd2FudCB0bworCSAgY29udGludWUgdG8gdXNlIHRoZW0sIGRvbid0IHVzZSB0aGlzIGRyaXZlci4KKworCS0gc29tZSB1c2VycyByZXBvcnRlZCB0aGF0IHRoZSBsYXB0b3Agc3BlZWQgaXMgbG93ZXIgKGRocnlzdG9uZQorCSAgdGVzdGVkKSB3aGVuIHVzaW5nIHRoZSBkcml2ZXIgd2l0aCB0aGUgZm5rZXlpbml0IHBhcmFtZXRlci4gSSBjYW5ub3QKKwkgIHJlcHJvZHVjZSBpdCBvbiBteSBsYXB0b3AgYW5kIG5vdCBhbGwgdXNlcnMgaGF2ZSB0aGlzIHByb2JsZW0uCisJICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgZm5rZXlpbml0IHBhcmFtZXRlciBlbmFibGVzIHRoZSBBQ1BJCisJICBtb2RlIChidXQgd2l0aG91dCBhZGRpdGlvbmFsIEFDUEkgY29udHJvbCwgbGlrZSBwcm9jZXNzb3IKKwkgIHNwZWVkIGhhbmRsaW5nIGV0YykuIFVzZSBBQ1BJIGluc3RlYWQgb2YgQVBNIGlmIGl0IHdvcmtzIG9uIHlvdXIKKwkgIGxhcHRvcC4KKworCS0gc2luY2UgYWxsIGRldmVsb3BtZW50IHdhcyBkb25lIGJ5IHJldmVyc2UgZW5naW5lZXJpbmcsIHRoZXJlIGlzCisJICBfYWJzb2x1dGVseSBubyBndWFyYW50ZWVfIHRoYXQgdGhpcyBkcml2ZXIgd2lsbCBub3QgY3Jhc2ggeW91cgorCSAgbGFwdG9wLiBQZXJtYW5lbnRseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlZjA0OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC0wLDAgKzEsMTUwNSBAQAorCisJCUFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZSAtIERyaXZlcgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgICBDb25maWd1cmF0aW9uIGd1aWRlCisKKworS2VybmVsIENvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09CisKK1RvIGVuYWJsZSBBTFNBIHN1cHBvcnQgeW91IG5lZWQgYXQgbGVhc3QgdG8gYnVpbGQgdGhlIGtlcm5lbCB3aXRoCitwcmltYXJ5IHNvdW5kIGNhcmQgc3VwcG9ydCAoQ09ORklHX1NPVU5EKS4gIFNpbmNlIEFMU0EgY2FuIGVtdWxhdGUgT1NTLAoreW91IGRvbid0IGhhdmUgdG8gY2hvb3NlIGFueSBvZiB0aGUgT1NTIG1vZHVsZXMuCisKK0VuYWJsZSAiT1NTIEFQSSBlbXVsYXRpb24iIChDT05GSUdfU05EX09TU0VNVUwpIGFuZCBib3RoIE9TUyBtaXhlciBhbmQKK1BDTSBzdXBwb3J0cyBpZiB5b3Ugd2FudCB0byBydW4gT1NTIGFwcGxpY2F0aW9ucyB3aXRoIEFMU0EuCisKK0lmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIFdhdmVUYWJsZSBmdW5jdGlvbmFsaXR5IG9uIGNhcmRzIHN1Y2ggYXMKK1NCIExpdmUhIHRoZW4geW91IG5lZWQgdG8gZW5hYmxlICJTZXF1ZW5jZXIgc3VwcG9ydCIKKyhDT05GSUdfU05EX1NFUVVFTkNFUikuCisKK1RvIG1ha2UgQUxTQSBkZWJ1ZyBtZXNzYWdlcyBtb3JlIHZlcmJvc2UsIGVuYWJsZSB0aGUgIlZlcmJvc2UgcHJpbnRrIgorYW5kICJEZWJ1ZyIgb3B0aW9ucy4gIFRvIGNoZWNrIGZvciBtZW1vcnkgbGVha3MsIHR1cm4gb24gIkRlYnVnIG1lbW9yeSIKK3Rvby4gICJEZWJ1ZyBkZXRlY3Rpb24iIHdpbGwgYWRkIGNoZWNrcyBmb3IgdGhlIGRldGVjdGlvbiBvZiBjYXJkcy4KKworUGxlYXNlIG5vdGUgdGhhdCBhbGwgdGhlIEFMU0EgSVNBIGRyaXZlcnMgc3VwcG9ydCB0aGUgTGludXggaXNhcG5wIEFQSQorKGlmIHRoZSBjYXJkIHN1cHBvcnRzIElTQSBQblApLiAgWW91IGRvbid0IG5lZWQgdG8gY29uZmlndXJlIHRoZSBjYXJkcwordXNpbmcgaXNhcG5wdG9vbHMuCisKKworQ3JlYXRpbmcgQUxTQSBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkZXBlbmRzIG9uIHlvdXIgZGlzdHJpYnV0aW9uLCBidXQgbm9ybWFsbHkgeW91IHVzZSB0aGUgL2Rldi9NQUtFREVWCitzY3JpcHQgdG8gY3JlYXRlIHRoZSBuZWNlc3NhcnkgZGV2aWNlIG5vZGVzLiAgT24gc29tZSBzeXN0ZW1zIHlvdSB1c2UgYQorc2NyaXB0IG5hbWVkICdzbmRkZXZpY2VzJy4KKworCitNb2R1bGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT0KKworVGhlIHVzZXIgY2FuIGxvYWQgbW9kdWxlcyB3aXRoIG9wdGlvbnMuIElmIHRoZSBtb2R1bGUgc3VwcG9ydHMgbW9yZSB0aGFuCitvbmUgY2FyZCBhbmQgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBjYXJkIG9mIHRoZSBzYW1lIHR5cGUgdGhlbiB5b3UgY2FuCitzcGVjaWZ5IG11bHRpcGxlIHZhbHVlcyBmb3IgdGhlIG9wdGlvbiBzZXBhcmF0ZWQgYnkgY29tbWFzLgorCitQcmlvciB0byB2ZXJzaW9uIDAuOS4wcmM0IG9wdGlvbnMgaGFkIGEgJ3NuZF8nIHByZWZpeC4gVGhpcyB3YXMgcmVtb3ZlZC4KKworICBNb2R1bGUgc25kCisgIC0tLS0tLS0tLS0KKworICAgIFRoZSBjb3JlIEFMU0EgbW9kdWxlLiAgSXQgaXMgdXNlZCBieSBhbGwgQUxTQSBjYXJkIGRyaXZlcnMuCisgICAgSXQgdGFrZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHdoaWNoIGhhdmUgZ2xvYmFsIGVmZmVjdHMuCisKKyAgICBtYWpvcgktIG1ham9yIG51bWJlciBmb3Igc291bmQgZHJpdmVyCisJCS0gRGVmYXVsdDogMTE2CisgICAgY2FyZHNfbGltaXQKKwkJLSBsaW1pdGluZyBjYXJkIGluZGV4IGZvciBhdXRvLWxvYWRpbmcgKDEtOCkKKwkJLSBEZWZhdWx0OiAxCisJCS0gRm9yIGF1dG8tbG9hZGluZyBtb3JlIHRoYW4gb25lIGNhcmQsIHNwZWNpZnkgdGhpcworCQkgIG9wdGlvbiB0b2dldGhlciB3aXRoIHNuZC1jYXJkLVggYWxpYXNlcy4KKyAgICBkZXZpY2VfbW9kZQorCQktIHBlcm1pc3Npb24gbWFzayBmb3IgZHluYW1pYyBzb3VuZCBkZXZpY2UgZmlsZXN5c3RlbQorCQktIFRoaXMgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBERVZGUyBpcyBlbmFibGVkCisJCS0gRGVmYXVsdDogMDY2NgorCQktIEUuZy46IGRldmljZV9tb2RlPTA2NjAKKworICAKKyAgTW9kdWxlIHNuZC1wY20tb3NzCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIFBDTSBPU1MgZW11bGF0aW9uIG1vZHVsZS4KKyAgICBUaGlzIG1vZHVsZSB0YWtlcyBvcHRpb25zIHdoaWNoIGNoYW5nZSB0aGUgbWFwcGluZyBvZiBkZXZpY2VzLgorCisgICAgZHNwX21hcAktIFBDTSBkZXZpY2UgbnVtYmVyIG1hcHMgYXNzaWduZWQgdG8gdGhlIDFzdCBPU1MgZGV2aWNlLgorCQktIERlZmF1bHQ6IDAKKyAgICBhZHNwX21hcAktIFBDTSBkZXZpY2UgbnVtYmVyIG1hcHMgYXNzaWduZWQgdG8gdGhlIDJzdCBPU1MgZGV2aWNlLgorCQktIERlZmF1bHQ6IDEKKyAgICBub25ibG9ja19vcGVuCisJCS0gRG9uJ3QgYmxvY2sgb3BlbmluZyBidXN5IFBDTSBkZXZpY2VzLgorCisgICAgRm9yIGV4YW1wbGUsIHdoZW4gZHNwX21hcD0yLCAvZGV2L2RzcCB3aWxsIGJlIG1hcHBlZCB0byBQQ00gIzIgb2YKKyAgICB0aGUgY2FyZCAjMC4gIFNpbWlsYXJseSwgd2hlbiBhZHNwX21hcD0wLCAvZGV2L2Fkc3Agd2lsbCBiZSBtYXBwZWQKKyAgICB0byBQQ00gIzAgb2YgdGhlIGNhcmQgIzAuCisgICAgRm9yIGNoYW5naW5nIHRoZSBzZWNvbmQgb3IgbGF0ZXIgY2FyZCwgc3BlY2lmeSB0aGUgb3B0aW9uIHdpdGgKKyAgICBjb21tYXMsIHN1Y2ggbGlrZSAiZHNwX21hcD0wLDEiLgorCisgICAgbm9uYmxvY2tfb3BlbiBvcHRpb24gaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBQQ00KKyAgICByZWdhcmRpbmcgb3BlbmluZyB0aGUgZGV2aWNlLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBub24temVybywKKyAgICBvcGVuaW5nIGEgYnVzeSBPU1MgUENNIGRldmljZSB3b24ndCBiZSBibG9ja2VkIGJ1dCByZXR1cm4KKyAgICBpbW1lZGlhdGVseSB3aXRoIEVBR0FJTiAoanVzdCBsaWtlIE9fTk9OQkxPQ0sgZmxhZykuCisgICAgCisgIE1vZHVsZSBzbmQtcmF3bWlkaQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgbW9kdWxlIHRha2VzIG9wdGlvbnMgd2hpY2ggY2hhbmdlIHRoZSBtYXBwaW5nIG9mIGRldmljZXMuCisgICAgc2ltaWxhciB0byB0aG9zZSBvZiB0aGUgc25kLXBjbS1vc3MgbW9kdWxlLgorCisgICAgbWlkaV9tYXAJLSBNSURJIGRldmljZSBudW1iZXIgbWFwcyBhc3NpZ25lZCB0byB0aGUgMXN0IE9TUyBkZXZpY2UuCisJCS0gRGVmYXVsdDogMAorICAgIGFtaWRpX21hcAktIE1JREkgZGV2aWNlIG51bWJlciBtYXBzIGFzc2lnbmVkIHRvIHRoZSAyc3QgT1NTIGRldmljZS4KKwkJLSBEZWZhdWx0OiAxCisKKyAgQ29tbW9uIHBhcmFtZXRlcnMgZm9yIHRvcCBzb3VuZCBjYXJkIG1vZHVsZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEVhY2ggb2YgdG9wIGxldmVsIHNvdW5kIGNhcmQgbW9kdWxlIHRha2VzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4KKworICAgIGluZGV4CS0gaW5kZXggKHNsb3QgIykgb2Ygc291bmQgY2FyZAorCQktIFZhbHVlczogMCB0aHJvdWdoIDcgb3IgbmVnYXRpdmUKKwkJLSBJZiBub25uZWdhdGl2ZSwgYXNzaWduIHRoYXQgaW5kZXggbnVtYmVyCisgICAgICAgICAgICAgICAgLSBpZiBuZWdhdGl2ZSwgaW50ZXJwcmV0IGFzIGEgYml0bWFzayBvZiBwZXJtaXNzaWJsZQorCQkgIGluZGljZXM7IHRoZSBmaXJzdCBmcmVlIHBlcm1pdHRlZCBpbmRleCBpcyBhc3NpZ25lZAorCQktIERlZmF1bHQ6IC0xCisgICAgaWQJCS0gY2FyZCBJRCAoaWRlbnRpZmllciBvciBuYW1lKQorCQktIENhbiBiZSB1cCB0byAxNSBjaGFyYWN0ZXJzIGxvbmcKKwkJLSBEZWZhdWx0OiB0aGUgY2FyZCB0eXBlCisJCS0gQSBkaXJlY3RvcnkgYnkgdGhpcyBuYW1lIGlzIGNyZWF0ZWQgdW5kZXIgL3Byb2MvYXNvdW5kLworCQkgIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcmQKKwkJLSBUaGlzIElEIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGluZGV4IG51bWJlciBpbgorCQkgIGlkZW50aWZ5aW5nIHRoZSBjYXJkCisgICAgZW5hYmxlICAJLSBlbmFibGUgY2FyZAorCQktIERlZmF1bHQ6IGVuYWJsZWQsIGZvciBQQ0kgYW5kIElTQSBQblAgY2FyZHMKKworICBNb2R1bGUgc25kLWFkMTgxNmEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEFuYWxvZyBEZXZpY2VzIEFEMTgxNkEvQUQxODE1IElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFEMTgxNkEgY2hpcCAoUG5QIHNldHVwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIFVBUlQgKFBuUCBzZXR1cCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBPUEwzIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIGZvciBBRDE4MTZBIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQUQxODE2QSBjaGlwIChQblAgc2V0dXApCisgICAgZG1hMgktIHNlY29uZCBETUEgIyBmb3IgQUQxODE2QSBjaGlwIChQblAgc2V0dXApCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgUG5QLgorICAgIAorICBNb2R1bGUgc25kLWFkMTg0OAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBRDE4NDgvQUQxODQ3L0NTNDI0OCBJU0EgY2hpcHMuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBBRDE4NDggY2hpcAorICAgIGlycQkJLSBJUlEgIyBmb3IgQUQxODQ4ICBjaGlwCisgICAgZG1hMQktIERNQSAjIGZvciBBRDE4NDggY2hpcCAoMCwxLDMpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3Byb2JlCisgICAgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlIG9wdGlvbmFsLgorICAgIAorICBNb2R1bGUgc25kLWFsaTU0NTEKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFMaSBNNTQ1MSBQQ0kgY2hpcC4KKworICAgIHBjbV9jaGFubmVscyAgICAtIE51bWJlciBvZiBoYXJkd2FyZSBjaGFubmVscyBhc3NpZ25lZCBmb3IgUENNCisgICAgc3BkaWYgICAgICAgICAgIC0gU3VwcG9ydCBTUERJRiBJL08KKyAgICAJCSAgICAtIERlZmF1bHQ6IGRpc2FibGVkCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtYWxzMTAwCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEF2YW5jZSBMb2dpYyBBTFMxMDAvQUxTMTIwIElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFMUzEwMCAoU0IxNikgY2hpcCAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgQUxTMTAwIChTQjE2KSBjaGlwIChQblAgc2V0dXApCisgICAgZG1hOAktIDgtYml0IERNQSAjIGZvciBBTFMxMDAgKFNCMTYpIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBkbWExNgktIDE2LWJpdCBETUEgIyBmb3IgQUxTMTAwIChTQjE2KSBjaGlwIChQblAgc2V0dXApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSAoUG5QIHNldHVwKQorICAgIGZtX3BvcnQJLSBwb3J0ICMgZm9yIE9QTDMgRk0gKFBuUCBzZXR1cCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1hbHM0MDAwCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBdmFuY2UgTG9naWMgQUxTNDAwMCBQQ0kgY2hpcC4KKworICAgIGpveXN0aWNrX3BvcnQgLSBwb3J0ICMgZm9yIGxlZ2FjeSBqb3lzdGljayBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICAwID0gZGlzYWJsZWQgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1hdGlpeHAKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQVRJIElYUCAxNTAvMjAwLzI1MCBBQzk3IGNvbnRyb2xsZXJzLgorCisgICAgYWM5N19jbG9jawkJLSBBQyc5NyBjbG9jayAoZGVmYWx1dCA9IDQ4MDAwKQorICAgIGFjOTdfcXVpcmsJCS0gQUMnOTcgd29ya2Fyb3VuZCBmb3Igc3RyYW5nZSBoYXJkd2FyZQorCQkJICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVsOHgwIG1vZHVsZSBmb3IgZGV0YWlscy4KKyAgICBzcGRpZl9hY2xpbmsJLSBTL1BESUYgdHJhbnNmZXIgb3ZlciBBQy1saW5rIChkZWZhdWx0ID0gMSkKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICBNb2R1bGUgc25kLWF0aWl4cC1tb2RlbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBBVEkgSVhQIDE1MC8yMDAvMjUwIEFDOTcgbW9kZW0gY29udHJvbGxlcnMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIE5vdGU6IFRoZSBkZWZhdWx0IGluZGV4IHZhbHVlIG9mIHRoaXMgbW9kdWxlIGlzIC0yLCBpLmUuIHRoZSBmaXJzdAorICAgICAgICAgIHNsb3QgaXMgZXhjbHVkZWQuCisKKyAgTW9kdWxlIHNuZC1hdTg4MTAsIHNuZC1hdTg4MjAsIHNuZC1hdTg4MzAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQXVyZWFsIFZvcnRleCwgVm9ydGV4MiBhbmQgQWR2YW50YWdlIGRldmljZS4KKworICAgIHBjaWZpeAktIENvbnRyb2wgUENJIHdvcmthcm91bmRzCisJCSAgMCA9IERpc2FibGUgYWxsIHdvcmthcm91bmRzCisJCSAgMSA9IEZvcmNlIHRoZSBQQ0kgbGF0ZW5jeSBvZiB0aGUgQXVyZWFsIGNhcmQgdG8gMHhmZgorCQkgIDIgPSBGb3JjZSB0aGUgRXh0ZW5kIFBDSSMyIEludGVybmFsIE1hc3RlciBmb3IgRWZmaWNpZW50CisJCSAgICAgIEhhbmRsaW5nIG9mIER1bW15IFJlcXVlc3RzIG9uIHRoZSBWSUEgS1QxMzMgQUdQIEJyaWRnZQorCQkgIDMgPSBGb3JjZSBib3RoIHNldHRpbmdzCisJCSAgMjU1ID0gQXV0b2RldGVjdCB3aGF0IGlzIHJlcXVpcmVkIChkZWZhdWx0KQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYWxsIEFEQiBQQ00gY2hhbm5lbHMsIGFjOTcgbWl4ZXIsIFNQRElGLCBoYXJkd2FyZQorICAgIEVRLCBtcHU0MDEsIGdhbWVwb3J0LiBBM0QgYW5kIHdhdmV0YWJsZSBzdXBwb3J0IGFyZSBzdGlsbCBpbiBkZXZlbG9wbWVudC4KKyAgICBEZXZlbG9wbWVudCBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyB3b3JrIGlzIGJlaW5nIGNvb3JkaW5hdGVkIGF0CisgICAgaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvb3BlbnZvcnRleC8KKyAgICBTUERJRiBvdXRwdXQgaGFzIGEgY29weSBvZiB0aGUgQUM5NyBjb2RlYyBvdXRwdXQsIHVubGVzcyB5b3UgdXNlIHRoZQorICAgICJzcGRpZiIgcGNtIGRldmljZSwgd2hpY2ggYWxsb3dzIHJhdyBkYXRhIHBhc3N0aHJ1LgorICAgIFRoZSBoYXJkd2FyZSBFUSBoYXJkd2FyZSBhbmQgU1BESUYgaXMgb25seSBwcmVzZW50IGluIHRoZSBWb3J0ZXgyIGFuZCAKKyAgICBBZHZhbnRhZ2UuCisKKyAgICBOb3RlOiBTb21lIEFMU0EgbWl4ZXIgYXBwbGljYWN0aW9ucyBkb24ndCBoYW5kbGUgdGhlIFNQRElGIHNhbXBsZXJhdGUgCisgICAgICAgICAgIGNvbnRyb2wgY29ycmVjdGx5LiBJZiB5b3UgaGF2ZSBwcm9ibGVtcyByZWdhcmRpbmcgdGhpcywgdHJ5CisgICAgICAgICAgIGFub3RoZXIgQUxTQSBjb21wbGlhbnQgbWl4ZXIgKGFsc2FtaXhlciB3b3JrcykuCisKKyAgTW9kdWxlIHNuZC1henQyMzIwCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBenRlY2ggU3lzdGVtIEFaVDIzMjAgSVNBIGNoaXAgKFBuUCBvbmx5KS4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEFaVDIzMjAgY2hpcCAoUG5QIHNldHVwKQorICAgIHdzc19wb3J0CS0gcG9ydCAjIGZvciBXU1MgKFBuUCBzZXR1cCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXApCisgICAgZm1fcG9ydAktIEZNIHBvcnQgIyBmb3IgQVpUMjMyMCBjaGlwIChQblAgc2V0dXApCisgICAgaXJxCQktIElSUSAjIGZvciBBWlQyMzIwIChXU1MpIGNoaXAgKFBuUCBzZXR1cCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwKQorICAgIGRtYTEJLSAxc3QgRE1BICMgZm9yIEFaVDIzMjAgKFdTUykgY2hpcCAoUG5QIHNldHVwKQorICAgIGRtYTIJLSAybmQgRE1BICMgZm9yIEFaVDIzMjAgKFdTUykgY2hpcCAoUG5QIHNldHVwKQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBQblAgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1henQzMzI4CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBenRlY2ggQVpGMzMyOCBQQ0kgY2hpcC4KKworICAgIGpveXN0aWNrCS0gRW5hYmxlIGpveXN0aWNrIChkZWZhdWx0IG9mZikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtYnQ4N3gKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciB2aWRlbyBjYXJkcyBiYXNlZCBvbiBCdDg3eCBjaGlwcy4KKworICAgIGRpZ2l0YWxfcmF0ZSAtIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRpZ2l0YWwgcmF0ZSAoSHopCisgICAgbG9hZF9hbGwJLSBMb2FkIHRoZSBkcml2ZXIgZXZlbiBpZiB0aGUgY2FyZCBtb2RlbCBpc24ndCBrbm93bgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBOb3RlOiBUaGUgZGVmYXVsdCBpbmRleCB2YWx1ZSBvZiB0aGlzIG1vZHVsZSBpcyAtMiwgaS5lLiB0aGUgZmlyc3QKKyAgICAgICAgICBzbG90IGlzIGV4Y2x1ZGVkLgorCisgIE1vZHVsZSBzbmQtY2EwMTA2CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIENyZWF0aXZlIEF1ZGlneSBMUyBhbmQgU0IgTGl2ZSAyNGJpdAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKworICBNb2R1bGUgc25kLWNtaTgzMzAKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEMtTWVkaWEgQ01JODMzMCBJU0EgY2hpcHMuCisKKyAgICB3c3Nwb3J0CS0gcG9ydCAjIGZvciBDTUk4MzMwIGNoaXAgKFdTUykKKyAgICB3c3NpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChXU1MpCisgICAgd3NzZG1hCS0gZmlyc3QgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoV1NTKQorICAgIHNicG9ydAktIHBvcnQgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQorICAgIHNiaXJxCS0gSVJRICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBzYmRtYTgJLSA4Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisgICAgc2JkbWExNgktIDE2Yml0IERNQSAjIGZvciBDTUk4MzMwIGNoaXAgKFNCMTYpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgIE1vZHVsZSBzbmQtY21pcGNpCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEMtTWVkaWEgQ01JODMzOCBhbmQgODczOCBQQ0kgc291bmQgY2FyZHMuCisKKyAgICBtcHVfcG9ydAktIDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwLCAwID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBmbV9wb3J0ICAgICAtIDB4Mzg4IChkZWZhdWx0KSwgMCA9IGRpc2FibGUgKGRlZmF1bHQpCisgICAgc29mdF9hYzMgICAgLSBTb2Z3YXJlLWNvbnZlcnNpb24gb2YgcmF3IFNQRElGIHBhY2tldHMgKG1vZGVsIDAzMyBvbmx5KQorICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSAxKQorICAgIGpveXN0aWNrX3BvcnQgLSBKb3lzdGljayBwb3J0IGFkZHJlc3MgKDAgPSBkaXNhYmxlLCAxID0gYXV0by1kZXRlY3QpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorICAgIAorICBNb2R1bGUgc25kLWNzNDIzMQorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBDUzQyMzEgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMxIGNoaXAKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChvcHRpb25hbCksIC0xID0gZGlzYWJsZQorICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMxIGNoaXAKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVAorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMxIGNoaXAKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBDUzQyMzEgY2hpcAorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZSBvcHRpb25hbC4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1jczQyMzIKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEgSVNBIGNoaXBzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQorICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQorICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQorICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMyIGNoaXAgKDUsNyw5LDExLDEyLDE1KQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQorICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMyIGNoaXAgKDAsMSwzKQorICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBDUzQyMzIgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIHRodXMgbWFpbiBwb3J0IG11c3QgYmUgc3BlY2lmaWVkISEhIE90aGVyIHBvcnRzIGFyZSBvcHRpb25hbC4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1jczQyMzYKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjM1L0NTNDIzNi9DUzQyMzZCL0NTNDIzN0IvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTNDIzOEIvQ1M0MjM5IElTQSBjaGlwcy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIENTNDIzNiBjaGlwIChQblAgc2V0dXAgLSAweDUzNCkKKyAgICBjcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBDUzQyMzYgY2hpcCAoUG5QIHNldHVwIC0gMHgxMjAsMHgyMTAsMHhmMDApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoUG5QIHNldHVwIC0gMHgzMDApLCAtMSA9IGRpc2FibGUKKyAgICBmbV9wb3J0CS0gRk0gcG9ydCAjIGZvciBDUzQyMzYgY2hpcCAoUG5QIHNldHVwIC0gMHgzODgpLCAtMSA9IGRpc2FibGUKKyAgICBpcnEJCS0gSVJRICMgZm9yIENTNDIzNiBjaGlwICg1LDcsOSwxMSwxMiwxNSkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgVUFSVCAoOSwxMSwxMiwxNSkKKyAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIENTNDIzNiBjaGlwICgwLDEsMykKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBDUzQyMzYgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKKyAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIChpZiBJU0EgUG5QIGlzIG5vdCB1c2VkKSB0aHVzIG1haW4gcG9ydCBhbmQgY29udHJvbCBwb3J0IG11c3QgYmUKKyAgICBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlIG9wdGlvbmFsLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtY3M0MjgxCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIENpcnJ1cyBMb2dpYyBDUzQyODEgc291bmRjaGlwLgorCisgICAgZHVhbF9jb2RlYwktIFNlY29uZGFyeSBjb2RlYyBJRCAoMCA9IGRpc2FibGUsIGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLWNzNDZ4eAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBQQ0kgc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0NjEwL0NTNDYxMi9DUzQ2MTQvQ1M0NjE1L0NTNDYyMi8KKwkJCQkgICAgICAgQ1M0NjI0L0NTNDYzMC9DUzQyODAgUENJIGNoaXBzLgorCisgICAgZXh0ZXJuYWxfYW1wICAgICAtIEZvcmNlIHRvIGVuYWJsZSBleHRlcm5hbCBhbXBsaWZlci4KKyAgICB0aGlua3BhZCAgICAgICAgIC0gRm9yY2UgdG8gZW5hYmxlIFRoaW5rcGFkJ3MgQ0xLUlVOIGNvbnRyb2wuCisgICAgbW1hcF92YWxpZCAgICAgICAtIFN1cHBvcnQgT1NTIG1tYXAgbW9kZSAoZGVmYXVsdCA9IDApLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICBVc3VhbGx5IGV4dGVybmFsIGFtcCBhbmQgQ0xLUlVOIGNvbnRyb2xzIGFyZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5CisgICAgZnJvbSBQQ0kgc3ViIHZlbmRvci9kZXZpY2UgaWRzLiAgSWYgdGhleSBkb24ndCB3b3JrLCBnaXZlIHRoZSBvcHRpb25zCisgICAgYWJvdmUgZXhwbGljaXRseS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1kdDAxOXgKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WCAvIEF2YW5jZSBMb2dpYyBBTFMtMDA3IChQblAKKyAgICBvbmx5KQorCisgICAgcG9ydAktIFBvcnQgIyAoUG5QIHNldHVwKQorICAgIG1wdV9wb3J0CS0gUG9ydCAjIGZvciBNUFUtNDAxIChQblAgc2V0dXApCisgICAgZm1fcG9ydAktIFBvcnQgIyBmb3IgRk0gT1BMLTMgKFBuUCBzZXR1cCkKKyAgICBpcnEJCS0gSVJRICMgKFBuUCBzZXR1cCkKKyAgICBtcHVfaXJxCS0gSVJRICMgZm9yIE1QVS00MDEgKFBuUCBzZXR1cCkKKyAgICBkbWE4CS0gRE1BICMgKFBuUCBzZXR1cCkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiAgVGhpcyBtb2R1bGUgaXMgZW5hYmxlZCBvbmx5IHdpdGgKKyAgICBJU0EgUG5QIHN1cHBvcnQuCisKKyAgTW9kdWxlIHNuZC1kdW1teQorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHRoZSBkdW1teSBzb3VuZCBjYXJkLiBUaGlzICJjYXJkIiBkb2Vzbid0IGRvIGFueSBvdXRwdXQKKyAgICBvciBpbnB1dCwgYnV0IHlvdSBtYXkgdXNlIHRoaXMgbW9kdWxlIGZvciBhbnkgYXBwbGljYXRpb24gd2hpY2gKKyAgICByZXF1aXJlcyBhIHNvdW5kIGNhcmQgKGxpa2UgUmVhbFBsYXllcikuCisKKyAgTW9kdWxlIHNuZC1lbXUxMGsxCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFTVUxMEsxL0VNVTEwazIgYmFzZWQgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBTb3VuZCBCbGFzdGVyIExpdmUhCisJCQkqIFNvdW5kIEJsYXN0ZXIgUENJIDUxMgorCQkJKiBFbXUgQVBTIChwYXJ0aWFsbHkgc3VwcG9ydGVkKQorCQkJKiBTb3VuZCBCbGFzdGVyIEF1ZGlneQorCisgICAgZXh0aW4gICAtIGJpdG1hcCBvZiBhdmFpbGFibGUgZXh0ZXJuYWwgaW5wdXRzIGZvciBGWDgwMTAgKHNlZSBiZWxsb3cpCisgICAgZXh0b3V0ICAtIGJpdG1hcCBvZiBhdmFpbGFibGUgZXh0ZXJuYWwgb3V0cHV0cyBmb3IgRlg4MDEwIChzZWUgYmVsbG93KQorICAgIHNlcV9wb3J0cyAtIGFsbG9jYXRlZCBzZXF1ZW5jZXIgcG9ydHMgKDQgYnkgZGVmYXVsdCkKKyAgICBtYXhfc3ludGhfdm9pY2VzIC0gbGltaXQgb2Ygdm9pY2VzIHVzZWQgZm9yIHdhdmV0YWJsZSAoNjQgYnkgZGVmYXVsdCkKKyAgICBtYXhfYnVmZmVyX3NpemUgIC0gc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2Ygd2F2ZXRhYmxlL3BjbSBidWZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGluIE1CIHVuaXQuICBEZWZhdWx0IHZhbHVlIGlzIDEyOC4KKyAgICBlbmFibGVfaXIgLSBlbmFibGUgSVIKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgICBJbnB1dCAmIE91dHB1dCBjb25maWd1cmF0aW9ucyAJCQlbZXh0aW4vZXh0b3V0XQorCSogQ3JlYXRpdmUgQ2FyZCB3by9EaWdpdGFsIG91dAkJCVsweDAwMDMvMHgxZjAzXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgb3V0CQkJWzB4MDAwMy8weDFmMGZdCisJKiBDcmVhdGl2ZSBDYXJkIHcvRGlnaXRhbCBDRCBpbgkJCVsweDAwMGYvMHgxZjBmXQorCSogQ3JlYXRpdmUgQ2FyZCB3by9EaWdpdGFsIG91dCArIExpdmVEcml2ZQlbMHgzZmMzLzB4MWZjM10KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIG91dCArIExpdmVEcml2ZQlbMHgzZmMzLzB4MWZjZl0KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIENEIGluICsgTGl2ZURyaXZlCVsweDNmY2YvMHgxZmNmXQorCSogQ3JlYXRpdmUgQ2FyZCB3by9EaWdpdGFsIG91dCArIERpZ2l0YWwgSS9PIDIgIFsweDBmYzMvMHgxZjBmXQorCSogQ3JlYXRpdmUgQ2FyZCB3L0RpZ2l0YWwgb3V0ICsgRGlnaXRhbCBJL08gMglbMHgwZmMzLzB4MWYwZl0KKwkqIENyZWF0aXZlIENhcmQgdy9EaWdpdGFsIENEIGluICsgRGlnaXRhbCBJL08gMglbMHgwZmNmLzB4MWYwZl0KKyAgICAgICAgKiBDcmVhdGl2ZSBDYXJkIDUuMS93IERpZ2l0YWwgb3V0ICsgTGl2ZURyaXZlCVsweDNmYzMvMHgxZmZmXQorCSogQ3JlYXRpdmUgQ2FyZCA1LjEgKGMpIDIwMDMJCQlbMHgzZmMzLzB4N2NmZl0KKyAgICAgICAgKiBDcmVhdGl2ZSBDYXJkIGFsbCBpbnMgYW5kIG91dHMJCVsweDNmZmYvMHg3ZmZmXQorICAgIAorICBNb2R1bGUgc25kLWVtdTEwazF4CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQ3JlYXRpdmUgRW11MTBrMVggKFNCIExpdmUgRGVsbCBPRU0gdmVyc2lvbikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtZW5zMTM3MAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRW5zb25pcSBBdWRpb1BDSSBFUzEzNzAgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBTb3VuZEJsYXN0ZXIgUENJIDY0CisJCQkqIFNvdW5kQmxhc3RlciBQQ0kgMTI4CisKKyAgICBqb3lzdGljawkJLSBFbmFibGUgam95c3RpY2sgKGRlZmF1bHQgb2ZmKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1lbnMxMzcxCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFbnNvbmlxIEF1ZGlvUENJIEVTMTM3MSBQQ0kgc291bmQgY2FyZHMuCisJCQkqIFNvdW5kQmxhc3RlciBQQ0kgNjQKKwkJCSogU291bmRCbGFzdGVyIFBDSSAxMjgKKwkJCSogU291bmRCbGFzdGVyIFZpYnJhIFBDSQorCisgICAgam95c3RpY2tfcG9ydAktIHBvcnQgIyBmb3Igam95c3RpY2sgKDB4MjAwLDB4MjA4LDB4MjEwLDB4MjE4KSwKKwkJCSAgMCA9IGRpc2FibGUgKGRlZmF1bHQpLCAxID0gYXV0by1kZXRlY3QKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisgICAgCisgIE1vZHVsZSBzbmQtZXM5NjgKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBFU1MgRVM5NjggY2hpcCAoUG5QIG9ubHkpLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVM5NjggKFNCOCkgY2hpcCAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgRVM5NjggKFNCOCkgY2hpcCAoUG5QIHNldHVwKQorICAgIGRtYTEJLSBETUEgIyBmb3IgRVM5NjggKFNCOCkgY2hpcCAoUG5QIHNldHVwKQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBQblAgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1lczE2ODgKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMtMTY4OCBhbmQgRVMtNjg4IHNvdW5kIGNhcmRzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCisgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQorICAgIGRtYTgJLSBETUEgIyBmb3IgRVMtMTY4OCBjaGlwICgwLDEsMykKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUgKHdpdGhvdXQgTVBVLTQwMSBwb3J0KS4KKworICBNb2R1bGUgc25kLWVzMTh4eAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFU1MgQXVkaW9Ecml2ZSBFUy0xOHh4IHNvdW5kIGNhcmRzLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTh4eCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBGTSAob3B0aW9uYWwsIG5vdCB1c2VkKQorICAgIGlycQkJLSBJUlEgIyBmb3IgRVMtMTh4eCBjaGlwICg1LDcsOSwxMCkKKyAgICBkbWExCS0gZmlyc3QgRE1BICMgZm9yIEVTLTE4eHggY2hpcCAoMCwxLDMpCisgICAgZG1hMgktIGZpcnN0IERNQSAjIGZvciBFUy0xOHh4IGNoaXAgKDAsMSwzKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBJU0EgUG5QIGFuZCBhdXRvcHJvYmUgKHdpdGhvdXQgTVBVLTQwMSBwb3J0CisgICAgaWYgbmF0aXZlIElTQSBQblAgcm91dGluZXMgYXJlIG5vdCB1c2VkKS4KKyAgICBXaGVuIGRtYTIgaXMgZXF1YWwgd2l0aCBkbWExLCB0aGUgZHJpdmVyIHdvcmtzIGFzIGhhbGYtZHVwbGV4LgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtZXMxOTM4CisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEVTUyBTb2xvLTEgKEVTMTkzOCxFUzE5NDYpIGNoaXBzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICBNb2R1bGUgc25kLWVzMTk2OAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBFU1MgTWFlc3Ryby0xLzIvMkUgKEVTMTk2OC9FUzE5NzgpIGNoaXBzLgorCisgICAgdG90YWxfYnVmc2l6ZQktIHRvdGFsIGJ1ZmZlciBzaXplIGluIGtCICgxLTQwOTZrQikKKyAgICBwY21fc3Vic3RyZWFtc19wCS0gcGxheWJhY2sgY2hhbm5lbHMgKDEtOCwgZGVmYXVsdD0yKQorICAgIHBjbV9zdWJzdHJlYW1zX2MJLSBjYXB0dXJlIGNoYW5uZWxzICgxLTgsIGRlZmF1bHQ9MCkKKyAgICBjbG9jawkJLSBjbG9jayAoMCA9IGF1dG8tZGV0ZWN0aW9uKQorICAgIHVzZV9wbQkJLSBzdXBwb3J0IHRoZSBwb3dlci1tYW5hZ2VtZW50ICgwID0gb2ZmLCAxID0gb24sCisJCQkgIDIgPSBhdXRvIChkZWZhdWx0KSkKKyAgICBlbmFibGVfbXB1CQktIGVuYWJsZSBNUFU0MDEgKDAgPSBvZmYsIDEgPSBvbiwgMiA9IGF1dG8gKGRlZmF1bHQpKQorICAgIGpveXN0aWNrCQktIGVuYWJsZSBqb3lzdGljayAoZGVmYXVsdCBvZmYpICAgICAgIAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLWZtODAxCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRm9ydGVNZWRpYSBGTTgwMSBiYXNlZCBQQ0kgc291bmQgY2FyZHMuCisKKyAgICB0ZWE1NzV4X3R1bmVyICAgICAgIC0gRW5hYmxlIFRFQTU3NXggdHVuZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxID0gTWVkaWFGb3J0ZSAyNTYtUENTCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMiA9IE1lZGlhRm9ydGUgMjU2LVBDUFIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSAzID0gTWVkaWFGb3J0ZSA2NC1QQ1IgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAtIEhpZ2ggMTYtYml0cyBhcmUgdmlkZW8gKHJhZGlvKSBkZXZpY2UgbnVtYmVyICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAtIGV4YW1wbGU6IDB4MTAwMDIgKE1lZGlhRm9ydGUgMjU2LVBDUFIsIGRldmljZSAxKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1ndXNjbGFzc2ljCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBDbGFzc2ljIHNvdW5kIGNhcmQuCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBHRjEgY2hpcCAoMHgyMjAsMHgyMzAsMHgyNDAsMHgyNTAsMHgyNjApCisgICAgaXJxCQktIElSUSAjIGZvciBHRjEgY2hpcCAoMyw1LDksMTEsMTIsMTUpCisgICAgZG1hMQktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3KQorICAgIGRtYTIJLSBETUEgIyBmb3IgR0YxIGNoaXAgKDEsMyw1LDYsNywtMT1kaXNhYmxlKQorICAgIGpveXN0aWNrX2RhYyAtIDAgdG8gMzEsICgwLjU5Vi00LjUyViBvciAwLjM4OVYtMi45OFYpCisgICAgdm9pY2VzCS0gR0YxIHZvaWNlcyBsaW1pdCAoMTQtMzIpCisgICAgcGNtX3ZvaWNlcwktIHJlc2VydmVkIFBDTSB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgTW9kdWxlIHNuZC1ndXNleHRyZW1lCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBFeHRyZW1lIChTeW5lcmd5IFZpcGVyTWF4KSBzb3VuZCBjYXJkLgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDIzMCwweDI0MCwweDI1MCwweDI2MCkKKyAgICBnZjFfcG9ydAktIHBvcnQgIyBmb3IgR0YxIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwLDB4MjcwKQorICAgIG1wdV9wb3J0CS0gcG9ydCAjIGZvciBNUFUtNDAxIHBvcnQgKDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwKSwgLTEgPSBkaXNhYmxlCisgICAgaXJxCQktIElSUSAjIGZvciBFUy0xNjg4IGNoaXAgKDUsNyw5LDEwKQorICAgIGdmMV9pcnEJLSBJUlEgIyBmb3IgR0YxIGNoaXAgKDMsNSw5LDExLDEyLDE1KQorICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBwb3J0ICg1LDcsOSwxMCkKKyAgICBkbWE4CS0gRE1BICMgZm9yIEVTLTE2ODggY2hpcCAoMCwxLDMpCisgICAgZG1hMQktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3KQorICAgIGpveXN0aWNrX2RhYyAtIDAgdG8gMzEsICgwLjU5Vi00LjUyViBvciAwLjM4OVYtMi45OFYpCisgICAgdm9pY2VzCS0gR0YxIHZvaWNlcyBsaW1pdCAoMTQtMzIpCisgICAgcGNtX3ZvaWNlcwktIHJlc2VydmVkIFBDTSB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUgKHdpdGhvdXQgTVBVLTQwMSBwb3J0KS4KKworICBNb2R1bGUgc25kLWd1c21heAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBNQVggc291bmQgY2FyZC4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIEdGMSBjaGlwICgweDIyMCwweDIzMCwweDI0MCwweDI1MCwweDI2MCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIEdGMSBjaGlwICgzLDUsOSwxMSwxMiwxNSkKKyAgICBkbWExCS0gRE1BICMgZm9yIEdGMSBjaGlwICgxLDMsNSw2LDcpCisgICAgZG1hMgktIERNQSAjIGZvciBHRjEgY2hpcCAoMSwzLDUsNiw3LC0xPWRpc2FibGUpCisgICAgam95c3RpY2tfZGFjIC0gMCB0byAzMSwgKDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4VikKKyAgICB2b2ljZXMJLSBHRjEgdm9pY2VzIGxpbWl0ICgxNC0zMikKKyAgICBwY21fdm9pY2VzCS0gcmVzZXJ2ZWQgUENNIHZvaWNlcworCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1oZGEtaW50ZWwKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgSW50ZWwgSEQgQXVkaW8gKElDSDYsIElDSDZNLCBJQ0g3KQorCisgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBFYWNoIGNvZGVjIG1heSBoYXZlIGEgbW9kZWwgdGFibGUgZm9yIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4KKyAgICBJZiB5b3VyIG1hY2hpbmUgaXNuJ3QgbGlzdGVkIHRoZXJlLCB0aGUgZGVmYXVsdCAodXN1YWxseSBtaW5pbWFsKQorICAgIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiAgWW91IGNhbiBwYXNzICJtb2RlbD08bmFtZT4iIG9wdGlvbiB0bworICAgIHNwZWNpZnkgYSBjZXJ0YWluIG1vZGVsIGluIHN1Y2ggYSBjYXNlLiAgVGhlcmUgYXJlIGRpZmZlcmVudAorICAgIG1vZGVscyBkZXBlbmRpbmcgb24gdGhlIGNvZGVjIGNoaXAuCisKKwkgIE1vZGVsIG5hbWUJRGVzY3JpcHRpb24KKwkgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0KKwlBTEM4ODAKKwkgIDNzdGFjawkzLWphY2sgaW4gYmFjayBhbmQgYSBoZWFkcGhvbmUgb3V0CisJICAzc3RhY2stZGlnb3V0CTMtamFjayBpbiBiYWNrLCBhIEhQIG91dCBhbmQgYSBTUERJRiBvdXQKKwkgIDVzdGFjawk1LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250CisJICA1c3RhY2stZGlnb3V0CTUtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQsIGEgU1BESUYgb3V0CisJICB3ODEwCQkzLWphY2sKKworCUNNSTk4ODAKKwkgIG1pbmltYWwJMy1qYWNrIGluIGJhY2sKKwkgIG1pbl9mcAkzLWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250CisJICBmdWxsCQk2LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250CisJICBmdWxsX2RpZwk2LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250LCBTUERJRiBJL08KKwkgIGFsbG91dAk1LWphY2sgaW4gYmFjaywgMi1qYWNrIGluIGZyb250LCBTUERJRiBvdXQKKworICBNb2R1bGUgc25kLWhkc3AKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFJNRSBIYW1tZXJmYWxsIERTUCBhdWRpbyBpbnRlcmZhY2UocykKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgTm90ZTogVGhlIGZpcm13YXJlIGRhdGEgY2FuIGJlIGF1dG9tYXRpY2FsbHkgbG9hZGVkIHZpYSBob3RwbHVnCisgICAgICAgICAgd2hlbiBDT05GSUdfRldfTE9BREVSIGlzIHNldC4gIE90aGVyd2lzZSwgeW91IG5lZWQgdG8gbG9hZAorICAgICAgICAgIHRoZSBmaXJtd2FyZSB2aWEgaGRzcGxvYWRlciB1dGlsaXR5IGluY2x1ZGVkIGluIGFsc2EtdG9vbHMKKyAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgIFRoZSBmaXJtd2FyZSBkYXRhIGlzIGZvdW5kIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKworICAgIE5vdGU6IHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBkb2VzIHRoZSBqb2Igd2hpY2ggc25kLWhhbW1lcmZhbGwtbWVtCisgICAgICAgICAgbW9kdWxlIGRpZCBmb3JtZXJseS4gIEl0IHdpbGwgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgaW4gYWR2YW5jZQorICAgICAgICAgIHdoZW4gYW55IEhEU1AgY2FyZHMgYXJlIGZvdW5kLiAgVG8gbWFrZSB0aGUgYnVmZmVyCisgICAgICAgICAgYWxsb2NhdGlvbiBzdXJlLCBsb2FkIHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBpbiB0aGUgZWFybHkKKyAgICAgICAgICBzdGFnZSBvZiBib290IHNlcXVlbmNlLgorCisgIE1vZHVsZSBzbmQtaWNlMTcxMgorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRW52eTI0IChJQ0UxNzEyKSBiYXNlZCBQQ0kgc291bmQgY2FyZHMuCisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSAxMDEwCisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSAxMDEwTFQKKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIERpTyAyNDk2CisJCQkqIE1pZGlNYW4gTSBBdWRpbyBEZWx0YSA2NgorCQkJKiBNaWRpTWFuIE0gQXVkaW8gRGVsdGEgNDQKKwkJCSogTWlkaU1hbiBNIEF1ZGlvIERlbHRhIDQxMAorCQkJKiBNaWRpTWFuIE0gQXVkaW8gQXVkaW9waGlsZSAyNDk2CisgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcnJhVGVjIEVXUyA4OE1UCisgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcnJhVGVjIEVXUyA4OEQKKyAgICAgICAgICAgICAgICAgICAgICAgICogVGVycmFUZWMgRVdYIDI0Lzk2CisgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcnJhVGVjIERNWCA2RmlyZQorICAgICAgICAgICAgICAgICAgICAgICAgKiBIb29udGVjaCBTb3VuZFRyYWNrIERTUCAyNAorICAgICAgICAgICAgICAgICAgICAgICAgKiBIb29udGVjaCBTb3VuZFRyYWNrIERTUCAyNCBWYWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgKiBIb29udGVjaCBTb3VuZFRyYWNrIERTUCAyNCBNZWRpYSA3LjEKKyAgICAgICAgICAgICAgICAgICAgICAgICogRGlnaWdyYW0gVlg0NDIKKworICAgIG1vZGVsICAgICAgIC0gVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbCwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJCSAgZGVsdGExMDEwLCBkaW8yNDk2LCBkZWx0YTY2LCBkZWx0YTQ0LCBhdWRpb3BoaWxlLCBkZWx0YTQxMCwKKwkJICBkZWx0YTEwMTBsdCwgdng0NDIsIGV3eDI0OTYsIGV3czg4bXQsIGV3czg4bXRfbmV3LCBld3M4OGQsCisJCSAgZG14NmZpcmUsIGRzcDI0LCBkc3AyNF92YWx1ZSwgZHNwMjRfNzEsIGV6OAorICAgIG9tbmkJLSBPbW5pIEkvTyBzdXBwb3J0IGZvciBNaWRpTWFuIE0tQXVkaW8gRGVsdGE0NC82NgorICAgIGNzODQyN190aW1lb3V0IC0gcmVzZXQgdGltZW91dCBmb3IgdGhlIENTODQyNyBjaGlwIChTL1BESUYgdHJhbnNjaWV2ZXIpCisgICAgICAgICAgICAgICAgICAgICBpbiBtc2VjIHJlc29sdXRpb24sIGRlZmF1bHQgdmFsdWUgaXMgNTAwICgwLjUgc2VjKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4gTm90ZTogVGhlIGNvbnN1bWVyIHBhcnQKKyAgICBpcyBub3QgdXNlZCB3aXRoIGFsbCBFbnZ5MjQgYmFzZWQgY2FyZHMgKGZvciBleGFtcGxlIGluIHRoZSBNaWRpTWFuIERlbHRhCisgICAgc2VyaWUpLgorCisgIE1vZHVsZSBzbmQtaWNlMTcyNAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRW52eTI0SFQgKFZUL0lDRTE3MjQpIGJhc2VkIFBDSSBzb3VuZCBjYXJkcy4KKwkJCSogTWlkaU1hbiBNIEF1ZGlvIFJldm9sdXRpb24gNy4xCisJCQkqIEFNUCBMdGQgQVVESU8yMDAwCisJCQkqIFRlcnJhVGVjIEF1cmVvbiBTa3ktNS4xLCBTcGFjZS03LjEKKworICAgIG1vZGVsICAgICAgIC0gVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbCwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJCSAgcmV2bzcxLCBhbXAyMDAwLCBwcm9kaWd5NzEsIGF1cmVvbjUxLCBhdXJlb243MSwKKwkJICBrOHg4MDAKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgTW9kdWxlIHNuZC1pbnRlbDh4MAorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFDJzk3IG1vdGhlcmJvYXJkcyBmcm9tIEludGVsIGFuZCBjb21wYXRpYmxlcy4KKwkJCSogSW50ZWwgaTgxMC84MTBFLCBpODE1LCBpODIwLCBpODMwLCBpODR4LCBNWDQ0MAorCQkJKiBTaVMgNzAxMiAoU2lTIDczNSkKKwkJCSogTlZpZGlhIE5Gb3JjZSwgTkZvcmNlMgorCQkJKiBBTUQgQU1ENzY4LCBBTUQ4MTExCisJCQkqIEFMaSBtNTQ1NQorCisgICAgYWM5N19jbG9jawkgIC0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoMCA9IGF1dG8tZGV0ZWN0KQorICAgIGFjOTdfcXVpcmsgICAgLSBBQyc5NyB3b3JrYXJvdW5kIGZvciBzdHJhbmdlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBhcmUgYWNjZXB0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGRvbid0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlID0gZGlzYWJsZSB0aGUgcXVpcmsKKyAgICAgICAgICAgICAgICAgICAgICBocF9vbmx5ID0gdXNlIGhlYWRwaG9uZSBjb250cm9sIGFzIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAgIHN3YXBfaHAgPSBzd2FwIGhlYWRwaG9uZSBhbmQgbWFzdGVyIGNvbnRyb2xzCisgICAgICAgICAgICAgICAgICAgICAgc3dhcF9zdXJyb3VuZCA9IHN3YXAgbWFzdGVyIGFuZCBzdXJyb3VuZCBjb250cm9scworICAgICAgICAgICAgICAgICAgICAgIGFkX3NoYXJpbmcgPSBmb3IgQUQxOTg1LCB0dXJuIG9uIE9NUyBiaXQgYW5kIHVzZSBoZWFkcGhvbmUKKyAgICAgICAgICAgICAgICAgICAgICBhbGNfamFjayA9IGZvciBBTEM2NXgsIHR1cm4gb24gdGhlIGphY2sgc2Vuc2UgbW9kZQorICAgICAgICAgICAgICAgICAgICAgIGludl9lYXBkID0gaW52ZXJ0ZWQgRUFQRCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgIG11dGVfbGVkID0gYmluZCBFQVBEIGJpdCBmb3IgdHVybmluZyBvbi9vZmYgbXV0ZSBMRUQKKyAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSBjb3JyZXNwb25kaW5nIGludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgLTEsIDAsIC4uLiBhcmUgYWNjZXB0ZWQsIHRvby4KKyAgICBidWdneV9pcnEgICAgIC0gRW5hYmxlIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGludGVycnVwdHMgb24gc29tZQorICAgICAgICAgICAgICAgICAgICBtb3RoZXJib2FyZHMgKGRlZmF1bHQgb2ZmKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgYnVzLW1hc3RlciBjaGlwcyAobWF4IDgpLgorCisgICAgTm90ZTogdGhlIGxhdGVzdCBkcml2ZXIgc3VwcG9ydHMgYXV0by1kZXRlY3Rpb24gb2YgY2hpcCBjbG9jay4KKyAgICBpZiB5b3Ugc3RpbGwgZW5jb3VudGVyIHRvbyBmYXN0IHBsYXliYWNrLCBzcGVjaWZ5IHRoZSBjbG9jaworICAgIGV4cGxpY2l0bHkgdmlhIHRoZSBtb2R1bGUgb3B0aW9uICJhYzk3X2Nsb2NrPTQxMTk0Ii4KKworICAgIEpveXN0aWNrL01JREkgcG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuICBJZiB5b3VyCisgICAgbW90aGVyYm9hcmQgaGFzIHRoZXNlIGRldmljZXMsIHVzZSB0aGUgbnM1NTggb3Igc25kLW1wdTQwMQorICAgIG1vZHVsZXMsIHJlc3BlY3RpdmVseS4KKworICAgIFRoZSBhYzk3X3F1aXJrIG9wdGlvbiBpcyB1c2VkIHRvIGVuYWJsZS9vdmVycmlkZSB0aGUgd29ya2Fyb3VuZAorICAgIGZvciBzcGVjaWZpYyBkZXZpY2VzLiAgU29tZSBoYXJkd2FyZSBoYXZlIHN3YXBwZWQgb3V0cHV0IHBpbnMKKyAgICBiZXR3ZWVuIE1hc3RlciBhbmQgSGVhZHBob25lLCBvciBTdXJyb3VuZC4gIFRoZSBkcml2ZXIgcHJvdmlkZXMKKyAgICB0aGUgYXV0by1kZXRlY3Rpb24gb2Yga25vd24gcHJvYmxlbWF0aWMgZGV2aWNlcywgYnV0IHNvbWUgbWlnaHQKKyAgICBiZSB1bmtub3duIG9yIHdyb25nbHkgZGV0ZWN0ZWQuICBJbiBzdWNoIGEgY2FzZSwgcGFzcyB0aGUgcHJvcGVyCisgICAgdmFsdWUgd2l0aCB0aGlzIG9wdGlvbi4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKyAgICAKKyAgTW9kdWxlIHNuZC1pbnRlbDh4MG0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgSW50ZWwgSUNIIChpOHgwKSBjaGlwc2V0IE1DOTcgbW9kZW1zLgorCisgICAgYWM5N19jbG9jawkgIC0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoMCA9IGF1dG8tZGV0ZWN0KQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgICAgTm90ZTogVGhlIGRlZmF1bHQgaW5kZXggdmFsdWUgb2YgdGhpcyBtb2R1bGUgaXMgLTIsIGkuZS4gdGhlIGZpcnN0CisgICAgICAgICAgc2xvdCBpcyBleGNsdWRlZC4KKworICBNb2R1bGUgc25kLWludGVyd2F2ZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBQblAsIER5bmFzb25pYyAzLUQvUHJvLCBTVEIgU291bmQgUmFnZSAzMgorICAgIGFuZCBvdGhlciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBBTUQgSW50ZXJXYXZlICh0bSkgY2hpcC4KKyAgCisgICAgcG9ydAktIHBvcnQgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDMsNSw5LDExLDEyLDE1KQorICAgIGRtYTEJLSBETUEgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDAsMSwzLDUsNiw3KQorICAgIGRtYTIJLSBETUEgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDAsMSwzLDUsNiw3LC0xPWRpc2FibGUpCisgICAgam95c3RpY2tfZGFjIC0gMCB0byAzMSwgKDAuNTlWLTQuNTJWIG9yIDAuMzg5Vi0yLjk4VikKKyAgICBtaWRpCS0gMSA9IE1JREkgVUFSVCBlbmFibGUsIDAgPSBNSURJIFVBUlQgZGlzYWJsZSAoZGVmYXVsdCkKKyAgICBwY21fdm9pY2VzCS0gcmVzZXJ2ZWQgUENNIHZvaWNlcyBmb3IgdGhlIHN5bnRoZXNpemVyIChkZWZhdWx0IDIpCisgICAgZWZmZWN0CS0gMSA9IEludGVyV2F2ZSBlZmZlY3RzIGVuYWJsZSAoZGVmYXVsdCAwKTsKKyAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIDggdm9pY2VzCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcywgYXV0b3Byb2JlIGFuZCBJU0EgUG5QLgorCisgIE1vZHVsZSBzbmQtaW50ZXJ3YXZlLXN0YgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVWx0cmFTb3VuZCAzMi1Qcm8gKHNvdW5kIGNhcmQgZnJvbSBTVEIgdXNlZCBieSBDb21wYXEpCisgICAgYW5kIG90aGVyIHNvdW5kIGNhcmRzIGJhc2VkIG9uIEFNRCBJbnRlcldhdmUgKHRtKSBjaGlwIHdpdGggVEVBNjMzMFQKKyAgICBjaXJjdWl0IGZvciBleHRlbmRlZCBjb250cm9sIG9mIGJhc3MsIHRyZWJsZSBhbmQgbWFzdGVyIHZvbHVtZS4KKyAgCisgICAgcG9ydAktIHBvcnQgIyBmb3IgSW50ZXJXYXZlIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIHBvcnRfdGMJLSB0b25lIGNvbnRyb2wgKGkyYyBidXMpIHBvcnQgIyBmb3IgVEVBNjMzMFQgY2hpcCAoMHgzNTAsMHgzNjAsMHgzNzAsMHgzODApCisgICAgaXJxCQktIElSUSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMyw1LDksMTEsMTIsMTUpCisgICAgZG1hMQktIERNQSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMCwxLDMsNSw2LDcpCisgICAgZG1hMgktIERNQSAjIGZvciBJbnRlcldhdmUgY2hpcCAoMCwxLDMsNSw2LDcsLTE9ZGlzYWJsZSkKKyAgICBqb3lzdGlja19kYWMgLSAwIHRvIDMxLCAoMC41OVYtNC41MlYgb3IgMC4zODlWLTIuOThWKQorICAgIG1pZGkJLSAxID0gTUlESSBVQVJUIGVuYWJsZSwgMCA9IE1JREkgVUFSVCBkaXNhYmxlIChkZWZhdWx0KQorICAgIHBjbV92b2ljZXMJLSByZXNlcnZlZCBQQ00gdm9pY2VzIGZvciB0aGUgc3ludGhlc2l6ZXIgKGRlZmF1bHQgMikKKyAgICBlZmZlY3QJLSAxID0gSW50ZXJXYXZlIGVmZmVjdHMgZW5hYmxlIChkZWZhdWx0IDApOworICAgICAgICAgICAgICAgICAgcmVxdWlyZXMgOCB2b2ljZXMKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIElTQSBQblAuCisKKyAgTW9kdWxlIHNuZC1rb3JnMTIxMgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEtvcmcgMTIxMiBJTyBQQ0kgY2FyZAorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1tYWVzdHJvMworICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFsbGVncm8vTWFlc3RybzMgY2hpcHMKKworICAgIGV4dGVybmFsX2FtcCAgICAgLSBlbmFibGUgZXh0ZXJuYWwgYW1wIChlbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgYW1wX2dwaW8gICAgICAgICAtIEdQSU8gcGluIG51bWJlciBmb3IgZXh0ZXJuYWwgYW1wICgwLTE1KSBvcgorICAgICAgICAgICAgICAgICAgICAgICAtMSBmb3IgZGVmYXVsdCBwaW4gKDggZm9yIGFsbGVncm8sIDEgZm9yCisgICAgICAgICAgICAgICAgICAgICAgIG90aGVycykgCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgTm90ZTogdGhlIGJpbmRpbmcgb2YgYW1wbGlmaWVyIGlzIGRlcGVuZGVudCBvbiBoYXJkd2FyZS4KKyAgICBJZiB0aGVyZSBpcyBubyBzb3VuZCBldmVuIHRob3VnaCBhbGwgY2hhbm5lbHMgYXJlIHVubXV0ZWQsIHRyeSB0bworICAgIHNwZWNpZnkgb3RoZXIgZ3BpbyBjb25uZWN0aW9uIHZpYSBhbXBfZ3BpbyBvcHRpb24uIAorICAgIEZvciBleGFtcGxlLCBhIFBhbmFzb25pYyBub3RlYm9vayBtaWdodCBuZWVkICJhbXBfZ3Bpbz0weDBkIgorICAgIG9wdGlvbi4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLW1peGFydAorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBEaWdpZ3JhbSBtaVhhcnQ4IHNvdW5kIGNhcmRzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgorICAgIE5vdGU6IE9uZSBtaVhhcnQ4IGJvYXJkIHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgNCBhbHNhIGNhcmRzLgorICAgICAgICAgIFNlZSBNSVhBUlQudHh0IGZvciBkZXRhaWxzLgorCisgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQorICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCisgICAgSW5zdGFsbCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZpbGVzIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKyAgICBXaGVuIG5vIGhvdHBsdWcgZncgbG9hZGVyIGlzIGF2YWlsYWJsZSwgeW91IG5lZWQgdG8gbG9hZCB0aGUKKyAgICBmaXJtd2FyZSB2aWEgbWl4YXJ0bG9hZGVyIHV0aWxpdHkgaW4gYWxzYS10b29scyBwYWNrYWdlLgorCisgIE1vZHVsZSBzbmQtbXB1NDAxCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE1QVS00MDEgVUFSVCBkZXZpY2VzLgorCisgICAgcG9ydAktIHBvcnQgbnVtYmVyIG9yIC0xIChkaXNhYmxlKQorICAgIGlycQkJLSBJUlEgbnVtYmVyIG9yIC0xIChkaXNhYmxlKQorICAgIHBucAkJLSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcyAobWF4IDgpIGFuZCBQblAuCisgICAgCisgIE1vZHVsZSBzbmQtbXRwYXYKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBNT1RVIE1pZGlUaW1lUGllY2UgQVYgbXVsdGlwb3J0IE1JREkgKG9uIHRoZSBwYXJhbGxlbAorICAgIHBvcnQpLgorCisgICAgcG9ydAktIEkvTyBwb3J0ICMgZm9yIE1UUEFWICgweDM3OCwweDI3OCwgZGVmYXVsdD0weDM3OCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIE1UUEFWICg3LDUsIGRlZmF1bHQ9NykKKyAgICBod3BvcnRzCS0gbnVtYmVyIG9mIHN1cHBvcnRlZCBoYXJkd2FyZSBwb3J0cywgZGVmYXVsdD04LgorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyBvbmx5IDEgY2FyZC4gIFRoaXMgbW9kdWxlIGhhcyBubyBlbmFibGUgb3B0aW9uLgorCisgIE1vZHVsZSBzbmQtbm0yNTYKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBOZW9NYWdpYyBOTTI1NkFWL1pYIGNoaXBzCisKKyAgICBwbGF5YmFja19idWZzaXplIC0gbWF4IHBsYXliYWNrIGZyYW1lIHNpemUgaW4ga0IgKDQtMTI4a0IpCisgICAgY2FwdHVyZV9idWZzaXplICAtIG1heCBjYXB0dXJlIGZyYW1lIHNpemUgaW4ga0IgKDQtMTI4a0IpCisgICAgZm9yY2VfYWM5NyAgICAgICAtIDAgb3IgMSAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKKyAgICBidWZmZXJfdG9wICAgICAgIC0gc3BlY2lmeSBidWZmZXIgdG9wIGFkZHJlc3MKKyAgICB1c2VfY2FjaGUgICAgICAgIC0gMCBvciAxIChkaXNhYmxlZCBieSBkZWZhdWx0KQorICAgIHZhaW9faGFjayAgICAgICAgLSBhbGlhcyBidWZmZXJfdG9wPTB4MjVhODAwCisgICAgcmVzZXRfd29ya2Fyb3VuZCAtIGVuYWJsZSBBQzk3IFJFU0VUIHdvcmthcm91bmQgZm9yIHNvbWUgbGFwdG9wcworCisgICAgTW9kdWxlIHN1cHBvcnRzIGF1dG9wcm9iZSBhbmQgbXVsdGlwbGUgY2hpcHMgKG1heCA4KS4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICAgIE5vdGU6IG9uIHNvbWUgbm90ZWJvb2tzIHRoZSBidWZmZXIgYWRkcmVzcyBjYW5ub3QgYmUgZGV0ZWN0ZWQKKyAgICBhdXRvbWF0aWNhbGx5LCBvciBjYXVzZXMgaGFuZy11cCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgSW4gc3VjaCBhIGNhc2UsIHNwZWNpZnkgdGhlIGJ1ZmZlciB0b3AgYWRkcmVzcyBleHBsaWNpdHkgdmlhCisgICAgYnVmZmVyX3RvcCBvcHRpb24uCisgICAgRm9yIGV4YW1wbGUsCisgICAgICBTb255IEYyNTA6IGJ1ZmZlcl90b3A9MHgyNWE4MDAKKyAgICAgIFNvbnkgRjI3MDogYnVmZmVyX3RvcD0weDI3MjgwMAorICAgIFRoZSBkcml2ZXIgc3VwcG9ydHMgb25seSBhYzk3IGNvZGVjLiAgSXQncyBwb3NzaWJsZSB0byBmb3JjZQorICAgIHRvIGluaXRpYWxpemUvdXNlIGFjOTcgYWx0aG91Z2ggaXQncyBub3QgZGV0ZWN0ZWQuICBJbiBzdWNoIGEKKyAgICBjYXNlLCB1c2UgZm9yY2VfYWM5Nz0xIG9wdGlvbiAtIGJ1dCAqTk8qIGd1YXJhbnRlZSB3aGV0aGVyIGl0CisgICAgd29ya3MhCisKKyAgICBOb3RlOiBUaGUgTk0yNTYgY2hpcCBjYW4gYmUgbGlua2VkIGludGVybmFsbHkgd2l0aCBub24tQUM5NworICAgIGNvZGVjcy4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG9ubHkgdGhlIEFDOTcgY29kZWMsIGFuZCB3b24ndCB3b3JrCisgICAgd2l0aCBtYWNoaW5lcyB3aXRoIG90aGVyIChtb3N0IGxpa2VseSBDUzQyM3ggb3IgT1BMM1NBeCkgY2hpcHMsCisgICAgZXZlbiB0aG91Z2ggdGhlIGRldmljZSBpcyBkZXRlY3RlZCBpbiBsc3BjaS4gIEluIHN1Y2ggYSBjYXNlLCB0cnkKKyAgICBvdGhlciBkcml2ZXJzLCBlLmcuIHNuZC1jczQyMzIgb3Igc25kLW9wbDNzYTIuICBTb21lIGhhcyBJU0EtUG5QCisgICAgYnV0IHNvbWUgZG9lc24ndCBoYXZlIElTQSBQblAuICBZb3UnbGwgbmVlZCB0byBzcGVpY2Z5IGlzYXBucD0wCisgICAgYW5kIHByb3BlciBoYXJkd2FyZSBwYXJhbWV0ZXJzIGluIHRoZSBjYXNlIHdpdGhvdXQgSVNBIFBuUC4KKworICAgIE5vdGU6IHNvbWUgbGFwdG9wcyBuZWVkIGEgd29ya2Fyb3VuZCBmb3IgQUM5NyBSRVNFVC4gIEZvciB0aGUKKyAgICBrbm93biBoYXJkd2FyZSBsaWtlIERlbGwgTGF0aXR1ZGUgTFMgYW5kIFNvbnkgUENHLUYzMDUsIHRoaXMKKyAgICB3b3JrYXJvdW5kIGlzIGVuYWJsZWQgYXV0b21hdGljYWxseS4gIEZvciBvdGhlciBsYXB0b3BzIHdpdGggYQorICAgIGhhcmQgZnJlZXplLCB5b3UgY2FuIHRyeSByZXNldF93b3JrYXJvdW5kPTEgb3B0aW9uLgorCisgICAgTm90ZTogVGhpcyBkcml2ZXIgaXMgcmVhbGx5IGNyYXBweS4gIEl0J3MgYSBwb3J0aW5nIGZyb20gdGhlCisgICAgT1NTIGRyaXZlciwgd2hpY2ggaXMgYSByZXN1bHQgb2YgYmxhY2stbWFnaWMgcmV2ZXJzZSBlbmdpbmVlcmluZy4KKyAgICBUaGUgZGV0ZWN0aW9uIG9mIGNvZGVjIHdpbGwgZmFpbCBpZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqYWZ0ZXIqCisgICAgWC1zZXJ2ZXIgYXMgZGVzY3JpYmVkIGFib3ZlLiAgWW91IG1pZ2h0IGJlIGFibGUgdG8gZm9yY2UgdG8gbG9hZAorICAgIHRoZSBtb2R1bGUsIGJ1dCBpdCBtYXkgcmVzdWx0IGluIGhhbmctdXAuICAgSGVuY2UsIG1ha2Ugc3VyZSB0aGF0CisgICAgeW91IGxvYWQgdGhpcyBtb2R1bGUgKmJlZm9yZSogWCBpZiB5b3UgZW5jb3VudGVyIHRoaXMga2luZCBvZgorICAgIHByb2JsZW0uCisKKyAgTW9kdWxlIHNuZC1vcGwzc2EyCisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBZYW1haGEgT1BMMy1TQTIvU0EzIHNvdW5kIGNhcmRzLgorCisgICAgcG9ydAktIGNvbnRyb2wgcG9ydCAjIGZvciBPUEwzLVNBIGNoaXAgKDB4MzcwKQorICAgIHNiX3BvcnQJLSBTQiBwb3J0ICMgZm9yIE9QTDMtU0EgY2hpcCAoMHgyMjAsMHgyNDApCisgICAgd3NzX3BvcnQJLSBXU1MgcG9ydCAjIGZvciBPUEwzLVNBIGNoaXAgKDB4NTMwLDB4ZTgwLDB4ZjQwLDB4NjA0KQorICAgIG1pZGlfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUICgweDMwMCwweDMzMCksIC0xID0gZGlzYWJsZQorICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIE9QTDMtU0EgY2hpcCAoMHgzODgpLCAtMSA9IGRpc2FibGUKKyAgICBpcnEJCS0gSVJRICMgZm9yIE9QTDMtU0EgY2hpcCAoNSw3LDksMTApCisgICAgZG1hMQktIGZpcnN0IERNQSAjIGZvciBZYW1haGEgT1BMMy1TQSBjaGlwICgwLDEsMykKKyAgICBkbWEyCS0gc2Vjb25kIERNQSAjIGZvciBZYW1haGEgT1BMMy1TQSBjaGlwICgwLDEsMyksIC0xID0gZGlzYWJsZQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIElTQSBQblAuIFRoaXMgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQKKyAgICBhdXRvcHJvYmUgKGlmIElTQSBQblAgaXMgbm90IHVzZWQpIHRodXMgYWxsIHBvcnRzIG11c3QgYmUgc3BlY2lmaWVkISEhCisgICAgCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtb3B0aTkyeC1hZDE4NDgKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBPUFRpIDgyYzkyeCBhbmQgQW5hbG9nIERldmljZXMgQUQxODQ4IGNoaXBzLgorICAgIE1vZHVsZSB3b3JrcyB3aXRoIE9BSyBNb3phcnQgY2FyZHMgYXMgd2VsbC4KKyAgICAKKyAgICBwb3J0ICAgICAgLSBwb3J0ICMgZm9yIFdTUyBjaGlwICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBtcHVfcG9ydCAgLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgZm1fcG9ydCAgIC0gcG9ydCAjIGZvciBPUEwzIGRldmljZSAoMHgzODgpCisgICAgaXJxICAgICAgIC0gSVJRICMgZm9yIFdTUyBjaGlwICg1LDcsOSwxMCwxMSkKKyAgICBtcHVfaXJxICAgLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg1LDcsOSwxMCkKKyAgICBkbWExICAgICAgLSBmaXJzdCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25seSBvbmUgY2FyZCwgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1vcHRpOTJ4LWNzNDIzMQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIE9QVGkgODJjOTJ4IGFuZCBDcnlzdGFsIENTNDIzMSBjaGlwcy4KKyAgICAKKyAgICBwb3J0ICAgICAgLSBwb3J0ICMgZm9yIFdTUyBjaGlwICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBtcHVfcG9ydCAgLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgZm1fcG9ydCAgIC0gcG9ydCAjIGZvciBPUEwzIGRldmljZSAoMHgzODgpCisgICAgaXJxICAgICAgIC0gSVJRICMgZm9yIFdTUyBjaGlwICg1LDcsOSwxMCwxMSkKKyAgICBtcHVfaXJxICAgLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg1LDcsOSwxMCkKKyAgICBkbWExICAgICAgLSBmaXJzdCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorICAgIGRtYTIgICAgICAtIHNlY29uZCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25seSBvbmUgY2FyZCwgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1vcHRpOTN4CisgIC0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiBPUFRpIDgyYzkzeCBjaGlwcy4KKyAgICAKKyAgICBwb3J0ICAgICAgLSBwb3J0ICMgZm9yIFdTUyBjaGlwICgweDUzMCwweGU4MCwweGY0MCwweDYwNCkKKyAgICBtcHVfcG9ydCAgLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgZm1fcG9ydCAgIC0gcG9ydCAjIGZvciBPUEwzIGRldmljZSAoMHgzODgpCisgICAgaXJxICAgICAgIC0gSVJRICMgZm9yIFdTUyBjaGlwICg1LDcsOSwxMCwxMSkKKyAgICBtcHVfaXJxICAgLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg1LDcsOSwxMCkKKyAgICBkbWExICAgICAgLSBmaXJzdCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorICAgIGRtYTIgICAgICAtIHNlY29uZCBETUEgIyBmb3IgV1NTIGNoaXAgKDAsMSwzKQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgb25seSBvbmUgY2FyZCwgYXV0b3Byb2JlIGFuZCBQblAuCisKKyAgTW9kdWxlIHNuZC1wb3dlcm1hYyAob24gcHBjIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBQb3dlck1hYywgaU1hYyBhbmQgaUJvb2sgb24tYm9hcmQgc291bmRjaGlwcworCisgICAgZW5hYmxlX2JlZXAgICAgIC0gZW5hYmxlIGJlZXAgdXNpbmcgUENNIChlbmFibGVkIGFzIGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGEgY2hpcC4KKworICAgIE5vdGU6IHRoZSBkcml2ZXIgbWF5IGhhdmUgcHJvYmxlbXMgcmVnYXJkaW5nIGVuZGlhbmVzcy4KKworICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKworICBNb2R1bGUgc25kLXJtZTMyCisgIC0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUk1FIERpZ2kzMiwgRGlnaTMyIFBybyBhbmQgRGlnaTMyLzggKFNlaydkIFByb2RpZjMyLCAKKyAgICBQcm9kaWY5NiBhbmQgUHJvZGlmIEdvbGQpIHNvdW5kIGNhcmRzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1ybWU5NgorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFJNRSBEaWdpOTYsIERpZ2k5Ni84IGFuZCBEaWdpOTYvOCBQUk8vUEFEL1BTVCBzb3VuZCBjYXJkcy4KKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtcm1lOTY1MgorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUk1FIERpZ2k5NjUyIChIYW1tZXJmYWxsLCBIYW1tZXJmYWxsLUxpZ2h0KSBzb3VuZCBjYXJkcy4KKworICAgIHByZWNpc2VfcHRyCS0gRW5hYmxlIHByZWNpc2UgcG9pbnRlciAoZG9lc24ndCB3b3JrIHJlbGlhYmx5KS4KKwkJICAoZGVmYXVsdCA9IDApCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICAgIE5vdGU6IHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBkb2VzIHRoZSBqb2Igd2hpY2ggc25kLWhhbW1lcmZhbGwtbWVtCisgICAgICAgICAgbW9kdWxlIGRpZCBmb3JtZXJseS4gIEl0IHdpbGwgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgaW4gYWR2YW5jZQorICAgICAgICAgIHdoZW4gYW55IFJNRTk2NTIgY2FyZHMgYXJlIGZvdW5kLiAgVG8gbWFrZSB0aGUgYnVmZmVyCisgICAgICAgICAgYWxsb2NhdGlvbiBzdXJlLCBsb2FkIHNuZC1wYWdlLWFsbG9jIG1vZHVsZSBpbiB0aGUgZWFybHkKKyAgICAgICAgICBzdGFnZSBvZiBib290IHNlcXVlbmNlLgorCisgIE1vZHVsZSBzbmQtc2ExMXh4LXVkYTEzNDEgKG9uIGFybSBvbmx5KQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgUGhpbGlwcyBVREExMzQxVFMgb24gQ29tcGFxIGlQQVEgSDM2MDAgc291bmQgY2FyZC4KKworICAgIE1vZHVsZSBzdXBwb3J0cyBvbmx5IG9uZSBjYXJkLgorICAgIE1vZHVsZSBoYXMgbm8gZW5hYmxlIGFuZCBpbmRleCBvcHRpb25zLgorCisgIE1vZHVsZSBzbmQtc2I4CisgIC0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIDgtYml0IFNvdW5kQmxhc3RlciBjYXJkczogU291bmRCbGFzdGVyIDEuMCwKKwkJCQkJIFNvdW5kQmxhc3RlciAyLjAsCisJCQkJCSBTb3VuZEJsYXN0ZXIgUHJvCisKKyAgICBwb3J0CS0gcG9ydCAjIGZvciBTQiBEU1AgY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgaXJxCQktIElSUSAjIGZvciBTQiBEU1AgY2hpcCAoNSw3LDksMTApCisgICAgZG1hOAktIERNQSAjIGZvciBTQiBEU1AgY2hpcCAoMSwzKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMgYW5kIGF1dG9wcm9iZS4KKyAgICAKKyAgTW9kdWxlIHNuZC1zYjE2IGFuZCBzbmQtc2Jhd2UKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgMTYtYml0IFNvdW5kQmxhc3RlciBjYXJkczogU291bmRCbGFzdGVyIDE2IChQblApLAorCQkJCQkgIFNvdW5kQmxhc3RlciBBV0UgMzIgKFBuUCksCisJCQkJCSAgU291bmRCbGFzdGVyIEFXRSA2NCBQblAKKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIFNCIERTUCA0LnggY2hpcCAoMHgyMjAsMHgyNDAsMHgyNjApCisgICAgbXB1X3BvcnQJLSBwb3J0ICMgZm9yIE1QVS00MDEgVUFSVCAoMHgzMDAsMHgzMzApLCAtMSA9IGRpc2FibGUKKyAgICBhd2VfcG9ydAktIGJhc2UgcG9ydCAjIGZvciBFTVU4MDAwIHN5bnRoZXNpemVyICgweDYyMCwweDY0MCwweDY2MCkKKyAgICAgICAgICAgICAgICAgICAoc25kLXNiYXdlIG1vZHVsZSBvbmx5KQorICAgIGlycQkJLSBJUlEgIyBmb3IgU0IgRFNQIDQueCBjaGlwICg1LDcsOSwxMCkKKyAgICBkbWE4CS0gOC1iaXQgRE1BICMgZm9yIFNCIERTUCA0LnggY2hpcCAoMCwxLDMpCisgICAgZG1hMTYJLSAxNi1iaXQgRE1BICMgZm9yIFNCIERTUCA0LnggY2hpcCAoNSw2LDcpCisgICAgbWljX2FnYwktIE1pYyBBdXRvLUdhaW4tQ29udHJvbCAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQorICAgIGNzcAkJLSBBU1AvQ1NQIGNoaXAgc3VwcG9ydCAtIDAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgSVNBIFBuUC4KKworICAgIE5vdGU6IFRvIHVzZSBWaWJyYTE2WCBjYXJkcyBpbiAxNi1iaXQgaGFsZiBkdXBsZXggbW9kZSwgeW91IG11c3QKKyAgICAgICAgICBkaXNhYmxlIDE2Yml0IERNQSB3aXRoIGRtYTE2ID0gLTEgbW9kdWxlIHBhcmFtZXRlci4KKyAgICAgICAgICBBbHNvLCBhbGwgU291bmQgQmxhc3RlciAxNiB0eXBlIGNhcmRzIGNhbiBvcGVyYXRlIGluIDE2LWJpdAorICAgICAgICAgIGhhbGYgZHVwbGV4IG1vZGUgdGhyb3VnaCA4LWJpdCBETUEgY2hhbm5lbCBieSBkaXNhYmxpbmcgdGhlaXIKKyAgICAgICAgICAxNi1iaXQgRE1BIGNoYW5uZWwuCisgICAgCisgIE1vZHVsZSBzbmQtc2dhbGF4eQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQXp0ZWNoIFNvdW5kIEdhbGF4eSBzb3VuZCBjYXJkLgorCisgICAgc2Jwb3J0CS0gUG9ydCAjIGZvciBTQjE2IGludGVyZmFjZSAoMHgyMjAsMHgyNDApCisgICAgd3NzcG9ydAktIFBvcnQgIyBmb3IgV1NTIGludGVyZmFjZSAoMHg1MzAsMHhlODAsMHhmNDAsMHg2MDQpCisgICAgaXJxCQktIElSUSAjICg3LDksMTAsMTEpCisgICAgZG1hMQktIERNQSAjCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLXNzY2FwZQorICAtLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBFTlNPTklRIFNvdW5kU2NhcGUgUG5QIGNhcmRzLgorCisgICAgcG9ydAktIFBvcnQgIyAoUG5QIHNldHVwKQorICAgIGlycQkJLSBJUlEgIyAoUG5QIHNldHVwKQorICAgIG1wdV9pcnEJLSBNUFUtNDAxIElSUSAjIChQblAgc2V0dXApCisgICAgZG1hCQktIERNQSAjIChQblAgc2V0dXApCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4gIElTQSBQblAgbXVzdCBiZSBlbmFibGVkLgorICAgIFlvdSBuZWVkIHNzY2FwZV9jdGwgdG9vbCBpbiBhbHNhLXRvb2xzIHBhY2thZ2UgZm9yIGxvYWRpbmcKKyAgICB0aGUgbWljcm9jb2RlLgorCisgIE1vZHVsZSBzbmQtc3VuLWFtZDc5MzAgKG9uIHNwYXJjIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIEFNRDc5MzAgc291bmQgY2hpcHMgZm91bmQgb24gU3BhcmNzLgorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgTW9kdWxlIHNuZC1zdW4tY3M0MjMxIChvbiBzcGFyYyBvbmx5KQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIENTNDIzMSBzb3VuZCBjaGlwcyBmb3VuZCBvbiBTcGFyY3MuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4KKworICBNb2R1bGUgc25kLXdhdmVmcm9udAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTWF1aSwgVHJvcGV6IGFuZCBUcm9wZXorIHNvdW5kIGNhcmRzLgorCisgICAgY3M0MjMyX3BjbV9wb3J0IC0gUG9ydCAjIGZvciBDUzQyMzIgUENNIGludGVyZmFjZS4KKyAgICBjczQyMzJfcGNtX2lycSAgLSBJUlEgIyBmb3IgQ1M0MjMyIFBDTSBpbnRlcmZhY2UgKDUsNyw5LDExLDEyLDE1KS4KKyAgICBjczQyMzJfbXB1X3BvcnQgLSBQb3J0ICMgZm9yIENTNDIzMiBNUFUtNDAxIGludGVyZmFjZS4KKyAgICBjczQyMzJfbXB1X2lycSAgLSBJUlEgIyBmb3IgQ1M0MjMyIE1QVS00MDEgaW50ZXJmYWNlICg5LDExLDEyLDE1KS4KKyAgICB1c2VfY3M0MjMyX21pZGkgLSBVc2UgQ1M0MjMyIE1QVS00MDEgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgKGluYWNjZXNzaWJseSBsb2NhdGVkIGluc2lkZSB5b3VyIGNvbXB1dGVyKQorICAgIGljczIxMTVfcG9ydCAgICAtIFBvcnQgIyBmb3IgSUNTMjExNQorICAgIGljczIxMTVfaXJxICAgICAtIElSUSAjIGZvciBJQ1MyMTE1CisgICAgZm1fcG9ydCAgICAgICAgIC0gRk0gT1BMLTMgUG9ydCAjCisgICAgZG1hMSAgICAgICAgICAgIC0gRE1BMSAjIGZvciBDUzQyMzIgUENNIGludGVyZmFjZS4KKyAgICBkbWEyICAgICAgICAgICAgLSBETUEyICMgZm9yIENTNDIzMiBQQ00gaW50ZXJmYWNlLgorICAgIGlzYXBucCAgICAgICAgICAtIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgSVNBIFBuUC4KKworICBNb2R1bGUgc25kLXNvbmljdmliZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFMzIFNvbmljVmliZXMgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBQSU5FIFNjaHViZXJ0IDMyIFBDSQorCisgICAgcmV2ZXJiICAgIC0gUmV2ZXJiIEVuYWJsZSAtIDEgPSBlbmFibGUsIDAgPSBkaXNhYmxlIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgLSBTb3VuZENhcmQgbXVzdCBoYXZlIG9uYm9hcmQgU1JBTSBmb3IgdGhpcy4KKyAgICBtZ2UgICAgICAgLSBNaWMgR2FpbiBFbmFibGUgLSAxID0gZW5hYmxlLCAwID0gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICAKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcyBhbmQgYXV0b3Byb2JlLgorCisgIE1vZHVsZSBzbmQtc2VyaWFsLXUxNjU1MAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVUFSVDE2NTUwQSBzZXJpYWwgTUlESSBwb3J0cy4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIFVBUlQxNjU1MEEgY2hpcAorICAgIGlycQkJLSBJUlEgIyBmb3IgVUFSVDE2NTUwQSBjaGlwLCAtMSA9IHBvbGwgbW9kZQorICAgIHNwZWVkCS0gc3BlZWQgaW4gYmF1ZHMgKDk2MDAsMTkyMDAsMzg0MDAsNTc2MDAsMTE1MjAwKQorCQkgIDM4NDAwID0gZGVmYXVsdAorICAgIGJhc2UJLSBiYXNlIGZvciBkaXZpc29yIGluIGJhdWRzICg1NzYwMCwxMTUyMDAsMjMwNDAwLDQ2MDgwMCkKKwkJICAxMTUyMDAgPSBkZWZhdWx0CisgICAgb3V0cwktIG51bWJlciBvZiBNSURJIHBvcnRzIGluIGEgc2VyaWFsIHBvcnQgKDEtNCkKKwkJICAxID0gZGVmYXVsdAorICAgIGFkYXB0b3IJLSBUeXBlIG9mIGFkYXB0b3IuCisgICAgICAgICAgICAgICAgICAwID0gU291bmRjYW52YXMsIDEgPSBNUy0xMjRULCAyID0gTVMtMTI0VyBTL0EsCisJCSAgMyA9IE1TLTEyNFcgTS9CLCA0ID0gR2VuZXJpYworICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IGF1dG9wcm9iZQorICAgIHRodXMgdGhlIG1haW4gcG9ydCBtdXN0IGJlIHNwZWNpZmllZCEhISBPdGhlciBvcHRpb25zIGFyZSBvcHRpb25hbC4KKworICBNb2R1bGUgc25kLXRyaWRlbnQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFRyaWRlbnQgNERXYXZlIERYL05YIHNvdW5kIGNhcmRzLgorCQkJKiBCZXN0IFVuaW9uICBNaXNzIE1lbG9keSA0RFdhdmUgUENJCisJCQkqIEhJUyAgNERXYXZlIFBDSQorCQkJKiBXYXJwc3BlZWQgIE9OU3BlZWQgNERXYXZlIFBDSQorCQkJKiBBelRlY2ggIFBDSSA2NC1RM0QKKwkJCSogQWRkb25pY3MgIFNWIDc1MAorCQkJKiBDSElDICBUcnVlIFNvdW5kIDREd2F2ZQorCQkJKiBTaGFyayAgUHJlZGF0b3I0RC1QQ0kKKwkJCSogSmF0b24gIFNvbmljV2F2ZSA0RAorCisgICAgcGNtX2NoYW5uZWxzICAgLSBtYXggY2hhbm5lbHMgKHZvaWNlcykgcmVzZXJ2ZWQgZm9yIFBDTQorICAgIHdhdmV0YWJsZV9zaXplIC0gbWF4IHdhdmV0YWJsZSBzaXplIGluIGtCICg0LT9rYikKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzIGFuZCBhdXRvcHJvYmUuCisKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKKyAgTW9kdWxlIHNuZC11c2ItYXVkaW8KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVVNCIGF1ZGlvIGFuZCBVU0IgTUlESSBkZXZpY2VzLgorCisgICAgdmlkICAgICAgICAgICAgIC0gVmVuZG9yIElEIGZvciB0aGUgZGV2aWNlIChvcHRpb25hbCkKKyAgICBwaWQgICAgICAgICAgICAgLSBQcm9kdWN0IElEIGZvciB0aGUgZGV2aWNlIChvcHRpb25hbCkKKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMsIGF1dG9wcm9iZSBhbmQgaG90cGx1Z2dpbmcuCisKKyAgTW9kdWxlIHNuZC11c2ItdXN4MnkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVGFzY2FtIFVTQiBVUy0xMjIsIFVTLTIyNCBhbmQgVVMtNDI4IGRldmljZXMuCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLCBhdXRvcHJvYmUgYW5kIGhvdHBsdWdnaW5nLgorCisgICAgTm90ZTogeW91IG5lZWQgdG8gbG9hZCB0aGUgZmlybXdhcmUgdmlhIHVzeDJ5bG9hZGVyIHV0aWxpdHkgaW5jbHVkZWQKKyAgICAgICAgICBpbiBhbHNhLXRvb2xzIGFuZCBhbHNhLWZpcm13YXJlIHBhY2thZ2VzLgorCisgIE1vZHVsZSBzbmQtdmlhODJ4eAorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgQUMnOTcgbW90aGVyYm9hcmRzIGJhc2VkIG9uIFZJQSA4MkM2ODZBLzY4NkIsIDgyMzMsCisgICAgODIzM0EsIDgyMzNDLCA4MjM1IChzb3V0aCkgYnJpZGdlLgorCisgICAgbXB1X3BvcnQJLSAweDMwMCwweDMxMCwweDMyMCwweDMzMCwgb3RoZXJ3aXNlIG9idGFpbiBCSU9TIHNldHVwCisJCSAgW1ZJQTY4NkEvNjg2QiBvbmx5XQorICAgIGpveXN0aWNrCS0gRW5hYmxlIGpveXN0aWNrIChkZWZhdWx0IG9mZikgW1ZJQTY4NkEvNjg2QiBvbmx5XQorICAgIGFjOTdfY2xvY2sJLSBBQyc5NyBjb2RlYyBjbG9jayBiYXNlIChkZWZhdWx0IDQ4MDAwSHopCisgICAgZHhzX3N1cHBvcnQJLSBzdXBwb3J0IERYUyBjaGFubmVscywKKwkJICAwID0gYXV0byAoZGVmYWx1dCksIDEgPSBlbmFibGUsIDIgPSBkaXNhYmxlLAorCQkgIDMgPSA0OGsgb25seSwgNCA9IG5vIFZSQQorCQkgIFtWSUE4MjMzL0MsODIzNSBvbmx5XQorICAgIGFjOTdfcXVpcmsgIC0gQUMnOTcgd29ya2Fyb3VuZCBmb3Igc3RyYW5nZSBoYXJkd2FyZQorICAgICAgICAgICAgICAgICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlbDh4MCBtb2R1bGUgZm9yIGRldGFpbHMuCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBidXMtbWFzdGVyIGNoaXBzIChtYXggOCkuCisKKyAgICBOb3RlOiBvbiBzb21lIFNNUCBtb3RoZXJib2FyZHMgbGlrZSBNU0kgNjk0RCB0aGUgaW50ZXJydXB0cyBtaWdodAorICAgICAgICAgIG5vdCBiZSBnZW5lcmF0ZWQgcHJvcGVybHkuICBJbiBzdWNoIGEgY2FzZSwgcGxlYXNlIHRyeSB0bworICAgICAgICAgIHNldCB0aGUgU01QIChvciBNUFMpIHZlcnNpb24gb24gQklPUyB0byAxLjEgaW5zdGVhZCBvZgorICAgICAgICAgIGRlZmF1bHQgdmFsdWUgMS40LiAgVGhlbiB0aGUgaW50ZXJydXB0IG51bWJlciB3aWxsIGJlCisgICAgICAgICAgYXNzaWduZWQgdW5kZXIgMTUuIFlvdSBtaWdodCBhbHNvIHVwZ3JhZGUgeW91ciBCSU9TLgorICAgIAorICAgIE5vdGU6IFZJQTgyMzMvNSAobm90IFZJQTgyMzNBKSBjYW4gc3VwcG9ydCBEWFMgKGRpcmVjdCBzb3VuZCkKKwkgIGNoYW5uZWxzIGFzIHRoZSBmaXJzdCBQQ00uICBPbiB0aGVzZSBjaGFubmVscywgdXAgdG8gNAorCSAgc3RyZWFtcyBjYW4gYmUgcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuCisJICBBcyBkZWZhdWx0IChkeHNfc3VwcG9ydCA9IDApLCA0OGsgZml4ZWQgcmF0ZSBpcyBjaG9zZW4KKwkgIGV4Y2VwdCBmb3IgdGhlIGtub3duIGRldmljZXMgc2luY2UgdGhlIG91dHB1dCBpcyBvZnRlbgorCSAgbm9pc3kgZXhjZXB0IGZvciA0OGsgb24gc29tZSBtb3RoZXIgYm9hcmRzIGR1ZSB0byB0aGUKKwkgIGJ1ZyBvZiBCSU9TLgorCSAgUGxlYXNlIHRyeSBvbmNlIGR4c19zdXBwb3J0PTEgYW5kIGlmIGl0IHdvcmtzIG9uIG90aGVyCisJICBzYW1wbGUgcmF0ZXMgKGUuZy4gNDQuMWtIeiBvZiBtcDMgcGxheWJhY2spLCBwbGVhc2UgbGV0IHVzCisJICBrbm93IHRoZSBQQ0kgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgaWQncyAob3V0cHV0IG9mCisJICAibHNwY2kgLW52IikuCisJICBJZiBpdCBkb2Vzbid0IHdvcmssIHRyeSBkeHNfc3VwcG9ydD00LiAgSWYgaXQgc3RpbGwgZG9lc24ndAorCSAgd29yayBhbmQgdGhlIGRlZmF1bHQgc2V0dGluZyBpcyBvaywgZHhzX3N1cHBvcnQ9MyBpcyB0aGUKKwkgIHJpZ2h0IGNob2ljZS4gIElmIHRoZSBkZWZhdWx0IHNldHRpbmcgZG9lc24ndCB3b3JrIGF0IGFsbCwKKwkgIHRyeSBkeHNfc3VwcG9ydD0yIHRvIGRpc2FibGUgdGhlIERYUyBjaGFubmVscy4KKwkgIEluIGFueSBjYXNlcywgcGxlYXNlIGxldCB1cyBrbm93IHRoZSByZXN1bHQgYW5kIHRoZQorCSAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgaWRzLgorCisgICAgTm90ZTogZm9yIHRoZSBNUFU0MDEgb24gVklBODIzeCwgdXNlIHNuZC1tcHU0MDEgZHJpdmVyCisJICBhZGRpdG9uYWxseS4gIFRoZSBtcHVfcG9ydCBvcHRpb24gaXMgZm9yIFZJQTY4NiBjaGlwcyBvbmx5LgorCisgIE1vZHVsZSBzbmQtdmlhODJ4eC1tb2RlbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgVklBODJ4eCBBQzk3IG1vZGVtCisKKyAgICBhYzk3X2Nsb2NrCS0gQUMnOTcgY29kZWMgY2xvY2sgYmFzZSAoZGVmYXVsdCA0ODAwMEh6KQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuCisKKyAgICBOb3RlOiBUaGUgZGVmYXVsdCBpbmRleCB2YWx1ZSBvZiB0aGlzIG1vZHVsZSBpcyAtMiwgaS5lLiB0aGUgZmlyc3QKKyAgICAgICAgICBzbG90IGlzIGV4Y2x1ZGVkLgorCisgIE1vZHVsZSBzbmQtdmlybWlkaQorICAtLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgdmlydHVhbCByYXdtaWRpIGRldmljZXMuCisgICAgVGhpcyBtb2R1bGUgY3JlYXRlcyB2aXJ0dWFsIHJhd21pZGkgZGV2aWNlcyB3aGljaCBjb21tdW5pY2F0ZQorICAgIHRvIHRoZSBjb3JyZXNwb25kaW5nIEFMU0Egc2VxdWVuY2VyIHBvcnRzLgorCisgICAgbWlkaV9kZXZzCS0gTUlESSBkZXZpY2VzICMgKDEtOCwgZGVmYXVsdD00KQorICAgIAorICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgIE1vZHVsZSBzbmQtdngyMjIKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBEaWdpZ3JhbSBWWC1Qb2NrZXQgVlgyMjIsIFYyMjIgdjIgYW5kIE1pYyBjYXJkcy4KKworICAgIG1pYwkJLSBFbmFibGUgTWljcm9waG9uZSBvbiBWMjIyIE1pYyAoTllJKQorICAgIGlibAkJLSBDYXB0dXJlIElCTCBzaXplLiAoZGVmYXVsdCA9IDAsIG1pbmltdW0gc2l6ZSkKKworICAgIE1vZHVsZSBzdXBwb3J0cyB1cCB0byA4IGNhcmRzLgorCisgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQorICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCisgICAgSW5zdGFsbCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZpbGVzIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKyAgICBXaGVuIG5vIGhvdHBsdWcgZncgbG9hZGVyIGlzIGF2YWlsYWJsZSwgeW91IG5lZWQgdG8gbG9hZCB0aGUKKyAgICBmaXJtd2FyZSB2aWEgdnhsb2FkZXIgdXRpbGl0eSBpbiBhbHNhLXRvb2xzIHBhY2thZ2UuICBUbyBpbnZva2UKKyAgICB2eGxvYWRlciBhdXRvbWF0aWNhbGx5LCBhZGQgdGhlIGZvbGxvd2luZyB0byAvZXRjL21vZHByb2JlLmNvbmYKKworCWluc3RhbGwgc25kLXZ4MjIyIC9zYmluL21vZHByb2JlIC0tZmlyc3QtdGltZSAtaSBzbmQtdngyMjIgJiYgL3Vzci9iaW4vdnhsb2FkZXIKKworICAgIChmb3IgMi4yLzIuNCBrZXJuZWxzLCBhZGQgInBvc3QtaW5zdGFsbCAvdXNyL2Jpbi92eGxvYWRlciIgdG8KKyAgICAgL2V0Yy9tb2R1bGVzLmNvbmYsIGluc3RlYWQuKQorICAgIElCTCBzaXplIGRlZmluZXMgdGhlIGludGVycnVwdHMgcGVyaW9kIGZvciBQQ00uICBUaGUgc21hbGxlciBzaXplCisgICAgZ2l2ZXMgc21hbGxlciBsYXRlbmN5IGJ1dCBsZWFkcyB0byBtb3JlIENQVSBjb25zdW1wdGlvbiwgdG9vLgorICAgIFRoZSBzaXplIGlzIHVzdWFsbHkgYWxpZ25lZCB0byAxMjYuICBBcyBkZWZhdWx0ICg9MCksIHRoZSBzbWFsbGVzdAorICAgIHNpemUgaXMgY2hvc2VuLiAgVGhlIHBvc3NpYmxlIElCTCB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluCisgICAgL3Byb2MvYXNvdW5kL2NhcmRYL3Z4LXN0YXR1cyBwcm9jIGZpbGUuCisKKyAgTW9kdWxlIHNuZC12eHBvY2tldAorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIERpZ2lncmFtIFZYLVBvY2tldCBWWDIgUENNQ0lBIGNhcmQuCisKKyAgICBpYmwgICAgICAtIENhcHR1cmUgSUJMIHNpemUuIChkZWZhdWx0ID0gMCwgbWluaW11bSBzaXplKQorCisgICAgTW9kdWxlIHN1cHBvcnRzIHVwIHRvIDggY2FyZHMuICBUaGUgbW9kdWxlIGlzIGNvbXBpbGVkIG9ubHkgd2hlbgorICAgIFBDTUNJQSBpcyBzdXBwb3J0ZWQgb24ga2VybmVsLgorCisgICAgVG8gYWN0aXZhdGUgdGhlIGRyaXZlciB2aWEgdGhlIGNhcmQgbWFuYWdlciwgeW91J2xsIG5lZWQgdG8gc2V0CisgICAgdXAgL2V0Yy9wY21jaWEvdnhwb2NrZXQuY29uZi4gIFNlZSB0aGUgc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMuCisKKyAgICBXaGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHRoZSBob3RwbHVnIGZpcm13YXJlCisgICAgaXMgc3VwcG9ydGVkLCB0aGUgZmlybXdhcmUgZGF0YSBpcyBsb2FkZWQgdmlhIGhvdHBsdWcgYXV0b21hdGljYWxseS4KKyAgICBJbnN0YWxsIHRoZSBuZWNlc3NhcnkgZmlybXdhcmUgZmlsZXMgaW4gYWxzYS1maXJtd2FyZSBwYWNrYWdlLgorICAgIFdoZW4gbm8gaG90cGx1ZyBmdyBsb2FkZXIgaXMgYXZhaWxhYmxlLCB5b3UgbmVlZCB0byBsb2FkIHRoZQorICAgIGZpcm13YXJlIHZpYSB2eGxvYWRlciB1dGlsaXR5IGluIGFsc2EtdG9vbHMgcGFja2FnZS4KKworICAgIEFib3V0IGNhcHR1cmUgSUJMLCBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHNuZC12eDIyMiBtb2R1bGUuCisKKyAgICBOb3RlOiB0aGUgZHJpdmVyIGlzIGJ1aWxkIG9ubHkgd2hlbiBDT05GSUdfSVNBIGlzIHNldC4KKyAgICAKKyAgTW9kdWxlIHNuZC12eHA0NDAKKyAgLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE1vZHVsZSBmb3IgRGlnaWdyYW0gVlgtUG9ja2V0IDQ0MCBQQ01DSUEgY2FyZC4KKworICAgIGlibCAgICAgIC0gQ2FwdHVyZSBJQkwgc2l6ZS4gKGRlZmF1bHQgPSAwLCBtaW5pbXVtIHNpemUpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgdXAgdG8gOCBjYXJkcy4gIFRoZSBtb2R1bGUgaXMgY29tcGlsZWQgb25seSB3aGVuCisgICAgUENNQ0lBIGlzIHN1cHBvcnRlZCBvbiBrZXJuZWwuCisKKyAgICBUbyBhY3RpdmF0ZSB0aGUgZHJpdmVyIHZpYSB0aGUgY2FyZCBtYW5hZ2VyLCB5b3UnbGwgbmVlZCB0byBzZXQKKyAgICB1cCAvZXRjL3BjbWNpYS92eHA0NDAuY29uZi4gIFNlZSB0aGUgc291bmQvcGNtY2lhL3Z4L3Z4cDQ0MC5jLgorCisgICAgV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGFuZCB0aGUgaG90cGx1ZyBmaXJtd2FyZQorICAgIGlzIHN1cHBvcnRlZCwgdGhlIGZpcm13YXJlIGRhdGEgaXMgbG9hZGVkIHZpYSBob3RwbHVnIGF1dG9tYXRpY2FsbHkuCisgICAgSW5zdGFsbCB0aGUgbmVjZXNzYXJ5IGZpcm13YXJlIGZpbGVzIGluIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KKyAgICBXaGVuIG5vIGhvdHBsdWcgZncgbG9hZGVyIGlzIGF2YWlsYWJsZSwgeW91IG5lZWQgdG8gbG9hZCB0aGUKKyAgICBmaXJtd2FyZSB2aWEgdnhsb2FkZXIgdXRpbGl0eSBpbiBhbHNhLXRvb2xzIHBhY2thZ2UuCisKKyAgICBBYm91dCBjYXB0dXJlIElCTCwgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBzbmQtdngyMjIgbW9kdWxlLgorCisgICAgTm90ZTogdGhlIGRyaXZlciBpcyBidWlsZCBvbmx5IHdoZW4gQ09ORklHX0lTQSBpcyBzZXQuCisgICAgCisgIE1vZHVsZSBzbmQteW1mcGNpCisgIC0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFlhbWFoYSBQQ0kgY2hpcHMgKFlNRjcyeCwgWU1GNzR4ICYgWU1GNzV4KS4KKworICAgIG1wdV9wb3J0ICAgICAgLSAweDMwMCwweDMzMCwweDMzMiwweDMzNCwgMCAoZGlzYWJsZSkgYnkgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgMSAoYXV0by1kZXRlY3QgZm9yIFlNRjc0NC83NTQgb25seSkKKyAgICBmbV9wb3J0ICAgICAgIC0gMHgzODgsMHgzOTgsMHgzYTAsMHgzYTgsIDAgKGRpc2FibGUpIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgMSAoYXV0by1kZXRlY3QgZm9yIFlNRjc0NC83NTQgb25seSkKKyAgICBqb3lzdGlja19wb3J0IC0gMHgyMDEsMHgyMDIsMHgyMDQsMHgyMDUsIDAgKGRpc2FibGUpIGJ5IGRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgIDEgKGF1dG8tZGV0ZWN0KQorICAgIHJlYXJfc3dpdGNoICAgLSBlbmFibGUgc2hhcmVkIHJlYXIvbGluZS1pbiBzd2l0Y2ggKGJvb2wpCisKKyAgICBNb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjaGlwcyAobWF4IDgpLgorCisgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgorCisgIE1vZHVsZSBzbmQtcGRhdWRpb2NmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFNvdW5kIENvcmUgUERBdWRpb0NGIHNvdW5kIGNhcmQuCisKKyAgICBOb3RlOiB0aGUgZHJpdmVyIGlzIGJ1aWxkIG9ubHkgd2hlbiBDT05GSUdfSVNBIGlzIHNldC4KKworCitDb25maWd1cmluZyBOb24tSVNBUE5QIENhcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGggSVNBLVBuUCBzdXBwb3J0LCB0aGUgbW9kdWxlcworc3VwcG9ydGluZyB0aGUgaXNhcG5wIGNhcmRzIHdpbGwgaGF2ZSBtb2R1bGUgb3B0aW9ucyAiaXNhcG5wIi4KK0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgKm9ubHkqIHRoZSBJU0EtUG5QIGRldmljZXMgd2lsbCBiZSBwcm9iZWQuCitGb3IgcHJvYmluZyB0aGUgbm9uIElTQS1QblAgY2FyZHMsIHlvdSBoYXZlIHRvIHBhc3MgImlzYXBucD0wIiBvcHRpb24KK3RvZ2V0aGVyIHdpdGggdGhlIHByb3BlciBpL28gYW5kIGlycSBjb25maWd1cmF0aW9uLgorCitXaGVuIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCB3aXRob3V0IElTQS1QblAgc3VwcG9ydCwgaXNhcG5wIG9wdGlvbgord2lsbCBiZSBub3QgYnVpbHQgaW4uCisKKworTW9kdWxlIEF1dG9sb2FkaW5nIFN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBBTFNBIGRyaXZlcnMgY2FuIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IG9uIGRlbWFuZCBieSBkZWZpbmluZworbW9kdWxlIGFsaWFzZXMuICBUaGUgc3RyaW5nICdzbmQtY2FyZC0lMScgaXMgcmVxdWVzdGVkIGZvciBBTFNBIG5hdGl2ZQorZGV2aWNlcyB3aGVyZSAlaSBpcyBzb3VuZCBjYXJkIG51bWJlciBmcm9tIHplcm8gdG8gc2V2ZW4uCisKK1RvIGF1dG8tbG9hZCBhbiBBTFNBIGRyaXZlciBmb3IgT1NTIHNlcnZpY2VzLCBkZWZpbmUgdGhlIHN0cmluZworJ3NvdW5kLXNsb3QtJWknIHdoZXJlICVpIG1lYW5zIHRoZSBzbG90IG51bWJlciBmb3IgT1NTLCB3aGljaAorY29ycmVzcG9uZHMgdG8gdGhlIGNhcmQgaW5kZXggb2YgQUxTQS4gIFVzdWFsbHksIGRlZmluZSB0aGlzCithcyB0aGUgdGhlIHNhbWUgY2FyZCBtb2R1bGUuCisKK0FuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgZW11MTBrMSBjYXJkIGlzIGxpa2UgYmVsb3c6CistLS0tLSAvZXRjL21vZHByb2JlLmNvbmYKK2FsaWFzIHNuZC1jYXJkLTAgc25kLWVtdTEwazEKK2FsaWFzIHNvdW5kLXNsb3QtMCBzbmQtZW11MTBrMQorLS0tLS0gL2V0Yy9tb2Rwcm9iZS5jb25mCisKK1RoZSBhdmFpbGFibGUgbnVtYmVyIG9mIGF1dG8tbG9hZGVkIHNvdW5kIGNhcmRzIGRlcGVuZHMgb24gdGhlIG1vZHVsZQorb3B0aW9uICJjYXJkc19saW1pdCIgb2Ygc25kIG1vZHVsZS4gIEFzIGRlZmF1bHQgaXQncyBzZXQgdG8gMS4KK1RvIGVuYWJsZSB0aGUgYXV0by1sb2FkaW5nIG9mIG11bHRpcGxlIGNhcmRzLCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YKK3NvdW5kIGNhcmRzIGluIHRoYXQgb3B0aW9uLgorCitXaGVuIG11bHRpcGxlIGNhcmRzIGFyZSBhdmFpbGFibGUsIGl0J2QgYmV0dGVyIHRvIHNwZWNpZnkgdGhlIGluZGV4CitudW1iZXIgZm9yIGVhY2ggY2FyZCB2aWEgbW9kdWxlIG9wdGlvbiwgdG9vLCBzbyB0aGF0IHRoZSBvcmRlciBvZgorY2FyZHMgaXMga2VwdCBjb25zaXN0ZW50LgorCitBbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIHR3byBzb3VuZCBjYXJkcyBpcyBsaWtlIGJlbG93OgorCistLS0tLSAvZXRjL21vZHByb2JlLmNvbmYKKyMgQUxTQSBwb3J0aW9uCitvcHRpb25zIHNuZCBjYXJkc19saW1pdD0yCithbGlhcyBzbmQtY2FyZC0wIHNuZC1pbnRlcndhdmUKK2FsaWFzIHNuZC1jYXJkLTEgc25kLWVuczEzNzEKK29wdGlvbnMgc25kLWludGVyd2F2ZSBpbmRleD0wCitvcHRpb25zIHNuZC1lbnMxMzcxIGluZGV4PTEKKyMgT1NTL0ZyZWUgcG9ydGlvbgorYWxpYXMgc291bmQtc2xvdC0wIHNuZC1pbnRlcndhdmUKK2FsaWFzIHNvdW5kLXNsb3QtMSBzbmQtZW5zMTM3MQorLS0tLS0gL2V0Yy9tb3Byb2JlLmNvbmYKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgaW50ZXJ3YXZlIGNhcmQgaXMgYWx3YXlzIGxvYWRlZCBhcyB0aGUgZmlyc3QgY2FyZAorKGluZGV4IDApIGFuZCBlbnMxMzcxIGFzIHRoZSBzZWNvbmQgKGluZGV4IDEpLgorCisKK0FMU0EgUENNIGRldmljZXMgdG8gT1NTIGRldmljZXMgbWFwcGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy9kZXYvc25kL3BjbUMwRDBbY3xwXSAgLT4gL2Rldi9hdWRpbzAgKC9kZXYvYXVkaW8pIC0+IG1pbm9yIDQKKy9kZXYvc25kL3BjbUMwRDBbY3xwXSAgLT4gL2Rldi9kc3AwICgvZGV2L2RzcCkgICAgIC0+IG1pbm9yIDMKKy9kZXYvc25kL3BjbUMwRDFbY3xwXSAgLT4gL2Rldi9hZHNwMCAoL2Rldi9hZHNwKSAgIC0+IG1pbm9yIDEyCisvZGV2L3NuZC9wY21DMUQwW2N8cF0gIC0+IC9kZXYvYXVkaW8xICAgICAgICAgICAgICAtPiBtaW5vciA0KzE2ID0gMjAKKy9kZXYvc25kL3BjbUMxRDBbY3xwXSAgLT4gL2Rldi9kc3AxICAgICAgICAgICAgICAgIC0+IG1pbm9yIDMrMTYgPSAxOQorL2Rldi9zbmQvcGNtQzFEMVtjfHBdICAtPiAvZGV2L2Fkc3AxICAgICAgICAgICAgICAgLT4gbWlub3IgMTIrMTYgPSAyOAorL2Rldi9zbmQvcGNtQzJEMFtjfHBdICAtPiAvZGV2L2F1ZGlvMiAgICAgICAgICAgICAgLT4gbWlub3IgNCszMiA9IDM2CisvZGV2L3NuZC9wY21DMkQwW2N8cF0gIC0+IC9kZXYvZHNwMiAgICAgICAgICAgICAgICAtPiBtaW5vciAzKzMyID0gMzkKKy9kZXYvc25kL3BjbUMyRDFbY3xwXSAgLT4gL2Rldi9hZHNwMiAgICAgICAgICAgICAgIC0+IG1pbm9yIDEyKzMyID0gNDQKKworVGhlIGZpcnN0IG51bWJlciBmcm9tIC9kZXYvc25kL3BjbUN7WH1Ee1l9W2N8cF0gZXhwcmVzc2lvbiBtZWFucworc291bmQgY2FyZCBudW1iZXIgYW5kIHNlY29uZCBtZWFucyBkZXZpY2UgbnVtYmVyLiAgVGhlIEFMU0EgZGV2aWNlcworaGF2ZSBlaXRoZXIgJ2MnIG9yICdwJyBzdWZmaXggaW5kaWNhdGluZyB0aGUgZGlyZWN0aW9uLCBjYXB0dXJlIGFuZAorcGxheWJhY2ssIHJlc3BlY3RpdmVseS4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgZGV2aWNlIG1hcHBpbmcgYWJvdmUgbWF5IGJlIHZhcmllZCB2aWEgdGhlIG1vZHVsZQorb3B0aW9ucyBvZiBzbmQtcGNtLW9zcyBtb2R1bGUuCisKKworREVWRlMgc3VwcG9ydAorPT09PT09PT09PT09PQorCitUaGUgQUxTQSBkcml2ZXIgZnVsbHkgc3VwcG9ydHMgdGhlIGRldmZzIGV4dGVuc2lvbi4KK1lvdSBzaG91bGQgYWRkIGxpbmVzIGJlbG93IHRvIHlvdXIgZGV2ZnNkLmNvbmYgZmlsZToKKworTE9PS1VQIHNuZCBNT0RMT0FEIEFDVElPTiBzbmQKK1JFR0lTVEVSIF5zb3VuZC8uKiBQRVJNSVNTSU9OUyByb290LmF1ZGlvIDY2MAorUkVHSVNURVIgXnNuZC8uKiBQRVJNSVNTSU9OUyByb290LmF1ZGlvIDY2MAorCitXYXJuaW5nOiBUaGVzZSBsaW5lcyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSB0aGUgYXVkaW8gZ3JvdXAgaW4geW91ciBzeXN0ZW0uCisgICAgICAgICBPdGhlcndpc2UgcmVwbGFjZSBhdWRpbyB3b3JkIHdpdGggYW5vdGhlciBncm91cCBuYW1lIChyb290IGZvcgorICAgICAgICAgZXhhbXBsZSkuCisKKworUHJvYyBpbnRlcmZhY2VzICgvcHJvYy9hc291bmQpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworL3Byb2MvYXNvdW5kL2NhcmQjL3BjbSNbY3BdL29zcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdHJpbmcgImVyYXNlIiAtIGVyYXNlIGFsbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9ucyBhYm91dCBPU1MgYXBwbGljYXRpb25zCisgIFN0cmluZyAiPGFwcF9uYW1lPiA8ZnJhZ21lbnRzPiA8ZnJhZ21lbnRfc2l6ZT4gWzxvcHRpb25zPl0iCisKKyAgIDxhcHBfbmFtZT4gLSBuYW1lIG9mIGFwcGxpY2F0aW9uIHdpdGggKGhpZ2hlciBwcmlvcml0eSkgb3Igd2l0aG91dCBwYXRoCisgICA8ZnJhZ21lbnRzPiAtIG51bWJlciBvZiBmcmFnbWVudHMgb3IgemVybyBpZiBhdXRvCisgICA8ZnJhZ21lbnRfc2l6ZT4gLSBzaXplIG9mIGZyYWdtZW50IGluIGJ5dGVzIG9yIHplcm8gaWYgYXV0bworICAgPG9wdGlvbnM+IC0gb3B0aW9uYWwgcGFyYW1ldGVycworCSAgLSBkaXNhYmxlICAgdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIG9wZW4gYSBwY20gZGV2aWNlIGZvcgorCQkgICAgICB0aGlzIGNoYW5uZWwgYnV0IGRvZXMgbm90IHdhbnQgdG8gdXNlIGl0LgorCQkgICAgICAoQ2F1c2UgYSBidWcgb3IgbW1hcCBuZWVkcykKKwkJICAgICAgSXQncyBnb29kIGZvciBRdWFrZSBldGMuLi4KKwkgIC0gZGlyZWN0ICAgIGRvbid0IHVzZSBwbHVnaW5zCisJICAtIGJsb2NrICAgICBmb3JjZSBibG9jayBtb2RlIChydnBsYXllcikKKwkgIC0gbm9uLWJsb2NrIGZvcmNlIG5vbi1ibG9jayBtb2RlCisJICAtIHdob2xlLWZyYWcgIHdyaXRlIG9ubHkgd2hvbGUgZnJhZ21lbnRzIChvcHRpbWl6YXRpb24gYWZmZWN0aW5nCisJCQlwbGF5YmFjayBvbmx5KQorCSAgLSBuby1zaWxlbmNlICBkbyBub3QgZmlsbCBzaWxlbmNlIGFoZWFkIHRvIGF2b2lkIGNsaWNrcworCisgIEV4YW1wbGU6IGVjaG8gIngxMWFtcCAxMjggMTYzODQiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworICAgICAgICAgICBlY2hvICJzcXVha2UgMCAwIGRpc2FibGUiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBjL29zcworCSAgIGVjaG8gInJ2cGxheWVyIDAgMCBibG9jayIgPiAvcHJvYy9hc291bmQvY2FyZDAvcGNtMHAvb3NzCisKKworTGlua3MKKz09PT09CisKKyAgQUxTQSBwcm9qZWN0IGhvbWVwYWdlCisgICAgICAgaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpZ3ktbWl4ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlneS1taXhlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzMmZkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpZ3ktbWl4ZXIudHh0CkBAIC0wLDAgKzEsMzQ1IEBACisKKwkJU291bmQgQmxhc3RlciBBdWRpZ3kgbWl4ZXIgLyBkZWZhdWx0IERTUCBjb2RlCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBiYXNlZCBvbiBTQi1MaXZlLW1peGVyLnR4dC4KKworVGhlIEVNVTEwSzIgY2hpcHMgaGF2ZSBhIERTUCBwYXJ0IHdoaWNoIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHN1cHBvcnQgCit2YXJpb3VzIHdheXMgb2Ygc2FtcGxlIHByb2Nlc3NpbmcsIHdoaWNoIGlzIGRlc2NyaWJlZCBoZXJlLgorKFRoaXMgYWN0aWNsZSBkb2VzIG5vdCBkZWFsIHdpdGggdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgCitFTVUxMEsyIGNoaXBzLiBTZWUgdGhlIG1hbnVhbHMgc2VjdGlvbiBmb3IgZnVydGhlciBkZXRhaWxzLikKKworVGhlIEFMU0EgZHJpdmVyIHByb2dyYW1zIHRoaXMgcG9ydGlvbiBvZiBjaGlwIGJ5IGRlZmF1bHQgY29kZQorKGNhbiBiZSBhbHRlcmVkIGxhdGVyKSB3aGljaCBvZmZlcnMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5OgorCisKKzEpIERpZ2l0YWwgbWl4ZXIgY29udHJvbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29udHJvbHMgYXJlIGJ1aWx0IHVzaW5nIHRoZSBEU1AgaW5zdHJ1Y3Rpb25zLiBUaGV5IG9mZmVyIGV4dGVuZGVkCitmdW5jdGlvbmFsaXR5LiBPbmx5IHRoZSBkZWZhdWx0IGJ1aWxkLWluIGNvZGUgaW4gdGhlIEFMU0EgZHJpdmVyIGlzIGRlc2NyaWJlZAoraGVyZS4gTm90ZSB0aGF0IHRoZSBjb250cm9scyB3b3JrIGFzIGF0dGVudWF0b3JzOiB0aGUgbWF4aW11bSB2YWx1ZSBpcyB0aGUgCituZXV0cmFsIHBvc2l0aW9uIGxlYXZpbmcgdGhlIHNpZ25hbCB1bmNoYW5nZWQuIE5vdGUgdGhhdCBpZiB0aGUgIHNhbWUgZGVzdGluYXRpb24gCitpcyBtZW50aW9uZWQgaW4gbXVsdGlwbGUgY29udHJvbHMsIHRoZSBzaWduYWwgaXMgYWNjdW11bGF0ZWQgYW5kIGNhbiBiZSB3cmFwcGVkIAorKHNldCB0byBtYXhpbWFsIG9yIG1pbmltYWwgdmFsdWUgd2l0aG91dCBjaGVja2luZyBvZiBvdmVyZmxvdykuCisKKworRXhwbGFuYXRpb24gb2YgdXNlZCBhYmJyZXZpYXRpb25zOgorCitEQUMgICAgLSBkaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXIKK0FEQyAgICAtIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcgorSTJTICAgIC0gb25lLXdheSB0aHJlZSB3aXJlIHNlcmlhbCBidXMgZm9yIGRpZ2l0YWwgc291bmQgYnkgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICAgICAgICAgKHRoaXMgc3RhbmRhcmQgaXMgdXNlZCBmb3IgY29ubmVjdGluZyBzdGFuZGFsb25lIERBQyBhbmQgQURDIGNvbnZlcnRlcnMpCitMRkUgICAgLSBsb3cgZnJlcXVlbmN5IGVmZmVjdHMgKHN1Yndvb2ZlciBzaWduYWwpCitBQzk3ICAgLSBhIGNoaXAgY29udGFpbmluZyBhbiBhbmFsb2cgbWl4ZXIsIERBQyBhbmQgQURDIGNvbnZlcnRlcnMKK0lFQzk1OCAtIFMvUERJRgorRlgtYnVzIC0gdGhlIEVNVTEwSzIgY2hpcCBoYXMgYW4gZWZmZWN0IGJ1cyBjb250YWluaW5nIDY0IGFjY3VtdWxhdG9ycy4KKyAgICAgICAgIEVhY2ggb2YgdGhlIHN5bnRoZXNpemVyIHZvaWNlcyBjYW4gZmVlZCBpdHMgb3V0cHV0IHRvIHRoZXNlIGFjY3VtdWxhdG9ycworICAgICAgICAgYW5kIHRoZSBEU1AgbWljcm9jb250cm9sbGVyIGNhbiBvcGVyYXRlIHdpdGggdGhlIHJlc3VsdGluZyBzdW0uCisKK25hbWU9J1BDTSBGcm9udCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IGZyb250IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyA4IGFuZCA5IGZvciBsZWZ0IGFuZCByaWdodCBmcm9udCBQQ00gCitzYW1wbGVzIGZvciA1LjEgcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIAorc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBzdXJyb3VuZCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMiBhbmQgMyBmb3IgbGVmdCBhbmQgcmlnaHQgc3Vycm91bmQgUENNIAorc2FtcGxlcyBmb3IgNS4xIHBsYXliYWNrLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgc3Vycm91bmQgREFDIFBDTSAKK3Nsb3RzIG9mIHRoZSBQaGlsaXBzIERBQy4KKworbmFtZT0nUENNIENlbnRlciBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGNlbnRlciBQQ00gRlgtYnVzIGFjY3VtdWxhdG9yLgorQUxTQSB1c2VzIGFjY3VtdWxhdG9yIDYgZm9yIGNlbnRlciBQQ00gc2FtcGxlIGZvciA1LjEgcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlCitpcyBmb3J3YXJkZWQgdG8gdGhlIGNlbnRlciBEQUMgUENNIHNsb3Qgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gTEZFIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBMRkUgUENNIEZYLWJ1cyBhY2N1bXVsYXRvci4gCitBTFNBIHVzZXMgYWNjdW11bGF0b3IgNyBmb3IgTEZFIFBDTSBzYW1wbGUgZm9yIDUuMSBwbGF5YmFjay4gVGhlIHJlc3VsdCBzYW1wbGUgCitpcyBmb3J3YXJkZWQgdG8gdGhlIExGRSBEQUMgUENNIHNsb3Qgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIHNhbXBsZXMgZm9yCitzdGVyZW8gcGxheWJhY2suIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIAorb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdQQ00gQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDAgYW5kIDEgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nTXVzaWMgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cworYWNjdW11bGF0b3JzLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgc2FtcGxlcy4KK1RoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdNdXNpYyBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKK2FjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nTWljIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTWljIGlucHV0LgorRm9yIE1pYyBpbnB1dCBpcyB1c2VkIEFDOTcgY29kZWMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIAordGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLiBTYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gTWljCitjYXB0dXJlIEZJRk8gKGRldmljZSAxIC0gMTZiaXQvOEtIeiBtb25vKSB0b28gd2l0aG91dCB2b2x1bWUgY29udHJvbC4KKworbmFtZT0nTWljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNaWMgaW5wdXQuCitUaGUgcmVzdWx0IGlzIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZQorUENNIGRldmljZSkuCisKK25hbWU9J0F1ZGlneSBDRCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdBdWRpZ3kgQ0QgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0lFQzk1OCBPcHRpY2FsIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0LiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cworb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdJRUM5NTggT3B0aWNhbCBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0cy4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8KKyh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorCituYW1lPSdMaW5lMiBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBBdWRpZ3lEcml2ZSkuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udAorREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuCisKK25hbWU9J0xpbmUyIENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgQXVkaWd5RHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0FuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIGZyb20gUGhpbGlwcyBBREMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udAorREFDIFBDTSBzbG90cyBvZiB0aGUgUGhpbGlwcyBEQUMuIFRoaXMgY29udGFpbnMgbWl4IGZyb20gYW5hbG9nIHNvdXJjZXMKK2xpa2UgQ0QsIExpbmUgSW4sIEF1eCwgLi4uLgorCituYW1lPSdBbmFsb2cgTWl4IENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIFBoaWxpcHMgQURDLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0F1eDIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgQXVkaWd5RHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQKK0RBQyBQQ00gc2xvdHMgb2YgdGhlIFBoaWxpcHMgREFDLgorCituYW1lPSdBdXgyIENhcHR1cmUgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgQXVkaWd5RHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0Zyb250IFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgZnJvbnQgc3BlYWtlcnMgb2YKK3RoaXMgbWl4LgorCituYW1lPSdTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworQWxsIHN0ZXJlbyBzaWduYWxzIGFyZSBtaXhlZCB0b2dldGhlciBhbmQgbWlycm9yZWQgdG8gc3Vycm91bmQsIGNlbnRlciBhbmQgTEZFLgorVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHN1cnJvdW5kIHNwZWFrZXJzIG9mCit0aGlzIG1peC4KKworbmFtZT0nQ2VudGVyIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBjZW50ZXIgc3BlYWtlciBvZiB0aGlzIG1peC4KKworbmFtZT0nTEZFIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitBbGwgc3RlcmVvIHNpZ25hbHMgYXJlIG1peGVkIHRvZ2V0aGVyIGFuZCBtaXJyb3JlZCB0byBzdXJyb3VuZCwgY2VudGVyIGFuZCBMRkUuCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBMRkUgc3BlYWtlciBvZiB0aGlzIG1peC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gU3dpdGNoJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCB0dXJucyB0aGUgdG9uZSBjb250cm9sIG9uIG9yIG9mZi4gVGhlIHNhbXBsZXMgZm9yIGZyb250LCByZWFyCithbmQgY2VudGVyIC8gTEZFIG91dHB1dHMgYXJlIGFmZmVjdGVkLgorCituYW1lPSdUb25lIENvbnRyb2wgLSBCYXNzJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBzZXRzIHRoZSBiYXNzIGludGVuc2l0eS4gVGhlcmUgaXMgbm8gbmV1dHJhbCB2YWx1ZSEhCitXaGVuIHRoZSB0b25lIGNvbnRyb2wgY29kZSBpcyBhY3RpdmF0ZWQsIHRoZSBzYW1wbGVzIGFyZSBhbHdheXMgbW9kaWZpZWQuCitUaGUgY2xvc2VzdCB2YWx1ZSB0byBwdXJlIHNpZ25hbCBpcyAyMC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gVHJlYmxlJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBzZXRzIHRoZSB0cmVibGUgaW50ZW5zaXR5LiBUaGVyZSBpcyBubyBuZXV0cmFsIHZhbHVlISEKK1doZW4gdGhlIHRvbmUgY29udHJvbCBjb2RlIGlzIGFjdGl2YXRlZCwgdGhlIHNhbXBsZXMgYXJlIGFsd2F5cyBtb2RpZmllZC4KK1RoZSBjbG9zZXN0IHZhbHVlIHRvIHB1cmUgc2lnbmFsIGlzIDIwLgorCituYW1lPSdNYXN0ZXIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBmcm9udCwgc3Vycm91bmQsIGNlbnRlciBhbmQgCitMRkUgb3V0cHV0cy4KKworbmFtZT0nSUVDOTU4IE9wdGljYWwgUmF3IFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MAorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlcyBmb3IgdGhlIElFQzk1OCAoUy9QRElGKSBkaWdpdGFsCitvdXRwdXQgYXJlIHRha2VuIG9ubHkgZnJvbSB0aGUgcmF3IEZYODAxMCBQQ00sIG90aGVyd2lzZSBzdGFuZGFyZCBmcm9udAorUENNIHNhbXBsZXMgYXJlIHRha2VuLgorCisKKzIpIFBDTSBzdHJlYW0gcmVsYXRlZCBjb250cm9scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25hbWU9J0VNVTEwSzEgUENNIFZvbHVtZScsaW5kZXggMC0zMQorCitDaGFubmVsIHZvbHVtZSBhdHRlbnVhdGlvbiBpbiByYW5nZSAwLTB4ZmZmZi4gVGhlIG1heGltdW0gdmFsdWUgKG5vCithdHRlbnVhdGlvbikgaXMgZGVmYXVsdC4gVGhlIGNoYW5uZWwgbWFwcGluZyBmb3IgdGhyZWUgdmFsdWVzIGlzCithcyBmb2xsb3dzOgorCisJMCAtIG1vbm8sIGRlZmF1bHQgMHhmZmZmIChubyBhdHRlbnVhdGlvbikKKwkxIC0gbGVmdCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCTIgLSByaWdodCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFJvdXRpbmcnLGluZGV4IDAtMzEKKworVGhpcyBjb250cm9sIHNwZWNpZmllcyB0aGUgZGVzdGluYXRpb24gLSBGWC1idXMgYWNjdW11bGF0b3JzLiBUaGVyZSAyNAordmFsdWVzIHdpdGggdGhpcyBtYXBwaW5nOgorCisJIDAgLSAgbW9ubywgQSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkgMSAtICBtb25vLCBCIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMQorCSAyIC0gIG1vbm8sIEMgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAyCisJIDMgLSAgbW9ubywgRCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDMKKwkgNCAtICBtb25vLCBFIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCSA1IC0gIG1vbm8sIEYgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJIDYgLSAgbW9ubywgRyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkgNyAtICBtb25vLCBIIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCSA4IC0gIGxlZnQsIEEgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJIDkgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDEKKwkxMCAtICBsZWZ0LCBDIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMgorCTExIC0gIGxlZnQsIEQgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAzCisJMTIgLSAgbGVmdCwgRSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkxMyAtICBsZWZ0LCBGIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTE0IC0gIGxlZnQsIEcgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMTUgLSAgbGVmdCwgSCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkxNiAtIHJpZ2h0LCBBIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTE3IC0gcmlnaHQsIEIgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAxCisJMTggLSByaWdodCwgQyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDIKKwkxOSAtIHJpZ2h0LCBEIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMworCTIwIC0gcmlnaHQsIEUgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisJMjEgLSByaWdodCwgRiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtNjMpLCBkZWZhdWx0IDAKKwkyMiAtIHJpZ2h0LCBHIGRlc3RpbmF0aW9uIChGWC1idXMgMC02MyksIGRlZmF1bHQgMAorCTIzIC0gcmlnaHQsIEggZGVzdGluYXRpb24gKEZYLWJ1cyAwLTYzKSwgZGVmYXVsdCAwCisKK0Rvbid0IGZvcmdldCB0aGF0IGl0J3MgaWxsZWdhbCB0byBhc3NpZ24gYSBjaGFubmVsIHRvIHRoZSBzYW1lIEZYLWJ1cyBhY2N1bXVsYXRvciAKK21vcmUgdGhhbiBvbmNlIChpdCBtZWFucyAwPTAgJiYgMT0wIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24pLgorIAorbmFtZT0nRU1VMTBLMSBQQ00gU2VuZCBWb2x1bWUnLGluZGV4IDAtMzEKKworSXQgc3BlY2lmaWVzIHRoZSBhdHRlbnVhdGlvbiAoYW1vdW50KSBmb3IgZ2l2ZW4gZGVzdGluYXRpb24gaW4gcmFuZ2UgMC0yNTUuCitUaGUgY2hhbm5lbCBtYXBwaW5nIGlzIGZvbGxvd2luZzoKKworCSAwIC0gIG1vbm8sIEEgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCSAxIC0gIG1vbm8sIEIgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCSAyIC0gIG1vbm8sIEMgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSAzIC0gIG1vbm8sIEQgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA0IC0gIG1vbm8sIEUgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA1IC0gIG1vbm8sIEYgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA2IC0gIG1vbm8sIEcgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA3IC0gIG1vbm8sIEggZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCSA4IC0gIGxlZnQsIEEgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCSA5IC0gIGxlZnQsIEIgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTEwIC0gIGxlZnQsIEMgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTExIC0gIGxlZnQsIEQgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTEyIC0gIGxlZnQsIEUgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTEzIC0gIGxlZnQsIEYgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE0IC0gIGxlZnQsIEcgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE1IC0gIGxlZnQsIEggZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE2IC0gcmlnaHQsIEEgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE3IC0gcmlnaHQsIEIgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAyNTUgKG5vIGF0dGVudWF0aW9uKQorCTE4IC0gcmlnaHQsIEMgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTE5IC0gcmlnaHQsIEQgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIwIC0gcmlnaHQsIEUgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIxIC0gcmlnaHQsIEYgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIyIC0gcmlnaHQsIEcgZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCTIzIC0gcmlnaHQsIEggZGVzdGluYXRpb24gYXR0biwgZGVmYXVsdCAwIChtdXRlKQorCisKKworNCkgTUFOVUFMUy9QQVRFTlRTOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdHA6Ly9vcGVuc291cmNlLmNyZWF0aXZlLmNvbS9wdWIvZG9jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgRmlsZXM6CisgICAgICAgIExNNDU0NS5wZGYgICAgICBBQzk3IENvZGVjCisKKyAgICAgICAgbTIwNDkucGRmICAgICAgIFRoZSBFTVUxMEsxIERpZ2l0YWwgQXVkaW8gUHJvY2Vzc29yCisKKyAgICAgICAgaG9nNjMucHMgICAgICAgIEZYODAxMCAtIEEgRFNQIENoaXAgQXJjaGl0ZWN0dXJlIGZvciBBdWRpbyBFZmZlY3RzCisKKworV0lQTyBQYXRlbnRzCistLS0tLS0tLS0tLS0KKyAgICAgICAgUGF0ZW50IG51bWJlcnM6CisgICAgICAgIFdPIDk5MDE4MTMgKEExKSBBdWRpbyBFZmZlY3RzIFByb2Nlc3NvciB3aXRoIG11bHRpcGxlIGFzeW5jaHJvbm91cyAoSmFuLiAxNCwgMTk5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXMKKworICAgICAgICBXTyA5OTAxODE0IChBMSkgUHJvY2Vzc29yIHdpdGggSW5zdHJ1Y3Rpb24gU2V0IGZvciBBdWRpbyBFZmZlY3RzIChKYW4uIDE0LCAxOTk5KQorCisgICAgICAgIFdPIDk5MDE5NTMgKEExKSBBdWRpbyBFZmZlY3RzIFByb2Nlc3NvciBoYXZpbmcgRGVjb3VwbGVkIEluc3RydWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb24gYW5kIEF1ZGlvIERhdGEgU2VxdWVuY2luZyAoSmFuLiAxNCwgMTk5OSkKKworCitVUyBQYXRlbnRzIChodHRwOi8vd3d3LnVzcHRvLmdvdi8pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVVMgNTkyNTg0MSAgICAgIERpZ2l0YWwgU2FtcGxpbmcgSW5zdHJ1bWVudCBlbXBsb3lpbmcgY2FjaGUgbWVtb3J5IChKdWwuIDIwLCAxOTk5KQorCisgICAgICAgIFVTIDU5MjgzNDIgICAgICBBdWRpbyBFZmZlY3RzIFByb2Nlc3NvciBpbnRlZ3JhdGVkIG9uIGEgc2luZ2xlIGNoaXAgKEp1bC4gMjcsIDE5OTkpCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgbXVsdGlwb3J0IG1lbW9yeSBvbnRvIHdoaWNoIG11bHRpcGxlIGFzeW5jaHJvbm91cworICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRhbCBzb3VuZCBzYW1wbGVzIGNhbiBiZSBjb25jdXJyZW50bHkgbG9hZGVkCisKKyAgICAgICAgVVMgNTkzMDE1OCAgICAgIFByb2Nlc3NvciB3aXRoIEluc3RydWN0aW9uIFNldCBmb3IgQXVkaW8gRWZmZWN0cyAoSnVsLiAyNywgMTk5OSkKKworICAgICAgICBVUyA2MDMyMjM1ICAgICAgTWVtb3J5IGluaXRpYWxpemF0aW9uIGNpcmN1aXQgKFRyYW0pIChGZWIuIDI5LCAyMDAwKQorCisgICAgICAgIFVTIDYxMzgyMDcgICAgICBJbnRlcnBvbGF0aW9uIGxvb3Bpbmcgb2YgYXVkaW8gc2FtcGxlcyBpbiBjYWNoZSBjb25uZWN0ZWQgdG8gICAgKE9jdC4gMjQsIDIwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYnVzIHdpdGggcHJpb3JpdGl6YXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiBidXMgdHJhbnNmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBhY2NvcmRhbmNlIHdpdGggbG9vcCBlbmRzIGFuZCBtaW5pbXVtIGJsb2NrIHNpemVzCisKKyAgICAgICAgVVMgNjE1MTY3MCAgICAgIE1ldGhvZCBmb3IgY29uc2VydmluZyBtZW1vcnkgc3RvcmFnZSB1c2luZyBhIChOb3YuIDIxLCAyMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCBvZiAgc2hvcnQgdGVybSBtZW1vcnkgcmVnaXN0ZXJzCisKKyAgICAgICAgVVMgNjE5NTcxNSAgICAgIEludGVycnVwdCBjb250cm9sIGZvciBtdWx0aXBsZSBwcm9ncmFtcyBjb21tdW5pY2F0aW5nIHdpdGggICAgICAoRmViLiAyNywgMjAwMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tbW9uIGludGVycnVwdCBieSBhc3NvY2lhdGluZyBwcm9ncmFtcyB0byBHUCByZWdpc3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmluZyBpbnRlcnJ1cHQgcmVnaXN0ZXIsIHBvbGxpbmcgR1AgcmVnaXN0ZXJzLCBhbmQgaW52b2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHJvdXRpbmUgYXNzb2NpYXRlZCB3aXRoIGRlZmluZWQgaW50ZXJydXB0IHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0J0ODd4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWVkYjJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0J0ODd4LnR4dApAQCAtMCwwICsxLDc4IEBACitJbnRybworPT09PT0KKworWW91IG1pZ2h0IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBidDg3OCBncmFiYmVyIGNhcmRzIGhhdmUgYWN0dWFsbHkKK190d29fIFBDSSBmdW5jdGlvbnM6CisKKyQgbHNwY2kKK1sgLi4uIF0KKzAwOjBhLjAgTXVsdGltZWRpYSB2aWRlbyBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKKzAwOjBhLjEgTXVsdGltZWRpYSBjb250cm9sbGVyOiBCcm9va3RyZWUgQ29ycG9yYXRpb24gQnQ4NzggKHJldiAwMikKK1sgLi4uIF0KKworVGhlIGZpcnN0IGRvZXMgdmlkZW8sIGl0IGlzIGJhY2t3YXJkIGNvbXBhdGlibGUgdG8gdGhlIGJ0ODQ4LiAgVGhlIHNlY29uZAorZG9lcyBhdWRpby4gIHNuZC1idDg3eCBpcyBhIGRyaXZlciBmb3IgdGhlIHNlY29uZCBmdW5jdGlvbi4gIEl0J3MgYSBzb3VuZAorZHJpdmVyIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZWNvcmRpbmcgc291bmQgKGFuZCBfb25seV8gcmVjb3JkaW5nLCBubworcGxheWJhY2spLiAgQXMgbW9zdCBUViBjYXJkcyBjb21lIHdpdGggYSBzaG9ydCBjYWJsZSB3aGljaCBjYW4gYmUgcGx1Z2dlZAoraW50byB5b3VyIHNvdW5kIGNhcmQncyBsaW5lLWluIHlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgZHJpdmVyIGlmIGFsbAoreW91IHdhbnQgdG8gZG8gaXMganVzdCB3YXRjaGluZyBUVi4uLgorCitTb21lIGNhcmRzIGRvIG5vdCBib3RoZXIgdG8gY29ubmVjdCBhbnl0aGluZyB0byB0aGUgYXVkaW8gaW5wdXQgcGlucyBvZgordGhlIGNoaXAsIGFuZCBzb21lIG90aGVyIGNhcmRzIHVzZSB0aGUgYXVkaW8gZnVuY3Rpb24gdG8gdHJhbnNwb3J0IE1QRUcKK3ZpZGVvIGRhdGEsIHNvIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCBhdWRpbyByZWNvcmRpbmcgbWF5IG5vdCB3b3JrCit3aXRoIHlvdXIgY2FyZC4KKworCitEcml2ZXIgU3RhdHVzCis9PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgaXMgbm93IHN0YWJsZS4gIEhvd2V2ZXIsIGl0IGRvZXNuJ3Qga25vdyBhYm91dCBtYW55IFRWIGNhcmRzLAorYW5kIGl0IHJlZnVzZXMgdG8gbG9hZCBmb3IgY2FyZHMgaXQgZG9lc24ndCBrbm93LgorCitJZiB0aGUgZHJpdmVyIGNvbXBsYWlucyAoIlVua25vd24gVFYgY2FyZCBmb3VuZCwgdGhlIGF1ZGlvIGRyaXZlciB3aWxsCitub3QgbG9hZCIpLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGxvYWRfYWxsPTEgb3B0aW9uIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8KK3RyeSB0byB1c2UgdGhlIGF1ZGlvIGNhcHR1cmUgZnVuY3Rpb24gb2YgeW91ciBjYXJkLiAgSWYgdGhlIGZyZXF1ZW5jeSBvZgorcmVjb3JkZWQgZGF0YSBpcyBub3QgcmlnaHQsIHRyeSB0byBzcGVjaWZ5IHRoZSBkaWdpdGFsX3JhdGUgb3B0aW9uIHdpdGgKK290aGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IDMyMDAwIChvZnRlbiBpdCdzIDQ0MTAwIG9yIDY0MDAwKS4KKworSWYgeW91IGhhdmUgYW4gdW5rbm93biBjYXJkLCBwbGVhc2UgbWFpbCB0aGUgSUQgYW5kIGJvYXJkIG5hbWUgdG8KKzxhbHNhLWRldmVsQGxpc3RzLnNmLm5ldD4sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhdWRpbyBjYXB0dXJlIHdvcmtzIG9yCitub3QsIHNvIHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGtub3cgYWJvdXQgeW91ciBjYXJkLgorCisKK0F1ZGlvIG1vZGVzCis9PT09PT09PT09PQorCitUaGUgY2hpcCBrbm93cyB0d28gZGlmZmVyZW50IG1vZGVzIChkaWdpdGFsL2FuYWxvZykuICBzbmQtYnQ4N3gKK3JlZ2lzdGVycyB0d28gUENNIGRldmljZXMsIG9uZSBmb3IgZWFjaCBtb2RlLiAgVGhleSBjYW5ub3QgYmUgdXNlZCBhdAordGhlIHNhbWUgdGltZS4KKworCitEaWdpdGFsIGF1ZGlvIG1vZGUKKz09PT09PT09PT09PT09PT09PQorCitUaGUgZmlyc3QgZGV2aWNlIChodzpYLDApIGdpdmVzIHlvdSAxNiBiaXQgc3RlcmVvIHNvdW5kLiAgVGhlIHNhbXBsZQorcmF0ZSBkZXBlbmRzIG9uIHRoZSBleHRlcm5hbCBzb3VyY2Ugd2hpY2ggZmVlZHMgdGhlIEJ0ODd4IHdpdGggZGlnaXRhbAorc291bmQgdmlhIEkyUyBpbnRlcmZhY2UuCisKKworQW5hbG9nIGF1ZGlvIG1vZGUgKEEvRCkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzZWNvbmQgZGV2aWNlIChodzpYLDEpIGdpdmVzIHlvdSA4IG9yIDE2IGJpdCBtb25vIHNvdW5kLiAgU3VwcG9ydGVkCitzYW1wbGUgcmF0ZXMgYXJlIGJldHdlZW4gMTE5NDY2IGFuZCA0NDgwMDAgSHogKHllcywgdGhlc2UgbnVtYmVycyBhcmUKK3RoYXQgaGlnaCkuICBJZiB5b3UndmUgc2V0IHRoZSBDT05GSUdfU05EX0JUODdYX09WRVJDTE9DSyBvcHRpb24sIHRoZQorbWF4aW11bSBzYW1wbGUgcmF0ZSBpcyAxNzkyMDAwIEh6LCBidXQgYXVkaW8gZGF0YSBiZWNvbWVzIHVudXNhYmxlCitiZXlvbmQgODk2MDAwIEh6IG9uIG15IGNhcmQuCisKK1RoZSBjaGlwIGhhcyB0aHJlZSBhbmFsb2cgaW5wdXRzLiAgQ29uc2VxdWVudGx5IHlvdSdsbCBnZXQgYSBtaXhlcgorZGV2aWNlIHRvIGNvbnRyb2wgdGhlc2UuCisKKworSGF2ZSBmdW4sCisKKyAgQ2xlbWVucworCisKK1dyaXR0ZW4gYnkgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CitiaWcgcGFydHMgY29waWVkIGZyb20gYnRhdWRpby50eHQgYnkgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NNSVBDSS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQ01JUENJLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdkZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NNSVBDSS50eHQKQEAgLTAsMCArMSwyNDIgQEAKKyAgICAgICAgICAgICAgQnJpZWYgTm90ZXMgb24gQy1NZWRpYSA4NzM4LzgzMzggRHJpdmVyCisgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorCisKK0Zyb250L1JlYXIgTXVsdGktY2hhbm5lbCBQbGF5YmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NNOHgzOCBjaGlwIGNhbiB1c2UgQURDIGFzIHRoZSBzZWNvbmQgREFDIHNvIHRoYXQgdHdvIGRpZmZlcmVudCBzdGVyZW8KK2NoYW5uZWxzIGNhbiBiZSB1c2VkIGZvciBmcm9udC9yZWFyIHBsYXliYWNrcy4gIFNpbmNlIHRoZXJlIGFyZSB0d28KK0RBQ3MsIGJvdGggc3RyZWFtcyBhcmUgaGFuZGxlZCBpbmRlcGVuZGVudGx5IHVubGlrZSB0aGUgNC82Y2ggbXVsdGktCitjaGFubmVsIHBsYXliYWNrcyBpbiB0aGUgc2VjdGlvbiBiZWxvdy4KKworQXMgZGVmYXVsdCwgQUxTQSBkcml2ZXIgYXNzaWducyB0aGUgZmlyc3QgUENNIGRldmljZSAoaS5lLiBodzowLDAgZm9yCitjYXJkIzApIGZvciBmcm9udCBhbmQgNC82Y2ggcGxheWJhY2tzLCB3aGlsZSB0aGUgc2Vjb25kIFBDTSBkZXZpY2UKKyhodzowLDEpIGlzIGFzc2lnbmVkIHRvIHRoZSBzZWNvbmQgREFDIGZvciByZWFyIHBsYXliYWNrLgorCitUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gREFDcy4KKworLSBUaGUgZmlyc3QgREFDIHN1cHBvcnRzIFU4IGFuZCBTMTZMRSBmb3JtYXRzLCB3aGlsZSB0aGUgc2Vjb25kIERBQworICBzdXBwb3J0cyBvbmx5IFMxNkxFLgorLSBUaGUgc2Vjb25kZSBEQUMgc3VwcG9ydHMgb25seSB0d28gY2hhbm5lbCBzdGVyZW8uCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIENNOHgzOCBEQUMgZG9lc24ndCBzdXBwb3J0IGNvbnRpbnVvdXMgcGxheWJhY2sKK3JhdGUgYnV0IG9ubHkgZml4ZWQgcmF0ZXM6IDU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLAorNDQxMDAgYW5kIDQ4MDAwIEh6LgorCitUaGUgcmVhciBvdXRwdXQgY2FuIGJlIGhlYXJkIG9ubHkgd2hlbiAiRm91ciBDaGFubmVsIE1vZGUiIHN3aXRjaCBpcworZGlzYWJsZWQuICBPdGhlcndpc2Ugbm8gc2lnbmFsIHdpbGwgYmUgcm91dGVkIHRvIHRoZSByZWFyIHNwZWFrZXJzLgorQXMgZGVmYXVsdCBpdCdzIHR1cm5lZCBvbi4KKworKioqIFdBUk5JTkcgKioqCitXaGVuICJGb3VyIENoYW5uZWwgTW9kZSIgc3dpdGNoIGlzIG9mZiwgdGhlIG91dHB1dCBmcm9tIHJlYXIgc3BlYWtlcnMKK3dpbGwgYmUgRlVMTCBWT0xVTUUgcmVnYXJkbGVzcyBvZiBNYXN0ZXIgYW5kIFBDTSB2b2x1bWVzLgorVGhpcyBtaWdodCBkYW1hZ2UgeW91ciBhdWRpbyBlcXVpcG1lbnQuICBQbGVhc2UgZGlzY29ubmVjdCBzcGVha2VycworYmVmb3JlIHlvdXIgdHVybiBvZmYgdGhpcyBzd2l0Y2guCisqKiogV0FSTklORyAqKioKKworWyBXZWxsLi4gSSBvbmNlIGdvdCB0aGUgb3V0cHV0IHdpdGggY29ycmVjdCB2b2x1bWUgKGkuZS4gc2FtZSB3aXRoIHRoZQorICBmcm9udCBvbmUpIGFuZCB3YXMgc28gZXhjaXRlZC4gIEl0IHdhcyBldmVuIHdpdGggIkZvdXIgQ2hhbm5lbCIgYml0CisgIG9uIGFuZCAiZG91YmxlIERBQyIgbW9kZS4gIEFjdHVhbGx5IEkgY291bGQgaGVhciBzZXBhcmF0ZSA0IGNoYW5uZWxzCisgIGZyb20gZnJvbnQgYW5kIHJlYXIgc3BlYWtlcnMhICBCdXQuLiBhZnRlciByZWJvb3QsIGFsbCB3YXMgZ29uZS4KKyAgSXQncyBhIHZlcnkgcGl0eSB0aGF0IEkgZGlkbid0IHNhdmUgdGhlIHJlZ2lzdGVyIGR1bXAgYXQgdGhhdAorICB0aW1lLi4gIE1heWJlIHRoZXJlIGlzIGFuIHVua25vd24gcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGlzLi4uIF0KKworSWYgeW91ciBjYXJkIGhhcyBhbiBleHRyYSBvdXRwdXQgamFjayBmb3IgdGhlIHJlYXIgb3V0cHV0LCB0aGUgcmVhcgorcGxheWJhY2sgc2hvdWxkIGJlIHJvdXRlZCB0aGVyZSBhcyBkZWZhdWx0LiAgSWYgbm90LCB0aGVyZSBpcyBhCitjb250cm9sIHN3aXRjaCBpbiB0aGUgZHJpdmVyICJMaW5lLUluIEFzIFJlYXIiLCB3aGljaCB5b3UgY2FuIGNoYW5nZQordmlhIGFsc2FtaXhlciBvciBzb21ld2hhdCBlbHNlLiAgV2hlbiB0aGlzIHN3aXRjaCBpcyBvbiwgbGluZS1pbiBqYWNrCitpcyB1c2VkIGFzIHJlYXIgb3V0cHV0LgorCitUaGVyZSBhcmUgdHdvIG1vcmUgY29udHJvbHMgcmVnYXJkaW5nIHRvIHRoZSByZWFyIG91dHB1dC4KK1RoZSAiRXhjaGFuZ2UgREFDIiBzd2l0Y2ggaXMgdXNlZCB0byBleGNoYW5nZSBmcm9udCBhbmQgcmVhciBwbGF5YmFjaworcm91dGVzLCBpLmUuIHRoZSAybmQgREFDIGlzIG91dHB1dCBmcm9tIGZyb250IG91dHB1dC4KKworCis0LzYgTXVsdGktQ2hhbm5lbCBQbGF5YmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlY2VudCBDTTg3MzggY2hpcHMgc3VwcG9ydCBmb3IgdGhlIDQvNiBtdWx0aS1jaGFubmVsIHBsYXliYWNrCitmdW5jdGlvbi4gIFRoaXMgaXMgdXNlZnVsIGVzcGVjaWFsbHkgZm9yIEFDMyBkZWNvZGluZy4KKworV2hlbiB0aGUgbXVsdGktY2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgbmFtZSBoYXMgYSBzdWZmaXgKKyItTUMiIHN1Y2ggbGlrZSAiQ01JODczOC1NQzYiLiAgWW91IGNhbiBjaGVjayB0aGlzIG5hbWUgZnJvbQorL3Byb2MvYXNvdW5kL2NhcmRzLgorCitXaGVuIHRoZSA0LzYtY2ggb3V0cHV0IGlzIGVuYWJsZWQsIHRoZSBzZWNvbmQgREFDIGFjY2VwdHMgdXAgdG8gNiAob3IKKzQpIGNoYW5uZWxzLiAgV2hpbGUgdGhlIGR1YWwgREFDIHN1cHBvcnRzIHR3byBkaWZmZXJlbnQgcmF0ZXMgb3IKK2Zvcm1hdHMsIHRoZSA0LzYtY2ggcGxheWJhY2sgc3VwcG9ydHMgb25seSB0aGUgc2FtZSBjb25kaXRpb24gZm9yIGFsbAorY2hhbm5lbHMuICBTaW5jZSB0aGUgbXVsdGktY2hhbm5lbCBwbGF5YmFjayBtb2RlIHVzZXMgYm90aCBEQUNzLCB5b3UKK2Nhbm5vdCBvcGVyYXRlIHdpdGggZnVsbC1kdXBsZXguCisKK1RoZSA0LjAgYW5kIDUuMSBtb2RlcyBhcmUgZGVmaW5lZCBhcyB0aGUgcGNtICJzdXJyb3VuZDQwIiBhbmQgInN1cnJvdW5kNTEiCitpbiBhbHNhLWxpYi4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHBsYXkgYSBXQVYgZmlsZSB3aXRoIDYgY2hhbm5lbHMgbGlrZQorCisJJSBhcGxheSAtRHN1cnJvdW5kNTEgc2l4Y2hhbm5lbHMud2F2CisKK0ZvciBwcm9ncmFtbWluIHRoZSA0LzYgY2hhbm5lbCBwbGF5YmFjaywgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgUENNCitjaGFubmVscyBhcyB5b3UgbGlrZSBhbmQgc2V0IHRoZSBmb3JtYXQgUzE2TEUuICBGb3IgZXhhbXBsZSwgZm9yIHBsYXliYWNrCit3aXRoIDQgY2hhbm5lbHMsCisKKwlzbmRfcGNtX2h3X3BhcmFtc19zZXRfYWNjZXNzKHBjbSwgaHcsIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEKTsKKwkgICAgLy8gb3IgbW1hcCBpZiB5b3UgbGlrZQorCXNuZF9wY21faHdfcGFyYW1zX3NldF9mb3JtYXQocGNtLCBodywgU05EX1BDTV9GT1JNQVRfUzE2X0xFKTsKKwlzbmRfcGNtX2h3X3BhcmFtc19zZXRfY2hhbm5lbHMocGNtLCBodywgNCk7CisKK2FuZCB1c2UgdGhlIGludGVybGVhdmVkIDQgY2hhbm5lbCBkYXRhLgorCitUaGVyZSBhcmUgc29tZSBjb250cm9sIHN3aXRjaHMgYWZmZWN0aW5nIHRvIHRoZSBzcGVha2VyIGNvbm5lY3Rpb25zOgorCisiTGluZS1JbiBBcyBSZWFyIgktIEFzIG1lbnRpb25lZCBhYm92ZSwgdGhlIGxpbmUtaW4gamFjayBpcyB1c2VkCisJZm9yIHRoZSByZWFyICgzdGggYW5kIDR0aCBjaGFubmVscykgb3V0cHV0LgorIkxpbmUtSW4gQXMgQmFzcyIJLSBUaGUgbGluZS1pbiBqYWNrIGlzIHVzZWQgZm9yIHRoZSBiYXNzICg1dGgKKwlhbmQgNnRoIGNoYW5uZWxzKSBvdXRwdXQuCisiTWljIEFzIENlbnRlci9MRkUiCS0gVGhlIG1pYyBqYWNrIGlzIHVzZWQgZm9yIHRoZSBiYXNzIG91dHB1dC4KKwlJZiB0aGlzIHN3aXRjaCBpcyBvbiwgeW91IGNhbm5vdCB1c2UgYSBtaWNyb3Bob25lIGFzIGEgY2FwdHVyZQorCXNvdXJjZSwgb2YgY291cnNlLgorCisKK0RpZ2l0YWwgSS9PCistLS0tLS0tLS0tLQorCitUaGUgQ004eDM4IHByb3ZpZGVzIHRoZSBleGNlbGxlbnQgU1BESUYgY2FwYWJpbGl0eSB3aXRoIHZlcnkgY2hpcAorcHJpY2UgKHllcywgdGhhdCdzIHRoZSByZWFzb24gSSBib3VnaHQgdGhlIGNhcmQgOikKKworVGhlIFNQRElGIHBsYXliYWNrIGFuZCBjYXB0dXJlIGFyZSBkb25lIHZpYSB0aGUgdGhpcmQgUENNIGRldmljZQorKGh3OjAsMikuICBVc3VhbGx5IHRoaXMgaXMgYXNzaWduZWQgdG8gdGhlIFBDTSBkZXZpY2UgInNwZGlmIi4KK1RoZSBhdmFpbGFibGUgcmF0ZXMgYXJlIDQ0MTAwIGFuZCA0ODAwMCBIei4KK0ZvciBwbGF5YmFjayB3aXRoIGFwbGF5LCB5b3UgY2FuIHJ1biBsaWtlIGJlbG93OgorCisJJSBhcGxheSAtRGh3OjAsMiBmb28ud2F2CisKK29yCisKKwklIGFwbGF5IC1Ec3BkaWYgZm9vLndhdgorCisyNGJpdCBmb3JtYXQgaXMgYWxzbyBzdXBwb3J0ZWQgZXhwZXJpbWVudGFsbHkuCisKK1RoZSBwbGF5YmFjayBhbmQgY2FwdHVyZSBvdmVyIFNQRElGIHVzZSBub3JtYWwgREFDIGFuZCBBREMsCityZXNwZWN0aXZlbHksIHNvIHlvdSBjYW5ub3QgcGxheWJhY2sgYm90aCBhbmFsb2cgYW5kIGRpZ2l0YWwgc3RyZWFtcworc2ltdWx0YW5lb3VzbHkuCisKK1RvIGVuYWJsZSBTUERJRiBvdXRwdXQsIHlvdSBuZWVkIHRvIHR1cm4gb24gIklFQzk1OCBPdXRwdXQgU3dpdGNoIgorY29udHJvbCB2aWEgbWl4ZXIgb3IgYWxzYWN0bC4gIFRoZW4geW91J2xsIHNlZSB0aGUgcmVkIGxpZ2h0IG9uIGZyb20KK3RoZSBjYXJkIHNvIHlvdSBrbm93IHRoYXQncyB3b3JraW5nIG9idmlvdXNseSA6KQorVGhlIFNQRElGIGlucHV0IGlzIGFsd2F5cyBlbmFibGVkLCBzbyB5b3UgY2FuIGhlYXIgU1BESUYgaW5wdXQgZGF0YQorZnJvbSBsaW5lLW91dCB3aXRoICJJRUM5NTggSW4gTW9uaXRvciIgc3dpdGNoIGF0IGFueSB0aW1lIChzZWUKK2JlbG93KS4KKworWW91IGNhbiBwbGF5IHZpYSBTUERJRiBldmVuIHdpdGggdGhlIGZpcnN0IGRldmljZSAoaHc6MCwwKSwKK2J1dCBTUERJRiBpcyBlbmFibGVkIG9ubHkgd2hlbiB0aGUgcHJvcGVyIGZvcm1hdCAoUzE2TEUpLCBzYW1wbGUgcmF0ZQorKDQ0MTEwMCBvciA0ODAwMCkgYW5kIGNoYW5uZWxzICgyKSBhcmUgdXNlZC4gIE90aGVyd2lzZSBpdCdzIHR1cm5lZAorb2ZmLiAgKEFsc28gZG9uJ3QgZm9yZ2V0IHRvIHR1cm4gb24gIklFQzk1OCBPdXRwdXQgU3dpdGNoIiwgdG9vLikKKworCitBZGRpdGlvbmFsbHkgdGhlcmUgYXJlIHJlbGV2YW50IGNvbnRyb2wgc3dpdGNoZXM6CisKKyJJRUM5NTggTWl4IEFuYWxvZyIgLSBNaXggYW5hbG9nIFBDTSBwbGF5YmFjayBhbmQgRk0tT1BMLzMgc3RyZWFtcyBhbmQKKwlvdXRwdXQgdGhyb3VnaCBTUERJRi4gIFRoaXMgc3dpdGNoIGFwcGVhcnMgb25seSBvbiBvbGQgY2hpcAorCW1vZGVscyAoQ004NzM4IDAzMyBhbmQgMDM3KS4KKwlOb3RlOiB3aXRob3V0IHRoaXMgY29udHJvbCB5b3UgY2FuIG91dHB1dCBQQ00gdG8gU1BESUYuCisJVGhpcyBpcyAibWl4aW5nIiBvZiBzdHJlYW1zLCBzbyBlLmcuIGl0J3Mgbm90IGZvciBBQzMgb3V0cHV0CisJKHNlZSB0aGUgbmV4dCBzZWN0aW9uKS4KKworIklFQzk1OCBJbiBTZWxlY3QiICAtIFNlbGVjdCBTUERJRiBpbnB1dCwgdGhlIGludGVybmFsIENELWluIChmYWxzZSkKKwlhbmQgdGhlIGV4dGVybmFsIGlucHV0ICh0cnVlKS4KKworIklFQzk1OCBMb29wIiAgICAgICAtIFNQRElGIGlucHV0IGRhdGEgaXMgbG9vcCBiYWNrIGludG8gU1BESUYKKwlvdXRwdXQgKGFrYSBieXBhc3MpCisKKyJJRUM5NTggQ29weXJpZ2h0IiAgLSBTZXQgdGhlIGNvcHlyaWdodCBiaXQuCisKKyJJRUM5NTggNVYiICAgICAgICAgLSBTZWxlY3QgMC41ViAoY29heCkgb3IgNVYgKG9wdGljYWwpIGludGVyZmFjZS4KKwlPbiBzb21lIGNhcmRzIHRoaXMgZG9lc24ndCB3b3JrIGFuZCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlCisJY29uZmlndXJhdGlvbiB3aXRoIGhhcmR3YXJlIGRpcC1zd2l0Y2guCisKKyJJRUM5NTggSW4gTW9uaXRvciIgLSBTUERJRiBpbnB1dCBpcyByb3V0ZWQgdG8gREFDLgorCisiSUVDOTU4IEluIFBoYXNlIEludmVyc2UiIC0gU2V0IFNQRElGIGlucHV0IGZvcm1hdCBhcyBpbnZlcnNlLgorCVtGSVhNRTogdGhpcyBkb2Vzbid0IHdvcmsgb24gYWxsIGNoaXBzLi5dCisKKyJJRUM5NTggSW4gVmFsaWQiICAgLSBTZXQgaW5wdXQgdmFsaWRpdHkgZmxhZyBkZXRlY3Rpb24uCisKK05vdGU6IFdoZW4gIlBDTSBQbGF5YmFjayBTd2l0Y2giIGlzIG9uLCB5b3UnbGwgaGVhciB0aGUgZGlnaXRhbCBvdXRwdXQKK3N0cmVhbSB0aHJvdWdoIGFuYWxvZyBsaW5lLW91dC4KKworCitUaGUgQUMzIChSQVcgRElHSVRBTCkgT1VUUFVUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgcmF3IGRpZ2l0YWwgKHR5cGljYWxseSBBQzMpIGkvbyBvdmVyIFNQRElGLiAgVGhpcworY2FuIGJlIHRvZ2dsZWQgdmlhIElFQzk1OCBwbGF5YmFjayBjb250cm9sLCBidXQgdXN1YWxseSB5b3UgbmVlZCB0bworYWNjZXNzIGl0IHZpYSBhbHNhLWxpYi4gIFNlZSBhbHNhLWxpYiBkb2N1bWVudHMgZm9yIG1vcmUgZGV0YWlscy4KKworT24gdGhlIHJhdyBkaWdpdGFsIG1vZGUsIHRoZSAiUENNIFBsYXliYWNrIFN3aXRjaCIgaXMgYXV0b21hdGljYWxseQordHVybmVkIG9mZiBzbyB0aGF0IG5vbi1hdWRpbyBkYXRhIGlzIGhlYXJkIGZyb20gdGhlIGFuYWxvZyBsaW5lLW91dC4KK1NpbWlsYXJseSB0aGUgZm9sbG93aW5nIHN3aXRjaGVzIGFyZSBvZmY6ICJJRUM5NTggTWl4IEFuYWxvZyIgYW5kCisiSUVDOTU4IExvb3AiLiAgVGhlIHN3aXRjaGVzIGFyZSByZXN1bWVkIGFmdGVyIGNsb3NpbmcgdGhlIFNQRElGIFBDTQorZGV2aWNlIGF1dG9tYXRpY2FsbHkgdG8gdGhlIHByZXZpb3VzIHN0YXRlLgorCitPbiB0aGUgbW9kZWwgMDMzLCBBQzMgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIHNvZnR3YXJlIGNvbnZlcnNpb24gaW4KK3RoZSBhbHNhLWxpYi4gIElmIHlvdSBuZWVkIHRvIGJ5cGFzcyB0aGUgc29mdHdhcmUgY29udmVyc2lvbiBvZiBJRUM5NTgKK3N1YmZyYW1lcywgcGFzcyB0aGUgInNvZnRfYWMzPTAiIG1vZHVsZSBvcHRpb24uICBUaGlzIGRvZXNuJ3QgbWF0dGVyCitvbiB0aGUgbmV3ZXIgbW9kZWxzLgorCisKK0FOQUxPRyBNSVhFUiBJTlRFUkZBQ0UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1peGVyIGludGVyZmFjZSBvbiBDTTh4MzggaXMgc2ltaWxhciB0byBTQjE2LgorVGhlcmUgYXJlIE1hc3RlciwgUENNLCBTeW50aCwgQ0QsIExpbmUsIE1pYyBhbmQgUEMgU3BlYWtlciBwbGF5YmFjawordm9sdW1lcy4gIFN5bnRoLCBDRCwgTGluZSBhbmQgTWljIGhhdmUgcGxheWJhY2sgYW5kIGNhcHR1cmUgc3dpdGNoZXMsCit0b28sIGFzIHdlbGwgYXMgU0IxNi4KKworSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIFNCIG1peGVyLCBDTTh4MzggcHJvdmlkZXMgbW9yZSBmdW5jdGlvbnMuCistIFBDTSBwbGF5YmFjayBzd2l0Y2gKKy0gUENNIGNhcHR1cmUgc3dpdGNoICh0byBjYXB0dXJlIHRoZSBkYXRhIHNlbnQgdG8gREFDKQorLSBNaWMgQm9vc3Qgc3dpdGNoCistIE1pYyBjYXB0dXJlIHZvbHVtZQorLSBBdXggcGxheWJhY2sgdm9sdW1lL3N3aXRjaCBhbmQgY2FwdHVyZSBzd2l0Y2gKKy0gM0QgY29udHJvbCBzd2l0Y2gKKworCitNSURJIENPTlRST0xMRVIKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgTVBVNDAxLVVBUlQgaW50ZXJmYWNlIGlzIGVuYWJsZWQgYXMgZGVmYXVsdCBvbmx5IGZvciB0aGUgZmlyc3QKKyhDTUlQQ0kpIGNhcmQuICBZb3UgbmVlZCB0byBzZXQgbW9kdWxlIG9wdGlvbiAibWlkaV9wb3J0IiBwcm9wZXJseQorZm9yIHRoZSAybmQgKENNSVBDSSkgY2FyZC4KKworVGhlcmUgaXMgX25vXyBoYXJkd2FyZSB3YXZldGFibGUgZnVuY3Rpb24gb24gdGhpcyBjaGlwIChleGNlcHQgZm9yCitPUEwzIHN5bnRoIGJlbG93KS4KK1doYXQncyBzYWlkIGFzIE1JREkgc3ludGggb24gV2luZG93cyBpcyBhIHNvZnR3YXJlIHN5bnRoZXNpemVyCitlbXVsYXRpb24uICBPbiBMaW51eCB1c2UgVGlNaWRpdHkgb3Igb3RoZXIgc29mdHN5bnRoIHByb2dyYW0gZm9yCitwbGF5aW5nIE1JREkgbXVzaWMuCisKKworRk0gT1BMLzMgU3ludGgKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBGTSBPUEwvMyBpcyBhbHNvIGVuYWJsZWQgYXMgZGVmYXVsdCBvbmx5IGZvciB0aGUgZmlyc3QgY2FyZC4KK1NldCAiZm1fcG9ydCIgbW9kdWxlIG9wdGlvbiBmb3IgbW9yZSBjYXJkcy4KKworVGhlIG91dHB1dCBxdWFsaXR5IG9mIEZNIE9QTC8zIGlzLCBob3dldmVyLCB2ZXJ5IHdlaXJkLgorSSBkb24ndCBrbm93IHdoeS4uCisKKworSm95c3RpY2sgYW5kIE1vZGVtCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGpveXN0aWNrIGFuZCBtb2RlbSBzaG91bGQgYmUgYXZhaWxhYmxlIGJ5IGVuYWJsaW5nIHRoZSBjb250cm9sCitzd2l0Y2ggIkpveXN0aWNrIiBhbmQgIk1vZGVtIiByZXNwZWN0aXZlbHkuICBCdXQgSSBteXNlbGYgaGF2ZSBuZXZlcgordGVzdGVkIHRoZW0geWV0LgorCisKK0RlYnVnZ2luZyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWdpc3RlcnMgYXJlIHNob3duIGluIC9wcm9jL2Fzb3VuZC9jYXJkWC9jbWlwY2kuICBJZiB5b3UgaGF2ZSBhbnkKK3Byb2JsZW0gKGVzcGVjaWFsbHkgdW5leHBlY3RlZCBiZWhhdmlvciBvZiBtaXhlciksIHBsZWFzZSBhdHRhY2ggdGhlCitvdXRwdXQgb2YgdGhpcyBwcm9jIGZpbGUgdG9nZXRoZXIgd2l0aCB0aGUgYnVnIHJlcG9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxODI5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0CkBAIC0wLDAgKzEsODQgQEAKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHN0YW5kYXJkIG5hbWVzIG9mIG1peGVyIGNvbnRyb2xzLgorCitTeW50YXg6IFNPVVJDRSBbRElSRUNUSU9OXSBGVU5DVElPTgorCitESVJFQ1RJT046CisgIDxub3RoaW5nPgkoYm90aCBkaXJlY3Rpb25zKQorICBQbGF5YmFjaworICBDYXB0dXJlCisgIEJ5cGFzcyBQbGF5YmFjaworICBCeXBhc3MgQ2FwdHVyZQorCitGVU5DVElPTjoKKyAgU3dpdGNoCShvbi9vZmYgc3dpdGNoKQorICBWb2x1bWUKKyAgUm91dGUJCShyb3V0ZSBjb250cm9sLCBoYXJkd2FyZSBzcGVjaWZpYykKKworU09VUkNFOgorICBNYXN0ZXIKKyAgTWFzdGVyIE1vbm8KKyAgSGFyZHdhcmUgTWFzdGVyCisgIEhlYWRwaG9uZQorICBQQyBTcGVha2VyCisgIFBob25lCisgIFBob25lIElucHV0CisgIFBob25lIE91dHB1dAorICBTeW50aAorICBGTQorICBNaWMKKyAgTGluZQorICBDRAorICBWaWRlbworICBab29tIFZpZGVvCisgIEF1eAorICBQQ00KKyAgUENNIEZyb250CisgIFBDTSBSZWFyCisgIFBDTSBQYW4KKyAgTG9vcGJhY2sKKyAgQW5hbG9nIExvb3BiYWNrCShEL0EgLT4gQS9EIGxvb3BiYWNrKQorICBEaWdpdGFsIExvb3BiYWNrCShwbGF5YmFjayAtPiBjYXB0dXJlIGxvb3BiYWNrIC0gd2l0aG91dCBhbmFsb2cgcGF0aCkKKyAgTW9ubworICBNb25vIE91dHB1dAorICBNdWx0aQorICBBREMKKyAgV2F2ZQorICBNdXNpYworICBJMlMKKyAgSUVDOTU4CisKK0V4Y2VwdGlvbnM6CisgIFtEaWdpdGFsXSBDYXB0dXJlIFNvdXJjZQorICBbRGlnaXRhbF0gQ2FwdHVyZSBTd2l0Y2gJKGFrYSBpbnB1dCBnYWluIHN3aXRjaCkKKyAgW0RpZ2l0YWxdIENhcHR1cmUgVm9sdW1lCShha2EgaW5wdXQgZ2FpbiB2b2x1bWUpCisgIFtEaWdpdGFsXSBQbGF5YmFjayBTd2l0Y2gJKGFrYSBvdXRwdXQgZ2FpbiBzd2l0Y2gpCisgIFtEaWdpdGFsXSBQbGF5YmFjayBWb2x1bWUJKGFrYSBvdXRwdXQgZ2FpbiB2b2x1bWUpCisgIFRvbmUgQ29udHJvbCAtIFN3aXRjaAorICBUb25lIENvbnRyb2wgLSBCYXNzCisgIFRvbmUgQ29udHJvbCAtIFRyZWJsZQorICAzRCBDb250cm9sIC0gU3dpdGNoCisgIDNEIENvbnRyb2wgLSBDZW50ZXIKKyAgM0QgQ29udHJvbCAtIERlcHRoCisgIDNEIENvbnRyb2wgLSBXaWRlCisgIDNEIENvbnRyb2wgLSBTcGFjZQorICAzRCBDb250cm9sIC0gTGV2ZWwKKyAgTWljIEJvb3N0IFsoP2RCKV0KKworUENNIGludGVyZmFjZToKKworICBTYW1wbGUgQ2xvY2sgU291cmNlCXsgIldvcmQiLCAiSW50ZXJuYWwiLCAiQXV0b1N5bmMiIH0KKyAgQ2xvY2sgU3luYyBTdGF0dXMJeyAiTG9jayIsICJTeW5jIiwgIk5vIExvY2siIH0KKyAgRXh0ZXJuYWwgUmF0ZQkJLyogZXh0ZXJuYWwgY2FwdHVyZSByYXRlICovCisgIENhcHR1cmUgUmF0ZQkJLyogY2FwdHVyZSByYXRlIHRha2VuIGZyb20gZXh0ZXJuYWwgc291cmNlICovCisKK0lFQzk1OCAoUy9QRElGKSBpbnRlcmZhY2U6CisKKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBTd2l0Y2gJLyogdHVybiBvbi9vZmYgdGhlIElFQzk1OCBpbnRlcmZhY2UgKi8KKyAgSUVDOTU4IFsuLi5dIFtQbGF5YmFja3xDYXB0dXJlXSBWb2x1bWUJLyogZGlnaXRhbCB2b2x1bWUgY29udHJvbCAqLworICBJRUM5NTggWy4uLl0gW1BsYXliYWNrfENhcHR1cmVdIERlZmF1bHQJLyogZGVmYXVsdCBvciBnbG9iYWwgdmFsdWUgLSByZWFkL3dyaXRlICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gTWFzawkJLyogY29uc3VtZXIgYW5kIHByb2Zlc3Npb25hbCBtYXNrICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gQ29uIE1hc2sJLyogY29uc3VtZXIgbWFzayAqLworICBJRUM5NTggWy4uLl0gW1BsYXliYWNrfENhcHR1cmVdIFBybyBNYXNrCS8qIHByb2Zlc3Npb25hbCBtYXNrICovCisgIElFQzk1OCBbLi4uXSBbUGxheWJhY2t8Q2FwdHVyZV0gUENNIFN0cmVhbQkvKiB0aGUgc2V0dGluZ3MgYXNzaWduZWQgdG8gYSBQQ00gc3RyZWFtICovCisgIElFQzk1OCBRLXN1YmNvZGUgW1BsYXliYWNrfENhcHR1cmVdIERlZmF1bHQJLyogUS1zdWJjb2RlIGJpdHMgKi8KKyAgSUVDOTU4IFByZWFtYmxlIFtQbGF5YmFja3xDYXB0dXJlXSBEZWZhdWx0CS8qIGJ1cnN0IHByZWFtYmxlIHdvcmRzICg0KjE2Yml0cykgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzYWUzZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL2Fsc2EtZHJpdmVyLWFwaS50bXBsCkBAIC0wLDAgKzEsMTAwIEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+CisKKzxib29rPgorPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gSGVhZGVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPlRoZSBBTFNBIERyaXZlciBBUEk8L3RpdGxlPgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZnJlZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IDxlbXBoYXNpcz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvZW1waGFzaXM+OyB3aXRob3V0IGV2ZW4gdGhlCisgICAgaW1wbGllZCB3YXJyYW50eSBvZiA8ZW1waGFzaXM+TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAgICBQQVJUSUNVTEFSIFBVUlBPU0U8L2VtcGhhc2lzPi4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGZvciBtb3JlIGRldGFpbHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgICAgTUEgMDIxMTEtMTMwNyBVU0EKKyAgICA8L3BhcmE+CisgICAgPC9sZWdhbG5vdGljZT4KKworICA8L2Jvb2tpbmZvPgorCisgIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnbWVudDwvdGl0bGU+CishRXNvdW5kL2NvcmUvaW5pdC5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+RGV2aWNlIENvbXBvbmVudHM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2RldmljZS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+S01PRCBhbmQgRGV2aWNlIEZpbGUgRW50cmllczwvdGl0bGU+CishRXNvdW5kL2NvcmUvc291bmQuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1lbW9yeSBNYW5hZ2VtZW50IEhlbHBlcnM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL21lbW9yeS5jCishRXNvdW5kL2NvcmUvbWVtYWxsb2MuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisgIDxjaGFwdGVyPjx0aXRsZT5QQ00gQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ00gQ29yZTwvdGl0bGU+CishRXNvdW5kL2NvcmUvcGNtLmMKKyFFc291bmQvY29yZS9wY21fbGliLmMKKyFFc291bmQvY29yZS9wY21fbmF0aXZlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ00gRm9ybWF0IEhlbHBlcnM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3BjbV9taXNjLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5QQ00gTWVtb3J5IE1hbmFnbWVudDwvdGl0bGU+CishRXNvdW5kL2NvcmUvcGNtX21lbW9yeS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPkNvbnRyb2wvTWl4ZXIgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5HZW5lcmFsIENvbnRyb2wgSW50ZXJmYWNlPC90aXRsZT4KKyFFc291bmQvY29yZS9jb250cm9sLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5BQzk3IENvZGVjIEFQSTwvdGl0bGU+CishRXNvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworIUVzb3VuZC9wY2kvYWM5Ny9hYzk3X3BjbS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1QVTQwMS1VQVJUIEFQSTwvdGl0bGU+CishRXNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+UHJvYyBJbmZvIEFQSTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+UHJvYyBJbmZvIEludGVyZmFjZTwvdGl0bGU+CishRXNvdW5kL2NvcmUvaW5mby5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlcyBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2h3ZGVwLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5JU0EgRE1BIEhlbHBlcnM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2lzYWRtYS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+T3RoZXIgSGVscGVyIE1hY3JvczwvdGl0bGU+CishSWluY2x1ZGUvc291bmQvY29yZS5oCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ODk0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTAsMCArMSw2MDQ1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+CisKKzxib29rPgorPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gSGVhZGVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgorICAgIDxhdXRob3I+CisgICAgICA8Zmlyc3RuYW1lPlRha2FzaGk8L2ZpcnN0bmFtZT4KKyAgICAgIDxzdXJuYW1lPkl3YWk8L3N1cm5hbWU+CisgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgIDxhZGRyZXNzPgorICAgICAgICAgIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KKyAgICAgICAgPC9hZGRyZXNzPgorICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgPC9hdXRob3I+CisKKyAgICAgPGRhdGU+TWFyY2ggNiwgMjAwNTwvZGF0ZT4KKyAgICAgPGVkaXRpb24+MC4zLjQ8L2VkaXRpb24+CisKKyAgICA8YWJzdHJhY3Q+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuIEFMU0EgKEFkdmFuY2VkIExpbnV4CisgICAgICAgIFNvdW5kIEFyY2hpdGVjdHVyZSkgZHJpdmVyLgorICAgICAgPC9wYXJhPgorICAgIDwvYWJzdHJhY3Q+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+CisgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgIFRha2FzaGkgSXdhaSA8ZW1haWw+dGl3YWlAc3VzZS5kZTwvZW1haWw+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBmcmVlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgPGVtcGhhc2lzPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9lbXBoYXNpcz47IHdpdGhvdXQgZXZlbiB0aGUKKyAgICBpbXBsaWVkIHdhcnJhbnR5IG9mIDxlbXBoYXNpcz5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICAgIFBBUlRJQ1VMQVIgUFVSUE9TRTwvZW1waGFzaXM+LiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgZm9yIG1vcmUgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgIDwvYm9va2luZm8+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQcmVmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8cHJlZmFjZSBpZD0icHJlZmFjZSI+CisgICAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuCisgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvIj48Y2l0ZXRpdGxlPgorICAgICAgQUxTQSAoQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlKTwvY2l0ZXRpdGxlPjwvdWxpbms+CisgICAgICBkcml2ZXIuIFRoZSBkb2N1bWVudCBmb2N1c2VzIG1haW5seSBvbiB0aGUgUENJIHNvdW5kY2FyZC4KKyAgICAgIEluIHRoZSBjYXNlIG9mIG90aGVyIGRldmljZSB0eXBlcywgdGhlIEFQSSBtaWdodAorICAgICAgYmUgZGlmZmVyZW50LCB0b28uIEhvd2V2ZXIsIGF0IGxlYXN0IHRoZSBBTFNBIGtlcm5lbCBBUEkgaXMKKyAgICAgIGNvbnNpc3RlbnQsIGFuZCB0aGVyZWZvcmUgaXQgd291bGQgYmUgc3RpbGwgYSBiaXQgaGVscCBmb3IKKyAgICAgIHdyaXRpbmcgdGhlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGUgdGFyZ2V0IG9mIHRoaXMgZG9jdW1lbnQgaXMgb25lcyB3aG8gYWxyZWFkeSBoYXZlIGVub3VnaAorICAgIHNraWxsIG9mIEMgbGFuZ3VhZ2UgYW5kIGhhdmUgdGhlIGJhc2ljIGtub3dsZWRnZSBvZiBsaW51eAorICAgIGtlcm5lbCBwcm9ncmFtbWluZy4gIFRoaXMgZG9jdW1lbnQgZG9lc24ndCBleHBsYWluIHRoZSBnZW5lcmFsCisgICAgdG9waWNzIG9mIGxpbnV4IGtlcm5lbCBjb2RlcyBhbmQgZG9lc24ndCBjb3ZlciB0aGUgZGV0YWlsIG9mCisgICAgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBsb3ctbGV2ZWwgZHJpdmVyLiAgSXQgZGVzY3JpYmVzIG9ubHkgaG93IGlzCisgICAgdGhlIHN0YW5kYXJkIHdheSB0byB3cml0ZSBhIFBDSSBzb3VuZCBkcml2ZXIgb24gQUxTQS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHlvdSBhcmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBvbGRlciBBTFNBIHZlci4wLjUueCwgeW91CisgICAgY2FuIGNoZWNrIHRoZSBkcml2ZXJzIHN1Y2ggYXMgPGZpbGVuYW1lPmVzMTkzOC5jPC9maWxlbmFtZT4gb3IKKyAgICA8ZmlsZW5hbWU+bWFlc3RybzMuYzwvZmlsZW5hbWU+IHdoaWNoIGhhdmUgYWxzbyBhbG1vc3QgdGhlIHNhbWUKKyAgICBjb2RlLWJhc2UgaW4gdGhlIEFMU0EgMC41LnggdHJlZSwgc28geW91IGNhbiBjb21wYXJlIHRoZSBkaWZmZXJlbmNlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoaXMgZG9jdW1lbnQgaXMgc3RpbGwgYSBkcmFmdCB2ZXJzaW9uLiBBbnkgZmVlZGJhY2tzIGFuZAorICAgIGNvcnJlY3Rpb25zLCBwbGVhc2UhIQorICAgIDwvcGFyYT4KKyAgPC9wcmVmYWNlPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBGaWxlIFRyZWUgU3RydWN0dXJlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iZmlsZS10cmVlIj4KKyAgICA8dGl0bGU+RmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIGRyaXZlcnMgYXJlIHByb3ZpZGVkIGluIHRoZSB0d28gd2F5cy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9uZSBpcyB0aGUgdHJlZXMgcHJvdmlkZWQgYXMgYSB0YXJiYWxsIG9yIHZpYSBjdnMgZnJvbSB0aGUKKyAgICAgIEFMU0EncyBmdHAgc2l0ZSwgYW5kIGFub3RoZXIgaXMgdGhlIDIuNiAob3IgbGF0ZXIpIExpbnV4IGtlcm5lbAorICAgICAgdHJlZS4gVG8gc3luY2hyb25pemUgYm90aCwgdGhlIEFMU0EgZHJpdmVyIHRyZWUgaXMgc3BsaXQgaW50bworICAgICAgdHdvIGRpZmZlcmVudCB0cmVlczogYWxzYS1rZXJuZWwgYW5kIGFsc2EtZHJpdmVyLiBUaGUgZm9ybWVyCisgICAgICBjb250YWlucyBwdXJlbHkgdGhlIHNvdXJjZSBjb2RlcyBmb3IgdGhlIExpbnV4IDIuNiAob3IgbGF0ZXIpCisgICAgICB0cmVlLiBUaGlzIHRyZWUgaXMgZGVzaWduZWQgb25seSBmb3IgY29tcGlsYXRpb24gb24gMi42IG9yCisgICAgICBsYXRlciBlbnZpcm9ubWVudC4gVGhlIGxhdHRlciwgYWxzYS1kcml2ZXIsIGNvbnRhaW5zIG1hbnkgc3VidGxlCisgICAgICBmaWxlcyBmb3IgY29tcGlsaW5nIHRoZSBBTFNBIGRyaXZlciBvbiB0aGUgb3V0c2lkZSBvZiBMaW51eAorICAgICAga2VybmVsIGxpa2UgY29uZmlndXJlIHNjcmlwdCwgdGhlIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBvbGRlciwKKyAgICAgIDIuMiBhbmQgMi40IGtlcm5lbHMsIHRvIGFkYXB0IHRoZSBsYXRlc3Qga2VybmVsIEFQSSwKKyAgICAgIGFuZCBhZGRpdGlvbmFsIGRyaXZlcnMgd2hpY2ggYXJlIHN0aWxsIGluIGRldmVsb3BtZW50IG9yIGluCisgICAgICB0ZXN0cy4gIFRoZSBkcml2ZXJzIGluIGFsc2EtZHJpdmVyIHRyZWUgd2lsbCBiZSBtb3ZlZCB0bworICAgICAgYWxzYS1rZXJuZWwgKGV2ZW50dWFsbHkgMi42IGtlcm5lbCB0cmVlKSBvbmNlIHdoZW4gdGhleSBhcmUKKyAgICAgIGZpbmlzaGVkIGFuZCBjb25maXJtZWQgdG8gd29yayBmaW5lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpbGUgdHJlZSBzdHJ1Y3R1cmUgb2YgQUxTQSBkcml2ZXIgaXMgZGVwaWN0ZWQgYmVsb3cuIEJvdGgKKyAgICAgICAgYWxzYS1rZXJuZWwgYW5kIGFsc2EtZHJpdmVyIGhhdmUgYWxtb3N0IHRoZSBzYW1lIGZpbGUKKyAgICAgICAgc3RydWN0dXJlLCBleGNlcHQgZm9yIDxxdW90ZT5jb3JlPC9xdW90ZT4gZGlyZWN0b3J5LiBJdCdzCisgICAgICAgIG5hbWVkIGFzIDxxdW90ZT5hY29yZTwvcXVvdGU+IGluIGFsc2EtZHJpdmVyIHRyZWUuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5BTFNBIEZpbGUgVHJlZSBTdHJ1Y3R1cmU8L3RpdGxlPgorICAgICAgICAgIDxsaXRlcmFsbGF5b3V0PgorICAgICAgICBzb3VuZAorICAgICAgICAgICAgICAgIC9jb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAvb3NzCisgICAgICAgICAgICAgICAgICAgICAgICAvc2VxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL2luc3RyCisgICAgICAgICAgICAgICAgL2lvY3RsMzIKKyAgICAgICAgICAgICAgICAvaW5jbHVkZQorICAgICAgICAgICAgICAgIC9kcml2ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAvbXB1NDAxCisgICAgICAgICAgICAgICAgICAgICAgICAvb3BsMworICAgICAgICAgICAgICAgIC9pMmMKKyAgICAgICAgICAgICAgICAgICAgICAgIC9sMworICAgICAgICAgICAgICAgIC9zeW50aAorICAgICAgICAgICAgICAgICAgICAgICAgL2VtdXgKKyAgICAgICAgICAgICAgICAvcGNpCisgICAgICAgICAgICAgICAgICAgICAgICAvKGNhcmRzKQorICAgICAgICAgICAgICAgIC9pc2EKKyAgICAgICAgICAgICAgICAgICAgICAgIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL2FybQorICAgICAgICAgICAgICAgIC9wcGMKKyAgICAgICAgICAgICAgICAvc3BhcmMKKyAgICAgICAgICAgICAgICAvdXNiCisgICAgICAgICAgICAgICAgL3BjbWNpYSAvKGNhcmRzKQorICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5jb3JlIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIG1pZGRsZSBsYXllciwgdGhhdCBpcywgdGhlIGhlYXJ0CisgICAgICBvZiBBTFNBIGRyaXZlcnMuIEluIHRoaXMgZGlyZWN0b3J5LCB0aGUgbmF0aXZlIEFMU0EgbW9kdWxlcyBhcmUKKyAgICAgIHN0b3JlZC4gVGhlIHN1Yi1kaXJlY3RvcmllcyBjb250YWluIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBhcmUKKyAgICAgIGRlcGVuZGVudCB1cG9uIHRoZSBrZXJuZWwgY29uZmlnLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1vc3MiPgorICAgICAgICA8dGl0bGU+Y29yZS9vc3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBjb2RlcyBmb3IgUENNIGFuZCBtaXhlciBPU1MgZW11bGF0aW9uIG1vZHVsZXMgYXJlIHN0b3JlZAorICAgICAgICBpbiB0aGlzIGRpcmVjdG9yeS4gVGhlIHJhd21pZGkgT1NTIGVtdWxhdGlvbiBpcyBpbmNsdWRlZCBpbgorICAgICAgICB0aGUgQUxTQSByYXdtaWRpIGNvZGUgc2luY2UgaXQncyBxdWl0ZSBzbWFsbC4gVGhlIHNlcXVlbmNlcgorICAgICAgICBjb2RlIGlzIHN0b3JlZCBpbiBjb3JlL3NlcS9vc3MgZGlyZWN0b3J5IChzZWUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcS1vc3MiPjxjaXRldGl0bGU+CisgICAgICAgIGJlbG93PC9jaXRldGl0bGU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1pb2N0bDMyIj4KKyAgICAgICAgPHRpdGxlPmNvcmUvaW9jdGwzMjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIDMyYml0LWlvY3RsIHdyYXBwZXJzIGZvciA2NGJpdAorICAgICAgICBhcmNoaXRlY3R1cmVzIHN1Y2ggbGlrZSB4ODYtNjQsIHBwYzY0IGFuZCBzcGFyYzY0LiBGb3IgMzJiaXQKKyAgICAgICAgYW5kIGFscGhhIGFyY2hpdGVjdHVyZXMsIHRoZXNlIGFyZSBub3QgY29tcGlsZWQuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxIj4KKyAgICAgICAgPHRpdGxlPmNvcmUvc2VxPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBhcmUgZm9yIHRoZSBBTFNBCisgICAgICAgIHNlcXVlbmNlci4gVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHNlcXVlbmNlciBjb3JlIGFuZAorICAgICAgICBwcmltYXJ5IHNlcXVlbmNlciBtb2R1bGVzIHN1Y2ggbGlrZSBzbmQtc2VxLW1pZGksCisgICAgICAgIHNuZC1zZXEtdmlybWlkaSwgZXRjLiBUaGV5IGFyZSBjb21waWxlZCBvbmx5IHdoZW4KKyAgICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfU0VRVUVOQ0VSPC9jb25zdGFudD4gaXMgc2V0IGluIHRoZSBrZXJuZWwKKyAgICAgICAgY29uZmlnLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcS1vc3MiPgorICAgICAgICA8dGl0bGU+Y29yZS9zZXEvb3NzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjb250YWlucyB0aGUgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24gY29kZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1kZXEtaW5zdHIiPgorICAgICAgICA8dGl0bGU+Y29yZS9zZXEvaW5zdHI8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbW9kdWxlcyBmb3IgdGhlIHNlcXVlbmNlcgorICAgICAgICBpbnN0cnVtZW50IGxheWVyLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtaW5jbHVkZS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmluY2x1ZGUgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSBmb3IgdGhlIHB1YmxpYyBoZWFkZXIgZmlsZXMgb2YgQUxTQSBkcml2ZXJzLAorICAgICAgd2hpY2ggYXJlIHRvIGJlIGV4cG9ydGVkIHRvIHRoZSB1c2VyLXNwYWNlLCBvciBpbmNsdWRlZCBieQorICAgICAgc2V2ZXJhbCBmaWxlcyBhdCBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuIEJhc2ljYWxseSwgdGhlIHByaXZhdGUKKyAgICAgIGhlYWRlciBmaWxlcyBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiB0aGlzIGRpcmVjdG9yeSwgYnV0IHlvdSBtYXkKKyAgICAgIHN0aWxsIGZpbmQgZmlsZXMgdGhlcmUsIGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbiA6KSAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWRyaXZlcnMtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5kcml2ZXJzIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGNvZGVzIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgZHJpdmVycworICAgICAgb24gdGhlIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiAgVGhleSBhcmUgaGVuY2Ugc3VwcG9zZWQgbm90IHRvIGJlCisgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuCisgICAgICBGb3IgZXhhbXBsZSwgdGhlIGR1bW15IHBjbSBkcml2ZXIgYW5kIHRoZSBzZXJpYWwgTUlESQorICAgICAgZHJpdmVyIGFyZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeS4gSW4gdGhlIHN1Yi1kaXJlY3RvcmllcywKKyAgICAgIHRoZXJlIGFyZSB0aGUgY29kZXMgZm9yIGNvbXBvbmVudHMgd2hpY2ggYXJlIGluZGVwZW5kZW50IGZyb20KKyAgICAgIGJ1cyBhbmQgY3B1IGFyY2hpdGVjdHVyZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWRyaXZlcnMtZGlyZWN0b3J5LW1wdTQwMSI+CisgICAgICAgIDx0aXRsZT5kcml2ZXJzL21wdTQwMTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBNUFU0MDEgYW5kIE1QVTQwMS1VQVJUIG1vZHVsZXMgYXJlIHN0b3JlZCBoZXJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3Rvcnktb3BsMyI+CisgICAgICAgIDx0aXRsZT5kcml2ZXJzL29wbDMgYW5kIG9wbDQ8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgT1BMMyBhbmQgT1BMNCBGTS1zeW50aCBzdHVmZiBpcyBmb3VuZCBoZXJlLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pMmMtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5pMmMgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBBTFNBIGkyYyBjb21wb25lbnRzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWx0aG91Z2ggdGhlcmUgaXMgYSBzdGFuZGFyZCBpMmMgbGF5ZXIgb24gTGludXgsIEFMU0EgaGFzIGl0cworICAgICAgb3duIGkyYyBjb2RlcyBmb3Igc29tZSBjYXJkcywgYmVjYXVzZSB0aGUgc291bmRjYXJkIG5lZWRzIG9ubHkgYQorICAgICAgc2ltcGxlIG9wZXJhdGlvbiBhbmQgdGhlIHN0YW5kYXJkIGkyYyBBUEkgaXMgdG9vIGNvbXBsaWNhdGVkIGZvcgorICAgICAgc3VjaCBhIHB1cnBvc2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnktbDMiPgorICAgICAgICA8dGl0bGU+aTJjL2wzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBhIHN1Yi1kaXJlY3RvcnkgZm9yIEFSTSBMMyBpMmMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXN5bnRoLWRpcmVjdG9yeSI+CisgICAgICAgIDx0aXRsZT5zeW50aCBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBzeW50aCBtaWRkbGUtbGV2ZWwgbW9kdWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFNvIGZhciwgdGhlcmUgaXMgb25seSBFbXU4MDAwL0VtdTEwazEgc3ludGggZHJpdmVyIHVuZGVyCisgICAgICAgIHN5bnRoL2VtdXggc3ViLWRpcmVjdG9yeS4gCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXBjaS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPnBjaSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgaG9sZCB0aGUgdG9wLWxldmVsIGNhcmQgbW9kdWxlcworICAgICAgZm9yIFBDSSBzb3VuZGNhcmRzIGFuZCB0aGUgY29kZXMgc3BlY2lmaWMgdG8gdGhlIFBDSSBCVVMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZHJpdmVycyBjb21waWxlZCBmcm9tIGEgc2luZ2xlIGZpbGUgaXMgc3RvcmVkIGRpcmVjdGx5IG9uCisgICAgICBwY2kgZGlyZWN0b3J5LCB3aGlsZSB0aGUgZHJpdmVycyB3aXRoIHNldmVyYWwgc291cmNlIGZpbGVzIGFyZQorICAgICAgc3RvcmVkIG9uIGl0cyBvd24gc3ViLWRpcmVjdG9yeSAoZS5nLiBlbXUxMGsxLCBpY2UxNzEyKS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pc2EtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5pc2EgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGhvbGQgdGhlIHRvcC1sZXZlbCBjYXJkIG1vZHVsZXMKKyAgICAgIGZvciBJU0Egc291bmRjYXJkcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1hcm0tcHBjLXNwYXJjLWRpcmVjdG9yaWVzIj4KKyAgICAgIDx0aXRsZT5hcm0sIHBwYywgYW5kIHNwYXJjIGRpcmVjdG9yaWVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVzZSBhcmUgZm9yIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzIHdoaWNoIGFyZQorICAgICAgc3BlY2lmaWMgdG8gZWFjaCBnaXZlbiBhcmNoaXRlY3R1cmUuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtdXNiLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+dXNiIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjb250YWlucyB0aGUgVVNCLWF1ZGlvIGRyaXZlci4gT24gdGhlIGxhdGVzdCB2ZXJzaW9uLCB0aGUKKyAgICAgIFVTQiBNSURJIGRyaXZlciBpcyBpbnRlZ3JhdGVkIHRvZ2V0aGVyIHdpdGggdXNiLWF1ZGlvIGRyaXZlci4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1wY21jaWEtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5wY21jaWEgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgUENNQ0lBLCBlc3BlY2lhbGx5IFBDQ2FyZCBkcml2ZXJzIHdpbGwgZ28gaGVyZS4gQ2FyZEJ1cworICAgICAgZHJpdmVycyB3aWxsIGJlIG9uIHBjaSBkaXJlY3RvcnksIGJlY2F1c2UgaXRzIEFQSSBpcyBpZGVudGljYWwKKyAgICAgIHdpdGggdGhlIHN0YW5kYXJkIFBDSSBjYXJkcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1vc3MtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5vc3MgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgT1NTL0xpdGUgc291cmNlIGZpbGVzIGFyZSBzdG9yZWQgaGVyZSBvbiBMaW51eCAyLjYgKG9yCisgICAgICBsYXRlcikgdHJlZS4gKEluIHRoZSBBTFNBIGRyaXZlciB0YXJiYWxsLCBpdCdzIGVtcHR5LCBvZiBjb3Vyc2UgOikgCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYmFzaWMtZmxvdyI+CisgICAgPHRpdGxlPkJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LW91dGxpbmUiPgorICAgICAgPHRpdGxlPk91dGxpbmU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtaW5pbXVtIGZsb3cgb2YgUENJIHNvdW5kY2FyZCBpcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ZGVmaW5lIHRoZSBQQ0kgSUQgdGFibGUgKHNlZSB0aGUgc2VjdGlvbgorICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj48Y2l0ZXRpdGxlPlBDSSBFbnRyaWVzCisgICAgICAgICAgPC9jaXRldGl0bGU+PC9saW5rPikuPC9wYXJhPjwvbGlzdGl0ZW0+IAorICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBjYWxsYmFjay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5yZW1vdmUoKTwvZnVuY3Rpb24+IGNhbGxiYWNrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgcGNpX2RyaXZlciB0YWJsZSB3aGljaCBjb250YWlucyB0aGUgdGhyZWUgcG9pbnRlcnMgYWJvdmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+aW5pdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24ganVzdCBjYWxsaW5nIDxmdW5jdGlvbj5wY2lfbW9kdWxlX2luaXQoKTwvZnVuY3Rpb24+IHRvIHJlZ2lzdGVyIHRoZSBwY2lfZHJpdmVyIHRhYmxlIGRlZmluZWQgYWJvdmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+ZXhpdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX3VucmVnaXN0ZXJfZHJpdmVyKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb2RlIGV4YW1wbGUgaXMgc2hvd24gYmVsb3cuIFNvbWUgcGFydHMgYXJlIGtlcHQKKyAgICAgIHVuaW1wbGVtZW50ZWQgYXQgdGhpcyBtb21lbnQgYnV0IHdpbGwgYmUgZmlsbGVkIGluIHRoZQorICAgICAgc3VjY2VlZGluZyBzZWN0aW9ucy4gVGhlIG51bWJlcnMgaW4gY29tbWVudCBsaW5lcyBvZgorICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfcHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGFyZSB0aGUKKyAgICAgIG1hcmtlcnMuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5CYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVycyBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorICAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisgICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisgICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyAgLyogbW9kdWxlIHBhcmFtZXRlcnMgKHNlZSAiTW9kdWxlIFBhcmFtZXRlcnMiKSAqLworICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CisgIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworICAvKiBkZWZpbml0aW9uIG9mIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZCAqLworICB0eXBlZGVmIHN0cnVjdCBzbmRfbXljaGlwIG15Y2hpcF90OworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKyAgICAgICAgICAvLyByZXN0IG9mIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICAvLyAiUENJIFJlc291cmNlIE1hbmFnZW1lbnRzIgorICB9OworCisgIC8qIGNoaXAtc3BlY2lmaWMgZGVzdHJ1Y3RvcgorICAgKiAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2ZyZWUobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICAuLi4uIC8vIHdpbGwgYmUgaW1wbGVtZW50ZWQgbGF0ZXIuLi4KKyAgfQorCisgIC8qIGNvbXBvbmVudC1kZXN0cnVjdG9yCisgICAqIChzZWUgIk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2Rldl9mcmVlKHNuZF9kZXZpY2VfdCAqZGV2aWNlKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworICAgICAgICAgIHJldHVybiBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgIH0KKworICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yCisgICAqIChzZWUgIk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXljaGlwX3QgKipyY2hpcCkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwOworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgc3RhdGljIHNuZF9kZXZpY2Vfb3BzX3Qgb3BzID0geworICAgICAgICAgICAgICAgICAuZGV2X2ZyZWUgPSBzbmRfbXljaGlwX2Rldl9mcmVlLAorICAgICAgICAgIH07CisKKyAgICAgICAgICAqcmNoaXAgPSBOVUxMOworCisgICAgICAgICAgLy8gY2hlY2sgUENJIGF2YWlsYWJpbGl0eSBoZXJlCisgICAgICAgICAgLy8gKHNlZSAiUENJIFJlc291cmNlIE1hbmFnZW1lbnRzIikKKyAgICAgICAgICAuLi4uCisKKyAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovCisgICAgICAgICAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgICAgICAgY2hpcC0+Y2FyZCA9IGNhcmQ7CisKKyAgICAgICAgICAvLyByZXN0IG9mIGluaXRpYWxpemF0aW9uIGhlcmU7IHdpbGwgYmUgaW1wbGVtZW50ZWQKKyAgICAgICAgICAvLyBsYXRlciwgc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMiCisgICAgICAgICAgLi4uLgorCisgICAgICAgICAgaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLCAmb3BzKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKworICAgICAgICAgIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKKworICAgICAgICAgICpyY2hpcCA9IGNoaXA7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBjb25zdHJ1Y3RvciAtLSBzZWUgIkNvbnN0cnVjdG9yIiBzdWItc2VjdGlvbiAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIHN0YXRpYyBpbnQgZGV2OworICAgICAgICAgIHNuZF9jYXJkX3QgKmNhcmQ7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgIC8qICgxKSAqLworICAgICAgICAgIGlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICBpZiAoIWVuYWJsZVtkZXZdKSB7CisgICAgICAgICAgICAgICAgICBkZXYrKzsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qICgyKSAqLworICAgICAgICAgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworICAgICAgICAgIGlmIChjYXJkID09IE5VTEwpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICAgIC8qICgzKSAqLworICAgICAgICAgIGlmICgoZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDQpICovCisgICAgICAgICAgc3RyY3B5KGNhcmQtPmRyaXZlciwgIk15IENoaXAiKTsKKyAgICAgICAgICBzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTXkgT3duIENoaXAgMTIzIik7CisgICAgICAgICAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisgICAgICAgICAgICAgICAgICBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPmlvcG9ydCwgY2hpcC0+aXJxKTsKKworICAgICAgICAgIC8qICg1KSAqLworICAgICAgICAgIC4uLi4gLy8gaW1wbGVtZW50ZWQgbGF0ZXIKKworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIGlmICgoZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDcpICovCisgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisgICAgICAgICAgZGV2Kys7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBkZXN0cnVjdG9yIC0tIHNlZSAiRGVzdHJ1Y3RvciIgc3ViLXNlY3Rpb24gKi8KKyAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCisgIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlYWwgY29uc3RydWN0b3Igb2YgUENJIGRyaXZlcnMgaXMgcHJvYmUgY2FsbGJhY2suIFRoZQorICAgICAgcHJvYmUgY2FsbGJhY2sgYW5kIG90aGVyIGNvbXBvbmVudC1jb25zdHJ1Y3RvcnMgd2hpY2ggYXJlIGNhbGxlZAorICAgICAgZnJvbSBwcm9iZSBjYWxsYmFjayBzaG91bGQgYmUgZGVmaW5lZCB3aXRoCisgICAgICA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBwcmVmaXguIFlvdSAKKyAgICAgIGNhbm5vdCB1c2UgPHBhcmFtZXRlcj5fX2luaXQ8L3BhcmFtZXRlcj4gcHJlZml4IGZvciB0aGVtLAorICAgICAgYmVjYXVzZSBhbnkgUENJIGRldmljZSBjb3VsZCBiZSBhIGhvdHBsdWcgZGV2aWNlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBwcm9iZSBjYWxsYmFjaywgdGhlIGZvbGxvd2luZyBzY2hlbWUgaXMgb2Z0ZW4gdXNlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItZGV2aWNlLWluZGV4Ij4KKyAgICAgICAgPHRpdGxlPjEpIENoZWNrIGFuZCBpbmNyZW1lbnQgdGhlIGRldmljZSBpbmRleC48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgZGV2OworICAuLi4uCisgIGlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgIGlmICghZW5hYmxlW2Rldl0pIHsKKyAgICAgICAgICBkZXYrKzsKKyAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIGVuYWJsZVtkZXZdIGlzIHRoZSBtb2R1bGUgb3B0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXQgZWFjaCB0aW1lIHByb2JlIGNhbGxiYWNrIGlzIGNhbGxlZCwgY2hlY2sgdGhlCisgICAgICAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZGV2aWNlLiBJZiBub3QgYXZhaWxhYmxlLCBzaW1wbHkgaW5jcmVtZW50CisgICAgICAgIHRoZSBkZXZpY2UgaW5kZXggYW5kIHJldHVybnMuIGRldiB3aWxsIGJlIGluY3JlbWVudGVkIGFsc28KKyAgICAgICAgbGF0ZXIgKDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+PGNpdGV0aXRsZT5zdGVwCisgICAgICAgIDc8L2NpdGV0aXRsZT48L2xpbms+KS4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItY3JlYXRlLWNhcmQiPgorICAgICAgICA8dGl0bGU+MikgQ3JlYXRlIGEgY2FyZCBpbnN0YW5jZTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2NhcmRfdCAqY2FyZDsKKyAgLi4uLgorICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBkZXRhaWwgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+PGNpdGV0aXRsZT4KKyAgICAgICAgICBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtbWFpbiI+CisgICAgICAgIDx0aXRsZT4zKSBDcmVhdGUgYSBtYWluIGNvbXBvbmVudDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoaXMgcGFydCwgdGhlIFBDSSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXljaGlwX3QgKmNoaXA7CisgIC4uLi4KKyAgaWYgKChlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CisgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGUgZGV0YWlsIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InBjaS1yZXNvdXJjZSI+PGNpdGV0aXRsZT5QQ0kgUmVzb3VyY2UKKyAgICAgICAgTWFuYWdlbWVudHM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLW1haW4tY29tcG9uZW50Ij4KKyAgICAgICAgPHRpdGxlPjQpIFNldCB0aGUgZHJpdmVyIElEIGFuZCBuYW1lIHN0cmluZ3MuPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiTXkgQ2hpcCIpOworICBzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTXkgT3duIENoaXAgMTIzIik7CisgIHNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCBpcnEgJWkiLAorICAgICAgICAgIGNhcmQtPnNob3J0bmFtZSwgY2hpcC0+aW9wb3J0LCBjaGlwLT5pcnEpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhlIGRyaXZlciBmaWVsZCBob2xkcyB0aGUgbWluaW1hbCBJRCBzdHJpbmcgb2YgdGhlCisgICAgICAgIGNoaXAuIFRoaXMgaXMgcmVmZXJyZWQgYnkgYWxzYS1saWIncyBjb25maWd1cmF0b3IsIHNvIGtlZXAgaXQKKyAgICAgICAgc2ltcGxlIGJ1dCB1bmlxdWUuIAorICAgICAgICAgIEV2ZW4gdGhlIHNhbWUgZHJpdmVyIGNhbiBoYXZlIGRpZmZlcmVudCBkcml2ZXIgSURzIHRvCisgICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggY2hpcCB0eXBlLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBzaG9ydG5hbWUgZmllbGQgaXMgYSBzdHJpbmcgc2hvd24gYXMgbW9yZSB2ZXJib3NlCisgICAgICAgIG5hbWUuIFRoZSBsb25nbmFtZSBmaWVsZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gd2hpY2ggaXMKKyAgICAgICAgc2hvd24gaW4gPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkczwvZmlsZW5hbWU+LiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtb3RoZXIiPgorICAgICAgICA8dGl0bGU+NSkgQ3JlYXRlIG90aGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgbWl4ZXIsIE1JREksIGV0Yy48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBIZXJlIHlvdSBkZWZpbmUgdGhlIGJhc2ljIGNvbXBvbmVudHMgc3VjaCBhcworICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UiPjxjaXRldGl0bGU+UENNPC9jaXRldGl0bGU+PC9saW5rPiwKKyAgICAgICAgICBtaXhlciAoZS5nLiA8bGluayBsaW5rZW5kPSJhcGktYWM5NyI+PGNpdGV0aXRsZT5BQzk3PC9jaXRldGl0bGU+PC9saW5rPiksCisgICAgICAgICAgTUlESSAoZS5nLiA8bGluayBsaW5rZW5kPSJtaWRpLWludGVyZmFjZSI+PGNpdGV0aXRsZT5NUFUtNDAxPC9jaXRldGl0bGU+PC9saW5rPiksCisgICAgICAgICAgYW5kIG90aGVyIGludGVyZmFjZXMuCisgICAgICAgICAgQWxzbywgaWYgeW91IHdhbnQgYSA8bGluayBsaW5rZW5kPSJwcm9jLWludGVyZmFjZSI+PGNpdGV0aXRsZT5wcm9jCisgICAgICAgIGZpbGU8L2NpdGV0aXRsZT48L2xpbms+LCBkZWZpbmUgaXQgaGVyZSwgdG9vLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLXJlZ2lzdGVyLWNhcmQiPgorICAgICAgICA8dGl0bGU+NikgUmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UuPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgIHJldHVybiBlcnI7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1yZWdpc3RyYXRpb24iPjxjaXRldGl0bGU+TWFuYWdlbWVudAorICAgICAgICBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvY2l0ZXRpdGxlPjwvbGluaz4sIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+CisgICAgICAgIDx0aXRsZT43KSBTZXQgdGhlIFBDSSBkcml2ZXIgZGF0YSBhbmQgcmV0dXJuIHplcm8uPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKKyAgICAgICAgZGV2Kys7CisgICAgICAgIHJldHVybiAwOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgSW4gdGhlIGFib3ZlLCB0aGUgY2FyZCByZWNvcmQgaXMgc3RvcmVkLiBUaGlzIHBvaW50ZXIgaXMKKyAgICAgICAgcmVmZXJyZWQgaW4gdGhlIHJlbW92ZSBjYWxsYmFjayBhbmQgcG93ZXItbWFuYWdlbWVudAorICAgICAgICBjYWxsYmFja3MsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5EZXN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciwgcmVtb3ZlIGNhbGxiYWNrLCBzaW1wbHkgcmVsZWFzZXMgdGhlIGNhcmQKKyAgICAgIGluc3RhbmNlLiBUaGVuIHRoZSBBTFNBIG1pZGRsZSBsYXllciB3aWxsIHJlbGVhc2UgYWxsIHRoZQorICAgICAgYXR0YWNoZWQgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEl0IHdvdWxkIGJlIHR5cGljYWxseSBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCisgIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhlIGFib3ZlIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBjYXJkIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSBQQ0kKKwlkcml2ZXIgZGF0YS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1oZWFkZXItZmlsZXMiPgorICAgICAgPHRpdGxlPkhlYWRlciBGaWxlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBhYm92ZSBleGFtcGxlLCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGluY2x1ZGUgZmlsZXMKKyAgICAgIGFyZSBuZWNlc3NhcnkuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorICAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKwl3aGVyZSB0aGUgbGFzdCBvbmUgaXMgbmVjZXNzYXJ5IG9ubHkgd2hlbiBtb2R1bGUgb3B0aW9ucyBhcmUKKyAgICAgIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBmaWxlLiAgSWYgdGhlIGNvZGVzIGFyZSBzcGxpdCB0byBzZXZlcmFsCisgICAgICBmaWxlcywgdGhlIGZpbGUgd2l0aG91dCBtb2R1bGUgb3B0aW9ucyBkb24ndCBuZWVkIHRoZW0uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGVtLCB5b3UnbGwgbmVlZAorICAgICAgPGZpbGVuYW1lPiZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDs8L2ZpbGVuYW1lPiBmb3IgdGhlIGludGVycnVwdAorICAgICAgaGFuZGxpbmcsIGFuZCA8ZmlsZW5hbWU+Jmx0O2FzbS9pby5oJmd0OzwvZmlsZW5hbWU+IGZvciB0aGUgaS9vCisgICAgICBhY2Nlc3MuIElmIHlvdSB1c2UgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4gb3IKKyAgICAgIDxmdW5jdGlvbj51ZGVsYXkoKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucywgeW91J2xsIG5lZWQgdG8gaW5jbHVkZQorICAgICAgPGZpbGVuYW1lPiZsdDtsaW51eC9kZWxheS5oJmd0OzwvZmlsZW5hbWU+LCB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBBTFNBIGludGVyZmFjZXMgbGlrZSBQQ00gb3IgY29udHJvbCBBUEkgYXJlIGRlZmluZWQgaW4gb3RoZXIKKyAgICAgIGhlYWRlciBmaWxlcyBhcyA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3h4eC5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgVGhleSBoYXZlIHRvIGJlIGluY2x1ZGVkIGFmdGVyCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2NvcmUuaCZndDs8L2ZpbGVuYW1lPi4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iY2FyZC1tYW5hZ2VtZW50Ij4KKyAgICA8dGl0bGU+TWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNhcmQtaW5zdGFuY2UiPgorICAgICAgPHRpdGxlPkNhcmQgSW5zdGFuY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBGb3IgZWFjaCBzb3VuZGNhcmQsIGEgPHF1b3RlPmNhcmQ8L3F1b3RlPiByZWNvcmQgbXVzdCBiZSBhbGxvY2F0ZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQSBjYXJkIHJlY29yZCBpcyB0aGUgaGVhZHF1YXJ0ZXJzIG9mIHRoZSBzb3VuZGNhcmQuICBJdCBtYW5hZ2VzCisgICAgICB0aGUgbGlzdCBvZiB3aG9sZSBkZXZpY2VzIChjb21wb25lbnRzKSBvbiB0aGUgc291bmRjYXJkLCBzdWNoIGFzCisgICAgICBQQ00sIG1peGVycywgTUlESSwgc3ludGhlc2l6ZXIsIGFuZCBzbyBvbi4gIEFsc28sIHRoZSBjYXJkCisgICAgICByZWNvcmQgaG9sZHMgdGhlIElEIGFuZCB0aGUgbmFtZSBzdHJpbmdzIG9mIHRoZSBjYXJkLCBtYW5hZ2VzCisgICAgICB0aGUgcm9vdCBvZiBwcm9jIGZpbGVzLCBhbmQgY29udHJvbHMgdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdGVzCisgICAgICBhbmQgaG90cGx1ZyBkaXNjb25uZWN0aW9ucy4gIFRoZSBjb21wb25lbnQgbGlzdCBvbiB0aGUgY2FyZAorICAgICAgcmVjb3JkIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBwcm9wZXIgcmVsZWFzZXMgb2YgcmVzb3VyY2VzIGF0CisgICAgICBkZXN0cnVjdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHRvIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jYXJkX3QgKmNhcmQ7CisgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBtb2R1bGUsIGV4dHJhX3NpemUpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBhcmd1bWVudHMsIHRoZSBjYXJkLWluZGV4IG51bWJlciwgdGhlCisgICAgICAgIGlkIHN0cmluZywgdGhlIG1vZHVsZSBwb2ludGVyICh1c3VhbGx5CisgICAgICAgIDxjb25zdGFudD5USElTX01PRFVMRTwvY29uc3RhbnQ+KSwKKyAgICAgICAgYW5kIHRoZSBzaXplIG9mIGV4dHJhLWRhdGEgc3BhY2UuICBUaGUgbGFzdCBhcmd1bWVudCBpcyB1c2VkIHRvCisgICAgICAgIGFsbG9jYXRlIGNhcmQtJmd0O3ByaXZhdGVfZGF0YSBmb3IgdGhlCisgICAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGRhdGEKKyAgICAgICAgPGVtcGhhc2lzPmlzPC9lbXBoYXNpcz4gYWxsb2NhdGVkIGJ5CisgICAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY29tcG9uZW50Ij4KKyAgICAgIDx0aXRsZT5Db21wb25lbnRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgY2FyZCBpcyBjcmVhdGVkLCB5b3UgY2FuIGF0dGFjaCB0aGUgY29tcG9uZW50cworICAgICAgKGRldmljZXMpIHRvIHRoZSBjYXJkIGluc3RhbmNlLiBPbiBBTFNBIGRyaXZlciwgYSBjb21wb25lbnQgaXMKKyAgICAgIHJlcHJlc2VudGVkIGFzIGEgPHR5cGU+c25kX2RldmljZV90PC90eXBlPiBvYmplY3QuCisgICAgICBBIGNvbXBvbmVudCBjYW4gYmUgYSBQQ00gaW5zdGFuY2UsIGEgY29udHJvbCBpbnRlcmZhY2UsIGEgcmF3CisgICAgICBNSURJIGludGVyZmFjZSwgZXRjLiAgRWFjaCBvZiBzdWNoIGluc3RhbmNlcyBoYXMgb25lIGNvbXBvbmVudAorICAgICAgZW50cnkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBIGNvbXBvbmVudCBjYW4gYmUgY3JlYXRlZCB2aWEKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX1hYWCwgY2hpcCwgJm9wcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgdGFrZXMgdGhlIGNhcmQgcG9pbnRlciwgdGhlIGRldmljZS1sZXZlbAorICAgICAgKDxjb25zdGFudD5TTkRSVl9ERVZfWFhYPC9jb25zdGFudD4pLCB0aGUgZGF0YSBwb2ludGVyLCBhbmQgdGhlCisgICAgICBjYWxsYmFjayBwb2ludGVycyAoPHBhcmFtZXRlcj4mYW1wO29wczwvcGFyYW1ldGVyPikuIFRoZQorICAgICAgZGV2aWNlLWxldmVsIGRlZmluZXMgdGhlIHR5cGUgb2YgY29tcG9uZW50cyBhbmQgdGhlIG9yZGVyIG9mCisgICAgICByZWdpc3RyYXRpb24gYW5kIGRlLXJlZ2lzdHJhdGlvbi4gIEZvciBtb3N0IG9mIGNvbXBvbmVudHMsIHRoZQorICAgICAgZGV2aWNlLWxldmVsIGlzIGFscmVhZHkgZGVmaW5lZC4gIEZvciBhIHVzZXItZGVmaW5lZCBjb21wb25lbnQsCisgICAgICB5b3UgY2FuIHVzZSA8Y29uc3RhbnQ+U05EUlZfREVWX0xPV0xFVkVMPC9jb25zdGFudD4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhpcyBmdW5jdGlvbiBpdHNlbGYgZG9lc24ndCBhbGxvY2F0ZSB0aGUgZGF0YSBzcGFjZS4gVGhlIGRhdGEKKyAgICAgIG11c3QgYmUgYWxsb2NhdGVkIG1hbnVhbGx5IGJlZm9yZWhhbmQsIGFuZCBpdHMgcG9pbnRlciBpcyBwYXNzZWQKKyAgICAgIGFzIHRoZSBhcmd1bWVudC4gVGhpcyBwb2ludGVyIGlzIHVzZWQgYXMgdGhlIGlkZW50aWZpZXIKKyAgICAgICg8cGFyYW1ldGVyPmNoaXA8L3BhcmFtZXRlcj4gaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGZvciB0aGUKKyAgICAgIGluc3RhbmNlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEVhY2ggQUxTQSBwcmUtZGVmaW5lZCBjb21wb25lbnQgc3VjaCBhcyBhYzk3IG9yIHBjbSBjYWxscworICAgICAgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiBpbnNpZGUgaXRzCisgICAgICBjb25zdHJ1Y3Rvci4gVGhlIGRlc3RydWN0b3IgZm9yIGVhY2ggY29tcG9uZW50IGlzIGRlZmluZWQgaW4gdGhlCisgICAgICBjYWxsYmFjayBwb2ludGVycy4gIEhlbmNlLCB5b3UgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YKKyAgICAgIGNhbGxpbmcgYSBkZXN0cnVjdG9yIGZvciBzdWNoIGEgY29tcG9uZW50LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgdG8gY3JlYXRlIHlvdXIgb3duIGNvbXBvbmVudCwgeW91IG5lZWQgdG8KKyAgICAgIHNldCB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiB0byBkZXZfZnJlZSBjYWxsYmFjayBpbgorICAgICAgPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4sIHNvIHRoYXQgaXQgY2FuIGJlIHJlbGVhc2VkCisgICAgICBhdXRvbWF0aWNhbGx5IHZpYSA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZSgpPC9mdW5jdGlvbj4uIFRoZQorICAgICAgZXhhbXBsZSB3aWxsIGJlIHNob3duIGxhdGVyIGFzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEKKyAgICAgIGNoaXAtc3BlY2lmaWMgZGF0YS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jaGlwLXNwZWNpZmljIj4KKyAgICAgIDx0aXRsZT5DaGlwLVNwZWNpZmljIERhdGE8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBUaGUgY2hpcC1zcGVjaWZpYyBpbmZvcm1hdGlvbiwgZS5nLiB0aGUgaS9vIHBvcnQgYWRkcmVzcywgaXRzCisgICAgICByZXNvdXJjZSBwb2ludGVyLCBvciB0aGUgaXJxIG51bWJlciwgaXMgc3RvcmVkIGluIHRoZQorICAgICAgY2hpcC1zcGVjaWZpYyByZWNvcmQuCisgICAgICBVc3VhbGx5LCB0aGUgY2hpcC1zcGVjaWZpYyByZWNvcmQgaXMgdHlwZWRlZidlZCBhcworICAgICAgPHR5cGU+eHh4X3Q8L3R5cGU+IGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB0eXBlZGVmIHN0cnVjdCBzbmRfbXljaGlwIG15Y2hpcF90OworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgLi4uLgorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBnZW5lcmFsLCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gYWxsb2NhdGUgdGhlIGNoaXAgcmVjb3JkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KKyAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aCB0byB0aGUgNHRoIGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LCBpLmUuCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihteWNoaXBfdCkpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgd2hldGhlciA8dHlwZT5teWNoaXBfdDwvdHlwZT4gaXMgdGhlIHR5cGUgb2YgdGhlIGNoaXAgcmVjb3JkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gcmV0dXJuLCB0aGUgYWxsb2NhdGVkIHJlY29yZCBjYW4gYmUgYWNjZXNzZWQgYXMKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXljaGlwX3QgKmNoaXAgPSAobXljaGlwX3QgKiljYXJkLT5wcml2YXRlX2RhdGE7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBXaXRoIHRoaXMgbWV0aG9kLCB5b3UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSB0d2ljZS4KKyAgICAgICAgICBUaGUgcmVjb3JkIGlzIHJlbGVhc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGNhcmQgaW5zdGFuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jaGlwLXNwZWNpZmljLWFsbG9jYXRlLWV4dHJhIj4KKyAgICAgICAgPHRpdGxlPjIuIEFsbG9jYXRpbmcgYW4gZXh0cmEgZGV2aWNlLjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAorICAgICAgICAgIDxmdW5jdGlvbj5rY2FsbG9jKCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jYXJkX3QgKmNhcmQ7CisgIG15Y2hpcF90ICpjaGlwOworICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKKyAgLi4uLi4KKyAgY2hpcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgY2hpcCByZWNvcmQgc2hvdWxkIGhhdmUgdGhlIGZpZWxkIHRvIGhvbGQgdGhlIGNhcmQKKyAgICAgICAgICBwb2ludGVyIGF0IGxlYXN0LCAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9teWNoaXAgeworICAgICAgICAgIHNuZF9jYXJkX3QgKmNhcmQ7CisgICAgICAgICAgLi4uLgorICB9OworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlbiwgc2V0IHRoZSBjYXJkIHBvaW50ZXIgaW4gdGhlIHJldHVybmVkIGNoaXAgaW5zdGFuY2UuCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGNoaXAtPmNhcmQgPSBjYXJkOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTmV4dCwgaW5pdGlhbGl6ZSB0aGUgZmllbGRzLCBhbmQgcmVnaXN0ZXIgdGhpcyBjaGlwCisgICAgICAgICAgcmVjb3JkIGFzIGEgbG93LWxldmVsIGRldmljZSB3aXRoIGEgc3BlY2lmaWVkCisgICAgICAgICAgPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4sIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisgICAgICAgICAgLmRldl9mcmVlID0gICAgICAgIHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgIH07CisgIC4uLi4KKyAgc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlKCk8L2Z1bmN0aW9uPiBpcyB0aGUKKyAgICAgICAgZGV2aWNlLWRlc3RydWN0b3IgZnVuY3Rpb24sIHdoaWNoIHdpbGwgY2FsbCB0aGUgcmVhbAorICAgICAgICBkZXN0cnVjdG9yLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2Rldl9mcmVlKHNuZF9kZXZpY2VfdCAqZGV2aWNlKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOworICAgICAgICAgIHJldHVybiBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIHdoZXJlIDxmdW5jdGlvbj5zbmRfbXljaGlwX2ZyZWUoKTwvZnVuY3Rpb24+IGlzIHRoZSByZWFsIGRlc3RydWN0b3IuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LXJlZ2lzdHJhdGlvbiI+CisgICAgICA8dGl0bGU+UmVnaXN0cmF0aW9uIGFuZCBSZWxlYXNlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciBhbGwgY29tcG9uZW50cyBhcmUgYXNzaWduZWQsIHJlZ2lzdGVyIHRoZSBjYXJkIGluc3RhbmNlCisgICAgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5zbmRfY2FyZF9yZWdpc3RlcigpPC9mdW5jdGlvbj4uIFRoZSBhY2Nlc3MKKyAgICAgIHRvIHRoZSBkZXZpY2UgZmlsZXMgYXJlIGVuYWJsZWQgYXQgdGhpcyBwb2ludC4gVGhhdCBpcywgYmVmb3JlCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcmVnaXN0ZXIoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgdGhlCisgICAgICBjb21wb25lbnRzIGFyZSBzYWZlbHkgaW5hY2Nlc3NpYmxlIGZyb20gZXh0ZXJuYWwgc2lkZS4gSWYgdGhpcworICAgICAgY2FsbCBmYWlscywgZXhpdCB0aGUgcHJvYmUgZnVuY3Rpb24gYWZ0ZXIgcmVsZWFzaW5nIHRoZSBjYXJkIHZpYQorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciByZWxlYXNpbmcgdGhlIGNhcmQgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCBzaW1wbHkKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlKCk8L2Z1bmN0aW9uPi4gQXMgYWxyZWFkeSBtZW50aW9uZWQsIGFsbAorICAgICAgY29tcG9uZW50cyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSBieSB0aGlzIGNhbGwuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQXMgZnVydGhlciBub3RlcywgdGhlIGRlc3RydWN0b3JzIChib3RoCisgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9kZXZfZnJlZTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZTwvZnVuY3Rpb24+KSBjYW5ub3QgYmUgZGVmaW5lZCB3aXRoCisgICAgICA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXgsIGJlY2F1c2UgdGhleSBtYXkgYmUKKyAgICAgIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciwgdG9vLCBhdCB0aGUgZmFsc2UgcGF0aC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgRm9yIGEgZGV2aWNlIHdoaWNoIGFsbG93cyBob3RwbHVnZ2luZywgeW91IGNhbiB1c2UKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlX2luX3RocmVhZDwvZnVuY3Rpb24+LiAgVGhpcyBvbmUgd2lsbAorICAgICAgcG9zdHBvbmUgdGhlIGRlc3RydWN0aW9uIGFuZCB3YWl0IGluIGEga2VybmVsLXRocmVhZCB1bnRpbCBhbGwKKyAgICAgIGRldmljZXMgYXJlIGNsb3NlZC4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50cyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBjaS1yZXNvdXJjZSI+CisgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlzIHNlY3Rpb24sIHdlJ2xsIGZpbmlzaCB0aGUgY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciwKKyAgICAgIGRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBUaGUgZXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LAorICAgICAgYmVsb3cuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ0kgUmVzb3VyY2UgTWFuYWdlbWVudHMgRXhhbXBsZTwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICBzbmRfY2FyZF90ICpjYXJkOworICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2k7CisKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQ7CisgICAgICAgICAgaW50IGlycTsKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIC8qIGRpc2FibGUgaGFyZHdhcmUgaGVyZSBpZiBhbnkgKi8KKyAgICAgICAgICAuLi4uIC8vIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBkb2N1bWVudCkKKworICAgICAgICAgIC8qIHJlbGVhc2UgdGhlIGlycSAqLworICAgICAgICAgIGlmIChjaGlwLT5pcnEgPj0gMCkKKyAgICAgICAgICAgICAgICAgIGZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKyAgICAgICAgICAvKiByZWxlYXNlIHRoZSBpL28gcG9ydHMgJiBtZW1vcnkgKi8KKyAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogZGlzYWJsZSB0aGUgUENJIGVudHJ5ICovCisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgZGF0YSAqLworICAgICAgICAgIGtmcmVlKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzbmRfY2FyZF90ICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWNoaXBfdCAqKnJjaGlwKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgc25kX2RldmljZV9vcHNfdCBvcHMgPSB7CisgICAgICAgICAgICAgICAgIC5kZXZfZnJlZSA9IHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgICAgICAgICAgfTsKKworICAgICAgICAgICpyY2hpcCA9IE5VTEw7CisKKyAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBQQ0kgZW50cnkgKi8KKyAgICAgICAgICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgLyogY2hlY2sgUENJIGF2YWlsYWJpbGl0eSAoMjhiaXQgRE1BKSAqLworICAgICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwIHx8CisgICAgICAgICAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOworICAgICAgICAgIH0KKworICAgICAgICAgIGNoaXAgPSBrY2FsbG9jKDEsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgc3R1ZmYgKi8KKyAgICAgICAgICBjaGlwLT5jYXJkID0gY2FyZDsKKyAgICAgICAgICBjaGlwLT5wY2kgPSBwY2k7CisgICAgICAgICAgY2hpcC0+aXJxID0gLTE7CisKKyAgICAgICAgICAvKiAoMSkgUENJIHJlc291cmNlIGFsbG9jYXRpb24gKi8KKyAgICAgICAgICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIGtmcmVlKGNoaXApOworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKyAgICAgICAgICBjaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisgICAgICAgICAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiTXkgQ2hpcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopY2hpcCkpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaXJxICVkXG4iLCBwY2ktPmlycSk7CisgICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICAgIH0KKyAgICAgICAgICBjaGlwLT5pcnEgPSBwY2ktPmlycTsKKworICAgICAgICAgIC8qICgyKSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBoYXJkd2FyZSAqLworICAgICAgICAgIC4uLi4gLy8gICAobm90IGltcGxlbWVudGVkIGluIHRoaXMgZG9jdW1lbnQpCisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAsICZvcHMpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworCisgICAgICAgICAgKnJjaGlwID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfSAgICAgICAgCisKKyAgLyogUENJIElEcyAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKKyAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKyAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHsgMCwgfQorICB9OworICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOworCisgIC8qIHBjaV9kcml2ZXIgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IE93biBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXljaGlwX2lkcywKKyAgICAgICAgICAucHJvYmUgPSBzbmRfbXljaGlwX3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXljaGlwX3JlbW92ZSksCisgIH07CisKKyAgLyogaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1vZHVsZSAqLworICBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfbXljaGlwX2luaXQodm9pZCkKKyAgeworICAgICAgICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CisgIH0KKworICAvKiBjbGVhbiB1cCB0aGUgbW9kdWxlICovCisgIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbXljaGlwX2V4aXQodm9pZCkKKyAgeworICAgICAgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKyAgfQorCisgIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9teWNoaXBfaW5pdCkKKyAgbW9kdWxlX2V4aXQoYWxzYV9jYXJkX215Y2hpcF9leGl0KQorCisgIEVYUE9SVF9OT19TWU1CT0xTOyAvKiBmb3Igb2xkIGtlcm5lbHMgb25seSAqLworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2Utc29tZS1oYWZ0YXMiPgorICAgICAgPHRpdGxlPlNvbWUgSGFmdGEnczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgUENJIHJlc291cmNlcyBpcyBkb25lIGluIHRoZQorICAgICAgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgYW5kIHVzdWFsbHkgYW4gZXh0cmEKKyAgICAgIDxmdW5jdGlvbj54eHhfY3JlYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyB3cml0dGVuIGZvciB0aGlzCisgICAgICBwdXJwb3NlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBjYXNlIG9mIFBDSSBkZXZpY2VzLCB5b3UgaGF2ZSB0byBjYWxsIGF0IGZpcnN0CisgICAgICA8ZnVuY3Rpb24+cGNpX2VuYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGJlZm9yZQorICAgICAgYWxsb2NhdGluZyByZXNvdXJjZXMuIEFsc28sIHlvdSBuZWVkIHRvIHNldCB0aGUgcHJvcGVyIFBDSSBETUEKKyAgICAgIG1hc2sgdG8gbGltaXQgdGhlIGFjY2Vzc2VkIGkvbyByYW5nZS4gSW4gc29tZSBjYXNlcywgeW91IG1pZ2h0CisgICAgICBuZWVkIHRvIGNhbGwgPGZ1bmN0aW9uPnBjaV9zZXRfbWFzdGVyKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwKKyAgICAgIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTdXBwb3NlIHRoZSAyOGJpdCBtYXNrLCBhbmQgdGhlIGNvZGUgdG8gYmUgYWRkZWQgd291bGQgYmUgbGlrZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKyAgICAgICAgICByZXR1cm4gZXJyOworICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAorICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgIHJldHVybiAtRU5YSU87CisgIH0KKyAgCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLXJlc291cmNlLWFsbG9jYXRpb24iPgorICAgICAgPHRpdGxlPlJlc291cmNlIEFsbG9jYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIEkvTyBwb3J0cyBhbmQgaXJxcyBhcmUgZG9uZSB2aWEgc3RhbmRhcmQga2VybmVsCisgICAgICBmdW5jdGlvbnMuIFVubGlrZSBBTFNBIHZlci4wLjUueC4sIHRoZXJlIGFyZSBubyBoZWxwZXJzIGZvcgorICAgICAgdGhhdC4gQW5kIHRoZXNlIHJlc291cmNlcyBtdXN0IGJlIHJlbGVhc2VkIGluIHRoZSBkZXN0cnVjdG9yCisgICAgICBmdW5jdGlvbiAoc2VlIGJlbG93KS4gQWxzbywgb24gQUxTQSAwLjkueCwgeW91IGRvbid0IG5lZWQgdG8KKyAgICAgIGFsbG9jYXRlIChwc2V1ZG8tKURNQSBmb3IgUENJIGxpa2UgQUxTQSAwLjUueC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgYXNzdW1lIHRoYXQgdGhpcyBQQ0kgZGV2aWNlIGhhcyBhbiBJL08gcG9ydCB3aXRoIDggYnl0ZXMKKyAgICAgICAgYW5kIGFuIGludGVycnVwdC4gVGhlbiA8dHlwZT5teWNoaXBfdDwvdHlwZT4gd2lsbCBoYXZlIHRoZQorICAgICAgICBmb2xsb3dpbmcgZmllbGRzOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX215Y2hpcCB7CisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKworICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydDsKKyAgICAgICAgICBpbnQgaXJxOworICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgYW4gaS9vIHBvcnQgKGFuZCBhbHNvIGEgbWVtb3J5IHJlZ2lvbiksIHlvdSBuZWVkIHRvIGhhdmUKKyAgICAgIHRoZSByZXNvdXJjZSBwb2ludGVyIGZvciB0aGUgc3RhbmRhcmQgcmVzb3VyY2UgbWFuYWdlbWVudC4gRm9yCisgICAgICBhbiBpcnEsIHlvdSBoYXZlIHRvIGtlZXAgb25seSB0aGUgaXJxIG51bWJlciAoaW50ZWdlcikuIEJ1dCB5b3UKKyAgICAgIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIG51bWJlciBhcyAtMSBiZWZvcmUgYWN0dWFsIGFsbG9jYXRpb24sCisgICAgICBzaW5jZSBpcnEgMCBpcyB2YWxpZC4gVGhlIHBvcnQgYWRkcmVzcyBhbmQgaXRzIHJlc291cmNlIHBvaW50ZXIKKyAgICAgIGNhbiBiZSBpbml0aWFsaXplZCBhcyBudWxsIGJ5CisgICAgICA8ZnVuY3Rpb24+a2NhbGxvYygpPC9mdW5jdGlvbj4gYXV0b21hdGljYWxseSwgc28geW91CisgICAgICBkb24ndCBoYXZlIHRvIHRha2UgY2FyZSBvZiByZXNldHRpbmcgdGhlbS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBhbiBpL28gcG9ydCBpcyBkb25lIGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsgCisgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgfQorICBjaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDwhLS0gb2Jzb2xldGUgLS0+CisgICAgICAgIEl0IHdpbGwgcmVzZXJ2ZSB0aGUgaS9vIHBvcnQgcmVnaW9uIG9mIDggYnl0ZXMgb2YgdGhlIGdpdmVuCisgICAgICBQQ0kgZGV2aWNlLiBUaGUgcmV0dXJuZWQgdmFsdWUsIGNoaXAtJmd0O3Jlc19wb3J0LCBpcyBhbGxvY2F0ZWQKKyAgICAgIHZpYSA8ZnVuY3Rpb24+a21hbGxvYygpPC9mdW5jdGlvbj4gYnkKKyAgICAgIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4uIFRoZSBwb2ludGVyIG11c3QgYmUKKyAgICAgIHJlbGVhc2VkIHZpYSA8ZnVuY3Rpb24+a2ZyZWUoKTwvZnVuY3Rpb24+LCBidXQgdGhlcmUgaXMgc29tZQorICAgICAgcHJvYmxlbSByZWdhcmRpbmcgdGhpcy4gVGhpcyBpc3N1ZSB3aWxsIGJlIGV4cGxhaW5lZCBtb3JlIGJlbG93LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgYW4gaW50ZXJydXB0IHNvdXJjZSBpcyBkb25lIGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAorICAgICAgICAgICAgICAgICAgU0FfSU5URVJSVVBUfFNBX1NISVJRLCAiTXkgQ2hpcCIsCisgICAgICAgICAgICAgICAgICAodm9pZCAqKWNoaXApKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgfQorICBjaGlwLT5pcnEgPSBwY2ktPmlycTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIDxmdW5jdGlvbj5zbmRfbXljaGlwX2ludGVycnVwdCgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBkZWZpbmVkIDxsaW5rCisgICAgICBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj48Y2l0ZXRpdGxlPmxhdGVyPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIE5vdGUgdGhhdCBjaGlwLSZndDtpcnEgc2hvdWxkIGJlIGRlZmluZWQKKyAgICAgIG9ubHkgd2hlbiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IHN1Y2NlZWRlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBPbiB0aGUgUENJIGJ1cywgdGhlIGludGVycnVwdHMgY2FuIGJlIHNoYXJlZC4gVGh1cywKKyAgICAgIDxjb25zdGFudD5TQV9TSElSUTwvY29uc3RhbnQ+IGlzIGdpdmVuIGFzIHRoZSBpbnRlcnJ1cHQgZmxhZyBvZgorICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfaXJxKCk8L2Z1bmN0aW9uPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IGlzIHRoZQorICAgICAgZGF0YSBwb2ludGVyIHBhc3NlZCB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFVzdWFsbHksIHRoZQorICAgICAgY2hpcC1zcGVjaWZpYyByZWNvcmQgaXMgdXNlZCBmb3IgdGhhdCwgYnV0IHlvdSBjYW4gdXNlIHdoYXQgeW91CisgICAgICBsaWtlLCB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSSB3b24ndCBkZWZpbmUgdGhlIGRldGFpbCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYXQgdGhpcworICAgICAgICBwb2ludCwgYnV0IGF0IGxlYXN0IGl0cyBhcHBlYXJhbmNlIGNhbiBiZSBleHBsYWluZWQgbm93LiBUaGUKKyAgICAgICAgaW50ZXJydXB0IGhhbmRsZXIgbG9va3MgdXN1YWxseSBsaWtlIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXljaGlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gZGV2X2lkOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm93IGxldCdzIHdyaXRlIHRoZSBjb3JyZXNwb25kaW5nIGRlc3RydWN0b3IgZm9yIHRoZSByZXNvdXJjZXMKKyAgICAgIGFib3ZlLiBUaGUgcm9sZSBvZiBkZXN0cnVjdG9yIGlzIHNpbXBsZTogZGlzYWJsZSB0aGUgaGFyZHdhcmUKKyAgICAgIChpZiBhbHJlYWR5IGFjdGl2YXRlZCkgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4gU28gZmFyLCB3ZQorICAgICAgaGF2ZSBubyBoYXJkd2FyZSBwYXJ0LCBzbyB0aGUgZGlzYWJsaW5nIGlzIG5vdCB3cml0dGVuIGhlcmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHJlbGVhc2luZyB0aGUgcmVzb3VyY2VzLCA8cXVvdGU+Y2hlY2stYW5kLXJlbGVhc2U8L3F1b3RlPgorICAgICAgICBtZXRob2QgaXMgYSBzYWZlciB3YXkuIEZvciB0aGUgaW50ZXJydXB0LCBkbyBsaWtlIHRoaXM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmIChjaGlwLT5pcnEgPj0gMCkKKyAgICAgICAgICBmcmVlX2lycShjaGlwLT5pcnEsICh2b2lkICopY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBTaW5jZSB0aGUgaXJxIG51bWJlciBjYW4gc3RhcnQgZnJvbSAwLCB5b3Ugc2hvdWxkIGluaXRpYWxpemUKKyAgICAgICAgY2hpcC0mZ3Q7aXJxIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSAoZS5nLiAtMSksIHNvIHRoYXQgeW91IGNhbgorICAgICAgICBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGlycSBudW1iZXIgYXMgYWJvdmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSByZXF1ZXN0ZWQgSS9PIHBvcnRzIG9yIG1lbW9yeSByZWdpb25zIHZpYQorCTxmdW5jdGlvbj5wY2lfcmVxdWVzdF9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbnMoKTwvZnVuY3Rpb24+IGxpa2UgdGhpcyBleGFtcGxlLAorCXJlbGVhc2UgdGhlIHJlc291cmNlKHMpIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLAorCTxmdW5jdGlvbj5wY2lfcmVsZWFzZV9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbnMoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlXaGVuIHlvdSByZXF1ZXN0ZWQgbWFudWFsbHkgdmlhIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlvciA8ZnVuY3Rpb24+cmVxdWVzdF9tZW1fcmVnaW9uPC9mdW5jdGlvbj4sIHlvdSBjYW4gcmVsZWFzZSBpdCB2aWEKKwk8ZnVuY3Rpb24+cmVsZWFzZV9yZXNvdXJjZSgpPC9mdW5jdGlvbj4uICBTdXBwb3NlIHRoYXQgeW91IGtlZXAKKwl0aGUgcmVzb3VyY2UgcG9pbnRlciByZXR1cm5lZCBmcm9tIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlpbiBjaGlwLSZndDtyZXNfcG9ydCwgdGhlIHJlbGVhc2UgcHJvY2VkdXJlIGxvb2tzIGxpa2UgYmVsb3c6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKGNoaXAtPnJlc19wb3J0KSB7CisgICAgICAgICAgcmVsZWFzZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CisgICAgICAgICAga2ZyZWVfbm9jaGVjayhjaGlwLT5yZXNfcG9ydCk7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICBBcyB5b3UgY2FuIHNlZSwgdGhlIHJlc291cmNlIHBvaW50ZXIgaXMgYWxzbyB0byBiZSBmcmVlZAorICAgICAgdmlhIDxmdW5jdGlvbj5rZnJlZV9ub2NoZWNrKCk8L2Z1bmN0aW9uPiBhZnRlcgorICAgICAgPGZ1bmN0aW9uPnJlbGVhc2VfcmVzb3VyY2UoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZC4gWW91CisgICAgICBjYW5ub3QgdXNlIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4gaGVyZSwgYmVjYXVzZSBvbiBBTFNBLAorICAgICAgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiBtYXkgYmUgYSB3cmFwcGVyIHRvIGl0cyBvd24KKyAgICAgIGFsbG9jYXRvciB3aXRoIHRoZSBtZW1vcnkgZGVidWdnaW5nLiBTaW5jZSB0aGUgcmVzb3VyY2UgcG9pbnRlcgorICAgICAgaXMgYWxsb2NhdGVkIGV4dGVybmFsbHkgb3V0c2lkZSB0aGUgQUxTQSwgaXQgbXVzdCBiZSByZWxlYXNlZAorICAgICAgdmlhIHRoZSBuYXRpdmUKKyAgICAgIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4uCisgICAgICA8ZnVuY3Rpb24+a2ZyZWVfbm9jaGVjaygpPC9mdW5jdGlvbj4gaXMgdXNlZCBmb3IgdGhhdDsgaXQgY2FsbHMKKyAgICAgIHRoZSBuYXRpdmUgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiB3aXRob3V0IHdyYXBwZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIERvbid0IGZvcmdldCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+CisgICAgICBiZWZvcmUgYWxsIGZpbmlzaGVkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5kIGZpbmFsbHksIHJlbGVhc2UgdGhlIGNoaXAtc3BlY2lmaWMgcmVjb3JkLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGtmcmVlKGNoaXApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQWdhaW4sIHJlbWVtYmVyIHRoYXQgeW91IGNhbm5vdAorICAgICAgc2V0IDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+IHByZWZpeCBmb3IgdGhpcyBkZXN0cnVjdG9yLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXZSBkaWRuJ3QgaW1wbGVtZW50IHRoZSBoYXJkd2FyZS1kaXNhYmxpbmcgcGFydCBpbiB0aGUgYWJvdmUuCisgICAgICBJZiB5b3UgbmVlZCB0byBkbyB0aGlzLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZXN0cnVjdG9yIG1heSBiZQorICAgICAgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBpcyBjb21wbGV0ZWQuCisgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIGZsYWcgdG8gc2tpcCB0aGUgaGFyZHdhcmUtZGlzYWJsaW5nCisgICAgICBpZiB0aGUgaGFyZHdhcmUgd2FzIG5vdCBpbml0aWFsaXplZCB5ZXQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY2hpcC1kYXRhIGlzIGFzc2lnbmVkIHRvIHRoZSBjYXJkIHVzaW5nCisgICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IHdpdGgKKyAgICAgIDxjb25zdGFudD5TTkRSVl9ERVZfTE9XTEVMVkVMPC9jb25zdGFudD4gLCBpdHMgZGVzdHJ1Y3RvciBpcyAKKyAgICAgIGNhbGxlZCBhdCB0aGUgbGFzdC4gIFRoYXQgaXMsIGl0IGlzIGFzc3VyZWQgdGhhdCBhbGwgb3RoZXIKKyAgICAgIGNvbXBvbmVudHMgbGlrZSBQQ01zIGFuZCBjb250cm9scyBoYXZlIGJlZW4gYWxyZWFkeSByZWxlYXNlZC4KKyAgICAgIFlvdSBkb24ndCBoYXZlIHRvIGNhbGwgc3RvcHBpbmcgUENNcywgZXRjLiBleHBsaWNpdGx5LCBidXQganVzdAorICAgICAgc3RvcCB0aGUgaGFyZHdhcmUgaW4gdGhlIGxvdy1sZXZlbC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtYW5hZ2VtZW50IG9mIGEgbWVtb3J5LW1hcHBlZCByZWdpb24gaXMgYWxtb3N0IGFzIHNhbWUgYXMKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgYW4gaS9vIHBvcnQuIFlvdSdsbCBuZWVkIHRocmVlIGZpZWxkcyBsaWtlCisgICAgICAgIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfbXljaGlwIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBpb2Jhc2VfcGh5czsKKyAgICAgICAgICB2b2lkIF9faW9tZW0gKmlvYmFzZV92aXJ0OworICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgYW5kIHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIGxpa2UgYmVsb3c6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKChlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIk15IENoaXAiKSkgPCAwKSB7CisgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgfQorICBjaGlwLT5pb2Jhc2VfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOworICBjaGlwLT5pb2Jhc2VfdmlydCA9IGlvcmVtYXBfbm9jYWNoZShjaGlwLT5pb2Jhc2VfcGh5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2ksIDApKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICAKKyAgICAgICAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGRlc3RydWN0b3Igd291bGQgYmU6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2ZyZWUobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgaWYgKGNoaXAtPmlvYmFzZV92aXJ0KQorICAgICAgICAgICAgICAgICAgaW91bm1hcChjaGlwLT5pb2Jhc2VfdmlydCk7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1kZXZpY2Utc3RydWN0Ij4KKyAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gb2YgRGV2aWNlIFN0cnVjdDwvdGl0bGU+CisgICAgICA8cGFyYT4KKwlBdCBzb21lIHBvaW50LCB0eXBpY2FsbHkgYWZ0ZXIgY2FsbGluZyA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+LAorCXlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSA8c3RydWN0bmFtZT5zdHJ1Y3QgZGV2aWNlPC9zdHJ1Y3RuYW1lPiBvZiB0aGUgY2hpcAorCXlvdSdyZSBoYW5kbGluZyBmb3IgdWRldiBhbmQgY28uICBBTFNBIHByb3ZpZGVzIGEgbWFjcm8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorCW9sZGVyIGtlcm5lbHMuICBTaW1wbHkgY2FsbCBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCXNvIHRoYXQgaXQgc3RvcmVzIHRoZSBQQ0kncyBkZXZpY2UgcG9pbnRlciB0byB0aGUgY2FyZC4gIFRoaXMgd2lsbCBiZQorCXJlZmVycmVkIGJ5IEFMU0EgY29yZSBmdW5jdGlvbnMgbGF0ZXIgd2hlbiB0aGUgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZC4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorCUluIHRoZSBjYXNlIG9mIG5vbi1QQ0ksIHBhc3MgdGhlIHByb3BlciBkZXZpY2Ugc3RydWN0IHBvaW50ZXIgb2YgdGhlIEJVUworCWluc3RlYWQuICAoSW4gdGhlIGNhc2Ugb2YgbGVnYWN5IElTQSB3aXRob3V0IFBuUCwgeW91IGRvbid0IGhhdmUgdG8gZG8KKwlhbnl0aGluZy4pCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj4KKyAgICAgIDx0aXRsZT5QQ0kgRW50cmllczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgU28gZmFyLCBzbyBnb29kLiBMZXQncyBmaW5pc2ggdGhlIHJlc3Qgb2YgbWlzc2luZyBQQ0kKKyAgICAgIHN0dWZmcy4gQXQgZmlyc3QsIHdlIG5lZWQgYQorICAgICAgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gdGFibGUgZm9yIHRoaXMKKyAgICAgIGNoaXBzZXQuIEl0J3MgYSB0YWJsZSBvZiBQQ0kgdmVuZG9yL2RldmljZSBJRCBudW1iZXIsIGFuZCBzb21lCisgICAgICBtYXNrcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKKyAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKyAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHsgMCwgfQorICB9OworICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZHMgb2YKKyAgICAgIDxzdHJ1Y3RuYW1lPnBjaV9kZXZpY2VfaWQ8L3N0cnVjdG5hbWU+IHN0cnVjdCBhcmUgdGhlIHZlbmRvciBhbmQKKyAgICAgIGRldmljZSBJRHMuIElmIHlvdSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBmaWx0ZXIgdGhlIG1hdGNoaW5nCisgICAgICBkZXZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgcmVzdCBvZiBmaWVsZHMgbGlrZSBhYm92ZS4gVGhlIGxhc3QKKyAgICAgIGZpZWxkIG9mIDxzdHJ1Y3RuYW1lPnBjaV9kZXZpY2VfaWQ8L3N0cnVjdG5hbWU+IHN0cnVjdCBpcyBhCisgICAgICBwcml2YXRlIGRhdGEgZm9yIHRoaXMgZW50cnkuIFlvdSBjYW4gc3BlY2lmeSBhbnkgdmFsdWUgaGVyZSwgZm9yCisgICAgICBleGFtcGxlLCB0byB0ZWxsIHRoZSB0eXBlIG9mIGRpZmZlcmVudCBvcGVyYXRpb25zIHBlciBlYWNoCisgICAgICBkZXZpY2UgSURzLiBTdWNoIGFuIGV4YW1wbGUgaXMgZm91bmQgaW4gaW50ZWw4eDAgZHJpdmVyLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBsYXN0IGVudHJ5IG9mIHRoaXMgbGlzdCBpcyB0aGUgdGVybWluYXRvci4gWW91IG11c3QKKyAgICAgIHNwZWNpZnkgdGhpcyBhbGwtemVybyBlbnRyeS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVuLCBwcmVwYXJlIHRoZSA8c3RydWN0bmFtZT5wY2lfZHJpdmVyPC9zdHJ1Y3RuYW1lPiByZWNvcmQ6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKKyAgICAgICAgICAubmFtZSA9ICJNeSBPd24gQ2hpcCIsCisgICAgICAgICAgLmlkX3RhYmxlID0gc25kX215Y2hpcF9pZHMsCisgICAgICAgICAgLnByb2JlID0gc25kX215Y2hpcF9wcm9iZSwKKyAgICAgICAgICAucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX215Y2hpcF9yZW1vdmUpLAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByb2JlPC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb25zIGFyZSB3aGF0IHdlIGFscmVhZHkKKyAgICAgIGRlZmluZWQgaW4gCisgICAgICB0aGUgcHJldmlvdXMgc2VjdGlvbnMuIFRoZSA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gc2hvdWxkCisgICAgICBiZSBkZWZpbmVkIHdpdGggCisgICAgICA8ZnVuY3Rpb24+X19kZXZleGl0X3AoKTwvZnVuY3Rpb24+IG1hY3JvLCBzbyB0aGF0IGl0J3Mgbm90CisgICAgICBkZWZpbmVkIGZvciBidWlsdC1pbiAoYW5kIG5vbi1ob3QtcGx1Z2dhYmxlKSBjYXNlLiBUaGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gCisgICAgICBmaWVsZCBpcyB0aGUgbmFtZSBzdHJpbmcgb2YgdGhpcyBkZXZpY2UuIE5vdGUgdGhhdCB5b3UgbXVzdCBub3QKKyAgICAgIHVzZSBhIHNsYXNoIDxxdW90ZT4vPC9xdW90ZT4gaW4gdGhpcyBzdHJpbmcuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5kIGF0IGxhc3QsIHRoZSBtb2R1bGUgZW50cmllczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfbXljaGlwX2luaXQodm9pZCkKKyAgeworICAgICAgICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CisgIH0KKworICBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX215Y2hpcF9leGl0KHZvaWQpCisgIHsKKyAgICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbXljaGlwX2luaXQpCisgIG1vZHVsZV9leGl0KGFsc2FfY2FyZF9teWNoaXBfZXhpdCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0IHRoZXNlIG1vZHVsZSBlbnRyaWVzIGFyZSB0YWdnZWQgd2l0aAorICAgICAgPHBhcmFtZXRlcj5fX2luaXQ8L3BhcmFtZXRlcj4gYW5kIAorICAgICAgPHBhcmFtZXRlcj5fX2V4aXQ8L3BhcmFtZXRlcj4gcHJlZml4ZXMsIG5vdAorICAgICAgPHBhcmFtZXRlcj5fX2RldmluaXQ8L3BhcmFtZXRlcj4gbm9yCisgICAgICA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9oLCBvbmUgdGhpbmcgd2FzIGZvcmdvdHRlbi4gSWYgeW91IGhhdmUgbm8gZXhwb3J0ZWQgc3ltYm9scywKKyAgICAgICAgeW91IG5lZWQgdG8gZGVjbGFyZSBpdCBvbiAyLjIgb3IgMi40IGtlcm5lbHMgKG9uIDIuNiBrZXJuZWxzCisgICAgICAgIGl0J3Mgbm90IG5lY2Vzc2FyeSwgdGhvdWdoKS4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBFWFBPUlRfTk9fU1lNQk9MUzsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIFRoYXQncyBhbGwhCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFBDTSBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJwY20taW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+UENNIEludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgUENNIG1pZGRsZSBsYXllciBvZiBBTFNBIGlzIHF1aXRlIHBvd2VyZnVsIGFuZCBpdCBpcyBvbmx5CisgICAgICBuZWNlc3NhcnkgZm9yIGVhY2ggZHJpdmVyIHRvIGltcGxlbWVudCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucworICAgICAgdG8gYWNjZXNzIGl0cyBoYXJkd2FyZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBhY2Nlc3NpbmcgdG8gdGhlIFBDTSBsYXllciwgeW91IG5lZWQgdG8gaW5jbHVkZQorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPiBhYm92ZSBhbGwuIEluIGFkZGl0aW9uLAorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY21fcGFyYW1zLmgmZ3Q7PC9maWxlbmFtZT4gbWlnaHQgYmUgbmVlZGVkCisgICAgICBpZiB5b3UgYWNjZXNzIHRvIHNvbWUgZnVuY3Rpb25zIHJlbGF0ZWQgd2l0aCBod19wYXJhbS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFYWNoIGNhcmQgZGV2aWNlIGNhbiBoYXZlIHVwIHRvIGZvdXIgcGNtIGluc3RhbmNlcy4gQSBwY20KKyAgICAgIGluc3RhbmNlIGNvcnJlc3BvbmRzIHRvIGEgcGNtIGRldmljZSBmaWxlLiBUaGUgbGltaXRhdGlvbiBvZgorICAgICAgbnVtYmVyIG9mIGluc3RhbmNlcyBjb21lcyBvbmx5IGZyb20gdGhlIGF2YWlsYWJsZSBiaXQgc2l6ZSBvZgorICAgICAgdGhlIGxpbnV4J3MgZGV2aWNlIG51bWJlci4gT25jZSB3aGVuIDY0Yml0IGRldmljZSBudW1iZXIgaXMKKyAgICAgIHVzZWQsIHdlJ2xsIGhhdmUgbW9yZSBhdmFpbGFibGUgcGNtIGluc3RhbmNlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBIHBjbSBpbnN0YW5jZSBjb25zaXN0cyBvZiBwY20gcGxheWJhY2sgYW5kIGNhcHR1cmUgc3RyZWFtcywKKyAgICAgIGFuZCBlYWNoIHBjbSBzdHJlYW0gY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgcGNtIHN1YnN0cmVhbXMuIFNvbWUKKyAgICAgIHNvdW5kY2FyZCBzdXBwb3J0cyB0aGUgbXVsdGlwbGUtcGxheWJhY2sgZnVuY3Rpb24uIEZvciBleGFtcGxlLAorICAgICAgZW11MTBrMSBoYXMgYSBQQ00gcGxheWJhY2sgb2YgMzIgc3RlcmVvIHN1YnN0cmVhbXMuIEluIHRoaXMgY2FzZSwgYXQKKyAgICAgIGVhY2ggb3BlbiwgYSBmcmVlIHN1YnN0cmVhbSBpcyAodXN1YWxseSkgYXV0b21hdGljYWxseSBjaG9zZW4KKyAgICAgIGFuZCBvcGVuZWQuIE1lYW53aGlsZSwgd2hlbiBvbmx5IG9uZSBzdWJzdHJlYW0gZXhpc3RzIGFuZCBpdCB3YXMKKyAgICAgIGFscmVhZHkgb3BlbmVkLCB0aGUgc3VjY2VlZGluZyBvcGVuIHdpbGwgcmVzdWx0IGluIHRoZSBibG9ja2luZworICAgICAgb3IgdGhlIGVycm9yIHdpdGggPGNvbnN0YW50PkVBR0FJTjwvY29uc3RhbnQ+IGFjY29yZGluZyB0byB0aGUKKyAgICAgIGZpbGUgb3BlbiBtb2RlLiBCdXQgeW91IGRvbid0IGhhdmUgdG8ga25vdyB0aGUgZGV0YWlsIGluIHlvdXIKKyAgICAgIGRyaXZlci4gVGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2lsbCB0YWtlIGFsbCBzdWNoIGpvYnMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgVGhlIGV4YW1wbGUgY29kZSBiZWxvdyBkb2VzIG5vdCBpbmNsdWRlIGFueSBoYXJkd2FyZSBhY2Nlc3MKKyAgICAgIHJvdXRpbmVzIGJ1dCBzaG93cyBvbmx5IHRoZSBza2VsZXRvbiwgaG93IHRvIGJ1aWxkIHVwIHRoZSBQQ00KKyAgICAgIGludGVyZmFjZXMuCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPlBDTSBFeGFtcGxlIENvZGU8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaW5jbHVkZSA8c291bmQvcGNtLmg+CisgIC4uLi4KKworICAvKiBoYXJkd2FyZSBkZWZpbml0aW9uICovCisgIHN0YXRpYyBzbmRfcGNtX2hhcmR3YXJlX3Qgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIGhhcmR3YXJlIGRlZmluaXRpb24gKi8KKyAgc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfbXljaGlwX2NhcHR1cmVfaHcgPSB7CisgICAgICAgICAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKyAgICAgICAgICAuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorICAgICAgICAgIC5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKyAgICAgICAgICAucmF0ZV9taW4gPSAgICAgICAgIDgwMDAsCisgICAgICAgICAgLnJhdGVfbWF4ID0gICAgICAgICA0ODAwMCwKKyAgICAgICAgICAuY2hhbm5lbHNfbWluID0gICAgIDIsCisgICAgICAgICAgLmNoYW5uZWxzX21heCA9ICAgICAyLAorICAgICAgICAgIC5idWZmZXJfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19taW4gPSA0MDk2LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZHNfbWluID0gICAgICAxLAorICAgICAgICAgIC5wZXJpb2RzX21heCA9ICAgICAgMTAyNCwKKyAgfTsKKworICAvKiBvcGVuIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wbGF5YmFja19vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OworICAgICAgICAgIC8vIG1vcmUgaGFyZHdhcmUtaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICAvLyB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZXMgd2lsbCBiZSBoZXJlCisgICAgICAgICAgcmV0dXJuIDA7CisKKyAgfQorCisgIC8qIG9wZW4gY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2NhcHR1cmVfb3BlbihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9jYXB0dXJlX2h3OworICAgICAgICAgIC8vIG1vcmUgaGFyZHdhcmUtaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9jYXB0dXJlX2Nsb3NlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIC8vIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlcyB3aWxsIGJlIGhlcmUKKyAgICAgICAgICByZXR1cm4gMDsKKworICB9CisKKyAgLyogaHdfcGFyYW1zIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21faHdfcGFyYW1zKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc190ICogaHdfcGFyYW1zKQorICB7CisgICAgICAgICAgcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKyAgfQorCisgIC8qIGh3X2ZyZWUgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9od19mcmVlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIHJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisgIH0KKworICAvKiBwcmVwYXJlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworICAgICAgICAgIC8qIHNldCB1cCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICogZm9yIGV4YW1wbGUuLi4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9mb3JtYXQoY2hpcCwgcnVudGltZS0+Zm9ybWF0KTsKKyAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9yYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOworICAgICAgICAgIG15Y2hpcF9zZXRfY2hhbm5lbHMoY2hpcCwgcnVudGltZS0+Y2hhbm5lbHMpOworICAgICAgICAgIG15Y2hpcF9zZXRfZG1hX3NldHVwKGNoaXAsIHJ1bnRpbWUtPmRtYV9hcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPmJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPnBlcmlvZF9zaXplKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIHRyaWdnZXIgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV90cmlnZ2VyKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbWQpCisgIHsKKyAgICAgICAgICBzd2l0Y2ggKGNtZCkgeworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisgICAgICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgfQorICB9CisKKyAgLyogcG9pbnRlciBjYWxsYmFjayAqLworICBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKKyAgc25kX215Y2hpcF9wY21fcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgY3VycmVudF9wdHI7CisKKyAgICAgICAgICAvKiBnZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9pbnRlciAqLworICAgICAgICAgIGN1cnJlbnRfcHRyID0gbXljaGlwX2dldF9od19wb2ludGVyKGNoaXApOworICAgICAgICAgIHJldHVybiBjdXJyZW50X3B0cjsKKyAgfQorCisgIC8qIG9wZXJhdG9ycyAqLworICBzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4sCisgICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKiBvcGVyYXRvcnMgKi8KKyAgc3RhdGljIHNuZF9wY21fb3BzX3Qgc25kX215Y2hpcF9jYXB0dXJlX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX2NhcHR1cmVfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX2NhcHR1cmVfY2xvc2UsCisgICAgICAgICAgLmlvY3RsID0gICAgICAgc25kX3BjbV9saWJfaW9jdGwsCisgICAgICAgICAgLmh3X3BhcmFtcyA9ICAgc25kX215Y2hpcF9wY21faHdfcGFyYW1zLAorICAgICAgICAgIC5od19mcmVlID0gICAgIHNuZF9teWNoaXBfcGNtX2h3X2ZyZWUsCisgICAgICAgICAgLnByZXBhcmUgPSAgICAgc25kX215Y2hpcF9wY21fcHJlcGFyZSwKKyAgICAgICAgICAudHJpZ2dlciA9ICAgICBzbmRfbXljaGlwX3BjbV90cmlnZ2VyLAorICAgICAgICAgIC5wb2ludGVyID0gICAgIHNuZF9teWNoaXBfcGNtX3BvaW50ZXIsCisgIH07CisKKyAgLyoKKyAgICogIGRlZmluaXRpb25zIG9mIGNhcHR1cmUgYXJlIG9taXR0ZWQgaGVyZS4uLgorICAgKi8KKworICAvKiBjcmVhdGUgYSBwY20gZGV2aWNlICovCisgIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfbmV3X3BjbShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIHNuZF9wY21fdCAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwY20pKSA8IDApIAorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKKyAgICAgICAgICBjaGlwLT5wY20gPSBwY207CisgICAgICAgICAgLyogc2V0IG9wZXJhdG9ycyAqLworICAgICAgICAgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7CisgICAgICAgICAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9jYXB0dXJlX29wcyk7CisgICAgICAgICAgLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLworICAgICAgICAgIC8qIE5PVEU6IHRoaXMgbWF5IGZhaWwgKi8KKyAgICAgICAgICBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEEgcGNtIGluc3RhbmNlIGlzIGFsbG9jYXRlZCBieSA8ZnVuY3Rpb24+c25kX3BjbV9uZXcoKTwvZnVuY3Rpb24+CisgICAgICBmdW5jdGlvbi4gSXQgd291bGQgYmUgYmV0dGVyIHRvIGNyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBwY20sCisgICAgICBuYW1lbHksIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfbmV3X3BjbShteWNoaXBfdCAqY2hpcCkKKyAgeworICAgICAgICAgIHNuZF9wY21fdCAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBpZiAoKGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwY20pKSA8IDApIAorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKKyAgICAgICAgICBjaGlwLT5wY20gPSBwY207CisJICAuLi4uCisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdGFrZXMgdGhlIGZvdXIKKyAgICAgIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIgdG8gd2hpY2ggdGhpcworICAgICAgcGNtIGlzIGFzc2lnbmVkLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgSUQgc3RyaW5nLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwgMCBpbiB0aGUKKyAgICAgIGFib3ZlKSBpcyB0aGUgaW5kZXggb2YgdGhpcyBuZXcgcGNtLiBJdCBiZWdpbnMgZnJvbSB6ZXJvLiBXaGVuCisgICAgICB5b3Ugd2lsbCBjcmVhdGUgbW9yZSB0aGFuIG9uZSBwY20gaW5zdGFuY2VzLCBzcGVjaWZ5IHRoZQorICAgICAgZGlmZmVyZW50IG51bWJlcnMgaW4gdGhpcyBhcmd1bWVudC4gRm9yIGV4YW1wbGUsCisgICAgICA8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+ID0gMSBmb3IgdGhlIHNlY29uZCBQQ00gZGV2aWNlLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm91cnRoIGFuZCBmaWZ0aCBhcmd1bWVudHMgYXJlIHRoZSBudW1iZXIgb2Ygc3Vic3RyZWFtcworICAgICAgZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlLCByZXNwZWN0aXZlbHkuIEhlcmUgYm90aCAxIGFyZSBnaXZlbiBpbgorICAgICAgdGhlIGFib3ZlIGV4YW1wbGUuICBXaGVuIG5vIHBsYXliYWNrIG9yIG5vIGNhcHR1cmUgaXMgYXZhaWxhYmxlLAorICAgICAgcGFzcyAwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgYSBjaGlwIHN1cHBvcnRzIG11bHRpcGxlIHBsYXliYWNrcyBvciBjYXB0dXJlcywgeW91IGNhbgorICAgICAgc3BlY2lmeSBtb3JlIG51bWJlcnMsIGJ1dCB0aGV5IG11c3QgYmUgaGFuZGxlZCBwcm9wZXJseSBpbgorICAgICAgb3Blbi9jbG9zZSwgZXRjLiBjYWxsYmFja3MuICBXaGVuIHlvdSBuZWVkIHRvIGtub3cgd2hpY2gKKyAgICAgIHN1YnN0cmVhbSB5b3UgYXJlIHJlZmVycmluZyB0bywgdGhlbiBpdCBjYW4gYmUgb2J0YWluZWQgZnJvbQorICAgICAgPHR5cGU+c25kX3BjbV9zdWJzdHJlYW1fdDwvdHlwZT4gZGF0YSBwYXNzZWQgdG8gZWFjaCBjYWxsYmFjaworICAgICAgYXMgZm9sbG93czogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworICBpbnQgaW5kZXggPSBzdWJzdHJlYW0tPm51bWJlcjsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWZ0ZXIgdGhlIHBjbSBpcyBjcmVhdGVkLCB5b3UgbmVlZCB0byBzZXQgb3BlcmF0b3JzIGZvciBlYWNoCisgICAgICAgIHBjbSBzdHJlYW0uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9wbGF5YmFja19vcHMpOworICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9jYXB0dXJlX29wcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBvcGVyYXRvcnMgYXJlIGRlZmluZWQgdHlwaWNhbGx5IGxpa2UgdGhpczoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BjbV9vcGVuLAorICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfcGNtX2Nsb3NlLAorICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAorICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKKyAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAorICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCisgICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKKyAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgRWFjaCBvZiBjYWxsYmFja3MgaXMgZXhwbGFpbmVkIGluIHRoZSBzdWJzZWN0aW9uIAorICAgICAgICA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycyI+PGNpdGV0aXRsZT4KKyAgICAgICAgT3BlcmF0b3JzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIHNldHRpbmcgdGhlIG9wZXJhdG9ycywgbW9zdCBsaWtlbHkgeW91J2QgbGlrZSB0bworICAgICAgICBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlci4gRm9yIHRoZSBwcmUtYWxsb2NhdGlvbiwgc2ltcGx5IGNhbGwKKyAgICAgICAgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBJdCB3aWxsIGFsbG9jYXRlIHVwIHRvIDY0a0IgYnVmZmVyIGFzIGRlZmF1bHQuIFRoZSBkZXRhaWxzIG9mCisgICAgICBidWZmZXIgbWFuYWdlbWVudCB3aWxsIGJlIGRlc2NyaWJlZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluaworICAgICAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnkiPjxjaXRldGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkKKyAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IGNhbiBzZXQgc29tZSBleHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwY20KKyAgICAgICAgaW4gcGNtLSZndDtpbmZvX2ZsYWdzLgorICAgICAgICBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgZGVmaW5lZCBhcworICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fWFhYPC9jb25zdGFudD4gaW4KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmQuaCZndDs8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdXNlZCBmb3IKKyAgICAgICAgdGhlIGhhcmR3YXJlIGRlZmluaXRpb24gKGRlc2NyaWJlZCBsYXRlcikuIFdoZW4geW91ciBzb3VuZGNoaXAKKyAgICAgICAgc3VwcG9ydHMgb25seSBoYWxmLWR1cGxleCwgc3BlY2lmeSBsaWtlIHRoaXM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBjbS0+aW5mb19mbGFncyA9IFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtZGVzdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Li4uIEFuZCB0aGUgRGVzdHJ1Y3Rvcj88L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZXN0cnVjdG9yIGZvciBhIHBjbSBpbnN0YW5jZSBpcyBub3QgYWx3YXlzCisgICAgICBuZWNlc3NhcnkuIFNpbmNlIHRoZSBwY20gZGV2aWNlIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIG1pZGRsZQorICAgICAgbGF5ZXIgY29kZSBhdXRvbWF0aWNhbGx5LCB5b3UgZG9uJ3QgaGF2ZSB0byBjYWxsIGRlc3RydWN0b3IKKyAgICAgIGV4cGxpY2l0bHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciB3b3VsZCBiZSBuZWNlc3Nhcnkgd2hlbiB5b3UgY3JlYXRlZCBzb21lCisgICAgICAgIHNwZWNpYWwgcmVjb3JkcyBpbnRlcm5hbGx5IGFuZCBuZWVkIHRvIHJlbGVhc2UgdGhlbS4gSW4gc3VjaCBhCisgICAgICAgIGNhc2UsIHNldCB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiB0bworICAgICAgICBwY20tJmd0O3ByaXZhdGVfZnJlZTogCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPlBDTSBJbnN0YW5jZSB3aXRoIGEgRGVzdHJ1Y3RvcjwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIG15Y2hpcF9wY21fZnJlZShzbmRfcGNtX3QgKnBjbSkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX3BjbV9jaGlwKHBjbSk7CisgICAgICAgICAgLyogZnJlZSB5b3VyIG93biBkYXRhICovCisgICAgICAgICAga2ZyZWUoY2hpcC0+bXlfcHJpdmF0ZV9wY21fZGF0YSk7CisgICAgICAgICAgLy8gZG8gd2hhdCB5b3UgbGlrZSBlbHNlCisgICAgICAgICAgLi4uLgorICB9CisKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgc25kX3BjbV90ICpwY207CisgICAgICAgICAgLi4uLgorICAgICAgICAgIC8qIGFsbG9jYXRlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhID0ga21hbGxvYyguLi4pOworICAgICAgICAgIC8qIHNldCB0aGUgZGVzdHJ1Y3RvciAqLworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZnJlZSA9IG15Y2hpcF9wY21fZnJlZTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lIj4KKyAgICAgIDx0aXRsZT5SdW50aW1lIFBvaW50ZXIgLSBUaGUgQ2hlc3Qgb2YgUENNIEluZm9ybWF0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwkgIFdoZW4gdGhlIFBDTSBzdWJzdHJlYW0gaXMgb3BlbmVkLCBhIFBDTSBydW50aW1lIGluc3RhbmNlIGlzCisJYWxsb2NhdGVkIGFuZCBhc3NpZ25lZCB0byB0aGUgc3Vic3RyZWFtLiBUaGlzIHBvaW50ZXIgaXMKKwlhY2Nlc3NpYmxlIHZpYSA8Y29uc3RhbnQ+c3Vic3RyZWFtLSZndDtydW50aW1lPC9jb25zdGFudD4uCisJVGhpcyBydW50aW1lIHBvaW50ZXIgaG9sZHMgdGhlIHZhcmlvdXMgaW5mb3JtYXRpb247IGl0IGhvbGRzCisJdGhlIGNvcHkgb2YgaHdfcGFyYW1zIGFuZCBzd19wYXJhbXMgY29uZmlndXJhdGlvbnMsIHRoZSBidWZmZXIKKwlwb2ludGVycywgbW1hcCByZWNvcmRzLCBzcGlubG9ja3MsIGV0Yy4gIEFsbW9zdCBldmVyeWhpbmcgeW91CisJbmVlZCBmb3IgY29udHJvbGxpbmcgdGhlIFBDTSBjYW4gYmUgZm91bmQgdGhlcmUuCisJPC9wYXJhPgorCisJPHBhcmE+CisJVGhlIGRlZmluaXRpb24gb2YgcnVudGltZSBpbnN0YW5jZSBpcyBmb3VuZCBpbgorCTxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uICBIZXJlIGlzIHRoZQorCWNvcHkgZnJvbSB0aGUgZmlsZS4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCitzdHJ1Y3QgX3NuZF9wY21fcnVudGltZSB7CisJLyogLS0gU3RhdHVzIC0tICovCisJc25kX3BjbV9zdWJzdHJlYW1fdCAqdHJpZ2dlcl9tYXN0ZXI7CisJc25kX3RpbWVzdGFtcF90IHRyaWdnZXJfdHN0YW1wOwkvKiB0cmlnZ2VyIHRpbWVzdGFtcCAqLworCWludCBvdmVycmFuZ2U7CisJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWF4OworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9iYXNlOwkvKiBQb3NpdGlvbiBhdCBidWZmZXIgcmVzdGFydCAqLworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9pbnRlcnJ1cHQ7IC8qIFBvc2l0aW9uIGF0IGludGVycnVwdCB0aW1lKi8KKworCS8qIC0tIEhXIHBhcmFtcyAtLSAqLworCXNuZF9wY21fYWNjZXNzX3QgYWNjZXNzOwkvKiBhY2Nlc3MgbW9kZSAqLworCXNuZF9wY21fZm9ybWF0X3QgZm9ybWF0OwkvKiBTTkRSVl9QQ01fRk9STUFUXyogKi8KKwlzbmRfcGNtX3N1YmZvcm1hdF90IHN1YmZvcm1hdDsJLyogc3ViZm9ybWF0ICovCisJdW5zaWduZWQgaW50IHJhdGU7CQkvKiByYXRlIGluIEh6ICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzOwkJLyogY2hhbm5lbHMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsJLyogcGVyaW9kIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgcGVyaW9kczsJCS8qIHBlcmlvZHMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBidWZmZXJfc2l6ZTsJLyogYnVmZmVyIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgdGlja190aW1lOwkJLyogdGljayB0aW1lICovCisJc25kX3BjbV91ZnJhbWVzX3QgbWluX2FsaWduOwkvKiBNaW4gYWxpZ25tZW50IGZvciB0aGUgZm9ybWF0ICovCisJc2l6ZV90IGJ5dGVfYWxpZ247CisJdW5zaWduZWQgaW50IGZyYW1lX2JpdHM7CisJdW5zaWduZWQgaW50IHNhbXBsZV9iaXRzOworCXVuc2lnbmVkIGludCBpbmZvOworCXVuc2lnbmVkIGludCByYXRlX251bTsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9kZW47CisKKwkvKiAtLSBTVyBwYXJhbXMgLS0gKi8KKwlpbnQgdHN0YW1wX3RpbWVzcGVjOwkJLyogdXNlIHRpbWV2YWwgKDApIG9yIHRpbWVzcGVjICgxKSAqLworCXNuZF9wY21fdHN0YW1wX3QgdHN0YW1wX21vZGU7CS8qIG1tYXAgdGltZXN0YW1wIGlzIHVwZGF0ZWQgKi8KKyAgCXVuc2lnbmVkIGludCBwZXJpb2Rfc3RlcDsKKwl1bnNpZ25lZCBpbnQgc2xlZXBfbWluOwkJLyogbWluIHRpY2tzIHRvIHNsZWVwICovCisJc25kX3BjbV91ZnJhbWVzX3QgeGZlcl9hbGlnbjsJLyogeGZlciBzaXplIG5lZWQgdG8gYmUgYSBtdWx0aXBsZSAqLworCXNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsgLyogU2lsZW5jZSBmaWxsaW5nIGhhcHBlbnMgd2hlbgorCQkJCQkJbm9pc2UgaXMgbmVhcmVzdCB0aGFuIHRoaXMgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7CS8qIFNpbGVuY2UgZmlsbGluZyBzaXplICovCisJc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CS8qIHBvaW50ZXJzIHdyYXAgcG9pbnQgKi8KKworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3N0YXJ0OworCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3NpemU7CisKKwlzbmRfcGNtX3N5bmNfaWRfdCBzeW5jOwkJLyogaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIElEICovCisKKwkvKiAtLSBtbWFwIC0tICovCisJdm9sYXRpbGUgc25kX3BjbV9tbWFwX3N0YXR1c190ICpzdGF0dXM7CisJdm9sYXRpbGUgc25kX3BjbV9tbWFwX2NvbnRyb2xfdCAqY29udHJvbDsKKwlhdG9taWNfdCBtbWFwX2NvdW50OworCisJLyogLS0gbG9ja2luZyAvIHNjaGVkdWxpbmcgLS0gKi8KKwlzcGlubG9ja190IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CisJc3RydWN0IHRpbWVyX2xpc3QgdGlja190aW1lcjsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOworCisJLyogLS0gcHJpdmF0ZSBzZWN0aW9uIC0tICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCXZvaWQgKCpwcml2YXRlX2ZyZWUpKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lKTsKKworCS8qIC0tIGhhcmR3YXJlIGRlc2NyaXB0aW9uIC0tICovCisJc25kX3BjbV9oYXJkd2FyZV90IGh3OworCXNuZF9wY21faHdfY29uc3RyYWludHNfdCBod19jb25zdHJhaW50czsKKworCS8qIC0tIGludGVycnVwdCBjYWxsYmFja3MgLS0gKi8KKwl2b2lkICgqdHJhbnNmZXJfYWNrX2JlZ2luKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCXZvaWQgKCp0cmFuc2Zlcl9hY2tfZW5kKShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCisJLyogLS0gdGltZXIgLS0gKi8KKwl1bnNpZ25lZCBpbnQgdGltZXJfcmVzb2x1dGlvbjsJLyogdGltZXIgcmVzb2x1dGlvbiAqLworCisJLyogLS0gRE1BIC0tICovICAgICAgICAgICAKKwl1bnNpZ25lZCBjaGFyICpkbWFfYXJlYTsJLyogRE1BIGFyZWEgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogcGh5c2ljYWwgYnVzIGFkZHJlc3MgKG5vdCBhY2Nlc3NpYmxlIGZyb20gbWFpbiBDUFUpICovCisJc2l6ZV90IGRtYV9ieXRlczsJCS8qIHNpemUgb2YgRE1BIGFyZWEgKi8KKworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hX2J1ZmZlcl9wOwkvKiBhbGxvY2F0ZWQgYnVmZmVyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQorCS8qIC0tIE9TUyB0aGluZ3MgLS0gKi8KKwlzbmRfcGNtX29zc19ydW50aW1lX3Qgb3NzOworI2VuZGlmCit9OworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKworCTxwYXJhPgorCSAgRm9yIHRoZSBvcGVyYXRvcnMgKGNhbGxiYWNrcykgb2YgZWFjaCBzb3VuZCBkcml2ZXIsIG1vc3Qgb2YKKwl0aGVzZSByZWNvcmRzIGFyZSBzdXBwb3NlZCB0byBiZSByZWFkLW9ubHkuICBPbmx5IHRoZSBQQ00KKwltaWRkbGUtbGF5ZXIgY2hhbmdlcyAvIHVwZGF0ZXMgdGhlc2UgaW5mby4gIFRoZSBleGNlcHRpb25zIGFyZQorCXRoZSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAoaHcpLCBpbnRlcnJ1cHQgY2FsbGJhY2tzCisJKHRyYW5zZmVyX2Fja194eHgpLCBETUEgYnVmZmVyIGluZm9ybWF0aW9uLCBhbmQgdGhlIHByaXZhdGUKKwlkYXRhLiAgQmVzaWRlcywgaWYgeW91IHVzZSB0aGUgc3RhbmRhcmQgYnVmZmVyIGFsbG9jYXRpb24KKwltZXRob2QgdmlhIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+LAorCXlvdSBkb24ndCBuZWVkIHRvIHNldCB0aGUgRE1BIGJ1ZmZlciBpbmZvcm1hdGlvbiBieSB5b3Vyc2VsZi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiB0aGUgc2VjdGlvbnMgYmVsb3csIGltcG9ydGFudCByZWNvcmRzIGFyZSBleHBsYWluZWQuCisJPC9wYXJhPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1odyI+CisJPHRpdGxlPkhhcmR3YXJlIERlc2NyaXB0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwkgIFRoZSBoYXJkd2FyZSBkZXNjcmlwdG9yICg8dHlwZT5zbmRfcGNtX2hhcmR3YXJlX3Q8L3R5cGU+KQorCWNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUKKwljb25maWd1cmF0aW9uLiAgQWJvdmUgYWxsLCB5b3UnbGwgbmVlZCB0byBkZWZpbmUgdGhpcyBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgorCU5vdGUgdGhhdCB0aGUgcnVudGltZSBpbnN0YW5jZSBob2xkcyB0aGUgY29weSBvZiB0aGUKKwlkZXNjcmlwdG9yLCBub3QgdGhlIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IuICBUaGF0CisJaXMsIGluIHRoZSBvcGVuIGNhbGxiYWNrLCB5b3UgY2FuIG1vZGlmeSB0aGUgY29waWVkIGRlc2NyaXB0b3IKKwkoPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2h3PC9jb25zdGFudD4pIGFzIHlvdSBuZWVkLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBtYXhpbXVtCisJbnVtYmVyIG9mIGNoYW5uZWxzIGlzIDEgb25seSBvbiBzb21lIGNoaXAgbW9kZWxzLCB5b3UgY2FuCisJc3RpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGRlc2NyaXB0b3IgYW5kIGNoYW5nZSB0aGUKKwljaGFubmVsc19tYXggbGF0ZXI6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAgICAgICAgIHNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworICAgICAgICAgIC4uLgorICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsgLyogY29tbW9uIGRlZmluaXRpb24gKi8KKyAgICAgICAgICBpZiAoY2hpcC0+bW9kZWwgPT0gVkVSWV9PTERfT05FKQorICAgICAgICAgICAgICAgICAgcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwkgIFR5cGljYWxseSwgeW91J2xsIGhhdmUgYSBoYXJkd2FyZSBkZXNjcmlwdG9yIGxpa2UgYmVsb3c6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3BjbV9oYXJkd2FyZV90IHNuZF9teWNoaXBfcGxheWJhY2tfaHcgPSB7CisgICAgICAgICAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKyAgICAgICAgICAuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorICAgICAgICAgIC5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKyAgICAgICAgICAucmF0ZV9taW4gPSAgICAgICAgIDgwMDAsCisgICAgICAgICAgLnJhdGVfbWF4ID0gICAgICAgICA0ODAwMCwKKyAgICAgICAgICAuY2hhbm5lbHNfbWluID0gICAgIDIsCisgICAgICAgICAgLmNoYW5uZWxzX21heCA9ICAgICAyLAorICAgICAgICAgIC5idWZmZXJfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19taW4gPSA0MDk2LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZHNfbWluID0gICAgICAxLAorICAgICAgICAgIC5wZXJpb2RzX21heCA9ICAgICAgMTAyNCwKKyAgfTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSB0eXBlIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwY20uIFRoZSBiaXQgZmxhZ3MgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmQuaCZndDs8L2ZpbGVuYW1lPiBhcworICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fWFhYPC9jb25zdGFudD4uIEhlcmUsIGF0IGxlYXN0LCB5b3UKKyAgICAgICAgaGF2ZSB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG1tYXAgaXMgc3VwcG9ydGVkIGFuZCB3aGljaAorICAgICAgICBpbnRlcmxlYXZlZCBmb3JtYXQgaXMgc3VwcG9ydGVkLgorICAgICAgICBXaGVuIHRoZSBtbWFwIGlzIHN1cHBvcnRlZCwgYWRkCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19NTUFQPC9jb25zdGFudD4gZmxhZyBoZXJlLiBXaGVuIHRoZQorICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgaW50ZXJsZWF2ZWQgb3IgdGhlIG5vbi1pbnRlcmxlYXZlZAorICAgICAgICBmb3JtYXQsIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IG9yCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IGZsYWcgbXVzdAorICAgICAgICBiZSBzZXQsIHJlc3BlY3RpdmVseS4gSWYgYm90aCBhcmUgc3VwcG9ydGVkLCB5b3UgY2FuIHNldCBib3RoLAorICAgICAgICB0b28uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5CTE9DS19UUkFOU0ZFUjwvY29uc3RhbnQ+IGFyZSBzcGVjaWZpZWQgZm9yIE9TUyBtbWFwCisgICAgICAgIG1vZGUuIFVzdWFsbHkgYm90aCBhcmUgc2V0LiBPZiBjb3Vyc2UsCisgICAgICAgIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gaXMgc2V0IG9ubHkgaWYgdGhlIG1tYXAgaXMKKyAgICAgICAgcmVhbGx5IHN1cHBvcnRlZC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgb3RoZXIgcG9zc2libGUgZmxhZ3MgYXJlCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19QQVVTRTwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4uIFRoZQorICAgICAgICA8Y29uc3RhbnQ+UEFVU0U8L2NvbnN0YW50PiBiaXQgbWVhbnMgdGhhdCB0aGUgcGNtIHN1cHBvcnRzIHRoZQorICAgICAgICA8cXVvdGU+cGF1c2U8L3F1b3RlPiBvcGVyYXRpb24sIHdoaWxlIHRoZQorICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gYml0IG1lYW5zIHRoYXQgdGhlIHBjbSBzdXBwb3J0cworICAgICAgICB0aGUgPHF1b3RlPnN1c3BlbmQvcmVzdW1lPC9xdW90ZT4gb3BlcmF0aW9uLiBJZiB0aGVzZSBmbGFncworICAgICAgICBhcmUgc2V0LCB0aGUgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBiZWxvdworICAgICAgICBtdXN0IGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kcy4gCisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbXMgY2FuIGJlIHN5bmNocm9uaXplZCAodHlwaWNhbGx5LAorCXN5bmNob3Jpbml6ZWQgc3RhcnQvc3RvcCBvZiBhIHBsYXliYWNrIGFuZCBhIGNhcHR1cmUgc3RyZWFtcyksCisJeW91IGNhbiBnaXZlIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUPC9jb25zdGFudD4sCisJdG9vLiAgSW4gdGhpcyBjYXNlLCB5b3UnbGwgbmVlZCB0byBjaGVjayB0aGUgbGlua2VkLWxpc3Qgb2YKKwlQQ00gc3Vic3RyZWFtcyBpbiB0aGUgdHJpZ2dlciBjYWxsYmFjay4gIFRoaXMgd2lsbCBiZQorCWRlc2NyaWJlZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPHN0cnVjdGZpZWxkPmZvcm1hdHM8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYml0LWZsYWdzCisgICAgICAgIG9mIHN1cHBvcnRlZCBmb3JtYXRzICg8Y29uc3RhbnQ+U05EUlZfUENNX0ZNVEJJVF9YWFg8L2NvbnN0YW50PikuCisgICAgICAgIElmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBtb3JlIHRoYW4gb25lIGZvcm1hdCwgZ2l2ZSBhbGwgb3InZWQKKyAgICAgICAgYml0cy4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgc2lnbmVkIDE2Yml0IGxpdHRsZS1lbmRpYW4KKyAgICAgICAgZm9ybWF0IGlzIHNwZWNpZmllZC4KKyAgICAgICAgPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICA8c3RydWN0ZmllbGQ+cmF0ZXM8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYml0LWZsYWdzIG9mCisgICAgICAgIHN1cHBvcnRlZCByYXRlcyAoPGNvbnN0YW50PlNORFJWX1BDTV9SQVRFX1hYWDwvY29uc3RhbnQ+KS4KKyAgICAgICAgV2hlbiB0aGUgY2hpcCBzdXBwb3J0cyBjb250aW51b3VzIHJhdGVzLCBwYXNzCisgICAgICAgIDxjb25zdGFudD5DT05USU5VT1VTPC9jb25zdGFudD4gYml0IGFkZGl0aW9uYWxseS4KKyAgICAgICAgVGhlIHByZS1kZWZpbmVkIHJhdGUgYml0cyBhcmUgcHJvdmlkZWQgb25seSBmb3IgdHlwaWNhbAorCXJhdGVzLiBJZiB5b3VyIGNoaXAgc3VwcG9ydHMgdW5jb252ZW50aW9uYWwgcmF0ZXMsIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICA8Y29uc3RhbnQ+S05PVDwvY29uc3RhbnQ+IGJpdCBhbmQgc2V0IHVwIHRoZSBoYXJkd2FyZQorICAgICAgICBjb25zdHJhaW50IG1hbnVhbGx5IChleHBsYWluZWQgbGF0ZXIpLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwk8c3RydWN0ZmllbGQ+cmF0ZV9taW48L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cmF0ZV9tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1pbmltYWwgYW5kCisJbWF4aW1hbCBzYW1wbGUgcmF0ZS4gIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgc29tZWhvdyB0bworCTxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGJpdHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWF4PC9zdHJ1Y3RmaWVsZD4gCisJZGVmaW5lLCBhcyB5b3UgbWlnaHQgYWxyZWFkeSBleHBlY3RlZCwgdGhlIG1pbmltYWwgYW5kIG1heGltYWwKKwludW1iZXIgb2YgY2hhbm5lbHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmVzIHRoZQorCW1heGltYWwgYnVmZmVyIHNpemUgaW4gYnl0ZXMuICBUaGVyZSBpcyBubworCTxzdHJ1Y3RmaWVsZD5idWZmZXJfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIHNpbmNlCisJaXQgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbWluaW1hbCBwZXJpb2Qgc2l6ZSBhbmQgdGhlCisJbWluaW1hbCBudW1iZXIgb2YgcGVyaW9kcy4KKwlNZWFud2hpbGUsIDxzdHJ1Y3RmaWVsZD5wZXJpb2RfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJZGVmaW5lIHRoZSBtaW5pbWFsIGFuZCBtYXhpbWFsIHNpemUgb2YgdGhlIHBlcmlvZCBpbiBieXRlcy4KKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19tYXg8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19taW48L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1heGltYWwgYW5kCisJbWluaW1hbCBudW1iZXIgb2YgcGVyaW9kcyBpbiB0aGUgYnVmZmVyLgorICAgICAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgPHF1b3RlPnBlcmlvZDwvcXVvdGU+IGlzIGEgdGVybSwgdGhhdCBjb3JyZXNwb25kcyB0bworCWZyYWdtZW50IGluIHRoZSBPU1Mgd29ybGQuICBUaGUgcGVyaW9kIGRlZmluZXMgdGhlIHNpemUgYXQKKwl3aGljaCB0aGUgUENNIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFRoaXMgc2l6ZSBzdHJvbmdseQorCWRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiAKKwlHZW5lcmFsbHksIHRoZSBzbWFsbGVyIHBlcmlvZCBzaXplIHdpbGwgZ2l2ZSB5b3UgbW9yZQorCWludGVycnVwdHMsIHRoYXQgaXMsIG1vcmUgY29udHJvbHMuIAorCUluIHRoZSBjYXNlIG9mIGNhcHR1cmUsIHRoaXMgc2l6ZSBkZWZpbmVzIHRoZSBpbnB1dCBsYXRlbmN5LgorCU9uIHRoZSBvdGhlciBoYW5kLCB0aGUgd2hvbGUgYnVmZmVyIHNpemUgZGVmaW5lcyB0aGUKKwlvdXRwdXQgbGF0ZW5jeSBmb3IgdGhlIHBsYXliYWNrIGRpcmVjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlUaGVyZSBpcyBhbHNvIGEgZmllbGQgPHN0cnVjdGZpZWxkPmZpZm9fc2l6ZTwvc3RydWN0ZmllbGQ+LgorCVRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBGSUZPLCBidXQgaXQncyBub3QKKwl1c2VkIGN1cnJlbnRseSBpbiB0aGUgZHJpdmVyIG5vciBpbiB0aGUgYWxzYS1saWIuICBTbywgeW91CisJY2FuIGlnbm9yZSB0aGlzIGZpZWxkLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWNvbmZpZyI+CisJPHRpdGxlPlBDTSBDb25maWd1cmF0aW9uczwvdGl0bGU+CisJPHBhcmE+CisJT2ssIGxldCdzIGdvIGJhY2sgYWdhaW4gdG8gdGhlIFBDTSBydW50aW1lIHJlY29yZHMuCisJVGhlIG1vc3QgZnJlcXVlbnRseSByZWZlcnJlZCByZWNvcmRzIGluIHRoZSBydW50aW1lIGluc3RhbmNlIGFyZQorCXRoZSBQQ00gY29uZmlndXJhdGlvbnMuCisJVGhlIFBDTSBjb25maWd1cmF0aW9ucyBhcmUgc3RvcmVkIG9uIHJ1bnRpbWUgaW5zdGFuY2UKKwlhZnRlciB0aGUgYXBwbGljYXRpb24gc2VuZHMgPHR5cGU+aHdfcGFyYW1zPC90eXBlPiBkYXRhIHZpYQorCWFsc2EtbGliLiAgVGhlcmUgYXJlIG1hbnkgZmllbGRzIGNvcGllZCBmcm9tIGh3X3BhcmFtcyBhbmQKKwlzd19wYXJhbXMgc3RydWN0cy4gIEZvciBleGFtcGxlLAorCTxzdHJ1Y3RmaWVsZD5mb3JtYXQ8L3N0cnVjdGZpZWxkPiBob2xkcyB0aGUgZm9ybWF0IHR5cGUKKwljaG9zZW4gYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBmaWVsZCBjb250YWlucyB0aGUgZW51bSB2YWx1ZQorCTxjb25zdGFudD5TTkRSVl9QQ01fRk9STUFUX1hYWDwvY29uc3RhbnQ+LgorCTwvcGFyYT4KKworCTxwYXJhPgorCU9uZSB0aGluZyB0byBiZSBub3RlZCBpcyB0aGF0IHRoZSBjb25maWd1cmVkIGJ1ZmZlciBhbmQgcGVyaW9kCisJc2l6ZXMgYXJlIHN0b3JlZCBpbiA8cXVvdGU+ZnJhbWVzPC9xdW90ZT4gaW4gdGhlIHJ1bnRpbWUKKyAgICAgICAgSW4gdGhlIEFMU0Egd29ybGQsIDEgZnJhbWUgPSBjaGFubmVscyAqIHNhbXBsZXMtc2l6ZS4KKwlGb3IgY29udmVyc2lvbiBiZXR3ZWVuIGZyYW1lcyBhbmQgYnl0ZXMsIHlvdSBjYW4gdXNlIHRoZQorCWhlbHBlciBmdW5jdGlvbnMsIDxmdW5jdGlvbj5mcmFtZXNfdG9fYnl0ZXMoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgICAgIDxmdW5jdGlvbj5ieXRlc190b19mcmFtZXMoKTwvZnVuY3Rpb24+LiAKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBlcmlvZF9ieXRlcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCUFsc28sIG1hbnkgc29mdHdhcmUgcGFyYW1ldGVycyAoc3dfcGFyYW1zKSBhcmUKKwlzdG9yZWQgaW4gZnJhbWVzLCB0b28uICBQbGVhc2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLgorCTx0eXBlPnNuZF9wY21fdWZyYW1lc190PC90eXBlPiBpcyBmb3IgdGhlIGZyYW1lcyBhcyB1bnNpZ25lZAorCWludGVnZXIgd2hpbGUgPHR5cGU+c25kX3BjbV9zZnJhbWVzX3Q8L3R5cGU+IGlzIGZvciB0aGUgZnJhbWVzCisJYXMgc2lnbmVkIGludGVnZXIuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtZG1hIj4KKwk8dGl0bGU+RE1BIEJ1ZmZlciBJbmZvcm1hdGlvbjwvdGl0bGU+CisJPHBhcmE+CisJVGhlIERNQSBidWZmZXIgaXMgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGZvdXIgZmllbGRzLAorCTxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+LAorCTxzdHJ1Y3RmaWVsZD5kbWFfYWRkcjwvc3RydWN0ZmllbGQ+LAorCTxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPi4KKwlUaGUgPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIGJ1ZmZlcgorCXBvaW50ZXIgKHRoZSBsb2dpY2FsIGFkZHJlc3MpLiAgWW91IGNhbiBjYWxsCisJPGZ1bmN0aW9uPm1lbWNweTwvZnVuY3Rpb24+IGZyb20vdG8gCisJdGhpcyBwb2ludGVyLiAgTWVhbndoaWxlLCA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgorCWhvbGRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGlzIGZpZWxkIGlzCisJc3BlY2lmaWVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGEgbGluZWFyIGJ1ZmZlci4KKwk8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIHNpemUgb2YgYnVmZmVyCisJaW4gYnl0ZXMuICA8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBpcyB1c2VkIGZvcgorCXRoZSBBTFNBIERNQSBhbGxvY2F0b3IuCisJPC9wYXJhPgorCisJPHBhcmE+CisJSWYgeW91IHVzZSBhIHN0YW5kYXJkIEFMU0EgZnVuY3Rpb24sCisJPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sIGZvcgorCWFsbG9jYXRpbmcgdGhlIGJ1ZmZlciwgdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgdGhlIEFMU0EgbWlkZGxlCisJbGF5ZXIsIGFuZCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBjaGFuZ2UgdGhlbSBieQorCXlvdXJzZWxmLiAgWW91IGNhbiByZWFkIHRoZW0gYnV0IG5vdCB3cml0ZSB0aGVtLgorCU9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5CisJeW91cnNlbGYsIHlvdSdsbCBuZWVkIHRvIG1hbmFnZSBpdCBpbiBod19wYXJhbXMgY2FsbGJhY2suCisJQXQgbGVhc3QsIDxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBpcyBtYW5kYXRvcnkuCisJPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaXMgbmVjZXNzYXJ5IHdoZW4gdGhlCisJYnVmZmVyIGlzIG1tYXBwZWQuICBJZiB5b3VyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgbW1hcCwgdGhpcworCWZpZWxkIGlzIG5vdCBuZWNlc3NhcnkuICA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgorCWlzIGFsc28gbm90IG1hbmRhdG9yeS4gIFlvdSBjYW4gdXNlCisJPHN0cnVjdGZpZWxkPmRtYV9wcml2YXRlPC9zdHJ1Y3RmaWVsZD4gYXMgeW91IGxpa2UsIHRvby4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1zdGF0dXMiPgorCTx0aXRsZT5SdW5uaW5nIFN0YXR1czwvdGl0bGU+CisJPHBhcmE+CisJVGhlIHJ1bm5pbmcgc3RhdHVzIGNhbiBiZSByZWZlcnJlZCB2aWEgPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3N0YXR1czwvY29uc3RhbnQ+LgorCVRoaXMgaXMgdGhlIHBvaW50ZXIgdG8gPHR5cGU+c25kX3BjbV9tbWFwX3N0YXR1c190PC90eXBlPgorCXJlY29yZC4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGdldCB0aGUgY3VycmVudCBETUEgaGFyZHdhcmUKKwlwb2ludGVyIHZpYSA8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7c3RhdHVzLSZndDtod19wdHI8L2NvbnN0YW50Pi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgRE1BIGFwcGxpY2F0aW9uIHBvaW50ZXIgY2FuIGJlIHJlZmVycmVkIHZpYQorCTxjb25zdGFudD5ydW50aW1lLSZndDtjb250cm9sPC9jb25zdGFudD4sIHdoaWNoIHBvaW50cworCTx0eXBlPnNuZF9wY21fbW1hcF9jb250cm9sX3Q8L3R5cGU+IHJlY29yZC4KKwlIb3dldmVyLCBhY2Nlc3NpbmcgZGlyZWN0bHkgdG8gdGhpcyB2YWx1ZSBpcyBub3QgcmVjb21tZW5kZWQuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtcHJpdmF0ZSI+CisJPHRpdGxlPlByaXZhdGUgRGF0YTwvdGl0bGU+IAorCTxwYXJhPgorCVlvdSBjYW4gYWxsb2NhdGUgYSByZWNvcmQgZm9yIHRoZSBzdWJzdHJlYW0gYW5kIHN0b3JlIGl0IGluCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LiAgVXN1YWxseSwgdGhpcworCWRvbmUgaW4KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj48Y2l0ZXRpdGxlPgorCXRoZSBvcGVuIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KKwlEb24ndCBtaXggdGhpcyB3aXRoIDxjb25zdGFudD5wY20tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LgorCVRoZSA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50PiB1c3VhbGx5IHBvaW50cyB0aGUKKwljaGlwIGluc3RhbmNlIGFzc2lnbmVkIHN0YXRpY2FsbHkgYXQgdGhlIGNyZWF0aW9uIG9mIFBDTSwgd2hpbGUgdGhlIAorCTxjb25zdGFudD5ydW50aW1lLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50PiBwb2ludHMgYSBkeW5hbWljCisJZGF0YSBjcmVhdGVkIGF0IHRoZSBQQ00gb3BlbiBjYWxsYmFjay4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgbXlfcGNtX2RhdGFfdCAqZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGFsbG9jYXRlZCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIGNsb3NlIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtaW50ciI+CisJPHRpdGxlPkludGVycnVwdCBDYWxsYmFja3M8L3RpdGxlPgorCTxwYXJhPgorCVRoZSBmaWVsZCA8c3RydWN0ZmllbGQ+dHJhbnNmZXJfYWNrX2JlZ2luPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPnRyYW5zZmVyX2Fja19lbmQ8L3N0cnVjdGZpZWxkPiBhcmUgY2FsbGVkIGF0CisJdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZgorCTxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgcmVzcGVjdGl2ZWx5LiAKKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj4KKyAgICAgIDx0aXRsZT5PcGVyYXRvcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIE9LLCBub3cgbGV0IG1lIGV4cGxhaW4gdGhlIGRldGFpbCBvZiBlYWNoIHBjbSBjYWxsYmFjaworICAgICAgKDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+KS4gSW4gZ2VuZXJhbCwgZXZlcnkgY2FsbGJhY2sgbXVzdAorICAgICAgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBudW1iZXIgd2l0aCB0aGUgZXJyb3IKKyAgICAgIG51bWJlciBzdWNoIGFzIDxjb25zdGFudD4tRUlOVkFMPC9jb25zdGFudD4gYXQgYW55CisgICAgICBlcnJvci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgYXQgbGVhc3QgdGhlIGFyZ3VtZW50IHdpdGgKKyAgICAgICAgPHR5cGU+c25kX3BjbV9zdWJzdHJlYW1fdDwvdHlwZT4gcG9pbnRlci4gRm9yIHJldHJpZXZpbmcgdGhlCisgICAgICAgIGNoaXAgcmVjb3JkIGZyb20gdGhlIGdpdmVuIHN1YnN0cmVhbSBpbnN0YW5jZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgIGZvbGxvd2luZyBtYWNyby4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaW50IHh4eCgpIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJVGhlIG1hY3JvIHJlYWRzIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LAorCXdoaWNoIGlzIGEgY29weSBvZiA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4KKwlZb3UgY2FuIG92ZXJyaWRlIHRoZSBmb3JtZXIgaWYgeW91IG5lZWQgdG8gYXNzaWduIGRpZmZlcmVudCBkYXRhCisJcmVjb3JkcyBwZXIgUENNIHN1YnN0cmVhbS4gIEZvciBleGFtcGxlLCBjbWk4MzMwIGRyaXZlciBhc3NpZ25zCisJZGlmZmVyZW50IHByaXZhdGVfZGF0YSBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUgZGlyZWN0aW9ucywKKwliZWNhdXNlIGl0IHVzZXMgdHdvIGRpZmZlcmVudCBjb2RlY3MgKFNCLSBhbmQgQUQtY29tcGF0aWJsZSkgZm9yCisJZGlmZmVyZW50IGRpcmVjdGlvbnMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPm9wZW4gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBvcGVuZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBdCBsZWFzdCwgaGVyZSB5b3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBydW50aW1lLSZndDtodworICAgICAgICAgIHJlY29yZC4gVHlwaWNhbGx5LCB0aGlzIGlzIGRvbmUgYnkgbGlrZSB0aGlzOiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+c25kX215Y2hpcF9wbGF5YmFja19odzwvcGFyYW1ldGVyPiBpcyB0aGUKKyAgICAgICAgICBwcmUtZGVmaW5lZCBoYXJkd2FyZSBkZXNjcmlwdGlvbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlZb3UgY2FuIGFsbG9jYXRlIGEgcHJpdmF0ZSBkYXRhIGluIHRoaXMgY2FsbGJhY2ssIGFzIGRlc2NyaWJlZAorCWluIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj48Y2l0ZXRpdGxlPgorCVByaXZhdGUgRGF0YTwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBuZWVkcyBtb3JlIGNvbnN0cmFpbnRzLCBzZXQgdGhlCisJaGFyZHdhcmUgY29uc3RyYWludHMgaGVyZSwgdG9vLgorCVNlZSA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj48Y2l0ZXRpdGxlPgorCUNvbnN0cmFpbnRzPC9jaXRldGl0bGU+PC9saW5rPiBmb3IgbW9yZSBkZXRhaWxzLgorCTwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWNsb3NlLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPmNsb3NlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIE9idmlvdXNseSwgdGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBjbSBzdWJzdHJlYW0gaXMgY2xvc2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW55IHByaXZhdGUgaW5zdGFuY2UgZm9yIGEgcGNtIHN1YnN0cmVhbSBhbGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgb3BlbiBjYWxsYmFjayB3aWxsIGJlIHJlbGVhc2VkIGhlcmUuIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGtmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaW9jdGwtY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+aW9jdGwgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIHVzZWQgZm9yIGFueSBzcGVjaWFsIGFjdGlvbiB0byBwY20gaW9jdGxzLiBCdXQKKyAgICAgICAgdXN1YWxseSB5b3UgY2FuIHBhc3MgYSBnZW5lcmljIGlvY3RsIGNhbGxiYWNrLCAKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2lvY3RsPC9mdW5jdGlvbj4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWh3LXBhcmFtcy1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19wYXJhbXMgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9od19wYXJhbXMoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3BhcmFtc190ICogaHdfcGFyYW1zKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoaXMgYW5kIDxzdHJ1Y3RmaWVsZD5od19mcmVlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGV4aXN0CisgICAgICAgIG9ubHkgb24gQUxTQSAwLjkueC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXIKKyAgICAgICAgKDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPikgaXMgc2V0CisgICAgICAgIHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiwgCisgICAgICAgIHRoYXQgaXMsIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIHNpemUsIHRoZSBwZXJpb2Qgc2l6ZSwgdGhlCisgICAgICAgIGZvcm1hdCwgZXRjLiBhcmUgZGVmaW5lZCBmb3IgdGhlIHBjbSBzdWJzdHJlYW0uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTWFueSBoYXJkd2FyZSBzZXQtdXAgc2hvdWxkIGJlIGRvbmUgaW4gdGhpcyBjYWxsYmFjaywKKyAgICAgICAgaW5jbHVkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgUGFyYW1ldGVycyB0byBiZSBpbml0aWFsaXplZCBhcmUgcmV0cmlldmVkIGJ5CisgICAgICAgICAgPGZ1bmN0aW9uPnBhcmFtc194eHgoKTwvZnVuY3Rpb24+IG1hY3Jvcy4gRm9yIGFsbG9jYXRpbmcgYQorICAgICAgICAgIGJ1ZmZlciwgeW91IGNhbiBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uLCAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+IGlzIGF2YWlsYWJsZQorCSAgb25seSB3aGVuIHRoZSBETUEgYnVmZmVycyBoYXZlIGJlZW4gcHJlLWFsbG9jYXRlZC4KKwkgIFNlZSB0aGUgc2VjdGlvbiA8bGluaworCSAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnktYnVmZmVyLXR5cGVzIj48Y2l0ZXRpdGxlPgorCSAgQnVmZmVyIFR5cGVzPC9jaXRldGl0bGU+PC9saW5rPiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgYW5kIDxzdHJ1Y3RmaWVsZD5wcmVwYXJlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzCisgICAgICAgIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyIGluaXRpYWxpemF0aW9uLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIE9TUyBlbXVsYXRpb24gbWF5CisgICAgICAgIGNhbGwgdGhlc2UgY2FsbGJhY2tzIGF0IGVhY2ggY2hhbmdlIHZpYSBpdHMgaW9jdGwuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGh1cywgeW91IG5lZWQgdG8gdGFrZSBjYXJlIG5vdCB0byBhbGxvY2F0ZSB0aGUgc2FtZSBidWZmZXJzCisgICAgICAgIG1hbnkgdGltZXMsIHdoaWNoIHdpbGwgbGVhZCB0byBtZW1vcnkgbGVhayEgIENhbGxpbmcgdGhlCisgICAgICAgIGhlbHBlciBmdW5jdGlvbiBhYm92ZSBtYW55IHRpbWVzIGlzIE9LLiBJdCB3aWxsIHJlbGVhc2UgdGhlCisgICAgICAgIHByZXZpb3VzIGJ1ZmZlciBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgd2FzIGFscmVhZHkgYWxsb2NhdGVkLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFub3RoZXIgbm90ZSBpcyB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgbm9uLWF0b21pYworICAgICAgICAoc2NoZWR1bGFibGUpLiBUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayAKKyAgICAgICAgaXMgYXRvbWljIChub24tc2NoZWR1bGFibGUpLiBUaGF0IGlzLCBtdXRleCBvciBhbnkKKyAgICAgICAgc2NoZWR1bGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKwlQbGVhc2Ugc2VlIHRoZSBzdWJzZWN0aW9uCisJPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1hdG9taWNpdHkiPjxjaXRldGl0bGU+CisJQXRvbWljaXR5PC9jaXRldGl0bGU+PC9saW5rPiBmb3IgZGV0YWlscy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctZnJlZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19mcmVlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfaHdfZnJlZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHJlbGVhc2UgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdmlhCisgICAgICAgICAgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+LiBGb3IgZXhhbXBsZSwgcmVsZWFzaW5nIHRoZQorICAgICAgICAgIGJ1ZmZlciB2aWEgCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgZG9uZSBieQorICAgICAgICAgIGNhbGxpbmcgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgdGhlIGNsb3NlIGNhbGxiYWNrIGlzIGNhbGxlZC4KKyAgICAgICAgICBBbHNvLCB0aGUgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdG9vLgorICAgICAgICAgIEtlZXAgdHJhY2sgd2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIGFscmVhZHkgcmVsZWFzZWQuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wcmVwYXJlLWNhbGxiYWNrIj4KKyAgICAgICA8dGl0bGU+cHJlcGFyZSBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X3ByZXBhcmUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBwY20gaXMKKyAgICAgICAgPHF1b3RlPnByZXBhcmVkPC9xdW90ZT4uIFlvdSBjYW4gc2V0IHRoZSBmb3JtYXQgdHlwZSwgc2FtcGxlCisgICAgICAgIHJhdGUsIGV0Yy4gaGVyZS4gVGhlIGRpZmZlcmVuY2UgZnJvbQorICAgICAgICA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4gaXMgdGhhdCB0aGUgCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5wcmVwYXJlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYXQgZWFjaAorICAgICAgICB0aW1lIAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wcmVwYXJlKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIGkuZS4gd2hlbgorICAgICAgICByZWNvdmVyZWQgYWZ0ZXIgdW5kZXJydW5zLCBldGMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgYmVjYW1lIG5vbi1hdG9taWMgc2luY2UgdGhlIHJlY2VudCB2ZXJzaW9uLgorCVlvdSBjYW4gdXNlIHNjaGVkdWxlLXJlbGF0ZWQgZnVjbnRpb25zIHNhZmVseSBpbiB0aGlzIGNhbGxiYWNrIG5vdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzLCB5b3UgY2FuIHJlZmVyIHRvIHRoZQorICAgICAgICB2YWx1ZXMgdmlhIHRoZSBydW50aW1lIHJlY29yZCwKKyAgICAgICAgc3Vic3RyZWFtLSZndDtydW50aW1lLgorICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZ2V0IHRoZSBjdXJyZW50CisgICAgICAgIHJhdGUsIGZvcm1hdCBvciBjaGFubmVscywgYWNjZXNzIHRvCisgICAgICAgIHJ1bnRpbWUtJmd0O3JhdGUsCisgICAgICAgIHJ1bnRpbWUtJmd0O2Zvcm1hdCBvcgorICAgICAgICBydW50aW1lLSZndDtjaGFubmVscywgcmVzcGVjdGl2ZWx5LiAKKyAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgc2V0IHRvCisJcnVudGltZS0mZ3Q7ZG1hX2FyZWEuICBUaGUgYnVmZmVyIGFuZCBwZXJpb2Qgc2l6ZXMgYXJlCisJaW4gcnVudGltZS0mZ3Q7YnVmZmVyX3NpemUgYW5kIHJ1bnRpbWUtJmd0O3BlcmlvZF9zaXplLAorCXJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEJlIGNhcmVmdWwgdGhhdCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG1hbnkgdGltZXMgYXQKKyAgICAgICAgZWFjaCBzZXQgdXAsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXRyaWdnZXItY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+dHJpZ2dlciBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSwgaW50IGNtZCk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBwY20gaXMgc3RhcnRlZCwgc3RvcHBlZCBvciBwYXVzZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGljaCBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQsCisgICAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1hYWDwvY29uc3RhbnQ+IGluCisgICAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gQXQgbGVhc3QsCisgICAgICAgICAgPGNvbnN0YW50PlNUQVJUPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5TVE9QPC9jb25zdGFudD4KKyAgICAgICAgICBjb21tYW5kcyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYWxsYmFjay4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN3aXRjaCAoY21kKSB7CisgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisgICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHRvIHN0YXJ0IHRoZSBQQ00gZW5naW5lCisgICAgICAgICAgYnJlYWs7CisgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgdG8gc3RvcCB0aGUgUENNIGVuZ2luZQorICAgICAgICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGVuIHRoZSBwY20gc3VwcG9ydHMgdGhlIHBhdXNlIG9wZXJhdGlvbiAoZ2l2ZW4gaW4gaW5mbworICAgICAgICBmaWVsZCBvZiB0aGUgaGFyZHdhcmUgdGFibGUpLCA8Y29uc3RhbnQ+UEFVU0VfUFVTRTwvY29uc3RhbnQ+CisgICAgICAgIGFuZCA8Y29uc3RhbnQ+UEFVU0VfUkVMRUFTRTwvY29uc3RhbnQ+IGNvbW1hbmRzIG11c3QgYmUKKyAgICAgICAgaGFuZGxlZCBoZXJlLCB0b28uIFRoZSBmb3JtZXIgaXMgdGhlIGNvbW1hbmQgdG8gcGF1c2UgdGhlIHBjbSwKKyAgICAgICAgYW5kIHRoZSBsYXR0ZXIgdG8gcmVzdGFydCB0aGUgcGNtIGFnYWluLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgc3VzcGVuZC9yZXN1bWUgb3BlcmF0aW9uCisgICAgICAgIChpLmUuIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50PiBmbGFnIGlzIHNldCksCisgICAgICAgIDxjb25zdGFudD5TVVNQRU5EPC9jb25zdGFudD4gYW5kIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PgorICAgICAgICBjb21tYW5kcyBtdXN0IGJlIGhhbmRsZWQsIHRvby4KKyAgICAgICAgVGhlc2UgY29tbWFuZHMgYXJlIGlzc3VlZCB3aGVuIHRoZSBwb3dlci1tYW5hZ2VtZW50IHN0YXR1cyBpcworICAgICAgICBjaGFuZ2VkLiAgT2J2aW91c2x5LCB0aGUgPGNvbnN0YW50PlNVU1BFTkQ8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+CisgICAgICAgIGRvIHN1c3BlbmQgYW5kIHJlc3VtZSBvZiB0aGUgcGNtIHN1YnN0cmVhbSwgYW5kIHVzdWFsbHksIHRoZXkKKyAgICAgICAgYXJlIGlkZW50aWNhbCB3aXRoIDxjb25zdGFudD5TVE9QPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5TVEFSVDwvY29uc3RhbnQ+IGNvbW1hbmRzLCByZXNwZWN0aXZlbHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoaXMgY2FsbGJhY2sgaXMgYXRvbWljLiAgWW91IGNhbm5vdCBjYWxsCisJICB0aGUgZnVuY3Rpb24gZ29pbmcgdG8gc2xlZXAuCisJICBUaGUgdHJpZ2dlciBjYWxsYmFjayBzaG91bGQgYmUgYXMgbWluaW1hbCBhcyBwb3NzaWJsZSwKKwkgIGp1c3QgcmVhbGx5IHRyaWdnZXJpbmcgdGhlIERNQS4gIFRoZSBvdGhlciBzdHVmZiBzaG91bGQgYmUKKwkgIGluaXRpYWxpemVkIGh3X3BhcmFtcyBhbmQgcHJlcGFyZSBjYWxsYmFja3MgcHJvcGVybHkKKwkgIGJlZm9yZWhhbmQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBvaW50ZXItY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+cG9pbnRlciBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF94eHhfcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgUENNIG1pZGRsZSBsYXllciBpbnF1aXJlcworICAgICAgICB0aGUgY3VycmVudCBoYXJkd2FyZSBwb3NpdGlvbiBvbiB0aGUgYnVmZmVyLiBUaGUgcG9zaXRpb24gbXVzdAorICAgICAgICBiZSByZXR1cm5lZCBpbiBmcmFtZXMgKHdoaWNoIHdhcyBpbiBieXRlcyBvbiBBTFNBIDAuNS54KSwKKyAgICAgICAgcmFuZ2VkIGZyb20gMCB0byBidWZmZXJfc2l6ZSAtIDEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB1c3VhbGx5IGZyb20gdGhlIGJ1ZmZlci11cGRhdGUgcm91dGluZSBpbiB0aGUKKyAgICAgICAgcGNtIG1pZGRsZSBsYXllciwgd2hpY2ggaXMgaW52b2tlZCB3aGVuCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgaW4gdGhlCisgICAgICAgIGludGVycnVwdCByb3V0aW5lLiBUaGVuIHRoZSBwY20gbWlkZGxlIGxheWVyIHVwZGF0ZXMgdGhlCisgICAgICAgIHBvc2l0aW9uIGFuZCBjYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgc3BhY2UsIGFuZCB3YWtlcyB1cCB0aGUKKyAgICAgICAgc2xlZXBpbmcgcG9sbCB0aHJlYWRzLCBldGMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBhbHNvIGF0b21pYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtY29weS1zaWxlbmNlIj4KKyAgICAgICAgPHRpdGxlPmNvcHkgYW5kIHNpbGVuY2UgY2FsbGJhY2tzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub3QgbWFuZGF0b3J5LCBhbmQgY2FuIGJlIG9taXR0ZWQgaW4KKyAgICAgICAgbW9zdCBjYXNlcy4gVGhlc2UgY2FsbGJhY2tzIGFyZSB1c2VkIHdoZW4gdGhlIGhhcmR3YXJlIGJ1ZmZlcgorICAgICAgICBjYW5ub3QgYmUgb24gdGhlIG5vcm1hbCBtZW1vcnkgc3BhY2UuIFNvbWUgY2hpcHMgaGF2ZSB0aGVpcgorICAgICAgICBvd24gYnVmZmVyIG9uIHRoZSBoYXJkd2FyZSB3aGljaCBpcyBub3QgbWFwcGFibGUuIEluIHN1Y2ggYQorICAgICAgICBjYXNlLCB5b3UgaGF2ZSB0byB0cmFuc2ZlciB0aGUgZGF0YSBtYW51YWxseSBmcm9tIHRoZSBtZW1vcnkKKyAgICAgICAgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBidWZmZXIuIE9yLCBpZiB0aGUgYnVmZmVyIGlzCisgICAgICAgIG5vbi1jb250aWd1b3VzIG9uIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgbWVtb3J5IHNwYWNlcywKKyAgICAgICAgdGhlc2UgY2FsbGJhY2tzIG11c3QgYmUgZGVmaW5lZCwgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHRoZXNlIHR3byBjYWxsYmFja3MgYXJlIGRlZmluZWQsIGNvcHkgYW5kIHNldC1zaWxlbmNlCisgICAgICAgIG9wZXJhdGlvbnMgYXJlIGRvbmUgYnkgdGhlbS4gVGhlIGRldGFpbGVkIHdpbGwgYmUgZGVzY3JpYmVkIGluCisgICAgICAgIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5CisgICAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtYWNrIj4KKyAgICAgICAgPHRpdGxlPmFjayBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBub3QgbWFuZGF0b3J5LiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgICAgICB3aGVuIHRoZSBhcHBsX3B0ciBpcyB1cGRhdGVkIGluIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9ucy4KKyAgICAgICAgU29tZSBkcml2ZXJzIGxpa2UgZW11MTBrMS1meCBhbmQgY3M0Nnh4IG5lZWQgdG8gdHJhY2sgdGhlCisJY3VycmVudCBhcHBsX3B0ciBmb3IgdGhlIGludGVybmFsIGJ1ZmZlciwgYW5kIHRoaXMgY2FsbGJhY2sKKwlpcyB1c2VmdWwgb25seSBmb3Igc3VjaCBhIHB1cnBvc2UuCisJPC9wYXJhPgorCTxwYXJhPgorCSAgVGhpcyBjYWxsYmFjayBpcyBhdG9taWMuCisJPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5wYWdlIGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGFsc28gbm90IG1hbmRhdG9yeS4gVGhpcyBjYWxsYmFjayBpcyB1c2VkCisgICAgICAgIG1haW5seSBmb3IgdGhlIG5vbi1jb250aWd1b3VzIGJ1ZmZlci4gVGhlIG1tYXAgY2FsbHMgdGhpcworICAgICAgICBjYWxsYmFjayB0byBnZXQgdGhlIHBhZ2UgYWRkcmVzcy4gU29tZSBleGFtcGxlcyB3aWxsIGJlCisgICAgICAgIGV4cGxhaW5lZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluaworICAgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPiwgdG9vLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj4KKyAgICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlc3Qgb2YgcGNtIHN0dWZmIGlzIHRoZSBQQ00gaW50ZXJydXB0IGhhbmRsZXIuIFRoZQorICAgICAgcm9sZSBvZiBQQ00gaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIHNvdW5kIGRyaXZlciBpcyB0byB1cGRhdGUKKyAgICAgIHRoZSBidWZmZXIgcG9zaXRpb24gYW5kIHRvIHRlbGwgdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2hlbiB0aGUKKyAgICAgIGJ1ZmZlciBwb3NpdGlvbiBnb2VzIGFjcm9zcyB0aGUgcHJlc2NyaWJlZCBwZXJpb2Qgc2l6ZS4gVG8KKyAgICAgIGluZm9ybSB0aGlzLCBjYWxsIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPgorICAgICAgZnVuY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2Ygc291bmQgY2hpcHMgdG8gZ2VuZXJhdGUgdGhlIGludGVycnVwdHMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyLWJvdW5kYXJ5Ij4KKyAgICAgICAgPHRpdGxlPkludGVycnVwdHMgYXQgdGhlIHBlcmlvZCAoZnJhZ21lbnQpIGJvdW5kYXJ5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyB0aGUgbW9zdCBmcmVxdWVudGx5IGZvdW5kIHR5cGU6ICB0aGUgaGFyZHdhcmUKKyAgICAgICAgZ2VuZXJhdGVzIGFuIGludGVycnVwdCBhdCBlYWNoIHBlcmlvZCBib3VuZGFyeS4KKwlJbiB0aGlzIGNhc2UsIHlvdSBjYW4gY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gYXQgZWFjaCAKKyAgICAgICAgaW50ZXJydXB0LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiB0YWtlcyB0aGUKKyAgICAgICAgc3Vic3RyZWFtIHBvaW50ZXIgYXMgaXRzIGFyZ3VtZW50LiBUaHVzLCB5b3UgbmVlZCB0byBrZWVwIHRoZQorICAgICAgICBzdWJzdHJlYW0gcG9pbnRlciBhY2Nlc3NpYmxlIGZyb20gdGhlIGNoaXAgaW5zdGFuY2UuIEZvcgorICAgICAgICBleGFtcGxlLCBkZWZpbmUgc3Vic3RyZWFtIGZpZWxkIGluIHRoZSBjaGlwIHJlY29yZCB0byBob2xkIHRoZQorICAgICAgICBjdXJyZW50IHJ1bm5pbmcgc3Vic3RyZWFtIHBvaW50ZXIsIGFuZCBzZXQgdGhlIHBvaW50ZXIgdmFsdWUKKyAgICAgICAgYXQgb3BlbiBjYWxsYmFjayAoYW5kIHJlc2V0IGF0IGNsb3NlIGNhbGxiYWNrKS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB5b3UgYXF1aXJlIGEgc3BpbmxvY2sgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQgdGhlCisgICAgICAgIGxvY2sgaXMgdXNlZCBpbiBvdGhlciBwY20gY2FsbGJhY2tzLCB0b28sIHRoZW4geW91IGhhdmUgdG8KKyAgICAgICAgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZworICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIGJlY2F1c2UKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGNhbGxzIG90aGVyIHBjbQorICAgICAgICBjYWxsYmFja3MgaW5zaWRlLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEEgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZToKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXIgQ2FzZSAjMTwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgaWYgKHBjbV9pcnFfaW52b2tlZChjaGlwKSkgeworICAgICAgICAgICAgICAgICAgLyogY2FsbCB1cGRhdGVyLCB1bmxvY2sgYmVmb3JlIGl0ICovCisgICAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnN1YnN0cmVhbSk7CisgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgICAgICAgICAgLy8gYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICB9CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2V4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItdGltZXIiPgorICAgICAgICA8dGl0bGU+SGlnaC1mcmVxdWVudCB0aW1lciBpbnRlcnJ1cHRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisJVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMKKyAgICAgICAgYXQgdGhlIHBlcmlvZCBib3VuZGFyeSBidXQgZG8gdGltZXItaW50ZXJydXB0cyBhdCB0aGUgZml4ZWQKKyAgICAgICAgdGltZXIgcmF0ZSAoZS5nLiBlczE5Njggb3IgeW1mcGNpIGRyaXZlcnMpLiAKKyAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBjaGVjayB0aGUgY3VycmVudCBoYXJkd2FyZQorICAgICAgICBwb3NpdGlvbiBhbmQgYWNjdW11bGF0ZXMgdGhlIHByb2Nlc3NlZCBzYW1wbGUgbGVuZ3RoIGF0IGVhY2gKKyAgICAgICAgaW50ZXJydXB0LiAgV2hlbiB0aGUgYWNjdW11bGF0ZWQgc2l6ZSBvdmVyY29tZXMgdGhlIHBlcmlvZAorICAgICAgICBzaXplLCBjYWxsIAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gYW5kIHJlc2V0IHRoZQorICAgICAgICBhY2N1bXVsYXRvci4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBIHR5cGljYWwgY29kaW5nIHdvdWxkIGJlIGxpa2UgdGhlIGZvbGxvd2luZy4KKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXIgQ2FzZSAjMjwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgaWYgKHBjbV9pcnFfaW52b2tlZChjaGlwKSkgeworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcHRyLCBzaXplOworICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvaW50ZXIgKGluIGZyYW1lcykgKi8KKyAgICAgICAgICAgICAgICAgIGxhc3RfcHRyID0gZ2V0X2h3X3B0cihjaGlwKTsKKyAgICAgICAgICAgICAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcHJvY2Vzc2VkIGZyYW1lcyBzaW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAqIGxhc3QgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3B0ciA8IGNoaXAtPmxhc3RfcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBsYXN0X3B0ciAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjaGlwLT5sYXN0X3B0cjsgCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBsYXN0X3B0ciAtIGNoaXAtPmxhc3RfcHRyOworICAgICAgICAgICAgICAgICAgLyogcmVtZW1iZXIgdGhlIGxhc3QgdXBkYXRlZCBwb2ludCAqLworICAgICAgICAgICAgICAgICAgY2hpcC0+bGFzdF9wdHIgPSBsYXN0X3B0cjsKKyAgICAgICAgICAgICAgICAgIC8qIGFjY3VtdWxhdGUgdGhlIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgIGNoaXAtPnNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgIC8qIG92ZXIgdGhlIHBlcmlvZCBib3VuZGFyeT8gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChjaGlwLT5zaXplID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IHRoZSBhY2N1bXVsYXRvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5zaXplICU9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAvLyBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgIH0KKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci1ib3RoIj4KKyAgICAgICAgPHRpdGxlPk9uIGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gYm90aCBjYXNlcywgZXZlbiBpZiBtb3JlIHRoYW4gb25lIHBlcmlvZCBhcmUgZWxhcHNlZCwgeW91CisgICAgICAgIGRvbid0IGhhdmUgdG8gY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gbWFueSB0aW1lcy4gQ2FsbAorICAgICAgICBvbmx5IG9uY2UuIEFuZCB0aGUgcGNtIGxheWVyIHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgaGFyZHdhcmUKKyAgICAgICAgcG9pbnRlciBhbmQgdXBkYXRlIHRvIHRoZSBsYXRlc3Qgc3RhdHVzLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+CisgICAgICA8dGl0bGU+QXRvbWljaXR5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCAoYW5kIHRodXMgZGlmZmljdWx0IHRvIGRlYnVnKSBwcm9ibGVtCisgICAgICBvbiB0aGUga2VybmVsIHByb2dyYW1taW5nIGlzIHRoZSByYWNlIGNvbmRpdGlvbi4KKyAgICAgIE9uIGxpbnV4IGtlcm5lbCwgdXN1YWxseSBpdCdzIHNvbHZlZCB2aWEgc3Bpbi1sb2NrcyBvcgorICAgICAgc2VtYXBob3Jlcy4gIEluIGdlbmVyYWwsIGlmIHRoZSByYWNlIGNvbmRpdGlvbiBtYXkKKyAgICAgIGhhcHBlbiBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGl0J3MgaGFuZGxlZCBhcyBhdG9taWMsIGFuZCB5b3UKKyAgICAgIGhhdmUgdG8gdXNlIHNwaW5sb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBjcml0aWNhbCBzZXNzaW9uLiAgSWYgaXQKKyAgICAgIG5ldmVyIGhhcHBlbnMgaW4gdGhlIGludGVycnVwdCBhbmQgaXQgbWF5IHRha2UgcmVsYXRpdmVseSBsb25nCisgICAgICB0aW1lLCB5b3Ugc2hvdWxkIHVzZSBzZW1hcGhvcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQXMgYWxyZWFkeSBzZWVuLCBzb21lIHBjbSBjYWxsYmFja3MgYXJlIGF0b21pYyBhbmQgc29tZSBhcmUKKyAgICAgIG5vdC4gIEZvciBleGFtcGxlLCA8cGFyYW1ldGVyPmh3X3BhcmFtczwvcGFyYW1ldGVyPiBjYWxsYmFjayBpcworICAgICAgbm9uLWF0b21pYywgd2hpbGUgPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCisgICAgICBhdG9taWMuICBUaGlzIG1lYW5zLCB0aGUgbGF0dGVyIGlzIGNhbGxlZCBhbHJlYWR5IGluIGEgc3BpbmxvY2sKKyAgICAgIGhlbGQgYnkgdGhlIFBDTSBtaWRkbGUgbGF5ZXIuIFBsZWFzZSB0YWtlIHRoaXMgYXRvbWljaXR5IGludG8KKyAgICAgIGFjY291bnQgd2hlbiB5b3UgdXNlIGEgc3BpbmxvY2sgb3IgYSBzZW1hcGhvcmUgaW4gdGhlIGNhbGxiYWNrcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJbiB0aGUgYXRvbWljIGNhbGxiYWNrcywgeW91IGNhbm5vdCB1c2UgZnVuY3Rpb25zIHdoaWNoIG1heSBjYWxsCisgICAgICA8ZnVuY3Rpb24+c2NoZWR1bGU8L2Z1bmN0aW9uPiBvciBnbyB0bworICAgICAgPGZ1bmN0aW9uPnNsZWVwPC9mdW5jdGlvbj4uICBUaGUgc2VtYXBob3JlIGFuZCBtdXRleCBkbyBzbGVlcCwKKyAgICAgIGFuZCBoZW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGluc2lkZSB0aGUgYXRvbWljIGNhbGxiYWNrcworICAgICAgKGUuZy4gPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrKS4KKyAgICAgIEZvciB0YWtpbmcgYSBjZXJ0YWluIGRlbGF5IGluIHN1Y2ggYSBjYWxsYmFjaywgcGxlYXNlIHVzZQorICAgICAgPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQWxsIHRocmVlIGF0b21pYyBjYWxsYmFja3MgKHRyaWdnZXIsIHBvaW50ZXIsIGFuZCBhY2spIGFyZQorICAgICAgY2FsbGVkIHdpdGggbG9jYWwgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJhaW50cyI+CisgICAgICA8dGl0bGU+Q29uc3RyYWludHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCBzYW1wbGUgcmF0ZXMsIG9yIG9ubHkgdGhlCisgICAgICBsaW1pdGVkIHNhbXBsZXMsIHlvdSBuZWVkIHRvIHNldCBhIGNvbnN0cmFpbnQgZm9yIHRoZQorICAgICAgY29uZGl0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcmRlciB0byByZXN0cmljdCB0aGUgc2FtcGxlIHJhdGVzIGluIHRoZSBzb21lCisgICAgICAgIHN1cHBvcnRlZCB2YWx1ZXMsIHVzZQorCTxmdW5jdGlvbj5zbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCgpPC9mdW5jdGlvbj4uCisJWW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBvcGVuIGNhbGxiYWNrLgorCisgICAgICAgIDxleGFtcGxlPgorCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHM8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPQorICAgICAgICAgIHs0MDAwLCAxMDAwMCwgMjIwNTAsIDQ0MTAwfTsKKyAgc3RhdGljIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0X3QgY29uc3RyYWludHNfcmF0ZXMgPSB7CisgICAgICAgICAgLmNvdW50ID0gQVJSQVlfU0laRShyYXRlcyksCisgICAgICAgICAgLmxpc3QgPSByYXRlcywKKyAgICAgICAgICAubWFzayA9IDAsCisgIH07CisKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludHNfcmF0ZXMpOworICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBjb25zdHJhaW50cy4KKyAgICAgICAgTG9vayBpbiA8ZmlsZW5hbWU+c291bmQvcGNtLmg8L2ZpbGVuYW1lPiBmb3IgYSBjb21wbGV0ZSBsaXN0LgorICAgICAgICBZb3UgY2FuIGV2ZW4gZGVmaW5lIHlvdXIgb3duIGNvbnN0cmFpbnQgcnVsZXMuCisgICAgICAgIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIG15X2NoaXAgY2FuIG1hbmFnZSBhIHN1YnN0cmVhbSBvZiAxIGNoYW5uZWwKKyAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhlIGZvcm1hdCBpcyBTMTZfTEUsIG90aGVyd2lzZSBpdCBzdXBwb3J0cyBhbnkgZm9ybWF0CisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgPHR5cGU+c25kX3BjbV9oYXJkd2FyZV90PC90eXBlPiBzdHVjdHVyZSAob3IgaW4gYW55CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnRfbGlzdCkuIFlvdSBjYW4gYnVpbGQgYSBydWxlIGxpa2UgdGhpczoKKworICAgICAgICA8ZXhhbXBsZT4KKwkgIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscyhzbmRfcGNtX2h3X3BhcmFtc190ICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX3BjbV9od19ydWxlX3QgKnJ1bGUpCisgIHsKKyAgICAgICAgICBzbmRfaW50ZXJ2YWxfdCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKyAgICAgICAgICBzbmRfbWFza190ICpmID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOworICAgICAgICAgIHNuZF9tYXNrX3QgZm10OworCisgICAgICAgICAgc25kX21hc2tfYW55KCZmbXQpOyAgICAvKiBJbml0IHRoZSBzdHJ1Y3QgKi8KKyAgICAgICAgICBpZiAoYy0+bWluIDwgMikgeworICAgICAgICAgICAgICAgICAgZm10LmJpdHNbMF0gJj0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEU7CisgICAgICAgICAgICAgICAgICByZXR1cm4gc25kX21hc2tfcmVmaW5lKGYsICZmbXQpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoZW4geW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCB5b3VyIHJ1bGU6CisKKyAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorCSA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKyAgICAgICAgICAgICAgICAgICAgICBod19ydWxlX2NoYW5uZWxzX2J5X2Zvcm1hdCwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAtMSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBydWxlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIHNldHMgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gQnV0IGFuIGFwcGxpY2F0aW9uIGNhbiBzZXQgdGhlIGZvcm1hdCBiZWZvcmUgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gVGh1cyB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSB0aGUgaW52ZXJzZSBydWxlOgorCisgICAgICAgPGV4YW1wbGU+CisJIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0KHNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX2h3X3J1bGVfdCAqcnVsZSkKKyAgeworICAgICAgICAgIHNuZF9pbnRlcnZhbF90ICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworICAgICAgICAgIHNuZF9tYXNrX3QgKmYgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisgICAgICAgICAgc25kX2ludGVydmFsX3QgY2g7CisKKyAgICAgICAgICBzbmRfaW50ZXJ2YWxfYW55KCZjaCk7CisgICAgICAgICAgaWYgKGYtPmJpdHNbMF0gPT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpIHsKKyAgICAgICAgICAgICAgICAgIGNoLm1pbiA9IGNoLm1heCA9IDE7CisgICAgICAgICAgICAgICAgICBjaC5pbnRlZ2VyID0gMTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGMsICZjaCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgLi4uYW5kIGluIHRoZSBvcGVuIGNhbGxiYWNrOgorICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICBod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscywgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorICAgICAgICAgICAgICAgICAgICAgIC0xKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSSB3b24ndCBleHBsYWluIG1vcmUgZGV0YWlscyBoZXJlLCByYXRoZXIgSQorICAgICAgICB3b3VsZCBsaWtlIHRvIHNheSwgPHF1b3RlPkx1a2UsIHVzZSB0aGUgc291cmNlLjwvcXVvdGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQ29udHJvbCBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJjb250cm9sLWludGVyZmFjZSI+CisgICAgPHRpdGxlPkNvbnRyb2wgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY29udHJvbCBpbnRlcmZhY2UgaXMgdXNlZCB3aWRlbHkgZm9yIG1hbnkgc3dpdGNoZXMsCisgICAgICBzbGlkZXJzLCBldGMuIHdoaWNoIGFyZSBhY2Nlc3NlZCBmcm9tIHRoZSB1c2VyLXNwYWNlLiBJdHMgbW9zdAorICAgICAgaW1wb3J0YW50IHVzZSBpcyB0aGUgbWl4ZXIgaW50ZXJmYWNlLiBJbiBvdGhlciB3b3Jkcywgb24gQUxTQQorICAgICAgMC45LngsIGFsbCB0aGUgbWl4ZXIgc3R1ZmYgaXMgaW1wbGVtZW50ZWQgb24gdGhlIGNvbnRyb2wga2VybmVsCisgICAgICBBUEkgKHdoaWxlIHRoZXJlIHdhcyBhbiBpbmRlcGVuZGVudCBtaXhlciBrZXJuZWwgQVBJIG9uIDAuNS54KS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIGhhcyBhIHdlbGwtZGVmaW5lZCBBQzk3IGNvbnRyb2wgbW9kdWxlLiBJZiB5b3VyIGNoaXAKKyAgICAgIHN1cHBvcnRzIG9ubHkgdGhlIEFDOTcgYW5kIG5vdGhpbmcgZWxzZSwgeW91IGNhbiBza2lwIHRoaXMKKyAgICAgIHNlY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvbnRyb2wgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29udHJvbC5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgSW5jbHVkZSB0aGlzIGZpbGUgaWYgeW91IGFkZCB5b3VyIG93biBjb250cm9scy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtZGVmaW5pdGlvbiI+CisgICAgICA8dGl0bGU+RGVmaW5pdGlvbiBvZiBDb250cm9sczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGNyZWF0aW5nIGEgbmV3IGNvbnRyb2wsIHlvdSBuZWVkIHRvIGRlZmluZSB0aGUgdGhyZWUKKyAgICAgIGNhbGxiYWNrczogPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPi4gVGhlbiwgZGVmaW5lIGEKKyAgICAgIDx0eXBlPnNuZF9rY29udHJvbF9uZXdfdDwvdHlwZT4gcmVjb3JkLCBzdWNoIGFzOiAKKworICAgICAgICA8ZXhhbXBsZT4KKwkgIDx0aXRsZT5EZWZpbml0aW9uIG9mIGEgQ29udHJvbDwvdGl0bGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3QgbXlfY29udHJvbCBfX2RldmluaXRkYXRhID0geworICAgICAgICAgIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorICAgICAgICAgIC5uYW1lID0gIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorICAgICAgICAgIC5pbmRleCA9IDAsCisgICAgICAgICAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisgICAgICAgICAgLnByaXZhdGVfdmFsdWVzID0gMHhmZmZmLAorICAgICAgICAgIC5pbmZvID0gbXlfY29udHJvbF9pbmZvLAorICAgICAgICAgIC5nZXQgPSBteV9jb250cm9sX2dldCwKKyAgICAgICAgICAucHV0ID0gbXlfY29udHJvbF9wdXQKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE1vc3QgbGlrZWx5IHRoZSBjb250cm9sIGlzIGNyZWF0ZWQgdmlhCisgICAgICA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiwgYW5kIGluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuCisgICAgICBhZGQgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IHByZWZpeCB0byB0aGUKKyAgICAgIGRlZmluaXRpb24gbGlrZSBhYm92ZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmlmYWNlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mCisgICAgICB0aGUgY29udHJvbCwKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9JRkFDRV9YWFg8L2NvbnN0YW50Pi4gVGhlcmUgYXJlCisgICAgICA8Y29uc3RhbnQ+TUlYRVI8L2NvbnN0YW50PiwgPGNvbnN0YW50PlBDTTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkNBUkQ8L2NvbnN0YW50PiwgZXRjLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIG5hbWUgaWRlbnRpZmllcgorICAgICAgc3RyaW5nLiBPbiBBTFNBIDAuOS54LCB0aGUgY29udHJvbCBuYW1lIGlzIHZlcnkgaW1wb3J0YW50LAorICAgICAgYmVjYXVzZSBpdHMgcm9sZSBpcyBjbGFzc2lmaWVkIGZyb20gaXRzIG5hbWUuIFRoZXJlIGFyZQorICAgICAgcHJlLWRlZmluZWQgc3RhbmRhcmQgY29udHJvbCBuYW1lcy4gVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbgorICAgICAgdGhlIHN1YnNlY3Rpb24KKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPjxjaXRldGl0bGU+CisgICAgICBDb250cm9sIE5hbWVzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBob2xkcyB0aGUgaW5kZXggbnVtYmVyCisgICAgICBvZiB0aGlzIGNvbnRyb2wuIElmIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBjb250cm9scyB3aXRoCisgICAgICB0aGUgc2FtZSBuYW1lLCB0aGV5IGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBpbmRleAorICAgICAgbnVtYmVyLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gCisgICAgICBzZXZlcmFsIGNvZGVjcyBleGlzdCBvbiB0aGUgY2FyZC4gSWYgdGhlIGluZGV4IGlzIHplcm8sIHlvdSBjYW4KKyAgICAgIG9taXQgdGhlIGRlZmluaXRpb24gYWJvdmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5hY2Nlc3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYWNjZXNzCisgICAgICB0eXBlIG9mIHRoaXMgY29udHJvbC4gR2l2ZSB0aGUgY29tYmluYXRpb24gb2YgYml0IG1hc2tzLAorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19YWFg8L2NvbnN0YW50PiwgdGhlcmUuCisgICAgICBUaGUgZGV0YWlsZWQgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWFjY2Vzcy1mbGFncyI+PGNpdGV0aXRsZT4KKyAgICAgIEFjY2VzcyBGbGFnczwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMKKyAgICAgIGFuIGFyYml0cmFyeSBsb25nIGludGVnZXIgdmFsdWUgZm9yIHRoaXMgcmVjb3JkLiBXaGVuIHVzaW5nCisgICAgICBnZW5lcmljIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4sCisgICAgICA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+cHV0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzLCB5b3UgY2FuIHBhc3MgYSB2YWx1ZSAKKyAgICAgIHRocm91Z2ggdGhpcyBmaWVsZC4gSWYgc2V2ZXJhbCBzbWFsbCBudW1iZXJzIGFyZSBuZWNlc3NhcnksIHlvdSBjYW4KKyAgICAgIGNvbWJpbmUgdGhlbSBpbiBiaXR3aXNlLiBPciwgaXQncyBwb3NzaWJsZSB0byBnaXZlIGEgcG9pbnRlcgorICAgICAgKGNhc3RlZCB0byB1bnNpZ25lZCBsb25nKSBvZiBzb21lIHJlY29yZCB0byB0aGlzIGZpZWxkLCB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG90aGVyIHRocmVlIGFyZQorCTxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcyI+PGNpdGV0aXRsZT4KKwljYWxsYmFjayBmdW5jdGlvbnM8L2NpdGV0aXRsZT48L2xpbms+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzIj4KKyAgICAgIDx0aXRsZT5Db250cm9sIE5hbWVzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgc29tZSBzdGFuZGFyZHMgZm9yIGRlZmluaW5nIHRoZSBjb250cm9sIG5hbWVzLiBBCisgICAgICBjb250cm9sIGlzIHVzdWFsbHkgZGVmaW5lZCBmcm9tIHRoZSB0aHJlZSBwYXJ0cyBhcworICAgICAgPHF1b3RlPlNPVVJDRSBESVJFQ1RJT04gRlVOQ1RJT048L3F1b3RlPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlyc3QsIDxjb25zdGFudD5TT1VSQ0U8L2NvbnN0YW50Piwgc3BlY2lmaWVzIHRoZSBzb3VyY2UKKyAgICAgIG9mIHRoZSBjb250cm9sLCBhbmQgaXMgYSBzdHJpbmcgc3VjaCBhcyA8cXVvdGU+TWFzdGVyPC9xdW90ZT4sCisgICAgICA8cXVvdGU+UENNPC9xdW90ZT4sIDxxdW90ZT5DRDwvcXVvdGU+IG9yCisgICAgICA8cXVvdGU+TGluZTwvcXVvdGU+LiBUaGVyZSBhcmUgbWFueSBwcmUtZGVmaW5lZCBzb3VyY2VzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBzZWNvbmQsIDxjb25zdGFudD5ESVJFQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+UGxheWJhY2s8L3F1b3RlPiwgPHF1b3RlPkNhcHR1cmU8L3F1b3RlPiwgPHF1b3RlPkJ5cGFzcworICAgICAgUGxheWJhY2s8L3F1b3RlPiBhbmQgPHF1b3RlPkJ5cGFzcyBDYXB0dXJlPC9xdW90ZT4uIE9yLCBpdCBjYW4KKyAgICAgIGJlIG9taXR0ZWQsIG1lYW5pbmcgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCwgPGNvbnN0YW50PkZVTkNUSU9OPC9jb25zdGFudD4sIGlzIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+U3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Wb2x1bWU8L3F1b3RlPiBhbmQKKyAgICAgIDxxdW90ZT5Sb3V0ZTwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGFtcGxlIG9mIGNvbnRyb2wgbmFtZXMgYXJlLCB0aHVzLCA8cXVvdGU+TWFzdGVyIENhcHR1cmUKKyAgICAgIFN3aXRjaDwvcXVvdGU+IG9yIDxxdW90ZT5QQ00gUGxheWJhY2sgVm9sdW1lPC9xdW90ZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9uczoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtZ2xvYmFsIj4KKyAgICAgICAgPHRpdGxlPkdsb2JhbCBjYXB0dXJlIGFuZCBwbGF5YmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxxdW90ZT5DYXB0dXJlIFNvdXJjZTwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZSBTd2l0Y2g8L3F1b3RlPgorICAgICAgICBhbmQgPHF1b3RlPkNhcHR1cmUgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwKKyAgICAgICAgY2FwdHVyZSAoaW5wdXQpIHNvdXJjZSwgc3dpdGNoIGFuZCB2b2x1bWUuIFNpbWlsYXJseSwKKyAgICAgICAgPHF1b3RlPlBsYXliYWNrIFN3aXRjaDwvcXVvdGU+IGFuZCA8cXVvdGU+UGxheWJhY2sKKyAgICAgICAgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwgb3V0cHV0IGdhaW4gc3dpdGNoIGFuZAorICAgICAgICB2b2x1bWUuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLXRvbmUiPgorICAgICAgICA8dGl0bGU+VG9uZS1jb250cm9sczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRvbmUtY29udHJvbCBzd2l0Y2ggYW5kIHZvbHVtZXMgYXJlIHNwZWNpZmllZCBsaWtlCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+VG9uZSBDb250cm9sIC0KKyAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBCYXNzPC9xdW90ZT4sCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBDZW50ZXI8L3F1b3RlPi4gIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLTNkIj4KKyAgICAgICAgPHRpdGxlPjNEIGNvbnRyb2xzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgM0QtY29udHJvbCBzd2l0Y2hlcyBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UgPHF1b3RlPjNECisgICAgICAgIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+M0QgQ29udHJvbCAtCisgICAgICAgIFN3aXRjaDwvcXVvdGU+LCA8cXVvdGU+M0QgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LCA8cXVvdGU+M0QKKyAgICAgICAgQ29udHJvbCAtIFNwYWNlPC9xdW90ZT4uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLW1pYyI+CisgICAgICAgIDx0aXRsZT5NaWMgYm9vc3Q8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNaWMtYm9vc3Qgc3dpdGNoIGlzIHNldCBhcyA8cXVvdGU+TWljIEJvb3N0PC9xdW90ZT4gb3IKKyAgICAgICAgPHF1b3RlPk1pYyBCb29zdCAoNmRCKTwvcXVvdGU+LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4KKyAgICAgICAgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5BY2Nlc3MgRmxhZ3M8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBhY2Nlc3MgZmxhZyBpcyB0aGUgYml0LWZsYWdzIHdoaWNoIHNwZWNpZmllcyB0aGUgYWNjZXNzIHR5cGUKKyAgICAgIG9mIHRoZSBnaXZlbiBjb250cm9sLiAgVGhlIGRlZmF1bHQgYWNjZXNzIHR5cGUgaXMKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFPC9jb25zdGFudD4sIAorICAgICAgd2hpY2ggbWVhbnMgYm90aCByZWFkIGFuZCB3cml0ZSBhcmUgYWxsb3dlZCB0byB0aGlzIGNvbnRyb2wuCisgICAgICBXaGVuIHRoZSBhY2Nlc3MgZmxhZyBpcyBvbWl0dGVkIChpLmUuID0gMCksIGl0IGlzCisgICAgICByZWdhcmRlZCBhcyA8Y29uc3RhbnQ+UkVBRFdSSVRFPC9jb25zdGFudD4gYWNjZXNzIGFzIGRlZmF1bHQuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFdoZW4gdGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LCBwYXNzCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQ8L2NvbnN0YW50PiBpbnN0ZWFkLgorICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgZG9uJ3QgaGF2ZSB0byBkZWZpbmUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKyAgICAgIFNpbWlsYXJseSwgd2hlbiB0aGUgY29udHJvbCBpcyB3cml0ZS1vbmx5IChhbHRob3VnaCBpdCdzIGEgcmFyZQorICAgICAgY2FzZSksIHlvdSBjYW4gdXNlIDxjb25zdGFudD5XUklURTwvY29uc3RhbnQ+IGZsYWcgaW5zdGVhZCwgYW5kCisgICAgICB5b3UgZG9uJ3QgbmVlZCA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgSWYgdGhlIGNvbnRyb2wgdmFsdWUgY2hhbmdlcyBmcmVxdWVudGx5IChlLmcuIHRoZSBWVSBtZXRlciksCisgICAgICA8Y29uc3RhbnQ+Vk9MQVRJTEU8L2NvbnN0YW50PiBmbGFnIHNob3VsZCBiZSBnaXZlbi4gIFRoaXMgbWVhbnMKKyAgICAgIHRoYXQgdGhlIGNvbnRyb2wgbWF5IGJlIGNoYW5nZWQgd2l0aG91dAorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2hhbmdlLW5vdGlmaWNhdGlvbiI+PGNpdGV0aXRsZT4KKyAgICAgIG5vdGlmaWNhdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uICBBcHBsaWNhdGlvbnMgc2hvdWxkIHBvbGwgc3VjaAorICAgICAgYSBjb250cm9sIGNvbnN0YW50bHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY29udHJvbCBpcyBpbmFjdGl2ZSwgc2V0CisgICAgICA8Y29uc3RhbnQ+SU5BQ1RJVkU8L2NvbnN0YW50PiBmbGFnLCB0b28uCisgICAgICBUaGVyZSBhcmUgPGNvbnN0YW50PkxPQ0s8L2NvbnN0YW50PiBhbmQKKyAgICAgIDxjb25zdGFudD5PV05FUjwvY29uc3RhbnQ+IGZsYWdzIGZvciBjaGFuZ2luZyB0aGUgd3JpdGUKKyAgICAgIHBlcm1pc3Npb25zLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1pbmZvIj4KKyAgICAgICAgPHRpdGxlPmluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIGdldAorICAgICAgICB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb2YgdGhpcyBjb250cm9sLiBUaGlzIG11c3Qgc3RvcmUgdGhlCisgICAgICAgIHZhbHVlcyBvZiB0aGUgZ2l2ZW4gPHR5cGU+c25kX2N0bF9lbGVtX2luZm9fdDwvdHlwZT4KKyAgICAgICAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgZm9yIGEgYm9vbGVhbiBjb250cm9sIHdpdGggYSBzaW5nbGUKKyAgICAgICAgZWxlbWVudCB3aWxsIGJlOiAKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBpbmZvIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9pbmZvKHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX2luZm9fdCAqdWluZm8pCisgIHsKKyAgICAgICAgICB1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKyAgICAgICAgICB1aW5mby0+Y291bnQgPSAxOworICAgICAgICAgIHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgdHlwZQorICAgICAgICBvZiB0aGUgY29udHJvbC4gVGhlcmUgYXJlIDxjb25zdGFudD5CT09MRUFOPC9jb25zdGFudD4sCisgICAgICAgIDxjb25zdGFudD5JTlRFR0VSPC9jb25zdGFudD4sIDxjb25zdGFudD5FTlVNRVJBVEVEPC9jb25zdGFudD4sCisgICAgICAgIDxjb25zdGFudD5CWVRFUzwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+SUVDOTU4PC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5JTlRFR0VSNjQ8L2NvbnN0YW50Pi4gVGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgCisgICAgICAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGNvbnRyb2wuIEZvciBleGFtcGxlLCBhIHN0ZXJlbworICAgICAgICB2b2x1bWUgd291bGQgaGF2ZSBjb3VudCA9IDIuIFRoZQorICAgICAgICA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBhIHVuaW9uLCBhbmQgCisgICAgICAgIHRoZSB2YWx1ZXMgc3RvcmVkIGFyZSBkZXBlbmRpbmcgb24gdGhlIHR5cGUuIFRoZSBib29sZWFuIGFuZAorICAgICAgICBpbnRlZ2VyIGFyZSBpZGVudGljYWwuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGVudW1lcmF0ZWQgdHlwZSBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSBvdGhlcnMuICBZb3UnbGwKKyAgICAgICAgICBuZWVkIHRvIHNldCB0aGUgc3RyaW5nIGZvciB0aGUgY3VycmVudGx5IGdpdmVuIGl0ZW0gaW5kZXguIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9pbmZvKHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX2luZm9fdCAqdWluZm8pCisgIHsKKyAgICAgICAgICBzdGF0aWMgY2hhciAqdGV4dHNbNF0gPSB7CisgICAgICAgICAgICAgICAgICAiRmlyc3QiLCAiU2Vjb25kIiwgIlRoaXJkIiwgIkZvdXJ0aCIKKyAgICAgICAgICB9OworICAgICAgICAgIHVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworICAgICAgICAgIHVpbmZvLT5jb3VudCA9IDE7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA0OworICAgICAgICAgIGlmICh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID4gMykKKyAgICAgICAgICAgICAgICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAzOworICAgICAgICAgIHN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorICAgICAgICAgICAgICAgICB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWdldCI+CisgICAgICAgIDx0aXRsZT5nZXQgY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorICAgICAgICBjb250cm9sIGFuZCB0byByZXR1cm4gdG8gdGhlIHVzZXItc3BhY2UuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkV4YW1wbGUgb2YgZ2V0IGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9nZXQoc25kX2tjb250cm9sX3QgKmtjb250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnVjb250cm9sKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBnZXRfc29tZV92YWx1ZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEhlcmUsIHRoZSBjaGlwIGluc3RhbmNlIGlzIHJldHJpZXZlZCB2aWEKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9rY29udHJvbF9jaGlwKCk8L2Z1bmN0aW9uPiBtYWNyby4gIFRoaXMgbWFjcm8KKyAgICAgICAgY29udmVydHMgZnJvbSBrY29udHJvbC0mZ3Q7cHJpdmF0ZV9kYXRhIHRvIHRoZSB0eXBlIGRlZmluZWQgYnkKKyAgICAgICAgPHR5cGU+Y2hpcF90PC90eXBlPi4gVGhlCisgICAgICAgIGtjb250cm9sLSZndDtwcml2YXRlX2RhdGEgZmllbGQgaXMgCisgICAgICAgIGdpdmVuIGFzIHRoZSBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2N0bF9uZXcoKTwvZnVuY3Rpb24+CisgICAgICAgIChzZWUgdGhlIGxhdGVyIHN1YnNlY3Rpb24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY29uc3RydWN0b3IiPjxjaXRldGl0bGU+Q29uc3RydWN0b3I8L2NpdGV0aXRsZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCVRoZSA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBkZXBlbmRpbmcgb24KKyAgICAgICAgdGhlIHR5cGUgb2YgY29udHJvbCBhcyB3ZWxsIGFzIG9uIGluZm8gY2FsbGJhY2suICBGb3IgZXhhbXBsZSwKKwl0aGUgc2IgZHJpdmVyIHVzZXMgdGhpcyBmaWVsZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LAorICAgICAgICB0aGUgYml0LXNoaWZ0IGFuZCB0aGUgYml0LW1hc2suICBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWU8L3N0cnVjdGZpZWxkPiBpcyBzZXQgbGlrZQorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgLnByaXZhdGVfdmFsdWUgPSByZWcgfCAoc2hpZnQgPDwgMTYpIHwgKG1hc2sgPDwgMjQpCitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJYW5kIGlzIHJldHJpZXZlZCBpbiBjYWxsYmFja3MgbGlrZQorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfc2JtaXhlcl9nZXRfc2luZ2xlKHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp1Y29udHJvbCkKKyAgeworICAgICAgICAgIGludCByZWcgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisgICAgICAgICAgaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisgICAgICAgICAgaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMjQpICYgMHhmZjsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssIHlvdSBoYXZlIHRvIGZpbGwgYWxsIHRoZSBlbGVtZW50cyBpZiB0aGUKKyAgICAgICAgY29udHJvbCBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50cywKKyAgICAgICAgaS5lLiA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiAmZ3Q7IDEuCisJSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHdlIGZpbGxlZCBvbmx5IG9uZSBlbGVtZW50CisgICAgICAgICg8c3RydWN0ZmllbGQ+dmFsdWUuaW50ZWdlci52YWx1ZVswXTwvc3RydWN0ZmllbGQ+KSBzaW5jZSBpdCdzCisgICAgICAgIGFzc3VtZWQgYXMgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gPSAxLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MtcHV0Ij4KKyAgICAgICAgPHRpdGxlPnB1dCBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIHdyaXRlIGEgdmFsdWUgZnJvbSB0aGUgdXNlci1zcGFjZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEZvciBleGFtcGxlLAorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5FeGFtcGxlIG9mIHB1dCBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfbXljdGxfcHV0KHNuZF9rY29udHJvbF90ICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp1Y29udHJvbCkKKyAgeworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworICAgICAgICAgIGludCBjaGFuZ2VkID0gMDsKKyAgICAgICAgICBpZiAoY2hpcC0+Y3VycmVudF92YWx1ZSAhPQorICAgICAgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKKyAgICAgICAgICAgICAgICAgIGNoYW5nZV9jdXJyZW50X3ZhbHVlKGNoaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2V4YW1wbGU+CisKKyAgICAgICAgICBBcyBzZWVuIGFib3ZlLCB5b3UgaGF2ZSB0byByZXR1cm4gMSBpZiB0aGUgdmFsdWUgaXMKKyAgICAgICAgY2hhbmdlZC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBjaGFuZ2VkLCByZXR1cm4gMCBpbnN0ZWFkLiAKKwlJZiBhbnkgZmF0YWwgZXJyb3IgaGFwcGVucywgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBhcworICAgICAgICB1c3VhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCUxpa2UgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLAorCXdoZW4gdGhlIGNvbnRyb2wgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudHMsCisJYWxsIGVsZW1laHRzIG11c3QgYmUgZXZhbHVhdGVkIGluIHRoaXMgY2FsbGJhY2ssIHRvby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWFsbCI+CisgICAgICAgIDx0aXRsZT5DYWxsYmFja3MgYXJlIG5vdCBhdG9taWM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbGwgdGhlc2UgdGhyZWUgY2FsbGJhY2tzIGFyZSBiYXNpY2FsbHkgbm90IGF0b21pYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gZXZlcnl0aGluZyBpcyByZWFkeSwgZmluYWxseSB3ZSBjYW4gY3JlYXRlIGEgbmV3CisgICAgICBjb250cm9sLiBGb3IgY3JlYXRpbmcgYSBjb250cm9sLCB0aGVyZSBhcmUgdHdvIGZ1bmN0aW9ucyB0byBiZQorICAgICAgY2FsbGVkLCA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX2FkZCgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIHNpbXBsZXN0IHdheSwgeW91IGNhbiBkbyBsaWtlIHRoaXM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJm15X2NvbnRyb2wsIGNoaXApKSkgPCAwKQorICAgICAgICAgIHJldHVybiBlcnI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPm15X2NvbnRyb2w8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICA8dHlwZT5zbmRfa2NvbnRyb2xfbmV3X3Q8L3R5cGU+IG9iamVjdCBkZWZpbmVkIGFib3ZlLCBhbmQgY2hpcAorICAgICAgaXMgdGhlIG9iamVjdCBwb2ludGVyIHRvIGJlIHBhc3NlZCB0bworICAgICAga2NvbnRyb2wtJmd0O3ByaXZhdGVfZGF0YSAKKyAgICAgIHdoaWNoIGNhbiBiZSByZWZlcnJlZCBpbiBjYWxsYmFja3MuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfbmV3MSgpPC9mdW5jdGlvbj4gYWxsb2NhdGVzIGEgbmV3CisgICAgICA8dHlwZT5zbmRfa2NvbnRyb2xfdDwvdHlwZT4gaW5zdGFuY2UgKHRoYXQncyB3aHkgdGhlIGRlZmluaXRpb24KKyAgICAgIG9mIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBjYW4gYmUgd2l0aAorICAgICAgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IAorICAgICAgcHJlZml4KSwgYW5kIDxmdW5jdGlvbj5zbmRfY3RsX2FkZDwvZnVuY3Rpb24+IGFzc2lnbnMgdGhlIGdpdmVuCisgICAgICBjb250cm9sIGNvbXBvbmVudCB0byB0aGUgY2FyZC4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNoYW5nZS1ub3RpZmljYXRpb24iPgorICAgICAgPHRpdGxlPkNoYW5nZSBOb3RpZmljYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBhbmQgdXBkYXRlIGEgY29udHJvbCBpbiB0aGUgaW50ZXJydXB0CisgICAgICByb3V0aW5lLCB5b3UgY2FuIGNhbGwgPGZ1bmN0aW9uPnNuZF9jdGxfbm90aWZ5KCk8L2Z1bmN0aW9uPi4gRm9yCisgICAgICBleGFtcGxlLCAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfY3RsX25vdGlmeShjYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgaWRfcG9pbnRlcik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBldmVudC1tYXNrLCBhbmQgdGhlCisgICAgICBjb250cm9sIGlkIHBvaW50ZXIgZm9yIHRoZSBub3RpZmljYXRpb24uIFRoZSBldmVudC1tYXNrCisgICAgICBzcGVjaWZpZXMgdGhlIHR5cGVzIG9mIG5vdGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGluIHRoZSBhYm92ZQorICAgICAgZXhhbXBsZSwgdGhlIGNoYW5nZSBvZiBjb250cm9sIHZhbHVlcyBpcyBub3RpZmllZC4KKyAgICAgIFRoZSBpZCBwb2ludGVyIGlzIHRoZSBwb2ludGVyIG9mIDx0eXBlPnNuZF9jdGxfZWxlbV9pZF90PC90eXBlPgorICAgICAgdG8gYmUgbm90aWZpZWQuCisgICAgICBZb3UgY2FuIGZpbmQgc29tZSBleGFtcGxlcyBpbiA8ZmlsZW5hbWU+ZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgorICAgICAgPGZpbGVuYW1lPmVzMTk2OC5jPC9maWxlbmFtZT4gZm9yIGhhcmR3YXJlIHZvbHVtZSBpbnRlcnJ1cHRzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBBUEkgZm9yIEFDOTcgQ29kZWMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJhcGktYWM5NyI+CisgICAgPHRpdGxlPkFQSSBmb3IgQUM5NyBDb2RlYzwvdGl0bGU+CisKKyAgICA8c2VjdGlvbj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgQUxTQSBBQzk3IGNvZGVjIGxheWVyIGlzIGEgd2VsbC1kZWZpbmVkIG9uZSwgYW5kIHlvdSBkb24ndAorICAgICAgaGF2ZSB0byB3cml0ZSBtYW55IGNvZGVzIHRvIGNvbnRyb2wgaXQuIE9ubHkgbG93LWxldmVsIGNvbnRyb2wKKyAgICAgIHJvdXRpbmVzIGFyZSBuZWNlc3NhcnkuIFRoZSBBQzk3IGNvZGVjIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2FjOTdfY29kZWMuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBBQzk3IEludGVyZmFjZTwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9teWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBhYzk3X3QgKmFjOTc7CisgICAgICAgICAgLi4uLgorICB9OworCisgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzbmRfbXljaGlwX2FjOTdfcmVhZChhYzk3X3QgKmFjOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLy8gcmVhZCBhIHJlZ2lzdGVyIHZhbHVlIGhlcmUgZnJvbSB0aGUgY29kZWMKKyAgICAgICAgICByZXR1cm4gdGhlX3JlZ2lzdGVyX3ZhbHVlOworICB9CisKKyAgc3RhdGljIHZvaWQgc25kX215Y2hpcF9hYzk3X3dyaXRlKGFjOTdfdCAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCisgIHsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLy8gd3JpdGUgdGhlIGdpdmVuIHJlZ2lzdGVyIHZhbHVlIHRvIHRoZSBjb2RlYworICB9CisKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2FjOTcobXljaGlwX3QgKmNoaXApCisgIHsKKyAgICAgICAgICBhYzk3X2J1c190ICpidXM7CisgICAgICAgICAgYWM5N190ZW1wbGF0ZV90IGFjOTc7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgYWM5N19idXNfb3BzX3Qgb3BzID0geworICAgICAgICAgICAgICAgICAgLndyaXRlID0gc25kX215Y2hpcF9hYzk3X3dyaXRlLAorICAgICAgICAgICAgICAgICAgLnJlYWQgPSBzbmRfbXljaGlwX2FjOTdfcmVhZCwKKyAgICAgICAgICB9OworCisgICAgICAgICAgaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOworICAgICAgICAgIGFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gc25kX2FjOTdfbWl4ZXIoYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOworICB9CisKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgY3JlYXRpbmcgYW4gYWM5NyBpbnN0YW5jZSwgZmlyc3QgY2FsbCA8ZnVuY3Rpb24+c25kX2FjOTdfYnVzPC9mdW5jdGlvbj4KKyAgICAgIHdpdGggYW4gPHR5cGU+YWM5N19idXNfb3BzX3Q8L3R5cGU+IHJlY29yZCB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBhYzk3X2J1c190ICpidXM7CisgIHN0YXRpYyBhYzk3X2J1c19vcHNfdCBvcHMgPSB7CisgICAgICAgIC53cml0ZSA9IHNuZF9teWNoaXBfYWM5N193cml0ZSwKKyAgICAgICAgLnJlYWQgPSBzbmRfbXljaGlwX2FjOTdfcmVhZCwKKyAgfTsKKworICBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgTlVMTCwgJnBidXMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgIFRoZSBidXMgcmVjb3JkIGlzIHNoYXJlZCBhbW9uZyBhbGwgYmVsb25naW5nIGFjOTcgaW5zdGFuY2VzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFuZCB0aGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X21peGVyKCk8L2Z1bmN0aW9uPiB3aXRoIGFuIDx0eXBlPmFjOTdfdGVtcGxhdGVfdDwvdHlwZT4KKyAgICAgIHJlY29yZCB0b2dldGhlciB3aXRoIHRoZSBidXMgcG9pbnRlciBjcmVhdGVkIGFib3ZlLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGFjOTdfdGVtcGxhdGVfdCBhYzk3OworICBpbnQgZXJyOworCisgIG1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKyAgYWM5Ny5wcml2YXRlX2RhdGEgPSBjaGlwOworICBzbmRfYWM5N19taXhlcihidXMsICZhYzk3LCAmY2hpcC0+YWM5Nyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSBjaGlwLSZndDthYzk3IGlzIHRoZSBwb2ludGVyIG9mIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICA8dHlwZT5hYzk3X3Q8L3R5cGU+IGluc3RhbmNlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjaGlwIHBvaW50ZXIgaXMgc2V0IGFzIHRoZSBwcml2YXRlIGRhdGEsIHNvIHRoYXQKKyAgICAgICAgdGhlIHJlYWQvd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb25zIGNhbiByZWZlciB0byB0aGlzIGNoaXAgaW5zdGFuY2UuCisgICAgICAgIFRoaXMgaW5zdGFuY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3JlZCBpbiB0aGUgY2hpcAorCXJlY29yZC4gIFdoZW4geW91IG5lZWQgdG8gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZXMgZnJvbSB0aGUKKyAgICAgICAgZHJpdmVyLCBvciBuZWVkIHRoZSBzdXNwZW5kL3Jlc3VtZSBvZiBhYzk3IGNvZGVjcywga2VlcCB0aGlzCisgICAgICAgIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgc3RhbmRhcmQgY2FsbGJhY2tzIGFyZSA8c3RydWN0ZmllbGQ+cmVhZDwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4uIE9idmlvdXNseSB0aGV5IAorICAgICAgY29ycmVzcG9uZCB0byB0aGUgZnVuY3Rpb25zIGZvciByZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyB0byB0aGUKKyAgICAgIGhhcmR3YXJlIGxvdy1sZXZlbCBjb2Rlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnJlYWQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayByZXR1cm5zIHRoZQorICAgICAgICByZWdpc3RlciB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGFyZ3VtZW50LiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX215Y2hpcF9hYzk3X3JlYWQoYWM5N190ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQorICB7CisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiB0aGVfcmVnaXN0ZXJfdmFsdWU7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEhlcmUsIHRoZSBjaGlwIGNhbiBiZSBjYXN0IGZyb20gYWM5Ny0mZ3Q7cHJpdmF0ZV9kYXRhLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTWVhbndoaWxlLCB0aGUgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMKKyAgICAgICAgdXNlZCB0byBzZXQgdGhlIHJlZ2lzdGVyIHZhbHVlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfbXljaGlwX2FjOTdfd3JpdGUoYWM5N190ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm9uLWF0b21pYyBsaWtlIHRoZSBjYWxsYmFja3Mgb2YgY29udHJvbCBBUEkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgYWxzbyBvdGhlciBjYWxsYmFja3M6CisgICAgICA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD53YWl0PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+aW5pdDwvc3RydWN0ZmllbGQ+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIHJlc2V0CisgICAgICB0aGUgY29kZWMuIElmIHRoZSBjaGlwIHJlcXVpcmVzIGEgc3BlY2lhbCB3YXkgb2YgcmVzZXQsIHlvdSBjYW4KKyAgICAgIGRlZmluZSB0aGlzIGNhbGxiYWNrLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+d2FpdDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgZm9yIGEKKyAgICAgIGNlcnRhaW4gd2FpdCBhdCB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLiBJZiB0aGUKKyAgICAgIGNoaXAgcmVxdWlyZXMgdGhlIGV4dHJhIHdhaXQtdGltZSwgZGVmaW5lIHRoaXMgY2FsbGJhY2suIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdXNlZCBmb3IKKyAgICAgIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny11cGRhdGluZy1yZWdpc3RlcnMiPgorICAgICAgPHRpdGxlPlVwZGF0aW5nIFJlZ2lzdGVycyBpbiBUaGUgRHJpdmVyPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdG8gdGhlIGNvZGVjIGZyb20gdGhlIGRyaXZlciwgeW91IGNhbgorICAgICAgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4sCisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVhZCgpPC9mdW5jdGlvbj4sCisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGVfYml0cygpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQm90aCA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+IGFuZAorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8KKyAgICAgICAgc2V0IGEgdmFsdWUgdG8gdGhlIGdpdmVuIHJlZ2lzdGVyCisgICAgICAgICg8Y29uc3RhbnQ+QUM5N19YWFg8L2NvbnN0YW50PikuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcworICAgICAgICB0aGF0IDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGUoKTwvZnVuY3Rpb24+IGRvZXNuJ3Qgd3JpdGUgYQorICAgICAgICB2YWx1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaGFzIGJlZW4gYWxyZWFkeSBzZXQsIHdoaWxlCisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzIHJld3JpdGVzIHRoZQorICAgICAgICB2YWx1ZS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19NQVNURVIsIDB4ODA4MCk7CisgIHNuZF9hYzk3X3VwZGF0ZShhYzk3LCBBQzk3X01BU1RFUiwgMHg4MDgwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3JlYWQoKTwvZnVuY3Rpb24+IGlzIHVzZWQgdG8gcmVhZCB0aGUgdmFsdWUKKyAgICAgICAgb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLiBGb3IgZXhhbXBsZSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdmFsdWUgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfTUFTVEVSKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZV9iaXRzKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIHRvIHVwZGF0ZQorICAgICAgICBzb21lIGJpdHMgb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLiAgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5NywgcmVnLCBtYXNrLCB2YWx1ZSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFsc28sIHRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBzYW1wbGUgcmF0ZSAob2YgYQorICAgICAgICBjZXJ0YWluIHJlZ2lzdGVyIHN1Y2ggYXMKKyAgICAgICAgPGNvbnN0YW50PkFDOTdfUENNX0ZST05UX0RBQ19SQVRFPC9jb25zdGFudD4pIHdoZW4gVlJBIG9yCisgICAgICAgIERSQSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNvZGVjOgorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfc2V0X3JhdGUoKTwvZnVuY3Rpb24+LiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfYWM5N19zZXRfcmF0ZShhYzk3LCBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURSwgNDQxMDApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgYXZhaWxhYmxlIGZvciBzZXR0aW5nIHRoZSByYXRlOgorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX01JQ19BRENfUkFURTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX0ZST05UX0RBQ19SQVRFPC9jb25zdGFudD4sCisgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTFJfQURDX1JBVEU8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4uIFdoZW4gdGhlCisgICAgICA8Y29uc3RhbnQ+QUM5N19TUERJRjwvY29uc3RhbnQ+IGlzIHNwZWNpZmllZCwgdGhlIHJlZ2lzdGVyIGlzCisgICAgICBub3QgcmVhbGx5IGNoYW5nZWQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIElFQzk1OCBzdGF0dXMgYml0cyB3aWxsCisgICAgICBiZSB1cGRhdGVkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY2xvY2stYWRqdXN0bWVudCI+CisgICAgICA8dGl0bGU+Q2xvY2sgQWRqdXN0bWVudDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgT24gc29tZSBjaGlwLCB0aGUgY2xvY2sgb2YgdGhlIGNvZGVjIGlzbid0IDQ4MDAwIGJ1dCB1c2luZyBhCisgICAgICBQQ0kgY2xvY2sgKHRvIHNhdmUgYSBxdWFydHohKS4gSW4gdGhpcyBjYXNlLCBjaGFuZ2UgdGhlIGZpZWxkCisgICAgICBidXMtJmd0O2Nsb2NrIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICB2YWx1ZS4gRm9yIGV4YW1wbGUsIGludGVsOHgwIAorICAgICAgYW5kIGVzMTk2OCBkcml2ZXJzIGhhdmUgdGhlIGF1dG8tbWVhc3VyZW1lbnQgZnVuY3Rpb24gb2YgdGhlCisgICAgICBjbG9jay4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LXByb2MtZmlsZXMiPgorICAgICAgPHRpdGxlPlByb2MgRmlsZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIEFDOTcgaW50ZXJmYWNlIHdpbGwgY3JlYXRlIGEgcHJvYyBmaWxlIHN1Y2ggYXMKKyAgICAgIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvY29kZWM5NyMwL2FjOTcjMC0wPC9maWxlbmFtZT4gYW5kCisgICAgICA8ZmlsZW5hbWU+YWM5NyMwLTArcmVnczwvZmlsZW5hbWU+LiBZb3UgY2FuIHJlZmVyIHRvIHRoZXNlIGZpbGVzIHRvCisgICAgICBzZWUgdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWdpc3RlcnMgb2YgdGhlIGNvZGVjLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctbXVsdGlwbGUtY29kZWNzIj4KKyAgICAgIDx0aXRsZT5NdWx0aXBsZSBDb2RlY3M8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlcmUgYXJlIHNldmVyYWwgY29kZWNzIG9uIHRoZSBzYW1lIGNhcmQsIHlvdSBuZWVkIHRvCisgICAgICBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19uZXcoKTwvZnVuY3Rpb24+IG11bHRpcGxlIHRpbWVzIHdpdGgKKyAgICAgIGFjOTcubnVtPTEgb3IgZ3JlYXRlci4gVGhlIDxzdHJ1Y3RmaWVsZD5udW08L3N0cnVjdGZpZWxkPiBmaWVsZAorICAgICAgc3BlY2lmaWVzIHRoZSBjb2RlYyAKKyAgICAgIG51bWJlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgaGF2ZSBzZXQgdXAgbXVsdGlwbGUgY29kZWNzLCB5b3UgbmVlZCB0byBlaXRoZXIgd3JpdGUKKyAgICAgIGRpZmZlcmVudCBjYWxsYmFja3MgZm9yIGVhY2ggY29kZWMgb3IgY2hlY2sKKyAgICAgIGFjOTctJmd0O251bSBpbiB0aGUgCisgICAgICBjYWxsYmFjayByb3V0aW5lcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTUlESSAoTVBVNDAxLVVBUlQpIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9Im1pZGktaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+TUlESSAoTVBVNDAxLVVBUlQpIEludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlkaS1pbnRlcmZhY2UtZ2VuZXJhbCI+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgTWFueSBzb3VuZGNhcmRzIGhhdmUgYnVpbHQtaW4gTUlESSAoTVBVNDAxLVVBUlQpCisgICAgICBpbnRlcmZhY2VzLiBXaGVuIHRoZSBzb3VuZGNhcmQgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE1QVTQwMS1VQVJUCisgICAgICBpbnRlcmZhY2UsIG1vc3QgbGlrZWx5IHlvdSBjYW4gdXNlIHRoZSBBTFNBIE1QVTQwMS1VQVJUIEFQSS4gVGhlCisgICAgICBNUFU0MDEtVUFSVCBBUEkgaXMgZGVmaW5lZCBpbgorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9tcHU0MDEuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIHNvdW5kY2hpcHMgaGF2ZSBzaW1pbGFyIGJ1dCBhIGxpdHRsZSBiaXQgZGlmZmVyZW50CisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBtcHU0MDEgc3R1ZmYuIEZvciBleGFtcGxlLCBlbXUxMGsxIGhhcyBpdHMgb3duCisgICAgICBtcHU0MDEgcm91dGluZXMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyBhIHJhd21pZGkgb2JqZWN0LCBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9yYXdtaWRpX3QgKnJtaWRpOworICBzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsIE1QVTQwMV9IV19NUFU0MDEsIHBvcnQsIGludGVncmF0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgaXJxLCBpcnFfZmxhZ3MsICZybWlkaSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUKKyAgICAgIGluZGV4IG9mIHRoaXMgY29tcG9uZW50LiBZb3UgY2FuIGNyZWF0ZSB1cCB0byA4IHJhd21pZGkKKyAgICAgIGRldmljZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSB0eXBlIG9mIHRoZSBoYXJkd2FyZSwKKyAgICAgIDxjb25zdGFudD5NUFU0MDFfSFdfWFhYPC9jb25zdGFudD4uIElmIGl0J3Mgbm90IGEgc3BlY2lhbCBvbmUsCisgICAgICB5b3UgY2FuIHVzZSA8Y29uc3RhbnQ+TVBVNDAxX0hXX01QVTQwMTwvY29uc3RhbnQ+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA0dGggYXJndW1lbnQgaXMgdGhlIGkvbyBwb3J0IGFkZHJlc3MuIE1hbnkKKyAgICAgIGJhY2t3YXJkLWNvbXBhdGlibGUgTVBVNDAxIGhhcyBhbiBpL28gcG9ydCBzdWNoIGFzIDB4MzMwLiBPciwgaXQKKyAgICAgIG1pZ2h0IGJlIGEgcGFydCBvZiBpdHMgb3duIFBDSSBpL28gcmVnaW9uLiBJdCBkZXBlbmRzIG9uIHRoZQorICAgICAgY2hpcCBkZXNpZ24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgaS9vIHBvcnQgYWRkcmVzcyBhYm92ZSBpcyBhIHBhcnQgb2YgdGhlIFBDSSBpL28KKyAgICAgIHJlZ2lvbiwgdGhlIE1QVTQwMSBpL28gcG9ydCBtaWdodCBoYXZlIGJlZW4gYWxyZWFkeSBhbGxvY2F0ZWQKKyAgICAgIChyZXNlcnZlZCkgYnkgdGhlIGRyaXZlciBpdHNlbGYuIEluIHN1Y2ggYSBjYXNlLCBwYXNzIG5vbi16ZXJvCisgICAgICB0byB0aGUgNXRoIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5pbnRlZ3JhdGVkPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCBwYXNzIDAgdG8gaXQsCisgICAgICBhbmQgCisgICAgICB0aGUgbXB1NDAxLXVhcnQgbGF5ZXIgd2lsbCBhbGxvY2F0ZSB0aGUgaS9vIHBvcnRzIGJ5IGl0c2VsZi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBVc3VhbGx5LCB0aGUgcG9ydCBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIHBvcnQgYW5kCisgICAgICAgIHBvcnQgKyAxIGNvcnJlc3BvbmRzIHRvIHRoZSBkYXRhIHBvcnQuIElmIG5vdCwgeW91IG1heSBjaGFuZ2UKKyAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5jcG9ydDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mCisgICAgICAgIDx0eXBlPm1wdTQwMV90PC90eXBlPiBtYW51YWxseSAKKyAgICAgICAgYWZ0ZXJ3YXJkLiBIb3dldmVyLCA8dHlwZT5tcHU0MDFfdDwvdHlwZT4gcG9pbnRlciBpcyBub3QKKyAgICAgICAgcmV0dXJuZWQgZXhwbGljaXRseSBieQorICAgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIFlvdSBuZWVkIHRvIGNhc3QKKyAgICAgICAgcm1pZGktJmd0O3ByaXZhdGVfZGF0YSB0bworICAgICAgICA8dHlwZT5tcHU0MDFfdDwvdHlwZT4gZXhwbGljaXRseSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXB1NDAxX3QgKm1wdTsKKyAgbXB1ID0gcm1pZGktPnByaXZhdGVfZGF0YTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIGFuZCByZXNldCB0aGUgY3BvcnQgYXMgeW91IGxpa2U6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXB1LT5jcG9ydCA9IG15X293bl9jb250cm9sX3BvcnQ7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA2dGggYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBpcnEgbnVtYmVyIGZvciBVQVJULiBJZiB0aGUgaXJxCisgICAgICBpcyBhbHJlYWR5IGFsbG9jYXRlZCwgcGFzcyAwIHRvIHRoZSA3dGggYXJndW1lbnQKKyAgICAgICg8cGFyYW1ldGVyPmlycV9mbGFnczwvcGFyYW1ldGVyPikuIE90aGVyd2lzZSwgcGFzcyB0aGUgZmxhZ3MKKyAgICAgIGZvciBpcnEgYWxsb2NhdGlvbiAKKyAgICAgICg8Y29uc3RhbnQ+U0FfWFhYPC9jb25zdGFudD4gYml0cykgdG8gaXQsIGFuZCB0aGUgaXJxIHdpbGwgYmUKKyAgICAgIHJlc2VydmVkIGJ5IHRoZSBtcHU0MDEtdWFydCBsYXllci4gSWYgdGhlIGNhcmQgZG9lc24ndCBnZW5lcmF0ZXMKKyAgICAgIFVBUlQgaW50ZXJydXB0cywgcGFzcyAtMSBhcyB0aGUgaXJxIG51bWJlci4gVGhlbiBhIHRpbWVyCisgICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBpbnZva2VkIGZvciBwb2xsaW5nLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlkaS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPgorICAgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRoZSBpbnRlcnJ1cHQgaXMgYWxsb2NhdGVkIGluCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4sIHRoZSBwcml2YXRlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBpcyB1c2VkLCBoZW5jZSB5b3UgZG9uJ3QgaGF2ZSB0byBkbyBub3RoaW5nCisgICAgICBlbHNlIHRoYW4gY3JlYXRpbmcgdGhlIG1wdTQwMSBzdHVmZi4gT3RoZXJ3aXNlLCB5b3UgaGF2ZSB0byBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X2ludGVycnVwdCgpPC9mdW5jdGlvbj4gZXhwbGljaXRseSB3aGVuCisgICAgICBhIFVBUlQgaW50ZXJydXB0IGlzIGludm9rZWQgYW5kIGNoZWNrZWQgaW4geW91ciBvd24gaW50ZXJydXB0CisgICAgICBoYW5kbGVyLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHByaXZhdGVfZGF0YSBvZiB0aGUKKyAgICAgICAgcmV0dXJuZWQgcmF3bWlkaSBvYmplY3QgZnJvbQorICAgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4gYXMgdGhlIHNlY29uZAorICAgICAgICBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X2ludGVycnVwdCgpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoaXJxLCBybWlkaS0+cHJpdmF0ZV9kYXRhLCByZWdzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFJhd01JREkgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icmF3bWlkaS1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5SYXdNSURJIEludGVyZmFjZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3ZlcnZpZXciPgorICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgcmF3IE1JREkgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIGhhcmR3YXJlIE1JREkgcG9ydHMgdGhhdCBjYW4KKyAgICAgIGJlIGFjY2Vzc2VkIGFzIGEgYnl0ZSBzdHJlYW0uICBJdCBpcyBub3QgdXNlZCBmb3Igc3ludGhlc2l6ZXIKKyAgICAgIGNoaXBzIHRoYXQgZG8gbm90IGRpcmVjdGx5IHVuZGVyc3RhbmQgTUlESS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBTFNBIGhhbmRsZXMgZmlsZSBhbmQgYnVmZmVyIG1hbmFnZW1lbnQuICBBbGwgeW91IGhhdmUgdG8gZG8gaXMKKyAgICAgIHRvIHdyaXRlIHNvbWUgY29kZSB0byBtb3ZlIGRhdGEgYmV0d2VlbiB0aGUgYnVmZmVyIGFuZCB0aGUKKyAgICAgIGhhcmR3YXJlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByYXdtaWRpIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3Jhd21pZGkuaCZndDs8L2ZpbGVuYW1lPi4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2UtY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICBUbyBjcmVhdGUgYSByYXdtaWRpIGRldmljZSwgY2FsbCB0aGUKKyAgICAgIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV9uZXc8L2Z1bmN0aW9uPiBmdW5jdGlvbjoKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3Jhd21pZGlfdCAqcm1pZGk7CisgIGVyciA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiTXlNSURJIiwgMCwgb3V0cywgaW5zLCAmcm1pZGkpOworICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICByZXR1cm4gZXJyOworICBybWlkaS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgc3RyY3B5KHJtaWRpLT5uYW1lLCAiTXkgTUlESSIpOworICBybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAorICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8CisgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICB0aGUgSUQgc3RyaW5nLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuICBZb3UgY2FuCisgICAgICBjcmVhdGUgdXAgdG8gOCByYXdtaWRpIGRldmljZXMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIGZvdXJ0aCBhbmQgZmlmdGggYXJndW1lbnRzIGFyZSB0aGUgbnVtYmVyIG9mIG91dHB1dCBhbmQKKyAgICAgIGlucHV0IHN1YnN0cmVhbXMsIHJlc3BlY3RpdmVseSwgb2YgdGhpcyBkZXZpY2UuICAoQSBzdWJzdHJlYW0gaXMKKyAgICAgIHRoZSBlcXVpdmFsZW50IG9mIGEgTUlESSBwb3J0LikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBTZXQgdGhlIDxzdHJ1Y3RmaWVsZD5pbmZvX2ZsYWdzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gc3BlY2lmeQorICAgICAgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlLgorICAgICAgU2V0IDxjb25zdGFudD5TTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUPC9jb25zdGFudD4gaWYgdGhlcmUgaXMKKyAgICAgIGF0IGxlYXN0IG9uZSBvdXRwdXQgcG9ydCwKKyAgICAgIDxjb25zdGFudD5TTkRSVl9SQVdNSURJX0lORk9fSU5QVVQ8L2NvbnN0YW50PiBpZiB0aGVyZSBpcyBhdAorICAgICAgbGVhc3Qgb25lIGlucHV0IHBvcnQsCisgICAgICBhbmQgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19EVVBMRVg8L2NvbnN0YW50PiBpZiB0aGUgZGV2aWNlCisgICAgICBjYW4gaGFuZGxlIG91dHB1dCBhbmQgaW5wdXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBZnRlciB0aGUgcmF3bWlkaSBkZXZpY2UgaXMgY3JlYXRlZCwgeW91IG5lZWQgdG8gc2V0IHRoZQorICAgICAgb3BlcmF0b3JzIChjYWxsYmFja3MpIGZvciBlYWNoIHN1YnN0cmVhbS4gIFRoZXJlIGFyZSBoZWxwZXIKKyAgICAgIGZ1bmN0aW9ucyB0byBzZXQgdGhlIG9wZXJhdG9ycyBmb3IgYWxsIHN1YnN0cmVhbSBvZiBhIGRldmljZToKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmc25kX215bWlkaV9vdXRwdXRfb3BzKTsKKyAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsICZzbmRfbXltaWRpX2lucHV0X29wcyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgb3BlcmF0b3JzIGFyZSB1c3VhbGx5IGRlZmluZWQgbGlrZSB0aGlzOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc25kX3Jhd21pZGlfb3BzX3Qgc25kX215bWlkaV9vdXRwdXRfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgc25kX215bWlkaV9vdXRwdXRfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgIHNuZF9teW1pZGlfb3V0cHV0X2Nsb3NlLAorICAgICAgICAgIC50cmlnZ2VyID0gc25kX215bWlkaV9vdXRwdXRfdHJpZ2dlciwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBleHBsYWluZWQgaW4gdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPjxjaXRldGl0bGU+Q2FsbGJhY2tzPC9jaXRldGl0bGU+PC9saW5rPgorICAgICAgc2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHN1YnN0cmVhbSwgeW91IHNob3VsZCBnaXZlIGVhY2ggb25lIGEKKyAgICAgIHVuaXF1ZSBuYW1lOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworICBzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworICBsaXN0X2Zvcl9lYWNoKGxpc3QsICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMpIHsKKyAgICAgICAgICBzdWJzdHJlYW0gPSBsaXN0X2VudHJ5KGxpc3QsIHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90LCBsaXN0KTsKKyAgICAgICAgICBzcHJpbnRmKHN1YnN0cmVhbS0+bmFtZSwgIk15IE1JREkgUG9ydCAlZCIsIHN1YnN0cmVhbS0+bnVtYmVyICsgMSk7CisgIH0KKyAgLyogc2FtZSBmb3IgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgKi8KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPgorICAgICAgPHRpdGxlPkNhbGxiYWNrczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgSW4gYWxsIGNhbGxiYWNrcywgdGhlIHByaXZhdGUgZGF0YSB0aGF0IHlvdSd2ZSBzZXQgZm9yIHRoZQorICAgICAgcmF3bWlkaSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIGFzCisgICAgICBzdWJzdHJlYW0tJmd0O3JtaWRpLSZndDtwcml2YXRlX2RhdGEuCisgICAgICA8IS0tIDxjb2RlPiBpc24ndCBhdmFpbGFibGUgYmVmb3JlIERvY0Jvb2sgNC4zIC0tPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9ydCwgeW91ciBjYWxsYmFja3MgY2FuIGRldGVybWluZSB0aGUKKyAgICAgIHBvcnQgaW5kZXggZnJvbSB0aGUgc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgZGF0YSBwYXNzZWQgdG8gZWFjaAorICAgICAgY2FsbGJhY2s6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW07CisgIGludCBpbmRleCA9IHN1YnN0cmVhbS0+bnVtYmVyOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC1vcGVuIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgc3Vic3RyZWFtIGlzIG9wZW5lZC4KKyAgICAgICAgWW91IGNhbiBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSBoZXJlLCBidXQgeW91IHNob3VsZCBub3QgeWV0CisgICAgICAgIHN0YXJ0IHRyYW5zbWl0dGluZy9yZWNlaXZpbmcgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtY2xvc2UiPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5jbG9zZTwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgR3Vlc3Mgd2hhdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPm9wZW48L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4KKyAgICAgICAgY2FsbGJhY2tzIG9mIGEgcmF3bWlkaSBkZXZpY2UgYXJlIHNlcmlhbGl6ZWQgd2l0aCBhIG11dGV4LAorICAgICAgICBhbmQgY2FuIHNsZWVwLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC10cmlnZ2VyLW91dCI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBmb3Igb3V0cHV0CisgICAgICBzdWJzdHJlYW1zPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfeHh4X291dHB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIGludCB1cCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2l0aCBhIG5vbnplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPgorICAgICAgICBwYXJhbWV0ZXIgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgaW4gdGhlIHN1YnN0cmVhbSBidWZmZXIgdGhhdAorICAgICAgICBtdXN0IGJlIHRyYW5zbWl0dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRvIHJlYWQgZGF0YSBmcm9tIHRoZSBidWZmZXIsIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWs8L2Z1bmN0aW9uPi4gIEl0IHdpbGwKKyAgICAgICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZDsgdGhpcyB3aWxsIGJlCisgICAgICAgIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUKKyAgICAgICAgZGF0YSBpbiB0aGUgYnVmZmVyLgorICAgICAgICBBZnRlciB0aGUgZGF0YSBoYXMgYmVlbiB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHksIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjazwvZnVuY3Rpb24+IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgZGF0YSBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdW5zaWduZWQgY2hhciBkYXRhOworICB3aGlsZSAoc25kX3Jhd21pZGlfdHJhbnNtaXRfcGVlayhzdWJzdHJlYW0sICZkYXRhLCAxKSA9PSAxKSB7CisgICAgICAgICAgaWYgKG15Y2hpcF90cnlfdG9fdHJhbnNtaXQoZGF0YSkpCisgICAgICAgICAgICAgICAgICBzbmRfcmF3bWlkaV90cmFuc21pdF9hY2soc3Vic3RyZWFtLCAxKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBicmVhazsgLyogaGFyZHdhcmUgRklGTyBmdWxsICovCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIHRoYXQgdGhlIGhhcmR3YXJlIHdpbGwgYWNjZXB0IGRhdGEsIHlvdQorICAgICAgICBjYW4gdXNlIHRoZSA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgICB3aGljaCByZWFkcyBzb21lIGRhdGEgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgYnVmZmVyIGF0IG9uY2U6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB3aGlsZSAobXljaGlwX3RyYW5zbWl0X3Bvc3NpYmxlKCkpIHsKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgICAgICAgICAgaWYgKHNuZF9yYXdtaWRpX3RyYW5zbWl0KHN1YnN0cmVhbSwgJmRhdGEsIDEpICE9IDEpCisgICAgICAgICAgICAgICAgICBicmVhazsgLyogbm8gbW9yZSBkYXRhICovCisgICAgICAgICAgbXljaGlwX3RyYW5zbWl0KGRhdGEpOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGtub3cgYmVmb3JlaGFuZCBob3cgbWFueSBieXRlcyB5b3UgY2FuIGFjY2VwdCwgeW91IGNhbgorICAgICAgICB1c2UgYSBidWZmZXIgc2l6ZSBncmVhdGVyIHRoYW4gb25lIHdpdGggdGhlCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV90cmFuc21pdCo8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgbXVzdCBub3Qgc2xlZXAuICBJZgorICAgICAgICB0aGUgaGFyZHdhcmUgRklGTyBpcyBmdWxsIGJlZm9yZSB0aGUgc3Vic3RyZWFtIGJ1ZmZlciBoYXMgYmVlbgorICAgICAgICBlbXB0aWVkLCB5b3UgaGF2ZSB0byBjb250aW51ZSB0cmFuc21pdHRpbmcgZGF0YSBsYXRlciwgZWl0aGVyCisgICAgICAgIGluIGFuIGludGVycnVwdCBoYW5kbGVyLCBvciB3aXRoIGEgdGltZXIgaWYgdGhlIGhhcmR3YXJlCisgICAgICAgIGRvZXNuJ3QgaGF2ZSBhIE1JREkgdHJhbnNtaXQgaW50ZXJydXB0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEKKyAgICAgICAgemVybyA8cGFyYW1ldGVyPnVwPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciB3aGVuIHRoZSB0cmFuc21pc3Npb24KKyAgICAgICAgb2YgZGF0YSBzaG91bGQgYmUgYWJvcnRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtdHJpZ2dlci1pbiI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBmb3IgaW5wdXQKKyAgICAgIHN1YnN0cmVhbXM8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF94eHhfaW5wdXRfdHJpZ2dlcihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgdXApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggYSBub256ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVyIHRvIGVuYWJsZSByZWNlaXZpbmcgZGF0YSwgb3Igd2l0aCBhIHplcm8KKyAgICAgICAgPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgZG8gZGlzYWJsZSByZWNlaXZpbmcgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcDsgdGhlCisgICAgICAgIGFjdHVhbCByZWFkaW5nIG9mIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGlzIHVzdWFsbHkgZG9uZSBpbiBhbgorICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIGRhdGEgcmVjZXB0aW9uIGlzIGVuYWJsZWQsIHlvdXIgaW50ZXJydXB0IGhhbmRsZXIgc2hvdWxkCisgICAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3JlY2VpdmU8L2Z1bmN0aW9uPiBmb3IgYWxsIHJlY2VpdmVkCisgICAgICAgIGRhdGE6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB2b2lkIHNuZF9teWNoaXBfbWlkaV9pbnRlcnJ1cHQoLi4uKQorICB7CisgICAgICAgICAgd2hpbGUgKG15Y2hpcF9taWRpX2F2YWlsYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7CisgICAgICAgICAgICAgICAgICBkYXRhID0gbXljaGlwX21pZGlfcmVhZCgpOworICAgICAgICAgICAgICAgICAgc25kX3Jhd21pZGlfcmVjZWl2ZShzdWJzdHJlYW0sICZkYXRhLCAxKTsKKyAgICAgICAgICB9CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtZHJhaW4iPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5kcmFpbjwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfeHh4X2RyYWluKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIHdpdGggb3V0cHV0IHN1YnN0cmVhbXMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCB3YWl0CisgICAgICAgIHVudGlsIGFsbCBkYXRhIHJlYWQgZnJvbSB0aGUgc3Vic3RyZWFtIGJ1ZmZlciBoYXMgYmVlbiB0cmFuc21pdHRlZC4KKyAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgY2xvc2VkIGFuZCB0aGUgZHJpdmVyIHVubG9hZGVkCisgICAgICAgIHdpdGhvdXQgbG9zaW5nIGRhdGEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gIElmIHlvdSBkbyBub3Qgc2V0CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5kcmFpbjwvc3RydWN0ZmllbGQ+IGluIHRoZSBzbmRfcmF3bWlkaV9vcHNfdAorICAgICAgICBzdHJ1Y3R1cmUsIEFMU0Egd2lsbCBzaW1wbHkgd2FpdCBmb3IgNTAmbmJzcDttaWxsaXNlY29uZHMKKyAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIE1pc2NlbGxhbmVvdXMgRGV2aWNlcyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9Im1pc2MtZGV2aWNlcyI+CisgICAgPHRpdGxlPk1pc2NlbGxhbmVvdXMgRGV2aWNlczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLW9wbDMiPgorICAgICAgPHRpdGxlPkZNIE9QTDM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBGTSBPUEwzIGlzIHN0aWxsIHVzZWQgb24gbWFueSBjaGlwcyAobWFpbmx5IGZvciBiYWNrd2FyZAorICAgICAgY29tcGF0aWJpbGl0eSkuIEFMU0EgaGFzIGEgbmljZSBPUEwzIEZNIGNvbnRyb2wgbGF5ZXIsIHRvby4gVGhlCisgICAgICBPUEwzIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL29wbDMuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGTSByZWdpc3RlcnMgY2FuIGJlIGRpcmVjdGx5IGFjY2Vzc2VkIHRocm91Z2ggZGlyZWN0LUZNIEFQSSwKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmRfZm0uaCZndDs8L2ZpbGVuYW1lPi4gSW4KKyAgICAgIEFMU0EgbmF0aXZlIG1vZGUsIEZNIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaAorICAgICAgSGFyZHdhcmUtRGVwZW5kYW50IERldmljZSBkaXJlY3QtRk0gZXh0ZW5zaW9uIEFQSSwgd2hlcmVhcyBpbgorICAgICAgT1NTIGNvbXBhdGlibGUgbW9kZSwgRk0gcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIE9TUworICAgICAgZGlyZWN0LUZNIGNvbXBhdGlibGUgQVBJIG9uIDxmaWxlbmFtZT4vZGV2L2RtZm1YPC9maWxlbmFtZT4gZGV2aWNlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyB0aGUgT1BMMyBjb21wb25lbnQsIHlvdSBoYXZlIHR3byBmdW5jdGlvbnMgdG8KKyAgICAgICAgY2FsbC4gVGhlIGZpcnN0IG9uZSBpcyBhIGNvbnN0cnVjdG9yIGZvciA8dHlwZT5vcGwzX3Q8L3R5cGU+CisgICAgICAgIGluc3RhbmNlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvcGwzX3QgKm9wbDM7CisgIHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBscG9ydCwgcnBvcnQsIE9QTDNfSFdfT1BMM19YWFgsCisgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkLCAmb3BsMyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUKKyAgICAgIGxlZnQgcG9ydCBhZGRyZXNzLCBhbmQgdGhlIHRoaXJkIGlzIHRoZSByaWdodCBwb3J0IGFkZHJlc3MuIEluCisgICAgICBtb3N0IGNhc2VzLCB0aGUgcmlnaHQgcG9ydCBpcyBwbGFjZWQgYXQgdGhlIGxlZnQgcG9ydCArIDIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvdXJ0aCBhcmd1bWVudCBpcyB0aGUgaGFyZHdhcmUgdHlwZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGxlZnQgYW5kIHJpZ2h0IHBvcnRzIGhhdmUgYmVlbiBhbHJlYWR5IGFsbG9jYXRlZCBieQorICAgICAgdGhlIGNhcmQgZHJpdmVyLCBwYXNzIG5vbi16ZXJvIHRvIHRoZSBmaWZ0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aW50ZWdyYXRlZDwvcGFyYW1ldGVyPikuIE90aGVyd2lzZSwgb3BsMyBtb2R1bGUgd2lsbAorICAgICAgYWxsb2NhdGUgdGhlIHNwZWNpZmllZCBwb3J0cyBieSBpdHNlbGYuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgYWNjZXNzaW5nIHRvIHRoZSBoYXJkd2FyZSByZXF1aXJlcyBzcGVjaWFsIG1ldGhvZAorICAgICAgICBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBJL08gYWNjZXNzLCB5b3UgY2FuIGNyZWF0ZSBvcGwzIGluc3RhbmNlCisgICAgICAgIHNlcGFyYXRlbHkgd2l0aCA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPi4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvcGwzX3QgKm9wbDM7CisgIHNuZF9vcGwzX25ldyhjYXJkLCBPUEwzX0hXX09QTDNfWFhYLCAmb3BsMyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisJVGhlbiBzZXQgPHN0cnVjdGZpZWxkPmNvbW1hbmQ8L3N0cnVjdGZpZWxkPiwKKwk8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPnByaXZhdGVfZnJlZTwvc3RydWN0ZmllbGQ+IGZvciB0aGUgcHJpdmF0ZQorCWFjY2VzcyBmdW5jdGlvbiwgdGhlIHByaXZhdGUgZGF0YSBhbmQgdGhlIGRlc3RydWN0b3IuCisJVGhlIGxfcG9ydCBhbmQgcl9wb3J0IGFyZSBub3QgbmVjZXNzYXJpbHkgc2V0LiAgT25seSB0aGUKKwljb21tYW5kIG11c3QgYmUgc2V0IHByb3Blcmx5LiAgWW91IGNhbiByZXRyaWV2ZSB0aGUgZGF0YQorCWZyb20gb3BsMy0mZ3Q7cHJpdmF0ZV9kYXRhIGZpZWxkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlBZnRlciBjcmVhdGluZyB0aGUgb3BsMyBpbnN0YW5jZSB2aWEgPGZ1bmN0aW9uPnNuZF9vcGwzX25ldygpPC9mdW5jdGlvbj4sCisJY2FsbCA8ZnVuY3Rpb24+c25kX29wbDNfaW5pdCgpPC9mdW5jdGlvbj4gdG8gaW5pdGlhbGl6ZSB0aGUgY2hpcCB0byB0aGUKKwlwcm9wZXIgc3RhdGUuICBOb3RlIHRoYXQgPGZ1bmN0aW9uPnNuZF9vcGwzX2NyZWF0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzCisJY2FsbHMgaXQgaW50ZXJuYWxseS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBvcGwzIGluc3RhbmNlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LCB0aGVuIGNyZWF0ZSBhCisgICAgICAgIGh3ZGVwIGRldmljZSBmb3IgdGhpcyBvcGwzLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfaHdkZXBfdCAqb3BsM2h3ZGVwOworICBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgJm9wbDNod2RlcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgPHR5cGU+b3BsM190PC90eXBlPiBpbnN0YW5jZSB5b3UKKyAgICAgIGNyZWF0ZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBpbmRleCBudW1iZXIsIHVzdWFsbHkgMC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4LW9mZnNldCBmb3IgdGhlIHNlcXVlbmNlcgorICAgICAgY2xpZW50IGFzc2lnbmVkIHRvIHRoZSBPUEwzIHBvcnQuIFdoZW4gdGhlcmUgaXMgYW4gTVBVNDAxLVVBUlQsCisgICAgICBnaXZlIDEgZm9yIGhlcmUgKFVBUlQgYWx3YXlzIHRha2VzIDApLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLWhhcmR3YXJlLWRlcGVuZGVudCI+CisgICAgICA8dGl0bGU+SGFyZHdhcmUtRGVwZW5kZW50IERldmljZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgY2hpcHMgbmVlZCB0aGUgYWNjZXNzIGZyb20gdGhlIHVzZXItc3BhY2UgZm9yIHNwZWNpYWwKKyAgICAgIGNvbnRyb2xzIG9yIGZvciBsb2FkaW5nIHRoZSBtaWNybyBjb2RlLiBJbiBzdWNoIGEgY2FzZSwgeW91IGNhbgorICAgICAgY3JlYXRlIGEgaHdkZXAgKGhhcmR3YXJlLWRlcGVuZGVudCkgZGV2aWNlLiBUaGUgaHdkZXAgQVBJIGlzCisgICAgICBkZWZpbmVkIGluIDxmaWxlbmFtZT4mbHQ7c291bmQvaHdkZXAuaCZndDs8L2ZpbGVuYW1lPi4gWW91IGNhbgorICAgICAgZmluZCBleGFtcGxlcyBpbiBvcGwzIGRyaXZlciBvcgorICAgICAgPGZpbGVuYW1lPmlzYS9zYi9zYjE2X2NzcC5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQ3JlYXRpb24gb2YgdGhlIDx0eXBlPmh3ZGVwPC90eXBlPiBpbnN0YW5jZSBpcyBkb25lIHZpYQorICAgICAgICA8ZnVuY3Rpb24+c25kX2h3ZGVwX25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9od2RlcF90ICpodzsKKyAgc25kX2h3ZGVwX25ldyhjYXJkLCAiTXkgSFdERVAiLCAwLCAmaHcpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBpbmRleCBudW1iZXIuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIHRoZW4gcGFzcyBhbnkgcG9pbnRlciB2YWx1ZSB0byB0aGUKKyAgICAgICAgPHBhcmFtZXRlcj5wcml2YXRlX2RhdGE8L3BhcmFtZXRlcj4uCisgICAgICAgIElmIHlvdSBhc3NpZ24gYSBwcml2YXRlIGRhdGEsIHlvdSBzaG91bGQgZGVmaW5lIHRoZQorICAgICAgICBkZXN0cnVjdG9yLCB0b28uIFRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIGlzIHNldCB0bworICAgICAgICA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9mcmVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuICAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteWRhdGFfdCAqcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisgIGh3LT5wcml2YXRlX2RhdGEgPSBwOworICBody0+cHJpdmF0ZV9mcmVlID0gbXlkYXRhX2ZyZWU7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRlc3RydWN0b3Igd291bGQgYmU6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXlkYXRhX2ZyZWUoc25kX2h3ZGVwX3QgKmh3KQorICB7CisgICAgICAgICAgbXlkYXRhX3QgKnAgPSBody0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIGtmcmVlKHApOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhcmJpdHJhcnkgZmlsZSBvcGVyYXRpb25zIGNhbiBiZSBkZWZpbmVkIGZvciB0aGlzCisgICAgICAgIGluc3RhbmNlLiBUaGUgZmlsZSBvcGVyYXRvcnMgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgPHBhcmFtZXRlcj5vcHM8L3BhcmFtZXRlcj4gdGFibGUuIEZvciBleGFtcGxlLCBhc3N1bWUgdGhhdAorICAgICAgICB0aGlzIGNoaXAgbmVlZHMgYW4gaW9jdGwuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGh3LT5vcHMub3BlbiA9IG15ZGF0YV9vcGVuOworICBody0+b3BzLmlvY3RsID0gbXlkYXRhX2lvY3RsOworICBody0+b3BzLnJlbGVhc2UgPSBteWRhdGFfcmVsZWFzZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEFuZCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcyB5b3UgbGlrZS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLUlFQzk1OCI+CisgICAgICA8dGl0bGU+SUVDOTU4IChTL1BESUYpPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBVc3VhbGx5IHRoZSBjb250cm9scyBmb3IgSUVDOTU4IGRldmljZXMgYXJlIGltcGxlbWVudGVkIHZpYQorICAgICAgY29udHJvbCBpbnRlcmZhY2UuIFRoZXJlIGlzIGEgbWFjcm8gdG8gY29tcG9zZSBhIG5hbWUgc3RyaW5nIGZvcgorICAgICAgSUVDOTU4IGNvbnRyb2xzLCA8ZnVuY3Rpb24+U05EUlZfQ1RMX05BTUVfSUVDOTU4KCk8L2Z1bmN0aW9uPgorICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O2luY2x1ZGUvYXNvdW5kLmgmZ3Q7PC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGNvbnRyb2xzIGZvciBJRUM5NTggc3RhdHVzIGJpdHMuIFRoZXNlCisgICAgICBjb250cm9scyB1c2UgdGhlIHR5cGUgPHR5cGU+U05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg8L3R5cGU+LAorICAgICAgYW5kIHRoZSBzaXplIG9mIGVsZW1lbnQgaXMgZml4ZWQgYXMgNCBieXRlcyBhcnJheQorICAgICAgKHZhbHVlLmllYzk1OC5zdGF0dXNbeF0pLiBGb3IgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPgorICAgICAgY2FsbGJhY2ssIHlvdSBkb24ndCBzcGVjaWZ5IAorICAgICAgdGhlIHZhbHVlIGZpZWxkIGZvciB0aGlzIHR5cGUgKHRoZSBjb3VudCBmaWVsZCBtdXN0IGJlIHNldCwKKyAgICAgIHRob3VnaCkuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBDb24gTWFzazwvcXVvdGU+IGlzIHVzZWQgdG8gcmV0dXJuIHRoZQorICAgICAgYml0LW1hc2sgZm9yIHRoZSBJRUM5NTggc3RhdHVzIGJpdHMgb2YgY29uc3VtZXIgbW9kZS4gU2ltaWxhcmx5LAorICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBQcm8gTWFzazwvcXVvdGU+IHJldHVybnMgdGhlIGJpdG1hc2sgZm9yCisgICAgICBwcm9mZXNzaW9uYWwgbW9kZS4gVGhleSBhcmUgcmVhZC1vbmx5IGNvbnRyb2xzLCBhbmQgYXJlIGRlZmluZWQKKyAgICAgIGFzIE1JWEVSIGNvbnRyb2xzIChpZmFjZSA9CisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI8L2NvbnN0YW50PikuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE1lYW53aGlsZSwgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBEZWZhdWx0PC9xdW90ZT4gY29udHJvbCBpcworICAgICAgZGVmaW5lZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgY3VycmVudCBkZWZhdWx0IElFQzk1OAorICAgICAgYml0cy4gTm90ZSB0aGF0IHRoaXMgb25lIGlzIHVzdWFsbHkgZGVmaW5lZCBhcyBhIFBDTSBjb250cm9sCisgICAgICAoaWZhY2UgPSA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNPC9jb25zdGFudD4pLAorICAgICAgYWx0aG91Z2ggaW4gc29tZSBwbGFjZXMgaXQncyBkZWZpbmVkIGFzIGEgTUlYRVIgY29udHJvbC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBhZGRpdGlvbiwgeW91IGNhbiBkZWZpbmUgdGhlIGNvbnRyb2wgc3dpdGNoZXMgdG8KKyAgICAgIGVuYWJsZS9kaXNhYmxlIG9yIHRvIHNldCB0aGUgcmF3IGJpdCBtb2RlLiBUaGUgaW1wbGVtZW50YXRpb24KKyAgICAgIHdpbGwgZGVwZW5kIG9uIHRoZSBjaGlwLCBidXQgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIG5hbWVkIGFzCisgICAgICA8cXVvdGU+SUVDOTU4IHh4eDwvcXVvdGU+LCBwcmVmZXJhYmx5IHVzaW5nCisgICAgICA8ZnVuY3Rpb24+U05EUlZfQ1RMX05BTUVfSUVDOTU4KCk8L2Z1bmN0aW9uPiBtYWNyby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGZpbmQgc2V2ZXJhbCBjYXNlcywgZm9yIGV4YW1wbGUsCisgICAgICA8ZmlsZW5hbWU+cGNpL2VtdTEwazE8L2ZpbGVuYW1lPiwKKyAgICAgIDxmaWxlbmFtZT5wY2kvaWNlMTcxMjwvZmlsZW5hbWU+LCBvcgorICAgICAgPGZpbGVuYW1lPnBjaS9jbWlwY2kuYzwvZmlsZW5hbWU+LiAgCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQnVmZmVyIGFuZCBNZW1vcnkgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij4KKyAgICA8dGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkgTWFuYWdlbWVudDwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktYnVmZmVyLXR5cGVzIj4KKyAgICAgIDx0aXRsZT5CdWZmZXIgVHlwZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFMU0EgcHJvdmlkZXMgc2V2ZXJhbCBkaWZmZXJlbnQgYnVmZmVyIGFsbG9jYXRpb24gZnVuY3Rpb25zCisgICAgICBkZXBlbmRpbmcgb24gdGhlIGJ1cyBhbmQgdGhlIGFyY2hpdGVjdHVyZS4gQWxsIHRoZXNlIGhhdmUgYQorICAgICAgY29uc2lzdGVudCBBUEkuIFRoZSBhbGxvY2F0aW9uIG9mIHBoeXNpY2FsbHktY29udGlndW91cyBwYWdlcyBpcworICAgICAgZG9uZSB2aWEgCisgICAgICA8ZnVuY3Rpb24+c25kX21hbGxvY194eHhfcGFnZXMoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCB3aGVyZSB4eHgKKyAgICAgIGlzIHRoZSBidXMgdHlwZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBwYWdlcyB3aXRoIGZhbGxiYWNrIGlzCisgICAgICA8ZnVuY3Rpb24+c25kX21hbGxvY194eHhfcGFnZXNfZmFsbGJhY2soKTwvZnVuY3Rpb24+LiBUaGlzCisgICAgICBmdW5jdGlvbiB0cmllcyB0byBhbGxvY2F0ZSB0aGUgc3BlY2lmaWVkIHBhZ2VzIGJ1dCBpZiB0aGUgcGFnZXMKKyAgICAgIGFyZSBub3QgYXZhaWxhYmxlLCBpdCB0cmllcyB0byByZWR1Y2UgdGhlIHBhZ2Ugc2l6ZXMgdW50aWwgdGhlCisgICAgICBlbm91Z2ggc3BhY2UgaXMgZm91bmQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgRm9yIHJlbGVhc2luZyB0aGUgc3BhY2UsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfZnJlZV94eHhfcGFnZXMoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBVc3VhbGx5LCBBTFNBIGRyaXZlcnMgdHJ5IHRvIGFsbG9jYXRlIGFuZCByZXNlcnZlCisgICAgICAgYSBsYXJnZSBjb250aWd1b3VzIHBoeXNpY2FsIHNwYWNlCisgICAgICAgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpcyBsb2FkZWQgZm9yIHRoZSBsYXRlciB1c2UuCisgICAgICAgVGhpcyBpcyBjYWxsZWQgPHF1b3RlPnByZS1hbGxvY2F0aW9uPC9xdW90ZT4uCisgICAgICAgQXMgYWxyZWFkeSB3cml0dGVuLCB5b3UgY2FuIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhdCB0aGUKKyAgICAgICBjb25zdHJ1Y3Rpb24gb2YgcGNtIGluc3RhbmNlIChpbiB0aGUgY2FzZSBvZiBQQ0kgYnVzKS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKHBjaSksIHNpemUsIG1heCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgdGhlIGJ5dGUgc2l6ZSB0byBiZQorICAgICAgcHJlLWFsbG9jYXRlZCBhbmQgdGhlIDxwYXJhbWV0ZXI+bWF4PC9wYXJhbWV0ZXI+IGlzIHRoZSBtYXhpbWFsCisgICAgICBzaXplIHRvIGJlIGNoYW5nZWQgdmlhIDxmaWxlbmFtZT5wcmVhbGxvYzwvZmlsZW5hbWU+IHByb2MgZmlsZS4KKyAgICAgIFRoZSBhbGxvY2F0b3Igd2lsbCB0cnkgdG8gZ2V0IGFzIGxhcmdlIGFyZWEgYXMgcG9zc2libGUKKyAgICAgIHdpdGhpbiB0aGUgZ2l2ZW4gc2l6ZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIHNlY29uZCBhcmd1bWVudCAodHlwZSkgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCAoZGV2aWNlIHBvaW50ZXIpCisgICAgICBhcmUgZGVwZW5kZW50IG9uIHRoZSBidXMuCisgICAgICBJbiB0aGUgY2FzZSBvZiBJU0EgYnVzLCBwYXNzIDxmdW5jdGlvbj5zbmRfZG1hX2lzYV9kYXRhKCk8L2Z1bmN0aW9uPgorICAgICAgYXMgdGhlIHRoaXJkIGFyZ3VtZW50IHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVjwvY29uc3RhbnQ+IHR5cGUuCisgICAgICBGb3IgdGhlIGNvbnRpbnVvdXMgYnVmZmVyIHVucmVsYXRlZCB0byB0aGUgYnVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkCisgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gdHlwZSBhbmQgdGhlCisgICAgICA8ZnVuY3Rpb24+c25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCk8L2Z1bmN0aW9uPiBkZXZpY2UgcG9pbnRlciwKKyAgICAgIHdoZXJlaCA8Y29uc3RhbnQ+R0ZQX0tFUk5FTDwvY29uc3RhbnQ+IGlzIHRoZSBrZXJuZWwgYWxsb2NhdGlvbiBmbGFnIHRvCisgICAgICB1c2UuICBGb3IgdGhlIFNCVVMsIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9TQlVTPC9jb25zdGFudD4gYW5kCisgICAgICA8ZnVuY3Rpb24+c25kX2RtYV9zYnVzX2RhdGEoc2J1c19kZXYpPC9mdW5jdGlvbj4gYXJlIHVzZWQgaW5zdGVhZC4KKyAgICAgIEZvciB0aGUgUENJIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMsIHVzZQorICAgICAgPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVl9TRzwvY29uc3RhbnQ+IHdpdGgKKyAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX3BjaV9kYXRhKHBjaSk8L2Z1bmN0aW9uPgorICAgICAgKHNlZSB0aGUgc2VjdGlvbgorICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5LW5vbi1jb250aWd1b3VzIj48Y2l0ZXRpdGxlPk5vbi1Db250aWd1b3VzIEJ1ZmZlcnMKKyAgICAgICAgICA8L2NpdGV0aXRsZT48L2xpbms+KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9uY2Ugd2hlbiB0aGUgYnVmZmVyIGlzIHByZS1hbGxvY2F0ZWQsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICBhbGxvY2F0b3IgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBzaXplKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byBwcmUtYWxsb2NhdGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWV4dGVybmFsLWhhcmR3YXJlIj4KKyAgICAgIDx0aXRsZT5FeHRlcm5hbCBIYXJkd2FyZSBCdWZmZXJzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIGNoaXBzIGhhdmUgdGhlaXIgb3duIGhhcmR3YXJlIGJ1ZmZlcnMgYW5kIHRoZSBETUEKKyAgICAgIHRyYW5zZmVyIGZyb20gdGhlIGhvc3QgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuIEluIHN1Y2ggYSBjYXNlLAorICAgICAgeW91IG5lZWQgdG8gZWl0aGVyIDEpIGNvcHkvc2V0IHRoZSBhdWRpbyBkYXRhIGRpcmVjdGx5IHRvIHRoZQorICAgICAgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLCBvciAyKSBtYWtlIGFuIGludGVybWVkaWF0ZSBidWZmZXIgYW5kCisgICAgICBjb3B5L3NldCB0aGUgZGF0YSBmcm9tIGl0IHRvIHRoZSBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIgaW4KKyAgICAgIGludGVycnVwdHMgKG9yIGluIHRhc2tsZXRzLCBwcmVmZXJhYmx5KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBjYXNlIHdvcmtzIGZpbmUgaWYgdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpcyBlbm91Z2gKKyAgICAgIGxhcmdlLiAgVGhpcyBtZXRob2QgZG9lc24ndCBuZWVkIGFueSBleHRyYSBidWZmZXJzIGFuZCB0aHVzIGlzCisgICAgICBtb3JlIGVmZmVjdGl2ZS4gWW91IG5lZWQgdG8gZGVmaW5lIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGZvciAKKyAgICAgIHRoZSBkYXRhIHRyYW5zZmVyLiBIb3dldmVyLCB0aGVyZSBpcyBhIGRyYXdiYWNrOiBpdCBjYW5ub3QKKyAgICAgIGJlIG1tYXBwZWQuIFRoZSBleGFtcGxlcyBhcmUgR1VTJ3MgR0YxIFBDTSBvciBlbXU4MDAwJ3MKKyAgICAgIHdhdmV0YWJsZSBQQ00uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHNlY29uZCBjYXNlIGFsbG93cyB0aGUgbW1hcCBvZiB0aGUgYnVmZmVyLCBhbHRob3VnaCB5b3UgaGF2ZQorICAgICAgdG8gaGFuZGxlIGFuIGludGVycnVwdCBvciBhIHRhc2tsZXQgZm9yIHRyYW5zZmVycmluZyB0aGUgZGF0YQorICAgICAgZnJvbSB0aGUgaW50ZXJtZWRpYXRlIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgYnVmZmVyLiBZb3UgY2FuIGZpbmQgYW4KKyAgICAgIGV4YW1wbGUgaW4gdnhwb2NrZXQgZHJpdmVyLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgY2FzZSBpcyB0aGF0IHRoZSBjaGlwIHVzZXMgYSBQQ0kgbWVtb3J5LW1hcAorICAgICAgcmVnaW9uIGZvciB0aGUgYnVmZmVyIGluc3RlYWQgb2YgdGhlIGhvc3QgbWVtb3J5LiBJbiB0aGlzIGNhc2UsCisgICAgICBtbWFwIGlzIGF2YWlsYWJsZSBvbmx5IG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyBsaWtlIGludGVsLiBJbgorICAgICAgbm9uLW1tYXAgbW9kZSwgdGhlIGRhdGEgY2Fubm90IGJlIHRyYW5zZmVycmVkIGFzIHRoZSBub3JtYWwKKyAgICAgIHdheS4gVGh1cyB5b3UgbmVlZCB0byBkZWZpbmUgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGFzIHdlbGwgCisgICAgICBhcyBpbiB0aGUgY2FzZXMgYWJvdmUuIFRoZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KKyAgICAgIDxmaWxlbmFtZT5ybWUzMi5jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5ybWU5Ni5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGRlcGVuZHMgdXBvbiAKKyAgICAgICAgd2hldGhlciB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgaW50ZXJsZWF2ZWQgb3Igbm9uLWludGVybGVhdmVkCisgICAgICAgIHNhbXBsZXMuIFRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzCisgICAgICAgIGRlZmluZWQgbGlrZSBiZWxvdywgYSBiaXQgCisgICAgICAgIGRpZmZlcmVudGx5IGRlcGVuZGluZyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgcGxheWJhY2sgb3IKKyAgICAgICAgY2FwdHVyZTogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBwbGF5YmFja19jb3B5KHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKnNyYywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworICBzdGF0aWMgaW50IGNhcHR1cmVfY29weShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIGludCBjaGFubmVsLAorICAgICAgICAgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zLCB2b2lkICpkc3QsIHNuZF9wY21fdWZyYW1lc190IGNvdW50KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgaW50ZXJsZWF2ZWQgc2FtcGxlcywgdGhlIHNlY29uZCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+Y2hhbm5lbDwvcGFyYW1ldGVyPikgaXMgbm90IHVzZWQuIFRoZSB0aGlyZCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBwb2ludHMgdGhlIAorICAgICAgY3VycmVudCBwb3NpdGlvbiBvZmZzZXQgaW4gZnJhbWVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtZWFuaW5nIG9mIHRoZSBmb3VydGggYXJndW1lbnQgaXMgZGlmZmVyZW50IGJldHdlZW4KKyAgICAgIHBsYXliYWNrIGFuZCBjYXB0dXJlLiBGb3IgcGxheWJhY2ssIGl0IGhvbGRzIHRoZSBzb3VyY2UgZGF0YQorICAgICAgcG9pbnRlciwgYW5kIGZvciBjYXB0dXJlLCBpdCdzIHRoZSBkZXN0aW5hdGlvbiBkYXRhIHBvaW50ZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gYmUgY29waWVkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hhdCB5b3UgaGF2ZSB0byBkbyBpbiB0aGlzIGNhbGxiYWNrIGlzIGFnYWluIGRpZmZlcmVudAorICAgICAgICBiZXR3ZWVuIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMuIEluIHRoZSBjYXNlIG9mCisgICAgICAgIHBsYXliYWNrLCB5b3UgZG86IGNvcHkgdGhlIGdpdmVuIGFtb3VudCBvZiBkYXRhCisgICAgICAgICg8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+KSBhdCB0aGUgc3BlY2lmaWVkIHBvaW50ZXIKKyAgICAgICAgKDxwYXJhbWV0ZXI+c3JjPC9wYXJhbWV0ZXI+KSB0byB0aGUgc3BlY2lmaWVkIG9mZnNldAorICAgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIG9uIHRoZSBoYXJkd2FyZSBidWZmZXIuIFdoZW4KKyAgICAgICAgY29kZWQgbGlrZSBtZW1jcHktbGlrZSB3YXksIHRoZSBjb3B5IHdvdWxkIGJlIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgc3JjLAorICAgICAgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgY2FwdHVyZSBkaXJlY3Rpb24sIHlvdSBkbzogY29weSB0aGUgZ2l2ZW4gYW1vdW50IG9mCisgICAgICAgIGRhdGEgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CisgICAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlIGJ1ZmZlciB0byB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHBvaW50ZXIgKDxwYXJhbWV0ZXI+ZHN0PC9wYXJhbWV0ZXI+KS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXlfbWVtY3B5KGRzdCwgbXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCBib3RoIG9mIHRoZSBwb3NpdGlvbiBhbmQgdGhlIGRhdGEgYW1vdW50IGFyZSBnaXZlbgorICAgICAgaW4gZnJhbWVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgIHdpbGwgYmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgbmVlZCB0byBjaGVjayB0aGUgY2hhbm5lbCBhcmd1bWVudCwgYW5kIGlmIGl0J3MgLTEsIGNvcHkKKyAgICAgIHRoZSB3aG9sZSBjaGFubmVscy4gT3RoZXJ3aXNlLCB5b3UgaGF2ZSB0byBjb3B5IG9ubHkgdGhlCisgICAgICBzcGVjaWZpZWQgY2hhbm5lbC4gUGxlYXNlIGNoZWNrCisgICAgICA8ZmlsZW5hbWU+aXNhL2d1cy9ndXNfcGNtLmM8L2ZpbGVuYW1lPiBhcyBhbiBleGFtcGxlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIGFsc28KKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gYSBzaW1pbGFyIHdheS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzaWxlbmNlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHNuZF9wY21fdWZyYW1lc190IGNvdW50KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1lYW5pbmdzIG9mIGFyZ3VtZW50cyBhcmUgaWRlbnRpY2FsIHdpdGggdGhlCisgICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IAorICAgICAgY2FsbGJhY2ssIGFsdGhvdWdoIHRoZXJlIGlzIG5vIDxwYXJhbWV0ZXI+c3JjL2RzdDwvcGFyYW1ldGVyPgorICAgICAgYXJndW1lbnQuIEluIHRoZSBjYXNlIG9mIGludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBjaGFubmVsCisgICAgICBhcmd1bWVudCBoYXMgbm8gbWVhbmluZywgYXMgd2VsbCBhcyBvbgorICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4gIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJvbGUgb2YgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB0bworICAgICAgICBzZXQgdGhlIGdpdmVuIGFtb3VudCAKKyAgICAgICAgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIG9mIHNpbGVuY2UgZGF0YSBhdCB0aGUKKyAgICAgICAgc3BlY2lmaWVkIG9mZnNldCAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIG9uIHRoZSBoYXJkd2FyZQorICAgICAgICBidWZmZXIuIFN1cHBvc2UgdGhhdCB0aGUgZGF0YSBmb3JtYXQgaXMgc2lnbmVkICh0aGF0IGlzLCB0aGUKKyAgICAgICAgc2lsZW50LWRhdGEgaXMgMCksIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gdXNpbmcgYSBtZW1zZXQtbGlrZQorICAgICAgICBmdW5jdGlvbiB3b3VsZCBiZSBsaWtlOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteV9tZW1jcHkobXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksIDAsCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2Ygbm9uLWludGVybGVhdmVkIHNhbXBsZXMsIGFnYWluLCB0aGUKKyAgICAgIGltcGxlbWVudGF0aW9uIGJlY29tZXMgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gU2VlLCBmb3IgZXhhbXBsZSwKKyAgICAgIDxmaWxlbmFtZT5pc2EvZ3VzL2d1c19wY20uYzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktbm9uLWNvbnRpZ3VvdXMiPgorICAgICAgPHRpdGxlPk5vbi1Db250aWd1b3VzIEJ1ZmZlcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgdGhlIHBhZ2UgdGFibGUgbGlrZSBlbXUxMGsxIG9yIHRoZQorICAgICAgYnVmZmVyIGRlc2NyaXB0b3JzIGxpa2UgdmlhODJ4eCwgeW91IGNhbiB1c2UgdGhlIHNjYXR0ZXItZ2F0aGVyCisgICAgICAoU0cpIERNQS4gQUxTQSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIFNHLWJ1ZmZlcnMuCisgICAgICBUaGUgQVBJIGlzIHByb3ZpZGVkIGluIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGNyZWF0aW5nIHRoZSBTRy1idWZmZXIgaGFuZGxlciwgY2FsbAorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMoKTwvZnVuY3Rpb24+IG9yCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKCk8L2Z1bmN0aW9uPgorICAgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9ERVZfU0c8L2NvbnN0YW50PgorCWluIHRoZSBQQ00gY29uc3RydWN0b3IgbGlrZSBvdGhlciBQQ0kgcHJlLWFsbG9jYXRvci4KKyAgICAgICAgWW91IG5lZWQgdG8gcGFzcyB0aGUgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+LAorICAgICAgICB3aGVyZSBwY2kgaXMgdGhlIHN0cnVjdCA8c3RydWN0bmFtZT5wY2lfZGV2PC9zdHJ1Y3RuYW1lPiBwb2ludGVyCisgICAgICAgIG9mIHRoZSBjaGlwIGFzIHdlbGwuCisgICAgICAgIFRoZSA8dHlwZT5zbmRfc2dfYnVmX3Q8L3R5cGU+IGluc3RhbmNlIGlzIGNyZWF0ZWQgYXMKKyAgICAgICAgc3Vic3RyZWFtLSZndDtkbWFfcHJpdmF0ZS4gWW91IGNhbiBjYXN0CisgICAgICAgIHRoZSBwb2ludGVyIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fc2didWZfdCAqc2didWYgPSAoc25kX3BjbV9zZ2J1Zl90KilzdWJzdHJlYW0tPmRtYV9wcml2YXRlOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4KKyAgICAgIGluIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaworICAgICAgYXMgd2VsbCBhcyBpbiB0aGUgY2FzZSBvZiBub3JtYWwgUENJIGJ1ZmZlci4KKyAgICAgIFRoZSBTRy1idWZmZXIgaGFuZGxlciB3aWxsIGFsbG9jYXRlIHRoZSBub24tY29udGlndW91cyBrZXJuZWwKKyAgICAgIHBhZ2VzIG9mIHRoZSBnaXZlbiBzaXplIGFuZCBtYXAgdGhlbSBvbnRvIHRoZSB2aXJ0dWFsbHkgY29udGlndW91cworICAgICAgbWVtb3J5LiAgVGhlIHZpcnR1YWwgcG9pbnRlciBpcyBhZGRyZXNzZWQgaW4gcnVudGltZS0mZ3Q7ZG1hX2FyZWEuCisgICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcyAocnVudGltZS0mZ3Q7ZG1hX2FkZHIpIGlzIHNldCB0byB6ZXJvLAorICAgICAgYmVjYXVzZSB0aGUgYnVmZmVyIGlzIHBoeXNpY2FsbHkgbm9uLWNvbnRpZ291cy4KKyAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIHRhYmxlIGlzIHNldCB1cCBpbiBzZ2J1Zi0mZ3Q7dGFibGUuCisgICAgICBZb3UgY2FuIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhdCBhIGNlcnRhaW4gb2Zmc2V0IHZpYQorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fc2didWZfZ2V0X2FkZHIoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gYSBTRy1oYW5kbGVyIGlzIHVzZWQsIHlvdSBuZWVkIHRvIHNldAorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fc2didWZfb3BzX3BhZ2U8L2Z1bmN0aW9uPiBhcworICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5wYWdlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICAoU2VlIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBhZ2UtY2FsbGJhY2siPgorICAgICAgPGNpdGV0aXRsZT5wYWdlIGNhbGxiYWNrIHNlY3Rpb248L2NpdGV0aXRsZT48L2xpbms+LikKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciByZWxlYXNpbmcgdGhlIGRhdGEsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKCk8L2Z1bmN0aW9uPiBpbiB0aGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5od19mcmVlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgYXMgdXN1YWwuCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LXZtYWxsb2NlZCI+CisgICAgICA8dGl0bGU+Vm1hbGxvYydlZCBCdWZmZXJzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhIGJ1ZmZlciBhbGxvY2F0ZWQgdmlhCisgICAgICA8ZnVuY3Rpb24+dm1hbGxvYzwvZnVuY3Rpb24+LCBmb3IgZXhhbXBsZSwgZm9yIGFuIGludGVybWVkaWF0ZQorICAgICAgYnVmZmVyLiBTaW5jZSB0aGUgYWxsb2NhdGVkIHBhZ2VzIGFyZSBub3QgY29udGlndW91cywgeW91IG5lZWQKKyAgICAgIHRvIHNldCB0aGUgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayB0byBvYnRhaW4KKyAgICAgIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IGV2ZXJ5IG9mZnNldC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaworICAgICAgICB3b3VsZCBiZSBsaWtlIHRoaXM6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyAgLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgb24gdGhlIGdpdmVuIG9mZnNldCAqLworICBzdGF0aWMgc3RydWN0IHBhZ2UgKm15Y2hpcF9wYWdlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKKyAgeworICAgICAgICAgIHZvaWQgKnBhZ2VwdHIgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OworICAgICAgICAgIHJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIFByb2MgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icHJvYy1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5Qcm9jIEludGVyZmFjZTwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBBTFNBIHByb3ZpZGVzIGFuIGVhc3kgaW50ZXJmYWNlIGZvciBwcm9jZnMuIFRoZSBwcm9jIGZpbGVzIGFyZQorICAgICAgdmVyeSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gSSByZWNvbW1lbmQgeW91IHNldCB1cCBwcm9jIGZpbGVzIGlmCisgICAgICB5b3Ugd3JpdGUgYSBkcml2ZXIgYW5kIHdhbnQgdG8gZ2V0IGEgcnVubmluZyBzdGF0dXMgb3IgcmVnaXN0ZXIKKyAgICAgIGR1bXBzLiBUaGUgQVBJIGlzIGZvdW5kIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2luZm8uaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgY3JlYXRpbmcgYSBwcm9jIGZpbGUsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9wcm9jX25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2luZm9fZW50cnlfdCAqZW50cnk7CisgIGludCBlcnIgPSBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAibXktZmlsZSIsICZlbnRyeSk7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgcHJvYy1maWxlIG5hbWUgdG8gYmUKKyAgICBjcmVhdGVkLiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIGNyZWF0ZSBhIGZpbGUKKyAgICA8ZmlsZW5hbWU+bXktZmlsZTwvZmlsZW5hbWU+IHVuZGVyIHRoZSBjYXJkIGRpcmVjdG9yeSwKKyAgICBlLmcuIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvbXktZmlsZTwvZmlsZW5hbWU+LiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBMaWtlIG90aGVyIGNvbXBvbmVudHMsIHRoZSBwcm9jIGVudHJ5IGNyZWF0ZWQgdmlhCisgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX3Byb2NfbmV3KCk8L2Z1bmN0aW9uPiB3aWxsIGJlIHJlZ2lzdGVyZWQgYW5kCisgICAgcmVsZWFzZWQgYXV0b21hdGljYWxseSBpbiB0aGUgY2FyZCByZWdpc3RyYXRpb24gYW5kIHJlbGVhc2UKKyAgICBmdW5jdGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjcmVhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24gc3RvcmVzIGEgbmV3CisgICAgaW5zdGFuY2UgYXQgdGhlIHBvaW50ZXIgZ2l2ZW4gaW4gdGhlIHRoaXJkIGFyZ3VtZW50LgorICAgIEl0IGlzIGluaXRpYWxpemVkIGFzIGEgdGV4dCBwcm9jIGZpbGUgZm9yIHJlYWQgb25seS4gIEZvciB1c2luZworICAgIHRoaXMgcHJvYyBmaWxlIGFzIGEgcmVhZC1vbmx5IHRleHQgZmlsZSBhcyBpdCBpcywgc2V0IHRoZSByZWFkCisgICAgY2FsbGJhY2sgd2l0aCBhIHByaXZhdGUgZGF0YSB2aWEgCisgICAgIDxmdW5jdGlvbj5zbmRfaW5mb19zZXRfdGV4dF9vcHMoKTwvZnVuY3Rpb24+LgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCByZWFkX3NpemUsIG15X3Byb2NfcmVhZCk7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIAorICAgIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPikgaXMgdGhlCisgICAgcHJpdmF0ZSBkYXRhIHRvIGJlIHVzZWQgaW4gdGhlIGNhbGxiYWNrcy4gVGhlIHRoaXJkIHBhcmFtZXRlcgorICAgIHNwZWNpZmllcyB0aGUgcmVhZCBidWZmZXIgc2l6ZSBhbmQgdGhlIGZvdXJ0aAorICAgICg8cGFyYW1ldGVyPm15X3Byb2NfcmVhZDwvcGFyYW1ldGVyPikgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaAorICAgIGlzIGRlZmluZWQgbGlrZQorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXlfcHJvY19yZWFkKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2luZm9fYnVmZmVyX3QgKmJ1ZmZlcik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIEluIHRoZSByZWFkIGNhbGxiYWNrLCB1c2UgPGZ1bmN0aW9uPnNuZF9pcHJpbnRmKCk8L2Z1bmN0aW9uPiBmb3IKKyAgICBvdXRwdXQgc3RyaW5ncywgd2hpY2ggd29ya3MganVzdCBsaWtlIG5vcm1hbAorICAgIDxmdW5jdGlvbj5wcmludGYoKTwvZnVuY3Rpb24+LiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc25kX2luZm9fZW50cnlfdCAqZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfaW5mb19idWZmZXJfdCAqYnVmZmVyKQorICB7CisgICAgICAgICAgY2hpcF90ICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRoaXMgaXMgbXkgY2hpcCFcbiIpOworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBvcnQgPSAlbGRcbiIsIGNoaXAtPnBvcnQpOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBmaWxlIHBlcm1pc3Npb24gY2FuIGJlIGNoYW5nZWQgYWZ0ZXJ3YXJkcy4gIEFzIGRlZmF1bHQsIGl0J3MKKyAgICBzZXQgYXMgcmVhZCBvbmx5IGZvciBhbGwgdXNlcnMuICBJZiB5b3Ugd2FudCB0byBhZGQgdGhlIHdyaXRlCisgICAgcGVybWlzc2lvbiB0byB0aGUgdXNlciAocm9vdCBhcyBkZWZhdWx0KSwgc2V0IGxpa2UgYmVsb3c6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIGFuZCBzZXQgdGhlIHdyaXRlIGJ1ZmZlciBzaXplIGFuZCB0aGUgY2FsbGJhY2sKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVudHJ5LT5jLnRleHQud3JpdGVfc2l6ZSA9IDI1NjsKKyAgZW50cnktPmMudGV4dC53cml0ZSA9IG15X3Byb2Nfd3JpdGU7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBidWZmZXIgc2l6ZSBmb3IgcmVhZCBpcyBzZXQgdG8gMTAyNCBpbXBsaWNpdGx5IGJ5CisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX3NldF90ZXh0X29wcygpPC9mdW5jdGlvbj4uICBJdCBzaG91bGQgc3VmZmljZQorICAgIGluIG1vc3QgY2FzZXMgKHRoZSBzaXplIHdpbGwgYmUgYWxpZ25lZCB0bworICAgIDxjb25zdGFudD5QQUdFX1NJWkU8L2NvbnN0YW50PiBhbnl3YXkpLCBidXQgaWYgeW91IG5lZWQgdG8gaGFuZGxlCisgICAgdmVyeSBsYXJnZSB0ZXh0IGZpbGVzLCB5b3UgY2FuIHNldCBpdCBleHBsaWNpdGx5LCB0b28uCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBlbnRyeS0+Yy50ZXh0LnJlYWRfc2l6ZSA9IDY1NTM2OworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciB0aGUgd3JpdGUgY2FsbGJhY2ssIHlvdSBjYW4gdXNlCisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9saW5lKCk8L2Z1bmN0aW9uPiB0byBnZXQgYSB0ZXh0IGxpbmUsIGFuZAorICAgIDxmdW5jdGlvbj5zbmRfaW5mb19nZXRfc3RyKCk8L2Z1bmN0aW9uPiB0byByZXRyaWV2ZSBhIHN0cmluZyBmcm9tCisgICAgdGhlIGxpbmUuIFNvbWUgZXhhbXBsZXMgYXJlIGZvdW5kIGluCisgICAgPGZpbGVuYW1lPmNvcmUvb3NzL21peGVyX29zcy5jPC9maWxlbmFtZT4sIGNvcmUvb3NzL2FuZAorICAgIDxmaWxlbmFtZT5wY21fb3NzLmM8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgYSByYXctZGF0YSBwcm9jLWZpbGUsIHNldCB0aGUgYXR0cmlidXRlcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHNuZF9pbmZvX2VudHJ5X29wcyBteV9maWxlX2lvX29wcyA9IHsKKyAgICAgICAgICAucmVhZCA9IG15X2ZpbGVfaW9fcmVhZCwKKyAgfTsKKworICBlbnRyeS0+Y29udGVudCA9IFNORFJWX0lORk9fQ09OVEVOVF9EQVRBOworICBlbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgZW50cnktPmMub3BzID0gJm15X2ZpbGVfaW9fb3BzOworICBlbnRyeS0+c2l6ZSA9IDQwOTY7CisgIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR087CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIGNhbGxiYWNrIGlzIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSB0ZXh0LWZpbGUKKyAgICAgIHZlcnNpb24uIFlvdSBuZWVkIHRvIHVzZSBhIGxvdy1sZXZlbCBpL28gZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgIDxmdW5jdGlvbj5jb3B5X2Zyb20vdG9fdXNlcigpPC9mdW5jdGlvbj4gdG8gdHJhbnNmZXIgdGhlCisgICAgICBkYXRhLgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGxvbmcgbXlfZmlsZV9pb19yZWFkKHNuZF9pbmZvX2VudHJ5X3QgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcykKKyAgeworICAgICAgICAgIGxvbmcgc2l6ZSA9IGNvdW50OworICAgICAgICAgIGlmIChwb3MgKyBzaXplID4gbG9jYWxfbWF4X3NpemUpCisgICAgICAgICAgICAgICAgICBzaXplID0gbG9jYWxfbWF4X3NpemUgLSBwb3M7CisgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIGxvY2FsX2RhdGEgKyBwb3MsIHNpemUpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgcmV0dXJuIHNpemU7CisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUG93ZXIgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBvd2VyLW1hbmFnZW1lbnQiPgorICAgIDx0aXRsZT5Qb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBjaGlwIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aCB3aXRoIHN1c3BlbmQvcmVzdW1lCisgICAgICBmdW5jdGlvbnMsIHlvdSBuZWVkIHRvIGFkZCB0aGUgcG93ZXItbWFuYWdlbWVudCBjb2RlcyB0byB0aGUKKyAgICAgIGRyaXZlci4gVGhlIGFkZGl0aW9uYWwgY29kZXMgZm9yIHRoZSBwb3dlci1tYW5hZ2VtZW50IHNob3VsZCBiZQorICAgICAgPGZ1bmN0aW9uPmlmZGVmPC9mdW5jdGlvbj4nZWQgd2l0aAorICAgICAgPGNvbnN0YW50PkNPTkZJR19QTTwvY29uc3RhbnQ+LiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEFMU0EgcHJvdmlkZXMgdGhlIGNvbW1vbiBwb3dlci1tYW5hZ2VtZW50IGxheWVyLiBFYWNoIGNhcmQgZHJpdmVyCisgICAgICBuZWVkcyB0byBoYXZlIG9ubHkgbG93LWxldmVsIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaWZkZWYgQ09ORklHX1BNCisgIHN0YXRpYyBpbnQgc25kX215X3N1c3BlbmQoc25kX2NhcmRfdCAqY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQorICB7CisgICAgICAgICAgLi4uLiAvLyBkbyB0aGluZ3MgZm9yIHN1c3BzZW5kCisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgc3RhdGljIGludCBzbmRfbXlfcmVzdW1lKHNuZF9jYXJkX3QgKmNhcmQpCisgIHsKKyAgICAgICAgICAuLi4uIC8vIGRvIHRoaW5ncyBmb3Igc3VzcHNlbmQKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorICAjZW5kaWYKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgc2NoZW1lIG9mIHRoZSByZWFsIHN1c3BlbmQgam9iIGlzIGFzIGZvbGxvd2luZy4KKworICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmV0cmlldmUgdGhlIGNoaXAgZGF0YSBmcm9tIHBtX3ByaXZhdGVfZGF0YSBmaWVsZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGwoKTwvZnVuY3Rpb24+IHRvIHN1c3BlbmQgdGhlIHJ1bm5pbmcgUENNIHN0cmVhbXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TYXZlIHRoZSByZWdpc3RlciB2YWx1ZXMgaWYgbmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RvcCB0aGUgaGFyZHdhcmUgaWYgbmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGlzYWJsZSB0aGUgUENJIGRldmljZSBieSBjYWxsaW5nIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEEgdHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IG15Y2hpcF9zdXNwZW5kKHNuZF9jYXJkX3QgKmNhcmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKyAgeworICAgICAgICAgIC8qICgxKSAqLworICAgICAgICAgIG15Y2hpcF90ICpjaGlwID0gY2FyZC0+cG1fcHJpdmF0ZV9kYXRhOworICAgICAgICAgIC8qICgyKSAqLworICAgICAgICAgIHNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3NhdmVfcmVnaXN0ZXJzKGNoaXApOworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfc3RvcF9oYXJkd2FyZShjaGlwKTsKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGUgc2NoZW1lIG9mIHRoZSByZWFsIHJlc3VtZSBqb2IgaXMgYXMgZm9sbG93aW5nLgorCisgICAgPG9yZGVyZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2hpcCBkYXRhIGZyb20gcG1fcHJpdmF0ZV9kYXRhIGZpZWxkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgdGhlIHBjaSBkZXZpY2UgYWdhaW4gYnkgY2FsbGluZworICAgIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlLWluaXRpYWxpemUgdGhlIGNoaXAuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3RvcmUgdGhlIHNhdmVkIHJlZ2lzdGVycyBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3VtZSB0aGUgbWl4ZXIsIGUuZy4gY2FsbGluZworICAgIDxmdW5jdGlvbj5zbmRfYWM5N19yZXN1bWUoKTwvZnVuY3Rpb24+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0YXJ0IHRoZSBoYXJkd2FyZSAoaWYgYW55KS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIEEgdHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteWNoaXBfcmVzdW1lKG15Y2hpcF90ICpjaGlwKQorICB7CisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgbXljaGlwX3QgKmNoaXAgPSBjYXJkLT5wbV9wcml2YXRlX2RhdGE7CisgICAgICAgICAgLyogKDIpICovCisgICAgICAgICAgcGNpX2VuYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3JlaW5pdF9jaGlwKGNoaXApOworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdG9yZV9yZWdpc3RlcnMoY2hpcCk7CisgICAgICAgICAgLyogKDUpICovCisgICAgICAgICAgc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTcpOworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdGFydF9jaGlwKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgT0ssIHdlIGhhdmUgYWxsIGNhbGxiYWNrcyBub3cuIExldCdzIHNldCB1cCB0aGVtIG5vdy4gSW4gdGhlCisgICAgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FyZCwgYWRkIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc25kX2NhcmRfdCAqY2FyZDsKKyAgICAgICAgICBteWNoaXBfdCAqY2hpcDsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc25kX2NhcmRfc2V0X3BtX2NhbGxiYWNrKGNhcmQsIHNuZF9teV9zdXNwZW5kLCBzbmRfbXlfcmVzdW1lLCBjaGlwKTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICBIZXJlIHlvdSBkb24ndCBoYXZlIHRvIHB1dCBpZmRlZiBDT05GSUdfUE0gYXJvdW5kLCBzaW5jZSBpdCdzIGFscmVhZHkKKyAgICBjaGVja2VkIGluIHRoZSBoZWFkZXIgYW5kIGV4cGFuZGVkIHRvIGVtcHR5IGlmIG5vdCBuZWVkZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3UgbmVlZCBhIHNwYWNlIGZvciBzYXZpbmcgdGhlIHJlZ2lzdGVycywgeW91J2xsIG5lZWQgdG8KKyAgICBhbGxvY2F0ZSB0aGUgYnVmZmVyIGZvciBpdCBoZXJlLCB0b28sIHNpbmNlIGl0IHdvdWxkIGJlIGZhdGFsCisgICAgaWYgeW91IGNhbm5vdCBhbGxvY2F0ZSBhIG1lbW9yeSBpbiB0aGUgc3VzcGVuZCBwaGFzZS4KKyAgICBUaGUgYWxsb2NhdGVkIGJ1ZmZlciBzaG91bGQgYmUgcmVsZWFzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICBkZXN0cnVjdG9yLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQW5kIG5leHQsIHNldCBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MgdG8gdGhlIHBjaV9kcml2ZXIsCisgICAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IHBhc3NpbmcgYSBtYWNybyBTTkRfUENJX1BNX0NBTExCQUNLUworICAgICAgaW4gdGhlIHBjaV9kcml2ZXIgc3RydWN0LiAgVGhpcyBtYWNybyBpcyBleHBhbmRlZCB0byB0aGUgY29ycmVjdAorICAgICAgKGdsb2JhbCkgY2FsbGJhY2tzIGlmIENPTkZJR19QTSBpcyBzZXQuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IENoaXAiLAorICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teV9pZHMsCisgICAgICAgICAgLnByb2JlID0gc25kX215X3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXlfcmVtb3ZlKSwKKyAgICAgICAgICBTTkRfUENJX1BNX0NBTExCQUNLUworICB9OworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNb2R1bGUgUGFyYW1ldGVycyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9Im1vZHVsZS1wYXJhbWV0ZXJzIj4KKyAgICA8dGl0bGU+TW9kdWxlIFBhcmFtZXRlcnM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlcmUgYXJlIHN0YW5kYXJkIG1vZHVsZSBvcHRpb25zIGZvciBBTFNBLiBBdCBsZWFzdCwgZWFjaAorICAgICAgbW9kdWxlIHNob3VsZCBoYXZlIDxwYXJhbWV0ZXI+aW5kZXg8L3BhcmFtZXRlcj4sCisgICAgICA8cGFyYW1ldGVyPmlkPC9wYXJhbWV0ZXI+IGFuZCA8cGFyYW1ldGVyPmVuYWJsZTwvcGFyYW1ldGVyPgorICAgICAgb3B0aW9ucy4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB0aGUgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzICh1c3VhbGx5IHVwIHRvCisgICAgICA4ID0gPGNvbnN0YW50PlNORFJWX0NBUkRTPC9jb25zdGFudD4gY2FyZHMpLCB0aGV5IHNob3VsZCBiZQorICAgICAgYXJyYXlzLiAgVGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgYXJlIGRlZmluZWQgYWxyZWFkeSBhcworICAgICAgY29uc3RhbnRzIGZvciBlYXNlIG9mIHByb2dyYW1taW5nOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKKyAgc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworICBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBvbmx5IGEgc2luZ2xlIGNhcmQsIHRoZXkgY291bGQgYmUgc2luZ2xlCisgICAgdmFyaWFibGVzLCBpbnN0ZWFkLiAgPHBhcmFtZXRlcj5lbmFibGU8L3BhcmFtZXRlcj4gb3B0aW9uIGlzIG5vdAorICAgIGFsd2F5cyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlLCBidXQgaXQgd291bGRuJ3QgYmUgc28gYmFkIHRvIGhhdmUgYQorICAgIGR1bW15IG9wdGlvbiBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIGRlY2xhcmVkIHdpdGggdGhlIHN0YW5kYXJkCisgICAgPGZ1bmN0aW9uPm1vZHVsZV9wYXJhbSgpKCk8L2Z1bmN0aW9uPiwKKyAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtX2FycmF5KCkoKTwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5NT0RVTEVfUEFSTV9ERVNDKCk8L2Z1bmN0aW9uPiBtYWNyb3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNkZWZpbmUgQ0FSRF9OQU1FICJNeSBDaGlwIgorCisgIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKKyAgbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CisgIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOworICBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQWxzbywgZG9uJ3QgZm9yZ2V0IHRvIGRlZmluZSB0aGUgbW9kdWxlIGRlc2NyaXB0aW9uLCBjbGFzc2VzLAorICAgICAgbGljZW5zZSBhbmQgZGV2aWNlcy4gRXNwZWNpYWxseSwgdGhlIHJlY2VudCBtb2Rwcm9iZSByZXF1aXJlcyB0bworICAgICAgZGVmaW5lIHRoZSBtb2R1bGUgbGljZW5zZSBhcyBHUEwsIGV0Yy4sIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzCisgICAgICBzaG93biBhcyA8cXVvdGU+dGFpbnRlZDwvcXVvdGU+LiAKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIE1PRFVMRV9ERVNDUklQVElPTigiTXkgQ2hpcCIpOworICBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1ZlbmRvcixNeSBDaGlwIE5hbWV9fSIpOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIb3cgVG8gUHV0IFlvdXIgRHJpdmVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iaG93LXRvLXB1dC15b3VyLWRyaXZlciI+CisgICAgPHRpdGxlPkhvdyBUbyBQdXQgWW91ciBEcml2ZXIgSW50byBBTFNBIFRyZWU8L3RpdGxlPgorCTxzZWN0aW9uPgorCTx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKwk8cGFyYT4KKwlTbyBmYXIsIHlvdSd2ZSBsZWFybmVkIGhvdyB0byB3cml0ZSB0aGUgZHJpdmVyIGNvZGVzLgorCUFuZCB5b3UgbWlnaHQgaGF2ZSBhIHF1ZXN0aW9uIG5vdzogaG93IHRvIHB1dCBteSBvd24KKwlkcml2ZXIgaW50byB0aGUgQUxTQSBkcml2ZXIgdHJlZT8KKwlIZXJlIChmaW5hbGx5IDopIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgaXMgZGVzY3JpYmVkIGJyaWVmbHkuCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB0aGF0IHlvdSdsbCBjcmVhdGUgYSBuZXcgUENJIGRyaXZlciBmb3IgdGhlIGNhcmQKKwk8cXVvdGU+eHl6PC9xdW90ZT4uICBUaGUgY2FyZCBtb2R1bGUgbmFtZSB3b3VsZCBiZQorCXNuZC14eXouICBUaGUgbmV3IGRyaXZlciBpcyB1c3VhbGx5IHB1dCBpbnRvIGFsc2EtZHJpdmVyCisJdHJlZSwgPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbgorCXRoZSBjYXNlIG9mIFBDSSBjYXJkcy4KKwlUaGVuIHRoZSBkcml2ZXIgaXMgZXZhbHVhdGVkLCBhdWRpdGVkIGFuZCB0ZXN0ZWQKKwlieSBkZXZlbG9wZXJzIGFuZCB1c2Vycy4gIEFmdGVyIGEgY2VydGFpbiB0aW1lLCB0aGUgZHJpdmVyCisJd2lsbCBnbyB0byBhbHNhLWtlcm5lbCB0cmVlICh0byB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcnksCisJc3VjaCBhcyA8ZmlsZW5hbWU+YWxzYS1rZXJuZWwvcGNpPC9maWxlbmFtZT4pIGFuZCBldmVudHVhbGx5CisJaW50ZWdyYXRlZCBpbnRvIExpbnV4IDIuNiB0cmVlICh0aGUgZGlyZWN0b3J5IHdvdWxkIGJlCisJPGZpbGVuYW1lPmxpbnV4L3NvdW5kL3BjaTwvZmlsZW5hbWU+KS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCB0aGUgZHJpdmVyIGNvZGUgaXMgc3VwcG9zZWQKKwl0byBiZSBwdXQgaW50byBhbHNhLWRyaXZlciB0cmVlLiAgVGhlIHR3byBjYXNlcyBhcmUgYXNzdW1lZDoKKwlhIGRyaXZlciBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIHNvdXJjZSBmaWxlIGFuZCBvbmUgY29uc2lzdGluZworCW9mIHNldmVyYWwgc291cmNlIGZpbGVzLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbj4KKwk8dGl0bGU+RHJpdmVyIHdpdGggQSBTaW5nbGUgU291cmNlIEZpbGU8L3RpdGxlPgorCTxwYXJhPgorCTxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJTW9kaWZ5IGFsc2EtZHJpdmVyL3BjaS9NYWtlZmlsZQorCTwvcGFyYT4KKworCTxwYXJhPgorCVN1cHBvc2UgeW91IGhhdmUgYSBmaWxlIHh5ei5jLiAgQWRkIHRoZSBmb2xsb3dpbmcKKwl0d28gbGluZXMKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmQteHl6LW9ianMgOj0geHl6Lm8KKyAgb2JqLSQoQ09ORklHX1NORF9YWVopICs9IHNuZC14eXoubworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlDcmVhdGUgdGhlIEtjb25maWcgZW50cnkKKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlBZGQgdGhlIG5ldyBlbnRyeSBvZiBLY29uZmlnIGZvciB5b3VyIHh5eiBkcml2ZXIuCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgY29uZmlnIFNORF9YWVoKKyAgICAgICAgICB0cmlzdGF0ZSAiRm9vYmFyIFhZWiIKKyAgICAgICAgICBkZXBlbmRzIG9uIFNORAorICAgICAgICAgIHNlbGVjdCBTTkRfUENNCisgICAgICAgICAgaGVscAorICAgICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEZvb2JhciBYWVogc291bmRjYXJkLgorCisgICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisgICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBzbmQteHl6LgorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCXRoZSBsaW5lLCBzZWxlY3QgU05EX1BDTSwgc3BlY2lmaWVzIHRoYXQgdGhlIGRyaXZlciB4eXogc3VwcG9ydHMKKwlQQ00uICBJbiBhZGRpdGlvbiB0byBTTkRfUENNLCB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgYXJlCisJc3VwcG9ydGVkIGZvciBzZWxlY3QgY29tbWFuZDoKKwlTTkRfUkFXTUlESSwgU05EX1RJTUVSLCBTTkRfSFdERVAsIFNORF9NUFU0MDFfVUFSVCwKKwlTTkRfT1BMM19MSUIsIFNORF9PUEw0X0xJQiwgU05EX1ZYX0xJQiwgU05EX0FDOTdfQ09ERUMuCisJQWRkIHRoZSBzZWxlY3QgY29tbWFuZCBmb3IgZWFjaCBzdXBwb3J0ZWQgY29tcG9uZW50LgorCTwvcGFyYT4KKworCTxwYXJhPgorCU5vdGUgdGhhdCBzb21lIHNlbGVjdGlvbnMgaW1wbHkgdGhlIGxvd2xldmVsIHNlbGVjdGlvbnMuCisJRm9yIGV4YW1wbGUsIFBDTSBpbmNsdWRlcyBUSU1FUiwgTVBVNDAxX1VBUlQgaW5jbHVkZXMgUkFXTUlESSwKKwlBQzk3X0NPREVDIGluY2x1ZGVzIFBDTSwgYW5kIE9QTDNfTElCIGluY2x1ZGVzIEhXREVQLgorCVlvdSBkb24ndCBuZWVkIHRvIGdpdmUgdGhlIGxvd2xldmVsIHNlbGVjdGlvbnMgYWdhaW4uCisJPC9wYXJhPgorCisJPHBhcmE+CisJRm9yIHRoZSBkZXRhaWxzIG9mIEtjb25maWcgc2NyaXB0LCByZWZlciB0byB0aGUga2J1aWxkCisJZG9jdW1lbnRhdGlvbi4KKwk8L3BhcmE+CisKKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVJ1biBjdnNjb21waWxlIHNjcmlwdCB0byByZS1nZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKKwlidWlsZCB0aGUgd2hvbGUgc3R1ZmYgYWdhaW4uCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisJPC9vcmRlcmVkbGlzdD4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24+CisJPHRpdGxlPkRyaXZlcnMgd2l0aCBTZXZlcmFsIFNvdXJjZSBGaWxlczwvdGl0bGU+CisJPHBhcmE+CisJU3VwcG9zZSB0aGF0IHRoZSBkcml2ZXIgc25kLXh5eiBoYXZlIHNldmVyYWwgc291cmNlIGZpbGVzLgorCVRoZXkgYXJlIGxvY2F0ZWQgaW4gdGhlIG5ldyBzdWJkaXJlY3RvcnksCisJcGNpL3h5ei4KKworCTxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJQWRkIGEgbmV3IGRpcmVjdG9yeSAoPGZpbGVuYW1lPnh5ejwvZmlsZW5hbWU+KSBpbgorCTxmaWxlbmFtZT5hbHNhLWRyaXZlci9wY2kvTWFrZWZpbGU8L2ZpbGVuYW1lPiBsaWtlIGJlbG93CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvYmotJChDT05GSUdfU05EKSArPSB4eXovCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVVuZGVyIHRoZSBkaXJlY3RvcnkgPGZpbGVuYW1lPnh5ejwvZmlsZW5hbWU+LCBjcmVhdGUgYSBNYWtlZmlsZQorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+U2FtcGxlIE1ha2VmaWxlIGZvciBhIGRyaXZlciB4eXo8L3RpdGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWZuZGVmIFNORF9UT1BESVIKKyAgU05EX1RPUERJUj0uLi8uLgorICBlbmRpZgorCisgIGluY2x1ZGUgJChTTkRfVE9QRElSKS90b3BsZXZlbC5jb25maWcKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL01ha2VmaWxlLmNvbmYKKworICBzbmQteHl6LW9ianMgOj0geHl6Lm8gYWJjLm8gZGVmLm8KKworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCisKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL1J1bGVzLm1ha2UKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoaXMgcHJvY2VkdXJlIGlzIGFzIHNhbWUgYXMgaW4gdGhlIGxhc3Qgc2VjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlSdW4gY3ZzY29tcGlsZSBzY3JpcHQgdG8gcmUtZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kCisJYnVpbGQgdGhlIHdob2xlIHN0dWZmIGFnYWluLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvb3JkZXJlZGxpc3Q+CisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBVc2VmdWwgRnVuY3Rpb25zICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0idXNlZnVsLWZ1bmN0aW9ucyI+CisgICAgPHRpdGxlPlVzZWZ1bCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLXByaW50ayI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+IGFuZCBmcmllbmRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIHByb3ZpZGVzIGEgdmVyYm9zZSB2ZXJzaW9uIG9mCisgICAgICA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gSWYgYSBrZXJuZWwgY29uZmlnCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9WRVJCT1NFX1BSSU5USzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcworICAgICAgZnVuY3Rpb24gcHJpbnRzIHRoZSBnaXZlbiBtZXNzYWdlIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgbmFtZQorICAgICAgYW5kIHRoZSBsaW5lIG9mIHRoZSBjYWxsZXIuIFRoZSA8Y29uc3RhbnQ+S0VSTl9YWFg8L2NvbnN0YW50PgorICAgICAgcHJlZml4IGlzIHByb2Nlc3NlZCBhcyAKKyAgICAgIHdlbGwgYXMgdGhlIG9yaWdpbmFsIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGRvZXMsIHNvIGl0J3MKKyAgICAgIHJlY29tbWVuZGVkIHRvIGFkZCB0aGlzIHByZWZpeCwgZS5nLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcHJpbnRrKEtFUk5fRVJSICJPaCBteSwgc29ycnksIGl0J3MgZXh0cmVtZWx5IGJhZCFcbiIpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgYWxzbyA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPidzIGZvcgorICAgICAgZGVidWdnaW5nLiA8ZnVuY3Rpb24+c25kX3ByaW50ZCgpPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgZm9yCisgICAgICBnZW5lcmFsIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYKKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4gaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIGlzCisgICAgICBjb21waWxlZCwgYW5kIHdvcmtzIGp1c3QgbGlrZQorICAgICAgPGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+LiBJZiB0aGUgQUxTQSBpcyBjb21waWxlZAorICAgICAgd2l0aG91dCB0aGUgZGVidWdnaW5nIGZsYWcsIGl0J3MgaWdub3JlZC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX3ByaW50ZGQoKTwvZnVuY3Rpb24+IGlzIGNvbXBpbGVkIGluIG9ubHkgd2hlbgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUdfREVURUNUPC9jb25zdGFudD4gaXMgc2V0LiBQbGVhc2Ugbm90ZQorICAgICAgdGhhdCA8Y29uc3RhbnQ+REVCVUdfREVURUNUPC9jb25zdGFudD4gaXMgbm90IHNldCBhcyBkZWZhdWx0CisgICAgICBldmVuIGlmIHlvdSBjb25maWd1cmUgdGhlIGFsc2EtZHJpdmVyIHdpdGgKKyAgICAgIDxvcHRpb24+LS13aXRoLWRlYnVnPWZ1bGw8L29wdGlvbj4gb3B0aW9uLiBZb3UgbmVlZCB0byBnaXZlCisgICAgICBleHBsaWNpdGx5IDxvcHRpb24+LS13aXRoLWRlYnVnPWRldGVjdDwvb3B0aW9uPiBvcHRpb24gaW5zdGVhZC4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLWFzc2VydCI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnNuZF9hc3NlcnQoKTwvZnVuY3Rpb24+PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2Fzc2VydCgpPC9mdW5jdGlvbj4gbWFjcm8gaXMgc2ltaWxhciB3aXRoIHRoZQorICAgICAgbm9ybWFsIDxmdW5jdGlvbj5hc3NlcnQoKTwvZnVuY3Rpb24+IG1hY3JvLiBGb3IgZXhhbXBsZSwgIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hc3NlcnQocG9pbnRlciAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSwgYW5kIHRoZQorICAgICAgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhY3Rpb24gaWYgaXQgZmFpbHMuIFdoZW4KKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4sIGlzIHNldCwgaXQgd2lsbCBzaG93IGFuCisgICAgICBlcnJvciBtZXNzYWdlIHN1Y2ggYXMgPGNvbXB1dGVyb3V0cHV0PkJVRz8gKHh4eCkgKGNhbGxlZCBmcm9tCisgICAgICB5eXkpPC9jb21wdXRlcm91dHB1dD4uIFdoZW4gbm8gZGVidWcgZmxhZyBpcyBzZXQsIHRoaXMgaXMKKyAgICAgIGlnbm9yZWQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1ydW50aW1lLWNoZWNrIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX3J1bnRpbWVfY2hlY2soKTwvZnVuY3Rpb24+PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG1hY3JvIGlzIHF1aXRlIHNpbWlsYXIgd2l0aAorICAgICAgPGZ1bmN0aW9uPnNuZF9hc3NlcnQoKTwvZnVuY3Rpb24+LiBVbmxpa2UKKyAgICAgIDxmdW5jdGlvbj5zbmRfYXNzZXJ0KCk8L2Z1bmN0aW9uPiwgdGhlIGV4cHJlc3Npb24gaXMgYWx3YXlzCisgICAgICBldmFsdWF0ZWQgcmVnYXJkbGVzcyBvZgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50Pi4gV2hlbgorICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50PiBpcyBzZXQsIHRoZSBtYWNybyB3aWxsCisgICAgICBzaG93IGEgbWVzc2FnZSBsaWtlIDxjb21wdXRlcm91dHB1dD5FUlJPUiAoeHgpIChjYWxsZWQgZnJvbQorICAgICAgeXl5KTwvY29tcHV0ZXJvdXRwdXQ+LiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYnVnIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX0JVRygpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0IGNhbGxzIDxmdW5jdGlvbj5zbmRfYXNzZXJ0KDAsKTwvZnVuY3Rpb24+IC0tIHRoYXQgaXMsIGp1c3QKKyAgICAgIHByaW50cyB0aGUgZXJyb3IgbWVzc2FnZSBhdCB0aGUgcG9pbnQuIEl0J3MgdXNlZnVsIHRvIHNob3cgdGhhdAorICAgICAgYSBmYXRhbCBlcnJvciBoYXBwZW5zIHRoZXJlLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQWNrbm93bGVkZ21lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYWNrbm93bGVkbWVudHMiPgorICAgIDx0aXRsZT5BY2tub3dsZWRnbWVudHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgSSB3b3VsZCBsaWtlIHRvIHRoYW5rIFBoaWwgS2VyciBmb3IgaGlzIGhlbHAgZm9yIGltcHJvdmVtZW50IGFuZAorICAgICAgY29ycmVjdGlvbnMgb2YgdGhpcyBkb2N1bWVudC4gCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIEtldmluIENvbmRlciByZWZvcm1hdHRlZCB0aGUgb3JpZ2luYWwgcGxhaW4tdGV4dCB0byB0aGUKKyAgICBEb2NCb29rIGZvcm1hdC4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgR2l1bGlhbm8gUG9jaGluaSBjb3JyZWN0ZWQgdHlwb3MgYW5kIGNvbnRyaWJ1dGVkIHRoZSBleGFtcGxlIGNvZGVzCisgICAgaW4gdGhlIGhhcmR3YXJlIGNvbnN0cmFpbnRzIHNlY3Rpb24uCisgICAgPC9wYXJhPgorICA8L2NoYXB0ZXI+CisKKworPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0pveXN0aWNrLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Kb3lzdGljay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkYTQxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Kb3lzdGljay50eHQKQEAgLTAsMCArMSw4NiBAQAorQW5hbG9nIEpveXN0aWNrIFN1cHBvcnQgb24gQUxTQSBEcml2ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgT2N0LiAxNCwgMjAwMworICAgICAgICAgICBUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisKK0dlbmVyYWwKKy0tLS0tLS0KKworRmlyc3Qgb2YgYWxsLCB5b3UgbmVlZCB0byBlbmFibGUgR0FNRVBPUlQgc3VwcG9ydCBvbiBMaW51eCBrZXJuZWwgZm9yCit1c2luZyBhIGpveXN0aWNrIHdpdGggdGhlIEFMU0EgZHJpdmVyLiAgRm9yIHRoZSBkZXRhaWxzIG9mIGdhbWVwb3J0CitzdXBwb3J0LCByZWZlciB0byBEb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dC4KKworVGhlIGpveXN0aWNrIHN1cHBvcnQgb2YgQUxTQSBkcml2ZXJzIGlzIGRpZmZlcmVudCBiZXR3ZWVuIElTQSBhbmQgUENJCitjYXJkcy4gIEluIHRoZSBjYXNlIG9mIElTQSAoUG5QKSBjYXJkcywgaXQncyB1c3VhbGx5IGhhbmRsZWQgYnkgdGhlCitpbmRlcGVuZGVudCBtb2R1bGUgKG5zNTU4KS4gIE1lYW53aGlsZSwgdGhlIEFMU0EgUENJIGRyaXZlcnMgaGF2ZSB0aGUKK2J1aWx0LWluIGdhbWVwb3J0IHN1cHBvcnQuICBIZW5jZSwgd2hlbiB0aGUgQUxTQSBQQ0kgZHJpdmVyIGlzIGJ1aWx0CitpbiB0aGUga2VybmVsLCBDT05GSUdfR0FNRVBPUlQgbXVzdCBiZSAneScsIHRvby4gIE90aGVyd2lzZSwgdGhlCitnYW1lcG9ydCBzdXBwb3J0IG9uIHRoYXQgY2FyZCB3aWxsIGJlIChzaWxlbnRseSkgZGlzYWJsZWQuCisKK1NvbWUgYWRhcHRlciBtb2R1bGVzIHByb2JlIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIG9mIHRoZSBkZXZpY2UgYXQKK3RoZSBsb2FkIHRpbWUuICBJdCdkIGJlIHNhZmVyIHRvIHBsdWcgaW4gdGhlIGpveXN0aWNrIGRldmljZSBiZWZvcmUKK2xvYWRpbmcgdGhlIG1vZHVsZS4KKworCitQQ0kgQ2FyZHMKKy0tLS0tLS0tLQorCitGb3IgUENJIGNhcmRzLCB0aGUgam95c3RpY2sgaXMgZW5hYmxlZCB3aGVuIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUKK29wdGlvbiBpcyBzcGVjaWZpZWQuICBTb21lIGRyaXZlcnMgZG9uJ3QgbmVlZCBvcHRpb25zLCBhbmQgdGhlCitqb3lzdGljayBzdXBwb3J0IGlzIGFsd2F5cyBlbmFibGVkLiAgSW4gdGhlIGZvcm1lciBBTFNBIHZlcnNpb24sIHRoZXJlCit3YXMgYSBkeW5hbWljIGNvbnRyb2wgQVBJIGZvciB0aGUgam95c3RpY2sgYWN0aXZhdGlvbi4gIEl0IHdhcworY2hhbmdlZCwgaG93ZXZlciwgdG8gdGhlIHN0YXRpYyBtb2R1bGUgb3B0aW9ucyBiZWNhdXNlIG9mIHRoZSBzeXN0ZW0KK3N0YWJpbGl0eSBhbmQgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQuCisKK1RoZSBmb2xsb3dpbmcgUENJIGRyaXZlcnMgc3VwcG9ydCB0aGUgam95c3RpY2sgbmF0aXZlbHkuCisKKyAgICBEcml2ZXIJTW9kdWxlIE9wdGlvbglBdmFpbGFibGUgVmFsdWVzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWxzNDAwMAlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IGFueSBhZGRyZXNzIChlLmcuIDB4MjAwKQorICAgIGF1ODh4MAlOL0EJCU4vQQorICAgIGF6ZjMzMjgJam95c3RpY2sJMCA9IGRpc2FibGUsIDEgPSBlbmFibGUsIC0xID0gYXV0byAoZGVmYXVsdCkKKyAgICBlbnMxMzcwCWpveXN0aWNrCTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIGVuczEzNzEJam95c3RpY2tfcG9ydAkwID0gZGlzYWJsZSAoZGVmYXVsdCksIDEgPSBhdXRvLWRldGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFudWFsOiAweDIwMCwgMHgyMDgsIDB4MjEwLCAweDIxOAorICAgIGNtaXBjaQlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IGFueSBhZGRyZXNzIChlLmcuIDB4MjAwKQorICAgIGNzNDI4MQlOL0EJCU4vQQorICAgIGNzNDZ4eAlOL0EJCU4vQQorICAgIGVzMTkzOAlOL0EJCU4vQQorICAgIGVzMTk2OAlqb3lzdGljawkwID0gZGlzYWJsZSAoZGVmYXVsdCksIDEgPSBlbmFibGUKKyAgICBzb25pY3ZpYmVzCU4vQQkJTi9BCisgICAgdHJpZGVudAlOL0EJCU4vQQorICAgIHZpYTgyeHgoKjEpCWpveXN0aWNrCTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGVuYWJsZQorICAgIHltZnBjaQlqb3lzdGlja19wb3J0CTAgPSBkaXNhYmxlIChkZWZhdWx0KSwgMSA9IGF1dG8tZGV0ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWw6IDB4MjAxLCAweDIwMiwgMHgyMDQsIDB4MjA1KCoyKQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgKjEpICBWSUE2ODZBL0Igb25seQorICAgICoyKSAgV2l0aCBZTUY3NDQvNzU0IGNoaXBzLCB0aGUgcG9ydCBhZGRyZXNzIGNhbiBiZSBjaG9zZW4gYXJiaXRyYXJpbHkKKworVGhlIGZvbGxvd2luZyBkcml2ZXJzIGRvbid0IHN1cHBvcnQgZ2FtZXBvcnQgbmF0aXZlbHksIGJ1dCB0aGVyZSBhcmUKK2FkZGl0aW9uYWwgbW9kdWxlcy4gIExvYWQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIHRvIGFkZCB0aGUgZ2FtZXBvcnQKK3N1cHBvcnQuCisKKyAgICBEcml2ZXIJQWRkaXRpb25hbCBNb2R1bGUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGVtdTEwazEJZW11MTBrMS1ncAorICAgIGZtODAxCWZtODAxLWdwCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogdGhlICJwY2lnYW1lIiBhbmQgImNzNDYxeCIgbW9kdWxlcyBhcmUgZm9yIHRoZSBPU1MgZHJpdmVycyBvbmx5LgorICAgICAgVGhlc2UgQUxTQSBkcml2ZXJzIChjczQ2eHgsIHRyaWRlbnQgYW5kIGF1ODh4MCkgaGF2ZSB0aGUKKyAgICAgIGJ1aWx0LWluIGdhbWVwb3J0IHN1cHBvcnQuCisKK0FzIG1lbnRpb25lZCBhYm92ZSwgQUxTQSBQQ0kgZHJpdmVycyBoYXZlIHRoZSBidWlsdC1pbiBnYW1lcG9ydAorc3VwcG9ydCwgc28geW91IGRvbid0IGhhdmUgdG8gbG9hZCBuczU1OCBtb2R1bGUuICBKdXN0IGxvYWQgImpveWRldiIKK2FuZCB0aGUgYXBwcm9wcmlhdGUgYWRhcHRlciBtb2R1bGUgKGUuZy4gImFuYWxvZyIpLgorCisKK0lTQSBDYXJkcworLS0tLS0tLS0tCisKK0FMU0EgSVNBIGRyaXZlcnMgZG9uJ3QgaGF2ZSB0aGUgYnVpbHQtaW4gZ2FtZXBvcnQgc3VwcG9ydC4KK0luc3RlYWQsIHlvdSBuZWVkIHRvIGxvYWQgIm5zNTU4IiBtb2R1bGUgaW4gYWRkaXRpb24gdG8gImpveWRldiIgYW5kCit0aGUgYWRhcHRlciBtb2R1bGUgKGUuZy4gImFuYWxvZyIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL01JWEFSVC50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvTUlYQVJULnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2I5NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL01JWEFSVC50eHQKQEAgLTAsMCArMSwxMDAgQEAKKyAgICBBbHNhIGRyaXZlciBmb3IgRGlnaWdyYW0gbWlYYXJ0OCBhbmQgbWlYYXJ0OEFFUy9FQlUgc291bmRjYXJkcworCSAgICBEaWdpZ3JhbSA8YWxzYUBkaWdpZ3JhbS5jb20+CisKKworR0VORVJBTAorPT09PT09PQorCitUaGUgbWlYYXJ0OCBpcyBhIG11bHRpY2hhbm5lbCBhdWRpbyBwcm9jZXNzaW5nIGFuZCBtaXhpbmcgc291bmRjYXJkCit0aGF0IGhhcyA0IHN0ZXJlbyBhdWRpbyBpbnB1dHMgYW5kIDQgc3RlcmVvIGF1ZGlvIG91dHB1dHMuCitUaGUgbWlYYXJ0OEFFUy9FQlUgaXMgdGhlIHNhbWUgd2l0aCBhIGFkZC1vbiBjYXJkIHRoYXQgb2ZmZXJzIGZ1cnRoZXIKKzQgZGlnaXRhbCBzdGVyZW8gYXVkaW8gaW5wdXRzIGFuZCBvdXRwdXRzLgorRnVydGhlcm1vcmUgdGhlIGFkZC1vbiBjYXJkIG9mZmVycyBleHRlcm5hbCBjbG9jayBzeW5jaHJvbmlzYXRpb24KKyhBRVMvRUJVLCBXb3JkIENsb2NrLCBUaW1lIENvZGUgYW5kIFZpZGVvIFN5bmNocm8pCisKK1RoZSBtYWluYm9hcmQgaGFzIGEgUG93ZXJQQyB0aGF0IG9mZmVycyBvbmJvYXJkIG1wZWcgZW5jb2RpbmcgYW5kCitkZWNvZGluZywgc2FtcGxlcmF0ZSBjb252ZXJzaW9ucyBhbmQgdmFyaW91cyBlZmZlY3RzLgorCitUaGUgZHJpdmVyIGRvbid0IHdvcmsgcHJvcGVybHkgYXQgYWxsIHVudGlsIHRoZSBjZXJ0YWluIGZpcm13YXJlcworYXJlIGxvYWRlZCwgaS5lLiBubyBQQ00gbm9yIG1peGVyIGRldmljZXMgd2lsbCBhcHBlYXIuCitVc2UgdGhlIG1peGFydGxvYWRlciB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgYWxzYS10b29scyBwYWNrYWdlLgorCisKK1ZFUlNJT04gMC4xLjAKKz09PT09PT09PT09PT0KKworT25lIG1pWGFydDggYm9hcmQgd2lsbCBiZSByZXByZXNlbnRlZCBhcyA0IGFsc2EgY2FyZHMsIGVhY2ggd2l0aCAxCitzdGVyZW8gYW5hbG9nIGNhcHR1cmUgJ3BjbTBjJyBhbmQgMSBzdGVyZW8gYW5hbG9nIHBsYXliYWNrICdwY20wcCcgZGV2aWNlLgorV2l0aCBhIG1pWGFydDhBRVMvRUJVIHRoZXJlIGlzIGluIGFkZGl0aW9uIDEgc3RlcmVvIGRpZ2l0YWwgaW5wdXQKKydwY20xYycgYW5kIDEgc3RlcmVvIGRpZ2l0YWwgb3V0cHV0ICdwY20xcCcgcGVyIGNhcmQuCisKK0Zvcm1hdHMKKy0tLS0tLS0KK1U4LCBTMTZfTEUsIFMxNl9CRSwgUzI0XzNMRSwgUzI0XzNCRSwgRkxPQVRfTEUsIEZMT0FUX0JFCitTYW1wbGUgcmF0ZXMgOiA4MDAwIC0gNDgwMDAgSHogY29udGlub3VzbHkKKworUGxheWJhY2sKKy0tLS0tLS0tCitGb3IgaW5zdGFuY2UgdGhlIHBsYXliYWNrIGRldmljZXMgYXJlIGNvbmZpZ3VyZWQgdG8gaGF2ZSBtYXguIDQKK3N1YnN0cmVhbXMgcGVyZm9ybWluZyBoYXJkd2FyZSBtaXhpbmcuIFRoaXMgY291bGQgYmUgY2hhbmdlZCB0byBhCittYXhpbXVtIG9mIDI0IHN1YnN0cmVhbXMgaWYgd2lzaGVkLgorTW9ubyBmaWxlcyB3aWxsIGJlIHBsYXllZCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbC4gRWFjaCBjaGFubmVsCitjYW4gYmUgbXV0ZWQgZm9yIGVhY2ggc3RyZWFtIHRvIHVzZSA4IGFuYWxvZy9kaWdpdGFsIG91dHB1dHMgc2VwZXJhdGVseS4KKworQ2FwdHVyZQorLS0tLS0tLQorVGhlcmUgaXMgb25lIHN1YnN0cmVhbSBwZXIgY2FwdHVyZSBkZXZpY2UuIEZvciBpbnN0YW5jZSBvbmx5IHN0ZXJlbworZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgorCitNaXhlcgorLS0tLS0KKzxNYXN0ZXI+IGFuZCA8TWFzdGVyIENhcHR1cmU+IDogYW5hbG9nIHZvbHVtZSBjb250cm9sIG9mIHBsYXliYWNrIGFuZCBjYXB0dXJlIFBDTS4KKzxQQ00gMC0zPiBhbmQgPFBDTSBDYXB0dXJlPiA6IGRpZ2l0YWwgdm9sdW1lIGNvbnRyb2wgb2YgZWFjaCBhbmFsb2cgc3Vic3RyZWFtLgorPEFFUyAwLTM+IGFuZCA8QUVTIENhcHR1cmU+IDogZGlnaXRhbCB2b2x1bWUgY29udHJvbCBvZiBlYWNoIEFFUy9FQlUgc3Vic3RyZWFtLgorPE1vbml0b3Jpbmc+IDogTG9vcGJhY2sgZnJvbSAncGNtMGMnIHRvICdwY20wcCcgd2l0aCBkaWdpdGFsIHZvbHVtZQorYW5kIG11dGUgY29udHJvbC4KKworUmVtIDogZm9yIGJlc3QgYXVkaW8gcXVhbGl0eSB0cnkgdG8ga2VlcCBhIDAgYXR0ZW51YXRpb24gb24gdGhlIFBDTQorYW5kIEFFUyB2b2x1bWUgY29udHJvbHMgd2hpY2ggaXMgc2V0IGJ5IDIxOSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDI1NQorKGFib3V0IDg2JSB3aXRoIGFsc2FtaXhlcikKKworCitOT1QgWUVUIElNUExFTUVOVEVECis9PT09PT09PT09PT09PT09PT09CisKKy0gZXh0ZXJuYWwgY2xvY2sgc3VwcG9ydCAoQUVTL0VCVSwgV29yZCBDbG9jaywgVGltZSBDb2RlLCBWaWRlbyBTeW5jKQorLSBNUEVHIGF1ZGlvIGZvcm1hdHMKKy0gbW9ubyByZWNvcmQKKy0gb24tYm9hcmQgZWZmZWN0cyBhbmQgc2FtcGxlcmF0ZSBjb252ZXJzaW9ucworLSBsaW5rZWQgc3RyZWFtcworCisKK0ZJUk1XQVJFCis9PT09PT09PQorCitbQXMgb2YgMi42LjExLCB0aGUgZmlybXdhcmUgY2FuIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IHdpdGggaG90cGx1ZworIHdoZW4gQ09ORklHX0ZXX0xPQURFUiBpcyBzZXQuICBUaGUgbWl4YXJ0bG9hZGVyIGlzIG5lY2Vzc2FyeSBvbmx5CisgZm9yIG9sZGVyIHZlcnNpb25zIG9yIHdoZW4geW91IGJ1aWxkIHRoZSBkcml2ZXIgaW50byBrZXJuZWwuXQorIAorRm9yIGxvYWRpbmcgdGhlIGZpcm13YXJlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpcyBsb2FkZWQsIHVzZQordGhlIHBvc3QtaW5zdGFsbCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsIGFkZCB0aGUgZm9sbG93aW5nIGVudHJ5IHRvCisvZXRjL21vZHByb2JlLmNvbmYgZm9yIG1pWGFydCBkcml2ZXI6CisKKwlpbnN0YWxsIHNuZC1taXhhcnQgL3NiaW4vbW9kcHJvYmUgLS1maXJzdC10aW1lIC1pIHNuZC1taXhhcnQgJiYgXAorCQkJICAgL3Vzci9iaW4vbWl4YXJ0bG9hZGVyCisoZm9yIDIuMi8yLjQga2VybmVscywgYWRkICJwb3N0LWluc3RhbGwgc25kLW1peGFydCAvdXNyL2Jpbi92eGxvYWRlciIgdG8KKyAvZXRjL21vZHVsZXMuY29uZiwgaW5zdGVhZC4pCisKK1RoZSBmaXJtd2FyZSBiaW5hcmllcyBhcmUgaW5zdGFsbGVkIG9uIC91c3Ivc2hhcmUvYWxzYS9maXJtd2FyZQorKG9yIC91c3IvbG9jYWwvc2hhcmUvYWxzYS9maXJtd2FyZSwgZGVwZW5kaW5nIHRvIHRoZSBwcmVmaXggb3B0aW9uIG9mCitjb25maWd1cmUpLiAgVGhlcmUgd2lsbCBiZSBhIG1pWGFydC5jb25mIGZpbGUsIHdoaWNoIGRlZmluZSB0aGUgZHNwIGltYWdlCitmaWxlcy4KKworVGhlIGZpcm13YXJlIGZpbGVzIGFyZSBjb3B5cmlnaHQgYnkgRGlnaWdyYW0gU0EKKworCitDT1BZUklHSFQKKz09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDMgRGlnaWdyYW0gU0EgPGFsc2FAZGlnaWdyYW0uY29tPgorRGlzdHJpYnV0YWxiZSB1bmRlciBHUEwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvT1NTLUVtdWxhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvT1NTLUVtdWxhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyYTAyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9PU1MtRW11bGF0aW9uLnR4dApAQCAtMCwwICsxLDI5NyBAQAorCQlOT1RFUyBPTiBLRVJORUwgT1NTLUVNVUxBVElPTgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJCUphbi4gMjIsIDIwMDQgIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKworCitNb2R1bGVzCis9PT09PT09CisKK0FMU0EgcHJvdmlkZXMgYSBwb3dlcmZ1bCBPU1MgZW11bGF0aW9uIG9uIHRoZSBrZXJuZWwuCitUaGUgT1NTIGVtdWxhdGlvbiBmb3IgUENNLCBtaXhlciBhbmQgc2VxdWVuY2VyIGRldmljZXMgaXMgaW1wbGVtZW50ZWQKK2FzIGFkZC1vbiBrZXJuZWwgbW9kdWxlcywgc25kLXBjbS1vc3MsIHNuZC1taXhlci1vc3MgYW5kIHNuZC1zZXEtb3NzLgorV2hlbiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIE9TUyBQQ00sIG1peGVyIG9yIHNlcXVlbmNlciBkZXZpY2VzLCB0aGUKK2NvcnJlc3BvbmRpbmcgbW9kdWxlIGhhcyB0byBiZSBsb2FkZWQuCisKK1RoZXNlIG1vZHVsZXMgYXJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgc2VydmljZQoraXMgY2FsbGVkLiAgVGhlIGFsaWFzIGlzIGRlZmluZWQgc291bmQtc2VydmljZS14LXksIHdoZXJlIHggYW5kIHkgYXJlCit0aGUgY2FyZCBudW1iZXIgYW5kIHRoZSBtaW5vciB1bml0IG51bWJlci4gIFVzdWFsbHkgeW91IGRvbid0IGhhdmUgdG8KK2RlZmluZSB0aGVzZSBhbGlhc2VzIGJ5IHlvdXJzZWxmLgorCitPbmx5IG5lY2Vzc2FyeSBzdGVwIGZvciBhdXRvLWxvYWRpbmcgb2YgT1NTIG1vZHVsZXMgaXMgdG8gZGVmaW5lIHRoZQorY2FyZCBhbGlhcyBpbiAvZXRjL21vZHByb2JlLmNvbmYsIHN1Y2ggYXMKKworCWFsaWFzIHNvdW5kLXNsb3QtMCBzbmQtZW11MTBrMQorCitBcyB0aGUgc2Vjb25kIGNhcmQsIGRlZmluZSBzb3VuZC1zbG90LTEgYXMgd2VsbC4KK05vdGUgdGhhdCB5b3UgY2FuJ3QgdXNlIHRoZSBhbGlhc2VkIG5hbWUgYXMgdGhlIHRhcmdldCBuYW1lIChpLmUuCisiYWxpYXMgc291bmQtc2xvdC0wIHNuZC1jYXJkLTAiIGRvZXNuJ3Qgd29yayBhbnkgbW9yZSBsaWtlIHRoZSBvbGQKK21vZHV0aWxzKS4KKworVGhlIGN1cnJlbnRseSBhdmFpbGFibGUgT1NTIGNvbmZpZ3VyYXRpb24gaXMgc2hvd24gaW4KKy9wcm9jL2Fzb3VuZC9vc3Mvc25kc3RhdC4gIFRoaXMgc2hvd3MgaW4gdGhlIHNhbWUgc3ludGF4IG9mCisvZGV2L3NuZHN0YXQsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbiB0aGUgY29tbWVyY2lhbCBPU1MgZHJpdmVyLgorT24gQUxTQSwgeW91IGNhbiBzeW1saW5rIC9kZXYvc25kc3RhdCB0byB0aGlzIHByb2MgZmlsZS4KKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgZGV2aWNlcyBsaXN0ZWQgaW4gdGhpcyBwcm9jIGZpbGUgYXBwZWFyIG9ubHkKK2FmdGVyIHRoZSBjb3JyZXNwb25kaW5nIE9TUy1lbXVsYXRpb24gbW9kdWxlIGlzIGxvYWRlZC4gIERvbid0IHdvcnJ5CitldmVuIGlmICJOT1QgRU5BQkxFRCBJTiBDT05GSUciIGlzIHNob3duIGluIGl0LgorCisKK0RldmljZSBNYXBwaW5nCis9PT09PT09PT09PT09PQorCitBTFNBIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgT1NTIGRldmljZSBmaWxlczoKKworCVBDTToKKwkJL2Rldi9kc3BYCisJCS9kZXYvYWRzcFgKKworCU1peGVyOgorCQkvZGV2L21peGVyWAorCisJTUlESToKKwkJL2Rldi9taWRpMFgKKwkJL2Rldi9hbWlkaTBYCisKKwlTZXF1ZW5jZXI6CisJCS9kZXYvc2VxdWVuY2VyCisJCS9kZXYvc2VxdWVuY2VyMiAoYWthIC9kZXYvbXVzaWMpCisKK3doZXJlIFggaXMgdGhlIGNhcmQgbnVtYmVyIGZyb20gMCB0byA3LgorCisoTk9URTogU29tZSBkaXN0cmlidXRpb25zIGhhdmUgdGhlIGRldmljZSBmaWxlcyBsaWtlIC9kZXYvbWlkaTAgYW5kCisgICAgICAgL2Rldi9taWRpMS4gIFRoZXkgYXJlIE5PVCBmb3IgT1NTIGJ1dCBmb3IgdGNsbWlkaSwgd2hpY2ggaXMKKyAgICAgICBhIHRvdGFsbHkgZGlmZmVyZW50IHRoaW5nLikKKworVW5saWtlIHRoZSByZWFsIE9TUywgQUxTQSBjYW5ub3QgdXNlIHRoZSBkZXZpY2UgZmlsZXMgbW9yZSB0aGFuIHRoZQorYXNzaWduZWQgb25lcy4gIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgY2FyZCBjYW5ub3QgdXNlIC9kZXYvZHNwMSBvcgorL2Rldi9kc3AyLCBidXQgb25seSAvZGV2L2RzcDAgYW5kIC9kZXYvYWRzcDAuCisKK0FzIHNlZW4gYWJvdmUsIFBDTSBhbmQgTUlESSBtYXkgaGF2ZSB0d28gZGV2aWNlcy4gIFVzdWFsbHksIHRoZSBmaXJzdAorUENNIGRldmljZSAoaHc6MCwwIGluIEFMU0EpIGlzIG1hcHBlZCB0byAvZGV2L2RzcCBhbmQgdGhlIHNlY29uZGFyeQorZGV2aWNlIChodzowLDEpIHRvIC9kZXYvYWRzcCAoaWYgYXZhaWxhYmxlKS4gIEZvciBNSURJLCAvZGV2L21pZGkgYW5kCisvZGV2L2FtaWRpLCByZXNwZWN0aXZlbHkuCisKK1lvdSBjYW4gY2hhbmdlIHRoaXMgZGV2aWNlIG1hcHBpbmcgdmlhIHRoZSBtb2R1bGUgb3B0aW9ucyBvZgorc25kLXBjbS1vc3MgYW5kIHNuZC1yYXdtaWRpLiAgSW4gdGhlIGNhc2Ugb2YgUENNLCB0aGUgZm9sbG93aW5nCitvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHNuZC1wY20tb3NzOgorCisJZHNwX21hcAkJUENNIGRldmljZSBudW1iZXIgYXNzaWduZWQgdG8gL2Rldi9kc3BYCisJCQkoZGVmYXVsdCA9IDApCisJYWRzcF9tYXAJUENNIGRldmljZSBudW1iZXIgYXNzaWduZWQgdG8gL2Rldi9hZHNwWAorCQkJKGRlZmF1bHQgPSAxKQorCitGb3IgZXhhbXBsZSwgdG8gbWFwIHRoZSB0aGlyZCBQQ00gZGV2aWNlIChodzowLDIpIHRvIC9kZXYvYWRzcDAsCitkZWZpbmUgbGlrZSB0aGlzOgorCisJb3B0aW9ucyBzbmQtcGNtLW9zcyBhZHNwX21hcD0yCisKK1RoZSBvcHRpb25zIHRha2UgYXJyYXlzLiAgRm9yIGNvbmZpZ3VyaW5nIHRoZSBzZWNvbmQgY2FyZCwgc3BlY2lmeQordHdvIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGNvbW1hLiAgRm9yIGV4YW1wbGUsIHRvIG1hcCB0aGUgdGhpcmQgUENNCitkZXZpY2Ugb24gdGhlIHNlY29uZCBjYXJkIHRvIC9kZXYvYWRzcDEsIGRlZmluZSBsaWtlIGJlbG93OgorCisJb3B0aW9ucyBzbmQtcGNtLW9zcyBhZHNwX21hcD0wLDIKKworVG8gY2hhbmdlIHRoZSBtYXBwaW5nIG9mIE1JREkgZGV2aWNlcywgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZQorYXZhaWxhYmxlIGZvciBzbmQtcmF3bWlkaToKKworCW1pZGlfbWFwCU1JREkgZGV2aWNlIG51bWJlciBhc3NpZ25lZCB0byAvZGV2L21pZGkwWAorCQkJKGRlZmF1bHQgPSAwKQorCWFtaWRpX21hcAlNSURJIGRldmljZSBudW1iZXIgYXNzaWduZWQgdG8gL2Rldi9hbWlkaTBYCisJCQkoZGVmYXVsdCA9IDEpCisKK0ZvciBleGFtcGxlLCB0byBhc3NpZ24gdGhlIHRoaXJkIE1JREkgZGV2aWNlIG9uIHRoZSBmaXJzdCBjYXJkIHRvCisvZGV2L21pZGkwMCwgZGVmaW5lIGFzIGZvbGxvd3M6CisKKwlvcHRpb25zIHNuZC1yYXdtaWRpIG1pZGlfbWFwPTIKKworCitQQ00gTW9kZQorPT09PT09PT0KKworQXMgZGVmYXVsdCwgQUxTQSBlbXVsYXRlcyB0aGUgT1NTIFBDTSB3aXRoIHNvLWNhbGxlZCBwbHVnaW4gbGF5ZXIsCitpLmUuIHRyaWVzIHRvIGNvbnZlcnQgdGhlIHNhbXBsZSBmb3JtYXQsIHJhdGUgb3IgY2hhbm5lbHMKK2F1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2FyZCBkb2Vzbid0IHN1cHBvcnQgaXQgbmF0aXZlbHkuCitUaGlzIHdpbGwgbGVhZCB0byBzb21lIHByb2JsZW1zIGZvciBzb21lIGFwcGxpY2F0aW9ucyBsaWtlIHF1YWtlIG9yCit3aW5lLCBlc3BlY2lhbGx5IGlmIHRoZXkgdXNlIHRoZSBjYXJkIG9ubHkgaW4gdGhlIE1NQVAgbW9kZS4KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBQQ00gcGVyIGFwcGxpY2F0aW9uIGJ5Cit3cml0aW5nIGEgY29tbWFuZCB0byB0aGUgcHJvYyBmaWxlLiAgVGhlcmUgaXMgYSBwcm9jIGZpbGUgZm9yIGVhY2ggUENNCitzdHJlYW0sIC9wcm9jL2Fzb3VuZC9jYXJkWC9wY21ZW2NwXS9vc3MsIHdoZXJlIFggaXMgdGhlIGNhcmQgbnVtYmVyCisoemVyby1iYXNlZCksIFkgdGhlIFBDTSBkZXZpY2UgbnVtYmVyICh6ZXJvLWJhc2VkKSwgYW5kICdwJyBpcyBmb3IKK3BsYXliYWNrIGFuZCAnYycgZm9yIGNhcHR1cmUsIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB0aGlzIHByb2MgZmlsZQorZXhpc3RzIG9ubHkgYWZ0ZXIgc25kLXBjbS1vc3MgbW9kdWxlIGlzIGxvYWRlZC4KKworVGhlIGNvbW1hbmQgc2VxdWVuY2UgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisJYXBwX25hbWUgZnJhZ21lbnRzIGZyYWdtZW50X3NpemUgW29wdGlvbnNdCisKK2FwcF9uYW1lIGlzIHRoZSBuYW1lIG9mIGFwcGxpY2F0aW9uIHdpdGggKGhpZ2hlciBwcmlvcml0eSkgb3Igd2l0aG91dAorcGF0aC4KK2ZyYWdtZW50cyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgb3IgemVybyBpZiBubyBzcGVjaWZpYworbnVtYmVyIGlzIGdpdmVuLgorZnJhZ21lbnRfc2l6ZSBpcyB0aGUgc2l6ZSBvZiBmcmFnbWVudCBpbiBieXRlcyBvciB6ZXJvIGlmIG5vdCBnaXZlbi4KK29wdGlvbnMgaXMgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlCithdmFpbGFibGU6CisKKwlkaXNhYmxlCQl0aGUgYXBwbGljYXRpb24gdHJpZXMgdG8gb3BlbiBhIHBjbSBkZXZpY2UgZm9yCisJCQl0aGlzIGNoYW5uZWwgYnV0IGRvZXMgbm90IHdhbnQgdG8gdXNlIGl0LgorCWRpcmVjdAkJZG9uJ3QgdXNlIHBsdWdpbnMKKwlibG9jawkJZm9yY2UgYmxvY2sgb3BlbiBtb2RlCisJbm9uLWJsb2NrCWZvcmNlIG5vbi1ibG9jayBvcGVuIG1vZGUKKwlwYXJ0aWFsLWZyYWcJd3JpdGUgYWxzbyBwYXJ0aWFsIGZyYWdtZW50cyAoYWZmZWN0cyBwbGF5YmFjayBvbmx5KQorCW5vLXNpbGVuY2UJZG8gbm90IGZpbGwgc2lsZW5jZSBhaGVhZCB0byBhdm9pZCBjbGlja3MKKworVGhlIGRpc2FibGUgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIG9uZSBzdHJlYW0gZGlyZWN0aW9uIChwbGF5YmFjayBvcgorY2FwdHVyZSkgaXMgbm90IGhhbmRsZWQgY29ycmVjdGx5IGJ5IHRoZSBhcHBsaWNhdGlvbiBhbHRob3VnaCB0aGUKK2hhcmR3YXJlIGl0c2VsZiBkb2VzIHN1cHBvcnQgYm90aCBkaXJlY3Rpb25zLgorVGhlIGRpcmVjdCBvcHRpb24gaXMgdXNlZCwgYXMgbWVudGlvbmVkIGFib3ZlLCB0byBieXBhc3MgdGhlIGF1dG9tYXRpYworY29udmVyc2lvbiBhbmQgdXNlZnVsIGZvciBNTUFQLWFwcGxpY2F0aW9ucy4KK0ZvciBleGFtcGxlLCB0byBwbGF5YmFjayB0aGUgZmlyc3QgUENNIGRldmljZSB3aXRob3V0IHBsdWdpbnMgZm9yCitxdWFrZSwgc2VuZCBhIGNvbW1hbmQgdmlhIGVjaG8gbGlrZSB0aGUgZm9sbG93aW5nOgorCisJJSBlY2hvICJxdWFrZSAwIDAgZGlyZWN0IiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC9vc3MKKworV2hpbGUgcXVha2Ugd2FudHMgb25seSBwbGF5YmFjaywgeW91IG1heSBhcHBlbmQgdGhlIHNlY29uZCBjb21tYW5kCit0byBub3RpZnkgZHJpdmVyIHRoYXQgb25seSB0aGlzIGRpcmVjdGlvbiBpcyBhYm91dCB0byBiZSBhbGxvY2F0ZWQ6CisKKwklIGVjaG8gInF1YWtlIDAgMCBkaXNhYmxlIiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wYy9vc3MKKworVGhlIHBlcm1pc3Npb24gb2YgcHJvYyBmaWxlcyBkZXBlbmQgb24gdGhlIG1vZHVsZSBvcHRpb25zIG9mIHNuZC4KK0FzIGRlZmF1bHQgaXQncyBzZXQgYXMgcm9vdCwgc28geW91J2xsIGxpa2VseSBuZWVkIHRvIGJlIHN1cGVydXNlciBmb3IKK3NlbmRpbmcgdGhlIGNvbW1hbmQgYWJvdmUuCisKK1RoZSBibG9jayBhbmQgbm9uLWJsb2NrIG9wdGlvbnMgYXJlIHVzZWQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorb3BlbmluZyB0aGUgZGV2aWNlIGZpbGUuCisKK0FzIGRlZmF1bHQsIEFMU0EgYmVoYXZlcyBhcyBvcmlnaW5hbCBPU1MgZHJpdmVycywgaS5lLiBkb2VzIG5vdCBibG9jawordGhlIGZpbGUgd2hlbiBpdCdzIGJ1c3kuIFRoZSAtRUJVU1kgZXJyb3IgaXMgcmV0dXJuZWQgaW4gdGhpcyBjYXNlLgorCitUaGlzIGJsb2NraW5nIGJlaGF2aW9yIGNhbiBiZSBjaGFuZ2VkIGdsb2JhbGx5IHZpYSBub25ibG9ja19vcGVuCittb2R1bGUgb3B0aW9uIG9mIHNuZC1wY20tb3NzLiAgRm9yIHVzaW5nIHRoZSBibG9ja2luZyBtb2RlIGFzIGRlZmF1bHQKK2ZvciBPU1MgZGV2aWNlcywgZGVmaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKworCW9wdGlvbnMgc25kLXBjbS1vc3Mgbm9uYmxvY2tfb3Blbj0wCisKK1RoZSBwYXJ0aWFsLWZyYWcgYW5kIG5vLXNpbGVuY2UgY29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkIHJlY2VudGx5LgorQm90aCBjb21tYW5kcyBhcmUgZm9yIG9wdGltaXphdGlvbiB1c2Ugb25seS4gIFRoZSBmb3JtZXIgY29tbWFuZAorc3BlY2lmaWVzIHRvIGludm9rZSB0aGUgd3JpdGUgdHJhbnNmZXIgb25seSB3aGVuIHRoZSB3aG9sZSBmcmFnbWVudCBpcworZmlsbGVkLiAgVGhlIGxhdHRlciBzdG9wcyB3cml0aW5nIHRoZSBzaWxlbmNlIGRhdGEgYWhlYWQKK2F1dG9tYXRpY2FsbHkuICBCb3RoIGFyZSBkaXNhYmxlZCBhcyBkZWZhdWx0LgorCitZb3UgY2FuIGNoZWNrIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBjb25maWd1cmF0aW9uIGJ5IHJlYWRpbmcgdGhlIHByb2MKK2ZpbGUuICBUaGUgcmVhZCBpbWFnZSBjYW4gYmUgc2VudCB0byB0aGUgcHJvYyBmaWxlIGFnYWluLCBoZW5jZSB5b3UKK2NhbiBzYXZlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKworCSUgY2F0IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC9vc3MgPiAvc29tZXdoZXJlL29zcy1jZmcKKworYW5kIHJlc3RvcmUgaXQgbGlrZQorCisJJSBjYXQgL3NvbWV3aGVyZS9vc3MtY2ZnID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworCitBbHNvLCBmb3IgY2xlYXJpbmcgYWxsIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHNlbmQgImVyYXNlIiBjb21tYW5kCithcyBiZWxvdzoKKworCSUgZWNobyAiZXJhc2UiID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL29zcworCisKK01peGVyIEVsZW1lbnRzCis9PT09PT09PT09PT09PQorCitTaW5jZSBBTFNBIGhhcyBjb21wbGV0ZWx5IGRpZmZlcmVudCBtaXhlciBpbnRlcmZhY2UsIHRoZSBlbXVsYXRpb24gb2YKK09TUyBtaXhlciBpcyByZWxhdGl2ZWx5IGNvbXBsaWNhdGVkLiAgQUxTQSBidWlsZHMgdXAgYSBtaXhlciBlbGVtZW50Citmcm9tIHNldmVyYWwgZGlmZmVyZW50IEFMU0EgKG1peGVyKSBjb250cm9scyBiYXNlZCBvbiB0aGUgbmFtZQorc3RyaW5nLiAgRm9yIGV4YW1wbGUsIHRoZSB2b2x1bWUgZWxlbWVudCBTT1VORF9NSVhFUl9QQ00gaXMgY29tcG9zZWQKK2Zyb20gIlBDTSBQbGF5YmFjayBWb2x1bWUiIGFuZCAiUENNIFBsYXliYWNrIFN3aXRjaCIgY29udHJvbHMgZm9yIHRoZQorcGxheWJhY2sgZGlyZWN0aW9uIGFuZCBmcm9tICJQQ00gQ2FwdHVyZSBWb2x1bWUiIGFuZCAiUENNIENhcHR1cmUKK1N3aXRjaCIgZm9yIHRoZSBjYXB0dXJlIGRpcmVjdG9yeSAoaWYgZXhpc3RzKS4gIFdoZW4gdGhlIFBDTSB2b2x1bWUgb2YKK09TUyBpcyBjaGFuZ2VkLCBhbGwgdGhlIHZvbHVtZSBhbmQgc3dpdGNoIGNvbnRyb2xzIGFib3ZlIGFyZSBhZGp1c3RlZAorYXV0b21hdGljYWxseS4KKworQXMgZGVmYXVsdCwgQUxTQSB1c2VzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBmb3IgT1NTIHZvbHVtZXM6CisKKwlPU1Mgdm9sdW1lCQlBTFNBIGNvbnRyb2wJCUluZGV4CisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTT1VORF9NSVhFUl9WT0xVTUUgCU1hc3RlcgkJCTAKKwlTT1VORF9NSVhFUl9CQVNTCVRvbmUgQ29udHJvbCAtIEJhc3MJMAorCVNPVU5EX01JWEVSX1RSRUJMRQlUb25lIENvbnRyb2wgLSBUcmVibGUJMAorCVNPVU5EX01JWEVSX1NZTlRICVN5bnRoCQkJMAorCVNPVU5EX01JWEVSX1BDTQkJUENNCQkJMAorCVNPVU5EX01JWEVSX1NQRUFLRVIJUEMgU3BlYWtlciAJCTAKKwlTT1VORF9NSVhFUl9MSU5FCUxpbmUJCQkwCisJU09VTkRfTUlYRVJfTUlDCQlNaWMgCQkJMAorCVNPVU5EX01JWEVSX0NECQlDRCAJCQkwCisJU09VTkRfTUlYRVJfSU1JWAlNb25pdG9yIE1peCAJCTAKKwlTT1VORF9NSVhFUl9BTFRQQ00JUENNCQkJMQorCVNPVU5EX01JWEVSX1JFQ0xFVgkobm90IGFzc2lnbmVkKQorCVNPVU5EX01JWEVSX0lHQUlOCUNhcHR1cmUJCQkwCisJU09VTkRfTUlYRVJfT0dBSU4JUGxheWJhY2sJCTAKKwlTT1VORF9NSVhFUl9MSU5FMQlBdXgJCQkwCisJU09VTkRfTUlYRVJfTElORTIJQXV4CQkJMQorCVNPVU5EX01JWEVSX0xJTkUzCUF1eAkJCTIKKwlTT1VORF9NSVhFUl9ESUdJVEFMMQlEaWdpdGFsCQkJMAorCVNPVU5EX01JWEVSX0RJR0lUQUwyCURpZ2l0YWwJCQkxCisJU09VTkRfTUlYRVJfRElHSVRBTDMJRGlnaXRhbAkJCTIKKwlTT1VORF9NSVhFUl9QSE9ORUlOCVBob25lCQkJMAorCVNPVU5EX01JWEVSX1BIT05FT1VUCVBob25lCQkJMQorCVNPVU5EX01JWEVSX1ZJREVPCVZpZGVvCQkJMAorCVNPVU5EX01JWEVSX1JBRElPCVJhZGlvCQkJMAorCVNPVU5EX01JWEVSX01PTklUT1IJTW9uaXRvcgkJCTAKKworVGhlIHNlY29uZCBjb2x1bW4gaXMgdGhlIGJhc2Utc3RyaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIEFMU0EKK2NvbnRyb2wuICBJbiBmYWN0LCB0aGUgY29udHJvbHMgd2l0aCAiWFhYIFtQbGF5YmFja3xDYXB0dXJlXQorW1ZvbHVtZXxTd2l0Y2hdIiB3aWxsIGJlIGNoZWNrZWQgaW4gYWRkaXRpb24uCisKK1RoZSBjdXJyZW50IGFzc2lnbm1lbnQgb2YgdGhlc2UgbWl4ZXIgZWxlbWVudHMgaXMgbGlzdGVkIGluIHRoZSBwcm9jCitmaWxlLCAvcHJvYy9hc291bmQvY2FyZFgvb3NzX21peGVyLCB3aGljaCB3aWxsIGJlIGxpa2UgdGhlIGZvbGxvd2luZworCisJVk9MVU1FICJNYXN0ZXIiIDAKKwlCQVNTICIiIDAKKwlUUkVCTEUgIiIgMAorCVNZTlRIICIiIDAKKwlQQ00gIlBDTSIgMAorCS4uLgorCit3aGVyZSB0aGUgZmlyc3QgY29sdW1uIGlzIHRoZSBPU1Mgdm9sdW1lIGVsZW1lbnQsIHRoZSBzZWNvbmQgY29sdW1uCit0aGUgYmFzZS1zdHJpbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgQUxTQSBjb250cm9sLCBhbmQgdGhlIHRoaXJkIHRoZQorY29udHJvbCBpbmRleC4gIFdoZW4gdGhlIHN0cmluZyBpcyBlbXB0eSwgaXQgbWVhbnMgdGhhdCB0aGUKK2NvcnJlc3BvbmRpbmcgT1NTIGNvbnRyb2wgaXMgbm90IGF2YWlsYWJsZS4KKworRm9yIGNoYW5naW5nIHRoZSBhc3NpZ25tZW50LCB5b3UgY2FuIHdyaXRlIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoaXMKK3Byb2MgZmlsZS4gIEZvciBleGFtcGxlLCB0byBtYXAgIldhdmUgUGxheWJhY2siIHRvIHRoZSBQQ00gdm9sdW1lLAorc2VuZCB0aGUgY29tbWFuZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwklIGVjaG8gJ1ZPTFVNRSAiV2F2ZSBQbGF5YmFjayIgMCcgPiAvcHJvYy9hc291bmQvY2FyZDAvb3NzX21peGVyCisKK1RoZSBjb21tYW5kIGlzIGV4YWN0bHkgYXMgc2FtZSBhcyBsaXN0ZWQgaW4gdGhlIHByb2MgZmlsZS4gIFlvdSBjYW4KK2NoYW5nZSBvbmUgb3IgbW9yZSBlbGVtZW50cywgb25lIHZvbHVtZSBwZXIgbGluZS4gIEluIHRoZSBsYXN0CitleGFtcGxlLCBib3RoICJXYXZlIFBsYXliYWNrIFZvbHVtZSIgYW5kICJXYXZlIFBsYXliYWNrIFN3aXRjaCIgd2lsbAorYmUgYWZmZWN0ZWQgd2hlbiBQQ00gdm9sdW1lIGlzIGNoYW5nZWQuCisKK0xpa2UgdGhlIGNhc2Ugb2YgUENNIHByb2MgZmlsZSwgdGhlIHBlcm1pc3Npb24gb2YgcHJvYyBmaWxlcyBkZXBlbmQgb24KK3RoZSBtb2R1bGUgb3B0aW9ucyBvZiBzbmQuICB5b3UnbGwgbGlrZWx5IG5lZWQgdG8gYmUgc3VwZXJ1c2VyIGZvcgorc2VuZGluZyB0aGUgY29tbWFuZCBhYm92ZS4KKworQXMgd2VsbCBhcyBpbiB0aGUgY2FzZSBvZiBQQ00gcHJvYyBmaWxlLCB5b3UgY2FuIHNhdmUgYW5kIHJlc3RvcmUgdGhlCitjdXJyZW50IG1peGVyIGNvbmZpZ3VyYXRpb24gYnkgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgd2hvbGUgZmlsZQoraW1hZ2UuCisKKworVW5zdXBwb3J0ZWQgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09PT09CisKK01NQVAgb24gSUNFMTcxMiBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lDRTE3MTIgc3VwcG9ydHMgb25seSB0aGUgdW5jb252ZW50aW9uYWwgZm9ybWF0LCBpbnRlcmxlYXZlZAorMTAtY2hhbm5lbHMgMjRiaXQgKHBhY2tlZCBpbiAzMmJpdCkgZm9ybWF0LiAgVGhlcmVmb3JlIHlvdSBjYW5ub3QgbW1hcAordGhlIGJ1ZmZlciBhcyB0aGUgY29udmVudGlvbmFsIChtb25vIG9yIDItY2hhbm5lbHMsIDggb3IgMTZiaXQpIGZvcm1hdAorb24gT1NTLgorCitVU0IgZGV2aWNlcworLS0tLS0tLS0tLS0KK1NvbWUgVVNCIGRldmljZXMgc3VwcG9ydCBvbmx5IDI0Yml0IGZvcm1hdCBwYWNrZWQgaW4gM2J5dGVzLiAgVGhpcworZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgT1NTIGFuZCBubyBjb252ZXJzaW9uIGlzIHByb3ZpZGVkIGJ5IGtlcm5lbAorT1NTIGVtdWxhdGlvbi4gIFlvdSBjYW4gdXNlIHRoZSB1c2VyLXNwYWNlIE9TUyBlbXVsYXRpb24gdmlhIGxpYmFvc3MKK2luc3RlYWQuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzVkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0CkBAIC0wLDAgKzEsMTkxIEBACisJCVByb2MgRmlsZXMgb2YgQUxTQSBEcml2ZXJzCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCVRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKworR2VuZXJhbAorLS0tLS0tLQorCitBTFNBIGhhcyBpdHMgb3duIHByb2MgdHJlZSwgL3Byb2MvYXNvdW5kLiAgTWFueSB1c2VmdWwgaW5mb3JtYXRpb24gYXJlCitmb3VuZCBpbiB0aGlzIHRyZWUuICBXaGVuIHlvdSBlbmNvdW50ZXIgYSBwcm9ibGVtIGFuZCBuZWVkIGRlYnVnZ2luZywKK2NoZWNrIHRoZSBmaWxlcyBsaXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworRWFjaCBjYXJkIGhhcyBpdHMgc3VidHJlZSBjYXJkWCwgd2hlcmUgWCBpcyBmcm9tIDAgdG8gNy4gVGhlCitjYXJkLXNwZWNpZmljIGZpbGVzIGFyZSBzdG9yZWQgaW4gdGhlIGNhcmQqIHN1YmRpcmVjdG9yaWVzLgorCisKK0dsb2JhbCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NhcmRzCisJU2hvd3MgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQgQUxTQSBkcml2ZXJzLAorCWluZGV4LCB0aGUgaWQgc3RyaW5nLCBzaG9ydCBhbmQgbG9uZyBkZXNjcmlwdGlvbnMuCisKK3ZlcnNpb24KKwlTaG93cyB0aGUgdmVyc2lvbiBzdHJpbmcgYW5kIGNvbXBpbGUgZGF0ZS4KKworbW9kdWxlcworCUxpc3RzIHRoZSBtb2R1bGUgb2YgZWFjaCBjYXJkCisKK2RldmljZXMKKwlMaXN0cyB0aGUgQUxTQSBuYXRpdmUgZGV2aWNlIG1hcHBpbmdzLgorCittZW1pbmZvCisJU2hvd3MgdGhlIHN0YXR1cyBvZiBhbGxvY2F0ZWQgcGFnZXMgdmlhIEFMU0EgZHJpdmVycy4KKwlBcHBlYXJzIG9ubHkgd2hlbiBDT05GSUdfU05EX0RFQlVHPXkuCisKK2h3ZGVwCisJTGlzdHMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgaHdkZXAgZGV2aWNlcyBpbiBmb3JtYXQgb2YKKwk8Y2FyZD4tPGRldmljZT46IDxuYW1lPgorCitwY20KKwlMaXN0cyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBQQ00gZGV2aWNlcyBpbiBmb3JtYXQgb2YKKwk8Y2FyZD4tPGRldmljZT46IDxpZD46IDxuYW1lPiA6IDxzdWItc3RyZWFtcz4KKwordGltZXIKKwlMaXN0cyB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSB0aW1lciBkZXZpY2VzCisKKworb3NzL2RldmljZXMKKwlMaXN0cyB0aGUgT1NTIGRldmljZSBtYXBwaW5ncy4KKworb3NzL3NuZHN0YXQKKwlQcm92aWRlcyB0aGUgb3V0cHV0IGNvbXBhdGlibGUgd2l0aCAvZGV2L3NuZHN0YXQuCisJWW91IGNhbiBzeW1saW5rIHRoaXMgdG8gL2Rldi9zbmRzdGF0LgorCisKK0NhcmQgU3BlY2lmaWMgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQtc3BlY2lmaWMgZmlsZXMgYXJlIGZvdW5kIGluIC9wcm9jL2Fzb3VuZC9jYXJkKiBkaXJlY3Rvcmllcy4KK1NvbWUgZHJpdmVycyAoZS5nLiBjbWlwY2kpIGhhdmUgdGhlaXIgb3duIHByb2MgZW50cmllcyBmb3IgdGhlCityZWdpc3RlciBkdW1wLCBldGMgKGUuZy4gL3Byb2MvYXNvdW5kL2NhcmQqL2NtaXBjaSBzaG93cyB0aGUgcmVnaXN0ZXIKK2R1bXApLiAgVGhlc2UgZmlsZXMgd291bGQgYmUgcmVhbGx5IGhlbHBmdWwgZm9yIGRlYnVnZ2luZy4KKworV2hlbiBQQ00gZGV2aWNlcyBhcmUgYXZhaWxhYmxlIG9uIHRoaXMgY2FyZCwgeW91IGNhbiBzZWUgZGlyZWN0b3JpZXMKK2xpa2UgcGNtMHAgb3IgcGNtMWMuICBUaGV5IGhvbGQgdGhlIFBDTSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBQQ00KK3N0cmVhbS4gIFRoZSBudW1iZXIgYWZ0ZXIgJ3BjbScgaXMgdGhlIFBDTSBkZXZpY2UgbnVtYmVyIGZyb20gMCwgYW5kCit0aGUgbGFzdCAncCcgb3IgJ2MnIG1lYW5zIHBsYXliYWNrIG9yIGNhcHR1cmUgZGlyZWN0aW9uLiAgVGhlIGZpbGVzIGluCit0aGlzIHN1YnRyZWUgaXMgZGVzY3JpYmVkIGxhdGVyLgorCitUaGUgc3RhdHVzIG9mIE1JREkgSS9PIGlzIGZvdW5kIGluIG1pZGkqIGZpbGVzLiAgSXQgc2hvd3MgdGhlIGRldmljZQorbmFtZSBhbmQgdGhlIHJlY2VpdmVkL3RyYW5zbWl0dGVkIGJ5dGVzIHRocm91Z2ggdGhlIE1JREkgZGV2aWNlLgorCitXaGVuIHRoZSBjYXJkIGlzIGVxdWlwcGVkIHdpdGggQUM5NyBjb2RlY3MsIHRoZXJlIGFyZSBjb2RlYzk3IyoKK3N1YmRpcmVjdG9yaWVzIChkZXNyaWJlZCBsYXRlcikuCisKK1doZW4gdGhlIE9TUyBtaXhlciBlbXVsYXRpb24gaXMgZW5hYmxlZCAoYW5kIHRoZSBtb2R1bGUgaXMgbG9hZGVkKSwKK29zc19taXhlciBmaWxlIGFwcGVhcnMgaGVyZSwgdG9vLiAgVGhpcyBzaG93cyB0aGUgY3VycmVudCBtYXBwaW5nIG9mCitPU1MgbWl4ZXIgZWxlbWVudHMgdG8gdGhlIEFMU0EgY29udHJvbCBlbGVtZW50cy4gIFlvdSBjYW4gY2hhbmdlIHRoZQorbWFwcGluZyBieSB3cml0aW5nIHRvIHRoaXMgZGV2aWNlLiAgUmVhZCBPU1MtRW11bGF0aW9uLnR4dCBmb3IKK2RldGFpbHMuCisKKworUENNIFByb2MgRmlsZXMKKy0tLS0tLS0tLS0tLS0tCisKK2NhcmQqL3BjbSovaW5mbworCVRoZSBnZW5lcmFsIGluZm9ybWF0aW9uIG9mIHRoaXMgUENNIGRldmljZTogY2FyZCAjLCBkZXZpY2UgIywKKwlzdWJzdHJlYW1zLCBldGMuCisKK2NhcmQqL3BjbSoveHJ1bl9kZWJ1ZworCVRoaXMgZmlsZSBhcHBlYXJzIHdoZW4gQ09ORklHX1NORF9ERUJVRz15LgorCVRoaXMgc2hvd3MgdGhlIHN0YXR1cyBvZiB4cnVuICg9IGJ1ZmZlciBvdmVycnVuL3hydW4pIGRlYnVnIG9mCisJQUxTQSBQQ00gbWlkZGxlIGxheWVyLCBhcyBhbiBpbnRlZ2VyIGZyb20gMCB0byAyLiAgVGhlIHZhbHVlCisJY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyB0byB0aGlzIGZpbGUsIHN1Y2ggYXMKKworCQkgIyBjYXQgMiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9wY20wcC94cnVuX2RlYnVnCisKKwlXaGVuIHRoaXMgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAsIHRoZSBkcml2ZXIgd2lsbCBzaG93IHRoZQorCW1lc3NhZ2VzIHRvIGtlcm5lbCBsb2cgd2hlbiBhbiB4cnVuIGlzIGRldGVjdGVkLiAgVGhlIGRlYnVnCisJbWVzc2FnZSBpcyBzaG93biBhbHNvIHdoZW4gdGhlIGludmFsaWQgSC9XIHBvaW50ZXIgaXMgZGV0ZWN0ZWQKKwlhdCB0aGUgdXBkYXRlIG9mIHBlcmlvZHMgKHVzdWFsbHkgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdAorCWhhbmRsZXIpLgorCisJV2hlbiB0aGlzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGUgZHJpdmVyIHdpbGwgc2hvdyB0aGUKKwlzdGFjayB0cmFjZSBhZGRpdGlvbmFsbHkuICBUaGlzIG1heSBoZWxwIHRoZSBkZWJ1Z2dpbmcuCisKK2NhcmQqL3BjbSovc3ViKi9pbmZvCisJVGhlIGdlbmVyYWwgaW5mb3JtYXRpb24gb2YgdGhpcyBQQ00gc3ViLXN0cmVhbS4KKworY2FyZCovcGNtKi9zdWIqL3N0YXR1cworCVRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGlzIFBDTSBzdWItc3RyZWFtLCBlbGFwc2VkIHRpbWUsCisJSC9XIHBvc2l0aW9uLCBldGMuCisKK2NhcmQqL3BjbSovc3ViKi9od19wYXJhbXMKKwlUaGUgaGFyZHdhcmUgcGFyYW1ldGVycyBzZXQgZm9yIHRoaXMgc3ViLXN0cmVhbS4KKworY2FyZCovcGNtKi9zdWIqL3N3X3BhcmFtcworCVRoZSBzb2Z0IHBhcmFtZXRlcnMgc2V0IGZvciB0aGlzIHN1Yi1zdHJlYW0uCisKK2NhcmQqL3BjbSovc3ViKi9wcmVhbGxvYworCVRoZSBidWZmZXIgcHJlLWFsbG9jYXRpb24gaW5mb3JtYXRpb24uCisKKworQUM5NyBDb2RlYyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjYXJkKi9jb2RlYzk3IyovYWM5NyM/LT8KKwlTaG93cyB0aGUgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvZiB0aGlzIEFDOTcgY29kZWMgY2hpcCwgc3VjaCBhcworCW5hbWUsIGNhcGFiaWxpdGllcywgc2V0IHVwLgorCitjYXJkKi9jb2RlYzk3IzAvYWM5NyM/LT8rcmVncworCVNob3dzIHRoZSBBQzk3IHJlZ2lzdGVyIGR1bXAuICBVc2VmdWwgZm9yIGRlYnVnZ2luZy4KKworCVdoZW4gQ09ORklHX1NORF9ERUJVRyBpcyBlbmFibGVkLCB5b3UgY2FuIHdyaXRlIHRvIHRoaXMgZmlsZSBmb3IKKwljaGFuZ2luZyBhbiBBQzk3IHJlZ2lzdGVyIGRpcmVjdGx5LiAgUGFzcyB0d28gaGV4IG51bWJlcnMuCisJRm9yIGV4YW1wbGUsCisKKwkjIGVjaG8gMDIgOWYxZiA+IC9wcm9jL2Fzb3VuZC9jYXJkMC9jb2RlYzk3IzAvYWM5NyMwLTArcmVncworCisKK1NlcXVlbmNlciBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NlcS9kcml2ZXJzCisJTGlzdHMgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgQUxTQSBzZXF1ZW5jZXIgZHJpdmVycy4KKworc2VxL2NsaWVudHMKKwlTaG93cyB0aGUgbGlzdCBvZiBjdXJyZW50bHkgYXZhaWxhYmxlIHNlcXVlbmNlciBjbGluZXRzIGFuZAorCXBvcnRzLiAgVGhlIGNvbm5lY3Rpb24gc3RhdHVzIGFuZCB0aGUgcnVubmluZyBzdGF0dXMgYXJlIHNob3duCisJaW4gdGhpcyBmaWxlLCB0b28uCisKK3NlcS9xdWV1ZXMKKwlMaXN0cyB0aGUgY3VycmVudGx5IGFsbG9jYXRlZC9ydW5uaW5nIHNlcXVlbmVyIHF1ZXVlcy4KKworc2VxL3RpbWVyCisJTGlzdHMgdGhlIGN1cnJlbnRseSBhbGxvY2F0ZWQvcnVubmluZyBzZXF1ZW5jZXIgdGltZXJzLgorCitzZXEvb3NzCisJTGlzdHMgdGhlIE9TUy1jb21wYXRpYmxlIHNlcXVlbmNlciBzdHVmZnMuCisKKworSGVscCBGb3IgRGVidWdnaW5nPworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHRoZSBwcm9ibGVtIGlzIHJlbGF0ZWQgd2l0aCBQQ00sIGZpcnN0IHRyeSB0byB0dXJuIG9uIHhydW5fZGVidWcKK21vZGUuICBUaGlzIHdpbGwgZ2l2ZSB5b3UgdGhlIGtlcm5lbCBtZXNzYWdlcyB3aGVuIGFuZCB3aGVyZSB4cnVuCitoYXBwZW5lZC4KKworSWYgaXQncyByZWFsbHkgYSBidWcsIHJlcG9ydCBpdCB3aXRoIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KKworICAtIHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIvY2FyZCwgc2hvdyBpbiAvcHJvYy9hc291bmQvY2FyZHMKKyAgLSB0aGUgcmVpZ3N0ZXIgZHVtcCwgaWYgYXZhaWxhYmxlIChlLmcuIGNhcmQqL2NtaXBjaSkKKword2hlbiBpdCdzIGEgUENNIHByb2JsZW0sCisKKyAgLSBzZXQtdXAgb2YgUENNLCBzaG93biBpbiBod19wYXJtcywgc3dfcGFyYW1zLCBhbmQgc3RhdHVzIGluIHRoZSBQQ00KKyAgICBzdWItc3RyZWFtIGRpcmVjdG9yeQorCit3aGVuIGl0J3MgYSBtaXhlciBwcm9ibGVtLAorCisgIC0gQUM5NyBwcm9jIGZpbGVzLCBjb2RlYzk3IyovKiBmaWxlcworCitmb3IgVVNCIGF1ZGlvL21pZGksCisKKyAgLSBvdXRwdXQgb2YgbHN1c2IgLXYKKyAgLSBzdHJlYW0qIGZpbGVzIGluIGNhcmQgZGlyZWN0b3J5CisKKworVGhlIEFMU0EgYnVnLXRyYWNraW5nIHN5c3RlbSBpcyBmb3VuZCBhdDoKKworICAgIGh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTFhZGFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0CkBAIC0wLDAgKzEsMzU2IEBACisKKwkJU291bmQgQmxhc3RlciBMaXZlIG1peGVyIC8gZGVmYXVsdCBEU1AgY29kZQorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworVGhlIEVNVTEwSzEgY2hpcHMgaGF2ZSBhIERTUCBwYXJ0IHdoaWNoIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHN1cHBvcnQKK3ZhcmlvdXMgd2F5cyBvZiBzYW1wbGUgcHJvY2Vzc2luZywgd2hpY2ggaXMgZGVzY3JpYmVkIGhlcmUuCisoVGhpcyBhY3RpY2xlIGRvZXMgbm90IGRlYWwgd2l0aCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSAKK0VNVTEwSzEgY2hpcHMuIFNlZSB0aGUgbWFudWFscyBzZWN0aW9uIGZvciBmdXJ0aGVyIGRldGFpbHMuKQorCitUaGUgQUxTQSBkcml2ZXIgcHJvZ3JhbXMgdGhpcyBwb3J0aW9uIG9mIGNoaXAgYnkgZGVmYXVsdCBjb2RlCisoY2FuIGJlIGFsdGVyZWQgbGF0ZXIpIHdoaWNoIG9mZmVycyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHk6CisKKworMSkgSUVDOTU4IChTL1BESUYpIHJhdyBQQ00KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgUENNIGRldmljZSAoaXQncyB0aGUgNHRoIFBDTSBkZXZpY2UgKGluZGV4IDMhKSBhbmQgZmlyc3Qgc3ViZGV2aWNlCisoaW5kZXggMCkgZm9yIGEgZ2l2ZW4gY2FyZCkgYWxsb3dzIHRvIGZvcndhcmQgNDhrSHosIHN0ZXJlbywgMTYtYml0CitsaXR0bGUgZW5kaWFuIHN0cmVhbXMgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGlnaXRhbCBvdXRwdXQKKyhjb2F4aWFsIG9yIG9wdGljYWwpLiBUaGUgdW5pdmVyc2FsIGludGVyZmFjZSBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIHVwCit0byA4IHJhdyBQQ00gZGV2aWNlcyBvcGVyYXRpbmcgYXQgNDhrSHosIDE2LWJpdCBsaXR0bGUgZW5kaWFuLiBJdCB3b3VsZAorYmUgZWFzeSB0byBhZGQgc3VwcG9ydCBmb3IgbXVsdGljaGFubmVsIGRldmljZXMgdG8gdGhlIGN1cnJlbnQgY29kZSwKK2J1dCB0aGUgY29udmVyc2lvbiByb3V0aW5lcyBleGlzdCBvbmx5IGZvciBzdGVyZW8gKDItY2hhbm5lbCBzdHJlYW1zKQorYXQgdGhlIHRpbWUuIAorCitMb29rIHRvIHRyYW1fcG9rZSByb3V0aW5lcyBpbiBsb3dsZXZlbC9lbXUxMGsxL2VtdWZ4LmMgZm9yIG1vcmUgZGV0YWlscy4KKworCisyKSBEaWdpdGFsIG1peGVyIGNvbnRyb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNvbnRyb2xzIGFyZSBidWlsdCB1c2luZyB0aGUgRFNQIGluc3RydWN0aW9ucy4gVGhleSBvZmZlciBleHRlbmRlZAorZnVuY3Rpb25hbGl0eS4gT25seSB0aGUgZGVmYXVsdCBidWlsZC1pbiBjb2RlIGluIHRoZSBBTFNBIGRyaXZlciBpcyBkZXNjcmliZWQKK2hlcmUuIE5vdGUgdGhhdCB0aGUgY29udHJvbHMgd29yayBhcyBhdHRlbnVhdG9yczogdGhlIG1heGltdW0gdmFsdWUgaXMgdGhlIAorbmV1dHJhbCBwb3NpdGlvbiBsZWF2aW5nIHRoZSBzaWduYWwgdW5jaGFuZ2VkLiBOb3RlIHRoYXQgaWYgdGhlICBzYW1lIGRlc3RpbmF0aW9uIAoraXMgbWVudGlvbmVkIGluIG11bHRpcGxlIGNvbnRyb2xzLCB0aGUgc2lnbmFsIGlzIGFjY3VtdWxhdGVkIGFuZCBjYW4gYmUgd3JhcHBlZCAKKyhzZXQgdG8gbWF4aW1hbCBvciBtaW5pbWFsIHZhbHVlIHdpdGhvdXQgY2hlY2tpbmcgb2Ygb3ZlcmZsb3cpLgorCisKK0V4cGxhbmF0aW9uIG9mIHVzZWQgYWJicmV2aWF0aW9uczoKKworREFDICAgIC0gZGlnaXRhbCB0byBhbmFsb2cgY29udmVydGVyCitBREMgICAgLSBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIKK0kyUyAgICAtIG9uZS13YXkgdGhyZWUgd2lyZSBzZXJpYWwgYnVzIGZvciBkaWdpdGFsIHNvdW5kIGJ5IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAgICAgICAgICh0aGlzIHN0YW5kYXJkIGlzIHVzZWQgZm9yIGNvbm5lY3Rpbmcgc3RhbmRhbG9uZSBEQUMgYW5kIEFEQyBjb252ZXJ0ZXJzKQorTEZFICAgIC0gbG93IGZyZXF1ZW5jeSBlZmZlY3RzIChzdWJ3b29mZXIgc2lnbmFsKQorQUM5NyAgIC0gYSBjaGlwIGNvbnRhaW5pbmcgYW4gYW5hbG9nIG1peGVyLCBEQUMgYW5kIEFEQyBjb252ZXJ0ZXJzCitJRUM5NTggLSBTL1BESUYKK0ZYLWJ1cyAtIHRoZSBFTVUxMEsxIGNoaXAgaGFzIGFuIGVmZmVjdCBidXMgY29udGFpbmluZyAxNiBhY2N1bXVsYXRvcnMuCisgICAgICAgICBFYWNoIG9mIHRoZSBzeW50aGVzaXplciB2b2ljZXMgY2FuIGZlZWQgaXRzIG91dHB1dCB0byB0aGVzZSBhY2N1bXVsYXRvcnMKKyAgICAgICAgIGFuZCB0aGUgRFNQIG1pY3JvY29udHJvbGxlciBjYW4gb3BlcmF0ZSB3aXRoIHRoZSByZXN1bHRpbmcgc3VtLgorCisKK25hbWU9J1dhdmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIHNhbXBsZXMuCitUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nV2F2ZSBTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAwIGFuZCAxIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gc2FtcGxlcy4KK1RoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSByZWFyIEkyUyBEQUNzLiBUaGVzZSBEQUNzIG9wZXJhdGVzCitzZXBhcmF0ZWx5ICh0aGV5IGFyZSBub3QgaW5zaWRlIHRoZSBBQzk3IGNvZGVjKS4KKworbmFtZT0nV2F2ZSBDZW50ZXIgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIHNhbXBsZXMuCitUaGUgcmVzdWx0IGlzIG1peGVkIHRvIG1vbm8gc2lnbmFsIChzaW5nbGUgY2hhbm5lbCkgYW5kIGZvcndhcmRlZCB0bwordGhlID8/cmVhcj8/IHJpZ2h0IERBQyBQQ00gc2xvdCBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nV2F2ZSBMRkUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBtaXhlZCB0byBtb25vIHNpZ25hbCAoc2luZ2xlIGNoYW5uZWwpIGFuZCBmb3J3YXJkZWQgdG8KK3RoZSA/P3JlYXI/PyBsZWZ0IERBQyBQQ00gc2xvdCBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nV2F2ZSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorbmFtZT0nV2F2ZSBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgUENNIEZYLWJ1cworYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMCBhbmQgMSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgorVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKK1BDTSBkZXZpY2UpLgorCituYW1lPSdNdXNpYyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBzYW1wbGVzLgorVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J011c2ljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCituYW1lPSdNdXNpYyBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKK2FjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nU3Vycm91bmQgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCByZWFyIFBDTSBGWC1idXMKK2FjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyAyIGFuZCAzIGZvciBsZWZ0IGFuZCByaWdodCByZWFyIFBDTSBzYW1wbGVzLgorVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHJlYXIgSTJTIERBQ3MuIFRoZXNlIERBQ3Mgb3BlcmF0ZQorc2VwYXJhdGVseSAodGhleSBhcmUgbm90IGluc2lkZSB0aGUgQUM5NyBjb2RlYykuCisKK25hbWU9J1N1cnJvdW5kIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCituYW1lPSdTdXJyb3VuZCBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorCitUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgcmVhciBQQ00gRlgtYnVzCithY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgMiBhbmQgMyBmb3IgbGVmdCBhbmQgcmlnaHQgcmVhciBQQ00gc2FtcGxlcy4KK1RoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCitQQ00gZGV2aWNlKS4KKworbmFtZT0nQ2VudGVyIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlIGZvciBjZW50ZXIgUENNIEZYLWJ1cyBhY2N1bXVsYXRvci4KK0FMU0EgdXNlcyBhY2N1bXVsYXRvciA2IGZvciBjZW50ZXIgUENNIHNhbXBsZS4gVGhlIHJlc3VsdCBzYW1wbGUgaXMgZm9yd2FyZGVkCit0byB0aGUgPz9yZWFyPz8gcmlnaHQgREFDIFBDTSBzbG90IG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdMRkUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGUgZm9yIGNlbnRlciBQQ00gRlgtYnVzIGFjY3VtdWxhdG9yLgorQUxTQSB1c2VzIGFjY3VtdWxhdG9yIDYgZm9yIGNlbnRlciBQQ00gc2FtcGxlLiBUaGUgcmVzdWx0IHNhbXBsZSBpcyBmb3J3YXJkZWQKK3RvIHRoZSA/P3JlYXI/PyBsZWZ0IERBQyBQQ00gc2xvdCBvZiB0aGUgQUM5NyBjb2RlYy4KKworbmFtZT0nQUM5NyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IGZyb250IEFEQyBQQ00gc2xvdHMKK29mIHRoZSBBQzk3IGNvZGVjLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTQorc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqIE5vdGU6IFRoaXMgY29udHJvbCBzaG91bGQgYmUgemVybyBmb3IgdGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMsIG90aGVyd2lzZSAqKioKKyoqKiBhIGRpZ2l0YWwgbG9vcGJhY2sgaXMgYWN0aXZhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCituYW1lPSdBQzk3IENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBmcm9udCBBREMgUENNIHNsb3RzCitvZiB0aGUgQUM5NyBjb2RlYy4gVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8KK3RoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKiBOb3RlOiBUaGlzIGNvbnRyb2wgc2hvdWxkIGJlIDEwMCAobWF4aW1hbCB2YWx1ZSksIG90aGVyd2lzZSBubyBhbmFsb2cgICAgKioqCisqKiogaW5wdXRzIG9mIHRoZSBBQzk3IGNvZGVjIGNhbiBiZSBjYXB0dXJlZCAocmVjb3JkZWQpLiAgICAgICAgICAgICAgICAgICAgICoqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworbmFtZT0nSUVDOTU4IFRUTCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0lFQzk1OCBUVEwgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggVFRMCitkaWdpdGFsIGlucHV0cyAodXN1YWxseSB1c2VkIGJ5IGEgQ0RST00gZHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlCitmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J1pvb20gVmlkZW8gUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgem9vbSB2aWRlbworZGlnaXRhbCBpbnB1dHMgKHVzdWFsbHkgdXNlZCBieSBhIENEUk9NIGRyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZQorZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdab29tIFZpZGVvIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgem9vbSB2aWRlbworZGlnaXRhbCBpbnB1dHMgKHVzdWFsbHkgdXNlZCBieSBhIENEUk9NIGRyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZQorZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlIFBDTSBkZXZpY2UpLgorCituYW1lPSdJRUM5NTggTGl2ZURyaXZlIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmcm9tIGxlZnQgYW5kIHJpZ2h0IElFQzk1OCBvcHRpY2FsCitkaWdpdGFsIGlucHV0LiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cworb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0lFQzk1OCBMaXZlRHJpdmUgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJRUM5NTggb3B0aWNhbAorZGlnaXRhbCBpbnB1dHMuIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPCisodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZSBQQ00gZGV2aWNlKS4KKworbmFtZT0nSUVDOTU4IENvYXhpYWwgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IGNvYXhpYWwKK2RpZ2l0YWwgaW5wdXRzLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cworb2YgdGhlIEFDOTcgY29kZWMuCisKK25hbWU9J0lFQzk1OCBDb2F4aWFsIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSUVDOTU4IGNvYXhpYWwKK2RpZ2l0YWwgaW5wdXRzLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTworKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J0xpbmUgTGl2ZURyaXZlIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorbmFtZT0nTGluZSBMaXZlRHJpdmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZyb20gbGVmdCBhbmQgcmlnaHQgSTJTIEFEQworaW5wdXRzIChvbiB0aGUgTGl2ZURyaXZlKS4gVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250CitEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgorCituYW1lPSdMaW5lIExpdmVEcml2ZSBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MQorbmFtZT0nTGluZSBMaXZlRHJpdmUgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTEKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZnJvbSBsZWZ0IGFuZCByaWdodCBJMlMgQURDCitpbnB1dHMgKG9uIHRoZSBMaXZlRHJpdmUpLiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgQURDCitjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUgUENNIGRldmljZSkuCisKK25hbWU9J1RvbmUgQ29udHJvbCAtIFN3aXRjaCcsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgdHVybnMgdGhlIHRvbmUgY29udHJvbCBvbiBvciBvZmYuIFRoZSBzYW1wbGVzIGZvciBmcm9udCwgcmVhcgorYW5kIGNlbnRlciAvIExGRSBvdXRwdXRzIGFyZSBhZmZlY3RlZC4KKworbmFtZT0nVG9uZSBDb250cm9sIC0gQmFzcycsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgc2V0cyB0aGUgYmFzcyBpbnRlbnNpdHkuIFRoZXJlIGlzIG5vIG5ldXRyYWwgdmFsdWUhIQorV2hlbiB0aGUgdG9uZSBjb250cm9sIGNvZGUgaXMgYWN0aXZhdGVkLCB0aGUgc2FtcGxlcyBhcmUgYWx3YXlzIG1vZGlmaWVkLgorVGhlIGNsb3Nlc3QgdmFsdWUgdG8gcHVyZSBzaWduYWwgaXMgMjAuCisKK25hbWU9J1RvbmUgQ29udHJvbCAtIFRyZWJsZScsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgc2V0cyB0aGUgdHJlYmxlIGludGVuc2l0eS4gVGhlcmUgaXMgbm8gbmV1dHJhbCB2YWx1ZSEhCitXaGVuIHRoZSB0b25lIGNvbnRyb2wgY29kZSBpcyBhY3RpdmF0ZWQsIHRoZSBzYW1wbGVzIGFyZSBhbHdheXMgbW9kaWZpZWQuCitUaGUgY2xvc2VzdCB2YWx1ZSB0byBwdXJlIHNpZ25hbCBpcyAyMC4KKworbmFtZT0nSUVDOTU4IE9wdGljYWwgUmF3IFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MAorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlcyBmb3IgdGhlIElFQzk1OCAoUy9QRElGKSBkaWdpdGFsCitvdXRwdXQgYXJlIHRha2VuIG9ubHkgZnJvbSB0aGUgcmF3IEZYODAxMCBQQ00sIG90aGVyd2lzZSBzdGFuZGFyZCBmcm9udAorUENNIHNhbXBsZXMgYXJlIHRha2VuLgorCituYW1lPSdIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0xCisKK1RoaXMgY29udHJvbCBhdHRlbnVhdGVzIHRoZSBzYW1wbGVzIGZvciB0aGUgaGVhZHBob25lIG91dHB1dC4KKworbmFtZT0nSGVhZHBob25lIENlbnRlciBQbGF5YmFjayBTd2l0Y2gnLGluZGV4PTEKKworSWYgdGhpcyBzd2l0Y2ggaXMgb24sIHRoZW4gdGhlIHNhbXBsZSBmb3IgdGhlIGNlbnRlciBQQ00gaXMgcHV0IHRvIHRoZQorbGVmdCBoZWFkcGhvbmUgb3V0cHV0ICh1c2VmdWwgZm9yIFNCIExpdmUgY2FyZHMgd2l0aG91dCBzZXBhcmF0ZSBjZW50ZXIvTEZFCitvdXRwdXQpLgorCituYW1lPSdIZWFkcGhvbmUgTEZFIFBsYXliYWNrIFN3aXRjaCcsaW5kZXg9MQorCitJZiB0aGlzIHN3aXRjaCBpcyBvbiwgdGhlbiB0aGUgc2FtcGxlIGZvciB0aGUgY2VudGVyIFBDTSBpcyBwdXQgdG8gdGhlCityaWdodCBoZWFkcGhvbmUgb3V0cHV0ICh1c2VmdWwgZm9yIFNCIExpdmUgY2FyZHMgd2l0aG91dCBzZXBhcmF0ZSBjZW50ZXIvTEZFCitvdXRwdXQpLgorCisKKzMpIFBDTSBzdHJlYW0gcmVsYXRlZCBjb250cm9scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25hbWU9J0VNVTEwSzEgUENNIFZvbHVtZScsaW5kZXggMC0zMQorCitDaGFubmVsIHZvbHVtZSBhdHRlbnVhdGlvbiBpbiByYW5nZSAwLTB4ZmZmZi4gVGhlIG1heGltdW0gdmFsdWUgKG5vCithdHRlbnVhdGlvbikgaXMgZGVmYXVsdC4gVGhlIGNoYW5uZWwgbWFwcGluZyBmb3IgdGhyZWUgdmFsdWVzIGlzCithcyBmb2xsb3dzOgorCisJMCAtIG1vbm8sIGRlZmF1bHQgMHhmZmZmIChubyBhdHRlbnVhdGlvbikKKwkxIC0gbGVmdCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCTIgLSByaWdodCwgZGVmYXVsdCAweGZmZmYgKG5vIGF0dGVudWF0aW9uKQorCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFJvdXRpbmcnLGluZGV4IDAtMzEKKworVGhpcyBjb250cm9sIHNwZWNpZmllcyB0aGUgZGVzdGluYXRpb24gLSBGWC1idXMgYWNjdW11bGF0b3JzLiBUaGVyZSBhcmUKK3R3ZWx2ZSB2YWx1ZXMgd2l0aCB0aGlzIG1hcHBpbmc6CisKKwkgMCAtICBtb25vLCBBIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMAorCSAxIC0gIG1vbm8sIEIgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAxCisJIDIgLSAgbW9ubywgQyBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDIKKwkgMyAtICBtb25vLCBEIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMworCSA0IC0gIGxlZnQsIEEgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAwCisJIDUgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDEKKwkgNiAtICBsZWZ0LCBDIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMgorCSA3IC0gIGxlZnQsIEQgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAzCisJIDggLSByaWdodCwgQSBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDAKKwkgOSAtIHJpZ2h0LCBCIGRlc3RpbmF0aW9uIChGWC1idXMgMC0xNSksIGRlZmF1bHQgMQorCTEwIC0gcmlnaHQsIEMgZGVzdGluYXRpb24gKEZYLWJ1cyAwLTE1KSwgZGVmYXVsdCAyCisJMTEgLSByaWdodCwgRCBkZXN0aW5hdGlvbiAoRlgtYnVzIDAtMTUpLCBkZWZhdWx0IDMKKworRG9uJ3QgZm9yZ2V0IHRoYXQgaXQncyBpbGxlZ2FsIHRvIGFzc2lnbiBhIGNoYW5uZWwgdG8gdGhlIHNhbWUgRlgtYnVzIGFjY3VtdWxhdG9yIAorbW9yZSB0aGFuIG9uY2UgKGl0IG1lYW5zIDA9MCAmJiAxPTAgaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbikuCisgCituYW1lPSdFTVUxMEsxIFBDTSBTZW5kIFZvbHVtZScsaW5kZXggMC0zMQorCitJdCBzcGVjaWZpZXMgdGhlIGF0dGVudWF0aW9uIChhbW91bnQpIGZvciBnaXZlbiBkZXN0aW5hdGlvbiBpbiByYW5nZSAwLTI1NS4KK1RoZSBjaGFubmVsIG1hcHBpbmcgaXMgZm9sbG93aW5nOgorCisJIDAgLSAgbW9ubywgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDEgLSAgbW9ubywgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDIgLSAgbW9ubywgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDMgLSAgbW9ubywgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDQgLSAgbGVmdCwgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJIDUgLSAgbGVmdCwgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDYgLSAgbGVmdCwgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDcgLSAgbGVmdCwgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDggLSByaWdodCwgQSBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJIDkgLSByaWdodCwgQiBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDI1NSAobm8gYXR0ZW51YXRpb24pCisJMTAgLSByaWdodCwgQyBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisJMTEgLSByaWdodCwgRCBkZXN0aW5hdGlvbiBhdHRuLCBkZWZhdWx0IDAgKG11dGUpCisKKworCis0KSBNQU5VQUxTL1BBVEVOVFM6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z0cDovL29wZW5zb3VyY2UuY3JlYXRpdmUuY29tL3B1Yi9kb2MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBGaWxlczoKKyAgICAgICAgTE00NTQ1LnBkZiAgICAgIEFDOTcgQ29kZWMKKworICAgICAgICBtMjA0OS5wZGYgICAgICAgVGhlIEVNVTEwSzEgRGlnaXRhbCBBdWRpbyBQcm9jZXNzb3IKKworICAgICAgICBob2c2My5wcyAgICAgICAgRlg4MDEwIC0gQSBEU1AgQ2hpcCBBcmNoaXRlY3R1cmUgZm9yIEF1ZGlvIEVmZmVjdHMKKworCitXSVBPIFBhdGVudHMKKy0tLS0tLS0tLS0tLQorICAgICAgICBQYXRlbnQgbnVtYmVyczoKKyAgICAgICAgV08gOTkwMTgxMyAoQTEpIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIHdpdGggbXVsdGlwbGUgYXN5bmNocm9ub3VzIChKYW4uIDE0LCAxOTk5KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcworCisgICAgICAgIFdPIDk5MDE4MTQgKEExKSBQcm9jZXNzb3Igd2l0aCBJbnN0cnVjdGlvbiBTZXQgZm9yIEF1ZGlvIEVmZmVjdHMgKEphbi4gMTQsIDE5OTkpCisKKyAgICAgICAgV08gOTkwMTk1MyAoQTEpIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIGhhdmluZyBEZWNvdXBsZWQgSW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBhbmQgQXVkaW8gRGF0YSBTZXF1ZW5jaW5nIChKYW4uIDE0LCAxOTk5KQorCisKK1VTIFBhdGVudHMgKGh0dHA6Ly93d3cudXNwdG8uZ292LykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBVUyA1OTI1ODQxICAgICAgRGlnaXRhbCBTYW1wbGluZyBJbnN0cnVtZW50IGVtcGxveWluZyBjYWNoZSBtZW1vcnkgKEp1bC4gMjAsIDE5OTkpCisKKyAgICAgICAgVVMgNTkyODM0MiAgICAgIEF1ZGlvIEVmZmVjdHMgUHJvY2Vzc29yIGludGVncmF0ZWQgb24gYSBzaW5nbGUgY2hpcCAoSnVsLiAyNywgMTk5OSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSBtdWx0aXBvcnQgbWVtb3J5IG9udG8gd2hpY2ggbXVsdGlwbGUgYXN5bmNocm9ub3VzCisgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdGFsIHNvdW5kIHNhbXBsZXMgY2FuIGJlIGNvbmN1cnJlbnRseSBsb2FkZWQKKworICAgICAgICBVUyA1OTMwMTU4ICAgICAgUHJvY2Vzc29yIHdpdGggSW5zdHJ1Y3Rpb24gU2V0IGZvciBBdWRpbyBFZmZlY3RzIChKdWwuIDI3LCAxOTk5KQorCisgICAgICAgIFVTIDYwMzIyMzUgICAgICBNZW1vcnkgaW5pdGlhbGl6YXRpb24gY2lyY3VpdCAoVHJhbSkgKEZlYi4gMjksIDIwMDApCisKKyAgICAgICAgVVMgNjEzODIwNyAgICAgIEludGVycG9sYXRpb24gbG9vcGluZyBvZiBhdWRpbyBzYW1wbGVzIGluIGNhY2hlIGNvbm5lY3RlZCB0byAgICAoT2N0LiAyNCwgMjAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBidXMgd2l0aCBwcmlvcml0aXphdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIGJ1cyB0cmFuc2ZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGFjY29yZGFuY2Ugd2l0aCBsb29wIGVuZHMgYW5kIG1pbmltdW0gYmxvY2sgc2l6ZXMKKworICAgICAgICBVUyA2MTUxNjcwICAgICAgTWV0aG9kIGZvciBjb25zZXJ2aW5nIG1lbW9yeSBzdG9yYWdlIHVzaW5nIGEgKE5vdi4gMjEsIDIwMDApCisgICAgICAgICAgICAgICAgICAgICAgICBwb29sIG9mICBzaG9ydCB0ZXJtIG1lbW9yeSByZWdpc3RlcnMKKworICAgICAgICBVUyA2MTk1NzE1ICAgICAgSW50ZXJydXB0IGNvbnRyb2wgZm9yIG11bHRpcGxlIHByb2dyYW1zIGNvbW11bmljYXRpbmcgd2l0aCAgICAgIChGZWIuIDI3LCAyMDAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21tb24gaW50ZXJydXB0IGJ5IGFzc29jaWF0aW5nIHByb2dyYW1zIHRvIEdQIHJlZ2lzdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nIGludGVycnVwdCByZWdpc3RlciwgcG9sbGluZyBHUCByZWdpc3RlcnMsIGFuZCBpbnZva2luZworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgcm91dGluZSBhc3NvY2lhdGVkIHdpdGggZGVmaW5lZCBpbnRlcnJ1cHQgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9WSUE4Mnh4LW1peGVyLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9WSUE4Mnh4LW1peGVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBhYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1ZJQTgyeHgtbWl4ZXIudHh0CkBAIC0wLDAgKzEsOCBAQAorCisJCQkJVklBODJ4eCBtaXhlcgorCQkJCT09PT09PT09PT09PT0KKworT24gbWFueSBWSUE4Mnh4IGJvYXJkcywgdGhlICdJbnB1dCBTb3VyY2UgU2VsZWN0JyBtaXhlciBjb250cm9sIGRvZXMgbm90IHdvcmsuCitTZXR0aW5nIGl0IHRvICdJbnB1dDInIG9uIHN1Y2ggYm9hcmRzIHdpbGwgY2F1c2UgcmVjb3JkaW5nIHRvIGhhbmcsIG9yIGZhaWwKK3dpdGggRUlPIChpbnB1dC9vdXRwdXQgZXJyb3IpIHZpYSBPU1MgZW11bGF0aW9uLiAgVGhpcyBjb250cm9sIHNob3VsZCBiZSBsZWZ0CithdCAnSW5wdXQxJyBmb3Igc3VjaCBjYXJkcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9oZGFfY29kZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2hkYV9jb2RlYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkMDdiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9oZGFfY29kZWMudHh0CkBAIC0wLDAgKzEsMjk5IEBACitOb3RlcyBvbiBVbml2ZXJzYWwgSW50ZXJmYWNlIGZvciBJbnRlbCBIaWdoIERlZmluaXRpb24gQXVkaW8gQ29kZWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUYWthc2hpIEl3YWkgPHRpd2FpQHN1c2UuZGU+CisKKworW1N0aWxsIGEgZHJhZnQgdmVyc2lvbl0KKworCitHZW5lcmFsCis9PT09PT09CisKK1RoZSBzbmQtaGRhLWNvZGVjIG1vZHVsZSBzdXBwb3J0cyB0aGUgZ2VuZXJpYyBhY2Nlc3MgZnVuY3Rpb24gZm9yIHRoZQorSGlnaCBEZWZpbml0aW9uIChIRCkgYXVkaW8gY29kZWNzLiAgSXQncyBkZXNpZ25lZCB0byBiZSBpbmRlcGVuZGVudAorZnJvbSB0aGUgY29udHJvbGxlciBjb2RlIGxpa2UgYWM5NyBjb2RlYyBtb2R1bGUuICBUaGUgcmVhbCBhY2Nlc3NvcnMKK2Zyb20vdG8gdGhlIGNvbnRyb2xsZXIgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgbG93bGV2ZWwgZHJpdmVyLgorCitUaGUgc3RydWN0dXJlIG9mIHRoaXMgbW9kdWxlIGlzIHNpbWlsYXIgd2l0aCBhYzk3X2NvZGVjIG1vZHVsZS4KK0VhY2ggY29kZWMgY2hpcCBiZWxvbmdzIHRvIGEgYnVzIGNsYXNzIHdoaWNoIGNvbW11bmljYXRlcyB3aXRoIHRoZQorY29udHJvbGxlci4KKworCitJbml0aWFsaXphdGlvbiBvZiBCdXMgSW5zdGFuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2FyZCBkcml2ZXIgaGFzIHRvIGNyZWF0ZSBzdHJ1Y3QgaGRhX2J1cyBhdCBmaXJzdC4gIFRoZSB0ZW1wbGF0ZQorc3RydWN0IHNob3VsZCBiZSBmaWxsZWQgYW5kIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3I6CisKK3N0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIHsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwljb25zdCBjaGFyICptb2RlbG5hbWU7CisJc3RydWN0IGhkYV9idXNfb3BzIG9wczsKK307CisKK1RoZSBjYXJkIGRyaXZlciBjYW4gc2V0IGFuZCB1c2UgdGhlIHByaXZhdGVfZGF0YSBmaWVsZCB0byByZXRyaWV2ZSBpdHMKK293biBkYXRhIGluIGNhbGxiYWNrIGZ1bmN0aW9ucy4gIFRoZSBwY2kgZmllbGQgaXMgdXNlZCB3aGVuIHRoZSBwYXRjaAorbmVlZHMgdG8gY2hlY2sgdGhlIFBDSSBzdWJzeXN0ZW0gSURzLCBzbyBvbi4gIEZvciBub24tUENJIHN5c3RlbSwgaXQKK2RvZXNuJ3QgaGF2ZSB0byBiZSBzZXQsIG9mIGNvdXJzZS4KK1RoZSBtb2RlbG5hbWUgZmllbGQgc3BlY2lmaWVzIHRoZSBib2FyZCdzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uICBUaGUKK3N0cmluZyBpcyBwYXNzZWQgdG8gdGhlIGNvZGVjIHBhcnNlciwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIHBhcnNlciBob3cKK3RoZSBzdHJpbmcgaXMgdXNlZC4KK1RoZXNlIGZpZWxkcywgcHJpdmF0ZV9kYXRhLCBwY2kgYW5kIG1vZGVsbmFtZSBhcmUgYWxsIG9wdGlvbmFsLgorCitUaGUgb3BzIGZpZWxkIGNvbnRhaW5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXMgdGhlIGZvbGxvd2luZzoKKworc3RydWN0IGhkYV9idXNfb3BzIHsKKwlpbnQgKCpjb21tYW5kKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdCwKKwkJICAgICAgIHVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFybSk7CisJdW5zaWduZWQgaW50ICgqZ2V0X3Jlc3BvbnNlKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkoc3RydWN0IGhkYV9idXMgKik7Cit9OworCitUaGUgY29tbWFuZCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgY29kZWMgbW9kdWxlIG5lZWRzIHRvIHNlbmQgYQorVkVSQiB0byB0aGUgY29udHJvbGxlci4gIEl0J3MgYWx3YXlzIGEgc2luZ2xlIGNvbW1hbmQuCitUaGUgZ2V0X3Jlc3BvbnNlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBjb2RlYyByZXF1aXJlcyB0aGUgYW5zd2VyCitmb3IgdGhlIGxhc3QgY29tbWFuZC4gIFRoZXNlIHR3byBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeSBhbmQgaGF2ZSB0bworYmUgZ2l2ZW4uCitUaGUgbGFzdCwgcHJpdmF0ZV9mcmVlIGNhbGxiYWNrLCBpcyBvcHRpb25hbC4gIEl0J3MgY2FsbGVkIGluIHRoZQorZGVzdHJ1Y3RvciB0byByZWxlYXNlIGFueSBuZWNlc3NhcnkgZGF0YSBpbiB0aGUgbG93bGV2ZWwgZHJpdmVyLgorCitUaGUgYnVzIGluc3RhbmNlIGlzIGNyZWF0ZWQgdmlhIHNuZF9oZGFfYnVzX25ldygpLiAgWW91IG5lZWQgdG8gcGFzcwordGhlIGNhcmQgaW5zdGFuY2UsIHRoZSB0ZW1wbGF0ZSwgYW5kIHRoZSBwb2ludGVyIHRvIHN0b3JlIHRoZQorcmVzdWx0YW50IGJ1cyBpbnN0YW5jZS4KKworaW50IHNuZF9oZGFfYnVzX25ldyhzbmRfY2FyZF90ICpjYXJkLCBjb25zdCBzdHJ1Y3QgaGRhX2J1c190ZW1wbGF0ZSAqdGVtcCwKKwkJICAgIHN0cnVjdCBoZGFfYnVzICoqYnVzcCk7CisKK0l0IHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiAgQSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgbWVhbnMgYW55CitlcnJvciBkdXJpbmcgY3JlYXRpb24uCisKKworQ3JlYXRpb24gb2YgQ29kZWMgSW5zdGFuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0VhY2ggY29kZWMgY2hpcCBvbiB0aGUgYm9hcmQgaXMgdGhlbiBjcmVhdGVkIG9uIHRoZSBCVVMgaW5zdGFuY2UuCitUbyBjcmVhdGUgYSBjb2RlYyBpbnN0YW5jZSwgY2FsbCBzbmRfaGRhX2NvZGVjX25ldygpLgorCitpbnQgc25kX2hkYV9jb2RlY19uZXcoc3RydWN0IGhkYV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGNvZGVjX2FkZHIsCisJCSAgICAgIHN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApOworCitUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIEJVUyBpbnN0YW5jZSwgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUKK2FkZHJlc3Mgb2YgdGhlIGNvZGVjLCBhbmQgdGhlIGxhc3Qgb25lIGlzIHRoZSBwb2ludGVyIHRvIHN0b3JlIHRoZQorcmVzdWx0YW50IGNvZGVjIGluc3RhbmNlIChjYW4gYmUgTlVMTCBpZiBub3QgbmVlZGVkKS4KKworVGhlIGNvZGVjIGlzIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0IG9mIGJ1cyBpbnN0YW5jZS4gIFlvdSBjYW4gZm9sbG93Cit0aGUgY29kZWMgbGlzdCBsaWtlOgorCisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYzsKKwlsaXN0X2Zvcl9lYWNoKHAsICZidXMtPmNvZGVjX2xpc3QpIHsKKwkJY29kZWMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZGFfY29kZWMsIGxpc3QpOworCQkuLi4KKwl9CisKK1RoZSBjb2RlYyBpc24ndCBpbml0aWFsaXplZCBhdCB0aGlzIHN0YWdlIHByb3Blcmx5LiAgVGhlCitpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBpcyBjYWxsZWQgd2hlbiB0aGUgY29udHJvbHMgYXJlIGJ1aWx0IGxhdGVyLgorCisKK0NvZGVjIEFjY2VzcworPT09PT09PT09PT09CisKK1RvIGFjY2VzcyBjb2RlYywgdXNlIHNuZF9jb2RlY19yZWFkKCkgYW5kIHNuZF9jb2RlY193cml0ZSgpLgorc25kX2hkYV9wYXJhbV9yZWFkKCkgaXMgZm9yIHJlYWRpbmcgcGFyYW1ldGVycy4KK0ZvciB3cml0aW5nIGEgc2VxdWVuY2Ugb2YgdmVyYnMsIHVzZSBzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKCkuCisKK1RvIHJldHJpZXZlIHRoZSBudW1iZXIgb2Ygc3ViIG5vZGVzIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gbm9kZSwgdXNlCitzbmRfaGRhX2dldF9zdWJfbm9kZXMoKS4gIFRoZSBjb25uZWN0aW9uIGxpc3QgY2FuIGJlIG9idGFpbmVkIHZpYQorc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoKSBjYWxsLgorCitXaGVuIGFuIHVuc29saWNpdGVkIGV2ZW50IGhhcHBlbnMsIHBhc3MgdGhlIGV2ZW50IHZpYQorc25kX2hkYV9xdWV1ZV91bnNvbF9ldmVudCgpIHNvIHRoYXQgdGhlIGNvZGVjIHJvdXRpbmVzIHdpbGwgcHJvY2VzcyBpdAorbGF0ZXIuCisKKworKE1peGVyKSBDb250cm9scworPT09PT09PT09PT09PT09PQorCitUbyBjcmVhdGUgbWl4ZXIgY29udHJvbHMgb2YgYWxsIGNvZGVjcywgY2FsbAorc25kX2hkYV9idWlsZF9jb250cm9scygpLiAgSXQgdGhlbiBidWlsZHMgdGhlIG1peGVycyBhbmQgZG9lcworaW5pdGlhbGl6YXRpb24gc3R1ZmYgb24gZWFjaCBjb2RlYy4KKworCitQQ00gU3R1ZmYKKz09PT09PT09PQorCitzbmRfaGRhX2J1aWxkX3BjbXMoKSBnaXZlcyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBQQ00KK3N0cmVhbXMuICBXaGVuIGl0J3MgY2FsbGVkLCBlYWNoIGNvZGVjIGJlbG9uZ2luZyB0byB0aGUgYnVzIHN0b3JlcyAKK2NvZGVjLT5udW1fcGNtcyBhbmQgY29kZWMtPnBjbV9pbmZvIGZpZWxkcy4gIFRoZSBudW1fcGNtcyBpbmRpY2F0ZXMKK3RoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gcGNtX2luZm8gYXJyYXkuICBUaGUgY2FyZCBkcml2ZXIgaXMgc3VwcG9zZWQKK3RvIHRyYXZlcnNlIHRoZSBjb2RlYyBsaW5rZWQgbGlzdCwgcmVhZCB0aGUgcGNtIGluZm9ybWF0aW9uIGluCitwY21faW5mbyBhcnJheSwgYW5kIGJ1aWxkIHBjbSBpbnN0YW5jZXMgYWNjb3JkaW5nIHRvIHRoZW0uIAorCitUaGUgcGNtX2luZm8gYXJyYXkgY29udGFpbnMgdGhlIGZvbGxvd2luZyByZWNvcmQ6CisKKy8qIFBDTSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzdWJzdHJlYW0gKi8KK3N0cnVjdCBoZGFfcGNtX3N0cmVhbSB7CisJdW5zaWduZWQgaW50IHN1YnN0cmVhbXM7CS8qIG51bWJlciBvZiBzdWJzdHJlYW1zLCAwID0gbm90IGV4aXN0ICovCisJdW5zaWduZWQgaW50IGNoYW5uZWxzX21pbjsJLyogbWluLiBudW1iZXIgb2YgY2hhbm5lbHMgKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWF4OwkvKiBtYXguIG51bWJlciBvZiBjaGFubmVscyAqLworCWhkYV9uaWRfdCBuaWQ7CS8qIGRlZmF1bHQgTklEIHRvIHF1ZXJ5IHJhdGVzL2Zvcm1hdHMvYnBzLCBvciBzZXQgdXAgKi8KKwl1MzIgcmF0ZXM7CS8qIHN1cHBvcnRlZCByYXRlcyAqLworCXU2NCBmb3JtYXRzOwkvKiBzdXBwb3J0ZWQgZm9ybWF0cyAoU05EUlZfUENNX0ZNVEJJVF8pICovCisJdW5zaWduZWQgaW50IG1heGJwczsJLyogc3VwcG9ydGVkIG1heC4gYml0IHBlciBzYW1wbGUgKi8KKwlzdHJ1Y3QgaGRhX3BjbV9vcHMgb3BzOworfTsKKworLyogZm9yIFBDTSBjcmVhdGlvbiAqLworc3RydWN0IGhkYV9wY20geworCWNoYXIgKm5hbWU7CisJc3RydWN0IGhkYV9wY21fc3RyZWFtIHN0cmVhbVsyXTsKK307CisKK1RoZSBuYW1lIGNhbiBiZSBwYXNzZWQgdG8gc25kX3BjbV9uZXcoKS4gIFRoZSBzdHJlYW0gZmllbGQgY29udGFpbnMKK3RoZSBpbmZvcm1hdGlvbiAgZm9yIHBsYXliYWNrIChTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID0gMCkgYW5kCitjYXB0dXJlIChTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgPSAxKSBkaXJlY3Rpb25zLiAgVGhlIGNhcmQgZHJpdmVyCitzaG91bGQgcGFzcyBzdWJzdHJlYW1zIHRvIHNuZF9wY21fbmV3KCkgZm9yIHRoZSBudW1iZXIgb2Ygc3Vic3RyZWFtcwordG8gY3JlYXRlLgorCitUaGUgY2hhbm5lbHNfbWluLCBjaGFubmVsc19tYXgsIHJhdGVzIGFuZCBmb3JtYXRzIHNob3VsZCBiZSBjb3BpZWQgdG8KK3J1bnRpbWUtPmh3IHJlY29yZC4gIFRoZXkgYW5kIG1heGJwcyBmaWVsZHMgYXJlIHVzZWQgYWxzbyB0byBjb21wdXRlCit0aGUgZm9ybWF0IHZhbHVlIGZvciB0aGUgSERBIGNvZGVjIGFuZCBjb250cm9sbGVyLiAgQ2FsbAorc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQoKSB0byBnZXQgdGhlIGZvcm1hdCB2YWx1ZS4KKworVGhlIG9wcyBmaWVsZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGNhbGxiYWNrIGZ1bmN0aW9uczoKKworc3RydWN0IGhkYV9wY21fb3BzIHsKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8sIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkgICAgc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKTsKKwlpbnQgKCpjbG9zZSkoc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvLCBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJICAgICBzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pOworCWludCAoKnByZXBhcmUpKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaW5mbywgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJICAgICAgIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7CisJaW50ICgqY2xlYW51cCkoc3RydWN0IGhkYV9wY21fc3RyZWFtICppbmZvLCBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJICAgICAgIHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSk7Cit9OworCitBbGwgYXJlIG5vbi1OVUxMLCBzbyB5b3UgY2FuIGNhbGwgdGhlbSBzYWZlbHkgd2l0aG91dCBOVUxMIGNoZWNrLgorCitUaGUgb3BlbiBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIGluIFBDTSBvcGVuIGFmdGVyIHJ1bnRpbWUtPmh3IGlzCitzZXQgdXAuICBJdCBtYXkgb3ZlcnJpZGUgc29tZSBzZXR0aW5nIGFuZCBjb25zdHJhaW50cyBhZGRpdGlvbmFsbHkuCitTaW1pbGFybHksIHRoZSBjbG9zZSBjYWxsYmFjayBzaG91bGQgYmUgY2FsbGVkIGluIHRoZSBQQ00gY2xvc2UuCisKK1RoZSBwcmVwYXJlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgaW4gUENNIHByZXBhcmUuICBUaGlzIHdpbGwgc2V0Cit1cCB0aGUgY29kZWMgY2hpcCBwcm9wZXJseSBmb3IgdGhlIG9wZXJhdGlvbi4gIFRoZSBjbGVhbnVwIHNob3VsZCBiZQorY2FsbGVkIGluIGh3X2ZyZWUgdG8gY2xlYW4gdXAgdGhlIGNvbmZpZ3VyYXRpb24uCisKK1RoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUsIGF0IGxlYXN0IGZvciBvcGVuIGFuZAorcHJlcGFyZSBjYWxsYmFja3MuICBXaGVuIGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQsIHNvbWUgZXJyb3IKK29jY3VycmVkLgorCisKK1Byb2MgRmlsZXMKKz09PT09PT09PT0KKworRWFjaCBjb2RlYyBkdW1wcyB0aGUgd2lkZ2V0IG5vZGUgaW5mb3JtYXRpb24gaW4KKy9wcm9jL2Fzb3VuZC9jYXJkKi9jb2RlYyMqIGZpbGUuICBUaGlzIGluZm9ybWF0aW9uIHdvdWxkIGJlIHJlYWxseQoraGVscGZ1bCBmb3IgZGVidWdnaW5nLiAgUGxlYXNlIHByb3ZpZGUgaXRzIGNvbnRlbnRzIHRvZ2V0aGVyIHdpdGggdGhlCitidWcgcmVwb3J0LgorCisKK1Bvd2VyIE1hbmFnZW1lbnQKKz09PT09PT09PT09PT09PT0KKworSXQncyBzaW1wbGU6CitDYWxsIHNuZF9oZGFfc3VzcGVuZCgpIGluIHRoZSBQTSBzdXNwZW5kIGNhbGxiYWNrLgorQ2FsbCBzbmRfaGRhX3Jlc3VtZSgpIGluIHRoZSBQTSByZXN1bWUgY2FsbGJhY2suCisKKworQ29kZWMgUHJlc2V0IChQYXRjaCkKKz09PT09PT09PT09PT09PT09PT09CisKK1RvIHNldCB1cCBhbmQgaGFuZGxlIHRoZSBjb2RlYyBmdW5jdGlvbmFsaXR5IGZ1bGx5LCBlYWNoIGNvZGVjIG1heQoraGF2ZSBhIGNvZGVjIHByZXNldCAocGF0Y2gpLiAgSXQncyBkZWZpbmVkIGluIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0OgorCisJc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgeworCQl1bnNpZ25lZCBpbnQgaWQ7CisJCXVuc2lnbmVkIGludCBtYXNrOworCQl1bnNpZ25lZCBpbnQgc3ViczsKKwkJdW5zaWduZWQgaW50IHN1YnNfbWFzazsKKwkJdW5zaWduZWQgaW50IHJldjsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJaW50ICgqcGF0Y2gpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwl9OworCitXaGVuIHRoZSBjb2RlYyBpZCBhbmQgY29kZWMgc3Vic3lzdGVtIGlkIG1hdGNoIHdpdGggdGhlIGdpdmVuIGlkIGFuZAorc3VicyBmaWVsZHMgYml0d2lzZSAod2l0aCBiaXRtYXNrIG1hc2sgYW5kIHN1YnNfbWFzayksIHRoZSBjYWxsYmFjaworcGF0Y2ggaXMgY2FsbGVkLiAgVGhlIHBhdGNoIGNhbGxiYWNrIHNob3VsZCBpbml0aWFsaXplIHRoZSBjb2RlYyBhbmQKK3NldCB0aGUgY29kZWMtPnBhdGNoX29wcyBmaWVsZC4gIFRoaXMgaXMgZGVmaW5lZCBhcyBiZWxvdzoKKworCXN0cnVjdCBoZGFfY29kZWNfb3BzIHsKKwkJaW50ICgqYnVpbGRfY29udHJvbHMpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKwkJaW50ICgqYnVpbGRfcGNtcykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCQlpbnQgKCppbml0KShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CisJCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpOworCSNpZmRlZiBDT05GSUdfUE0KKwkJaW50ICgqc3VzcGVuZCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJCWludCAoKnJlc3VtZSkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCSNlbmRpZgorCX07CisKK1RoZSBidWlsZF9jb250cm9scyBjYWxsYmFjayBpcyBjYWxsZWQgZnJvbSBzbmRfaGRhX2J1aWxkX2NvbnRyb2xzKCkuCitTaW1pbGFybHksIHRoZSBidWlsZF9wY21zIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tCitzbmRfaGRhX2J1aWxkX3BjbXMoKS4gIFRoZSBpbml0IGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlcgorYnVpbGRfY29udHJvbHMgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUuCitUaGUgZnJlZSBjYWxsYmFjayBpcyBjYWxsZWQgYXMgYSBkZXN0cnVjdG9yLgorCitUaGUgdW5zb2xfZXZlbnQgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gYW4gdW5zb2xpY2l0ZWQgZXZlbnQgaXMKK3JlY2VpdmVkLgorCitUaGUgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyBhcmUgZm9yIHBvd2VyIG1hbmFnZW1lbnQuCisKK0VhY2ggZW50cnkgY2FuIGJlIE5VTEwgaWYgbm90IG5lY2Vzc2FyeSB0byBiZSBjYWxsZWQuCisKKworR2VuZXJpYyBQYXJzZXIKKz09PT09PT09PT09PT09CisKK1doZW4gdGhlIGRldmljZSBkb2Vzbid0IG1hdGNoIHdpdGggYW55IGdpdmVuIHByZXNldHMsIHRoZSB3aWRnZXRzIGFyZQorcGFyc2VkIHZpYSB0aCBnZW5lcmljIHBhcnNlciAoaGRhX2dlbmVyaWMuYykuICBJdHMgc3VwcG9ydCBpcworbGltaXRlZDogbm8gbXVsdGktY2hhbm5lbCBzdXBwb3J0LCBmb3IgZXhhbXBsZS4KKworCitEaWdpdGFsIEkvTworPT09PT09PT09PT0KKworQ2FsbCBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9vdXRfY3RscygpIGZyb20gdGhlIHBhdGNoIHRvIGNyZWF0ZSBjb250cm9scworcmVsYXRlZCB3aXRoIFNQRElGIG91dC4gIEluIHRoZSBwYXRjaCByZXN1bWUgY2FsbGJhY2ssIGNhbGwKK3NuZF9oZGFfcmVzdW1lX3NwZGlmKCkuCisKKworSGVscGVyIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PQorCitzbmRfaGRhX2dldF9jb2RlY19uYW1lKCkgc3RvcmVzIHRoZSBjb2RlYyBuYW1lIG9uIHRoZSBnaXZlbiBzdHJpbmcuCisKK3NuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKCkgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZSBjb25maWd1cmF0aW9uCitpbmZvcm1hdGlvbiBtYXRjaGluZyB3aXRoIHRoZSBkZXZpY2UuICBEZWZpbmUgdGhlIHRhYmxlIHdpdGggc3RydWN0CitoZGFfYm9hcmRfY29uZmlnIGVudHJpZXMgKHplcm8tdGVybWluYXRlZCksIGFuZCBwYXNzIGl0IHRvIHRoZQorZnVuY3Rpb24uICBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoZSBtb2RlbG5hbWUgZ2l2ZW4gYXMgYSBtb2R1bGUKK3BhcmFtZXRlciwgYW5kIFBDSSBzdWJzeXN0ZW0gSURzLiAgSWYgdGhlIG1hdGNoaW5nIGVudHJ5IGlzIGZvdW5kLCBpdAorcmV0dXJucyB0aGUgY29uZmlnIGZpZWxkIHZhbHVlLgorCitzbmRfaGRhX2FkZF9uZXdfY3RscygpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgYWRkIGNvbnRyb2wgZW50cmllcy4KK1Bhc3MgdGhlIHplcm8tdGVybWluYXRlZCBhcnJheSBvZiBzbmRfa2NvbnRyb2xfbmV3X3QuICBUaGUgc2FtZSBhcnJheQorY2FuIGJlIHBhc3NlZCB0byBzbmRfaGRhX3Jlc3VtZV9jdGxzKCkgZm9yIHJlc3VtZS4KK05vdGUgdGhhdCB0aGlzIHdpbGwgY2FsbCBjb250cm9sLT5wdXQgY2FsbGJhY2sgb2YgdGhlc2UgZW50cmllcy4gIFNvLAorcHV0IGNhbGxiYWNrIHNob3VsZCBjaGVjayBjb2RlYy0+aW5fcmVzdW1lIGFuZCBmb3JjZSB0byByZXN0b3JlIHRoZQorZ2l2ZW4gdmFsdWUgaWYgaXQncyBub24temVybyBldmVuIGlmIHRoZSB2YWx1ZSBpcyBpZGVudGljYWwgd2l0aCB0aGUKK2NhY2hlZCB2YWx1ZS4KKworTWFjcm9zIEhEQV9DT0RFQ19WT0xVTUUoKSwgSERBX0NPREVDX01VVEUoKSBhbmQgdGhlaXIgdmFyaWFibGVzIGNhbiBiZQordXNlZCBmb3IgdGhlIGVudHJ5IG9mIHNuZF9rY29udHJvbF9uZXdfdC4KKworVGhlIGlucHV0IE1VWCBoZWxwZXIgY2FsbGJhY2tzIGZvciBzdWNoIGEgY29udHJvbCBhcmUgcHJvdmlkZWQsIHRvbzoKK3NuZF9oZGFfaW5wdXRfbXV4X2luZm8oKSBhbmQgc25kX2hkYV9pbnB1dF9tdXhfcHV0KCkuICBTZWUKK3BhdGNoX3JlYWx0ZWsuYyBmb3IgZXhhbXBsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zZXFfb3NzLmh0bWwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VxX29zcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Nzc2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VxX29zcy5odG1sCkBAIC0wLDAgKzEsNDA5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPEhUTUw+Cis8SEVBRD4KKyAgIDxUSVRMRT5PU1MgU2VxdWVuY2VyIEVtdWxhdGlvbiBvbiBBTFNBPC9USVRMRT4KKzwvSEVBRD4KKzxCT0RZPgorCis8Q0VOVEVSPgorPEgxPgorCis8SFIgV0lEVEg9IjEwMCUiPjwvSDE+PC9DRU5URVI+CisKKzxDRU5URVI+Cis8SDE+CitPU1MgU2VxdWVuY2VyIEVtdWxhdGlvbiBvbiBBTFNBPC9IMT48L0NFTlRFUj4KKworPEhSIFdJRFRIPSIxMDAlIj4KKzxQPkNvcHlyaWdodCAoYykgMTk5OCwxOTk5IGJ5IFRha2FzaGkgSXdhaQorPFRUPjxBIEhSRUY9Im1haWx0bzppd2FpQHd3LnVuaS1lcmxhbmdlbi5kZSI+Jmx0O2l3YWlAd3cudW5pLWVybGFuZ2VuLmRlPjwvQT48L1RUPgorPFA+dmVyLjAuMS44OyBOb3YuIDE2LCAxOTk5Cis8SDI+CisKKzxIUiBXSURUSD0iMTAwJSI+PC9IMj4KKworPEgyPgorMS4gRGVzY3JpcHRpb248L0gyPgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIE9TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIGRyaXZlciBvbiBBTFNBLiBOb3RlCit0aGF0IHRoaXMgcHJvZ3JhbSBpcyBzdGlsbCBpbiB0aGUgZGV2ZWxvcG1lbnQgc3RhdGUuCis8UD5XaGF0IHRoaXMgZG9lcyAtIGl0IHByb3ZpZGVzIHRoZSBlbXVsYXRpb24gb2YgdGhlIE9TUyBzZXF1ZW5jZXIsIGFjY2VzcwordmlhCis8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBhbmQgPFRUPi9kZXYvbXVzaWM8L1RUPiBkZXZpY2VzLgorVGhlIG1vc3Qgb2YgYXBwbGljYXRpb25zIHVzaW5nIE9TUyBjYW4gcnVuIGlmIHRoZSBhcHByb3ByaWF0ZSBBTFNBCitzZXF1ZW5jZXIgaXMgcHJlcGFyZWQuCis8UD5UaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBlbXVsYXRlZCBieSB0aGlzIGRyaXZlcjoKKzxVTD4KKzxMST4KK05vcm1hbCBzZXF1ZW5jZXIgYW5kIE1JREkgZXZlbnRzOjwvTEk+CisKKzxCUj5UaGV5IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIEFMU0Egc2VxdWVuY2VyIGV2ZW50cywgYW5kIHNlbnQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKK3BvcnQuCis8TEk+CitUaW1lciBldmVudHM6PC9MST4KKworPEJSPlRoZSB0aW1lciBpcyBub3Qgc2VsZWN0YWJsZSBieSBpb2N0bC4gVGhlIGNvbnRyb2wgcmF0ZSBpcyBmaXhlZCB0bworMTAwIHJlZ2FyZGxlc3Mgb2YgSFouIFRoYXQgaXMsIGV2ZW4gb24gQWxwaGEgc3lzdGVtLCBhIHRpY2sgaXMgYWx3YXlzCisxLzEwMCBzZWNvbmQuIFRoZSBiYXNlIHJhdGUgYW5kIHRlbXBvIGNhbiBiZSBjaGFuZ2VkIGluIDxUVD4vZGV2L211c2ljPC9UVD4uCisKKzxMST4KK1BhdGNoIGxvYWRpbmc6PC9MST4KKworPEJSPkl0IHB1cmVseSBkZXBlbmRzIG9uIHRoZSBzeW50aCBkcml2ZXJzIHdoZXRoZXIgaXQncyBzdXBwb3J0ZWQgc2luY2UKK3RoZSBwYXRjaCBsb2FkaW5nIGlzIHJlYWxpemVkIGJ5IGNhbGxiYWNrIHRvIHRoZSBzeW50aCBkcml2ZXIuCis8TEk+CitJL08gY29udHJvbHM6PC9MST4KKworPEJSPk1vc3Qgb2YgY29udHJvbHMgYXJlIGFjY2VwdGVkLiBTb21lIGNvbnRyb2xzCithcmUgZGVwZW5kZW50IG9uIHRoZSBzeW50aCBkcml2ZXIsIGFzIHdlbGwgYXMgZXZlbiBvbiBvcmlnaW5hbCBPU1MuPC9VTD4KK0Z1cnRoZXJtb3JlLCB5b3UgY2FuIGZpbmQgdGhlIGZvbGxvd2luZyBhZHZhbmNlZCBmZWF0dXJlczoKKzxVTD4KKzxMST4KK0JldHRlciBxdWV1ZSBtZWNoYW5pc206PC9MST4KKworPEJSPlRoZSBldmVudHMgYXJlIHF1ZXVlZCBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLgorPExJPgorTXVsdGlwbGUgYXBwbGljYXRpb25zOjwvTEk+CisKKzxCUj5Zb3UgY2FuIHJ1biB0d28gb3IgbW9yZSBhcHBsaWNhdGlvbnMgc2ltdWx0YW5lb3VzbHkgKGV2ZW4gZm9yIE9TUyBzZXF1ZW5jZXIpIQorSG93ZXZlciwgZWFjaCBNSURJIGRldmljZSBpcyBleGNsdXNpdmUgLSB0aGF0IGlzLCBpZiBhIE1JREkgZGV2aWNlIGlzIG9wZW5lZAorb25jZSBieSBzb21lIGFwcGxpY2F0aW9uLCBvdGhlciBhcHBsaWNhdGlvbnMgY2FuJ3QgdXNlIGl0LiBObyBzdWNoIGEgcmVzdHJpY3Rpb24KK2luIHN5bnRoIGRldmljZXMuCis8TEk+CitSZWFsLXRpbWUgZXZlbnQgcHJvY2Vzc2luZzo8L0xJPgorCis8QlI+VGhlIGV2ZW50cyBjYW4gYmUgcHJvY2Vzc2VkIGluIHJlYWwgdGltZSB3aXRob3V0IHVzaW5nIG91dCBvZiBib3VuZAoraW9jdGwuIFRvIHN3aXRjaCB0byByZWFsLXRpbWUgbW9kZSwgc2VuZCBBQlNUSU1FIDAgZXZlbnQuIFRoZSBmb2xsb3dlZAorZXZlbnRzIHdpbGwgYmUgcHJvY2Vzc2VkIGluIHJlYWwtdGltZSB3aXRob3V0IHF1ZXVlZC4gVG8gc3dpdGNoIG9mZiB0aGUKK3JlYWwtdGltZSBtb2RlLCBzZW5kIFJFTFRJTUUgMCBldmVudC4KKzxMST4KKzxUVD4vcHJvYzwvVFQ+IGludGVyZmFjZTo8L0xJPgorCis8QlI+VGhlIHN0YXR1cyBvZiBhcHBsaWNhdGlvbnMgYW5kIGRldmljZXMgY2FuIGJlIHNob3duIHZpYSA8VFQ+L3Byb2MvYXNvdW5kL3NlcS9vc3M8L1RUPgorYXQgYW55IHRpbWUuIEluIHRoZSBsYXRlciB2ZXJzaW9uLCBjb25maWd1cmF0aW9uIHdpbGwgYmUgY2hhbmdlZCB2aWEgPFRUPi9wcm9jPC9UVD4KK2ludGVyZmFjZSwgdG9vLjwvVUw+CisKKzxIMj4KKzIuIEluc3RhbGxhdGlvbjwvSDI+CitSdW4gY29uZmlndXJlIHNjcmlwdCB3aXRoIGJvdGggc2VxdWVuY2VyIHN1cHBvcnQgKDxUVD4tLXdpdGgtc2VxdWVuY2VyPXllczwvVFQ+KQorYW5kIE9TUyBlbXVsYXRpb24gKDxUVD4tLXdpdGgtb3NzPXllczwvVFQ+KSBvcHRpb25zLiBBIG1vZHVsZSA8VFQ+c25kLXNlcS1vc3MubzwvVFQ+Cit3aWxsIGJlIGNyZWF0ZWQuIElmIHRoZSBzeW50aCBtb2R1bGUgb2YgeW91ciBzb3VuZCBjYXJkIHN1cHBvcnRzIGZvciBPU1MKK2VtdWxhdGlvbiAoc28gZmFyLCBvbmx5IEVtdTgwMDAgZHJpdmVyKSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4KK090aGVyd2lzZSwgeW91IG5lZWQgdG8gbG9hZCB0aGlzIG1vZHVsZSBtYW51YWxseS4KKzxQPkF0IGJlZ2lubmluZywgdGhpcyBtb2R1bGUgcHJvYmVzIGFsbCB0aGUgTUlESSBwb3J0cyB3aGljaCBoYXZlIGJlZW4KK2FscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBzZXF1ZW5jZXIuIE9uY2UgYWZ0ZXIgdGhhdCwgdGhlIGNyZWF0aW9uIGFuZCBkZWxldGlvbgorb2YgcG9ydHMgYXJlIHdhdGNoZWQgYnkgYW5ub3VuY2VtZW50IG1lY2hhbmlzbSBvZiBBTFNBIHNlcXVlbmNlci4KKzxQPlRoZSBhdmFpbGFibGUgc3ludGggYW5kIE1JREkgZGV2aWNlcyBjYW4gYmUgZm91bmQgaW4gcHJvYyBpbnRlcmZhY2UuCitSdW4gIjxUVD5jYXQgL3Byb2MvYXNvdW5kL3NlcS9vc3M8L1RUPiIsIGFuZCBjaGVjayB0aGUgZGV2aWNlcy4gRm9yIGV4YW1wbGUsCitpZiB5b3UgdXNlIGFuIEFXRTY0IGNhcmQsIHlvdSdsbCBzZWUgbGlrZSB0aGUgZm9sbG93aW5nOgorPFBSRT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24gdmVyc2lvbiAwLjEuOAorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFMU0EgY2xpZW50IG51bWJlciA2MworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEFMU0EgcmVjZWl2ZXIgcG9ydCAwCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBOdW1iZXIgb2YgYXBwbGljYXRpb25zOiAwCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBOdW1iZXIgb2Ygc3ludGggZGV2aWNlczogMQorCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc3ludGggMDogW0VNVTgwMDBdCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdHlwZSAweDEgOiBzdWJ0eXBlIDB4MjAgOiB2b2ljZXMgMzIKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjYXBhYmlsdGllcyA6IGlvY3RsIGVuYWJsZWQgLyBsb2FkX3BhdGNoIGVuYWJsZWQKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IE51bWJlciBvZiBNSURJIGRldmljZXM6IDMKKworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IG1pZGkgMDogW0VtdTgwMDAgUG9ydC0wXSBBTFNBIHBvcnQgNjU6MAorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhcGFiaWxpdHkgd3JpdGUgLyBvcGVuZWQgbm9uZQorCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbWlkaSAxOiBbRW11ODAwMCBQb3J0LTFdIEFMU0EgcG9ydCA2NToxCismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY2FwYWJpbGl0eSB3cml0ZSAvIG9wZW5lZCBub25lCisKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBtaWRpIDI6IFswOiBNUFUtNDAxIChVQVJUKV0gQUxTQSBwb3J0IDY0OjAKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjYXBhYmlsaXR5IHJlYWQvd3JpdGUgLyBvcGVuZWQgbm9uZTwvUFJFPgorTm90ZSB0aGF0IHRoZSBkZXZpY2UgbnVtYmVyIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5mb3JtYXRpb24gb2YKKzxUVD4vcHJvYy9hc291bmQvb3NzLWRldmljZXM8L1RUPgorb3Igb25lcyBvZiB0aGUgb3JpZ2luYWwgT1NTIGRyaXZlci4gVXNlIHRoZSBkZXZpY2UgbnVtYmVyIGxpc3RlZCBpbiA8VFQ+L3Byb2MvYXNvdW5kL3NlcS9vc3M8L1RUPgordG8gcGxheSB2aWEgT1NTIHNlcXVlbmNlciBlbXVsYXRpb24uCis8SDI+CiszLiBVc2luZyBTeW50aGVzaXplciBEZXZpY2VzPC9IMj4KK1J1biB5b3VyIGZhdm9yaXRlIHByb2dyYW0uIEkndmUgdGVzdGVkIHBsYXltaWRpLTIuNCwgYXdlbWlkaS0wLjQuMywgZ21vZC0zLjEKK2FuZCB4bXAtMS4xLjUuIFlvdSBjYW4gbG9hZCBzYW1wbGVzIHZpYSA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBsaWtlIHNmeGxvYWQsCit0b28uCis8UD5JZiB0aGUgbG93bGV2ZWwgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGFjY2VzcyB0byBzeW50aCBkZXZpY2VzIChsaWtlCitFbXU4MDAwIGRyaXZlciksIHR3byBvciBtb3JlIGFwcGxpY2F0aW9ucyBhcmUgYWxsb3dlZCB0byBydW4gYXQgdGhlIHNhbWUKK3RpbWUuCis8SDI+Cis0LiBVc2luZyBNSURJIERldmljZXM8L0gyPgorU28gZmFyLCBvbmx5IE1JREkgb3V0cHV0IHdhcyB0ZXN0ZWQuIE1JREkgaW5wdXQgd2FzIG5vdCBjaGVja2VkIGF0IGFsbCwKK2J1dCBob3BlZnVsbHkgaXQgd2lsbCB3b3JrLiBVc2UgdGhlIGRldmljZSBudW1iZXIgbGlzdGVkIGluIDxUVD4vcHJvYy9hc291bmQvc2VxL29zczwvVFQ+LgorQmUgYXdhcmUgdGhhdCB0aGVzZSBudW1iZXJzIGFyZSBtb3N0bHkgZGlmZmVyZW50IGZyb20gdGhlIGxpc3QgaW4KKzxUVD4vcHJvYy9hc291bmQvb3NzLWRldmljZXM8L1RUPi4KKzxIMj4KKzUuIE1vZHVsZSBPcHRpb25zPC9IMj4KK1RoZSBmb2xsb3dpbmcgbW9kdWxlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKzxVTD4KKzxMST4KKzxUVD5tYXhxbGVuPC9UVD48L0xJPgorCis8QlI+c3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJlYWQvd3JpdGUgcXVldWUgbGVuZ3RoLiBUaGlzIHF1ZXVlIGlzIHByaXZhdGUKK2ZvciBPU1Mgc2VxdWVuY2VyLCBzbyB0aGF0IGl0IGlzIGluZGVwZW5kZW50IGZyb20gdGhlIHF1ZXVlIGxlbmd0aCBvZiBBTFNBCitzZXF1ZW5jZXIuIERlZmF1bHQgdmFsdWUgaXMgMTAyNC4KKzxMST4KKzxUVD5zZXFfb3NzX2RlYnVnPC9UVD48L0xJPgorCis8QlI+c3BlY2lmaWVzIHRoZSBkZWJ1ZyBsZXZlbCBhbmQgYWNjZXB0cyB6ZXJvICg9IG5vIGRlYnVnIG1lc3NhZ2UpIG9yCitwb3NpdGl2ZSBpbnRlZ2VyLiBEZWZhdWx0IHZhbHVlIGlzIDAuPC9VTD4KKworPEgyPgorNi4gUXVldWUgTWVjaGFuaXNtPC9IMj4KK09TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIHVzZXMgYW4gQUxTQSBwcmlvcml0eSBxdWV1ZS4gVGhlCitldmVudHMgZnJvbSA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBhcmUgcHJvY2Vzc2VkIGFuZCBwdXQgb250byB0aGUgcXVldWUKK3NwZWNpZmllZCBieSBtb2R1bGUgb3B0aW9uLgorPFA+QWxsIHRoZSBldmVudHMgZnJvbSA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBhcmUgcGFyc2VkIGF0IGJlZ2lubmluZy4KK1RoZSB0aW1pbmcgZXZlbnRzIGFyZSBhbHNvIHBhcnNlZCBhdCB0aGlzIG1vbWVudCwgc28gdGhhdCB0aGUgZXZlbnRzIG1heQorYmUgcHJvY2Vzc2VkIGluIHJlYWwtdGltZS4gU2VuZGluZyBhbiBldmVudCBBQlNUSU1FIDAgc3dpdGNoZXMgdGhlIG9wZXJhdGlvbgorbW9kZSB0byByZWFsLXRpbWUgbW9kZSwgYW5kIHNlbmRpbmcgYW4gZXZlbnQgUkVMVElNRSAwIHN3aXRjaGVzIGl0IG9mZi4KK0luIHRoZSByZWFsLXRpbWUgbW9kZSwgYWxsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBpbW1lZGlhdGVseS4KKzxQPlRoZSBxdWV1ZWQgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIEFMU0Egc2VxdWVuY2VyCitwb3J0cyBhZnRlciBzY2hlZHVsZWQgdGltZSBieSBBTFNBIHNlcXVlbmNlciBkaXNwYXRjaGVyLgorPFA+SWYgdGhlIHdyaXRlLXF1ZXVlIGlzIGZ1bGwsIHRoZSBhcHBsaWNhdGlvbiBzbGVlcHMgdW50aWwgYSBjZXJ0YWluIGFtb3VudAorKGFzIGRlZmF1bHQgb25lIGhhbGYpIGJlY29tZXMgZW1wdHkgaW4gYmxvY2tpbmcgbW9kZS4gVGhlIHN5bmNocm9uaXphdGlvbgordG8gd3JpdGUgdGltaW5nIHdhcyBpbXBsZW1lbnRlZCwgdG9vLgorPFA+VGhlIGlucHV0IGZyb20gTUlESSBkZXZpY2VzIG9yIGVjaG8tYmFjayBldmVudHMgYXJlIHN0b3JlZCBvbiByZWFkIEZJRk8KK3F1ZXVlLiBJZiBhcHBsaWNhdGlvbiByZWFkcyA8VFQ+L2Rldi9zZXF1ZW5jZXI8L1RUPiBpbiBibG9ja2luZyBtb2RlLCB0aGUKK3Byb2Nlc3Mgd2lsbCBiZSBhd2FrZWQuCisKKzxIMj4KKzcuIEludGVyZmFjZSB0byBTeW50aGVzaXplciBEZXZpY2U8L0gyPgorCis8SDM+Cis3LjEuIFJlZ2lzdHJhdGlvbjwvSDM+CitUbyByZWdpc3RlciBhbiBPU1Mgc3ludGhlc2l6ZXIgZGV2aWNlLCB1c2UgPFRUPnNuZF9zZXFfb3NzX3N5bnRoX3JlZ2lzdGVyPC9UVD4KK2Z1bmN0aW9uLgorPFBSRT5pbnQgc25kX3NlcV9vc3Nfc3ludGhfcmVnaXN0ZXIoY2hhciAqbmFtZSwgaW50IHR5cGUsIGludCBzdWJ0eXBlLCBpbnQgbnZvaWNlcywKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzbmRfc2VxX29zc19jYWxsYmFja190ICpvcGVyLCB2b2lkICpwcml2YXRlX2RhdGEpPC9QUkU+CitUaGUgYXJndW1lbnRzIDxUVD5uYW1lPC9UVD4sIDxUVD50eXBlPC9UVD4sIDxUVD5zdWJ0eXBlPC9UVD4gYW5kCis8VFQ+bnZvaWNlczwvVFQ+CithcmUgdXNlZCBmb3IgbWFraW5nIHRoZSBhcHByb3ByaWF0ZSBzeW50aF9pbmZvIHN0cnVjdHVyZSBmb3IgaW9jdGwuIFRoZQorcmV0dXJuIHZhbHVlIGlzIGFuIGluZGV4IG51bWJlciBvZiB0aGlzIGRldmljZS4gVGhpcyBpbmRleCBtdXN0IGJlIHJlbWVtYmVyZWQKK2ZvciB1bnJlZ2lzdGVyLiBJZiByZWdpc3RyYXRpb24gaXMgZmFpbGVkLCAtZXJybm8gd2lsbCBiZSByZXR1cm5lZC4KKzxQPlRvIHJlbGVhc2UgdGhpcyBkZXZpY2UsIGNhbGwgPFRUPnNuZF9zZXFfb3NzX3N5bnRoX3VucmVnaXN0ZXIgZnVuY3Rpb248L1RUPjoKKzxQUkU+aW50IHNuZF9zZXFfb3NzX3N5bnRoX3VucmVnaXN0ZXIoaW50IGluZGV4KSw8L1BSRT4KK3doZXJlIHRoZSA8VFQ+aW5kZXg8L1RUPiBpcyB0aGUgaW5kZXggbnVtYmVyIHJldHVybmVkIGJ5IHJlZ2lzdGVyIGZ1bmN0aW9uLgorPEgzPgorNy4yLiBDYWxsYmFja3M8L0gzPgorT1NTIHN5bnRoZXNpemVyIGRldmljZXMgaGF2ZSBjYXBhYmlsaXR5IGZvciBzYW1wbGUgZG93bmxvYWRpbmcgYW5kIGlvY3RscworbGlrZSBzYW1wbGUgcmVzZXQuIEluIE9TUyBlbXVsYXRpb24sIHRoZXNlIHNwZWNpYWwgZmVhdHVyZXMgYXJlIHJlYWxpemVkCitieSB1c2luZyBjYWxsYmFja3MuIFRoZSByZWdpc3RyYXRpb24gYXJndW1lbnQgb3BlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlc2UKK2NhbGxiYWNrcy4gVGhlIGZvbGxvd2luZyBjYWxsYmFjayBmdW5jdGlvbnMgbXVzdCBiZSBkZWZpbmVkOgorPFBSRT5zbmRfc2VxX29zc19jYWxsYmFja190OgorJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKm9wZW4pKHNuZF9zZXFfb3NzX2FyZ190ICpwLCB2b2lkICpjbG9zdXJlKTsKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQgKCpjbG9zZSkoc25kX3NlcV9vc3NfYXJnX3QgKnApOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKmlvY3RsKShzbmRfc2VxX29zc19hcmdfdCAqcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKmxvYWRfcGF0Y2gpKHNuZF9zZXFfb3NzX2FyZ190ICpwLCBpbnQgZm9ybWF0LCBjb25zdCBjaGFyICpidWYsIGludCBvZmZzLCBpbnQgY291bnQpOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCAoKnJlc2V0KShzbmRfc2VxX29zc19hcmdfdCAqcCk7CitFeGNlcHQgZm9yIDxUVD5vcGVuPC9UVD4gYW5kIDxUVD5jbG9zZTwvVFQ+IGNhbGxiYWNrcywgdGhleSBhcmUgYWxsb3dlZAordG8gYmUgTlVMTC4KKzxQPkVhY2ggY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhlIGFyZ3VtZW50IHR5cGUgc25kX3NlcV9vc3NfYXJnX3QgYXMgdGhlCitmaXJzdCBhcmd1bWVudC4KKzxQUkU+c3RydWN0IHNuZF9zZXFfb3NzX2FyZ190IHsKKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQgYXBwX2luZGV4OworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCBmaWxlX21vZGU7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IHNlcV9tb2RlOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNuZF9zZXFfYWRkcl90IGFkZHI7CismbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdm9pZCAqcHJpdmF0ZV9kYXRhOworJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludCBldmVudF9wYXNzaW5nOworfTs8L1BSRT4KK1RoZSBmaXJzdCB0aHJlZSBmaWVsZHMsIDxUVD5hcHBfaW5kZXg8L1RUPiwgPFRUPmZpbGVfbW9kZTwvVFQ+IGFuZAorPFRUPnNlcV9tb2RlPC9UVD4KK2FyZSBpbml0aWFsaXplZCBieSBPU1Mgc2VxdWVuY2VyLiBUaGUgPFRUPmFwcF9pbmRleDwvVFQ+IGlzIHRoZSBhcHBsaWNhdGlvbgoraW5kZXggd2hpY2ggaXMgdW5pcXVlIHRvIGVhY2ggYXBwbGljYXRpb24gb3BlbmluZyBPU1Mgc2VxdWVuY2VyLiBUaGUKKzxUVD5maWxlX21vZGU8L1RUPgoraXMgYml0LWZsYWdzIGluZGljYXRpbmcgdGhlIGZpbGUgb3BlcmF0aW9uIG1vZGUuIFNlZQorPFRUPnNlcV9vc3MuaDwvVFQ+Citmb3IgaXRzIG1lYW5pbmcuIFRoZSA8VFQ+c2VxX21vZGU8L1RUPiBpcyBzZXF1ZW5jZXIgb3BlcmF0aW9uIG1vZGUuIEluCit0aGUgY3VycmVudCB2ZXJzaW9uLCBvbmx5IDxUVD5TTkRfT1NTU0VRX01PREVfU1lOVEg8L1RUPiBpcyB1c2VkLgorPFA+VGhlIG5leHQgdHdvIGZpZWxkcywgPFRUPmFkZHI8L1RUPiBhbmQgPFRUPnByaXZhdGVfZGF0YTwvVFQ+LCBtdXN0IGJlCitmaWxsZWQgYnkgdGhlIHN5bnRoIGRyaXZlciBhdCBvcGVuIGNhbGxiYWNrLiBUaGUgPFRUPmFkZHI8L1RUPiBjb250YWlucwordGhlIGFkZHJlc3Mgb2YgQUxTQSBzZXF1ZW5jZXIgcG9ydCB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGlzIGRldmljZS4gSWYKK3RoZSBkcml2ZXIgYWxsb2NhdGVzIG1lbW9yeSBmb3IgPFRUPnByaXZhdGVfZGF0YTwvVFQ+LCBpdCBtdXN0IGJlIHJlbGVhc2VkCitpbiBjbG9zZSBjYWxsYmFjayBieSBpdHNlbGYuCis8UD5UaGUgbGFzdCBmaWVsZCwgPFRUPmV2ZW50X3Bhc3Npbmc8L1RUPiwgaW5kaWNhdGVzIGhvdyB0byB0cmFuc2xhdGUgbm90ZS1vbgorLyBvZmYgZXZlbnRzLiBJbiA8VFQ+UFJPQ0VTU19FVkVOVFM8L1RUPiBtb2RlLCB0aGUgbm90ZSAyNTUgaXMgcmVnYXJkZWQKK2FzIHZlbG9jaXR5IGNoYW5nZSwgYW5kIGtleSBwcmVzc3VyZSBldmVudCBpcyBwYXNzZWQgdG8gdGhlIHBvcnQuIEluIDxUVD5QQVNTX0VWRU5UUzwvVFQ+Cittb2RlLCBhbGwgbm90ZSBvbi9vZmYgZXZlbnRzIGFyZSBwYXNzZWQgdG8gdGhlIHBvcnQgd2l0aG91dCBtb2RpZmllZC4gPFRUPlBST0NFU1NfS0VZUFJFU1M8L1RUPgorbW9kZSBjaGVja3MgdGhlIG5vdGUgYWJvdmUgMTI4IGFuZCByZWdhcmRzIGl0IGFzIGtleSBwcmVzc3VyZSBldmVudCAobWFpbmx5Citmb3IgRW11ODAwMCBkcml2ZXIpLgorPEg0PgorNy4yLjEuIE9wZW4gQ2FsbGJhY2s8L0g0PgorVGhlIDxUVD5vcGVuPC9UVD4gaXMgY2FsbGVkIGF0IGVhY2ggdGltZSB0aGlzIGRldmljZSBpcyBvcGVuZWQgYnkgYW4gYXBwbGljYXRpb24KK3VzaW5nIE9TUyBzZXF1ZW5jZXIuIFRoaXMgbXVzdCBub3QgYmUgTlVMTC4gVHlwaWNhbGx5LCB0aGUgb3BlbiBjYWxsYmFjaworZG9lcyB0aGUgZm9sbG93aW5nIHByb2NlZHVyZToKKzxPTD4KKzxMST4KK0FsbG9jYXRlIHByaXZhdGUgZGF0YSByZWNvcmQuPC9MST4KKworPExJPgorQ3JlYXRlIGFuIEFMU0Egc2VxdWVuY2VyIHBvcnQuPC9MST4KKworPExJPgorU2V0IHRoZSBuZXcgcG9ydCBhZGRyZXNzIG9uIGFyZy0+YWRkci48L0xJPgorCis8TEk+CitTZXQgdGhlIHByaXZhdGUgZGF0YSByZWNvcmQgcG9pbnRlciBvbiBhcmctPnByaXZhdGVfZGF0YS48L0xJPgorPC9PTD4KK05vdGUgdGhhdCB0aGUgdHlwZSBiaXQtZmxhZ3MgaW4gcG9ydF9pbmZvIG9mIHRoaXMgc3ludGggcG9ydCBtdXN0IE5PVCBjb250YWluCis8VFQ+VFlQRV9NSURJX0dFTkVSSUM8L1RUPgorYml0LiBJbnN0ZWFkLCA8VFQ+VFlQRV9TUEVDSUZJQzwvVFQ+IHNob3VsZCBiZSB1c2VkLiBBbHNvLCA8VFQ+Q0FQX1NVQlNDUklQVElPTjwvVFQ+CitiaXQgc2hvdWxkIE5PVCBiZSBpbmNsdWRlZCwgdG9vLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byB0ZWxsIGl0IGZyb20gb3RoZXIKK25vcm1hbCBNSURJIGRldmljZXMuIElmIHRoZSBvcGVuIHByb2NlZHVyZSBzdWNjZWVkZWQsIHJldHVybiB6ZXJvLiBPdGhlcndpc2UsCityZXR1cm4gLWVycm5vLgorPEg0PgorNy4yLjIgSW9jdGwgQ2FsbGJhY2s8L0g0PgorVGhlIDxUVD5pb2N0bDwvVFQ+IGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXF1ZW5jZXIgcmVjZWl2ZXMgZGV2aWNlLXNwZWNpZmljCitpb2N0bHMuIFRoZSBmb2xsb3dpbmcgdHdvIGlvY3RscyBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgY2FsbGJhY2s6Cis8VUw+Cis8TEk+Cis8VFQ+SU9DVExfU0VRX1JFU0VUX1NBTVBMRVM8L1RUPjwvTEk+CisKKzxCUj5yZXNldCBhbGwgc2FtcGxlcyBvbiBtZW1vcnkgLS0gcmV0dXJuIDAKKzxMST4KKzxUVD5JT0NUTF9TWU5USF9NRU1BVkw8L1RUPjwvTEk+CisKKzxCUj5yZXR1cm4gdGhlIGF2YWlsYWJsZSBtZW1vcnkgc2l6ZQorPExJPgorPFRUPkZNXzRPUF9FTkFCTEU8L1RUPjwvTEk+CisKKzxCUj5jYW4gYmUgaWdub3JlZCB1c3VhbGx5PC9VTD4KK1RoZSBvdGhlciBpb2N0bHMgYXJlIHByb2Nlc3NlZCBpbnNpZGUgdGhlIHNlcXVlbmNlciB3aXRob3V0IHBhc3NpbmcgdG8KK3RoZSBsb3dsZXZlbCBkcml2ZXIuCis8SDQ+Cis3LjIuMyBMb2FkX1BhdGNoIENhbGxiYWNrPC9IND4KK1RoZSA8VFQ+bG9hZF9wYXRjaDwvVFQ+IGNhbGxiYWNrIGlzIHVzZWQgZm9yIHNhbXBsZS1kb3dubG9hZGluZy4gVGhpcyBjYWxsYmFjaworbXVzdCByZWFkIHRoZSBkYXRhIG9uIHVzZXItc3BhY2UgYW5kIHRyYW5zZmVyIHRvIGVhY2ggZGV2aWNlLiBSZXR1cm4gMAoraWYgc3VjY2VlZGVkLCBhbmQgLWVycm5vIGlmIGZhaWxlZC4gVGhlIGZvcm1hdCBhcmd1bWVudCBpcyB0aGUgcGF0Y2gga2V5CitpbiBwYXRjaF9pbmZvIHJlY29yZC4gVGhlIGJ1ZiBpcyB1c2VyLXNwYWNlIHBvaW50ZXIgd2hlcmUgcGF0Y2hfaW5mbyByZWNvcmQKK2lzIHN0b3JlZC4gVGhlIG9mZnMgY2FuIGJlIGlnbm9yZWQuIFRoZSBjb3VudCBpcyB0b3RhbCBkYXRhIHNpemUgb2YgdGhpcworc2FtcGxlIGRhdGEuCis8SDQ+Cis3LjIuNCBDbG9zZSBDYWxsYmFjazwvSDQ+CitUaGUgPFRUPmNsb3NlPC9UVD4gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhpcyBkZXZpY2UgaXMgY2xvc2VkIGJ5IHRoZQorYXBwbGljYWlvbi4gSWYgYW55IHByaXZhdGUgZGF0YSB3YXMgYWxsb2NhdGVkIGluIG9wZW4gY2FsbGJhY2ssIGl0IG11c3QKK2JlIHJlbGVhc2VkIGluIHRoZSBjbG9zZSBjYWxsYmFjay4gVGhlIGRlbGV0aW9uIG9mIEFMU0EgcG9ydCBzaG91bGQgYmUKK2RvbmUgaGVyZSwgdG9vLiBUaGlzIGNhbGxiYWNrIG11c3Qgbm90IGJlIE5VTEwuCis8SDQ+Cis3LjIuNSBSZXNldCBDYWxsYmFjazwvSDQ+CitUaGUgPFRUPnJlc2V0PC9UVD4gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gc2VxdWVuY2VyIGRldmljZSBpcyByZXNldCBvcgorY2xvc2VkIGJ5IGFwcGxpY2F0aW9ucy4gVGhlIGNhbGxiYWNrIHNob3VsZCB0dXJuIG9mZiB0aGUgc291bmRzIG9uIHRoZQorcmVsZXZhbnQgcG9ydCBpbW1lZGlhdGVseSwgYW5kIGluaXRpYWxpemUgdGhlIHN0YXR1cyBvZiB0aGUgcG9ydC4gSWYgdGhpcworY2FsbGJhY2sgaXMgdW5kZWZpbmVkLCBPU1Mgc2VxIHNlbmRzIGEgPFRUPkhFQVJUQkVBVDwvVFQ+IGV2ZW50IHRvIHRoZQorcG9ydC4KKzxIMz4KKzcuMyBFdmVudHM8L0gzPgorTW9zdCBvZiB0aGUgZXZlbnRzIGFyZSBwcm9jZXNzZWQgYnkgc2VxdWVuY2VyIGFuZCB0cmFuc2xhdGVkIHRvIHRoZSBhZGVxdWF0ZQorQUxTQSBzZXF1ZW5jZXIgZXZlbnRzLCBzbyB0aGF0IGVhY2ggc3ludGggZGV2aWNlIGNhbiByZWNlaXZlIGJ5IGlucHV0X2V2ZW50CitjYWxsYmFjayBvZiBBTFNBIHNlcXVlbmNlciBwb3J0LiBUaGUgZm9sbG93aW5nIEFMU0EgZXZlbnRzIHNob3VsZCBiZSBpbXBsZW1lbnRlZAorYnkgdGhlIGRyaXZlcjoKKzxCUj4mbmJzcDsKKzxUQUJMRSBCT1JERVIgV0lEVEg9Ijc1JSIgTk9TQVZFID4KKzxUUiBOT1NBVkU+Cis8VEQgTk9TQVZFPjxCPkFMU0EgZXZlbnQ8L0I+PC9URD4KKworPFREPjxCPk9yaWdpbmFsIE9TUyBldmVudHM8L0I+PC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5OT1RFT048L1REPgorCis8VEQ+U0VRX05PVEVPTgorPEJSPk1JRElfTk9URU9OPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5OT1RFPC9URD4KKworPFREPlNFUV9OT1RFT0ZGCis8QlI+TUlESV9OT1RFT0ZGPC9URD4KKzwvVFI+CisKKzxUUiBOT1NBVkU+Cis8VEQgTk9TQVZFPktFWVBSRVNTPC9URD4KKworPFREPk1JRElfS0VZX1BSRVNTVVJFPC9URD4KKzwvVFI+CisKKzxUUiBOT1NBVkU+Cis8VEQ+Q0hBTlBSRVNTPC9URD4KKworPFREIE5PU0FWRT5TRVFfQUZURVJUT1VDSAorPEJSPk1JRElfQ0hOX1BSRVNTVVJFPC9URD4KKzwvVFI+CisKKzxUUiBOT1NBVkU+Cis8VEQgTk9TQVZFPlBHTUNIQU5HRTwvVEQ+CisKKzxURCBOT1NBVkU+U0VRX1BHTUNIQU5HRQorPEJSPk1JRElfUEdNX0NIQU5HRTwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+UElUQ0hCRU5EPC9URD4KKworPFREPlNFUV9DT05UUk9MTEVSKENUUkxfUElUQ0hfQkVOREVSKQorPEJSPk1JRElfUElUQ0hfQkVORDwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+Q09OVFJPTExFUjwvVEQ+CisKKzxURD5NSURJX0NUTF9DSEFOR0UKKzxCUj5TRVFfQkFMQU5DRSAod2l0aCBDVExfUEFOKTwvVEQ+Cis8L1RSPgorCis8VFI+Cis8VEQ+Q09OVFJPTDE0PC9URD4KKworPFREPlNFUV9DT05UUk9MTEVSPC9URD4KKzwvVFI+CisKKzxUUj4KKzxURD5SRUdQQVJBTTwvVEQ+CisKKzxURD5TRVFfQ09OVFJPTExFUihDVFJMX1BJVENIX0JFTkRFUl9SQU5HRSk8L1REPgorPC9UUj4KKworPFRSPgorPFREPlNZU0VYPC9URD4KKworPFREPlNFUV9TWVNFWDwvVEQ+Cis8L1RSPgorPC9UQUJMRT4KKworPFA+VGhlIG1vc3Qgb2YgdGhlc2UgYmVoYXZpb3IgY2FuIGJlIHJlYWxpemVkIGJ5IE1JREkgZW11bGF0aW9uIGRyaXZlcgoraW5jbHVkZWQgaW4gdGhlIEVtdTgwMDAgbG93bGV2ZWwgZHJpdmVyLiBJbiB0aGUgZnV0dXJlIHJlbGVhc2UsIHRoaXMgbW9kdWxlCit3aWxsIGJlIGluZGVwZW5kZW50LgorPFA+U29tZSBPU1MgZXZlbnRzICg8VFQ+U0VRX1BSSVZBVEU8L1RUPiBhbmQgPFRUPlNFUV9WT0xVTUU8L1RUPiBldmVudHMpIGFyZSBwYXNzZWQgYXMgZXZlbnQKK3R5cGUgU05EX1NFUV9PU1NfUFJJVkFURS4gIFRoZSBPU1Mgc2VxdWVuY2VyIHBhc3NlcyB0aGVzZSBldmVudCA4IGJ5dGUKK3BhY2tldHMgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9uLiBUaGUgbG93bGV2ZWwgZHJpdmVyIHNob3VsZCBwcm9jZXNzIHRoZXNlCitldmVudHMgYXBwcm9wcmlhdGVseS4KKzxIMj4KKzguIEludGVyZmFjZSB0byBNSURJIERldmljZTwvSDI+CitTaW5jZSB0aGUgT1NTIGVtdWxhdGlvbiBwcm9iZXMgdGhlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiBvZiBBTFNBIE1JREkgc2VxdWVuY2VyCitwb3J0cyBhdXRvbWF0aWNhbGx5IGJ5IHJlY2VpdmluZyBhbm5vdW5jZW1lbnQgZnJvbSBBTFNBIHNlcXVlbmNlciwgdGhlCitNSURJIGRldmljZXMgZG9uJ3QgbmVlZCB0byBiZSByZWdpc3RlcmVkIGV4cGxpY2l0bHkgbGlrZSBzeW50aCBkZXZpY2VzLgorSG93ZXZlciwgdGhlIE1JREkgcG9ydF9pbmZvIHJlZ2lzdGVyZWQgdG8gQUxTQSBzZXF1ZW5jZXIgbXVzdCBpbmNsdWRlIGEgZ3JvdXAKK25hbWUgPFRUPlNORF9TRVFfR1JPVVBfREVWSUNFPC9UVD4gYW5kIGEgY2FwYWJpbGl0eS1iaXQgPFRUPkNBUF9SRUFEPC9UVD4gb3IKKzxUVD5DQVBfV1JJVEU8L1RUPi4gQWxzbywgc3Vic2NyaXB0aW9uIGNhcGFiaWxpdGllcywgPFRUPkNBUF9TVUJTX1JFQUQ8L1RUPiBvciA8VFQ+Q0FQX1NVQlNfV1JJVEU8L1RUPiwKK211c3QgYmUgZGVmaW5lZCwgdG9vLiBJZiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkLCB0aGUgcG9ydCBpcyBub3QKK3JlZ2lzdGVyZWQgYXMgT1NTIHNlcXVlbmNlciBNSURJIGRldmljZS4KKzxQPlRoZSBldmVudHMgdmlhIE1JREkgZGV2aWNlcyBhcmUgcGFyc2VkIGluIE9TUyBzZXF1ZW5jZXIgYW5kIGNvbnZlcnRlZAordG8gdGhlIGNvcnJlc3BvbmRpbmcgQUxTQSBzZXF1ZW5jZXIgZXZlbnRzLiBUaGUgaW5wdXQgZnJvbSBNSURJIHNlcXVlbmNlcgoraXMgYWxzbyBjb252ZXJ0ZWQgdG8gTUlESSBieXRlIGV2ZW50cyBieSBPU1Mgc2VxdWVuY2VyLiBUaGlzIHdvcmtzIGp1c3QKK2EgcmV2ZXJzZSB3YXkgb2Ygc2VxX21pZGkgbW9kdWxlLgorPEgyPgorOS4gS25vd24gUHJvYmxlbXMgLyBUT0RPJ3M8L0gyPgorCis8VUw+Cis8TEk+CitQYXRjaCBsb2FkaW5nIHZpYSBBTFNBIGluc3RydW1lbnQgbGF5ZXIgaXMgbm90IGltcGxlbWVudGVkIHlldC48L0xJPgorPC9VTD4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NlcmlhbC11MTY1NTAudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NlcmlhbC11MTY1NTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc2VyaWFsLXUxNjU1MC50eHQKQEAgLTAsMCArMSw4OCBAQAorCisJCQlTZXJpYWwgVUFSVCAxNjQ1MC8xNjU1MCBNSURJIGRyaXZlcgorCQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGFkYXB0b3IgbW9kdWxlIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIHNlbGVjdCBlaXRoZXI6CisKKyAgMCAtIFJvbGFuZCBTb3VuZGNhbnZhcyBzdXBwb3J0IChkZWZhdWx0KQorICAxIC0gTWlkaWF0b3IgTVMtMTI0VCBzdXBwb3J0ICgxKQorICAyIC0gTWlkaWF0b3IgTVMtMTI0VyBTL0EgbW9kZSAoMikKKyAgMyAtIE1TLTEyNFcgTS9CIG1vZGUgc3VwcG9ydCAoMykKKyAgNCAtIEdlbmVyaWMgZGV2aWNlIHdpdGggbXVsdGlwbGUgaW5wdXQgc3VwcG9ydCAoNCkKKworRm9yIHRoZSBNaWRpYXRvciBNUy0xMjRXLCB5b3UgbXVzdCBzZXQgdGhlIHBoeXNpY2FsIE0tUyBhbmQgQS1CCitzd2l0Y2hlcyBvbiB0aGUgTWlkaWF0b3IgdG8gbWF0Y2ggdGhlIGRyaXZlciBtb2RlIHlvdSBzZWxlY3QuCisKK0luIFJvbGFuZCBTb3VuZGNhbnZhcyBtb2RlLCBtdWx0aXBsZSBBTFNBIHJhdyBNSURJIHN1YnN0cmVhbXMgYXJlIHN1cHBvcnRlZAorKG1pZGlDbkQwLW1pZGlDbkQxNSkuICBXaGVuZXZlciB5b3Ugd3JpdGUgdG8gYSBkaWZmZXJlbnQgc3Vic3RyZWFtLCB0aGUgZHJpdmVyCitzZW5kcyB0aGUgbm9uc3RhbmRhcmQgTUlESSBjb21tYW5kIHNlcXVlbmNlIEY1IE5OLCB3aGVyZSBOTiBpcyB0aGUgc3Vic3RyZWFtCitudW1iZXIgcGx1cyAxLiAgUm9sYW5kIG1vZHVsZXMgdXNlIHRoaXMgY29tbWFuZCB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQKKyJwYXJ0cyIsIHNvIHRoaXMgZmVhdHVyZSBsZXRzIHlvdSB0cmVhdCBlYWNoIHBhcnQgYXMgYSBkaXN0aW5jdCByYXcgTUlESQorc3Vic3RyZWFtLiBUaGUgZHJpdmVyIHByb3ZpZGVzIG5vIHdheSB0byBzZW5kIEY1IDAwIChubyBzZWxlY3Rpb24pIG9yIHRvIG5vdAorc2VuZCB0aGUgRjUgTk4gY29tbWFuZCBzZXF1ZW5jZSBhdCBhbGw7IHBlcmhhcHMgaXQgb3VnaHQgdG8uCisKK1VzYWdlIGV4YW1wbGUgZm9yIHNpbXBsZSBzZXJpYWwgY29udmVydGVyOgorCisJL3NiaW4vc2V0c2VyaWFsIC9kZXYvdHR5UzAgdWFydCBub25lCisJL3NiaW4vbW9kcHJvYmUgc25kLXNlcmlhbC11MTY1NTAgcG9ydD0weDNmOCBpcnE9NCBzcGVlZD0xMTUyMDAKKworVXNhZ2UgZXhhbXBsZSBmb3IgUm9sYW5kIFNvdW5kQ2FudmFzIHdpdGggNCBNSURJIHBvcnRzOgorCisJL3NiaW4vc2V0c2VyaWFsIC9kZXYvdHR5UzAgdWFydCBub25lCisJL3NiaW4vbW9kcHJvYmUgc25kLXNlcmlhbC11MTY1NTAgcG9ydD0weDNmOCBpcnE9NCBvdXRzPTQKKworSW4gTVMtMTI0VCBtb2RlLCBvbmUgcmF3IE1JREkgc3Vic3RyZWFtIGlzIHN1cHBvcnRlZCAobWlkaUNuRDApOyB0aGUgb3V0cworbW9kdWxlIHBhcmFtZXRlciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxLiBUaGUgZHJpdmVyIHNlbmRzIHRoZSBzYW1lIGRhdGEgdG8KK2FsbCBmb3VyIE1JREkgT3V0IGNvbm5lY3RvcnMuICBTZXQgdGhlIEEtQiBzd2l0Y2ggYW5kIHRoZSBzcGVlZCBtb2R1bGUKK3BhcmFtZXRlciB0byBtYXRjaCAoQT0xOTIwMCwgQj05NjAwKS4KKworVXNhZ2UgZXhhbXBsZSBmb3IgTVMtMTI0VCwgd2l0aCBBLUIgc3dpdGNoIGluIEEgcG9zaXRpb246CisKKwkvc2Jpbi9zZXRzZXJpYWwgL2Rldi90dHlTMCB1YXJ0IG5vbmUKKwkvc2Jpbi9tb2Rwcm9iZSBzbmQtc2VyaWFsLXUxNjU1MCBwb3J0PTB4M2Y4IGlycT00IGFkYXB0b3I9MSBcCisJCQlzcGVlZD0xOTIwMAorCitJbiBNUy0xMjRXIFMvQSBtb2RlLCBvbmUgcmF3IE1JREkgc3Vic3RyZWFtIGlzIHN1cHBvcnRlZCAobWlkaUNuRDApOwordGhlIG91dHMgbW9kdWxlIHBhcmFtZXRlciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxLiBUaGUgZHJpdmVyIHNlbmRzCit0aGUgc2FtZSBkYXRhIHRvIGFsbCBmb3VyIE1JREkgT3V0IGNvbm5lY3RvcnMgYXQgZnVsbCBNSURJIHNwZWVkLgorCitVc2FnZSBleGFtcGxlIGZvciBTL0EgbW9kZToKKworCS9zYmluL3NldHNlcmlhbCAvZGV2L3R0eVMwIHVhcnQgbm9uZQorCS9zYmluL21vZHByb2JlIHNuZC1zZXJpYWwtdTE2NTUwIHBvcnQ9MHgzZjggaXJxPTQgYWRhcHRvcj0yCisKK0luIE1TLTEyNFcgTS9CIG1vZGUsIHRoZSBkcml2ZXIgc3VwcG9ydHMgMTYgQUxTQSByYXcgTUlESSBzdWJzdHJlYW1zOwordGhlIG91dHMgbW9kdWxlIHBhcmFtZXRlciBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byAxNi4gIFRoZSBzdWJzdHJlYW0KK251bWJlciBnaXZlcyBhIGJpdG1hc2sgb2Ygd2hpY2ggTUlESSBPdXQgY29ubmVjdG9ycyB0aGUgZGF0YSBzaG91bGQgYmUKK3NlbnQgdG8sIHdpdGggbWlkaUNuRDEgc2VuZGluZyB0byBPdXQgMSwgbWlkaUNuRDIgdG8gT3V0IDIsIG1pZGlDbkQ0IHRvCitPdXQgMywgYW5kIG1pZGlDbkQ4IHRvIE91dCA0LiAgVGh1cyBtaWRpQ25EMTUgc2VuZHMgdGhlIGRhdGEgdG8gYWxsIDQgcG9ydHMuCitBcyBhIHNwZWNpYWwgY2FzZSwgbWlkaUNuRDAgYWxzbyBzZW5kcyB0byBhbGwgcG9ydHMsIHNpbmNlIGl0IGlzIG5vdCB1c2VmdWwKK3RvIHNlbmQgdGhlIGRhdGEgdG8gbm8gcG9ydHMuICBNL0IgbW9kZSBoYXMgZXh0cmEgb3ZlcmhlYWQgdG8gc2VsZWN0IHRoZSBNSURJCitPdXQgZm9yIGVhY2ggYnl0ZSwgc28gdGhlIGFnZ3JlZ2F0ZSBkYXRhIHJhdGUgYWNyb3NzIGFsbCBmb3VyIE1JREkgT3V0cyBpcworYXQgbW9zdCBvbmUgYnl0ZSBldmVyeSA1MjAgdXMsIGFzIGNvbXBhcmVkIHdpdGggdGhlIGZ1bGwgTUlESSBkYXRhIHJhdGUgb2YKK29uZSBieXRlIGV2ZXJ5IDMyMCB1cyBwZXIgcG9ydC4KKworVXNhZ2UgZXhhbXBsZSBmb3IgTS9CIG1vZGU6CisKKwkvc2Jpbi9zZXRzZXJpYWwgL2Rldi90dHlTMCB1YXJ0IG5vbmUKKwkvc2Jpbi9tb2Rwcm9iZSBzbmQtc2VyaWFsLXUxNjU1MCBwb3J0PTB4M2Y4IGlycT00IGFkYXB0b3I9MworCitUaGUgTVMtMTI0VyBoYXJkd2FyZSdzIE0vQSBtb2RlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiBUaGlzIG1vZGUgYWxsb3dzCit0aGUgTUlESSBPdXRzIHRvIGFjdCBpbmRlcGVuZGVudGx5IGF0IGRvdWJsZSB0aGUgYWdncmVnYXRlIHRocm91Z2hwdXQgb2YgTS9CLAorYnV0IGRvZXMgbm90IGFsbG93IHNlbmRpbmcgdGhlIHNhbWUgYnl0ZSBzaW11bHRhbmVvdXNseSB0byBtdWx0aXBsZSBNSURJIE91dHMuIAorVGhlIE0vQSBwcm90b2NvbCByZXF1aXJlcyB0aGUgZHJpdmVyIHRvIHR3aWRkbGUgdGhlIG1vZGVtIGNvbnRyb2wgbGluZXMgdW5kZXIKK3RpbWluZyBjb25zdHJhaW50cywgc28gaXQgd291bGQgYmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0byBpbXBsZW1lbnQgdGhhbgordGhlIG90aGVyIG1vZGVzLgorCitNaWRpYXRvciBtb2RlbHMgb3RoZXIgdGhhbiBNUy0xMjRXIGFuZCBNUy0xMjRUIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gCitOb3RlIHRoYXQgdGhlIHN1ZmZpeCBsZXR0ZXIgaXMgc2lnbmlmaWNhbnQ7IHRoZSBNUy0xMjQgYW5kIE1TLTEyNEIgYXJlIG5vdAorY29tcGF0aWJsZSwgbm9yIGFyZSB0aGUgb3RoZXIga25vd24gbW9kZWxzIE1TLTEwMSwgTVMtMTAxQiwgTVMtMTAzLCBhbmQgTVMtMTE0LgorSSBkbyBoYXZlIGRvY3VtZW50YXRpb24gKHRpbS5tYW5uQGNvbXBhcS5jb20pIHRoYXQgcGFydGlhbGx5IGNvdmVycyB0aGVzZSBtb2RlbHMsCitidXQgbm8gdW5pdHMgdG8gZXhwZXJpbWVudCB3aXRoLiAgVGhlIE1TLTEyNFcgc3VwcG9ydCBpcyB0ZXN0ZWQgd2l0aCBhIHJlYWwgdW5pdC4KK1RoZSBNUy0xMjRUIHN1cHBvcnQgaXMgdW50ZXN0ZWQsIGJ1dCBzaG91bGQgd29yay4KKworVGhlIEdlbmVyaWMgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGlucHV0IGFuZCBvdXRwdXQgc3Vic3RyZWFtcyBvdmVyIGEgc2luZ2xlCitzZXJpYWwgcG9ydC4gIFNpbWlsYXIgdG8gUm9sYW5kIFNvdW5kY2FudmFzIG1vZGUsIEY1IE5OIGlzIHVzZWQgdG8gc2VsZWN0IHRoZQorYXBwcm9wcmlhdGUgaW5wdXQgb3Igb3V0cHV0IHN0cmVhbSAoZGVwZW5kaW5nIG9uIHRoZSBkYXRhIGRpcmVjdGlvbikuCitBZGRpdGlvbmFsbHksIHRoZSBDVFMgc2lnbmFsIGlzIHVzZWQgdG8gcmVndWxhdGUgdGhlIGRhdGEgZmxvdy4gIFRoZSBudW1iZXIgb2YKK2lucHV0cyBpcyBzcGVjaWZpZWQgYnkgdGhlIGlucyBwYXJhbWV0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BRDE4MTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BRDE4MTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiZDhmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FEMTgxNgpAQCAtMCwwICsxLDg0IEBACitEb2N1bWVudGF0aW9uIGZvciB0aGUgQUQxODE2KEEpIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW5zdGFsbGF0aW9uOgorLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgeW91ciBBRDE4MTYoQSkgYmFzZWQgc291bmQgY2FyZCB3b3JrLCB5b3UnbGwgaGF2ZSB0byBlbmFibGUgc3VwcG9ydCBmb3IKK2V4cGVyaW1lbnRhbCBjb2RlICgiUHJvbXB0IGZvciBkZXZlbG9wbWVudCBhbmQvb3IgaW5jb21wbGV0ZSBjb2RlL2RyaXZlcnMiKQorYW5kIGlzYXBucCAoIlBsdWcgYW5kIFBsYXkgc3VwcG9ydCIsICJJU0EgUGx1ZyBhbmQgUGxheSBzdXBwb3J0IikuIEVuYWJsZQorIlNvdW5kIGNhcmQgc3VwcG9ydCIsICJPU1MgbW9kdWxlcyBzdXBwb3J0IiBhbmQgIlN1cHBvcnQgZm9yIEFEMTgxNihBKSBiYXNlZAorY2FyZHMgKEVYUEVSSU1FTlRBTCkiIGluIHRoZSBzb3VuZCBjb25maWd1cmF0aW9uIG1lbnUsIHRvby4gTm93IGJ1aWxkLCBpbnN0YWxsCithbmQgcmVib290IHRoZSBuZXcga2VybmVsIGFzIHVzdWFsLgorCitGZWF0dXJlczoKKy0tLS0tLS0tLQorCitMaXN0IG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjoKKy0gZnVsbC1kdXBsZXggc3VwcG9ydAorLSBzdXBwb3J0ZWQgYXVkaW8gZm9ybWF0czogdW5zaWduZWQgOGJpdCwgc2lnbmVkIDE2Yml0IGxpdHRsZSBlbmRpYW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIDE2Yml0IGJpZyBlbmRpYW4sILUtbGF3LCBBLWxhdworLSBzdXBwb3J0ZWQgY2hhbm5lbHM6IG1vbm8gYW5kIHN0ZXJlbworLSBzdXBwb3J0ZWQgcmVjb3JkaW5nIHNvdXJjZXM6IE1hc3RlciwgQ0QsIExpbmUsIExpbmUxLCBMaW5lMiwgTWljCistIHN1cHBvcnRzIHBoYXQgM2Qgc3RlcmVvIGNpcmN1aXQgKExpbmUgMykKKworCitTdXBwb3J0ZWQgY2FyZHM6CistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgY2FyZHMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlcjoKKy0gVGVycmF0ZWMgQmFzZSAxIAorLSBUZXJyYXRlYyBCYXNlIDY0IAorLSBIUCBLYXlhayAKKy0gQWNlciBGWC0zRAorLSBTWS0xODE2IAorLSBIaWdoc2NyZWVuIFNvdW5kLUJvb3N0YXIgMzIgV2F2ZSAzRAorLSBIaWdoc2NyZWVuIFNvdW5kLUJvb3N0YXIgMTYgCistIEFWTSBBcGV4IFBybyBjYXJkIAorLSAoQXp0ZWNoIFNDLTE2IDNEKSAKKy0gKE5ld2NvbSBTQy0xNiAzRCkgCistIChUZXJyYXRlYyBFV1M2NFMpIAorCitDYXJkcyBsaXN0ZWQgaW4gYnJhY2tldHMgYXJlIG5vdCBzdXBwb3J0ZWQgcmVsaWFibGUuIElmIHlvdSBoYXZlIHN1Y2ggYSBjYXJkIAoreW91IHNob3VsZCBhZGQgdGhlIGV4dHJhIHBhcmFtZXRlcjoKKyAgb3B0aW9ucz0xCit3aGVuIGxvYWRpbmcgdGhlIGFkMTgxNiBtb2R1bGUgdmlhIG1vZHByb2JlLiAKKworCitUcm91Ymxlc2hvb3Rpbmc6CistLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbCB5b3Ugc2hvdWxkIGNoZWNrLCBpZiB0aGUgZHJpdmVyIGhhcyBiZWVuIGxvYWRlZAorcHJvcGVybHkuCisKK0lmIGxvYWRpbmcgb2YgdGhlIGRyaXZlciBzdWNjZWVkcywgYnV0IHBsYXliYWNrL2NhcHR1cmUgZmFpbHMsIGNoZWNrCitpZiB5b3UgdXNlZCB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yIGlycSwgZG1hIGFuZCBkbWEyIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLgorSWYgb25lIG9mIHRoZW0gaXMgd3JvbmcgeW91IHVzdWFsbHkgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZToKKworTm92ICA2IDE3OjA2OjEzIHRlazAxIGtlcm5lbDogU291bmQ6IERNQSAob3V0cHV0KSB0aW1lZCBvdXQgLSBJUlEvRFJRIGNvbmZpZyBlcnJvcj8KKworSWYgcGxheWJhY2svY2FwdHVyZSBpcyB0b28gZmFzdCBvciB0byBzbG93LCB5b3Ugc2hvdWxkIGhhdmUgYSBsb29rIGF0Cit0aGUgY2xvY2sgY2hpcCBvZiB5b3VyIHNvdW5kIGNhcmQuIFRoZSBBRDE4MTYgd2FzIGRlc2lnbmVkIGZvciBhIDMzTUh6Citvc2NpbGxhdG9yLCBob3dldmVyIG1vc3Qgc291bmQgY2FyZCBtYW51ZmFjdHVyZXIgdXNlIHNsaWdodGx5CitkaWZmZXJlbnQgb3NjaWxsYXRvcnMgYXMgdGhleSBhcmUgY2hlYXBlciB0aGFuIDMzTUh6IG9zY2lsbGF0b3JzLiBJZgoreW91IGhhdmUgc3VjaCBhIGNhcmQgeW91IGhhdmUgdG8gYWRqdXN0IHRoZSBhZDE4MTZfY2xvY2tmcmVxIHBhcmFtZXRlcgorYWJvdmUuIEZvciBleGFtcGxlOiBGb3IgYSBjYXJkIHVzaW5nIGEgMzIuODc1TUh6IG9zY2lsbGF0b3IgdXNlCithZDE4MTZfY2xvY2tmcmVxPTMyODc1IGluc3RlYWQgb2YgYWQxODE2X2Nsb2NrZnJlcT0zMzAwMC4KKworCitVcGRhdGVzLCBidWdmaXhlcyBhbmQgYnVncmVwb3J0czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHRoZSBkcml2ZXIgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCB1bmRlciBkZXZlbG9wbWVudCwgeW91IHNob3VsZAord2F0Y2ggb3V0IGZvciB1cGRhdGVzLiAgVXBkYXRlcyBvZiB0aGUgZHJpdmVyIGFyZSBhdmFpbGFibGUgb24gdGhlCitJbnRlcm5ldCBmcm9tIG9uZSBvZiBteSBob21lIHBhZ2VzOgorICBodHRwOi8vd3d3LnN0dWRlbnQuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGUvfnRlay9wcm9qZWN0cy9saW51eC5odG1sCitvcjoKKyAgaHR0cDovL3d3dy50dS1kYXJtc3RhZHQuZGUvfnRlazAxL3Byb2plY3RzL2xpbnV4Lmh0bWwKKworQnVncmVwb3J0cywgYnVnZml4ZXMgYW5kIHJlbGF0ZWQgcXVlc3Rpb25zIHNob3VsZCBiZSBzZW50IHZpYSBFLU1haWwgdG86CisgIHRla0ByYmcuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGUKKworVGhvcnN0ZW4gS25hYmUgPHRla0ByYmcuaW5mb3JtYXRpay50dS1kYXJtc3RhZHQuZGU+CitDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+CisJTGFzdCBtb2RpZmllZDogMjAwMC8wOS8yMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQUxTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQUxTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMWZmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BTFMKQEAgLTAsMCArMSw2NiBAQAorQUxTLTAwNy9BTFMtMTAwL0FMUy0yMDAgYmFzZWQgc291bmQgY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnQgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIGFyb3VuZCB0aGUgQXZhbmNlIExvZ2ljCitBTFMtMDA3L0FMUy0xMDAvQUxTLTIwMCBjaGlwIGlzIGluY2x1ZGVkLiAgVGhlc2UgY2hpcHMgYXJlIGEgc2luZ2xlCitjaGlwIFBuUCBzb3VuZCBzb2x1dGlvbiB3aGljaCBpcyBtb3N0bHkgaGFyZHdhcmUgY29tcGF0aWJsZSB3aXRoIHRoZQorU291bmQgQmxhc3RlciAxNiBjYXJkLCB3aXRoIG1vc3QgZGlmZmVyZW5jZXMgb2NjdXJyaW5nIGluIHRoZSB1c2Ugb2YKK3RoZSBtaXhlciByZWdpc3RlcnMuICBGb3IgdGhpcyByZWFzb24gdGhlIEFMUyBjb2RlIGlzIGludGVncmF0ZWQKK2FzIHBhcnQgb2YgdGhlIFNvdW5kIEJsYXN0ZXIgMTYgZHJpdmVyIChhZGRpbmcgb25seSA4MDAgYnl0ZXMgdG8gdGhlCitTQjE2IGRyaXZlcikuCisKK1RvIHVzZSBhbiBBTFMgc291bmQgY2FyZCB1bmRlciBMaW51eCwgZW5hYmxlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcworbW9kdWxlcyBpbiB0aGUgc291bmQgY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgY29uZmlnOgorICAtIDEwMCUgU291bmQgQmxhc3RlciBjb21wYXRpYmxlcyAoU0IxNi8zMi82NCwgRVNTLCBKYXp6MTYpIHN1cHBvcnQKKyAgLSBGTSBzeW50aGVzaXplciAoWU0zODEyL09QTC0zKSBzdXBwb3J0IAorICAtIHN0YW5kYWxvbmUgTVBVNDAxIHN1cHBvcnQgbWF5IGJlIHJlcXVpcmVkIGZvciBzb21lIGNhcmRzOyBmb3IgdGhlCisgICAgQUxTLTAwNywgd2hlbiB1c2luZyBpc2FwbnB0b29scywgaXQgaXMgcmVxdWlyZWQKK1NpbmNlIHRoZSBBTFMtMDA3LzEwMC8yMDAgYXJlIFBuUCBjYXJkcywgSVNBUG5QIHN1cHBvcnQgc2hvdWxkIHByb2JhYmx5IGJlCitjb21waWxlZCBpbi4gIElmIGtlcm5lbCBsZXZlbCBQblAgc3VwcG9ydCBpcyBub3QgaW5jbHVkZWQsIGlzYXBucHRvb2xzIHdpbGwKK2JlIHJlcXVpcmVkIHRvIGNvbmZpZ3VyZSB0aGUgY2FyZCBiZWZvcmUgdGhlIHNvdW5kIG1vZHVsZXMgYXJlIGxvYWRlZC4KKworV2hlbiB1c2luZyBrZXJuZWwgbGV2ZWwgSVNBUG5QLCB0aGUga2VybmVsIHNob3VsZCBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kCitjb25maWd1cmUgYWxsIHJlc291cmNlcyByZXF1aXJlZCBieSB0aGUgY2FyZCB3aGVuIHRoZSAic2IiIG1vZHVsZSBpcworaW5zZXJ0ZWQuICBOb3RlIHRoYXQgdGhlIEFMUy0wMDcgZG9lcyBub3QgaGF2ZSBhIDE2IGJpdCBETUEgY2hhbm5lbCBhbmQgdGhhdAordGhlIE1QVTQwMSBpbnRlcmZhY2Ugb24gdGhpcyBjYXJkIHVzZXMgYSBkaWZmZXJlbnQgaW50ZXJydXB0IHRvIHRoZSBhdWRpbworc2VjdGlvbi4gIFRoaXMgc2hvdWxkIGFsbCBiZSBjb3JyZWN0bHkgY29uZmlndXJlZCBieSB0aGUga2VybmVsOyBpZiBwcm9ibGVtcword2l0aCB0aGUgTVBVNDAxIGludGVyZmFjZSBzdXJmYWNlLCB0cnkgdXNpbmcgdGhlIHN0YW5kYWxvbmUgTVBVNDAxIG1vZHVsZSwKK3Bhc3NpbmcgIjAiIGFzIHRoZSAic2IiIG1vZHVsZSdzICJtcHVfaW8iIG1vZHVsZSBwYXJhbWV0ZXIgdG8gcHJldmVudCB0aGUKK3NvdW5kYmxhc3RlciBkcml2ZXIgYXR0ZW1wdGluZyB0byByZWdpc3RlciB0aGUgTVBVNDAxIGl0c2VsZi4gIFRoZSBvbmJvYXJkCitzeW50aCBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHRoZSAib3BsMyIgbW9kdWxlLgorCitJZiBpc2FwbnB0b29scyBpcyB1c2VkIHRvIHdha2UgdXAgdGhlIHNvdW5kIGNhcmQgKGFzIGluIDIuMi54KSwgdGhlIHNldHRpbmdzCitvZiB0aGUgY2FyZCdzIHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBrZXJuZWwgbW9kdWxlcyAoInNiIiwgIm9wbDMiCithbmQgIm1wdTQwMSIpIHVzaW5nIHRoZSBtb2R1bGUgcGFyYW1ldGVycy4gIFdoZW4gY29uZmlndXJpbmcgYW4gQUxTLTAwNywgYmUKK3N1cmUgdG8gc3BlY2lmeSBkaWZmZXJlbnQgSVJRcyBmb3IgdGhlIGF1ZGlvIGFuZCBNUFU0MDEgc2VjdGlvbnMgLSB0aGlzIGNhcmQKK3JlcXVpcmVzIHRoZXkgYmUgZGlmZmVyZW50LiAgRm9yICJzYiIsICJpbyIsICJpcnEiIGFuZCAiZG1hIiBzaG91bGQgYmUgc2V0Cit0byB0aGUgc2FtZSB2YWx1ZXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGF1ZGlvIHNlY3Rpb24gb2YgdGhlIGNhcmQgd2l0aAoraXNhcG5wLiAgImRtYTE2IiBzaG91bGQgYmUgZXhwbGljaXRseSBzZXQgdG8gIi0xIiBmb3IgYW4gQUxTLTAwNyBzaW5jZSB0aGlzCitjYXJkIGRvZXMgbm90IGhhdmUgYSAxNiBiaXQgZG1hIGNoYW5uZWw7IGlmIG5vdCBzcGVjaWZpZWQgdGhlIGtlcm5lbCB3aWxsCitkZWZhdWx0IHRvIHVzaW5nIGNoYW5uZWwgNSBhbnl3YXkgd2hpY2ggd2lsbCBjYXVzZSBhdWRpbyBub3QgdG8gd29yay4gCisibXB1X2lvIiBzaG91bGQgYmUgc2V0IHRvIDAuICBUaGUgImlvIiBwYXJhbWV0ZXIgb2YgdGhlICJvcGwzIiBtb2R1bGUgc2hvdWxkCithbHNvIGFncmVlIHdpdGggdGhlIHNldHRpbmcgdXNlZCBieSBpc2FwbnAuICBUbyBnZXQgdGhlIE1QVTQwMSBpbnRlcmZhY2UKK3dvcmtpbmcgb24gYW4gQUxTLTAwNyBjYXJkLCB0aGUgIm1wdTQwMSIgbW9kdWxlIHdpbGwgYmUgcmVxdWlyZWQgc2luY2UgdGhpcworY2FyZCB1c2VzIHNlcGFyYXRlIElSUXMgZm9yIHRoZSBhdWRpbyBhbmQgTVBVNDAxIHNlY3Rpb25zIGFuZCB0aGVyZSBpcyBubworcGFyYW1ldGVyIGF2YWlsYWJsZSB0byBwYXNzIGEgZGlmZmVyZW50IElSUSB0byB0aGUgInNiIiBkcml2ZXIgKHdob3NlCitpbmJ1aWx0IE1QVTQwMSBkcml2ZXIgd291bGQgb3RoZXJ3aXNlIGJlIGZpbmUpLiAgSW5zZXJ0IHRoZSBtcHU0MDEgbW9kdWxlCitwYXNzaW5nIGFwcHJvcHJpYXRlIHZhbHVlcyB1c2luZyB0aGUgImlvIiBhbmQgImlycSIgcGFyYW1ldGVycy4KKworVGhlIHJlc3VsdGluZyBzb3VuZCBkcml2ZXIgd2lsbCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzOgorICAtIDggYW5kIDE2IGJpdCBhdWRpbyBwbGF5YmFjaworICAtIDggYW5kIDE2IGJpdCBhdWRpbyByZWNvcmRpbmcKKyAgLSBTb2Z0d2FyZSBzZWxlY3Rpb24gb2YgcmVjb3JkIHNvdXJjZSAobGluZSBpbiwgQ0QsIEZNLCBtaWMsIG1hc3RlcikKKyAgLSBSZWNvcmQgYW5kIHBsYXliYWNrIG9mIG1pZGkgZGF0YSB2aWEgdGhlIGV4dGVybmFsIE1QVS00MDEKKyAgLSBQbGF5YmFjayBvZiBtaWRpIGRhdGEgdXNpbmcgaW5idWlsdCBGTSBzeW50aGVzaXplcgorICAtIENvbnRyb2wgb2YgdGhlIEFMUy0wMDcgbWl4ZXIgdmlhIGFueSBPU1MtY29tcGF0aWJsZSBtaXhlciBwcm9ncmFtcy4gCisgICAgQ29udHJvbHMgYXZhaWxhYmxlIGFyZSBNYXN0ZXIgKEwmUiksIExpbmUgaW4gKEwmUiksIENEIChMJlIpLCAKKyAgICBEU1AvUENNL2F1ZGlvIG91dCAoTCZSKSwgRk0gKEwmUikgYW5kIE1pYyBpbiAobW9ubykuCisKK0pvbmF0aGFuIFdvaXRoZQorandvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdQorMzAgTWFyY2ggMTk5OAorCitNb2RpZmllZCAyMDAwLTAyLTI2IGJ5IERhdmUgRm9ycmVzdCwgZHJmNW5AdmlyZ2luaWEuZWR1IHRvIGFkZCBBTFMxMDAvQUxTMjAwCitNb2RpZmllZCAyMDAwLTA0LTEwIGJ5IFBhdWwgTGF1ZmVyLCBwZWxhdWZlckBjc3Vwb21vbmEuZWR1IHRvIGFkZCBJU0FQblAgaW5mby4KK01vZGlmaWVkIDIwMDAtMTEtMTkgYnkgSm9uYXRoYW4gV29pdGhlLCBqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1CisgLSB1cGRhdGVkIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgMi40LnguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0FXRTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BV0UzMgpAQCAtMCwwICsxLDc2IEBACisJSW5zdGFsbGluZyBhbmQgdXNpbmcgQ3JlYXRpdmUgQVdFIG1pZGkgc291bmQgdW5kZXIgTGludXguCisKK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBkZXZvdGVkIHRvIHRoZSBDcmVhdGl2ZSBTb3VuZCBCbGFzdGVyIEFXRTMyLCBBV0U2NCBhbmQgCitTQjMyLgorCisxKSBNYWtlIHN1cmUgeW91IGhhdmUgYW4gT1JJR0lOQUwgQ3JlYXRpdmUgU0IzMiwgQVdFMzIgb3IgQVdFNjQgY2FyZC4gVGhpcworICAgaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSBkcml2ZXIgd29ya3Mgb25seSB3aXRoIHJlYWwgQ3JlYXRpdmUgY2FyZHMuCisKKzIpIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyByZS1jb21waWxlIHlvdXIga2VybmVsIHdpdGggc3VwcG9ydCBmb3IKKyAgIHlvdXIgc291bmQgY2FyZC4gUnVuIHlvdXIgZmF2b3VyaXRlIHRvb2wgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIHdoZW4KKyAgIHlvdSBnZXQgdG8gdGhlICJTb3VuZCIgbWVudSB5b3Ugc2hvdWxkIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nOgorCisgICBTb3VuZCBjYXJkIHN1cHBvcnQsCisgICBPU1Mgc291bmQgbW9kdWxlcywKKyAgIDEwMCUgU291bmQgQmxhc3RlciBjb21wYXRpYmxlcyAoU0IxNi8zMi82NCwgRVNTLCBKYXp6MTYpIHN1cHBvcnQsCisgICBBV0UzMiBzeW50aAorCisgICBJZiB5b3VyIGNhcmQgaXMgIlBsdWcgYW5kIFBsYXkiIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgdGhlc2UgdHdvCisgICBvcHRpb25zLCBmb3VuZCB1bmRlciB0aGUgIlBsdWcgYW5kIFBsYXkgY29uZmlndXJhdGlvbiIgbWVudToKKworICAgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisgICBJU0EgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisKKyAgIE5vdyBjb21waWxlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgaW4gbm9ybWFsIGZhc2hpb24uIElmIHlvdSBkb24ndCBrbm93CisgICBob3cgdG8gZG8gdGhpcyB5b3UgY2FuIGZpbmQgaW5zdHJ1Y3Rpb25zIGZvciB0aGlzIGluIHRoZSBSRUFETUUgZmlsZQorICAgbG9jYXRlZCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGtlcm5lbCBzb3VyY2UuCisKKzMpIEJlZm9yZSB5b3UgY2FuIHN0YXJ0IHBsYXlpbmcgbWlkaSBmaWxlcyB5b3Ugd2lsbCBoYXZlIHRvIGxvYWQgYSBzb3VuZAorICAgYmFuayBmaWxlLiBUaGUgdXRpbGl0eSBuZWVkZWQgZm9yIGRvaW5nIHRoaXMgaXMgY2FsbGVkICJzZnhsb2FkIiwgYW5kIGl0CisgICBpcyBvbmUgb2YgdGhlIHV0aWxpdGllcyBmb3VuZCBpbiBhIHBhY2thZ2UgY2FsbGVkICJhd2VzZngiLiBJZiB0aGlzCisgICBwYWNrYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4geW91ciBkaXN0cmlidXRpb24geW91IGNhbiBkb3dubG9hZCB0aGUgQVdFCisgICBzbmFwc2hvdCBmcm9tIENyZWF0aXZlIExhYnMgT3BlbiBTb3VyY2Ugd2Vic2l0ZToKKworICAgaHR0cDovL3d3dy5vcGVuc291cmNlLmNyZWF0aXZlLmNvbS9zbmFwc2hvdC5odG1sCisKKyAgIE9uY2UgeW91IGhhdmUgdW5wYWNrZWQgdGhlIEFXRSBzbmFwc2hvdCB5b3Ugd2lsbCBzZWUgYSAiYXdlc2Z4IgorICAgZGlyZWN0b3J5LiBGb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiBhd2VzZngvZG9jcy9JTlNUQUxMIHRvIGluc3RhbGwgdGhlCisgICB1dGlsaXRpZXMgaW4gdGhpcyBwYWNrYWdlLiBBZnRlciBkb2luZyB0aGlzLCBzZnhsb2FkIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgIGFzOgorCisgICAvdXNyL2xvY2FsL2Jpbi9zZnhsb2FkCisKKyAgIFRvIGVuYWJsZSBBV0UgZ2VuZXJhbCBtaWRpIHN5bnRoZXNpcyB5b3Ugc2hvdWxkIGFsc28gZ2V0IHRoZSBzb3VuZCBiYW5rCisgICBmaWxlIGZvciBnZW5lcmFsIG1pZGkgZnJvbToKKworICAgaHR0cDovL21lbWJlcnMueG9vbS5jb20veWFyL3N5bnRoZ20uc2JrLmd6CisKKyAgIENvcHkgaXQgdG8gYSBkaXJlY3Rvcnkgb2YgeW91ciBjaG9pY2UsIGFuZCB1bnBhY2sgaXQgdGhlcmUuCisKKzQpIEVkaXQgL2V0Yy9tb2Rwcm9iZS5jb25mLCBhbmQgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIGZpbGU6CisKKyAgYWxpYXMgc291bmQtc2xvdC0wIHNiCisgIGFsaWFzIHNvdW5kLXNlcnZpY2UtMC0xIGF3ZV93YXZlCisgIGluc3RhbGwgYXdlX3dhdmUgL3NiaW4vbW9kcHJvYmUgLS1maXJzdC10aW1lIC1pIGF3ZV93YXZlICYmIC91c3IvbG9jYWwvYmluL3NmeGxvYWQgUEFUSF9UT19TT1VORF9CQU5LX0ZJTEUKKworICBZb3Ugd2lsbCBvZiBjb3Vyc2UgaGF2ZSB0byBjaGFuZ2UgIlBBVEhfVE9fU09VTkRfQkFOS19GSUxFIiB0byB0aGUgZnVsbAorICBwYXRoIG9mIG9mIHRoZSBzb3VuZCBiYW5rIGZpbGUuIFRoYXQgd2lsbCBlbmFibGUgdGhlIFNvdW5kIEJsYXN0ZXIgYW5kIEFXRQorICB3YXZlIHN5bnRoZXNpcy4gVG8gcGxheSBtaWRpIGZpbGVzIHlvdSBzaG91bGQgZ2V0IG9uZSBvZiB0aGVzZSBwcm9ncmFtcyBpZgorICB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoZW06CisKKyAgUGxheW1pZGk6CQkJaHR0cDovL3BsYXltaWRpLm9wZW5wcm9qZWN0cy5uZXQKKworICBBV0VNaWRpIFBsYXllciAoZHJ2bWlkaSkgIAlJbmNsdWRlZCBpbiB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgQVdFCisgIAkJCQlzbmFwc2hvdC4KKworICBZb3Ugd2lsbCBwcm9iYWJseSBoYXZlIHRvIHBhc3MgdGhlICItZSIgc3dpdGNoIHRvIHBsYXltaWRpIHRvIGhhdmUgaXQgdXNlCisgIHlvdXIgbWlkaSBkZXZpY2UuIGRydm1pZGkgc2hvdWxkIHdvcmsgd2l0aG91dCBzd2l0Y2hlcy4KKworICBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBwbGVhc2UgZS1tYWlsIG1lLiBBbGwgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFyZQorICB3ZWxjb21lLgorCisJCSAgICBZYXJvc2xhdiBSb3NvbWFraG8gKGFsb25zNTVAZGlhbHVwLnB0dC5ydSkKKwkJCSAgICBodHRwOi8vd3d3Lnlhci5vcGVubmV0LnJ1CisKK0xhc3QgVXBkYXRlZDogRmViIDMgMjAwMQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQXVkaW9FeGNlbERTUDE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQXVkaW9FeGNlbERTUDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjA4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9BdWRpb0V4Y2VsRFNQMTYKQEAgLTAsMCArMSwxMDEgQEAKK0RyaXZlcgorLS0tLS0tCisKK0luZm9ybWF0aW9ucyBhYm91dCBBdWRpbyBFeGNlbCBEU1AgMTYgZHJpdmVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlCitmaWxlIGFlZHNwMTYuYworUGxlYXNlLCByZWFkIHRoZSBoZWFkIG9mIHRoZSBzb3VyY2UgYmVmb3JlIHVzaW5nIGl0LiBJdCBjb250YWluIHVzZWZ1bAoraW5mb3JtYXRpb25zLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBBdWRpbyBFeGNlbCBjb25maWd1cmF0aW9uLCBpcyBub3cgZG9uZSB3aXRoIHRoZSBzdGFuZGFyZCBMaW51eCBzZXR1cC4KK1lvdSBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgc291bmQgY2FyZCAoU291bmQgQmxhc3RlciBvciBNaWNyb3NvZnQgU291bmQgU3lzdGVtKQorYW5kLCBpZiB5b3Ugd2FudCBpdCwgdGhlIFJvbGFuZCBNUFUtNDAxIChkbyBub3QgdXNlIHRoZSBTb3VuZCBCbGFzdGVyIE1QVS00MDEsCitTQi1NUFU0MDEpIGluIHRoZSBtYWluIGRyaXZlciBtZW51LiBBY3RpdmF0ZSB0aGUgbG93bGV2ZWwgZHJpdmVycyB0aGVuIHNlbGVjdAordGhlIEF1ZGlvIEV4Y2VsIGhhcmR3YXJlIHRoYXQgeW91IHdhbnQgdG8gaW5pdGlhbGl6ZS4gQ2hlY2sgdGhlIElSUS9ETUEvTUlSUQorb2YgdGhlIEF1ZGlvIEV4Y2VsIGluaXRpYWxpemF0aW9uOiBpdCBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBTQlBSTyAob3IgTVNTKQorc2V0dXAuIElmIHRoZSBwYXJhbWV0ZXJzIGFyZSBkaWZmZXJlbnQsIGNvcnJlY3QgaXQuCitJIHlvdSBvd24gYSBHYWxsYW50J3MgYXVkaW8gY2FyZCBiYXNlZCBvbiBTQy02NjAwLCBhY3RpdmF0ZSB0aGUgU0MtNjYwMCBzdXBwb3J0LgorSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzb3VuZCBib2FyZCwgYmUgc3VyZSB0bworY2hlY2sgb2ZmIGFsbCB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyBiZWZvcmUgcmUtY29uZmlndXJlIGl0LgorCitNb2R1bGUgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHVzZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgeW91IG11c3QgY29uZmlndXJlIHNvbWUgbW9kdWxlIHBhcmFtZXRlcnMsIHRvCitzZXQgdXAgSS9PIGFkZHJlc3NlcywgSVJRIGxpbmVzIGFuZCBETUEgY2hhbm5lbHMuIFNvbWUgcGFyYW1ldGVycyBhcmUKK21hbmRhdG9yeSB3aGlsZSBzb21lIG90aGVycyBhcmUgb3B0aW9uYWwuIEhlcmUgYSBsaXN0IG9mIHBhcmFtZXRlcnMgeW91IGNhbgordXNlIHdpdGggdGhpcyBtb2R1bGU6CisKK05hbWUJCURlc2NyaXB0aW9uCis9PT09CQk9PT09PT09PT09PQorTUFOREFUT1JZCitpbwkJSS9PIGJhc2UgYWRkcmVzcyAoMHgyMjAgb3IgMHgyNDApCitpcnEJCWlycSBsaW5lICg1LCA3LCA5LCAxMCBvciAxMSkKK2RtYQkJZG1hIGNoYW5uZWwgKDAsIDEgb3IgMykKKworT1BUSU9OQUwKK21zc19iYXNlCUkvTyBiYXNlIGFkZHJlc3MgZm9yIGFjdGl2YXRlIE1TUyBtb2RlIChkZWZhdWx0IFNCUFJPKQorCQkoMHg1MzAgb3IgMHhFODApCittcHVfYmFzZQlJL08gYmFzZSBhZGRyZXNzIGZvciBhY3RpdmF0ZSBNUFUtNDAxIG1vZGUKKwkJKDB4MzAwLCAweDMxMCwgMHgzMjAgb3IgMHgzMzApCittcHVfaXJxCQlNUFUtNDAxIGlycSBsaW5lICg1LCA3LCA5LCAxMCBvciAwKQorCitUaGUgL2V0Yy9tb2Rwcm9iZS5jb25mIHdpbGwgaGF2ZSBsaW5lcyBsaWtlIHRoaXM6CisKK29wdGlvbnMgb3BsMyBpbz0weDM4OAorb3B0aW9ucyBhZDE4NDggaW89MHg1MzAgaXJxPTExIGRtYT0zCitvcHRpb25zIGFlZHNwMTYgaW89MHgyMjAgaXJxPTExIGRtYT0zIG1zc19iYXNlPTB4NTMwCisKK1doZXJlIHRoZSBhZWRzcDE2IG9wdGlvbnMgYXJlIHRoZSBvcHRpb25zIGZvciB0aGlzIGRyaXZlciB3aGlsZSBvcGwzIGFuZAorYWQxODQ4IGFyZSB0aGUgY29ycmVzcG9uZGluZyBvcHRpb25zIGZvciB0aGUgTVNTIGFuZCBPUEwzIG1vZHVsZXMuCisKK0xvYWRpbmcgTVNTIGFuZCBPUEwzIG5lZWRzIHRvIHByZSBsb2FkIHRoZSBhZWRzcDE2IG1vZHVsZSB0byBzZXQgdXAgY29ycmVjdGx5Cit0aGUgc291bmQgY2FyZC4gSW5zdGFsbGF0aW9uIGRlcGVuZGVuY2llcyBtdXN0IGJlIHdyaXR0ZW4gaW4gdGhlIG1vZHByb2JlLmNvbmYKK2ZpbGU6CisKK2luc3RhbGwgYWQxODQ4IC9zYmluL21vZHByb2JlIGFlZHNwMTYgJiYgL3NiaW4vbW9kcHJvYmUgLWkgYWQxODQ4CitpbnN0YWxsIG9wbDMgL3NiaW4vbW9kcHJvYmUgYWVkc3AxNiAmJiAvc2Jpbi9tb2Rwcm9iZSAtaSBvcGwzCisKK1RoZW4geW91IG11c3QgbG9hZCB0aGUgc291bmQgbW9kdWxlcyBzdGFjayBpbiB0aGlzIG9yZGVyOgorc291bmQgLT4gYWVkc3AxNiAtPiBbIGFkMTg0OCwgb3BsMyBdCisKK1dpdGggdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24sIGxvYWRpbmcgYWQxODQ4IG9yIG9wbDMgbW9kdWxlcywgd2lsbAorYXV0b21hdGljYWxseSBsb2FkIGFsbCB0aGUgc291bmQgc3RhY2suCisKK1NvdW5kIGNhcmRzIHN1cHBvcnRlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU0MtNjAwMCBhbmQgU0MtNjYwMCBiYXNlZCBHYWxsYW50J3Mgc291bmQgY2FyZC4KK0l0IGRvbid0IHN1cHBvcnQgdGhlIEF1ZGlvIEV4Y2VsIERTUCAxNiBJSUkgKHRyeSB0aGUgU0MtNjYwMCBjb2RlKS4KK0knbSB3b3JraW5nIG9uIHRoZSBJSUkgdmVyc2lvbiBvZiB0aGUgY2FyZDogaWYgc29tZW9uZSBoYXZlIHVzZWZ1bAoraW5mb3JtYXRpb25zIGFib3V0IGl0LCBwbGVhc2UgbGV0IG1lIGtub3cuCitGb3IgYWxsIHRoZSBub24tc3VwcG9ydGVkIGF1ZGlvIGNhcmRzLCB5b3UgaGF2ZSB0byBib290IE1TLURPUyAob3IgV0lOOTUpCithY3RpdmF0aW5nIHRoZSBhdWRpbyBjYXJkIHdpdGggdGhlIE1TLURPUyBkZXZpY2UgZHJpdmVyLCB0aGVuIHlvdSBoYXZlIHRvCis8Y3RybD4tPGFsdD4tPGRlbD4gYW5kIGJvb3QgTGludXguCitGb2xsb3cgdGhlc2Ugc3RlcHM6CisKKzEpIENvbXBpbGUgTGludXgga2VybmVsIHdpdGggc3RhbmRhcmQgc291bmQgZHJpdmVyLCB1c2luZyB0aGUgZW11bGF0aW9uCisgICB5b3Ugd2FudCwgd2l0aCB0aGUgcGFyYW1ldGVycyBvZiB5b3VyIGF1ZGlvIGNhcmQsCisgICBlLmcuIE1pY3Jvc29mdCBTb3VuZCBTeXN0ZW0gaXJxMTAgZG1hMworMikgSW5zdGFsbCB5b3VyIG5ldyBrZXJuZWwgYXMgdGhlIGRlZmF1bHQgYm9vdCBrZXJuZWwuCiszKSBCb290IE1TLURPUyBhbmQgY29uZmlndXJlIHRoZSBhdWRpbyBjYXJkIHdpdGggdGhlIGJvb3QgdGltZSBkZXZpY2UKKyAgIGRyaXZlciwgZm9yIE1TUyBpcnExMCBkbWEzIGluIG91ciBleGFtcGxlLgorNCkgPGN0cmw+LTxhbHQ+LTxkZWw+IGFuZCBib290IExpbnV4LiBUaGlzIHdpbGwgbWFpbnRhaW4gdGhlIERPUyBjb25maWd1cmF0aW9uCisgICBhbmQgd2lsbCBib290IHRoZSBuZXcga2VybmVsIHdpdGggc291bmQgZHJpdmVyLiBUaGUgc291bmQgZHJpdmVyIHdpbGwgZmluZAorICAgdGhlIGF1ZGlvIGNhcmQgYW5kIHdpbGwgcmVjb2duaXplIGFuZCBhdHRhY2ggaXQuCisKK1JlcG9ydHMgb24gVXNlciBzdWNjZXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPiBEYXRlOiBNb24sIDI5IEp1bCAxOTk2IDA4OjM1OjQwICswMTAwCis+IEZyb206IE1yIFMgSiBHcmVlbmF3YXkgPHNqZzk1QHVuaXhmZS5ybC5hYy51az4KKz4gVG86IHJpY2NhcmRvQGNkYzhnNS5jZGMucG9saW1pLml0IChSaWNjYXJkbyBGYWNjaGV0dGkpCis+IFN1YmplY3Q6IFJlOiBBdWRpbyBFeGNlbCBEU1AgMTYgaW5pdGlhbGl6YXRpb24gY29kZQorPgorPiBKdXN0IHRvIGxldCB5b3Uga25vdyBnb3QgbXkgQXVkaW8gRXhjZWwgKGVtdWxhdGluZyBhIE1TUykgd29ya2luZworPiB3aXRoIG15IG9yaWdpbmFsIFNCMTYsIHRoYW5rcyBmb3IgdGhlIGRyaXZlciEKKworCitMYXN0IHJldmlzZWQ6IDIwIEF1Z3VzdCAxOTk4CitSaWNjYXJkbyBGYWNjaGV0dGkKK2ZpemJhbkB0aW4uaXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzAgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DTUk4MzMwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDM5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DTUk4MzMwCkBAIC0wLDAgKzEsMTUzIEBACitEb2N1bWVudGF0aW9uIGZvciBDTUkgODMzMCAoU291bmRQUk8pIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxlc3NhbmRybyBadW1tbyA8YXp1bW1vQGl0YS5mbGFzaG5ldC5pdD4KKworKCBCZSBzdXJlIHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRQcm8gdG9vICkKKworCitUaGlzIGFkYXB0ZXIgaXMgbm93IGRpcmVjdGx5IHN1cHBvcnRlZCBieSB0aGUgc2IgZHJpdmVyLgorCisgVGhlIG9ubHkgdGhpbmcgeW91IGhhdmUgdG8gZG8gaXMgdG8gY29tcGlsZSB0aGUga2VybmVsIHNvdW5kCitzdXBwb3J0IGFzIGEgbW9kdWxlIGFuZCB0byBlbmFibGUga2VybmVsIElTQVBuUCBzdXBwb3J0LAorYXMgc2hvd24gYmVsb3cuCisKKworQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9TQj1tCisKK0NPTkZJR19QTlA9eQorQ09ORklHX0lTQVBOUD15CisKKworYW5kIG9wdGlvbmFsbHk6CisKKworQ09ORklHX1NPVU5EX01QVTQwMT1tCisKKyBmb3IgTVBVNDAxIHN1cHBvcnQuCisKKworKEkgc3VnZ2VzdCB5b3UgdG8gdXNlICJtYWtlIG1lbnVjb25maWciIG9yICJtYWtlIHhjb25maWciIAorIGZvciBhIG1vcmUgY29tZm9ydGFibGUgY29uZmlndXJhdGlvbiBlZGl0aW5nKQorCisKKworVGhlbiB5b3UgY2FuIGRvCisKKyBtb2Rwcm9iZSBzYgorCithbmQgZXZlcnl0aGluZyB3aWxsIGJlIChob3BlZnVsbHkpIGNvbmZpZ3VyZWQuCisKK1lvdSBzaG91bGQgZ2V0IHNvbWV0aGluZyBzaW1pbGFyIGluIHN5c2xvZzoKKworc2I6IENNSTgzMzAgZGV0ZWN0ZWQuCitzYjogQ01JODMzMCBzYiBiYXNlIGxvY2F0ZWQgYXQgMHgyMjAKK3NiOiBDTUk4MzMwIG1wdSBiYXNlIGxvY2F0ZWQgYXQgMHgzMzAKK3NiOiBDTUk4MzMwIG1haWwgcmVwb3J0cyB0byBBbGVzc2FuZHJvIFp1bW1vIDxhenVtbW9AaXRhLmZsYXNobmV0Lml0Pgorc2I6IElTQVBuUCByZXBvcnRzIENNSSA4MzMwIFNvdW5kUFJPIGF0IGkvbyAweDIyMCwgaXJxIDcsIGRtYSAxLDUKKworCisKKworVGhlIG9sZCBkb2N1bWVudGF0aW9uIGZpbGUgZm9sbG93cyBmb3IgcmVmZXJlbmNlCitwdXJwb3Nlcy4KKworCitIb3cgdG8gZW5hYmxlIENNSSA4MzMwIChTT1VORFBSTykgc291bmRjaGlwIG9uIExpbnV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0ZWZhbiBMYXVkYXQgPFN0ZWZhbi5MYXVkYXRAYXNpdC5ybz4KKworW05vdGU6IFRoZSBDTUkgODMzOCBpcyB1bnJlbGF0ZWQgYW5kIGlzIHN1cHBvcnRlZCBieSBjbXBjaS5vXQorCisJCisJSW4gb3JkZXIgdG8gdXNlIENNSTgzMzAgdW5kZXIgTGludXggIHlvdSBqdXN0IGhhdmUgdG8gdXNlIGEgcHJvcGVyIGlzYXBucC5jb25mLCBhIGdvb2QgaXNhcG5wIGFuZCBhIGxpdHRsZSBiaXQgb2YgcGF0aWVuY2UuICBJIHVzZSBpc2FwbnAgMS4xNywgYnV0Cit5b3UgbWF5IGdldCBhIGJldHRlciBvbmUgSSBndWVzcyBhdCBodHRwOi8vd3d3LnJvZXN0b2NrLmRlbW9uLmNvLnVrL2lzYXBucHRvb2xzLy4KKworCU9mIGNvdXJzZSB5b3Ugd2lsbCBoYXZlIHRvIGNvbXBpbGUga2VybmVsIHNvdW5kIHN1cHBvcnQgYXMgbW9kdWxlLCBhcyBzaG93biBiZWxvdzoKKworQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1M9bQorQ09ORklHX1NPVU5EX1NCPW0KK0NPTkZJR19TT1VORF9BRExJQj1tCitDT05GSUdfU09VTkRfTVBVNDAxPW0KKyMgTWlrcm8kY2hhZnQgc291bmQgc3lzdGVtIChraW5kYSB1c2VmdWwgaGVyZSA7KSkJCitDT05GSUdfU09VTkRfTVNTPW0KKworCVRoZSAvZXRjL2lzYXBucC5jb25mIGZpbGUgd2lsbCBiZToKKworPHNuaXAgYmVsb3c+CisKKworKFJFQURQT1JUIDB4MDIwMykKKyhJU09MQVRFIFBSRVNFUlZFKQorKElERU5USUZZICopCisoVkVSQk9TSVRZIDIpCisoQ09ORkxJQ1QgKElPIEZBVEFMKShJUlEgRkFUQUwpKERNQSBGQVRBTCkoTUVNIEZBVEFMKSkgIyBvciBXQVJOSU5HCisoVkVSSUZZTEQgTikKKworCisjIFdTUyAKKworKENPTkZJR1VSRSBDTUkwMDAxLzE2Nzc3NDcyIChMRCAwCisoSU8gMCAoU0laRSA4KSAoQkFTRSAweDA1MzApKQorKElPIDEgKFNJWkUgOCkgKEJBU0UgMHgwMzg4KSkKKyhJTlQgMCAoSVJRIDcgKE1PREUgK0UpKSkKKyhETUEgMCAoQ0hBTk5FTCAwKSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzBde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKyMgTVBVCisKKyhDT05GSUdVUkUgQ01JMDAwMS8xNjc3NzQ3MiAoTEQgMQorKElPIDAgKFNJWkUgMikgKEJBU0UgMHgwMzMwKSkKKyhJTlQgMCAoSVJRIDExIChNT0RFICtFKSkpCisoTkFNRSAiQ01JMDAwMS8xNjc3NzQ3MlsxXXtDTUk4MzMwL0MzRCBBdWRpbyBBZGFwdGVyfSIpCisoQUNUIFkpCispKQorCisjIEpveXN0aWNrCisKKyhDT05GSUdVUkUgQ01JMDAwMS8xNjc3NzQ3MiAoTEQgMgorKElPIDAgKFNJWkUgOCkgKEJBU0UgMHgwMjAwKSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzJde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKyMgU291bmRCbGFzdGVyIAorIAorKENPTkZJR1VSRSBDTUkwMDAxLzE2Nzc3NDcyIChMRCAzCisoSU8gMCAoU0laRSAxNikgKEJBU0UgMHgwMjIwKSkKKyhJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkKKyhETUEgMCAoQ0hBTk5FTCAxKSkKKyhETUEgMSAoQ0hBTk5FTCA1KSkKKyhOQU1FICJDTUkwMDAxLzE2Nzc3NDcyWzNde0NNSTgzMzAvQzNEIEF1ZGlvIEFkYXB0ZXJ9IikKKyhBQ1QgWSkKKykpCisKKworKFdBSVRGT1JLRVkpCisKKzxlbmQgb2Ygc25pcD4KKworCVRoZSBtb2R1bGUgc2VxdWVuY2UgaXMgdHJpdmlhbDoKKworL3NiaW4vaW5zbW9kIHNvdW5kY29yZQorL3NiaW4vaW5zbW9kIHNvdW5kCisvc2Jpbi9pbnNtb2QgdWFydDQwMQorIyBpbnNlcnQgdGhpcyBmaXJzdAorL3NiaW4vaW5zbW9kIGFkMTg0OCBpbz0weDUzMCBpcnE9NyBkbWE9MCBzb3VuZHBybz0xCisjIFRoZSBzYiBtb2R1bGUgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGFkMTg0OCAoTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSkKKyMgQW55aG93LCB0aGlzIGlzIGZ1bGwgZHVwbGV4IGFuZCBoYXMgTUlESQorL3NiaW4vaW5zbW9kIHNiIGlvPTB4MjIwIGRtYT0xIGRtYTE2PTUgaXJxPTUgbXB1X2lvPTB4MzMwCisKKworCitBbG1hIENoYW8gPGVseXNpYW5AZXRoZXJlYWwudG9yc2lvbi5vcmc+IHN1Z2dlc3RzIHRoZSBmb2xsb3dpbmcgL2V0Yy9tb2Rwcm9iZS5jb25mOgorCithbGlhcyBzb3VuZCBhZDE4NDgKK2FsaWFzIHN5bnRoMCBvcGwzCitvcHRpb25zIGFkMTg0OCBpbz0weDUzMCBpcnE9NyBkbWE9MCBzb3VuZHBybz0xCitvcHRpb25zIG9wbDMgaW89MHgzODgKKworCQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzOCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3ZDA1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NNSTgzMzgKQEAgLTAsMCArMSw4NSBAQAorQXVkaW8gZHJpdmVyIGZvciBDTTgzMzgvQ004NzM4IGNoaXBzIGJ5IENoZW4tTGkgVGllbgorCisKK0hBUkRXQVJFIFNVUFBPUlRFRAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0MtTWVkaWEgQ01JODMzOAorQy1NZWRpYSBDTUk4NzM4CitPbi1ib2FyZCBDLU1lZGlhIGNoaXBzCisKKworU1RFUFMgVE8gQlVJTEQgRFJJVkVSCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIDEuIEJhY2t1cCB0aGUgQ29uZmlnLmluIGFuZCBNYWtlZmlsZSBpbiB0aGUgc291bmQgZHJpdmVyIGRpcmVjdG9yeQorICAgICAoL3Vzci9zcmMvbGludXgvZHJpdmVyL3NvdW5kKS4KKyAgICAgVGhlIENvbmZpZ3VyZS5oZWxwIHByb3ZpZGUgaGVscCB3aGVuIHlvdSBjb25maWcgZHJpdmVyIGluIHN0ZXAKKyAgICAgNCwgcGxlYXNlIGJhY2t1cCB0aGUgb3JpZ2luYWwgb25lICgvdXNyL3NyYy9saW51eC9Eb2N1bWVudCkgYW5kCisgICAgIGNvcHkgdGhpcyBmaWxlLgorICAgICBUaGUgY21wY2kgaXMgZG9jdW1lbnQgZm9yIHRoZSBkcml2ZXIgaW4gZGV0YWlsLCBwbGVhc2UgY29weSBpdAorICAgICB0byAvdXNyL3NyYy9saW51eC9Eb2N1bWVudC9zb3VuZCBzbyB5b3UgY2FuIHJlZmVyIGl0LiBCYWNrdXAgaWYKKyAgICAgdGhlcmUgaXMgYWxyZWFkeSBvbmUuCisKKyAgMi4gRXh0cmFjdCB0aGUgdGFyIGZpbGUgYnkgJ3RhciB4dnpmIGNtcGNpLXh4LnRhci5neicgaW4gdGhlIGFib3ZlCisgICAgIGRpcmVjdG9yeS4KKworICAzLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIC91c3Ivc3JjL2xpbnV4CisKKyAgNC4gQ29uZmlnIGNtODMzOCBkcml2ZXIgYnkgJ21ha2UgbWVudWNvbmZpZycsICdtYWtlIGNvbmZpZycgb3IKKyAgICAgJ21ha2UgeGNvbmZpZycgY29tbWFuZC4KKworICA1LiBQbGVhc2Ugc2VsZWN0IFNvdW5kIENhcmQgKENPTkZJR19TT1VORD1tKSBzdXBwb3J0IGFuZCBDTVBDSQorICAgICBkcml2ZXIgKENPTkZJR19TT1VORF9DTVBDST1tKSBhcyBtb2R1bGVzLiBSZXNpZGVudCBtb2RlIG5vdCB0ZXN0ZWQuCisgICAgIEZvciBkcml2ZXIgb3B0aW9uLCBwbGVhc2UgcmVmZXIgJ0RSSVZFUiBQQVJBTUVURVInCisKKyAgNi4gQ29tcGlsZSB0aGUga2VybmVsIGlmIG5lY2Vzc2FyeS4KKworICA3LiBDb21waWxlIHRoZSBtb2R1bGVzIGJ5ICdtYWtlIG1vZHVsZXMnLgorCisgIDguIEluc3RhbGwgdGhlIG1vZHVsZXMgYnkgJ21ha2UgbW9kdWxlc19pbnN0YWxsJworCisKK0lOU1RBTEwgRFJJVkVSCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIDEuIEJlZm9yZSBmaXJzdCB0aW1lIHRvIHJ1biB0aGUgZHJpdmVyLCBjcmVhdGUgbW9kdWxlIGRlcGVuZGVuY3kgYnkKKyAgICAgJ2RlcG1vZCAtYScKKworICAyLiBUbyBpbnN0YWxsIHRoZSBkcml2ZXIgbWFudWFsbHksIGVudGVyICdtb2Rwcm9iZSBjbXBjaScuCisKKyAgMy4gRHJpdmVyIGluc3RhbGxhdGlvbiBmb3IgdmFyaW91cyBkaXN0cmlidXRpb25zOgorCisgICAgYS4gU2xhY2t3YXJlIDQuMAorICAgICAgIEFkZCB0aGUgJ21vZHByb2JlIGNtcGNpJyBjb21tYW5kIGluIHlvdXIgL2V0Yy9yYy5kL3JjLm1vZHVsZXMKKyAgICAgICBmaWxlLnNvIHlvdSBjYW4gc3RhcnQgdGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGVhY2ggdGltZSBib290aW5nLgorCisgICAgYi4gQ2FsZGVyYSBPcGVuTGludXggMi4yCisgICAgICAgVXNlIExJU0EgdG8gbG9hZCB0aGUgY21wY2kgbW9kdWxlLgorCisgICAgYy4gUmVkSGF0IDYuMCBhbmQgUy51LlMuRS4gNi4xCisgICAgICAgQWRkIGZvbGxvd2luZyBjb21tYW5kIGluIC9ldGMvY29uZi5tb2R1bGVzOgorCisgICAgICAgYWxpYXMgc291bmQgY21wY2kKKworCWFsc28gdmlzaXQgaHR0cDovL3d3dy5jbWVkaWEuY29tLnR3IGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb24uCisKK0RSSVZFUiBQQVJBTUVURVIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgU29tZSBmdW5jdGlvbnMgZm9yIHRoZSBjbTg3MzggY2FuIGJlIGNvbmZpZ3VyZWQgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24KKyAgb3IgbW9kdWxlcyBwYXJhbWV0ZXJzLiBTZXQgdGhlc2UgcGFyYW1ldGVycyB0byAxIHRvIGVuYWJsZS4KKworICBtcHVpbzoJSS9PIHBvcnRzIGJhc2UgZm9yIE1QVS00MDEsIDAgaWYgZGlzYWJsZWQuCisgIGZtaW86CQlJL08gcG9ydHMgYmFzZSBmb3IgT1BMLTMsIDAgaWYgZGlzYWJsZWQuCisgIHNwZGlmX2ludmVyc2U6SW52ZXJzZSB0aGUgUy9QRElGLWluIHNpZ25hbCwgdGhpcyBkZXBlbmRzIG9uIHlvdXIKKwkJQ0QtUk9NIG9yIERWRC1ST00uCisgIHNwZGlmX2xvb3A6ICAgRW5hYmxlIFMvUERJRiBsb29wLCB0aGlzIHJvdXRlIFMvUERJRi1pbiB0byBTL1BESUYtb3V0CisgICAgICAgICAgICAgICAgZGlyZWN0bHkuCisgIHNwZWFrZXJzOiAgICAgTnVtYmVyIG9mIHNwZWFrZXJzIHVzZWQuCisgIHVzZV9saW5lX2FzX3JlYXI6RW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIGxpbmUtaW4gYXMKKyAgICAgICAgICAgICAgICByZWFyLW91dC4KKyAgdXNlX2xpbmVfYXNfYmFzczpFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgbGluZS1pbiBhcworICAgICAgICAgICAgICAgIGJhc3Mtb3V0LgorICBqb3lzdGljazoJRW5hYmxlIGpveXN0aWNrLiBZb3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgTGludXggam95c3RpY2sKKwkJZHJpdmVyLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2YWY3YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgpAQCAtMCwwICsxLDIzIEBACitUbyBjb25maWd1cmUgdGhlIENyeXN0YWwgQ1M0MjN4IHNvdW5kIGNoaXAgYW5kIGFjdGl2YXRlIGl0cyBEU1AgZnVuY3Rpb25zLAorbW9kdWxlcyBtYXkgYmUgbG9hZGVkIGluIHRoaXMgb3JkZXI6CisgIAorCW1vZHByb2JlIHNvdW5kCisJaW5zbW9kIGFkMTg0OAorCWluc21vZCB1YXJ0NDAxCisJaW5zbW9kIGNzNDIzMiBpbz0qIGlycT0qIGRtYT0qIGRtYTI9KgorICAKK1RoaXMgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhcmFtZXRlcnM6CisgIAorCWlvLS1JL08gYWRkcmVzcyBvZiB0aGUgV2luZG93cyBTb3VuZCBTeXN0ZW0gKG5vcm1hbGx5IDB4NTM0KQorCWlycS0tSVJRIG9mIHRoaXMgZGV2aWNlCisJZG1hIGFuZCBkbWEyLS1ETUEgY2hhbm5lbHMgKERNQTIgbWF5IGJlIDApCisgIAorT24gc29tZSBjYXJkcywgdGhlIGJvYXJkIGF0dGVtcHRzIHRvIGRvIG5vbi1QblAgc2V0dXAsIGFuZCBmYWlscy4gIElmIHlvdQoraGF2ZSBwcm9ibGVtcywgdXNlIExpbnV4JyBQblAgZmFjaWxpdGllcy4gCisgIAorVG8gZ2V0IE1JREkgZmFjaWxpdGllcyBhZGQKKyAgCisJaW5zbW9kIG9wbDMgaW89KgorICAKK3doZXJlICJpbyIgaXMgdGhlIEkvTyBhZGRyZXNzIG9mIHRoZSBPUEwzIHN5bnRoZXNpemVyLiBUaGlzIHdpbGwgYmUgc2hvd24KK2luIC9wcm9jL3N5cy9wbnAgYW5kIGlzIG5vcm1hbGx5IDB4Mzg4LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvRVNTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvRVNTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTkzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MKQEAgLTAsMCArMSwzNCBAQAorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIEVTUyBBdWRpb0RyaXZlIGNoaXBzCisKK0luIDIuNCBrZXJuZWxzIHRoZSBTb3VuZEJsYXN0ZXIgZHJpdmVyIG5vdCBvbmx5IHRyaWVzIHRvIGRldGVjdCBhbiBFU1MgY2hpcCwgaXQKK3RyaWVzIHRvIGRldGVjdCB0aGUgdHlwZSBvZiBFU1MgY2hpcCB0b28uIFRoZSBjb3JyZWN0IGRldGVjdGlvbiBvZiB0aGUgY2hpcCAKK2RvZXNuJ3QgYWx3YXlzIHN1Y2NlZWQgaG93ZXZlciwgc28gdW5sZXNzIHlvdSB1c2UgdGhlIGtlcm5lbCBpc2FwbnAgZmFjaWxpdGllcworKGFuZCB5b3UgY2hpcCBpcyBwbnAgY2FwYWJsZSkgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIDIuMCBiZWhhdmlvdXIgd2hpY2gKK21lYW5zOiBvbmx5IGRldGVjdCBFUzY4OCBhbmQgRVMxNjg4LgorCitBbGwgRVNTIGNoaXBzIG5vdyBoYXZlIGEgcmVjb3JkaW5nIGxldmVsIHNldHRpbmcuIFRoaXMgaXMgYSBuZWVkLXRvLWhhdmUgZm9yCitwZW9wbGUgd2hvIHdhbnQgdG8gdXNlIHRoZWlyIEVTUyBmb3IgcmVjb3JkaW5nIHNvdW5kLgorCitFdmVyeSBjaGlwIHRoYXQncyBkZXRlY3RlZCBhcyBhIGxhdGVyLXRoYW4tZXMxNjg4IGNoaXAgaGFzIGEgNiBiaXRzIGxvZ2FyaXRobWljCittYXN0ZXIgdm9sdW1lIGNvbnRyb2wuCisKK0V2ZXJ5IGNoaXAgdGhhdCdzIGRldGVjdGVkIGFzIGEgRVMxODg3IG5vdyBoYXMgRnVsbCBEdXBsZXggc3VwcG9ydC4gTWFkZSBhIAorbGl0dGxlIHRlc3Rwcm9ncmFtIHRoYXQgc2hvd3MgdGhhdCBpcyB3b3JrcywgaGF2ZW4ndCBzZWVuIGEgcmVhbCBwcm9ncmFtIHRoYXQKK25lZWRzIHRoaXMgaG93ZXZlci4KKworRm9yIEVTUyBjaGlwcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAiZXNzdHlwZSIgY2FuIGJlIHNwZWNpZmllZC4gVGhpcyBjb250cm9scwordGhlIChhdXRvKSBkZXRlY3Rpb24gb2YgdGhlIEVTUyBjaGlwcy4gSXQgY2FuIGhhdmUgMyBraW5kcyBvZiB2YWx1ZXM6CisKKy0xICAgQWN0IGxpa2UgMi4wIGtlcm5lbHM6IG9ubHkgZGV0ZWN0IEVTNjg4IG9yIEVTMTY4OC4KKzAJIFRyeSB0byBhdXRvLWRldGVjdCB0aGUgY2hpcCAobWF5IGZhaWwgZm9yIEVTMTY4OCkKKzY4OCAgVGhlIGNoaXAgd2lsbCBiZSB0cmVhdGVkIGFzICBFUzY4OAorMTY4OCAgLCwgICwsICAgLCwgICwsICAgICwsICAgLCwgRVMxNjg4CisxODY4ICAsLCAgLCwgICAsLCAgLCwgICAgLCwgICAsLCBFUzE4NjgKKzE4NjkgICwsICAsLCAgICwsICAsLCAgICAsLCAgICwsIEVTMTg2OQorMTc4OCAgLCwgICwsICAgLCwgICwsICAgICwsICAgLCwgRVMxNzg4CisxODg3ICAsLCAgLCwgICAsLCAgLCwgICAgLCwgICAsLCBFUzE4ODcKKzE4ODggICwsICAsLCAgICwsICAsLCAgICAsLCAgICwsIEVTMTg4OAorCitCZWNhdXNlIEZ1bGwgRHVwbGV4IGlzIHN1cHBvcnRlZCBmb3IgRVMxODg3IHlvdSBjYW4gc3BlY2lmeSBhIHNlY29uZCBETUEKK2NoYW5uZWwgYnkgc3BlY2lmeWluZyBtb2R1bGUgcGFyYW1ldGVyIGRtYTE2LiBJdCBjYW4gYmUgb25lIG9mOiAwLCAxLCAzIG9yIDUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0VTUzE4NjggYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MxODY4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTkyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9FU1MxODY4CkBAIC0wLDAgKzEsNTUgQEAKK0RvY3VtZW50YXRpb24gZm9yIHRoZSBFU1MxODY4RiBBdWRpb0RyaXZlIFBuUCBzb3VuZCBjYXJkCisKK1RoZSBFU1MxODY4IHNvdW5kIGNhcmQgaXMgYSBQblAgRVNTMTY4OC1jb21wYXRpYmxlIDE2LWJpdCBzb3VuZCBjYXJkLgorCitJdCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZCBieSB0aGUgTGludXggS2VybmVsIGlzYXBucCBzdXBwb3J0IHdoZW4geW91Citsb2FkIHRoZSBzYi5vIG1vZHVsZS4gT3RoZXJ3aXNlIHlvdSBzaG91bGQgdGFrZSBjYXJlIG9mOgorCisgICogIFRoZSBFU1MxODY4IGRvZXMgbm90IGFsbG93IHVzZSBvZiBhIDE2LWJpdCBETUEsIHRodXMgRE1BIDAsIDEsIDIsIGFuZCAzCisgICAgIG1heSBvbmx5IGJlIHVzZWQuCisKKyAgKiAgaXNhcG5wdG9vbHMgdmVyc2lvbiAxLjE0IGRvZXMgd29yayB3aXRoIEVTUzE4NjguICBFYXJsaWVyIHZlcnNpb25zIG1pZ2h0CisgICAgIG5vdC4KKworICAqICBTb3VuZCBzdXBwb3J0IE1VU1QgYmUgY29tcGlsZWQgYXMgTU9EVUxFUywgbm90IHN0YXRpY2FsbHkgbGlua2VkCisgICAgIGludG8gdGhlIGtlcm5lbC4KKworCitOT1RFOiB0aGlzIGlzIG9ubHkgbmVlZGVkIHdoZW4gbm90IHVzaW5nIHRoZSBrZXJuZWwgaXNhcG5wIHN1cHBvcnQhCisKK0ZvciBjb25maWd1cmluZyB0aGUgc291bmQgY2FyZCdzIEkvTyBhZGRyZXNzZXMsIElSUSBhbmQgRE1BLCBoZXJlIGlzIGEKK3NhbXBsZSBjb3B5IG9mIHRoZSBpc2FwbnAuY29uZiBkaXJlY3RpdmVzIHJlZ2FyZGluZyB0aGUgRVNTMTg2ODoKKworKENPTkZJR1VSRSBFU1MxODY4Ly0xIChMRCAxCisoSU8gMCAoQkFTRSAweDAyMjApKQorKElPIDEgKEJBU0UgMHgwMzg4KSkKKyhJTyAyIChCQVNFIDB4MDMzMCkpCisoRE1BIDAgKENIQU5ORUwgMSkpCisoSU5UIDAgKElSUSA1IChNT0RFICtFKSkpCisoQUNUIFkpCispKQorCisoZm9yIGEgZnVsbCB3b3JraW5nIGlzYXBucC5jb25mIGZpbGUsIHJlbWVtYmVyIHRoZQorKElTT0xBVEUpCisoSURFTlRJRlkgKikKK2F0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZQorKFdBSVRGT1JLRVkpCithdCB0aGUgZW5kLikKKworSW4gdGhpcyBzZXR1cCwgdGhlIG1haW4gY2FyZCBJL08gaXMgMHgwMjIwLCBGTSBzeW50aGVzaXplciBpcyAweDAzODgsIGFuZAordGhlIE1QVS00MDEgTUlESSBwb3J0IGlzIGxvY2F0ZWQgYXQgMHgwMzMwLiAgSVJRIGlzIElSUSA1LCBETUEgaXMgY2hhbm5lbCAxLgorCitBZnRlciBjb25maWd1cmluZyB0aGUgc291bmQgY2FyZCB2aWEgaXNhcG5wLCB0byB1c2UgdGhlIGNhcmQgeW91IG11c3QgbG9hZAordGhlIHNvdW5kIG1vZHVsZXMgd2l0aCB0aGUgcHJvcGVyIEkvTyBpbmZvcm1hdGlvbi4gIEhlcmUgaXMgbXkgc2V0dXA6CisKKyMgRVNTMTg2OEYgQXVkaW9Ecml2ZSBpbml0aWFsaXphdGlvbgorCisvc2Jpbi9tb2Rwcm9iZSBzb3VuZAorL3NiaW4vaW5zbW9kIHVhcnQ0MDEKKy9zYmluL2luc21vZCBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj0tMQorL3NiaW4vaW5zbW9kIG1wdTQwMSBpbz0weDMzMAorL3NiaW4vaW5zbW9kIG9wbDMgaW89MHgzODgKKy9zYmluL2luc21vZCB2X21pZGkKKworb3BsMyBpcyB0aGUgRk0gc3ludGhlc2l6ZXIKKy9zYmluL2luc21vZCBvcGwzIGlvPTB4Mzg4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JTlNUQUxMLmF3ZSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0lOU1RBTEwuYXdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMGY0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JTlNUQUxMLmF3ZQpAQCAtMCwwICsxLDEzNCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUlOU1RBTExBVElPTiBPRiBBV0UzMiBTT1VORCBEUklWRVIgRk9SIExJTlVYCisJVGFrYXNoaSBJd2FpCTxpd2FpQHd3LnVuaS1lcmxhbmdlbi5kZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBBdHRlbnRpb24gdG8gU0ItUG5QIENhcmQgVXNlcnMKKworSWYgeW91J3JlIHVzaW5nIFBuUCBjYXJkcywgdGhlIGluaXRpYWxpemF0aW9uIG9mIFBuUCBpcyByZXF1aXJlZAorYmVmb3JlIGxvYWRpbmcgdGhpcyBkcml2ZXIuICBZb3UgaGF2ZSBub3cgdGhyZWUgb3B0aW9uczoKKyAgMS4gVXNlIGlzYXBucHRvb2xzLgorICAyLiBVc2UgaW4ta2VybmVsIGlzYXBucCBzdXBwb3J0LgorICAzLiBJbml0aWFsaXplIFBuUCBvbiBET1MvV2luZG93cywgdGhlbiBib290IGxpbnV4IGJ5IGxvYWRsaW4uCitJbiB0aGlzIGRvY3VtZW50LCBvbmx5IHRoZSBjYXNlIDEgY2FzZSBpcyB0cmVhdGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEluc3RhbGxhdGlvbiBvbiBSZWQgSGF0IDUuMCBTb3VuZCBEcml2ZXIKKworUGxlYXNlIHVzZSBpbnN0YWxsLXJoLnNoIHVuZGVyIFJlZEhhdDUuMCBkaXJlY3RvcnkuCitETyBOT1QgVVNFIGluc3RhbGwuc2ggYmVsb3cuCitTZWUgSU5TVEFMTC5SSCBmb3IgbW9yZSBkZXRhaWxzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIEluc3RhbGxhdGlvbi9VcGRhdGUgYnkgU2hlbGwgU2NyaXB0CisKKyAgMS4gQmVjb21lIHJvb3QKKworCSUgc3UKKworICAyLiBJZiB5b3UgaGF2ZSBuZXZlciBjb25maWd1cmVkIHRoZSBrZXJuZWwgdHJlZSB5ZXQsIHJ1biBtYWtlIGNvbmZpZworICAgIG9uY2UgKHRvIG1ha2UgZGVwZW5kZW5jaWVzIGFuZCBzeW1saW5rcykuCisKKwkjIGNkIC91c3Ivc3JjL2xpbnV4CisJIyBtYWtlIHhjb25maWcKKyAgICAKKyAgMy4gUnVuIGluc3RhbGwuc2ggc2NyaXB0CisKKwkjIHNoIC4vaW5zdGFsbC5zaAorCisgIDQuIENvbmZpZ3VyZSB5b3VyIGtlcm5lbAorCisJKGZvciBMaW51eCAyLlswMV0ueCB1c2VyKQorCSMgY2QgL3Vzci9zcmMvbGludXgKKwkjIG1ha2UgeGNvbmZpZyAob3IgbWFrZSBtZW51Y29uZmlnKQorCisJKGZvciBMaW51eCAxLjIueCB1c2VyKQorCSMgY2QgL3Vzci9zcmMvbGludXgKKwkjIG1ha2UgY29uZmlnCisKKyAgICBBbnN3ZXIgWUVTIHRvIGJvdGggImxvd2xldmVsIGRyaXZlcnMiIGFuZCAiQVdFMzIgd2F2ZSBzeW50aCIgaXRlbXMgCisgICAgaW4gU291bmQgbWVudS4gICgibG93bGV2ZWwgZHJpdmVycyIgd2lsbCBhcHBlYXIgb25seSBpbiAyLngKKyAgICBrZXJuZWwuKQorCisgIDUuIE1ha2UgeW91ciBrZXJuZWwgKGFuZCBtb2R1bGVzKSwgYW5kIGluc3RhbGwgdGhlbSBhcyB1c3VhbC4KKworCTVhLiBtYWtlIGtlcm5lbCBpbWFnZQorCQkjIG1ha2UgekltYWdlCisKKwk1Yi4gbWFrZSBtb2R1bGVzIGFuZCBpbnN0YWxsIHRoZW0KKwkJIyBtYWtlIG1vZHVsZXMgJiYgbWFrZSBtb2R1bGVzX2luc3RhbGwKKworCTVjLiBJZiB5b3UncmUgdXNpbmcgbGlsbywgY29weSB0aGUga2VybmVsIGltYWdlIGFuZCBydW4gbGlsby4KKwkgICAgT3RoZXJ3aXNlLCBjb3B5IHRoZSBrZXJuZWwgaW1hZ2UgdG8gc3VpdGFibGUgZGlyZWN0b3J5IG9yCisJICAgIG1lZGlhIGZvciB5b3VyIHN5c3RlbS4KKworICA2LiBSZWJvb3QgdGhlIGtlcm5lbCBpZiBuZWNlc3NhcnkuCisJLSBJZiB5b3UgdXBkYXRlZCBvbmx5IHRoZSBtb2R1bGVzLCB5b3UgZG9uJ3QgaGF2ZSB0byByZWJvb3QKKwkgIHRoZSBzeXN0ZW0uICBKdXN0IHJlbW92ZSB0aGUgb2xkIHNvdW5kIG1vZHVsZXMgaGVyZS4KKwkJaW4gCisJCSMgcm1tb2Qgc291bmQubwkJKGxpbnV4LTIuMCBvciBPU1MvRnJlZSkKKwkJIyBybW1vZCBhd2Vfd2F2ZS5vCShsaW51eC0yLjEpCisKKyAgNy4gSWYgeW91ciBBV0UgY2FyZCBpcyBhIFBuUCBhbmQgbm90IGluaXRpYWxpemVkIHlldCwgeW91J2xsIGhhdmUgdG8KKyAgICBkbyBpdCBieSBpc2FwbnAgdG9vbHMuICBPdGhlcndpc2UsIHNraXAgdG8gOC4KKworCVRoaXMgc2VjdGlvbiBkZXNjcmliZWQgb25seSBhIGJyaWVmIGV4cGxhbmF0aW9uLiAgRm9yIG1vcmUKKwlkZXRhaWxzLCBwbGVhc2Ugc2VlIHRoZSBBV0U2NC1NaW5pLUhPV1RPIG9yIGlzYXBucCB0b29scyBGQVEuCisKKwk3YS4gSWYgeW91IGhhdmUgbm8gaXNhcG5wLmNvbmYgZmlsZSwgZ2VuZXJhdGUgaXQgYnkgcG5wZHVtcC4KKwkgICAgT3RoZXJ3aXNlLCBza2lwIHRvIDdkLgorCQkjIHBucGR1bXAgPiAvZXRjL2lzYXBucC5jb25mCisKKwk3Yi4gRWRpdCBpc2FwbnAuY29uZiBmaWxlLiAgQ29tbWVudCBvdXQgdGhlIGFwcHJvcHJpYXRlCisJICAgIGxpbmVzIGNvbnRhaW5pbmcgZGVzaXJhYmxlIEkvTyBwb3J0cywgRE1BIGFuZCBJUlFzLgorCSAgICBEb24ndCBmb3JnZXQgdG8gZW5hYmxlIChBQ1QgWSkgbGluZS4KKworCTdjLiBBZGQgdHdvIGkvbyBwb3J0cyAoMHhBMjAgYW5kIDB4RTIwKSBpbiBXYXZlVGFibGUgcGFydC4KKwkgICAgZXgpCisJCShDT05GSUdVUkUgQ1RMMDA0OC81ODEyOCAoTEQgMgorCQkjICAgICBBTlNJIHN0cmluZyAtLT5XYXZlVGFibGU8LS0KKwkJICAoSU8gMCAoQkFTRSAweDA2MjApKQorCQkgIChJTyAxIChCQVNFIDB4MEEyMCkpCisJCSAgKElPIDIgKEJBU0UgMHgwRTIwKSkKKwkJICAoQUNUIFkpCisJCSkpCisKKwk3ZC4gTG9hZCB0aGUgY29uZmlnIGZpbGUuCisJICAgIENBVVRJT046IFRoaXMgd2lsbCByZXNldCBhbGwgUG5QIGNhcmRzIQorCisJCSMgaXNhcG5wIC9ldGMvaXNhcG5wLmNvbmYKKworICA4LiBMb2FkIHRoZSBzb3VuZCBtb2R1bGUgKGlmIHlvdSBjb25maWd1cmVkIGl0IGFzIGEgbW9kdWxlKToKKworCWZvciAyLjAga2VybmVsIG9yIE9TUy9GcmVlIG1vbm9saXRoaWMgbW9kdWxlOgorCisJCSMgbW9kcHJvYmUgc291bmQubworCisJZm9yIDIuMSBrZXJuZWw6CisKKwkJIyBtb2Rwcm9iZSBzb3VuZAorCQkjIGluc21vZCB1YXJ0NDAxCisJCSMgaW5zbW9kIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PTUgbXB1X2lvPTB4MzMwCisJCShUaGVzZSB2YWx1ZXMgZGVwZW5kIG9uIHlvdXIgc2V0dGluZ3MuKQorCQkjIGluc21vZCBhd2Vfd2F2ZQorCQkoQmUgc3VyZSB0byBsb2FkIGF3ZV93YXZlIGFmdGVyIHNiISkKKworCQlTZWUgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQVdFMzIgZm9yCisJCW1vcmUgZGV0YWlscy4KKworICA5LiAob25seSBmb3Igb2Jzb2xldGUgc3lzdGVtcykgSWYgeW91IGRvbid0IGhhdmUgL2Rldi9zZXF1ZW5jZXIKKyAgICAgZGV2aWNlIGZpbGUsIG1ha2UgaXQgYWNjb3JkaW5nIHRvIFJlYWRtZS5saW51eCBmaWxlIG9uCisgICAgIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvc291bmQuIChSdW4gYSBzaGVsbCBzY3JpcHQgaW5jbHVkZWQgaW4KKyAgICAgdGhhdCBmaWxlKS4gPC0tIFRoaXMgZmlsZSBubyBsb25nZXIgZXhpc3RzIGluIHRoZSByZWNlbnQga2VybmVscyEKKworICAxMC4gT0ssIGxvYWQgeW91ciBvd24gc291bmRmb250IGZpbGUsIGFuZCBlbmpveSBNSURJIQorCisJJSBzZnhsb2FkIHN5bnRoZ20uc2JrCisJJSBkcnZtaWRpIGZvby5taWQKKworICAxMS4gRm9yIG1vcmUgYWR2YW5jZWQgdXNlIChlZy4gZHluYW1pYyBsb2FkaW5nLCB2aXJ0dWFsIGJhbmsgYW5kCisgICAgICBldGMuKSwgcGxlYXNlIHJlYWQgdGhlIGF3ZWRydiBGQVEgb3IgdGhlIGluc3RydWN0aW9ucyBpbiBhd2VzZngKKyAgICAgIGFuZCBhd2VtaWRpIHBhY2thZ2VzLgorCitHb29kIGx1Y2shCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkNGZiOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgpAQCAtMCwwICsxLDQ1OSBAQAorSW50cm9kdWN0aW9uCU5vdGVzIG9uIE1vZHVsYXIgU291bmQgRHJpdmVycyBhbmQgU291bmRjb3JlCitXYWRlIEhhbXB0b24gCisyLzE0LzIwMDEKKworUHVycG9zZTogIAorPT09PT09PT0KK1RoaXMgZG9jdW1lbnQgcHJvdmlkZXMgc29tZSBnZW5lcmFsIG5vdGVzIG9uIHRoZSBtb2R1bGFyIAorc291bmQgZHJpdmVycyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbiwgYWxvbmcgd2l0aCB0aGUgCitzdXBwb3J0IG1vZHVsZXMgc291bmQubyBhbmQgc291bmRjb3JlLm8uCisKK05vdGUsIHNvbWUgb2YgdGhpcyBwcm9iYWJseSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIFNvdW5kLUhPV1RPIQorCitOb3RlLCBzb3VuZGxvdy5vIHdhcyBwcmVzZW50IHdpdGggMi4yIGtlcm5lbHMgYnV0IGlzIG5vdCAKK3JlcXVpcmVkIGZvciAyLjQueCBrZXJuZWxzLiAgUmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZAordG8gdGhpcy4KKworCitDb3B5aW5nOgorPT09PT09PT0KK25vbmUKKworCitIaXN0b3J5OgorPT09PT09PT0KKzAuMS4wICAxMS8yMC8xOTk4ICBGaXJzdCB2ZXJzaW9uLCBkcmFmdAorMS4wLjAgIDExLzE5OTggICAgIEFsYW4gQ294IGNoYW5nZXMsIGluY29ycG9yYXRpb24gaW4gMi4yLjAKKyAgICAgICAgICAgICAgICAgICBhcyBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KKzEuMS4wICA2LzMwLzE5OTkgICBTZWNvbmQgdmVyc2lvbiwgYWRkZWQgbm90ZXMgb24gbWFraW5nIHRoZSBkcml2ZXJzLAorICAgICAgICAgICAgICAgICAgIGFkZGVkIGluZm8gb24gbXVsdGlwbGUgc291bmQgY2FyZHMgb2Ygc2ltaWxhciB0eXBlcyxdCisgICAgICAgICAgICAgICAgICAgYWRkZWQgbW9yZSBkaWFnbm9zdGljcyBpbmZvLCBhZGRlZCBpbmZvIGFib3V0IGVzZC4KKyAgICAgICAgICAgICAgICAgICBhZGRlZCBpbmZvIG9uIE9TUyBhbmQgQUxTQS4KKzEuMS4xICAxOTk5MTAzMQkgICBBZGRlZCBub3RlcyBvbiBzb3VuZC1zbG90LSBhbmQgc291bmQtc2VydmljZS4KKwkJCShBbGFuIENveCkKKzEuMS4yICAyMDAwMDkyMCAgICBNb2RpZmllZCBmb3IgS2VybmVsIDIuNCAoQ2hyaXN0b3BoIEhlbGx3aWcpCisxLjEuMyAgMjAwMTAyMTQgICAgTWlub3Igbm90ZXMgYW5kIGNvcnJlY3Rpb25zIChXYWRlIEhhbXB0b24pCisgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhhbXBsZXMgb2Ygc291bmQtc2xvdC0wLCBldGMuCisKKworTW9kdWxhciBTb3VuZCBEcml2ZXJzOgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGFua3MgdG8gdGhlIEdSRUFUIHdvcmsgYnkgQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51ayksCisKK1tBbmQgT2xlZyBEcm9raW4sIFRob21hcyBTYWlsZXIsIEFuZHJldyBWZWxpYXRoIGFuZCBtb3JlIHRoYW4gYSBmZXcgCisgb3RoZXJzIC0gbm90IHRvIG1lbnRpb24gSGFubnUncyBvcmlnaW5hbCBjb2RlIGJlaW5nIGRlc2lnbmVkIHdlbGwKKyBlbm91Z2ggdG8gY29wZSB3aXRoIHRoYXQga2luZCBvZiBjaG9wcGluZyB1cF0oQWxhbikKKwordGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbHMgc3VwcG9ydCBhIG1vZHVsYXIgc291bmQgZHJpdmVyLiAgRnJvbQorQWxhbidzIGNvbW1lbnRzIGluIGxpbnV4L2RyaXZlcnMvc291bmQvUkVBRE1FLkZJUlNUOgorCisgIFRoZSBtb2R1bGFyIHNvdW5kIGRyaXZlciBwYXRjaGVzIHdlcmUgZnVuZGVkIGJ5IFJlZCBIYXQgU29mdHdhcmUgCisgICh3d3cucmVkaGF0LmNvbSkuIFRoZSBzb3VuZCBkcml2ZXIgaGVyZSBpcyB0aHVzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiAKKyAgSGFubnUncyBjb2RlLiBQbGVhc2UgYmVhciB0aGF0IGluIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0aGUgYXBwcm9wcmlhdGUKKyAgZm9ydW1zIGZvciBidWcgcmVwb3J0aW5nLgorCitUaGUgbW9kdWxhciBzb3VuZCBkcml2ZXJzIG1heSBiZSBsb2FkZWQgdmlhIGluc21vZCBvciBtb2Rwcm9iZS4gIAorVG8gc3VwcG9ydCBhbGwgdGhlIHZhcmlvdXMgc291bmQgbW9kdWxlcywgdGhlcmUgYXJlIHR3byBnZW5lcmFsIAorc3VwcG9ydCBtb2R1bGVzIHRoYXQgbXVzdCBiZSBsb2FkZWQgZmlyc3Q6CisgCisgICBzb3VuZGNvcmUubzogICBUb3AgbGV2ZWwgaGFuZGxlciBmb3IgdGhlIHNvdW5kIHN5c3RlbSwgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgcmVnaXN0cmF0aW9uIG9mIGRldmljZXMKKyAgICAgICAgICAgICAgICAgIGJ5IHR5cGUuCisKKyAgIHNvdW5kLm86ICAgICAgIENvbW1vbiBzb3VuZCBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgYWxsIG1vZHVsZXMuCisKK0ZvciB0aGUgc3BlY2lmaWMgc291bmQgbW9kdWxlcyAoZS5nLiwgc2IubyBmb3IgdGhlIFNvdW5kYmxhc3RlciksIAorcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGF0IG1vZHVsZSB0byBkZXRlcm1pbmUgd2hhdCBvcHRpb25zCithcmUgYXZhaWxhYmxlLCBmb3IgZXhhbXBsZSBJUlEsIGFkZHJlc3MsIERNQS4KKworV2FybmluZywgdGhlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBjYXJkcyBzb21ldGltZSB1c2UgZGlmZmVyZW50IG5hbWVzIAorZm9yIHRoZSBzYW1lIG9yIGEgc2ltaWxhciBmZWF0dXJlIChkbWExPSB2ZXJzdXMgZG1hMTY9KS4gIEFzIGEgbGFzdCAKK3Jlc29ydCwgaW5zcGVjdCB0aGUgY29kZSAoc2VhcmNoIGZvciBNT0RVTEVfUEFSTSkuCisKK05vdGVzOgorCisxLiAgVGhlcmUgaXMgYSBuZXcgT3BlblNvdXJjZSBzb3VuZCBkcml2ZXIgY2FsbGVkIEFMU0Egd2hpY2ggaXMKKyAgICBjdXJyZW50bHkgdW5kZXIgZGV2ZWxvcG1lbnQ6ICBodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvCisgICAgVGhlIEFMU0EgZHJpdmVycyBzdXBwb3J0IHNvbWUgbmV3ZXIgaGFyZHdhcmUgdGhhdCBtYXkgbm90IAorICAgIGJlIHN1cHBvcnRlZCBieSB0aGlzIHNvdW5kIGRyaXZlciBhbmQgYWxzbyBwcm92aWRlIHNvbWUgCisgICAgYWRkaXRpb25hbCBmZWF0dXJlcy4KKworMi4gIFRoZSBjb21tZXJjaWFsIE9TUyBkcml2ZXIgbWF5IGJlIG9idGFpbmVkIGZyb20gdGhlIHNpdGU6CisgICAgaHR0cDovL3d3dy9vcGVuc291bmQuY29tLiAgVGhpcyBtYXkgYmUgdXNlZCBmb3IgY2FyZHMgdGhhdAorICAgIGFyZSB1bnN1cHBvcnRlZCBieSB0aGUga2VybmVsIGRyaXZlciwgb3IgbWF5IGJlIHVzZWQKKyAgICBieSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gIAorCiszLiAgVGhlIGVubGlnaHRlbm1lbnQgc291bmQgZGFlbW9uIG1heSBiZSB1c2VkIGZvciBwbGF5aW5nCisgICAgbXVsdGlwbGUgc291bmRzIGF0IHRoZSBzYW1lIHRpbWUgdmlhIGEgc2luZ2xlIGNhcmQsIGVsaW1pbmF0aW5nCisgICAgc29tZSBvZiB0aGUgcmVxdWlyZW1lbnRzIGZvciBtdWx0aXBsZSBzb3VuZCBjYXJkIHN5c3RlbXMuICBGb3IKKyAgICBtb3JlIGluZm9ybWF0aW9uLCBzZWU6ICBodHRwOi8vd3d3LnR1eC5vcmcvfnJpY2R1ZGUvRXNvdW5ELmh0bWwgIAorICAgIFRoZSAiZXNkIiBwcm9ncmFtIG1heSBiZSB1c2VkIHdpdGggdGhlIHJlYWwtcGxheWVyIGFuZCBtcGVnIAorICAgIHBsYXllcnMgbGlrZSBtcGcxMjMgYW5kIHgxMWFtcC4gIFRoZSBuZXdlciByZWFsLXBsYXllciAKKyAgICBhbmQgc29tZSBnYW1lcyBldmVuIGluY2x1ZGUgYnVpbHQtaW4gc3VwcG9ydCBmb3IgRVNEIQorCisKK0J1aWxkaW5nIHRoZSBNb2R1bGVzOgorPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZG9lcyBub3QgcHJvdmlkZSBmdWxsIGRldGFpbHMgb24gYnVpbGRpbmcgdGhlIAora2VybmVsLCBldGMuICBUaGUgbm90ZXMgYmVsb3cgYXBwbHkgb25seSB0byBtYWtpbmcgdGhlIGtlcm5lbAorc291bmQgbW9kdWxlcy4gICBJZiB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBrZXJuZWwncyBSRUFETUUsCit0aGUgUkVBRE1FIHRha2VzIHByZWNlZGVuY2UuIAorCisxLiAgVG8gbWFrZSB0aGUga2VybmVsIHNvdW5kIG1vZHVsZXMsIGNkIHRvIHlvdXIgL3Vzci9zcmMvbGludXgKKyAgICBkaXJlY3RvcnkgKHR5cGljYWxseSkgYW5kIHR5cGUgbWFrZSBjb25maWcsIG1ha2UgbWVudWNvbmZpZywgCisgICAgb3IgbWFrZSB4Y29uZmlnICh0byBzdGFydCB0aGUgY29tbWFuZCBsaW5lLCBkaWFsb2csIG9yIHgtYmFzZWQKKyAgICBjb25maWd1cmF0aW9uIHRvb2wpLiAgCisKKzIuICBTZWxlY3QgdGhlIFNvdW5kIG9wdGlvbiBhbmQgYSBkaWFsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICAKKworMy4gIFNlbGVjdCBNIChtb2R1bGUpIGZvciAiU291bmQgY2FyZCBzdXBwb3J0Ii4KKworNC4gIFNlbGVjdCB5b3VyIHNvdW5kIGRyaXZlcihzKSBhcyBhIG1vZHVsZS4gIEZvciBQcm9BdWRpbywgU291bmQKKyAgICBCbGFzdGVyLCBldGMuLCBzZWxlY3QgTSAobW9kdWxlKSBmb3IgT1NTIHNvdW5kIG1vZHVsZXMuCisgICAgW3RoYW5rcyB0byBNYXJ2aW4gU3RvZG9sc2t5IDxzdG9kb2xza0Blcm9scy5jb20+XUEKKworNS4gIE1ha2UgdGhlIGtlcm5lbCAoZS5nLiwgbWFrZSBiekltYWdlKSwgYW5kIGluc3RhbGwgdGhlIGtlcm5lbC4KKworNi4gIE1ha2UgdGhlIG1vZHVsZXMgYW5kIGluc3RhbGwgdGhlbSAobWFrZSBtb2R1bGVzOyBtYWtlIG1vZHVsZXNfaW5zdGFsbCkuCisKK05vdGUsIGZvciAyLjUueCBrZXJuZWxzLCBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIG5ld2VyIG1vZHVsZS1pbml0LXRvb2xzIAoraW5zdGFsbGVkIG9yIG1vZHVsZXMgd2lsbCBub3QgYmUgbG9hZGVkIHByb3Blcmx5LiAgMi41LnggcmVxdWlyZXMgYW4KK3VwZGF0ZWQgbW9kdWxlLWluaXQtdG9vbHMuCisKKworUGx1ZyBhbmQgUGxheSAoUG5QOgorPT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgc291bmQgY2FyZCBpcyBhbiBJU0EgUG5QIGNhcmQsIGlzYXBucCBtYXkgYmUgdXNlZAordG8gY29uZmlndXJlIHRoZSBjYXJkLiAgU2VlIHRoZSBmaWxlIGlzYXBucC50eHQgaW4gdGhlIAorZGlyZWN0b3J5IG9uZSBsZXZlbCB1cCAoZS5nLiwgL3Vzci9zcmMvbGludXgvRG9jdW1lbnRhdGlvbikuCisKK0Fsc28gdGhlIDIuNC54IGtlcm5lbHMgcHJvdmlkZSBQblAgY2FwYWJpbGl0aWVzLCBzZWUgdGhlIAorZmlsZSBORVdTIGluIHRoaXMgZGlyZWN0b3J5LgorCitQQ0kgc291bmQgY2FyZHMgYXJlIGhpZ2hseSByZWNvbW1lbmRlZCwgYXMgdGhleSBhcmUgZmFyIAorZWFzaWVyIHRvIGNvbmZpZ3VyZSBhbmQgZnJvbSB3aGF0IEkgaGF2ZSByZWFkLCB0aGV5IHVzZQorbGVzcyByZXNvdXJjZXMgYW5kIGFyZSBtb3JlIENQVSBlZmZpY2llbnQuCisKKworSU5TTU9EOgorPT09PT09PQorCitJZiBsb2FkaW5nIHZpYSBpbnNtb2QsIHRoZSBjb21tb24gbW9kdWxlcyBtdXN0IGJlIGxvYWRlZCBpbiB0aGUgCitvcmRlciBiZWxvdyBCRUZPUkUgbG9hZGluZyB0aGUgb3RoZXIgc291bmQgbW9kdWxlcy4gIFRoZSBjYXJkLXNwZWNpZmljCittb2R1bGVzIG1heSB0aGVuIGJlIGxvYWRlZCAobW9zdCByZXF1aXJlIHBhcmFtZXRlcnMpLiAgRm9yIGV4YW1wbGUsCitJIHVzZSB0aGUgZm9sbG93aW5nIHZpYSBhIHNoZWxsIHNjcmlwdCB0byBsb2FkIG15IFNvdW5kQmxhc3RlcjoKKworU0JfQkFTRT0weDI0MAorU0JfSVJRPTkKK1NCX0RNQT0zCitTQl9ETUEyPTUKK1NCX01QVT0weDMwMAorIworZWNobyBTdGFydGluZyBzb3VuZAorL3NiaW4vaW5zbW9kIHNvdW5kY29yZQorL3NiaW4vaW5zbW9kIHNvdW5kICAKKyMKK2VjaG8gU3RhcnRpbmcgc291bmQgYmxhc3Rlci4uLi4KKy9zYmluL2luc21vZCB1YXJ0NDAxCisvc2Jpbi9pbnNtb2Qgc2IgaW89JFNCX0JBU0UgaXJxPSRTQl9JUlEgZG1hPSRTQl9ETUEgZG1hMTY9JFNCX0RNQTIgbXB1X2lvPSRTQl9NUAorCitXaGVuIHVzaW5nIHNvdW5kIGFzIGEgbW9kdWxlLCBJIHR5cGljYWxseSBwdXQgdGhlc2UgY29tbWFuZHMKK2luIGEgZmlsZSBzdWNoIGFzIC9yb290L3NvdW5kb24uc2guCisKKworTU9EUFJPQkU6Cis9PT09PT09PT0KKworSWYgbG9hZGluZyB2aWEgbW9kcHJvYmUsIHRoZXNlIGNvbW1vbiBmaWxlcyBhcmUgYXV0b21hdGljYWxseSBsb2FkZWQgCit3aGVuIHJlcXVlc3RlZCBieSBtb2Rwcm9iZS4gIEZvciBleGFtcGxlLCBteSAvZXRjL21vZHByb2JlLmNvbmYgY29udGFpbnM6CisKK2FsaWFzIHNvdW5kIHNiIAorb3B0aW9ucyBzYiBpbz0weDI0MCBpcnE9OSBkbWE9MyBkbWExNj01IG1wdV9pbz0weDMwMAorCitBbGwgeW91IG5lZWQgdG8gZG8gdG8gbG9hZCB0aGUgbW9kdWxlIGlzOgorCisJL3NiaW4vbW9kcHJvYmUgc2IKKworCitTb3VuZCBTdGF0dXM6Cis9PT09PT09PT09PT09CisKK1RoZSBzdGF0dXMgb2Ygc291bmQgbWF5IGJlIHJlYWQvY2hlY2tlZCBieToKKyAgICAgICAgY2F0IChhbnlmaWxlKS5hdSA+L2Rldi9hdWRpbworCitbV1dIOiAgVGhpcyBtYXkgbm90IHdvcmsgcHJvcGVybHkgZm9yIFNvdW5kQmxhc3RlciBQQ0kgMTI4IGNhcmRzCitzdWNoIGFzIHRoZSBlczEzNzAvMSAoc2VlIHRoZSBlczEzNzAvMSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSkgCithcyB0aGV5IGRvIG5vdCBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgdUxhdyBvbiAvZGV2L2F1ZGlvLl0KKworVGhlIHN0YXR1cyBvZiB0aGUgbW9kdWxlcyBhbmQgd2hpY2ggbW9kdWxlcyBkZXBlbmQgb24gCit3aGljaCBvdGhlciBtb2R1bGVzIG1heSBiZSBjaGVja2VkIGJ5OgorCS9zYmluL2xzbW9kCisKKy9zYmluL2xzbW9kIHNob3VsZCBzaG93IHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisJc2IgICAgICAgICAgICAgICAgICAgICAyNjI4MCAgIDAgCisJdWFydDQwMSAgICAgICAgICAgICAgICAgNTY0MCAgIDAgIFtzYl0KKwlzb3VuZCAgICAgICAgICAgICAgICAgIDU3MTEyICAgMCAgW3NiIHVhcnQ0MDFdCisJc291bmRjb3JlICAgICAgICAgICAgICAgMTk2OCAgIDggIFtzYiBzb3VuZF0KKworCitSZW1vdmluZyBTb3VuZDogCis9PT09PT09PT09PT09PT0gCisKK1NvdW5kIG1heSBiZSByZW1vdmVkIGJ5IHVzaW5nIC9zYmluL3JtbW9kIGluIHRoZSByZXZlcnNlIG9yZGVyCitpbiB3aGljaCB5b3UgbG9hZCB0aGUgbW9kdWxlcy4gIE5vdGUsIGlmIGEgcHJvZ3JhbSBoYXMgYSBzb3VuZCBkZXZpY2UKK29wZW4gKGUuZy4sIHhtaXhlciksIHRoYXQgbW9kdWxlIChhbmQgdGhlIG1vZHVsZXMgb24gd2hpY2ggaXQgCitkZXBlbmRzKSBtYXkgbm90IGJlIHVubG9hZGVkLgorCitGb3IgZXhhbXBsZSwgSSB1c2UgdGhlIGZvbGxvd2luZyB0byByZW1vdmUgbXkgU291bmRibGFzdGVyIChybW1vZAoraW4gdGhlIHJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggSSBsb2FkZWQgdGhlIG1vZHVsZXMpOgorCisvc2Jpbi9ybW1vZCBzYgorL3NiaW4vcm1tb2QgdWFydDQwMQorL3NiaW4vcm1tb2Qgc291bmQKKy9zYmluL3JtbW9kIHNvdW5kY29yZQorCitXaGVuIHVzaW5nIHNvdW5kIGFzIGEgbW9kdWxlLCBJIHR5cGljYWxseSBwdXQgdGhlc2UgY29tbWFuZHMKK2luIGEgc2NyaXB0IHN1Y2ggYXMgL3Jvb3Qvc291bmRvZmYuc2guCisKKworUmVtb3ZpbmcgU291bmQgZm9yIHVzZSB3aXRoIE9TUzogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKworSWYgeW91IGdldCByZWFsbHkgc3R1Y2sgb3IgaGF2ZSBhIGNhcmQgdGhhdCB0aGUga2VybmVsIG1vZHVsZXMKK3dpbGwgbm90IHN1cHBvcnQsIHlvdSBjYW4gZ2V0IGEgY29tbWVyY2lhbCBzb3VuZCBkcml2ZXIgZnJvbQoraHR0cDovL3d3dy5vcGVuc291bmQuY29tLiAgQmVmb3JlIGxvYWRpbmcgdGhlIGNvbW1lcmNpYWwgc291bmQKK2RyaXZlciwgeW91IHNob3VsZCBkbyB0aGUgZm9sbG93aW5nOgorCisxLiAgcmVtb3ZlIHNvdW5kIG1vZHVsZXMgKGRldGFpbGVkIGFib3ZlKQorMi4gIHJlbW92ZSB0aGUgc291bmQgbW9kdWxlcyBmcm9tIC9ldGMvbW9kcHJvYmUuY29uZgorMy4gIG1vdmUgdGhlIHNvdW5kIG1vZHVsZXMgZnJvbSAvbGliL21vZHVsZXMvPGtlcm5lbD4vbWlzYworICAgIChmb3IgZXhhbXBsZSwgSSBtYWtlIGEgL2xpYi9tb2R1bGVzLzxrZXJuZWw+L21pc2MvdG1wCisgICAgZGlyZWN0b3J5IGFuZCBjb3B5IHRoZSBzb3VuZCBtb2R1bGUgZmlsZXMgdG8gdGhhdCAKKyAgICBkaXJlY3RvcnkpLgorCisKK011bHRpcGxlIFNvdW5kIENhcmRzOgorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzb3VuZCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzb3VuZCBjYXJkcyBhbmQgdGhlcmUKK2FyZSBzb21lIGdyZWF0IGFwcGxpY2F0aW9ucyBsaWtlIG11bHRpdHJhY2sgdGhhdCBzdXBwb3J0IHRoZW0uICAKK1R5cGljYWxseSwgeW91IG5lZWQgdHdvIHNvdW5kIGNhcmRzIG9mIGRpZmZlcmVudCB0eXBlcy4gIE5vdGUsIHRoaXMKK3VzZXMgbW9yZSBwcmVjaW91cyBpbnRlcnJ1cHRzIGFuZCBETUEgY2hhbm5lbHMgYW5kIHNvbWV0aW1lcyAKK2NhbiBiZSBhIGNvbmZpZ3VyYXRpb24gbmlnaHRtYXJlLiAgSSBoYXZlIGhlYXJkIHJlcG9ydHMgb2YgMy00Citzb3VuZCBjYXJkcyAodHlwaWNhbGx5IEkgb25seSB1c2UgMikuICBZb3UgY2FuIHNvbWV0aW1lcyB1c2UKK211bHRpcGxlIFBDSSBzb3VuZCBjYXJkcyBvZiB0aGUgc2FtZSB0eXBlLgorCitPbiBteSBtYWNoaW5lIEkgaGF2ZSB0d28gc291bmQgY2FyZHMgKGNzNDIzMiBhbmQgU291bmRibGFzdGVyIFZpYnJhCisxNikuICBCeSBsb2FkaW5nIHNvdW5kIGFzIG1vZHVsZXMsIEkgY2FuIGNvbnRyb2wgd2hpY2ggaXMgdGhlIGZpcnN0Citzb3VuZCBkZXZpY2UgKC9kZXYvZHNwLCAvZGV2L2F1ZGlvLCAvZGV2L21peGVyKSBhbmQgd2hpY2ggaXMgCit0aGUgc2Vjb25kLiAgTm9ybWFsbHksIHRoZSBjczQyMzIgKERlbGwgc291bmQgb24gdGhlIG1vdGhlcmJvYXJkKSAKK3dvdWxkIGJlIHRoZSBmaXJzdCBzb3VuZCBkZXZpY2UsIGJ1dCBJIHByZWZlciB0aGUgU291bmRibGFzdGVyLiAgCitBbGwgeW91IGhhdmUgdG8gZG8gaXMgdG8gbG9hZCB0aGUgb25lIHlvdSB3YW50IGFzIC9kZXYvZHNwIAorZmlyc3QgKGluIG15IGNhc2UgInNiIikgYW5kIHRoZW4gbG9hZCB0aGUgb3RoZXIgb25lCisoaW4gbXkgY2FzZSAiY3M0MjMyIikuCisKK0lmIHlvdSBoYXZlIHR3byBjYXJkcyBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgYXJlIGp1bXBlcmVkIAorY2FyZHMgb3IgZGlmZmVyZW50IFBuUCByZXZpc2lvbnMsIHlvdSBtYXkgbG9hZCB0aGUgc2FtZSAKK21vZHVsZSB0d2ljZS4gIEZvciBleGFtcGxlLCBJIGhhdmUgYSBTb3VuZEJsYXN0ZXIgdmlicmEgMTYKK2FuZCBhbiBvbGRlciBTb3VuZEJsYXN0ZXIgMTYgKGp1bXBlcnMpLiAgVG8gbG9hZCB0aGUgbW9kdWxlCit0d2ljZSwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMS4gIENvcHkgdGhlIHNvdW5kIG1vZHVsZXMgdG8gYSBuZXcgbmFtZS4gIEZvciBleGFtcGxlCisgICAgc2IubyBjb3VsZCBiZSBjb3BpZWQgKG9yIHN5bWxpbmtlZCkgdG8gc2IxLm8gZm9yIHRoZQorICAgIHNlY29uZCBTb3VuZEJsYXN0ZXIuCisKKzIuICBNYWtlIGEgc2Vjb25kIGVudHJ5IGluIC9ldGMvbW9kcHJvYmUuY29uZiwgZm9yIGV4YW1wbGUsCisgICAgc291bmQxIG9yIHNiMS4gIFRoaXMgc2Vjb25kIGVudHJ5IHNob3VsZCByZWZlciB0byB0aGUKKyAgICBuZXcgbW9kdWxlIG5hbWVzIGZvciBleGFtcGxlIHNiMSwgYW5kIHNob3VsZCBpbmNsdWRlCisgICAgdGhlIEkvTywgZXRjLiBmb3IgdGhlIHNlY29uZCBzb3VuZCBjYXJkLgorCiszLiAgVXBkYXRlIHlvdXIgc291bmRvbi5zaCBzY3JpcHQsIGV0Yy4KKworV2FybmluZzogIEkgaGF2ZSBuZXZlciBiZWVuIGFibGUgdG8gZ2V0IHR3byBQblAgc291bmQgY2FyZHMgb2YgdGhlCitzYW1lIHR5cGUgdG8gbG9hZCBhdCB0aGUgc2FtZSB0aW1lLiAgSSBoYXZlIHRyaWVkIHRoaXMgc2V2ZXJhbCB0aW1lcword2l0aCB0aGUgU291bmRibGFzdGVyIFZpYnJhIDE2IGNhcmRzLiAgT1NTIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGlzCitpcyBhIFBuUCBwcm9ibGVtLi4uLiAgSWYgYW55b25lIGhhcyBhbnkgbHVjayBkb2luZyB0aGlzLCBwbGVhc2UgCitzZW5kIG1lIGFuIEUtTUFJTC4gIFBDSSBzb3VuZCBjYXJkcyBzaG91bGQgbm90IGhhdmUgdGhpcyBwcm9ibGVtLmEKK1NpbmNlIHRoaXMgd2FzIG9yaWdpbmFsbHkgcmVsZWFzZSwgSSBoYXZlIHJlY2VpdmVkIGEgY291cGxlIG9mIAorbWFpbHMgZnJvbSBwZW9wbGUgd2hvIGhhdmUgYWNjb21wbGlzaGVkIHRoaXMhCisKK05PVEU6IEluIExpbnV4IDIuNCB0aGUgU291bmQgQmxhc3RlciBkcml2ZXIgKGFuZCBvbmx5IHRoaXMgb25lIHlldCkKK3N1cHBvcnRzIG11bHRpcGxlIGNhcmRzIHdpdGggb25lIG1vZHVsZSBieSBkZWZhdWx0LgorUmVhZCB0aGUgZmlsZSAnU291bmRibGFzdGVyJyBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgZGV0YWlscy4KKworCitTb3VuZCBQcm9ibGVtczoKKz09PT09PT09PT09PT09PQorCitGaXJzdCBSVEZNIChpbmNsdWRpbmcgdGhlIHRyb3VibGVzaG9vdGluZyBzZWN0aW9uIAoraW4gdGhlIFNvdW5kLUhPV1RPKS4gCisKKzEpICBJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyBsb2FkaW5nIHRoZSBtb2R1bGVzIChmb3IKKyAgICBleGFtcGxlLCBpZiB5b3UgZ2V0IGRldmljZSBjb25mbGljdCBlcnJvcnMpIHRyeSB0aGUKKyAgICBmb2xsb3dpbmc6CisKKyAgQSkgIElmIHlvdSBoYXZlIFdpbjk1IG9yIE5UIG9uIHRoZSBzYW1lIGNvbXB1dGVyLCAgCisgICAgICB3cml0ZSBkb3duIHdoYXQgYWRkcmVzc2VzLCBJUlEsIGFuZCBETUEgY2hhbm5lbHMKKyAgICAgIHRob3NlIHdlcmUgdXNpbmcgZm9yIHRoZSBzYW1lIGhhcmR3YXJlLiAgWW91IHByb2JhYmx5IAorICAgICAgY2FuIHVzZSB0aGVzZSBhZGRyZXNzZXMsIElSUXMsIGFuZCBETUEgY2hhbm5lbHMuCisgICAgICBZb3Ugc2hvdWxkIHJlYWxseSBkbyB0aGlzIEJFRk9SRSBhdHRlbXB0aW5nIHRvIGdldAorICAgICAgc291bmQgd29ya2luZyEKKyAgCisgIEIpICBDaGVjayAoY2F0KSAvcHJvYy9pbnRlcnJ1cHRzLCAvcHJvYy9pb3BvcnRzLAorICAgICAgYW5kIC9wcm9jL2RtYS4gIEFyZSB5b3UgdHJ5aW5nIHRvIHVzZSBhbiBhZGRyZXNzLAorICAgICAgSVJRIG9yIERNQSBwb3J0IHRoYXQgYW5vdGhlciBkZXZpY2UgaXMgdXNpbmc/CisgIAorICBDKSAgQ2hlY2sgKGNhdCkgL3Byb2MvaXNhcG5wCisgIAorICBEKSAgSW5zcGVjdCB5b3VyIC92YXIvbG9nL21lc3NhZ2VzIGZpbGUuICBPZnRlbiB0aGF0IHdpbGwgCisgICAgICBpbmRpY2F0ZSB3aGF0IElSUSBvciBJTyBwb3J0IGNvdWxkIG5vdCBiZSBvYnRhaW5lZC4KKyAgCisgIEUpICBUcnkgYW5vdGhlciBwb3J0IG9yIElSUS4gIE5vdGUgdGhpcyBtYXkgaW52b2x2ZSAKKyAgICAgIHVzaW5nIHRoZSBQblAgdG9vbHMgdG8gbW92ZSB0aGUgc291bmQgY2FyZCB0byAKKyAgICAgIGFub3RoZXIgbG9jYXRpb24uICBTb21ldGltZXMgdGhpcyBpcyB0aGUgb25seSB3YXkgCisgICAgICBhbmQgaXQgaXMgbW9yZSBvciBsZXNzIHRyaWFsIGFuZCBlcnJvci4KKworMikgIElmIHlvdSBnZXQgbW90b3ItYm9hdGluZyAodGhlIHNhbWUgc291bmQgb3IgcGFydCBvZiBhIAorICAgIHNvdW5kIGNsaXAgcmVwZWF0ZWQpLCB5b3UgcHJvYmFibHkgaGF2ZSBlaXRoZXIgYW4gSVJRCisgICAgb3IgRE1BIGNvbmZsaWN0LiAgTW92ZSB0aGUgY2FyZCB0byBhbm90aGVyIElSUSBvciBETUEKKyAgICBwb3J0LiAgVGhpcyBoYXMgaGFwcGVuZWQgdG8gbWUgd2hlbiBwbGF5aW5nIGxvbmcgZmlsZXMgCisgICAgd2hlbiBJIGhhZCBhbiBJUlEgY29uZmxpY3QuCisKKzMuICBJZiB5b3UgZ2V0IGRyb3BvdXRzIG9yIHBhdXNlcyB3aGVuIHBsYXlpbmcgaGlnaCBzYW1wbGUKKyAgICByYXRlIGZpbGVzIHN1Y2ggYXMgdXNpbmcgbXBnMTIzIG9yIHgxMWFtcC94bW1zLCB5b3UgbWF5IAorICAgIGhhdmUgdG9vIHNsb3cgb2YgYSBDUFUgYW5kIG1heSBoYXZlIHRvIHVzZSB0aGUgb3B0aW9ucyB0byAKKyAgICBwbGF5IHRoZSBmaWxlcyBhdCAxLzIgc3BlZWQuICBGb3IgZXhhbXBsZSwgeW91IG1heSB1c2UKKyAgICB0aGUgLTIgb3IgLTQgb3B0aW9uIG9uIG1wZzEyMy4gIFlvdSBtYXkgYWxzbyBnZXQgdGhpcworICAgIHdoZW4gdHJ5aW5nIHRvIHBsYXkgbXBlZyBmaWxlcyBzdG9yZWQgb24gYSBDRC1ST00KKyAgICAobXkgVG9zaGliYSBUODAwMCBQSUkvMzY2IHNvbWV0aW1lcyBoYXMgdGhpcyBwcm9ibGVtKS4KKworNC4gIElmIHlvdSBnZXQgImNhbm5vdCBhY2Nlc3MgZGV2aWNlIiBlcnJvcnMsIHlvdXIgL2Rldi9kc3AKKyAgICBmaWxlcywgZXRjLiBtYXkgYmUgc2V0IHRvIG93bmVyIHJvb3QsIG1vZGUgNjAwLiAgWW91IAorICAgIG1heSBoYXZlIHRvIHVzZSB0aGUgY29tbWFuZDoKKyAgICAgIGNobW9kIDY2NiAvZGV2L2RzcCAvZGV2L21peGVyIC9kZXYvYXVkaW8KKworNS4gIElmIHlvdSBnZXQgImRldmljZSBidXN5IiBlcnJvcnMsIGFub3RoZXIgcHJvZ3JhbSBoYXMgdGhlCisgICAgc291bmQgZGV2aWNlIG9wZW4uICBGb3IgZXhhbXBsZSwgaWYgdXNpbmcgdGhlIEVubGlnaHRlbm1lbnQKKyAgICBzb3VuZCBkYWVtb24gImVzZCIsIHRoZSAiZXNkIiBwcm9ncmFtIGhhcyB0aGUgc291bmQgZGV2aWNlLgorICAgIElmIHVzaW5nICJlc2QiLCBwbGVhc2UgUlRGTSB0aGUgZG9jcyBvbiBFU0QuICBGb3IgZXhhbXBsZSwKKyAgICBlc2Rkc3AgPHByb2dyYW0+IG1heSBiZSB1c2VkIHRvIHBsYXkgZmlsZXMgdmlhIGEgbm9uLWVzZAorICAgIGF3YXJlIHByb2dyYW0uCisKKzYpICBBc2sgZm9yIGhlbHAgb24gdGhlIHNvdW5kIGxpc3Qgb3Igc2VuZCBFLU1BSUwgdG8gdGhlCisgICAgc291bmQgZHJpdmVyIGF1dGhvci9tYWludGFpbmVyLgorCis3KSAgVHVybiBvbiBkZWJ1ZyBpbiBkcml2ZXJzL3NvdW5kL3NvdW5kX2NvbmZpZy5oIChERUIsIEREQiwgTURCKS4KKworOCkgIElmIHRoZSBzeXN0ZW0gcmVwb3J0cyBpbnN1ZmZpY2llbnQgRE1BIG1lbW9yeSB0aGVuIHlvdSBtYXkgd2FudCB0bworICAgIGxvYWQgc291bmQgd2l0aCB0aGUgImRtYWJ1ZnM9MSIgb3B0aW9uLiBPciBpbiAvZXRjL2NvbmYubW9kdWxlcyBhZGQKKwkKKwlwcmVpbnN0YWxsIHNvdW5kIGRtYWJ1ZnM9MQorCisgICAgVGhpcyBtYWtlcyB0aGUgc291bmQgc3lzdGVtIGFsbG9jYXRlIGl0cyBidWZmZXJzIGFuZCBoYW5nIG9udG8gdGhlbS4KKworICAgIFlvdSBtYXkgYWxzbyBzZXQgcGVyc2lzdGVudCBETUEgd2hlbiBidWlsZGluZyBhIDIuNC54IGtlcm5lbC4KKworCitDb25maWd1cmluZyBTb3VuZDoKKz09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIG9mIGNvbmZpZ3VyaW5nIHlvdXIgc291bmQ6CisKKzEpICBPbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAod2hlbiB1c2luZyB0aGUgc291bmQgZHJpdmVyKHMpCisgICAgY29tcGlsZWQgaW4gdGhlIGtlcm5lbCkuIENoZWNrIHRoZSBkcml2ZXIgc291cmNlIGFuZAorICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKKzIpICBPbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gdXNpbmcgaW5zbW9kIG9yIGluIGEgYmFzaCBzY3JpcHQKKyAgICB1c2luZyBjb21tYW5kIGxpbmUgY2FsbHMgdG8gbG9hZCBzb3VuZC4KKworMykgIEluIC9ldGMvbW9kcHJvYmUuY29uZiB3aGVuIHVzaW5nIG1vZHByb2JlLgorCis0KSAgVmlhIFJlZCBIYXQncyBHUEwnZCAvdXNyL3NiaW4vc25kY29uZmlnIHByb2dyYW0gKHRleHQgYmFzZWQpLgorCis1KSAgVmlhIHRoZSBPU1Mgc291bmRjb25mIHByb2dyYW0gKHdpdGggdGhlIGNvbW1lcmNpYWwgdmVyc2lvbgorICAgIG9mIHRoZSBPU1MgZHJpdmVyLgorCis2KSAgQnkganVzdCBsb2FkaW5nIHRoZSBtb2R1bGUgYW5kIGxldCBpc2FwbnAgZG8gZXZlcnl0aGluZyByZWxldmFudAorICAgIGZvciB5b3UuIFRoaXMgd29ya3Mgb25seSB3aXRoIGEgZmV3IGRyaXZlcnMgeWV0IGFuZCAtIG9mIGNvdXJzZSAtCisgICAgb25seSB3aXRoIGlzYXBucCBoYXJkd2FyZS4KKworQW5kIEkgYW0gc3VyZSwgc2V2ZXJhbCBvdGhlciB3YXlzLiAgCisKK0FueW9uZSB3YW50IHRvIHdyaXRlIGEgbGludXhjb25mIG1vZHVsZSBmb3IgY29uZmlndXJpbmcgc291bmQ/CisKKworTW9kdWxlIExvYWRpbmc6Cis9PT09PT09PT09PT09PT0KKworV2hlbiBhIHNvdW5kIGNhcmQgaXMgZmlyc3QgcmVmZXJlbmNlZCBhbmQgc291bmQgaXMgbW9kdWxhciwgdGhlIHNvdW5kIHN5c3RlbQord2lsbCBhc2sgZm9yIHRoZSBzb3VuZCBkZXZpY2VzIHRvIGJlIGxvYWRlZC4gSW5pdGlhbGx5IGl0IHJlcXVlc3RzIHRoYXQKK3RoZSBkcml2ZXIgZm9yIHRoZSBzb3VuZCBzeXN0ZW0gaXMgbG9hZGVkLiBJdCB0aGVuIHdpbGwgYXNrIGZvciAKK3NvdW5kLXNsb3QtMCwgd2hlcmUgMCBpcyB0aGUgZmlyc3Qgc291bmQgY2FyZC4gKHNvdW5kLXNsb3QtMSB0aGUgc2Vjb25kIGFuZAorc28gb24pLiBUaHVzIHlvdSBjYW4gZG8KKworYWxpYXMgc291bmQtc2xvdC0wIHNiCisKK1RvIGxvYWQgYSBzb3VuZGJsYXN0ZXIgYXQgdGhpcyBwb2ludC4gSWYgdGhlIHNsb3QgbG9hZGluZyBkb2VzIG5vdCBwcm92aWRlCit0aGUgZGVzaXJlZCBkZXZpY2UgLSBmb3IgZXhhbXBsZSBhIHNvdW5kYmxhc3RlciBkb2VzIG5vdCBkaXJlY3RseSBwcm92aWRlCithIG1pZGkgc3ludGggaW4gYWxsIGNhc2VzIHRoZW4gaXQgd2lsbCByZXF1ZXN0ICJzb3VuZC1zZXJ2aWNlLTAtbiIgd2hlcmUgbgoraXMKKworICAwCU1peGVyCisKKyAgMiAgCU1JREkKKworICAzLCA0CURTUCBhdWRpbworCisKK0ZvciBleGFtcGxlLCBJIHVzZSB0aGUgZm9sbG93aW5nIHRvIGxvYWQgbXkgU291bmRibGFzdGVyIFBDSSAxMjgKKyhFUyAxMzcxKSBjYXJkIGZpcnN0LCBmb2xsb3dlZCBieSBteSBTb3VuZEJsYXN0ZXIgVmlicmEgMTYgY2FyZCwKK3RoZW4gYnkgbXkgVFYgY2FyZDoKKworIyBMb2FkIHRoZSBTb3VuZGJsYXN0ZXIgUENJIDEyOCBhcyAvZGV2L2RzcCwgL2Rldi9kc3AxLCAvZGV2L21peGVyCithbGlhcyBzb3VuZC1zbG90LTAgZXMxMzcxCisKKyMgTG9hZCB0aGUgU291bmRibGFzdGVyIFZpYnJhIDE2IGFzIC9kZXYvZHNwMiwgL2Rldi9taXhlcjEKK2FsaWFzIHNvdW5kLXNsb3QtMSBzYgorb3B0aW9ucyBzYiBpbz0weDI0MCBpcnE9NSBkbWE9MSBkbWExNj01IG1wdV9pbz0weDMzMAorCisjIExvYWQgdGhlIEJUVFYgKFRWIGNhcmQpIGFzIC9kZXYvbWl4ZXIyCithbGlhcyBzb3VuZC1zbG90LTIgYnR0dgorYWxpYXMgc291bmQtc2VydmljZS0yLTAgdHZtaXhlcgorCitwcmUtaW5zdGFsbCBidHR2ICBtb2Rwcm9iZSB0dW5lciA7IG1vZHByb2JlIHR2bWl4ZXIKK3ByZS1pbnN0YWxsIHR2bWl4ZXIgbW9kcHJvYmUgbXNwMzQwMDsgbW9kcHJvYmUgdHZhdWRpbyAKK29wdGlvbnMgdHVuZXIgZGVidWc9MCB0eXBlPTggCitvcHRpb25zIGJ0dHYgIGNhcmQ9MCByYWRpbz0wIHBsbD0wCisKKworRm9yIE1vcmUgSW5mb3JtYXRpb24gKFJURk0pOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMSkgIEluZm9ybWF0aW9uIG9uIGtlcm5lbCBtb2R1bGVzOiBtYW51YWwgcGFnZXMgZm9yIGluc21vZCBhbmQgbW9kcHJvYmUuCisKKzIpICBJbmZvcm1hdGlvbiBvbiBQblAsIFJURk0gbWFudWFsIHBhZ2VzIGZvciBpc2FwbnAuCisKKzMpICBTb3VuZC1IT1dUTyBhbmQgU291bmQtUGxheWluZy1IT1dUTy4KKworNCkgIE9TUydzIFdXVyBzaXRlIGF0IGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS4KKworNSkgIEFsbCB0aGUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9zb3VuZC4KKworNikgIFRoZSBjb21tZW50cyBhbmQgY29kZSBpbiBsaW51eC9kcml2ZXJzL3NvdW5kLgorCis3KSAgVGhlIHNuZGNvbmZpZyBhbmQgcmhzb3VuZCBkb2N1bWVudGF0aW9uIGZyb20gUmVkIEhhdC4KKworOCkgIFRoZSBMaW51eC1zb3VuZCBtYWlsaW5nIGxpc3Q6ICBzb3VuZC1saXN0QHJlZGhhdC5jb20uCisKKzkpICBFbmxpZ2h0ZW5tZW50IGRvY3VtZW50YXRpb24gKGZvciBpbmZvIG9uIGVzZCkKKyAgICBodHRwOi8vd3d3LnR1eC5vcmcvfnJpY2R1ZGUvRXNvdW5ELmh0bWwuCisKKzEwKSBBTFNBIGhvbWUgcGFnZTogIGh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy8KKworCitDb250YWN0IEluZm9ybWF0aW9uOgorPT09PT09PT09PT09PT09PT09PT0KK1dhZGUgSGFtcHRvbjogICh3aGFtcHRvbkBzdGFmZm5ldC5jb20pCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01BRDE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTUFEMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1ZGJkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01BRDE2CkBAIC0wLDAgKzEsNTYgQEAKKyhUaGlzIHJlY2lwZSBoYXMgYmVlbiBlZGl0ZWQgdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIHN5bWJvbHMsCisgYW5kIGNoYW5nZSBvdmVyIHRvIG1vZHByb2JlLmNvbmYgZm9yIDIuNikKKworRnJvbTogU2hhdyBDYXJydXRoZXJzIDxzaGF3QHNoYXdjLmRlbW9uLmNvLnVrPgorCitJIGhhdmUgYmVlbiB1c2luZyBtYWQxNiBzb3VuZCBmb3Igc29tZSB0aW1lIG5vdyB3aXRoIG5vIHByb2JsZW1zLCBjdXJyZW50CitrZXJuZWwgMi4xLjg5CisKK2xzbW9kIHNob3dzOgorCittYWQxNiAgICAgICAgICAgICAgICAgICA1MTc2ICAgMCAKK3NiICAgICAgICAgICAgICAgICAgICAgMjIwNDQgICAwICBbbWFkMTZdCit1YXJ0NDAxICAgICAgICAgICAgICAgICA1NTc2ICAgMCAgW21hZDE2IHNiXQorYWQxODQ4ICAgICAgICAgICAgICAgICAxNDE3NiAgIDEgIFttYWQxNl0KK3NvdW5kICAgICAgICAgICAgICAgICAgNjE5MjggICAwICBbbWFkMTYgc2IgdWFydDQwMSBhZDE4NDhdCisKKy5jb25maWcgaGFzOgorCitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX0FETElCPW0KK0NPTkZJR19TT1VORF9NQUQxNj1tCitDT05GSUdfU09VTkRfWU0zODEyPW0KKworbW9kcHJvYmUuY29uZiBoYXM6CisKK2FsaWFzIGNoYXItbWFqb3ItMTQtKiBtYWQxNgorb3B0aW9ucyBzYiBtYWQxNj0xCitvcHRpb25zIG1hZDE2IGlvPTB4NTMwIGlycT03IGRtYT0wIGRtYTE2PTEgICYmIC91c3IvbG9jYWwvYmluL2F1bWl4IC13IDE1IC1wIDIwIC1tIDAgLTEgMCAtMiAwIC0zIDAgLWkgMAorCisKK1RvIGdldCB0aGUgYnVpbHQgaW4gbWl4ZXIgdG8gd29yayB0aGlzIG5lZWRzIHRvIGJlOgorCitvcHRpb25zIGFkbGliX2NhcmQgaW89MHgzODggICAgICMgRk0gc3ludGhlc2l6ZXIKK29wdGlvbnMgc2IgbWFkMTY9MQorb3B0aW9ucyBtYWQxNiBpbz0weDUzMCBpcnE9NyBkbWE9MCBkbWExNj0xIG1wdV9pbz04MTYgbXB1X2lycT01ICYmIC91c3IvbG9jYWwvYmluL2F1bWl4IC13IDE1IC1wIDIwIC1tIDAgLTEgMCAtMiAwIC0zIDAgLWkgMAorCitUaGUgYWRkaXRpb24gb2YgdGhlICJtcHVfaW89ODE2IG1wdV9pcnE9NSIgdG8gdGhlIG1hZDE2IG9wdGlvbnMgbGluZSBpcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBtYWQxNiBtb2R1bGUgaW4gYWRkaXRpb24gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCitvcHRpb246CQkJbWVhbmluZzoJCQlkZWZhdWx0Ogoram95c3RpY2s9MCwxIAkJZGlzYWJsZWQsIGVuYWJsZWQgCQlkaXNhYmxlZAorY2R0eXBlPTB4MDAsMHgwMiwweDA0LAlkaXNhYmxlZCwgU29ueSBDRFUzMUEsCQlkaXNhYmxlZAorICAgICAgIDB4MDYsMHgwOCwweDBhICAgTWl0c3VtaSwgUGFuYXNvbmljLAorCQkJU2Vjb25kYXJ5IElERSwgUHJpbWFyeSBJREUgCitjZHBvcnQ9MHgzNDAsMHgzMjAsCQkJCQkweDM0MAorICAgICAgIDB4MzMwLDB4MzYwCitjZGlycT0wLDMsNSw3LDksMTAsMTEgCWRpc2FibGVkLCBJUlEzLCAuLi4gCQlkaXNhYmxlZAorY2RkbWE9MCw1LDYsNyAJCWRpc2FibGVkLCBETUE1LCAuLi4gCQlETUE1IGZvciBNaXRzdW1pIG9yIElERQorY2RkbWE9MCwxLDIsMyAJCWRpc2FibGVkLCBETUExLCAuLi4gCQlETUEzIGZvciBTb255IG9yIFBhbmFzb25pYworb3BsND0wLDEgCQlPUEwzLCBPUEw0IAkJCU9QTDMJCisKK2ZvciBtb3JlIGRldGFpbHMgc2VlIGxpbnV4L2RyaXZlcnMvc291bmQvbWFkMTYuYworCitSdWkgU291c2EKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8gYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NYWVzdHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODBlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NYWVzdHJvCkBAIC0wLDAgKzEsMTIzIEBACisJQW4gT1NTL0xpdGUgRHJpdmVyIGZvciB0aGUgRVNTIE1hZXN0cm8gZmFtaWx5IG9mIHNvdW5kIGNhcmRzCisKKwkJCVphY2ggQnJvd24sIERlY2VtYmVyIDE5OTkKKworRHJpdmVyIFN0YXR1cyBhbmQgQXZhaWxhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBkcml2ZXIgd2lsbCBob3BlZnVsbHkgYWx3YXlzIGJlIGF2YWlsYWJsZSBhdAorCWh0dHA6Ly93d3cuemFiYm8ubmV0L21hZXN0cm8vCisKK0kgd2lsbCB0cnkgYW5kIG1haW50YWluIHRoZSBtb3N0IHJlY2VudCBzdGFibGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyCitpbiBib3RoIHRoZSBzdGFibGUgYW5kIGRldmVsb3BtZW50IGtlcm5lbCBsaW5lcy4KKworRVNTIE1hZXN0cm8gQ2hpcCBGYW1pbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSAzIG1haW4gdmFyaWFudHMgb2YgdGhlIEVTUyBNYWVzdHJvIFBDSSBzb3VuZCBjaGlwLiAgVGhlIGZpcnN0CitpcyB0aGUgTWFlc3RybyAxLiAgSXQgd2FzIG9yaWdpbmFsbHkgcHJvZHVjZWQgYnkgUGxhdGZvcm0gVGVjaCBhcyB0aGUKKydBR09HTycuICBJdCBjYW4gYmUgcmVjb2duaXplZCBieSBQbGF0Zm9ybSBUZWNoJ3MgUENJIElEIDB4MTI4NSB3aXRoCisweDAxMDAgYXMgdGhlIGRldmljZSBJRC4gIEl0IHdhcyBwdXQgb24gc29tZSBzb3VuZCBib2FyZHMgYW5kIGEgZmV3IGxhcHRvcHMuICAKK0VTUyBib3VnaHQgdGhlIGRlc2lnbiBhbmQgY2xlYW5lZCBpdCB1cCBhcyB0aGUgTWFlc3RybyAyLiAgVGhpcyBzdGFydHMKK3RoZWlyIG1hcmtpbmcgd2l0aCB0aGUgRVNTIHZlbmRvciBJRCAweDEyNUQgYW5kIHRoZSAneWVhcicgZGV2aWNlIElEcy4KK1RoZSBNYWVzdHJvIDIgY2xhaW1zIDB4MTk2OCB3aGlsZSB0aGUgTWFlc3RybyAyZSBoYXMgMHgxOTc4LgorCitUaGUgdmFyaW91cyBmYW1pbGllcyBvZiBNYWVzdHJvIGFyZSBtb3N0bHkgaWRlbnRpY2FsIGFzIGZhciBhcyB0aGlzIAorZHJpdmVyIGlzIGNvbmNlcm5lZC4gIEl0IGRvZXNuJ3QgdG91Y2ggdGhlIERTUCBwYXJ0cyB0aGF0IGRpZmZlciAodGhvdWdoCitpdCBjb3VsZCBmb3IgRk0gc3ludGhlc2lzKS4KKworRHJpdmVyIE9TUyBCZWhhdmlvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBPU1MgZHJpdmVyIGV4cG9ydHMgL2Rldi9taXhlciBhbmQgL2Rldi9kc3AgdG8gYXBwbGljYXRpb25zLCB3aGljaAorbW9zdGx5IGFkaGVyZSB0byB0aGUgT1NTIHNwZWMuICAgVGhpcyBkcml2ZXIgZG9lc24ndCByZWdpc3RlciBpdHNlbGYKK3dpdGggL2Rldi9zbmRzdGF0LCBzbyBkb24ndCBleHBlY3QgaW5mb3JtYXRpb24gdG8gYXBwZWFyIHRoZXJlLgorCitUaGUgL2Rldi9kc3AgZGV2aWNlIGV4cG9ydGVkIGJlaGF2ZXMgYWxtb3N0IGFzIGV4cGVjdGVkLiAgUGxheWJhY2sgaXMKK3N1cHBvcnRlZCBpbiBhbGwgdGhlIHZhcmlvdXMgbG92ZWx5IGZvcm1hdHMuICA4LzE2Yml0IHN0ZXJlby9tb25vIGZyb20KKzhraHogdG8gNDhraHosIGFuZCBtbWFwKClpbmcgZm9yIHBsYXliYWNrIGJlaGF2ZXMuICBDYXB0dXJlL3JlY29yZGluZworaXMgbGltaXRlZCBkdWUgdG8gb2RkaXRpZXMgd2l0aCB0aGUgTWFlc3RybyBoYXJkd2FyZS4gIE9uZSBjYW4gb25seQorcmVjb3JkIGluIDE2Yml0IHN0ZXJlby4gIEZvciByZWNvcmRpbmcgdGhlIG1hZXN0cm8gdXNlcyBub24gaW50ZXJsZWF2ZWQKK3N0ZXJlbyBidWZmZXJzIHNvIHRoYXQgbW1hcCgpaW5nIHRoZSBpbmNvbWluZyBkYXRhIGRvZXMgbm90IHJlc3VsdCBpbgorYSByaW5nIGJ1ZmZlciBvZiBMUkxSIGRhdGEuICBtbWFwKClpbmcgb2YgdGhlIHJlYWQgYnVmZmVycyBpcyB0aGVyZWZvcmUKK2Rpc2FsbG93ZWQgdW50aWwgdGhpcyBjYW4gYmUgY2xlYW5lZCB1cC4KKworL2Rldi9taXhlciBpcyBhbiBpbnRlcmZhY2UgdG8gdGhlIEFDJzk3IGNvZGVjIG9uIHRoZSBNYWVzdHJvLiAgSXQgaXMKK3dvcnRoIG5vdGluZyB0aGF0IHRoZXJlIGFyZSBhIHZhcmlldHkgb2YgQUMnOTdzIHRoYXQgY2FuIGJlIHdpcmVkIHRvCit0aGUgTWFlc3Ryby4gIFdoaWNoIGlzIHVzZWQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGhhcmR3YXJlIGltcGxlbWVudG9yLgorVGhpcyBzaG91bGQgb25seSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyIGJ5IHRoZSBwcmVzZW5jZSwgb3IgbGFjaywgb2YKKydCYXNzJyBhbmQgJ1RyZWJsZScgc2xpZGVycyBpbiB0aGUgbWl4ZXIuICBOb3QgYWxsIEFDJzk3cyBoYXZlIHRoZW0uCisKK1RoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IE1JREkgb3IgRk0gcGxheWJhY2sgYXQgdGhlIG1vbWVudC4gIFR5cGljYWxseQordGhlIE1hZXN0cm8gaXMgd2lyZWQgdG8gYW4gTVBVIE1JREkgY2hpcCwgYnV0IHNvbWUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zCitkb24ndC4gIFdlIG5lZWQgdG8gYXNzZW1ibGUgYSB3aGl0ZSBsaXN0IG9mIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyB0aGF0CitoYXZlIE1JREkgd2lyZWQgcHJvcGVybHkgYmVmb3JlIHdlIGNhbiBjbGFpbSB0byBzdXBwb3J0IGl0IHNhZmVseS4KKworQ29tcGlsaW5nIGFuZCBJbnN0YWxsaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgZHJpdmVycyBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLCBjb21waWxpbmcgYW5kIGluc3RhbGxpbmcKK2lzIHRoZSBzYW1lIGFzIG1vc3QgT1NTL0xpdGUgbW9kdWxhciBzb3VuZCBkcml2ZXJzLiAgQ29tcGlsYXRpb24KK29mIHRoZSBkcml2ZXIgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZSBDT05GSUdfU09VTkRfTUFFU1RSTyB2YXJpYWJsZQoraW4gdGhlIGNvbmZpZyBzeXN0ZW0uICAKKworSXQgbWF5IGJlIG1vZHVsYXIgb3Igc3RhdGljYWxseSBsaW5rZWQuICBJZiBpdCBpcyBtb2R1bGFyIGl0IHNob3VsZCBiZQoraW5zdGFsbGVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZXMgZm9yIHRoZSBrZXJuZWwgb24gdGhlIHN5c3RlbS4KK1R5cGljYWxseSB0aGlzIHdpbGwgYmUgaW4gL2xpYi9tb2R1bGVzLyBzb21ld2hlcmUuICAnYWxpYXMgc291bmQgbWFlc3RybycKK3Nob3VsZCBhbHNvIGJlIGFkZGVkIHRvIHlvdXIgbW9kdWxlIGNvbmZpZ3MgKHR5cGljYWxseSAvZXRjL2NvbmYubW9kdWxlcykKK2lmIHlvdSdyZSB1c2luZyBtb2R1bGFyIE9TUy9MaXRlIHNvdW5kIGFuZCB3YW50IHRvIGRlZmF1bHQgdG8gdXNpbmcgYQorbWFlc3RybyBjaGlwLgorCitBcyB0aGlzIGlzIGEgUENJIGRldmljZSwgdGhlIG1vZHVsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGluZm9ybWVkIG9mCithbnkgSU8gb3IgSVJRIHJlc291cmNlcyBpdCBzaG91bGQgdXNlLCBpdCBkZXZpbmVzIHRoZXNlIGZyb20gdGhlCitzeXN0ZW0uICBTb21ldGltZXMsIG9uIHN1Y2t5IFBDcywgdGhlIEJJT1MgZmFpbHMgdG8gYWxsb2NhdGVkIHJlc291cmNlcworZm9yIHRoZSBtYWVzdHJvLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhIG1lc3NhZ2UgbGlrZToKKwltYWVzdHJvOiBQQ0kgc3Vic3lzdGVtIHJlcG9ydHMgSVJRIDAsIHRoaXMgbWlnaHQgbm90IGJlIGNvcnJlY3QuCitmcm9tIHRoZSBrZXJuZWwuICBTaG91bGQgdGhpcyBoYXBwZW4gdGhlIHNvdW5kIGNoaXAgbW9zdCBsaWtlbHkgd2lsbAorbm90IG9wZXJhdGUgY29ycmVjdGx5LiAgVG8gc29sdmUgdGhpcyBvbmUgaGFzIHRvIGRpZyB0aHJvdWdoIHRoZWlyIEJJT1MKKyh0eXBpY2FsbHkgZW50ZXJlZCBieSBoaXR0aW5nIGEgaG90IGtleSBhdCBib290IHRpbWUpIGFuZCBmaWd1cmUgb3V0Cit3aGF0IG1hZ2ljIG5lZWRzIHRvIGhhcHBlbiBzbyB0aGF0IHRoZSBCSU9TIHdpbGwgcmV3YXJkIHRoZSBtYWVzdHJvIHdpdGgKK2FuIElSUS4gIFRoaXMgb3BlcmF0aW9uIGlzIGluY3JlZGlibHkgc3lzdGVtIHNwZWNpZmljLCBzbyB5b3UncmUgb24geW91cgorb3duLiAgU29tZXRpbWVzIHRoZSBtYWdpYyBsaWVzIGluICdQTlAgQ2FwYWJsZSBPcGVyYXRpbmcgU3lzdGVtJyBzZXR0aW5ncy4KKworVGhlcmUgYXJlIHZlcnkgZmV3IG9wdGlvbnMgdG8gdGhlIGRyaXZlci4gIE9uZSBpcyAnZGVidWcnIHdoaWNoIHdpbGwgCit0ZWxsIHRoZSBkcml2ZXIgdG8gcHJpbnQgbWluaW1hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYXMgaXQgcnVucy4gIFRoaXMKK2NhbiBiZSBjb2xsZWN0ZWQgd2l0aCAnZG1lc2cnIG9yIHRocm91Z2ggdGhlIGtsb2dkIGRhZW1vbi4KKworVGhlIG90aGVyLCBtb3JlIGludGVyZXN0aW5nIG9wdGlvbiwgaXMgJ2RzcHNfb3JkZXInLiAgVHlwaWNhbGx5IGF0CitpbnN0YWxsIHRpbWUgdGhlIGRyaXZlciB3aWxsIG9ubHkgcmVnaXN0ZXIgb25lIGF2YWlsYWJsZSAvZGV2L2RzcCBkZXZpY2UKK2ZvciBpdHMgdXNlLiAgVGhlICdkc3BzX29yZGVyJyBtb2R1bGUgcGFyYW1ldGVyIGFsbG93cyBmb3IgbW9yZSBkZXZpY2VzCit0byBiZSBhbGxvY2F0ZWQsIGFzIGEgcG93ZXIgb2YgdHdvLiAgVXAgdG8gNCBkZXZpY2VzIGNhbiBiZSByZWdpc3RlcmVkCisoIGRzcHNfb3JkZXI9MiApLiAgVGhlc2UgZGV2aWNlcyBhY3QgYXMgZnVsbHkgZGlzdGluY3QgdW5pdHMgYW5kIHVzZQorc2VwYXJhdGUgY2hhbm5lbHMgaW4gdGhlIG1hZXN0cm8uCisKK1Bvd2VyIE1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0KKworQXMgb2YgdmVyc2lvbiAwLjE0LCB0aGlzIGRyaXZlciBoYXMgYSBtaW5pbWFsIHVuZGVyc3RhbmRpbmcgb2YgUENJCitQb3dlciBNYW5hZ2VtZW50LiAgSWYgaXQgZmluZHMgYSB2YWxpZCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdHkKK29uIHRoZSBQQ0kgZGV2aWNlIGl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIHBvd2VyIG1hbmFnZW1lbnQKK2Z1bmN0aW9ucyBvZiB0aGUgbWFlc3Ryby4gIEl0IHdpbGwgb25seSBkbyB0aGlzIG9uIE1hZXN0cm8gMkVzIGFuZAorb25seSBvbiBtYWNoaW5lcyB0aGF0IGFyZSBrbm93biB0byBmdW5jdGlvbiB3ZWxsLiAgWW91IGNhbgorZm9yY2UgdGhlIHVzZSBvZiBwb3dlciBtYW5hZ2VtZW50IGJ5IHNldHRpbmcgdGhlICd1c2VfcG0nIG1vZHVsZQorb3B0aW9uIHRvIDEsIG9yIGNhbiBkaXNhYmxlIGl0IGVudGlyZWx5IGJ5IHNldHRpbmcgaXQgdG8gMC4KKworV2hlbiB1c2luZyBwb3dlciBtYW5hZ2VtZW50LCB0aGUgZHJpdmVyIGRvZXMgYSBmZXcgdGhpbmdzCitkaWZmZXJlbnRseS4gIEl0IHdpbGwga2VlcCB0aGUgY2hpcCBpbiBhIGxvd2VyIHBvd2VyIG1vZGUKK3doZW4gdGhlIG1vZHVsZSBpcyBpbnNlcnRlZCBidXQgL2Rldi9kc3AgaXMgbm90IG9wZW4uICBUaGlzCithbGxvd3MgdGhlIG1peGVyIHRvIGZ1bmN0aW9uIGJ1dCB0dXJucyBvZmYgdGhlIGNsb2Nrcworb24gb3RoZXIgcGFydHMgb2YgdGhlIGNoaXAuICBXaGVuIC9kZXYvZHNwIGlzIG9wZW5lZCB0aGUgY2hpcAoraXMgYnJvdWdodCBpbnRvIGZ1bGwgcG93ZXIgbW9kZSwgYW5kIGJyb3VnaHQgYmFjayBkb3duCit3aGVuIGl0IGlzIGNsb3NlZC4gIEl0IGFsc28gcG93ZXJzIGRvd24gdGhlIGNoaXAgZW50aXJlbHkKK3doZW4gdGhlIG1vZHVsZSBpcyByZW1vdmVkIG9yIHRoZSBtYWNoaW5lIGlzIHNodXRkb3duLiAgVGhpcworY2FuIGhhdmUgbm9ub2J2aW91cyBjb25zZXF1ZW5jZXMuICBDRCBhdWRpbyBtYXkgbm90IHdvcmsKK2FmdGVyIGEgcG93ZXIgbWFuYWdpbmcgZHJpdmVyIGlzIHJlbW92ZWQuICBBbHNvLCBzb2Z0d2FyZSB0aGF0Citkb2Vzbid0IHVuZGVyc3RhbmQgcG93ZXIgbWFuYWdlbWVudCBtYXkgbm90IGJlIGFibGUgdG8gdGFsawordG8gdGhlIHBvd2VyZWQgZG93biBjaGlwIHVudGlsIHRoZSBtYWNoaW5lIGdvZXMgdGhyb3VnaCBhIGhhcmQKK3JlYm9vdCB0byBicmluZyBpdCBiYWNrLgorCisuLiBtb3JlIGRldGFpbHMgLi4KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitkcml2ZXJzL3NvdW5kL21hZXN0cm8uYyBjb250YWlucyBjb21tZW50cyB0aGF0IGhvcGVmdWxseSBleHBsYWluCit0aGUgbWFlc3RybyBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8zIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTWFlc3RybzMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExMzcxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL01hZXN0cm8zCkBAIC0wLDAgKzEsOTIgQEAKKwlBbiBPU1MvTGl0ZSBEcml2ZXIgZm9yIHRoZSBFU1MgTWFlc3RybzMgZmFtaWx5IG9mIHNvdW5kIGNoaXBzCisKKwkJCVphY2ggQnJvd24sIEphbnVhcnkgMjAwMQorCitEcml2ZXIgU3RhdHVzIGFuZCBBdmFpbGFiaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciB3aWxsIGhvcGVmdWxseSBhbHdheXMgYmUgYXZhaWxhYmxlIGF0CisJaHR0cDovL3d3dy56YWJiby5uZXQvbWFlc3RybzMvCisKK0kgd2lsbCB0cnkgYW5kIG1haW50YWluIHRoZSBtb3N0IHJlY2VudCBzdGFibGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyCitpbiBib3RoIHRoZSBzdGFibGUgYW5kIGRldmVsb3BtZW50IGtlcm5lbCBsaW5lcy4KKworSGlzdG9yaWNhbGx5IEkndmUgc3Vja2VkIHByZXR0eSBoYXJkIGF0IGFjdHVhbGx5IGRvaW5nIHRoYXQsIGhvd2V2ZXIuCisKK0VTUyBNYWVzdHJvMyBDaGlwIEZhbWlseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICdNYWVzdHJvMycgaXMgbXVjaCBsaWtlIHRoZSBNYWVzdHJvMiBjaGlwLiAgVGhlIG5vdGVkIGltcHJvdmVtZW50CitpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgc2lsaWNvbiBpbiB0aGUgJzInIHRoYXQgZGlkIFBDTSBtaXhpbmcuICBBbGwgdGhhdAord29yayBpcyBub3cgZG9uZSB0aHJvdWdoIGEgY3VzdG9tIERTUCBjYWxsZWQgdGhlIEFTU1AsIHRoZSBBc3luY2hyb251cworU3BlY2lmaWMgU2lnbmFsIFByb2Nlc3Nvci4KKworVGhlICdBbGxlZ3JvJyBpcyBhIGJhYnkgdmVyc2lvbiBvZiB0aGUgTWFlc3RybzMuICBJJ20gbm90IGVudGlyZWx5IGNsZWFyCitvbiB0aGUgZXh0ZW50IG9mIHRoZSBkaWZmZXJlbmNlcywgYnV0IHRoZSBkcml2ZXIgc3VwcG9ydHMgdGhlbSBib3RoIDopCisKK1RoZSAnQWxsZWdybycgc2hvd3MgdXAgYXMgUENJIElEIDB4MTk4OCBhbmQgdGhlIE1hZXN0cm8zIGFzIDB4MTk5OCwKK2JvdGggdW5kZXIgRVNTJ3MgdmVuZG9yIElEIG9mIDB4MTI1RC4gIFRoZSBNYWVzdHJvMyBjYW4gYWxzbyBzaG93IHVwIGFzCisweDE5OWEgd2hlbiBoYXJkd2FyZSBzdHJhcHBpbmcgaXMgdXNlZC4KKworVGhlIGNoaXAgY2FuIGFsc28gYWN0IGFzIGEgbXVsdGkgZnVuY3Rpb24gZGV2aWNlLiAgVGhlIG1vZGVtIElEcyBmb2xsb3cKK3RoZSBhdWRpbyBtdWx0aW1lZGlhIGRldmljZSBJRHMuICAoc28gdGhlIG1vZGVtIHBhcnQgb2YgYW4gQWxsZWdybyBzaG93cwordXAgYXMgMHgxOTg5KQorCitEcml2ZXIgT1NTIEJlaGF2aW9yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIE9TUyBkcml2ZXIgZXhwb3J0cyAvZGV2L21peGVyIGFuZCAvZGV2L2RzcCB0byBhcHBsaWNhdGlvbnMsIHdoaWNoCittb3N0bHkgYWRoZXJlIHRvIHRoZSBPU1Mgc3BlYy4gICBUaGlzIGRyaXZlciBkb2Vzbid0IHJlZ2lzdGVyIGl0c2VsZgord2l0aCAvZGV2L3NuZHN0YXQsIHNvIGRvbid0IGV4cGVjdCBpbmZvcm1hdGlvbiB0byBhcHBlYXIgdGhlcmUuCisKK1RoZSAvZGV2L2RzcCBkZXZpY2UgZXhwb3J0ZWQgYmVoYXZlcyBhcyBleHBlY3RlZC4gIFBsYXliYWNrIGlzCitzdXBwb3J0ZWQgaW4gYWxsIHRoZSB2YXJpb3VzIGxvdmVseSBmb3JtYXRzLiAgOC8xNmJpdCBzdGVyZW8vbW9ubyBmcm9tCis4a2h6IHRvIDQ4a2h6LCB3aXRoIGJvdGggcmVhZCgpL3dyaXRlKCksIGFuZCBtbWFwKCkuCisKKy9kZXYvbWl4ZXIgaXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBBQyc5NyBjb2RlYyBvbiB0aGUgTWFlc3RybzMuICBJdCBpcword29ydGggbm90aW5nIHRoYXQgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiBBQyc5N3MgdGhhdCBjYW4gYmUgd2lyZWQgdG8KK3RoZSBNYWVzdHJvMy4gIFdoaWNoIGlzIHVzZWQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGhhcmR3YXJlIGltcGxlbWVudG9yLgorVGhpcyBzaG91bGQgb25seSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyIGJ5IHRoZSBwcmVzZW5jZSwgb3IgbGFjaywgb2YKKydCYXNzJyBhbmQgJ1RyZWJsZScgc2xpZGVycyBpbiB0aGUgbWl4ZXIuICBOb3QgYWxsIEFDJzk3cyBoYXZlIHRoZW0uCitUaGUgQWxsZWdybyBoYXMgYW4gb25jaGlwIEFDJzk3LgorCitUaGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBNSURJIG9yIEZNIHBsYXliYWNrIGF0IHRoZSBtb21lbnQuCisKK0NvbXBpbGluZyBhbmQgSW5zdGFsbGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhlIGRyaXZlcnMgaW5jbHVzaW9uIGludG8gdGhlIGtlcm5lbCwgY29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nCitpcyB0aGUgc2FtZSBhcyBtb3N0IE9TUy9MaXRlIG1vZHVsYXIgc291bmQgZHJpdmVycy4gIENvbXBpbGF0aW9uCitvZiB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgQ09ORklHX1NPVU5EX01BRVNUUk8zIHZhcmlhYmxlCitpbiB0aGUgY29uZmlnIHN5c3RlbS4gIAorCitJdCBtYXkgYmUgbW9kdWxhciBvciBzdGF0aWNhbGx5IGxpbmtlZC4gIElmIGl0IGlzIG1vZHVsYXIgaXQgc2hvdWxkIGJlCitpbnN0YWxsZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlcyBmb3IgdGhlIGtlcm5lbCBvbiB0aGUgc3lzdGVtLgorVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSBpbiAvbGliL21vZHVsZXMvIHNvbWV3aGVyZS4gICdhbGlhcyBzb3VuZC1zbG90LTAKK21hZXN0cm8zJyBzaG91bGQgYWxzbyBiZSBhZGRlZCB0byB5b3VyIG1vZHVsZSBjb25maWdzICh0eXBpY2FsbHkKKy9ldGMvbW9kcHJvYmUuY29uZikgaWYgeW91J3JlIHVzaW5nIG1vZHVsYXIgT1NTL0xpdGUgc291bmQgYW5kIHdhbnQgdG8KK2RlZmF1bHQgdG8gdXNpbmcgYSBtYWVzdHJvMyBjaGlwLgorCitUaGVyZSBhcmUgdmVyeSBmZXcgb3B0aW9ucyB0byB0aGUgZHJpdmVyLiAgT25lIGlzICdkZWJ1Zycgd2hpY2ggd2lsbCAKK3RlbGwgdGhlIGRyaXZlciB0byBwcmludCBtaW5pbWFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhcyBpdCBydW5zLiAgVGhpcworY2FuIGJlIGNvbGxlY3RlZCB3aXRoICdkbWVzZycgb3IgdGhyb3VnaCB0aGUga2xvZ2QgZGFlbW9uLgorCitPbmUgaXMgJ2V4dGVybmFsX2FtcCcsIHdoaWNoIHRlbGxzIHRoZSBkcml2ZXIgdG8gYXR0ZW1wdCB0byBlbmFibGUKK2FuIGV4dGVybmFsIGFtcGxpZmllci4gIFRoaXMgZGVmYXVsdHMgdG8gJzEnLCB5b3UgY2FuIHRlbGwgdGhlIGRyaXZlcgorbm90IHRvIGJvdGhlciBlbmFibGluZyBzdWNoIGFuIGFtcGxpZmllciBieSBzZXR0aW5nIGl0IHRvICcwJy4KKworQW5kIHRoZSBsYXN0IGlzICdncGlvX3BpbicsIHdoaWNoIHRlbGxzIHRoZSBkcml2ZXIgd2hpY2ggR1BJTyBwaW4gbnVtYmVyCit0aGUgZXh0ZXJuYWwgYW1wIHVzZXMgKDAtMTUpLCBUaGUgQWxsZWdybyB1c2VzIDggYnkgZGVmYXVsdCwgYWxsIG90aGVycyAxLgorSWYgZXZlcnl0aGluZyBsb2FkcyBjb3JyZWN0bHkgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgYnV0IHlvdSBnZXQgbm8gc291bmQsIAordHJ5IHR3ZWFraW5nIHRoaXMgdmFsdWUuIAorCitTeXN0ZW1zIGtub3duIHRvIG5lZWQgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAgICAgUGFuYXNvbmljIFRvdWdoQm9vayBDRi03MjogZ3Bpb19waW49MTMgCisKK1Bvd2VyIE1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaGFzIGEgbWluaW1hbCB1bmRlcnN0YW5kaW5nIG9mIFBDSSBQb3dlciBNYW5hZ2VtZW50LiAgSXQgd2lsbAordHJ5IGFuZCBwb3dlciBkb3duIHRoZSBjaGlwIHdoZW4gdGhlIHN5c3RlbSBpcyBzdXNwZW5kZWQsIGFuZCBwb3dlcgoraXQgdXAgd2l0aCBpdCBpcyByZXN1bWVkLiAgSXQgd2lsbCBhbHNvIHRyeSBhbmQgcG93ZXIgZG93biB0aGUgY2hpcAord2hlbiB0aGUgbWFjaGluZSBpcyBzaHV0IGRvd24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9NdWx0aVNvdW5kIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTXVsdGlTb3VuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGExOGJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTXVsdGlTb3VuZApAQCAtMCwwICsxLDExMzcgQEAKKyMhIC9iaW4vc2gKKyMKKyMgIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIERyaXZlciBOb3RlcworIyAgLS0gQW5kcmV3IFZlbGlhdGggPGFuZHJld3R2QHVzYS5uZXQ+CisjCisjICBMYXN0IHVwZGF0ZTogICAgICAgICAgICAgICAgICAgICAgU2VwdGVtYmVyIDEwLCAxOTk4CisjICBDb3JyZXNwb25kaW5nIG1zbmQgZHJpdmVyOiAgICAgICAgMC44LjMKKyMKKyMgKiogVGhpcyBmaWxlIGlzIGEgUkVBRE1FICh0b3AgcGFydCkgYW5kIHNoZWxsIGFyY2hpdmUgKGJvdHRvbSBwYXJ0KS4KKyMgICAgVGhlIGNvcnJlc3BvbmRpbmcgYXJjaGl2ZWQgdXRpbGl0eSBzb3VyY2VzIGNhbiBiZSB1bnBhY2tlZCBieQorIyAgICBydW5uaW5nIGBzaCBNdWx0aVNvdW5kJyAodGhlIHV0aWxpdGllcyBhcmUgb25seSBuZWVkZWQgZm9yIHRoZQorIyAgICBQaW5uYWNsZSBhbmQgRmlqaSBjYXJkcykuICoqCisjCisjCisjICAtPS09LSBHZXR0aW5nIEZpcm13YXJlIC09LT0tCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgIFNlZSB0aGUgc2VjdGlvbiBgT2J0YWluaW5nIGFuZCBDcmVhdGluZyBGaXJtd2FyZSBGaWxlcycgaW4gdGhpcworIyAgZG9jdW1lbnQgZm9yIGluc3RydWN0aW9ucyBvbiBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBmaXJtd2FyZQorIyAgZmlsZXMuCisjICAKKyMgIAorIyAgU3VwcG9ydGVkIEZlYXR1cmVzCisjICB+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgQ3VycmVudGx5LCBmdWxsLWR1cGxleCBkaWdpdGFsIGF1ZGlvICgvZGV2L2RzcCBvbmx5LCAvZGV2L2F1ZGlvIGlzCisjICBub3QgY3VycmVudGx5IGF2YWlsYWJsZSkgYW5kIG1peGVyIGZ1bmN0aW9uYWxpdHkgKC9kZXYvbWl4ZXIpIGFyZQorIyAgc3VwcG9ydGVkIChtZW1vcnkgbWFwcGVkIGRpZ2l0YWwgYXVkaW8gaXMgbm90IHlldCBzdXBwb3J0ZWQpLgorIyAgRGlnaXRhbCB0cmFuc2ZlcnMgYW5kIG1vbml0b3JpbmcgY2FuIGJlIGRvbmUgYXMgd2VsbCBpZiB5b3UgaGF2ZQorIyAgdGhlIGRpZ2l0YWwgZGF1Z2h0ZXJib2FyZCAoc2VlIHRoZSBzZWN0aW9uIG9uIHVzaW5nIHRoZSBTL1BESUYgcG9ydAorIyAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorIworIyAgU3VwcG9ydCBmb3IgdGhlIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIEh1cnJpY2FuZSBhcmNoaXRlY3R1cmUgaXMKKyMgIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgbW9kdWxlcyAodGhlc2UgY2FuIGFsc28gb3BlcmF0ZSBjb21waWxlZAorIyAgaW50byB0aGUga2VybmVsKToKKyMgIAorIyAgbXNuZCAgICAgICAgICAgICAgIC0gTXVsdGlTb3VuZCBiYXNlIChyZXF1aXJlcyBzb3VuZGNvcmUpCisjCisjICBtc25kX2NsYXNzaWMgICAgICAgLSBCYXNlIGF1ZGlvL21peGVyIHN1cHBvcnQgZm9yIENsYXNzaWMsIE1vbmV0ZXJ5IGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgVGFoaXRpIGNhcmRzCisjCisjICBtc25kX3Bpbm5hY2xlICAgICAgLSBCYXNlIGF1ZGlvL21peGVyIHN1cHBvcnQgZm9yIFBpbm5hY2xlIGFuZCBGaWppIGNhcmRzCisjICAKKyMgIAorIyAgSW1wb3J0YW50IE5vdGVzIC0gUmVhZCBCZWZvcmUgVXNpbmcKKyMgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgIFRoZSBmaXJtd2FyZSBmaWxlcyBhcmUgbm90IGluY2x1ZGVkIChtYXkgY2hhbmdlIGluIGZ1dHVyZSkuICBZb3UKKyMgIG11c3Qgb2J0YWluIHRoZXNlIGltYWdlcyBmcm9tIFR1cnRsZSBCZWFjaCAodGhleSBhcmUgaW5jbHVkZWQgaW4KKyMgIHRoZSBNdWx0aVNvdW5kIERldmVsb3BtZW50IEtpdHMpLCBhbmQgcGxhY2UgdGhlbSBpbiAvZXRjL3NvdW5kIGZvcgorIyAgZXhhbXBsZSwgYW5kIGdpdmUgdGhlIGZ1bGwgcGF0aHMgaW4gdGhlIExpbnV4IGNvbmZpZ3VyYXRpb24uICBJZgorIyAgeW91IGFyZSBjb21waWxpbmcgaW4gc3VwcG9ydCBmb3IgdGhlIE11bHRpU291bmQgZHJpdmVyIHJhdGhlciB0aGFuCisjICB1c2luZyBpdCBhcyBhIG1vZHVsZSwgdGhlc2UgZmlybXdhcmUgZmlsZXMgbXVzdCBiZSBhY2Nlc3NpYmxlCisjICBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uLgorIworIyAgUGxlYXNlIG5vdGUgdGhlc2UgZmlsZXMgbXVzdCBiZSBiaW5hcnkgZmlsZXMsIG5vdCBhc3NlbWJsZXIuICBTZWUKKyMgIHRoZSBzZWN0aW9uIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQgZm9yIGluc3RydWN0aW9ucyB0byBvYnRhaW4gdGhlc2UKKyMgIGZpbGVzLgorIyAgCisjICAKKyMgIENvbmZpZ3VyaW5nIENhcmQgUmVzb3VyY2VzCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyAgKiogVGhpcyBzZWN0aW9uIGlzIHZlcnkgaW1wb3J0YW50LCBhcyB5b3VyIGNhcmQgbWF5IG5vdCB3b3JrIGF0IGFsbAorIyAgICAgb3IgeW91ciBtYWNoaW5lIG1heSBjcmFzaCBpZiB5b3UgZG8gbm90IGRvIHRoaXMgY29ycmVjdGx5LiAqKgorIworIyAgKiBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aQorIyAgCisjICBUaGVzZSBjYXJkcyBhcmUgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBkcml2ZXIgbXNuZF9jbGFzc2ljLiAgWW91IG11c3QKKyMgIGtub3cgdGhlIGlvIHBvcnQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIHNlbGVjdCB0aGUgaXJxIGFuZCBtZW1vcnkgcmVzb3VyY2VzCisjICBvbiB0aGUgY2FyZC4gIEl0IGlzIHVwIHRvIHlvdSB0byBrbm93IGlmIHRoZXNlIGFyZSBmcmVlIGxvY2F0aW9ucyBvciBub3csCisjICBhIGNvbmZsaWN0IGNhbiBsb2NrIHRoZSBtYWNoaW5lIHVwLgorIworIyAgKiBQaW5uYWNsZS9GaWppCisjCisjICBUaGUgUGlubmFjbGUgYW5kIEZpamkgY2FyZHMgaGF2ZSBhbiBleHRyYSBjb25maWcgcG9ydCwgZWl0aGVyCisjICAweDI1MCwgMHgyNjAgb3IgMHgyNzAuICBUaGlzIHBvcnQgY2FuIGJlIGRpc2FibGVkIHRvIGhhdmUgdGhlIGNhcmQKKyMgIGNvbmZpZ3VyZWQgc3RyaWN0bHkgdGhyb3VnaCBQblAsIGhvd2V2ZXIgeW91IGxvc2UgdGhlIGFiaWxpdHkgdG8KKyMgIGFjY2VzcyB0aGUgSURFIGNvbnRyb2xsZXIgYW5kIGpveXN0aWNrIGRldmljZXMgb24gdGhpcyBjYXJkIHdoZW4KKyMgIHVzaW5nIFBuUC4gIFRoZSBpbmNsdWRlZCBwaW5uYWNsZWNmZyBwcm9ncmFtIGluIHRoaXMgc2hlbGwgYXJjaGl2ZQorIyAgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBjYXJkIGluIG5vbi1QblAgbW9kZSwgYW5kIGluIFBuUCBtb2RlCisjICB5b3UgY2FuIHVzZSBpc2FwbnB0b29scy4gIFRoZXNlIGFyZSBkZXNjcmliZWQgYnJpZWZseSBoZXJlLgorIworIyAgcGlubmFjbGVjZmcgaXMgbm90IHJlcXVpcmVkOyB5b3UgY2FuIHVzZSB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUKKyMgIHRvIGZ1bGx5IGNvbmZpZ3VyZSB0aGUgY2FyZCBhcyB3ZWxsLiAgSG93ZXZlciwgcGlubmFjbGVjZmcgY2FuIGJlCisjICB1c2VkIHRvIGNoYW5nZSB0aGUgcmVzb3VyY2UgdmFsdWVzIG9mIGEgcGFydGljdWxhciBkZXZpY2UgYWZ0ZXIgdGhlCisjICBtc25kX3Bpbm5hY2xlIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGUKKyMgIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IHNldCB0aGVzZSB2YWx1ZXMgZHVyaW5nIGNvbXBpbGUKKyMgIHRpbWUsIGhvd2V2ZXIgb3RoZXIgcGVyaXBoZXJhbCByZXNvdXJjZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgd2l0aAorIyAgdGhlIHBpbm5hY2xlY2ZnIHByb2dyYW0gYWZ0ZXIgdGhlIGtlcm5lbCBpcyBsb2FkZWQuCisjCisjCisjICAqKiogUG5QIG1vZGUKKyMgIAorIyAgVXNlIHBucGR1bXAgdG8gb2J0YWluIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24gaWYgeW91IGNhbjsgSSB3YXMgYWJsZQorIyAgdG8gb2J0YWluIG9uZSB3aXRoIHRoZSBjb21tYW5kIGBwbnBkdW1wIDEgMHgyMDMnIC0tIHRoaXMgbWF5IHZhcnkKKyMgIGZvciB5b3UgKHJ1bm5pbmcgcG5wZHVtcCBieSBpdHNlbGYgZGlkIG5vdCB3b3JrIGZvciBtZSkuICBUaGVuLAorIyAgZWRpdCB0aGlzIGZpbGUgYW5kIHVzZSBpc2FwbnAgdG8gdW5jb21tZW50IGFuZCBzZXQgdGhlIGNhcmQgdmFsdWVzLgorIyAgVXNlIHRoZXNlIHZhbHVlcyB3aGVuIGluc2VydGluZyB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUuICBVc2luZworIyAgdGhpcyBtZXRob2QsIHlvdSBjYW4gc2V0IHRoZSByZXNvdXJjZXMgZm9yIHRoZSBEU1AgYW5kIHRoZSBLdXJ6d2VpbAorIyAgc3ludGggKFBpbm5hY2xlKS4gIFNpbmNlIExpbnV4IGRvZXMgbm90IGRpcmVjdGx5IHN1cHBvcnQgUG5QCisjICBkZXZpY2VzLCB5b3UgbWF5IGhhdmUgZGlmZmljdWx0eSB3aGVuIHVzaW5nIHRoZSBjYXJkIGluIFBuUCBtb2RlCisjICB3aGVuIGl0IHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiAgVXNpbmcgbm9uLVBuUCBtb2RlCisjICBpcyBwcmVmZXJhYmxlIGluIHRoaXMgY2FzZS4KKyMKKyMgIEhlcmUgaXMgYW4gZXhhbXBsZSBteXBpbm5hY2xlLmNvbmYgZm9yIGlzYXBucCB0aGF0IHNldHMgdGhlIGNhcmQgdG8KKyMgIGlvIGJhc2UgMHgyMTAsIGlycSA1IGFuZCBtZW0gMHhkODAwMCwgYW5kIGFsc28gc2V0cyB0aGUgS3VyendlaWwKKyMgIHN5bnRoIHRvIDB4MzMwIGFuZCBpcnEgOSAobWF5IG5lZWQgZWRpdGluZyBmb3IgeW91ciBzeXN0ZW0pOgorIworIyAgKFJFQURQT1JUIDB4MDIwMykKKyMgIChDU04gMikKKyMgIChJREVOVElGWSAqKQorIyAgCisjICAjIERTUAorIyAgKENPTkZJR1VSRSBCVkowNDQwLy0xIChMRCAwCisjICAgICAgICAgIChJTlQgMCAoSVJRIDUgKE1PREUgK0UpKSkgKElPIDAgKEJBU0UgMHgwMjEwKSkgKE1FTSAwIChCQVNFIDB4MGQ4MDAwKSkKKyMgICAgICAgICAgKEFDVCBZKSkpCisjICAKKyMgICMgS3VyendlaWwgU3ludGggKFBpbm5hY2xlIE9ubHkpCisjICAoQ09ORklHVVJFIEJWSjA0NDAvLTEgKExEIDEKKyMgICAgICAgICAgKElPIDAgKEJBU0UgMHgwMzMwKSkgKElOVCAwIChJUlEgOSAoTU9ERSArRSkpKQorIyAgICAgICAgICAoQUNUIFkpKSkKKyMgIAorIyAgKFdBSVRGT1JLRVkpCisjCisjCisjICAqKiogTm9uLVBuUCBtb2RlCisjICAKKyMgIFRoZSBzZWNvbmQgd2F5IGlzIGJ5IHJ1bm5pbmcgdGhlIGNhcmQgaW4gbm9uLVBuUCBtb2RlLiAgVGhpcworIyAgYWN0dWFsbHkgaGFzIHNvbWUgYWR2YW50YWdlcyBpbiB0aGF0IHlvdSBjYW4gYWNjZXNzIHNvbWUgb3RoZXIKKyMgIGRldmljZXMgb24gdGhlIGNhcmQsIHN1Y2ggYXMgdGhlIGpveXN0aWNrIGFuZCBJREUgY29udHJvbGxlci4gIFRvCisjICBjb25maWd1cmUgdGhlIGNhcmQsIHVucGFjayB0aGlzIHNoZWxsIGFyY2hpdmUgYW5kIGJ1aWxkIHRoZQorIyAgcGlubmFjbGVjZmcgcHJvZ3JhbS4gIFVzaW5nIHRoaXMgcHJvZ3JhbSwgeW91IGNhbiBhc3NpZ24gdGhlCisjICByZXNvdXJjZSB2YWx1ZXMgdG8gdGhlIGNhcmQncyBkZXZpY2VzLCBvciBkaXNhYmxlIHRoZSBkZXZpY2VzLiAgQXMKKyMgIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIHBpbm5hY2xlY2ZnLCB5b3UgY2FuIHNwZWNpZnkgbWFueSBvZiB0aGUKKyMgIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdoZW4gbG9hZGluZyB0aGUgbXNuZF9waW5uYWNsZSBtb2R1bGUgKG9yCisjICBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gd2hlbiBjb21waWxpbmcgdGhlIGRyaXZlciBpbnRvIHRoZQorIyAga2VybmVsKS4KKyMKKyMgIElmIHlvdSBzcGVjaWZ5IGNmZz0weDI1MCBmb3IgdGhlIG1zbmRfcGlubmFjbGUgbW9kdWxlLCBpdAorIyAgYXV0b21hdGljYWxseSBjb25maWd1cmUgdGhlIGNhcmQgdG8gdGhlIGdpdmVuIGlvLCBpcnEgYW5kIG1lbW9yeQorIyAgdmFsdWVzIHVzaW5nIHRoYXQgY29uZmlnIHBvcnQgKHRoZSBjb25maWcgcG9ydCBpcyBqdW1wZXIgc2VsZWN0YWJsZQorIyAgb24gdGhlIGNhcmQgdG8gMHgyNTAsIDB4MjYwIG9yIDB4MjcwKS4KKyMKKyMgIFNlZSB0aGUgYG1zbmRfcGlubmFjbGUgQWRkaXRpb25hbCBPcHRpb25zJyBzZWN0aW9uIGJlbG93IGZvciBtb3JlCisjICBpbmZvcm1hdGlvbiBvbiB0aGVzZSBwYXJhbWV0ZXJzIChhbHNvLCBpZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyCisjICBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIHRoZXNlIGV4dHJhIHBhcmFtZXRlcnMgY2FuIGJlIHVzZWZ1bAorIyAgaGVyZSkuCisjCisjCisjICoqIEl0IGlzIHZlcnkgZWFzeSB0byBjYXVzZSBwcm9ibGVtcyBpbiB5b3VyIG1hY2hpbmUgaWYgeW91IGNob29zZSBhCisjICAgIHJlc291cmNlIHZhbHVlIHdoaWNoIGlzIGluY29ycmVjdC4gKioKKyMgIAorIworIyAgRXhhbXBsZXMKKyMgIH5+fn5+fn5+CisjICAKKyMgICogTXVsdGlTb3VuZCBDbGFzc2ljL01vbnRlcmV5L1RhaGl0aToKKyMgIAorIyAgbW9kcHJvYmUgc291bmRjb3JlCisjICBpbnNtb2QgbXNuZAorIyAgaW5zbW9kIG1zbmRfY2xhc3NpYyBpbz0weDI5MCBpcnE9NyBtZW09MHhkMDAwMAorIyAgCisjICAqIE11bHRpU291bmQgUGlubmFjbGUgaW4gUG5QIG1vZGU6CisjICAKKyMgIG1vZHByb2JlIHNvdW5kY29yZQorIyAgaW5zbW9kIG1zbmQKKyMgIGlzYXBucCBteXBpbm5hY2xlLmNvbmYKKyMgIGluc21vZCBtc25kX3Bpbm5hY2xlIGlvPTB4MjEwIGlycT01IG1lbT0weGQ4MDAwIDwtLSBtYXRjaCBteXBpbm5hY2xlLmNvbmYgdmFsdWVzCisjICAKKyMgICogTXVsdGlTb3VuZCBQaW5uYWNsZSBpbiBub24tUG5QIG1vZGUgKHJlcGxhY2UgMHgyNTAgd2l0aCB5b3VyIGNvbmZpZ3VyYXRpb24gcG9ydCwKKyMgICAgb25lIG9mIDB4MjUwLCAweDI2MCBvciAweDI3MCk6CisjICAKKyMgIGluc21vZCBzb3VuZGNvcmUKKyMgIGluc21vZCBtc25kCisjICBpbnNtb2QgbXNuZF9waW5uYWNsZSBjZmc9MHgyNTAgaW89MHgyOTAgaXJxPTUgbWVtPTB4ZDAwMDAKKyMgIAorIyAqIFRvIHVzZSB0aGUgTVBVLWNvbXBhdGlibGUgS3VyendlaWwgc3ludGggb24gdGhlIFBpbm5hY2xlIGluIFBuUAorIyAgIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nIChhc3N1bWVzIHlvdSBkaWQgYGlzYXBucCBteXBpbm5hY2xlLmNvbmYnKToKKyMgIAorIyAgaW5zbW9kIHNvdW5kCisjICBpbnNtb2QgbXB1NDAxIGlvPTB4MzMwIGlycT05ICAgICAgICAgICAgICAgICAgICA8LS0gbWF0Y2ggbXlwaW5uYWNsZS5jb25mIHZhbHVlcworIyAgCisjICogVG8gdXNlIHRoZSBNUFUtY29tcGF0aWJsZSBLdXJ6d2VpbCBzeW50aCBvbiB0aGUgUGlubmFjbGUgaW4gbm9uLVBuUAorIyAgIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nLiAgTm90ZSBob3cgd2UgZmlyc3QgY29uZmlndXJlIHRoZSBwZXJpcGhlcmFsJ3MKKyMgICByZXNvdXJjZXMsIF90aGVuXyBpbnN0YWxsIGEgTGludXggZHJpdmVyIGZvciBpdDoKKyMgIAorIyAgaW5zbW9kIHNvdW5kCisjICBwaW5uYWNsZWNmZyAweDI1MCBtcHUgMHgzMzAgOQorIyAgaW5zbW9kIG1wdTQwMSBpbz0weDMzMCBpcnE9OQorIworIyAgLS0gT1IgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSB3aXRob3V0IHBpbm5hY2xlY2ZnIGluIG5vbi1QblAgbW9kZToKKyMKKyMgIGluc21vZCBzb3VuZGNvcmUKKyMgIGluc21vZCBtc25kCisjICBpbnNtb2QgbXNuZF9waW5uYWNsZSBjZmc9MHgyNTAgaW89MHgyOTAgaXJxPTUgbWVtPTB4ZDAwMDAgbXB1X2lvPTB4MzMwIG1wdV9pcnE9OQorIyAgaW5zbW9kIHNvdW5kCisjICBpbnNtb2QgbXB1NDAxIGlvPTB4MzMwIGlycT05CisjCisjICogVG8gc2V0dXAgdGhlIGpveXN0aWNrIHBvcnQgb24gdGhlIFBpbm5hY2xlIGluIG5vbi1QblAgbW9kZSAodGhvdWdoCisjICAgeW91IGhhdmUgdG8gZmluZCB0aGUgYWN0dWFsIExpbnV4IGpveXN0aWNrIGRyaXZlciBlbHNld2hlcmUpLCB5b3UKKyMgICBjYW4gdXNlIHBpbm5hY2xlY2ZnOgorIworIyAgIHBpbm5hY2xlY2ZnIDB4MjUwIGpveXN0aWNrIDB4MjAwCisjCisjICAtLSBPUiB5b3UgY2FuIGNvbmZpZ3VyZSB0aGlzIHVzaW5nIG1zbmRfcGlubmFjbGUgd2l0aCB0aGUgZm9sbG93aW5nOgorIworIyAgaW5zbW9kIHNvdW5kY29yZQorIyAgaW5zbW9kIG1zbmQKKyMgIGluc21vZCBtc25kX3Bpbm5hY2xlIGNmZz0weDI1MCBpbz0weDI5MCBpcnE9NSBtZW09MHhkMDAwMCBqb3lzdGlja19pbz0weDIwMAorIworIyAgCisjICBtc25kX2NsYXNzaWMsIG1zbmRfcGlubmFjbGUgUmVxdWlyZWQgT3B0aW9ucworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgSWYgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBub3QgZ2l2ZW4sIHRoZSBtb2R1bGUgd2lsbCBub3QgbG9hZC4KKyMgIEV4YW1pbmUgdGhlIGtlcm5lbCBtZXNzYWdlIGxvZyBmb3IgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMuCisjICBXQVJOSU5HLS1wcm9iaW5nIGlzbid0IHN1cHBvcnRlZCBzbyB0cnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIHRoZQorIyAgY29ycmVjdCBzaGFyZWQgbWVtb3J5IGFyZWEsIG90aGVyd2lzZSB5b3UgbWF5IGV4cGVyaWVuY2UgcHJvYmxlbXMuCisjICAKKyMgIGlvICAgICAgICAgICAgICAgICAgIEkvTyBiYXNlIG9mIERTUCwgZS5nLiBpbz0weDIxMAorIyAgaXJxICAgICAgICAgICAgICAgICAgSVJRIG51bWJlciwgZS5nLiBpcnE9NQorIyAgbWVtICAgICAgICAgICAgICAgICAgU2hhcmVkIG1lbW9yeSBhcmVhLCBlLmcuIG1lbT0weGQ4MDAwCisjICAKKyMgIAorIyAgbXNuZF9jbGFzc2ljLCBtc25kX3Bpbm5hY2xlIEFkZGl0aW9uYWwgT3B0aW9ucworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyAgCisjICBmaWZvc2l6ZSAgICAgICAgICAgICBUaGUgZGlnaXRhbCBhdWRpbyBGSUZPcywgaW4ga2lsb2J5dGVzLiAgSWYgbm90CisjICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHdpbGwgYmUgdXNlZC4gIEluY3JlYXNpbmcKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFsdWUgd2lsbCByZWR1Y2UgdGhlIGNoYW5jZSBvZiBhIEZJRk8KKyMgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyZmxvdyBhdCB0aGUgZXhwZW5zZSBvZiBpbmNyZWFzaW5nIG92ZXJhbGwKKyMgICAgICAgICAgICAgICAgICAgICAgIGxhdGVuY3kuICBGb3IgZXhhbXBsZSwgZmlmb3NpemU9NTEyIHdpbGwKKyMgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlIDUxMmtCIHJlYWQgYW5kIHdyaXRlIEZJRk9zICgxTUIgdG90YWwpLgorIyAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhpcyBtYXkgcmVkdWNlIGRyb3BvdXRzLCBhIGhlYXZ5IG1hY2hpbmUKKyMgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgd2lsbCB1bmRvdWJ0ZWRseSBzdGFydmUgdGhlIEZJRk8gb2YgZGF0YQorIyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB3aWxsIGV2ZW50dWFsbHkgZ2V0IGRyb3BvdXRzLiAgT25lCisjICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gaXMgdG8gYWx0ZXIgdGhlIHNjaGVkdWxpbmcgcHJpb3JpdHkgb2YKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwbGF5YmFjayBwcm9jZXNzLCB1c2luZyBgbmljZScgb3Igc29tZSBmb3JtCisjICAgICAgICAgICAgICAgICAgICAgICBvZiBQT1NJWCBzb2Z0IHJlYWwtdGltZSBzY2hlZHVsaW5nLgorIworIyAgY2FsaWJyYXRlX3NpZ25hbCAgICAgU2V0dGluZyB0aGlzIHRvIG9uZSBjYWxpYnJhdGVzIHRoZSBBRENzIHRvIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLCB6ZXJvIGNhbGlicmF0ZXMgdG8gdGhlIGNhcmQgKGRlZmF1bHRzCisjICAgICAgICAgICAgICAgICAgICAgICB0byB6ZXJvKS4KKyMgIAorIyAgCisjICBtc25kX3Bpbm5hY2xlIEFkZGl0aW9uYWwgT3B0aW9ucworIyAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMKKyMgIGRpZ2l0YWwgICAgICAgICAgICAgIFNwZWNpZnkgZGlnaXRhbD0xIHRvIGVuYWJsZSB0aGUgUy9QRElGIGlucHV0CisjICAgICAgICAgICAgICAgICAgICAgICBpZiB5b3UgaGF2ZSB0aGUgZGlnaXRhbCBkYXVnaHRlcmJvYXJkCisjICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLiBUaGlzIHdpbGwgZW5hYmxlIGFjY2VzcyB0byB0aGUKKyMgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwxIGlucHV0IGZvciB0aGUgc291bmRjYXJkIGluIHRoZSBtaXhlci4KKyMgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgbWl4ZXIgcHJvZ3JhbXMgbWlnaHQgaGF2ZSB0cm91YmxlIHNldHRpbmcKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoZSBESUdJVEFMMSBzb3VyY2UgYXMgYW4gaW5wdXQuICBJZiB5b3UgaGF2ZQorIyAgICAgICAgICAgICAgICAgICAgICAgdHJvdWJsZSwgeW91IGNhbiB0cnkgdGhlIHNldGRpZ2l0YWwuYyBwcm9ncmFtCisjICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZG9jdW1lbnQuCisjCisjICBjZmcgICAgICAgICAgICAgICAgICBOb24tUG5QIGNvbmZpZ3VyYXRpb24gcG9ydCBmb3IgdGhlIFBpbm5hY2xlCisjICAgICAgICAgICAgICAgICAgICAgICBhbmQgRmlqaSAodHlwaWNhbGx5IDB4MjUwLCAweDI2MCBvciAweDI3MCwKKyMgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUganVtcGVyIGNvbmZpZ3VyYXRpb24pLiAgSWYKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgb3B0aW9uIGlzIG9taXR0ZWQsIHRoZW4gaXQgaXMgYXNzdW1lZAorIyAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgY2FyZCBpcyBpbiBQblAgbW9kZSwgYW5kIHRoYXQgdGhlCisjICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgRFNQIHJlc291cmNlIHZhbHVlcyBhcmUgYWxyZWFkeQorIyAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB3aXRoIFBuUCAoaS5lLiBpdCB3b24ndCBhdHRlbXB0IHRvCisjICAgICAgICAgICAgICAgICAgICAgICBkbyBhbnkgc29ydCBvZiBjb25maWd1cmF0aW9uKS4KKyMKKyMgIFdoZW4gdGhlIFBpbm5hY2xlIGlzIGluIG5vbi1QblAgbW9kZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZworIyAgb3B0aW9ucyB0byBjb25maWd1cmUgcGFydGljdWxhciBkZXZpY2VzLiAgSWYgYSBmdWxsIHNwZWNpZmljYXRpb24KKyMgIGZvciBhIGRldmljZSBpcyBub3QgZ2l2ZW4sIHRoZW4gdGhlIGRldmljZSBpcyBub3QgY29uZmlndXJlZC4gIE5vdGUKKyMgIHRoYXQgeW91IHN0aWxsIG11c3QgdXNlIGEgTGludXggZHJpdmVyIGZvciBhbnkgb2YgdGhlc2UgZGV2aWNlcworIyAgb25jZSB0aGVpciByZXNvdXJjZXMgYXJlIHNldHVwIChzdWNoIGFzIHRoZSBMaW51eCBqb3lzdGljayBkcml2ZXIsCisjICBvciB0aGUgTVBVNDAxIGRyaXZlciBmcm9tIE9TUyBmb3IgdGhlIEt1cnp3ZWlsIHN5bnRoKS4KKyMKKyMgIG1wdV9pbyAgICAgICAgICAgICAgIEkvTyBwb3J0IG9mIE1QVSAob24tYm9hcmQgS3VyendlaWwgc3ludGgpCisjICBtcHVfaXJxICAgICAgICAgICAgICBJUlEgb2YgTVBVIChvbi1ib2FyZCBLdXJ6d2VpbCBzeW50aCkKKyMgIGlkZV9pbzAJCUZpcnN0IEkvTyBwb3J0IG9mIElERSBjb250cm9sbGVyCisjICBpZGVfaW8xCQlTZWNvbmQgSS9PIHBvcnQgb2YgSURFIGNvbnRyb2xsZXIKKyMgIGlkZV9pcnEJCUlSUSBJREUgY29udHJvbGxlcgorIyAgam95c3RpY2tfaW8gICAgICAgICAgSS9PIHBvcnQgb2Ygam95c3RpY2sKKyMgIAorIyAgCisjICBPYnRhaW5pbmcgYW5kIENyZWF0aW5nIEZpcm13YXJlIEZpbGVzCisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjICAKKyMgICAgICAgRm9yIHRoZSBDbGFzc2ljL1RhaGl0aS9Nb250ZXJleQorIyAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IAorIyAgCisjICBEb3dubG9hZCB0byAvdG1wIGFuZCB1bnppcCB0aGUgZm9sbG93aW5nIGZpbGUgZnJvbSBUdXJ0bGUgQmVhY2g6CisjICAKKyMgICAgICAgZnRwOi8vZnRwLnZveWV0cmEuY29tL3B1Yi90YnMvbXNuZGNsL21zbmR2a2l0LnppcAorIyAgCisjICBXaGVuIHVuemlwcGVkLCB1bnppcCB0aGUgZmlsZSBuYW1lZCBNc25kRmlsZXMuemlwLiAgVGhlbiBjb3B5IHRoZQorIyAgZm9sbG93aW5nIGZpcm13YXJlIGZpbGVzIHRvIC9ldGMvc291bmQgKG5vdGUgdGhlIGZpbGUgcmVuYW1pbmcpOgorIyAgCisjICAgIGNwIERTUENPREUvTVNORElOSVQuQklOIC9ldGMvc291bmQvbXNuZGluaXQuYmluCisjICAgIGNwIERTUENPREUvTVNORFBFUk0uUkVCIC9ldGMvc291bmQvbXNuZHBlcm0uYmluCisjICAKKyMgIFdoZW4gY29uZmlndXJpbmcgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmeSAvZXRjL3NvdW5kL21zbmRpbml0LmJpbiBhbmQKKyMgIC9ldGMvc291bmQvbXNuZHBlcm0uYmluIGZvciB0aGUgdHdvIGZpcm13YXJlIGZpbGVzIChMaW51eCBrZXJuZWwKKyMgIHZlcnNpb25zIG9sZGVyIHRoYW4gMi4yIGRvIG5vdCBhc2sgZm9yIGZpcm13YXJlIHBhdGhzLCBhbmQgYXJlCisjICBoYXJkY29kZWQgdG8gL2V0Yy9zb3VuZCkuCisjCisjICBJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCwgdGhlc2UgZmlsZXMgbXVzdAorIyAgYmUgYWNjZXNzaWJsZSBkdXJpbmcgY29tcGlsYXRpb24sIGJ1dCB3aWxsIG5vdCBiZSBuZWVkZWQgbGF0ZXIuCisjICBUaGUgZmlsZXMgbXVzdCByZW1haW4sIGhvd2V2ZXIsIGlmIHRoZSBkcml2ZXIgaXMgdXNlZCBhcyBhIG1vZHVsZS4KKyMgIAorIyAgCisjICAgICAgIEZvciB0aGUgUGlubmFjbGUvRmlqaQorIyAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgIAorIyAgRG93bmxvYWQgdG8gL3RtcCBhbmQgdW56aXAgdGhlIGZvbGxvd2luZyBmaWxlIGZyb20gVHVydGxlIEJlYWNoIChiZQorIyAgc3VyZSB0byB1c2UgdGhlIGVudGlyZSBVUkw7IHNvbWUgaGF2ZSBoYWQgdHJvdWJsZSBuYXZpZ2F0aW5nIHRvIHRoZQorIyAgVVJMKToKKyMgIAorIyAgICAgICBmdHA6Ly9mdHAudm95ZXRyYS5jb20vcHViL3Ricy9waW5uL3BuZGRrMTAwLnppcAorIworIyAgVW5wYWNrIHRoaXMgc2hlbGwgYXJjaGl2ZSwgYW5kIHJ1biBtYWtlIGluIHRoZSBjcmVhdGVkIGRpcmVjdG9yeQorIyAgKHlvdSBuZWVkIGEgQyBjb21waWxlciBhbmQgZmxleCB0byBidWlsZCB0aGUgdXRpbGl0aWVzKS4gIFRoaXMKKyMgIHNob3VsZCBnaXZlIHlvdSB0aGUgZXhlY3V0YWJsZXMgY29udiwgcGlubmFjbGVjZmcgYW5kIHNldGRpZ2l0YWwuCisjICBjb252IGlzIG9ubHkgdXNlZCB0ZW1wb3JhcmlseSBoZXJlIHRvIGNyZWF0ZSB0aGUgZmlybXdhcmUgZmlsZXMsCisjICB3aGlsZSBwaW5uYWNsZWNmZyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUGlubmFjbGUgb3IgRmlqaSBjYXJkIGluCisjICBub24tUG5QIG1vZGUsIGFuZCBzZXRkaWdpdGFsIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgUy9QRElGIGlucHV0IG9uCisjICB0aGUgbWl4ZXIgKHBpbm5hY2xlY2ZnIGFuZCBzZXRkaWdpdGFsIHNob3VsZCBiZSBjb3BpZWQgdG8gYQorIyAgY29udmVuaWVudCBwbGFjZSwgcG9zc2libHkgcnVuIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24pLgorIworIyAgVG8gZ2VuZXJhdGluZyB0aGUgZmlybXdhcmUgZmlsZXMgd2l0aCB0aGUgYGNvbnYnIHByb2dyYW0sIHdlIGNyZWF0ZQorIyAgdGhlIGJpbmFyeSBmaXJtd2FyZSBmaWxlcyBieSBkb2luZyB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb24KKyMgIChhc3N1bWluZyB0aGUgYXJjaGl2ZSB1bnBhY2tlZCBpbnRvIGEgZGlyZWN0b3J5IG5hbWVkIFBJTk5EREspOgorIyAgCisjICAgIC4vY29udiA8IFBJTk5EREsvZHNwY29kZS9wbmRzcGluaS5hc20gPiAvZXRjL3NvdW5kL3BuZHNwaW5pLmJpbgorIyAgICAuL2NvbnYgPCBQSU5ORERLL2RzcGNvZGUvcG5kc3Blcm0uYXNtID4gL2V0Yy9zb3VuZC9wbmRzcGVybS5iaW4KKyMgIAorIyAgVGhlIGNvbnYgKGFuZCBjb252LmwpIHByb2dyYW0gaXMgbm90IG5lZWRlZCBhZnRlciBjb252ZXJzaW9uIGFuZCBjYW4KKyMgIGJlIHNhZmVseSBkZWxldGVkLiAgVGhlbiwgd2hlbiBjb25maWd1cmluZyB0aGUgTGludXgga2VybmVsLCBzcGVjaWZ5CisjICAvZXRjL3NvdW5kL3BuZHNwaW5pLmJpbiBhbmQgL2V0Yy9zb3VuZC9wbmRzcGVybS5iaW4gZm9yIHRoZSB0d28KKyMgIGZpcm13YXJlIGZpbGVzIChMaW51eCBrZXJuZWwgdmVyc2lvbnMgb2xkZXIgdGhhbiAyLjIgZG8gbm90IGFzayBmb3IKKyMgIGZpcm13YXJlIHBhdGhzLCBhbmQgYXJlIGhhcmRjb2RlZCB0byAvZXRjL3NvdW5kKS4KKyMgIAorIyAgSWYgeW91IGFyZSBjb21waWxpbmcgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHRoZXNlIGZpbGVzIG11c3QKKyMgIGJlIGFjY2Vzc2libGUgZHVyaW5nIGNvbXBpbGF0aW9uLCBidXQgd2lsbCBub3QgYmUgbmVlZGVkIGxhdGVyLgorIyAgVGhlIGZpbGVzIG11c3QgcmVtYWluLCBob3dldmVyLCBpZiB0aGUgZHJpdmVyIGlzIHVzZWQgYXMgYSBtb2R1bGUuCisjCisjICAKKyMgIFVzaW5nIERpZ2l0YWwgSS9PIHdpdGggdGhlIFMvUERJRiBQb3J0CisjICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyAgSWYgeW91IGhhdmUgYSBQaW5uYWNsZSBvciBGaWppIHdpdGggdGhlIGRpZ2l0YWwgZGF1Z2h0ZXJib2FyZCBhbmQKKyMgIHdhbnQgdG8gc2V0IGl0IGFzIHRoZSBpbnB1dCBzb3VyY2UsIHlvdSBjYW4gdXNlIHRoaXMgcHJvZ3JhbSBpZiB5b3UKKyMgIGhhdmUgdHJvdWJsZSB0cnlpbmcgdG8gZG8gaXQgd2l0aCBhIG1peGVyIHByb2dyYW0gKGJlIHN1cmUgdG8KKyMgIGluc2VydCB0aGUgbW9kdWxlIHdpdGggdGhlIGRpZ2l0YWw9MSBvcHRpb24sIG9yIHNheSBZIHRvIHRoZSBvcHRpb24KKyMgIGR1cmluZyBjb21waWxlZC1pbiBrZXJuZWwgb3BlcmF0aW9uKS4gIFVwb24gc2VsZWN0aW9uIG9mIHRoZSBTL1BESUYKKyMgIHBvcnQsIHlvdSBzaG91bGQgYmUgYWJsZSBtb25pdG9yIGFuZCByZWNvcmQgZnJvbSBpdC4KKyMKKyMgIFRoZXJlIGlzIHNvbWV0aGluZyB0byBub3RlIGFib3V0IHVzaW5nIHRoZSBTL1BESUYgcG9ydC4gIERpZ2l0YWwKKyMgIHRpbWluZyBpcyB0YWtlbiBmcm9tIHRoZSBkaWdpdGFsIHNpZ25hbCwgc28gaWYgYSBzaWduYWwgaXMgbm90CisjICBjb25uZWN0ZWQgdG8gdGhlIHBvcnQgYW5kIGl0IGlzIHNlbGVjdGVkIGFzIHJlY29yZGluZyBpbnB1dCwgeW91CisjICB3aWxsIGZpbmQgUENNIHBsYXliYWNrIHRvIGJlIGRpc3RvcnRlZCBpbiBwbGF5YmFjayByYXRlLiAgQWxzbywKKyMgIGF0dGVtcHRpbmcgdG8gcmVjb3JkIGF0IGEgc2FtcGxpbmcgcmF0ZSBvdGhlciB0aGFuIHRoZSBEQVQgcmF0ZSBtYXkKKyMgIGJlIHByb2JsZW1hdGljIChpLmUuIHRyeWluZyB0byByZWNvcmQgYXQgODAwMEh6IHdoZW4gdGhlIERBVCBzaWduYWwKKyMgIGlzIDQ0MTAwSHopLiAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggdGhpcywgc2V0IHRoZSByZWNvcmRpbmcKKyMgIGlucHV0IHRvIGFuYWxvZyBpZiB5b3UgbmVlZCB0byByZWNvcmQgYXQgYSByYXRlIG90aGVyIHRoYW4gdGhhdCBvZgorIyAgdGhlIERBVCByYXRlLgorIworIworIyAgLS0gU2hlbGwgYXJjaGl2ZSBhdHRhY2hlZCBiZWxvdywganVzdCBydW4gYHNoIE11bHRpU291bmQnIHRvIGV4dHJhY3QuCisjICAgICBDb250YWlucyBQaW5uYWNsZS9GaWppIHV0aWxpdGllcyB0byBjb252ZXJ0IGZpcm13YXJlLCBjb25maWd1cmUKKyMgICAgIGluIG5vbi1QblAgbW9kZSwgYW5kIHNlbGVjdCB0aGUgRElHSVRBTDEgaW5wdXQgZm9yIHRoZSBtaXhlci4KKyMKKyMKKyMhL2Jpbi9zaAorIyBUaGlzIGlzIGEgc2hlbGwgYXJjaGl2ZSAocHJvZHVjZWQgYnkgR05VIHNoYXJ1dGlscyA0LjIpLgorIyBUbyBleHRyYWN0IHRoZSBmaWxlcyBmcm9tIHRoaXMgYXJjaGl2ZSwgc2F2ZSBpdCB0byBzb21lIEZJTEUsIHJlbW92ZQorIyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgYCEvYmluL3NoJyBsaW5lIGFib3ZlLCB0aGVuIHR5cGUgYHNoIEZJTEUnLgorIworIyBNYWRlIG9uIDE5OTgtMTItMDQgMTA6MDcgRVNUIGJ5IDxhbmRyZXd0dkB6dHJhbnNmb3JtLnZlbHNvZnQuY29tPi4KKyMgU291cmNlIGRpcmVjdG9yeSB3YXMgYC9ob21lL2FuZHJld3R2L3Byb2dyYW1taW5nL3Bpbm5hY2xlL3Bpbm5hY2xlJy4KKyMKKyMgRXhpc3RpbmcgZmlsZXMgd2lsbCAqbm90KiBiZSBvdmVyd3JpdHRlbiB1bmxlc3MgYC1jJyBpcyBzcGVjaWZpZWQuCisjCisjIFRoaXMgc2hhciBjb250YWluczoKKyMgbGVuZ3RoIG1vZGUgICAgICAgbmFtZQorIyAtLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAyMDQ2IC1ydy1ydy1yLS0gTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYworIyAgMTAyMzUgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYworIyAgICAxMDYgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvTWFrZWZpbGUKKyMgICAgMTQxIC1ydy1ydy1yLS0gTXVsdGlTb3VuZC5kL2NvbnYubAorIyAgIDE0NzIgLXJ3LXJ3LXItLSBNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMKKyMKK3NhdmVfSUZTPSIke0lGU30iCitJRlM9IiR7SUZTfToiCitnZXR0ZXh0X2Rpcj1GQUlMRUQKK2xvY2FsZV9kaXI9RkFJTEVECitmaXJzdF9wYXJhbT0iJDEiCitmb3IgZGlyIGluICRQQVRICitkbworICBpZiB0ZXN0ICIkZ2V0dGV4dF9kaXIiID0gRkFJTEVEICYmIHRlc3QgLWYgJGRpci9nZXR0ZXh0IFwKKyAgICAgJiYgKCRkaXIvZ2V0dGV4dCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxKQorICB0aGVuCisgICAgc2V0IGAkZGlyL2dldHRleHQgLS12ZXJzaW9uIDI+JjFgCisgICAgaWYgdGVzdCAiJDMiID0gR05VCisgICAgdGhlbgorICAgICAgZ2V0dGV4dF9kaXI9JGRpcgorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgIiRsb2NhbGVfZGlyIiA9IEZBSUxFRCAmJiB0ZXN0IC1mICRkaXIvc2hhciBcCisgICAgICYmICgkZGlyL3NoYXIgLS1wcmludC10ZXh0LWRvbWFpbi1kaXIgPi9kZXYvbnVsbCAyPiYxKQorICB0aGVuCisgICAgbG9jYWxlX2Rpcj1gJGRpci9zaGFyIC0tcHJpbnQtdGV4dC1kb21haW4tZGlyYAorICBmaQorZG9uZQorSUZTPSIkc2F2ZV9JRlMiCitpZiB0ZXN0ICIkbG9jYWxlX2RpciIgPSBGQUlMRUQgfHwgdGVzdCAiJGdldHRleHRfZGlyIiA9IEZBSUxFRAordGhlbgorICBlY2hvPWVjaG8KK2Vsc2UKKyAgVEVYVERPTUFJTkRJUj0kbG9jYWxlX2RpcgorICBleHBvcnQgVEVYVERPTUFJTkRJUgorICBURVhURE9NQUlOPXNoYXJ1dGlscworICBleHBvcnQgVEVYVERPTUFJTgorICBlY2hvPSIkZ2V0dGV4dF9kaXIvZ2V0dGV4dCAtcyIKK2ZpCit0b3VjaCAtYW0gMTIzMTIzNTk5OSAkJC50b3VjaCA+L2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgISAtZiAxMjMxMjM1OTk5ICYmIHRlc3QgLWYgJCQudG91Y2g7IHRoZW4KKyAgc2hhcl90b3VjaD10b3VjaAorZWxzZQorICBzaGFyX3RvdWNoPToKKyAgZWNobworICAkZWNobyAnV0FSTklORzogbm90IHJlc3RvcmluZyB0aW1lc3RhbXBzLiAgQ29uc2lkZXIgZ2V0dGluZyBhbmQnCisgICRlY2hvICJpbnN0YWxsaW5nIEdOVSBcYHRvdWNoJywgZGlzdHJpYnV0ZWQgaW4gR05VIEZpbGUgVXRpbGl0aWVzLi4uIgorICBlY2hvCitmaQorcm0gLWYgMTIzMTIzNTk5OSAkJC50b3VjaAorIworaWYgbWtkaXIgX3NoMDE0MjY7IHRoZW4KKyAgJGVjaG8gJ3ggLScgJ2NyZWF0aW5nIGxvY2sgZGlyZWN0b3J5JworZWxzZQorICAkZWNobyAnZmFpbGVkIHRvIGNyZWF0ZSBsb2NrIGRpcmVjdG9yeScKKyAgZXhpdCAxCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9zZXRkaWdpdGFsLmMgPT09PT09PT09PT09PT0KK2lmIHRlc3QgISAtZCAnTXVsdGlTb3VuZC5kJzsgdGhlbgorICAkZWNobyAneCAtJyAnY3JlYXRpbmcgZGlyZWN0b3J5JyAnTXVsdGlTb3VuZC5kJworICBta2RpciAnTXVsdGlTb3VuZC5kJworZmkKK2lmIHRlc3QgLWYgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICYmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitYICoKK1ggKiBzZXRkaWdpdGFsLmMgLSBzZXRzIHRoZSBESUdJVEFMMSBpbnB1dCBmb3IgYSBtaXhlcgorWCAqCitYICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorWCAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CitYICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKK1ggKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorWCAqCitYICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitYICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK1ggKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitYICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KK1ggKgorWCAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitYICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK1ggKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KK1ggKgorWCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1gKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvc291bmRjYXJkLmg+CitYCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworWAlpbnQgZmQ7CitYCXVuc2lnbmVkIGxvbmcgcmVjbWFzaywgcmVjc3JjOworWAorWAlpZiAoYXJnYyAhPSAyKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBzZXRkaWdpdGFsIDxtaXhlciBkZXZpY2U+XG4iKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSKSkgPCAwKSB7CitYCQlwZXJyb3IoYXJndlsxXSk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWlmIChpb2N0bChmZCwgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLLCAmcmVjbWFzaykgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpb2N0bCByZWFkIHJlY29yZGluZyBtYXNrIGZhaWxlZFxuIik7CitYCQlwZXJyb3IoImlvY3RsIik7CitYCQljbG9zZShmZCk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWlmICghKHJlY21hc2sgJiBTT1VORF9NQVNLX0RJR0lUQUwxKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogY2Fubm90IGZpbmQgRElHSVRBTDEgZGV2aWNlIGluIG1peGVyXG4iKTsKK1gJCWNsb3NlKGZkKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKGlvY3RsKGZkLCBTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQywgJnJlY3NyYykgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpb2N0bCByZWFkIHJlY29yZGluZyBzb3VyY2UgZmFpbGVkXG4iKTsKK1gJCXBlcnJvcigiaW9jdGwiKTsKK1gJCWNsb3NlKGZkKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJcmVjc3JjIHw9IFNPVU5EX01BU0tfRElHSVRBTDE7CitYCQorWAlpZiAoaW9jdGwoZmQsIFNPVU5EX01JWEVSX1dSSVRFX1JFQ1NSQywgJnJlY3NyYykgPCAwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBpb2N0bCB3cml0ZSByZWNvcmRpbmcgc291cmNlIGZhaWxlZFxuIik7CitYCQlwZXJyb3IoImlvY3RsIik7CitYCQljbG9zZShmZCk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWNsb3NlKGZkKTsKK1gJCitYCXJldHVybiAwOworfQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQwOTI1OTggJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnICYmCisgIGNobW9kIDA2NjQgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnIHx8CisgICRlY2hvICdyZXN0b3JlIG9mJyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYycgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmM6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKK2U4NzIxN2ZjM2U3MTI4ODEwMmJhNDFmZDgxZjcxZWM0ICBNdWx0aVNvdW5kLmQvc2V0ZGlnaXRhbC5jCitTSEFSX0VPRgorICBlbHNlCisgICAgc2hhcl9jb3VudD0iYExDX0FMTD0gTENfQ1RZUEU9IExBTkc9IHdjIC1jIDwgJ011bHRpU291bmQuZC9zZXRkaWdpdGFsLmMnYCIKKyAgICB0ZXN0IDIwNDYgLWVxICIkc2hhcl9jb3VudCIgfHwKKyAgICAkZWNobyAnTXVsdGlTb3VuZC5kL3NldGRpZ2l0YWwuYzonICdvcmlnaW5hbCBzaXplJyAnMjA0NiwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9waW5uYWNsZWNmZy5jID09PT09PT09PT09PT09CitpZiB0ZXN0IC1mICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJiYgdGVzdCAiJGZpcnN0X3BhcmFtIiAhPSAtYzsgdGhlbgorICAkZWNobyAneCAtJyBTS0lQUElORyAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAnKHRleHQpJworICBzZWQgJ3MvXlgvLycgPDwgJ1NIQVJfRU9GJyA+ICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJiYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1ggKgorWCAqIHBpbm5hY2xlY2ZnLmMgLSBQaW5uYWNsZS9GaWppIERldmljZSBDb25maWd1cmF0aW9uIFByb2dyYW0KK1ggKgorWCAqIFRoaXMgaXMgZm9yIE5PTi1QblAgbW9kZSBvbmx5LiAgRm9yIFBuUCBtb2RlLCB1c2UgaXNhcG5wdG9vbHMuCitYICoKK1ggKiBUaGlzIGlzIExpbnV4LXNwZWNpZmljLCBhbmQgbXVzdCBiZSBydW4gd2l0aCByb290IHBlcm1pc3Npb25zLgorWCAqCitYICogUGFydCBvZiB0aGUgVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CitYICoKK1ggKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitYICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK1ggKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorWCAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1ggKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorWCAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK1ggKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorWCAqCitYICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK1ggKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorWCAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorWCAqCitYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworWAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KK1gKKyNkZWZpbmUgSVJFR19MT0dERVZJQ0UJCTB4MDcKKyNkZWZpbmUgSVJFR19BQ1RJVkFURQkJMHgzMAorI2RlZmluZSBMRF9BQ1RJVkFURQkJMHgwMQorI2RlZmluZSBMRF9ESVNBQ1RJVkFURQkJMHgwMAorI2RlZmluZSBJUkVHX0VFQ09OVFJPTAkJMHgzRgorI2RlZmluZSBJUkVHX01FTUJBU0VISQkJMHg0MAorI2RlZmluZSBJUkVHX01FTUJBU0VMTwkJMHg0MQorI2RlZmluZSBJUkVHX01FTUNPTlRST0wJCTB4NDIKKyNkZWZpbmUgSVJFR19NRU1SQU5HRUhJCQkweDQzCisjZGVmaW5lIElSRUdfTUVNUkFOR0VMTwkJMHg0NAorI2RlZmluZSBNRU1UWVBFXzhCSVQJCTB4MDAKKyNkZWZpbmUgTUVNVFlQRV8xNkJJVAkJMHgwMgorI2RlZmluZSBNRU1UWVBFX1JBTkdFCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfSElBRERSCQkweDAxCisjZGVmaW5lIElSRUdfSU8wX0JBU0VISQkJMHg2MAorI2RlZmluZSBJUkVHX0lPMF9CQVNFTE8JCTB4NjEKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUhJCQkweDYyCisjZGVmaW5lIElSRUdfSU8xX0JBU0VMTwkJMHg2MworI2RlZmluZSBJUkVHX0lSUV9OVU1CRVIJCTB4NzAKKyNkZWZpbmUgSVJFR19JUlFfVFlQRQkJMHg3MQorI2RlZmluZSBJUlFUWVBFX0hJR0gJCTB4MDIKKyNkZWZpbmUgSVJRVFlQRV9MT1cJCTB4MDAKKyNkZWZpbmUgSVJRVFlQRV9MRVZFTAkJMHgwMQorI2RlZmluZSBJUlFUWVBFX0VER0UJCTB4MDAKK1gKKyNkZWZpbmUgSElCWVRFKHcpCQkoKEJZVEUpKCgoV09SRCkodykgPj4gOCkgJiAweEZGKSkKKyNkZWZpbmUgTE9CWVRFKHcpCQkoKEJZVEUpKHcpKQorI2RlZmluZSBNQUtFV09SRChsb3csaGkpCSgoV09SRCkoKChCWVRFKShsb3cpKXwoKChXT1JEKSgoQllURSkoaGkpKSk8PDgpKSkKK1gKK3R5cGVkZWYgX191OAkJCUJZVEU7Cit0eXBlZGVmIF9fdTE2CQkJVVNIT1JUOwordHlwZWRlZiBfX3UxNgkJCVdPUkQ7CitYCitzdGF0aWMgaW50IGNvbmZpZ19wb3J0ID0gLTE7CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnKGludCBjZmcsIGludCByZWcsIGludCB2YWx1ZSkKK3sKK1gJb3V0YihyZWcsIGNmZyk7CitYCW91dGIodmFsdWUsIGNmZyArIDEpOworWAlpZiAodmFsdWUgIT0gaW5iKGNmZyArIDEpKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtc25kX3dyaXRlX2NmZzogSS9PIGVycm9yXG4iKTsKK1gJCXJldHVybiAtRUlPOworWAl9CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnKGludCBjZmcsIGludCByZWcpCit7CitYCW91dGIocmVnLCBjZmcpOworWAlyZXR1cm4gaW5iKGNmZyArIDEpOworfQorWAorc3RhdGljIGludCBtc25kX3dyaXRlX2NmZ19pbzAoaW50IGNmZywgaW50IG51bSwgV09SRCBpbykKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzBfQkFTRUhJLCBISUJZVEUoaW8pKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8sIExPQllURShpbykpKQorWAkJcmV0dXJuIC1FSU87CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnX2lvMChpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEICppbykKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJCitYCSppbyA9IE1BS0VXT1JEKG1zbmRfcmVhZF9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFTE8pLAorWAkJICAgICAgIG1zbmRfcmVhZF9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFSEkpKTsKK1gKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnX2lvMShpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEIGlvKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMV9CQVNFSEksIEhJQllURShpbykpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTywgTE9CWVRFKGlvKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfcmVhZF9jZmdfaW8xKGludCBjZmcsIGludCBudW0sIFdPUkQgKmlvKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAkKK1gJKmlvID0gTUFLRVdPUkQobXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VMTyksCitYCQkgICAgICAgbXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VISSkpOworWAorWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF93cml0ZV9jZmdfaXJxKGludCBjZmcsIGludCBudW0sIFdPUkQgaXJxKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9OVU1CRVIsIExPQllURShpcnEpKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lSUV9UWVBFLCBJUlFUWVBFX0VER0UpKQorWAkJcmV0dXJuIC1FSU87CitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3JlYWRfY2ZnX2lycShpbnQgY2ZnLCBpbnQgbnVtLCBXT1JEICppcnEpCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCQorWAkqaXJxID0gbXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfSVJRX05VTUJFUik7CitYCitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBtc25kX3dyaXRlX2NmZ19tZW0oaW50IGNmZywgaW50IG51bSwgaW50IG1lbSkKK3sKK1gJV09SRCB3bWVtOworWAorWAltZW0gPj49IDg7CitYCW1lbSAmPSAweGZmZjsKK1gJd21lbSA9IChXT1JEKW1lbTsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEksIEhJQllURSh3bWVtKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFTE8sIExPQllURSh3bWVtKSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKHdtZW0gJiYgbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX01FTUNPTlRST0wsIChNRU1UWVBFX0hJQUREUiB8IE1FTVRZUEVfMTZCSVQpKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF9yZWFkX2NmZ19tZW0oaW50IGNmZywgaW50IG51bSwgaW50ICptZW0pCit7CitYCWlmIChtc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTE9HREVWSUNFLCBudW0pKQorWAkJcmV0dXJuIC1FSU87CitYCQorWAkqbWVtID0gTUFLRVdPUkQobXNuZF9yZWFkX2NmZyhjZmcsIElSRUdfTUVNQkFTRUxPKSwKK1gJCQltc25kX3JlYWRfY2ZnKGNmZywgSVJFR19NRU1CQVNFSEkpKTsKK1gJKm1lbSA8PD0gODsKK1gKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfYWN0aXZhdGVfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0FDVElWQVRFLCBMRF9BQ1RJVkFURSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgaW50IG1zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSwgV09SRCBpbzAsIFdPUkQgaW8xLCBXT1JEIGlycSwgaW50IG1lbSkKK3sKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnX2lvMChjZmcsIG51bSwgaW8wKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF93cml0ZV9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3dyaXRlX2NmZ19pcnEoY2ZnLCBudW0sIGlycSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfd3JpdGVfY2ZnX21lbShjZmcsIG51bSwgbWVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9hY3RpdmF0ZV9sb2dpY2FsKGNmZywgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgbXNuZF9yZWFkX2NmZ19sb2dpY2FsKGludCBjZmcsIGludCBudW0sIFdPUkQgKmlvMCwgV09SRCAqaW8xLCBXT1JEICppcnEsIGludCAqbWVtKQoreworWAlpZiAobXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9yZWFkX2NmZ19pbzAoY2ZnLCBudW0sIGlvMCkpCitYCQlyZXR1cm4gLUVJTzsKK1gJaWYgKG1zbmRfcmVhZF9jZmdfaW8xKGNmZywgbnVtLCBpbzEpKQorWAkJcmV0dXJuIC1FSU87CitYCWlmIChtc25kX3JlYWRfY2ZnX2lycShjZmcsIG51bSwgaXJxKSkKK1gJCXJldHVybiAtRUlPOworWAlpZiAobXNuZF9yZWFkX2NmZ19tZW0oY2ZnLCBudW0sIG1lbSkpCitYCQlyZXR1cm4gLUVJTzsKK1gJcmV0dXJuIDA7Cit9CitYCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworWAlmcHJpbnRmKHN0ZGVyciwKK1gJCSJcbiIKK1gJCSJwaW5uYWNsZWNmZyAxLjBcbiIKK1gJCSJcbiIKK1gJCSJ1c2FnZTogcGlubmFjbGVjZmcgPGNvbmZpZyBwb3J0PiBbZGV2aWNlIGNvbmZpZ11cbiIKK1gJCSJcbiIKK1gJCSJUaGlzIGlzIGZvciB1c2Ugd2l0aCB0aGUgY2FyZCBpbiBOT04tUG5QIG1vZGUgb25seS5cbiIKK1gJCSJcbiIKK1gJCSJBdmFpbGFibGUgZGV2aWNlcyAobm90IGFsbCBhdmFpbGFibGUgZm9yIEZpamkpOlxuIgorWAkJIlxuIgorWAkJIiAgICAgICAgRGV2aWNlICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblxuIgorWAkJIiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorWAkJIiAgICAgICAgcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBhbGwgZGV2aWNlcyAoaS5lLiBkaXNhYmxlKVxuIgorWAkJIiAgICAgICAgc2hvdyAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IGN1cnJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zXG4iCitYCQkiXG4iCitYCQkiICAgICAgICBkc3AgPGlvPiA8aXJxPiA8bWVtPiAgICAgICAgIEF1ZGlvIGRldmljZVxuIgorWAkJIiAgICAgICAgbXB1IDxpbz4gPGlycT4gICAgICAgICAgICAgICBJbnRlcm5hbCBLdXJ6d2VpbCBzeW50aFxuIgorWAkJIiAgICAgICAgaWRlIDxpbzA+IDxpbzE+IDxpcnE+ICAgICAgICBPbi1ib2FyZCBJREUgY29udHJvbGxlclxuIgorWAkJIiAgICAgICAgam95c3RpY2sgPGlvPiAgICAgICAgICAgICAgICBKb3lzdGljayBwb3J0XG4iCitYCQkiXG4iKTsKK1gJZXhpdCgxKTsKK30KK1gKK3N0YXRpYyBpbnQgY2ZnX3Jlc2V0KHZvaWQpCit7CitYCWludCBpOworWAorWAlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorWAkJbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgaSwgMCwgMCwgMCwgMCk7CitYCQorWAlyZXR1cm4gMDsKK30KK1gKK3N0YXRpYyBpbnQgY2ZnX3Nob3codm9pZCkKK3sKK1gJaW50IGk7CitYCWludCBjb3VudCA9IDA7CitYCitYCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKK1gJCVdPUkQgaW8wLCBpbzEsIGlycTsKK1gJCWludCBtZW07CitYCQltc25kX3JlYWRfY2ZnX2xvZ2ljYWwoY29uZmlnX3BvcnQsIGksICZpbzAsICZpbzEsICZpcnEsICZtZW0pOworWAkJc3dpdGNoIChpKSB7CitYCQljYXNlIDA6CitYCQkJaWYgKGlvMCB8fCBpcnEgfHwgbWVtKSB7CitYCQkJCXByaW50ZigiZHNwIDB4JXggJWQgMHgleFxuIiwgaW8wLCBpcnEsIG1lbSk7CitYCQkJCSsrY291bnQ7CitYCQkJfQorWAkJCWJyZWFrOworWAkJY2FzZSAxOgorWAkJCWlmIChpbzAgfHwgaXJxKSB7CitYCQkJCXByaW50ZigibXB1IDB4JXggJWRcbiIsIGlvMCwgaXJxKTsKK1gJCQkJKytjb3VudDsKK1gJCQl9CitYCQkJYnJlYWs7CitYCQljYXNlIDI6CitYCQkJaWYgKGlvMCB8fCBpbzEgfHwgaXJxKSB7CitYCQkJCXByaW50ZigiaWRlIDB4JXggMHgleCAlZFxuIiwgaW8wLCBpbzEsIGlycSk7CitYCQkJCSsrY291bnQ7CitYCQkJfQorWAkJCWJyZWFrOworWAkJY2FzZSAzOgorWAkJCWlmIChpbzApIHsKK1gJCQkJcHJpbnRmKCJqb3lzdGljayAweCV4XG4iLCBpbzApOworWAkJCQkrK2NvdW50OworWAkJCX0KK1gJCQlicmVhazsKK1gJCX0KK1gJfQorWAorWAlpZiAoY291bnQgPT0gMCkKK1gJCWZwcmludGYoc3RkZXJyLCAibm8gZGV2aWNlcyBjb25maWd1cmVkXG4iKTsKK1gJCitYCXJldHVybiAwOworfQorWAorc3RhdGljIGludCBjZmdfZHNwKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CitYCWludCBpbywgaXJxLCBtZW07CitYCitYCWlmIChhcmdjIDwgMyB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlsxXSwgIiVkIiwgJmlycSkgIT0gMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMl0sICIweCV4IiwgJm1lbSkgIT0gMSkKK1gJCXVzYWdlKCk7CitYCitYCWlmICghKGlvID09IDB4MjkwIHx8CitYCSAgICAgIGlvID09IDB4MjYwIHx8CitYCSAgICAgIGlvID09IDB4MjUwIHx8CitYCSAgICAgIGlvID09IDB4MjQwIHx8CitYCSAgICAgIGlvID09IDB4MjMwIHx8CitYCSAgICAgIGlvID09IDB4MjIwIHx8CitYCSAgICAgIGlvID09IDB4MjEwIHx8CitYCSAgICAgIGlvID09IDB4M2UwKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogaW8gbXVzdCBiZSBvbmUgb2YgIgorWAkJCSIyMTAsIDIyMCwgMjMwLCAyNDAsIDI1MCwgMjYwLCAyOTAsIG9yIDNFMFxuIik7CitYCQl1c2FnZSgpOworWAl9CitYCQorWAlpZiAoIShpcnEgPT0gNSB8fAorWAkgICAgICBpcnEgPT0gNyB8fAorWAkgICAgICBpcnEgPT0gOSB8fAorWAkgICAgICBpcnEgPT0gMTAgfHwKK1gJICAgICAgaXJxID09IDExIHx8CitYCSAgICAgIGlycSA9PSAxMikpIHsKK1gJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGlycSBtdXN0IGJlIG9uZSBvZiAiCitYCQkJIjUsIDcsIDksIDEwLCAxMSBvciAxMlxuIik7CitYCQl1c2FnZSgpOworWAl9CitYCitYCWlmICghKG1lbSA9PSAweGIwMDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGM4MDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGQwMDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGQ4MDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGUwMDAwIHx8CitYCSAgICAgIG1lbSA9PSAweGU4MDAwKSkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogbWVtIG11c3QgYmUgb25lIG9mICIKK1gJCQkiMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwgMHhlMDAwMCBvciAweGU4MDAwXG4iKTsKK1gJCXVzYWdlKCk7CitYCX0KK1gKK1gJcmV0dXJuIG1zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY29uZmlnX3BvcnQsIDAsIGlvLCAwLCBpcnEsIG1lbSk7Cit9CitYCitzdGF0aWMgaW50IGNmZ19tcHUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvLCBpcnE7CitYCitYCWlmIChhcmdjIDwgMiB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvKSAhPSAxIHx8CitYCSAgICBzc2NhbmYoYXJndlsxXSwgIiVkIiwgJmlycSkgIT0gMSkKK1gJCXVzYWdlKCk7CitYCQorWAlyZXR1cm4gbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgMSwgaW8sIDAsIGlycSwgMCk7Cit9CitYCitzdGF0aWMgaW50IGNmZ19pZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvMCwgaW8xLCBpcnE7CitYCitYCWlmIChhcmdjIDwgMyB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvMCkgIT0gMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmlvMSkgIT0gMSB8fAorWAkgICAgc3NjYW5mKGFyZ3ZbMV0sICIlZCIsICZpcnEpICE9IDEpCitYCQl1c2FnZSgpOworWAkKK1gJcmV0dXJuIG1zbmRfd3JpdGVfY2ZnX2xvZ2ljYWwoY29uZmlnX3BvcnQsIDIsIGlvMCwgaW8xLCBpcnEsIDApOworfQorWAorc3RhdGljIGludCBjZmdfam95c3RpY2soaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJaW50IGlvOworWAorWAlpZiAoYXJnYyA8IDEgfHwKK1gJICAgIHNzY2FuZihhcmd2WzBdLCAiMHgleCIsICZpbykgIT0gMSkKK1gJCXVzYWdlKCk7CitYCQorWAlyZXR1cm4gbXNuZF93cml0ZV9jZmdfbG9naWNhbChjb25maWdfcG9ydCwgMywgaW8sIDAsIDAsIDApOworfQorWAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKK1gJY2hhciAqZGV2aWNlOworWAlpbnQgcnYgPSAwOworWAorWAktLWFyZ2M7ICsrYXJndjsKK1gKK1gJaWYgKGFyZ2MgPCAyKQorWAkJdXNhZ2UoKTsKK1gKK1gJc3NjYW5mKGFyZ3ZbMF0sICIweCV4IiwgJmNvbmZpZ19wb3J0KTsKK1gJaWYgKGNvbmZpZ19wb3J0ICE9IDB4MjUwICYmIGNvbmZpZ19wb3J0ICE9IDB4MjYwICYmIGNvbmZpZ19wb3J0ICE9IDB4MjcwKSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiA8Y29uZmlnIHBvcnQ+IG11c3QgYmUgMHgyNTAsIDB4MjYwIG9yIDB4MjcwXG4iKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gJaWYgKGlvcGVybShjb25maWdfcG9ydCwgMiwgMSkpIHsKK1gJCXBlcnJvcigiaW9wZXJtIik7CitYCQlmcHJpbnRmKHN0ZGVyciwgIm5vdGU6IHBpbm5hY2xlY2ZnIG11c3QgYmUgcnVuIGFzIHJvb3RcbiIpOworWAkJZXhpdCgxKTsKK1gJfQorWAlkZXZpY2UgPSBhcmd2WzFdOworWAorWAlhcmdjIC09IDI7IGFyZ3YgKz0gMjsKK1gKK1gJaWYgKHN0cmNtcChkZXZpY2UsICJyZXNldCIpID09IDApCitYCQlydiA9IGNmZ19yZXNldCgpOworWAllbHNlIGlmIChzdHJjbXAoZGV2aWNlLCAic2hvdyIpID09IDApCitYCQlydiA9IGNmZ19zaG93KCk7CitYCWVsc2UgaWYgKHN0cmNtcChkZXZpY2UsICJkc3AiKSA9PSAwKQorWAkJcnYgPSBjZmdfZHNwKGFyZ2MsIGFyZ3YpOworWAllbHNlIGlmIChzdHJjbXAoZGV2aWNlLCAibXB1IikgPT0gMCkKK1gJCXJ2ID0gY2ZnX21wdShhcmdjLCBhcmd2KTsKK1gJZWxzZSBpZiAoc3RyY21wKGRldmljZSwgImlkZSIpID09IDApCitYCQlydiA9IGNmZ19pZGUoYXJnYywgYXJndik7CitYCWVsc2UgaWYgKHN0cmNtcChkZXZpY2UsICJqb3lzdGljayIpID09IDApCitYCQlydiA9IGNmZ19qb3lzdGljayhhcmdjLCBhcmd2KTsKK1gJZWxzZSB7CitYCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmtub3duIGRldmljZSAlc1xuIiwgZGV2aWNlKTsKK1gJCXVzYWdlKCk7CitYCX0KK1gKK1gJaWYgKHJ2KQorWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogZGV2aWNlIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKK1gJCitYCXJldHVybiAwOworfQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQwOTI1OTggJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jJyAmJgorICBjaG1vZCAwNjY0ICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgfHwKKyAgJGVjaG8gJ3Jlc3RvcmUgb2YnICdNdWx0aVNvdW5kLmQvcGlubmFjbGVjZmcuYycgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jOicgJ01ENSBjaGVjayBmYWlsZWQnCiszNjZiZGYyN2YwZGI3NjdhM2M3OTIxZDBhNmRiMjBmZSAgTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMKK1NIQVJfRU9GCisgIGVsc2UKKyAgICBzaGFyX2NvdW50PSJgTENfQUxMPSBMQ19DVFlQRT0gTEFORz0gd2MgLWMgPCAnTXVsdGlTb3VuZC5kL3Bpbm5hY2xlY2ZnLmMnYCIKKyAgICB0ZXN0IDEwMjM1IC1lcSAiJHNoYXJfY291bnQiIHx8CisgICAgJGVjaG8gJ011bHRpU291bmQuZC9waW5uYWNsZWNmZy5jOicgJ29yaWdpbmFsIHNpemUnICcxMDIzNSwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9NYWtlZmlsZSA9PT09PT09PT09PT09PQoraWYgdGVzdCAtZiAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAmJiB0ZXN0ICIkZmlyc3RfcGFyYW0iICE9IC1jOyB0aGVuCisgICRlY2hvICd4IC0nIFNLSVBQSU5HICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9NYWtlZmlsZScgJyh0ZXh0KScKKyAgc2VkICdzL15YLy8nIDw8ICdTSEFSX0VPRicgPiAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyAmJgorQ0MJPSBnY2MKK0NGTEFHUwk9IC1PCitQUk9HUwk9IHNldGRpZ2l0YWwgbXNuZHJlc2V0IHBpbm5hY2xlY2ZnIGNvbnYKK1gKK2FsbDogJChQUk9HUykKK1gKK2NsZWFuOgorWAlybSAtZiAkKFBST0dTKQorU0hBUl9FT0YKKyAgJHNoYXJfdG91Y2ggLWFtIDEyMDQwOTIzOTggJ011bHRpU291bmQuZC9NYWtlZmlsZScgJiYKKyAgY2htb2QgMDY2NCAnTXVsdGlTb3VuZC5kL01ha2VmaWxlJyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ011bHRpU291bmQuZC9NYWtlZmlsZScgJ2ZhaWxlZCcKKyAgaWYgKCBtZDVzdW0gLS1oZWxwIDI+JjEgfCBncmVwICdzYWdlOiBtZDVzdW0gXFsnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgKCBtZDVzdW0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC12ICd0ZXh0dXRpbHMgMS4xMicgKSA+L2Rldi9udWxsOyB0aGVuCisgICAgbWQ1c3VtIC1jIDw8IFNIQVJfRU9GID4vZGV2L251bGwgMj4mMSBcCisgICAgfHwgJGVjaG8gJ011bHRpU291bmQuZC9NYWtlZmlsZTonICdNRDUgY2hlY2sgZmFpbGVkJworNzZjYThiYjQ0ZTM4ODJlZGNmNzljOTdkZjZjODE4NDUgIE11bHRpU291bmQuZC9NYWtlZmlsZQorU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdNdWx0aVNvdW5kLmQvTWFrZWZpbGUnYCIKKyAgICB0ZXN0IDEwNiAtZXEgIiRzaGFyX2NvdW50IiB8fAorICAgICRlY2hvICdNdWx0aVNvdW5kLmQvTWFrZWZpbGU6JyAnb3JpZ2luYWwgc2l6ZScgJzEwNiwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorIyA9PT09PT09PT09PT09IE11bHRpU291bmQuZC9jb252LmwgPT09PT09PT09PT09PT0KK2lmIHRlc3QgLWYgJ011bHRpU291bmQuZC9jb252LmwnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9jb252LmwnICcoZmlsZSBhbHJlYWR5IGV4aXN0cyknCitlbHNlCisgICRlY2hvICd4IC0nIGV4dHJhY3RpbmcgJ011bHRpU291bmQuZC9jb252LmwnICcodGV4dCknCisgIHNlZCAncy9eWC8vJyA8PCAnU0hBUl9FT0YnID4gJ011bHRpU291bmQuZC9jb252LmwnICYmCislJQorWyBcblx0LFxyXQorXDsuKgorREIKK1swLTlBLUZhLWZdK0gJeyBpbnQgbjsgc3NjYW5mKHl5dGV4dCwgIiV4SCIsICZuKTsgcHJpbnRmKCIlYyIsIG4pOyB9CislJQoraW50IHl5d3JhcCgpIHsgcmV0dXJuIDE7IH0KK21haW4oKSB7IHl5bGV4KCk7IH0KK1NIQVJfRU9GCisgICRzaGFyX3RvdWNoIC1hbSAwODI4MjMxNzk4ICdNdWx0aVNvdW5kLmQvY29udi5sJyAmJgorICBjaG1vZCAwNjY0ICdNdWx0aVNvdW5kLmQvY29udi5sJyB8fAorICAkZWNobyAncmVzdG9yZSBvZicgJ011bHRpU291bmQuZC9jb252LmwnICdmYWlsZWQnCisgIGlmICggbWQ1c3VtIC0taGVscCAyPiYxIHwgZ3JlcCAnc2FnZTogbWQ1c3VtIFxbJyApID4vZGV2L251bGwgMj4mMSBcCisgICYmICggbWQ1c3VtIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtdiAndGV4dHV0aWxzIDEuMTInICkgPi9kZXYvbnVsbDsgdGhlbgorICAgIG1kNXN1bSAtYyA8PCBTSEFSX0VPRiA+L2Rldi9udWxsIDI+JjEgXAorICAgIHx8ICRlY2hvICdNdWx0aVNvdW5kLmQvY29udi5sOicgJ01ENSBjaGVjayBmYWlsZWQnCitkMjQxMWZjMzJjZDcxYTAwZGNkYzFmMDA5ZTg1OGRkMiAgTXVsdGlTb3VuZC5kL2NvbnYubAorU0hBUl9FT0YKKyAgZWxzZQorICAgIHNoYXJfY291bnQ9ImBMQ19BTEw9IExDX0NUWVBFPSBMQU5HPSB3YyAtYyA8ICdNdWx0aVNvdW5kLmQvY29udi5sJ2AiCisgICAgdGVzdCAxNDEgLWVxICIkc2hhcl9jb3VudCIgfHwKKyAgICAkZWNobyAnTXVsdGlTb3VuZC5kL2NvbnYubDonICdvcmlnaW5hbCBzaXplJyAnMTQxLCcgJ2N1cnJlbnQgc2l6ZScgIiRzaGFyX2NvdW50ISIKKyAgZmkKK2ZpCisjID09PT09PT09PT09PT0gTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jID09PT09PT09PT09PT09CitpZiB0ZXN0IC1mICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICYmIHRlc3QgIiRmaXJzdF9wYXJhbSIgIT0gLWM7IHRoZW4KKyAgJGVjaG8gJ3ggLScgU0tJUFBJTkcgJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgJyhmaWxlIGFscmVhZHkgZXhpc3RzKScKK2Vsc2UKKyAgJGVjaG8gJ3ggLScgZXh0cmFjdGluZyAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jJyAnKHRleHQpJworICBzZWQgJ3MvXlgvLycgPDwgJ1NIQVJfRU9GJyA+ICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICYmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitYICoKK1ggKiBtc25kcmVzZXQuYyAtIHJlc2V0cyB0aGUgTXVsdGlTb3VuZCBjYXJkCitYICoKK1ggKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKK1ggKgorWCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitYICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK1ggKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorWCAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitYICoKK1ggKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK1ggKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorWCAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK1ggKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorWCAqCitYICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK1ggKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorWCAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorWCAqCitYICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworWAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb3VuZGNhcmQuaD4KK1gKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CitYCWludCBmZDsKK1gKK1gJaWYgKGFyZ2MgIT0gMikgeworWAkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogbXNuZHJlc2V0IDxtaXhlciBkZXZpY2U+XG4iKTsKK1gJCWV4aXQoMSk7CitYCX0KK1gKK1gJaWYgKChmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSKSkgPCAwKSB7CitYCQlwZXJyb3IoYXJndlsxXSk7CitYCQlleGl0KDEpOworWAl9CitYCitYCWlmIChpb2N0bChmZCwgU09VTkRfTUlYRVJfUFJJVkFURTEsIDApIDwgMCkgeworWAkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogbXNuZCBpb2N0bCByZXNldCBmYWlsZWRcbiIpOworWAkJcGVycm9yKCJpb2N0bCIpOworWAkJY2xvc2UoZmQpOworWAkJZXhpdCgxKTsKK1gJfQorWAorWAljbG9zZShmZCk7CitYCQorWAlyZXR1cm4gMDsKK30KK1NIQVJfRU9GCisgICRzaGFyX3RvdWNoIC1hbSAxMjA0MTAwNjk4ICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICYmCisgIGNobW9kIDA2NjQgJ011bHRpU291bmQuZC9tc25kcmVzZXQuYycgfHwKKyAgJGVjaG8gJ3Jlc3RvcmUgb2YnICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMnICdmYWlsZWQnCisgIGlmICggbWQ1c3VtIC0taGVscCAyPiYxIHwgZ3JlcCAnc2FnZTogbWQ1c3VtIFxbJyApID4vZGV2L251bGwgMj4mMSBcCisgICYmICggbWQ1c3VtIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtdiAndGV4dHV0aWxzIDEuMTInICkgPi9kZXYvbnVsbDsgdGhlbgorICAgIG1kNXN1bSAtYyA8PCBTSEFSX0VPRiA+L2Rldi9udWxsIDI+JjEgXAorICAgIHx8ICRlY2hvICdNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmM6JyAnTUQ1IGNoZWNrIGZhaWxlZCcKK2M1MmY4NzY1MjEwODRlOGViMjVlMTJlMDFkY2NjYjhhICBNdWx0aVNvdW5kLmQvbXNuZHJlc2V0LmMKK1NIQVJfRU9GCisgIGVsc2UKKyAgICBzaGFyX2NvdW50PSJgTENfQUxMPSBMQ19DVFlQRT0gTEFORz0gd2MgLWMgPCAnTXVsdGlTb3VuZC5kL21zbmRyZXNldC5jJ2AiCisgICAgdGVzdCAxNDcyIC1lcSAiJHNoYXJfY291bnQiIHx8CisgICAgJGVjaG8gJ011bHRpU291bmQuZC9tc25kcmVzZXQuYzonICdvcmlnaW5hbCBzaXplJyAnMTQ3MiwnICdjdXJyZW50IHNpemUnICIkc2hhcl9jb3VudCEiCisgIGZpCitmaQorcm0gLWZyIF9zaDAxNDI2CitleGl0IDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05FV1MgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWUwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ORVdTCkBAIC0wLDAgKzEsNDIgQEAKK0xpbnV4IDIuNCBTb3VuZCBDaGFuZ2VzCisyMDAwLVNlcHRlbWJlci0yNQorQ2hyaXN0b3BoIEhlbGx3aWcsIDxoY2hAaW5mcmFkZWFkLm9yZz4KKworCisKKz09PSBpc2FwbnAgc3VwcG9ydAorCitUaGUgTGludXggMi40IEtlcm5lbCBkb2VzIGhhdmUgcmVsaWFibGUgaW4ta2VybmVsIGlzYXBucCBzdXBwb3J0LgorU29tZSBkcml2ZXJzIChzYi5vLCBhZDE4MTYubyBhd2Vfd2F2ZS5vKSBkbyBub3cgc3VwcG9ydCBhdXRvbWF0aWNhbGx5CitkZXRlY3RpbmcgYW5kIGNvbmZpZ3VyaW5nIGlzYXBucCBkZXZpY2VzLgorSWYgeW91IGhhdmUgYSBub3QgeWV0IHN1cHBvcnRlZCBpc2FwbnAgc291bmRjYXJkLCBtYWlsIG1lIHRoZSBjb250ZW50CitvZiAnL3Byb2MvaXNhcG5wJyBvbiB5b3VyIHN5c3RlbSBhbmQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGNhcmQKK2FuZCBpdHMgZHJpdmVyKHMpIHNvIEkgY2FuIHRyeSB0byBnZXQgaXNhcG5wIHdvcmtpbmcgZm9yIGl0LgorCisKKworPT09IHNvdW5kY2FyZCByZXNvdXJjZXMgb24ga2VybmVsIGNvbW1hbmRsaW5lCisKK0JlZm9yZSBMaW51eCAyLjQgeW91IGhhZCB0byBzcGVjaWZ5IHRoZSByZXNvdXJjZXMgZm9yIHNvdW5kZHJpdmVycworc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUga2VybmVsIGF0IGNvbXBpbGUgdGltZQorKGluIG1ha2UgY29uZmlnL21lbnVjb25maWcveGNvbmZpZykuIEluIExpbnV4IDIuNCB0aGUgcmVzb3VyY2VzIGFyZQorbm93IHNwZWNpZmllZCBhdCB0aGUgYm9vdC10aW1lIGtlcm5lbCBjb21tYW5kbGluZSAoZS5nLiB0aGUgbGlsbworJ2FwcGVuZD0nIGxpbmUgb3IgZXZlcnl0aGluZyB0aGF0J3MgYWZ0ZXIgdGhlIGtlcm5lbCBuYW1lIGluIGdydWIpLgorUmVhZCB0aGUgQ29uZmlndXJlLmhlbHAgZW50cnkgZm9yIHlvdXIgY2FyZCBmb3IgdGhlIHBhcmFtZXRlcnMuCisKKworPT09IHNvZnRvc3MgaXMgZ29uZQorCitJbiBMaW51eCAyLjQgdGhlIHNvZnRvc3MgaW4ta2VybmVsIHNvZnR3YXJlIHN5bnRoZXNpemVyIGlzIG5vIG1vcmUgYXZpYWJsZS4KK1VzZSBhIHVzZXIgc3BhY2Ugc29mdHdhcmUgc3ludGhlc2l6ZXIgbGlrZSB0aW1pZGl0eSBpbnN0ZWFkLgorCisKKworPT09IC9kZXYvc25kc3RhdCBhbmQgL3Byb2Mvc291bmQgYXJlIGdvbmUKKworSW4gb2xkZXIgTGludXggdmVyc2lvbnMgdGhvc2UgZmlsZXMgZXhwb3J0ZWQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK09TUy9GcmVlIGNvbmZpZ3VyYXRpb24gdG8gdXNlcnNwYWNlLiBJbiBMaW51eCAyLjMgdGhleSB3ZXJlIHJlbW92ZWQgYmVjYXVzZQordGhleSBkaWQgbm90IHN1cHBvcnQgdGhlIGdyb3dpbmcgbnVtYmVyIG9mIHBjaSBzb3VuZGNhcmRzIGFuZCB0aGVyZSB3ZXJlCitzb21lIGdlbmVyYWwgcHJvYmxlbXMgd2l0aCB0aGlzIGludGVyZmFjZS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9OTTI1NiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL05NMjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDMyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9OTTI1NgpAQCAtMCwwICsxLDI4MCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIE5lb01hZ2ljIDI1NkFWLzI1NlpYIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UncmUgbG9va2luZyBhdCB2ZXJzaW9uIDEuMSBvZiB0aGUgZHJpdmVyLiAgKFdvb2hvbyEpIEl0IGhhcyBiZWVuCitzdWNjZXNzZnVsbHkgdGVzdGVkIGFnYWluc3QgdGhlIGZvbGxvd2luZyBsYXB0b3AgbW9kZWxzOgorCisJU29ueSBaNTA1Uy9aNTA1U1gvWjUwNURYL1o1MDVSWAorCVNvbnkgRjE1MCwgRjE2MCwgRjE4MCwgRjI1MCwgRjI3MCwgRjI4MCwgUENHLUYyNgorCURlbGwgTGF0aXR1ZGUgQ1BpLCBDUHQgKHZhcmlvdXMgc3VibW9kZWxzKQorCitUaGVyZSBhcmUgYSBmZXcgY2F2ZWF0cywgd2hpY2ggaXMgd2h5IHlvdSBzaG91bGQgcmVhZCB0aGUgZW50aXJldHkgb2YKK3RoaXMgZG9jdW1lbnQgZmlyc3QuCisKK1RoaXMgZHJpdmVyIHdhcyBkZXZlbG9wZWQgd2l0aG91dCBhbnkgc3VwcG9ydCBvciBhc3Npc3RhbmNlIGZyb20KK05lb01hZ2ljLiAgVGhlcmUgaXMgbm8gd2FycmFudHksIGV4cHJlc3NlZCwgaW1wbGllZCwgb3Igb3RoZXJ3aXNlLiAgSXQKK2lzIGZyZWUgc29mdHdhcmUgaW4gdGhlIHB1YmxpYyBkb21haW47IGZlZWwgZnJlZSB0byB1c2UgaXQsIHNlbGwgaXQsCitnaXZlIGl0IHRvIHlvdXIgYmVzdCBmcmllbmRzLCBldmVuIGNsYWltIHRoYXQgeW91IHdyb3RlIGl0IChidXQgd2h5PyEpCitidXQgZG9uJ3QgZ28gd2hpbmluZyB0byBtZSwgTmVvTWFnaWMsIFNvbnksIERlbGwsIG9yIGFueW9uZSBlbHNlCit3aGVuIGl0IGJsb3dzIHVwIHlvdXIgY29tcHV0ZXIuCisKK1ZlcnNpb24gMS4xIGNvbnRhaW5zIGEgY2hhbmdlIHRvIHRyeSBhbmQgZGV0ZWN0IG5vbi1BQzk3IHZlcnNpb25zIG9mCit0aGUgaGFyZHdhcmUsIGFuZCBub3QgaW5zdGFsbCBpdHNlbGYgYXBwcm9wcmlhdGVseS4gIEl0IHNob3VsZCBhbHNvCityZWluaXRpYWxpemUgdGhlIGhhcmR3YXJlIG9uIGFuIEFQTSByZXN1bWUgZXZlbnQsIGFzc3VtaW5nIHRoYXQgQVBNCit3YXMgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsLgorCis9PT09PT09PT09PT0KK0luc3RhbGxhdGlvbgorPT09PT09PT09PT09CisKK0VuYWJsZSB0aGUgc291bmQgZHJpdmVycywgdGhlIE9TUyBzb3VuZCBkcml2ZXJzLCBhbmQgdGhlbiB0aGUgTk0yNTYKK2RyaXZlci4gIFRoZSBOTTI1NiBkcml2ZXIgKm11c3QqIGJlIGNvbmZpZ3VyZWQgYXMgYSBtb2R1bGUgKGl0IHdvbid0CitnaXZlIHlvdSBhbnkgb3RoZXIgY2hvaWNlKS4KKworTmV4dCwgZG8gdGhlIHVzdWFsICJtYWtlIG1vZHVsZXMiIGFuZCAibWFrZSBtb2R1bGVzX2luc3RhbGwiLgorRmluYWxseSwgaW5zbW9kIHRoZSBzb3VuZGNvcmUsIHNvdW5kIGFuZCBubTI1NiBtb2R1bGVzLgorCitXaGVuIHRoZSBubTI1NiBkcml2ZXIgbW9kdWxlIGlzIGxvYWRlZCwgeW91IHNob3VsZCBzZWUgYSBjb3VwbGUgb2YKK2NvbmZpcm1hdGlvbiBtZXNzYWdlcyBpbiB0aGUga2VybmVsIGxvZ2ZpbGUgaW5kaWNhdGluZyB0aGF0IGl0IGZvdW5kCit0aGUgZGV2aWNlICh0aGUgZGV2aWNlIGRvZXMgKm5vdCogdXNlIGFueSBJL08gcG9ydHMgb3IgRE1BIGNoYW5uZWxzKS4KK05vdyB0cnkgcGxheWluZyBhIHdhdiBmaWxlLCBmdXR6IHdpdGggdGhlIENELVJPTSBpZiB5b3UgaGF2ZSBvbmUsIGV0Yy4KKworVGhlIE5NMjU2IGlzIGVudGlyZWx5IGEgUENJLWJhc2VkIGRldmljZSwgYW5kIGFsbCB0aGUgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiBpcyBhdXRvbWF0aWNhbGx5IG9idGFpbmVkIGZyb20gdGhlIGNhcmQuICBJdCBjYW4gb25seSBiZQorY29uZmlndXJlZCBhcyBhIG1vZHVsZSBpbiBhIHZhaW4gYXR0ZW1wdCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tCitodXJ0aW5nIHRoZW1zZWx2ZXMuICBJdCB3b3JrcyBjb3JyZWN0bHkgaWYgaXQgc2hhcmVzIGFuIElSUSB3aXRoCithbm90aGVyIGRldmljZSAoaXQgbm9ybWFsbHkgc2hhcmVzIElSUSA5IHdpdGggdGhlIGJ1aWx0aW4gZWVwcm8xMDAKK2V0aGVybmV0IG9uIHRoZSBTb255IFo1MDUgbGFwdG9wcykuIAorCitJdCBkb2VzIG5vdCBydW4gdGhlIGNhcmQgaW4gYW55IHNvcnQgb2YgY29tcGF0aWJpbGl0eSBtb2RlLiBJdCB3aWxsCitub3Qgd29yayBvbiBsYXB0b3BzIHRoYXQgaGF2ZSB0aGUgU0IxNi1jb21wYXRpYmxlLCBBRDE4NDgtY29tcGF0aWJsZQorb3IgQ1M0MjMyLWNvbXBhdGlibGUgY29kZWMvbWl4ZXI7IHlvdSB3aWxsIHdhbnQgdG8gdXNlIHRoZSBhcHByb3ByaWF0ZQorY29tcGF0aWJsZSBPU1MgZHJpdmVyIHdpdGggdGhlc2UgY2hpcHNldHMuICBJIGNhbm5vdCBwcm92aWRlIGFueQorYXNzaXN0YW5jZSB3aXRoIG1hY2hpbmVzIHVzaW5nIHRoZSBTQjE2LCBBRDE4NDggb3IgQ1M0MjMyIGNvbXBhdGlibGUKK3ZlcnNpb25zLiAgKFRoZSBkcml2ZXIgbm93IGF0dGVtcHRzIHRvIGRldGVjdCB0aGUgbWl4ZXIgdmVyc2lvbiwgYW5kCit3aWxsIHJlZnVzZSB0byBsb2FkIGlmIGl0IGJlbGlldmVzIHRoZSBoYXJkd2FyZSBpcyBub3QKK0FDOTctY29tcGF0aWJsZS4pCisKK1RoZSBzb3VuZCBzdXBwb3J0IGlzIHZlcnkgYmFzaWMsIGJ1dCBpdCBkb2VzIGluY2x1ZGUgc2ltdWx0YW5lb3VzCitwbGF5YmFjayBhbmQgcmVjb3JkIGNhcGFiaWxpdHkuICBUaGUgbWl4ZXIgc3VwcG9ydCBpcyBhbHNvIHF1aXRlCitzaW1wbGUsIGFsdGhvdWdoIHRoaXMgaXMgaW4ga2VlcGluZyB3aXRoIHRoZSByYXRoZXIgbGltaXRlZAorZnVuY3Rpb25hbGl0eSBvZiB0aGUgY2hpcHNldC4KKworVGhlcmUgaXMgbm8gaGFyZHdhcmUgc3ludGhlc2l6ZXIgYXZhaWxhYmxlLCBhcyB0aGUgTG9zZWRvd3MgT1BMLTMgYW5kCitNSURJIHN1cHBvcnQgaXMgZG9uZSB2aWEgaGFyZHdhcmUgZW11bGF0aW9uLgorCitPbmx5IHRocmVlIHJlY29yZGluZyBkZXZpY2VzIGFyZSBhdmFpbGFibGUgb24gdGhlIFNvbnk6IHRoZQorbWljcm9waG9uZSwgdGhlIENELVJPTSBpbnB1dCwgYW5kIHRoZSB2b2x1bWUgZGV2aWNlICh3aGljaCBjb3JyZXNwb25kcwordG8gdGhlIHN0ZXJlbyBvdXRwdXQpLiAgKE90aGVyIGRldmljZXMgbWF5IGJlIGF2YWlsYWJsZSBvbiBvdGhlcgorbW9kZWxzIG9mIGxhcHRvcHMuKSAgVGhlIFo1MDUgc2VyaWVzIGRvZXMgbm90IGhhdmUgYSBidWlsdGluIENELVJPTSwKK3NvIG9mIGNvdXJzZSB0aGUgQ0QtUk9NIGlucHV0IGRvZXNuJ3Qgd29yay4gIEl0IGRvZXMgd29yayBvbiBsYXB0b3BzCit3aXRoIGEgYnVpbHRpbiBDRC1ST00gZHJpdmUuCisKK1RoZSBtaXhlciBkZXZpY2UgZG9lcyBub3QgYXBwZWFyIHRvIGhhdmUgYW55IHRvbmUgY29udHJvbHMsIGF0IGxlYXN0CitvbiB0aGUgWjUwNSBzZXJpZXMuICBUaGUgbWl4ZXIgbW9kdWxlIGNoZWNrcyBmb3IgdG9uZSBjb250cm9scyBpbiB0aGUKK0FDOTcgbWl4ZXIsIGFuZCB3aWxsIGVuYWJsZSB0aGVtIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4KKworPT09PT09PT09PT09PT0KK0tub3duIHByb2JsZW1zCis9PT09PT09PT09PT09PQorCisgICogVGhlcmUgYXJlIGtub3duIHByb2JsZW1zIHdpdGggUENNQ0lBIGNhcmRzIGFuZCB0aGUgZWVwcm8xMDAgZXRoZXJuZXQgCisgICAgZHJpdmVyIG9uIHRoZSBaNTA1Uy9aNTA1U1gvWjUwNURYLiAgS2VlcCByZWFkaW5nLgorCisgICogVGhlcmUgYXJlIGFsc28gcG90ZW50aWFsIHByb2JsZW1zIHdpdGggdXNpbmcgYSB2aXJ0dWFsIFggZGlzcGxheSwgYW5kCisgICAgYWxzbyBwcm9ibGVtcyBsb2FkaW5nIHRoZSBtb2R1bGUgYWZ0ZXIgdGhlIFggc2VydmVyIGhhcyBiZWVuIHN0YXJ0ZWQuIAorICAgIEtlZXAgcmVhZGluZy4KKworICAqIFRoZSB2b2x1bWUgY29udHJvbCBpc24ndCBhbnl3aGVyZSBuZWFyIGxpbmVhci4gIFNvcnJ5LiAgVGhpcyB3aWxsIGJlCisgICAgZml4ZWQgZXZlbnR1YWxseSwgd2hlbiBJIGdldCBzdWZmaWNpZW50bHkgYW5ub3llZCB3aXRoIGl0LiAgKEkgZG91YnQKKyAgICBpdCB3aWxsIGV2ZXIgYmUgZml4ZWQgbm93LCBzaW5jZSBJJ3ZlIG5ldmVyIGdvdHRlbiBzdWZmaWNpZW50bHkKKyAgICBhbm5veWVkIHdpdGggaXQgYW5kIG5vYm9keSBlbHNlIHNlZW1zIHRvIGNhcmUuKQorCisgICogVGhlcmUgYXJlIHJlcG9ydHMgdGhhdCB0aGUgQ0QtUk9NIHZvbHVtZSBpcyB2ZXJ5IGxvdy4gIFNpbmNlIEkgZG8gbm90CisgICAgaGF2ZSBhIENELVJPTSBlcXVpcHBlZCBsYXB0b3AsIEkgY2Fubm90IHRlc3QgdGhpcyAoaXQncyBraW5kYSBoYXJkIHRvCisgICAgZG8gcmVtb3RlbHkpLgorCisgICogT25seSA4IGZpeGVkLXJhdGUgc3BlZWRzIGFyZSBzdXBwb3J0ZWQuICBUaGlzIGlzIG1haW5seSBhIGNoaXBzZXQKKyAgICBsaW1pdGF0aW9uLiAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIHN1cHBvcnQgb3RoZXIgc3BlZWRzIGluIHRoZSBmdXR1cmUuCisKKyAgKiBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciB0aGUgdGVsZXBob25lIG1peGVyL2NvZGVjLiAgVGhlcmUgaXMgc3VwcG9ydAorICAgIGZvciBhIHBob25laW4vcGhvbmVvdXQgZGV2aWNlIGluIHRoZSBtaXhlciBkcml2ZXI7ICB3aGV0aGVyIG9yIG5vdCAKKyAgICBpdCBkb2VzIGFueXRoaW5nIGlzIGFueW9uZSdzIGd1ZXNzLiAgKFJlcG9ydHMgb24gdGhpcyB3b3VsZCBiZQorICAgIGFwcHJlY2lhdGVkLiAgWW91J2xsIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBwaG9uZSB0bworICAgIGdvIG9mZi1ob29rIGJlZm9yZSBpdCdsbCB3b3JrLCB0aG8uKQorCisgICogVGhpcyBkcml2ZXIgd2FzIG5vdCB3cml0dGVuIHdpdGggYW55IGNvb3BlcmF0aW9uIG9yIHN1cHBvcnQgZnJvbQorICAgIE5lb01hZ2ljLiAgSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGlzLCBzZWUgdGhlaXIgd2Vic2l0ZQorICAgIGZvciB0aGVpciBvZmZpY2lhbCBzdGFuY2Ugb24gc3VwcG9ydGluZyBvcGVuIHNvdXJjZSBkcml2ZXJzLgorCis9PT09PT09PT09PT0KK1ZpZGVvIG1lbW9yeQorPT09PT09PT09PT09CisKK1RoZSBOZW9NYWdpYyBzb3VuZCBlbmdpbmUgdXNlcyBhIHBvcnRpb24gb2YgdGhlIGRpc3BsYXkgbWVtb3J5IHRvIGhvbGQKK3RoZSBzb3VuZCBidWZmZXIuICAoQ3JhenksIGVoPykgIFRoZSBOZW9NYWdpYyB2aWRlbyBCSU9TIHNldHMgdXAgYQorc3BlY2lhbCBwb2ludGVyIGF0IHRoZSB0b3Agb2YgdmlkZW8gUkFNIHRvIGluZGljYXRlIHdoZXJlIHRoZSB0b3Agb2YKK3RoZSBhdWRpbyBidWZmZXIgc2hvdWxkIGJlIHBsYWNlZC4KKworQXQgdGhlIHByZXNlbnQgdGltZSBYRnJlZTg2IGlzIGFwcGFyZW50bHkgbm90IGF3YXJlIG9mIHRoaXMuICBJdCB3aWxsCit0aHVzIHdyaXRlIG92ZXIgZWl0aGVyIHRoZSBwb2ludGVyIG9yIHRoZSBzb3VuZCBidWZmZXIgd2l0aCBhYmFuZG9uLgorKEFjY2VsZXJhdGVkLVggc2VlbXMgdG8gZG8gYSBiZXR0ZXIgam9iIGhlcmUuKQorCitUaGlzIGltcGxpZXMgYSBmZXcgdGhpbmdzOgorCisgICogU29tZXRpbWVzIHRoZSBOTTI1NiBkcml2ZXIgaGFzIHRvIGd1ZXNzIGF0IHdoZXJlIHRoZSBidWZmZXIgCisgICAgc2hvdWxkIGJlIHBsYWNlZCwgZXNwZWNpYWxseSBpZiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBhZnRlciB0aGUKKyAgICBYIHNlcnZlciBpcyBzdGFydGVkLiAgSXQncyB1c3VhbGx5IGNvcnJlY3QsIGJ1dCBpdCB3aWxsIGNvbnNpc3RlbnRseQorICAgIGZhaWwgb24gdGhlIFNvbnkgRjI1MC4KKworICAqIFZpcnR1YWwgc2NyZWVucyBncmVhdGVyIHRoYW4gMTAyNHg3Njh4MTYgdW5kZXIgWEZyZWU4NiBhcmUKKyAgICBwcm9ibGVtYXRpYyBvbiBsYXB0b3BzIHdpdGggb25seSAyLjVNQiBvZiBzY3JlZW4gUkFNLiBUaGlzCisgICAgaW5jbHVkZXMgYWxsIG9mIHRoZSAyNTZBVi1lcXVpcHBlZCBsYXB0b3BzLiAgKFZpcnR1YWwgZGlzcGxheXMKKyAgICBtYXkgb3IgbWF5IG5vdCB3b3JrIG9uIHRoZSAyNTZaWCwgd2hpY2ggaGFzIGF0IGxlYXN0IDRNQiBvZgorICAgIHZpZGVvIFJBTS4pCisKK0lmIHlvdSBzdGFydCBoYXZpbmcgcHJvYmxlbXMgd2l0aCByYW5kb20gbm9pc2UgYmVpbmcgb3V0cHV0IGVpdGhlcgorY29uc3RhbnRseSAodGhpcyBpcyB0aGUgdXN1YWwgc3ltcHRvbSBvbiB0aGUgRjI1MCksIG9yIHdoZW4gd2luZG93cworYXJlIG1vdmVkIGFyb3VuZCAodGhpcyBpcyB0aGUgdXN1YWwgc3ltcHRvbSB3aGVuIHVzaW5nIGEgdmlydHVhbAorc2NyZWVuKSwgdGhlIGJlc3QgZml4IGlzIHRvCisKKyAgKiBEb24ndCB1c2UgYSB2aXJ0dWFsIGZyYW1lIGJ1ZmZlci4KKyAgKiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIE5NMjU2IG1vZHVsZSBiZWZvcmUgdGhlIFggc2VydmVyIGlzCisgICAgc3RhcnRlZC4KKworT24gdGhlIEYyNTAsIGl0IGlzIHBvc3NpYmxlIHRvIGZvcmNlIHRoZSBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSBldmVuCithZnRlciB0aGUgWEZyZWU4NiBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBkb2luZzoKKworCWluc21vZCBubTI1NiBidWZmZXJ0b3A9MHgyNWE4MDAKKworVGhpcyBmb3JjZXMgdGhlIGF1ZGlvIGJ1ZmZlcnMgdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0IGluIHNjcmVlbiBSQU0uCisKK09uZSB1c2VyIGhhcyByZXBvcnRlZCBhIHNpbWlsYXIgcHJvYmxlbSBvbiB0aGUgU29ueSBGMjcwLCBhbHRob3VnaAorb3RoZXJzIGFwcGFyZW50bHkgYXJlbid0IHNlZWluZyBhbnkgcHJvYmxlbXMuICBIaXMgc3VnZ2VzdGVkIGNvbW1hbmQKK2lzCisKKwlpbnNtb2Qgbm0yNTYgYnVmZmVydG9wPTB4MjcyODAwCisKKz09PT09PT09PT09PT09PT09CitPZmZpY2lhbCBXV1cgc2l0ZQorPT09PT09PT09PT09PT09PT0KKworVGhlIG9mZmljaWFsIHNpdGUgZm9yIHRoZSBOTTI1NiBkcml2ZXIgaXM6CisKKwlodHRwOi8vd3d3LnVnbHgub3JnL3NvbnkuaHRtbAorCitZb3Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciB0aGVyZSwKK2FuZCB0aGUgZHJpdmVyIHdpbGwgYmUgc3VwcG9ydGVkIGZvciB0aGUgZm9yZXNlZWFibGUgZnV0dXJlLgorCis9PT09PT09PT09PT09PQorWjUwNVJYIGFuZCBJREUKKz09PT09PT09PT09PT09CisKK1RoZXJlIGFwcGVhcnMgdG8gYmUgYSBwcm9ibGVtIHdpdGggdGhlIElERSBjaGlwc2V0IG9uIHRoZSBaNTA1Ulg7IG9uZQorb2YgdGhlIHN5bXB0b21zIGlzIHRoYXQgc291bmQgcGxheWJhY2sgcGVyaW9kaWNhbGx5IGhhbmdzICh3aGVuIHRoZQorZGlzayBpcyBhY2Nlc3NlZCkuICBUaGUgdXNlciByZXBvcnRpbmcgdGhlIHByb2JsZW0gYWxzbyByZXBvcnRlZCB0aGF0CitlbmFibGluZyBhbGwgb2YgdGhlIElERSBjaGlwc2V0IHdvcmthcm91bmRzIGluIHRoZSBrZXJuZWwgc29sdmVkIHRoZQorcHJvYmxlbSwgdGhvIG9idmlvdXNseSBvbmx5IG9uZSBvZiB0aGVtIHNob3VsZCBiZSBuZWVkZWQtLWlmIHNvbWVvbmUKK2NhbiBnaXZlIG1lIG1vcmUgZGV0YWlscyBJIHdvdWxkIGFwcHJlY2lhdGUgaXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorWjUwNVMvWjUwNVNYIG9uLWJvYXJkIEV0aGVybmV0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91J3JlIHVzaW5nIHRoZSBvbi1ib2FyZCBFdGhlcm5ldCBQcm8vMTAwIGV0aGVybmV0IHN1cHBvcnQgb24gdGhlIFo1MDUKK3NlcmllcywgSSBzdHJvbmdseSBlbmNvdXJhZ2UgeW91IHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgZWVwcm8xMDAgZHJpdmVyIGZyb20KK0RvbmFsZCBCZWNrZXIncyBzaXRlOgorCisJZnRwOi8vY2VzZGlzLmdzZmMubmFzYS5nb3YvcHViL2xpbnV4L2RyaXZlcnMvdGVzdC9lZXBybzEwMC5jCisKK1RoZXJlIHdhcyBhIHJlcG9ydGVkIHByb2JsZW0gb24gdGhlIFo1MDVTWCB0aGF0IGlmIHRoZSBldGhlcm5ldAoraW50ZXJmYWNlIGlzIGRpc2FibGVkIGFuZCByZWVuYWJsZWQgd2hpbGUgdGhlIHNvdW5kIGRyaXZlciBpcyBsb2FkZWQsCit0aGUgbWFjaGluZSB3b3VsZCBsb2NrIHVwLiAgSSBoYXZlIGluY2x1ZGVkIGEgd29ya2Fyb3VuZCB0aGF0IGlzCit3b3JraW5nIHNhdGlzZmFjdG9yaWx5LiAgSG93ZXZlciwgeW91IG1heSBvY2Nhc2lvbmFsbHkgc2VlIGEgbWVzc2FnZQorYWJvdXQgIlJlbGVhc2luZyBpbnRlcnJ1cHRzLCBvdmVyIDEwMDAgYmFkIGludGVycnVwdHMiIHdoaWNoIGluZGljYXRlcwordGhhdCB0aGUgd29ya2Fyb3VuZCBpcyBkb2luZyBpdHMgam9iLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitQQ01DSUEgYW5kIHRoZSBaNTA1Uy9aNTA1U1gvWjUwNURYCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGlzIGFsc28gYSBrbm93biBwcm9ibGVtIHdpdGggdGhlIFNvbnkgWjUwNVMgYW5kIFo1MDVTWCBoYW5naW5nCitpZiBhIFBDTUNJQSBjYXJkIGlzIGluc2VydGVkIHdoaWxlIHRoZSBldGhlcm5ldCBkcml2ZXIgaXMgbG9hZGVkLCBvcgoraW4gc29tZSBjYXNlcyBpZiB0aGUgbGFwdG9wIGlzIHN1c3BlbmRlZC4gIFRoaXMgaXMgY2F1c2VkIGJ5IHRvbnMgb2YKK3NwdXJpb3VzIElSUSA5cywgcHJvYmFibHkgZ2VuZXJhdGVkIGZyb20gdGhlIFBDTUNJQSBvciBBQ1BJIGJyaWRnZXMuCisKK1RoZXJlIGlzIGN1cnJlbnRseSBubyBmaXggZm9yIHRoZSBwcm9ibGVtIHRoYXQgd29ya3MgaW4gZXZlcnkgY2FzZS4KK1RoZSBvbmx5IGtub3duIHdvcmthcm91bmRzIGFyZSB0byBkaXNhYmxlIHRoZSBldGhlcm5ldCBpbnRlcmZhY2UKK2JlZm9yZSBpbnNlcnRpbmcgb3IgcmVtb3ZpbmcgYSBQQ01DSUEgY2FyZCwgb3Igd2l0aCBzb21lIGNhcmRzCitkaXNhYmxpbmcgdGhlIFBDTUNJQSBjYXJkIGJlZm9yZSBlamVjdGluZyBpdCB3aWxsIGFsc28gaGVscCB0aGUKK3Byb2JsZW0gd2l0aCB0aGUgbGFwdG9wIGhhbmdpbmcgd2hlbiB0aGUgY2FyZCBpcyBlamVjdGVkLgorCitPbmUgdXNlciBoYXMgcmVwb3J0ZWQgdGhhdCBzZXR0aW5nIHRoZSB0Y2ljJ3MgY3NfaXJxIHRvIHNvbWUgdmFsdWUKK290aGVyIHRoYW4gOSAobGlrZSAxMSkgZml4ZWQgdGhlIHByb2JsZW0uICBUaGlzIGRvZXNuJ3Qgd29yayBvbiBteQorWjUwNVMsIGhvd2V2ZXItLWNoYW5naW5nIHRoZSB2YWx1ZSBjYXVzZXMgdGhlIGNhcmRtZ3IgdG8gc3RvcCBzZWVpbmcKK2NhcmQgaW5zZXJ0aW9ucyBhbmQgcmVtb3ZhbHMsIGNhcmRzIGRvbid0IHNlZW0gdG8gd29yayBjb3JyZWN0bHksIGFuZAorSSBzdGlsbCBnZXQgaGFuZ3MgaWYgYSBjYXJkIGlzIGluc2VydGVkIHdoZW4gdGhlIGtlcm5lbCBpcyBib290ZWQuCisKK1VzaW5nIHRoZSBsYXRlc3QgZXRoZXJuZXQgZHJpdmVyIGFuZCBwY21jaWEgcGFja2FnZSBhbGxvd3MgbWUgdG8KK2luc2VydCBhbiBBZGFwdGVjIDE0ODBBIFNsaW1TY3NpIGNhcmQgd2l0aG91dCB0aGUgbGFwdG9wIGhhbmdpbmcsCithbHRob3VnaCBJIHN0aWxsIGhhdmUgdG8gc2h1dCBkb3duIHRoZSBjYXJkIGJlZm9yZSBlamVjdGluZyBvcgorcG93ZXJpbmcgZG93biB0aGUgbGFwdG9wLiAgSG93ZXZlciwgc2ltaWxhciBleHBlcmltZW50cyB3aXRoIGEgREUtNjYwCitldGhlcm5ldCBjYXJkIHN0aWxsIHJlc3VsdCBpbiBoYW5ncyB3aGVuIHRoZSBjYXJkIGlzIGluc2VydGVkLiAgSSBhbQorYmVnaW5uaW5nIHRvIHRoaW5rIHRoYXQgdGhlIGludGVycnVwdHMgYXJlIENhcmRCdXMtcmVsYXRlZCwgc2luY2UgdGhlCitBZGFwdGVjIGNhcmQgaXMgYSBDYXJkQnVzIGNhcmQsIGFuZCB0aGUgREUtNjYwIGlzIG5vdDsgaG93ZXZlciwgSQorZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgQ2FyZEJ1cyBjYXJkcyB0byB0ZXN0IHdpdGguCisKKz09PT09PQorVGhhbmtzCis9PT09PT0KKworRmlyc3QsIEkgd2FudCB0byB0aGFuayBldmVyeW9uZSAoZXhjZXB0IE5lb01hZ2ljIG9mIGNvdXJzZSkgZm9yIHRoZWlyCitnZW5lcm91cyBzdXBwb3J0IGFuZCBlbmNvdXJhZ2VtZW50LiAgSSdkIGxpa2UgdG8gbGlzdCBldmVyeW9uZSdzIG5hbWUKK2hlcmUgdGhhdCByZXBsaWVkIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgcGhhc2UsIGJ1dCB0aGUgbGlzdCBpcworYW1hemluZ2x5IGxvbmcuCisKK0kgd2lsbCBiZSByYXRoZXIgdW5mYWlyIGFuZCBzaW5nbGUgb3V0IGEgZmV3IHBlb3BsZSwgaG93ZXZlcjoKKworCUp1c3RpbiBNYXVyZXIsIGZvciBiZWluZyB0aGUgZmlyc3QgcmFuZG9tIG5ldC5wZXJzb24gdG8gdHJ5IGl0LAorCWFuZCBmb3IgbGV0dGluZyBtZSBsb2dpbiB0byBoaXMgWjUwNVNYIHRvIGdldCBpdCB3b3JraW5nIHRoZXJlCisKKwlFZGkgV2VpdHogZm9yIHRyeWluZyBvdXQgc2V2ZXJhbCBkaWZmZXJlbnQgdmVyc2lvbnMsIGFuZCBnaXZpbmcKKwltZSBhIGxvdCBvZiB1c2VmdWwgZmVlZGJhY2sKKworCUdyZWcgUnVtcGxlIGZvciBsZXR0aW5nIG1lIGxvZ2luIHJlbW90ZWx5IHRvIGdldCB0aGUgZHJpdmVyIAorCWZ1bmN0aW9uYWwgb24gdGhlIDI1NlpYLCBmb3IgaGlzIGFzc2lzdGFuY2Ugb24gdHJhY2tpbmcKKwlkb3duIGFsbCBzb3J0cyBvZiByYW5kb20gc3R1ZmYsIGFuZCBmb3IgdHJ5aW5nIG91dCBBY2NlbC1YCisKKwlaYWNoIEJyb3duLCBmb3IgdGhlIGluaXRpYWwgQUM5NyBtaXhlciBpbnRlcmZhY2UgZGVzaWduCisKKwlKZWZmIEdhcnppaywgZm9yIHZhcmlvdXMgaGVscGZ1bCBzdWdnZXN0aW9ucyBvbiB0aGUgQUM5NworCWludGVyZmFjZQorCisJIk1yLiBCdW1weSIgZm9yIGZlZWRiYWNrIG9uIHRoZSBaNTA1UlgKKworCUJpbGwgTm90dGluZ2hhbSwgZm9yIGdlbmVyb3VzIGFzc2lzdGFuY2UgaW4gZ2V0dGluZyB0aGUgbWl4ZXIgSUQKKwljb2RlIHdvcmtpbmcKKworPT09PT09PT09PT09PT09PT0KK1ByZXZpb3VzIHZlcnNpb25zCis9PT09PT09PT09PT09PT09PQorCitWZXJzaW9ucyBwcmlvciB0byAwLjMgKGFrYSBgbm9uYW1lJykgaGFkIHByb2JsZW1zIHdpdGggd2VpcmQgYXJ0aWZhY3RzCitpbiB0aGUgb3V0cHV0IGFuZCBmYWlsZWQgdG8gc2V0IHRoZSByZWNvcmRpbmcgcmF0ZSBwcm9wZXJseS4gIFRoZXNlCitwcm9ibGVtcyBoYXZlIGxvbmcgc2luY2UgYmVlbiBmaXhlZC4KKworVmVyc2lvbnMgcHJpb3IgdG8gMC41IGhhZCBwcm9ibGVtcyB3aXRoIGNsaWNrcyBpbiB0aGUgb3V0cHV0IHdoZW4KK2FueXRoaW5nIG90aGVyIHRoYW4gMTYtYml0IHN0ZXJlbyBzb3VuZCB3YXMgYmVpbmcgcGxheWVkLCBhbmQgYWxzbyBoYWQKK3BlcmlvZGljIGNsaWNrcyB3aGVuIHJlY29yZGluZy4KKworVmVyc2lvbiAwLjcgZmlyc3QgaW5jb3Jwb3JhdGVkIHN1cHBvcnQgZm9yIHRoZSBOTTI1NlpYIGNoaXBzZXQsIHdoaWNoCitpcyBmb3VuZCBvbiBzb21lIERlbGwgTGF0aXR1ZGUgbGFwdG9wcyAodGhlIENQdCwgYW5kIGFwcGFyZW50bHkKK3NvbWUgQ1BpIG1vZGVscyBhcyB3ZWxsKS4gIEl0IGFsc28gaW5jbHVkZWQgdGhlIGdlbmVyaWMgQUM5NworbWl4ZXIgbW9kdWxlLgorCitWZXJzaW9uIDAuNzUgcmVuYW1lZCBhbGwgdGhlIGZ1bmN0aW9ucyBhbmQgZmlsZXMgd2l0aCBzbGlnaHRseSBtb3JlCitnZW5lcmljIG5hbWVzLgorCitOb3RlIHRoYXQgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkb2N1bWVudCBjbGFpbWVkIHRoYXQgcmVjb3JkaW5nIHdhcworOC1iaXQgb25seTsgaXQgYWN0dWFsbHkgaGFzIGJlZW4gd29ya2luZyBmb3IgMTYtYml0cyBhbGwgYWxvbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDY4ZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMwpAQCAtMCwwICsxLDYgQEAKK0EgcHVyZSBPUEwzIGNhcmQgaXMgbmljZSBhbmQgZWFzeSB0byBjb25maWd1cmUuIFNpbXBseSBkbworCitpbnNtb2Qgb3BsMyBpbz0weDM4OAorCitDaGFuZ2UgdGhlIEkvTyBhZGRyZXNzIGluIHRoZSB2ZXJ5IHVubGlrZWx5IGNhc2UgdGhpcyBjYXJkIGlzIGRpZmZlcmVudGx5Citjb25maWd1cmVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9PUEwzLVNBIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE5MTgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQQpAQCAtMCwwICsxLDUyIEBACitPUEwzLVNBMSBzb3VuZCBkcml2ZXIgKG9wbDNzYS5vKQorCistLS0KK05vdGU6IFRoaXMgaG93dG8gb25seSBkZXNjcmliZXMgaG93IHRvIHNldHVwIHRoZSBPUEwzLVNBMSBjaGlwOyB0aGlzIGluZm8KK2RvZXMgbm90IGFwcGx5IHRvIHRoZSBTQTIsIFNBMywgb3IgU0E0LiAKKy0tLQorCitUaGUgWWFtYWhhIE9QTDMtU0ExIHNvdW5kIGNoaXAgaXMgdXN1YWxseSBmb3VuZCBidWlsdCBpbnRvIG1vdGhlcmJvYXJkcywgYW5kCitpdCdzIGEgZGVjZW50IGxpdHRsZSBjaGlwIG9mZmVyaW5nIGEgV1NTIG1vZGUsIGEgU0IgUHJvIGVtdWxhdGlvbiBtb2RlLCBNUFU0MDEKK2FuZCBPUEwzIEZNIFN5bnRoIGNhcGFiaWxpdGllcy4KKworWW91IGNhbiBlbmFibGUgaW5jbHVzaW9uIG9mIHRoZSBkcml2ZXIgdmlhIENPTkZJR19TT1VORF9PUEwzU0ExPW0sIG9yCitDT05GSUdfU09VTkRfT1BMM1NBMT15IHRocm91Z2ggJ21ha2UgY29uZmlnL3hjb25maWcvbWVudWNvbmZpZycuCisKK1lvdSdsbCBuZWVkIHRvIGtub3cgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvIChpcnEsIGRtYSwgYW5kIGlvIHBvcnQpIGZvciB0aGUKK2NoaXAncyBXU1MgbW9kZSwgc2luY2UgdGhhdCBpcyB0aGUgbW9kZSB0aGUga2VybmVsIHNvdW5kIGRyaXZlciB1c2VzLCBhbmQgb2YKK2NvdXJzZSB5b3UnbGwgYWxzbyBuZWVkIHRvIGtub3cgYWJvdXQgd2hlcmUgdGhlIE1QVTQwMSBhbmQgT1BMMyBwb3J0cyBhbmQKK0lSUXMgYXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aG9zZS4KKworSGVyZSdzIHRoZSBza2lubnkgb24gaG93IHRvIGxvYWQgaXQgYXMgYSBtb2R1bGU6CisKKwltb2Rwcm9iZSBvcGwzc2EgaW89MHg1MzAgaXJxPTExIGRtYT0wIGRtYTI9MSBtcHVfaW89MHgzMzAgbXB1X2lycT01CisKK01vZHVsZSBvcHRpb25zIGluIGRldGFpbDoKKworCWlvOglUaGlzIGlzIHRoZSBXU1MncyBwb3J0IGJhc2UuCisJaXJxOglUaGlzIGlzIHRoZSBXU1MncyBJUlEuCisJZG1hOglUaGlzIGlzIHRoZSBXU1MncyBETUEgbGluZS4gSW4gbXkgQklPUyBzZXR1cCBzY3JlZW4gdGhpcyB3YXMKKwkJbGlzdGVkIGFzICJXU1MgUGxheSBETUEiCisJZG1hMjoJVGhpcyBpcyB0aGUgV1NTJ3Mgc2Vjb25kYXJ5IERNQSBsaW5lLiBNeSBCSU9TIGNhbGxzIGl0IHRoZQorCQkiV1NTIGNhcHR1cmUgRE1BIgorCQorCW1wdV9pbzoJVGhpcyBpcyB0aGUgTVBVNDAxJ3MgcG9ydCBiYXNlLgorCW1wdV9pcnE6IFRoaXMgaXMgdGhlIE1QVTQwMSdzIElSUS4KKworSWYgeW91J2QgbGlrZSB0byB1c2UgdGhlIE9QTDMgRk0gU3ludGhlc2l6ZXIsIG1ha2Ugc3VyZSB5b3UgZW5hYmxlCitDT05GSUdfU09VTkRfWU0zODEyIChpbiAnbWFrZSBjb25maWcnKS4gVGhhdCdsbCBidWlsZCB0aGUgb3BsMy5vIG1vZHVsZS4KKworVGhlbiBhIHNpbXBsZSAnaW5zbW9kIG9wbDMgaW89MHgzODgnLCBhbmQgeW91IG5vdyBoYXZlIEZNIFN5bnRoLgorCitZb3UgY2FuIGFsc28gdXNlIHRoZSBTb2Z0T1NTIHNvZnR3YXJlIHN5bnRoZXNpemVyIGluc3RlYWQgb2YgdGhlIGJ1aWx0aW4gT1BMMy4KK0hlcmUncyBob3c6CisKK1NheSAneScgb3IgJ20nIHRvICJTb2Z0T1NTIHNvZnR3YXJlIHdhdmUgdGFibGUgZW5naW5lIiBpbiBtYWtlIGNvbmZpZy4KKworSWYgeW91IHNhaWQgeWVzLCB0aGUgc29mdHdhcmUgc3ludGggaXMgYXZhaWxhYmxlIG9uY2UgeW91IGJvb3QgeW91ciBuZXcKK2tlcm5lbC4KKworSWYgeW91IGNob3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBqdXN0IGluc21vZCB0aGUgcmVzdWx0aW5nIHNvZnRvc3MyLm8KKworUXVlc3Rpb25zPyBDb21tZW50cz8KKzxzdGlrZXJAbm9ydGhsaW5rLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMtU0EyIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT1BMMy1TQTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiNmQyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMtU0EyCkBAIC0wLDAgKzEsMjEwIEBACitEb2N1bWVudGF0aW9uIGZvciB0aGUgT1BMMy1TQTIsIFNBMywgYW5kIFNBeCBkcml2ZXIgKG9wbDNzYTIubykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTY290dCBNdXJyYXksIHNjb3R0QHNwaXRlZnVsLm9yZworSmFudWFyeSA3LCAyMDAxCisKK05PVEU6IEFsbCB0cmFkZS1tYXJrZWQgdGVybXMgbWVudGlvbmVkIGJlbG93IGFyZSBwcm9wZXJ0aWVzIG9mIHRoZWlyCisgICAgICByZXNwZWN0aXZlIG93bmVycy4KKworCitTdXBwb3J0ZWQgRGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaXMgZm9yIFBuUCBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgWWFtYWhhIGF1ZGlvCitjb250cm9sbGVyIGNoaXBzZXRzOgorCitZTUY3MTEgYWthIE9QTDMtU0EyCitZTUY3MTUgYW5kIFlNRjcxOSBha2EgT1BMMy1TQTMKKworVXAgdW50aWwgcmVjZW50bHkgKERlY2VtYmVyIDIwMDApLCBJJ2QgdGhvdWdodCB0aGUgNzE5IHRvIGJlIGEKK2RpZmZlcmVudCBjaGlwc2V0LCB0aGUgT1BMMy1TQXguICBBZnRlciBhbiBlbWFpbCBleGhhbmdlIHdpdGgKK1lhbWFoYSwgaG93ZXZlciwgaXQgdHVybnMgb3V0IHRoYXQgdGhlIDcxOSBpcyBqdXN0IGEgcmUtYmFkZ2VkCis3MTUsIGFuZCB0aGUgY2hpcHNldHMgYXJlIGlkZW50aWNhbC4gIFRoZSBjaGlwc2V0IGRldGVjdGlvbiBjb2RlCitoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcy4KKworQW55d2F5cywgYWxsIG9mIHRoZXNlIGNoaXBzZXRzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGRldmljZXM6CisKK09QTDMgRk0gc3ludGhlc2l6ZXIKK1NvdW5kYmxhc3RlciBQcm8KK01pY3Jvc29mdC9XaW5kb3dzIFNvdW5kIFN5c3RlbQorTVBVNDAxIE1JREkgaW50ZXJmYWNlCisKK05vdGUgdGhhdCB0aGlzIGRyaXZlciB1c2VzIHRoZSBNU1MgZGV2aWNlLCBhbmQgdG8gbXkga25vd2xlZGdlIHRoZXNlCitjaGlwc2V0cyBlbmZvcmNlIGFuIGVpdGhlci9vciBzaXR1YXRpb24gd2l0aCB0aGUgU291bmRibGFzdGVyIFBybworZGV2aWNlIGFuZCB0aGUgTVNTIGRldmljZS4gIFNpbmNlIHRoZSBNU1MgZGV2aWNlIGhhcyBiZXR0ZXIKK2NhcGFiaWxpdGllcywgSSBoYXZlIGltcGxlbWVudGVkIHRoZSBkcml2ZXIgdG8gdXNlIGl0LgorCisKK01peGVyIENoYW5uZWxzCistLS0tLS0tLS0tLS0tLQorCitPbGRlciB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlciAocHJlLURlY2VtYmVyIDIwMDApIGhhZCB0d28gbWl4ZXJzLAorYW4gT1BMMy1TQTIgb3IgU0EzIG1peGVyIGFuZCBhIE1TUyBtaXhlci4gIFRoZSBPUEwzLVNBWzIzXSBtaXhlcgorZGV2aWNlIGNvbnRhaW5lZCBhIHN1cGVyc2V0IG9mIG1peGVyIGNoYW5uZWxzIGNvbnNpc3Rpbmcgb2YgaXRzIG93bgorY2hhbm5lbHMgYW5kIGFsbCBvZiB0aGUgTVNTIG1peGVyIGNoYW5uZWxzLiAgVG8gc2ltcGxpZnkgdGhlIGRyaXZlcgorY29uc2lkZXJhYmx5LCBhbmQgdG8gcGFydGl0aW9uIGZ1bmN0aW9uYWxpdHkgYmV0dGVyLCB0aGUgT1BMMy1TQVsyM10KK21peGVyIGRldmljZSBub3cgY29udGFpbnMgaGFzIGl0cyBvd24gc3BlY2lmaWMgbWl4ZXIgY2hhbm5lbHMuICBUaGV5CithcmU6CisKK1ZvbHVtZSAgICAgLSBIYXJkd2FyZSBtYXN0ZXIgdm9sdW1lIGNvbnRyb2wKK0Jhc3MgICAgICAgLSBTQTMgb25seSwgbm93IHN1cHBvcnRzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzCitUcmVibGUgICAgIC0gU0EzIG9ubHksIG5vdyBzdXBwb3J0cyBsZWZ0IGFuZCByaWdodCBjaGFubmVscworTWljcm9waG9uZSAtIEhhcmR3YXJlIG1pY3JvcGhvbmUgaW5wdXQgdm9sdW1lIGNvbnRyb2wKK0RpZ2l0YWwxICAgLSBZYW1haGEgM0QgZW5oYW5jZW1lbnQgIldpZGUiIG1peGVyCisKK0FsbCBvdGhlciBtaXhlciBjaGFubmVscyAoZS5nLiAiUENNIiwgIkNEIiwgZXRjLikgbm93IGhhdmUgdG8gYmUKK2NvbnRyb2xsZWQgdmlhIHRoZSAiTVMgU291bmQgU3lzdGVtIChDUzQyMzEpIiBtaXhlci4gIFRvIGZhY2lsaXRhdGUKK3RoaXMsIHRoZSBtaXhlciBkZXZpY2UgY3JlYXRpb24gb3JkZXIgaGFzIGJlZW4gc3dpdGNoZWQgc28gdGhhdAordGhlIE1TUyBtaXhlciBpcyBjcmVhdGVkIGZpcnN0LiAgVGhpcyBhbGxvd3MgYWNjZXNzaW5nIHRoZSBtYWpvcml0eQorb2YgdGhlIHVzZWZ1bCBtaXhlciBjaGFubmVscyBldmVuIHZpYSBzaW5nbGUgbWl4ZXItYXdhcmUgdG9vbHMKK3N1Y2ggYXMgImF1bWl4Ii4KKworCitQbHVnICduIFBsYXkKKy0tLS0tLS0tLS0tLQorCitJbiBwcmV2aW91cyBrZXJuZWxzICgyLjIueCksIHNvbWUgY29uZmlndXJhdGlvbiB3YXMgcmVxdWlyZWQgdG8KK2dldCB0aGUgZHJpdmVyIHRvIHRhbGsgdG8gdGhlIGNhcmQuICBCZWluZyB0aGUgbmV3IG1pbGxlbm5pdW0gYW5kCithbGwsIHRoZSAyLjQueCBrZXJuZWxzIG5vdyBzdXBwb3J0IGF1dG8tY29uZmlndXJhdGlvbiBpZiBJU0EgUG5QCitzdXBwb3J0IGlzIGNvbmZpZ3VyZWQgaW4uICBUaGVvcmV0aWNhbGx5LCB0aGUgZHJpdmVyIGV2ZW4gc3VwcG9ydHMKK2hhdmluZyBtb3JlIHRoYW4gb25lIGNhcmQgaW4gdGhpcyBjYXNlLgorCitXaXRoIHRoZSBhZGRpdGlvbiBvZiBQblAgc3VwcG9ydCB0byB0aGUgZHJpdmVyLCB0d28gbmV3IHBhcmFtZXRlcnMKK2hhdmUgYmVlbiBhZGRlZCB0byBjb250cm9sIGl0OgorCitpc2FwbnAgICAtIHNldCB0byAwIHRvIGRpc2FibGUgSVNBIFBuUCBjYXJkIGRldGVjdGlvbgorCittdWx0aXBsZSAtIHNldCB0byAwIHRvIGRpc2FibGUgbXVsdGlwbGUgUG5QIGNhcmQgZGV0ZWN0aW9uCisKKworT3B0aW9uYWwgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWNlbnQgKERlY2VtYmVyIDIwMDApIGFkZGl0aW9ucyB0byB0aGUgZHJpdmVyIChiYXNlZCBvbiBhIHBhdGNoCitwcm92aWRlZCBieSBQZXRlciBFbmdsbWFpZXIpIGFyZSB0d28gbmV3IHBhcmFtZXRlcnM6CisKK3ltb2RlIC0gICAgU2V0IFlhbWFoYSAzRCBlbmhhbmNlbWVudCBtb2RlOgorICAgICAgICAgICAwID0gRGVza3RvcC9Ob3JtYWwgIDUtMTIgY20gc3BlYWtlcnMKKyAgICAgICAgICAgMSA9IE5vdGVib29rIFBDICgxKSAzIGNtIHNwZWFrZXJzCisgICAgICAgICAgIDIgPSBOb3RlYm9vayBQQyAoMikgMS41IGNtIHNwZWFrZXJzCisgICAgICAgICAgIDMgPSBIaS1GaSAgICAgICAgICAgMTYtMzggY20gc3BlYWtlcnMKKworbG9vcGJhY2sgLSBTZXQgQS9EIGlucHV0IHNvdXJjZS4gVXNlZnVsIGZvciBlY2hvIGNhbmNlbGxhdGlvbjoKKyAgICAgICAgICAgMCA9IE1pYyBSaWdodCBjaGFubmVsIChkZWZhdWx0KQorICAgICAgICAgICAxID0gTW9ubyBvdXRwdXQgbG9vcGJhY2sKKworVGhlIHltb2RlIHBhcmFtZXRlciBoYXMgYmVlbiB0ZXN0ZWQgYW5kIGRvZXMgd29yay4gIFRoZSBsb29wYmFjaworcGFyYW1ldGVyLCBob3dldmVyLCBpcyB1bnRlc3RlZC4gIEFueSBmZWVkYmFjayBvbiBpdHMgdXNlZnVsbmVzcword291bGQgYmUgYXBwcmVjaWF0ZWQuCisKKworTWFudWFsIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBzb21lIHJlYXNvbiB5b3UgZGVjaWRlIG5vdCB0byBjb21waWxlIElTQSBQblAgc3VwcG9ydCBpbnRvCit5b3VyIGtlcm5lbCwgb3IgZGlzYWJsZWQgdGhlIGRyaXZlcidzIHVzYWdlIG9mIGl0IGJ5IHNldHRpbmcgdGhlCitpc2FwbnAgcGFyYW1ldGVyIGFzIGRpc2N1c3NlZCBhYm92ZSwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGRvIHNvbWUKK21hbnVhbCBjb25maWd1cmF0aW9uLiAgVGhlcmUgYXJlIHR3byB3YXlzIG9mIGRvaW5nIHRoaXMuICBUaGUgbW9zdAorY29tbW9uIGlzIHRvIHVzZSB0aGUgaXNhcG5wdG9vbHMgcGFja2FnZSB0byBpbml0aWFsaXplIHRoZSBjYXJkLCBhbmQKK3VzZSB0aGUga2VybmVsIG1vZHVsZSBmb3JtIG9mIHRoZSBzb3VuZCBzdWJzeXN0ZW0gYW5kIHNvdW5kIGRyaXZlcnMuCitBbHRlcm5hdGl2ZWx5LCBzb21lIEJJT1MncyBhbGxvdyBtYW51YWwgY29uZmlndXJhdGlvbiBvZiBpbnN0YWxsZWQKK1BuUCBkZXZpY2VzIGluIGEgQklPUyBtZW51LCB3aGljaCBzaG91bGQgYWxsb3cgdXNpbmcgdGhlIG5vbi1tb2R1bGFyCitzb3VuZCBkcml2ZXJzLCBpLmUuIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4KKworSSBwZXJzb25hbGx5IHVzZSBpc2FwbnAgYW5kIG1vZHVsZXMsIGFuZCBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gYSBQblAKK0JJT1MgbWFjaGluZSB0byB0ZXN0LiAgSWYgeW91IGhhdmUgc3VjaCBhIGJlYXN0LCBjb25maWd1cmluZyB0aGUKK2RyaXZlciB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgc2hvdWxkIGp1c3Qgd29yayAodGhhbmtzIHRvIHdvcmsKK2RvbmUgYnkgRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PikuICBZb3Ugd2lsbCBzdGlsbCBuZWVkCit0byBzcGVjaWZ5IHNldHRpbmdzLCB3aGljaCBjYW4gYmUgZG9uZSBieSBhZGRpbmc6CisKK29wbDNzYTI9PGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPG1zc2lvPiw8bXB1aW8+CisKK3RvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGU6CisKK29wbDNzYTI9MHgzNzAsNSwwLDEsMHg1MzAsMHgzMzAKKworSWYgeW91IGFyZSBpbnN0ZWFkIHVzaW5nIHRoZSBpc2FwbnAgdG9vbHMgKGFzIG1vc3QgcGVvcGxlIGhhdmUgYmVlbgorYmVmb3JlIExpbnV4IDIuNC54KSwgZm9sbG93IHRoZSBkaXJlY3Rpb25zIGluIHRoZWlyIGRvY3VtZW50YXRpb24gdG8KK3Byb2R1Y2UgYSBjb25maWd1cmF0aW9uIGZpbGUuICBIZXJlIGlzIHRoZSByZWxldmFudCBleGNlcnB0IEkgdXNlZCB0bwordXNlIGZvciBteSBTQTMgY2FyZCBmcm9tIG15IGlzYXBucC5jb25mOgorCisoQ09ORklHVVJFIFlNSDA4MDAvLTEgKExEIDAKKworIyBOT1RFOiBJTyAwIGlzIGZvciB0aGUgdW51c2VkIFNvdW5kQmxhc3RlciBwYXJ0IG9mIHRoZSBjaGlwc2V0LgorKElPIDAgKEJBU0UgMHgwMjIwKSkKKyhJTyAxIChCQVNFIDB4MDUzMCkpCisoSU8gMiAoQkFTRSAweDAzODgpKQorKElPIDMgKEJBU0UgMHgwMzMwKSkKKyhJTyA0IChCQVNFIDB4MDM3MCkpCisoSU5UIDAgKElSUSA1IChNT0RFICtFKSkpCisoRE1BIDAgKENIQU5ORUwgMCkpCisoRE1BIDEgKENIQU5ORUwgMSkpCisKK0hlcmUsIG5vdGUgdGhhdDoKKworUG9ydCAgQWNjZXB0YWJsZSBSYW5nZSAgUHVycG9zZQorLS0tLSAgLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLQorSU8gMCAgMHgwMjIwIC0gMHgwMjgwICAgU0IgYmFzZSBhZGRyZXNzLCB1bnVzZWQuCitJTyAxICAweDA1MzAgLSAweDBGNDggICBNU1MgYmFzZSBhZGRyZXNzCitJTyAyICAweDAzODggLSAweDAzRjggICBPUEwzIGJhc2UgYWRkcmVzcworSU8gMyAgMHgwMzAwIC0gMHgwMzM0ICAgTVBVIGJhc2UgYWRkcmVzcworSU8gNCAgMHgwMTAwIC0gMHgwRkZFICAgY2FyZCdzIG93biBiYXNlIGFkZHJlc3MgZm9yIGl0cyBjb250cm9sIEkvTyBwb3J0cworCitUaGUgSVJRIGFuZCBETUEgdmFsdWVzIGNhbiBiZSBhbnkgdGhhdCBhcmUgY29uc2lkZXJlZCBhY2NlcHRhYmxlIGZvciBhCitNU1MuICBBc3N1bWluZyB5b3UndmUgZ290IGlzYXBucCBhbGwgaGFwcHksIHRoZW4geW91IHNob3VsZCBiZSBhYmxlIHRvCitkbyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nICh3aGljaCBtYXRjaGVzIHVwIHdpdGggdGhlIGlzYXBucAorY29uZmlndXJhdGlvbiBhYm92ZSk6CisKK21vZHByb2JlIG1wdTQwMQorbW9kcHJvYmUgYWQxODQ4Cittb2Rwcm9iZSBvcGwzc2EyIGlvPTB4MzcwIG1zc19pbz0weDUzMCBtcHVfaW89MHgzMzAgaXJxPTUgZG1hPTAgZG1hMj0xCittb2Rwcm9iZSBvcGwzIGlvPTB4Mzg4CisKK1NlZSB0aGUgc2VjdGlvbiAiQXV0b21hdGljIE1vZHVsZSBMb2FkaW5nIiBiZWxvdyBmb3IgaG93IHRvIHNldCB1cAorL2V0Yy9tb2Rwcm9iZS5jb25mIHRvIGF1dG9tYXRlIHRoaXMuCisKK0FuIGltcG9ydGFudCB0aGluZyB0byByZW1lbWJlciB0aGF0IHRoZSBvcGwzc2EyIG1vZHVsZSdzIGlvIGFyZ3VtZW50IGlzCitmb3IgaXQncyBvd24gY29udHJvbCBwb3J0LCB3aGljaCBoYW5kbGVzIHRoZSBjYXJkJ3MgbWFzdGVyIG1peGVyIGZvcgordm9sdW1lIChvbiBhbGwgY2FyZHMpLCBhbmQgYmFzcyBhbmQgdHJlYmxlIChvbiBTQTMgY2FyZHMpLgorCisKK1Ryb3VibGVzaG9vdGluZworLS0tLS0tLS0tLS0tLS0tCisKK0lmIGFsbCBnb2VzIHdlbGwgYW5kIHlvdSBzZWUgbm8gZXJyb3IgbWVzc2FnZXMsIHlvdSBzaG91bGQgYmUgYWJsZSB0bworc3RhcnQgdXNpbmcgdGhlIHNvdW5kIGNhcGFiaWxpdGllcyBvZiB5b3VyIHN5c3RlbS4gIElmIHlvdSBnZXQgYW4KK2Vycm9yIG1lc3NhZ2Ugd2hpbGUgdHJ5aW5nIHRvIGluc2VydCB0aGUgb3BsM3NhMiBtb2R1bGUsIHRoZW4gbWFrZQorc3VyZSB0aGF0IHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlvdXMgYXJndW1lbnRzIG1hdGNoIHdoYXQgeW91IHNwZWNpZmllZAoraW4geW91ciBpc2FwbnAgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhhdCB0aGVyZSBpcyBubyBjb25mbGljdCB3aXRoCithbm90aGVyIGRldmljZSBmb3IgYW4gSS9PIHBvcnQgb3IgaW50ZXJydXB0LiAgQ2hlY2tpbmcgdGhlIGNvbnRlbnRzIG9mCisvcHJvYy9pb3BvcnRzIGFuZCAvcHJvYy9pbnRlcnJ1cHRzIGNhbiBiZSB1c2VmdWwgdG8gc2VlIGlmIHlvdSdyZQorYnV0dGluZyBoZWFkcyB3aXRoIGFub3RoZXIgZGV2aWNlLgorCitJZiB5b3Ugc3RpbGwgY2Fubm90IGdldCB0aGUgbW9kdWxlIHRvIGxvYWQsIGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mCit5b3VyIHN5c3RlbSBsb2cgZmlsZSwgdXN1YWxseSAvdmFyL2xvZy9tZXNzYWdlcy4gIElmIHlvdSBzZWUgdGhlCittZXNzYWdlICJvcGwzc2EyOiBVbmtub3duIFlhbWFoYSBhdWRpbyBjb250cm9sbGVyIHZlcnNpb24iLCB0aGVuIHlvdQoraGF2ZSBhIGRpZmZlcmVudCBjaGlwc2V0IHZlcnNpb24gdGhhbiBJJ3ZlIGVuY291bnRlcmVkIHNvIGZhci4gIExvb2sKK2ZvciBhbGwgbWVzc2FnZXMgaW4gdGhlIGxvZyBmaWxlIHRoYXQgc3RhcnQgd2l0aCAib3BsM3NhMjogIiBhbmQgc2VlCitpZiB0aGV5IHByb3ZpZGUgYW55IGNsdWVzLiAgSWYgeW91IGRvIG5vdCBzZWUgdGhlIGNoaXBzZXQgdmVyc2lvbgorbWVzc2FnZSwgYW5kIG5vbmUgb2YgdGhlIG90aGVyIG1lc3NhZ2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBsb2cgYXJlCitoZWxwZnVsLCBlbWFpbCBtZSBzb21lIGRldGFpbHMgYW5kIEknbGwgdHJ5IG15IGJlc3QgdG8gaGVscC4KKworCitBdXRvbWF0aWMgTW9kdWxlIExvYWRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMYXN0bHksIGlmIHlvdSdyZSB1c2luZyBtb2R1bGVzIGFuZCB3YW50IHRvIHNldCB1cCBhdXRvbWF0aWMgbW9kdWxlCitsb2FkaW5nIHdpdGgga21vZCwgdGhlIGtlcm5lbCBtb2R1bGUgbG9hZGVyLCBoZXJlIGlzIHRoZSBzZWN0aW9uIEkKK2N1cnJlbnRseSB1c2UgaW4gbXkgbW9kcHJvYmUuY29uZiBmaWxlOgorCisjIFNvdW5kCithbGlhcyBzb3VuZC1zbG90LTAgb3BsM3NhMgorb3B0aW9ucyBvcGwzc2EyIGlvPTB4MzcwIG1zc19pbz0weDUzMCBtcHVfaW89MHgzMzAgaXJxPTcgZG1hPTAgZG1hMj0zCitvcHRpb25zIG9wbDMgaW89MHgzODgKKworVGhhdCdzIGFsbCBpdCBjdXJyZW50bHkgdGFrZXMgdG8gZ2V0IGFuIE9QTDMtU0EzIGNhcmQgd29ya2luZyBvbiBteQorc3lzdGVtLiAgT25jZSBhZ2FpbiwgaWYgeW91IGhhdmUgYW55IG90aGVyIHByb2JsZW1zLCBlbWFpbCBtZSBhdCB0aGUKK2FkZHJlc3MgbGlzdGVkIGFib3ZlLgorCitTY290dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvT3B0aSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09wdGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1YWYzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL09wdGkKQEAgLTAsMCArMSwyMjIgQEAKK1N1cHBvcnQgZm9yIHRoZSBPUFRpIDgyQzkzMSBjaGlwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTm90ZTogcGFydHMgb2YgdGhpcyBSRUFETUUgZmlsZSBhcHBseSBhbHNvIHRvIG90aGVyCitjYXJkcyB0aGF0IHVzZSB0aGUgbWFkMTYgZHJpdmVyLgorCitTb21lIGl0ZW1zIGluIHRoaXMgUkVBRE1FIGZpbGUgYXJlIGJhc2VkIG9uIGZlYXR1cmVzCithZGRlZCB0byB0aGUgc291bmQgZHJpdmVyIGFmdGVyIExpbnV4LTIuMS45MSB3YXMgb3V0LgorQnkgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGlzIEkgZG8gbm90IGtub3cgd2hpY2ggb2ZmaWNpYWwKK2tlcm5lbCByZWxlYXNlIHdpbGwgaW5jbHVkZSB0aGVzZSBmZWF0dXJlcy4KK1BsZWFzZSBkbyBub3QgcmVwb3J0IGluY29uc2lzdGVuY2llcyBvbiBvbGRlciBMaW51eAora2VybmVscy4KKworVGhlIE9QVGkgODJDOTMxIGlzIHN1cHBvcnRlZCBpbiBpdHMgbm9uLVBuUCBtb2RlLgorVXN1YWxseSB5b3UgZG8gbm90IG5lZWQgdG8gc2V0IGp1bXBlcnMsIGV0Yy4gVGhlIHNvdW5kIGRyaXZlcgord2lsbCBjaGVjayB0aGUgY2FyZCBzdGF0dXMgYW5kIGlmIGl0IGlzIHJlcXVpcmVkIGl0IHdpbGwKK2ZvcmNlIHRoZSBjYXJkIGludG8gYSBtb2RlIGluIHdoaWNoIGl0IGNhbiBiZSBwcm9ncmFtbWVkLgorCitJZiB5b3UgaGF2ZSBhbm90aGVyIE9TIGluc3RhbGxlZCBvbiB5b3VyIGNvbXB1dGVyIGl0IGlzIHJlY29tbWVuZGVkCit0aGF0IExpbnV4IGFuZCB0aGUgb3RoZXIgT1MgdXNlIHRoZSBzYW1lIHJlc291cmNlcy4KKworQWxzbywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCByZXNvdXJjZXMgc3BlY2lmaWVkIGluIC9ldGMvbW9kcHJvYmUuY29uZgorYW5kIHJlc291cmNlcyBzcGVjaWZpZWQgaW4gL2V0Yy9pc2FwbnAuY29uZiBhZ3JlZS4KKworQ29tcGlsaW5nIHRoZSBzb3VuZCBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJIGhpZ2hseSByZWNvbW1lbmQgdGhhdCB5b3UgYnVpbGQgYSBtb2R1bGFyaXplZCBzb3VuZCBkcml2ZXIuCitUaGlzIGRvY3VtZW50IGRvZXMgbm90IGNvdmVyIGEgc291bmQtZHJpdmVyIHdoaWNoIGlzIGJ1aWx0IGluCit0aGUga2VybmVsLgorCitTb3VuZCBjYXJkIHN1cHBvcnQgc2hvdWxkIGJlIGVuYWJsZWQgYXMgYSBtb2R1bGUgKGNob3NlIG0pLgorQW5zd2VyICdtJyBmb3IgIHRoZXNlIGl0ZW1zOgorICBHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0CQkoQ09ORklHX1NPVU5EX0FETElCKQorICBNaWNyb3NvZnQgU291bmQgU3lzdGVtIHN1cHBvcnQJCQkoQ09ORklHX1NPVU5EX01TUykKKyAgU3VwcG9ydCBmb3IgT1BUaSBNQUQxNiBhbmQvb3IgTW96YXJ0IGJhc2VkIGNhcmRzCShDT05GSUdfU09VTkRfTUFEMTYpCisgIEZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQJCQkoQ09ORklHX1NPVU5EX1lNMzgxMikKKworVGhlIGNvbmZpZ3VyYXRpb24gbWVudSBtYXkgYXNrIGZvciBhZGRyZXNzZXMsIElSUSBsaW5lcyBvciBETUEKK2NoYW5uZWxzLiBJZiB0aGUgY2FyZCBpcyB1c2VkIGFzIGEgbW9kdWxlIHRoZSBtb2R1bGUgbG9hZGluZworb3B0aW9ucyB3aWxsIG92ZXJyaWRlIHRoZXNlIHZhbHVlcy4KKworRm9yIHRoZSBPUFRpIDkzMSB5b3UgY2FuIGFuc3dlciAnbicgdG86CisgIFN1cHBvcnQgTUlESSBpbiBvbGRlciBNQUQxNiBiYXNlZCBjYXJkcyAocmVxdWlyZXMgU0IpCShDT05GSUdfU09VTkRfTUFEMTZfT0xEQ0FSRCkKK0lmIHlvdSBkbyBuZWVkIE1JREkgc3VwcG9ydCBpbiBhIE1vemFydCBvciBDOTI4IGJhc2VkIGNhcmQgeW91CituZWVkIHRvIGFuc3dlciAnbScgdG8gdGhlIGFib3ZlIHF1ZXN0aW9uLiBJbiB0aGF0IGNhc2UgeW91IHdpbGwKK2Fsc28gbmVlZCB0byBhbnN3ZXIgJ20nIHRvOgorICAnMTAwJSBTb3VuZCBCbGFzdGVyIGNvbXBhdGlibGVzIChTQjE2LzMyLzY0LCBFU1MsIEphenoxNikgc3VwcG9ydCcgKENPTkZJR19TT1VORF9TQikKKworR28gb24gYW5kIGNvbXBpbGUgeW91ciBrZXJuZWwgYW5kIG1vZHVsZXMuIEluc3RhbGwgdGhlIG1vZHVsZXMuIFJ1biBkZXBtb2QgLWEuCisKK1VzaW5nIGlzYXBucHRvb2xzCistLS0tLS0tLS0tLS0tLS0tLQorSW4gbW9zdCBzeXN0ZW1zIHdpdGggYSBQblAgQklPUyB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIGlzYXBucC4gVGhlCitpbml0aWFsaXphdGlvbiBwcm92aWRlZCBieSB0aGUgQklPUyBpcyBzdWZmaWNpZW50IGZvciB0aGUgZHJpdmVyCit0byBwaWNrIHVwIHRoZSBjYXJkIGFuZCBjb250aW51ZSBpbml0aWFsaXphdGlvbi4KKworSWYgdGhhdCBmYWlscywgb3IgaWYgeW91IGhhdmUgb3RoZXIgUG5QIGNhcmRzLCB5b3UgbmVlZCB0byB1c2UgaXNhcG5wCit0byBpbml0aWFsaXplIHRoZSBjYXJkLgorVGhpcyB3YXMgdGVzdGVkIHdpdGggaXNhcG5wdG9vbHMtMS4xMSBidXQgSSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlCitpc2FwbnB0b29scy0xLjEzIChvciBuZXdlcikuIFJ1biBwbnBkdW1wIHRvIGR1bXAgdGhlIGluZm9ybWF0aW9uCithYm91dCB5b3VyIFBuUCBjYXJkcy4gVGhlbiBlZGl0IHRoZSByZXN1bHRpbmcgZmlsZSBhbmQgc2VsZWN0Cit0aGUgb3B0aW9ucyBvZiB5b3VyIGNob2ljZS4gVGhpcyBmaWxlIGlzIG5vcm1hbGx5IGluc3RhbGxlZCBhcworL2V0Yy9pc2FwbnAuY29uZi4KKworVGhlIGRyaXZlciBoYXMgb25lIGxpbWl0YXRpb24gd2l0aCByZXNwZWN0IHRvIEkvTyBwb3J0IHJlc291cmNlczoKK0lPMyBiYXNlIG11c3QgYmUgMHgwRTBDLiAgQWx0aG91Z2ggaXNhcG5wIGFsbG93cyBvdGhlciBwb3J0cywgdGhpcworYWRkcmVzcyBpcyBoYXJkLWNvZGVkIGludG8gdGhlIGRyaXZlci4KKworVXNpbmcga21vZCBhbmQgYXV0b2xvYWRpbmcgdGhlIHNvdW5kIGRyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbWVudDogYXMgb2YgbGludXgtMi4xLjkwIGttb2QgaXMgcmVwbGFjaW5nIGtlcm5lbGQuCitUaGUgY29uZmlnIGZpbGUgJy9ldGMvbW9kcHJvYmUuY29uZicgaXMgdXNlZCBhcyBiZWZvcmUuCisKK1RoaXMgaXMgdGhlIHNvdW5kIHBhcnQgb2YgbXkgL2V0Yy9tb2Rwcm9iZS5jb25mIGZpbGUuCitGb2xsb3dpbmcgdGhhdCBJIHdpbGwgZXhwbGFpbiBlYWNoIGxpbmUuCisKK2FsaWFzIG1peGVyMCBtYWQxNgorYWxpYXMgYXVkaW8wIG1hZDE2CithbGlhcyBtaWRpMCAgbWFkMTYKK2FsaWFzIHN5bnRoMCBvcGwzCitvcHRpb25zIHNiIG1hZDE2PTEKK29wdGlvbnMgbWFkMTYgaXJxPTEwIGRtYT0wIGRtYTE2PTEgaW89MHg1MzAgam95c3RpY2s9MSBjZHR5cGU9MAorb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CitpbnN0YWxsIG1hZDE2IC9zYmluL21vZHByb2JlIC1pIG1hZDE2ICYmIC9zYmluL2FkMTg0OF9taXhlcl9yZXJvdXRlIDE0IDggMTUgMyAxNiA2CisKK0lmIHlvdSBoYXZlIGFuIE1QVSBkYXVnaHRlcmNhcmQgb3Igb25ib2FyZCBNUFUgeW91IHdpbGwgd2FudCB0byBhZGQgdG8gdGhlCisib3B0aW9ucyBtYWQxNiIgbGluZSAtIGVnIAorCitvcHRpb25zIG1hZDE2IGlycT01IGRtYT0wIGRtYTE2PTMgaW89MHg1MzAgbXB1X2lvPTB4MzMwIG1wdV9pcnE9OQorCitUbyBzZXQgdGhlIEkvTyBhbmQgSVJRIG9mIHRoZSBNUFUuCisKKworRXhwbGFpbjoKKworYWxpYXMgbWl4ZXIwIG1hZDE2CithbGlhcyBhdWRpbzAgbWFkMTYKK2FsaWFzIG1pZGkwICBtYWQxNgorYWxpYXMgc3ludGgwIG9wbDMKKworV2hlbiBhbnkgc291bmQgZGV2aWNlIGlzIG9wZW5lZCB0aGUga2VybmVsIHJlcXVlc3RzIGF1dG8tbG9hZGluZworb2YgY2hhci1tYWpvci0xNC4gVGhlcmUgaXMgYSBidWlsdC1pbiBhbGlhcyB0aGF0IHRyYW5zbGF0ZXMgdGhpcworcmVxdWVzdCB0byBsb2FkaW5nIHRoZSBtYWluIHNvdW5kIG1vZHVsZS4KKworVGhlIHNvdW5kIG1vZHVsZSBpbiBpdHMgdHVybiB3aWxsIHJlcXVlc3QgbG9hZGluZyBvZiBhIHN1Yi1kcml2ZXIKK2ZvciBtaXhlciwgYXVkaW8sIG1pZGkgb3Igc3ludGhlc2l6ZXIgZGV2aWNlLiBUaGUgZmlyc3QgMyBhcmUKK3N1cHBvcnRlZCBieSB0aGUgbWFkMTYgZHJpdmVyLiBUaGUgc3ludGggZGV2aWNlIGlzIHN1cHBvcnRlZAorYnkgdGhlIG9wbDMgZHJpdmVyLgorCitUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGF1dG9sb2FkIHRoZSBzb3VuZCBkZXZpY2UgZHJpdmVyCitpZiBtb3JlIHRoYW4gb25lIGNhcmQgaXMgaW5zdGFsbGVkLgorCitvcHRpb25zIHNiIG1hZDE2PTEKKworVGhpcyBpcyBsZWZ0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuIElmIHlvdSBlbmFibGUgdGhlCitjb25maWcgb3B0aW9uICdTdXBwb3J0IE1JREkgaW4gb2xkZXIgTUFEMTYgYmFzZWQgY2FyZHMgKHJlcXVpcmVzIFNCKScKK29yIGlmIHlvdSB1c2UgYW4gb2xkZXIgbWFkMTYgZHJpdmVyIGl0IHdpbGwgZm9yY2UgbG9hZGluZyBvZiB0aGUKK1NvdW5kQmxhc3RlciBkcml2ZXIuIFRoaXMgb3B0aW9uIHRlbGxzIHRoZSBTQiBkcml2ZXIgbm90IHRvIGxvb2sKK2ZvciBhIFNCIGNhcmQgYnV0IHRvIHdhaXQgZm9yIHRoZSBtYWQxNiBkcml2ZXIuCisKK29wdGlvbnMgbWFkMTYgaXJxPTEwIGRtYT0wIGRtYTE2PTEgaW89MHg1MzAgam95c3RpY2s9MSBjZHR5cGU9MAorb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CisKK3Bvc3QtaW5zdGFsbCBtYWQxNiAvc2Jpbi9hZDE4NDhfbWl4ZXJfcmVyb3V0ZSAxNCA4IDE1IDMgMTYgNgorCitUaGlzIHNldHMgcmVzb3VyY2VzIGFuZCBvcHRpb25zIGZvciB0aGUgbWFkMTYgYW5kIG9wbDMgZHJpdmVycy4KK0kgdXNlIHR3byBETUEgY2hhbm5lbHMgKG9ubHkgb25lIGlzIHJlcXVpcmVkKSB0byBlbmFibGUgZnVsbCBkdXBsZXguCitqb3lzdGljaz0xIGVuYWJsZXMgdGhlIGpveXN0aWNrIHBvcnQuIGNkdHlwZT0wIGRpc2FibGVzIHRoZSBjZCBwb3J0LgorWW91IGNhbiBhbHNvIHNldCBtcHVfaW8gYW5kIG1wdV9pcnEgaW4gdGhlIG1hZDE2IG9wdGlvbnMgZm9yIHRoZQordWFydDQwMSBkcml2ZXIuCisKK1RoaXMgdGVsbHMgbW9kcHJvYmUgdG8gcnVuIC9zYmluL2FkMTg0OF9taXhlcl9yZXJvdXRlIGFmdGVyCittYWQxNiBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZCBpbml0aWFsaXplZC4gVGhlIHNvdXJjZQorZm9yIGFkMTg0OF9taXhlcl9yZXJvdXRlIGlzIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhpcyByZWFkbWUKK2ZpbGUuIEl0IGlzIGltcG9zc2libGUgZm9yIHRoZSBzb3VuZCBkcml2ZXIgdG8ga25vdyB0aGUgYWN0dWFsCitjb25uZWN0aW9ucyB0byB0aGUgbWl4ZXIuIFRoZSAzIGlucHV0cyBpbnRlbmRlZCBmb3IgY2QsIHN5bnRoCithbmQgbGluZS1pbiBhcmUgbWFwcGVkIHRvIHRoZSBnZW5lcmljIGlucHV0cyBsaW5lMSwgbGluZTIgYW5kCitsaW5lMy4gVGhpcyBwcm9ncmFtIHJlcm91dGVzIHRoZXNlIG1peGVyIGNoYW5uZWxzIHRvIHRoZWlyCityaWdodCBuYW1lcyAobm90ZSB0aGUgcmlnaHQgbWFwcGluZyBkZXBlbmRzIG9uIHRoZSBhY3R1YWwgc291bmQKK2NhcmQgdGhhdCB5b3UgdXNlKS4KK1RoZSBudW1lcmljIHBhcmFtZXRlcnMgbWVhbjoKKyAxND1saW5lMSA4PWNkICAgIC0gcmVyb3V0ZSBsaW5lMSB0byB0aGUgQ0QgaW5wdXQuCisgMTU9bGluZTIgMz1zeW50aCAtIHJlcm91dGUgbGluZTIgdG8gdGhlIHN5bnRoZXNpemVyIGlucHV0LgorIDE2PWxpbmUzIDY9bGluZSAgLSByZXJvdXRlIGxpbmUzIHRvIHRoZSBsaW5lIGlucHV0LgorRm9yIHJlZmVyZW5jZSBvbiBvdGhlciBpbnB1dCBuYW1lcyBsb29rIGF0IHRoZSBmaWxlCisvdXNyL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmguCisKK1VzaW5nIGEgam95c3RpY2sKKy0tLS0tLS0tLS0tLS0tLS0tCitZb3UgbXVzdCBlbmFibGUgYSBqb3lzdGljayBpbiB0aGUgbWFkMTYgb3B0aW9ucy4gKGFsc28KK2luIC9ldGMvaXNhcG5wLmNvbmYgaWYgeW91IHVzZSBpdCkuCitUZXN0ZWQgd2l0aCByZWd1bGFyIGFuYWxvZyBqb3lzdGlja3MuCisKK0EgQ0RST00gZHJpdmUgY29ubmVjdGVkIHRvIHRoZSBzb3VuZCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIDgyQzkzMSBjaGlwIGhhcyBzdXBwb3J0IG9ubHkgZm9yIHNlY29uZGFyeSBBVEFQSSBjZHJvbS4KKyhjZHR5cGU9OCkuIExvYWRpbmcgdGhlIG1hZDE2IGRyaXZlciByZXNldHMgdGhlIEM5MzEgY2hpcAorYW5kIGlmIGEgY2Ryb20gd2FzIGFscmVhZHkgbW91bnRlZCBpdCBtYXkgY2F1c2UgYSBjb21wbGV0ZQorc3lzdGVtIGhhbmcuIERvIG5vdCB1c2UgdGhlIHNvdW5kIGNhcmQgaWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUuCitJZiB5b3UgZG8gdXNlIHRoZSBzb3VuZCBjYXJkIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBsb2FkCit0aGUgbWFkMTYgZHJpdmVyICh1c2UgIm1vZHByb2JlIG1hZDE2IiB0byBwcmV2ZW50IGF1dG8tdW5sb2FkaW5nKQorYmVmb3JlIHRoZSBjZHJvbSBpcyBhY2Nlc3NlZCB0aGUgZmlyc3QgdGltZS4KKworVXNpbmcgdGhlIHNvdW5kIGRyaXZlciBidWlsdC1pbiB0byB0aGUga2VybmVsIG1heSBoZWxwIGhlcmUsIGJ1dC4uLgorTW9zdCBuZXcgc3lzdGVtcyBoYXZlIGEgUG5QIEJJT1MgYW5kIGFsc28gdHdvIElERSBjb250cm9sbGVycy4KK1RoZSBJREUgY29udHJvbGxlciBvbiB0aGUgc291bmQgY2FyZCBtYXkgYmUgbmVlZGVkIG9ubHkgb24gb2xkZXIKK3N5c3RlbXMgKHdoaWNoIGhhdmUgb25seSBvbmUgSURFIGNvbnRyb2xsZXIpIGJ1dCB0aGVzZSBzeXN0ZW1zCithbHNvIGRvIG5vdCBoYXZlIGEgUG5QIEJJT1MgLSByZXF1aXJpbmcgaXNhcG5wdG9vbHMgYW5kIGEgbW9kdWxhcml6ZWQKK2RyaXZlci4KKworS25vd24gcHJvYmxlbXMKKy0tLS0tLS0tLS0tLS0tCisxLiBTZWUgdGhlIHNlY3Rpb24gb24gIkEgQ0RST00gZHJpdmUgY29ubmVjdGVkIHRvIHRoZSBzb3VuZCBjYXJkIi4KKworMi4gT24gbXkgc3lzdGVtIHRoZSBjb2RlYyBjYW5ub3QgY2FwdHVyZSBjb21wYW5kZWQgc291bmQgc2FtcGxlcy4KKyAgIChlZy4sIHJlY29yZGluZyBmcm9tIC9kZXYvYXVkaW8pLiBXaGVuIGFueSBjb21wYW5kZWQgY2FwdHVyZSBpcworICAgcmVxdWVzdGVkIEkgZ2V0IHN0ZXJlby0xNiBiaXQgc2FtcGxlcyBpbnN0ZWFkLiBQbGF5YmFjayBvZgorICAgY29tcGFuZGVkIHNhbXBsZXMgd29ya3Mgd2VsbC4gQXBwYXJlbnRseSB0aGlzIHByb2JsZW0gaXMgbm90IGNvbW1vbgorICAgdG8gYWxsIEM5MzEgYmFzZWQgY2FyZHMuIEkgZG8gbm90IGtub3cgaG93IHRvIGlkZW50aWZ5IGNhcmRzIHRoYXQKKyAgIGhhdmUgdGhpcyBwcm9ibGVtLgorCitTb3VyY2UgZm9yIGFkMTg0OF9taXhlcl9yZXJvdXRlLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKworc3RhdGljIGNoYXIgKm1peGVyX25hbWVzW1NPVU5EX01JWEVSX05SREVWSUNFU10gPQorCVNPVU5EX0RFVklDRV9MQUJFTFM7CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKwlpbnQgdmFsLCBmcm9tLCB0bzsKKwlpbnQgaSwgZmQ7CisKKwlmZCA9IG9wZW4oIi9kZXYvbWl4ZXIiLCBPX1JEV1IpOworCWlmKGZkIDwgMCkgeworCQlwZXJyb3IoIi9kZXYvbWl4ZXIiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZm9yKGkgPSAyOyBpIDwgYXJnYzsgaSArPSAyKSB7CisJCWZyb20gPSBhdG9pKGFyZ3ZbaS0xXSk7CisJCXRvID0gYXRvaShhcmd2W2ldKTsKKworCQlpZih0byA9PSBTT1VORF9NSVhFUl9OT05FKQorCQkJZnByaW50ZihzdGRlcnIsICIlczogdHVybmluZyBvZmYgbWl4ZXIgJXNcbiIsCisJCQkJYXJndlswXSwgbWl4ZXJfbmFtZXNbdG9dKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICIlczogcmVyb3V0aW5nIG1peGVyICVzIHRvICVzXG4iLAorCQkJCWFyZ3ZbMF0sIG1peGVyX25hbWVzW2Zyb21dLCBtaXhlcl9uYW1lc1t0b10pOworCisJCXZhbCA9IGZyb20gPDwgOCB8IHRvOworCisJCWlmKGlvY3RsKGZkLCBTT1VORF9NSVhFUl9QUklWQVRFMiwgJnZhbCkpIHsKKwkJCXBlcnJvcigiQUQxODQ4IG1peGVyIHJlcm91dGUiKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BBUzE2IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUEFTMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxYjNkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BBUzE2CkBAIC0wLDAgKzEsMTYzIEBACitQcm8gQXVkaW8gU3BlY3RydW0gMTYgZm9yIDIuMy45OSBhbmQgbGF0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitieSBUaG9tYXMgTW9saW5hICh0bW9saW5hQGhvbWUuY29tKQorbGFzdCBtb2RpZmllZCAzIE1hciAyMDAxCitBY2tub3dsZWRnZW1lbnQgdG8gQXhlbCBCb2xkdCAoYm9sZHRAbWF0aC51Y3NiLmVkdSkgZm9yIHN0dWZmIHRha2VuCitmcm9tIENvbmZpZ3VyZS5oZWxwLCBSaWNjYXJkbyBGYWNjaGV0dGkgZm9yIHN0dWZmIGZyb20gUkVBRE1FLk9TUywKK2FuZCBvdGhlcnMgd2hvc2UgbmFtZXMgSSBjb3VsZCBub3QgZmluZC4KKworVGhpcyBkb2N1bWVudGF0aW9uIGlzIHJlbGV2YW50IGZvciB0aGUgUEFTMTYgZHJpdmVyIChwYXMyX2NhcmQuYyBhbmQKK2ZyaWVuZHMpIHVuZGVyIGtlcm5lbCB2ZXJzaW9uIDIuMy45OSBhbmQgbGF0ZXIuICBJZiB5b3UgYXJlCit1bmZhbWlsaWFyIHdpdGggY29uZmlndXJpbmcgc291bmQgdW5kZXIgTGludXgsIHBsZWFzZSByZWFkIHRoZQorU291bmQtSE9XVE8sIERvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbiBhbmQgb3RoZXIKK3JlbGV2YW50IGRvY3MgZmlyc3QuCisKK1RoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgcmVsZXZhbnQgaW5mb3JtYXRpb24gZnJvbSBSRUFETUUuT1NTCithbmQgbGVnYWN5IGRvY3MgZm9yIHRoZSBQcm8gQXVkaW8gU3BlY3RydW0gMTYgKFBBUzE2KToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcGFzMl9jYXJkLmMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgY2FyZHMgLS0KK1BybyBBdWRpbyBTcGVjdHJ1bSAxNiAoUEFTMTYpIGFuZCBjb21wYXRpYmxlczoKKyAgICAgICAgUHJvIEF1ZGlvIFNwZWN0cnVtIDE2CisgICAgICAgIFBybyBBdWRpbyBTdHVkaW8gMTYKKyAgICAgICAgTG9naXRlY2ggU291bmQgTWFuIDE2CisgICAgICAgIE5PVEUhIFRoZSBvcmlnaW5hbCBQcm8gQXVkaW8gU3BlY3RydW0gYXMgd2VsbCBhcyB0aGUgUEFTKyBhcmUgbm90CisgICAgICAgICAgICAgIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworVGhlIHNvdW5kIGRyaXZlciBjb25maWd1cmF0aW9uIGRpYWxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb3VuZCBjb25maWd1cmF0aW9uIHN0YXJ0cyBieSBtYWtpbmcgc29tZSB5ZXMvbm8gcXVlc3Rpb25zLiBCZSBjYXJlZnVsCit3aGVuIGFuc3dlcmluZyB0byB0aGVzZSBxdWVzdGlvbnMgc2luY2UgYW5zd2VyaW5nIHkgdG8gYSBxdWVzdGlvbiBtYXkKK3ByZXZlbnQgc29tZSBsYXRlciBvbmVzIGZyb20gYmVpbmcgYXNrZWQuIEZvciBleGFtcGxlIGRvbid0IGFuc3dlciB5IHRvCit0aGUgcXVlc3Rpb24gYWJvdXQgKFBBUzE2KSBpZiB5b3UgZG9uJ3QgcmVhbGx5IGhhdmUgYSBQQVMxNi4gIFNvdW5kCitjb25maWd1cmF0aW9uIG1heSBhbHNvIGJlIG1hZGUgbW9kdWxhciBieSBhbnN3ZXJpbmcgbSB0byBjb25maWd1cmF0aW9uCitvcHRpb25zIHByZXNlbnRlZC4gCisKK05vdGUgYWxzbyB0aGF0IGFsbCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhc2tlZC4gVGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbQorbWF5IGRpc2FibGUgc29tZSBxdWVzdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBlYXJsaWVyIGNob2ljZXMuIEl0IG1heSBhbHNvCitzZWxlY3Qgc29tZSBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYXMgd2VsbC4KKworICAiUHJvQXVkaW9TcGVjdHJ1bSAxNiBzdXBwb3J0IiwKKyAgICAgICAgLSBBbnN3ZXIgJ3knX09OTFlfIGlmIHlvdSBoYXZlIGEgUHJvIEF1ZGlvIFNwZWN0cnVtIF8xNl8sCisgICAgICAgICAgUHJvIEF1ZGlvIFN0dWRpbyAxNiBvciBMb2dpdGVjaCBTb3VuZE1hbiAxNiAoYmUgc3VyZSB0aGF0CisgICAgICAgICAgeW91IHJlYWQgdGhlIGFib3ZlIGxpc3QgY29ycmVjdGx5KS4gRG9uJ3QgYW5zd2VyICd5JyBpZiB5b3UKKyAgICAgICAgICBoYXZlIHNvbWUgb3RoZXIgY2FyZCBtYWRlIGJ5IE1lZGlhIFZpc2lvbiBvciBMb2dpdGVjaCBzaW5jZSB0aGV5CisgICAgICAgICAgYXJlIG5vdCBQQVMxNiBjb21wYXRpYmxlLgorICAgICAgICAgIE5PVEUhIFNpbmNlIDMuNS1iZXRhMTAgeW91IG5lZWQgdG8gZW5hYmxlIFNCIHN1cHBvcnQgKG5leHQgcXVlc3Rpb24pCisgICAgICAgICAgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBTQiBlbXVsYXRpb24gb2YgUEFTMTYuIEl0J3MgYWxzbyBwb3NzaWJsZSB0bworICAgICAgICAgIHRoZSBlbXVsYXRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGEgdHJ1ZSBTQiBjYXJkIHRvZ2V0aGVyIHdpdGggUEFTMTYKKyAgICAgICAgICAodGhlcmUgaXMgYW5vdGhlciBxdWVzdGlvbiBhYm91dCB0aGlzIHRoYXQgaXMgYXNrZWQgbGF0ZXIpLgorCisgICJHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0IiwKKyAgICAgICAgLSBBbnN3ZXIgJ3knIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCisJICBUaGUgUEFTMTYgaGFzIGFuIE9QTDMtY29tcGF0aWJsZSBGTSBjaGlwLgorCitXaXRoIFBBUzE2IHlvdSBjYW4gdXNlIHR3byBhdWRpbyBkZXZpY2UgZmlsZXMgYXQgdGhlIHNhbWUgdGltZS4gL2Rldi9kc3AgKGFuZAorL2Rldi9hdWRpbykgaXMgY29ubmVjdGVkIHRvIHRoZSA4LzE2IGJpdCBuYXRpdmUgY29kZWMgYW5kIHRoZSAvZGV2L2RzcDEgKGFuZAorL2Rldi9hdWRpbzEpIGlzIGNvbm5lY3RlZCB0byB0aGUgU0IgZW11bGF0aW9uICg4IGJpdCBtb25vIG9ubHkpLgorCisKK1RoZSBuZXcgc3R1ZmYgZm9yIDIuMy45OSBhbmQgbGF0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZyb20gRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscAorYXJlIHJlbGV2YW50IHRvIGNvbmZpZ3VyaW5nIHRoZSBQQVMxNjoKKworU291bmQgY2FyZCBzdXBwb3J0CitDT05GSUdfU09VTkQKKyAgSWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGluIHlvdXIgY29tcHV0ZXIsIGkuZS4gaWYgaXQgY2FuIHNheSBtb3JlCisgIHRoYW4gYW4gb2NjYXNpb25hbCBiZWVwLCBzYXkgWS4gQmUgc3VyZSB0byBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgYWJvdXQgeW91ciBzb3VuZCBjYXJkIGFuZCBpdHMgY29uZmlndXJhdGlvbiBkb3duIChJL08gcG9ydCwKKyAgaW50ZXJydXB0IGFuZCBETUEgY2hhbm5lbCksIGJlY2F1c2UgeW91IHdpbGwgYmUgYXNrZWQgZm9yIGl0LgorCisgIFlvdSB3YW50IHRvIHJlYWQgdGhlIFNvdW5kLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorICBodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0byAuIEdlbmVyYWwgaW5mb3JtYXRpb24KKyAgYWJvdXQgdGhlIG1vZHVsYXIgc291bmQgc3lzdGVtIGlzIGNvbnRhaW5lZCBpbiB0aGUgZmlsZXMKKyAgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uLiBUaGUgZmlsZQorICBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTIGNvbnRhaW5zIHNvbWUgc2xpZ2h0bHkgb3V0ZGF0ZWQgYnV0CisgIHN0aWxsIHVzZWZ1bCBpbmZvcm1hdGlvbiBhcyB3ZWxsLgorCitPU1Mgc291bmQgbW9kdWxlcworQ09ORklHX1NPVU5EX09TUworICBPU1MgaXMgdGhlIE9wZW4gU291bmQgU3lzdGVtIHN1aXRlIG9mIHNvdW5kIGNhcmQgZHJpdmVycy4gVGhleSBtYWtlCisgIHNvdW5kIHByb2dyYW1taW5nIGVhc2llciBzaW5jZSB0aGV5IHByb3ZpZGUgYSBjb21tb24gQVBJLiBTYXkgWSBvciBNCisgIGhlcmUgKHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc291bmQubykgaWYgeW91IGhhdmVuJ3QgZm91bmQgYQorICBkcml2ZXIgZm9yIHlvdXIgc291bmQgY2FyZCBhYm92ZSwgdGhlbiBwaWNrIHlvdXIgZHJpdmVyIGZyb20gdGhlCisgIGxpc3QgYmVsb3cuCisKK1BlcnNpc3RlbnQgRE1BIGJ1ZmZlcnMKK0NPTkZJR19TT1VORF9ETUFQCisgIExpbnV4IGNhbiBvZnRlbiBoYXZlIHByb2JsZW1zIGFsbG9jYXRpbmcgRE1BIGJ1ZmZlcnMgZm9yIElTQSBzb3VuZAorICBjYXJkcyBvbiBtYWNoaW5lcyB3aXRoIG1vcmUgdGhhbiAxNk1CIG9mIFJBTS4gVGhpcyBpcyBiZWNhdXNlIElTQQorICBETUEgYnVmZmVycyBtdXN0IGV4aXN0IGJlbG93IHRoZSAxNk1CIGJvdW5kYXJ5IGFuZCBpdCBpcyBxdWl0ZQorICBwb3NzaWJsZSB0aGF0IGEgbGFyZ2UgZW5vdWdoIGZyZWUgYmxvY2sgaW4gdGhpcyByZWdpb24gY2Fubm90IGJlCisgIGZvdW5kIGFmdGVyIHRoZSBtYWNoaW5lIGhhcyBiZWVuIHJ1bm5pbmcgZm9yIGEgd2hpbGUuIElmIHlvdSBzYXkgWQorICBoZXJlIHRoZSBETUEgYnVmZmVycyAoNjRLYikgd2lsbCBiZSBhbGxvY2F0ZWQgYXQgYm9vdCB0aW1lIGFuZCBrZXB0CisgIHVudGlsIHRoZSBzaHV0ZG93bi4gVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgeW91IHNhaWQgWSB0bworICAiT1NTIHNvdW5kIG1vZHVsZXMiLCBhYm92ZS4gSWYgeW91IHNhaWQgTSB0byAiT1NTIHNvdW5kIG1vZHVsZXMiCisgIHRoZW4geW91IGNhbiBnZXQgdGhlIHBlcnNpc3RlbnQgRE1BIGJ1ZmZlciBmdW5jdGlvbmFsaXR5IGJ5IHBhc3NpbmcKKyAgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudCAiZG1hYnVmPTEiIHRvIHRoZSBzb3VuZC5vIG1vZHVsZS4KKworICBTYXkgeSBoZXJlIGZvciBQQVMxNi4KKworUHJvQXVkaW9TcGVjdHJ1bSAxNiBzdXBwb3J0CitDT05GSUdfU09VTkRfUEFTCisgIEFuc3dlciBZIG9ubHkgaWYgeW91IGhhdmUgYSBQcm8gQXVkaW8gU3BlY3RydW0gMTYsIFByb0F1ZGlvIFN0dWRpbworICAxNiBvciBMb2dpdGVjaCBTb3VuZE1hbiAxNiBzb3VuZCBjYXJkLiBEb24ndCBhbnN3ZXIgWSBpZiB5b3UgaGF2ZQorICBzb21lIG90aGVyIGNhcmQgbWFkZSBieSBNZWRpYSBWaXNpb24gb3IgTG9naXRlY2ggc2luY2UgdGhleSBhcmUgbm90CisgIFBBUzE2IGNvbXBhdGlibGUuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgIHNlcGFyYXRlCisgIFNvdW5kIEJsYXN0ZXIgc3VwcG9ydDsgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIFBBUyBkcml2ZXIuCisKKyAgSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIHlvdSBoYXZlIHRvIGFkZAorICAicGFzMj08aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2Jpbz4sPHNiaXJxPiw8c2JkbWE+LDxzYmRtYTI+CisgIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCitGTSBTeW50aGVzaXplciAoWU0zODEyL09QTC0zKSBzdXBwb3J0CitDT05GSUdfU09VTkRfWU0zODEyCisgIEFuc3dlciBZIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCisgIEFuc3dlcmluZyBZIGlzIHVzdWFsbHkgYSBzYWZlIGFuZCByZWNvbW1lbmRlZCBjaG9pY2UsIGhvd2V2ZXIgc29tZQorICBjYXJkcyBtYXkgaGF2ZSBzb2Z0d2FyZSAoVFNSKSBGTSBlbXVsYXRpb24uIEVuYWJsaW5nIEZNIHN1cHBvcnQgd2l0aAorICB0aGVzZSBjYXJkcyBtYXkgY2F1c2UgdHJvdWJsZSAoSSBkb24ndCBjdXJyZW50bHkga25vdyBvZiBhbnkgc3VjaAorICBjYXJkcywgaG93ZXZlcikuCisgIFBsZWFzZSByZWFkIHRoZSBmaWxlIERvY3VtZW50YXRpb24vc291bmQvb3NzL09QTDMgaWYgeW91ciBjYXJkIGhhcyBhbgorICBPUEwzIGNoaXAuCisgIElmIHlvdSBjb21waWxlIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCB5b3UgaGF2ZSB0byBhZGQKKyAgIm9wbDM9PGlvPiIgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKyAgSWYgeW91IGNvbXBpbGUgeW91ciBkcml2ZXJzIGludG8gdGhlIGtlcm5lbCwgeW91IE1VU1QgY29uZmlndXJlIAorICBPUEwzIHN1cHBvcnQgYXMgYSBtb2R1bGUgZm9yIFBBUzE2IHN1cHBvcnQgdG8gd29yayBwcm9wZXJseS4KKyAgWW91IGNhbiB0aGVuIGdldCBPUEwzIGZ1bmN0aW9uYWxpdHkgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKKyAgaW5zbW9kIG9wbDMKKyAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGVpdGhlciBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIAorICAvZXRjL21vZHByb2JlLmNvbmY6CisgIG9wdGlvbnMgb3BsMyBpbz0weDM4OAorICBvciBlbHNlIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gL2V0Yy9saWxvLmNvbmY6CisgIG9wbDM9MHgzODgKKworCitFWEFNUExFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVG8gdXNlIHRoZSBQQVMxNiBpbiBteSBjb21wdXRlciBJIGhhdmUgZW5hYmxlZCB0aGUgZm9sbG93aW5nIHNvdW5kCitjb25maWd1cmF0aW9uIG9wdGlvbnM6CisKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTPXkKK0NPTkZJR19TT1VORF9UUkFDRUlOSVQ9eQorQ09ORklHX1NPVU5EX0RNQVA9eQorQ09ORklHX1NPVU5EX1BBUz15CitDT05GSUdfU09VTkRfU0I9bgorQ09ORklHX1NPVU5EX1lNMzgxMj1tCisKK0kgaGF2ZSBhbHNvIGluY2x1ZGVkIHRoZSBmb2xsb3dpbmcgYXBwZW5kIGxpbmUgaW4gL2V0Yy9saWxvLmNvbmY6CithcHBlbmQ9InBhczI9MHgzODgsMTAsMywtMSwweDIyMCw1LDEsLTEgc2I9MHgyMjAsNSwxLC0xIG9wbDM9MHgzODgiCisKK1RoZSBpbyBhZGRyZXNzIG9mIDB4Mzg4IGlzIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvbiB0aGUgUEFTMTYuICBUaGUKK2lycSBvZiAxMCBhbmQgZG1hIG9mIDMgbWF5IG5vdCBtYXRjaCB5b3VyIGluc3RhbGxhdGlvbi4gIFRoZSBhYm92ZSAKK2NvbmZpZ3VyYXRpb24gZW5hYmxlcyBQQVMxNiwgOC1iaXQgU291bmRibGFzdGVyIGFuZCBPUEwzCitmdW5jdGlvbmFsaXR5LiAgSWYgU291bmRibGFzdGVyIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGRlc2lyZWQsIHRoZQorZm9sbG93aW5nIGxpbmUgd291bGQgYmUgYXBwcm9wcmlhdGU6CithcHBlbmQ9InBhczI9MHgzODgsMTAsMywtMSwwLC0xLC0xLC0xIG9wbDM9MHgzODgiCisKK0lmIHNvdW5kIGlzIGJ1aWx0IHRvdGFsbHkgbW9kdWxhciwgdGhlIGFib3ZlIG9wdGlvbnMgbWF5IGJlIAorc3BlY2lmaWVkIGluIC9ldGMvbW9kcHJvYmUuY29uZiBmb3IgcGFzMiwgc2IgYW5kIG9wbDMKK3Jlc3BlY3RpdmVseS4gCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9QU1MgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9QU1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3Yjk1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUwpAQCAtMCwwICsxLDQxIEBACitUaGUgUFNTIGNhcmRzIGFuZCBvdGhlciBFQ0hPIGJhc2VkIGNhcmRzIHByb3ZpZGUgYW4gb25ib2FyZCBEU1Agd2l0aCAKK2Rvd25sb2FkYWJsZSBwcm9ncmFtcyBhbmQgYWxzbyBoYXMgYW4gQUQxODQ4ICJNaWNyb3NvZnQgU291bmQgU3lzdGVtIiAKK2RldmljZS4gVGhlIFBTUyBkcml2ZXIgZW5hYmxlcyBNU1MgYW5kIE1QVTQwMSBtb2RlcyBvZiB0aGUgY2FyZC4gU0IgCitpcyBub3QgZW5hYmxlZCBzaW5jZSBpdCBkb2Vzbid0IHdvcmsgY29uY3VycmVudGx5IHdpdGggTVNTLiAKKworSWYgeW91IGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIHRoZW4gdGhlIGRyaXZlciB0YWtlcyB0aGUgZm9sbG93aW5nCitwYXJhbWV0ZXJzCisKK3Bzc19pby4gCVRoZSBJL08gYmFzZSB0aGUgUFNTIGNhcmQgaXMgY29uZmlndXJlZCBhdCAobm9ybWFsbHkgMHgyMjAKKwkJb3IgMHgyNDApCisKK21zc19pbwkJVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBpbnRlcmZhY2UuCisJCVRoaXMgaXMgbm9ybWFsbHkgMHg1MzAsIGJ1dCBtYXkgYmUgMHg2MDQgb3Igb3RoZXIgYWRkcmVzc2VzLgorCittc3NfaXJxCQlUaGUgaW50ZXJydXB0IGFzc2lnbmVkIHRvIHRoZSBNaWNyb3NvZnQgU291bmQgU3lzdGVtCisJCWVtdWxhdGlvbi4gSVJRJ3MgMyw1LDcsOSwxMCwxMSBhbmQgMTIgYXJlIGF2YWlsYWJsZS4gSWYgeW91CisJCWdldCBJUlEgZXJyb3JzIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGludGVycnVwdCBpcyBzZXQgdG8gCisJCSJJU0EvTGVnYWN5IiBpbiB0aGUgQklPUyBvbiBtb2Rlcm4gbWFjaGluZXMuCisKK21zc19kbWEJCVRoZSBETUEgY2hhbm5lbCB1c2VkIGJ5IHRoZSBNaWNyb3NvZnQgU291bmQgU3lzdGVtLgorCQlUaGlzIGNhbiBiZSAwLCAxLCBvciAzLiBETUEgMCBpcyBub3QgYXZhaWxhYmxlIG9uIG9sZGVyIAorCQltYWNoaW5lcyBhbmQgd2lsbCBjYXVzZSBhIGNyYXNoIG9uIHRoZW0uCisKK21wdV9pbwkJVGhlIE1QVSBlbXVsYXRpb24gYmFzZSBhZGRyZXNzLiBUaGlzIHNldHMgdGhlIGJhc2Ugb2YgdGhlCisJCXN5bnRoZXNpemVyLiBJdCBpcyB0eXBpY2FsbHkgMHgzMzAgYnV0IGNhbiBiZSBhbHRlcmVkLgorCittcHVfaXJxCQlUaGUgaW50ZXJydXB0IHRvIHVzZSBmb3IgdGhlIHN5bnRoZXNpemVyLiBJdCBtdXN0IGRpZmZlcgorCQlmcm9tIHRoZSBJUlEgdXNlZCBieSB0aGUgTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBwb3J0LgorCisKK1RoZSBtcHVfaW8vbXB1X2lycSBmaWVsZHMgYXJlIG9wdGlvbmFsLiBJZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkIHRoZSAKK3N5bnRoZXNpemVyIHBhcnRzIGFyZSBub3QgY29uZmlndXJlZC4KKworV2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBpdCBsb29rcyBmb3IgYSBmaWxlIGNhbGxlZCAKKy9ldGMvc291bmQvcHNzX3N5bnRoLiBUaGlzIGlzIHRoZSBmaXJtd2FyZSBmaWxlIGZyb20gdGhlIERPUyBpbnN0YWxsIGRpc2tzLgorVGhpcyBmaWwgaG9sZHMgYSBnZW5lcmFsIE1JREkgZW11bGF0aW9uLiBUaGUgZmlsZSBleHBlY3RlZCBpcyBjYWxsZWQKK2dlbm1pZGkubGQgb24gbmV3ZXIgRE9TIGRyaXZlciBpbnN0YWxsIGRpc2tzIGFuZCBzeW50aC5sZCBvbiBvbGRlciBvbmVzLgorCitZb3UgY2FuIGFsc28gbG9hZCBhbHRlcm5hdGl2ZSBEU1AgYWxnb3JpdGhtcyBpbnRvIHRoZSBjYXJkIGlmIHlvdSB3aXNoLiBPbmUKK2FsdGVybmF0aXZlIGRyaXZlciBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5tcGcxMjMuZGUvCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUy11cGRhdGVzIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUFNTLXVwZGF0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0ZGQ3NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1BTUy11cGRhdGVzCkBAIC0wLDAgKzEsODggQEAKKwlUaGlzIGZpbGUgY29udGFpbnMgbm90ZXMgZm9yIHVzZXJzIG9mIFBTUyBzb3VuZCBjYXJkcyB3aG8gd2lzaCB0byB1c2UgdGhlIAorbmV3bHkgYWRkZWQgZmVhdHVyZXMgb2YgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgorCisJVGhlIG1ham9yIGVuaGFuY2VtZW50cyBwcmVzZW50IGluIHRoaXMgbmV3IHJldmlzaW9uIG9mIHRoaXMgZHJpdmVyIGlzIHRoZSAKK2FkZGl0aW9uIG9mIHR3byBuZXcgbW9kdWxlIHBhcmFtZXRlcnMgdGhhdCBhbGxvdyB5b3UgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiAKK2FsbCB0aGUgZmVhdHVyZXMgcHJlc2VudCBvbiB5b3VyIFBTUyBzb3VuZCBjYXJkLiAgVGhlc2UgZmVhdHVyZXMgaW5jbHVkZSB0aGUgCithYmlsaXR5IHRvIGVuYWJsZSBib3RoIHRoZSBidWlsdGluIENEUk9NIGFuZCBqb3lzdGljayBwb3J0cy4KKworcHNzX2VuYWJsZV9qb3lzdGljaworCisJVGhpcyBwYXJhbWV0ZXIgaXMgYmFzaWNhbGx5IGEgZmxhZy4gIEEgMCB3aWxsIGxlYXZlIHRoZSBqb3lzdGljayBwb3J0IAorZGlzYWJsZWQsIHdoaWxlIGEgbm9uLXplcm8gdmFsdWUgd291bGQgZW5hYmxlIHRoZSBqb3lzdGljayBwb3J0LiAgVGhlIGRlZmF1bHQgCitzZXR0aW5nIGlzIHBzc19lbmFibGVfam95c3RpY2s9MCBhcyB0aGlzIGtlZXBzIHRoaXMgZHJpdmVyIGZ1bGx5IGNvbXBhdGlibGUgCit3aXRoIHN5c3RlbXMgdGhhdCB3ZXJlIHVzaW5nIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyLiAgSWYgeW91IHdpc2ggdG8gCitlbmFibGUgdGhlIGpveXN0aWNrIHBvcnQgeW91IHdpbGwgaGF2ZSB0byBhZGQgcHNzX2VuYWJsZV9qb3lzdGljaz0xIGFzIGFuIAorYXJndW1lbnQgdG8gdGhlIGRyaXZlci4gIFRvIGFjdHVhbGx5IHVzZSB0aGUgam95c3RpY2sgcG9ydCB5b3Ugd2lsbCB0aGVuIGhhdmUgCit0byBsb2FkIHRoZSBqb3lzdGljayBkcml2ZXIgaXRzZWxmLiAgSnVzdCByZW1lbWJlciB0byBsb2FkIHRoZSBqb3lzdGljayBkcml2ZXIgCitBRlRFUiB0aGUgcHNzIHNvdW5kIGRyaXZlci4KKworcHNzX2Nkcm9tX3BvcnQKKworCVRoaXMgcGFyYW1ldGVyIHRha2VzIGEgcG9ydCBhZGRyZXNzIGFzIGl0cyBwYXJhbWV0ZXIuICBBbnkgYXZhaWxhYmxlIHBvcnQgCithZGRyZXNzIGNhbiBiZSBzcGVjaWZpZWQgdG8gZW5hYmxlIHRoZSBDRFJPTSBwb3J0LCBleGNlcHQgZm9yIDB4MCBhbmQgLTEgYXMgCit0aGVzZSB2YWx1ZXMgd291bGQgbGVhdmUgdGhlIHBvcnQgZGlzYWJsZWQuICBMaWtlIHRoZSBqb3lzdGljayBwb3J0LCB0aGUgY2Ryb20gCitwb3J0IHdpbGwgcmVxdWlyZSB0aGF0IGFuIGFwcHJvcHJpYXRlIENEUk9NIGRyaXZlciBiZSBsb2FkZWQgYmVmb3JlIHlvdSBjYW4gbWFrZSAKK3VzZSBvZiB0aGUgbmV3bHkgZW5hYmxlZCBDRFJPTSBwb3J0LiAgTGlrZSB0aGUgam95c3RpY2sgcG9ydCBvcHRpb24gYWJvdmUsIAorcmVtZW1iZXIgdG8gbG9hZCB0aGUgQ0RST00gZHJpdmVyIEFGVEVSIHRoZSBwc3Mgc291bmQgZHJpdmVyLiAgV2hpbGUgaXQgbWF5IAorZGlmZmVyIG9uIHNvbWUgUFNTIHNvdW5kIGNhcmRzLCBhbGwgdGhlIFBTUyBzb3VuZCBjYXJkcyB0aGF0IEkgaGF2ZSBzZWVuIGhhdmUgYSAKK2J1aWx0aW4gV2Vhcm5lcyBDRFJPTSBwb3J0LiAgSWYgdGhpcyBpcyB0aGUgY2FzZSB3aXRoIHlvdXIgUFNTIHNvdW5kIGNhcmQgeW91IAorc2hvdWxkIGxvYWQgYXp0Y2Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcG9ydCBvcHRpb24gdGhhdCBtYXRjaGVzIHRoZSBwb3J0IHlvdSAKK2Fzc2lnbmVkIHRvIHRoZSBDRFJPTSBwb3J0IHdoZW4geW91IGxvYWRlZCB5b3VyIHBzcyBzb3VuZCBkcml2ZXIuICAoZXguIAorbW9kcHJvYmUgcHNzIHBzc19jZHJvbV9wb3J0PTB4MzQwICYmIG1vZHByb2JlIGF6dGNkIGF6dGNkPTB4MzQwKSAgVGhlIGRlZmF1bHQgCitzZXR0aW5nIG9mIHRoaXMgcGFyYW1ldGVyIGxlYXZlcyB0aGUgQ0RST00gcG9ydCBkaXNhYmxlZCB0byBtYWludGFpbiBmdWxsIAorY29tcGF0aWJpbGl0eSB3aXRoIHN5c3RlbXMgdXNpbmcgcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIuCisKKwlPdGhlciBvcHRpb25zIGhhdmUgYWxzbyBiZWVuIGFkZGVkIGZvciB0aGUgYWRkZWQgY29udmVuaWVuY2UgYW5kIHV0aWxpdHkgCitvZiB0aGUgdXNlci4gIFRoZXNlIG9wdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoaXMgZHJpdmVyIGlzIGxvYWRlZCBhcyBhIAorbW9kdWxlLgorCitwc3Nfbm9fc291bmQKKworCVRoaXMgbW9kdWxlIHBhcmFtZXRlciBpcyBhIGZsYWcgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBkcml2ZXIgdG8gCitqdXN0IGNvbmZpZ3VyZSBub24tc291bmQgY29tcG9uZW50cy4gIDAgY29uZmlndXJlcyBhbGwgY29tcG9uZW50cywgYSBub24tMCAKK3ZhbHVlIHdpbGwgb25seSBhdHRlcHQgdG8gY29uZmlndXJlIHRoZSBDRFJPTSBhbmQgam95c3RpY2sgcG9ydHMuICBUaGlzIAorcGFyYW1ldGVyIGNhbiBiZSB1c2VkIGJ5IGEgdXNlciB3aG8gb25seSB3aXNoZWQgdG8gdXNlIHRoZSBidWlsdGluIGpveXN0aWNrIAorYW5kL29yIENEUk9NIHBvcnQocykgb2YgaGlzIFBTUyBzb3VuZCBjYXJkLiAgSWYgdGhpcyBkcml2ZXIgaXMgbG9hZGVkIHdpdGggdGhpcyAKK3BhcmFtZXRlciBhbmQgd2l0aCB0aGUgcGFyYW1ldGVyIGJlbG93IHNldCB0byB0cnVlIHRoZW4gYSB1c2VyIGNhbiBzYWZlbHkgdW5sb2FkIAordGhpcyBkcml2ZXIgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgInJtbW9kIHBzcyAmJiBybW1vZCBhZDE4NDggJiYgcm1tb2QgCittcHU0MDEgJiYgcm1tb2Qgc291bmQgJiYgcm1tb2Qgc291bmRjb3JlIiBhbmQgcmV0YWluIHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkgb2YgCitoaXMgQ0RST00gYW5kL29yIGpveXN0aWNrIHBvcnQocykgd2hpbGUgZ2FpbmluZyBiYWNrIHRoZSBtZW1vcnkgcHJldmlvdXNseSB1c2VkIAorYnkgdGhlIHNvdW5kIGRyaXZlcnMuICBUaGlzIGRlZmF1bHQgc2V0dGluZyBvZiB0aGlzIHBhcmFtZXRlciBpcyAwIHRvIHJldGFpbiAKK2Z1bGwgYmVoYXZpb3JhbCBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIuCisKK3Bzc19rZWVwX3NldHRpbmdzCisKKwlUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGRyaXZlciB0byByZXNldCAKK2FsbCBlbXVsYXRpb25zIHdoZW5ldmVyIGl0cyB1bmxvYWRlZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdGhvc2Ugd2hvIGFyZSAKK3NoYXJpbmcgcmVzb3VyY2VzIChpbyBwb3J0cywgSVJRJ3MsIERNQSdzKSBiZXR3ZWVuIGRpZmZlcmVudCBJU0EgY2FyZHMuICBUaGlzIAorZmxhZyBjYW4gYWxzbyBiZSB1c2VmdWwgaW4gdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIgbWF5IHJlc2V0IGFsbCAKK2VtdWxhdGlvbnMgYnkgZGVmYXVsdCBvbiB0aGUgZHJpdmVyJ3MgdW5sb2FkaW5nIChhcyBpdCBwcm9iYWJseSBzaG91bGQpLCBzbyAKK3NwZWNpZnlpbmcgaXQgbm93IHdpbGwgZW5zdXJlIHRoYXQgYWxsIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlciB3aWxsIAorY29udGludWUgdG8gd29yayBhcyBleHBlY3RlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIDEgdG8gCityZXRhaW4gZnVsbCBiZWhhdmlvcmFsIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlci4KKworcHNzX2Zpcm13YXJlCisKKwlUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIAorY29kZSBzbyB0aGF0IGEgdXNlciBjb3VsZCB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdGhhdCBmaWxlIGlzIGxvY2F0ZWQgaW5zdGVhZCAKK29mIGhhdmluZyB0byBwdXQgaXQgaW4gYSBwcmVkZWZpbmVkIGxvY2F0aW9uIHdpdGggYSBwcmVkZWZpbmVkIG5hbWUuICBUaGUgCitkZWZhdWx0IHNldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgIi9ldGMvc291bmQvcHNzX3N5bnRoIiBhcyB0aGlzIHdhcyB0aGUgCitwYXRoIGFuZCBmaWxlbmFtZSB0aGUgaGFyZGNvZGVkIHZhbHVlIGluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGlzIGRyaXZlci4KKworRXhhbXBsZXM6CisKKyMgTm9ybWFsIFBTUyBzb3VuZCBjYXJkIHN5c3RlbSwgbG9hZGluZyBvZiBkcml2ZXJzLgorIyBTaG91bGQgYmUgc3BlY2lmaWVkIGluIGFuIHJjIGZpbGUgKGV4LiBTbGFja3dhcmUgdXNlcyAvZXRjL3JjLmQvcmMubW9kdWxlcykuCisKKy9zYmluL21vZHByb2JlIHBzcyBwc3NfaW89MHgyMjAgbXB1X2lvPTB4MzM4IG1wdV9pcnE9OSBtc3NfaW89MHg1MzAgbXNzX2lycT0xMCBtc3NfZG1hPTEgcHNzX2Nkcm9tX3BvcnQ9MHgzNDAgcHNzX2VuYWJsZV9qb3lzdGljaz0xCisvc2Jpbi9tb2Rwcm9iZSBhenRjZCBhenRjZD0weDM0MAorL3NiaW4vbW9kcHJvYmUgam95c3RpY2sKKworIyBTeXN0ZW0gdXNpbmcgdGhlIFBTUyBzb3VuZCBjYXJkIGp1c3QgZm9yIGl0cyBDRFJPTSBhbmQgam95c3RpY2sgcG9ydHMuCisjIFNob3VsZCBiZSBzcGVjaWZpZWQgaW4gYW4gcmMgZmlsZSAoZXguIFNsYWNrd2FyZSB1c2VzIC9ldGMvcmMuZC9yYy5tb2R1bGVzKS4KKworL3NiaW4vbW9kcHJvYmUgcHNzIHBzc19pbz0weDIyMCBwc3NfY2Ryb21fcG9ydD0weDM0MCBwc3NfZW5hYmxlX2pveXN0aWNrPTEgcHNzX25vX3NvdW5kPTEKKy9zYmluL3JtbW9kIHBzcyAmJiAvc2Jpbi9ybW1vZCBhZDE4NDggJiYgL3NiaW4vcm1tb2QgbXB1NDAxICYmIC9zYmluL3JtbW9kIHNvdW5kICYmIC9zYmluL3JtbW9kIHNvdW5kY29yZSAgIyBUaGlzIGxpbmUgbm90IG5lZWRlZCwgYnV0IHNhdmVzIG1lbW9yeS4KKy9zYmluL21vZHByb2JlIGF6dGNkIGF6dGNkPTB4MzQwCisvc2Jpbi9tb2Rwcm9iZSBqb3lzdGljawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0MmIwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKQEAgLTAsMCArMSwxNDU2IEBACitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitUaGlzIGZpbGUgaXMgYSBjb2xsZWN0aW9uIG9mIGFsbCB0aGUgb2xkIFJlYWRtZSBmaWxlcyBkaXN0cmlidXRlZCB3aXRoCitPU1MvTGl0ZSBieSBIYW5udSBTYXZvbGFpbmVuLiBTaW5jZSB0aGUgbmV3IExpbnV4IHNvdW5kIGRyaXZlciBpcyBmb3VuZGVkCitvbiBpdCBJIHRoaW5rIHRoZXNlIGluZm9ybWF0aW9uIG1heSBzdGlsbCBiZSBpbnRlcmVzdGluZyBmb3IgdXNlcnMgdGhhdAoraGF2ZSB0byBjb25maWd1cmUgdGhlaXIgc291bmQgc3lzdGVtLgorCitCZSB3YXJuZWQ6IEFsYW4gQ294IGlzIHRoZSBjdXJyZW50IG1haW50YWluZXIgb2YgdGhlIExpbnV4IHNvdW5kIGRyaXZlciBzbyBpZgoreW91IGhhdmUgcHJvYmxlbXMgd2l0aCBpdCwgcGxlYXNlIGNvbnRhY3QgaGltIG9yIHRoZSBjdXJyZW50IGRldmljZS1zcGVjaWZpYworZHJpdmVyIG1haW50YWluZXIgKGUuZy4gZm9yIGFlZHNwMTYgc3BlY2lmaWMgcHJvYmxlbXMgY29udGFjdCBtZSkuIElmIHlvdSBoYXZlCitwYXRjaGVzLCBjb250cmlidXRpb25zIG9yIHN1Z2dlc3Rpb25zIHNlbmQgdGhlbSB0byBBbGFuOiBJJ20gc3VyZSB0aGV5IGFyZQord2VsY29tZS4KKworSW4gdGhpcyBkb2N1bWVudCB5b3Ugd2lsbCBmaW5kIGEgbG90IG9mIHJlZmVyZW5jZXMgYWJvdXQgT1NTL0xpdGUgb3Igb3NzZnJlZToKK3RoZXkgYXJlIGdvbmUgZm9yZXZlci4gS2VlcGluZyB0aGlzIGluIG1pbmQgYW5kIHdpdGggYSBncmFpbiBvZiBzYWx0IHRoaXMKK2RvY3VtZW50IGNhbiBiZSBzdGlsbCBpbnRlcmVzdGluZyBhbmQgdmVyeSBoZWxwZnVsLgorCitbIEZpbGUgZWRpdGVkIDE3LjAxLjE5OTkgLSBSaWNjYXJkbyBGYWNjaGV0dGkgXQorWyBFZGl0ZWQgbWlyb1NPVU5EIHNlY3Rpb24gMTkuMDQuMjAwMSAtIFJvYmVydCBTaWVtZXIgXQorCitPU1MvRnJlZSB2ZXJzaW9uIDMuOCByZWxlYXNlIG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsZWFzZSByZWFkIHRoZSBTT1VORC1IT1dUTyAoYXZhaWxhYmxlIGZyb20gc3Vuc2l0ZS51bmMuZWR1IGFuZCBvdGhlciBMaW51eCBGVFAgCitzaXRlcykuIEl0IGdpdmVzIGluc3RydWN0aW9ucyBhYm91dCB1c2luZyBzb3VuZCB3aXRoIExpbnV4LiBJdCdzIGJpdCBvdXQgb2YKK2RhdGUgYnV0IHN0aWxsIHZlcnkgdXNlZnVsLiBJbmZvcm1hdGlvbiBhYm91dCBidWcgZml4ZXMgYW5kIHN1Y2ggdGhpbmdzCitpcyBhdmFpbGFibGUgZnJvbSB0aGUgd2ViIHBhZ2UgKHNlZSBhYm92ZSkuCisKK1BsZWFzZSBjaGVjayBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vcGd1aWRlIGZvciBtb3JlIGluZm8gYWJvdXQgcHJvZ3JhbW1pbmcKK3dpdGggT1NTIEFQSS4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLSAgVEhJUyBWRVJTSU9OIF9fX19SRVFVSVJFU19fX18gTGludXggMi4xLjU3IE9SIExBVEVSLgorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQYWNrYWdlcyAic25kLXV0aWwtMy44LnRhci5neiIgYW5kICJzbmQtZGF0YS0wLjEudGFyLloiCitjb250YWluIHVzZWZ1bCB1dGlsaXRpZXMgdG8gYmUgdXNlZCB3aXRoIHRoaXMgZHJpdmVyLgorU2VlIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlL2dldHRpbmcuaHRtbCBmb3IKK2Rvd25sb2FkIGluc3RydWN0aW9ucy4KKworSWYgeW91IGFyZSBsb29raW5nIGZvciB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucywgcGxlYXNlCitsb29rIGZvcndhcmQgaW50byB0aGlzIGRvY3VtZW50LgorCitTdXBwb3J0ZWQgc291bmQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgYmVsb3cuCisKK0NvbnRyaWJ1dG9ycworLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGNvbnRhaW5zIGNvZGUgYnkgc2V2ZXJhbCBjb250cmlidXRvcnMuIEluIGFkZGl0aW9uIHNldmVyYWwgb3RoZXIKK3BlcnNvbnMgaGF2ZSBnaXZlbiB1c2VmdWwgc3VnZ2VzdGlvbnMuIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIG1ham9yCitjb250cmlidXRvcnMuIChJIGNvdWxkIGhhdmUgZm9yZ290dGVuIHNvbWUgbmFtZXMuKQorCisJQ3JhaWcgTWV0egkxLzIgb2YgdGhlIFBBUzE2IE1peGVyIGFuZCBQQ00gc3VwcG9ydAorCVJvYiBIb29mdAlWb2x1bWUgY29tcHV0YXRpb24gYWxnb3JpdGhtIGZvciB0aGUgRk0gc3ludGguCisJTWlrYSBMaWxqZWJlcmcJdUxhdyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgcm91dGluZXMKKwlKZWZmIFRyYW50ZXIJTGludXggU09VTkQgSE9XVE8gZG9jdW1lbnQKKwlHcmVnIExlZQlWb2x1bWUgY29tcHV0YXRpb24gYWxnb3JpdGhtIGZvciB0aGUgR1VTIGFuZAorCQkJbG90cyBvZiB2YWx1YWJsZSBzdWdnZXN0aW9ucy4KKwlBbmR5IFdhcm5lcglJU0MgcG9ydAorCUppbSBMb3dlLAorCUFtYW5jaW8gSGFzdHkgSnIJRnJlZUJTRC9OZXRCU0QgcG9ydAorCUFuZGVycyBCYWVrZ2FhcmQgCUJ1ZyBodW50aW5nIGFuZCB2YWx1YWJsZSBzdWdnZXN0aW9ucy4KKwlKb2VyZyBTY2h1YmVydAlTQjE2IERTUCBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pLgorCUFuZHJldyBSb2JpbnNvbiBJbXByb3ZlbWVudHMgdG8gdGhlIEdVUyBkcml2ZXIKKwlNZWdlbnMgU0EJTUlESSByZWNvcmRpbmcgZm9yIFNCIGFuZCBTQiBQcm8gKGluaXRpYWwgdmVyc2lvbikuCisJTWlrYWVsIE5vcmRxdmlzdCAgTGluZWFyIHZvbHVtZSBzdXBwb3J0IGZvciBHVVMgYW5kCisJCQkgIG5vbmJsb2NraW5nIC9kZXYvc2VxdWVuY2VyLgorCUlhbiBIYXJ0YXMJCVNWUjQuMiBwb3J0CisJTWFya3VzIEFyb2hhcmp1CWFuZAorCVJpc3RvIEthbmtrdW5lbgkJTWFqb3IgY29udHJpYnV0aW9ucyB0byB0aGUgbWl4ZXIgc3VwcG9ydAorCQkJCW9mIEdVUyB2My43LgorCUh1bnl1ZSBZYXUJTWl4ZXIgc3VwcG9ydCBmb3IgU0cgTlggUHJvLgorCU1hcmMgSG9mZm1hbglQU1Mgc3VwcG9ydCAoaW5pdGlhbCB2ZXJzaW9uKS4KKwlSYWluZXIgVnJhbmtlbglJbml0aWFsaXphdGlvbiBmb3IgSmF6ejE2IChpbml0aWFsIHZlcnNpb24pLgorCVBldGVyIFRyYXR0bGVyCUluaXRpYWwgdmVyc2lvbiBvZiBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCBmb3IgTGludXguCisJSlJBIEdpYnNvbgkxNiBiaXQgbW9kZSBmb3IgSmF6ejE2IChpbml0aWFsIHZlcnNpb24pCisJRGF2b3IgSmFkcmlqZXZpYyBNQUQxNiBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pCisJR3JlZ29yIEhvZmZsZWl0CU1vemFydCBzdXBwb3J0IChpbml0aWFsIHZlcnNpb24pCisJUmljY2FyZG8gRmFjY2hldHRpIEF1ZGlvIEV4Y2VsIERTUCAxNiAoYWVkc3AxNikgc3VwcG9ydAorCUphbWVzIEhpZ2h0b3dlciBTcG90dGluZyBhIHRpbnkgYnV0IGltcG9ydGFudCBidWcgaW4gQ1M0MjN4IHN1cHBvcnQuCisJRGVuaXMgU2FibGljCU9QVGkgODJDOTI0IHNwZWNpZmljIGVuaGFuY2VtZW50cyAobm9uIFBuUCBtb2RlKQorCVRpbSBNYWNLZW56aWUJRnVsbCBkdXBsZXggc3VwcG9ydCBmb3IgT1BUaSA4MkM5MzAuCisJCisJUGxlYXNlIGxvb2sgYXQgbG93bGV2ZWwvUkVBRE1FIGZvciBtb3JlIGNvbnRyaWJ1dG9ycy4KKworVGhlcmUgYXJlIHByb2JhYmx5IG1hbnkgb3RoZXIgbmFtZXMgbWlzc2luZy4gSWYgeW91IGhhdmUgc2VudCBtZSBzb21lCitwYXRjaGVzIGFuZCB5b3VyIG5hbWUgaXMgbm90IGluIHRoZSBhYm92ZSBsaXN0LCBwbGVhc2UgaW5mb3JtIG1lLgorCitTZW5kaW5nIHlvdXIgY29udHJpYnV0aW9ucyBvciBwYXRjaGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbCBpdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBjb250YWN0IG1lIGJlZm9yZSBzZW5kaW5nIGFueXRoaW5nCitvciBiZWZvcmUgZXZlbiBzdGFydGluZyB0byBkbyBhbnkgd29yay4gVGVsbCBtZSB3aGF0IHlvdSBzdWdnZXN0IHRvIGJlCitjaGFuZ2VkIG9yIHdoYXQgeW91IGhhdmUgcGxhbm5lZCB0byBkby4gQWxzbyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUKK3ZlcnkgbGF0ZXN0IChkZXZlbG9wbWVudCkgdmVyc2lvbiBvZiBPU1MvRnJlZSBzaW5jZSB0aGUgY2hhbmdlIG1heSBhbHJlYWR5IGJlCitpbXBsZW1lbnRlZCB0aGVyZS4gSW4gZ2VuZXJhbCBpdCdzIGEgbWFqb3Igd2FzdGUgb2YgdGltZSB0byB0cnkgdG8gaW1wcm92ZSBhCitzZXZlcmFsIG1vbnRocyBvbGQgdmVyc2lvbi4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGNhbiBiZSBmb3VuZAorZnJvbSBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZS4gSW4gZ2VuZXJhbCB0aGVyZSBpcyBubyBwb2ludCBpbgorc2VuZGluZyBtZSBwYXRjaGVzIHJlbGF0aXZlIHRvIHByb2R1Y3Rpb24ga2VybmVscy4KKworU3BvbnNvcnMgZXRjLgorLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNvbXBhbmllcyBoYXZlIGdyZWF0bHkgaGVscGVkIGRldmVsb3BtZW50IG9mIHRoaXMgZHJpdmVyIAoraW4gZm9ybSBvZiBhIGZyZWUgY29weSBvZiB0aGVpciBwcm9kdWN0OgorCitOb3ZlbGwsIEluYy4JCVVuaXhXYXJlIHBlcnNvbmFsIGVkaXRpb24gKyBTREsKK1RoZSBTYW50YSBDcnV6IE9wZXJhdGlvbiwgSW5jLiAJQSBTQ08gT3BlblNlcnZlciArIFNESworRW5zb25pcSBDb3JwLAkJYSBTb3VuZFNjYXBlIGNhcmQgYW5kIGV4dGVuc2l2ZSBhbW91bnQgb2YgYXNzaXN0YW5jZQorTWVkaWFUcml4IFBlcmlwaGVyYWxzIEluYywgYSBBdWRpb1RyaXggUHJvIGNhcmQgKyBTREsKK0FjZXIsIEluYy4JCWEgcGFpciBvZiBBY2VyTWFnaWMgUzIzIGNhcmRzLgorCitJbiBhZGRpdGlvbiB0aGUgZm9sbG93aW5nIGNvbXBhbmllcyBoYXZlIHByb3ZpZGVkIG1lIHN1ZmZpY2llbnQgYW1vdW50CitvZiB0ZWNobmljYWwgaW5mb3JtYXRpb24gYXQgbGVhc3Qgc29tZSBvZiB0aGVpciBwcm9kdWN0cyAoZnJlZSBvciAkJCQpOgorCitBZHZhbmNlZCBHcmF2aXMgQ29tcHV0ZXIgVGVjaG5vbG9neSBMdGQuCitNZWRpYSBWaXNpb24gSW5jLgorQW5hbG9nIERldmljZXMgSW5jLgorTG9naXRlY2ggSW5jLgorQXp0ZWNoIExhYnMgSW5jLgorQ3J5c3RhbCBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uLAorSW50ZWdyYXRlZCBDaXJjdWl0IFN5c3RlbXMgSW5jLgorT0FLIFRlY2hub2xvZ3kKK09QVGkKK1R1cnRsZSBCZWFjaAorbWlybworQWQgTGliIEluYy4gKCQkKQorTXVzaWMgUXVlc3QgSW5jLiAoJCQpCitDcmVhdGl2ZSBMYWJzICgkJCQpCisKK0lmIHlvdSBoYXZlIHNvbWUgcHJvYmxlbXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVhZCB0aGUgc291bmQgSE9XVE8gKHN1bnNpdGUudW5jLmVkdTovcHViL0xpbnV4L2RvY3MvLi4uPykuCitBbHNvIGxvb2sgYXQgdGhlIGhvbWUgcGFnZSAoaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUpLiBJdCBtYXkKK2NvbnRhaW4gaW5mbyBhYm91dCBzb21lIHJlY2VudCBidWcgZml4ZXMuCisKK0l0J3MgbGlrZWx5IHRoYXQgeW91IGhhdmUgc29tZSBwcm9ibGVtcyB3aGVuIHRyeWluZyB0byB1c2UgdGhlIHNvdW5kIGRyaXZlcgorZmlyc3QgdGltZS4gU291bmQgY2FyZHMgZG9uJ3QgaGF2ZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIHNvIHRoZXJlIGFyZSBubworZ29vZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gdXNlLiBQbGVhc2UgdHJ5IHRvIHVzZSBzYW1lIEkvTywgRE1BIGFuZCBJUlEKK3ZhbHVlcyBmb3IgdGhlIHNvdW5kIGNhcmQgdGhhbiB3aXRoIERPUy4KKworSWYgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUgZHJpdmVyLCBwbGVhc2UgbG9vaworYXQgL3Zhci9hZG0vbWVzc2FnZXMgZm9yIG1vcmUgdmVyYm9zZSBlcnJvciBtZXNzYWdlLgorCisKK1RoZSBmb2xsb3dpbmcgZXJyb3JzIGFyZSBsaWtlbHkgd2l0aCAvZGV2L2RzcCBhbmQgL2Rldi9hdWRpby4KKworCS0gIk5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MiLgorCVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIG5vIHN1aXRhYmxlIGhhcmR3YXJlIGZvciB0aGUKKwlkZXZpY2UgZmlsZSBvciB0aGUgc291bmQgZHJpdmVyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGhvdXQgc3VwcG9ydCBmb3IKKwl0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLiBGb3IgZXhhbXBsZSAvZGV2L2F1ZGlvIGFuZCAvZGV2L2RzcCB3aWxsIG5vdAorCXdvcmsgaWYgImRpZ2l0aXplZCB2b2ljZSBzdXBwb3J0IiB3YXMgbm90IGVuYWJsZWQgZHVyaW5nICJtYWtlIGNvbmZpZyIuCisJCisJLSAiRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kiLiBQcm9iYWJseSB0aGUgSVJRIChvciBETUEpIGNoYW5uZWwgCisJcmVxdWlyZWQgYnkgdGhlIHNvdW5kIGNhcmQgaXMgaW4gdXNlIGJ5IHNvbWUgb3RoZXIgZGV2aWNlL2RyaXZlci4KKworCS0gIkkvTyBlcnJvciIuIEFsbW9zdCBjZXJ0YWlubHkgKDk5JSkgaXQncyBhbiBJUlEgb3IgRE1BIGNvbmZsaWN0LgorCUxvb2sgYXQgdGhlIGtlcm5lbCBtZXNzYWdlcyBpbiAvdmFyL2FkbS9ub3RpY2UgZm9yIG1vcmUgaW5mby4KKworCS0gIkludmFsaWQgYXJndW1lbnQiLiBUaGUgYXBwbGljYXRpb24gaXMgY2FsbGluZyBpb2N0bCgpCisJd2l0aCBpbXBvc3NpYmxlIHBhcmFtZXRlcnMuIENoZWNrIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzCisJZm9yIHNvdW5kIGRyaXZlciB2ZXJzaW9uIDIuWCBvciBsYXRlci4KKworTGludXggaW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT0KKworSU1QT1JUQU5UIQlSZWFkIHRoaXMgaWYgeW91IGFyZSBpbnN0YWxsaW5nIGEgc2VwYXJhdGVseQorCQlkaXN0cmlidXRlZCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLgorCisJCUNoZWNrIHRoYXQgeW91ciBrZXJuZWwgdmVyc2lvbiB3b3JrcyB3aXRoIHRoaXMKKwkJcmVsZWFzZSBvZiB0aGUgZHJpdmVyIChzZWUgUmVhZG1lKS4gQWxzbyB2ZXJpZnkKKwkJdGhhdCB5b3VyIGN1cnJlbnQga2VybmVsIHZlcnNpb24gZG9lc24ndCBoYXZlIG1vcmUKKwkJcmVjZW50IHNvdW5kIGRyaXZlciB2ZXJzaW9uIHRoYW4gdGhpcyBvbmUuIElUJ1MgSElHSExZCisJCVJFQ09NTUVOREVEIFRIQVQgWU9VIFVTRSBUSEUgU09VTkQgRFJJVkVSIFZFUlNJT04gVEhBVAorCQlJUyBESVNUUklCVVRFRCBXSVRIIEtFUk5FTCBTT1VSQ0VTLgorCistIFdoZW4gaW5zdGFsbGluZyBzZXBhcmF0ZWx5IGRpc3RyaWJ1dGVkIHNvdW5kIGRyaXZlciB5b3Ugc2hvdWxkIGZpcnN0CisgIHJlYWQgdGhlIGFib3ZlIG5vdGljZS4gVGhlbiB0cnkgdG8gZmluZCBwcm9wZXIgZGlyZWN0b3J5IHdoZXJlIGFuZCBob3cKKyAgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIHNvdXJjZXMuIFlvdSBzaG91bGQgbm90IHRyeSB0byBpbnN0YWxsIGEgc2VwYXJhdGVseQorICBkaXN0cmlidXRlZCBkcml2ZXIgdmVyc2lvbiBpZiB5b3UgYXJlIG5vdCBhYmxlIHRvIGZpbmQgdGhlIHByb3BlciB3YXkKKyAgeW91cnNlbGYgKGluIHRoaXMgY2FzZSB1c2UgdGhlIHZlcnNpb24gdGhhdCBpcyBkaXN0cmlidXRlZCB3aXRoIGtlcm5lbAorICBzb3VyY2VzKS4gUmVtb3ZlIG9sZCB2ZXJzaW9uIG9mIGxpbnV4L2RyaXZlcnMvc291bmQgZGlyZWN0b3J5IGJlZm9yZQorICBpbnN0YWxsaW5nIG5ldyBmaWxlcy4KKworLSBUbyBidWlsZCB0aGUgZGV2aWNlIGZpbGVzIHlvdSBuZWVkIHRvIHJ1biB0aGUgZW5jbG9zZWQgc2hlbGwgc2NyaXB0IAorICAoc2VlIGJlbG93KS4gWW91IG5lZWQgdG8gZG8gdGhpcyBvbmx5IHdoZW4gaW5zdGFsbGluZyBzb3VuZCBkcml2ZXIKKyAgZmlyc3QgdGltZSBvciB3aGVuIHVwZ3JhZGluZyB0byBtdWNoIHJlY2VudCB2ZXJzaW9uIHRoYW4gdGhlIGVhcmxpZXIKKyAgb25lLgorCistIENvbmZpZ3VyZSBhbmQgY29tcGlsZSBMaW51eCBhcyBub3JtYWxseSAocmVtZW1iZXIgdG8gaW5jbHVkZSB0aGUKKyAgc291bmQgc3VwcG9ydCBkdXJpbmcgIm1ha2UgY29uZmlnIikuIFBsZWFzZSByZWZlciB0byBrZXJuZWwgZG9jdW1lbnRhdGlvbgorICBmb3IgaW5zdHJ1Y3Rpb25zIGFib3V0IGNvbmZpZ3VyaW5nIGFuZCBjb21waWxpbmcga2VybmVsLiBGaWxlIFJlYWRtZS5jYXJkcworICBjb250YWlucyBjYXJkIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhpcyBkcml2ZXIgZm9yCisgIHVzZSB3aXRoIHZhcmlvdXMgc291bmQgY2FyZHMuCisKK0Jvb3QgdGltZSBjb25maWd1cmF0aW9uICh1c2luZyBsaWxvIGFuZCBpbnNtb2QpIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBUb28gbWFueSB1c2VycyBkaWRuJ3QgYmVsaWV2ZQordGhhdCBpdCdzIHJlYWxseSBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIG1ldGhvZC4gUGxlYXNlIGxvb2sgYXQKK1JlYWRtZSBvZiBzb3VuZCBkcml2ZXIgdmVyc2lvbiAzLjAuMSBpZiB5b3Ugc3RpbGwgd2FudCB0byB1c2UgdGhpcyBtZXRob2QuCisKK1Byb2JsZW1zCistLS0tLS0tLQorCitDb21tb24gZXJyb3IgbWVzc2FnZXM6CisKKy0gL2Rldi8/Pz8/Pz8/OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LgorUnVuIHRoZSBzY3JpcHQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisKKy0gL2Rldi8/Pz8/Pz8/OiBObyBzdWNoIGRldmljZS4KK1lvdSBhcmUgbm90IHJ1bm5pbmcga2VybmVsIHdoaWNoIGNvbnRhaW5zIHRoZSBzb3VuZCBkcml2ZXIuIFdoZW4gdXNpbmcKK21vZHVsYXJpemVkIHNvdW5kIGRyaXZlciB0aGlzIGVycm9yIG1lYW5zIHRoYXQgdGhlIHNvdW5kIGRyaXZlciBpcyBub3QKK2xvYWRlZC4KKworLSAvZGV2Lz8/Pz86IE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MuCitTb3VuZCBkcml2ZXIgZGlkbid0IGRldGVjdCBzdWl0YWJsZSBjYXJkIHdoZW4gaW5pdGlhbGl6aW5nLiBQbGVhc2UgbG9vayBhdAorUmVhZG1lLmNhcmRzIGZvciBpbmZvIGFib3V0IGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgd2l0aCB5b3VyIGNhcmQuIEFsc28KK2NoZWNrIGZvciBwb3NzaWJsZSBib290IChpbnNtb2QpIHRpbWUgZXJyb3IgbWVzc2FnZXMgaW4gL3Zhci9hZG0vbWVzc2FnZXMuCisKKy0gT3RoZXIgbWVzc2FnZXMgb3IgcHJvYmxlbXMKK1BsZWFzZSBjaGVjayBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZSBmb3IgbW9yZSBpbmZvLgorCitDb25maWd1cmluZyB2ZXJzaW9uIDMuOCAoZm9yIExpbnV4KSB3aXRoIHNvbWUgY29tbW9uIHNvdW5kIGNhcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGNvbmZpZ3VyaW5nIHNvdW5kIGNhcmRzIHdpdGggdGhlIGZyZWV3YXJlIHZlcnNpb24gb2YKK09wZW4gU291bmQgU3lzdGVtcyAoT1NTL0ZyZWUpLiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tbWVyY2lhbCB2ZXJzaW9uCisoT1NTL0xpbnV4KSBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gCitodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vbGludXguaHRtbC4gSW5mb3JtYXRpb24gcHJlc2VudGVkIGhlcmUgaXMKK25vdCB2YWxpZCBmb3IgT1NTL0xpbnV4LiAKKworSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSBPU1MvRnJlZQoreW91IGNhbiBkb3dubG9hZCB0aGUgZnJlZSBldmFsdWF0aW9uIHZlcnNpb24gb2YgT1NTL0xpbnV4IGZyb20gdGhlIGFib3ZlCithZGRyZXNzLiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IGl0IGNhbiBhdXRvZGV0ZWN0IHlvdXIgc291bmQgY2FyZC4gSW4gdGhpcyBjYXNlCit5b3UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gaW5jbHVkZWQgaW4gc291bmRvbi5sb2cgd2hlbiBjb25maWd1cmluZyBPU1MvRnJlZS4KKworCitJTVBPUlRBTlQhCVRoaXMgZG9jdW1lbnQgY292ZXJzIG9ubHkgY2FyZHMgdGhhdCB3ZXJlICJrbm93biIgd2hlbgorCQl0aGlzIGRyaXZlciB2ZXJzaW9uIHdhcyByZWxlYXNlZC4gUGxlYXNlIGxvb2sgYXQKKwkJaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zc2ZyZWUgZm9yIGluZm8gYWJvdXQKKwkJY2FyZHMgaW50cm9kdWNlZCByZWNlbnRseS4KKworCQlXaGVuIGNvbmZpZ3VyaW5nIHRoZSBzb3VuZCBkcml2ZXIsIHlvdSBzaG91bGQgY2FyZWZ1bGx5CisJCWNoZWNrIGVhY2ggc291bmQgY29uZmlndXJhdGlvbiBvcHRpb24gKHBhcnRpY3VsYXJseQorCQkiU3VwcG9ydCBmb3IgL2Rldi9kc3AgYW5kIC9kZXYvYXVkaW8iKS4gVGhlIGRlZmF1bHQgdmFsdWVzCisJCW9mZmVyZWQgYnkgdGhlc2UgcHJvZ3JhbXMgYXJlIG5vdCBuZWNlc3NhcmlseSB2YWxpZC4KKworCitUSEUgQklHR0VTVCBNSVNUQUtFUyBZT1UgQ0FOIE1BS0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBBc3N1bWluZyB0aGF0IHRoZSBjYXJkIGlzIFNvdW5kIEJsYXN0ZXIgY29tcGF0aWJsZSB3aGVuIGl0J3Mgbm90LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG51bWJlciBvbmUgbWlzdGFrZSBpcyB0byBhc3N1bWUgdGhhdCB5b3VyIGNhcmQgaXMgY29tcGF0aWJsZSB3aXRoCitTb3VuZCBCbGFzdGVyLiBPbmx5IHRoZSBjYXJkcyBtYWRlIGJ5IENyZWF0aXZlIFRlY2hub2xvZ3kgb3Igd2hpY2ggaGF2ZQorb25lIG9yIG1vcmUgY2hpcHMgbGFiZWxlZCBieSBDcmVhdGl2ZSBhcmUgU0IgY29tcGF0aWJsZS4gSW4gYWRkaXRpb24gdGhlcmUKK2FyZSBmZXcgc291bmQgY2hpcHNldHMgd2hpY2ggYXJlIFNCIGNvbXBhdGlibGUgaW4gTGludXggc3VjaCBhcyBFU1MxNjg4IG9yCitKYXp6MTYuIE5vdGUgdGhhdCBTQiBjb21wYXRpYmlsaXR5IGluIERPUy9XaW5kb3dzIGRvZXMgX05PVF8gbWVhbiBhbnl0aGluZworaW4gTGludXguIAorCitJRiBZT1UgUkVBTExZIEFSRSAxNTAlIFNVUkUgWU9VIEhBVkUgQSBTT1VORCBCTEFTVEVSIFlPVSBDQU4gU0tJUCBUSEUgUkVTVCBPRgorVEhJUyBDSEFQVEVSLgorCitGb3IgbW9zdCBvdGhlciAic3VwcG9zZWQgdG8gYmUgU0IgY29tcGF0aWJsZSIgY2FyZHMgeW91IGhhdmUgdG8gdXNlIG90aGVyCit0aGFuIFNCIGRyaXZlcnMgKHNlZSBiZWxvdykuICBJdCBpcyBwb3NzaWJsZSB0byBnZXQgbW9zdCBzb3VuZCBjYXJkcyB0byB3b3JrCitpbiBTQiBtb2RlIGJ1dCBpbiBnZW5lcmFsIGl0J3MgYSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLiBUaGVyZSBhcmUgc2V2ZXJhbAorcHJvYmxlbXMgd2hpY2ggeW91IHdpbGwgZW5jb3VudGVyIGJ5IHVzaW5nIFNCIG1vZGUgd2l0aCBjYXJkcyB0aGF0IGFyZSBub3QKK3RydWx5IFNCIGNvbXBhdGlibGU6CisKKy0gVGhlIFNCIGVtdWxhdGlvbiBpcyBhdCBtb3N0IFNCIFBybyAoRFNQIHZlcnNpb24gMy54KSB3aGljaCBtZWFucyB0aGF0IAoreW91IGdldCBvbmx5IDggYml0IGF1ZGlvICh0aGVyZSBpcyBhbHdheXMgYW4gYW5vdGhlciAoIm5hdGl2ZSIpIG1vZGUgd2hpY2gKK2dpdmVzIHRoZSAxNiBiaXQgY2FwYWJpbGl0eSkuIFRoZSA4IGJpdCBvbmx5IG9wZXJhdGlvbiBpcyB0aGUgcmVhc29uIHdoeQorbWFueSB1c2VycyBjbGFpbSB0aGF0IHNvdW5kIHF1YWxpdHkgaW4gTGludXggaXMgbXVjaCB3b3JzZSB0aGFuIGluIERPUy4KK0luIGFkZGl0aW9uIHNvbWUgYXBwbGljYXRpb25zIHJlcXVpcmUgMTYgYml0IG1vZGUgYW5kIHRoZXkgcHJvZHVjZSBqdXN0Citub2lzZSB3aXRoIGEgOCBiaXQgb25seSBkZXZpY2UuCistIFRoZSBjYXJkIG1heSB3b3JrIG9ubHkgaW4gc29tZSBjYXNlcyBidXQgcmVmdXNlIHRvIHdvcmsgbW9zdCBvZiB0aGUKK3RpbWUuIFRoZSBTQiBjb21wYXRpYmxlIG1vZGUgYWx3YXlzIHJlcXVpcmVzIHNwZWNpYWwgaW5pdGlhbGl6YXRpb24gd2hpY2ggaXMgCitkb25lIGJ5IHRoZSBET1MvV2luZG93cyBkcml2ZXJzLiBUaGlzIGtpbmQgb2YgY2FyZHMgd29yayBpbiBMaW51eCBhZnRlcgoreW91IGhhdmUgd2FybSBib290ZWQgaXQgYWZ0ZXIgRE9TIGJ1dCB0aGV5IGRvbid0IHdvcmsgYWZ0ZXIgY29sZCBib290CisocG93ZXIgb24gb3IgcmVzZXQpLgorLSBZb3UgZ2V0IHRoZSBmYW1vdXMgIkRNQSB0aW1lZCBvdXQiIG1lc3NhZ2VzLiBVc3VhbGx5IGFsbCBTQiBjbG9uZXMgaGF2ZQorc29mdHdhcmUgc2VsZWN0YWJsZSBJUlEgYW5kIERNQSBzZXR0aW5ncy4gSWYgdGhlIChwb3dlciBvbiBkZWZhdWx0KSB2YWx1ZXMKK2N1cnJlbnRseSB1c2VkIGJ5IHRoZSBjYXJkIGRvbid0IG1hdGNoIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRyaXZlciB5b3Ugd2lsbAorZ2V0IHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIHdoZW5ldmVyIHlvdSB0cnkgdG8gcmVjb3JkIG9yIHBsYXkuIFRoZXJlIGFyZQorZmV3IG90aGVyIHJlYXNvbnMgdG8gdGhlIERNQSB0aW1lb3V0IG1lc3NhZ2UgYnV0IHVzaW5nIHRoZSBTQiBtb2RlIHNlZW1zCit0byBiZSB0aGUgbW9zdCBjb21tb24gY2F1c2UuCisKKzIuIFRyeWluZyB0byB1c2UgYSBQblAgKFBsdWcgJiBQbGF5KSBjYXJkIGp1c3QgbGlrZSBhbiBvcmRpbmFyeSBzb3VuZCBjYXJkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQbHVnICYgUGxheSBpcyBhIHByb3RvY29sIGRlZmluZWQgYnkgSW50ZWwgYW5kIE1pY3Jvc29mdC4gSXQgbGV0cyBvcGVyYXRpbmcKK3N5c3RlbXMgdG8gZWFzaWx5IGlkZW50aWZ5IGFuZCByZWNvbmZpZ3VyZSBJL08gcG9ydHMsIElSUXMgYW5kIERNQXMgb2YgSVNBCitjYXJkcy4gVGhlIHByb2JsZW0gd2l0aCBQblAgY2FyZHMgaXMgdGhhdCB0aGUgc3RhbmRhcmQgTGludXggZG9lc24ndCBjdXJyZW50bHkKKyh2ZXJzaW9ucyAyLjEueCBhbmQgZWFybGllcikgZG9uJ3Qgc3VwcG9ydCBQblAuIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbCBoYXZlCit0byB1c2Ugc29tZSBzcGVjaWFsIHRyaWNrcyAoc2VlIGxhdGVyKSB0byBnZXQgYSBQblAgY2FyZCBhbGl2ZS4gTWFueSBQblAgY2FyZHMKK3dvcmsgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyB0aGUgY2FzZS4KKworVGhlcmUgYXJlIHNvbWV0aW1lcyBib3RoIFBuUCBhbmQgbm9uLVBuUCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBzb3VuZCBjYXJkLgorVGhlIG5vbi1QblAgdmVyc2lvbiBpcyB0aGUgb3JpZ2luYWwgbW9kZWwgd2hpY2ggdXN1YWxseSBoYXMgYmVlbiBkaXNjb250aW51ZWQKK21vcmUgdGhhbiBhbiB5ZWFyIGFnby4gVGhlIFBuUCB2ZXJzaW9uIGhhcyB0aGUgc2FtZSBuYW1lIGJ1dCB3aXRoICJQblAiCithcHBlbmRlZCB0byBpdCAoc29tZXRpbWVzIG5vdCkuIFRoaXMgY2F1c2VzIG1ham9yIGNvbmZ1c2lvbiBzaW5jZSB0aGUgbm9uLVBuUAorbW9kZWwgd29ya3Mgd2l0aCBMaW51eCBidXQgdGhlIFBuUCBvbmUgZG9lc24ndC4KKworWW91IHNob3VsZCBjYXJlZnVsbHkgY2hlY2sgaWYgIlBsdWcgJiBQbGF5IiBvciAiUG5QIiBpcyBtZW50aW9uZWQgaW4gdGhlIG5hbWUKK29mIHRoZSBjYXJkIG9yIGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIHBhY2thZ2UgdGhhdCBjYW1lIHdpdGggdGhlIGNhcmQuIAorRXZlcnl0aGluZyBkZXNjcmliZWQgaW4gdGhlIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCBpcyBub3QgbmVjZXNzYXJpbHkgdmFsaWQgZm9yCitQblAgbW9kZWxzIG9mIHNvdW5kIGNhcmRzIGV2ZW4geW91IGhhdmUgbWFuYWdlZCB0byB3YWtlIHVwIHRoZSBjYXJkIHByb3Blcmx5LgorTWFueSBQblAgY2FyZHMgYXJlIHNpbXBseSB0b28gZGlmZmVyZW50IGZyb20gdGhlaXIgbm9uLVBuUCBhbmNlc3RvcnMgd2hpY2ggYXJlCitjb3ZlcmVkIGJ5IHRoaXMgZG9jdW1lbnQuCisKKworQ2FyZHMgdGhhdCBhcmUgbm90IChmdWxseSkgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VlIGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBzb3VuZCBjYXJkcyAKK3RvIGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUuIAorCisKK0hvdyB0byB1c2Ugc291bmQgd2l0aG91dCByZWNvbXBpbGluZyBrZXJuZWwgYW5kL29yIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGlzIGEgY29tbWVyY2lhbCBzb3VuZCBkcml2ZXIgd2hpY2ggY29tZXMgaW4gcHJlY29tcGlsZWQgZm9ybSBhbmQgZG9lc24ndAorcmVxdWlyZSByZWNvbXBpbGluZyBvZiB0aGUga2VybmVsLiBTZWUgaHR0cDovL3d3dy40RnJvbnQtdGVjaC5jb20vb3NzLmh0bWwgZm9yCittb3JlIGluZm8uCisKKworQ29uZmlndXJpbmcgUG5QIGNhcmRzCis9PT09PT09PT09PT09PT09PT09PT0KKworTmV3IHZlcnNpb25zIG9mIG1vc3Qgc291bmQgY2FyZHMgdXNlIHRoZSBzby1jYWxsZWQgSVNBIFBuUCBwcm90b2NvbCBmb3IKK3NvZnQgY29uZmlndXJpbmcgdGhlaXIgSS9PLCBJUlEsIERNQSBhbmQgc2hhcmVkIG1lbW9yeSByZXNvdXJjZXMuCitDdXJyZW50bHkgYXQgbGVhc3QgY2FyZHMgbWFkZSBieSBDcmVhdGl2ZSBUZWNobm9sb2d5IChTQjMyIGFuZCBTQjMyQVdFCitQblApLCBHcmF2aXMgKEdVUyBQblAgYW5kIEdVUyBQblAgUHJvKSwgRW5zb25pcSAoU291bmRzY2FwZSBQblApIGFuZAorQXp0ZWNoIChzb21lIFNvdW5kIEdhbGF4eSBtb2RlbHMpIHVzZSBQblAgdGVjaG5vbG9neS4gVGhlIENTNDIzMi80MjM2IGF1ZGlvCitjaGlwIGJ5IENyeXN0YWwgU2VtaWNvbmR1Y3RvciAoSW50ZWwgQXRsYW50aXMsIEhQIFBhdmlsaW9uIGFuZCBtYW55IG90aGVyCittb3RoZXJib2FyZHMpIGlzIGFsc28gYmFzZWQgb24gUG5QIHRlY2hub2xvZ3kgYnV0IHRoZXJlIGlzIGEgIm5hdGl2ZSIgZHJpdmVyCithdmFpbGFibGUgZm9yIGl0IChzZWUgaW5mb3JtYXRpb24gYWJvdXQgQ1M0MjMyIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQpLgorCitQblAgc291bmQgY2FyZHMgKGFzIHdlbGwgYXMgbW9zdCBvdGhlciBQblAgSVNBIGNhcmRzKSBhcmUgbm90IHN1cHBvcnRlZAorYnkgdGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgLiBQcm9wZXIKK3N1cHBvcnQgZm9yIHRoZW0gc2hvdWxkIGJlIHJlbGVhc2VkIGR1cmluZyA5NyBvbmNlIHRoZSBrZXJuZWwgbGV2ZWwKK1BuUCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKworVGhlcmUgaXMgYSBtZXRob2QgdG8gZ2V0IG1vc3Qgb2YgdGhlIFBuUCBjYXJkcyB0byB3b3JrLiBUaGUgYmFzaWMgbWV0aG9kCitpcyB0aGUgZm9sbG93aW5nOgorCisxKSBCb290IERPUyBzbyB0aGUgY2FyZCdzIERPUyBkcml2ZXJzIGhhdmUgYSBjaGFuY2UgdG8gaW5pdGlhbGl6ZSBpdC4KKzIpIF9Db2xkXyBib290IHRvIExpbnV4IGJ5IHVzaW5nICJsb2FkbGluLmV4ZSIuICBIaXR0aW5nIGN0cmwtYWx0LWRlbAord29ya3Mgd2l0aCBvbGRlciBtYWNoaW5lcyBidXQgY2F1c2VzIGEgaGFyZCByZXNldCBvZiBhbGwgY2FyZHMgb24gcmVjZW50CisoUGVudGl1bSkgbWFjaGluZXMuCiszKSBJZiB5b3UgaGF2ZSB0aGUgc291bmQgZHJpdmVyIGluIExpbnV4IGNvbmZpZ3VyZWQgcHJvcGVybHksIHRoZSBjYXJkIHNob3VsZAord29yayBub3cuICJQcm9wZXIiIG1lYW5zIHRoYXQgSS9PLCBJUlEgYW5kIERNQSBzZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMgaW4KK0RPUy4gVGhlIGhhcmQgcGFydCBpcyB0byBmaW5kIHdoaWNoIHNldHRpbmdzIHdlcmUgdXNlZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCit5b3VyIGNhcmQgZm9yIG1vcmUgaW5mby4KKworV2luZG93cyA5NSBjb3VsZCB3b3JrIGFzIHdlbGwgYXMgRE9TIGJ1dCBydW5uaW5nIGxvYWRsaW4gbWF5IGJlIGRpZmZpY3VsdC4KK1Byb2JhYmx5IHlvdSBzaG91bGQgInNodXQgZG93biIgeW91ciBtYWNoaW5lIHRvIE1TLURPUyBtb2RlIGJlZm9yZSBydW5uaW5nIGl0LgorCitTb21lIG1hY2hpbmVzIGhhdmUgYSBCSU9TIHV0aWxpdHkgZm9yIHNldHRpbmcgUG5QIHJlc291cmNlcy4gVGhpcyBpcyBhIGdvb2QKK3dheSB0byBjb25maWd1cmUgc29tZSBjYXJkcy4gSW4gdGhpcyBjYXNlIHlvdSBkb24ndCBuZWVkIHRvIGJvb3QgRE9TL1dpbjk1CitiZWZvcmUgc3RhcnRpbmcgTGludXguCisKK0Fub3RoZXIgd2F5IHRvIGluaXRpYWxpemUgUG5QIGNhcmRzIHdpdGhvdXQgRE9TL1dpbjk1IGlzIGEgTGludXggYmFzZWQKK1BuUCBpc29sYXRpb24gdG9vbC4gV2hlbiB3cml0aW5nIHRoaXMgdGhlcmUgaXMgYSBwcmUgYWxwaGEgdGVzdCB2ZXJzaW9uCitvZiBzdWNoIGEgdG9vbCBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZGVtb24uY28udWsvcHViL3VuaXgvbGludXgvdXRpbHMuIFRoZQorZmlsZSBpcyBjYWxsZWQgaXNhcG5wdG9vbHMtKi4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHRvb2wgaXMganVzdCBhIHRlbXBvcmFyeQorc29sdXRpb24gd2hpY2ggbWF5IGJlIGluY29tcGF0aWJsZSB3aXRoIGZ1dHVyZSBrZXJuZWwgdmVyc2lvbnMgaGF2aW5nIHByb3Blcgorc3VwcG9ydCBmb3IgUG5QIGNhcmRzLiBUaGVyZSBhcmUgYnVncyBpbiBzZXR0aW5nIERNQSBjaGFubmVscyBpbiBlYXJsaWVyCit2ZXJzaW9ucyBvZiBpc2FwbnB0b29scyBzbyBhdCBsZWFzdCB2ZXJzaW9uIDEuNiBpcyByZXF1aXJlZCB3aXRoIHNvdW5kIGNhcmRzLgorCitZZXQgYW5vdGhlciB3YXkgdG8gdXNlIFBuUCBjYXJkcyBpcyB0byB1c2UgKGNvbW1lcmNpYWwpIE9TUy9MaW51eCBkcml2ZXJzLiAgU2VlCitodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vbGludXguaHRtbCBmb3IgbW9yZSBpbmZvLiBUaGlzIGlzIHByb2JhYmx5IHRoZSB3YXkgeW91CitzaG91bGQgZG8gaXQgaWYgeW91IGRvbid0IHdhbnQgdG8gc3BlbmQgdGltZSByZWNvbXBpbGluZyB0aGUga2VybmVsIGFuZCAKK3JlcXVpcmVkIHRvb2xzLgorCisKK1JlYWQgdGhpcyBiZWZvcmUgdHJ5aW5nIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgY3VycmVudGx5IG1hbnkgY2FyZHMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIuIFNvbWUgb2YgdGhlIGNhcmRzCitoYXZlIG5hdGl2ZSBzdXBwb3J0IHdoaWxlIG90aGVycyB3b3JrIHNpbmNlIHRoZXkgZW11bGF0ZSBzb21lIG90aGVyCitjYXJkICh1c3VhbGx5IFNCLCBNU1MvV1NTIGFuZC9vciBNUFU0MDEpLiBUaGUgZm9sbG93aW5nIGNhcmRzIGhhdmUgbmF0aXZlCitzdXBwb3J0IGluIHRoZSBkcml2ZXIuIERldGFpbGVkIGluc3RydWN0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlc2UgY2FyZHMKK3dpbGwgYmUgZ2l2ZW4gbGF0ZXIgaW4gdGhpcyBkb2N1bWVudC4KKworUHJvIEF1ZGlvIFNwZWN0cnVtIDE2IChQQVMxNikgYW5kIGNvbXBhdGlibGVzOgorCVBybyBBdWRpbyBTcGVjdHJ1bSAxNgorCVBybyBBdWRpbyBTdHVkaW8gMTYKKwlMb2dpdGVjaCBTb3VuZCBNYW4gMTYKKwlOT1RFISBUaGUgb3JpZ2luYWwgUHJvIEF1ZGlvIFNwZWN0cnVtIGFzIHdlbGwgYXMgdGhlIFBBUysgYXJlIG5vdAorCSAgICAgIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4KKworTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBjYXJkcworCVBybyBTb25pYyAxNgorCUxvZ2l0ZWNoIFNvdW5kTWFuIFdhdmUKKwkoT3RoZXIgSmF6eiBiYXNlZCBjYXJkcyBzaG91bGQgd29yayBidXQgSSBkb24ndCBoYXZlIGFueSByZXBvcnRzCisJYWJvdXQgdGhlbSkuCisKK1NvdW5kIEJsYXN0ZXJzCisJU0IgMS4wIHRvIDIuMAorCVNCIFBybworCVNCIDE2CisJU0IzMi82NC9BV0UKKwkJQ29uZmlndXJlIFNCMzIvNjQvQVdFIGp1c3QgbGlrZSBTQjE2LiBTZWUgbG93bGV2ZWwvUkVBRE1FLmF3ZQorCQlmb3IgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIHdhdmUgdGFibGUgc3ludGguCisJICAgICAgICBOT1RFISBBV0U2My9Hb2xkIGFuZCAxNi8zMi9BV0UgIlBuUCIgY2FyZHMgbmVlZCB0byBiZSBhY3RpdmF0ZWQKKwkJICAgICAgdXNpbmcgaXNhcG5wdG9vbHMgYmVmb3JlIHRoZXkgd29yayB3aXRoIE9TUy9GcmVlLgorCVNCMTYgY29tcGF0aWJsZSBjYXJkcyBieSBvdGhlciBtYW51ZmFjdHVyZXJzIHRoYW4gQ3JlYXRpdmUuCisJCVlvdSBoYXZlIGJlZW4gZm9vbGVkIHNpbmNlIHRoZXJlIGFyZSBfbm9fIFNCMTYgY29tcGF0aWJsZQorCQljYXJkcyBvbiB0aGUgbWFya2V0IChhcyBvZiBNYXkgMTk5NykuIEl0J3MgbGlrZWx5IHRoYXQgeW91ciBjYXJkCisJCWlzIGNvbXBhdGlibGUganVzdCB3aXRoIFNCIFBybyBidXQgdGhlcmUgaXMgYWxzbyBhIG5vbi1TQi0KKwkJY29tcGF0aWJsZSAxNiBiaXQgbW9kZS4gVXN1YWxseSBpdCdzIE1TUy9XU1MgYnV0IGl0IGNvdWxkIGFsc28KKwkJYmUgYSBwcm9wcmlldGFyeSBvbmUgbGlrZSBNViBKYXp6MTYgb3IgRVNTIEVTNjg4LiBPUFRpCisJCU1BRDE2IGNoaXBzIGFyZSB2ZXJ5IGNvbW1vbiBpbiBzbyBjYWxsZWQgIlNCIDE2IGJpdCBjYXJkcyIKKwkJKHRyeSB3aXRoIHRoZSBNQUQxNiBkcml2ZXIpLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSJTdXBwb3NlZCB0byBiZSBTQiBjb21wYXRpYmxlIiBjYXJkcy4KKwkJRm9yZ2V0IHRoZSBTQiBjb21wYXRpYmlsaXR5IGFuZCBjaGVjayBmb3Igb3RoZXIgYWx0ZXJuYXRpdmVzCisJCWZpcnN0LiBUaGUgb25seSBjYXJkcyB0aGF0IHdvcmsgd2l0aCB0aGUgU0IgZHJpdmVyIGluCisJCUxpbnV4IGhhdmUgYmVlbiBtYWRlIGJ5IENyZWF0aXZlIFRlY2hub2xvZ3kgKHRoZXJlIGlzIGF0IGxlYXN0CisJCW9uZSBjaGlwIG9uIHRoZSBjYXJkIHdpdGggIkNSRUFUSVZFIiBwcmludGVkIG9uIGl0KS4gVGhlCisJCW9ubHkgb3RoZXIgU0IgY29tcGF0aWJsZSBjaGlwcyBhcmUgRVNTIGFuZCBKYXp6MTYgY2hpcHMKKwkJKG1heWJlIEFMU3h4eCBjaGlwcyB0b28gYnV0IHRoZXkgcHJvYmFibHkgZG9uJ3Qgd29yaykuCisJCU1vc3Qgb3RoZXIgIjE2IGJpdCBTQiBjb21wYXRpYmxlIiBjYXJkcyBzdWNoIGFzICJPUFRpL01BRDE2IiBvcgorCQkiQ3J5c3RhbCIgYXJlIF9OT1RfIFNCIGNvbXBhdGlibGUgaW4gTGludXguCisKKwkJUHJhY3RpY2FsbHkgYWxsIHNvdW5kIGNhcmRzIGhhdmUgc29tZSBraW5kIG9mIFNCIGVtdWxhdGlvbiBtb2RlCisJCWluIGFkZGl0aW9uIHRvIHRoZWlyIG5hdGl2ZSAoMTYgYml0KSBtb2RlLiBJbiBtb3N0IGNhc2VzIHRoaXMKKwkJKDggYml0IG9ubHkpIFNCIGNvbXBhdGlibGUgbW9kZSBkb2Vzbid0IHdvcmsgd2l0aCBMaW51eC4gSWYKKwkJeW91IGdldCBpdCB3b3JraW5nIGl0IG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIGdhbWVzIGFuZAorCQlhcHBsaWNhdGlvbnMgd2hpY2ggcmVxdWlyZSAxNiBiaXQgYXVkaW8uIFNvbWUgMTYgYml0IG9ubHkKKwkJYXBwbGljYXRpb25zIGRvbid0IGNoZWNrIGlmIHRoZSBjYXJkIGFjdHVhbGx5IHN1cHBvcnRzIDE2IGJpdHMuCisJCVRoZXkganVzdCBkdW1wIDE2IGJpdCBkYXRhIHRvIGEgOCBiaXQgY2FyZCB3aGljaCBwcm9kdWNlcyBqdXN0CisJCW5vaXNlLgorCisJCUluIG1vc3QgY2FzZXMgdGhlIDE2IGJpdCBuYXRpdmUgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgTGludXguCisJCVVzZSB0aGUgU0IgbW9kZSB3aXRoICJjbG9uZXMiIG9ubHkgaWYgeW91IGRvbid0IGZpbmQgYW55dGhpbmcKKwkJYmV0dGVyIGZyb20gdGhlIHJlc3Qgb2YgdGhpcyBkb2MuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitHcmF2aXMgVWx0cmFzb3VuZCAoR1VTKQorCUdVUworCUdVUyArIHRoZSAxNiBiaXQgb3B0aW9uCisJR1VTIE1BWAorCUdVUyBBQ0UgKE5vIE1JREkgcG9ydCBhbmQgYXVkaW8gcmVjb3JkaW5nKQorCUdVUyBQblAgKHdpdGggUkFNKQorCitNUFUtNDAxCWFuZCBjb21wYXRpYmxlcworCVRoZSBkcml2ZXIgd29ya3MgYm90aCB3aXRoIHRoZSBmdWxsIChpbnRlbGxpZ2VudCBtb2RlKSBNUFUtNDAxCisJY2FyZHMgKHN1Y2ggYXMgTVBVIElQQy1UIGFuZCBNUVgtMzJNKSBhbmQgd2l0aCB0aGUgVUFSVCBvbmx5CisJZHVtYiBNSURJIHBvcnRzLiBNUFUtNDAxIGlzIGN1cnJlbnRseSB0aGUgbW9zdCBjb21tb24gTUlESQorCWludGVyZmFjZS4gTW9zdCBzb3VuZCBjYXJkcyBhcmUgY29tcGF0aWJsZSB3aXRoIGl0LiBIb3dldmVyLAorCWRvbid0IGVuYWJsZSBNUFU0MDEgbW9kZSBibGluZGx5LiBNYW55IGNhcmRzIHdpdGggbmF0aXZlIHN1cHBvcnQKKwlpbiB0aGUgZHJpdmVyIGhhdmUgdGhlaXIgb3duIE1QVTQwMSBkcml2ZXIuIEVuYWJsaW5nIHRoZSBzdGFuZGFyZCBvbmUKKwl3aWxsIGNhdXNlIGEgY29uZmxpY3Qgd2l0aCB0aGVzZSBjYXJkcy4gU28gY2hlY2sgaWYgeW91ciBjYXJkIGlzCisJaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIGJlZm9yZSBlbmFibGluZyBNUFU0MDEuCisKK1dpbmRvd3MgU291bmQgU3lzdGVtIChNU1MvV1NTKQorCUV2ZW4gd2hlbiBNaWNyb3NvZnQgaGFzIGRpc2NvbnRpbnVlZCB0aGVpciBvd24gU291bmQgU3lzdGVtIGNhcmQgCisJdGhleSBtYW5hZ2VkIHRvIG1ha2UgaXQgYSBzdGFuZGFyZC4gTVNTIGNvbXBhdGlibGUgY2FyZHMgYXJlIGJhc2VkIG9uIAorCWEgY29kZWMgY2hpcCB3aGljaCBpcyBlYXNpbHkgYXZhaWxhYmxlIGZyb20gYXQgbGVhc3QgdHdvIG1hbnVmYWN0dXJlcnMKKwkoQUQxODQ4IGJ5IEFuYWxvZyBEZXZpY2VzIGFuZCBDUzQyMzEvQ1M0MjQ4IGJ5IENyeXN0YWwgU2VtaWNvbmR1Y3RvcikuCisJQ3VycmVudGx5IG1vc3Qgc291bmQgY2FyZHMgYXJlIGJhc2VkIG9uIG9uZSBvZiB0aGUgTVNTIGNvbXBhdGlibGUgY29kZWMKKwljaGlwcy4gVGhlIENTNDIzMSBpcyB1c2VkIGluIHRoZSBoaWdoIHF1YWxpdHkgY2FyZHMgc3VjaCBhcyBHVVMgTUFYLAorCU1lZGlhVHJpeCBBdWRpb1RyaXggUHJvIGFuZCBUQiBUcm9wZXogKEdVUyBNQVggaXMgbm90IE1TUyBjb21wYXRpYmxlKS4gCisKKwlIYXZpbmcgYSBBRDE4NDgsIENTNDI0OCBvciBDUzQyMzEgY29kZWMgY2hpcCBvbiB0aGUgY2FyZCBpcyBhIGdvb2QKKwlzaWduLiBFdmVuIGlmIHRoZSBjYXJkIGlzIG5vdCBNU1MgY29tcGF0aWJsZSwgaXQgY291bGQgYmUgZWFzeSB0byB3cml0ZQorCXN1cHBvcnQgZm9yIGl0LiBOb3RlIGFsc28gdGhhdCBtb3N0IE1TUyBjb21wYXRpYmxlIGNhcmRzCisJcmVxdWlyZSBzcGVjaWFsIGJvb3QgdGltZSBpbml0aWFsaXphdGlvbiB3aGljaCBtYXkgbm90IGJlIHByZXNlbnQKKwlpbiB0aGUgZHJpdmVyLiBBbHNvLCBzb21lIE1TUyBjb21wYXRpYmxlIGNhcmRzIGhhdmUgbmF0aXZlIHN1cHBvcnQuCisJRW5hYmxpbmcgdGhlIE1TUyBzdXBwb3J0IHdpdGggdGhlc2UgY2FyZHMgaXMgbGlrZWx5IHRvCisJY2F1c2UgYSBjb25mbGljdC4gU28gY2hlY2sgaWYgeW91ciBjYXJkIGlzIGxpc3RlZCBpbiB0aGlzIGZpbGUgYmVmb3JlCisJZW5hYmxpbmcgdGhlIE1TUyBzdXBwb3J0LgorCitZYW1haGEgRk0gc3ludGhlc2l6ZXJzIChPUEwyLCBPUEwzIChub3QgT1BMMy1TQSkgYW5kIE9QTDQpCisJTW9zdCBzb3VuZCBjYXJkcyBoYXZlIGEgRk0gc3ludGhlc2l6ZXIgY2hpcC4gVGhlIE9QTDIgaXMgYSAyCisJb3BlcmF0b3IgY2hpcCB1c2VkIGluIHRoZSBvcmlnaW5hbCBBZExpYiBjYXJkLiBDdXJyZW50bHkgaXQncyB1c2VkCisJb25seSBpbiB0aGUgY2hlYXBlc3QgKDggYml0IG1vbm8pIGNhcmRzLiBUaGUgT1BMMyBpcyBhIDQgb3BlcmF0b3IgCisJRk0gY2hpcCB3aGljaCBwcm92aWRlcyBiZXR0ZXIgc291bmQgcXVhbGl0eSBhbmQvb3IgbW9yZSBhdmFpbGFibGUgCisJdm9pY2VzIHRoYW4gdGhlIE9QTDIuIFRoZSBPUEw0IGlzIGEgbmV3IGNoaXAgdGhhdCBoYXMgYW4gT1BMMyBhbmQKKwlhIHdhdmUgdGFibGUgc3ludGhlc2l6ZXIgcGFja2VkIG9udG8gdGhlIHNhbWUgY2hpcC4gVGhlIGRyaXZlciBzdXBwb3J0cworCWp1c3QgdGhlIE9QTDMgbW9kZSBkaXJlY3RseS4gTW9zdCBjYXJkcyB3aXRoIGFuIE9QTDQgKGxpa2UKKwlTTSBXYXZlIGFuZCBBdWRpb1RyaXggUHJvKSBzdXBwb3J0IHRoZSBPUEw0IG1vZGUgdXNpbmcgTVBVNDAxCisJZW11bGF0aW9uLiBXcml0aW5nIGEgbmF0aXZlIE9QTDQgc3VwcG9ydCBpcyBkaWZmaWN1bHQKKwlzaW5jZSBZYW1haGEgZG9lc24ndCBnaXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIHNhbXBsZSBST00gY2hpcC4KKworCUVuYWJsZSB0aGUgZ2VuZXJpYyBPUEwyL09QTDMgRk0gc3ludGhlc2l6ZXIgc3VwcG9ydCBpZiB5b3VyCisJY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhLiBEb24ndCBlbmFibGUgaXQgaWYgeW91ciBjYXJkCisJaGFzIGEgc29mdHdhcmUgKFRSUykgYmFzZWQgRk0gZW11bGF0b3IuCisKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTk9URSEgT1BMMy1TQSBpcyBkaWZmZXJlbnQgY2hpcCB0aGFuIHRoZSBvcmRpbmFyeSBPUEwzLiBJbiBhZGRpdGlvbgorCXRvIHRoZSBGTSBzeW50aCB0aGlzIGNoaXAgaGFzIGFsc28gZGlnaXRhbCBhdWRpbyAoV1NTKSBhbmQKKwlNSURJIChNUFU0MDEpIGNhcGFiaWxpdGllcy4gU3VwcG9ydCBmb3IgT1BMMy1TQSBpcyBkZXNjcmliZWQgYmVsb3cuCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZYW1haGEgT1BMMy1TQTEKKworCVlhbWFoYSBPUEwzLVNBMSAoWU1GNzAxKSBpcyBhbiBhdWRpbyBjb250cm9sbGVyIGNoaXAgdXNlZCBvbiBzb21lCisJKEludGVsKSBtb3RoZXJib2FyZHMgYW5kIG9uIGNoZWFwIHNvdW5kIGNhcmRzLiBJdCBzaG91bGQgbm90IGJlCisJY29uZnVzZWQgd2l0aCB0aGUgb3JpZ2luYWwgT1BMMyBjaGlwIChZTUYyNzgpIHdoaWNoIGlzIGVudGlyZWx5CisgICAgICAgIGRpZmZlcmVudCBjaGlwLiBPUEwzLVNBMSBoYXMgc3VwcG9ydCBmb3IgTVNTLCBNUFU0MDEgYW5kIFNCIFBybworCShub3QgdXNlZCBpbiBPU1MvRnJlZSkgaW4gYWRkaXRpb24gdG8gdGhlIE9QTDMgRk0gc3ludGguCisKKwlUaGVyZSBhcmUgYWxzbyBjaGlwcyBjYWxsZWQgT1BMMy1TQTIsIE9QTDMtU0EzLCAuLi4sIE9QTDNTQS1OLiBUaGV5CisJYXJlIFBuUCBjaGlwcyBhbmQgd2lsbCBub3Qgd29yayB3aXRoIHRoZSBPUEwzLVNBMSBkcml2ZXIuIFlvdSBzaG91bGQgCisJdXNlIHRoZSBzdGFuZGFyZCBNU1MsIE1QVTQwMSBhbmQgT1BMMyBvcHRpb25zIHdpdGggdGhlc2UgY2hpcHMgYW5kIHRvCisJYWN0aXZhdGUgdGhlIGNhcmQgdXNpbmcgaXNhcG5wdG9vbHMuCisKKzRGcm9udCBUZWNobm9sb2dpZXMgU29mdE9TUworCisJU29mdE9TUyBpcyBhIHNvZnR3YXJlIGJhc2VkIHdhdmUgdGFibGUgZW11bGF0aW9uIHdoaWNoIHdvcmtzIHdpdGgKKwlhbnkgMTYgYml0IHN0ZXJlbyBzb3VuZCBjYXJkLiBEdWUgdG8gaXRzIG5hdHVyZSBhIGZhc3QgQ1BVIGlzCisJcmVxdWlyZWQgKFAxMzMgaXMgbWluaW11bSkuIEFsdGhvdWdoIFNvZnRPU1MgZG9lcyBfbm90XyB1c2UgTU1YCisJaW5zdHJ1Y3Rpb25zIGl0IGhhcyBwcm92ZW4gb3V0IHRoYXQgcmVjZW50IHByb2Nlc3NvcnMgKHdoaWNoIGFwcGVhcgorCXRvIGhhdmUgTU1YKSBwZXJmb3JtIHNpZ25pZmljYW50bHkgYmV0dGVyIHdpdGggU29mdE9TUyB0aGFuIGVhcmxpZXIKKwlvbmVzLiBGb3IgZXhhbXBsZSBhIFAxNjZNTVggYmVhdHMgYSBQUHJvMjAwLiBTb2Z0T1NTIHNob3VsZCBub3QgYmUgdXNlZAorCW9uIDQ4NiBvciAzODYgbWFjaGluZXMuCisKKwlUaGUgYW1vdW50IG9mIENQVSBsb2FkIGNhdXNlZCBieSBTb2Z0T1NTIGNhbiBiZSBjb250cm9sbGVkIGJ5CisJc2VsZWN0aW5nIHRoZSBDT05GSUdfU09GVE9TU19SQVRFIGFuZCBDT05GSUdfU09GVE9TU19WT0lDRVMKKwlwYXJhbWV0ZXJzIHByb3Blcmx5ICh0aGV5IHdpbGwgYmUgcHJvbXB0ZWQgYnkgbWFrZSBjb25maWcpLiBJdCdzCisJcmVjb21tZW5kZWQgdG8gc2V0IENPTkZJR19TT0ZUT1NTX1ZPSUNFUyB0byAzMi4gSWYgeW91IGhhdmUgYQorCVAxNjZNTVggb3IgZmFzdGVyIChQUHJvMjAwIGlzIG5vdCBmYXN0ZXIpIHlvdSBjYW4gc2V0CisJQ09ORklHX1NPRlRPU1NfUkFURSB0byA0NDEwMCAoa0h6KS4gSG93ZXZlciB3aXRoIHNsb3dlciBzeXN0ZW1zIGl0CisJcmVjb21tZW5kZWQgdG8gdXNlIHNhbXBsaW5nIHJhdGVzIGFyb3VuZCAyMjA1MCBvciBldmVuIDE2MDAwIGtIei4KKwlTZWxlY3RpbmcgdG9vIGhpZ2ggdmFsdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzIG1heSBoYW5nIHlvdXIKKwlzeXN0ZW0gd2hlbiBwbGF5aW5nIE1JREkgZmlsZXMgd2l0aCBoaWdodCBkZWdyZWUgb2YgcG9seXBob255CisJKG51bWJlciBvZiBjb25jdXJyZW50bHkgcGxheWluZyBub3RlcykuIEl0J3MgYWxzbyBwb3NzaWJsZSB0bworCWRlY3JlYXNlIENPTkZJR19TT0ZUT1NTX1ZPSUNFUy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UKKwloaWdoZXIgc2FtcGxpbmcgcmF0ZXMuIEhvd2V2ZXIgdXNpbmcgZmV3ZXIgdm9pY2VzIGRlY3JlYXNlcworCXBsYXliYWNrIHF1YWxpdHkgbW9yZSB0aGFuIGRlY3JlYXNpbmcgdGhlIHNhbXBsaW5nIHJhdGUuCisKKwlTb2Z0T1NTIGtlZXBzIHRoZSBzYW1wbGVzIGxvYWRlZCBvbiB0aGUgc3lzdGVtJ3MgUkFNIHNvIG11Y2ggUkFNIGlzCisJcmVxdWlyZWQuIFNvZnRPU1Mgc2hvdWxkIG5ldmVyIGJlIHVzZWQgb24gbWFjaGluZXMgd2l0aCBsZXNzIHRoYW4gMTYgTUIKKwlvZiBSQU0gc2luY2UgdGhpcyBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgKHlvdSBtYXkgYWNjaWRlbnRhbGx5IHJ1biBvdXQKKwlvZiBtZW1vcnkgd2hpY2ggcHJvYmFibHkgY3Jhc2hlcyB0aGUgbWFjaGluZSkuIAorCisJU29mdE9TUyBpbXBsZW1lbnRzIHRoZSB3YXZlIHRhYmxlIEFQSSBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvciBHVVMuIEZvcgorCXRoaXMgcmVhc29uIGFsbCBhcHBsaWNhdGlvbnMgZGVzaWduZWQgZm9yIEdVUyBzaG91bGQgd29yayAoYXQgbGVhc3QKKwlhZnRlciBtaW5vciBtb2RpZmljYXRpb25zKS4gRm9yIGV4YW1wbGUgZ21vZC94Z21vZCBhbmQgcGxheW1pZGkgLWcgYXJlCisJa25vd24gdG8gd29yay4KKworCVRvIHdvcmsgU29mdE9TUyB3aWxsIHJlcXVpcmUgR1VTIGNvbXBhdGlibGUKKwlwYXRjaCBmaWxlcyB0byBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSAoaW4gL2Rvcy91bHRyYXNuZC9taWRpKS4gWW91CisJY2FuIHVzZSB0aGUgcHVibGljIGRvbWFpbiBNSURJQSBwYXRjaHNldCBhdmFpbGFibGUgZnJvbSBzZXZlcmFsIGZ0cAorCXNpdGVzLgorCisgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCUlNUE9SVEFOVCBOT1RJQ0UhIFRoZSBvcmlnaW5hbCBwYXRjaCBzZXQgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgR3JhdmlzIAorCVVsdHJhc291bmQgY2FyZCBpcyBub3QgaW4gcHVibGljIGRvbWFpbiAoZXZlbiB0aG91Z2ggaXQncyBhdmFpbGFibGUgZnJvbQorCXNvbWUgRlRQIHNpdGVzKS4gWW91IHNob3VsZCBjb250YWN0IFZvaWNlIENyeXN0YWwgKHd3dy52b2ljZWNyeXN0YWwuY29tKQorCWlmIHlvdSBsaWtlIHRvIHVzZSB0aGVzZSBwYXRjaGVzIHdpdGggU29mdE9TUyBpbmNsdWRlZCBpbiBPU1MvRnJlZS4KKyAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1BTUyBiYXNlZCBjYXJkcyAoQUQxODQ4ICsgQURTUC0yMTE1ICsgRWNobyBFU0M2MTQgQVNJQykKKwlBbmFsb2cgRGV2aWNlcyBhbmQgRWNobyBTcGVlY2ggaGF2ZSB0b2dldGhlciBkZWZpbmVkIGEgc291bmQgY2FyZAorCWFyY2hpdGVjdHVyZSBiYXNlZCBvbiB0aGUgYWJvdmUgY2hpcHMuIFRoZSBEU1AgY2hpcCBpcyB1c2VkCisJZm9yIGVtdWxhdGlvbiBvZiBTQiBQcm8sIEZNIGFuZCBHZW5lcmFsIE1JREkvTVQzMi4KKworCVRoZXJlIGFyZSBzZXZlcmFsIGNhcmRzIGJhc2VkIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBUaGUgbW9zdCBrbm93bgorCW9uZXMgYXJlIE9yY2hpZCBTVzMyIGFuZCBDYXJkaW5hbCBEU1AxNi4gCisKKwlUaGUgZHJpdmVyIHN1cHBvcnRzIGRvd25sb2FkaW5nIERTUCBhbGdvcml0aG1zIHRvIHRoZXNlIGNhcmRzLgorCisJTk9URSEgWW91IHdpbGwgaGF2ZSB0byB1c2UgdGhlICJvbGQiIGNvbmZpZyBzY3JpcHQgd2hlbiBjb25maWd1cmluZworCVBTUyBjYXJkcy4KKworTWVkaWFUcml4IEF1ZGlvVHJpeCBQcm8KKwlUaGUgQVRQIGNhcmQgaXMgYnVpbHQgYXJvdW5kIGEgQ1M0MjMxIGNvZGVjIGFuZCBhbiBPUEw0IHN5bnRoZXNpemVyCisJY2hpcHMuIFRoZSBPUEw0IG1vZGUgaXMgc3VwcG9ydGVkIGJ5IGEgbWljcm9jb250cm9sbGVyIHJ1bm5pbmcgYQorCUdlbmVyYWwgTUlESSBlbXVsYXRvci4gVGhlcmUgaXMgYWxzbyBhIFNCIDEuNSBjb21wYXRpYmxlIHBsYXliYWNrIG1vZGUuCisKK0Vuc29uaXEgU291bmRTY2FwZSBhbmQgY29tcGF0aWJsZXMKKwlFbnNvbmlxIGhhcyBkZXNpZ25lZCBhIHNvdW5kIGNhcmQgYXJjaGl0ZWN0dXJlIGJhc2VkIG9uIHRoZQorCU9UVE8gc3ludGhlc2l6ZXIgY2hpcCB1c2VkIGluIHRoZWlyIHByb2Zlc3Npb25hbCBNSURJIHN5bnRoZXNpemVycy4KKwlTZXZlcmFsIGNvbXBhbmllcyAoaW5jbHVkaW5nIEVuc29uaXEsIFJldmVhbCBhbmQgU3BlYSkgYXJlIHNlbGxpbmcKKwljYXJkcyBiYXNlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4KKworCU5PVEUhIFRoZSBTb3VuZFNjYXBlIFBuUCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9TUy9GcmVlLiBFbnNvbmlxIFZJVk8gYW5kCisJVklWTzkwIGNhcmRzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIFNvdW5kc2NhcGVzIHNvIHRoZSBTb3VuZHNjYXBlCisgICAgICAgIGRyaXZlciB3aWxsIG5vdCB3b3JrIHdpdGggdGhlbS4gWW91IG1heSB3YW50IHRvIHVzZSBPU1MvTGludXggd2l0aCB0aGVzZQorICAgICAgICBjYXJkcy4KKworT1BUaSBNQUQxNiBhbmQgTW96YXJ0IGJhc2VkIGNhcmRzCisJVGhlIE1vemFydCAoT0FLIE9USS02MDEpLCBNQUQxNiAoT1BUaSA4MkM5MjgpLCBNQUQxNiBQcm8gKE9QVGkgODJDOTI5KSwKKwlPUFRpIDgyQzkyNC84MkM5MjUgKGluIF9ub25fIFBuUCBtb2RlKSBhbmQgT1BUaSA4MkM5MzAgaW50ZXJmYWNlCisJY2hpcHMgYXJlIHVzZWQgaW4gbWFueSBkaWZmZXJlbnQgc291bmQgY2FyZHMsIGluY2x1ZGluZyBzb21lCisJY2FyZHMgYnkgUmV2ZWFsIG1pcm8gYW5kIFR1cnRsZSBCZWFjaCAoVHJvcGV6KS4gVGhlIHB1cnBvc2Ugb2YgdGhlc2UKKwljaGlwcyBpcyB0byBjb25uZWN0IG90aGVyIGF1ZGlvIGNvbXBvbmVudHMgdG8gdGhlIFBDIGJ1cy4gVGhlCisJaW50ZXJmYWNlIGNoaXAgcGVyZm9ybXMgYWRkcmVzcyBkZWNvZGluZyBmb3IgdGhlIG90aGVyIGNoaXBzLgorCU5PVEUhIFRyb3BleiBQbHVzIGlzIG5vdCBNQUQxNiBidXQgQ1M0MjMyIGJhc2VkLgorCU5PVEUhIE1BRDE2IFBuUCBjYXJkcyAoODJDOTI0LCA4MkM5MjUsIDgyQzkzMSkgYXJlIG5vdCBNQUQxNiBjb21wYXRpYmxlCisJaW4gdGhlIFBuUCBtb2RlLiBZb3Ugd2lsbCBoYXZlIHRvIHVzZSB0aGVtIGluIE1TUyBtb2RlIGFmdGVyIGhhdmluZworCWluaXRpYWxpemVkIHRoZW0gdXNpbmcgaXNhcG5wdG9vbHMgb3IgRE9TLiA4MkM5MzEgcHJvYmFibHkgcmVxdWlyZXMKKwlpbml0aWFsaXphdGlvbiB1c2luZyBET1MvV2luZG93cyAocnVubmluZyBpc2FwbnB0b29scyBpcyBub3QgZW5vdWdoKS4KKwlJdCdzIHBvc3NpYmxlIHRvIHVzZSA4MkM5MzEgd2l0aCBPU1MvRnJlZSBieSBqdW1wZXJpbmcgaXQgdG8gbm9uLVBuUAorCW1vZGUgKHByb3ZpZGVkIHRoYXQgdGhlIGNhcmQgaGFzIGEganVtcGVyIGZvciB0aGlzKS4gSW4gbm9uLVBuUCBtb2RlCisJODJDOTMxIGlzIGNvbXBhdGlibGUgd2l0aCA4MkM5MzAgYW5kIHNob3VsZCB3b3JrIHdpdGggdGhlIE1BRDE2IGRyaXZlcgorCSh3aXRob3V0IG5lZWQgdG8gdXNlIGlzYXBucHRvb2xzIG9yIERPUyB0byBpbml0aWFsaXplIGl0KS4gQWxsIE9QVGkKKwljaGlwcyBhcmUgc3VwcG9ydGVkIGJ5IE9TUy9MaW51eCAoYm90aCBpbiBQblAgYW5kIG5vbi1QblAgbW9kZXMpLgorCitBdWRpbyBFeGNlbCBEU1AxNiAKKwlTdXBwb3J0IGZvciB0aGlzIGNhcmQgd2FzIHdyaXR0ZW4gYnkgUmljY2FyZG8gRmFjY2V0dGkKKwkocmljY2FyZG9AY2RjOGc1LmNkYy5wb2xpbWkuaXQpLiBUaGUgQUVEU1AxNiBkcml2ZXIgaW5jbHVkZWQgaW4KKwl0aGUgbG93bGV2ZWwvIGRpcmVjdG9yeS4gVG8gdXNlIGl0IHlvdSBzaG91bGQgZW5hYmxlIHRoZQorCSJBZGRpdGlvbmFsIGxvdyBsZXZlbCBkcml2ZXJzIiBvcHRpb24uCisKK0NyeXN0YWwgQ1M0MjMyIGFuZCBDUzQyMzYgYmFzZWQgY2FyZHMgc3VjaCBhcyBBY2VyTWFnaWMgUzIzLCBUQiBUcm9wZXogX1BsdXNfIGFuZCAKKwltYW55IFBDIG1vdGhlcmJvYXJkcyAoQ29tcGFxLCBIUCwgSW50ZWwsIC4uLikKKwlDUzQyMzIgaXMgYSBQblAgbXVsdGltZWRpYSBjaGlwIHdoaWNoIGNvbnRhaW5zIGEgQ1MzMjMxQSBjb2RlYywKKwlTQiBhbmQgTVBVNDAxIGVtdWxhdGlvbnMuIFRoZXJlIGlzIHN1cHBvcnQgZm9yIE9QTDMgdG9vLgorCVVuZm9ydHVuYXRlbHkgdGhlIE1QVTQwMSBtb2RlIGRvZXNuJ3Qgd29yayAoSSBkb24ndCBrbm93IGhvdyB0bworCWluaXRpYWxpemUgaXQpLiBDUzQyMzYgaXMgYW4gZW5oYW5jZWQgKGNvbXBhdGlibGUpIHZlcnNpb24gb2YgQ1M0MjMyLgorCU5PVEUhIERvbid0IGV2ZXIgdHJ5IHRvIHVzZSBpc2FwbnB0b29scyB3aXRoIENTNDIzMiBzaW5jZSB0aGlzIHdpbGwganVzdAorCWZyZWV6ZSB5b3VyIG1hY2hpbmUgKGR1ZSB0byBjaGlwIGJ1Z3MpLiBJZiB5b3UgaGF2ZSBwcm9ibGVtcyBpbiBnZXR0aW5nCisJQ1M0MjMyIHdvcmtpbmcgeW91IGNvdWxkIHRyeSBpbml0aWFsaXppbmcgaXQgd2l0aCBET1MgKENTNDIzMkMuRVhFKSBhbmQKKwl0aGVuIGJvb3RpbmcgTGludXggdXNpbmcgbG9hZGxpbi4gQ1M0MjMyQy5FWEUgbG9hZHMgYSBzZWNyZXQgZmlybXdhcmUKKwlwYXRjaCB3aGljaCBpcyBub3QgZG9jdW1lbnRlZCBieSBDcnlzdGFsLgorCitUdXJ0bGUgQmVhY2ggTWF1aSBhbmQgVHJvcGV6ICJjbGFzc2ljIgorCVRoaXMgZHJpdmVyIHZlcnNpb24gc3VwcG9ydHMgc2FtcGxlLCBwYXRjaCBhbmQgcHJvZ3JhbSBsb2FkaW5nIGNvbW1hbmRzCisJZGVzY3JpYmVkIGluIHRoZSBNYXVpL1Ryb3BleiBVc2VyJ3MgbWFudWFsLiAKKwlUaGVyZSBpcyBub3cgZnVsbCBpbml0aWFsaXphdGlvbiBzdXBwb3J0IHRvby4gVGhlIGF1ZGlvIHNpZGUgb2YKKwl0aGUgVHJvcGV6IGlzIGJhc2VkIG9uIHRoZSBNQUQxNiBjaGlwIChzZWUgYWJvdmUpLgorCU5PVEUhIFRyb3BleiBQbHVzIGlzIGRpZmZlcmVudCBjYXJkIHRoYW4gVHJvcGV6ICJjbGFzc2ljIiBhbmQgd2lsbCBub3QKKwl3b3JrIGZ1bGx5IGluIExpbnV4LiBZb3UgY2FuIGdldCBhdWRpbyBmZWF0dXJlcyB3b3JraW5nIGJ5IGNvbmZpZ3VyaW5nCisJdGhlIGNhcmQgYXMgYSBDUzQyMzIgYmFzZWQgY2FyZCAoYWJvdmUpLgorCisKK0p1bXBlcnMgYW5kIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBvZiB0aGUgZWFybGllc3Qgc291bmQgY2FyZHMgd2VyZSBqdW1wZXIgY29uZmlndXJhYmxlLiBZb3UgaGF2ZSB0bworY29uZmlndXJlIHRoZSBkcml2ZXIgdXNlIEkvTywgSVJRIGFuZCBETUEgc2V0dGluZ3MKK3RoYXQgbWF0Y2ggdGhlIGp1bXBlcnMuIEp1c3QgZmV3IDggYml0IGNhcmRzIGFyZSBmdWxseSBqdW1wZXIgCitjb25maWd1cmFibGUgKFNCIDEueC8yLngsIFNCIFBybyBhbmQgY2xvbmVzKS4KK1NvbWUgY2FyZHMgbWFkZSBieSBBenRlY2ggaGF2ZSBhbiBFRVBST00gd2hpY2ggY29udGFpbnMgdGhlIAorY29uZmlnIGluZm8uIFRoZXNlIGNhcmRzIGJlaGF2ZSBtdWNoIGxpa2UgaGFyZHdhcmUganVtcGVyZWQgY2FyZHMuCisKK01vc3QgY2FyZHMgaGF2ZSBqdW1wZXIgZm9yIHRoZSBiYXNlIEkvTyBhZGRyZXNzIGJ1dCBvdGhlciBwYXJhbWV0ZXJzCithcmUgc29mdHdhcmUgY29uZmlndXJhYmxlLiBTb21ldGltZXMgdGhlcmUgYXJlIGZldyBvdGhlciBqdW1wZXJzIHRvby4KKworTGF0ZXN0IGNhcmRzIGFyZSBmdWxseSBzb2Z0d2FyZSBjb25maWd1cmFibGUgb3IgdGhleSBhcmUgUG5QIElTQQorY29tcGF0aWJsZS4gVGhlcmUgYXJlIG5vIGp1bXBlcnMgb24gdGhlIGJvYXJkLgorCitUaGUgZHJpdmVyIGhhbmRsZXMgc29mdHdhcmUgY29uZmlndXJhYmxlIGNhcmRzIGF1dG9tYXRpY2FsbHkuIEp1c3QgY29uZmlndXJlCit0aGUgZHJpdmVyIHRvIHVzZSBJL08sIElSUSBhbmQgRE1BIHNldHRpbmdzIHdoaWNoIGFyZSBrbm93biB0byB3b3JrLgorWW91IGNvdWxkIHVzdWFsbHkgdXNlIHRoZSBzYW1lIHZhbHVlcyB0aGFuIHdpdGggRE9TIGFuZC9vciBXaW5kb3dzLgorVXNpbmcgZGlmZmVyZW50IHNldHRpbmdzIGlzIHBvc3NpYmxlIGJ1dCBub3QgcmVjb21tZW5kZWQgc2luY2UgaXQgbWF5IGNhdXNlCitzb21lIHRyb3VibGUgKGZvciBleGFtcGxlIHdoZW4gd2FybSBib290aW5nIGZyb20gYW4gT1MgdG8gYW5vdGhlciBvcgord2hlbiBpbnN0YWxsaW5nIG5ldyBoYXJkd2FyZSB0byB0aGUgbWFjaGluZSkuCisKK1NvdW5kIGRyaXZlciBzZXRzIHRoZSBzb2Z0IGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIG9mIHRoZSBjYXJkIGF1dG9tYXRpY2FsbHkKK2R1cmluZyBib290LiBVc3VhbGx5IHlvdSBkb24ndCBuZWVkIHRvIHJ1biBhbnkgZXh0cmEgaW5pdGlhbGl6YXRpb24KK3Byb2dyYW1zIHdoZW4gYm9vdGluZyBMaW51eCBidXQgdGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9ucy4gU2VlIHRoZQorY2FyZC1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgYmVsb3cgZm9yIG1vcmUgaW5mby4KKworVGhlIGRyYXdiYWNrIG9mIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24gaXMgdGhhdCB0aGUgZHJpdmVyIG5lZWRzIHRvIGtub3cKK2hvdyB0aGUgY2FyZCBtdXN0IGJlIGluaXRpYWxpemVkLiBJdCBjYW5ub3QgaW5pdGlhbGl6ZSB1bmtub3duIGNhcmRzCitldmVuIGlmIHRoZXkgYXJlIG90aGVyd2lzZSBjb21wYXRpYmxlIHdpdGggc29tZSBvdGhlciBjYXJkcyAobGlrZSBTQiwKK01QVTQwMSBvciBXaW5kb3dzIFNvdW5kIFN5c3RlbSkuCisKKworV2hhdCBpZiB5b3VyIGNhcmQgd2FzIG5vdCBsaXN0ZWQgYWJvdmU/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGxvb2sgYXQgdGhlIG1ham9yIElDIGNoaXBzIG9uIHRoZSBjYXJkLgorTWFueSBvZiB0aGUgbGF0ZXN0IHNvdW5kIGNhcmRzIGFyZSBiYXNlZCBvbiBzb21lIHN0YW5kYXJkIGNoaXBzLiBJZiB5b3UKK2FyZSBsdWNreSwgYWxsIG9mIHRoZW0gY291bGQgYmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuIFRoZSBtb3N0IGNvbW1vbiBvbmVzCithcmUgdGhlIE9QVGkgTUFEMTYsIE1vemFydCwgU291bmRTY2FwZSAoRW5zb25pcSkgYW5kIHRoZSBQU1MgYXJjaGl0ZWN0dXJlcworbGlzdGVkIGFib3ZlLiBBbHNvIGxvb2sgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgZm9yIGxpc3Qgb2YgdW5zdXBwb3J0ZWQKK2NhcmRzIGFuZCB0aGUgb25lcyB3aGljaCBjb3VsZCBiZSBzdXBwb3J0ZWQgbGF0ZXIuCisKK1RoZSBsYXN0IHJlc29ydCBpcyB0byBzZW5kIF9leGFjdF8gbmFtZSBhbmQgbW9kZWwgaW5mb3JtYXRpb24gb2YgdGhlIGNhcmQKK3RvIG1lIHRvZ2V0aGVyIHdpdGggYSBsaXN0IG9mIHRoZSBtYWpvciBJQyBjaGlwcyAobWFudWZhY3R1cmVkLCBtb2RlbCkgdG8gCittZS4gSSBjb3VsZCB0aGVuIHRyeSB0byBjaGVjayBpZiB5b3VyIGNhcmQgbG9va3MgbGlrZSBzb21ldGhpbmcgZmFtaWxpYXIuCisKK1RoZXJlIGFyZSBtYW55IG1vcmUgY2FyZHMgaW4gdGhlIHdvcmxkIHRoYW4gbGlzdGVkIGFib3ZlLiBUaGUgZmlyc3QgdGhpbmcgdG8KK2RvIHdpdGggdGhlc2UgY2FyZHMgaXMgdG8gY2hlY2sgaWYgdGhleSBlbXVsYXRlIHNvbWUgb3RoZXIgY2FyZCBvciBpbnRlcmZhY2UKK3N1Y2ggYXMgU0IsIE1TUyBhbmQvb3IgTVBVNDAxLiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMgYSBjaGFuY2UgdG8gZ2V0IHRoZQorY2FyZCB0byB3b3JrIGJ5IGJvb3RpbmcgRE9TIGJlZm9yZSBzdGFydGluZyBMaW51eCAoYm9vdCBET1MsIGhpdCBjdHJsLWFsdC1kZWwKK2FuZCBib290IExpbnV4IHdpdGhvdXQgaGFyZCByZXNldHRpbmcgdGhlIG1hY2hpbmUpLiBJbiB0aGlzIG1ldGhvZCB0aGUKK0RPUyBiYXNlZCBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlIHRvIHVzZSBrbm93biBJL08sIElSUSBhbmQgRE1BCitzZXR0aW5ncy4gSWYgc291bmQgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzYW1lIHNldHRpbmdzLCBldmVyeXRoaW5nCitzaG91bGQgd29yayBPSy4KKworCitDb25maWd1cmluZyBzb3VuZCBkcml2ZXIgKHdpdGggTGludXgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzb3VuZCBkcml2ZXIgaXMgY3VycmVudGx5IGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbC4gVGhlIAorZmlsZXMgYXJlIGluIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvc291bmQvLiAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKglBTFdBWVMgVVNFIFRIRSBTT1VORCBEUklWRVIgVkVSU0lPTiBXSElDSCBJUyBESVNUUklCVVRFRCBXSVRICSAgICoKKyoJVEhFIEtFUk5FTCBTT1VSQ0UgUEFDS0FHRSBZT1UgQVJFIFVTSU5HLiBTT01FIEFMUEhBIEFORCBCRVRBIFRFU1QgICoKKyoJVkVSU0lPTlMgQ0FOIEJFIElOU1RBTExFRCBGUk9NIEEgU0VQQVJBVEVMWSBESVNUUklCVVRFRCBQQUNLQUdFCSAgICoKKyoJQlVUIENIRUNLIFRIQVQgVEhFIFBBQ0tBR0UgSVMgTk9UIE1VQ0ggT0xERVIgKE9SIE5FV0VSKSBUSEFOIFRIRSAgICoKKyoJS0VSTkVMIFlPVSBBUkUgVVNJTkcuIElUJ1MgUE9TU0lCTEUgVEhBVCBUSEUgS0VSTkVML0RSSVZFUiAJICAgKgorKglJTlRFUkZBQ0UgQ0hBTkdFUyBCRVRXRUVOIEtFUk5FTCBSRUxFQVNFUyBXSElDSCBNQVkgQ0FVU0UgU09NRQkgICAqCisqCUlOQ09NUEFUSUJJTElUWSBQUk9CTEVNUy4JCQkJCSAgICoKKyoJCQkJCQkJCQkgICAqCisqCUlOIENBU0UgWU9VIElOU1RBTEwgQSBTRVBBUkFURUxZIERJU1RSSUJVVEVEIFNPVU5EIERSSVZFUiBWRVJTSU9OLCAqCisqCUJFIFNVUkUgVE8gUkVNT1ZFIE9SIFJFTkFNRSBUSEUgT0xEIFNPVU5EIERSSVZFUiBESVJFQ1RPUlkgQkVGT1JFICAqCisqCUlOU1RBTExJTkcgVEhFIE5FVyBPTkUuIExFQVZJTkcgT0xEIEZJTEVTIFRPIFRIRSBTT1VORCBEUklWRVIJICAgKgorKglESVJFQ1RPUlkgX1dJTExfIENBVVNFIFBST0JMRU1TIFdIRU4gVEhFIERSSVZFUiBJUyBVU0VEIE9SCSAgICoKKyoJQ09NUElMRUQuCQkJCQkJCSAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVG8gY29uZmlndXJlIHRoZSBkcml2ZXIsIHJ1biAibWFrZSBjb25maWciIGluIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeQorKC91c3Ivc3JjL2xpbnV4KS4gQW5zd2VyICJ5IiBvciAibSIgdG8gdGhlIHF1ZXN0aW9uIGFib3V0IFNvdW5kIGNhcmQgc3VwcG9ydAorKGFmdGVyIHRoZSBxdWVzdGlvbnMgYWJvdXQgbW91c2UsIENELVJPTSwgZnRhcGUsIGV0Yy4gc3VwcG9ydCkuICBRdWVzdGlvbnMKK2Fib3V0IG9wdGlvbnMgZm9yIHNvdW5kIHdpbGwgdGhlbiBiZSBhc2tlZC4KKworQWZ0ZXIgY29uZmlndXJpbmcgdGhlIGtlcm5lbCBhbmQgc291bmQgZHJpdmVyIGFuZCBjb21waWxlIHRoZSBrZXJuZWwgCitmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBrZXJuZWwgUkVBRE1FLgorCitUaGUgc291bmQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZGlhbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvdW5kIGNvbmZpZ3VyYXRpb24gc3RhcnRzIGJ5IG1ha2luZyBzb21lIHllcy9ubyBxdWVzdGlvbnMuIEJlIGNhcmVmdWwKK3doZW4gYW5zd2VyaW5nIHRvIHRoZXNlIHF1ZXN0aW9ucyBzaW5jZSBhbnN3ZXJpbmcgeSB0byBhIHF1ZXN0aW9uIG1heQorcHJldmVudCBzb21lIGxhdGVyIG9uZXMgZnJvbSBiZWluZyBhc2tlZC4gRm9yIGV4YW1wbGUgZG9uJ3QgYW5zd2VyIHkgdG8KK3RoZSBmaXJzdCBxdWVzdGlvbiAoUEFTMTYpIGlmIHlvdSBkb24ndCByZWFsbHkgaGF2ZSBhIFBBUzE2LiBEb24ndCBlbmFibGUKK21vcmUgY2FyZHMgdGhhbiB5b3UgcmVhbGx5IG5lZWQgc2luY2UgdGhleSBqdXN0IGNvbnN1bWUgbWVtb3J5LiBBbHNvCitzb21lIGRyaXZlcnMgKGxpa2UgTVBVNDAxKSBtYXkgY29uZmxpY3Qgd2l0aCB5b3VyIFNDU0kgY29udHJvbGxlciBhbmQKK3ByZXZlbnQga2VybmVsIGZyb20gYm9vdGluZy4gSWYgeW91IGNhcmQgd2FzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZAorY2FyZHMgKGFib3ZlKSwgcGxlYXNlIGxvb2sgYXQgdGhlIGNhcmQgc3BlY2lmaWMgY29uZmlnIGluc3RydWN0aW9ucworKGxhdGVyIGluIHRoaXMgZmlsZSkgYmVmb3JlIHN0YXJ0aW5nIHRvIGNvbmZpZ3VyZS4gU29tZSBjYXJkcyBtdXN0IGJlCitjb25maWd1cmVkIGluIHdheSB3aGljaCBpcyBub3Qgb2J2aW91cy4KKworU28gaGVyZSBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWcgZGlhbG9nLiBBbnN3ZXIgJ3knIG9yICduJyB0byB0aGVzZQorcXVlc3Rpb25zLiBUaGUgZGVmYXVsdCBhbnN3ZXIgaXMgc2hvd24gc28gdGhhdCAoeS9uKSBtZWFucyAneScgYnkgZGVmYXVsdCBhbmQKKyhuL3kpIG1lYW5zICduJy4gVG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlLCBqdXN0IGhpdCBFTlRFUi4gQnV0IGJlIGNhcmVmdWwKK3NpbmNlIHVzaW5nIHRoZSBkZWZhdWx0IF9kb2Vzbid0XyBndWFyYW50ZWUgYW55dGhpbmcuCisKK05vdGUgYWxzbyB0aGF0IGFsbCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhc2tlZC4gVGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbQorbWF5IGRpc2FibGUgc29tZSBxdWVzdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBlYXJsaWVyIGNob2ljZXMuIEl0IG1heSBhbHNvCitzZWxlY3Qgc29tZSBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYXMgd2VsbC4KKworICAiUHJvQXVkaW9TcGVjdHJ1bSAxNiBzdXBwb3J0IiwKKwktIEFuc3dlciAneSdfT05MWV8gaWYgeW91IGhhdmUgYSBQcm8gQXVkaW8gU3BlY3RydW0gXzE2XywKKwkgIFBybyBBdWRpbyBTdHVkaW8gMTYgb3IgTG9naXRlY2ggU291bmRNYW4gMTYgKGJlIHN1cmUgdGhhdAorCSAgeW91IHJlYWQgdGhlIGFib3ZlIGxpc3QgY29ycmVjdGx5KS4gRG9uJ3QgYW5zd2VyICd5JyBpZiB5b3UKKwkgIGhhdmUgc29tZSBvdGhlciBjYXJkIG1hZGUgYnkgTWVkaWEgVmlzaW9uIG9yIExvZ2l0ZWNoIHNpbmNlIHRoZXkKKwkgIGFyZSBub3QgUEFTMTYgY29tcGF0aWJsZS4KKwkgIE5PVEUhIFNpbmNlIDMuNS1iZXRhMTAgeW91IG5lZWQgdG8gZW5hYmxlIFNCIHN1cHBvcnQgKG5leHQgcXVlc3Rpb24pCisJICBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFNCIGVtdWxhdGlvbiBvZiBQQVMxNi4gSXQncyBhbHNvIHBvc3NpYmxlIHRvCisgICAJICB0aGUgZW11bGF0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBhIHRydWUgU0IgY2FyZCB0b2dldGhlciB3aXRoIFBBUzE2CisJICAodGhlcmUgaXMgYW5vdGhlciBxdWVzdGlvbiBhYm91dCB0aGlzIHRoYXQgaXMgYXNrZWQgbGF0ZXIpLgorICAiU291bmQgQmxhc3RlciBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgYW4gb3JpZ2luYWwgU0IgY2FyZCBtYWRlIGJ5IENyZWF0aXZlIExhYnMKKwkgIG9yIGEgZnVsbCAxMDAlIGhhcmR3YXJlIGNvbXBhdGlibGUgY2xvbmUgKGxpa2UgVGh1bmRlcmJvYXJkIG9yCisJICBTTSBHYW1lcykuIElmIHlvdXIgY2FyZCB3YXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIChhYm92ZSksCisJICBwbGVhc2UgbG9vayBhdCB0aGUgY2FyZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlCisJICBiZWZvcmUgYW5zd2VyaW5nIHRoaXMgcXVlc3Rpb24uIEZvciBhbiB1bmtub3duIGNhcmQgeW91IG1heSBhbnN3ZXIgCisJICAneScgaWYgdGhlIGNhcmQgY2xhaW1zIHRvIGJlIFNCIGNvbXBhdGlibGUuCisJIEVuYWJsZSB0aGlzIG9wdGlvbiBhbHNvIHdpdGggUEFTMTYgKGNoYW5nZWQgc2luY2UgdjMuNS1iZXRhOSkuCisKKwkgRG9uJ3QgZW5hYmxlIFNCIGlmIHlvdSBoYXZlIGEgTUFEMTYgb3IgTW96YXJ0IGNvbXBhdGlibGUgY2FyZC4KKworICAiR2VuZXJpYyBPUEwyL09QTDMgRk0gc3ludGhlc2l6ZXIgc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIGlmIHlvdXIgY2FyZCBoYXMgYSBGTSBjaGlwIG1hZGUgYnkgWWFtYWhhIChPUEwyL09QTDMvT1BMNCkuCisJICBBbnN3ZXJpbmcgJ3knIGlzIHVzdWFsbHkgYSBzYWZlIGFuZCByZWNvbW1lbmRlZCBjaG9pY2UuIEhvd2V2ZXIgc29tZQorCSAgY2FyZHMgbWF5IGhhdmUgc29mdHdhcmUgKFRTUikgRk0gZW11bGF0aW9uLiBFbmFibGluZyBGTSBzdXBwb3J0CisJICB3aXRoIHRoZXNlIGNhcmRzIG1heSBjYXVzZSB0cm91YmxlLiBIb3dldmVyIEkgZG9uJ3QgY3VycmVudGx5IGtub3cKKwkgIHN1Y2ggY2FyZHMuCisgICJHcmF2aXMgVWx0cmFzb3VuZCBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgR1VTIG9yIEdVUyBNQVguIEFuc3dlciAnbicgaWYgeW91IGRvbid0CisJICBoYXZlIEdVUyBzaW5jZSB0aGUgR1VTIGRyaXZlciBjb25zdW1lcyBtdWNoIG1lbW9yeS4KKwkgIEN1cnJlbnRseSBJIGRvbid0IGhhdmUgZXhwZXJpZW5jZXMgd2l0aCB0aGUgR1VTIEFDRSBzbyBJIGRvbid0CisJICBrbm93IHdoYXQgdG8gYW5zd2VyIHdpdGggaXQuCisgICJNUFUtNDAxIHN1cHBvcnQgKE5PVCBmb3IgU0IxNikiLAorCS0gQmUgY2FyZWZ1bCB3aXRoIHRoaXMgcXVlc3Rpb24uIFRoZSBNUFU0MDEgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZAorCSAgYnkgYWxtb3N0IGFueSBzb3VuZCBjYXJkIHRvZGF5LiBIb3dldmVyIHNvbWUgbmF0aXZlbHkgc3VwcG9ydGVkIGNhcmRzCisJICBoYXZlIHRoZWlyIG93biBkcml2ZXIgZm9yIE1QVTQwMS4gRW5hYmxpbmcgdGhlIE1QVTQwMSBvcHRpb24gd2l0aAorCSAgdGhlc2UgY2FyZHMgd2lsbCBjYXVzZSBhIGNvbmZsaWN0LiBBbHNvIGVuYWJsaW5nIE1QVTQwMSBvbiBhIHN5c3RlbQorCSAgdGhhdCBkb2Vzbid0IHJlYWxseSBoYXZlIGEgTVBVNDAxIGNvdWxkIGNhdXNlIHNvbWUgdHJvdWJsZS4gSWYgeW91cgorCSAgY2FyZCB3YXMgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIChhYm92ZSksIHBsZWFzZSBsb29rIGF0CisJICB0aGUgY2FyZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlLgorCisJICBJbiBNT1NUIGNhc2VzIHRoaXMgTVBVNDAxIGRyaXZlciBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggInRydWUiCisJICBNSURJLW9ubHkgTVBVNDAxIHByb2Zlc3Npb25hbCBjYXJkcy4gSW4gbW9zdCBvdGhlciBjYXNlcyB0aGVyZQorCSAgaXMgYW5vdGhlciB3YXkgdG8gZ2V0IHRoZSBNUFU0MDEgY29tcGF0aWJsZSBpbnRlcmZhY2Ugb2YgYQorCSAgc291bmQgY2FyZCB0byB3b3JrLgorCSAgU3VwcG9ydCBmb3IgdGhlIE1QVTQwMSBjb21wYXRpYmxlIE1JREkgcG9ydCBvZiBTQjE2LCBFU1MxNjg4CisJICBhbmQgTVYgSmF6ejE2IGNhcmRzIGlzIGluY2x1ZGVkIGluIHRoZSBTQiBkcml2ZXIuIFVzZSBpdCBpbnN0ZWFkCisJICBvZiB0aGlzIHNlcGFyYXRlIE1QVTQwMSBkcml2ZXIgd2l0aCB0aGVzZSBjYXJkcy4gQXMgd2VsbCAKKwkgIFNvdW5kc2NhcGUsIFBTUyBhbmQgTWF1aSBkcml2ZXJzIGluY2x1ZGUgdGhlaXIgb3duIE1QVTQwMQorCSAgb3B0aW9ucy4KKworCSAgSXQncyBzYWZlIHRvIGFuc3dlciAneScgaWYgeW91IGhhdmUgYSB0cnVlIE1QVTQwMSBNSURJIGludGVyZmFjZQorCSAgY2FyZC4gCisgICI2ODUwIFVBUlQgTWlkaSBzdXBwb3J0IiwKKwktIEl0J3Mgc2FmZSB0byBhbnN3ZXIgJ24nIHRvIHRoaXMgcXVlc3Rpb24gaW4gYWxsIGNhc2VzLiBUaGUgNjg1MAorCSAgVUFSVCBpbnRlcmZhY2UgaXMgc28gcmFyZWx5IHVzZWQuCisgICJQU1MgKEVDSE8tQURJMjExMSkgc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIG9ubHkgaWYgeW91IGhhdmUgT3JjaGlkIFNXMzIsIENhcmRpbmFsIERTUDE2IG9yIHNvbWUKKwkgIG90aGVyIGNhcmQgYmFzZWQgb24gdGhlIFBTUyBjaGlwc2V0IChBRDE4NDggY29kZWMgKyBBRFNQLTIxMTUKKwkgIERTUCBjaGlwICsgRWNobyBFU0M2MTQgQVNJQyBDSElQKS4KKyAgIjE2IGJpdCBzYW1wbGluZyBvcHRpb24gb2YgR1VTIChfTk9UXyBHVVMgTUFYKSIsCisJLSBBbnN3ZXIgJ3knIGlmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgMTYgYml0IHNhbXBsaW5nIGRhdWdodGVyY2FyZAorCSAgdG8geW91ciBHVVMuIEFuc3dlciAnbicgaWYgeW91IGhhdmUgR1VTIE1BWC4gRW5hYmxpbmcgdGhpcyBvcHRpb24KKwkgIGRpc2FibGVzIEdVUyBNQVggc3VwcG9ydC4KKyAgIkdVUyBNQVggc3VwcG9ydCIsCisJLSBBbnN3ZXIgJ3knIG9ubHkgaWYgeW91IGhhdmUgYSBHVVMgTUFYLgorICAiTWljcm9zb2Z0IFNvdW5kIFN5c3RlbSBzdXBwb3J0IiwKKwktIEFnYWluIHRoaW5rIGNhcmVmdWxseSBiZWZvcmUgYW5zd2VyaW5nICd5JyB0byB0aGlzIHF1ZXN0aW9uLiBJdCdzCisJICBzYWZlIHRvIGFuc3dlciAneScgaW4gY2FzZSB5b3UgaGF2ZSB0aGUgb3JpZ2luYWwgV2luZG93cyBTb3VuZCAKKwkgIFN5c3RlbSBjYXJkIG1hZGUgYnkgTWljcm9zb2Z0IG9yIEF6dGVjaCBTRyAxNiBQcm8gKG9yIE5YMTYgUHJvKS4KKwkgIEFsc28geW91IG1heSBhbnN3ZXIgJ3knIGluIGNhc2UgeW91ciBjYXJkIHdhcyBub3QgbGlzdGVkIGVhcmxpZXIKKwkgIGluIHRoaXMgZmlsZS4gRm9yIGNhcmRzIGhhdmluZyBuYXRpdmUgc3VwcG9ydCBpbiB0aGUgZHJpdmVyLCBjb25zdWx0CisJICB0aGUgY2FyZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGF0ZXIgaW4gdGhpcyBmaWxlLiBTb21lIGRyaXZlcnMKKwkgIGhhdmUgdGhlaXIgb3duIE1TUyBzdXBwb3J0IGFuZCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIGEKKwkgIGNvbmZsaWN0LiAKKwkgIE5vdGUhIFRoZSBNU1MgZHJpdmVyIHBlcm1pdHMgY29uZmlndXJpbmcgdHdvIERNQSBjaGFubmVscy4gVGhpcyBpcyBhCisJICAibm9uc3RhbmRhcmQiIGZlYXR1cmUgYW5kIHdvcmtzIG9ubHkgd2l0aCB2ZXJ5IGZldyBjYXJkcyAoaWYgYW55KS4KKwkgIEluIG1vc3QgY2FzZXMgdGhlIHNlY29uZCBETUEgY2hhbm5lbCBzaG91bGQgYmUgZGlzYWJsZWQgb3Igc2V0IHRvCisJICB0aGUgc2FtZSBjaGFubmVsIHRoYW4gdGhlIGZpcnN0IG9uZS4gVHJ5aW5nIHRvIGNvbmZpZ3VyZSB0d28gc2VwYXJhdGUKKwkgIGNoYW5uZWxzIHdpdGggY2FyZHMgdGhhdCBkb24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aWxsIHByZXZlbnQKKwkgIGF1ZGlvIChhdCBsZWFzdCByZWNvcmRpbmcpIGZyb20gd29ya2luZy4KKyAgIkVuc29uaXEgU291bmRzY2FwZSBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgYSBzb3VuZCBjYXJkIGJhc2VkIG9uIHRoZSBFbnNvbmlxIFNvdW5kU2NhcGUKKwkgIGNoaXBzZXQuIFN1Y2ggY2FyZHMgYXJlIGJlaW5nIG1hbnVmYWN0dXJlZCBhdCBsZWFzdCBieSBFbnNvbmlxLAorCSAgU3BlYSBhbmQgUmV2ZWFsIChub3RlIHRoYXQgUmV2ZWFsIG1ha2VzIG90aGVyIGNhcmRzIGFsc28pLiAgVGhlIG9sZGVzdAorCSAgY2FyZHMgbWFkZSBieSBTcGVhIGRvbid0IHdvcmsgcHJvcGVybHkgd2l0aCBMaW51eC4gCisJICBTb3VuZHNjYXBlIFBuUCBhcyB3ZWxsIGFzIEVuc29uaXEgVklWTyB3b3JrIG9ubHkgd2l0aCB0aGUgY29tbWVyY2lhbAorCSAgT1NTL0xpbnV4IHZlcnNpb24uCisgICJNZWRpYVRyaXggQXVkaW9Ucml4IFBybyBzdXBwb3J0IiwKKwktIEFuc3dlciAneScgaWYgeW91IGhhdmUgdGhlIEF1ZGlvVHJpeCBQcm8uCisgICJTdXBwb3J0IGZvciBNQUQxNiBhbmQvb3IgTW96YXJ0IGJhc2VkIGNhcmRzIiwKKwktIEFuc3dlciB5IGlmIHlvdXIgY2FyZCBoYXMgYSBNb3phcnQgKE9BSyBPVEktNjAxKSBvciBNQUQxNgorCSAgKE9QVGkgODJDOTI4LCA4MkM5MjksIDgyQzkyNC84MkM5MjUgb3IgODJDOTMwKSBhdWRpbyBpbnRlcmZhY2UgY2hpcC4gCisJICBUaGVzZSBjaGlwcyBhcmUKKwkgIGN1cnJlbnRseSBxdWl0ZSBjb21tb24gc28gaXQncyBwb3NzaWJsZSB0aGF0IG1hbnkgbm8tbmFtZSBjYXJkcworCSAgaGF2ZSBvbmUgb2YgdGhlbS4gSW4gYWRkaXRpb24gdGhlIE1BRDE2IGNoaXAgaXMgdXNlZCBpbiBzb21lCisJICBjYXJkcyBtYWRlIGJ5IGtub3duIG1hbnVmYWN0dXJlcnMgc3VjaCBhcyBUdXJ0bGUgQmVhY2ggKFRyb3BleiksCisJICBSZXZlYWwgKHNvbWUgbW9kZWxzKSBhbmQgRGlhbW9uZCAoc29tZSByZWNlbnQgbW9kZWxzKS4KKwkgIE5vdGUgT1BUaSA4MkM5MjQgYW5kIDgyQzkyNSBhcmUgTUFEMTYgY29tcGF0aWJsZSBvbmx5IGluIG5vbiBQblAKKwkgIG1vZGUgKGp1bXBlciBzZWxlY3RhYmxlIG9uIG1hbnkgY2FyZHMpLgorICAiU3VwcG9ydCBmb3IgVEIgTWF1aSIKKwktIFRoaXMgZW5hYmxlcyBUQiBNYXVpIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBXb3JrcyB3aXRoIFRCIE1hdWkKKwlhbmQgVEIgVHJvcGV6IChtYXkgbm90IHdvcmsgd2l0aCBUcm9wZXogUGx1cykuCisKKworVGhlbiB0aGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIGFza3Mgc29tZSB5L24gcXVlc3Rpb25zIGFib3V0IHRoZSBoaWdoZXIKK2xldmVsIHNlcnZpY2VzLiBJdCdzIHJlY29tbWVuZGVkIHRvIGFuc3dlciAneScgdG8gZWFjaCBvZiB0aGVzZSBxdWVzdGlvbnMuCitBbnN3ZXIgJ24nIG9ubHkgaWYgeW91IGtub3cgeW91IHdpbGwgbm90IG5lZWQgdGhlIG9wdGlvbi4KKworICAiTUlESSBpbnRlcmZhY2Ugc3VwcG9ydCIsCisJLSBBbnN3ZXJpbmcgJ24nIGRpc2FibGVzIC9kZXYvbWlkaSMjIGRldmljZXMgYW5kIGFjY2VzcyB0byBhbnkKKwkgIE1JREkgcG9ydHMgdXNpbmcgL2Rldi9zZXF1ZW5jZXIgYW5kIC9kZXYvbXVzaWMuIFRoaXMgb3B0aW9uCisJICBhbHNvIGFmZmVjdHMgYW55IE1QVTQwMSBhbmQvb3IgR2VuZXJhbCBNSURJIGNvbXBhdGlibGUgZGV2aWNlcy4KKyAgIkZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQiLAorCS0gQW5zd2VyICd5JyBoZXJlLgorICAiL2Rldi9zZXF1ZW5jZXIgc3VwcG9ydCIsCisJLSBBbnN3ZXJpbmcgJ24nIGRpc2FibGVzIC9kZXYvc2VxdWVuY2VyIGFuZCAvZGV2L211c2ljLgorCitFbnRlcmluZyB0aGUgSS9PLCBJUlEgYW5kIERNQSBjb25maWcgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgdGhlIGFib3ZlIHF1ZXN0aW9ucyB0aGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIHByb21wdHMgZm9yIHRoZQorY2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiBVc3VhbGx5IGp1c3QgYSBzZXQgb2YKK0kvTyBhZGRyZXNzLCBJUlEgYW5kIERNQSBudW1iZXJzIGFyZSBhc2tlZC4gV2l0aCBzb21lIGNhcmRzIHRoZSBwcm9ncmFtCithc2tzIGZvciBzb21lIGZpbGVzIHRvIGJlIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjYXJkLiBGb3IgZXhhbXBsZQorbWFueSBjYXJkcyBoYXZlIGEgRFNQIGNoaXAgb3IgbWljcm9wcm9jZXNzb3Igd2hpY2ggbXVzdCBiZSBpbml0aWFsaXplZCBieQorZG93bmxvYWRpbmcgYSBwcm9ncmFtIChtaWNyb2NvZGUpIGZpbGUgdG8gdGhlIGNhcmQuCisKK0luc3RydWN0aW9ucyBmb3IgYW5zd2VyaW5nIHRoZXNlIHF1ZXN0aW9ucyBhcmUgZ2l2ZW4gaW4gdGhlIG5leHQgc2VjdGlvbi4KKworCitDYXJkIHNwZWNpZmljIGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBnaXZlcyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBhYm91dCBjb25maWd1cmluZyBzb21lIGNhcmRzLgorUGxlYXNlIHJlZmVyIG1hbnVhbCBvZiB5b3VyIGNhcmQgZm9yIHZhbGlkIEkvTywgSVJRIGFuZCBETUEgbnVtYmVycy4gVXNpbmcKK3RoZSBzYW1lIHNldHRpbmdzIHdpdGggRE9TL1dpbmRvd3MgYW5kIExpbnV4IGlzIHJlY29tbWVuZGVkLiBVc2luZworZGlmZmVyZW50IHZhbHVlcyBjb3VsZCBjYXVzZSBzb21lIHByb2JsZW1zIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4KK2RpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4KKworU291bmQgQmxhc3RlcnMgKHRoZSBvcmlnaW5hbCBvbmVzIGJ5IENyZWF0aXZlKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEUhIENoZWNrIGlmIHlvdSBoYXZlIGEgUG5QIFNvdW5kIEJsYXN0ZXIgKGNhcmRzIHNvbGQgYWZ0ZXIgc3VtbWVyIDE5OTUKKyAgICAgIGFyZSBhbG1vc3QgY2VydGFpbmx5IFBuUCBvbmVzKS4gV2l0aCBQblAgY2FyZHMgeW91IHNob3VsZCB1c2UgaXNhcG5wdG9vbHMKKyAgICAgIHRvIGFjdGl2YXRlIHRoZW0gKHNlZSBhYm92ZSkuCisKK0l0J3MgcG9zc2libGUgdG8gY29uZmlndXJlIHRoZXNlIGNhcmRzIHRvIHVzZSBkaWZmZXJlbnQgSS9PLCBJUlEgYW5kCitETUEgc2V0dGluZ3MuIFNpbmNlIHRoZSBwb3NzaWJsZS9kZWZhdWx0IHNldHRpbmdzIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHZhcmlvdXMKK21vZGVscywgeW91IGhhdmUgdG8gY29uc3VsdCBtYW51YWwgb2YgeW91ciBjYXJkIGZvciB0aGUgcHJvcGVyIG9uZXMuIEl0J3MKK2EgZ29vZCBpZGVhIHRvIHVzZSB0aGUgc2FtZSB2YWx1ZXMgdGhhbiB3aXRoIERPUy9XaW5kb3dzLiBXaXRoIFNCIGFuZCBTQiBQcm8KK2l0J3MgdGhlIG9ubHkgY2hvaWNlLiBTQjE2IGhhcyBzb2Z0d2FyZSBzZWxlY3RhYmxlIElSUSBhbmQgRE1BIGNoYW5uZWxzIGJ1dAordXNpbmcgZGlmZmVyZW50IHZhbHVlcyB3aXRoIERPUyBhbmQgTGludXggaXMgbGlrZWx5IHRvIGNhdXNlIHRyb3VibGVzLiBUaGUKK0RPUyBkcml2ZXIgaXMgbm90IGFibGUgdG8gcmVzZXQgdGhlIGNhcmQgcHJvcGVybHkgYWZ0ZXIgd2FybSBib290IGZyb20gTGludXgKK2lmIExpbnV4IGhhcyB1c2VkIGRpZmZlcmVudCBJUlEgb3IgRE1BIHZhbHVlcy4KKworVGhlIG9yaWdpbmFsIChzdGVhbSkgU291bmQgQmxhc3RlciAodmVyc2lvbnMgMS54IGFuZCAyLngpIHVzZSBhbHdheXMKK0RNQTEuIFRoZXJlIGlzIG5vIHdheSB0byBjaGFuZ2UgaXQuCisKK1RoZSBTQjE2IG5lZWRzIHR3byBETUEgY2hhbm5lbHMuIEEgOCBiaXQgb25lICgxIG9yIDMpIGlzIHJlcXVpcmVkIGZvcgorOCBiaXQgb3BlcmF0aW9uIGFuZCBhIDE2IGJpdCBvbmUgKDUsIDYgb3IgNykgZm9yIHRoZSAxNiBiaXQgbW9kZS4gSW4gdGhlb3J5CitpdCdzIHBvc3NpYmxlIHRvIHVzZSBqdXN0IG9uZSAoOCBiaXQpIERNQSBjaGFubmVsIGJ5IGFuc3dlcmluZyB0aGUgOCBiaXQKK29uZSB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gYXNrcyBmb3IgdGhlIDE2IGJpdCBvbmUuIFRoaXMgbWF5IHdvcmsKK2luIHNvbWUgc3lzdGVtcyBidXQgaXMgbGlrZWx5IHRvIGNhdXNlIHRlcnJpYmxlIG5vaXNlIG9uIHNvbWUgb3RoZXIgc3lzdGVtcy4KKworSXQncyBwb3NzaWJsZSB0byB1c2UgdHdvIFNCMTYvMzIvNjQgYXQgdGhlIHNhbWUgdGltZS4gVG8gZG8gdGhpcyB5b3Ugc2hvdWxkCitmaXJzdCBjb25maWd1cmUgT1NTL0ZyZWUgZm9yIG9uZSBjYXJkLiBUaGVuIGVkaXQgbG9jYWwuaCBtYW51YWxseSBhbmQgZGVmaW5lCitTQjJfQkFTRSwgU0IyX0lSUSwgU0IyX0RNQSBhbmQgU0IyX0RNQTIgZm9yIHRoZSBzZWNvbmQgb25lLiBZb3UgY2FuJ3QgZ2V0Cit0aGUgT1BMMywgTUlESSBhbmQgRU1VODAwMCBkZXZpY2VzIG9mIHRoZSBzZWNvbmQgY2FyZCB0byB3b3JrLiBJZiB5b3UgYXJlCitnb2luZyB0byB1c2UgdHdvIFBuUCBTb3VuZCBCbGFzdGVycywgZW5zdXJlIHRoYXQgdGhleSBhcmUgb2YgZGlmZmVyZW50IG1vZGVsCithbmQgaGF2ZSBkaWZmZXJlbnQgUG5QIElEcy4gVGhlcmUgaXMgbm8gd2F5IHRvIGdldCB0d28gY2FyZHMgd2l0aCB0aGUgc2FtZQorY2FyZCBJRCBhbmQgc2VyaWFsIG51bWJlciB0byB3b3JrLiBUaGUgZWFzaWVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0cnlpbmcgCitpZiBpc2FwbnB0b29scyBjYW4gc2VlIGJvdGggY2FyZHMgb3IganVzdCBvbmUuCisKK05PVEUhCURvbid0IGVuYWJsZSB0aGUgU00gR2FtZXMgb3B0aW9uIChhc2tlZCBieSB0aGUgY29uZmlndXJhdGlvbiBwcm9ncmFtKQorCWlmIHlvdSBhcmUgbm90IDEwMSUgc3VyZSB0aGF0IHlvdXIgY2FyZCBpcyBhIExvZ2l0ZWNoIFNvdW5kbWFuIEdhbWVzCisJKG5vdCBhIFNNIFdhdmUgb3IgU00xNikuCisKK1NCIENsb25lcworLS0tLS0tLS0tCisKK0ZpcnN0IG9mIGFsbDogVGhlcmUgYXJlIG5vIFNCMTYgY2xvbmVzLiBUaGVyZSBhcmUgU0IgUHJvIGNsb25lcyB3aXRoIGEKKzE2IGJpdCBtb2RlIHdoaWNoIGlzIG5vdCBTQjE2IGNvbXBhdGlibGUuIFRoZSBtb3N0IGxpa2VseSBhbHRlcm5hdGl2ZSBpcyB0aGF0Cit0aGUgMTYgYml0IG1vZGUgbWVhbnMgTVNTL1dTUy4KKworVGhlcmUgYXJlIGp1c3QgYSBmZXcgZnVsbHkgMTAwJSBoYXJkd2FyZSBTQiBvciBTQiBQcm8gY29tcGF0aWJsZSBjYXJkcy4KK0kga25vdyBqdXN0IFRodW5kZXJib2FyZCBhbmQgU00gR2FtZXMuIE90aGVyIGNhcmRzIHJlcXVpcmUgc29tZSBraW5kIG9mCitoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBiZWZvcmUgdGhleSBiZWNvbWUgU0IgY29tcGF0aWJsZS4gQ2hlY2sgaWYgeW91ciBjYXJkCit3YXMgbGlzdGVkIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlLiBJbiB0aGlzIGNhc2UgeW91IHNob3VsZCBmb2xsb3cKK2luc3RydWN0aW9ucyBmb3IgeW91ciBjYXJkIGxhdGVyIGluIHRoaXMgZmlsZS4KKworRm9yIG90aGVyIG5vdCBmdWxseSBTQiBjbG9uZXMgeW91IG1heSB0cnkgaW5pdGlhbGl6YXRpb24gdXNpbmcgRE9TIGluCit0aGUgZm9sbG93aW5nIHdheToKKworCS0gQm9vdCBET1Mgc28gdGhhdCB0aGUgY2FyZCBzcGVjaWZpYyBkcml2ZXIgZ2V0cyBydW4uCisJLSBIaXQgY3RybC1hbHQtZGVsIChvciB1c2UgbG9hZGxpbikgdG8gYm9vdCBMaW51eC4gRG9uJ3QKKwkgIHN3aXRjaCBvZmYgcG93ZXIgb3IgcHJlc3MgdGhlIHJlc2V0IGJ1dHRvbi4KKwktIElmIHlvdSB1c2UgdGhlIHNhbWUgSS9PLCBJUlEgYW5kIERNQSBzZXR0aW5ncyBpbiBMaW51eCwgdGhlCisJICBjYXJkIHNob3VsZCB3b3JrLgorCitJZiB5b3VyIGNhcmQgaXMgYm90aCBTQiBhbmQgTVNTIGNvbXBhdGlibGUsIEkgcmVjb21tZW5kIHVzaW5nIHRoZSBNU1MgbW9kZS4KK01vc3QgY2FyZHMgb2YgdGhpcyBraW5kIGFyZSBub3QgYWJsZSB0byB3b3JrIGluIHRoZSBTQiBhbmQgdGhlIE1TUyBtb2RlIAorc2ltdWx0YW5lb3VzbHkuIFVzaW5nIHRoZSBNU1MgbW9kZSBwcm92aWRlcyAxNiBiaXQgcmVjb3JkaW5nIGFuZCBwbGF5YmFjay4KKworUHJvQXVkaW9TcGVjdHJ1bSAxNiBhbmQgY29tcGF0aWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BBUzE2IGhhcyBhIFNCIGVtdWxhdGlvbiBjaGlwIHdoaWNoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIG5hdGl2ZQorKDE2IGJpdCkgbW9kZSBvZiB0aGUgY2FyZC4gVG8gZW5hYmxlIHRoaXMgZW11bGF0aW9uIHlvdSBzaG91bGQgY29uZmlndXJlIAordGhlIGRyaXZlciB0byBoYXZlIFNCIHN1cHBvcnQgdG9vICh0aGlzIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgdmVyc2lvbgorMy41LWJldGE5IG9mIHRoaXMgZHJpdmVyKS4KKworV2l0aCBjdXJyZW50IGRyaXZlciB2ZXJzaW9ucyBpdCdzIGFsc28gcG9zc2libGUgdG8gdXNlIFBBUzE2IHRvZ2V0aGVyIHdpdGggCithbm90aGVyIFNCIGNvbXBhdGlibGUgY2FyZC4gSW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgY29uZmlndXJlIFNCIHN1cHBvcnQKK2ZvciB0aGUgb3RoZXIgY2FyZCBhbmQgdG8gZGlzYWJsZSB0aGUgU0IgZW11bGF0aW9uIG9mIFBBUzE2ICh0aGVyZSBpcyBhCitzZXBhcmF0ZSBxdWVzdGlvbnMgYWJvdXQgdGhpcykuCisKK1dpdGggUEFTMTYgeW91IGNhbiB1c2UgdHdvIGF1ZGlvIGRldmljZSBmaWxlcyBhdCB0aGUgc2FtZSB0aW1lLiAvZGV2L2RzcCAoYW5kCisvZGV2L2F1ZGlvKSBpcyBjb25uZWN0ZWQgdG8gdGhlIDgvMTYgYml0IG5hdGl2ZSBjb2RlYyBhbmQgdGhlIC9kZXYvZHNwMSAoYW5kCisvZGV2L2F1ZGlvMSkgaXMgY29ubmVjdGVkIHRvIHRoZSBTQiBlbXVsYXRpb24gKDggYml0IG1vbm8gb25seSkuCisKK0dyYXZpcyBVbHRyYXNvdW5kCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgcmV2aXNpb25zIG9mIHRoZSBVbHRyYXNvdW5kIGNhcmQgKEdVUykuIFRoZQorZWFybGllc3Qgb25lcyAocHJlIDMuNykgZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIG1peGVyLiBXaXRoIHRoZXNlIGNhcmRzCit0aGUgZHJpdmVyIHVzZXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHN5bnRoIGFuZCBwY20gcGxheWJhY2tzLiBJdCdzCithbHNvIHBvc3NpYmxlIHRvIHN3aXRjaCBzb21lIG9mIHRoZSBpbnB1dHMgKGxpbmUgaW4sIG1pYykgb2ZmIGJ5IHNldHRpbmcKK21peGVyIHZvbHVtZSBvZiB0aGUgY2hhbm5lbCBsZXZlbCBiZWxvdyAxMCUuIEZvciByZWNvcmRpbmcgeW91IGhhdmUKK3RvIHNlbGVjdCB0aGUgY2hhbm5lbCBhcyBhIHJlY29yZGluZyBzb3VyY2UgYW5kIHRvIHVzZSB2b2x1bWUgYWJvdmUgMTAlLgorCitHVVMgMy43IGhhcyBhIGhhcmR3YXJlIG1peGVyLgorCitHVVMgTUFYIGFuZCB0aGUgMTYgYml0IHNhbXBsaW5nIGRhdWdodGVyY2FyZCBoYXZlIGEgQ1M0MjMxIGNvZGVjIGNoaXAgd2hpY2ggCithbHNvIGNvbnRhaW5zIGEgbWl4ZXIuCisKK0NvbmZpZ3VyaW5nIEdVUyBpcyBzaW1wbGUuIEp1c3QgZW5hYmxlIHRoZSBHVVMgc3VwcG9ydCBhbmQgR1VTIE1BWCBvcgordGhlIDE2IGJpdCBkYXVnaHRlcmNhcmQgaWYgeW91IGhhdmUgdGhlbS4gTm90ZSB0aGF0IGVuYWJsaW5nIHRoZSBkYXVnaHRlcgorY2FyZCBkaXNhYmxlcyBHVVMgTUFYIGRyaXZlci4KKworTk9URSBmb3Igb3duZXJzIG9mIHRoZSAxNiBiaXQgZGF1Z2h0ZXJjYXJkOiBCeSBkZWZhdWx0IHRoZSBkYXVnaHRlcmNhcmQKK3VzZXMgL2Rldi9kc3AgKGFuZCAvZGV2L2F1ZGlvKS4gQ29tbWFuZCAibG4gLXNmIC9kZXYvZHNwMSAvZGV2L2RzcCIKK3NlbGVjdHMgdGhlIGRhdWdodGVyIGNhcmQgYXMgdGhlIGRlZmF1bHQgZGV2aWNlLgorCitXaXRoIGp1c3QgdGhlIHN0YW5kYXJkIEdVUyBlbmFibGVkIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gcHJvbXB0cworZm9yIHRoZSBJL08sIElSUSBhbmQgRE1BIG51bWJlcnMgZm9yIHRoZSBjYXJkLiBVc2UgdGhlIHNhbWUgdmFsdWVzIHRoYW4KK3dpdGggRE9TLgorCitXaXRoIHRoZSBkYXVnaHRlciBjYXJkIG9wdGlvbiBlbmFibGVkIHlvdSB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUgSS9PLAorSVJRIGFuZCBETUEgbnVtYmVycyBmb3IgdGhlIGRhdWdodGVyIGNhcmQuIFlvdSBoYXZlIHRvIHVzZSBkaWZmZXJlbnQgSS9PCithbmQgRE1BIHZhbHVlcyB0aGFuIGZvciB0aGUgc3RhbmRhcmQgR1VTLiBUaGUgZGF1Z2h0ZXIgY2FyZCBwZXJtaXRzCitzaW11bHRhbmVvdXMgcmVjb3JkaW5nIGFuZCBwbGF5YmFjay4gVXNlIC9kZXYvZHNwICh0aGUgZGF1Z2h0ZXJjYXJkKSBmb3IKK3JlY29yZGluZyBhbmQgL2Rldi9kc3AxIChHVVMgR0YxKSBmb3IgcGxheWJhY2suCisKK0dVUyBNQVggdXNlcyB0aGUgc2FtZSBJL08gYWRkcmVzcyBhbmQgSVJRIHNldHRpbmdzIHRoYW4gdGhlIG9yaWdpbmFsIEdVUworKEdVUyBNQVggPSBHVVMgKyBhIENTNDIzMSBjb2RlYykuIEluIGFkZGl0aW9uIGFuIGV4dHJhIERNQSBjaGFubmVsIG1heSBiZSB1c2VkLgorVXNpbmcgdHdvIERNQSBjaGFubmVscyBwZXJtaXRzIHNpbXVsdGFuZW91cyBwbGF5YmFjayB1c2luZyB0d28gZGV2aWNlcworKGRldi9kc3AwIGFuZCAvZGV2L2RzcDEpLiBUaGUgc2Vjb25kIERNQSBjaGFubmVsIGlzIHJlcXVpcmVkIGZvcgorZnVsbCBkdXBsZXggYXVkaW8uCitUbyBlbmFibGUgdGhlIHNlY29uZCBETUEgY2hhbm5lbHMsIGdpdmUgYSB2YWxpZCBETUEgY2hhbm5lbCB3aGVuIHRoZSBjb25maWcKK3Byb2dyYW0gYXNrcyBmb3IgdGhlIEdVUyBNQVggRE1BIChlbnRlcmluZyAtMSBkaXNhYmxlcyB0aGUgc2Vjb25kIERNQSkuCitVc2luZyAxNiBiaXQgRE1BIGNoYW5uZWxzICg1LDYgb3IgNykgaXMgcmVjb21tZW5kZWQuCisKK0lmIHlvdSBoYXZlIHByb2JsZW1zIGluIHJlY29yZGluZyB3aXRoIEdVUyBNQVgsIHlvdSBjb3VsZCB0cnkgdG8gdXNlCitqdXN0IG9uZSA4IGJpdCBETUEgY2hhbm5lbC4gUmVjb3JkaW5nIHdpbGwgbm90IHdvcmsgd2l0aCBvbmUgRE1BCitjaGFubmVsIGlmIGl0J3MgYSAxNiBiaXQgb25lLgorCitNaWNyb3Bob25lIGlucHV0IG9mIEdVUyBNQVggaXMgY29ubmVjdGVkIHRvIG1peGVyIGluIGxpdHRsZSBiaXQgbm9uc3RhbmRhcmQKK3dheS4gVGhlcmUgaXMgYWN0dWFsbHkgdHdvIG1pY3JvcGhvbmUgdm9sdW1lIGNvbnRyb2xzLiBOb3JtYWwgIm1pYyIgY29udHJvbHMKK29ubHkgcmVjb3JkaW5nIGxldmVsLiBNaXhlciBjb250cm9sICJzcGVha2VyIiBpcyB1c2VkIHRvIGNvbnRyb2wgdm9sdW1lIG9mCittaWNyb3Bob25lIHNpZ25hbCBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gbGluZS9zcGVha2VyIG91dC4gU28ganVzdCBkZWNyZWFzZQordm9sdW1lIG9mICJzcGVha2VyIiBpZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIG1pY3JvcGhvbmUgZmVlZGJhY2suCisKK0dVUyBBQ0Ugd29ya3MgdG9vIGJ1dCBhbnkgYXR0ZW1wdCB0byByZWNvcmQgb3IgdG8gdXNlIHRoZSBNSURJIHBvcnQKK3dpbGwgZmFpbC4KKworR1VTIFBuUCAod2l0aCBSQU0pIGlzIHBhcnRpYWxseSBzdXBwb3J0ZWQgYnV0IGl0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHVzaW5nCitET1Mgb3IgaXNhcG5wdG9vbHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBkcml2ZXIuCisKK01QVTQwMSBhbmQgV2luZG93cyBTb3VuZCBTeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4uIERvbid0IGVuYWJsZSB0aGVzZSBvcHRpb25zIGluIGNhc2UgeW91ciBjYXJkIGlzIGxpc3RlZAorc29tZXdoZXJlIGVsc2UgaW4gdGhpcyBmaWxlLgorCitDb25maWd1cmluZyB0aGVzZSBjYXJkcyBpcyBvYnZpb3VzIChvciBpdCBzaG91bGQgYmUpLiBXaXRoIE1TUworeW91IHNob3VsZCBwcm9iYWJseSBlbmFibGUgdGhlIE9QTDMgc3ludGggYWxzbyBzaW5jZQorbW9zdCBNU1MgY29tcGF0aWJsZSBjYXJkcyBoYXZlIGl0LiBIb3dldmVyIGNoZWNrIHRoYXQgdGhpcyBpcyB0cnVlCitiZWZvcmUgZW5hYmxpbmcgT1BMMy4KKworU291bmQgZHJpdmVyIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUgTVBVNDAxIGNvbXBhdGlibGUgY2FyZHMgYXQgdGhlIHNhbWUgdGltZQorYnV0IHRoZSBjb25maWcgcHJvZ3JhbSBhc2tzIGNvbmZpZyBpbmZvIGZvciBqdXN0IHRoZSBmaXJzdCBvZiB0aGVtLgorQWRkaW5nIHRoZSBzZWNvbmQgb3IgdGhpcmQgTVBVIGludGVyZmFjZXMgbXVzdCBiZSBkb25lIG1hbnVhbGx5IGJ5CitlZGl0aW5nIHNvdW5kL2xvY2FsLmggKGFmdGVyIHJ1bm5pbmcgdGhlIGNvbmZpZyBwcm9ncmFtKS4gQWRkIGRlZmluZXMgZm9yCitNUFUyX0JBU0UgJiBNUFUyX0lSUSAoYW5kIE1QVTNfQkFTRSAmIE1QVTNfSVJRKSB0byB0aGUgZmlsZS4KKworQ0FVVElPTiEKKworVGhlIGRlZmF1bHQgSS9PIGJhc2Ugb2YgQWRhcHRlYyBBSEEtMTU0MiBTQ1NJIGNvbnRyb2xsZXIgaXMgMHgzMzAgd2hpY2gKK2lzIGFsc28gdGhlIGRlZmF1bHQgb2YgdGhlIE1QVTQwMSBkcml2ZXIuIERvbid0IGNvbmZpZ3VyZSB0aGUgc291bmQgZHJpdmVyIHRvCit1c2UgMHgzMzAgYXMgdGhlIE1QVTQwMSBiYXNlIGlmIHlvdSBoYXZlIGEgQUhBMTU0Mi4gVGhlIGtlcm5lbCB3aWxsIG5vdCBib290CitpZiB5b3UgbWFrZSB0aGlzIG1pc3Rha2UuCisKK1BTUworLS0tCisKK0V2ZW4gdGhlIFBTUyBjYXJkcyBhcmUgY29tcGF0aWJsZSB3aXRoIFNCLCBNU1MgYW5kIE1QVTQwMSwgeW91IG11c3Qgbm90CitlbmFibGUgdGhlc2Ugb3B0aW9ucyB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIuIFRoZSBjb25maWd1cmF0aW9uCitwcm9ncmFtIGhhbmRsZXMgdGhlc2Ugb3B0aW9ucyBpdHNlbGYuIChZb3UgbWF5IHVzZSB0aGUgU0IsIE1QVSBhbmQgTVNTIG9wdGlvbnMKK3RvZ2V0aGVyIHdpdGggUFNTIGlmIHlvdSBoYXZlIGFub3RoZXIgY2FyZCBvbiB0aGUgc3lzdGVtKS4KKworVGhlIFBTUyBkcml2ZXIgZW5hYmxlcyBNU1MgYW5kIE1QVTQwMSBtb2RlcyBvZiB0aGUgY2FyZC4gU0IgaXMgbm90IGVuYWJsZWQgCitzaW5jZSBpdCBkb2Vzbid0IHdvcmsgY29uY3VycmVudGx5IHdpdGggTVNTLiBUaGUgZHJpdmVyIGxvYWRzIGFsc28gYQorRFNQIGFsZ29yaXRobSB3aGljaCBpcyB1c2VkIHRvIGZvciB0aGUgZ2VuZXJhbCBNSURJIGVtdWxhdGlvbi4gVGhlCithbGdvcml0aG0gZmlsZSAoLmxkKSBpcyByZWFkIGJ5IHRoZSBjb25maWcgcHJvZ3JhbSBhbmQgd3JpdHRlbiB0byBhCitmaWxlIGluY2x1ZGVkIHdoZW4gdGhlIHBzcy5jIGlzIGNvbXBpbGVkLiBGb3IgdGhpcyByZWFzb24gdGhlIGNvbmZpZworcHJvZ3JhbSBhc2tzIGlmIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoZSBmaWxlLiBVc2UgdGhlIGdlbm1pZGkubGQgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGUgRE9TL1dpbmRvd3MgZHJpdmVycyBvZiB0aGUgY2FyZCAoZG9uJ3QgdXNlIHRoZSBtdDMyLmxkKS4KK1dpdGggc29tZSBjYXJkcyB0aGUgZmlsZSBpcyBjYWxsZWQgJ3N5bnRoLmxkJy4gWW91IG11c3QgaGF2ZSBhY2Nlc3MgdG8KK3RoZSBmaWxlIHdoZW4gY29uZmlndXJpbmcgdGhlIGRyaXZlci4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvIG1vdW50IHRoZSBET1MKK3BhcnRpdGlvbiBjb250YWluaW5nIHRoZSBmaWxlIHdpdGggTGludXguIAorCitJdCdzIHBvc3NpYmxlIHRvIGxvYWQgeW91ciBvd24gRFNQIGFsZ29yaXRobXMgYW5kIHJ1biB0aGVtIHdpdGggdGhlIGNhcmQuCitMb29rIGF0IHRoZSBkaXJlY3RvcnkgcHNzX3Rlc3Qgb2Ygc25kLXV0aWwtMy4wLnRhci5neiBmb3IgbW9yZSBpbmZvLgorCitBdWRpb1RyaXggUHJvCistLS0tLS0tLS0tLS0tCisKK1lvdSBoYXZlIHRvIGVuYWJsZSB0aGUgT1BMMyBhbmQgU0IgKG5vdCBTQiBQcm8gb3IgU0IxNikgZHJpdmVycyBpbiBhZGRpdGlvbgordG8gdGhlIG5hdGl2ZSBBdWRpb1RyaXggZHJpdmVyLiBEb24ndCBlbmFibGUgTVNTIG9yIE1QVSBkcml2ZXJzLgorCitDb25maWd1cmluZyBBVFAgaXMgbGl0dGxlIGJpdCB0cmlja3kgc2luY2UgaXQgdXNlcyBzbyBtYW55IEkvTywgSVJRIGFuZAorRE1BIG51bWJlcnMuIFVzaW5nIHRoZSBzYW1lIHZhbHVlcyB0aGFuIHdpdGggRE9TL1dpbiBpcyBhIGdvb2QgaWRlYS4gRG9uJ3QKK2F0dGVtcHQgdG8gdXNlIHRoZSBzYW1lIElSUSBvciBETUEgY2hhbm5lbHMgdHdpY2UuCisKK1RoZSBTQiBtb2RlIG9mIEFUUCBpcyBpbXBsZW1lbnRlZCBzbyB0aGUgQVRQIGRyaXZlciBqdXN0IGVuYWJsZXMgU0IKK2luIHRoZSBwcm9wZXIgYWRkcmVzcy4gVGhlIFNCIGRyaXZlciBoYW5kbGVzIHRoZSByZXN0LiBZb3UgaGF2ZSB0byBjb25maWd1cmUKK2JvdGggdGhlIFNCIGRyaXZlciBhbmQgdGhlIFNCIG1vZGUgb2YgQVRQIHRvIHVzZSB0aGUgc2FtZSBJUlEsIERNQSBhbmQgSS9PCitzZXR0aW5ncy4KKworQWxzbyB0aGUgQVRQIGhhcyBhIG1pY3JvY29udHJvbGxlciBmb3IgdGhlIEdlbmVyYWwgTUlESSBlbXVsYXRpb24gKE9QTDQpLgorRm9yIHRoaXMgcmVhc29uIHRoZSBkcml2ZXIgYXNrcyBmb3IgdGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlCittaWNyb2NvZGUgKFRSWFBSTy5IRVgpLiBUaGlzIGZpbGUgaXMgdXN1YWxseSBsb2NhdGVkIGluIHRoZSBkaXJlY3RvcnkKK3doZXJlIHRoZSBET1MgZHJpdmVycyB3ZXJlIGluc3RhbGxlZC4gWW91IG11c3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBmaWxlCit3aGVuIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIuIAorCitJZiB5b3UgaGF2ZSB0aGUgZWZmZWN0cyBkYXVnaHRlcmNhcmQsIGl0IG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgcnVubmluZwordGhlIHNldGZ4IHByb2dyYW0gb2Ygc25kLXV0aWwtMy4wLnRhci5neiBwYWNrYWdlLiBUaGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkCit3aGVuIHVzaW5nIHRoZSAoZnV0dXJlKSBiaW5hcnkgZGlzdHJpYnV0aW9uIHZlcnNpb24gb2YgdGhlIGRyaXZlci4KKworRW5zb25pcSBTb3VuZFNjYXBlCistLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URSEJVGhlIG5ldyBQblAgU291bmRTY2FwZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4gU291bmRzY2FwZSBjb21wYXRpYmxlCisJY2FyZHMgbWFkZSBieSBSZXZlYWwgZG9uJ3Qgd29yayB3aXRoIExpbnV4LiBUaGV5IHVzZSBvbGRlciByZXZpc2lvbgorCW9mIHRoZSBTb3VuZHNjYXBlIGNoaXBzZXQgd2hpY2ggaXMgbm90IGZ1bGx5IGNvbXBhdGlibGUgd2l0aAorCW5ld2VyIGNhcmRzIG1hZGUgYnkgRW5zb25pcS4KKworVGhlIFNvdW5kU2NhcGUgZHJpdmVyIGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gb2YgTVNTIGFuZCBNUFUgc3VwcG9ydHMKK2l0c2VsZiBzbyB5b3UgZG9uJ3QgbmVlZCB0byBlbmFibGUgb3RoZXIgZHJpdmVycyB0aGFuIFNvdW5kU2NhcGUKKyhlbmFibGUgYWxzbyB0aGUgL2Rldi9kc3AsIC9kZXYvc2VxdWVuY2VyIGFuZCBNSURJIHN1cHBvcnRzKS4KKworISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorISEhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEhIQorISEhISEgTk9URSEgQmVmb3JlIHZlcnNpb24gMy41LWJldGE2IHRoZXJlIFdFUkUgdHdvIHNldHMgb2YgYXVkaW8gCSEhISEKKyEhISEhICAgICAgIGRldmljZSBmaWxlcyAoL2Rldi9kc3AwIGFuZCAvZGV2L2RzcDEpLiBUaGUgZmlyc3Qgb25lIFdBUyAgICEhISEKKyEhISEhCSAgICB1c2VkIG9ubHkgZm9yIGNhcmQgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBzZWNvbmQgZm9yIGF1ZGlvICAhISEhCishISEhIQkgICAgcHVycG9zZXMuIEl0IFdBUyByZXF1aXJlZCB0byBjaGFuZ2UgL2Rldi9kc3AgKGEgc3ltbGluaykgdG8gISEhIQorISEhISEJICAgIHBvaW50IHRvIC9kZXYvZHNwMS4JCQkJCQkhISEhCishISEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISEhCishISEhIQkgICAgVGhpcyBpcyBub3QgcmVxdWlyZWQgd2l0aCBPU1MgdmVyc2lvbnMgMy41LWJldGE2IGFuZCBsYXRlcgkhISEhCishISEhIQkgICAgc2luY2UgdGhlcmUgaXMgbm93IGp1c3Qgb25lIGF1ZGlvIGRldmljZSBmaWxlLiBQbGVhc2UgCSEhISEKKyEhISEhCSAgICBjaGFuZ2UgL2Rldi9kc3AgdG8gcG9pbnQgYmFjayB0byAvZGV2L2RzcDAgaWYgeW91IGFyZQkhISEhCishISEhIQkgICAgdXBncmFkaW5nIGZyb20gYW4gZWFybGllciBkcml2ZXIgdmVyc2lvbiB1c2luZwkJISEhIQorISEhISEJICAgIChjZCAvZGV2O3JtIGRzcDtsbiAtcyBkc3AwIGRzcCkuCQkJCSEhISEKKyEhISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhISEKKyEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworVGhlIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbSBhc2tzIG9uZSBETUEgY2hhbm5lbCBhbmQgdHdvIGludGVycnVwdHMuIE9uZSBJUlEKK2FuZCBvbmUgRE1BIGlzIHVzZWQgYnkgdGhlIE1TUyBjb2RlYy4gVGhlIHNlY29uZCBJUlEgaXMgcmVxdWlyZWQgZm9yIHRoZQorTVBVNDAxIG1vZGUgKHlvdSBoYXZlIHRvIHVzZSBkaWZmZXJlbnQgSVJRcyBmb3IgYm90aCBwdXJwb3NlcykuCitUaGVyZSB3ZXJlIGVhcmxpZXIgdHdvIERNQSBjaGFubmVscyBmb3IgU291bmRTY2FwZSBidXQgdGhlIGN1cnJlbnQgZHJpdmVyCit2ZXJzaW9uIHJlcXVpcmVzIGp1c3Qgb25lLgorCitUaGUgU291bmRTY2FwZSBjYXJkIGhhcyBhIE1vdG9yb2xhIG1pY3JvY29udHJvbGxlciB3aGljaCBtdXN0IGluaXRpYWxpemVkCitfYWZ0ZXJfIGJvb3QgKHRoZSBkcml2ZXIgZG9lc24ndCBpbml0aWFsaXplIGl0IGR1cmluZyBib290KS4KK1RoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lIGJ5IHJ1bm5pbmcgdGhlICdzc2luaXQnIHByb2dyYW0gd2hpY2ggaXMKK2Rpc3RyaWJ1dGVkIGluIHRoZSBzbmQtdXRpbC0zLjAudGFyLmd6IHBhY2thZ2UuIFlvdSBoYXZlIHRvIGVkaXQgdHdvCitkZWZpbmVzIGluIHRoZSBzc2luaXQuYyBhbmQgdGhlbiBjb21waWxlIHRoZSBwcm9ncmFtLiBZb3UgbWF5IHJ1biBzc2luaXQgCittYW51YWxseSAoYWZ0ZXIgZWFjaCBib290KSBvciBhZGQgaXQgdG8gL2V0Yy9yYy5kL3JjLmxvY2FsLgorCitUaGUgc3Npbml0IHByb2dyYW0gbmVlZHMgdGhlIG1pY3JvY29kZSBmaWxlIHRoYXQgY29tZXMgd2l0aCB0aGUgRE9TL1dpbmRvd3MKK2RyaXZlciBvZiB0aGUgY2FyZC4gWW91IHdpbGwgbmVlZCB0byB1c2UgdmVyc2lvbiAxLjMwLjAwIG9yIGxhdGVyCitvZiB0aGUgbWljcm9jb2RlIGZpbGUgKHNuZHNjYXBlLmNvMCBvciBzbmRzY2FwZS5jbzEgZGVwZW5kaW5nIG9uCit5b3VyIGNhcmQgbW9kZWwpLiBUSEUgT0xEIHNuZHNjYXBlLmNvZCBXSUxMIE5PVCBXT1JLLiBJVCBXSUxMIEhBTkcgWU9VUgorTUFDSElORS4gVGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgbmV3IG1pY3JvY29kZSBmaWxlIGlzIHRvIGRvd25sb2FkCithbmQgaW5zdGFsbCB0aGUgRE9TL1dpbmRvd3MgZHJpdmVyIGZyb20gZnRwOi8vZnRwLmVuc29uaXEuY29tL3B1Yi4KKworVGhlbiB5b3UgaGF2ZSB0byBzZWxlY3QgdGhlIHByb3BlciBtaWNyb2NvZGUgZmlsZSB0byB1c2U6IHNvdW5kc2NhcGUuY28wCitpcyB0aGUgcmlnaHQgb25lIGZvciBtb3N0IGNhcmRzIGFuZCBzbmRzY2FwZS5jbzEgaXMgZm9yIGZldyAob2xkZXIpIGNhcmRzCittYWRlIGJ5IFJldmVhbCBhbmQvb3IgU3BlYS4gVGhlIGRyaXZlciBoYXMgY2FwYWJpbGl0eSB0byBkZXRlY3QgdGhlIGNhcmQKK3ZlcnNpb24gZHVyaW5nIGJvb3QuIExvb2sgYXQgdGhlIGJvb3QgbG9nIG1lc3NhZ2VzIGluIC92YXIvYWRtL21lc3NhZ2VzCithbmQgbG9jYXRlIHRoZSBzb3VuZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbWVzc2FnZSBmb3IgdGhlIFNvdW5kU2NhcGUKK2NhcmQuIElmIHRoZSBkcml2ZXIgZGlzcGxheXMgc3RyaW5nIDxFbnNvbmlxIFNvdW5kc2NhcGUgKG9sZCk+LCB5b3UgaGF2ZQorYW4gb2xkIGNhcmQgYW5kIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHNuZHNjYXBlLmNvMS4gRm9yIG90aGVyIGNhcmRzIHVzZQorc291bmRzY2FwZS5jbzAuIE5ldyBTb3VuZHNjYXBlIHJldmlzaW9ucyBzdWNoIGFzIEVsaXRlIGFuZCBQblAgdXNlCitjb2RlIGZpbGVzIHdpdGggaGlnaGVyIG51bWJlcnMgKC5jbzIsIC5jbzMsIGV0Yy4pLgorCitOT1RFIQlFbnNvbmlxIFNvdW5kc2NhcGUgVklWTyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG90aGVyIFNvdW5kc2NhcGUgY2FyZHMuCisJQ3VycmVudGx5IGl0J3MgcG9zc2libGUgdG8gdXNlIGl0IGluIExpbnV4IG9ubHkgd2l0aCBPU1MvTGludXgKKwlkcml2ZXJzLgorCitDaGVjayAvdmFyL2FkbS9tZXNzYWdlcyBhZnRlciBydW5uaW5nIHNzaW5pdC4gVGhlIGRyaXZlciBwcmludHMKK3RoZSBib2FyZCB2ZXJzaW9uIGFmdGVyIGRvd25sb2FkaW5nIHRoZSBtaWNyb2NvZGUgZmlsZS4gVGhhdCB2ZXJzaW9uCitudW1iZXIgbXVzdCBtYXRjaCB0aGUgbnVtYmVyIGluIHRoZSBuYW1lIG9mIHRoZSBtaWNyb2NvZGUgZmlsZSAoZXh0ZW5zaW9uKS4KKworUnVubmluZyBzc2luaXQgd2l0aCBhIHdyb25nIHZlcnNpb24gb2YgdGhlIHNuZHNjYXBlLmNvPyBmaWxlIGlzIG5vdAorZGFuZ2Vyb3VzIGFzIGxvbmcgYXMgeW91IGRvbid0IHRyeSB0byB1c2UgYSBmaWxlIGNhbGxlZCBzbmRzY2FwZS5jb2QuCitJZiB5b3UgaGF2ZSBpbml0aWFsaXplZCB0aGUgY2FyZCB1c2luZyBhIHdyb25nIG1pY3JvY29kZSBmaWxlIChzb3VuZHMKK2FyZSB0ZXJyaWJsZSksIGp1c3QgbW9kaWZ5IHNzaW5pdC5jIHRvIHVzZSBhbm90aGVyIG1pY3JvY29kZSBmaWxlIGFuZCB0cnkKK2FnYWluLiBJdCdzIHBvc3NpYmxlIHRvIHVzZSBhbiBlYXJsaWVyIHZlcnNpb24gb2Ygc25kc2NhcGUuY29bMDFdIGJ1dCBpdAorbWF5IHNvdW5kIHdlaXJkLgorCitNQUQxNiAoUHJvKSBhbmQgTW96YXJ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBuZWVkIHRvIGVuYWJsZSBqdXN0IHRoZSBNQUQxNiAvTW96YXJ0IHN1cHBvcnQgd2hlbiBjb25maWd1cmluZwordGhlIGRyaXZlci4gX0Rvbid0XyBlbmFibGUgU0IsIE1QVTQwMSBvciBNU1MuIEhvd2V2ZXIgeW91IHdpbGwgbmVlZCB0aGUKKy9kZXYvYXVkaW8sIC9kZXYvc2VxdWVuY2VyIGFuZCBNSURJIHN1cHBvcnRzLgorCitNb3phcnQgYW5kIE9QVGkgODJDOTI4ICh0aGUgb3JpZ2luYWwgTUFEMTYpIGNoaXBzIGRvbid0IHN1cHBvcnQKK01QVTQwMSBtb2RlIHNvIGVudGVyIGp1c3QgMCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHByb2dyYW0gYXNrcyB0aGUKK01QVS9NSURJIEkvTyBiYXNlLiBUaGUgTUFEMTYgUHJvIChPUFRpIDgyQzkyOSkgYW5kIDgyQzkzMCBjaGlwcyBoYXZlIE1QVTQwMQorbW9kZS4KKworVEIgVHJvcGV6IGlzIGJhc2VkIG9uIHRoZSA4MkM5MjkgY2hpcC4gSXQgaGFzIHR3byBNSURJIHBvcnRzLgorVGhlIG9uZSBjb25uZWN0ZWQgdG8gdGhlIE1BRDE2IGNoaXAgaXMgdGhlIHNlY29uZCBvbmUgKHRoZXJlIGlzIGEgc2Vjb25kCitNSURJIGNvbm5lY3Rvci9waW5zIHNvbWV3aGVyZT8/KS4gSWYgeW91IGhhdmUgbm90IGNvbm5lY3RlZCB0aGUgc2Vjb25kIE1JREkKK3BvcnQsIGp1c3QgZGlzYWJsZSB0aGUgTUlESSBwb3J0IG9mIE1BRDE2LiBUaGUgJ01hdWknIGNvbXBhdGlibGUgc3ludGggb2YKK1Ryb3BleiBpcyBqdW1wZXIgY29uZmlndXJhYmxlIGFuZCBub3QgY29ubmVjdGVkIHRvIHRoZSBNQUQxNiBjaGlwICh0aGUKK01hdWkgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggaXQpLgorCitTb21lIE1BRDE2IGJhc2VkIGNhcmRzIG1heSBjYXVzZSBmZWVkYmFjaywgd2hpc3RsZSBvciB0ZXJyaWJsZSBub2lzZSBpZiB0aGUKK2xpbmUzIG1peGVyIGNoYW5uZWwgaXMgdHVybmVkIHRvbyBoaWdoLiBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCBTaHV0dGxlCitTb3VuZCBTeXN0ZW0uIEN1cnJlbnQgZHJpdmVyIHZlcnNpb25zIHNldCB2b2x1bWUgb2YgbGluZTMgbG93IGVub3VnaCBzbwordGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4KKworSWYgeW91IGhhdmUgYSBNQUQxNiBjYXJkIHdoaWNoIGhhdmUgYW4gT1BMNCAoRk0gKyBXYXZlIHRhYmxlKSBzeW50aGVzaXplcgorY2hpcCAoX25vdF8gYW4gT1BMMyksIHlvdSBoYXZlIHRvIGFwcGVuZCBhIGxpbmUgY29udGFpbmluZyAjZGVmaW5lIE1BRDE2X09QTDQKK3RvIHRoZSBmaWxlIGxpbnV4L2RyaXZlcnMvc291bmQvbG9jYWwuaCAoYWZ0ZXIgcnVubmluZyBtYWtlIGNvbmZpZykuCisKK01BRDE2IGNhcmRzIGhhdmluZyBhIENTNDIzMSBjb2RlYyBzdXBwb3J0IGZ1bGwgZHVwbGV4IG1vZGUuIFRoaXMgbW9kZQorY2FuIGJlIGVuYWJsZWQgYnkgY29uZmlndXJpbmcgdGhlIGNhcmQgdG8gdXNlIHR3byBETUEgY2hhbm5lbHMuIFBvc3NpYmxlCitETUEgY2hhbm5lbCBwYWlycyBhcmU6IDAmMSwgMSYwIGFuZCAzJjAuCisKK05PVEUhIENhcmRzIGhhdmluZyBhbiBPUFRpIDgyQzkyNC84MkM5MjUgY2hpcCB3b3JrIHdpdGggT1NTL0ZyZWUgb25seSBpbgorbm9uLVBuUCBtb2RlICh1c3VhbGx5IGp1bXBlciBzZWxlY3RhYmxlKS4gVGhlIFBuUCBtb2RlIGlzIHN1cHBvcnRlZCBvbmx5CitieSBPU1MvTGludXguCisKK01WIEphenogKFByb1NvbmljKQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBKYXp6MTYgZHJpdmVyIGlzIGp1c3QgYSBoYWNrIG1hZGUgdG8gdGhlIFNCIFBybyBkcml2ZXIuIEhvd2V2ZXIgaXQgd29ya3MKK2ZhaXJseSB3ZWxsLiBZb3UgaGF2ZSB0byBlbmFibGUgU0IsIFNCIFBybyAoX25vdF8gU0IxNikgYW5kIE1QVTQwMSBzdXBwb3J0cword2hlbiBjb25maWd1cmluZyB0aGUgZHJpdmVyLiBUaGUgY29uZmlndXJhdGlvbiBwcm9ncmFtIGFza3MgbGF0ZXIgaWYgeW91Cit3YW50IHN1cHBvcnQgZm9yIE1WIEphenoxNiBiYXNlZCBjYXJkcyAoYWZ0ZXIgYXNraW5nIFNCIGJhc2UgYWRkcmVzcykuIEFuc3dlcgorJ3knIGhlcmUgYW5kIHRoZSBkcml2ZXIgYXNrcyB0aGUgc2Vjb25kICgxNiBiaXQpIERNQSBjaGFubmVsLgorCitUaGUgSmF6ejE2IGRyaXZlciB1c2VzIHRoZSBNUFU0MDEgZHJpdmVyIGluIGEgd2F5IHdoaWNoIHdpbGwgY2F1c2UKK3Byb2JsZW1zIGlmIHlvdSBoYXZlIGFub3RoZXIgTVBVNDAxIGNvbXBhdGlibGUgY2FyZC4gSW4gdGhpcyBjYXNlIHlvdSBtdXN0CitnaXZlIGFkZHJlc3Mgb2YgdGhlIEphenoxNiBiYXNlZCBNUFU0MDEgaW50ZXJmYWNlIHdoZW4gdGhlIGNvbmZpZworcHJvZ3JhbSBwcm9tcHRzIGZvciB0aGUgTVBVNDAxIGluZm9ybWF0aW9uLiBUaGVuIGxvb2sgYXQgdGhlIE1QVTQwMQorc3BlY2lmaWMgc2VjdGlvbiBmb3IgaW5zdHJ1Y3Rpb25zIGFib3V0IGNvbmZpZ3VyaW5nIG1vcmUgdGhhbiBvbmUgTVBVNDAxIGNhcmRzLgorCitMb2dpdGVjaCBTb3VuZG1hbiBXYXZlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlYWQgdGhlIGFib3ZlIE1WIEphenogc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZpcnN0LgorCitUaGUgTG9naXRlY2ggU291bmRNYW4gV2F2ZSAoZG9uJ3QgY29uZnVzZSB0aGlzIHdpdGggdGhlIFNNMTYgb3IgU00gR2FtZXMpIGlzCithIE1WIEphenogYmFzZWQgY2FyZCB3aGljaCBoYXMgYW4gYWRkaXRpb25hbCBPUEw0IGJhc2VkIHdhdmUgdGFibGUKK3N5bnRoZXNpemVyLiBUaGUgT1BMNCBjaGlwIGlzIGhhbmRsZWQgYnkgYW4gb24gYm9hcmQgbWljcm9jb250cm9sbGVyCit3aGljaCBtdXN0IGJlIGluaXRpYWxpemVkIGR1cmluZyBib290LiBUaGUgY29uZmlnIHByb2dyYW0gYXNrcyBpZgoreW91IGhhdmUgYSBTTSBXYXZlIGltbWVkaWF0ZWx5IGFmdGVyIGFza2luZyB0aGUgc2Vjb25kIERNQSBjaGFubmVsIG9mIGphenoxNi4KK0lmIHlvdSBhbnN3ZXIgJ3knLCB0aGUgY29uZmlnIHByb2dyYW0gd2lsbCBhc2sgbmFtZSBvZiB0aGUgZmlsZSBjb250YWluaW5nCitjb2RlIHRvIGJlIGxvYWRlZCB0byB0aGUgbWljcm9jb250cm9sbGVyLiBUaGUgZmlsZSBpcyB1c3VhbGx5IGNhbGxlZAorTUlESTAwMDEuQklOIGFuZCBpdCdzIGxvY2F0ZWQgaW4gdGhlIERPUy9XaW5kb3dzIGRyaXZlciBkaXJlY3RvcnkuIFRoZSBmaWxlCittYXkgYWxzbyBiZSBjYWxsZWQgYXMgVFNVTkFNSS5CSU4gb3Igc29tZXRoaW5nIGVsc2UgKG9sZGVyIGNhcmRzPykuCisKK1RoZSBPUEw0IHN5bnRoIHdpbGwgYmUgaW5hY2Nlc3NpYmxlIHdpdGhvdXQgbG9hZGluZyB0aGUgbWljcm9jb250cm9sbGVyIGNvZGUuCisKK0Fsc28gcmVtZW1iZXIgdG8gZW5hYmxlIFNCIE1QVTQwMSBzdXBwb3J0IGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT1BMNCBtb2RlLgorKERvbid0IGVuYWJsZSB0aGUgJ25vcm1hbCcgTVBVNDAxIGRldmljZSBhcyB3aXRoIHNvbWUgZWFybGllciBkcml2ZXIKK3ZlcnNpb25zIChwcmUgMy41LWFscGhhOCkpLgorCitOT1RFIQlEb24ndCBhbnN3ZXIgJ3knIHdoZW4gdGhlIGRyaXZlciBhc2tzIGFib3V0IFNNIEdhbWVzIHN1cHBvcnQKKwkodGhlIG5leHQgcXVlc3Rpb24gYWZ0ZXIgdGhlIE1JREkwMDAxLkJJTiBuYW1lKS4gSG93ZXZlcgorCWFuc3dlcmluZyAneScgZG9lc24ndCBjYXVzZSBkYW1hZ2UgeW91ciBjb21wdXRlciBzbyBkb24ndCBwYW5pYy4gCisKK1NvdW5kIEdhbGF4aWVzCistLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgU291bmQgR2FsYXh5IGNhcmRzIG1hZGUgYnkgQXp0ZWNoLiBUaGUgOCBiaXQKK29uZXMgYXJlIGZ1bGx5IFNCIG9yIFNCIFBybyBjb21wYXRpYmxlIGFuZCB0aGVyZSBzaG91bGQgYmUgbm8gcHJvYmxlbXMKK3dpdGggdGhlbS4gCisKK1RoZSBvbGRlciAxNiBiaXQgY2FyZHMgKFNHIFBybzE2LCBTRyBOWCBQcm8xNiwgTm92YSBhbmQgTHlyYSkgaGF2ZQorYW4gRUVQUk9NIGNoaXAgZm9yIHN0b3JpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YS4gVGhlcmUgaXMgYSBtaWNyb2NvbnRyb2xsZXIKK3doaWNoIGluaXRpYWxpemVzIHRoZSBjYXJkIHRvIG1hdGNoIHRoZSBFRVBST00gc2V0dGluZ3Mgd2hlbiB0aGUgbWFjaGluZQoraXMgcG93ZXJlZCBvbi4gVGhlc2UgY2FyZHMgYWN0dWFsbHkgYmVoYXZlIGp1c3QgbGlrZSB0aGV5IGhhdmUganVtcGVycworZm9yIGFsbCBvZiB0aGUgc2V0dGluZ3MuIENvbmZpZ3VyZSBkcml2ZXIgZm9yIE1TUywgTVBVLCBTQi9TQiBQcm8gIGFuZCBPUEwzIAorc3VwcG9ydHMgd2l0aCB0aGVzZSBjYXJkcy4gCisKK1RoZXJlIGFyZSBzb21lIG5ldyBTb3VuZCBHYWxheGllcyBpbiB0aGUgbWFya2V0LiBJIGhhdmUgbm8gZXhwZXJpZW5jZSB3aXRoCit0aGVtIHNvIHJlYWQgdGhlIGNhcmQncyBtYW51YWwgY2FyZWZ1bGx5LgorCitFU1MgRVMxNjg4IGFuZCBFUzY4OCAnQXVkaW9Ecml2ZScgYmFzZWQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciB0aGVzZSB0d28gRVNTIGNoaXBzIGlzIGVtYmVkZGVkIGluIHRoZSBTQiBkcml2ZXIuCitDb25maWd1cmUgdGhlc2UgY2FyZHMganVzdCBsaWtlIFNCLiBFbmFibGUgdGhlICdTQiBNUFU0MDEgTUlESSBwb3J0JworaWYgeW91IHdhbnQgdG8gdXNlIE1JREkgZmVhdHVyZXMgb2YgRVMxNjg4LiBFUzY4OCBkb2Vzbid0IGhhdmUgTVBVIG1vZGUKK3NvIHlvdSBkb24ndCBuZWVkIHRvIGVuYWJsZSBpdCAodGhlIGRyaXZlciB1c2VzIG5vcm1hbCBTQiBNSURJIGF1dG9tYXRpY2FsbHkKK3dpdGggRVM2ODgpLgorCitOT1RFISBFU1MgY2FyZHMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggTVNTL1dTUyBzbyBkb24ndCB3b3JyeSBpZiBNU1Mgc3VwcG9ydAorb2YgT1NTIGRvZXNuJ3Qgd29yayB3aXRoIGl0LgorCitUaGVyZSBhcmUgc29tZSBFUzE2ODgvNjg4IGJhc2VkIHNvdW5kIGNhcmRzIGFuZCAocGFydGljdWxhcmx5KSBtb3RoZXJib2FyZHMKK3doaWNoIHVzZSBzb2Z0d2FyZSBjb25maWd1cmFibGUgSS9PIHBvcnQgcmVsb2NhdGlvbiBmZWF0dXJlIG9mIHRoZSBjaGlwLgorVGhpcyBFU1MgcHJvcHJpZXRhcnkgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgb25seSBieSBPU1MvTGludXguCisKK1RoZXJlIGFyZSBFUzE2ODggYmFzZWQgY2FyZHMgd2hpY2ggdXNlIGRpZmZlcmVudCBpbnRlcnJ1cHQgcGluIGFzc2lnbm1lbnQgdGhhbgorcmVjb21tZW5kZWQgYnkgRVNTICg1LCA3LCA5LzIgYW5kIDEwKS4gSW4gdGhpcyBjYXNlIGFsbCBJUlFzIGRvbid0IHdvcmsuCitBdCBsZWFzdCBhIGNhcmQgY2FsbGVkIChQZWFybD8pIEh5cGVyc291bmQgMTYgc3VwcG9ydHMgSVJRIDE1IGJ1dCBpdCBkb2Vzbid0Cit3b3JrLgorCitFUzE4NjggaXMgYSBQblAgY2hpcCB3aGljaCBpcyAoc3VwcG9zZWQgdG8gYmUpIGNvbXBhdGlibGUgd2l0aCBFU1MxNjg4Citwcm9iYWJseSB3b3JrcyB3aXRoIE9TUy9GcmVlIGFmdGVyIGluaXRpYWxpemF0aW9uIHVzaW5nIGlzYXBucHRvb2xzLgorCitSZXZlYWwgY2FyZHMKKy0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgY2FyZHMgbWFkZS9tYXJrZXRlZCBieSBSZXZlYWwuIFNvbWUgb2YgdGhlbQorYXJlIGNvbXBhdGlibGUgd2l0aCBTb3VuZFNjYXBlIGFuZCBzb21lIHVzZSB0aGUgTUFEMTYgY2hpcC4gWW91IG1heSBoYXZlCit0byBsb29rIGF0IHRoZSBjYXJkIGFuZCB0cnkgdG8gaWRlbnRpZnkgaXRzIG9yaWdpbi4KKworRGlhbW9uZAorLS0tLS0tLQorCitUaGUgb2xkZXN0IChTaWVycmEgQXJpYSBiYXNlZCkgc291bmQgY2FyZHMgbWFkZSBieSBEaWFtb25kIGFyZSBub3Qgc3VwcG9ydGVkCisodGhleSBtYXkgd29yayBpZiB0aGUgY2FyZCBpcyBpbml0aWFsaXplZCB1c2luZyBET1MpLiBUaGUgcmVjZW50IChMWD8pCittb2RlbHMgYXJlIGJhc2VkIG9uIHRoZSBNQUQxNiBjaGlwIHdoaWNoIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorCitBdWRpbyBFeGNlbCBEU1AxNgorLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgdGhpcyBjYXJkIGlzIGN1cnJlbnRseSBub3QgZnVuY3Rpb25hbC4gQSBuZXcgZHJpdmVyIGZvciBpdAorc2hvdWxkIGJlIGF2YWlsYWJsZSBsYXRlciB0aGlzIHllYXIuCisKK1BDTUNJQSBjYXJkcworLS0tLS0tLS0tLS0tCisKK1NvcnJ5LCBjYW4ndCBoZWxwLiBTb21lIGNhcmRzIG1heSB3b3JrIGFuZCBzb21lIGRvbid0LgorCitUSSBUTTQwMDBNIG5vdGVib29rcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29tcHV0ZXJzIGhhdmUgYSBidWlsdCBpbiBzb3VuZCBzdXBwb3J0IGJhc2VkIG9uIHRoZSBKYXp6IGNoaXBzZXQuCitMb29rIGF0IHRoZSBpbnN0cnVjdGlvbnMgZm9yIE1WIEphenogKGFib3ZlKS4gSXQncyBhbHNvIGltcG9ydGFudCB0byBub3RlCit0aGF0IHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBtb3VzZSBwb3J0IGFuZCBzb3VuZCBhdCBsZWFzdCBvbgorc29tZSBUTSBtb2RlbHMuIERvbid0IGVuYWJsZSB0aGUgIkMmVCA4MkM3MTAgbW91c2UgcG9ydCBzdXBwb3J0IiB3aGVuCitjb25maWd1cmluZyBMaW51eC4gSGF2aW5nIGl0IGVuYWJsZWQgaXMgbGlrZWx5IHRvIGNhdXNlIG15c3RlcmlvdXMgcHJvYmxlbXMKK2FuZCBrZXJuZWwgZmFpbHVyZXMgd2hlbiBzb3VuZCBpcyB1c2VkLgorCittaXJvU09VTkQKKy0tLS0tLS0tLQorCitUaGUgbWlyb1NPVU5EIFBDTTEtcHJvLCBQQ00xMiBhbmQgUENNMjAgcmFkaW8gaGFzIGJlZW4gdXNlZAorc3VjY2Vzc2Z1bGx5LiBUaGVzZSBjYXJkcyBhcmUgYmFzZWQgb24gdGhlIE1BRDE2LCBPUEw0LCBhbmQgQ1M0MjMxQSBjaGlwcworYW5kIGV2ZXJ5dGhpbmcgc2FpZCBpbiB0aGUgc2VjdGlvbiBhYm91dCBNQUQxNiBjYXJkcyBhcHBsaWVzIGhlcmUsCit0b28uIFRoZSBvbmx5IG1ham9yIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgUENNeHggYW5kIG90aGVyIE1BRDE2IGNhcmRzCitpcyB0aGF0IGluc3RlYWQgb2YgdGhlIG1peGVyIGluIHRoZSBDUzQyMzEgY29kZWMgYSBzZXBhcmF0ZSBtaXhlcgorY29udHJvbGxlZCBieSBhbiBvbi1ib2FyZCA4MEMzMiBtaWNyb2NvbnRyb2xsZXIgaXMgdXNlZC4gQ29udHJvbCBvZgordGhlIG1peGVyIHRha2VzIHBsYWNlIHZpYSB0aGUgQUNJIChtaXJvJ3MgYXVkaW8gY29udHJvbCBpbnRlcmZhY2UpCitwcm90b2NvbCB0aGF0IGlzIGltcGxlbWVudGVkIGluIGEgc2VwYXJhdGUgbG93bGV2ZWwgZHJpdmVyLiBNYWtlIHN1cmUKK3lvdSBjb21waWxlIHRoaXMgQUNJIGRyaXZlciB0b2dldGhlciB3aXRoIHRoZSBub3JtYWwgTUFEMTYgc3VwcG9ydAord2hlbiB5b3UgdXNlIGEgbWlyb1NPVU5EIFBDTXh4IGNhcmQuIFRoZSBBQ0kgbWl4ZXIgaXMgY29udHJvbGxlZCBieQorL2Rldi9taXhlciBhbmQgdGhlIENTNDIzMSBtaXhlciBieSAvZGV2L21peGVyMSAoZGVwZW5kcyBvbiBsb2FkCit0aW1lKS4gT25seSBpbiBzcGVjaWFsIGNhc2VzIHlvdSB3YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgcmVndWxhcmx5IG9uCit0aGUgQ1M0MjMxIG1peGVyLgorCitUaGUgbWlyb1NPVU5EIFBDTTEyIGFuZCBQQ00yMCByYWRpbyBpcyBjYXBhYmxlIG9mIGZ1bGwgZHVwbGV4CitvcGVyYXRpb24gKHNpbXVsdGFuZW91cyBQQ00gcmVwbGF5IGFuZCByZWNvcmRpbmcpLCB3aGljaCBhbGxvd3MgeW91IHRvCitpbXBsZW1lbnQgbmljZSByZWFsLXRpbWUgc2lnbmFsIHByb2Nlc3NpbmcgYXVkaW8gZWZmZWN0IHNvZnR3YXJlIGFuZAorbmV0d29yayB0ZWxlcGhvbmVzLiBUaGUgQUNJIG1peGVyIGhhcyB0byBiZSBzd2l0Y2hlZCBpbnRvIHRoZSAic29sbyIKK21vZGUgZm9yIGR1cGxleCBvcGVyYXRpb24gaW4gb3JkZXIgdG8gYXZvaWQgZmVlZGJhY2sgY2F1c2VkIGJ5IHRoZQorbWl4ZXIgKGlucHV0IGhlYXJzIG91dHB1dCBzaWduYWwpLiBZb3UgY2FuIGRlLS9hY3RpdmF0ZSB0aGlzIG1vZGUKK3Rocm91Z2ggdG9nZ2xlaW5nIHRoZSByZWNvcmQgYnV0dG9uIGZvciB0aGUgd2F2ZSBjb250cm9sbGVyIHdpdGggYW4KK09TUy1taXhlci4KKworVGhlIFBDTTIwIGNvbnRhaW5zIGEgcmFkaW8gdHVuZXIsIHdoaWNoIGlzIGFsc28gY29udHJvbGxlZCBieQorQUNJLiBUaGlzIHJhZGlvIHR1bmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgQUNJIGRyaXZlciB0b2dldGhlciB3aXRoIHRoZQorbWlyb3BjbTIwLm8gbW9kdWxlLiBBbHNvIHRoZSA3LWJhbmQgZXF1YWxpemVyIGlzIGludGVncmF0ZWQKKyhsaW1pdGVkIGJ5IHRoZSBPU1MtZGVzaWduKS4gRGV2ZWxvcGVtZW50IGhhcyBzdGFydGVkIGFuZCBtYXliZQorZmluaXNoZWQgZm9yIHRoZSBSRFMgZGVjb2RlciBvbiB0aGlzIGNhcmQsIHRvby4gWW91IHdpbGwgYmUgYWJsZSB0bworcmVhZCBSYWRpb1RleHQsIHRoZSBQcm9ncmFtbWUgU2VydmljZSBuYW1lLCBQcm9ncmFtbWUgVFlwZSBhbmQKK290aGVycy4gRXZlbiB0aGUgdjRsIHJhZGlvIG1vZHVsZSBiZW5lZml0cyBmcm9tIGl0IHdpdGggYSByZWZpbmVkCitzdHJlbmd0aCB2YWx1ZS4gU2VlIGFjaS5bY2hdIGFuZCBtaXJvcGNtMjAqLltjaF0gZm9yIG1vcmUgZGV0YWlscy4KKworVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaGF2ZSB3b3JrZWQgZmluZSBmb3IgdGhlIFBDTTEyCitpbiBNYXJrdXMgS3VobidzIHN5c3RlbSwgbWFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCB3b3JrLCB0b286CitDT05GSUdfTUFEMTZfQkFTRT0weDUzMCwgQ09ORklHX01BRDE2X0lSUT0xMSwgQ09ORklHX01BRDE2X0RNQT0zLCAKK0NPTkZJR19NQUQxNl9ETUEyPTAsIENPTkZJR19NQUQxNl9NUFVfQkFTRT0weDMzMCwgQ09ORklHX01BRDE2X01QVV9JUlE9MTAsCitEU1BfQlVGRlNJWkU9NjU1MzYsIFNFTEVDVEVEX1NPVU5EX09QVElPTlM9MHgwMDI4MTAwMC4KKworQmFzIHZhbiBkZXIgTGluZGVuIGlzIHVzaW5nIGhpcyBQQ00xLXBybyB3aXRoIGEgY29uZmlndXJhdGlvbiB0aGF0CitkaWZmZXJzIGluOiBDT05GSUdfTUFEMTZfSVJRPTcsIENPTkZJR19NQUQxNl9ETUE9MSwgQ09ORklHX01BRDE2X01QVV9JUlE9OQorCitDb21wYXEgRGVza3BybyBYTAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGJ1aWx0aW4gc291bmQgaGFyZHdhcmUgb2YgQ29tcGFxIERlc2twcm8gWEwgaXMgbm93IHN1cHBvcnRlZC4gCitZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIGRyaXZlciB3aXRoIE1TUyBhbmQgT1BMMyBzdXBwb3J0cyBlbmFibGVkLgorSW4gYWRkaXRpb24geW91IG5lZWQgdG8gbWFudWFsbHkgZWRpdCBsaW51eC9kcml2ZXJzL3NvdW5kL2xvY2FsLmggYW5kCit0byBhZGQgYSBsaW5lIGNvbnRhaW5pbmcgIiNkZWZpbmUgREVTS1BST1hMIiBpZiB5b3UgdXNlZCAKK21ha2UgbWVudWNvbmZpZy94Y29uZmlnLgorCitPdGhlcnM/CistLS0tLS0tCisKK1NpbmNlIHRoZXJlIGFyZSBzbyBtYW55IGRpZmZlcmVudCBzb3VuZCBjYXJkcywgaXQncyBsaWtlbHkgdGhhdCBJIGhhdmUgCitmb3Jnb3R0ZW4gdG8gbWVudGlvbiBtYW55IG9mIHRoZW0uIFBsZWFzZSBpbmZvcm0gbWUgaWYgeW91IGtub3cgeWV0IGFub3RoZXIKK2NhcmQgd2hpY2ggd29ya3Mgd2l0aCBMaW51eCwgcGxlYXNlIGluZm9ybSBtZSAob3IgaXMgYW55Ym9keSBlbHNlCit3aWxsaW5nIHRvIG1haW50YWluIGEgZGF0YWJhc2Ugb2Ygc3VwcG9ydGVkIGNhcmRzIChqdXN0IGxpa2UgaW4gWEY4Nik/KS4KKworQ2FyZHMgbm90IHN1cHBvcnRlZCB5ZXQKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSBjaGVjayB0aGUgdmVyc2lvbiBvZiBzb3VuZCBkcml2ZXIgeW91IGFyZSB1c2luZyBiZWZvcmUgCitjb21wbGFpbmluZyB0aGF0IHlvdXIgY2FyZCBpcyBub3Qgc3VwcG9ydGVkLiBJdCdzIHBvc3NpYmxlIHlvdSBhcmUgCit1c2luZyBhIGRyaXZlciB2ZXJzaW9uIHdoaWNoIHdhcyByZWxlYXNlZCBtb250aHMgYmVmb3JlIHlvdXIgY2FyZCB3YXMKK2ludHJvZHVjZWQuCisKK0ZpcnN0IG9mIGFsbCwgdGhlcmUgaXMgYW4gZWFzeSB3YXkgdG8gbWFrZSBtb3N0IHNvdW5kIGNhcmRzIHdvcmsgd2l0aCBMaW51eC4KK0p1c3QgdXNlIHRoZSBET1MgYmFzZWQgZHJpdmVyIHRvIGluaXRpYWxpemUgdGhlIGNhcmQgdG8gYSBrbm93biBzdGF0ZSwgdGhlbiB1c2UKK2xvYWRsaW4uZXhlIHRvIGJvb3QgTGludXguIElmIExpbnV4IGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzYW1lIEkvTywgSVJRIGFuZAorRE1BIG51bWJlcnMgYXMgRE9TLCB0aGUgY2FyZCBjb3VsZCB3b3JrLgorKGN0cmwtYWx0LWRlbCBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBsb2FkbGluLmV4ZSBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGgKK25ldyBtb3RoZXJib2FyZHMpLiBUaGlzIG1ldGhvZCB3b3JrcyBhbHNvIHdpdGggYWxsL21vc3QgUG5QIHNvdW5kIGNhcmRzLgorCitEb24ndCBnZXQgZm9vbGVkIHdpdGggU0IgY29tcGF0aWJpbGl0eS4gTW9zdCBjYXJkcyBhcmUgY29tcGF0aWJsZSB3aXRoCitTQiBidXQgdGhhdCBtYXkgcmVxdWlyZSBhIFRTUiB3aGljaCBpcyBub3QgcG9zc2libGUgd2l0aCBMaW51eC4gSWYKK3RoZSBjYXJkIGlzIGNvbXBhdGlibGUgd2l0aCBNU1MsIGl0J3MgYSBiZXR0ZXIgY2hvaWNlLiBTb21lIGNhcmRzCitkb24ndCB3b3JrIGluIHRoZSBTQiBhbmQgTVNTIG1vZGVzIGF0IHRoZSBzYW1lIHRpbWUuCisKK1RoZW4gdGhlcmUgYXJlIGNhcmRzIHdoaWNoIGFyZSBubyBsb25nZXIgbWFudWZhY3R1cmVkIGFuZC9vciB3aGljaAorYXJlIHJlbGF0aXZlbHkgcmFyZWx5IHVzZWQgKHN1Y2ggYXMgdGhlIDggYml0IFByb0F1ZGlvU3BlY3RydW0KK21vZGVscykuIEl0J3MgZXh0cmVtZWx5IHVubGlrZWx5IHRoYXQgc3VjaCBjYXJkcyBldmVyIGdldCBzdXBwb3J0ZWQuCitBZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcgY2FyZCByZXF1aXJlcyBtdWNoIHdvcmsgYW5kIGluY3JlYXNlcyB0aW1lCityZXF1aXJlZCBpbiBtYWludGFpbmluZyB0aGUgZHJpdmVyIChzb21lIGNoYW5nZXMgbmVlZCB0byBiZSBkb25lCit0byBhbGwgbG93IGxldmVsIGRyaXZlcnMgYW5kIGJlIHRlc3RlZCB0b28sIG1heWJlIHdpdGggbXVsdGlwbGUKK29wZXJhdGluZyBzeXN0ZW1zKS4gRm9yIHRoaXMgcmVhc29uIEkgaGF2ZSBtYWRlIGEgZGVjaXNpb24gdG8gbm90IHN1cHBvcnQKK29ic29sZXRlIGNhcmRzLiBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZW9uZSBlbHNlIG1ha2VzIGEgc2VwYXJhdGVseSAKK2Rpc3RyaWJ1dGVkIGRyaXZlciAoZGlmZnMpIGZvciB0aGUgY2FyZC4gCisKK1dyaXRpbmcgYSBkcml2ZXIgZm9yIGEgbmV3IGNhcmQgaXMgbm90IHBvc3NpYmxlIGlmIHRoZXJlIGFyZSBubyAKK3Byb2dyYW1taW5nIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBhYm91dCB0aGUgY2FyZC4gSWYgeW91IGRvbid0CitmaW5kIHlvdXIgbmV3IGNhcmQgZnJvbSB0aGlzIGZpbGUsIGxvb2sgZnJvbSB0aGUgaG9tZSBwYWdlIAorKGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlKS4gVGhlbiBwbGVhc2UgY29udGFjdAorbWFudWZhY3R1cmVyIG9mIHRoZSBjYXJkIGFuZCBhc2sgaWYgdGhleSBoYXZlIChvciBhcmUgd2lsbGluZyB0bykKK3JlbGVhc2VkIHRlY2huaWNhbCBkZXRhaWxzIG9mIHRoZSBjYXJkLiBEbyB0aGlzIGJlZm9yZSBjb250YWN0aW5nIG1lLiBJCitjYW4gb25seSBhbnN3ZXIgJ25vJyBpZiB0aGVyZSBhcmUgbm8gcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgorCitJIGhhdmUgbWFkZSBkZWNpc2lvbiB0byBub3QgYWNjZXB0IGNvZGUgYmFzZWQgb24gcmV2ZXJzZSBlbmdpbmVlcmluZwordG8gdGhlIGRyaXZlci4gVGhlcmUgYXJlIHRocmVlIG1haW4gcmVhc29uczogRmlyc3QgSSBkb24ndCB3YW50IHRvIGJyZWFrCityZWxhdGlvbnNoaXBzIHRvIHNvdW5kIGNhcmQgbWFudWZhY3R1cmVycy4gVGhlIHNlY29uZCByZWFzb24gaXMgdGhhdAorbWFpbnRhaW5pbmcgYW5kIHN1cHBvcnRpbmcgYSBkcml2ZXIgd2l0aG91dCBhbnkgc3BlY3Mgd2lsbCBiZSBhIHBhaW4uCitUaGUgdGhpcmQgcmVhc29uIGlzIHRoYXQgY29tcGFuaWVzIGhhdmUgZnJlZWRvbSB0byByZWZ1c2Ugc2VsbGluZyB0aGVpcgorcHJvZHVjdHMgdG8gb3RoZXIgdGhhbiBXaW5kb3dzIHVzZXJzLgorCitTb21lIGNvbXBhbmllcyBkb24ndCBnaXZlIGxvdyBsZXZlbCB0ZWNobmljYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIKK3Byb2R1Y3RzIHRvIHB1YmxpYyBvciBhdCBsZWFzdCB0aGVpciByZXF1aXJlIHNpZ25pbmcgYSBOREEuIEl0J3Mgbm90Citwb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBmcmVld2FyZSBkcml2ZXIgZm9yIHRoZW0uIEhvd2V2ZXIgaXQncyBwb3NzaWJsZQordGhhdCBzdXBwb3J0IGZvciBzdWNoIGNhcmRzIGJlY29tZSBhdmFpbGFibGUgaW4gdGhlIGNvbW1lcmNpYWwgdmVyc2lvbgorb2YgdGhpcyBkcml2ZXIgKHNlZSBodHRwOi8vd3d3LjRGcm9udC10ZWNoLmNvbS9vc3MuaHRtbCBmb3IgbW9yZSBpbmZvKS4KKworVGhlcmUgYXJlIHNvbWUgY29tbW9uIGF1ZGlvIGNoaXBzZXRzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiBGb3IgZXhhbXBsZQorU2llcnJhIEFyaWEgYW5kIElCTSBNd2F2ZS4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGFyY2hpdGVjdHVyZXMKK2dldCBzb21lIHN1cHBvcnQgaW4gZnV0dXJlIGJ1dCBJIGNhbid0IG1ha2UgYW55IHByb21pc2VzLiBKdXN0IGxvb2sKK2F0IHRoZSBob21lIHBhZ2UgKGh0dHA6Ly93d3cub3BlbnNvdW5kLmNvbS9vc3NmcmVlL25ld19jYXJkcy5odG1sKQorZm9yIGxhdGVzdCBpbmZvLgorCitJbmZvcm1hdGlvbiBhYm91dCB1bnN1cHBvcnRlZCBzb3VuZCBjYXJkcyBhbmQgY2hpcHNldHMgaXMgd2VsY29tZSBhcyB3ZWxsCithcyBmcmVlIGNvcGllcyBvZiBzb3VuZCBjYXJkcywgU0RLcyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMuCisKK0lmIHlvdSBoYXZlIGFueSBjb3JyZWN0aW9ucyBhbmQvb3IgY29tbWVudHMsIHBsZWFzZSBjb250YWN0IG1lLgorCitIYW5udSBTYXZvbGFpbmVuCitoYW5udUBvcGVuc291bmQuY29tCisKK1BlcnNvbmFsIGhvbWUgcGFnZToJICAgaHR0cDovL3d3dy5jb21wdXNvbmljLmZpL35oYW5udQoraG9tZSBwYWdlIG9mIE9TUy9GcmVlOiBodHRwOi8vd3d3Lm9wZW5zb3VuZC5jb20vb3NzZnJlZQorCitob21lIHBhZ2Ugb2YgY29tbWVyY2lhbCBPU1MKKyhPcGVuIFNvdW5kIFN5c3RlbSkgZHJpdmVyczogaHR0cDovL3d3dy5vcGVuc291bmQuY29tL29zcy5odG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuYXdlIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDA1NGNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLmF3ZQpAQCAtMCwwICsxLDIxOCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUFXRTMyIFNvdW5kIERyaXZlciBmb3IgTGludXggLyBGcmVlQlNECisJCXZlcnNpb24gMC40LjM7IE5vdi4gMSwgMTk5OAorCisJVGFrYXNoaSBJd2FpIDxpd2FpQHd3LnVuaS1lcmxhbmdlbi5kZT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBHRU5FUkFMIE5PVEVTCisKK1RoaXMgaXMgYSBzb3VuZCBkcml2ZXIgZXh0ZW5zaW9uIGZvciBTb3VuZEJsYXN0ZXIgQVdFMzIgYW5kIG90aGVyCitjb21wYXRpYmxlIGNhcmRzIChBV0UzMi1QblAsIFNCMzIsIFNCMzItUG5QLCBBV0U2NCAmIGV0YykgdG8gZW5hYmxlCit0aGUgd2F2ZSBzeW50aCBvcGVyYXRpb25zLiAgVGhlIGRyaXZlciBpcyBwcm92aWRlZCBmb3IgTGludXggMS4yLngKK2FuZCAyLlswMTJdLngga2VybmVscywgYXMgd2VsbCBhcyBGcmVlQlNELCBvbiBJbnRlbCB4ODYgYW5kIERFQworQWxwaGEgc3lzdGVtcy4KKworVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgVGFrYXNoaSBJd2FpIDxpd2FpQHd3LnVuaS1lcmxhbmdlbi5kZT4sCithbmQgcHJvdmlkZWQgImFzIGlzIi4gIFRoZSBvcmlnaW5hbCBzb3VyY2UgKGF3ZWRydi0wLjQuMy50YXIuZ3opIGFuZAorYmluYXJ5IHBhY2thZ2VzIGFyZSBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZyBVUkw6CisJaHR0cDovL2JhaGFtdXQubW0udC51LXRva3lvLmFjLmpwL35pd2FpL2F3ZWRydi8KK05vdGUgdGhhdCBzaW5jZSB0aGUgYXV0aG9yIGlzIGFwYXJ0IGZyb20gdGhpcyB3ZWIgc2l0ZSwgdGhlIHVwZGF0ZSBpcworbm90IGZyZXF1ZW50IG5vdy4KKworCisqIE5PVEUgVE8gTElOVVggVVNFUlMKKworVG8gZW5hYmxlIHRoaXMgZHJpdmVyIG9uIGxpbnV4LTIuWzAxXS54IGtlcm5lbHMsIHlvdSBuZWVkIHR1cm4gb24gCisiQVdFMzIgc3ludGgiIG9wdGlvbnMgaW4gc291bmQgbWVudSB3aGVuIGNvbmZpZ3VyZSB5b3VyIGxpbnV4IGtlcm5lbAorYW5kIG1vZHVsZXMuICBUaGUgcHJlY2lzZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIGlzIGRlc2NyaWJlZCBpbiB0aGUKK0FXRTY0LU1pbmktSE9XVE8gYW5kIGxpbnV4LWtlcm5lbC9Eb2N1bWV0YXRpb24vc291bmQvQVdFMzIuCisKK0lmIHlvdSdyZSB1c2luZyBQblAgY2FyZHMsIHRoZSBjYXJkIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGxvYWRpbmcKK3RoZSBzb3VuZCBkcml2ZXIuICBUaGVyZSdyZSBzZXZlcmFsIG9wdGlvbnMgdG8gZG8gdGhpczoKKyAgICAtIEluaXRpYWxpemUgdGhlIGNhcmQgdmlhIElTQSBQblAgdG9vbHMsIGFuZCBsb2FkIHRoZSBzb3VuZCBtb2R1bGUuCisgICAgLSBJbml0aWFsaXplIHRoZSBjYXJkIG9uIERPUywgYW5kIGxvYWQgbGludXggYnkgbG9hZGxpbi5leGUKKyAgICAtIFVzZSBQblAga2VybmVsIGRyaXZlciAoZm9yIExpbnV4LTIueC54KQorVGhlIGRldGFpbGVkIGluc3RydWN0aW9uIGZvciB0aGUgc29sdXRpb24gdXNpbmcgaXNhcG5wIHRvb2xzIGlzIGZvdW5kCitpbiBtYW55IGRvY3VtZW50cyBsaWtlIGFib3ZlLiAgQSBicmllZiBpbnN0cnVjdGlvbiBpcyBhbHNvIGluY2x1ZGVkIGluCit0aGUgaW5zdGFsbGF0aW9uIGRvY3VtZW50IG9mIHRoaXMgcGFja2FnZS4KK0ZvciBQblAgZHJpdmVyIHByb2plY3QsIHBsZWFzZSByZWZlciB0byB0aGUgZm9sbG93aW5nIFVSTDoKKwlodHRwOi8vd3d3LWpjci5sbWgub3guYWMudWsvfnBucC8KKworCisqIFVTSU5HIFRIRSBEUklWRVIKKworVGhlIGF3ZWRydiBoYXMgc2V2ZXJhbCBkaWZmZXJlbnQgcGxheWluZyBtb2RlcyB0byByZWFsaXplIGVhc3kgY2hhbm5lbCAKK2FsbG9jYXRpb24gZm9yIE1JREkgc29uZ3MuICBUbyBoZWFyIHRoZSBleGFjdCBzb3VuZCBxdWFsaXR5LCB5b3UgbmVlZAordG8gb2J0YWluIHRoZSBleHRlbmRlZCBzZXF1ZW5jZXIgcHJvZ3JhbSwgZHJ2bWlkaSBvciBwbGF5bWlkaS0yLjUuCisKK0ZvciBwbGF5aW5nIE1JREkgZmlsZXMsIHlvdSAqTVVTVCogbG9hZCB0aGUgc291bmRmb250IGZpbGUgb24gdGhlCitkcml2ZXIgcHJldmlvdXNseSBieSBzZnhsb2FkIHV0aWxpdHkuICBPdGhlcndpc2UgeW91J2xsIGhlcmUgbm8gc291bmRzIAorYXQgYWxsISAgQWxsIHRoZSB1dGlsaXRpZXMgYW5kIGRyaXZlciBzb3VyY2UgcGFja2FnZXMgYXJlIGZvdW5kIGluIHRoZQorYWJvdmUgVVJMLiAgVGhlIHNmeGxvYWQgcHJvZ3JhbSBpcyBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZQorYXdlc2Z4LTAuNC4zLnRnei4gIEJpbmFyeSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIHRoZXJlLCB0b28uICBTZWUgdGhlCitpbnN0cnVjdGlvbiBpbiBlYWNoIHBhY2thZ2UgZm9yIGluc3RhbGxhdGlvbi4KKworTG9hZGluZyBhIHNvdW5kZm9udCBmaWxlIGlzIHZlcnkgc2ltcGxlLiAgSnVzdCBleGVjdXRlIHRoZSBjb21tYW5kCisKKwklIHNmeGxvYWQgc3ludGhnbS5zYmsKKworVGhlbiwgc2Z4bG9hZCB0cmFuc2ZlcnMgdGhlIGZpbGUgInN5bnRoZ20uc2JrIiB0byB0aGUgZHJpdmVyLgorQm90aCBTRjEgYW5kIFNGMiBmb3JtYXRzIGFyZSBhY2NlcHRlZC4KKworTm93IHlvdSBjYW4gaGVhciBtaWRpIG11c2ljcyBieSBhIG1pZGkgcGxheWVyLgorCisJJSBkcnZtaWRpIGZvby5taWQKKworSWYgeW91IHJ1biBNSURJIHBsYXllciBhZnRlciBNT0QgcGxheWVyLCB5b3UgbmVlZCB0byBsb2FkIHNvdW5kZm9udAorZmlsZXMgYWdhaW4sIHNpbmNlIE1PRCBwbGF5ZXIgcHJvZ3JhbXMgY2xlYXIgdGhlIHByZXZpb3VzIGxvYWRlZAorc2FtcGxlcyBieSB0aGVpciBvd24gZGF0YS4KKworSWYgeW91IGhhdmUgb25seSA1MTJrYiBvbiB0aGUgc291bmQgY2FyZCwgSSByZWNvbW1lbmQgdG8gdXNlIGR5bmFtaWMKK3NhbXBsZSBsb2FkaW5nIHZpYSAtTCBvcHRpb24gb2YgZHJ2bWlkaS4gIDJNQiBHTS9HUyBzb3VuZGZvbnQgZmlsZSBpcworYXZhaWxhYmxlIGluIG1vc3QgbWlkaSBmaWxlcy4KKworCSUgc2Z4bG9hZCBzeW50aGdtCisJJSBkcnZtaWRpIC1MIDJtYmdtZ3MgZm9vLm1pZAorCitUaGlzIG1ha2VzIGEgYmlnIGRpZmZlcmVuY2UgKGJlbGlldmUgbWUpISAgRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlCityZWZlciB0byB0aGUgRkFRIGxpc3Qgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHRoZSBVUkwgYWJvdmUuCisKK1RoZSBjdXJyZW50IGNob3J1cywgcmV2ZXJiIGFuZCBlcXVhbGl6ZXIgc3RhdHVzIGNhbiBiZSBjaGFuZ2VkIGJ5Cithd2VzZXQgdXRpbGl0eSBwcm9ncmFtIChpbmNsdWRlZCBpbiBhd2VzZnggcGFja2FnZSkuICBOb3RlIHRoYXQKK3NvbWUgYXdlZHJ2LW5hdGl2ZSBwcm9ncmFtcyAobGlrZSBkcnZtaWRpIGFuZCB4bXApIHdpbGwgY2hhbmdlIHRoZQorY3VycmVudCBzZXR0aW5ncyBieSB0aGVtc2VsdmVzLiAgVGhlIGF3ZXNldCBwcm9ncmFtIGlzIGVmZmVjdGl2ZQorb25seSBmb3Igb3RoZXIgcHJvZ3JhbXMgbGlrZSBwbGF5bWlkaS4KKworRW5qb3kuCisKKworKiBDT01QSUxFIEZMQUdTCisKK0NvbXBpbGUgY29uZGl0aW9ucyBhcmUgZGVmaW5lZCBpbiBhd2VfY29uZmlnLmguCisKK1tDb21wYXRpYmlsaXR5IENvbmRpdGlvbnNdCitUaGUgZm9sbG93aW5nIGZsYWdzIGFyZSBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB1c2luZyBpbnN0YWxsYXRpb24KK3NoZWxsIHNjcmlwdC4KKworLSBBV0VfTU9EVUxFX1NVUFBPUlQKKyAgICBpbmRpY2F0ZXMgeW91ciBMaW51eCBrZXJuZWwgc3VwcG9ydHMgbW9kdWxlIGZvciBlYWNoIHNvdW5kIGNhcmQKKyAgICAoaW4gcmVjZW50IDIuMSBvciAyLjIga2VybmVscyBhbmQgdW5vZmZpY2lhbCBwYXRjaGVkIDIuMCBrZXJuZWxzCisgICAgYXMgZGlzdHJpYnV0ZWQgaW4gdGhlIFJINS4wIHBhY2thZ2UpLgorICAgIFRoaXMgZmxhZyBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHlvdSdyZSB1c2luZyAyLjEueCBrZXJuZWxzLgorICAgIFlvdSBjYW4gcGFzcyB0aGUgYmFzZSBhZGRyZXNzIGFuZCBtZW1vcnkgc2l6ZSB2aWEgdGhlIGZvbGxvd2luZworICAgIG1vZHVsZSBvcHRpb25zLAorCWlvID0gYmFzZSBJL08gcG9ydCBhZGRyZXNzIChlZy4gMHg2MjApCisJbWVtc2l6ZSA9IERSQU0gc2l6ZSBpbiBraWxvYnl0ZXMgKGVnLiA1MTIpCisgICAgQXMgZGVmYXVsdCwgQVdFIGRyaXZlciBwcm9iZXMgdGhlc2UgdmFsdWVzIGF1dG9tYXRpY2FsbHkuCisKKworW0hhcmR3YXJlIENvbmRpdGlvbnNdCitZb3UgRE9OJ1QgaGF2ZSB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzLgorRGVmaW5lIHRoZW0gb25seSB3aGVuIHRoZSBkcml2ZXIgY291bGRuJ3QgZGV0ZWN0IHRoZSBjYXJkIHByb3Blcmx5LgorCistIEFXRV9ERUZBVUxUX0JBU0VfQUREUgkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorICAgIHNwZWNpZmllcyB0aGUgYmFzZSBwb3J0IGFkZHJlc3Mgb2YgeW91ciBBV0UzMiBjYXJkLgorICAgIDAgbWVhbnMgdG8gYXV0b2RldGVjdCB0aGUgYWRkcmVzcy4KKworLSBBV0VfREVGQVVMVF9NRU1fU0laRQkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorICAgIHNwZWNpZmllcyB0aGUgbWVtb3J5IHNpemUgb2YgeW91ciBBV0UzMiBjYXJkIGluIGtpbG9ieXRlcy4KKyAgICAtMSBtZWFucyB0byBhdXRvZGV0ZWN0IGl0cyBzaXplLgorICAgIAorCitbU2FtcGxlIFRhYmxlIFNpemVdCitGcm9tIHZlci4wLjQuMCwgc2FtcGxlIHRhYmxlcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IChleGNlcHQKK0xpbnV4LTEuMi54IHN5c3RlbSksIHNvIHlvdSBuZWVkIE5PVCB0byB0b3VjaCB0aGVzZSBwYXJhbWV0ZXJzLgorTGludXgtMS4yLnggdXNlcnMgbWF5IG5lZWQgdG8gaW5jcmVhc2UgdGhlc2UgdmFsdWVzIHRvIGFwcHJvcHJpYXRlIHNpemUgCitpZiB0aGUgc291bmQgY2FyZCBpcyBlcXVpcHBlZCB3aXRoIG1vcmUgRFJBTS4KKworLSBBV0VfTUFYX1NGX0xJU1RTLCBBV0VfTUFYX1NBTVBMRVMsIEFXRV9NQVhfSU5GT1MKKworCitbT3RoZXIgQ29uZGl0aW9uc10KKworLSBBV0VfQUxXQVlTX0lOSVRfRk0JCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKyAgICBpbmRpY2F0ZXMgdGhlIEFXRSBkcml2ZXIgYWx3YXlzIGluaXRpYWxpemUgRk0gcGFzc3Rocm91Z2ggZXZlbgorICAgIHdpdGhvdXQgRFJBTSBvbiBib2FyZC4gIEVtdTgwMDAgY2hpcCBoYXMgYSByZXN0cmljdGlvbiBmb3IgcGxheWluZworICAgIHNhbXBsZXMgb24gRFJBTSB0aGF0IGF0IGxlYXN0IHR3byBjaGFubmVscyBtdXN0IGJlIG9jY3VwaWVkIGFzCisgICAgcGFzc3Rocm91Z2ggY2hhbm5lbHMuIAorCistIEFXRV9ERUJVR19PTgkJCShkZWZhdWx0OiBkZWZpbmVkKQorICAgIHR1cm5zIG9uIGRlYnVnZ2luZyBtZXNzYWdlcyBpZiBkZWZpbmVkLgorCistIEFXRV9IQVNfR1VTX0NPTVBBVElCSUxJVFkJKGRlZmF1bHQ6IGRlZmluZWQpCisgICAgRW5hYmxlcyBHVVMgY29tcGF0aWJpbGl0eSBtb2RlIGlmIGRlZmluZWQsIHJlYWRpbmcgR1VTIHBhdGNoZXMgYW5kIAorICAgIEdVUyBjb250cm9sIGNvbW1hbmRzLiAgRGVmaW5lIHRoaXMgb3B0aW9uIHRvIHVzZSBHTU9EIG9yIG90aGVyCisgICAgR1VTIG1vZHVsZSBwbGF5ZXJzLgorCistIENPTkZJR19BV0UzMl9NSURJRU1VCQkoZGVmYXVsdDogZGVmaW5lZCkKKyAgICBBZGRzIGEgTUlESSBlbXVsYXRpb24gZGV2aWNlIGJ5IEVtdTgwMDAgd2F2ZXRhYmxlLiAgVGhlIGVtdWxhdGlvbgorICAgIGRldmljZSBjYW4gYmUgYWNjZXNzZWQgYXMgYW4gZXh0ZXJuYWwgTUlESSwgYW5kIHNlbmRzIHRoZSBNSURJCisgICAgY29udHJvbCBjb2RlcyBkaXJlY3RseS4gIFhHIGFuZCBHUyBzeXNleC9OUlBOIGFyZSBhY2NlcHRlZC4KKyAgICBObyBNSURJIGlucHV0IGlzIHN1cHBvcnRlZC4KKworLSBDT05GSUdfQVdFMzJfTUlYRVIJCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKyAgICBBZGRzIGEgbWl4ZXIgZGV2aWNlIGZvciBBV0UzMiBiYXNzL3RyZWJsZSBlcXVhbGl6ZXIgY29udHJvbC4KKyAgICBZb3UgY2FuIGFjY2VzcyB0aGlzIGRldmljZSB1c2luZyAvZGV2L21peGVyPz8gKHVzdWFsbHkgbWl4ZXIwMSkuCisKKy0gQVdFX1VTRV9ORVdfVk9MVU1FX0NBTEMJKGRlZmF1bHQ6IGRlZmluZWQpCisgICAgVXNlIHRoZSBuZXcgbWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgdm9sdW1lIGNoYW5nZSBhcyBjb21wYXRpYmxlCisgICAgd2l0aCBET1MvV2luIGRyaXZlcnMuICBUaGlzIG9wdGlvbiBjYW4gYmUgdG9nZ2xlZCB2aWEgYXdlc2V0CisgICAgcHJvZ3JhbSwgb3IgZHJ2bWlkaSBwbGF5ZXIuCisKKy0gQVdFX0NIRUNLX1ZUQVJHRVQJCShkZWZhdWx0OiBkZWZpbmVkKQorICAgIENoZWNrIHRoZSBjdXJyZW50IHZvbHVtZSB0YXJnZXQgdmFsdWUgd2hlbiBzZWFyY2hpbmcgZm9yIGFuCisgICAgZW1wdHkgY2hhbm5lbCB0byBhbGxvY2F0ZSBhIG5ldyB2b2ljZS4gIFRoaXMgaXMgZXhwZXJpbWVudGFsbHkKKyAgICBpbXBsZW1lbnRlZCBpbiB0aGlzIHZlcnNpb24uICAocHJvYmFibHksIHRoaXMgb3B0aW9uIGRvZXNuJ3QKKyAgICBhZmZlY3QgdGhlIHNvdW5kIHF1YWxpdHkgc2V2ZXJlbHkuLi4pCisKKy0gQVdFX0FMTE9XX1NBTVBMRV9TSEFSSU5HCShkZWZhdWx0OiBkZWZpbmVkKQorICAgQWxsb3cgc2FtcGxlIHNoYXJpbmcgZm9yIGRpZmZlcmVudGx5IGxvYWRlZCBwYXRjaGVzLgorICAgVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSB0b2dldGhlciB3aXRoIGF3ZXNmeC0wLjQuM3AzLgorICAgTm90ZSB0aGF0IHRoaXMgaXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIG9wdGlvbi4KKworLSBERUZfRk1fQ0hPUlVTX0RFUFRICQkoZGVmYXVsdDogMHgxMCkKKyAgICBUaGUgZGVmYXVsdCBzdHJlbmd0aCB0byBiZSBzZW50IHRvIHRoZSBjaG9ydXMgZWZmZWN0IGVuZ2luZS4KKyAgICBGcm9tIDAgdG8gMHhmZi4gIExhcmdlciBudW1iZXJzIG1heSBvZnRlbiBjYXVzZSB3ZWlyZCBzb3VuZHMuCisKKy0gREVGX0ZNX1JFVkVSQl9ERVBUSAkJKGRlZmF1bHQ6IDB4MTApCisgICAgVGhlIGRlZmF1bHQgc3RyZW5ndGggdG8gYmUgc2VudCB0byB0aGUgcmV2ZXJiIGVmZmVjdCBlbmdpbmUuCisgICAgRnJvbSAwIHRvIDB4ZmYuICBMYXJnZXIgbnVtYmVycyBtYXkgb2Z0ZW4gY2F1c2Ugd2VpcmQgc291bmRzLgorCisKKyogQUNLTk9XTEVER01FTlRTCisKK1RoYW5rcyB0byBXaXRvbGQgSmFjaGltY3p5ayAod2l0ZWtAeGZhY3Rvci53cGkuZWR1KSBmb3IgbXVjaCBhZHZpY2UKK29uIHByb2dyYW1taW5nIG9mIEFXRTMyLiAgTXVjaCBjb2RlIGlzIGJyb3VnaHQgZnJvbSBoaXMgQVdFMzItbmF0aXZlIAorTU9EIHBsYXllciwgQUxNUC4KK1RoZSBwb3J0IG9mIGF3ZWRydiB0byBGcmVlQlNEIGlzIGRvbmUgYnkgUmFuZGFsbCBIb3BwZXIKKyhyaGhAY3QucGlja2VyLmNvbSkuCitUaGUgbmV3IHZvbHVtZSBjYWxjdWxhdGlvbiByb3V0aW5lIHdhcyBkZXJpdmVkIGZyb20gTWFyayBXZWF2ZXIncworQURJUCBjb21wYXRpYmxlIHJvdXRpbmVzLgorSSBhbHNvIHRoYW5rIGxpbnV4LWF3ZS1tbCBtZW1iZXJzIGZvciB0aGVpciBlZmZvcnRzCit0byByZWJvb3QgdGhlaXIgc3lzdGVtIG1hbnkgdGltZXMgOi0pCisKKworKiBUT0RPJ1MKKworLSBDb21wbGV0ZSBET1MvV2luIGNvbXBhdGliaWxpdHkKKy0gRFNQLWxpa2Ugb3V0cHV0CisKKworKiBDT1BZUklHSFQKKworQ29weXJpZ2h0IChDKSAxOTk2LTE5OTggVGFrYXNoaSBJd2FpCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUubW9kdWxlcyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTFkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUubW9kdWxlcwpAQCAtMCwwICsxLDEwNiBAQAorQnVpbGRpbmcgYSBtb2R1bGFyIHNvdW5kIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGN1cnJlbnQgYXMgb2YgbGludXgtMi4xLjg1LiBDaGVjayB0aGUgb3RoZXIKK3JlYWRtZSBmaWxlcywgZXNwZWNpYWxseSBSRUFETUUuT1NTLCBmb3IgaW5mb3JtYXRpb24gbm90IHNwZWNpZmljIHRvCittYWtpbmcgc291bmQgbW9kdWxhci4KKworICBGaXJzdCwgY29uZmlndXJlIHlvdXIga2VybmVsLiBUaGlzIGlzIGFuIGlkZWEgb2Ygd2hhdCB5b3Ugc2hvdWxkIGJlCitzZXR0aW5nIGluIHRoZSBzb3VuZCBzZWN0aW9uOgorCis8TT4gU291bmQgY2FyZCBzdXBwb3J0IAorCis8TT4gMTAwJSBTb3VuZCBCbGFzdGVyIGNvbXBhdGlibGVzIChTQjE2LzMyLzY0LCBFU1MsIEphenoxNikgc3VwcG9ydCAKKworICBJIGhhdmUgU291bmRCbGFzdGVyLiBTZWxlY3QgeW91ciBjYXJkIGZyb20gdGhlIGxpc3QuCisKKzxNPiBHZW5lcmljIE9QTDIvT1BMMyBGTSBzeW50aGVzaXplciBzdXBwb3J0IAorPE0+IEZNIHN5bnRoZXNpemVyIChZTTM4MTIvT1BMLTMpIHN1cHBvcnQgCisKKyAgSWYgeW91IGRvbid0IHNldCB0aGVzZSwgeW91IHdpbGwgcHJvYmFibHkgZmluZCB5b3UgY2FuIHBsYXkgLndhdiBmaWxlcworYnV0IG5vdCAubWlkaS4gQXMgdGhlIGhlbHAgZm9yIHRoZW0gc2F5cywgc2V0IHRoZW0gdW5sZXNzIHlvdSBrbm93IHlvdXIKK2NhcmQgZG9lcyBub3QgdXNlIG9uZSBvZiB0aGVzZSBjaGlwcyBmb3IgRk0gc3VwcG9ydC4KKworICBPbmNlIHlvdSBhcmUgY29uZmlndXJlZCwgbWFrZSB6bGlsbywgbW9kdWxlcywgbW9kdWxlc19pbnN0YWxsOyByZWJvb3QuCitOb3RlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBvciBwb3NzaWJsZSB0byBjb25maWd1cmUgc291bmQgaW4gdGhlCitkcml2ZXJzL3NvdW5kIGRpci4gTm93IG9uZSBzaW1wbHkgY29uZmlndXJlcyBhbmQgbWFrZXMgb25lJ3Mga2VybmVsIGFuZAorbW9kdWxlcyBpbiB0aGUgdXN1YWwgd2F5LgorCisgVGhlbiwgYWRkIHRvIHlvdXIgL2V0Yy9tb2Rwcm9iZS5jb25mIHNvbWV0aGluZyBsaWtlOgorCithbGlhcyBjaGFyLW1ham9yLTE0LSogc2IKK2luc3RhbGwgc2IgL3NiaW4vbW9kcHJvYmUgLWkgc2IgJiYgL3NiaW4vbW9kcHJvYmUgYWRsaWJfY2FyZAorb3B0aW9ucyBzYiBpbz0weDIyMCBpcnE9NyBkbWE9MSBkbWExNj01IG1wdV9pbz0weDMzMAorb3B0aW9ucyBhZGxpYl9jYXJkIGlvPTB4Mzg4ICAgICAjIEZNIHN5bnRoZXNpemVyCisKKyBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgaGF2ZSBjb21waWxlZCBpbiBrZXJuZWwgbGV2ZWwgSVNBUG5QIHN1cHBvcnQ6CisKK2FsaWFzIGNoYXItbWFqb3ItMTQgc2IKK3Bvc3QtaW5zdGFsbCBzYiAvc2Jpbi9tb2Rwcm9iZSAiLWsiICJhZGxpYl9jYXJkIgorb3B0aW9ucyBhZGxpYl9jYXJkIGlvPTB4Mzg4CisKKyAgVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgdGhlIHNvdW5kIGRyaXZlciBhbmQgYWxsIG5lY2Vzc2FyeSBiaXRzIGFuZAorcGllY2VzIGF1dG9sb2FkIG9uIGRlbWFuZCwgYXNzdW1pbmcgeW91IHVzZSBrZXJuZWxkIChhIHNvdW5kIGNob2ljZSkgYW5kCithdXRvY2xlYW4gd2hlbiBub3QgaW4gdXNlLiBBbHNvLCBvcHRpb25zIGZvciB0aGUgZGV2aWNlIGRyaXZlcnMgYXJlCitzZXQuIFRoZXkgd2lsbCBub3Qgd29yayB3aXRob3V0IHRoZW0uIENoYW5nZSBhcyBhcHByb3ByaWF0ZSBmb3IgeW91ciBjYXJkLgorSWYgeW91IGFyZSBub3QgeWV0IHVzaW5nIHRoZSB2ZXJ5IGNvb2wga2VybmVsZCwgeW91IHdpbGwgaGF2ZSB0byAibW9kcHJvYmUKKy1rIHNiIiB5b3Vyc2VsZiB0byBnZXQgdGhpbmdzIGdvaW5nLiBFdmVudHVhbGx5IHRoaW5ncyBtYXkgYmUgZml4ZWQgc28KK3RoYXQgdGhpcyBrbHVkZ2VyeSBpcyBub3QgbmVjZXNzYXJ5OyBmb3IgdGhlIHRpbWUgYmVpbmcsIGl0IHNlZW1zIHRvIHdvcmsKK3dlbGwuCisKKyAgUmVwbGFjZSAnc2InIHdpdGggdGhlIGRyaXZlciBmb3IgeW91ciBjYXJkLCBhbmQgZ2l2ZSBpdCB0aGUgcmlnaHQKK29wdGlvbnMuIFRvIGZpbmQgdGhlIGZpbGVuYW1lIG9mIHRoZSBkcml2ZXIsIGxvb2sgaW4KKy9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L21pc2MuIE1pbmUgbG9va3MgbGlrZToKKworYWRsaWJfY2FyZC5vICMgVGhpcyBpcyB0aGUgZ2VuZXJpYyBPUEx4IGRyaXZlcgorb3BsMy5vICMgVGhlIE9QTDMgZHJpdmVyCitzYi5vICMgPDxUaGUgU291bmRCbGFzdGVyIGRyaXZlci4gWW91cnMgbWF5IGRpZmZlci4+Pgorc291bmQubyAjIFRoZSBzb3VuZCBkcml2ZXIKK3VhcnQ0MDEubyAjIFVzZWQgYnkgc2IsIG1heWJlIG90aGVyIGNhcmRzCisKKyBXaGljaGV2ZXIgY2FyZCB5b3UgaGF2ZSwgdHJ5IGZlZWRpbmcgaXQgdGhlIG9wdGlvbnMgdGhhdCB3b3VsZCBiZSB0aGUKK2RlZmF1bHQgaWYgeW91IHdlcmUgbWFraW5nIHRoZSBkcml2ZXIgd2lyZWQsIG5vdCBhcyBtb2R1bGVzLiBZb3UgY2FuCitsb29rIGF0IGZ1bmN0aW9uIHJlZmVycmVkIHRvIGJ5IG1vZHVsZV9pbml0KCkgZm9yIHRoZSBjYXJkIHRvIHNlZSB3aGF0CithcmdzIGFyZSBleHBlY3RlZC4KKworIE5vdGUgdGhhdCBhdCBwcmVzZW50IHRoZXJlIGlzIG5vIHdheSB0byBjb25maWd1cmUgdGhlIGlvLCBpcnEgYW5kIG90aGVyCitwYXJhbWV0ZXJzIGZvciB0aGUgbW9kdWxhciBkcml2ZXJzIGFzIG9uZSBkb2VzIGZvciB0aGUgd2lyZWQgZHJpdmVycy4uIE9uZQorbmVlZHMgdG8gcGFzcyB0aGUgbW9kdWxlcyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzLCBlaXRoZXIKK3dpdGggL2V0Yy9tb2Rwcm9iZS5jb25mIG9yIHdpdGggY29tbWFuZC1saW5lIGFyZ3MgdG8gbW9kcHJvYmUsIGUuZy4KKworbW9kcHJvYmUgc2IgaW89MHgyMjAgaXJxPTcgZG1hPTEgZG1hMTY9NSBtcHVfaW89MHgzMzAKK21vZHByb2JlIGFkbGliX2NhcmQgaW89MHgzODgKKworIHJlY29tbWVuZCB1c2luZyAvZXRjL21vZHByb2JlLmNvbmYuCisKK1BlcnNpc3RlbnQgRE1BIEJ1ZmZlcnM6CisKK1RoZSBzb3VuZCBtb2R1bGVzIG5vcm1hbGx5IGFsbG9jYXRlIERNQSBidWZmZXJzIGR1cmluZyBvcGVuKCkgYW5kCitkZWFsbG9jYXRlIHRoZW0gZHVyaW5nIGNsb3NlKCkuIExpbnV4IGNhbiBvZnRlbiBoYXZlIHByb2JsZW1zIGFsbG9jYXRpbmcKK0RNQSBidWZmZXJzIGZvciBJU0EgY2FyZHMgb24gbWFjaGluZXMgd2l0aCBtb3JlIHRoYW4gMTZNQiBSQU0uIFRoaXMgaXMKK2JlY2F1c2UgSVNBIERNQSBidWZmZXJzIG11c3QgZXhpc3QgYmVsb3cgdGhlIDE2TUIgYm91bmRhcnkgYW5kIGl0IGlzIHF1aXRlCitwb3NzaWJsZSB0aGF0IHdlIGNhbid0IGZpbmQgYSBsYXJnZSBlbm91Z2ggZnJlZSBibG9jayBpbiB0aGlzIHJlZ2lvbiBhZnRlcgordGhlIG1hY2hpbmUgaGFzIGJlZW4gcnVubmluZyBmb3IgYW55IGFtb3VudCBvZiB0aW1lLiBUaGUgd2F5IHRvIGF2b2lkIHRoaXMKK3Byb2JsZW0gaXMgdG8gYWxsb2NhdGUgdGhlIERNQSBidWZmZXJzIGR1cmluZyBtb2R1bGUgbG9hZCBhbmQgZGVhbGxvY2F0ZQordGhlbSB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuIEZvciB0aGlzIHRvIGJlIGVmZmVjdGl2ZSB3ZSBuZWVkIHRvIGxvYWQKK3RoZSBzb3VuZCBtb2R1bGVzIHJpZ2h0IGFmdGVyIHRoZSBrZXJuZWwgYm9vdHMsIGVpdGhlciBtYW51YWxseSBvciBieSBhbgoraW5pdCBzY3JpcHQsIGFuZCBrZWVwIHRoZW0gYXJvdW5kIHVudGlsIHdlIHNodXQgZG93bi4gVGhpcyBpcyBhIGxpdHRsZQord2FzdGVmdWwgb2YgUkFNLCBidXQgaXQgZ3VhcmFudGVlcyB0aGF0IHNvdW5kIGFsd2F5cyB3b3Jrcy4KKworVG8gbWFrZSB0aGUgc291bmQgZHJpdmVyIHVzZSBwZXJzaXN0ZW50IERNQSBidWZmZXJzIHdlIG5lZWQgdG8gcGFzcyB0aGUKK3NvdW5kLm8gbW9kdWxlIGEgImRtYWJ1Zj0xIiBjb21tYW5kLWxpbmUgYXJndW1lbnQuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZQoraW4gL2V0Yy9tb2Rwcm9iZS5jb25mIGxpa2Ugc286CisKK29wdGlvbnMgc291bmQJCWRtYWJ1Zj0xCisKK0lmIHlvdSBoYXZlIDE2TUIgb3IgbGVzcyBSQU0gb3IgYSBQQ0kgc291bmQgY2FyZCwgdGhpcyBpcyB3YXN0ZWZ1bCBhbmQKK3VubmVjZXNzYXJ5LiBJdCBpcyBwb3NzaWJsZSB0aGF0IG1hY2hpbmUgd2l0aCAxNk1CIG9yIGxlc3MgUkFNIHdpbGwgZmluZAordGhpcyBvcHRpb24gdXNlZnVsLCBidXQgaWYgeW91ciBtYWNoaW5lIGlzIHNvIG1lbW9yeS1zdGFydmVkIHRoYXQgaXQKK2Nhbm5vdCBmaW5kIGEgNjRLIGJsb2NrIGZyZWUsIHlvdSB3aWxsIGJlIHdhc3RpbmcgZXZlbiBtb3JlIFJBTSBieSBrZWVwaW5nCit0aGUgc291bmQgbW9kdWxlcyBsb2FkZWQgYW5kIHRoZSBETUEgYnVmZmVycyBhbGxvY2F0ZWQgd2hlbiB0aGV5IGFyZSBub3QKK25lZWRlZC4gVGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byB1cGdyYWRlIHlvdXIgUkFNLiBCdXQgeW91IGRvIGFsc28gaGF2ZQordGhpcyBpbXByb3BlciBzb2x1dGlvbiBhcyB3ZWxsLiBVc2UgaXQgd2lzZWx5LgorCisgIEknbSBhZnJhaWQgSSBrbm93IG5vdGhpbmcgYWJvdXQgYW55dGhpbmcgYnV0IG15IHNldHVwLCBiZWluZyBtb3JlIG9mIGEKK3RleHQtbW9kZSBndXkgYW55d2F5LiBJZiB5b3UgaGF2ZSBvcHRpb25zIGZvciBvdGhlciBjYXJkcyBvciBvdGhlciBoZWxwZnVsCitoaW50cywgc2VuZCB0aGVtIHRvIG1lLCBKaW0gQnJheSwgamJAYXMyMjAub3JnLCBodHRwOi8vYXMyMjAub3JnL2piLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLnltZnNiIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLnltZnNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGE3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUueW1mc2IKQEAgLTAsMCArMSwxMDcgQEAKK0xlZ2FjeSBhdWRpbyBkcml2ZXIgZm9yIFlNRjd4eCBQQ0kgY2FyZHMuCisKKworRklSU1QgT0YgQUxMCis9PT09PT09PT09PT0KKworICBUaGlzIGNvZGUgcmVmZXJlbmNlcyBZQU1BSEEncyBzYW1wbGUgY29kZXMgYW5kIGRhdGEgc2hlZXRzLgorICBJIHJlc3BlY3QgYW5kIHRoYW5rIGZvciBhbGwgcGVvcGxlIHRoZXkgbWFkZSBvcGVuIHRoZSBpbmZvcm1hdGlvbnMKKyAgYWJvdXQgWU1GN3h4IGNhcmRzLgorCisgIEFuZCB0aGlzIGNvZGVzIGhlYXZpbHkgYmFzZWQgb24gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPidzCisgIG9sZCBWSUEgODJDeHh4IGRyaXZlciAodmlhODJjeHh4LmMpLiBJIGFsc28gcmVzcGVjdCBoaW0uCisKKworRElTQ0xJTUVSCis9PT09PT09PT0KKworIFRoaXMgZHJpdmVyIGlzIGN1cnJlbnRseSBhdCBlYXJseSBBTFBIQSBzdGFnZS4gSXQgbWF5IGNhdXNlIHNlcmlvdXMKKyBkYW1hZ2UgdG8geW91ciBjb21wdXRlciB3aGVuIHVzZWQuCisgUExFQVNFIFVTRSBJVCBBVCBZT1VSIE9XTiBSSVNLLgorCisKK0FCT1VUIFRISVMgRFJJVkVSCis9PT09PT09PT09PT09PT09PQorCisgIFRoaXMgY29kZSBlbmFibGVzIHlvdSB0byB1c2UgeW91ciBZTUY3MjRbQS1GXSwgWU1GNzQwW0EtQ10sIFlNRjc0NCwgWU1GNzU0CisgY2FyZHMuIFdoZW4gZW5hYmxlZCwgeW91ciBjYXJkIGFjdHMgYXMgIlNvdW5kQmxhc3RlciBQcm8iIGNvbXBhdGlibGUgY2FyZC4KKyBJdCBjYW4gb25seSBwbGF5IDIyLjA1a0h6IC8gOGJpdCAvIFN0ZXJlbyBzYW1wbGVzLCBjb250cm9sIGV4dGVybmFsIE1JREkKKyBwb3J0LgorIElmIHlvdSB3YW50IHRvIHVzZSB5b3VyIGNhcmQgYXMgcmVjZW50ICIxNi1iaXQiIGNhcmQsIHlvdSBzaG91bGQgdXNlCisgQWxzYSBvciBPU1MvTGludXggZHJpdmVyLiBPZiBjb3Vyc2UgeW91IGNhbiB3cml0ZSBuYXRpdmUgUENJIGRyaXZlciBmb3IKKyB5b3VyIGNhcmRzIDopCisKKworVVNBR0UKKz09PT09CisKKyAjIG1vZHByb2JlIHltZnNiIChvcHRpb25zKQorCisKK09QVElPTlMgRk9SIE1PRFVMRQorPT09PT09PT09PT09PT09PT09CisKKyAgaW8gICAgICAgICAgIDogU0IgYmFzZSBhZGRyZXNzICAgICAoMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODApCisgIHN5bnRoX2lvICAgICA6IE9QTDMgYmFzZSBhZGRyZXNzICAgKDB4Mzg4LCAweDM5OCwgMHgzYTAsIDB4M2E4KQorICBkbWEgICAgICAgICAgOiBETUEgbnVtYmVyICAgICAgICAgICgwLDEsMykKKyAgbWFzdGVyX3ZvbHVtZTogQUMnOTcgUENNIG91dCBWb2wgICAoMC0xMDApCisgIHNwZGlmX291dCAgICA6IFNQRElGLW91dCBmbGFnICAgICAgKDA6ZGlzYWJsZSAxOmVuYWJsZSkKKworIFRoZXNlIG9wdGlvbnMgd2lsbCBjaGFuZ2UgaW4gZnV0dXJlLi4uCisKKworRlJFUVVFTkNZCis9PT09PT09PT0KKworICBXaGVuIHBsYXlpbmcgc291bmRzIHZpYSB0aGlzIGRyaXZlciwgeW91IHdpbGwgaGVhciBpdHMgcGl0Y2ggaXMgc2xpZ2h0bHkKKyBsb3dlciB0aGFuIG9yaWdpbmFsIHNvdW5kcy4gU2luY2UgdGhpcyBkcml2ZXIgcmVjb2duaXplcyB5b3VyIGNhcmQgYWN0cworIHdpdGggMjEuNzM5a0h6IHNhbXBsZSByYXRlcyByYXRoZXIgdGhhbiAyMi4wNTBrSHogKEkgdGhpbmsgaXQgbXVzdCBiZQorIGhhcmR3YXJlIHJlc3RyaWN0aW9uKS4gU28gbWFueSBwbGF5ZXJzIGJlY29tZSB0b25lIGRlYWZuZXNzLgorIFRvIHByZXZlbnQgdGhpcywgeW91IHNob3VsZCBleHByZXNzIHNvbWUgb3B0aW9ucyB0byB5b3VyIHNvdW5kIHBsYXllcgorIHRoYXQgc3BlY2lmeSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuIEZvciBleGFtcGxlLCB0byBwbGF5IHlvdXIgTVAzIGZpbGUKKyBjb3JyZWN0bHkgd2l0aCBtcGcxMjMsIHNwZWNpZnkgdGhlIGZyZXF1ZW5jeSBsaWtlIGZvbGxvd2luZzoKKworICAlICBtcGcxMjMgLXIgMjE3MzkgZm9vLm1wMworCisKK1NQRElGIE9VVAorPT09PT09PT09CisKKyAgV2l0aCBpbnN0YWxsaW5nIG1vZHVsZXMgd2l0aCBvcHRpb24gJ3NwZGlmX291dD0xJywgeW91IGNhbiBlbmpveSB5b3VyCisgc291bmRzIGZyb20gU1BESUYtb3V0IG9mIHlvdXIgY2FyZCAoaWYgaXQgaGFkKS4KKyBJdHMgRnMgaXMgZml4ZWQgdG8gNDhrSHogKEl0IG5ldmVyIG1lYW5zIHRoZSBzYW1wbGUgZnJlcXVlbmN5IGJlY29tZSAKKyB1cCB0byA0OGtIei4gQWxsIHNvdW5kcyB2aWEgU1BESUYtb3V0IGFsc28gMjJrSHogc2FtcGxlcykuIFNvIHlvdXIKKyBkaWdpdGFsLWluIGNhcGFibGUgY29tcG9uZW50cyBoYXMgdG8gYmUgYWJsZSB0byBoYW5kbGUgNDhrSHogRnMuCisKKworQ09QWUlORworPT09PT09PQorCisgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKworVE9ETworPT09PQorICogc3VwcG9ydCBmb3IgbXVsdGlwbGUgY2FyZHMKKyAgIChzZXQgdGhlIGRpZmZlcmVudCBTQl9JTyxNUFVfSU8sT1BMX0lPIGZvciBlYWNoIGNhcmRzKQorCisgKiBzdXBwb3J0IGZvciBPUEwgKGRtZm0pIDogVGhlcmUgd2lsbCBiZSBubyByZXF1aXJlbWVudHMuLi4gOi08CisKKworQVVUSE9SCis9PT09PT0KKworIERhaXN1a2UgTmFnYW5vIDxicmVlemUubmFnYW5vQG5pZnR5Lm5lLmpwPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Tb3VuZFBybyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kUHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGRiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Tb3VuZFBybwpAQCAtMCwwICsxLDEwNSBAQAorRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdW5kUHJvIENNSTgzMzAgZXh0ZW5zaW9ucyBpbiB0aGUgV1NTIGRyaXZlciAoYWQxODQ4Lm8pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKCBCZSBzdXJlIHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvQ01JODMzMCB0b28gKQorCitJb24gQmFkdWxlc2N1LCBpb251dEBjcy5jb2x1bWJpYS5lZHUKK0ZlYnJ1YXJ5IDI0LCAxOTk5CisKKyhkZXJpdmVkIGZyb20gdGhlIE9QTDMtU0EyIGRvY3VtZW50YXRpb24gYnkgU2NvdHQgTXVycmF5KQorCitUaGUgU291bmRQcm8gQ01JODMzMCAoSVNBKSBpcyBhIGNoaXAgdXN1YWxseSBmb3VuZCBvbiBzb21lIFRhaXdhbmVzZQorbW90aGVyYm9hcmRzLiAgVGhlIG9mZmljaWFsIG5hbWUgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgQ01JODMzMCwgU291bmRQcm8KK2lzIHRoZSBuaWNrbmFtZSBhbmQgdGhlIGJpZyBpbnNjcmlwdGlvbiBvbiB0aGUgY2hpcCBpdHNlbGYuCisKK1RoZSBjaGlwIGVtdWxhdGVzIGEgV1NTIGFzIHdlbGwgYXMgYSBTQjE2LCBidXQgaXQgaGFzIGNlcnRhaW4gZGlmZmVyZW5jZXMKK2luIHRoZSBtaXhlciBzZWN0aW9uIHdoaWNoIHJlcXVpcmUgc2VwYXJhdGUgc3VwcG9ydC4gSXQgYWxzbyBlbXVsYXRlcyBhbgorTVBVNDAxIGFuZCBhbiBPUEwzIHN5bnRoZXNpemVyLCBzbyB5b3UgcHJvYmFibHkgd2FudCB0byBlbmFibGUgc3VwcG9ydAorZm9yIHRoZXNlLCB0b28uCisKK1RoZSBjaGlwIGlkZW50aWZpZXMgaXRzZWxmIGFzIGFuIEFEMTg0OCwgYnV0IGl0cyBtaXhlciBpcyBzaWduaWZpY2FudGx5Cittb3JlIGFkdmFuY2VkIHRoYW4gdGhlIG9yaWdpbmFsIEFEMTg0OCBvbmUuIElmIHlvdXIgc3lzdGVtIHdvcmtzIHdpdGgKK2VpdGhlciBXU1Mgb3IgU0IxNiBhbmQgeW91IGFyZSBoYXZpbmcgcHJvYmxlbXMgd2l0aCBzb21lIG1peGVyIGNvbnRyb2xzCisobm8gQ0QgYXVkaW8sIG5vIGxpbmUtaW4sIGV0YyksIHlvdSBtaWdodCB3YW50IHRvIGdpdmUgdGhpcyBkcml2ZXIgYSB0cnkuCitEZXRlY3Rpb24gc2hvdWxkIHdvcmssIGJ1dCBpdCBoYXNuJ3QgYmVlbiB3aWRlbHkgdGVzdGVkLCBzbyBpdCBtaWdodCBzdGlsbAorbWlzLWlkZW50aWZ5IHRoZSBjaGlwLiBZb3UgY2FuIHN0aWxsIGZvcmNlIHNvdW5kcHJvPTEgaW4gdGhlIG1vZHByb2JlCitwYXJhbWV0ZXJzIGZvciBhZDE4NDguIFBsZWFzZSBsZXQgbWUga25vdyBpZiBpdCBoYXBwZW5zIHRvIHlvdSwgc28gSSBjYW4KK2FkanVzdCB0aGUgZGV0ZWN0aW9uIHJvdXRpbmUuCisKK1RoZSBjaGlwIGlzIGNhcGFibGUgb2YgZG9pbmcgZnVsbC1kdXBsZXgsIGJ1dCBzaW5jZSB0aGUgZHJpdmVyIHNlZXMgaXQgYXMgYW4KK0FEMTg0OCwgaXQgY2Fubm90IHRha2UgYWR2YW50YWdlIG9mIHRoaXMuICBNb3Jlb3ZlciwgdGhlIGZ1bGwtZHVwbGV4IG1vZGUgaXMKK25vdCBhY2hpZXZhYmxlIHRocm91Z2ggdGhlIFdTUyBpbnRlcmZhY2UsIGIvYyBpdCBuZWVkcyBhIGRtYTE2IGxpbmUgd2hpY2ggaXMKK2Fzc2lnbmVkIG9ubHkgdG8gdGhlIFNCMTYgc3ViZGV2aWNlICh3aXRoIGlzYXBucCkuIFdpbmRvd3MgZG9jdW1lbnRhdGlvbgorc2F5cyB0aGUgdXNlciBtdXN0IHVzZSBXU1MgUGxheWJhY2sgYW5kIFNCMTYgUmVjb3JkaW5nIGZvciBmdWxsLWR1cGxleCwgc28KK2l0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGRvIHRoZSBzYW1lIHRoaW5nIHVuZGVyIExpbnV4LiBZb3UgY2FuIHRyeSBsb2FkaW5nCit1cCBib3RoIGFkMTg0OCBhbmQgc2IgdGhlbiB1c2Ugb25lIGZvciBwbGF5YmFjayBhbmQgdGhlIG90aGVyIGZvcgorcmVjb3JkaW5nLiBJIGRvbid0IGtub3cgaWYgdGhpcyB3b3JrcywgYi9jIEkgaGF2ZW4ndCB0ZXN0ZWQgaXQuIEFueXdheSwgaWYKK3lvdSB0cnkgaXQsIGJlIHZlcnkgY2FyZWZ1bDogdGhlIFNCMTYgbWl4ZXIgKm1vc3RseSogd29ya3MsIGJ1dCBjZXJ0YWluCitzZXR0aW5ncyBjYW4gaGF2ZSB1bmV4cGVjdGVkIGVmZmVjdHMuIFVzZSB0aGUgV1NTIG1peGVyIGZvciBiZXN0IHJlc3VsdHMuCisKK1RoZXJlIGlzIGFsc28gYSBQQ0kgU291bmRQcm8gY2hpcC4gSSBoYXZlIG5vdCBzZWVuIHRoaXMgY2hpcCwgc28gSSBoYXZlCitubyBpZGVhIGlmIHRoZSBkcml2ZXIgd2lsbCB3b3JrIHdpdGggaXQuIEkgc3VzcGVjdCBpdCB3b24ndC4KKworQXMgd2l0aCBQblAgY2FyZHMsIHNvbWUgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZC4gIFRoZXJlIGFyZSB0d28gd2F5cworb2YgZG9pbmcgdGhpcy4gIFRoZSBtb3N0IGNvbW1vbiBpcyB0byB1c2UgdGhlIGlzYXBucHRvb2xzIHBhY2thZ2UgdG8KK2luaXRpYWxpemUgdGhlIGNhcmQsIGFuZCB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgZm9ybSBvZiB0aGUgc291bmQKK3N1YnN5c3RlbSBhbmQgc291bmQgZHJpdmVycy4gIEFsdGVybmF0aXZlbHksIHNvbWUgQklPUydzIGFsbG93IG1hbnVhbAorY29uZmlndXJhdGlvbiBvZiBpbnN0YWxsZWQgUG5QIGRldmljZXMgaW4gYSBCSU9TIG1lbnUsIHdoaWNoIHNob3VsZAorYWxsb3cgdXNpbmcgdGhlIG5vbi1tb2R1bGFyIHNvdW5kIGRyaXZlcnMsIGkuZS4gYnVpbHQgaW50byB0aGUga2VybmVsLgorU2luY2UgaW4gdGhpcyBsYXR0ZXIgY2FzZSB5b3UgY2Fubm90IHVzZSBtb2R1bGUgcGFyYW1ldGVycywgeW91IHdpbGwKK2hhdmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTb3VuZFBybyBhdCBjb21waWxlIHRpbWUuCisKK1RoZSBJUlEgYW5kIERNQSB2YWx1ZXMgY2FuIGJlIGFueSB0aGF0IGFyZSBjb25zaWRlcmVkIGFjY2VwdGFibGUgZm9yIGEKK1dTUy4gIEFzc3VtaW5nIHlvdSd2ZSBnb3QgaXNhcG5wIGFsbCBoYXBweSwgdGhlbiB5b3Ugc2hvdWxkIGJlIGFibGUgdG8KK2RvIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgKHdoaWNoICptdXN0KiBtYXRjaCB0aGUgaXNhcG5wL0JJT1MKK2NvbmZpZ3VyYXRpb24pOgorCittb2Rwcm9iZSBhZDE4NDggaW89MHg1MzAgaXJxPTExIGRtYT0wIHNvdW5kcHJvPTEKKy1hbmQgbWF5YmUtCittb2Rwcm9iZSBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj01CisKKy10aGVuLQorbW9kcHJvYmUgbXB1NDAxIGlvPTB4MzMwIGlycT05Cittb2Rwcm9iZSBvcGwzIGlvPTB4Mzg4CisKK0lmIGFsbCBnb2VzIHdlbGwgYW5kIHlvdSBzZWUgbm8gZXJyb3IgbWVzc2FnZXMsIHlvdSBzaG91bGQgYmUgYWJsZSB0bworc3RhcnQgdXNpbmcgdGhlIHNvdW5kIGNhcGFiaWxpdGllcyBvZiB5b3VyIHN5c3RlbS4gIElmIHlvdSBnZXQgYW4KK2Vycm9yIG1lc3NhZ2Ugd2hpbGUgdHJ5aW5nIHRvIGluc2VydCB0aGUgbW9kdWxlKHMpLCB0aGVuIG1ha2UKK3N1cmUgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSB2YXJpb3VzIGFyZ3VtZW50cyBtYXRjaCB3aGF0IHlvdSBzcGVjaWZpZWQKK2luIHlvdXIgaXNhcG5wIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHRoYXQgdGhlcmUgaXMgbm8gY29uZmxpY3Qgd2l0aAorYW5vdGhlciBkZXZpY2UgZm9yIGFuIEkvTyBwb3J0IG9yIGludGVycnVwdC4gIENoZWNraW5nIHRoZSBjb250ZW50cyBvZgorL3Byb2MvaW9wb3J0cyBhbmQgL3Byb2MvaW50ZXJydXB0cyBjYW4gYmUgdXNlZnVsIHRvIHNlZSBpZiB5b3UncmUKK2J1dHRpbmcgaGVhZHMgd2l0aCBhbm90aGVyIGRldmljZS4KKworSWYgeW91IGRvIG5vdCBzZWUgdGhlIGNoaXBzZXQgdmVyc2lvbiBtZXNzYWdlLCBhbmQgbm9uZSBvZiB0aGUgb3RoZXIKK21lc3NhZ2VzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBsb2cgYXJlIGhlbHBmdWwsIHRyeSBhZGRpbmcgJ2RlYnVnPTEnCit0byB0aGUgYWQxODQ4IHBhcmFtZXRlcnMsIGVtYWlsIG1lIHRoZSBzeXNsb2cgcmVzdWx0cyBhbmQgSSdsbCBkbworbXkgYmVzdCB0byBoZWxwLiAKKworTGFzdGx5LCBpZiB5b3UncmUgdXNpbmcgbW9kdWxlcyBhbmQgd2FudCB0byBzZXQgdXAgYXV0b21hdGljIG1vZHVsZQorbG9hZGluZyB3aXRoIGttb2QsIHRoZSBrZXJuZWwgbW9kdWxlIGxvYWRlciwgaGVyZSBpcyB0aGUgc2VjdGlvbiBJCitjdXJyZW50bHkgdXNlIGluIG15IGNvbmYubW9kdWxlcyBmaWxlOgorCisjIFNvdW5kCitwb3N0LWluc3RhbGwgc291bmQgbW9kcHJvYmUgLWsgYWQxODQ4OyBtb2Rwcm9iZSAtayBtcHU0MDE7IG1vZHByb2JlIC1rIG9wbDMKK29wdGlvbnMgYWQxODQ4IGlvPTB4NTMwIGlycT0xMSBkbWE9MAorb3B0aW9ucyBzYiBpbz0weDIyMCBpcnE9NSBkbWE9MSBkbWExNj01CitvcHRpb25zIG1wdTQwMSBpbz0weDMzMCBpcnE9OQorb3B0aW9ucyBvcGwzIGlvPTB4Mzg4CisKK1RoZSBhYm92ZSBlbnN1cmVzIHRoYXQgYWQxODQ4IHdpbGwgYmUgbG9hZGVkIHdoZW5ldmVyIHRoZSBzb3VuZCBzeXN0ZW0KK2lzIGJlaW5nIHVzZWQuCisKK0dvb2QgbHVjay4KKworSW9uCisKK05PVCBSRUFMTFkgVEVTVEVEOgorLSByZWNvcmRpbmcKKy0gcmVjb3JkaW5nIGRldmljZSBzZWxlY3Rpb24KKy0gZnVsbC1kdXBsZXgKKworVE9ETzoKKy0gaW1wbGVtZW50IG1peGVyIHN1cHBvcnQgZm9yIHN1cnJvdW5kLCBsb3VkLCBkaWdpdGFsIENEIHN3aXRjaGVzLgorLSBjb21lIHVwIHdpdGggYSBzY2hlbWUgd2hpY2ggYWxsb3dzIHJlY29yZGluZyB2b2x1bWVzIGZvciBlYWNoIHN1YmRldmljZS4KK1RoaXMgaXMgYSBtYWpvciBPU1MgQVBJIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kYmxhc3RlciBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1NvdW5kYmxhc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjg4ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvU291bmRibGFzdGVyCkBAIC0wLDAgKzEsNTMgQEAKK21vZHByb2JlIHNvdW5kCitpbnNtb2QgdWFydDQwMQoraW5zbW9kIHNiIC4uLgorCitUaGlzIGxvYWRzIHRoZSBkcml2ZXIgZm9yIHRoZSBTb3VuZCBCbGFzdGVyIGFuZCBhc3NvcnRlZCBjbG9uZXMuIENhcmRzIHRoYXQKK2FyZSBjb3ZlcmVkIGJ5IG90aGVyIGRyaXZlcnMgc2hvdWxkIG5vdCBiZSB1c2luZyB0aGlzIGRyaXZlci4KKworVGhlIFNvdW5kIEJsYXN0ZXIgbW9kdWxlIHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzCisKK2lvCQlJL08gYWRkcmVzcyBvZiB0aGUgU291bmQgQmxhc3RlciBjaGlwICgweDIyMCwweDI0MCwweDI2MCwweDI4MCkKK2lycQkJSVJRIG9mIHRoZSBTb3VuZCBCbGFzdGVyIGNoaXAgKDUsNyw5LDEwKQorZG1hCQk4LWJpdCBETUEgY2hhbm5lbCBmb3IgdGhlIFNvdW5kIEJsYXN0ZXIgKDAsMSwzKQorZG1hMTYJCTE2LWJpdCBETUEgY2hhbm5lbCBmb3IgU0IxNiBhbmQgZXF1aXZhbGVudCBjYXJkcyAoNSw2LDcpCittcHVfaW8JCUkvTyBmb3IgTVBVIGNoaXAgaWYgcHJlc2VudCAoMHgzMDAsMHgzMzApCisKK3NtX2dhbWVzPTEJU2V0IGlmIHlvdSBoYXZlIGEgTG9naXRlY2ggc291bmRtYW4gZ2FtZXMKK2FjZXI9MQkJU2V0IHRoaXMgdG8gZGV0ZWN0IGNhcmRzIGluIHNvbWUgQUNFUiBub3RlYm9va3MKK213YXZlX2J1Zz0xCVNldCBpZiB5b3UgYXJlIHRyeWluZyB0byB1c2UgdGhpcyBkcml2ZXIgd2l0aCBtd2F2ZSAoc2VlIG9uKQordHlwZQkJVXNlIHRoaXMgdG8gc3BlY2lmeSBhIHNwZWNpZmljIGNhcmQgdHlwZQorCitUaGUgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgdGFrZW4gaWYgSVNBUG5QIHN1cHBvcnQgaXMgY29tcGlsZWQgaW4KKworaXNhcG5wPTAJU2V0IHRoaXMgdG8gZGlzYWJsZSBJU0FQblAgZGV0ZWN0aW9uICh1c2UgaW89MHhYWFggZXRjLiBhYm92ZSkKK211bHRpcGxlPTAJU2V0IHRvIGRpc2FibGUgZGV0ZWN0aW9uIG9mIG11bHRpcGxlIFNvdW5kYmxhc3RlciBjYXJkcy4KKwkJQ29uc2lkZXIgaXQgYSBidWcgaWYgdGhpcyBvcHRpb24gaXMgbmVlZGVkLCBhbmQgc2VuZCBpbiBhCisJCXJlcG9ydC4KK3BucGxlZ2FjeT0xCVNldCB0aGlzIHRvIGJlIGFibGUgdG8gdXNlIGEgUG5QIGNhcmQocykgYWxvbmcgd2l0aCBhIHNpbmdsZQorCQlub24tUG5QIChsZWdhY3kpIGNhcmQuICBBYm92ZSBvcHRpb25zIGZvciBpbywgaXJxLCBldGMuIGFyZQorCQluZWVkZWQsIGFuZCB3aWxsIGFwcGx5IG9ubHkgdG8gdGhlIGxlZ2FjeSBjYXJkLgorcmV2ZXJzZT0xCVJldmVyc2VzIHRoZSBvcmRlciBvZiB0aGUgc2VhcmNoIGluIHRoZSBQblAgdGFibGUuCit1YXJ0NDAxPTEJU2V0IHRvIGVuYWJsZSBkZXRlY3Rpb24gb2YgbXB1IGRldmljZXMgb24gc29tZSBjbG9uZXMuCitpc2FwbnBqdW1wPW4JSnVtcHMgdG8gc2xvdCBuIGluIHRoZSBkcml2ZXIncyBQblAgdGFibGUuIFVzZSB0aGUgc291cmNlLAorCQlMdWtlLgorCitZb3UgbWF5IHdlbGwgd2FudCB0byBsb2FkIHRoZSBvcGwzIGRyaXZlciBmb3Igc3ludGggbXVzaWMgb24gbW9zdCBTQiBhbmQKK2Nsb25lIFNCIGRldmljZXMKKworaW5zbW9kIG9wbDMgaW89MHgzODgKKworVXNpbmcgTXdhdmUKKworVG8gbWFrZSB0aGlzIGRyaXZlciB3b3JrIHdpdGggTXdhdmUgeW91IG11c3Qgc2V0IG13YXZlX2J1Zy4gWW91IGFsc28gbmVlZAordG8gd2FybSBib290IGZyb20gRE9TL1dpbmRvd3Mgd2l0aCB0aGUgcmVxdWlyZWQgZmlybXdhcmUgbG9hZGVkIHVuZGVyIHRoaXMKK09TLiBJQk0gYXJlIGJlaW5nIGRpZmZpY3VsdCBhYm91dCBkb2N1bWVudGluZyBob3cgdG8gbG9hZCB0aGlzIGZpcm13YXJlLgorCitBdmFuY2UgTG9naWMgQUxTMDA3CisKK1RoaXMgY2FyZCBpcyBzdXBwb3J0ZWQ7IHNlZSB0aGUgc2VwYXJhdGUgZmlsZSBBTFMwMDcgZm9yIGZ1bGwgZGV0YWlscy4KKworQXZhbmNlIExvZ2ljIEFMUzEwMAorCitUaGlzIGNhcmQgaXMgc3VwcG9ydGVkOyBzZXR1cCBzaG91bGQgYmUgYXMgZm9yIGEgc3RhbmRhcmQgU291bmQgQmxhc3RlciAxNi4KK1RoZSBkcml2ZXIgd2lsbCBpZGVudGlmeSB0aGUgYXVkaW8gZGV2aWNlIGFzIGEgIlNvdW5kIEJsYXN0ZXIgMTYgKEFMUy0xMDApIi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1Ryb3BleisgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2E2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb206IFBhdWwgQmFydG9uLURhdmlzIDxwYmRAb3AubmV0PgorCitIZXJlIGlzIHRoZSBjb25maWd1cmF0aW9uIEkgdXNlIHdpdGggYSBUcm9wZXorIGFuZCBteSBtb2R1bGFyCitkcml2ZXI6CisKKyAgYWxpYXMgY2hhci1tYWpvci0xNCB3YXZlZnJvbnQKKyAgYWxpYXMgc3ludGgwIHdhdmVmcm9udAorICBhbGlhcyBtaXhlcjAgY3M0MjMyCisgIGFsaWFzIGF1ZGlvMCBjczQyMzIKKyAgcHJlLWluc3RhbGwgd2F2ZWZyb250IG1vZHByb2JlICItayIgImNzNDIzMiIKKyAgcG9zdC1pbnN0YWxsIHdhdmVmcm9udCBtb2Rwcm9iZSAiLWsiICJvcGwzIgorICBvcHRpb25zIHdhdmVmcm9udCBpbz0weDIwMCBpcnE9OQorICBvcHRpb25zIGNzNDIzMiBzeW50aGlycT05IHN5bnRoaW89MHgyMDAgaW89MHg1MzAgaXJxPTUgZG1hPTEgZG1hMj0wCisgIG9wdGlvbnMgb3BsMyBpbz0weDM4OAorCitUaGluZ3MgdG8gbm90ZTogCisKKyAgICAgICB0aGUgd2F2ZWZyb250IG9wdGlvbnMgImlvIiBhbmQgImlycSIgKioqTVVTVCoqKiBtYXRjaCB0aGUgInN5bnRoaW8iCisgICAgICAgYW5kICJzeW50aGlycSIgY3M0MjMyIG9wdGlvbnMuCisKKyAgICAgICB5b3UgY2FuIGRvIHdpdGhvdXQgdGhlIG9wbDMgbW9kdWxlIGlmIHlvdSBkb24ndAorICAgICAgIHdhbnQgdG8gdXNlIHRoZSBPUEwvWzM0XSBzeW50aCBvbiB0aGUgc291bmRjYXJkCisKKyAgICAgICB0aGUgb3BsMyBpbyBwYXJhbWV0ZXIgaXMgY29udmVudGlvbmFsbHkgbm90IGFkanVzdGFibGUuCisKK1BsZWFzZSBzZWUgZHJpdmVycy9zb3VuZC9SRUFETUUud2F2ZWZyb250IGZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUEtY2hpcHNldCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQS1jaGlwc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ODY1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUEtY2hpcHNldApAQCAtMCwwICsxLDQzIEBACitSdW5uaW5nIHNvdW5kIGNhcmRzIG9uIFZJQSBjaGlwc2V0cworCitvCVRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIFZJQSBjaGlwc2V0cyBhbmQgc291bmQgY2FyZHMgdGhhdCBhcHBlYXIgdG8KKwlsb2NrIHRoZSBoYXJkd2FyZSBzb2xpZGx5LiBUZXN0IHByb2dyYW1zIHVuZGVyIERPUyBoYXZlIHZlcmlmaWVkIHRoZQorCXByb2JsZW0gZXhpc3RzIG9uIGF0IGxlYXN0IHNvbWUgKGJ1dCBhcHBhcmVudGx5IG5vdCBhbGwpIFZJQSBib2FyZHMKKworbwlWSUEgaGF2ZSBzbyBmYXIgZmFpbGVkIHRvIGJvdGhlciB0byBhbnN3ZXIgc3VwcG9ydCBtYWlsIG9uIHRoZSBzdWJqZWN0CisJc28gaWYgeW91IGFyZSBhIFZJQSBlbmdpbmVlciBmZWVsaW5nIGFnZ3JpZXZlZCBhcyB5b3UgcmVhZCB0aGlzIAorCWRvY3VtZW50IGdvIGNoYXNlIHlvdXIgb3duIHBlb3BsZS4gSWYgdGhlcmUgaXMgYSB3b3JrYXJvdW5kIHBsZWFzZQorCWxldCB1cyBrbm93IHNvIHdlIGNhbiBpbXBsZW1lbnQgaXQuCisKKworQ2VydGFpbiBwYXR0ZXJucyBvZiBJU0EgRE1BIGFjY2VzcyB1c2VkIGZvciBtb3N0IFBDIHNvdW5kIGNhcmRzIGNhdXNlIHRoZQorVklBIGNoaXBzZXRzIHRvIGxvY2sgdXAuIEZyb20gdGhlIGNvbGxlY3RlZCByZXBvcnRzIHRoaXMgYXBwZWFycyB0byBjb3ZlciBhCit3aWRlIHJhbmdlIG9mIGJvYXJkcy4gU29tZSBhbHNvIGxvY2sgdXAgd2l0aCBzb3VuZCBjYXJkcyB1bmRlciBXaW4qIGFzIHdlbGwuCisKK0xpbnV4IGltcGxlbWVudHMgYSB3b3JrYXJvdW5kIHByb3ZpZGluZyB5b3VyIGNoaXBzZXQgaXMgUENJIGFuZCB5b3UgY29tcGlsZWQKK3dpdGggUENJIFF1aXJrcyBlbmFibGVkLiBJZiBzbyB5b3Ugd2lsbCBzZWUgYSBtZXNzYWdlCisJIkFjdGl2YXRpbmcgSVNBIERNQSBidWcgd29ya2Fyb3VuZHMiCisKK2R1cmluZyBib290aW5nLiBJZiB5b3UgaGF2ZSBhIFZJQSBQQ0kgY2hpcHNldCB0aGF0IGhhbmdzIHdoZW4geW91IHVzZSB0aGUKK3NvdW5kIGFuZCBpcyBub3QgZ2VuZXJhdGluZyB0aGlzIG1lc3NhZ2UgZXZlbiB3aXRoIFBDSSBxdWlya3MgZW5hYmxlZAorcGxlYXNlIHJlcG9ydCB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIGxpbnV4LWtlcm5lbCBsaXN0IChzZWUgUkVQT1JUSU5HLUJVR1MpLgorCitJZiB5b3UgYXJlIG9uZSBvZiB0aGUgdGlueSBudW1iZXIgb2YgdW5mb3J0dW5hdGVzIHdpdGggYSA0ODYgSVNBL1ZMQiBWSUEKK2NoaXBzZXQgYm9hcmQgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0byBidWlsZCBhIHNwZWNpYWwga2VybmVsIGZvcgoreW91ciBib2FyZAorCisJZWRpdCBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCisKK2NoYW5nZQorCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5IAkoMCkKKwordG8KKworI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAJKDEpCisKK2FuZCByZWJ1aWxkIGEga2VybmVsIHdpdGhvdXQgUENJIHF1aXJrIHN1cHBvcnQuCisKKworT3RoZXIgdGhhbiB0aGlzIHBhcnRpY3VsYXIgZ2xpdGNoIHRoZSBWSUEgW01dVlAqIGNoaXBzZXRzIGFwcGVhciB0byB3b3JrCitwZXJmZWN0bHkgd2l0aCBMaW51eC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1ZJQlJBMTYgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUJSQTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTVhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9WSUJSQTE2CkBAIC0wLDAgKzEsODAgQEAKK1NvdW5kIEJsYXN0ZXIgMTZYIFZpYnJhIGFkZGVuZHVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYnkgTWFyaXVzIElsaW9hZWEgPG1hcml1c2lAcHJvdHYucm8+CisgICBTdGVmYW4gTGF1ZGF0ICA8c3RlZmFuQGFzaXQucm8+CisKK1NhdCBNYXIgNiAyMzo1NToyNyBFRVQgMTk5OQorCisJCQlIZWxsbyBhZ2FpbiwKKwkKKwlQbGF5aW5nIHdpdGggYSBTQiBWaWJyYSAxNnggc291bmRjYXJkIHdlIGZvdW5kIGl0IHZlcnkgZGlmZmljdWx0Cit0byBzZXR1cCBiZWNhdXNlIHRoZSBrZXJuZWwgcmVwb3J0ZWQgYSBsb3Qgb2YgRE1BIGVycm9ycyBhbmQgd291bGRuJ3QKK3NpbXBseSBwbGF5IGFueSBzb3VuZC4KKwlBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCB0aGUgdmlicmExNnggY2hpcCBmdWxsLWR1cGxleCBmYWNpbGl0eQoraXMgbmVpdGhlciBzdGlsbCBleHBsb2l0ZWQgYnkgdGhlIHNiIGRyaXZlciBmb3VuZCBpbiB0aGUgbGludXgga2VybmVsIAorKHRyaWVkIGl0IHdpdGggYSAyLjIuMi1hYzcpLCBub3IgaW4gdGhlIGNvbW1lcmNpYWwgT1NTIHBhY2thZ2UgKGl0IHJlcG9ydHMKK2l0IGFzIGhhbGYtZHVwbGV4IHNvdW5kY2FyZCkuIE9oLCBJIGFsbW9zdCBmb3Jnb3QsIHRoZSBSZWRIYXQgc25kY29uZmlnCitmYWlsZWQgZGV0ZWN0aW5nIGl0IDspCisJU28sIHRoZSBiaWcgcHJvYmxlbSBzdGlsbCByZW1haW5zLCBiZWNhdXNlIHRoZSBzYiBtb2R1bGUgd2FudHMgYQorOC1iaXQgYW5kIGEgMTYtYml0IGRtYSwgd2hpY2ggd2UgY291bGQgbm90IGFsbG9jYXRlIGZvciB2aWJyYS4uLiBpdCBzdXBwb3J0cworb25seSB0d28gOC1iaXQgZG1hIGNoYW5uZWxzLCB0aGUgc2Vjb25kIG9uZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbW9kdWxlCithcyBhIDE2IGJpdCBjaGFubmVsLCB0aGUga2VybmVsIHdpbGwgeWllbGQgYWJvdXQgdGhhdCBidXQgZXZlcnl0aGluZyB3aWxsCitiZSBva2F5LCB0cnVzdCB1cy4gCisJVGhlIG9ubHkgaW5jb252ZW5pZW50IHlvdSBtYXkgZmluZCBpcyB0aGF0IHlvdSB3aWxsIGhhdmUKK3NvbWUgc291bmQgcGxheWluZyBqaXR0ZXJzIGlmIHlvdSBoYXZlIEhERCBkbWEgc3VwcG9ydCBlbmFibGVkIC0gYnV0IHRoaXMKK3dpbGwgaGFwcGVuIHdpdGggYWxtb3N0IGFsbCBzb3VuZGNhcmRzLi4uCisKKwlBIGZ1bGx5IHdvcmtpbmcgaXNhcG5wLmNvbmYgaXMganVzdCBoZXJlOgorCis8c25pcCBoZXJlPgorCisoUkVBRFBPUlQgMHgwMjAzKQorKElTT0xBVEUgUFJFU0VSVkUpCisoSURFTlRJRlkgKikKKyhWRVJCT1NJVFkgMikKKyhDT05GTElDVCAoSU8gRkFUQUwpKElSUSBGQVRBTCkoRE1BIEZBVEFMKShNRU0gRkFUQUwpKSAjIG9yIFdBUk5JTkcKKyMgU0IgMTYgYW5kIE9QTDMgZGV2aWNlcworKENPTkZJR1VSRSBDVEwwMGYwLy0xIChMRCAwCisoSU5UIDAgKElSUSA1IChNT0RFICtFKSkpCisoRE1BIDAgKENIQU5ORUwgMSkpCisoRE1BIDEgKENIQU5ORUwgMykpCisoSU8gMCAoU0laRSAxNikgKEJBU0UgMHgwMjIwKSkKKyhJTyAyIChTSVpFIDQpIChCQVNFIDB4MDM4OCkpCisoTkFNRSAiQ1RMMDBmMC8tMVswXXtBdWRpbyAgICAgICAgICAgICAgIH0iKQorKEFDVCBZKQorKSkKKworIyBKb3lzdGljayBkZXZpY2UgLSBvbmx5IGlmIHlvdSBuZWVkIGl0IDotLworCisoQ09ORklHVVJFIENUTDAwZjAvLTEgKExEIDEKKyhJTyAwIChTSVpFIDEpIChCQVNFIDB4MDIwMCkpCisoTkFNRSAiQ1RMMDBmMC8tMVsxXXtHYW1lICAgICAgICAgICAgICAgIH0iKQorKEFDVCBZKQorKSkKKyhXQUlURk9SS0VZKQorCis8ZW5kIG9mIHNuaXBwaW5nPgorCisJU28sIGFmdGVyIGEgZ29vZCBrZXJuZWwgbW9kdWxlcyBjb21waWxhdGlvbiBhbmQgYSAnZGVwbW9kIC1hIGtlcm5lbF92ZXInCit5b3UgbWF5IHdhbnQgdG86CisKK21vZHByb2JlIHNiIGlvPTB4MjIwIGlycT01IGRtYT0xIGRtYTE2PTMKKworCU9yLCB0YWtlIHRoZSBoYXJkIHdheToKKworbW9kcHJvYmUgc291bmRjb3JlCittb2Rwcm9iZSBzb3VuZAorbW9kcHJvYmUgdWFydDQwMQorbW9kcHJvYmUgc2IgaW89MHgyMjAgaXJxPTUgZG1hPTEgZG1hMTY9MworIyBkbyB5b3UgbmVlZCBNSURJPworbW9kcHJvYmUgb3BsMz0weDM4OAorCisJSnVzdCBpbiBjYXNlLCB0aGUga2VybmVsIHNvdW5kIHN1cHBvcnQgc2hvdWxkIGJlOgorCitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TUz1tCitDT05GSUdfU09VTkRfU0I9bQorCQorCUVuam95IHlvdXIgbmV3IG5vaXN5IExpbnV4IGJveCEgOykKKwkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZUFydGlzdCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVBcnRpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmMzQwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVBcnRpc3QKQEAgLTAsMCArMSwxNzAgQEAKKworICh0aGUgZm9sbG93aW5nIGlzIGZyb20gdGhlIGFybWxpbnV4IENWUykKKworIFdhdmVBcnRpc3QgbWl4ZXIgYW5kIHZvbHVtZSBsZXZlbHMgY2FuIGJlIGFjY2Vzc2VkIHZpYSB0aGVzZSBjb21tYW5kczoKKworICBubjMwCXJlYWQgcmVnaXN0ZXJzIG5uLCB3aGVyZSBubiA9IDAwIC0gMDkgZm9yIG1peGVyIHNldHRpbmdzCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBhIC0gMTMgZm9yIGNoYW5uZWwgdm9sdW1lcworICBtbTMxCXdyaXRlIHRoZSB2b2x1bWUgc2V0dGluZyBpbiBwYWlycywgd2hlcmUgbW0gPSAobm4gLSAxMCkgLyAyCisgIHJyMzIJd3JpdGUgdGhlIG1peGVyIHNldHRpbmdzIGluIHBhaXJzLCB3aGVyZSByciA9IG5uLzIKKyAgeHgzMwlyZXNldCBhbGwgc2V0dGluZ3MgdG8gZGVmYXVsdAorICAweTM0CXNlbGVjdCBtb25vIHNvdXJjZSwgeT0wID0gbGVmdCwgeT0xID0gcmlnaHQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMKKyBubiAgMTUgIDE0IDEzIDEyIDExICAgMTAgICAgOSAgICAgOCAgICAgNyAgICA2ICAgICA1ICAgICA0ICAgICAzICAgICAyICAgICAxICAgICAwCistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwMCB8IDAgfCAwICAwICAxICAxIHwgbGVmdCBsaW5lIG1peGVyIGdhaW4gICAgICAgfCBsZWZ0IGF1eDEgbWl4ZXIgZ2FpbiAgICAgICAgfGxtdXRlfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDEgfCAwIHwgMCAgMSAgMCAgMSB8IGxlZnQgYXV4MiBtaXhlciBnYWluICAgICAgIHwgcmlnaHQgMiBsZWZ0IG1pYyBnYWluICAgICAgIHxtbXV0ZXwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDAyIHwgMCB8IDAgIDEgIDEgIDEgfCBsZWZ0IG1pYyBtaXhlciBnYWluICAgICAgICB8IGxlZnQgbWljICB8IGxlZnQgbWl4ZXIgZ2FpbiB8ZGl0aCB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwMyB8IDAgfCAxICAwICAwICAxIHwgbGVmdCBtaXhlciBpbnB1dCBzZWxlY3QgICAgICAgICAgICAgICAgfGxyZmcgfCBsZWZ0IEFEQyBnYWluICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDQgfCAwIHwgMSAgMCAgMSAgMSB8IHJpZ2h0IGxpbmUgbWl4ZXIgZ2FpbiAgICAgIHwgcmlnaHQgYXV4MSBtaXhlciBnYWluICAgICAgIHxybXV0ZXwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDA1IHwgMCB8IDEgIDEgIDAgIDEgfCByaWdodCBhdXgyIG1peGVyIGdhaW4gICAgICB8IGxlZnQgMiByaWdodCBtaWMgZ2FpbiAgICAgICB8dGVzdCB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwNiB8IDAgfCAxICAxICAxICAxIHwgcmlnaHQgbWljIG1peGVyIGdhaW4gICAgICAgfCByaWdodCBtaWMgfHJpZ2h0IG1peGVyIGdhaW4gfHJieXBzfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMDcgfCAxIHwgMCAgMCAgMCAgMSB8IHJpZ2h0IG1peGVyIHNlbGVjdCAgICAgICAgICAgICAgICAgICAgIHxycmZnIHwgcmlnaHQgQURDIGdhaW4gIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDA4IHwgMSB8IDAgIDAgIDEgIDEgfCBtb25vIG1peGVyIGdhaW4gICAgICAgICAgICB8cmlnaHQgQURDIG11eCBzZWx8bGVmdCBBREMgbXV4IHNlbCB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwOSB8IDEgfCAwICAxICAwICAxIHxsb29wYnxsZWZ0IGxpbm91dHxsb29wfEFEQ2NofFR4RmNofE9mZkNEfHRlc3QgfGxvb3BifGxvb3BifG9zYW1wfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMGEgfCAwIHwgbGVmdCBQQ00gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDBiIHwgMCB8IHJpZ2h0IFBDTSBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwYyB8IDAgfCBsZWZ0IEZNIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMGQgfCAwIHwgcmlnaHQgRk0gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDBlIHwgMCB8IGxlZnQgd2F2ZXRhYmxlIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAwZiB8IDAgfCByaWdodCB3YXZldGFibGUgY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMTAgfCAwIHwgbGVmdCBQQ00gZXhwYW5zaW9uIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworIDExIHwgMCB8IHJpZ2h0IFBDTSBleHBhbnNpb24gY2hhbm5lbCB2b2x1bWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tKy0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSsKKyAxMiB8IDAgfCBsZWZ0IEZNIGV4cGFuc2lvbiBjaGFubmVsIHZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLSstLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCisgMTMgfCAwIHwgcmlnaHQgRk0gZXhwYW5zaW9uIGNoYW5uZWwgdm9sdW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0rLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKworCisgbG11dGU6IGxlZnQgbXV0ZQorIG1tdXRlOiBtb25vIG11dGUKKyBkaXRoOiBkaXRoZHMKKyBscmZnOgorIHJtdXRlOiByaWdodCBtdXRlCisgcmJ5cHM6IHJpZ2h0IGJ5cGFzcworIHJyZmc6CisgQURDY2g6CisgVHhGY2g6CisgT2ZmQ0Q6Cisgb3NhbXA6CisKKyBBbmQgdGhlIGZvbGxvd2luZyBkaWFncmFtIGlzIGRlcml2ZWQgZnJvbSB0aGUgZGVzY3JpcHRpb24gaW4gdGhlIENWUyBhcmNoaXZlOgorCisgTUlDIEwgKG1vdXRocGllY2UpCisgICArLS0tLS0tKworIC0tPlByZUFtcD4tXAorICAgKy0tXi0tLSsgfAorICAgICAgfCAgICAgfAorICAgIHIyYjQtNSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tKworICAgICAgIC8tLS0tKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjUgICAgICAgfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgIHwgLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjQgICAgICAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgIHwgfCAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjMgMW9mNSAgfCAgKy0tLSsKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG11eCAgID4tLT5BTVA+LS0+IEFEQyBMCisgICAgICAgfCB8IHwgLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+MiAgICAgICB8ICArLV4tKworICAgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICB8CisgTGluZSAgfCB8IHwgfCArLS0tLSsgICstLS0tLS0rICArLS0tKyAgLy0tLS0+MSAgICAgICB8ICByM2IzLTAKKyAtLS0tLS0tLS0tLS0qLT5tdXRlPi0tPiBHYWluID4tLT4gICB8ICB8ICAgIHwgICAgICAgIHwKKyAgTCAgICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8ICAqLT4wICAgICAgIHwKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICstLS1eLS0tLSsKKyBBdXgyICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8ICAgICAgICB8CisgLS0tLS0tLS0tLSotLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IE0gfCAgfCAgICAgcjhiMC0yCisgIEwgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIFwtLS0tLS1cCisgQXV4MSAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAtLS0tLS0tLSotLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gSSB8ICAgICAgICAgfAorICBMICAgIHwgICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8ICAgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICArLS0tKyAgfAorICAgICAgICotLS0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBYID4tLT5BTVA+LS0qCisgICAgICAgfCAgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgKy1eLSsgIHwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgIHwgICAgfAorICAgICAgIHwgICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHIyYjEtMyB8ICAKKyAgICAgICB8IC8tLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gRSB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAvLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBSIHwgICAgICAgICB8CisgICAgICAgfCB8IHwgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfCAgIHI5YjgtOQorICAgICAgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8ICAgICB8CisgICAgICAgfCB8IHwgLy0+bXV0ZT4tLT4gR2FpbiA+LS0+ICAgfCAgICAgICAgIHwgKy0tLXYtLS0rCisgICAgICAgfCB8IHwgfCArLS0tLSsgICstLS0tLS0rICArLS0tKyAgICAgICAvLSotPjAgICAgICB8CisgREFDICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICB8CisgLS0tLS0tLS0tLS0tKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPj8gICAgICB8ICArLS0tLSsKKyAgTCAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICBNdXggID4tLT5tdXRlPi0tPiBMIG91dHB1dAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAvLT4/ICAgICAgfCAgKy0tXi0rCisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfCAgICAgICB8ICAgICB8CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLS0tLS0tLS0tPj8gICAgICB8ICAgcjBiMAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB8ICstLS0tLS0tKworICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCB8CisgTW9ubyAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHwgKy0tLS0tLS0rCisgLS0tLS0tLS0tLSogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBcLS0tPiAgICAgICB8ICArLS0tLSsKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCB8ICBNaXggID4tLT5tdXRlPi0tPiBNb25vIG91dHB1dAorICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAqLT4gICAgICAgfCAgKy0tXi0rCisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgKy0tLS0tLS0rICAgICB8CisgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgcjFiMAorIERBQyAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICstLS0tLS0tKworIC0tLS0tLS0tLS0tLSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0tLS0tLS0tLT4xICAgICAgfCAgKy0tLS0rCisgIFIgICAgfCB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgTXV4ICA+LS0+bXV0ZT4tLT4gUiBvdXRwdXQKKyAgICAgICB8IHwgfCB8ICstLS0tKyAgKy0tLS0tLSsgICstLS0rICAgICAgICAgKi0+MCAgICAgIHwgICstLV4tKworICAgICAgIHwgfCB8IFwtPm11dGU+LS0+IEdhaW4gPi0tPiAgIHwgICAgICAgICB8ICstLS1eLS0tKyAgICAgfAorICAgICAgIHwgfCB8ICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8ICAgICB8ICAgICAgIHI1YjAKKyAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfCAgIHI2YjAKKyAgICAgICB8IHwgfCAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCBcLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBNIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCAqLS0tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IEkgfCAgICAgICAgIHwKKyAgICAgICB8IHwgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICAgICAgICAgfAorICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICB8CisgICAgICAgfCB8ICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgKy0tLSsgIHwKKyAgICAgICBcLS0tLS0tLT5tdXRlPi0tPiBHYWluID4tLT4gWCA+LS0+QU1QPi0tKgorICAgICAgICAgfCAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgICstXi0rICB8CisgICAgICAvLS0vICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICB8ICAgIHwKKyBBdXgxIHwgICAgICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICByNmIxLTMgfAorIC0tLS0tLS0qLS0tLS0tPm11dGU+LS0+IEdhaW4gPi0tPiBFIHwgICAgICAgICB8CisgIFIgICB8IHwgICAgICArLS0tLSsgICstLS0tLS0rICB8ICAgfCAgICAgICAgIHwKKyAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgfAorIEF1eDIgfCB8ICAgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIC8tLS0tLS0vCisgLS0tLS0tLS0tKi0tLS0+bXV0ZT4tLT4gR2FpbiA+LS0+IFIgfCAgfAorICBSICAgfCB8IHwgICAgKy0tLS0rICArLS0tLS0tKyAgfCAgIHwgIHwKKyAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICstLS0tLS0tLSsKKyBMaW5lIHwgfCB8ICAgICstLS0tKyAgKy0tLS0tLSsgIHwgICB8ICB8ICAqLT4wICAgICAgIHwKKyAtLS0tLS0tLS0tLSotLT5tdXRlPi0tPiBHYWluID4tLT4gICB8ICB8ICAgIHwgICAgICAgIHwKKyAgUiAgIHwgfCB8IHwgICstLS0tKyAgKy0tLS0tLSsgICstLS0rICBcLS0tLT4xICAgICAgIHwKKyAgICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAgICAgIHwgfCB8IFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4yICAgICAgIHwgICstLS0rCisgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNdXggICA+LS0+QU1QPi0tPiBBREMgUgorICAgICAgfCB8IFwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjMgICAgICAgfCAgKy1eLSsKKyAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHwgICAgfAorICAgICAgfCBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjQgICAgICAgfCAgcjdiMy0wCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAgICBcLS0tLS0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+NSAgICAgICB8CisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tXi0tLS0rCisgICAgcjZiNC01ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByOGIzLTUKKyAgICstLXYtLS0rIHwKKyAtLT5QcmVBbXA+LS8KKyAgICstLS0tLS0rCisgTUlDIFIgKGVsZWN0cmV0IG1pYykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVmcm9udCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1dhdmVmcm9udApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY1N2VhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvV2F2ZWZyb250CkBAIC0wLDAgKzEsMzM5IEBACisJICAgICBBbiBPU1MvRnJlZSBEcml2ZXIgZm9yIFdhdmVGcm9udCBzb3VuZGNhcmRzCisJICAgICAgIChUdXJ0bGUgQmVhY2ggTWF1aSwgVHJvcGV6LCBUcm9wZXogUGx1cykKKworCQkgICAgIFBhdWwgQmFydG9uLURhdmlzLCBKdWx5IDE5OTgKKworCQkJICBWRVJTSU9OIDAuMi41CisKK0RyaXZlciBTdGF0dXMKKy0tLS0tLS0tLS0tLS0KKworUmVxdWlyZXM6IEtlcm5lbCAyLjEuMTA2IG9yIGxhdGVyICh0aGUgZHJpdmVyIGlzIGluY2x1ZGVkIHdpdGgga2VybmVscworMi4xLjEwOSBhbmQgYWJvdmUpCisJICAKK0FzIG9mIDcvMjIvMTk5OCwgdGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IGluICpCRVRBKiBzdGF0ZS4gVGhpcyBtZWFucwordGhhdCBpdCBjb21waWxlcyBhbmQgcnVucywgYW5kIHRoYXQgSSB1c2UgaXQgb24gbXkgc3lzdGVtIChMaW51eAorMi4xLjEwNikgd2l0aCBzb21lIHJlYXNvbmFibHkgZGVtYW5kaW5nIGFwcGxpY2F0aW9ucyBhbmQgdXNlcy4gIEkKK2JlbGlldmUgdGhlIGNvZGUgaXMgYXBwcm9hY2hpbmcgYW4gaW5pdGlhbCAiZmluaXNoZWQiIHN0YXRlIHRoYXQKK3Byb3ZpZGVzIGJ1Zy1mcmVlIHN1cHBvcnQgZm9yIHRoZSBUcm9wZXogUGx1cy4KKworUGxlYXNlIG5vdGUgdGhhdCB0byBkYXRlLCB0aGUgZHJpdmVyIGhhcyBPTkxZIGJlZW4gdGVzdGVkIG9uIGEgVHJvcGV6CitQbHVzLiBJIHdvdWxkIHZlcnkgbXVjaCBsaWtlIHRvIGhlYXIgKGFuZCBoZWxwIG91dCkgcGVvcGxlIHdpdGggVHJvcGV6CithbmQgTWF1aSBjYXJkcywgc2luY2UgSSB0aGluayB0aGUgZHJpdmVyIGNhbiBzdXBwb3J0IHRob3NlIGNhcmRzIGFzCit3ZWxsLiAKKworRmluYWxseSwgdGhlIGRyaXZlciBoYXMgbm90IGJlZW4gdGVzdGVkIChvciBldmVuIGNvbXBpbGVkKSBhcyBhIHN0YXRpYworKG5vbi1tb2R1bGFyKSBwYXJ0IG9mIHRoZSBrZXJuZWwuIEFsYW4gQ294J3MgZ29vZCB3b3JrIGluIG1vZHVsYXJpemluZworT1NTL0ZyZWUgZm9yIExpbnV4IG1ha2VzIHRoaXMgcmF0aGVyIHVubmVjZXNzYXJ5LgorCitTb21lIFF1ZXN0aW9ucworLS0tLS0tLS0tLS0tLS0KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorMCkgV2hhdCBkb2VzIHRoaXMgZHJpdmVyIGRvIHRoYXQgdGhlIG1hdWkgZHJpdmVyIGRpZCBub3QgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqIGNhbiBmdWxseSBpbml0aWFsaXplIGEgV2F2ZUZyb250IGNhcmQgZnJvbSBjb2xkIGJvb3QgLSBubyBET1MgCisgICAgICAgICAgdXRpbGl0aWVzIG5lZWRlZAorKiB3b3JraW5nIHBhdGNoL3NhbXBsZS9wcm9ncmFtIGxvYWRpbmcgYW5kIHVubG9hZGluZyAodGhlIG1hdWkKKyAgICAgIGRyaXZlciBkaWRuJ3QgZG9jdW1lbnQgaG93IHRvIG1ha2UgdGhpcyB3b3JrLCBhbmQgYXNzdW1lZAorICAgICAgdXNlci1sZXZlbCBwcmVwYXJhdGlvbiBvZiB0aGUgcGF0Y2ggZGF0YSBmb3Igd3JpdGluZworICAgICAgdG8gdGhlIGJvYXJkLiBpY2suKQorKiBmdWxsIHVzZXItbGV2ZWwgYWNjZXNzIHRvIGFsbCBXYXZlRnJvbnQgY29tbWFuZHMKKyogZm9yIHRoZSBUcm9wZXogUGx1cywgKHByaW1pdGl2ZSkgY29udHJvbCBvZiB0aGUgWVNTMjI1IEZYIHByb2Nlc3NvcgorKiBWaXJ0dWFsIE1JREkgbW9kZSBzdXBwb3J0ZWQgLSAyIE1JREkgZGV2aWNlcyBhY2Nlc3NpYmxlIHZpYSB0aGUKKyAgICAgICAgICBXYXZlRnJvbnQncyBNUFU0MDEvVUFSVCBlbXVsYXRpb24uIE9uZQorCSAgYWNjZXNzZXMgdGhlIFdhdmVGcm9udCBzeW50aCwgdGhlIG90aGVyIGFjY2Vzc2VzIHRoZQorCSAgZXh0ZXJuYWwgTUlESSBjb25uZWN0b3IuIEZ1bGwgTUlESSByZWFkL3dyaXRlIHNlbWFudGljcworCSAgZm9yIGJvdGggZGV2aWNlcy4KKyogT1NTLWNvbXBsaWFudCAvZGV2L3NlcXVlbmNlciBpbnRlcmZhY2UgZm9yIHRoZSBXYXZlRnJvbnQgc3ludGgsCisJICBpbmNsdWRpbmcgbmF0aXZlIGFuZCBHVVMtZm9ybWF0IHBhdGNoIGRvd25sb2FkaW5nLgorKiBzZW1pLWludGVsbGlnZW50IHBhdGNoIG1hbmFnZW1lbnQgKHByb3RvdHlwaWNhbCBhdCB0aGlzIHBvaW50KQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisxKSBXaGF0IHRvIGRvIGFib3V0IE1JREkgaW50ZXJmYWNlcyA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBUcm9wZXogUGx1cyAoYW5kIHBlcmhhcHMgb3RoZXIgV0YgY2FyZHMpIGNhbiBpbiB0aGVvcnkgc3VwcG9ydCB1cAordG8gMiBwaHlzaWNhbCBNSURJIGludGVyZmFjZXMuIE9uZSBvZiB0aGVzZSBpcyBjb25uZWN0ZWQgdG8gdGhlCitJQ1MyMTE1IGNoaXAgKHRoZSBXYXZlRnJvbnQgc3ludGggaXRzZWxmKSBhbmQgaXMgY29udHJvbGxlZCBieQorTVBVL1VBUlQtNDAxIGVtdWxhdGlvbiBjb2RlIHJ1bm5pbmcgYXMgcGFydCBvZiB0aGUgV2F2ZUZyb250IE9TLiAgVGhlCitvdGhlciBpcyBjb250cm9sbGVkIGJ5IHRoZSBDUzQyMzIgY2hpcCBwcmVzZW50IG9uIHRoZSBib2FyZC4gSG93ZXZlciwKK3BoeXNpY2FsIGFjY2VzcyB0byB0aGUgQ1M0MjMyIGNvbm5lY3RvciBpcyBkaWZmaWN1bHQsIGFuZCBpdCBpcwordW5saWtlbHkgKHRob3VnaCBub3QgaW1wb3NzaWJsZSkgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIHVzZSBpdC4KKworQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciBpbnRyb2R1Y2VkIGFuIGFkZGl0aW9uYWwga2VybmVsIGNvbmZpZwordmFyaWFibGUgd2hpY2ggY29udHJvbGxlZCB3aGV0aGVyIG9yIG5vdCB0aGUgQ1M0MjMyIE1JREkgaW50ZXJmYWNlIHdhcworY29uZmlndXJlZC4gQmVjYXVzZSBvZiBBbGFuIENveCdzIHdvcmsgb24gbW9kdWxhcml6aW5nIHRoZSBzb3VuZAorZHJpdmVycywgYW5kIG5vdyBiYWNrcG9ydGluZyB0aGVtIHRvIDIuMC4zNCBrZXJuZWxzLCB0aGVyZSBzZWVtcyB0byBiZQorbGl0dGxlIHJlYXNvbiB0byBzdXBwb3J0ICJzdGF0aWMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCBhbmQgc28gdGhpcworaGFzIGJlZW4gYWJhbmRvbmVkIGluIGZhdm9yIG9mICpvbmx5KiBtb2R1bGUgcGFyYW1ldGVycy4gU3BlY2lmeWluZworIm1wdWlvIiBhbmQgIm1wdWlycSIgZm9yIHRoZSBjczQyMzIgcGFyYW1ldGVyIHdpbGwgcmVzdWx0IGluIHRoZQorQ1M0MjMyIE1JREkgaW50ZXJmYWNlIGJlaW5nIGNvbmZpZ3VyZWQ7IGxlYXZpbmcgdGhlbSB1bnNwZWNpZmllZCB3aWxsCitsZWF2ZSBpdCB1bmNvbmZpZ3VyZWQgKGFuZCB0aHVzIHVudXNhYmxlKS4KKworQlRXLCBJIGhhdmUgaGVhcmQgZnJvbSBvbmUgVHJvcGV6KyB1c2VyIHRoYXQgdGhlIENTNDIzMiBpbnRlcmZhY2UgaXMKK21vcmUgcmVsaWFibGUgdGhhbiB0aGUgSUNTMjExNSBvbmUuIEkgaGF2ZSBoYWQgbm8gcHJvYmxlbXMgd2l0aCB0aGUKK2xhdHRlciwgYW5kIEkgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgY2FibGUgdG8gdGVzdCB0aGUgZm9ybWVyIG9uZQorb3V0LiBSZXBvcnRzIHdlbGNvbWUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzIpIFdoeSBkb2VzIGxpbmUgWFhYIG9mIHRoZSBjb2RlIGxvb2sgbGlrZSB0aGlzIC4uLi4gPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitFaXRoZXIgYmVjYXVzZSBpdCdzIG5vdCBmaW5pc2hlZCB5ZXQsIG9yIGJlY2F1c2UgeW91J3JlIGEgYmV0dGVyIGNvZGVyCit0aGFuIEkgYW0sIG9yIGJlY2F1c2UgeW91IGRvbid0IHVuZGVyc3RhbmQgc29tZSBhc3BlY3Qgb2YgaG93IHRoZSBjYXJkCitvciB0aGUgY29kZSB3b3Jrcy4gCisKK0kgYWJzb2x1dGVseSB3ZWxjb21lIGNvbW1lbnRzLCBjcml0aWNpc21zIGFuZCBzdWdnZXN0aW9ucyBhYm91dCB0aGUKK2Rlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRyaXZlci4gCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzMpIFdoYXQgZmlsZXMgYXJlIGluY2x1ZGVkID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgZHJpdmVycy9zb3VuZC9SRUFETUUud2F2ZWZyb250ICAgICAgIC0tIHRoaXMgZmlsZQorCisgICBkcml2ZXJzL3NvdW5kL3dhdmVmcm9udC5wYXRjaAktLSBwYXRjaGVzIGZvciB0aGUgMi4xLjEwNiBzb3VuZCBkcml2ZXJzCisJCQkJCSAgIG5lZWRlZCB0byBtYWtlIHRoZSByZXN0IG9mIHRoaXMgd29yaworCQkJCSAgICAgICAgICAgRE8gTk9UIFVTRSBJRiBZT1UnVkUgQVBQTElFRCBUSEVNIAorCQkJCQkgICBCRUZPUkUsIE9SIEhBVkUgMi4xLjEwOSBPUiBBQk9WRQorCisgICBkcml2ZXJzL3NvdW5kL3dhdmZyb250LmMgICAgICAgICAgICAgLS0gdGhlIGRyaXZlcgorICAgZHJpdmVycy9zb3VuZC95czIyNS5oICAgICAgICAgICAgICAgIC0tIGRhdGEgZGVjbGFyYXRpb25zIGZvciBGWCBjb25maWcKKyAgIGRyaXZlcnMvc291bmQveXMyMjUuYyAgICAgICAgICAgICAgICAtLSBkYXRhIGRlZmluaXRpb25zIGZvciBGWCBjb25maWcKKyAgIGRyaXZlcnMvc291bmQvd2ZfbWlkaS5jICAgICAgICAgICAgICAtLSB0aGUgInVhcnQ0MDEiIGRyaXZlciAKKyAgIAkJCQkgICAgICAgICAgICAgIHRvIHN1cHBvcnQgdmlydHVhbCBNSURJIG1vZGUuCisgICBpbmNsdWRlL3dhdmVmcm9udC5oICAgICAgICAgICAgICAgICAgLS0gdGhlIGhlYWRlciBmaWxlCisgICBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9Ucm9wZXorICAgICAgICAgIC0tIHNob3J0IGRvY3Mgb24gY29uZmlndXJhdGlvbgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis0KSBIb3cgZG8gSSBjb21waWxlL2luc3RhbGwvdXNlIGl0ID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworUEFSVCBPTkU6IGluc3RhbGwgdGhlIHNvdXJjZSBjb2RlIGludG8geW91ciBzb3VuZCBkcml2ZXIgZGlyZWN0b3J5CisKKyAgY2QgPHRvcC1vZi15b3VyLTIuMS4xMDYtY29kZS1iYXNlLWUuZy4tL3Vzci9zcmMvbGludXg+CisgIHRhciAtenh2ZiA8d2hlcmUteW91LXB1dC93YXZlZnJvbnQudGFyLmd6PgorCitQQVJUIFRXTzogYXBwbHkgdGhlIHBhdGNoZXMKKworICAgICBETyBUSElTIE9OTFkgSUYgWU9VIEhBVkUgQSBLRVJORUwgVkVSU0lPTiBCRUxPVyAyLjEuMTA5CisgICAgIEFORCBIQVZFIE5PVCBBTFJFQURZIElOU1RBTExFRCBUSEUgUEFUQ0goRVMpLgorCisgIGNkIGRyaXZlcnMvc291bmQKKyAgcGF0Y2ggPCB3YXZlZnJvbnQucGF0Y2gKKworUEFSVCBUSFJFRTogY29uZmlndXJlIHlvdXIga2VybmVsCisKKyAgY2QgPHRvcCBvZiB5b3VyIGtlcm5lbCB0cmVlPgorICBtYWtlIHhjb25maWcgKG9yIHdoaWNoZXZlciBjb25maWcgb3B0aW9uIHlvdSB1c2UpCisKKyAgICAgICAgIC0gY2hvb3NlIFlFUyBmb3IgU291bmQgU3VwcG9ydAkgICAgICAKKyAgICAgICAgIC0gY2hvb3NlIE1PRFVMRSAoTSkgZm9yIE9TUyBTb3VuZCBNb2R1bGVzCisgICAgICAgICAtIGNob29zZSBNT0RVTEUoTSkgdG8gWU0zODEyL09QTDMgc3VwcG9ydAorCSAtIGNob29zZSBNT0RVTEUoTSkgZm9yIFdhdmVGcm9udCBzdXBwb3J0CisJIC0gY2hvb3NlIE1PRFVMRShNKSBmb3IgQ1M0MjMyIHN1cHBvcnQKKworCSAtIGNob29zZSAiTiIgZm9yIGV2ZXJ5dGhpbmcgZWxzZSAodW5sZXNzIHlvdSBoYXZlIG90aGVyCisJICAgICAgc291bmRjYXJkcyB5b3Ugd2FudCBzdXBwb3J0IGZvcikKKworCisgICBtYWtlIGJvb3QKKyAgIC4KKyAgIC4KKyAgIC4KKyAgIDx3aGF0ZXZlciB5b3Ugbm9ybWFsbHkgZG8gZm9yIGEga2VybmVsIGluc3RhbGw+CisgICBtYWtlIG1vZHVsZXMKKyAgIC4KKyAgIC4KKyAgIC4KKyAgIG1ha2UgbW9kdWxlc19pbnN0YWxsCisKK0hlcmUncyBteSBhdXRvY29uZi5oIFNPVU5EIHNlY3Rpb246CisKKy8qCisgKiBTb3VuZAorICovCisjZGVmaW5lIENPTkZJR19TT1VORCAxCisjdW5kZWYgIENPTkZJR19TT1VORF9PU1MKKyNkZWZpbmUgQ09ORklHX1NPVU5EX09TU19NT0RVTEUgMQorI3VuZGVmICBDT05GSUdfU09VTkRfUEFTCisjdW5kZWYgIENPTkZJR19TT1VORF9TQgorI3VuZGVmICBDT05GSUdfU09VTkRfQURMSUIKKyN1bmRlZiAgQ09ORklHX1NPVU5EX0dVUworI3VuZGVmICBDT05GSUdfU09VTkRfTVBVNDAxCisjdW5kZWYgIENPTkZJR19TT1VORF9QU1MKKyN1bmRlZiAgQ09ORklHX1NPVU5EX01TUworI3VuZGVmICBDT05GSUdfU09VTkRfU1NDQVBFCisjdW5kZWYgIENPTkZJR19TT1VORF9UUklYCisjdW5kZWYgIENPTkZJR19TT1VORF9NQUQxNgorI3VuZGVmICBDT05GSUdfU09VTkRfV0FWRUZST05UCisjZGVmaW5lIENPTkZJR19TT1VORF9XQVZFRlJPTlRfTU9EVUxFIDEKKyN1bmRlZiAgQ09ORklHX1NPVU5EX0NTNDIzMgorI2RlZmluZSBDT05GSUdfU09VTkRfQ1M0MjMyX01PRFVMRSAxCisjdW5kZWYgIENPTkZJR19TT1VORF9NQVVJCisjdW5kZWYgIENPTkZJR19TT1VORF9TR0FMQVhZCisjdW5kZWYgIENPTkZJR19TT1VORF9PUEwzU0ExCisjdW5kZWYgIENPTkZJR19TT1VORF9TT0ZUT1NTCisjdW5kZWYgIENPTkZJR19TT1VORF9ZTTM4MTIKKyNkZWZpbmUgQ09ORklHX1NPVU5EX1lNMzgxMl9NT0RVTEUgMQorI3VuZGVmICBDT05GSUdfU09VTkRfVk1JREkKKyN1bmRlZiAgQ09ORklHX1NPVU5EX1VBUlQ2ODUwCisvKgorICogQWRkaXRpb25hbCBsb3cgbGV2ZWwgc291bmQgZHJpdmVycworICovCisjdW5kZWYgIENPTkZJR19MT1dMRVZFTF9TT1VORAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzYpIEhvdyBkbyBJIGNvbmZpZ3VyZSBteSBjYXJkID8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitZb3UgbmVlZCB0byBlZGl0IC9ldGMvbW9kcHJvYmUuY29uZi4gSGVyZSdzIG1pbmUgKGVkaXRlZCB0byBzaG93IHRoZQorcmVsZXZhbnQgZGV0YWlscyk6CisKKyAgIyBTb3VuZCBzeXN0ZW0KKyAgYWxpYXMgY2hhci1tYWpvci0xNC0qIHdhdmVmcm9udAorICBhbGlhcyBzeW50aDAgd2F2ZWZyb250CisgIGFsaWFzIG1peGVyMCBjczQyMzIKKyAgYWxpYXMgYXVkaW8wIGNzNDIzMgorICBpbnN0YWxsIHdhdmVmcm9udCAvc2Jpbi9tb2Rwcm9iZSBjczQyMzIgJiYgL3NiaW4vbW9kcHJvYmUgLWkgd2F2ZWZyb250ICYmIC9zYmluL21vZHByb2JlIG9wbDMKKyAgb3B0aW9ucyB3YXZlZnJvbnQgaW89MHgyMDAgaXJxPTkKKyAgb3B0aW9ucyBjczQyMzIgc3ludGhpcnE9OSBzeW50aGlvPTB4MjAwIGlvPTB4NTMwIGlycT01IGRtYT0xIGRtYTI9MAorICBvcHRpb25zIG9wbDMgaW89MHgzODgKKworVGhpbmdzIHRvIG5vdGU6IAorCisgICAgICAgdGhlIHdhdmVmcm9udCBvcHRpb25zICJpbyIgYW5kICJpcnEiICoqKk1VU1QqKiogbWF0Y2ggdGhlICJzeW50aGlvIgorICAgICAgIGFuZCAic3ludGhpcnEiIGNzNDIzMiBvcHRpb25zLgorCisgICAgICAgeW91IGNhbiBkbyB3aXRob3V0IHRoZSBvcGwzIG1vZHVsZSBpZiB5b3UgZG9uJ3QKKyAgICAgICB3YW50IHRvIHVzZSB0aGUgT1BML1szNF0gRk0gc3ludGggb24gdGhlIHNvdW5kY2FyZAorCisgICAgICAgdGhlIG9wbDMgaW8gcGFyYW1ldGVyIGlzIGNvbnZlbnRpb25hbGx5IG5vdCBhZGp1c3RhYmxlLgorICAgICAgIEluIHRoZW9yeSwgYW55IG5vdC1pbi11c2UgSU8gcG9ydCBhZGRyZXNzIHdvdWxkIHdvcmssIGJ1dAorICAgICAgIGp1c3QgdXNlIDB4Mzg4IGFuZCBzdGljayB3aXRoIHRoZSBjcm93ZC4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorNykgV2hhdCBhYm91dCBmaXJtd2FyZSA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1R1cnRsZSBCZWFjaCBoYXZlIG5vdCBnaXZlbiBtZSBwZXJtaXNzaW9uIHRvIGRpc3RyaWJ1dGUgdGhlaXIgZmlybXdhcmUKK2ZvciB0aGUgSUNTMjExNS4gSG93ZXZlciwgaWYgeW91IGhhdmUgYSBXYXZlRnJvbnQgY2FyZCwgdGhlbiB5b3UKK2FsbW9zdCBjZXJ0YWlubHkgaGF2ZSB0aGUgZmlybXdhcmUsIGFuZCBpZiBub3QsIGl0cyBmcmVlbHkgYXZhaWxhYmxlCitvbiB0aGVpciB3ZWJzaXRlLCBhdDoKKworICAgaHR0cDovL3d3dy50YmVhY2guY29tL3Ricy9kb3dubG9hZHMvc2NhcmRzZG93bi5odG0jdHJvcGV6cGx1cyAKKworVGhlIGZpbGUgaXMgY2FsbGVkIFdGT1MyMDAxLk1PVCAoZm9yIHRoZSBUcm9wZXorKS4KKworVGhpcyBkcml2ZXIsIGhvd2V2ZXIsIGRvZXNuJ3QgdXNlIHRoZSBwdXJlIGZpcm13YXJlIGFzIGRpc3RyaWJ1dGVkLAorYnV0IGluc3RlYWQgcmVsaWVzIG9uIGEgc29tZXdoYXQgcHJvY2Vzc2VkIGZvcm0gb2YgaXQuIFlvdSBjYW4KK2dlbmVyYXRlIHRoaXMgdmVyeSBlYXNpbHkuIEZvbGxvd2luZyBhbiBpZGVhIGZyb20gQW5kcmV3IFZlbGlhdGgncworUGlubmFjbGUgZHJpdmVyLCB0aGUgZm9sbG93aW5nIGZsZXggcHJvZ3JhbSB3aWxsIGdlbmVyYXRlIHRoZQorcHJvY2Vzc2VkIHZlcnNpb246CisKKy0tLS0gY3V0IGhlcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJW9wdGlvbiBtYWluCislJQorXlNbMjhdLipcciQgcHJpbnRmICgiJWMlLipzIiwgeXlsZW5nLTEseXlsZW5nLTEseXl0ZXh0KTsKKzw8RU9GPj4geyBmcHV0YyAoJ1wwJywgc3Rkb3V0KTsgcmV0dXJuOyB9CitcbiB7fSAKKy4gIHt9CistLS0tIGN1dCBoZXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIGl0LCBwdXQgdGhlIGFib3ZlIGluIGZpbGUgKHNheSwgd3MubCkgY29tcGlsZSBpdCBsaWtlIHRoaXM6CisKKyAgICAgIHNoZWxsPiBmbGV4IC1vd3MuYyB3cy5sCisgICAgICBzaGVsbD4gY2MgLW8gd3Mgd3MuYworICAgICAgCithbmQgdGhlbiB1c2UgaXQgbGlrZSB0aGlzOgorCisgICAgd3MgPCBteS1jb3B5LW9mLXRoZS1vc3dmLm1vdC1maWxlID4gL2V0Yy9zb3VuZC93YXZlZnJvbnQub3MKKworSWYgeW91IHB1dCBpdCBzb21ld2hlcmUgZWxzZSwgeW91J2xsIGFsd2F5cyBoYXZlIHRvIHVzZSB0aGUgd2Zfb3NwYXRoCittb2R1bGUgcGFyYW1ldGVyIChzZWUgYmVsb3cpIG9yIGFsdGVyIHRoZSBzb3VyY2UgY29kZS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorNykgSG93IGRvIEkgZ2V0IGl0IHdvcmtpbmcgPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitPcHRpb25hbGx5LCB5b3UgY2FuIHJlYm9vdCB3aXRoIHRoZSAibmV3IiBrZXJuZWwgKGV2ZW4gdGhvdWdoIHRoZSBvbmx5CitjaGFuZ2VzIGhhdmUgcmVhbGx5IGJlZW4gbWFkZSB0byBhIG1vZHVsZSkuCisKK1RoZW4sIGFzIHJvb3QgZG86CisKKyAgICAgbW9kcHJvYmUgd2F2ZWZyb250CisKK1lvdSBzaG91bGQgZ2V0IHNvbWV0aGluZyBsaWtlIHRoaXMgaW4gL3Zhci9sb2cvbWVzc2FnZXM6CisKKyAgICBXYXZlRnJvbnQ6IGZpcm13YXJlIDEuMjAgYWxyZWFkeSBsb2FkZWQuCisKK29yIAorCisgICAgV2F2ZUZyb250OiBubyByZXNwb25zZSB0byBmaXJtd2FyZSBwcm9iZSwgYXNzdW1lIHJhdy4KKwordGhlbjoKKworICAgIFdhdmVGcm9udDogd2FpdGluZyBmb3IgbWVtb3J5IGNvbmZpZ3VyYXRpb24gLi4uCisgICAgV2F2ZUZyb250OiBoYXJkd2FyZSB2ZXJzaW9uIDEuNjQKKyAgICBXYXZlRnJvbnQ6IGF2YWlsYWJsZSBEUkFNIDgxOTFrCisgICAgV2F2ZUZyb250OiAzMzIgc2FtcGxlcyB1c2VkICgyNjYgcmVhbCwgMTMgYWxpYXNlcywgNTMgbXVsdGkpLCAxODAgZW1wdHkKKyAgICBXYXZlRnJvbnQ6IDEyOCBwcm9ncmFtcyBzbG90cyBpbiB1c2UKKyAgICBXYXZlRnJvbnQ6IDI1NiBwYXRjaCBzbG90cyBmaWxsZWQsIDE0MiBpbiB1c2UKKworVGhlIHdob2xlIHByb2Nlc3MgdGFrZXMgYWJvdXQgMTYgc2Vjb25kcywgdGhlIGxvbmdlc3Qgd2FpdHMgYmVpbmcKK2FmdGVyIHJlcG9ydGluZyB0aGUgaGFyZHdhcmUgdmVyc2lvbiAoZHVyaW5nIHRoZSBmaXJtd2FyZSBkb3dubG9hZCksCithbmQgYWZ0ZXIgcmVwb3J0aW5nIHByb2dyYW0gc3RhdHVzIChkdXJpbmcgcGF0Y2ggc3RhdHVzIGlucXVpcnkpLiAgSXRzCitzaG9ydGVyIChhYm91dCAxMCBzZWNzKSBpZiB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeSBsb2FkZWQgKGkuZS4gb25seQord2FybSByZWJvb3RzIHNpbmNlIHRoZSBsYXN0IGZpcm13YXJlIGxvYWQpLgorCitUaGUgImF2YWlsYWJsZSBEUkFNIiBsaW5lIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gaG93IG11Y2ggYWRkZWQgUkFNCit5b3VyIGNhcmQgaGFzLiBNaW5lIGhhcyA4TUIuCisKK1RvIGNoZWNrIGJhc2ljYWxseSBmdW5jdGlvbmFsaXR5LCB1c2UgcGxheSgxKSBvciBzcGxheSgxKSB0byBzZW5kIGEKKy5XQVYgb3Igb3RoZXIgYXVkaW8gZmlsZSB0aHJvdWdoIHRoZSBhdWRpbyBwb3J0aW9uLiBUaGVuIHVzZSBwbGF5bWlkaQordG8gcGxheSBhIEdlbmVyYWwgTUlESSBmaWxlLiBUcnkgdGhlICItRCAwIiB0byBoZWFyIHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHNlbmRpbmcgTUlESSB0byB0aGUgV2F2ZUZyb250IGFuZCB1c2luZyB0aGUgT1BMLzMsCit3aGljaCBpcyB0aGUgZGVmYXVsdCAoSSB0aGluayAuLi4pLiBJZiB5b3UgaGF2ZSBhbiBleHRlcm5hbCBzeW50aChzKQoraG9va2VkIHRvIHRoZSBzb3VuZGNhcmQsIHlvdSBjYW4gdXNlICItZSIgdG8gcm91dGUgdG8gdGhlCitleHRlcm5hbCBzeW50aChzKSAoaW4gdGhlb3J5LCAtRCAxIHNob3VsZCB3b3JrIGFzIHdlbGwsIGJ1dCBJIHRoaW5rCit0aGVyZSBpcyBhIGJ1ZyBpbiBwbGF5bWlkaSB3aGljaCBwcmV2ZW50cyB0aGlzIGZyb20gZG9pbmcgd2hhdCBpdAorc2hvdWxkKS4gCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzgpIFdoYXQgYXJlIHRoZSBtb2R1bGUgcGFyYW1ldGVycyA/CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0l0cyBiZXN0IHRvIHJlYWQgd2F2ZWZyb250LmMgZm9yIHRoaXMsIGJ1dCBoZXJlIGlzIGEgc3VtbWFyeToKKworaW50ZWdlcnM6IAorCSAgd2ZfcmF3ICAtIGlmIHNldCwgaWdub3JlIGFwcGFyZW50IHByZXNlbmNlIG9mIGZpcm13YXJlCisJCSAgICBsb2FkZWQgb250byB0aGUgSUNTMjExNSwgcmVzZXQgdGhlIHdob2xlCisJCSAgICBib2FyZCwgYW5kIGluaXRpYWxpemUgaXQgZnJvbSBzY3JhdGNoLiAoZGVmYXVsdCA9IDApCisKKyAgICAgICAgICBmeF9yYXcgIC0gaWYgc2V0LCBhbHdheXMgaW5pdGlhbGl6ZSB0aGUgWVNTMjI1IHByb2Nlc3NvcgorCQkgICAgb24gdGhlIFRyb3BleiBwbHVzLiAoZGVmYXVsdCA9IDEpCisKKyAgICAgICAgICA8IFRoZSBuZXh0IDQgYXJlIGJhc2ljYWxseSBmb3Iga2VybmVsIGhhY2tlcnMgdG8gYWxsb3cKKwkgICAgdHdlYWtpbmcgdGhlIGRyaXZlciBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gPgkJICAgIAorCisgICAgICAgICAgd2FpdF91c2VjcyAgICAgICAgLSAgbG9vcCB0aW1lciB1c2VkIHdoZW4gd2FpdGluZyBmb3IKKwkJCSAgICAgICBzdGF0dXMgY29uZGl0aW9ucyBvbiB0aGUgYm9hcmQuIAorCQkJICAgICAgIFRoZSBkZWZhdWx0IGlzIDE1MC4KKworICAgICAgICAgIGRlYnVnX2RlZmF1bHQgICAgLSBkZWJ1Z2dpbmcgZmxhZ3MuIFNlZSBzb3VuZC93YXZlZnJvbnQuaAorCQkJICAgICBmb3IgV0ZfREVCVUdfKiB2YWx1ZXMuIERlZmF1bHQgaXMgemVyby4KKwkJCSAgICAgU2V0dGluZyB0aGlzIGFsbG93cyB5b3UgdG8gZGVidWcgdGhlCisJCQkgICAgIGRyaXZlciBkdXJpbmcgbW9kdWxlIGluc3RhbGxhdGlvbi4KK3N0cmluZ3M6CisJICBvc3BhdGggLSBwYXRoIHRvIGdldCB0byB0aGUgcHJlLXByb2Nlc3NlZCBPUyBmaXJtd2FyZS4KKwkJICAgIChkZWZhdWx0OiAvZXRjL3NvdW5kL3dhdmVmcm9udC5vcykKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOSkgV2hvIHNob3VsZCBJIGNvbnRhY3QgaWYgSSBoYXZlIHByb2JsZW1zPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitKdXN0IG1lOiBQYXVsIEJhcnRvbi1EYXZpcyA8cGJkQG9wLm5ldD4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9idGF1ZGlvIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvYnRhdWRpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTY5M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvYnRhdWRpbwpAQCAtMCwwICsxLDkyIEBACisKK0ludHJvCis9PT09PQorCitwZW9wbGUgc3RhcnQgYnVnZ2luZyBtZSBhYm91dCB0aGlzIHdpdGggcXVlc3Rpb25zLCBsb29rcyBsaWtlIEkKK3Nob3VsZCB3cml0ZSB1cCBzb21lIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgYmVhc3QuICBUaGF0IHdheSBJCitkb24ndCBoYXZlIHRvIGFuc3dlciB0aGF0IG11Y2ggbWFpbHMgSSBob3BlLiAgWWVzLCBJJ20gbGF6eS4uLgorCisKK1lvdSBtaWdodCBoYXZlIG5vdGljZWQgdGhhdCB0aGUgYnQ4NzggZ3JhYmJlciBjYXJkcyBoYXZlIGFjdHVhbGx5CitfdHdvXyBQQ0kgZnVuY3Rpb25zOgorCiskIGxzcGNpCitbIC4uLiBdCiswMDowYS4wIE11bHRpbWVkaWEgdmlkZW8gY29udHJvbGxlcjogQnJvb2t0cmVlIENvcnBvcmF0aW9uIEJ0ODc4IChyZXYgMDIpCiswMDowYS4xIE11bHRpbWVkaWEgY29udHJvbGxlcjogQnJvb2t0cmVlIENvcnBvcmF0aW9uIEJ0ODc4IChyZXYgMDIpCitbIC4uLiBdCisKK1RoZSBmaXJzdCBkb2VzIHZpZGVvLCBpdCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHRvIHRoZSBidDg0OC4gIFRoZSBzZWNvbmQKK2RvZXMgYXVkaW8uICBidGF1ZGlvIGlzIGEgZHJpdmVyIGZvciB0aGUgc2Vjb25kIGZ1bmN0aW9uLiAgSXQncyBhIHNvdW5kCitkcml2ZXIgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJlY29yZGluZyBzb3VuZCAoYW5kIF9vbmx5XyByZWNvcmRpbmcsIG5vCitwbGF5YmFjaykuICBBcyBtb3N0IFRWIGNhcmRzIGNvbWUgd2l0aCBhIHNob3J0IGNhYmxlIHdoaWNoIGNhbiBiZSBwbHVnZ2VkCitpbnRvIHlvdXIgc291bmQgY2FyZCdzIGxpbmUtaW4geW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcyBkcml2ZXIgaWYgYWxsCit5b3Ugd2FudCB0byBkbyBpcyBqdXN0IHdhdGNoaW5nIFRWLi4uCisKKworRHJpdmVyIFN0YXR1cworPT09PT09PT09PT09PQorCitTdGlsbCBzb21ld2hhdCBleHBlcmltZW50YWwuICBUaGUgZHJpdmVyIHNob3VsZCB3b3JrIHN0YWJsZSwgaS5lLiBpdAorc2hvdWxkJ250IGNyYXNoIHlvdXIgYm94LiAgSXQgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQsIGhhdmUgYnVncywKK25vdCBiZWluZyBmdWxseSBPU1MgQVBJIGNvbXBpbGFudCwgLi4uCisKK0xhdGVzdCB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL2J5dGVzZXgub3JnL2J0dHYvLCB0aGUKK2RyaXZlciBpcyBpbiB0aGUgYnR0diB0YXJiYWxsLiAgS2VybmVsIHBhdGNoZXMgbWlnaHQgYmUgYXZhaWxhYmxlIHRvbywKK2hhdmUgYSBsb29rIGF0IGh0dHA6Ly9ieXRlc2V4Lm9yZy9idHR2L2xpc3RpbmcuaHRtbC4KKworVGhlIGNoaXAga25vd3MgdHdvIGRpZmZlcmVudCBtb2Rlcy4gIGJ0YXVkaW8gcmVnaXN0ZXJzIHR3byBkc3AKK2RldmljZXMsIG9uZSBmb3IgZWFjaCBtb2RlLiAgVGhleSBjYW4gbm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZS4KKworCitEaWdpdGFsIGF1ZGlvIG1vZGUKKz09PT09PT09PT09PT09PT09PQorCitUaGUgY2hpcCBnaXZlcyB5b3UgMTYgYml0IHN0ZXJlbyBzb3VuZC4gIFRoZSBzYW1wbGUgcmF0ZSBkZXBlbmRzIG9uCit0aGUgZXh0ZXJuYWwgc291cmNlIHdoaWNoIGZlZWRzIHRoZSBidDg3OCB3aXRoIGRpZ2l0YWwgc291bmQgdmlhIEkyUworaW50ZXJmYWNlLiAgVGhlcmUgaXMgYSBpbnNtb2Qgb3B0aW9uIChyYXRlKSB0byB0ZWxsIHRoZSBkcml2ZXIgd2hpY2gKK3NhbXBsZSByYXRlIHRoZSBoYXJkd2FyZSB1c2VzICgzMjAwMCBpcyB0aGUgZGVmYXVsdCkuCisKK09uZSBwb3NzaWJsZSBzb3VyY2UgZm9yIGRpZ2l0YWwgc291bmQgaXMgdGhlIG1zcDM0eHggYXVkaW8gcHJvY2Vzc29yCitjaGlwIHdoaWNoIHByb3ZpZGVzIGRpZ2l0YWwgc291bmQgdmlhIEkyUyB3aXRoIDMyIGtIeiBzYW1wbGUgcmF0ZS4gIE15CitIYXVwcGF1Z2UgYm9hcmQgd29ya3MgdGhpcyB3YXkuCisKK1RoZSBPc3ByZXktMjAwIHJlcG9ydGx5IGdpdmVzIHlvdSBkaWdpdGFsIHNvdW5kIHdpdGggNDQxMDAgSHogc2FtcGxlCityYXRlLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHlvdSBnZXQgbm8gc291bmQgYXQgYWxsLgorCisKK2FuYWxvZyBtb2RlIChBL0QpCis9PT09PT09PT09PT09PT09PQorCitZb3UgY2FuIHRlbGwgdGhlIGRyaXZlciB0byB1c2UgdGhpcyBtb2RlIHdpdGggdGhlIGluc21vZCBvcHRpb24gImFuYWxvZz0xIi4KK1RoZSBjaGlwIGhhcyB0aHJlZSBhbmFsb2cgaW5wdXRzLiAgQ29uc2VxdWVudGx5IHlvdSdsbCBnZXQgYSBtaXhlciBkZXZpY2UKK3RvIGNvbnRyb2wgdGhlc2UuCisKK1RoZSBhbmFsb2cgbW9kZSBzdXBwb3J0cyBtb25vIG9ubHkuICBCb3RoIDggKyAxNiBiaXQuICBCb3RoIGFyZSBfc2lnbmVkXworaW50LCB3aGljaCBpcyB1bmNvbW1vbiBmb3IgdGhlIDggYml0IGNhc2UuICBTYW1wbGUgcmF0ZSByYW5nZSBpcyAxMTkga0h6Cit0byA0NDgga0h6LiAgWWVzLCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpcyBjb3JyZWN0LiAgVGhlIGRyaXZlciBzdXBwb3J0cworZG93bnNhbXBsaW5nIGJ5IHBvd2VycyBvZiB0d28sIHNvIHlvdSBjYW4gYXNrIGZvciBtb3JlIHVzdWFsIHNhbXBsZSByYXRlcworbGlrZSA0NCBrSHogdG9vLgorCitXaXRoIG15IEhhdXBwYXVnZSBJIGdldCBub2lzeSBzb3VuZCBvbiB0aGUgc2Vjb25kIGlucHV0IChtYXBwZWQgdG8gbGluZTIKK2J5IHRoZSBtaXhlciBkZXZpY2UpLiAgT3RoZXJzIGdldCBhIHVzZWFibGUgc2lnbmFsIG9uIGxpbmUxLgorCisKK3NvbWUgZXhhbXBsZXMKKz09PT09PT09PT09PT0KKworKiByZWFkIGF1ZGlvIGRhdGEgZnJvbSBidGF1ZGlvIChkc3AyKSwgc2VuZCB0byBlczE3MzAgKGRzcCxkc3AxKToKKyAgJCBzb3ggLXcgLXIgMzIwMDAgLXQgb3NzZHNwIC9kZXYvZHNwMiAtdCBvc3Nkc3AgL2Rldi9kc3AKKworKiByZWFkIGF1ZGlvIGRhdGEgZnJvbSBidGF1ZGlvLCBzZW5kIHRvIGVzb3VuZCBkYWVtb24gKHdoaWNoIG1pZ2h0IGJlCisgIHJ1bm5pbmcgb24gYW5vdGhlciBob3N0KToKKyAgJCBzb3ggLWMgMiAtdyAtciAzMjAwMCAtdCBvc3Nkc3AgL2Rldi9kc3AyIC10IHN3IC0gfCBlc2RjYXQgLXIgMzIwMDAKKyAgJCBzb3ggLWMgMSAtdyAtciAzMjAwMCAtdCBvc3Nkc3AgL2Rldi9kc3AyIC10IHN3IC0gfCBlc2RjYXQgLW0gLXIgMzIwMDAKKworCitIYXZlIGZ1biwKKworICBHZXJkCisKKy0tIAorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvY3M0Nnh4IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvY3M0Nnh4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDZjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9jczQ2eHgKQEAgLTAsMCArMSwxMzggQEAKKworRG9jdW1lbnRhdGlvbiBmb3IgdGhlIENpcnJ1cyBMb2dpYy9DcnlzdGFsIFNvdW5kRnVzaW9uIGNzNDZ4eC9jczQyODAgYXVkaW8gCitjb250cm9sbGVyIGNoaXBzICgyMDAxLzA1LzExKQorCitUaGUgY3M0Nnh4IGF1ZGlvIGRyaXZlciBzdXBwb3J0cyB0aGUgRFNQIGxpbmUgb2YgQ2lycnVzIGNvbnRyb2xsZXJzLiAKK1NwZWNpZmljYWxseSwgdGhlIGNzNDYxMCwgY3M0NjEyLCBjczQ2MTQsIGNzNDYyMiwgY3M0NjI0LCBjczQ2MzAgYW5kIHRoZSBjczQyODAKK3Byb2R1Y3RzLiAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgZ2VuZXJpYyBhYzk3X2NvZGVjIGRyaXZlciBmb3IgQUM5NyBjb2RlYworc3VwcG9ydC4gIAorCisKK0ZlYXR1cmVzOgorCitGdWxsIER1cGxleCBQbGF5YmFjay9DYXB0dXJlIHN1cHBvcnRlZCBmcm9tIDhrLTQ4ay4KKzE2Qml0IFNpZ25lZCBMRSAmIDhCaXQgVW5zaWduZWQsIHdpdGggTW9ubyBvciBTdGVyZW8gc3VwcG9ydGVkLgorCitBUE0vUE0gLSAyLjIueCBQTSBpcyBlbmFibGVkIGFuZCBmdW5jdGlvbmFsLiBBUE0gY2FuIGFsc28KK2JlIGVuYWJsZWQgZm9yIDIuNC54IGJ5IG1vZGlmeWluZyB0aGUgQ1M0NlhYX0FDUElfU1VQUE9SVCBtYWNybworZGVmaW5pdGlvbi4KKworRE1BIHBsYXliYWNrIGJ1ZmZlciBzaXplIGlzIGNvbmZpZ3VyYWJsZSBmcm9tIDE2ayAoZGVmYXVsdG9yZGVyPTIpIHVwIHRvIDJNZWcgCisoZGVmYXVsdG9yZGVyPTExKS4gIERNQSBjYXB0dXJlIGJ1ZmZlciBzaXplIGlzIGZpeGVkIGF0IGEgc2luZ2xlIDRrIHBhZ2UgYXMKK3R3byAyayBmcmFnbWVudHMuCisKK01NQVAgc2VlbXMgdG8gd29yayB3ZWxsIHdpdGggUXVha2VJSUksIGFuZCB0ZXN0IFhNTVMgcGx1Z2luLgorCitNeXRoMiB3b3JrcywgYnV0IHRoZSBwb2xsaW5nIGxvZ2ljIGlzIG5vdCBmdWxseSBjb3JyZWN0LCBidXQgaXMgZnVuY3Rpb25hbC4KKworVGhlIDIuNC40LWFjNiBnYW1lcG9ydCBjb2RlIGluIHRoZSBjczQ2MXggam95c3RpY2sgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCAKK3dpdGggYSBNaWNyb3NvZnQgU2lkZXdpbmRlciBqb3lzdGljayAoY3M0NjF4Lm8gYW5kIHNpZGV3aW5kZXIubykuICBUaGlzIAorYXVkaW8gZHJpdmVyIG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIHRoZSBqb3lzdGljayBkcml2ZXIgdG8gZW5hYmxlIHRoZQorRFNQIHRhc2sgaW1hZ2Ugc3VwcG9ydGluZyB0aGUgam95c3RpY2sgZGV2aWNlLgorCisKK0xpbWl0YXRpb25zOgorCitTUERJRiBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKworUHJpbWFyeSBjb2RlYyBzdXBwb3J0IG9ubHkuICBObyBzZWNvbmRhcnkgY29kZWMgc3VwcG9ydCBpcyBpbXBsZW1lbnRlZC4KKworCisKK05PVEVTOgorCitIZXJjdWxlcyBHYW1lIFRoZWF0cmUgWFAgLSB0aGUgRUdQSU8yIHBpbiBjb250cm9scyB0aGUgZXh0ZXJuYWwgQW1wLAorYW5kIGhhcyBiZWVuIHRlc3RlZC4KK01vZHVsZSBwYXJhbWV0ZXIgaGVyY3VsZXNfZWdwaW9fZGlzYWJsZSBzZXQgdG8gMSwgd2lsbCBmb3JjZSBhIDAgdG8gRUdQSU9EUgordG8gZGlzYWJsZSB0aGUgZXh0ZXJuYWwgYW1wbGlmaWVyLgorCitWVEIgU2FudGEgQ3J1eiAtIHRoZSBHUElPNy9HUElPOCBvbiB0aGUgU2Vjb25kYXJ5IENvZGVjIGNvbnRyb2wKK3RoZSBleHRlcm5hbCBhbXBsaWZpZXIgZm9yIHRoZSAiYmFjayIgc3BlYWtlcnMsIHNpbmNlIHdlIGRvIG5vdAorc3VwcG9ydCB0aGUgc2Vjb25kYXJ5IGNvZGVjIHRoZW4gdGhpcyBleHRlcm5hbCBhbXAgaXMgbm90Cit0dXJuZWQgb24uICBUaGUgcHJpbWFyeSBjb2RlYyBleHRlcm5hbCBhbXBsaWZpZXIgaXMgc3VwcG9ydGVkIGJ1dAorbm90ZSB0aGF0IHRoZSBBQzk3IEVBUEQgYml0IGlzIGludmVydGVkIGxvZ2ljIChhbXBfdm95ZXRyYSgpKS4KKworRE1BIGJ1ZmZlciBzaXplIC0gdGhlcmUgYXJlIGlzc3VlcyB3aXRoIG1hbnkgb2YgdGhlIExpbnV4IGFwcGxpY2F0aW9ucworY29uY2VybmluZyB0aGUgb3B0aW1hbCBidWZmZXIgc2l6ZS4gIFNldmVyYWwgYXBwbGljYXRpb25zIHJlcXVlc3QgYSAKK2NlcnRhaW4gZnJhZ21lbnQgc2l6ZSBhbmQgbnVtYmVyIGFuZCB0aGVuIGRvIG5vdCB2ZXJpZnkgdGhhdCB0aGUgZHJpdmVyCitoYXMgdGhlIGFiaWxpdHkgdG8gc3VwcG9ydCB0aGUgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24uICAKK1NORENUTF9EU1BfU0VURlJBR01FTlQgaW9jdGwgaXMgdXNlZCB0byByZXF1ZXN0IGEgZnJhZ21lbnQgc2l6ZSBhbmQKK251bWJlciBvZiBmcmFnbWVudHMuICBTb21lIGFwcGxpY2F0aW9ucyBleGl0IGlmIGFuIGVycm9yIGlzIHJldHVybmVkCitvbiB0aGlzIHBhcnRpY3VsYXIgaW9jdGwuIFRoZXJlZm9yZSwgaW4gYWxpZ25tZW50IHdpdGggdGhlIG90aGVyIE9TUyBhdWRpbyAKK2RyaXZlcnMsIG5vIGVycm9yIGlzIHJldHVybmVkIHdoZW4gYSBTRVRGUkFHcyBJT0NUTCBpcyByZWNlaXZlZCwgYnV0IHRoZSAKK3ZhbHVlcyBwYXNzZWQgZnJvbSB0aGUgYXBwIGFyZSBub3QgdXNlZCBpbiBhbnkgYnVmZmVyIGNhbGN1bGF0aW9uIAorKG9zc2ZyYWdzaGlmdC9vc3NtYXhmcmFncyBhcmUgbm90IHVzZWQpLgorVXNlIHRoZSAiZGVmYXVsdG9yZGVyPU4iIG1vZHVsZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBidWZmZXIgc2l6ZSBpZgoreW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIG51bWJlciBvZiBmcmFnbWVudHMKK29yIGEgc3BlY2lmaWMgYnVmZmVyIHNpemUgKHNlZSBiZWxvdykuCisKK0RlYnVnIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBhbiBpb2N0bCBkZWJ1ZyBpbnRlcmZhY2UgdG8gYWxsb3cgcnVudGltZSBtb2RpZmljYXRpb24gb2YgdGhlIAorZGVidWcgcHJpbnQgbGV2ZWxzLiAgVGhpcyBkZWJ1ZyBpbnRlcmZhY2UgY29kZSBjYW4gYmUgZGlzYWJsZWQgZnJvbSB0aGUgCitjb21waWxhdGlvbiBwcm9jZXNzIHdpdGggY29tbWVudGluZyB0aGUgZm9sbG93aW5nIGRlZmluZToKKyNkZWZpbmUgQ1NERUJVR19JTlRFUkZBQ0UgMQorVGhlcmUgaXMgYWxzbyBhIGRlYnVnIHByaW50IG1ldGhvZG9sZ3kgdG8gc2VsZWN0IHByaW50ZiBzdGF0ZW1lbnRzIGZyb20KK2RpZmZlcmVudCBhcmVhcyBvZiB0aGUgZHJpdmVyLiAgQSBkZWJ1ZyBwcmludCBsZXZlbCBpcyBhbHNvIHVzZWQgdG8gYWxsb3cKK2FkZGl0aW9uYWwgcHJpbnRmcyB0byBiZSBhY3RpdmUuICBDb21tZW50IG91dCB0aGUgZm9sbG93aW5nIGxpbmUgaW4gdGhlCitkcml2ZXIgdG8gZGlzYWJsZSBjb21waWxhdGlvbiBvZiB0aGUgQ1NfREJHT1VUIHByaW50IHN0YXRlbWVudHM6CisjZGVmaW5lIENTREVCVUcgMQorIAorUGxlYXNlIHNlZSB0aGUgZGVmaW5pdGlvbnMgZm9yIGNzX2RlYnVnbGV2ZWwgYW5kIGNzX2RlYnVnbWFzayBmb3IgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gb24gdGhlIGRlYnVnIGxldmVscyBhbmQgc2VjdGlvbnMuCisKK1RoZXJlIGlzIGFsc28gYSBjc2RiZyBleGVjdXRhYmxlIHRvIGFsbG93IHJ1bnRpbWUgbWFuaXB1bGF0aW9uIG9mIHRoZXNlIAorcGFyYW1ldGVycy4gIGZvciBhIGNvcHkgZW1haWw6IHR3b2xsZXJAY3J5c3RhbC5jaXJydXMuY29tCisKKworCitNT0RVTEVfUEFSTVMgZGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTU9EVUxFX1BBUk0oZGVmYXVsdG9yZGVyLCAiaSIpOworZGVmYXVsdG9yZGVyPU4KK3doZXJlIE4gaXMgYSB2YWx1ZSBmcm9tIDEgdG8gMTIKK1RoZSBidWZmZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZG1hIGJ1ZmZlciBmb3IgdGhlIGRyaXZlci4KK3VuZGVyIExpbnV4LCBhIHNtYWxsZXIgYnVmZmVyIGFsbG93cyBtb3JlIHJlc3BvbnNpdmVuZXNzIGZyb20gbWFueSBvZiB0aGUgCithcHBsaWNhdGlvbnMgKGUuZy4gZ2FtZXMpLiAgQSBsYXJnZXIgYnVmZmVyIGFsbG93cyBzb21lIG9mIHRoZSBhcHBzIChlc291bmQpIAordG8gbm90IHVuZGVycnVuIHRoZSBkbWEgYnVmZmVyIGFzIGVhc2lseS4gIEFzIGRlZmF1bHQsIHVzZSAzMmsgKG9yZGVyPTMpCityYXRoZXIgdGhhbiA2NGsgYXMgc29tZSBvZiB0aGUgZ2FtZXMgd29yayBtb3JlIHJlc3BvbnNpdmVseS4KKygyXk4pICogUEFHRV9TSVpFID0gYWxsb2NhdGVkIGJ1ZmZlciBzaXplCisKK01PRFVMRV9QQVJNKGNzX2RlYnVnbGV2ZWwsICJpIik7CitNT0RVTEVfUEFSTShjc19kZWJ1Z21hc2ssICJpIik7Citjc19kZWJ1Z2xldmVsPU4KK2NzX2RlYnVnbWFzaz0weE1NTU1NTU1NCit3aGVyZSBOIGlzIGEgdmFsdWUgZnJvbSAwIChubyBkZWJ1ZyBwcmludGZzKSwgdG8gOSAobWF4aW11bSkKKzB4TU1NTU1NTU0gaXMgYSBkZWJ1ZyBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENTX3h4eCBiaXRzIChzZWUgZHJpdmVyIHNvdXJjZSkuCisKK01PRFVMRV9QQVJNKGhlcmN1bGVzX2VncGlvX2Rpc2FibGUsICJpIik7CitoZXJjdWxlc19lZ3Bpb19kaXNhYmxlPU4KK3doZXJlIE4gaXMgYSAwIChlbmFibGUgZWdwaW8pLCBvciBhIDEgKGRpc2FibGUgZWdwaW8gc3VwcG9ydCkKKworTU9EVUxFX1BBUk0oaW5pdGRlbGF5LCAiaSIpOworaW5pdGRlbGF5PU4KK1RoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1pbGxlc2NvbmQgZGVsYXkgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbgorY29kZSBwcmlvciB0byBwb3dlcmluZyB1cCB0aGUgUExMLiAgT24gbGFwdG9wcyB0aGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvCithc3Npc3Qgd2l0aCBlcnJvcnMgb24gcmVzdW1lLCBtb3N0bHkgd2l0aCBJQk0gbGFwdG9wcy4gIEJhc2ljYWxseSwgaWYgdGhlIAorc3lzdGVtIGlzIGJvb3RlZCB1bmRlciBiYXR0ZXJ5IHBvd2VyIHRoZW4gdGhlIG1kZWxheSgpL3VkZWxheSgpIGZ1bmN0aW9ucyBmYWlsIHRvIAorcHJvcGVybHkgZGVsYXkgdGhlIHJlcXVpcmVkIHRpbWUuICBBbHNvLCBpZiB0aGUgc3lzdGVtIGlzIGJvb3RlZCB1bmRlciBBQyBwb3dlcgorYW5kIHRoZW4gdGhlIHBvd2VyIHJlbW92ZWQsIHRoZSBtZGVsYXkoKS91ZGVsYXkoKSBmdW5jdGlvbnMgd2lsbCBub3QgZGVsYXkgcHJvcGVybHkuCisgCitNT0RVTEVfUEFSTShwb3dlcmRvd24sICJpIik7Citwb3dlcmRvd249Tgord2hlcmUgTiBpcyAwIChkaXNhYmxlIGFueSBwb3dlcmRvd24gb2YgdGhlIGludGVybmFsIGJsb2Nrcykgb3IgMSAoZW5hYmxlIHBvd2VyZG93bikKKworCitNT0RVTEVfUEFSTShleHRlcm5hbF9hbXAsICJpIik7CitleHRlcm5hbF9hbXA9MQoraWYgTiBpcyBzZXQgdG8gMSwgdGhlbiBmb3JjZSBlbmFibGluZyB0aGUgRUFQRCBzdXBwb3J0IGluIHRoZSBwcmltYXJ5IEFDOTcgY29kZWMuCitvdmVycmlkZSB0aGUgZGV0ZWN0aW9uIGxvZ2ljIGFuZCBmb3JjZSB0aGUgZXh0ZXJuYWwgYW1wIGJpdCBpbiB0aGUgQUM5NyAweDI2IHJlZ2lzdGVyCit0byBiZSByZXNldCAoMCkuICBFQVBEIHNob3VsZCBiZSAwIGZvciBwb3dlcnVwLCBhbmQgMSBmb3IgcG93ZXJkb3duLiAgVGhlIFZUQiBTYW50YSBDcnV6CitjYXJkIGhhcyBpbnZlcnRlZCBsb2dpYywgc28gdGhlcmUgaXMgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGVzZSBjYXJkcy4KKworTU9EVUxFX1BBUk0odGhpbmtwYWQsICJpIik7Cit0aGlua3BhZD0xCitpZiBOIGlzIHNldCB0byAxLCB0aGVuIGZvcmNlIGVuYWJsaW5nIHRoZSBjbGtydW4gZnVuY3Rpb25hbGl0eS4KK0N1cnJlbnRseSwgd2hlbiB0aGUgcGFydCBpcyBiZWluZyB1c2VkLCB0aGVuIGNsa3J1biBpcyBkaXNhYmxlZCBmb3IgdGhlIGVudGlyZSBzeXN0ZW0sCitidXQgcmUtZW5hYmxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgcmVsZWFzZWQgb3IgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgb3BlbiBjb3VudC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcwIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMzhiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzAKQEAgLTAsMCArMSw3MCBAQAorL3Byb2Mvc291bmQsIC9kZXYvc25kc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9zb3VuZCBhbmQgL2Rldi9zbmRzdGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCitkcml2ZXIuIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGRyaXZlciBzdWNjZWVkZWQgbG9hZGluZywKK2NoZWNrIHRoZSBrZXJuZWwgbG9nIChkbWVzZykuCisKKworQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzLgorQUxhdyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4gb3BlbmluZyBhIHNvdW5kIGRldmljZQordXNpbmcgT1NTL0ZyZWUuIFRoZSByZWFzb24gZm9yIHRoZSBsYWNrIG9mIHN1cHBvcnQgaXMKK3RoYXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cywgYW5kIGFkZGluZworY29udmVyc2lvbiByb3V0aW5lcyB0byB0aGUga2VybmVsIHdvdWxkIGxlYWQgdG8gdmVyeSB1Z2x5Citjb2RlIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW1hcCBpbnRlcmZhY2UgdG8gdGhlIGRyaXZlci4KK0FuZCBzaW5jZSB4cXVha2UgdXNlcyBtbWFwLCBtbWFwIGlzIGNvbnNpZGVyZWQgaW1wb3J0YW50IDotKQorYW5kIG5vIHNhbmUgYXBwbGljYXRpb24gdXNlcyBBTGF3L3VMYXcgdGhlc2UgZGF5cyBhbnl3YXkuCitJbiBzaG9ydCwgcGxheWluZyBhIFN1biAuYXUgZmlsZSBhcyBmb2xsb3dzOgorCitjYXQgbXlfZmlsZS5hdSA+IC9kZXYvZHNwCisKK2RvZXMgbm90IHdvcmsuIEluc3RlYWQsIHlvdSBtYXkgdXNlIHRoZSBwbGF5IHNjcmlwdCBmcm9tCitDaHJpcyBCYWd3ZWxsJ3Mgc294LTEyLjE0IHBhY2thZ2UgKGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb3VuZGNhcmQgZG9lcyBub3QgaGF2ZSBhbnkgaGFyZHdhcmUgTUlESSBzeW50aGVzaXplcjsKK01JREkgc3ludGhlc2lzIGhhcyB0byBiZSBkb25lIGluIHNvZnR3YXJlLiBUbyBhbGxvdyB0aGlzCit0aGUgZHJpdmVyL3NvdW5kY2FyZCBzdXBwb3J0cyB0d28gUENNICgvZGV2L2RzcCkgaW50ZXJmYWNlcy4KK1RoZSBzZWNvbmQgb25lIGdvZXMgdG8gdGhlIG1peGVyICJzeW50aCIgc2V0dGluZyBhbmQgc3VwcG9ydHMKK29ubHkgYSBsaW1pdGVkIHNldCBvZiBzYW1wbGluZyByYXRlcyAoNDQxMDAsIDIyMDUwLCAxMTAyNSwgNTUxMikuCitCeSBzZXR0aW5nIGxpbmVvdXQgdG8gMSBvbiB0aGUgZHJpdmVyIGNvbW1hbmQgbGluZQorKGVnLiBpbnNtb2QgZXMxMzcwIGxpbmVvdXQ9MSkgaXQgaXMgZXZlbiBwb3NzaWJsZSBvbiBzb21lCitjYXJkcyB0byBjb252ZXJ0IHRoZSBMSU5FSU4gamFjayBpbnRvIGEgc2Vjb25kIExJTkVPVVQgamFjaywgdGh1cworbWFraW5nIGl0IHBvc3NpYmxlIHRvIG91dHB1dCBmb3VyIGluZGVwZW5kZW50IGF1ZGlvIGNoYW5uZWxzIQorCitUaGVyZSBpcyBhIGZyZWVseSBhdmFpbGFibGUgc29mdHdhcmUgcGFja2FnZSB0aGF0IGFsbG93cworTUlESSBmaWxlIHBsYXliYWNrIG9uIHRoaXMgc291bmRjYXJkIGNhbGxlZCBUaW1pZGl0eS4KK1NlZSBodHRwOi8vd3d3LmNncy5maS9+dHQvdGltaWRpdHkvLgorCisKKworVGhvbWFzIFNhaWxlcgordC5zYWlsZXJAYWx1bW5pLmV0aHouY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE1MTI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvZXMxMzcxCkBAIC0wLDAgKzEsNjQgQEAKKy9wcm9jL3NvdW5kLCAvZGV2L3NuZHN0YXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3Byb2Mvc291bmQgYW5kIC9kZXYvc25kc3RhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorZHJpdmVyLiBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBkcml2ZXIgc3VjY2VlZGVkIGxvYWRpbmcsCitjaGVjayB0aGUga2VybmVsIGxvZyAoZG1lc2cpLgorCisKK0FMYXcvdUxhdyBzYW1wbGUgZm9ybWF0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIEFMYXcvdUxhdyBzYW1wbGUgZm9ybWF0cy4KK0FMYXcgaXMgdGhlIGRlZmF1bHQgbW9kZSB3aGVuIG9wZW5pbmcgYSBzb3VuZCBkZXZpY2UKK3VzaW5nIE9TUy9GcmVlLiBUaGUgcmVhc29uIGZvciB0aGUgbGFjayBvZiBzdXBwb3J0IGlzCit0aGF0IHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlIGZvcm1hdHMsIGFuZCBhZGRpbmcKK2NvbnZlcnNpb24gcm91dGluZXMgdG8gdGhlIGtlcm5lbCB3b3VsZCBsZWFkIHRvIHZlcnkgdWdseQorY29kZSBpbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIG1tYXAgaW50ZXJmYWNlIHRvIHRoZSBkcml2ZXIuCitBbmQgc2luY2UgeHF1YWtlIHVzZXMgbW1hcCwgbW1hcCBpcyBjb25zaWRlcmVkIGltcG9ydGFudCA6LSkKK2FuZCBubyBzYW5lIGFwcGxpY2F0aW9uIHVzZXMgQUxhdy91TGF3IHRoZXNlIGRheXMgYW55d2F5LgorSW4gc2hvcnQsIHBsYXlpbmcgYSBTdW4gLmF1IGZpbGUgYXMgZm9sbG93czoKKworY2F0IG15X2ZpbGUuYXUgPiAvZGV2L2RzcAorCitkb2VzIG5vdCB3b3JrLiBJbnN0ZWFkLCB5b3UgbWF5IHVzZSB0aGUgcGxheSBzY3JpcHQgZnJvbQorQ2hyaXMgQmFnd2VsbCdzIHNveC0xMi4xNCBwYWNrYWdlIChhdmFpbGFibGUgZnJvbSB0aGUgVVJMCitiZWxvdykgdG8gcGxheSBtYW55IGRpZmZlcmVudCBhdWRpbyBmaWxlIGZvcm1hdHMuCitUaGUgc2NyaXB0IGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgYXVkaW8gZm9ybWF0CithbmQgZG9lcyBkbyBhdWRpbyBjb252ZXJzaW9ucyBpZiBuZWNlc3NhcnkuCitodHRwOi8vaG9tZS5zcHJ5bmV0LmNvbS9zcHJ5bmV0L2NiYWd3ZWxsL3Byb2plY3RzLmh0bWwKKworCitCbG9ja2luZyB2cy4gbm9uYmxvY2tpbmcgSU8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxpa2UgT1NTL0ZyZWUgdGhpcyBkcml2ZXIgaG9ub3VycyB0aGUgT19OT05CTE9DSyBmaWxlIGZsYWcKK25vdCBvbmx5IGR1cmluZyBvcGVuLCBidXQgYWxzbyBkdXJpbmcgcmVhZCBhbmQgd3JpdGUuCitUaGlzIGlzIGFuIGVmZm9ydCB0byBtYWtlIHRoZSBzb3VuZCBkcml2ZXIgaW50ZXJmYWNlIG1vcmUKK3JlZ3VsYXIuIFRpbWlkaXR5IGhhcyBwcm9ibGVtcyB3aXRoIHRoaXM7IGEgcGF0Y2gKK2lzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuaWZlLmVlLmV0aHouY2gvfnNhaWxlci9saW51eC9wY2lhdWRpby5odG1sLgorKFRpbWlkaXR5IHBhdGNoZWQgd2lsbCBhbHNvIHJ1biBvbiBPU1MvRnJlZSkuCisKKworTUlESSBVQVJUCistLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBhIHNpbXBsZSBNSURJIFVBUlQgaW50ZXJmYWNlLCB3aXRoCitubyBpb2N0bCdzIHN1cHBvcnRlZC4KKworCitNSURJIHN5bnRoZXNpemVyCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc291bmRjYXJkIGRvZXMgbm90IGhhdmUgYW55IGhhcmR3YXJlIE1JREkgc3ludGhlc2l6ZXI7CitNSURJIHN5bnRoZXNpcyBoYXMgdG8gYmUgZG9uZSBpbiBzb2Z0d2FyZS4gVG8gYWxsb3cgdGhpcwordGhlIGRyaXZlci9zb3VuZGNhcmQgc3VwcG9ydHMgdHdvIFBDTSAoL2Rldi9kc3ApIGludGVyZmFjZXMuCisKK1RoZXJlIGlzIGEgZnJlZWx5IGF2YWlsYWJsZSBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgYWxsb3dzCitNSURJIGZpbGUgcGxheWJhY2sgb24gdGhpcyBzb3VuZGNhcmQgY2FsbGVkIFRpbWlkaXR5LgorU2VlIGh0dHA6Ly93d3cuY2dzLmZpL350dC90aW1pZGl0eS8uCisKKworCitUaG9tYXMgU2FpbGVyCit0LnNhaWxlckBhbHVtbmkuZXRoei5jaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvbXdhdmUgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9td2F2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTgzMzRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvbXdhdmUKQEAgLTAsMCArMSwxODUgQEAKKwlIb3cgdG8gdHJ5IHRvIHN1cnZpdmUgYW4gSUJNIE13YXZlIHVuZGVyIExpbnV4IFNCIGRyaXZlcnMKKworCisrCUlCTSBoYXZlIG5vdyByZWxlYXNlZCBkb2N1bWVudGF0aW9uIG9mIHNvcnRzIGFuZCBUb3JzdGVuIGlzIGJ1c3kKKwl0cnlpbmcgdG8gbWFrZSB0aGUgTXdhdmUgd29yay4gVGhpcyBpcyBub3QgaG93ZXZlciBhIHRyaXZpYWwgdGFzay4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPSywgZmlyc3QgdGhpbmcgLSB0aGUgSVJRIHByb2JsZW0gSVMgYSBwcm9ibGVtLCB3aGV0aGVyIHRoZSB0ZXN0IGlzIGJ5cGFzc2VkIG9yCitub3QuICBJdCBpcyBOT1QgYSBMaW51eCBwcm9ibGVtLCBidXQgYW4gTVdBVkUgcHJvYmxlbSB0aGF0IGlzIGZpeGVkIHdpdGggdGhlCitsYXRlc3QgTVdBVkUgcGF0Y2hlcy4gU28sIGluIG90aGVyIHdvcmRzLCBkb24ndCBieXBhc3MgdGhlIHRlc3QgZm9yIE1XQVZFUyEKKworSSBoYXZlIFdpbmRvd3MgOTUgb24gL2Rldi9oZGExLCBzd2FwIG9uIC9kZXYvaGRhMiwgYW5kIFJlZCBIYXQgNSBvbiAvZGV2L2hkYTMuCisKK1RoZSBzdGVwcywgdGhlbjoKKworICAgIEJvb3QgdG8gTGludXguIAorICAgIE1vdW50IFdpbmRvd3MgOTUgZmlsZSBzeXN0ZW0gKGFzc3VtZSBtb3VudCBwb2ludCA9IC9kb3M5NSkuCisgICAgbWtkaXIgL2Rvczk1L2xpbnV4CisgICAgbWtkaXIgL2Rvczk1L2xpbnV4L2Jvb3QKKyAgICBta2RpciAvZG9zOTUvbGludXgvYm9vdC9wYXJtcworCisgICAgQ29weSB0aGUga2VybmVsLCBhbnkgaW5pdHJkIGltYWdlLCBhbmQgbG9hZGxpbiB0byAvZG9zOTUvbGludXgvYm9vdC8uCisKKyAgICBSZWJvb3QgdG8gV2luZG93cyA5NS4KKworICAgIEVkaXQgQzovbXNkb3Muc3lzIGFuZCBhZGQgb3IgY2hhbmdlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgTG9nbz0wCisgICAgICAgIEJvb3RHVUk9MAorCisgICAgTm90ZSB0aGF0IG1zZG9zLnN5cyBpcyBhIHRleHQgZmlsZSBidXQgaXQgbmVlZHMgdG8gYmUgbWFkZSAndW5oaWRkZW4nLAorICAgIHJlYWRhYmxlIGFuZCB3cml0YWJsZSBiZWZvcmUgaXQgY2FuIGJlIGVkaXRlZC4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aAorICAgIERPUycgImF0dHJpYiIgY29tbWFuZC4KKworICAgIEVkaXQgY29uZmlnLnN5cyB0byBoYXZlIG11bHRpcGxlIGNvbmZpZyBtZW51cy4gSSBoYXZlIG9uZSBmb3Igd2luZG93cyA5NSBhbmQKKyAgICBmaXZlIGZvciBMaW51eCwgbGlrZSB0aGlzOgorLS0tLS0tLS0tLS0tCitbbWVudV0KK21lbnVpdGVtPVc5NSwgV2luZG93cyA5NQorbWVudWl0ZW09TElOVFAsIExpbnV4IC0gVGhpbmtQYWQKK21lbnVpdGVtPUxJTlRQMywgTGludXggLSBUaGlua1BhZCBDb25zb2xlCittZW51aXRlbT1MSU5ET0MsIExpbnV4IC0gRG9ja2VkCittZW51aXRlbT1MSU5ET0MzLCBMaW51eCAtIERvY2tlZCBDb25zb2xlCittZW51aXRlbT1MSU4xLCBMaW51eCAtIFNpbmdsZSBVc2VyIE1vZGUKK1JFTSBtZW51ZGVmYXVsdD1XOTUsMTAKKworW1c5NV0KKworW0xJTlRQXQorCitbTElORE9DXQorCitbTElOVFAzXQorCitbTElORE9DM10KKworW0xJTjFdCisKK1tDT01NT05dCitGSUxFUz0zMAorUkVNIFBsZWFzZSByZWFkIFJFQURNRS5UWFQgaW4gQzpcTVdXIHN1YmRpcmVjdG9yeSBiZWZvcmUgY2hhbmdpbmcgdGhlIERPUz0gc3RhdGVtZW50LgorRE9TPUhJR0gsVU1CCitERVZJQ0U9QzpcTVdXXE1BTkFHRVJcTVdENTA0MzAuRVhFCitTSEVMTD1jOlxjb21tYW5kLmNvbSAvZToyMDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbXBvcnRhbnQgdGhpbmdzIGFyZSB0aGUgU0hFTEwgYW5kIERFVklDRSBzdGF0ZW1lbnRzLgorCisgICAgVGhlbiBjaGFuZ2UgYXV0b2V4ZWMuYmF0LiBCYXNpY2FsbHkgZXZlcnl0aGluZyBpbiB0aGVyZSBvcmlnaW5hbGx5IHNob3VsZCBiZQorICAgIGRvbmUgT05MWSB3aGVuIFdpbmRvd3MgOTUgaXMgYm9vdGVkLiBUaGVuIHlvdSBhZGQgbmV3IHRoaW5ncyBzcGVjaWZpY2FsbHkKKyAgICBmb3IgTGludXguICBNaW5lIGlzIGFzIGZvbGxvd3MKKworLS0tLS0tLS0tLS0tLS0tCitARUNITyBPRkYKK2lmICIlQ09ORklHJSIgPT0gIlc5NSIgZ290byBXOTUKKworUkVNCitSRU0gTGludXggc3R1ZmYKK1JFTQorU0VUIE1XUEFUSD1DOlxNV1dcRExMO0M6XE1XV1xNV0dBTUVTO0M6XE1XV1xEU1AKK1NFVCBCTEFTVEVSPUEyMjAgSTUgRDEKK1NFVCBNV1JPT1Q9QzpcTVdXCitTRVQgTElCUEFUSD1DOlxNV1dcRExMCitTRVQgUEFUSD1DOlxXSU5ET1dTO0M6XE1XV1xETEw7CitDQUxMIE1XQVZFIFNUQVJUIE5PU0hPVworYzpcbGludXhcYm9vdFxsb2FkbGluLmV4ZSBAYzpcbGludXhcYm9vdFxwYXJtc1wlQ09ORklHJS5wYXIKKworOlc5NQorUkVNCitSRU0gV2luZG93cyA5NSBzdHVmZgorUkVNCitjOlx0b29sa2l0XGd1YXJkCitTRVQgTVNJTlBVVD1DOlxNU0lOUFVUCitTRVQgTVdQQVRIPUM6XE1XV1xETEw7QzpcTVdXXE1XR0FNRVM7QzpcTVdXXERTUAorUkVNIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBieSBET1MgZ2FtZXMgdG8gcmVjb2duaXplIFNvdW5kIEJsYXN0ZXIgaGFyZHdhcmUuCitSRU0gSWYgaGFyZHdhcmUgc2V0dGluZ3MgYXJlIGNoYW5nZWQsIHBsZWFzZSBjaGFuZ2UgdGhpcyBsaW5lIGFzIHdlbGwuCitSRU0gU2VlIHRoZSBNd2F2ZSBSRUFETUUgZmlsZSBmb3IgaW5zdHJ1Y3Rpb25zLgorU0VUIEJMQVNURVI9QTIyMCBJNSBEMQorU0VUIE1XUk9PVD1DOlxNV1cKK1NFVCBMSUJQQVRIPUM6XE1XV1xETEwKK1NFVCBQQVRIPUM6XFdJTkRPV1M7QzpcV0lORE9XU1xDT01NQU5EO0U6XE9SQVdJTjk1XEJJTjtmOlxtc2RldlxiaW47ZTpcdjMwXGJpbi5kYmc7djpcZGV2dFx2MzBcYmluO2M6XEphdmFTREtcQmluO0M6XE1XV1xETEw7CitTRVQgSU5DTFVERT1mOlxNU0RFVlxJTkNMVURFO0Y6XE1TREVWXE1GQ1xJTkNMVURFCitTRVQgTElCPUY6XE1TREVWXExJQjtGOlxNU0RFVlxNRkNcTElCCit3aW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyBidWlsZCBhIGZpbGUgaW4gYzpcbGludXhcYm9vdFxwYXJtcyBmb3IgZWFjaCBMaW51eCBjb25maWcgdGhhdCB5b3UgaGF2ZS4KKworRm9yIGV4YW1wbGUsIG15IExJTkRPQzMgY29uZmlnIGlzIGZvciBhIGRvY2tlZCBUaGlua3BhZCBhdCBydW5sZXZlbCAzIHdpdGggbm8KK2luaXRyZCBpbWFnZSwgYW5kIGhhcyBhIHBhcmFtZXRlciBmaWxlIG5hbWVkIExJTkRPQzMuUEFSIGluIGM6XGxpbnV4XGJvb3RccGFybXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgTE9BRExJTiBAcGFyYW1fZmlsZSBpbWFnZT1vdGhlcl9pbWFnZSByb290PS9kZXYvb3RoZXIKKyMKKyMJTGludXggQ29uc29sZSBpbiBkb2NraW5nIHN0YXRpb24KKyMKK2M6XGxpbnV4XGJvb3RcekltYWdlLmtybiAgICAgICAgIyBGaXJzdCB2YWx1ZSBtdXN0IGJlIGZpbGVuYW1lIG9mIExpbnV4IGtlcm5lbC4KK3Jvb3Q9L2Rldi9oZGEzICAgICAgICAgICAgICAgICAgIyBkZXZpY2Ugd2hpY2ggZ2V0cyBtb3VudGVkIGFzIHJvb3QgRlMKK3JvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPdGhlciBrZXJuZWwgYXJndW1lbnRzIGdvIGhlcmUuCithcG09b2ZmCitkb2M9eWVzCiszCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZG9jPXllcyBwYXJhbWV0ZXIgaXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdXNlZCBieSBteSBpbml0IHNjcmlwdHMsIG5vdAorYSBrZXJuZWwgYXJndW1lbnQuCisKK0hvd2V2ZXIsIHRoZSBhcG09b2ZmIHBhcmFtZXRlciBJUyBhIGtlcm5lbCBhcmd1bWVudCEgIEFQTSwgYXQgbGVhc3QgaW4gbXkgc2V0dXAsCitjYXVzZXMgdGhlIGtlcm5lbCB0byBjcmFzaCB3aGVuIGxvYWRlZCB2aWEgbG9hZGxpbiAoYnV0IE5PVCB3aGVuIGxvYWRlZCB2aWEKK0xJTE8pLiBUaGUgQVBNIHN0dWZmIENPVUxEIGJlIGZvcmNlZCBvdXQgb2YgdGhlIGtlcm5lbCB2aWEgdGhlIGtlcm5lbCBjb21waWxlCitvcHRpb25zLiBJbnN0ZWFkLCBJIGdvdCBhbiB1bm9mZmljaWFsIHBhdGNoIHRvIHRoZSBBUE0gZHJpdmVycyB0aGF0IGFsbG93cyB0aGVtCit0byBiZSBkeW5hbWljYWxseSBkZWFjdGl2YXRlZCB2aWEga2VybmVsIGFyZ3VtZW50cy4gV2hhdGV2ZXIgeW91IGNob3NlIHRvCitkb2N1bWVudCwgQVBNLCBpdCBzZWVtcywgTVVTVCBiZSBvZmYgZm9yIHNldHVwcyBsaWtlIG1pbmUuCisKK05vdyBtYWtlIHN1cmUgQzpcTVdXXE1XQ09ORklHLlJFRiBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tOYXRpdmVET1NdCitEZWZhdWx0PVNCMS41CitTQklucHV0U291cmNlPUNECitTWU5USD1GTQorUVNvdW5kPU9GRgorUmV2ZXJiPU9GRgorQ2hvcnVzPU9GRgorUmV2ZXJiRGVwdGg9NQorQ2hvcnVzRGVwdGg9NQorU0JJbnB1dFZvbHVtZT01CitTQk1haW5Wb2x1bWU9MTAKK1NCV2F2ZVZvbHVtZT0xMAorU0JTeW50aFZvbHVtZT0xMAorV2F2ZVRhYmxlVm9sdW1lPTEwCitBdWRpb1Bvd2VyRHJpdmVyPU9OCisKK1tGYXN0Q0ZHXQorU2hvdz1ObworSGlkZU9wdGlvbj1PZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09SIHRoZSBEZWZhdWx0PSBsaW5lIENPVUxEIGJlCisKK0RlZmF1bHQ9U0JQUk8KKworUmVib290IHRvIFdpbmRvd3MgOTUgYW5kIGNob29zZSBMaW51eC4gV2hlbiBib290ZWQsIHVzZSBzbmRjb25maWcgdG8gY29uZmlndXJlCit0aGUgc291bmQgbW9kdWxlcyBhbmQgdm9pbOAgLSBUaGlua1BhZCBzb3VuZCB3aXRoIExpbnV4LgorCitOb3cgdGhlIGdvdGNoYXMgLSB5b3UgY2FuIGVpdGhlciBoYXZlIENEIHNvdW5kIE9SIE1peGVycyBidXQgbm90IGJvdGguIFRoYXQncyBhCitwcm9ibGVtIHdpdGggdGhlIFNCMS41IChDRCBzb3VuZCkgb3IgU0JQUk8gKE1peGVycykgc2V0dGluZ3MuIE5vIG9uZSBrbm93cyB3aHkKK3RoaXMgaXMhCisKK0ZvciBzb21lIHJlYXNvbiBNUEVHMyBmaWxlcywgd2hlbiBwbGF5ZWQgdGhyb3VnaCBtcGcxMjMsIHNvdW5kIGxpa2UgdGhleQorYXJlIHBsYXlpbmcgYXQgMS84dGggc3BlZWQgLSBub3QgdmVyeSB1c2VmdWwhICBJZiB5b3UgaGF2ZSBBTlkgaW5zaWdodAorb24gd2h5IHRoaXMgc2Vjb25kIHRoaW5nIG1pZ2h0IGJlIGhhcHBlbmluZywgSSB3b3VsZCBiZSBncmF0ZWZ1bC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBfLyAgICAgIF8vXy9fL18vCisgICBfL18vICBfL18vICAgICBfLworICBfLyBfL18vIF8vXy9fL18vICAgICAgTWFydGluIEpvaG4gQmFydGxldHQKKyBfLyAgXy8gIF8vICAgICBfLyAgICAgIChtYXJ0aW5Abml0cmFtLmRlbW9uLmNvLnVrKQorXy8gICAgICBfL18vXy9fLworICAgICAgIF8vCitfLyAgICBfLworIF8vXy8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9ybWU5Nnh4IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvcm1lOTZ4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q3YjdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvcm1lOTZ4eApAQCAtMCwwICsxLDc2NyBAQAorQmV0YSByZWxlYXNlIG9mIHRoZSBybWU5Nnh4IChkcml2ZXIgZm9yIFJNRSA5NlhYIGNhcmRzIGxpa2UgdGhlIAorIkhhbW1lcmZhbGwiIGFuZCB0aGUgIkhhbW1lcmZhbGwgbGlnaHQiKSAKKworSW1wb3J0YW50OiBUaGUgZHJpdmVyIG1vZHVsZSBoYXMgdG8gYmUgaW5zdGFsbGVkIG9uIGEgZnJlc2hseSByZWJvb3RlZCBzeXN0ZW0sIAorb3RoZXJ3aXNlIHRoZSBkcml2ZXIgbWlnaHQgbm90IGJlIGFibGUgdG8gYWNxdWlyZSBpdHMgYnVmZmVycy4KKworZmVhdHVyZXM6CisKKyAtIE9TUyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKGkuZS4gcnVucyB3aXRoIHN0YW5kYXJkIE9TUyBzb3VuZHNvZnR3YXJlKSAKKyAtIE9TUy9NdWx0aWNoYW5uZWwgaW50ZXJmYWNlIChPU1MgbXVsdGljaGFubmVsIGlzIGRvbmUgYnkganVzdCBhcXVpcmluZworICAgbW9yZSB0aGFuIDIgY2hhbm5lbHMpLiBUaGUgZHJpdmVyIGRvZXMgbm90IHVzZSBtb3JlIHRoYW4gb25lIGRldmljZSAKKyAgICggeWV0IC4uIHRoaXMgZmVhdHVyZSBtYXkgYmUgaW1wbGVtZW50ZWQgbGF0ZXIgKSAKKyAtIG1vcmUgdGhhbiBvbmUgUk1FIGNhcmQgc3VwcG9ydGVkCisKK1RoZSBkcml2ZXIgdXNlcyBhIHNwZWNpZmljIG11bHRpY2hhbm5lbCBpbnRlcmZhY2UsIHdoaWNoIEkgd2lsbCBkb2N1bWVudAord2hlbiB0aGUgZHJpdmVyIGdldHMgc3RhYmxlLiAodGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluZXMgaW4gcm1lOTZ4eC5oLAord2hpY2ggYWRkcyBibG9ja2VkIG11bHRpY2hhbm5lbCBmb3JtYXRzIGkuZSBpbnN0ZWFkIG9mIAorbHJscmxybHIgLS0+IGxsbGxycnJyICBldGMuCisKK1VzZSB0aGUgInJtZWN0cmwiIHByb2dyYW1tIHRvIGxvb2sgYXQgdGhlIHN0YXR1cyBvZiB0aGUgY2FyZCAuLiAKK29yIHVzZSB4cm1lY3RybCwgYSBHVUkgaW50ZXJmYWNlIGZvciB0aGUgY3RybCBwcm9ncmFtLgorCitXaGF0IHlvdSBjYW4gZG8gd2l0aCB0aGUgcm1lY3RybCBwcm9ncmFtIGlzIHRvIHNldCB0aGUgc3RlcmVvIGRldmljZSBmb3IKK09TUyBlbXVsYXRpb24gKGUuZy4gaWYgeW91IHVzZSBTUERJRiBvdXQpLgorCitZb3UgZG86CisKKy4vY3RybCBvZmZzZXQgMjQgMjQKKword2hpY2ggbWFrZXMgdGhlIHN0ZXJlbyBkZXZpY2UgdXNlIGNoYW5uZWxzIDI1IGFuZCAyNi4KKworR3VlbnRlciBHZWlnZXIgPGdlaWdlckBlcHkuY28uYXQ+CisKK2NvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGF0dGFjaGVkIHNvdXJjZSBjb2RlIGludG8gcm1lY3RybC5jCithbmQgdGhlICBzZWNvbmQgcGFydCBpbnRvIHhybWVjdHJsIChvciBnZXQgdGhlIHByb2dyYW0gZnJvbQoraHR0cDovL2dpZ2UueGR2Lm9yZy9wYWdlcy9zb2Z0L3BhZ2VzL3JtZSkKKwordG8gY29tcGlsZTogZ2NjIC1vIHJtZWN0cmwgcm1lY3RybC5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc25pcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJybWU5Nnh4LmgiCisKKy8qCisgIHJlbWN0cmwuYworICAoQykgMjAwMCBHdWVudGVyIEdlaWdlciA8Z2VpZ2VyQGRlYmlhbi5vcmc+CisgIEhQMjAwMjAyMDEgLSBIZWlrbyBQdXJuaGFnZW4gPHB1cm5oYWdlQHRudC51bmktaGFubm92ZXIuZGU+CisqLworCisvKiAjIGRlZmluZSBERVZJQ0VfTkFNRSAiL2Rldi9taXhlciIgKi8KKyMgZGVmaW5lIERFVklDRV9OQU1FICIvZGV2L21peGVyMSIKKworCit2b2lkIHVzYWdlKHZvaWQpCit7CisgICAgIGZwcmludGYoc3RkZXJyLCJ1c2FnZTogcm1lY3RybCBbL2Rldi9taXhlcjxuPl0gW2NvbW1hbmQgW29wdGlvbnNdXVxuXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIndoZXJlIGNvbW1hbmQgaXMgb25lIG9mOlxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIGhlbHAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgc2hvdyBzdGF0dXMgYml0c1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIGNvbnRyb2wgICAgICAgICAgICAgICAgICAgIHNob3cgY29udHJvbCBiaXRzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgbWl4ICAgICAgICAgICAgICAgICAgICAgICAgc2hvdyBtaXhlci9vZmZzZXQgc3RhdHVzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgbWFzdGVyIDxuPiAgICAgICAgICAgICAgICAgc2V0IHN5bmMgbWFzdGVyXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgcHJvIDxuPiAgICAgICAgICAgICAgICAgICAgc2V0IHNwZGlmIG91dCBwcm9cbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwiICBlbXBoYXNpcyA8bj4gICAgICAgICAgICAgICBzZXQgc3BkaWYgb3V0IGVtcGhhc2lzXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgZG9sYnkgPG4+ICAgICAgICAgICAgICAgICAgc2V0IHNwZGlmIG91dCBubyBhdWRpb1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIG9wdG91dCA8bj4gICAgICAgICAgICAgICAgIHNldCBzcGRpZiBvdXQgb3B0aWNhbFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIHdvcmRjbG9jayA8bj4gICAgICAgICAgICAgIHNldCBzeW5jIHdvcmRjbG9ja1xuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCIgIHNwZGlmaW4gPG4+ICAgICAgICAgICAgICAgIHNldCBzcGRpZiBpbiAoMD1vcHRpY2FsLDE9Y29heCwyPWludGVybilcbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwiICBzeW5jcmVmIDxuPiAgICAgICAgICAgICAgICBzZXQgc3luYyBzb3VyY2UgKDA9QURBVDEsMT1BREFUMiwyPUFEQVQzLDM9U1BESUYpXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgYWRhdDFjZCA8bj4gICAgICAgICAgICAgICAgc2V0IEFEQVQxIG9uIGludGVybmFsIENEXG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsIiAgb2Zmc2V0IDxkZXZucj4gPGluPiA8b3V0PiAgc2V0IGRldiAoMC4uMykgb2Zmc2V0ICgwLi4yNSlcbiIpOworICAgICBleGl0KC0xKTsKK30KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgICBpbnQgY2FyZHM7CisgICAgIGludCByZXQ7CisgICAgIGludCBpOworICAgICBkb3VibGUgZnQ7CisgICAgIGludCBmZCwgZmR3cjsKKyAgICAgaW50IHBhcmFtLG9yaWc7CisgICAgIHJtZV9zdGF0dXNfdCBzdGF0OworICAgICBybWVfY3RybF90IGN0cmw7CisgICAgIGNoYXIgKmRldmljZTsKKyAgICAgaW50IGFyZ2lkeDsKKworICAgICBpZiAoYXJnYyA8IDIpCisJICB1c2FnZSgpOworCisgICAgIGlmICgqYXJndlsxXT09Jy8nKSB7CisJICBkZXZpY2UgPSBhcmd2WzFdOworCSAgYXJnaWR4ID0gMjsKKyAgICAgfQorICAgICBlbHNlIHsKKwkgIGRldmljZSA9IERFVklDRV9OQU1FOworCSAgYXJnaWR4ID0gMTsKKyAgICAgfQorCisgICAgIGZwcmludGYoc3Rkb3V0LCJtaXhlciBkZXZpY2UgJXNcbiIsZGV2aWNlKTsKKyAgICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlLE9fUkRPTkxZKSkgPCAwKSB7CisJICBmcHJpbnRmKHN0ZG91dCwib3BlbmluZyBkZXZpY2UgZmFpbGVkXG4iKTsKKwkgIGV4aXQoLTEpOworICAgICB9CisKKyAgICAgaWYgKChmZHdyID0gb3BlbihkZXZpY2UsT19XUk9OTFkpKSA8IDApIHsKKwkgIGZwcmludGYoc3Rkb3V0LCJvcGVuaW5nIGRldmljZSBmYWlsZWRcbiIpOworCSAgZXhpdCgtMSk7CisgICAgIH0KKworICAgICBpZiAoYXJnYyA8IGFyZ2lkeCsxKQorCSAgdXNhZ2UoKTsKKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sImhlbHAiKSkKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCItaCIpKQorICAgICAgICB1c2FnZSgpOworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIi0taGVscCIpKQorICAgICAgICB1c2FnZSgpOworCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwic3RhdHVzIikpIHsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUyLCZzdGF0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LmlycSAlZFxuIixzdGF0LmlycSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5sb2NrbWFzayAlZFxuIixzdGF0LmxvY2ttYXNrKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LnNyNDggJWRcbiIsc3RhdC5zcjQ4KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LndjbG9jayAlZFxuIixzdGF0LndjbG9jayk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5idWZwb2ludCAlZFxuIixzdGF0LmJ1ZnBvaW50KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LnN5bmNtYXNrICVkXG4iLHN0YXQuc3luY21hc2spOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQuZG91Ymxlc3BlZWQgJWRcbiIsc3RhdC5kb3VibGVzcGVlZCk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC50Y19idXN5ICVkXG4iLHN0YXQudGNfYnVzeSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC50Y19vdXQgJWRcbiIsc3RhdC50Y19vdXQpOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQuY3J5c3RhbHJhdGUgJWQgKDA9NjRrIDM9OTZrIDQ9ODguMmsgNT00OGsgNj00NC4xayA3PTMyaylcbiIsc3RhdC5jcnlzdGFscmF0ZSk7CisJICBmcHJpbnRmKHN0ZG91dCwic3RhdC5zcGRpZl9lcnJvciAlZFxuIixzdGF0LnNwZGlmX2Vycm9yKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJzdGF0LmJ1ZmlkICVkXG4iLHN0YXQuYnVmaWQpOworCSAgZnByaW50ZihzdGRvdXQsInN0YXQudGNfdmFsaWQgJWRcbiIsc3RhdC50Y192YWxpZCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiY29udHJvbCIpKSB7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5zdGFydCAlZFxuIixjdHJsLnN0YXJ0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmxhdGVuY3kgJWQgKDA9NjQgLi4gNz04MTkyKVxuIixjdHJsLmxhdGVuY3kpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwubWFzdGVyICVkXG4iLGN0cmwubWFzdGVyKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmllICVkXG4iLGN0cmwuaWUpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3I0OCAlZFxuIixjdHJsLnNyNDgpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BhcmUgJWRcbiIsY3RybC5zcGFyZSk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5kb3VibGVzcGVlZCAlZFxuIixjdHJsLmRvdWJsZXNwZWVkKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnBybyAlZFxuIixjdHJsLnBybyk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5lbXBoYXNpcyAlZFxuIixjdHJsLmVtcGhhc2lzKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLmRvbGJ5ICVkXG4iLGN0cmwuZG9sYnkpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwub3B0X291dCAlZFxuIixjdHJsLm9wdF9vdXQpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwud29yZGNsb2NrICVkXG4iLGN0cmwud29yZGNsb2NrKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX2luICVkICgwPW9wdGljYWwsMT1jb2F4LDI9aW50ZXJuKVxuIixjdHJsLnNwZGlmX2luKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnN5bmNfcmVmICVkICgwPUFEQVQxLDE9QURBVDIsMj1BREFUMywzPVNQRElGKVxuIixjdHJsLnN5bmNfcmVmKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX3Jlc2V0ICVkXG4iLGN0cmwuc3BkaWZfcmVzZXQpOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BkaWZfc2VsZWN0ICVkXG4iLGN0cmwuc3BkaWZfc2VsZWN0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJjdHJsLnNwZGlmX2Nsb2NrICVkXG4iLGN0cmwuc3BkaWZfY2xvY2spOworCSAgZnByaW50ZihzdGRvdXQsImN0cmwuc3BkaWZfd3JpdGUgJWRcbiIsY3RybC5zcGRpZl93cml0ZSk7CisJICBmcHJpbnRmKHN0ZG91dCwiY3RybC5hZGF0MV9jZCAlZFxuIixjdHJsLmFkYXQxX2NkKTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCJtaXgiKSkgeworCSAgcm1lX21peGVyIG1peDsKKwkgIGludCBpOworCisJICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwkgICAgICAgbWl4LmRldm5yID0gaTsKKwkgICAgICAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTEsJm1peCk7CisJICAgICAgIGlmIChtaXguZGV2bnIgPT0gaSkgeworCQkgICAgZnByaW50ZihzdGRvdXQsImRldm5yICVkXG4iLG1peC5kZXZucik7CisJCSAgICBmcHJpbnRmKHN0ZG91dCwibWl4Lmlfb2Zmc2V0ICUyZCAoMC0yNSlcbiIsbWl4Lmlfb2Zmc2V0KTsKKwkJICAgIGZwcmludGYoc3Rkb3V0LCJtaXgub19vZmZzZXQgJTJkICgwLTI1KVxuIixtaXgub19vZmZzZXQpOworCSAgICAgICB9CisJICB9CisJICBleGl0ICgwKTsKKyAgICAgfQorCisvKiB0aGUgY29udHJvbCBmbGFncyAqLworCisgICAgIGlmIChhcmdjIDwgYXJnaWR4KzIpCisJICB1c2FnZSgpOworCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwibWFzdGVyIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50ZigibWFzdGVyID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwubWFzdGVyID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwicHJvIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50ZigicHJvID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwucHJvID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiZW1waGFzaXMiKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJlbXBoYXNpcyA9ICVkXG4iLHZhbCk7CisJICBjdHJsLmVtcGhhc2lzID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiZG9sYnkiKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJkb2xieSA9ICVkXG4iLHZhbCk7CisJICBjdHJsLmRvbGJ5ID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwib3B0b3V0IikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50Zigib3B0b3V0ID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwub3B0X291dCA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIndvcmRjbG9jayIpKSB7CisJICBpbnQgdmFsID0gYXRvaShhcmd2W2FyZ2lkeCsxXSk7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBwcmludGYoIndvcmRjbG9jayA9ICVkXG4iLHZhbCk7CisJICBjdHJsLndvcmRjbG9jayA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sInNwZGlmaW4iKSkgeworCSAgaW50IHZhbCA9IGF0b2koYXJndlthcmdpZHgrMV0pOworCSAgaW9jdGwoZmQsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgcHJpbnRmKCJzcGRpZmluID0gJWRcbiIsdmFsKTsKKwkgIGN0cmwuc3BkaWZfaW4gPSB2YWw7CisJICBpb2N0bChmZHdyLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgaWYgKCFzdHJjbXAoYXJndlthcmdpZHhdLCJzeW5jcmVmIikpIHsKKwkgIGludCB2YWwgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKwkgIGlvY3RsKGZkLFNPVU5EX01JWEVSX1BSSVZBVEUzLCZjdHJsKTsKKwkgIHByaW50Zigic3luY3JlZiA9ICVkXG4iLHZhbCk7CisJICBjdHJsLnN5bmNfcmVmID0gdmFsOworCSAgaW9jdGwoZmR3cixTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBleGl0ICgwKTsKKyAgICAgfQorCisgICAgIGlmICghc3RyY21wKGFyZ3ZbYXJnaWR4XSwiYWRhdDFjZCIpKSB7CisJICBpbnQgdmFsID0gYXRvaShhcmd2W2FyZ2lkeCsxXSk7CisJICBpb2N0bChmZCxTT1VORF9NSVhFUl9QUklWQVRFMywmY3RybCk7CisJICBwcmludGYoImFkYXQxY2QgPSAlZFxuIix2YWwpOworCSAgY3RybC5hZGF0MV9jZCA9IHZhbDsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTMsJmN0cmwpOworCSAgZXhpdCAoMCk7CisgICAgIH0KKworLyogc2V0dGluZyBvZmZzZXQgKi8KKworICAgICBpZiAoYXJnYyA8IGFyZ2lkeCs0KQorCSAgdXNhZ2UoKTsKKworICAgICBpZiAoIXN0cmNtcChhcmd2W2FyZ2lkeF0sIm9mZnNldCIpKSB7CisJICBybWVfbWl4ZXIgbWl4OworCisJICBtaXguZGV2bnIgPSBhdG9pKGFyZ3ZbYXJnaWR4KzFdKTsKKworCSAgbWl4Lmlfb2Zmc2V0ID0gYXRvaShhcmd2W2FyZ2lkeCsyXSk7CisJICBtaXgub19vZmZzZXQgPSBhdG9pKGFyZ3ZbYXJnaWR4KzNdKTsKKwkgIGlvY3RsKGZkd3IsU09VTkRfTUlYRVJfUFJJVkFURTEsJm1peCk7CisJICBmcHJpbnRmKHN0ZG91dCwiZGV2bnIgJWRcbiIsbWl4LmRldm5yKTsKKwkgIGZwcmludGYoc3Rkb3V0LCJtaXguaV9vZmZzZXQgdG8gJWRcbiIsbWl4Lmlfb2Zmc2V0KTsKKwkgIGZwcmludGYoc3Rkb3V0LCJtaXgub19vZmZzZXQgdG8gJWRcbiIsbWl4Lm9fb2Zmc2V0KTsKKwkgIGV4aXQgKDApOworICAgICB9CisKKyAgICAgdXNhZ2UoKTsKKyAgICAgZXhpdCAoMCk7IC8qIHRvIGF2b2lkIHdhcm5pbmcgKi8KK30KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDxzbmlwPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvdXNyL2Jpbi93aXNoCisKKyMgeHJtZWN0cmwKKyMgKEMpIDIwMDAgR3VlbnRlciBHZWlnZXIgPGdlaWdlckBkZWJpYW4ub3JnPgorIyBIUDIwMDIwMjAxIC0gSGVpa28gUHVybmhhZ2VuIDxwdXJuaGFnZUB0bnQudW5pLWhhbm5vdmVyLmRlPgorCisjc2V0IGRlZmF1bHRzICItcmVsaWVmIHJpZGdlZCIKK3NldCBDVFJMUFJPRyAiLi9ybWVjdHJsIgoraWYgeyRhcmdjfSB7CisgICAgc2V0IENUUkxQUk9HICIkQ1RSTFBST0cgJGFyZ3YiCit9CitwdXRzICJDVFJMUFJPRyAkQ1RSTFBST0ciCisKK2ZyYW1lIC5idXR0cworYnV0dG9uIC5idXR0cy5leGl0IC10ZXh0ICJFeGl0IiAtY29tbWFuZCAiZXhpdCIgLXJlbGllZiByaWRnZQorI2J1dHRvbiAuYnV0dHMuc3RhdGUgLXRleHQgIlN0YXRlIiAtY29tbWFuZCAiZ2V0X2FsbCIKKworcGFjayAuYnV0dHMuZXhpdCAtc2lkZSBsZWZ0CitwYWNrIC5idXR0cyAtc2lkZSBib3R0b20KKworCisjCisjIFNUQVRVUworIworCitmcmFtZSAuc3RhdHVzCisKKyMgU2FtcGxpbmcgUmF0ZQorCitmcmFtZSAuc3RhdHVzLnNyCitsYWJlbCAuc3RhdHVzLnNyLnRleHQgLXRleHQgIlNhbXBsaW5nIFJhdGUiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5zdGF0dXMuc3IuNDQxIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjQ0LjEga0h6IiAtd2lkdGggMTAgLWFuY2hvciBudyAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDQ0MTAwIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuc3RhdHVzLnNyLjQ4MCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI0OCBrSHoiIC13aWR0aCAxMCAtYW5jaG9yIG53IC12YXJpYWJsZSBzcmF0ZSAtdmFsdWUgNDgwMDAgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5zdGF0dXMuc3IuODgyIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjg4LjIga0h6IiAtd2lkdGggMTAgLWFuY2hvciBudyAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDg4MjAwIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuc3RhdHVzLnNyLjk2MCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI5NiBrSHoiIC13aWR0aCAxMCAtYW5jaG9yIG53ICAtdmFyaWFibGUgc3JhdGUgLXZhbHVlIDk2MDAwIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5zci50ZXh0IC5zdGF0dXMuc3IuNDQxIC5zdGF0dXMuc3IuNDgwIC5zdGF0dXMuc3IuODgyIC5zdGF0dXMuc3IuOTYwIC1zaWRlIHRvcCAtcGFkeCAzCisKKyMgTG9jaworCitmcmFtZSAuc3RhdHVzLmxvY2sKK2xhYmVsIC5zdGF0dXMubG9jay50ZXh0IC10ZXh0ICJMb2NrIiAtanVzdGlmeSBsZWZ0CitjaGVja2J1dHRvbiAuc3RhdHVzLmxvY2suYWRhdDEgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSBhZGF0bG9jazEgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMubG9jay5hZGF0MiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJBREFUMiIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIGFkYXRsb2NrMiAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5sb2NrLmFkYXQzIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIkFEQVQzIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgYWRhdGxvY2szIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5sb2NrLnRleHQgLnN0YXR1cy5sb2NrLmFkYXQxIC5zdGF0dXMubG9jay5hZGF0MiAuc3RhdHVzLmxvY2suYWRhdDMgLXNpZGUgdG9wIC1wYWR4IDMgCisKKyMgU3luYworCitmcmFtZSAuc3RhdHVzLnN5bmMKK2xhYmVsIC5zdGF0dXMuc3luYy50ZXh0IC10ZXh0ICJTeW5jIiAtanVzdGlmeSBsZWZ0CitjaGVja2J1dHRvbiAuc3RhdHVzLnN5bmMuYWRhdDEgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSBhZGF0c3luYzEgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMuc3luYy5hZGF0MiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJBREFUMiIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIGFkYXRzeW5jMiAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5zeW5jLmFkYXQzIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIkFEQVQzIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgYWRhdHN5bmMzIC1mb250IHRpbWVzCisKK3BhY2sgLnN0YXR1cy5zeW5jLnRleHQgLnN0YXR1cy5zeW5jLmFkYXQxIC5zdGF0dXMuc3luYy5hZGF0MiAuc3RhdHVzLnN5bmMuYWRhdDMgLXNpZGUgdG9wIC1wYWR4IDMgCisKKyMgVGltZWNvZGUKKworZnJhbWUgLnN0YXR1cy50YworbGFiZWwgLnN0YXR1cy50Yy50ZXh0IC10ZXh0ICJUaW1lY29kZSIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLnN0YXR1cy50Yy5idXN5IC1zZWxlY3Rjb2xvciByZWQgLXRleHQgImJ1c3kiIC1hbmNob3IgbncgLXdpZHRoIDEwIC12YXJpYWJsZSB0Y2J1c3kgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5zdGF0dXMudGMub3V0IC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIm91dCIgLWFuY2hvciBudyAtd2lkdGggMTAgLXZhcmlhYmxlIHRjb3V0IC1mb250IHRpbWVzCitjaGVja2J1dHRvbiAuc3RhdHVzLnRjLnZhbGlkIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgInZhbGlkIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgdGN2YWxpZCAtZm9udCB0aW1lcworCitwYWNrIC5zdGF0dXMudGMudGV4dCAuc3RhdHVzLnRjLmJ1c3kgLnN0YXR1cy50Yy5vdXQgLnN0YXR1cy50Yy52YWxpZCAtc2lkZSB0b3AgLXBhZHggMyAKKworIyBTUERJRiBJbgorCitmcmFtZSAuc3RhdHVzLnNwZGlmCitsYWJlbCAuc3RhdHVzLnNwZGlmLnRleHQgLXRleHQgIlNQRElGIEluIiAtanVzdGlmeSBsZWZ0CitsYWJlbCAuc3RhdHVzLnNwZGlmLnNyIC10ZXh0ICItLS4tIGtIeiIgLWFuY2hvciBuIC13aWR0aCAxMCAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLnN0YXR1cy5zcGRpZi5lcnJvciAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICJJbnB1dCBMb2NrIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtdmFyaWFibGUgc3BkaWZlcnIgLWZvbnQgdGltZXMKKworcGFjayAuc3RhdHVzLnNwZGlmLnRleHQgLnN0YXR1cy5zcGRpZi5zciAuc3RhdHVzLnNwZGlmLmVycm9yIC1zaWRlIHRvcCAtcGFkeCAzIAorCitwYWNrIC5zdGF0dXMuc3IgLnN0YXR1cy5sb2NrIC5zdGF0dXMuc3luYyAuc3RhdHVzLnRjIC5zdGF0dXMuc3BkaWYgLXNpZGUgbGVmdCAtZmlsbCB4IC1hbmNob3IgbiAtZXhwYW5kIDEKKworCisjCisjIENPTlRST0wgCisjCisKK3Byb2Mgc2V0cHJvZiB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwcHJvZgorICAgIGV4ZWMgJENUUkxQUk9HIHBybyAkc3Bwcm9mCit9CisKK3Byb2Mgc2V0ZW1waCB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwZW1waAorICAgIGV4ZWMgJENUUkxQUk9HIGVtcGhhc2lzICRzcGVtcGgKK30KKworcHJvYyBzZXRub2F1ZCB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHNwbm9hdWQKKyAgICBleGVjICRDVFJMUFJPRyBkb2xieSAkc3Bub2F1ZAorfQorCitwcm9jIHNldG9wdGljYWwge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBzcG9wdGljYWwKKyAgICBleGVjICRDVFJMUFJPRyBvcHRvdXQgJHNwb3B0aWNhbAorfQorCitwcm9jIHNldHNwZGlmaW4ge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBzcGRpZmluCisgICAgZXhlYyAkQ1RSTFBST0cgc3BkaWZpbiBbZXhwciAkc3BkaWZpbiAtIDFdCit9CisKK3Byb2Mgc2V0c3luY3NvdXJjZSB7fSB7CisgICAgZ2xvYmFsIENUUkxQUk9HCisgICAgZ2xvYmFsIHN5bmNzb3VyY2UKKyAgICBleGVjICRDVFJMUFJPRyBzeW5jcmVmIFtleHByICRzeW5jc291cmNlIC0xXQorfQorCisKK3Byb2Mgc2V0bWFzdGVyIHt9IHsKKyAgICBnbG9iYWwgQ1RSTFBST0cKKyAgICBnbG9iYWwgbWFzdGVyCisgICAgZXhlYyAkQ1RSTFBST0cgbWFzdGVyICRtYXN0ZXIKK30KKworcHJvYyBzZXR3b3JkY2xvY2sge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCB3b3JkY2xvY2sKKyAgICBleGVjICRDVFJMUFJPRyB3b3JkY2xvY2sgJHdvcmRjbG9jaworfQorCitwcm9jIHNldGFkYXQxY2Qge30geworICAgIGdsb2JhbCBDVFJMUFJPRworICAgIGdsb2JhbCBhZGF0MWNkCisgICAgZXhlYyAkQ1RSTFBST0cgYWRhdDFjZCAkYWRhdDFjZAorfQorCisKK2ZyYW1lIC5jb250cm9sCisKKyMgU1BESUYgSW4gJiBTUERJRiBPdXQKKworCitmcmFtZSAuY29udHJvbC5zcGRpZgorCitmcmFtZSAuY29udHJvbC5zcGRpZi5pbgorbGFiZWwgLmNvbnRyb2wuc3BkaWYuaW4udGV4dCAtdGV4dCAiU1BESUYgSW4iIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLnNwZGlmLmluLmlucHV0MSAtdGV4dCAiT3B0aWNhbCIgLWFuY2hvciBudyAtd2lkdGggMTMgLXZhcmlhYmxlIHNwZGlmaW4gLXZhbHVlIDEgLWNvbW1hbmQgc2V0c3BkaWZpbiAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworcmFkaW9idXR0b24gLmNvbnRyb2wuc3BkaWYuaW4uaW5wdXQyIC10ZXh0ICJDb2F4aWFsIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3BkaWZpbiAtdmFsdWUgMiAtY29tbWFuZCBzZXRzcGRpZmluIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuY29udHJvbC5zcGRpZi5pbi5pbnB1dDMgLXRleHQgIkludGVybiAiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcGRpZmluIC1jb21tYW5kIHNldHNwZGlmaW4gLXZhbHVlIDMgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKKworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYuaW4uYWRhdDFjZCAtdGV4dCAiQURBVDEgSW50ZXJuIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgYWRhdDFjZCAtY29tbWFuZCBzZXRhZGF0MWNkIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuc3BkaWYuaW4udGV4dCAuY29udHJvbC5zcGRpZi5pbi5pbnB1dDEgLmNvbnRyb2wuc3BkaWYuaW4uaW5wdXQyIC5jb250cm9sLnNwZGlmLmluLmlucHV0MyAuY29udHJvbC5zcGRpZi5pbi5hZGF0MWNkCisKK2xhYmVsIC5jb250cm9sLnNwZGlmLnNwYWNlCisKK2ZyYW1lIC5jb250cm9sLnNwZGlmLm91dAorbGFiZWwgLmNvbnRyb2wuc3BkaWYub3V0LnRleHQgLXRleHQgIlNQRElGIE91dCIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0LnBybyAtdGV4dCAiUHJvZmVzc2lvbmFsIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3Bwcm9mIC1jb21tYW5kIHNldHByb2YgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK2NoZWNrYnV0dG9uIC5jb250cm9sLnNwZGlmLm91dC5lbXBoYXNpcyAtdGV4dCAiRW1waGFzaXMiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcGVtcGggLWNvbW1hbmQgc2V0ZW1waCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0LmRvbGJ5IC10ZXh0ICJOb0F1ZGlvIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgc3Bub2F1ZCAtY29tbWFuZCBzZXRub2F1ZCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3BkaWYub3V0Lm9wdG91dCAtdGV4dCAiT3B0aWNhbCBPdXQiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzcG9wdGljYWwgLWNvbW1hbmQgc2V0b3B0aWNhbCAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworCitwYWNrIC5jb250cm9sLnNwZGlmLm91dC5vcHRvdXQgLmNvbnRyb2wuc3BkaWYub3V0LmRvbGJ5IC5jb250cm9sLnNwZGlmLm91dC5lbXBoYXNpcyAuY29udHJvbC5zcGRpZi5vdXQucHJvIC5jb250cm9sLnNwZGlmLm91dC50ZXh0IC1zaWRlIGJvdHRvbQorCitwYWNrIC5jb250cm9sLnNwZGlmLmluIC5jb250cm9sLnNwZGlmLnNwYWNlIC5jb250cm9sLnNwZGlmLm91dCAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCisjIFN5bmMgTW9kZSAmIFN5bmMgU291cmNlCisKK2ZyYW1lIC5jb250cm9sLnN5bmMKK2ZyYW1lIC5jb250cm9sLnN5bmMubW9kZQorbGFiZWwgLmNvbnRyb2wuc3luYy5tb2RlLnRleHQgLXRleHQgIlN5bmMgTW9kZSIgLWp1c3RpZnkgbGVmdAorY2hlY2tidXR0b24gLmNvbnRyb2wuc3luYy5tb2RlLm1hc3RlciAtdGV4dCAiTWFzdGVyIiAtYW5jaG9yIG53IC13aWR0aCAxMyAtdmFyaWFibGUgbWFzdGVyIC1jb21tYW5kIHNldG1hc3RlciAtc2VsZWN0Y29sb3IgYmx1ZSAtZm9udCB0aW1lcworY2hlY2tidXR0b24gLmNvbnRyb2wuc3luYy5tb2RlLndjIC10ZXh0ICJXb3JkY2xvY2siIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSB3b3JkY2xvY2sgLWNvbW1hbmQgc2V0d29yZGNsb2NrIC1zZWxlY3Rjb2xvciBibHVlIC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuc3luYy5tb2RlLnRleHQgLmNvbnRyb2wuc3luYy5tb2RlLm1hc3RlciAuY29udHJvbC5zeW5jLm1vZGUud2MKKworbGFiZWwgLmNvbnRyb2wuc3luYy5zcGFjZQorCitmcmFtZSAuY29udHJvbC5zeW5jLnNyYworbGFiZWwgLmNvbnRyb2wuc3luYy5zcmMudGV4dCAtdGV4dCAiU3luYyBTb3VyY2UiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MSAtdGV4dCAiQURBVDEiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC12YWx1ZSAxIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MiAtdGV4dCAiQURBVDIiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC12YWx1ZSAyIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MyAtdGV4dCAiQURBVDMiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXZhbHVlIDMgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLnN5bmMuc3JjLmlucHV0NCAtdGV4dCAiU1BESUYiIC1hbmNob3IgbncgLXdpZHRoIDEzIC12YXJpYWJsZSBzeW5jc291cmNlIC1jb21tYW5kIHNldHN5bmNzb3VyY2UgLXZhbHVlIDQgLXNlbGVjdGNvbG9yIGJsdWUgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5zeW5jLnNyYy5pbnB1dDQgLmNvbnRyb2wuc3luYy5zcmMuaW5wdXQzIC5jb250cm9sLnN5bmMuc3JjLmlucHV0MiAuY29udHJvbC5zeW5jLnNyYy5pbnB1dDEgLmNvbnRyb2wuc3luYy5zcmMudGV4dCAtc2lkZSBib3R0b20KKworcGFjayAuY29udHJvbC5zeW5jLm1vZGUgLmNvbnRyb2wuc3luYy5zcGFjZSAuY29udHJvbC5zeW5jLnNyYyAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCitsYWJlbCAuY29udHJvbC5zcGFjZSAtdGV4dCAiIiAtd2lkdGggMTAKKworIyBCdWZmZXIgU2l6ZQorCitmcmFtZSAuY29udHJvbC5idWYKK2xhYmVsIC5jb250cm9sLmJ1Zi50ZXh0IC10ZXh0ICJCdWZmZXIgU2l6ZSAoTGF0ZW5jeSkiIC1qdXN0aWZ5IGxlZnQKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iMSAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI2NCAoMS41IG1zKSIgLXdpZHRoIDEzIC1hbmNob3IgbncgLXZhcmlhYmxlIHNzcmF0ZSAtdmFsdWUgMSAtZm9udCB0aW1lcworcmFkaW9idXR0b24gLmNvbnRyb2wuYnVmLmIyIC1zZWxlY3Rjb2xvciByZWQgLXRleHQgIjEyOCAoMyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDIgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iMyAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIyNTYgKDYgbXMpIiAtd2lkdGggMTMgLWFuY2hvciBudyAtdmFyaWFibGUgc3NyYXRlIC12YWx1ZSAzIC1mb250IHRpbWVzCityYWRpb2J1dHRvbiAuY29udHJvbC5idWYuYjQgLXNlbGVjdGNvbG9yIHJlZCAtdGV4dCAiNTEyICgxMiBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDQgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNSAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIxMDI0ICgyMyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDUgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNiAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICIyMDQ4ICg0NiBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDYgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iNyAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI0MDk2ICg5MyBtcykiIC13aWR0aCAxMyAtYW5jaG9yIG53IC12YXJpYWJsZSBzc3JhdGUgLXZhbHVlIDcgLWZvbnQgdGltZXMKK3JhZGlvYnV0dG9uIC5jb250cm9sLmJ1Zi5iOCAtc2VsZWN0Y29sb3IgcmVkIC10ZXh0ICI4MTkyICgxODYgbXMpIiAtd2lkdGggMTMgLWFuY2hvciBudyAtdmFyaWFibGUgc3NyYXRlIC12YWx1ZSA4IC1mb250IHRpbWVzCisKK3BhY2sgLmNvbnRyb2wuYnVmLnRleHQgLmNvbnRyb2wuYnVmLmIxIC5jb250cm9sLmJ1Zi5iMiAuY29udHJvbC5idWYuYjMgLmNvbnRyb2wuYnVmLmI0IC5jb250cm9sLmJ1Zi5iNSAuY29udHJvbC5idWYuYjYgLmNvbnRyb2wuYnVmLmI3IC5jb250cm9sLmJ1Zi5iOCAtc2lkZSB0b3AgLXBhZHggMyAKKworIyBPZmZzZXQKKworZnJhbWUgLmNvbnRyb2wub2Zmc2V0CisKK2ZyYW1lIC5jb250cm9sLm9mZnNldC5pbgorbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLnRleHQgLXRleHQgIk9mZnNldCBJbiIgLWp1c3RpZnkgbGVmdAorbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLm9mZjAgLXRleHQgImRldlwjMDogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKK2xhYmVsIC5jb250cm9sLm9mZnNldC5pbi5vZmYxIC10ZXh0ICJkZXZcIzE6IC0iIC1hbmNob3IgbncgLXdpZHRoIDEwIC1mb250IHRpbWVzCitsYWJlbCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiAtdGV4dCAiZGV2XCMyOiAtIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtZm9udCB0aW1lcworbGFiZWwgLmNvbnRyb2wub2Zmc2V0LmluLm9mZjMgLXRleHQgImRldlwjMzogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5vZmZzZXQuaW4udGV4dCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMCAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMSAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiAuY29udHJvbC5vZmZzZXQuaW4ub2ZmMworCitsYWJlbCAuY29udHJvbC5vZmZzZXQuc3BhY2UKKworZnJhbWUgLmNvbnRyb2wub2Zmc2V0Lm91dAorbGFiZWwgLmNvbnRyb2wub2Zmc2V0Lm91dC50ZXh0IC10ZXh0ICJPZmZzZXQgT3V0IiAtanVzdGlmeSBsZWZ0CitsYWJlbCAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgLXRleHQgImRldlwjMDogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKK2xhYmVsIC5jb250cm9sLm9mZnNldC5vdXQub2ZmMSAtdGV4dCAiZGV2XCMxOiAtIiAtYW5jaG9yIG53IC13aWR0aCAxMCAtZm9udCB0aW1lcworbGFiZWwgLmNvbnRyb2wub2Zmc2V0Lm91dC5vZmYyIC10ZXh0ICJkZXZcIzI6IC0iIC1hbmNob3IgbncgLXdpZHRoIDEwIC1mb250IHRpbWVzCitsYWJlbCAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgLXRleHQgImRldlwjMzogLSIgLWFuY2hvciBudyAtd2lkdGggMTAgLWZvbnQgdGltZXMKKworcGFjayAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgLmNvbnRyb2wub2Zmc2V0Lm91dC5vZmYyIC5jb250cm9sLm9mZnNldC5vdXQub2ZmMSAuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgLmNvbnRyb2wub2Zmc2V0Lm91dC50ZXh0IC1zaWRlIGJvdHRvbQorCitwYWNrIC5jb250cm9sLm9mZnNldC5pbiAuY29udHJvbC5vZmZzZXQuc3BhY2UgLmNvbnRyb2wub2Zmc2V0Lm91dCAtc2lkZSB0b3AgLWZpbGwgeSAtcGFkeCAzIC1leHBhbmQgMQorCisKK3BhY2sgLmNvbnRyb2wuc3BkaWYgLmNvbnRyb2wuc3luYyAuY29udHJvbC5zcGFjZSAuY29udHJvbC5idWYgLmNvbnRyb2wub2Zmc2V0IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtYW5jaG9yIG4gLWV4cGFuZCAxCisKKworbGFiZWwgLnN0YXR1c3RleHQgLXRleHQgU3RhdHVzIC1qdXN0aWZ5IGNlbnRlciAtcmVsaWVmIHJpZGdlCitsYWJlbCAuY29udHJvbHRleHQgLXRleHQgQ29udHJvbCAtanVzdGlmeSBjZW50ZXIgLXJlbGllZiByaWRnZQorCitsYWJlbCAuc3RhdHVzc3BhY2UKK2xhYmVsIC5jb250cm9sc3BhY2UKKworcGFjayAuc3RhdHVzdGV4dCAuc3RhdHVzIC5zdGF0dXNzcGFjZSAuY29udHJvbHRleHQgLmNvbnRyb2wgLmNvbnRyb2xzcGFjZSAtc2lkZSB0b3AgLWFuY2hvciBudyAtZmlsbCBib3RoIC1leHBhbmQgMQorCisKK3Byb2MgZ2V0X2JpdCB7b3V0cHV0IHNzdHJ9IHsKKyAgICBzZXQgaWR4MSBbc3RyaW5nIGxhc3QgW2NvbmNhdCAkc3N0ciAxXSAkb3V0cHV0XQorICAgIHNldCBpZHgxIFtleHByICRpZHgxICE9IC0xXQorICAgIHJldHVybiAkaWR4MQorfQorCitwcm9jIGdldF92YWwge291dHB1dCBzc3RyfSB7CisgICAgc2V0IHZhbCBbc3RyaW5nIHdvcmRlbmQgJG91dHB1dCBbc3RyaW5nIGxhc3QgJHNzdHIgJG91dHB1dF1dIAorICAgIHNldCB2YWwgW3N0cmluZyByYW5nZSAkb3V0cHV0ICR2YWwgW2V4cHIgJHZhbCsxXV0KKyAgICByZXR1cm4gJHZhbAorfQorCitwcm9jIGdldF92YWwyIHtvdXRwdXQgc3N0cn0geworICAgIHNldCB2YWwgW3N0cmluZyB3b3JkZW5kICRvdXRwdXQgW3N0cmluZyBmaXJzdCAkc3N0ciAkb3V0cHV0XV0gCisgICAgc2V0IHZhbCBbc3RyaW5nIHJhbmdlICRvdXRwdXQgJHZhbCBbZXhwciAkdmFsKzJdXQorICAgIHJldHVybiAkdmFsCit9CisKK3Byb2MgZ2V0X2NvbnRyb2wge30geworICAgIGdsb2JhbCBzcHByb2YKKyAgICBnbG9iYWwgc3BlbXBoCisgICAgZ2xvYmFsIHNwbm9hdWQKKyAgICBnbG9iYWwgc3BvcHRpY2FsCisgICAgZ2xvYmFsIHNwZGlmaW4KKyAgICBnbG9iYWwgc3NyYXRlCisgICAgZ2xvYmFsIG1hc3RlcgorICAgIGdsb2JhbCB3b3JkY2xvY2sKKyAgICBnbG9iYWwgc3luY3NvdXJjZQorICAgIGdsb2JhbCBDVFJMUFJPRworCisgICAgc2V0IGYgW29wZW4gInwgJENUUkxQUk9HIGNvbnRyb2wiIHIrXQorICAgIHNldCBvb28gW3JlYWQgJGYgMTAwMF0KKyAgICBjbG9zZSAkZgorIyAgICBwdXRzICRvb28KKworICAgIHNldCBzcHByb2YgWyBnZXRfYml0ICRvb28gInBybyJdCisgICAgc2V0IHNwZW1waCBbIGdldF9iaXQgJG9vbyAiZW1waGFzaXMiXQorICAgIHNldCBzcG5vYXVkIFsgZ2V0X2JpdCAkb29vICJkb2xieSJdCisgICAgc2V0IHNwb3B0aWNhbCBbIGdldF9iaXQgJG9vbyAib3B0X291dCJdCisgICAgc2V0IHNwZGlmaW4gWyBleHByIFsgZ2V0X3ZhbCAkb29vICJzcGRpZl9pbiJdICsgMV0KKyAgICBzZXQgc3NyYXRlIFsgZXhwciBbIGdldF92YWwgJG9vbyAibGF0ZW5jeSJdICsgMV0KKyAgICBzZXQgbWFzdGVyIFsgZXhwciBbIGdldF92YWwgJG9vbyAibWFzdGVyIl1dCisgICAgc2V0IHdvcmRjbG9jayBbIGV4cHIgWyBnZXRfdmFsICRvb28gIndvcmRjbG9jayJdXQorICAgIHNldCBzeW5jc291cmNlIFsgZXhwciBbIGdldF92YWwgJG9vbyAic3luY19yZWYiXSArIDFdCit9CisKK3Byb2MgZ2V0X3N0YXR1cyB7fSB7CisgICAgZ2xvYmFsIHNyYXRlCisgICAgZ2xvYmFsIGN0cmxjb20KKworICAgIGdsb2JhbCBhZGF0bG9jazEKKyAgICBnbG9iYWwgYWRhdGxvY2syCisgICAgZ2xvYmFsIGFkYXRsb2NrMworCisgICAgZ2xvYmFsIGFkYXRzeW5jMQorICAgIGdsb2JhbCBhZGF0c3luYzIKKyAgICBnbG9iYWwgYWRhdHN5bmMzCisKKyAgICBnbG9iYWwgdGNidXN5CisgICAgZ2xvYmFsIHRjb3V0CisgICAgZ2xvYmFsIHRjdmFsaWQKKworICAgIGdsb2JhbCBzcGRpZmVycgorICAgIGdsb2JhbCBjcnlzdGFsCisgICAgZ2xvYmFsIC5zdGF0dXMuc3BkaWYudGV4dAorICAgIGdsb2JhbCBDVFJMUFJPRworCisKKyAgICBzZXQgZiBbb3BlbiAifCAkQ1RSTFBST0cgc3RhdHVzIiByK10KKyAgICBzZXQgb29vIFtyZWFkICRmIDEwMDBdCisgICAgY2xvc2UgJGYKKyMgICAgcHV0cyAkb29vCisKKyMgc2FtcGxlcmF0ZQorCisgICAgc2V0IGlkeDEgW3N0cmluZyBsYXN0ICJzcjQ4IDEiICRvb29dCisgICAgc2V0IGlkeDIgW3N0cmluZyBsYXN0ICJkb3VibGVzcGVlZCAxIiAkb29vXQorICAgIGlmIHskaWR4MSA+PSAwfSB7CisJc2V0IGZhY3QxIDQ4MDAwCisgICAgfSBlbHNlIHsKKwlzZXQgZmFjdDEgNDQxMDAKKyAgICB9CisKKyAgICBpZiB7JGlkeDIgPj0gMH0geworCXNldCBmYWN0MiAyCisgICAgfSBlbHNlIHsKKwlzZXQgZmFjdDIgMQorICAgIH0KKyAgICBzZXQgc3JhdGUgW2V4cHIgJGZhY3QxICogJGZhY3QyXQorIyAgIEFEQVQgbG9jaworCisgICAgc2V0IHZhbCBbZ2V0X3ZhbCAkb29vIGxvY2ttYXNrXQorICAgIHNldCBhZGF0bG9jazEgMAorICAgIHNldCBhZGF0bG9jazIgMAorICAgIHNldCBhZGF0bG9jazMgMAorICAgIGlmIHtbZXhwciAkdmFsICYgMV19IHsKKyAgICAgICBzZXQgYWRhdGxvY2szIDEKKyAgICB9CisgICAgaWYge1tleHByICR2YWwgJiAyXX0geworICAgICAgIHNldCBhZGF0bG9jazIgMQorICAgIH0KKyAgICBpZiB7W2V4cHIgJHZhbCAmIDRdfSB7CisgICAgICAgc2V0IGFkYXRsb2NrMSAxCisgICAgfQorCisjICBBREFUIHN5bmMKKyAgICBzZXQgdmFsIFtnZXRfdmFsICRvb28gc3luY21hc2tdCisgICAgc2V0IGFkYXRzeW5jMSAwCisgICAgc2V0IGFkYXRzeW5jMiAwCisgICAgc2V0IGFkYXRzeW5jMyAwCisKKyAgICBpZiB7W2V4cHIgJHZhbCAmIDFdfSB7CisgICAgICAgc2V0IGFkYXRzeW5jMyAxCisgICAgfQorICAgIGlmIHtbZXhwciAkdmFsICYgMl19IHsKKyAgICAgICBzZXQgYWRhdHN5bmMyIDEKKyAgICB9CisgICAgaWYge1tleHByICR2YWwgJiA0XX0geworICAgICAgIHNldCBhZGF0c3luYzEgMQorICAgIH0KKworIyBUQyBidXN5CisKKyAgICBzZXQgdGNidXN5IFtnZXRfYml0ICRvb28gImJ1c3kiXQorICAgIHNldCB0Y291dCBbZ2V0X2JpdCAkb29vICJvdXQiXQorICAgIHNldCB0Y3ZhbGlkIFtnZXRfYml0ICRvb28gInZhbGlkIl0KKyAgICBzZXQgc3BkaWZlcnIgW2V4cHIgW2dldF9iaXQgJG9vbyAic3BkaWZfZXJyb3IiXSA9PSAwXQorCisjICAwMDA9NjRrSHosIDEwMD04OC4ya0h6LCAwMTE9OTZrSHoKKyMgIDExMT0zMmtIeiwgMTEwPTQ0LjFrSHosIDEwMT00OGtIegorCisgICAgc2V0IHZhbCBbZ2V0X3ZhbCAkb29vIGNyeXN0YWxyYXRlXQorCisgICAgc2V0IGNyeXN0YWwgIi0tLi0ga0h6IgorICAgIGlmIHskdmFsID09IDB9IHsKKyAgICAgICAgc2V0IGNyeXN0YWwgIjY0IGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gNH0geworICAgICAgICBzZXQgY3J5c3RhbCAiODguMiBrSHoiCisgICAgfQorICAgIGlmIHskdmFsID09IDN9IHsKKyAgICAgICAgc2V0IGNyeXN0YWwgIjk2IGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gN30geworICAgICAgICBzZXQgY3J5c3RhbCAiMzIga0h6IgorICAgIH0KKyAgICBpZiB7JHZhbCA9PSA2fSB7CisgICAgICAgIHNldCBjcnlzdGFsICI0NC4xIGtIeiIKKyAgICB9CisgICAgaWYgeyR2YWwgPT0gNX0geworICAgICAgICBzZXQgY3J5c3RhbCAiNDgga0h6IgorICAgIH0KKyAgICAuc3RhdHVzLnNwZGlmLnNyIGNvbmZpZ3VyZSAtdGV4dCAkY3J5c3RhbAorfQorCitwcm9jIGdldF9vZmZzZXQge30geworICAgIGdsb2JhbCBpbm9mZnNldAorICAgIGdsb2JhbCBvdXRvZmZzZXQKKyAgICBnbG9iYWwgQ1RSTFBST0cKKworICAgIHNldCBmIFtvcGVuICJ8ICRDVFJMUFJPRyBtaXgiIHIrXQorICAgIHNldCBvb28gW3JlYWQgJGYgMTAwMF0KKyAgICBjbG9zZSAkZgorIyAgICBwdXRzICRvb28KKworICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMCBjb25maWd1cmUgLXRleHQgImRldlwjMDogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjAgY29uZmlndXJlIC10ZXh0ICJkZXZcIzA6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMSBjb25maWd1cmUgLXRleHQgImRldlwjMTogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjEgY29uZmlndXJlIC10ZXh0ICJkZXZcIzE6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMiBjb25maWd1cmUgLXRleHQgImRldlwjMjogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjIgY29uZmlndXJlIC10ZXh0ICJkZXZcIzI6IC0iCisgICAgfQorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmRldm5yKiIgJG9vb10gfSB7CisJc2V0IG9vbyBbc3RyaW5nIHJhbmdlICRvb28gW3N0cmluZyB3b3JkZW5kICRvb28gW3N0cmluZyBmaXJzdCBkZXZuciAkb29vXV0gZW5kXQorCXNldCB2YWwgW2dldF92YWwyICRvb28gaV9vZmZzZXRdCisJLmNvbnRyb2wub2Zmc2V0LmluLm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6ICR2YWwiCisJc2V0IHZhbCBbZ2V0X3ZhbDIgJG9vbyBvX29mZnNldF0KKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6ICR2YWwiCisgICAgfSBlbHNlIHsKKwkuY29udHJvbC5vZmZzZXQuaW4ub2ZmMyBjb25maWd1cmUgLXRleHQgImRldlwjMzogLSIKKwkuY29udHJvbC5vZmZzZXQub3V0Lm9mZjMgY29uZmlndXJlIC10ZXh0ICJkZXZcIzM6IC0iCisgICAgfQorfQorCisKK3Byb2MgZ2V0X2FsbCB7fSB7CitnZXRfc3RhdHVzCitnZXRfY29udHJvbAorZ2V0X29mZnNldAorfQorCisjIG1haW4KK3doaWxlIHsxfSB7CisgIGFmdGVyIDIwMAorICBnZXRfYWxsCisgIHVwZGF0ZQorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29sbzEgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9zb2xvMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUzZDQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29sbzEKQEAgLTAsMCArMSw3MCBAQAorUmVjb3JkaW5nCistLS0tLS0tLS0KKworUmVjb3JkaW5nIGRvZXMgbm90IHdvcmsgb24gdGhlIGF1dGhvcidzIGNhcmQsIGJ1dCB0aGVyZQoraXMgYXQgbGVhc3Qgb25lIHJlcG9ydCBvZiBpdCB3b3JraW5nIG9uIGxhdGVyIHNpbGljb24uCitUaGUgY2hpcCBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gZGVzY3JpYmVkIGluIHRoZSBkYXRhIHNoZWV0LAorbGlrZWx5IGR1ZSB0byBhIGNoaXAgYnVnLiBXb3JraW5nIGFyb3VuZCB0aGlzIHdvdWxkIHJlcXVpcmUKK3RoZSBoZWxwIG9mIEVTUyAoZm9yIGV4YW1wbGUgYnkgcHVibGlzaGluZyBhbiBlcnJhdGEgc2hlZXQpLAorYnV0IEVTUyBoYXMgbm90IGRvbmUgc28gc28gZmFyLgorCitBbHNvLCB0aGUgY2hpcCBvbmx5IHN1cHBvcnRzIDI0IGJpdCBhZGRyZXNzZXMgZm9yIHJlY29yZGluZywKK3doaWNoIG1lYW5zIGl0IGNhbm5vdCB3b3JrIG9uIHNvbWUgQWxwaGEgbWFpbmJvYXJkcy4KKworCisvcHJvYy9zb3VuZCwgL2Rldi9zbmRzdGF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9wcm9jL3NvdW5kIGFuZCAvZGV2L3NuZHN0YXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKK2RyaXZlci4gVG8gZmluZCBvdXQgd2hldGhlciB0aGUgZHJpdmVyIHN1Y2NlZWRlZCBsb2FkaW5nLAorY2hlY2sgdGhlIGtlcm5lbCBsb2cgKGRtZXNnKS4KKworCitBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMuCitBTGF3IGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbiBvcGVuaW5nIGEgc291bmQgZGV2aWNlCit1c2luZyBPU1MvRnJlZS4gVGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2Ygc3VwcG9ydCBpcwordGhhdCB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzLCBhbmQgYWRkaW5nCitjb252ZXJzaW9uIHJvdXRpbmVzIHRvIHRoZSBrZXJuZWwgd291bGQgbGVhZCB0byB2ZXJ5IHVnbHkKK2NvZGUgaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBtbWFwIGludGVyZmFjZSB0byB0aGUgZHJpdmVyLgorQW5kIHNpbmNlIHhxdWFrZSB1c2VzIG1tYXAsIG1tYXAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQgOi0pCithbmQgbm8gc2FuZSBhcHBsaWNhdGlvbiB1c2VzIEFMYXcvdUxhdyB0aGVzZSBkYXlzIGFueXdheS4KK0luIHNob3J0LCBwbGF5aW5nIGEgU3VuIC5hdSBmaWxlIGFzIGZvbGxvd3M6CisKK2NhdCBteV9maWxlLmF1ID4gL2Rldi9kc3AKKworZG9lcyBub3Qgd29yay4gSW5zdGVhZCwgeW91IG1heSB1c2UgdGhlIHBsYXkgc2NyaXB0IGZyb20KK0NocmlzIEJhZ3dlbGwncyBzb3gtMTIuMTQgcGFja2FnZSAob3IgbGF0ZXIsIGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgaGFzIGFuIE9QTCBjb21wYXRpYmxlIEZNIHN5bnRoZXNpemVyLgorCitUaG9tYXMgU2FpbGVyCit0LnNhaWxlckBhbHVtbmkuZXRoei5jaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvc29uaWN2aWJlcyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbmljdmliZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkZWUyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3NvbmljdmliZXMKQEAgLTAsMCArMSw4MSBAQAorL3Byb2Mvc291bmQsIC9kZXYvc25kc3RhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvcHJvYy9zb3VuZCBhbmQgL2Rldi9zbmRzdGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlCitkcml2ZXIuIFRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGRyaXZlciBzdWNjZWVkZWQgbG9hZGluZywKK2NoZWNrIHRoZSBrZXJuZWwgbG9nIChkbWVzZykuCisKKworQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgQUxhdy91TGF3IHNhbXBsZSBmb3JtYXRzLgorQUxhdyBpcyB0aGUgZGVmYXVsdCBtb2RlIHdoZW4gb3BlbmluZyBhIHNvdW5kIGRldmljZQordXNpbmcgT1NTL0ZyZWUuIFRoZSByZWFzb24gZm9yIHRoZSBsYWNrIG9mIHN1cHBvcnQgaXMKK3RoYXQgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UgZm9ybWF0cywgYW5kIGFkZGluZworY29udmVyc2lvbiByb3V0aW5lcyB0byB0aGUga2VybmVsIHdvdWxkIGxlYWQgdG8gdmVyeSB1Z2x5Citjb2RlIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgbW1hcCBpbnRlcmZhY2UgdG8gdGhlIGRyaXZlci4KK0FuZCBzaW5jZSB4cXVha2UgdXNlcyBtbWFwLCBtbWFwIGlzIGNvbnNpZGVyZWQgaW1wb3J0YW50IDotKQorYW5kIG5vIHNhbmUgYXBwbGljYXRpb24gdXNlcyBBTGF3L3VMYXcgdGhlc2UgZGF5cyBhbnl3YXkuCitJbiBzaG9ydCwgcGxheWluZyBhIFN1biAuYXUgZmlsZSBhcyBmb2xsb3dzOgorCitjYXQgbXlfZmlsZS5hdSA+IC9kZXYvZHNwCisKK2RvZXMgbm90IHdvcmsuIEluc3RlYWQsIHlvdSBtYXkgdXNlIHRoZSBwbGF5IHNjcmlwdCBmcm9tCitDaHJpcyBCYWd3ZWxsJ3Mgc294LTEyLjE0IHBhY2thZ2UgKGF2YWlsYWJsZSBmcm9tIHRoZSBVUkwKK2JlbG93KSB0byBwbGF5IG1hbnkgZGlmZmVyZW50IGF1ZGlvIGZpbGUgZm9ybWF0cy4KK1RoZSBzY3JpcHQgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhdWRpbyBmb3JtYXQKK2FuZCBkb2VzIGRvIGF1ZGlvIGNvbnZlcnNpb25zIGlmIG5lY2Vzc2FyeS4KK2h0dHA6Ly9ob21lLnNwcnluZXQuY29tL3NwcnluZXQvY2JhZ3dlbGwvcHJvamVjdHMuaHRtbAorCisKK0Jsb2NraW5nIHZzLiBub25ibG9ja2luZyBJTworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSBPU1MvRnJlZSB0aGlzIGRyaXZlciBob25vdXJzIHRoZSBPX05PTkJMT0NLIGZpbGUgZmxhZworbm90IG9ubHkgZHVyaW5nIG9wZW4sIGJ1dCBhbHNvIGR1cmluZyByZWFkIGFuZCB3cml0ZS4KK1RoaXMgaXMgYW4gZWZmb3J0IHRvIG1ha2UgdGhlIHNvdW5kIGRyaXZlciBpbnRlcmZhY2UgbW9yZQorcmVndWxhci4gVGltaWRpdHkgaGFzIHByb2JsZW1zIHdpdGggdGhpczsgYSBwYXRjaAoraXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwuCisoVGltaWRpdHkgcGF0Y2hlZCB3aWxsIGFsc28gcnVuIG9uIE9TUy9GcmVlKS4KKworCitNSURJIFVBUlQKKy0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGEgc2ltcGxlIE1JREkgVUFSVCBpbnRlcmZhY2UsIHdpdGgKK25vIGlvY3RsJ3Mgc3VwcG9ydGVkLgorCisKK01JREkgc3ludGhlc2l6ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNhcmQgYm90aCBoYXMgYW4gT1BMIGNvbXBhdGlibGUgRk0gc3ludGhlc2l6ZXIgYXMgd2VsbCBhcworYSB3YXZldGFibGUgc3ludGhlc2l6ZXIuCisKK0kgaGF2ZW4ndCBtYW5hZ2VkIHNvIGZhciB0byBnZXQgdGhlIE9QTCBzeW50aCBydW5uaW5nLgorCitVc2luZyB0aGUgd2F2ZXRhYmxlIHN5bnRoZXNpemVyIHJlcXVpcmVzIGFsbG9jYXRpbmcKKzEtNE1CIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIHdoaWNoIGlzbid0IHBvc3NpYmxlCitjdXJyZW50bHkgb24gTGludXggd2l0aG91dCB1Z2x5IGhhY2tzIGxpa2UgdGhlIGJpZ3BoeXNhcmVhCitwYXRjaC4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB3YXZldGFibGUKK3N5bnRoZXNpcy4KKworCitObyBzdXBwb3J0IGZyb20gUzMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGRvIG5vdCBnZXQgYW55IHN1cHBvcnQgZnJvbSBTMy4gVGhlcmVmb3JlLCB0aGUgZHJpdmVyCitzdGlsbCBoYXMgbWFueSBwcm9ibGVtcy4gRm9yIGV4YW1wbGUsIGFsdGhvdWdoIHRoZSBtYW51YWwKK3N0YXRlcyB0aGF0IHRoZSBjaGlwIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgc2FtcGxlCitidWZmZXIgYW55d2hlcmUgaW4gMzJiaXQgYWRkcmVzcyBzcGFjZSwgSSBoYXZlbid0IG1hbmFnZWQgdG8KK2dldCBpdCB3b3JraW5nIHdpdGggYnVmZmVycyBhYm92ZSAxNk0uIFRoZXJlZm9yZSwgdGhlIGNhcmQKK2hhcyB0aGUgc2FtZSBkaXNhZHZhbnRhZ2VzIGFzIElTQSBzb3VuZGNhcmRzLgorCitHaXZlbiB0aGF0IHRoZSBjYXJkIGlzIGFsc28gdmVyeSBub2lzeSwgYW5kIGlmIHlvdSBoYXZlbid0CithbHJlYWR5IGJvdWdodCBpdCwgeW91IHNob3VsZCBzdHJvbmdseSBvcHQgZm9yIG9uZSBvZiB0aGUKK2NvbXBhcmF0aXZlbHkgcHJpY2VkIEVuc29uaXEgcHJvZHVjdHMuCisKKworVGhvbWFzIFNhaWxlcgordC5zYWlsZXJAYWx1bW5pLmV0aHouY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3VsdHJhc291bmQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyY2Q1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy91bHRyYXNvdW5kCkBAIC0wLDAgKzEsMzAgQEAKK21vZHByb2JlIHNvdW5kCitpbnNtb2QgYWQxODQ4CitpbnNtb2QgZ3VzIGlvPSogaXJxPSogZG1hPSogLi4uCisKK1RoaXMgbG9hZHMgdGhlIGRyaXZlciBmb3IgdGhlIEdyYXZpcyBVbHRyYXNvdW5kIGZhbWlseSBvZiBzb3VuZCBjYXJkcy4KKworVGhlIGd1cyBtb2R1bGUgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKKworaW8JCUkvTyBhZGRyZXNzIG9mIHRoZSBVbHRyYXNvdW5kIGNhcmQgKGVnLiBpbz0weDIyMCkKK2lycQkJSVJRIG9mIHRoZSBTb3VuZCBCbGFzdGVyIGNhcmQgCitkbWEgICAgIAlETUEgY2hhbm5lbCBmb3IgdGhlIFNvdW5kIEJsYXN0ZXIKK2RtYTE2ICAgCTJuZCBETUEgY2hhbm5lbCwgb25seSBuZWVkZWQgZm9yIGZ1bGwgZHVwbGV4IG9wZXJhdGlvbgordHlwZQkJMSBmb3IgUG5QIGNhcmQKK2d1czE2CQkxIGZvciB1c2luZyAxNiBiaXQgc2FtcGxpbmcgZGF1Z2h0ZXIgYm9hcmQKK25vX3dhdmVfZG1hCVNldCB0byBkaXNhYmxlIERNQSB1c2FnZSBmb3Igd2F2ZXRhYmxlIChzZWUgbm90ZSkKK2RiMTYJCT8/PworCisKK25vX3dhdmVfZG1hIG9wdGlvbgorCitUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBhIHZhbHVlIG9mIDAsIHdoaWNoIGFsbG93cyB0aGUgVWx0cmFzb3VuZCB3YXZldGFibGUKK0RTUCB0byB1c2UgRE1BIGZvciBmb3IgcGxheWJhY2sgYW5kIGRvd25sb2FkaW5nIHNhbXBsZXMuIFRoaXMgaXMgdGhlIHNhbWUKK2FzIHRoZSBvbGQgYmVoYXZpb3VyLiBJZiBzZXQgdG8gMSwgbm8gRE1BIGlzIG5lZWRlZCBmb3IgZG93bmxvYWRpbmcgc2FtcGxlcywKK2FuZCBhbGxvd3Mgb3duZXJzIG9mIGEgR1VTIE1BWCB0byBtYWtlIHVzZSBvZiBzaW11bHRhbmVvdXMgZGlnaXRhbCBhdWRpbworKC9kZXYvZHNwKSwgTUlESSwgYW5kIHdhdmV0YWJsZSBwbGF5YmFjay4KKworCitJZiB5b3UgaGF2ZSBwcm9ibGVtcyBpbiByZWNvcmRpbmcgd2l0aCBHVVMgTUFYLCB5b3UgY291bGQgdHJ5IHRvIHVzZQoranVzdCBvbmUgOCBiaXQgRE1BIGNoYW5uZWwuIFJlY29yZGluZyB3aWxsIG5vdCB3b3JrIHdpdGggb25lIERNQQorY2hhbm5lbCBpZiBpdCdzIGEgMTYgYml0IG9uZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3Z3c25kIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvdndzbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYTBhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL3Z3c25kCkBAIC0wLDAgKzEsMjkzIEBACit2d3NuZCAtIFNvdW5kIGRyaXZlciBmb3IgdGhlIFNpbGljb24gR3JhcGhpY3MgMzIwIGFuZCA1NDAgVmlzdWFsCitXb3Jrc3RhdGlvbnMnIG9uYm9hcmQgYXVkaW8uCisKK0NvcHlyaWdodCAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKworQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBNYXJjaCAxOTk5LCB0aGVyZSBhcmUgdHdvIG1vZGVscyBvZgorVmlzdWFsIFdvcmtzdGF0aW9uLCB0aGUgMzIwIGFuZCB0aGUgNTQwLiAgVGhpcyBkb2N1bWVudCBvbmx5IGRlc2NyaWJlcwordGhvc2UgbW9kZWxzLiAgRnV0dXJlIFZpc3VhbCBXb3Jrc3RhdGlvbiBtb2RlbHMgbWF5IGhhdmUgZGlmZmVyZW50Citzb3VuZCBjYXBhYmlsaXRpZXMsIGFuZCB0aGlzIGRyaXZlciB3aWxsIHByb2JhYmx5IG5vdCB3b3JrIG9uIHRob3NlCitib3hlcy4KKworVGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiBoYXMgYW4gQW5hbG9nIERldmljZXMgQUQxODQzICJTb3VuZENvbW0iIGF1ZGlvCitjb2RlYyBjaGlwLiAgVGhlIEFEMTg0MyBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBDb2JhbHQgSS9PIEFTSUMsIGFsc28KK2tub3duIGFzIExpdGhpdW0uICBUaGlzIGRyaXZlciBwcm9ncmFtcyBib3RoIGJvdGggY2hpcHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUVVJQ0sgQ09ORklHVVJBVElPTgorCisJIyBpbnNtb2Qgc291bmRjb3JlCisJIyBpbnNtb2QgdndzbmQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJL08gQ09OTkVDVElPTlMKKworT24gdGhlIFZpc3VhbCBXb3Jrc3RhdGlvbiwgb25seSB0aHJlZSBvZiB0aGUgQUQxODQzIGlucHV0cyBhcmUgaG9va2VkCit1cC4gIFRoZSBhbmFsb2cgbGluZSBpbiBqYWNrcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBBRDE4NDMncyBBVVgxCitpbnB1dC4gIFRoZSBDRCBhdWRpbyBsaW5lcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBBRDE4NDMncyBBVVgyIGlucHV0LgorVGhlIG1pY3JvcGhvbmUgamFjayBpcyBjb25uZWN0ZWQgdG8gdGhlIEFEMTg0MydzIE1JQyBpbnB1dC4gIFRoZSBtaWMKK2phY2sgaXMgbW9ubywgYnV0IHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkIHRvIGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0CitNSUMgaW5wdXRzLiAgWW91IGNhbiByZWNvcmQgaW4gc3RlcmVvIGZyb20gdGhlIG1pYyBpbnB1dCwgYnV0IHlvdSB3aWxsCitnZXQgdGhlIHNhbWUgc2lnbmFsIG9uIGJvdGggY2hhbm5lbHMgKHdpdGhpbiB0aGUgbGltaXRzIG9mIEEvRAorYWNjdXJhY3kpLiAgRnVsbCBzY2FsZSBvbiB0aGUgTGluZSBpbnB1dCBpcyArLy0gMi4wIFYuICBGdWxsIHNjYWxlIG9uCit0aGUgTUlDIGlucHV0IGlzIDIwIGRCIGxlc3MsIG9yICsvLSAwLjIgVi4KKworVGhlIEFEMTg0MydzIExPVVQxIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgTGluZSBPdXQgamFja3MuICBUaGUKK0FEMTg0MydzIEhQT1VUIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgc3BlYWtlci9oZWFkcGhvbmUgamFjay4KK0xPVVQyIGlzIG5vdCBjb25uZWN0ZWQuICBMaW5lIG91dCdzIG1heGltdW0gbGV2ZWwgaXMgKy8tIDIuMCBWIHBlYWsgdG8KK3BlYWsuICBUaGUgc3BlYWtlci9oZWFkcGhvbmUgb3V0J3MgbWF4aW11bSBpcyArLy0gNC4wIFYgcGVhayB0byBwZWFrLgorCitUaGUgQUQxODQzJ3MgUENNIGlucHV0IGNoYW5uZWwgYW5kIG9uZSBvZiBpdHMgb3V0cHV0IGNoYW5uZWxzIChEQUMxKQorYXJlIGNvbm5lY3RlZCB0byBMaXRoaXVtLiAgVGhlIG90aGVyIG91dHB1dCBjaGFubmVsIChEQUMyKSBpcyBub3QKK2Nvbm5lY3RlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDQVBBQklMSVRJRVMKKworVGhlIEFEMTg0MyBoYXMgUENNIGlucHV0IGFuZCBvdXRwdXQgKFB1bHNlIENvZGUgTW9kdWxhdGlvbiwgYWxzbyBrbm93bgorYXMgd2F2ZXRhYmxlKS4gIFBDTSBpbnB1dCBhbmQgb3V0cHV0IGNhbiBiZSBtb25vIG9yIHN0ZXJlbyBpbiBhbnkgb2YKK2ZvdXIgZm9ybWF0cy4gIFRoZSBmb3JtYXRzIGFyZSAxNiBiaXQgc2lnbmVkIGFuZCA4IGJpdCB1bnNpZ25lZCwKK3UtTGF3LCBhbmQgQS1MYXcgZm9ybWF0LiAgQW55IHNhbXBsZSByYXRlIGZyb20gNCBLSHogdG8gNDkgS0h6IGlzCithdmFpbGFibGUsIGluIDEgSHogaW5jcmVtZW50cy4KKworVGhlIEFEMTg0MyBpbmNsdWRlcyBhbiBhbmFsb2cgbWl4ZXIgdGhhdCBjYW4gbWl4IGFsbCB0aHJlZSBpbnB1dAorc2lnbmFscyAobGluZSwgbWljIGFuZCBDRCkgaW50byB0aGUgYW5hbG9nIG91dHB1dHMuICBUaGUgbWl4ZXIgaGFzIGEKK3NlcGFyYXRlIGdhaW4gY29udHJvbCBhbmQgbXV0ZSBzd2l0Y2ggZm9yIGVhY2ggaW5wdXQuCisKK1RoZXJlIGFyZSB0d28gb3V0cHV0cywgbGluZSBvdXQgYW5kIHNwZWFrZXIvaGVhZHBob25lIG91dC4gIFRoZXkKK2Fsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIHNpZ25hbCwgYW5kIHRoZSBzcGVha2VyIGFsd2F5cyBoYXMgMyBkQiBtb3JlCitnYWluIHRoYW4gdGhlIGxpbmUgb3V0LiAgVGhlIHNwZWFrZXIvaGVhZHBob25lIG91dHB1dCBjYW4gYmUgbXV0ZWQsCitidXQgdGhpcyBkcml2ZXIgZG9lcyBub3QgZXhwb3J0IHRoYXQgZnVuY3Rpb24uCisKK1RoZSBoYXJkd2FyZSBjYW4gc3luYyBhdWRpbyB0byB0aGUgdmlkZW8gY2xvY2ssIGJ1dCB0aGlzIGRyaXZlciBkb2VzCitub3QgaGF2ZSBhIHdheSB0byBzcGVjaWZ5IHN5bmNpbmcgdG8gdmlkZW8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUFJPR1JBTU1JTkcKKworVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBBUEkgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuICBBbHNvIHNlZSB0aGUKK09wZW4gU291bmQgUHJvZ3JhbW1pbmcgR3VpZGUgYXQgaHR0cDovL3d3dy5vcGVuc291bmQuY29tL3BndWlkZS8gLgorVGhpcyBzZWN0aW9uIGFzc3VtZXMgZmFtaWxpYXJpdHkgd2l0aCB0aGF0IGRvY3VtZW50LgorCitUaGUgZHJpdmVyIGhhcyB0d28gaW50ZXJmYWNlcywgYW4gSS9PIGludGVyZmFjZSBhbmQgYSBtaXhlciBpbnRlcmZhY2UuCitUaGVyZSBpcyBubyBNSURJIG9yIHNlcXVlbmNlciBjYXBhYmlsaXR5LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST0dSQU1NSU5HIFBDTSBJL08KKworVGhlIEkvTyBpbnRlcmZhY2UgaXMgdXN1YWxseSBhY2Nlc3NlZCBhcyAvZGV2L2F1ZGlvIG9yIC9kZXYvZHNwLgorVXNpbmcgdGhlIHN0YW5kYXJkIE9wZW4gU291bmQgU3lzdGVtIChPU1MpIGlvY3RsIGNhbGxzLCB0aGUgc2FtcGxlCityYXRlLCBudW1iZXIgb2YgY2hhbm5lbHMsIGFuZCBzYW1wbGUgZm9ybWF0IG1heSBiZSBzZXQgd2l0aGluIHRoZQorbGltaXRhdGlvbnMgZGVzY3JpYmVkIGFib3ZlLiAgVGhlIGRyaXZlciBzdXBwb3J0cyB0cmlnZ2VyaW5nLiAgSXQgYWxzbworc3VwcG9ydHMgZ2V0dGluZyB0aGUgaW5wdXQgYW5kIG91dHB1dCBwb2ludGVycyB3aXRoIG9uZS1zYW1wbGUKK2FjY3VyYWN5LgorCitUaGUgU05EQ1RMX0RTUF9HRVRDQVAgaW9jdGwgcmV0dXJucyB0aGVzZSBjYXBhYmlsaXRpZXMuCisKKwlEU1BfQ0FQX0RVUExFWCAtIGRyaXZlciBzdXBwb3J0cyBmdWxsIGR1cGxleC4KKworCURTUF9DQVBfVFJJR0dFUiAtIGRyaXZlciBzdXBwb3J0cyB0cmlnZ2VyaW5nLgorCisJRFNQX0NBUF9SRUFMVElNRSAtIHZhbHVlcyByZXR1cm5lZCBieSBTTkRDVExfRFNQX0dFVElQVFIKKwlhbmQgU05EQ1RMX0RTUF9HRVRPUFRSIGFyZSBhY2N1cmF0ZSB0byBhIGZldyBzYW1wbGVzLgorCitNZW1vcnkgbWFwcGluZyAobW1hcCkgaXMgbm90IGltcGxlbWVudGVkLgorCitUaGUgZHJpdmVyIHBlcm1pdHMgc3ViZGl2aWRlZCBmcmFnbWVudCBzaXplcyBmcm9tIDY0IHRvIDQwOTYgYnl0ZXMuCitUaGUgbnVtYmVyIG9mIGZyYWdtZW50cyBjYW4gYmUgYW55dGhpbmcgZnJvbSAzIGZyYWdtZW50cyB0byBob3dldmVyCittYW55IGZyYWdtZW50cyBmaXQgaW50byAxMjQga2lsb2J5dGVzLiAgSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8KK2RldGVybWluZSBob3cgZmV3L3NtYWxsIGZyYWdtZW50cyBjYW4gYmUgdXNlZCB3aXRob3V0IGludHJvZHVjaW5nCitnbGl0Y2hlcyB3aXRoIGEgZ2l2ZW4gd29ya2xvYWQuICBMaW51eCBpcyBub3QgcmVhbHRpbWUsIHNvIHdlIGNhbid0Citwcm9taXNlIGFueXRoaW5nLiAgKHNpZ2guLi4pCisKK1doZW4gdGhpcyBkcml2ZXIgaXMgc3dpdGNoZWQgaW50byBvciBvdXQgb2YgbXUtTGF3IG9yIEEtTGF3IG1vZGUgb24KK291dHB1dCwgaXQgbWF5IHByb2R1Y2UgYW4gYXVkaWJsZSBjbGljay4gIFRoaXMgaXMgdW5hdm9pZGFibGUuICBUbworcHJldmVudCBjbGlja2luZywgdXNlIHNpZ25lZCAxNi1iaXQgbW9kZSBpbnN0ZWFkLCBhbmQgY29udmVydCBmcm9tCittdS1MYXcgb3IgQS1MYXcgZm9ybWF0IGluIHNvZnR3YXJlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BST0dSQU1NSU5HIFRIRSBNSVhFUiBJTlRFUkZBQ0UKKworVGhlIG1peGVyIGludGVyZmFjZSBpcyB1c3VhbGx5IGFjY2Vzc2VkIGFzIC9kZXYvbWl4ZXIuICBJdCBpcyBhY2Nlc3NlZAordGhyb3VnaCBpb2N0bHMuICBUaGUgbWl4ZXIgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBjb250cm9sIGdhaW4gb3IKK211dGUgc2V2ZXJhbCBhdWRpbyBzaWduYWwgcGF0aHMsIGFuZCBhbHNvIGFsbG93cyBzZWxlY3Rpb24gb2YgdGhlCityZWNvcmRpbmcgc291cmNlLgorCitFYWNoIG9mIHRoZSBjb25zdGFudHMgZGVzY3JpYmVkIGhlcmUgY2FuIGJlIHJlYWQgdXNpbmcgdGhlCitNSVhFUl9SRUFEKFNPVU5EX01JWEVSX3h4eCkgaW9jdGwuICBUaG9zZSB0aGF0IGFyZSBub3QgcmVhZC1vbmx5IGNhbgorYWxzbyBiZSB3cml0dGVuIHVzaW5nIHRoZSBNSVhFUl9XUklURShTT1VORF9NSVhFUl94eHgpIGlvY3RsLiAgSW4gbW9zdAorY2FzZXMsIDxzeXMvc291bmRjYXJkLmg+IGRlZmluZXMgY29uc3RhbnRzIFNPVU5EX01JWEVSX1JFQURfeHh4IGFuZAorU09VTkRfTUlYRVJfV1JJVEVfeHh4IHdoaWNoIHdvcmsganVzdCBhcyB3ZWxsLgorCitTT1VORF9NSVhFUl9DQVBTCVJlYWQtb25seQorCitUaGlzIGlzIGEgbWFzayBvZiBvcHRpb25hbCBkcml2ZXIgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGltcGxlbWVudGVkLgorVGhpcyBkcml2ZXIncyBvbmx5IGNhcGFiaWxpdHkgaXMgU09VTkRfQ0FQX0VYQ0xfSU5QVVQsIHdoaWNoIG1lYW5zCit0aGF0IG9ubHkgb25lIHJlY29yZGluZyBzb3VyY2UgY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUuCisKK1NPVU5EX01JWEVSX0RFVk1BU0sJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIHRoZSBzb3VuZCBjaGFubmVscy4gIFRoaXMgZHJpdmVyJ3MgY2hhbm5lbHMgYXJlIFBDTSwKK0xJTkUsIE1JQywgQ0QsIGFuZCBSRUNMRVYuCisKK1NPVU5EX01JWEVSX1NURVJFT0RFVlMJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIHdoaWNoIHNvdW5kIGNoYW5uZWxzIGFyZSBjYXBhYmxlIG9mIHN0ZXJlby4gIEFsbAorY2hhbm5lbHMgYXJlIGNhcGFibGUgb2Ygc3RlcmVvLiAgKEJ1dCBzZWUgY2F2ZWF0IG9uIE1JQyBpbnB1dCBpbiBJL08KK0NPTk5FQ1RJT05TIHNlY3Rpb24gYWJvdmUpLgorCitTT1VORF9NSVhFUl9PVVRNQVNLCVJlYWQtb25seQorCitUaGlzIGlzIGEgbWFzayBvZiBjaGFubmVscyB0aGF0IHJvdXRlIGlucHV0cyB0aHJvdWdoIHRvIG91dHB1dHMuCitUaG9zZSBhcmUgTElORSwgTUlDLCBhbmQgQ0QuCisKK1NPVU5EX01JWEVSX1JFQ01BU0sJUmVhZC1vbmx5CisKK1RoaXMgaXMgYSBtYXNrIG9mIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHJlY29yZGluZyBzb3VyY2VzLiAgVGhvc2UgYXJlCitQQ00sIExJTkUsIE1JQywgQ0QuCisKK1NPVU5EX01JWEVSX1BDTQkJRGVmYXVsdDogMHg1NzU3ICgwIGRCKQorCitUaGlzIGlzIHRoZSBnYWluIGNvbnRyb2wgZm9yIFBDTSBvdXRwdXQuICBUaGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbAorZ2FpbiBhcmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5LiAgVGhpcyBnYWluIGNvbnRyb2wgaGFzIDY0IGxldmVscywKK3doaWNoIHJhbmdlIGZyb20gLTgyLjUgZEIgdG8gKzEyLjAgZEIgaW4gMS41IGRCIHN0ZXBzLiAgVGhvc2UgNjQKK2xldmVscyBhcmUgbWFwcGVkIG9udG8gMTAwIGxldmVscyBhdCB0aGUgaW9jdGwsIHNlZSBiZWxvdy4KKworU09VTkRfTUlYRVJfTElORQlEZWZhdWx0OiAweDRhNGEgKDAgZEIpCisKK1RoaXMgaXMgdGhlIGdhaW4gY29udHJvbCBmb3IgbWl4aW5nIHRoZSBMaW5lIEluIHNvdXJjZSBpbnRvIHRoZQorb3V0cHV0cy4gIFRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGdhaW4gYXJlIGNvbnRyb2xsZWQKK2luZGVwZW5kZW50bHkuICBUaGlzIGdhaW4gY29udHJvbCBoYXMgMzIgbGV2ZWxzLCB3aGljaCByYW5nZSBmcm9tCistMzQuNSBkQiB0byArMTIuMCBkQiBpbiAxLjUgZEIgc3RlcHMuICBUaG9zZSAzMiBsZXZlbHMgYXJlIG1hcHBlZCBvbnRvCisxMDAgbGV2ZWxzIGF0IHRoZSBpb2N0bCwgc2VlIGJlbG93LgorCitTT1VORF9NSVhFUl9NSUMJCURlZmF1bHQ6IDB4NGE0YSAoMCBkQikKKworVGhpcyBpcyB0aGUgZ2FpbiBjb250cm9sIGZvciBtaXhpbmcgdGhlIE1JQyBzb3VyY2UgaW50byB0aGUgb3V0cHV0cy4KK1RoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGdhaW4gYXJlIGNvbnRyb2xsZWQgaW5kZXBlbmRlbnRseS4gIFRoaXMKK2dhaW4gY29udHJvbCBoYXMgMzIgbGV2ZWxzLCB3aGljaCByYW5nZSBmcm9tIC0zNC41IGRCIHRvICsxMi4wIGRCIGluCisxLjUgZEIgc3RlcHMuICBUaG9zZSAzMiBsZXZlbHMgYXJlIG1hcHBlZCBvbnRvIDEwMCBsZXZlbHMgYXQgdGhlCitpb2N0bCwgc2VlIGJlbG93LgorCitTT1VORF9NSVhFUl9DRAkJRGVmYXVsdDogMHg0YTRhICgwIGRCKQorCitUaGlzIGlzIHRoZSBnYWluIGNvbnRyb2wgZm9yIG1peGluZyB0aGUgQ0QgYXVkaW8gc291cmNlIGludG8gdGhlCitvdXRwdXRzLiAgVGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWwgZ2FpbiBhcmUgY29udHJvbGxlZAoraW5kZXBlbmRlbnRseS4gIFRoaXMgZ2FpbiBjb250cm9sIGhhcyAzMiBsZXZlbHMsIHdoaWNoIHJhbmdlIGZyb20KKy0zNC41IGRCIHRvICsxMi4wIGRCIGluIDEuNSBkQiBzdGVwcy4gIFRob3NlIDMyIGxldmVscyBhcmUgbWFwcGVkIG9udG8KKzEwMCBsZXZlbHMgYXQgdGhlIGlvY3RsLCBzZWUgYmVsb3cuCisKK1NPVU5EX01JWEVSX1JFQ0xFVgkgRGVmYXVsdDogMCAoMCBkQikKKworVGhpcyBpcyB0aGUgZ2FpbiBjb250cm9sIGZvciBQQ00gaW5wdXQgKFJFQ29yZGluZyBMRVZlbCkuICBUaGUgbGVmdAorYW5kIHJpZ2h0IGNoYW5uZWwgZ2FpbiBhcmUgY29udHJvbGxlZCBpbmRlcGVuZGVudGx5LiAgVGhpcyBnYWluCitjb250cm9sIGhhcyAxNiBsZXZlbHMsIHdoaWNoIHJhbmdlIGZyb20gMCBkQiB0byArMjIuNSBkQiBpbiAxLjUgZEIKK3N0ZXBzLiAgVGhvc2UgMTYgbGV2ZWxzIGFyZSBtYXBwZWQgb250byAxMDAgbGV2ZWxzIGF0IHRoZSBpb2N0bCwgc2VlCitiZWxvdy4KKworU09VTkRfTUlYRVJfUkVDU1JDCSBEZWZhdWx0OiBTT1VORF9NQVNLX0xJTkUKKworVGhpcyBpcyBhIG1hc2sgb2YgY3VycmVudGx5IHNlbGVjdGVkIFBDTSBpbnB1dCBzb3VyY2VzIChSRUNvcmRpbmcKK1NvdVJDZXMpLiAgQmVjYXVzZSB0aGUgQUQxODQzIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUgcmVjb3JkaW5nIHNvdXJjZQorYXQgYSB0aW1lLCBvbmx5IG9uZSBiaXQgYXQgYSB0aW1lIGNhbiBiZSBzZXQgaW4gdGhpcyBtYXNrLiAgVGhlCithbGxvd2FibGUgdmFsdWVzIGFyZSBTT1VORF9NQVNLX1BDTSwgU09VTkRfTUFTS19MSU5FLCBTT1VORF9NQVNLX01JQywKK29yIFNPVU5EX01BU0tfQ0QuICBTZWxlY3RpbmcgU09VTkRfTUFTS19QQ00gc2V0cyB1cCBpbnRlcm5hbAorcmVzYW1wbGluZyB3aGljaCBpcyB1c2VmdWwgZm9yIGxvb3BiYWNrIHRlc3RpbmcgYW5kIGZvciBoYXJkd2FyZQorc2FtcGxlIHJhdGUgY29udmVyc2lvbi4gIEJ1dCBzb2Z0d2FyZSBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uIGlzCitwcm9iYWJseSBmYXN0ZXIsIHNvIEkgZG9uJ3Qga25vdyBob3cgdXNlZnVsIHRoYXQgaXMuCisKK1NPVU5EX01JWEVSX09VVFNSQwlERUZBVUxUOiBTT1VORF9NQVNLX0xJTkV8U09VTkRfTUFTS19NSUN8U09VTkRfTUFTS19DRAorCitUaGlzIGlzIGEgbWFzayBvZiBzb3VyY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK291dHB1dHMuICBUaG9zZSBzb3VyY2VzIHdob3NlIGJpdHMgYXJlIG5vdCBzZXQgYXJlIG11dGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0dBSU4gQ09OVFJPTAorCitUaGVyZSBhcmUgZml2ZSBnYWluIGNvbnRyb2xzIGxpc3RlZCBhYm92ZS4gIEVhY2ggaGFzIDE2LCAzMiwgb3IgNjQKK3N0ZXBzLiAgRWFjaCBjb250cm9sIGhhcyAxLjUgZEIgb2YgZ2FpbiBwZXIgc3RlcC4gIEVhY2ggY29udHJvbCBpcworc3RlcmVvLgorCitUaGUgT1NTIGRlZmluZXMgdGhlIGFyZ3VtZW50IHRvIGEgY2hhbm5lbCBnYWluIGlvY3RsIGFzIGhhdmluZyB0d28KK2NvbXBvbmVudHMsIGxlZnQgYW5kIHJpZ2h0LCBlYWNoIG9mIHdoaWNoIHJhbmdlcyBmcm9tIDAgdG8gMTAwLiAgVGhlCit0d28gY29tcG9uZW50cyBhcmUgcGFja2VkIGludG8gdGhlIHNhbWUgd29yZCwgd2l0aCB0aGUgbGVmdCBzaWRlIGdhaW4KK2luIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlLCBhbmQgdGhlIHJpZ2h0IHNpZGUgZ2FpbiBpbiB0aGUgc2Vjb25kCitsZWFzdCBzaWduaWZpY2FudCBieXRlLiAgSW4gQywgd2Ugd291bGQgc2F5IHRoaXMuCisKKwkjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKwkuLi4KKworCSAJYXNzZXJ0KGxlZnRnYWluID49IDAgJiYgbGVmdGdhaW4gPD0gMTAwKTsKKwkJYXNzZXJ0KHJpZ2h0Z2FpbiA+PSAwICYmIHJpZ2h0Z2FpbiA8PSAxMDApOworCQlhcmcgPSBsZWZ0Z2FpbiB8IHJpZ2h0Z2FpbiA8PCA4OworCitTbyBlYWNoIE9TUyBnYWluIGNvbnRyb2wgaGFzIDEwMSBzdGVwcy4gIEJ1dCB0aGUgaGFyZHdhcmUgaGFzIDE2LCAzMiwKK29yIDY0IHN0ZXBzLiAgVGhlIGhhcmR3YXJlIHN0ZXBzIGFyZSBzcHJlYWQgYWNyb3NzIHRoZSAxMDEgT1NTIHN0ZXBzCituZWFybHkgZXZlbmx5LiAgVGhlIGNvbnZlcnNpb24gZm9ybXVsYXMgYXJlIGxpa2UgdGhpcywgZ2l2ZW4gTiBlcXVhbHMKKzE2LCAzMiwgb3IgNjQuCisKKwlpbnQgcm91bmQgPSBOLzIgLSAxOworCU9TU19nYWluX3N0ZXBzID0gKGh3X2dhaW5fc3RlcHMgKiAxMDAgKyByb3VuZCkgLyAoTiAtIDEpOworCWh3X2dhaW5fc3RlcHMgPSAoT1NTX2dhaW5fc3RlcHMgKiAoTiAtIDEpICsgcm91bmQpIC8gMTAwOworCitIZXJlIGlzIGEgc25pcHBldCBvZiBDIGNvZGUgdGhhdCB3aWxsIHJldHVybiB0aGUgbGVmdCBhbmQgcmlnaHQgZ2Fpbgorb2YgYW55IGNoYW5uZWwgaW4gZEIuICBQYXNzIGl0IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBnYWluX2Rlc2NfdAorc3RydWN0dXJlcyB0byBhY2Nlc3MgYW55IG9mIHRoZSBmaXZlIGNoYW5uZWxzJyBnYWlucy4KKworCXR5cGVkZWYgc3RydWN0IGdhaW5fZGVzYyB7CisJCWZsb2F0IG1pbl9nYWluOworCQlmbG9hdCBnYWluX3N0ZXA7CisJCWludCBuYml0czsKKwkJaW50IGNoYW47CisJfSBnYWluX2Rlc2NfdDsKKworCWNvbnN0IGdhaW5fZGVzY190IGdhaW5fcGNtICAgID0geyAtODIuNSwgMS41LCA2LCBTT1VORF9NSVhFUl9QQ00gICAgfTsKKwljb25zdCBnYWluX2Rlc2NfdCBnYWluX2xpbmUgICA9IHsgLTM0LjUsIDEuNSwgNSwgU09VTkRfTUlYRVJfTElORSAgIH07CisJY29uc3QgZ2Fpbl9kZXNjX3QgZ2Fpbl9taWMgICAgPSB7IC0zNC41LCAxLjUsIDUsIFNPVU5EX01JWEVSX01JQyAgICB9OworCWNvbnN0IGdhaW5fZGVzY190IGdhaW5fY2QgICAgID0geyAtMzQuNSwgMS41LCA1LCBTT1VORF9NSVhFUl9DRCAgICAgfTsKKwljb25zdCBnYWluX2Rlc2NfdCBnYWluX3JlY2xldiA9IHsgICAwLjAsIDEuNSwgNCwgU09VTkRfTUlYRVJfUkVDTEVWIH07CisKKwlpbnQgZ2V0X2dhaW5fZEIoaW50IGZkLCBjb25zdCBnYWluX2Rlc2NfdCAqZ3AsCisJCQlmbG9hdCAqbGVmdCwgZmxvYXQgKnJpZ2h0KQorCXsKKwkJaW50IHdvcmQ7CisJCWludCBsZywgcmc7CisJCWludCBtYXNrID0gKDEgPDwgZ3AtPm5iaXRzKSAtIDE7CisKKwkJaWYgKGlvY3RsKGZkLCBNSVhFUl9SRUFEKGdwLT5jaGFuKSwgJndvcmQpICE9IDApCisJCQlyZXR1cm4gLTE7CS8qIGZhaWwgKi8KKwkJbGcgPSB3b3JkICYgMHhGRjsKKwkJcmcgPSB3b3JkID4+IDggJiAweEZGOworCQlsZyA9IChsZyAqIG1hc2sgKyBtYXNrIC8gMikgLyAxMDA7CisJCXJnID0gKHJnICogbWFzayArIG1hc2sgLyAyKSAvIDEwMDsKKwkJKmxlZnQgPSBncC0+bWluX2dhaW4gKyBncC0+Z2Fpbl9zdGVwICogbGc7CisJCSpyaWdodCA9IGdwLT5taW5fZ2FpbiArIGdwLT5nYWluX3N0ZXAgKiByZzsKKwkJcmV0dXJuIDA7CisJfQkKKworQW5kIGhlcmUgaXMgdGhlIGNvcnJlc3BvbmRpbmcgcm91dGluZSB0byBzZXQgYSBjaGFubmVsJ3MgZ2FpbiBpbiBkQi4KKworCWludCBzZXRfZ2Fpbl9kQihpbnQgZmQsIGNvbnN0IGdhaW5fZGVzY190ICpncCwgZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQpCisJeworCQlmbG9hdCBtYXhfZ2FpbiA9CisJCQlncC0+bWluX2dhaW4gKyAoMSA8PCBncC0+bmJpdHMpICogZ3AtPmdhaW5fc3RlcDsKKwkJZmxvYXQgcm91bmQgPSBncC0+Z2Fpbl9zdGVwIC8gMjsKKwkJaW50IG1hc2sgPSAoMSA8PCBncC0+bmJpdHMpIC0gMTsKKwkJaW50IHdvcmQ7CisJCWludCBsZywgcmc7CisKKwkJaWYgKGxlZnQgPCBncC0+bWluX2dhaW4gfHwgcmlnaHQgPCBncC0+bWluX2dhaW4pCisJCQlyZXR1cm4gRUlOVkFMOworCQlsZyA9IChsZWZ0IC0gZ3AtPm1pbl9nYWluICsgcm91bmQpIC8gZ3AtPmdhaW5fc3RlcDsKKwkJcmcgPSAocmlnaHQgLSBncC0+bWluX2dhaW4gKyByb3VuZCkgLyBncC0+Z2Fpbl9zdGVwOworCQlpZiAobGcgPj0gKDEgPDwgZ3AtPm5iaXRzKSB8fCByZyA+PSAoMSA8PCBncC0+bmJpdHMpKQorCQkJcmV0dXJuIEVJTlZBTDsKKwkJbGcgPSAoMTAwICogbGcgKyBtYXNrIC8gMikgLyBtYXNrOworCQlyZyA9ICgxMDAgKiByZyArIG1hc2sgLyAyKSAvIG1hc2s7CisJCXdvcmQgPSBsZyB8IHJnIDw8IDg7CisKKwkJcmV0dXJuIGlvY3RsKGZkLCBNSVhFUl9XUklURShncC0+Y2hhbiksICZ3b3JkKTsKKwl9CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BhcmMvUkVBRE1FLTIuNSBiL0RvY3VtZW50YXRpb24vc3BhcmMvUkVBRE1FLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDZmZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGFyYy9SRUFETUUtMi41CkBAIC0wLDAgKzEsNDYgQEAKK0JURklYVVAKKy0tLS0tLS0KKworVG8gYnVpbGQgbmV3IGtlcm5lbHMgeW91IGhhdmUgdG8gaXNzdWUgIm1ha2UgaW1hZ2UiLiBUaGUgcmVhZHkga2VybmVsCitpbiBFTEYgZm9ybWF0IGlzIHBsYWNlZCBpbiBhcmNoL3NwYXJjL2Jvb3QvaW1hZ2UuIEV4cGxhbmF0aW9uIGlzIGJlbG93LgorCitCVEZJWFVQIGlzIGEgdW5pcXVlIGZlYXR1cmUgb2YgTGludXgvc3BhcmMgYW1vbmcgb3RoZXIgYXJjaGl0ZWN0dXJlcywKK2RldmVsb3BlZCBieSBKYWt1YiBKZWxpbmVrIChJIHRoaW5rLi4uIE9idmlvdXNseSBEYXZpZCBTLiBNaWxsZXIgdG9vaworcGFydCwgdG9vKS4gSXQgYWxsb3dzIHRvIGJvb3QgdGhlIHNhbWUga2VybmVsIGF0IGRpZmZlcmVudCAKK3N1Yi1hcmNoaXRlY3R1cmVzLCBzdWNoIGFzIHN1bjRjLCBzdW40bSwgc3VuNGQsIHdoZXJlIFN1bk9TIHVzZXMKK2RpZmZlcmVudCBrZXJuZWxzLiBUaGlzIGZlYXR1cmUgaXMgY29udmluaWVudCBmb3IgcGVvcGxlIHdobyB5b3UgbW92ZQorZGlza3MgYmV0d2VlbiBib3hlcyBhbmQgZm9yIGRpc3RydXRpb24gYnVpbGRlcnMuCisKK1RvIGZ1bmN0aW9uLCBCVEZJWFVQIG11c3QgbGluayB0aGUga2VybmVsICJpbiB0aGUgZHJhZnQiIGZpcnN0LAorYW5hbHl6ZSB0aGUgcmVzdWx0LCB3cml0ZSBhIHNwZWNpYWwgc3R1YiBjb2RlIGJhc2VkIG9uIHRoYXQsIGFuZAorYnVpbGQgdGhlIGZpbmFsIGtlcm5lbCB3aXRoIHRoZSBzdHViIChidGZpeC5vKS4KKworS2FpIEdlcm1hc2NoZXdza2kgaW1wcm92ZWQgdGhlIGJ1aWxkIHN5c3RlbSBvZiB0aGUga2VybmVsIGluIHRoZSAyLjUgc2VyaWVzCitzaWduaWZpY2FudGx5LiBVbmZvcnR1bmF0ZWx5LCB0aGUgdHJhZGl0aW9uYWwgd2F5IG9mIHJ1bm5pbmcgdGhlIGRyYWZ0CitsaW5raW5nIGZyb20gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIE1ha2VmaWxlIGJlZm9yZSB0aGUgYWN0dWFsIGxpbmtpbmcKK2J5IGdlbmVyaWMgTWFrZWZpbGUgaXMgbmVhcmx5IGltcG9zc2libGUgdG8gc3VwcG9ydCBwcm9wZXJseSBpbiB0aGUKK25ldyBidWlsZCBzeXN0ZW0uIFRoZXJlZm9yZSwgdGhlIHdheSB3ZSBpbnRlZ3JhdGUgQlRGSVhVUCB3aXRoIHRoZQorYnVpbGQgc3lzdGVtIHdhcyBjaGFuZ2VkIGluIDIuNS40MC4gTm93LCBnZW5lcmljIE1ha2VmaWxlIHBlcmZvcm1zCit0aGUgZHJhZnQgbGlua2luZyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gZmlsZSB2bWxpbnV4LiBBcmNoaXRlY3R1cmUKK3NwZWNpZmljIHBvc3QtcHJvY2Vzc2luZyBpbnZva2VzIEJURklYVVAgbWFjaGluZXJ5IGFuZCBmaW5hbCBsaW5raW5nCitpbiB0aGUgc2FtZSB3YXkgYXMgb3RoZXIgYXJjaGl0ZWN0dXJlcyBkbyBib290c3RyYXBzLgorCitJbXBsaWNhdGlvbnMgb2YgdGhhdCBjaGFuZ2UgYXJlIGFzIGZvbGxvd3MuCisKKzEuIEhhY2tlcnMgbXVzdCB0eXBlICJtYWtlIGltYWdlIiBub3csIGluc3RlYWQgb2YganVzdCAibWFrZSIsIGluIHRoZSBzYW1lCisgICB3YXkgYXMgczM5MCBwZW9wbGUgZG8gbm93LiBJdCBpcyBhbmFsb2dvdXMgdG8gIm1ha2UgYnpJbWFnZSIgb24gaTM4Ni4KKyAgIFRoaXMgZG9lcyBOT1QgYWZmZWN0IHNwYXJjNjQsIHlvdSBjb250aW51ZSB0byB1c2UgIm1ha2UiIHRvIGJ1aWxkIHNwYXJjNjQKKyAgIGtlcm5lbHMuCisKKzIuIHZtbGludXggaXMgbm90IHRoZSBmaW5hbCBrZXJuZWwsIHNvIFJQTSBidWlsZGVycyBoYXZlIHRvIGFkanVzdAorICAgdGhlaXIgc3BlYyBmaWxlcyAoaWYgdGhleSBkZWxpdmVyZWQgdm1saW51eCBmb3IgZGVidWdnaW5nKS4KKyAgIFN5c3RlbS5tYXAgZ2VuZXJhdGVkIGZvciB2bWxpbnV4IGlzIHN0aWxsIHZhbGlkLgorCiszLiBTY3JpcHRzIHRoYXQgcHJvZHVjZSBhLm91dCBpbWFnZXMgaGF2ZSB0byBiZSBjaGFuZ2VkLiBGaXJzdCwgaWYgdGhleQorICAgaW52b2tlIG1ha2UsIHRoZXkgaGF2ZSB0byB1c2UgIm1ha2UgaW1hZ2UiLiBTZWNvbmQsIHRoZXkgaGF2ZSB0byBwaWNrIHVwCisgICB0aGUgbmV3IGtlcm5lbCBpbiBhcmNoL3NwYXJjL2Jvb3QvaW1hZ2UgaW5zdGVhZCBvZiB2bWxpbnV4LgorCis0LiBTaW5jZSB3ZSBhcmUgY29tcGxpYW50IHdpdGggS2FpJ3MgYnVpbGQgc3lzdGVtIG5vdywgbWFrZSAtaiBpcyBwZXJtaXR0ZWQuCisKKy0tIFBldGUgWmFpdGNldgoremFpdGNldkB5YWhvby5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BhcmMvc2J1c19kcml2ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vc3BhcmMvc2J1c19kcml2ZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzYxOTVkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGFyYy9zYnVzX2RyaXZlcnMudHh0CkBAIC0wLDAgKzEsMjcyIEBACisKKwkJV3JpdGluZyBTQlVTIERyaXZlcnMKKworCSAgICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisKKwlUaGUgU0JVUyBkcml2ZXIgaW50ZXJmYWNlcyBvZiB0aGUgTGludXgga2VybmVsIGhhdmUgYmVlbgorcmV2YW1wZWQgY29tcGxldGVseSBmb3IgMi40LnggZm9yIHNldmVyYWwgcmVhc29ucy4gIEZvcmVtb3N0IHdlcmUKK3BlcmZvcm1hbmNlIGFuZCBjb21wbGV4aXR5IGNvbmNlcm5zLiAgVGhpcyBkb2N1bWVudCBkZXRhaWxzIHRoZXNlCituZXcgaW50ZXJmYWNlcyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgdG8gd3JpdGUgYW4gU0JVUyBkZXZpY2UgZHJpdmVyLgorCisJU0JVUyBkcml2ZXJzIG5lZWQgdG8gaW5jbHVkZSA8YXNtL3NidXMuaD4gdG8gZ2V0IGFjY2VzcwordG8gZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGRlc2NyaWJlZCBoZXJlLgorCisJCVByb2JpbmcgYW5kIERldGVjdGlvbgorCisJRWFjaCBTQlVTIGRldmljZSBpbnNpZGUgdGhlIG1hY2hpbmUgaXMgZGVzY3JpYmVkIGJ5IGEKK3N0cnVjdHVyZSBjYWxsZWQgInN0cnVjdCBzYnVzX2RldiIuICBMaWtld2lzZSwgZWFjaCBTQlVTIGJ1cworZm91bmQgaW4gdGhlIHN5c3RlbSBpcyBkZXNjcmliZWQgYnkgYSAic3RydWN0IHNidXNfYnVzIi4gIEZvcgorZWFjaCBTQlVTIGJ1cywgdGhlIGRldmljZXMgdW5kZXJuZWF0aCBhcmUgaHVuZyBpbiBhIHRyZWUtbGlrZQorZmFzaGlvbiBvZmYgb2YgdGhlIGJ1cyBzdHJ1Y3R1cmUuCisKKwlUaGUgU0JVUyBkZXZpY2Ugc3RydWN0dXJlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbgorZm9yIHlvdSB0byBpbXBsZW1lbnQgeW91ciBkZXZpY2UgcHJvYmluZyBhbGdvcml0aG0gYW5kIG9idGFpbgordGhlIGJpdHMgbmVjZXNzYXJ5IHRvIHJ1biB5b3VyIGRldmljZS4gIFRoZSBtb3N0IGNvbW1vbmx5Cit1c2VkIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3R1cmUsIGFuZCB0aGVpciB0eXBpY2FsIHVzYWdlLAord2lsbCBiZSBkZXRhaWxlZCBiZWxvdy4KKworCUhlcmUgaXMgaG93IHByb2JpbmcgaXMgcGVyZm9ybWVkIGJ5IGFuIFNCVVMgZHJpdmVyCit1bmRlciBMaW51eDoKKworCXN0YXRpYyB2b2lkIGluaXRfb25lX215ZGV2aWNlKHN0cnVjdCBzYnVzX2RldiAqc2RldikKKwl7CisJCS4uLgorCX0KKworCXN0YXRpYyBpbnQgbXlkZXZpY2VfbWF0Y2goc3RydWN0IHNidXNfZGV2ICpzZGV2KQorCXsKKwkJaWYgKHNvbWVfY3JpdGVyaWEoc2RldikpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdGljIHZvaWQgbXlkZXZpY2VfcHJvYmUodm9pZCkKKwl7CisJCXN0cnVjdCBzYnVzX2J1cyAqc2J1czsKKwkJc3RydWN0IHNidXNfZGV2ICpzZGV2OworCisJCWZvcl9lYWNoX3NidXMoc2J1cykgeworCQkJZm9yX2VhY2hfc2J1c2RldihzZGV2LCBzYnVzKSB7CisJCQkJaWYgKG15ZGV2aWNlX21hdGNoKHNkZXYpKQorCQkJCQlpbml0X29uZV9teWRldmljZShzZGV2KTsKKwkJCX0KKwkJfQorCX0KKworCUFsbCB0aGlzIGRvZXMgaXMgd2FsayB0aHJvdWdoIGFsbCBTQlVTIGRldmljZXMgaW4gdGhlCitzeXN0ZW0sIGNoZWNrcyBlYWNoIHRvIHNlZSBpZiBpdCBpcyBvZiB0aGUgdHlwZSB3aGljaAoreW91ciBkcml2ZXIgaXMgd3JpdHRlbiBmb3IsIGFuZCBpZiBzbyBpdCBjYWxscyB0aGUgaW5pdAorcm91dGluZSB0byBhdHRhY2ggdGhlIGRldmljZSBhbmQgcHJlcGFyZSB0byBkcml2ZSBpdC4KKworCSJpbml0X29uZV9teWRldmljZSIgbWlnaHQgZG8gdGhpbmdzIGxpa2UgYWxsb2NhdGUgc29mdHdhcmUKK3N0YXRlIHN0cnVjdHVyZXMsIG1hcCBpbiBJL08gcmVnaXN0ZXJzLCBwbGFjZSB0aGUgaGFyZHdhcmUKK2ludG8gYW4gaW5pdGlhbGl6ZWQgc3RhdGUsIGV0Yy4KKworCQlNYXBwaW5nIGFuZCBBY2Nlc3NpbmcgSS9PIFJlZ2lzdGVycworCisJRWFjaCBTQlVTIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbnMgYW4gYXJyYXkgb2YgZGVzY3JpcHRvcnMKK3doaWNoIGRlc2NyaWJlIGVhY2ggcmVnaXN0ZXIgc2V0LiBXZSBhYnVzZSBzdHJ1Y3QgcmVzb3VyY2UgZm9yIHRoYXQuCitUaGV5IGVhY2ggY29ycmVzcG9uZCB0byB0aGUgInJlZyIgcHJvcGVydGllcyBwcm92aWRlZCBieSB0aGUgT0JQIGZpcm13YXJlLgorCisJQmVmb3JlIHlvdSBjYW4gYWNjZXNzIHlvdXIgZGV2aWNlJ3MgcmVnaXN0ZXJzIHlvdSBtdXN0IG1hcAordGhlbS4gIEFuZCBsYXRlciBpZiB5b3Ugd2lzaCB0byBzaHV0ZG93biB5b3VyIGRyaXZlciAoZm9yIG1vZHVsZQordW5sb2FkIG9yIHNpbWlsYXIpIHlvdSBtdXN0IHVubWFwIHRoZW0uICBZb3UgbXVzdCB0cmVhdCB0aGVtIGFzCithIHJlc291cmNlLCB3aGljaCB5b3UgYWxsb2NhdGUgKG1hcCkgYmVmb3JlIHVzaW5nIGFuZCBmcmVlIHVwCisodW5tYXApIHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuCisKKwlUaGUgbWFwcGluZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gYW4gb3BhcXVlIHZhbHVlCit0eXBlZCBhcyBhbiAidW5zaWduZWQgbG9uZyIuICBUaGlzIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUKK29mIHRoZSBtYXBwaW5nIGludGVyZmFjZSwgYW5kIHRoZSBhcmd1bWVudHMgdG8gdGhlIHVubWFwcGluZworaW50ZXJmYWNlLiAgTGV0J3Mgc2F5IHlvdSB3YW50IHRvIG1hcCB0aGUgZmlyc3Qgc2V0IG9mIHJlZ2lzdGVycy4KK1BlcmhhcHMgcGFydCBvZiB5b3VyIGRyaXZlciBzb2Z0d2FyZSBzdGF0ZSBzdHJ1Y3R1cmUgbG9va3MgbGlrZToKKworCXN0cnVjdCBteWRldmljZSB7CisJCXVuc2lnbmVkIGxvbmcgY29udHJvbF9yZWdzOworCSAgIC4uLgorCQlzdHJ1Y3Qgc2J1c19kZXYgKnNkZXY7CisJICAgLi4uCisJfTsKKworCUF0IGluaXRpYWxpemF0aW9uIHRpbWUgeW91IHRoZW4gdXNlIHRoZSBzYnVzX2lvcmVtYXAKK2ludGVyZmFjZSB0byBtYXAgaW4geW91ciByZWdpc3RlcnMsIGxpa2Ugc286CisKKwlzdGF0aWMgdm9pZCBpbml0X29uZV9teWRldmljZShzdHJ1Y3Qgc2J1c19kZXYgKnNkZXYpCisJeworCQlzdHJ1Y3QgbXlkZXZpY2UgKm1wOworCQkuLi4KKworCQltcC0+Y29udHJvbF9yZWdzID0gc2J1c19pb3JlbWFwKCZzZGV2LT5yZXNvdXJjZVswXSwgMCwKKwkJCQkJQ09OVFJPTF9SRUdTX1NJWkUsICJteWRldmljZSByZWdzIik7CisJCWlmICghbXAtPmNvbnRyb2xfcmVncykgeworCQkJLyogRmFpbHVyZSwgY2xlYW51cCBhbmQgcmV0dXJuLiAqLworCQl9CisJfQorCisJU2Vjb25kIGFyZ3VtZW50IHRvIHNidXNfaW9yZW1hcCBpcyBhbiBvZmZzZXQgZm9yCitjcmFua3kgZGV2aWNlcyB3aXRoIGJyb2tlbiBPQlAgUFJPTS4gVGhlIHNidXNfaW9yZW1hcCB1c2VzIG9ubHkKK2Egc3RhcnQgYWRkcmVzcyBhbmQgZmxhZ3MgZnJvbSB0aGUgcmVzb3VyY2Ugc3RydWN0dXJlLgorVGhlcmVmb3JlIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgc2FtZSByZXNvdXJjZSB0byBtYXAKK3NldmVyYWwgc2V0cyBvZiByZWdpc3RlcnMgb3IgZXZlbiB0byBmYWJyaWNhdGUgYSByZXNvdXJjZQorc3RydWN0dXJlIGlmIGRyaXZlciBnZXRzIHBoeXNpY2FsIGFkZHJlc3MgZnJvbSBzb21lIHByaXZhdGUgcGxhY2UuCitUaGlzIHByYWN0aWNlIGlzIGRpc2NvdXJhZ2VkIHRob3VnaC4gVXNlIHdoYXRldmVyIE9CUCBQUk9NCitwcm92aWRlZCB0byB5b3UuCisKKwlBbmQgaGVyZSBpcyBob3cgeW91IG1pZ2h0IHVubWFwIHRoZXNlIHJlZ2lzdGVycyBsYXRlciBhdAorZHJpdmVyIHNodXRkb3duIG9yIG1vZHVsZSB1bmxvYWQgdGltZSwgdXNpbmcgdGhlIHNidXNfaW91bm1hcAoraW50ZXJmYWNlOgorCisJc3RhdGljIHZvaWQgbXlkZXZpY2VfdW5tYXBfcmVncyhzdHJ1Y3QgbXlkZXZpY2UgKm1wKQorCXsKKwkJc2J1c19pb3VubWFwKG1wLT5jb250cm9sX3JlZ3MsIENPTlRST0xfUkVHU19TSVpFKTsKKwl9CisKKwlGaW5hbGx5LCB0byBhY3R1YWxseSBhY2Nlc3MgeW91ciByZWdpc3RlcnMgdGhlcmUgYXJlIDYKK2ludGVyZmFjZSByb3V0aW5lcyBhdCB5b3VyIGRpc3Bvc2FsLiAgQWNjZXNzZXMgYXJlIGJ5dGUgKDggYml0KSwKK3dvcmQgKDE2IGJpdCksIG9yIGxvbmd3b3JkICgzMiBiaXQpIHNpemVkLiAgSGVyZSB0aGV5IGFyZToKKworCXU4IHNidXNfcmVhZGIodW5zaWduZWQgbG9uZyByZWcpCQkvKiByZWFkIGJ5dGUgKi8KKwl1MTYgc2J1c19yZWFkdyh1bnNpZ25lZCBsb25nIHJlZykJCS8qIHJlYWQgd29yZCAqLworCXUzMiBzYnVzX3JlYWRsKHVuc2lnbmVkIGxvbmcgcmVnKQkJLyogcmVhZCBsb25nd29yZCAqLworCXZvaWQgc2J1c193cml0ZWIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcmVnKQkvKiB3cml0ZSBieXRlICovCisJdm9pZCBzYnVzX3dyaXRldyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcmVnKQkvKiB3cml0ZSB3b3JkICovCisJdm9pZCBzYnVzX3dyaXRlbCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcmVnKQkvKiB3cml0ZSBsb25nd29yZCAqLworCisJU28sIGxldCdzIHNheSB5b3VyIGRldmljZSBoYXMgYSBjb250cm9sIHJlZ2lzdGVyIG9mIHNvbWUgc29ydAorYXQgb2Zmc2V0IHplcm8uICBUaGUgZm9sbG93aW5nIG1pZ2h0IGltcGxlbWVudCByZXNldHRpbmcgeW91ciBkZXZpY2U6CisKKwkjZGVmaW5lIENPTlRST0wJCTB4MDBVTAorCisJI2RlZmluZSBDT05UUk9MX1JFU0VUCTB4MDAwMDAwMDEJLyogUmVzZXQgaGFyZHdhcmUgKi8KKworCXN0YXRpYyB2b2lkIG15ZGV2aWNlX3Jlc2V0KHN0cnVjdCBteWRldmljZSAqbXApCisJeworCQlzYnVzX3dyaXRlbChDT05UUk9MX1JFU0VULCBtcC0+cmVncyArIENPTlRST0wpOworCX0KKworCU9yIHBlcmhhcHMgdGhlcmUgaXMgYSBkYXRhIHBvcnQgcmVnaXN0ZXIgYXQgYW4gb2Zmc2V0IG9mCisxNiBieXRlcyB3aGljaCBhbGxvd3MgeW91IHRvIHJlYWQgYnl0ZXMgZnJvbSBhIGZpZm8gaW4gdGhlIGRldmljZToKKworCSNkZWZpbmUgREFUQQkJMHgxMFVMCisKKwlzdGF0aWMgdTggbXlkZXZpY2VfZ2V0X2J5dGUoc3RydWN0IG15ZGV2aWNlICptcCkKKwl7CisJCXJldHVybiBzYnVzX3JlYWRiKG1wLT5yZWdzICsgREFUQSk7CisJfQorCisJSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgY2x1ZWZ1bCByZWFkZXJzIG1heSBoYXZlCitub3RpY2VkIHRoYXQgdGhlc2UgaW50ZXJmYWNlcyBtaW1pY2sgdGhlIFBDSSBpbnRlcmZhY2VzIG9mIHRoZQorTGludXgga2VybmVsLiAgVGhpcyB3YXMgbm90IGJ5IGFjY2lkZW50LgorCisJV0FSTklORzoKKworCQlETyBOT1QgdHJ5IHRvIHRyZWF0IHRoZXNlIG9wYXF1ZSByZWdpc3RlciBtYXBwaW5nCisJCXZhbHVlcyBhcyBhIG1lbW9yeSBtYXBwZWQgcG9pbnRlciB0byBzb21lIHN0cnVjdHVyZQorCQl3aGljaCB5b3UgY2FuIGRlcmVmZXJlbmNlLgorCisJCUl0IG1heSBiZSBtZW1vcnkgbWFwcGVkLCBpdCBtYXkgbm90IGJlLiAgSW4gZmFjdCBpdAorCQljb3VsZCBiZSBhIHBoeXNpY2FsIGFkZHJlc3MsIG9yIGl0IGNvdWxkIGJlIHRoZSB0aW1lCisJCW9mIGRheSB4b3InZCB3aXRoIDB4ZGVhZGJlZWYuICA6LSkKKworCQlXaGF0ZXZlciBpdCBpcywgaXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBUaGUKKwkJaW50ZXJmYWNlIHdhcyBkb25lIHRoaXMgd2F5IHRvIHNoaWVsZCB0aGUgZHJpdmVyCisJCWF1dGhvciBmcm9tIHN1Y2ggY29tcGxleGl0aWVzLgorCisJCQlEb2luZyBEVk1BCisKKwlTQlVTIGRldmljZXMgY2FuIHBlcmZvcm0gRE1BIHRyYW5zYWN0aW9ucyBpbiBhIHdheSBzaW1pbGFyCit0byBQQ0kgYnV0IGRpc3NpbWlsYXIgdG8gSVNBLCBlLmcuIERNQSBtYXN0ZXJzIHN1cHBseSBhZGRyZXNzLgorSW4gY29udHJhc3QgdG8gUENJLCBob3dldmVyLCB0aGF0IGFkZHJlc3MgKGEgYnVzIGFkZHJlc3MpIGlzCit0cmFuc2xhdGVkIGJ5IElPTU1VIGJlZm9yZSBhIG1lbW9yeSBhY2Nlc3MgaXMgcGVyZm9ybWVkIGFuZCB0aGVyZWZvcmUKK2l0IGlzIHZpcnR1YWwuIFN1biBjYWxscyB0aGlzIHByb2NlZHVyZSBEVk1BLgorCisJTGludXggc3VwcG9ydHMgdHdvIHN0eWxlcyBvZiB1c2luZyBTQlVTIERWTUE6ICJjb25zaXN0ZW50IG1lbW9yeSIKK2FuZCAic3RyZWFtaW5nIERWTUEiLiBDUFUgdmlldyBvZiBjb25zaXN0ZW50IG1lbW9yeSBjaHVuayBpcywgd2VsbCwKK2NvbnNpc3RlbnQgd2l0aCBhIHZpZXcgb2YgYSBkZXZpY2UuIFRoaW5rIG9mIGl0IGFzIGFuIHVuY2FjaGVkIG1lbW9yeS4KK1R5cGljYWxseSB0aGlzIHdheSBvZiBkb2luZyBEVk1BIGlzIG5vdCB2ZXJ5IGZhc3QgYW5kIGRyaXZlcnMgdXNlIGl0Cittb3N0bHkgZm9yIGNvbnRyb2wgYmxvY2tzIG9yIHF1ZXVlcy4gT24gc29tZSBDUFVzIHdlIGNhbm5vdCBmbHVzaCBvcgoraW52YWxpZGF0ZSBpbmRpdmlkdWFsIHBhZ2VzIG9yIGNhY2hlIGxpbmVzIGFuZCBkb2luZyBleHBsaWNpdCBmbHVzaGluZworb3ZlciBldmVyIGxpdHRsZSBieXRlIGluIGV2ZXJ5IGNvbnRyb2wgYmxvY2sgd291bGQgYmUgd2FzdGVmdWwuCisKK1N0cmVhbWluZyBEVk1BIGlzIGEgcHJlZmVycmVkIHdheSB0byB0cmFuc2ZlciBsYXJnZSBhbW91bnRzIG9mIGRhdGEuCitUaGlzIHByb2Nlc3Mgd29ya3MgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisxLiBhIENQVSBzdG9wcyBhY2Nlc3NpbmcgYSBjZXJ0YWluIHBhcnQgb2YgbWVtb3J5LAorICAgZmx1c2hlcyBpdHMgY2FjaGVzIGNvdmVyaW5nIHRoYXQgbWVtb3J5OworMi4gYSBkZXZpY2UgZG9lcyBEVk1BIGFjY2Vzc2VzLCB0aGVuIHBvc3RzIGFuIGludGVycnVwdDsKKzMuIENQVSBpbnZhbGlkYXRlcyBpdHMgY2FjaGVzIGFuZCBzdGFydHMgdG8gYWNjZXNzIHRoZSBtZW1vcnkuCisKK0Egc2luZ2xlIHN0cmVhbWluZyBEVk1BIG9wZXJhdGlvbiBjYW4gdG91Y2ggc2V2ZXJhbCBkaXNjb250aWd1b3VzCityZWdpb25zIG9mIGEgdmlydHVhbCBidXMgYWRkcmVzcyBzcGFjZS4gVGhpcyBpcyBjYWxsZWQgYSBzY2F0dGVyLWdhdGhlcgorRFZNQS4KKworW1RCRDogV2h5IGRvIG5vdCB3ZSBuZWl0aGVyIFNvbGFyaXMgYXR0ZW1wdCB0byBtYXAgZGlzam9pbnQgcGFnZXMKK2ludG8gYSBzaW5nbGUgdmlydHVhbCBjaHVuayB3aXRoIHRoZSBoZWxwIG9mIElPTU1VLCBzbyB0aGF0IG5vbiBTRworRFZNQSBtYXN0ZXJzIHdvdWxkIGRvIFNHPyBJdCdkIGJlIHZlcnkgaGVscGZ1bCBmb3IgUkFJRC5dCisKKwlJbiBvcmRlciB0byBwZXJmb3JtIGEgY29uc2lzdGVudCBEVk1BIGEgZHJpdmVyIGRvZXMgc29tZXRoaW5nCitsaWtlIHRoZSBmb2xsb3dpbmc6CisKKwljaGFyICptZW07CQkvKiBBZGRyZXNzIGluIHRoZSBDUFUgc3BhY2UgKi8KKwl1MzIgYnVzYTsJCS8qIEFkZHJlc3MgaW4gdGhlIFNCdXMgc3BhY2UgKi8KKworCW1lbSA9IChjaGFyICopIHNidXNfYWxsb2NfY29uc2lzdGVudChzZGV2LCBNWU1FTVNJWkUsICZidXNhKTsKKworCVRoZW4gbWVtIGlzIHVzZWQgd2hlbiBDUFUgYWNjZXNzZXMgdGhpcyBtZW1vcnkgYW5kIHUzMgoraXMgZmVkIHRvIHRoZSBkZXZpY2Ugc28gdGhhdCBpdCBjYW4gZG8gRFZNQS4gVGhpcyBpcyB0eXBpY2FsbHkKK2RvbmUgd2l0aCBhbiBzYnVzX3dyaXRlbCgpIGludG8gc29tZSBkZXZpY2UgcmVnaXN0ZXIuCisKKwlEbyBub3QgZm9yZ2V0IHRvIGZyZWUgdGhlIERWTUEgcmVzb3VyY2VzIG9uY2UgeW91IGFyZSBkb25lOgorCisJc2J1c19mcmVlX2NvbnNpc3RlbnQoc2RldiwgTVlNRU1TSVpFLCBtZW0sIGJ1c2EpOworCisJU3RyZWFtaW5nIERWTUEgaXMgbW9yZSBpbnRlcmVzdGluZy4gRmlyc3QgeW91IGFsbG9jYXRlIHNvbWUKK21lbW9yeSBzdWl0YWJsZSBmb3IgaXQgb3IgcGluIGRvd24gc29tZSB1c2VyIHBhZ2VzLiBUaGVuIGl0IGFsbCB3b3JrcworbGlrZSB0aGlzOgorCisJY2hhciAqbWVtID0gYXJndW1lbjE7CisJdW5zaWduZWQgaW50IHNpemUgPSBhcmd1bWVudDI7CisJdTMyIGJ1c2E7CQkvKiBBZGRyZXNzIGluIHRoZSBTQnVzIHNwYWNlICovCisKKwkqbWVtID0gMTsJCS8qIENQVSBjYW4gYWNjZXNzICovCisJYnVzYSA9IHNidXNfbWFwX3NpbmdsZShzZGV2LCBtZW0sIHNpemUpOworCWlmIChidXNhID09IDApIC4uLi4uLi4KKworCS8qIFRlbGwgdGhlIGRldmljZSB0byB1c2UgYnVzYSBoZXJlICovCisJLyogQ1BVIGNhbm5vdCBhY2Nlc3MgdGhlIG1lbW9yeSB3aXRob3V0IHNidXNfZG1hX3N5bmNfc2luZ2xlKCkgKi8KKworCXNidXNfdW5tYXBfc2luZ2xlKHNkZXYsIGJ1c2EsIHNpemUpOworCWlmICgqbWVtID09IDApIC4uLi4JLyogQ1BVIGNhbiBhY2Nlc3MgYWdhaW4gKi8KKworCUl0IGlzIHBvc3NpYmxlIHRvIHJldGFpbiBtYXBwaW5ncyBhbmQgYXNrIHRoZSBkZXZpY2UgdG8KK2FjY2VzcyBkYXRhIGFnYWluIGFuZCBhZ2FpbiB3aXRob3V0IGNhbGxpbmcgc2J1c191bm1hcF9zaW5nbGUuCitIb3dldmVyLCBDUFUgY2FjaGVzIG11c3QgYmUgaW52YWxpZGF0ZWQgd2l0aCBzYnVzX2RtYV9zeW5jX3NpbmdsZQorYmVmb3JlIHN1Y2ggYWNjZXNzLgorCitbVEJEIGJ1dCB3aGF0IGFib3V0IHdyaXRlYmFjayBjYWNoZXMgaGVyZS4uLiBkbyB3ZSBoYXZlIGFueT9dCisKKwlUaGVyZSBpcyBhbiBlcXVpdmFsZW50IHNldCBvZiBmdW5jdGlvbnMgZG9pbmcgdGhlIHNhbWUgdGhpbmcKK29ubHkgd2l0aCBzZXZlcmFsIG1lbW9yeSBzZWdtZW50cyBhdCBvbmNlIGZvciBkZXZpY2VzIGNhcGFibGUgb2YKK3NjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycy4gVXNlIHRoZSBTb3VyY2UsIEx1a2UuCisKKwkJCUV4YW1wbGVzCisKKwlkcml2ZXJzL25ldC9zdW5obWUuYworCVRoaXMgaXMgYSBjb21wbGljYXRlZCBkcml2ZXIgd2hpY2ggaWxsdXN0cmF0ZXMgbWFueSBjb25jZXB0cworZGlzY3Vzc2VkIGFib3ZlIGFuZCBwbHVzIGl0IGhhbmRsZXMgYm90aCBQQ0kgYW5kIFNCVVMgYm9hcmRzLgorCisJZHJpdmVycy9zY3NpL2VzcC5jCisJQ2hlY2sgaXQgb3V0IGZvciBzY2F0dGVyLWdhdGhlciBEVk1BLgorCisJZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKKwlBIG5vbi1EVk1BIGRldmljZS4KKworCWRyaXZlcnMvbmV0L3N1bmxhbmNlLmMKKwlMYW5jZSBkcml2ZXIgYWJ1c2VzIGNvbnNpc3RlbnQgbWFwcGluZ3MgZm9yIGRhdGEgdHJhbnNmZXIuCitJdCBpcyBhIG5pZnR5IHRyaWNrIHdoaWNoIHdlIGRvIG5vdCBwYXJ0aWN1bGFybHkgcmVjb21tZW5kLi4uCitKdXN0IGNoZWNrIGl0IG91dCBhbmQga25vdyB0aGF0IGl0J3MgbGVnYWwuCisKKwkJCUJhZCBleGFtcGxlcywgZG8gTk9UIHVzZQorCisJZHJpdmVycy92aWRlby9jZ3NpeC5jCisJVGhpcyBvbmUgdXNlcyByZXN1bHQgb2Ygc2J1c19pb3JlbWFwIGFzIGlmIGl0IGlzIGFuIGFkZHJlc3MuCitUaGlzIGRvZXMgTk9UIHdvcmsgb24gc3BhcmM2NCBhbmQgdGhlcmVmb3JlIGlzIGJyb2tlbi4gV2Ugd2lsbAorY29udmVydCBpdCBhdCBhIGxhdGVyIGRhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwYXJzZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NwYXJzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3ODQxNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3BhcnNlLnR4dApAQCAtMCwwICsxLDcyIEBACitDb3B5cmlnaHQgMjAwNCBMaW51cyBUb3J2YWxkcworQ29weXJpZ2h0IDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorCitVc2luZyBzcGFyc2UgZm9yIHR5cGVjaGVja2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworIl9fYml0d2lzZSIgaXMgYSB0eXBlIGF0dHJpYnV0ZSwgc28geW91IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgICAgICB0eXBlZGVmIGludCBfX2JpdHdpc2UgcG1fcmVxdWVzdF90OworCisgICAgICAgIGVudW0gcG1fcmVxdWVzdCB7CisgICAgICAgICAgICAgICAgUE1fU1VTUEVORCA9IChfX2ZvcmNlIHBtX3JlcXVlc3RfdCkgMSwKKyAgICAgICAgICAgICAgICBQTV9SRVNVTUUgPSAoX19mb3JjZSBwbV9yZXF1ZXN0X3QpIDIKKyAgICAgICAgfTsKKword2hpY2ggbWFrZXMgUE1fU1VTUEVORCBhbmQgUE1fUkVTVU1FICJiaXR3aXNlIiBpbnRlZ2VycyAodGhlICJfX2ZvcmNlIiBpcwordGhlcmUgYmVjYXVzZSBzcGFyc2Ugd2lsbCBjb21wbGFpbiBhYm91dCBjYXN0aW5nIHRvL2Zyb20gYSBiaXR3aXNlIHR5cGUsCitidXQgaW4gdGhpcyBjYXNlIHdlIHJlYWxseSBfZG9fIHdhbnQgdG8gZm9yY2UgdGhlIGNvbnZlcnNpb24pLiBBbmQgYmVjYXVzZQordGhlIGVudW0gdmFsdWVzIGFyZSBhbGwgdGhlIHNhbWUgdHlwZSwgbm93ICJlbnVtIHBtX3JlcXVlc3QiIHdpbGwgYmUgdGhhdAordHlwZSB0b28uCisKK0FuZCB3aXRoIGdjYywgYWxsIHRoZSBfX2JpdHdpc2UvX19mb3JjZSBzdHVmZiBnb2VzIGF3YXksIGFuZCBpdCBhbGwgZW5kcwordXAgbG9va2luZyBqdXN0IGxpa2UgaW50ZWdlcnMgdG8gZ2NjLgorCitRdWl0ZSBmcmFua2x5LCB5b3UgZG9uJ3QgbmVlZCB0aGUgZW51bSB0aGVyZS4gVGhlIGFib3ZlIGFsbCByZWFsbHkganVzdAorYm9pbHMgZG93biB0byBvbmUgc3BlY2lhbCAiaW50IF9fYml0d2lzZSIgdHlwZS4KKworU28gdGhlIHNpbXBsZXIgd2F5IGlzIHRvIGp1c3QgZG8KKworICAgICAgICB0eXBlZGVmIGludCBfX2JpdHdpc2UgcG1fcmVxdWVzdF90OworCisgICAgICAgICNkZWZpbmUgUE1fU1VTUEVORCAoKF9fZm9yY2UgcG1fcmVxdWVzdF90KSAxKQorICAgICAgICAjZGVmaW5lIFBNX1JFU1VNRSAoKF9fZm9yY2UgcG1fcmVxdWVzdF90KSAyKQorCithbmQgeW91IG5vdyBoYXZlIGFsbCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGZvciBzdHJpY3QgdHlwZWNoZWNraW5nLgorCitPbmUgc21hbGwgbm90ZTogdGhlIGNvbnN0YW50IGludGVnZXIgIjAiIGlzIHNwZWNpYWwuIFlvdSBjYW4gdXNlIGEKK2NvbnN0YW50IHplcm8gYXMgYSBiaXR3aXNlIGludGVnZXIgdHlwZSB3aXRob3V0IHNwYXJzZSBldmVyIGNvbXBsYWluaW5nLgorVGhpcyBpcyBiZWNhdXNlICJiaXR3aXNlIiAoYXMgdGhlIG5hbWUgaW1wbGllcykgd2FzIGRlc2lnbmVkIGZvciBtYWtpbmcKK3N1cmUgdGhhdCBiaXR3aXNlIHR5cGVzIGRvbid0IGdldCBtaXhlZCB1cCAobGl0dGxlLWVuZGlhbiB2cyBiaWctZW5kaWFuCit2cyBjcHUtZW5kaWFuIHZzIHdoYXRldmVyKSwgYW5kIHRoZXJlIHRoZSBjb25zdGFudCAiMCIgcmVhbGx5IF9pc18KK3NwZWNpYWwuCisKK01vZGlmeSB0b3AtbGV2ZWwgTWFrZWZpbGUgdG8gc2F5CisKK0NIRUNLICAgICAgICAgICA9IHNwYXJzZSAtV2JpdHdpc2UKKworb3IgeW91IGRvbid0IGdldCBhbnkgY2hlY2tpbmcgYXQgYWxsLgorCisKK1doZXJlIHRvIGdldCBzcGFyc2UKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworV2l0aCBCSywgeW91IGNhbiBqdXN0IGdldCBpdCBmcm9tCisKKyAgICAgICAgYms6Ly9zcGFyc2UuYmtiaXRzLm5ldC9zcGFyc2UKKworYW5kIERhdmVKIGhhcyB0YXItYmFsbHMgYXQKKworCWh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvYml0a2VlcGVyL3NwYXJzZS8KKworCitPbmNlIHlvdSBoYXZlIGl0LCBqdXN0IGRvCisKKyAgICAgICAgbWFrZQorICAgICAgICBtYWtlIGluc3RhbGwKKworYXMgeW91ciByZWd1bGFyIHVzZXIsIGFuZCBpdCB3aWxsIGluc3RhbGwgc3BhcnNlIGluIHlvdXIgfi9iaW4gZGlyZWN0b3J5LgorQWZ0ZXIgdGhhdCwgZG9pbmcgYSBrZXJuZWwgbWFrZSB3aXRoICJtYWtlIEM9MSIgd2lsbCBydW4gc3BhcnNlIG9uIGFsbCB0aGUKK0MgZmlsZXMgdGhhdCBnZXQgcmVjb21waWxlZCwgb3Igd2l0aCAibWFrZSBDPTIiIHdpbGwgcnVuIHNwYXJzZSBvbiB0aGUKK2ZpbGVzIHdoZXRoZXIgdGhleSBuZWVkIHRvIGJlIHJlY29tcGlsZWQgb3Igbm90IChpZSB0aGUgbGF0dGVyIGlzIGZhc3Qgd2F5Cit0byBjaGVjayB0aGUgd2hvbGUgdHJlZSBpZiB5b3UgaGF2ZSBhbHJlYWR5IGJ1aWx0IGl0KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dCBiL0RvY3VtZW50YXRpb24vc3BlY2lhbGl4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTRiNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGVjaWFsaXgudHh0CkBAIC0wLDAgKzEsMzg1IEBACisKKyAgICAgIHNwZWNpYWxpeC50eHQgIC0tIHNwZWNpYWxpeCBJTzgrIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyIHJlYWRtZS4KKworCisKKyAgICAgIENvcHlyaWdodCAoQykgMTk5NyAgUm9nZXIgV29sZmYgKFIuRS5Xb2xmZkBCaXRXaXphcmQubmwpCisKKyAgICAgIFNwZWNpYWxpeCBwYXlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQgb2YgdGhpcyBkcml2ZXIuCisgICAgICBQbGVhc2UgRE8gY29udGFjdCBpbzgtbGludXhAc3BlY2lhbGl4LmNvLnVrIGlmIHlvdSByZXF1aXJlCisgICAgICBzdXBwb3J0LgorCisgICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGluIHRoZSBCaXRXaXphcmQgbGludXggZGV2aWNlCisgICAgICBkcml2ZXIgc2VydmljZS4gSWYgeW91IHJlcXVpcmUgYSBsaW51eCBkZXZpY2UgZHJpdmVyIGZvciB5b3VyCisgICAgICBwcm9kdWN0LCBwbGVhc2UgY29udGFjdCBkZXZpY2VzQEJpdFdpemFyZC5ubCBmb3IgYSBxdW90ZS4KKworICAgICAgVGhpcyBjb2RlIGlzIGZpcm1seSBiYXNlZCBvbiB0aGUgcmlzY29tLzggc2VyaWFsIGRyaXZlciwKKyAgICAgIHdyaXR0ZW4gYnkgRG1pdHJ5IEdvcm9kY2hhbmluLiBUaGUgc3BlY2lhbGl4IElPOCsgY2FyZAorICAgICAgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gd2FzIG9idGFpbmVkIGZyb20gdGhlIENMLUNEMTg2NSBEYXRhCisgICAgICBCb29rLCBhbmQgU3BlY2lhbGl4IGRvY3VtZW50IG51bWJlciA2MjAwMDU5OiBJTzgrIEhhcmR3YXJlCisgICAgICBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24sIGF1Z21lbnRlZCBieSBkb2N1bWVudCBudW1iZXIgNjIwMDA4ODoKKyAgICAgIE1lcmFrIEhhcmR3YXJlIEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbi4gKElPOCsvUENJIGlzIGFsc28gCisgICAgICBjYWxsZWQgTWVyYWspCisKKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICAgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksCisgICAgICBVU0EuCisKKworSW50cm8KKz09PT09CisKKyAKK1RoaXMgZmlsZSBjb250YWlucyBzb21lIHJhbmRvbSBpbmZvcm1hdGlvbiwgdGhhdCBJIGxpa2UgdG8gaGF2ZSBvbmxpbmUKK2luc3RlYWQgb2YgaW4gYSBtYW51YWwgdGhhdCBjYW4gZ2V0IGxvc3QuIEV2ZXIgbWlzcGxhY2UgeW91ciBMaW51eAora2VybmVsIHNvdXJjZXM/ICBBbmQgdGhlIG1hbnVhbCBvZiBvbmUgb2YgdGhlIGJvYXJkcyBpbiB5b3VyIGNvbXB1dGVyPworCisKK0FkZHJlc3NlcyBhbmQgaW50ZXJydXB0cworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZHJlc3MgZGlwIHN3aXRjaCBzZXR0aW5nczoKK1RoZSBkaXAgc3dpdGNoIHNldHMgYml0cyAyLTkgb2YgdGhlIElPIGFkZHJlc3MuIAorCisgICAgICAgOSA4IDcgNiA1IDQgMyAyIAorICAgICArLS0tLS0tLS0tLS0tLS0tLS0rCisgICAwIHwgWCAgIFggWCBYIFggWCBYIHwKKyAgICAgfCAgICAgICAgICAgICAgICAgfCAgICA9ICAgSW9CYXNlID0gMHgxMDAgCisgICAxIHwgICBYICAgICAgICAgICAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAtLS0tLS0gUlMyMzIgY29ubmVjdG9ycyAtLS0tPgorICAgICAgICAgCisgICAgICAgICB8ICAgIHwgICAgfAorICAgICAgIGVkZ2UgY29ubmVjdG9yCisgICAgICAgICB8ICAgIHwgICAgfAorICAgICAgICAgViAgICBWICAgIFYKKworQmFzZSBhZGRyZXNzIDB4MTAwIGNhdXNlZCBhIGNvbmZsaWN0IGluIG9uZSBvZiBteSBjb21wdXRlcnMgb25jZS4gIEkKK2hhdmVuJ3QgdGhlIGZvZ2dpZXN0IHdoeS4gTXkgU3BlY2lhbGl4IGNhcmQgaXMgbm93IGF0IDB4MTgwLiAgTXkKK290aGVyIGNvbXB1dGVyIHJ1bnMganVzdCBmaW5lIHdpdGggdGhlIFNwZWNpYWxpeCBjYXJkIGF0IDB4MTAwLi4uLgorVGhlIGNhcmQgb2NjdXBpZXMgNCBhZGRyZXNzZXMsIGJ1dCBhY3R1YWxseSBvbmx5IHR3byBhcmUgcmVhbGx5IHVzZWQuCisKK1RoZSBQQ0kgdmVyc2lvbiBkb2Vzbid0IGhhdmUgYW55IGRpcCBzd2l0Y2hlcy4gVGhlIEJJT1MgYXNzaWducworYW4gSU8gYWRkcmVzcy4gCisKK1RoZSBkcml2ZXIgbm93IHN0aWxsIGF1dG9wcm9iZXMgYXQgMHgxMDAsIDB4MTgwLCAweDI1MCBhbmQgMHgyNjAuICBJZgordGhhdCBjYXVzZXMgdHJvdWJsZSBmb3IgeW91LCBwbGVhc2UgcmVwb3J0IHRoYXQuIEknbGwgcmVtb3ZlCithdXRvcHJvYmluZyB0aGVuLgorCitUaGUgZHJpdmVyIHdpbGwgdGVsbCB0aGUgY2FyZCB3aGF0IElSUSB0byB1c2UsIHNvIHlvdSBkb24ndCBoYXZlIHRvCitjaGFuZ2UgYW55IGp1bXBlcnMgdG8gY2hhbmdlIHRoZSBJUlEuIEp1c3QgdXNlIGEgY29tbWFuZCBsaW5lCithcmd1bWVudCAoaXJxPXh4KSB0byB0aGUgaW5zbW9kIHByb2dyYW0gdG8gc2V0IHRoZSBpbnRlcnJ1cHQuCisKK1RoZSBCSU9TIGFzc2lnbnMgdGhlIElSUSBvbiB0aGUgUENJIHZlcnNpb24uIFlvdSBoYXZlIG5vIHNheSBpbiB3aGF0CitJUlEgdG8gdXNlIGluIHRoYXQgY2FzZS4gCisKK0lmIHlvdXIgc3BlY2lhbGl4IGNhcmRzIGFyZSBub3QgYXQgdGhlIGRlZmF1bHQgbG9jYXRpb25zLCB5b3UgY2FuIHVzZQordGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnQgInNwZWNpYWxpeD1pbzAsaXJxMCxpbzEsaXJxMS4uLiIuCitIZXJlICJpbzAiIGlzIHRoZSBpbyBhZGRyZXNzIGZvciB0aGUgZmlyc3QgY2FyZCwgYW5kICJpcnEwIiBpcyB0aGUKK2lycSBsaW5lIHRoYXQgdGhlIGZpcnN0IGNhcmQgc2hvdWxkIHVzZS4gQW5kIHNvIG9uLiAKKworRXhhbXBsZXMuIAorCitZb3UgdXNlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgYW5kIGhhdmUgdGhyZWUgY2FyZHMgYXQgMHgxMDAsIDB4MjUwCithbmQgMHgxODAuIEFuZCBzb21lIHdheSBvciBhbm90aGVyIHlvdSB3YW50IHRoZW0gZGV0ZWN0ZWQgaW4gdGhhdAorb3JkZXIuIE1vcmVvdmVyIGlycSAxMiBpcyB0YWtlbiAoZS5nLiBieSB5b3VyIFBTLzIgbW91c2UpLgorCisgIGluc21vZCBzcGVjaWFsaXgubyBpb2Jhc2U9MHgxMDAsMHgyNTAsMHgxODAgaXJxPTksMTEsMTUKKworVGhlIHNhbWUgdGhyZWUgY2FyZHMsIGJ1dCBub3cgaW4gdGhlIGtlcm5lbCB3b3VsZCByZXF1aXJlIHlvdSB0bworYWRkIAorCisgICBzcGVjaWFsaXg9MHgxMDAsOSwweDI1MCwxMSwweDE4MCwxNQorCit0byB0aGUgY29tbWFuZCBsaW5lLiBUaGlzIHdvdWxkIGJlY29tZSAKKworICAgYXBwZW5kPSJzcGVjaWFsaXg9MHgxMDAsOSwweDI1MCwxMSwweDE4MCwxNSIgCisKK2luIHlvdXIgL2V0Yy9saWxvLmNvbmYgZmlsZSBpZiB5b3UgdXNlIGxpbG8uIAorCitUaGUgU3BlY2lhbGl4IGRyaXZlciBpcyBzbGlnaHRseSBvZGQ6IEl0IGFsbG93cyB5b3UgdG8gaGF2ZSB0aGUgc2Vjb25kCitvciB0aGlyZCBjYXJkIGRldGVjdGVkIHdpdGhvdXQgaGF2aW5nIGEgZmlyc3QgY2FyZC4gVGhpcyBoYXMKK2FkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMuIEEgc2xvdCB0aGF0IGlzbid0IGZpbGxlZCBieSBhbiBJU0EgY2FyZCwKK21pZ2h0IGJlIGZpbGxlZCBpZiBhIFBDSSBjYXJkIGlzIGRldGVjdGVkLiBUaHVzIGlmIHlvdSBoYXZlIGFuIElTQQorY2FyZCBhdCAweDI1MCBhbmQgYSBQQ0kgY2FyZCwgeW91IHdvdWxkIGdldDoKKworc3gwOiBzcGVjaWFsaXggSU84KyBCb2FyZCBhdCAweDEwMCBub3QgZm91bmQuCitzeDE6IHNwZWNpYWxpeCBJTzgrIEJvYXJkIGF0IDB4MTgwIG5vdCBmb3VuZC4KK3N4Mjogc3BlY2lhbGl4IElPOCsgYm9hcmQgZGV0ZWN0ZWQgYXQgMHgyNTAsIElSUSAxMiwgQ0QxODY1IFJldi4gQi4KK3N4Mzogc3BlY2lhbGl4IElPOCsgQm9hcmQgYXQgMHgyNjAgbm90IGZvdW5kLgorc3gwOiBzcGVjaWFsaXggSU84KyBib2FyZCBkZXRlY3RlZCBhdCAweGQ4MDAsIElSUSA5LCBDRDE4NjUgUmV2LiBCLgorCitUaGlzIHdvdWxkIGhhcHBlbiBpZiB5b3UgZG9uJ3QgZ2l2ZSBhbnkgcHJvYmUgaGludHMgdG8gdGhlIGRyaXZlci4gCitJZiB5b3Ugd291bGQgc3BlY2lmeToKKworICAgc3BlY2lhbGl4PTB4MjUwLDExCisKK3lvdSdkIGdldCB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzOgorCitzeDA6IHNwZWNpYWxpeCBJTzgrIGJvYXJkIGRldGVjdGVkIGF0IDB4MjUwLCBJUlEgMTEsIENEMTg2NSBSZXYuIEIuCitzeDE6IHNwZWNpYWxpeCBJTzgrIGJvYXJkIGRldGVjdGVkIGF0IDB4ZDgwMCwgSVJRIDksIENEMTg2NSBSZXYuIEIuCisKK0lTQSBwcm9iaW5nIGlzIGFib3J0ZWQgYWZ0ZXIgdGhlIElPIGFkZHJlc3MgeW91IGdhdmUgaXMgZXhoYXVzdGVkLCBhbmQKK3RoZSBQQ0kgY2FyZCBpcyBub3cgZGV0ZWN0ZWQgYXMgdGhlIHNlY29uZCBjYXJkLiBUaGUgSVNBIGNhcmQgaXMgbm93CithbHNvIGZvcmNlZCB0byBJUlExMS4uLi4KKworCitCYXVkIHJhdGVzCis9PT09PT09PT09CisKK1RoZSByZXYgMS4yIGFuZCBiZWxvdyBib2FyZHMgdXNlIGEgQ0wtQ0QxODY0LiBUaGVzZSBjaGlwcyBjYW4gb25seSAKK2RvIDY0a2JpdC4gVGhlIHJldiAxLjMgYW5kIG5ld2VyIGJvYXJkcyB1c2UgYSBDTC1DRDE4NjUuIFRoZXNlIGNoaXBzCithcmUgb2ZmaWNpYWxseSBjYXBhYmxlIG9mIDExNWsyLgorCitUaGUgU3BlY2lhbGl4IGNhcmQgdXNlcyBhIDI1TUh6IGNyeXN0YWwgKGluIHRpbWVzIHR3byBtb2RlLCB3aGljaCBpbgorZmFjdCBpcyBhIGRpdmlkZWQgYnkgdHdvIG1vZGUpLiBUaGlzIGlzIG5vdCBlbm91Z2ggdG8gcmVhY2ggdGhlIHJhdGVkCisxMTVrMiBvbiBhbGwgcG9ydHMgYXQgdGhlIHNhbWUgdGltZS4gV2l0aCB0aGlzIGNsb2NrIHJhdGUgeW91IGNhbiBvbmx5CitkbyAzNyUgb2YgdGhpcyByYXRlLiBUaGlzIG1lYW5zIHRoYXQgYXQgMTE1azIgb24gYWxsIHBvcnRzIHlvdSBhcmUKK2dvaW5nIHRvIGxvc2UgY2hhcmFjdGVycyAoVGhlIGNoaXAgY2Fubm90IGhhbmRsZSB0aGF0IG1hbnkgaW5jb21pbmcKK2JpdHMgYXQgdGhpcyBjbG9jayByYXRlLikgKFllcywgeW91IHJlYWQgdGhhdCBjb3JyZWN0bHk6IHRoZXJlIGlzIGEKK2xpbWl0IHRvIHRoZSBudW1iZXIgb2YgLT1iaXRzPS0gcGVyIHNlY29uZCB0aGF0IHRoZSBjaGlwIGNhbiBoYW5kbGUuKQorCitJZiB5b3UgbmVhciB0aGUgImxpbWl0IiB5b3Ugd2lsbCBmaXJzdCBzdGFydCB0byBzZWUgYSBncmFjZWZ1bAorZGVncmFkYXRpb24gaW4gdGhhdCB0aGUgY2hpcCBjYW5ub3Qga2VlcCB0aGUgdHJhbnNtaXR0ZXIgYnVzeSBhdCBhbGwKK3RpbWVzLiBIb3dldmVyIHdpdGggYSBjZW50cmFsIGNsb2NrIHRoaXMgc2xvdywgeW91IGNhbiBhbHNvIGdldCBpdCB0bworbWlzcyBpbmNvbWluZyBjaGFyYWN0ZXJzLiBUaGUgZHJpdmVyIHdpbGwgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbgoreW91IGFyZSBvdXRzaWRlIHRoZSBvZmZpY2lhbCBzcGVjcy4gVGhlIG1lc3NhZ2VzIHVzdWFsbHkgc2hvdyB1cCBpbgordGhlIGZpbGUgL3Zhci9sb2cvbWVzc2FnZXMgLgorCitUaGUgc3BlY2lhbGl4IGNhcmQgY2Fubm90IHJlbGlhYmx5IGRvIDExNWsyLiBJZiB5b3UgdXNlIGl0LCB5b3UgaGF2ZQordG8gZG8gImV4dGVuc2l2ZSB0ZXN0aW5nIiAoKikgdG8gdmVyaWZ5IGlmIGl0IGFjdHVhbGx5IHdvcmtzLgorCitXaGVuICJtZ2V0dHkiIGNvbW11bmljYXRlcyB3aXRoIG15IG1vZGVtIGF0IDExNWsyIGl0IHJlcG9ydHM6Citnb3Q6ICsrK1swZF1BVFEwVjFIMFswZF1bMGRdWzhhXU9bY2JdWzBkXVs4YV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eIF5eXl4gICAgXl5eXiAKKworVGhlIHRocmVlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSAiXl5eIiB1bmRlciB0aGVtIGhhdmUgc3VmZmVyZWQgYQorYml0IGVycm9yIGluIHRoZSBoaWdoZXN0IGJpdC4gSW4gY29uY2x1c2lvbjogSSd2ZSB0ZXN0ZWQgaXQsIGFuZCBmb3VuZAordGhhdCBpdCBzaW1wbHkgRE9FU04nVCB3b3JrIGZvciBtZS4gSSBhbHNvIHN1c3BlY3QgdGhhdCB0aGlzIGlzIGFsc28KK2NhdXNlZCBieSB0aGUgYmF1ZCByYXRlIGJlaW5nIGp1c3QgYSBsaXR0bGUgYml0IG91dCBvZiB0dW5lLiAKKworSSB1cGdyYWRlZCB0aGUgY3J5c3RhbCB0byA2Nk1oeiBvbiBvbmUgb2YgbXkgU3BlY2lhbGl4IGNhcmRzLiBXb3JrcworZ3JlYXQhIENvbnRhY3QgbWUgZm9yIGRldGFpbHMuIChWb2lkcyB3YXJyYW50eSwgcmVxdWlyZXMgYSBzdGVhZHkgaGFuZAorYW5kIG1vcmUgc3VjaCByZXN0cmljdGlvbnMuLi4uKQorCisKKygqKSBDaXJydXMgbG9naWMgQ0QxODY0IGRhdGFib29rLCBwYWdlIDQwLgorCisKK0NhYmxlcyBmb3IgdGhlIFNwZWNpYWxpeCBJTzgrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcGlub3V0IG9mIHRoZSBjb25uZWN0b3JzIG9uIHRoZSBJTzgrIGlzOgorCisgICAgIHBpbiAgICBzaG9ydCAgICBkaXJlY3Rpb24gICAgbG9uZyBuYW1lCisgICAgICAgICAgICBuYW1lCisgICAgUGluIDEgICBEQ0QgICAgICBpbnB1dCAgICAgICAgRGF0YSBDYXJyaWVyIERldGVjdAorICAgIFBpbiAyICAgUlhEICAgICAgaW5wdXQgICAgICAgIFJlY2VpdmUKKyAgICBQaW4gMyAgIERUUi9SVFMgIG91dHB1dCAgICAgICBEYXRhIFRlcm1pbmFsIFJlYWR5L1JlYWR5IFRvIFNlbmQKKyAgICBQaW4gNCAgIEdORCAgICAgIC0gICAgICAgICAgICBHcm91bmQKKyAgICBQaW4gNSAgIFRYRCAgICAgIG91dHB1dCAgICAgICBUcmFuc21pdAorICAgIFBpbiA2ICAgQ1RTICAgICAgaW5wdXQgICAgICAgIENsZWFyIFRvIFNlbmQKKyAgICAgICAgCisgICAgCisgICAgICAgICAgICAgLS0gNiAgNSAgNCAgMyAgMiAgMSAtLQorICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICArLS0tLS0gICAgICAgICAgLS0tLS0rCisgICAgICAgICAgICAgICAgICB8X19fX19fX19fX3wKKyAgICAgICAgICAgICAgICAgICAgICBjbGlwCisgICAgCisgICAgRnJvbnQgdmlldyBvZiBhbiBSSjEyIGNvbm5lY3Rvci4gQ2FibGUgbW92ZXMgImludG8iIHRoZSBwYXBlci4KKyAgICAodGhlIHBsdWcgaXMgcmVhZHkgdG8gcGx1ZyBpbnRvIHlvdXIgbW91dGggdGhpcyB3YXkuLi4pCisKKyAgICAKKyAgICBOVUxMIGNhYmxlLiBJIGRvbid0IGtub3cgd2hvIGlzIGdvaW5nIHRvIHVzZSB0aGVzZSBleGNlcHQgZm9yCisgICAgdGVzdGluZyBwdXJwb3NlcywgYnV0IEkgdGVzdGVkIHRoZSBjYXJkcyB3aXRoIHRoaXMgY2FibGUuIChJdCAKKyAgICB0b29rIHF1aXRlIGEgd2hpbGUgdG8gZmlndXJlIG91dCwgc28gSSdtIG5vdCBnb2luZyB0byBkZWxldGUKKyAgICBpdC4gU28gdGhlcmUhIDotKQorICAgIAorICAgIAorICAgIFRoaXMgZW5kIGdvZXMgICAgICAgICAgICAgICBUaGlzIGVuZCBuZWVkcworICAgIHN0cmFpZ2h0IGludG8gdGhlICAgICAgICAgICBzb21lIHR3aXN0cyBpbgorICAgIFJKMTIgcGx1Zy4gICAgICAgICAgICAgICAgICB0aGUgd2lyaW5nLgorICAgICAgIElPOCsgUkoxMiAgICAgICAgICAgICAgICAgICBJTzgrIFJKMTIKKyAgICAgICAgMSAgRENEICAgICAgIHdoaXRlICAgICAgICAgIC0KKyAgICAgICAgLSAgICAgICAgICAgICAtICAgICAgICAgICAgIDEgRENECisgICAgICAgIDIgIFJYRCAgICAgICBibGFjayAgICAgICAgICA1IFRYRAorICAgICAgICAzICBEVFIvUlRTICAgcmVkICAgICAgICAgICAgNiBDVFMKKyAgICAgICAgNCAgR05EICAgICAgIGdyZWVuICAgICAgICAgIDQgR05ECisgICAgICAgIDUgIFRYRCAgICAgICB5ZWxsb3cgICAgICAgICAyIFJYRAorICAgICAgICA2ICBDVFMgICAgICAgYmx1ZSAgICAgICAgICAgMyBEVFIvUlRTCisgICAgCisKKyAgICBTYW1lIE5VTEwgY2FibGUsIGJ1dCBub3cgc29ydGVkIG9uIHRoZSBzZWNvbmQgY29sdW1uLgorIAorICAgICAgICAxICBEQ0QgICAgICAgd2hpdGUgICAgICAgICAgLQorICAgICAgICAtICAgICAgICAgICAgIC0gICAgICAgICAgICAgMSBEQ0QKKyAgICAgICAgNSAgVFhEICAgICAgIHllbGxvdyAgICAgICAgIDIgUlhECisgICAgICAgIDYgIENUUyAgICAgICBibHVlICAgICAgICAgICAzIERUUi9SVFMKKyAgICAgICAgNCAgR05EICAgICAgIGdyZWVuICAgICAgICAgIDQgR05ECisgICAgICAgIDIgIFJYRCAgICAgICBibGFjayAgICAgICAgICA1IFRYRAorICAgICAgICAzICBEVFIvUlRTICAgcmVkICAgICAgICAgICAgNiBDVFMKKyAgICAKKyAgICAKKyAgICAKKyAgICBUaGlzIGlzIGEgbW9kZW0gY2FibGUgdXNhYmxlIGZvciBoYXJkd2FyZSBoYW5kc2hha2luZzoKKyAgICAgICAgUkoxMiAgICAgICAgICAgICAgICAgICAgICAgIERCMjUgICAgICAgICAgIERCOQorICAgICAgICAxICAgRENEICAgICAgd2hpdGUgICAgICAgICAgOCBEQ0QgICAgICAgICAgMSBEQ0QKKyAgICAgICAgMiAgIFJYRCAgICAgIGJsYWNrICAgICAgICAgIDMgUlhEICAgICAgICAgIDIgUlhECisgICAgICAgIDMgICBEVFIvUlRTICByZWQgICAgICAgICAgICA0IFJUUyAgICAgICAgICA3IFJUUworICAgICAgICA0ICAgR05EICAgICAgZ3JlZW4gICAgICAgICAgNyBHTkQgICAgICAgICAgNSBHTkQKKyAgICAgICAgNSAgIFRYRCAgICAgIHllbGxvdyAgICAgICAgIDIgVFhEICAgICAgICAgIDMgVFhECisgICAgICAgIDYgICBDVFMgICAgICBibHVlICAgICAgICAgICA1IENUUyAgICAgICAgICA4IENUUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tICAgNiBEU1IgICAgICAgICAgNiBEU1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSAgMjAgRFRSICAgICAgICAgIDQgRFRSCisKKyAgICBUaGlzIGlzIGEgbW9kZW0gY2FibGUgdXNhYmxlIGZvciBzb2Z0d2FyZSBoYW5kc2hha2luZzoKKyAgICBJdCBhbGxvd3MgeW91IHRvIHJlc2V0IHRoZSBtb2RlbSB1c2luZyB0aGUgRFRSIGlvY3Rscy4KKyAgICBJIChSRVcpIGhhdmUgbmV2ZXIgdGVzdGVkIHRoaXMsICJidXQgeHh4eHh4eHh4eHh4eAorICAgIHNheXMgdGhhdCBpdCB3b3Jrcy4iIElmIHlvdSB0ZXN0IHRoaXMsIHBsZWFzZQorICAgIHRlbGwgbWUgYW5kIEknbGwgZmlsbCBpbiB5b3VyIG5hbWUgb24gdGhlIHh4eCdzLgorCisgICAgICAgIFJKMTIgICAgICAgICAgICAgICAgICAgICAgICBEQjI1ICAgICAgICAgICBEQjkKKyAgICAgICAgMSAgIERDRCAgICAgIHdoaXRlICAgICAgICAgIDggRENEICAgICAgICAgIDEgRENECisgICAgICAgIDIgICBSWEQgICAgICBibGFjayAgICAgICAgICAzIFJYRCAgICAgICAgICAyIFJYRAorICAgICAgICAzICAgRFRSL1JUUyAgcmVkICAgICAgICAgICAyMCBEVFIgICAgICAgICAgNCBEVFIKKyAgICAgICAgNCAgIEdORCAgICAgIGdyZWVuICAgICAgICAgIDcgR05EICAgICAgICAgIDUgR05ECisgICAgICAgIDUgICBUWEQgICAgICB5ZWxsb3cgICAgICAgICAyIFRYRCAgICAgICAgICAzIFRYRAorICAgICAgICA2ICAgQ1RTICAgICAgYmx1ZSAgICAgICAgICAgNSBDVFMgICAgICAgICAgOCBDVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSAgIDYgRFNSICAgICAgICAgIDYgRFNSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0gICA0IFJUUyAgICAgICAgICA3IFJUUworCisgICBJIGJvdWdodCBhIDYgd2lyZSBmbGF0IGNhYmxlLiBJdCB3YXMgY29sb3JlZCBhcyBpbmRpY2F0ZWQuCisgICBDaGVjayB0aGF0IHlvdXJzIGlzIHRoZSBzYW1lIGJlZm9yZSB5b3UgdHJ1c3QgbWUgb24gdGhpcy4KKyAgIAorIAorSGFyZHdhcmUgaGFuZHNoYWtpbmcgaXNzdWVzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBpbiB0d28gZGlmZmVyZW50IHdheXMuIFRoZSBkZWZhdWx0CisoIlNwZWNpYWxpeCBEVFIvUlRTIHBpbiBpcyBSVFMiIGlzIG9mZikgdGhlIHBpbiBiZWhhdmVzIGFzIERUUiB3aGVuCitoYXJkd2FyZSBoYW5kc2hha2luZyBpcyBvZmYuIEl0IGJlaGF2ZXMgYXMgdGhlIFJUUyBoYXJkd2FyZQoraGFuZHNoYWtpbmcgc2lnbmFsIHdoZW4gaGFyZHdhcmUgaGFuZHNoYWtpbmcgaXMgc2VsZWN0ZWQuCisKK1doZW4geW91IHVzZSB0aGlzLCB5b3UgaGF2ZSB0byB1c2UgdGhlIGFwcHJvcHJpYXRlIGNhYmxlLiBUaGUKK2NhYmxlIHdpbGwgZWl0aGVyIGJlIGNvbXBhdGlibGUgd2l0aCBoYXJkd2FyZSBoYW5kc2hha2luZyBvciB3aXRoCitzb2Z0d2FyZSBoYW5kc2hha2luZy4gU28gc3dpdGNoaW5nIG9uIHRoZSBmbHkgaXMgbm90IHJlYWxseSBhbgorb3B0aW9uLgorCitJIGFjdHVhbGx5IHByZWZlciB0byB1c2UgdGhlICJTcGVjaWFsaXggRFRSL1JUUyBwaW4gaXMgUlRTIiBvcHRpb24uCitUaGlzIG1ha2VzIHRoZSBEVFIvUlRTIHBpbiBhbHdheXMgYW4gUlRTIHBpbiwgYW5kIGlvY3RscyB0bworY2hhbmdlIERUUiBhcmUgYWx3YXlzIGlnbm9yZWQuIEkgaGF2ZSBhIGNhYmxlIHRoYXQgaXMgY29uZmlndXJlZAorZm9yIHRoaXMuIAorCisKK1BvcnRzIGFuZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PQorCitQb3J0IDAgaXMgdGhlIG9uZSBmdXJ0aGVzdCBmcm9tIHRoZSBjYXJkLWVkZ2UgY29ubmVjdG9yLgorCitEZXZpY2VzOgorCitZb3Ugc2hvdWxkIG1ha2UgdGhlIGRldmljZXMgYXMgZm9sbG93czoKKworYmFzaAorY2QgL2RldgorZm9yIGkgaW4gIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgXAorICAgICAgICAgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKK2RvCisgIGVjaG8gLW4gIiRpICIKKyAgbWtub2QgL2Rldi90dHlXJGkgYyA3NSAkaQorICBta25vZCAvZGV2L2N1dyRpIGMgNzYgJGkKK2RvbmUKK2VjaG8gIiIKKworSWYgeW91ciBzeXN0ZW0gZG9lc24ndCBjb21lIHdpdGggdGhlc2UgZGV2aWNlcyBwcmVpbnN0YWxsZWQsIGJ1ZyB5b3VyCitsaW51eC12ZW5kb3IgYWJvdXQgdGhpcy4gVGhleSBoYXZlIGhhZCBhbXBsZSB0aW1lIHRvIGdldCB0aGlzCitpbXBsZW1lbnRlZCBieSBub3cuCisKK1lvdSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNCBib2FyZHMgaW4gb25lIGNvbXB1dGVyLiBUaGUgY2FyZCBvbmx5CitzdXBwb3J0cyA0IGRpZmZlcmVudCBpbnRlcnJ1cHRzLiBJZiB5b3UgcmVhbGx5IHdhbnQgdGhpcywgY29udGFjdCBtZQorYWJvdXQgdGhpcyBhbmQgSSdsbCBnaXZlIHlvdSBhIGZldyB0aXBzIChyZXF1aXJlcyBzb2xkZXJpbmcgaXJvbikuLi4uCisKK0lmIHlvdSBoYXZlIGVub3VnaCBQQ0kgc2xvdHMsIHlvdSBjYW4gcHJvYmFibHkgdXNlIG1vcmUgdGhhbiA0IFBDSQordmVyc2lvbnMgb2YgdGhlIGNhcmQgdGhvdWdoLi4uLiAKKworVGhlIFBDSSB2ZXJzaW9uIG9mIHRoZSBjYXJkIGNhbm5vdCBhZGhlcmUgdG8gdGhlIG1lY2hhbmljYWwgcGFydCBvZgordGhlIFBDSSBzcGVjIGJlY2F1c2UgdGhlIDggc2VyaWFsIGNvbm5lY3RvcnMgYXJlIHNpbXBseSB0b28gbGFyZ2UuIElmCitpdCBkb2Vzbid0IGZpdCBpbiB5b3VyIGNvbXB1dGVyLCBicmluZyBiYWNrIHRoZSBjYXJkLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgRml4ZWQgYnVncyBhbmQgcmVzdHJpY3Rpb25zOgorICAgICAgIC0gRHVyaW5nIGluaXRpYWxpemF0aW9uLCBpbnRlcnJ1cHRzIGFyZSBibGluZGx5IHR1cm5lZCBvbi4KKyAgICAgICAgICAgIEhhdmluZyBhIHNoYWRvdyB2YXJpYWJsZSB3b3VsZCBjYXVzZSBhbiBleHRyYSBtZW1vcnkKKyAgICAgICAgICAgIGFjY2VzcyBvbiBldmVyeSBJTyBpbnN0cnVjdGlvbi4gCisgICAgICAgLSBUaGUgaW50ZXJydXB0IChvbiB0aGUgY2FyZCkgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gd2UKKyAgICAgICAgIGRvbid0IGFsbG9jYXRlIHRoZSBMaW51eCBlbmQgb2YgdGhlIGludGVycnVwdC4gVGhpcyBhbGxvd3MgCisgICAgICAgICBhIGRpZmZlcmVudCBkcml2ZXIvY2FyZCB0byB1c2UgaXQgd2hpbGUgYWxsIHBvcnRzIGFyZSBub3QgaW4KKyAgICAgICAgIHVzZS4uLi4uIChhIGxhIHN0YW5kYXJkIHNlcmlhbCBwb3J0KQorICAgICAgID09IEFuIGV4dHJhIF9vZmYgdmFyaWFudCBvZiB0aGUgc3hfaW4gYW5kIHN4X291dCBtYWNyb3MgYXJlCisgICAgICAgICAgbm93IGF2YWlsYWJsZS4gVGhleSBkb24ndCBzZXQgdGhlIGludGVycnVwdCBlbmFibGUgYml0LgorICAgICAgICAgIFRoZXNlIGFyZSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gTm9ybWFsIG9wZXJhdGlvbiB1c2VzCisgICAgICAgICAgdGhlIG9sZCB2YXJpYW50IHdoaWNoIGVuYWJsZXMgdGhlIGludGVycnVwdCBsaW5lLgorICAgICAgIC0gUlRTL0RUUiBpc3N1ZSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gCisgICAgICAgICBzcGVjaWFsaXgnIHNwZWMuCisgICAgICAgICAgICBJIGtpbmQgb2YgbGlrZSB0aGUgImRldGVybWluaXNtIiBvZiB0aGUgY3VycmVudCAKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLiBDb21waWxlIHRpbWUgZmxhZz8KKyAgICAgICA9PSBPay4gQ29tcGlsZSB0aW1lIGZsYWchIERlZmF1bHQgaXMgaG93IFNwZWNpYWxpeCBsaWtlcyBpdC4KKyAgICAgICA9PSBOb3cgYSBjb25maWcgdGltZSBmbGFnISBHZXRzIHNhdmVkIGluIHlvdXIgY29uZmlnIGZpbGUuIE5lYXQhCisgICAgICAgLSBDYW4geW91IHNldCB0aGUgSU8gYWRkcmVzcyBmcm9tIHRoZSBsaWxvIGNvbW1hbmQgbGluZT8KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRoaXMsIGJ1ZyBtZSBhYm91dCBpdCwgSSdsbCBtYWtlIGl0LiAKKyAgICAgICA9PSBIYWghIE5vIGJ1Z2dpbmcgbmVlZGVkLiBGaXhlZCEgOi0pCisgICAgICAgLSBDaXJydXMgbG9naWMgaGFzbid0IGdvdHRlbiBiYWNrIHRvIG1lIHlldCB3aHkgdGhlIENEMTg2NSBjYW4KKyAgICAgICAgICAgIGFuZCB0aGUgQ0QxODY0IGNhbid0IGRvIDExNWsyLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGlzCisgICAgICAgICAgICBiZWNhdXNlIHRoZSBDRDE4NjQgaXMgbm90IHJhdGVkIGZvciAzM01IeiBvcGVyYXRpb24uCisgICAgICAgICAgICBUaGVyZWZvcmUgdGhlIENEMTg2NCB2ZXJzaW9ucyBvZiB0aGUgY2FyZCBjYW4ndCBkbyAxMTVrMiBvbiAKKyAgICAgICAgICAgIGFsbCBwb3J0cyBqdXN0IGxpa2UgdGhlIENEMTg2NSB2ZXJzaW9ucy4gVGhlIGRyaXZlciBkb2VzCisgICAgICAgICAgICBub3QgYmxvY2sgMTE1azIgb24gQ0QxODY0IGNhcmRzLiAKKyAgICAgICAgPT0gSSBjYWxsZWQgdGhlIENpcnJ1cyBMb2dpYyByZXByZXNlbnRhdGl2ZSBoZXJlIGluIEhvbGxhbmQuCisgICAgICAgICAgIFRoZSBDRDE4NjQgZGF0YWJvb2sgaXMgaWRlbnRpY2FsIHRvIHRoZSBDRDE4NjUgZGF0YWJvb2ssIAorICAgICAgICAgICBleGNlcHQgZm9yIGFuIGV4dHJhIHdhcm5pbmcgYXQgdGhlIGVuZC4gU2ltaWxhciBCaXQgZXJyb3JzCisgICAgICAgICAgIGhhdmUgYmVlbiBvYnNlcnZlZCBpbiB0ZXN0aW5nIGF0IDExNWsyIG9uIGJvdGggYW4gMTg2NSBhbmQKKyAgICAgICAgICAgYSAxODY0IGNoaXAuIEkgc2VlIG5vIHJlYXNvbiB3aHkgSSB3b3VsZCBwcm9oaWJpdCAxMTVrMiBvbgorICAgICAgICAgICAxODY0IGNoaXBzIGFuZCBub3QgZG8gaXQgb24gMTg2NSBjaGlwcy4gQWN0dWFsbHkgdGhlcmUgaXMKKyAgICAgICAgICAgcmVhc29uIHRvIHByb2hpYml0IGl0IG9uIEJPVEggY2hpcHMuIEkgcHJpbnQgYSB3YXJuaW5nLgorICAgICAgICAgICBJZiB5b3UgdXNlIDExNWsyLCB5b3UncmUgb24geW91ciBvd24uIAorICAgICAgIC0gQSBzcGlreSBDRCBtYXkgc2VuZCBzcHVyaW91cyBIVVBzLiBBbHNvIGluIENMT0NBTD8/PworICAgICAgICAgLS0gQSBmaXggZm9yIHRoaXMgdHVybmVkIG91dCB0byBiZSBjb3VudGVyIHByb2R1Y3RpdmUuIAorICAgICAgICAgICAgRGlmZmVyZW50IGZpeD8gQ3VycmVudCBiZWhhdmlvdXIgaXMgYWNjZXB0YWJsZT8KKyAgICAgICAgIC0tIE1heWJlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QuIElmIGFueWJvZHkKKyAgICAgICAgICAgIGdldHMgYml0dGVuIGJ5IHRoaXMsIHBsZWFzZSByZXBvcnQsIGFuZCBpdCB3aWxsIGdldCBmaXhlZC4KKworICAgICAgICAgLS0gVGVzdGluZyByZXZlYWxlZCB0aGF0IHdoZW4gaW4gQ0xPQ0FMLCB0aGUgcHJvYmxlbSBkb2Vzbid0CisgICAgICAgICAgICBvY2N1ci4gQXMgd2FybmVkIGZvciBpbiB0aGUgQ0QxODY1IG1hbnVhbCwgdGhlIGNoaXAgbWF5CisgICAgICAgICAgICBzZW5kIG1vZGVtIGludHIncyBvbiBhIHNwaWtlLiBXZSBjb3VsZCBmaWx0ZXIgdGhvc2Ugb3V0LAorICAgICAgICAgICAgYnV0IHRoYXQgd291bGQgYmUgYSBjbHVkZ2UgYW55d2F5IChZb3UnZCBzdGlsbCByaXNrIGdldHRpbmcKKyAgICAgICAgICAgIGEgc3B1cmlvdXMgSFVQIHdoZW4gdHdvIHNwaWtlcyBvY2N1ci4pLi4uLi4KKyAKKworCisgIEJ1Z3MgJiByZXN0cmljdGlvbnM6CisgICAgICAgLSBUaGlzIGlzIGEgZGlmZmljdWx0IGNhcmQgdG8gYXV0b3Byb2JlLgorICAgICAgICAgICAgWW91IGhhdmUgdG8gV1JJVEUgdG8gdGhlIGFkZHJlc3MgcmVnaXN0ZXIgdG8gZXZlbiAKKyAgICAgICAgICAgIHJlYWQtcHJvYmUgYSBDRDE4NnggcmVnaXN0ZXIuIERpc2FibGUgYXV0b2RldGVjdGlvbj8KKyAgICAgICAgIC0tIFNwZWNpYWxpeDogYW55IHN1Z2dlc3Rpb25zPworICAgICAgIC0gQXJiaXRyYXJ5IGJhdWQgcmF0ZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIAorICAgICAgICAgICAgSWYgeW91IG5lZWQgdGhpcywgYnVnIG1lIGFib3V0IGl0LiAKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMjI5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3BpbmxvY2tzLnR4dApAQCAtMCwwICsxLDIxMiBAQAorVVBEQVRFIE1hcmNoIDIxIDIwMDUgQW1pdCBHdWQgPGd1ZEBldGgubmV0PgorCitNYWNyb3MgU1BJTl9MT0NLX1VOTE9DS0VEIGFuZCBSV19MT0NLX1VOTE9DS0VEIGFyZSBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCityZW1vdmVkIHNvb24uIFNvIGZvciBhbnkgbmV3IGNvZGUgZHluYW1pYyBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgdXNlZDoKKworICAgc3BpbmxvY2tfdCB4eHhfbG9jazsKKyAgIHJ3bG9ja190IHh4eF9yd19sb2NrOworCisgICBzdGF0aWMgaW50IF9faW5pdCB4eHhfaW5pdCh2b2lkKQorICAgeworICAgCXNwaW5fbG9ja19pbml0KCZ4eHhfbG9jayk7CisJcndfbG9ja19pbml0KCZ4eHhfcndfbG9jayk7CisJLi4uCisgICB9CisKKyAgIG1vZHVsZV9pbml0KHh4eF9pbml0KTsKKworUmVhc29ucyBmb3IgZGVwcmVjYXRpb24KKyAgLSBpdCBodXJ0cyBhdXRvbWF0aWMgbG9jayB2YWxpZGF0b3JzCisgIC0gaXQgYmVjb21lcyBpbnRydXNpdmUgZm9yIHRoZSByZWFsdGltZSBwcmVlbXB0aW9uIHBhdGNoZXMKKworRm9sbG93aW5nIGRpc2N1c3Npb24gaXMgc3RpbGwgdmFsaWQsIGhvd2V2ZXIsIHdpdGggdGhlIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24KK29mIHNwaW5sb2NrcyBpbnN0ZWFkIG9mIHN0YXRpYy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gRnJpLCAyIEphbiAxOTk4LCBEb3VnIExlZGZvcmQgd3JvdGU6Cis+IAorPiBJJ20gd29ya2luZyBvbiBtYWtpbmcgdGhlIGFpYzd4eHggZHJpdmVyIG1vcmUgU01QIGZyaWVuZGx5IChhcyB3ZWxsIGFzCis+IGltcG9ydGluZyB0aGUgbGF0ZXN0IEZyZWVCU0Qgc2VxdWVuY2VyIGNvZGUgdG8gaGF2ZSA3ODk1IHN1cHBvcnQpIGFuZCB3YW50ZWQKKz4gdG8gZ2V0IHNvbWUgaW5mbyBmcm9tIHlvdS4gIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWFrZSB0aGUgdmFyaW91cyByb3V0aW5lcworPiBTTVAgc2FmZSBhcyB3ZWxsIGFzIFVQIHNhZmUgZHVyaW5nIGludGVycnVwdHMgYW5kIG90aGVyIG1hbmlwdWxhdGluZworPiByb3V0aW5lcy4gIFNvIGZhciwgSSd2ZSBhZGRlZCBhIHNwaW5fbG9jayB2YXJpYWJsZSB0byB0aGluZ3MgbGlrZSBteSBxdWV1ZQorPiBzdHJ1Y3RzLiAgTm93LCBmcm9tIHdoYXQgSSByZWNhbGwsIHRoZXJlIGFyZSBzb21lIHNwaW4gbG9jayBmdW5jdGlvbnMgSSBjYW4KKz4gdXNlIHRvIGxvY2sgdGhlc2Ugc3BpbiBsb2NrcyBmcm9tIG90aGVyIHVzZSBhcyBvcHBvc2VkIHRvIGEgKG5hc3R5KQorPiBzYXZlX2ZsYWdzKCk7IGNsaSgpOyBzdHVmZjsgcmVzdG9yZV9mbGFncygpOyBjb25zdHJ1Y3QuICBXaGVyZSBkbyBJIGZpbmQKKz4gdGhlc2Ugcm91dGluZXMgYW5kIGdvIGFib3V0IG1ha2luZyB1c2Ugb2YgdGhlbT8gIERvIHRoZXkgb25seSBsb2NrIG9uIGEKKz4gcGVyLXByb2Nlc3NvciBiYXNpcyBvciBjYW4gdGhleSBhbHNvIGxvY2sgc2F5IGFuIGludGVycnVwdCByb3V0aW5lIGZyb20KKz4gbXVja2luZyB3aXRoIGEgcXVldWUgaWYgdGhlIHF1ZXVlIHJvdXRpbmUgd2FzIG1hbmlwdWxhdGluZyBpdCB3aGVuIHRoZQorPiBpbnRlcnJ1cHQgb2NjdXJyZWQsIG9yIHNob3VsZCBJIHN0aWxsIHVzZSBhIGNsaSgpOyBiYXNlZCBjb25zdHJ1Y3Qgb24gdGhhdAorPiBvbmU/CisKK1NlZSA8YXNtL3NwaW5sb2NrLmg+LiBUaGUgYmFzaWMgdmVyc2lvbiBpczoKKworICAgc3BpbmxvY2tfdCB4eHhfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ4eHhfbG9jaywgZmxhZ3MpOworCS4uLiBjcml0aWNhbCBzZWN0aW9uIGhlcmUgLi4KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4eHhfbG9jaywgZmxhZ3MpOworCithbmQgdGhlIGFib3ZlIGlzIGFsd2F5cyBzYWZlLiBJdCB3aWxsIGRpc2FibGUgaW50ZXJydXB0cyBfbG9jYWxseV8sIGJ1dCB0aGUKK3NwaW5sb2NrIGl0c2VsZiB3aWxsIGd1YXJhbnRlZSB0aGUgZ2xvYmFsIGxvY2ssIHNvIGl0IHdpbGwgZ3VhcmFudGVlIHRoYXQKK3RoZXJlIGlzIG9ubHkgb25lIHRocmVhZC1vZi1jb250cm9sIHdpdGhpbiB0aGUgcmVnaW9uKHMpIHByb3RlY3RlZCBieSB0aGF0Citsb2NrLiAKKworTm90ZSB0aGF0IGl0IHdvcmtzIHdlbGwgZXZlbiB1bmRlciBVUCAtIHRoZSBhYm92ZSBzZXF1ZW5jZSB1bmRlciBVUAorZXNzZW50aWFsbHkgaXMganVzdCB0aGUgc2FtZSBhcyBkb2luZyBhCisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworCSAuLi4gY3JpdGljYWwgc2VjdGlvbiAuLi4KKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworc28gdGhlIGNvZGUgZG9lcyBfbm90XyBuZWVkIHRvIHdvcnJ5IGFib3V0IFVQIHZzIFNNUCBpc3N1ZXM6IHRoZSBzcGlubG9ja3MKK3dvcmsgY29ycmVjdGx5IHVuZGVyIGJvdGggKGFuZCBzcGlubG9ja3MgYXJlIGFjdHVhbGx5IG1vcmUgZWZmaWNpZW50IG9uCithcmNoaXRlY3R1cmVzIHRoYXQgYWxsb3cgZG9pbmcgdGhlICJzYXZlX2ZsYWdzICsgY2xpIiBpbiBvbmUgZ28gYmVjYXVzZSBJCitkb24ndCBleHBvcnQgdGhhdCBpbnRlcmZhY2Ugbm9ybWFsbHkpLgorCitOT1RFIE5PVEUgTk9URSEgVGhlIHJlYXNvbiB0aGUgc3BpbmxvY2sgaXMgc28gbXVjaCBmYXN0ZXIgdGhhbiBhIGdsb2JhbAoraW50ZXJydXB0IGxvY2sgdW5kZXIgU01QIGlzIGV4YWN0bHkgYmVjYXVzZSBpdCBkaXNhYmxlcyBpbnRlcnJ1cHRzIG9ubHkgb24KK3RoZSBsb2NhbCBDUFUuIFRoZSBzcGluLWxvY2sgaXMgc2FmZSBvbmx5IHdoZW4geW91IF9hbHNvXyB1c2UgdGhlIGxvY2sKK2l0c2VsZiB0byBkbyBsb2NraW5nIGFjcm9zcyBDUFUncywgd2hpY2ggaW1wbGllcyB0aGF0IEVWRVJZVEhJTkcgdGhhdAordG91Y2hlcyBhIHNoYXJlZCB2YXJpYWJsZSBoYXMgdG8gYWdyZWUgYWJvdXQgdGhlIHNwaW5sb2NrIHRoZXkgd2FudCB0bwordXNlLgorCitUaGUgYWJvdmUgaXMgdXN1YWxseSBwcmV0dHkgc2ltcGxlICh5b3UgdXN1YWxseSBuZWVkIGFuZCB3YW50IG9ubHkgb25lCitzcGlubG9jayBmb3IgbW9zdCB0aGluZ3MgLSB1c2luZyBtb3JlIHRoYW4gb25lIHNwaW5sb2NrIGNhbiBtYWtlIHRoaW5ncyBhCitsb3QgbW9yZSBjb21wbGV4IGFuZCBldmVuIHNsb3dlciBhbmQgaXMgdXN1YWxseSB3b3J0aCBpdCBvbmx5IGZvcgorc2VxdWVuY2VzIHRoYXQgeW91IF9rbm93XyBuZWVkIHRvIGJlIHNwbGl0IHVwOiBhdm9pZCBpdCBhdCBhbGwgY29zdCBpZiB5b3UKK2FyZW4ndCBzdXJlKS4gSE9XRVZFUiwgaXQgX2RvZXNfIG1lYW4gdGhhdCBpZiB5b3UgaGF2ZSBzb21lIGNvZGUgdGhhdCBkb2VzCisKKwljbGkoKTsKKwkuLiBjcml0aWNhbCBzZWN0aW9uIC4uCisJc3RpKCk7CisKK2FuZCBhbm90aGVyIHNlcXVlbmNlIHRoYXQgZG9lcworCisJc3Bpbl9sb2NrX2lycXNhdmUoZmxhZ3MpOworCS4uIGNyaXRpY2FsIHNlY3Rpb24gLi4KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKKwordGhlbiB0aGV5IGFyZSBOT1QgbXV0dWFsbHkgZXhjbHVzaXZlLCBhbmQgdGhlIGNyaXRpY2FsIHJlZ2lvbnMgY2FuIGhhcHBlbgorYXQgdGhlIHNhbWUgdGltZSBvbiB0d28gZGlmZmVyZW50IENQVSdzLiBUaGF0J3MgZmluZSBwZXIgc2UsIGJ1dCB0aGUKK2NyaXRpY2FsIHJlZ2lvbnMgaGFkIGJldHRlciBiZSBjcml0aWNhbCBmb3IgZGlmZmVyZW50IHRoaW5ncyAoaWUgdGhleQorY2FuJ3Qgc3RvbXAgb24gZWFjaCBvdGhlcikuIAorCitUaGUgYWJvdmUgaXMgYSBwcm9ibGVtIG1haW5seSBpZiB5b3UgZW5kIHVwIG1peGluZyBjb2RlIC0gZm9yIGV4YW1wbGUgdGhlCityb3V0aW5lcyBpbiBsbF9yd19ibG9jaygpIHRlbmQgdG8gdXNlIGNsaS9zdGkgdG8gcHJvdGVjdCB0aGUgYXRvbWljaXR5IG9mCit0aGVpciBhY3Rpb25zLCBhbmQgaWYgYSBkcml2ZXIgdXNlcyBzcGlubG9ja3MgaW5zdGVhZCB0aGVuIHlvdSBzaG91bGQKK3RoaW5rIGFib3V0IGlzc3VlcyBsaWtlIHRoZSBhYm92ZS4uCisKK1RoaXMgaXMgcmVhbGx5IHRoZSBvbmx5IHJlYWxseSBoYXJkIHBhcnQgYWJvdXQgc3BpbmxvY2tzOiBvbmNlIHlvdSBzdGFydAordXNpbmcgc3BpbmxvY2tzIHRoZXkgdGVuZCB0byBleHBhbmQgdG8gYXJlYXMgeW91IG1pZ2h0IG5vdCBoYXZlIG5vdGljZWQKK2JlZm9yZSwgYmVjYXVzZSB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHNwaW5sb2NrcyBjb3JyZWN0bHkgcHJvdGVjdCB0aGUKK3NoYXJlZCBkYXRhIHN0cnVjdHVyZXMgX2V2ZXJ5d2hlcmVfIHRoZXkgYXJlIHVzZWQuIFRoZSBzcGlubG9ja3MgYXJlIG1vc3QKK2Vhc2lseSBhZGRlZCB0byBwbGFjZXMgdGhhdCBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBvdGhlciBjb2RlIChpZQoraW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5vYm9keSBlbHNlIGV2ZXIgdG91Y2hlcywgZm9yCitleGFtcGxlKS4gCisKKy0tLS0KKworTGVzc29uIDI6IHJlYWRlci13cml0ZXIgc3BpbmxvY2tzLgorCitJZiB5b3VyIGRhdGEgYWNjZXNzZXMgaGF2ZSBhIHZlcnkgbmF0dXJhbCBwYXR0ZXJuIHdoZXJlIHlvdSB1c3VhbGx5IHRlbmQKK3RvIG1vc3RseSByZWFkIGZyb20gdGhlIHNoYXJlZCB2YXJpYWJsZXMsIHRoZSByZWFkZXItd3JpdGVyIGxvY2tzCisocndfbG9jaykgdmVyc2lvbnMgb2YgdGhlIHNwaW5sb2NrcyBhcmUgb2Z0ZW4gbmljZXIuIFRoZXkgYWxsb3cgbXVsdGlwbGUKK3JlYWRlcnMgdG8gYmUgaW4gdGhlIHNhbWUgY3JpdGljYWwgcmVnaW9uIGF0IG9uY2UsIGJ1dCBpZiBzb21lYm9keSB3YW50cwordG8gY2hhbmdlIHRoZSB2YXJpYWJsZXMgaXQgaGFzIHRvIGdldCBhbiBleGNsdXNpdmUgd3JpdGUgbG9jay4gVGhlCityb3V0aW5lcyBsb29rIHRoZSBzYW1lIGFzIGFib3ZlOgorCisgICByd2xvY2tfdCB4eHhfbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CisKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmeHh4X2xvY2ssIGZsYWdzKTsKKwkuLiBjcml0aWNhbCBzZWN0aW9uIHRoYXQgb25seSByZWFkcyB0aGUgaW5mbyAuLi4KKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ4eHhfbG9jaywgZmxhZ3MpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZ4eHhfbG9jaywgZmxhZ3MpOworCS4uIHJlYWQgYW5kIHdyaXRlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGluZm8gLi4uCisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnh4eF9sb2NrLCBmbGFncyk7CisKK1RoZSBhYm92ZSBraW5kIG9mIGxvY2sgaXMgdXNlZnVsIGZvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBsaWtlIGxpbmtlZAorbGlzdHMgZXRjLCBlc3BlY2lhbGx5IHdoZW4geW91IGtub3cgdGhhdCBtb3N0IG9mIHRoZSB3b3JrIGlzIHRvIGp1c3QKK3RyYXZlcnNlIHRoZSBsaXN0IHNlYXJjaGluZyBmb3IgZW50cmllcyB3aXRob3V0IGNoYW5naW5nIHRoZSBsaXN0IGl0c2VsZiwKK2ZvciBleGFtcGxlLiBUaGVuIHlvdSBjYW4gdXNlIHRoZSByZWFkIGxvY2sgZm9yIHRoYXQga2luZCBvZiBsaXN0Cit0cmF2ZXJzYWwsIHdoaWNoIGFsbG93cyBtYW55IGNvbmN1cnJlbnQgcmVhZGVycy4gQW55dGhpbmcgdGhhdCBfY2hhbmdlc18KK3RoZSBsaXN0IHdpbGwgaGF2ZSB0byBnZXQgdGhlIHdyaXRlIGxvY2suIAorCitOb3RlOiB5b3UgY2Fubm90ICJ1cGdyYWRlIiBhIHJlYWQtbG9jayB0byBhIHdyaXRlLWxvY2ssIHNvIGlmIHlvdSBhdCBfYW55XwordGltZSBuZWVkIHRvIGRvIGFueSBjaGFuZ2VzIChldmVuIGlmIHlvdSBkb24ndCBkbyBpdCBldmVyeSB0aW1lKSwgeW91IGhhdmUKK3RvIGdldCB0aGUgd3JpdGUtbG9jayBhdCB0aGUgdmVyeSBiZWdpbm5pbmcuIEkgY291bGQgZmFpcmx5IGVhc2lseSBhZGQgYQorcHJpbWl0aXZlIHRvIGNyZWF0ZSBhICJ1cGdyYWRlYWJsZSIgcmVhZC1sb2NrLCBidXQgaXQgaGFzbid0IGJlZW4gYW4gaXNzdWUKK3lldC4gVGVsbCBtZSBpZiB5b3UnZCB3YW50IG9uZS4gCisKKy0tLS0KKworTGVzc29uIDM6IHNwaW5sb2NrcyByZXZpc2l0ZWQuCisKK1RoZSBzaW5nbGUgc3Bpbi1sb2NrIHByaW1pdGl2ZXMgYWJvdmUgYXJlIGJ5IG5vIG1lYW5zIHRoZSBvbmx5IG9uZXMuIFRoZXkKK2FyZSB0aGUgbW9zdCBzYWZlIG9uZXMsIGFuZCB0aGUgb25lcyB0aGF0IHdvcmsgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMsCitidXQgcGFydGx5IF9iZWNhdXNlXyB0aGV5IGFyZSBzYWZlIHRoZXkgYXJlIGFsc28gZmFpcmx5IHNsb3cuIFRoZXkgYXJlCittdWNoIGZhc3RlciB0aGFuIGEgZ2VuZXJpYyBnbG9iYWwgY2xpL3N0aSBwYWlyLCBidXQgc2xvd2VyIHRoYW4gdGhleSdkCituZWVkIHRvIGJlLCBiZWNhdXNlIHRoZXkgZG8gaGF2ZSB0byBkaXNhYmxlIGludGVycnVwdHMgKHdoaWNoIGlzIGp1c3QgYQorc2luZ2xlIGluc3RydWN0aW9uIG9uIGEgeDg2LCBidXQgaXQncyBhbiBleHBlbnNpdmUgb25lIC0gYW5kIG9uIG90aGVyCithcmNoaXRlY3R1cmVzIGl0IGNhbiBiZSB3b3JzZSkuCisKK0lmIHlvdSBoYXZlIGEgY2FzZSB3aGVyZSB5b3UgaGF2ZSB0byBwcm90ZWN0IGEgZGF0YSBzdHJ1Y3R1cmUgYWNyb3NzCitzZXZlcmFsIENQVSdzIGFuZCB5b3Ugd2FudCB0byB1c2Ugc3BpbmxvY2tzIHlvdSBjYW4gcG90ZW50aWFsbHkgdXNlCitjaGVhcGVyIHZlcnNpb25zIG9mIHRoZSBzcGlubG9ja3MuIElGRiB5b3Uga25vdyB0aGF0IHRoZSBzcGlubG9ja3MgYXJlCituZXZlciB1c2VkIGluIGludGVycnVwdCBoYW5kbGVycywgeW91IGNhbiB1c2UgdGhlIG5vbi1pcnEgdmVyc2lvbnM6CisKKwlzcGluX2xvY2soJmxvY2spOworCS4uLgorCXNwaW5fdW5sb2NrKCZsb2NrKTsKKworKGFuZCB0aGUgZXF1aXZhbGVudCByZWFkLXdyaXRlIHZlcnNpb25zIHRvbywgb2YgY291cnNlKS4gVGhlIHNwaW5sb2NrIHdpbGwKK2d1YXJhbnRlZSB0aGUgc2FtZSBraW5kIG9mIGV4Y2x1c2l2ZSBhY2Nlc3MsIGFuZCBpdCB3aWxsIGJlIG11Y2ggZmFzdGVyLiAKK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSBrbm93IHRoYXQgdGhlIGRhdGEgaW4gcXVlc3Rpb24gaXMgb25seSBldmVyCittYW5pcHVsYXRlZCBmcm9tIGEgInByb2Nlc3MgY29udGV4dCIsIGllIG5vIGludGVycnVwdHMgaW52b2x2ZWQuIAorCitUaGUgcmVhc29ucyB5b3UgbXVzdG4ndCB1c2UgdGhlc2UgdmVyc2lvbnMgaWYgeW91IGhhdmUgaW50ZXJydXB0cyB0aGF0CitwbGF5IHdpdGggdGhlIHNwaW5sb2NrIGlzIHRoYXQgeW91IGNhbiBnZXQgZGVhZGxvY2tzOgorCisJc3Bpbl9sb2NrKCZsb2NrKTsKKwkuLi4KKwkJPC0gaW50ZXJydXB0IGNvbWVzIGluOgorCQkJc3Bpbl9sb2NrKCZsb2NrKTsKKword2hlcmUgYW4gaW50ZXJydXB0IHRyaWVzIHRvIGxvY2sgYW4gYWxyZWFkeSBsb2NrZWQgdmFyaWFibGUuIFRoaXMgaXMgb2sgaWYKK3RoZSBvdGhlciBpbnRlcnJ1cHQgaGFwcGVucyBvbiBhbm90aGVyIENQVSwgYnV0IGl0IGlzIF9ub3RfIG9rIGlmIHRoZQoraW50ZXJydXB0IGhhcHBlbnMgb24gdGhlIHNhbWUgQ1BVIHRoYXQgYWxyZWFkeSBob2xkcyB0aGUgbG9jaywgYmVjYXVzZSB0aGUKK2xvY2sgd2lsbCBvYnZpb3VzbHkgbmV2ZXIgYmUgcmVsZWFzZWQgKGJlY2F1c2UgdGhlIGludGVycnVwdCBpcyB3YWl0aW5nCitmb3IgdGhlIGxvY2ssIGFuZCB0aGUgbG9jay1ob2xkZXIgaXMgaW50ZXJydXB0ZWQgYnkgdGhlIGludGVycnVwdCBhbmQgd2lsbAorbm90IGNvbnRpbnVlIHVudGlsIHRoZSBpbnRlcnJ1cHQgaGFzIGJlZW4gcHJvY2Vzc2VkKS4gCisKKyhUaGlzIGlzIGFsc28gdGhlIHJlYXNvbiB3aHkgdGhlIGlycS12ZXJzaW9ucyBvZiB0aGUgc3BpbmxvY2tzIG9ubHkgbmVlZAordG8gZGlzYWJsZSB0aGUgX2xvY2FsXyBpbnRlcnJ1cHRzIC0gaXQncyBvayB0byB1c2Ugc3BpbmxvY2tzIGluIGludGVycnVwdHMKK29uIG90aGVyIENQVSdzLCBiZWNhdXNlIGFuIGludGVycnVwdCBvbiBhbm90aGVyIENQVSBkb2Vzbid0IGludGVycnVwdCB0aGUKK0NQVSB0aGF0IGhvbGRzIHRoZSBsb2NrLCBzbyB0aGUgbG9jay1ob2xkZXIgY2FuIGNvbnRpbnVlIGFuZCBldmVudHVhbGx5CityZWxlYXNlcyB0aGUgbG9jaykuIAorCitOb3RlIHRoYXQgeW91IGNhbiBiZSBjbGV2ZXIgd2l0aCByZWFkLXdyaXRlIGxvY2tzIGFuZCBpbnRlcnJ1cHRzLiBGb3IKK2V4YW1wbGUsIGlmIHlvdSBrbm93IHRoYXQgdGhlIGludGVycnVwdCBvbmx5IGV2ZXIgZ2V0cyBhIHJlYWQtbG9jaywgdGhlbgoreW91IGNhbiB1c2UgYSBub24taXJxIHZlcnNpb24gb2YgcmVhZCBsb2NrcyBldmVyeXdoZXJlIC0gYmVjYXVzZSB0aGV5Citkb24ndCBibG9jayBvbiBlYWNoIG90aGVyIChhbmQgdGh1cyB0aGVyZSBpcyBubyBkZWFkLWxvY2sgd3J0IGludGVycnVwdHMuIAorQnV0IHdoZW4geW91IGRvIHRoZSB3cml0ZS1sb2NrLCB5b3UgaGF2ZSB0byB1c2UgdGhlIGlycS1zYWZlIHZlcnNpb24uIAorCitGb3IgYW4gZXhhbXBsZSBvZiBiZWluZyBjbGV2ZXIgd2l0aCBydy1sb2Nrcywgc2VlIHRoZSAid2FpdHF1ZXVlX2xvY2siIAoraGFuZGxpbmcgaW4ga2VybmVsL3NjaGVkLmMgLSBub3RoaW5nIGV2ZXIgX2NoYW5nZXNfIGEgd2FpdC1xdWV1ZSBmcm9tCit3aXRoaW4gYW4gaW50ZXJydXB0LCB0aGV5IG9ubHkgcmVhZCB0aGUgcXVldWUgaW4gb3JkZXIgdG8ga25vdyB3aG9tIHRvCit3YWtlIHVwLiBTbyByZWFkLWxvY2tzIGFyZSBzYWZlICh3aGljaCBpcyBnb29kOiB0aGV5IGFyZSB2ZXJ5IGNvbW1vbgoraW5kZWVkKSwgd2hpbGUgd3JpdGUtbG9ja3MgbmVlZCB0byBwcm90ZWN0IHRoZW1zZWx2ZXMgYWdhaW5zdCBpbnRlcnJ1cHRzLgorCisJCUxpbnVzCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfYXBpX25vbnNlbnNlLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2FwaV9ub25zZW5zZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlYTEzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2FwaV9ub25zZW5zZS50eHQKQEAgLTAsMCArMSwxOTMgQEAKK1RoZSBMaW51eCBLZXJuZWwgRHJpdmVyIEludGVyZmFjZQorKGFsbCBvZiB5b3VyIHF1ZXN0aW9ucyBhbnN3ZXJlZCBhbmQgdGhlbiBzb21lKQorCitHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorCitUaGlzIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdHJ5IHRvIGV4cGxhaW4gd2h5IExpbnV4IGRvZXMgbm90IGhhdmUgYSBiaW5hcnkKK2tlcm5lbCBpbnRlcmZhY2UsIG5vciBkb2VzIGl0IGhhdmUgYSBzdGFibGUga2VybmVsIGludGVyZmFjZS4gIFBsZWFzZQorcmVhbGl6ZSB0aGF0IHRoaXMgYXJ0aWNsZSBkZXNjcmliZXMgdGhlIF9pbiBrZXJuZWxfIGludGVyZmFjZXMsIG5vdCB0aGUKK2tlcm5lbCB0byB1c2Vyc3BhY2UgaW50ZXJmYWNlcy4gIFRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlIGludGVyZmFjZSBpcwordGhlIG9uZSB0aGF0IGFwcGxpY2F0aW9uIHByb2dyYW1zIHVzZSwgdGhlIHN5c2NhbGwgaW50ZXJmYWNlLiAgVGhhdAoraW50ZXJmYWNlIGlzIF92ZXJ5XyBzdGFibGUgb3ZlciB0aW1lLCBhbmQgd2lsbCBub3QgYnJlYWsuICBJIGhhdmUgb2xkCitwcm9ncmFtcyB0aGF0IHdlcmUgYnVpbHQgb24gYSBwcmUgMC45c29tZXRoaW5nIGtlcm5lbCB0aGF0IHN0aWxsIHdvcmsKK2p1c3QgZmluZSBvbiB0aGUgbGF0ZXN0IDIuNiBrZXJuZWwgcmVsZWFzZS4gIFRoaXMgaW50ZXJmYWNlIGlzIHRoZSBvbmUKK3RoYXQgdXNlcnMgYW5kIGFwcGxpY2F0aW9uIHByb2dyYW1tZXJzIGNhbiBjb3VudCBvbiBiZWluZyBzdGFibGUuCisKKworRXhlY3V0aXZlIFN1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tCitZb3UgdGhpbmsgeW91IHdhbnQgYSBzdGFibGUga2VybmVsIGludGVyZmFjZSwgYnV0IHlvdSByZWFsbHkgZG8gbm90LCBhbmQKK3lvdSBkb24ndCBldmVuIGtub3cgaXQuICBXaGF0IHlvdSB3YW50IGlzIGEgc3RhYmxlIHJ1bm5pbmcgZHJpdmVyLCBhbmQKK3lvdSBnZXQgdGhhdCBvbmx5IGlmIHlvdXIgZHJpdmVyIGlzIGluIHRoZSBtYWluIGtlcm5lbCB0cmVlLiAgWW91IGFsc28KK2dldCBsb3RzIG9mIG90aGVyIGdvb2QgYmVuZWZpdHMgaWYgeW91ciBkcml2ZXIgaXMgaW4gdGhlIG1haW4ga2VybmVsCit0cmVlLCBhbGwgb2Ygd2hpY2ggaGFzIG1hZGUgTGludXggaW50byBzdWNoIGEgc3Ryb25nLCBzdGFibGUsIGFuZCBtYXR1cmUKK29wZXJhdGluZyBzeXN0ZW0gd2hpY2ggaXMgdGhlIHJlYXNvbiB5b3UgYXJlIHVzaW5nIGl0IGluIHRoZSBmaXJzdAorcGxhY2UuCisKKworSW50cm8KKy0tLS0tCisKK0l0J3Mgb25seSB0aGUgb2RkIHBlcnNvbiB3aG8gd2FudHMgdG8gd3JpdGUgYSBrZXJuZWwgZHJpdmVyIHRoYXQgbmVlZHMKK3RvIHdvcnJ5IGFib3V0IHRoZSBpbi1rZXJuZWwgaW50ZXJmYWNlcyBjaGFuZ2luZy4gIEZvciB0aGUgbWFqb3JpdHkgb2YKK3RoZSB3b3JsZCwgdGhleSBuZWl0aGVyIHNlZSB0aGlzIGludGVyZmFjZSwgbm9yIGRvIHRoZXkgY2FyZSBhYm91dCBpdCBhdAorYWxsLgorCitGaXJzdCBvZmYsIEknbSBub3QgZ29pbmcgdG8gYWRkcmVzcyBfYW55XyBsZWdhbCBpc3N1ZXMgYWJvdXQgY2xvc2VkCitzb3VyY2UsIGhpZGRlbiBzb3VyY2UsIGJpbmFyeSBibG9icywgc291cmNlIHdyYXBwZXJzLCBvciBhbnkgb3RoZXIgdGVybQordGhhdCBkZXNjcmliZXMga2VybmVsIGRyaXZlcnMgdGhhdCBkbyBub3QgaGF2ZSB0aGVpciBzb3VyY2UgY29kZQorcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4gIFBsZWFzZSBjb25zdWx0IGEgbGF3eWVyIGlmIHlvdSBoYXZlIGFueSBsZWdhbAorcXVlc3Rpb25zLCBJJ20gYSBwcm9ncmFtbWVyIGFuZCBoZW5jZSwgSSdtIGp1c3QgZ29pbmcgdG8gYmUgZGVzY3JpYmluZwordGhlIHRlY2huaWNhbCBpc3N1ZXMgaGVyZSAobm90IHRvIG1ha2UgbGlnaHQgb2YgdGhlIGxlZ2FsIGlzc3VlcywgdGhleQorYXJlIHJlYWwsIGFuZCB5b3UgZG8gbmVlZCB0byBiZSBhd2FyZSBvZiB0aGVtIGF0IGFsbCB0aW1lcy4pCisKK1NvLCB0aGVyZSBhcmUgdHdvIG1haW4gdG9waWNzIGhlcmUsIGJpbmFyeSBrZXJuZWwgaW50ZXJmYWNlcyBhbmQgc3RhYmxlCitrZXJuZWwgc291cmNlIGludGVyZmFjZXMuICBUaGV5IGJvdGggZGVwZW5kIG9uIGVhY2ggb3RoZXIsIGJ1dCB3ZSB3aWxsCitkaXNjdXNzIHRoZSBiaW5hcnkgc3R1ZmYgZmlyc3QgdG8gZ2V0IGl0IG91dCBvZiB0aGUgd2F5LgorCisKK0JpbmFyeSBLZXJuZWwgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXNzdW1pbmcgdGhhdCB3ZSBoYWQgYSBzdGFibGUga2VybmVsIHNvdXJjZSBpbnRlcmZhY2UgZm9yIHRoZSBrZXJuZWwsIGEKK2JpbmFyeSBpbnRlcmZhY2Ugd291bGQgbmF0dXJhbGx5IGhhcHBlbiB0b28sIHJpZ2h0PyAgV3JvbmcuICBQbGVhc2UKK2NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZmFjdHMgYWJvdXQgdGhlIExpbnV4IGtlcm5lbDoKKyAgLSBEZXBlbmRpbmcgb24gdGhlIHZlcnNpb24gb2YgdGhlIEMgY29tcGlsZXIgeW91IHVzZSwgZGlmZmVyZW50IGtlcm5lbAorICAgIGRhdGEgc3RydWN0dXJlcyB3aWxsIGNvbnRhaW4gZGlmZmVyZW50IGFsaWdubWVudCBvZiBzdHJ1Y3R1cmVzLCBhbmQKKyAgICBwb3NzaWJseSBpbmNsdWRlIGRpZmZlcmVudCBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IHdheXMgKHB1dHRpbmcKKyAgICBmdW5jdGlvbnMgaW5saW5lIG9yIG5vdC4pICBUaGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBvcmdhbml6YXRpb24KKyAgICBpc24ndCB0aGF0IGltcG9ydGFudCwgYnV0IHRoZSBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmUgcGFkZGluZyBpcworICAgIHZlcnkgaW1wb3J0YW50LgorICAtIERlcGVuZGluZyBvbiB3aGF0IGtlcm5lbCBidWlsZCBvcHRpb25zIHlvdSBzZWxlY3QsIGEgd2lkZSByYW5nZSBvZgorICAgIGRpZmZlcmVudCB0aGluZ3MgY2FuIGJlIGFzc3VtZWQgYnkgdGhlIGtlcm5lbDoKKyAgICAgIC0gZGlmZmVyZW50IHN0cnVjdHVyZXMgY2FuIGNvbnRhaW4gZGlmZmVyZW50IGZpZWxkcworICAgICAgLSBTb21lIGZ1bmN0aW9ucyBtYXkgbm90IGJlIGltcGxlbWVudGVkIGF0IGFsbCwgKGkuZS4gc29tZSBsb2NrcworCWNvbXBpbGUgYXdheSB0byBub3RoaW5nIGZvciBub24tU01QIGJ1aWxkcy4pCisgICAgICAtIFBhcmFtZXRlciBwYXNzaW5nIG9mIHZhcmlhYmxlcyBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGNhbiBiZQorCWRvbmUgaW4gZGlmZmVyZW50IHdheXMgKHRoZSBDT05GSUdfUkVHUEFSTSBvcHRpb24gY29udHJvbHMKKwl0aGlzLikKKyAgICAgIC0gTWVtb3J5IHdpdGhpbiB0aGUga2VybmVsIGNhbiBiZSBhbGlnbmVkIGluIGRpZmZlcmVudCB3YXlzLAorCWRlcGVuZGluZyBvbiB0aGUgYnVpbGQgb3B0aW9ucy4KKyAgLSBMaW51eCBydW5zIG9uIGEgd2lkZSByYW5nZSBvZiBkaWZmZXJlbnQgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMuCisgICAgVGhlcmUgaXMgbm8gd2F5IHRoYXQgYmluYXJ5IGRyaXZlcnMgZnJvbSBvbmUgYXJjaGl0ZWN0dXJlIHdpbGwgcnVuCisgICAgb24gYW5vdGhlciBhcmNoaXRlY3R1cmUgcHJvcGVybHkuCisKK05vdyBhIG51bWJlciBvZiB0aGVzZSBpc3N1ZXMgY2FuIGJlIGFkZHJlc3NlZCBieSBzaW1wbHkgY29tcGlsaW5nIHlvdXIKK21vZHVsZSBmb3IgdGhlIGV4YWN0IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uLCB1c2luZyB0aGUgc2FtZSBleGFjdAorQyBjb21waWxlciB0aGF0IHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGguICBUaGlzIGlzIHN1ZmZpY2llbnQgaWYgeW91Cit3YW50IHRvIHByb3ZpZGUgYSBtb2R1bGUgZm9yIGEgc3BlY2lmaWMgcmVsZWFzZSB2ZXJzaW9uIG9mIGEgc3BlY2lmaWMKK0xpbnV4IGRpc3RyaWJ1dGlvbi4gIEJ1dCBtdWx0aXBseSB0aGF0IHNpbmdsZSBidWlsZCBieSB0aGUgbnVtYmVyIG9mCitkaWZmZXJlbnQgTGludXggZGlzdHJpYnV0aW9ucyBhbmQgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgc3VwcG9ydGVkCityZWxlYXNlcyBvZiB0aGUgTGludXggZGlzdHJpYnV0aW9uIGFuZCB5b3UgcXVpY2tseSBoYXZlIGEgbmlnaHRtYXJlIG9mCitkaWZmZXJlbnQgYnVpbGQgb3B0aW9ucyBvbiBkaWZmZXJlbnQgcmVsZWFzZXMuICBBbHNvIHJlYWxpemUgdGhhdCBlYWNoCitMaW51eCBkaXN0cmlidXRpb24gcmVsZWFzZSBjb250YWlucyBhIG51bWJlciBvZiBkaWZmZXJlbnQga2VybmVscywgYWxsCit0dW5lZCB0byBkaWZmZXJlbnQgaGFyZHdhcmUgdHlwZXMgKGRpZmZlcmVudCBwcm9jZXNzb3IgdHlwZXMgYW5kCitkaWZmZXJlbnQgb3B0aW9ucyksIHNvIGZvciBldmVuIGEgc2luZ2xlIHJlbGVhc2UgeW91IHdpbGwgbmVlZCB0byBjcmVhdGUKK211bHRpcGxlIHZlcnNpb25zIG9mIHlvdXIgbW9kdWxlLgorCitUcnVzdCBtZSwgeW91IHdpbGwgZ28gaW5zYW5lIG92ZXIgdGltZSBpZiB5b3UgdHJ5IHRvIHN1cHBvcnQgdGhpcyBraW5kCitvZiByZWxlYXNlLCBJIGxlYXJuZWQgdGhpcyB0aGUgaGFyZCB3YXkgYSBsb25nIHRpbWUgYWdvLi4uCisKKworU3RhYmxlIEtlcm5lbCBTb3VyY2UgSW50ZXJmYWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgbXVjaCBtb3JlICJ2b2xhdGlsZSIgdG9waWMgaWYgeW91IHRhbGsgdG8gcGVvcGxlIHdobyB0cnkgdG8KK2tlZXAgYSBMaW51eCBrZXJuZWwgZHJpdmVyIHRoYXQgaXMgbm90IGluIHRoZSBtYWluIGtlcm5lbCB0cmVlIHVwIHRvCitkYXRlIG92ZXIgdGltZS4KKworTGludXgga2VybmVsIGRldmVsb3BtZW50IGlzIGNvbnRpbnVvdXMgYW5kIGF0IGEgcmFwaWQgcGFjZSwgbmV2ZXIKK3N0b3BwaW5nIHRvIHNsb3cgZG93bi4gIEFzIHN1Y2gsIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBmaW5kIGJ1Z3MgaW4KK2N1cnJlbnQgaW50ZXJmYWNlcywgb3IgZmlndXJlIG91dCBhIGJldHRlciB3YXkgdG8gZG8gdGhpbmdzLiAgSWYgdGhleSBkbwordGhhdCwgdGhleSB0aGVuIGZpeCB0aGUgY3VycmVudCBpbnRlcmZhY2VzIHRvIHdvcmsgYmV0dGVyLiAgV2hlbiB0aGV5IGRvCitzbywgZnVuY3Rpb24gbmFtZXMgbWF5IGNoYW5nZSwgc3RydWN0dXJlcyBtYXkgZ3JvdyBvciBzaHJpbmssIGFuZAorZnVuY3Rpb24gcGFyYW1ldGVycyBtYXkgYmUgcmV3b3JrZWQuICBJZiB0aGlzIGhhcHBlbnMsIGFsbCBvZiB0aGUKK2luc3RhbmNlcyBvZiB3aGVyZSB0aGlzIGludGVyZmFjZSBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsIGFyZSBmaXhlZCB1cAorYXQgdGhlIHNhbWUgdGltZSwgZW5zdXJpbmcgdGhhdCBldmVyeXRoaW5nIGNvbnRpbnVlcyB0byB3b3JrIHByb3Blcmx5LgorCitBcyBhIHNwZWNpZmljIGV4YW1wbGVzIG9mIHRoaXMsIHRoZSBpbi1rZXJuZWwgVVNCIGludGVyZmFjZXMgaGF2ZQordW5kZXJnb25lIGF0IGxlYXN0IHRocmVlIGRpZmZlcmVudCByZXdvcmtzIG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoaXMKK3N1YnN5c3RlbS4gIFRoZXNlIHJld29ya3Mgd2VyZSBkb25lIHRvIGFkZHJlc3MgYSBudW1iZXIgb2YgZGlmZmVyZW50Citpc3N1ZXM6CisgIC0gQSBjaGFuZ2UgZnJvbSBhIHN5bmNocm9ub3VzIG1vZGVsIG9mIGRhdGEgc3RyZWFtcyB0byBhbiBhc3luY2hyb25vdXMKKyAgICBvbmUuICBUaGlzIHJlZHVjZWQgdGhlIGNvbXBsZXhpdHkgb2YgYSBudW1iZXIgb2YgZHJpdmVycyBhbmQKKyAgICBpbmNyZWFzZWQgdGhlIHRocm91Z2hwdXQgb2YgYWxsIFVTQiBkcml2ZXJzIHN1Y2ggdGhhdCB3ZSBhcmUgbm93CisgICAgcnVubmluZyBhbG1vc3QgYWxsIFVTQiBkZXZpY2VzIGF0IHRoZWlyIG1heGltdW0gc3BlZWQgcG9zc2libGUuCisgIC0gQSBjaGFuZ2Ugd2FzIG1hZGUgaW4gdGhlIHdheSBkYXRhIHBhY2tldHMgd2VyZSBhbGxvY2F0ZWQgZnJvbSB0aGUKKyAgICBVU0IgY29yZSBieSBVU0IgZHJpdmVycyBzbyB0aGF0IGFsbCBkcml2ZXJzIG5vdyBuZWVkZWQgdG8gcHJvdmlkZQorICAgIG1vcmUgaW5mb3JtYXRpb24gdG8gdGhlIFVTQiBjb3JlIHRvIGZpeCBhIG51bWJlciBvZiBkb2N1bWVudGVkCisgICAgZGVhZGxvY2tzLgorCitUaGlzIGlzIGluIHN0YXJrIGNvbnRyYXN0IHRvIGEgbnVtYmVyIG9mIGNsb3NlZCBzb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbXMKK3doaWNoIGhhdmUgaGFkIHRvIG1haW50YWluIHRoZWlyIG9sZGVyIFVTQiBpbnRlcmZhY2VzIG92ZXIgdGltZS4gIFRoaXMKK3Byb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBuZXcgZGV2ZWxvcGVycyB0byBhY2NpZGVudGFsbHkgdXNlIHRoZSBvbGQKK2ludGVyZmFjZXMgYW5kIGRvIHRoaW5ncyBpbiBpbXByb3BlciB3YXlzLCBjYXVzaW5nIHRoZSBzdGFiaWxpdHkgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIHRvIHN1ZmZlci4KKworSW4gYm90aCBvZiB0aGVzZSBpbnN0YW5jZXMsIGFsbCBkZXZlbG9wZXJzIGFncmVlZCB0aGF0IHRoZXNlIHdlcmUKK2ltcG9ydGFudCBjaGFuZ2VzIHRoYXQgbmVlZGVkIHRvIGJlIG1hZGUsIGFuZCB0aGV5IHdlcmUgbWFkZSwgd2l0aAorcmVsYXRpdmVseSBsaXR0bGUgcGFpbi4gIElmIExpbnV4IGhhZCB0byBlbnN1cmUgdGhhdCBpdCBwcmVzZXJ2ZSBhCitzdGFibGUgc291cmNlIGludGVyZmFjZSwgYSBuZXcgaW50ZXJmYWNlIHdvdWxkIGhhdmUgYmVlbiBjcmVhdGVkLCBhbmQKK3RoZSBvbGRlciwgYnJva2VuIG9uZSB3b3VsZCBoYXZlIGhhZCB0byBiZSBtYWludGFpbmVkIG92ZXIgdGltZSwgbGVhZGluZwordG8gZXh0cmEgd29yayBmb3IgdGhlIFVTQiBkZXZlbG9wZXJzLiAgU2luY2UgYWxsIExpbnV4IFVTQiBkZXZlbG9wZXJzIGRvCit0aGVpciB3b3JrIG9uIHRoZWlyIG93biB0aW1lLCBhc2tpbmcgcHJvZ3JhbW1lcnMgdG8gZG8gZXh0cmEgd29yayBmb3Igbm8KK2dhaW4sIGZvciBmcmVlLCBpcyBub3QgYSBwb3NzaWJpbGl0eS4KKworU2VjdXJpdHkgaXNzdWVzIGFyZSBhbHNvIGEgdmVyeSBpbXBvcnRhbnQgZm9yIExpbnV4LiAgV2hlbiBhCitzZWN1cml0eSBpc3N1ZSBpcyBmb3VuZCwgaXQgaXMgZml4ZWQgaW4gYSB2ZXJ5IHNob3J0IGFtb3VudCBvZiB0aW1lLiAgQQorbnVtYmVyIG9mIHRpbWVzIHRoaXMgaGFzIGNhdXNlZCBpbnRlcm5hbCBrZXJuZWwgaW50ZXJmYWNlcyB0byBiZQorcmV3b3JrZWQgdG8gcHJldmVudCB0aGUgc2VjdXJpdHkgcHJvYmxlbSBmcm9tIG9jY3VycmluZy4gIFdoZW4gdGhpcworaGFwcGVucywgYWxsIGRyaXZlcnMgdGhhdCB1c2UgdGhlIGludGVyZmFjZXMgd2VyZSBhbHNvIGZpeGVkIGF0IHRoZQorc2FtZSB0aW1lLCBlbnN1cmluZyB0aGF0IHRoZSBzZWN1cml0eSBwcm9ibGVtIHdhcyBmaXhlZCBhbmQgY291bGQgbm90Citjb21lIGJhY2sgYXQgc29tZSBmdXR1cmUgdGltZSBhY2NpZGVudGFsbHkuICBJZiB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlcword2VyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UsIGZpeGluZyB0aGlzIGtpbmQgb2Ygc2VjdXJpdHkgcHJvYmxlbSBhbmQKK2luc3VyaW5nIHRoYXQgaXQgY291bGQgbm90IGhhcHBlbiBhZ2FpbiB3b3VsZCBub3QgYmUgcG9zc2libGUuCisKK0tlcm5lbCBpbnRlcmZhY2VzIGFyZSBjbGVhbmVkIHVwIG92ZXIgdGltZS4gIElmIHRoZXJlIGlzIG5vIG9uZSB1c2luZyBhCitjdXJyZW50IGludGVyZmFjZSwgaXQgaXMgZGVsZXRlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBrZXJuZWwgcmVtYWlucworYXMgc21hbGwgYXMgcG9zc2libGUsIGFuZCB0aGF0IGFsbCBwb3RlbnRpYWwgaW50ZXJmYWNlcyBhcmUgdGVzdGVkIGFzCit3ZWxsIGFzIHRoZXkgY2FuIGJlICh1bnVzZWQgaW50ZXJmYWNlcyBhcmUgcHJldHR5IG11Y2ggaW1wb3NzaWJsZSB0bwordGVzdCBmb3IgdmFsaWRpdHkuKQorCisKK1doYXQgdG8gZG8KKy0tLS0tLS0tLS0KKworU28sIGlmIHlvdSBoYXZlIGEgTGludXgga2VybmVsIGRyaXZlciB0aGF0IGlzIG5vdCBpbiB0aGUgbWFpbiBrZXJuZWwKK3RyZWUsIHdoYXQgYXJlIHlvdSwgYSBkZXZlbG9wZXIsIHN1cHBvc2VkIHRvIGRvPyAgUmVsZWFzaW5nIGEgYmluYXJ5Citkcml2ZXIgZm9yIGV2ZXJ5IGRpZmZlcmVudCBrZXJuZWwgdmVyc2lvbiBmb3IgZXZlcnkgZGlzdHJpYnV0aW9uIGlzIGEKK25pZ2h0bWFyZSwgYW5kIHRyeWluZyB0byBrZWVwIHVwIHdpdGggYW4gZXZlciBjaGFuZ2luZyBrZXJuZWwgaW50ZXJmYWNlCitpcyBhbHNvIGEgcm91Z2ggam9iLgorCitTaW1wbGUsIGdldCB5b3VyIGtlcm5lbCBkcml2ZXIgaW50byB0aGUgbWFpbiBrZXJuZWwgdHJlZSAocmVtZW1iZXIgd2UKK2FyZSB0YWxraW5nIGFib3V0IEdQTCByZWxlYXNlZCBkcml2ZXJzIGhlcmUsIGlmIHlvdXIgY29kZSBkb2Vzbid0IGZhbGwKK3VuZGVyIHRoaXMgY2F0ZWdvcnksIGdvb2QgbHVjaywgeW91IGFyZSBvbiB5b3VyIG93biBoZXJlLCB5b3UgbGVlY2gKKzxpbnNlcnQgbGluayB0byBsZWVjaCBjb21tZW50IGZyb20gQW5kcmV3IGFuZCBMaW51cyBoZXJlPi4pICBJZiB5b3VyCitkcml2ZXIgaXMgaW4gdGhlIHRyZWUsIGFuZCBhIGtlcm5lbCBpbnRlcmZhY2UgY2hhbmdlcywgaXQgd2lsbCBiZSBmaXhlZAordXAgYnkgdGhlIHBlcnNvbiB3aG8gZGlkIHRoZSBrZXJuZWwgY2hhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4gIFRoaXMKK2Vuc3VyZXMgdGhhdCB5b3VyIGRyaXZlciBpcyBhbHdheXMgYnVpbGRhYmxlLCBhbmQgd29ya3Mgb3ZlciB0aW1lLCB3aXRoCit2ZXJ5IGxpdHRsZSBlZmZvcnQgb24geW91ciBwYXJ0LgorCitUaGUgdmVyeSBnb29kIHNpZGUgZWZmZWN0cyBvZiBoYXZpbmcgeW91ciBkcml2ZXIgaW4gdGhlIG1haW4ga2VybmVsIHRyZWUKK2FyZToKKyAgLSBUaGUgcXVhbGl0eSBvZiB0aGUgZHJpdmVyIHdpbGwgcmlzZSBhcyB0aGUgbWFpbnRlbmFuY2UgY29zdHMgKHRvIHRoZQorICAgIG9yaWdpbmFsIGRldmVsb3Blcikgd2lsbCBkZWNyZWFzZS4KKyAgLSBPdGhlciBkZXZlbG9wZXJzIHdpbGwgYWRkIGZlYXR1cmVzIHRvIHlvdXIgZHJpdmVyLgorICAtIE90aGVyIHBlb3BsZSB3aWxsIGZpbmQgYW5kIGZpeCBidWdzIGluIHlvdXIgZHJpdmVyLgorICAtIE90aGVyIHBlb3BsZSB3aWxsIGZpbmQgdHVuaW5nIG9wcG9ydHVuaXRpZXMgaW4geW91ciBkcml2ZXIuCisgIC0gT3RoZXIgcGVvcGxlIHdpbGwgdXBkYXRlIHRoZSBkcml2ZXIgZm9yIHlvdSB3aGVuIGV4dGVybmFsIGludGVyZmFjZQorICAgIGNoYW5nZXMgcmVxdWlyZSBpdC4KKyAgLSBUaGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgZ2V0cyBzaGlwcGVkIGluIGFsbCBMaW51eCBkaXN0cmlidXRpb25zCisgICAgd2l0aG91dCBoYXZpbmcgdG8gYXNrIHRoZSBkaXN0cm9zIHRvIGFkZCBpdC4KKyAgICAKK0FzIExpbnV4IHN1cHBvcnRzIGEgbGFyZ2VyIG51bWJlciBvZiBkaWZmZXJlbnQgZGV2aWNlcyAib3V0IG9mIHRoZSBib3giCit0aGFuIGFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtLCBhbmQgaXQgc3VwcG9ydHMgdGhlc2UgZGV2aWNlcyBvbiBtb3JlCitkaWZmZXJlbnQgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMgdGhhbiBhbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbSwgdGhpcworcHJvdmVuIHR5cGUgb2YgZGV2ZWxvcG1lbnQgbW9kZWwgbXVzdCBiZSBkb2luZyBzb21ldGhpbmcgcmlnaHQgOikKKworCisKKy0tLS0tLQorCitUaGFua3MgdG8gUmFuZHkgRHVubGFwLCBBbmRyZXcgTW9ydG9uLCBEYXZpZCBCcm93bmVsbCwgSGFubmEgTGluZGVyLAorUm9iZXJ0IExvdmUsIGFuZCBOaXNoYW50aCBBcmF2YW11ZGFuIGZvciB0aGVpciByZXZpZXcgYW5kIGNvbW1lbnRzIG9uCitlYXJseSBkcmFmdHMgb2YgdGhpcyBwYXBlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3RhbGxpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zdGFsbGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0OTAyZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3RhbGxpb24udHh0CkBAIC0wLDAgKzEsMzkyIEBACisqIE5PVEUgLSBUaGlzIGlzIGFuIHVubWFpbnRhaW5lZCBkcml2ZXIuICBMYW50cm9uaXgsIHdoaWNoIGJvdWdodCBTdGFsbGlvbgordGVjaG5vbG9naWVzLCBpcyBub3QgYWN0aXZlIGluIGRyaXZlciBtYWludGVuYW5jZSwgYW5kIHRoZXkgaGF2ZSBubyBpbmZvcm1hdGlvbgorb24gd2hlbiBvciBpZiB0aGV5IHdpbGwgaGF2ZSBhIDIuNiBkcml2ZXIuCisKK0phbWVzIE5lbHNvbiA8amFtZXM0NzY1QGdtYWlsLmNvbT4gLSAxMi0xMi0yMDA0CisKK1N0YWxsaW9uIE11bHRpcG9ydCBTZXJpYWwgRHJpdmVyIFJlYWRtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMTk5NC0xOTk5LCAgU3RhbGxpb24gVGVjaG5vbG9naWVzLgorCitWZXJzaW9uOiAgIDUuNS4xCitEYXRlOiAgICAgIDI4TUFSOTkKKworCisKKzEuIElOVFJPRFVDVElPTgorCitUaGVyZSBhcmUgdHdvIGRyaXZlcnMgdGhhdCB3b3JrIHdpdGggdGhlIGRpZmZlcmVudCBmYW1pbGllcyBvZiBTdGFsbGlvbgorbXVsdGlwb3J0IHNlcmlhbCBib2FyZHMuIE9uZSBpcyBmb3IgdGhlIFN0YWxsaW9uIHNtYXJ0IGJvYXJkcyAtIHRoYXQgaXMKK0Vhc3lJTywgRWFzeUNvbm5lY3Rpb24gOC8zMiBhbmQgRWFzeUNvbm5lY3Rpb24gOC82NC1QQ0ksIHRoZSBvdGhlciBmb3IKK3RoZSB0cnVlIFN0YWxsaW9uIGludGVsbGlnZW50IG11bHRpcG9ydCBib2FyZHMgLSBFYXN5Q29ubmVjdGlvbiA4LzY0CisoSVNBLCBFSVNBLCBNQ0EpLCBFYXN5Q29ubmVjdGlvbi9SQS1QQ0ksIE9OYm9hcmQgYW5kIEJydW1ieS4KKworSWYgeW91IGFyZSB1c2luZyBhbnkgb2YgdGhlIFN0YWxsaW9uIGludGVsbGlnZW50IG11bHRpcG9ydCBib2FyZHMgKEJydW1ieSwKK09OYm9hcmQsIEVhc3lDb25uZWN0aW9uIDgvNjQgKElTQSwgRUlTQSwgTUNBKSwgRWFzeUNvbm5lY3Rpb24vUkEtUENJKSB3aXRoCitMaW51eCB5b3Ugd2lsbCBuZWVkIHRvIGdldCB0aGUgZHJpdmVyIHV0aWxpdHkgcGFja2FnZS4gIFRoaXMgY29udGFpbnMgYQorZmlybXdhcmUgbG9hZGVyIGFuZCB0aGUgZmlybXdhcmUgaW1hZ2VzIG5lY2Vzc2FyeSB0byBtYWtlIHRoZSBkZXZpY2VzIG9wZXJhdGUuCisKK1RoZSBTdGFsbGlvbiBUZWNobm9sb2dpZXMgZnRwIHNpdGUsIGZ0cC5zdGFsbGlvbi5jb20sIHdpbGwgYWx3YXlzIGhhdmUKK3RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHV0aWxpdHkgcGFja2FnZS4KKworZnRwOi8vZnRwLnN0YWxsaW9uLmNvbS9kcml2ZXJzL2F0YTUvTGludXgvYXRhLWxpbnV4LTU1MC50YXIuZ3oKKworQXMgb2YgdGhlIHByaW50aW5nIG9mIHRoaXMgZG9jdW1lbnQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIKK3V0aWxpdHkgcGFja2FnZSBpcyA1LjUuMC4gSWYgYSBsYXRlciB2ZXJzaW9uIGlzIG5vdyBhdmFpbGFibGUgdGhlbiB5b3UKK3Nob3VsZCB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uLgorCitJZiB5b3UgYXJlIHVzaW5nIHRoZSBFYXN5SU8sIEVhc3lDb25uZWN0aW9uIDgvMzIgb3IgRWFzeUNvbm5lY3Rpb24gOC82NC1QQ0kKK2JvYXJkcyB0aGVuIHlvdSBkb24ndCBuZWVkIHRoaXMgcGFja2FnZSwgYWx0aG91Z2ggaXQgZG9lcyBoYXZlIGEgc2VyaWFsIHN0YXRzCitkaXNwbGF5IHByb2dyYW0uCisKK0lmIHlvdSByZXF1aXJlIERJUCBzd2l0Y2ggc2V0dGluZ3MsIEVJU0Egb3IgTUNBIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIGFueQorb3RoZXIgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBTdGFsbGlvbiBib2FyZHMgdGhlbiBoYXZlIGEgbG9vayBhdCBTdGFsbGlvbidzCit3ZWIgcGFnZXMgYXQgaHR0cDovL3d3dy5zdGFsbGlvbi5jb20uCisKKworCisyLiBJTlNUQUxMQVRJT04KKworVGhlIGRyaXZlcnMgY2FuIGJlIHVzZWQgYXMgbG9hZGFibGUgbW9kdWxlcyBvciBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCitZb3UgY2FuIGNob29zZSB3aGljaCB3aGVuIGRvaW5nIGEgImNvbmZpZyIgb24gdGhlIGtlcm5lbC4KKworQWxsIElTQSwgRUlTQSBhbmQgTUNBIGJvYXJkcyB0aGF0IHlvdSB3YW50IHRvIHVzZSBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgaW50bwordGhlIGRyaXZlcihzKS4gQWxsIFBDSSBib2FyZHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHdoZW4geW91IGxvYWQKK3RoZSBkcml2ZXIgLSBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGVudGVyZWQgaW50byB0aGUgZHJpdmVyKHMpCitjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gTm90ZSB0aGF0IGtlcm5lbCBQQ0kgc3VwcG9ydCBpcyByZXF1aXJlZCB0byB1c2UgUENJCitib2FyZHMuCisKK1RoZXJlIGFyZSB0d28gbWV0aG9kcyBvZiBjb25maWd1cmluZyBJU0EsIEVJU0EgYW5kIE1DQSBib2FyZHMgaW50byB0aGUgZHJpdmVycy4KK0lmIHVzaW5nIHRoZSBkcml2ZXIgYXMgYSBsb2FkYWJsZSBtb2R1bGUgdGhlbiB0aGUgc2ltcGxlc3QgbWV0aG9kIGlzIHRvIHBhc3MKK3RoZSBkcml2ZXIgY29uZmlndXJhdGlvbiBhcyBtb2R1bGUgYXJndW1lbnRzLiBUaGUgb3RoZXIgbWV0aG9kIGlzIHRvIG1vZGlmeQordGhlIGRyaXZlciBzb3VyY2UgdG8gYWRkIGNvbmZpZ3VyYXRpb24gbGluZXMgZm9yIGVhY2ggYm9hcmQgaW4gdXNlLgorCitJZiB5b3UgaGF2ZSBwcmUtYnVpbHQgU3RhbGxpb24gZHJpdmVyIG1vZHVsZXMgdGhlbiB0aGUgbW9kdWxlIGFyZ3VtZW50Citjb25maWd1cmF0aW9uIG1ldGhvZCBzaG91bGQgYmUgdXNlZC4gQSBsb3Qgb2YgTGludXggZGlzdHJpYnV0aW9ucyBjb21lIHdpdGgKK3ByZS1idWlsdCBkcml2ZXIgbW9kdWxlcyBpbiAvbGliL21vZHVsZXMvWC5ZLlovbWlzYyBmb3IgdGhlIGtlcm5lbCBpbiB1c2UuCitUaGF0IG1ha2VzIHRoaW5ncyBwcmV0dHkgc2ltcGxlIHRvIGdldCBnb2luZy4KKworCisyLjEgTU9EVUxFIERSSVZFUiBDT05GSUdVUkFUSU9OOgorCitUaGUgc2ltcGxlc3QgY29uZmlndXJhdGlvbiBmb3IgbW9kdWxlcyBpcyB0byB1c2UgdGhlIG1vZHVsZSBsb2FkIGFyZ3VtZW50cwordG8gY29uZmlndXJlIGFueSBJU0EsIEVJU0Egb3IgTUNBIGJvYXJkcy4gUENJIGJvYXJkcyBhcmUgYXV0b21hdGljYWxseQorZGV0ZWN0ZWQsIHNvIGRvIG5vdCBuZWVkIGFueSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gYXQgYWxsLgorCitJZiB1c2luZyBFYXN5SU8sIEVhc3lDb25uZWN0aW9uIDgvMzIgSVNBIG9yIE1DQSwgb3IgRWFzeUNvbm5lY3Rpb24gOC82My1QQ0kKK2JvYXJkcyB0aGVuIHVzZSB0aGUgInN0YWxsaW9uIiBkcml2ZXIgbW9kdWxlLCBPdGhlcndpc2UgaWYgeW91IGFyZSB1c2luZworYW4gRWFzeUNvbm5lY3Rpb24gOC82NCBJU0EsIEVJU0Egb3IgTUNBLCBFYXN5Q29ubmVjdGlvbi9SQS1QQ0ksIE9OYm9hcmQsCitCcnVtYnkgb3Igb3JpZ2luYWwgU3RhbGxpb24gYm9hcmQgdGhlbiB1c2UgdGhlICJpc3RhbGxpb24iIGRyaXZlciBtb2R1bGUuCisKK1R5cGljYWxseSB0byBsb2FkIHVwIHRoZSBzbWFydCBib2FyZCBkcml2ZXIgdXNlOgorCisgICAgbW9kcHJvYmUgc3RhbGxpb24KKworVGhpcyB3aWxsIGxvYWQgdGhlIEVhc3lJTyBhbmQgRWFzeUNvbm5lY3Rpb24gOC8zMiBkcml2ZXIuIEl0IHdpbGwgb3V0cHV0IGEKK21lc3NhZ2UgdG8gc2F5IHRoYXQgaXQgbG9hZGVkIGFuZCBwcmludCB0aGUgZHJpdmVyIHZlcnNpb24gbnVtYmVyLiBJdCB3aWxsCithbHNvIHByaW50IG91dCB3aGV0aGVyIGl0IGZvdW5kIHRoZSBjb25maWd1cmVkIGJvYXJkcyBvciBub3QuIFRoZXNlIG1lc3NhZ2VzCittYXkgbm90IGFwcGVhciBvbiB0aGUgY29uc29sZSwgYnV0IHR5cGljYWxseSBhcmUgYWx3YXlzIGxvZ2dlZCB0bworL3Zhci9hZG0vbWVzc2FnZXMgb3IgL3Zhci9sb2cvc3lzbG9nIGZpbGVzIC0gZGVwZW5kaW5nIG9uIGhvdyB0aGUga2xvZ2QgYW5kCitzeXNsb2dkIGRhZW1vbnMgYXJlIHNldHVwIG9uIHlvdXIgc3lzdGVtLgorCitUbyBsb2FkIHRoZSBpbnRlbGxpZ2VudCBib2FyZCBkcml2ZXIgdXNlOgorCisgICAgbW9kcHJvYmUgaXN0YWxsaW9uCisKK0l0IHdpbGwgb3V0cHV0IHNpbWlsYXIgbWVzc2FnZXMgdG8gdGhlIHNtYXJ0IGJvYXJkIGRyaXZlci4KKworSWYgbm90IHVzaW5nIGFuIGF1dG8tZGV0ZWN0YWJsZSBib2FyZCB0eXBlICh0aGF0IGlzIGEgUENJIGJvYXJkKSB0aGVuIHlvdQord2lsbCBhbHNvIG5lZWQgdG8gc3VwcGx5IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdGhlIG1vZHByb2JlIGNvbW1hbmQKK3doZW4gbG9hZGluZyB0aGUgZHJpdmVyLiBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZSBjb25maWd1cmF0aW9uIGFyZ3VtZW50IGlzCisKKyAgICBib2FyZD89PG5hbWU+Wyw8aW9hZGRyPlssPGFkZHI+XVssPGlycT5dXQorCit3aGVyZToKKworICAgIGJvYXJkPyAgLS0gc3BlY2lmaWVzIHRoZSBhcmJpdHJhcnkgYm9hcmQgbnVtYmVyIG9mIHRoaXMgYm9hcmQsCisgICAgICAgICAgICAgICBjYW4gYmUgaW4gdGhlIHJhbmdlIDAgdG8gMy4KKworICAgIG5hbWUgICAgLS0gdGV4dHVhbCBuYW1lIG9mIHRoaXMgYm9hcmQuIFRoZSBib2FyZCBuYW1lIGlzIHRoZSBjb21tb24KKyAgICAgICAgICAgICAgIGJvYXJkIG5hbWUsIG9yIGFueSAic2hvcnRlbmVkIiB2ZXJzaW9uIG9mIHRoYXQuIFRoZSBib2FyZAorICAgICAgICAgICAgICAgdHlwZSBudW1iZXIgbWF5IGFsc28gYmUgdXNlZCBoZXJlLgorCisgICAgaW9hZGRyICAtLSBzcGVjaWZpZXMgdGhlIEkvTyBhZGRyZXNzIG9mIHRoaXMgYm9hcmQuIFRoaXMgYXJndW1lbnQgaXMKKyAgICAgICAgICAgICAgIG9wdGlvbmFsLCBidXQgc2hvdWxkIGdlbmVyYWxseSBiZSBzcGVjaWZpZWQuCisKKyAgICBhZGRyICAgIC0tIG9wdGlvbmFsIHNlY29uZCBhZGRyZXNzIGFyZ3VtZW50LiBTb21lIGJvYXJkIHR5cGVzIHJlcXVpcmUKKyAgICAgICAgICAgICAgIGEgc2Vjb25kIEkvTyBhZGRyZXNzLCBzb21lIHJlcXVpcmUgYSBtZW1vcnkgYWRkcmVzcy4gVGhlCisgICAgICAgICAgICAgICBleGFjdCBtZWFuaW5nIG9mIHRoaXMgYXJndW1lbnQgZGVwZW5kcyBvbiB0aGUgYm9hcmQgdHlwZS4KKworICAgIGlycSAgICAgLS0gb3B0aW9uYWwgSVJRIGxpbmUgdXNlZCBieSB0aGlzIGJvYXJkLgorCitVcCB0byA0IGJvYXJkIGNvbmZpZ3VyYXRpb24gYXJndW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGxvYWQgbGluZS4KK0hlcmUgaXMgc29tZSBleGFtcGxlczoKKworICAgIG1vZHByb2JlIHN0YWxsaW9uIGJvYXJkMD1lYXN5aW8sMHgyYTAsNQorCitUaGlzIGNvbmZpZ3VyZXMgYW4gRWFzeUlPIGJvYXJkIGFzIGJvYXJkIDAgYXQgSS9PIGFkZHJlc3MgMHgyYTAgYW5kIElSUSA1LgorCisgICAgbW9kcHJvYmUgaXN0YWxsaW9uIGJvYXJkMz1lYzgvNjQsMHgyYzAsMHhjYzAwMAorCitUaGlzIGNvbmZpZ3VyZXMgYW4gRWFzeUNvbm5lY3Rpb24gOC82NCBJU0EgYXMgYm9hcmQgMyBhdCBJL08gYWRkcmVzcyAweDJjMCBhdAorbWVtb3J5IGFkZHJlc3MgMHhjYzAwMC4KKworICAgIG1vZHByb2JlIHN0YWxsaW9uIGJvYXJkMT1lYzgvMzItYXQsMHgyYTAsMHgyODAsMTAKKworVGhpcyBjb25maWd1cmVzIGFuIEVhc3lDb25uZWN0aW9uIDgvMzIgSVNBIGJvYXJkIGF0IHByaW1hcnkgSS9PIGFkZHJlc3MgMHgyYTAsCitzZWNvbmRhcnkgYWRkcmVzcyAweDI4MCBhbmQgSVJRIDEwLgorCitZb3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIGVudGVyIHRoaXMgbW9kdWxlIGxvYWQgYW5kIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KK2ludG8geW91ciBzeXN0ZW0gc3RhcnR1cCBzY3JpcHRzIHNvIHRoYXQgdGhlIGRyaXZlcnMgYXJlIGxvYWRlZCBhbmQgY29uZmlndXJlZAorb24gZWFjaCBzeXN0ZW0gYm9vdC4gVHlwaWNhbGx5IHRoZSBzdGFydCB1cCBzY3JpcHQgd291bGQgYmUgc29tZXRoaW5nIGxpa2UKKy9ldGMvbW9kcHJvYmUuY29uZi4KKworCisyLjIgU1RBVElDIERSSVZFUiBDT05GSUdVUkFUSU9OOgorCitGb3Igc3RhdGljIGRyaXZlciBjb25maWd1cmF0aW9uIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlLgorRW50ZXJpbmcgSVNBLCBFSVNBIGFuZCBNQ0EgYm9hcmRzIGludG8gdGhlIGRyaXZlcihzKSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQoraW52b2x2ZXMgZWRpdGluZyB0aGUgZHJpdmVyKHMpIHNvdXJjZSBmaWxlLiBJdCdzIHByZXR0eSBlYXN5IGlmIHlvdSBmb2xsb3cKK3RoZSBpbnN0cnVjdGlvbnMgYmVsb3cuIEJvdGggZHJpdmVycyBjYW4gc3VwcG9ydCB1cCB0byA0IGJvYXJkcy4gVGhlIHNtYXJ0CitjYXJkIGRyaXZlciAodGhlIHN0YWxsaW9uLmMgZHJpdmVyKSBzdXBwb3J0cyBhbnkgY29tYmluYXRpb24gb2YgRWFzeUlPIGFuZAorRWFzeUNvbm5lY3Rpb24gOC8zMiBib2FyZHMgKHVwIHRvIGEgdG90YWwgb2YgNCkuIFRoZSBpbnRlbGxpZ2VudCBkcml2ZXIKK3N1cHBvcnRzIGFueSBjb21iaW5hdGlvbiBvZiBPTmJvYXJkcywgQnJ1bWJ5cywgU3RhbGxpb25zIGFuZCBFYXN5Q29ubmVjdGlvbgorOC82NCAoSVNBIGFuZCBFSVNBKSBib2FyZHMgKHVwIHRvIGEgdG90YWwgb2YgNCkuCisKK1RvIHNldCB1cCB0aGUgZHJpdmVyKHMpIGZvciB0aGUgYm9hcmRzIHRoYXQgeW91IHdhbnQgdG8gdXNlIHlvdSBuZWVkIHRvCitlZGl0IHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIgZmlsZSBhbmQgYWRkIGNvbmZpZ3VyYXRpb24gZW50cmllcy4KKworSWYgdXNpbmcgRWFzeUlPIG9yIEVhc3lDb25uZWN0aW9uIDgvMzIgSVNBIG9yIE1DQSBib2FyZHMsCisgICBJbiBkcml2ZXJzL2NoYXIvc3RhbGxpb24uYzoKKyAgICAgIC0gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RsX2JyZGNvbmYgYXJyYXkgKG9mIHN0cnVjdHVyZXMpCisgICAgICAgIG5lYXIgdGhlIHRvcCBvZiB0aGUgZmlsZQorICAgICAgLSBtb2RpZnkgdGhpcyB0byBtYXRjaCB0aGUgYm9hcmRzIHlvdSBhcmUgZ29pbmcgdG8gaW5zdGFsbAorCSh0aGUgY29tbWVudHMgYmVmb3JlIHRoaXMgc3RydWN0dXJlIHNob3VsZCBoZWxwKQorICAgICAgLSBzYXZlIGFuZCBleGl0CisKK0lmIHVzaW5nIE9OYm9hcmQsIEJydW1ieSwgU3RhbGxpb24gb3IgRWFzeUNvbm5lY3Rpb24gOC82NCAoSVNBIG9yIEVJU0EpCitib2FyZHMsCisgICBJbiBkcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmM6CisgICAgICAtIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0bGlfYnJkY29uZiBhcnJheSAob2Ygc3RydWN0dXJlcykKKyAgICAgICAgbmVhciB0aGUgdG9wIG9mIHRoZSBmaWxlCisgICAgICAtIG1vZGlmeSB0aGlzIHRvIG1hdGNoIHRoZSBib2FyZHMgeW91IGFyZSBnb2luZyB0byBpbnN0YWxsCisJKHRoZSBjb21tZW50cyBiZWZvcmUgdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGhlbHApCisgICAgICAtIHNhdmUgYW5kIGV4aXQKKworT25jZSB5b3UgaGF2ZSBzZXQgdXAgdGhlIGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRoZW4geW91IGFyZSByZWFkeSB0byBidWlsZAordGhlIGtlcm5lbCBvciBtb2R1bGVzLgorCitXaGVuIHRoZSBuZXcga2VybmVsIGlzIGJvb3RlZCwgb3IgdGhlIGxvYWRhYmxlIG1vZHVsZSBsb2FkZWQgdGhlbiB0aGUKK2RyaXZlciB3aWxsIGVtaXQgc29tZSBrZXJuZWwgdHJhY2UgbWVzc2FnZXMgYWJvdXQgd2hldGhlciB0aGUgY29uZmlndXJlZAorYm9hcmRzIHdlcmUgZGV0ZWN0ZWQgb3Igbm90LiBEZXBlbmRpbmcgb24gaG93IHlvdXIgc3lzdGVtIGxvZ2dlciBpcyBzZXQKK3VwIHRoZXNlIG1heSBjb21lIG91dCBvbiB0aGUgY29uc29sZSwgb3IganVzdCBiZSBsb2dnZWQgdG8KKy92YXIvYWRtL21lc3NhZ2VzIG9yIC92YXIvbG9nL3N5c2xvZy4gWW91IHNob3VsZCBjaGVjayB0aGUgbWVzc2FnZXMgdG8KK2NvbmZpcm0gdGhhdCBhbGwgaXMgd2VsbC4KKworCisyLjMgU0hBUklORyBJTlRFUlJVUFRTCisKK0l0IGlzIHBvc3NpYmxlIHRvIHNoYXJlIGludGVycnVwdHMgYmV0d2VlbiBtdWx0aXBsZSBFYXN5SU8gYW5kCitFYXN5Q29ubmVjdGlvbiA4LzMyIGJvYXJkcyBpbiBhbiBFSVNBIHN5c3RlbS4gVG8gZG8gdGhpcyB5b3UgbXVzdCBiZSB1c2luZworc3RhdGljIGRyaXZlciBjb25maWd1cmF0aW9uLCBtb2RpZnlpbmcgdGhlIGRyaXZlciBzb3VyY2UgY29kZSB0byBhZGQgZHJpdmVyCitjb25maWd1cmF0aW9uLiBUaGVuIGEgY291cGxlIG9mIGV4dHJhIHRoaW5ncyBhcmUgcmVxdWlyZWQ6CisKKzEuIFdoZW4gZW50ZXJpbmcgdGhlIGJvYXJkIHJlc291cmNlcyBpbnRvIHRoZSBzdGFsbGlvbi5jIGZpbGUgeW91IG5lZWQgdG8KKyAgIG1hcmsgdGhlIGJvYXJkcyBhcyB1c2luZyBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cy4gRG8gdGhpcyBieSByZXBsYWNpbmcKKyAgIHRoZSAiMCIgZW50cnkgYXQgZmllbGQgcG9zaXRpb24gNiAodGhlIGxhc3QgZmllbGQpIGluIHRoZSBib2FyZAorICAgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2l0aCBhICIxIi4gKFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMKKyAgIHRoZSBib2FyZCB0eXBlLCBJL08gbG9jYXRpb25zLCBldGMuIGZvciBlYWNoIGJvYXJkKS4gQWxsIGJvYXJkcyB0aGF0IGFyZQorICAgc2hhcmluZyBhbiBpbnRlcnJ1cHQgbXVzdCBiZSBzZXQgdGhpcyB3YXksIGFuZCBlYWNoIGJvYXJkIHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBpbnRlcnJ1cHQgbnVtYmVyIHNwZWNpZmllZCBoZXJlIGFzIHdlbGwuIE5vdyBidWlsZCB0aGUgbW9kdWxlIG9yCisgICBrZXJuZWwgYXMgeW91IHdvdWxkIG5vcm1hbGx5LgorCisyLiBXaGVuIHBoeXNpY2FsbHkgaW5zdGFsbGluZyB0aGUgYm9hcmRzIGludG8gdGhlIHN5c3RlbSB5b3UgbXVzdCBlbnRlcgorICAgdGhlIHN5c3RlbSBFSVNBIGNvbmZpZ3VyYXRpb24gdXRpbGl0eS4gWW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIHRoZSBFSVNBCisgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciAqYWxsKiB0aGUgRWFzeUlPIGFuZCBFYXN5Q29ubmVjdGlvbiA4LzMyIGJvYXJkcworICAgdGhhdCBhcmUgc2hhcmluZyBpbnRlcnJ1cHRzLiBUaGUgU3RhbGxpb24gRWFzeUlPIGFuZCBFYXN5Q29ubmVjdGlvbiA4LzMyCisgICBFSVNBIGNvbmZpZ3VyYXRpb24gZmlsZXMgcmVxdWlyZWQgYXJlIHN1cHBsaWVkIGJ5IFN0YWxsaW9uIFRlY2hub2xvZ2llcworICAgb24gdGhlIEVBU1kgVXRpbGl0aWVzIGZsb3BweSBkaXNrZXR0ZSAodXN1YWxseSBzdXBwbGllZCBpbiB0aGUgYm94IHdpdGgKKyAgIHRoZSBib2FyZCB3aGVuIHB1cmNoYXNlZC4gSWYgbm90LCB5b3UgY2FuIHBpY2sgaXQgdXAgZnJvbSBTdGFsbGlvbidzIEZUUAorICAgc2l0ZSwgZnRwLnN0YWxsaW9uLmNvbSkuIFlvdSB3aWxsIG5lZWQgdG8gZWRpdCB0aGUgYm9hcmQgcmVzb3VyY2VzIHRvCisgICBjaG9vc2UgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMsIGFuZCBtYWtlIHN1cmUgdG8gc2V0IGVhY2ggYm9hcmQncworICAgaW50ZXJydXB0IHRvIHRoZSBzYW1lIElSUSBudW1iZXIuCisKK1lvdSBtdXN0IGNvbXBsZXRlIGJvdGggdGhlIGFib3ZlIHN0ZXBzIGZvciB0aGlzIHRvIHdvcmsuIFdoZW4geW91IHJlYm9vdAorb3IgbG9hZCB0aGUgZHJpdmVyIHlvdXIgRWFzeUlPIGFuZCBFYXN5Q29ubmVjdGlvbiA4LzMyIGJvYXJkcyB3aWxsIGJlCitzaGFyaW5nIGludGVycnVwdHMuCisKKworMi40IFVTSU5HIEhJR0ggU0hBUkVEIE1FTU9SWQorCitUaGUgRWFzeUNvbm5lY3Rpb24gOC82NC1FSSwgT05ib2FyZCBhbmQgU3RhbGxpb24gYm9hcmRzIGFyZSBjYXBhYmxlIG9mCit1c2luZyBzaGFyZWQgbWVtb3J5IGFkZHJlc3NlcyBhYm92ZSB0aGUgdXN1YWwgNjQwSyAtIDFNYiByYW5nZS4gVGhlIE9OYm9hcmQKK0lTQSBhbmQgdGhlIFN0YWxsaW9uIGJvYXJkcyBjYW4gYmUgcHJvZ3JhbW1lZCB0byB1c2UgbWVtb3J5IGFkZHJlc3NlcyB1cCB0bworMTZNYiAodGhlIElTQSBidXMgYWRkcmVzc2luZyBsaW1pdCksIGFuZCB0aGUgRWFzeUNvbm5lY3Rpb24gOC82NC1FSSBhbmQKK09OYm9hcmQvRSBjYW4gYmUgcHJvZ3JhbW1lZCBmb3IgbWVtb3J5IGFkZHJlc3NlcyB1cCB0byA0R2IgKHRoZSBFSVNBIGJ1cworYWRkcmVzc2luZyBsaW1pdCkuCisKK1RoZSBoaWdoZXIgdGhhbiAxTWIgbWVtb3J5IGFkZHJlc3NlcyBhcmUgZnVsbHkgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgorSnVzdCBlbnRlciB0aGUgYWRkcmVzcyBhcyB5b3Ugbm9ybWFsbHkgd291bGQgZm9yIGEgbG93ZXIgdGhhbiAxTWIgYWRkcmVzcworKGluIHRoZSBkcml2ZXIncyBib2FyZCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSkuCisKKworCisyLjUgVFJPVUJMRSBTSE9PVElORworCitJZiBhIGJvYXJkIGlzIG5vdCBmb3VuZCBieSB0aGUgZHJpdmVyIGJ1dCBpcyBhY3R1YWxseSBpbiB0aGUgc3lzdGVtIHRoZW4gdGhlCittb3N0IGxpa2VseSBwcm9ibGVtIGlzIHRoYXQgdGhlIEkvTyBhZGRyZXNzIGlzIHdyb25nLiBDaGFuZ2UgdGhlIG1vZHVsZSBsb2FkCithcmd1bWVudCBmb3IgdGhlIGxvYWRhYmxlIG1vZHVsZSBmb3JtLiBPciBjaGFuZ2UgaXQgaW4gdGhlIGRyaXZlciBzdGFsbGlvbi5jCitvciBpc3RhbGxpb24uYyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBhbmQgcmVidWlsZCB0aGUga2VybmVsIG9yIG1vZHVsZXMsIG9yCitjaGFuZ2UgaXQgb24gdGhlIGJvYXJkLgorCitPbiBFYXN5SU8gYW5kIEVhc3lDb25uZWN0aW9uIDgvMzIgYm9hcmRzIHRoZSBJUlEgaXMgc29mdHdhcmUgcHJvZ3JhbW1hYmxlLCBzbworaWYgdGhlcmUgaXMgYSBjb25mbGljdCB5b3UgbWF5IG5lZWQgdG8gY2hhbmdlIHRoZSBJUlEgdXNlZCBmb3IgYSBib2FyZC4gVGhlcmUKK2FyZSBubyBpbnRlcnJ1cHRzIHRvIHdvcnJ5IGFib3V0IGZvciBPTmJvYXJkLCBCcnVtYnkgb3IgRWFzeUNvbm5lY3Rpb24gOC82NAorKElTQSwgRUlTQSBhbmQgTUNBKSBib2FyZHMuIFRoZSBtZW1vcnkgcmVnaW9uIG9uIEVhc3lDb25uZWN0aW9uIDgvNjQgYW5kCitPTmJvYXJkIGJvYXJkcyBpcyBzb2Z0d2FyZSBwcm9ncmFtbWFibGUsIGJ1dCBub3Qgb24gdGhlIEJydW1ieSBib2FyZHMuCisKKworCiszLiBVU0lORyBUSEUgRFJJVkVSUworCiszLjEgSU5URUxMSUdFTlQgRFJJVkVSIE9QRVJBVElPTgorCitUaGUgaW50ZWxsaWdlbnQgYm9hcmRzIGFsc28gbmVlZCB0byBoYXZlIHRoZWlyICJmaXJtd2FyZSIgY29kZSBkb3dubG9hZGVkCit0byB0aGVtLiBUaGlzIGlzIGRvbmUgdmlhIGEgdXNlciBsZXZlbCBhcHBsaWNhdGlvbiBzdXBwbGllZCBpbiB0aGUgZHJpdmVyCit1dGlsaXR5IHBhY2thZ2UgY2FsbGVkICJzdGxsb2FkIi4gQ29tcGlsZSB0aGlzIHByb2dyYW0gd2hlcmV2ZXIgeW91IGRyb3BwZWQKK3RoZSBwYWNrYWdlIGZpbGVzLCBieSB0eXBpbmcgIm1ha2UiLiBJbiBpdHMgc2ltcGxlc3QgZm9ybSB5b3UgY2FuIHRoZW4gdHlwZQorCisgICAgLi9zdGxsb2FkIC1pIGNkay5zeXMKKworaW4gdGhpcyBkaXJlY3RvcnkgYW5kIHRoYXQgd2lsbCBkb3dubG9hZCBib2FyZCAwIChhc3N1bWluZyBib2FyZCAwIGlzIGFuCitFYXN5Q29ubmVjdGlvbiA4LzY0IG9yIEVhc3lDb25uZWN0aW9uL1JBIGJvYXJkKS4gVG8gZG93bmxvYWQgdG8gYW4KK09OYm9hcmQsIEJydW1ieSBvciBTdGFsbGlvbiBkbzoKKworICAgIC4vc3RsbG9hZCAtaSAyNjgxLnN5cworCitOb3JtYWxseSB5b3Ugd291bGQgd2FudCBhbGwgYm9hcmRzIHRvIGJlIGRvd25sb2FkZWQgYXMgcGFydCBvZiB0aGUgc3RhbmRhcmQKK3N5c3RlbSBzdGFydHVwLiBUbyBhY2hpZXZlIHRoaXMsIGFkZCBvbmUgb2YgdGhlIGxpbmVzIGFib3ZlIGludG8gdGhlCisvZXRjL3JjLmQvcmMuUyBvciAvZXRjL3JjLmQvcmMuc2VyaWFsIGZpbGUuIFRvIGRvd25sb2FkIGVhY2ggYm9hcmQganVzdCBhZGQKK3RoZSAiLWIgPGJyZC1udW1iZXI+IiBvcHRpb24gdG8gdGhlIGxpbmUuIFlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgY29kZSBmb3IKK2V2ZXJ5IGJvYXJkLiBZb3Ugc2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIHN0bGxvYWQgcHJvZ3JhbSBpbnRvIGEgc3lzdGVtCitkaXJlY3RvcnksIHN1Y2ggYXMgL3Vzci9zYmluLiBBbHNvLCB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgY2RrLnN5cyBpbWFnZQorZmlsZSBpbiB0aGUgc3RsbG9hZCBkb3duLWxvYWRlciBpcyAvdXNyL2xpYi9zdGFsbGlvbi4gQ3JlYXRlIHRoYXQgZGlyZWN0b3J5CithbmQgcHV0IHRoZSBjZGsuc3lzIGFuZCAyNjgxLnN5cyBmaWxlcyBpbiBpdC4gKEl0J3MgYSBjb252ZW5pZW50IHBsYWNlIHRvIHB1dAordGhlbSBhbnl3YXkpLiBBcyBhbiBleGFtcGxlIHlvdXIgL2V0Yy9yYy5kL3JjLlMgZmlsZSBtaWdodCBoYXZlIHRoZQorZm9sbG93aW5nIGxpbmVzIGFkZGVkIHRvIGl0IChpZiB5b3UgaGFkIDMgYm9hcmRzKToKKworICAgIC91c3Ivc2Jpbi9zdGxsb2FkIC1iIDAgLWkgL3Vzci9saWIvc3RhbGxpb24vY2RrLnN5cworICAgIC91c3Ivc2Jpbi9zdGxsb2FkIC1iIDEgLWkgL3Vzci9saWIvc3RhbGxpb24vMjY4MS5zeXMKKyAgICAvdXNyL3NiaW4vc3RsbG9hZCAtYiAyIC1pIC91c3IvbGliL3N0YWxsaW9uLzI2ODEuc3lzCisKK1RoZSBpbWFnZSBmaWxlcyBjZGsuc3lzIGFuZCAyNjgxLnN5cyBhcmUgc3BlY2lmaWMgdG8gdGhlIGJvYXJkIHR5cGVzLiBUaGUKK2Nkay5zeXMgd2lsbCBvbmx5IGZ1bmN0aW9uIGNvcnJlY3RseSBvbiBhbiBFYXN5Q29ubmVjdGlvbiA4LzY0IGJvYXJkLiBTaW1pbGFybHkKK3RoZSAyNjgxLnN5cyBpbWFnZSBmaWxsIG9ubHkgb3BlcmF0ZSBvbiBPTmJvYXJkLCBCcnVtYnkgYW5kIFN0YWxsaW9uIGJvYXJkcy4KK0lmIHlvdSBsb2FkIHRoZSB3cm9uZyBpbWFnZSBmaWxlIGludG8gYSBib2FyZCBpdCB3aWxsIGZhaWwgdG8gc3RhcnQgdXAsIGFuZAorb2YgY291cnNlIHRoZSBwb3J0cyB3aWxsIG5vdCBiZSBvcGVyYXRpb25hbCEKKworSWYgeW91IGFyZSB1c2luZyB0aGUgbW9kdWxhcml6ZWQgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIHlvdSBtaWdodCB3YW50IHRvIHB1dAordGhlIG1vZHByb2JlIGNhbGxzIGluIHRoZSBzdGFydHVwIHNjcmlwdCBhcyB3ZWxsIChiZWZvcmUgdGhlIGRvd25sb2FkIGxpbmVzCitvYnZpb3VzbHkpLgorCisKKzMuMiBVU0lORyBUSEUgU0VSSUFMIFBPUlRTCisKK09uY2UgdGhlIGRyaXZlciBpcyBpbnN0YWxsZWQgeW91IHdpbGwgbmVlZCB0byBzZXR1cCBzb21lIGRldmljZSBub2RlcyB0bworYWNjZXNzIHRoZSBzZXJpYWwgcG9ydHMuIFRoZSBzaW1wbGVzdCBtZXRob2QgaXMgdG8gdXNlIHRoZSAvZGV2L01BS0VERVYgcHJvZ3JhbS4KK0l0IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgZGV2aWNlIGVudHJpZXMgZm9yIFN0YWxsaW9uIGJvYXJkcy4gVGhpcyB3aWxsCitjcmVhdGUgdGhlIG5vcm1hbCBzZXJpYWwgcG9ydCBkZXZpY2VzIGFzIC9kZXYvdHR5RSMgd2hlcmUjIGlzIHRoZSBwb3J0IG51bWJlcgorc3RhcnRpbmcgZnJvbSAwLiBBIGJhbmsgb2YgNjQgbWlub3IgZGV2aWNlIG51bWJlcnMgaXMgYWxsb2NhdGVkIHRvIGVhY2ggYm9hcmQsCitzbyB0aGUgZmlyc3QgcG9ydCBvbiB0aGUgc2Vjb25kIGJvYXJkIGlzIHBvcnQgNjQsZXRjLiBBIHNldCBvZiBjYWxsb3V0IHR5cGUKK2RldmljZXMgbWF5IGFsc28gYmUgY3JlYXRlZC4gVGhleSBhcmUgY3JlYXRlZCBhcyB0aGUgZGV2aWNlcyAvZGV2L2N1ZSMgd2hlcmUgIworaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSB0dHlFIGRldmljZXMuCisKK0ZvciB0aGUgbW9zdCBwYXJ0IHRoZSBTdGFsbGlvbiBkcml2ZXIgdHJpZXMgdG8gZW11bGF0ZSB0aGUgc3RhbmRhcmQgUEMgc3lzdGVtCitDT00gcG9ydHMgYW5kIHRoZSBzdGFuZGFyZCBMaW51eCBzZXJpYWwgZHJpdmVyLiBUaGUgaWRlYSBpcyB0aGF0IHlvdSBzaG91bGQKK2JlIGFibGUgdG8gdXNlIFN0YWxsaW9uIGJvYXJkIHBvcnRzIGFuZCBDT00gcG9ydHMgaW50ZXJjaGFuZ2VhYmx5IHdpdGhvdXQKK21vZGlmeWluZyBhbnl0aGluZyBidXQgdGhlIGRldmljZSBuYW1lLiBBbnl0aGluZyB0aGF0IGRvZXNuJ3Qgd29yayBsaWtlIHRoYXQKK3Nob3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnIGluIHRoaXMgZHJpdmVyIQorCitJZiB5b3UgbG9vayBhdCB0aGUgZHJpdmVyIGNvZGUgeW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgZmFpcmx5IGNsb3NlbHkKK2Jhc2VkIG9uIHRoZSBMaW51eCBzZXJpYWwgZHJpdmVyIChsaW51eC9kcml2ZXJzL2NoYXIvc2VyaWFsLmMpLiBUaGlzIGlzCitpbnRlbnRpb25hbCwgb2J2aW91c2x5IHRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGVtdWxhdGUgaXRzIGJlaGF2aW9yIQorCitTaW5jZSB0aGlzIGRyaXZlciB0cmllcyB0byBlbXVsYXRlIHRoZSBzdGFuZGFyZCBzZXJpYWwgcG9ydHMgYXMgbXVjaCBhcworcG9zc2libGUsIG1vc3Qgc3lzdGVtIHV0aWxpdGllcyBzaG91bGQgd29yayBhcyB0aGV5IGRvIGZvciB0aGUgc3RhbmRhcmQKK0NPTSBwb3J0cy4gTW9zdCBpbXBvcnRhbnRseSAic3R0eSIgd29ya3MgYXMgZXhwZWN0ZWQgYW5kICJzZXRzZXJpYWwiIGNhbgorYWxzbyBiZSB1c2VkIChleGNlcHRpbmcgdGhlIGFiaWxpdHkgdG8gYXV0by1jb25maWd1cmUgdGhlIEkvTyBhbmQgSVJRCithZGRyZXNzZXMgb2YgYm9hcmRzKS4gSGlnaGVyIGJhdWQgcmF0ZXMgYXJlIHN1cHBvcnRlZCBpbiB0aGUgdXN1YWwgZmFzaGlvbgordGhyb3VnaCBzZXRzZXJpYWwgb3IgdXNpbmcgdGhlIENCQVVERVggZXh0ZW5zaW9ucy4gTm90ZSB0aGF0IHRoZSBFYXN5SU8gYW5kCitFYXN5Q29ubmVjdGlvbiAoYWxsIHR5cGVzKSBzdXBwb3J0IGF0IGxlYXN0IDU3NjAwIGFuZCAxMTUyMDAgYmF1ZC4gVGhlIG5ld2VyCitFYXN5Q29ubmVjdGlvbiBYUCBtb2R1bGVzIGFuZCBuZXcgRWFzeUlPIGJvYXJkcyBzdXBwb3J0IDIzMDQwMCBhbmQgNDYwODAwCitiYXVkIGFzIHdlbGwuIFRoZSBvbGRlciBib2FyZHMgaW5jbHVkaW5nIE9OYm9hcmQgYW5kIEJydW1ieSBzdXBwb3J0IGEKK21heGltdW0gYmF1ZCByYXRlIG9mIDM4NDAwLgorCitJZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCBob3cgdG8gdXNlIHNlcmlhbCBwb3J0cywgdGhlbiBnZXQgdGhlIFNlcmlhbC1IT1dUTworYnkgR3JlZyBIYW5raW5zLiBJdCB3aWxsIGV4cGxhaW4gZXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93IQorCisKKworNC4gTk9URVMKKworWW91IGNhbiB1c2UgYm90aCBkcml2ZXJzIGF0IG9uY2UgaWYgeW91IGhhdmUgYSBtaXggb2YgYm9hcmQgdHlwZXMgaW5zdGFsbGVkCitpbiBhIHN5c3RlbS4gSG93ZXZlciB0byBkbyB0aGlzIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSBtYWpvciBudW1iZXJzCit1c2VkIGJ5IG9uZSBvZiB0aGUgZHJpdmVycy4gQ3VycmVudGx5IGJvdGggZHJpdmVycyB1c2UgbWFqb3IgbnVtYmVycyAyNCwgMjUKK2FuZCAyOCBmb3IgdGhlaXIgZGV2aWNlcy4gQ2hhbmdlIG9uZSBkcml2ZXIgdG8gdXNlIHNvbWUgb3RoZXIgbWFqb3IgbnVtYmVycywKK2FuZCB0aGVuIG1vZGlmeSB0aGUgbWtkZXZub2RzIHNjcmlwdCB0byBtYWtlIGRldmljZSBub2RlcyBiYXNlZCBvbiB0aG9zZSBuZXcKK21ham9yIG51bWJlcnMuIEZvciBleGFtcGxlLCB5b3UgY291bGQgY2hhbmdlIHRoZSBpc3RhbGxpb24uYyBkcml2ZXIgdG8gdXNlCittYWpvciBudW1iZXJzIDYwLCA2MSBhbmQgNjIuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBjcmVhdGUgZGV2aWNlIG5vZGVzIHdpdGgKK2RpZmZlcmVudCBuYW1lcyBmb3IgdGhlIHBvcnRzLCBmb3IgZXhhbXBsZSB0dHlGIyBhbmQgY3VmIy4KKworVGhlIG9yaWdpbmFsIFN0YWxsaW9uIGJvYXJkIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgU3RhbGxpb24gVGVjaG5vbG9naWVzLgorQWx0aG91Z2ggaXQgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBpc3RhbGxpb24gZHJpdmVyLgorCitGaW5kaW5nIGEgZnJlZSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyByYW5nZSBjYW4gYmUgYSBwcm9ibGVtLiBUaGUgb2xkZXIKK2JvYXJkcyBsaWtlIHRoZSBTdGFsbGlvbiBhbmQgT05ib2FyZCBuZWVkIGxhcmdlIGFyZWFzICg2NEsgb3IgZXZlbiAxMjhLKSwgc28KK3RoZXkgY2FuIGJlIHZlcnkgZGlmZmljdWx0IHRvIGdldCBpbnRvIGEgc3lzdGVtLiBJZiB5b3UgaGF2ZSAxNiBNYiBvZiBSQU0KK3RoZW4geW91IGhhdmUgbm8gY2hvaWNlIGJ1dCB0byBwdXQgdGhlbSBzb21ld2hlcmUgaW4gdGhlIDY0MEsgLT4gMU1iIHJhbmdlLgorT05ib2FyZHMgcmVxdWlyZSA2NEssIHNvIHR5cGljYWxseSAweGQwMDAwIGlzIGdvb2QsIG9yIDB4ZTAwMDAgb24gc29tZQorc3lzdGVtcy4gSWYgeW91IGhhdmUgYW4gb3JpZ2luYWwgU3RhbGxpb24gYm9hcmQsICJWNC4wIiBvciBSZXYuTywgdGhlbiB5b3UKK25lZWQgYSA2NEsgbWVtb3J5IGFkZHJlc3Mgc3BhY2UsIHNvIGFnYWluIDB4ZDAwMDAgYW5kIDB4ZTAwMDAgYXJlIGdvb2QuCitPbGRlciBTdGFsbGlvbiBib2FyZHMgYXJlIGEgbXVjaCBiaWdnZXIgcHJvYmxlbS4gVGhleSBuZWVkIDEyOEsgb2YgYWRkcmVzcworc3BhY2UgYW5kIG11c3QgYmUgb24gYSAxMjhLIGJvdW5kYXJ5LiBJZiB5b3UgZG9uJ3QgaGF2ZSBhIFZHQSBjYXJkIHRoZW4KKzB4YzAwMDAgbWlnaHQgYmUgdXNhYmxlIC0gdGhlcmUgaXMgcmVhbGx5IG5vIG90aGVyIHBsYWNlIHlvdSBjYW4gcHV0IHRoZW0KK2JlbG93IDFNYi4KKworQm90aCB0aGUgT05ib2FyZCBhbmQgb2xkIFN0YWxsaW9uIGJvYXJkcyBjYW4gdXNlIGhpZ2hlciBtZW1vcnkgYWRkcmVzc2VzIGFzCit3ZWxsLCBidXQgeW91IG11c3QgaGF2ZSBsZXNzIHRoYW4gMTZNYiBvZiBSQU0gdG8gYmUgYWJsZSB0byB1c2UgdGhlbS4gVXN1YWwKK2hpZ2ggbWVtb3J5IGFkZHJlc3NlcyB1c2VkIGluY2x1ZGUgMHhlYzAwMDAgYW5kIDB4ZjAwMDAwLgorCitUaGUgQnJ1bWJ5IGJvYXJkcyBvbmx5IHJlcXVpcmUgMTZLYiBvZiBhZGRyZXNzIHNwYWNlLCBzbyB5b3UgY2FuIHVzdWFsbHkKK3NxdWVlemUgdGhlbSBpbiBzb21ld2hlcmUuIENvbW1vbiBhZGRyZXNzZXMgYXJlIDB4YzgwMDAsIDB4Y2MwMDAsIG9yIGluCit0aGUgMHhkMDAwMCByYW5nZS4gRWFzeUNvbm5lY3Rpb24gOC82NCBib2FyZHMgYXJlIGV2ZW4gYmV0dGVyLCB0aGV5IG9ubHkKK3JlcXVpcmUgNEtiIG9mIGFkZHJlc3Mgc3BhY2UsIGFnYWluIHVzdWFsbHkgMHhjODAwMCwgMHhjYzAwMCBvciAweGQwMDAwCithcmUgZ29vZC4KKworSWYgeW91IGFyZSB1c2luZyBhbiBFYXN5Q29ubmVjdGlvbiA4LzY0LUVJIG9yIE9OYm9hcmQvRSB0aGVuIHVzdWFsbHkgdGhlCisweGQwMDAwIG9yIDB4ZTAwMDAgcmFuZ2VzIGFyZSB0aGUgYmVzdCBvcHRpb25zIGJlbG93IDFNYi4gSWYgbmVpdGhlciBvZgordGhlbSBjYW4gYmUgdXNlZCB0aGVuIHRoZSBoaWdoIG1lbW9yeSBzdXBwb3J0IHRvIHVzZSB0aGUgcmVhbGx5IGhpZ2ggYWRkcmVzcworcmFuZ2VzIGlzIHRoZSBiZXN0IG9wdGlvbi4gVHlwaWNhbGx5IHRoZSAyR2IgcmFuZ2UgaXMgY29udmVuaWVudCBmb3IgdGhlbSwKK2FuZCBnZXRzIHRoZW0gd2VsbCBvdXQgb2YgdGhlIHdheS4KKworVGhlIHBvcnRzIG9mIHRoZSBFYXN5SU8tOE0gYm9hcmQgZG8gbm90IGhhdmUgRENEIG9yIERUUiBzaWduYWxzLiBTbyB0aGVzZQorcG9ydHMgY2Fubm90IGJlIHVzZWQgYXMgcmVhbCBtb2RlbSBkZXZpY2VzLiBHZW5lcmFsbHksIHdoZW4gdXNpbmcgdGhlc2UKK3BvcnRzIHlvdSBzaG91bGQgb25seSB1c2UgdGhlIGN1ZVggZGV2aWNlcy4KKworVGhlIGRyaXZlciB1dGlsaXR5IHBhY2thZ2UgY29udGFpbnMgYSBjb3VwbGUgb2YgdmVyeSB1c2VmdWwgcHJvZ3JhbXMuIE9uZSAKK2lzIGEgc2VyaWFsIHBvcnQgc3RhdGlzdGljcyBjb2xsZWN0aW9uIGFuZCBkaXNwbGF5IHByb2dyYW0gLSB2ZXJ5IGhhbmR5Citmb3Igc29sdmluZyBzZXJpYWwgcG9ydCBwcm9ibGVtcy4gVGhlIG90aGVyIGlzIGFuIGV4dGVuZGVkIG9wdGlvbiBzZXR0aW5nCitwcm9ncmFtIHRoYXQgd29ya3Mgd2l0aCB0aGUgaW50ZWxsaWdlbnQgYm9hcmRzLgorCisKKworNS4gRElTQ0xBSU1FUgorCitUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZG9jdW1lbnQgaXMgYmVsaWV2ZWQgdG8gYmUgYWNjdXJhdGUgYW5kCityZWxpYWJsZS4gSG93ZXZlciwgbm8gcmVzcG9uc2liaWxpdHkgaXMgYXNzdW1lZCBieSBTdGFsbGlvbiBUZWNobm9sb2dpZXMKK1B0eS4gTHRkLiBmb3IgaXRzIHVzZSwgbm9yIGFueSBpbmZyaW5nZW1lbnRzIG9mIHBhdGVudHMgb3Igb3RoZXIgcmlnaHRzCitvZiB0aGlyZCBwYXJ0aWVzIHJlc3VsdGluZyBmcm9tIGl0cyB1c2UuIFN0YWxsaW9uIFRlY2hub2xvZ2llcyByZXNlcnZlcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgZGVzaWduIG9mIGl0cyBwcm9kdWN0cyBhbmQgd2lsbCBlbmRlYXZvdXIgdG8gY2hhbmdlCit0aGUgaW5mb3JtYXRpb24gaW4gbWFudWFscyBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gYWNjb3JkaW5nbHkuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3ZnYS50eHQgYi9Eb2N1bWVudGF0aW9uL3N2Z2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjZlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N2Z2EudHh0CkBAIC0wLDAgKzEsMjc2IEBACisJCSAgICAgICBWaWRlbyBNb2RlIFNlbGVjdGlvbiBTdXBwb3J0IDIuMTMKKwkJICAgIChjKSAxOTk1LS0xOTk5IE1hcnRpbiBNYXJlcywgPG1qQHVjdy5jej4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIEludHJvCit+fn5+fn5+fgorICAgVGhpcyBzbWFsbCBkb2N1bWVudCBkZXNjcmliZXMgdGhlICJWaWRlbyBNb2RlIFNlbGVjdGlvbiIgZmVhdHVyZSB3aGljaAorYWxsb3dzIHRoZSB1c2Ugb2YgdmFyaW91cyBzcGVjaWFsIHZpZGVvIG1vZGVzIHN1cHBvcnRlZCBieSB0aGUgdmlkZW8gQklPUy4gRHVlCit0byB1c2FnZSBvZiB0aGUgQklPUywgdGhlIHNlbGVjdGlvbiBpcyBsaW1pdGVkIHRvIGJvb3QgdGltZSAoYmVmb3JlIHRoZQora2VybmVsIGRlY29tcHJlc3Npb24gc3RhcnRzKSBhbmQgd29ya3Mgb25seSBvbiA4MFg4NiBtYWNoaW5lcy4KKworICAgKiogIFNob3J0IGludHJvIGZvciB0aGUgaW1wYXRpZW50OiBKdXN0IHVzZSB2Z2E9YXNrIGZvciB0aGUgZmlyc3QgdGltZSwKKyAgICoqICBlbnRlciBgc2Nhbicgb24gdGhlIHZpZGVvIG1vZGUgcHJvbXB0LCBwaWNrIHRoZSBtb2RlIHlvdSB3YW50IHRvIHVzZSwKKyAgICoqICByZW1lbWJlciBpdHMgbW9kZSBJRCAodGhlIGZvdXItZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyKSBhbmQgdGhlbgorICAgKiogIHNldCB0aGUgdmdhIHBhcmFtZXRlciB0byB0aGlzIG51bWJlciAoY29udmVydGVkIHRvIGRlY2ltYWwgZmlyc3QpLgorCisgICBUaGUgdmlkZW8gbW9kZSB0byBiZSB1c2VkIGlzIHNlbGVjdGVkIGJ5IGEga2VybmVsIHBhcmFtZXRlciB3aGljaCBjYW4gYmUKK3NwZWNpZmllZCBpbiB0aGUga2VybmVsIE1ha2VmaWxlICh0aGUgU1ZHQV9NT0RFPS4uLiBsaW5lKSBvciBieSB0aGUgInZnYT0uLi4iCitvcHRpb24gb2YgTElMTyAob3Igc29tZSBvdGhlciBib290IGxvYWRlciB5b3UgdXNlKSBvciBieSB0aGUgInZpZG1vZGUiIHV0aWxpdHkKKyhwcmVzZW50IGluIHN0YW5kYXJkIExpbnV4IHV0aWxpdHkgcGFja2FnZXMpLiBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHZhbHVlcworb2YgdGhpcyBwYXJhbWV0ZXI6CisKKyAgIE5PUk1BTF9WR0EgLSBTdGFuZGFyZCA4MHgyNSBtb2RlIGF2YWlsYWJsZSBvbiBhbGwgZGlzcGxheSBhZGFwdGVycy4KKworICAgRVhURU5ERURfVkdBCS0gU3RhbmRhcmQgOC1waXhlbCBmb250IG1vZGU6IDgweDQzIG9uIEVHQSwgODB4NTAgb24gVkdBLgorCisgICBBU0tfVkdBIC0gRGlzcGxheSBhIHZpZGVvIG1vZGUgbWVudSB1cG9uIHN0YXJ0dXAgKHNlZSBiZWxvdykuCisKKyAgIDAuLjM1IC0gTWVudSBpdGVtIG51bWJlciAod2hlbiB5b3UgaGF2ZSB1c2VkIHRoZSBtZW51IHRvIHZpZXcgdGhlIGxpc3Qgb2YKKyAgICAgIG1vZGVzIGF2YWlsYWJsZSBvbiB5b3VyIGFkYXB0ZXIsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbWVudSBpdGVtIHlvdSB3YW50CisgICAgICB0byB1c2UpLiAwLi45IGNvcnJlc3BvbmQgdG8gIjAiLi4iOSIsIDEwLi4zNSB0byAiYSIuLiJ6Ii4gV2FybmluZzogdGhlCisgICAgICBtb2RlIGxpc3QgZGlzcGxheWVkIG1heSB2YXJ5IGFzIHRoZSBrZXJuZWwgdmVyc2lvbiBjaGFuZ2VzLCBiZWNhdXNlIHRoZQorICAgICAgbW9kZXMgYXJlIGxpc3RlZCBpbiBhICJmaXJzdCBkZXRlY3RlZCAtLSBmaXJzdCBkaXNwbGF5ZWQiIG1hbm5lci4gSXQncworICAgICAgYmV0dGVyIHRvIHVzZSBhYnNvbHV0ZSBtb2RlIG51bWJlcnMgaW5zdGVhZC4KKworICAgMHguLi4uIC0gSGV4YWRlY2ltYWwgdmlkZW8gbW9kZSBJRCAoYWxzbyBkaXNwbGF5ZWQgb24gdGhlIG1lbnUsIHNlZSBiZWxvdworICAgICAgZm9yIGV4YWN0IG1lYW5pbmcgb2YgdGhlIElEKS4gV2FybmluZzogcmRldiBhbmQgTElMTyBkb24ndCBzdXBwb3J0CisgICAgICBoZXhhZGVjaW1hbCBudW1iZXJzIC0tIHlvdSBoYXZlIHRvIGNvbnZlcnQgaXQgdG8gZGVjaW1hbCBtYW51YWxseS4KKworMi4gTWVudQorfn5+fn5+fgorICAgVGhlIEFTS19WR0EgbW9kZSBjYXVzZXMgdGhlIGtlcm5lbCB0byBvZmZlciBhIHZpZGVvIG1vZGUgbWVudSB1cG9uCitib290dXAuIEl0IGRpc3BsYXlzIGEgIlByZXNzIDxSRVRVUk4+IHRvIHNlZSB2aWRlbyBtb2RlcyBhdmFpbGFibGUsIDxTUEFDRT4KK3RvIGNvbnRpbnVlIG9yIHdhaXQgMzAgc2VjcyIgbWVzc2FnZS4gSWYgeW91IHByZXNzIDxSRVRVUk4+LCB5b3UgZW50ZXIgdGhlCittZW51LCBpZiB5b3UgcHJlc3MgPFNQQUNFPiBvciB3YWl0IDMwIHNlY29uZHMsIHRoZSBrZXJuZWwgd2lsbCBib290IHVwIGluCit0aGUgc3RhbmRhcmQgODB4MjUgbW9kZS4KKworICAgVGhlIG1lbnUgbG9va3MgbGlrZToKKworVmlkZW8gYWRhcHRlcjogPG5hbWUtb2YtZGV0ZWN0ZWQtdmlkZW8tYWRhcHRlcj4KK01vZGU6ICAgIENPTFN4Uk9XUzoKKzAgIDBGMDAgIDgweDI1CisxICAwRjAxICA4MHg1MAorMiAgMEYwMiAgODB4NDMKKzMgIDBGMDMgIDgweDI2CisuLi4uCitFbnRlciBtb2RlIG51bWJlciBvciBgc2Nhbic6IDxmbGFzaGluZy1jdXJzb3ItaGVyZT4KKworICAgPG5hbWUtb2YtZGV0ZWN0ZWQtdmlkZW8tYWRhcHRlcj4gdGVsbHMgd2hhdCB2aWRlbyBhZGFwdGVyIGRpZCBMaW51eCBkZXRlY3QKKy0tIGl0J3MgZWl0aGVyIGEgZ2VuZXJpYyBhZGFwdGVyIG5hbWUgKE1EQSwgQ0dBLCBIR0MsIEVHQSwgVkdBLCBWRVNBIFZHQSBbYSBWR0EKK3dpdGggVkVTQS1jb21wbGlhbnQgQklPU10pIG9yIGEgY2hpcHNldCBuYW1lIChlLmcuLCBUcmlkZW50KS4gRGlyZWN0IGRldGVjdGlvbgorb2YgY2hpcHNldHMgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0IChzZWUgQ09ORklHX1ZJREVPX1NWR0EgaW4gY2hhcHRlciA0IHRvIHNlZQoraG93IHRvIGVuYWJsZSBpdCBpZiB5b3UgcmVhbGx5IHdhbnQpIGFzIGl0J3MgaW5oZXJlbnRseSB1bnJlbGlhYmxlIGR1ZSB0bworYWJzb2x1dGVseSBpbnNhbmUgUEMgZGVzaWduLgorCisgICAiMCAgMEYwMCAgODB4MjUiIG1lYW5zIHRoYXQgdGhlIGZpcnN0IG1lbnUgaXRlbSAodGhlIG1lbnUgaXRlbXMgYXJlIG51bWJlcmVkCitmcm9tICIwIiB0byAiOSIgYW5kIGZyb20gImEiIHRvICJ6IikgaXMgYSA4MHgyNSBtb2RlIHdpdGggSUQ9MHgwZjAwIChzZWUgdGhlCituZXh0IHNlY3Rpb24gZm9yIGEgZGVzY3JpcHRpb24gb2YgbW9kZSBJRHMpLgorCisgICA8Zmxhc2hpbmctY3Vyc29yLWhlcmU+IGVuY291cmFnZXMgeW91IHRvIGVudGVyIHRoZSBpdGVtIG51bWJlciBvciBtb2RlIElECit5b3Ugd2lzaCB0byBzZXQgYW5kIHByZXNzIDxSRVRVUk4+LiBJZiB0aGUgY29tcHV0ZXIgY29tcGxhaW5zIHNvbWV0aGluZyBhYm91dAorIlVua25vd24gbW9kZSBJRCIsIGl0IGlzIHRyeWluZyB0byB0ZWxsIHlvdSB0aGF0IGl0IGlzbid0IHBvc3NpYmxlIHRvIHNldCBzdWNoCithIG1vZGUuIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBwcmVzcyBvbmx5IDxSRVRVUk4+IHdoaWNoIGxlYXZlcyB0aGUgY3VycmVudCBtb2RlLgorCisgICBUaGUgbW9kZSBsaXN0IHVzdWFsbHkgY29udGFpbnMgYSBmZXcgYmFzaWMgbW9kZXMgYW5kIHNvbWUgVkVTQSBtb2Rlcy4gIEluCitjYXNlIHlvdXIgY2hpcHNldCBoYXMgYmVlbiBkZXRlY3RlZCwgc29tZSBjaGlwc2V0LXNwZWNpZmljIG1vZGVzIGFyZSBzaG93biBhcword2VsbCAoc29tZSBvZiB0aGVzZSBtaWdodCBiZSBtaXNzaW5nIG9yIHVudXNhYmxlIG9uIHlvdXIgbWFjaGluZSBhcyBkaWZmZXJlbnQKK0JJT1NlcyBhcmUgb2Z0ZW4gc2hpcHBlZCB3aXRoIHRoZSBzYW1lIGNhcmQgYW5kIHRoZSBtb2RlIG51bWJlcnMgZGVwZW5kIHB1cmVseQorb24gdGhlIFZHQSBCSU9TKS4KKworICAgVGhlIG1vZGVzIGRpc3BsYXllZCBvbiB0aGUgbWVudSBhcmUgcGFydGlhbGx5IHNvcnRlZDogVGhlIGxpc3Qgc3RhcnRzIHdpdGgKK3RoZSBzdGFuZGFyZCBtb2RlcyAoODB4MjUgYW5kIDgweDUwKSBmb2xsb3dlZCBieSAic3BlY2lhbCIgbW9kZXMgKDgweDI4IGFuZAorODB4NDMpLCBsb2NhbCBtb2RlcyAoaWYgdGhlIGxvY2FsIG1vZGVzIGZlYXR1cmUgaXMgZW5hYmxlZCksIFZFU0EgbW9kZXMgYW5kCitmaW5hbGx5IFNWR0EgbW9kZXMgZm9yIHRoZSBhdXRvLWRldGVjdGVkIGFkYXB0ZXIuCisKKyAgIElmIHlvdSBhcmUgbm90IGhhcHB5IHdpdGggdGhlIG1vZGUgbGlzdCBvZmZlcmVkIChlLmcuLCBpZiB5b3UgdGhpbmsgeW91ciBjYXJkCitpcyBhYmxlIHRvIGRvIG1vcmUpLCB5b3UgY2FuIGVudGVyICJzY2FuIiBpbnN0ZWFkIG9mIGl0ZW0gbnVtYmVyIC8gbW9kZSBJRC4gIFRoZQorcHJvZ3JhbSB3aWxsIHRyeSB0byBhc2sgdGhlIEJJT1MgZm9yIGFsbCBwb3NzaWJsZSB2aWRlbyBtb2RlIG51bWJlcnMgYW5kIHRlc3QKK3doYXQgaGFwcGVucyB0aGVuLiBUaGUgc2NyZWVuIHdpbGwgYmUgcHJvYmFibHkgZmxhc2hpbmcgd2lsZGx5IGZvciBzb21lIHRpbWUgYW5kCitzdHJhbmdlIG5vaXNlcyB3aWxsIGJlIGhlYXJkIGZyb20gaW5zaWRlIHRoZSBtb25pdG9yIGFuZCBzbyBvbiBhbmQgdGhlbiwgcmVhbGx5CithbGwgY29uc2lzdGVudCB2aWRlbyBtb2RlcyBzdXBwb3J0ZWQgYnkgeW91ciBCSU9TIHdpbGwgYXBwZWFyIChwbHVzIG1heWJlIHNvbWUKK2BnaG9zdCBtb2RlcycpLiBJZiB5b3UgYXJlIGFmcmFpZCB0aGlzIGNvdWxkIGRhbWFnZSB5b3VyIG1vbml0b3IsIGRvbid0IHVzZSB0aGlzCitmdW5jdGlvbi4KKworICAgQWZ0ZXIgc2Nhbm5pbmcsIHRoZSBtb2RlIG9yZGVyaW5nIGlzIGEgYml0IGRpZmZlcmVudDogdGhlIGF1dG8tZGV0ZWN0ZWQgU1ZHQQorbW9kZXMgYXJlIG5vdCBsaXN0ZWQgYXQgYWxsIGFuZCB0aGUgbW9kZXMgcmV2ZWFsZWQgYnkgYHNjYW4nIGFyZSBzaG93biBiZWZvcmUKK2FsbCBWRVNBIG1vZGVzLgorCiszLiBNb2RlIElEcworfn5+fn5+fn5+fn4KKyAgIEJlY2F1c2Ugb2YgdGhlIGNvbXBsZXhpdHkgb2YgYWxsIHRoZSB2aWRlbyBzdHVmZiwgdGhlIHZpZGVvIG1vZGUgSURzCit1c2VkIGhlcmUgYXJlIGFsc28gYSBiaXQgY29tcGxleC4gQSB2aWRlbyBtb2RlIElEIGlzIGEgMTYtYml0IG51bWJlciB1c3VhbGx5CitleHByZXNzZWQgaW4gYSBoZXhhZGVjaW1hbCBub3RhdGlvbiAoc3RhcnRpbmcgd2l0aCAiMHgiKS4gWW91IGNhbiBzZXQgYSBtb2RlCitieSBlbnRlcmluZyBpdHMgbW9kZSBkaXJlY3RseSBpZiB5b3Uga25vdyBpdCBldmVuIGlmIGl0IGlzbid0IHNob3duIG9uIHRoZSBtZW51LgorCitUaGUgSUQgbnVtYmVycyBjYW4gYmUgZGl2aWRlZCB0byB0aHJlZSByZWdpb25zOgorCisgICAweDAwMDAgdG8gMHgwMGZmIC0gbWVudSBpdGVtIHJlZmVyZW5jZXMuIDB4MDAwMCBpcyB0aGUgZmlyc3QgaXRlbS4gRG9uJ3QgdXNlCisJb3V0c2lkZSB0aGUgbWVudSBhcyB0aGlzIGNhbiBjaGFuZ2UgZnJvbSBib290IHRvIGJvb3QgKGVzcGVjaWFsbHkgaWYgeW91CisJaGF2ZSB1c2VkIHRoZSBgc2NhbicgZmVhdHVyZSkuCisKKyAgIDB4MDEwMCB0byAweDAxN2YgLSBzdGFuZGFyZCBCSU9TIG1vZGVzLiBUaGUgSUQgaXMgYSBCSU9TIHZpZGVvIG1vZGUgbnVtYmVyCisJKGFzIHByZXNlbnRlZCB0byBJTlQgMTAsIGZ1bmN0aW9uIDAwKSBpbmNyZWFzZWQgYnkgMHgwMTAwLgorCisgICAweDAyMDAgdG8gMHgwOGZmIC0gVkVTQSBCSU9TIG1vZGVzLiBUaGUgSUQgaXMgYSBWRVNBIG1vZGUgSUQgaW5jcmVhc2VkIGJ5CisJMHgwMTAwLiBBbGwgVkVTQSBtb2RlcyBzaG91bGQgYmUgYXV0b2RldGVjdGVkIGFuZCBzaG93biBvbiB0aGUgbWVudS4KKworICAgMHgwOTAwIHRvIDB4MDlmZiAtIFZpZGVvNyBzcGVjaWFsIG1vZGVzLiBTZXQgYnkgY2FsbGluZyBJTlQgMHgxMCwgQVg9MHg2ZjA1LgorCShVc3VhbGx5IDk0MD04MHg0MywgOTQxPTEzMngyNSwgOTQyPTEzMng0NCwgOTQzPTgweDYwLCA5NDQ9MTAweDYwLAorCTk0NT0xMzJ4MjggZm9yIHRoZSBzdGFuZGFyZCBWaWRlbzcgQklPUykKKworICAgMHgwZjAwIHRvIDB4MGZmZiAtIHNwZWNpYWwgbW9kZXMgKHRoZXkgYXJlIHNldCBieSB2YXJpb3VzIHRyaWNrcyAtLSB1c3VhbGx5CisJYnkgbW9kaWZ5aW5nIG9uZSBvZiB0aGUgc3RhbmRhcmQgbW9kZXMpLiBDdXJyZW50bHkgYXZhaWxhYmxlOgorCTB4MGYwMAlzdGFuZGFyZCA4MHgyNSwgZG9uJ3QgcmVzZXQgbW9kZSBpZiBhbHJlYWR5IHNldCAoPUZGRkYpCisJMHgwZjAxCXN0YW5kYXJkIHdpdGggOC1wb2ludCBmb250OiA4MHg0MyBvbiBFR0EsIDgweDUwIG9uIFZHQQorCTB4MGYwMglWR0EgODB4NDMgKFZHQSBzd2l0Y2hlZCB0byAzNTAgc2NhbmxpbmVzIHdpdGggYSA4LXBvaW50IGZvbnQpCisJMHgwZjAzCVZHQSA4MHgyOCAoc3RhbmRhcmQgVkdBIHNjYW5zLCBidXQgMTQtcG9pbnQgZm9udCkKKwkweDBmMDQJbGVhdmUgY3VycmVudCB2aWRlbyBtb2RlCisJMHgwZjA1CVZHQSA4MHgzMCAoNDgwIHNjYW5zLCAxNi1wb2ludCBmb250KQorCTB4MGYwNglWR0EgODB4MzQgKDQ4MCBzY2FucywgMTQtcG9pbnQgZm9udCkKKwkweDBmMDcJVkdBIDgweDYwICg0ODAgc2NhbnMsIDgtcG9pbnQgZm9udCkKKwkweDBmMDgJR3JhcGhpY3MgaGFjayAoc2VlIHRoZSBDT05GSUdfVklERU9fSEFDSyBwYXJhZ3JhcGggYmVsb3cpCisKKyAgIDB4MTAwMCB0byAweDdmZmYgLSBtb2RlcyBzcGVjaWZpZWQgYnkgcmVzb2x1dGlvbi4gVGhlIGNvZGUgaGFzIGEgIjB4UlJDQyIKKwlmb3JtIHdoZXJlIFJSIGlzIGEgbnVtYmVyIG9mIHJvd3MgYW5kIENDIGlzIGEgbnVtYmVyIG9mIGNvbHVtbnMuCisJRS5nLiwgMHgxOTUwIGNvcnJlc3BvbmRzIHRvIGEgODB4MjUgbW9kZSwgMHgyYjg0IHRvIDEzMng0MyBldGMuCisJVGhpcyBpcyB0aGUgb25seSBmdWxseSBwb3J0YWJsZSB3YXkgdG8gcmVmZXIgdG8gYSBub24tc3RhbmRhcmQgbW9kZSwKKwlidXQgaXQgcmVsaWVzIG9uIHRoZSBtb2RlIGJlaW5nIGZvdW5kIGFuZCBkaXNwbGF5ZWQgb24gdGhlIG1lbnUKKwkocmVtZW1iZXIgdGhhdCBtb2RlIHNjYW5uaW5nIGlzIG5vdCBkb25lIGF1dG9tYXRpY2FsbHkpLgorCisgICAweGZmMDAgdG8gMHhmZmZmIC0gYWxpYXNlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKKwkweGZmZmYJZXF1aXZhbGVudCB0byAweDBmMDAgKHN0YW5kYXJkIDgweDI1KQorCTB4ZmZmZQllcXVpdmFsZW50IHRvIDB4MGYwMSAoRUdBIDgweDQzIG9yIFZHQSA4MHg1MCkKKworICAgSWYgeW91IGFkZCAweDgwMDAgdG8gdGhlIG1vZGUgSUQsIHRoZSBwcm9ncmFtIHdpbGwgdHJ5IHRvIHJlY2FsY3VsYXRlCit2ZXJ0aWNhbCBkaXNwbGF5IHRpbWluZyBhY2NvcmRpbmcgdG8gbW9kZSBwYXJhbWV0ZXJzLCB3aGljaCBjYW4gYmUgdXNlZCB0bworZWxpbWluYXRlIHNvbWUgYW5ub3lpbmcgYnVncyBvZiBjZXJ0YWluIFZHQSBCSU9TZXMgKHVzdWFsbHkgdGhvc2UgdXNlZCBmb3IKK2NhcmRzIHdpdGggUzMgY2hpcHNldHMgYW5kIG9sZCBDaXJydXMgTG9naWMgQklPU2VzKSAtLSBtYWlubHkgZXh0cmEgbGluZXMgYXQgdGhlCitlbmQgb2YgdGhlIGRpc3BsYXkuCisKKzQuIE9wdGlvbnMKK35+fn5+fn5+fn4KKyAgIFNvbWUgb3B0aW9ucyBjYW4gYmUgc2V0IGluIHRoZSBzb3VyY2UgdGV4dCAoaW4gYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUykuCitBbGwgb2YgdGhlbSBhcmUgc2ltcGxlICNkZWZpbmUncyAtLSBjaGFuZ2UgdGhlbSB0byAjdW5kZWYncyB3aGVuIHlvdSB3YW50IHRvCitzd2l0Y2ggdGhlbSBvZmYuIEN1cnJlbnRseSBzdXBwb3J0ZWQ6CisKKyAgIENPTkZJR19WSURFT19TVkdBIC0gZW5hYmxlcyBhdXRvZGV0ZWN0aW9uIG9mIFNWR0EgY2FyZHMuIFRoaXMgaXMgc3dpdGNoZWQKK29mZiBieSBkZWZhdWx0IGFzIGl0J3MgYSBiaXQgdW5yZWxpYWJsZSBkdWUgdG8gdGVycmlibHkgYmFkIFBDIGRlc2lnbi4gSWYgeW91CityZWFsbHkgd2FudCB0byBoYXZlIHRoZSBhZGFwdGVyIGF1dG9kZXRlY3RlZCAobWF5YmUgaW4gY2FzZSB0aGUgYHNjYW4nIGZlYXR1cmUKK2RvZXNuJ3Qgd29yayBvbiB5b3VyIG1hY2hpbmUpLCBzd2l0Y2ggdGhpcyBvbiBhbmQgZG9uJ3QgY3J5IGlmIHRoZSByZXN1bHRzCithcmUgbm90IGNvbXBsZXRlbHkgc2FuZS4gSW4gY2FzZSB5b3UgcmVhbGx5IG5lZWQgdGhpcyBmZWF0dXJlLCBwbGVhc2UgZHJvcCBtZQorYSBtYWlsIGFzIEkgdGhpbmsgb2YgcmVtb3ZpbmcgaXQgc29tZSBkYXkuCisKKyAgIENPTkZJR19WSURFT19WRVNBIC0gZW5hYmxlcyBhdXRvZGV0ZWN0aW9uIG9mIFZFU0EgbW9kZXMuIElmIGl0IGRvZXNuJ3Qgd29yaworb24geW91ciBtYWNoaW5lIChvciBkaXNwbGF5cyBhICJFcnJvcjogU2Nhbm5pbmcgb2YgVkVTQSBtb2RlcyBmYWlsZWQiIG1lc3NhZ2UpLAoreW91IGNhbiBzd2l0Y2ggaXQgb2ZmIGFuZCByZXBvcnQgYXMgYSBidWcuCisKKyAgIENPTkZJR19WSURFT19DT01QQUNUIC0gZW5hYmxlcyBjb21wYWN0aW5nIG9mIHRoZSB2aWRlbyBtb2RlIGxpc3QuIElmIHRoZXJlCithcmUgbW9yZSBtb2RlcyB3aXRoIHRoZSBzYW1lIHNjcmVlbiBzaXplLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMga2VwdCAoc2VlIGFib3ZlCitmb3IgbW9yZSBpbmZvIG9uIG1vZGUgb3JkZXJpbmcpLiBIb3dldmVyLCBpbiB2ZXJ5IHN0cmFuZ2UgY2FzZXMgaXQncyBwb3NzaWJsZQordGhhdCB0aGUgZmlyc3QgInZlcnNpb24iIG9mIHRoZSBtb2RlIGRvZXNuJ3Qgd29yayBhbHRob3VnaCBzb21lIG9mIHRoZSBvdGhlcnMKK2RvIC0tIGluIHRoaXMgY2FzZSB0dXJuIHRoaXMgc3dpdGNoIG9mZiB0byBzZWUgdGhlIHJlc3QuCisKKyAgIENPTkZJR19WSURFT19SRVRBSU4gLSBlbmFibGVzIHJldGFpbmluZyBvZiBzY3JlZW4gY29udGVudHMgd2hlbiBzd2l0Y2hpbmcKK3ZpZGVvIG1vZGVzLiBXb3JrcyBvbmx5IHdpdGggc29tZSBib290IGxvYWRlcnMgd2hpY2ggbGVhdmUgZW5vdWdoIHJvb20gZm9yIHRoZQorYnVmZmVyLiAoSWYgeW91IGhhdmUgb2xkIExJTE8sIHlvdSBjYW4gYWRqdXN0IGhlYXBfZW5kX3B0ciBhbmQgbG9hZGZsYWdzCitpbiBzZXR1cC5TLCBidXQgaXQncyBiZXR0ZXIgdG8gdXBncmFkZSB0aGUgYm9vdCBsb2FkZXIuLi4pCisKKyAgIENPTkZJR19WSURFT19MT0NBTCAtIGVuYWJsZXMgaW5jbHVzaW9uIG9mICJsb2NhbCBtb2RlcyIgaW4gdGhlIGxpc3QuIFRoZQorbG9jYWwgbW9kZXMgYXJlIGFkZGVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBub3QgZGVwZW5kaW5nCitvbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGUgbG9jYWwgbW9kZXMgYXJlIGxpc3RlZCBpbiB0aGUgc291cmNlIHRleHQgYWZ0ZXIKK3RoZSAibG9jYWxfbW9kZV90YWJsZToiIGxpbmUuIFRoZSBjb21tZW50IGJlZm9yZSB0aGlzIGxpbmUgZGVzY3JpYmVzIHRoZSBmb3JtYXQKK29mIHRoZSB0YWJsZSAod2hpY2ggYWxzbyBpbmNsdWRlcyBhIHZpZGVvIGNhcmQgbmFtZSB0byBiZSBkaXNwbGF5ZWQgb24gdGhlCit0b3Agb2YgdGhlIG1lbnUpLgorCisgICBDT05GSUdfVklERU9fNDAwX0hBQ0sgLSBmb3JjZSBzZXR0aW5nIG9mIDQwMCBzY2FuIGxpbmVzIGZvciBzdGFuZGFyZCBWR0EKK21vZGVzLiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIGNlcnRhaW4gYnVnZ3kgQklPU2VzIHdoaWNoIGRyYXcKK3NvbWUgdXNlbGVzcyBsb2dvIHVzaW5nIGZvbnQgZG93bmxvYWQgYW5kIHRoZW4gZmFpbCB0byByZXNldCB0aGUgY29ycmVjdCBtb2RlLgorRG9uJ3QgdXNlIHVubGVzcyBuZWVkZWQgYXMgaXQgZm9yY2VzIHJlc2V0dGluZyB0aGUgdmlkZW8gY2FyZC4KKworICAgQ09ORklHX1ZJREVPX0dGWF9IQUNLIC0gaW5jbHVkZXMgc3BlY2lhbCBoYWNrIGZvciBzZXR0aW5nIG9mIGdyYXBoaWNzIG1vZGVzCit0byBiZSB1c2VkIGxhdGVyIGJ5IHNwZWNpYWwgZHJpdmVycyAoZS5nLiwgODAweDYwMCBvbiBJQk0gVGhpbmtQYWQgLS0gc2VlCitmdHA6Ly9mdHAucGh5cy5rZWlvLmFjLmpwL3B1Yi9YRnJlZTg2LzgwMHg2MDAvWEY4NkNvbmZpZ3MvWEY4NkNvbmZpZy5JQk1fVFA1NjApLgorQWxsb3dzIHRvIHNldCBfYW55XyBCSU9TIG1vZGUgaW5jbHVkaW5nIGdyYXBoaWMgb25lcyBhbmQgZm9yY2luZyBzcGVjaWZpYwordGV4dCBzY3JlZW4gcmVzb2x1dGlvbiBpbnN0ZWFkIG9mIHBlZWtpbmcgaXQgZnJvbSBCSU9TIHZhcmlhYmxlcy4gRG9uJ3QgdXNlCit1bmxlc3MgeW91IHRoaW5rIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLiBUbyBhY3RpdmF0ZSB0aGlzIHNldHVwLCB1c2UKK21vZGUgbnVtYmVyIDB4MGYwOCAoc2VlIHNlY3Rpb24gMykuCisKKzUuIFN0aWxsIGRvZXNuJ3Qgd29yaz8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgIFdoZW4gdGhlIG1vZGUgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yayAoZS5nLiwgdGhlIG1vZGUgbGlzdCBpcyBpbmNvcnJlY3Qgb3IKK3RoZSBtYWNoaW5lIGhhbmdzIGluc3RlYWQgb2YgZGlzcGxheWluZyB0aGUgbWVudSksIHRyeSB0byBzd2l0Y2ggb2ZmIHNvbWUgb2YKK3RoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGlzdGVkIGluIHNlY3Rpb24gNC4gSWYgaXQgZmFpbHMsIHlvdSBjYW4gc3RpbGwgdXNlCit5b3VyIGtlcm5lbCB3aXRoIHRoZSB2aWRlbyBtb2RlIHNldCBkaXJlY3RseSB2aWEgdGhlIGtlcm5lbCBwYXJhbWV0ZXIuCisKKyAgIEluIGVpdGhlciBjYXNlLCBwbGVhc2Ugc2VuZCBtZSBhIGJ1ZyByZXBvcnQgY29udGFpbmluZyB3aGF0IF9leGFjdGx5XworaGFwcGVucyBhbmQgaG93IGRvIHRoZSBjb25maWd1cmF0aW9uIHN3aXRjaGVzIGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBidWcuCisKKyAgIElmIHlvdSBzdGFydCBMaW51eCBmcm9tIE0kLURPUywgeW91IG1pZ2h0IGFsc28gdXNlIHNvbWUgRE9TIHRvb2xzIGZvcgordmlkZW8gbW9kZSBzZXR0aW5nLiBJbiB0aGlzIGNhc2UsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIDB4MGYwNCBtb2RlICgibGVhdmUKK2N1cnJlbnQgc2V0dGluZ3MiKSB0byBMaW51eCwgYmVjYXVzZSBpZiB5b3UgZG9uJ3QgYW5kIHlvdSB1c2UgYW55IG5vbi1zdGFuZGFyZAorbW9kZSwgTGludXggd2lsbCBzd2l0Y2ggdG8gODB4MjUgYXV0b21hdGljYWxseS4KKworICAgSWYgeW91IHNldCBzb21lIGV4dGVuZGVkIG1vZGUgYW5kIHRoZXJlJ3Mgb25lIG9yIG1vcmUgZXh0cmEgbGluZXMgb24gdGhlCitib3R0b20gb2YgdGhlIGRpc3BsYXkgY29udGFpbmluZyBhbHJlYWR5IHNjcm9sbGVkLW91dCB0ZXh0LCB5b3VyIFZHQSBCSU9TCitjb250YWlucyB0aGUgbW9zdCBjb21tb24gdmlkZW8gQklPUyBidWcgY2FsbGVkICJpbmNvcnJlY3QgdmVydGljYWwgZGlzcGxheQorZW5kIHNldHRpbmciLiBBZGRpbmcgMHg4MDAwIHRvIHRoZSBtb2RlIElEIG1pZ2h0IGZpeCB0aGUgcHJvYmxlbS4gVW5mb3J0dW5hdGVseSwKK3RoaXMgbXVzdCBiZSBkb25lIG1hbnVhbGx5IC0tIG5vIGF1dG9kZXRlY3Rpb24gbWVjaGFuaXNtcyBhcmUgYXZhaWxhYmxlLgorCisgICBJZiB5b3UgaGF2ZSBhIFZHQSBjYXJkIGFuZCB5b3VyIGRpc3BsYXkgc3RpbGwgbG9va3MgYXMgb24gRUdBLCB5b3VyIEJJT1MKK2lzIHByb2JhYmx5IGJyb2tlbiBhbmQgeW91IG5lZWQgdG8gc2V0IHRoZSBDT05GSUdfVklERU9fNDAwX0hBQ0sgc3dpdGNoIHRvCitmb3JjZSBzZXR0aW5nIG9mIHRoZSBjb3JyZWN0IG1vZGUuCisKKzYuIEhpc3RvcnkKK35+fn5+fn5+fn4KKzEuMCAoPz8tTm92LTk1KQlGaXJzdCB2ZXJzaW9uIHN1cHBvcnRpbmcgYWxsIGFkYXB0ZXJzIHN1cHBvcnRlZCBieSB0aGUgb2xkCisJCXNldHVwLlMgKyBDaXJydXMgTG9naWMgNTRYWC4gUHJlc2VudCBpbiBzb21lIDEuMy40PyBrZXJuZWxzCisJCWFuZCB0aGVuIHJlbW92ZWQgZHVlIHRvIGluc3RhYmlsaXR5IG9uIHNvbWUgbWFjaGluZXMuCisyLjAgKDI4LUphbi05NikJUmV3cml0dGVuIGZyb20gc2NyYXRjaC4gQ2lycnVzIExvZ2ljIDY0WFggc3VwcG9ydCBhZGRlZCwgYWxtb3N0CisJCWV2ZXJ5dGhpbmcgaXMgY29uZmlndXJhYmxlLCB0aGUgVkVTQSBzdXBwb3J0IHNob3VsZCBiZSBtdWNoIG1vcmUKKwkJc3RhYmxlLCBleHBsaWNpdCBtb2RlIG51bWJlcmluZyBhbGxvd2VkLCAic2NhbiIgaW1wbGVtZW50ZWQgZXRjLgorMi4xICgzMC1KYW4tOTYpIFZFU0EgbW9kZXMgbW92ZWQgdG8gMHgyMDAtMHgzZmYuIE1vZGUgc2VsZWN0aW9uIGJ5IHJlc29sdXRpb24KKwkJc3VwcG9ydGVkLiBGZXcgYnVncyBmaXhlZC4gVkVTQSBtb2RlcyBhcmUgbGlzdGVkIHByaW9yIHRvCisJCW1vZGVzIHN1cHBsaWVkIGJ5IFNWR0EgYXV0b2RldGVjdGlvbiBhcyB0aGV5IGFyZSBtb3JlIHJlbGlhYmxlLgorCQlDTEdEIGF1dG9kZXRlY3Qgd29ya3MgYmV0dGVyLiBEb2Vzbid0IGRlcGVuZCBvbiA4MHgyNSBiZWluZworCQlhY3RpdmUgd2hlbiBzdGFydGVkLiBTY2FubmluZyBmaXhlZC4gODB4NDMgKGFueSBWR0EpIGFkZGVkLgorCQlDb2RlIGNsZWFuZWQgdXAuCisyLjIgKDAxLUZlYi05NikJRUdBIDgweDQzIGZpeGVkLiBWRVNBIGV4dGVuZGVkIHRvIDB4MjAwLTB4NGZmIChub24tc3RhbmRhcmQgMDJYWAorCQlWRVNBIG1vZGVzIHdvcmsgbm93KS4gRGlzcGxheSBlbmQgYnVnIHdvcmthcm91bmQgc3VwcG9ydGVkLgorCQlTcGVjaWFsIG1vZGVzIHJlbnVtYmVyZWQgdG8gYWxsb3cgYWRkaW5nIG9mIHRoZSAicmVjYWxjdWxhdGUiCisJCWZsYWcsIDB4ZmZmZiBhbmQgMHhmZmZlIGJlY2FtZSBhbGlhc2VzIGluc3RlYWQgb2YgcmVhbCBJRHMuCisJCVNjcmVlbiBjb250ZW50cyByZXRhaW5lZCBkdXJpbmcgbW9kZSBjaGFuZ2VzLgorMi4zICgxNS1NYXItOTYpCUNoYW5nZWQgdG8gd29yayB3aXRoIDEuMy43NCBrZXJuZWwuCisyLjQgKDE4LU1hci05NikJQWRkZWQgcGF0Y2hlcyBieSBIYW5zIExlcm1lbiBmaXhpbmcgYSBtZW1vcnkgb3ZlcndyaXRlIHByb2JsZW0KKwkJd2l0aCBzb21lIGJvb3QgbG9hZGVycy4gTWVtb3J5IG1hbmFnZW1lbnQgcmV3cml0dGVuIHRvIHJlZmxlY3QKKwkJdGhlc2UgY2hhbmdlcy4gVW5mb3J0dW5hdGVseSwgc2NyZWVuIGNvbnRlbnRzIHJldGFpbmluZyB3b3JrcworCQlvbmx5IHdpdGggc29tZSBsb2FkZXJzIG5vdy4KKwkJQWRkZWQgYSBUc2VuZyAxMzJ4NjAgbW9kZS4KKzIuNSAoMTktTWFyLTk2KQlGaXhlZCBhIFZFU0EgbW9kZSBzY2FubmluZyBidWcgaW50cm9kdWNlZCBpbiAyLjQuCisyLjYgKDI1LU1hci05NikJU29tZSBWRVNBIEJJT1MgZXJyb3JzIG5vdCByZXBvcnRlZCAtLSBpdCBmaXhlcyBlcnJvciByZXBvcnRzIG9uCisJCXNldmVyYWwgY2FyZHMgd2l0aCBicm9rZW4gVkVTQSBjb2RlIChlLmcuLCBBVEkgVkdBKS4KKzIuNyAoMDktQXByLTk2KQktIEFjY2VwdGVkIGFsbCBWRVNBIG1vZGVzIGluIHJhbmdlIDB4MTAwIHRvIDB4N2ZmLCBiZWNhdXNlIHNvbWUKKwkJICBjYXJkcyB1c2UgdmVyeSBzdHJhbmdlIG1vZGUgbnVtYmVycy4KKwkJLSBBZGRlZCBSZWFsdGVrIFZHQSBtb2RlcyAodGhhbmtzIHRvIEdvbnphbG8gVG9ybmFyaWEpLgorCQktIEhhcmR3YXJlIHRlc3Rpbmcgb3JkZXIgc2xpZ2h0bHkgY2hhbmdlZCwgdGVzdHMgYmFzZWQgb24gUk9NCisJCSAgY29udGVudHMgZG9uZSBhcyBmaXJzdC4KKwkJLSBBZGRlZCBzdXBwb3J0IGZvciBzcGVjaWFsIFZpZGVvNyBtb2RlIHN3aXRjaGluZyBmdW5jdGlvbnMKKwkJICAodGhhbmtzIHRvIFRvbSBWYW5kZXIgQWEpLgorCQktIEFkZGVkIDQ4MC1zY2FubGluZSBtb2RlcyAoZXNwZWNpYWxseSB1c2VmdWwgZm9yIG5vdGVib29rcywKKwkJICBvcmlnaW5hbCB2ZXJzaW9uIHdyaXR0ZW4gYnkgaGhhbmVtYWFAY3MucnV1Lm5sLCBwYXRjaGVkIGJ5CisJCSAgSmVmZiBDaHVhLCByZXdyaXR0ZW4gYnkgbWUpLgorCQktIFNjcmVlbiBzdG9yZS9yZXN0b3JlIGZpeGVkLgorMi44ICgxNC1BcHItOTYpCS0gUHJldmlvdXMgcmVsZWFzZSB3YXMgbm90IGNvbXBpbGFibGUgd2l0aG91dCBDT05GSUdfVklERU9fU1ZHQS4KKwkJLSBCZXR0ZXIgcmVjb2duaXRpb24gb2YgdGV4dCBtb2RlcyBkdXJpbmcgbW9kZSBzY2FuLgorMi45ICgxMi1NYXktOTYpCS0gSWdub3JlZCBWRVNBIG1vZGVzIDB4ODAgLSAweGZmIChtb3JlIFZFU0EgQklPUyBidWdzISkKKzIuMTAgKDExLU5vdi05NiktIFRoZSB3aG9sZSB0aGluZyBtYWRlIG9wdGlvbmFsLgorCQktIEFkZGVkIHRoZSBDT05GSUdfVklERU9fNDAwX0hBQ0sgc3dpdGNoLgorCQktIEFkZGVkIHRoZSBDT05GSUdfVklERU9fR0ZYX0hBQ0sgc3dpdGNoLgorCQktIENvZGUgY2xlYW51cC4KKzIuMTEgKDAzLU1heS05NyktIFlldCBhbm90aGVyIGNsZWFudXAsIG5vdyBpbmNsdWRpbmcgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbi4KKwkJLSBEaXJlY3QgdGVzdGluZyBvZiBTVkdBIGFkYXB0ZXJzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdCwgYHNjYW4nCisJCSAgb2ZmZXJlZCBleHBsaWNpdGx5IG9uIHRoZSBwcm9tcHQgbGluZS4KKwkJLSBSZW1vdmVkIHRoZSBkb2Mgc2VjdGlvbiBkZXNjcmliaW5nIGFkZGluZyBvZiBuZXcgcHJvYmluZworCQkgIGZ1bmN0aW9ucyBhcyBJIHRyeSB0byBnZXQgcmlkIG9mIF9hbGxfIGhhcmR3YXJlIHByb2JpbmcgaGVyZS4KKzIuMTIgKDI1LU1heS05OCktIEFkZGVkIHN1cHBvcnQgZm9yIFZFU0EgZnJhbWUgYnVmZmVyIGdyYXBoaWNzLgorMi4xMyAoMTQtTWF5LTk5KS0gTWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3gudHh0IGIvRG9jdW1lbnRhdGlvbi9zeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0ZWZhMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3gudHh0CkBAIC0wLDAgKzEsMjk0IEBACisKKyAgICAgIHN4LnR4dCAgLS0gc3BlY2lhbGl4IFNYL1NJIG11bHRpcG9ydCBzZXJpYWwgZHJpdmVyIHJlYWRtZS4KKworCisKKyAgICAgIENvcHlyaWdodCAoQykgMTk5NyAgUm9nZXIgV29sZmYgKFIuRS5Xb2xmZkBCaXRXaXphcmQubmwpCisKKyAgICAgIFNwZWNpYWxpeCBwYXlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQgb2YgdGhpcyBkcml2ZXIuCisgICAgICBQbGVhc2UgRE8gY29udGFjdCBzdXBwb3J0QHNwZWNpYWxpeC5jby51ayBpZiB5b3UgcmVxdWlyZQorICAgICAgc3VwcG9ydC4KKworICAgICAgVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCBpbiB0aGUgQml0V2l6YXJkIGxpbnV4IGRldmljZQorICAgICAgZHJpdmVyIHNlcnZpY2UuIElmIHlvdSByZXF1aXJlIGEgbGludXggZGV2aWNlIGRyaXZlciBmb3IgeW91cgorICAgICAgcHJvZHVjdCwgcGxlYXNlIGNvbnRhY3QgZGV2aWNlc0BCaXRXaXphcmQubmwgZm9yIGEgcXVvdGUuCisKKyAgICAgIChIaXN0b3J5KQorICAgICAgVGhlcmUgdXNlZCB0byBiZSBhbiBTSSBkcml2ZXIgYnkgU2ltb24gQWxsYW4uIFRoaXMgaXMgYSBjb21wbGV0ZSAKKyAgICAgIHJld3JpdGUgIGZyb20gc2NyYXRjaC4gSnVzdCBhIGZldyBsaW5lcy1vZi1jb2RlIGhhdmUgYmVlbiBzbmF0Y2hlZC4KKworICAgICAgKFNvdXJjZXMpCisgICAgICBTcGVjaWFsaXggZG9jdW1lbnQgbnVtYmVyIDYyMTAwMjg6IFNYIEhvc3QgQ2FyZCBhbmQgRG93bmxvYWQgQ29kZQorICAgICAgU29mdHdhcmUgRnVuY3Rpb25hbCBTcGVjaWZpY2F0aW9uLgorCisgICAgICAoQ29weWluZykKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKyAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgICAgIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LAorICAgICAgVVNBLgorICAgICAgCisgICAgICAoQWRkZW5kdW0pCisgICAgICBJJ2QgYXBwcmVjaWF0ZSBpdCB0aGF0IGlmIHlvdSBoYXZlIGZpeGVzLCB0aGF0IHlvdSBzZW5kIHRoZW0KKyAgICAgIHRvIG1lIGZpcnN0LiAKKworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitUaGlzIGZpbGUgY29udGFpbnMgc29tZSByYW5kb20gaW5mb3JtYXRpb24sIHRoYXQgSSBsaWtlIHRvIGhhdmUgb25saW5lCitpbnN0ZWFkIG9mIGluIGEgbWFudWFsIHRoYXQgY2FuIGdldCBsb3N0LiBFdmVyIG1pc3BsYWNlIHlvdXIgTGludXgKK2tlcm5lbCBzb3VyY2VzPyAgQW5kIHRoZSBtYW51YWwgb2Ygb25lIG9mIHRoZSBib2FyZHMgaW4geW91ciBjb21wdXRlcj8KKworCitUaGVvcnkgb2Ygb3BlcmF0aW9uCis9PT09PT09PT09PT09PT09PT09CisKK0FuIGltcG9ydGFudCB0aGluZyB0byBrbm93IGlzIHRoYXQgdGhlIGRyaXZlciBpdHNlbGYgZG9lc24ndCBoYXZlIHRoZQorZmlybXdhcmUgZm9yIHRoZSBjYXJkLiBUaGlzIG1lYW5zIHRoYXQgeW91IG5lZWQgdGhlIHNlcGFyYXRlIHBhY2thZ2UKKyJzeF9maXJtd2FyZSIuIEZvciBub3cgeW91IGNhbiBnZXQgdGhlIHNvdXJjZSBhdAorCisJZnRwOi8vZnRwLmJpdHdpemFyZC5ubC9zcGVjaWFsaXgvc3hfZmlybXdhcmVfPHZlcnNpb24+LnRnegorCitUaGUgZmlybXdhcmUgbG9hZCBuZWVkcyBhICJtaXNjIiBkZXZpY2UsIHNvIHlvdSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUKKyJTdXBwb3J0IGZvciB1c2VyIG1pc2MgZGV2aWNlIG1vZHVsZXMiIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24uCitUaGUgbWlzYyBkZXZpY2UgbmVlZHMgdG8gYmUgY2FsbGVkICIvZGV2L3NwZWNpYWxpeF9zeGN0bCIuIEl0IG5lZWRzCittaXNjIG1ham9yIDEwLCBhbmQgbWlub3IgbnVtYmVyIDE2NyAoYXNzaWduZWQgYnkgSFBBKS4gVGhlIHNlY3Rpb24KK29uIGNyZWF0aW5nIGRldmljZSBmaWxlcyBiZWxvdyBhbHNvIGNyZWF0ZXMgdGhpcyBkZXZpY2UuIAorCitBZnRlciBsb2FkaW5nIHRoZSBzeC5vIG1vZHVsZSBpbnRvIHlvdXIga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgcmVwb3J0Cit0aGUgbnVtYmVyIG9mIGNhcmRzIGRldGVjdGVkLCBidXQgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW55CitmaXJtd2FyZSwgaXQgd2lsbCBub3QgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwb3J0cy4gT25seQord2hlbiB5b3UgdGhlbiBydW4gInN4X2Zpcm13YXJlIiB3aWxsIHRoZSBmaXJtd2FyZSBiZSBkb3dubG9hZGVkIGFuZAordGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBpbml0aWFsaXplZC4gQXQgdGhhdCB0aW1lIHRoZSBzeF9maXJtd2FyZQorcHJvZ3JhbSB3aWxsIHJlcG9ydCB0aGUgbnVtYmVyIG9mIHBvcnRzIGluc3RhbGxlZC4KKworSW4gY29udHJhc3Qgd2l0aCBtYW55IG90aGVyIG11bHRpIHBvcnQgc2VyaWFsIGNhcmRzLCBzb21lIG9mIHRoZSBkYXRhCitzdHJ1Y3R1cmVzIGFyZSBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSBjYXJkIGtub3dzIHRoZSBudW1iZXIgb2YgcG9ydHMKK3RoYXQgYXJlIGNvbm5lY3RlZC4gVGhpcyBtZWFucyB3ZSB3b24ndCB3YXN0ZSBtZW1vcnkgZm9yIDEyMCBwb3J0CitkZXNjcmlwdG9yIHN0cnVjdHVyZXMgd2hlbiB5b3Ugb25seSBoYXZlIDggcG9ydHMuIElmIHlvdSBleHBlcmllbmNlCitwcm9ibGVtcyBkdWUgdG8gdGhpcywgcGxlYXNlIHJlcG9ydCB0aGVtOiBJIGhhdmVuJ3Qgc2VlbiBhbnkuCisKKworSW50ZXJydXB0cworPT09PT09PT09PQorCitBIG11bHRpIHBvcnQgc2VyaWFsIGNhcmQsIHdvdWxkIGdlbmVyYXRlIGEgaG9ycmVuZG91cyBhbW91bnQgb2YKK2ludGVycnVwdHMgaWYgaXQgd291bGQgaW50ZXJydXB0IHRoZSBDUFUgZm9yIGV2ZXJ5IHJlY2VpdmVkCitjaGFyYWN0ZXIuIEV2ZW4gbW9yZSB0aGFuIDEwIHllYXJzIGFnbywgdGhlIHRyaWNrIG5vdCB0byB1c2UKK2ludGVycnVwdHMgYnV0IHRvIHBvbGwgdGhlIHNlcmlhbCBjYXJkcyB3YXMgaW52ZW50ZWQuCisKK1RoZSBTWCBjYXJkIGFsbG93IHVzIHRvIGRvIHRoaXMgdHdvIHdheXMuIEZpcnN0IHRoZSBjYXJkIGxpbWl0cyBpdHMKK293biBpbnRlcnJ1cHQgcmF0ZSB0byBhIHJhdGUgdGhhdCB3b24ndCBvdmVyd2hlbG0gdGhlIENQVS4gU2Vjb25kbHksCit3ZSBjb3VsZCBmb3JnZXQgYWJvdXQgdGhlIGNhcmRzIGludGVycnVwdCBjb21wbGV0ZWx5IGFuZCB1c2UgdGhlCitpbnRlcm5hbCB0aW1lciBmb3IgdGhpcyBwdXJwb3NlLgorCitQb2xsaW5nIHRoZSBjYXJkIGNhbiB0YWtlIHVwIHRvIGEgZmV3IHBlcmNlbnQgb2YgeW91ciBDUFUuIFVzaW5nIHRoZQoraW50ZXJydXB0cyB3b3VsZCBiZSBiZXR0ZXIgaWYgeW91IGhhdmUgbW9zdCBvZiB0aGUgcG9ydHMgaWRsZS4gVXNpbmcKK3RpbWVyLWJhc2VkIHBvbGxpbmcgaXMgYmV0dGVyIGlmIHlvdXIgY2FyZCBhbG1vc3QgYWx3YXlzIGhhcyB3b3JrIHRvCitkby4gWW91IHNhdmUgdGhlIHNlcGFyYXRlIGludGVycnVwdCBpbiB0aGF0IGNhc2UuCisKK0luIGFueSBjYXNlLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgYWxsIHRoYXQgbXVjaC4gCisKK1RoZSBtb3N0IGNvbW1vbiBwcm9ibGVtIHdpdGggaW50ZXJydXB0cyBpcyB0aGF0IGZvciBJU0EgY2FyZHMgaW4gYSBQQ0kKK3N5c3RlbSB0aGUgQklPUyBoYXMgdG8gYmUgdG9sZCB0byBjb25maWd1cmUgdGhhdCBpbnRlcnJ1cHQgYXMgImxlZ2FjeQorSVNBIi4gT3RoZXJ3aXNlIHRoZSBjYXJkIGNhbiBwdWxsIG9uIHRoZSBpbnRlcnJ1cHQgbGluZSBhbGwgaXQgd2FudHMKK2J1dCB0aGUgQ1BVIHdvbid0IHNlZSB0aGlzLgorCitJZiB5b3UgY2FuJ3QgZ2V0IHRoZSBpbnRlcnJ1cHQgdG8gd29yaywgcmVtZW1iZXIgdGhhdCBwb2xsaW5nIG1vZGUgaXMKK21vcmUgZWZmaWNpZW50IChwcm92aWRlZCB5b3UgYWN0dWFsbHkgdXNlIHRoZSBjYXJkIGludGVuc2l2ZWx5KS4KKworCitBbGxvd2VkIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgY29uZmlndXJhdGlvbnMgYXJlIGRpc2FsbG93ZWQuIEV2ZW4gdGhvdWdoIGF0IGEgZ2xhbmNlIHRoZXkgbWlnaHQKK3NlZW0gdG8gd29yaywgdGhleSBhcmUga25vd24gdG8gbG9ja3VwIHRoZSBidXMgYmV0d2VlbiB0aGUgaG9zdCBjYXJkCithbmQgdGhlIGRldmljZSBjb25jZW50cmF0b3JzLiBZb3Ugc2hvdWxkIHJlc3BlY3QgdGhlIGRyaXZlcnMgZGVjaXNpb24KK25vdCB0byBzdXBwb3J0IGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIEl0J3MgdGhlcmUgZm9yIGEgcmVhc29uLgorCitXYXJuaW5nOiBTZXJpb3VzbHkgdGVjaG5pY2FsIHN0dWZmIGFoZWFkLiBFeGVjdXRpdmUgc3VtbWFyeTogRG9uJ3QgdXNlCitTWCBjYXJkcyBleGNlcHQgY29uZmlndXJlZCBhdCBhIDY0ayBib3VuZGFyeS4gU2tpcCB0aGUgbmV4dCBwYXJhZ3JhcGguCisKK1RoZSBTWCBjYXJkcyBjYW4gdGhlb3JldGljYWxseSBiZSBwbGFjZWQgYXQgYSAzMmsgYm91bmRhcnkuIFNvIGZvcgoraW5zdGFuY2UgeW91IGNhbiBwdXQgYW4gU1ggY2FyZCBhdCAweGM4MDAwLTB4ZDdmZmYuIFRoaXMgaXMgbm90IGEKKyJyZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIi4gSVNBIGNhcmRzIGhhdmUgdG8gdGVsbCB0aGUgYnVzIGNvbnRyb2xsZXIKK2hvdyB0aGV5IGxpa2UgdGhlaXIgdGltaW5nLiBEdWUgdG8gdGltaW5nIGlzc3VlcyB0aGV5IGhhdmUgdG8gZG8gdGhpcworYmFzZWQgb24gd2hpY2ggNjRrIHdpbmRvdyB0aGUgYWRkcmVzcyBmYWxscyBpbnRvLiBUaGlzIG1lYW5zIHRoYXQgdGhlCiszMmsgd2luZG93IGJlbG93IGFuZCBhYm92ZSB0aGUgU1ggY2FyZCBoYXZlIHRvIHVzZSBleGFjdGx5IHRoZSBzYW1lCit0aW1pbmcgYXMgdGhlIFNYIGNhcmQuIFRoYXQgcmVwb3J0ZWRseSB3b3JrcyBmb3Igb3RoZXIgU1ggY2FyZHMuIEJ1dAoreW91J3JlIHN0aWxsIGxlZnQgd2l0aCB0d28gdXNlbGVzcyAzMmsgd2luZG93cyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZAorYnkgYW55Ym9keSBlbHNlLgorCisKK0NvbmZpZ3VyaW5nIHRoZSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT0KKworUENJIGNhcmRzIGFyZSBhbHdheXMgZGV0ZWN0ZWQuIFRoZSBkcml2ZXIgYXV0by1wcm9iZXMgZm9yIElTQSBjYXJkcyBhdAorc29tZSBzZW5zaWJsZSBhZGRyZXNzZXMuIFBsZWFzZSByZXBvcnQgaWYgdGhlIGF1dG8tcHJvYmUgY2F1c2VzIHRyb3VibGUKK2luIHlvdXIgc3lzdGVtLCBvciB3aGVuIGEgY2FyZCBpc24ndCBkZXRlY3RlZC4KKworSSdtIGFmcmFpZCBJIGhhdmVuJ3QgaW1wbGVtZW50ZWQgImtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyIgeWV0LgorVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBkZWZhdWx0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCB5b3Ugc2hvdWxkbid0IHVzZQordGhlIGNvbXBpbGVkLWludG8tdGhlLWtlcm5lbCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuIFVzZSBhIG1vZHVsZQoraW5zdGVhZC4gIElmIHlvdSBjb252aW5jZSBtZSB0aGF0IHlvdSBuZWVkIHRoaXMsIEknbGwgbWFrZSBpdCBmb3IKK3lvdS4gRGVhbD8KKworSSdtIGFmcmFpZCB0aGF0IHRoZSBtb2R1bGUgcGFyYW1ldGVycyBhcmUgYSBiaXQgY2x1bXN5LiBJZiB5b3UgaGF2ZSBhCitiZXR0ZXIgaWRlYSwgcGxlYXNlIHRlbGwgbWUuCisKK1lvdSBjYW4gc3BlY2lmeSBzZXZlcmFsIHBhcmFtZXRlcnM6CisKKwlzeF9wb2xsOiBudW1iZXIgb2YgamlmZmllcyBiZXR3ZWVuIHRpbWVyLWJhc2VkIHBvbGxzLgorCisJCVNldCB0aGlzIHRvICIwIiB0byBkaXNhYmxlIHRpbWVyIGJhc2VkIHBvbGxzLiAKKyAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBvZiBjYXJkcyB3aXRob3V0IGEgd29ya2luZyBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICB3aWxsIGZhaWwuCisKKwkJU2V0IHRoaXMgdG8gIjEiIGlmIHlvdSB3YW50IGEgcG9sbGluZyBkcml2ZXIuIAorCQkob24gSW50ZWw6IDEwMCBwb2xscyBwZXIgc2Vjb25kKS4gSWYgeW91IGRvbid0IHVzZQorICAgICAgICAgICAgICAgIGZhc3QgYmF1ZCByYXRlcywgeW91IG1pZ2h0IGNvbnNpZGVyIGEgdmFsdWUgbGlrZSAiNSIuIAorICAgICAgICAgICAgICAgIChJZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhlIG1hdGgsIHVzZSAxKS4KKworCXN4X3Nsb3dwb2xsOiBOdW1iZXIgb2YgamlmZmllcyBiZXR3ZWVuIHRpbWVyLWJhc2VkIHBvbGxzLiAKKyAJCVNldCB0aGlzIHRvICIxMDAiIHRvIHBvbGwgb25jZSBhIHNlY29uZC4gCisJCVRoaXMgc2hvdWxkIGdldCB0aGUgY2FyZCBvdXQgb2YgYSBzdGFsbCBpZiB0aGUgZHJpdmVyCisgICAgICAgICAgICAgICAgZXZlciBtaXNzZXMgYW4gaW50ZXJydXB0LiBJJ3ZlIG5ldmVyIHNlZW4gdGhpcyBoYXBwZW4sCisgICAgICAgICAgICAgICAgYW5kIGlmIGl0IGRvZXMsIHRoYXQncyBhIGJ1Zy4gVGVsbCBtZS4gCisKKwlzeF9tYXhpbnRzOiBOdW1iZXIgb2YgaW50ZXJydXB0cyB0byByZXF1ZXN0IGZyb20gdGhlIGNhcmQuIAorCQlUaGUgY2FyZCBub3JtYWxseSBsaW1pdHMgaW50ZXJydXB0cyB0byBhYm91dCAxMDAgcGVyCisJCXNlY29uZCB0byBvZmZsb2FkIHRoZSBob3N0IENQVS4gWW91IGNhbiBpbmNyZWFzZSB0aGlzCisJCW51bWJlciB0byByZWR1Y2UgbGF0ZW5jeSBvbiB0aGUgY2FyZCBhIGxpdHRsZS4KKwkJTm90ZSB0aGF0IGlmIHlvdSBnaXZlIGEgdmVyeSBoaWdoIG51bWJlciB5b3UgY2FuIG92ZXJsb2FkCisJCXlvdXIgQ1BVIGFzIHdlbGwgYXMgdGhlIENQVSBvbiB0aGUgaG9zdCBjYXJkLiBUaGlzIHNldHRpbmcgCisJCWlzIGluYWNjdXJhdGUgYW5kIG5vdCByZWNvbW1lbmRlZCBmb3IgU0kgY2FyZHMgKEJ1dCBpdCAKKwkJd29ya3MpLiAKKworCXN4X2lycW1hc2s6IFRoZSBtYXNrIG9mIGFsbG93YWJsZSBJUlFzIHRvIHVzZS4gSSBzdWdnZXN0IHlvdSBzZXQgCisJCXRoaXMgdG8gMCAoZGlzYWJsZSBJUlFzIGFsbCB0b2dldGhlcikgYW5kIHVzZSBwb2xsaW5nIGlmIAorCQl0aGUgYXNzaWdubWVudCBvZiBJUlFzIGJlY29tZXMgcHJvYmxlbWF0aWMuIFRoaXMgaXMgZGVmaW5lZAorCQlhcyB0aGUgc3VtIG9mICgxIDw8IGlycSkgJ3MgdGhhdCB5b3Ugd2FudCB0byBhbGxvdy4gU28gCisJCXN4X2lycW1hc2sgb2YgOCAoMSA8PCAzKSBzcGVjaWZpZXMgdGhhdCBvbmx5IGlycSAzIG1heQorCQliZSB1c2VkIGJ5IHRoZSBTWCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIHNwZWNpZnkgdG8gdGhlIAorCQlkcml2ZXI6ICJFaXRoZXIgaXJxIDExIG9yIDEyIGlzIG9rIGZvciB5b3UgdG8gdXNlIiwgdGhlbgorCQlzcGVjaWZ5ICgxIDw8IDExKSB8ICgxIDw8IDEyKSA9IDB4MTgwMCAuIAorCisJc3hfZGVidWc6IFlvdSBjYW4gZW5hYmxlIGRpZmZlcmVudCBzb3J0cyBvZiBkZWJ1ZyB0cmFjZXMgd2l0aCB0aGlzLiAKKwkJQXQgIi0xIiBhbGwgZGVidWdnaW5nIHRyYWNlcyBhcmUgYWN0aXZlLiBZb3UnbGwgZ2V0IHNldmVyYWwKKwkJdGltZXMgbW9yZSBkZWJ1Z2dpbmcgb3V0cHV0IHRoYW4geW91J2xsIGdldCBjaGFyYWN0ZXJzIAorCQl0cmFuc21pdHRlZC4gCisKKworQmF1ZCByYXRlcworPT09PT09PT09PQorCitUaGVvcmV0aWNhbGx5IG5ldyBTWERDcyBzaG91bGQgYmUgY2FwYWJsZSBvZiBtb3JlIHRoYW4gNDYwaworYmF1ZC4gSG93ZXZlciB0aGUgbGluZSBkcml2ZXJzIHVzdWFsbHkgZ2l2ZSB1cCBiZWZvcmUgdGhhdC4gIEFsc28gdGhlCitDUFUgb24gdGhlIGNhcmQgbWF5IG5vdCBiZSBhYmxlIHRvIGhhbmRsZSA4IGNoYW5uZWxzIGdvaW5nIGF0IGZ1bGwKK2JsYXN0IGF0IHRoYXQgc3BlZWQuIE1vcmVvdmVyLCB0aGUgYnVmZmVycyBhcmUgbm90IGxhcmdlIGVub3VnaCB0bworYWxsb3cgb3BlcmF0aW9uIHdpdGggMTAwIGludGVycnVwdHMgcGVyIHNlY29uZC4gWW91J2xsIGhhdmUgdG8gcmVhbGl6ZQordGhhdCB0aGUgY2FyZCBoYXMgYSAyNTYgYnl0ZSBidWZmZXIsIHNvIHlvdSdsbCBoYXZlIHRvIGluY3JlYXNlIHRoZQorbnVtYmVyIG9mIGludGVycnVwdHMgcGVyIHNlY29uZCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gMjU2KjEwMCBieXRlcworcGVyIHNlY29uZCB0byB0cmFuc21pdC4gIElmIHlvdSBkbyBhbnkgcGVyZm9ybWFuY2UgdGVzdGluZyBpbiB0aGlzCithcmVhLCBJJ2QgYmUgZ2xhZCB0byBoZWFyIGZyb20geW91Li4uCisKKyhQc3N0IExpbnV4IHVzZXJzLi4uLi4gSSB0aGluayB0aGUgTGludXggZHJpdmVyIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KK3RoZSBkcml2ZXIgZm9yIG90aGVyIE9TZXMuIElmIHlvdSBjYW4gYW5kIHdhbnQgdG8gYmVuY2htYXJrIHRoZW0KK2FnYWluc3QgZWFjaCBvdGhlciwgYmUgbXkgZ3Vlc3QsIGFuZCByZXBvcnQgeW91ciBmaW5kaW5ncy4uLi4uLiA6LSkKKworCitQb3J0cyBhbmQgZGV2aWNlcworPT09PT09PT09PT09PT09PT0KKworUG9ydCAwIGlzIHRoZSB0b3AgY29ubmVjdG9yIG9uIHRoZSBtb2R1bGUgY2xvc2VzdCB0byB0aGUgaG9zdAorY2FyZC4gT2gsIHRoZSBwb3J0cyBvbiB0aGUgU1hEQ3MgYW5kIFRBcyBhcmUgbGFiZWxsZWQgZnJvbSAxIHRvIDgKK2luc3RlYWQgb2YgZnJvbSAwIHRvIDcsIGFzIHRoZXkgYXJlIG51bWJlcmVkIGJ5IGxpbnV4LiBJJ20gc3R1YmJvcm4gaW4KK3RoaXM6IEkga25vdyBmb3Igc3VyZSB0aGF0IEkgd291bGRuJ3QgYmUgYWJsZSB0byBjYWxjdWxhdGUgd2hpY2ggcG9ydAoraXMgd2hpY2ggYW55bW9yZSBpZiBJIHdvdWxkIGNoYW5nZSB0aGF0Li4uLgorCisKK0RldmljZXM6CisKK1lvdSBzaG91bGQgbWFrZSB0aGUgZGV2aWNlIGZpbGVzIGFzIGZvbGxvd3M6CisKKyMhL2Jpbi9zaAorIyAoSSByZWNvbW1lbmQgdGhhdCB5b3UgY3V0LWFuZC1wYXN0ZSB0aGlzIGludG8gYSBmaWxlIGFuZCBydW4gdGhhdCkKK2NkIC9kZXYKK3Q9MAorbWtub2Qgc3BlY2lhbGl4X3N4Y3RsIGMgMTAgMTY3Cit3aGlsZSBbICR0IC1sdCA2NCBdCisgIGRvIAorICBlY2hvIC1uICIkdCAiCisgIG1rbm9kIHR0eVgkdCBjIDMyICR0CisgIG1rbm9kIGN1eCR0ICBjIDMzICR0CisgIHQ9YGV4cHIgJHQgKyAxYAorZG9uZQorZWNobyAiIgorcm0gL2V0Yy9wc2RldnRhYgorcHMgPiAvZGV2L251bGwKKworCitUaGlzIGNyZWF0ZXMgNjQgZGV2aWNlcy4gSWYgeW91IGhhdmUgbW9yZSwgaW5jcmVhc2UgdGhlIGNvbnN0YW50IG9uCit0aGUgbGluZSB3aXRoICJ3aGlsZSIuIFRoZSBkZXZpY2VzIHN0YXJ0IGF0IDAsIGFzIGlzIGN1c3RvbWFyeSBvbgorTGludXguIFNwZWNpYWxpeCBzZWVtcyB0byBsaWtlIHN0YXJ0aW5nIHRoZSBudW1iZXJpbmcgYXQgMS4gCisKK0lmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgY29tZSB3aXRoIHRoZXNlIGRldmljZXMgcHJlLWluc3RhbGxlZCwgYnVnIHlvdXIKK2xpbnV4LXZlbmRvciBhYm91dCB0aGlzLiBUaGV5IHNob3VsZCBoYXZlIHRoZXNlIGRldmljZXMKKyJwcmUtaW5zdGFsbGVkIiBiZWZvcmUgdGhlIG5ldyBtaWxsZW5uaXVtLiBUaGUgInBzIiBzdHVmZiBhdCB0aGUgZW5kCitpcyB0byAidGVsbCIgcHMgdGhhdCB0aGUgbmV3IGRldmljZXMgZXhpc3QuCisKK09mZmljaWFsbHkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhcmRzIHBlciBjb21wdXRlciBpcyA0LiBUaGlzIGRyaXZlcgoraG93ZXZlciBzdXBwb3J0cyBhcyBtYW55IGNhcmRzIGluIG9uZSBtYWNoaW5lIGFzIHlvdSB3YW50LiBZb3UnbGwgcnVuCitvdXQgb2YgaW50ZXJydXB0cyBhZnRlciBhIGZldywgYnV0IHlvdSBjYW4gc3dpdGNoIHRvIHBvbGxlZCBvcGVyYXRpb24KK3RoZW4uIEF0IGFib3V0IDI1NiBwb3J0cyAoTW9yZSB0aGFuIDggY2FyZHMpLCB3ZSBydW4gb3V0IG9mIG1pbm9yCitkZXZpY2UgbnVtYmVycy4gU29ycnkuIEkgc3VnZ2VzdCB5b3UgYnV5IGEgc2Vjb25kIGNvbXB1dGVyLi4uLiAoT3IKK3N3aXRjaCB0byBSSU8pLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgIEZpeGVkIGJ1Z3MgYW5kIHJlc3RyaWN0aW9uczoKKwktIEhhbmd1cCBwcm9jZXNzaW5nLiAgCisJICAtLSBEb25lLgorCisJLSB0aGUgd3JpdGUgcGF0aCBpbiBnZW5lcmljX3NlcmlhbCAobG9ja3VwIC8gb29wcykuIAorCSAgLS0gRG9uZSAoVWdseTogbm90IHRoZSB3YXkgSSB3YW50IGl0LiBDb3BpZWQgZnJvbSBzZXJpYWwuYykuCisKKyAgICAgICAgLSB3cml0ZSBidWZmZXIgaXNuJ3QgZmx1c2hlZCBhdCBjbG9zZS4KKwkgIC0tIERvbmUuIEkgc3RpbGwgc2VlbSB0byBsb3NlIGEgZmV3IGNoYXJzIGF0IGNsb3NlLiAKKwkgICAgIFNvcnJ5LiBJIHRoaW5rIHRoYXQgdGhpcyBpcyBhIGZpcm13YXJlIGlzc3VlLiAoLT4gU3BlY2lhbGl4KQorCisJLSBkcmFpbiBoYXJkd2FyZSBiZWZvcmUgIGNoYW5naW5nIHRlcm1pb3MKKwktIENoYW5nZSBkZWJ1ZyBvbiB0aGUgZmx5LiAKKwktIElTQSBmcmVlIGlycSAtMS4gKG5vIGZpcm13YXJlIGxvYWRlZCkuCisJLSBhZGRpbmcgYzgwMDAgYXMgYSBwcm9iZSBhZGRyZXNzLiBBZGRlZCB3YXJuaW5nLiAKKwktIEFkZCBhIFJBTXRlc3QgZm9yIHRoZSBSQU0gb24gdGhlIGNhcmQuYworICAgICAgICAtIENyYXNoIHdoZW4gb3BlbmluZyBhIHBvcnQgIndheSIgb2YgdGhlIG51bWJlciBvZiBhbGxvd2VkIHBvcnRzLiAKKyAgICAgICAgICAoZm9yIGV4YW1wbGUgb3BlbmluZyBwb3J0IDYwIHdoZW4gdGhlcmUgYXJlIG9ubHkgMjQgcG9ydHMgYXR0YWNoZWQpCisJLSBTb21ldGltZXMgdGhlIHVzZS1jb3VudCBzdHJheXMgYSBiaXQuIEFmdGVyIGEgZmV3IGhvdXJzIG9mCisgICAgICAgICAgdGVzdGluZyB0aGUgdXNlIGNvdW50IGlzIHNvbWV0aW1lcyAiMyIuIElmIHlvdSBhcmUgbm90IGxpa2UKKyAgICAgICAgICBtZSBhbmQgY2FuIHJlbWVtYmVyIHdoYXQgeW91IGRpZCB0byBnZXQgaXQgdGhhdCB3YXksIEknZAorICAgICAgICAgIGFwcHJlY2lhdGUgYW4gRW1haWwuIFBvc3NpYmx5IGZpeGVkLiBUZWxsIG1lIGlmIGFueW9uZSBzdGlsbAorICAgICAgICAgIHNlZXMgdGhpcy4KKwktIFRBcyBkb24ndCB3b3JrIHJpZ2h0IGlmIHlvdSBkb24ndCBjb25uZWN0IGFsbCB0aGUgbW9kZW0gY29udHJvbAorCSAgc2lnbmFscy4gU1hEQ3MgZG8uIFQyMjUgZmlybXdhcmUgcHJvYmxlbSAtPiBTcGVjaWFsaXguIAorCSAgKE1vc3RseSBmaXhlZCBub3csIEkgdGhpbmsuIFRlbGwgbWUgaWYgeW91IGVuY291bnRlciB0aGlzISkKKworICBCdWdzICYgcmVzdHJpY3Rpb25zOgorCisJLSBBcmJpdHJhcnkgYmF1ZCByYXRlcy4gUmVxdWlyZXMgZmlybXdhcmUgdXBkYXRlLiAoLT4gU3BlY2lhbGl4KQorCisJLSBMb3cgbGF0ZW5jeSAobW9zdGx5IGZpcm13YXJlLCAtPiBTcGVjaWFsaXgpCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzMzA2ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL1JFQURNRQpAQCAtMCwwICsxLDc1IEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvCQlrZXJuZWwgdmVyc2lvbiAyLjIuMTAKKwkoYykgMTk5OCwgMTk5OSwgIFJpayB2YW4gUmllbCA8cmllbEBubC5saW51eC5vcmc+CisKKydXaHknLCBJIGhlYXIgeW91IGFzaywgJ3dvdWxkIGFueW9uZSBldmVuIF93YW50XyBkb2N1bWVudGF0aW9uCitmb3IgdGhlbSBzeXNjdGwgZmlsZXM/IElmIGFueWJvZHkgcmVhbGx5IG5lZWRzIGl0LCBpdCdzIGFsbCBpbgordGhlIHNvdXJjZS4uLicKKworV2VsbCwgdGhpcyBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gYmVjYXVzZSBzb21lIHBlb3BsZSBlaXRoZXIKK2Rvbid0IGtub3cgdGhleSBuZWVkIHRvIHR3ZWFrIHNvbWV0aGluZywgb3IgYmVjYXVzZSB0aGV5IGRvbid0CitoYXZlIHRoZSB0aW1lIG9yIGtub3dsZWRnZSB0byByZWFkIHRoZSBzb3VyY2UgY29kZS4KKworRnVydGhlcm1vcmUsIHRoZSBwcm9ncmFtbWVycyB3aG8gYnVpbHQgc3lzY3RsIGhhdmUgYnVpbHQgaXQgdG8KK2JlIGFjdHVhbGx5IHVzZWQsIG5vdCBqdXN0IGZvciB0aGUgZnVuIG9mIHByb2dyYW1taW5nIGl0IDotKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMZWdhbCBibHVyYjoKKworQXMgdXN1YWwsIHRoZXJlIGFyZSB0d28gbWFpbiB0aGluZ3MgdG8gY29uc2lkZXI6CisxLiB5b3UgZ2V0IHdoYXQgeW91IHBheSBmb3IKKzIuIGl0J3MgZnJlZQorCitUaGUgY29uc2VxdWVuY2VzIGFyZSB0aGF0IEkgd29uJ3QgZ3VhcmFudGVlIHRoZSBjb3JyZWN0bmVzcyBvZgordGhpcyBkb2N1bWVudCwgYW5kIGlmIHlvdSBjb21lIHRvIG1lIGNvbXBsYWluaW5nIGFib3V0IGhvdyB5b3UKK3NjcmV3ZWQgdXAgeW91ciBzeXN0ZW0gYmVjYXVzZSBvZiB3cm9uZyBkb2N1bWVudGF0aW9uLCBJIHdvbid0CitmZWVsIHNvcnJ5IGZvciB5b3UuIEkgbWlnaHQgZXZlbiBsYXVnaCBhdCB5b3UuLi4KKworQnV0IG9mIGNvdXJzZSwgaWYgeW91IF9kb18gbWFuYWdlIHRvIHNjcmV3IHVwIHlvdXIgc3lzdGVtIHVzaW5nCitvbmx5IHRoZSBzeXNjdGwgb3B0aW9ucyB1c2VkIGluIHRoaXMgZmlsZSwgSSdkIGxpa2UgdG8gaGVhciBvZgoraXQuIE5vdCBvbmx5IHRvIGhhdmUgYSBncmVhdCBsYXVnaCwgYnV0IGFsc28gdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSdyZSB0aGUgbGFzdCBSVEZNaW5nIHBlcnNvbiB0byBzY3JldyB1cC4KKworSW4gc2hvcnQsIGUtbWFpbCB5b3VyIHN1Z2dlc3Rpb25zLCBjb3JyZWN0aW9ucyBhbmQgLyBvciBob3Jyb3IKK3N0b3JpZXMgdG86IDxyaWVsQG5sLmxpbnV4Lm9yZz4KKworUmlrIHZhbiBSaWVsLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRyb2R1Y3Rpb246CisKK1N5c2N0bCBpcyBhIG1lYW5zIG9mIGNvbmZpZ3VyaW5nIGNlcnRhaW4gYXNwZWN0cyBvZiB0aGUga2VybmVsCithdCBydW4tdGltZSwgYW5kIHRoZSAvcHJvYy9zeXMvIGRpcmVjdG9yeSBpcyB0aGVyZSBzbyB0aGF0IHlvdQorZG9uJ3QgZXZlbiBuZWVkIHNwZWNpYWwgdG9vbHMgdG8gZG8gaXQhCitJbiBmYWN0LCB0aGVyZSBhcmUgb25seSBmb3VyIHRoaW5ncyBuZWVkZWQgdG8gdXNlIHRoZXNlIGNvbmZpZworZmFjaWxpdGllczoKKy0gYSBydW5uaW5nIExpbnV4IHN5c3RlbQorLSByb290IGFjY2VzcworLSBjb21tb24gc2Vuc2UgKHRoaXMgaXMgZXNwZWNpYWxseSBoYXJkIHRvIGNvbWUgYnkgdGhlc2UgZGF5cykKKy0ga25vd2xlZGdlIG9mIHdoYXQgYWxsIHRob3NlIHZhbHVlcyBtZWFuCisKK0FzIGEgcXVpY2sgJ2xzIC9wcm9jL3N5cycgd2lsbCBzaG93LCB0aGUgZGlyZWN0b3J5IGNvbnNpc3RzIG9mCitzZXZlcmFsIChhcmNoLWRlcGVuZGVudD8pIHN1YmRpcnMuIEVhY2ggc3ViZGlyIGlzIG1haW5seSBhYm91dAorb25lIHBhcnQgb2YgdGhlIGtlcm5lbCwgc28geW91IGNhbiBkbyBjb25maWd1cmF0aW9uIG9uIGEgcGllY2UKK2J5IHBpZWNlIGJhc2lzLCBvciBqdXN0IHNvbWUgJ3RoZW1hdGljIGZyb2JiaW5nJy4KKworVGhlIHN1YmRpcnMgYXJlIGFib3V0OgorYWJpLwkJZXhlY3V0aW9uIGRvbWFpbnMgJiBwZXJzb25hbGl0aWVzCitkZWJ1Zy8JCTxlbXB0eT4KK2Rldi8JCWRldmljZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAoZWcgZGV2L2Nkcm9tL2luZm8pCitmcy8JCXNwZWNpZmljIGZpbGVzeXN0ZW1zCisJCWZpbGVoYW5kbGUsIGlub2RlLCBkZW50cnkgYW5kIHF1b3RhIHR1bmluZworCQliaW5mbXRfbWlzYyA8RG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQ+CitrZXJuZWwvCQlnbG9iYWwga2VybmVsIGluZm8gLyB0dW5pbmcKKwkJbWlzY2VsbGFuZW91cyBzdHVmZgorbmV0LwkJbmV0d29ya2luZyBzdHVmZiwgZm9yIGRvY3VtZW50YXRpb24gbG9vayBpbjoKKwkJPERvY3VtZW50YXRpb24vbmV0d29ya2luZy8+Citwcm9jLwkJPGVtcHR5Pgorc3VucnBjLwkJU1VOIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCAoTkZTKQordm0vCQltZW1vcnkgbWFuYWdlbWVudCB0dW5pbmcKKwkJYnVmZmVyIGFuZCBjYWNoZSBtYW5hZ2VtZW50CisKK1RoZXNlIGFyZSB0aGUgc3ViZGlycyBJIGhhdmUgb24gbXkgc3lzdGVtLiBUaGVyZSBtaWdodCBiZSBtb3JlCitvciBvdGhlciBzdWJkaXJzIGluIGFub3RoZXIgc2V0dXAuIElmIHlvdSBzZWUgYW5vdGhlciBkaXIsIEknZAorcmVhbGx5IGxpa2UgdG8gaGVhciBhYm91dCBpdCA6LSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2FiaS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9hYmkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjRlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9hYmkudHh0CkBAIC0wLDAgKzEsNTQgQEAKK0RvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9hYmkvKiBrZXJuZWwgdmVyc2lvbiAyLjYuMC50ZXN0MgorCShjKSAyMDAzLCAgRmFiaWFuIEZyZWRlcmljayA8ZmZyZWRlcmlja0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK0ZvciBnZW5lcmFsIGluZm8gOiBSRUFETUUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcGF0aCBpcyBiaW5hcnkgZW11bGF0aW9uIHJlbGV2YW50IGFrYSBwZXJzb25hbGl0eSB0eXBlcyBha2EgYWJpLgorV2hlbiBhIHByb2Nlc3MgaXMgZXhlY3V0ZWQsIGl0J3MgbGlua2VkIHRvIGFuIGV4ZWNfZG9tYWluIHdob3NlCitwZXJzb25hbGl0eSBpcyBkZWZpbmVkIHVzaW5nIHZhbHVlcyBhdmFpbGFibGUgZnJvbSAvcHJvYy9zeXMvYWJpLgorWW91IGNhbiBmaW5kIGZ1cnRoZXIgZGV0YWlscyBhYm91dCBhYmkgaW4gaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oLgorCitIZXJlIGFyZSB0aGUgZmlsZXMgZmVhdHVyaW5nIGluIDIuNiBrZXJuZWwgOgorCistIGRlZmhhbmRsZXJfY29mZgorLSBkZWZoYW5kbGVyX2VsZgorLSBkZWZoYW5kbGVyX2xjYWxsNworLSBkZWZoYW5kbGVyX2xpYmNzbworLSBmYWtlX3V0c25hbWUKKy0gdHJhY2UKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RlZmhhbmRsZXJfY29mZjoKK2RlZmluZWQgdmFsdWUgOgorUEVSX1NDT1NWUjMKKzB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8IFdIT0xFX1NFQ09ORFMgfCBTSE9SVF9JTk9ERQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGVmaGFuZGxlcl9lbGY6CitkZWZpbmVkIHZhbHVlIDoKK1BFUl9MSU5VWAorMAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGVmaGFuZGxlcl9sY2FsbDc6CitkZWZpbmVkIHZhbHVlIDoKK1BFUl9TVlI0CisweDAwMDEgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RlZmhhbmRsZXJfbGlic2NvOgorZGVmaW5lZCB2YWx1ZToKK1BFUl9TVlI0CisweDAwMDEgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2Zha2VfdXRzbmFtZToKK1VudXNlZAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHJhY2U6CitVbnVzZWQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjYyYzYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0CkBAIC0wLDAgKzEsMTUwIEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvZnMvKglrZXJuZWwgdmVyc2lvbiAyLjIuMTAKKwkoYykgMTk5OCwgMTk5OSwgIFJpayB2YW4gUmllbCA8cmllbEBubC5saW51eC5vcmc+CisKK0ZvciBnZW5lcmFsIGluZm8gYW5kIGxlZ2FsIGJsdXJiLCBwbGVhc2UgbG9vayBpbiBSRUFETUUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBjb250YWlucyBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3lzY3RsIGZpbGVzIGluCisvcHJvYy9zeXMvZnMvIGFuZCBpcyB2YWxpZCBmb3IgTGludXgga2VybmVsIHZlcnNpb24gMi4yLgorCitUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSBhbmQgbW9uaXRvcgorbWlzY2VsbGFuZW91cyBhbmQgZ2VuZXJhbCB0aGluZ3MgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUgTGludXgKK2tlcm5lbC4gU2luY2Ugc29tZSBvZiB0aGUgZmlsZXMgX2Nhbl8gYmUgdXNlZCB0byBzY3JldyB1cCB5b3VyCitzeXN0ZW0sIGl0IGlzIGFkdmlzYWJsZSB0byByZWFkIGJvdGggZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlCitiZWZvcmUgYWN0dWFsbHkgbWFraW5nIGFkanVzdG1lbnRzLgorCitDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvZnM6CistIGRlbnRyeS1zdGF0ZQorLSBkcXVvdC1tYXgKKy0gZHF1b3QtbnIKKy0gZmlsZS1tYXgKKy0gZmlsZS1ucgorLSBpbm9kZS1tYXgKKy0gaW5vZGUtbnIKKy0gaW5vZGUtc3RhdGUKKy0gb3ZlcmZsb3d1aWQKKy0gb3ZlcmZsb3dnaWQKKy0gc3VwZXItbWF4CistIHN1cGVyLW5yCisKK0RvY3VtZW50YXRpb24gZm9yIHRoZSBmaWxlcyBpbiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgaXMKK2luIERvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZW50cnktc3RhdGU6CisKK0Zyb20gbGludXgvZnMvZGVudHJ5LmM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RydWN0IHsKKyAgICAgICAgaW50IG5yX2RlbnRyeTsKKyAgICAgICAgaW50IG5yX3VudXNlZDsKKyAgICAgICAgaW50IGFnZV9saW1pdDsgICAgICAgICAvKiBhZ2UgaW4gc2Vjb25kcyAqLworICAgICAgICBpbnQgd2FudF9wYWdlczsgICAgICAgIC8qIHBhZ2VzIHJlcXVlc3RlZCBieSBzeXN0ZW0gKi8KKyAgICAgICAgaW50IGR1bW15WzJdOworfSBkZW50cnlfc3RhdCA9IHswLCAwLCA0NSwgMCx9OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK0RlbnRyaWVzIGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkLCBhbmQKK25yX2RlbnRyeSBzZWVtcyB0byBiZSAwIGFsbCB0aGUgdGltZS4gSGVuY2UgaXQncyBzYWZlIHRvCithc3N1bWUgdGhhdCBvbmx5IG5yX3VudXNlZCwgYWdlX2xpbWl0IGFuZCB3YW50X3BhZ2VzIGFyZQordXNlZC4gTnJfdW51c2VkIHNlZW1zIHRvIGJlIGV4YWN0bHkgd2hhdCBpdHMgbmFtZSBzYXlzLgorQWdlX2xpbWl0IGlzIHRoZSBhZ2UgaW4gc2Vjb25kcyBhZnRlciB3aGljaCBkY2FjaGUgZW50cmllcworY2FuIGJlIHJlY2xhaW1lZCB3aGVuIG1lbW9yeSBpcyBzaG9ydCBhbmQgd2FudF9wYWdlcyBpcworbm9uemVybyB3aGVuIHNocmlua19kY2FjaGVfcGFnZXMoKSBoYXMgYmVlbiBjYWxsZWQgYW5kIHRoZQorZGNhY2hlIGlzbid0IHBydW5lZCB5ZXQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RxdW90LW1heCAmIGRxdW90LW5yOgorCitUaGUgZmlsZSBkcXVvdC1tYXggc2hvd3MgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCBkaXNrCitxdW90YSBlbnRyaWVzLgorCitUaGUgZmlsZSBkcXVvdC1uciBzaG93cyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBkaXNrIHF1b3RhCitlbnRyaWVzIGFuZCB0aGUgbnVtYmVyIG9mIGZyZWUgZGlzayBxdW90YSBlbnRyaWVzLgorCitJZiB0aGUgbnVtYmVyIG9mIGZyZWUgY2FjaGVkIGRpc2sgcXVvdGFzIGlzIHZlcnkgbG93IGFuZAoreW91IGhhdmUgc29tZSBhd2Vzb21lIG51bWJlciBvZiBzaW11bHRhbmVvdXMgc3lzdGVtIHVzZXJzLAoreW91IG1pZ2h0IHdhbnQgdG8gcmFpc2UgdGhlIGxpbWl0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitmaWxlLW1heCAmIGZpbGUtbnI6CisKK1RoZSBrZXJuZWwgYWxsb2NhdGVzIGZpbGUgaGFuZGxlcyBkeW5hbWljYWxseSwgYnV0IGFzIHlldCBpdAorZG9lc24ndCBmcmVlIHRoZW0gYWdhaW4uCisKK1RoZSB2YWx1ZSBpbiBmaWxlLW1heCBkZW5vdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlLQoraGFuZGxlcyB0aGF0IHRoZSBMaW51eCBrZXJuZWwgd2lsbCBhbGxvY2F0ZS4gV2hlbiB5b3UgZ2V0IGxvdHMKK29mIGVycm9yIG1lc3NhZ2VzIGFib3V0IHJ1bm5pbmcgb3V0IG9mIGZpbGUgaGFuZGxlcywgeW91IG1pZ2h0Cit3YW50IHRvIGluY3JlYXNlIHRoaXMgbGltaXQuCisKK1RoZSB0aHJlZSB2YWx1ZXMgaW4gZmlsZS1uciBkZW5vdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQKK2ZpbGUgaGFuZGxlcywgdGhlIG51bWJlciBvZiB1bnVzZWQgZmlsZSBoYW5kbGVzIGFuZCB0aGUgbWF4aW11bQorbnVtYmVyIG9mIGZpbGUgaGFuZGxlcy4gV2hlbiB0aGUgYWxsb2NhdGVkIGZpbGUgaGFuZGxlcyBjb21lCitjbG9zZSB0byB0aGUgbWF4aW11bSwgYnV0IHRoZSBudW1iZXIgb2YgdW51c2VkIGZpbGUgaGFuZGxlcyBpcworc2lnbmlmaWNhbnRseSBncmVhdGVyIHRoYW4gMCwgeW91J3ZlIGVuY291bnRlcmVkIGEgcGVhayBpbiB5b3VyIAordXNhZ2Ugb2YgZmlsZSBoYW5kbGVzIGFuZCB5b3UgZG9uJ3QgbmVlZCB0byBpbmNyZWFzZSB0aGUgbWF4aW11bS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworaW5vZGUtbWF4LCBpbm9kZS1uciAmIGlub2RlLXN0YXRlOgorCitBcyB3aXRoIGZpbGUgaGFuZGxlcywgdGhlIGtlcm5lbCBhbGxvY2F0ZXMgdGhlIGlub2RlIHN0cnVjdHVyZXMKK2R5bmFtaWNhbGx5LCBidXQgY2FuJ3QgZnJlZSB0aGVtIHlldC4KKworVGhlIHZhbHVlIGluIGlub2RlLW1heCBkZW5vdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbm9kZQoraGFuZGxlcnMuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIDMtNCB0aW1lcyBsYXJnZXIgdGhhbiB0aGUgdmFsdWUKK2luIGZpbGUtbWF4LCBzaW5jZSBzdGRpbiwgc3Rkb3V0IGFuZCBuZXR3b3JrIHNvY2tldHMgYWxzbworbmVlZCBhbiBpbm9kZSBzdHJ1Y3QgdG8gaGFuZGxlIHRoZW0uIFdoZW4geW91IHJlZ3VsYXJseSBydW4KK291dCBvZiBpbm9kZXMsIHlvdSBuZWVkIHRvIGluY3JlYXNlIHRoaXMgdmFsdWUuCisKK1RoZSBmaWxlIGlub2RlLW5yIGNvbnRhaW5zIHRoZSBmaXJzdCB0d28gaXRlbXMgZnJvbQoraW5vZGUtc3RhdGUsIHNvIHdlJ2xsIHNraXAgdG8gdGhhdCBmaWxlLi4uCisKK0lub2RlLXN0YXRlIGNvbnRhaW5zIHRocmVlIGFjdHVhbCBudW1iZXJzIGFuZCBmb3VyIGR1bW1pZXMuCitUaGUgYWN0dWFsIG51bWJlcnMgYXJlLCBpbiBvcmRlciBvZiBhcHBlYXJhbmNlLCBucl9pbm9kZXMsCitucl9mcmVlX2lub2RlcyBhbmQgcHJlc2hyaW5rLgorCitOcl9pbm9kZXMgc3RhbmRzIGZvciB0aGUgbnVtYmVyIG9mIGlub2RlcyB0aGUgc3lzdGVtIGhhcworYWxsb2NhdGVkLCB0aGlzIGNhbiBiZSBzbGlnaHRseSBtb3JlIHRoYW4gaW5vZGUtbWF4IGJlY2F1c2UKK0xpbnV4IGFsbG9jYXRlcyB0aGVtIG9uZSBwYWdlZnVsIGF0IGEgdGltZS4KKworTnJfZnJlZV9pbm9kZXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGZyZWUgaW5vZGVzICg/KSBhbmQKK3ByZXNocmluayBpcyBub256ZXJvIHdoZW4gdGhlIG5yX2lub2RlcyA+IGlub2RlLW1heCBhbmQgdGhlCitzeXN0ZW0gbmVlZHMgdG8gcHJ1bmUgdGhlIGlub2RlIGxpc3QgaW5zdGVhZCBvZiBhbGxvY2F0aW5nCittb3JlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitvdmVyZmxvd2dpZCAmIG92ZXJmbG93dWlkOgorCitTb21lIGZpbGVzeXN0ZW1zIG9ubHkgc3VwcG9ydCAxNi1iaXQgVUlEcyBhbmQgR0lEcywgYWx0aG91Z2ggaW4gTGludXgKK1VJRHMgYW5kIEdJRHMgYXJlIDMyIGJpdHMuIFdoZW4gb25lIG9mIHRoZXNlIGZpbGVzeXN0ZW1zIGlzIG1vdW50ZWQKK3dpdGggd3JpdGVzIGVuYWJsZWQsIGFueSBVSUQgb3IgR0lEIHRoYXQgd291bGQgZXhjZWVkIDY1NTM1IGlzIHRyYW5zbGF0ZWQKK3RvIGEgZml4ZWQgdmFsdWUgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gZGlzay4KKworVGhlc2Ugc3lzY3RscyBhbGxvdyB5b3UgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgZml4ZWQgVUlEIGFuZCBHSUQuCitUaGUgZGVmYXVsdCBpcyA2NTUzNC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3VwZXItbWF4ICYgc3VwZXItbnI6CisKK1RoZXNlIG51bWJlcnMgY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3VwZXJibG9ja3MsIGFuZAordGh1cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbW91bnRlZCBmaWxlc3lzdGVtcyB0aGUga2VybmVsCitjYW4gaGF2ZS4gWW91IG9ubHkgbmVlZCB0byBpbmNyZWFzZSBzdXBlci1tYXggaWYgeW91IG5lZWQgdG8KK21vdW50IG1vcmUgZmlsZXN5c3RlbXMgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSBpbiBzdXBlci1tYXgKK2FsbG93cyB5b3UgdG8uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Fpby1uciAmIGFpby1tYXgtbnI6CisKK2Fpby1uciBzaG93cyB0aGUgY3VycmVudCBzeXN0ZW0td2lkZSBudW1iZXIgb2YgYXN5bmNocm9ub3VzIGlvCityZXF1ZXN0cy4gIGFpby1tYXgtbnIgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIG1heGltdW0gdmFsdWUKK2Fpby1uciBjYW4gZ3JvdyB0by4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTU5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CkBAIC0wLDAgKzEsMzE0IEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMva2VybmVsLyoJa2VybmVsIHZlcnNpb24gMi4yLjEwCisJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCitGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgY29udGFpbnMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN5c2N0bCBmaWxlcyBpbgorL3Byb2Mvc3lzL2tlcm5lbC8gYW5kIGlzIHZhbGlkIGZvciBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjIuCisKK1RoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byB0dW5lIGFuZCBtb25pdG9yCittaXNjZWxsYW5lb3VzIGFuZCBnZW5lcmFsIHRoaW5ncyBpbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBMaW51eAora2VybmVsLiBTaW5jZSBzb21lIG9mIHRoZSBmaWxlcyBfY2FuXyBiZSB1c2VkIHRvIHNjcmV3IHVwIHlvdXIKK3N5c3RlbSwgaXQgaXMgYWR2aXNhYmxlIHRvIHJlYWQgYm90aCBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UKK2JlZm9yZSBhY3R1YWxseSBtYWtpbmcgYWRqdXN0bWVudHMuCisKK0N1cnJlbnRseSwgdGhlc2UgZmlsZXMgbWlnaHQgKGRlcGVuZGluZyBvbiB5b3VyIGNvbmZpZ3VyYXRpb24pCitzaG93IHVwIGluIC9wcm9jL3N5cy9rZXJuZWw6CistIGFjY3QKKy0gY29yZV9wYXR0ZXJuCistIGNvcmVfdXNlc19waWQKKy0gY3RybC1hbHQtZGVsCistIGRlbnRyeS1zdGF0ZQorLSBkb21haW5uYW1lCistIGhvc3RuYW1lCistIGhvdHBsdWcKKy0gamF2YS1hcHBsZXR2aWV3ZXIgICAgICAgICAgIFsgYmluZm10X2phdmEsIG9ic29sZXRlIF0KKy0gamF2YS1pbnRlcnByZXRlciAgICAgICAgICAgIFsgYmluZm10X2phdmEsIG9ic29sZXRlIF0KKy0gbDJjciAgICAgICAgICAgICAgICAgICAgICAgIFsgUFBDIG9ubHkgXQorLSBtb2Rwcm9iZSAgICAgICAgICAgICAgICAgICAgPT0+IERvY3VtZW50YXRpb24va21vZC50eHQKKy0gbXNnbWF4CistIG1zZ21uYgorLSBtc2dtbmkKKy0gb3NyZWxlYXNlCistIG9zdHlwZQorLSBvdmVyZmxvd2dpZAorLSBvdmVyZmxvd3VpZAorLSBwYW5pYworLSBwaWRfbWF4CistIHBvd2Vyc2F2ZS1uYXAgICAgICAgICAgICAgICBbIFBQQyBvbmx5IF0KKy0gcHJpbnRrCistIHJlYWwtcm9vdC1kZXYgICAgICAgICAgICAgICA9PT4gRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0CistIHJlYm9vdC1jbWQgICAgICAgICAgICAgICAgICBbIFNQQVJDIG9ubHkgXQorLSBydHNpZy1tYXgKKy0gcnRzaWctbnIKKy0gc2VtCistIHNnLWJpZy1idWZmICAgICAgICAgICAgICAgICBbIGdlbmVyaWMgU0NTSSBkZXZpY2UgKHNnKSBdCistIHNobWFsbAorLSBzaG1tYXggICAgICAgICAgICAgICAgICAgICAgWyBzeXN2IGlwYyBdCistIHNobW1uaQorLSBzdG9wLWEgICAgICAgICAgICAgICAgICAgICAgWyBTUEFSQyBvbmx5IF0KKy0gc3lzcnEgICAgICAgICAgICAgICAgICAgICAgID09PiBEb2N1bWVudGF0aW9uL3N5c3JxLnR4dAorLSB0YWludGVkCistIHRocmVhZHMtbWF4CistIHZlcnNpb24KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYWNjdDoKKworaGlnaHdhdGVyIGxvd3dhdGVyIGZyZXF1ZW5jeQorCitJZiBCU0Qtc3R5bGUgcHJvY2VzcyBhY2NvdW50aW5nIGlzIGVuYWJsZWQgdGhlc2UgdmFsdWVzIGNvbnRyb2wKK2l0cyBiZWhhdmlvdXIuIElmIGZyZWUgc3BhY2Ugb24gZmlsZXN5c3RlbSB3aGVyZSB0aGUgbG9nIGxpdmVzCitnb2VzIGJlbG93IDxsb3d3YXRlcj4lIGFjY291bnRpbmcgc3VzcGVuZHMuIElmIGZyZWUgc3BhY2UgZ2V0cworYWJvdmUgPGhpZ2h3YXRlcj4lIGFjY291bnRpbmcgcmVzdW1lcy4gPEZyZXF1ZW5jeT4gZGV0ZXJtaW5lcworaG93IG9mdGVuIGRvIHdlIGNoZWNrIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSAodmFsdWUgaXMgaW4KK3NlY29uZHMpLiBEZWZhdWx0OgorNCAyIDMwCitUaGF0IGlzLCBzdXNwZW5kIGFjY291bnRpbmcgaWYgdGhlcmUgbGVmdCA8PSAyJSBmcmVlOyByZXN1bWUgaXQKK2lmIHdlIGdvdCA+PTQlOyBjb25zaWRlciBpbmZvcm1hdGlvbiBhYm91dCBhbW91bnQgb2YgZnJlZSBzcGFjZQordmFsaWQgZm9yIDMwIHNlY29uZHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NvcmVfcGF0dGVybjoKKworY29yZV9wYXR0ZXJuIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGNvcmUgZHVtcGZpbGUgcGF0dGVybiBuYW1lLgorLiBtYXggbGVuZ3RoIDY0IGNoYXJhY3RlcnM7IGRlZmF1bHQgdmFsdWUgaXMgImNvcmUiCisuIGNvcmVfcGF0dGVybiBpcyB1c2VkIGFzIGEgcGF0dGVybiB0ZW1wbGF0ZSBmb3IgdGhlIG91dHB1dCBmaWxlbmFtZTsKKyAgY2VydGFpbiBzdHJpbmcgcGF0dGVybnMgKGJlZ2lubmluZyB3aXRoICclJykgYXJlIHN1YnN0aXR1dGVkIHdpdGgKKyAgdGhlaXIgYWN0dWFsIHZhbHVlcy4KKy4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNvcmVfdXNlc19waWQ6CisJSWYgY29yZV9wYXR0ZXJuIGRvZXMgbm90IGluY2x1ZGUgIiVwIiAoZGVmYXVsdCBkb2VzIG5vdCkKKwlhbmQgY29yZV91c2VzX3BpZCBpcyBzZXQsIHRoZW4gLlBJRCB3aWxsIGJlIGFwcGVuZGVkIHRvCisJdGhlIGZpbGVuYW1lLgorLiBjb3JlbmFtZSBmb3JtYXQgc3BlY2lmaWVyczoKKwklPE5VTD4JJyUnIGlzIGRyb3BwZWQKKwklJQlvdXRwdXQgb25lICclJworCSVwCXBpZAorCSV1CXVpZAorCSVnCWdpZAorCSVzCXNpZ25hbCBudW1iZXIKKwkldAlVTklYIHRpbWUgb2YgZHVtcAorCSVoCWhvc3RuYW1lCisJJWUJZXhlY3V0YWJsZSBmaWxlbmFtZQorCSU8T1RIRVI+IGJvdGggYXJlIGRyb3BwZWQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY29yZV91c2VzX3BpZDoKKworVGhlIGRlZmF1bHQgY29yZWR1bXAgZmlsZW5hbWUgaXMgImNvcmUiLiAgQnkgc2V0dGluZworY29yZV91c2VzX3BpZCB0byAxLCB0aGUgY29yZWR1bXAgZmlsZW5hbWUgYmVjb21lcyBjb3JlLlBJRC4KK0lmIGNvcmVfcGF0dGVybiBkb2VzIG5vdCBpbmNsdWRlICIlcCIgKGRlZmF1bHQgZG9lcyBub3QpCithbmQgY29yZV91c2VzX3BpZCBpcyBzZXQsIHRoZW4gLlBJRCB3aWxsIGJlIGFwcGVuZGVkIHRvCit0aGUgZmlsZW5hbWUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2N0cmwtYWx0LWRlbDoKKworV2hlbiB0aGUgdmFsdWUgaW4gdGhpcyBmaWxlIGlzIDAsIGN0cmwtYWx0LWRlbCBpcyB0cmFwcGVkIGFuZAorc2VudCB0byB0aGUgaW5pdCgxKSBwcm9ncmFtIHRvIGhhbmRsZSBhIGdyYWNlZnVsIHJlc3RhcnQuCitXaGVuLCBob3dldmVyLCB0aGUgdmFsdWUgaXMgPiAwLCBMaW51eCdzIHJlYWN0aW9uIHRvIGEgVnVsY2FuCitOZXJ2ZSBQaW5jaCAodG0pIHdpbGwgYmUgYW4gaW1tZWRpYXRlIHJlYm9vdCwgd2l0aG91dCBldmVuCitzeW5jaW5nIGl0cyBkaXJ0eSBidWZmZXJzLgorCitOb3RlOiB3aGVuIGEgcHJvZ3JhbSAobGlrZSBkb3NlbXUpIGhhcyB0aGUga2V5Ym9hcmQgaW4gJ3JhdycKK21vZGUsIHRoZSBjdHJsLWFsdC1kZWwgaXMgaW50ZXJjZXB0ZWQgYnkgdGhlIHByb2dyYW0gYmVmb3JlIGl0CitldmVyIHJlYWNoZXMgdGhlIGtlcm5lbCB0dHkgbGF5ZXIsIGFuZCBpdCdzIHVwIHRvIHRoZSBwcm9ncmFtCit0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkb21haW5uYW1lICYgaG9zdG5hbWU6CisKK1RoZXNlIGZpbGVzIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgTklTL1lQIGRvbWFpbm5hbWUgYW5kIHRoZQoraG9zdG5hbWUgb2YgeW91ciBib3ggaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIGNvbW1hbmRzCitkb21haW5uYW1lIGFuZCBob3N0bmFtZSwgaS5lLjoKKyMgZWNobyAiZGFya3N0YXIiID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3N0bmFtZQorIyBlY2hvICJteWRvbWFpbiIgPiAvcHJvYy9zeXMva2VybmVsL2RvbWFpbm5hbWUKK2hhcyB0aGUgc2FtZSBlZmZlY3QgYXMKKyMgaG9zdG5hbWUgImRhcmtzdGFyIgorIyBkb21haW5uYW1lICJteWRvbWFpbiIKKworTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgY2xhc3NpYyBkYXJrc3Rhci5mcm9wLm9yZyBoYXMgdGhlCitob3N0bmFtZSAiZGFya3N0YXIiIGFuZCBETlMgKEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlcikKK2RvbWFpbm5hbWUgImZyb3Aub3JnIiwgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIE5JUyAoTmV0d29yaworSW5mb3JtYXRpb24gU2VydmljZSkgb3IgWVAgKFllbGxvdyBQYWdlcykgZG9tYWlubmFtZS4gVGhlc2UgdHdvCitkb21haW4gbmFtZXMgYXJlIGluIGdlbmVyYWwgZGlmZmVyZW50LiBGb3IgYSBkZXRhaWxlZCBkaXNjdXNzaW9uCitzZWUgdGhlIGhvc3RuYW1lKDEpIG1hbiBwYWdlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitob3RwbHVnOgorCitQYXRoIGZvciB0aGUgaG90cGx1ZyBwb2xpY3kgYWdlbnQuCitEZWZhdWx0IHZhbHVlIGlzICIvc2Jpbi9ob3RwbHVnIi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbDJjcjogKFBQQyBvbmx5KQorCitUaGlzIGZsYWcgY29udHJvbHMgdGhlIEwyIGNhY2hlIG9mIEczIHByb2Nlc3NvciBib2FyZHMuIElmCiswLCB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuIEVuYWJsZWQgaWYgbm9uemVyby4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworb3NyZWxlYXNlLCBvc3R5cGUgJiB2ZXJzaW9uOgorCisjIGNhdCBvc3JlbGVhc2UKKzIuMS44OAorIyBjYXQgb3N0eXBlCitMaW51eAorIyBjYXQgdmVyc2lvbgorIzUgV2VkIEZlYiAyNSAyMTo0OToyNCBNRVQgMTk5OAorCitUaGUgZmlsZXMgb3NyZWxlYXNlIGFuZCBvc3R5cGUgc2hvdWxkIGJlIGNsZWFyIGVub3VnaC4gVmVyc2lvbgorbmVlZHMgYSBsaXR0bGUgbW9yZSBjbGFyaWZpY2F0aW9uIGhvd2V2ZXIuIFRoZSAnIzUnIG1lYW5zIHRoYXQKK3RoaXMgaXMgdGhlIGZpZnRoIGtlcm5lbCBidWlsdCBmcm9tIHRoaXMgc291cmNlIGJhc2UgYW5kIHRoZQorZGF0ZSBiZWhpbmQgaXQgaW5kaWNhdGVzIHRoZSB0aW1lIHRoZSBrZXJuZWwgd2FzIGJ1aWx0LgorVGhlIG9ubHkgd2F5IHRvIHR1bmUgdGhlc2UgdmFsdWVzIGlzIHRvIHJlYnVpbGQgdGhlIGtlcm5lbCA6LSkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworb3ZlcmZsb3dnaWQgJiBvdmVyZmxvd3VpZDoKKworaWYgeW91ciBhcmNoaXRlY3R1cmUgZGlkIG5vdCBhbHdheXMgc3VwcG9ydCAzMi1iaXQgVUlEcyAoaS5lLiBhcm0sIGkzODYsCittNjhrLCBzaCwgYW5kIHNwYXJjMzIpLCBhIGZpeGVkIFVJRCBhbmQgR0lEIHdpbGwgYmUgcmV0dXJuZWQgdG8KK2FwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgb2xkIDE2LWJpdCBVSUQvR0lEIHN5c3RlbSBjYWxscywgaWYgdGhlIGFjdHVhbAorVUlEIG9yIEdJRCB3b3VsZCBleGNlZWQgNjU1MzUuCisKK1RoZXNlIHN5c2N0bHMgYWxsb3cgeW91IHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhlIGZpeGVkIFVJRCBhbmQgR0lELgorVGhlIGRlZmF1bHQgaXMgNjU1MzQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BhbmljOgorCitUaGUgdmFsdWUgaW4gdGhpcyBmaWxlIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZQora2VybmVsIHdhaXRzIGJlZm9yZSByZWJvb3Rpbmcgb24gYSBwYW5pYy4gV2hlbiB5b3UgdXNlIHRoZQorc29mdHdhcmUgd2F0Y2hkb2csIHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nIGlzIDYwLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwYW5pY19vbl9vb3BzOgorCitDb250cm9scyB0aGUga2VybmVsJ3MgYmVoYXZpb3VyIHdoZW4gYW4gb29wcyBvciBCVUcgaXMgZW5jb3VudGVyZWQuCisKKzA6IHRyeSB0byBjb250aW51ZSBvcGVyYXRpb24KKworMTogZGVsYXkgYSBmZXcgc2Vjb25kcyAodG8gZ2l2ZSBrbG9nZCB0aW1lIHRvIHJlY29yZCB0aGUgb29wcyBvdXRwdXQpIGFuZAorICAgdGhlbiBwYW5pYy4gIElmIHRoZSBgcGFuaWMnIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlIG1hY2hpbmUgd2lsbAorICAgYmUgcmVib290ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BpZF9tYXg6CisKK1BJRCBhbGxvY2F0aW9uIHdyYXAgdmFsdWUuICBXaGVuIHRoZSBrZW5yZWwncyBuZXh0IFBJRCB2YWx1ZQorcmVhY2hlcyB0aGlzIHZhbHVlLCBpdCB3cmFwcyBiYWNrIHRvIGEgbWluaW11bSBQSUQgdmFsdWUuCitQSURzIG9mIHZhbHVlIHBpZF9tYXggb3IgbGFyZ2VyIGFyZSBub3QgYWxsb2NhdGVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwb3dlcnNhdmUtbmFwOiAoUFBDIG9ubHkpCisKK0lmIHNldCwgTGludXgtUFBDIHdpbGwgdXNlIHRoZSAnbmFwJyBtb2RlIG9mIHBvd2Vyc2F2aW5nLAorb3RoZXJ3aXNlIHRoZSAnZG96ZScgbW9kZSB3aWxsIGJlIHVzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3ByaW50azoKKworVGhlIGZvdXIgdmFsdWVzIGluIHByaW50ayBkZW5vdGU6IGNvbnNvbGVfbG9nbGV2ZWwsCitkZWZhdWx0X21lc3NhZ2VfbG9nbGV2ZWwsIG1pbmltdW1fY29uc29sZV9sb2dsZXZlbCBhbmQKK2RlZmF1bHRfY29uc29sZV9sb2dsZXZlbCByZXNwZWN0aXZlbHkuCisKK1RoZXNlIHZhbHVlcyBpbmZsdWVuY2UgcHJpbnRrKCkgYmVoYXZpb3Igd2hlbiBwcmludGluZyBvcgorbG9nZ2luZyBlcnJvciBtZXNzYWdlcy4gU2VlICdtYW4gMiBzeXNsb2cnIGZvciBtb3JlIGluZm8gb24KK3RoZSBkaWZmZXJlbnQgbG9nbGV2ZWxzLgorCistIGNvbnNvbGVfbG9nbGV2ZWw6IG1lc3NhZ2VzIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkgdGhhbgorICB0aGlzIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZQorLSBkZWZhdWx0X21lc3NhZ2VfbGV2ZWw6IG1lc3NhZ2VzIHdpdGhvdXQgYW4gZXhwbGljaXQgcHJpb3JpdHkKKyAgd2lsbCBiZSBwcmludGVkIHdpdGggdGhpcyBwcmlvcml0eQorLSBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWw6IG1pbmltdW0gKGhpZ2hlc3QpIHZhbHVlIHRvIHdoaWNoCisgIGNvbnNvbGVfbG9nbGV2ZWwgY2FuIGJlIHNldAorLSBkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWw6IGRlZmF1bHQgdmFsdWUgZm9yIGNvbnNvbGVfbG9nbGV2ZWwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcHJpbnRrX3JhdGVsaW1pdDoKKworU29tZSB3YXJuaW5nIG1lc3NhZ2VzIGFyZSByYXRlIGxpbWl0ZWQuIHByaW50a19yYXRlbGltaXQgc3BlY2lmaWVzCit0aGUgbWluaW11bSBsZW5ndGggb2YgdGltZSBiZXR3ZWVuIHRoZXNlIG1lc3NhZ2VzIChpbiBqaWZmaWVzKSwgYnkKK2RlZmF1bHQgd2UgYWxsb3cgb25lIGV2ZXJ5IDUgc2Vjb25kcy4KKworQSB2YWx1ZSBvZiAwIHdpbGwgZGlzYWJsZSByYXRlIGxpbWl0aW5nLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwcmludGtfcmF0ZWxpbWl0X2J1cnN0OgorCitXaGlsZSBsb25nIHRlcm0gd2UgZW5mb3JjZSBvbmUgbWVzc2FnZSBwZXIgcHJpbnRrX3JhdGVsaW1pdAorc2Vjb25kcywgd2UgZG8gYWxsb3cgYSBidXJzdCBvZiBtZXNzYWdlcyB0byBwYXNzIHRocm91Z2guCitwcmludGtfcmF0ZWxpbWl0X2J1cnN0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHdlIGNhbgorc2VuZCBiZWZvcmUgcmF0ZWxpbWl0aW5nIGtpY2tzIGluLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCityZWJvb3QtY21kOiAoU3BhcmMgb25seSkKKworPz8/IFRoaXMgc2VlbXMgdG8gYmUgYSB3YXkgdG8gZ2l2ZSBhbiBhcmd1bWVudCB0byB0aGUgU3BhcmMKK1JPTS9GbGFzaCBib290IGxvYWRlci4gTWF5YmUgdG8gdGVsbCBpdCB3aGF0IHRvIGRvIGFmdGVyCityZWJvb3RpbmcuID8/PworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitydHNpZy1tYXggJiBydHNpZy1ucjoKKworVGhlIGZpbGUgcnRzaWctbWF4IGNhbiBiZSB1c2VkIHRvIHR1bmUgdGhlIG1heGltdW0gbnVtYmVyCitvZiBQT1NJWCByZWFsdGltZSAocXVldWVkKSBzaWduYWxzIHRoYXQgY2FuIGJlIG91dHN0YW5kaW5nCitpbiB0aGUgc3lzdGVtLgorCitydHNpZy1uciBzaG93cyB0aGUgbnVtYmVyIG9mIFJUIHNpZ25hbHMgY3VycmVudGx5IHF1ZXVlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2ctYmlnLWJ1ZmY6CisKK1RoaXMgZmlsZSBzaG93cyB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJpYyBTQ1NJIChzZykgYnVmZmVyLgorWW91IGNhbid0IHR1bmUgaXQganVzdCB5ZXQsIGJ1dCB5b3UgY291bGQgY2hhbmdlIGl0IG9uCitjb21waWxlIHRpbWUgYnkgZWRpdGluZyBpbmNsdWRlL3Njc2kvc2cuaCBhbmQgY2hhbmdpbmcKK3RoZSB2YWx1ZSBvZiBTR19CSUdfQlVGRi4KKworVGhlcmUgc2hvdWxkbid0IGJlIGFueSByZWFzb24gdG8gY2hhbmdlIHRoaXMgdmFsdWUuIElmCit5b3UgY2FuIGNvbWUgdXAgd2l0aCBvbmUsIHlvdSBwcm9iYWJseSBrbm93IHdoYXQgeW91CithcmUgZG9pbmcgYW55d2F5IDopCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3NobW1heDogCisKK1RoaXMgdmFsdWUgY2FuIGJlIHVzZWQgdG8gcXVlcnkgYW5kIHNldCB0aGUgcnVuIHRpbWUgbGltaXQKK29uIHRoZSBtYXhpbXVtIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBzaXplIHRoYXQgY2FuIGJlIGNyZWF0ZWQuCitTaGFyZWQgbWVtb3J5IHNlZ21lbnRzIHVwIHRvIDFHYiBhcmUgbm93IHN1cHBvcnRlZCBpbiB0aGUgCitrZXJuZWwuICBUaGlzIHZhbHVlIGRlZmF1bHRzIHRvIFNITU1BWC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordGFpbnRlZDogCisKK05vbi16ZXJvIGlmIHRoZSBrZXJuZWwgaGFzIGJlZW4gdGFpbnRlZC4gIE51bWVyaWMgdmFsdWVzLCB3aGljaAorY2FuIGJlIE9SZWQgdG9nZXRoZXI6CisKKyAgMSAtIEEgbW9kdWxlIHdpdGggYSBub24tR1BMIGxpY2Vuc2UgaGFzIGJlZW4gbG9hZGVkLCB0aGlzCisgICAgICBpbmNsdWRlcyBtb2R1bGVzIHdpdGggbm8gbGljZW5zZS4KKyAgICAgIFNldCBieSBtb2R1dGlscyA+PSAyLjQuOSBhbmQgbW9kdWxlLWluaXQtdG9vbHMuCisgIDIgLSBBIG1vZHVsZSB3YXMgZm9yY2UgbG9hZGVkIGJ5IGluc21vZCAtZi4KKyAgICAgIFNldCBieSBtb2R1dGlscyA+PSAyLjQuOSBhbmQgbW9kdWxlLWluaXQtdG9vbHMuCisgIDQgLSBVbnNhZmUgU01QIHByb2Nlc3NvcnM6IFNNUCB3aXRoIENQVXMgbm90IGRlc2lnbmVkIGZvciBTTVAuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3N1bnJwYy50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9zdW5ycGMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMWVjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9zdW5ycGMudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0RvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9zdW5ycGMvKglrZXJuZWwgdmVyc2lvbiAyLjIuMTAKKwkoYykgMTk5OCwgMTk5OSwgIFJpayB2YW4gUmllbCA8cmllbEBubC5saW51eC5vcmc+CisKK0ZvciBnZW5lcmFsIGluZm8gYW5kIGxlZ2FsIGJsdXJiLCBwbGVhc2UgbG9vayBpbiBSRUFETUUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN5c2N0bCBmaWxlcyBpbgorL3Byb2Mvc3lzL3N1bnJwYyBhbmQgaXMgdmFsaWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMi4KKworVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIChyZSlzZXQgdGhlIGRlYnVnCitmbGFncyBvZiB0aGUgU1VOIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCAoUlBDKSBzdWJzeXN0ZW0gaW4KK3RoZSBMaW51eCBrZXJuZWwuIFRoaXMgc3R1ZmYgaXMgdXNlZCBmb3IgTkZTLCBLTkZTRCBhbmQKK21heWJlIGEgZmV3IG90aGVyIHRoaW5ncyBhcyB3ZWxsLgorCitUaGUgZmlsZXMgaW4gdGhlcmUgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgZGVidWdnaW5nIGZsYWdzOgorcnBjX2RlYnVnLCBuZnNfZGVidWcsIG5mc2RfZGVidWcgYW5kIG5sbV9kZWJ1Zy4KKworVGhlc2UgZmxhZ3MgYXJlIGZvciBrZXJuZWwgaGFja2VycyBvbmx5LiBZb3Ugc2hvdWxkIHJlYWQgdGhlCitzb3VyY2UgY29kZSBpbiBuZXQvc3VucnBjLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjFhYWUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC0wLDAgKzEsMTA0IEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvdm0vKglrZXJuZWwgdmVyc2lvbiAyLjIuMTAKKwkoYykgMTk5OCwgMTk5OSwgIFJpayB2YW4gUmllbCA8cmllbEBubC5saW51eC5vcmc+CisKK0ZvciBnZW5lcmFsIGluZm8gYW5kIGxlZ2FsIGJsdXJiLCBwbGVhc2UgbG9vayBpbiBSRUFETUUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN5c2N0bCBmaWxlcyBpbgorL3Byb2Mvc3lzL3ZtIGFuZCBpcyB2YWxpZCBmb3IgTGludXgga2VybmVsIHZlcnNpb24gMi4yLgorCitUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uCitvZiB0aGUgdmlydHVhbCBtZW1vcnkgKFZNKSBzdWJzeXN0ZW0gb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQKK3RoZSB3cml0ZW91dCBvZiBkaXJ0eSBkYXRhIHRvIGRpc2suCisKK0RlZmF1bHQgdmFsdWVzIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBmb3IgbW9zdCBvZiB0aGVzZQorZmlsZXMgY2FuIGJlIGZvdW5kIGluIG1tL3N3YXAuYy4KKworQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOgorLSBvdmVyY29tbWl0X21lbW9yeQorLSBwYWdlLWNsdXN0ZXIKKy0gZGlydHlfcmF0aW8KKy0gZGlydHlfYmFja2dyb3VuZF9yYXRpbworLSBkaXJ0eV9leHBpcmVfY2VudGlzZWNzCistIGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MKKy0gbWF4X21hcF9jb3VudAorLSBtaW5fZnJlZV9rYnl0ZXMKKy0gbGFwdG9wX21vZGUKKy0gYmxvY2tfZHVtcAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkaXJ0eV9yYXRpbywgZGlydHlfYmFja2dyb3VuZF9yYXRpbywgZGlydHlfZXhwaXJlX2NlbnRpc2VjcywKK2RpcnR5X3dyaXRlYmFja19jZW50aXNlY3MsIHZmc19jYWNoZV9wcmVzc3VyZSwgbGFwdG9wX21vZGUsCitibG9ja19kdW1wLCBzd2FwX3Rva2VuX3RpbWVvdXQ6CisKK1NlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK292ZXJjb21taXRfbWVtb3J5OgorCitUaGlzIHZhbHVlIGNvbnRhaW5zIGEgZmxhZyB0aGF0IGVuYWJsZXMgbWVtb3J5IG92ZXJjb21taXRtZW50LgorCitXaGVuIHRoaXMgZmxhZyBpcyAwLCB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGVzdGltYXRlIHRoZSBhbW91bnQKK29mIGZyZWUgbWVtb3J5IGxlZnQgd2hlbiB1c2Vyc3BhY2UgcmVxdWVzdHMgbW9yZSBtZW1vcnkuCisKK1doZW4gdGhpcyBmbGFnIGlzIDEsIHRoZSBrZXJuZWwgcHJldGVuZHMgdGhlcmUgaXMgYWx3YXlzIGVub3VnaAorbWVtb3J5IHVudGlsIGl0IGFjdHVhbGx5IHJ1bnMgb3V0LgorCitXaGVuIHRoaXMgZmxhZyBpcyAyLCB0aGUga2VybmVsIHVzZXMgYSAibmV2ZXIgb3ZlcmNvbW1pdCIKK3BvbGljeSB0aGF0IGF0dGVtcHRzIHRvIHByZXZlbnQgYW55IG92ZXJjb21taXQgb2YgbWVtb3J5LiAgCisKK1RoaXMgZmVhdHVyZSBjYW4gYmUgdmVyeSB1c2VmdWwgYmVjYXVzZSB0aGVyZSBhcmUgYSBsb3Qgb2YKK3Byb2dyYW1zIHRoYXQgbWFsbG9jKCkgaHVnZSBhbW91bnRzIG9mIG1lbW9yeSAianVzdC1pbi1jYXNlIgorYW5kIGRvbid0IHVzZSBtdWNoIG9mIGl0LgorCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLgorCitTZWUgRG9jdW1lbnRhdGlvbi92bS9vdmVyY29tbWl0LWFjY291bnRpbmcgYW5kCitzZWN1cml0eS9jb21tb25jYXAuYzo6Y2FwX3ZtX2Vub3VnaF9tZW1vcnkoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworb3ZlcmNvbW1pdF9yYXRpbzoKKworV2hlbiBvdmVyY29tbWl0X21lbW9yeSBpcyBzZXQgdG8gMiwgdGhlIGNvbW1pdHRlZCBhZGRyZXNzCitzcGFjZSBpcyBub3QgcGVybWl0dGVkIHRvIGV4Y2VlZCBzd2FwIHBsdXMgdGhpcyBwZXJjZW50YWdlCitvZiBwaHlzaWNhbCBSQU0uICBTZWUgYWJvdmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BhZ2UtY2x1c3RlcjoKKworVGhlIExpbnV4IFZNIHN1YnN5c3RlbSBhdm9pZHMgZXhjZXNzaXZlIGRpc2sgc2Vla3MgYnkgcmVhZGluZworbXVsdGlwbGUgcGFnZXMgb24gYSBwYWdlIGZhdWx0LiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGl0IHJlYWRzCitpcyBkZXBlbmRlbnQgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgaW4geW91ciBtYWNoaW5lLgorCitUaGUgbnVtYmVyIG9mIHBhZ2VzIHRoZSBrZXJuZWwgcmVhZHMgaW4gYXQgb25jZSBpcyBlcXVhbCB0bworMiBeIHBhZ2UtY2x1c3Rlci4gVmFsdWVzIGFib3ZlIDIgXiA1IGRvbid0IG1ha2UgbXVjaCBzZW5zZQorZm9yIHN3YXAgYmVjYXVzZSB3ZSBvbmx5IGNsdXN0ZXIgc3dhcCBkYXRhIGluIDMyLXBhZ2UgZ3JvdXBzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCittYXhfbWFwX2NvdW50OgorCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBtYXAgYXJlYXMgYSBwcm9jZXNzCittYXkgaGF2ZS4gTWVtb3J5IG1hcCBhcmVhcyBhcmUgdXNlZCBhcyBhIHNpZGUtZWZmZWN0IG9mIGNhbGxpbmcKK21hbGxvYywgZGlyZWN0bHkgYnkgbW1hcCBhbmQgbXByb3RlY3QsIGFuZCBhbHNvIHdoZW4gbG9hZGluZyBzaGFyZWQKK2xpYnJhcmllcy4KKworV2hpbGUgbW9zdCBhcHBsaWNhdGlvbnMgbmVlZCBsZXNzIHRoYW4gYSB0aG91c2FuZCBtYXBzLCBjZXJ0YWluCitwcm9ncmFtcywgcGFydGljdWxhcmx5IG1hbGxvYyBkZWJ1Z2dlcnMsIG1heSBjb25zdW1lIGxvdHMgb2YgdGhlbSwKK2UuZy4sIHVwIHRvIG9uZSBvciB0d28gbWFwcyBwZXIgYWxsb2NhdGlvbi4KKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjU1MzYuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK21pbl9mcmVlX2tieXRlczoKKworVGhpcyBpcyB1c2VkIHRvIGZvcmNlIHRoZSBMaW51eCBWTSB0byBrZWVwIGEgbWluaW11bSBudW1iZXIgCitvZiBraWxvYnl0ZXMgZnJlZS4gIFRoZSBWTSB1c2VzIHRoaXMgbnVtYmVyIHRvIGNvbXB1dGUgYSBwYWdlc19taW4KK3ZhbHVlIGZvciBlYWNoIGxvd21lbSB6b25lIGluIHRoZSBzeXN0ZW0uICBFYWNoIGxvd21lbSB6b25lIGdldHMgCithIG51bWJlciBvZiByZXNlcnZlZCBmcmVlIHBhZ2VzIGJhc2VkIHByb3BvcnRpb25hbGx5IG9uIGl0cyBzaXplLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThjMmUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKQEAgLTAsMCArMSwyMTMgQEAKK0xpbnV4IE1hZ2ljIFN5c3RlbSBSZXF1ZXN0IEtleSBIYWNrcworRG9jdW1lbnRhdGlvbiBmb3Igc3lzcnEuYyB2ZXJzaW9uIDEuMTUKK0xhc3QgdXBkYXRlOiAkRGF0ZTogMjAwMS8wMS8yOCAxMDoxNTo1OSAkCisKKyogIFdoYXQgaXMgdGhlIG1hZ2ljIFN5c1JxIGtleT8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0l0IGlzIGEgJ21hZ2ljYWwnIGtleSBjb21ibyB5b3UgY2FuIGhpdCB3aGljaCB0aGUga2VybmVsIHdpbGwgcmVzcG9uZCB0bworcmVnYXJkbGVzcyBvZiB3aGF0ZXZlciBlbHNlIGl0IGlzIGRvaW5nLCB1bmxlc3MgaXQgaXMgY29tcGxldGVseSBsb2NrZWQgdXAuCisKKyogIEhvdyBkbyBJIGVuYWJsZSB0aGUgbWFnaWMgU3lzUnEga2V5Pworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgbmVlZCB0byBzYXkgInllcyIgdG8gJ01hZ2ljIFN5c1JxIGtleSAoQ09ORklHX01BR0lDX1NZU1JRKScgd2hlbgorY29uZmlndXJpbmcgdGhlIGtlcm5lbC4gV2hlbiBydW5uaW5nIGEga2VybmVsIHdpdGggU3lzUnEgY29tcGlsZWQgaW4sCisvcHJvYy9zeXMva2VybmVsL3N5c3JxIGNvbnRyb2xzIHRoZSBmdW5jdGlvbnMgYWxsb3dlZCB0byBiZSBpbnZva2VkIHZpYQordGhlIFN5c1JxIGtleS4gQnkgZGVmYXVsdCB0aGUgZmlsZSBjb250YWlucyAxIHdoaWNoIG1lYW5zIHRoYXQgZXZlcnkKK3Bvc3NpYmxlIFN5c1JxIHJlcXVlc3QgaXMgYWxsb3dlZCAoaW4gb2xkZXIgdmVyc2lvbnMgU3lzUnEgd2FzIGRpc2FibGVkCitieSBkZWZhdWx0LCBhbmQgeW91IHdlcmUgcmVxdWlyZWQgdG8gc3BlY2lmaWNhbGx5IGVuYWJsZSBpdCBhdCBydW4tdGltZQorYnV0IHRoaXMgaXMgbm90IHRoZSBjYXNlIGFueSBtb3JlKS4gSGVyZSBpcyB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMKK2luIC9wcm9jL3N5cy9rZXJuZWwvc3lzcnE6CisgICAwIC0gZGlzYWJsZSBzeXNycSBjb21wbGV0ZWx5CisgICAxIC0gZW5hYmxlIGFsbCBmdW5jdGlvbnMgb2Ygc3lzcnEKKyAgPjEgLSBiaXRtYXNrIG9mIGFsbG93ZWQgc3lzcnEgZnVuY3Rpb25zIChzZWUgYmVsb3cgZm9yIGRldGFpbGVkIGZ1bmN0aW9uCisgICAgICAgZGVzY3JpcHRpb24pOgorICAgICAgICAgIDIgLSBlbmFibGUgY29udHJvbCBvZiBjb25zb2xlIGxvZ2dpbmcgbGV2ZWwKKyAgICAgICAgICA0IC0gZW5hYmxlIGNvbnRyb2wgb2Yga2V5Ym9hcmQgKFNBSywgdW5yYXcpCisgICAgICAgICAgOCAtIGVuYWJsZSBkZWJ1Z2dpbmcgZHVtcHMgb2YgcHJvY2Vzc2VzIGV0Yy4KKyAgICAgICAgIDE2IC0gZW5hYmxlIHN5bmMgY29tbWFuZAorICAgICAgICAgMzIgLSBlbmFibGUgcmVtb3VudCByZWFkLW9ubHkKKyAgICAgICAgIDY0IC0gZW5hYmxlIHNpZ25hbGxpbmcgb2YgcHJvY2Vzc2VzICh0ZXJtLCBraWxsLCBvb20ta2lsbCkKKyAgICAgICAgMTI4IC0gYWxsb3cgcmVib290L3Bvd2Vyb2ZmCisgICAgICAgIDI1NiAtIGFsbG93IG5pY2luZyBvZiBhbGwgUlQgdGFza3MKKworWW91IGNhbiBzZXQgdGhlIHZhbHVlIGluIHRoZSBmaWxlIGJ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICBlY2hvICJudW1iZXIiID4vcHJvYy9zeXMva2VybmVsL3N5c3JxCisKK05vdGUgdGhhdCB0aGUgdmFsdWUgb2YgL3Byb2Mvc3lzL2tlcm5lbC9zeXNycSBpbmZsdWVuY2VzIG9ubHkgdGhlIGludm9jYXRpb24KK3ZpYSBhIGtleWJvYXJkLiBJbnZvY2F0aW9uIG9mIGFueSBvcGVyYXRpb24gdmlhIC9wcm9jL3N5c3JxLXRyaWdnZXIgaXMgYWx3YXlzCithbGxvd2VkLgorCisqICBIb3cgZG8gSSB1c2UgdGhlIG1hZ2ljIFN5c1JxIGtleT8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorT24geDg2ICAgLSBZb3UgcHJlc3MgdGhlIGtleSBjb21ibyAnQUxULVN5c1JxLTxjb21tYW5kIGtleT4nLiBOb3RlIC0gU29tZQorICAgICAgICAgICBrZXlib2FyZHMgbWF5IG5vdCBoYXZlIGEga2V5IGxhYmVsZWQgJ1N5c1JxJy4gVGhlICdTeXNScScga2V5IGlzCisgICAgICAgICAgIGFsc28ga25vd24gYXMgdGhlICdQcmludCBTY3JlZW4nIGtleS4gQWxzbyBzb21lIGtleWJvYXJkcyBjYW5ub3QKKwkgICBoYW5kbGUgc28gbWFueSBrZXlzIGJlaW5nIHByZXNzZWQgYXQgdGhlIHNhbWUgdGltZSwgc28geW91IG1pZ2h0CisJICAgaGF2ZSBiZXR0ZXIgbHVjayB3aXRoICJwcmVzcyBBbHQiLCAicHJlc3MgU3lzUnEiLCAicmVsZWFzZSBBbHQiLAorCSAgICJwcmVzcyA8Y29tbWFuZCBrZXk+IiwgcmVsZWFzZSBldmVyeXRoaW5nLgorCitPbiBTUEFSQyAtIFlvdSBwcmVzcyAnQUxULVNUT1AtPGNvbW1hbmQga2V5PicsIEkgYmVsaWV2ZS4KKworT24gdGhlIHNlcmlhbCBjb25zb2xlIChQQyBzdHlsZSBzdGFuZGFyZCBzZXJpYWwgcG9ydHMgb25seSkgLQorICAgICAgICAgICBZb3Ugc2VuZCBhIEJSRUFLLCB0aGVuIHdpdGhpbiA1IHNlY29uZHMgYSBjb21tYW5kIGtleS4gU2VuZGluZworICAgICAgICAgICBCUkVBSyB0d2ljZSBpcyBpbnRlcnByZXRlZCBhcyBhIG5vcm1hbCBCUkVBSy4KKworT24gUG93ZXJQQyAtIFByZXNzICdBTFQgLSBQcmludCBTY3JlZW4gKG9yIEYxMykgLSA8Y29tbWFuZCBrZXk+LCAgCisgICAgICAgICAgICAgUHJpbnQgU2NyZWVuIChvciBGMTMpIC0gPGNvbW1hbmQga2V5PiBtYXkgc3VmZmljZS4KKworT24gb3RoZXIgLSBJZiB5b3Uga25vdyBvZiB0aGUga2V5IGNvbWJvcyBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcywgcGxlYXNlCisgICAgICAgICAgIGxldCBtZSBrbm93IHNvIEkgY2FuIGFkZCB0aGVtIHRvIHRoaXMgc2VjdGlvbi4KKworT24gYWxsIC0gIHdyaXRlIGEgY2hhcmFjdGVyIHRvIC9wcm9jL3N5c3JxLXRyaWdnZXIuICBlZzoKKworCQllY2hvIHQgPiAvcHJvYy9zeXNycS10cmlnZ2VyCisKKyogIFdoYXQgYXJlIHRoZSAnY29tbWFuZCcga2V5cz8KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKydyJyAgICAgLSBUdXJucyBvZmYga2V5Ym9hcmQgcmF3IG1vZGUgYW5kIHNldHMgaXQgdG8gWExBVEUuCisKKydrJyAgICAgLSBTZWN1cmUgQWNjZXNzIEtleSAoU0FLKSBLaWxscyBhbGwgcHJvZ3JhbXMgb24gdGhlIGN1cnJlbnQgdmlydHVhbAorICAgICAgICAgIGNvbnNvbGUuIE5PVEU6IFNlZSBpbXBvcnRhbnQgY29tbWVudHMgYmVsb3cgaW4gU0FLIHNlY3Rpb24uCisKKydiJyAgICAgLSBXaWxsIGltbWVkaWF0ZWx5IHJlYm9vdCB0aGUgc3lzdGVtIHdpdGhvdXQgc3luY2luZyBvciB1bm1vdW50aW5nCisgICAgICAgICAgeW91ciBkaXNrcy4KKworJ28nICAgICAtIFdpbGwgc2h1dCB5b3VyIHN5c3RlbSBvZmYgKGlmIGNvbmZpZ3VyZWQgYW5kIHN1cHBvcnRlZCkuCisKKydzJyAgICAgLSBXaWxsIGF0dGVtcHQgdG8gc3luYyBhbGwgbW91bnRlZCBmaWxlc3lzdGVtcy4KKworJ3UnICAgICAtIFdpbGwgYXR0ZW1wdCB0byByZW1vdW50IGFsbCBtb3VudGVkIGZpbGVzeXN0ZW1zIHJlYWQtb25seS4KKworJ3AnICAgICAtIFdpbGwgZHVtcCB0aGUgY3VycmVudCByZWdpc3RlcnMgYW5kIGZsYWdzIHRvIHlvdXIgY29uc29sZS4KKworJ3QnICAgICAtIFdpbGwgZHVtcCBhIGxpc3Qgb2YgY3VycmVudCB0YXNrcyBhbmQgdGhlaXIgaW5mb3JtYXRpb24gdG8geW91cgorICAgICAgICAgIGNvbnNvbGUuCisKKydtJyAgICAgLSBXaWxsIGR1bXAgY3VycmVudCBtZW1vcnkgaW5mbyB0byB5b3VyIGNvbnNvbGUuCisKKyd2JwktIER1bXBzIFZveWFnZXIgU01QIHByb2Nlc3NvciBpbmZvIHRvIHlvdXIgY29uc29sZS4KKworJzAnLSc5JyAtIFNldHMgdGhlIGNvbnNvbGUgbG9nIGxldmVsLCBjb250cm9sbGluZyB3aGljaCBrZXJuZWwgbWVzc2FnZXMKKyAgICAgICAgICB3aWxsIGJlIHByaW50ZWQgdG8geW91ciBjb25zb2xlLiAoJzAnLCBmb3IgZXhhbXBsZSB3b3VsZCBtYWtlCisgICAgICAgICAgaXQgc28gdGhhdCBvbmx5IGVtZXJnZW5jeSBtZXNzYWdlcyBsaWtlIFBBTklDcyBvciBPT1BTZXMgd291bGQKKyAgICAgICAgICBtYWtlIGl0IHRvIHlvdXIgY29uc29sZS4pCisKKydmJwktIFdpbGwgY2FsbCBvb21fa2lsbCB0byBraWxsIGEgbWVtb3J5IGhvZyBwcm9jZXNzCisKKydlJyAgICAgLSBTZW5kIGEgU0lHVEVSTSB0byBhbGwgcHJvY2Vzc2VzLCBleGNlcHQgZm9yIGluaXQuCisKKydpJyAgICAgLSBTZW5kIGEgU0lHS0lMTCB0byBhbGwgcHJvY2Vzc2VzLCBleGNlcHQgZm9yIGluaXQuCisKKydsJyAgICAgLSBTZW5kIGEgU0lHS0lMTCB0byBhbGwgcHJvY2Vzc2VzLCBJTkNMVURJTkcgaW5pdC4gKFlvdXIgc3lzdGVtCisgICAgICAgICAgd2lsbCBiZSBub24tZnVuY3Rpb25hbCBhZnRlciB0aGlzLikKKworJ2gnICAgICAtIFdpbGwgZGlzcGxheSBoZWxwICggYWN0dWFsbHkgYW55IG90aGVyIGtleSB0aGFuIHRob3NlIGxpc3RlZAorICAgICAgICAgIGFib3ZlIHdpbGwgZGlzcGxheSBoZWxwLiBidXQgJ2gnIGlzIGVhc3kgdG8gcmVtZW1iZXIgOi0pCisKKyogIE9rYXksIHNvIHdoYXQgY2FuIEkgdXNlIHRoZW0gZm9yPworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitXZWxsLCB1bidSJ2F3IGlzIHZlcnkgaGFuZHkgd2hlbiB5b3VyIFggc2VydmVyIG9yIGEgc3ZnYWxpYiBwcm9ncmFtIGNyYXNoZXMuCisKK3NhJ0snIChTZWN1cmUgQWNjZXNzIEtleSkgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm8KK3Ryb2phbiBwcm9ncmFtIGlzIHJ1bm5pbmcgYXQgY29uc29sZSBhbmQgd2hpY2ggY291bGQgZ3JhYiB5b3VyIHBhc3N3b3JkCit3aGVuIHlvdSB3b3VsZCB0cnkgdG8gbG9naW4uIEl0IHdpbGwga2lsbCBhbGwgcHJvZ3JhbXMgb24gZ2l2ZW4gY29uc29sZQorYW5kIHRodXMgbGV0dGluZyB5b3UgbWFrZSBzdXJlIHRoYXQgdGhlIGxvZ2luIHByb21wdCB5b3Ugc2VlIGlzIGFjdHVhbGx5Cit0aGUgb25lIGZyb20gaW5pdCwgbm90IHNvbWUgdHJvamFuIHByb2dyYW0uCitJTVBPUlRBTlQ6SW4gaXRzIHRydWUgZm9ybSBpdCBpcyBub3QgYSB0cnVlIFNBSyBsaWtlIHRoZSBvbmUgaW4gICA6SU1QT1JUQU5UCitJTVBPUlRBTlQ6YzIgY29tcGxpYW50IHN5c3RlbXMsIGFuZCBpdCBzaG91bGQgYmUgbWlzdG9vayBhcyBzdWNoLiA6SU1QT1JUQU5UCisgICAgICAgSXQgc2VlbXMgb3RoZXIgZmluZCBpdCB1c2VmdWwgYXMgKFN5c3RlbSBBdHRlbnRpb24gS2V5KSB3aGljaCBpcwordXNlZnVsIHdoZW4geW91IHdhbnQgdG8gZXhpdCBhIHByb2dyYW0gdGhhdCB3aWxsIG5vdCBsZXQgeW91IHN3aXRjaCBjb25zb2xlcy4KKyhGb3IgZXhhbXBsZSwgWCBvciBhIHN2Z2FsaWIgcHJvZ3JhbS4pCisKK3JlJ0Inb290IGlzIGdvb2Qgd2hlbiB5b3UncmUgdW5hYmxlIHRvIHNodXQgZG93bi4gQnV0IHlvdSBzaG91bGQgYWxzbyAnUyd5bmMKK2FuZCAnVSdtb3VudCBmaXJzdC4KKworJ1MneW5jIGlzIGdyZWF0IHdoZW4geW91ciBzeXN0ZW0gaXMgbG9ja2VkIHVwLCBpdCBhbGxvd3MgeW91IHRvIHN5bmMgeW91cgorZGlza3MgYW5kIHdpbGwgY2VydGFpbmx5IGxlc3NlbiB0aGUgY2hhbmNlIG9mIGRhdGEgbG9zcyBhbmQgZnNja2luZy4gTm90ZQordGhhdCB0aGUgc3luYyBoYXNuJ3QgdGFrZW4gcGxhY2UgdW50aWwgeW91IHNlZSB0aGUgIk9LIiBhbmQgIkRvbmUiIGFwcGVhcgorb24gdGhlIHNjcmVlbi4gKElmIHRoZSBrZXJuZWwgaXMgcmVhbGx5IGluIHN0cmlmZSwgeW91IG1heSBub3QgZXZlciBnZXQgdGhlCitPSyBvciBEb25lIG1lc3NhZ2UuLi4pCisKKydVJ21vdW50IGlzIGJhc2ljYWxseSB1c2VmdWwgaW4gdGhlIHNhbWUgd2F5cyBhcyAnUyd5bmMuIEkgZ2VuZXJhbGx5ICdTJ3luYywKKydVJ21vdW50LCB0aGVuIHJlJ0Inb290IHdoZW4gbXkgc3lzdGVtIGxvY2tzLiBJdCdzIHNhdmVkIG1lIG1hbnkgYSBmc2NrLgorQWdhaW4sIHRoZSB1bm1vdW50IChyZW1vdW50IHJlYWQtb25seSkgaGFzbid0IHRha2VuIHBsYWNlIHVudGlsIHlvdSBzZWUgdGhlCisiT0siIGFuZCAiRG9uZSIgbWVzc2FnZSBhcHBlYXIgb24gdGhlIHNjcmVlbi4KKworVGhlIGxvZ2xldmVsJzAnLSc5JyBpcyB1c2VmdWwgd2hlbiB5b3VyIGNvbnNvbGUgaXMgYmVpbmcgZmxvb2RlZCB3aXRoCitrZXJuZWwgbWVzc2FnZXMgeW91IGRvIG5vdCB3YW50IHRvIHNlZS4gU2V0dGluZyAnMCcgd2lsbCBwcmV2ZW50IGFsbCBidXQKK3RoZSBtb3N0IHVyZ2VudCBrZXJuZWwgbWVzc2FnZXMgZnJvbSByZWFjaGluZyB5b3VyIGNvbnNvbGUuIChUaGV5IHdpbGwKK3N0aWxsIGJlIGxvZ2dlZCBpZiBzeXNsb2dkL2tsb2dkIGFyZSBhbGl2ZSwgdGhvdWdoLikKKwordCdFJ3JtIGFuZCBrJ0knbGwgYXJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBzb21lIHNvcnQgb2YgcnVuYXdheSBwcm9jZXNzIHlvdQorYXJlIHVuYWJsZSB0byBraWxsIGFueSBvdGhlciB3YXksIGVzcGVjaWFsbHkgaWYgaXQncyBzcGF3bmluZyBvdGhlcgorcHJvY2Vzc2VzLgorCisqICBTb21ldGltZXMgU3lzUnEgc2VlbXMgdG8gZ2V0ICdzdHVjaycgYWZ0ZXIgdXNpbmcgaXQsIHdoYXQgY2FuIEkgZG8/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGF0IGhhcHBlbnMgdG8gbWUsIGFsc28uIEkndmUgZm91bmQgdGhhdCB0YXBwaW5nIHNoaWZ0LCBhbHQsIGFuZCBjb250cm9sCitvbiBib3RoIHNpZGVzIG9mIHRoZSBrZXlib2FyZCwgYW5kIGhpdHRpbmcgYW4gaW52YWxpZCBzeXNycSBzZXF1ZW5jZSBhZ2Fpbgord2lsbCBmaXggdGhlIHByb2JsZW0uIChpZSwgc29tZXRoaW5nIGxpa2UgYWx0LXN5c3JxLXopLiBTd2l0Y2hpbmcgdG8gYW5vdGhlcgordmlydHVhbCBjb25zb2xlIChBTFQrRm4pIGFuZCB0aGVuIGJhY2sgYWdhaW4gc2hvdWxkIGFsc28gaGVscC4KKworKiAgSSBoaXQgU3lzUnEsIGJ1dCBub3RoaW5nIHNlZW1zIHRvIGhhcHBlbiwgd2hhdCdzIHdyb25nPworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlcmUgYXJlIHNvbWUga2V5Ym9hcmRzIHRoYXQgc2VuZCBkaWZmZXJlbnQgc2NhbmNvZGVzIGZvciBTeXNScSB0aGFuIHRoZQorcHJlLWRlZmluZWQgMHg1NC4gU28gaWYgU3lzUnEgZG9lc24ndCB3b3JrIG91dCBvZiB0aGUgYm94IGZvciBhIGNlcnRhaW4KK2tleWJvYXJkLCBydW4gJ3Nob3drZXkgLXMnIHRvIGZpbmQgb3V0IHRoZSBwcm9wZXIgc2NhbmNvZGUgc2VxdWVuY2UuIFRoZW4KK3VzZSAnc2V0a2V5Y29kZXMgPHNlcXVlbmNlPiA4NCcgdG8gZGVmaW5lIHRoaXMgc2VxdWVuY2UgdG8gdGhlIHVzdWFsIFN5c1JxCitjb2RlICg4NCBpcyBkZWNpbWFsIGZvciAweDU0KS4gSXQncyBwcm9iYWJseSBiZXN0IHRvIHB1dCB0aGlzIGNvbW1hbmQgaW4gYQorYm9vdCBzY3JpcHQuIE9oLCBhbmQgYnkgdGhlIHdheSwgeW91IGV4aXQgJ3Nob3drZXknIGJ5IG5vdCB0eXBpbmcgYW55dGhpbmcKK2ZvciB0ZW4gc2Vjb25kcy4KKworKiAgSSB3YW50IHRvIGFkZCBTeXNSUSBrZXkgZXZlbnRzIHRvIGEgbW9kdWxlLCBob3cgZG9lcyBpdCB3b3JrPworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSBiYXNpYyBmdW5jdGlvbiB3aXRoIHRoZSB0YWJsZSwgeW91IG11c3QgZmlyc3QgaW5jbHVkZQordGhlIGhlYWRlciAnaW5jbHVkZS9saW51eC9zeXNycS5oJywgdGhpcyB3aWxsIGRlZmluZSBldmVyeXRoaW5nIGVsc2UgeW91IG5lZWQuCitOZXh0LCB5b3UgbXVzdCBjcmVhdGUgYSBzeXNycV9rZXlfb3Agc3RydWN0LCBhbmQgcG9wdWxhdGUgaXQgd2l0aCBBKSB0aGUga2V5CitoYW5kbGVyIGZ1bmN0aW9uIHlvdSB3aWxsIHVzZSwgQikgYSBoZWxwX21zZyBzdHJpbmcsIHRoYXQgd2lsbCBwcmludCB3aGVuIFN5c1JRCitwcmludHMgaGVscCwgYW5kIEMpIGFuIGFjdGlvbl9tc2cgc3RyaW5nLCB0aGF0IHdpbGwgcHJpbnQgcmlnaHQgYmVmb3JlIHlvdXIKK2hhbmRsZXIgaXMgY2FsbGVkLiBZb3VyIGhhbmRsZXIgbXVzdCBjb25mb3JtIHRvIHRoZSBwcm90b3lwZSBpbiAnc3lzcnEuaCcuCisKK0FmdGVyIHRoZSBzeXNycV9rZXlfb3AgaXMgY3JlYXRlZCwgeW91IGNhbiBjYWxsIHRoZSBtYWNybyAKK3JlZ2lzdGVyX3N5c3JxX2tleShpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKSB0aGF0IGlzIGRlZmluZWQgaW4KK3N5c3JxLmgsIHRoaXMgd2lsbCByZWdpc3RlciB0aGUgb3BlcmF0aW9uIHBvaW50ZWQgdG8gYnkgJ29wX3AnIGF0IHRhYmxlCitrZXkgJ2tleScsIGlmIHRoYXQgc2xvdCBpbiB0aGUgdGFibGUgaXMgYmxhbmsuIEF0IG1vZHVsZSB1bmxvYWQgdGltZSwgeW91IG11c3QKK2NhbGwgdGhlIG1hY3JvIHVucmVnaXN0ZXJfc3lzcnFfa2V5KGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3ApLCB3aGljaAord2lsbCByZW1vdmUgdGhlIGtleSBvcCBwb2ludGVkIHRvIGJ5ICdvcF9wJyBmcm9tIHRoZSBrZXkgJ2tleScsIGlmIGFuZCBvbmx5IGlmCitpdCBpcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCBpbiB0aGF0IHNsb3QuIFRoaXMgaXMgaW4gY2FzZSB0aGUgc2xvdCBoYXMgYmVlbgorb3ZlcndyaXR0ZW4gc2luY2UgeW91IHJlZ2lzdGVyZWQgaXQuCisKK1RoZSBNYWdpYyBTeXNSUSBzeXN0ZW0gd29ya3MgYnkgcmVnaXN0ZXJpbmcga2V5IG9wZXJhdGlvbnMgYWdhaW5zdCBhIGtleSBvcAorbG9va3VwIHRhYmxlLCB3aGljaCBpcyBkZWZpbmVkIGluICdkcml2ZXJzL2NoYXIvc3lzcnEuYycuIFRoaXMga2V5IHRhYmxlIGhhcworYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyByZWdpc3RlcmVkIGludG8gaXQgYXQgY29tcGlsZSB0aW1lLCBidXQgaXMgbXV0YWJsZSwKK2FuZCA0IGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIGludGVyZmFjZSB0byBpdDogX19zeXNycV9sb2NrX3RhYmxlLAorX19zeXNycV91bmxvY2tfdGFibGUsIF9fc3lzcnFfZ2V0X2tleV9vcCwgYW5kIF9fc3lzcnFfcHV0X2tleV9vcC4gVGhlCitmdW5jdGlvbnMgX19zeXNycV9zd2FwX2tleV9vcHMgYW5kIF9fc3lzcnFfc3dhcF9rZXlfb3BzX25vbG9jayBhcmUgZGVmaW5lZAoraW4gdGhlIGhlYWRlciBpdHNlbGYsIGFuZCB0aGUgUkVHSVNURVIgYW5kIFVOUkVHSVNURVIgbWFjcm9zIGFyZSBidWlsdCBmcm9tCit0aGVzZS4gTW9yZSBjb21wbGV4IChhbmQgZGFuZ2Vyb3VzISkgbWFuaXB1bGF0aW9ucyBvZiB0aGUgdGFibGUgYXJlIHBvc3NpYmxlCit1c2luZyB0aGVzZSBmdW5jdGlvbnMsIGJ1dCB5b3UgbXVzdCBiZSBjYXJlZnVsIHRvIGFsd2F5cyBsb2NrIHRoZSB0YWJsZSBiZWZvcmUKK3lvdSByZWFkIG9yIHdyaXRlIGZyb20gaXQsIGFuZCB0byB1bmxvY2sgaXQgYWdhaW4gd2hlbiB5b3UgYXJlIGRvbmUuIChBbmQgb2YKK2NvdXJzZSwgdG8gbmV2ZXIgZXZlciBsZWF2ZSBhbiBpbnZhbGlkIHBvaW50ZXIgaW4gdGhlIHRhYmxlKS4gTnVsbCBwb2ludGVycyBpbgordGhlIHRhYmxlIGFyZSBhbHdheXMgc2FmZSA6KQorCitJZiBmb3Igc29tZSByZWFzb24geW91IGZlZWwgdGhlIG5lZWQgdG8gY2FsbCB0aGUgaGFuZGxlX3N5c3JxIGZ1bmN0aW9uIGZyb20KK3dpdGhpbiBhIGZ1bmN0aW9uIGNhbGxlZCBieSBoYW5kbGVfc3lzcnEsIHlvdSBtdXN0IGJlIGF3YXJlIHRoYXQgeW91IGFyZSBpbgorYSBsb2NrICh5b3UgYXJlIGFsc28gaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIHdoaWNoIG1lYW5zIGRvbid0IHNsZWVwISksIHNvCit5b3UgbXVzdCBjYWxsIF9faGFuZGxlX3N5c3JxX25vbG9jayBpbnN0ZWFkLgorCisqICBJIGhhdmUgbW9yZSBxdWVzdGlvbnMsIHdobyBjYW4gSSBhc2s/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgbWF5IGZlZWwgZnJlZSB0byBzZW5kIGVtYWlsIHRvIG15cmRyYWFsQGRlYXRoc2Rvb3IuY29tLCBhbmQgSSB3aWxsCityZXNwb25kIGFzIHNvb24gYXMgcG9zc2libGUuCisgLU15cmRyYWFsCisKK0FuZCBJJ2xsIGFuc3dlciBhbnkgcXVlc3Rpb25zIGFib3V0IHRoZSByZWdpc3RyYXRpb24gc3lzdGVtIHlvdSBnb3QsIGFsc28KK3Jlc3BvbmRpbmcgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAtQ3J1dGNoZXIKKworKiAgQ3JlZGl0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorV3JpdHRlbiBieSBNeWRyYWFsIDxteXJkcmFhbEBkZWF0aHNkb29yLmNvbT4KK1VwZGF0ZWQgYnkgQWRhbSBTdWxtaWNraSA8YWRhbUBjZmFyLnVtZC5lZHU+CitVcGRhdGVkIGJ5IEplcmVteSBNLiBEb2xhbiA8am1kQHR1cmJvZ2Vlay5vcmc+IDIwMDEvMDEvMjggMTA6MTU6NTkKK0FkZGVkIHRvIGJ5IENydXRjaGVyIER1bm5hdmFudCA8Y3J1dGNoZXIra2VybmVsQGRhdGFzdGFja3MuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dCBiL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxMDI0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQKQEAgLTAsMCArMSw0MDYgQEAKK0xpbnV4IFF1aWNrbmV0LURyaXZlcnMtSG93dG8KK1F1aWNrbmV0IFRlY2hub2xvZ2llcywgSW5jLiAod3d3LnF1aWNrbmV0Lm5ldCkKK1ZlcnNpb24gMC4zLjQgIERlY2VtYmVyIDE4LCAxOTk5CisKKzEuMCAgSW50cm9kdWN0aW9uCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBmaXJzdCBHUEwgcmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBMaW51eAorZHJpdmVyIGZvciB0aGUgUXVpY2tuZXQgSW50ZXJuZXQgUGhvbmVKQUNLIGFuZCBJbnRlcm5ldCBMaW5lSkFDSworY2FyZHMuICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIGNhcmRzIGlzIGF2YWlsYWJsZSBhdAord3d3LnF1aWNrbmV0Lm5ldC4gIFRoZSBkcml2ZXIgdmVyc2lvbiBkaXNjdXNzZWQgaW4gdGhpcyBkb2N1bWVudCBpcworMC4zLjQuCisKK1RoZXNlIGNhcmRzIG9mZmVyIG5pY2UgdGVsY28gc3R5bGUgaW50ZXJmYWNlcyB0byB1c2UgeW91ciBzdGFuZGFyZAordGVsZXBob25lL2tleSBzeXN0ZW0vUEJYIGFzIHRoZSB1c2VyIGludGVyZmFjZSBmb3IgVm9JUCBhcHBsaWNhdGlvbnMuCitUaGUgSW50ZXJuZXQgTGluZUpBQ0sgYWxzbyBvZmZlcnMgUFNUTiBjb25uZWN0aXZpdHkgZm9yIGEgc2luZ2xlIGxpbmUKK0ludGVybmV0IHRvIFBTVE4gZ2F0ZXdheS4gIE9mIGNvdXJzZSwgeW91IGNhbiBhZGQgbW9yZSB0aGFuIG9uZSBjYXJkCit0byBhIHN5c3RlbSB0byBvYnRhaW4gbXVsdGktbGluZSBmdW5jdGlvbmFsaXR5LiAgQXQgdGhpcyB0aW1lLCB0aGUKK2RyaXZlciBzdXBwb3J0cyB0aGUgUE9UUyBwb3J0IG9uIGJvdGggdGhlIEludGVybmV0IFBob25lSkFDSyBhbmQgdGhlCitJbnRlcm5ldCBMaW5lSkFDSywgYnV0IHRoZSBQU1ROIHBvcnQgb24gdGhlIGxhdHRlciBjYXJkIGlzIG5vdCB5ZXQKK3N1cHBvcnRlZC4KKworVGhpcyBkb2N1bWVudCwgYW5kIHRoZSBkcml2ZXJzIGZvciB0aGUgY2FyZHMsIGFyZSBpbnRlbmRlZCBmb3IgYQorbGltaXRlZCBhdWRpZW5jZSB0aGF0IGluY2x1ZGVzIHRlY2huaWNhbGx5IGNhcGFibGUgcHJvZ3JhbW1lcnMgd2hvCit3b3VsZCBsaWtlIHRvIGV4cGVyaW1lbnQgd2l0aCBRdWlja25ldCBjYXJkcy4gIFRoZSBkcml2ZXJzIGFyZQorY29uc2lkZXJlZCBpbiBBTFBIQSBzdGF0dXMgYW5kIGFyZSBub3QgeWV0IGNvbnNpZGVyZWQgc3RhYmxlIGVub3VnaAorZm9yIGdlbmVyYWwsIHdpZGVzcHJlYWQgdXNlIGluIGFuIHVubGltaXRlZCBhdWRpZW5jZS4KKworVGhhdCdzIHdvcnRoIHNheWluZyBhZ2FpbjoKKworVEhFIExJTlVYIERSSVZFUlMgRk9SIFFVSUNLTkVUIENBUkRTIEFSRSBQUkVTRU5UTFkgSU4gQSBBTFBIQSBTVEFURQorQU5EIFNIT1VMRCBOT1QgQkUgQ09OU0lERVJFRCBBUyBSRUFEWSBGT1IgTk9STUFMIFdJREVTUFJFQUQgVVNFLgorCitUaGV5IGFyZSByZWxlYXNlZCBlYXJseSBpbiB0aGUgc3Bpcml0IG9mIEludGVybmV0IGRldmVsb3BtZW50IGFuZCB0bworbWFrZSB0aGlzIHRlY2hub2xvZ3kgYXZhaWxhYmxlIHRvIGlubm92YXRvcnMgd2hvIHdvdWxkIGJlbmVmaXQgZnJvbQorZWFybHkgZXhwb3N1cmUuCisKK1doZW4gd2UgcHJvbW90ZSB0aGUgZGV2aWNlIGRyaXZlciB0byAiYmV0YSIgbGV2ZWwgaXQgd2lsbCBiZQorY29uc2lkZXJlZCByZWFkeSBmb3Igbm9uLXByb2dyYW1tZXIsIG5vbi10ZWNobmljYWwgdXNlcnMuICBVbnRpbCB0aGVuLAorcGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlc2UgZHJpdmVycyBtYXkgbm90IGJlIHN0YWJsZSBhbmQgbWF5IGFmZmVjdAordGhlIHBlcmZvcm1hbmNlIG9mIHlvdXIgc3lzdGVtLgorCisKKzEuMSBMYXRlc3QgQWRkaXRpb25zL0ltcHJvdmVtZW50cworCitUaGUgMC4zLjQgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGlzIHRoZSBmaXJzdCBHUEwgcmVsZWFzZS4gIFNldmVyYWwKK2ZlYXR1cmVzIGhhZCB0byBiZSByZW1vdmVkIGZyb20gdGhlIHByaW9yIGJpbmFyeSBvbmx5IG1vZHVsZSwgbW9zdGx5Citmb3IgcmVhc29ucyBvZiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgcmlnaHRzLiAgV2UgY2FuJ3QgcmVsZWFzZQoraW5mb3JtYXRpb24gdGhhdCBpcyBub3Qgb3VycyAtIHNvIGNlcnRhaW4gYXNwZWN0cyBvZiB0aGUgZHJpdmVyIGhhZCB0bworYmUgcmVtb3ZlZCB0byBwcm90ZWN0IHRoZSByaWdodHMgb2Ygb3RoZXJzLiAgCisKK1NwZWNpZmljYWxseSwgdmVyeSBvbGQgSW50ZXJuZXQgUGhvbmVKQUNLIGNhcmRzIGhhdmUgbm9uLXN0YW5kYXJkCitHLjcyMy4xIGNvZGVjcyAoZHVlIHRvIHRoZSBlYXJseSBuYXR1cmUgb2YgdGhlIERTUHMgaW4gdGhvc2UgZGF5cykuCitUaGUgYXV0by1jb252ZXJzaW9uIGNvZGUgdG8gYnJpbmcgdGhvc2UgY2FyZHMgaW50byBjb21wbGlhbmNlIHdpdGgKK3RvZGF5cyBzdGFuZGFyZHMgaXMgYXZhaWxhYmxlIGFzIGEgYmluYXJ5IG9ubHkgbW9kdWxlIHRvIHRob3NlIHBlb3BsZQorbmVlZGluZyBpdC4gIElmIHlvdSBib3VnaHQgeW91ciBjYXJkIGFmdGVyIDE5OTcgb3Igc28sIHlvdSBhcmUgT0sgLQoraXQncyBvbmx5IHRoZSB2ZXJ5IG9sZCBjYXJkcyB0aGF0IGFyZSBhZmZlY3RlZC4KKworQWxzbywgdGhlIGNvZGUgdG8gZG93bmxvYWQgRy43MjgvRy43MjkvRy43MjlhIGNvZGVjcyB0byB0aGUgRFNQIGlzCithdmFpbGFibGUgYXMgYSBiaW5hcnkgb25seSBtb2R1bGUgYXMgd2VsbC4gIFRoaXMgSVAgaXMgbm90IG91cnMgdG8KK3JlbGVhc2UuICAKKworSG9va3MgYXJlIGJ1aWx0IGludG8gdGhlIEdQTCBkcml2ZXIgdG8gYWxsb3cgaXQgdG8gd29yayB3aXRoIG90aGVyCitjb21wYW5pb24gbW9kdWxlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlIGZyb20gdGhpcyBtb2R1bGUuCisKKzEuMiBDb3B5cmlnaHQsIFRyYWRlbWFya3MsIERpc2NsYWltZXIsICYgQ3JlZGl0cyAKKworQ29weXJpZ2h0CisKK0NvcHlyaWdodCAoYykgMTk5OSBRdWlja25ldCBUZWNobm9sb2dpZXMsIEluYy4gIFBlcm1pc3Npb24gaXMgZ3JhbnRlZAordG8gZnJlZWx5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBkb2N1bWVudCBwcm92aWRlZCB5b3UgcHJlc2VydmUgaXQKK2luIGl0cyBvcmlnaW5hbCBmb3JtLiBGb3IgY29ycmVjdGlvbnMgYW5kIG1pbm9yIGNoYW5nZXMgY29udGFjdCB0aGUKK21haW50YWluZXIgYXQgbGludXhAcXVpY2tuZXQubmV0LgorCitUcmFkZW1hcmtzCisKK0ludGVybmV0IFBob25lSkFDSyBhbmQgSW50ZXJuZXQgTGluZUpBQ0sgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZgorUXVpY2tuZXQgVGVjaG5vbG9naWVzLCBJbmMuCisKK0Rpc2NsYWltZXIKKworTXVjaCBvZiB0aGUgaW5mbyBpbiB0aGlzIEhPV1RPIGlzIGVhcmx5IGluZm9ybWF0aW9uIHJlbGVhc2VkIGJ5CitRdWlja25ldCBUZWNobm9sb2dpZXMsIEluYy4gZm9yIHRoZSBleHByZXNzIHB1cnBvc2Ugb2YgYWxsb3dpbmcgZWFybHkKK3Rlc3RpbmcgYW5kIHVzZSBvZiB0aGUgTGludXggZHJpdmVycyBkZXZlbG9wZWQgZm9yIHRoZWlyIHByb2R1Y3RzLgorV2hpbGUgZXZlcnkgYXR0ZW1wdCBoYXMgYmVlbiBtYWRlIHRvIGJlIHRob3JvdWdoLCBjb21wbGV0ZSBhbmQKK2FjY3VyYXRlLCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmUgbWF5IGJlIHVucmVsaWFibGUgYW5kIHRoZXJlCithcmUgbGlrZWx5IGEgbnVtYmVyIG9mIGVycm9ycyBpbiB0aGlzIGRvY3VtZW50LiBQbGVhc2UgbGV0IHRoZQorbWFpbnRhaW5lciBrbm93IGFib3V0IHRoZW0uIFNpbmNlIHRoaXMgaXMgZnJlZSBkb2N1bWVudGF0aW9uLCBpdAorc2hvdWxkIGJlIG9idmlvdXMgdGhhdCBuZWl0aGVyIEkgbm9yIHByZXZpb3VzIGF1dGhvcnMgY2FuIGJlIGhlbGQKK2xlZ2FsbHkgcmVzcG9uc2libGUgZm9yIGFueSBlcnJvcnMuCisKK0NyZWRpdHMKKworVGhpcyBIT1dUTyB3YXMgd3JpdHRlbiBieToKKworCUdyZWcgSGVybGVpbiA8Z2hlcmxlaW5AcXVpY2tuZXQubmV0PgorCUVkIE9rZXJzb24gPGVva2Vyc29uQHF1aWNrbmV0Lm5ldD4gCisKKzEuMyAgRnV0dXJlIFBsYW5zOiBZb3UgQ2FuIEhlbHAgCisKK1BsZWFzZSBsZXQgdGhlIG1haW50YWluZXIga25vdyBvZiBhbnkgZXJyb3JzIGluIGZhY3RzLCBvcGluaW9ucywKK2xvZ2ljLCBzcGVsbGluZywgZ3JhbW1hciwgY2xhcml0eSwgbGlua3MsIGV0Yy4gIEJ1dCBmaXJzdCwgaWYgdGhlIGRhdGUKK2lzIG92ZXIgYSBtb250aCBvbGQsIGNoZWNrIHRvIHNlZSB0aGF0IHlvdSBoYXZlIHRoZSBsYXRlc3QKK3ZlcnNpb24uIFBsZWFzZSBzZW5kIGFueSBpbmZvIHRoYXQgeW91IHRoaW5rIGJlbG9uZ3MgaW4gdGhpcyBkb2N1bWVudC4KKworWW91IGNhbiBhbHNvIGNvbnRyaWJ1dGUgY29kZSBhbmQvb3IgYnVnLWZpeGVzIGZvciB0aGUgc2FtcGxlCithcHBsaWNhdGlvbnMuCisKKworMS40ICBXaGVyZSB0byBnZXQgdGhpbmdzCisKK1lvdSBjYW4gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyIGZyb206CisKK2h0dHA6Ly93d3cucXVpY2tuZXQubmV0L2RldmVsb3AuaHRtCisKK1lvdSBjYW4gZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgZnJvbToKKworaHR0cDovL3d3dy5xdWlja25ldC5uZXQvZGV2ZWxvcC5odG0KKworCisxLjUgIE1haWxpbmcgTGlzdAorCitRdWlja25ldCBvcGVyYXRlcyBhIG1haWxpbmcgbGlzdCB0byBwcm92aWRlIGEgcHVibGljIGZvcnVtIG9uIHVzaW5nCit0aGVzZSBkcml2ZXJzLgorCitUbyBzdWJzY3JpYmUgdG8gdGhlIGxpbnV4LXNkayBtYWlsaW5nIGxpc3QsIHNlbmQgYW4gZW1haWwgdG86CisKKyAgIG1ham9yZG9tb0BsaW51eC5xdWlja25ldC5uZXQKKworSW4gdGhlIGJvZHkgb2YgdGhlIGVtYWlsLCB0eXBlOgorCisgICBzdWJzY3JpYmUgbGludXgtc2RrIDx5b3VyLWVtYWlsLWFkZHJlc3M+CisKK1BsZWFzZSBkZWxldGUgYW55IHNpZ25hdHVyZSBibG9jayB0aGF0IHlvdSB3b3VsZCBub3JtYWxseSBhZGQgdG8gdGhlCitib3R0b20gb2YgeW91ciBlbWFpbCAtIGl0IHRlbmRzIHRvIGNvbmZ1c2UgbWFqb3Jkb21vLgorCitUbyBzZW5kIG1haWwgdG8gdGhlIGxpc3QsIGFkZHJlc3MgeW91ciBtYWlsIHRvIAorCisgICBsaW51eC1zZGtAbGludXgucXVpY2tuZXQubmV0CisKK1lvdXIgbWVzc2FnZSB3aWxsIGdvIG91dCB0byBldmVyeW9uZSBvbiB0aGUgbGlzdC4KKworVG8gdW5zdWJzY3JpYmUgdG8gdGhlIGxpbnV4LXNkayBtYWlsaW5nIGxpc3QsIHNlbmQgYW4gZW1haWwgdG86CisKKyAgIG1ham9yZG9tb0BsaW51eC5xdWlja25ldC5uZXQKKworSW4gdGhlIGJvZHkgb2YgdGhlIGVtYWlsLCB0eXBlOgorCisgICB1bnN1YnNjcmliZSBsaW51eC1zZGsgPHlvdXItZW1haWwtYWRkcmVzcz4KKworCisKKzIuMCAgUmVxdWlyZW1lbnRzCisKKzIuMSAgUXVpY2tuZXQgQ2FyZChzKQorCitZb3Ugd2lsbCBuZWVkIGF0IGxlYXN0IG9uZSBJbnRlcm5ldCBQaG9uZUpBQ0sgb3IgSW50ZXJuZXQgTGluZUpBQ0sKK2NhcmRzLiAgVGhlc2UgYXJlIElTQSBvciBQQ0kgYnVzIGRldmljZXMgdGhhdCB1c2UgUGx1Zy1uLVBsYXkgZm9yCitjb25maWd1cmF0aW9uLCBhbmQgdXNlIG5vIElSUXMuICBUaGUgZHJpdmVyIHdpbGwgc3VwcG9ydCB1cCB0byAxNgorY2FyZHMgaW4gYW55IG9uZSBzeXN0ZW0sIG9mIGFueSBtaXggYmV0d2VlbiB0aGUgdHdvIHR5cGVzLgorCitOb3RlIHRoYXQgeW91IHdpbGwgbmVlZCB0d28gY2FyZHMgdG8gZG8gYW55IHVzZWZ1bCB0ZXN0aW5nIGFsb25lLCBzaW5jZQoreW91IHdpbGwgbmVlZCBhIGNhcmQgb24gYm90aCBlbmRzIG9mIHRoZSBjb25uZWN0aW9uLiAgT2YgY291cnNlLCBpZgoreW91IGFyZSBkb2luZyBjb2xsYWJvcmF0aXZlIHdvcmssIHBlcmhhcHMgeW91ciBmcmllbmRzIG9yIGNvd29ya2VycworaGF2ZSBjYXJkcyB0b28uICBJZiBub3QsIHdlJ2xsIGdsYWRseSBzZWxsIHRoZW0gc29tZSEKKworCisyLjIgIElTQVBOUAorCitTaW5jZSB0aGUgUXVpY2tuZXQgY2FyZHMgYXJlIFBsdWctbi1QbGF5IGRldmljZXMsIHlvdSB3aWxsIG5lZWQgdGhlCitpc2FwbnAgdG9vbHMgcGFja2FnZSB0byBjb25maWd1cmUgdGhlIGNhcmRzLCBvciB5b3UgY2FuIHVzZSB0aGUgaXNhcG5wCittb2R1bGUgdG8gYXV0b2NvbmZpZ3VyZSB0aGVtLiAgVGhlIGZvcm1lciBwYWNrYWdlIHByb2JhYmx5IGNhbWUgd2l0aAoreW91ciBMaW51eCBkaXN0cmlidXRpb24uICBEb2N1bWVudGF0aW9uIG9uIHRoaXMgcGFja2FnZSBpcyBhdmFpbGFibGUKK29ubGluZSBhdDoKKworaHR0cDovL21haWxlci53aXdpLnVuaS1tYXJidXJnLmRlL2xpbnV4L0xEUC9IT1dUTy9QbHVnLWFuZC1QbGF5LUhPV1RPLmh0bWwKKworVGhlIGlzYXBucCBhdXRvY29uZmlndXJhdGlvbiBpcyBhdmFpbGFibGUgb24gdGhlIFF1aWNrbmV0IHdlYnNpdGUgYXQ6CisKKyAgICBodHRwOi8vd3d3LnF1aWNrbmV0Lm5ldC9kZXZlbG9wLmh0bQorCit0aG91Z2ggaXQgbWF5IGJlIGluIHRoZSBrZXJuZWwgYnkgdGhlIHRpbWUgeW91IHJlYWQgdGhpcy4KKworCiszLjAgIENhcmQgQ29uZmlndXJhdGlvbiAKKworSWYgeW91IGRpZCBub3QgZ2V0IHlvdXIgZHJpdmVycyBhcyBwYXJ0IG9mIHRoZSBsaW51eCBrZXJuZWwsIGRvIHRoZQorZm9sbG93aW5nIHRvIGluc3RhbGwgdGhlbToKKworICAgYS4gIHVudGFyIHRoZSBkaXN0cmlidXRpb24gZmlsZS4gIFdlIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgIHRhciAteHZ6ZiBpeGotMC54LngudGd6CisKK1RoaXMgY3JlYXRlcyBhIHN1YmRpcmVjdG9yeSBob2xkaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGZpbGVzLiAgR28gdG8gdGhhdAorc3ViZGlyZWN0b3J5LgorCisgICBiLiAgcnVuIHRoZSAiaXhqX2Rldl9jcmVhdGUiIHNjcmlwdCB0byByZW1vdmUgYW55IHN0cmF5IGRldmljZQorZmlsZXMgbGVmdCBpbiB0aGUgL2RldiBkaXJlY3RvcnksIGFuZCB0byBjcmVhdGUgdGhlIG5ldyBvZmZpY2lhbGx5CitkZXNpZ25hdGVkIGRldmljZSBmaWxlcy4gIE5vdGUgdGhhdCB0aGUgb2xkIGRldmljZXMgd2VyZSBjYWxsZWQgCisvZGV2L2l4aiwgYW5kIHRoZSBuZXcgbWV0aG9kIHVzZXMgL2Rldi9waG9uZS4gIAorCisgICBjLiAgdHlwZSAibWFrZTttYWtlIGluc3RhbGwiIC0gdGhpcyB3aWxsIGNvbXBpbGUgYW5kIGluc3RhbGwgdGhlCittb2R1bGUuCisKKyAgIGQuICB0eXBlICJkZXBtb2QgLWF2IiB0byByZWJ1aWxkIGFsbCB5b3VyIGtlcm5lbCB2ZXJzaW9uIGRlcGVuZGVuY2llcy4KKworICAgZS4gIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGlzYXBucCBtb2R1bGUgdG8gY29uZmlndXJlIHRoZSBjYXJkcworICAgICAgIGF1dG9tYXRpY2FsbHksIHRoZW4gc2tpcCB0byBzdGVwIGYuICBPdGhlcndpc2UsIGVuc3VyZSB0aGF0IHlvdQorICAgICAgIGhhdmUgcnVuIHRoZSBpc2FwbnAgY29uZmlndXJhdGlvbiB1dGlsaXR5IHRvIHByb3Blcmx5IGNvbmZpZ3VyZQorICAgICAgIHRoZSBjYXJkcy4KKworICAgICAgIGUxLiBUaGUgSW50ZXJuZXQgUGhvbmVKQUNLIGhhcyBvbmUgY29uZmlndXJhdGlvbiByZWdpc3RlciB0aGF0CisgICAgICAgICAgIHJlcXVpcmVzIDE2IElPIHBvcnRzLiAgVGhlIEludGVybmV0IExpbmVKQUNLIGNhcmQgaGFzIHR3bworICAgICAgICAgICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhbmQgaXNhcG5wIHJlcG9ydHMgdGhhdCBJTyAwCisgICAgICAgICAgIHJlcXVpcmVzIDE2IElPIHBvcnRzIGFuZCBJTyAxIHJlcXVpcmVzIDguICBUaGUgUXVpY2tuZXQKKyAgICAgICAgICAgZHJpdmVyIGFzc3VtZXMgdGhhdCB0aGVzZSByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQgdG8gYmUKKyAgICAgICAgICAgY29udGlndW91cywgaS5lLiBpZiBJTyAwIGlzIHNldCB0byAweDM0MCB0aGVuIElPIDEgc2hvdWxkCisgICAgICAgICAgIGJlIHNldCB0byAweDM1MC4KKworICAgICAgICAgICBNYWtlIHN1cmUgdGhhdCBub25lIG9mIHRoZSBjYXJkcyBvdmVybGFwIGlmIHlvdSBoYXZlCisgICAgICAgICAgIG11bHRpcGxlIGNhcmRzIGluIHRoZSBzeXN0ZW0uCisKKyAgICAgICAgICAgSWYgeW91IGFyZSBuZXcgdG8gdGhlIGlzYXBucCB0b29scywgeW91IGNhbiBqdW1wc3RhcnQKKyAgICAgICAgICAgeW91cnNlbGYgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKworICAgICAgZTIuICBnbyB0byB0aGUgL2V0YyBkaXJlY3RvcnkgYW5kIHJ1biBwbnBkdW1wIHRvIGdldCBhIGJsYW5rCisgICAgICAgICAgIGlzYXBucC5jb25mIGZpbGUuCisKKwkgICAJcG5wZHVtcCA+IC9ldGMvaXNhcG5wLmNvbmYKKworICAgICAgZTMuICBlZGl0IHRoZSAvZXRjL2lzYXBucC5jb25mIGZpbGUgdG8gc2V0IHRoZSBJTyB3YXJuaW5ncyBhbmQKKyAgICAgICAgICAgdGhlIHJlZ2lzdGVyIElPIGFkZHJlc3Nlcy4gVGhlIElPIHdhcm5pbmdzIG1lYW5zIHRoYXQgeW91CisgICAgICAgICAgIHNob3VsZCBmaW5kIHRoZSBsaW5lIGluIHRoZSBmaWxlIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorCisJICAgKENPTkZMSUNUIChJTyBGQVRBTCkoSVJRIEZBVEFMKShETUEgRkFUQUwpKE1FTSBGQVRBTCkpICMgb3IgV0FSTklORworCisJICAgYW5kIHlvdSBzaG91bGQgZWRpdCB0aGUgbGluZSB0byBsb29rIGxpa2UgdGhpczoKKworCSAgIChDT05GTElDVCAoSU8gV0FSTklORykoSVJRIEZBVEFMKShETUEgRkFUQUwpKE1FTSBGQVRBTCkpICMKKwkgICBvciBXQVJOSU5HCisKKyAgICAgICAgICAgVGhlIG5leHQgc3RlcCBpcyB0byBzZXQgdGhlIElPIHBvcnQgYWRkcmVzc2VzLiAgVGhlIGlzc3VlCisgICAgICAgICAgIGhlcmUgaXMgdGhhdCBpc2FwbnAgZG9lcyBub3QgaWRlbnRpZnkgYWxsIG9mIHRoZSBwb3J0cyBvdXQKKyAgICAgICAgICAgdGhlcmUuICBTcGVjaWZpY2FsbHkgYW55IGRldmljZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBkcml2ZXIKKyAgICAgICAgICAgb3IgbW9kdWxlIGxvYWRlZCBieSBMaW51eCB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLiAgVGhpcworICAgICAgICAgICBpbmNsdWRlcyBvbGRlciBzb3VuZCBjYXJkcyBhbmQgbmV0d29yayBjYXJkcy4gIFdlIGhhdmUKKyAgICAgICAgICAgZm91bmQgdGhhdCB0aGUgSU8gcG9ydCAweDMwMCBpcyBvZnRlbiB1c2VkIGV2ZW4gdGhvdWdoCisgICAgICAgICAgIGlzYXBucCBjbGFpbXMgdGhhdCBuby1vbmUgaXMgdXNpbmcgdGhvc2UgcG9ydHMuICBXZQorICAgICAgICAgICByZWNvbW1lbmQgdGhhdCBmb3IgYSBzaW5nbGUgY2FyZCBpbnN0YWxsYXRpb24gdGhhdCBwb3J0CisgICAgICAgICAgIDB4MzQwIChhbmQgMHgzNTApIGJlIHVzZWQuICBUaGUgSU8gcG9ydCBsaW5lIHNob3VsZCBjaGFuZ2UKKyAgICAgICAgICAgZnJvbSB0aGlzOgorCisJICAgKElPIDAgKFNJWkUgMTYpIChCQVNFIDB4MDMwMCkgKENIRUNLKSkKKworCSAgIHRvIHRoaXM6CisKKwkgICAoSU8gMCAoU0laRSAxNikgKEJBU0UgMHgwMzQwKSApCisKKyAgICAgICBlNC4gIGlmIHlvdSBoYXZlIG11bHRpcGxlIFF1aWNrbmV0IGNhcmRzLCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8KKyAgICAgICAgICAgIG5vdCBoYXZlIGFueSBvdmVybGFwcy4gIEJlIGVzcGVjaWFsbHkgY2FyZWZ1bCBpZiB5b3UgYXJlCisgICAgICAgICAgICBtaXhpbmcgSW50ZXJuZXQgUGhvbmVKQUNLIGFuZCBJbnRlcm5ldCBMaW5lSkFDSyBjYXJkcyBpbgorICAgICAgICAgICAgdGhlIHNhbWUgc3lzdGVtLiAgSW4gdGhlc2UgY2FzZXMgd2UgcmVjb21tZW5kIG1vdmluZyB0aGUKKyAgICAgICAgICAgIElPIHBvcnQgYWRkcmVzc2VzIHRvIHRoZSAweDQwMCBibG9jay4gIFBsZWFzZSBub3RlIHRoYXQgb24KKyAgICAgICAgICAgIGEgZmV3IG1hY2hpbmVzIHRoZSAweDQwMCBzZXJpZXMgYXJlIHVzZWQuICBGZWVsIGZyZWUgdG8KKyAgICAgICAgICAgIGV4cGVyaW1lbnQgd2l0aCBvdGhlciBhZGRyZXNzZXMuICBPdXIgY2FyZHMgaGF2ZSBiZWVuCisgICAgICAgICAgICBwcm92ZW4gdG8gd29yayB1c2luZyBJTyBhZGRyZXNzZXMgb2YgdXAgdG8gMHhGRjAuCisKKyAgICAgICBlNS4gIHRoZSBsYXN0IHN0ZXAgaXMgdG8gdW5jb21tZW50IHRoZSBhY3RpdmF0aW9uIGxpbmUgc28gdGhlCisgICAgICAgICAgICBkcml2ZXJzIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0LiAgVGhpcyBtZWFucyB0aGUKKyAgICAgICAgICAgIGxpbmUgKGltbWVkaWF0ZWx5IGJlbG93KSB0aGUgSU8gbGluZSBzaG91bGQgZ28gZnJvbSB0aGlzOgorCisgICAgICAgICAgICAjIChBQ1QgWSkKKworICAgICAgICAgICAgdG8gdGhpczoKKworCSAgICAoQUNUIFkpCisKKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgZmluaXNoZWQgZWRpdGluZyB0aGUgaXNhcG5wLmNvbmYgZmlsZSB5b3UKKyAgICAgICAgICAgIG11c3Qgc3VibWl0IGl0IGludG8gdGhlIHBucCBkcml2ZXJjb25maWd1cmUgdGhlIGNhcmRzLgorICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworCSAgICBpc2FwbnAgaXNhcG5wLmNvbmYKKworCSAgICBJZiB0aGlzIHdvcmtzIHlvdSBzaG91bGQgc2VlIGEgbGluZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgICAgICAgICAgICBRdWlja25ldCBkZXZpY2UsIHRoZSBJTyBwb3J0KHMpIGNob3NlbiwgYW5kIGEgbWVzc2FnZQorICAgICAgICAgICAgIkVuYWJsZWQgT0siLgorCisgICBmLiAgaWYgeW91IGFyZSBsb2FkaW5nIHRoZSBtb2R1bGUgYnkgaGFuZCwgdXNlIGluc21vZC4gIEFuIGV4YW1wbGUKK29mIHRoaXMgd291bGQgbG9vayBsaWtlIHRoaXM6CisKKwlpbnNtb2QgcGhvbmVkZXYKKwlpbnNtb2QgaXhqIGRzcGlvPTB4MzIwLDB4MzEwIHhpbz0wLDB4MzMwCisKK1RoZW4gdmVyaWZ5IHRoZSBtb2R1bGUgbG9hZGVkIGJ5IHJ1bm5pbmcgbHNtb2QuIElmIHlvdSBhcmUgbm90IHVzaW5nIGEKK21vZHVsZSB0aGF0IG1hdGNoZXMgeW91ciBrZXJuZWwgdmVyc2lvbiwgeW91IG1heSBuZWVkIHRvICJmb3JjZSIgdGhlCitsb2FkIHVzaW5nIHRoZSAtZiBvcHRpb24gaW4gdGhlIGluc21vZCBjb21tYW5kLgorCisJaW5zbW9kIHBob25lZGV2CisJaW5zbW9kIC1mIGl4aiBkc3Bpbz0weDMyMCwweDMxMCB4aW89MCwweDMzMAorCisKK0lmIHlvdSBhcmUgdXNpbmcgaXNhcG5wIHRvIGF1dG9jb25maWd1cmUgeW91ciBjYXJkLCB0aGVuIHlvdSBkbyBOT1QKK25lZWQgYW55IG9mIHRoZSBhYm92ZSwgdGhvdWdoIHlvdSBuZWVkIHRvIHVzZSBkZXBtb2QgdG8gbG9hZCB0aGUKK2RyaXZlciwgbGlrZSB0aGlzOgorCisJZGVwbW9kIGl4agorCit3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgbmVlZGVkIGRyaXZlcnMgZ2V0dGluZyBsb2FkZWQgYXV0b21hdGljYWxseS4KKworICAgZy4gIGlmIHlvdSBhcmUgcGxhbm5pbmcgb24gdXNpbmcga2VybmVsZCB0byBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIAorbW9kdWxlIGZvciB5b3UsIHRoZW4geW91IG5lZWQgdG8gZWRpdCAvZXRjL2NvbmYubW9kdWxlcyBhbmQgYWRkIHRoZSAKK2ZvbGxvd2luZyBsaW5lczoKKworCW9wdGlvbnMgaXhqIGRzcGlvPTB4MzQwIHhpbz0weDMzMCBpeGpkZWJ1Zz0wCisKK0lmIHlvdSBkbyB0aGlzLCB0aGVuIHdoZW4geW91IGV4ZWN1dGUgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZQorbW9kdWxlIGtlcm5lbGQgd2lsbCBsb2FkIHRoZSBtb2R1bGUgZm9yIHlvdS4gIE5vdGUgdGhhdCB0byBkbyB0aGlzLAoreW91IG5lZWQgdG8gaGF2ZSB5b3VyIGtlcm5lbCBzZXQgdG8gc3VwcG9ydCBrZXJuZWxkLiAgWW91IGNhbiBjaGVjaworZm9yIHRoaXMgYnkgbG9va2luZyBhdCAvdXNyL3NyYy9saW51eC8uY29uZmlnIGFuZCB5b3Ugc2hvdWxkIHNlZSB0aGlzOgorCisJIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorCSMKKwk8c25pcD4KKwlDT05GSUdfS01PRD15CisKKyAgaC4gIGlmIHlvdSB3YW50IG5vbi1yb290IHVzZXJzIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIAoraXhqIGRldmljZXMgKHRoaXMgaXMgYSBnb29kIGlkZWEhKSB5b3Ugc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgLSBkZWNpZGUgdXBvbiBhIGdyb3VwIG5hbWUgdG8gdXNlIGFuZCBjcmVhdGUgdGhhdCBncm91cCBpZiAKKyAgICAgICBuZWVkZWQuICBBZGQgdGhlIHVzZXIgbmFtZXMgdG8gdGhhdCBncm91cCB0aGF0IHlvdSB3aXNoIHRvIAorICAgICAgIGhhdmUgYWNjZXNzIHRvIHRoZSBkZXZpY2UuICBGb3IgZXhhbXBsZSwgd2UgdHlwaWNhbGx5IHdpbGwKKyAgICAgICBjcmVhdGUgYSBncm91cCBuYW1lZCAiaXhqIiBpbiAvZXRjL2dyb3VwIGFuZCBhZGQgYWxsIHVzZXJzCisgICAgICAgdG8gdGhhdCBncm91cCB0aGF0IHdlIHdhbnQgdG8gcnVuIHNvZnR3YXJlIHRoYXQgY2FuIHVzZSB0aGUgCisgICAgICAgaXhqWCBkZXZpY2VzLgorCisgICAgIC0gY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgZGV2aWNlIGZpbGVzLCBsaWtlIHRoaXM6CisJCisgICAgICAgY2hncnAgaXhqIC9kZXYvaXhqKgkKKyAgICAgICBjaG1vZCA2NjAgL2Rldi9peGoqCisJCitPbmNlIHRoaXMgaXMgZG9uZSwgdGhlbiBub24tcm9vdCB1c2VycyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlCitkZXZpY2VzLiAgSWYgeW91IGhhdmUgZW5hYmxlZCBhdXRvbG9hZGluZyBvZiBtb2R1bGVzLCB0aGVuIHRoZSB1c2VyCitzaG91bGQgYmUgYWJsZSB0byBvcGVuIHRoZSBkZXZpY2UgYW5kIGhhdmUgdGhlIG1vZHVsZSBsb2FkZWQKK2F1dG9tYXRpY2FsbHkgZm9yIHRoZW0uCisKKworNC4wIERyaXZlciBJbnN0YWxsYXRpb24gcHJvYmxlbXMuCisKK1dlIGhhdmUgdGVzdGVkIHRoZXNlIGRyaXZlcnMgb24gdGhlIDIuMi45LCAyLjIuMTAsIDIuMi4xMiwgYW5kIDIuMi4xMyBrZXJuZWxzCithbmQgaW4gYWxsIGNhc2VzIGhhdmUgZXZlbnR1YWxseSBiZWVuIGFibGUgdG8gZ2V0IHRoZSBkcml2ZXJzIHRvIGxvYWQgYW5kIAorcnVuLiAgV2UgaGF2ZSBmb3VuZCBmb3VyIHR5cGVzIG9mIHByb2JsZW1zIHRoYXQgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nLgorVGhlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnMgYXJlOgorCisgIGEuIEEgc3RlcCB3YXMgbWlzc2VkIGluIHRoZSBpbnN0YWxsYXRpb24uICBHbyBiYWNrIGFuZCB1c2Ugc2VjdGlvbiAzCithcyBhIGNoZWNrbGlzdC4gIE1hbnkgcGVvcGxlIG1pc3MgcnVubmluZyB0aGUgaXhqX2Rldl9jcmVhdGUgc2NyaXB0IGFuZCB0aHVzCituZXZlciBsb2FkIHRoZSBkZXZpY2UgbmFtZXMgaW50byB0aGUgZmlsZXN5c3RlbS4KKworICBiLiBUaGUga2VybmVsIGlzIGluY29uc2lzdGVudGx5IGxpbmtlZC4gIFdlIGhhdmUgZm91bmQgdGhpcyBwcm9ibGVtIGluCit0aGUgT3V0IE9mIHRoZSBCb3ggaW5zdGFsbGF0aW9uIG9mIHNldmVyYWwgZGlzdHJpYnV0aW9ucy4gIFRoZSBzeW1wdG9tcyAKK2FyZSB0aGF0IG5laXRoZXIgZHJpdmVyIHdpbGwgbG9hZCwgYW5kIHRoYXQgdGhlIHVua25vd24gc3ltYm9scyBpbmNsdWRlICJqaWZmeSIKK2FuZCAia21hbGxvYyIuICBUaGUgc29sdXRpb24gaXMgdG8gcmVjb21waWxlIGJvdGggdGhlIGtlcm5lbCBhbmQgdGhlCittb2R1bGVzLiAgVGhlIGNvbW1hbmQgc3RyaW5nIGZvciB0aGUgZmluYWwgY29tcGlsZSBsb29rcyBsaWtlIHRoaXM6CisKKyAgICBJbiB0aGUga2VybmVsIGRpcmVjdG9yeToKKyAgICAxLiAgY3AgLmNvbmZpZyAvdG1wCisgICAgMi4gIG1ha2UgbXJwcm9wZXIKKyAgICAzLiAgY3AgL3RtcC8uY29uZmlnIC4KKyAgICA0LgltYWtlIGNsZWFuO21ha2UgYnpJbWFnZTttYWtlIG1vZHVsZXM7bWFrZSBtb2R1bGVzX2luc3RhbGwKKworVGhpcyByZWJ1aWxkcyBib3RoIHRoZSBrZXJuZWwgYW5kIGFsbCB0aGUgbW9kdWxlcyBhbmQgbWFrZXMgc3VyZSB0aGV5IGFsbCAKK2hhdmUgdGhlIHNhbWUgbGlua2FnZXMuICBUaGlzIGdlbmVyYWxseSBzb2x2ZXMgdGhlIHByb2JsZW0gb25jZSB0aGUgbmV3IAora2VybmVsIGlzIGluc3RhbGxlZCBhbmQgdGhlIHN5c3RlbSByZWJvb3RlZC4KKworICBjLiBUaGUga2VybmVsIGhhcyBiZWVuIHBhdGNoZWQsIHRoZW4gdW5wYXRjaGVkLiAgVGhpcyBoYXBwZW5zIHdoZW4KK3NvbWVvbmUgZGVjaWRlcyB0byB1c2UgYW4gZWFybGllciBrZXJuZWwgYWZ0ZXIgdGhleSBsb2FkIGEgbGF0ZXIga2VybmVsLgorVGhlIHN5bXB0b21zIGFyZSBwcm9jZWVkaW5nIHRocm91Z2ggYWxsIHRocmVlIGFib3ZlIHN0ZXBzIGFuZCBzdGlsbCBub3QKK2JlaW5nIGFibGUgdG8gbG9hZCB0aGUgZHJpdmVyLiAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCB0aGUgZ2VuZXJhdGVkCitoZWFkZXIgZmlsZXMgYXJlIG91dCBvZiBzeW5jIHdpdGggdGhlIGtlcm5lbCBpdHNlbGYuICBUaGUgc29sdXRpb24gaXMKK3RvIHJlY29tcGlsZSAoYWdhaW4pIHVzaW5nICJtYWtlIG1ycHJvcGVyIi4gIFRoaXMgd2lsbCByZW1vdmUgYW5kIHRoZW4KK3JlZ2VuZXJhdGUgYWxsIHRoZSBuZWNlc3NhcnkgaGVhZGVyIGZpbGVzLiAgT25jZSB0aGlzIGlzIGRvbmUsIHRoZW4geW91IAorbmVlZCB0byBpbnN0YWxsIGFuZCByZWJvb3QgdGhlIGtlcm5lbC4gIFdlIGhhdmUgbm90IHNlZW4gYW55IHByb2JsZW0KK2xvYWRpbmcgb25lIG9mIG91ciBkcml2ZXJzIGFmdGVyIHRoaXMgdHJlYXRtZW50LgorCis1LjAgIEtub3duIExpbWl0YXRpb25zCisKK1dlIGNhbm5vdCBjdXJyZW50bHkgcGxheSAiZGlhbC10b25lIiBhbmQgbGlzdGVuIGZvciBEVE1GIGRpZ2l0cyBhdCB0aGUKK3NhbWUgdGltZSB1c2luZyB0aGUgSVNBIFBob25lSkFDSy4gIFRoaXMgaXMgYSBidWcgaW4gdGhlIDgwMjAgRFNQIGNoaXAKK3VzZWQgb24gdGhhdCBwcm9kdWN0LiAgQWxsIG90aGVyIFF1aWNrbmV0IHByb2R1Y3RzIGZ1bmN0aW9uIG5vcm1hbGx5CitpbiB0aGlzIHJlZ2FyZC4gIFdlIGhhdmUgYSB3b3JrLWFyb3VuZCwgYnV0IGl0J3Mgbm90IGRvbmUgeWV0LiAgVW50aWwKK3RoZW4sIGlmIHlvdSB3YW50IGRpYWwtdG9uZSwgeW91IGNhbiBhbHdheXMgcGxheSBhIHJlY29yZGVkIGRpYWwtdG9uZQorc291bmQgaW50byB0aGUgYXVkaW8gdW50aWwgeW91IGhhdmUgZ2F0aGVyZWQgdGhlIERUTUYgZGlnaXRzLgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZV9pbnRlcnBvbGF0b3JzLnR4dCBiL0RvY3VtZW50YXRpb24vdGltZV9pbnRlcnBvbGF0b3JzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2I2MDg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lX2ludGVycG9sYXRvcnMudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1RpbWUgSW50ZXJwb2xhdG9ycworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RpbWUgaW50ZXJwb2xhdG9ycyBhcmUgYSBiYXNlIG9mIHRpbWUgY2FsY3VsYXRpb24gYmV0d2VlbiB0aW1lciB0aWNrcyBhbmQKK2FsbG93IGFuIGFjY3VyYXRlIGRldGVybWluYXRpb24gb2YgdGltZSBkb3duIHRvIHRoZSBhY2N1cmFjeSBvZiB0aGUgdGltZQorc291cmNlIGluIG5hbm9zZWNvbmRzLgorCitUaGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgdHlwaWNhbGx5IHByb3ZpZGVzIGdldHRpbWVvZmRheSBhbmQKK3NldHRpbWVvZmRheSB1bmRlciBMaW51eC4gVGhlIHRpbWUgaW50ZXJwb2xhdG9yIHByb3ZpZGVzIGJvdGggaWYgYW4gYXJjaAorZGVmaW5lcyBDT05GSUdfVElNRV9JTlRFUlBPTEFUSU9OLiBUaGUgYXJjaCBzdGlsbCBtdXN0IHNldCB1cCB0aW1lciB0aWNrCitvcGVyYXRpb25zIGFuZCBjYWxsIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25zIHRvIGFkdmFuY2UgdGhlIGNsb2NrLgorCitXaXRoIHRoZSB0aW1lIGludGVycG9sYXRvciBhIHN0YW5kYXJkaXplZCBpbnRlcmZhY2UgZXhpc3RzIGZvciB0aW1lCitpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGlja3MuIFRoZSBwcm92aWRlZCBsb2dpYyBpcyBoaWdobHkgc2NhbGFibGUKK2FuZCBoYXMgYmVlbiB0ZXN0ZWQgaW4gU01QIHNpdHVhdGlvbnMgb2YgdXAgdG8gNTEyIENQVXMuCisKK0lmIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT04gaXMgZGVmaW5lZCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZQorKG9yIHRoZSBkZXZpY2UgZHJpdmVycyAtIGxpa2UgSFBFVCkgbWF5IHJlZ2lzdGVyIHRpbWUgaW50ZXJwb2xhdG9ycy4KK1RoZXNlIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIHdheToKKworc3RhdGljIHN0cnVjdCB0aW1lX2ludGVycG9sYXRvciBteV9pbnRlcnBvbGF0b3IgeworCS5mcmVxdWVuY3kgPSBNWV9GUkVRVUVOQ1ksCisJLnNvdXJjZSA9IFRJTUVfU09VUkNFX01NSU8zMiwKKwkuc2hpZnQgPSA4LAkJLyogc2NhbGluZyBmb3IgaGlnaGVyIGFjY3VyYWN5ICovCisJLmRyaWZ0ID0gLTEsCQkvKiBVbmtub3duIGRyaWZ0ICovCisJLmppdHRlciA9IDAJCS8qIHRpbWUgc291cmNlIGlzIHN0YWJsZSAqLworfTsKKwordm9pZCB0aW1lX2luaXQodm9pZCkKK3sKKwkuLi4uCisJLyogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHRpbWVyICouCisJbXlfaW50ZXJwb2xhdG9yLmFkZHJlc3MgPSAmbXlfdGltZXI7CisJcmVnaXN0ZXJfdGltZV9pbnRlcnBvbGF0b3IoJm15X2ludGVycG9sYXRvcik7CisJLi4uLgorfQorCitGb3IgbW9yZSBkZXRhaWxzIHNlZSBpbmNsdWRlL2xpbnV4L3RpbWV4LmggYW5kIGtlcm5lbC90aW1lci5jLgorCitDaHJpc3RvcGggTGFtZXRlciA8Y2hyaXN0b3BoQGxhbWV0ZXIuY29tPiwgT2N0b2JlciAzMSwgMjAwNAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RpcGFyLnR4dCBiL0RvY3VtZW50YXRpb24vdGlwYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTMzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RpcGFyLnR4dApAQCAtMCwwICsxLDkzIEBACisKKwkJUGFyYWxsZWwgbGluayBjYWJsZSBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgaGFuZGhlbGRzCisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0F1dGhvcjogUm9tYWluIExpZXZpbgorSG9tZXBhZ2U6IGh0dHA6Ly9scGcudGljYWxjLm9yZy9wcmpfdGlkZXYvaW5kZXguaHRtbAorCisKK0lOVFJPRFVDVElPTjoKKworVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIHZlcnkgY29tbW9uIGhvbWUtbWFkZSBwYXJhbGxlbCBsaW5rIGNhYmxlLCBhIGNhYmxlIAorZGVzaWduZWQgZm9yIGNvbm5lY3RpbmcgVEk4eC85eCBncmFwaGluZyBjYWxjdWxhdG9ycyAoaGFuZGhlbGRzKSB0byBhIGNvbXB1dGVyCitvciB3b3Jrc3RhdGlvbiAoQWxwaGEsIFNwYXJjKS4gR2l2ZW4gdGhhdCBkcml2ZXIgaXMgYnVpbHQgb24gcGFycG9ydCwgdGhlIAorcGFyYWxsZWwgcG9ydCBhYnN0cmFjdGlvbiBsYXllciwgdGhpcyBkcml2ZXIgaXMgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50LgorCitJdCBjYW4gYWxzbyBiZSB1c2VkIHdpdGggYW5vdGhlciBkZXZpY2UgcGx1Z2dlZCBvbiB0aGUgc2FtZSBwb3J0IChzdWNoIGFzIGEKK1pJUCBkcml2ZSkuIEkgaGF2ZSBhIDEwME1CIFpJUCBhbmQgYm90aCBvZiB0aGVtIHdvcmsgZmluZSEKKworSWYgeW91IG5lZWQgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpc2l0IHRoZSAnVEkgZHJpdmVycycgaG9tZXBhZ2UgYXQgdGhlIFVSTAorYWJvdmUuCisKK1dIQVQgWU9VIE5FRUQ6CisKK0EgVEkgY2FsY3VsYXRvciBhbmQgYSBwcm9ncmFtIGNhcGFibGUgb2YgY29tbXVuaWNhdGluZyB3aXRoIHlvdXIgY2FsY3VsYXRvci4KKworVGlMUCB3aWxsIHdvcmsgZm9yIHN1cmUgKHNpbmNlIEkgYW0gaXRzIGRldmVsb3BlciEpLiB5YWw5MiBtYXkgYmUgYWJsZSB0byB1c2UKK2l0IGJ5IGNoYW5naW5nIHRpZGV2IGZvciB0aXBhciAobWF5IHJlcXVpcmUgc29tZSBoYWNraW5nLi4uKS4KKworSE9XIFRPIFVTRSBJVDoKKworWW91IG11c3QgaGF2ZSBmaXJzdCBjb21waWxlZCBwYXJwb3J0IHN1cHBvcnQgKENPTkZJR19QQVJQT1JUX0RFVik6IGVpdGhlciAKK2NvbXBpbGVkIGluIHlvdXIga2VybmVsLCBlaXRoZXIgYXMgYSBtb2R1bGUuIAorCitOZXh0LCAoYXMgcm9vdCk6CisKKyAgICAgICBtb2Rwcm9iZSBwYXJwb3J0CisgICAgICAgbW9kcHJvYmUgdGlwYXIKKworSWYgaXQgaXMgbm90IGFscmVhZHkgdGhlcmUgKGl0IHVzdWFsbHkgaXMpLCBjcmVhdGUgdGhlIGRldmljZToKKworICAgICAgIG1rbm9kIC9kZXYvdGlwYXIwIGMgMTE1IDAKKyAgICAgICBta25vZCAvZGV2L3RpcGFyMSBjIDExNSAxCisgICAgICAgbWtub2QgL2Rldi90aXBhcjIgYyAxMTUgMgorCitZb3Ugd2lsbCBoYXZlIHRvIHNldCBwZXJtaXNzaW9ucyBvbiB0aGlzIGRldmljZSB0byBhbGxvdyB5b3UgdG8gcmVhZC93cml0ZQorZnJvbSBpdDoKKworICAgICAgIGNobW9kIDY2NiAvZGV2L3RpcGFyWzAuLjJdCisgICAgICAgCitOb3cgeW91IGFyZSByZWFkeSB0byBydW4gYSBsaW5raW5nIHByb2dyYW0gc3VjaCBhcyBUaUxQLiBCZSBzdXJlIHRvIGNvbmZpZ3VyZSAKK2l0IHByb3Blcmx5IChSVEZNKS4KKyAgICAgICAKK01PRFVMRSBQQVJBTUVURVJTOgorCisgIFlvdSBjYW4gc2V0IHRoZXNlIHdpdGg6ICBtb2Rwcm9iZSB0aXBhciBOQU1FPVZBTFVFCisgIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gc2V0IHRoZXNlIG9uIGEgcGVyLWNhYmxlIGJhc2lzLgorCisgIE5BTUU6IHRpbWVvdXQKKyAgVFlQRTogaW50ZWdlcgorICBERUZBVUxUOiAxNQorICBERVNDOiBUaW1lb3V0IHZhbHVlIGluIHRlbnRoIG9mIHNlY29uZHMuIElmIG5vIGRhdGEgaXMgYXZhaWxhYmxlIG9uY2UgdGhpcyAKKwl0aW1lIGhhcyBleHBpcmVkIHRoZW4gdGhlIGRyaXZlciB3aWxsIHJldHVybiB3aXRoIGEgdGltZW91dCBlcnJvci4KKworICBOQU1FOiBkZWxheQorICBUWVBFOiBpbnRlZ2VyCisgIERFRkFVTFQ6IDEwCisgIERFU0M6IEludGVyLWJpdCBkZWxheSBpbiBtaWNyby1zZWNvbmRzLiBBIGxvd2VyIHZhbHVlIGdpdmVzIGFuIGhpZ2hlciBkYXRhCisJcmF0ZSBidXQgbWFrZXMgdHJhbnNtaXNzaW9uIGxlc3MgcmVsaWFibGUuCisKK1RoZXNlIHBhcmFtZXRlcnMgY2FuIGJlIGNoYW5nZWQgYXQgcnVuIHRpbWUgYnkgYW55IHByb2dyYW0gdmlhIGlvY3RsKDIpIGNhbGxzIAorYXMgbGlzdGVkIGluIC4vaW5jbHVkZS9saW51eC90aWNhYmxlLmguCisKK1JhdGhlciB0aGFuIHdyaXRlIDUwIHBhZ2VzIGRlc2NyaWJpbmcgdGhlIGlvY3RsKCkgYW5kIHNvIG9uLCBpdCBpcworcGVyaGFwcyBtb3JlIHVzZWZ1bCB5b3UgbG9vayBhdCB0aWNhYmxlcyBsaWJyYXJ5IChkZXZfbGluay5jKSB0aGF0IGRlbW9uc3RyYXRlcworaG93IHRvIHVzZSB0aGVtLCBhbmQgZGVtb25zdHJhdGVzIHRoZSBmZWF0dXJlcyBvZiB0aGUgZHJpdmVyLiBUaGlzIGlzCitwcm9iYWJseSBhIGxvdCBtb3JlIHVzZWZ1bCB0byBwZW9wbGUgaW50ZXJlc3RlZCBpbiB3cml0aW5nIGFwcGxpY2F0aW9ucwordGhhdCB3aWxsIGJlIHVzaW5nIHRoaXMgZHJpdmVyLgorCitRVUlSS1MvQlVHUzoKKworTm9uZS4KKworSE9XIFRPIENPTlRBQ1QgVVM6CisKK1lvdSBjYW4gZW1haWwgbWUgYXQgcm9tc0BscGcudGljYWxjLm9yZy4gUGxlYXNlIHByZWZpeCB0aGUgc3ViamVjdCBsaW5lCit3aXRoICJUSVBBUjogIiBzbyB0aGF0IEkgYW0gY2VydGFpbiB0byBub3RpY2UgeW91ciBtZXNzYWdlLgorWW91IGNhbiBhbHNvIG1haWwgSkIgYXQgamJAamJsYWNoZS5vcmcuIEhlIHBhY2thZ2VkIHRoZXNlIGRyaXZlcnMgZm9yIERlYmlhbi4KKworQ1JFRElUUzoKKworVGhlIGNvZGUgaXMgYmFzZWQgb24gdGlkZXYuYyAmIHBhcnBvcnQuYy4KK1RoZSBkcml2ZXIgaGFzIGJlZW4gZGV2ZWxvcGVkIGluZGVwZW5kZW50bHkgb2YgVGV4YXMgSW5zdHJ1bWVudHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3R0eS50eHQgYi9Eb2N1bWVudGF0aW9uL3R0eS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1OGNmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHR5LnR4dApAQCAtMCwwICsxLDE5OCBAQAorCisJCQlUaGUgTG9ja3Jvbm9taWNvbgorCitZb3VyIGd1aWRlIHRvIHRoZSBhbmNpZW50IGFuZCB0d2lzdGVkIGxvY2tpbmcgcG9saWNpZXMgb2YgdGhlIHR0eSBsYXllciBhbmQKK3RoZSB3YXJwZWQgbG9naWMgYmVoaW5kIHRoZW0uIEJld2FyZSBhbGwgeWUgd2hvIHJlYWQgb24uCisKK0ZJWE1FOiBzdGlsbCBuZWVkIHRvIHdvcmsgb3V0IHRoZSBmdWxsIHNldCBvZiBCS0wgYXNzdW1wdGlvbnMgYW5kIGRvY3VtZW50Cit0aGVtIHNvIHRoZXkgY2FuIGV2ZW50dWFsbHkgYmUga2lsbGVkIG9mZi4KKworCitMaW5lIERpc2NpcGxpbmUKKy0tLS0tLS0tLS0tLS0tLQorCitMaW5lIGRpc2NpcGxpbmVzIGFyZSByZWdpc3RlcmVkIHdpdGggdHR5X3JlZ2lzdGVyX2xkaXNjKCkgcGFzc2luZyB0aGUKK2Rpc2NpcGxpbmUgbnVtYmVyIGFuZCB0aGUgbGRpc2Mgc3RydWN0dXJlLiBBdCB0aGUgcG9pbnQgb2YgcmVnaXN0cmF0aW9uIHRoZSAKK2Rpc2NpcGxpbmUgbXVzdCBiZSByZWFkeSB0byB1c2UgYW5kIGl0IGlzIHBvc3NpYmxlIGl0IHdpbGwgZ2V0IHVzZWQgYmVmb3JlCit0aGUgY2FsbCByZXR1cm5zIHN1Y2Nlc3MuIElmIHRoZSBjYWxsIHJldHVybnMgYW4gZXJyb3IgdGhlbiBpdCB3b24ndCBnZXQKK2NhbGxlZC4gRG8gbm90IHJlLXVzZSBsZGlzYyBudW1iZXJzIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHVzZXJzcGFjZSBBQkkKK2FuZCB3cml0aW5nIG92ZXIgYW4gZXhpc3RpbmcgbGRpc2Mgd2lsbCBjYXVzZSBkZW1vbnMgdG8gZWF0IHlvdXIgY29tcHV0ZXIuCitBZnRlciB0aGUgcmV0dXJuIHRoZSBsZGlzYyBkYXRhIGhhcyBiZWVuIGNvcGllZCBzbyB5b3UgbWF5IGZyZWUgeW91ciBvd24gCitjb3B5IG9mIHRoZSBzdHJ1Y3R1cmUuIFlvdSBtdXN0IG5vdCByZS1yZWdpc3RlciBvdmVyIHRoZSB0b3Agb2YgdGhlIGxpbmUKK2Rpc2NpcGxpbmUgZXZlbiB3aXRoIHRoZSBzYW1lIGRhdGEgb3IgeW91ciBjb21wdXRlciBhZ2FpbiB3aWxsIGJlIGVhdGVuIGJ5CitkZW1vbnMuCisKK0luIG9yZGVyIHRvIHJlbW92ZSBhIGxpbmUgZGlzY2lwbGluZSBjYWxsIHR0eV9yZWdpc3Rlcl9sZGlzYyBwYXNzaW5nIE5VTEwuCitJbiBhbmNpZW50IHRpbWVzIHRoaXMgYWx3YXlzIHdvcmtlZC4gSW4gbW9kZXJuIHRpbWVzIHRoZSBmdW5jdGlvbiB3aWxsCityZXR1cm4gLUVCVVNZIGlmIHRoZSBsZGlzYyBpcyBjdXJyZW50bHkgaW4gdXNlLiBTaW5jZSB0aGUgbGRpc2MgcmVmZXJlbmNpbmcKK2NvZGUgbWFuYWdlcyB0aGUgbW9kdWxlIGNvdW50cyB0aGlzIHNob3VsZCBub3QgdXN1YWxseSBiZSBhIGNvbmNlcm4uCisKK0hlZWQgdGhpcyB3YXJuaW5nOiB0aGUgcmVmZXJlbmNlIGNvdW50IGZpZWxkIG9mIHRoZSByZWdpc3RlcmVkIGNvcGllcyBvZiB0aGUKK3R0eV9sZGlzYyBzdHJ1Y3R1cmUgaW4gdGhlIGxkaXNjIHRhYmxlIGNvdW50cyB0aGUgbnVtYmVyIG9mIGxpbmVzIHVzaW5nIHRoaXMKK2Rpc2NpcGxpbmUuIFRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHR0eV9sZGlzYyBzdHJ1Y3R1cmUgd2l0aGluIGEgdHR5IAorY291bnRzIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVzZXJzIG9mIHRoZSBsZGlzYyBhdCB0aGlzIGluc3RhbnQuIEluIGVmZmVjdCBpdAorY291bnRzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBvZiBleGVjdXRpb24gd2l0aGluIGFuIGxkaXNjIG1ldGhvZCAocGx1cyB0aG9zZQorYWJvdXQgdG8gZW50ZXIgYW5kIGV4aXQgYWx0aG91Z2ggdGhpcyBkZXRhaWwgbWF0dGVycyBub3QpLgorCitMaW5lIERpc2NpcGxpbmUgTWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVFRZIHNpZGUgaW50ZXJmYWNlczoKKworY2xvc2UoKQkJLQlUaGlzIGlzIGNhbGxlZCBvbiBhIHRlcm1pbmFsIHdoZW4gdGhlIGxpbmUKKwkJCWRpc2NpcGxpbmUgaXMgYmVpbmcgdW5wbHVnZ2VkLiBBdCB0aGUgcG9pbnQgb2YKKwkJCWV4ZWN1dGlvbiBubyBmdXJ0aGVyIHVzZXJzIHdpbGwgZW50ZXIgdGhlCisJCQlsZGlzYyBjb2RlIGZvciB0aGlzIHR0eS4gQ2FuIHNsZWVwLgorCitvcGVuKCkJCS0JQ2FsbGVkIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBpcyBhdHRhY2hlZCB0bworCQkJdGhlIHRlcm1pbmFsLiBObyBvdGhlciBjYWxsIGludG8gdGhlIGxpbmUKKwkJCWRpc2NpcGxpbmUgZm9yIHRoaXMgdHR5IHdpbGwgb2NjdXIgdW50aWwgaXQKKwkJCWNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuIENhbiBzbGVlcC4KKword3JpdGUoKQkJLQlBIHByb2Nlc3MgaXMgd3JpdGluZyBkYXRhIHRocm91Z2ggdGhlIGxpbmUKKwkJCWRpc2NpcGxpbmUuICBNdWx0aXBsZSB3cml0ZSBjYWxscyBhcmUgc2VyaWFsaXplZAorCQkJYnkgdGhlIHR0eSBsYXllciBmb3IgdGhlIGxkaXNjLiAgTWF5IHNsZWVwLiAKKworZmx1c2hfYnVmZmVyKCkJLQlNYXkgYmUgY2FsbGVkIGF0IGFueSBwb2ludCBiZXR3ZWVuIG9wZW4gYW5kIGNsb3NlLgorCitjaGFyc19pbl9idWZmZXIoKSAtCVJlcG9ydCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIuCisKK3NldF90ZXJtaW9zKCkJLQlDYWxsZWQgb24gdGVybWlvcyBzdHJ1Y3R1cmUgY2hhbmdlcy4gVGhlIGNhbGxlcgorCQkJcGFzc2VzIHRoZSBvbGQgdGVybWlvcyBkYXRhIGFuZCB0aGUgY3VycmVudCBkYXRhCisJCQlpcyBpbiB0aGUgdHR5LiBDYWxsZWQgdW5kZXIgdGhlIHRlcm1pb3Mgc2VtYXBob3JlIHNvCisJCQlhbGxvd2VkIHRvIHNsZWVwLiBTZXJpYWxpemVkIGFnYWluc3QgaXRzZWxmIG9ubHkuCisKK3JlYWQoKQkJLQlNb3ZlIGRhdGEgZnJvbSB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIHRoZSB1c2VyLgorCQkJTXVsdGlwbGUgcmVhZCBjYWxscyBtYXkgb2NjdXIgaW4gcGFyYWxsZWwgYW5kIHRoZQorCQkJbGRpc2MgbXVzdCBkZWFsIHdpdGggc2VyaWFsaXphdGlvbiBpc3N1ZXMuIE1heSAKKwkJCXNsZWVwLgorCitwb2xsKCkJCS0JQ2hlY2sgdGhlIHN0YXR1cyBmb3IgdGhlIHBvbGwvc2VsZWN0IGNhbGxzLiBNdWx0aXBsZQorCQkJcG9sbCBjYWxscyBtYXkgb2NjdXIgaW4gcGFyYWxsZWwuIE1heSBzbGVlcC4KKworaW9jdGwoKQkJLQlDYWxsZWQgd2hlbiBhbiBpb2N0bCBpcyBoYW5kZWQgdG8gdGhlIHR0eSBsYXllcgorCQkJdGhhdCBtaWdodCBiZSBmb3IgdGhlIGxkaXNjLiBNdWx0aXBsZSBpb2N0bCBjYWxscworCQkJbWF5IG9jY3VyIGluIHBhcmFsbGVsLiBNYXkgc2xlZXAuIAorCitEcml2ZXIgU2lkZSBJbnRlcmZhY2VzOgorCityZWNlaXZlX2J1ZigpCS0JSGFuZCBidWZmZXJzIG9mIGJ5dGVzIGZyb20gdGhlIGRyaXZlciB0byB0aGUgbGRpc2MKKwkJCWZvciBwcm9jZXNzaW5nLiBTZW1hbnRpY3MgY3VycmVudGx5IHJhdGhlcgorCQkJbXlzdGVyaW91cyA4KAorCityZWNlaXZlX3Jvb20oKQktCUNhbiBiZSBjYWxsZWQgYnkgdGhlIGRyaXZlciBsYXllciBhdCBhbnkgdGltZSB3aGVuCisJCQl0aGUgbGRpc2MgaXMgb3BlbmVkLiBUaGUgbGRpc2MgbXVzdCBiZSBhYmxlIHRvCisJCQloYW5kbGUgdGhlIHJlcG9ydGVkIGFtb3VudCBvZiBkYXRhIGF0IHRoYXQgaW5zdGFudC4KKwkJCVN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGFjdGl2ZSByZWNlaXZlX2J1ZiBhbmQKKwkJCXJlY2VpdmVfcm9vbSBjYWxscyBpcyBkb3duIHRvIHRoZSBkcml2ZXIgbm90IHRoZQorCQkJbGRpc2MuIE11c3Qgbm90IHNsZWVwLgorCit3cml0ZV93YWtldXAoKQktCU1heSBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGJldHdlZW4gb3BlbiBhbmQgY2xvc2UuCisJCQlUaGUgVFRZX0RPX1dSSVRFX1dBS0VVUCBmbGFnIGluZGljYXRlcyBpZiBhIGNhbGwKKwkJCWlzIG5lZWRlZCBidXQgYWx3YXlzIHJhY2VzIHZlcnN1cyBjYWxscy4gVGh1cyB0aGUKKwkJCWxkaXNjIG11c3QgYmUgY2FyZWZ1bCBhYm91dCBzZXR0aW5nIG9yZGVyIGFuZCB0bworCQkJaGFuZGxlIHVuZXhwZWN0ZWQgY2FsbHMuIE11c3Qgbm90IHNsZWVwLgorCisJCQlUaGUgZHJpdmVyIGlzIGZvcmJpZGRlbiBmcm9tIGNhbGxpbmcgdGhpcyBkaXJlY3RseQorCQkJZnJvbSB0aGUgLT53cml0ZSBjYWxsIGZyb20gdGhlIGxkaXNjIGFzIHRoZSBsZGlzYworCQkJaXMgcGVybWl0dGVkIHRvIGNhbGwgdGhlIGRyaXZlciB3cml0ZSBtZXRob2QgZnJvbQorCQkJdGhpcyBmdW5jdGlvbi4gSW4gc3VjaCBhIHNpdHVhdGlvbiBkZWZlciBpdC4KKworCitMb2NraW5nCisKK0NhbGxlcnMgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBmdW5jdGlvbnMgZnJvbSB0aGUgdHR5IGxheWVyIGFyZSByZXF1aXJlZCB0bwordGFrZSBsaW5lIGRpc2NpcGxpbmUgbG9ja3MuIFRoZSBzYW1lIGlzIHRydWUgb2YgY2FsbHMgZnJvbSB0aGUgZHJpdmVyIHNpZGUKK2J1dCBub3QgeWV0IGVuZm9yY2VkLgorCitUaHJlZSBjYWxscyBhcmUgbm93IHByb3ZpZGVkCisKKwlsZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwordGFrZXMgYSBoYW5kbGUgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBpbiB0aGUgdHR5IGFuZCByZXR1cm5zIGl0LiBJZiBubyBsZGlzYworaXMgY3VycmVudGx5IGF0dGFjaGVkIG9yIHRoZSBsZGlzYyBpcyBiZWluZyBjbG9zZWQgYW5kIHJlLW9wZW5lZCBhdCB0aGlzCitwb2ludCB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuIFdoaWxlIHRoaXMgaGFuZGxlIGlzIGhlbGQgdGhlIGxkaXNjIHdpbGwgbm90CitjaGFuZ2Ugb3IgZ28gYXdheS4KKworCXR0eV9sZGlzY19kZXJlZihsZGlzYykKKworUmV0dXJucyB0aGUgbGRpc2MgcmVmZXJlbmNlIGFuZCBhbGxvd3MgdGhlIGxkaXNjIHRvIGJlIGNsb3NlZC4gUmV0dXJuaW5nIHRoZQorcmVmZXJlbmNlIHRha2VzIGF3YXkgeW91ciByaWdodCB0byBjYWxsIHRoZSBsZGlzYyBmdW5jdGlvbnMgdW50aWwgeW91IHRha2UKK2EgbmV3IHJlZmVyZW5jZS4KKworCWxkaXNjID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7CisKK1BlcmZvcm1zIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIHR0eV9sZGlzY19yZWYgZXhjZXB0IHRoYXQgaXQgd2lsbCB3YWl0IGZvciBhbgorbGRpc2MgY2hhbmdlIHRvIGNvbXBsZXRlIGFuZCB0aGVuIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbmV3IGxkaXNjLiAKKworV2hpbGUgdGhlc2UgZnVuY3Rpb25zIGFyZSBzbGlnaHRseSBzbG93ZXIgdGhhbiB0aGUgb2xkIGNvZGUgdGhleSBzaG91bGQgaGF2ZQorbWluaW1hbCBpbXBhY3QgYXMgbW9zdCByZWNlaXZlIGxvZ2ljIHVzZXMgdGhlIGZsaXAgYnVmZmVycyBhbmQgdGhleSBvbmx5CituZWVkIHRvIHRha2UgYSByZWZlcmVuY2Ugd2hlbiB0aGV5IHB1c2ggYml0cyB1cCB0aHJvdWdoIHRoZSBkcml2ZXIuCisKK0EgY2F1dGlvbjogVGhlIGxkaXNjLT5vcGVuKCksIGxkaXNjLT5jbG9zZSgpIGFuZCBkcml2ZXItPnNldF9sZGlzYyAKK2Z1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggdGhlIGxkaXNjIHVuYXZhaWxhYmxlLiBUaHVzIHR0eV9sZGlzY19yZWYgd2lsbAorZmFpbCBpbiB0aGlzIHNpdHVhdGlvbiBpZiB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIExkaXNjIGFuZCBkcml2ZXIKK2NvZGUgY2FsbGluZyBpdHMgb3duIGZ1bmN0aW9ucyBtdXN0IGJlIGNhcmVmdWwgaW4gdGhpcyBjYXNlLiAKKworCitEcml2ZXIgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCisKK29wZW4oKQkJLQlDYWxsZWQgd2hlbiBhIGRldmljZSBpcyBvcGVuZWQuIE1heSBzbGVlcAorCitjbG9zZSgpCQktCUNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIGNsb3NlZC4gQXQgdGhlIHBvaW50IG9mCisJCQlyZXR1cm4gZnJvbSB0aGlzIGNhbGwgdGhlIGRyaXZlciBtdXN0IG1ha2Ugbm8gCisJCQlmdXJ0aGVyIGxkaXNjIGNhbGxzIG9mIGFueSBraW5kLiBNYXkgc2xlZXAKKword3JpdGUoKQkJLQlDYWxsZWQgdG8gd3JpdGUgYnl0ZXMgdG8gdGhlIGRldmljZS4gTWF5IG5vdAorCQkJc2xlZXAuIE1heSBvY2N1ciBpbiBwYXJhbGxlbCBpbiBzcGVjaWFsIGNhc2VzLiAKKwkJCUJlY2F1c2UgdGhpcyBpbmNsdWRlcyBwYW5pYyBwYXRocyBkcml2ZXJzIGdlbmVyYWxseQorCQkJc2hvdWxkbid0IHRyeSBhbmQgZG8gY2xldmVyIGxvY2tpbmcgaGVyZS4KKworcHV0X2NoYXIoKQktCVN0dWZmIGEgc2luZ2xlIGNoYXJhY3RlciBvbnRvIHRoZSBxdWV1ZS4gVGhlCisJCQlkcml2ZXIgaXMgZ3VhcmFudGVlZCBmb2xsb3dpbmcgdXAgY2FsbHMgdG8KKwkJCWZsdXNoX2NoYXJzLgorCitmbHVzaF9jaGFycygpCS0JQXNrIHRoZSBrZXJuZWwgdG8gd3JpdGUgcHV0X2NoYXIgcXVldWUKKword3JpdGVfcm9vbSgpCS0JUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aHQgY2FuIGJlIHN0dWZmZWQKKwkJCWludG8gdGhlIHBvcnQgYnVmZmVycyB3aXRob3V0IG92ZXJmbG93IChvciBsZXNzKS4KKwkJCVRoZSBsZGlzYyBpcyByZXNwb25zaWJsZSBmb3IgYmVpbmcgaW50ZWxsaWdlbnQKKyAJCQlhYm91dCBtdWx0aS10aHJlYWRpbmcgb2Ygd3JpdGVfcm9vbS93cml0ZSBjYWxscworCitpb2N0bCgpCQktCUNhbGxlZCB3aGVuIGFuIGlvY3RsIG1heSBiZSBmb3IgdGhlIGRyaXZlcgorCitzZXRfdGVybWlvcygpCS0JQ2FsbGVkIG9uIHRlcm1pb3MgY2hhbmdlLCBzZXJpYWxpemVkIGFnYWluc3QKKwkJCWl0c2VsZiBieSBhIHNlbWFwaG9yZS4gTWF5IHNsZWVwLgorCitzZXRfbGRpc2MoKQktCU5vdGlmaWVyIGZvciBkaXNjaXBsaW5lIGNoYW5nZS4gQXQgdGhlIHBvaW50IHRoaXMgCisJCQlpcyBkb25lIHRoZSBkaXNjaXBsaW5lIGlzIG5vdCB5ZXQgdXNhYmxlLiBDYW4gbm93CisJCQlzbGVlcCAoSSB0aGluaykKKwordGhyb3R0bGUoKQktCUNhbGxlZCBieSB0aGUgbGRpc2MgdG8gYXNrIHRoZSBkcml2ZXIgdG8gZG8gZmxvdworCQkJY29udHJvbC4gIFNlcmlhbGl6YXRpb24gaW5jbHVkaW5nIHdpdGggdW50aHJvdHRsZQorCQkJaXMgdGhlIGpvYiBvZiB0aGUgbGRpc2MgbGF5ZXIuCisKK3VudGhyb3R0bGUoKQktCUNhbGxlZCBieSB0aGUgbGRpc2MgdG8gYXNrIHRoZSBkcml2ZXIgdG8gc3RvcCBmbG93CisJCQljb250cm9sLgorCitzdG9wKCkJCS0JTGRpc2Mgbm90aWZpZXIgdG8gdGhlIGRyaXZlciB0byBzdG9wIG91dHB1dC4gQXMgd2l0aAorCQkJdGhyb3R0bGUgdGhlIHNlcmlhbGl6YXRpb25zIHdpdGggc3RhcnQoKSBhcmUgZG93bgorCQkJdG8gdGhlIGxkaXNjIGxheWVyLgorCitzdGFydCgpCQktCUxkaXNjIG5vdGlmaWVyIHRvIHRoZSBkcml2ZXIgdG8gc3RhcnQgb3V0cHV0LgorCitoYW5ndXAoKQktCUFzayB0aGUgdHR5IGRyaXZlciB0byBjYXVzZSBhIGhhbmd1cCBpbml0aWF0ZWQKKwkJCWZyb20gdGhlIGhvc3Qgc2lkZS4gW0NhbiBzbGVlcCA/P10KKworYnJlYWtfY3RsKCkJLQlTZW5kIFJTMjMyIGJyZWFrLiBDYW4gc2xlZXAuIENhbiBnZXQgY2FsbGVkIGluCisJCQlwYXJhbGxlbCwgZHJpdmVyIG11c3Qgc2VyaWFsaXplIChmb3Igbm93KSwgYW5kCisJCQl3aXRoIHdyaXRlIGNhbGxzLgorCit3YWl0X3VudGlsX3NlbnQoKSAtCVdhaXQgZm9yIGNoYXJhY3RlcnMgdG8gZXhpdCB0aGUgaGFyZHdhcmUgcXVldWUKKwkJCW9mIHRoZSBkcml2ZXIuIENhbiBzbGVlcAorCitzZW5kX3hjaGFyKCkJICAtCVNlbmQgWE9OL1hPRkYgYW5kIGlmIHBvc3NpYmxlIGp1bXAgdGhlIHF1ZXVlIHdpdGgKKwkJCWl0IGluIG9yZGVyIHRvIGdldCBmYXN0IGZsb3cgY29udHJvbCByZXNwb25zZXMuCisJCQlDYW5ub3Qgc2xlZXAgPz8KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91bWwvVXNlck1vZGVMaW51eC1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL3VtbC9Vc2VyTW9kZUxpbnV4LUhPV1RPLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzdiNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91bWwvVXNlck1vZGVMaW51eC1IT1dUTy50eHQKQEAgLTAsMCArMSw0Njg2IEBACisgIFVzZXIgTW9kZSBMaW51eCBIT1dUTworICBVc2VyIE1vZGUgTGludXggQ29yZSBUZWFtCisgIE1vbiBOb3YgMTggMTQ6MTY6MTYgRVNUIDIwMDIKKworICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdXNlIGFuZCBhYnVzZSBvZiBKZWZmIERpa2UncyBVc2VyIE1vZGUKKyAgTGludXg6IGEgcG9ydCBvZiB0aGUgTGludXgga2VybmVsIGFzIGEgbm9ybWFsIEludGVsIExpbnV4IHByb2Nlc3MuCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICBUYWJsZSBvZiBDb250ZW50cworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAxLiBJbnRyb2R1Y3Rpb24KKworICAgICAxLjEgSG93IGlzIFVzZXIgTW9kZSBMaW51eCBEaWZmZXJlbnQ/CisgICAgIDEuMiBXaHkgV291bGQgSSBXYW50IFVzZXIgTW9kZSBMaW51eD8KKworICAyLiBDb21waWxpbmcgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcworCisgICAgIDIuMSBDb21waWxpbmcgdGhlIGtlcm5lbAorICAgICAyLjIgQ29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nIGtlcm5lbCBtb2R1bGVzCisgICAgIDIuMyBDb21waWxpbmcgYW5kIGluc3RhbGxpbmcgdW1sX3V0aWxpdGllcworCisgIDMuIFJ1bm5pbmcgVU1MIGFuZCBsb2dnaW5nIGluCisKKyAgICAgMy4xIFJ1bm5pbmcgVU1MCisgICAgIDMuMiBMb2dnaW5nIGluCisgICAgIDMuMyBFeGFtcGxlcworCisgIDQuIFVNTCBvbiAyRy8yRyBob3N0cworCisgICAgIDQuMSBJbnRyb2R1Y3Rpb24KKyAgICAgNC4yIFRoZSBwcm9ibGVtCisgICAgIDQuMyBUaGUgc29sdXRpb24KKworICA1LiBTZXR0aW5nIHVwIHNlcmlhbCBsaW5lcyBhbmQgY29uc29sZXMKKworICAgICA1LjEgU3BlY2lmeWluZyB0aGUgZGV2aWNlCisgICAgIDUuMiBTcGVjaWZ5aW5nIHRoZSBjaGFubmVsCisgICAgIDUuMyBFeGFtcGxlcworCisgIDYuIFNldHRpbmcgdXAgdGhlIG5ldHdvcmsKKworICAgICA2LjEgR2VuZXJhbCBzZXR1cAorICAgICA2LjIgVXNlcnNwYWNlIGRhZW1vbnMKKyAgICAgNi4zIFNwZWNpZnlpbmcgZXRoZXJuZXQgYWRkcmVzc2VzCisgICAgIDYuNCBVTUwgaW50ZXJmYWNlIHNldHVwCisgICAgIDYuNSBNdWx0aWNhc3QKKyAgICAgNi42IFRVTi9UQVAgd2l0aCB0aGUgdW1sX25ldCBoZWxwZXIKKyAgICAgNi43IFRVTi9UQVAgd2l0aCBhIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZQorICAgICA2LjggRXRoZXJ0YXAKKyAgICAgNi45IFRoZSBzd2l0Y2ggZGFlbW9uCisgICAgIDYuMTAgU2xpcAorICAgICA2LjExIFNsaXJwCisgICAgIDYuMTIgcGNhcAorICAgICA2LjEzIFNldHRpbmcgdXAgdGhlIGhvc3QgeW91cnNlbGYKKworICA3LiBTaGFyaW5nIEZpbGVzeXN0ZW1zIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcworCisgICAgIDcuMSBBIHdhcm5pbmcKKyAgICAgNy4yIFVzaW5nIGxheWVyZWQgYmxvY2sgZGV2aWNlcworICAgICA3LjMgTm90ZSEKKyAgICAgNy40IEFub3RoZXIgd2FybmluZworICAgICA3LjUgdW1sX21vbyA6IE1lcmdpbmcgYSBDT1cgZmlsZSB3aXRoIGl0cyBiYWNraW5nIGZpbGUKKworICA4LiBDcmVhdGluZyBmaWxlc3lzdGVtcworCisgICAgIDguMSBDcmVhdGUgdGhlIGZpbGVzeXN0ZW0gZmlsZQorICAgICA4LjIgQXNzaWduIHRoZSBmaWxlIHRvIGEgVU1MIGRldmljZQorICAgICA4LjMgQ3JlYXRpbmcgYW5kIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtCisKKyAgOS4gSG9zdCBmaWxlIGFjY2VzcworCisgICAgIDkuMSBVc2luZyBob3N0ZnMKKyAgICAgOS4yIGhvc3RmcyBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgIDkuMyBCdWlsZGluZyBob3N0ZnMKKworICAxMC4gVGhlIE1hbmFnZW1lbnQgQ29uc29sZQorICAgICAxMC4xIHZlcnNpb24KKyAgICAgMTAuMiBoYWx0IGFuZCByZWJvb3QKKyAgICAgMTAuMyBjb25maWcKKyAgICAgMTAuNCByZW1vdmUKKyAgICAgMTAuNSBzeXNycQorICAgICAxMC42IGhlbHAKKyAgICAgMTAuNyBjYWQKKyAgICAgMTAuOCBzdG9wCisgICAgIDEwLjkgZ28KKworICAxMS4gS2VybmVsIGRlYnVnZ2luZworCisgICAgIDExLjEgU3RhcnRpbmcgdGhlIGtlcm5lbCB1bmRlciBnZGIKKyAgICAgMTEuMiBFeGFtaW5pbmcgc2xlZXBpbmcgcHJvY2Vzc2VzCisgICAgIDExLjMgUnVubmluZyBkZGQgb24gVU1MCisgICAgIDExLjQgRGVidWdnaW5nIG1vZHVsZXMKKyAgICAgMTEuNSBBdHRhY2hpbmcgZ2RiIHRvIHRoZSBrZXJuZWwKKyAgICAgMTEuNiBVc2luZyBhbHRlcm5hdGUgZGVidWdnZXJzCisKKyAgMTIuIEtlcm5lbCBkZWJ1Z2dpbmcgZXhhbXBsZXMKKworICAgICAxMi4xIFRoZSBjYXNlIG9mIHRoZSBodW5nIGZzY2sKKyAgICAgMTIuMiBFcGlzb2RlIDI6IFRoZSBjYXNlIG9mIHRoZSBodW5nIGZzY2sKKworICAxMy4gV2hhdCB0byBkbyB3aGVuIFVNTCBkb2Vzbid0IHdvcmsKKworICAgICAxMy4xIFN0cmFuZ2UgY29tcGlsYXRpb24gZXJyb3JzIHdoZW4geW91IGJ1aWxkIGZyb20gc291cmNlCisgICAgIDEzLjIgVU1MIGhhbmdzIG9uIGJvb3QgYWZ0ZXIgbW91bnRpbmcgZGV2ZnMKKyAgICAgMTMuMyBBIHZhcmlldHkgb2YgcGFuaWNzIGFuZCBoYW5ncyB3aXRoIC90bXAgb24gYSByZWlzZXJmcyAgZmlsZXN5c3RlbQorICAgICAxMy40IFRoZSBjb21waWxlIGZhaWxzIHdpdGggZXJyb3JzIGFib3V0IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnb3BlbicsICdkdXAnLCBhbmQgJ3dhaXRwaWQnCisgICAgIDEzLjUgVU1MIGRvZXNuJ3Qgd29yayB3aGVuIC90bXAgaXMgYW4gTkZTIGZpbGVzeXN0ZW0KKyAgICAgMTMuNiBVTUwgaGFuZ3Mgb24gYm9vdCB3aGVuIGNvbXBpbGVkIHdpdGggZ3Byb2Ygc3VwcG9ydAorICAgICAxMy43IHN5c2xvZ2QgZGllcyB3aXRoIGEgU0lHVEVSTSBvbiBzdGFydHVwCisgICAgIDEzLjggVFVOL1RBUCBuZXR3b3JraW5nIGRvZXNuJ3Qgd29yayBvbiBhIDIuNCBob3N0CisgICAgIDEzLjkgWW91IGNhbiBuZXR3b3JrIHRvIHRoZSBob3N0IGJ1dCBub3QgdG8gb3RoZXIgbWFjaGluZXMgb24gdGhlIG5ldAorICAgICAxMy4xMCBJIGhhdmUgbm8gcm9vdCBhbmQgSSB3YW50IHRvIHNjcmVhbQorICAgICAxMy4xMSBVTUwgYnVpbGQgY29uZmxpY3QgYmV0d2VlbiBwdHJhY2UuaCBhbmQgdWNvbnRleHQuaAorICAgICAxMy4xMiBUaGUgVU1MIEJvZ29NaXBzIGlzIGV4YWN0bHkgaGFsZiB0aGUgaG9zdCdzIEJvZ29NaXBzCisgICAgIDEzLjEzIFdoZW4geW91IHJ1biBVTUwsIGl0IGltbWVkaWF0ZWx5IHNlZ2ZhdWx0cworICAgICAxMy4xNCB4dGVybXMgYXBwZWFyLCB0aGVuIGltbWVkaWF0ZWx5IGRpc2FwcGVhcgorICAgICAxMy4xNSBBbnkgb3RoZXIgcGFuaWMsIGhhbmcsIG9yIHN0cmFuZ2UgYmVoYXZpb3IKKworICAxNC4gRGlhZ25vc2luZyBQcm9ibGVtcworCisgICAgIDE0LjEgQ2FzZSAxIDogTm9ybWFsIGtlcm5lbCBwYW5pY3MKKyAgICAgMTQuMiBDYXNlIDIgOiBUcmFjaW5nIHRocmVhZCBwYW5pY3MKKyAgICAgMTQuMyBDYXNlIDMgOiBUcmFjaW5nIHRocmVhZCBwYW5pY3MgY2F1c2VkIGJ5IG90aGVyIHRocmVhZHMKKyAgICAgMTQuNCBDYXNlIDQgOiBIYW5ncworCisgIDE1LiBUaGFua3MKKworICAgICAxNS4xIENvZGUgYW5kIERvY3VtZW50YXRpb24KKyAgICAgMTUuMiBGbHVzaGluZyBvdXQgYnVncworICAgICAxNS4zIEJ1Z2xldHMgYW5kIGNsZWFuLXVwcworICAgICAxNS40IENhc2UgU3R1ZGllcworICAgICAxNS41IE90aGVyIGNvbnRyaWJ1dGlvbnMKKworCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAxCDEuCC4gIEkISW4IbnQIdHIIcm8Ib2QIZHUIdWMIY3QIdGkIaW8Ib24IbgorCisgIFdlbGNvbWUgdG8gVXNlciBNb2RlIExpbnV4LiAgSXQncyBnb2luZyB0byBiZSBmdW4uCisKKworCisgIDEIMS4ILjEIMS4ILiAgSAhIbwhvdwh3IGkIaXMIcyBVCFVzCHNlCGVyCHIgTQhNbwhvZAhkZQhlIEwITGkIaW4IbnUIdXgIeCBECERpCGlmCGZmCGZlCGVyCHJlCGVuCG50CHQ/CD8KKworICBOb3JtYWxseSwgdGhlIExpbnV4IEtlcm5lbCB0YWxrcyBzdHJhaWdodCB0byB5b3VyIGhhcmR3YXJlICh2aWRlbworICBjYXJkLCBrZXlib2FyZCwgaGFyZCBkcml2ZXMsIGV0YyksIGFuZCBhbnkgcHJvZ3JhbXMgd2hpY2ggcnVuIGFzayB0aGUKKyAga2VybmVsIHRvIG9wZXJhdGUgdGhlIGhhcmR3YXJlLCBsaWtlIHNvOgorCisKKworICAgICAgICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0rCisgICAgICAgICB8IFByb2Nlc3MgMSB8IFByb2Nlc3MgMiB8IC4uLnwKKyAgICAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tKworICAgICAgICAgfCAgICAgICBMaW51eCBLZXJuZWwgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICBIYXJkd2FyZSAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworCisKKyAgVGhlIFVzZXIgTW9kZSBMaW51eCBLZXJuZWwgaXMgZGlmZmVyZW50OyBpbnN0ZWFkIG9mIHRhbGtpbmcgdG8gdGhlCisgIGhhcmR3YXJlLCBpdCB0YWxrcyB0byBhIGByZWFsJyBMaW51eCBrZXJuZWwgKGNhbGxlZCB0aGUgYGhvc3Qga2VybmVsJworICBmcm9tIG5vdyBvbiksIGxpa2UgYW55IG90aGVyIHByb2dyYW0uICBQcm9ncmFtcyBjYW4gdGhlbiBydW4gaW5zaWRlCisgIFVzZXItTW9kZSBMaW51eCBhcyBpZiB0aGV5IHdlcmUgcnVubmluZyB1bmRlciBhIG5vcm1hbCBrZXJuZWwsIGxpa2UKKyAgc286CisKKworCisgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgIHwgUHJvY2VzcyAyIHwgLi4ufAorICAgICAgICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICB8IFByb2Nlc3MgMSB8IFVzZXItTW9kZSBMaW51eHwKKyAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgfCAgICAgICBMaW51eCBLZXJuZWwgICAgICAgICB8CisgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgIHwgICAgICAgICBIYXJkd2FyZSAgICAgICAgICAgfAorICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworCisKKworICAxCDEuCC4yCDIuCC4gIFcIV2gIaHkIeSBXCFdvCG91CHVsCGxkCGQgSQhJIFcIV2EIYW4IbnQIdCBVCFVzCHNlCGVyCHIgTQhNbwhvZAhkZQhlIEwITGkIaW4IbnUIdXgIeD8IPworCisKKyAgMS4gSWYgVXNlciBNb2RlIExpbnV4IGNyYXNoZXMsIHlvdXIgaG9zdCBrZXJuZWwgaXMgc3RpbGwgZmluZS4KKworICAyLiBZb3UgY2FuIHJ1biBhIHVzZXJtb2RlIGtlcm5lbCBhcyBhIG5vbi1yb290IHVzZXIuCisKKyAgMy4gWW91IGNhbiBkZWJ1ZyB0aGUgVXNlciBNb2RlIExpbnV4IGxpa2UgYW55IG5vcm1hbCBwcm9jZXNzLgorCisgIDQuIFlvdSBjYW4gcnVuIGdwcm9mIChwcm9maWxpbmcpIGFuZCBnY292IChjb3ZlcmFnZSB0ZXN0aW5nKS4KKworICA1LiBZb3UgY2FuIHBsYXkgd2l0aCB5b3VyIGtlcm5lbCB3aXRob3V0IGJyZWFraW5nIHRoaW5ncy4KKworICA2LiBZb3UgY2FuIHVzZSBpdCBhcyBhIHNhbmRib3ggZm9yIHRlc3RpbmcgbmV3IGFwcHMuCisKKyAgNy4gWW91IGNhbiB0cnkgbmV3IGRldmVsb3BtZW50IGtlcm5lbHMgc2FmZWx5LgorCisgIDguIFlvdSBjYW4gcnVuIGRpZmZlcmVudCBkaXN0cmlidXRpb25zIHNpbXVsdGFuZW91c2x5LgorCisgIDkuIEl0J3MgZXh0cmVtZWx5IGZ1bi4KKworCisKKworCisgIDIIMi4ILiAgQwhDbwhvbQhtcAhwaQhpbAhsaQhpbghuZwhnIHQIdGgIaGUIZSBrCGtlCGVyCHJuCG5lCGVsCGwgYQhhbghuZAhkIG0IbW8Ib2QIZHUIdWwIbGUIZXMIcworCisKKworCisgIDIIMi4ILjEIMS4ILiAgQwhDbwhvbQhtcAhwaQhpbAhsaQhpbghuZwhnIHQIdGgIaGUIZSBrCGtlCGVyCHJuCG5lCGVsCGwKKworCisgIENvbXBpbGluZyB0aGUgdXNlciBtb2RlIGtlcm5lbCBpcyBqdXN0IGxpa2UgY29tcGlsaW5nIGFueSBvdGhlcgorICBrZXJuZWwuICBMZXQncyBnbyB0aHJvdWdoIHRoZSBzdGVwcywgdXNpbmcgMi40LjAtcHJlcmVsZWFzZSAoY3VycmVudAorICBhcyBvZiB0aGlzIHdyaXRpbmcpIGFzIGFuIGV4YW1wbGU6CisKKworICAxLiBEb3dubG9hZCB0aGUgbGF0ZXN0IFVNTCBwYXRjaCBmcm9tCisKKyAgICAgdGhlIGRvd25sb2FkIHBhZ2UgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2RsLQorICAgICBzZi5odG1sPgorCisgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGZpbGUgaXMgdW1sLXBhdGNoLTIuNC4wLXByZXJlbGVhc2UuYnoyLgorCisKKyAgMi4gRG93bmxvYWQgdGhlIG1hdGNoaW5nIGtlcm5lbCBmcm9tIHlvdXIgZmF2b3VyaXRlIGtlcm5lbCBtaXJyb3IsCisgICAgIHN1Y2ggYXM6CisKKyAgICAgZnRwOi8vZnRwLmNhLmtlcm5lbC5vcmcvcHViL2tlcm5lbC92Mi40L2xpbnV4LTIuNC4wLXByZXJlbGVhc2UudGFyLmJ6MgorICAgICA8ZnRwOi8vZnRwLmNhLmtlcm5lbC5vcmcvcHViL2tlcm5lbC92Mi40L2xpbnV4LTIuNC4wLXByZXJlbGVhc2UudGFyLmJ6Mj4KKyAgICAgLgorCisKKyAgMy4gTWFrZSBhIGRpcmVjdG9yeSBhbmQgdW5wYWNrIHRoZSBrZXJuZWwgaW50byBpdC4KKworCisKKyAgICAgICBob3N0JQorICAgICAgIG1rZGlyIH4vdW1sCisKKworCisKKworCisgICAgICAgaG9zdCUKKyAgICAgICBjZCB+L3VtbAorCisKKworCisKKworICAgICAgIGhvc3QlCisgICAgICAgdGFyIC14enZmIGxpbnV4LTIuNC4wLXByZXJlbGVhc2UudGFyLmJ6MgorCisKKworCisKKworICA0LiBBcHBseSB0aGUgcGF0Y2ggdXNpbmcKKworCisKKyAgICAgICBob3N0JQorICAgICAgIGNkIH4vdW1sL2xpbnV4CisKKworCisgICAgICAgaG9zdCUKKyAgICAgICBiemNhdCB1bWwtcGF0Y2gtMi40LjAtcHJlcmVsZWFzZS5iejIgfCBwYXRjaCAtcDEKKworCisKKworCisKKyAgNS4gUnVuIHlvdXIgZmF2b3JpdGUgY29uZmlnOyBgbWFrZSB4Y29uZmlnIEFSQ0g9dW0nIGlzIHRoZSBtb3N0CisgICAgIGNvbnZlbmllbnQuICBgbWFrZSBjb25maWcgQVJDSD11bScgYW5kICdtYWtlIG1lbnVjb25maWcgQVJDSD11bScKKyAgICAgd2lsbCB3b3JrIGFzIHdlbGwuICBUaGUgZGVmYXVsdHMgd2lsbCBnaXZlIHlvdSBhIHVzZWZ1bCBrZXJuZWwuICBJZgorICAgICB5b3Ugd2FudCB0byBjaGFuZ2Ugc29tZXRoaW5nLCBnbyBhaGVhZCwgaXQgcHJvYmFibHkgd29uJ3QgaHVydAorICAgICBhbnl0aGluZy4KKworCisgICAgIE5vdGU6ICBJZiB0aGUgaG9zdCBpcyBjb25maWd1cmVkIHdpdGggYSAyRy8yRyBhZGRyZXNzIHNwYWNlIHNwbGl0CisgICAgIHJhdGhlciB0aGFuIHRoZSB1c3VhbCAzRy8xRyBzcGxpdCwgdGhlbiB0aGUgcGFja2FnZWQgVU1MIGJpbmFyaWVzCisgICAgIHdpbGwgbm90IHJ1bi4gIFRoZXkgd2lsbCBpbW1lZGlhdGVseSBzZWdmYXVsdC4gIFNlZSBgYFVNTCBvbiAyRy8yRworICAgICBob3N0cycnICBmb3IgdGhlIHNjb29wIG9uIHJ1bm5pbmcgVU1MIG9uIHlvdXIgc3lzdGVtLgorCisKKworICA2LiBGaW5pc2ggd2l0aCBgbWFrZSBsaW51eCBBUkNIPXVtJzogdGhlIHJlc3VsdCBpcyBhIGZpbGUgY2FsbGVkCisgICAgIGBsaW51eCcgaW4gdGhlIHRvcCBkaXJlY3Rvcnkgb2YgeW91ciBzb3VyY2UgdHJlZS4KKworICBNYWtlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgYnVpbGQgdGhpcyBrZXJuZWwgaW4gL3Vzci9zcmMvbGludXguICBPbiBzb21lCisgIGRpc3RyaWJ1dGlvbnMsIC91c3IvaW5jbHVkZS9hc20gaXMgYSBsaW5rIGludG8gdGhpcyBwb29sLiAgVGhlIHVzZXItCisgIG1vZGUgYnVpbGQgY2hhbmdlcyB0aGUgb3RoZXIgZW5kIG9mIHRoYXQgbGluaywgYW5kIHRoaW5ncyB0aGF0IGluY2x1ZGUKKyAgPGFzbS9hbnl0aGluZy5oPiBzdG9wIGNvbXBpbGluZy4KKworICBUaGUgc291cmNlcyBhcmUgYWxzbyBhdmFpbGFibGUgZnJvbSBjdnMgYXQgdGhlIHByb2plY3QncyBjdnMgcGFnZSwKKyAgd2hpY2ggaGFzIGRpcmVjdGlvbnMgb24gZ2V0dGluZyB0aGUgc291cmNlcy4gWW91IGNhbiBhbHNvIGJyb3dzZSB0aGUKKyAgQ1ZTIHBvb2wgZnJvbSB0aGVyZS4KKworICBJZiB5b3UgZ2V0IHRoZSBDVlMgc291cmNlcywgeW91IHdpbGwgaGF2ZSB0byBjaGVjayB0aGVtIG91dCBpbnRvIGFuCisgIGVtcHR5IGRpcmVjdG9yeS4gWW91IHdpbGwgdGhlbiBoYXZlIHRvIGNvcHkgZWFjaCBmaWxlIGludG8gdGhlCisgIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IGluIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgcG9vbC4KKworICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgbGF0ZXN0IGtlcm5lbCBwb29sLCB5b3UgY2FuIGdldCB0aGUKKyAgY29ycmVzcG9uZGluZyB1c2VyLW1vZGUgc291cmNlcyB3aXRoCisKKworICAgICAgIGhvc3QlIGN2cyBjbyAtciB2XzJfM194IGxpbnV4CisKKworCisKKyAgd2hlcmUgJ3gnIGlzIHRoZSB2ZXJzaW9uIGluIHlvdXIgcG9vbC4gTm90ZSB0aGF0IHlvdSB3aWxsIG5vdCBnZXQgdGhlCisgIGJ1ZyBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIHRoYXQgaGF2ZSBnb25lIGludG8gc3Vic2VxdWVudCByZWxlYXNlcy4KKworCisgIElmIHlvdSBidWlsZCB5b3VyIG93biBrZXJuZWwsIGFuZCB3YW50IHRvIGJvb3QgaXQgZnJvbSBvbmUgb2YgdGhlCisgIGZpbGVzeXN0ZW1zIGRpc3RyaWJ1dGVkIGZyb20gdGhpcyBzaXRlLCB0aGVuLCBpbiBuZWFybHkgYWxsIGNhc2VzLAorICBkZXZmcyBtdXN0IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBhbmQgbW91bnRlZCBhdCBib290IHRpbWUuICBUaGUKKyAgZXhjZXB0aW9uIGlzIHRoZSBTdVNFIGZpbGVzeXN0ZW0uICBGb3IgdGhpcywgZGV2ZnMgbXVzdCBlaXRoZXIgbm90IGJlCisgIGluIHRoZSBrZXJuZWwgYXQgYWxsLCBvciAiZGV2ZnM9bm9tb3VudCIgbXVzdCBiZSBvbiB0aGUga2VybmVsIGNvbW1hbmQKKyAgbGluZS4gIEFueSBkaXNhZ3JlZW1lbnQgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB0aGUgZmlsZXN5c3RlbSBiZWluZworICBib290ZWQgYWJvdXQgd2hldGhlciBkZXZmcyBpcyBiZWluZyB1c2VkIHdpbGwgcmVzdWx0IGluIHRoZSBib290CisgIGdldHRpbmcgbm8gZnVydGhlciB0aGFuIHNpbmdsZS11c2VyIG1vZGUuCisKKworICBJZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgZGV2ZnMsIHlvdSBjYW4gcmVtb3ZlIHRoZSBuZWVkIGZvciBpdCBmcm9tIGEKKyAgZmlsZXN5c3RlbSBieSBjb3B5aW5nIC9kZXYgZnJvbSBzb21lcGxhY2UsIG1ha2luZyBhIGJ1bmNoIG9mIC9kZXYvdWJkCisgIGRldmljZXM6CisKKworICBVTUwjIGZvciBpIGluIDAgMSAyIDMgNCA1IDYgNzsgZG8gbWtub2QgdWJkJGkgYiA5OCAkaTsgZG9uZQorCisKKworCisgIGFuZCBjaGFuZ2luZyAvZXRjL2ZzdGFiIGFuZCAvZXRjL2luaXR0YWIgdG8gcmVmZXIgdG8gdGhlIG5vbi1kZXZmcworICBkZXZpY2VzLgorCisKKworICAyCDIuCC4yCDIuCC4gIEMIQ28Ib20IbXAIcGkIaWwIbGkIaW4IbmcIZyBhCGFuCG5kCGQgaQhpbghucwhzdAh0YQhhbAhsbAhsaQhpbghuZwhnIGsIa2UIZXIIcm4IbmUIZWwIbCBtCG1vCG9kCGR1CHVsCGxlCGVzCHMKKworICBVTUwgbW9kdWxlcyBhcmUgYnVpbHQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBuYXRpdmUga2VybmVsICh3aXRoIHRoZQorICBleGNlcHRpb24gb2YgdGhlICdBUkNIPXVtJyB0aGF0IHlvdSBhbHdheXMgbmVlZCBmb3IgVU1MKToKKworCisgICAgICAgaG9zdCUgbWFrZSBtb2R1bGVzIEFSQ0g9dW0KKworCisKKworICBBbnkgbW9kdWxlcyB0aGF0IHlvdSB3YW50IHRvIGxvYWQgaW50byB0aGlzIGtlcm5lbCBuZWVkIHRvIGJlIGJ1aWx0IGluCisgIHRoZSB1c2VyLW1vZGUgcG9vbC4gIE1vZHVsZXMgZnJvbSB0aGUgbmF0aXZlIGtlcm5lbCB3b24ndCB3b3JrLgorCisgIFlvdSBjYW4gaW5zdGFsbCB0aGVtIGJ5IHVzaW5nIGZ0cCBvciBzb21ldGhpbmcgdG8gY29weSB0aGVtIGludG8gdGhlCisgIHZpcnR1YWwgbWFjaGluZSBhbmQgZHJvcHBpbmcgdGhlbSBpbnRvIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgLgorCisgIFlvdSBjYW4gYWxzbyBnZXQgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIHRvIGluc3RhbGwgdGhlbSBhcyBmb2xsb3dzOgorCisgIDEuIHdpdGggdGhlIGtlcm5lbCBub3QgYm9vdGVkLCBtb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtIGluIHRoZSB0b3AKKyAgICAgbGV2ZWwgb2YgdGhlIGtlcm5lbCBwb29sOgorCisKKyAgICAgICBob3N0JSBtb3VudCByb290X2ZzIG1udCAtbyBsb29wCisKKworCisKKworCisgIDIuIHJ1bgorCisKKyAgICAgICBob3N0JQorICAgICAgIG1ha2UgbW9kdWxlc19pbnN0YWxsIElOU1RBTExfTU9EX1BBVEg9YHB3ZGAvbW50IEFSQ0g9dW0KKworCisKKworCisKKyAgMy4gdW5tb3VudCB0aGUgZmlsZXN5c3RlbQorCisKKyAgICAgICBob3N0JSB1bW91bnQgbW50CisKKworCisKKworCisgIDQuIGJvb3QgdGhlIGtlcm5lbCBvbiBpdAorCisKKyAgV2hlbiB0aGUgc3lzdGVtIGlzIGJvb3RlZCwgeW91IGNhbiB1c2UgaW5zbW9kIGFzIHVzdWFsIHRvIGdldCB0aGUKKyAgbW9kdWxlcyBpbnRvIHRoZSBrZXJuZWwuICBBIG51bWJlciBvZiB0aGluZ3MgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIFVNTAorICBhcyBtb2R1bGVzLCBlc3BlY2lhbGx5IGZpbGVzeXN0ZW1zIGFuZCBuZXR3b3JrIHByb3RvY29scyBhbmQgZmlsdGVycywKKyAgc28gbW9zdCBzeW1ib2xzIHdoaWNoIG5lZWQgdG8gYmUgZXhwb3J0ZWQgcHJvYmFibHkgYWxyZWFkeSBhcmUuCisgIEhvd2V2ZXIsIGlmIHlvdSBkbyBmaW5kIHN5bWJvbHMgdGhhdCBuZWVkIGV4cG9ydGluZywgbGV0ICB1cworICA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvY29udGFjdHMuaHRtbD4gIGtub3csIGFuZAorICB0aGV5J2xsIGJlICJ0YWtlbiBjYXJlIG9mIi4KKworCisKKyAgMggyLgguMwgzLgguICBDCENvCG9tCG1wCHBpCGlsCGxpCGluCG5nCGcgYQhhbghuZAhkIGkIaW4IbnMIc3QIdGEIYWwIbGwIbGkIaW4IbmcIZyB1CHVtCG1sCGxfCF91CHV0CHRpCGlsCGxpCGl0CHRpCGllCGVzCHMKKworICBNYW55IGZlYXR1cmVzIG9mIHRoZSBVTUwga2VybmVsIHJlcXVpcmUgYSB1c2VyLXNwYWNlIGhlbHBlciBwcm9ncmFtLAorICBzbyBhIHVtbF91dGlsaXRpZXMgcGFja2FnZSBpcyBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGtlcm5lbAorICBwYXRjaCB3aGljaCBwcm92aWRlcyB0aGVzZSBoZWxwZXJzLiBJbmNsdWRlZCB3aXRoaW4gdGhpcyBpczoKKworICArCG8gIHBvcnQtaGVscGVyIC0gVXNlZCBieSBjb25zb2xlcyB3aGljaCBjb25uZWN0IHRvIHh0ZXJtcyBvciBwb3J0cworCisgICsIbyAgdHVuY3RsIC0gQ29uZmlndXJhdGlvbiB0b29sIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIHRhcCBkZXZpY2VzCisKKyAgKwhvICB1bWxfbmV0IC0gU2V0dWlkIGJpbmFyeSBmb3IgYXV0b21hdGljIHRhcCBkZXZpY2UgY29uZmlndXJhdGlvbgorCisgICsIbyAgdW1sX3N3aXRjaCAtIFVzZXItc3BhY2UgdmlydHVhbCBzd2l0Y2ggcmVxdWlyZWQgZm9yIGRhZW1vbgorICAgICB0cmFuc3BvcnQKKworICAgICBUaGUgdW1sX3V0aWxpdGllcyB0cmVlIGlzIGNvbXBpbGVkIHdpdGg6CisKKworICAgICAgIGhvc3QjCisgICAgICAgbWFrZSAmJiBtYWtlIGluc3RhbGwKKworCisKKworICBOb3RlIHRoYXQgVU1MIGtlcm5lbCBwYXRjaGVzIG1heSByZXF1aXJlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUKKyAgdW1sX3V0aWxpdGllcyBkaXN0cmlidXRpb24uIElmIHlvdSBkb24ndCBrZWVwIHVwIHdpdGggdGhlIG1haWxpbmcKKyAgbGlzdHMsIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB1bWxfdXRpbGl0aWVzIGlmIHlvdQorICBhcmUgZXhwZXJpZW5jaW5nIHByb2JsZW1zIHdpdGggeW91ciBVTUwga2VybmVsLCBwYXJ0aWN1bGFybHkgd2hlbgorICBkZWFsaW5nIHdpdGggY29uc29sZXMgb3IgY29tbWFuZC1saW5lIHN3aXRjaGVzIHRvIHRoZSBoZWxwZXIgcHJvZ3JhbXMKKworCisKKworCisKKworCisgIDMIMy4ILiAgUghSdQh1bghubghuaQhpbghuZwhnIFUIVU0ITUwITCBhCGFuCG5kCGQgbAhsbwhvZwhnZwhnaQhpbghuZwhnIGkIaW4IbgorCisKKworICAzCDMuCC4xCDEuCC4gIFIIUnUIdW4Ibm4IbmkIaW4IbmcIZyBVCFVNCE1MCEwKKworICBJdCBydW5zIG9uIDIuMi4xNSBvciBsYXRlciwgYW5kIGFsbCAyLjQga2VybmVscy4KKworCisgIEJvb3RpbmcgVU1MIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gIFNpbXBseSBydW4gJ2xpbnV4JzogaXQgd2lsbCB0cnkgdG8KKyAgbW91bnQgdGhlIGZpbGUgYHJvb3RfZnMnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFlvdSBkbyBub3QgbmVlZCB0bworICBydW4gaXQgYXMgcm9vdC4gIElmIHlvdXIgcm9vdCBmaWxlc3lzdGVtIGlzIG5vdCBuYW1lZCBgcm9vdF9mcycsIHRoZW4KKyAgeW91IG5lZWQgdG8gcHV0IGEgYHViZDA9cm9vdF9mc193aGF0ZXZlcicgc3dpdGNoIG9uIHRoZSBsaW51eCBjb21tYW5kCisgIGxpbmUuCisKKworICBZb3Ugd2lsbCBuZWVkIGEgZmlsZXN5c3RlbSB0byBib290IFVNTCBmcm9tLiAgVGhlcmUgYXJlIGEgbnVtYmVyCisgIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgZnJvbSAgaGVyZSAgPGh0dHA6Ly91c2VyLW1vZGUtCisgIGxpbnV4LnNvdXJjZWZvcmdlLm5ldC9kbC1zZi5odG1sPiAuICBUaGVyZSBhcmUgYWxzbyAgc2V2ZXJhbCB0b29scworICA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvZnNfbWFraW5nLmh0bWw+ICB3aGljaCBjYW4gYmUKKyAgdXNlZCB0byBnZW5lcmF0ZSBVTUwtY29tcGF0aWJsZSBmaWxlc3lzdGVtIGltYWdlcyBmcm9tIG1lZGlhLgorICBUaGUga2VybmVsIHdpbGwgYm9vdCB1cCBhbmQgcHJlc2VudCB5b3Ugd2l0aCBhIGxvZ2luIHByb21wdC4KKworCisgIE5vdGU6ICBJZiB0aGUgaG9zdCBpcyBjb25maWd1cmVkIHdpdGggYSAyRy8yRyBhZGRyZXNzIHNwYWNlIHNwbGl0CisgIHJhdGhlciB0aGFuIHRoZSB1c3VhbCAzRy8xRyBzcGxpdCwgdGhlbiB0aGUgcGFja2FnZWQgVU1MIGJpbmFyaWVzIHdpbGwKKyAgbm90IHJ1bi4gIFRoZXkgd2lsbCBpbW1lZGlhdGVseSBzZWdmYXVsdC4gIFNlZSBgYFVNTCBvbiAyRy8yRyBob3N0cycnCisgIGZvciB0aGUgc2Nvb3Agb24gcnVubmluZyBVTUwgb24geW91ciBzeXN0ZW0uCisKKworCisgIDMIMy4ILjIIMi4ILiAgTAhMbwhvZwhnZwhnaQhpbghuZwhnIGkIaW4IbgorCisKKworICBUaGUgcHJlcGFja2FnZWQgZmlsZXN5c3RlbXMgaGF2ZSBhIHJvb3QgYWNjb3VudCB3aXRoIHBhc3N3b3JkICdyb290JworICBhbmQgYSB1c2VyIGFjY291bnQgd2l0aCBwYXNzd29yZCAndXNlcicuICBUaGUgbG9naW4gYmFubmVyIHdpbGwKKyAgZ2VuZXJhbGx5IHRlbGwgeW91IGhvdyB0byBsb2cgaW4uICBTbywgeW91IGxvZyBpbiBhbmQgeW91IHdpbGwgZmluZAorICB5b3Vyc2VsZiBpbnNpZGUgYSBsaXR0bGUgdmlydHVhbCBtYWNoaW5lLiBPdXIgZmlsZXN5c3RlbXMgaGF2ZSBhCisgIHZhcmlldHkgb2YgY29tbWFuZHMgYW5kIHV0aWxpdGllcyBpbnN0YWxsZWQgKGFuZCBpdCBpcyBmYWlybHkgZWFzeSB0bworICBhZGQgbW9yZSksIHNvIHlvdSB3aWxsIGhhdmUgYSBsb3Qgb2YgdG9vbHMgd2l0aCB3aGljaCB0byBwb2tlIGFyb3VuZAorICB0aGUgc3lzdGVtLgorCisgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBvdGhlciB3YXlzIHRvIGxvZyBpbjoKKworICArCG8gIE9uIGEgdmlydHVhbCBjb25zb2xlCisKKworCisgICAgIEVhY2ggdmlydHVhbCBjb25zb2xlIHRoYXQgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGV2aWNlIGV4aXN0cyBpbgorICAgICAvZGV2IGFuZCAvZXRjL2luaXR0YWIgcnVucyBhIGdldHR5IG9uIGl0KSB3aWxsIGNvbWUgdXAgaW4gaXRzIG93bgorICAgICB4dGVybS4gIElmIHlvdSBnZXQgdGlyZWQgb2YgdGhlIHh0ZXJtcywgcmVhZCBgYFNldHRpbmcgdXAgc2VyaWFsCisgICAgIGxpbmVzIGFuZCBjb25zb2xlcycnICB0byBzZWUgaG93IHRvIGF0dGFjaCB0aGUgY29uc29sZXMgdG8KKyAgICAgc29tZXRoaW5nIGVsc2UsIGxpa2UgaG9zdCBwdHlzLgorCisKKworICArCG8gIE92ZXIgdGhlIHNlcmlhbCBsaW5lCisKKworICAgICBJbiB0aGUgYm9vdCBvdXRwdXQsIGZpbmQgYSBsaW5lIHRoYXQgbG9va3MgbGlrZToKKworCisKKyAgICAgICBzZXJpYWwgbGluZSAwIGFzc2lnbmVkIHB0eSAvZGV2L3B0eXAxCisKKworCisKKyAgQXR0YWNoIHlvdXIgZmF2b3JpdGUgdGVybWluYWwgcHJvZ3JhbSB0byB0aGUgY29ycmVzcG9uZGluZyB0dHkuICBJLmUuCisgIGZvciBtaW5pY29tLCB0aGUgY29tbWFuZCB3b3VsZCBiZQorCisKKyAgICAgICBob3N0JSBtaW5pY29tIC1vIC1wIC9kZXYvdHR5cDEKKworCisKKworCisKKyAgKwhvICBPdmVyIHRoZSBuZXQKKworCisgICAgIElmIHRoZSBuZXR3b3JrIGlzIHJ1bm5pbmcsIHRoZW4geW91IGNhbiB0ZWxuZXQgdG8gdGhlIHZpcnR1YWwKKyAgICAgbWFjaGluZSBhbmQgbG9nIGluIHRvIGl0LiAgU2VlIGBgU2V0dGluZyB1cCB0aGUgbmV0d29yaycnICB0byBsZWFybgorICAgICBhYm91dCBzZXR0aW5nIHVwIGEgdmlydHVhbCBuZXR3b3JrLgorCisgIFdoZW4geW91J3JlIGRvbmUgdXNpbmcgaXQsIHJ1biBoYWx0LCBhbmQgdGhlIGtlcm5lbCB3aWxsIGJyaW5nIGl0c2VsZgorICBkb3duIGFuZCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQuCisKKworICAzCDMuCC4zCDMuCC4gIEUIRXgIeGEIYW0IbXAIcGwIbGUIZXMIcworCisgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgVU1MIGluIGFjdGlvbjoKKworICArCG8gIEEgbG9naW4gc2Vzc2lvbiA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvbG9naW4uaHRtbD4KKworICArCG8gIEEgdmlydHVhbCBuZXR3b3JrIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9uZXQuaHRtbD4KKworCisKKworCisKKworICA0CDQuCC4gIFUIVU0ITUwITCBvCG9uCG4gMggyRwhHLwgvMggyRwhHIGgIaG8Ib3MIc3QIdHMIcworCisKKworCisgIDQINC4ILjEIMS4ILiAgSQhJbghudAh0cghybwhvZAhkdQh1YwhjdAh0aQhpbwhvbghuCisKKworICBNb3N0IExpbnV4IG1hY2hpbmVzIGFyZSBjb25maWd1cmVkIHNvIHRoYXQgdGhlIGtlcm5lbCBvY2N1cGllcyB0aGUKKyAgdXBwZXIgMUcgKDB4YzAwMDAwMDAgLSAweGZmZmZmZmZmKSBvZiB0aGUgNEcgYWRkcmVzcyBzcGFjZSBhbmQKKyAgcHJvY2Vzc2VzIHVzZSB0aGUgbG93ZXIgM0cgKDB4MDAwMDAwMDAgLSAweGJmZmZmZmZmKS4gIEhvd2V2ZXIsIHNvbWUKKyAgbWFjaGluZSBhcmUgY29uZmlndXJlZCB3aXRoIGEgMkcvMkcgc3BsaXQsIHdpdGggdGhlIGtlcm5lbCBvY2N1cHlpbmcKKyAgdGhlIHVwcGVyIDJHICgweDgwMDAwMDAwIC0gMHhmZmZmZmZmZikgYW5kIHByb2Nlc3NlcyB1c2luZyB0aGUgbG93ZXIKKyAgMkcgKDB4MDAwMDAwMDAgLSAweDdmZmZmZmZmKS4KKworCisKKworICA0CDQuCC4yCDIuCC4gIFQIVGgIaGUIZSBwCHByCHJvCG9iCGJsCGxlCGVtCG0KKworCisgIFRoZSBwcmVidWlsdCBVTUwgYmluYXJpZXMgb24gdGhpcyBzaXRlIHdpbGwgbm90IHJ1biBvbiAyRy8yRyBob3N0cworICBiZWNhdXNlIFVNTCBvY2N1cGllcyB0aGUgdXBwZXIgLjVHIG9mIHRoZSAzRyBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UKKyAgKDB4YTAwMDAwMDAgLSAweGJmZmZmZmZmKS4gIE9idmlvdXNseSwgb24gMkcvMkcgaG9zdHMsIHRoaXMgaXMgcmlnaHQKKyAgaW4gdGhlIG1pZGRsZSBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UsIHNvIFVNTCB3b24ndCBldmVuIGxvYWQgLSBpdAorICB3aWxsIGltbWVkaWF0ZWx5IHNlZ2ZhdWx0LgorCisKKworCisgIDQINC4ILjMIMy4ILiAgVAhUaAhoZQhlIHMIc28Ib2wIbHUIdXQIdGkIaW8Ib24IbgorCisKKyAgVGhlIGZpeCBmb3IgdGhpcyBpcyB0byByZWJ1aWxkIFVNTCBmcm9tIHNvdXJjZSBhZnRlciBlbmFibGluZworICBDT05GSUdfSE9TVF8yR18yRyAodW5kZXIgJ0dlbmVyYWwgU2V0dXAnKS4gIFRoaXMgd2lsbCBjYXVzZSBVTUwgdG8KKyAgbG9hZCBpdHNlbGYgaW4gdGhlIHRvcCAuNUcgb2YgdGhhdCBzbWFsbGVyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwKKyAgd2hlcmUgaXQgd2lsbCBydW4gZmluZS4gIFNlZSBgYENvbXBpbGluZyB0aGUga2VybmVsIGFuZCBtb2R1bGVzJycgIGlmCisgIHlvdSBuZWVkIGhlbHAgYnVpbGRpbmcgVU1MIGZyb20gc291cmNlLgorCisKKworCisKKworCisKKworCisgIDUINS4ILiAgUwhTZQhldAh0dAh0aQhpbghuZwhnIHUIdXAIcCBzCHNlCGVyCHJpCGlhCGFsCGwgbAhsaQhpbghuZQhlcwhzIGEIYW4IbmQIZCBjCGNvCG9uCG5zCHNvCG9sCGxlCGVzCHMKKworCisgIEl0IGlzIHBvc3NpYmxlIHRvIGF0dGFjaCBVTUwgc2VyaWFsIGxpbmVzIGFuZCBjb25zb2xlcyB0byBtYW55IHR5cGVzCisgIG9mIGhvc3QgSS9PIGNoYW5uZWxzIGJ5IHNwZWNpZnlpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKKyAgWW91IGNhbiBhdHRhY2ggdGhlbSB0byBob3N0IHB0eXMsIHR0eXMsIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBwb3J0cy4KKyAgVGhpcyBhbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlCisKKyAgKwhvICBoYXZlIGEgVU1MIGNvbnNvbGUgYXBwZWFyIG9uIGFuIHVudXNlZCBob3N0IGNvbnNvbGUsCisKKyAgKwhvICBob29rIHR3byB2aXJ0dWFsIG1hY2hpbmVzIHRvZ2V0aGVyIGJ5IGhhdmluZyBvbmUgYXR0YWNoIHRvIGEgcHR5CisgICAgIGFuZCBoYXZpbmcgdGhlIG90aGVyIGF0dGFjaCB0byB0aGUgY29ycmVzcG9uZGluZyB0dHkKKworICArCG8gIG1ha2UgYSB2aXJ0dWFsIG1hY2hpbmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBuZXQgYnkgYXR0YWNoaW5nIGEKKyAgICAgY29uc29sZSB0byBhIHBvcnQgb24gdGhlIGhvc3QuCisKKworICBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgZGV2aWNlPWNoYW5uZWwuCisKKworCisgIDUINS4ILjEIMS4ILiAgUwhTcAhwZQhlYwhjaQhpZghmeQh5aQhpbghuZwhnIHQIdGgIaGUIZSBkCGRlCGV2CHZpCGljCGNlCGUKKworICBEZXZpY2VzIGFyZSBzcGVjaWZpZWQgd2l0aCAiY29uIiBvciAic3NsIiAoY29uc29sZSBvciBzZXJpYWwgbGluZSwKKyAgcmVzcGVjdGl2ZWx5KSwgb3B0aW9uYWxseSB3aXRoIGEgZGV2aWNlIG51bWJlciBpZiB5b3UgYXJlIHRhbGtpbmcKKyAgYWJvdXQgYSBzcGVjaWZpYyBkZXZpY2UuCisKKworICBVc2luZyBqdXN0ICJjb24iIG9yICJzc2wiIGRlc2NyaWJlcyBhbGwgb2YgdGhlIGNvbnNvbGVzIG9yIHNlcmlhbAorICBsaW5lcy4gIElmIHlvdSB3YW50IHRvIHRhbGsgYWJvdXQgY29uc29sZSAjMyBvciBzZXJpYWwgbGluZSAjMTAsIHRoZXkKKyAgd291bGQgYmUgImNvbjMiIGFuZCAic3NsMTAiLCByZXNwZWN0aXZlbHkuCisKKworICBBIHNwZWNpZmljIGRldmljZSBuYW1lIHdpbGwgb3ZlcnJpZGUgYSBsZXNzIGdlbmVyYWwgImNvbj0iIG9yICJzc2w9Ii4KKyAgU28sIGZvciBleGFtcGxlLCB5b3UgY2FuIGFzc2lnbiBhIHB0eSB0byBlYWNoIG9mIHRoZSBzZXJpYWwgbGluZXMKKyAgZXhjZXB0IGZvciB0aGUgZmlyc3QgdHdvIGxpa2UgdGhpczoKKworCisgICAgICAgIHNzbD1wdHkgc3NsMD10dHk6L2Rldi90dHkwIHNzbDE9dHR5Oi9kZXYvdHR5MQorCisKKworCisgIFRoZSBzcGVjaWZpY2l0eSBvZiB0aGUgZGV2aWNlIG5hbWUgaXMgYWxsIHRoYXQgbWF0dGVyczsgb3JkZXIgb24gdGhlCisgIGNvbW1hbmQgbGluZSBpcyBpcnJlbGV2YW50LgorCisKKworICA1CDUuCC4yCDIuCC4gIFMIU3AIcGUIZWMIY2kIaWYIZnkIeWkIaW4IbmcIZyB0CHRoCGhlCGUgYwhjaAhoYQhhbghubghuZQhlbAhsCisKKyAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBjaGFubmVscyB0byBhdHRhY2ggYSBVTUwKKyAgZGV2aWNlIHRvLCBlYWNoIHdpdGggYSBkaWZmZXJlbnQgd2F5IG9mIHNwZWNpZnlpbmcgZXhhY3RseSB3aGF0IHRvCisgIGF0dGFjaCB0by4KKworICArCG8gIHBzZXVkby10ZXJtaW5hbHMgLSBkZXZpY2U9cHR5IHB0cyB0ZXJtaW5hbHMgLSBkZXZpY2U9cHRzCisKKworICAgICBUaGlzIHdpbGwgY2F1c2UgVU1MIHRvIGFsbG9jYXRlIGEgZnJlZSBob3N0IHBzZXVkby10ZXJtaW5hbCBmb3IgdGhlCisgICAgIGRldmljZS4gIFRoZSB0ZXJtaW5hbCB0aGF0IGl0IGdvdCB3aWxsIGJlIGFubm91bmNlZCBpbiB0aGUgYm9vdAorICAgICBsb2cuICBZb3UgYWNjZXNzIGl0IGJ5IGF0dGFjaGluZyBhIHRlcm1pbmFsIHByb2dyYW0gdG8gdGhlCisgICAgIGNvcnJlc3BvbmRpbmcgdHR5OgorCisgICsIbyAgc2NyZWVuIC9kZXYvcHRzL24KKworICArCG8gIHNjcmVlbiAvZGV2L3R0eXh4CisKKyAgKwhvICBtaW5pY29tIC1vIC1wIC9kZXYvdHR5eHggLSBtaW5pY29tIHNlZW1zIG5vdCBhYmxlIHRvIGhhbmRsZSBwdHMKKyAgICAgZGV2aWNlcworCisgICsIbyAga2VybWl0IC0gc3RhcnQgaXQgdXAsICdvcGVuJyB0aGUgZGV2aWNlLCB0aGVuICdjb25uZWN0JworCisKKworCisKKyAgKwhvICB0ZXJtaW5hbHMgLSBkZXZpY2U9dHR5OnR0eSBkZXZpY2UgZmlsZQorCisKKyAgICAgVGhpcyB3aWxsIG1ha2UgVU1MIGF0dGFjaCB0aGUgZGV2aWNlIHRvIHRoZSBzcGVjaWZpZWQgdHR5IChpLmUKKworCisgICAgICAgIGNvbjE9dHR5Oi9kZXYvdHR5MworCisKKworCisgIHdpbGwgYXR0YWNoIFVNTCdzIGNvbnNvbGUgMSB0byB0aGUgaG9zdCdzIC9kZXYvdHR5MykuICBJZiB0aGUgdHR5IHRoYXQKKyAgeW91IHNwZWNpZnkgaXMgdGhlIHNsYXZlIGVuZCBvZiBhIHR0eS9wdHkgcGFpciwgc29tZXRoaW5nIGVsc2UgbXVzdAorICBoYXZlIGFscmVhZHkgb3BlbmVkIHRoZSBjb3JyZXNwb25kaW5nIHB0eSBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLgorCisKKworCisKKyAgKwhvICB4dGVybXMgLSBkZXZpY2U9eHRlcm0KKworCisgICAgIFVNTCB3aWxsIHJ1biBhbiB4dGVybSBhbmQgdGhlIGRldmljZSB3aWxsIGJlIGF0dGFjaGVkIHRvIGl0LgorCisKKworCisKKyAgKwhvICBQb3J0IC0gZGV2aWNlPXBvcnQ6cG9ydCBudW1iZXIKKworCisgICAgIFRoaXMgd2lsbCBhdHRhY2ggdGhlIFVNTCBkZXZpY2VzIHRvIHRoZSBzcGVjaWZpZWQgaG9zdCBwb3J0LgorICAgICBBdHRhY2hpbmcgY29uc29sZSAxIHRvIHRoZSBob3N0J3MgcG9ydCA5MDAwIHdvdWxkIGJlIGRvbmUgbGlrZQorICAgICB0aGlzOgorCisKKyAgICAgICAgY29uMT1wb3J0OjkwMDAKKworCisKKworICBBdHRhY2hpbmcgYWxsIHRoZSBzZXJpYWwgbGluZXMgdG8gdGhhdCBwb3J0IHdvdWxkIGJlIGRvbmUgc2ltaWxhcmx5OgorCisKKyAgICAgICAgc3NsPXBvcnQ6OTAwMAorCisKKworCisgIFlvdSBhY2Nlc3MgdGhlc2UgZGV2aWNlcyBieSB0ZWxuZXR0aW5nIHRvIHRoYXQgcG9ydC4gIEVhY2ggYWN0aXZlIHRlbC0KKyAgbmV0IHNlc3Npb24gZ2V0cyBhIGRpZmZlcmVudCBkZXZpY2UuICBJZiB0aGVyZSBhcmUgbW9yZSB0ZWxuZXRzIHRvIGEKKyAgcG9ydCB0aGFuIFVNTCBkZXZpY2VzIGF0dGFjaGVkIHRvIGl0LCB0aGVuIHRoZSBleHRyYSB0ZWxuZXQgc2Vzc2lvbnMKKyAgd2lsbCBibG9jayB1bnRpbCBhbiBleGlzdGluZyB0ZWxuZXQgZGV0YWNoZXMsIG9yIHVudGlsIGFub3RoZXIgZGV2aWNlCisgIGJlY29tZXMgYWN0aXZlIChpLmUuIGJ5IGJlaW5nIGFjdGl2YXRlZCBpbiAvZXRjL2luaXR0YWIpLgorCisgIFRoaXMgY2hhbm5lbCBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHlvdSBjYW4gYm90aCBhdHRhY2ggbXVsdGlwbGUgVU1MCisgIGRldmljZXMgdG8gaXQgYW5kIGtub3cgaG93IHRvIGFjY2VzcyB0aGVtIHdpdGhvdXQgcmVhZGluZyB0aGUgVU1MIGJvb3QKKyAgbG9nLiAgSXQgaXMgYWxzbyB1bmlxdWUgaW4gYWxsb3dpbmcgYWNjZXNzIHRvIGEgVU1MIGZyb20gcmVtb3RlCisgIG1hY2hpbmVzIHdpdGhvdXQgcmVxdWlyaW5nIHRoYXQgdGhlIFVNTCBiZSBuZXR3b3JrZWQuICBUaGlzIGNvdWxkIGJlCisgIHVzZWZ1bCBpbiBhbGxvd2luZyBwdWJsaWMgYWNjZXNzIHRvIFVNTHMgYmVjYXVzZSB0aGV5IHdvdWxkIGJlCisgIGFjY2Vzc2libGUgZnJvbSB0aGUgbmV0LCBidXQgd291bGRuJ3QgbmVlZCBhbnkga2luZCBvZiBuZXR3b3JrCisgIGZpbHRlcmluZyBvciBhY2Nlc3MgY29udHJvbCBiZWNhdXNlIHRoZXkgd291bGQgaGF2ZSBubyBuZXR3b3JrIGFjY2Vzcy4KKworCisgIElmIHlvdSBhdHRhY2ggdGhlIG1haW4gY29uc29sZSB0byBhIHBvcnRhbCwgdGhlbiB0aGUgVU1MIGJvb3Qgd2lsbAorICBhcHBlYXIgdG8gaGFuZy4gIEluIHJlYWxpdHksIGl0J3Mgd2FpdGluZyBmb3IgYSB0ZWxuZXQgdG8gY29ubmVjdCwgYXQKKyAgd2hpY2ggcG9pbnQgdGhlIGJvb3Qgd2lsbCBwcm9jZWVkLgorCisKKworCisKKyAgKwhvICBhbHJlYWR5LWV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvcnMgLSBkZXZpY2U9ZmlsZSBkZXNjcmlwdG9yCisKKworICAgICBJZiB5b3Ugc2V0IHVwIGEgZmlsZSBkZXNjcmlwdG9yIG9uIHRoZSBVTUwgY29tbWFuZCBsaW5lLCB5b3UgY2FuCisgICAgIGF0dGFjaCBhIFVNTCBkZXZpY2UgdG8gaXQuICBUaGlzIGlzIG1vc3QgY29tbW9ubHkgdXNlZCB0byBwdXQgdGhlCisgICAgIG1haW4gY29uc29sZSBiYWNrIG9uIHN0ZGluIGFuZCBzdGRvdXQgYWZ0ZXIgYXNzaWduaW5nIGFsbCB0aGUgb3RoZXIKKyAgICAgY29uc29sZXMgdG8gc29tZXRoaW5nIGVsc2U6CisKKworICAgICAgICBjb24wPWZkOjAsZmQ6MSBjb249cHRzCisKKworCisKKworCisKKworICArCG8gIE5vdGhpbmcgLSBkZXZpY2U9bnVsbAorCisKKyAgICAgVGhpcyBhbGxvd3MgdGhlIGRldmljZSB0byBiZSBvcGVuZWQsIGluIGNvbnRyYXN0IHRvICdub25lJywgYnV0CisgICAgIHJlYWRzIHdpbGwgYmxvY2ssIGFuZCB3cml0ZXMgd2lsbCBzdWNjZWVkIGFuZCB0aGUgZGF0YSB3aWxsIGJlCisgICAgIHRocm93biBvdXQuCisKKworCisKKworICArCG8gIE5vbmUgLSBkZXZpY2U9bm9uZQorCisKKyAgICAgVGhpcyBjYXVzZXMgdGhlIGRldmljZSB0byBkaXNhcHBlYXIuICBJZiB5b3UgYXJlIHVzaW5nIGRldmZzLCB0aGUKKyAgICAgZGV2aWNlIHdpbGwgbm90IGFwcGVhciBpbiAvZGV2LiAgSWYgbm90LCB0aGVuIGF0dGVtcHRzIHRvIG9wZW4gaXQKKyAgICAgd2lsbCByZXR1cm4gLUVOT0RFVi4KKworCisKKyAgWW91IGNhbiBhbHNvIHNwZWNpZnkgZGlmZmVyZW50IGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbHMgZm9yIGEgZGV2aWNlCisgIGJ5IHB1dHRpbmcgYSBjb21tYSBiZXR3ZWVuIHRoZW06CisKKworICAgICAgICBzc2wzPXR0eTovZGV2L3R0eTIseHRlcm0KKworCisKKworICB3aWxsIGNhdXNlIHNlcmlhbCBsaW5lIDMgdG8gYWNjZXB0IGlucHV0IG9uIHRoZSBob3N0J3MgL2Rldi90dHkzIGFuZAorICBkaXNwbGF5IG91dHB1dCBvbiBhbiB4dGVybS4gIFRoYXQncyBhIHNpbGx5IGV4YW1wbGUgLSB0aGUgbW9zdCBjb21tb24KKyAgdXNlIG9mIHRoaXMgc3ludGF4IGlzIHRvIHJlYXR0YWNoIHRoZSBtYWluIGNvbnNvbGUgdG8gc3RkaW4gYW5kIHN0ZG91dAorICBhcyBzaG93biBhYm92ZS4KKworCisgIElmIHlvdSBkZWNpZGUgdG8gbW92ZSB0aGUgbWFpbiBjb25zb2xlIGF3YXkgZnJvbSBzdGRpbi9zdGRvdXQsIHRoZQorICBpbml0aWFsIGJvb3Qgb3V0cHV0IHdpbGwgYXBwZWFyIGluIHRoZSB0ZXJtaW5hbCB0aGF0IHlvdSdyZSBydW5uaW5nCisgIFVNTCBpbi4gIEhvd2V2ZXIsIG9uY2UgdGhlIGNvbnNvbGUgZHJpdmVyIGhhcyBiZWVuIG9mZmljaWFsbHkKKyAgaW5pdGlhbGl6ZWQsIHRoZW4gdGhlIGJvb3Qgb3V0cHV0IHdpbGwgc3RhcnQgYXBwZWFyaW5nIHdoZXJldmVyIHlvdQorICBzcGVjaWZpZWQgdGhhdCBjb25zb2xlIDAgc2hvdWxkIGJlLiAgVGhhdCBkZXZpY2Ugd2lsbCByZWNlaXZlIGFsbAorICBzdWJzZXF1ZW50IG91dHB1dC4KKworCisKKyAgNQg1LgguMwgzLgguICBFCEV4CHhhCGFtCG1wCHBsCGxlCGVzCHMKKworICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgdGhpbmdzIHlvdSBjYW4gZG8gd2l0aCB0aGlzCisgIGNhcGFiaWxpdHkuCisKKworICBGaXJzdCwgdGhpcyBpcyBob3cgeW91IGdldCByaWQgb2YgdGhvc2UgYmxlZWRpbmcgY29uc29sZSB4dGVybXMgYnkKKyAgYXR0YWNoaW5nIHRoZW0gdG8gaG9zdCBwdHlzOgorCisKKyAgICAgICAgY29uPXB0eSBjb24wPWZkOjAsZmQ6MQorCisKKworCisgIFRoaXMgd2lsbCBtYWtlIGEgVU1MIGNvbnNvbGUgdGFrZSBvdmVyIGFuIHVudXNlZCBob3N0IHZpcnR1YWwgY29uc29sZSwKKyAgc28gdGhhdCB3aGVuIHlvdSBzd2l0Y2ggdG8gaXQsIHlvdSB3aWxsIHNlZSB0aGUgVU1MIGxvZ2luIHByb21wdAorICByYXRoZXIgdGhhbiB0aGUgaG9zdCBsb2dpbiBwcm9tcHQ6CisKKworICAgICAgICBjb24xPXR0eTovZGV2L3R0eTYKKworCisKKworICBZb3UgY2FuIGF0dGFjaCB0d28gdmlydHVhbCBtYWNoaW5lcyB0b2dldGhlciB3aXRoIHdoYXQgYW1vdW50cyB0byBhCisgIHNlcmlhbCBsaW5lIGFzIGZvbGxvd3M6CisKKyAgUnVuIG9uZSBVTUwgd2l0aCBhIHNlcmlhbCBsaW5lIGF0dGFjaGVkIHRvIGEgcHR5IC0KKworCisgICAgICAgIHNzbDE9cHR5CisKKworCisKKyAgTG9vayBhdCB0aGUgYm9vdCBsb2cgdG8gc2VlIHdoYXQgcHR5IGl0IGdvdCAodGhpcyBleGFtcGxlIHdpbGwgYXNzdW1lCisgIHRoYXQgaXQgZ290IC9kZXYvcHR5cDEpLgorCisgIEJvb3QgdGhlIG90aGVyIFVNTCB3aXRoIGEgc2VyaWFsIGxpbmUgYXR0YWNoZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgdHR5IC0KKworCisgICAgICAgIHNzbDE9dHR5Oi9kZXYvdHR5cDEKKworCisKKworICBMb2cgaW4sIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyBubyBnZXR0eSBvbiB0aGF0IHNlcmlhbCBsaW5lLCBhdHRhY2ggYQorICB0ZXJtaW5hbCBwcm9ncmFtIGxpa2UgbWluaWNvbSB0byBpdCwgYW5kIHlvdSBzaG91bGQgc2VlIHRoZSBsb2dpbgorICBwcm9tcHQgb2YgdGhlIG90aGVyIHZpcnR1YWwgbWFjaGluZS4KKworCisgIDYINi4ILiAgUwhTZQhldAh0dAh0aQhpbghuZwhnIHUIdXAIcCB0CHRoCGhlCGUgbghuZQhldAh0dwh3bwhvcghyawhrCisKKworCisgIFRoaXMgcGFnZSBkZXNjcmliZXMgaG93IHRvIHNldCB1cCB0aGUgdmFyaW91cyB0cmFuc3BvcnRzIGFuZCB0bworICBwcm92aWRlIGEgVU1MIGluc3RhbmNlIHdpdGggbmV0d29yayBhY2Nlc3MgdG8gdGhlIGhvc3QsIG90aGVyIG1hY2hpbmVzCisgIG9uIHRoZSBsb2NhbCBuZXQsIGFuZCB0aGUgcmVzdCBvZiB0aGUgbmV0LgorCisKKyAgQXMgb2YgMi40LjUsIFVNTCBuZXR3b3JraW5nIGhhcyBiZWVuIGNvbXBsZXRlbHkgcmVkb25lIHRvIG1ha2UgaXQgbXVjaAorICBlYXNpZXIgdG8gc2V0IHVwLCBmaXggYnVncywgYW5kIGFkZCBuZXcgZmVhdHVyZXMuCisKKworICBUaGVyZSBpcyBhIG5ldyBoZWxwZXIsIHVtbF9uZXQsIHdoaWNoIGRvZXMgdGhlIGhvc3Qgc2V0dXAgdGhhdAorICByZXF1aXJlcyByb290IHByaXZpbGVnZXMuCisKKworICBUaGVyZSBhcmUgY3VycmVudGx5IGZpdmUgdHJhbnNwb3J0IHR5cGVzIGF2YWlsYWJsZSBmb3IgYSBVTUwgdmlydHVhbAorICBtYWNoaW5lIHRvIGV4Y2hhbmdlIHBhY2tldHMgd2l0aCBvdGhlciBob3N0czoKKworICArCG8gIGV0aGVydGFwCisKKyAgKwhvICBUVU4vVEFQCisKKyAgKwhvICBNdWx0aWNhc3QKKworICArCG8gIGEgc3dpdGNoIGRhZW1vbgorCisgICsIbyAgc2xpcAorCisgICsIbyAgc2xpcnAKKworICArCG8gIHBjYXAKKworICAgICBUaGUgVFVOL1RBUCwgZXRoZXJ0YXAsIHNsaXAsIGFuZCBzbGlycCB0cmFuc3BvcnRzIGFsbG93IGEgVU1MCisgICAgIGluc3RhbmNlIHRvIGV4Y2hhbmdlIHBhY2tldHMgd2l0aCB0aGUgaG9zdC4gIFRoZXkgbWF5IGJlIGRpcmVjdGVkCisgICAgIHRvIHRoZSBob3N0IG9yIHRoZSBob3N0IG1heSBqdXN0IGFjdCBhcyBhIHJvdXRlciB0byBwcm92aWRlIGFjY2VzcworICAgICB0byBvdGhlciBwaHlzaWNhbCBvciB2aXJ0dWFsIG1hY2hpbmVzLgorCisKKyAgVGhlIHBjYXAgdHJhbnNwb3J0IGlzIGEgc3ludGhldGljIHJlYWQtb25seSBpbnRlcmZhY2UsIHVzaW5nIHRoZQorICBsaWJwY2FwIGJpbmFyeSB0byBjb2xsZWN0IHBhY2tldHMgZnJvbSBpbnRlcmZhY2VzIG9uIHRoZSBob3N0IGFuZAorICBmaWx0ZXIgdGhlbS4gIFRoaXMgaXMgdXNlZnVsIGZvciBidWlsZGluZyBwcmVjb25maWd1cmVkIHRyYWZmaWMKKyAgbW9uaXRvcnMgb3Igc25pZmZlcnMuCisKKworICBUaGUgZGFlbW9uIGFuZCBtdWx0aWNhc3QgdHJhbnNwb3J0cyBwcm92aWRlIGEgY29tcGxldGVseSB2aXJ0dWFsCisgIG5ldHdvcmsgdG8gb3RoZXIgdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgbmV0d29yayBpcyBjb21wbGV0ZWx5CisgIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBwaHlzaWNhbCBuZXR3b3JrIHVubGVzcyBvbmUgb2YgdGhlIHZpcnR1YWwKKyAgbWFjaGluZXMgb24gaXQgaXMgYWN0aW5nIGFzIGEgZ2F0ZXdheS4KKworCisgIFdpdGggc28gbWFueSBob3N0IHRyYW5zcG9ydHMsIHdoaWNoIG9uZSBzaG91bGQgeW91IHVzZT8gIEhlcmUncyB3aGVuCisgIHlvdSBzaG91bGQgdXNlIGVhY2ggb25lOgorCisgICsIbyAgZXRoZXJ0YXAgLSBpZiB5b3Ugd2FudCBhY2Nlc3MgdG8gdGhlIGhvc3QgbmV0d29ya2luZyBhbmQgaXQgaXMKKyAgICAgcnVubmluZyAyLjIKKworICArCG8gIFRVTi9UQVAgLSBpZiB5b3Ugd2FudCBhY2Nlc3MgdG8gdGhlIGhvc3QgbmV0d29ya2luZyBhbmQgaXQgaXMKKyAgICAgcnVubmluZyAyLjQuICBBbHNvLCB0aGUgVFVOL1RBUCB0cmFuc3BvcnQgaXMgYWJsZSB0byB1c2UgYQorICAgICBwcmVjb25maWd1cmVkIGRldmljZSwgYWxsb3dpbmcgaXQgdG8gYXZvaWQgdXNpbmcgdGhlIHNldHVpZCB1bWxfbmV0CisgICAgIGhlbHBlciwgd2hpY2ggaXMgYSBzZWN1cml0eSBhZHZhbnRhZ2UuCisKKyAgKwhvICBNdWx0aWNhc3QgLSBpZiB5b3Ugd2FudCBhIHB1cmVseSB2aXJ0dWFsIG5ldHdvcmsgYW5kIHlvdSBkb24ndCB3YW50CisgICAgIHRvIHNldCB1cCBhbnl0aGluZyBidXQgdGhlIFVNTAorCisgICsIbyAgYSBzd2l0Y2ggZGFlbW9uIC0gaWYgeW91IHdhbnQgYSBwdXJlbHkgdmlydHVhbCBuZXR3b3JrIGFuZCB5b3UKKyAgICAgZG9uJ3QgbWluZCBydW5uaW5nIHRoZSBkYWVtb24gaW4gb3JkZXIgdG8gZ2V0IHNvbWV3aGF0IGJldHRlcgorICAgICBwZXJmb3JtYW5jZQorCisgICsIbyAgc2xpcCAtIHRoZXJlIGlzIG5vIHBhcnRpY3VsYXIgcmVhc29uIHRvIHJ1biB0aGUgc2xpcCBiYWNrZW5kIHVubGVzcworICAgICBldGhlcnRhcCBhbmQgVFVOL1RBUCBhcmUganVzdCBub3QgYXZhaWxhYmxlIGZvciBzb21lIHJlYXNvbgorCisgICsIbyAgc2xpcnAgLSBpZiB5b3UgZG9uJ3QgaGF2ZSByb290IGFjY2VzcyBvbiB0aGUgaG9zdCB0byBzZXR1cAorICAgICBuZXR3b3JraW5nLCBvciBpZiB5b3UgZG9uJ3Qgd2FudCB0byBhbGxvY2F0ZSBhbiBJUCB0byB5b3VyIFVNTAorCisgICsIbyAgcGNhcCAtIG5vdCBtdWNoIHVzZSBmb3IgYWN0dWFsIG5ldHdvcmsgY29ubmVjdGl2aXR5LCBidXQgZ3JlYXQgZm9yCisgICAgIG1vbml0b3JpbmcgdHJhZmZpYyBvbiB0aGUgaG9zdAorCisgICAgIEV0aGVydGFwIGlzIGF2YWlsYWJsZSBvbiAyLjQgYW5kIHdvcmtzIGZpbmUuICBUVU4vVEFQIGlzIHByZWZlcnJlZAorICAgICB0byBpdCBiZWNhdXNlIGl0IGhhcyBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIGV0aGVydGFwIGlzIG9mZmljaWFsbHkKKyAgICAgY29uc2lkZXJlZCBvYnNvbGV0ZSBpbiAyLjQuICBBbHNvLCB0aGUgcm9vdCBoZWxwZXIgb25seSBuZWVkcyB0bworICAgICBydW4gb2NjYXNpb25hbGx5IGZvciBUVU4vVEFQLCByYXRoZXIgdGhhbiBoYW5kbGluZyBldmVyeSBwYWNrZXQsIGFzCisgICAgIGl0IGRvZXMgd2l0aCBldGhlcnRhcC4gIFRoaXMgaXMgYSBzbGlnaHQgc2VjdXJpdHkgYWR2YW50YWdlIHNpbmNlCisgICAgIGl0IHByb3ZpZGVzIGZld2VyIG9wcG9ydHVuaXRpZXMgZm9yIGEgbmFzdHkgVU1MIHVzZXIgdG8gc29tZWhvdworICAgICBleHBsb2l0IHRoZSBoZWxwZXIncyByb290IHByaXZpbGVnZXMuCisKKworICA2CDYuCC4xCDEuCC4gIEcIR2UIZW4IbmUIZXIIcmEIYWwIbCBzCHNlCGV0CHR1CHVwCHAKKworICBGaXJzdCwgeW91IG11c3QgaGF2ZSB0aGUgdmlydHVhbCBuZXR3b3JrIGVuYWJsZWQgaW4geW91ciBVTUwuICBJZiBhcmUKKyAgcnVubmluZyBhIHByZWJ1aWx0IGtlcm5lbCBmcm9tIHRoaXMgc2l0ZSwgZXZlcnl0aGluZyBpcyBhbHJlYWR5CisgIGVuYWJsZWQuICBJZiB5b3UgYnVpbGQgdGhlIGtlcm5lbCB5b3Vyc2VsZiwgdW5kZXIgdGhlICJOZXR3b3JrIGRldmljZQorICBzdXBwb3J0IiBtZW51LCBlbmFibGUgIk5ldHdvcmsgZGV2aWNlIHN1cHBvcnQiLCBhbmQgdGhlbiB0aGUgdGhyZWUKKyAgdHJhbnNwb3J0cy4KKworCisgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gcHJvdmlkZSBhIG5ldHdvcmsgZGV2aWNlIHRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUuCisgIFRoaXMgaXMgZG9uZSBieSBkZXNjcmliaW5nIGl0IG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorCisgIFRoZSBnZW5lcmFsIGZvcm1hdCBpcworCisKKyAgICAgICBldGggPG4+ID0gPHRyYW5zcG9ydD4gLCA8dHJhbnNwb3J0IGFyZ3M+CisKKworCisKKyAgRm9yIGV4YW1wbGUsIGEgdmlydHVhbCBldGhlcm5ldCBkZXZpY2UgbWF5IGJlIGF0dGFjaGVkIHRvIGEgaG9zdAorICBldGhlcnRhcCBkZXZpY2UgYXMgZm9sbG93czoKKworCisgICAgICAgZXRoMD1ldGhlcnRhcCx0YXAwLGZlOmZkOjA6MDowOjEsMTkyLjE2OC4wLjI1NAorCisKKworCisgIFRoaXMgc2V0cyB1cCBldGgwIGluc2lkZSB0aGUgdmlydHVhbCBtYWNoaW5lIHRvIGF0dGFjaCBpdHNlbGYgdG8gdGhlCisgIGhvc3QgL2Rldi90YXAwLCBhc3NpZ25zIGl0IGFuIGV0aGVybmV0IGFkZHJlc3MsIGFuZCBhc3NpZ25zIHRoZSBob3N0CisgIHRhcDAgaW50ZXJmYWNlIGFuIElQIGFkZHJlc3MuCisKKworCisgIE5vdGUgdGhhdCB0aGUgSVAgYWRkcmVzcyB5b3UgYXNzaWduIHRvIHRoZSBob3N0IGVuZCBvZiB0aGUgdGFwIGRldmljZQorICBtdXN0IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBJUCB5b3UgYXNzaWduIHRvIHRoZSBldGggZGV2aWNlIGluc2lkZSBVTUwuCisgIElmIHlvdSBhcmUgc2hvcnQgb24gSVBzIGFuZCBkb24ndCB3YW50IHRvIGNvbXN1bWUgdHdvIHBlciBVTUwsIHRoZW4KKyAgeW91IGNhbiByZXVzZSB0aGUgaG9zdCdzIGV0aCBJUCBhZGRyZXNzIGZvciB0aGUgaG9zdCBlbmRzIG9mIHRoZSB0YXAKKyAgZGV2aWNlcy4gIEludGVybmFsbHksIHRoZSBVTUxzIG11c3Qgc3RpbGwgZ2V0IHVuaXF1ZSBJUHMgZm9yIHRoZWlyIGV0aAorICBkZXZpY2VzLiAgWW91IGNhbiBhbHNvIGdpdmUgdGhlIFVNTHMgbm9uLXJvdXRhYmxlIElQcyAoMTkyLjE2OC54Lnggb3IKKyAgMTAueC54LngpIGFuZCBoYXZlIHRoZSBob3N0IG1hc3F1ZXJhZGUgdGhlbS4gIFRoaXMgd2lsbCBsZXQgb3V0Z29pbmcKKyAgY29ubmVjdGlvbnMgd29yaywgYnV0IGluY29taW5nIGNvbm5lY3Rpb25zIHdvbid0IHdpdGhvdXQgbW9yZSB3b3JrLAorICBzdWNoIGFzIHBvcnQgZm9yd2FyZGluZyBmcm9tIHRoZSBob3N0LgorICBBbHNvIG5vdGUgdGhhdCB3aGVuIHlvdSBjb25maWd1cmUgdGhlIGhvc3Qgc2lkZSBvZiBhbiBpbnRlcmZhY2UsIGl0IGlzCisgIG9ubHkgYWN0aW5nIGFzIGEgZ2F0ZXdheS4gIEl0IHdpbGwgcmVzcG9uZCB0byBwaW5ncyBzZW50IHRvIGl0CisgIGxvY2FsbHksIGJ1dCBpcyBub3QgdXNlZnVsIHRvIGRvIHRoYXQgc2luY2UgaXQncyBhIGhvc3QgaW50ZXJmYWNlLgorICBZb3UgYXJlIG5vdCB0YWxraW5nIHRvIHRoZSBVTUwgd2hlbiB5b3UgcGluZyB0aGF0IGludGVyZmFjZSBhbmQgZ2V0IGEKKyAgcmVzcG9uc2UuCisKKworICBZb3UgY2FuIGFsc28gYWRkIGRldmljZXMgdG8gYSBVTUwgYW5kIHJlbW92ZSB0aGVtIGF0IHJ1bnRpbWUuICBTZWUgdGhlCisgIGBgVGhlIE1hbmFnZW1lbnQgQ29uc29sZScnICBwYWdlIGZvciBkZXRhaWxzLgorCisKKyAgVGhlIHNlY3Rpb25zIGJlbG93IGRlc2NyaWJlIHRoaXMgaW4gbW9yZSBkZXRhaWwuCisKKworICBPbmNlIHlvdSd2ZSBkZWNpZGVkIGhvdyB5b3UncmUgZ29pbmcgdG8gc2V0IHVwIHRoZSBkZXZpY2VzLCB5b3UgYm9vdAorICBVTUwsIGxvZyBpbiwgY29uZmlndXJlIHRoZSBVTUwgc2lkZSBvZiB0aGUgZGV2aWNlcywgYW5kIHNldCB1cCByb3V0ZXMKKyAgdG8gdGhlIG91dHNpZGUgd29ybGQuICBBdCB0aGF0IHBvaW50LCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHRhbGsgdG8gYW55CisgIG90aGVyIG1hY2hpbmVzLCBwaHlzaWNhbCBvciB2aXJ0dWFsLCBvbiB0aGUgbmV0LgorCisKKyAgSWYgaWZjb25maWcgaW5zaWRlIFVNTCBmYWlscyBhbmQgdGhlIG5ldHdvcmsgcmVmdXNlcyB0byBjb21lIHVwLCBydW4KKyAgdGVsbCB5b3Ugd2hhdCB3ZW50IHdyb25nLgorCisKKworICA2CDYuCC4yCDIuCC4gIFUIVXMIc2UIZXIIcnMIc3AIcGEIYWMIY2UIZSBkCGRhCGFlCGVtCG1vCG9uCG5zCHMKKworICBZb3Ugd2lsbCBsaWtlbHkgbmVlZCB0aGUgc2V0dWlkIGhlbHBlciwgb3IgdGhlIHN3aXRjaCBkYWVtb24sIG9yIGJvdGguCisgIFRoZXkgYXJlIGJvdGggaW5zdGFsbGVkIHdpdGggdGhlIFJQTSBhbmQgZGViLCBzbyBpZiB5b3UndmUgaW5zdGFsbGVkCisgIGVpdGhlciwgeW91IGNhbiBza2lwIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbi4KKworCisgIElmIG5vdCwgdGhlbiB5b3UgbmVlZCB0byBjaGVjayB0aGVtIG91dCBvZiBDVlMsIGJ1aWxkIHRoZW0sIGFuZAorICBpbnN0YWxsIHRoZW0uICBUaGUgaGVscGVyIGlzIHVtbF9uZXQsIGluIENWUyAvdG9vbHMvdW1sX25ldCwgYW5kIHRoZQorICBkYWVtb24gaXMgdW1sX3N3aXRjaCwgaW4gQ1ZTIC90b29scy91bWxfcm91dGVyLiAgVGhleSBhcmUgYm90aCBidWlsdAorICB3aXRoIGEgcGxhaW4gJ21ha2UnLiAgQm90aCBuZWVkIHRvIGJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSB0aGF0J3MKKyAgaW4geW91ciBwYXRoIC0gL3Vzci9iaW4gaXMgcmVjb21tZW5kLiAgT24gdG9wIG9mIHRoYXQsIHVtbF9uZXQgbmVlZHMKKyAgdG8gYmUgc2V0dWlkIHJvb3QuCisKKworCisgIDYINi4ILjMIMy4ILiAgUwhTcAhwZQhlYwhjaQhpZghmeQh5aQhpbghuZwhnIGUIZXQIdGgIaGUIZXIIcm4IbmUIZXQIdCBhCGFkCGRkCGRyCHJlCGVzCHNzCHNlCGVzCHMKKworICBCZWxvdywgeW91IHdpbGwgc2VlIHRoYXQgdGhlIFRVTi9UQVAsIGV0aGVydGFwLCBhbmQgZGFlbW9uIGludGVyZmFjZXMKKyAgYWxsb3cgeW91IHRvIHNwZWNpZnkgaGFyZHdhcmUgYWRkcmVzc2VzIGZvciB0aGUgdmlydHVhbCBldGhlcm5ldAorICBkZXZpY2VzLiAgVGhpcyBpcyBnZW5lcmFsbHkgbm90IG5lY2Vzc2FyeS4gIElmIHlvdSBkb24ndCBoYXZlIGEKKyAgc3BlY2lmaWMgcmVhc29uIHRvIGRvIGl0LCB5b3UgcHJvYmFibHkgc2hvdWxkbid0LiAgSWYgb25lIGlzIG5vdAorICBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIGRyaXZlciB3aWxsIGFzc2lnbiBvbmUgYmFzZWQgb24gdGhlCisgIGRldmljZSBJUCBhZGRyZXNzLiAgSXQgd2lsbCBwcm92aWRlIHRoZSBhZGRyZXNzIGZlOmZkOm5uOm5uOm5uOm5uCisgIHdoZXJlIG5uLm5uLm5uLm5uIGlzIHRoZSBkZXZpY2UgSVAgYWRkcmVzcy4gIFRoaXMgaXMgbmVhcmx5IGFsd2F5cworICBzdWZmaWNpZW50IHRvIGd1YXJhbnRlZSBhIHVuaXF1ZSBoYXJkd2FyZSBhZGRyZXNzIGZvciB0aGUgZGV2aWNlLiAgQQorICBjb3VwbGUgb2YgZXhjZXB0aW9ucyBhcmU6CisKKyAgKwhvICBBbm90aGVyIHNldCBvZiB2aXJ0dWFsIGV0aGVybmV0IGRldmljZXMgYXJlIG9uIHRoZSBzYW1lIG5ldHdvcmsgYW5kCisgICAgIHRoZXkgYXJlIGFzc2lnbmVkIGhhcmR3YXJlIGFkZHJlc3NlcyB1c2luZyBhIGRpZmZlcmVudCBzY2hlbWUgd2hpY2gKKyAgICAgbWF5IGNvbmZsaWN0IHdpdGggdGhlIFVNTCBJUCBhZGRyZXNzLWJhc2VkIHNjaGVtZQorCisgICsIbyAgWW91IGFyZW4ndCBnb2luZyB0byB1c2UgdGhlIGRldmljZSBmb3IgSVAgbmV0d29ya2luZywgc28geW91IGRvbid0CisgICAgIGFzc2lnbiB0aGUgZGV2aWNlIGFuIElQIGFkZHJlc3MKKworICAgICBJZiB5b3UgbGV0IHRoZSBkcml2ZXIgcHJvdmlkZSB0aGUgaGFyZHdhcmUgYWRkcmVzcywgeW91IHNob3VsZCBtYWtlCisgICAgIHN1cmUgdGhhdCB0aGUgZGV2aWNlIElQIGFkZHJlc3MgaXMga25vd24gYmVmb3JlIHRoZSBpbnRlcmZhY2UgaXMKKyAgICAgYnJvdWdodCB1cC4gIFNvLCBpbnNpZGUgVU1MLCB0aGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQ6CisKKworCisgIFVNTCMKKyAgaWZjb25maWcgZXRoMCAxOTIuMTY4LjAuMjUwIHVwCisKKworCisKKyAgSWYgeW91IGRlY2lkZSB0byBhc3NpZ24gdGhlIGhhcmR3YXJlIGFkZHJlc3MgeW91cnNlbGYsIG1ha2Ugc3VyZSB0aGF0CisgIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBhZGRyZXNzIGlzIGV2ZW4uICBBZGRyZXNzZXMgd2l0aCBhbiBvZGQgZmlyc3QKKyAgYnl0ZSBhcmUgYnJvYWRjYXN0IGFkZHJlc3Nlcywgd2hpY2ggeW91IGRvbid0IHdhbnQgYXNzaWduZWQgdG8gYQorICBkZXZpY2UuCisKKworCisgIDYINi4ILjQINC4ILiAgVQhVTQhNTAhMIGkIaW4IbnQIdGUIZXIIcmYIZmEIYWMIY2UIZSBzCHNlCGV0CHR1CHVwCHAKKworICBPbmNlIHRoZSBuZXR3b3JrIGRldmljZXMgaGF2ZSBiZWVuIGRlc2NyaWJlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB5b3UKKyAgc2hvdWxkIGJvb3QgVU1MIGFuZCBsb2cgaW4uCisKKworICBUaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgYnJpbmcgdGhlIGludGVyZmFjZSB1cDoKKworCisgICAgICAgVU1MIyBpZmNvbmZpZyBldGhuIGlwLWFkZHJlc3MgdXAKKworCisKKworICBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gcGluZyB0aGUgaG9zdCBhdCB0aGlzIHBvaW50LgorCisKKyAgVG8gcmVhY2ggdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLCB5b3Ugc2hvdWxkIHNldCBhIGRlZmF1bHQgcm91dGUgdG8gdGhlCisgIGhvc3Q6CisKKworICAgICAgIFVNTCMgcm91dGUgYWRkIGRlZmF1bHQgZ3cgaG9zdCBpcAorCisKKworCisgIEFnYWluLCB3aXRoIGhvc3QgaXAgb2YgMTkyLjE2OC4wLjQ6CisKKworICAgICAgIFVNTCMgcm91dGUgYWRkIGRlZmF1bHQgZ3cgMTkyLjE2OC4wLjQKKworCisKKworICBUaGlzIHBhZ2UgdXNlZCB0byByZWNvbW1lbmQgc2V0dGluZyBhIG5ldHdvcmsgcm91dGUgdG8geW91ciBsb2NhbCBuZXQuCisgIFRoaXMgaXMgd3JvbmcsIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSBVTUwgdG8gdHJ5IHRvIGZpZ3VyZSBvdXQgaGFyZHdhcmUKKyAgYWRkcmVzc2VzIG9mIHRoZSBsb2NhbCBtYWNoaW5lcyBieSBhcnBpbmcgb24gdGhlIGludGVyZmFjZSB0byB0aGUKKyAgaG9zdC4gIFNpbmNlIHRoYXQgaW50ZXJmYWNlIGlzIGJhc2ljYWxseSBhIHNpbmdsZSBzdHJhbmQgb2YgZXRoZXJuZXQKKyAgd2l0aCB0d28gbm9kZXMgb24gaXQgKFVNTCBhbmQgdGhlIGhvc3QpIGFuZCBhcnAgcmVxdWVzdHMgZG9uJ3QgY3Jvc3MKKyAgbmV0d29ya3MsIHRoZXkgd2lsbCBmYWlsIHRvIGVsaWNpdCBhbnkgcmVzcG9uc2VzLiAgU28sIHdoYXQgeW91IHdhbnQKKyAgaXMgZm9yIFVNTCB0byBqdXN0IGJsaW5kbHkgdGhyb3cgYWxsIHBhY2tldHMgYXQgdGhlIGhvc3QgYW5kIGxldCBpdAorICBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGVtLCB3aGljaCBpcyB3aGF0IGxlYXZpbmcgb3V0IHRoZSBuZXR3b3JrCisgIHJvdXRlIGFuZCBhZGRpbmcgdGhlIGRlZmF1bHQgcm91dGUgZG9lcy4KKworCisgIE5vdGU6IElmIHlvdSBjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIG90aGVyIGhvc3RzIG9uIHlvdXIgcGh5c2ljYWwKKyAgZXRoZXJuZXQsIGl0J3MgcHJvYmFibHkgYmVjYXVzZSBvZiBhIG5ldHdvcmsgcm91dGUgdGhhdCdzCisgIGF1dG9tYXRpY2FsbHkgc2V0IHVwLiAgSWYgeW91IHJ1biAncm91dGUgLW4nIGFuZCBzZWUgYSByb3V0ZSB0aGF0CisgIGxvb2tzIGxpa2UgdGhpczoKKworCisKKworICBEZXN0aW5hdGlvbiAgICAgR2F0ZXdheSAgICAgICAgIEdlbm1hc2sgICAgICAgICBGbGFncyBNZXRyaWMgUmVmICAgIFVzZSBJZmFjZQorICAxOTIuMTY4LjAuMCAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4yNTUuMjU1LjAgICBVICAgICAwICAgICAgMCAgICAgIDAgICBldGgwCisKKworCisKKyAgd2l0aCBhIG1hc2sgdGhhdCdzIG5vdCAyNTUuMjU1LjI1NS4yNTUsIHRoZW4gcmVwbGFjZSBpdCB3aXRoIGEgcm91dGUKKyAgdG8geW91ciBob3N0OgorCisKKyAgICAgICBVTUwjCisgICAgICAgcm91dGUgZGVsIC1uZXQgMTkyLjE2OC4wLjAgZGV2IGV0aDAgbmV0bWFzayAyNTUuMjU1LjI1NS4wCisKKworCisKKworCisgICAgICAgVU1MIworICAgICAgIHJvdXRlIGFkZCAtaG9zdCAxOTIuMTY4LjAuNCBkZXYgZXRoMAorCisKKworCisgIFRoaXMsIHBsdXMgdGhlIGRlZmF1bHQgcm91dGUgdG8gdGhlIGhvc3QsIHdpbGwgYWxsb3cgVU1MIHRvIGV4Y2hhbmdlCisgIHBhY2tldHMgd2l0aCBhbnkgbWFjaGluZSBvbiB5b3VyIGV0aGVybmV0LgorCisKKworICA2CDYuCC41CDUuCC4gIE0ITXUIdWwIbHQIdGkIaWMIY2EIYXMIc3QIdAorCisgIFRoZSBzaW1wbGVzdCB3YXkgdG8gc2V0IHVwIGEgdmlydHVhbCBuZXR3b3JrIGJldHdlZW4gbXVsdGlwbGUgVU1McyBpcworICB0byB1c2UgdGhlIG1jYXN0IHRyYW5zcG9ydC4gIFRoaXMgd2FzIHdyaXR0ZW4gYnkgSGFyYWxkIFdlbHRlIGFuZCBpcworICBwcmVzZW50IGluIFVNTCB2ZXJzaW9uIDIuNC41LTV1bSBhbmQgbGF0ZXIuICBZb3VyIHN5c3RlbSBtdXN0IGhhdmUKKyAgbXVsdGljYXN0IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBhbmQgdGhlcmUgbXVzdCBiZSBhIG11bHRpY2FzdC1jYXBhYmxlCisgIG5ldHdvcmsgZGV2aWNlIG9uIHRoZSBob3N0LiAgTm9ybWFsbHksIHRoaXMgaXMgZXRoMCwgYnV0IGlmIHRoZXJlIGlzCisgIG5vIGV0aGVybmV0IGNhcmQgb24gdGhlIGhvc3QsIHRoZW4geW91IHdpbGwgbGlrZWx5IGdldCBzdHJhbmdlIGVycm9yCisgIG1lc3NhZ2VzIHdoZW4geW91IGJyaW5nIHRoZSBkZXZpY2UgdXAgaW5zaWRlIFVNTC4KKworCisgIFRvIHVzZSBpdCwgcnVuIHR3byBVTUxzIHdpdGgKKworCisgICAgICAgIGV0aDA9bWNhc3QKKworCisKKworICBvbiB0aGVpciBjb21tYW5kIGxpbmVzLiAgTG9nIGluLCBjb25maWd1cmUgdGhlIGV0aGVybmV0IGRldmljZSBpbiBlYWNoCisgIG1hY2hpbmUgd2l0aCBkaWZmZXJlbnQgSVAgYWRkcmVzc2VzOgorCisKKyAgICAgICBVTUwxIyBpZmNvbmZpZyBldGgwIDE5Mi4xNjguMC4yNTQKKworCisKKworCisKKyAgICAgICBVTUwyIyBpZmNvbmZpZyBldGgwIDE5Mi4xNjguMC4yNTMKKworCisKKworICBhbmQgdGhleSBzaG91bGQgYmUgYWJsZSB0byB0YWxrIHRvIGVhY2ggb3RoZXIuCisKKyAgVGhlIGZ1bGwgc2V0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciB0aGlzIHRyYW5zcG9ydCBhcmUKKworCisKKyAgICAgICBldGhuPW1jYXN0LGV0aGVybmV0IGFkZHJlc3MsbXVsdGljYXN0CisgICAgICAgYWRkcmVzcyxtdWx0aWNhc3QgcG9ydCx0dGwKKworCisKKworICBIYXJhbGQncyBvcmlnaW5hbCBSRUFETUUgaXMgaGVyZSA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2UtCisgIGZvcmdlLm5ldC90ZXh0L21jYXN0LnR4dD4gIGFuZCBleHBsYWlucyB0aGVzZSBpbiBkZXRhaWwsIGFzIHdlbGwgYXMKKyAgc29tZSBvdGhlciBpc3N1ZXMuCisKKworCisgIDYINi4ILjYINi4ILiAgVAhUVQhVTghOLwgvVAhUQQhBUAhQIHcId2kIaXQIdGgIaCB0CHRoCGhlCGUgdQh1bQhtbAhsXwhfbghuZQhldAh0IGgIaGUIZWwIbHAIcGUIZXIIcgorCisgIFRVTi9UQVAgaXMgdGhlIHByZWZlcnJlZCBtZWNoYW5pc20gb24gMi40IHRvIGV4Y2hhbmdlIHBhY2tldHMgd2l0aCB0aGUKKyAgaG9zdC4gIFRoZSBUVU4vVEFQIGJhY2tlbmQgaGFzIGJlZW4gaW4gVU1MIHNpbmNlIDIuNC45LTN1bS4KKworCisgIFRoZSBlYXNpZXN0IHdheSB0byBnZXQgdXAgYW5kIHJ1bm5pbmcgaXMgdG8gbGV0IHRoZSBzZXR1aWQgdW1sX25ldAorICBoZWxwZXIgZG8gdGhlIGhvc3Qgc2V0dXAgZm9yIHlvdS4gIFRoaXMgaW52b2x2ZXMgaW5zbW9kLWluZyB0aGUgdHVuLm8KKyAgbW9kdWxlIGlmIG5lY2Vzc2FyeSwgY29uZmlndXJpbmcgdGhlIGRldmljZSwgYW5kIHNldHRpbmcgdXAgSVAKKyAgZm9yd2FyZGluZywgcm91dGluZywgYW5kIHByb3h5IGFycC4gIElmIHlvdSBhcmUgbmV3IHRvIFVNTCBuZXR3b3JraW5nLAorICBkbyB0aGlzIGZpcnN0LiAgSWYgeW91J3JlIGNvbmNlcm5lZCBhYm91dCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIG9mCisgIHRoZSBzZXR1aWQgaGVscGVyLCB1c2UgaXQgdG8gZ2V0IHVwIGFuZCBydW5uaW5nLCB0aGVuIHJlYWQgdGhlIG5leHQKKyAgc2VjdGlvbiB0byBzZWUgaG93IHRvIGhhdmUgVU1MIHVzZSBhIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSwgd2hpY2gKKyAgYXZvaWRzIHRoZSB1c2Ugb2YgdW1sX25ldC4KKworCisgIElmIHlvdSBzcGVjaWZ5IGFuIElQIGFkZHJlc3MgZm9yIHRoZSBob3N0IHNpZGUgb2YgdGhlIGRldmljZSwgdGhlCisgIHVtbF9uZXQgaGVscGVyIHdpbGwgZG8gYWxsIG5lY2Vzc2FyeSBzZXR1cCBvbiB0aGUgaG9zdCAtIHRoZSBvbmx5CisgIHJlcXVpcmVtZW50IGlzIHRoYXQgVFVOL1RBUCBiZSBhdmFpbGFibGUsIGVpdGhlciBidWlsdCBpbiB0byB0aGUgaG9zdAorICBrZXJuZWwgb3IgYXMgdGhlIHR1bi5vIG1vZHVsZS4KKworICBUaGUgZm9ybWF0IG9mIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoIHRvIGF0dGFjaCBhIGRldmljZSB0byBhIFRVTi9UQVAKKyAgZGV2aWNlIGlzCisKKworICAgICAgIGV0aCA8bj4gPXR1bnRhcCwsLCA8SVAgYWRkcmVzcz4KKworCisKKworICBGb3IgZXhhbXBsZSwgdGhpcyBhcmd1bWVudCB3aWxsIGF0dGFjaCB0aGUgVU1MJ3MgZXRoMCB0byB0aGUgbmV4dAorICBhdmFpbGFibGUgdGFwIGRldmljZSBhbmQgYXNzaWduIGFuIGV0aGVybmV0IGFkZHJlc3MgdG8gaXQgYmFzZWQgb24gaXRzCisgIElQIGFkZHJlc3MKKworCisgICAgICAgZXRoMD10dW50YXAsLCwxOTIuMTY4LjAuMjU0CisKKworCisKKworCisgIE5vdGUgdGhhdCB0aGUgSVAgYWRkcmVzcyB0aGF0IG11c3QgYmUgdXNlZCBmb3IgdGhlIGV0aCBkZXZpY2UgaW5zaWRlCisgIFVNTCBpcyBmaXhlZCBieSB0aGUgcm91dGluZyBhbmQgcHJveHkgYXJwIHRoYXQgaXMgc2V0IHVwIG9uIHRoZQorICBUVU4vVEFQIGRldmljZSBvbiB0aGUgaG9zdC4gIFlvdSBjYW4gdXNlIGEgZGlmZmVyZW50IG9uZSwgYnV0IGl0IHdvbid0CisgIHdvcmsgYmVjYXVzZSByZXBseSBwYWNrZXRzIHdvbid0IHJlYWNoIHRoZSBVTUwuICBUaGlzIGlzIGEgZmVhdHVyZS4KKyAgSXQgcHJldmVudHMgYSBuYXN0eSBVTUwgdXNlciBmcm9tIGRvaW5nIHRoaW5ncyBsaWtlIHNldHRpbmcgdGhlIFVNTCBJUAorICB0byB0aGUgc2FtZSBhcyB0aGUgbmV0d29yaydzIG5hbWVzZXJ2ZXIgb3IgbWFpbCBzZXJ2ZXIuCisKKworICBUaGVyZSBhcmUgYSBjb3VwbGUgcG90ZW50aWFsIHByb2JsZW1zIHdpdGggcnVubmluZyB0aGUgVFVOL1RBUAorICB0cmFuc3BvcnQgb24gYSAyLjQgaG9zdCBrZXJuZWwKKworICArCG8gIFRVTi9UQVAgc2VlbXMgbm90IHRvIHdvcmsgb24gMi40LjMgYW5kIGVhcmxpZXIuICBVcGdyYWRlIHRoZSBob3N0CisgICAgIGtlcm5lbCBvciB1c2UgdGhlIGV0aGVydGFwIHRyYW5zcG9ydC4KKworICArCG8gIFdpdGggYW4gdXBncmFkZWQga2VybmVsLCBUVU4vVEFQIG1heSBmYWlsIHdpdGgKKworCisgICAgICAgRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQorCisKKworCisgIFRoaXMgaXMgZHVlIHRvIGEgaGVhZGVyIG1pc21hdGNoIGJldHdlZW4gdGhlIHVwZ3JhZGVkIGtlcm5lbCBhbmQgdGhlCisgIGtlcm5lbCB0aGF0IHdhcyBvcmlnaW5hbGx5IGluc3RhbGxlZCBvbiB0aGUgbWFjaGluZS4gIFRoZSBmaXggaXMgdG8KKyAgbWFrZSBzdXJlIHRoYXQgL3Vzci9zcmMvbGludXggcG9pbnRzIHRvIHRoZSBoZWFkZXJzIGZvciB0aGUgcnVubmluZworICBrZXJuZWwuCisKKyAgVGhlc2Ugd2VyZSBwb2ludGVkIG91dCBieSBUaW0gUm9iaW5zb24gPHRpbXJvIGF0IHRya3IgZG90IG5ldD4gaW4KKyAgPGh0dHA6Ly93d3cuZ2VvY3Jhd2xlci5jb20vbGlzdHMvMy9Tb3VyY2VGb3JnZS81OTcvMC8+IG5hbWU9InRoaXMgdW1sLQorICB1c2VyIHBvc3QiPiAuCisKKworCisgIDYINi4ILjcINy4ILiAgVAhUVQhVTghOLwgvVAhUQQhBUAhQIHcId2kIaXQIdGgIaCBhCGEgcAhwcghyZQhlYwhjbwhvbghuZghmaQhpZwhndQh1cghyZQhlZAhkIHQIdGEIYXAIcCBkCGRlCGV2CHZpCGljCGNlCGUKKworICBJZiB5b3UgcHJlZmVyIG5vdCB0byBoYXZlIFVNTCB1c2UgdW1sX25ldCAod2hpY2ggaXMgc29tZXdoYXQKKyAgaW5zZWN1cmUpLCB3aXRoIFVNTCAyLjQuMTctMTEsIHlvdSBjYW4gc2V0IHVwIGEgVFVOL1RBUCBkZXZpY2UKKyAgYmVmb3JlaGFuZC4gIFRoZSBzZXR1cCBuZWVkcyB0byBiZSBkb25lIGFzIHJvb3QsIGJ1dCBvbmNlIHRoYXQncyBkb25lLAorICB0aGVyZSBpcyBubyBuZWVkIGZvciByb290IGFzc2lzdGFuY2UuICBTZXR0aW5nIHVwIHRoZSBkZXZpY2UgaXMgZG9uZQorICBhcyBmb2xsb3dzOgorCisgICsIbyAgQ3JlYXRlIHRoZSBkZXZpY2Ugd2l0aCB0dW5jdGwgKGF2YWlsYWJsZSBmcm9tIHRoZSBVTUwgdXRpbGl0aWVzCisgICAgIHRhcmJhbGwpCisKKworCisKKyAgICAgICBob3N0IyAgdHVuY3RsIC11IHVpZAorCisKKworCisgIHdoZXJlIHVpZCBpcyB0aGUgdXNlciBpZCBvciB1c2VybmFtZSB0aGF0IFVNTCB3aWxsIGJlIHJ1biBhcy4gIFRoaXMKKyAgd2lsbCB0ZWxsIHlvdSB3aGF0IGRldmljZSB3YXMgY3JlYXRlZC4KKworICArCG8gIENvbmZpZ3VyZSB0aGUgZGV2aWNlIElQIChjaGFuZ2UgSVAgYWRkcmVzc2VzIGFuZCBkZXZpY2UgbmFtZSB0bworICAgICBzdWl0KQorCisKKworCisgICAgICAgaG9zdCMgIGlmY29uZmlnIHRhcDAgMTkyLjE2OC4wLjI1NCB1cAorCisKKworCisKKyAgKwhvICBTZXQgdXAgcm91dGluZyBhbmQgYXJwaW5nIGlmIGRlc2lyZWQgLSB0aGlzIGlzIG15IHJlY2lwZSwgdGhlcmUgYXJlCisgICAgIG90aGVyIHdheXMgb2YgZG9pbmcgdGhlIHNhbWUgdGhpbmcKKworCisgICAgICAgaG9zdCMKKyAgICAgICBiYXNoIC1jICdlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZCcKKworICAgICAgIGhvc3QjCisgICAgICAgcm91dGUgYWRkIC1ob3N0IDE5Mi4xNjguMC4yNTMgZGV2IHRhcDAKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGJhc2ggLWMgJ2VjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL3RhcDAvcHJveHlfYXJwJworCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgYXJwIC1EcyAxOTIuMTY4LjAuMjUzIGV0aDAgcHViCisKKworCisKKyAgTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBkb25lIGV2ZXJ5IHRpbWUgdGhlIGhvc3QgYm9vdHMgLSB0aGlzIGNvbmZpZ3UtCisgIHJhdGlvbiBpcyBub3Qgc3RvcmVkIGFjcm9zcyBob3N0IHJlYm9vdHMuICBTbywgaXQncyBwcm9iYWJseSBhIGdvb2QKKyAgaWRlYSB0byBzdGljayBpdCBpbiBhbiByYyBmaWxlLiAgQW4gZXZlbiBiZXR0ZXIgaWRlYSB3b3VsZCBiZSBhIGxpdHRsZQorICB1dGlsaXR5IHdoaWNoIHJlYWRzIHRoZSBpbmZvcm1hdGlvbiBmcm9tIGEgY29uZmlnIGZpbGUgYW5kIHNldHMgdXAKKyAgZGV2aWNlcyBhdCBib290IHRpbWUuCisKKyAgKwhvICBSYXRoZXIgdGhhbiB1c2luZyB1cCB0d28gSVBzIGFuZCBBUlBpbmcgZm9yIG9uZSBvZiB0aGVtLCB5b3UgY2FuCisgICAgIGFsc28gcHJvdmlkZSBkaXJlY3QgYWNjZXNzIHRvIHlvdXIgTEFOIGJ5IHRoZSBVTUwgYnkgdXNpbmcgYQorICAgICBicmlkZ2UuCisKKworICAgICAgIGhvc3QjCisgICAgICAgYnJjdGwgYWRkYnIgYnIwCisKKworCisKKworCisgICAgICAgaG9zdCMKKyAgICAgICBpZmNvbmZpZyBldGgwIDAuMC4wLjAgcHJvbWlzYyB1cAorCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgaWZjb25maWcgdGFwMCAwLjAuMC4wIHByb21pc2MgdXAKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGlmY29uZmlnIGJyMCAxOTIuMTY4LjAuMSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgdXAKKworCisKKworCisKKworICBob3N0IworICBicmN0bCBzdHAgYnIwIG9mZgorCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgYnJjdGwgc2V0ZmQgYnIwIDEKKworCisKKworCisKKyAgICAgICBob3N0IworICAgICAgIGJyY3RsIHNldGhlbGxvIGJyMCAxCisKKworCisKKworCisgICAgICAgaG9zdCMKKyAgICAgICBicmN0bCBhZGRpZiBicjAgZXRoMAorCisKKworCisKKworICAgICAgIGhvc3QjCisgICAgICAgYnJjdGwgYWRkaWYgYnIwIHRhcDAKKworCisKKworICBOb3RlIHRoYXQgJ2JyMCcgc2hvdWxkIGJlIHNldHVwIHVzaW5nIGlmY29uZmlnIHdpdGggdGhlIGV4aXN0aW5nIElQCisgIGFkZHJlc3Mgb2YgZXRoMCwgYXMgZXRoMCBubyBsb25nZXIgaGFzIGl0cyBvd24gSVAuCisKKyAgKwhvCisKKworICAgICBBbHNvLCB0aGUgL2Rldi9uZXQvdHVuIGRldmljZSBtdXN0IGJlIHdyaXRhYmxlIGJ5IHRoZSB1c2VyIHJ1bm5pbmcKKyAgICAgVU1MIGluIG9yZGVyIGZvciB0aGUgVU1MIHRvIHVzZSB0aGUgZGV2aWNlIHRoYXQncyBiZWVuIGNvbmZpZ3VyZWQKKyAgICAgZm9yIGl0LiAgVGhlIHNpbXBsZXN0IHRoaW5nIHRvIGRvIGlzCisKKworICAgICAgIGhvc3QjICBjaG1vZCA2NjYgL2Rldi9uZXQvdHVuCisKKworCisKKyAgTWFraW5nIGl0IHdvcmxkLXdyaXRlYWJsZSBsb29rcyBiYWQsIGJ1dCBpdCBzZWVtcyBub3QgdG8gYmUKKyAgZXhwbG9pdGFibGUgYXMgYSBzZWN1cml0eSBob2xlLiAgSG93ZXZlciwgaXQgZG9lcyBhbGxvdyBhbnlvbmUgdG8gY3JlLQorICBhdGUgdXNlbGVzcyB0YXAgZGV2aWNlcyAodXNlbGVzcyBiZWNhdXNlIHRoZXkgY2FuJ3QgY29uZmlndXJlIHRoZW0pLAorICB3aGljaCBpcyBhIERPUyBhdHRhY2suICBBIHNvbWV3aGF0IG1vcmUgc2VjdXJlIGFsdGVybmF0aXZlIHdvdWxkIHRvIGJlCisgIHRvIGNyZWF0ZSBhIGdyb3VwIGNvbnRhaW5pbmcgYWxsIHRoZSB1c2VycyB3aG8gaGF2ZSBwcmVjb25maWd1cmVkIHRhcAorICBkZXZpY2VzIGFuZCBjaGdycCAvZGV2L25ldC90dW4gdG8gdGhhdCBncm91cCB3aXRoIG1vZGUgNjY0IG9yIDY2MC4KKworCisgICsIbyAgT25jZSB0aGUgZGV2aWNlIGlzIHNldCB1cCwgcnVuIFVNTCB3aXRoICdldGgwPXR1bnRhcCxkZXZpY2UgbmFtZScKKyAgICAgKGkuZS4gJ2V0aDA9dHVudGFwLHRhcDAnKSBvbiB0aGUgY29tbWFuZCBsaW5lIChvciBkbyBpdCB3aXRoIHRoZQorICAgICBtY29uc29sZSBjb25maWcgY29tbWFuZCkuCisKKyAgKwhvICBCcmluZyB0aGUgZXRoIGRldmljZSB1cCBpbiBVTUwgYW5kIHlvdSdyZSBpbiBidXNpbmVzcy4KKworICAgICBJZiB5b3UgZG9uJ3Qgd2FudCB0aGF0IHRhcCBkZXZpY2UgYW55IG1vcmUsIHlvdSBjYW4gbWFrZSBpdCBub24tCisgICAgIHBlcnNpc3RlbnQgd2l0aAorCisKKyAgICAgICBob3N0IyAgdHVuY3RsIC1kIHRhcCBkZXZpY2UKKworCisKKworICBGaW5hbGx5LCB0dW5jdGwgaGFzIGEgLWIgKGZvciBicmllZiBtb2RlKSBzd2l0Y2ggd2hpY2ggY2F1c2VzIGl0IHRvCisgIG91dHB1dCBvbmx5IHRoZSBuYW1lIG9mIHRoZSB0YXAgZGV2aWNlIGl0IGNyZWF0ZWQuICBUaGlzIG1ha2VzIGl0CisgIHN1aXRhYmxlIGZvciBjYXB0dXJlIGJ5IGEgc2NyaXB0OgorCisKKyAgICAgICBob3N0IyAgVEFQPWB0dW5jdGwgLXUgMTAwMCAtYmAKKworCisKKworCisKKyAgNgg2LgguOAg4LgguICBFCEV0CHRoCGhlCGVyCHJ0CHRhCGFwCHAKKworICBFdGhlcnRhcCBpcyB0aGUgZ2VuZXJhbCBtZWNoYW5pc20gb24gMi4yIGZvciB1c2Vyc3BhY2UgcHJvY2Vzc2VzIHRvCisgIGV4Y2hhbmdlIHBhY2tldHMgd2l0aCB0aGUga2VybmVsLgorCisKKworICBUbyB1c2UgdGhpcyB0cmFuc3BvcnQsIHlvdSBuZWVkIHRvIGRlc2NyaWJlIHRoZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlCisgIG9uIHRoZSBVTUwgY29tbWFuZCBsaW5lLiAgVGhlIGdlbmVyYWwgZm9ybWF0IGZvciB0aGlzIGlzCisKKworICAgICAgIGV0aCA8bj4gPWV0aGVydGFwLCA8ZGV2aWNlPiAsIDxldGhlcm5ldCBhZGRyZXNzPiAsIDx0YXAgSVAgYWRkcmVzcz4KKworCisKKworICBTbywgdGhlIHByZXZpb3VzIGV4YW1wbGUKKworCisgICAgICAgZXRoMD1ldGhlcnRhcCx0YXAwLGZlOmZkOjA6MDowOjEsMTkyLjE2OC4wLjI1NAorCisKKworCisgIGF0dGFjaGVzIHRoZSBVTUwgZXRoMCBkZXZpY2UgdG8gdGhlIGhvc3QgL2Rldi90YXAwLCBhc3NpZ25zIGl0IHRoZQorICBldGhlcm5ldCBhZGRyZXNzIGZlOmZkOjA6MDowOjEsIGFuZCBhc3NpZ25zIHRoZSBJUCBhZGRyZXNzCisgIDE5Mi4xNjguMC4yNTQgdG8gdGhlIHRhcCBkZXZpY2UuCisKKworCisgIFRoZSB0YXAgZGV2aWNlIGlzIG1hbmRhdG9yeSwgYnV0IHRoZSBvdGhlcnMgYXJlIG9wdGlvbmFsLiAgSWYgdGhlCisgIGV0aGVybmV0IGFkZHJlc3MgaXMgb21pdHRlZCwgb25lIHdpbGwgYmUgYXNzaWduZWQgdG8gaXQuCisKKworICBUaGUgcHJlc2VuY2Ugb2YgdGhlIHRhcCBJUCBhZGRyZXNzIHdpbGwgY2F1c2UgdGhlIGhlbHBlciB0byBydW4gYW5kIGRvCisgIHdoYXRldmVyIGhvc3Qgc2V0dXAgaXMgbmVlZGVkIHRvIGFsbG93IHRoZSB2aXJ0dWFsIG1hY2hpbmUgdG8KKyAgY29tbXVuaWNhdGUgd2l0aCB0aGUgb3V0c2lkZSB3b3JsZC4gIElmIHlvdSdyZSBub3Qgc3VyZSB5b3Uga25vdyB3aGF0CisgIHlvdSdyZSBkb2luZywgdGhpcyBpcyB0aGUgd2F5IHRvIGdvLgorCisKKyAgSWYgaXQgaXMgYWJzZW50LCB0aGVuIHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUgdGFwIGRldmljZSBhbmQgd2hhdGV2ZXIKKyAgYXJwaW5nIGFuZCByb3V0aW5nIHlvdSB3aWxsIG5lZWQgb24gdGhlIGhvc3QuICBIb3dldmVyLCBldmVuIGluIHRoaXMKKyAgY2FzZSwgdGhlIHVtbF9uZXQgaGVscGVyIHN0aWxsIG5lZWRzIHRvIGJlIGluIHlvdXIgcGF0aCBhbmQgaXQgbXVzdCBiZQorICBzZXR1aWQgcm9vdCBpZiB5b3UncmUgbm90IHJ1bm5pbmcgVU1MIGFzIHJvb3QuICBUaGlzIGlzIGJlY2F1c2UgdGhlCisgIHRhcCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFNJR0lPLCB3aGljaCBVTUwgbmVlZHMgaW4gb3JkZXIgdG8gdXNlCisgIHNvbWV0aGluZyBhcyBhIHNvdXJjZSBvZiBpbnB1dC4gIFNvLCB0aGUgaGVscGVyIGlzIHVzZWQgYXMgYQorICBjb252ZW5pZW50IGFzeW5jaHJvbm91cyBJTyB0aHJlYWQuCisKKyAgSWYgeW91J3JlIHVzaW5nIHRoZSB1bWxfbmV0IGhlbHBlciwgeW91IGNhbiBpZ25vcmUgdGhlIGZvbGxvd2luZyBob3N0CisgIHNldHVwIC0gdW1sX25ldCB3aWxsIGRvIGl0IGZvciB5b3UuICBZb3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB5b3UKKyAgaGF2ZSBldGhlcnRhcCBhdmFpbGFibGUsIGVpdGhlciBidWlsdCBpbiB0byB0aGUgaG9zdCBrZXJuZWwgb3IKKyAgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLgorCisKKyAgSWYgeW91IHdhbnQgdG8gc2V0IHRoaW5ncyB1cCB5b3Vyc2VsZiwgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgIGFwcHJvcHJpYXRlIC9kZXYgZW50cnkgZXhpc3RzLiAgSWYgaXQgZG9lc24ndCwgYmVjb21lIHJvb3QgYW5kIGNyZWF0ZQorICBpdCBhcyBmb2xsb3dzOgorCisKKyAgICAgICBta25vZCAvZGV2L3RhcCA8bWlub3I+ICBjIDM2ICA8bWlub3I+ICArIDE2CisKKworCisKKyAgRm9yIGV4YW1wbGUsIHRoaXMgaXMgaG93IHRvIGNyZWF0ZSAvZGV2L3RhcDA6CisKKworICAgICAgIG1rbm9kIC9kZXYvdGFwMCBjIDM2IDAgKyAxNgorCisKKworCisgIFlvdSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGhvc3Qga2VybmVsIGhhcyBldGhlcnRhcCBzdXBwb3J0LgorICBJZiBldGhlcnRhcCBpcyBlbmFibGVkIGFzIGEgbW9kdWxlLCB5b3UgYXBwYXJlbnRseSBuZWVkIHRvIGluc21vZAorICBldGhlcnRhcCBvbmNlIGZvciBlYWNoIGV0aGVydGFwIGRldmljZSB5b3Ugd2FudCB0byBlbmFibGUuICBTbywKKworCisgICAgICAgaG9zdCMKKyAgICAgICBpbnNtb2QgZXRoZXJ0YXAKKworCisKKworICB3aWxsIGdpdmUgeW91IHRoZSB0YXAwIGludGVyZmFjZS4gIFRvIGdldCB0aGUgdGFwMSBpbnRlcmZhY2UsIHlvdSBuZWVkCisgIHRvIHJ1bgorCisKKyAgICAgICBob3N0IworICAgICAgIGluc21vZCBldGhlcnRhcCB1bml0PTEgLW8gZXRoZXJ0YXAxCisKKworCisKKworCisKKyAgNgg2LgguOQg5LgguICBUCFRoCGhlCGUgcwhzdwh3aQhpdAh0YwhjaAhoIGQIZGEIYWUIZW0IbW8Ib24IbgorCisgIE4ITm8Ib3QIdGUIZTogVGhpcyBpcyB0aGUgZGFlbW9uIGZvcm1lcmx5IGtub3duIGFzIHVtbF9yb3V0ZXIsIGJ1dCB3aGljaCB3YXMKKyAgcmVuYW1lZCBzbyB0aGUgbmV0d29yayB3ZWVuaWVzIG9mIHRoZSB3b3JsZCB3b3VsZCBzdG9wIGdyb3dsaW5nIGF0IG1lLgorCisKKyAgVGhlIHN3aXRjaCBkYWVtb24sIHVtbF9zd2l0Y2gsIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhCisgIHRvdGFsbHkgdmlydHVhbCBuZXR3b3JrLiAgQnkgZGVmYXVsdCwgaXQgcHJvdmlkZXMgbm8gY29ubmVjdGlvbiB0byB0aGUKKyAgaG9zdCBuZXR3b3JrIChidXQgc2VlIC10YXAsIGJlbG93KS4KKworCisgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBydW4gdGhlIGRhZW1vbi4gIFJ1bm5pbmcgaXQgd2l0aCBubworICBhcmd1bWVudHMgd2lsbCBtYWtlIGl0IGxpc3RlbiBvbiBhIGRlZmF1bHQgcGFpciBvZiB1bml4IGRvbWFpbgorICBzb2NrZXRzLgorCisKKyAgSWYgeW91IHdhbnQgaXQgdG8gbGlzdGVuIG9uIGEgZGlmZmVyZW50IHBhaXIgb2Ygc29ja2V0cywgdXNlCisKKworICAgICAgICAtdW5peCBjb250cm9sIHNvY2tldCBkYXRhIHNvY2tldAorCisKKworCisKKyAgSWYgeW91IHdhbnQgaXQgdG8gYWN0IGFzIGEgaHViIHJhdGhlciB0aGFuIGEgc3dpdGNoLCB1c2UKKworCisgICAgICAgIC1odWIKKworCisKKworCisgIElmIHlvdSB3YW50IHRoZSBzd2l0Y2ggdG8gYmUgY29ubmVjdGVkIHRvIGhvc3QgbmV0d29ya2luZyAoYWxsb3dpbmcKKyAgdGhlIHVtbHMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgb3V0c2lkZSB3b3JsZCB0aHJvdWdoIHRoZSBob3N0KSwgdXNlCisKKworICAgICAgICAtdGFwIHRhcDAKKworCisKKworCisgIE5vdGUgdGhhdCB0aGUgdGFwIGRldmljZSBtdXN0IGJlIHByZWNvbmZpZ3VyZWQgKHNlZSAiVFVOL1RBUCB3aXRoIGEKKyAgcHJlY29uZmlndXJlZCB0YXAgZGV2aWNlIiwgYWJvdmUpLiAgSWYgeW91J3JlIHVzaW5nIGEgZGlmZmVyZW50IHRhcAorICBkZXZpY2UgdGhhbiB0YXAwLCBzcGVjaWZ5IHRoYXQgaW5zdGVhZCBvZiB0YXAwLgorCisKKyAgdW1sX3N3aXRjaCBjYW4gYmUgYmFja2dyb3VuZGVkIGFzIGZvbGxvd3MKKworCisgICAgICAgaG9zdCUKKyAgICAgICB1bWxfc3dpdGNoIFsgb3B0aW9ucyBdIDwgL2Rldi9udWxsID4gL2Rldi9udWxsCisKKworCisKKyAgVGhlIHJlYXNvbiBpdCBkb2Vzbid0IGJhY2tncm91bmQgYnkgZGVmYXVsdCBpcyB0aGF0IGl0IGxpc3RlbnMgdG8KKyAgc3RkaW4gZm9yIEVPRi4gIFdoZW4gaXQgc2VlcyB0aGF0LCBpdCBleGl0cy4KKworCisgIFRoZSBnZW5lcmFsIGZvcm1hdCBvZiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXMKKworCisKKyAgICAgICBldGhuPWRhZW1vbixldGhlcm5ldCBhZGRyZXNzLHNvY2tldAorICAgICAgIHR5cGUsY29udHJvbCBzb2NrZXQsZGF0YSBzb2NrZXQKKworCisKKworICBZb3UgY2FuIGxlYXZlIG9mZiBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgJ2RhZW1vbicuICBZb3Ugb25seSBuZWVkIHRvCisgIHNwZWNpZnkgdGhlIGV0aGVybmV0IGFkZHJlc3MgaWYgdGhlIG9uZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gaXQKKyAgaXNuJ3QgYWNjZXB0YWJsZSBmb3Igc29tZSByZWFzb24uICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGRlc2NyaWJlCisgIGhvdyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkYWVtb24uICBZb3Ugc2hvdWxkIG9ubHkgc3BlY2lmeSB0aGVtIGlmCisgIHlvdSB0b2xkIHRoZSBkYWVtb24gdG8gdXNlIGRpZmZlcmVudCBzb2NrZXRzIHRoYW4gdGhlIGRlZmF1bHQuICBTbywgaWYKKyAgeW91IHJhbiB0aGUgZGFlbW9uIHdpdGggbm8gYXJndW1lbnRzLCBydW5uaW5nIHRoZSBVTUwgb24gdGhlIHNhbWUKKyAgbWFjaGluZSB3aXRoCisgICAgICAgZXRoMD1kYWVtb24KKworCisKKworICB3aWxsIGNhdXNlIHRoZSBldGgwIGRyaXZlciB0byBhdHRhY2ggaXRzZWxmIHRvIHRoZSBkYWVtb24gY29ycmVjdGx5LgorCisKKworICA2CDYuCC4xCDEwCDAuCC4gIFMIU2wIbGkIaXAIcAorCisgIFNsaXAgaXMgYW5vdGhlciwgbGVzcyBnZW5lcmFsLCBtZWNoYW5pc20gZm9yIGEgcHJvY2VzcyB0byBjb21tdW5pY2F0ZQorICB3aXRoIHRoZSBob3N0IG5ldHdvcmtpbmcuICBJbiBjb250cmFzdCB0byB0aGUgZXRoZXJ0YXAgaW50ZXJmYWNlLAorICB3aGljaCBleGNoYW5nZXMgZXRoZXJuZXQgZnJhbWVzIHdpdGggdGhlIGhvc3QgYW5kIGNhbiBiZSB1c2VkIHRvCisgIHRyYW5zcG9ydCBhbnkgaGlnaGVyLWxldmVsIHByb3RvY29sLCBpdCBjYW4gb25seSBiZSB1c2VkIHRvIHRyYW5zcG9ydAorICBJUC4KKworCisgIFRoZSBnZW5lcmFsIGZvcm1hdCBvZiB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaCBpcworCisKKworICAgICAgIGV0aG49c2xpcCxzbGlwIElQCisKKworCisKKyAgVGhlIHNsaXAgSVAgYXJndW1lbnQgaXMgdGhlIElQIGFkZHJlc3MgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZQorICBob3N0IGVuZCBvZiB0aGUgc2xpcCBkZXZpY2UuICBJZiBpdCBpcyBzcGVjaWZpZWQsIHRoZSBoZWxwZXIgd2lsbCBydW4KKyAgYW5kIHdpbGwgc2V0IHVwIHRoZSBob3N0IHNvIHRoYXQgdGhlIHZpcnR1YWwgbWFjaGluZSBjYW4gcmVhY2ggaXQgYW5kCisgIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrLgorCisKKyAgVGhlcmUgYXJlIHNvbWUgb2RkaXRpZXMgd2l0aCB0aGlzIGludGVyZmFjZSB0aGF0IHlvdSBzaG91bGQgYmUgYXdhcmUKKyAgb2YuICBZb3Ugc2hvdWxkIG9ubHkgc3BlY2lmeSBvbmUgc2xpcCBkZXZpY2Ugb24gYSBnaXZlbiB2aXJ0dWFsCisgIG1hY2hpbmUsIGFuZCBpdHMgbmFtZSBpbnNpZGUgVU1MIHdpbGwgYmUgJ3VtbicsIG5vdCAnZXRoMCcgb3Igd2hhdGV2ZXIKKyAgeW91IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlc2UgcHJvYmxlbXMgd2lsbCBiZSBmaXhlZCBhdAorICBzb21lIHBvaW50LgorCisKKworICA2CDYuCC4xCDExCDEuCC4gIFMIU2wIbGkIaXIIcnAIcAorCisgIHNsaXJwIHVzZXMgYW4gZXh0ZXJuYWwgcHJvZ3JhbSwgdXN1YWxseSAvdXNyL2Jpbi9zbGlycCwgdG8gcHJvdmlkZSBJUAorICBvbmx5IG5ldHdvcmtpbmcgY29ubmVjdGl2aXR5IHRocm91Z2ggdGhlIGhvc3QuIFRoaXMgaXMgc2ltaWxhciB0byBJUAorICBtYXNxdWVyYWRpbmcgd2l0aCBhIGZpcmV3YWxsLCBhbHRob3VnaCB0aGUgdHJhbnNsYXRpb24gaXMgcGVyZm9ybWVkIGluCisgIHVzZXItc3BhY2UsIHJhdGhlciB0aGFuIGJ5IHRoZSBrZXJuZWwuICBBcyBzbGlycCBkb2VzIG5vdCBzZXQgdXAgYW55CisgIGludGVyZmFjZXMgb24gdGhlIGhvc3QsIG9yIGNoYW5nZXMgcm91dGluZywgc2xpcnAgZG9lcyBub3QgcmVxdWlyZQorICByb290IGFjY2VzcyBvciBzZXR1aWQgYmluYXJpZXMgb24gdGhlIGhvc3QuCisKKworICBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhlIGNvbW1hbmQgbGluZSBzd2l0Y2ggZm9yIHNsaXJwIGlzOgorCisKKworICAgICAgIGV0aG49c2xpcnAsZXRoZXJuZXQgYWRkcmVzcyxzbGlycCBwYXRoCisKKworCisKKyAgVGhlIGV0aGVybmV0IGFkZHJlc3MgaXMgb3B0aW9uYWwsIGFzIFVNTCB3aWxsIHNldCB1cCB0aGUgaW50ZXJmYWNlCisgIHdpdGggYW4gZXRoZXJuZXQgYWRkcmVzcyBiYXNlZCB1cG9uIHRoZSBpbml0aWFsIElQIGFkZHJlc3Mgb2YgdGhlCisgIGludGVyZmFjZS4gIFRoZSBzbGlycCBwYXRoIGlzIGdlbmVyYWxseSAvdXNyL2Jpbi9zbGlycCwgYWx0aG91Z2ggaXQKKyAgd2lsbCBkZXBlbmQgb24gZGlzdHJpYnV0aW9uLgorCisKKyAgVGhlIHNsaXJwIHByb2dyYW0gY2FuIGhhdmUgYSBudW1iZXIgb2Ygb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGNvbW1hbmQKKyAgbGluZSBhbmQgd2UgY2FuJ3QgYWRkIHRoZW0gdG8gdGhlIFVNTCBjb21tYW5kIGxpbmUsIGFzIHRoZXkgd2lsbCBiZQorICBwYXJzZWQgaW5jb3JyZWN0bHkuICBJbnN0ZWFkLCBhIHdyYXBwZXIgc2hlbGwgc2NyaXB0IGNhbiBiZSB3cml0dGVuIG9yCisgIHRoZSBvcHRpb25zIGluc2VydGVkIGludG8gdGhlICAvLnNsaXJwcmMgZmlsZS4gIE1vcmUgaW5mb3JtYXRpb24gb24KKyAgYWxsIG9mIHRoZSBzbGlycCBvcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBpdHMgbWFuIHBhZ2VzLgorCisKKyAgVGhlIGV0aDAgaW50ZXJmYWNlIG9uIFVNTCBzaG91bGQgYmUgc2V0IHVwIHdpdGggdGhlIElQIDEwLjIuMC4xNSwKKyAgYWx0aG91Z2ggeW91IGNhbiB1c2UgYW55dGhpbmcgYXMgbG9uZyBhcyBpdCBpcyBub3QgdXNlZCBieSBhIG5ldHdvcmsKKyAgeW91IHdpbGwgYmUgY29ubmVjdGluZyB0by4gVGhlIGRlZmF1bHQgcm91dGUgb24gVU1MIHNob3VsZCBiZSBzZXQgdG8KKyAgdXNlCisKKworICAgICAgIFVNTCMKKyAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBkZXYgZXRoMAorCisKKworCisgIHNsaXJwIHByb3ZpZGVzIGEgbnVtYmVyIG9mIHVzZWZ1bCBJUCBhZGRyZXNzZXMgd2hpY2ggY2FuIGJlIHVzZWQgYnkKKyAgVU1MLCBzdWNoIGFzIDEwLjAuMi4zIHdoaWNoIGlzIGFuIGFsaWFzIGZvciB0aGUgRE5TIHNlcnZlciBzcGVjaWZpZWQKKyAgaW4gL2V0Yy9yZXNvbHYuY29uZiBvbiB0aGUgaG9zdCBvciB0aGUgSVAgZ2l2ZW4gaW4gdGhlICdkbnMnIG9wdGlvbgorICBmb3Igc2xpcnAuCisKKworICBFdmVuIHdpdGggYSBiYXVkcmF0ZSBzZXR0aW5nIGhpZ2hlciB0aGFuIDExNTIwMCwgdGhlIHNsaXJwIGNvbm5lY3Rpb24KKyAgaXMgbGltaXRlZCB0byAxMTUyMDAuIElmIHlvdSBuZWVkIGl0IHRvIGdvIGZhc3RlciwgdGhlIHNsaXJwIGJpbmFyeQorICBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIEZVTExfQk9MVCBkZWZpbmVkIGluIGNvbmZpZy5oLgorCisKKworICA2CDYuCC4xCDEyCDIuCC4gIHAIcGMIY2EIYXAIcAorCisgIFRoZSBwY2FwIHRyYW5zcG9ydCBpcyBhdHRhY2hlZCB0byBhIFVNTCBldGhlcm5ldCBkZXZpY2Ugb24gdGhlIGNvbW1hbmQKKyAgbGluZSBvciB3aXRoIHVtbF9tY29uc29sZSB3aXRoIHRoZSBmb2xsb3dpbmcgc3ludGF4OgorCisKKworICAgICAgIGV0aG49cGNhcCxob3N0IGludGVyZmFjZSxmaWx0ZXIKKyAgICAgICBleHByZXNzaW9uLG9wdGlvbjEsb3B0aW9uMgorCisKKworCisgIFRoZSBleHByZXNzaW9uIGFuZCBvcHRpb25zIGFyZSBvcHRpb25hbC4KKworCisgIFRoZSBpbnRlcmZhY2UgaXMgd2hhdGV2ZXIgbmV0d29yayBkZXZpY2Ugb24gdGhlIGhvc3QgeW91IHdhbnQgdG8KKyAgc25pZmYuICBUaGUgZXhwcmVzc2lvbiBpcyBhIHBjYXAgZmlsdGVyIGV4cHJlc3Npb24sIHdoaWNoIGlzIGFsc28gd2hhdAorICB0Y3BkdW1wIHVzZXMsIHNvIGlmIHlvdSBrbm93IGhvdyB0byBzcGVjaWZ5IHRjcGR1bXAgZmlsdGVycywgeW91IHdpbGwKKyAgdXNlIHRoZSBzYW1lIGV4cHJlc3Npb25zIGhlcmUuICBUaGUgb3B0aW9ucyBhcmUgdXAgdG8gdHdvIG9mCisgICdwcm9taXNjJywgY29udHJvbCB3aGV0aGVyIHBjYXAgcHV0cyB0aGUgaG9zdCBpbnRlcmZhY2UgaW50bworICBwcm9taXNjdW91cyBtb2RlLiAnb3B0aW1pemUnIGFuZCAnbm9vcHRpbWl6ZScgY29udHJvbCB3aGV0aGVyIHRoZSBwY2FwCisgIGV4cHJlc3Npb24gb3B0aW1pemVyIGlzIHVzZWQuCisKKworICBFeGFtcGxlOgorCisKKworICAgICAgIGV0aDA9cGNhcCxldGgwLHRjcAorCisgICAgICAgZXRoMT1wY2FwLGV0aDAsIXRjcAorCisKKworICB3aWxsIGNhdXNlIHRoZSBVTUwgZXRoMCB0byBlbWl0IGFsbCB0Y3AgcGFja2V0cyBvbiB0aGUgaG9zdCBldGgwIGFuZAorICB0aGUgVU1MIGV0aDEgdG8gZW1pdCBhbGwgbm9uLXRjcCBwYWNrZXRzIG9uIHRoZSBob3N0IGV0aDAuCisKKworCisgIDYINi4ILjEIMTMIMy4ILiAgUwhTZQhldAh0dAh0aQhpbghuZwhnIHUIdXAIcCB0CHRoCGhlCGUgaAhobwhvcwhzdAh0IHkIeW8Ib3UIdXIIcnMIc2UIZWwIbGYIZgorCisgIElmIHlvdSBkb24ndCBzcGVjaWZ5IGFuIGFkZHJlc3MgZm9yIHRoZSBob3N0IHNpZGUgb2YgdGhlIGV0aGVydGFwIG9yCisgIHNsaXAgZGV2aWNlLCBVTUwgd29uJ3QgZG8gYW55IHNldHVwIG9uIHRoZSBob3N0LiAgU28gdGhpcyBpcyB3aGF0IGlzCisgIG5lZWRlZCB0byBnZXQgdGhpbmdzIHdvcmtpbmcgKHRoZSBleGFtcGxlcyB1c2UgYSBob3N0LXNpZGUgSVAgb2YKKyAgMTkyLjE2OC4wLjI1MSBhbmQgYSBVTUwtc2lkZSBJUCBvZiAxOTIuMTY4LjAuMjUwIC0gYWRqdXN0IHRvIHN1aXQgeW91cgorICBvd24gbmV0d29yayk6CisKKyAgKwhvICBUaGUgZGV2aWNlIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBpdHMgSVAgYWRkcmVzcy4gIFRhcCBkZXZpY2VzCisgICAgIGFyZSBhbHNvIGNvbmZpZ3VyZWQgd2l0aCBhbiBtdHUgb2YgMTQ4NC4gIFNsaXAgZGV2aWNlcyBhcmUKKyAgICAgY29uZmlndXJlZCB3aXRoIGEgcG9pbnQtdG8tcG9pbnQgYWRkcmVzcyBwb2ludGluZyBhdCB0aGUgVU1MIGlwCisgICAgIGFkZHJlc3MuCisKKworICAgICAgIGhvc3QjICBpZmNvbmZpZyB0YXAwIGFycCBtdHUgMTQ4NCAxOTIuMTY4LjAuMjUxIHVwCisKKworCisKKworCisgICAgICAgaG9zdCMKKyAgICAgICBpZmNvbmZpZyBzbDAgMTkyLjE2OC4wLjI1MSBwb2ludG9wb2ludCAxOTIuMTY4LjAuMjUwIHVwCisKKworCisKKworICArCG8gIElmIGEgdGFwIGRldmljZSBpcyBiZWluZyBzZXQgdXAsIGEgcm91dGUgaXMgc2V0IHRvIHRoZSBVTUwgSVAuCisKKworICAgICAgIFVNTCMgcm91dGUgYWRkIC1ob3N0IDE5Mi4xNjguMC4yNTAgZ3cgMTkyLjE2OC4wLjI1MQorCisKKworCisKKyAgKwhvICBUbyBhbGxvdyBvdGhlciBob3N0cyBvbiB5b3VyIG5ldHdvcmsgdG8gc2VlIHRoZSB2aXJ0dWFsIG1hY2hpbmUsCisgICAgIHByb3h5IGFycCBpcyBzZXQgdXAgZm9yIGl0LgorCisKKyAgICAgICBob3N0IyAgYXJwIC1EcyAxOTIuMTY4LjAuMjUwIGV0aDAgcHViCisKKworCisKKworICArCG8gIEZpbmFsbHksIHRoZSBob3N0IGlzIHNldCB1cCB0byByb3V0ZSBwYWNrZXRzLgorCisKKyAgICAgICBob3N0IyAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKKworCisKKworCisKKworCisKKworICA3CDcuCC4gIFMIU2gIaGEIYXIIcmkIaW4IbmcIZyBGCEZpCGlsCGxlCGVzCHN5CHlzCHN0CHRlCGVtCG1zCHMgYghiZQhldAh0dwh3ZQhlZQhlbghuIFYIVmkIaXIIcnQIdHUIdWEIYWwIbCBNCE1hCGFjCGNoCGhpCGluCG5lCGVzCHMKKworCisKKworICA3CDcuCC4xCDEuCC4gIEEIQSB3CHdhCGFyCHJuCG5pCGluCG5nCGcKKworICBEb24ndCBhdHRlbXB0IHRvIHNoYXJlIGZpbGVzeXN0ZW1zIHNpbXBseSBieSBib290aW5nIHR3byBVTUxzIGZyb20gdGhlCisgIHNhbWUgZmlsZS4gIFRoYXQncyB0aGUgc2FtZSB0aGluZyBhcyBib290aW5nIHR3byBwaHlzaWNhbCBtYWNoaW5lcworICBmcm9tIGEgc2hhcmVkIGRpc2suICBJdCB3aWxsIHJlc3VsdCBpbiBmaWxlc3lzdGVtIGNvcnJ1cHRpb24uCisKKworCisgIDcINy4ILjIIMi4ILiAgVQhVcwhzaQhpbghuZwhnIGwIbGEIYXkIeWUIZXIIcmUIZWQIZCBiCGJsCGxvCG9jCGNrCGsgZAhkZQhldgh2aQhpYwhjZQhlcwhzCisKKyAgVGhlIHdheSB0byBzaGFyZSBhIGZpbGVzeXN0ZW0gYmV0d2VlbiB0d28gdmlydHVhbCBtYWNoaW5lcyBpcyB0byB1c2UKKyAgdGhlIGNvcHktb24td3JpdGUgKENPVykgbGF5ZXJpbmcgY2FwYWJpbGl0eSBvZiB0aGUgdWJkIGJsb2NrIGRyaXZlci4KKyAgQXMgb2YgMi40LjYtMnVtLCB0aGUgZHJpdmVyIHN1cHBvcnRzIGxheWVyaW5nIGEgcmVhZC13cml0ZSBwcml2YXRlCisgIGRldmljZSBvdmVyIGEgcmVhZC1vbmx5IHNoYXJlZCBkZXZpY2UuICBBIG1hY2hpbmUncyB3cml0ZXMgYXJlIHN0b3JlZAorICBpbiB0aGUgcHJpdmF0ZSBkZXZpY2UsIHdoaWxlIHJlYWRzIGNvbWUgZnJvbSBlaXRoZXIgZGV2aWNlIC0gdGhlCisgIHByaXZhdGUgb25lIGlmIHRoZSByZXF1ZXN0ZWQgYmxvY2sgaXMgdmFsaWQgaW4gaXQsIHRoZSBzaGFyZWQgb25lIGlmCisgIG5vdC4gIFVzaW5nIHRoaXMgc2NoZW1lLCB0aGUgbWFqb3JpdHkgb2YgZGF0YSB3aGljaCBpcyB1bmNoYW5nZWQgaXMKKyAgc2hhcmVkIGJldHdlZW4gYW4gYXJiaXRyYXJ5IG51bWJlciBvZiB2aXJ0dWFsIG1hY2hpbmVzLCBlYWNoIG9mIHdoaWNoCisgIGhhcyBhIG11Y2ggc21hbGxlciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNoYW5nZXMgdGhhdCBpdCBoYXMgbWFkZS4gIFdpdGgKKyAgYSBsYXJnZSBudW1iZXIgb2YgVU1McyBib290aW5nIGZyb20gYSBsYXJnZSByb290IGZpbGVzeXN0ZW0sIHRoaXMKKyAgbGVhZHMgdG8gYSBodWdlIGRpc2sgc3BhY2Ugc2F2aW5nLiAgSXQgd2lsbCBhbHNvIGhlbHAgcGVyZm9ybWFuY2UsCisgIHNpbmNlIHRoZSBob3N0IHdpbGwgYmUgYWJsZSB0byBjYWNoZSB0aGUgc2hhcmVkIGRhdGEgdXNpbmcgYSBtdWNoCisgIHNtYWxsZXIgYW1vdW50IG9mIG1lbW9yeSwgc28gVU1MIGRpc2sgcmVxdWVzdHMgd2lsbCBiZSBzZXJ2ZWQgZnJvbSB0aGUKKyAgaG9zdCdzIG1lbW9yeSByYXRoZXIgdGhhbiBpdHMgZGlza3MuCisKKworCisKKyAgVG8gYWRkIGEgY29weS1vbi13cml0ZSBsYXllciB0byBhbiBleGlzdGluZyBibG9jayBkZXZpY2UgZmlsZSwgc2ltcGx5CisgIGFkZCB0aGUgbmFtZSBvZiB0aGUgQ09XIGZpbGUgdG8gdGhlIGFwcHJvcHJpYXRlIHViZCBzd2l0Y2g6CisKKworICAgICAgICB1YmQwPXJvb3RfZnNfY293LHJvb3RfZnNfZGViaWFuXzIyCisKKworCisKKyAgd2hlcmUgJ3Jvb3RfZnNfY293JyBpcyB0aGUgcHJpdmF0ZSBDT1cgZmlsZSBhbmQgJ3Jvb3RfZnNfZGViaWFuXzIyJyBpcworICB0aGUgZXhpc3Rpbmcgc2hhcmVkIGZpbGVzeXN0ZW0uICBUaGUgQ09XIGZpbGUgbmVlZCBub3QgZXhpc3QuICBJZiBpdAorICBkb2Vzbid0LCB0aGUgZHJpdmVyIHdpbGwgY3JlYXRlIGFuZCBpbml0aWFsaXplIGl0LiAgT25jZSB0aGUgQ09XIGZpbGUKKyAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGl0IGNhbiBiZSB1c2VkIG9uIGl0cyBvd24gb24gdGhlIGNvbW1hbmQgbGluZToKKworCisgICAgICAgIHViZDA9cm9vdF9mc19jb3cKKworCisKKworICBUaGUgbmFtZSBvZiB0aGUgYmFja2luZyBmaWxlIGlzIHN0b3JlZCBpbiB0aGUgQ09XIGZpbGUgaGVhZGVyLCBzbyBpdAorICB3b3VsZCBiZSByZWR1bmRhbnQgdG8gY29udGludWUgc3BlY2lmeWluZyBpdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKKworICA3CDcuCC4zCDMuCC4gIE4ITm8Ib3QIdGUIZSEIIQorCisgIFdoZW4gY2hlY2tpbmcgdGhlIHNpemUgb2YgdGhlIENPVyBmaWxlIGluIG9yZGVyIHRvIHNlZSB0aGUgZ29icyBvZgorICBzcGFjZSB0aGF0IHlvdSdyZSBzYXZpbmcsIG1ha2Ugc3VyZSB5b3UgdXNlICdscyAtbHMnIHRvIHNlZSB0aGUgYWN0dWFsCisgIGRpc2sgY29uc3VtcHRpb24gcmF0aGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4gIFRoZSBDT1cgZmlsZSBpcworICBzcGFyc2UsIHNvIHRoZSBsZW5ndGggd2lsbCBiZSB2ZXJ5IGRpZmZlcmVudCBmcm9tIHRoZSBkaXNrIHVzYWdlLgorICBIZXJlIGlzIGEgJ2xzIC1sJyBvZiBhIENPVyBmaWxlIGFuZCBiYWNraW5nIGZpbGUgZnJvbSBvbmUgYm9vdCBhbmQKKyAgc2h1dGRvd246CisgICAgICAgaG9zdCUgbHMgLWwgY293LmRlYmlhbiBkZWJpYW4yLjIKKyAgICAgICAtcnctci0tci0tICAgIDEgamRpa2UgICAgamRpa2UgICAgNDkyNTA0MDY0IEF1ZyAgNiAyMToxNiBjb3cuZGViaWFuCisgICAgICAgLXJ3eHJ3LXJ3LSAgICAxIGpkaWtlICAgIGpkaWtlICAgIDUzNzkxOTQ4OCBBdWcgIDYgMjA6NDIgZGViaWFuMi4yCisKKworCisKKyAgRG9lc24ndCBsb29rIGxpa2UgbXVjaCBzYXZlZCBzcGFjZSwgZG9lcyBpdD8gIFdlbGwsIGhlcmUncyAnbHMgLWxzJzoKKworCisgICAgICAgaG9zdCUgbHMgLWxzIGNvdy5kZWJpYW4gZGViaWFuMi4yCisgICAgICAgICAgODgwIC1ydy1yLS1yLS0gICAgMSBqZGlrZSAgICBqZGlrZSAgICA0OTI1MDQwNjQgQXVnICA2IDIxOjE2IGNvdy5kZWJpYW4KKyAgICAgICA1MjU4MzIgLXJ3eHJ3LXJ3LSAgICAxIGpkaWtlICAgIGpkaWtlICAgIDUzNzkxOTQ4OCBBdWcgIDYgMjA6NDIgZGViaWFuMi4yCisKKworCisKKyAgTm93LCB5b3UgY2FuIHNlZSB0aGF0IHRoZSBDT1cgZmlsZSBoYXMgbGVzcyB0aGFuIGEgbWVnIG9mIGRpc2ssIHJhdGhlcgorICB0aGFuIDQ5MiBtZWcuCisKKworCisgIDcINy4ILjQINC4ILiAgQQhBbghubwhvdAh0aAhoZQhlcghyIHcId2EIYXIIcm4IbmkIaW4IbmcIZworCisgIE9uY2UgYSBmaWxlc3lzdGVtIGlzIGJlaW5nIHVzZWQgYXMgYSByZWFkb25seSBiYWNraW5nIGZpbGUgZm9yIGEgQ09XCisgIGZpbGUsIGRvIG5vdCBib290IGRpcmVjdGx5IGZyb20gaXQgb3IgbW9kaWZ5IGl0IGluIGFueSB3YXkuICBEb2luZyBzbworICB3aWxsIGludmFsaWRhdGUgYW55IENPVyBmaWxlcyB0aGF0IGFyZSB1c2luZyBpdC4gIFRoZSBtdGltZSBhbmQgc2l6ZQorICBvZiB0aGUgYmFja2luZyBmaWxlIGFyZSBzdG9yZWQgaW4gdGhlIENPVyBmaWxlIGhlYWRlciBhdCBpdHMgY3JlYXRpb24sCisgIGFuZCB0aGV5IG11c3QgY29udGludWUgdG8gbWF0Y2guICBJZiB0aGV5IGRvbid0LCB0aGUgZHJpdmVyIHdpbGwKKyAgcmVmdXNlIHRvIHVzZSB0aGUgQ09XIGZpbGUuCisKKworCisKKyAgSWYgeW91IGF0dGVtcHQgdG8gZXZhZGUgdGhpcyByZXN0cmljdGlvbiBieSBjaGFuZ2luZyBlaXRoZXIgdGhlCisgIGJhY2tpbmcgZmlsZSBvciB0aGUgQ09XIGhlYWRlciBieSBoYW5kLCB5b3Ugd2lsbCBnZXQgYSBjb3JydXB0ZWQKKyAgZmlsZXN5c3RlbS4KKworCisKKworICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgbWVhbnMgdGhhdCB1cGdyYWRpbmcgdGhlIGRpc3RyaWJ1dGlvbiBpbiBhCisgIGJhY2tpbmcgZmlsZSBhbmQgZXhwZWN0aW5nIHRoYXQgYWxsIG9mIHRoZSBDT1cgZmlsZXMgdXNpbmcgaXQgd2lsbCBzZWUKKyAgdGhlIHVwZ3JhZGUgd2lsbCBub3Qgd29yay4KKworCisKKworICA3CDcuCC41CDUuCC4gIHUIdW0IbWwIbF8IX20IbW8Ib28IbyA6CDogTQhNZQhlcghyZwhnaQhpbghuZwhnIGEIYSBDCENPCE9XCFcgZghmaQhpbAhsZQhlIHcId2kIaXQIdGgIaCBpCGl0CHRzCHMgYghiYQhhYwhjawhraQhpbghuZwhnIGYIZmkIaWwIbGUIZQorCisgIERlcGVuZGluZyBvbiBob3cgeW91IHVzZSBVTUwgYW5kIENPVyBkZXZpY2VzLCBpdCBtYXkgYmUgYWR2aXNhYmxlIHRvCisgIG1lcmdlIHRoZSBjaGFuZ2VzIGluIHRoZSBDT1cgZmlsZSBpbnRvIHRoZSBiYWNraW5nIGZpbGUgZXZlcnkgb25jZSBpbgorICBhIHdoaWxlLgorCisKKworCisgIFRoZSB1dGlsaXR5IHRoYXQgZG9lcyB0aGlzIGlzIHVtbF9tb28uICBJdHMgdXNhZ2UgaXMKKworCisgICAgICAgaG9zdCUgdW1sX21vbyBDT1cgZmlsZSBuZXcgYmFja2luZyBmaWxlCisKKworCisKKyAgVGhlcmUncyBubyBuZWVkIHRvIHNwZWNpZnkgdGhlIGJhY2tpbmcgZmlsZSBzaW5jZSB0aGF0IGluZm9ybWF0aW9uIGlzCisgIGFscmVhZHkgaW4gdGhlIENPVyBmaWxlIGhlYWRlci4gIElmIHlvdSdyZSBwYXJhbm9pZCwgYm9vdCB0aGUgbmV3CisgIG1lcmdlZCBmaWxlLCBhbmQgaWYgeW91J3JlIGhhcHB5IHdpdGggaXQsIG1vdmUgaXQgb3ZlciB0aGUgb2xkIGJhY2tpbmcKKyAgZmlsZS4KKworCisKKworICB1bWxfbW9vIGNyZWF0ZXMgYSBuZXcgYmFja2luZyBmaWxlIGJ5IGRlZmF1bHQgYXMgYSBzYWZldHkgbWVhc3VyZS4gIEl0CisgIGFsc28gaGFzIGEgZGVzdHJ1Y3RpdmUgbWVyZ2Ugb3B0aW9uIHdoaWNoIHdpbGwgbWVyZ2UgdGhlIENPVyBmaWxlCisgIGRpcmVjdGx5IGludG8gaXRzIGN1cnJlbnQgYmFja2luZyBmaWxlLiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2FibGUKKyAgd2hlbiB0aGUgYmFja2luZyBmaWxlIG9ubHkgaGFzIG9uZSBDT1cgZmlsZSBhc3NvY2lhdGVkIHdpdGggaXQuICBJZgorICB0aGVyZSBhcmUgbXVsdGlwbGUgQ09XcyBhc3NvY2lhdGVkIHdpdGggYSBiYWNraW5nIGZpbGUsIGEgLWQgbWVyZ2Ugb2YKKyAgb25lIG9mIHRoZW0gd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiB0aGUgb3RoZXJzLiAgSG93ZXZlciwgaXQgaXMKKyAgY29udmVuaWVudCBpZiB5b3UncmUgc2hvcnQgb2YgZGlzayBzcGFjZSwgYW5kIGl0IHNob3VsZCBhbHNvIGJlCisgIG5vdGljYWJseSBmYXN0ZXIgdGhhbiBhIG5vbi1kZXN0cnVjdGl2ZSBtZXJnZS4KKworCisKKworICB1bWxfbW9vIGlzIGluc3RhbGxlZCB3aXRoIHRoZSBVTUwgZGViIGFuZCBSUE0uICBJZiB5b3UgZGlkbid0IGluc3RhbGwKKyAgVU1MIGZyb20gb25lIG9mIHRob3NlIHBhY2thZ2VzLCB5b3UgY2FuIGFsc28gZ2V0IGl0IGZyb20gdGhlIFVNTAorICB1dGlsaXRpZXMgPGh0dHA6Ly91c2VyLW1vZGUtbGludXguc291cmNlZm9yZ2UubmV0L2RsLXNmLmh0bWwjVU1MCisgIHV0aWxpdGllcz4gIHRhciBmaWxlIGluIHRvb2xzL21vby4KKworCisKKworCisKKworCisgIDgIOC4ILiAgQwhDcghyZQhlYQhhdAh0aQhpbghuZwhnIGYIZmkIaWwIbGUIZXMIc3kIeXMIc3QIdGUIZW0IbXMIcworCisKKyAgWW91IG1heSB3YW50IHRvIGNyZWF0ZSBhbmQgbW91bnQgbmV3IFVNTCBmaWxlc3lzdGVtcywgZWl0aGVyIGJlY2F1c2UKKyAgeW91ciByb290IGZpbGVzeXN0ZW0gaXNuJ3QgbGFyZ2UgZW5vdWdoIG9yIGJlY2F1c2UgeW91IHdhbnQgdG8gdXNlIGEKKyAgZmlsZXN5c3RlbSBvdGhlciB0aGFuIGV4dDIuCisKKworICBUaGlzIHdhcyB3cml0dGVuIG9uIHRoZSBvY2Nhc2lvbiBvZiByZWlzZXJmcyBiZWluZyBpbmNsdWRlZCBpbiB0aGUKKyAgMi40LjEga2VybmVsIHBvb2wsIGFuZCB0aGVyZWZvcmUgdGhlIDIuNC4xIFVNTCwgc28gdGhlIGV4YW1wbGVzIHdpbGwKKyAgdGFsayBhYm91dCByZWlzZXJmcy4gIFRoaXMgaW5mb3JtYXRpb24gaXMgZ2VuZXJpYywgYW5kIHRoZSBleGFtcGxlcworICBzaG91bGQgYmUgZWFzeSB0byB0cmFuc2xhdGUgdG8gdGhlIGZpbGVzeXN0ZW0gb2YgeW91ciBjaG9pY2UuCisKKworICA4CDguCC4xCDEuCC4gIEMIQ3IIcmUIZWEIYXQIdGUIZSB0CHRoCGhlCGUgZghmaQhpbAhsZQhlcwhzeQh5cwhzdAh0ZQhlbQhtIGYIZmkIaWwIbGUIZQorCisgIGRkIGlzIHlvdXIgZnJpZW5kLiAgQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHRlbGwgZGQgdG8gY3JlYXRlIGFuIGVtcHR5CisgIGZpbGUgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuICBJIHVzdWFsbHkgbWFrZSBpdCBzcGFyc2UgdG8gc2F2ZSB0aW1lCisgIGFuZCB0byBhdm9pZCBhbGxvY2F0aW5nIGRpc2sgc3BhY2UgdW50aWwgaXQncyBhY3R1YWxseSB1c2VkLiAgRm9yCisgIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGNyZWF0ZSBhIHNwYXJzZSAxMDAgbWVnIGZpbGUgZnVsbAorICBvZiB6ZXJvZXMuCisKKworICAgICAgIGhvc3QlCisgICAgICAgZGQgaWY9L2Rldi96ZXJvIG9mPW5ld19maWxlc3lzdGVtIHNlZWs9MTAwIGNvdW50PTEgYnM9MU0KKworCisKKworCisKKyAgOAg4LgguMggyLgguICBBCEFzCHNzCHNpCGlnCGduCG4gdAh0aAhoZQhlIGYIZmkIaWwIbGUIZSB0CHRvCG8gYQhhIFUIVU0ITUwITCBkCGRlCGV2CHZpCGljCGNlCGUKKworICBBZGQgYW4gYXJndW1lbnQgbGlrZSB0aGUgZm9sbG93aW5nIHRvIHRoZSBVTUwgY29tbWFuZCBsaW5lOgorCisgIHViZDQ9bmV3X2ZpbGVzeXN0ZW0KKworCisKKworICBtYWtpbmcgc3VyZSB0aGF0IHlvdSB1c2UgYW4gdW5hc3NpZ25lZCB1YmQgZGV2aWNlIG51bWJlci4KKworCisKKyAgOAg4LgguMwgzLgguICBDCENyCHJlCGVhCGF0CHRpCGluCG5nCGcgYQhhbghuZAhkIG0IbW8Ib3UIdW4IbnQIdGkIaW4IbmcIZyB0CHRoCGhlCGUgZghmaQhpbAhsZQhlcwhzeQh5cwhzdAh0ZQhlbQhtCisKKyAgTWFrZSBzdXJlIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgYXZhaWxhYmxlLCBlaXRoZXIgYnkgYmVpbmcgYnVpbHQgaW50bworICB0aGUga2VybmVsLCBvciBhdmFpbGFibGUgYXMgYSBtb2R1bGUsIHRoZW4gYm9vdCB1cCBVTUwgYW5kIGxvZyBpbi4gIElmCisgIHRoZSByb290IGZpbGVzeXN0ZW0gZG9lc24ndCBoYXZlIHRoZSBmaWxlc3lzdGVtIHV0aWxpdGllcyAobWtmcywgZnNjaywKKyAgZXRjKSwgdGhlbiBnZXQgdGhlbSBpbnRvIFVNTCBieSB3YXkgb2YgdGhlIG5ldCBvciBob3N0ZnMuCisKKworICBNYWtlIHRoZSBuZXcgZmlsZXN5c3RlbSBvbiB0aGUgZGV2aWNlIGFzc2lnbmVkIHRvIHRoZSBuZXcgZmlsZToKKworCisgICAgICAgaG9zdCMgIG1rcmVpc2VyZnMgL2Rldi91YmQvNAorCisKKyAgICAgICA8LS0tLS0tLS0tLS0gTUtSRUlTRVJGU3YyIC0tLS0tLS0tLS0tPgorCisgICAgICAgUmVpc2VyRlMgdmVyc2lvbiAzLjYuMjUKKyAgICAgICBCbG9jayBzaXplIDQwOTYgYnl0ZXMKKyAgICAgICBCbG9jayBjb3VudCAyNTg1NgorICAgICAgIFVzZWQgYmxvY2tzIDgyMTIKKyAgICAgICAgICAgICAgIEpvdXJuYWwgLSA4MTkyIGJsb2NrcyAoMTgtODIwOSksIGpvdXJuYWwgaGVhZGVyIGlzIGluIGJsb2NrIDgyMTAKKyAgICAgICAgICAgICAgIEJpdG1hcHM6IDE3CisgICAgICAgICAgICAgICBSb290IGJsb2NrIDgyMTEKKyAgICAgICBIYXNoIGZ1bmN0aW9uICJyNSIKKyAgICAgICBBVFRFTlRJT046IEFMTCBEQVRBIFdJTEwgQkUgTE9TVCBPTiAnL2Rldi91YmQvNCchICh5L24peQorICAgICAgIGpvdXJuYWwgc2l6ZSA4MTkyIChmcm9tIDE4KQorICAgICAgIEluaXRpYWxpemluZyBqb3VybmFsIC0gMCUuLi4uMjAlLi4uLjQwJS4uLi42MCUuLi4uODAlLi4uLjEwMCUKKyAgICAgICBTeW5jaW5nLi5kb25lLgorCisKKworCisgIE5vdywgbW91bnQgaXQ6CisKKworICAgICAgIFVNTCMKKyAgICAgICBtb3VudCAvZGV2L3ViZC80IC9tbnQKKworCisKKworICBhbmQgeW91J3JlIGluIGJ1c2luZXNzLgorCisKKworCisKKworCisKKworICA5CDkuCC4gIEgISG8Ib3MIc3QIdCBmCGZpCGlsCGxlCGUgYQhhYwhjYwhjZQhlcwhzcwhzCisKKworICBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZmlsZXMgb24gdGhlIGhvc3QgbWFjaGluZSBmcm9tIGluc2lkZSBVTUwsIHlvdQorICBjYW4gdHJlYXQgaXQgYXMgYSBzZXBhcmF0ZSBtYWNoaW5lIGFuZCBlaXRoZXIgbmZzIG1vdW50IGRpcmVjdG9yaWVzCisgIGZyb20gdGhlIGhvc3Qgb3IgY29weSBmaWxlcyBpbnRvIHRoZSB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBzY3Agb3IgcmNwLgorICBIb3dldmVyLCBzaW5jZSBVTUwgaXMgcnVubmluZyBvbiB0aGUgdGhlIGhvc3QsIGl0IGNhbiBhY2Nlc3MgdGhvc2UKKyAgZmlsZXMganVzdCBsaWtlIGFueSBvdGhlciBwcm9jZXNzIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIGluc2lkZSB0aGUKKyAgdmlydHVhbCBtYWNoaW5lIHdpdGhvdXQgbmVlZGluZyB0byB1c2UgdGhlIG5ldHdvcmsuCisKKworICBUaGlzIGlzIG5vdyBwb3NzaWJsZSB3aXRoIHRoZSBob3N0ZnMgdmlydHVhbCBmaWxlc3lzdGVtLiAgV2l0aCBpdCwgeW91CisgIGNhbiBtb3VudCBhIGhvc3QgZGlyZWN0b3J5IGludG8gdGhlIFVNTCBmaWxlc3lzdGVtIGFuZCBhY2Nlc3MgdGhlCisgIGZpbGVzIGNvbnRhaW5lZCBpbiBpdCBqdXN0IGFzIHlvdSB3b3VsZCBvbiB0aGUgaG9zdC4KKworCisgIDkIOS4ILjEIMS4ILiAgVQhVcwhzaQhpbghuZwhnIGgIaG8Ib3MIc3QIdGYIZnMIcworCisgIFRvIGJlZ2luIHdpdGgsIG1ha2Ugc3VyZSB0aGF0IGhvc3RmcyBpcyBhdmFpbGFibGUgaW5zaWRlIHRoZSB2aXJ0dWFsCisgIG1hY2hpbmUgd2l0aAorCisKKyAgICAgICBVTUwjIGNhdCAvcHJvYy9maWxlc3lzdGVtcworCisKKworICAuICBob3N0ZnMgc2hvdWxkIGJlIGxpc3RlZC4gIElmIGl0J3Mgbm90LCBlaXRoZXIgcmVidWlsZCB0aGUga2VybmVsCisgIHdpdGggaG9zdGZzIGNvbmZpZ3VyZWQgaW50byBpdCBvciBtYWtlIHN1cmUgdGhhdCBob3N0ZnMgaXMgYnVpbHQgYXMgYQorICBtb2R1bGUgYW5kIGF2YWlsYWJsZSBpbnNpZGUgdGhlIHZpcnR1YWwgbWFjaGluZSwgYW5kIGluc21vZCBpdC4KKworCisgIE5vdyBhbGwgeW91IG5lZWQgdG8gZG8gaXMgcnVuIG1vdW50OgorCisKKyAgICAgICBVTUwjIG1vdW50IG5vbmUgL21udC9ob3N0IC10IGhvc3RmcworCisKKworCisgIHdpbGwgbW91bnQgdGhlIGhvc3QncyAvIG9uIHRoZSB2aXJ0dWFsIG1hY2hpbmUncyAvbW50L2hvc3QuCisKKworICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBtb3VudCB0aGUgaG9zdCByb290IGRpcmVjdG9yeSwgdGhlbiB5b3UgY2FuCisgIHNwZWNpZnkgYSBzdWJkaXJlY3RvcnkgdG8gbW91bnQgd2l0aCB0aGUgLW8gc3dpdGNoIHRvIG1vdW50OgorCisKKyAgICAgICBVTUwjIG1vdW50IG5vbmUgL21udC9ob21lIC10IGhvc3RmcyAtbyAvaG9tZQorCisKKworCisgIHdpbGwgbW91bnQgdGhlIGhvc3RzJ3MgL2hvbWUgb24gdGhlIHZpcnR1YWwgbWFjaGluZSdzIC9tbnQvaG9tZS4KKworCisKKyAgOQg5LgguMggyLgguICBoCGhvCG9zCHN0CHRmCGZzCHMgYQhhcwhzIHQIdGgIaGUIZSByCHJvCG9vCG90CHQgZghmaQhpbAhsZQhlcwhzeQh5cwhzdAh0ZQhlbQhtCisKKyAgSXQncyBwb3NzaWJsZSB0byBib290IGZyb20gYSBkaXJlY3RvcnkgaGllcmFyY2h5IG9uIHRoZSBob3N0IHVzaW5nCisgIGhvc3RmcyByYXRoZXIgdGhhbiB1c2luZyB0aGUgc3RhbmRhcmQgZmlsZXN5c3RlbSBpbiBhIGZpbGUuCisKKyAgVG8gc3RhcnQsIHlvdSBuZWVkIHRoYXQgaGllcmFyY2h5LiAgVGhlIGVhc2llc3Qgd2F5IGlzIHRvIGxvb3AgbW91bnQKKyAgYW4gZXhpc3Rpbmcgcm9vdF9mcyBmaWxlOgorCisKKyAgICAgICBob3N0IyAgbW91bnQgcm9vdF9mcyB1bWxfcm9vdF9kaXIgLW8gbG9vcAorCisKKworCisgIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgZmlsZXN5c3RlbSB0eXBlIG9mIC8gaW4gZXRjL2ZzdGFiIHRvIGJlCisgICdob3N0ZnMnLCBzbyB0aGF0IGxpbmUgbG9va3MgbGlrZSB0aGlzOgorCisgIC9kZXYvdWJkLzAgICAgICAgLyAgICAgICAgaG9zdGZzICAgICAgZGVmYXVsdHMgICAgICAgICAgMSAgIDEKKworCisKKworICBUaGVuIHlvdSBuZWVkIHRvIGNob3duIHRvIHlvdXJzZWxmIGFsbCB0aGUgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkKKyAgdGhhdCBhcmUgb3duZWQgYnkgcm9vdC4gIFRoaXMgd29ya2VkIGZvciBtZToKKworCisgICAgICAgaG9zdCMgIGZpbmQgLiAtdWlkIDAgLWV4ZWMgY2hvd24gamRpa2Uge30gXDsKKworCisKKworICBOZXh0LCBtYWtlIHN1cmUgdGhhdCB5b3VyIFVNTCBrZXJuZWwgaGFzIGhvc3RmcyBjb21waWxlZCBpbiwgbm90IGFzIGEKKyAgbW9kdWxlLiAgVGhlbiBydW4gVU1MIHdpdGggdGhlIGJvb3QgZGV2aWNlIHBvaW50aW5nIGF0IHRoYXQgZGlyZWN0b3J5OgorCisKKyAgICAgICAgdWJkMD0vcGF0aC90by91bWwvcm9vdC9kaXJlY3RvcnkKKworCisKKworICBVTUwgc2hvdWxkIHRoZW4gYm9vdCBhcyBpdCBkb2VzIG5vcm1hbGx5LgorCisKKyAgOQg5LgguMwgzLgguICBCCEJ1CHVpCGlsCGxkCGRpCGluCG5nCGcgaAhobwhvcwhzdAh0ZghmcwhzCisKKyAgSWYgeW91IG5lZWQgdG8gYnVpbGQgaG9zdGZzIGJlY2F1c2UgaXQncyBub3QgaW4geW91ciBrZXJuZWwsIHlvdSBoYXZlCisgIHR3byBjaG9pY2VzOgorCisKKworICArCG8gIENvbXBpbGluZyBob3N0ZnMgaW50byB0aGUga2VybmVsOgorCisKKyAgICAgUmVjb25maWd1cmUgdGhlIGtlcm5lbCBhbmQgc2V0IHRoZSAnSG9zdCBmaWxlc3lzdGVtJyBvcHRpb24gdW5kZXIKKworCisgICsIbyAgQ29tcGlsaW5nIGhvc3RmcyBhcyBhIG1vZHVsZToKKworCisgICAgIFJlY29uZmlndXJlIHRoZSBrZXJuZWwgYW5kIHNldCB0aGUgJ0hvc3QgZmlsZXN5c3RlbScgb3B0aW9uIHVuZGVyCisgICAgIGJlIGluIGFyY2gvdW0vZnMvaG9zdGZzL2hvc3Rmcy5vLiAgSW5zdGFsbCB0aGF0IGluCisgICAgIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2ZzIGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUsIGJvb3QgaXQgdXAsIGFuZAorCisKKyAgICAgICBVTUwjIGluc21vZCBob3N0ZnMKKworCisKKworCisKKworCisKKworCisKKyAgMQgxMAgwLgguICBUCFRoCGhlCGUgTQhNYQhhbghuYQhhZwhnZQhlbQhtZQhlbghudAh0IEMIQ28Ib24IbnMIc28Ib2wIbGUIZQorCisKKworICBUaGUgVU1MIG1hbmFnZW1lbnQgY29uc29sZSBpcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCwKKyAgc29tZXdoYXQgbGlrZSB0aGUgaTM4NiBTeXNScSBpbnRlcmZhY2UuICBTaW5jZSB0aGVyZSBpcyBhIGZ1bGwtYmxvd24KKyAgb3BlcmF0aW5nIHN5c3RlbSB1bmRlciBVTUwsIHRoZXJlIGlzIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBwb3NzaWJsZQorICB0aGFuIHdpdGggdGhlIFN5c1JxIG1lY2hhbmlzbS4KKworCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiB0aGluZ3MgeW91IGNhbiBkbyB3aXRoIHRoZSBtY29uc29sZSBpbnRlcmZhY2U6CisKKyAgKwhvICBnZXQgdGhlIGtlcm5lbCB2ZXJzaW9uCisKKyAgKwhvICBhZGQgYW5kIHJlbW92ZSBkZXZpY2VzCisKKyAgKwhvICBoYWx0IG9yIHJlYm9vdCB0aGUgbWFjaGluZQorCisgICsIbyAgU2VuZCBTeXNScSBjb21tYW5kcworCisgICsIbyAgUGF1c2UgYW5kIHJlc3VtZSB0aGUgVU1MCisKKworICBZb3UgbmVlZCB0aGUgbWNvbnNvbGUgY2xpZW50ICh1bWxfbWNvbnNvbGUpIHdoaWNoIGlzIHByZXNlbnQgaW4gQ1ZTCisgICgvdG9vbHMvbWNvbnNvbGUpIGluIDIuNC41LTl1bSBhbmQgbGF0ZXIsIGFuZCB3aWxsIGJlIGluIHRoZSBSUE0gaW4KKyAgMi40LjYuCisKKworICBZb3UgYWxzbyBuZWVkIENPTkZJR19NQ09OU09MRSAodW5kZXIgJ0dlbmVyYWwgU2V0dXAnKSBlbmFibGVkIGluIFVNTC4KKyAgV2hlbiB5b3UgYm9vdCBVTUwsIHlvdSdsbCBzZWUgYSBsaW5lIGxpa2U6CisKKworICAgICAgIG1jb25zb2xlIGluaXRpYWxpemVkIG9uIC9ob21lL2pkaWtlLy51bWwvdW1sTkozMnlML21jb25zb2xlCisKKworCisKKyAgSWYgeW91IHNwZWNpZnkgYSB1bmlxdWUgbWFjaGluZSBpZCBvbmUgdGhlIFVNTCBjb21tYW5kIGxpbmUsIGkuZS4KKworCisgICAgICAgIHVtaWQ9ZGViaWFuCisKKworCisKKyAgeW91J2xsIHNlZSB0aGlzCisKKworICAgICAgIG1jb25zb2xlIGluaXRpYWxpemVkIG9uIC9ob21lL2pkaWtlLy51bWwvZGViaWFuL21jb25zb2xlCisKKworCisKKyAgVGhhdCBmaWxlIGlzIHRoZSBzb2NrZXQgdGhhdCB1bWxfbWNvbnNvbGUgd2lsbCB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aAorICBVTUwuICBSdW4gaXQgd2l0aCBlaXRoZXIgdGhlIHVtaWQgb3IgdGhlIGZ1bGwgcGF0aCBhcyBpdHMgYXJndW1lbnQ6CisKKworICAgICAgIGhvc3QlIHVtbF9tY29uc29sZSBkZWJpYW4KKworCisKKworICBvcgorCisKKyAgICAgICBob3N0JSB1bWxfbWNvbnNvbGUgL2hvbWUvamRpa2UvLnVtbC9kZWJpYW4vbWNvbnNvbGUKKworCisKKworICBZb3UnbGwgZ2V0IGEgcHJvbXB0LCBhdCB3aGljaCB5b3UgY2FuIHJ1biBvbmUgb2YgdGhlc2UgY29tbWFuZHM6CisKKyAgKwhvICB2ZXJzaW9uCisKKyAgKwhvICBoYWx0CisKKyAgKwhvICByZWJvb3QKKworICArCG8gIGNvbmZpZworCisgICsIbyAgcmVtb3ZlCisKKyAgKwhvICBzeXNycQorCisgICsIbyAgaGVscAorCisgICsIbyAgY2FkCisKKyAgKwhvICBzdG9wCisKKyAgKwhvICBnbworCisKKyAgMQgxMAgwLgguMQgxLgguICB2CHZlCGVyCHJzCHNpCGlvCG9uCG4KKworICBUaGlzIHRha2VzIG5vIGFyZ3VtZW50cy4gIEl0IHByaW50cyB0aGUgVU1MIHZlcnNpb24uCisKKworICAgICAgIChtY29uc29sZSkgIHZlcnNpb24KKyAgICAgICBPSyBMaW51eCB1c2VybW9kZSAyLjQuNS05dW0gIzEgV2VkIEp1biAyMCAyMjo0NzowOCBFRFQgMjAwMSBpNjg2CisKKworCisKKyAgVGhlcmUgYXJlIGEgY291cGxlIGFjdHVhbCB1c2VzIGZvciB0aGlzLiAgSXQncyBhIHNpbXBsZSBuby1vcCB3aGljaAorICBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGF0IGEgVU1MIGlzIHJ1bm5pbmcuICBJdCdzIGFsc28gYSB3YXkgb2YKKyAgc2VuZGluZyBhbiBpbnRlcnJ1cHQgdG8gdGhlIFVNTC4gIFRoaXMgaXMgc29tZXRpbWVzIHVzZWZ1bCBvbiBTTVAKKyAgaG9zdHMsIHdoZXJlIHRoZXJlJ3MgYSBidWcgd2hpY2ggY2F1c2VzIHNpZ25hbHMgdG8gVU1MIHRvIGJlIGxvc3QsCisgIG9mdGVuIGNhdXNpbmcgaXQgdG8gYXBwZWFyIHRvIGhhbmcuICBTZW5kaW5nIHN1Y2ggYSBVTUwgdGhlIG1jb25zb2xlCisgIHZlcnNpb24gY29tbWFuZCBpcyBhIGdvb2Qgd2F5IHRvICd3YWtlIGl0IHVwJyBiZWZvcmUgbmV0d29ya2luZyBoYXMKKyAgYmVlbiBlbmFibGVkLCBhcyBpdCBkb2VzIG5vdCBkbyBhbnl0aGluZyB0byB0aGUgZnVuY3Rpb24gb2YgdGhlIFVNTC4KKworCisKKyAgMQgxMAgwLgguMggyLgguICBoCGhhCGFsCGx0CHQgYQhhbghuZAhkIHIIcmUIZWIIYm8Ib28Ib3QIdAorCisgIFRoZXNlIHRha2Ugbm8gYXJndW1lbnRzLiAgVGhleSBzaHV0IHRoZSBtYWNoaW5lIGRvd24gaW1tZWRpYXRlbHksIHdpdGgKKyAgbm8gc3luY2luZyBvZiBkaXNrcyBhbmQgbm8gY2xlYW4gc2h1dGRvd24gb2YgdXNlcnNwYWNlLiAgU28sIHRoZXkgYXJlCisgIHByZXR0eSBjbG9zZSB0byBjcmFzaGluZyB0aGUgbWFjaGluZS4KKworCisgICAgICAgKG1jb25zb2xlKSAgaGFsdAorICAgICAgIE9LCisKKworCisKKworCisgIDEIMTAIMC4ILjMIMy4ILiAgYwhjbwhvbghuZghmaQhpZwhnCisKKyAgImNvbmZpZyIgYWRkcyBhIG5ldyBkZXZpY2UgdG8gdGhlIHZpcnR1YWwgbWFjaGluZS4gIEN1cnJlbnRseSB0aGUgdWJkCisgIGFuZCBuZXR3b3JrIGRyaXZlcnMgc3VwcG9ydCB0aGlzLiAgSXQgdGFrZXMgb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUKKyAgZGV2aWNlIHRvIGFkZCwgd2l0aCB0aGUgc2FtZSBzeW50YXggYXMgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKworCisKKyAgKG1jb25zb2xlKQorICBjb25maWcgdWJkMz0vaG9tZS9qZGlrZS9pbmNvbWluZy9yb290cy9yb290X2ZzX2RlYmlhbjIyCisKKyAgT0sKKyAgKG1jb25zb2xlKSAgY29uZmlnIGV0aDE9bWNhc3QKKyAgT0sKKworCisKKworCisKKyAgMQgxMAgwLgguNAg0LgguICByCHJlCGVtCG1vCG92CHZlCGUKKworICAicmVtb3ZlIiBkZWxldGVzIGEgZGV2aWNlIGZyb20gdGhlIHN5c3RlbS4gIEl0cyBhcmd1bWVudCBpcyBqdXN0IHRoZQorICBuYW1lIG9mIHRoZSBkZXZpY2UgdG8gYmUgcmVtb3ZlZC4gVGhlIGRldmljZSBtdXN0IGJlIGlkbGUgaW4gd2hhdGV2ZXIKKyAgc2Vuc2UgdGhlIGRyaXZlciBjb25zaWRlcnMgbmVjZXNzYXJ5LiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHViZCBkcml2ZXIsCisgIHRoZSByZW1vdmVkIGJsb2NrIGRldmljZSBtdXN0IG5vdCBiZSBtb3VudGVkLCBzd2FwcGVkIG9uLCBvciBvdGhlcndpc2UKKyAgb3BlbiwgYW5kIGluIHRoZSBjYXNlIG9mIHRoZSBuZXR3b3JrIGRyaXZlciwgdGhlIGRldmljZSBtdXN0IGJlIGRvd24uCisKKworICAgICAgIChtY29uc29sZSkgIHJlbW92ZSB1YmQzCisgICAgICAgT0sKKyAgICAgICAobWNvbnNvbGUpICByZW1vdmUgZXRoMQorICAgICAgIE9LCisKKworCisKKworCisgIDEIMTAIMC4ILjUINS4ILiAgcwhzeQh5cwhzcghycQhxCisKKyAgVGhpcyB0YWtlcyBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIGEgc2luZ2xlIGxldHRlci4gIEl0IGNhbGxzIHRoZQorICBnZW5lcmljIGtlcm5lbCdzIFN5c1JxIGRyaXZlciwgd2hpY2ggZG9lcyB3aGF0ZXZlciBpcyBjYWxsZWQgZm9yIGJ5CisgIHRoYXQgYXJndW1lbnQuICBTZWUgdGhlIFN5c1JxIGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKKyAgaW4geW91ciBmYXZvcml0ZSBrZXJuZWwgdHJlZSB0byBzZWUgd2hhdCBsZXR0ZXJzIGFyZSB2YWxpZCBhbmQgd2hhdAorICB0aGV5IGRvLgorCisKKworICAxCDEwCDAuCC42CDYuCC4gIGgIaGUIZWwIbHAIcAorCisgICJoZWxwIiByZXR1cm5zIGEgc3RyaW5nIGxpc3RpbmcgdGhlIHZhbGlkIGNvbW1hbmRzIGFuZCB3aGF0IGVhY2ggb25lCisgIGRvZXMuCisKKworCisgIDEIMTAIMC4ILjcINy4ILiAgYwhjYQhhZAhkCisKKyAgVGhpcyBpbnZva2VzIHRoZSBDdGwtQWx0LURlbCBhY3Rpb24gb24gaW5pdC4gIFdoYXQgZXhhY3RseSB0aGlzIGVuZHMKKyAgdXAgZG9pbmcgaXMgdXAgdG8gL2V0Yy9pbml0dGFiLiAgTm9ybWFsbHksIGl0IHJlYm9vdHMgdGhlIG1hY2hpbmUuCisgIFdpdGggVU1MLCB0aGlzIGlzIHVzdWFsbHkgbm90IGRlc2lyZWQsIHNvIGlmIGEgaGFsdCB3b3VsZCBiZSBiZXR0ZXIsCisgIHRoZW4gZmluZCB0aGUgc2VjdGlvbiBvZiBpbml0dGFiIHRoYXQgbG9va3MgbGlrZSB0aGlzCisKKworICAgICAgICMgV2hhdCB0byBkbyB3aGVuIENUUkwtQUxULURFTCBpcyBwcmVzc2VkLgorICAgICAgIGNhOjEyMzQ1OmN0cmxhbHRkZWw6L3NiaW4vc2h1dGRvd24gLXQxIC1hIC1yIG5vdworCisKKworCisgIGFuZCBjaGFuZ2UgdGhlIGNvbW1hbmQgdG8gaGFsdC4KKworCisKKyAgMQgxMAgwLgguOAg4LgguICBzCHN0CHRvCG9wCHAKKworICBUaGlzIHB1dHMgdGhlIFVNTCBpbiBhIGxvb3AgcmVhZGluZyBtY29uc29sZSByZXF1ZXN0cyB1bnRpbCBhICdnbycKKyAgbWNvbnNvbGUgY29tbWFuZCBpcyByZWNlaXZlZC4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgbWFraW5nIGJhY2t1cHMKKyAgb2YgVU1MIGZpbGVzeXN0ZW1zLCBhcyB0aGUgVU1MIGNhbiBiZSBzdG9wcGVkLCB0aGVuIHN5bmNlZCB2aWEgJ3N5c3JxCisgIHMnLCBzbyB0aGF0IGV2ZXJ5dGhpbmcgaXMgd3JpdHRlbiB0byB0aGUgZmlsZXN5c3RlbS4gWW91IGNhbiB0aGVuIGNvcHkKKyAgdGhlIGZpbGVzeXN0ZW0gYW5kIHRoZW4gc2VuZCB0aGUgVU1MICdnbycgdmlhIG1jb25zb2xlLgorCisKKyAgTm90ZSB0aGF0IGEgVU1MIHJ1bm5pbmcgd2l0aCBtb3JlIHRoYW4gb25lIENQVSB3aWxsIGhhdmUgcHJvYmxlbXMKKyAgYWZ0ZXIgeW91IHNlbmQgdGhlICdzdG9wJyBjb21tYW5kLCBhcyBvbmx5IG9uZSBDUFUgd2lsbCBiZSBoZWxkIGluIGEKKyAgbWNvbnNvbGUgbG9vcCBhbmQgYWxsIG90aGVycyB3aWxsIGNvbnRpbnVlIGFzIG5vcm1hbC4gIFRoaXMgaXMgYSBidWcsCisgIGFuZCB3aWxsIGJlIGZpeGVkLgorCisKKworICAxCDEwCDAuCC45CDkuCC4gIGcIZ28IbworCisgIFRoaXMgcmVzdW1lcyBhIFVNTCBhZnRlciBiZWluZyBwYXVzZWQgYnkgYSAnc3RvcCcgY29tbWFuZC4gTm90ZSB0aGF0CisgIHdoZW4gdGhlIFVNTCBoYXMgcmVzdW1lZCwgVENQIGNvbm5lY3Rpb25zIG1heSBoYXZlIHRpbWVkIG91dCBhbmQgaWYKKyAgdGhlIFVNTCBpcyBwYXVzZWQgZm9yIGEgbG9uZyBwZXJpb2Qgb2YgdGltZSwgY3JvbmQgbWlnaHQgZ28gYSBsaXR0bGUKKyAgY3JhenksIHJ1bm5pbmcgYWxsIHRoZSBqb2JzIGl0IGRpZG4ndCBkbyBlYXJsaWVyLgorCisKKworCisKKworCisKKyAgMQgxMQgxLgguICBLCEtlCGVyCHJuCG5lCGVsCGwgZAhkZQhlYghidQh1ZwhnZwhnaQhpbghuZwhnCisKKworICBOCE5vCG90CHRlCGU6CDogVGhlIGludGVyZmFjZSB0aGF0IG1ha2VzIGRlYnVnZ2luZywgYXMgZGVzY3JpYmVkIGhlcmUsIHBvc3NpYmxlCisgIGlzIHByZXNlbnQgaW4gMi40LjAtdGVzdDYga2VybmVscyBhbmQgbGF0ZXIuCisKKworICBTaW5jZSB0aGUgdXNlci1tb2RlIGtlcm5lbCBydW5zIGFzIGEgbm9ybWFsIExpbnV4IHByb2Nlc3MsIGl0IGlzCisgIHBvc3NpYmxlIHRvIGRlYnVnIGl0IHdpdGggZ2RiIGFsbW9zdCBsaWtlIGFueSBvdGhlciBwcm9jZXNzLiAgSXQgaXMKKyAgc2xpZ2h0bHkgZGlmZmVyZW50IGJlY2F1c2UgdGhlIGtlcm5lbCdzIHRocmVhZHMgYXJlIGFscmVhZHkgYmVpbmcKKyAgcHRyYWNlZCBmb3Igc3lzdGVtIGNhbGwgaW50ZXJjZXB0aW9uLCBzbyBnZGIgY2FuJ3QgcHRyYWNlIHRoZW0uCisgIEhvd2V2ZXIsIGEgbWVjaGFuaXNtIGhhcyBiZWVuIGFkZGVkIHRvIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbS4KKworCisgIEluIG9yZGVyIHRvIGRlYnVnIHRoZSBrZXJuZWwsIHlvdSBuZWVkIGJ1aWxkIGl0IGZyb20gc291cmNlLiAgU2VlCisgIGBgQ29tcGlsaW5nIHRoZSBrZXJuZWwgYW5kIG1vZHVsZXMnJyAgZm9yIGluZm9ybWF0aW9uIG9uIGRvaW5nIHRoYXQuCisgIE1ha2Ugc3VyZSB0aGF0IHlvdSBlbmFibGUgQ09ORklHX0RFQlVHU1lNIGFuZCBDT05GSUdfUFRfUFJPWFkgZHVyaW5nCisgIHRoZSBjb25maWcuICBUaGVzZSB3aWxsIGNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIC1nLCBhbmQgZW5hYmxlIHRoZQorICBwdHJhY2UgcHJveHkgc28gdGhhdCBnZGIgd29ya3Mgd2l0aCBVTUwsIHJlc3BlY3RpdmVseS4KKworCisKKworICAxCDExCDEuCC4xCDEuCC4gIFMIU3QIdGEIYXIIcnQIdGkIaW4IbmcIZyB0CHRoCGhlCGUgawhrZQhlcghybghuZQhlbAhsIHUIdW4IbmQIZGUIZXIIciBnCGdkCGRiCGIKKworICBZb3UgY2FuIGhhdmUgdGhlIGtlcm5lbCBydW5uaW5nIHVuZGVyIHRoZSBjb250cm9sIG9mIGdkYiBmcm9tIHRoZQorICBiZWdpbm5pbmcgYnkgcHV0dGluZyAnZGVidWcnIG9uIHRoZSBjb21tYW5kIGxpbmUuICBZb3Ugd2lsbCBnZXQgYW4KKyAgeHRlcm0gd2l0aCBnZGIgcnVubmluZyBpbnNpZGUgaXQuICBUaGUga2VybmVsIHdpbGwgc2VuZCBzb21lIGNvbW1hbmRzCisgIHRvIGdkYiB3aGljaCB3aWxsIGxlYXZlIGl0IHN0b3BwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBzdGFydF9rZXJuZWwuCisgIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gZ2V0IHRoaW5ncyBnb2luZyB3aXRoICduZXh0JywgJ3N0ZXAnLCBvcgorICAnY29udCcuCisKKworICBUaGVyZSBpcyBhIHRyYW5zY3JpcHQgb2YgYSBkZWJ1Z2dpbmcgc2Vzc2lvbiAgaGVyZSA8ZGVidWctCisgIHNlc3Npb24uaHRtbD4gLCB3aXRoIGJyZWFrcG9pbnRzIGJlaW5nIHNldCBpbiB0aGUgc2NoZWR1bGVyIGFuZCBpbiBhbgorICBpbnRlcnJ1cHQgaGFuZGxlci4KKyAgMQgxMQgxLgguMggyLgguICBFCEV4CHhhCGFtCG1pCGluCG5pCGluCG5nCGcgcwhzbAhsZQhlZQhlcAhwaQhpbghuZwhnIHAIcHIIcm8Ib2MIY2UIZXMIc3MIc2UIZXMIcworCisgIE5vdCBldmVyeSBidWcgaXMgZXZpZGVudCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzcy4gIFNvbWV0aW1lcywKKyAgcHJvY2Vzc2VzIGhhbmcgaW4gdGhlIGtlcm5lbCB3aGVuIHRoZXkgc2hvdWxkbid0IGJlY2F1c2UgdGhleSd2ZQorICBkZWFkbG9ja2VkIG9uIGEgc2VtYXBob3JlIG9yIHNvbWV0aGluZyBzaW1pbGFyLiAgSW4gdGhpcyBjYXNlLCB3aGVuCisgIHlvdSBeQyBnZGIgYW5kIGdldCBhIGJhY2t0cmFjZSwgeW91IHdpbGwgc2VlIHRoZSBpZGxlIHRocmVhZCwgd2hpY2gKKyAgaXNuJ3QgdmVyeSByZWxldmFudC4KKworCisgIFdoYXQgeW91IHdhbnQgaXMgdGhlIHN0YWNrIG9mIHdoYXRldmVyIHByb2Nlc3MgaXMgc2xlZXBpbmcgd2hlbiBpdAorICBzaG91bGRuJ3QgYmUuICBZb3UgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHByb2Nlc3MgdGhhdCBpcywgd2hpY2ggaXMKKyAgZ2VuZXJhbGx5IGZhaXJseSBlYXN5LiAgVGhlbiB5b3UgbmVlZCB0byBnZXQgaXRzIGhvc3QgcHJvY2VzcyBpZCwKKyAgd2hpY2ggeW91IGNhbiBkbyBlaXRoZXIgYnkgbG9va2luZyBhdCBwcyBvbiB0aGUgaG9zdCBvciBhdAorICB0YXNrLnRocmVhZC5leHRlcm5fcGlkIGluIGdkYi4KKworCisgIE5vdyB3aGF0IHlvdSBkbyBpcyB0aGlzOgorCisgICsIbyAgZGV0YWNoIGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkCisKKworICAgICAgIChVTUwgZ2RiKSAgZGV0CisKKworCisKKworICArCG8gIGF0dGFjaCB0byB0aGUgdGhyZWFkIHlvdSBhcmUgaW50ZXJlc3RlZCBpbgorCisKKyAgICAgICAoVU1MIGdkYikgIGF0dCA8aG9zdCBwaWQ+CisKKworCisKKworICArCG8gIGxvb2sgYXQgaXRzIHN0YWNrIGFuZCBhbnl0aGluZyBlbHNlIG9mIGludGVyZXN0CisKKworICAgICAgIChVTUwgZ2RiKSAgYnQKKworCisKKworICBOb3RlIHRoYXQgeW91IGNhbid0IGRvIGFueXRoaW5nIGF0IHRoaXMgcG9pbnQgdGhhdCByZXF1aXJlcyB0aGF0IGEKKyAgcHJvY2VzcyBleGVjdXRlLCBlLmcuIGNhbGxpbmcgYSBmdW5jdGlvbgorCisgICsIbyAgd2hlbiB5b3UncmUgZG9uZSBsb29raW5nIGF0IHRoYXQgcHJvY2VzcywgcmVhdHRhY2ggdG8gdGhlIGN1cnJlbnQKKyAgICAgdGhyZWFkIGFuZCBjb250aW51ZSBpdAorCisKKyAgICAgICAoVU1MIGdkYikKKyAgICAgICBhdHQgMQorCisKKworCisKKworICAgICAgIChVTUwgZ2RiKQorICAgICAgIGMKKworCisKKworICBIZXJlLCBzcGVjaWZ5aW5nIGFueSBwaWQgd2hpY2ggaXMgbm90IHRoZSBwcm9jZXNzIGlkIG9mIGEgVU1MIHRocmVhZAorICB3aWxsIGNhdXNlIGdkYiB0byByZWF0dGFjaCB0byB0aGUgY3VycmVudCB0aHJlYWQuICBJIGNvbW1vbmx5IHVzZSAxLAorICBidXQgYW55IG90aGVyIGludmFsaWQgcGlkIHdvdWxkIHdvcmsuCisKKworCisgIDEIMTEIMS4ILjMIMy4ILiAgUghSdQh1bghubghuaQhpbghuZwhnIGQIZGQIZGQIZCBvCG9uCG4gVQhVTQhNTAhMCisKKyAgZGRkIHdvcmtzIG9uIFVNTCwgYnV0IHJlcXVpcmVzIGEgc3BlY2lhbCBrbHVkZ2UuICBUaGUgcHJvY2VzcyBnb2VzCisgIGxpa2UgdGhpczoKKworICArCG8gIFN0YXJ0IGRkZAorCisKKyAgICAgICBob3N0JSBkZGQgbGludXgKKworCisKKworCisgICsIbyAgV2l0aCBwcywgZ2V0IHRoZSBwaWQgb2YgdGhlIGdkYiB0aGF0IGRkZCBzdGFydGVkLiAgWW91IGNhbiBhc2sgdGhlCisgICAgIGdkYiB0byB0ZWxsIHlvdSwgYnV0IGZvciBzb21lIHJlYXNvbiB0aGF0IGNvbmZ1c2VzIHRoaW5ncyBhbmQKKyAgICAgY2F1c2VzIGEgaGFuZy4KKworICArCG8gIHJ1biBVTUwgd2l0aCAnZGVidWc9cGFyZW50IGdkYi1waWQ9PHBpZD4nIGFkZGVkIHRvIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgLSBpdCB3aWxsIGp1c3Qgc2l0IHRoZXJlIGFmdGVyIHlvdSBoaXQgcmV0dXJuCisKKyAgKwhvICB0eXBlICdhdHQgMScgdG8gdGhlIGRkZCBnZGIgYW5kIHlvdSB3aWxsIHNlZSBzb21ldGhpbmcgbGlrZQorCisKKyAgICAgICAweGEwMTNkYzUxIGluIF9fa2lsbCAoKQorCisKKyAgICAgICAoZ2RiKQorCisKKworCisKKyAgKwhvICBBdCB0aGlzIHBvaW50LCB0eXBlICdjJywgVU1MIHdpbGwgYm9vdCB1cCwgYW5kIHlvdSBjYW4gdXNlIGRkZCBqdXN0CisgICAgIGFzIHlvdSBkbyBvbiBhbnkgb3RoZXIgcHJvY2Vzcy4KKworCisKKyAgMQgxMQgxLgguNAg0LgguICBECERlCGViCGJ1CHVnCGdnCGdpCGluCG5nCGcgbQhtbwhvZAhkdQh1bAhsZQhlcwhzCisKKyAgZ2RiIGhhcyBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcgY29kZSB3aGljaCBpcyBkeW5hbWljYWxseSBsb2FkZWQgaW50bworICB0aGUgcHJvY2Vzcy4gIFRoaXMgc3VwcG9ydCBpcyB3aGF0IGlzIG5lZWRlZCB0byBkZWJ1ZyBrZXJuZWwgbW9kdWxlcworICB1bmRlciBVTUwuCisKKworICBVc2luZyB0aGF0IHN1cHBvcnQgaXMgc29tZXdoYXQgY29tcGxpY2F0ZWQuICBZb3UgaGF2ZSB0byB0ZWxsIGdkYiB3aGF0CisgIG9iamVjdCBmaWxlIHlvdSBqdXN0IGxvYWRlZCBpbnRvIFVNTCBhbmQgd2hlcmUgaW4gbWVtb3J5IGl0IGlzLiAgVGhlbiwKKyAgaXQgY2FuIHJlYWQgdGhlIHN5bWJvbCB0YWJsZSwgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgYWxsIHRoZSBzeW1ib2xzIGFyZQorICBmcm9tIHRoZSBsb2FkIGFkZHJlc3MgdGhhdCB5b3UgcHJvdmlkZWQuICBJdCBnZXRzIG1vcmUgaW50ZXJlc3RpbmcKKyAgd2hlbiB5b3UgbG9hZCB0aGUgbW9kdWxlIGFnYWluIChpLmUuIGFmdGVyIGFuIHJtbW9kKS4gIFlvdSBoYXZlIHRvCisgIHRlbGwgZ2RiIHRvIGZvcmdldCBhYm91dCBhbGwgaXRzIHN5bWJvbHMsIGluY2x1ZGluZyB0aGUgbWFpbiBVTUwgb25lcworICBmb3Igc29tZSByZWFzb24sIHRoZW4gbG9hZCB0aGVuIGFsbCBiYWNrIGluIGFnYWluLgorCisKKyAgVGhlcmUncyBhbiBlYXN5IHdheSBhbmQgYSBoYXJkIHdheSB0byBkbyB0aGlzLiAgVGhlIGVhc3kgd2F5IGlzIHRvIHVzZQorICB0aGUgdW1sZ2RiIGV4cGVjdCBzY3JpcHQgd3JpdHRlbiBieSBDaGFuZGFuIEt1ZGlnZS4gIEl0IGJhc2ljYWxseQorICBhdXRvbWF0ZXMgdGhlIHByb2Nlc3MgZm9yIHlvdS4KKworCisgIEZpcnN0LCB5b3UgbXVzdCB0ZWxsIGl0IHdoZXJlIHlvdXIgbW9kdWxlcyBhcmUuICBUaGVyZSBpcyBhIGxpc3QgaW4KKyAgdGhlIHNjcmlwdCB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKyAgICAgICBzZXQgTU9EVUxFX1BBVEhTIHsKKyAgICAgICAiZmF0IiAiL3Vzci9zcmMvdW1sL2xpbnV4LTIuNC4xOC9mcy9mYXQvZmF0Lm8iCisgICAgICAgImlzb2ZzIiAiL3Vzci9zcmMvdW1sL2xpbnV4LTIuNC4xOC9mcy9pc29mcy9pc29mcy5vIgorICAgICAgICJtaW5peCIgIi91c3Ivc3JjL3VtbC9saW51eC0yLjQuMTgvZnMvbWluaXgvbWluaXgubyIKKyAgICAgICB9CisKKworCisKKyAgWW91IGNoYW5nZSB0aGF0IHRvIGxpc3QgdGhlIG5hbWVzIGFuZCBwYXRocyBvZiB0aGUgbW9kdWxlcyB0aGF0IHlvdQorICBhcmUgZ29pbmcgdG8gZGVidWcuICBUaGVuIHlvdSBydW4gaXQgZnJvbSB0aGUgdG9wbGV2ZWwgZGlyZWN0b3J5IG9mCisgIHlvdXIgVU1MIHBvb2wgYW5kIGl0IGJhc2ljYWxseSB0ZWxscyB5b3Ugd2hhdCB0byBkbzoKKworCisKKworICAgICAgICAgICAgICAgICAgICoqKioqKioqIEdEQiBwaWQgaXMgMjE5MDMgKioqKioqKioKKyAgICAgICBTdGFydCBVTUwgYXM6IC4vbGludXggPGtlcm5lbCBzd2l0Y2hlcz4gZGVidWcgZ2RiLXBpZD0yMTkwMworCisKKworICAgICAgIEdOVSBnZGIgNS4wcmgtNSBSZWQgSGF0IExpbnV4IDcuMQorICAgICAgIENvcHlyaWdodCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgIEdEQiBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHlvdSBhcmUKKyAgICAgICB3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorICAgICAgIFR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgorICAgICAgIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIEdEQi4gIFR5cGUgInNob3cgd2FycmFudHkiIGZvciBkZXRhaWxzLgorICAgICAgIFRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJpMzg2LXJlZGhhdC1saW51eCIuLi4KKyAgICAgICAoZ2RiKSBiIHN5c19pbml0X21vZHVsZQorICAgICAgIEJyZWFrcG9pbnQgMSBhdCAweGEwMDExOTIzOiBmaWxlIG1vZHVsZS5jLCBsaW5lIDM0OS4KKyAgICAgICAoZ2RiKSBhdHQgMQorCisKKworCisgIEFmdGVyIHlvdSBydW4gVU1MIGFuZCBpdCBzaXRzIHRoZXJlIGRvaW5nIG5vdGhpbmcsIHlvdSBoaXQgcmV0dXJuIGF0CisgIHRoZSAnYXR0IDEnIGFuZCBjb250aW51ZSBpdDoKKworCisgICAgICAgQXR0YWNoaW5nIHRvIHByb2dyYW06IC9ob21lL2pkaWtlL2xpbnV4LzIuNC91bS8uL2xpbnV4LCBwcm9jZXNzIDEKKyAgICAgICAweGEwMGY0MjIxIGluIF9fa2lsbCAoKQorICAgICAgIChVTUwgZ2RiKSAgYworICAgICAgIENvbnRpbnVpbmcuCisKKworCisKKyAgQXQgdGhpcyBwb2ludCwgeW91IGRlYnVnIG5vcm1hbGx5LiAgV2hlbiB5b3UgaW5zbW9kIHNvbWV0aGluZywgdGhlCisgIGV4cGVjdCBtYWdpYyB3aWxsIGtpY2sgaW4gYW5kIHlvdSdsbCBzZWUgc29tZXRoaW5nIGxpa2U6CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgKioqIE1vZHVsZSBob3N0ZnMgbG9hZGVkICoqKgorICBCcmVha3BvaW50IDEsIHN5c19pbml0X21vZHVsZSAobmFtZV91c2VyPTB4ODA1YWJiMCAiaG9zdGZzIiwKKyAgICAgIG1vZF91c2VyPTB4ODA3MGUwMCkgYXQgbW9kdWxlLmM6MzQ5CisgIDM0OSAgICAgICAgICAgICBjaGFyICpuYW1lLCAqbl9uYW1lLCAqbmFtZV90bXAgPSBOVUxMOworICAoVU1MIGdkYikgIGZpbmlzaAorICBSdW4gdGlsbCBleGl0IGZyb20gIzAgIHN5c19pbml0X21vZHVsZSAobmFtZV91c2VyPTB4ODA1YWJiMCAiaG9zdGZzIiwKKyAgICAgIG1vZF91c2VyPTB4ODA3MGUwMCkgYXQgbW9kdWxlLmM6MzQ5CisgIDB4YTAwZTJlMjMgaW4gZXhlY3V0ZV9zeXNjYWxsIChyPTB4YTgxNDAyODQpIGF0IHN5c2NhbGxfa2Vybi5jOjQxMQorICA0MTEgICAgICAgICAgICAgZWxzZSByZXMgPSBFWEVDVVRFX1NZU0NBTEwoc3lzY2FsbCwgcmVncyk7CisgIFZhbHVlIHJldHVybmVkIGlzICQxID0gMAorICAoVU1MIGdkYikKKyAgcC94IChpbnQpbW9kdWxlX2xpc3QgKyBtb2R1bGVfbGlzdC0+c2l6ZV9vZl9zdHJ1Y3QKKworICAkMiA9IDB4YTkwMjEwNTQKKyAgKFVNTCBnZGIpICBzeW1ib2wtZmlsZSAuL2xpbnV4CisgIExvYWQgbmV3IHN5bWJvbCB0YWJsZSBmcm9tICIuL2xpbnV4Ij8gKHkgb3IgbikgeQorICBSZWFkaW5nIHN5bWJvbHMgZnJvbSAuL2xpbnV4Li4uCisgIGRvbmUuCisgIChVTUwgZ2RiKQorICBhZGQtc3ltYm9sLWZpbGUgL2hvbWUvamRpa2UvbGludXgvMi40L3VtL2FyY2gvdW0vZnMvaG9zdGZzL2hvc3Rmcy5vIDB4YTkwMjEwNTQKKworICBhZGQgc3ltYm9sIHRhYmxlIGZyb20gZmlsZSAiL2hvbWUvamRpa2UvbGludXgvMi40L3VtL2FyY2gvdW0vZnMvaG9zdGZzL2hvc3Rmcy5vIiBhdAorICAgICAgICAgIC50ZXh0X2FkZHIgPSAweGE5MDIxMDU0CisgICAoeSBvciBuKSB5CisKKyAgUmVhZGluZyBzeW1ib2xzIGZyb20gL2hvbWUvamRpa2UvbGludXgvMi40L3VtL2FyY2gvdW0vZnMvaG9zdGZzL2hvc3Rmcy5vLi4uCisgIGRvbmUuCisgIChVTUwgZ2RiKSAgcCAqbW9kdWxlX2xpc3QKKyAgJDEgPSB7c2l6ZV9vZl9zdHJ1Y3QgPSA4NCwgbmV4dCA9IDB4YTAxNzg3MjAsIG5hbWUgPSAweGE5MDIyZGUwICJob3N0ZnMiLAorICAgIHNpemUgPSA5MDE2LCB1YyA9IHt1c2Vjb3VudCA9IHtjb3VudGVyID0gMH0sIHBhZCA9IDB9LCBmbGFncyA9IDEsCisgICAgbnN5bXMgPSA1NywgbmRlcHMgPSAwLCBzeW1zID0gMHhhOTAyMzE3MCwgZGVwcyA9IDB4MCwgcmVmcyA9IDB4MCwKKyAgICBpbml0ID0gMHhhOTAyMjFmMCA8aW5pdF9ob3N0ZnM+LCBjbGVhbnVwID0gMHhhOTAyMjIyYyA8ZXhpdF9ob3N0ZnM+LAorICAgIGV4X3RhYmxlX3N0YXJ0ID0gMHgwLCBleF90YWJsZV9lbmQgPSAweDAsIHBlcnNpc3Rfc3RhcnQgPSAweDAsCisgICAgcGVyc2lzdF9lbmQgPSAweDAsIGNhbl91bmxvYWQgPSAwLCBydW5zaXplID0gMCwga2FsbHN5bXNfc3RhcnQgPSAweDAsCisgICAga2FsbHN5bXNfZW5kID0gMHgwLAorICAgIGFyY2hkYXRhX3N0YXJ0ID0gMHgxYjg1NSA8QWRkcmVzcyAweDFiODU1IG91dCBvZiBib3VuZHM+LAorICAgIGFyY2hkYXRhX2VuZCA9IDB4ZTU4OTAwMDAgPEFkZHJlc3MgMHhlNTg5MDAwMCBvdXQgb2YgYm91bmRzPiwKKyAgICBrZXJuZWxfZGF0YSA9IDB4ZjY4OWMzNWQgPEFkZHJlc3MgMHhmNjg5YzM1ZCBvdXQgb2YgYm91bmRzPn0KKyAgPj4gRmluaXNoZWQgbG9hZGluZyBzeW1ib2xzIGZvciBob3N0ZnMgLi4uCisKKworCisKKyAgVGhhdCdzIHRoZSBlYXN5IHdheS4gIEl0J3MgaGlnaGx5IHJlY29tbWVuZGVkLiAgVGhlIGhhcmQgd2F5IGlzCisgIGRlc2NyaWJlZCBiZWxvdyBpbiBjYXNlIHlvdSdyZSBpbnRlcmVzdGVkIGluIHdoYXQncyBnb2luZyBvbi4KKworCisgIEJvb3QgdGhlIGtlcm5lbCB1bmRlciB0aGUgZGVidWdnZXIgYW5kIGxvYWQgdGhlIG1vZHVsZSB3aXRoIGluc21vZCBvcgorICBtb2Rwcm9iZS4gIFdpdGggZ2RiLCBkbzoKKworCisgICAgICAgKFVNTCBnZGIpICBwIG1vZHVsZV9saXN0CisKKworCisKKyAgVGhpcyBpcyBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgaW50byB0aGUga2VybmVsLCB3aXRoCisgIHRoZSBtb3N0IHJlY2VudGx5IGxvYWRlZCBtb2R1bGUgZmlyc3QuICBOb3JtYWxseSwgdGhlIG1vZHVsZSB5b3Ugd2FudAorICBpcyBhdCBtb2R1bGVfbGlzdC4gIElmIGl0J3Mgbm90LCB3YWxrIGRvd24gdGhlIG5leHQgbGlua3MsIGxvb2tpbmcgYXQKKyAgdGhlIG5hbWUgZmllbGRzIHVudGlsIGZpbmQgdGhlIG1vZHVsZSB5b3Ugd2FudCB0byBkZWJ1Zy4gIFRha2UgdGhlCisgIGFkZHJlc3Mgb2YgdGhhdCBzdHJ1Y3R1cmUsIGFuZCBhZGQgbW9kdWxlLnNpemVfb2Zfc3RydWN0ICh3aGljaCBpbgorICAyLjQuMTAga2VybmVscyBpcyA5NiAoMHg2MCkpIHRvIGl0LiAgR2RiIGNhbiBtYWtlIHRoaXMgaGFyZCBhZGRpdGlvbgorICBmb3IgeW91IDotKToKKworCisKKyAgKFVNTCBnZGIpCisgIHByaW50ZiAiJSN4XG4iLCAoaW50KW1vZHVsZV9saXN0IG1vZHVsZV9saXN0LT5zaXplX29mX3N0cnVjdAorCisKKworCisgIFRoZSBvZmZzZXQgZnJvbSB0aGUgbW9kdWxlIHN0YXJ0IG9jY2FzaW9uYWxseSBjaGFuZ2VzIChiZWZvcmUgMi40LjAsCisgIGl0IHdhcyBtb2R1bGUuc2l6ZV9vZl9zdHJ1Y3QgKyA0KSwgc28gaXQncyBhIGdvb2QgaWRlYSB0byBjaGVjayB0aGUKKyAgaW5pdCBhbmQgY2xlYW51cCBhZGRyZXNzZXMgb25jZSBpbiBhIHdoaWxlLCBhcyBkZXNjcmliZSBiZWxvdy4gIE5vdworICBkbzoKKworCisgICAgICAgKFVNTCBnZGIpCisgICAgICAgYWRkLXN5bWJvbC1maWxlIC9wYXRoL3RvL21vZHVsZS9vbi9ob3N0IHRoYXRfYWRkcmVzcworCisKKworCisgIFRlbGwgZ2RiIHlvdSByZWFsbHkgd2FudCB0byBkbyBpdCwgYW5kIHlvdSdyZSBpbiBidXNpbmVzcy4KKworCisgIElmIHRoZXJlJ3MgYW55IGRvdWJ0IHRoYXQgeW91IGdvdCB0aGUgb2Zmc2V0IHJpZ2h0LCBsaWtlIGJyZWFrcG9pbnRzCisgIGFwcGVhciBub3QgdG8gd29yaywgb3IgdGhleSdyZSBhcHBlYXJpbmcgaW4gdGhlIHdyb25nIHBsYWNlLCB5b3UgY2FuCisgIGNoZWNrIGl0IGJ5IGxvb2tpbmcgYXQgdGhlIG1vZHVsZSBzdHJ1Y3R1cmUuICBUaGUgaW5pdCBhbmQgY2xlYW51cAorICBmaWVsZHMgc2hvdWxkIGxvb2sgbGlrZToKKworCisgICAgICAgaW5pdCA9IDB4NTg4MDY2YjAgPGluaXRfaG9zdGZzPiwgY2xlYW51cCA9IDB4NTg4MDY2YzAgPGV4aXRfaG9zdGZzPgorCisKKworCisgIHdpdGggbm8gb2Zmc2V0cyBvbiB0aGUgc3ltYm9sIG5hbWVzLiAgSWYgdGhlIG5hbWVzIGFyZSByaWdodCwgYnV0IHRoZXkKKyAgYXJlIG9mZnNldCwgdGhlbiB0aGUgb2Zmc2V0IHRlbGxzIHlvdSBob3cgbXVjaCB5b3UgbmVlZCB0byBhZGQgdG8gdGhlCisgIGFkZHJlc3MgeW91IGdhdmUgdG8gYWRkLXN5bWJvbC1maWxlLgorCisKKyAgV2hlbiB5b3Ugd2FudCB0byBsb2FkIGluIGEgbmV3IHZlcnNpb24gb2YgdGhlIG1vZHVsZSwgeW91IG5lZWQgdG8gZ2V0CisgIGdkYiB0byBmb3JnZXQgYWJvdXQgdGhlIG9sZCBvbmUuICBUaGUgb25seSB3YXkgSSd2ZSBmb3VuZCB0byBkbyB0aGF0CisgIGlzIHRvIHRlbGwgZ2RiIHRvIGZvcmdldCBhYm91dCBhbGwgc3ltYm9scyB0aGF0IGl0IGtub3dzIGFib3V0OgorCisKKyAgICAgICAoVU1MIGdkYikgIHN5bWJvbC1maWxlCisKKworCisKKyAgVGhlbiByZWxvYWQgdGhlIHN5bWJvbHMgZnJvbSB0aGUga2VybmVsIGJpbmFyeToKKworCisgICAgICAgKFVNTCBnZGIpICBzeW1ib2wtZmlsZSAvcGF0aC90by9rZXJuZWwKKworCisKKworICBhbmQgcmVwZWF0IHRoZSBwcm9jZXNzIGFib3ZlLiAgWW91J2xsIGFsc28gbmVlZCB0byByZS1lbmFibGUgYnJlYWstCisgIHBvaW50cy4gIFRoZXkgd2VyZSBkaXNhYmxlZCB3aGVuIHlvdSBkdW1wZWQgYWxsIHRoZSBzeW1ib2xzIGJlY2F1c2UKKyAgZ2RiIGNvdWxkbid0IGZpZ3VyZSBvdXQgd2hlcmUgdGhleSBzaG91bGQgZ28uCisKKworCisgIDEIMTEIMS4ILjUINS4ILiAgQQhBdAh0dAh0YQhhYwhjaAhoaQhpbghuZwhnIGcIZ2QIZGIIYiB0CHRvCG8gdAh0aAhoZQhlIGsIa2UIZXIIcm4IbmUIZWwIbAorCisgIElmIHlvdSBkb24ndCBoYXZlIHRoZSBrZXJuZWwgcnVubmluZyB1bmRlciBnZGIsIHlvdSBjYW4gYXR0YWNoIGdkYiB0bworICBpdCBsYXRlciBieSBzZW5kaW5nIHRoZSB0cmFjaW5nIHRocmVhZCBhIFNJR1VTUjEuICBUaGUgZmlyc3QgbGluZSBvZgorICB0aGUgY29uc29sZSBvdXRwdXQgaWRlbnRpZmllcyBpdHMgcGlkOgorICAgICAgIHRyYWNpbmcgdGhyZWFkIHBpZCA9IDIwMDkzCisKKworCisKKyAgV2hlbiB5b3Ugc2VuZCBpdCB0aGUgc2lnbmFsOgorCisKKyAgICAgICBob3N0JSBraWxsIC1VU1IxIDIwMDkzCisKKworCisKKyAgeW91IHdpbGwgZ2V0IGFuIHh0ZXJtIHdpdGggZ2RiIHJ1bm5pbmcgaW4gaXQuCisKKworICBJZiB5b3UgaGF2ZSB0aGUgbWNvbnNvbGUgY29tcGlsZWQgaW50byBVTUwsIHRoZW4gdGhlIG1jb25zb2xlIGNsaWVudAorICBjYW4gYmUgdXNlZCB0byBzdGFydCBnZGI6CisKKworICAgICAgIChtY29uc29sZSkgIChtY29uc29sZSkgY29uZmlnIGdkYj14dGVybQorCisKKworCisgIHdpbGwgZmlyZSB1cCBhbiB4dGVybSB3aXRoIGdkYiBydW5uaW5nIGluIGl0LgorCisKKworICAxCDExCDEuCC42CDYuCC4gIFUIVXMIc2kIaW4IbmcIZyBhCGFsCGx0CHRlCGVyCHJuCG5hCGF0CHRlCGUgZAhkZQhlYghidQh1ZwhnZwhnZQhlcghycwhzCisKKyAgVU1MIGhhcyBzdXBwb3J0IGZvciBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeSBydW5uaW5nIGRlYnVnZ2VyIHJhdGhlcgorICB0aGFuIHN0YXJ0aW5nIGdkYiBpdHNlbGYuICBUaGlzIGlzIHByZXNlbnQgaW4gQ1ZTIGFzIG9mIDE3IEFwciAyMDAxLgorICBJIHNlbnQgaXQgdG8gQWxhbiBmb3IgaW5jbHVzaW9uIGluIHRoZSBhYyB0cmVlLCBhbmQgaXQgd2lsbCBiZSBpbiBteQorICAyLjQuNCByZWxlYXNlLgorCisKKyAgVGhpcyBpcyB1c2VmdWwgd2hlbiBnZGIgaXMgYSBzdWJwcm9jZXNzIG9mIHNvbWUgVUksIHN1Y2ggYXMgZW1hY3Mgb3IKKyAgZGRkLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBydW4gZGVidWdnZXJzIG90aGVyIHRoYW4gZ2RiIG9uIFVNTC4KKyAgQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiB1c2luZyBzdHJhY2UgYXMgYW4gYWx0ZXJuYXRlIGRlYnVnZ2VyLgorCisKKyAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gZ2V0IHRoZSBwaWQgb2YgdGhlIGRlYnVnZ2VyIGFuZCBwYXNzIGl0IGluCisgIHdpdGggdGhlCisKKworICBJZiB5b3UgYXJlIHVzaW5nIGdkYiB1bmRlciBzb21lIFVJLCB0aGVuIHRlbGwgaXQgdG8gJ2F0dCAxJywgYW5kCisgIHlvdSdsbCBmaW5kIHlvdXJzZWxmIGF0dGFjaGVkIHRvIFVNTC4KKworCisgIElmIHlvdSBhcmUgdXNpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gZ2RiIGFzIHlvdXIgZGVidWdnZXIsIHRoZW4KKyAgeW91J2xsIG5lZWQgdG8gZ2V0IGl0IHRvIGRvIHRoZSBlcXVpdmFsZW50IG9mICdhdHQgMScgaWYgaXQgZG9lc24ndCBkbworICBpdCBhdXRvbWF0aWNhbGx5LgorCisKKyAgQW4gZXhhbXBsZSBvZiBhbiBhbHRlcm5hdGUgZGVidWdnZXIgaXMgc3RyYWNlLiAgWW91IGNhbiBzdHJhY2UgdGhlCisgIGFjdHVhbCBrZXJuZWwgYXMgZm9sbG93czoKKworICArCG8gIFJ1biB0aGUgZm9sbG93aW5nIGluIGEgc2hlbGwKKworCisgICAgICAgaG9zdCUKKyAgICAgICBzaCAtYyAnZWNobyBwaWQ9JCQ7IGVjaG8gLW4gaGl0IHJldHVybjsgcmVhZCB4OyBleGVjIHN0cmFjZSAtcCAxIC1vIHN0cmFjZS5vdXQnCisKKworCisgICsIbyAgUnVuIFVNTCB3aXRoICdkZWJ1ZycgYW5kICdnZGItcGlkPTxwaWQ+JyB3aXRoIHRoZSBwaWQgcHJpbnRlZCBvdXQKKyAgICAgYnkgdGhlIHByZXZpb3VzIGNvbW1hbmQKKworICArCG8gIEhpdCByZXR1cm4gaW4gdGhlIHNoZWxsLCBhbmQgVU1MIHdpbGwgc3RhcnQgcnVubmluZywgYW5kIHN0cmFjZQorICAgICBvdXRwdXQgd2lsbCBzdGFydCBhY2N1bXVsYXRpbmcgaW4gdGhlIG91dHB1dCBmaWxlLgorCisgICAgIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHJ1bm5pbmcKKworCisgICAgICAgaG9zdCUgc3RyYWNlIC4vbGludXgKKworCisKKworICBUaGF0IHdpbGwgc3RyYWNlIG9ubHkgdGhlIG1haW4gVU1MIHRocmVhZCwgdGhlIHRyYWNpbmcgdGhyZWFkLCB3aGljaAorICBkb2Vzbid0IGRvIGFueSBvZiB0aGUgYWN0dWFsIGtlcm5lbCB3b3JrLiAgSXQganVzdCBvdmVyc2VlcyB0aGUgdmlyLQorICB0dWFsIG1hY2hpbmUuICBJbiBjb250cmFzdCwgdXNpbmcgc3RyYWNlIGFzIGRlc2NyaWJlZCBhYm92ZSB3aWxsIHNob3cKKyAgeW91IHRoZSBsb3ctbGV2ZWwgYWN0aXZpdHkgb2YgdGhlIHZpcnR1YWwgbWFjaGluZS4KKworCisKKworCisgIDEIMTIIMi4ILiAgSwhLZQhlcghybghuZQhlbAhsIGQIZGUIZWIIYnUIdWcIZ2cIZ2kIaW4IbmcIZyBlCGV4CHhhCGFtCG1wCHBsCGxlCGVzCHMKKworICAxCDEyCDIuCC4xCDEuCC4gIFQIVGgIaGUIZSBjCGNhCGFzCHNlCGUgbwhvZghmIHQIdGgIaGUIZSBoCGh1CHVuCG5nCGcgZghmcwhzYwhjawhrCisKKyAgV2hlbiBib290aW5nIHVwIHRoZSBrZXJuZWwsIGZzY2sgZmFpbGVkLCBhbmQgZHJvcHBlZCBtZSBpbnRvIGEgc2hlbGwKKyAgdG8gZml4IHRoaW5ncyB1cC4gIEkgcmFuIGZzY2sgLXksIHdoaWNoIGh1bmc6CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgU2V0dGluZyBob3N0bmFtZSB1bWwgICAgICAgICAgICAgICAgICAgIFsgT0sgXQorICBDaGVja2luZyByb290IGZpbGVzeXN0ZW0KKyAgL2Rldi9maGQwIHdhcyBub3QgY2xlYW5seSB1bm1vdW50ZWQsIGNoZWNrIGZvcmNlZC4KKyAgRXJyb3IgcmVhZGluZyBibG9jayA4Njg5NCAoQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkKSB3aGlsZSByZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAxOTc4MC4KKworICAvZGV2L2ZoZDA6IFVORVhQRUNURUQgSU5DT05TSVNURU5DWTsgUlVOIGZzY2sgTUFOVUFMTFkuCisgICAgICAgICAgKGkuZS4sIHdpdGhvdXQgLWEgb3IgLXAgb3B0aW9ucykKKyAgWyBGQUlMRUQgXQorCisgICoqKiBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGZpbGUgc3lzdGVtIGNoZWNrLgorICAqKiogRHJvcHBpbmcgeW91IHRvIGEgc2hlbGw7IHRoZSBzeXN0ZW0gd2lsbCByZWJvb3QKKyAgKioqIHdoZW4geW91IGxlYXZlIHRoZSBzaGVsbC4KKyAgR2l2ZSByb290IHBhc3N3b3JkIGZvciBtYWludGVuYW5jZQorICAob3IgdHlwZSBDb250cm9sLUQgZm9yIG5vcm1hbCBzdGFydHVwKToKKworICBbcm9vdEB1bWwgL3Jvb3RdIyBmc2NrIC15IC9kZXYvZmhkMAorICBmc2NrIC15IC9kZXYvZmhkMAorICBQYXJhbGxlbGl6aW5nIGZzY2sgdmVyc2lvbiAxLjE0ICg5LUphbi0xOTk5KQorICBlMmZzY2sgMS4xNCwgOS1KYW4tMTk5OSBmb3IgRVhUMiBGUyAwLjViLCA5NS8wOC8wOQorICAvZGV2L2ZoZDAgY29udGFpbnMgYSBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycywgY2hlY2sgZm9yY2VkLgorICBQYXNzIDE6IENoZWNraW5nIGlub2RlcywgYmxvY2tzLCBhbmQgc2l6ZXMKKyAgRXJyb3IgcmVhZGluZyBibG9jayA4Njg5NCAoQXR0ZW1wdCB0byByZWFkIGJsb2NrIGZyb20gZmlsZXN5c3RlbSByZXN1bHRlZCBpbiBzaG9ydCByZWFkKSB3aGlsZSByZWFkaW5nIGluZGlyZWN0IGJsb2NrcyBvZiBpbm9kZSAxOTc4MC4gIElnbm9yZSBlcnJvcj8geWVzCisKKyAgSW5vZGUgMTk3ODAsIGlfYmxvY2tzIGlzIDE1NDgsIHNob3VsZCBiZSA1NDAuICBGaXg/IHllcworCisgIFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorICBFcnJvciByZWFkaW5nIGJsb2NrIDQ5NDA1IChBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQpLiAgSWdub3JlIGVycm9yPyB5ZXMKKworICBEaXJlY3RvcnkgaW5vZGUgMTE4NTgsIGJsb2NrIDAsIG9mZnNldCAwOiBkaXJlY3RvcnkgY29ycnVwdGVkCisgIFNhbHZhZ2U/IHllcworCisgIE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMTg1OC4KKyAgRml4PyB5ZXMKKworICBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlIDExODU4LgorICBGaXg/IHllcworCisKKworCisKKyAgVGhlIHN0YW5kYXJkIGRyaWxsIGluIHRoaXMgc29ydCBvZiBzaXR1YXRpb24gaXMgdG8gZmlyZSB1cCBnZGIgb24gdGhlCisgIHNpZ25hbCB0aHJlYWQsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIHdhcyBwaWQgMTkzNS4gIEluIGFub3RoZXIgd2luZG93LAorICBJIHJ1biBnZGIgYW5kIGF0dGFjaCBwaWQgMTkzNS4KKworCisKKworICAgICAgIH4vbGludXgvMi4zLjI2L3VtIDEwMTY6IGdkYiBsaW51eAorICAgICAgIEdOVSBnZGIgNC4xNy4wLjExIHdpdGggTGludXggc3VwcG9ydAorICAgICAgIENvcHlyaWdodCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgIEdEQiBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHlvdSBhcmUKKyAgICAgICB3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorICAgICAgIFR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgorICAgICAgIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIEdEQi4gIFR5cGUgInNob3cgd2FycmFudHkiIGZvciBkZXRhaWxzLgorICAgICAgIFRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJpMzg2LXJlZGhhdC1saW51eCIuLi4KKworICAgICAgIChnZGIpIGF0dCAxOTM1CisgICAgICAgQXR0YWNoaW5nIHRvIHByb2dyYW0gYC9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2xpbnV4JywgUGlkIDE5MzUKKyAgICAgICAweDEwMDc1NmQ5IGluIF9fd2FpdDQgKCkKKworCisKKworCisKKyAgTGV0J3Mgc2VlIHdoYXQncyBjdXJyZW50bHkgcnVubmluZzoKKworCisKKyAgICAgICAoZ2RiKSBwIGN1cnJlbnRfdGFzay5waWQKKyAgICAgICAkMSA9IDAKKworCisKKworCisgIEl0J3MgdGhlIGlkbGUgdGhyZWFkLCB3aGljaCBtZWFucyB0aGF0IGZzY2sgd2VudCB0byBzbGVlcCBmb3Igc29tZQorICByZWFzb24gYW5kIG5ldmVyIHdva2UgdXAuCisKKworICBMZXQncyBndWVzcyB0aGF0IHRoZSBsYXN0IHByb2Nlc3MgaW4gdGhlIHByb2Nlc3MgbGlzdCBpcyBmc2NrOgorCisKKworICAgICAgIChnZGIpIHAgY3VycmVudF90YXNrLnByZXZfdGFzay5jb21tCisgICAgICAgJDEzID0gImZzY2suZXh0MlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIKKworCisKKworCisgIEl0IGlzLCBzbyBsZXQncyBzZWUgd2hhdCBpdCB0aGlua3MgaXQncyB1cCB0bzoKKworCisKKyAgICAgICAoZ2RiKSBwIGN1cnJlbnRfdGFzay5wcmV2X3Rhc2sudGhyZWFkCisgICAgICAgJDE0ID0ge2V4dGVybl9waWQgPSAxOTgwLCB0cmFjaW5nID0gMCwgd2FudF90cmFjaW5nID0gMCwgZm9ya2luZyA9IDAsCisgICAgICAgICBrZXJuZWxfc3RhY2tfcGFnZSA9IDAsIHNpZ25hbF9zdGFjayA9IDEzNDI2Mjc4NDAsIHN5c2NhbGwgPSB7aWQgPSA0LCBhcmdzID0geworICAgICAgICAgICAgIDMsIDEzNDk3MzQ0MCwgMTAyNCwgMCwgMTAyNH0sIGhhdmVfcmVzdWx0ID0gMCwgcmVzdWx0ID0gNTA1OTA3MjB9LAorICAgICAgICAgcmVxdWVzdCA9IHtvcCA9IDIsIHUgPSB7ZXhlYyA9IHtpcCA9IDEzNTA0Njc1ODQsIHNwID0gMjk1Mjc4OTQyNH0sIGZvcmsgPSB7CisgICAgICAgICAgICAgICByZWdzID0gezEzNTA0Njc1ODQsIDI5NTI3ODk0MjQsIDAgPHJlcGVhdHMgMTUgdGltZXM+fSwgc2lnc3RhY2sgPSAwLAorICAgICAgICAgICAgICAgcGlkID0gMH0sIHN3aXRjaF90byA9IDB4NTA3ZTgwMDAsIHRocmVhZCA9IHtwcm9jID0gMHg1MDdlODAwMCwKKyAgICAgICAgICAgICAgIGFyZyA9IDB4YWZmZmZkYjAsIGZsYWdzID0gMCwgbmV3X3BpZCA9IDB9LCBpbnB1dF9yZXF1ZXN0ID0geworICAgICAgICAgICAgICAgb3AgPSAxMzUwNDY3NTg0LCBmZCA9IC0xMzQyMTc3ODcyLCBwcm9jID0gMCwgcGlkID0gMH19fX0KKworCisKKworCisgIFRoZSBpbnRlcmVzdGluZyB0aGluZ3MgaGVyZSBhcmUgdGhlIGZhY3QgdGhhdCBpdHMgLnRocmVhZC5zeXNjYWxsLmlkCisgIGlzIF9fTlJfd3JpdGUgKHNlZSB0aGUgYmlnIHN3aXRjaCBpbiBhcmNoL3VtL2tlcm5lbC9zeXNjYWxsX2tlcm4uYyBvcgorICB0aGUgZGVmaW5lcyBpbiBpbmNsdWRlL2FzbS11bS9hcmNoL3VuaXN0ZC5oKSwgYW5kIHRoYXQgaXQgbmV2ZXIKKyAgcmV0dXJuZWQuICBBbHNvLCBpdHMgLnJlcXVlc3Qub3AgaXMgT1BfU1dJVENIIChzZWUKKyAgYXJjaC91bS9pbmNsdWRlL3VzZXJfdXRpbC5oKS4gIFRoZXNlIG1lYW4gdGhhdCBpdCB3ZW50IGludG8gYSB3cml0ZSwKKyAgYW5kLCBmb3Igc29tZSByZWFzb24sIGNhbGxlZCBzY2hlZHVsZSgpLgorCisKKyAgVGhlIGZhY3QgdGhhdCBpdCBuZXZlciByZXR1cm5lZCBmcm9tIHdyaXRlIG1lYW5zIHRoYXQgaXRzIHN0YWNrIHNob3VsZAorICBiZSBmYWlybHkgaW50ZXJlc3RpbmcuICBJdHMgcGlkIGlzIDE5ODAgKC50aHJlYWQuZXh0ZXJuX3BpZCkuICBUaGF0CisgIHByb2Nlc3MgaXMgYmVpbmcgcHRyYWNlZCBieSB0aGUgc2lnbmFsIHRocmVhZCwgc28gaXQgbXVzdCBiZSBkZXRhY2hlZAorICBiZWZvcmUgZ2RiIGNhbiBhdHRhY2ggaXQ6CisKKworCisKKworCisKKworCisKKyAgKGdkYikgY2FsbCBkZXRhY2goMTk4MCkKKworICBQcm9ncmFtIHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCisgIDxmdW5jdGlvbiBjYWxsZWQgZnJvbSBnZGI+CisgIFRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuCisgIFdoZW4gdGhlIGZ1bmN0aW9uIChkZXRhY2gpIGlzIGRvbmUgZXhlY3V0aW5nLCBHREIgd2lsbCBzaWxlbnRseQorICBzdG9wIChpbnN0ZWFkIG9mIGNvbnRpbnVpbmcgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gY29udGFpbmluZworICB0aGUgZnVuY3Rpb24gY2FsbCkuCisgIChnZGIpIGNhbGwgZGV0YWNoKDE5ODApCisgICQxNSA9IDAKKworCisKKworCisgIFRoZSBmaXJzdCBkZXRhY2ggc2VnZmF1bHRzIGZvciBzb21lIHJlYXNvbiwgYW5kIHRoZSBzZWNvbmQgb25lCisgIHN1Y2NlZWRzLgorCisKKyAgTm93IEkgZGV0YWNoIGZyb20gdGhlIHNpZ25hbCB0aHJlYWQsIGF0dGFjaCB0byB0aGUgZnNjayB0aHJlYWQsIGFuZAorICBsb29rIGF0IGl0cyBzdGFjazoKKworCisgICAgICAgKGdkYikgZGV0CisgICAgICAgRGV0YWNoaW5nIGZyb20gcHJvZ3JhbTogL2hvbWUvZGlrZS9saW51eC8yLjMuMjYvdW0vbGludXggUGlkIDE5MzUKKyAgICAgICAoZ2RiKSBhdHQgMTk4MAorICAgICAgIEF0dGFjaGluZyB0byBwcm9ncmFtIGAvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9saW51eCcsIFBpZCAxOTgwCisgICAgICAgMHgxMDA3MDQ1MSBpbiBfX2tpbGwgKCkKKyAgICAgICAoZ2RiKSBidAorICAgICAgICMwICAweDEwMDcwNDUxIGluIF9fa2lsbCAoKQorICAgICAgICMxICAweDEwMDY4Y2NkIGluIHVzcjFfcGlkIChwaWQ9MTk4MCkgYXQgcHJvY2Vzcy5jOjMwCisgICAgICAgIzIgIDB4MTAwNmEwM2YgaW4gX3N3aXRjaF90byAocHJldj0weDUwMDcyMDAwLCBuZXh0PTB4NTA3ZTgwMDApCisgICAgICAgICAgIGF0IHByb2Nlc3Nfa2Vybi5jOjE1NgorICAgICAgICMzICAweDEwMDZhMDUyIGluIHN3aXRjaF90byAocHJldj0weDUwMDcyMDAwLCBuZXh0PTB4NTA3ZTgwMDAsIGxhc3Q9MHg1MDA3MjAwMCkKKyAgICAgICAgICAgYXQgcHJvY2Vzc19rZXJuLmM6MTYxCisgICAgICAgIzQgIDB4MTAwMDFkMTIgaW4gc2NoZWR1bGUgKCkgYXQgc2NoZWQuYzo3NzcKKyAgICAgICAjNSAgMHgxMDA2YTc0NCBpbiBfX2Rvd24gKHNlbT0weDUwN2QyNDFjKSBhdCBzZW1hcGhvcmUuYzo3MQorICAgICAgICM2ICAweDEwMDZhYTEwIGluIF9fZG93bl9mYWlsZWQgKCkgYXQgc2VtYXBob3JlLmM6MTU3CisgICAgICAgIzcgIDB4MTAwNmM1ZDggaW4gc2Vndl9oYW5kbGVyIChzYz0weDUwMDZlOTQwKSBhdCB0cmFwX3VzZXIuYzoxNzQKKyAgICAgICAjOCAgMHgxMDA2YzVlYyBpbiBrZXJuX3NlZ3ZfaGFuZGxlciAoc2lnPTExKSBhdCB0cmFwX3VzZXIuYzoxODIKKyAgICAgICAjOSAgPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4KKyAgICAgICAjMTAgMHgxMDE1NTQwNCBpbiBlcnJubyAoKQorICAgICAgICMxMSAweDEwMDZjMGFhIGluIHNlZ3YgKGFkZHJlc3M9MTM0MjE3OTMyOCwgaXNfd3JpdGU9MikgYXQgdHJhcF9rZXJuLmM6NTAKKyAgICAgICAjMTIgMHgxMDA2YzVkOCBpbiBzZWd2X2hhbmRsZXIgKHNjPTB4NTAwNmVhZjgpIGF0IHRyYXBfdXNlci5jOjE3NAorICAgICAgICMxMyAweDEwMDZjNWVjIGluIGtlcm5fc2Vndl9oYW5kbGVyIChzaWc9MTEpIGF0IHRyYXBfdXNlci5jOjE4MgorICAgICAgICMxNCA8c2lnbmFsIGhhbmRsZXIgY2FsbGVkPgorICAgICAgICMxNSAweGMwZmQgaW4gPz8gKCkKKyAgICAgICAjMTYgMHgxMDAxNjY0NyBpbiBzeXNfd3JpdGUgKGZkPTMsCisgICAgICAgICAgIGJ1Zj0weDgwYjg4MDAgPEFkZHJlc3MgMHg4MGI4ODAwIG91dCBvZiBib3VuZHM+LCBjb3VudD0xMDI0KQorICAgICAgICAgICBhdCByZWFkX3dyaXRlLmM6MTU5CisgICAgICAgIzE3IDB4MTAwNmQ1YjMgaW4gZXhlY3V0ZV9zeXNjYWxsIChzeXNjYWxsPTQsIGFyZ3M9MHg1MDA2ZWYwOCkKKyAgICAgICAgICAgYXQgc3lzY2FsbF9rZXJuLmM6MjU0CisgICAgICAgIzE4IDB4MTAwNmFmODcgaW4gcmVhbGx5X2RvX3N5c2NhbGwgKHNpZz0xMikgYXQgc3lzY2FsbF91c2VyLmM6MzUKKyAgICAgICAjMTkgPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4KKyAgICAgICAjMjAgMHg0MDBkYzhiMCBpbiA/PyAoKQorCisKKworCisKKyAgVGhlIGludGVyZXN0aW5nIHRoaW5ncyBoZXJlIGFyZSA6CisKKyAgKwhvICBUaGVyZSBhcmUgdHdvIHNlZ2ZhdWx0cyBvbiB0aGlzIHN0YWNrIChmcmFtZXMgOSBhbmQgMTQpCisKKyAgKwhvICBUaGUgZmlyc3QgZmF1bHRpbmcgYWRkcmVzcyAoZnJhbWUgMTEpIGlzIDB4NTAwMDA4MDAKKworICAoZ2RiKSBwICh2b2lkICopMTM0MjE3OTMyOAorICAkMTYgPSAodm9pZCAqKSAweDUwMDAwODAwCisKKworCisKKworICBUaGUgaW5pdGlhbCBmYXVsdGluZyBhZGRyZXNzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgaXMgb24gdGhlIGlkbGUKKyAgdGhyZWFkJ3Mgc3RhY2suICBJIGhhZCBiZWVuIHNlZWluZyB0aGUgaWRsZSB0aHJlYWQgc2VnZmF1bHQgZm9yIG5vCisgIGFwcGFyZW50IHJlYXNvbiwgYW5kIHRoZSBjYXVzZSBsb29rZWQgbGlrZSBzdGFjayBjb3JydXB0aW9uLiAgSW4gaG9wZXMKKyAgb2YgY2F0Y2hpbmcgdGhlIGN1bHByaXQgaW4gdGhlIGFjdCwgSSBoYWQgdHVybmVkIG9mZiBhbGwgcHJvdGVjdGlvbnMKKyAgdG8gdGhhdCBzdGFjayB3aGlsZSB0aGUgaWRsZSB0aHJlYWQgd2Fzbid0IHJ1bm5pbmcuICBUaGlzIGFwcGFyZW50bHkKKyAgdHJpcHBlZCB0aGF0IHRyYXAuCisKKworICBIb3dldmVyLCB0aGUgbW9yZSBpbW1lZGlhdGUgcHJvYmxlbSBpcyB0aGF0IHNlY29uZCBzZWdmYXVsdCBhbmQgSSdtCisgIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIHRoYXQuICBGaXJzdCwgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGUgZmF1bHQKKyAgaGFwcGVuZWQsIHNvIEkgaGF2ZSB0byBnbyBsb29rIGF0IHRoZSBzaWdjb250ZW50IHN0cnVjdCBpbiBmcmFtZSA4OgorCisKKworICAgICAgIChnZGIpIHVwCisgICAgICAgIzEgIDB4MTAwNjhjY2QgaW4gdXNyMV9waWQgKHBpZD0xOTgwKSBhdCBwcm9jZXNzLmM6MzAKKyAgICAgICAzMCAgICAgICAga2lsbChwaWQsIFNJR1VTUjEpOworICAgICAgIChnZGIpCisgICAgICAgIzIgIDB4MTAwNmEwM2YgaW4gX3N3aXRjaF90byAocHJldj0weDUwMDcyMDAwLCBuZXh0PTB4NTA3ZTgwMDApCisgICAgICAgICAgIGF0IHByb2Nlc3Nfa2Vybi5jOjE1NgorICAgICAgIDE1NiAgICAgICB1c3IxX3BpZChnZXRwaWQoKSk7CisgICAgICAgKGdkYikKKyAgICAgICAjMyAgMHgxMDA2YTA1MiBpbiBzd2l0Y2hfdG8gKHByZXY9MHg1MDA3MjAwMCwgbmV4dD0weDUwN2U4MDAwLCBsYXN0PTB4NTAwNzIwMDApCisgICAgICAgICAgIGF0IHByb2Nlc3Nfa2Vybi5jOjE2MQorICAgICAgIDE2MSAgICAgICBfc3dpdGNoX3RvKHByZXYsIG5leHQpOworICAgICAgIChnZGIpCisgICAgICAgIzQgIDB4MTAwMDFkMTIgaW4gc2NoZWR1bGUgKCkgYXQgc2NoZWQuYzo3NzcKKyAgICAgICA3NzcgICAgICAgICAgICAgc3dpdGNoX3RvKHByZXYsIG5leHQsIHByZXYpOworICAgICAgIChnZGIpCisgICAgICAgIzUgIDB4MTAwNmE3NDQgaW4gX19kb3duIChzZW09MHg1MDdkMjQxYykgYXQgc2VtYXBob3JlLmM6NzEKKyAgICAgICA3MSAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOworICAgICAgIChnZGIpCisgICAgICAgIzYgIDB4MTAwNmFhMTAgaW4gX19kb3duX2ZhaWxlZCAoKSBhdCBzZW1hcGhvcmUuYzoxNTcKKyAgICAgICAxNTcgICAgIH0KKyAgICAgICAoZ2RiKQorICAgICAgICM3ICAweDEwMDZjNWQ4IGluIHNlZ3ZfaGFuZGxlciAoc2M9MHg1MDA2ZTk0MCkgYXQgdHJhcF91c2VyLmM6MTc0CisgICAgICAgMTc0ICAgICAgIHNlZ3Yoc2MtPmNyMiwgc2MtPmVyciAmIDIpOworICAgICAgIChnZGIpCisgICAgICAgIzggIDB4MTAwNmM1ZWMgaW4ga2Vybl9zZWd2X2hhbmRsZXIgKHNpZz0xMSkgYXQgdHJhcF91c2VyLmM6MTgyCisgICAgICAgMTgyICAgICAgIHNlZ3ZfaGFuZGxlcihzYyk7CisgICAgICAgKGdkYikgcCAqc2MKKyAgICAgICBDYW5ub3QgYWNjZXNzIG1lbW9yeSBhdCBhZGRyZXNzIDB4MC4KKworCisKKworICBUaGF0J3Mgbm90IHZlcnkgdXNlZnVsLCBzbyBJJ2xsIHRyeSBhIG1vcmUgbWFudWFsIG1ldGhvZDoKKworCisgICAgICAgKGdkYikgcCAqKChzdHJ1Y3Qgc2lnY29udGV4dCAqKSAoJnNpZyArIDEpKQorICAgICAgICQxOSA9IHtncyA9IDAsIF9fZ3NoID0gMCwgZnMgPSAwLCBfX2ZzaCA9IDAsIGVzID0gNDMsIF9fZXNoID0gMCwgZHMgPSA0MywKKyAgICAgICAgIF9fZHNoID0gMCwgZWRpID0gMTM0MjE3OTMyOCwgZXNpID0gMTM1MDM3ODU0OCwgZWJwID0gMTM0MjYzMDQ0MCwKKyAgICAgICAgIGVzcCA9IDEzNDI2MzA0MjAsIGVieCA9IDEzNDgxNTA2MjQsIGVkeCA9IDEyODAsIGVjeCA9IDAsIGVheCA9IDAsCisgICAgICAgICB0cmFwbm8gPSAxNCwgZXJyID0gNCwgZWlwID0gMjY4NDgwOTQ1LCBjcyA9IDM1LCBfX2NzaCA9IDAsIGVmbGFncyA9IDY2MTE4LAorICAgICAgICAgZXNwX2F0X3NpZ25hbCA9IDEzNDI2MzA0MjAsIHNzID0gNDMsIF9fc3NoID0gMCwgZnBzdGF0ZSA9IDB4MCwgb2xkbWFzayA9IDAsCisgICAgICAgICBjcjIgPSAxMjgwfQorCisKKworICBUaGUgaXAgaXMgaW4gaGFuZGxlX21tX2ZhdWx0OgorCisKKyAgICAgICAoZ2RiKSBwICh2b2lkICopMjY4NDgwOTQ1CisgICAgICAgJDIwID0gKHZvaWQgKikgMHgxMDAwYjFiMQorICAgICAgIChnZGIpIGkgc3ltICQyMAorICAgICAgIGhhbmRsZV9tbV9mYXVsdCArIDU3IGluIHNlY3Rpb24gLnRleHQKKworCisKKworCisgIFNwZWNpZmljYWxseSwgaXQncyBpbiBwdGVfYWxsb2M6CisKKworICAgICAgIChnZGIpIGkgbGluZSAqJDIwCisgICAgICAgTGluZSAxMjQgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKKyAgICAgICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDBiMWIxIDxoYW5kbGVfbW1fZmF1bHQrNTc+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjFiNyA8aGFuZGxlX21tX2ZhdWx0KzYzPi4KKworCisKKworCisgIFRvIGZpbmQgd2hlcmUgaW4gaGFuZGxlX21tX2ZhdWx0IHRoaXMgaXMsIEknbGwganVtcCBmb3J3YXJkIGluIHRoZQorICBjb2RlIHVudGlsIEkgc2VlIGFuIGFkZHJlc3MgaW4gdGhhdCBwcm9jZWR1cmU6CisKKworCisgICAgICAgKGdkYikgaSBsaW5lICoweDEwMDBiMWMwCisgICAgICAgTGluZSAxMjYgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKKyAgICAgICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDBiMWI3IDxoYW5kbGVfbW1fZmF1bHQrNjM+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjFjMyA8aGFuZGxlX21tX2ZhdWx0Kzc1Pi4KKyAgICAgICAoZ2RiKSBpIGxpbmUgKjB4MTAwMGIxZDAKKyAgICAgICBMaW5lIDEzMSBvZiAiL2hvbWUvZGlrZS9saW51eC8yLjMuMjYvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oIgorICAgICAgICAgIHN0YXJ0cyBhdCBhZGRyZXNzIDB4MTAwMGIxZDAgPGhhbmRsZV9tbV9mYXVsdCs4OD4KKyAgICAgICAgICBhbmQgZW5kcyBhdCAweDEwMDBiMWRhIDxoYW5kbGVfbW1fZmF1bHQrOTg+LgorICAgICAgIChnZGIpIGkgbGluZSAqMHgxMDAwYjFlMAorICAgICAgIExpbmUgNjEgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKKyAgICAgICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDBiMWRhIDxoYW5kbGVfbW1fZmF1bHQrOTg+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjFlMSA8aGFuZGxlX21tX2ZhdWx0KzEwNT4uCisgICAgICAgKGdkYikgaSBsaW5lICoweDEwMDBiMWYwCisgICAgICAgTGluZSAxMzQgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKKyAgICAgICAgICBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDBiMWYwIDxoYW5kbGVfbW1fZmF1bHQrMTIwPgorICAgICAgICAgIGFuZCBlbmRzIGF0IDB4MTAwMGIyMDAgPGhhbmRsZV9tbV9mYXVsdCsxMzY+LgorICAgICAgIChnZGIpIGkgbGluZSAqMHgxMDAwYjIwMAorICAgICAgIExpbmUgMTM1IG9mICIvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCisgICAgICAgICAgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAwYjIwMCA8aGFuZGxlX21tX2ZhdWx0KzEzNj4KKyAgICAgICAgICBhbmQgZW5kcyBhdCAweDEwMDBiMjA4IDxoYW5kbGVfbW1fZmF1bHQrMTQ0Pi4KKyAgICAgICAoZ2RiKSBpIGxpbmUgKjB4MTAwMGIyMTAKKyAgICAgICBMaW5lIDEzOSBvZiAiL2hvbWUvZGlrZS9saW51eC8yLjMuMjYvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oIgorICAgICAgICAgIHN0YXJ0cyBhdCBhZGRyZXNzIDB4MTAwMGIyMTAgPGhhbmRsZV9tbV9mYXVsdCsxNTI+CisgICAgICAgICAgYW5kIGVuZHMgYXQgMHgxMDAwYjIxOSA8aGFuZGxlX21tX2ZhdWx0KzE2MT4uCisgICAgICAgKGdkYikgaSBsaW5lICoweDEwMDBiMjIwCisgICAgICAgTGluZSAxMTY4IG9mICJtZW1vcnkuYyIgc3RhcnRzIGF0IGFkZHJlc3MgMHgxMDAwYjIxZSA8aGFuZGxlX21tX2ZhdWx0KzE2Nj4KKyAgICAgICAgICBhbmQgZW5kcyBhdCAweDEwMDBiMjIyIDxoYW5kbGVfbW1fZmF1bHQrMTcwPi4KKworCisKKworCisgIFNvbWV0aGluZyBpcyBhcHBhcmVudGx5IHdyb25nIHdpdGggdGhlIHBhZ2UgdGFibGVzIG9yIHZtYV9zdHJ1Y3RzLCBzbworICBsZXRzIGdvIGJhY2sgdG8gZnJhbWUgMTEgYW5kIGhhdmUgYSBsb29rIGF0IHRoZW06CisKKworCisgICMxMSAweDEwMDZjMGFhIGluIHNlZ3YgKGFkZHJlc3M9MTM0MjE3OTMyOCwgaXNfd3JpdGU9MikgYXQgdHJhcF9rZXJuLmM6NTAKKyAgNTAgICAgICAgIGhhbmRsZV9tbV9mYXVsdChjdXJyZW50LCB2bWEsIGFkZHJlc3MsIGlzX3dyaXRlKTsKKyAgKGdkYikgY2FsbCBwZ2Rfb2Zmc2V0X3Byb2Modm1hLT52bV9tbSwgYWRkcmVzcykKKyAgJDIyID0gKHBnZF90ICopIDB4ODBhNTQ4YworCisKKworCisKKyAgVGhhdCdzIHByZXR0eSBib2d1cy4gIFBhZ2UgdGFibGVzIGFyZW4ndCBzdXBwb3NlZCB0byBiZSBpbiBwcm9jZXNzCisgIHRleHQgb3IgZGF0YSBhcmVhcy4gIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlIHZtYToKKworCisgICAgICAgKGdkYikgcCAqdm1hCisgICAgICAgJDIzID0ge3ZtX21tID0gMHg1MDdkMjQzNCwgdm1fc3RhcnQgPSAwLCB2bV9lbmQgPSAxMzQ1MTI2NDAsCisgICAgICAgICB2bV9uZXh0ID0gMHg4MGE0ZjhjLCB2bV9wYWdlX3Byb3QgPSB7cGdwcm90ID0gMH0sIHZtX2ZsYWdzID0gMzEyMDAsCisgICAgICAgICB2bV9hdmxfaGVpZ2h0ID0gMjA1OCwgdm1fYXZsX2xlZnQgPSAweDgwYThjOTQsIHZtX2F2bF9yaWdodCA9IDB4ODBkMTAwMCwKKyAgICAgICAgIHZtX25leHRfc2hhcmUgPSAweGFmZmZmZGIwLCB2bV9wcHJldl9zaGFyZSA9IDB4YWZmZmZlNjMsCisgICAgICAgICB2bV9vcHMgPSAweGFmZmZmZTdhLCB2bV9wZ29mZiA9IDI5NTI3ODk2MjYsIHZtX2ZpbGUgPSAweGFmZmZmZmVjLAorICAgICAgICAgdm1fcHJpdmF0ZV9kYXRhID0gMHg2Mn0KKyAgICAgICAoZ2RiKSBwICp2bWEudm1fbW0KKyAgICAgICAkMjQgPSB7bW1hcCA9IDB4NTA3ZDI0MzQsIG1tYXBfYXZsID0gMHgwLCBtbWFwX2NhY2hlID0gMHg4MDQ4MDAwLAorICAgICAgICAgcGdkID0gMHg4MGE0ZjhjLCBtbV91c2VycyA9IHtjb3VudGVyID0gMH0sIG1tX2NvdW50ID0ge2NvdW50ZXIgPSAxMzQ5MDQyODh9LAorICAgICAgICAgbWFwX2NvdW50ID0gMTM0OTA5MDc2LCBtbWFwX3NlbSA9IHtjb3VudCA9IHtjb3VudGVyID0gMTM1MDczNzkyfSwKKyAgICAgICAgICAgc2xlZXBlcnMgPSAtMTM0MjE3Nzg3Miwgd2FpdCA9IHtsb2NrID0gPG9wdGltaXplZCBvdXQgb3IgemVybyBsZW5ndGg+LAorICAgICAgICAgICAgIHRhc2tfbGlzdCA9IHtuZXh0ID0gMHhhZmZmZmU2MywgcHJldiA9IDB4YWZmZmZlN2F9LAorICAgICAgICAgICAgIF9fbWFnaWMgPSAtMTM0MjE3NzY3MCwgX19jcmVhdG9yID0gLTEzNDIxNzczMDB9LCBfX21hZ2ljID0gOTh9LAorICAgICAgICAgcGFnZV90YWJsZV9sb2NrID0ge30sIGNvbnRleHQgPSAxMzgsIHN0YXJ0X2NvZGUgPSAwLCBlbmRfY29kZSA9IDAsCisgICAgICAgICBzdGFydF9kYXRhID0gMCwgZW5kX2RhdGEgPSAwLCBzdGFydF9icmsgPSAwLCBicmsgPSAwLCBzdGFydF9zdGFjayA9IDAsCisgICAgICAgICBhcmdfc3RhcnQgPSAwLCBhcmdfZW5kID0gMCwgZW52X3N0YXJ0ID0gMCwgZW52X2VuZCA9IDAsIHJzcyA9IDEzNTAzODE1MzYsCisgICAgICAgICB0b3RhbF92bSA9IDAsIGxvY2tlZF92bSA9IDAsIGRlZl9mbGFncyA9IDAsIGNwdV92bV9tYXNrID0gMCwgc3dhcF9jbnQgPSAwLAorICAgICAgICAgc3dhcF9hZGRyZXNzID0gMCwgc2VnbWVudHMgPSAweDB9CisKKworCisKKworICBUaGlzIGFsc28gcHJldHR5IGJvZ3VzLiAgV2l0aCBhbGwgb2YgdGhlIDB4ODB4eHh4eCBhbmQgMHhhZmZmZnh4eAorICBhZGRyZXNzZXMsIHRoaXMgaXMgbG9va2luZyBsaWtlIGEgc3RhY2sgd2FzIHBsb25rZWQgZG93biBvbiB0b3Agb2YKKyAgdGhlc2Ugc3RydWN0dXJlcy4gIE1heWJlIGl0J3MgYSBzdGFjayBvdmVyZmxvdyBmcm9tIHRoZSBuZXh0IHBhZ2U6CisKKworCisgICAgICAgKGdkYikgcCB2bWEKKyAgICAgICAkMjUgPSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopIDB4NTA3ZDI0MzQKKworCisKKworCisgIFRoYXQncyB0b3dhcmRzIHRoZSBsb3dlciBxdWFydGVyIG9mIHRoZSBwYWdlLCBzbyB0aGF0IHdvdWxkIGhhdmUgdG8KKyAgaGF2ZSBiZWVuIHByZXR0eSBoZWF2eSBzdGFjayBvdmVyZmxvdzoKKworCisKKworCisKKworCisKKworCisKKworCisgIChnZGIpIHgvMTAweCAkMjUKKyAgMHg1MDdkMjQzNDogICAgIDB4NTA3ZDI0MzQgICAgICAweDAwMDAwMDAwICAgICAgMHgwODA0ODAwMCAgICAgIDB4MDgwYTRmOGMKKyAgMHg1MDdkMjQ0NDogICAgIDB4MDAwMDAwMDAgICAgICAweDA4MGE3OWUwICAgICAgMHgwODBhOGM5NCAgICAgIDB4MDgwZDEwMDAKKyAgMHg1MDdkMjQ1NDogICAgIDB4YWZmZmZkYjAgICAgICAweGFmZmZmZTYzICAgICAgMHhhZmZmZmU3YSAgICAgIDB4YWZmZmZlN2EKKyAgMHg1MDdkMjQ2NDogICAgIDB4YWZmZmZmZWMgICAgICAweDAwMDAwMDYyICAgICAgMHgwMDAwMDA4YSAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjQ3NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjQ4NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjQ5NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHg1MDdkMmZlMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjRhNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjRiNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjRjNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjRkNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjRlNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjRmNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjUwNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjUxNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjUyNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjUzNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHg1MDdkMjVkYyAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjU0NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjU1NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjU2NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjU3NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjU4NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjU5NDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjVhNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKyAgMHg1MDdkMjViNDogICAgIDB4MDAwMDAwMDAgICAgICAweDAwMDAwMDAwICAgICAgMHgwMDAwMDAwMCAgICAgIDB4MDAwMDAwMDAKKworCisKKworCisgIEl0J3Mgbm90IHN0YWNrIG92ZXJmbG93LiAgVGhlIG9ubHkgInN0YWNrLWxpa2UiIHBpZWNlIG9mIHRoaXMgZGF0YSBpcworICB0aGUgdm1hX3N0cnVjdCBpdHNlbGYuCisKKworICBBdCB0aGlzIHBvaW50LCBJIGRvbid0IHNlZSBhbnkgYXZlbnVlcyB0byBwdXJzdWUsIHNvIEkganVzdCBoYXZlIHRvCisgIGFkbWl0IHRoYXQgSSBoYXZlIG5vIGlkZWEgd2hhdCdzIGdvaW5nIG9uLiAgV2hhdCBJIHdpbGwgZG8sIHRob3VnaCwgaXMKKyAgc3RpY2sgYSB0cmFwIG9uIHRoZSBzZWdmYXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwgc3RvcCBpZiBpdCBzZWVzIGFueQorICB3cml0ZXMgdG8gdGhlIGlkbGUgdGhyZWFkJ3Mgc3RhY2suICBUaGF0IHdhcyB0aGUgdGhpbmcgdGhhdCBoYXBwZW5lZAorICBmaXJzdCwgYW5kIGl0IG1heSBiZSB0aGF0IGlmIEkgY2FuIGNhdGNoIGl0IGltbWVkaWF0ZWx5LCB3aGF0J3MgZ29pbmcKKyAgb24gd2lsbCBiZSBzb21ld2hhdCBjbGVhcmVyLgorCisKKyAgMQgxMggyLgguMggyLgguICBFCEVwCHBpCGlzCHNvCG9kCGRlCGUgMggyOgg6IFQIVGgIaGUIZSBjCGNhCGFzCHNlCGUgbwhvZghmIHQIdGgIaGUIZSBoCGh1CHVuCG5nCGcgZghmcwhzYwhjawhrCisKKyAgQWZ0ZXIgc2V0dGluZyBhIHRyYXAgaW4gdGhlIFNFR1YgaGFuZGxlciBmb3IgYWNjZXNzZXMgdG8gdGhlIHNpZ25hbAorICB0aHJlYWQncyBzdGFjaywgSSByZXJhbiB0aGUga2VybmVsLgorCisKKyAgZnNjayBodW5nIGFnYWluLCB0aGlzIHRpbWUgYnkgaGl0dGluZyB0aGUgdHJhcDoKKworCisKKworCisKKworCisKKworCisKKworCisKKworICBTZXR0aW5nIGhvc3RuYW1lIHVtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIE9LIF0KKyAgQ2hlY2tpbmcgcm9vdCBmaWxlc3lzdGVtCisgIC9kZXYvZmhkMCBjb250YWlucyBhIGZpbGUgc3lzdGVtIHdpdGggZXJyb3JzLCBjaGVjayBmb3JjZWQuCisgIEVycm9yIHJlYWRpbmcgYmxvY2sgODY4OTQgKEF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCkgd2hpbGUgcmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgMTk3ODAuCisKKyAgL2Rldi9maGQwOiBVTkVYUEVDVEVEIElOQ09OU0lTVEVOQ1k7IFJVTiBmc2NrIE1BTlVBTExZLgorICAgICAgICAgIChpLmUuLCB3aXRob3V0IC1hIG9yIC1wIG9wdGlvbnMpCisgIFsgRkFJTEVEIF0KKworICAqKiogQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBmaWxlIHN5c3RlbSBjaGVjay4KKyAgKioqIERyb3BwaW5nIHlvdSB0byBhIHNoZWxsOyB0aGUgc3lzdGVtIHdpbGwgcmVib290CisgICoqKiB3aGVuIHlvdSBsZWF2ZSB0aGUgc2hlbGwuCisgIEdpdmUgcm9vdCBwYXNzd29yZCBmb3IgbWFpbnRlbmFuY2UKKyAgKG9yIHR5cGUgQ29udHJvbC1EIGZvciBub3JtYWwgc3RhcnR1cCk6CisKKyAgW3Jvb3RAdW1sIC9yb290XSMgZnNjayAteSAvZGV2L2ZoZDAKKyAgZnNjayAteSAvZGV2L2ZoZDAKKyAgUGFyYWxsZWxpemluZyBmc2NrIHZlcnNpb24gMS4xNCAoOS1KYW4tMTk5OSkKKyAgZTJmc2NrIDEuMTQsIDktSmFuLTE5OTkgZm9yIEVYVDIgRlMgMC41YiwgOTUvMDgvMDkKKyAgL2Rldi9maGQwIGNvbnRhaW5zIGEgZmlsZSBzeXN0ZW0gd2l0aCBlcnJvcnMsIGNoZWNrIGZvcmNlZC4KKyAgUGFzcyAxOiBDaGVja2luZyBpbm9kZXMsIGJsb2NrcywgYW5kIHNpemVzCisgIEVycm9yIHJlYWRpbmcgYmxvY2sgODY4OTQgKEF0dGVtcHQgdG8gcmVhZCBibG9jayBmcm9tIGZpbGVzeXN0ZW0gcmVzdWx0ZWQgaW4gc2hvcnQgcmVhZCkgd2hpbGUgcmVhZGluZyBpbmRpcmVjdCBibG9ja3Mgb2YgaW5vZGUgMTk3ODAuICBJZ25vcmUgZXJyb3I/IHllcworCisgIFBhc3MgMjogQ2hlY2tpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZQorICBFcnJvciByZWFkaW5nIGJsb2NrIDQ5NDA1IChBdHRlbXB0IHRvIHJlYWQgYmxvY2sgZnJvbSBmaWxlc3lzdGVtIHJlc3VsdGVkIGluIHNob3J0IHJlYWQpLiAgSWdub3JlIGVycm9yPyB5ZXMKKworICBEaXJlY3RvcnkgaW5vZGUgMTE4NTgsIGJsb2NrIDAsIG9mZnNldCAwOiBkaXJlY3RvcnkgY29ycnVwdGVkCisgIFNhbHZhZ2U/IHllcworCisgIE1pc3NpbmcgJy4nIGluIGRpcmVjdG9yeSBpbm9kZSAxMTg1OC4KKyAgRml4PyB5ZXMKKworICBNaXNzaW5nICcuLicgaW4gZGlyZWN0b3J5IGlub2RlIDExODU4LgorICBGaXg/IHllcworCisgIFVudGVzdGVkICg0MTI3KSBbMTAwZmU0NGNdOiB0cmFwX2tlcm4uYyBsaW5lIDMxCisKKworCisKKworICBJIG5lZWQgdG8gZ2V0IHRoZSBzaWduYWwgdGhyZWFkIHRvIGRldGFjaCBmcm9tIHBpZCA0MTI3IHNvIHRoYXQgSSBjYW4KKyAgYXR0YWNoIHRvIGl0IHdpdGggZ2RiLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcgaXQgYSBTSUdVU1IxLCB3aGljaCBpcworICBjYXVnaHQgYnkgdGhlIHNpZ25hbCB0aHJlYWQsIHdoaWNoIGRldGFjaGVzIHRoZSBwcm9jZXNzOgorCisKKyAgICAgICBraWxsIC1VU1IxIDQxMjcKKworCisKKworCisgIE5vdyBJIGNhbiBydW4gZ2RiIG9uIGl0OgorCisKKworCisKKworCisKKworCisKKworCisgIH4vbGludXgvMi4zLjI2L3VtIDEwMzQ6IGdkYiBsaW51eAorICBHTlUgZ2RiIDQuMTcuMC4xMSB3aXRoIExpbnV4IHN1cHBvcnQKKyAgQ29weXJpZ2h0IDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIEdEQiBpcyBmcmVlIHNvZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHlvdSBhcmUKKyAgd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAgVHlwZSAic2hvdyBjb3B5aW5nIiB0byBzZWUgdGhlIGNvbmRpdGlvbnMuCisgIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIEdEQi4gIFR5cGUgInNob3cgd2FycmFudHkiIGZvciBkZXRhaWxzLgorICBUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBhcyAiaTM4Ni1yZWRoYXQtbGludXgiLi4uCisgIChnZGIpIGF0dCA0MTI3CisgIEF0dGFjaGluZyB0byBwcm9ncmFtIGAvaG9tZS9kaWtlL2xpbnV4LzIuMy4yNi91bS9saW51eCcsIFBpZCA0MTI3CisgIDB4MTAwNzU4OTEgaW4gX19saWJjX25hbm9zbGVlcCAoKQorCisKKworCisKKyAgVGhlIGJhY2t0cmFjZSBzaG93cyB0aGF0IGl0IHdhcyBpbiBhIHdyaXRlIGFuZCB0aGF0IHRoZSBmYXVsdCBhZGRyZXNzCisgIChhZGRyZXNzIGluIGZyYW1lIDMpIGlzIDB4NTAwMDA4MDAsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBtaWRkbGUgb2YKKyAgdGhlIHNpZ25hbCB0aHJlYWQncyBzdGFjayBwYWdlOgorCisKKyAgICAgICAoZ2RiKSBidAorICAgICAgICMwICAweDEwMDc1ODkxIGluIF9fbGliY19uYW5vc2xlZXAgKCkKKyAgICAgICAjMSAgMHgxMDA3NTg0ZCBpbiBfX3NsZWVwIChzZWNvbmRzPTEwMDAwMDApCisgICAgICAgICAgIGF0IC4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NsZWVwLmM6NzgKKyAgICAgICAjMiAgMHgxMDA2Y2U5YSBpbiBzdG9wICgpIGF0IHVzZXJfdXRpbC5jOjE5MQorICAgICAgICMzICAweDEwMDZiZjg4IGluIHNlZ3YgKGFkZHJlc3M9MTM0MjE3OTMyOCwgaXNfd3JpdGU9MikgYXQgdHJhcF9rZXJuLmM6MzEKKyAgICAgICAjNCAgMHgxMDA2YzYyOCBpbiBzZWd2X2hhbmRsZXIgKHNjPTB4NTAwNmVhZjgpIGF0IHRyYXBfdXNlci5jOjE3NAorICAgICAgICM1ICAweDEwMDZjNjNjIGluIGtlcm5fc2Vndl9oYW5kbGVyIChzaWc9MTEpIGF0IHRyYXBfdXNlci5jOjE4MgorICAgICAgICM2ICA8c2lnbmFsIGhhbmRsZXIgY2FsbGVkPgorICAgICAgICM3ICAweGMwZmQgaW4gPz8gKCkKKyAgICAgICAjOCAgMHgxMDAxNjY0NyBpbiBzeXNfd3JpdGUgKGZkPTMsIGJ1Zj0weDgwYjg4MDAgIlIuIiwgY291bnQ9MTAyNCkKKyAgICAgICAgICAgYXQgcmVhZF93cml0ZS5jOjE1OQorICAgICAgICM5ICAweDEwMDZkNjAzIGluIGV4ZWN1dGVfc3lzY2FsbCAoc3lzY2FsbD00LCBhcmdzPTB4NTAwNmVmMDgpCisgICAgICAgICAgIGF0IHN5c2NhbGxfa2Vybi5jOjI1NAorICAgICAgICMxMCAweDEwMDZhZjg3IGluIHJlYWxseV9kb19zeXNjYWxsIChzaWc9MTIpIGF0IHN5c2NhbGxfdXNlci5jOjM1CisgICAgICAgIzExIDxzaWduYWwgaGFuZGxlciBjYWxsZWQ+CisgICAgICAgIzEyIDB4NDAwZGM4YjAgaW4gPz8gKCkKKyAgICAgICAjMTMgPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4KKyAgICAgICAjMTQgMHg0MDBkYzhiMCBpbiA/PyAoKQorICAgICAgICMxNSAweDgwNTQ1ZmQgaW4gPz8gKCkKKyAgICAgICAjMTYgMHg4MDRkYWFlIGluID8/ICgpCisgICAgICAgIzE3IDB4ODA1NDMzNCBpbiA/PyAoKQorICAgICAgICMxOCAweDgwNGQyM2UgaW4gPz8gKCkKKyAgICAgICAjMTkgMHg4MDQ5NjMyIGluID8/ICgpCisgICAgICAgIzIwIDB4ODA0OTFkMiBpbiA/PyAoKQorICAgICAgICMyMSAweDgwNTk2YjUgaW4gPz8gKCkKKyAgICAgICAoZ2RiKSBwICh2b2lkICopMTM0MjE3OTMyOAorICAgICAgICQzID0gKHZvaWQgKikgMHg1MDAwMDgwMAorCisKKworCisKKyAgR29pbmcgdXAgdGhlIHN0YWNrIHRvIHRoZSBzZWd2X2hhbmRsZXIgZnJhbWUgYW5kIGxvb2tpbmcgYXQgd2hlcmUgaW4KKyAgdGhlIGNvZGUgdGhlIGFjY2VzcyBoYXBwZW5lZCBzaG93cyB0aGF0IGl0IGhhcHBlbmVkIG5lYXIgbGluZSAxMTAgb2YKKyAgYmxvY2tfZGV2LmM6CisKKworCisKKworCisKKworCisgIChnZGIpIHVwCisgICMxICAweDEwMDc1ODRkIGluIF9fc2xlZXAgKHNlY29uZHM9MTAwMDAwMCkKKyAgICAgIGF0IC4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NsZWVwLmM6NzgKKyAgLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2xlZXAuYzo3ODogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgKGdkYikKKyAgIzIgIDB4MTAwNmNlOWEgaW4gc3RvcCAoKSBhdCB1c2VyX3V0aWwuYzoxOTEKKyAgMTkxICAgICAgIHdoaWxlKDEpIHNsZWVwKDEwMDAwMDApOworICAoZ2RiKQorICAjMyAgMHgxMDA2YmY4OCBpbiBzZWd2IChhZGRyZXNzPTEzNDIxNzkzMjgsIGlzX3dyaXRlPTIpIGF0IHRyYXBfa2Vybi5jOjMxCisgIDMxICAgICAgICAgIEtFUk5fVU5URVNURUQoKTsKKyAgKGdkYikKKyAgIzQgIDB4MTAwNmM2MjggaW4gc2Vndl9oYW5kbGVyIChzYz0weDUwMDZlYWY4KSBhdCB0cmFwX3VzZXIuYzoxNzQKKyAgMTc0ICAgICAgIHNlZ3Yoc2MtPmNyMiwgc2MtPmVyciAmIDIpOworICAoZ2RiKSBwICpzYworICAkMSA9IHtncyA9IDAsIF9fZ3NoID0gMCwgZnMgPSAwLCBfX2ZzaCA9IDAsIGVzID0gNDMsIF9fZXNoID0gMCwgZHMgPSA0MywKKyAgICBfX2RzaCA9IDAsIGVkaSA9IDEzNDIxNzkzMjgsIGVzaSA9IDEzNDk3MzQ0MCwgZWJwID0gMTM0MjYzMTQ4NCwKKyAgICBlc3AgPSAxMzQyNjMwODY0LCBlYnggPSAyNTYsIGVkeCA9IDAsIGVjeCA9IDI1NiwgZWF4ID0gMTAyNCwgdHJhcG5vID0gMTQsCisgICAgZXJyID0gNiwgZWlwID0gMjY4NTUwODM0LCBjcyA9IDM1LCBfX2NzaCA9IDAsIGVmbGFncyA9IDY2MDcwLAorICAgIGVzcF9hdF9zaWduYWwgPSAxMzQyNjMwODY0LCBzcyA9IDQzLCBfX3NzaCA9IDAsIGZwc3RhdGUgPSAweDAsIG9sZG1hc2sgPSAwLAorICAgIGNyMiA9IDEzNDIxNzkzMjh9CisgIChnZGIpIHAgKHZvaWQgKikyNjg1NTA4MzQKKyAgJDIgPSAodm9pZCAqKSAweDEwMDFjMmIyCisgIChnZGIpIGkgc3ltICQyCisgIGJsb2NrX3dyaXRlICsgMTA5MCBpbiBzZWN0aW9uIC50ZXh0CisgIChnZGIpIGkgbGluZSAqJDIKKyAgTGluZSAyMDkgb2YgIi9ob21lL2Rpa2UvbGludXgvMi4zLjI2L3VtL2luY2x1ZGUvYXNtL2FyY2gvc3RyaW5nLmgiCisgICAgIHN0YXJ0cyBhdCBhZGRyZXNzIDB4MTAwMWMyYTEgPGJsb2NrX3dyaXRlKzEwNzM+CisgICAgIGFuZCBlbmRzIGF0IDB4MTAwMWMyYmYgPGJsb2NrX3dyaXRlKzExMDM+LgorICAoZ2RiKSBpIGxpbmUgKjB4MTAwMWMyYzAKKyAgTGluZSAxMTAgb2YgImJsb2NrX2Rldi5jIiBzdGFydHMgYXQgYWRkcmVzcyAweDEwMDFjMmJmIDxibG9ja193cml0ZSsxMTAzPgorICAgICBhbmQgZW5kcyBhdCAweDEwMDFjMmUzIDxibG9ja193cml0ZSsxMTM5Pi4KKworCisKKworCisgIExvb2tpbmcgYXQgdGhlIHNvdXJjZSBzaG93cyB0aGF0IHRoZSBmYXVsdCBoYXBwZW5lZCBkdXJpbmcgYSBjYWxsIHRvCisgIGNvcHlfdG9fdXNlciB0byBjb3B5IHRoZSBkYXRhIGludG8gdGhlIGtlcm5lbDoKKworCisgICAgICAgMTA3ICAgICAgICAgICAgIGNvdW50IC09IGNoYXJzOworICAgICAgIDEwOCAgICAgICAgICAgICBjb3B5X2Zyb21fdXNlcihwLGJ1ZixjaGFycyk7CisgICAgICAgMTA5ICAgICAgICAgICAgIHAgKz0gY2hhcnM7CisgICAgICAgMTEwICAgICAgICAgICAgIGJ1ZiArPSBjaGFyczsKKworCisKKworCisgIHAgaXMgdGhlIHBvaW50ZXIgd2hpY2ggbXVzdCBjb250YWluIDB4NTAwMDA4MDAsIHNpbmNlIGJ1ZiBjb250YWlucworICAweDgwYjg4MDAgKGZyYW1lIDggYWJvdmUpLiAgSXQgaXMgZGVmaW5lZCBhczoKKworCisgICAgICAgICAgICAgICAgICAgICAgIHAgPSBvZmZzZXQgKyBiaC0+Yl9kYXRhOworCisKKworCisKKyAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBiaCBpcywgYW5kIGl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGJoIGlzCisgIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBtYXJrX2J1ZmZlcl91cHRvZGF0ZSBhbmQgbWFya19idWZmZXJfZGlydHkgYQorICBmZXcgbGluZXMgbGF0ZXIsIHNvIEkgZG8gYSBsaXR0bGUgZGlzYXNzZW1ibHk6CisKKworCisKKyAgKGdkYikgZGlzYXMgMHgxMDAxYzJiZiAweDEwMDFjMmUwCisgIER1bXAgb2YgYXNzZW1ibGVyIGNvZGUgZnJvbSAweDEwMDFjMmJmIHRvIDB4MTAwMWMyZDA6CisgIDB4MTAwMWMyYmYgPGJsb2NrX3dyaXRlKzExMDM+OiAgYWRkbCAgICVlYXgsMHhjKCVlYnApCisgIDB4MTAwMWMyYzIgPGJsb2NrX3dyaXRlKzExMDY+OiAgbW92bCAgIDB4ZmZmZmZkZDQoJWVicCksJWVkeAorICAweDEwMDFjMmM4IDxibG9ja193cml0ZSsxMTEyPjogIGJ0c2wgICAkMHgwLDB4MTgoJWVkeCkKKyAgMHgxMDAxYzJjZCA8YmxvY2tfd3JpdGUrMTExNz46ICBidHNsICAgJDB4MSwweDE4KCVlZHgpCisgIDB4MTAwMWMyZDIgPGJsb2NrX3dyaXRlKzExMjI+OiAgc2JibCAgICVlY3gsJWVjeAorICAweDEwMDFjMmQ0IDxibG9ja193cml0ZSsxMTI0PjogIHRlc3RsICAlZWN4LCVlY3gKKyAgMHgxMDAxYzJkNiA8YmxvY2tfd3JpdGUrMTEyNj46ICBqbmUgICAgMHgxMDAxYzJlMyA8YmxvY2tfd3JpdGUrMTEzOT4KKyAgMHgxMDAxYzJkOCA8YmxvY2tfd3JpdGUrMTEyOD46ICBwdXNobCAgJDB4MAorICAweDEwMDFjMmRhIDxibG9ja193cml0ZSsxMTMwPjogIHB1c2hsICAlZWR4CisgIDB4MTAwMWMyZGIgPGJsb2NrX3dyaXRlKzExMzE+OiAgY2FsbCAgIDB4MTAwMTgxOWMgPF9fbWFya19idWZmZXJfZGlydHk+CisgIEVuZCBvZiBhc3NlbWJsZXIgZHVtcC4KKworCisKKworCisgIEF0IHRoYXQgcG9pbnQsIGJoIGlzIGluICVlZHggKGFkZHJlc3MgMHgxMDAxYzJkYSksIHdoaWNoIGlzIGNhbGN1bGF0ZWQKKyAgYXQgMHgxMDAxYzJjMiBhcyAlZWJwICsgMHhmZmZmZmRkNCwgc28gSSBmaWd1cmUgZXhhY3RseSB3aGF0IHRoYXQgaXMsCisgIHRha2luZyAlZWJwIGZyb20gdGhlIHNpZ2NvbnRleHRfc3RydWN0IGFib3ZlOgorCisKKyAgICAgICAoZ2RiKSBwICh2b2lkICopMTM0MjYzMTQ4NAorICAgICAgICQ1ID0gKHZvaWQgKikgMHg1MDA2ZWUzYworICAgICAgIChnZGIpIHAgMHg1MDA2ZWUzYysweGZmZmZmZGQ0CisgICAgICAgJDYgPSAxMzQyNjMwOTI4CisgICAgICAgKGdkYikgcCAodm9pZCAqKSQ2CisgICAgICAgJDcgPSAodm9pZCAqKSAweDUwMDZlYzEwCisgICAgICAgKGdkYikgcCAqKCh2b2lkICoqKSQ3KQorICAgICAgICQ4ID0gKHZvaWQgKikgMHg1MDEwMDIwMAorCisKKworCisKKyAgTm93LCBJIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSB0byBzZWUgd2hhdCdzIGluIGl0LCBhbmQgcGFydGljdWxhcmx5LAorICB3aGF0IGl0cyBiX2RhdGEgZmllbGQgY29udGFpbnM6CisKKworICAgICAgIChnZGIpIHAgKigoc3RydWN0IGJ1ZmZlcl9oZWFkICopMHg1MDEwMDIwMCkKKyAgICAgICAkMTMgPSB7Yl9uZXh0ID0gMHg1MDI4OTM4MCwgYl9ibG9ja25yID0gNDk0MDUsIGJfc2l6ZSA9IDEwMjQsIGJfbGlzdCA9IDAsCisgICAgICAgICBiX2RldiA9IDE1ODcyLCBiX2NvdW50ID0ge2NvdW50ZXIgPSAxfSwgYl9yZGV2ID0gMTU4NzIsIGJfc3RhdGUgPSAyNCwKKyAgICAgICAgIGJfZmx1c2h0aW1lID0gMCwgYl9uZXh0X2ZyZWUgPSAweDUwMTAwMWEwLCBiX3ByZXZfZnJlZSA9IDB4NTAxMDAyNjAsCisgICAgICAgICBiX3RoaXNfcGFnZSA9IDB4NTAxMDAxYTAsIGJfcmVxbmV4dCA9IDB4MCwgYl9wcHJldiA9IDB4NTA3ZmNmNTgsCisgICAgICAgICBiX2RhdGEgPSAweDUwMDAwODAwICIiLCBiX3BhZ2UgPSAweDUwMDA0MDAwLAorICAgICAgICAgYl9lbmRfaW8gPSAweDEwMDE3ZjYwIDxlbmRfYnVmZmVyX2lvX3N5bmM+LCBiX2Rldl9pZCA9IDB4MCwKKyAgICAgICAgIGJfcnNlY3RvciA9IDk4ODEwLCBiX3dhaXQgPSB7bG9jayA9IDxvcHRpbWl6ZWQgb3V0IG9yIHplcm8gbGVuZ3RoPiwKKyAgICAgICAgICAgdGFza19saXN0ID0ge25leHQgPSAweDUwMTAwMjQ4LCBwcmV2ID0gMHg1MDEwMDI0OH0sIF9fbWFnaWMgPSAxMzQzMjI2NDQ4LAorICAgICAgICAgICBfX2NyZWF0b3IgPSAwfSwgYl9raW9idWYgPSAweDB9CisKKworCisKKworICBUaGUgYl9kYXRhIGZpZWxkIGlzIGluZGVlZCAweDUwMDAwODAwLCBzbyB0aGUgcXVlc3Rpb24gYmVjb21lcyBob3cKKyAgdGhhdCBoYXBwZW5lZC4gIFRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUgbG9va3MgZmluZSwgc28gdGhpcyBwcm9iYWJseQorICBpcyBub3QgYSBjYXNlIG9mIGRhdGEgY29ycnVwdGlvbi4gIEl0IGhhcHBlbmVkIG9uIHB1cnBvc2Ugc29tZWhvdy4KKworCisgIFRoZSBiX3BhZ2UgZmllbGQgaXMgYSBwb2ludGVyIHRvIHRoZSBwYWdlX3N0cnVjdCByZXByZXNlbnRpbmcgdGhlCisgIDB4NTAwMDAwMDAgcGFnZS4gIExvb2tpbmcgYXQgaXQgc2hvd3MgdGhlIGtlcm5lbCdzIGlkZWEgb2YgdGhlIHN0YXRlCisgIG9mIHRoYXQgcGFnZToKKworCisKKyAgKGdkYikgcCAqJDEzLmJfcGFnZQorICAkMTcgPSB7bGlzdCA9IHtuZXh0ID0gMHg1MDAwNGE1YywgcHJldiA9IDB4MTAwYzUxNzR9LCBtYXBwaW5nID0gMHgwLAorICAgIGluZGV4ID0gMCwgbmV4dF9oYXNoID0gMHgwLCBjb3VudCA9IHtjb3VudGVyID0gMX0sIGZsYWdzID0gMTMyLCBscnUgPSB7CisgICAgICBuZXh0ID0gMHg1MDAwODQ2MCwgcHJldiA9IDB4NTAwMTkzNTB9LCB3YWl0ID0geworICAgICAgbG9jayA9IDxvcHRpbWl6ZWQgb3V0IG9yIHplcm8gbGVuZ3RoPiwgdGFza19saXN0ID0ge25leHQgPSAweDUwMDA0MDI0LAorICAgICAgICBwcmV2ID0gMHg1MDAwNDAyNH0sIF9fbWFnaWMgPSAxMzQyMTkzNzA4LCBfX2NyZWF0b3IgPSAwfSwKKyAgICBwcHJldl9oYXNoID0gMHgwLCBidWZmZXJzID0gMHg1MDEwMDJjMCwgdmlydHVhbCA9IDEzNDIxNzcyODAsCisgICAgem9uZSA9IDB4MTAwYzUxNjB9CisKKworCisKKworICBTb21lIHNhbml0eS1jaGVja2luZzogdGhlIHZpcnR1YWwgZmllbGQgc2hvd3MgdGhlICJ2aXJ0dWFsIiBhZGRyZXNzIG9mCisgIHRoaXMgcGFnZSwgd2hpY2ggaW4gdGhpcyBrZXJuZWwgaXMgdGhlIHNhbWUgYXMgaXRzICJwaHlzaWNhbCIgYWRkcmVzcywKKyAgYW5kIHRoZSBwYWdlX3N0cnVjdCBpdHNlbGYgc2hvdWxkIGJlIG1lbV9tYXBbMF0sIHNpbmNlIGl0IHJlcHJlc2VudHMKKyAgdGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5OgorCisKKworICAgICAgIChnZGIpIHAgKHZvaWQgKikxMzQyMTc3MjgwCisgICAgICAgJDE4ID0gKHZvaWQgKikgMHg1MDAwMDAwMAorICAgICAgIChnZGIpIHAgbWVtX21hcAorICAgICAgICQxOSA9IChtZW1fbWFwX3QgKikgMHg1MDAwNDAwMAorCisKKworCisKKyAgVGhlc2UgY2hlY2sgb3V0IGZpbmUuCisKKworICBOb3cgdG8gY2hlY2sgb3V0IHRoZSBwYWdlX3N0cnVjdCBpdHNlbGYuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZmxhZ3MKKyAgZmllbGQgc2hvd3Mgd2hldGhlciB0aGUgcGFnZSBpcyBjb25zaWRlcmVkIGZyZWUgb3Igbm90OgorCisKKyAgICAgICAoZ2RiKSBwICh2b2lkICopMTMyCisgICAgICAgJDIxID0gKHZvaWQgKikgMHg4NAorCisKKworCisKKyAgVGhlICJyZXNlcnZlZCIgYml0IGlzIHRoZSBoaWdoIGJpdCwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgc2V0LCBzbworICB0aGUga2VybmVsIGNvbnNpZGVycyB0aGUgc2lnbmFsIHN0YWNrIHBhZ2UgdG8gYmUgZnJlZSBhbmQgYXZhaWxhYmxlIHRvCisgIGJlIHVzZWQuCisKKworICBBdCB0aGlzIHBvaW50LCBJIGp1bXAgdG8gY29uY2x1c2lvbnMgYW5kIHN0YXJ0IGxvb2tpbmcgYXQgbXkgZWFybHkKKyAgYm9vdCBjb2RlLCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGF0IHBhZ2UgaXMgc3VwcG9zZWQgdG8gYmUgcmVzZXJ2ZWQuCisKKworICBJbiBteSBzZXR1cF9hcmNoIHByb2NlZHVyZSwgSSBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZSB3aGljaCBsb29rcyBqdXN0CisgIGZpbmU6CisKKworCisgICAgICAgYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtKHN0YXJ0X3BmbiwgZW5kX3BmbiAtIHN0YXJ0X3Bmbik7CisgICAgICAgZnJlZV9ib290bWVtKF9fcGEobG93X3BoeXNtZW0pICsgYm9vdG1hcF9zaXplLCBoaWdoX3BoeXNtZW0gLSBsb3dfcGh5c21lbSk7CisKKworCisKKworICBUd28gc3RhY2sgcGFnZXMgaGF2ZSBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkLCBhbmQgbG93X3BoeXNtZW0gcG9pbnRzIHRvCisgIHRoZSB0aGlyZCBwYWdlLCB3aGljaCBpcyB0aGUgYmVnaW5uaW5nIG9mIGZyZWUgbWVtb3J5LgorICBUaGUgaW5pdF9ib290bWVtIGNhbGwgZGVjbGFyZXMgdGhlIGVudGlyZSBtZW1vcnkgdG8gdGhlIGJvb3QgbWVtb3J5CisgIG1hbmFnZXIsIHdoaWNoIG1hcmtzIGl0IGFsbCByZXNlcnZlZC4gIFRoZSBmcmVlX2Jvb3RtZW0gY2FsbCBmcmVlcyB1cAorICBhbGwgb2YgaXQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IHR3byBwYWdlcy4gIFRoaXMgbG9va3MgY29ycmVjdCB0byBtZS4KKworCisgIFNvLCBJIGRlY2lkZSB0byBzZWUgaW5pdF9ib290bWVtIHJ1biBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgaXMgbWFya2luZworICB0aG9zZSBmaXJzdCB0d28gcGFnZXMgYXMgcmVzZXJ2ZWQuICBJIG5ldmVyIGdldCB0aGF0IGZhci4KKworCisgIFN0ZXBwaW5nIGludG8gaW5pdF9ib290bWVtLCBhbmQgbG9va2luZyBhdCBib290bWVtX21hcCBiZWZvcmUgbG9va2luZworICBhdCB3aGF0IGl0IGNvbnRhaW5zIHNob3dzIHRoZSBmb2xsb3dpbmc6CisKKworCisgICAgICAgKGdkYikgcCBib290bWVtX21hcAorICAgICAgICQzID0gKHZvaWQgKikgMHg1MDAwMDAwMAorCisKKworCisKKyAgQWhhISAgVGhlIGxpZ2h0IGRhd25zLiAgVGhhdCBmaXJzdCBwYWdlIGlzIGRvaW5nIGRvdWJsZSBkdXR5IGFzIGEKKyAgc3RhY2sgYW5kIGFzIHRoZSBib290IG1lbW9yeSBtYXAuICBUaGUgbGFzdCB0aGluZyB0aGF0IHRoZSBib290IG1lbW9yeQorICBtYW5hZ2VyIGRvZXMgaXMgdG8gZnJlZSB0aGUgcGFnZXMgdXNlZCBieSBpdHMgbWVtb3J5IG1hcCwgc28gdGhpcyBwYWdlCisgIGlzIGdldHRpbmcgZnJlZWQgZXZlbiBpdHMgbWFya2VkIGFzIHJlc2VydmVkLgorCisKKyAgVGhlIGZpeCB3YXMgdG8gaW5pdGlhbGl6ZSB0aGUgYm9vdCBtZW1vcnkgbWFuYWdlciBiZWZvcmUgYWxsb2NhdGluZworICB0aG9zZSB0d28gc3RhY2sgcGFnZXMsIGFuZCB0aGVuIGFsbG9jYXRlIHRoZW0gdGhyb3VnaCB0aGUgYm9vdCBtZW1vcnkKKyAgbWFuYWdlci4gIEFmdGVyIGRvaW5nIHRoaXMsIGFuZCBmaXhpbmcgYSBjb3VwbGUgb2Ygc3Vic2VxdWVudCBidWdsZXRzLAorICB0aGUgc3RhY2sgY29ycnVwdGlvbiBwcm9ibGVtIGRpc2FwcGVhcmVkLgorCisKKworCisKKyAgMQgxMwgzLgguICBXCFdoCGhhCGF0CHQgdAh0bwhvIGQIZG8IbyB3CHdoCGhlCGVuCG4gVQhVTQhNTAhMIGQIZG8Ib2UIZXMIc24IbicIJ3QIdCB3CHdvCG9yCHJrCGsKKworCisKKworICAxCDEzCDMuCC4xCDEuCC4gIFMIU3QIdHIIcmEIYW4IbmcIZ2UIZSBjCGNvCG9tCG1wCHBpCGlsCGxhCGF0CHRpCGlvCG9uCG4gZQhlcghycghybwhvcghycwhzIHcId2gIaGUIZW4IbiB5CHlvCG91CHUgYghidQh1aQhpbAhsZAhkIGYIZnIIcm8Ib20IbSBzCHNvCG91CHVyCHJjCGNlCGUKKworICBBcyBvZiB0ZXN0MTEsIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlICJBUkNIPXVtIiBpbiB0aGUgZW52aXJvbm1lbnQgb3IKKyAgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIGZvciBhbGwgc3RlcHMgaW4gYnVpbGRpbmcgVU1MLCBpbmNsdWRpbmcKKyAgY2xlYW4sIGRpc3RjbGVhbiwgb3IgbXJwcm9wZXIsIGNvbmZpZywgbWVudWNvbmZpZywgb3IgeGNvbmZpZywgZGVwLAorICBhbmQgbGludXguICBJZiB5b3UgZm9yZ2V0IGZvciBhbnkgb2YgdGhlbSwgdGhlIGkzODYgYnVpbGQgc2VlbXMgdG8KKyAgY29udGFtaW5hdGUgdGhlIFVNTCBidWlsZC4gIElmIHRoaXMgaGFwcGVucywgc3RhcnQgZnJvbSBzY3JhdGNoIHdpdGgKKworCisgICAgICAgaG9zdCUKKyAgICAgICBtYWtlIG1ycHJvcGVyIEFSQ0g9dW0KKworCisKKworICBhbmQgcmVwZWF0IHRoZSBidWlsZCBwcm9jZXNzIHdpdGggQVJDSD11bSBvbiBhbGwgdGhlIHN0ZXBzLgorCisKKyAgU2VlIGBgQ29tcGlsaW5nIHRoZSBrZXJuZWwgYW5kIG1vZHVsZXMnJyAgZm9yIG1vcmUgZGV0YWlscy4KKworCisgIEFub3RoZXIgY2F1c2Ugb2Ygc3RyYW5nZSBjb21waWxhdGlvbiBlcnJvcnMgaXMgYnVpbGRpbmcgVU1MIGluCisgIC91c3Ivc3JjL2xpbnV4LiAgSWYgeW91IGRvIHRoaXMsIHRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcworICBjbGVhbiB1cCB0aGUgbWVzcyB5b3UgbWFkZS4gIFRoZSAvdXNyL3NyYy9saW51eC9hc20gbGluayB3aWxsIG5vdworICBwb2ludCB0byAvdXNyL3NyYy9saW51eC9hc20tdW0uICBNYWtlIGl0IHBvaW50IGJhY2sgdG8KKyAgL3Vzci9zcmMvbGludXgvYXNtLWkzODYuICBUaGVuLCBtb3ZlIHlvdXIgVU1MIHBvb2wgc29tZXBsYWNlIGVsc2UgYW5kCisgIGJ1aWxkIGl0IHRoZXJlLiAgQWxzbyBzZWUgYmVsb3csIHdoZXJlIGEgbW9yZSBzcGVjaWZpYyBzZXQgb2Ygc3ltcHRvbXMKKyAgaXMgZGVzY3JpYmVkLgorCisKKworICAxCDEzCDMuCC4yCDIuCC4gIFUIVU0ITUwITCBoCGhhCGFuCG5nCGdzCHMgbwhvbghuIGIIYm8Ib28Ib3QIdCBhCGFmCGZ0CHRlCGVyCHIgbQhtbwhvdQh1bghudAh0aQhpbghuZwhnIGQIZGUIZXYIdmYIZnMIcworCisgIFRoZSBib290IGxvb2tzIGxpa2UgdGhpczoKKworCisgICAgICAgVkZTOiBNb3VudGVkIHJvb3QgKGV4dDIgZmlsZXN5c3RlbSkgcmVhZG9ubHkuCisgICAgICAgTW91bnRlZCBkZXZmcyBvbiAvZGV2CisKKworCisKKyAgWW91J3JlIHByb2JhYmx5IHJ1bm5pbmcgYSByZWNlbnQgZGlzdHJpYnV0aW9uIG9uIGFuIG9sZCBtYWNoaW5lLiAgSQorICBzYXcgdGhpcyB3aXRoIHRoZSBSSDcuMSBmaWxlc3lzdGVtIHJ1bm5pbmcgb24gYSBQZW50aXVtLiAgVGhlIHNoYXJlZAorICBsaWJyYXJ5IGxvYWRlciwgbGQuc28sIHdhcyBleGVjdXRpbmcgYW4gaW5zdHJ1Y3Rpb24gKGNtb3ZlKSB3aGljaCB0aGUKKyAgUGVudGl1bSBkaWRuJ3Qgc3VwcG9ydC4gIFRoYXQgaW5zdHJ1Y3Rpb24gd2FzIGFwcGFyZW50bHkgYWRkZWQgbGF0ZXIuCisgIElmIHlvdSBydW4gVU1MIHVuZGVyIHRoZSBkZWJ1Z2dlciwgeW91J2xsIHNlZSB0aGUgaGFuZyBjYXVzZWQgYnkgb25lCisgIGluc3RydWN0aW9uIGNhdXNpbmcgYW4gaW5maW5pdGUgU0lHSUxMIHN0cmVhbS4KKworCisgIFRoZSBmaXggaXMgdG8gYm9vdCBVTUwgb24gYW4gb2xkZXIgZmlsZXN5c3RlbS4KKworCisKKyAgMQgxMwgzLgguMwgzLgguICBBCEEgdgh2YQhhcghyaQhpZQhldAh0eQh5IG8Ib2YIZiBwCHBhCGFuCG5pCGljCGNzCHMgYQhhbghuZAhkIGgIaGEIYW4IbmcIZ3MIcyB3CHdpCGl0CHRoCGggLwgvdAh0bQhtcAhwIG8Ib24IbiBhCGEgcghyZQhlaQhpcwhzZQhlcghyZghmcwhzICBmCGZpCGlsCGxlCGVzCHN5CHlzCHMtCC0KKyAgdAh0ZQhlbQhtCisKKyAgSSBzYXcgdGhpcyBvbiByZWlzZXJmcyAzLjUuMjEgYW5kIGl0IHNlZW1zIHRvIGJlIGZpeGVkIGluIDMuNS4yNy4KKyAgUGFuaWNzIHByZWNlZGVkIGJ5CisKKworICAgICAgIERldGFjaGluZyBwaWQgbm5ubgorCisKKworICBhcmUgZGlhZ25vc3RpYyBvZiB0aGlzIHByb2JsZW0uICBUaGlzIGlzIGEgcmVpc2VyZnMgYnVnIHdoaWNoIGNhdXNlcyBhCisgIHRocmVhZCB0byBvY2Nhc2lvbmFsbHkgcmVhZCBzdGFsZSBkYXRhIGZyb20gYSBtbWFwcGVkIHBhZ2Ugc2hhcmVkIHdpdGgKKyAgYW5vdGhlciB0aHJlYWQuICBUaGUgZml4IGlzIHRvIHVwZ3JhZGUgdGhlIGZpbGVzeXN0ZW0gb3IgdG8gaGF2ZSAvdG1wCisgIGJlIGFuIGV4dDIgZmlsZXN5c3RlbS4KKworCisKKyAgMQgxMwgzLgguNAg0LgguICBUCFRoCGhlCGUgYwhjbwhvbQhtcAhwaQhpbAhsZQhlIGYIZmEIYWkIaWwIbHMIcyB3CHdpCGl0CHRoCGggZQhlcghycghybwhvcghycwhzIGEIYWIIYm8Ib3UIdXQIdCBjCGNvCG9uCG5mCGZsCGxpCGljCGN0CHRpCGluCG5nCGcgdAh0eQh5cAhwZQhlcwhzIGYIZm8Ib3IIcgorICAnCCdvCG9wCHBlCGVuCG4nCCcsCCwgJwgnZAhkdQh1cAhwJwgnLAgsIGEIYW4IbmQIZCAnCCd3CHdhCGFpCGl0CHRwCHBpCGlkCGQnCCcKKworICBUaGlzIGhhcHBlbnMgd2hlbiB5b3UgYnVpbGQgaW4gL3Vzci9zcmMvbGludXguICBUaGUgVU1MIGJ1aWxkIG1ha2VzCisgIHRoZSBpbmNsdWRlL2FzbSBsaW5rIHBvaW50IHRvIGluY2x1ZGUvYXNtLXVtLiAgL3Vzci9pbmNsdWRlL2FzbSBwb2ludHMKKyAgdG8gL3Vzci9zcmMvbGludXgvaW5jbHVkZS9hc20sIHNvIHdoZW4gdGhhdCBsaW5rIGdldHMgbW92ZWQsIGZpbGVzCisgIHdoaWNoIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXNtLWkzODYgdmVyc2lvbnMgb2YgaGVhZGVycyBnZXQgdGhlCisgIGluY29tcGF0aWJsZSBhc20tdW0gdmVyc2lvbnMuICBUaGUgZml4IGlzIHRvIG1vdmUgdGhlIGluY2x1ZGUvYXNtIGxpbmsKKyAgYmFjayB0byBpbmNsdWRlL2FzbS1pMzg2IGFuZCB0byBkbyBVTUwgYnVpbGRzIHNvbWVwbGFjZSBlbHNlLgorCisKKworICAxCDEzCDMuCC41CDUuCC4gIFUIVU0ITUwITCBkCGRvCG9lCGVzCHNuCG4nCCd0CHQgdwh3bwhvcghyawhrIHcId2gIaGUIZW4IbiAvCC90CHRtCG1wCHAgaQhpcwhzIGEIYW4IbiBOCE5GCEZTCFMgZghmaQhpbAhsZQhlcwhzeQh5cwhzdAh0ZQhlbQhtCisKKyAgVGhpcyBzZWVtcyB0byBiZSBhIHNpbWlsYXIgc2l0dWF0aW9uIHdpdGggdGhlIHJlc2llcmZzIHByb2JsZW0gYWJvdmUuCisgIFNvbWUgdmVyc2lvbnMgb2YgTkZTIHNlZW1zIG5vdCB0byBoYW5kbGUgbW1hcCBjb3JyZWN0bHksIHdoaWNoIFVNTAorICBkZXBlbmRzIG9uLiAgVGhlIHdvcmthcm91bmQgaXMgaGF2ZSAvdG1wIGJlIG5vbi1ORlMgZGlyZWN0b3J5LgorCisKKyAgMQgxMwgzLgguNgg2LgguICBVCFVNCE1MCEwgaAhoYQhhbghuZwhncwhzIG8Ib24IbiBiCGJvCG9vCG90CHQgdwh3aAhoZQhlbghuIGMIY28Ib20IbXAIcGkIaWwIbGUIZWQIZCB3CHdpCGl0CHRoCGggZwhncAhwcghybwhvZghmIHMIc3UIdXAIcHAIcG8Ib3IIcnQIdAorCisgIElmIHlvdSBidWlsZCBVTUwgd2l0aCBncHJvZiBzdXBwb3J0IGFuZCwgZWFybHkgaW4gdGhlIGJvb3QsIGl0IGRvZXMKKyAgdGhpcworCisKKyAgICAgICBrZXJuZWwgQlVHIGF0IHBhZ2VfYWxsb2MuYzoxMDAhCisKKworCisKKyAgeW91IGhhdmUgYSBidWdneSBnY2MuICBZb3UgY2FuIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIGJ5IHJlbW92aW5nCisgIFVNX0ZBU1RDQUxMIGZyb20gQ0ZMQUdTIGluIGFyY2gvdW0vTWFrZWZpbGUtaTM4Ni4gIFRoaXMgd2lsbCBvcGVuIHVwCisgIGFub3RoZXIgYnVnLCBidXQgdGhhdCBvbmUgaXMgZmFpcmx5IGhhcmQgdG8gcmVwcm9kdWNlLgorCisKKworICAxCDEzCDMuCC43CDcuCC4gIHMIc3kIeXMIc2wIbG8Ib2cIZ2QIZCBkCGRpCGllCGVzCHMgdwh3aQhpdAh0aAhoIGEIYSBTCFNJCElHCEdUCFRFCEVSCFJNCE0gbwhvbghuIHMIc3QIdGEIYXIIcnQIdHUIdXAIcAorCisgIFRoZSBleGFjdCBib290IGVycm9yIGRlcGVuZHMgb24gdGhlIGRpc3RyaWJ1dGlvbiB0aGF0IHlvdSdyZSBib290aW5nLAorICBidXQgRGViaWFuIHByb2R1Y2VzIHRoaXM6CisKKworICAgICAgIC9ldGMvcmMyLmQvUzEwc3lza2xvZ2Q6IGxpbmUgNDk6ICAgIDkzIFRlcm1pbmF0ZWQKKyAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3N5c2xvZ2QgLS0gJFNZU0xPR0QKKworCisKKworICBUaGlzIGlzIGEgc3lzbG9nZCBidWcuICBUaGVyZSdzIGEgcmFjZSBiZXR3ZWVuIGEgcGFyZW50IHByb2Nlc3MKKyAgaW5zdGFsbGluZyBhIHNpZ25hbCBoYW5kbGVyIGFuZCBpdHMgY2hpbGQgc2VuZGluZyB0aGUgc2lnbmFsLiAgU2VlCisgIHRoaXMgdW1sLWRldmVsIHBvc3QgPGh0dHA6Ly93d3cuZ2VvY3Jhd2xlci5jb20vbGlzdHMvMy9Tb3VyY2UtCisgIEZvcmdlLzcwOS8wLzY2MTI4MDE+ICBmb3IgdGhlIGRldGFpbHMuCisKKworCisgIDEIMTMIMy4ILjgIOC4ILiAgVAhUVQhVTghOLwgvVAhUQQhBUAhQIG4IbmUIZXQIdHcId28Ib3IIcmsIa2kIaW4IbmcIZyBkCGRvCG9lCGVzCHNuCG4nCCd0CHQgdwh3bwhvcghyawhrIG8Ib24IbiBhCGEgMggyLgguNAg0IGgIaG8Ib3MIc3QIdAorCisgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBwcm9ibGVtcyB3aGljaCB3ZXJlCisgIDxodHRwOi8vd3d3Lmdlb2NyYXdsZXIuY29tL2xpc3RzLzMvU291cmNlRm9yZ2UvNTk3LzAvPiBuYW1lPSJwb2ludGVkCisgIG91dCI+ICBieSBUaW0gUm9iaW5zb24gPHRpbXJvIGF0IHRya3IgZG90IG5ldD4KKworICArCG8gIEl0IGRvZXNuJ3Qgd29yayBvbiBob3N0cyBydW5uaW5nIDIuNC43IChvciB0aGVyZWFib3V0cykgb3IgZWFybGllci4KKyAgICAgVGhlIGZpeCBpcyB0byB1cGdyYWRlIHRvIHNvbWV0aGluZyBtb3JlIHJlY2VudCBhbmQgdGhlbiByZWFkIHRoZQorICAgICBuZXh0IGl0ZW0uCisKKyAgKwhvICBJZiB5b3Ugc2VlCisKKworICAgICAgIEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUKKworCisKKyAgd2hlbiB5b3UgYnJpbmcgdXAgdGhlIGRldmljZSBpbnNpZGUgVU1MLCB5b3UgaGF2ZSBhIGhlYWRlciBtaXNtYXRjaAorICBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBrZXJuZWwgYW5kIHRoZSB1cGdyYWRlZCBvbmUuICBNYWtlIC91c3Ivc3JjL2xpbnV4CisgIHBvaW50IGF0IHRoZSBuZXcgaGVhZGVycy4gIFRoaXMgd2lsbCBvbmx5IGJlIGEgcHJvYmxlbSBpZiB5b3UgYnVpbGQKKyAgdW1sX25ldCB5b3Vyc2VsZi4KKworCisKKyAgMQgxMwgzLgguOQg5LgguICBZCFlvCG91CHUgYwhjYQhhbghuIG4IbmUIZXQIdHcId28Ib3IIcmsIayB0CHRvCG8gdAh0aAhoZQhlIGgIaG8Ib3MIc3QIdCBiCGJ1CHV0CHQgbghubwhvdAh0IHQIdG8IbyBvCG90CHRoCGhlCGVyCHIgbQhtYQhhYwhjaAhoaQhpbghuZQhlcwhzIG8Ib24IbiB0CHRoCGhlCGUKKyAgbghuZQhldAh0CisKKyAgSWYgeW91IGNhbiBjb25uZWN0IHRvIHRoZSBob3N0LCBhbmQgdGhlIGhvc3QgY2FuIGNvbm5lY3QgdG8gVU1MLCBidXQKKyAgeW91IGNhbiBub3QgY29ubmVjdCB0byBhbnkgb3RoZXIgbWFjaGluZXMsIHRoZW4geW91IG1heSBuZWVkIHRvIGVuYWJsZQorICBJUCBNYXNxdWVyYWRpbmcgb24gdGhlIGhvc3QuICBVc3VhbGx5IHRoaXMgaXMgb25seSBleHBlcmllbmNlZCB3aGVuCisgIHVzaW5nIHByaXZhdGUgSVAgYWRkcmVzc2VzICgxOTIuMTY4LngueCBvciAxMC54LngueCkgZm9yIGhvc3QvVU1MCisgIG5ldHdvcmtpbmcsIHJhdGhlciB0aGFuIHRoZSBwdWJsaWMgYWRkcmVzcyBzcGFjZSB0aGF0IHlvdXIgaG9zdCBpcworICBjb25uZWN0ZWQgdG8uICBVTUwgZG9lcyBub3QgZW5hYmxlIElQIE1hc3F1ZXJhZGluZywgc28geW91IHdpbGwgbmVlZAorICB0byBjcmVhdGUgYSBzdGF0aWMgcnVsZSB0byBlbmFibGUgaXQ6CisKKworICAgICAgIGhvc3QlCisgICAgICAgaXB0YWJsZXMgLXQgbmF0IC1BIFBPU1RST1VUSU5HIC1vIGV0aDAgLWogTUFTUVVFUkFERQorCisKKworCisgIFJlcGxhY2UgZXRoMCB3aXRoIHRoZSBpbnRlcmZhY2UgdGhhdCB5b3UgdXNlIHRvIHRhbGsgdG8gdGhlIHJlc3Qgb2YKKyAgdGhlIHdvcmxkLgorCisKKyAgRG9jdW1lbnRhdGlvbiBvbiBJUCBNYXNxdWVyYWRpbmcsIGFuZCBTTkFULCBjYW4gYmUgZm91bmQgYXQKKyAgd3d3Lm5ldGZpbHRlci5vcmcgIDxodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmc+IC4KKworCisgIElmIHlvdSBjYW4gcmVhY2ggdGhlIGxvY2FsIG5ldCwgYnV0IG5vdCB0aGUgb3V0c2lkZSBJbnRlcm5ldCwgdGhlbgorICB0aGF0IGlzIHVzdWFsbHkgYSByb3V0aW5nIHByb2JsZW0uICBUaGUgVU1MIG5lZWRzIGEgZGVmYXVsdCByb3V0ZToKKworCisgICAgICAgVU1MIworICAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3IGdhdGV3YXkgSVAKKworCisKKworICBUaGUgZ2F0ZXdheSBJUCBjYW4gYmUgYW55IG1hY2hpbmUgb24gdGhlIGxvY2FsIG5ldCB0aGF0IGtub3dzIGhvdyB0bworICByZWFjaCB0aGUgb3V0c2lkZSB3b3JsZC4gIFVzdWFsbHksIHRoaXMgaXMgdGhlIGhvc3Qgb3IgdGhlIGxvY2FsIG5ldC0KKyAgd29yaydzIGdhdGV3YXkuCisKKworICBPY2Nhc2lvbmFsbHksIHdlIGhlYXIgZnJvbSBzb21lb25lIHdobyBjYW4gcmVhY2ggc29tZSBtYWNoaW5lcywgYnV0CisgIG5vdCBvdGhlcnMgb24gdGhlIHNhbWUgbmV0LCBvciB3aG8gY2FuIHJlYWNoIHNvbWUgcG9ydHMgb24gb3RoZXIKKyAgbWFjaGluZXMsIGJ1dCBub3Qgb3RoZXJzLiAgVGhlc2UgYXJlIHVzdWFsbHkgY2F1c2VkIGJ5IHN0cmFuZ2UKKyAgZmlyZXdhbGxpbmcgc29tZXdoZXJlIGJldHdlZW4gdGhlIFVNTCBhbmQgdGhlIG90aGVyIGJveC4gIFlvdSB0cmFjaworICB0aGlzIGRvd24gYnkgcnVubmluZyB0Y3BkdW1wIG9uIGV2ZXJ5IGludGVyZmFjZSB0aGUgcGFja2V0cyB0cmF2ZWwKKyAgb3ZlciBhbmQgc2VlIHdoZXJlIHRoZXkgZGlzYXBwZWFyLiAgV2hlbiB5b3UgZmluZCBhIG1hY2hpbmUgdGhhdCB0YWtlcworICB0aGUgcGFja2V0cyBpbiwgYnV0IGRvZXMgbm90IHNlbmQgdGhlbSBvbndhcmQsIHRoYXQncyB0aGUgY3VscHJpdC4KKworCisKKyAgMQgxMwgzLgguMQgxMAgwLgguICBJCEkgaAhoYQhhdgh2ZQhlIG4Ibm8IbyByCHJvCG9vCG90CHQgYQhhbghuZAhkIEkISSB3CHdhCGFuCG50CHQgdAh0bwhvIHMIc2MIY3IIcmUIZWEIYW0IbQorCisgIFRoYW5rcyB0byBCaXJnaXQgV2FobGljaCBmb3IgdGVsbGluZyBtZSBhYm91dCB0aGlzIHN0cmFuZ2Ugb25lLiAgSXQKKyAgdHVybnMgb3V0IHRoYXQgdGhlcmUncyBhIGxpbWl0IG9mIHNpeCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gdGhlCisgIGtlcm5lbCBjb21tYW5kIGxpbmUuICBXaGVuIHRoYXQgbGltaXQgaXMgcmVhY2hlZCBvciBleGNlZWRlZCwgYXJndW1lbnQKKyAgcHJvY2Vzc2luZyBzdG9wcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgJ3Jvb3Q9JyBhcmd1bWVudCB0aGF0IFVNTAorICB1c3VhbGx5IGFkZHMgaXMgbm90IHNlZW4uICBTbywgdGhlIGZpbGVzeXN0ZW0gaGFzIG5vIGlkZWEgd2hhdCB0aGUKKyAgcm9vdCBkZXZpY2UgaXMsIHNvIGl0IHBhbmljcy4KKworCisgIFRoZSBmaXggaXMgdG8gcHV0IGxlc3Mgc3R1ZmYgb24gdGhlIGNvbW1hbmQgbGluZS4gIEdsb21taW5nIGFsbCB5b3VyCisgIHNldHVwIHZhcmlhYmxlcyBpbnRvIG9uZSBpcyBwcm9iYWJseSB0aGUgYmVzdCB3YXkgdG8gZ28uCisKKworCisgIDEIMTMIMy4ILjEIMTEIMS4ILiAgVQhVTQhNTAhMIGIIYnUIdWkIaWwIbGQIZCBjCGNvCG9uCG5mCGZsCGxpCGljCGN0CHQgYghiZQhldAh0dwh3ZQhlZQhlbghuIHAIcHQIdHIIcmEIYWMIY2UIZS4ILmgIaCBhCGFuCG5kCGQgdQh1YwhjbwhvbghudAh0ZQhleAh4dAh0LgguaAhoCisKKyAgT24gc29tZSBvbGRlciBzeXN0ZW1zLCAvdXNyL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGFuZAorICAvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmggZGVmaW5lIHRoZSBzYW1lIG5hbWVzLiAgU28sIHdoZW4gdGhleSdyZQorICBpbmNsdWRlZCB0b2dldGhlciwgdGhlIGRlZmluZXMgZnJvbSBvbmUgY29tcGxldGVseSBtZXNzIHVwIHRoZSBwYXJzaW5nCisgIG9mIHRoZSBvdGhlciwgcHJvZHVjaW5nIGVycm9ycyBsaWtlOgorICAgICAgIC91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaDo0NzogcGFyc2UgZXJyb3IgYmVmb3JlCisgICAgICAgYDEwJworCisKKworCisgIHBsdXMgYSBwaWxlIG9mIHdhcm5pbmdzLgorCisKKyAgVGhpcyBpcyBhIGxpYmMgYm90Y2gsIHdoaWNoIGhhcyBzaW5jZSBiZWVuIGZpeGVkLCBhbmQgSSBkb24ndCBzZWUgYW55CisgIHdheSBhcm91bmQgaXQgYmVzaWRlcyB1cGdyYWRpbmcuCisKKworCisgIDEIMTMIMy4ILjEIMTIIMi4ILiAgVAhUaAhoZQhlIFUIVU0ITUwITCBCCEJvCG9nCGdvCG9NCE1pCGlwCHBzCHMgaQhpcwhzIGUIZXgIeGEIYWMIY3QIdGwIbHkIeSBoCGhhCGFsCGxmCGYgdAh0aAhoZQhlIGgIaG8Ib3MIc3QIdCcIJ3MIcyBCCEJvCG9nCGdvCG9NCE1pCGlwCHBzCHMKKworICBPbiBpMzg2IGtlcm5lbHMsIHRoZXJlIGFyZSB0d28gd2F5cyBvZiBydW5uaW5nIHRoZSBsb29wIHRoYXQgaXMgdXNlZAorICB0byBjYWxjdWxhdGUgdGhlIEJvZ29NaXBzIHJhdGluZywgdXNpbmcgdGhlIFRTQyBpZiBpdCdzIHRoZXJlIG9yIHVzaW5nCisgIGEgb25lLWluc3RydWN0aW9uIGxvb3AuICBUaGUgVFNDIHByb2R1Y2VzIHR3aWNlIHRoZSBCb2dvTWlwcyBhcyB0aGUKKyAgbG9vcC4gIFVNTCB1c2VzIHRoZSBsb29wLCBzaW5jZSBpdCBoYXMgbm90aGluZyByZXNlbWJsaW5nIGEgVFNDLCBhbmQKKyAgd2lsbCBnZXQgYWxtb3N0IGV4YWN0bHkgdGhlIHNhbWUgQm9nb01pcHMgYXMgYSBob3N0IHVzaW5nIHRoZSBsb29wLgorICBIb3dldmVyLCBvbiBhIGhvc3Qgd2l0aCBhIFRTQywgaXRzIEJvZ29NaXBzIHdpbGwgYmUgZG91YmxlIHRoZSBsb29wCisgIEJvZ29NaXBzLCBhbmQgdGhlcmVmb3JlIGRvdWJsZSB0aGUgVU1MIEJvZ29NaXBzLgorCisKKworICAxCDEzCDMuCC4xCDEzCDMuCC4gIFcIV2gIaGUIZW4IbiB5CHlvCG91CHUgcghydQh1bghuIFUIVU0ITUwITCwILCBpCGl0CHQgaQhpbQhtbQhtZQhlZAhkaQhpYQhhdAh0ZQhlbAhseQh5IHMIc2UIZWcIZ2YIZmEIYXUIdWwIbHQIdHMIcworCisgIElmIHRoZSBob3N0IGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgMkcvMkcgYWRkcmVzcyBzcGFjZSBzcGxpdCwgdGhhdCdzCisgIHdoeS4gIFNlZSBgYFVNTCBvbiAyRy8yRyBob3N0cycnICBmb3IgdGhlIGRldGFpbHMgb24gZ2V0dGluZyBVTUwgdG8KKyAgcnVuIG9uIHlvdXIgaG9zdC4KKworCisKKyAgMQgxMwgzLgguMQgxNAg0LgguICB4CHh0CHRlCGVyCHJtCG1zCHMgYQhhcAhwcAhwZQhlYQhhcghyLAgsIHQIdGgIaGUIZW4IbiBpCGltCG1tCG1lCGVkCGRpCGlhCGF0CHRlCGVsCGx5CHkgZAhkaQhpcwhzYQhhcAhwcAhwZQhlYQhhcghyCisKKyAgSWYgeW91J3JlIHJ1bm5pbmcgYW4gdXAgdG8gZGF0ZSBrZXJuZWwgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZgorICB1bWxfdXRpbGl0aWVzLCB0aGUgcG9ydC1oZWxwZXIgcHJvZ3JhbSB3aWxsIG5vdCB3b3JrIHByb3Blcmx5LCBzbworICB4dGVybXMgd2lsbCBleGl0IHN0cmFpZ2h0IGFmdGVyIHRoZXkgYXBwZWFyLiBUaGUgc29sdXRpb24gaXMgdG8KKyAgdXBncmFkZSB0byB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdW1sX3V0aWxpdGllcy4gIFVzdWFsbHkgdGhpcyBwcm9ibGVtCisgIG9jY3VycyB3aGVuIHlvdSBoYXZlIGluc3RhbGxlZCBhIHBhY2thZ2VkIHJlbGVhc2Ugb2YgVU1MIHRoZW4gY29tcGlsZWQKKyAgeW91ciBvd24gZGV2ZWxvcG1lbnQga2VybmVsIHdpdGhvdXQgdXBncmFkaW5nIHRoZSB1bWxfdXRpbGl0aWVzIGZyb20KKyAgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uCisKKworCisgIDEIMTMIMy4ILjEIMTUINS4ILiAgQQhBbghueQh5IG8Ib3QIdGgIaGUIZXIIciBwCHBhCGFuCG5pCGljCGMsCCwgaAhoYQhhbghuZwhnLAgsIG8Ib3IIciBzCHN0CHRyCHJhCGFuCG5nCGdlCGUgYghiZQhlaAhoYQhhdgh2aQhpbwhvcghyCisKKyAgSWYgeW91J3JlIHNlZWluZyB0cnVseSBzdHJhbmdlIGJlaGF2aW9yLCBzdWNoIGFzIGhhbmdzIG9yIHBhbmljcyB0aGF0CisgIGhhcHBlbiBpbiByYW5kb20gcGxhY2VzLCBvciB5b3UgdHJ5IHJ1bm5pbmcgdGhlIGRlYnVnZ2VyIHRvIHNlZSB3aGF0J3MKKyAgaGFwcGVuaW5nIGFuZCBpdCBhY3RzIHN0cmFuZ2VseSwgdGhlbiBpdCBjb3VsZCBiZSBhIHByb2JsZW0gaW4gdGhlCisgIGhvc3Qga2VybmVsLiAgSWYgeW91J3JlIG5vdCBydW5uaW5nIGEgc3RvY2sgTGludXMgb3IgLWFjIGtlcm5lbCwgdGhlbgorICB0cnkgdGhhdC4gIEFuIGVhcmx5IHZlcnNpb24gb2YgdGhlIHByZWVtcHRpb24gcGF0Y2ggYW5kIGEgMi40LjEwIFN1U0UKKyAga2VybmVsIGhhdmUgY2F1c2VkIHZlcnkgc3RyYW5nZSBwcm9ibGVtcyBpbiBVTUwuCisKKworICBPdGhlcndpc2UsIGxldCBtZSBrbm93IGFib3V0IGl0LiAgU2VuZCBhIG1lc3NhZ2UgdG8gb25lIG9mIHRoZSBVTUwKKyAgbWFpbGluZyBsaXN0cyAtIGVpdGhlciB0aGUgZGV2ZWxvcGVyIGxpc3QgLSB1c2VyLW1vZGUtbGludXgtZGV2ZWwgYXQKKyAgbGlzdHMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQgKHN1YnNjcmlwdGlvbiBpbmZvKSBvciB0aGUgdXNlciBsaXN0IC0KKyAgdXNlci1tb2RlLWxpbnV4LXVzZXIgYXQgbGlzdHMgZG90IHNvdXJjZWZvcmdlIGRvIG5ldCAoc3Vic2NyaXB0aW9uCisgIGluZm8pLCB3aGljaGV2ZXIgeW91IHByZWZlci4gIERvbid0IGFzc3VtZSB0aGF0IGV2ZXJ5b25lIGtub3dzIGFib3V0CisgIGl0IGFuZCB0aGF0IGEgZml4IGlzIGltbWluZW50LgorCisKKyAgSWYgeW91IHdhbnQgdG8gYmUgc3VwZXItaGVscGZ1bCwgcmVhZCBgYERpYWdub3NpbmcgUHJvYmxlbXMnJyBhbmQKKyAgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgY29udGFpbmVkIHRoZXJlaW4uCisgIDEIMTQINC4ILiAgRAhEaQhpYQhhZwhnbghubwhvcwhzaQhpbghuZwhnIFAIUHIIcm8Ib2IIYmwIbGUIZW0IbXMIcworCisKKyAgSWYgeW91IGdldCBVTUwgdG8gY3Jhc2gsIGhhbmcsIG9yIG90aGVyd2lzZSBtaXNiZWhhdmUsIHlvdSBzaG91bGQKKyAgcmVwb3J0IHRoaXMgb24gb25lIG9mIHRoZSBwcm9qZWN0IG1haWxpbmcgbGlzdHMsIGVpdGhlciB0aGUgZGV2ZWxvcGVyCisgIGxpc3QgLSB1c2VyLW1vZGUtbGludXgtZGV2ZWwgYXQgbGlzdHMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQKKyAgKHN1YnNjcmlwdGlvbiBpbmZvKSBvciB0aGUgdXNlciBsaXN0IC0gdXNlci1tb2RlLWxpbnV4LXVzZXIgYXQgbGlzdHMKKyAgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQgKHN1YnNjcmlwdGlvbiBpbmZvKS4gIFdoZW4geW91IGRvLCBpdCBpcworICBsaWtlbHkgdGhhdCBJIHdpbGwgd2FudCBtb3JlIGluZm9ybWF0aW9uLiAgU28sIGl0IHdvdWxkIGJlIGhlbHBmdWwgdG8KKyAgcmVhZCB0aGUgc3R1ZmYgYmVsb3csIGRvIHdoYXRldmVyIGlzIGFwcGxpY2FibGUgaW4geW91ciBjYXNlLCBhbmQKKyAgcmVwb3J0IHRoZSByZXN1bHRzIHRvIHRoZSBsaXN0LgorCisKKyAgRm9yIGFueSBkaWFnbm9zaXMsIHlvdSdyZSBnb2luZyB0byBuZWVkIHRvIGJ1aWxkIGEgZGVidWdnaW5nIGtlcm5lbC4KKyAgVGhlIGJpbmFyaWVzIGZyb20gdGhpcyBzaXRlIGFyZW4ndCBkZWJ1Z2dhYmxlLiAgSWYgeW91IGhhdmVuJ3QgZG9uZQorICB0aGlzIGJlZm9yZSwgcmVhZCBhYm91dCBgYENvbXBpbGluZyB0aGUga2VybmVsIGFuZCBtb2R1bGVzJycgIGFuZAorICBgYEtlcm5lbCBkZWJ1Z2dpbmcnJyAgVU1MIGZpcnN0LgorCisKKyAgMQgxNAg0LgguMQgxLgguICBDCENhCGFzCHNlCGUgMQgxIDoIOiBOCE5vCG9yCHJtCG1hCGFsCGwgawhrZQhlcghybghuZQhlbAhsIHAIcGEIYW4IbmkIaWMIY3MIcworCisgIFRoZSBtb3N0IGNvbW1vbiBjYXNlIGlzIGZvciBhIG5vcm1hbCB0aHJlYWQgdG8gcGFuaWMuICBUbyBkZWJ1ZyB0aGlzLAorICB5b3Ugd2lsbCBuZWVkIHRvIHJ1biBpdCB1bmRlciB0aGUgZGVidWdnZXIgKGFkZCAnZGVidWcnIHRvIHRoZSBjb21tYW5kCisgIGxpbmUpLiAgQW4geHRlcm0gd2lsbCBzdGFydCB1cCB3aXRoIGdkYiBydW5uaW5nIGluc2lkZSBpdC4gIENvbnRpbnVlCisgIGl0IHdoZW4gaXQgc3RvcHMgaW4gc3RhcnRfa2VybmVsIGFuZCBtYWtlIGl0IGNyYXNoLiAgTm93IF5DIGdkYiBhbmQKKworCisgIElmIHRoZSBwYW5pYyB3YXMgYSAiS2VybmVsIG1vZGUgZmF1bHQiLCB0aGVuIHRoZXJlIHdpbGwgYmUgYSBzZWd2CisgIGZyYW1lIG9uIHRoZSBzdGFjayBhbmQgSSdtIGdvaW5nIHRvIHdhbnQgc29tZSBtb3JlIGluZm9ybWF0aW9uLiAgVGhlCisgIHN0YWNrIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKKworCisgICAgICAgKFVNTCBnZGIpICBiYWNrdHJhY2UKKyAgICAgICAjMCAgMHgxMDA5YmY3NiBpbiBfX3NpZ3Byb2NtYXNrIChob3c9MSwgc2V0PTB4NWYzNDc5NDAsIG9zZXQ9MHgwKQorICAgICAgICAgICBhdCAuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaWdwcm9jbWFzay5jOjQ5CisgICAgICAgIzEgIDB4MTAwOTE0MTEgaW4gY2hhbmdlX3NpZyAoc2lnbmFsPTEwLCBvbj0xKSBhdCBwcm9jZXNzLmM6MjE4CisgICAgICAgIzIgIDB4MTAwOTQ3ODUgaW4gdGltZXJfaGFuZGxlciAoc2lnPTI2KSBhdCB0aW1lX2tlcm4uYzozMgorICAgICAgICMzICAweDEwMDliZjM4IGluIF9fcmVzdG9yZSAoKQorICAgICAgICAgICBhdCAuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3NpZ2FjdGlvbi5jOjEyNQorICAgICAgICM0ICAweDEwMDk1MzRjIGluIHNlZ3YgKGFkZHJlc3M9OCwgaXA9MjY4ODQ5MTU4LCBpc193cml0ZT0yLCBpc191c2VyPTApCisgICAgICAgICAgIGF0IHRyYXBfa2Vybi5jOjY2CisgICAgICAgIzUgIDB4MTAwOTVjMDQgaW4gc2Vndl9oYW5kbGVyIChzaWc9MTEpIGF0IHRyYXBfdXNlci5jOjI4NQorICAgICAgICM2ICAweDEwMDliZjM4IGluIF9fcmVzdG9yZSAoKQorCisKKworCisgIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgc3ltYm9sIGFuZCBsaW5lIGluZm9ybWF0aW9uIGZvciB0aGUgdmFsdWUKKyAgb2YgaXAgaW4gdGhlIHNlZ3YgZnJhbWUuICBJbiB0aGlzIGNhc2UsIHlvdSB3b3VsZCBkbyB0aGUgZm9sbG93aW5nOgorCisKKyAgICAgICAoVU1MIGdkYikgIGkgc3ltIDI2ODg0OTE1OAorCisKKworCisgIGFuZAorCisKKyAgICAgICAoVU1MIGdkYikgIGkgbGluZSAqMjY4ODQ5MTU4CisKKworCisKKyAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGUgX19yZXN0b3JlIGZyYW1lIHJpZ2h0IGFib3ZlIHRoZSBzZWd2X2hhbi0KKyAgZGxlciBmcmFtZSBpcyBoaWRpbmcgdGhlIGZyYW1lIHRoYXQgYWN0dWFsbHkgc2VnZmF1bHRlZC4gIFNvLCBJIGhhdmUKKyAgdG8gZ2V0IHRoYXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZmF1bHRpbmcgaXAuCisKKworICAxCDE0CDQuCC4yCDIuCC4gIEMIQ2EIYXMIc2UIZSAyCDIgOgg6IFQIVHIIcmEIYWMIY2kIaW4IbmcIZyB0CHRoCGhyCHJlCGVhCGFkCGQgcAhwYQhhbghuaQhpYwhjcwhzCisKKyAgVGhlIGxlc3MgY29tbW9uIGFuZCBtb3JlIHBhaW5mdWwgY2FzZSBpcyB3aGVuIHRoZSB0cmFjaW5nIHRocmVhZAorICBwYW5pY3MuICBJbiB0aGlzIGNhc2UsIHRoZSBrZXJuZWwgZGVidWdnZXIgd2lsbCBiZSB1c2VsZXNzIGJlY2F1c2UgaXQKKyAgbmVlZHMgYSBoZWFsdGh5IHRyYWNpbmcgdGhyZWFkIGluIG9yZGVyIHRvIHdvcmsuICBUaGUgZmlyc3QgdGhpbmcgdG8KKyAgZG8gaXMgZ2V0IGEgYmFja3RyYWNlIGZyb20gdGhlIHRyYWNpbmcgdGhyZWFkLiAgVGhpcyBpcyBkb25lIGJ5CisgIGZpZ3VyaW5nIG91dCB3aGF0IGl0cyBwaWQgaXMsIGZpcmluZyB1cCBnZGIsIGFuZCBhdHRhY2hpbmcgaXQgdG8gdGhhdAorICBwaWQuICBZb3UgY2FuIGZpZ3VyZSBvdXQgdGhlIHRyYWNpbmcgdGhyZWFkIHBpZCBieSBsb29raW5nIGF0IHRoZQorICBmaXJzdCBsaW5lIG9mIHRoZSBjb25zb2xlIG91dHB1dCwgd2hpY2ggd2lsbCBsb29rIGxpa2UgdGhpczoKKworCisgICAgICAgdHJhY2luZyB0aHJlYWQgcGlkID0gMTU4NTEKKworCisKKworICBvciBieSBydW5uaW5nIHBzIG9uIHRoZSBob3N0IGFuZCBmaW5kaW5nIHRoZSBsaW5lIHRoYXQgbG9va3MgbGlrZQorICB0aGlzOgorCisKKyAgICAgICBqZGlrZSAxNTg1MSA0LjUgMC40IDEzMjU2OCAxMTA0IHB0cy8wIFMgMjE6MzQgMDowNSAuL2xpbnV4IFsodHJhY2luZyB0aHJlYWQpXQorCisKKworCisgIElmIHRoZSBwYW5pYyB3YXMgJ3NlZ2ZhdWx0IGluIHNpZ25hbHMnLCB0aGVuIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zCisgIGFib3ZlIGZvciBjb2xsZWN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgc2VnIGZhdWx0LgorCisKKyAgSWYgdGhlIHRyYWNpbmcgdGhyZWFkIGZsYWtlZCBvdXQgYWxsIGJ5IGl0c2VsZiwgdGhlbiBzZW5kIHRoYXQKKyAgYmFja3RyYWNlIGluIGFuZCB3YWl0IGZvciBvdXIgY3JhY2sgZGVidWdnaW5nIHRlYW0gdG8gZml4IHRoZSBwcm9ibGVtLgorCisKKyAgMQgxNAg0LgguMwgzLgguICBDCENhCGFzCHNlCGUgMwgzIDoIOiBUCFRyCHJhCGFjCGNpCGluCG5nCGcgdAh0aAhocghyZQhlYQhhZAhkIHAIcGEIYW4IbmkIaWMIY3MIcyBjCGNhCGF1CHVzCHNlCGVkCGQgYghieQh5IG8Ib3QIdGgIaGUIZXIIciB0CHRoCGhyCHJlCGVhCGFkCGRzCHMKKworICBIb3dldmVyLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIG1pc2JlaGF2aW9yIG9mIGFub3RoZXIgdGhyZWFkCisgIGNhdXNlZCB0aGUgcHJvYmxlbS4gIFRoZSBtb3N0IGNvbW1vbiBwYW5pYyBvZiB0aGlzIHR5cGUgaXM6CisKKworICAgICAgIHdhaXRfZm9yX3N0b3AgZmFpbGVkIHRvIHdhaXQgZm9yICA8cGlkPiAgdG8gc3RvcCB3aXRoICA8c2lnbmFsIG51bWJlcj4KKworCisKKworICBJbiB0aGlzIGNhc2UsIHlvdSdsbCBuZWVkIHRvIGdldCBhIGJhY2t0cmFjZSBmcm9tIHRoZSBwcm9jZXNzIG1lbi0KKyAgdGlvbmVkIGluIHRoZSBwYW5pYywgd2hpY2ggaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUga2VybmVsCisgIGRlYnVnZ2VyIGlzIGRlZnVuY3QgYW5kIHdpdGhvdXQgc29tZSBmYW5jeSBmb290d29yaywgYW5vdGhlciBnZGIgY2FuJ3QKKyAgYXR0YWNoIHRvIGl0LiAgU28sIHRoaXMgaXMgaG93IHRoZSBmYW5jeSBmb290d29yayBnb2VzOgorCisgIEluIGEgc2hlbGw6CisKKworICAgICAgIGhvc3QlIGtpbGwgLVNUT1AgcGlkCisKKworCisKKyAgUnVuIGdkYiBvbiB0aGUgdHJhY2luZyB0aHJlYWQgYXMgZGVzY3JpYmVkIGluIGNhc2UgMiBhbmQgZG86CisKKworICAgICAgIChob3N0IGdkYikgIGNhbGwgZGV0YWNoKHBpZCkKKworCisgIElmIHlvdSBnZXQgYSBzZWdmYXVsdCwgZG8gaXQgYWdhaW4uICBJdCBhbHdheXMgd29ya3MgdGhlIHNlY29uZCB0aW1lLgorCisgIERldGFjaCBmcm9tIHRoZSB0cmFjaW5nIHRocmVhZCBhbmQgYXR0YWNoIHRvIHRoYXQgb3RoZXIgdGhyZWFkOgorCisKKyAgICAgICAoaG9zdCBnZGIpICBkZXRhY2gKKworCisKKworCisKKyAgICAgICAoaG9zdCBnZGIpICBhdHRhY2ggcGlkCisKKworCisKKyAgSWYgZ2RiIGhhbmdzIHdoZW4gYXR0YWNoaW5nIHRvIHRoYXQgcHJvY2VzcywgZ28gYmFjayB0byBhIHNoZWxsIGFuZAorICBkbzoKKworCisgICAgICAgaG9zdCUKKyAgICAgICBraWxsIC1DT05UIHBpZAorCisKKworCisgIEFuZCB0aGVuIGdldCB0aGUgYmFja3RyYWNlOgorCisKKyAgICAgICAoaG9zdCBnZGIpICBiYWNrdHJhY2UKKworCisKKworCisgIDEIMTQINC4ILjQINC4ILiAgQwhDYQhhcwhzZQhlIDQINCA6CDogSAhIYQhhbghuZwhncwhzCisKKyAgSGFuZ3Mgc2VlbSB0byBiZSBmYWlybHkgcmFyZSwgYnV0IHRoZXkgc29tZXRpbWVzIGhhcHBlbi4gIFdoZW4gYSBoYW5nCisgIGhhcHBlbnMsIHdlIG5lZWQgYSBiYWNrdHJhY2UgZnJvbSB0aGUgb2ZmZW5kaW5nIHByb2Nlc3MuICBSdW4gdGhlCisgIGtlcm5lbCBkZWJ1Z2dlciBhcyBkZXNjcmliZWQgaW4gY2FzZSAxIGFuZCBnZXQgYSBiYWNrdHJhY2UuICBJZiB0aGUKKyAgY3VycmVudCBwcm9jZXNzIGlzIG5vdCB0aGUgaWRsZSB0aHJlYWQsIHRoZW4gc2VuZCBpbiB0aGUgYmFja3RyYWNlLgorICBZb3UgY2FuIHRlbGwgdGhhdCBpdCdzIHRoZSBpZGxlIHRocmVhZCBpZiB0aGUgc3RhY2sgbG9va3MgbGlrZSB0aGlzOgorCisKKyAgICAgICAjMCAgMHgxMDBiMTQwMSBpbiBfX2xpYmNfbmFub3NsZWVwICgpCisgICAgICAgIzEgIDB4MTAwYTI4ODUgaW4gaWRsZV9zbGVlcCAoc2Vjcz0xMCkgYXQgdGltZS5jOjEyMgorICAgICAgICMyICAweDEwMGE1NDZmIGluIGRvX2lkbGUgKCkgYXQgcHJvY2Vzc19rZXJuLmM6NDQ1CisgICAgICAgIzMgIDB4MTAwYTU1MDggaW4gY3B1X2lkbGUgKCkgYXQgcHJvY2Vzc19rZXJuLmM6NDcxCisgICAgICAgIzQgIDB4MTAwZWMxOGYgaW4gc3RhcnRfa2VybmVsICgpIGF0IGluaXQvbWFpbi5jOjU5MgorICAgICAgICM1ICAweDEwMGEzZTEwIGluIHN0YXJ0X2tlcm5lbF9wcm9jICh1bnVzZWQ9MHgwKSBhdCB1bV9hcmNoLmM6NzEKKyAgICAgICAjNiAgMHgxMDBhMzgzZiBpbiBzaWduYWxfdHJhbXAgKGFyZz0weDEwMGEzZGQ4KSBhdCB0cmFwX3VzZXIuYzo1MAorCisKKworCisgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4gc29tZSBvdGhlciBwcm9jZXNzIGlzIGF0IGZhdWx0LCBhbmQgd2VudCB0bworICBzbGVlcCB3aGVuIGl0IHNob3VsZG4ndCBoYXZlLiAgUnVuIHBzIG9uIHRoZSBob3N0IGFuZCBmaWd1cmUgb3V0IHdoaWNoCisgIHByb2Nlc3Mgc2hvdWxkIG5vdCBoYXZlIGdvbmUgdG8gc2xlZXAgYW5kIHN0YXllZCBhc2xlZXAuICBUaGVuIGF0dGFjaAorICB0byBpdCB3aXRoIGdkYiBhbmQgZ2V0IGEgYmFja3RyYWNlIGFzIGRlc2NyaWJlZCBpbiBjYXNlIDMuCisKKworCisKKworCisgIDEIMTUINS4ILiAgVAhUaAhoYQhhbghuawhrcwhzCisKKworICBBIG51bWJlciBvZiBwZW9wbGUgaGF2ZSBoZWxwZWQgdGhpcyBwcm9qZWN0IGluIHZhcmlvdXMgd2F5cywgYW5kIHRoaXMKKyAgcGFnZSBnaXZlcyByZWNvZ25pdGlvbiB3aGVyZSByZWNvZ25pdGlvbiBpcyBkdWUuCisKKworICBJZiB5b3UncmUgbGlzdGVkIGhlcmUgYW5kIHlvdSB3b3VsZCBwcmVmZXIgYSByZWFsIGxpbmsgb24geW91ciBuYW1lLAorICBvciBubyBsaW5rIGF0IGFsbCwgaW5zdGVhZCBvZiB0aGUgZGVzcGFtbWVkIGVtYWlsIGFkZHJlc3MgcHNldWRvLWxpbmssCisgIGxldCBtZSBrbm93LgorCisKKyAgSWYgeW91J3JlIG5vdCBsaXN0ZWQgaGVyZSBhbmQgeW91IHRoaW5rIG1heWJlIHlvdSBzaG91bGQgYmUsIHBsZWFzZQorICBsZXQgbWUga25vdyB0aGF0IGFzIHdlbGwuICBJIHRyeSB0byBnZXQgZXZlcnlvbmUsIGJ1dCBzb21ldGltZXMgbXkKKyAgYm9va2tlZXBpbmcgbGFwc2VzIGFuZCBJIGZvcmdldCBhYm91dCBjb250cmlidXRpb25zLgorCisKKyAgMQgxNQg1LgguMQgxLgguICBDCENvCG9kCGRlCGUgYQhhbghuZAhkIEQIRG8Ib2MIY3UIdW0IbWUIZW4IbnQIdGEIYXQIdGkIaW8Ib24IbgorCisgIFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5IGF0IGxpbnV4Y2FyZS5jb20uYXU+ICAtCisKKyAgKwhvICB3cm90ZSB0aGUgIEhPV1RPIDxodHRwOi8vdXNlci1tb2RlLQorICAgICBsaW51eC5zb3VyY2Vmb3JnZS5uZXQvVXNlck1vZGVMaW51eC1IT1dUTy5odG1sPgorCisgICsIbyAgcHJvZGRlZCBtZSBpbnRvIG1ha2luZyB0aGlzIHByb2plY3Qgb2ZmaWNpYWwgYW5kIHB1dHRpbmcgaXQgb24KKyAgICAgU291cmNlRm9yZ2UKKworICArCG8gIGNhbWUgdXAgd2l0aCB0aGUgd2F5IGNvb2wgVU1MIGxvZ28gPGh0dHA6Ly91c2VyLW1vZGUtCisgICAgIGxpbnV4LnNvdXJjZWZvcmdlLm5ldC91bWwtc21hbGwucG5nPgorCisgICsIbyAgcmVkaWQgdGhlIGNvbmZpZyBwcm9jZXNzCisKKworICBQZXRlciBNb3VsZGVyIDxyZWl0ZXIgYXQgbmV0c3BhY2UubmV0LmF1PiAgLSBGaXhlZCBteSBjb25maWcgYW5kIGJ1aWxkCisgIHByb2Nlc3NlcywgYW5kIGFkZGVkIHNvbWUgdXNlZnVsIGNvZGUgdG8gdGhlIGJsb2NrIGRyaXZlcgorCisKKyAgQmlsbCBTdGVhcm5zIDx3c3RlYXJucyBhdCBwb2JveC5jb20+ICAtCisKKyAgKwhvICBIT1dUTyB1cGRhdGVzCisKKyAgKwhvICBsb3RzIG9mIGJ1ZyByZXBvcnRzCisKKyAgKwhvICBsb3RzIG9mIHRlc3RpbmcKKworICArCG8gIGRlZGljYXRlZCBhIGJveCAodW1sLmlzdHMuZGFydG1vdXRoLmVkdSkgdG8gc3VwcG9ydCBVTUwgZGV2ZWxvcG1lbnQKKworICArCG8gIHdyb3RlIHRoZSBta3Jvb3RmcyBzY3JpcHQsIHdoaWNoIGFsbG93cyBib290YWJsZSBmaWxlc3lzdGVtcyBvZgorICAgICBSUE0tYmFzZWQgZGlzdHJpYnV0aW9ucyB0byBiZSBjcmFua2VkIG91dAorCisgICsIbyAgY3JhbmtlZCBvdXQgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXN5c3RlbXMgd2l0aCBzYWlkIHNjcmlwdAorCisKKyAgSmltIExldSA8amxldSBhdCBtaW5kc3ByaW5nLmNvbT4gIC0gV3JvdGUgdGhlIHZpcnR1YWwgZXRoZXJuZXQgZHJpdmVyCisgIGFuZCBhc3NvY2lhdGVkIHVzZXJtb2RlIHRvb2xzCisKKyAgTGFycyBCcmlua2hvZmYgPGh0dHA6Ly9sYXJzLm5vY3Jldy5vcmcvPiAgLSBDb250cmlidXRlZCB0aGUgcHRyYWNlCisgIHByb3h5IGZyb20gaGlzIG93biAgcHJvamVjdCA8aHR0cDovL2EzODYubm9jcmV3Lm9yZy8+IHRvIGFsbG93IGVhc2llcgorICBrZXJuZWwgZGVidWdnaW5nCisKKworICBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWEgYXQgc3VzZS5kZT4gIC0gUmVkaWQgc29tZSBvZiB0aGUgZWFybHkgYm9vdAorICBjb2RlIHNvIHRoYXQgaXQgd291bGQgd29yayBvbiBtYWNoaW5lcyB3aXRoIExhcmdlIEZpbGUgU3VwcG9ydAorCisKKyAgQ2hyaXMgRW1lcnNvbiA8aHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35jZW1lcnNvbi8+ICAtIERpZAorICB0aGUgZmlyc3QgVU1MIHBvcnQgdG8gTGludXgvcHBjCisKKworICBIYXJhbGQgV2VsdGUgPGxhZm9yZ2UgYXQgZ251bW9ua3Mub3JnPiAgLSBXcm90ZSB0aGUgbXVsdGljYXN0CisgIHRyYW5zcG9ydCBmb3IgdGhlIG5ldHdvcmsgZHJpdmVyCisKKworICBKb3JnZW4gQ2VkZXJsb2YgLSBBZGRlZCBzcGVjaWFsIGZpbGUgc3VwcG9ydCB0byBob3N0ZnMKKworCisgIEdyZWcgTG9ubm9uICA8Z2xvbm5vbiBhdCByaWRnZXJ1biBkb3QgY29tPiAgLSBDaGFuZ2VkIHRoZSB1YmQgZHJpdmVyCisgIHRvIGFsbG93IGl0IHRvIGxheWVyIGEgQ09XIGZpbGUgb24gYSBzaGFyZWQgcmVhZC1vbmx5IGZpbGVzeXN0ZW0gYW5kCisgIHdyb3RlIHRoZSBpb21lbSBlbXVsYXRpb24gc3VwcG9ydAorCisKKyAgSGVucmlrIE5vcmRzdHJvbSA8aHR0cDovL2hlbS5wYXNzYWdlbi5zZS9obm8vPiAgLSBQcm92aWRlZCBhIHZhcmlldHkKKyAgb2YgcGF0Y2hlcywgZml4ZXMsIGFuZCBjbHVlcworCisKKyAgTGVubmVydCBCdXl0ZW5oZWsgLSBDb250cmlidXRlZCB2YXJpb3VzIHBhdGNoZXMsIGEgcmV3cml0ZSBvZiB0aGUKKyAgbmV0d29yayBkcml2ZXIsIHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWNvbnNvbGUgZHJpdmVyLCBhbmQKKyAgZGlkIHRoZSBidWxrIG9mIHRoZSB3b3JrIG5lZWRlZCB0byBnZXQgU01QIHdvcmtpbmcgYWdhaW4uCisKKworICBZb24gVXJpYXJ0ZSAtIEZpeGVkIHRoZSBUVU4vVEFQIG5ldHdvcmsgYmFja2VuZCB3aGlsZSBJIHNsZXB0LgorCisKKyAgQWRhbSBIZWF0aCAtIE1hZGUgYSBidW5jaCBvZiBuaWNlIGNsZWFudXBzIHRvIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLAorICBwbHVzIHZhcmlvdXMgb3RoZXIgc21hbGwgcGF0Y2hlcy4KKworCisgIE1hdHQgWmltbWVybWFuIC0gTWF0dCB2b2x1bnRlZXJlZCB0byBiZSB0aGUgVU1MIERlYmlhbiBtYWludGFpbmVyIGFuZAorICBpcyBkb2luZyBhIHJlYWwgbmljZSBqb2Igb2YgaXQuICBIZSBhbHNvIG5vdGljZWQgYW5kIGZpeGVkIGEgbnVtYmVyIG9mCisgIGFjdHVhbGx5IGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBzZWN1cml0eSBob2xlcyBpbiB1bWxfbmV0LiAgUGx1cworICB0aGUgb2NjYXNpb25hbCBwYXRjaC4gIEkgbGlrZSBwYXRjaGVzLgorCisKKyAgSmFtZXMgTWNNZWNoYW4gLSBKYW1lcyBzZWVtcyB0byBoYXZlIHRha2VuIG92ZXIgbWFpbnRlbmFuY2Ugb2YgdGhlIHViZAorICBkcml2ZXIgYW5kIGlzIGRvaW5nIGEgbmljZSBqb2Igb2YgaXQuCisKKworICBDaGFuZGFuIEt1ZGlnZSAtIHdyb3RlIHRoZSB1bWxnZGIgc2NyaXB0IHdoaWNoIGF1dG9tYXRlcyB0aGUgcmVsb2FkaW5nCisgIG9mIG1vZHVsZSBzeW1ib2xzLgorCisKKyAgU3RldmUgU2NobWlkdGtlIC0gd3JvdGUgdGhlIFVNTCBzbGlycCB0cmFuc3BvcnQgYW5kIGhvc3RhdWRpbyBkcml2ZXJzLAorICBlbmFibGluZyBVTUwgcHJvY2Vzc2VzIHRvIGFjY2VzcyBhdWRpbyBkZXZpY2VzIG9uIHRoZSBob3N0LiBIZSBhbHNvCisgIHN1Ym1pdHRlZCBwYXRjaGVzIGZvciB0aGUgc2xpcCB0cmFuc3BvcnQgYW5kIGxvdHMgb2Ygb3RoZXIgdGhpbmdzLgorCisKKyAgRGF2aWQgQ291bHNvbiA8aHR0cDovL2RhdmlkY291bHNvbi5uZXQ+ICAtCisKKyAgKwhvICBTZXQgdXAgdGhlIHVzZXJtb2RlbGludXgub3JnIDxodHRwOi8vdXNlcm1vZGVsaW51eC5vcmc+ICBzaXRlLAorICAgICB3aGljaCBpcyBhIGdyZWF0IHdheSBvZiBrZWVwaW5nIHRoZSBVTUwgdXNlciBjb21tdW5pdHkgb24gdG9wIG9mCisgICAgIFVNTCBnb2luZ3Mtb24uCisKKyAgKwhvICBTaXRlIGRvY3VtZW50YXRpb24gYW5kIHVwZGF0ZXMKKworICArCG8gIE5pZnR5IGxpdHRsZSBVTUwgbWFuYWdlbWVudCBkYWVtb24gIFVNTGQKKyAgICAgPGh0dHA6Ly91bWwub3BlbmNvbnN1bHRhbmN5LmNvbS91bWxkLz4KKworICArCG8gIExvdHMgb2YgdGVzdGluZyBhbmQgYnVnIHJlcG9ydHMKKworCisKKworICAxCDE1CDUuCC4yCDIuCC4gIEYIRmwIbHUIdXMIc2gIaGkIaW4IbmcIZyBvCG91CHV0CHQgYghidQh1ZwhncwhzCisKKworCisgICsIbyAgWXVyaSBQdWRnb3JvZHNreQorCisgICsIbyAgR2VyYWxkIEJyaXR0b24KKworICArCG8gIElhbiBXZWhybWFuCisKKyAgKwhvICBHb3JkIExhbWIKKworICArCG8gIEV1Z2VuZSBLb29udHoKKworICArCG8gIEpvaG4gSC4gSGFydG1hbgorCisgICsIbyAgQW5kZXJzIEthcmxzc29uCisKKyAgKwhvICBEYW5pZWwgUGhpbGxpcHMKKworICArCG8gIEpvaG4gRnJlbWxpbgorCisgICsIbyAgUmFpbmVyIEJ1cmdzdGFsbGVyCisKKyAgKwhvICBKYW1lcyBTdGV2ZW5zb24KKworICArCG8gIE1hdHQgQ2xheQorCisgICsIbyAgQ2xpZmYgSmVmZmVyaWVzCisKKyAgKwhvICBHZW9mZiBIb2ZmCisKKyAgKwhvICBMZW5uZXJ0IEJ1eXRlbmhlaworCisgICsIbyAgQWwgVmlybworCisgICsIbyAgRnJhbmsgS2xpbmdlbmhvZWZlcgorCisgICsIbyAgTGl2aW8gQmFsZGluaSBTb2FyZXMKKworICArCG8gIEpvbiBCdXJnZXNzCisKKyAgKwhvICBQZXRydSBQYWxlcgorCisgICsIbyAgUGF1bAorCisgICsIbyAgQ2hyaXMgUmVhaGFyZAorCisgICsIbyAgU3ZlcmtlciBOaWxzc29uCisKKyAgKwhvICBHb25nIFN1CisKKyAgKwhvICBqb2hhbiB2ZXJyZXB0CisKKyAgKwhvICBCam9ybiBFcmlrc3NvbgorCisgICsIbyAgTG9yZW56byBBbGxlZ3J1Y2NpCisKKyAgKwhvICBNdWxpIEJlbi1ZZWh1ZGEKKworICArCG8gIERhdmlkIE1hbnNmaWVsZAorCisgICsIbyAgSG93YXJkIEdvZmYKKworICArCG8gIE1pa2UgQW5kZXJzb24KKworICArCG8gIEpvaG4gQnlybmUKKworICArCG8gIFNhcGFuIEouIEJhdGlhCisKKyAgKwhvICBJcmlzIEh1YW5nCisKKyAgKwhvICBKYW4gSHVkZWMKKworICArCG8gIFZvbHVzcGEKKworCisKKworICAxCDE1CDUuCC4zCDMuCC4gIEIIQnUIdWcIZ2wIbGUIZXQIdHMIcyBhCGFuCG5kCGQgYwhjbAhsZQhlYQhhbghuLQgtdQh1cAhwcwhzCisKKworCisgICsIbyAgRGF2ZSBaYXJ6eWNraQorCisgICsIbyAgQWRhbSBMYXp1cgorCisgICsIbyAgQm9yaWEgRmVpZ2luCisKKyAgKwhvICBCcmlhbiBKLiBNdXJyZWxsCisKKyAgKwhvICBKUworCisgICsIbyAgUm9tYW4gWmlwcGVsCisKKyAgKwhvICBXaWwgQ29vbGV5CisKKyAgKwhvICBBeWVsZXQgU2hlbWVzaAorCisgICsIbyAgV2lsbCBEeXNvbgorCisgICsIbyAgU3ZlcmtlciBOaWxzc29uCisKKyAgKwhvICBkdm9yYWsKKworICArCG8gIHYubmFnYSBzcmluaXZhcworCisgICsIbyAgU2hsb21pIEZpc2gKKworICArCG8gIFJvZ2VyIEJpbm5zCisKKyAgKwhvICBqb2hhbiB2ZXJyZXB0CisKKyAgKwhvICBNckNodW9pCisKKyAgKwhvICBQZXRlciBDbGV2ZQorCisgICsIbyAgVmluY2VudCBHdWZmZW5zCisKKyAgKwhvICBOYXRoYW4gU2NvdHQKKworICArCG8gIFBhdHJpY2sgQ2F1bGZpZWxkCisKKyAgKwhvICBqYmVhcmNlCisKKyAgKwhvICBDYXRhbGluIE1hcmluYXMKKworICArCG8gIFNoYW5lIFNwZW5jZXIKKworICArCG8gIFpvdSBNaW4KKworCisgICsIbyAgUnlhbiBCb2RlcgorCisgICsIbyAgTG9yZW56byBDb2xpdHRpCisKKyAgKwhvICBHd2VuZGFsIEdyaWdub3UKKworICArCG8gIEFuZHJlJyBCcmVpbGVyCisKKyAgKwhvICBUc3V0b211IFlhc3VkYQorCisKKworICAxCDE1CDUuCC40CDQuCC4gIEMIQ2EIYXMIc2UIZSBTCFN0CHR1CHVkCGRpCGllCGVzCHMKKworCisgICsIbyAgSm9uIFdyaWdodAorCisgICsIbyAgV2lsbGlhbSBNY0V3YW4KKworICArCG8gIE1pY2hhZWwgUmljaGFyZHNvbgorCisKKworICAxCDE1CDUuCC41CDUuCC4gIE8IT3QIdGgIaGUIZXIIciBjCGNvCG9uCG50CHRyCHJpCGliCGJ1CHV0CHRpCGlvCG9uCG5zCHMKKworCisgIEJpbGwgQ2FyciA8QmlsbC5DYXJyIGF0IGNvbXBhcS5jb20+ICBtYWRlIHRoZSBSZWQgSGF0IG1rcm9vdGZzIHNjcmlwdAorICB3b3JrIHdpdGggUkggNi4yLgorCisgIE1pY2hhZWwgSmVubmluZ3MgPG1pa2VqZW4gYXQgaGV2YW5ldC5jb20+ICBzZW50IGluIHNvbWUgbWF0ZXJpYWwgd2hpY2gKKyAgaXMgbm93IGdyYWNpbmcgdGhlIHRvcCBvZiB0aGUgIGluZGV4ICBwYWdlIDxodHRwOi8vdXNlci1tb2RlLQorICBsaW51eC5zb3VyY2Vmb3JnZS5uZXQvaW5kZXguaHRtbD4gIG9mIHRoaXMgc2l0ZS4KKworICBTR0kgPGh0dHA6Ly93d3cuc2dpLmNvbT4gIChhbmQgbW9yZSBzcGVjaWZpY2FsbHkgUmFsZiBCYWVjaGxlIDxyYWxmIGF0CisgIHVuaS1rb2JsZW56LmRlPiApIGdhdmUgbWUgYW4gYWNjb3VudCBvbiBvc3Muc2dpLmNvbQorICA8aHR0cDovL3d3dy5vc3Muc2dpLmNvbT4gLiAgVGhlIGJhbmR3aWR0aCB0aGVyZSBtYWRlIGl0IHBvc3NpYmxlIHRvCisgIHByb2R1Y2UgbW9zdCBvZiB0aGUgZmlsZXN5c3RlbXMgYXZhaWxhYmxlIG9uIHRoZSBwcm9qZWN0IGRvd25sb2FkCisgIHBhZ2UuCisKKyAgTGF1cmVudCBCb25uYXVkIDxMYXVyZW50LkJvbm5hdWQgYXQgaW5wZy5mcj4gIHRvb2sgdGhlIG9sZCBncm90dHkKKyAgRGViaWFuIGZpbGVzeXN0ZW0gdGhhdCBJJ3ZlIGJlZW4gZGlzdHJpYnV0aW5nIGFuZCB1cGRhdGVkIGl0IHRvIDIuMi4KKyAgSXQgaXMgbm93IGF2YWlsYWJsZSBieSBpdHNlbGYgaGVyZS4KKworICBSaWsgdmFuIFJpZWwgZ2F2ZSBtZSBzb21lIGZ0cCBzcGFjZSBvbiBmdHAubmwubGludXgub3JnIHNvIEkgY2FuIG1ha2UKKyAgcmVsZWFzZXMgZXZlbiB3aGVuIFNvdXJjZWZvcmdlIGlzIGJyb2tlbi4KKworICBSb2RyaWdvIGRlIENhc3RybyBsb29rZWQgYXQgbXkgYnJva2VuIHB0ZSBjb2RlIGFuZCB0b2xkIG1lIHdoYXQgd2FzCisgIHdyb25nIHdpdGggaXQsIGxldHRpbmcgbWUgZml4IGEgbG9uZy1zdGFuZGluZyAoc2V2ZXJhbCB3ZWVrcykgYW5kCisgIHNlcmlvdXMgc2V0IG9mIGJ1Z3MuCisKKyAgQ2hyaXMgUmVhaGFyZCBidWlsdCBhIHNwZWNpYWxpemVkIHJvb3QgZmlsZXN5c3RlbSBmb3IgcnVubmluZyBhIEROUworICBzZXJ2ZXIgamFpbGVkIGluc2lkZSBVTUwuICBJdCdzIGF2YWlsYWJsZSBmcm9tIHRoZSBkb3dubG9hZAorICA8aHR0cDovL3VzZXItbW9kZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvZGwtc2YuaHRtbD4gIHBhZ2UgaW4gdGhlIEphaWwKKyAgRmlsZXN5c2VtcyBzZWN0aW9uLgorCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91bmljb2RlLnR4dCBiL0RvY3VtZW50YXRpb24vdW5pY29kZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzM2Y4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdW5pY29kZS50eHQKQEAgLTAsMCArMSwxNzUgQEAKKwkJIExhc3QgdXBkYXRlOiAyMDA1LTAxLTE3LCB2ZXJzaW9uIDEuNAorCitUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBieSBILiBQZXRlciBBbnZpbiA8dW5pY29kZUBsYW5hbmEub3JnPiBhcyBwYXJ0CitvZiB0aGUgTGludXggQXNzaWduZWQgTmFtZXMgQW5kIE51bWJlcnMgQXV0aG9yaXR5IChMQU5BTkEpIHByb2plY3QuCitUaGUgY3VycmVudCB2ZXJzaW9uIGNhbiBiZSBmb3VuZCBhdDoKKworCSAgICBodHRwOi8vd3d3LmxhbmFuYS5vcmcvZG9jcy91bmljb2RlL3VuaWNvZGUudHh0CisKKwkJICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgTGludXgga2VybmVsIGNvZGUgaGFzIGJlZW4gcmV3cml0dGVuIHRvIHVzZSBVbmljb2RlIHRvIG1hcAorY2hhcmFjdGVycyB0byBmb250cy4gIEJ5IGRvd25sb2FkaW5nIGEgc2luZ2xlIFVuaWNvZGUtdG8tZm9udCB0YWJsZSwKK2JvdGggdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgc2V0cyBhbmQgVVRGLTggbW9kZSBhcmUgY2hhbmdlZCB0byB1c2UKK3RoZSBmb250IGFzIGluZGljYXRlZC4KKworVGhpcyBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgdGFibGVzIHN1YnRseS4KK1RoZSBmb3VyIGNoYXJhY3RlciB0YWJsZXMgYXJlIG5vdzoKKworTWFwIHN5bWJvbAlNYXAgbmFtZQkJCUVzY2FwZSBjb2RlIChHMCkKKworTEFUMV9NQVAJTGF0aW4tMSAoSVNPIDg4NTktMSkJCUVTQyAoIEIKK0dSQUZfTUFQCURFQyBWVDEwMCBwc2V1ZG9ncmFwaGljcwlFU0MgKCAwCitJQk1QQ19NQVAJSUJNIGNvZGUgcGFnZSA0MzcJCUVTQyAoIFUKK1VTRVJfTUFQCVVzZXIgZGVmaW5lZAkJCUVTQyAoIEsKKworSW4gcGFydGljdWxhciwgRVNDICggVSBpcyBubyBsb25nZXIgInN0cmFpZ2h0IHRvIGZvbnQiLCBzaW5jZSB0aGUgZm9udAorbWlnaHQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQgdGhhbiB0aGUgSUJNIGNoYXJhY3RlciBzZXQuICBUaGlzCitwZXJtaXRzIGZvciBleGFtcGxlIHRoZSB1c2Ugb2YgYmxvY2sgZ3JhcGhpY3MgZXZlbiB3aXRoIGEgTGF0aW4tMSBmb250Citsb2FkZWQuCisKK05vdGUgdGhhdCBhbHRob3VnaCB0aGVzZSBjb2RlcyBhcmUgc2ltaWxhciB0byBJU08gMjAyMiwgbmVpdGhlciB0aGUKK2NvZGVzIG5vciB0aGVpciB1c2VzIG1hdGNoIElTTyAyMDIyOyBMaW51eCBoYXMgdHdvIDgtYml0IGNvZGVzIChHMCBhbmQKK0cxKSwgd2hlcmVhcyBJU08gMjAyMiBoYXMgZm91ciA3LWJpdCBjb2RlcyAoRzAtRzMpLgorCitJbiBhY2NvcmRhbmNlIHdpdGggdGhlIFVuaWNvZGUgc3RhbmRhcmQvSVNPIDEwNjQ2IHRoZSByYW5nZSBVK0YwMDAgdG8KK1UrRjhGRiBoYXMgYmVlbiByZXNlcnZlZCBmb3IgT1Mtd2lkZSBhbGxvY2F0aW9uICh0aGUgVW5pY29kZSBTdGFuZGFyZAorcmVmZXJzIHRvIHRoaXMgYXMgYSAiQ29ycG9yYXRlIFpvbmUiLCBzaW5jZSB0aGlzIGlzIGluYWNjdXJhdGUgZm9yCitMaW51eCB3ZSBjYWxsIGl0IHRoZSAiTGludXggWm9uZSIpLiAgVStGMDAwIHdhcyBwaWNrZWQgYXMgdGhlIHN0YXJ0aW5nCitwb2ludCBzaW5jZSBpdCBsZXRzIHRoZSBkaXJlY3QtbWFwcGluZyBhcmVhIHN0YXJ0IG9uIGEgbGFyZ2UgcG93ZXIgb2YKK3R3byAoaW4gY2FzZSAxMDI0LSBvciAyMDQ4LWNoYXJhY3RlciBmb250cyBldmVyIGJlY29tZSBuZWNlc3NhcnkpLgorVGhpcyBsZWF2ZXMgVStFMDAwIHRvIFUrRUZGRiBhcyBFbmQgVXNlciBab25lLgorCitbdjEuMl06IFRoZSBVbmljb2RlcyByYW5nZSBmcm9tIFUrRjAwMCBhbmQgdXAgdG8gVStGN0ZGIGhhdmUgYmVlbgoraGFyZC1jb2RlZCB0byBtYXAgZGlyZWN0bHkgdG8gdGhlIGxvYWRlZCBmb250LCBieXBhc3NpbmcgdGhlCit0cmFuc2xhdGlvbiB0YWJsZS4gIFRoZSB1c2VyLWRlZmluZWQgbWFwIG5vdyBkZWZhdWx0cyB0byBVK0YwMDAgdG8KK1UrRjBGRiwgZW11bGF0aW5nIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIuICBJbiBwcmFjdGljZSwgdGhpcyByYW5nZQorbWlnaHQgYmUgc2hvcnRlcjsgZm9yIGV4YW1wbGUsIHZnYWNvbiBjYW4gb25seSBoYW5kbGUgMjU2LWNoYXJhY3RlcgorKFUrRjAwMC4uVStGMEZGKSBvciA1MTItY2hhcmFjdGVyIChVK0YwMDAuLlUrRjFGRikgZm9udHMuCisKKworQWN0dWFsIGNoYXJhY3RlcnMgYXNzaWduZWQgaW4gdGhlIExpbnV4IFpvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgbm90IHByZXNlbnQgaW4gVW5pY29kZSAxLjEuNAoraGF2ZSBiZWVuIGRlZmluZWQ7IHRoZXNlIGFyZSB1c2VkIGJ5IHRoZSBERUMgVlQgZ3JhcGhpY3MgbWFwLiAgW3YxLjJdCitUSElTIFVTRSBJUyBPQlNPTEVURSBBTkQgU0hPVUxEIE5PIExPTkdFUiBCRSBVU0VEOyBQTEVBU0UgU0VFIEJFTE9XLgorCitVK0Y4MDAgREVDIFZUIEdSQVBISUNTIEhPUklaT05UQUwgTElORSBTQ0FOIDEKK1UrRjgwMSBERUMgVlQgR1JBUEhJQ1MgSE9SSVpPTlRBTCBMSU5FIFNDQU4gMworVStGODAzIERFQyBWVCBHUkFQSElDUyBIT1JJWk9OVEFMIExJTkUgU0NBTiA3CitVK0Y4MDQgREVDIFZUIEdSQVBISUNTIEhPUklaT05UQUwgTElORSBTQ0FOIDkKKworVGhlIERFQyBWVDIyMCB1c2VzIGEgNngxMCBjaGFyYWN0ZXIgbWF0cml4LCBhbmQgdGhlc2UgY2hhcmFjdGVycyBmb3JtCithIHNtb290aCBwcm9ncmVzc2lvbiBpbiB0aGUgREVDIFZUIGdyYXBoaWNzIGNoYXJhY3RlciBzZXQuICBJIGhhdmUKK29taXR0ZWQgdGhlIHNjYW4gNSBsaW5lLCBzaW5jZSBpdCBpcyBhbHNvIHVzZWQgYXMgYSBibG9jay1ncmFwaGljcworY2hhcmFjdGVyLCBhbmQgaGVuY2UgaGFzIGJlZW4gY29kZWQgYXMgVSsyNTAwIEZPUk1TIExJR0hUIEhPUklaT05UQUwuCisKK1t2MS4zXTogVGhlc2UgY2hhcmFjdGVycyBoYXZlIGJlZW4gb2ZmaWNpYWxseSBhZGRlZCB0byBVbmljb2RlIDMuMi4wOwordGhleSBhcmUgYWRkZWQgYXQgVSsyM0JBLCBVKzIzQkIsIFUrMjNCQywgVSsyM0JELiAgTGludXggbm93IHVzZXMgdGhlCituZXcgdmFsdWVzLgorCitbdjEuMl06IFRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBoYXZlIGJlZW4gYWRkZWQgdG8gcmVwcmVzZW50IGNvbW1vbgora2V5Ym9hcmQgc3ltYm9scyB0aGF0IGFyZSB1bmxpa2VseSB0byBldmVyIGJlIGFkZGVkIHRvIFVuaWNvZGUgcHJvcGVyCitzaW5jZSB0aGV5IGFyZSBob3JyaWJseSB2ZW5kb3Itc3BlY2lmaWMuICBUaGlzLCBvZiBjb3Vyc2UsIGlzIGFuCitleGNlbGxlbnQgZXhhbXBsZSBvZiBob3JyaWJsZSBkZXNpZ24uCisKK1UrRjgxMCBLRVlCT0FSRCBTWU1CT0wgRkxZSU5HIEZMQUcKK1UrRjgxMSBLRVlCT0FSRCBTWU1CT0wgUFVMTERPV04gTUVOVQorVStGODEyIEtFWUJPQVJEIFNZTUJPTCBPUEVOIEFQUExFCitVK0Y4MTMgS0VZQk9BUkQgU1lNQk9MIFNPTElEIEFQUExFCisKK0tsaW5nb24gbGFuZ3VhZ2Ugc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIDE5OTYsIExpbnV4IHdhcyB0aGUgZmlyc3Qgb3BlcmF0aW5nIHN5c3RlbSBpbiB0aGUgd29ybGQgdG8gYWRkCitzdXBwb3J0IGZvciB0aGUgYXJ0aWZpY2lhbCBsYW5ndWFnZSBLbGluZ29uLCBjcmVhdGVkIGJ5IE1hcmMgT2tyYW5kCitmb3IgdGhlICJTdGFyIFRyZWsiIHRlbGV2aXNpb24gc2VyaWVzLglUaGlzIGVuY29kaW5nIHdhcyBsYXRlcgorYWRvcHRlZCBieSB0aGUgQ29uU2NyaXB0IFVuaWNvZGUgUmVnaXN0cnkgYW5kIHByb3Bvc2VkIChidXQgdWx0aW1hdGVseQorcmVqZWN0ZWQpIGZvciBpbmNsdXNpb24gaW4gVW5pY29kZSBQbGFuZSAxLiAgVGh1cywgaXQgcmVtYWlucyBhcyBhCitMaW51eC9DU1VSIHByaXZhdGUgYXNzaWdubWVudCBpbiB0aGUgTGludXggWm9uZS4KKworVGhpcyBlbmNvZGluZyBoYXMgYmVlbiBlbmRvcnNlZCBieSB0aGUgS2xpbmdvbiBMYW5ndWFnZSBJbnN0aXR1dGUuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY29udGFjdCB0aGVtIGF0OgorCisJaHR0cDovL3d3dy5rbGkub3JnLworCitTaW5jZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBMaW51eCBDWiBoYXZlIGJlZW4gbW9yZQorb2YgdGhlIGRpbmdiYXRzL3N5bWJvbHMvZm9ybXMgdHlwZSBhbmQgdGhpcyBpcyBhIGxhbmd1YWdlLCBJIGhhdmUKK2xvY2F0ZWQgaXQgYXQgdGhlIGVuZCwgb24gYSAxNi1jZWxsIGJvdW5kYXJ5IGluIGtlZXBpbmcgd2l0aCBzdGFuZGFyZAorVW5pY29kZSBwcmFjdGljZS4KKworTk9URTogVGhpcyByYW5nZSBpcyBub3cgb2ZmaWNpYWxseSBtYW5hZ2VkIGJ5IHRoZSBDb25TY3JpcHQgVW5pY29kZQorUmVnaXN0cnkuICBUaGUgbm9ybWF0aXZlIHJlZmVyZW5jZSBpcyBhdDoKKworCWh0dHA6Ly93d3cuZXZlcnR5cGUuY29tL3N0YW5kYXJkcy9jc3VyL2tsaW5nb24uaHRtbAorCitLbGluZ29uIGhhcyBhbiBhbHBoYWJldCBvZiAyNiBjaGFyYWN0ZXJzLCBhIHBvc2l0aW9uYWwgbnVtZXJpYyB3cml0aW5nCitzeXN0ZW0gd2l0aCAxMCBkaWdpdHMsIGFuZCBpcyB3cml0dGVuIGxlZnQtdG8tcmlnaHQsIHRvcC10by1ib3R0b20uCisKK1NldmVyYWwgZ2x5cGggZm9ybXMgZm9yIHRoZSBLbGluZ29uIGFscGhhYmV0IGhhdmUgYmVlbiBwcm9wb3NlZC4KK0hvd2V2ZXIsIHNpbmNlIHRoZSBzZXQgb2Ygc3ltYm9scyBhcHBlYXIgdG8gYmUgY29uc2lzdGVudCB0aHJvdWdob3V0LAord2l0aCBvbmx5IHRoZSBhY3R1YWwgc2hhcGVzIGJlaW5nIGRpZmZlcmVudCwgaW4ga2VlcGluZyB3aXRoIHN0YW5kYXJkCitVbmljb2RlIHByYWN0aWNlIHRoZXNlIGRpZmZlcmVuY2VzIGFyZSBjb25zaWRlcmVkIGZvbnQgdmFyaWFudHMuCisKK1UrRjhEMAlLTElOR09OIExFVFRFUiBBCitVK0Y4RDEJS0xJTkdPTiBMRVRURVIgQgorVStGOEQyCUtMSU5HT04gTEVUVEVSIENICitVK0Y4RDMJS0xJTkdPTiBMRVRURVIgRAorVStGOEQ0CUtMSU5HT04gTEVUVEVSIEUKK1UrRjhENQlLTElOR09OIExFVFRFUiBHSAorVStGOEQ2CUtMSU5HT04gTEVUVEVSIEgKK1UrRjhENwlLTElOR09OIExFVFRFUiBJCitVK0Y4RDgJS0xJTkdPTiBMRVRURVIgSgorVStGOEQ5CUtMSU5HT04gTEVUVEVSIEwKK1UrRjhEQQlLTElOR09OIExFVFRFUiBNCitVK0Y4REIJS0xJTkdPTiBMRVRURVIgTgorVStGOERDCUtMSU5HT04gTEVUVEVSIE5HCitVK0Y4REQJS0xJTkdPTiBMRVRURVIgTworVStGOERFCUtMSU5HT04gTEVUVEVSIFAKK1UrRjhERglLTElOR09OIExFVFRFUiBRCisJLSBXcml0dGVuIDxxPiBpbiBzdGFuZGFyZCBPa3JhbmQgTGF0aW4gdHJhbnNsaXRlcmF0aW9uCitVK0Y4RTAJS0xJTkdPTiBMRVRURVIgUUgKKwktIFdyaXR0ZW4gPFE+IGluIHN0YW5kYXJkIE9rcmFuZCBMYXRpbiB0cmFuc2xpdGVyYXRpb24KK1UrRjhFMQlLTElOR09OIExFVFRFUiBSCitVK0Y4RTIJS0xJTkdPTiBMRVRURVIgUworVStGOEUzCUtMSU5HT04gTEVUVEVSIFQKK1UrRjhFNAlLTElOR09OIExFVFRFUiBUTEgKK1UrRjhFNQlLTElOR09OIExFVFRFUiBVCitVK0Y4RTYJS0xJTkdPTiBMRVRURVIgVgorVStGOEU3CUtMSU5HT04gTEVUVEVSIFcKK1UrRjhFOAlLTElOR09OIExFVFRFUiBZCitVK0Y4RTkJS0xJTkdPTiBMRVRURVIgR0xPVFRBTCBTVE9QCisKK1UrRjhGMAlLTElOR09OIERJR0lUIFpFUk8KK1UrRjhGMQlLTElOR09OIERJR0lUIE9ORQorVStGOEYyCUtMSU5HT04gRElHSVQgVFdPCitVK0Y4RjMJS0xJTkdPTiBESUdJVCBUSFJFRQorVStGOEY0CUtMSU5HT04gRElHSVQgRk9VUgorVStGOEY1CUtMSU5HT04gRElHSVQgRklWRQorVStGOEY2CUtMSU5HT04gRElHSVQgU0lYCitVK0Y4RjcJS0xJTkdPTiBESUdJVCBTRVZFTgorVStGOEY4CUtMSU5HT04gRElHSVQgRUlHSFQKK1UrRjhGOQlLTElOR09OIERJR0lUIE5JTkUKKworVStGOEZECUtMSU5HT04gQ09NTUEKK1UrRjhGRQlLTElOR09OIEZVTEwgU1RPUAorVStGOEZGCUtMSU5HT04gU1lNQk9MIEZPUiBFTVBJUkUKKworT3RoZXIgRmljdGlvbmFsIGFuZCBBcnRpZmljaWFsIFNjcmlwdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHRoZSBhc3NpZ25tZW50IG9mIHRoZSBLbGluZ29uIExpbnV4IFVuaWNvZGUgYmxvY2ssIGEgcmVnaXN0cnkgb2YKK2ZpY3Rpb25hbCBhbmQgYXJ0aWZpY2lhbCBzY3JpcHRzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGJ5IEpvaG4gQ293YW4KKzxqY293YW5AcmV1dGVyc2hlYWx0aC5jb20+IGFuZCBNaWNoYWVsIEV2ZXJzb24gPGV2ZXJzb25AZXZlcnR5cGUuY29tPi4KK1RoZSBDb25TY3JpcHQgVW5pY29kZSBSZWdpc3RyeSBpcyBhY2Nlc3NpYmxlIGF0OgorCisJICBodHRwOi8vd3d3LmV2ZXJ0eXBlLmNvbS9zdGFuZGFyZHMvY3N1ci8KKworVGhlIHJhbmdlcyB1c2VkIGZhbGwgYXQgdGhlIGxvdyBlbmQgb2YgdGhlIEVuZCBVc2VyIFpvbmUgYW5kIGNhbiBoZW5jZQorbm90IGJlIG5vcm1hdGl2ZWx5IGFzc2lnbmVkLCBidXQgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBwZW9wbGUgd2hvCit3aXNoIHRvIGVuY29kZSBmaWN0aW9uYWwgc2NyaXB0cyB1c2UgdGhlc2UgY29kZXMsIGluIHRoZSBpbnRlcmVzdCBvZgoraW50ZXJvcGVyYWJpbGl0eS4gIEZvciBLbGluZ29uLCBDU1VSIGhhcyBhZG9wdGVkIHRoZSBMaW51eCBlbmNvZGluZy4KK1RoZSBDU1VSIHBlb3BsZSBhcmUgZHJpdmluZyBhZGRpbmcgVGVuZ3dhciBhbmQgQ2lydGggaW50byBVbmljb2RlCitQbGFuZSAxOyB0aGUgYWRkaXRpb24gb2YgS2xpbmdvbiB0byBVbmljb2RlIFBsYW5lIDEgaGFzIGJlZW4gcmVqZWN0ZWQKK2FuZCBzbyB0aGUgYWJvdmUgZW5jb2RpbmcgcmVtYWlucyBvZmZpY2lhbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL0NSRURJVFMgYi9Eb2N1bWVudGF0aW9uL3VzYi9DUkVESVRTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZTdmODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9DUkVESVRTCkBAIC0wLDAgKzEsMTc1IEBACitDcmVkaXRzIGZvciB0aGUgU2ltcGxlIExpbnV4IFVTQiBEcml2ZXI6CisKK1RoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlIChpbiBhbHBoYWJldGljYWwKK29yZGVyIGJ5IGxhc3QgbmFtZSkuICBJJ20gc3VyZSB0aGlzIGxpc3Qgc2hvdWxkIGJlIGxvbmdlciwgaXRzCitkaWZmaWN1bHQgdG8gbWFpbnRhaW4sIGFkZCB5b3Vyc2VsZiB3aXRoIGEgcGF0Y2ggaWYgZGVzaXJlZC4KKworICBHZW9yZyBBY2hlciA8YWNoZXJAaW5mb3JtYXRpay50dS1tdWVuY2hlbi5kZT4KKyAgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgIFJhbmR5IER1bmxhcCA8cmFuZHkuZHVubGFwQGludGVsLmNvbT4KKyAgSm9oYW5uZXMgRXJkZmVsdCA8am9oYW5uZXNAZXJkZmVsdC5jb20+CisgIERldGkgRmxpZWdsIDxkZXRpQGZsaWVnbC5kZT4KKyAgaGFtIDxoYW1AdW5zdWF2ZS5jb20+CisgIEJyYWRsZXkgTSBLZXJ5YW4gPGtlcnlhbkBhbmRyZXcuY211LmVkdT4KKyAgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQGNzLmFudS5lZHUuYXU+CisgIFBldGtvIE1hbmxvbG92IDxwZXRrYW5AZGNlLmJnPgorICBEYXZpZCBFLiBOZWxzb24gPGRuZWxzb25AanVtcC5uZXQ+CisgIFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgIEJpbGwgUnlkZXIgPGJyeWRlckBzZ2kuY29tPgorICBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisgIEdyZWdvcnkgUC4gU21pdGggPGdyZWdAZWxlY3RyaWNyYWluLmNvbT4KKyAgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorICBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgIDxLYXp1a2kuWWFzdW1hdHN1QGZ1aml4ZXJveC5jby5qcD4KKworU3BlY2lhbCB0aGFua3MgdG86CisKKyAgSW5ha3kgUGVyZXogR29uemFsZXogPGluYWt5QHBlbG9uY2hvLmZpcy51Y20uZXM+IGZvciBzdGFydGluZyB0aGUKKyAgTGludXggVVNCIGRyaXZlciBlZmZvcnQgYW5kIHdyaXRpbmcgbXVjaCBvZiB0aGUgbGFyZ2VyIHV1c2JkIGRyaXZlci4KKyAgTXVjaCBoYXMgYmVlbiBsZWFybmVkIGZyb20gdGhhdCBlZmZvcnQuCisKKyAgVGhlIE5ldEJTRCAmIEZyZWVCU0QgVVNCIGRldmVsb3BlcnMuICBGb3IgYmVpbmcgb24gdGhlIExpbnV4IFVTQiBsaXN0CisgIGFuZCBvZmZlcmluZyBzdWdnZXN0aW9ucyBhbmQgc2hhcmluZyBpbXBsZW1lbnRhdGlvbiBleHBlcmllbmNlcy4KKworQWRkaXRpb25hbCB0aGFua3MgdG8gdGhlIGZvbGxvd2luZyBjb21wYW5pZXMgYW5kIHBlb3BsZSBmb3IgZG9uYXRpb25zCitvZiBoYXJkd2FyZSwgc3VwcG9ydCwgdGltZSBhbmQgZGV2ZWxvcG1lbnQgKHRoaXMgaXMgZnJvbSB0aGUgb3JpZ2luYWwKK1RIQU5LUyBmaWxlIGluIEluYWt5J3MgZHJpdmVyKToKKworICAgICAgICBUaGUgZm9sbG93aW5nIGNvcnBvcmF0aW9ucyBoYXZlIGhlbHBlZCB1cyBpbiB0aGUgZGV2ZWxvcG1lbnQKKyAgICAgICAgb2YgTGludXggVVNCIC8gVVVTQkQ6CisKKwktIDNDb20gR21iSCBmb3IgZG9uYXRpbmcgYSBJU0ROIFBybyBUQSBhbmQgc3VwcG9ydGluZyBtZQorCSAgaW4gdGVjaG5pY2FsIHF1ZXN0aW9ucyBhbmQgd2l0aCB0ZXN0IGVxdWlwbWVudC4gSSdkIG5ldmVyIAorCSAgZXhwZWN0IHN1Y2ggYSBncmVhdCBoZWxwLgorCisgICAgICAgIC0gVVNBUiBTeXN0ZW1zIHByb3ZpZGVkIHVzIHdpdGggb25lIG9mIHRoZWlyIGV4Y2VsbGVudCBVU0IKKyAgICAgICAgICBFdmFsdWF0aW9uIEtpdHMuIEl0IGFsbG93cyB1cyB0byB0ZXN0IHRoZSBMaW51eC1VU0IgZHJpdmVyCisgICAgICAgICAgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgbGF0ZXN0IFVTQiBzcGVjaWZpY2F0aW9uLiBVU0FSCisgICAgICAgICAgU3lzdGVtcyByZWNvZ25pemVkIHRoZSBpbXBvcnRhbmNlIG9mIGFuIHVwLXRvLWRhdGUgb3BlbgorICAgICAgICAgIE9wZXJhdGluZyBTeXN0ZW0gYW5kIHN1cHBvcnRzIHRoaXMgcHJvamVjdCB3aXRoCisgICAgICAgICAgSGFyZHdhcmUuIFRoYW5rcyEuCisKKyAgICAgICAgLSBUaGFua3MgdG8gSW50ZWwgQ29ycG9yYXRpb24gZm9yIHRoZWlyIHByZWNpb3VzIGhlbHAuCisKKyAgICAgICAgLSBXZSB0ZWFtZWQgdXAgd2l0aCBDaGVycnkgdG8gbWFrZSBMaW51eCB0aGUgZmlyc3QgT1Mgd2l0aAorICAgICAgICAgIGJ1aWx0LWluIFVTQiBzdXBwb3J0LiBDaGVycnkgaXMgb25lIG9mIHRoZSBiaWdnZXN0IGtleWJvYXJkCisgICAgICAgICAgbWFrZXJzIGluIHRoZSB3b3JsZC4KKworICAgICAgICAtIENNRCBUZWNobm9sb2d5LCBJbmMuIHNwb25zb3JlZCB1cyBraW5kbHkgZG9uYXRpbmcgYSBDU0EtNjcwMAorICAgICAgICAgIFBDSS10by1VU0IgQ29udHJvbGxlciBCb2FyZCB0byB0ZXN0IHRoZSBPSENJIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIC0gRHVlIHRvIHRoZWlyIHN1cHBvcnQgdG8gdXMsIEtleXRyb25pYyBjYW4gYmUgc3VyZSB0aGF0IHRoZXkKKyAgICAgICAgICB3aWxsIHNlbGwga2V5Ym9hcmRzIHRvIHNvbWUgb2YgdGhlIDMgbWlsbGlvbiAoYXQgbGVhc3QpCisgICAgICAgICAgTGludXggdXNlcnMuCisKKyAgICAgICAgLSBNYW55IHRoYW5rcyB0byBpbmcgYvxybyBoIGRvcmFuIFtodHRwOi8vd3d3LmliaGRvcmFuLmNvbV0hCisgICAgICAgICAgSXQgd2FzIGFsbW9zdCBpbXBvc3NpYmxlIHRvIGdldCBhIFBDIGJhY2twbGF0ZSBVU0IgY29ubmVjdG9yCisgICAgICAgICAgZm9yIHRoZSBtb3RoZXJib2FyZCBoZXJlIGF0IEV1cm9wZSAobWluZSwgaG9tZS1tYWRlLCB3YXMKKyAgICAgICAgICBxdWl0ZSBsb3VzeSA6KS4gTm93IEkga25vdyB3aGVyZSB0byBhY3F1aXJlIG5pY2UgVVNCIHN0dWZmIQorCisgICAgICAgIC0gR2VuaXVzIEdlcm1hbnkgZG9uYXRlZCBhIFVTQiBtb3VzZSB0byB0ZXN0IHRoZSBtb3VzZSBib290CisgICAgICAgICAgcHJvdG9jb2wuIFRoZXkndmUgYWxzbyBkb25hdGVkIGEgRi0yMyBkaWdpdGFsIGpveXN0aWNrIGFuZCBhCisgICAgICAgICAgTmV0TW91c2UgUHJvLiBUaGFua3MhIAorCisgICAgICAgIC0gQVZNIEdtYkggQmVybGluIGlzIHN1cHBvcnRpbmcgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBMaW51eAorICAgICAgICAgIFVTQiBkcml2ZXIgZm9yIHRoZSBBVk0gSVNETiBDb250cm9sbGVyIEIxIFVTQi4gQVZNIGlzIGEKKyAgICAgICAgICBsZWFkaW5nIG1hbnVmYWN0dXJlciBmb3IgYWN0aXZlIGFuZCBwYXNzaXZlIElTRE4gQ29udHJvbGxlcnMKKyAgICAgICAgICBhbmQgQ0FQSSAyLjAtYmFzZWQgc29mdHdhcmUuIFRoZSBhY3RpdmUgZGVzaWduIG9mIHRoZSBBVk0gQjEKKyAgICAgICAgICBpcyBvcGVuIGZvciBhbGwgT1MgcGxhdGZvcm1zLCBpbmNsdWRpbmcgTGludXguCisKKyAgICAgICAgLSBUaGFua3MgdG8gWS1FIERhdGEsIEluYy4gZm9yIGRvbmF0aW5nIHRoZWlyIEZsYXNoQnVzdGVyLVUKKyAgICAgICAgICBVU0IgRmxvcHB5IERpc2sgRHJpdmUsIHNvIHdlIGNvdWxkIHRlc3QgdGhlIGJ1bGsgdHJhbnNmZXIKKyAgICAgICAgICBjb2RlLgorCisgICAgICAgIC0gTWFueSB0aGFua3MgdG8gTG9naXRlY2ggZm9yIGNvbnRyaWJ1dGluZyBhIHRocmVlIGF4aXMgVVNCCisgICAgICAgICAgbW91c2UuIAorCisgICAgICAgICAgTG9naXRlY2ggZGVzaWducywgbWFudWZhY3R1cmVzIGFuZCBtYXJrZXRzCisgICAgICAgICAgSHVtYW4gSW50ZXJmYWNlIERldmljZXMsIGhhdmluZyBhIGxvbmcgaGlzdG9yeSBhbmQKKyAgICAgICAgICBleHBlcmllbmNlIGluIG1ha2luZyBkZXZpY2VzIHN1Y2ggYXMga2V5Ym9hcmRzLCBtaWNlLAorICAgICAgICAgIHRyYWNrYmFsbHMsIGNhbWVyYXMsIGxvdWRzcGVha2VycyBhbmQgY29udHJvbCBkZXZpY2VzIGZvcgorICAgICAgICAgIGdhbWluZyBhbmQgcHJvZmVzc2lvbmFsIHVzZS4KKworICAgICAgICAgIEJlaW5nIGEgcmVjb2duaXplZCB2ZW5kb3IgYW5kIHNlbGxlciBmb3IgYWxsIHRoZXNlIGRldmljZXMsCisgICAgICAgICAgdGhleSBoYXZlIGRvbmF0ZWQgVVNCIG1pY2UsIGEgam95c3RpY2sgYW5kIGEgc2Nhbm5lciwgYXMgYQorICAgICAgICAgIHdheSB0byBhY2tub3dsZWRnZSB0aGUgaW1wb3J0YW5jZSBvZiBMaW51eCBhbmQgdG8gYWxsb3cKKyAgICAgICAgICBMb2dpdGVjaCBjdXN0b21lcnMgdG8gZW5qb3kgc3VwcG9ydCBpbiB0aGVpciBmYXZvcml0ZQorICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBhbGwgTGludXggdXNlcnMgdG8gdXNlIExvZ2l0ZWNoIGFuZAorICAgICAgICAgIG90aGVyIFVTQiBoYXJkd2FyZS4KKworICAgICAgICAgIExvZ2l0ZWNoIGlzIG9mZmljaWFsIHNwb25zb3Igb2YgdGhlIExpbnV4IENvbmZlcmVuY2Ugb24KKyAgICAgICAgICBGZWIuIDExdGggMTk5OSBpbiBWaWVubmEsIHdoZXJlIHdlJ2xsIHdpbGwgcHJlc2VudCB0aGUKKyAgICAgICAgICBjdXJyZW50IHN0YXRlIG9mIHRoZSBMaW51eCBVU0IgZWZmb3J0LgorCisgICAgICAgIC0gQ0FUQyBoYXMgcHJvdmlkZWQgbWVhbnMgdG8gdW5jb3ZlciBkYXJrIGNvcm5lcnMgb2YgdGhlIFVIQ0kKKyAgICAgICAgICBpbm5lciB3b3JraW5ncyB3aXRoIGEgVVNCIEluc3BlY3Rvci4KKworICAgICAgICAtIFRoYW5rcyB0byBFbnRyZWdhIGZvciBwcm92aWRpbmcgUENJIHRvIFVTQiBjYXJkcywgaHVicyBhbmQKKyAgICAgICAgICBjb252ZXJ0ZXIgcHJvZHVjdHMgZm9yIGRldmVsb3BtZW50LiAKKworCS0gVGhhbmtzIHRvIENvbm5lY3RUZWNoIGZvciBwcm92aWRpbmcgYSBXaGl0ZUhFQVQgdXNiIHRvCisJICBzZXJpYWwgY29udmVydGVyLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBkZXZpY2UgdG8KKwkgIGFsbG93IGEgZHJpdmVyIHRvIGJlIHdyaXR0ZW4uCisKKwktIFRoYW5rcyB0byBBRE10ZWsgZm9yIHByb3ZpZGluZyBQZWdhc3VzIGFuZCBQZWdhc3VzIElJCisJICBldmFsdWF0aW9uIGJvYXJkcywgc3BlY3MgYW5kIHZhbHVhYmxlIGFkdmljZXMgZHVyaW5nCisJICB0aGUgZHJpdmVyIGRldmVsb3BtZW50LgorCQorICAgICAgICBBbmQgdGhhbmtzIGdvIHRvIChoZXkhIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIgOikKKworICAgICAgICAtIE9yZW4gVGlyb3NoIDxvcmVudGlAaGlzaG9tZS5uZXQ+LCBmb3Igc3RhbmRpbmcgc28gcGF0aWVudGx5CisgICAgICAgICAgYWxsIG15IGRvdWJ0cydib3V0IFVTQiBhbmQgZ2l2aW5nIGxvdHMgb2YgY29vbCBpZGVhcy4KKworICAgICAgICAtIEpvY2hlbiBLYXJyZXIgPGthcnJlckB3cGZkMjUucGh5c2lrLnVuaS13dWVyemJ1cmcuZGU+LCBmb3IKKyAgICAgICAgICBwb2ludGluZyBvdXQgbW9ydGFsIGJ1Z3MgYW5kIGdpdmluZyBhZHZpY2UuCisKKyAgICAgICAgLSBFZG11bmQgSHVtZW1iZXJnZXIgPGVkQGF0bmV0LmF0PiwgZm9yIGl0J3MgZ3JlYXQgd29yayBvbgorICAgICAgICAgIHB1YmxpYyByZWxhdGlvbnNoaXBzIGFuZCBnZW5lcmFsIG1hbmFnZW1lbnQgc3R1ZmYgZm9yIHRoZQorICAgICAgICAgIExpbnV4LVVTQiBlZmZvcnQuCisKKyAgICAgICAgLSBBbGJlcnRvIE1lbmVnYXp6aSA8Zmxhc2hAZmxhc2guaW9sLml0PiBpcyBzdGFydGluZyB0aGUKKyAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgVVVTQkQuIEdvIGZvciBpdCEKKworICAgICAgICAtIFJpYyBLbGFyZW4gPGlhX3JpY0Bjcy51dHdlbnRlLm5sPiBmb3IgZG9pbmcgbmljZQorICAgICAgICAgIGludHJvZHVjdG9yeSBkb2N1bWVudHMgKGNvbXBldGluZyB3aXRoIEFsYmVydG8ncyA6KS4KKworICAgICAgICAtIENocmlzdGlhbiBHcm9lc3NsZXIgPGNwZ0BhbGFkZGluLmRlPiwgZm9yIGl0J3MgaGVscCBvbiB0aG9zZQorICAgICAgICAgIGl0Y2h5IGJpdHMgLi4uIDopCisKKyAgICAgICAgLSBQYXVsIE1hY0tlcnJhcyBmb3IgcG9saXNoaW5nIE9IQ0kgYW5kIHB1c2hpbmcgbWUgaGFyZGVyIGZvcgorICAgICAgICAgIHRoZSBpTWFjIHN1cHBvcnQsIGdpdmluZyBpbXByb3ZlbWVudHMgYW5kIGVuaGFuY2VtZW50cy4KKworICAgICAgICAtIEZlcm5hbmRvIEhlcnJlcmEgPGZoZXJyZXJhQGV1cmllbGVjLmV0c2l0LnVwbS5lcz4gaGFzIHRha2VuCisgICAgICAgICAgY2hhcmdlIG9mIGNvbXBvc2luZywgbWFpbnRhaW5pbmcgYW5kIGZlZWRpbmcgdGhlCisgICAgICAgICAgbG9uZy1hd2FpdGVkLCB1bmlxdWUgYW5kIG1hcnZlbG91cyBVVVNCRCBGQVEhIFRhZGFhYWEhISEKKworICAgICAgICAtIFJhc2NhIEdtZWxjaCA8dGhyb25AZ214LmRlPiBoYXMgcmV2aXZlZCB0aGUgcmF3IGRyaXZlciBhbmQKKyAgICAgICAgICBwb2ludGVkIGJ1Z3MsIGFzIHdlbGwgYXMgc3RhcnRlZCB0aGUgdXVzYmQtdXRpbHMgcGFja2FnZS4KKworICAgICAgICAtIFBldGVyIERldHRvcmkgPGRldHRvcmlAb3p5LmRlYy5jb20+IGlzIHVuY292ZXJpbmcgYnVncyBsaWtlCisgICAgICAgICAgY3JhenksIGFzIHdlbGwgYXMgbWFraW5nIGNvb2wgc3VnZ2VzdGlvbnMsIGdyZWF0IDopCisKKyAgICAgICAgLSBBbGwgdGhlIEZyZWUgU29mdHdhcmUgYW5kIExpbnV4IGNvbW11bml0eSwgdGhlIEZTRiAmIHRoZSBHTlUKKyAgICAgICAgICBwcm9qZWN0LCB0aGUgTUlUIFggY29uc29ydGl1bSwgdGhlIFRlWCBwZW9wbGUgLi4uIGV2ZXJ5b25lIQorICAgICAgICAgIFlvdSBrbm93IHdobyB5b3UgYXJlIQorCisgICAgICAgIC0gQmlnIHRoYW5rcyB0byBSaWNoYXJkIFN0YWxsbWFuIGZvciBjcmVhdGluZyBFbWFjcyEKKworICAgICAgICAtIFRoZSBwZW9wbGUgYXQgdGhlIGxpbnV4LXVzYiBtYWlsaW5nIGxpc3QsIGZvciByZWFkaW5nIHNvCisgICAgICAgICAgbWFueSBtZXNzYWdlcyA6KSBPaywgbm8gbW9yZSBraWRkaW5nOyBmb3IgYWxsIHlvdXIgYWR2aXNlcyEKKworICAgICAgICAtIEFsbCB0aGUgcGVvcGxlIGF0IHRoZSBVU0IgSW1wbGVtZW50b3JzIEZvcnVtIGZvciB0aGVpcgorICAgICAgICAgIGhlbHAgYW5kIGFzc2lzdGFuY2UuCisKKyAgICAgICAgLSBOYXRoYW4gTXllcnMgPG5jbUBjYW50cmlwLm9yZz4sIGZvciBoaXMgYWR2aWNlISAoaG9wZSB5b3UKKyAgICAgICAgICBsaWtlZCBDaWJlbGVzJyBwYXJ0eSkuCisKKyAgICAgICAgLSBMaW51cyBUb3J2YWxkcywgZm9yIHN0YXJ0aW5nLCBkZXZlbG9waW5nIGFuZCBtYW5hZ2luZyBMaW51eC4KKworICAgICAgICAtIE1pa2UgU21pdGgsIENyYWlnIEtlaXRobGV5LCBUaGllcnJ5IEdpcm9uIGFuZCBKYW5ldCBTY2hhbmsKKyAgICAgICAgICBmb3IgY29udmluY2luZyBtZSBVU0IgU3RhbmRhcmQgaHVicyBhcmUgbm90IHRoYXQgc3RhbmRhcmQKKyAgICAgICAgICBhbmQgdGhhdCdzIGdvb2QgdG8gYWxsb3cgZm9yIHZlbmRvciBzcGVjaWZpYyBxdWlya3Mgb24gdGhlCisgICAgICAgICAgc3RhbmRhcmQgaHViIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL1VSQi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OWI5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0CkBAIC0wLDAgKzEsMjUyIEBACitSZXZpc2VkOiAyMDAwLURlYy0wNS4KK0FnYWluOiAgIDIwMDItSnVsLTA2CisKKyAgICBOT1RFOgorCisgICAgVGhlIFVTQiBzdWJzeXN0ZW0gbm93IGhhcyBhIHN1YnN0YW50aWFsIHNlY3Rpb24gaW4gIlRoZSBMaW51eCBLZXJuZWwgQVBJIgorICAgIGd1aWRlIChpbiBEb2N1bWVudGF0aW9uL0RvY0Jvb2spLCBnZW5lcmF0ZWQgZnJvbSB0aGUgY3VycmVudCBzb3VyY2UKKyAgICBjb2RlLiAgVGhpcyBwYXJ0aWN1bGFyIGRvY3VtZW50YXRpb24gZmlsZSBpc24ndCBwYXJ0aWN1bGFybHkgY3VycmVudCBvcgorICAgIGNvbXBsZXRlOyBkb24ndCByZWx5IG9uIGl0IGV4Y2VwdCBmb3IgYSBxdWljayBvdmVydmlldy4KKworCisxLjEuIEJhc2ljIGNvbmNlcHQgb3IgJ1doYXQgaXMgYW4gVVJCPycKKworVGhlIGJhc2ljIGlkZWEgb2YgdGhlIG5ldyBkcml2ZXIgaXMgbWVzc2FnZSBwYXNzaW5nLCB0aGUgbWVzc2FnZSBpdHNlbGYgaXMgCitjYWxsZWQgVVNCIFJlcXVlc3QgQmxvY2ssIG9yIFVSQiBmb3Igc2hvcnQuIAorCistIEFuIFVSQiBjb25zaXN0cyBvZiBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gdG8gZXhlY3V0ZSBhbnkgVVNCIHRyYW5zYWN0aW9uIAorICBhbmQgZGVsaXZlciB0aGUgZGF0YSBhbmQgc3RhdHVzIGJhY2suIAorCistIEV4ZWN1dGlvbiBvZiBhbiBVUkIgaXMgaW5oZXJlbnRseSBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLCBpLmUuIHRoZSAKKyAgdXNiX3N1Ym1pdF91cmIodXJiKSBjYWxsIHJldHVybnMgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaGFzIHN1Y2Nlc3NmdWxseSBxdWV1ZWQgCisgIHRoZSByZXF1ZXN0ZWQgYWN0aW9uLiAKKworLSBUcmFuc2ZlcnMgZm9yIG9uZSBVUkIgY2FuIGJlIGNhbmNlbGVkIHdpdGggdXNiX3VubGlua191cmIodXJiKSBhdCBhbnkgdGltZS4gCisKKy0gRWFjaCBVUkIgaGFzIGEgY29tcGxldGlvbiBoYW5kbGVyLCB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGFjdGlvbgorICBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIG9yIGNhbmNlbGVkLiBUaGUgVVJCIGFsc28gY29udGFpbnMgYQorICBjb250ZXh0LXBvaW50ZXIgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlci4KKworLSBFYWNoIGVuZHBvaW50IGZvciBhIGRldmljZSBsb2dpY2FsbHkgc3VwcG9ydHMgYSBxdWV1ZSBvZiByZXF1ZXN0cy4KKyAgWW91IGNhbiBmaWxsIHRoYXQgcXVldWUsIHNvIHRoYXQgdGhlIFVTQiBoYXJkd2FyZSBjYW4gc3RpbGwgdHJhbnNmZXIKKyAgZGF0YSB0byBhbiBlbmRwb2ludCB3aGlsZSB5b3VyIGRyaXZlciBoYW5kbGVzIGNvbXBsZXRpb24gb2YgYW5vdGhlci4KKyAgVGhpcyBtYXhpbWl6ZXMgdXNlIG9mIFVTQiBiYW5kd2lkdGgsIGFuZCBzdXBwb3J0cyBzZWFtbGVzcyBzdHJlYW1pbmcKKyAgb2YgZGF0YSB0byAob3IgZnJvbSkgZGV2aWNlcyB3aGVuIHVzaW5nIHBlcmlvZGljIHRyYW5zZmVyIG1vZGVzLgorCisKKzEuMi4gVGhlIFVSQiBzdHJ1Y3R1cmUKKworU29tZSBvZiB0aGUgZmllbGRzIGluIGFuIFVSQiBhcmU6CisKK3N0cnVjdCB1cmIKK3sKKy8vIChJTikgZGV2aWNlIGFuZCBwaXBlIHNwZWNpZnkgdGhlIGVuZHBvaW50IHF1ZXVlCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsgICAgICAgICAvLyBwb2ludGVyIHRvIGFzc29jaWF0ZWQgVVNCIGRldmljZQorCXVuc2lnbmVkIGludCBwaXBlOyAgICAgICAgICAgICAgLy8gZW5kcG9pbnQgaW5mb3JtYXRpb24KKworCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9mbGFnczsgICAgLy8gSVNPX0FTQVAsIFNIT1JUX05PVF9PSywgZXRjLgorCisvLyAoSU4pIGFsbCB1cmJzIG5lZWQgY29tcGxldGlvbiByb3V0aW5lcworCXZvaWQgKmNvbnRleHQ7ICAgICAgICAgICAgICAgICAgLy8gY29udGV4dCBmb3IgY29tcGxldGlvbiByb3V0aW5lCisJdm9pZCAoKmNvbXBsZXRlKShzdHJ1Y3QgdXJiICopOyAvLyBwb2ludGVyIHRvIGNvbXBsZXRpb24gcm91dGluZQorCisvLyAoT1VUKSBzdGF0dXMgYWZ0ZXIgZWFjaCBjb21wbGV0aW9uCisJaW50IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5lZCBzdGF0dXMKKworLy8gKElOKSBidWZmZXIgdXNlZCBmb3IgZGF0YSB0cmFuc2ZlcnMKKwl2b2lkICp0cmFuc2Zlcl9idWZmZXI7ICAgICAgICAgIC8vIGFzc29jaWF0ZWQgZGF0YSBidWZmZXIKKwlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsgICAgIC8vIGRhdGEgYnVmZmVyIGxlbmd0aAorCWludCBudW1iZXJfb2ZfcGFja2V0czsgICAgICAgICAgLy8gc2l6ZSBvZiBpc29fZnJhbWVfZGVzYworCisvLyAoT1VUKSBzb21ldGltZXMgb25seSBwYXJ0IG9mIENUUkwvQlVMSy9JTlRSIHRyYW5zZmVyX2J1ZmZlciBpcyB1c2VkCisJaW50IGFjdHVhbF9sZW5ndGg7ICAgICAgICAgICAgICAvLyBhY3R1YWwgZGF0YSBidWZmZXIgbGVuZ3RoCisKKy8vIChJTikgc2V0dXAgc3RhZ2UgZm9yIENUUkwgKHBhc3MgYSBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KQorCXVuc2lnbmVkIGNoYXIqIHNldHVwX3BhY2tldDsgICAgLy8gc2V0dXAgcGFja2V0IChjb250cm9sIG9ubHkpCisKKy8vIE9ubHkgZm9yIFBFUklPRElDIHRyYW5zZmVycyAoSVNPLCBJTlRFUlJVUFQpCisgICAgLy8gKElOL09VVCkgc3RhcnRfZnJhbWUgaXMgc2V0IHVubGVzcyBJU09fQVNBUCBpc24ndCBzZXQKKwlpbnQgc3RhcnRfZnJhbWU7ICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGZyYW1lCisJaW50IGludGVydmFsOyAgICAgICAgICAgICAgICAgICAvLyBwb2xsaW5nIGludGVydmFsCisKKyAgICAvLyBJU08gb25seTogcGFja2V0cyBhcmUgb25seSAiYmVzdCBlZmZvcnQiOyBlYWNoIGNhbiBoYXZlIGVycm9ycworCWludCBlcnJvcl9jb3VudDsgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGVycm9ycworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGlzb19mcmFtZV9kZXNjWzBdOworfTsKKworWW91ciBkcml2ZXIgbXVzdCBjcmVhdGUgdGhlICJwaXBlIiB2YWx1ZSB1c2luZyB2YWx1ZXMgZnJvbSB0aGUgYXBwcm9wcmlhdGUKK2VuZHBvaW50IGRlc2NyaXB0b3IgaW4gYW4gaW50ZXJmYWNlIHRoYXQgaXQncyBjbGFpbWVkLgorCisKKzEuMy4gSG93IHRvIGdldCBhbiBVUkI/CisKK1VSQnMgYXJlIGFsbG9jYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY2FsbAorCisJc3RydWN0IHVyYiAqdXNiX2FsbG9jX3VyYihpbnQgaXNvZnJhbWVzLCBpbnQgbWVtX2ZsYWdzKQorCitSZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgVVJCLCAwIGlmIGFsbG9jYXRpb24gZmFpbGVkLgorVGhlIHBhcmFtZXRlciBpc29mcmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgaXNvY2hyb25vdXMgdHJhbnNmZXIgZnJhbWVzCit5b3Ugd2FudCB0byBzY2hlZHVsZS4gRm9yIENUUkwvQlVMSy9JTlQsIHVzZSAwLiAgVGhlIG1lbV9mbGFncyBwYXJhbWV0ZXIKK2hvbGRzIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzLCBsZXR0aW5nIHlvdSBjb250cm9sIChhbW9uZyBvdGhlcgordGhpbmdzKSB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGNvZGUgbWF5IGJsb2NrIG9yIG5vdC4KKworVG8gZnJlZSBhbiBVUkIsIHVzZQorCisJdm9pZCB1c2JfZnJlZV91cmIoc3RydWN0IHVyYiAqdXJiKQorCitZb3UgbWF5IG5vdCBmcmVlIGFuIHVyYiB0aGF0IHlvdSd2ZSBzdWJtaXR0ZWQsIGJ1dCB3aGljaCBoYXNuJ3QgeWV0IGJlZW4KK3JldHVybmVkIHRvIHlvdSBpbiBhIGNvbXBsZXRpb24gY2FsbGJhY2suCisKKworMS40LiBXaGF0IGhhcyB0byBiZSBmaWxsZWQgaW4/CisKK0RlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0cmFuc2FjdGlvbiwgdGhlcmUgYXJlIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyAKK2RlZmluZWQgaW4gPGxpbnV4L3VzYi5oPiB0byBzaW1wbGlmeSB0aGUgaW5pdGlhbGl6YXRpb24sIHN1Y2ggYXMKK2ZpbGxfY29udHJvbF91cmIoKSBhbmQgZmlsbF9idWxrX3VyYigpLiAgSW4gZ2VuZXJhbCwgdGhleSBuZWVkIHRoZSB1c2IKK2RldmljZSBwb2ludGVyLCB0aGUgcGlwZSAodXN1YWwgZm9ybWF0IGZyb20gdXNiLmgpLCB0aGUgdHJhbnNmZXIgYnVmZmVyLAordGhlIGRlc2lyZWQgdHJhbnNmZXIgbGVuZ3RoLCB0aGUgY29tcGxldGlvbiAgaGFuZGxlciwgYW5kIGl0cyBjb250ZXh0LiAKK1Rha2UgYSBsb29rIGF0IHRoZSBzb21lIGV4aXN0aW5nIGRyaXZlcnMgdG8gc2VlIGhvdyB0aGV5J3JlIHVzZWQuCisKK0ZsYWdzOgorRm9yIElTTyB0aGVyZSBhcmUgdHdvIHN0YXJ0dXAgYmVoYXZpb3JzOiBTcGVjaWZpZWQgc3RhcnRfZnJhbWUgb3IgQVNBUC4KK0ZvciBBU0FQIHNldCBVUkJfSVNPX0FTQVAgaW4gdHJhbnNmZXJfZmxhZ3MuCisKK0lmIHNob3J0IHBhY2tldHMgc2hvdWxkIE5PVCBiZSB0b2xlcmF0ZWQsIHNldCBVUkJfU0hPUlRfTk9UX09LIGluIAordHJhbnNmZXJfZmxhZ3MuCisKKworMS41LiBIb3cgdG8gc3VibWl0IGFuIFVSQj8KKworSnVzdCBjYWxsCisKKwlpbnQgdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQorCitUaGUgbWVtX2ZsYWdzIHBhcmFtZXRlciwgc3VjaCBhcyBTTEFCX0FUT01JQywgY29udHJvbHMgbWVtb3J5IGFsbG9jYXRpb24sCitzdWNoIGFzIHdoZXRoZXIgdGhlIGxvd2VyIGxldmVscyBtYXkgYmxvY2sgd2hlbiBtZW1vcnkgaXMgdGlnaHQuCisKK0l0IGltbWVkaWF0ZWx5IHJldHVybnMsIGVpdGhlciB3aXRoIHN0YXR1cyAwIChyZXF1ZXN0IHF1ZXVlZCkgb3Igc29tZQorZXJyb3IgY29kZSwgdXN1YWxseSBjYXVzZWQgYnkgdGhlIGZvbGxvd2luZzoKKworLSBPdXQgb2YgbWVtb3J5ICgtRU5PTUVNKQorLSBVbnBsdWdnZWQgZGV2aWNlICgtRU5PREVWKQorLSBTdGFsbGVkIGVuZHBvaW50ICgtRVBJUEUpCistIFRvbyBtYW55IHF1ZXVlZCBJU08gdHJhbnNmZXJzICgtRUFHQUlOKQorLSBUb28gbWFueSByZXF1ZXN0ZWQgSVNPIGZyYW1lcyAoLUVGQklHKQorLSBJbnZhbGlkIElOVCBpbnRlcnZhbCAoLUVJTlZBTCkKKy0gTW9yZSB0aGFuIG9uZSBwYWNrZXQgZm9yIElOVCAoLUVJTlZBTCkKKworQWZ0ZXIgc3VibWlzc2lvbiwgdXJiLT5zdGF0dXMgaXMgLUVJTlBST0dSRVNTOyBob3dldmVyLCB5b3Ugc2hvdWxkIG5ldmVyCitsb29rIGF0IHRoYXQgdmFsdWUgZXhjZXB0IGluIHlvdXIgY29tcGxldGlvbiBjYWxsYmFjay4KKworRm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50cywgeW91ciBjb21wbGV0aW9uIGhhbmRsZXJzIHNob3VsZCAocmUpc3VibWl0CitVUkJzIHRvIHRoZSBzYW1lIGVuZHBvaW50IHdpdGggdGhlIElTT19BU0FQIGZsYWcsIHVzaW5nIG11bHRpLWJ1ZmZlcmluZywKK3RvIGdldCBzZWFtbGVzcyBJU08gc3RyZWFtaW5nLgorCisKKzEuNi4gSG93IHRvIGNhbmNlbCBhbiBhbHJlYWR5IHJ1bm5pbmcgVVJCPworCitGb3IgYW4gVVJCIHdoaWNoIHlvdSd2ZSBzdWJtaXR0ZWQsIGJ1dCB3aGljaCBoYXNuJ3QgYmVlbiByZXR1cm5lZCB0bworeW91ciBkcml2ZXIgYnkgdGhlIGhvc3QgY29udHJvbGxlciwgY2FsbAorCisJaW50IHVzYl91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYikKKworSXQgcmVtb3ZlcyB0aGUgdXJiIGZyb20gdGhlIGludGVybmFsIGxpc3QgYW5kIGZyZWVzIGFsbCBhbGxvY2F0ZWQKK0hXIGRlc2NyaXB0b3JzLiBUaGUgc3RhdHVzIGlzIGNoYW5nZWQgdG8gcmVmbGVjdCB1bmxpbmtpbmcuIEFmdGVyIAordXNiX3VubGlua191cmIoKSByZXR1cm5zIHdpdGggdGhhdCBzdGF0dXMgY29kZSwgeW91IGNhbiBmcmVlIHRoZSBVUkIKK3dpdGggdXNiX2ZyZWVfdXJiKCkuCisKK1RoZXJlIGlzIGFsc28gYW4gYXN5bmNocm9ub3VzIHVubGluayBtb2RlLiAgVG8gdXNlIHRoaXMsIHNldCB0aGUKK3RoZSBVUkJfQVNZTkNfVU5MSU5LIGZsYWcgaW4gdXJiLT50cmFuc2ZlciBmbGFncyBiZWZvcmUgY2FsbGluZwordXNiX3VubGlua191cmIoKS4gIFdoZW4gdXNpbmcgYXN5bmMgdW5saW5raW5nLCB0aGUgVVJCIHdpbGwgbm90Citub3JtYWxseSBiZSB1bmxpbmtlZCB3aGVuIHVzYl91bmxpbmtfdXJiKCkgcmV0dXJucy4gIEluc3RlYWQsIHdhaXQKK2ZvciB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHRvIGJlIGNhbGxlZC4KKworCisxLjcuIFdoYXQgYWJvdXQgdGhlIGNvbXBsZXRpb24gaGFuZGxlcj8KKworVGhlIGhhbmRsZXIgaXMgb2YgdGhlIGZvbGxvd2luZyB0eXBlOgorCisJdHlwZWRlZiB2b2lkICgqdXNiX2NvbXBsZXRlX3QpKHN0cnVjdCB1cmIgKik7CisKK2kuZS4gaXQgZ2V0cyBqdXN0IHRoZSBVUkIgdGhhdCBjYXVzZWQgdGhlIGNvbXBsZXRpb24gY2FsbC4KK0luIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIsIHlvdSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgdXJiLT5zdGF0dXMgdG8KK2RldGVjdCBhbnkgVVNCIGVycm9ycy4gU2luY2UgdGhlIGNvbnRleHQgcGFyYW1ldGVyIGlzIGluY2x1ZGVkIGluIHRoZSBVUkIsCit5b3UgY2FuIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlci4gCisKK05vdGUgdGhhdCBldmVuIHdoZW4gYW4gZXJyb3IgKG9yIHVubGluaykgaXMgcmVwb3J0ZWQsIGRhdGEgbWF5IGhhdmUgYmVlbgordHJhbnNmZXJyZWQuICBUaGF0J3MgYmVjYXVzZSBVU0IgdHJhbnNmZXJzIGFyZSBwYWNrZXRpemVkOyBpdCBtaWdodCB0YWtlCitzaXh0ZWVuIHBhY2tldHMgdG8gdHJhbnNmZXIgeW91ciAxS0J5dGUgYnVmZmVyLCBhbmQgdGVuIG9mIHRoZW0gbWlnaHQKK2hhdmUgdHJhbnNmZXJyZWQgc3VjY2VzZnVsbHkgYmVmb3JlIHRoZSBjb21wbGV0aW9uIGlzIGNhbGxlZC4KKworCitOT1RFOiAgKioqKiogV0FSTklORyAqKioqKgorRG9uJ3QgdXNlIHVyYi0+ZGV2IGZpZWxkIGluIHlvdXIgY29tcGxldGlvbiBoYW5kbGVyOyBpdCdzIGNsZWFyZWQKK2FzIHBhcnQgb2YgZ2l2aW5nIHVyYnMgYmFjayB0byBkcml2ZXJzLiAgKEFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aAorb3duZXJzaGlwIG9mIHBlcmlvZGljIFVSQnMsIHdoaWNoIHdhcyBvdGhlcndpc2UgYW1iaWd1b3VzLikgSW5zdGVhZCwKK3VzZSB1cmItPmNvbnRleHQgdG8gaG9sZCBhbGwgdGhlIGRhdGEgeW91ciBkcml2ZXIgbmVlZHMuCisKK05PVEU6ICAqKioqKiBXQVJOSU5HICoqKioqCitBbHNvLCBORVZFUiBTTEVFUCBJTiBBIENPTVBMRVRJT04gSEFORExFUi4gIFRoZXNlIGFyZSBub3JtYWxseSBjYWxsZWQKK2R1cmluZyBoYXJkd2FyZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4gIElmIHlvdSBjYW4sIGRlZmVyIHN1YnN0YW50aWFsCit3b3JrIHRvIGEgdGFza2xldCAoYm90dG9tIGhhbGYpIHRvIGtlZXAgc3lzdGVtIGxhdGVuY2llcyBsb3cuICBZb3UnbGwKK3Byb2JhYmx5IG5lZWQgdG8gdXNlIHNwaW5sb2NrcyB0byBwcm90ZWN0IGRhdGEgc3RydWN0dXJlcyB5b3UgbWFuaXB1bGF0ZQoraW4gY29tcGxldGlvbiBoYW5kbGVycy4KKworCisxLjguIEhvdyB0byBkbyBpc29jaHJvbm91cyAoSVNPKSB0cmFuc2ZlcnM/CisKK0ZvciBJU08gdHJhbnNmZXJzIHlvdSBoYXZlIHRvIGZpbGwgYSB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIHN0cnVjdHVyZSwKK2FsbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBVUkIgYnkgdXNiX2FsbG9jX3VyYihuLG1lbV9mbGFncyksIGZvciBlYWNoCitwYWNrZXQgeW91IHdhbnQgdG8gc2NoZWR1bGUuICAgWW91IGFsc28gaGF2ZSB0byBzZXQgdXJiLT5pbnRlcnZhbCB0byBzYXkKK2hvdyBvZnRlbiB0byBtYWtlIHRyYW5zZmVyczsgaXQncyBvZnRlbiBvbmUgcGVyIGZyYW1lICh3aGljaCBpcyBvbmNlCitldmVyeSBtaWNyb2ZyYW1lIGZvciBoaWdoc3BlZWQgZGV2aWNlcykuICBUaGUgYWN0dWFsIGludGVydmFsIHVzZWQgd2lsbAorYmUgYSBwb3dlciBvZiB0d28gdGhhdCdzIG5vIGJpZ2dlciB0aGFuIHdoYXQgeW91IHNwZWNpZnkuCisKK1RoZSB1c2Jfc3VibWl0X3VyYigpIGNhbGwgbW9kaWZpZXMgdXJiLT5pbnRlcnZhbCB0byB0aGUgaW1wbGVtZW50ZWQgaW50ZXJ2YWwKK3ZhbHVlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWwgdmFsdWUuICBJZgorSVNPX0FTQVAgc2NoZWR1bGluZyBpcyB1c2VkLCB1cmItPnN0YXJ0X2ZyYW1lIGlzIGFsc28gdXBkYXRlZC4KKworRm9yIGVhY2ggZW50cnkgeW91IGhhdmUgdG8gc3BlY2lmeSB0aGUgZGF0YSBvZmZzZXQgZm9yIHRoaXMgZnJhbWUgKGJhc2UgaXMKK3RyYW5zZmVyX2J1ZmZlciksIGFuZCB0aGUgbGVuZ3RoIHlvdSB3YW50IHRvIHdyaXRlL2V4cGVjdCB0byByZWFkLgorQWZ0ZXIgY29tcGxldGlvbiwgYWN0dWFsX2xlbmd0aCBjb250YWlucyB0aGUgYWN0dWFsIHRyYW5zZmVycmVkIGxlbmd0aCBhbmQgCitzdGF0dXMgY29udGFpbnMgdGhlIHJlc3VsdGluZyBzdGF0dXMgZm9yIHRoZSBJU08gdHJhbnNmZXIgZm9yIHRoaXMgZnJhbWUuCitJdCBpcyBhbGxvd2VkIHRvIHNwZWNpZnkgYSB2YXJ5aW5nIGxlbmd0aCBmcm9tIGZyYW1lIHRvIGZyYW1lIChlLmcuIGZvcgorYXVkaW8gc3luY2hyb25pc2F0aW9uL2FkYXB0aXZlIHRyYW5zZmVyIHJhdGVzKS4gWW91IGNhbiBhbHNvIHVzZSB0aGUgbGVuZ3RoIAorMCB0byBvbWl0IG9uZSBvciBtb3JlIGZyYW1lcyAoc3RyaXBpbmcpLgorCitGb3Igc2NoZWR1bGluZyB5b3UgY2FuIGNob29zZSB5b3VyIG93biBzdGFydCBmcmFtZSBvciBJU09fQVNBUC4gQXMgZXhwbGFpbmVkCitlYXJsaWVyLCBpZiB5b3UgYWx3YXlzIGtlZXAgYXQgbGVhc3Qgb25lIFVSQiBxdWV1ZWQgYW5kIHlvdXIgY29tcGxldGlvbgora2VlcHMgKHJlKXN1Ym1pdHRpbmcgYSBsYXRlciBVUkIsIHlvdSdsbCBnZXQgc21vb3RoIElTTyBzdHJlYW1pbmcgKGlmIHVzYgorYmFuZHdpZHRoIHV0aWxpemF0aW9uIGFsbG93cykuCisKK0lmIHlvdSBzcGVjaWZ5IHlvdXIgb3duIHN0YXJ0IGZyYW1lLCBtYWtlIHN1cmUgaXQncyBzZXZlcmFsIGZyYW1lcyBpbiBhZHZhbmNlCitvZiB0aGUgY3VycmVudCBmcmFtZS4gIFlvdSBtaWdodCB3YW50IHRoaXMgbW9kZWwgaWYgeW91J3JlIHN5bmNocm9uaXppbmcKK0lTTyBkYXRhIHdpdGggc29tZSBvdGhlciBldmVudCBzdHJlYW0uCisKKworMS45LiBIb3cgdG8gc3RhcnQgaW50ZXJydXB0IChJTlQpIHRyYW5zZmVycz8KKworSW50ZXJydXB0IHRyYW5zZmVycywgbGlrZSBpc29jaHJvbm91cyB0cmFuc2ZlcnMsIGFyZSBwZXJpb2RpYywgYW5kIGhhcHBlbgoraW4gaW50ZXJ2YWxzIHRoYXQgYXJlIHBvd2VycyBvZiB0d28gKDEsIDIsIDQgZXRjKSB1bml0cy4gIFVuaXRzIGFyZSBmcmFtZXMKK2ZvciBmdWxsIGFuZCBsb3cgc3BlZWQgZGV2aWNlcywgYW5kIG1pY3JvZnJhbWVzIGZvciBoaWdoIHNwZWVkIG9uZXMuCisKK0N1cnJlbnRseSwgYWZ0ZXIgeW91IHN1Ym1pdCBvbmUgaW50ZXJydXB0IFVSQiwgdGhhdCB1cmIgaXMgb3duZWQgYnkgdGhlCitob3N0IGNvbnRyb2xsZXIgZHJpdmVyIHVudGlsIHlvdSBjYW5jZWwgaXQgd2l0aCB1c2JfdW5saW5rX3VyYigpLiAgWW91CittYXkgdW5saW5rIGludGVycnVwdCB1cmJzIGluIHRoZWlyIGNvbXBsZXRpb24gaGFuZGxlcnMsIGlmIHlvdSBuZWVkIHRvLgorCitBZnRlciBhIHRyYW5zZmVyIGNvbXBsZXRpb24gaXMgY2FsbGVkLCB0aGUgVVJCIGlzIGF1dG9tYWdpY2FsbHkgcmVzdWJtaXR0ZWQuCitUSElTIEJFSEFWSU9SIElTIEVYUEVDVEVEIFRPIEJFIFJFTU9WRUQhIQorCitJbnRlcnJ1cHQgdHJhbnNmZXJzIG1heSBvbmx5IHNlbmQgKG9yIHJlY2VpdmUpIHRoZSAibWF4cGFja2V0IiB2YWx1ZSBmb3IKK3RoZSBnaXZlbiBpbnRlcnJ1cHQgZW5kcG9pbnQ7IGlmIHlvdSBuZWVkIG1vcmUgZGF0YSwgeW91IHdpbGwgbmVlZCB0bworY29weSB0aGF0IGRhdGEgb3V0IG9mIChvciBpbnRvKSBhbm90aGVyIGJ1ZmZlci4gIFNpbWlsYXJseSwgeW91IGNhbid0CitxdWV1ZSBpbnRlcnJ1cHQgdHJhbnNmZXJzLgorVEhFU0UgUkVTVFJJQ1RJT05TIEFSRSBFWFBFQ1RFRCBUTyBCRSBSRU1PVkVEISEKKworTm90ZSB0aGF0IHRoaXMgYXV0b21hZ2ljIHJlc3VibWlzc2lvbiBtb2RlbCBkb2VzIG1ha2UgaXQgYXdrd2FyZCB0byB1c2UKK2ludGVycnVwdCBPVVQgdHJhbnNmZXJzLiAgVGhlIHBvcnRhYmxlIHNvbHV0aW9uIGludm9sdmVzIHVubGlua2luZyB0aG9zZQorT1VUIHVyYnMgYWZ0ZXIgdGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQsIGFuZCBwZXJoYXBzIHN1Ym1pdHRpbmcgYSBmaW5hbAorVVJCIGZvciBhIHNob3J0IHBhY2tldC4KKworVGhlIHVzYl9zdWJtaXRfdXJiKCkgY2FsbCBtb2RpZmllcyB1cmItPmludGVydmFsIHRvIHRoZSBpbXBsZW1lbnRlZCBpbnRlcnZhbAordmFsdWUgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCBpbnRlcnZhbCB2YWx1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2FjbS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9hY20udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjQ1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9hY20udHh0CkBAIC0wLDAgKzEsMTM4IEBACisJCQkgIExpbnV4IEFDTSBkcml2ZXIgdjAuMTYKKwkJIChjKSAxOTk5IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisJCQkgICAgIFNwb25zb3JlZCBieSBTdVNFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzAuIERpc2NsYWltZXIKK35+fn5+fn5+fn5+fn4KKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCit3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworICBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkgZS1tYWlsCistIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHN1c2UuY3o+LCBvciBieSBwYXBlciBtYWlsOiBWb2p0ZWNoIFBhdmxpaywKK1VjaXRlbHNrYSAxNTc2LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisKKyAgRm9yIHlvdXIgY29udmVuaWVuY2UsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgaXMgaW5jbHVkZWQKK2luIHRoZSBwYWNrYWdlOiBTZWUgdGhlIGZpbGUgQ09QWUlORy4KKworMS4gVXNhZ2UKK35+fn5+fn5+CisgIFRoZSBkcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgZHJpdmVycyB3b3JrcyB3aXRoIFVTQiBtb2RlbXMgYW5kIFVTQiBJU0ROIHRlcm1pbmFsCithZGFwdGVycyB0aGF0IGNvbmZvcm0gdG8gdGhlIFVuaXZlcnNhbCBTZXJpYWwgQnVzIENvbW11bmljYXRpb24gRGV2aWNlIENsYXNzCitBYnN0cmFjdCBDb250cm9sIE1vZGVsIChVU0IgQ0RDIEFDTSkgc3BlY2lmaWNhdGlvbi4KKworICBNYW55IG1vZGVtcyBkbywgaGVyZSBpcyBhIGxpc3Qgb2YgdGhvc2UgSSBrbm93IG9mOgorCisJM0NvbSBPZmZpY2VDb25uZWN0IDU2aworCTNDb20gVm9pY2UgRmF4TW9kZW0gUHJvCisJM0NvbSBTcG9ydHN0ZXIKKwlNdWx0aVRlY2ggTXVsdGlNb2RlbSA1NmsKKwlab29tIDI5ODZMIEZheE1vZGVtCisJQ29tcGFxIDU2ayBGYXhNb2RlbQorCUVMU0EgTWljcm9saW5rIDU2aworCisgIEkga25vdyBvZiBvbmUgSVNETiBUQSB0aGF0IGRvZXMgd29yayB3aXRoIHRoZSBhY20gZHJpdmVyOgorCisJM0NvbSBVU1IgSVNETiBQcm8gVEEKKworICBVbmZvcnR1bmF0ZWx5IG1hbnkgbW9kZW1zIGFuZCBtb3N0IElTRE4gVEFzIHVzZSBwcm9wcmlldGFyeSBpbnRlcmZhY2VzIGFuZAordGh1cyB3b24ndCB3b3JrIHdpdGggdGhpcyBkcml2ZXJzLiBDaGVjayBmb3IgQUNNIGNvbXBsaWFuY2UgYmVmb3JlIGJ1eWluZy4KKworICBUaGUgZHJpdmVyICh3aXRoIGRldmZzKSBjcmVhdGVzIHRoZXNlIGRldmljZXMgaW4gL2Rldi91c2IvYWNtOgorCisJY3J3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgMTY2LCAgIDAgQXByICAxIDEwOjQ5IDAKKwljcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAxNjYsICAgMSBBcHIgIDEgMTA6NDkgMQorCWNydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgIDE2NiwgICAyIEFwciAgMSAxMDo0OSAyCisKKyAgQW5kIHNvIG9uLCB1cCB0byAzMSwgd2l0aCB0aGUgbGltaXQgYmVpbmcgcG9zc2libGUgdG8gY2hhbmdlIGluIGFjbS5jIHRvIHVwCit0byAyNTYsIHNvIHlvdSBjYW4gdXNlIHVwIHRvIDI1NiBVU0IgbW9kZW1zIHdpdGggb25lIGNvbXB1dGVyICh5b3UnbGwgbmVlZAordGhyZWUgVVNCIGNhcmRzIGZvciB0aGF0LCB0aG91Z2gpLgorCisgIElmIHlvdSBkb24ndCB1c2UgZGV2ZnMsIHRoZW4geW91IGNhbiBjcmVhdGUgZGV2aWNlIG5vZGVzIHdpdGggdGhlIHNhbWUKK21pbm9yL21ham9yIG51bWJlcnMgYW55d2hlcmUgeW91IHdhbnQsIGJ1dCBlaXRoZXIgdGhlIGFib3ZlIGxvY2F0aW9uIG9yCisvZGV2L3VzYi90dHlBQ00wIGlzIHByZWZlcnJlZC4KKworICBUbyB1c2UgdGhlIG1vZGVtcyB5b3UgbmVlZCB0aGVzZSBtb2R1bGVzIGxvYWRlZDoKKworCXVzYmNvcmUua28KKwl1aGNpLWhjZC5rbyBvaGNpLWhjZC5rbyBvciBlaGNpLWhjZC5rbworCWNkYy1hY20ua28KKworICBBZnRlciB0aGF0LCB0aGUgbW9kZW1bc10gc2hvdWxkIGJlIGFjY2Vzc2libGUuIFlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UKK21pbmljb20sIHBwcCBhbmQgbWdldHR5IHdpdGggdGhlbS4KKworMi4gVmVyaWZ5aW5nIHRoYXQgaXQgd29ya3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgIFRoZSBmaXJzdCBzdGVwIHdvdWxkIGJlIHRvIGNoZWNrIC9wcm9jL2J1cy91c2IvZGV2aWNlcywgaXQgc2hvdWxkIGxvb2sKK2xpa2UgdGhpczoKKworVDogIEJ1cz0wMSBMZXY9MDAgUHJudD0wMCBQb3J0PTAwIENudD0wMCBEZXYjPSAgMSBTcGQ9MTIgIE14Q2g9IDIKK0I6ICBBbGxvYz0gIDAvOTAwIHVzICggMCUpLCAjSW50PSAgMCwgI0lzbz0gIDAKK0Q6ICBWZXI9IDEuMDAgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBNeFBTPSA4ICNDZmdzPSAgMQorUDogIFZlbmRvcj0wMDAwIFByb2RJRD0wMDAwIFJldj0gMC4wMAorUzogIFByb2R1Y3Q9VVNCIFVIQ0kgUm9vdCBIdWIKK1M6ICBTZXJpYWxOdW1iZXI9NjgwMAorQzoqICNJZnM9IDEgQ2ZnIz0gMSBBdHI9NDAgTXhQd3I9ICAwbUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDEgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9aHViCitFOiAgQWQ9ODEoSSkgQXRyPTAzKEludC4pIE14UFM9ICAgOCBJdmw9MjU1bXMKK1Q6ICBCdXM9MDEgTGV2PTAxIFBybnQ9MDEgUG9ydD0wMSBDbnQ9MDEgRGV2Iz0gIDIgU3BkPTEyICBNeENoPSAwCitEOiAgVmVyPSAxLjAwIENscz0wMihjb21tLikgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDIKK1A6ICBWZW5kb3I9MDRjMSBQcm9kSUQ9MDA4ZiBSZXY9IDIuMDcKK1M6ICBNYW51ZmFjdHVyZXI9M0NvbSBJbmMuCitTOiAgUHJvZHVjdD0zQ29tIFUuUy4gUm9ib3RpY3MgUHJvIElTRE4gVEEKK1M6ICBTZXJpYWxOdW1iZXI9VUZUNTNBNDlCVlQ3CitDOiAgI0lmcz0gMSBDZmcjPSAxIEF0cj02MCBNeFB3cj0gIDBtQQorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMyBDbHM9ZmYodmVuZC4pIFN1Yj1mZiBQcm90PWZmIERyaXZlcj1hY20KK0U6ICBBZD04NShJKSBBdHI9MDIoQnVsaykgTXhQUz0gIDY0IEl2bD0gIDBtcworRTogIEFkPTA0KE8pIEF0cj0wMihCdWxrKSBNeFBTPSAgNjQgSXZsPSAgMG1zCitFOiAgQWQ9ODEoSSkgQXRyPTAzKEludC4pIE14UFM9ICAxNiBJdmw9MTI4bXMKK0M6KiAjSWZzPSAyIENmZyM9IDIgQXRyPTYwIE14UHdyPSAgMG1BCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAxIENscz0wMihjb21tLikgU3ViPTAyIFByb3Q9MDEgRHJpdmVyPWFjbQorRTogIEFkPTgxKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgMTYgSXZsPTEyOG1zCitJOiAgSWYjPSAxIEFsdD0gMCAjRVBzPSAyIENscz0wYShkYXRhICkgU3ViPTAwIFByb3Q9MDAgRHJpdmVyPWFjbQorRTogIEFkPTg1KEkpIEF0cj0wMihCdWxrKSBNeFBTPSAgNjQgSXZsPSAgMG1zCitFOiAgQWQ9MDQoTykgQXRyPTAyKEJ1bGspIE14UFM9ICA2NCBJdmw9ICAwbXMKKworVGhlIHByZXNlbmNlIG9mIHRoZXNlIHRocmVlIGxpbmVzIChhbmQgdGhlIENscz0gJ2NvbW0nIGFuZCAnZGF0YScgY2xhc3NlcykKK2lzIGltcG9ydGFudCwgaXQgbWVhbnMgaXQncyBhbiBBQ00gZGV2aWNlLiBUaGUgRHJpdmVyPWFjbSBtZWFucyB0aGUgYWNtCitkcml2ZXIgaXMgdXNlZCBmb3IgdGhlIGRldmljZS4gSWYgeW91IHNlZSBvbmx5IENscz1mZih2ZW5kLikgdGhlbiB5b3UncmUgb3V0CitvZiBsdWNrLCB5b3UgaGF2ZSBhIGRldmljZSB3aXRoIHZlbmRvciBzcGVjaWZpYy1pbnRlcmZhY2UuCisKK0Q6ICBWZXI9IDEuMDAgQ2xzPTAyKGNvbW0uKSBTdWI9MDAgUHJvdD0wMCBNeFBTPSA4ICNDZmdzPSAgMgorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMSBDbHM9MDIoY29tbS4pIFN1Yj0wMiBQcm90PTAxIERyaXZlcj1hY20KK0k6ICBJZiM9IDEgQWx0PSAwICNFUHM9IDIgQ2xzPTBhKGRhdGEgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9YWNtCisKK0luIHRoZSBzeXN0ZW0gbG9nIHlvdSBzaG91bGQgc2VlOgorCit1c2IuYzogVVNCIG5ldyBkZXZpY2UgY29ubmVjdCwgYXNzaWduZWQgZGV2aWNlIG51bWJlciAyCit1c2IuYzoga21hbGxvYyBJRiBjNzY5MWZhMCwgbnVtaWYgMQordXNiLmM6IGttYWxsb2MgSUYgYzdiNWYzZTAsIG51bWlmIDIKK3VzYi5jOiBza2lwcGVkIDQgY2xhc3MvdmVuZG9yIHNwZWNpZmljIGludGVyZmFjZSBkZXNjcmlwdG9ycwordXNiLmM6IG5ldyBkZXZpY2Ugc3RyaW5nczogTWZyPTEsIFByb2R1Y3Q9MiwgU2VyaWFsTnVtYmVyPTMKK3VzYi5jOiBVU0IgZGV2aWNlIG51bWJlciAyIGRlZmF1bHQgbGFuZ3VhZ2UgSUQgMHg0MDkKK01hbnVmYWN0dXJlcjogM0NvbSBJbmMuCitQcm9kdWN0OiAzQ29tIFUuUy4gUm9ib3RpY3MgUHJvIElTRE4gVEEKK1NlcmlhbE51bWJlcjogVUZUNTNBNDlCVlQ3CithY20uYzogcHJvYmluZyBjb25maWcgMQorYWNtLmM6IHByb2JpbmcgY29uZmlnIDIKK3R0eUFDTTA6IFVTQiBBQ00gZGV2aWNlCithY20uYzogYWNtX2NvbnRyb2xfbXNnOiBycTogMHgyMiB2YWw6IDB4MCBsZW46IDB4MCByZXN1bHQ6IDAKK2FjbS5jOiBhY21fY29udHJvbF9tc2c6IHJxOiAweDIwIHZhbDogMHgwIGxlbjogMHg3IHJlc3VsdDogNwordXNiLmM6IGFjbSBkcml2ZXIgY2xhaW1lZCBpbnRlcmZhY2UgYzdiNWYzZTAKK3VzYi5jOiBhY20gZHJpdmVyIGNsYWltZWQgaW50ZXJmYWNlIGM3YjVmM2Y4Cit1c2IuYzogYWNtIGRyaXZlciBjbGFpbWVkIGludGVyZmFjZSBjNzY5MWZhMAorCitJZiBhbGwgdGhpcyBzZWVtcyB0byBiZSBPSywgZmlyZSB1cCBtaW5pY29tIGFuZCBzZXQgaXQgdG8gdGFsayB0byB0aGUgdHR5QUNNCitkZXZpY2UgYW5kIHRyeSB0eXBpbmcgJ2F0Jy4gSWYgaXQgcmVzcG9uZHMgd2l0aCAnT0snLCB0aGVuIGV2ZXJ5dGhpbmcgaXMKK3dvcmtpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hdWVyc3dhbGQudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvYXVlcnN3YWxkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWU0ZDhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvYXVlcnN3YWxkLnR4dApAQCAtMCwwICsxLDMwIEBACisJCUF1ZXJzd2FsZCBVU0Iga2VybmVsIGRyaXZlcgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hhdCBpcyBpdD8gV2hhdCBjYW4gSSBkbyB3aXRoIGl0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGF1ZXJzd2FsZCBVU0Iga2VybmVsIGRyaXZlciBjb25uZWN0cyB5b3VyIGxpbnV4IDIuNC54CitzeXN0ZW0gdG8gdGhlIGF1ZXJzd2FsZCB1c2ItZW5hYmxlZCBkZXZpY2VzLgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGF1ZXJzd2FsZCB1c2IgZGV2aWNlczoKK2EpIHNtYWxsIFBCWCBzeXN0ZW1zIChJU0ROKQorYikgQ09NZm9ydCBzeXN0ZW0gdGVsZXBob25lcyAoSVNETikKKworVGhlIGRyaXZlciBpbnN0YWxsYXRpb24gY3JlYXRlcyB0aGUgZGV2aWNlcworL2Rldi91c2IvYXVlcjAuLjE1LiBUaGVzZSBkZXZpY2VzIGNhcnJ5IGEgdmVuZG9yLQorc3BlY2lmaWMgcHJvdG9jb2wuIFlvdSBtYXkgcnVuIGFsbCBhdWVyc3dhbGQgamF2YQorc29mdHdhcmUgb24gaXQuIFRoZSBqYXZhIHNvZnR3YXJlIG5lZWRzIGEgbmF0aXZlCitsaWJyYXJ5ICJsaWJBdWVyVXNiSk5JTmF0aXZlLnNvIiBpbnN0YWxsZWQgb24KK3lvdXIgc3lzdGVtLiBUaGlzIGxpYnJhcnkgaXMgYXZhaWxhYmxlIGZyb20KK2F1ZXJzd2FsZCBhbmQgc2hpcHBlZCBhcyBwYXJ0IG9mIHRoZSBqYXZhIHNvZnR3YXJlLgorCitZb3UgbWF5IGNyZWF0ZSB0aGUgZGV2aWNlcyB3aXRoOgorCW1rbm9kIC1tIDY2NiAvZGV2L3VzYi9hdWVyMCBjIDE4MCAxMTIKKwkuLi4KKwlta25vZCAtbSA2NjYgL2Rldi91c2IvYXVlcjE1IGMgMTgwIDEyNworCitGdXR1cmUgcGxhbnMKKz09PT09PT09PT09PQorLSBDb25uZWN0aW9uIHRvIElTRE40TElOVVggKHRoZSBoaXNheCBpbnRlcmZhY2UpCisKK1RoZSBtYWludGFpbmVyIG9mIHRoaXMgZHJpdmVyIGlzIHdvbGZnYW5nQGlrc3ctbXVlZXMuZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2JsdWV0b290aC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9ibHVldG9vdGgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NGY1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9ibHVldG9vdGgudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0lOVFJPRFVDVElPTgorCisgIFRoZSBVU0IgQmx1ZXRvb3RoIGRyaXZlciBzdXBwb3J0cyBhbnkgVVNCIEJsdWV0b290aCBkZXZpY2UuCisgIEl0IGN1cnJlbnRseSB3b3JrcyB3ZWxsIHdpdGggdGhlIExpbnV4IFVTQiBCbHVldG9vdGggc3RhY2sgZnJvbSBBeGlzIAorICAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9kZXZlbG9wZXIuYXhpcy5jb20vc29mdHdhcmUvYmx1ZXRvb3RoLyApIGFuZCAKKyAgaGFzIGJlZW4gcnVtb3JlZCB0byB3b3JrIHdpdGggb3RoZXIgTGludXggVVNCIEJsdWV0b290aCBzdGFja3MuCisKKworQ09ORklHVVJBVElPTgorCisgIEN1cnJlbnRseSB0aGUgZHJpdmVyIGNhbiBoYW5kbGUgdXAgdG8gMjU2IGRpZmZlcmVudCBVU0IgQmx1ZXRvb3RoIAorICBkZXZpY2VzIGF0IG9uY2UuIAorCisgIElmIHlvdSBhcmUgbm90IHVzaW5nIGRldmZzOgorICAgIFRoZSBtYWpvciBudW1iZXIgdGhhdCB0aGUgZHJpdmVyIHVzZXMgaXMgMjE2IHNvIHRvIHVzZSB0aGUgZHJpdmVyLAorICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIG5vZGVzOgorCW1rbm9kIC9kZXYvdHR5VUIwIGMgMjE2IDAKKwlta25vZCAvZGV2L3R0eVVCMSBjIDIxNiAxCisJbWtub2QgL2Rldi90dHlVQjIgYyAyMTYgMgorCW1rbm9kIC9kZXYvdHR5VUIzIGMgMjE2IDMKKwkJLgorCQkuCisJCS4KKwlta25vZCAvZGV2L3R0eVVCMjU0IGMgMjE2IDI1NAorCW1rbm9kIC9kZXYvdHR5VUIyNTUgYyAyMTYgMjU1CisKKyAgSWYgeW91IGFyZSB1c2luZyBkZXZmczoKKyAgICBUaGUgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgd2lsbCBzaG93IHVwIGFzCisgICAgL2Rldi91c2IvdHR1Yi97MCwxLC4uLn0KKworICBXaGVuIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIGFuZCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIHRoZSBkcml2ZXIKKyAgd2lsbCBwcmludCB0byB0aGUgc3lzdGVtIGxvZywgd2hpY2ggbm9kZSB0aGUgZGV2aWNlIGhhcyBiZWVuIGJvdW5kIHRvLgorCisKK0NPTlRBQ1Q6CisKKyAgSWYgYW55b25lIGhhcyBhbnkgcHJvYmxlbXMgdXNpbmcgdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IG1lLCBvciAKKyAgam9pbiB0aGUgTGludXgtVVNCIG1haWxpbmcgbGlzdCAoaW5mb3JtYXRpb24gb24gam9pbmluZyB0aGUgbWFpbGluZyAKKyAgbGlzdCwgYXMgd2VsbCBhcyBhIGxpbmsgdG8gaXRzIHNlYXJjaGFibGUgYXJjaGl2ZSBpcyBhdCAKKyAgaHR0cDovL3d3dy5saW51eC11c2Iub3JnLyApCisKKworR3JlZyBLcm9haC1IYXJ0bWFuCitncmVnQGtyb2FoLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2RtYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NDRhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2RtYS50eHQKQEAgLTAsMCArMSwxMTYgQEAKK0luIExpbnV4IDIuNSBrZXJuZWxzIChhbmQgbGF0ZXIpLCBVU0IgZGV2aWNlIGRyaXZlcnMgaGF2ZSBhZGRpdGlvbmFsIGNvbnRyb2wKK292ZXIgaG93IERNQSBtYXkgYmUgdXNlZCB0byBwZXJmb3JtIEkvTyBvcGVyYXRpb25zLiAgVGhlIEFQSXMgYXJlIGRldGFpbGVkCitpbiB0aGUga2VybmVsIHVzYiBwcm9ncmFtbWluZyBndWlkZSAoa2VybmVsZG9jLCBmcm9tIHRoZSBzb3VyY2UgY29kZSkuCisKKworQVBJIE9WRVJWSUVXCisKK1RoZSBiaWcgcGljdHVyZSBpcyB0aGF0IFVTQiBkcml2ZXJzIGNhbiBjb250aW51ZSB0byBpZ25vcmUgbW9zdCBETUEgaXNzdWVzLAordGhvdWdoIHRoZXkgc3RpbGwgbXVzdCBwcm92aWRlIERNQS1yZWFkeSBidWZmZXJzIChzZWUgRE1BLW1hcHBpbmcudHh0KS4KK1RoYXQncyBob3cgdGhleSd2ZSB3b3JrZWQgdGhyb3VnaCB0aGUgMi40IChhbmQgZWFybGllcikga2VybmVscy4KKworT1I6ICB0aGV5IGNhbiBub3cgYmUgRE1BLWF3YXJlLgorCistIE5ldyBjYWxscyBlbmFibGUgRE1BLWF3YXJlIGRyaXZlcnMsIGxldHRpbmcgdGhlbSBhbGxvY2F0ZSBkbWEgYnVmZmVycyBhbmQKKyAgbWFuYWdlIGRtYSBtYXBwaW5ncyBmb3IgZXhpc3RpbmcgZG1hLXJlYWR5IGJ1ZmZlcnMgKHNlZSBiZWxvdykuCisKKy0gVVJCcyBoYXZlIGFuIGFkZGl0aW9uYWwgInRyYW5zZmVyX2RtYSIgZmllbGQsIGFzIHdlbGwgYXMgYSB0cmFuc2Zlcl9mbGFncworICBiaXQgc2F5aW5nIGlmIGl0J3MgdmFsaWQuICAoQ29udHJvbCByZXF1ZXN0cyBhbHNvIGhhdmUgInNldHVwX2RtYSIgYW5kIGEKKyAgY29ycmVzcG9uZGluZyB0cmFuc2Zlcl9mbGFncyBiaXQuKQorCistICJ1c2Jjb3JlIiB3aWxsIG1hcCB0aG9zZSBETUEgYWRkcmVzc2VzLCBpZiBhIERNQS1hd2FyZSBkcml2ZXIgZGlkbid0IGRvCisgIGl0IGZpcnN0IGFuZCBzZXQgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgb3IgVVJCX05PX1NFVFVQX0RNQV9NQVAuICBIQ0RzCisgIGRvbid0IG1hbmFnZSBkbWEgbWFwcGluZ3MgZm9yIFVSQnMuCisKKy0gVGhlcmUncyBhIG5ldyAiZ2VuZXJpYyBETUEgQVBJIiwgcGFydHMgb2Ygd2hpY2ggYXJlIHVzYWJsZSBieSBVU0IgZGV2aWNlCisgIGRyaXZlcnMuICBOZXZlciB1c2UgZG1hX3NldF9tYXNrKCkgb24gYW55IFVTQiBpbnRlcmZhY2Ugb3IgZGV2aWNlOyB0aGF0CisgIHdvdWxkIHBvdGVudGlhbGx5IGJyZWFrIGFsbCBkZXZpY2VzIHNoYXJpbmcgdGhhdCBidXMuCisKKworRUxJTUlOQVRJTkcgQ09QSUVTCisKK0l0J3MgZ29vZCB0byBhdm9pZCBtYWtpbmcgQ1BVcyBjb3B5IGRhdGEgbmVlZGxlc3NseS4gIFRoZSBjb3N0cyBjYW4gYWRkIHVwLAorYW5kIGVmZmVjdHMgbGlrZSBjYWNoZS10cmFzaGluZyBjYW4gaW1wb3NlIHN1YnRsZSBwZW5hbHRpZXMuCisKKy0gV2hlbiB5b3UncmUgYWxsb2NhdGluZyBhIGJ1ZmZlciBmb3IgRE1BIHB1cnBvc2VzIGFueXdheSwgdXNlIHRoZSBidWZmZXIKKyAgcHJpbWl0aXZlcy4gIFRoaW5rIG9mIHRoZW0gYXMga21hbGxvYyBhbmQga2ZyZWUgdGhhdCBnaXZlIHlvdSB0aGUgcmlnaHQKKyAga2luZCBvZiBhZGRyZXNzZXMgdG8gc3RvcmUgaW4gdXJiLT50cmFuc2Zlcl9idWZmZXIgYW5kIHVyYi0+dHJhbnNmZXJfZG1hLAorICB3aGlsZSBndWFyYW50ZWVpbmcgdGhhdCBubyBoaWRkZW4gY29waWVzIHRocm91Z2ggRE1BICJib3VuY2UiIGJ1ZmZlcnMgd2lsbAorICBzbG93IHRoaW5ncyBkb3duLiAgWW91J2QgYWxzbyBzZXQgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgaW4KKyAgdXJiLT50cmFuc2Zlcl9mbGFnczoKKworCXZvaWQgKnVzYl9idWZmZXJfYWxsb2MgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQlpbnQgbWVtX2ZsYWdzLCBkbWFfYWRkcl90ICpkbWEpOworCisJdm9pZCB1c2JfYnVmZmVyX2ZyZWUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQl2b2lkICphZGRyLCBkbWFfYWRkcl90IGRtYSk7CisKKyAgRm9yIGNvbnRyb2wgdHJhbnNmZXJzIHlvdSBjYW4gdXNlIHRoZSBidWZmZXIgcHJpbWl0aXZlcyBvciBub3QgZm9yIGVhY2gKKyAgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlciBhbmQgc2V0dXAgYnVmZmVyIGluZGVwZW5kZW50bHkuICBTZXQgdGhlIGZsYWcgYml0cworICBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCBhbmQgVVJCX05PX1NFVFVQX0RNQV9NQVAgdG8gaW5kaWNhdGUgd2hpY2gKKyAgYnVmZmVycyB5b3UgaGF2ZSBwcmVwYXJlZC4gIEZvciBub24tY29udHJvbCB0cmFuc2ZlcnMgVVJCX05PX1NFVFVQX0RNQV9NQVAKKyAgaXMgaWdub3JlZC4KKworICBUaGUgbWVtb3J5IGJ1ZmZlciByZXR1cm5lZCBpcyAiZG1hLWNvaGVyZW50Ijsgc29tZXRpbWVzIHlvdSBtaWdodCBuZWVkIHRvCisgIGZvcmNlIGEgY29uc2lzdGVudCBtZW1vcnkgYWNjZXNzIG9yZGVyaW5nIGJ5IHVzaW5nIG1lbW9yeSBiYXJyaWVycy4gIEl0J3MKKyAgbm90IHVzaW5nIGEgc3RyZWFtaW5nIERNQSBtYXBwaW5nLCBzbyBpdCdzIGdvb2QgZm9yIHNtYWxsIHRyYW5zZmVycyBvbgorICBzeXN0ZW1zIHdoZXJlIHRoZSBJL08gd291bGQgb3RoZXJ3aXNlIHRpZSB1cCBhbiBJT01NVSBtYXBwaW5nLiAgKFNlZQorICBEb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dCBmb3IgZGVmaW5pdGlvbnMgb2YgImNvaGVyZW50IiBhbmQgInN0cmVhbWluZyIKKyAgRE1BIG1hcHBpbmdzLikKKworICBBc2tpbmcgZm9yIDEvTnRoIG9mIGEgcGFnZSAoYXMgd2VsbCBhcyBhc2tpbmcgZm9yIE4gcGFnZXMpIGlzIHJlYXNvbmFibHkKKyAgc3BhY2UtZWZmaWNpZW50LgorCistIERldmljZXMgb24gc29tZSBFSENJIGNvbnRyb2xsZXJzIGNvdWxkIGhhbmRsZSBETUEgdG8vZnJvbSBoaWdoIG1lbW9yeS4KKyAgRHJpdmVyIHByb2JlKCkgcm91dGluZXMgY2FuIG5vdGljZSB0aGlzIHVzaW5nIGEgZ2VuZXJpYyBETUEgY2FsbCwgdGhlbgorICB0ZWxsIGhpZ2hlciBsZXZlbCBjb2RlIChuZXR3b3JrLCBzY3NpLCBldGMpIGFib3V0IGl0IGxpa2UgdGhpczoKKworCWlmIChkbWFfc3VwcG9ydGVkICgmaW50Zi0+ZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpKQorCQluZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKworICBUaGF0IGNhbiBlbGltaW5hdGUgZG1hIGJvdW5jZSBidWZmZXJpbmcgb2YgcmVxdWVzdHMgdGhhdCBvcmlnaW5hdGUgKG9yCisgIHRlcm1pbmF0ZSkgaW4gaGlnaCBtZW1vcnksIGluIGNhc2VzIHdoZXJlIHRoZSBidWZmZXJzIGFyZW4ndCBhbGxvY2F0ZWQKKyAgd2l0aCB1c2JfYnVmZmVyX2FsbG9jKCkgYnV0IGluc3RlYWQgYXJlIGRtYS1tYXBwZWQuCisKKworV09SS0lORyBXSVRIIEVYSVNUSU5HIEJVRkZFUlMKKworRXhpc3RpbmcgYnVmZmVycyBhcmVuJ3QgdXNhYmxlIGZvciBETUEgd2l0aG91dCBmaXJzdCBiZWluZyBtYXBwZWQgaW50byB0aGUKK0RNQSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBkZXZpY2UuCisKKy0gV2hlbiB5b3UncmUgdXNpbmcgc2NhdHRlcmxpc3RzLCB5b3UgY2FuIG1hcCBldmVyeXRoaW5nIGF0IG9uY2UuICBPbiBzb21lCisgIHN5c3RlbXMsIHRoaXMga2lja3MgaW4gYW4gSU9NTVUgYW5kIHR1cm5zIHRoZSBzY2F0dGVybGlzdHMgaW50byBzaW5nbGUKKyAgRE1BIHRyYW5zYWN0aW9uczoKKworCWludCB1c2JfYnVmZmVyX21hcF9zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzKTsKKworCXZvaWQgdXNiX2J1ZmZlcl9kbWFzeW5jX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKTsKKworCXZvaWQgdXNiX2J1ZmZlcl91bm1hcF9zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cyk7CisKKyAgSXQncyBwcm9iYWJseSBlYXNpZXIgdG8gdXNlIHRoZSBuZXcgdXNiX3NnXyooKSBjYWxscywgd2hpY2ggZG8gdGhlIERNQQorICBtYXBwaW5nIGFuZCBhcHBseSBvdGhlciB0d2Vha3MgdG8gbWFrZSBzY2F0dGVybGlzdCBpL28gYmUgZmFzdC4KKworLSBTb21lIGRyaXZlcnMgbWF5IHByZWZlciB0byB3b3JrIHdpdGggdGhlIG1vZGVsIHRoYXQgdGhleSdyZSBtYXBwaW5nIGxhcmdlCisgIGJ1ZmZlcnMsIHN5bmNocm9uaXppbmcgdGhlaXIgc2FmZSByZS11c2UuICAoSWYgdGhlcmUncyBubyByZS11c2UsIHRoZW4gbGV0CisgIHVzYmNvcmUgZG8gdGhlIG1hcC91bm1hcC4pICBMYXJnZSBwZXJpb2RpYyB0cmFuc2ZlcnMgbWFrZSBnb29kIGV4YW1wbGVzCisgIGhlcmUsIHNpbmNlIGl0J3MgY2hlYXBlciB0byBqdXN0IHN5bmNocm9uaXplIHRoZSBidWZmZXIgdGhhbiB0byB1bm1hcCBpdAorICBlYWNoIHRpbWUgYW4gdXJiIGNvbXBsZXRlcyBhbmQgdGhlbiByZS1tYXAgaXQgb24gZHVyaW5nIHJlc3VibWlzc2lvbi4KKworICBUaGVzZSBjYWxscyBhbGwgd29yayB3aXRoIGluaXRpYWxpemVkIHVyYnM6ICB1cmItPmRldiwgdXJiLT5waXBlLAorICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgYW5kIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCBtdXN0IGFsbCBiZQorICB2YWxpZCB3aGVuIHRoZXNlIGNhbGxzIGFyZSB1c2VkICh1cmItPnNldHVwX3BhY2tldCBtdXN0IGJlIHZhbGlkIHRvbworICBpZiB1cmIgaXMgYSBjb250cm9sIHJlcXVlc3QpOgorCisJc3RydWN0IHVyYiAqdXNiX2J1ZmZlcl9tYXAgKHN0cnVjdCB1cmIgKnVyYik7CisKKwl2b2lkIHVzYl9idWZmZXJfZG1hc3luYyAoc3RydWN0IHVyYiAqdXJiKTsKKworCXZvaWQgdXNiX2J1ZmZlcl91bm1hcCAoc3RydWN0IHVyYiAqdXJiKTsKKworICBUaGUgY2FsbHMgbWFuYWdlIHVyYi0+dHJhbnNmZXJfZG1hIGZvciB5b3UsIGFuZCBzZXQgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAKKyAgc28gdGhhdCB1c2Jjb3JlIHdvbid0IG1hcCBvciB1bm1hcCB0aGUgYnVmZmVyLiAgVGhlIHNhbWUgZ29lcyBmb3IKKyAgdXJiLT5zZXR1cF9kbWEgYW5kIFVSQl9OT19TRVRVUF9ETUFfTUFQIGZvciBjb250cm9sIHJlcXVlc3RzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvZWhjaS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9laGNpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM2YjdlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZWhjaS50eHQKQEAgLTAsMCArMSwyMTIgQEAKKzI3LURlYy0yMDAyCisKK1RoZSBFSENJIGRyaXZlciBpcyB1c2VkIHRvIHRhbGsgdG8gaGlnaCBzcGVlZCBVU0IgMi4wIGRldmljZXMgdXNpbmcKK1VTQiAyLjAtY2FwYWJsZSBob3N0IGNvbnRyb2xsZXIgaGFyZHdhcmUuICBUaGUgVVNCIDIuMCBzdGFuZGFyZCBpcworY29tcGF0aWJsZSB3aXRoIHRoZSBVU0IgMS4xIHN0YW5kYXJkLiBJdCBkZWZpbmVzIHRocmVlIHRyYW5zZmVyIHNwZWVkczoKKworICAgIC0gIkhpZ2ggU3BlZWQiIDQ4MCBNYml0L3NlYyAoNjAgTUJ5dGUvc2VjKQorICAgIC0gIkZ1bGwgU3BlZWQiIDEyIE1iaXQvc2VjICgxLjUgTUJ5dGUvc2VjKQorICAgIC0gIkxvdyBTcGVlZCIgMS41IE1iaXQvc2VjCisKK1VTQiAxLjEgb25seSBhZGRyZXNzZWQgZnVsbCBzcGVlZCBhbmQgbG93IHNwZWVkLiAgSGlnaCBzcGVlZCBkZXZpY2VzCitjYW4gYmUgdXNlZCBvbiBVU0IgMS4xIHN5c3RlbXMsIGJ1dCB0aGV5IHNsb3cgZG93biB0byBVU0IgMS4xIHNwZWVkcy4gCisKK1VTQiAxLjEgZGV2aWNlcyBtYXkgYWxzbyBiZSB1c2VkIG9uIFVTQiAyLjAgc3lzdGVtcy4gIFdoZW4gcGx1Z2dlZAoraW50byBhbiBFSENJIGNvbnRyb2xsZXIsIHRoZXkgYXJlIGdpdmVuIHRvIGEgVVNCIDEuMSAiY29tcGFuaW9uIgorY29udHJvbGxlciwgd2hpY2ggaXMgYSBPSENJIG9yIFVIQ0kgY29udHJvbGxlciBhcyBub3JtYWxseSB1c2VkIHdpdGgKK3N1Y2ggZGV2aWNlcy4gIFdoZW4gVVNCIDEuMSBkZXZpY2VzIHBsdWcgaW50byBVU0IgMi4wIGh1YnMsIHRoZXkKK2ludGVyYWN0IHdpdGggdGhlIEVIQ0kgY29udHJvbGxlciB0aHJvdWdoIGEgIlRyYW5zYWN0aW9uIFRyYW5zbGF0b3IiCisoVFQpIGluIHRoZSBodWIsIHdoaWNoIHR1cm5zIGxvdyBvciBmdWxsIHNwZWVkIHRyYW5zYWN0aW9ucyBpbnRvCitoaWdoIHNwZWVkICJzcGxpdCB0cmFuc2FjdGlvbnMiIHRoYXQgZG9uJ3Qgd2FzdGUgdHJhbnNmZXIgYmFuZHdpZHRoLgorCitBdCB0aGlzIHdyaXRpbmcsIHRoaXMgZHJpdmVyIGhhcyBiZWVuIHNlZW4gdG8gd29yayB3aXRoIGltcGxlbWVudGF0aW9ucworb2YgRUhDSSBmcm9tIChpbiBhbHBoYWJldGljYWwgb3JkZXIpOiAgSW50ZWwsIE5FQywgUGhpbGlwcywgYW5kIFZJQS4KK090aGVyIEVIQ0kgaW1wbGVtZW50YXRpb25zIGFyZSBiZWNvbWluZyBhdmFpbGFibGUgZnJvbSBvdGhlciB2ZW5kb3JzOworeW91IHNob3VsZCBleHBlY3QgdGhpcyBkcml2ZXIgdG8gd29yayB3aXRoIHRoZW0gdG9vLgorCitXaGlsZSB1c2Itc3RvcmFnZSBkZXZpY2VzIGhhdmUgYmVlbiBhdmFpbGFibGUgc2luY2UgbWlkLTIwMDEgKHdvcmtpbmcKK3F1aXRlIHNwZWVkaWx5IG9uIHRoZSAyLjQgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciksIGh1YnMgaGF2ZSBvbmx5CitiZWVuIGF2YWlsYWJsZSBzaW5jZSBsYXRlIDIwMDEsIGFuZCBvdGhlciBraW5kcyBvZiBoaWdoIHNwZWVkIGRldmljZXMKK2FwcGVhciB0byBiZSBvbiBob2xkIHVudGlsIG1vcmUgc3lzdGVtcyBjb21lIHdpdGggVVNCIDIuMCBidWlsdC1pbi4KK1N1Y2ggbmV3IHN5c3RlbXMgaGF2ZSBiZWVuIGF2YWlsYWJsZSBzaW5jZSBlYXJseSAyMDAyLCBhbmQgYmVjYW1lIG11Y2gKK21vcmUgdHlwaWNhbCBpbiB0aGUgc2Vjb25kIGhhbGYgb2YgMjAwMi4KKworTm90ZSB0aGF0IFVTQiAyLjAgc3VwcG9ydCBpbnZvbHZlcyBtb3JlIHRoYW4ganVzdCBFSENJLiAgSXQgcmVxdWlyZXMKK290aGVyIGNoYW5nZXMgdG8gdGhlIExpbnV4LVVTQiBjb3JlIEFQSXMsIGluY2x1ZGluZyB0aGUgaHViIGRyaXZlciwKK2J1dCB0aG9zZSBjaGFuZ2VzIGhhdmVuJ3QgbmVlZGVkIHRvIHJlYWxseSBjaGFuZ2UgdGhlIGJhc2ljICJ1c2Jjb3JlIgorQVBJcyBleHBvc2VkIHRvIFVTQiBkZXZpY2UgZHJpdmVycy4KKworLSBEYXZpZCBCcm93bmVsbAorICA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCitGVU5DVElPTkFMSVRZCisKK1RoaXMgZHJpdmVyIGlzIHJlZ3VsYXJseSB0ZXN0ZWQgb24geDg2IGhhcmR3YXJlLCBhbmQgaGFzIGFsc28gYmVlbgordXNlZCBvbiBQUEMgaGFyZHdhcmUgc28gYmlnL2xpdHRsZSBlbmRpYW5uZXNzIGlzc3VlcyBzaG91bGQgYmUgZ29uZS4KK0l0J3MgYmVsaWV2ZWQgdG8gZG8gYWxsIHRoZSByaWdodCBQQ0kgbWFnaWMgc28gdGhhdCBJL08gd29ya3MgZXZlbiBvbgorc3lzdGVtcyB3aXRoIGludGVyZXN0aW5nIERNQSBtYXBwaW5nIGlzc3Vlcy4KKworVHJhbnNmZXIgVHlwZXMKKworQXQgdGhpcyB3cml0aW5nIHRoZSBkcml2ZXIgc2hvdWxkIGNvbWZvcnRhYmx5IGhhbmRsZSBhbGwgY29udHJvbCwgYnVsaywKK2FuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLCBpbmNsdWRpbmcgcmVxdWVzdHMgdG8gVVNCIDEuMSBkZXZpY2VzIHRocm91Z2gKK3RyYW5zYWN0aW9uIHRyYW5zbGF0b3JzIChUVHMpIGluIFVTQiAyLjAgaHVicy4gIEJ1dCB5b3UgbWF5IGZpbmQgYnVncy4KKworSGlnaCBTcGVlZCBJc29jaHJvbm91cyAoSVNPKSB0cmFuc2ZlciBzdXBwb3J0IGlzIGFsc28gZnVuY3Rpb25hbCwgYnV0CithdCB0aGlzIHdyaXRpbmcgbm8gTGludXggZHJpdmVycyBoYXZlIGJlZW4gdXNpbmcgdGhhdCBzdXBwb3J0LgorCitGdWxsIFNwZWVkIElzb2Nocm9ub3VzIHRyYW5zZmVyIHN1cHBvcnQsIHRocm91Z2ggdHJhbnNhY3Rpb24gdHJhbnNsYXRvcnMsCitpcyBub3QgeWV0IGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBzcGxpdCB0cmFuc2FjdGlvbiBzdXBwb3J0IGZvciBJU08KK3RyYW5zZmVycyBjYW4ndCBzaGFyZSBtdWNoIGNvZGUgd2l0aCB0aGUgY29kZSBmb3IgaGlnaCBzcGVlZCBJU08gdHJhbnNmZXJzLAorc2luY2UgRUhDSSByZXByZXNlbnRzIHRoZXNlIHdpdGggYSBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmUuICBTbyBmb3Igbm93LAorbW9zdCBVU0IgYXVkaW8gYW5kIHZpZGVvIGRldmljZXMgY2FuJ3QgYmUgY29ubmVjdGVkIHRvIGhpZ2ggc3BlZWQgYnVzZXMuCisKK0RyaXZlciBCZWhhdmlvcgorCitUcmFuc2ZlcnMgb2YgYWxsIHR5cGVzIGNhbiBiZSBxdWV1ZWQuICBUaGlzIG1lYW5zIHRoYXQgY29udHJvbCB0cmFuc2ZlcnMKK2Zyb20gYSBkcml2ZXIgb24gb25lIGludGVyZmFjZSAob3IgdGhyb3VnaCB1c2Jmcykgd29uJ3QgaW50ZXJmZXJlIHdpdGgKK29uZXMgZnJvbSBhbm90aGVyIGRyaXZlciwgYW5kIHRoYXQgaW50ZXJydXB0IHRyYW5zZmVycyBjYW4gdXNlIHBlcmlvZHMKK29mIG9uZSBmcmFtZSB3aXRob3V0IHJpc2tpbmcgZGF0YSBsb3NzIGR1ZSB0byBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBjb3N0cy4KKworVGhlIEVIQ0kgcm9vdCBodWIgY29kZSBoYW5kcyBvZmYgVVNCIDEuMSBkZXZpY2VzIHRvIGl0cyBjb21wYW5pb24KK2NvbnRyb2xsZXIuICBUaGlzIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8ga25vdyBhbnl0aGluZyBhYm91dCB0aG9zZQorZHJpdmVyczsgYSBPSENJIG9yIFVIQ0kgZHJpdmVyIHRoYXQgd29ya3MgYWxyZWFkeSBkb2Vzbid0IG5lZWQgdG8gY2hhbmdlCitqdXN0IGJlY2F1c2UgdGhlIEVIQ0kgZHJpdmVyIGlzIGFsc28gcHJlc2VudC4KKworVGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggcG93ZXIgbWFuYWdlbWVudDsgc3VzcGVuZC9yZXN1bWUgZG9lc24ndAorYmVoYXZlIHF1aXRlIHJpZ2h0IGF0IHRoZSBtb21lbnQuCisKK0Fsc28sIHNvbWUgc2hvcnRjdXRzIGhhdmUgYmVlbiB0YWtlbiB3aXRoIHRoZSBzY2hlZHVsaW5nIHBlcmlvZGljCit0cmFuc2FjdGlvbnMgKGludGVycnVwdCBhbmQgaXNvY2hyb25vdXMgdHJhbnNmZXJzKS4gIFRoZXNlIHBsYWNlIHNvbWUKK2xpbWl0cyBvbiB0aGUgbnVtYmVyIG9mIHBlcmlvZGljIHRyYW5zYWN0aW9ucyB0aGF0IGNhbiBiZSBzY2hlZHVsZWQsCithbmQgcHJldmVudCB1c2Ugb2YgcG9sbGluZyBpbnRlcnZhbHMgb2YgbGVzcyB0aGFuIG9uZSBmcmFtZS4KKworCitVU0UgQlkKKworQXNzdW1pbmcgeW91IGhhdmUgYW4gRUhDSSBjb250cm9sbGVyIChvbiBhIFBDSSBjYXJkIG9yIG1vdGhlcmJvYXJkKQorYW5kIGhhdmUgY29tcGlsZWQgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGxvYWQgdGhpcyBsaWtlOgorCisgICAgIyBtb2Rwcm9iZSBlaGNpLWhjZAorCithbmQgcmVtb3ZlIGl0IGJ5OgorCisgICAgIyBybW1vZCBlaGNpLWhjZAorCitZb3Ugc2hvdWxkIGFsc28gaGF2ZSBhIGRyaXZlciBmb3IgYSAiY29tcGFuaW9uIGNvbnRyb2xsZXIiLCBzdWNoIGFzCisib2hjaS1oY2QiICBvciAidWhjaS1oY2QiLiAgSW4gY2FzZSBvZiBhbnkgdHJvdWJsZSB3aXRoIHRoZSBFSENJIGRyaXZlciwKK3JlbW92ZSBpdHMgbW9kdWxlIGFuZCB0aGVuIHRoZSBkcml2ZXIgZm9yIHRoYXQgY29tcGFuaW9uIGNvbnRyb2xsZXIgd2lsbAordGFrZSBvdmVyIChhdCBsb3dlciBzcGVlZCkgYWxsIHRoZSBkZXZpY2VzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGhhbmRsZWQKK2J5IHRoZSBFSENJIGRyaXZlci4KKworTW9kdWxlIHBhcmFtZXRlcnMgKHBhc3MgdG8gIm1vZHByb2JlIikgaW5jbHVkZToKKworICAgIGxvZzJfaXJxX3RocmVzaCAoZGVmYXVsdCAwKToKKwlMb2cyIG9mIGRlZmF1bHQgaW50ZXJydXB0IGRlbGF5LCBpbiBtaWNyb2ZyYW1lcy4gIFRoZSBkZWZhdWx0CisJdmFsdWUgaXMgMCwgaW5kaWNhdGluZyAxIG1pY3JvZnJhbWUgKDEyNSB1c2VjKS4gIE1heGltdW0gdmFsdWUKKwlpcyA2LCBpbmRpY2F0aW5nIDJeNiA9IDY0IG1pY3JvZnJhbWVzLiAgVGhpcyBjb250cm9scyBob3cgb2Z0ZW4KKwl0aGUgRUhDSSBjb250cm9sbGVyIGNhbiBpc3N1ZSBpbnRlcnJ1cHRzLgorCitJZiB5b3UncmUgdXNpbmcgdGhpcyBkcml2ZXIgb24gYSAyLjUga2VybmVsLCBhbmQgeW91J3ZlIGVuYWJsZWQgVVNCCitkZWJ1Z2dpbmcgc3VwcG9ydCwgeW91J2xsIHNlZSB0aHJlZSBmaWxlcyBpbiB0aGUgInN5c2ZzIiBkaXJlY3RvcnkgZm9yCithbnkgRUhDSSBjb250cm9sbGVyOgorCisJImFzeW5jIiBkdW1wcyB0aGUgYXN5bmNocm9ub3VzIHNjaGVkdWxlLCB1c2VkIGZvciBjb250cm9sCisJCWFuZCBidWxrIHRyYW5zZmVycy4gIFNob3dzIGVhY2ggYWN0aXZlIHFoIGFuZCB0aGUgcXRkcworCQlwZW5kaW5nLCB1c3VhbGx5IG9uZSBxdGQgcGVyIHVyYi4gIChMb29rIGF0IGl0IHdpdGgKKwkJdXNiLXN0b3JhZ2UgZG9pbmcgZGlzayBJL087IHdhdGNoIHRoZSByZXF1ZXN0IHF1ZXVlcyEpCisJInBlcmlvZGljIiBkdW1wcyB0aGUgcGVyaW9kaWMgc2NoZWR1bGUsIHVzZWQgZm9yIGludGVycnVwdAorCQlhbmQgaXNvY2hyb25vdXMgdHJhbnNmZXJzLiAgRG9lc24ndCBzaG93IHF0ZHMuCisJInJlZ2lzdGVycyIgc2hvdyBjb250cm9sbGVyIHJlZ2lzdGVyIHN0YXRlLCBhbmQKKworVGhlIGNvbnRlbnRzIG9mIHRob3NlIGZpbGVzIGNhbiBoZWxwIGlkZW50aWZ5IGRyaXZlciBwcm9ibGVtcy4KKworCitEZXZpY2UgZHJpdmVycyBzaG91bGRuJ3QgY2FyZSB3aGV0aGVyIHRoZXkncmUgcnVubmluZyBvdmVyIEVIQ0kgb3Igbm90LAorYnV0IHRoZXkgbWF5IHdhbnQgdG8gY2hlY2sgZm9yICJ1c2JfZGV2aWNlLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCIuCitIaWdoIHNwZWVkIGRldmljZXMgY2FuIGRvIHRoaW5ncyB0aGF0IGZ1bGwgc3BlZWQgKG9yIGxvdyBzcGVlZCkgb25lcworY2FuJ3QsIHN1Y2ggYXMgImhpZ2ggYmFuZHdpZHRoIiBwZXJpb2RpYyAoaW50ZXJydXB0IG9yIElTTykgdHJhbnNmZXJzLgorQWxzbywgc29tZSB2YWx1ZXMgaW4gZGV2aWNlIGRlc2NyaXB0b3JzIChzdWNoIGFzIHBvbGxpbmcgaW50ZXJ2YWxzIGZvcgorcGVyaW9kaWMgdHJhbnNmZXJzKSB1c2UgZGlmZmVyZW50IGVuY29kaW5ncyB3aGVuIG9wZXJhdGluZyBhdCBoaWdoIHNwZWVkLgorCitIb3dldmVyLCBkbyBtYWtlIGEgcG9pbnQgb2YgdGVzdGluZyBkZXZpY2UgZHJpdmVycyB0aHJvdWdoIFVTQiAyLjAgaHVicy4KK1Rob3NlIGh1YnMgcmVwb3J0IHNvbWUgZmFpbHVyZXMsIHN1Y2ggYXMgZGlzY29ubmVjdGlvbnMsIGRpZmZlcmVudGx5IHdoZW4KK3RyYW5zYWN0aW9uIHRyYW5zbGF0b3JzIGFyZSBpbiB1c2U7IHNvbWUgZHJpdmVycyBoYXZlIGJlZW4gc2VlbiB0byBiZWhhdmUKK2JhZGx5IHdoZW4gdGhleSBzZWUgZGlmZmVyZW50IGZhdWx0cyB0aGFuIE9IQ0kgb3IgVUhDSSByZXBvcnQuCisKKworUEVSRk9STUFOQ0UKKworVVNCIDIuMCB0aHJvdWdocHV0IGlzIGdhdGVkIGJ5IHR3byBtYWluIGZhY3RvcnM6ICBob3cgZmFzdCB0aGUgaG9zdAorY29udHJvbGxlciBjYW4gcHJvY2VzcyByZXF1ZXN0cywgYW5kIGhvdyBmYXN0IGRldmljZXMgY2FuIHJlc3BvbmQgdG8KK3RoZW0uICBUaGUgNDgwIE1iaXQvc2VjICJyYXcgdHJhbnNmZXIgcmF0ZSIgaXMgb2JleWVkIGJ5IGFsbCBkZXZpY2VzLAorYnV0IGFnZ3JlZ2F0ZSB0aHJvdWdocHV0IGlzIGFsc28gYWZmZWN0ZWQgYnkgaXNzdWVzIGxpa2UgZGVsYXlzIGJldHdlZW4KK2luZGl2aWR1YWwgaGlnaCBzcGVlZCBwYWNrZXRzLCBkcml2ZXIgaW50ZWxsaWdlbmNlLCBhbmQgb2YgY291cnNlIHRoZQorb3ZlcmFsbCBzeXN0ZW0gbG9hZC4gIExhdGVuY3kgaXMgYWxzbyBhIHBlcmZvcm1hbmNlIGNvbmNlcm4uCisKK0J1bGsgdHJhbnNmZXJzIGFyZSBtb3N0IG9mdGVuIHVzZWQgd2hlcmUgdGhyb3VnaHB1dCBpcyBhbiBpc3N1ZS4gIEl0J3MKK2dvb2QgdG8ga2VlcCBpbiBtaW5kIHRoYXQgYnVsayB0cmFuc2ZlcnMgYXJlIGFsd2F5cyBpbiA1MTIgYnl0ZSBwYWNrZXRzLAorYW5kIGF0IG1vc3QgMTMgb2YgdGhvc2UgZml0IGludG8gb25lIFVTQiAyLjAgbWljcm9mcmFtZS4gIEVpZ2h0IFVTQiAyLjAKK21pY3JvZnJhbWVzIGZpdCBpbiBhIFVTQiAxLjEgZnJhbWU7IGEgbWljcm9mcmFtZSBpcyAxIG1zZWMvOCA9IDEyNSB1c2VjLgorCitTbyBtb3JlIHRoYW4gNTAgTUJ5dGUvc2VjIGlzIGF2YWlsYWJsZSBmb3IgYnVsayB0cmFuc2ZlcnMsIHdoZW4gYm90aAoraGFyZHdhcmUgYW5kIGRldmljZSBkcml2ZXIgc29mdHdhcmUgYWxsb3cgaXQuICBQZXJpb2RpYyB0cmFuc2ZlciBtb2RlcworKGlzb2Nocm9ub3VzIGFuZCBpbnRlcnJ1cHQpIGFsbG93IHRoZSBsYXJnZXIgcGFja2V0IHNpemVzIHdoaWNoIGxldCB5b3UKK2FwcHJvYWNoIHRoZSBxdW90ZWQgNDgwIE1CaXQvc2VjIHRyYW5zZmVyIHJhdGUuCisKK0hhcmR3YXJlIFBlcmZvcm1hbmNlCisKK0F0IHRoaXMgd3JpdGluZywgaW5kaXZpZHVhbCBVU0IgMi4wIGRldmljZXMgdGVuZCB0byBtYXggb3V0IGF0IGFyb3VuZAorMjAgTUJ5dGUvc2VjIHRyYW5zZmVyIHJhdGVzLiAgVGhpcyBpcyBvZiBjb3Vyc2Ugc3ViamVjdCB0byBjaGFuZ2U7CithbmQgc29tZSBkZXZpY2VzIG5vdyBnbyBmYXN0ZXIsIHdoaWxlIG90aGVycyBnbyBzbG93ZXIuCisKK1RoZSBmaXJzdCBORUMgaW1wbGVtZW50YXRpb24gb2YgRUhDSSBzZWVtcyB0byBoYXZlIGEgaGFyZHdhcmUgYm90dGxlbmVjaworYXQgYXJvdW5kIDI4IE1CeXRlL3NlYyBhZ2dyZWdhdGUgdHJhbnNmZXIgcmF0ZS4gIFdoaWxlIHRoaXMgaXMgY2xlYXJseQorZW5vdWdoIGZvciBhIHNpbmdsZSBkZXZpY2UgYXQgMjAgTUJ5dGUvc2VjLCBwdXR0aW5nIHRocmVlIHN1Y2ggZGV2aWNlcworb250byBvbmUgYnVzIGRvZXMgbm90IGdldCB5b3UgNjAgTUJ5dGUvc2VjLiAgVGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUKK3RoYXQgdGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgd29uJ3QgZG8gY29uY3VycmVudCBVU0IgYW5kIFBDSSBhY2Nlc3MsCitzbyB0aGF0IGl0J3Mgb25seSB0cnlpbmcgc2l4IChvciBtYXliZSBzZXZlbikgVVNCIHRyYW5zYWN0aW9ucyBlYWNoCittaWNyb2ZyYW1lIHJhdGhlciB0aGFuIHRoaXJ0ZWVuLiAgKFNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHRyYWRlIG9mZgorZm9yIGEgcHJvZHVjdCB0aGF0IGJlYXQgYWxsIHRoZSBvdGhlcnMgdG8gbWFya2V0IGJ5IG92ZXIgYSB5ZWFyISkKKworSXQncyBleHBlY3RlZCB0aGF0IG5ld2VyIGltcGxlbWVudGF0aW9ucyB3aWxsIGJldHRlciB0aGlzLCB0aHJvd2luZworbW9yZSBzaWxpY29uIHJlYWwgZXN0YXRlIGF0IHRoZSBwcm9ibGVtIHNvIHRoYXQgbmV3IG1vdGhlcmJvYXJkIGNoaXAKK3NldHMgd2lsbCBnZXQgY2xvc2VyIHRvIHRoYXQgNjAgTUJ5dGUvc2VjIHRhcmdldC4gIFRoYXQgaW5jbHVkZXMgYW4KK3VwZGF0ZWQgaW1wbGVtZW50YXRpb24gZnJvbSBORUMsIGFzIHdlbGwgYXMgb3RoZXIgdmVuZG9ycycgc2lsaWNvbi4KKworVGhlcmUncyBhIG1pbmltdW0gbGF0ZW5jeSBvZiBvbmUgbWljcm9mcmFtZSAoMTI1IHVzZWMpIGZvciB0aGUgaG9zdAordG8gcmVjZWl2ZSBpbnRlcnJ1cHRzIGZyb20gdGhlIEVIQ0kgY29udHJvbGxlciBpbmRpY2F0aW5nIGNvbXBsZXRpb24KK29mIHJlcXVlc3RzLiAgVGhhdCBsYXRlbmN5IGlzIHR1bmFibGU7IHRoZXJlJ3MgYSBtb2R1bGUgb3B0aW9uLiAgQnkKK2RlZmF1bHQgZWhjaS1oY2QgZHJpdmVyIHVzZXMgdGhlIG1pbmltdW0gbGF0ZW5jeSwgd2hpY2ggbWVhbnMgdGhhdCBpZgoreW91IGlzc3VlIGEgY29udHJvbCBvciBidWxrIHJlcXVlc3QgeW91IGNhbiBvZnRlbiBleHBlY3QgdG8gbGVhcm4gdGhhdAoraXQgY29tcGxldGVkIGluIGxlc3MgdGhhbiAyNTAgdXNlYyAoZGVwZW5kaW5nIG9uIHRyYW5zZmVyIHNpemUpLgorCitTb2Z0d2FyZSBQZXJmb3JtYW5jZQorCitUbyBnZXQgZXZlbiAyMCBNQnl0ZS9zZWMgdHJhbnNmZXIgcmF0ZXMsIExpbnV4LVVTQiBkZXZpY2UgZHJpdmVycyB3aWxsCituZWVkIHRvIGtlZXAgdGhlIEVIQ0kgcXVldWUgZnVsbC4gIFRoYXQgbWVhbnMgaXNzdWluZyBsYXJnZSByZXF1ZXN0cywKK29yIHVzaW5nIGJ1bGsgcXVldWluZyBpZiBhIHNlcmllcyBvZiBzbWFsbCByZXF1ZXN0cyBuZWVkcyB0byBiZSBpc3N1ZWQuCitXaGVuIGRyaXZlcnMgZG9uJ3QgZG8gdGhhdCwgdGhlaXIgcGVyZm9ybWFuY2UgcmVzdWx0cyB3aWxsIHNob3cgaXQuCisKK0luIHR5cGljYWwgc2l0dWF0aW9ucywgYSB1c2JfYnVsa19tc2coKSBsb29wIHdyaXRpbmcgb3V0IDQgS0IgY2h1bmtzIGlzCitnb2luZyB0byB3YXN0ZSBtb3JlIHRoYW4gaGFsZiB0aGUgVVNCIDIuMCBiYW5kd2lkdGguICBEZWxheXMgYmV0d2VlbiB0aGUKK0kvTyBjb21wbGV0aW9uIGFuZCB0aGUgZHJpdmVyIGlzc3VpbmcgdGhlIG5leHQgcmVxdWVzdCB3aWxsIHRha2UgbG9uZ2VyCit0aGFuIHRoZSBJL08uICBJZiB0aGF0IHNhbWUgbG9vcCB1c2VkIDE2IEtCIGNodW5rcywgaXQnZCBiZSBiZXR0ZXI7IGEKK3NlcXVlbmNlIG9mIDEyOCBLQiBjaHVua3Mgd291bGQgd2FzdGUgYSBsb3QgbGVzcy4KKworQnV0IHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiBzdWNoIGxhcmdlIEkvTyBidWZmZXJzIHRvIG1ha2Ugc3luY2hyb25vdXMKK0kvTyBiZSBlZmZpY2llbnQsIGl0J3MgYmV0dGVyIHRvIGp1c3QgcXVldWUgdXAgc2V2ZXJhbCAoYnVsaykgcmVxdWVzdHMKK3RvIHRoZSBIQywgYW5kIHdhaXQgZm9yIHRoZW0gYWxsIHRvIGNvbXBsZXRlIChvciBiZSBjYW5jZWxlZCBvbiBlcnJvcikuCitTdWNoIFVSQiBxdWV1aW5nIHNob3VsZCB3b3JrIHdpdGggYWxsIHRoZSBVU0IgMS4xIEhDIGRyaXZlcnMgdG9vLgorCitJbiB0aGUgTGludXggMi41IGtlcm5lbHMsIG5ldyB1c2Jfc2dfKigpIGFwaSBjYWxscyBoYXZlIGJlZW4gZGVmaW5lZDsgdGhleQorcXVldWUgYWxsIHRoZSBidWZmZXJzIGZyb20gYSBzY2F0dGVybGlzdC4gIFRoZXkgYWxzbyB1c2Ugc2NhdHRlcmxpc3QgRE1BCittYXBwaW5nICh3aGljaCBtaWdodCBhcHBseSBhbiBJT01NVSkgYW5kIElSUSByZWR1Y3Rpb24sIGFsbCBvZiB3aGljaCB3aWxsCitoZWxwIG1ha2UgaGlnaCBzcGVlZCB0cmFuc2ZlcnMgcnVuIGFzIGZhc3QgYXMgdGhleSBjYW4uCisKKworVEJEOiAgSW50ZXJydXB0IGFuZCBJU08gdHJhbnNmZXIgcGVyZm9ybWFuY2UgaXNzdWVzLiAgVGhvc2UgcGVyaW9kaWMKK3RyYW5zZmVycyBhcmUgZnVsbHkgc2NoZWR1bGVkLCBzbyB0aGUgbWFpbiBpc3N1ZSBpcyBsaWtlbHkgdG8gYmUgaG93Cit0byB0cmlnZ2VyICJoaWdoIGJhbmR3aWR0aCIgbW9kZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTM2ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZXJyb3ItY29kZXMudHh0CkBAIC0wLDAgKzEsMTY3IEBACitSZXZpc2VkOiAyMDA0LU9jdC0yMQorCitUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIG9mIChob3BlZnVsbHkpIGFsbCBwb3NzaWJsZSBlcnJvciBjb2RlcyAoYW5kCit0aGVpciBpbnRlcnByZXRhdGlvbikgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSB1c2Jjb3JlLgorCitTb21lIG9mIHRoZW0gYXJlIHJldHVybmVkIGJ5IHRoZSBIb3N0IENvbnRyb2xsZXIgRHJpdmVycyAoSENEcyksIHdoaWNoCitkZXZpY2UgZHJpdmVycyBvbmx5IHNlZSB0aHJvdWdoIHVzYmNvcmUuICBBcyBhIHJ1bGUsIGFsbCB0aGUgSENEcyBzaG91bGQKK2JlaGF2ZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRyYW5zZmVyIHNwZWVkIGRlcGVuZGVudCBiZWhhdmlvcnMgYW5kIHRoZQord2F5IGNlcnRhaW4gZmF1bHRzIGFyZSByZXBvcnRlZC4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyByZXR1cm5lZCBieSB1c2Jfc3VibWl0X3VyYiAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK05vbi1VU0Itc3BlY2lmaWM6CisKKzAJCVVSQiBzdWJtaXNzaW9uIHdlbnQgZmluZQorCistRU5PTUVNCQlubyBtZW1vcnkgZm9yIGFsbG9jYXRpb24gb2YgaW50ZXJuYWwgc3RydWN0dXJlcwkKKworVVNCLXNwZWNpZmljOgorCistRU5PREVWCQlzcGVjaWZpZWQgVVNCLWRldmljZSBvciBidXMgZG9lc24ndCBleGlzdAorCistRU5PRU5UCQlzcGVjaWZpZWQgaW50ZXJmYWNlIG9yIGVuZHBvaW50IGRvZXMgbm90IGV4aXN0IG9yCisJCWlzIG5vdCBlbmFibGVkCisKKy1FTlhJTwkJaG9zdCBjb250cm9sbGVyIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHF1ZXVpbmcgb2YgdGhpcyB0eXBlCisJCW9mIHVyYi4gICh0cmVhdCBhcyBhIGhvc3QgY29udHJvbGxlciBidWcuKQorCistRUlOVkFMCQlhKSBJbnZhbGlkIHRyYW5zZmVyIHR5cGUgc3BlY2lmaWVkIChvciBub3Qgc3VwcG9ydGVkKQorCQliKSBJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIHBlcmlvZGljIHRyYW5zZmVyIGludGVydmFsCisJCWMpIElTTzogYXR0ZW1wdGVkIHRvIGNoYW5nZSB0cmFuc2ZlciBpbnRlcnZhbAorCQlkKSBJU086IG51bWJlcl9vZl9wYWNrZXRzIGlzIDwgMAorCQllKSB2YXJpb3VzIG90aGVyIGNhc2VzCisKKy1FQUdBSU4JCWEpIHNwZWNpZmllZCBJU08gc3RhcnQgZnJhbWUgdG9vIGVhcmx5CisJCWIpICh1c2luZyBJU08tQVNBUCkgdG9vIG11Y2ggc2NoZWR1bGVkIGZvciB0aGUgZnV0dXJlCisJCSAgIHdhaXQgc29tZSB0aW1lIGFuZCB0cnkgYWdhaW4uCisKKy1FRkJJRwkJSG9zdCBjb250cm9sbGVyIGRyaXZlciBjYW4ndCBzY2hlZHVsZSB0aGF0IG1hbnkgSVNPIGZyYW1lcy4KKworLUVQSVBFCQlTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZC4gIEZvciBub24tY29udHJvbCBlbmRwb2ludHMsCisJCXJlc2V0IHRoaXMgc3RhdHVzIHdpdGggdXNiX2NsZWFyX2hhbHQoKS4KKworLUVNU0dTSVpFCShhKSBlbmRwb2ludCBtYXhwYWNrZXQgc2l6ZSBpcyB6ZXJvOyBpdCBpcyBub3QgdXNhYmxlCisJCSAgICBpbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgYWx0c2V0dGluZy4KKwkJKGIpIElTTyBwYWNrZXQgaXMgYmlnZXIgdGhhbiBlbmRwb2ludCBtYXhwYWNrZXQKKwkJKGMpIHJlcXVlc3RlZCBkYXRhIHRyYW5zZmVyIHNpemUgaXMgaW52YWxpZCAobmVnYXRpdmUpCisKKy1FTk9TUEMJCVRoaXMgcmVxdWVzdCB3b3VsZCBvdmVyY29tbWl0IHRoZSB1c2IgYmFuZHdpZHRoIHJlc2VydmVkCisJCWZvciBwZXJpb2RpYyB0cmFuc2ZlcnMgKGludGVycnVwdCwgaXNvY2hyb25vdXMpLgorCistRVNIVVRET1dOCVRoZSBkZXZpY2Ugb3IgaG9zdCBjb250cm9sbGVyIGhhcyBiZWVuIGRpc2FibGVkIGR1ZSB0byBzb21lCisJCXByb2JsZW0gdGhhdCBjb3VsZCBub3QgYmUgd29ya2VkIGFyb3VuZC4KKworLUVQRVJNCQlTdWJtaXNzaW9uIGZhaWxlZCBiZWNhdXNlIHVyYi0+cmVqZWN0IHdhcyBzZXQuCisKKy1FSE9TVFVOUkVBQ0gJVVJCIHdhcyByZWplY3RlZCBiZWNhdXNlIHRoZSBkZXZpY2UgaXMgc3VzcGVuZGVkLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgIEVycm9yIGNvZGVzIHJldHVybmVkIGJ5IGluIHVyYi0+c3RhdHVzICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICBvciBpbiBpc29fZnJhbWVfZGVzY1tuXS5zdGF0dXMgKGZvciBJU08pICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1VTQiBkZXZpY2UgZHJpdmVycyBtYXkgb25seSB0ZXN0IHVyYiBzdGF0dXMgdmFsdWVzIGluIGNvbXBsZXRpb24gaGFuZGxlcnMuCitUaGlzIGlzIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZXJlIHdvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuIEhDRHMgdXBkYXRpbmcKK3RoZXNlIHZhbHVlcyBvbiBvbmUgQ1BVLCBhbmQgZGV2aWNlIGRyaXZlcnMgdGVzdGluZyB0aGVtIG9uIGFub3RoZXIgQ1BVLgorCitBIHRyYW5zZmVyJ3MgYWN0dWFsX2xlbmd0aCBtYXkgYmUgcG9zaXRpdmUgZXZlbiB3aGVuIGFuIGVycm9yIGhhcyBiZWVuCityZXBvcnRlZC4gIFRoYXQncyBiZWNhdXNlIHRyYW5zZmVycyBvZnRlbiBpbnZvbHZlIHNldmVyYWwgcGFja2V0cywgc28gdGhhdAorb25lIG9yIG1vcmUgcGFja2V0cyBjb3VsZCBmaW5pc2ggYmVmb3JlIGFuIGVycm9yIHN0b3BzIGZ1cnRoZXIgZW5kcG9pbnQgSS9PLgorCisKKzAJCQlUcmFuc2ZlciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisKKy1FTk9FTlQJCQlVUkIgd2FzIHN5bmNocm9ub3VzbHkgdW5saW5rZWQgYnkgdXNiX3VubGlua191cmIKKworLUVJTlBST0dSRVNTCQlVUkIgc3RpbGwgcGVuZGluZywgbm8gcmVzdWx0cyB5ZXQKKwkJCShUaGF0IGlzLCBpZiBkcml2ZXJzIHNlZSB0aGlzIGl0J3MgYSBidWcuKQorCistRVBST1RPICgqLCAqKikJCWEpIGJpdHN0dWZmIGVycm9yCisJCQliKSBubyByZXNwb25zZSBwYWNrZXQgcmVjZWl2ZWQgd2l0aGluIHRoZQorCQkJICAgcHJlc2NyaWJlZCBidXMgdHVybi1hcm91bmQgdGltZQorCQkJYykgdW5rbm93biBVU0IgZXJyb3IgCisKKy1FSUxTRVEgKCosICoqKQkJYSkgQ1JDIG1pc21hdGNoCisJCQliKSBubyByZXNwb25zZSBwYWNrZXQgcmVjZWl2ZWQgd2l0aGluIHRoZQorCQkJICAgcHJlc2NyaWJlZCBidXMgdHVybi1hcm91bmQgdGltZQorCQkJYykgdW5rbm93biBVU0IgZXJyb3IgCisKKwkJCU5vdGUgdGhhdCBvZnRlbiB0aGUgY29udHJvbGxlciBoYXJkd2FyZSBkb2VzIG5vdAorCQkJZGlzdGluZ3Vpc2ggYW1vbmcgY2FzZXMgYSksIGIpLCBhbmQgYyksIHNvIGEKKwkJCWRyaXZlciBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZXJlIHdhcyBhIHByb3RvY29sCisJCQllcnJvciwgYSBmYWlsdXJlIHRvIHJlc3BvbmQgKG9mdGVuIGNhdXNlZCBieQorCQkJZGV2aWNlIGRpc2Nvbm5lY3QpLCBvciBzb21lIG90aGVyIGZhdWx0LgorCistRVRJTUVET1VUICgqKikJCU5vIHJlc3BvbnNlIHBhY2tldCByZWNlaXZlZCB3aXRoaW4gdGhlIHByZXNjcmliZWQKKwkJCWJ1cyB0dXJuLWFyb3VuZCB0aW1lLiAgVGhpcyBlcnJvciBtYXkgaW5zdGVhZCBiZQorCQkJcmVwb3J0ZWQgYXMgLUVQUk9UTyBvciAtRUlMU0VRLgorCisJCQlOb3RlIHRoYXQgdGhlIHN5bmNocm9ub3VzIFVTQiBtZXNzYWdlIGZ1bmN0aW9ucworCQkJYWxzbyB1c2UgdGhpcyBjb2RlIHRvIGluZGljYXRlIHRpbWVvdXQgZXhwaXJlZAorCQkJYmVmb3JlIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQuCisKKy1FUElQRSAoKiopCQlFbmRwb2ludCBzdGFsbGVkLiAgRm9yIG5vbi1jb250cm9sIGVuZHBvaW50cywKKwkJCXJlc2V0IHRoaXMgc3RhdHVzIHdpdGggdXNiX2NsZWFyX2hhbHQoKS4KKworLUVDT01NCQkJRHVyaW5nIGFuIElOIHRyYW5zZmVyLCB0aGUgaG9zdCBjb250cm9sbGVyCisJCQlyZWNlaXZlZCBkYXRhIGZyb20gYW4gZW5kcG9pbnQgZmFzdGVyIHRoYW4gaXQKKwkJCWNvdWxkIGJlIHdyaXR0ZW4gdG8gc3lzdGVtIG1lbW9yeQorCistRU5PU1IJCQlEdXJpbmcgYW4gT1VUIHRyYW5zZmVyLCB0aGUgaG9zdCBjb250cm9sbGVyCisJCQljb3VsZCBub3QgcmV0cmlldmUgZGF0YSBmcm9tIHN5c3RlbSBtZW1vcnkgZmFzdAorCQkJZW5vdWdoIHRvIGtlZXAgdXAgd2l0aCB0aGUgVVNCIGRhdGEgcmF0ZQorCistRU9WRVJGTE9XICgqKQkJVGhlIGFtb3VudCBvZiBkYXRhIHJldHVybmVkIGJ5IHRoZSBlbmRwb2ludCB3YXMKKwkJCWdyZWF0ZXIgdGhhbiBlaXRoZXIgdGhlIG1heCBwYWNrZXQgc2l6ZSBvZiB0aGUKKwkJCWVuZHBvaW50IG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIHNpemUuICAiQmFiYmxlIi4KKworLUVSRU1PVEVJTwkJVGhlIGRhdGEgcmVhZCBmcm9tIHRoZSBlbmRwb2ludCBkaWQgbm90IGZpbGwgdGhlCisJCQlzcGVjaWZpZWQgYnVmZmVyLCBhbmQgVVJCX1NIT1JUX05PVF9PSyB3YXMgc2V0IGluCisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzLgorCistRU5PREVWCQkJRGV2aWNlIHdhcyByZW1vdmVkLiAgT2Z0ZW4gcHJlY2VkZWQgYnkgYSBidXJzdCBvZgorCQkJb3RoZXIgZXJyb3JzLCBzaW5jZSB0aGUgaHViIGRyaXZlciBkb2VzJ3QgZGV0ZWN0CisJCQlkZXZpY2UgcmVtb3ZhbCBldmVudHMgaW1tZWRpYXRlbHkuCisKKy1FWERFVgkJCUlTTyB0cmFuc2ZlciBvbmx5IHBhcnRpYWxseSBjb21wbGV0ZWQKKwkJCWxvb2sgYXQgaW5kaXZpZHVhbCBmcmFtZSBzdGF0dXMgZm9yIGRldGFpbHMKKworLUVJTlZBTAkJCUlTTyBtYWRuZXNzLCBpZiB0aGlzIGhhcHBlbnM6IExvZyBvZmYgYW5kIGdvIGhvbWUKKworLUVDT05OUkVTRVQJCVVSQiB3YXMgYXN5bmNocm9ub3VzbHkgdW5saW5rZWQgYnkgdXNiX3VubGlua191cmIKKworLUVTSFVURE9XTgkJVGhlIGRldmljZSBvciBob3N0IGNvbnRyb2xsZXIgaGFzIGJlZW4gZGlzYWJsZWQgZHVlCisJCQl0byBzb21lIHByb2JsZW0gdGhhdCBjb3VsZCBub3QgYmUgd29ya2VkIGFyb3VuZCwKKwkJCXN1Y2ggYXMgYSBwaHlzaWNhbCBkaXNjb25uZWN0LgorCisKKygqKSBFcnJvciBjb2RlcyBsaWtlIC1FUFJPVE8sIC1FSUxTRVEgYW5kIC1FT1ZFUkZMT1cgbm9ybWFsbHkgaW5kaWNhdGUKK2hhcmR3YXJlIHByb2JsZW1zIHN1Y2ggYXMgYmFkIGRldmljZXMgKGluY2x1ZGluZyBmaXJtd2FyZSkgb3IgY2FibGVzLgorCisoKiopIFRoaXMgaXMgYWxzbyBvbmUgb2Ygc2V2ZXJhbCBjb2RlcyB0aGF0IGRpZmZlcmVudCBraW5kcyBvZiBob3N0Citjb250cm9sbGVyIHVzZSB0byB0byBpbmRpY2F0ZSBhIHRyYW5zZmVyIGhhcyBmYWlsZWQgYmVjYXVzZSBvZiBkZXZpY2UKK2Rpc2Nvbm5lY3QuICBJbiB0aGUgaW50ZXJ2YWwgYmVmb3JlIHRoZSBodWIgZHJpdmVyIHN0YXJ0cyBkaXNjb25uZWN0Citwcm9jZXNzaW5nLCBkZXZpY2VzIG1heSByZWNlaXZlIHN1Y2ggZmF1bHQgcmVwb3J0cyBmb3IgZXZlcnkgcmVxdWVzdC4KKworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICBFcnJvciBjb2RlcyByZXR1cm5lZCBieSB1c2Jjb3JlLWZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgKGV4cGVjdCBhbHNvIG90aGVyIHN1Ym1pdCBhbmQgdHJhbnNmZXIgc3RhdHVzIGNvZGVzKSAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3VzYl9yZWdpc3RlcigpOgorLUVJTlZBTAkJCWVycm9yIGR1cmluZyByZWdpc3RlcmluZyBuZXcgZHJpdmVyCisKK3VzYl9nZXRfKi91c2Jfc2V0XyooKToKK3VzYl9jb250cm9sX21zZygpOgordXNiX2J1bGtfbXNnKCk6CistRVRJTUVET1VUCQlUaW1lb3V0IGV4cGlyZWQgYmVmb3JlIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQuCisJCQlJbiB0aGUgZnV0dXJlIHRoaXMgY29kZSBtYXkgY2hhbmdlIHRvIC1FVElNRSwKKwkJCXdob3NlIGRlZmluaXRpb24gaXMgYSBjbG9zZXIgbWF0Y2ggdG8gdGhpcyBzb3J0CisJCQlvZiBlcnJvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3NlcmlhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzOGMzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0CkBAIC0wLDAgKzEsMzMyIEBACisKKyAgICAgICAgICAgICAgICAgTGludXggR2FkZ2V0IFNlcmlhbCBEcml2ZXIgdjIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEvMjAvMjAwNAorCisKK0xpY2Vuc2UgYW5kIERpc2NsYWltZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgordGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcgVVNBLgorCitUaGlzIGRvY3VtZW50IGFuZCB0aGUgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGl0c2VsZiBhcmUKK0NvcHlyaWdodCAoQykgMjAwNCBieSBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKS4KKworSWYgeW91IGhhdmUgcXVlc3Rpb25zLCBwcm9ibGVtcywgb3Igc3VnZ2VzdGlvbnMgZm9yIHRoaXMgZHJpdmVyCitwbGVhc2UgY29udGFjdCBBbCBCb3JjaGVycyBhdCBhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20uCisKKworUHJlcmVxdWlzaXRlcworLS0tLS0tLS0tLS0tLQorVmVyc2lvbnMgb2YgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGFyZSBhdmFpbGFibGUgZm9yIHRoZQorMi40IExpbnV4IGtlcm5lbHMsIGJ1dCB0aGlzIGRvY3VtZW50IGFzc3VtZXMgeW91IGFyZSB1c2luZwordmVyc2lvbiAyLjAgb3IgbGF0ZXIgb2YgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGluIGEgMi42CitMaW51eCBrZXJuZWwuCisKK1RoaXMgZG9jdW1lbnQgYXNzdW1lcyB0aGF0IHlvdSBhcmUgZmFtaWxpYXIgd2l0aCBMaW51eCBhbmQKK1dpbmRvd3MgYW5kIGtub3cgaG93IHRvIGNvbmZpZ3VyZSBhbmQgYnVpbGQgTGludXgga2VybmVscywgcnVuCitzdGFuZGFyZCB1dGlsaXRpZXMsIHVzZSBtaW5pY29tIGFuZCBIeXBlclRlcm1pbmFsLCBhbmQgd29yayB3aXRoCitVU0IgYW5kIHNlcmlhbCBkZXZpY2VzLiAgSXQgYWxzbyBhc3N1bWVzIHlvdSBjb25maWd1cmUgdGhlIExpbnV4CitnYWRnZXQgYW5kIHVzYiBkcml2ZXJzIGFzIG1vZHVsZXMuCisKKworT3ZlcnZpZXcKKy0tLS0tLS0tCitUaGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgaXMgYSBMaW51eCBVU0IgZ2FkZ2V0IGRyaXZlciwgYSBVU0IgZGV2aWNlCitzaWRlIGRyaXZlci4gIEl0IHJ1bnMgb24gYSBMaW51eCBzeXN0ZW0gdGhhdCBoYXMgVVNCIGRldmljZSBzaWRlCitoYXJkd2FyZTsgZm9yIGV4YW1wbGUsIGEgUERBLCBhbiBlbWJlZGRlZCBMaW51eCBzeXN0ZW0sIG9yIGEgUEMKK3dpdGggYSBVU0IgZGV2ZWxvcG1lbnQgY2FyZC4KKworVGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIHRhbGtzIG92ZXIgVVNCIHRvIGVpdGhlciBhIENEQyBBQ00gZHJpdmVyCitvciBhIGdlbmVyaWMgVVNCIHNlcmlhbCBkcml2ZXIgcnVubmluZyBvbiBhIGhvc3QgUEMuCisKKyAgIEhvc3QKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHwgSG9zdC1TaWRlICAgQ0RDIEFDTSAgICAgICBVU0IgSG9zdCAgIHwKKyAgfCBPcGVyYXRpbmcgfCAgIG9yICAgICAgICB8IENvbnRyb2xsZXIgfCAgIFVTQgorICB8IFN5c3RlbSAgICB8IEdlbmVyaWMgVVNCIHwgRHJpdmVyICAgICB8LS0tLS0tLS0KKyAgfCAoTGludXggb3IgfCBTZXJpYWwgICAgICB8IGFuZCAgICAgICAgfCAgICAgICAgfAorICB8IFdpbmRvd3MpICAgIERyaXZlciAgICAgICAgVVNCIFN0YWNrICB8ICAgICAgICB8CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIEdhZGdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICB8CisgIHwgR2FkZ2V0ICAgICAgICAgICAgICAgICAgIFVTQiBQZXJpcGguIHwgICAgICAgIHwKKyAgfCBEZXZpY2UtU2lkZSB8ICBHYWRnZXQgIHwgQ29udHJvbGxlciAgfCAgICAgICAgfAorICB8IExpbnV4ICAgICAgIHwgIFNlcmlhbCAgfCBEcml2ZXIgICAgICB8LS0tLS0tLS0KKyAgfCBPcGVyYXRpbmcgICB8ICBEcml2ZXIgIHwgYW5kICAgICAgICAgfAorICB8IFN5c3RlbSAgICAgICAgICAgICAgICAgICBVU0IgU3RhY2sgICB8CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbiB0aGUgZGV2aWNlLXNpZGUgTGludXggc3lzdGVtLCB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgbG9va3MKK2xpa2UgYSBzZXJpYWwgZGV2aWNlLgorCitPbiB0aGUgaG9zdC1zaWRlIHN5c3RlbSwgdGhlIGdhZGdldCBzZXJpYWwgZGV2aWNlIGxvb2tzIGxpa2UgYQorQ0RDIEFDTSBjb21wbGlhbnQgY2xhc3MgZGV2aWNlIG9yIGEgc2ltcGxlIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UKK3dpdGggYnVsayBpbiBhbmQgYnVsayBvdXQgZW5kcG9pbnRzLCBhbmQgaXQgaXMgdHJlYXRlZCBzaW1pbGFybHkKK3RvIG90aGVyIHNlcmlhbCBkZXZpY2VzLgorCitUaGUgaG9zdCBzaWRlIGRyaXZlciBjYW4gcG90ZW50aWFsbHkgYmUgYW55IEFDTSBjb21wbGlhbnQgZHJpdmVyCitvciBhbnkgZHJpdmVyIHRoYXQgY2FuIHRhbGsgdG8gYSBkZXZpY2Ugd2l0aCBhIHNpbXBsZSBidWxrIGluL291dAoraW50ZXJmYWNlLiAgR2FkZ2V0IHNlcmlhbCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgTGludXggQUNNIGRyaXZlciwKK3RoZSBXaW5kb3dzIHVzYnNlci5zeXMgQUNNIGRyaXZlciwgYW5kIHRoZSBMaW51eCBVU0IgZ2VuZXJpYyBzZXJpYWwKK2RyaXZlci4KKworV2l0aCB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgYW5kIHRoZSBob3N0IHNpZGUgQUNNIG9yIGdlbmVyaWMKK3NlcmlhbCBkcml2ZXIgcnVubmluZywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIGJldHdlZW4KK3RoZSBob3N0IGFuZCB0aGUgZ2FkZ2V0IHNpZGUgc3lzdGVtcyBhcyBpZiB0aGV5IHdlcmUgY29ubmVjdGVkIGJ5IGEKK3NlcmlhbCBjYWJsZS4KKworVGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIG9ubHkgcHJvdmlkZXMgc2ltcGxlIHVucmVsaWFibGUgZGF0YQorY29tbXVuaWNhdGlvbi4gIEl0IGRvZXMgbm90IHlldCBoYW5kbGUgZmxvdyBjb250cm9sIG9yIG1hbnkgb3RoZXIKK2ZlYXR1cmVzIG9mIG5vcm1hbCBzZXJpYWwgZGV2aWNlcy4KKworCitJbnN0YWxsaW5nIHRoZSBHYWRnZXQgU2VyaWFsIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHVzZSB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgeW91IG11c3QgY29uZmlndXJlIHRoZSBMaW51eCBnYWRnZXQKK3NpZGUga2VybmVsIGZvciAiU3VwcG9ydCBmb3IgVVNCIEdhZGdldHMiLCBmb3IgYSAiVVNCIFBlcmlwaGVyYWwKK0NvbnRyb2xsZXIiIChmb3IgZXhhbXBsZSwgbmV0MjI4MCksIGFuZCBmb3IgdGhlICJTZXJpYWwgR2FkZ2V0IgorZHJpdmVyLiAgQWxsIHRoaXMgYXJlIGxpc3RlZCB1bmRlciAiVVNCIEdhZGdldCBTdXBwb3J0IiB3aGVuCitjb25maWd1cmluZyB0aGUga2VybmVsLiAgVGhlbiByZWJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgb3IKK21vZHVsZXMuCisKK1RoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciB1c2VzIG1ham9yIG51bWJlciAxMjcsIGZvciBub3cuICBTbyB5b3UKK3dpbGwgbmVlZCB0byBjcmVhdGUgYSBkZXZpY2Ugbm9kZSBmb3IgaXQsIGxpa2UgdGhpczoKKworICBta25vZCAvZGV2L3R0eWdzZXJpYWwgYyAxMjcgMAorCitZb3Ugb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZS4KKworVGhlbiB5b3UgbXVzdCBsb2FkIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlci4gIFRvIGxvYWQgaXQgYXMgYW4KK0FDTSBkZXZpY2UsIGRvIHRoaXM6CisKKyAgbW9kcHJvYmUgZ19zZXJpYWwgdXNlX2FjbT0xCisKK1RvIGxvYWQgaXQgYXMgYSB2ZW5kb3Igc3BlY2lmaWMgYnVsayBpbi9vdXQgZGV2aWNlLCBkbyB0aGlzOgorCisgIG1vZHByb2JlIGdfc2VyaWFsCisKK1RoaXMgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgdW5kZXJseWluZyBnYWRnZXQgcGVyaXBoZXJhbAorY29udHJvbGxlciBkcml2ZXIuICBUaGlzIG11c3QgYmUgZG9uZSBlYWNoIHRpbWUgeW91IHJlYm9vdCB0aGUgZ2FkZ2V0CitzaWRlIExpbnV4IHN5c3RlbS4gIFlvdSBjYW4gYWRkIHRoaXMgdG8gdGhlIHN0YXJ0IHVwIHNjcmlwdHMsIGlmCitkZXNpcmVkLgorCitJZiBnYWRnZXQgc2VyaWFsIGlzIGxvYWRlZCBhcyBhbiBBQ00gZGV2aWNlIHlvdSB3aWxsIHdhbnQgdG8gdXNlCitlaXRoZXIgdGhlIFdpbmRvd3Mgb3IgTGludXggQUNNIGRyaXZlciBvbiB0aGUgaG9zdCBzaWRlLiAgSWYgZ2FkZ2V0CitzZXJpYWwgaXMgbG9hZGVkIGFzIGEgYnVsayBpbi9vdXQgZGV2aWNlLCB5b3Ugd2lsbCB3YW50IHRvIHVzZSB0aGUKK0xpbnV4IGdlbmVyaWMgc2VyaWFsIGRyaXZlciBvbiB0aGUgaG9zdCBzaWRlLiAgRm9sbG93IHRoZSBhcHByb3ByaWF0ZQoraW5zdHJ1Y3Rpb25zIGJlbG93IHRvIGluc3RhbGwgdGhlIGhvc3Qgc2lkZSBkcml2ZXIuCisKKworSW5zdGFsbGluZyB0aGUgV2luZG93cyBIb3N0IEFDTSBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyB1c2UgdGhlIFdpbmRvd3MgQUNNIGRyaXZlciB5b3UgbXVzdCBoYXZlIHRoZSBmaWxlcyAiZ3NlcmlhbC5pbmYiCithbmQgInVzYnNlci5zeXMiIHRvZ2V0aGVyIGluIGEgZm9sZGVyIG9uIHRoZSBXaW5kb3dzIG1hY2hpbmUuCisKK1RoZSAiZ3NlcmlhbC5pbmYiIGZpbGUgaXMgZ2l2ZW4gaGVyZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1VUIEhFUkUgLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tWZXJzaW9uXQorU2lnbmF0dXJlPSIkV2luZG93cyBOVCQiCitDbGFzcz1Qb3J0cworQ2xhc3NHdWlkPXs0RDM2RTk3OC1FMzI1LTExQ0UtQkZDMS0wODAwMkJFMTAzMTh9CitQcm92aWRlcj0lTElOVVglCitEcml2ZXJWZXI9MDgvMTcvMjAwNCwwLjAuMi4wCis7IENvcHlyaWdodCAoQykgMjAwNCBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorCitbTWFudWZhY3R1cmVyXQorJUxJTlVYJT1HU2VyaWFsRGV2aWNlTGlzdAorCitbR1NlcmlhbERldmljZUxpc3RdCislR1NFUklBTCU9R1NlcmlhbEluc3RhbGwsIFVTQlxWSURfMDUyNSZQSURfQTRBNworCitbRGVzdGluYXRpb25EaXJzXQorRGVmYXVsdERlc3REaXI9MTAsU3lzdGVtMzJcRHJpdmVycworCitbR1NlcmlhbEluc3RhbGxdCitDb3B5RmlsZXM9R1NlcmlhbENvcHlGaWxlcworQWRkUmVnPUdTZXJpYWxBZGRSZWcKKworW0dTZXJpYWxDb3B5RmlsZXNdCit1c2JzZXIuc3lzCisKK1tHU2VyaWFsQWRkUmVnXQorSEtSLCxEZXZMb2FkZXIsLCpudGtlcm4KK0hLUiwsTlRNUERyaXZlciwsdXNic2VyLnN5cworSEtSLCxFbnVtUHJvcFBhZ2VzMzIsLCJNc1BvcnRzLmRsbCxTZXJpYWxQb3J0UHJvcFBhZ2VQcm92aWRlciIKKworW0dTZXJpYWxJbnN0YWxsLlNlcnZpY2VzXQorQWRkU2VydmljZSA9IHVzYnNlciwweDAwMDIsR1NlcmlhbFNlcnZpY2UKKworW0dTZXJpYWxTZXJ2aWNlXQorRGlzcGxheU5hbWUgPSAlR1NFUklBTF9ESVNQTEFZX05BTUUlCitTZXJ2aWNlVHlwZSA9IDEgICAgICAgICAgICAgICAgICA7IFNFUlZJQ0VfS0VSTkVMX0RSSVZFUgorU3RhcnRUeXBlID0gMyAgICAgICAgICAgICAgICAgICAgOyBTRVJWSUNFX0RFTUFORF9TVEFSVAorRXJyb3JDb250cm9sID0gMSAgICAgICAgICAgICAgICAgOyBTRVJWSUNFX0VSUk9SX05PUk1BTAorU2VydmljZUJpbmFyeSA9ICUxMCVcU3lzdGVtMzJcRHJpdmVyc1x1c2JzZXIuc3lzCitMb2FkT3JkZXJHcm91cCA9IEJhc2UKKworW1N0cmluZ3NdCitMSU5VWCA9ICJMaW51eCIKK0dTRVJJQUwgPSAiR2FkZ2V0IFNlcmlhbCIKK0dTRVJJQUxfRElTUExBWV9OQU1FID0gIlVTQiBHYWRnZXQgU2VyaWFsIERyaXZlciIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAidXNic2VyLnN5cyIgZmlsZSBjb21lcyB3aXRoIHZhcmlvdXMgdmVyc2lvbnMgb2YgV2luZG93cy4KK0ZvciBleGFtcGxlLCBpdCBjYW4gYmUgZm91bmQgb24gV2luZG93cyBYUCB0eXBpY2FsbHkgaW4KKworICBDOlxXSU5ET1dTXERyaXZlciBDYWNoZVxpMzg2XGRyaXZlci5jYWIKKworT3IgaXQgY2FuIGJlIGZvdW5kIG9uIHRoZSBXaW5kb3dzIDk4U0UgQ0QgaW4gdGhlICJ3aW45OCIgZm9sZGVyCitpbiB0aGUgIkRSSVZFUjExLkNBQiIgdGhyb3VnaCAiRFJJVkVSMjAuQ0FCIiBjYWIgZmlsZXMuICBZb3Ugd2lsbAorbmVlZCB0aGUgRE9TICJleHBhbmQiIHByb2dyYW0sIHRoZSBDeWd3aW4gImNhYmV4dHJhY3QiIHByb2dyYW0sIG9yCithIHNpbWlsYXIgcHJvZ3JhbSB0byB1bnBhY2sgdGhlc2UgY2FiIGZpbGVzIGFuZCBleHRyYWN0ICJ1c2JzZXIuc3lzIi4KKworRm9yIGV4YW1wbGUsIHRvIGV4dHJhY3QgInVzYnNlci5zeXMiIGludG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitvbiBXaW5kb3dzIFhQLCBvcGVuIGEgRE9TIHdpbmRvdyBhbmQgcnVuIGEgY29tbWFuZCBsaWtlCisKKyAgZXhwYW5kIEM6XFdJTkRPV1NcRHJpdmVyfjFcaTM4Nlxkcml2ZXIuY2FiIC1GOnVzYnNlci5zeXMgLgorCisoVGhhbmtzIHRvIE5pc2hhbnQgS2FtYXQgZm9yIHBvaW50aW5nIG91dCB0aGlzIERPUyBjb21tYW5kLikKKworV2hlbiB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgaXMgbG9hZGVkIGFuZCB0aGUgVVNCIGRldmljZSBjb25uZWN0ZWQKK3RvIHRoZSBXaW5kb3dzIGhvc3Qgd2l0aCBhIFVTQiBjYWJsZSwgV2luZG93cyBzaG91bGQgcmVjb2duaXplIHRoZQorZ2FkZ2V0IHNlcmlhbCBkZXZpY2UgYW5kIGFzayBmb3IgYSBkcml2ZXIuICBUZWxsIFdpbmRvd3MgdG8gZmluZCB0aGUKK2RyaXZlciBpbiB0aGUgZm9sZGVyIHRoYXQgY29udGFpbnMgImdzZXJpYWwuaW5mIiBhbmQgInVzYnNlci5zeXMiLgorCitGb3IgZXhhbXBsZSwgb24gV2luZG93cyBYUCwgd2hlbiB0aGUgZ2FkZ2V0IHNlcmlhbCBkZXZpY2UgaXMgZmlyc3QKK3BsdWdnZWQgaW4sIHRoZSAiRm91bmQgTmV3IEhhcmR3YXJlIFdpemFyZCIgc3RhcnRzIHVwLiAgU2VsZWN0CisiSW5zdGFsbCBmcm9tIGEgbGlzdCBvciBzcGVjaWZpYyBsb2NhdGlvbiAoQWR2YW5jZWQpIiwgdGhlbiBvbgordGhlIG5leHQgc2NyZWVuIHNlbGVjdCAiSW5jbHVkZSB0aGlzIGxvY2F0aW9uIGluIHRoZSBzZWFyY2giIGFuZAorZW50ZXIgdGhlIHBhdGggb3IgYnJvd3NlIHRvIHRoZSBmb2xkZXIgY29udGFpbmluZyAiZ3NlcmlhbC5pbmYiIGFuZAorInVzYnNlci5zeXMiLiAgV2luZG93cyB3aWxsIGNvbXBsYWluIHRoYXQgdGhlIEdhZGdldCBTZXJpYWwgZHJpdmVyCitoYXMgbm90IHBhc3NlZCBXaW5kb3dzIExvZ28gdGVzdGluZywgYnV0IHNlbGVjdCAiQ29udGludWUgYW55d2F5IgorYW5kIGZpbmlzaCB0aGUgZHJpdmVyIGluc3RhbGxhdGlvbi4KKworT24gV2luZG93cyBYUCwgaW4gdGhlICJEZXZpY2UgTWFuYWdlciIgKHVuZGVyICJDb250cm9sIFBhbmVsIiwKKyJTeXN0ZW0iLCAiSGFyZHdhcmUiKSBleHBhbmQgdGhlICJQb3J0cyAoQ09NICYgTFBUKSIgZW50cnkgYW5kIHlvdQorc2hvdWxkIHNlZSAiR2FkZ2V0IFNlcmlhbCIgbGlzdGVkIGFzIHRoZSBkcml2ZXIgZm9yIG9uZSBvZiB0aGUgQ09NCitwb3J0cy4KKworVG8gdW5pbnN0YWxsIHRoZSBXaW5kb3dzIFhQIGRyaXZlciBmb3IgIkdhZGdldCBTZXJpYWwiLCByaWdodCBjbGljaworb24gdGhlICJHYWRnZXQgU2VyaWFsIiBlbnRyeSBpbiB0aGUgIkRldmljZSBNYW5hZ2VyIiBhbmQgc2VsZWN0CisiVW5pbnN0YWxsIi4KKworCitJbnN0YWxsaW5nIHRoZSBMaW51eCBIb3N0IEFDTSBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gdXNlIHRoZSBMaW51eCBBQ00gZHJpdmVyIHlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUgTGludXggaG9zdCBzaWRlCitrZXJuZWwgZm9yICJTdXBwb3J0IGZvciBIb3N0LXNpZGUgVVNCIiBhbmQgZm9yICJVU0IgTW9kZW0gKENEQyBBQ00pCitzdXBwb3J0Ii4KKworT25jZSB0aGUgZ2FkZ2V0IHNlcmlhbCBkcml2ZXIgaXMgbG9hZGVkIGFuZCB0aGUgVVNCIGRldmljZSBjb25uZWN0ZWQKK3RvIHRoZSBMaW51eCBob3N0IHdpdGggYSBVU0IgY2FibGUsIHRoZSBob3N0IHN5c3RlbSBzaG91bGQgcmVjb2duaXplCit0aGUgZ2FkZ2V0IHNlcmlhbCBkZXZpY2UuICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQKKworICBjYXQgL3Byb2MvYnVzL3VzYi9kZXZpY2VzCisKK3Nob3VsZCBzaG93IHNvbWV0aGluZyBsaWtlIHRoaXM6CisKK1Q6ICBCdXM9MDEgTGV2PTAxIFBybnQ9MDEgUG9ydD0wMSBDbnQ9MDIgRGV2Iz0gIDUgU3BkPTQ4MCBNeENoPSAwCitEOiAgVmVyPSAyLjAwIENscz0wMihjb21tLikgU3ViPTAwIFByb3Q9MDAgTXhQUz02NCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDUyNSBQcm9kSUQ9YTRhNyBSZXY9IDIuMDEKK1M6ICBNYW51ZmFjdHVyZXI9TGludXggMi42LjguMSB3aXRoIG5ldDIyODAKK1M6ICBQcm9kdWN0PUdhZGdldCBTZXJpYWwKK1M6ICBTZXJpYWxOdW1iZXI9MAorQzoqICNJZnM9IDIgQ2ZnIz0gMiBBdHI9YzAgTXhQd3I9ICAybUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDEgQ2xzPTAyKGNvbW0uKSBTdWI9MDIgUHJvdD0wMSBEcml2ZXI9YWNtCitFOiAgQWQ9ODMoSSkgQXRyPTAzKEludC4pIE14UFM9ICAgOCBJdmw9MzJtcworSTogIElmIz0gMSBBbHQ9IDAgI0VQcz0gMiBDbHM9MGEoZGF0YSApIFN1Yj0wMCBQcm90PTAwIERyaXZlcj1hY20KK0U6ICBBZD04MShJKSBBdHI9MDIoQnVsaykgTXhQUz0gNTEyIEl2bD0wbXMKK0U6ICBBZD0wMihPKSBBdHI9MDIoQnVsaykgTXhQUz0gNTEyIEl2bD0wbXMKKworSWYgdGhlIGhvc3Qgc2lkZSBMaW51eCBzeXN0ZW0gaXMgY29uZmlndXJlZCBwcm9wZXJseSwgdGhlIEFDTSBkcml2ZXIKK3Nob3VsZCBiZSBsb2FkZWQgYXV0b21hdGljYWxseS4gIFRoZSBjb21tYW5kICJsc21vZCIgc2hvdWxkIHNob3cgdGhlCisiYWNtIiBtb2R1bGUgaXMgbG9hZGVkLgorCisKK0luc3RhbGxpbmcgdGhlIExpbnV4IEhvc3QgR2VuZXJpYyBVU0IgU2VyaWFsIERyaXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyB1c2UgdGhlIExpbnV4IGdlbmVyaWMgVVNCIHNlcmlhbCBkcml2ZXIgeW91IG11c3QgY29uZmlndXJlIHRoZQorTGludXggaG9zdCBzaWRlIGtlcm5lbCBmb3IgIlN1cHBvcnQgZm9yIEhvc3Qtc2lkZSBVU0IiLCBmb3IgIlVTQgorU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0IiwgYW5kIGZvciB0aGUgIlVTQiBHZW5lcmljIFNlcmlhbCBEcml2ZXIiLgorCitPbmNlIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBpcyBsb2FkZWQgYW5kIHRoZSBVU0IgZGV2aWNlIGNvbm5lY3RlZAordG8gdGhlIExpbnV4IGhvc3Qgd2l0aCBhIFVTQiBjYWJsZSwgdGhlIGhvc3Qgc3lzdGVtIHNob3VsZCByZWNvZ25pemUKK3RoZSBnYWRnZXQgc2VyaWFsIGRldmljZS4gIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZAorCisgIGNhdCAvcHJvYy9idXMvdXNiL2RldmljZXMKKworc2hvdWxkIHNob3cgc29tZXRoaW5nIGxpa2UgdGhpczoKKworVDogIEJ1cz0wMSBMZXY9MDEgUHJudD0wMSBQb3J0PTAxIENudD0wMiBEZXYjPSAgNiBTcGQ9NDgwIE14Q2g9IDAKK0Q6ICBWZXI9IDIuMDAgQ2xzPWZmKHZlbmQuKSBTdWI9MDAgUHJvdD0wMCBNeFBTPTY0ICNDZmdzPSAgMQorUDogIFZlbmRvcj0wNTI1IFByb2RJRD1hNGE2IFJldj0gMi4wMQorUzogIE1hbnVmYWN0dXJlcj1MaW51eCAyLjYuOC4xIHdpdGggbmV0MjI4MAorUzogIFByb2R1Y3Q9R2FkZ2V0IFNlcmlhbAorUzogIFNlcmlhbE51bWJlcj0wCitDOiogI0lmcz0gMSBDZmcjPSAxIEF0cj1jMCBNeFB3cj0gIDJtQQorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMiBDbHM9MGEoZGF0YSApIFN1Yj0wMCBQcm90PTAwIERyaXZlcj1zZXJpYWwKK0U6ICBBZD04MShJKSBBdHI9MDIoQnVsaykgTXhQUz0gNTEyIEl2bD0wbXMKK0U6ICBBZD0wMihPKSBBdHI9MDIoQnVsaykgTXhQUz0gNTEyIEl2bD0wbXMKKworWW91IG11c3QgZXhwbGljaXRseSBsb2FkIHRoZSB1c2JzZXJpYWwgZHJpdmVyIHdpdGggcGFyYW1ldGVycyB0bworY29uZmlndXJlIGl0IHRvIHJlY29nbml6ZSB0aGUgZ2FkZ2V0IHNlcmlhbCBkZXZpY2UsIGxpa2UgdGhpczoKKworICBtb2Rwcm9iZSB1c2JzZXJpYWwgdmVuZG9yPTB4MDUyNSBwcm9kdWN0PTB4QTRBNgorCitJZiBldmVyeXRoaW5nIGlzIHdvcmtpbmcsIHVzYnNlcmlhbCB3aWxsIHByaW50IGEgbWVzc2FnZSBpbiB0aGUKK3N5c3RlbSBsb2cgc2F5aW5nIHNvbWV0aGluZyBsaWtlICJHYWRnZXQgU2VyaWFsIGNvbnZlcnRlciBub3cKK2F0dGFjaGVkIHRvIHR0eVVTQjAiLgorCisKK1Rlc3Rpbmcgd2l0aCBNaW5pY29tIG9yIEh5cGVyVGVybWluYWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uY2UgdGhlIGdhZGdldCBzZXJpYWwgZHJpdmVyIGFuZCB0aGUgaG9zdCBkcml2ZXIgYXJlIGJvdGggaW5zdGFsbGVkLAorYW5kIGEgVVNCIGNhYmxlIGNvbm5lY3RzIHRoZSBnYWRnZXQgZGV2aWNlIHRvIHRoZSBob3N0LCB5b3Ugc2hvdWxkCitiZSBhYmxlIHRvIGNvbW11bmljYXRlIG92ZXIgVVNCIGJldHdlZW4gdGhlIGdhZGdldCBhbmQgaG9zdCBzeXN0ZW1zLgorWW91IGNhbiB1c2UgbWluaWNvbSBvciBIeXBlclRlcm1pbmFsIHRvIHRyeSB0aGlzIG91dC4KKworT24gdGhlIGdhZGdldCBzaWRlIHJ1biAibWluaWNvbSAtcyIgdG8gY29uZmlndXJlIGEgbmV3IG1pbmljb20KK3Nlc3Npb24uICBVbmRlciAiU2VyaWFsIHBvcnQgc2V0dXAiIHNldCAiL2Rldi90dHlnc2VyaWFsIiBhcyB0aGUKKyJTZXJpYWwgRGV2aWNlIi4gIFNldCBiYXVkIHJhdGUsIGRhdGEgYml0cywgcGFyaXR5LCBhbmQgc3RvcCBiaXRzLAordG8gOTYwMCwgOCwgbm9uZSwgYW5kIDEtLXRoZXNlIHNldHRpbmdzIG1vc3RseSBkbyBub3QgbWF0dGVyLgorVW5kZXIgIk1vZGVtIGFuZCBkaWFsaW5nIiBlcmFzZSBhbGwgdGhlIG1vZGVtIGFuZCBkaWFsaW5nIHN0cmluZ3MuCisKK09uIGEgTGludXggaG9zdCBydW5uaW5nIHRoZSBBQ00gZHJpdmVyLCBjb25maWd1cmUgbWluaWNvbSBzaW1pbGFybHkKK2J1dCB1c2UgIi9kZXYvdHR5QUNNMCIgYXMgdGhlICJTZXJpYWwgRGV2aWNlIi4gIChJZiB5b3UgaGF2ZSBvdGhlcgorQUNNIGRldmljZXMgY29ubmVjdGVkLCBjaGFuZ2UgdGhlIGRldmljZSBuYW1lIGFwcHJvcHJpYXRlbHkuKQorCitPbiBhIExpbnV4IGhvc3QgcnVubmluZyB0aGUgVVNCIGdlbmVyaWMgc2VyaWFsIGRyaXZlciwgY29uZmlndXJlCittaW5pY29tIHNpbWlsYXJseSwgYnV0IHVzZSAiL2Rldi90dHlVU0IwIiBhcyB0aGUgIlNlcmlhbCBEZXZpY2UiLgorKElmIHlvdSBoYXZlIG90aGVyIFVTQiBzZXJpYWwgZGV2aWNlcyBjb25uZWN0ZWQsIGNoYW5nZSB0aGUgZGV2aWNlCituYW1lIGFwcHJvcHJpYXRlbHkuKQorCitPbiBhIFdpbmRvd3MgaG9zdCBjb25maWd1cmUgYSBuZXcgSHlwZXJUZXJtaW5hbCBzZXNzaW9uIHRvIHVzZSB0aGUKK0NPTSBwb3J0IGFzc2lnbmVkIHRvIEdhZGdldCBTZXJpYWwuICBUaGUgIlBvcnQgU2V0dGluZ3MiIHdpbGwgYmUKK3NldCBhdXRvbWF0aWNhbGx5IHdoZW4gSHlwZXJUZXJtaW5hbCBjb25uZWN0cyB0byB0aGUgZ2FkZ2V0IHNlcmlhbAorZGV2aWNlLCBzbyB5b3UgY2FuIGxlYXZlIHRoZW0gc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlcy0tdGhlc2UKK3NldHRpbmdzIG1vc3RseSBkbyBub3QgbWF0dGVyLgorCitXaXRoIG1pbmljb20gY29uZmlndXJlZCBhbmQgcnVubmluZyBvbiB0aGUgZ2FkZ2V0IHNpZGUgYW5kIHdpdGgKK21pbmljb20gb3IgSHlwZXJUZXJtaW5hbCBjb25maWd1cmVkIGFuZCBydW5uaW5nIG9uIHRoZSBob3N0IHNpZGUsCit5b3Ugc2hvdWxkIGJlIGFibGUgdG8gc2VuZCBkYXRhIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIGdhZGdldAorc2lkZSBhbmQgaG9zdCBzaWRlIHN5c3RlbXMuICBBbnl0aGluZyB5b3UgdHlwZSBvbiB0aGUgdGVybWluYWwKK3dpbmRvdyBvbiB0aGUgZ2FkZ2V0IHNpZGUgc2hvdWxkIGFwcGVhciBpbiB0aGUgdGVybWluYWwgd2luZG93IG9uCit0aGUgaG9zdCBzaWRlIGFuZCB2aWNlIHZlcnNhLgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2hpZGRldi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9oaWRkZXYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmZiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9oaWRkZXYudHh0CkBAIC0wLDAgKzEsMjA1IEBACitDYXJlIGFuZCBmZWVkaW5nIG9mIHlvdXIgSHVtYW4gSW50ZXJmYWNlIERldmljZXMKKworSU5UUk9EVUNUSU9OCisKK0luIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaW5wdXQgdHlwZSBISUQgZGV2aWNlcywgVVNCIGFsc28gdXNlcyB0aGUKK2h1bWFuIGludGVyZmFjZSBkZXZpY2UgcHJvdG9jb2xzIGZvciB0aGluZ3MgdGhhdCBhcmUgbm90IHJlYWxseSBodW1hbgoraW50ZXJmYWNlcywgYnV0IGhhdmUgc2ltaWxhciBzb3J0cyBvZiBjb21tdW5pY2F0aW9uIG5lZWRzLiBUaGUgdHdvIGJpZworZXhhbXBsZXMgZm9yIHRoaXMgYXJlIHBvd2VyIGRldmljZXMgKGVzcGVjaWFsbHkgdW5pbnRlcnJ1cHRhYmxlIHBvd2VyCitzdXBwbGllcykgYW5kIG1vbml0b3IgY29udHJvbCBvbiBoaWdoZXIgZW5kIG1vbml0b3JzLgorCitUbyBzdXBwb3J0IHRoZXNlIGRpc3Bhcml0ZSByZXF1aXJlbWVudHMsIHRoZSBMaW51eCBVU0Igc3lzdGVtIHByb3ZpZGVzCitISUQgZXZlbnRzIHRvIHR3byBzZXBhcmF0ZSBpbnRlcmZhY2VzOgorKiB0aGUgaW5wdXQgc3Vic3lzdGVtLCB3aGljaCBjb252ZXJ0cyBISUQgZXZlbnRzIGludG8gbm9ybWFsIGlucHV0CitkZXZpY2UgaW50ZXJmYWNlcyAoc3VjaCBhcyBrZXlib2FyZCwgbW91c2UgYW5kIGpveXN0aWNrKSBhbmQgYQorbm9ybWFsaXNlZCBldmVudCBpbnRlcmZhY2UgLSBzZWUgRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC50eHQKKyogdGhlIGhpZGRldiBpbnRlcmZhY2UsIHdoaWNoIHByb3ZpZGVzIGZhaXJseSByYXcgSElEIGV2ZW50cworCitUaGUgZGF0YSBmbG93IGZvciBhIEhJRCBldmVudCBwcm9kdWNlZCBieSBhIGRldmljZSBpcyBzb21ldGhpbmcgbGlrZQordGhlIGZvbGxvd2luZyA6CisKKyB1c2IuYyAtLS0+IGhpZC1jb3JlLmMgIC0tLS0+IGhpZC1pbnB1dC5jIC0tLS0+IFtrZXlib2FyZC9tb3VzZS9qb3lzdGljay9ldmVudF0KKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4gaGlkZGV2LmMgLS0tLT4gUE9XRVIgLyBNT05JVE9SIENPTlRST0wgCisKK0luIGFkZGl0aW9uLCBvdGhlciBzdWJzeXN0ZW1zIChhcGFydCBmcm9tIFVTQikgY2FuIHBvdGVudGlhbGx5IGZlZWQKK2V2ZW50cyBpbnRvIHRoZSBpbnB1dCBzdWJzeXN0ZW0sIGJ1dCB0aGVzZSBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgaGlkCitkZXZpY2UgaW50ZXJmYWNlLgorCitVU0lORyBUSEUgSElEIERFVklDRSBJTlRFUkZBQ0UKKworVGhlIGhpZGRldiBpbnRlcmZhY2UgaXMgYSBjaGFyIGludGVyZmFjZSB1c2luZyB0aGUgbm9ybWFsIFVTQiBtYWpvciwKK3dpdGggdGhlIG1pbm9yIG51bWJlcnMgc3RhcnRpbmcgYXQgOTYgYW5kIGZpbmlzaGluZyBhdCAxMTEuIFRoZXJlZm9yZSwKK3lvdSBuZWVkIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6Citta25vZCAvZGV2L3VzYi9oaWRkZXYwIGMgMTgwIDk2Citta25vZCAvZGV2L3VzYi9oaWRkZXYxIGMgMTgwIDk3Citta25vZCAvZGV2L3VzYi9oaWRkZXYyIGMgMTgwIDk4Citta25vZCAvZGV2L3VzYi9oaWRkZXYzIGMgMTgwIDk5Citta25vZCAvZGV2L3VzYi9oaWRkZXY0IGMgMTgwIDEwMAorbWtub2QgL2Rldi91c2IvaGlkZGV2NSBjIDE4MCAxMDEKK21rbm9kIC9kZXYvdXNiL2hpZGRldjYgYyAxODAgMTAyCitta25vZCAvZGV2L3VzYi9oaWRkZXY3IGMgMTgwIDEwMworbWtub2QgL2Rldi91c2IvaGlkZGV2OCBjIDE4MCAxMDQKK21rbm9kIC9kZXYvdXNiL2hpZGRldjkgYyAxODAgMTA1Citta25vZCAvZGV2L3VzYi9oaWRkZXYxMCBjIDE4MCAxMDYKK21rbm9kIC9kZXYvdXNiL2hpZGRldjExIGMgMTgwIDEwNworbWtub2QgL2Rldi91c2IvaGlkZGV2MTIgYyAxODAgMTA4Citta25vZCAvZGV2L3VzYi9oaWRkZXYxMyBjIDE4MCAxMDkKK21rbm9kIC9kZXYvdXNiL2hpZGRldjE0IGMgMTgwIDExMAorbWtub2QgL2Rldi91c2IvaGlkZGV2MTUgYyAxODAgMTExCisKK1NvIHlvdSBwb2ludCB5b3VyIGhpZGRldiBjb21wbGlhbnQgdXNlci1zcGFjZSBwcm9ncmFtIGF0IHRoZSBjb3JyZWN0CitpbnRlcmZhY2UgZm9yIHlvdXIgZGV2aWNlLCBhbmQgaXQgYWxsIGp1c3Qgd29ya3MuCisKK0Fzc3VtaW5nIHRoYXQgeW91IGhhdmUgYSBoaWRkZXYgY29tcGxpYW50IHVzZXItc3BhY2UgcHJvZ3JhbSwgb2YKK2NvdXJzZS4gSWYgeW91IG5lZWQgdG8gd3JpdGUgb25lLCByZWFkIG9uLgorCisKK1RIRSBISURERVYgQVBJCitUaGlzIGRlc2NyaXB0aW9uIHNob3VsZCBiZSByZWFkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEhJRAorc3BlY2lmaWNhdGlvbiwgZnJlZWx5IGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cudXNiLm9yZywgYW5kCitjb252ZW5pZW50bHkgbGlua2VkIG9mIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy4KKworVGhlIGhpZGRldiBBUEkgdXNlcyBhIHJlYWQoKSBpbnRlcmZhY2UsIGFuZCBhIHNldCBvZiBpb2N0bCgpIGNhbGxzLgorCitISUQgZGV2aWNlcyBleGNoYW5nZSBkYXRhIHdpdGggdGhlIGhvc3QgY29tcHV0ZXIgdXNpbmcgZGF0YQorYnVuZGxlcyBjYWxsZWQgInJlcG9ydHMiLiAgRWFjaCByZXBvcnQgaXMgZGl2aWRlZCBpbnRvICJmaWVsZHMiLAorZWFjaCBvZiB3aGljaCBjYW4gaGF2ZSBvbmUgb3IgbW9yZSAidXNhZ2VzIi4gIEluIHRoZSBoaWQtY29yZSwKK2VhY2ggb25lIG9mIHRoZXNlIHVzYWdlcyBoYXMgYSBzaW5nbGUgc2lnbmVkIDMyIGJpdCB2YWx1ZS4KKworcmVhZCgpOgorVGhpcyBpcyB0aGUgZXZlbnQgaW50ZXJmYWNlLiAgV2hlbiB0aGUgSElEIGRldmljZSdzIHN0YXRlIGNoYW5nZXMsCitpdCBwZXJmb3JtcyBhbiBpbnRlcnJ1cHQgdHJhbnNmZXIgY29udGFpbmluZyBhIHJlcG9ydCB3aGljaCBjb250YWlucwordGhlIGNoYW5nZWQgdmFsdWUuICBUaGUgaGlkLWNvcmUuYyBtb2R1bGUgcGFyc2VzIHRoZSByZXBvcnQsIGFuZAorcmV0dXJucyB0byBoaWRkZXYuYyB0aGUgaW5kaXZpZHVhbCB1c2FnZXMgdGhhdCBoYXZlIGNoYW5nZWQgd2l0aGluCit0aGUgcmVwb3J0LiAgSW4gaXRzIGJhc2ljIG1vZGUsIHRoZSBoaWRkZXYgd2lsbCBtYWtlIHRoZXNlIGluZGl2aWR1YWwKK3VzYWdlIGNoYW5nZXMgYXZhaWxhYmxlIHRvIHRoZSByZWFkZXIgdXNpbmcgYSBzdHJ1Y3QgaGlkZGV2X2V2ZW50OgorCisgICAgICAgc3RydWN0IGhpZGRldl9ldmVudCB7CisgICAgICAgICAgIHVuc2lnbmVkIGhpZDsKKyAgICAgICAgICAgc2lnbmVkIGludCB2YWx1ZTsKKyAgICAgICB9OworCitjb250YWluaW5nIHRoZSBISUQgdXNhZ2UgaWRlbnRpZmllciBmb3IgdGhlIHN0YXR1cyB0aGF0IGNoYW5nZWQsIGFuZAordGhlIHZhbHVlIHRoYXQgaXQgd2FzIGNoYW5nZWQgdG8uIE5vdGUgdGhhdCB0aGUgc3RydWN0dXJlIGlzIGRlZmluZWQKK3dpdGhpbiA8bGludXgvaGlkZGV2Lmg+LCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgdXNlZnVsICNkZWZpbmVzIGFuZAorc3RydWN0dXJlcy4gIFRoZSBISUQgdXNhZ2UgaWRlbnRpZmllciBpcyBhIGNvbXBvc2l0ZSBvZiB0aGUgSElEIHVzYWdlCitwYWdlIHNoaWZ0ZWQgdG8gdGhlIDE2IGhpZ2ggb3JkZXIgYml0cyBPUmVkIHdpdGggdGhlIHVzYWdlIGNvZGUuICBUaGUKK2JlaGF2aW9yIG9mIHRoZSByZWFkKCkgZnVuY3Rpb24gY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoZSBISURJT0NTRkxBRworaW9jdGwoKSBkZXNjcmliZWQgYmVsb3cuCisKKworaW9jdGwoKTogCitUaGlzIGlzIHRoZSBjb250cm9sIGludGVyZmFjZS4gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGNvbnRyb2xzOiAKKworSElESU9DR1ZFUlNJT04gLSBpbnQgKHJlYWQpCitHZXRzIHRoZSB2ZXJzaW9uIGNvZGUgb3V0IG9mIHRoZSBoaWRkZXYgZHJpdmVyLgorCitISURJT0NBUFBMSUNBVElPTiAtIChub25lKQorVGhpcyBpb2N0bCBjYWxsIHJldHVybnMgdGhlIEhJRCBhcHBsaWNhdGlvbiB1c2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlCitoaWQgZGV2aWNlLiBUaGUgdGhpcmQgYXJndW1lbnQgdG8gaW9jdGwoKSBzcGVjaWZpZXMgd2hpY2ggYXBwbGljYXRpb24KK2luZGV4IHRvIGdldC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgZGV2aWNlIGhhcyBtb3JlIHRoYW4gb25lCithcHBsaWNhdGlvbiBjb2xsZWN0aW9uLiBJZiB0aGUgaW5kZXggaXMgaW52YWxpZCAoZ3JlYXRlciBvciBlcXVhbCB0bwordGhlIG51bWJlciBvZiBhcHBsaWNhdGlvbiBjb2xsZWN0aW9ucyB0aGlzIGRldmljZSBoYXMpIHRoZSBpb2N0bAorcmV0dXJucyAtMS4gWW91IGNhbiBmaW5kIG91dCBiZWZvcmVoYW5kIGhvdyBtYW55IGFwcGxpY2F0aW9uCitjb2xsZWN0aW9ucyB0aGUgZGV2aWNlIGhhcyBmcm9tIHRoZSBudW1fYXBwbGljYXRpb25zIGZpZWxkIGZyb20gdGhlCitoaWRkZXZfZGV2aW5mbyBzdHJ1Y3R1cmUuIAorCitISURJT0NHQ09MTEVDVElPTklORk8gLSBzdHJ1Y3QgaGlkZGV2X2NvbGxlY3Rpb25faW5mbyAocmVhZC93cml0ZSkKK1RoaXMgcmV0dXJucyBhIHN1cGVyc2V0IG9mIHRoZSBpbmZvcm1hdGlvbiBhYm92ZSwgcHJvdmlkaW5nIG5vdCBvbmx5CithcHBsaWNhdGlvbiBjb2xsZWN0aW9ucywgYnV0IGFsbCB0aGUgY29sbGVjdGlvbnMgdGhlIGRldmljZSBoYXMuICBJdAorYWxzbyByZXR1cm5zIHRoZSBsZXZlbCB0aGUgY29sbGVjdGlvbiBsaXZlcyBpbiB0aGUgaGllcmFyY2h5LgorVGhlIHVzZXIgcGFzc2VzIGluIGEgaGlkZGV2X2NvbGxlY3Rpb25faW5mbyBzdHJ1Y3Qgd2l0aCB0aGUgaW5kZXggCitmaWVsZCBzZXQgdG8gdGhlIGluZGV4IHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLiAgVGhlIGlvY3RsIGZpbGxzIGluIAordGhlIG90aGVyIGZpZWxkcy4gIElmIHRoZSBpbmRleCBpcyBsYXJnZXIgdGhhbiB0aGUgbGFzdCBjb2xsZWN0aW9uIAoraW5kZXgsIHRoZSBpb2N0bCByZXR1cm5zIC0xIGFuZCBzZXRzIGVycm5vIHRvIC1FSU5WQUwuCisKK0hJRElPQ0dERVZJTkZPIC0gc3RydWN0IGhpZGRldl9kZXZpbmZvIChyZWFkKQorR2V0cyBhIGhpZGRldl9kZXZpbmZvIHN0cnVjdHVyZSB3aGljaCBkZXNjcmliZXMgdGhlIGRldmljZS4KKworSElESU9DR1NUUklORyAtIHN0cnVjdCBzdHJ1Y3QgaGlkZGV2X3N0cmluZ19kZXNjcmlwdG9yIChyZWFkL3dyaXRlKQorR2V0cyBhIHN0cmluZyBkZXNjcmlwdG9yIGZyb20gdGhlIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGZpbGwgaW4gdGhlCisiaW5kZXgiIGZpZWxkIHRvIGluZGljYXRlIHdoaWNoIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJldHVybmVkLgorCitISURJT0NJTklUUkVQT1JUIC0gKG5vbmUpCitJbnN0cnVjdHMgdGhlIGtlcm5lbCB0byByZXRyaWV2ZSBhbGwgaW5wdXQgYW5kIGZlYXR1cmUgcmVwb3J0IHZhbHVlcworZnJvbSB0aGUgZGV2aWNlLiBBdCB0aGlzIHBvaW50LCBhbGwgdGhlIHVzYWdlIHN0cnVjdHVyZXMgd2lsbCBjb250YWluCitjdXJyZW50IHZhbHVlcyBmb3IgdGhlIGRldmljZSwgYW5kIHdpbGwgbWFpbnRhaW4gaXQgYXMgdGhlIGRldmljZQorY2hhbmdlcy4gIE5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoaXMgaW9jdGwgaXMgdW5uZWNlc3NhcnkgaW4gZ2VuZXJhbCwKK3NpbmNlIGxhdGVyIGtlcm5lbHMgYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZSByZXBvcnRzIGZyb20gdGhlCitkZXZpY2UgYXQgYXR0YWNoIHRpbWUuCisKK0hJRElPQ0dOQU1FIC0gc3RyaW5nICh2YXJpYWJsZSBsZW5ndGgpCitHZXRzIHRoZSBkZXZpY2UgbmFtZQorCitISURJT0NHUkVQT1JUIC0gc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAod3JpdGUpCitJbnN0cnVjdHMgdGhlIGtlcm5lbCB0byBnZXQgYSBmZWF0dXJlIG9yIGlucHV0IHJlcG9ydCBmcm9tIHRoZSBkZXZpY2UsCitpbiBvcmRlciB0byBzZWxlY3RpdmVseSB1cGRhdGUgdGhlIHVzYWdlIHN0cnVjdHVyZXMgKGluIGNvbnRyYXN0IHRvCitJTklUUkVQT1JUKS4KKworSElESU9DU1JFUE9SVCAtIHN0cnVjdCBoaWRkZXZfcmVwb3J0X2luZm8gKHdyaXRlKQorSW5zdHJ1Y3RzIHRoZSBrZXJuZWwgdG8gc2VuZCBhIHJlcG9ydCB0byB0aGUgZGV2aWNlLiBUaGlzIHJlcG9ydCBjYW4KK2JlIGZpbGxlZCBpbiBieSB0aGUgdXNlciB0aHJvdWdoIEhJRElPQ1NVU0FHRSBjYWxscyAoYmVsb3cpIHRvIGZpbGwgaW4KK2luZGl2aWR1YWwgdXNhZ2UgdmFsdWVzIGluIHRoZSByZXBvcnQgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcG9ydCBpbiBmdWxsCit0byB0aGUgZGV2aWNlLiAKKworSElESU9DR1JFUE9SVElORk8gLSBzdHJ1Y3QgaGlkZGV2X3JlcG9ydF9pbmZvIChyZWFkL3dyaXRlKQorRmlsbHMgaW4gYSBoaWRkZXZfcmVwb3J0X2luZm8gc3RydWN0dXJlIGZvciB0aGUgdXNlci4gVGhlIHJlcG9ydCBpcworbG9va2VkIHVwIGJ5IHR5cGUgKGlucHV0LCBvdXRwdXQgb3IgZmVhdHVyZSkgYW5kIGlkLCBzbyB0aGVzZSBmaWVsZHMKK211c3QgYmUgZmlsbGVkIGluIGJ5IHRoZSB1c2VyLiBUaGUgSUQgY2FuIGJlIGFic29sdXRlIC0tIHRoZSBhY3R1YWwKK3JlcG9ydCBpZCBhcyByZXBvcnRlZCBieSB0aGUgZGV2aWNlIC0tIG9yIHJlbGF0aXZlIC0tCitISURfUkVQT1JUX0lEX0ZJUlNUIGZvciB0aGUgZmlyc3QgcmVwb3J0LCBhbmQgKEhJRF9SRVBPUlRfSURfTkVYVCB8CityZXBvcnRfaWQpIGZvciB0aGUgbmV4dCByZXBvcnQgYWZ0ZXIgcmVwb3J0X2lkLiBXaXRob3V0IGEtcHJpb3JpCitpbmZvcm1hdGlvbiBhYm91dCByZXBvcnQgaWRzLCB0aGUgcmlnaHQgd2F5IHRvIHVzZSB0aGlzIGlvY3RsIGlzIHRvCit1c2UgdGhlIHJlbGF0aXZlIElEcyBhYm92ZSB0byBlbnVtZXJhdGUgdGhlIHZhbGlkIElEcy4gVGhlIGlvY3RsCityZXR1cm5zIG5vbi16ZXJvIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBuZXh0IElELiBUaGUgcmVhbCByZXBvcnQgSUQgaXMKK2ZpbGxlZCBpbnRvIHRoZSByZXR1cm5lZCBoaWRkZXZfcmVwb3J0X2luZm8gc3RydWN0dXJlLiAKKworSElESU9DR0ZJRUxESU5GTyAtIHN0cnVjdCBoaWRkZXZfZmllbGRfaW5mbyAocmVhZC93cml0ZSkKK1JldHVybnMgdGhlIGZpZWxkIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHJlcG9ydCBpbiBhCitoaWRkZXZfZmllbGRfaW5mbyBzdHJ1Y3R1cmUuIFRoZSB1c2VyIG11c3QgZmlsbCBpbiByZXBvcnRfaWQgYW5kCityZXBvcnRfdHlwZSBpbiB0aGlzIHN0cnVjdHVyZSwgYXMgYWJvdmUuIFRoZSBmaWVsZF9pbmRleCBzaG91bGQgYWxzbworYmUgZmlsbGVkIGluLCB3aGljaCBzaG91bGQgYmUgYSBudW1iZXIgZnJvbSAwIGFuZCBtYXhmaWVsZC0xLCBhcworcmV0dXJuZWQgZnJvbSBhIHByZXZpb3VzIEhJRElPQ0dSRVBPUlRJTkZPIGNhbGwuIAorCitISURJT0NHVUNPREUgLSBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAocmVhZC93cml0ZSkKK1JldHVybnMgdGhlIHVzYWdlX2NvZGUgaW4gYSBoaWRkZXZfdXNhZ2VfcmVmIHN0cnVjdHVyZSwgZ2l2ZW4gdGhhdAorZ2l2ZW4gaXRzIHJlcG9ydCB0eXBlLCByZXBvcnQgaWQsIGZpZWxkIGluZGV4LCBhbmQgaW5kZXggd2l0aGluIHRoZQorZmllbGQgaGF2ZSBhbHJlYWR5IGJlZW4gZmlsbGVkIGludG8gdGhlIHN0cnVjdHVyZS4KKworSElESU9DR1VTQUdFIC0gc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKHJlYWQvd3JpdGUpCitSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHVzYWdlIGluIGEgaGlkZGV2X3VzYWdlX3JlZiBzdHJ1Y3R1cmUuIFRoZQordXNhZ2UgdG8gYmUgcmV0cmlldmVkIGNhbiBiZSBzcGVjaWZpZWQgYXMgYWJvdmUsIG9yIHRoZSB1c2VyIGNhbgorY2hvb3NlIHRvIGZpbGwgaW4gdGhlIHJlcG9ydF90eXBlIGZpZWxkIGFuZCBzcGVjaWZ5IHRoZSByZXBvcnRfaWQgYXMKK0hJRF9SRVBPUlRfSURfVU5LTk9XTi4gSW4gdGhpcyBjYXNlLCB0aGUgaGlkZGV2X3VzYWdlX3JlZiB3aWxsIGJlCitmaWxsZWQgaW4gd2l0aCB0aGUgcmVwb3J0IGFuZCBmaWVsZCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcwordXNhZ2UgaWYgaXQgaXMgZm91bmQuIAorCitISURJT0NTVVNBR0UgLSBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAod3JpdGUpCitTZXRzIHRoZSB2YWx1ZSBvZiBhIHVzYWdlIGluIGFuIG91dHB1dCByZXBvcnQuICBUaGUgdXNlciBmaWxscyBpbgordGhlIGhpZGRldl91c2FnZV9yZWYgc3RydWN0dXJlIGFzIGFib3ZlLCBidXQgYWRkaXRpb25hbGx5IGZpbGxzIGluCit0aGUgdmFsdWUgZmllbGQuCisKK0hJRElPR0NPTExFQ1RJT05JTkRFWCAtIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmICh3cml0ZSkKK1JldHVybnMgdGhlIGNvbGxlY3Rpb24gaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoaXMgdXNhZ2UuICBUaGlzCitpbmRpY2F0ZXMgd2hlcmUgaW4gdGhlIGNvbGxlY3Rpb24gaGllcmFyY2h5IHRoaXMgdXNhZ2Ugc2l0cy4KKworSElESU9DR0ZMQUcgLSBpbnQgKHJlYWQpCitISURJT0NTRkxBRyAtIGludCAod3JpdGUpCitUaGVzZSBvcGVyYXRpb25zIHJlc3BlY3RpdmVseSBpbnNwZWN0IGFuZCByZXBsYWNlIHRoZSBtb2RlIGZsYWdzCit0aGF0IGluZmx1ZW5jZSB0aGUgcmVhZCgpIGNhbGwgYWJvdmUuICBUaGUgZmxhZ3MgYXJlIGFzIGZvbGxvd3M6CisKKyAgICBISURERVZfRkxBR19VUkVGIC0gcmVhZCgpIGNhbGxzIHdpbGwgbm93IHJldHVybiAKKyAgICAgICAgc3RydWN0IGhpZGRldl91c2FnZV9yZWYgaW5zdGVhZCBvZiBzdHJ1Y3QgaGlkZGV2X2V2ZW50LgorICAgICAgICBUaGlzIGlzIGEgbGFyZ2VyIHN0cnVjdHVyZSwgYnV0IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlCisgICAgICAgIGRldmljZSBoYXMgbW9yZSB0aGFuIG9uZSB1c2FnZSBpbiBpdHMgcmVwb3J0cyB3aXRoIHRoZQorICAgICAgICBzYW1lIHVzYWdlIGNvZGUsIHRoaXMgbW9kZSBzZXJ2ZXMgdG8gcmVzb2x2ZSBzdWNoCisgICAgICAgIGFtYmlndWl0eS4KKworICAgIEhJRERFVl9GTEFHX1JFUE9SVCAtIFRoaXMgZmxhZyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uCisgICAgICAgIHdpdGggSElEREVWX0ZMQUdfVVJFRi4gIFdpdGggdGhpcyBmbGFnIHNldCwgd2hlbiB0aGUgZGV2aWNlCisgICAgICAgIHNlbmRzIGEgcmVwb3J0LCBhIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIHdpbGwgYmUgcmV0dXJuZWQKKyAgICAgICAgdG8gcmVhZCgpIGZpbGxlZCBpbiB3aXRoIHRoZSByZXBvcnRfdHlwZSBhbmQgcmVwb3J0X2lkLCBidXQgCisgICAgICAgIHdpdGggZmllbGRfaW5kZXggc2V0IHRvIEZJRUxEX0lOREVYX05PTkUuICBUaGlzIHNlcnZlcyBhcworICAgICAgICBhZGRpdGlvbmFsIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBkZXZpY2UgaGFzIHNlbnQgYSByZXBvcnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9ob3RwbHVnLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2hvdHBsdWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzE3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9ob3RwbHVnLnR4dApAQCAtMCwwICsxLDE0OCBAQAorTElOVVggSE9UUExVR0dJTkcKKworSW4gaG90cGx1Z2dhYmxlIGJ1c3NlcyBsaWtlIFVTQiAoYW5kIENhcmRidXMgUENJKSwgZW5kLXVzZXJzIHBsdWcgZGV2aWNlcworaW50byB0aGUgYnVzIHdpdGggcG93ZXIgb24uICBJbiBtb3N0IGNhc2VzLCB1c2VycyBleHBlY3QgdGhlIGRldmljZXMgdG8gYmVjb21lCitpbW1lZGlhdGVseSB1c2FibGUuICBUaGF0IG1lYW5zIHRoZSBzeXN0ZW0gbXVzdCBkbyBtYW55IHRoaW5ncywgaW5jbHVkaW5nOgorCisgICAgLSBGaW5kIGEgZHJpdmVyIHRoYXQgY2FuIGhhbmRsZSB0aGUgZGV2aWNlLiAgVGhhdCBtYXkgaW52b2x2ZQorICAgICAgbG9hZGluZyBhIGtlcm5lbCBtb2R1bGU7IG5ld2VyIGRyaXZlcnMgY2FuIHVzZSBtb2R1bGUtaW5pdC10b29scworICAgICAgdG8gcHVibGlzaCB0aGVpciBkZXZpY2UgKGFuZCBjbGFzcykgc3VwcG9ydCB0byB1c2VyIHV0aWxpdGllcy4KKworICAgIC0gQmluZCBhIGRyaXZlciB0byB0aGF0IGRldmljZS4gIEJ1cyBmcmFtZXdvcmtzIGRvIHRoYXQgdXNpbmcgYQorICAgICAgZGV2aWNlIGRyaXZlcidzIHByb2JlKCkgcm91dGluZS4KKyAgICAKKyAgICAtIFRlbGwgb3RoZXIgc3Vic3lzdGVtcyB0byBjb25maWd1cmUgdGhlIG5ldyBkZXZpY2UuICBQcmludAorICAgICAgcXVldWVzIG1heSBuZWVkIHRvIGJlIGVuYWJsZWQsIG5ldHdvcmtzIGJyb3VnaHQgdXAsIGRpc2sKKyAgICAgIHBhcnRpdGlvbnMgbW91bnRlZCwgYW5kIHNvIG9uLiAgSW4gc29tZSBjYXNlcyB0aGVzZSB3aWxsCisgICAgICBiZSBkcml2ZXItc3BlY2lmaWMgYWN0aW9ucy4KKworVGhpcyBpbnZvbHZlcyBhIG1peCBvZiBrZXJuZWwgbW9kZSBhbmQgdXNlciBtb2RlIGFjdGlvbnMuICBNYWtpbmcgZGV2aWNlcworYmUgaW1tZWRpYXRlbHkgdXNhYmxlIG1lYW5zIHRoYXQgYW55IHVzZXIgbW9kZSBhY3Rpb25zIGNhbid0IHdhaXQgZm9yIGFuCithZG1pbmlzdHJhdG9yIHRvIGRvIHRoZW06ICB0aGUga2VybmVsIG11c3QgdHJpZ2dlciB0aGVtLCBlaXRoZXIgcGFzc2l2ZWx5CisodHJpZ2dlcmluZyBzb21lIG1vbml0b3JpbmcgZGFlbW9uIHRvIGludm9rZSBhIGhlbHBlciBwcm9ncmFtKSBvcgorYWN0aXZlbHkgKGNhbGxpbmcgc3VjaCBhIHVzZXIgbW9kZSBoZWxwZXIgcHJvZ3JhbSBkaXJlY3RseSkuCisKK1Rob3NlIHRyaWdnZXJlZCBhY3Rpb25zIG11c3Qgc3VwcG9ydCBhIHN5c3RlbSdzIGFkbWluaXN0cmF0aXZlIHBvbGljaWVzOworc3VjaCBwcm9ncmFtcyBhcmUgY2FsbGVkICJwb2xpY3kgYWdlbnRzIiBoZXJlLiAgVHlwaWNhbGx5IHRoZXkgaW52b2x2ZQorc2hlbGwgc2NyaXB0cyB0aGF0IGRpc3BhdGNoIHRvIG1vcmUgZmFtaWxpYXIgYWRtaW5pc3RyYXRpb24gdG9vbHMuCisKK0JlY2F1c2Ugc29tZSBvZiB0aG9zZSBhY3Rpb25zIHJlbHkgb24gaW5mb3JtYXRpb24gYWJvdXQgZHJpdmVycyAobWV0YWRhdGEpCit0aGF0IGlzIGN1cnJlbnRseSBhdmFpbGFibGUgb25seSB3aGVuIHRoZSBkcml2ZXJzIGFyZSBkeW5hbWljYWxseSBsaW5rZWQsCit5b3UgZ2V0IHRoZSBiZXN0IGhvdHBsdWdnaW5nIHdoZW4geW91IGNvbmZpZ3VyZSBhIGhpZ2hseSBtb2R1bGFyIHN5c3RlbS4KKworCitLRVJORUwgSE9UUExVRyBIRUxQRVIgKC9zYmluL2hvdHBsdWcpCisKK1doZW4geW91IGNvbXBpbGUgd2l0aCBDT05GSUdfSE9UUExVRywgeW91IGdldCBhIG5ldyBrZXJuZWwgcGFyYW1ldGVyOgorL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnLCB3aGljaCBub3JtYWxseSBob2xkcyB0aGUgcGF0aG5hbWUgIi9zYmluL2hvdHBsdWciLgorVGhhdCBwYXJhbWV0ZXIgbmFtZXMgYSBwcm9ncmFtIHdoaWNoIHRoZSBrZXJuZWwgbWF5IGludm9rZSBhdCB2YXJpb3VzIHRpbWVzLgorCitUaGUgL3NiaW4vaG90cGx1ZyBwcm9ncmFtIGNhbiBiZSBpbnZva2VkIGJ5IGFueSBzdWJzeXN0ZW0gYXMgcGFydCBvZiBpdHMKK3JlYWN0aW9uIHRvIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UsIGZyb20gYSB0aHJlYWQgaW4gdGhhdCBzdWJzeXN0ZW0uCitPbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQ6IHRoZSBuYW1lIG9mIGEgc3Vic3lzdGVtIGJlaW5nIG5vdGlmaWVkIG9mCitzb21lIGtlcm5lbCBldmVudC4gIFRoYXQgbmFtZSBpcyB1c2VkIGFzIHRoZSBmaXJzdCBrZXkgZm9yIGZ1cnRoZXIgZXZlbnQKK2Rpc3BhdGNoOyBhbnkgb3RoZXIgYXJndW1lbnQgYW5kIGVudmlyb25tZW50IHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBieQordGhlIHN1YnN5c3RlbSBtYWtpbmcgdGhhdCBpbnZvY2F0aW9uLgorCitIb3RwbHVnIHNvZnR3YXJlIGFuZCBvdGhlciByZXNvdXJjZXMgaXMgYXZhaWxhYmxlIGF0OgorCisJaHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0CisKK01haWxpbmcgbGlzdCBpbmZvcm1hdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhdCB0aGF0IHNpdGUuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitVU0IgUE9MSUNZIEFHRU5UCisKK1RoZSBVU0Igc3Vic3lzdGVtIGN1cnJlbnRseSBpbnZva2VzIC9zYmluL2hvdHBsdWcgd2hlbiBVU0IgZGV2aWNlcworYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBzeXN0ZW0uICBUaGUgaW52b2NhdGlvbiBpcyBkb25lIGJ5IHRoZSBrZXJuZWwKK2h1YiBkYWVtb24gdGhyZWFkIFtraHViZF0sIG9yIGVsc2UgYXMgcGFydCBvZiByb290IGh1YiBpbml0aWFsaXphdGlvbgorKGRvbmUgYnkgaW5pdCwgbW9kcHJvYmUsIGthcG1kLCBldGMpLiAgSXRzIHNpbmdsZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyCitpcyB0aGUgc3RyaW5nICJ1c2IiLCBhbmQgaXQgcGFzc2VzIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlczoKKworICAgIEFDVElPTiAuLi4gImFkZCIsICJyZW1vdmUiCisgICAgUFJPRFVDVCAuLi4gVVNCIHZlbmRvciwgcHJvZHVjdCwgYW5kIHZlcnNpb24gY29kZXMgKGhleCkKKyAgICBUWVBFIC4uLiBkZXZpY2UgY2xhc3MgY29kZXMgKGRlY2ltYWwpCisgICAgSU5URVJGQUNFIC4uLiBpbnRlcmZhY2UgMCBjbGFzcyBjb2RlcyAoZGVjaW1hbCkKKworSWYgInVzYmRldmZzIiBpcyBjb25maWd1cmVkLCBERVZJQ0UgYW5kIERFVkZTIGFyZSBhbHNvIHBhc3NlZC4gIERFVklDRSBpcwordGhlIHBhdGhuYW1lIG9mIHRoZSBkZXZpY2UsIGFuZCBpcyB1c2VmdWwgZm9yIGRldmljZXMgd2l0aCBtdWx0aXBsZSBhbmQvb3IKK2FsdGVybmF0ZSBpbnRlcmZhY2VzIHRoYXQgY29tcGxpY2F0ZSBkcml2ZXIgc2VsZWN0aW9uLiAgQnkgZGVzaWduLCBVU0IKK2hvdHBsdWdnaW5nIGlzIGluZGVwZW5kZW50IG9mICJ1c2JkZXZmcyI6ICB5b3UgY2FuIGRvIG1vc3QgZXNzZW50aWFsIHBhcnRzCitvZiBVU0IgZGV2aWNlIHNldHVwIHdpdGhvdXQgdXNpbmcgdGhhdCBmaWxlc3lzdGVtLCBhbmQgd2l0aG91dCBydW5uaW5nIGEKK3VzZXIgbW9kZSBkYWVtb24gdG8gZGV0ZWN0IGNoYW5nZXMgaW4gc3lzdGVtIGNvbmZpZ3VyYXRpb24uCisKK0N1cnJlbnRseSBhdmFpbGFibGUgcG9saWN5IGFnZW50IGltcGxlbWVudGF0aW9ucyBjYW4gbG9hZCBkcml2ZXJzIGZvcgorbW9kdWxlcywgYW5kIGNhbiBpbnZva2UgZHJpdmVyLXNwZWNpZmljIHNldHVwIHNjcmlwdHMuICBUaGUgbmV3ZXN0IG9uZXMKK2xldmVyYWdlIFVTQiBtb2R1bGUtaW5pdC10b29scyBzdXBwb3J0LiAgTGF0ZXIgYWdlbnRzIG1pZ2h0IHVubG9hZCBkcml2ZXJzLgorCisKK1VTQiBNT0RVVElMUyBTVVBQT1JUCisKK0N1cnJlbnQgdmVyc2lvbnMgb2YgbW9kdWxlLWluaXQtdG9vbHMgd2lsbCBjcmVhdGUgYSAibW9kdWxlcy51c2JtYXAiIGZpbGUKK3doaWNoIGNvbnRhaW5zIHRoZSBlbnRyaWVzIGZyb20gZWFjaCBkcml2ZXIncyBNT0RVTEVfREVWSUNFX1RBQkxFLiAgU3VjaAorZmlsZXMgY2FuIGJlIHVzZWQgYnkgdmFyaW91cyB1c2VyIG1vZGUgcG9saWN5IGFnZW50cyB0byBtYWtlIHN1cmUgYWxsIHRoZQorcmlnaHQgZHJpdmVyIG1vZHVsZXMgZ2V0IGxvYWRlZCwgZWl0aGVyIGF0IGJvb3QgdGltZSBvciBsYXRlci4gCisKK1NlZSA8bGludXgvdXNiLmg+IGZvciBmdWxsIGluZm9ybWF0aW9uIGFib3V0IHN1Y2ggdGFibGUgZW50cmllczsgb3IgbG9vaworYXQgZXhpc3RpbmcgZHJpdmVycy4gIEVhY2ggdGFibGUgZW50cnkgZGVzY3JpYmVzIG9uZSBvciBtb3JlIGNyaXRlcmlhIHRvCitiZSB1c2VkIHdoZW4gbWF0Y2hpbmcgYSBkcml2ZXIgdG8gYSBkZXZpY2Ugb3IgY2xhc3Mgb2YgZGV2aWNlcy4gIFRoZQorc3BlY2lmaWMgY3JpdGVyaWEgYXJlIGlkZW50aWZpZWQgYnkgYml0cyBzZXQgaW4gIm1hdGNoX2ZsYWdzIiwgcGFpcmVkCit3aXRoIGZpZWxkIHZhbHVlcy4gIFlvdSBjYW4gY29uc3RydWN0IHRoZSBjcml0ZXJpYSBkaXJlY3RseSwgb3Igd2l0aAorbWFjcm9zIHN1Y2ggYXMgdGhlc2UsIGFuZCB1c2UgZHJpdmVyX2luZm8gdG8gc3RvcmUgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgIFVTQl9ERVZJQ0UgKHZlbmRvcklkLCBwcm9kdWN0SWQpCisJLi4uIG1hdGNoaW5nIGRldmljZXMgd2l0aCBzcGVjaWZpZWQgdmVuZG9yIGFuZCBwcm9kdWN0IGlkcworICAgIFVTQl9ERVZJQ0VfVkVSICh2ZW5kb3JJZCwgcHJvZHVjdElkLCBsbywgaGkpCisJLi4uIGxpa2UgVVNCX0RFVklDRSB3aXRoIGxvIDw9IHByb2R1Y3R2ZXJzaW9uIDw9IGhpCisgICAgVVNCX0lOVEVSRkFDRV9JTkZPIChjbGFzcywgc3ViY2xhc3MsIHByb3RvY29sKQorCS4uLiBtYXRjaGluZyBzcGVjaWZpZWQgaW50ZXJmYWNlIGNsYXNzIGluZm8KKyAgICBVU0JfREVWSUNFX0lORk8gKGNsYXNzLCBzdWJjbGFzcywgcHJvdG9jb2wpCisJLi4uIG1hdGNoaW5nIHNwZWNpZmllZCBkZXZpY2UgY2xhc3MgaW5mbworCitBIHNob3J0IGV4YW1wbGUsIGZvciBhIGRyaXZlciB0aGF0IHN1cHBvcnRzIHNldmVyYWwgc3BlY2lmaWMgVVNCIGRldmljZXMKK2FuZCB0aGVpciBxdWlya3MsIG1pZ2h0IGhhdmUgYSBNT0RVTEVfREVWSUNFX1RBQkxFIGxpa2UgdGhpczoKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBteWRyaXZlcl9pZF90YWJsZSA9IHsKKwl7IFVTQl9ERVZJQ0UgKDB4OTk5OSwgMHhhYWFhKSwgZHJpdmVyX2luZm86IFFVSVJLX1ggfSwKKwl7IFVTQl9ERVZJQ0UgKDB4YmJiYiwgMHg4ODg4KSwgZHJpdmVyX2luZm86IFFVSVJLX1l8UVVJUktfWiB9LAorCS4uLgorCXsgfSAvKiBlbmQgd2l0aCBhbiBhbGwtemVyb2VzIGVudHJ5ICovCisgICAgfQorICAgIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbXlkcml2ZXJfaWRfdGFibGUpOworCitNb3N0IFVTQiBkZXZpY2UgZHJpdmVycyBzaG91bGQgcGFzcyB0aGVzZSB0YWJsZXMgdG8gdGhlIFVTQiBzdWJzeXN0ZW0gYXMKK3dlbGwgYXMgdG8gdGhlIG1vZHVsZSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gIE5vdCBhbGwsIHRob3VnaDogc29tZSBkcml2ZXIKK2ZyYW1ld29ya3MgY29ubmVjdCB1c2luZyBpbnRlcmZhY2VzIGxheWVyZWQgb3ZlciBVU0IsIGFuZCBzbyB0aGV5IHdvbid0CituZWVkIHN1Y2ggYSAic3RydWN0IHVzYl9kcml2ZXIiLgorCitEcml2ZXJzIHRoYXQgY29ubmVjdCBkaXJlY3RseSB0byB0aGUgVVNCIHN1YnN5c3RlbSBzaG91bGQgYmUgZGVjbGFyZWQKK3NvbWV0aGluZyBsaWtlIHRoaXM6CisKKyAgICBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXlkcml2ZXIgPSB7CisJLm5hbWUJCT0gIm15ZHJpdmVyIiwKKwkuaWRfdGFibGUJPSBteWRyaXZlcl9pZF90YWJsZSwKKwkucHJvYmUJCT0gbXlfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBteV9kaXNjb25uZWN0LAorCisJLyoKKwlpZiB1c2luZyB0aGUgdXNiIGNoYXJkZXYgZnJhbWV3b3JrOgorCSAgICAubWlub3IJCT0gTVlfVVNCX01JTk9SX1NUQVJULAorCSAgICAuZm9wcwkJPSBteV9maWxlX29wcywKKwlpZiBleHBvc2luZyBhbnkgb3BlcmF0aW9ucyB0aHJvdWdoIHVzYmRldmZzOgorCSAgICAuaW9jdGwJCT0gbXlfaW9jdGwsCisJKi8KKyAgICB9CisKK1doZW4gdGhlIFVTQiBzdWJzeXN0ZW0ga25vd3MgYWJvdXQgYSBkcml2ZXIncyBkZXZpY2UgSUQgdGFibGUsIGl0J3MgdXNlZCB3aGVuCitjaG9vc2luZyBkcml2ZXJzIHRvIHByb2JlKCkuICBUaGUgdGhyZWFkIGRvaW5nIG5ldyBkZXZpY2UgcHJvY2Vzc2luZyBjaGVja3MKK2RyaXZlcnMnIGRldmljZSBJRCBlbnRyaWVzIGZyb20gdGhlIE1PRFVMRV9ERVZJQ0VfVEFCTEUgYWdhaW5zdCBpbnRlcmZhY2UgYW5kCitkZXZpY2UgZGVzY3JpcHRvcnMgZm9yIHRoZSBkZXZpY2UuICBJdCB3aWxsIG9ubHkgY2FsbCBwcm9iZSgpIGlmIHRoZXJlIGlzIGEKK21hdGNoLCBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IHRvIHByb2JlKCkgd2lsbCBiZSB0aGUgZW50cnkgdGhhdCBtYXRjaGVkLgorCitJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhbiBpZF90YWJsZSBmb3IgeW91ciBkcml2ZXIsIHRoZW4geW91ciBkcml2ZXIgbWF5IGdldAorcHJvYmVkIGZvciBlYWNoIG5ldyBkZXZpY2U7IHRoZSB0aGlyZCBwYXJhbWV0ZXIgdG8gcHJvYmUoKSB3aWxsIGJlIG51bGwuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyZjIxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQKQEAgLTAsMCArMSwzMjQgQEAKK1JFQURNRSBmb3IgTGludXggZGV2aWNlIGRyaXZlciBmb3IgdGhlIElCTSAiQy1JdCIgVVNCIHZpZGVvIGNhbWVyYQorCitJTlRST0RVQ1RJT046CisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHVzZSBhbGwgZmVhdHVyZXMga25vd24gdG8gZXhpc3QgaW4KK3RoZSBJQk0gY2FtZXJhLiBIb3dldmVyIG1vc3Qgb2YgbmVlZGVkIGZlYXR1cmVzIHdvcmsgd2VsbC4KKworVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCB1c2luZyBsb2dzIG9mIG9ic2VydmVkIFVTQiB0cmFmZmljCit3aGljaCB3YXMgcHJvZHVjZWQgYnkgc3RhbmRhcmQgV2luZG93cyBkcml2ZXIgKGMtaXQ5OC5zeXMpLgorSSBkaWQgbm90IGhhdmUgZGF0YSBzaGVldHMgZnJvbSBYaXJsaW5rLgorCitWaWRlbyBmb3JtYXRzOgorICAgICAgMTI4eDk2ICBbbW9kZWwgMV0KKyAgICAgIDE3NngxNDQKKyAgICAgIDMyMHgyNDAgW21vZGVsIDJdCisgICAgICAzNTJ4MjQwIFttb2RlbCAyXQorICAgICAgMzUyeDI4OAorRnJhbWUgcmF0ZTogMyAtIDMwIGZyYW1lcyBwZXIgc2Vjb25kIChGUFMpCitFeHRlcm5hbCBpbnRlcmZhY2U6IFVTQgorSW50ZXJuYWwgaW50ZXJmYWNlOiBWaWRlbyBGb3IgTGludXggKFY0TCkKK1N1cHBvcnRlZCBjb250cm9sczoKKy0gYnkgVjRMOiBDb250cmFzdCwgIEJyaWdodG5lc3MsIENvbG9yLCBIdWUKKy0gYnkgZHJpdmVyIG9wdGlvbnM6IGZyYW1lIHJhdGUsIGxpZ2h0aW5nIGNvbmRpdGlvbnMsIHZpZGVvIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgcGljdHVyZSBzZXR0aW5ncywgc2hhcnBuZXNzLgorCitTVVBQT1JURUQgQ0FNRVJBUzoKKworWGlybGluayAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzICJJQk0gUEMgQ2FtZXJhIi4KK1RoZSBkZXZpY2UgdXNlcyBwcm9wcmlldGFyeSBBU0lDIChhbmQgY29tcHJlc3Npb24gbWV0aG9kKTsKK2l0IGlzIG1hbnVmYWN0dXJlZCBieSBYaXJsaW5rLiBTZWUgaHR0cDovL3d3dy54aXJsaW5rLmNvbS8KK2h0dHA6Ly93d3cuaWJtcGNjYW1lcmEuY29tIG9yIGh0dHA6Ly93d3cuYy1pdG5vdy5jb20vIGZvcgorZGV0YWlscyBhbmQgcGljdHVyZXMuCisKK1RoaXMgdmVyeSBjaGlwc2V0ICgiWCBDaGlwIiwgYXMgbWFya2VkIGF0IHRoZSBmYWN0b3J5KQoraXMgdXNlZCBpbiBzZXZlcmFsIG90aGVyIGNhbWVyYXMsIGFuZCB0aGV5IGFyZSBzdXBwb3J0ZWQKK2FzIHdlbGw6CisKKy0gSUJNIE5ldENhbWVyYQorLSBWZW8gU3RpbmdyYXkKKworVGhlIExpbnV4IGRyaXZlciB3YXMgZGV2ZWxvcGVkIHdpdGggY2FtZXJhIHdpdGggZm9sbG93aW5nCittb2RlbCBudW1iZXIgKG9yIEZDQyBJRCk6IEtTWC1YVlA1MTAuIFRoaXMgY2FtZXJhIGhhcyB0aHJlZQoraW50ZXJmYWNlcywgZWFjaCB3aXRoIG9uZSBlbmRwb2ludCAoY29udHJvbCwgaXNvLCBpc28pLiBUaGlzCit0eXBlIG9mIGNhbWVyYXMgaXMgcmVmZXJyZWQgdG8gYXMgIm1vZGVsIDEiLiBUaGVzZSBjYW1lcmFzIGFyZQorbm8gbG9uZ2VyIG1hbnVmYWN0dXJlZC4KKworWGlybGluayBub3cgbWFudWZhY3R1cmVzIG5ldyBjYW1lcmFzIHdoaWNoIGFyZSBzb21ld2hhdCBkaWZmZXJlbnQuCitJbiBwYXJ0aWN1bGFyLCBmb2xsb3dpbmcgbW9kZWxzIFtGQ0MgSURdIGJlbG9uZyB0byB0aGF0IGNhdGVnb3J5OgorCitYVlAzMDAgW0tTWC1YOTkwM10KK1hWUDYwMCBbS1NYLVg5OTAyXQorWFZQNjEwIFtLU1gtWDk5MDJdCisKKyhzZWUgaHR0cDovL3d3dy54aXJsaW5rLmNvbS9pYm1wY2NhbWVyYS8gZm9yIHVwZGF0ZXMsIHRoZXkgcmVmZXIKK3RvIHRoZXNlIG5ldyBjYW1lcmFzIGJ5IFdpbmRvd3MgZHJpdmVyIGRhdGVkIDEyLTI3LTk5LCB2MzAwNSBCRVRBKQorVGhlc2UgY2FtZXJhcyBoYXZlIHR3byBpbnRlcmZhY2VzLCBvbmUgZW5kcG9pbnQgaW4gZWFjaCAoaXNvLCBidWxrKS4KK1N1Y2ggdHlwZSBvZiBjYW1lcmFzIGlzIHJlZmVycmVkIHRvIGFzICJtb2RlbCAyIi4gVGhleSBhcmUgc3VwcG9ydGVkCisod2l0aCBleGNlcHRpb24gb2YgMzUyeDI4OCBuYXRpdmUgbW9kZSkuCisKK1NvbWUgSUJNIE5ldENhbWVyYXMgKE1vZGVsIDQpIGFyZSBtYWRlIHRvIGdlbmVyYXRlIG9ubHkgY29tcHJlc3NlZAordmlkZW8gc3RyZWFtcy4gVGhpcyBpcyBncmVhdCBmb3IgcGVyZm9ybWFuY2UsIGJ1dCB1bmZvcnR1bmF0ZWx5Citub2JvZHkga25vd3MgaG93IHRvIGRlY29tcHJlc3MgdGhlIHN0cmVhbSA6LSggVGhlcmVmb3JlLCB0aGVzZQorY2FtZXJhcyBhcmUgKnVuc3VwcG9ydGVkKiBhbmQgaWYgeW91IHRyeSB0byB1c2Ugb25lIG9mIHRob3NlLCBhbGwKK3lvdSBnZXQgaXMgcmFuZG9tIGNvbG9yZWQgaG9yaXpvbnRhbCBzdHJlYWtzLCBub3QgdGhlIGltYWdlIQorSWYgeW91IGhhdmUgb25lIG9mIHRob3NlIGNhbWVyYXMsIHlvdSBwcm9iYWJseSBzaG91bGQgcmV0dXJuIGl0Cit0byB0aGUgc3RvcmUgYW5kIGdldCBzb21ldGhpbmcgdGhhdCBpcyBzdXBwb3J0ZWQuCisKK1RlbGwgbWUgbW9yZSBhYm91dCBhbGwgdGhhdCAibW9kZWwiIGJ1c2luZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGp1c3QgaW52ZW50ZWQgbW9kZWwgbnVtYmVycyB0byB1bmlxdWVseSBpZGVudGlmeSBmbGF2b3JzIG9mIHRoZQoraGFyZHdhcmUvZmlybXdhcmUgdGhhdCB3ZXJlIHNvbGQuIEl0IHdhcyB2ZXJ5IGNvbmZ1c2luZyB0byB1c2UKK2JyYW5kIG5hbWVzIG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgbnVtYmVyaW5nIHNjaGVtZXMuIFNvIEkgZm91bmQKK2J5IGV4cGVyaW1lbnRhdGlvbiB0aGF0IGFsbCBYaXJsaW5rIGNoaXBzZXRzIGZhbGwgaW50byBmb3VyIGJpZworY2xhc3NlcywgYW5kIEkgY2FsbGVkIHRoZW0gIm1vZGVscyIuIEVhY2ggbW9kZWwgaXMgcHJvZ3JhbW1lZCBpbgoraXRzIG93biB3YXksIGFuZCBlYWNoIG1vZGVsIHNlbmRzIGJhY2sgdGhlIHZpZGVvIGluIGl0cyBvd24gd2F5LgorCitRdWlya3Mgb2YgTW9kZWwgMiBjYW1lcmFzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb2RlbCAyIGRvZXMgbm90IGhhdmUgaGFyZHdhcmUgY29udHJhc3QgY29udHJvbC4gQ29ycmVzcG9uZGluZyBWNEwKK2NvbnRyb2wgaXMgaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUsIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UgdG8geW91cgorQ1BVLCBidXQgYXQgbGVhc3QgaXQgd29ya3MuCisKK1RoaXMgZHJpdmVyIHByb3ZpZGVzIDM1MngyODggbW9kZSBieSBzd2l0Y2hpbmcgdGhlIGNhbWVyYSBpbnRvCitxdWFzaS0zNTJ4Mjg4IFJHQiBtb2RlICg4MDAgS2JpdHMgcGVyIGZyYW1lKSBlc3NlbnRpYWxseSBsaW1pdGluZwordGhpcyBtb2RlIHRvIDEwIGZyYW1lcyBwZXIgc2Vjb25kIG9yIGxlc3MsIGluIGlkZWFsIGNvbmRpdGlvbnMgb24KK3RoZSBidXMgKFVTQiBpcyBzaGFyZWQsIGFmdGVyIGFsbCkuIFRoZSBmcmFtZSByYXRlCitoYXMgdG8gYmUgcHJvZ3JhbW1lZCB2ZXJ5IGNvbnNlcnZhdGl2ZWx5LiBBZGRpdGlvbmFsIGNvbmNlcm4gaXMgdGhhdAorZnJhbWUgcmF0ZSBkZXBlbmRzIG9uIGJyaWdodG5lc3Mgc2V0dGluZzsgdGhlcmVmb3JlIHRoZSBwaWN0dXJlIGNhbgorYmUgZ29vZCBhdCBvbmUgYnJpZ2h0bmVzcyBhbmQgYnJva2VuIGF0IGFub3RoZXIhIEkgZGlkIG5vdCB3YW50IHRvIGZpeAordGhlIGZyYW1lIHJhdGUgYXQgc2xvd2VzdCBzZXR0aW5nLCBidXQgSSBoYWQgdG8gbW92ZSBpdCBwcmV0dHkgbXVjaCBkb3duCit0aGUgc2NhbGUgKHNvIHRoYXQgZnJhbWVyYXRlIG9wdGlvbiBiYXJlbHkgbWF0dGVycykuIEkgYWxzbyBub3RpY2VkIHRoYXQKK2NhbWVyYSBhZnRlciBmaXJzdCBwb3dlcmluZyB1cCBwcm9kdWNlcyBmcmFtZXMgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gZHVyaW5nCitjb25zZWN1dGl2ZSB1c2VzLiBBbGwgdGhpcyBtZWFucyB0aGF0IGlmIHlvdSB1c2UgMzUyeDI4OCAod2hpY2ggaXMKK2RlZmF1bHQpLCBiZSB3YXJuZWQgLSB5b3UgbWF5IGVuY291bnRlciBicm9rZW4gcGljdHVyZSBvbiBmaXJzdCBjb25uZWN0OwordHJ5IHRvIGFkanVzdCBicmlnaHRuZXNzIC0gYnJpZ2h0ZXIgaW1hZ2UgaXMgc2xvd2VyLCBzbyBVU0Igd2lsbCBiZSBhYmxlCit0byBzZW5kIGFsbCBkYXRhLiBIb3dldmVyIGlmIHlvdSByZWd1bGFybHkgdXNlIE1vZGVsIDIgY2FtZXJhcyB5b3UgbWF5CitwcmVmZXIgMTc2eDE0NCB3aGljaCBtYWtlcyBwZXJmZWN0bHkgZ29vZCBJNDIwLCB3aXRoIG5vIHNjYWxpbmcgYW5kCitsZXNzZXIgZGVtYW5kcyBvbiBVU0IgKDMwMCBLYml0cyBwZXIgc2Vjb25kLCBvciAyNiBmcmFtZXMgcGVyIHNlY29uZCkuCisKK0Fub3RoZXIgc3RyYW5nZSBlZmZlY3Qgb2YgMzUyeDI4OCBtb2RlIGlzIHRoZSBmaW5lIHZlcnRpY2FsIGdyaWQgdmlzaWJsZQorb24gc29tZSBjb2xvcmVkIHN1cmZhY2VzLiBJIGFtIHN1cmUgaXQgaXMgY2F1c2VkIGJ5IG1lIG5vdCB1bmRlcnN0YW5kaW5nCit3aGF0IHRoZSBjYW1lcmEgaXMgdHJ5aW5nIHRvIHNheS4gQmxhbWUgdHJhZGUgc2VjcmV0cyBmb3IgdGhhdC4KKworVGhlIGNhbWVyYSB0aGF0IEkgaGFkIGFsc28gaGFzIGEgaGFyZHdhcmUgcXVpcms6IGlmIGRpc2Nvbm5lY3RlZCwKK2l0IG5lZWRzIGZldyBtaW51dGVzIHRvICJyZWxheCIgYmVmb3JlIGl0IGNhbiBiZSBwbHVnZ2VkIGluIGFnYWluCisocG9vcmx5IGRlc2lnbmVkIFVTQiBwcm9jZXNzb3IgcmVzZXQgY2lyY3VpdD8pCisKK1tWZW8gU3RpbmdyYXkgd2l0aCBQcm9kdWN0IElEIDB4ODAwQyBpcyBhbHNvIE1vZGVsIDIsIGJ1dCBJIGhhdmVuJ3QKK29ic2VydmVkIHRoaXMgcGFydGljdWxhciBmbGF3IGluIGl0Ll0KKworTW9kZWwgMiBjYW1lcmEgY2FuIGJlIHByb2dyYW1tZWQgZm9yIHZlcnkgaGlnaCBzZW5zaXRpdml0eSAoZXZlbiBzdGFybGlnaHQKK21heSBiZSBlbm91Z2gpLCB0aGlzIG1ha2VzIGl0IGNvbnZlbmllbnQgZm9yIHRpbmtlcmluZyB3aXRoLiBUaGUgZHJpdmVyCitjb2RlIGhhcyBlbm91Z2ggY29tbWVudHMgdG8gaGVscCBhIHByb2dyYW1tZXIgdG8gdHdlYWsgdGhlIGNhbWVyYQorYXMgcy9oZSBmZWVscyBuZWNlc3NhcnkuCisKK1dIQVQgWU9VIE5FRUQ6CisKKy0gQSBzdXBwb3J0ZWQgSUJNIFBDIChDLWl0KSBjYW1lcmEgKG1vZGVsIDEgb3IgMikKKworLSBBIExpbnV4IGJveCB3aXRoIFVTQiBzdXBwb3J0ICgyLjMvMi40OyAyLjIgdy9iYWNrcG9ydCBtYXkgd29yaykKKworLSBBIFZpZGVvNExpbnV4IGNvbXBhdGlibGUgZnJhbWUgZ3JhYmJlciBwcm9ncmFtIHN1Y2ggYXMgeGF3dHYuCisgIAorSE9XIFRPIENPTVBJTEUgVEhFIERSSVZFUjoKKworWW91IG5lZWQgdG8gY29tcGlsZSB0aGUgZHJpdmVyIG9ubHkgaWYgeW91IGFyZSBhIGRldmVsb3Blcgorb3IgaWYgeW91IHdhbnQgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZSBjb2RlLiBNb3N0IGRpc3RyaWJ1dGlvbnMKK3ByZWNvbXBpbGUgYWxsIG1vZHVsZXMsIHNvIHlvdSBjYW4gZ28gZGlyZWN0bHkgdG8gdGhlIG5leHQKK3NlY3Rpb24gIkhPVyBUTyBVU0UgVEhFIERSSVZFUiIuCisKK1RoZSBpYm1jYW0gZHJpdmVyIHVzZXMgdXNidmlkZW8gaGVscGVyIGxpYnJhcnkgKG1vZHVsZSksCitzbyBpZiB5b3UgYXJlIHN0dWR5aW5nIHRoZSBpYm1jYW0gY29kZSB5b3Ugd2lsbCBiZSBsZWQgdGhlcmUuCisKK1RoZSBkcml2ZXIgaXRzZWxmIGNvbnNpc3RzIG9mIG9ubHkgb25lIGZpbGUgaW4gdXNiLyBkaXJlY3Rvcnk6CitpYm1jYW0uYy4gVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGludG8gdGhlIExpbnV4IGtlcm5lbCBidWlsZAorcHJvY2VzcyBpZiB5b3UgY29uZmlndXJlIHRoZSBrZXJuZWwgZm9yIENPTkZJR19VU0JfSUJNQ0FNLgorUnVuICJtYWtlIHhjb25maWciIGFuZCBpbiBVU0Igc2VjdGlvbiB5b3Ugd2lsbCBmaW5kIHRoZSBJQk0KK2NhbWVyYSBkcml2ZXIuIFNlbGVjdCBpdCwgc2F2ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmVjb21waWxlLgorCitIT1cgVE8gVVNFIFRIRSBEUklWRVI6CisKK0kgcmVjb21tZW5kIHRvIGNvbXBpbGUgZHJpdmVyIGFzIGEgbW9kdWxlLiBUaGlzIGdpdmVzIHlvdSBhbgorZWFzaWVyIGFjY2VzcyB0byBpdHMgY29uZmlndXJhdGlvbi4gVGhlIGNhbWVyYSBoYXMgbWFueSBtb3JlCitzZXR0aW5ncyB0aGFuIFY0TCBjYW4gb3BlcmF0ZSwgc28gc29tZSBzZXR0aW5ncyBhcmUgZG9uZSB1c2luZworbW9kdWxlIG9wdGlvbnMuCisKK1RvIGJlZ2luIHdpdGgsIG9uIG1vc3QgbW9kZXJuIExpbnV4IGRpc3RyaWJ1dGlvbnMgdGhlIGRyaXZlcgord2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCB3aGVuZXZlciB5b3UgcGx1ZyB0aGUgc3VwcG9ydGVkCitjYW1lcmEgaW4uIFRoZXJlZm9yZSwgeW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEhvd2V2ZXIKK2lmIHlvdSB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCBzb21lIG1vZHVsZSBwYXJhbWV0ZXJzIHRoZW4KK3lvdSBjYW4gbG9hZCBhbmQgdW5sb2FkIHRoZSBkcml2ZXIgbWFudWFsbHksIHdpdGggY2FtZXJhCitwbHVnZ2VkIGluIG9yIHVucGx1Z2dlZC4KKworVHlwaWNhbGx5IG1vZHVsZSBpcyBpbnN0YWxsZWQgd2l0aCBjb21tYW5kICdtb2Rwcm9iZScsIGxpa2UgdGhpczoKKworIyBtb2Rwcm9iZSBpYm1jYW0gZnJhbWVyYXRlPTEKKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHVzZSAnaW5zbW9kJyBpbiBzaW1pbGFyIGZhc2hpb246CisKKyMgaW5zbW9kIC9saWIvbW9kdWxlcy8yLngueS91c2IvaWJtY2FtLm8gZnJhbWVyYXRlPTEKKworTW9kdWxlIGNhbiBiZSBpbnNlcnRlZCB3aXRoIGNhbWVyYSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkLgorCitUaGUgZHJpdmVyIGNhbiBoYXZlIG9wdGlvbnMsIHRob3VnaCBzb21lIGRlZmF1bHRzIGFyZSBwcm92aWRlZC4KKworRHJpdmVyIG9wdGlvbnM6ICgqIGluZGljYXRlcyB0aGF0IG9wdGlvbiBpcyBtb2RlbC1kZXBlbmRlbnQpCisKK05hbWUgICAgICAgICAgICBUeXBlICAgICAgICAgICAgUmFuZ2UgW2RlZmF1bHRdIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWcgICAgICAgICAgIEludGVnZXIgICAgICAgICAwLTkgWzBdICAgICAgICAgZGVidWc9MQorZmxhZ3MgICAgICAgICAgIEludGVnZXIgICAgICAgICAwLTB4RkYgWzBdICAgICAgZmxhZ3M9MHgwZAorZnJhbWVyYXRlICAgICAgIEludGVnZXIgICAgICAgICAwLTYgWzJdICAgICAgICAgZnJhbWVyYXRlPTEKK2h1ZV9jb3JyZWN0aW9uICBJbnRlZ2VyICAgICAgICAgMC0yNTUgWzEyOF0gICAgIGh1ZV9jb3JyZWN0aW9uPTExNQoraW5pdF9icmlnaHRuZXNzIEludGVnZXIgICAgICAgICAwLTI1NSBbMTI4XSAgICAgaW5pdF9icmlnaHRuZXNzPTEwMAoraW5pdF9jb250cmFzdCAgIEludGVnZXIgICAgICAgICAwLTI1NSBbMTkyXSAgICAgaW5pdF9jb250cmFzdD0yMDAKK2luaXRfY29sb3IgICAgICBJbnRlZ2VyICAgICAgICAgMC0yNTUgWzEyOF0gICAgIGluaXRfY29sb3I9MTMwCitpbml0X2h1ZSAgICAgICAgSW50ZWdlciAgICAgICAgIDAtMjU1IFsxMjhdICAgICBpbml0X2h1ZT0xMTUKK2xpZ2h0aW5nICAgICAgICBJbnRlZ2VyICAgICAgICAgMC0yKiBbMV0gICAgICAgIGxpZ2h0aW5nPTIKK3NoYXJwbmVzcyAgICAgICBJbnRlZ2VyICAgICAgICAgMC02KiBbNF0gICAgICAgIHNoYXJwbmVzcz0zCitzaXplICAgICAgICAgICAgSW50ZWdlciAgICAgICAgIDAtMiogWzJdICAgICAgICBzaXplPTEKKworT3B0aW9ucyBmb3IgTW9kZWwgMiBvbmx5OgorCitOYW1lICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIFJhbmdlIFtkZWZhdWx0XSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0KK2luaXRfbW9kZWwyX3JnICBJbnRlZ2VyICAgICAgICAgMC4uMjU1IFsweDcwXSAgIGluaXRfbW9kZWwyX3JnPTEyOAoraW5pdF9tb2RlbDJfcmcyIEludGVnZXIgICAgICAgICAwLi4yNTUgWzB4MmZdICAgaW5pdF9tb2RlbDJfcmcyPTUwCitpbml0X21vZGVsMl9zYXQgSW50ZWdlciAgICAgICAgIDAuLjI1NSBbMHgzNF0gICBpbml0X21vZGVsMl9zYXQ9NjUKK2luaXRfbW9kZWwyX3liICBJbnRlZ2VyICAgICAgICAgMC4uMjU1IFsweGEwXSAgIGluaXRfbW9kZWwyX3liPTIwMAorCitkZWJ1ZyAgICAgICAgICAgWW91IGRvbid0IG5lZWQgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhIGRldmVsb3BlciB0aGVuIHlvdSB3aWxsIHNlZSBpbiB0aGUgY29kZQorICAgICAgICAgICAgICAgIHdoYXQgdmFsdWVzIGRvIHdoYXQuIDA9b2ZmLgorCitmbGFncyAgICAgICAgICAgVGhpcyBpcyBhIGJpdCBtYXNrLCBhbmQgeW91IGNhbiBjb21iaW5lIGFueSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgICBiaXRzIHRvIHByb2R1Y2Ugd2hhdCB5b3Ugd2FudC4gVXN1YWxseSB5b3UgZG9uJ3Qgd2FudAorICAgICAgICAgICAgICAgIGFueSBvZiBleHRyYSBmZWF0dXJlcyB0aGlzIG9wdGlvbiBwcm92aWRlczoKKworICAgICAgICAgICAgICAgIEZMQUdTX1JFVFJZX1ZJRElPQ1NZTkMgIDEgIFRoaXMgYml0IGFsbG93cyB0byByZXRyeSBmYWlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURJT0NTWU5DIGlvY3RscyB3aXRob3V0IGZhaWxpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lsbCB3b3JrIHdpdGggeGF3dHYsIHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB4cmVhbHByb2R1Y2VyLiBEZWZhdWx0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNldC4KKyAgICAgICAgICAgICAgICBGTEFHU19NT05PQ0hST01FICAgICAgICAyICBBY3RpdmF0ZXMgbW9ub2Nocm9tZSAoYi93KSBtb2RlLgorICAgICAgICAgICAgICAgIEZMQUdTX0RJU1BMQVlfSElOVFMgICAgIDQgIFNob3dzIGNvbG9yZWQgcGl4ZWxzIHdoaWNoIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYyBtZWFuaW5nIHRvIGRldmVsb3BlcnMuCisgICAgICAgICAgICAgICAgRkxBR1NfT1ZFUkxBWV9TVEFUUyAgICAgOCAgU2hvd3MgdGlueSBudW1iZXJzIG9uIHNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VmdWwgb25seSBmb3IgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgIEZMQUdTX0ZPUkNFX1RFU1RQQVRURVJOIDE2IFNob3dzIGJsdWUgc2NyZWVuIHdpdGggbnVtYmVycy4KKyAgICAgICAgICAgICAgICBGTEFHU19TRVBBUkFURV9GUkFNRVMgICAzMiBTaG93cyBlYWNoIGZyYW1lIHNlcGFyYXRlbHksIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2FzIHJlY2VpdmVkIGZyb20gdGhlIGNhbWVyYS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IChub3Qgc2V0KSBpcyB0byBtaXggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nIGZyYW1lIGluIHRvIGNvbXBlbnNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb2NjYXNpb25hbCBsb3NzIG9mIElzb2MgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIGhpZ2ggZnJhbWUgcmF0ZXMuCisgICAgICAgICAgICAgICAgRkxBR1NfQ0xFQU5fRlJBTUVTICAgICAgNjQgRm9yY2VzICJjbGVhbnVwIiBvZiBlYWNoIGZyYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3IgdG8gdXNlOyByZWxldmFudCBvbmx5IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR1NfU0VQQVJBVEVfRlJBTUVTIGlzIHNldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGlzIG5vdCB0byBjbGVhbiBmcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyBhIGxpdHRsZSBmYXN0ZXIgYnV0IG1heQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UgZmxpY2tlciBpZiBmcmFtZSByYXRlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vIGhpZ2ggYW5kIElzb2MgZGF0YSBnZXRzIGxvc3QuCisgICAgICAgICAgICAgICAgRkxBR1NfTk9fREVDT0RJTkcgICAgICAxMjggVGhpcyBmbGFnIHR1cm5zIHRoZSB2aWRlbyBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyIG9mZiwgYW5kIGR1bXBzIHRoZSByYXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc29jIGRhdGEgZnJvbSB0aGUgY2FtZXJhIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVhZGluZyBwcm9jZXNzLiBVc2VmdWwgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXJzLCBidXQgbm90IHRvIHVzZXJzLgorCitmcmFtZXJhdGUgICAgICAgVGhpcyBzZXR0aW5nIGNvbnRyb2xzIGZyYW1lIHJhdGUgb2YgdGhlIGNhbWVyYS4gVGhpcyBpcworICAgICAgICAgICAgICAgIGFuIGFwcHJveGltYXRlIHNldHRpbmcgKGluIHRlcm1zIG9mICJ3b3JzdCIgLi4uICJiZXN0IikKKyAgICAgICAgICAgICAgICBiZWNhdXNlIGNhbWVyYSBjaGFuZ2VzIGZyYW1lIHJhdGUgZGVwZW5kaW5nIG9uIGFtb3VudAorICAgICAgICAgICAgICAgIG9mIGxpZ2h0IGF2YWlsYWJsZS4gU2V0dGluZyAwIGlzIHNsb3dlc3QsIDYgaXMgZmFzdGVzdC4KKyAgICAgICAgICAgICAgICBCZXdhcmUgLSBmYXN0IHNldHRpbmdzIGFyZSB2ZXJ5IGRlbWFuZGluZyBhbmQgbWF5IG5vdAorICAgICAgICAgICAgICAgIHdvcmsgd2VsbCB3aXRoIGFsbCB2aWRlbyBzaXplcy4gQmUgY29uc2VydmF0aXZlLgorCitodWVfY29ycmVjdGlvbiAgVGhpcyBoaWdobHkgb3B0aW9uYWwgc2V0dGluZyBhbGxvd3MgdG8gYWRqdXN0IHRoZQorICAgICAgICAgICAgICAgIGh1ZSBvZiB0aGUgaW1hZ2UgaW4gYSB3YXkgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20KKyAgICAgICAgICAgICAgICB3aGF0IHVzdWFsICJodWUiIGNvbnRyb2wgZG9lcy4gQm90aCBjb250cm9scyBhZmZlY3QKKyAgICAgICAgICAgICAgICBZVVYgY29sb3JzcGFjZTogcmVndWxhciAiaHVlIiBjb250cm9sIGFkanVzdHMgb25seQorICAgICAgICAgICAgICAgIFUgY29tcG9uZW50LCBhbmQgdGhpcyAiaHVlX2NvcnJlY3Rpb24iIG9wdGlvbiBzaW1pbGFybHkKKyAgICAgICAgICAgICAgICBhZGp1c3RzIG9ubHkgViBjb21wb25lbnQuIEhvd2V2ZXIgdXN1YWxseSBpdCBpcyBlbm91Z2gKKyAgICAgICAgICAgICAgICB0byB0d2VhayBvbmx5IFUgb3IgViB0byBjb21wZW5zYXRlIGZvciBjb2xvcmVkIGxpZ2h0IG9yCisgICAgICAgICAgICAgICAgY29sb3IgdGVtcGVyYXR1cmU7IHRoaXMgb3B0aW9uIHNpbXBseSBhbGxvd3MgbW9yZQorICAgICAgICAgICAgICAgIGNvbXBsaWNhdGVkIGNvcnJlY3Rpb24gd2hlbiBhbmQgaWYgaXQgaXMgbmVjZXNzYXJ5LgorCitpbml0X2JyaWdodG5lc3MgVGhlc2Ugc2V0dGluZ3Mgc3BlY2lmeSBfaW5pdGlhbF8gdmFsdWVzIHdoaWNoIHdpbGwgYmUKK2luaXRfY29udHJhc3QgICB1c2VkIHRvIHNldCB1cCB0aGUgY2FtZXJhLiBJZiB5b3VyIFY0TCBhcHBsaWNhdGlvbiBoYXMKK2luaXRfY29sb3IgICAgICBpdHMgb3duIGNvbnRyb2xzIHRvIGFkanVzdCB0aGUgcGljdHVyZSB0aGVuIHRoZXNlCitpbml0X2h1ZSAgICAgICAgY29udHJvbHMgd2lsbCBiZSB1c2VkIHRvby4gVGhlc2Ugb3B0aW9ucyBhbGxvdyB5b3UgdG8KKyAgICAgICAgICAgICAgICBwcmVjb25maWd1cmUgdGhlIGNhbWVyYSB3aGVuIGl0IGdldHMgY29ubmVjdGVkLCBiZWZvcmUKKyAgICAgICAgICAgICAgICBhbnkgVjRMIGFwcGxpY2F0aW9uIGNvbm5lY3RzIHRvIGl0LiBHb29kIGZvciB3ZWJjYW1zLgorCitpbml0X21vZGVsMl9yZyAgVGhlc2UgaW5pdGlhbCBzZXR0aW5ncyBhbHRlciBjb2xvciBiYWxhbmNlIG9mIHRoZQoraW5pdF9tb2RlbDJfcmcyIGNhbWVyYSBvbiBoYXJkd2FyZSBsZXZlbC4gQWxsIGZvdXIgc2V0dGluZ3MgbWF5IGJlIHVzZWQKK2luaXRfbW9kZWwyX3NhdCB0byB0dW5lIHRoZSBjYW1lcmEgdG8gc3BlY2lmaWMgbGlnaHRpbmcgY29uZGl0aW9ucy4gVGhlc2UKK2luaXRfbW9kZWwyX3liICBzZXR0aW5ncyBvbmx5IGFwcGx5IHRvIE1vZGVsIDIgY2FtZXJhcy4KKworbGlnaHRpbmcgICAgICAgIFRoaXMgb3B0aW9uIHNlbGVjdHMgb25lIG9mIHRocmVlIGhhcmR3YXJlLWRlZmluZWQKKyAgICAgICAgICAgICAgICBwaG90b3NlbnNpdGl2aXR5IHNldHRpbmdzIG9mIHRoZSBjYW1lcmEuIDA9YnJpZ2h0IGxpZ2h0LAorICAgICAgICAgICAgICAgIDE9TWVkaXVtIChkZWZhdWx0KSwgMj1Mb3cgbGlnaHQuIFRoaXMgc2V0dGluZyBhZmZlY3RzCisgICAgICAgICAgICAgICAgZnJhbWUgcmF0ZTogdGhlIGRpbW1lciB0aGUgbGlnaHRpbmcgdGhlIGxvd2VyIHRoZSBmcmFtZQorICAgICAgICAgICAgICAgIHJhdGUgKGJlY2F1c2UgbG9uZ2VyIGV4cG9zaXRpb24gdGltZSBpcyBuZWVkZWQpLiBUaGUKKyAgICAgICAgICAgICAgICBNb2RlbCAyIGNhbWVyYXMgYWxsb3cgdmFsdWVzIG1vcmUgdGhhbiAyIGZvciB0aGlzIG9wdGlvbiwKKyAgICAgICAgICAgICAgICB0aHVzIGVuYWJsaW5nIGV4dHJlbWVseSBoaWdoIHNlbnNpdGl2aXR5IGF0IGNvc3Qgb2YgZnJhbWUKKyAgICAgICAgICAgICAgICByYXRlLCBjb2xvciBzYXR1cmF0aW9uIGFuZCBpbWFnaW5nIHNlbnNvciBub2lzZS4KKworc2hhcnBuZXNzICAgICAgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHNtb290aGluZyAobm9pc2UgcmVkdWN0aW9uKQorICAgICAgICAgICAgICAgIG1hZGUgYnkgY2FtZXJhLiBTZXR0aW5nIDAgaXMgbW9zdCBzbW9vdGgsIHNldHRpbmcgNgorICAgICAgICAgICAgICAgIGlzIG1vc3Qgc2hhcnAuIEJlIGF3YXJlIHRoYXQgQ01PUyBzZW5zb3IgdXNlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBjYW1lcmEgaXMgcHJldHR5IG5vaXN5LCBzbyBpZiB5b3UgY2hvb3NlIDYgeW91IHdpbGwKKyAgICAgICAgICAgICAgICBiZSBncmVldGVkIHdpdGggInNub3d5IiBpbWFnZS4gRGVmYXVsdCBpcyA0LiBNb2RlbCAyCisgICAgICAgICAgICAgICAgY2FtZXJhcyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisKK3NpemUgICAgICAgICAgICBUaGlzIHNldHRpbmcgY2hvb3NlcyBvbmUgb2Ygc2V2ZXJhbCBpbWFnZSBzaXplcyB0aGF0IGFyZQorICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gQ2FtZXJhcyBtYXkgc3VwcG9ydCBtb3JlLCBidXQKKyAgICAgICAgICAgICAgICBpdCdzIGRpZmZpY3VsdCB0byByZXZlcnNlLWVuZ2luZWVyIGFsbCBmb3JtYXRzLgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyB2aWRlbyBzaXplcyBhcmUgc3VwcG9ydGVkOgorCisgICAgICAgICAgICAgICAgc2l6ZT0wICAgICAxMjh4OTYgIChNb2RlbCAxIG9ubHkpCisgICAgICAgICAgICAgICAgc2l6ZT0xICAgICAxNjB4MTIwCisgICAgICAgICAgICAgICAgc2l6ZT0yICAgICAxNzZ4MTQ0CisgICAgICAgICAgICAgICAgc2l6ZT0zICAgICAzMjB4MjQwIChNb2RlbCAyIG9ubHkpCisgICAgICAgICAgICAgICAgc2l6ZT00ICAgICAzNTJ4MjQwIChNb2RlbCAyIG9ubHkpCisgICAgICAgICAgICAgICAgc2l6ZT01ICAgICAzNTJ4Mjg4CisgICAgICAgICAgICAgICAgc2l6ZT02ICAgICA2NDB4NDgwIChNb2RlbCAzIG9ubHkpCisKKyAgICAgICAgICAgICAgICBUaGUgMzUyeDI4OCBpcyB0aGUgbmF0aXZlIHNpemUgb2YgdGhlIE1vZGVsIDEgc2Vuc29yCisgICAgICAgICAgICAgICAgYXJyYXksIHNvIGl0J3MgdGhlIGJlc3QgcmVzb2x1dGlvbiB0aGUgY2FtZXJhIGNhbgorICAgICAgICAgICAgICAgIHlpZWxkLiBUaGUgYmVzdCByZXNvbHV0aW9uIG9mIE1vZGVsIDIgaXMgMTc2eDE0NCwgYW5kCisgICAgICAgICAgICAgICAgbGFyZ2VyIGltYWdlcyBhcmUgcHJvZHVjZWQgYnkgc3RyZXRjaGluZyB0aGUgYml0bWFwLgorICAgICAgICAgICAgICAgIE1vZGVsIDMgaGFzIHNlbnNvciB3aXRoIDY0MHg0ODAgZ3JpZCwgYW5kIGl0IHdvcmtzIHRvbywKKyAgICAgICAgICAgICAgICBidXQgdGhlIGZyYW1lIHJhdGUgd2lsbCBiZSBleGNlcHRpb25hbGx5IGxvdyAoMS0yIEZQUyk7CisgICAgICAgICAgICAgICAgaXQgbWF5IGJlIHN0aWxsIE9LIGZvciBzb21lIGFwcGxpY2F0aW9ucywgbGlrZSBzZWN1cml0eS4KKyAgICAgICAgICAgICAgICBDaG9vc2UgdGhlIGltYWdlIHNpemUgeW91IG5lZWQuIFRoZSBzbWFsbGVyIGltYWdlIGNhbgorICAgICAgICAgICAgICAgIHN1cHBvcnQgZmFzdGVyIGZyYW1lIHJhdGUuIERlZmF1bHQgaXMgMzUyeDI4OC4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHRoZSBUcm91Ymxlc2hvb3RpbmcgRkFRIHZpc2l0IHRoaXMgVVJMOgorCisgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5saW51eC11c2Iub3JnL2libWNhbS8KKworV0hBVCBORUVEUyBUTyBCRSBET05FOgorCistIFRoZSBidXR0b24gb24gdGhlIGNhbWVyYSBpcyBub3QgdXNlZC4gSSBkb24ndCBrbm93IGhvdyB0byBnZXQgdG8gaXQuCisgIEkga25vdyBub3cgaG93IHRvIHJlYWQgYnV0dG9uIG9uIE1vZGVsIDIsIGJ1dCB3aGF0IHRvIGRvIHdpdGggaXQ/CisKKy0gQ2FtZXJhIHJlcG9ydHMgaXRzIHN0YXR1cyBiYWNrIHRvIHRoZSBkcml2ZXI7IGhvd2V2ZXIgSSBkb24ndCBrbm93CisgIHdoYXQgcmV0dXJuZWQgZGF0YSBtZWFucy4gSWYgY2FtZXJhIGZhaWxzIGF0IHNvbWUgaW5pdGlhbGl6YXRpb24KKyAgc3RhZ2UgdGhlbiBzb21ldGhpbmcgc2hvdWxkIGJlIGRvbmUsIGFuZCBJIGRvbid0IGRvIHRoYXQgYmVjYXVzZQorICBJIGRvbid0IGV2ZW4ga25vdyB0aGF0IHNvbWUgY29tbWFuZCBmYWlsZWQuIFRoaXMgaXMgbW9zdGx5IE1vZGVsIDEKKyAgY29uY2VybiBiZWNhdXNlIE1vZGVsIDIgdXNlcyBkaWZmZXJlbnQgY29tbWFuZHMgd2hpY2ggZG8gbm90IHJldHVybgorICBzdGF0dXMgKGFuZCBzZWVtIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBldmVyeSB0aW1lKS4KKworLSBTb21lIGZsYXZvcnMgb2YgTW9kZWwgNCBOZXRDYW1lcmFzIHByb2R1Y2Ugb25seSBjb21wcmVzc2VkIHZpZGVvCisgIHN0cmVhbXMsIGFuZCBJIGRvbid0IGtub3cgaG93IHRvIGRlY29kZSB0aGVtLgorCitDUkVESVRTOgorCitUaGUgY29kZSBpcyBiYXNlZCBpbiBubyBzbWFsbCBwYXJ0IG9uIHRoZSBDUGlBIGRyaXZlciBieSBKb2hhbm5lcyBFcmRmZWx0LAorUmFuZHkgRHVubGFwLCBhbmQgb3RoZXJzLiBCaWcgdGhhbmtzIHRvIHRoZW0gZm9yIHRoZWlyIHBpb25lZXJpbmcgd29yayBvbiB0aGF0CithbmQgdGhlIFVTQiBzdGFjay4KKworSSBhbHNvIHRoYW5rIEpvaG4gTGlnaHRzZXkgZm9yIGhpcyBkb25hdGlvbiBvZiB0aGUgVmVvIFN0aW5ncmF5IGNhbWVyYS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZiBiL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjcyMTdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mCkBAIC0wLDAgKzEsMjAwIEBACis7IE1TLVdpbmRvd3MgZHJpdmVyIGNvbmZpZyBtYXRjaGluZyBzb21lIGJhc2ljIG1vZGVzIG9mIHRoZQorOyBMaW51eC1VU0IgRXRoZXJuZXQvUk5ESVMgZ2FkZ2V0IGZpcm13YXJlOgorOworOyAgLSBSTkRJUyBwbHVzIENEQyBFdGhlcm5ldCAuLi4gdGhpcyBtYXkgYmUgZmFtaWxpYXIgYXMgYSBET0NTSVMKKzsgICAgY2FibGUgbW9kZW0gcHJvZmlsZSwgYW5kIHN1cHBvcnRzIG1vc3Qgbm9uLU1pY3Jvc29mdCBVU0IgaG9zdHMKKzsKKzsgIC0gUk5ESVMgcGx1cyBDREMgU3Vic2V0IC4uLiB1c2VkIGJ5IGhhcmR3YXJlIHRoYXQgaW5jYXBhYmxlIG9mCis7ICAgIGZ1bGwgQ0RDIEV0aGVybmV0IHN1cHBvcnQuCis7Cis7IE1pY3Jvc29mdCBvbmx5IGRpcmVjdGx5IHN1cHBvcnRzIFJORElTIGRyaXZlcnMsIGFuZCBidW5kbGVkIHRoZW0gaW50byBYUC4KKzsgVGhlIE1pY3Jvc29mdCAiUmVtb3RlIE5ESVMgVVNCIERyaXZlciBLaXQiIGlzIGN1cnJlbnRseSBmb3VuZCBhdDoKKzsgICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2hkYy9od2Rldi9yZXNvdXJjZXMvSFdzZXJ2aWNlcy9ybmRpcy5tc3B4CisKKworW1ZlcnNpb25dCitTaWduYXR1cmUgICAgICAgICAgID0gIiRDSElDQUdPJCIKK0NsYXNzICAgICAgICAgICAgICAgPSBOZXQKK0NsYXNzR1VJRCAgICAgICAgICAgPSB7NGQzNmU5NzItZTMyNS0xMWNlLWJmYzEtMDgwMDJiZTEwMzE4fQorUHJvdmlkZXIgICAgICAgICAgICA9ICVMaW51eCUKK0NvbXBhdGlibGUgICAgICAgICAgPSAxCitNaWxsZW5uaXVtUHJlZmVycmVkID0gLk1FCitEcml2ZXJWZXIgICAgICAgICAgID0gMDMvMzAvMjAwNCwwLjAuMC4wCis7IGNhdGFsb2cgZmlsZSB3b3VsZCBiZSB1c2VkIGJ5IFdIUUwKKztDYXRhbG9nRmlsZSAgICAgICAgID0gTGludXguY2F0CisKK1tNYW51ZmFjdHVyZXJdCislTGludXglICAgICAgICAgID0gTGludXhEZXZpY2VzLE5ULjUuMQorCitbTGludXhEZXZpY2VzXQorOyBOZXRDaGlwIElEcywgdXNlZCBieSBib3RoIGZpcm13YXJlIG1vZGVzCislTGludXhEZXZpY2UlICAgID0gUk5ESVMsIFVTQlxWSURfMDUyNSZQSURfYTRhMgorCitbTGludXhEZXZpY2VzLk5ULjUuMV0KKyVMaW51eERldmljZSUgICAgPSBSTkRJUy5OVC41LjEsIFVTQlxWSURfMDUyNSZQSURfYTRhMgorCitbQ29udHJvbEZsYWdzXQorRXhjbHVkZUZyb21TZWxlY3Q9KgorCis7IFdpbmRvd3MgOTgsIFdpbmRvd3MgOTggU2Vjb25kIEVkaXRpb24gc3BlY2lmaWMgc2VjdGlvbnMgLS0tLS0tLS0KKworW1JORElTXQorRGV2aWNlSUQgICAgICAgID0gdXNiODAyMworTWF4SW5zdGFuY2UgICAgID0gNTEyCitEcml2ZXJWZXIgICAgICAgICAgID0gMDMvMzAvMjAwNCwwLjAuMC4wCitBZGRSZWcgICAgICAgICAgPSBSTkRJU19BZGRSZWdfOTgsIFJORElTX0FkZFJlZ19Db21tb24KKworW1JORElTX0FkZFJlZ185OF0KK0hLUiwgLCAgICAgICAgICAgICAgIERldkxvYWRlciwgICAgICAgIDAsICpuZGlzCitIS1IsICwgICAgICAgICAgICAgICBEZXZpY2VWeERzLCAgICAgICAwLCB1c2I4MDIzLnN5cworSEtSLCBORElTLCAgICAgICAgICAgTG9nRHJpdmVyTmFtZSwgICAgMCwgInVzYjgwMjMiCitIS1IsIE5ESVMsICAgICAgICAgICBNYWpvck5kaXNWZXJzaW9uLCAxLCA1CitIS1IsIE5ESVMsICAgICAgICAgICBNaW5vck5kaXNWZXJzaW9uLCAxLCAwCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBEZWZVcHBlciwgICAgICAgICAwLCAibmRpczMsbmRpczQsbmRpczUiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBEZWZMb3dlciwgICAgICAgICAwLCAiZXRoZXJuZXQiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBVcHBlclJhbmdlLCAgICAgICAwLCAibmRpczMsbmRpczQsbmRpczUiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBMb3dlclJhbmdlLCAgICAgICAwLCAiZXRoZXJuZXQiCitIS1IsIE5kaVxJbnN0YWxsLCAgICBuZGlzMywgICAgICAgICAgICAwLCAiUk5ESVNfSW5zdGFsbF85OCIKK0hLUiwgTmRpXEluc3RhbGwsICAgIG5kaXM0LCAgICAgICAgICAgIDAsICJSTkRJU19JbnN0YWxsXzk4IgorSEtSLCBOZGlcSW5zdGFsbCwgICAgbmRpczUsICAgICAgICAgICAgMCwgIlJORElTX0luc3RhbGxfOTgiCitIS1IsIE5kaSwgICAgICAgICAgICBEZXZpY2VJZCwgICAgICAgICAwLCAiVVNCXFZJRF8wNTI1JlBJRF9hNGEyIgorCitbUk5ESVNfSW5zdGFsbF85OF0KK0NvcHlGaWxlcz1STkRJU19Db3B5RmlsZXNfOTgKKworW1JORElTX0NvcHlGaWxlc185OF0KK3VzYjgwMjMuc3lzLCB1c2I4MDIzdy5zeXMsICwgMCAKK3JuZGlzbXAuc3lzLCBybmRpc21wdy5zeXMsICwgMCAKKworOyBXaW5kb3dzIE1pbGxlbm5pdW0gRWRpdGlvbiBzcGVjaWZpYyBzZWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbUk5ESVMuTUVdCitEZXZpY2VJRCAgICAgICAgPSB1c2I4MDIzCitNYXhJbnN0YW5jZSAgICAgPSA1MTIKK0RyaXZlclZlciAgICAgICAgICAgPSAwMy8zMC8yMDA0LDAuMC4wLjAKK0FkZFJlZyAgICAgICAgICA9IFJORElTX0FkZFJlZ19NRSwgUk5ESVNfQWRkUmVnX0NvbW1vbgorQ2hhcmFjdGVyaXN0aWNzID0gMHg4NCAgIDsgTkNGX1BIWVNJQ0FMICsgTkNGX0hBU19VSQorQnVzVHlwZSAgICAgICAgID0gMTUKKworW1JORElTX0FkZFJlZ19NRV0KK0hLUiwgLCAgICAgICAgICAgICAgIERldkxvYWRlciwgICAgICAgIDAsICpuZGlzCitIS1IsICwgICAgICAgICAgICAgICBEZXZpY2VWeERzLCAgICAgICAwLCB1c2I4MDIzLnN5cworSEtSLCBORElTLCAgICAgICAgICAgTG9nRHJpdmVyTmFtZSwgICAgMCwgInVzYjgwMjMiCitIS1IsIE5ESVMsICAgICAgICAgICBNYWpvck5kaXNWZXJzaW9uLCAxLCA1CitIS1IsIE5ESVMsICAgICAgICAgICBNaW5vck5kaXNWZXJzaW9uLCAxLCAwCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBEZWZVcHBlciwgICAgICAgICAwLCAibmRpczMsbmRpczQsbmRpczUiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBEZWZMb3dlciwgICAgICAgICAwLCAiZXRoZXJuZXQiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBVcHBlclJhbmdlLCAgICAgICAwLCAibmRpczMsbmRpczQsbmRpczUiCitIS1IsIE5kaVxJbnRlcmZhY2VzLCBMb3dlclJhbmdlLCAgICAgICAwLCAiZXRoZXJuZXQiCitIS1IsIE5kaVxJbnN0YWxsLCAgICBuZGlzMywgICAgICAgICAgICAwLCAiUk5ESVNfSW5zdGFsbF9NRSIKK0hLUiwgTmRpXEluc3RhbGwsICAgIG5kaXM0LCAgICAgICAgICAgIDAsICJSTkRJU19JbnN0YWxsX01FIgorSEtSLCBOZGlcSW5zdGFsbCwgICAgbmRpczUsICAgICAgICAgICAgMCwgIlJORElTX0luc3RhbGxfTUUiCitIS1IsIE5kaSwgICAgICAgICAgICBEZXZpY2VJZCwgICAgICAgICAwLCAiVVNCXFZJRF8wNTI1JlBJRF9hNGEyIgorCitbUk5ESVNfSW5zdGFsbF9NRV0KK0NvcHlGaWxlcz1STkRJU19Db3B5RmlsZXNfTUUKKworW1JORElTX0NvcHlGaWxlc19NRV0KK3VzYjgwMjMuc3lzLCB1c2I4MDIzbS5zeXMsICwgMCAKK3JuZGlzbXAuc3lzLCBybmRpc21wbS5zeXMsICwgMCAKKworOyBXaW5kb3dzIDIwMDAgc3BlY2lmaWMgc2VjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tSTkRJUy5OVF0KK0NoYXJhY3RlcmlzdGljcyA9IDB4ODQgICA7IE5DRl9QSFlTSUNBTCArIE5DRl9IQVNfVUkKK0J1c1R5cGUgICAgICAgICA9IDE1CitEcml2ZXJWZXIgICAgICAgICAgID0gMDMvMzAvMjAwNCwwLjAuMC4wCitBZGRSZWcgICAgICAgICAgPSBSTkRJU19BZGRSZWdfTlQsIFJORElTX0FkZFJlZ19Db21tb24KK0NvcHlGaWxlcyAgICAgICA9IFJORElTX0NvcHlGaWxlc19OVAorCitbUk5ESVMuTlQuU2VydmljZXNdCitBZGRTZXJ2aWNlID0gVVNCX1JORElTLCAyLCBSTkRJU19TZXJ2aWNlSW5zdF9OVCwgUk5ESVNfRXZlbnRMb2cKKworW1JORElTX0NvcHlGaWxlc19OVF0KKzsgbm8gcmVuYW1lIG9mIGZpbGVzIG9uIFdpbmRvd3MgMjAwMCwgdXNlIHRoZSAnaycgbmFtZXMgYXMgaXMKK3VzYjgwMjNrLnN5cywgLCAsIDAgCitybmRpc21way5zeXMsICwgLCAwIAorCitbUk5ESVNfU2VydmljZUluc3RfTlRdCitEaXNwbGF5TmFtZSAgICAgPSAlU2VydmljZURpc3BsYXlOYW1lJQorU2VydmljZVR5cGUgICAgID0gMSAKK1N0YXJ0VHlwZSAgICAgICA9IDMgCitFcnJvckNvbnRyb2wgICAgPSAxIAorU2VydmljZUJpbmFyeSAgID0gJTEyJVx1c2I4MDIzay5zeXMgICAgCitMb2FkT3JkZXJHcm91cCAgPSBORElTCitBZGRSZWcgICAgICAgICAgPSBSTkRJU19XTUlfQWRkUmVnX05UCisKK1tSTkRJU19XTUlfQWRkUmVnX05UXQorSEtSLCAsIE1vZkltYWdlUGF0aCwgMHgwMDAyMDAwMCwgIlN5c3RlbTMyXGRyaXZlcnNccm5kaXNtcGsuc3lzIgorCis7IFdpbmRvd3MgWFAgc3BlY2lmaWMgc2VjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1JORElTLk5ULjUuMV0KK0NoYXJhY3RlcmlzdGljcyA9IDB4ODQgICA7IE5DRl9QSFlTSUNBTCArIE5DRl9IQVNfVUkKK0J1c1R5cGUgICAgICAgICA9IDE1CitEcml2ZXJWZXIgICAgICAgICAgID0gMDMvMzAvMjAwNCwwLjAuMC4wCitBZGRSZWcgICAgICAgICAgPSBSTkRJU19BZGRSZWdfTlQsIFJORElTX0FkZFJlZ19Db21tb24KKzsgbm8gY29weWZpbGVzIC0gdGhlIGZpbGVzIGFyZSBhbHJlYWR5IGluIHBsYWNlCisKK1tSTkRJUy5OVC41LjEuU2VydmljZXNdCitBZGRTZXJ2aWNlICAgICAgPSBVU0JfUk5ESVMsIDIsIFJORElTX1NlcnZpY2VJbnN0XzUxLCBSTkRJU19FdmVudExvZworCitbUk5ESVNfU2VydmljZUluc3RfNTFdCitEaXNwbGF5TmFtZSAgICAgPSAlU2VydmljZURpc3BsYXlOYW1lJQorU2VydmljZVR5cGUgICAgID0gMSAKK1N0YXJ0VHlwZSAgICAgICA9IDMgCitFcnJvckNvbnRyb2wgICAgPSAxIAorU2VydmljZUJpbmFyeSAgID0gJTEyJVx1c2I4MDIzLnN5cyAgICAKK0xvYWRPcmRlckdyb3VwICA9IE5ESVMKK0FkZFJlZyAgICAgICAgICA9IFJORElTX1dNSV9BZGRSZWdfNTEKKworW1JORElTX1dNSV9BZGRSZWdfNTFdCitIS1IsICwgTW9mSW1hZ2VQYXRoLCAweDAwMDIwMDAwLCAiU3lzdGVtMzJcZHJpdmVyc1xybmRpc21wLnN5cyIKKworOyBXaW5kb3dzIDIwMDAgYW5kIFdpbmRvd3MgWFAgY29tbW9uIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tSTkRJU19BZGRSZWdfTlRdCitIS1IsIE5kaSwgICAgICAgICAgICAgICBTZXJ2aWNlLCAgICAgICAgMCwgIlVTQl9STkRJUyIKK0hLUiwgTmRpXEludGVyZmFjZXMsICAgIFVwcGVyUmFuZ2UsICAgICAwLCAibmRpczUiIAorSEtSLCBOZGlcSW50ZXJmYWNlcywgICAgTG93ZXJSYW5nZSwgICAgIDAsICJldGhlcm5ldCIKKworW1JORElTX0V2ZW50TG9nXQorQWRkUmVnID0gUk5ESVNfRXZlbnRMb2dfQWRkUmVnCisKK1tSTkRJU19FdmVudExvZ19BZGRSZWddCitIS1IsICwgRXZlbnRNZXNzYWdlRmlsZSwgMHgwMDAyMDAwMCwgIiUlU3lzdGVtUm9vdCUlXFN5c3RlbTMyXG5ldGV2ZW50LmRsbCIKK0hLUiwgLCBUeXBlc1N1cHBvcnRlZCwgICAweDAwMDEwMDAxLCA3CisKKzsgQ29tbW9uIFNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1JORElTX0FkZFJlZ19Db21tb25dCitIS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIFBhcmFtRGVzYywgIDAsICVOZXR3b3JrQWRkcmVzcyUKK0hLUiwgTkRJXHBhcmFtc1xOZXR3b3JrQWRkcmVzcywgdHlwZSwgICAgICAgMCwgImVkaXQiCitIS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIExpbWl0VGV4dCwgIDAsICIxMiIKK0hLUiwgTkRJXHBhcmFtc1xOZXR3b3JrQWRkcmVzcywgVXBwZXJDYXNlLCAgMCwgIjEiCitIS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIGRlZmF1bHQsICAgIDAsICIgIgorSEtSLCBORElccGFyYW1zXE5ldHdvcmtBZGRyZXNzLCBvcHRpb25hbCwgICAwLCAiMSIKKworW1NvdXJjZURpc2tzTmFtZXNdCisxPSVTb3VyY2VEaXNrJSwsMQorCitbU291cmNlRGlza3NGaWxlc10KK3VzYjgwMjNtLnN5cz0xCitybmRpc21wbS5zeXM9MQordXNiODAyM3cuc3lzPTEKK3JuZGlzbXB3LnN5cz0xCit1c2I4MDIzay5zeXM9MQorcm5kaXNtcGsuc3lzPTEKKworW0Rlc3RpbmF0aW9uRGlyc10KK1JORElTX0NvcHlGaWxlc185OCAgICA9IDEwLCBzeXN0ZW0zMi9kcml2ZXJzCitSTkRJU19Db3B5RmlsZXNfTUUgICAgPSAxMCwgc3lzdGVtMzIvZHJpdmVycworUk5ESVNfQ29weUZpbGVzX05UICAgID0gMTIKKworW1N0cmluZ3NdCitTZXJ2aWNlRGlzcGxheU5hbWUgICAgPSAiVVNCIFJlbW90ZSBORElTIE5ldHdvcmsgRGV2aWNlIERyaXZlciIKK05ldHdvcmtBZGRyZXNzICAgICAgICA9ICJOZXR3b3JrIEFkZHJlc3MiCitMaW51eCAgICAgICAgICAgICAgICAgPSAiTGludXggRGV2ZWxvcGVyIENvbW11bml0eSIKK0xpbnV4RGV2aWNlICAgICAgICAgICA9ICJMaW51eCBVU0IgRXRoZXJuZXQvUk5ESVMgR2FkZ2V0IgorU291cmNlRGlzayAgICAgICAgICAgID0gIkV0aGVybmV0L1JORElTIEdhZGdldCBEcml2ZXIgSW5zdGFsbCBEaXNrIgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9tdG91Y2h1c2IudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvbXRvdWNodXNiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDgwNmJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbXRvdWNodXNiLnR4dApAQCAtMCwwICsxLDc2IEBACitDSEFOR0VTCisKKy0gMC4zIC0gQ3JlYXRlZCBiYXNlZCBvZmYgb2Ygc2Nhbm5lciAmIElOU1RBTEwgZnJvbSB0aGUgb3JpZ2luYWwgdG91Y2hzY3JlZW4KKyAgZHJpdmVyIG9uIGZyZXNobWVhdCAoaHR0cDovL2ZyZXNobWVhdC5uZXQvcHJvamVjdHMvM210b3VjaHNjcmVlbmRyaXZlcikKKy0gQW1lbmRlZCBmb3IgbGludXgtMi40LjE4LCB0aGVuIDIuNC4xOQorCistIDAuNSAtIENvbXBsZXRlIHJld3JpdGUgdXNpbmcgTGludXggSW5wdXQgaW4gMi42LjMKKyAgIFVuZm9ydHVuYXRlbHkgbm8gY2FsaWJyYXRpb24gc3VwcG9ydCBhdCB0aGlzIHRpbWUKKworLSAxLjQgLSBNdWx0aXBsZSBjaGFuZ2VzIHRvIHN1cHBvcnQgdGhlIEVYSUkgNTAwMFVDIGFuZCBob3VzZSBjbGVhbmluZworICAgQ2hhbmdlZCByZXNldCBmcm9tIHN0YW5kYXJkIFVTQiBkZXYgcmVzZXQgdG8gdmVuZG9yIHJlc2V0CisgICBDaGFuZ2VkIGRhdGEgc2VudCB0byBob3N0IGZyb20gY29tcGVuc2F0ZWQgdG8gcmF3IGNvb3JkaW5hdGVzCisgICBFbGltaW5hdGVkIHZlbmRvci9wcm9kdWN0IG1vZHVsZSBwYXJhbXMKKyAgIFBlcmZvcm1lZCBtdWx0aXBsZSBzdWNjZXNzZnVsbCB0ZXN0cyB3aXRoIGFuIEVYSUktNTAxMFVDCisKK1NVUFBPUlRFRCBIQVJEV0FSRToKKworICAgICAgICBBbGwgY29udHJvbGxlcnMgaGF2ZSB0aGUgVmVuZG9yOiAweDA1OTYgJiBQcm9kdWN0OiAweDAwMDEKKworCisgICAgICAgIENvbnRyb2xsZXIgRGVzY3JpcHRpb24gICAgICAgICAgUGFydCBOdW1iZXIKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVVNCIENhcGFjaXRpdmUgLSBQZWFybCBDYXNlICAgICAxNC0yMDUgIChEaXNjb250aW51ZWQpCisgICAgICAgIFVTQiBDYXBhY2l0aXZlIC0gQmxhY2sgQ2FzZSAgICAgMTQtMTI0ICAoRGlzY29udGludWVkKQorICAgICAgICBVU0IgQ2FwYWNpdGl2ZSAtIE5vIENhc2UgICAgICAgIDE0LTIwNiAgKERpc2NvbnRpbnVlZCkKKworICAgICAgICBVU0IgQ2FwYWNpdGl2ZSAtIFBlYXJsIENhc2UgICAgIEVYSUktNTAxMFVDCisgICAgICAgIFVTQiBDYXBhY2l0aXZlIC0gQmxhY2sgQ2FzZSAgICAgRVhJSS01MDMwVUMKKyAgICAgICAgVVNCIENhcGFjaXRpdmUgLSBObyBDYXNlICAgICAgICBFWElJLTUwNTBVQworCitEUklWRVIgTk9URVM6CisKK0luc3RhbGxhdGlvbiBpcyBzaW1wbGUsIHlvdSBvbmx5IG5lZWQgdG8gYWRkIExpbnV4IElucHV0LCBMaW51eCBVU0IsIGFuZCB0aGUgCitkcml2ZXIgdG8gdGhlIGtlcm5lbC4gIFRoZSBkcml2ZXIgY2FuIGFsc28gYmUgb3B0aW9uYWxseSBidWlsdCBhcyBhIG1vZHVsZS4KKworVGhpcyBkcml2ZXIgYXBwZWFycyB0byBiZSBvbmUgb2YgcG9zc2libGUgMiBMaW51eCBVU0IgSW5wdXQgVG91Y2hzY3JlZW4KK2RyaXZlcnMuICBBbHRob3VnaCAzTSBwcm9kdWNlcyBhIGJpbmFyeSBvbmx5IGRyaXZlciBhdmFpbGFibGUgZm9yCitkb3dubG9hZCwgSSBwZXJzaXN0IGluIHVwZGF0aW5nIHRoaXMgZHJpdmVyIHNpbmNlIEkgd291bGQgbGlrZSB0byB1c2UgdGhlCit0b3VjaHNjcmVlbiBmb3IgZW1iZWRkZWQgYXBwcyB1c2luZyBRVEVtYmVkZGVkLCBEaXJlY3RGQiwgZXRjLiBTbyBJIGZlZWwgdGhlCitsb2dpY2FsIGNob2ljZSBpcyB0byB1c2UgTGludXggSW1wdXQuCisKK0N1cnJlbnRseSB0aGVyZSBpcyBubyB3YXkgdG8gY2FsaWJyYXRlIHRoZSBkZXZpY2UgdmlhIHRoaXMgZHJpdmVyLiAgRXZlbiBpZgordGhlIGRldmljZSBjb3VsZCBiZSBjYWxpYnJhdGVkLCB0aGUgZHJpdmVyIHB1bGxzIHRvIHJhdyBjb29yZGluYXRlIGRhdGEgZnJvbQordGhlIGNvbnRyb2xsZXIuICBUaGlzIG1lYW5zIGNhbGlicmF0aW9uIG11c3QgYmUgcGVyZm9ybWVkIHdpdGhpbiB0aGUKK3VzZXJzcGFjZS4KKworVGhlIGNvbnRyb2xsZXIgc2NyZWVuIHJlc29sdXRpb24gaXMgbm93IDAgdG8gMTYzODQgZm9yIGJvdGggWCBhbmQgWSByZXBvcnRpbmcKK3RoZSByYXcgdG91Y2ggZGF0YS4gIFRoaXMgaXMgdGhlIHNhbWUgZm9yIHRoZSBvbGQgYW5kIG5ldyBjYXBhY2l0aXZlIFVTQgorY29udHJvbGxlcnMuCisKK1BlcmhhcHMgYXQgc29tZSBwb2ludCBhbiBhYnN0cmFjdCBmdW5jdGlvbiB3aWxsIGJlIHBsYWNlZCBpbnRvIGV2ZGV2IHNvIAorZ2VuZXJpYyBmdW5jdGlvbnMgbGlrZSBjYWxpYnJhdGlvbnMsIHJlc2V0cywgYW5kIHZlbmRvciBpbmZvcm1hdGlvbiBjYW4gYmUgCityZXF1ZXN0ZWQgZnJvbSB0aGUgdXNlcnNwYWNlIChBbmQgdGhlIGRyaXZlcnMgd291bGQgaGFuZGxlIHRoZSB2ZW5kb3Igc3BlY2lmaWMKK3Rhc2tzKS4KKworQURESVRJT05BTCBJTkZPUk1BVElPTi9VUERBVEVTL1ggQ09ORklHVVJBVElPTiBFWEFNUExFOgorCitodHRwOi8vZ3Jvb21sYWtlbGFicy5jb20vZ3JhbmRhbXAvY29kZS9taWNyb3RvdWNoLworCitUT0RPOgorCitJbXBsZW1lbnQgYSBjb250cm9sIHVyYiBhZ2FpbiB0byBoYW5kbGUgcmVxdWVzdHMgdG8gYW5kIGZyb20gdGhlIGRldmljZQorc3VjaCBhcyBjYWxpYnJhdGlvbiwgZXRjIG9uY2UvaWYgaXQgYmVjb21lcyBhdmFpbGFibGUuCisKK0RJU0NMQU1FUjoKKworSSBhbSBub3QgYSBNaWNyb1RvdWNoLzNNIGVtcGxveWVlLCBub3IgaGF2ZSBJIGV2ZXIgYmVlbi4gIDNNIGRvZXMgbm90IHN1cHBvcnQgCit0aGlzIGRyaXZlciEgIElmIHlvdSB3YW50IHRvdWNoIGRyaXZlcnMgb25seSBzdXBwb3J0ZWQgd2l0aGluIFgsIHBsZWFzZSBnbyB0bzoKKworaHR0cDovL3d3dy4zbS5jb20vM01Ub3VjaFN5c3RlbXMvZG93bmxvYWRzLworCitUSEFOS1M6CisKK0EgaHVnZSB0aGFuayB5b3UgdG8gM00gVG91Y2ggU3lzdGVtcyBmb3IgdGhlIEVYSUktNTAxMFVDIGNvbnRyb2xsZXJzIGZvcgordGVzdGluZyEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL29oY2kudHh0IGIvRG9jdW1lbnRhdGlvbi91c2Ivb2hjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzMjBkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL29oY2kudHh0CkBAIC0wLDAgKzEsMzIgQEAKKzIzLUF1Zy0yMDAyCisKK1RoZSAib2hjaS1oY2QiIGRyaXZlciBpcyBhIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIChIQ0QpIHRoYXQgaXMgZGVyaXZlZAorZnJvbSB0aGUgInVzYi1vaGNpIiBkcml2ZXIgZnJvbSB0aGUgMi40IGtlcm5lbCBzZXJpZXMuICBUaGUgInVzYi1vaGNpIiBjb2RlCit3YXMgd3JpdHRlbiBwcmltYXJpbHkgYnkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PiBidXQgd2l0aAorY29udHJpYnV0aW9ucyBmcm9tIG1hbnkgb3RoZXJzIChyZWFkIGl0cyBjb3B5cmlnaHQvbGljZW5jaW5nIGhlYWRlcikuCisKK0l0IHN1cHBvcnRzIHRoZSAiT3BlbiBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIiAoT0hDSSksIHdoaWNoIHN0YW5kYXJkaXplcworaGFyZHdhcmUgcmVnaXN0ZXIgcHJvdG9jb2xzIHVzZWQgdG8gdGFsayB0byBVU0IgMS4xIGhvc3QgY29udHJvbGxlcnMuICBBcworY29tcGFyZWQgdG8gdGhlIGVhcmxpZXIgIlVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIiAoVUhDSSkgZnJvbQorSW50ZWwsIGl0IHB1c2hlcyBtb3JlIGludGVsbGlnZW5jZSBpbnRvIHRoZSBoYXJkd2FyZS4gIFVTQiAxLjEgY29udHJvbGxlcnMKK2Zyb20gdmVuZG9ycyBvdGhlciB0aGFuIEludGVsIGFuZCBWSUEgZ2VuZXJhbGx5IHVzZSBPSENJLgorCitDaGFuZ2VzIHNpbmNlIHRoZSAyLjQga2VybmVsIGluY2x1ZGUKKworCS0gaW1wcm92ZWQgcm9idXN0bmVzczsgYnVnZml4ZXM7IGFuZCBsZXNzIG92ZXJoZWFkCisJLSBzdXBwb3J0cyB0aGUgdXBkYXRlZCBhbmQgc2ltcGxpZmllZCB1c2Jjb3JlIEFQSXMKKwktIGludGVycnVwdCB0cmFuc2ZlcnMgY2FuIGJlIGxhcmdlciwgYW5kIGNhbiBiZSBxdWV1ZWQKKwktIGxlc3MgY29kZSwgYnkgdXNpbmcgdGhlIHVwcGVyIGxldmVsICJoY2QiIGZyYW1ld29yaworCS0gc3VwcG9ydHMgc29tZSBub24tUENJIGltcGxlbWVudGF0aW9ucyBvZiBPSENJCisJLSAuLi4gbW9yZQorCitUaGUgIm9oY2ktaGNkIiBkcml2ZXIgaGFuZGxlcyBhbGwgVVNCIDEuMSB0cmFuc2ZlciB0eXBlcy4gIFRyYW5zZmVycyBvZiBhbGwKK3R5cGVzIGNhbiBiZSBxdWV1ZWQuICBUaGF0IHdhcyBhbHNvIHRydWUgaW4gInVzYi1vaGNpIiwgZXhjZXB0IGZvciBpbnRlcnJ1cHQKK3RyYW5zZmVycy4gIFByZXZpb3VzbHksIHVzaW5nIHBlcmlvZHMgb2Ygb25lIGZyYW1lIHdvdWxkIHJpc2sgZGF0YSBsb3NzIGR1ZQordG8gb3ZlcmhlYWQgaW4gSVJRIHByb2Nlc3NpbmcuICBXaGVuIGludGVycnVwdCB0cmFuc2ZlcnMgYXJlIHF1ZXVlZCwgdGhvc2UKK3Jpc2tzIGNhbiBiZSBtaW5pbWl6ZWQgYnkgbWFraW5nIHN1cmUgdGhlIGhhcmR3YXJlIGFsd2F5cyBoYXMgdHJhbnNmZXJzIHRvCit3b3JrIG9uIHdoaWxlIHRoZSBPUyBpcyBnZXR0aW5nIGFyb3VuZCB0byB0aGUgcmVsZXZhbnQgSVJRIHByb2Nlc3NpbmcuCisKKy0gRGF2aWQgQnJvd25lbGwKKyAgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL292NTExLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL292NTExLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk3NGVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2Ivb3Y1MTEudHh0CkBAIC0wLDAgKzEsMjg5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWFkbWUgZm9yIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIHRoZSBPbW5pVmlzaW9uIE9WNTExIFVTQiB0byBjYW1lcmEgYnJpZGdlIElDCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F1dGhvcjogTWFyayBNY0NsZWxsYW5kCitIb21lcGFnZTogaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEKKworSU5UUk9EVUNUSU9OOgorCitUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgT1Y1MTEsIGEgVVNCLW9ubHkgY2hpcCB1c2VkIGluIG1hbnkgIndlYmNhbSIgZGV2aWNlcy4KK0FueSBjYW1lcmEgdXNpbmcgdGhlIE9WNTExL09WNTExKyBhbmQgdGhlIE9WNjYyMC9PVjc2MTAvMjAvMjBBRSBzaG91bGQgd29yay4KK1ZpZGVvIGNhcHR1cmUgZGV2aWNlcyB0aGF0IHVzZSB0aGUgUGhpbGlwcyBTQUE3MTExQSBkZWNvZGVyIGFsc28gd29yay4gSXQgCitzdXBwb3J0cyBzdHJlYW1pbmcgYW5kIGNhcHR1cmUgb2YgY29sb3Igb3IgbW9ub2Nocm9tZSB2aWRlbyB2aWEgdGhlIFZpZGVvNExpbnV4CitBUEkuIE1vc3QgVjRMIGFwcHMgYXJlIGNvbXBhdGlibGUgd2l0aCBpdC4gTW9zdCByZXNvbHV0aW9ucyB3aXRoIGEgd2lkdGggYW5kCitoZWlnaHQgdGhhdCBhcmUgYSBtdWx0aXBsZSBvZiA4IGFyZSBzdXBwb3J0ZWQuCisKK0lmIHlvdSBuZWVkIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdCB0aGUgT1Y1MTEgaG9tZXBhZ2UgYXQgdGhlIGFib3ZlIFVSTC4KKworV0hBVCBZT1UgTkVFRDoKKworLSBJZiB5b3Ugd2FudCB0byBoZWxwIHdpdGggdGhlIGRldmVsb3BtZW50LCBnZXQgdGhlIGNoaXAncyBzcGVjaWZpY2F0aW9uIGRvY3MgYXQKKyAgaHR0cDovL3d3dy5vdnQuY29tL29tbml1c2JwLmh0bWwKKworLSBBIFZpZGVvNExpbnV4IGNvbXBhdGlibGUgZnJhbWUgZ3JhYmJlciBwcm9ncmFtIChJIHJlY29tbWVuZCB2aWRjYXQgYW5kIHhhd3R2KQorICAgIHZpZGNhdCBpcyBwYXJ0IG9mIHRoZSB3M2NhbSBwYWNrYWdlOiAgaHR0cDovL3d3dy5oZGstYmVybGluLmRlL35yYXNjYS93M2NhbS8KKyAgICB4YXd0diBpcyBhdmFpbGFibGUgYXQ6ICBodHRwOi8vd3d3LmluLWJlcmxpbi5kZS9Vc2VyL2tyYXhlbC94YXd0di5odG1sCisKK0hPVyBUTyBVU0UgSVQ6CisKK05vdGU6IFRoZXNlIGFyZSBzaW1wbGlmaWVkIGluc3RydWN0aW9ucy4gRm9yIGNvbXBsZXRlIGluc3RydWN0aW9ucyBzZWU6CisJaHR0cDovL2FscGhhLmR5bmRucy5vcmcvb3Y1MTEvaW5zdGFsbC5odG1sCisKK1lvdSBtdXN0IGhhdmUgZmlyc3QgY29tcGlsZWQgVVNCIHN1cHBvcnQsIHN1cHBvcnQgZm9yIHlvdXIgc3BlY2lmaWMgVVNCIGhvc3QKK2NvbnRyb2xsZXIgKFVIQ0kgb3IgT0hDSSksIGFuZCBWaWRlbzRMaW51eCBzdXBwb3J0IGZvciB5b3VyIGtlcm5lbCAoSSByZWNvbW1lbmQKK21ha2luZyB0aGVtIG1vZHVsZXMuKSBNYWtlIHN1cmUgIkVuZm9yY2UgYmFuZHdpZHRoIGFsbG9jYXRpb24iIGlzIE5PVCBlbmFibGVkLgorCitOZXh0LCAoYXMgcm9vdCk6CisKKwltb2Rwcm9iZSB1c2Jjb3JlCisJbW9kcHJvYmUgdXNiLXVoY2kgIDxPUj4gIG1vZHByb2JlIHVzYi1vaGNpCisJbW9kcHJvYmUgdmlkZW9kZXYKKwltb2Rwcm9iZSBvdjUxMQorCitJZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZSAoaXQgdXN1YWxseSBpcyksIGNyZWF0ZSB0aGUgdmlkZW8gZGV2aWNlOgorCisJbWtub2QgL2Rldi92aWRlbzAgYyA4MSAwCisKK09wdGlvbmFsbHksIHN5bWxpbmsgL2Rldi92aWRlbyB0byAvZGV2L3ZpZGVvMAorCitZb3Ugd2lsbCBoYXZlIHRvIHNldCBwZXJtaXNzaW9ucyBvbiB0aGlzIGRldmljZSB0byBhbGxvdyB5b3UgdG8gcmVhZC93cml0ZQorZnJvbSBpdDoKKworCWNobW9kIDY2NiAvZGV2L3ZpZGVvCisJY2htb2QgNjY2IC9kZXYvdmlkZW8wIChpZiBuZWNlc3NhcnkpCisJCitOb3cgeW91IGFyZSByZWFkeSB0byBydW4gYSB2aWRlbyBhcHAhIEJvdGggdmlkY2F0IGFuZCB4YXd0diB3b3JrIHdlbGwgZm9yIG1lCithdCA2NDB4NDgwLgorCQorW1VzaW5nIHZpZGNhdDpdCisKKwl2aWRjYXQgLXMgNjQweDQ4MCAtcCBjID4gdGVzdC5qcGcKKwl4dmlldyB0ZXN0LmpwZworCQorW1VzaW5nIHhhd3R2Ol0KKworRnJvbSB0aGUgbWFpbiB4YXd0diBkaXJlY3Rvcnk6CisKKwltYWtlIGNsZWFuCisJLi9jb25maWd1cmUKKwltYWtlCisJbWFrZSBpbnN0YWxsCisKK05vdyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gcnVuIHhhd3R2LiBSaWdodCBjbGljayBmb3IgdGhlIG9wdGlvbnMgZGlhbG9nLiAKKworTU9EVUxFIFBBUkFNRVRFUlM6CisKKyAgWW91IGNhbiBzZXQgdGhlc2Ugd2l0aDogIGluc21vZCBvdjUxMSBOQU1FPVZBTFVFCisgIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gc2V0IHRoZXNlIG9uIGEgcGVyLWNhbWVyYSBiYXNpcy4KKworICBOQU1FOiBhdXRvYnJpZ2h0CisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDEKKyAgREVTQzogQnJpZ2h0bmVzcyBpcyBub3JtYWxseSB1bmRlciBhdXRvbWF0aWMgY29udHJvbCBhbmQgY2FuJ3QgYmUgc2V0CisgICAgICAgIG1hbnVhbGx5IGJ5IHRoZSB2aWRlbyBhcHAuIFNldCB0byAwIGZvciBtYW51YWwgY29udHJvbC4KKworICBOQU1FOiBhdXRvZ2FpbgorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAxCisgIERFU0M6IEF1dG8gR2FpbiBDb250cm9sIGVuYWJsZS4gVGhpcyBmZWF0dXJlIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgTkFNRTogYXV0b2V4cAorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAxCisgIERFU0M6IEF1dG8gRXhwb3N1cmUgQ29udHJvbCBlbmFibGUuIFRoaXMgZmVhdHVyZSBpcyBub3QgeWV0IGltcGxlbWVudGVkLgorCisgIE5BTUU6IGRlYnVnCisgIFRZUEU6IGludGVnZXIgKDAtNikKKyAgREVGQVVMVDogMworICBERVNDOiBTZXRzIHRoZSB0aHJlc2hvbGQgZm9yIHByaW50aW5nIGRlYnVnIG1lc3NhZ2VzLiBUaGUgaGlnaGVyIHRoZSB2YWx1ZSwKKyAgICAgICAgdGhlIG1vcmUgaXMgcHJpbnRlZC4gVGhlIGxldmVscyBhcmUgY3VtdWxhdGl2ZSwgYW5kIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgIDA9bm8gZGVidWcgbWVzc2FnZXMKKyAgICAgICAgICAxPWluaXQvZGV0ZWN0aW9uL3VubG9hZCBhbmQgb3RoZXIgc2lnbmlmaWNhbnQgbWVzc2FnZXMKKyAgICAgICAgICAyPXNvbWUgd2FybmluZyBtZXNzYWdlcworICAgICAgICAgIDM9Y29uZmlnL2NvbnRyb2wgZnVuY3Rpb24gY2FsbHMKKyAgICAgICAgICA0PW1vc3QgZnVuY3Rpb24gY2FsbHMgYW5kIGRhdGEgcGFyc2luZyBtZXNzYWdlcworICAgICAgICAgIDU9aGlnaGx5IHJlcGV0aXRpdmUgbWVzZ3MKKworICBOQU1FOiBzbmFwc2hvdAorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwCisgIERFU0M6IFNldCB0byAxIHRvIGVuYWJsZSBzbmFwc2hvdCBtb2RlLiByZWFkKCkvVklESU9DU1lOQyB3aWxsIGJsb2NrIHVudGlsCisJdGhlIHNuYXBzaG90IGJ1dHRvbiBpcyBwcmVzc2VkLiBOb3RlOiBlbmFibGluZyB0aGlzIG1vZGUgZGlzYWJsZXMKKwkvcHJvYy92aWRlby9vdjUxMS88bWlub3IjPi9idXR0b24KKworICBOQU1FOiBjYW1zCisgIFRZUEU6IGludGVnZXIgKDEtNCBmb3IgT1Y1MTEsIDEtMzEgZm9yIE9WNTExKykKKyAgREVGQVVMVDogMQorICBERVNDOiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseSBvbiBhIHNpbmdsZSBidXMuCisgICAgICAgIFZhbHVlcyBoaWdoZXIgdGhhbiAxIHJlZHVjZSB0aGUgZGF0YSByYXRlIG9mIGVhY2ggY2FtZXJhLCBhbGxvd2luZyB0d28KKyAgICAgICAgb3IgbW9yZSB0byBiZSB1c2VkIGF0IG9uY2UuIElmIHlvdSBoYXZlIGEgY29tcGxpY2F0ZWQgc2V0dXAgaW52b2x2aW5nCisgICAgICAgIGJvdGggT1Y1MTEgYW5kIE9WNTExKyBjYW1lcmFzLCB0cmlhbC1hbmQtZXJyb3IgbWF5IGJlIG5lY2Vzc2FyeSBmb3IKKyAgICAgICAgZmluZGluZyB0aGUgb3B0aW11bSBzZXR0aW5nLgorCisgIE5BTUU6IGNvbXByZXNzCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAKKyAgREVTQzogU2V0IHRoaXMgdG8gMSB0byB0dXJuIG9uIHRoZSBjYW1lcmEncyBjb21wcmVzc2lvbiBlbmdpbmUuIFRoaXMgY2FuCisgICAgICAgIHBvdGVudGlhbGx5IGluY3JlYXNlIHRoZSBmcmFtZSByYXRlIGF0IHRoZSBleHBlbnNlIG9mIHF1YWxpdHksIGlmIHlvdQorICAgICAgICBoYXZlIGEgZmFzdCBDUFUuIFlvdSBtdXN0IGxvYWQgdGhlIHByb3BlciBjb21wcmVzc2lvbiBtb2R1bGUgZm9yIHlvdXIKKyAgICAgICAgY2FtZXJhIGJlZm9yZSBzdGFydGluZyB5b3VyIGFwcGxpY2F0aW9uIChvdjUxMV9kZWNvbXAgb3Igb3Y1MThfZGVjb21wKS4KKworICBOQU1FOiB0ZXN0cGF0CisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAKKyAgREVTQzogVGhpcyBjb25maWd1cmVzIHRoZSBjYW1lcmEncyBzZW5zb3IgdG8gdHJhbnNtaXQgYSBjb2xvcmVkIHRlc3QtcGF0dGVybgorICAgICAgICBpbnN0ZWFkIG9mIGFuIGltYWdlLiBUaGlzIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHlldC4KKworICBOQU1FOiBkdW1wcGl4CisgIFRZUEU6IGludGVnZXIgKDAtMikKKyAgREVGQVVMVDogMAorICBERVNDOiBEdW1wcyByYXcgcGl4ZWwgZGF0YSBhbmQgc2tpcHMgcG9zdC1wcm9jZXNzaW5nIGFuZCBmb3JtYXQgY29udmVyc2lvbi4KKwlJdCBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHkuIE9wdGlvbnMgYXJlOgorCQkwOiBEaXNhYmxlIChkZWZhdWx0KQorCQkxOiBEdW1wIHJhdyBkYXRhIGZyb20gY2FtZXJhLCBleGNsdWRpbmcgaGVhZGVycyBhbmQgdHJhaWxlcnMKKwkJMjogRHVtcHMgZGF0YSBleGFjdGx5IGFzIHJlY2VpdmVkIGZyb20gY2FtZXJhCisKKyAgTkFNRTogbGVkCisgIFRZUEU6IGludGVnZXIgKDAtMikKKyAgREVGQVVMVDogMSAoQWx3YXlzIG9uKQorICBERVNDOiBDb250cm9scyB3aGV0aGVyIHRoZSBMRUQgKHRoZSBsaXR0bGUgbGlnaHQpIG9uIHRoZSBmcm9udCBvZiB0aGUgY2FtZXJhCisJaXMgYWx3YXlzIG9mZiAoMCksIGFsd2F5cyBvbiAoMSksIG9yIG9ubHkgb24gd2hlbiBkcml2ZXIgaXMgb3BlbiAoMikuCisJVGhpcyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIE9WNTExLCBhbmQgbWlnaHQgb25seSB3b3JrIHdpdGggY2VydGFpbgorCWNhbWVyYXMgKG9uZXMgdGhhdCBhY3R1YWxseSBoYXZlIHRoZSBMRUQgd2lyZWQgdG8gdGhlIGNvbnRyb2wgcGluLCBhbmQKKwlub3QganVzdCBoYXJkLXdpcmVkIHRvIGJlIG9uIGFsbCB0aGUgdGltZSkuCisKKyAgTkFNRTogZHVtcF9icmlkZ2UKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMAorICBERVNDOiBEdW1wcyB0aGUgYnJpZGdlIChPVjUxMVsrXSBvciBPVjUxOFsrXSkgcmVnaXN0ZXIgdmFsdWVzIHRvIHRoZSBzeXN0ZW0KKwlsb2cuIE9ubHkgdXNlZnVsIGZvciBzZXJpb3VzIGRlYnVnZ2luZy9kZXZlbG9wbWVudCBwdXJwb3Nlcy4KKworICBOQU1FOiBkdW1wX3NlbnNvcgorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwCisgIERFU0M6IER1bXBzIHRoZSBzZW5zb3IgcmVnaXN0ZXIgdmFsdWVzIHRvIHRoZSBzeXN0ZW0gbG9nLiBPbmx5IHVzZWZ1bCBmb3IKKwlzZXJpb3VzIGRlYnVnZ2luZy9kZXZlbG9wbWVudCBwdXJwb3Nlcy4KKworICBOQU1FOiBwcmludHBoCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAKKyAgREVTQzogU2V0dGluZyB0aGlzIHRvIDEgd2lsbCBkdW1wIHRoZSBmaXJzdCAxMiBieXRlcyBvZiBlYWNoIGlzb2MgZnJhbWUuIFRoaXMKKwlpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgYXJlIHRyeWluZyB0byBkZWJ1ZyBwcm9ibGVtcyB3aXRoIHRoZSBpc29jIGRhdGEKKwlzdHJlYW0gKGkuZS46IGNhbWVyYSBpbml0aWFsaXplcywgYnV0IHZpZGNhdCBoYW5ncyB1bnRpbCBDdHJsLUMpLiBCZQorCXdhcm5lZCB0aGF0IHRoaXMgZHVtcHMgYSBsYXJnZSBudW1iZXIgb2YgbWVzc2FnZXMgdG8geW91ciBrZXJuZWwgbG9nLgorCisgIE5BTUU6IHBoeSwgcGh1diwgcHZ5LCBwdnV2LCBxaHksIHFodXYsIHF2eSwgcXZ1dgorICBUWVBFOiBpbnRlZ2VyICgwLTYzIGZvciBwaHkgYW5kIHBodXYsIDAtMjU1IGZvciByZXN0KQorICBERUZBVUxUOiBPVjUxMSBkZWZhdWx0IHZhbHVlcworICBERVNDOiBUaGVzZSBhcmUgcmVnaXN0ZXJzIDcwaCAtIDc3aCBvZiB0aGUgT1Y1MTEsIHdoaWNoIGNvbnRyb2wgdGhlCisJcHJlZGljdGlvbiByYW5nZXMgYW5kIHF1YW50aXphdGlvbiB0aHJlc2hvbGRzIG9mIHRoZSBjb21wcmVzc29yLCBmb3IKKwl0aGUgWSBhbmQgVVYgY2hhbm5lbHMgaW4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpcmVjdGlvbnMuIFNlZQorCXRoZSBPVjUxMSBvciBPVjUxMSsgZGF0YSBzaGVldCBmb3IgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbnMuIFRoZXNlCisJbm9ybWFsbHkgZG8gbm90IG5lZWQgdG8gYmUgY2hhbmdlZC4KKworICBOQU1FOiBsaWdodGZyZXEKKyAgVFlQRTogaW50ZWdlciAoMCwgNTAsIG9yIDYwKQorICBERUZBVUxUOiAwICh1c2Ugc2Vuc29yIGRlZmF1bHQpCisgIERFU0M6IFNldHMgdGhlIHNlbnNvciB0byBtYXRjaCB5b3VyIGxpZ2h0aW5nIGZyZXF1ZW5jeS4gVGhpcyBjYW4gcmVkdWNlIHRoZQorCWFwcGVhcmFuY2Ugb2YgImJhbmRpbmciLCBpLmUuIGhvcml6b250YWwgbGluZXMgb3Igd2F2ZXMgb2YgbGlnaHQgYW5kCisJZGFyayB0aGF0IGFyZSBvZnRlbiBjYXVzZWQgYnkgYXJ0aWZpY2lhbCBsaWdodGluZy4gVmFsaWQgdmFsdWVzIGFyZToKKwkJMCAtIFVzZSBkZWZhdWx0IChkZXBlbmRzIG9uIHNlbnNvciwgbW9zdCBsaWtlbHkgNjAgSHopCisJCTUwIC0gRm9yIEV1cm9wZWFuIGFuZCBBc2lhbiA1MCBIeiBwb3dlcgorCQk2MCAtIEZvciBBbWVyaWNhbiA2MCBIeiBwb3dlcgorCisgIE5BTUU6IGJhbmRpbmdmaWx0ZXIKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMCAob2ZmKQorICBERVNDOiBFbmFibGVzIHRoZSBzZW5zb3K0cyBiYW5kaW5nIGZpbHRlciBleHBvc3VyZSBhbGdvcml0aG0uIFRoaXMgcmVkdWNlcworCW9yIHN0YWJpbGl6ZXMgdGhlICJiYW5kaW5nIiBjYXVzZWQgYnkgc29tZSBhcnRpZmljaWFsIGxpZ2h0IHNvdXJjZXMKKwkoZXNwZWNpYWxseSBmbHVvcmVzY2VudCkuIFlvdSBtaWdodCBoYXZlIHRvIHNldCBsaWdodGZyZXEgY29ycmVjdGx5IGZvcgorCXRoaXMgdG8gd29yayByaWdodC4gQXMgYW4gYWRkZWQgYm9udXMsIHRoaXMgc29tZXRpbWVzIG1ha2VzIGl0CisJcG9zc2libGUgdG8gY2FwdHVyZSB5b3VyIG1vbml0b3K0cyBvdXRwdXQuCisKKyAgTkFNRTogZmFzdHNldAorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwIChvZmYpCisgIERFU0M6IEFsbG93cyBwaWN0dXJlIHNldHRpbmdzIChicmlnaHRuZXNzLCBjb250cmFzdCwgY29sb3IsIGFuZCBodWUpIHRvIHRha2UKKwllZmZlY3QgaW1tZWRpYXRlbHksIGV2ZW4gaW4gdGhlIG1pZGRsZSBvZiBhIGZyYW1lLiBUaGlzIHJlZHVjZXMgdGhlCisJdGltZSB0byBjaGFuZ2Ugc2V0dGluZ3MsIGJ1dCBjYW4gcnVpbiBmcmFtZXMgZHVyaW5nIHRoZSBjaGFuZ2UuIE9ubHkKKwlhZmZlY3RzIE9tbmlWaXNpb24gc2Vuc29ycy4KKworICBOQU1FOiBmb3JjZV9wYWxldHRlCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAgKG9mZikKKyAgREVTQzogRm9yY2VzIHRoZSBwYWxldHRlIChjb2xvciBmb3JtYXQpIHRvIGEgc3BlY2lmaWMgdmFsdWUuIElmIGFuCisJYXBwbGljYXRpb24gcmVxdWVzdHMgYSBkaWZmZXJlbnQgcGFsZXR0ZSwgaXQgd2lsbCBiZSByZWplY3RlZCwgdGhlcmVieQorCWZvcmNpbmcgaXQgdG8gdHJ5IG90aGVycyB1bnRpbCBpdCBzdWNjZWVkcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGZvcmNpbmcKKwlncmV5c2NhbGUgbW9kZSB3aXRoIGEgY29sb3IgY2FtZXJhLCBmb3IgZXhhbXBsZS4gU3VwcG9ydGVkIG1vZGVzIGFyZToKKwkJMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChBbGxvd3MgYWxsIHRoZSBmb2xsb3dpbmcgZm9ybWF0cykKKwkJMSAgIFZJREVPX1BBTEVUVEVfR1JFWSAgICAgIChMaW5lYXIgZ3JleXNjYWxlKQorCQkxMCAgVklERU9fUEFMRVRURV9ZVVY0MjAgICAgKFlVViA0OjI6MCBQbGFuYXIpCisJCTE1ICBWSURFT19QQUxFVFRFX1lVVjQyMFAgICAoWVVWIDQ6MjowIFBsYW5hciwgc2FtZSBhcyAxMCkKKworICBOQU1FOiBiYWNrbGlnaHQKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMCAob2ZmKQorICBERVNDOiBTZXR0aW5nIHRoaXMgZmxhZyBjaGFuZ2VzIHRoZSBleHBvc3VyZSBhbGdvcml0aG0gZm9yIE9tbmlWaXNpb24gc2Vuc29ycworCXN1Y2ggdGhhdCBvYmplY3RzIGluIHRoZSBjYW1lcmEncyB2aWV3IChpLmUuIHlvdXIgaGVhZCkgY2FuIGJlIGNsZWFybHkKKwlzZWVuIHdoZW4gdGhleSBhcmUgaWxsdW1pbmF0ZWQgZnJvbSBiZWhpbmQuIEl0IHJlZHVjZXMgb3IgZWxpbWluYXRlcworCXRoZSBzZW5zb3IncyBhdXRvLWV4cG9zdXJlIGZ1bmN0aW9uLCBzbyBpdCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4KKwluZWVkZWQuIEFkZGl0aW9uYWxseSwgaXQgaXMgb25seSBzdXBwb3J0ZWQgd2l0aCB0aGUgT1Y2NjIwIGFuZCBPVjc2MjAuCisKKyAgTkFNRTogdW5pdF92aWRlbworICBUWVBFOiBVcCB0byAxNiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnMKKyAgREVGQVVMVDogMCwwLDAuLi4gKGF1dG9tYXRpY2FsbHkgYXNzaWduIHRoZSBuZXh0IGF2YWlsYWJsZSBtaW5vcihzKSkKKyAgREVTQzogWW91IGNhbiBzcGVjaWZ5IHVwIHRvIDE2IG1pbm9yIG51bWJlcnMgdG8gYmUgYXNzaWduZWQgdG8gb3Y1MTEgZGV2aWNlcy4KKwlGb3IgZXhhbXBsZSwgInVuaXRfdmlkZW89MSwzIiB3aWxsIG1ha2UgdGhlIGRyaXZlciB1c2UgL2Rldi92aWRlbzEgYW5kCisJL2Rldi92aWRlbzMgZm9yIHRoZSBmaXJzdCB0d28gZGV2aWNlcyBpdCBkZXRlY3RzLiBBZGRpdGlvbmFsIGRldmljZXMKKwl3aWxsIGJlIGFzc2lnbmVkIGF1dG9tYXRpY2FsbHkgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGF2YWlsYWJsZSBkZXZpY2UKKwlub2RlICgvZGV2L3ZpZGVvMCBpbiB0aGlzIGNhc2UpLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBzcGVjaWZ5IDAgYXMgYQorCW1pbm9yIG51bWJlci4gVGhpcyBmZWF0dXJlIHJlcXVpcmVzIGtlcm5lbCB2ZXJzaW9uIDIuNC41IG9yIGhpZ2hlci4KKworICBOQU1FOiByZW1vdmVfemVyb3MKKyAgVFlQRTogaW50ZWdlciAoQm9vbGVhbikKKyAgREVGQVVMVDogMCAoZG8gbm90IHNraXAgYW55IGluY29taW5nIGRhdGEpCisgIERFU0M6IFNldHRpbmcgdGhpcyB0byAxIHdpbGwgcmVtb3ZlIHplcm8tcGFkZGluZyBmcm9tIGluY29taW5nIGRhdGEuIFRoaXMKKwl3aWxsIGNvbXBlbnNhdGUgZm9yIHRoZSBibG9ja3Mgb2YgY29ycnVwdGlvbiB0aGF0IGNhbiBhcHBlYXIgd2hlbiB0aGUKKwljYW1lcmEgY2Fubm90IGtlZXAgdXAgd2l0aCB0aGUgc3BlZWQgb2YgdGhlIFVTQiBidXMgKGVnLiBhdCBsb3cgZnJhbWUKKwlyZXNvbHV0aW9ucykuIFRoaXMgZmVhdHVyZSBpcyBhbHdheXMgZW5hYmxlZCB3aGVuIGNvbXByZXNzaW9uIGlzIG9uLgorCisgIE5BTUU6IG1pcnJvcgorICBUWVBFOiBpbnRlZ2VyIChCb29sZWFuKQorICBERUZBVUxUOiAwIChvZmYpCisgIERFU0M6IFNldHRpbmcgdGhpcyB0byAxIHdpbGwgcmV2ZXJzZSAoIm1pcnJvciIpIHRoZSBpbWFnZSBob3Jpem9udGFsbHkuIFRoaXMKKwltaWdodCBiZSBuZWNlc3NhcnkgaWYgeW91ciBjYW1lcmEgaGFzIGEgY3VzdG9tIGxlbnMgYXNzZW1ibHkuIFRoaXMgaGFzCisJbm8gZWZmZWN0IHdpdGggdmlkZW8gY2FwdHVyZSBkZXZpY2VzLgorCisgIE5BTUU6IG92NTE4X2NvbG9yCisgIFRZUEU6IGludGVnZXIgKEJvb2xlYW4pCisgIERFRkFVTFQ6IDAgKG9mZikKKyAgREVTQzogRW5hYmxlIE9WNTE4IGNvbG9yIHN1cHBvcnQuIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQgc2luY2UgaXQgZG9lc24ndAorCXdvcmsgbW9zdCBvZiB0aGUgdGltZS4gSWYgeW91IHdhbnQgdG8gdHJ5IGl0LCB5b3UgbXVzdCBhbHNvIGxvYWQKKwlvdjUxOF9kZWNvbXAgd2l0aCB0aGUgIm5vdXY9MCIgcGFyYW1ldGVyLiBJZiB5b3UgZ2V0IGltcHJvcGVyIGNvbG9ycyBvcgorCWRpYWdvbmFsIGxpbmVzIHRocm91Z2ggdGhlIGltYWdlLCByZXN0YXJ0IHlvdXIgdmlkZW8gYXBwIGFuZCB0cnkgYWdhaW4uCisJUmVwZWF0IGFzIG5lY2Vzc2FyeS4KKworV09SS0lORyBGRUFUVVJFUzoKKyBvIENvbG9yIHN0cmVhbWluZy9jYXB0dXJlIGF0IG1vc3Qgd2lkdGhzIGFuZCBoZWlnaHRzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiA4LgorIG8gTW9ub2Nocm9tZSAodXNlIGZvcmNlX3BhbGV0dGU9MSB0byBlbmFibGUpCisgbyBTZXR0aW5nL2dldHRpbmcgb2Ygc2F0dXJhdGlvbiwgY29udHJhc3QsIGJyaWdodG5lc3MsIGFuZCBodWUgKG9ubHkgc29tZSBvZgorICAgdGhlbSB3b3JrIHRoZSBPVjc2MjAgYW5kIE9WNzYyMEFFKQorIG8gL3Byb2Mgc3RhdHVzIHJlcG9ydGluZworIG8gU0FBNzExMUEgdmlkZW8gY2FwdHVyZSBzdXBwb3J0IGF0IDMyMHgyNDAgYW5kIDY0MHg0ODAKKyBvIENvbXByZXNzaW9uIHN1cHBvcnQKKyBvIFNNUCBjb21wYXRpYmlsaXR5CisKK0hPVyBUTyBDT05UQUNUIE1FOgorCitZb3UgY2FuIGVtYWlsIG1lIGF0IG1hcmtAYWxwaGEuZHluZG5zLm9yZyAuIFBsZWFzZSBwcmVmaXggdGhlIHN1YmplY3QgbGluZQord2l0aCAiT1Y1MTE6ICIgc28gdGhhdCBJIGFtIGNlcnRhaW4gdG8gbm90aWNlIHlvdXIgbWVzc2FnZS4KKworQ1JFRElUUzoKKworVGhlIGNvZGUgaXMgYmFzZWQgaW4gbm8gc21hbGwgcGFydCBvbiB0aGUgQ1BpQSBkcml2ZXIgYnkgSm9oYW5uZXMgRXJkZmVsdCwKK1JhbmR5IER1bmxhcCwgYW5kIG90aGVycy4gQmlnIHRoYW5rcyB0byB0aGVtIGZvciB0aGVpciBwaW9uZWVyaW5nIHdvcmsgb24gdGhhdAorYW5kIHRoZSBVU0Igc3RhY2suIFRoYW5rcyB0byBCcmV0IFdhbGxhY2ggZm9yIGdldHRpbmcgY2FtZXJhIHJlZyBJTywgSVNPQywgYW5kCitpbWFnZSBjYXB0dXJlIHdvcmtpbmcuIFRoYW5rcyB0byBPcmlvbiBTa3kgTGF3bG9yLCBLZXZpbiBNb29yZSwgYW5kIENsYXVkaW8KK01hdHN1b2thIGZvciB0aGVpciB3b3JrIGFzIHdlbGwuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvcHJvY191c2JfaW5mby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5YzcyZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0CkBAIC0wLDAgKzEsMzcxIEBACisvcHJvYy9idXMvdXNiIGZpbGVzeXN0ZW0gb3V0cHV0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisodmVyc2lvbiAyMDAzLjA1LjMwKQorCisKK1RoZSB1c2JmcyBmaWxlc3lzdGVtIGZvciBVU0IgZGV2aWNlcyBpcyB0cmFkaXRpb25hbGx5IG1vdW50ZWQgYXQKKy9wcm9jL2J1cy91c2IuICBJdCBwcm92aWRlcyB0aGUgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIGZpbGUsIGFzIHdlbGwgYXMKK3RoZSAvcHJvYy9idXMvdXNiL0JCQi9EREQgZmlsZXMuCisKKworKipOT1RFKio6IElmIC9wcm9jL2J1cy91c2IgYXBwZWFycyBlbXB0eSwgYW5kIGEgaG9zdCBjb250cm9sbGVyCisJICBkcml2ZXIgaGFzIGJlZW4gbGlua2VkLCB0aGVuIHlvdSBuZWVkIHRvIG1vdW50IHRoZQorCSAgZmlsZXN5c3RlbS4gIElzc3VlIHRoZSBjb21tYW5kIChhcyByb290KToKKworICAgICAgbW91bnQgLXQgdXNiZnMgbm9uZSAvcHJvYy9idXMvdXNiCisKKwkgIEFuIGFsdGVybmF0aXZlIGFuZCBtb3JlIHBlcm1hbmVudCBtZXRob2Qgd291bGQgYmUgdG8gYWRkCisKKyAgICAgIG5vbmUgIC9wcm9jL2J1cy91c2IgIHVzYmZzICBkZWZhdWx0cyAgMCAgMAorCisJICB0byAvZXRjL2ZzdGFiLiAgVGhpcyB3aWxsIG1vdW50IHVzYmZzIGF0IGVhY2ggcmVib290LgorCSAgWW91IGNhbiB0aGVuIGlzc3VlIGBjYXQgL3Byb2MvYnVzL3VzYi9kZXZpY2VzYCB0byBleHRyYWN0CisJICBVU0IgZGV2aWNlIGluZm9ybWF0aW9uLCBhbmQgdXNlciBtb2RlIGRyaXZlcnMgY2FuIHVzZSB1c2JmcyAKKwkgIHRvIGludGVyYWN0IHdpdGggVVNCIGRldmljZXMuCisKKwkgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb3VudCBvcHRpb25zIHN1cHBvcnRlZCBieSB1c2Jmcy4KKwkgIENvbnN1bHQgdGhlIHNvdXJjZSBjb2RlIChsaW51eC9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMpIGZvcgorCSAgaW5mb3JtYXRpb24gYWJvdXQgdGhvc2Ugb3B0aW9ucy4KKworKipOT1RFKio6IFRoZSBmaWxlc3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgZnJvbSAidXNiZGV2ZnMiIHRvCisJICAidXNiZnMiLCB0byByZWR1Y2UgY29uZnVzaW9uIHdpdGggImRldmZzIi4gIFlvdSBtYXkKKwkgIHN0aWxsIHNlZSByZWZlcmVuY2VzIHRvIHRoZSBvbGRlciAidXNiZGV2ZnMiIG5hbWUuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIG1vdW50aW5nIHRoZSB1c2JmcyBmaWxlIHN5c3RlbSwgc2VlIHRoZQorIlVTQiBEZXZpY2UgRmlsZXN5c3RlbSIgc2VjdGlvbiBvZiB0aGUgVVNCIEd1aWRlLiBUaGUgbGF0ZXN0IGNvcHkgCitvZiB0aGUgVVNCIEd1aWRlIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvCisKKworVEhFIC9wcm9jL2J1cy91c2IvQkJCL0RERCBGSUxFUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFYWNoIGNvbm5lY3RlZCBVU0IgZGV2aWNlIGhhcyBvbmUgZmlsZS4gIFRoZSBCQkIgaW5kaWNhdGVzIHRoZSBidXMKK251bWJlci4gIFRoZSBEREQgaW5kaWNhdGVzIHRoZSBkZXZpY2UgYWRkcmVzcyBvbiB0aGF0IGJ1cy4gIEJvdGgKK29mIHRoZXNlIG51bWJlcnMgYXJlIGFzc2lnbmVkIHNlcXVlbnRpYWxseSwgYW5kIGNhbiBiZSByZXVzZWQsIHNvCit5b3UgY2FuJ3QgcmVseSBvbiB0aGVtIGZvciBzdGFibGUgYWNjZXNzIHRvIGRldmljZXMuICBGb3IgZXhhbXBsZSwKK2l0J3MgcmVsYXRpdmVseSBjb21tb24gZm9yIGRldmljZXMgdG8gcmUtZW51bWVyYXRlIHdoaWxlIHRoZXkgYXJlCitzdGlsbCBjb25uZWN0ZWQgKHBlcmhhcHMgc29tZW9uZSBqb3N0bGVkIHRoZWlyIHBvd2VyIHN1cHBseSwgaHViLAorb3IgVVNCIGNhYmxlKSwgc28gYSBkZXZpY2UgbWlnaHQgYmUgMDAyLzAyNyB3aGVuIHlvdSBmaXJzdCBjb25uZWN0CitpdCBhbmQgMDAyLzA0OCBzb21ldGltZSBsYXRlci4KKworVGhlc2UgZmlsZXMgY2FuIGJlIHJlYWQgYXMgYmluYXJ5IGRhdGEuICBUaGUgYmluYXJ5IGRhdGEgY29uc2lzdHMKK29mIGZpcnN0IHRoZSBkZXZpY2UgZGVzY3JpcHRvciwgdGhlbiB0aGUgZGVzY3JpcHRvcnMgZm9yIGVhY2gKK2NvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZS4gIFRoYXQgaW5mb3JtYXRpb24gaXMgYWxzbyBzaG93biBpbgordGV4dCBmb3JtIGJ5IHRoZSAvcHJvYy9idXMvdXNiL2RldmljZXMgZmlsZSwgZGVzY3JpYmVkIGxhdGVyLgorCitUaGVzZSBmaWxlcyBtYXkgYWxzbyBiZSB1c2VkIHRvIHdyaXRlIHVzZXItbGV2ZWwgZHJpdmVycyBmb3IgdGhlIFVTQgorZGV2aWNlcy4gIFlvdSB3b3VsZCBvcGVuIHRoZSAvcHJvYy9idXMvdXNiL0JCQi9EREQgZmlsZSByZWFkL3dyaXRlLAorcmVhZCBpdHMgZGVzY3JpcHRvcnMgdG8gbWFrZSBzdXJlIGl0J3MgdGhlIGRldmljZSB5b3UgZXhwZWN0LCBhbmQgdGhlbgorYmluZCB0byBhbiBpbnRlcmZhY2UgKG9yIHBlcmhhcHMgc2V2ZXJhbCkgdXNpbmcgYW4gaW9jdGwgY2FsbC4gIFlvdQord291bGQgaXNzdWUgbW9yZSBpb2N0bHMgdG8gdGhlIGRldmljZSB0byBjb21tdW5pY2F0ZSB0byBpdCB1c2luZworY29udHJvbCwgYnVsaywgb3Igb3RoZXIga2luZHMgb2YgVVNCIHRyYW5zZmVycy4gIFRoZSBJT0NUTHMgYXJlCitsaXN0ZWQgaW4gdGhlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4gZmlsZSwgYW5kIGF0IHRoaXMgd3JpdGluZyB0aGUKK3NvdXJjZSBjb2RlIChsaW51eC9kcml2ZXJzL3VzYi9kZXZpby5jKSBpcyB0aGUgcHJpbWFyeSByZWZlcmVuY2UKK2ZvciBob3cgdG8gYWNjZXNzIGRldmljZXMgdGhyb3VnaCB0aG9zZSBmaWxlcy4KKworTm90ZSB0aGF0IHNpbmNlIGJ5IGRlZmF1bHQgdGhlc2UgQkJCL0RERCBmaWxlcyBhcmUgd3JpdGFibGUgb25seSBieQorcm9vdCwgb25seSByb290IGNhbiB3cml0ZSBzdWNoIHVzZXIgbW9kZSBkcml2ZXJzLiAgWW91IGNhbiBzZWxlY3RpdmVseQorZ3JhbnQgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyB0byBvdGhlciB1c2VycyBieSB1c2luZyAiY2htb2QiLiAgQWxzbywKK3VzYmZzIG1vdW50IG9wdGlvbnMgc3VjaCBhcyAiZGV2bW9kZT0wNjY2IiBtYXkgYmUgaGVscGZ1bC4KKworCisKK1RIRSAvcHJvYy9idXMvdXNiL2RldmljZXMgRklMRToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIC9wcm9jL2J1cy91c2IvZGV2aWNlcywgZWFjaCBkZXZpY2UncyBvdXRwdXQgaGFzIG11bHRpcGxlCitsaW5lcyBvZiBBU0NJSSBvdXRwdXQuCitJIG1hZGUgaXQgQVNDSUkgaW5zdGVhZCBvZiBiaW5hcnkgb24gcHVycG9zZSwgc28gdGhhdCBzb21lb25lCitjYW4gb2J0YWluIHNvbWUgdXNlZnVsIGRhdGEgZnJvbSBpdCB3aXRob3V0IHRoZSB1c2Ugb2YgYW4KK2F1eGlsaWFyeSBwcm9ncmFtLiAgSG93ZXZlciwgd2l0aCBhbiBhdXhpbGlhcnkgcHJvZ3JhbSwgdGhlIG51bWJlcnMKK2luIHRoZSBmaXJzdCA0IGNvbHVtbnMgb2YgZWFjaCAiVDoiIGxpbmUgKHRvcG9sb2d5IGluZm86CitMZXYsIFBybnQsIFBvcnQsIENudCkgY2FuIGJlIHVzZWQgdG8gYnVpbGQgYSBVU0IgdG9wb2xvZ3kgZGlhZ3JhbS4KKworRWFjaCBsaW5lIGlzIHRhZ2dlZCB3aXRoIGEgb25lLWNoYXJhY3RlciBJRCBmb3IgdGhhdCBsaW5lOgorCitUID0gVG9wb2xvZ3kgKGV0Yy4pCitCID0gQmFuZHdpZHRoIChhcHBsaWVzIG9ubHkgdG8gVVNCIGhvc3QgY29udHJvbGxlcnMsIHdoaWNoIGFyZQorICAgIHZpcnR1YWxpemVkIGFzIHJvb3QgaHVicykKK0QgPSBEZXZpY2UgZGVzY3JpcHRvciBpbmZvLgorUCA9IFByb2R1Y3QgSUQgaW5mby4gKGZyb20gRGV2aWNlIGRlc2NyaXB0b3IsIGJ1dCB0aGV5IHdvbid0IGZpdAorICAgIHRvZ2V0aGVyIG9uIG9uZSBsaW5lKQorUyA9IFN0cmluZyBkZXNjcmlwdG9ycy4KK0MgPSBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgaW5mby4gKCogPSBhY3RpdmUgY29uZmlndXJhdGlvbikKK0kgPSBJbnRlcmZhY2UgZGVzY3JpcHRvciBpbmZvLgorRSA9IEVuZHBvaW50IGRlc2NyaXB0b3IgaW5mby4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworL3Byb2MvYnVzL3VzYi9kZXZpY2VzIG91dHB1dCBmb3JtYXQ6CisKK0xlZ2VuZDoKKyAgZCA9IGRlY2ltYWwgbnVtYmVyIChtYXkgaGF2ZSBsZWFkaW5nIHNwYWNlcyBvciAwJ3MpCisgIHggPSBoZXhhZGVjaW1hbCBudW1iZXIgKG1heSBoYXZlIGxlYWRpbmcgc3BhY2VzIG9yIDAncykKKyAgcyA9IHN0cmluZworCisKK1RvcG9sb2d5IGluZm86CisKK1Q6ICBCdXM9ZGQgTGV2PWRkIFBybnQ9ZGQgUG9ydD1kZCBDbnQ9ZGQgRGV2Iz1kZGQgU3BkPWRkZCBNeENoPWRkCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgfCAgICAgIHwgICAgICAgIHwgICAgICAgfF9fTWF4Q2hpbGRyZW4KK3wgICB8ICAgICAgfCAgICAgIHwgICAgICAgfCAgICAgICB8ICAgICAgfCAgICAgICAgfF9fRGV2aWNlIFNwZWVkIGluIE1icHMKK3wgICB8ICAgICAgfCAgICAgIHwgICAgICAgfCAgICAgICB8ICAgICAgfF9fRGV2aWNlTnVtYmVyCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgfF9fQ291bnQgb2YgZGV2aWNlcyBhdCB0aGlzIGxldmVsCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHxfX0Nvbm5lY3Rvci9Qb3J0IG9uIFBhcmVudCBmb3IgdGhpcyBkZXZpY2UKK3wgICB8ICAgICAgfCAgICAgIHxfX1BhcmVudCBEZXZpY2VOdW1iZXIKK3wgICB8ICAgICAgfF9fTGV2ZWwgaW4gdG9wb2xvZ3kgZm9yIHRoaXMgYnVzCit8ICAgfF9fQnVzIG51bWJlcgorfF9fVG9wb2xvZ3kgaW5mbyB0YWcKKworICAgIFNwZWVkIG1heSBiZToKKyAgICAJMS41CU1iaXQvcyBmb3IgbG93IHNwZWVkIFVTQgorCTEyCU1iaXQvcyBmb3IgZnVsbCBzcGVlZCBVU0IKKwk0ODAJTWJpdC9zIGZvciBoaWdoIHNwZWVkIFVTQiAoYWRkZWQgZm9yIFVTQiAyLjApCisKKworQmFuZHdpZHRoIGluZm86CitCOiAgQWxsb2M9ZGRkL2RkZCB1cyAoeHglKSwgI0ludD1kZGQsICNJc289ZGRkCit8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxfX051bWJlciBvZiBpc29jaHJvbm91cyByZXF1ZXN0cworfCAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxfX051bWJlciBvZiBpbnRlcnJ1cHQgcmVxdWVzdHMKK3wgICB8X19Ub3RhbCBCYW5kd2lkdGggYWxsb2NhdGVkIHRvIHRoaXMgYnVzCit8X19CYW5kd2lkdGggaW5mbyB0YWcKKworICAgIEJhbmR3aWR0aCBhbGxvY2F0aW9uIGlzIGFuIGFwcHJveGltYXRpb24gb2YgaG93IG11Y2ggb2Ygb25lIGZyYW1lCisgICAgKG1pbGxpc2Vjb25kKSBpcyBpbiB1c2UuICBJdCByZWZsZWN0cyBvbmx5IHBlcmlvZGljIHRyYW5zZmVycywgd2hpY2gKKyAgICBhcmUgdGhlIG9ubHkgdHJhbnNmZXJzIHRoYXQgcmVzZXJ2ZSBiYW5kd2lkdGguICBDb250cm9sIGFuZCBidWxrCisgICAgdHJhbnNmZXJzIHVzZSBhbGwgb3RoZXIgYmFuZHdpZHRoLCBpbmNsdWRpbmcgcmVzZXJ2ZWQgYmFuZHdpZHRoIHRoYXQKKyAgICBpcyBub3QgdXNlZCBmb3IgdHJhbnNmZXJzIChzdWNoIGFzIGZvciBzaG9ydCBwYWNrZXRzKS4KKyAgICAKKyAgICBUaGUgcGVyY2VudGFnZSBpcyBob3cgbXVjaCBvZiB0aGUgInJlc2VydmVkIiBiYW5kd2lkdGggaXMgc2NoZWR1bGVkIGJ5CisgICAgdGhvc2UgdHJhbnNmZXJzLiAgRm9yIGEgbG93IG9yIGZ1bGwgc3BlZWQgYnVzIChsb29zZWx5LCAiVVNCIDEuMSIpLAorICAgIDkwJSBvZiB0aGUgYnVzIGJhbmR3aWR0aCBpcyByZXNlcnZlZC4gIEZvciBhIGhpZ2ggc3BlZWQgYnVzIChsb29zZWx5LAorICAgICJVU0IgMi4wIikgODAlIGlzIHJlc2VydmVkLgorCisKK0RldmljZSBkZXNjcmlwdG9yIGluZm8gJiBQcm9kdWN0IElEIGluZm86CisKK0Q6ICBWZXI9eC54eCBDbHM9eHgocykgU3ViPXh4IFByb3Q9eHggTXhQUz1kZCAjQ2Zncz1kZAorUDogIFZlbmRvcj14eHh4IFByb2RJRD14eHh4IFJldj14eC54eAorCit3aGVyZQorRDogIFZlcj14Lnh4IENscz14eChzc3NzcykgU3ViPXh4IFByb3Q9eHggTXhQUz1kZCAjQ2Zncz1kZAorfCAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgfCAgICAgICB8X19OdW1iZXJDb25maWd1cmF0aW9ucworfCAgIHwgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgfF9fTWF4UGFja2V0U2l6ZSBvZiBEZWZhdWx0IEVuZHBvaW50Cit8ICAgfCAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgfF9fRGV2aWNlUHJvdG9jb2wKK3wgICB8ICAgICAgICB8ICAgICAgICAgICAgIHxfX0RldmljZVN1YkNsYXNzCit8ICAgfCAgICAgICAgfF9fRGV2aWNlQ2xhc3MKK3wgICB8X19EZXZpY2UgVVNCIHZlcnNpb24KK3xfX0RldmljZSBpbmZvIHRhZyAjMQorCit3aGVyZQorUDogIFZlbmRvcj14eHh4IFByb2RJRD14eHh4IFJldj14eC54eAorfCAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHxfX1Byb2R1Y3QgcmV2aXNpb24gbnVtYmVyCit8ICAgfCAgICAgICAgICAgfF9fUHJvZHVjdCBJRCBjb2RlCit8ICAgfF9fVmVuZG9yIElEIGNvZGUKK3xfX0RldmljZSBpbmZvIHRhZyAjMgorCisKK1N0cmluZyBkZXNjcmlwdG9yIGluZm86CisKK1M6ICBNYW51ZmFjdHVyZXI9c3NzcworfCAgIHxfX01hbnVmYWN0dXJlciBvZiB0aGlzIGRldmljZSBhcyByZWFkIGZyb20gdGhlIGRldmljZS4KK3wgICAgICBGb3IgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzICh2aXJ0dWFsIHJvb3QgaHVicykgdGhpcyBtYXkKK3wgICAgICBiZSBvbWl0dGVkLCBvciAoZm9yIG5ld2VyIGRyaXZlcnMpIHdpbGwgaWRlbnRpZnkgdGhlIGtlcm5lbAorfCAgICAgIHZlcnNpb24gYW5kIHRoZSBkcml2ZXIgd2hpY2ggcHJvdmlkZXMgdGhpcyBodWIgZW11bGF0aW9uLgorfF9fU3RyaW5nIGluZm8gdGFnCisKK1M6ICBQcm9kdWN0PXNzc3MKK3wgICB8X19Qcm9kdWN0IGRlc2NyaXB0aW9uIG9mIHRoaXMgZGV2aWNlIGFzIHJlYWQgZnJvbSB0aGUgZGV2aWNlLgorfCAgICAgIEZvciBvbGRlciBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgKHZpcnR1YWwgcm9vdCBodWJzKSB0aGlzCit8ICAgICAgaW5kaWNhdGVzIHRoZSBkcml2ZXI7IGZvciBuZXdlciBvbmVzLCBpdCdzIGEgcHJvZHVjdCAoYW5kIHZlbmRvcikKK3wgICAgICBkZXNjcmlwdGlvbiB0aGF0IG9mdGVuIGNvbWVzIGZyb20gdGhlIGtlcm5lbCdzIFBDSSBJRCBkYXRhYmFzZS4KK3xfX1N0cmluZyBpbmZvIHRhZworCitTOiAgU2VyaWFsTnVtYmVyPXNzc3MKK3wgICB8X19TZXJpYWwgTnVtYmVyIG9mIHRoaXMgZGV2aWNlIGFzIHJlYWQgZnJvbSB0aGUgZGV2aWNlLgorfCAgICAgIEZvciBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgKHZpcnR1YWwgcm9vdCBodWJzKSB0aGlzIGlzCit8ICAgICAgc29tZSB1bmlxdWUgSUQsIG5vcm1hbGx5IGEgYnVzIElEIChhZGRyZXNzIG9yIHNsb3QgbmFtZSkgdGhhdAorfCAgICAgIGNhbid0IGJlIHNoYXJlZCB3aXRoIGFueSBvdGhlciBkZXZpY2UuCit8X19TdHJpbmcgaW5mbyB0YWcKKworCisKK0NvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciBpbmZvOgorCitDOiogI0lmcz1kZCBDZmcjPWRkIEF0cj14eCBNUHdyPWRkZG1BCit8IHwgfCAgICAgICB8ICAgICAgIHwgICAgICB8X19NYXhQb3dlciBpbiBtQQorfCB8IHwgICAgICAgfCAgICAgICB8X19BdHRyaWJ1dGVzCit8IHwgfCAgICAgICB8X19Db25maWd1cmF0aW9OdW1iZXIKK3wgfCB8X19OdW1iZXJPZkludGVyZmFjZXMKK3wgfF9fICIqIiBpbmRpY2F0ZXMgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uIChvdGhlcnMgYXJlICIgIikKK3xfX0NvbmZpZyBpbmZvIHRhZworICAgIAorICAgIFVTQiBkZXZpY2VzIG1heSBoYXZlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zLCBlYWNoIG9mIHdoaWNoIGFjdAorICAgIHJhdGhlciBkaWZmZXJlbnRseS4gIEZvciBleGFtcGxlLCBhIGJ1cy1wb3dlcmVkIGNvbmZpZ3VyYXRpb24KKyAgICBtaWdodCBiZSBtdWNoIGxlc3MgY2FwYWJsZSB0aGFuIG9uZSB0aGF0IGlzIHNlbGYtcG93ZXJlZC4gIE9ubHkKKyAgICBvbmUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWU7IG1vc3QgZGV2aWNlcworICAgIGhhdmUgb25seSBvbmUgY29uZmlndXJhdGlvbi4KKworICAgIEVhY2ggY29uZmlndXJhdGlvbiBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBpbnRlcmZhY2VzLiAgRWFjaAorICAgIGludGVyZmFjZSBzZXJ2ZXMgYSBkaXN0aW5jdCAiZnVuY3Rpb24iLCB3aGljaCBpcyB0eXBpY2FsbHkgYm91bmQKKyAgICB0byBhIGRpZmZlcmVudCBVU0IgZGV2aWNlIGRyaXZlci4gIE9uZSBjb21tb24gZXhhbXBsZSBpcyBhIFVTQgorICAgIHNwZWFrZXIgd2l0aCBhbiBhdWRpbyBpbnRlcmZhY2UgZm9yIHBsYXliYWNrLCBhbmQgYSBISUQgaW50ZXJmYWNlCisgICAgZm9yIHVzZSB3aXRoIHNvZnR3YXJlIHZvbHVtZSBjb250cm9sLgorCisKK0ludGVyZmFjZSBkZXNjcmlwdG9yIGluZm8gKGNhbiBiZSBtdWx0aXBsZSBwZXIgQ29uZmlnKToKKworSTogIElmIz1kZCBBbHQ9ZGQgI0VQcz1kZCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IERyaXZlcj1zc3NzCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgfF9fRHJpdmVyIG5hbWUKK3wgICB8ICAgICAgfCAgICAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgfCAgICAgICAgICBvciAiKG5vbmUpIgorfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICB8X19JbnRlcmZhY2VQcm90b2NvbAorfCAgIHwgICAgICB8ICAgICAgfCAgICAgICB8ICAgICAgICAgICAgIHxfX0ludGVyZmFjZVN1YkNsYXNzCit8ICAgfCAgICAgIHwgICAgICB8ICAgICAgIHxfX0ludGVyZmFjZUNsYXNzCit8ICAgfCAgICAgIHwgICAgICB8X19OdW1iZXJPZkVuZHBvaW50cworfCAgIHwgICAgICB8X19BbHRlcm5hdGVTZXR0aW5nTnVtYmVyCit8ICAgfF9fSW50ZXJmYWNlTnVtYmVyCit8X19JbnRlcmZhY2UgaW5mbyB0YWcKKworICAgIEEgZ2l2ZW4gaW50ZXJmYWNlIG1heSBoYXZlIG9uZSBvciBtb3JlICJhbHRlcm5hdGUiIHNldHRpbmdzLgorICAgIEZvciBleGFtcGxlLCBkZWZhdWx0IHNldHRpbmdzIG1heSBub3QgdXNlIG1vcmUgdGhhbiBhIHNtYWxsCisgICAgYW1vdW50IG9mIHBlcmlvZGljIGJhbmR3aWR0aC4gIFRvIHVzZSBzaWduaWZpY2FudCBmcmFjdGlvbnMKKyAgICBvZiBidXMgYmFuZHdpZHRoLCBkcml2ZXJzIG11c3Qgc2VsZWN0IGEgbm9uLWRlZmF1bHQgYWx0c2V0dGluZy4KKyAgICAKKyAgICBPbmx5IG9uZSBzZXR0aW5nIGZvciBhbiBpbnRlcmZhY2UgbWF5IGJlIGFjdGl2ZSBhdCBhIHRpbWUsIGFuZAorICAgIG9ubHkgb25lIGRyaXZlciBtYXkgYmluZCB0byBhbiBpbnRlcmZhY2UgYXQgYSB0aW1lLiAgTW9zdCBkZXZpY2VzCisgICAgaGF2ZSBvbmx5IG9uZSBhbHRlcm5hdGUgc2V0dGluZyBwZXIgaW50ZXJmYWNlLgorCisKK0VuZHBvaW50IGRlc2NyaXB0b3IgaW5mbyAoY2FuIGJlIG11bHRpcGxlIHBlciBJbnRlcmZhY2UpOgorCitFOiAgQWQ9eHgocykgQXRyPXh4KHNzc3MpIE14UFM9ZGRkZCBJdmw9ZGRkc3MKK3wgICB8ICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgIHxfX0ludGVydmFsIChtYXgpIGJldHdlZW4gdHJhbnNmZXJzCit8ICAgfCAgICAgICAgfCAgICAgICAgICAgIHxfX0VuZHBvaW50TWF4UGFja2V0U2l6ZQorfCAgIHwgICAgICAgIHxfX0F0dHJpYnV0ZXMoRW5kcG9pbnRUeXBlKQorfCAgIHxfX0VuZHBvaW50QWRkcmVzcyhJPUluLE89T3V0KQorfF9fRW5kcG9pbnQgaW5mbyB0YWcKKworICAgIFRoZSBpbnRlcnZhbCBpcyBub256ZXJvIGZvciBhbGwgcGVyaW9kaWMgKGludGVycnVwdCBvciBpc29jaHJvbm91cykKKyAgICBlbmRwb2ludHMuICBGb3IgaGlnaCBzcGVlZCBlbmRwb2ludHMgdGhlIHRyYW5zZmVyIGludGVydmFsIG1heSBiZQorICAgIG1lYXN1cmVkIGluIG1pY3Jvc2Vjb25kcyByYXRoZXIgdGhhbiBtaWxsaXNlY29uZHMuCisKKyAgICBGb3IgaGlnaCBzcGVlZCBwZXJpb2RpYyBlbmRwb2ludHMsIHRoZSAiTWF4UGFja2V0U2l6ZSIgcmVmbGVjdHMKKyAgICB0aGUgcGVyLW1pY3JvZnJhbWUgZGF0YSB0cmFuc2ZlciBzaXplLiAgRm9yICJoaWdoIGJhbmR3aWR0aCIKKyAgICBlbmRwb2ludHMsIHRoYXQgY2FuIHJlZmxlY3QgdHdvIG9yIHRocmVlIHBhY2tldHMgKGZvciB1cCB0bworICAgIDNLQnl0ZXMgZXZlcnkgMTI1IHVzZWMpIHBlciBlbmRwb2ludC4KKworICAgIFdpdGggdGhlIExpbnV4LVVTQiBzdGFjaywgcGVyaW9kaWMgYmFuZHdpZHRoIHJlc2VydmF0aW9ucyB1c2UgdGhlCisgICAgdHJhbnNmZXIgaW50ZXJ2YWxzIGFuZCBzaXplcyBwcm92aWRlZCBieSBVUkJzLCB3aGljaCBjYW4gYmUgbGVzcworICAgIHRoYW4gdGhvc2UgZm91bmQgaW4gZW5kcG9pbnQgZGVzY3JpcHRvci4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0lmIGEgdXNlciBvciBzY3JpcHQgaXMgaW50ZXJlc3RlZCBvbmx5IGluIFRvcG9sb2d5IGluZm8sIGZvcgorZXhhbXBsZSwgdXNlIHNvbWV0aGluZyBsaWtlICJncmVwIF5UOiAvcHJvYy9idXMvdXNiL2RldmljZXMiCitmb3Igb25seSB0aGUgVG9wb2xvZ3kgbGluZXMuICBBIGNvbW1hbmQgbGlrZQorImdyZXAgLWkgXlt0ZHBdOiAvcHJvYy9idXMvdXNiL2RldmljZXMiIGNhbiBiZSB1c2VkIHRvIGxpc3QKK29ubHkgdGhlIGxpbmVzIHRoYXQgYmVnaW4gd2l0aCB0aGUgY2hhcmFjdGVycyBpbiBzcXVhcmUgYnJhY2tldHMsCit3aGVyZSB0aGUgdmFsaWQgY2hhcmFjdGVycyBhcmUgVERQQ0lFLiAgV2l0aCBhIHNsaWdodGx5IG1vcmUgYWJsZQorc2NyaXB0LCBpdCBjYW4gZGlzcGxheSBhbnkgc2VsZWN0ZWQgbGluZXMgKGZvciBleGFtcGxlLCBvbmx5IFQsIEQsCithbmQgUCBsaW5lcykgYW5kIGNoYW5nZSB0aGVpciBvdXRwdXQgZm9ybWF0LiAgKFRoZSAicHJvY3VzYiIKK1Blcmwgc2NyaXB0IGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBpZGVhLiAgSXQgd2lsbCBsaXN0IG9ubHkKK3NlbGVjdGVkIGxpbmVzIFtzZWxlY3RlZCBmcm9tIFRCRFBTQ0lFXSBvciAiQWxsIiBsaW5lcyBmcm9tCisvcHJvYy9idXMvdXNiL2RldmljZXMuKQorCitUaGUgVG9wb2xvZ3kgbGluZXMgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBncmFwaGljL3BpY3RvcmlhbAorb2YgdGhlIFVTQiBkZXZpY2VzIG9uIGEgc3lzdGVtJ3Mgcm9vdCBodWIuICAoU2VlIG1vcmUgYmVsb3cKK29uIGhvdyB0byBkbyB0aGlzLikKKworVGhlIEludGVyZmFjZSBsaW5lcyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBkcml2ZXIgaXMKK2JlaW5nIHVzZWQgZm9yIGVhY2ggZGV2aWNlLgorCitUaGUgQ29uZmlndXJhdGlvbiBsaW5lcyBjb3VsZCBiZSB1c2VkIHRvIGxpc3QgbWF4aW11bSBwb3dlcgorKGluIG1pbGxpYW1wcykgdGhhdCBhIHN5c3RlbSdzIFVTQiBkZXZpY2VzIGFyZSB1c2luZy4KK0ZvciBleGFtcGxlLCAiZ3JlcCBeQzogL3Byb2MvYnVzL3VzYi9kZXZpY2VzIi4KKworCitIZXJlJ3MgYW4gZXhhbXBsZSwgZnJvbSBhIHN5c3RlbSB3aGljaCBoYXMgYSBVSENJIHJvb3QgaHViLAorYW4gZXh0ZXJuYWwgaHViIGNvbm5lY3RlZCB0byB0aGUgcm9vdCBodWIsIGFuZCBhIG1vdXNlIGFuZAorYSBzZXJpYWwgY29udmVydGVyIGNvbm5lY3RlZCB0byB0aGUgZXh0ZXJuYWwgaHViLgorCitUOiAgQnVzPTAwIExldj0wMCBQcm50PTAwIFBvcnQ9MDAgQ250PTAwIERldiM9ICAxIFNwZD0xMiAgTXhDaD0gMgorQjogIEFsbG9jPSAyOC85MDAgdXMgKCAzJSksICNJbnQ9ICAyLCAjSXNvPSAgMAorRDogIFZlcj0gMS4wMCBDbHM9MDkoaHViICApIFN1Yj0wMCBQcm90PTAwIE14UFM9IDggI0NmZ3M9ICAxCitQOiAgVmVuZG9yPTAwMDAgUHJvZElEPTAwMDAgUmV2PSAwLjAwCitTOiAgUHJvZHVjdD1VU0IgVUhDSSBSb290IEh1YgorUzogIFNlcmlhbE51bWJlcj1kY2UwCitDOiogI0lmcz0gMSBDZmcjPSAxIEF0cj00MCBNeFB3cj0gIDBtQQorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMSBDbHM9MDkoaHViICApIFN1Yj0wMCBQcm90PTAwIERyaXZlcj1odWIKK0U6ICBBZD04MShJKSBBdHI9MDMoSW50LikgTXhQUz0gICA4IEl2bD0yNTVtcworVDogIEJ1cz0wMCBMZXY9MDEgUHJudD0wMSBQb3J0PTAwIENudD0wMSBEZXYjPSAgMiBTcGQ9MTIgIE14Q2g9IDQKK0Q6ICBWZXI9IDEuMDAgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBNeFBTPSA4ICNDZmdzPSAgMQorUDogIFZlbmRvcj0wNDUxIFByb2RJRD0xNDQ2IFJldj0gMS4wMAorQzoqICNJZnM9IDEgQ2ZnIz0gMSBBdHI9ZTAgTXhQd3I9MTAwbUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDEgQ2xzPTA5KGh1YiAgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9aHViCitFOiAgQWQ9ODEoSSkgQXRyPTAzKEludC4pIE14UFM9ICAgMSBJdmw9MjU1bXMKK1Q6ICBCdXM9MDAgTGV2PTAyIFBybnQ9MDIgUG9ydD0wMCBDbnQ9MDEgRGV2Iz0gIDMgU3BkPTEuNSBNeENoPSAwCitEOiAgVmVyPSAxLjAwIENscz0wMCg+aWZjICkgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDRiNCBQcm9kSUQ9MDAwMSBSZXY9IDAuMDAKK0M6KiAjSWZzPSAxIENmZyM9IDEgQXRyPTgwIE14UHdyPTEwMG1BCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAxIENscz0wMyhISUQgICkgU3ViPTAxIFByb3Q9MDIgRHJpdmVyPW1vdXNlCitFOiAgQWQ9ODEoSSkgQXRyPTAzKEludC4pIE14UFM9ICAgMyBJdmw9IDEwbXMKK1Q6ICBCdXM9MDAgTGV2PTAyIFBybnQ9MDIgUG9ydD0wMiBDbnQ9MDIgRGV2Iz0gIDQgU3BkPTEyICBNeENoPSAwCitEOiAgVmVyPSAxLjAwIENscz0wMCg+aWZjICkgU3ViPTAwIFByb3Q9MDAgTXhQUz0gOCAjQ2Zncz0gIDEKK1A6ICBWZW5kb3I9MDU2NSBQcm9kSUQ9MDAwMSBSZXY9IDEuMDgKK1M6ICBNYW51ZmFjdHVyZXI9UGVyYWNvbSBOZXR3b3JrcywgSW5jLgorUzogIFByb2R1Y3Q9UGVyYWNvbSBVU0IgdG8gU2VyaWFsIENvbnZlcnRlcgorQzoqICNJZnM9IDEgQ2ZnIz0gMSBBdHI9YTAgTXhQd3I9MTAwbUEKK0k6ICBJZiM9IDAgQWx0PSAwICNFUHM9IDMgQ2xzPTAwKD5pZmMgKSBTdWI9MDAgUHJvdD0wMCBEcml2ZXI9c2VyaWFsCitFOiAgQWQ9ODEoSSkgQXRyPTAyKEJ1bGspIE14UFM9ICA2NCBJdmw9IDE2bXMKK0U6ICBBZD0wMShPKSBBdHI9MDIoQnVsaykgTXhQUz0gIDE2IEl2bD0gMTZtcworRTogIEFkPTgyKEkpIEF0cj0wMyhJbnQuKSBNeFBTPSAgIDggSXZsPSAgOG1zCisKKworU2VsZWN0aW5nIG9ubHkgdGhlICJUOiIgYW5kICJJOiIgbGluZXMgZnJvbSB0aGlzIChmb3IgZXhhbXBsZSwgYnkgdXNpbmcKKyJwcm9jdXNiIHRpIiksIHdlIGhhdmU6CisKK1Q6ICBCdXM9MDAgTGV2PTAwIFBybnQ9MDAgUG9ydD0wMCBDbnQ9MDAgRGV2Iz0gIDEgU3BkPTEyICBNeENoPSAyCitUOiAgQnVzPTAwIExldj0wMSBQcm50PTAxIFBvcnQ9MDAgQ250PTAxIERldiM9ICAyIFNwZD0xMiAgTXhDaD0gNAorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMSBDbHM9MDkoaHViICApIFN1Yj0wMCBQcm90PTAwIERyaXZlcj1odWIKK1Q6ICBCdXM9MDAgTGV2PTAyIFBybnQ9MDIgUG9ydD0wMCBDbnQ9MDEgRGV2Iz0gIDMgU3BkPTEuNSBNeENoPSAwCitJOiAgSWYjPSAwIEFsdD0gMCAjRVBzPSAxIENscz0wMyhISUQgICkgU3ViPTAxIFByb3Q9MDIgRHJpdmVyPW1vdXNlCitUOiAgQnVzPTAwIExldj0wMiBQcm50PTAyIFBvcnQ9MDIgQ250PTAyIERldiM9ICA0IFNwZD0xMiAgTXhDaD0gMAorSTogIElmIz0gMCBBbHQ9IDAgI0VQcz0gMyBDbHM9MDAoPmlmYyApIFN1Yj0wMCBQcm90PTAwIERyaXZlcj1zZXJpYWwKKworCitQaHlzaWNhbGx5IHRoaXMgbG9va3MgbGlrZSAob3IgY291bGQgYmUgY29udmVydGVkIHRvKToKKworICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCAgUEMvcm9vdF9odWIgKDEyKXwgICBEZXYjID0gMQorICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rICAgKG5uKSBpcyBNYnBzLgorICAgIExldmVsIDAgICAgICAgICAgIHwgIENOLjAgICB8ICBDTi4xICB8ICAgW0NOID0gY29ubmVjdG9yL3BvcnQgI10KKyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAvCisgICAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICBMZXZlbCAxICAgfCBEZXYjMjogNC1wb3J0IGh1YiAoMTIpfAorICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgfENOLjAgfENOLjEgfENOLjIgfENOLjMgfAorICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgIFwgICAgICAgICAgIFxfX19fX19fX19fX19fX19fX19fXworICAgICAgICAgICAgICAgICBcX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgTGV2ZWwgMiAgICAgIHwgRGV2IyAzOiBtb3VzZSAoMS41KXwgICAgICB8IERldiMgNDogc2VyaWFsICgxMil8CisgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKworT3IsIGluIGEgbW9yZSB0cmVlLWxpa2Ugc3RydWN0dXJlIChwb3J0cyBbQ29ubmVjdG9yc10gd2l0aG91dAorY29ubmVjdGlvbnMgY291bGQgYmUgb21pdHRlZCk6CisKK1BDOiAgRGV2IyAxLCByb290IGh1YiwgMiBwb3J0cywgMTIgTWJwcworfF8gQ04uMDogIERldiMgMiwgaHViLCA0IHBvcnRzLCAxMiBNYnBzCisgICAgIHxfIENOLjA6ICBEZXYgIzMsIG1vdXNlLCAxLjUgTWJwcworICAgICB8XyBDTi4xOgorICAgICB8XyBDTi4yOiAgRGV2ICM0LCBzZXJpYWwsIDEyIE1icHMKKyAgICAgfF8gQ04uMzoKK3xfIENOLjE6CisKKworICAgICAgICAgICAgICAgICAgICAgICAgICMjIyBFTkQgIyMjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9yaW8udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvcmlvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE3OWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvcmlvLnR4dApAQCAtMCwwICsxLDEzOCBAQAorQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEJydWNlIFRlbmlzb24KK1BvcnRpb25zIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBEYXZpZCBOZWxzb24KK1RoYW5rcyB0byBEYXZpZCBOZWxzb24gZm9yIGd1aWRhbmNlIGFuZCB0aGUgdXNhZ2Ugb2YgdGhlIHNjYW5uZXIudHh0CithbmQgc2Nhbm5lci5jIGZpbGVzIHRvIG1vZGVsIG91ciBkcml2ZXIgYW5kIHRoaXMgaW5mb3JtYXRpdmUgZmlsZS4KKworTWFyLiAyLCAyMDAwCisKK0NIQU5HRVMKKworLSBJbml0aWFsIFJldmlzaW9uCisKKworT1ZFUlZJRVcKKworVGhpcyBSRUFETUUgd2lsbCBhZGRyZXNzIGlzc3VlcyByZWdhcmRpbmcgaG93IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsCit0byBhY2Nlc3MgYSBSSU8gNTAwIG1wMyBwbGF5ZXIuICAKK0JlZm9yZSBJIGV4cGxhaW4gaG93IHRvIHVzZSB0aGlzIHRvIGFjY2VzcyB0aGUgUmlvNTAwIHBsZWFzZSBiZSB3YXJuZWQ6CisKK1cgQSBSIE4gSSBOIEc6CistLS0tLS0tLS0tLS0tLQorCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgc29mdHdhcmUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQuICBUaGUgYXV0aG9ycworYXJlIGluIG5vIHdheSByZXNwb25zaWJsZSBmb3IgYW55IGRhbWFnZSB0aGF0IG1heSBvY2N1ciwgbm8gbWF0dGVyIGhvdworaW5jb25zZXF1ZW50aWFsLgorCitJdCBzZWVtcyB0aGF0IHRoZSBSaW8gaGFzIGEgcHJvYmxlbSB3aGVuIHNlbmRpbmcgLm1wMyB3aXRoIGxvdyBiYXR0ZXJpZXMuCitJIHN1Z2dlc3Qgd2hlbiB0aGUgYmF0dGVyaWVzIGFyZSBsb3cgYW5kIHdhbnQgdG8gdHJhbnNmZXIgc3R1ZmYgdGhhdCB5b3UKK3JlcGxhY2UgaXQgd2l0aCBhIGZyZXNoIG9uZS4gSW4gbXkgY2FzZSwgd2hhdCBoYXBwZW5lZCBpcyBJIGxvc3QgdHdvIDE2a2IKK2Jsb2NrcyAodGhleSBhcmUgbm8gbG9uZ2VyIHVzYWJsZSB0byBzdG9yZSBpbmZvcm1hdGlvbiB0byBpdCkuIEJ1dCBJIGRvbid0Citrbm93IGlmIHRoYXRzIG5vcm1hbCBvciBub3QuIEl0IGNvdWxkIHNpbXBseSBiZSBhIHByb2JsZW0gd2l0aCB0aGUgZmxhc2ggCittZW1vcnkuCisKK0luIGFuIGV4dHJlbWUgY2FzZSwgSSBsZWZ0IG15IFJpbyBwbGF5aW5nIG92ZXJuaWdodCBhbmQgdGhlIGJhdHRlcmllcyB3b3JlIAorZG93biB0byBub3RoaW5nIGFuZCBhcHBlYXIgdG8gaGF2ZSBjb3JydXB0ZWQgdGhlIGZsYXNoIG1lbW9yeS4gTXkgUklPIAorbmVlZGVkIHRvIGJlIHJlcGxhY2VkIGFzIGEgcmVzdWx0LiAgRGlhbW9uZCB0ZWNoIHN1cHBvcnQgaXMgYXdhcmUgb2YgdGhlIAorcHJvYmxlbS4gIERvIE5PVCBhbGxvdyB5b3VyIGJhdHRlcmllcyB0byB3ZWFyIGRvd24gdG8gbm90aGluZyBiZWZvcmUgCitjaGFuZ2luZyB0aGVtLiAgSXQgYXBwZWFycyBSSU8gNTAwIGZpcm13YXJlIGRvZXMgbm90IGhhbmRsZSBsb3cgYmF0dGVyeSAKK3Bvd2VyIHdlbGwgYXQgYWxsLiAKKworT24gc3lzdGVtcyB3aXRoIE9IQ0kgY29udHJvbGxlcnMsIHRoZSBrZXJuZWwgT0hDSSBjb2RlIGFwcGVhcnMgdG8gaGF2ZSAKK3Bvd2VyIG9uIHByb2JsZW1zIHdpdGggc29tZSBjaGlwc2V0cy4gIElmIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIAorY29ubmVjdGluZyB0byB5b3VyIFJJTyA1MDAsIHRyeSB0dXJuaW5nIGl0IG9uIGZpcnN0IGFuZCB0aGVuIHBsdWdnaW5nIGl0IAoraW50byB0aGUgVVNCIGNhYmxlLiAgCisKK0NvbnRhY3QgaW5mb3JtYXRpb246CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgbWFpbiBwYWdlIGZvciB0aGUgcHJvamVjdCBpcyBob3N0ZWQgYXQgc291cmNlZm9yZ2UubmV0IGluIHRoZSBmb2xsb3dpbmcKKyAgIGFkZHJlc3M6IGh0dHA6Ly9yaW81MDAuc291cmNlZm9yZ2UubmV0IFlvdSBjYW4gYWxzbyBnbyB0byB0aGUgc291cmNlZm9yZ2UKKyAgIHByb2plY3QgcGFnZSBhdDogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0Lz9ncm91cF9pZD0xOTQ0IFRoZXJlIGlzIAorICAgYWxzbyBhIG1haWxpbmcgbGlzdDogcmlvNTAwLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCitBdXRob3JzOgorLS0tLS0tLQorCitNb3N0IG9mIHRoZSBjb2RlIHdhcyB3cml0dGVuIGJ5IENlc2FyIE1pcXVlbCA8bWlxdWVsQGRmLnViYS5hcj4uIEtlaXRoIAorQ2xheXRvbiA8a2NsYXl0b25AanBzLm5ldD4gaXMgaW5jaGFyZ2Ugb2YgdGhlIFBQQyBwb3J0IGFuZCBtYWtpbmcgc3VyZQordGhpbmdzIHdvcmsgdGhlcmUuIEJydWNlIFRlbmlzb24gPGJ0ZW5pc29uQGRpYmJzLm5ldD4gaXMgYWRkaW5nIHN1cHBvcnQKK2ZvciAuZm9uIGZpbGVzIGFuZCBhbHNvIGRvZXMgdGVzdGluZy4gVGhlIHByb2dyYW0gd2lsbCBtb3N0bHkgc3VyZSBiZQorcmUtd3JpdHRlbiBhbmQgUGV0ZSBJa3VzeiBhbG9uZyB3aXRoIHRoZSByZXN0IHdpbGwgcmUtZGVzaWduIGl0LiBJIHdvdWxkCithbHNvIGxpa2UgdG8gdGhhbmsgVHJpIE5ndXllbiA8dG1uXzMwMjIwMDBAaG90bWFpbC5jb20+IHdobyBwcm92aWRlZCB1c2UgCit3aXRoIHNvbWUgaW1wb3J0YW50IGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBSaW8uCisKK0FERElUSU9OQUwgSU5GT1JNQVRJT04gYW5kIFVzZXJzcGFjZSB0b29scworCitodHRwOi8vcmlvNTAwLnNvdXJjZWZvcmdlLm5ldC8KKworCitSRVFVSVJFTUVOVFMKKworQSBob3N0IHdpdGggYSBVU0IgcG9ydC4gIElkZWFsbHksIGVpdGhlciBhIFVIQ0kgKEludGVsKSBvciBPSENJCisoQ29tcGFxIGFuZCBvdGhlcnMpIGhhcmR3YXJlIHBvcnQgc2hvdWxkIHdvcmsuCisKK0EgTGludXggZGV2ZWxvcG1lbnQga2VybmVsICgyLjMueCkgd2l0aCBVU0Igc3VwcG9ydCBlbmFibGVkIG9yIGEKK2JhY2twb3J0ZWQgdmVyc2lvbiB0byBsaW51eC0yLjIueC4gIFNlZSBodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcgZm9yCittb3JlIGluZm9ybWF0aW9uIG9uIGFjY29tcGxpc2hpbmcgdGhpcy4KKworQSBMaW51eCBrZXJuZWwgd2l0aCBSSU8gNTAwIHN1cHBvcnQgZW5hYmxlZC4KKworJ2xzcGNpJyB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgVVNCIGhhcmR3YXJlCithdmFpbGFibGUgaW4geW91ciBtYWNoaW5lLgorCitDT05GSUdVUkFUSU9OCisKK1VzaW5nIGBsc3BjaSAtdmAsIGRldGVybWluZSB0aGUgdHlwZSBvZiBVU0IgaGFyZHdhcmUgYXZhaWxhYmxlLgorCisgIElmIHlvdSBzZWUgc29tZXRoaW5nIGxpa2U6CisKKyAgICBVU0IgQ29udHJvbGxlcjogLi4uLi4uCisgICAgRmxhZ3M6IC4uLi4uCisgICAgSS9PIHBvcnRzIGF0IC4uLi4KKworICBUaGVuIHlvdSBoYXZlIGEgVUhDSSBiYXNlZCBjb250cm9sbGVyLgorCisgIElmIHlvdSBzZWUgc29tZXRoaW5nIGxpa2U6CisKKyAgICAgVVNCIENvbnRyb2xsZXI6IC4uLi4uCisgICAgIEZsYWdzOiAuLi4uCisgICAgIE1lbW9yeSBhdCAuLi4uLgorCisgIFRoZW4geW91IGhhdmUgYSBPSENJIGJhc2VkIGNvbnRyb2xsZXIuCisKK1VzaW5nIGBtYWtlIG1lbnVjb25maWdgIG9yIHlvdXIgcHJlZmVycmVkIG1ldGhvZCBmb3IgY29uZmlndXJpbmcgdGhlCitrZXJuZWwsIHNlbGVjdCAnU3VwcG9ydCBmb3IgVVNCJywgJ09IQ0kvVUhDSScgZGVwZW5kaW5nIG9uIHlvdXIKK2hhcmR3YXJlIChkZXRlcm1pbmVkIGZyb20gdGhlIHN0ZXBzIGFib3ZlKSwgJ1VTQiBEaWFtb25kIFJpbzUwMCBzdXBwb3J0JywgYW5kCisnUHJlbGltaW5hcnkgVVNCIGRldmljZSBmaWxlc3lzdGVtJy4gIENvbXBpbGUgYW5kIGluc3RhbGwgdGhlIG1vZHVsZXMKKyh5b3UgbWF5IG5lZWQgdG8gZXhlY3V0ZSBgZGVwbW9kIC1hYCB0byB1cGRhdGUgdGhlIG1vZHVsZQorZGVwZW5kZW5jaWVzKS4KKworQWRkIGEgZGV2aWNlIGZvciB0aGUgVVNCIHJpbzUwMDoKKyAgYG1rbm9kIC9kZXYvdXNiL3JpbzUwMCBjIDE4MCA2NGAKKworU2V0IGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zIGZvciAvZGV2L3VzYi9yaW81MDAgKGRvbid0IGZvcmdldCBhYm91dAorZ3JvdXAgYW5kIHdvcmxkIHBlcm1pc3Npb25zKS4gIEJvdGggcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgYXJlCityZXF1aXJlZCBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKworTG9hZCB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlcyAoaWYgY29tcGlsZWQgYXMgbW9kdWxlcyk6CisKKyAgT0hDSToKKyAgICBtb2Rwcm9iZSB1c2Jjb3JlCisgICAgbW9kcHJvYmUgdXNiLW9oY2kKKyAgICBtb2Rwcm9iZSByaW81MDAKKworICBVSENJOgorICAgIG1vZHByb2JlIHVzYmNvcmUKKyAgICBtb2Rwcm9iZSB1c2ItdWhjaSAgKG9yIHVoY2kpCisgICAgbW9kcHJvYmUgcmlvNTAwCisKK1RoYXQncyBpdC4gIFRoZSBSaW81MDAgVXRpbHMgYXQ6IGh0dHA6Ly9yaW81MDAuc291cmNlZm9yZ2UubmV0IHNob3VsZAorYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHJpbzUwMC4KKworQlVHUworCitJZiB5b3UgZW5jb3VudGVyIGFueSBwcm9ibGVtcyBmZWVsIGZyZWUgdG8gZHJvcCBtZSBhbiBlbWFpbC4KKworQnJ1Y2UgVGVuaXNvbgorYnRlbmlzb25AZGliYnMubmV0CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3NlNDAxLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3NlNDAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjlkMWM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2Ivc2U0MDEudHh0CkBAIC0wLDAgKzEsNTQgQEAKK0xpbnV4IGRyaXZlciBmb3IgU0U0MDEgYmFzZWQgVVNCIGNhbWVyYXMKKworQ29weXJpZ2h0LCAyMDAxLCBKZXJvZW4gVnJlZWtlbgorCisKK0lOVFJPRFVDVElPTjoKKworVGhlIFNFNDAxIGNoaXAgaXMgdGhlIHVzZWQgaW4gbG93LWNvc3QgdXNiIHdlYmNhbXMuCitJdCBpcyBwcm9kdWNlZCBieSBFbmRwb2ludHMgSW5jLiAod3d3LmVuZHBvaW50cy5jb20pLgorSXQgaW50ZXJmYWNlcyBkaXJlY3RseSB0byBhIGNtb3MgaW1hZ2Ugc2Vuc29yIGFuZCBVU0IuIFRoZSBvbmx5IG90aGVyIG1ham9yCitwYXJ0IGluIGEgc2U0MDEgYmFzZWQgY2FtZXJhIGlzIGEgZHJhbSBjaGlwLgorCitUaGUgZm9sbG93aW5nIGNhbWVyYXMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlcjoKKworQW94IHNlNDAxIChub24tYnJhbmRlZCkgY2FtZXJhcworUGhpbGlwcyBQVkNWNjY1IFVTQiBWR0Egd2ViY2FtICdWZXN0YSBGdW4nCitLZW5zaW5ndG9uIFZpZGVvQ0FNIFBDIENhbWVyYSBNb2RlbCA2NzAxNAorS2Vuc2luZ3RvbiBWaWRlb0NBTSBQQyBDYW1lcmEgTW9kZWwgNjcwMTUKK0tlbnNpbmd0b24gVmlkZW9DQU0gUEMgQ2FtZXJhIE1vZGVsIDY3MDE2CitLZW5zaW5ndG9uIFZpZGVvQ0FNIFBDIENhbWVyYSBNb2RlbCA2NzAxNworCisKK1dIQVQgWU9VIE5FRUQ6CisKKy0JVVNCIHN1cHBvcnQKKy0JVklERU80TElOVVggc3VwcG9ydAorCitNb3JlIGluZm9ybWF0aW9uIGFib3V0IFVTQiBzdXBwb3J0IGZvciBsaW51eCBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcKKworCitNT0RVTEUgT1BUSU9OUzoKKworV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlIHlvdSBjYW4gYWxzbyB1c2UgdGhlICdmbGlja2VybGVzcycKK29wdGlvbi4gV2l0aCBpdCBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHZhbHVlcyB0aGF0IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUKK25ldCBmcmVxdWVuY3kuIFZhbGlkIG9wdGlvbnMgZm9yIHRoaXMgb3B0aW9uIGFyZSAwLCA1MCBhbmQgNjAuICgwPWRpc2FibGUsCis1MD01MGh6LCA2MD02MGh6KQorCisKK0tOT1dOIFBST0JMRU1TOgorCitUaGUgZHJpdmVyIHdvcmtzIGZpbmUgd2l0aCB0aGUgdXNiLW9oY2kgYW5kIHVoY2kgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMsCit0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbHNvIHdvcmsgd2l0aCB1c2ItdWhjaS4gQnV0IHNlbmRpbmcgbW9yZSB0aGFuIG9uZSBidWxrCit0cmFuc2ZlciBhdCBhIHRpbWUgd2l0aCB1c2ItdWhjaSBkb2Vzbid0IHdvcmsgeWV0LgorVXNlcnMgb2YgdXNiLW9oY2kgYW5kIHVoY2kgY2FuIHNhZmVseSBlbmxhcmdlIFNFNDAxX05VTVNCVUYgaW4gc2U0MDEuaCBpbgorb3JkZXIgdG8gaW5jcmVhc2UgdGhlIHRocm91Z2hwdXQgKGFuZCB0aHVzIGZyYW1lcmF0ZSkuCisKKworSEVMUDoKKworVGhlIGxhdGVzdCBpbmZvIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKK2h0dHA6Ly93d3cuY2hlbGxvLm5sL35qLnZyZWVrZW4vc2U0MDEvCitBbmQgcXVlc3Rpb25zIHRvIG1lIGNhbiBiZSBzZW5kIHRvOgorcGUxcnhxQGFtc2F0Lm9yZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9zbjljMTAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjlhMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2Ivc245YzEwMi50eHQKQEAgLTAsMCArMSw0ODAgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlciBmb3IgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEb2N1bWVudGF0aW9uIC0KKworCitJbmRleAorPT09PT0KKzEuICBDb3B5cmlnaHQKKzIuICBEaXNjbGFpbWVyCiszLiAgTGljZW5zZQorNC4gIE92ZXJ2aWV3IGFuZCBmZWF0dXJlcworNS4gIE1vZHVsZSBkZXBlbmRlbmNpZXMKKzYuICBNb2R1bGUgbG9hZGluZworNy4gIE1vZHVsZSBwYXJhbWV0ZXJzCis4LiAgT3B0aW9uYWwgZGV2aWNlIGNvbnRyb2wgdGhyb3VnaCAic3lzZnMiCis5LiAgU3VwcG9ydGVkIGRldmljZXMKKzEwLiBIb3cgdG8gYWRkIHBsdWctaW4ncyBmb3IgbmV3IGltYWdlIHNlbnNvcnMKKzExLiBOb3RlcyBmb3IgVjRMMiBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzCisxMi4gVmlkZW8gZnJhbWUgZm9ybWF0cworMTMuIENvbnRhY3QgaW5mb3JtYXRpb24KKzE0LiBDcmVkaXRzCisKKworMS4gQ29weXJpZ2h0Cis9PT09PT09PT09PT0KK0NvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4KKworCisyLiBEaXNjbGFpbWVyCis9PT09PT09PT09PT09CitTT05pWCBpcyBhIHRyYWRlbWFyayBvZiBTT05pWCBUZWNobm9sb2d5IENvbXBhbnkgTGltaXRlZCwgaW5jLgorVGhpcyBzb2Z0d2FyZSBpcyBub3Qgc3BvbnNvcmVkIG9yIGRldmVsb3BlZCBieSBTT05pWC4KKworCiszLiBMaWNlbnNlCis9PT09PT09PT09CitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKzQuIE92ZXJ2aWV3IGFuZCBmZWF0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGRyaXZlciBhdHRlbXB0cyB0byBzdXBwb3J0IHRoZSB2aWRlbyBhbmQgYXVkaW8gc3RyZWFtaW5nIGNhcGFiaWxpdGllcyBvZgordGhlIGRldmljZXMgbW91bnRpbmcgdGhlIFNPTmlYIFNOOUMxMDEsIFNOOUMxMDIgYW5kIFNOOUMxMDMgUEMgQ2FtZXJhCitDb250cm9sbGVycy4KKworSXQncyB3b3J0aCB0byBub3RlIHRoYXQgU09OaVggaGFzIG5ldmVyIGNvbGxhYm9yYXRlZCB3aXRoIHRoZSBhdXRob3IgZHVyaW5nIHRoZQorZGV2ZWxvcG1lbnQgb2YgdGhpcyBwcm9qZWN0LCBkZXNwaXRlIHNldmVyYWwgcmVxdWVzdHMgZm9yIGVub3VnaCBkZXRhaWxlZAorc3BlY2lmaWNhdGlvbnMgb2YgdGhlIHJlZ2lzdGVyIHRhYmxlcywgY29tcHJlc3Npb24gZW5naW5lIGFuZCB2aWRlbyBkYXRhIGZvcm1hdAorb2YgdGhlIGFib3ZlIGNoaXBzLiBOZXZlcnRoZWxlc3MsIHRoZXNlIGluZm9ybWF0aW9ucyBhcmUgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwKK2JlY291c2UgYWxsIHRoZSBhc3BlY3RzIHJlbGF0ZWQgdG8gdGhlc2UgY2hpcHMgYXJlIGtub3duIGFuZCBoYXZlIGJlZW4KK2Rlc2NyaWJlZCBpbiBkZXRhaWwgaW4gdGhpcyBkb2N1bWVudGF0aW9uLgorCitUaGUgZHJpdmVyIHJlbGllcyBvbiB0aGUgVmlkZW80TGludXgyIGFuZCBVU0IgY29yZSBtb2R1bGVzLiBJdCBoYXMgYmVlbgorZGVzaWduZWQgdG8gcnVuIHByb3Blcmx5IG9uIFNNUCBzeXN0ZW1zIGFzIHdlbGwuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgU045QzEweCBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgVVJMOgoraHR0cDovL3d3dy5saW51eC1wcm9qZWN0cy5vcmcvCisKK1NvbWUgb2YgdGhlIGZlYXR1cmVzIG9mIHRoZSBkcml2ZXIgYXJlOgorCistIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoZSBWaWRlbzRMaW51eDIgQVBJIChzZWUgYWxzbyAiTm90ZXMgZm9yIFY0TDIKKyAgYXBwbGljYXRpb24gZGV2ZWxvcGVycyIgcGFyYWdyYXBoKTsKKy0gYXZhaWxhYmxlIG1tYXAgb3IgcmVhZC9wb2xsIG1ldGhvZHMgZm9yIHZpZGVvIHN0cmVhbWluZyB0aHJvdWdoIGlzb2Nocm9ub3VzCisgIGRhdGEgdHJhbnNmZXJzOworLSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIGltYWdlIHNlbnNvcjsKKy0gc3VwcG9ydCBmb3IgYW55IHdpbmRvdyByZXNvbHV0aW9ucyBhbmQgb3B0aW9uYWwgcGFubmluZyB3aXRoaW4gdGhlIG1heGltdW0KKyAgcGl4ZWwgYXJlYSBvZiBpbWFnZSBzZW5zb3I7CistIGltYWdlIGRvd25zY2FsaW5nIHdpdGggYXJiaXRyYXJ5IHNjYWxpbmcgZmFjdG9ycyBmcm9tIDEsIDIgYW5kIDQgaW4gYm90aAorICBkaXJlY3Rpb25zIChzZWUgIk5vdGVzIGZvciBWNEwyIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMiIHBhcmFncmFwaCk7CistIHR3byBkaWZmZXJlbnQgdmlkZW8gZm9ybWF0cyBmb3IgdW5jb21wcmVzc2VkIG9yIGNvbXByZXNzZWQgZGF0YSBpbiBsb3cgb3IKKyAgaGlnaCBjb21wcmVzc2lvbiBxdWFsaXR5IChzZWUgYWxzbyAiTm90ZXMgZm9yIFY0TDIgYXBwbGljYXRpb24gZGV2ZWxvcGVycyIKKyAgYW5kICJWaWRlbyBmcmFtZSBmb3JtYXRzIiBwYXJhZ3JhcGhzKTsKKy0gZnVsbCBzdXBwb3J0IGZvciB0aGUgY2FwYWJpbGl0aWVzIG9mIG1hbnkgb2YgdGhlIHBvc3NpYmxlIGltYWdlIHNlbnNvcnMgdGhhdAorICBjYW4gYmUgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IGJyaWRnZXMsIGluY2x1ZGluZywgZm9yIGlzdGFuY2UsIHJlZCwgZ3JlZW4sCisgIGJsdWUgYW5kIGdsb2JhbCBnYWluIGFkanVzdG1lbnRzIGFuZCBleHBvc3VyZSAoc2VlICJTdXBwb3J0ZWQgZGV2aWNlcyIKKyAgcGFyYWdyYXBoIGZvciBkZXRhaWxzKTsKKy0gdXNlIG9mIGRlZmF1bHQgY29sb3Igc2V0dGluZ3MgZm9yIHN1bmxpZ2h0IGNvbmRpdGlvbnM7CistIGR5bmFtaWMgSS9PIGludGVyZmFjZSBmb3IgYm90aCBTTjlDMTB4IGFuZCBpbWFnZSBzZW5zb3IgY29udHJvbCBhbmQKKyAgbW9uaXRvcmluZyAoc2VlICJPcHRpb25hbCBkZXZpY2UgY29udHJvbCB0aHJvdWdoICdzeXNmcyciIHBhcmFncmFwaCk7CistIGR5bmFtaWMgZHJpdmVyIGNvbnRyb2wgdGhhbmtzIHRvIHZhcmlvdXMgbW9kdWxlIHBhcmFtZXRlcnMgKHNlZSAiTW9kdWxlCisgIHBhcmFtZXRlcnMiIHBhcmFncmFwaCk7CistIHVwIHRvIDY0IGNhbWVyYXMgY2FuIGJlIGhhbmRsZWQgYXQgdGhlIHNhbWUgdGltZTsgdGhleSBjYW4gYmUgY29ubmVjdGVkIGFuZAorICBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgaG9zdCBtYW55IHRpbWVzIHdpdGhvdXQgdHVybmluZyBvZmYgdGhlIGNvbXB1dGVyLCBpZgorICB5b3VyIHN5c3RlbSBzdXBwb3J0cyBob3RwbHVnZ2luZzsKKy0gbm8ga25vd24gYnVncy4KKworCis1LiBNb2R1bGUgZGVwZW5kZW5jaWVzCis9PT09PT09PT09PT09PT09PT09PT09CitGb3IgaXQgdG8gd29yayBwcm9wZXJseSwgdGhlIGRyaXZlciBuZWVkcyBrZXJuZWwgc3VwcG9ydCBmb3IgVmlkZW80TGludXggYW5kCitVU0IuCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBtdXN0IGJlIGVuYWJsZWQgYW5kCitjb3JyZXNwb25kaW5nIG1vZHVsZXMgbXVzdCBiZSBjb21waWxlZDoKKworCSMgTXVsdGltZWRpYSBkZXZpY2VzCisJIworCUNPTkZJR19WSURFT19ERVY9bQorCisJIyBVU0Igc3VwcG9ydAorCSMKKwlDT05GSUdfVVNCPW0KKworSW4gYWRkaXRpb24sIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgYmVpbmcgdXNlZCwgdGhlIG1vZHVsZXMgYmVsb3cgYXJlCituZWNlc3Nhcnk6CisKKwkjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworCSMKKwlDT05GSUdfVVNCX0VIQ0lfSENEPW0KKwlDT05GSUdfVVNCX1VIQ0lfSENEPW0KKwlDT05GSUdfVVNCX09IQ0lfSENEPW0KKworQW5kIGZpbmFsbHk6CisKKwkjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKwkjCisJQ09ORklHX1VTQl9TTjlDMTAyPW0KKworCis2LiBNb2R1bGUgbG9hZGluZworPT09PT09PT09PT09PT09PT0KK1RvIHVzZSB0aGUgZHJpdmVyLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9hZCB0aGUgInNuOWMxMDIiIG1vZHVsZSBpbnRvIG1lbW9yeQorYWZ0ZXIgZXZlcnkgb3RoZXIgbW9kdWxlIHJlcXVpcmVkOiAidmlkZW9kZXYiLCAidXNiY29yZSIgYW5kLCBkZXBlbmRpbmcgb24KK3RoZSBVU0IgaG9zdCBjb250cm9sbGVyIHlvdSBoYXZlLCAiZWhjaS1oY2QiLCAidWhjaS1oY2QiIG9yICJvaGNpLWhjZCIuCisKK0xvYWRpbmcgY2FuIGJlIGRvbmUgYXMgc2hvd24gYmVsb3c6CisKKwlbcm9vdEBsb2NhbGhvc3QgaG9tZV0jIG1vZHByb2JlIHNuOWMxMDIKKworQXQgdGhpcyBwb2ludCB0aGUgZGV2aWNlcyBzaG91bGQgYmUgcmVjb2duaXplZC4gWW91IGNhbiBpbnZva2UgImRtZXNnIiB0bworYW5hbHl6ZSBrZXJuZWwgbWVzc2FnZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBsb2FkaW5nIHByb2Nlc3MgaGFzIGdvbmUgd2VsbDoKKworCVt1c2VyQGxvY2FsaG9zdCBob21lXSQgZG1lc2cKKworCis3LiBNb2R1bGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT0KK01vZHVsZSBwYXJhbWV0ZXJzIGFyZSBsaXN0ZWQgYmVsb3c6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgdmlkZW9fbnIKK1R5cGU6ICAgICAgICAgICBpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDY0KQorU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBTcGVjaWZ5IFY0TDIgbWlub3IgbW9kZSBudW1iZXI6CisgICAgICAgICAgICAgICAgLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgbiA9IHVzZSBtaW5vciBudW1iZXIgbgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSB1cCB0byA2NCBjYW1lcmFzIHRoaXMgd2F5LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIHZpZGVvX25yPS0xLDIsLTEgd291bGQgYXNzaWduIG1pbm9yIG51bWJlciAyIHRvIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICByZWNvZ25pemVkIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCBvbmUgYW5kIGZvciBldmVyeQorICAgICAgICAgICAgICAgIG90aGVyIGNhbWVyYS4KK0RlZmF1bHQ6ICAgICAgICAtMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGZvcmNlX211bm1hcDsKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSA2NCkKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBGb3JjZSB0aGUgYXBwbGljYXRpb24gdG8gdW5tYXAgcHJldmlvdXNseSBtYXBwZWQgYnVmZmVyIG1lbW9yeQorICAgICAgICAgICAgICAgIGJlZm9yZSBjYWxsaW5nIGFueSBWSURJT0NfU19DUk9QIG9yIFZJRElPQ19TX0ZNVCBpb2N0bCdzLiBOb3QKKyAgICAgICAgICAgICAgICBhbGwgdGhlIGFwcGxpY2F0aW9ucyBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gVGhpcyBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBmb3IgZWFjaCBkZXRlY3RlZCBjYW1lcmEuCisgICAgICAgICAgICAgICAgMCA9IGRvIG5vdCBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIgorICAgICAgICAgICAgICAgIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCitEZWZhdWx0OiAgICAgICAgMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGRlYnVnCitUeXBlOiAgICAgICAgICAgaW50CitTeW50YXg6ICAgICAgICAgPG4+IAorRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6CisgICAgICAgICAgICAgICAgMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpCisgICAgICAgICAgICAgICAgMSA9IGNyaXRpY2FsIGVycm9ycworICAgICAgICAgICAgICAgIDIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKyAgICAgICAgICAgICAgICAzID0gbW9yZSB2ZXJib3NlIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5IG9uZSBkZXZpY2UKKyAgICAgICAgICAgICAgICBpcyB1c2VkLiBJdCBhbHNvIHNob3dzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgaGFyZHdhcmUgYmVpbmcgZGV0ZWN0ZWQuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGF0CisgICAgICAgICAgICAgICAgcnVudGltZSB0aGFua3MgdG8gdGhlIC9zeXMgZmlsZXN5c3RlbS4KK0RlZmF1bHQ6ICAgICAgICAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworOC4gT3B0aW9uYWwgZGV2aWNlIGNvbnRyb2wgdGhyb3VnaCAic3lzZnMiIFsxXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJdCBpcyBwb3NzaWJsZSB0byByZWFkIGFuZCB3cml0ZSBib3RoIHRoZSBTTjlDMTB4IGFuZCB0aGUgaW1hZ2Ugc2Vuc29yCityZWdpc3RlcnMgYnkgdXNpbmcgdGhlICJzeXNmcyIgZmlsZXN5c3RlbSBpbnRlcmZhY2UuCisKK0V2ZXJ5IHRpbWUgYSBzdXBwb3J0ZWQgZGV2aWNlIGlzIHJlY29nbml6ZWQsIGEgd3JpdGUtb25seSBmaWxlIG5hbWVkICJncmVlbiIgaXMKK2NyZWF0ZWQgaW4gdGhlIC9zeXMvY2xhc3MvdmlkZW80bGludXgvdmlkZW9YIGRpcmVjdG9yeS4gWW91IGNhbiBzZXQgdGhlIGdyZWVuCitjaGFubmVsJ3MgZ2FpbiBieSB3cml0aW5nIHRoZSBkZXNpcmVkIHZhbHVlIHRvIGl0LiBUaGUgdmFsdWUgbWF5IHJhbmdlIGZyb20gMAordG8gMTUgZm9yIFNOOUMxMDEgb3IgU045QzEwMiBicmlkZ2VzLCBmcm9tIDAgdG8gMTI3IGZvciBTTjlDMTAzIGJyaWRnZXMuCitTaW1pbGFybHksIG9ubHkgZm9yIFNOOUMxMDMgY29udHJvbGxlcnMsIGJsdWUgYW5kIHJlZCBnYWluIGNvbnRyb2wgZmlsZXMgYXJlCithdmFpbGFibGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBmb3Igd2hpY2ggYWNjZXB0ZWQgdmFsdWVzIG1heSByYW5nZSBmcm9tIDAgdG8KKzEyNy4KKworVGhlcmUgYXJlIG90aGVyIGZvdXIgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGFib3ZlIGZvciBlYWNoIHJlZ2lzdGVyZWQgY2FtZXJhOgorInJlZyIsICJ2YWwiLCAiaTJjX3JlZyIgYW5kICJpMmNfdmFsIi4gVGhlIGZpcnN0IHR3byBmaWxlcyBjb250cm9sIHRoZQorU045QzEweCBicmlkZ2UsIHdoaWxlIHRoZSBvdGhlciB0d28gY29udHJvbCB0aGUgc2Vuc29yIGNoaXAuICJyZWciIGFuZAorImkyY19yZWciIGhvbGQgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCByZWdpc3RlciBpbmRleCB3aGVyZSB0aGUgZm9sbG93aW5nCityZWFkaW5nL3dyaXRpbmcgb3BlcmF0aW9ucyBhcmUgYWRkcmVzc2VkIGF0IHRocm91Z2ggInZhbCIgYW5kICJpMmNfdmFsIi4gVGhlaXIKK3VzZSBpcyBub3QgaW50ZW5kZWQgZm9yIGVuZC11c2Vycy4gTm90ZSB0aGF0ICJpMmNfcmVnIiBhbmQgImkyY192YWwiIHdpbGwgbm90CitiZSBjcmVhdGVkIGlmIHRoZSBzZW5zb3IgZG9lcyBub3QgYWN0dWFsbHkgc3VwcG9ydCB0aGUgc3RhbmRhcmQgSTJDIHByb3RvY29sIG9yCitpdHMgcmVnaXN0ZXJzIGFyZSBub3QgOC1iaXQgbG9uZy4gQWxzbywgcmVtZW1iZXIgdGhhdCB5b3UgbXVzdCBiZSBsb2dnZWQgaW4gYXMKK3Jvb3QgYmVmb3JlIHdyaXRpbmcgdG8gdGhlbS4KKworQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB3ZSB3ZXJlIHRvIHdhbnQgdG8gcmVhZCB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoZQorcmVnaXN0ZXIgbnVtYmVyIDEgb2YgdGhlIHNlbnNvciByZWdpc3RlciB0YWJsZSAtIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHByb2R1Y3QKK2lkZW50aWZpZXIgLSBvZiB0aGUgY2FtZXJhIHJlZ2lzdGVyZWQgYXMgIi9kZXYvdmlkZW8wIjoKKworCVtyb290QGxvY2FsaG9zdCAjXSBjZCAvc3lzL2NsYXNzL3ZpZGVvNGxpbnV4L3ZpZGVvMAorCVtyb290QGxvY2FsaG9zdCAjXSBlY2hvIDEgPiBpMmNfcmVnCisJW3Jvb3RAbG9jYWxob3N0ICNdIGNhdCBpMmNfdmFsCisKK05vdGUgdGhhdCAiY2F0IiB3aWxsIGZhaWwgaWYgc2Vuc29yIHJlZ2lzdGVycyBjYW5ub3QgYmUgcmVhZC4KKworTm93IGxldCdzIHNldCB0aGUgZ3JlZW4gZ2FpbidzIHJlZ2lzdGVyIG9mIHRoZSBTTjlDMTAxIG9yIFNOOUMxMDIgY2hpcHMgdG8gMjoKKworCVtyb290QGxvY2FsaG9zdCAjXSBlY2hvIDB4MTEgPiByZWcKKwlbcm9vdEBsb2NhbGhvc3QgI10gZWNobyAyID4gdmFsCisKK05vdGUgdGhhdCB0aGUgU045QzEweCBhbHdheXMgcmV0dXJucyAwIHdoZW4gc29tZSBvZiBpdHMgcmVnaXN0ZXJzIGFyZSByZWFkLgorVG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLCBhbGwgdGhlIEkvTyBhY2Nlc3NlcyB0byB0aGUgYWJvdmUgZmlsZXMgYXJlCitzZXJpYWxpemVkLgorCitUaGUgc3lzZnMgaW50ZXJmYWNlIGFsc28gcHJvdmlkZXMgdGhlICJmcmFtZV9oZWFkZXIiIGVudHJ5LCB3aGljaCBleHBvcnRzIHRoZQorZnJhbWUgaGVhZGVyIG9mIHRoZSBtb3N0IHJlY2VudCByZXF1ZXN0ZWQgYW5kIGNhcHR1cmVkIHZpZGVvIGZyYW1lLiBUaGUgaGVhZGVyCitpcyAxMi1ieXRlcyBsb25nIGFuZCBpcyBhcHBlbmRlZCB0byBldmVyeSB2aWRlbyBmcmFtZSBieSB0aGUgU045QzEweAorY29udHJvbGxlcnMuIEFzIGFuIGV4YW1wbGUsIHRoaXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCBieSB0aGUgdXNlcgorYXBwbGljYXRpb24gZm9yIGltcGxlbWVudGluZyBhdXRvLWV4cG9zdXJlIGZlYXR1cmVzIHZpYSBzb2Z0d2FyZS4gCisKK1RoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSBmcmFtZSBoZWFkZXI6CisKK0J5dGUgIyAgVmFsdWUgICAgICAgICBEZXNjcmlwdGlvbgorLS0tLS0tICAtLS0tLSAgICAgICAgIC0tLS0tLS0tLS0tCisweDAwICAgIDB4RkYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCisweDAxICAgIDB4RkYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCisweDAyICAgIDB4MDAgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCisweDAzICAgIDB4QzQgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCisweDA0ICAgIDB4QzQgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCisweDA1ICAgIDB4OTYgICAgICAgICAgRnJhbWUgc3luY2hyb25pc2F0aW9uIHBhdHRlcm4uCisweDA2ICAgIDB4MDAgb3IgMHgwMSAgVW5rbm93biBtZWFuaW5nLiBUaGUgZXhhY3QgdmFsdWUgZGVwZW5kcyBvbiB0aGUgY2hpcC4KKzB4MDcgICAgMHhYWCAgICAgICAgICBWYXJpYWJsZSB2YWx1ZSwgd2hvc2UgYml0cyBhcmUgZmYwMHV6emMsIHdoZXJlIGZmIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBjb3VudGVyLCB1IGlzIHVua25vd24sIHp6IGlzIGEgc2l6ZSBpbmRpY2F0b3IKKyAgICAgICAgICAgICAgICAgICAgICAoMDAgPSBWR0EsIDAxID0gU0lGLCAxMCA9IFFTSUYpIGFuZCBjIHN0YW5kcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAiY29tcHJlc3Npb24gZW5hYmxlZCIgKDEgPSB5ZXMsIDAgPSBubykuCisweDA4ICAgIDB4WFggICAgICAgICAgQnJpZ2h0bmVzcyBzdW0gaW5zaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAobG93LWJ5dGUpLgorMHgwOSAgICAweFhYICAgICAgICAgIEJyaWdodG5lc3Mgc3VtIGluc2lkZSBBdXRvLUV4cG9zdXJlIGFyZWEgKGhpZ2gtYnl0ZSkuCisgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgcHVyZSB3aGl0ZSBpbWFnZSwgdGhpcyBudW1iZXIgd2lsbCBiZSBlcXVhbCB0byA1MDAKKyAgICAgICAgICAgICAgICAgICAgICB0aW1lcyB0aGUgYXJlYSBvZiB0aGUgc3BlY2lmaWVkIEFFIGFyZWEuIEZvciBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFyZSBub3QgcHVyZSB3aGl0ZSwgdGhlIHZhbHVlIHNjYWxlcyBkb3duIGFjY29yZGluZworICAgICAgICAgICAgICAgICAgICAgIHRvIHJlbGF0aXZlIHdoaXRlbmVzcy4KKzB4MEEgICAgMHhYWCAgICAgICAgICBCcmlnaHRuZXNzIHN1bSBvdXRzaWRlIEF1dG8tRXhwb3N1cmUgYXJlYSAobG93LWJ5dGUpLgorMHgwQiAgICAweFhYICAgICAgICAgIEJyaWdodG5lc3Mgc3VtIG91dHNpZGUgQXV0by1FeHBvc3VyZSBhcmVhIChoaWdoLWJ5dGUpLgorICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHB1cmUgd2hpdGUgaW1hZ2UsIHRoaXMgbnVtYmVyIHdpbGwgYmUgZXF1YWwgdG8gMTI1CisgICAgICAgICAgICAgICAgICAgICAgdGltZXMgdGhlIGFyZWEgb3V0c2lkZSBvZiB0aGUgc3BlY2lmaWVkIEFFIGFyZWEuIEZvcgorICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyB0aGF0IGFyZSBub3QgcHVyZSB3aGl0ZSwgdGhlIHZhbHVlIHNjYWxlcyBkb3duCisgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHJlbGF0aXZlIHdoaXRlbmVzcy4KKworVGhlIEFFIGFyZWEgKHN4LCBzeSwgZXgsIGV5KSBpbiB0aGUgYWN0aXZlIHdpbmRvdyBjYW4gYmUgc2V0IGJ5IHByb2dyYW1taW5nIHRoZQorcmVnaXN0ZXJzIDB4MWMsIDB4MWQsIDB4MWUgYW5kIDB4MWYgb2YgdGhlIFNOOUMxMHggY29udHJvbGxlcnMsIHdoZXJlIG9uZSB1bml0Citjb3JyZXNwb25kcyB0byAzMiBwaXhlbHMuCisKK1sxXSBUaGUgZnJhbWUgaGVhZGVyIGhhcyBiZWVuIGRvY3VtZW50ZWQgYnkgQmVydHJpayBTaWtrZW4uCisKKworOS4gU3VwcG9ydGVkIGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09CitOb25lIG9mIHRoZSBuYW1lcyBvZiB0aGUgY29tcGFuaWVzIGFzIHdlbGwgYXMgdGhlaXIgcHJvZHVjdHMgd2lsbCBiZSBtZW50aW9uZWQKK2hlcmUuIFRoZXkgaGF2ZSBuZXZlciBjb2xsYWJvcmF0ZWQgd2l0aCB0aGUgYXV0aG9yLCBzbyBubyBhZHZlcnRpc2luZy4KKworRnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBhIGRyaXZlciwgd2hhdCB1bmFtYmlndW91c2x5IGlkZW50aWZ5IGEgZGV2aWNlIGFyZQoraXRzIHZlbmRvciBhbmQgcHJvZHVjdCBVU0IgaWRlbnRpZmllcnMuIEJlbG93IGlzIGEgbGlzdCBvZiBrbm93biBpZGVudGlmaWVycyBvZgorZGV2aWNlcyBtb3VudGluZyB0aGUgU045QzEweCBQQyBjYW1lcmEgY29udHJvbGxlcnM6CisKK1ZlbmRvciBJRCAgUHJvZHVjdCBJRAorLS0tLS0tLS0tICAtLS0tLS0tLS0tCisweDBjNDUgICAgIDB4NjAwMQorMHgwYzQ1ICAgICAweDYwMDUKKzB4MGM0NSAgICAgMHg2MDA5CisweDBjNDUgICAgIDB4NjAwZAorMHgwYzQ1ICAgICAweDYwMjQKKzB4MGM0NSAgICAgMHg2MDI1CisweDBjNDUgICAgIDB4NjAyOAorMHgwYzQ1ICAgICAweDYwMjkKKzB4MGM0NSAgICAgMHg2MDJhCisweDBjNDUgICAgIDB4NjAyYgorMHgwYzQ1ICAgICAweDYwMmMKKzB4MGM0NSAgICAgMHg2MDMwCisweDBjNDUgICAgIDB4NjA4MAorMHgwYzQ1ICAgICAweDYwODIKKzB4MGM0NSAgICAgMHg2MDgzCisweDBjNDUgICAgIDB4NjA4OAorMHgwYzQ1ICAgICAweDYwOGEKKzB4MGM0NSAgICAgMHg2MDhiCisweDBjNDUgICAgIDB4NjA4YworMHgwYzQ1ICAgICAweDYwOGUKKzB4MGM0NSAgICAgMHg2MDhmCisweDBjNDUgICAgIDB4NjBhMAorMHgwYzQ1ICAgICAweDYwYTIKKzB4MGM0NSAgICAgMHg2MGEzCisweDBjNDUgICAgIDB4NjBhOAorMHgwYzQ1ICAgICAweDYwYWEKKzB4MGM0NSAgICAgMHg2MGFiCisweDBjNDUgICAgIDB4NjBhYworMHgwYzQ1ICAgICAweDYwYWUKKzB4MGM0NSAgICAgMHg2MGFmCisweDBjNDUgICAgIDB4NjBiMAorMHgwYzQ1ICAgICAweDYwYjIKKzB4MGM0NSAgICAgMHg2MGIzCisweDBjNDUgICAgIDB4NjBiOAorMHgwYzQ1ICAgICAweDYwYmEKKzB4MGM0NSAgICAgMHg2MGJiCisweDBjNDUgICAgIDB4NjBiYworMHgwYzQ1ICAgICAweDYwYmUKKworVGhlIGxpc3QgYWJvdmUgZG9lcyBub3QgaW1wbHkgdGhhdCBhbGwgdGhvc2UgZGV2aWNlcyB3b3JrIHdpdGggdGhpcyBkcml2ZXI6IHVwCit1bnRpbCBub3cgb25seSB0aGUgb25lcyB0aGF0IG1vdW50IHRoZSBmb2xsb3dpbmcgaW1hZ2Ugc2Vuc29ycyBhcmUgc3VwcG9ydGVkOwora2VybmVsIG1lc3NhZ2VzIHdpbGwgYWx3YXlzIHRlbGwgeW91IHdoZXRoZXIgdGhpcyBpcyB0aGUgY2FzZToKKworTW9kZWwgICAgICAgTWFudWZhY3R1cmVyCistLS0tLSAgICAgICAtLS0tLS0tLS0tLS0KK0hWNzEzMUQgICAgIEh5bml4IFNlbWljb25kdWN0b3IsIEluYy4KK01JLTAzNDMgICAgIE1pY3JvbiBUZWNobm9sb2d5LCBJbmMuCitQQVMxMDZCICAgICBQaXhBcnQgSW1hZ2luZywgSW5jLgorUEFTMjAyQkNCICAgUGl4QXJ0IEltYWdpbmcsIEluYy4KK1RBUzUxMTBDMUIgIFRhaXdhbiBBZHZhbmNlZCBTZW5zb3IgQ29ycG9yYXRpb24KK1RBUzUxMzBEMUIgIFRhaXdhbiBBZHZhbmNlZCBTZW5zb3IgQ29ycG9yYXRpb24KKworQWxsIHRoZSBhdmFpbGFibGUgY29udHJvbCBzZXR0aW5ncyBvZiBlYWNoIGltYWdlIHNlbnNvciBhcmUgc3VwcG9ydGVkIHRocm91Z2gKK3RoZSBWNEwyIGludGVyZmFjZS4KKworRG9uYXRpb25zIG9mIG5ldyBtb2RlbHMgZm9yIGZ1cnRoZXIgdGVzdGluZyBhbmQgc3VwcG9ydCB3b3VsZCBiZSBtdWNoCithcHByZWNpYXRlZC4gTm9uLWF2YWlsYWJsZSBoYXJkd2FyZSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGF1dGhvciBvZiB0aGlzCitkcml2ZXIuCisKKworMTAuIEhvdyB0byBhZGQgcGx1Zy1pbidzIGZvciBuZXcgaW1hZ2Ugc2Vuc29ycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSXQgc2hvdWxkIGJlIGVhc3kgdG8gd3JpdGUgcGx1Zy1pbidzIGZvciBuZXcgc2Vuc29ycyBieSB1c2luZyB0aGUgc21hbGwgQVBJCit0aGF0IGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgcHVycG9zZSwgd2hpY2ggaXMgcHJlc2VudCBpbiAic245YzEwMl9zZW5zb3IuaCIKKyhkb2N1bWVudGF0aW9uIGlzIGluY2x1ZGVkIHRoZXJlKS4gQXMgYW4gZXhhbXBsZSwgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4KKyJzbjljMTAyX3BhczEwNmIuYyIsIHdoaWNoIHVzZXMgdGhlIG1lbnRpb25lZCBpbnRlcmZhY2UuCisKK0F0IHRoZSBtb21lbnQsIHBvc3NpYmxlIHVuc3VwcG9ydGVkIGltYWdlIHNlbnNvcnMgYXJlOiBDSVMtVkYxMCAoVkdBKSwKK09WNzYyMCAoVkdBKSwgT1Y3NjMwIChWR0EpLgorCisKKzExLiBOb3RlcyBmb3IgVjRMMiBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBkcml2ZXIgZm9sbG93cyB0aGUgVjRMMiBBUEkgc3BlY2lmaWNhdGlvbnMuIEluIHBhcnRpY3VsYXIsIGl0IGVuZm9yY2VzIHR3bworcnVsZXM6CisKKy0gZXhhY3RseSBvbmUgSS9PIG1ldGhvZCwgZWl0aGVyICJtbWFwIiBvciAicmVhZCIsIGlzIGFzc29jaWF0ZWQgd2l0aCBlYWNoCitmaWxlIGRlc2NyaXB0b3IuIE9uY2UgaXQgaXMgc2VsZWN0ZWQsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGNsb3NlIGFuZCByZW9wZW4gdGhlCitkZXZpY2UgdG8gc3dpdGNoIHRvIHRoZSBvdGhlciBJL08gbWV0aG9kOworCistIGFsdGhvdWdoIGl0IGlzIG5vdCBtYW5kYXRvcnksIHByZXZpb3VzbHkgbWFwcGVkIGJ1ZmZlciBtZW1vcnkgc2hvdWxkIGFsd2F5cworYmUgdW5tYXBwZWQgYmVmb3JlIGNhbGxpbmcgYW55ICJWSURJT0NfU19DUk9QIiBvciAiVklESU9DX1NfRk1UIiBpb2N0bCdzLgorVGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgYmVmb3JlIHdpbGwgYmUgYWxsb2NhdGVkIGFnYWluIHRvIG1hdGNoIHRoZSBzaXplCitvZiB0aGUgbmV3IHZpZGVvIGZyYW1lcywgc28geW91IGhhdmUgdG8gbWFwIHRoZSBidWZmZXJzIGFnYWluIGJlZm9yZSBhbnkgSS9PCithdHRlbXB0cyBvbiB0aGVtLgorCitDb25zaXN0ZW50bHkgd2l0aCB0aGUgaGFyZHdhcmUgbGltaXRzLCB0aGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIGltYWdlCitkb3duc2NhbGluZyB3aXRoIGFyYml0cmFyeSBzY2FsaW5nIGZhY3RvcnMgZnJvbSAxLCAyIGFuZCA0IGluIGJvdGggZGlyZWN0aW9ucy4KK0hvd2V2ZXIsIHRoZSBWNEwyIEFQSSBzcGVjaWZpY2F0aW9ucyBkb24ndCBjb3JyZWN0bHkgZGVmaW5lIGhvdyB0aGUgc2NhbGluZworZmFjdG9yIGNhbiBiZSBjaG9zZW4gYXJiaXRyYXJpbHkgYnkgdGhlICJuZWdvdGlhdGlvbiIgb2YgdGhlICJzb3VyY2UiIGFuZAorInRhcmdldCIgcmVjdGFuZ2xlcy4gVG8gd29yayBhcm91bmQgdGhpcyBmbGF3LCB3ZSBoYXZlIGFkZGVkIHRoZSBjb252ZW50aW9uCit0aGF0LCBkdXJpbmcgdGhlIG5lZ290aWF0aW9uLCB3aGVuZXZlciB0aGUgIlZJRElPQ19TX0NST1AiIGlvY3RsIGlzIGlzc3VlZCwgdGhlCitzY2FsaW5nIGZhY3RvciBpcyByZXN0b3JlZCB0byAxLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0d28gZGlmZmVyZW50IHZpZGVvIGZvcm1hdHM6IHRoZSBmaXJzdCBvbmUgaXMgdGhlICI4LWJpdAorU2VxdWVudGlhbCBCYXllciIgZm9ybWF0IGFuZCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdW5jb21wcmVzc2VkIHZpZGVvIGRhdGEKK2Zyb20gdGhlIGRldmljZSB0aHJvdWdoIHRoZSBjdXJyZW50IEkvTyBtZXRob2QsIHdoaWxlIHRoZSBzZWNvbmQgb25lIHByb3ZpZGVzCisicmF3IiBjb21wcmVzc2VkIHZpZGVvIGRhdGEgKHdpdGhvdXQgZnJhbWUgaGVhZGVycyBub3QgcmVsYXRlZCB0byB0aGUKK2NvbXByZXNzZWQgZGF0YSkuIFRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IG1heSB2YXJ5IGZyb20gMCB0byAxIGFuZCBjYW4gYmUKK3NlbGVjdGVkIG9yIHF1ZXJpZWQgdGhhbmtzIHRvIHRoZSBWSURJT0NfU19KUEVHQ09NUCBhbmQgVklESU9DX0dfSlBFR0NPTVAgVjRMMgoraW9jdGwncy4gRm9yIG1heGltdW0gZmxleGliaWxpdHksIGJvdGggdGhlIGRlZmF1bHQgYWN0aXZlIHZpZGVvIGZvcm1hdCBhbmQgdGhlCitkZWZhdWx0IGNvbXByZXNzaW9uIHF1YWxpdHkgZGVwZW5kIG9uIGhvdyB0aGUgaW1hZ2Ugc2Vuc29yIGJlaW5nIHVzZWQgaXMKK2luaXRpYWxpemVkIChhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIEFQSSBmb3IgdGhlIGltYWdlIHNlbnNvcnMKK3N1cHBsaWVkIGJ5IHRoaXMgZHJpdmVyKS4KKworCisxMi4gVmlkZW8gZnJhbWUgZm9ybWF0cyBbMV0KKz09PT09PT09PT09PT09PT09PT09PT09CitUaGUgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgY2FuIHNlbmQgaW1hZ2VzIGluIHR3byBwb3NzaWJsZSB2aWRlbworZm9ybWF0cyBvdmVyIHRoZSBVU0I6IGVpdGhlciBuYXRpdmUgIlNlcXVlbnRpYWwgUkdCIEJheWVyIiBvciBIdWZmbWFuCitjb21wcmVzc2VkLiBUaGUgbGF0dGVyIGlzIHVzZWQgdG8gYWNoaWV2ZSBoaWdoIGZyYW1lIHJhdGVzLiBUaGUgY3VycmVudCB2aWRlbworZm9ybWF0IG1heSBiZSBzZWxlY3RlZCBvciBxdWVyaWVkIGZyb20gdGhlIHVzZXIgYXBwbGljYXRpb24gYnkgY2FsbGluZyB0aGUKK1ZJRElPQ19TX0ZNVCBvciBWSURJT0NfR19GTVQgaW9jdGwncywgYXMgZGVzY3JpYmVkIGluIHRoZSBWNEwyIEFQSQorc3BlY2lmaWNhdGlvbnMuCisKK1RoZSBuYW1lICJTZXF1ZW50aWFsIEJheWVyIiBpbmRpY2F0ZXMgdGhlIG9yZ2FuaXphdGlvbiBvZiB0aGUgcmVkLCBncmVlbiBhbmQKK2JsdWUgcGl4ZWxzIGluIG9uZSB2aWRlbyBmcmFtZS4gRWFjaCBwaXhlbCBpcyBhc3NvY2lhdGVkIHdpdGggYSA4LWJpdCBsb25nCit2YWx1ZSBhbmQgaXMgZGlzcG9zZWQgaW4gbWVtb3J5IGFjY29yZGluZyB0byB0aGUgcGF0dGVybiBzaG93biBiZWxvdzoKKworQlswXSAgIEdbMV0gICAgQlsyXSAgICBHWzNdICAgIC4uLiAgIEJbbS0yXSAgICAgICAgIEdbbS0xXQorR1ttXSAgIFJbbSsxXSAgR1ttKzJdICBSW20rMl0gIC4uLiAgIEdbMm0tMl0gICAgICAgIFJbMm0tMV0gCisuLi4KKy4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWyhuLTEpKG0tMildICBHWyhuLTEpKG0tMSldCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1tuKG0tMildICAgICAgUltuKG0tMSldCisKK1RoZSBhYm92ZSBtYXRyaXggYWxzbyByZXByZXNlbnRzIHRoZSBzZXF1ZW50aWFsIG9yIHByb2dyZXNzaXZlIHJlYWQtb3V0IG1vZGUgb2YKK3RoZSAobiwgbSkgQmF5ZXIgY29sb3IgZmlsdGVyIGFycmF5IHVzZWQgaW4gbWFueSBDQ0QvQ01PUyBpbWFnZSBzZW5zb3JzLgorCitPbmUgY29tcHJlc3NlZCB2aWRlbyBmcmFtZSBjb25zaXN0cyBvZiBhIGJpdHN0cmVhbSB0aGF0IGVuY29kZXMgZm9yIGV2ZXJ5IFIsIEcsCitvciBCIHBpeGVsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHZhbHVlIG9mIHRoZSBwaXhlbCBpdHNlbGYgYW5kIHNvbWUKK3JlZmVyZW5jZSBwaXhlbCB2YWx1ZS4gUGl4ZWxzIGFyZSBvcmdhbmlzZWQgaW4gdGhlIEJheWVyIHBhdHRlcm4gYW5kIHRoZSBCYXllcgorc3ViLXBpeGVscyBhcmUgdHJhY2tlZCBpbmRpdmlkdWFsbHkgYW5kIGFsdGVybmF0aW5nbHkuIEZvciBleGFtcGxlLCBpbiB0aGUKK2ZpcnN0IGxpbmUgdmFsdWVzIGZvciB0aGUgQiBhbmQgRzEgcGl4ZWxzIGFyZSBhbHRlcm5hdGluZ2x5IGVuY29kZWQsIHdoaWxlIGluCit0aGUgc2Vjb25kIGxpbmUgdmFsdWVzIGZvciB0aGUgRzIgYW5kIFIgcGl4ZWxzIGFyZSBhbHRlcm5hdGluZ2x5IGVuY29kZWQuCisKK1RoZSBwaXhlbCByZWZlcmVuY2UgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBmb2xsb3dzOgorLSB0aGUgNCB0b3AgbGVmdCBwaXhlbHMgYXJlIGVuY29kZWQgaW4gcmF3IHVuY29tcHJlc3NlZCA4LWJpdCBmb3JtYXQ7CistIHRoZSB2YWx1ZSBpbiB0aGUgdG9wIHR3byByb3dzIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcGl4ZWwgbGVmdCBvZiB0aGUgY3VycmVudAorICBwaXhlbDsKKy0gdGhlIHZhbHVlIGluIHRoZSBsZWZ0IGNvbHVtbiBpcyB0aGUgdmFsdWUgb2YgdGhlIHBpeGVsIGFib3ZlIHRoZSBjdXJyZW50CisgIHBpeGVsOworLSBmb3IgYWxsIG90aGVyIHBpeGVscywgdGhlIHJlZmVyZW5jZSB2YWx1ZSBpcyB0aGUgYXZlcmFnZSBvZiB0aGUgdmFsdWUgb2YgdGhlCisgIHBpeGVsIG9uIHRoZSBsZWZ0IGFuZCB0aGUgdmFsdWUgb2YgdGhlIHBpeGVsIGFib3ZlIHRoZSBjdXJyZW50IHBpeGVsOworLSB0aGVyZSBpcyBvbmUgY29kZSBpbiB0aGUgYml0c3RyZWFtIHRoYXQgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiBhIHBpeGVsCisgIGRpcmVjdGx5IChpbiA0LWJpdCByZXNvbHV0aW9uKTsKKy0gcGl4ZWwgdmFsdWVzIG5lZWQgdG8gYmUgY2xhbXBlZCBpbnNpZGUgdGhlIHJhbmdlIFswLi4yNTVdIGZvciBwcm9wZXIKKyAgZGVjb2RpbmcuCisKK1RoZSBhbGdvcml0aG0gcHVyZWx5IGRlc2NyaWJlcyB0aGUgY29udmVyc2lvbiBmcm9tIGNvbXByZXNzZWQgQmF5ZXIgY29kZSB1c2VkCitpbiB0aGUgU045QzEweCBjaGlwcyB0byB1bmNvbXByZXNzZWQgQmF5ZXIuIEFkZGl0aW9uYWwgc3RlcHMgYXJlIHJlcXVpcmVkIHRvCitjb252ZXJ0IHRoaXMgdG8gYSBjb2xvciBpbWFnZSAoaS5lLiBhIGNvbG9yIGludGVycG9sYXRpb24gYWxnb3JpdGhtKS4KKyAKK1RoZSBmb2xsb3dpbmcgSHVmZm1hbiBjb2RlcyBoYXZlIGJlZW4gZm91bmQ6CiswOiArMCAocmVsYXRpdmUgdG8gcmVmZXJlbmNlIHBpeGVsIHZhbHVlKSAKKzEwMDogKzQKKzEwMTogLTQ/CisxMTEweHh4eDogc2V0IGFic29sdXRlIHZhbHVlIHRvIHh4eHguMDAwMCAKKzExMDE6ICsxMQorMTExMTogLTExCisxMTAwMTogKzIwCisxMTAwMDA6IC0yMAorMTEwMDAxOiA/Pz8gLSB0aGVzZSBjb2RlcyBhcmUgYXBwYXJlbnRseSBub3QgdXNlZAorCitbMV0gVGhlIEh1ZmZtYW4gY29tcHJlc3Npb24gYWxnb3JpdGhtIGhhcyBiZWVuIHJldmVyc2UtZW5naW5lZXJlZCBhbmQKKyAgICBkb2N1bWVudGVkIGJ5IEJlcnRyaWsgU2lra2VuLgorCisKKzEzLiBDb250YWN0IGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGF1dGhvciBtYXkgYmUgY29udGFjdGVkIGJ5IGUtbWFpbCBhdCA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4uCisKK0dQRy9QR1AgZW5jcnlwdGVkIGUtbWFpbCdzIGFyZSBhY2NlcHRlZC4gVGhlIEdQRyBrZXkgSUQgb2YgdGhlIGF1dGhvciBpcworJ0ZDRTYzNUE0JzsgdGhlIHB1YmxpYyAxMDI0LWJpdCBrZXkgc2hvdWxkIGJlIGF2YWlsYWJsZSBhdCBhbnkga2V5c2VydmVyOwordGhlIGZpbmdlcnByaW50IGlzOiAnODhFOCBGMzJGIDcyNDQgNjhCQSAzOTU4ICA1RDQwIDk5REEgNUQyQSBGQ0U2IDM1QTQnLgorCisKKzE0LiBDcmVkaXRzCis9PT09PT09PT09PQorTWFueSB0aGFua3MgdG8gZm9sbG93aW5nIHBlcnNvbnMgZm9yIHRoZWlyIGNvbnRyaWJ1dGUgKGxpc3RlZCBpbiBhbHBoYWJldGljYWwKK29yZGVyKToKKworLSBMdWNhIENhcGVsbG8gZm9yIHRoZSBkb25hdGlvbiBvZiBhIHdlYmNhbTsKKy0gSm9hbyBSb2RyaWdvIEZ1emFybywgSm9hbyBMaW1pcmlvLCBDbGF1ZGlvIEZpbGhvIGFuZCBDYWlvIEJlZ290dGkgZm9yIHRoZQorICBkb25hdGlvbiBvZiBhIHdlYmNhbTsKKy0gQ2FybG9zIEVkdWFyZG8gTWVkYWdsaWEgRHlvbmlzaW8sIHdobyBhZGRlZCB0aGUgc3VwcG9ydCBmb3IgdGhlIFBBUzIwMkJDQgorICBpbWFnZSBzZW5zb3I7CistIFN0ZWZhbm8gTW96emksIHdobyBkb25hdGVkIDQ1IEVVOworLSBCZXJ0cmlrIFNpa2tlbiwgd2hvIHJldmVyc2UtZW5naW5lZXJlZCBhbmQgZG9jdW1lbnRlZCB0aGUgSHVmZm1hbiBjb21wcmVzc2lvbgorICBhbGdvcml0aG0gdXNlZCBpbiB0aGUgU045QzEweCBjb250cm9sbGVycyBhbmQgaW1wbGVtZW50ZWQgdGhlIGZpcnN0IGRlY29kZXI7CistIE1penVubyBUYWthZnVtaSBmb3IgdGhlIGRvbmF0aW9uIG9mIGEgd2ViY2FtOworLSBBbiAiYW5vbnltb3VzIiBkb25hdG9yICh3aG8gZGlkbid0IHdhbnQgaGlzIG5hbWUgdG8gYmUgcmV2ZWFsZWQpIGZvciB0aGUKKyAgZG9uYXRpb24gb2YgYSB3ZWJjYW0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9zdHY2ODAudHh0IGIvRG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDQ4MDQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2Ivc3R2NjgwLnR4dApAQCAtMCwwICsxLDU1IEBACitMaW51eCBkcml2ZXIgZm9yIFNUVjA2ODAgYmFzZWQgVVNCIGNhbWVyYXMKKworQ29weXJpZ2h0LCAyMDAxLCBLZXZpbiBTaXNzb24KKworCitJTlRST0RVQ1RJT046CisKK1NUTWljcm9lbGVjdHJvbmljcyBwcm9kdWNlcyB0aGUgU1RWMDY4MEIgY2hpcCwgd2hpY2ggY29tZXMgaW4gdHdvIAordHlwZXMsIC0wMDEgYW5kIC0wMDMuIFRoZSAtMDAzIHZlcnNpb24gYWxsb3dzIHRoZSByZWNvcmRpbmcgYW5kIGRvd25sb2FkaW5nIAorb2Ygc291bmQgY2xpcHMgZnJvbSB0aGUgY2FtZXJhLCBhbmQgYWxsb3dzIGEgZmxhc2ggYXR0YWNobWVudC4gT3RoZXJ3aXNlLCAKK2l0IHVzZXMgdGhlIHNhbWUgY29tbWFuZHMgYXMgdGhlIC0wMDEgdmVyc2lvbi4gQm90aCB2ZXJzaW9ucyBzdXBwb3J0IGEgCit2YXJpZXR5IG9mIFNEUkFNIHNpemVzIGFuZCBzZW5zb3JzLCBhbGxvd2luZyBmb3IgYSBtYXhpbXVtIG9mIDI2IFZHQSBvciAyMCAKK0NJRiBwaWN0dXJlcy4gVGhlIFNUVjA2ODAgc3VwcG9ydHMgZWl0aGVyIGEgc2VyaWFsIG9yIGEgdXNiIGludGVyZmFjZSwgYW5kIAordmlkZW8gaXMgcG9zc2libGUgdGhyb3VnaCB0aGUgdXNiIGludGVyZmFjZS4KKworVGhlIGZvbGxvd2luZyBjYW1lcmFzIGFyZSBrbm93biB0byB3b3JrIHdpdGggdGhpcyBkcml2ZXIsIGFsdGhvdWdoIGFueSAKK2NhbWVyYSB3aXRoIFZlbmRvci9Qcm9kdWN0IGNvZGVzIG9mIDA1NTMvMDIwMiBzaG91bGQgd29yazoKKworQWlwdGVrIFBlbmNhbSAodmFyaW91cyBtb2RlbHMpCitOaXNpcyBRdWlja1BpeCAyCitSYWRpbyBTaGFjayAnS2lkJ3MgZGlnaXRhbCBjYW1lcmEnICgjNjAtMTIwNykKK0F0IGxlYXN0IG9uZSBUcnVzdCBTcHljYW0gbW9kZWwKK1NldmVyYWwgb3RoZXIgRXVyb3BlYW4gYnJhbmQgbW9kZWxzCisKK1dIQVQgWU9VIE5FRUQ6CisKKy0JVVNCIHN1cHBvcnQKKy0JVklERU80TElOVVggc3VwcG9ydAorCitNb3JlIGluZm9ybWF0aW9uIGFib3V0IFVTQiBzdXBwb3J0IGZvciBsaW51eCBjYW4gYmUgZm91bmQgYXQ6CitodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcKKworCitNT0RVTEUgT1BUSU9OUzoKKworV2hlbiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHNldCBhICJzd2FwUkdCPTEiCitvcHRpb24sIGlmIG5lY2Vzc2FyeSwgZm9yIHRob3NlIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgaXQgCisoc3VjaCBhcyB4YXd0dikuIEhvd2V2ZXIsIHRoZSBkcml2ZXIgc2hvdWxkIGRldGVjdCBhbmQgc2V0IHRoaXMgCithdXRvbWF0aWNhbGx5LCBzbyB0aGlzIG9wdGlvbiBzaG91bGQgbm90IG5vcm1hbGx5IGJlIHVzZWQuCisKKworS05PV04gUFJPQkxFTVM6CisKK1RoZSBkcml2ZXIgc2VlbXMgdG8gd29yayBiZXR0ZXIgd2l0aCB0aGUgdXNiLW9oY2kgdGhhbiB0aGUgdXNiLXVoY2kgaG9zdCAKK2NvbnRyb2xsZXIgZHJpdmVyLiAKKworSEVMUDoKKworVGhlIGxhdGVzdCBpbmZvIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKK2h0dHA6Ly9wZXJzb25hbC5jbHQuYmVsbHNvdXRoLm5ldC9+a2pzaXNzb24gb3IgYXQKK2h0dHA6Ly9zdHYwNjgwLXVzYi5zb3VyY2Vmb3JnZS5uZXQKKworQW55IHF1ZXN0aW9ucyB0byBtZSBjYW4gYmUgc2VuZCB0bzogIGtqc2lzc29uQGJlbGxzb3V0aC5uZXQKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91aGNpLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VoY2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjU5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi91aGNpLnR4dApAQCAtMCwwICsxLDE2NSBAQAorU3BlY2lmaWNhdGlvbiBhbmQgSW50ZXJuYWxzIGZvciB0aGUgTmV3IFVIQ0kgRHJpdmVyIChXaGl0ZXBhcGVyLi4uKQorCisJYnJvdWdodCB0byB5b3UgYnkKKworCUdlb3JnIEFjaGVyLCBhY2hlckBpbi50dW0uZGUgKGV4ZWN1dGl2ZSBzbGF2ZSkgKGJhc2UgZ3VpdGFyKQorCURldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZSAoZXhlY3V0aXZlIHNsYXZlKSAobGVhZCB2b2ljZSkKKwlUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2ggKGNoaWVmIGNvbnN1bHRhbnQpIChjaGVlciBsZWFkZXIpCisgCisJJElkOiBSRUFETUUudWhjaSx2IDEuMSAxOTk5LzEyLzE0IDE0OjAzOjAyIGZsaWVnbCBFeHAgJAorCitUaGlzIGRvY3VtZW50IGFuZCB0aGUgbmV3IHVoY2kgc291cmNlcyBjYW4gYmUgZm91bmQgb24KKwkJaHR0cDovL2hvdHN3YXAuaW4udHVtLmRlL3VzYgorCisxLiBHZW5lcmFsIGlzc3VlcworCisxLjEgV2h5IGEgbmV3IFVIQ0kgZHJpdmVyLCB3ZSBhbHJlYWR5IGhhdmUgb25lPyE/CisKK0NvcnJlY3QsIGJ1dCBpdHMgaW50ZXJuYWwgc3RydWN0dXJlIGdvdCBtb3JlIGFuZCBtb3JlIG1peGVkIHVwIGJ5IHRoZSAoc3RpbGwKK29uZ29pbmcpIGVmZm9ydHMgdG8gZ2V0IGlzb2Nocm9ub3VzIHRyYW5zZmVycyAoSVNPKSB0byB3b3JrLgorU2luY2UgdGhlcmUgaXMgYW4gaW5jcmVhc2luZyBuZWVkIGZvciByZWxpYWJsZSBJU08tdHJhbnNmZXJzIChlc3BlY2lhbGx5IAorZm9yIFVTQi1hdWRpbyBuZWVkZWQgYnkgVFMgYW5kIGZvciBhIERBQi1VU0ItUmVjZWl2ZXIgYnVpbGQgYnkgR0EgYW5kIERGKSwgCit0aGlzIHN0YXRlIHdhcyBhIGJpdCB1bnNhdGlzZnlpbmcgaW4gb3VyIG9waW5pb24sIHNvIHdlJ3ZlIGRlY2lkZWQgKGJhc2VkCitvbiBrbm93bGVkZ2UgYW5kIGV4cGVyaWVuY2VzIHdpdGggdGhlIG9sZCBVSENJIGRyaXZlcikgdG8gc3RhcnQgCitmcm9tIHNjcmF0Y2ggd2l0aCBhIG5ldyBhcHByb2FjaCwgbXVjaCBzaW1wbGVyIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIG1vcmUgCitwb3dlcmZ1bC4KK0l0IGlzIGluc3BpcmVkIGJ5IHRoZSB3YXkgV2luOTgvV2luMjAwMCBoYW5kbGVzIFVTQiByZXF1ZXN0cyB2aWEgVVJCcywKK2J1dCBpdCdzIGRlZmluaXRlbHkgMTAwJSBmcmVlIG9mIE1TLWNvZGUgYW5kIGRvZXNuJ3QgY3Jhc2ggd2hpbGUgCit1bnBsdWdnaW5nIGFuIHVzZWQgSVNPLWRldmljZSBsaWtlIFdpbjk4IDstKQorU29tZSBjb2RlIGZvciBIVyBzZXR1cCBhbmQgcm9vdCBodWIgbWFuYWdlbWVudCB3YXMgdGFrZW4gZnJvbSB0aGUgCitvcmlnaW5hbCBVSENJIGRyaXZlciwgYnV0IGhlYXZpbHkgbW9kaWZpZWQgdG8gZml0IGludG8gdGhlIG5ldyBjb2RlLgorVGhlIGludmVudGlvbiBvZiB0aGUgYmFzaWMgY29uY2VwdCwgYW5kIG1ham9yIGNvZGluZyB3ZXJlIGNvbXBsZXRlZCBpbiB0d28gCitkYXlzIChhbmQgbmlnaHRzKSBvbiB0aGUgMTZ0aCBhbmQgMTd0aCBvZiBPY3RvYmVyIDE5OTksIG5vdyBrbm93biBhcyB0aGUKK2dyZWF0IFVTQi1PY3RvYmVyLVJldm9sdXRpb24gc3RhcnRlZCBieSBHQSwgREYsIGFuZCBUUyA7LSkKKworU2luY2UgdGhlIGNvbmNlcHQgaXMgaW4gbm8gd2F5IFVIQ0kgZGVwZW5kZW50LCB3ZSBob3BlIHRoYXQgaXQgd2lsbCBhbHNvIGJlIAordHJhbnNmZXJyZWQgdG8gdGhlIE9IQ0ktZHJpdmVyLCBzbyBib3RoIGRyaXZlcnMgc2hhcmUgYSBjb21tb24gQVBJLgorCisxLjIuIEFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMKKworKyBBbGwgVVNCIHRyYW5zZmVyIHR5cGVzIHdvcmsgbm93IQorKyBBc3luY2hyb25vdXMgb3BlcmF0aW9uCisrIFNpbXBsZSwgYnV0IHBvd2VyZnVsIGludGVyZmFjZSAob25seSB0d28gY2FsbHMgZm9yIHN0YXJ0IGFuZCBjYW5jZWwpCisrIEVhc3kgbWlncmF0aW9uIHRvIHRoZSBuZXcgQVBJLCBzaW1wbGlmaWVkIGJ5IGEgY29tcGF0aWJpbGl0eSBBUEkKKysgU2ltcGxlIHVzYWdlIG9mIElTTyB0cmFuc2ZlcnMKKysgQXV0b21hdGljIGxpbmtpbmcgb2YgcmVxdWVzdHMKKysgSVNPIHRyYW5zZmVycyBhbGxvdyB2YXJpYWJsZSBsZW5ndGggZm9yIGVhY2ggZnJhbWUgYW5kIHN0cmlwaW5nCisrIE5vIENQVSBkZXBlbmRlbnQgYW5kIG5vbi1wb3J0YWJsZSBhdG9taWMgbWVtb3J5IGFjY2Vzcywgbm8gYXNtKCktaW5saW5lcworKyBUZXN0ZWQgb24geDg2IGFuZCBBbHBoYQorCistIFJld3JpdGluZyBmb3IgSVNPIHRyYW5zZmVycyBuZWVkZWQKKworMS4zLiBJcyB0aGVyZSBzb21lIGNvbXBhdGliaWxpdHkgdG8gdGhlIG9sZCBBUEk/CisKK1llcywgYnV0IG9ubHkgZm9yIGNvbnRyb2wsIGJ1bGsgYW5kIGludGVycnVwdCB0cmFuc2ZlcnMuIFdlJ3ZlIGltcGxlbWVudGVkIAorc29tZSB3cmFwcGVyIGNhbGxzIGZvciB0aGVzZSB0cmFuc2ZlciB0eXBlcy4gVGhlIHVzYmNvcmUgd29ya3MgZmluZSB3aXRoIAordGhlc2Ugd3JhcHBlcnMuIEZvciBJU08gdGhlcmUncyBubyBjb21wYXRpYmlsaXR5LCBiZWNhdXNlIHRoZSBvbGQgSVNPLUFQSSAKK2FuZCBpdHMgc2VtYW50aWNzIHdlcmUgdW5uZWNlc3NhcnkgY29tcGxpY2F0ZWQgaW4gb3VyIG9waW5pb24uCisKKzEuNC4gV2hhdCdzIHJlYWxseSB3b3JraW5nPworCitBcyBzYWlkIGFib3ZlLCBDVFJMIGFuZCBCVUxLIGFscmVhZHkgd29yayBmaW5lIGV2ZW4gd2l0aCB0aGUgd3JhcHBlcnMsCitzbyBsZWdhY3kgY29kZSB3b3VsZG4ndCBub3RpY2UgdGhlIGNoYW5nZS4KK1JlZ2FyZGluZyB0byBUaG9tYXMsIElTTyB0cmFuc2ZlcnMgbm93IHJ1biBzdGFibGUgd2l0aCBVU0IgYXVkaW8uCitJTlQgdHJhbnNmZXJzIChlLmcuIG1vdXNlIGRyaXZlcikgd29yayBmaW5lLCB0b28uCisKKzEuNS4gQXJlIHRoZXJlIGFueSBidWdzPworCitObyA7LSkKK0htLi4uCitXZWxsLCBvZiBjb3Vyc2UgdGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyBleHRlbnNpdmUgdGVzdGluZyBvbiBhbGwgYXZhaWxhYmxlCitoYXJkd2FyZSwgYnV0IHdlIGJlbGlldmUgdGhhdCBhbnkgZml4ZXMgc2hvdWxkbid0IGhhcm0gdGhlIG92ZXJhbGwgY29uY2VwdC4KKworMS42LiBXaGF0IHNob3VsZCBiZSBkb25lIG5leHQ/CisKK0EgbGFyZ2UgcGFydCBvZiB0aGUgcmVxdWVzdCBoYW5kbGluZyBzZWVtcyB0byBiZSBpZGVudGljYWwgZm9yIFVIQ0kgYW5kIAorT0hDSSwgc28gaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gZXh0cmFjdCB0aGUgY29tbW9uIHBhcnRzIGFuZCBoYXZlIG9ubHkgCit0aGUgSFcgc3BlY2lmaWMgc3R1ZmYgaW4gdWhjaS5jLiBGdXJ0aGVybW9yZSwgYWxsIG90aGVyIFVTQiBkZXZpY2UgZHJpdmVycworc2hvdWxkIG5lZWQgVVJCaWZpY2F0aW9uLCBpZiB0aGV5IHVzZSBpc29jaHJvbm91cyBvciBpbnRlcnJ1cHQgdHJhbnNmZXJzLgorT25lIHRoaW5nIG1pc3NpbmcgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gKGFuZCB0aGUgb2xkIFVIQ0kgZHJpdmVyKSAKK2lzIGZhaXIgcXVldWVpbmcgZm9yIEJVTEsgdHJhbnNmZXJzLiBTaW5jZSB0aGlzIHdvdWxkIG5lZWQgKGluIHByaW5jaXBsZSkgCit0aGUgYWx0ZXJhdGlvbiBvZiBhbHJlYWR5IGNvbnN0cnVjdGVkIFREIGNoYWlucyAodG8gc3dpdGNoIGZyb20gZGVwdGggdG8gCiticmVhZHRoIGV4ZWN1dGlvbiksIGFub3RoZXIgd2F5IGhhcyB0byBiZSBmb3VuZC4gTWF5YmUgc29tZSBzaW1wbGUgCitoZXVyaXN0aWNzIHdvcmsgd2l0aCB0aGUgc2FtZSBlZmZlY3QuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyLiBJbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIG1lY2hhbmlzbXMKKworVG8gZ2V0IHF1aWNrbHkgZmFtaWxpYXIgd2l0aCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcywgaGVyZSdzIGEgc2hvcnQKK2Rlc2NyaXB0aW9uIGhvdyB0aGUgbmV3IFVIQ0kgZHJpdmVyIHdvcmtzLiBIb3dldmVyLCB0aGUgdWx0aW1hdGUgc291cmNlIG9mCit0cnV0aCBpcyBvbmx5IHVoY2kuYyEKKworMi4xLiBEZXNjcmlwdG9yIHN0cnVjdHVyZSAoUUhzIGFuZCBURHMpCisKK0R1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIGZvbGxvd2luZyBza2VsZXRvbiBpcyBhbGxvY2F0ZWQgaW4gaW5pdF9za2VsOgorCisJIGZyYW1lc3BlY2lmaWMgICAgICAgICAgIHwgICAgICAgICAgIGNvbW1vbiBjaGFpbiAgICAgCisKK2ZyYW1lbGlzdFtdCitbICAwIF0tLS0tLT4gVEQgLS0+IFREIC0tLS0tLS1cCitbICAxIF0tLS0tLT4gVEQgLS0+IFREIC0tLS0tLS0tPiBURCAtLS0tPiBRSCAtLS0tLS0tPiBRSCAtLS0tLS0tPiBRSCAtLS0+IE5VTEwKKyAgLi4uICAgICAgICBURCAtLT4gVEQgLS0tLS0tLS8KK1sxMDIzXS0tLS0tPiBURCAtLT4gVEQgLS0tLS0tLworCSAgICAgCisJICAgICBeXiAgICAgXl4gICAgICAgICAgIF5eICAgICAgIF5eICAgICAgICAgIF5eICAgICAgICAgIF5eCisgICAxMDI0IFREcyBmb3IgICA3IFREcyBmb3IgICAgMSBURCBmb3IgICBTdGFydCBvZiAgICBTdGFydCBvZiAgICBFbmQgQ2hhaW4KKwkgICAgSVNPICBJTlQgKDItMTI4bXMpIDFtcy1JTlQgICAgQ1RSTCBDaGFpbiAgQlVMSyBDaGFpbgorCitGb3IgZWFjaCBDVFJMIG9yIEJVTEsgdHJhbnNmZXIgYSBuZXcgUUggaXMgYWxsb2NhdGVkIGFuZCB0aGUgY29udGFpbmluZyBkYXRhCit0cmFuc2ZlcnMgYXJlIGFwcGVuZGVkIGFzICh2ZXJ0aWNhbCkgVERzLiBBZnRlciBidWlsZGluZyB0aGUgd2hvbGUgUUggd2l0aCBpdHMKK2RhbmdsaW5nIFREcywgdGhlIFFIIGlzIGluc2VydGVkIGJlZm9yZSB0aGUgQlVMSyBDaGFpbiBRSCAoZm9yIENUUkwpIG9yCitiZWZvcmUgdGhlIEVuZCBDaGFpbiBRSCAoZm9yIEJVTEspLiBTaW5jZSBvbmx5IHRoZSBRSC0+bmV4dCBwb2ludGVycyBhcmUKK2FmZmVjdGVkLCBubyBhdG9taWMgbWVtb3J5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4gVGhlIHRocmVlIFFIcyBpbiB0aGUKK2NvbW1vbiBjaGFpbiBhcmUgbmV2ZXIgZXF1aXBwZWQgd2l0aCBURHMhCisKK0ZvciBJU08gb3IgSU5ULCB0aGUgVEQgZm9yIGVhY2ggZnJhbWUgaXMgc2ltcGx5IGluc2VydGVkIGludG8gdGhlIGFwcHJvcHJpYXRlCitJU08vSU5ULVRELWNoYWluIGZvciB0aGUgZGVzaXJlZCBmcmFtZS4gVGhlIDcgc2tlbGV0b24gSU5ULVREcyBhcmUgc2NhdHRlcmVkCithbW9uZyB0aGUgMTAyNCBmcmFtZXMgc2ltaWxhciB0byB0aGUgb2xkIFVIQ0kgZHJpdmVyLgorCitGb3IgQ1RSTC9CVUxLL0lTTywgdGhlIGxhc3QgVEQgaW4gdGhlIHRyYW5zZmVyIGhhcyB0aGUgSU9DLWJpdCBzZXQuIEZvciBJTlQsCitldmVyeSBURCAodGhlcmUgaXMgb25seSBvbmUuLi4pIGhhcyB0aGUgSU9DLWJpdCBzZXQuCisKK0Jlc2lkZXMgdGhlIGRhdGEgZm9yIHRoZSBVSENJIGNvbnRyb2xsZXIgKDIgb3IgNCAzMmJpdCB3b3JkcyksIHRoZSBkZXNjcmlwdG9ycworYXJlIGRvdWJsZS1saW5rZWQgdGhyb3VnaCB0aGUgLnZlcnRpY2FsIGFuZCAuaG9yaXpvbnRhbCBlbGVtZW50cyBpbiB0aGUgCitTVyBkYXRhIG9mIHRoZSBkZXNjcmlwdG9yICh1c2luZyB0aGUgZG91YmxlLWxpbmtlZCBsaXN0IHN0cnVjdHVyZXMgYW5kIAorb3BlcmF0aW9ucyksIGJ1dCBTVy1saW5raW5nIG9jY3VycyBvbmx5IGluIGNsb3NlZCBkb21haW5zLCBpLmUuIGZvciBlYWNoIG9mCit0aGUgMTAyNCBJU08tY2hhaW5zIGFuZCB0aGUgOCBJTlQtY2hhaW5zIHRoZXJlIGlzIGEgY2xvc2VkIGN5Y2xlLiBUaGlzIAorc2ltcGxpZmllcyBhbGwgaW5zZXJ0aW9ucyBhbmQgdW5saW5raW5nIG9wZXJhdGlvbnMgYW5kIGF2b2lkcyBjb3N0bHkgCitidXNfdG9fdmlydCgpLWNhbGxzLgorCisyLjIuIFVSQiBzdHJ1Y3R1cmUgYW5kIGxpbmtpbmcgdG8gUUgvVERzCisKK0R1cmluZyBhc3NlbWJseSBvZiB0aGUgUUggYW5kIFREcyBvZiB0aGUgcmVxdWVzdGVkIGFjdGlvbiwgdGhlc2UgZGVzY3JpcHRvcnMKK2FyZSBzdG9yZWQgaW4gdXJiLT51cmJfbGlzdCwgc28gdGhlIGFsbG9jYXRlZCBRSC9URCBkZXNjcmlwdG9ycyBhcmUgYm91bmQgdG8KK3RoaXMgVVJCLgorSWYgdGhlIGFzc2VtYmx5IHdhcyBzdWNjZXNzZnVsIGFuZCB0aGUgZGVzY3JpcHRvcnMgd2VyZSBhZGRlZCB0byB0aGUgSFcgY2hhaW4sCit0aGUgY29ycmVzcG9uZGluZyBVUkIgaXMgaW5zZXJ0ZWQgaW50byBhIGdsb2JhbCBVUkIgbGlzdCBmb3IgdGhpcyBjb250cm9sbGVyLgorVGhpcyBsaXN0IHN0b3JlcyBhbGwgcGVuZGluZyBVUkJzLgorCisyLjMuIEludGVycnVwdCBwcm9jZXNzaW5nCisKK1NpbmNlIFVIQ0kgcHJvdmlkZXMgbm8gbWVhbnMgdG8gZGlyZWN0bHkgZGV0ZWN0IGNvbXBsZXRlZCB0cmFuc2FjdGlvbnMsIHRoZQorZm9sbG93aW5nIGlzIGRvbmUgaW4gZWFjaCBVSENJIGludGVycnVwdCAodWhjaV9pbnRlcnJ1cHQoKSk6CisKK0ZvciBlYWNoIFVSQiBpbiB0aGUgcGVuZGluZyBxdWV1ZSAocHJvY2Vzc191cmIoKSksIHRoZSBBQ1RJVkUtZmxhZyBvZiB0aGUgCithc3NvY2lhdGVkIFREcyBhcmUgcHJvY2Vzc2VkIChkZXBlbmRpbmcgb24gdGhlIHRyYW5zZmVyIHR5cGUgCitwcm9jZXNzX3t0cmFuc2ZlcnxpbnRlcnJ1cHR8aXNvfSgpKS4gSWYgdGhlIFREcyBhcmUgbm90IGFjdGl2ZSBhbnltb3JlLCAKK3RoZXkgaW5kaWNhdGUgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRyYW5zYWN0aW9uIGFuZCB0aGUgc3RhdHVzIGlzIGNhbGN1bGF0ZWQuIAorSW5hY3RpdmUgUUgvVERzIGFyZSByZW1vdmVkIGZyb20gdGhlIEhXIGNoYWluIChzaW5jZSB0aGUgaG9zdCBjb250cm9sbGVyCithbHJlYWR5IHJlbW92ZWQgdGhlIFREcyBmcm9tIHRoZSBRSCwgbm8gYXRvbWljIGFjY2VzcyBpcyBuZWVkZWQpIGFuZCAKK2V2ZW50dWFsbHkgdGhlIFVSQiBpcyBtYXJrZWQgYXMgY29tcGxldGVkIChPSyBvciBlcnJvcnMpIGFuZCByZW1vdmVkIGZyb20gdGhlIAorcGVuZGluZyBxdWV1ZS4gVGhlbiB0aGUgbmV4dCBsaW5rZWQgVVJCIGlzIHN1Ym1pdHRlZC4gQWZ0ZXIgKG9yIGltbWVkaWF0ZWx5IAorYmVmb3JlKSB0aGF0LCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGlzIGNhbGxlZC4KKworMi40LiBVbmxpbmtpbmcgVVJCcworCitGaXJzdCwgYWxsIFFIL1REcyBzdG9yZWQgaW4gdGhlIFVSQiBhcmUgdW5saW5rZWQgZnJvbSB0aGUgSFcgY2hhaW4uIAorVG8gZW5zdXJlIHRoYXQgdGhlIGhvc3QgY29udHJvbGxlciByZWFsbHkgbGVmdCBhIHZlcnRpY2FsIFREIGNoYWluLCB3ZSAKK3dhaXQgZm9yIG9uZSBmcmFtZS4gQWZ0ZXIgdGhhdCwgdGhlIFREcyBhcmUgcGh5c2ljYWxseSBkZXN0cm95ZWQuCisKKzIuNS4gVVJCIGxpbmtpbmcgYW5kIHRoZSBjb25zZXF1ZW5jZXMKKworU2luY2UgVVJCcyBjYW4gYmUgbGlua2VkIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzdWJtaXRfdXJiIGlzIGNhbGxlZCBpbgordGhlIFVIQ0ktaW50ZXJydXB0LCBhbGwgd29yayBhc3NvY2lhdGVkIHdpdGggVVJCL1FIL1REIGFzc2VtYmx5IGhhcyB0byBiZQoraW50ZXJydXB0IHNhdmUuIFRoaXMgZm9yY2VzIGttYWxsb2MgdG8gdXNlIEdGUF9BVE9NSUMgaW4gdGhlIGludGVycnVwdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2MzMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNiLWhlbHAudHh0CkBAIC0wLDAgKzEsMTkgQEAKK3VzYi1oZWxwLnR4dAorMjAwMC1KdWx5LTEyCisKK0ZvciBVU0IgaGVscCBvdGhlciB0aGFuIHRoZSByZWFkbWUgZmlsZXMgdGhhdCBhcmUgbG9jYXRlZCBpbgorRG9jdW1lbnRhdGlvbi91c2IvKiwgc2VlIHRoZSBmb2xsb3dpbmc6CisKK0xpbnV4LVVTQiBwcm9qZWN0OiAgaHR0cDovL3d3dy5saW51eC11c2Iub3JnCisgIG1pcnJvcnMgYXQgICAgICAgIGh0dHA6Ly93d3cuc3VzZS5jei9kZXZlbG9wbWVudC9saW51eC11c2IvCisgICAgICAgICBhbmQgICAgICAgIGh0dHA6Ly91c2IuaW4udHVtLmRlL2xpbnV4LXVzYi8KKyAgICAgICAgIGFuZCAgICAgICAgaHR0cDovL2l0LmxpbnV4LXVzYi5vcmcKK0xpbnV4IFVTQiBHdWlkZTogICAgaHR0cDovL2xpbnV4LXVzYi5zb3VyY2Vmb3JnZS5uZXQKK0xpbnV4LVVTQiBkZXZpY2Ugb3ZlcnZpZXcgKHdvcmtpbmcgZGV2aWNlcyBhbmQgZHJpdmVycyk6CisgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cucWJpay5jaC91c2IvZGV2aWNlcy8KKyAgICAKK1RoZSBMaW51eC1VU0IgbWFpbGluZyBsaXN0cyBhcmU6CisgIGxpbnV4LXVzYi11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgICBmb3IgZ2VuZXJhbCB1c2VyIGhlbHAKKyAgbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAgIGZvciBkZXZlbG9wZXIgZGlzY3Vzc2lvbnMKKworIyMjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDFjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dApAQCAtMCwwICsxLDQ3MCBAQAorSU5UUk9EVUNUSU9OCisKKyAgVGhlIFVTQiBzZXJpYWwgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyBhIG51bWJlciBvZiBkaWZmZXJlbnQgVVNCIHRvCisgIHNlcmlhbCBjb252ZXJ0ZXIgcHJvZHVjdHMsIGFzIHdlbGwgYXMgc29tZSBkZXZpY2VzIHRoYXQgdXNlIGEgc2VyaWFsCisgIGludGVyZmFjZSBmcm9tIHVzZXJzcGFjZSB0byB0YWxrIHRvIHRoZSBkZXZpY2UuCisKKyAgU2VlIHRoZSBpbmRpdmlkdWFsIHByb2R1Y3Qgc2VjdGlvbiBiZWxvdyBmb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQKKyAgdGhlIGRpZmZlcmVudCBkZXZpY2VzLgorCisKK0NPTkZJR1VSQVRJT04KKworICBDdXJyZW50bHkgdGhlIGRyaXZlciBjYW4gaGFuZGxlIHVwIHRvIDI1NiBkaWZmZXJlbnQgc2VyaWFsIGludGVyZmFjZXMgYXQKKyAgb25lIHRpbWUuIAorCisgIElmIHlvdSBhcmUgbm90IHVzaW5nIGRldmZzOgorICAgIFRoZSBtYWpvciBudW1iZXIgdGhhdCB0aGUgZHJpdmVyIHVzZXMgaXMgMTg4IHNvIHRvIHVzZSB0aGUgZHJpdmVyLAorICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIG5vZGVzOgorCW1rbm9kIC9kZXYvdHR5VVNCMCBjIDE4OCAwCisJbWtub2QgL2Rldi90dHlVU0IxIGMgMTg4IDEKKwlta25vZCAvZGV2L3R0eVVTQjIgYyAxODggMgorCW1rbm9kIC9kZXYvdHR5VVNCMyBjIDE4OCAzCisJCS4KKwkJLgorCQkuCisJbWtub2QgL2Rldi90dHlVU0IyNTQgYyAxODggMjU0CisJbWtub2QgL2Rldi90dHlVU0IyNTUgYyAxODggMjU1CisKKyAgSWYgeW91IGFyZSB1c2luZyBkZXZmczoKKyAgICBUaGUgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgd2lsbCBzaG93IHVwIGFzCisgICAgL2Rldi91c2IvdHRzL3swLDEsLi4ufQorCisgIFdoZW4gdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgYW5kIHJlY29nbml6ZWQgYnkgdGhlIGRyaXZlciwgdGhlIGRyaXZlcgorICB3aWxsIHByaW50IHRvIHRoZSBzeXN0ZW0gbG9nLCB3aGljaCBub2RlKHMpIHRoZSBkZXZpY2UgaGFzIGJlZW4gYm91bmQKKyAgdG8uCisgIAorCitTUEVDSUZJQyBERVZJQ0VTIFNVUFBPUlRFRAorCisKK0Nvbm5lY3RUZWNoIFdoaXRlSEVBVCA0IHBvcnQgY29udmVydGVyCisKKyAgQ29ubmVjdFRlY2ggaGFzIGJlZW4gdmVyeSBmb3J0aGNvbWluZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyCisgIGRldmljZSwgaW5jbHVkaW5nIHByb3ZpZGluZyBhIHVuaXQgdG8gdGVzdCB3aXRoLgorCisgIFRoZSBkcml2ZXIgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYnkgQ29ubmVjdCBUZWNoIEluYy4KKyAgaHR0cDovL3d3dy5jb25uZWN0dGVjaC5jb20KKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAorICBTdHVhcnQgTWFjRG9uYWxkIGF0IHN0dWFydG1AY29ubmVjdHRlY2guY29tCisKKworSGFuZFNwcmluZyBWaXNvciwgUGFsbSBVU0IsIGFuZCBDbGnpIFVTQiBkcml2ZXIKKworICBUaGlzIGRyaXZlciB3b3JrcyB3aXRoIGFsbCBIYW5kU3ByaW5nIFVTQiwgUGFsbSBVU0IsIGFuZCBTb255IENsaekgVVNCCisgIGRldmljZXMuCisKKyAgT25seSB3aGVuIHRoZSBkZXZpY2UgdHJpZXMgdG8gY29ubmVjdCB0byB0aGUgaG9zdCwgd2lsbCB0aGUgZGV2aWNlIHNob3cKKyAgdXAgdG8gdGhlIGhvc3QgYXMgYSB2YWxpZCBVU0IgZGV2aWNlLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIGRldmljZSBpcworICBwcm9wZXJseSBlbnVtZXJhdGVkLCBhc3NpZ25lZCBhIHBvcnQsIGFuZCB0aGVuIGNvbW11bmljYXRpb24gX3Nob3VsZF8gYmUKKyAgcG9zc2libGUuIFRoZSBkcml2ZXIgY2xlYW5zIHVwIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkLCBvcgorICB0aGUgY29ubmVjdGlvbiBpcyBjYW5jZWxlZCBvbiB0aGUgZGV2aWNlLgorCisgIE5PVEU6CisgICAgVGhpcyBtZWFucyB0aGF0IGluIG9yZGVyIHRvIHRhbGsgdG8gdGhlIGRldmljZSwgdGhlIHN5bmMgYnV0dG9uIG11c3QgYmUKKyAgICBwcmVzc2VkIEJFRk9SRSB0cnlpbmcgdG8gZ2V0IGFueSBwcm9ncmFtIHRvIGNvbW11bmljYXRlIHRvIHRoZSBkZXZpY2UuCisgICAgVGhpcyBnb2VzIGFnYWluc3QgdGhlIGN1cnJlbnQgZG9jdW1lbnRhdGlvbiBmb3IgcGlsb3QteGZlciBhbmQgb3RoZXIKKyAgICBwYWNrYWdlcywgYnV0IGlzIHRoZSBvbmx5IHdheSB0aGF0IGl0IHdpbGwgd29yayBkdWUgdG8gdGhlIGhhcmR3YXJlCisgICAgaW4gdGhlIGRldmljZS4KKyAgCisgIFdoZW4gdGhlIGRldmljZSBpcyBjb25uZWN0ZWQsIHRyeSB0YWxraW5nIHRvIGl0IG9uIHRoZSBzZWNvbmQgcG9ydAorICAodGhpcyBpcyB1c3VhbGx5IC9kZXYvdHR5VVNCMSBpZiB5b3UgZG8gbm90IGhhdmUgYW55IG90aGVyIHVzYi1zZXJpYWwKKyAgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLikgVGhlIHN5c3RlbSBsb2cgc2hvdWxkIHRlbGwgeW91IHdoaWNoIHBvcnQgaXMKKyAgdGhlIHBvcnQgdG8gdXNlIGZvciB0aGUgSG90U3luYyB0cmFuc2Zlci4gVGhlICJHZW5lcmljIiBwb3J0IGNhbiBiZSB1c2VkCisgIGZvciBvdGhlciBkZXZpY2UgY29tbXVuaWNhdGlvbiwgc3VjaCBhcyBhIFBQUCBsaW5rLgorCisgIEZvciBzb21lIFNvbnkgQ2xp6SBkZXZpY2VzLCAvZGV2L3R0eVVTQjAgbXVzdCBiZSB1c2VkIHRvIHRhbGsgdG8gdGhlCisgIGRldmljZS4gIFRoaXMgaXMgdHJ1ZSBmb3IgYWxsIE9TIHZlcnNpb24gMy41IGRldmljZXMsIGFuZCBtb3N0IGRldmljZXMKKyAgdGhhdCBoYXZlIGhhZCBhIGZsYXNoIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBPUy4gIFNlZSB0aGUKKyAga2VybmVsIHN5c3RlbSBsb2cgZm9yIGluZm9ybWF0aW9uIG9uIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHBvcnQgdG8gdXNlLgorCisgIElmIGFmdGVyIHByZXNzaW5nIHRoZSBzeW5jIGJ1dHRvbiwgbm90aGluZyBzaG93cyB1cCBpbiB0aGUgc3lzdGVtIGxvZywKKyAgdHJ5IHJlc2V0dGluZyB0aGUgZGV2aWNlLCBmaXJzdCBhIGhvdCByZXNldCwgYW5kIHRoZW4gYSBjb2xkIHJlc2V0IGlmCisgIG5lY2Vzc2FyeS4gIFNvbWUgZGV2aWNlcyBuZWVkIHRoaXMgYmVmb3JlIHRoZXkgY2FuIHRhbGsgdG8gdGhlIFVTQiBwb3J0CisgIHByb3Blcmx5LgorICAKKyAgRGV2aWNlcyB0aGF0IGFyZSBub3QgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCBtb2R1bGUKKyAgcGFyYW1ldGVycy4gIGUuZy4gbW9kcHJvYmUgdmlzb3IgdmVuZG9yPTB4NTRjIHByb2R1Y3Q9MHg2NgorICAKKyAgVGhlcmUgaXMgYSB3ZWJwYWdlIGFuZCBtYWlsaW5nIGxpc3RzIGZvciB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciBhdDoKKyAgaHR0cDovL3VzYnZpc29yLnNvdXJjZWZvcmdlLm5ldC8KKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHcmVnCisgIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KKworCitQb2NrZXRQQyBQREEgRHJpdmVyCisKKyAgVGhpcyBkcml2ZXIgY2FuIGJlIHVzZWQgdG8gY29ubmVjdCB0byBDb21wYXEgaVBBUSwgSFAgSm9ybmFkYSwgQ2FzaW8gRU01MDAKKyAgYW5kIG90aGVyIFBEQXMgcnVubmluZyBXaW5kb3dzIENFIDMuMCBvciBQb2NrZXRQQyAyMDAyIHVzaW5nIGEgVVNCCisgIGNhYmxlL2NyYWRsZS4KKyAgTW9zdCBkZXZpY2VzIHN1cHBvcnRlZCBieSBBY3RpdmVTeW5jIGFyZSBzdXBwb3J0ZWQgb3V0IG9mIHRoZSBib3guCisgIEZvciBvdGhlcnMsIHBsZWFzZSB1c2UgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSB0aGUgcHJvZHVjdCBhbmQgdmVuZG9yCisgIGlkLiBlLmcuIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4M2YwIHByb2R1Y3Q9MHgxMTI1CisKKyAgVGhlIGRyaXZlciBwcmVzZW50cyBhIHNlcmlhbCBpbnRlcmZhY2UgKHVzdWFsbHkgb24gL2Rldi90dHlVU0IwKSBvdmVyCisgIHdoaWNoIG9uZSBtYXkgcnVuIHBwcCBhbmQgZXN0YWJsaXNoIGEgVENQL0lQIGxpbmsgdG8gdGhlIFBEQS4gT25jZSB0aGlzCisgIGlzIGRvbmUsIHlvdSBjYW4gdHJhbnNmZXIgZmlsZXMsIGJhY2t1cCwgZG93bmxvYWQgZW1haWwgZXRjLiBUaGUgbW9zdAorICBzaWduaWZpY2FudCBhZHZhbnRhZ2Ugb2YgdXNpbmcgVVNCIGlzIHNwZWVkIC0gSSBjYW4gZ2V0IDczIHRvIDExMworICBrYnl0ZXMvc2VjIGZvciBkb3dubG9hZC91cGxvYWQgdG8gbXkgaVBBUS4KKworICBUaGlzIGRyaXZlciBpcyBvbmx5IG9uZSBvZiBhIHNldCBvZiBjb21wb25lbnRzIHJlcXVpcmVkIHRvIHV0aWxpemUKKyAgdGhlIFVTQiBjb25uZWN0aW9uLiBQbGVhc2UgdmlzaXQgaHR0cDovL3N5bmNlLnNvdXJjZWZvcmdlLm5ldCB3aGljaAorICBjb250YWlucyB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzIGFuZCBhIHNpbXBsZSBzdGVwLWJ5LXN0ZXAgaG93dG8uCisKKyAgT25jZSBjb25uZWN0ZWQsIHlvdSBjYW4gdXNlIFdpbiBDRSBwcm9ncmFtcyBsaWtlIGZ0cFZpZXcsIFBvY2tldCBPdXRsb29rCisgIGZyb20gdGhlIFBEQSBhbmQgeGNlcmRpc3AsIHN5bmNlIHV0aWxpdGllcyBmcm9tIHRoZSBMaW51eCBzaWRlLgorCisgIFRvIHVzZSBQb2NrZXQgSUUsIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0CisgIGh0dHA6Ly93d3cudGVrZ3VydS5jby51ay9FTTUwMC91c2J0b25ldC5odG0gdG8gYWNoaWV2ZSB0aGUgc2FtZSB0aGluZworICBvbiBXaW45OC4gT21pdCB0aGUgcHJveHkgc2VydmVyIHBhcnQ7IExpbnV4IGlzIHF1aXRlIGNhcGFibGUgb2YgZm9yd2FyZGluZworICBwYWNrZXRzIHVubGlrZSBXaW45OC4gQW5vdGhlciBtb2RpZmljYXRpb24gaXMgcmVxdWlyZWQgYXQgbGVhc3QgZm9yIHRoZQorICBpUEFRIC0gZGlzYWJsZSBhdXRvc3luYyBieSBnb2luZyB0byB0aGUgU3RhcnQvU2V0dGluZ3MvQ29ubmVjdGlvbnMgbWVudQorICBhbmQgdW5jaGVja2luZyB0aGUgIkF1dG9tYXRpY2FsbHkgc3luY2hyb25pemUgLi4uIiBib3guIEdvIHRvCisgIFN0YXJ0L1Byb2dyYW1zL0Nvbm5lY3Rpb25zLCBjb25uZWN0IHRoZSBjYWJsZSBhbmQgc2VsZWN0ICJ1c2JkaWFsIiAob3IKKyAgd2hhdGV2ZXIgeW91IG5hbWVkIHlvdXIgbmV3IFVTQiBjb25uZWN0aW9uKS4gWW91IHNob3VsZCBmaW5hbGx5IHdpbmQKKyAgdXAgd2l0aCBhICJDb25uZWN0ZWQgdG8gdXNiZGlhbCIgd2luZG93IHdpdGggc3RhdHVzIHNob3duIGFzIGNvbm5lY3RlZC4KKyAgTm93IHN0YXJ0IHVwIFBJRSBhbmQgYnJvd3NlIGF3YXkuCisKKyAgSWYgaXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiwgbG9hZCBib3RoIHRoZSB1c2JzZXJpYWwgYW5kIGlwYXEgbW9kdWxlCisgIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgImRlYnVnIiBzZXQgdG8gMSBhbmQgZXhhbWluZSB0aGUgc3lzdGVtIGxvZy4KKyAgWW91IGNhbiBhbHNvIHRyeSBzb2Z0LXJlc2V0dGluZyB5b3VyIFBEQSBiZWZvcmUgYXR0ZW1wdGluZyBhIGNvbm5lY3Rpb24uCisKKyAgT3RoZXIgZnVuY3Rpb25hbGl0eSBtYXkgYmUgcG9zc2libGUgZGVwZW5kaW5nIG9uIHlvdXIgUERBLiBBY2NvcmRpbmcgdG8KKyAgV2VzIENpbGxkaGFpcmUgPGJpbGx5Ym9iam9laGVucnlib2JAaG90bWFpbC5jb20+LCB3aXRoIHRoZSBUb3NoaWJhIEU1NzAsCisgIC4uLmlmIHlvdSBib290IGludG8gdGhlIGJvb3Rsb2FkZXIgKGhvbGQgZG93biB0aGUgcG93ZXIgd2hlbiBoaXR0aW5nIHRoZQorICByZXNldCBidXR0b24sIGNvbnRpbnVpbmcgdG8gaG9sZCBvbnRvIHRoZSBwb3dlciB1bnRpbCB0aGUgYm9vdGxvYWRlciBzY3JlZW4KKyAgaXMgZGlzcGxheWVkKSwgdGhlbiBwdXQgaXQgaW4gdGhlIGNyYWRsZSB3aXRoIHRoZSBpcGFxIGRyaXZlciBsb2FkZWQsIG9wZW4KKyAgYSB0ZXJtaW5hbCBvbiAvZGV2L3R0eVVTQjAsIGl0IGdpdmVzIHlvdSBhICJVU0IgUmVmbGFzaCIgdGVybWluYWwsIHdoaWNoIGNhbgorICBiZSB1c2VkIHRvIGZsYXNoIHRoZSBST00sIGFzIHdlbGwgYXMgdGhlIG1pY3JvUCBjb2RlLi4gIHNvIG11Y2ggZm9yIG5lZWRpbmcKKyAgVG9zaGliYSdzICQzNTAgc2VyaWFsIGNhYmxlIGZvciBmbGFzaGluZyEhIDpECisgIE5PVEU6IFRoaXMgaGFzIE5PVCBiZWVuIHRlc3RlZC4gVXNlIGF0IHlvdXIgb3duIHJpc2suCisgCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR2FuZXNoCisgIFZhcmFkYXJhamFuIDxnYW5lc2hAdmVyaXRhcy5jb20+CisKKworS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIKKworICBTaW5nbGUgcG9ydCBEQi05IHNlcmlhbCBhZGFwdGVyLCBwdXNoZWQgYXMgYSBQREEgYWRhcHRlciBmb3IgaU1hY3MgKG1vc3RseQorICBzb2xkIGluIE1hY2ludG9zaCBjYXRhbG9ncywgY29tZXMgaW4gYSB0cmFuc2x1Y2VudCB3aGl0ZS9ncmVlbiBkb25nbGUpLgorICBGYWlybHkgc2ltcGxlIGRldmljZS4gRmlybXdhcmUgaXMgaG9tZWJyZXcuCisgIFRoaXMgZHJpdmVyIGFsc28gd29ya3MgZm9yIHRoZSBYaXJjb20vRW50cmdyYSBzaW5nbGUgcG9ydCBzZXJpYWwgYWRhcHRlci4KKworICBDdXJyZW50IHN0YXR1czoKKyAgIFRoaW5ncyB0aGF0IHdvcms6CisgICAgIGJhc2ljIGlucHV0L291dHB1dCAodGVzdGVkIHdpdGggJ2N1JykKKyAgICAgYmxvY2tpbmcgd3JpdGUgd2hlbiBzZXJpYWwgbGluZSBjYW4ndCBrZWVwIHVwCisgICAgIGNoYW5naW5nIGJhdWQgcmF0ZXMgKHVwIHRvIDExNTIwMCkKKyAgICAgZ2V0dGluZy9zZXR0aW5nIG1vZGVtIGNvbnRyb2wgcGlucyAoVElPQ017R0VULFNFVCxCSVMsQklDfSkKKyAgICAgc2VuZGluZyBicmVhayAoYWx0aG91Z2ggZHVyYXRpb24gbG9va3Mgc3VzcGVjdCkKKyAgIFRoaW5ncyB0aGF0IGRvbid0OgorICAgICBkZXZpY2Ugc3RyaW5ncyAoYXMgbG9nZ2VkIGJ5IGtlcm5lbCkgaGF2ZSB0cmFpbGluZyBiaW5hcnkgZ2FyYmFnZQorICAgICBkZXZpY2UgSUQgaXNuJ3QgcmlnaHQsIG1pZ2h0IGNvbGxpZGUgd2l0aCBvdGhlciBLZXlzcGFuIHByb2R1Y3RzCisgICAgIGNoYW5naW5nIGJhdWQgcmF0ZXMgb3VnaHQgdG8gZmx1c2ggdHgvcnggdG8gYXZvaWQgbWFuZ2xlZCBoYWxmIGNoYXJhY3RlcnMKKyAgIEJpZyBUaGluZ3Mgb24gdGhlIHRvZG8gbGlzdDoKKyAgICAgcGFyaXR5LCA3IHZzIDggYml0cyBwZXIgY2hhciwgMSBvciAyIHN0b3AgYml0cworICAgICBIVyBmbG93IGNvbnRyb2wKKyAgICAgbm90IGFsbCBvZiB0aGUgc3RhbmRhcmQgVVNCIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkOiBHZXRfU3RhdHVzLCBTZXRfRmVhdHVyZQorICAgICBPX05PTkJMT0NLLCBzZWxlY3QoKQorCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEJyaWFuCisgIFdhcm5lciBhdCB3YXJuZXJAbG90aGFyLmNvbSAKKworCitLZXlzcGFuIFVTQS1zZXJpZXMgU2VyaWFsIEFkYXB0ZXJzCisKKyAgU2luZ2xlLCBEdWFsIGFuZCBRdWFkIHBvcnQgYWRhcHRlcnMgLSBkcml2ZXIgdXNlcyBLZXlzcGFuIHN1cHBsaWVkIAorICBmaXJtd2FyZSBhbmQgaXMgYmVpbmcgZGV2ZWxvcGVkIHdpdGggdGhlaXIgc3VwcG9ydC4KKyAgCisgIEN1cnJlbnQgc3RhdHVzOgorICAgIFRoZSBVU0EtMThYLCBVU0EtMjhYLCBVU0EtMTksIFVTQS0xOVcgYW5kIFVTQS00OVcgYXJlIHN1cHBvcnRlZCBhbmQKKyAgICBoYXZlIGJlZW4gcHJldHR5IHRocm91Z2hseSB0ZXN0ZWQgYXQgdmFyaW91cyBiYXVkIHJhdGVzIHdpdGggOC1OLTEKKyAgICBjaGFyYWN0ZXIgc2V0dGluZ3MuICBPdGhlciBjaGFyYWN0ZXIgbGVuZ3RocyBhbmQgcGFyaXR5IHNldHVwcyBhcmUKKyAgICBwcmVzZW50bHkgdW50ZXN0ZWQuCisKKyAgICBUaGUgVVNBLTI4IGlzbid0IHlldCBzdXBwb3J0ZWQgdGhvdWdoIGRvaW5nIHNvIHNob3VsZCBiZSBwcmV0dHkKKyAgICBzdHJhaWdodGZvcndhcmQuICBDb250YWN0IHRoZSBtYWludGFpbmVyIGlmIHlvdSByZXF1aXJlIHRoaXMKKyAgICBmdW5jdGlvbmFsaXR5LgorICAKKyAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6CisgICAgICAgIGh0dHA6Ly9taXNjLm51L2h1Z2gva2V5c3Bhbi5odG1sCisgICAKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgSHVnaAorICBCbGVtaW5ncyBhdCBodWdoQG1pc2MubnUKKworCitGVERJIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIKKworICBUaGlzIGlzIGEgc2luZ2xlIHBvcnQgREItMjUgc2VyaWFsIGFkYXB0ZXIuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcworICBkZXZpY2UgYW5kIHRoZSBMaW51eCBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgorCWh0dHA6Ly9yZWFsaXR5LnNnaS5jb20vYnJ5ZGVyX3dlbGxpbmd0b24vZnRkaV9zaW8vCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgQmlsbCBSeWRlcgorICBhdCBicnlkZXJAc2dpLmNvbQorCisKK1p5WEVMIG9tbmkubmV0IGxjZCBwbHVzIElTRE4gVEEKKworICBUaGlzIGlzIGFuIElTRE4gVEEuIFBsZWFzZSByZXBvcnQgYm90aCBzdWNjZXNzZXMgYW5kIHRyb3VibGVzIHRvCisgIGF6dW1tb0B0b3dlcnRlY2guaXQKKworCitDeXByZXNzIE04IENZNDYwMSBGYW1pbHkgU2VyaWFsIERyaXZlcgorCisgIFRoaXMgZHJpdmVyIHdhcyBpbiBtb3N0IHBhcnQgZGV2ZWxvcGVkIGJ5IE5laWwgImtveWFtYSIgV2hlbGNoZWwuICBJdAorICBoYXMgYmVlbiBpbXByb3ZlZCBzaW5jZSB0aGF0IHByZXZpb3VzIGZvcm0gdG8gc3VwcG9ydCBkeW5hbWljIHNlcmlhbAorICBsaW5lIHNldHRpbmdzIGFuZCBpbXByb3ZlZCBsaW5lIGhhbmRsaW5nLiAgVGhlIGRyaXZlciBpcyBmb3IgdGhlIG1vc3QKKyAgcGFydCBzdGFibGUgYW5kIGhhcyBiZWVuIHRlc3RlZCBvbiBhbiBzbXAgbWFjaGluZS4gKGR1YWwgcDIpCisKKyAgICBDaGlwc2V0cyBzdXBwb3J0ZWQgdW5kZXIgQ1k0NjAxIGZhbWlseToKKwkKKwkJQ1k3QzYzNzIzLCBDWTdDNjM3NDIsIENZN0M2Mzc0MywgQ1k3QzY0MDEzCisKKyAgICBEZXZpY2VzIHN1cHBvcnRlZDoKKworCQktRGVMb3JtZSdzIFVTQiBFYXJ0aG1hdGUgKFNpUkYgU3RhciBJSSBscCBhcmNoKQorCQktQ3lwcmVzcyBISUQtPkNPTSBSUzIzMiBhZGFwdGVyCisJCisJCU5vdGU6IEN5cHJlc3MgU2VtaWNvbmR1Y3RvciBjbGFpbXMgbm8gYWZmaWxpYXRpb24gd2l0aCB0aGUKKwkJCXRoZSBoaWQtPmNvbSBkZXZpY2UuCisKKwlNb3N0IGRldmljZXMgdXNpbmcgY2hpcHNldHMgdW5kZXIgdGhlIENZNDYwMSBmYW1pbHkgc2hvdWxkCisgICAgIHdvcmsgd2l0aCB0aGUgZHJpdmVyLiAgQXMgbG9uZyBhcyB0aGV5IHN0YXkgdHJ1ZSB0byB0aGUgQ1k0NjAxCisgICAgIHVzYnNlcmlhbCBzcGVjaWZpY2F0aW9uLgorCisgICAgVGVjaG5pY2FsIG5vdGVzOgorCisgICAgICAgIFRoZSBFYXJ0aG1hdGUgc3RhcnRzIG91dCBhdCA0ODAwIDhOMSBieSBkZWZhdWx0Li4uIHRoZSBkcml2ZXIgd2lsbAorCXVwb24gc3RhcnQgaW5pdCB0byB0aGlzIHNldHRpbmcuICB1c2JzZXJpYWwgY29yZSBwcm92aWRlcyB0aGUgcmVzdAorCW9mIHRoZSB0ZXJtaW9zIHNldHRpbmdzLCBhbG9uZyB3aXRoIHNvbWUgY3VzdG9tIHRlcm1pb3Mgc28gdGhhdCB0aGUKKwlvdXRwdXQgaXMgaW4gcHJvcGVyIGZvcm1hdCBhbmQgcGFyc2FibGUuCisJCisJVGhlIGRldmljZSBjYW4gYmUgcHV0IGludG8gc2lyZiBtb2RlIGJ5IGlzc3VpbmcgTk1FQSBjb21tYW5kOgorCQkkUFNSRjEwMCw8cHJvdG9jb2w+LDxiYXVkPiw8ZGF0YWJpdHM+LDxzdG9wYml0cz4sPHBhcml0eT4qQ0hFQ0tTVU0KKwkJJFBTUkYxMDAsMCw5NjAwLDgsMSwwKjBDCisKKwkJSXQgc2hvdWxkIHRoZW4gYmUgc3VmZmljaWVudCB0byBjaGFuZ2UgdGhlIHBvcnQgdGVybWlvcyB0byBtYXRjaCB0aGlzCisJCXRvIGJlZ2luIGNvbW11bmljYXRpbmcuCisKKwlBcyBmYXIgYXMgSSBjYW4gdGVsbCBpdCBzdXBwb3J0cyBwcmV0dHkgbXVjaCBldmVyeSBzaXJmIGNvbW1hbmQgYXMKKwlkb2N1bWVudGVkIG9ubGluZSBhdmFpbGFibGUgd2l0aCBmaXJtd2FyZSAyLjMxLCB3aXRoIHNvbWUgdW5rbm93bgorCW1lc3NhZ2UgaWRzLgorCisJVGhlIGhpZC0+Y29tIGFkYXB0ZXIgY2FuIHJ1biBhdCBhIG1heGltdW0gYmF1ZCBvZiAxMTUyMDBicHMuICBQbGVhc2Ugbm90ZQorCXRoYXQgdGhlIGRldmljZSBoYXMgdHJvdWJsZSBvciBpcyBpbmNhcGFibGUgb2YgcmFpc2luZyBsaW5lIHZvbHRhZ2UgcHJvcGVybHkuCisJSXQgd2lsbCBiZSBmaW5lIHdpdGggbnVsbCBtb2RlbSBsaW5rcywgYXMgbG9uZyBhcyB5b3UgZG8gbm90IHRyeSB0byBsaW5rIHR3bworCXRvZ2V0aGVyIHdpdGhvdXQgaGFja2luZyB0aGUgYWRhcHRlciB0byBzZXQgdGhlIGxpbmUgaGlnaC4KKworCVRoZSBkcml2ZXIgaXMgc21wIHNhZmUuICBQZXJmb3JtYW5jZSB3aXRoIHRoZSBkcml2ZXIgaXMgcmF0aGVyIGxvdyB3aGVuIHVzaW5nCisJaXQgZm9yIHRyYW5zZmVyaW5nIGZpbGVzLiAgVGhpcyBpcyBiZWluZyB3b3JrZWQgb24sIGJ1dCBJIHdvdWxkIGJlIHdpbGxpbmcgdG8KKwlhY2NlcHQgcGF0Y2hlcy4gIEFuIHVyYiBxdWV1ZSBvciBwYWNrZXQgYnVmZmVyIHdvdWxkIGxpa2VseSBmaXQgdGhlIGJpbGwgaGVyZS4KKworCUlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHByb2JsZW1zLCBwYXRjaGVzLCBmZWF0dXJlIHJlcXVlc3RzLCBldGMuIHlvdSBjYW4KKwljb250YWN0IG1lIGhlcmUgdmlhIGVtYWlsOgorCQkJCQlkaWdub21lQGdtYWlsLmNvbQorCQkoeW91ciBwcm9ibGVtcy9wYXRjaGVzIGNhbiBhbHRlcm5hdGVseSBiZSBzdWJtaXR0ZWQgdG8gdXNiLWRldmVsKQorCisKK0RpZ2kgQWNjZWxlUG9ydCBEcml2ZXIKKworICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgRGlnaSBBY2NlbGVQb3J0IFVTQiAyIGFuZCA0IGRldmljZXMsIDIgcG9ydAorICAocGx1cyBhIHBhcmFsbGVsIHBvcnQpIGFuZCA0IHBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzLiAgVGhlIGRyaXZlcgorICBkb2VzIE5PVCB5ZXQgc3VwcG9ydCB0aGUgRGlnaSBBY2NlbGVQb3J0IFVTQiA4LgorCisgIFRoaXMgZHJpdmVyIHdvcmtzIHVuZGVyIFNNUCB3aXRoIHRoZSB1c2ItdWhjaSBkcml2ZXIuICBJdCBkb2VzIG5vdAorICB3b3JrIHVuZGVyIFNNUCB3aXRoIHRoZSB1aGNpIGRyaXZlci4KKworICBUaGUgZHJpdmVyIGlzIGdlbmVyYWxseSB3b3JraW5nLCB0aG91Z2ggd2Ugc3RpbGwgaGF2ZSBhIGZldyBtb3JlIGlvY3RscworICB0byBpbXBsZW1lbnQgYW5kIGZpbmFsIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyB0byBkby4gIFRoZSBwYXJhbGxlZCBwb3J0CisgIG9uIHRoZSBVU0IgMiBpcyBzdXBwb3J0ZWQgYXMgYSBzZXJpYWwgdG8gcGFyYWxsZWwgY29udmVydGVyOyBpbiBvdGhlcgorICB3b3JkcywgaXQgYXBwZWFycyBhcyBhbm90aGVyIFVTQiBzZXJpYWwgcG9ydCBvbiBMaW51eCwgZXZlbiB0aG91Z2gKKyAgcGh5c2ljYWxseSBpdCBpcyByZWFsbHkgYSBwYXJhbGxlbCBwb3J0LiAgVGhlIERpZ2kgQWNjZWxlcG9ydCBVU0IgOAorICBpcyBub3QgeWV0IHN1cHBvcnRlZC4KKworICBQbGVhc2UgY29udGFjdCBQZXRlciBCZXJnZXIgKHBiZXJnZXJAYnJpbXNvbi5jb20pIG9yIEFsIEJvcmNoZXJzCisgIChhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pIGZvciBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzCisgIGRyaXZlci4KKworCitCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMworCisgIFNpbmdsZSBwb3J0IERCLTkvUFMtMiBzZXJpYWwgYWRhcHRlciBmcm9tIEJlbGtpbiB3aXRoIGZpcm13YXJlIGJ5IGVURUsgTGFicy4KKyAgVGhlIFBlcmFjb20gc2luZ2xlIHBvcnQgc2VyaWFsIGFkYXB0ZXIgYWxzbyB3b3JrcyB3aXRoIHRoaXMgZHJpdmVyLCBhcworICB3ZWxsIGFzIHRoZSBHb0h1YnMgYWRhcHRlci4KKworICBDdXJyZW50IHN0YXR1czoKKyAgICBUaGUgZm9sbG93aW5nIGhhdmUgYmVlbiB0ZXN0ZWQgYW5kIHdvcms6CisgICAgICBCYXVkIHJhdGUgICAgMzAwLTIzMDQwMCAgICAgICAgICAgICAgIAorICAgICAgRGF0YSBiaXRzICAgIDUtOAorICAgICAgU3RvcCBiaXRzICAgIDEtMgorICAgICAgUGFyaXR5ICAgICAgIE4sRSxPLE0sUworICAgICAgSGFuZHNoYWtlICAgIE5vbmUsIFNvZnR3YXJlIChYT04vWE9GRiksIEhhcmR3YXJlIChDVFNSVFMsQ1RTRFRSKSoKKyAgICAgIEJyZWFrICAgICAgICBTZXQgYW5kIGNsZWFyCisgICAgICBMaW5lIGNvbnRybCAgSW5wdXQvT3V0cHV0IHF1ZXJ5IGFuZCBjb250cm9sICoqCisKKyAgICAgICogIEhhcmR3YXJlIGlucHV0IGZsb3cgY29udHJvbCBpcyBvbmx5IGVuYWJsZWQgZm9yIGZpcm13YXJlCisgICAgICAgICBsZXZlbHMgYWJvdmUgMi4wNi4gIFJlYWQgc291cmNlIGNvZGUgY29tbWVudHMgZGVzY3JpYmluZyBCZWxraW4KKyAgICAgICAgIGZpcm13YXJlIGVycmF0YS4gIEhhcmR3YXJlIG91dHB1dCBmbG93IGNvbnRyb2wgaXMgd29ya2luZyBmb3IgYWxsCisgICAgICAgICBmaXJtd2FyZSB2ZXJzaW9ucy4KKyAgICAgICoqIFF1ZXJpZXMgb2YgaW5wdXRzIChDVFMsRFNSLENELFJJKSBzaG93IHRoZSBsYXN0CisgICAgICAgICByZXBvcnRlZCBzdGF0ZS4gIFF1ZXJpZXMgb2Ygb3V0cHV0cyAoRFRSLFJUUykgc2hvdyB0aGUgbGFzdAorICAgICAgICAgcmVxdWVzdGVkIHN0YXRlIGFuZCBtYXkgbm90IHJlZmxlY3QgY3VycmVudCBzdGF0ZSBhcyBzZXQgYnkKKyAgICAgICAgIGF1dG9tYXRpYyBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCisKKyAgVE8gRE8gTGlzdDoKKyAgICAtLSBBZGQgdHJ1ZSBtb2RlbSBjb250b2wgbGluZSBxdWVyeSBjYXBhYmlsaXR5LiAgQ3VycmVudGx5IHRyYWNrcyB0aGUKKyAgICAgICBzdGF0ZXMgcmVwb3J0ZWQgYnkgdGhlIGludGVycnVwdCBhbmQgdGhlIHN0YXRlcyByZXF1ZXN0ZWQuCisgICAgLS0gQWRkIGVycm9yIHJlcG9ydGluZyBiYWNrIHRvIGFwcGxpY2F0aW9uIGZvciBVQVJUIGVycm9yIGNvbmRpdGlvbnMuCisgICAgLS0gQWRkIHN1cHBvcnQgZm9yIGZsdXNoIGlvY3Rscy4KKyAgICAtLSBBZGQgZXZlcnl0aGluZyBlbHNlIHRoYXQgaXMgbWlzc2luZyA6KQorCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IFdpbGxpYW0KKyAgR3JlYXRob3VzZSBhdCB3Z3JlYXRob3VzZUBzbXZhLmNvbQorCisKK0VtcGVnIGVtcGVnLWNhciBNYXJrIEkvSUkgRHJpdmVyCisKKyAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIHRvIHByb3ZpZGUgY29ubmVjdGl2aXR5IHN1cHBvcnQgZm9yIHRoZQorICBjbGllbnQgc3luY2hyb25pemF0aW9uIHRvb2xzIGZvciBhbiBFbXBlZyBlbXBlZy1jYXIgbXAzIHBsYXllci4KKworICBUaXBzOgorICAgICogRG9uJ3QgZm9yZ2V0IHRvIGNyZWF0ZSB0aGUgZGV2aWNlIG5vZGVzIGZvciB0dHlVU0J7MCwxLDIsLi4ufQorICAgICogbW9kcHJvYmUgZW1wZWcgKG1vZHByb2JlIGlzIHlvdXIgZnJpZW5kKQorICAgICogZW1wdG9vbCAtLXVzYiAvZGV2L3R0eVVTQjAgKG9yIHdoYXRldmVyIHlvdSBuYW1lZCB5b3VyIGRldmljZSBub2RlKQorCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdhcnkKKyAgQnJ1YmFrZXIgYXQgeGF2eWVyQGl4Lm5ldGNvbS5jb20KKworCitNQ1QgVVNCIFNpbmdsZSBQb3J0IFNlcmlhbCBBZGFwdGVyIFUyMzIKKworICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIE1DVCBVU0ItUlMyMzIgQ29udmVydGVyICgyNSBwaW4sIE1vZGVsIE5vLgorICBVMjMyLVAyNSkgZnJvbSBNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kgQ29ycC4gKHRoZXJlIGlzIGFsc28gYSA5IHBpbgorICBNb2RlbCBOby4gVTIzMi1QOSkuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkZXZpY2UgY2FuIGJlIGZvdW5kIGF0CisgIHRoZSBtYW51ZmFjdHVyZSdzIHdlYi1zaXRlOiBodHRwOi8vd3d3Lm1jdC5jb20udHcuCisKKyAgVGhlIGRyaXZlciBpcyBnZW5lcmFsbHkgd29ya2luZywgdGhvdWdoIGl0IHN0aWxsIG5lZWRzIHNvbWUgbW9yZSB0ZXN0aW5nLgorICBJdCBpcyBkZXJpdmVkIGZyb20gdGhlIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzIGRyaXZlciBhbmQgaXRzCisgIFRPRE8gbGlzdCBpcyB2YWxpZCBmb3IgdGhpcyBkcml2ZXIgYXMgd2VsbC4KKworICBUaGlzIGRyaXZlciBoYXMgYWxzbyBiZWVuIGZvdW5kIHRvIHdvcmsgZm9yIG90aGVyIHByb2R1Y3RzLCB3aGljaCBoYXZlCisgIHRoZSBzYW1lIFZlbmRvciBJRCBidXQgZGlmZmVyZW50IFByb2R1Y3QgSURzLiBTaXRlY29tJ3MgVTIzMi1QMjUgc2VyaWFsCisgIGNvbnZlcnRlciB1c2VzIFByb2R1Y3QgSUQgMHgyMzAgYW5kIFZlbmRvciBJRCAweDcxMSBhbmQgd29ya3Mgd2l0aCB0aGlzCisgIGRyaXZlci4gQWxzbywgRC1MaW5rJ3MgRFUtSDNTUCBVU0IgQkFZIGFsc28gd29ya3Mgd2l0aCB0aGlzIGRyaXZlci4KKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBXb2xmZ2FuZworICBHcmFuZGVnZ2VyIGF0IHdvbGZnYW5nQGNlcy5jaAorCisKK0luc2lkZSBPdXQgTmV0d29ya3MgRWRnZXBvcnQgRHJpdmVyCisKKyAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgYWxsIGRldmljZXMgbWFkZSBieSBJbnNpZGUgT3V0IE5ldHdvcmtzLCBzcGVjaWZpY2FsbHkKKyAgdGhlIGZvbGxvd2luZyBtb2RlbHM6CisgICAgICAgRWRnZXBvcnQvNAorICAgICAgIFJhcGlkcG9ydC80CisgICAgICAgRWRnZXBvcnQvNHQKKyAgICAgICBFZGdlcG9ydC8yCisgICAgICAgRWRnZXBvcnQvNGkKKyAgICAgICBFZGdlcG9ydC8yaQorICAgICAgIEVkZ2Vwb3J0LzQyMQorICAgICAgIEVkZ2Vwb3J0LzIxCisgICAgICAgRWRnZXBvcnQvOAorICAgICAgIEVkZ2Vwb3J0LzggRHVhbAorICAgICAgIEVkZ2Vwb3J0LzJEOAorICAgICAgIEVkZ2Vwb3J0LzREOAorICAgICAgIEVkZ2Vwb3J0LzhpCisgICAgICAgRWRnZXBvcnQvMiBESU4KKyAgICAgICBFZGdlcG9ydC80IERJTgorICAgICAgIEVkZ2Vwb3J0LzE2IER1YWwKKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdCBHcmVnCisgIEtyb2FoLUhhcnRtYW4gYXQgZ3JlZ0Brcm9haC5jb20KKworCitSRUlORVIgU0NUIGN5YmVySmFjayBwaW5wYWQvZS1jb20gVVNCIGNoaXBjYXJkIHJlYWRlcgorICAgCisgIEludGVyZmFjZSB0byBJU08gNzgxNiBjb21wYXRpYmxlIGNvbnRhY3RiYXNlZCBjaGlwY2FyZHMsIGUuZy4gR1NNIFNJTXMuCisgIAorICBDdXJyZW50IHN0YXR1czoKKyAgICBUaGlzIGlzIHRoZSBrZXJuZWwgcGFydCBvZiB0aGUgZHJpdmVyIGZvciB0aGlzIFVTQiBjYXJkIHJlYWRlci4KKyAgICBUaGVyZSBpcyBhbHNvIGEgdXNlciBwYXJ0IGZvciBhIENULUFQSSBkcml2ZXIgYXZhaWxhYmxlLiBBIHNpdGUKKyAgICBmb3IgZG93bmxvYWRpbmcgaXMgVEJBLiBGb3Igbm93LCB5b3UgY2FuIHJlcXVlc3QgaXQgZnJvbSB0aGUKKyAgICBtYWludGFpbmVyIChsaW51eC11c2JAc2lpLmxpKS4KKworICBGb3IgYW55IHF1ZXN0aW9ucyBvciBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBwbGVhc2UgY29udGFjdAorICBsaW51eC11c2JAc2lpLmxpCisKKworUHJvbGlmaWMgUEwyMzAzIERyaXZlcgorCisgIFRoaXMgZHJpdmVyIHN1cHBvcnQgYW55IGRldmljZSB0aGF0IGhhcyB0aGUgUEwyMzAzIGNoaXAgZnJvbSBQcm9saWZpYworICBpbiBpdC4gIFRoaXMgaW5jbHVkZXMgYSBudW1iZXIgb2Ygc2luZ2xlIHBvcnQgVVNCIHRvIHNlcmlhbAorICBjb252ZXJ0ZXJzIGFuZCBVU0IgR1BTIGRldmljZXMuICBEZXZpY2VzIGZyb20gQXRlbiAodGhlIFVDLTIzMikgYW5kCisgIElPLURhdGEgd29yayB3aXRoIHRoaXMgZHJpdmVyLgorCisgIEZvciBhbnkgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIHBsZWFzZSBjb250YWN0IEdyZWcKKyAgS3JvYWgtSGFydG1hbiBhdCBncmVnQGtyb2FoLmNvbQorICAKKworS0w1S1VTQjEwNSBjaGlwc2V0IC8gUGFsbUNvbm5lY3QgVVNCIHNpbmdsZS1wb3J0IGFkYXB0ZXIKKyAgCitDdXJyZW50IHN0YXR1czoKKyAgVGhlIGRyaXZlciB3YXMgcHV0IHRvZ2V0aGVyIGJ5IGxvb2tpbmcgYXQgdGhlIHVzYiBidXMgdHJhbnNhY3Rpb25zCisgIGRvbmUgYnkgUGFsbSdzIGRyaXZlciB1bmRlciBXaW5kb3dzLCBzbyBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5IGlzCisgIHN0aWxsIG1pc3NpbmcuICBOb3RhYmx5LCBzZXJpYWwgaW9jdGxzIGFyZSBzb21ldGltZXMgZmFrZWQgb3Igbm90IHlldAorICBpbXBsZW1lbnRlZC4gIFN1cHBvcnQgZm9yIGZpbmRpbmcgb3V0IGFib3V0IERTUiBhbmQgQ1RTIGxpbmUgc3RhdHVzIGlzCisgIGhvd2V2ZXIgaW1wbGVtZW50ZWQgKHRob3VnaCBub3QgbmljZWx5KSwgc28geW91ciBmYXZvcml0ZSBhdXRvcGlsb3QoMSkKKyAgYW5kIHBpbG90LW1hbmFnZXIgLWRhZW1vbiBjYWxscyB3aWxsIHdvcmsuICBCYXVkIHJhdGVzIHVwIHRvIDExNTIwMAorICBhcmUgc3VwcG9ydGVkLCBidXQgaGFuZHNoYWtpbmcgKHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpcyBub3QsIHdoaWNoIGlzCisgIHdoeSBpdCBpcyB3aXNlIHRvIGN1dCBkb3duIG9uIHRoZSByYXRlIHVzZWQgaXMgd2lzZSBmb3IgbGFyZ2UKKyAgdHJhbnNmZXJzIHVudGlsIHRoaXMgaXMgc2V0dGxlZC4KKyAgCitPcHRpb25zIHN1cHBvcnRlZDoKKyAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUgeW91IGNhbiBwYXNzIHRoZSBmb2xsb3dpbmcKKyAgb3B0aW9ucyB0byBpdDoKKyAgZGVidWcJCQktIGV4dHJhIHZlcmJvc2UgZGVidWdnaW5nIGluZm8KKyAgCQkJICAoZGVmYXVsdDogMDsgbm9uemVybyBlbmFibGVzKQorICB1c2VfbG93bGF0ZW5jeQktIHVzZSBsb3dfbGF0ZW5jeSBmbGFnIHRvIHNwZWVkIHVwIHR0eSBsYXllcgorCQkJICB3aGVuIHJlYWRpbmcgZnJvbSBmcm9tIHRoZSBkZXZpY2UuCisJCQkgIChkZWZhdWx0OiAwOyBub256ZXJvIGVuYWJsZXMpCisKKyAgU2VlIGh0dHA6Ly93d3cudXVoYXVzLmRlL2xpbnV4L3BhbG1jb25uZWN0Lmh0bWwgZm9yIHVwLXRvLWRhdGUKKyAgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIuCisKKworR2VuZXJpYyBTZXJpYWwgZHJpdmVyCisKKyAgSWYgeW91ciBkZXZpY2UgaXMgbm90IG9uZSBvZiB0aGUgYWJvdmUgbGlzdGVkIGRldmljZXMsIGNvbXBhdGlibGUgd2l0aAorICB0aGUgYWJvdmUgbW9kZWxzLCB5b3UgY2FuIHRyeSBvdXQgdGhlICJnZW5lcmljIiBpbnRlcmZhY2UuIFRoaXMKKyAgaW50ZXJmYWNlIGRvZXMgbm90IHByb3ZpZGUgYW55IHR5cGUgb2YgY29udHJvbCBtZXNzYWdlcyBzZW50IHRvIHRoZQorICBkZXZpY2UsIGFuZCBkb2VzIG5vdCBzdXBwb3J0IGFueSBraW5kIG9mIGRldmljZSBmbG93IGNvbnRyb2wuIEFsbCB0aGF0CisgIGlzIHJlcXVpcmVkIG9mIHlvdXIgZGV2aWNlIGlzIHRoYXQgaXQgaGFzIGF0IGxlYXN0IG9uZSBidWxrIGluIGVuZHBvaW50LAorICBvciBvbmUgYnVsayBvdXQgZW5kcG9pbnQuIAorICAKKyAgVG8gZW5hYmxlIHRoZSBnZW5lcmljIGRyaXZlciB0byByZWNvZ25pemUgeW91ciBkZXZpY2UsIGJ1aWxkIHRoZSBkcml2ZXIKKyAgYXMgYSBtb2R1bGUgYW5kIGxvYWQgaXQgYnkgdGhlIGZvbGxvd2luZyBpbnZvY2F0aW9uOgorCWluc21vZCB1c2JzZXJpYWwgdmVuZG9yPTB4IyMjIyBwcm9kdWN0PTB4IyMjIworICB3aGVyZSB0aGUgIyMjIyBpcyByZXBsYWNlZCB3aXRoIHRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgeW91ciBkZXZpY2UncworICB2ZW5kb3IgaWQgYW5kIHByb2R1Y3QgaWQuCisKKyAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVzZWQgdG8gY29ubmVjdCB0byB0aGUgTmV0Q2hpcCBVU0IKKyAgZGV2ZWxvcG1lbnQgYm9hcmQsIHByb3ZpZGluZyBhIHdheSB0byBkZXZlbG9wIFVTQiBmaXJtd2FyZSB3aXRob3V0CisgIGhhdmluZyB0byB3cml0ZSBhIGN1c3RvbSBkcml2ZXIuCisKKyAgRm9yIGFueSBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGNvbnRhY3QgR3JlZworICBLcm9haC1IYXJ0bWFuIGF0IGdyZWdAa3JvYWguY29tCisKKworQ09OVEFDVDoKKworICBJZiBhbnlvbmUgaGFzIGFueSBwcm9ibGVtcyB1c2luZyB0aGVzZSBkcml2ZXJzLCB3aXRoIGFueSBvZiB0aGUgYWJvdmUKKyAgc3BlY2lmaWVkIHByb2R1Y3RzLCBwbGVhc2UgY29udGFjdCB0aGUgc3BlY2lmaWMgZHJpdmVyJ3MgYXV0aG9yIGxpc3RlZAorICBhYm92ZSwgb3Igam9pbiB0aGUgTGludXgtVVNCIG1haWxpbmcgbGlzdCAoaW5mb3JtYXRpb24gb24gam9pbmluZyB0aGUKKyAgbWFpbGluZyBsaXN0LCBhcyB3ZWxsIGFzIGEgbGluayB0byBpdHMgc2VhcmNoYWJsZSBhcmNoaXZlIGlzIGF0CisgIGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy8gKQorCisKK0dyZWcgS3JvYWgtSGFydG1hbgorZ3JlZ0Brcm9haC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CkBAIC0wLDAgKzEsMTU2IEBACisqIEludHJvZHVjdGlvbgorCitUaGUgbmFtZSAidXNibW9uIiBpbiBsb3dlcmNhc2UgcmVmZXJzIHRvIGEgZmFjaWxpdHkgaW4ga2VybmVsIHdoaWNoIGlzCit1c2VkIHRvIGNvbGxlY3QgdHJhY2VzIG9mIEkvTyBvbiB0aGUgVVNCIGJ1cy4gVGhpcyBmdW5jdGlvbiBpcyBhbmFsb2dvdXMKK3RvIGEgcGFja2V0IHNvY2tldCB1c2VkIGJ5IG5ldHdvcmsgbW9uaXRvcmluZyB0b29scyBzdWNoIGFzIHRjcGR1bXAoMSkKK29yIEV0aGVyZWFsLiBTaW1pbGFybHksIGl0IGlzIGV4cGVjdGVkIHRoYXQgYSB0b29sIHN1Y2ggYXMgdXNiZHVtcCBvcgorVVNCTW9uICh3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzKSBpcyB1c2VkIHRvIGV4YW1pbmUgcmF3IHRyYWNlcyBwcm9kdWNlZAorYnkgdXNibW9uLgorCitUaGUgdXNibW9uIHJlcG9ydHMgcmVxdWVzdHMgbWFkZSBieSBwZXJpcGhlcmFsLXNwZWNpZmljIGRyaXZlcnMgdG8gSG9zdAorQ29udHJvbGxlciBEcml2ZXJzIChIQ0QpLiBTbywgaWYgSENEIGlzIGJ1Z2d5LCB0aGUgdHJhY2VzIHJlcG9ydGVkIGJ5Cit1c2Jtb24gbWF5IG5vdCBjb3JyZXNwb25kIHRvIGJ1cyB0cmFuc2FjdGlvbnMgcHJlY2lzZWx5LiBUaGlzIGlzIHRoZSBzYW1lCitzaXR1YXRpb24gYXMgd2l0aCB0Y3BkdW1wLgorCisqIEhvdyB0byB1c2UgdXNibW9uIHRvIGNvbGxlY3QgcmF3IHRleHQgdHJhY2VzCisKK1VubGlrZSB0aGUgcGFja2V0IHNvY2tldCwgdXNibW9uIGhhcyBhbiBpbnRlcmZhY2Ugd2hpY2ggcHJvdmlkZXMgdHJhY2VzCitpbiBhIHRleHQgZm9ybWF0LiBUaGlzIGlzIHVzZWQgZm9yIHR3byBwdXJwb3Nlcy4gRmlyc3QsIGl0IHNlcnZlcyBhcyBhCitjb21tb24gdHJhY2UgZXhjaGFuZ2UgZm9ybWF0IGZvciB0b29scyB3aGlsZSBtb3N0IHNvcGhpc3RpY2F0ZWQgZm9ybWF0cworYXJlIGZpbmFsaXplZC4gU2Vjb25kLCBodW1hbnMgY2FuIHJlYWQgaXQgaW4gY2FzZSB0b29scyBhcmUgbm90IGF2YWlsYWJsZS4KKworVG8gY29sbGVjdCBhIHJhdyB0ZXh0IHRyYWNlLCBleGVjdXRlIGZvbGxvd2luZyBzdGVwcy4KKworMS4gUHJlcGFyZQorCitNb3VudCBkZWJ1Z2ZzIChpdCBoYXMgdG8gYmUgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uKSwgYW5kCitsb2FkIHRoZSB1c2Jtb24gbW9kdWxlIChpZiBidWlsdCBhcyBtb2R1bGUpLiBUaGUgc2Vjb25kIHN0ZXAgaXMgc2tpcHBlZAoraWYgdXNibW9uIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4KKworIyBtb3VudCAtdCBkZWJ1Z2ZzIG5vbmVfZGVidWdzIC9zeXMva2VybmVsL2RlYnVnCisjIG1vZHByb2JlIHVzYm1vbgorCitWZXJpZnkgdGhhdCBidXMgc29ja2V0cyBhcmUgcHJlc2VudC4KKworW3Jvb3RAbGVtYmFzIHphaXRjZXZdIyBscyAvc3lzL2tlcm5lbC9kZWJ1Zy91c2Jtb24KKzFzICAxdCAgMnMgIDJ0ICAzcyAgM3QgIDRzICA0dAorW3Jvb3RAbGVtYmFzIHphaXRjZXZdIworCisjIGxzIC9zeXMva2VybmVsCisKKzIuIEZpbmQgd2hpY2ggYnVzIGNvbm5lY3RzIHRvIHRoZSBkZXNpcmVkIGRldmljZQorCitSdW4gImNhdCAvcHJvYy9idXMvdXNiL2RldmljZXMiLCBhbmQgZmluZCB0aGUgVC1saW5lIHdoaWNoIGNvcnJlc3BvbmRzIHRvCit0aGUgZGV2aWNlLiBVc3VhbGx5IHlvdSBkbyBpdCBieSBsb29raW5nIGZvciB0aGUgdmVuZG9yIHN0cmluZy4gSWYgeW91IGhhdmUKK21hbnkgc2ltaWxhciBkZXZpY2VzLCB1bnBsdWcgb25lIGFuZCBjb21wYXJlIHR3byAvcHJvYy9idXMvdXNiL2RldmljZXMgb3V0cHV0cy4KK1RoZSBULWxpbmUgd2lsbCBoYXZlIGEgYnVzIG51bWJlci4gRXhhbXBsZToKKworVDogIEJ1cz0wMyBMZXY9MDEgUHJudD0wMSBQb3J0PTAwIENudD0wMSBEZXYjPSAgMiBTcGQ9MTIgIE14Q2g9IDAKK0Q6ICBWZXI9IDEuMTAgQ2xzPTAwKD5pZmMgKSBTdWI9MDAgUHJvdD0wMCBNeFBTPSA4ICNDZmdzPSAgMQorUDogIFZlbmRvcj0wNTU3IFByb2RJRD0yMDA0IFJldj0gMS4wMAorUzogIE1hbnVmYWN0dXJlcj1BVEVOCitTOiAgUHJvZHVjdD1VQzEwMEtNIFYyLjAwCisKK0J1cz0wMyBtZWFucyBpdCdzIGJ1cyAzLgorCiszLiBTdGFydCAnY2F0JworCisjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy91c2Jtb24vM3QgPiAvdG1wLzEubW9uLm91dAorCitUaGlzIHByb2Nlc3Mgd2lsbCBiZSByZWFkaW5nIHVudGlsIGtpbGxlZC4gTmF0dXJhbGx5LCB0aGUgb3V0cHV0IGNhbiBiZQorcmVkaXJlY3RlZCB0byBhIGRlc2lyYWJsZSBsb2NhdGlvbi4gVGhpcyBpcyBwcmVmZXJyZWQsIGJlY2F1c2UgaXQgaXMgZ29pbmcKK3RvIGJlIHF1aXRlIGxvbmcuCisKKzQuIFBlcmZvcm0gdGhlIGRlc2lyZWQgb3BlcmF0aW9uIG9uIHRoZSBVU0IgYnVzCisKK1RoaXMgaXMgd2hlcmUgeW91IGRvIHNvbWV0aGluZyB0aGF0IGNyZWF0ZXMgdGhlIHRyYWZmaWM6IHBsdWcgaW4gYSBmbGFzaCBrZXksCitjb3B5IGZpbGVzLCBjb250cm9sIGEgd2ViY2FtLCBldGMuCisKKzUuIEtpbGwgY2F0CisKK1VzdWFsbHkgaXQncyBkb25lIHdpdGggYSBrZXlib2FyZCBpbnRlcnJ1cHQgKENvbnRyb2wtQykuCisKK0F0IHRoaXMgcG9pbnQgdGhlIG91dHB1dCBmaWxlICgvdG1wLzEubW9uLm91dCBpbiB0aGlzIGV4YW1wbGUpIGNhbiBiZSBzYXZlZCwKK3NlbnQgYnkgZS1tYWlsLCBvciBpbnNwZWN0ZWQgd2l0aCBhIHRleHQgZWRpdG9yLiBJbiB0aGUgbGFzdCBjYXNlIG1ha2Ugc3VyZQordGhhdCB0aGUgZmlsZSBzaXplIGlzIG5vdCBleGNlc3NpdmUgZm9yIHlvdXIgZmF2b3VyaXRlIGVkaXRvci4KKworKiBSYXcgdGV4dCBkYXRhIGZvcm1hdAorCitUaGUgJzB0JyB0eXBlIGRhdGEgY29uc2lzdHMgb2YgYSBzdHJlYW0gb2YgZXZlbnRzLCBzdWNoIGFzIFVSQiBzdWJtaXNzaW9uLAorVVJCIGNhbGxiYWNrLCBzdWJtaXNzaW9uIGVycm9yLiBFdmVyeSBldmVudCBpcyBhIHRleHQgbGluZSwgd2hpY2ggY29uc2lzdHMKK29mIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLiBUaGUgbnVtYmVyIG9mIHBvc2l0aW9uIG9mIHdvcmRzIG1heSBkZXBlbmQKK29uIHRoZSBldmVudCB0eXBlLCBidXQgdGhlcmUgaXMgYSBzZXQgb2Ygd29yZHMsIGNvbW1vbiBmb3IgYWxsIHR5cGVzLgorCitIZXJlIGlzIHRoZSBsaXN0IG9mIHdvcmRzLCBmcm9tIGxlZnQgdG8gcmlnaHQ6CistIFVSQiBUYWcuIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBVUkJzIGlzIG5vcm1hbGx5IGEga2VybmVsIG1vZGUgYWRkcmVzcworIG9mIHRoZSBVUkIgc3RydWN0dXJlIGluIGhleGFkZWNpbWFsLgorLSBUaW1lc3RhbXAgaW4gbWljcm9zZWNvbmRzLCBhIGRlY2ltYWwgbnVtYmVyLiBUaGUgdGltZXN0YW1wJ3MgcmVzb2x1dGlvbgorICBkZXBlbmRzIG9uIGF2YWlsYWJsZSBjbG9jaywgYW5kIHNvIGl0IGNhbiBiZSBtdWNoIHdvcnNlIHRoYW4gYSBtaWNyb3NlY29uZAorICAoaWYgdGhlIGltcGxlbWVudGF0aW9uIHVzZXMgamlmZmllcywgZm9yIGV4YW1wbGUpLgorLSBFdmVudCBUeXBlLiBUaGlzIHR5cGUgcmVmZXJzIHRvIHRoZSBmb3JtYXQgb2YgdGhlIGV2ZW50LCBub3QgVVJCIHR5cGUuCisgIEF2YWlsYWJsZSB0eXBlcyBhcmU6IFMgLSBzdWJtaXNzaW9uLCBDIC0gY2FsbGJhY2ssIEUgLSBzdWJtaXNzaW9uIGVycm9yLgorLSAiUGlwZSIuIFRoZSBwaXBlIGNvbmNlcHQgaXMgZGVwcmVjYXRlZC4gVGhpcyBpcyBhIGNvbXBvc2l0ZSB3b3JkLCB1c2VkIHRvCisgIGJlIGRlcml2ZWQgZnJvbSBpbmZvcm1hdGlvbiBpbiBwaXBlcy4gSXQgY29uc2lzdHMgb2YgdGhyZWUgZmllbGRzLCBzZXBhcmF0ZWQKKyAgYnkgY29sb25zOiBVUkIgdHlwZSBhbmQgZGlyZWN0aW9uLCBEZXZpY2UgYWRkcmVzcywgRW5kcG9pbnQgbnVtYmVyLgorICBUeXBlIGFuZCBkaXJlY3Rpb24gYXJlIGVuY29kZWQgd2l0aCB0d28gYnl0ZXMgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CisgICAgQ2kgQ28gICBDb250cm9sIGlucHV0IGFuZCBvdXRwdXQKKyAgICBaaSBabyAgIElzb2Nocm9ub3VzIGlucHV0IGFuZCBvdXRwdXQKKyAgICBJaSBJbyAgIEludGVycnVwdCBpbnB1dCBhbmQgb3V0cHV0CisgICAgQmkgQm8gICBCdWxrIGlucHV0IGFuZCBvdXRwdXQKKyAgRGV2aWNlIGFkZHJlc3MgYW5kIEVuZHBvaW50IG51bWJlciBhcmUgZGVjaW1hbCBudW1iZXJzIHdpdGggbGVhZGluZyB6ZXJvZXMKKyAgb3IgMyBhbmQgMiBwb3NpdGlvbnMsIGNvcnJlc3BvbmRpbmdseS4KKy0gVVJCIFN0YXR1cy4gVGhpcyBmaWVsZCBtYWtlcyBubyBzZW5zZSBmb3Igc3VibWlzc2lvbnMsIGJ1dCBpcyBwcmVzZW50CisgIHRvIGhlbHAgc2NyaXB0cyB3aXRoIHBhcnNpbmcuIEluIGVycm9yIGNhc2UsIGl0IGNvbnRhaW5zIHRoZSBlcnJvciBjb2RlLgorLSBEYXRhIExlbmd0aC4gVGhpcyBpcyB0aGUgYWN0dWFsIGxlbmd0aCBpbiB0aGUgVVJCLgorLSBEYXRhIHRhZy4gVGhlIHVzYm1vbiBtYXkgbm90IGFsd2F5cyBjYXB0dXJlIGRhdGEsIGV2ZW4gaWYgbGVuZ3RoIGlzIG5vbnplcm8uCisgIE9ubHkgaWYgdGFnIGlzICc9JywgdGhlIGRhdGEgd29yZHMgYXJlIHByZXNlbnQuCistIERhdGEgd29yZHMgZm9sbG93LCBpbiBiaWcgZW5kaWFuIGhleGFkZWNpbWFsIGZvcm1hdC4gTm90aWNlIHRoYXQgdGhleSBhcmUKKyAgbm90IG1hY2hpbmUgd29yZHMsIGJ1dCByZWFsbHkganVzdCBhIGJ5dGUgc3RyZWFtIHNwbGl0IGludG8gd29yZHMgdG8gbWFrZQorICBpdCBlYXNpZXIgdG8gcmVhZC4gVGh1cywgdGhlIGxhc3Qgd29yZCBtYXkgY29udGFpbiBmcm9tIG9uZSB0byBmb3VyIGJ5dGVzLgorICBUaGUgbGVuZ3RoIG9mIGNvbGxlY3RlZCBkYXRhIGlzIGxpbWl0ZWQgYW5kIGNhbiBiZSBsZXNzIHRoYW4gdGhlIGRhdGEgbGVuZ3RoCisgIHJlcG9ydCBpbiBEYXRhIExlbmd0aCB3b3JkLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2YgY29kZSB0byByZWFkIHRoZSBkYXRhIHN0cmVhbSBpbiBhIHdlbGwga25vd24gcHJvZ3JhbW1pbmcKK2xhbmd1YWdlOgorCitjbGFzcyBQYXJzZWRMaW5lIHsKKwlpbnQgZGF0YV9sZW47CQkvKiBBdmFpbGFibGUgbGVuZ3RoIG9mIGRhdGEgKi8KKwlieXRlIGRhdGFbXTsKKworCXZvaWQgcGFyc2VEYXRhKFN0cmluZ1Rva2VuaXplciBzdCkgeworCQlpbnQgYXZhaWx3b3JkcyA9IHN0LmNvdW50VG9rZW5zKCk7CisJCWRhdGEgPSBuZXcgYnl0ZVthdmFpbHdvcmRzICogNF07CisJCWRhdGFfbGVuID0gMDsKKwkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJU3RyaW5nIGRhdGFfc3RyID0gc3QubmV4dFRva2VuKCk7CisJCQlpbnQgbGVuID0gZGF0YV9zdHIubGVuZ3RoKCkgLyAyOworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCQlkYXRhW2RhdGFfbGVuXSA9IEJ5dGUucGFyc2VCeXRlKAorCQkJCSAgICBkYXRhX3N0ci5zdWJzdHJpbmcoaSoyLCBpKjIgKyAyKSwKKwkJCQkgICAgMTYpOworCQkJCWRhdGFfbGVuKys7CisJCQl9CisJCX0KKwl9Cit9CisKK1RoaXMgZm9ybWF0IGlzIG9idmlvdXNseSBkZWZpY2llbnQuIEZvciBleGFtcGxlLCB0aGUgc2V0dXAgcGFja2V0IGZvciBjb250cm9sCit0cmFuc2ZlcnMgaXMgbm90IGRlbGl2ZXJlZC4gVGhpcyB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCitFeGFtcGxlczoKKworQW4gaW5wdXQgY29udHJvbCB0cmFuc2ZlciB0byBnZXQgYSBwb3J0IHN0YXR1czoKKworZDc0ZmY5YTAgMjY0MDI4ODE5NiBTIENpOjAwMTowMCAtMTE1IDQgPAorZDc0ZmY5YTAgMjY0MDI4ODIwMiBDIENpOjAwMTowMCAwIDQgPSAwMTAxMDEwMAorCitBbiBvdXRwdXQgYnVsayB0cmFuc2ZlciB0byBzZW5kIGEgU0NTSSBjb21tYW5kIDB4NUUgaW4gYSAzMS1ieXRlIEJ1bGsgd3JhcHBlcgordG8gYSBzdG9yYWdlIGRldmljZSBhdCBhZGRyZXNzIDU6CisKK2RkNjVmMGU4IDQxMjgzNzk3NTIgUyBCbzowMDU6MDIgLTExNSAzMSA9IDU1NTM0MjQzIDVlMDAwMDAwIDAwMDAwMDAwIDAwMDAwNjAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMAorZGQ2NWYwZTggNDEyODM3OTgwOCBDIEJvOjAwNTowMiAwIDMxID4KKworKiBSYXcgYmluYXJ5IGZvcm1hdCBhbmQgQVBJCisKK1RCRApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi93OTk2OGNmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGE0NzczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2Ivdzk5NjhjZi50eHQKQEAgLTAsMCArMSw0ODEgQEAKKworICAgICAgICAgICAgICAgICAgIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwIAorICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIGZvciBMaW51eCAyLjYgKGJhc2ljIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRG9jdW1lbnRhdGlvbiAtCisKKworSW5kZXgKKz09PT09CisxLiAgQ29weXJpZ2h0CisyLiAgRGlzY2xhaW1lcgorMy4gIExpY2Vuc2UKKzQuICBPdmVydmlldworNS4gIFN1cHBvcnRlZCBkZXZpY2VzCis2LiAgTW9kdWxlIGRlcGVuZGVuY2llcworNy4gIE1vZHVsZSBsb2FkaW5nCis4LiAgTW9kdWxlIHBhcmFtYXRlcnMKKzkuICBDb250YWN0IGluZm9ybWF0aW9uCisxMC4gQ3JlZGl0cworCisKKzEuIENvcHlyaWdodAorPT09PT09PT09PT09CitDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+CisKKworMi4gRGlzY2xhaW1lcgorPT09PT09PT09PT09PQorV2luYm9uZCBpcyBhIHRyYWRlbWFyayBvZiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uLgorVGhpcyBzb2Z0d2FyZSBpcyBub3Qgc3BvbnNvcmVkIG9yIGRldmVsb3BlZCBieSBXaW5ib25kLgorCisKKzMuIExpY2Vuc2UKKz09PT09PT09PT0KK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKworNC4gT3ZlcnZpZXcKKz09PT09PT09PT09CitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgdmlkZW8gc3RyZWFtaW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlcyBtb3VudGluZworV2luYm9uZCBXOTk2N0NGIGFuZCBXaW5ib25kIFc5OTY4Q0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwcy4gT1Y2ODEKK2Jhc2VkIGNhbWVyYXMgc2hvdWxkIGJlIHN1cHBvcnRlZCBhcyB3ZWxsLgorCitUaGUgZHJpdmVyIGlzIGRpdmlkZWQgaW50byB0d28gbW9kdWxlczogdGhlIGJhc2ljIG9uZSwgInc5OTY4Y2YiLCBpcyBuZWVkZWQgZm9yCit0aGUgc3VwcG9ydGVkIGRldmljZXMgdG8gd29yazsgdGhlIHNlY29uZCBvbmUsICJ3OTk2OGNmLXZwcCIsIGlzIGFuIG9wdGlvbmFsCittb2R1bGUsIHdoaWNoIHByb3ZpZGVzIHNvbWUgdXNlZnVsIHZpZGVvIHBvc3QtcHJvY2Vzc2luZyBmdW5jdGlvbnMgbGlrZSB2aWRlbworZGVjb2RpbmcsIHVwLXNjYWxpbmcgYW5kIGNvbG91ciBjb252ZXJzaW9ucy4gT25jZSB0aGUgZHJpdmVyIGlzIGluc3RhbGxlZCwKK2V2ZXJ5IHRpbWUgYW4gYXBwbGljYXRpb24gdHJpZXMgdG8gb3BlbiBhIHJlY29nbml6ZWQgZGV2aWNlLCAidzk5NjhjZiIgY2hlY2tzCit0aGUgcHJlc2VuY2Ugb2YgdGhlICJ3OTk2OGNmLXZwcCIgbW9kdWxlIGFuZCBsb2FkcyBpdCBhdXRvbWF0aWNhbGx5IGJ5IGRlZmF1bHQuCisKK1BsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBvZmZpY2lhbCBrZXJuZWxzIGRvIG5vdCBpbmNsdWRlIHRoZSBzZWNvbmQgbW9kdWxlIGZvcgorcGVyZm9ybWFuY2UgcHVycG9zZXMuIEhvd2V2ZXIgaXQgaXMgYWx3YXlzIHJlY29tbWVuZGVkIHRvIGRvd25sb2FkIGFuZCBpbnN0YWxsCit0aGUgbGF0ZXN0IGFuZCBjb21wbGV0ZSByZWxlYXNlIG9mIHRoZSBkcml2ZXIsIHJlcGxhY2luZyB0aGUgZXhpc3Rpbmcgb25lLCBpZgorcHJlc2VudDogaXQgd2lsbCBiZSBzdGlsbCBldmVuIHBvc3NpYmxlIG5vdCB0byBsb2FkIHRoZSAidzk5NjhjZi12cHAiIG1vZHVsZSBhdAorYWxsLCBpZiB5b3UgZXZlciB3YW50IHRvLiBBbm90aGVyIGltcG9ydGFudCBtaXNzaW5nIGZlYXR1cmUgb2YgdGhlIHZlcnNpb24gaW4KK3RoZSBvZmZpY2lhbCBMaW51eCAyLjQga2VybmVscyBpcyB0aGUgd3JpdGVhYmxlIC9wcm9jIGZpbGVzeXN0ZW0gaW50ZXJmYWNlLgorCitUaGUgbGF0ZXN0IGFuZCBmdWxsLWZlYXR1cmVkIHZlcnNpb24gb2YgdGhlIFc5OTZbODddQ0YgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKK2h0dHA6Ly93d3cubGludXgtcHJvamVjdHMub3JnLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4KK3RoYXQgcGFja2FnZSwgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgaXQuCisKK1VwIHRvIDMyIGNhbWVyYXMgY2FuIGJlIGhhbmRsZWQgYXQgdGhlIHNhbWUgdGltZS4gVGhleSBjYW4gYmUgY29ubmVjdGVkIGFuZAorZGlzY29ubmVjdGVkIGZyb20gdGhlIGhvc3QgbWFueSB0aW1lcyB3aXRob3V0IHR1cm5pbmcgb2ZmIHRoZSBjb21wdXRlciwgaWYKK3lvdXIgc3lzdGVtIHN1cHBvcnRzIHRoZSBob3RwbHVnIGZhY2lsaXR5LgorCitUbyBjaGFuZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGVhY2ggY2FtZXJhLCBtYW55IHBhcmFtZXRlcnMgY2FuIGJlIHBhc3NlZAordGhyb3VnaCBjb21tYW5kIGxpbmUgd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBpbnRvIG1lbW9yeS4KKworVGhlIGRyaXZlciByZWxpZXMgb24gdGhlIFZpZGVvNExpbnV4LCBVU0IgYW5kIEkyQyBjb3JlIG1vZHVsZXMuIEl0IGhhcyBiZWVuCitkZXNpZ25lZCB0byBydW4gcHJvcGVybHkgb24gU01QIHN5c3RlbXMgYXMgd2VsbC4gQW4gYWRkaXRpb25hbCBtb2R1bGUsCisib3ZjYW1jaGlwIiwgaXMgbWFuZGF0b3J5OyBpdCBwcm92aWRlcyBzdXBwb3J0IGZvciBzb21lIE9tbmlWaXNpb24gaW1hZ2UKK3NlbnNvcnMgY29ubmVjdGVkIHRvIHRoZSBXOTk2Wzg3XUNGIGNoaXBzOyBpZiBmb3VuZCBpbiB0aGUgc3lzdGVtLCB0aGUgbW9kdWxlCit3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbG9hZGVkIGJ5IGRlZmF1bHQgKHByb3ZpZGVkIHRoYXQgdGhlIGtlcm5lbCBoYXMgYmVlbgorY29tcGlsZWQgd2l0aCB0aGUgYXV0b21hdGljIG1vZHVsZSBsb2FkaW5nIG9wdGlvbikuCisKKworNS4gU3VwcG9ydGVkIGRldmljZXMKKz09PT09PT09PT09PT09PT09PT09CitBdCB0aGUgbW9tZW50LCBrbm93biBXOTk2Wzg3XUNGIGFuZCBPVjY4MSBiYXNlZCBkZXZpY2VzIGFyZToKKy0gQXJvbWEgRGlnaSBQZW4gVkdBIER1YWwgTW9kZSBBREctNTAwMCAodW5rbm93biBpbWFnZSBzZW5zb3IpCistIEFWZXJNZWRpYSBBVmVyVFYgVVNCIChTQUE3MTExQSwgUGhpbGlwcyBGSTEyMTZNazIgdHVuZXIsIFBUMjMxM0wgYXVkaW8gY2hpcCkKKy0gQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyAoT21uaVZpc2lvbiBPVjc2MTAgc2Vuc29yKQorLSBDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIFBsdXMgKE9tbmlWaXNpb24gT1Y3NjIwIHNlbnNvcikKKy0gTGVib24gTERDLTAzNUEgKHVua25vd24gaW1hZ2Ugc2Vuc29yKQorLSBFem9uaWNzIEVaLTgwMiBFWk1lZ2EgQ2FtIChPbW5pVmlzaW9uIE9WODYxMEMgc2Vuc29yKQorLSBPbW5pVmlzaW9uIE9WODYxMC1FREUgKE9tbmlWaXNpb24gT1Y4NjEwIHNlbnNvcikKKy0gT1BDT00gRGlnaSBQZW4gVkdBIER1YWwgTW9kZSBQZW4gQ2FtZXJhICh1bmtub3duIGltYWdlIHNlbnNvcikKKy0gUHJldGVjIERpZ2kgUGVuLUlJIChPbW5pVmlzaW9uIE9WNzYyMCBzZW5zb3IpCistIFByZXRlYyBEaWdpUGVuLTQ4MCAoT21uaVZpc2lvbiBPVjg2MTAgc2Vuc29yKQorCitJZiB5b3Uga25vdyBhbnkgb3RoZXIgVzk5Nls4N11DRiBvciBPVjY4MSBiYXNlZCBjYW1lcmFzLCBwbGVhc2UgY29udGFjdCBtZS4KKworVGhlIGxpc3QgYWJvdmUgZG9lcyBub3QgaW1wbHkgdGhhdCBhbGwgdGhvc2UgZGV2aWNlcyB3b3JrIHdpdGggdGhpcyBkcml2ZXI6IHVwCit1bnRpbCBub3cgb25seSB3ZWJjYW1zIHRoYXQgaGF2ZSBhbiBpbWFnZSBzZW5zb3Igc3VwcG9ydGVkIGJ5IHRoZSAib3ZjYW1jaGlwIgorbW9kdWxlIHdvcmsuIEtlcm5lbCBtZXNzYWdlcyB3aWxsIGFsd2F5cyB0ZWxsIHlvdSB3aGV0aGVyIHRoaXMgaXMgY2FzZS4KKworUG9zc2libGUgZXh0ZXJuYWwgbWljcm9jb250cm9sbGVycyBvZiB0aG9zZSB3ZWJjYW1zIGFyZSBub3Qgc3VwcG9ydGVkOiB0aGlzCittZWFucyB0aGF0IHN0aWxsIGltYWdlcyBjYW5ub3QgYmUgZG93bmxvYWRlZCBmcm9tIHRoZSBkZXZpY2UgbWVtb3J5LgorCitGdXJ0aGVybW9yZSwgaXQncyB3b3J0aCB0byBub3RlIHRoYXQgSSB3YXMgb25seSBhYmxlIHRvIHJ1biB0ZXN0cyBvbiBteQorIkNyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28iLiBEb25hdGlvbnMgb2Ygb3RoZXIgbW9kZWxzLCBmb3IKK2FkZGl0aW9uYWwgdGVzdGluZyBhbmQgZnVsbCBzdXBwb3J0LCB3b3VsZCBiZSBtdWNoIGFwcHJlY2lhdGVkLgorCisKKzYuIE1vZHVsZSBkZXBlbmRlbmNpZXMKKz09PT09PT09PT09PT09PT09PT09PT0KK0ZvciBpdCB0byB3b3JrIHByb3Blcmx5LCB0aGUgZHJpdmVyIG5lZWRzIGtlcm5lbCBzdXBwb3J0IGZvciBWaWRlbzRMaW51eCwgVVNCCithbmQgSTJDLCBhbmQgdGhlICJvdmNhbWNoaXAiIG1vZHVsZSBmb3IgdGhlIGltYWdlIHNlbnNvci4gTWFrZSBzdXJlIHlvdSBhcmUgbm90CithY3R1YWxseSB1c2luZyBhbnkgZXh0ZXJuYWwgIm92Y2FtY2hpcCIgbW9kdWxlLCBnaXZlbiB0aGF0IHRoZSBXOTk2Wzg3XUNGIAorZHJpdmVyIGRlcGVuZHMgb24gdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBwcmVzZW50IGluIHRoZSBvZmZpY2lhbCBrZXJuZWxzLgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCBiZSBlbmFibGVkIGFuZAorY29ycmVzcG9uZGluZyBtb2R1bGVzIG11c3QgYmUgY29tcGlsZWQ6CisKKwkjIE11bHRpbWVkaWEgZGV2aWNlcworCSMKKwlDT05GSUdfVklERU9fREVWPW0KKworCSMgSTJDIHN1cHBvcnQKKwkjCisJQ09ORklHX0kyQz1tCisKK1RoZSBJMkMgY29yZSBtb2R1bGUgY2FuIGJlIGNvbXBpbGVkIHN0YXRpY2FsbHkgaW4gdGhlIGtlcm5lbCBhcyB3ZWxsLgorCisJIyBPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQKKwkjCisJQ09ORklHX1ZJREVPX09WQ0FNQ0hJUD1tCisKKwkjIFVTQiBzdXBwb3J0CisJIworCUNPTkZJR19VU0I9bQorCitJbiBhZGRpdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBiZWluZyB1c2VkLCBvbmx5IG9uZSBvZiB0aGUgbW9kdWxlcworYmVsb3cgaXMgbmVjZXNzYXJ5OgorCisJIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKwkjCisJQ09ORklHX1VTQl9FSENJX0hDRD1tCisJQ09ORklHX1VTQl9VSENJX0hDRD1tCisJQ09ORklHX1VTQl9PSENJX0hDRD1tCisKK0FuZCBmaW5hbGx5OgorCisJIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCisJIworCUNPTkZJR19VU0JfVzk5NjhDRj1tCisKKworNy4gTW9kdWxlIGxvYWRpbmcKKz09PT09PT09PT09PT09PT09CitUbyB1c2UgdGhlIGRyaXZlciwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvYWQgdGhlICJ3OTk2OGNmIiBtb2R1bGUgaW50byBtZW1vcnkKK2FmdGVyIGV2ZXJ5IG90aGVyIG1vZHVsZSByZXF1aXJlZC4KKworTG9hZGluZyBjYW4gYmUgZG9uZSB0aGlzIHdheSwgZnJvbSByb290OgorCisJW3Jvb3RAbG9jYWxob3N0IGhvbWVdIyBtb2Rwcm9iZSB1c2Jjb3JlCisJW3Jvb3RAbG9jYWxob3N0IGhvbWVdIyBtb2Rwcm9iZSBpMmMtY29yZQorCVtyb290QGxvY2FsaG9zdCBob21lXSMgbW9kcHJvYmUgdmlkZW9kZXYKKwlbcm9vdEBsb2NhbGhvc3QgaG9tZV0jIG1vZHByb2JlIHc5OTY4Y2YKKworQXQgdGhpcyBwb2ludCB0aGUgcGVydGluZW50IGRldmljZXMgc2hvdWxkIGJlIHJlY29nbml6ZWQ6ICJkbWVzZyIgY2FuIGJlIHVzZWQKK3RvIGFuYWx5emUga2VybmVsIG1lc3NhZ2VzOgorCisJW3VzZXJAbG9jYWxob3N0IGhvbWVdJCBkbWVzZworCitUaGVyZSBhcmUgYSBsb3Qgb2YgcGFyYW1ldGVycyB0aGUgbW9kdWxlIGNhbiB1c2UgdG8gY2hhbmdlIHRoZSBkZWZhdWx0CitzZXR0aW5ncyBmb3IgZWFjaCBkZXZpY2UuIFRvIGxpc3QgZXZlcnkgcG9zc2libGUgcGFyYW1ldGVyIHdpdGggYSBicmllZgorZXhwbGFuYXRpb24gYWJvdXQgdGhlbSBhbmQgd2hpY2ggc3ludGF4IHRvIHVzZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gcnVuIHRoZQorIm1vZGluZm8iIGNvbW1hbmQ6CisKKwlbcm9vdEBsb2NhaG9zdCBob21lXSMgbW9kaW5mbyB3OTk2OGNmCisKKworOC4gTW9kdWxlIHBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09CitNb2R1bGUgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgICBvdm1vZF9sb2FkCitUeXBlOiAgICAgICAgICAgIGJvb2wKK1N5bnRheDogICAgICAgICAgPDB8MT4KK0Rlc2NyaXB0aW9uOiAgICAgQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgIElmIGVuYWJsZWQsICdpbnNtb2QnIHNlYXJjaGVzIGZvciB0aGUgcmVxdWlyZWQgJ292Y2FtY2hpcCcKKyAgICAgICAgICAgICAgICAgbW9kdWxlIGluIHRoZSBzeXN0ZW0sIGFjY29yZGluZyB0byBpdHMgY29uZmlndXJhdGlvbiwgYW5kCisgICAgICAgICAgICAgICAgIGxvYWRzIHRoYXQgbW9kdWxlIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWN0aW9uIGlzIHBlcmZvcm1lZCBhcworICAgICAgICAgICAgICAgICBvbmNlIHNvb24gYXMgdGhlICd3OTk2OGNmJyBtb2R1bGUgaXMgbG9hZGVkIGludG8gbWVtb3J5LgorRGVmYXVsdDogICAgICAgICAxCitOb3RlOiAgICAgICAgICAgIFRoZSBrZXJuZWwgbXVzdCBiZSBjb21waWxlZCB3aXRoIHRoZSBDT05GSUdfS01PRCBvcHRpb24KKyAgICAgICAgICAgICAgICAgZW5hYmxlZCBmb3IgdGhlICdvdmNhbWNoaXAnIG1vZHVsZSB0byBiZSBsb2FkZWQgYW5kIGZvcgorICAgICAgICAgICAgICAgICB0aGlzIHBhcmFtZXRlciB0byBiZSBwcmVzZW50LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIHZwcG1vZF9sb2FkCitUeXBlOiAgICAgICAgICAgYm9vbAorU3ludGF4OiAgICAgICAgIDwwfDE+CitEZXNjcmlwdGlvbjogICAgQXV0b21hdGljICd3OTk2OGNmLXZwcCcgbW9kdWxlIGxvYWRpbmc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBJZiBlbmFibGVkLCBldmVyeSB0aW1lIGFuIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIG9wZW4gYQorICAgICAgICAgICAgICAgIGNhbWVyYSwgJ2luc21vZCcgc2VhcmNoZXMgZm9yIHRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlCisgICAgICAgICAgICAgICAgaW4gdGhlIHN5c3RlbSBhbmQgbG9hZHMgaXQgYXV0b21hdGljYWxseSAoaWYgcHJlc2VudCkuCisgICAgICAgICAgICAgICAgVGhlIG9wdGlvbmFsICd3OTk2OGNmLXZwcCcgbW9kdWxlIGFkZHMgZXh0cmEgaW1hZ2UgbWFuaXB1bGF0aW9uCisgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzIHRvIHRoZSAndzk5NjhjZicgbW9kdWxlLGxpa2Ugc29mdHdhcmUgdXAtc2NhbGluZywKKyAgICAgICAgICAgICAgICBjb2xvdXIgY29udmVyc2lvbnMgYW5kIHZpZGVvIGRlY29tcHJlc3Npb24gZm9yIHZlcnkgaGlnaCBmcmFtZQorICAgICAgICAgICAgICAgIHJhdGVzLgorRGVmYXVsdDogICAgICAgIDEKK05vdGU6ICAgICAgICAgICBUaGUga2VybmVsIG11c3QgYmUgY29tcGlsZWQgd2l0aCB0aGUgQ09ORklHX0tNT0Qgb3B0aW9uCisgICAgICAgICAgICAgICAgZW5hYmxlZCBmb3IgdGhlICd3OTk2OGNmLXZwcCcgbW9kdWxlIHRvIGJlIGxvYWRlZCBhbmQgZm9yCisgICAgICAgICAgICAgICAgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgcHJlc2VudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBzaW1jYW1zIAorVHlwZTogICAgICAgICAgIGludCAKK1N5bnRheDogICAgICAgICA8bj4gCitEZXNjcmlwdGlvbjogICAgTnVtYmVyIG9mIGNhbWVyYXMgYWxsb3dlZCB0byBzdHJlYW0gc2ltdWx0YW5lb3VzbHkuCisgICAgICAgICAgICAgICAgbiBtYXkgdmFyeSBmcm9tIDAgdG8gMzIuCitEZWZhdWx0OiAgICAgICAgMzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICB2aWRlb19ucgorVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPC0xfG5bLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIFNwZWNpZnkgVjRMIG1pbm9yIG1vZGUgbnVtYmVyLgorICAgICAgICAgICAgICAgIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gMzIgY2FtZXJhcyB0aGlzIHdheS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICB2aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgcmVjb2duaXplZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3Qgb25lIGFuZCBmb3IgZXZlcnkKKyAgICAgICAgICAgICAgICBvdGhlciBjYW1lcmEuCitEZWZhdWx0OiAgICAgICAgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBwYWNrZXRfc2l6ZQorVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIFNwZWNpZnkgdGhlIG1heGltdW0gZGF0YSBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgZm9yIGFsdGVybmF0ZQorICAgICAgICAgICAgICAgIHNldHRpbmdzLCBmb3IgZWFjaCBkZXZpY2UuIG4gaXMgc2NhbGVkIGJldHdlZW4gNjMgYW5kIDEwMjMuCitEZWZhdWx0OiAgICAgICAgMTAyMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIG1heF9idWZmZXJzCitUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8blssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBGb3IgYWR2YW5jZWQgdXNlcnMuCisgICAgICAgICAgICAgICAgU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyB0byBhbGxvY2F0ZQorICAgICAgICAgICAgICAgIGZvciBlYWNoIGRldmljZSwgZnJvbSAyIHRvIDMyLgorRGVmYXVsdDogICAgICAgIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBkb3VibGVfYnVmZmVyCitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLgorICAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSBlbmFibGVkIGlmIHlvdSB3YW50IHNtb290aCB2aWRlbyBvdXRwdXQ6IGlmIHlvdQorICAgICAgICAgICAgICAgIG9idGFpbiBvdXQgb2Ygc3luYy4gdmlkZW8sIGRpc2FibGUgaXQsIG9yIHRyeSB0bworICAgICAgICAgICAgICAgIGRlY3JlYXNlIHRoZSAnY2xvY2tkaXYnIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWUuCitEZWZhdWx0OiAgICAgICAgMSBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGNsYW1waW5nCitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgVmlkZW8gZGF0YSBjbGFtcGluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLgorRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBmaWx0ZXJfdHlwZQorVHlwZTogICAgICAgICAgIGludCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MXwyWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBWaWRlbyBmaWx0ZXIgdHlwZS4KKyAgICAgICAgICAgICAgICAwIG5vbmUsIDEgKDEtMi0xKSAzLXRhcCBmaWx0ZXIsIDIgKDItMy02LTMtMikgNS10YXAgZmlsdGVyLgorICAgICAgICAgICAgICAgIFRoZSBmaWx0ZXIgaXMgdXNlZCB0byByZWR1Y2Ugbm9pc2UgYW5kIGFsaWFzaW5nIGFydGlmYWN0cworICAgICAgICAgICAgICAgIHByb2R1Y2VkIGJ5IHRoZSBDQ0Qgb3IgQ01PUyBpbWFnZSBzZW5zb3IuCitEZWZhdWx0OiAgICAgICAgMCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGxhcmdldmlldworVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIExhcmdlIHZpZXc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KK0RlZmF1bHQ6ICAgICAgICAxIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgdXBzY2FsaW5nCitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgU29mdHdhcmUgc2NhbGluZyAoZm9yIG5vbi1jb21wcmVzc2VkIHZpZGVvIG9ubHkpOgorICAgICAgICAgICAgICAgIDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBEaXNhYmxlIGl0IGlmIHlvdSBoYXZlIGEgc2xvdyBDUFUgb3IgeW91IGRvbid0IGhhdmUgZW5vdWdoCisgICAgICAgICAgICAgICAgbWVtb3J5LgorRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KK05vdGU6ICAgICAgICAgICBJZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gMC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBkZWNvbXByZXNzaW9uCitUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxfDJbLC4uLl0+CitEZXNjcmlwdGlvbjogICAgU29mdHdhcmUgdmlkZW8gZGVjb21wcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAwID0gZGlzYWJsZXMgZGVjb21wcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICAoZG9lc24ndCBhbGxvdyBmb3JtYXRzIG5lZWRpbmcgZGVjb21wcmVzc2lvbikuCisgICAgICAgICAgICAgICAgMSA9IGZvcmNlcyBkZWNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIChhbGxvd3MgZm9ybWF0cyBuZWVkaW5nIGRlY29tcHJlc3Npb24gb25seSkuCisgICAgICAgICAgICAgICAgMiA9IGFsbG93cyBhbnkgcGVybWl0dGVkIGZvcm1hdHMuCisgICAgICAgICAgICAgICAgRm9ybWF0cyBzdXBwb3J0aW5nIChkZSljb21wcmVzc2VkIHZpZGVvIGFyZSBZVVY0MjJQIGFuZAorICAgICAgICAgICAgICAgIFlVVjQyMFAvWVVWNDIwIGluIGFueSByZXNvbHV0aW9ucyB3aGVyZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZQorICAgICAgICAgICAgICAgIG11bHRpcGxlcyBvZiAxNi4KK0RlZmF1bHQ6ICAgICAgICAyIGZvciBldmVyeSBkZXZpY2UuCitOb3RlOiAgICAgICAgICAgSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgZm9yY2luZyBkZWNvbXByZXNzaW9uIGlzIG5vdAorICAgICAgICAgICAgICAgIGFsbG93ZWQ7IGluIHRoaXMgY2FzZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gMi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBmb3JjZV9wYWxldHRlCitUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHw5fDEwfDEzfDE1fDh8N3wxfDZ8M3w0fDVbLC4uLl0+CitEZXNjcmlwdGlvbjogICAgRm9yY2UgcGljdHVyZSBwYWxldHRlLgorICAgICAgICAgICAgICAgIEluIG9yZGVyOgorICAgICAgICAgICAgICAgICAwID0gT2ZmIC0gYWxsb3dzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisgICAgICAgICAgICAgICAgIDkgPSBVWVZZICAgIDE2IGJwcCAtIE9yaWdpbmFsIHZpZGVvLCBjb21wcmVzc2lvbiBkaXNhYmxlZAorICAgICAgICAgICAgICAgIDEwID0gWVVWNDIwICAxMiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZAorICAgICAgICAgICAgICAgIDEzID0gWVVWNDIyUCAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZAorICAgICAgICAgICAgICAgIDE1ID0gWVVWNDIwUCAxMiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZAorICAgICAgICAgICAgICAgICA4ID0gWVVWWSAgICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgICA3ID0gWVVWNDIyICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgICAxID0gR1JFWSAgICAgOCBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgICA2ID0gUkdCNTU1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgICAzID0gUkdCNTY1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgICA0ID0gUkdCMjQgICAyNCBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgICA1ID0gUkdCMzIgICAzMiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWQorICAgICAgICAgICAgICAgIFdoZW4gbm90IDAsIHRoaXMgcGFyYW1ldGVyIHdpbGwgb3ZlcnJpZGUgJ2RlY29tcHJlc3Npb24nLgorRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4gSW5pdGlhbCBwYWxldHRlIGlzIDkgKFVZVlkpLgorTm90ZTogICAgICAgICAgIElmICd3OTk2OGNmLXZwcCcgaXMgbm90IHByZXNlbnQsIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byA5LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGZvcmNlX3JnYgorVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CitEZXNjcmlwdGlvbjogICAgUmVhZCBSR0IgdmlkZW8gZGF0YSBpbnN0ZWFkIG9mIEJHUjoKKyAgICAgICAgICAgICAgICAxID0gdXNlIFJHQiBjb21wb25lbnQgb3JkZXJpbmcuCisgICAgICAgICAgICAgICAgMCA9IHVzZSBCR1IgY29tcG9uZW50IG9yZGVyaW5nLgorICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGhhcyBlZmZlY3Qgd2hlbiB1c2luZyBSR0JYIHBhbGV0dGVzIG9ubHkuCitEZWZhdWx0OiAgICAgICAgMCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGF1dG9icmlnaHQKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIEltYWdlIHNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgYnJpZ2h0bmVzczoKKyAgICAgICAgICAgICAgICAwID0gbm8sIDEgPSB5ZXMKK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgYXV0b2V4cAorVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CitEZXNjcmlwdGlvbjogICAgSW1hZ2Ugc2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBleHBvc3VyZToKKyAgICAgICAgICAgICAgICAwID0gbm8sIDEgPSB5ZXMKK0RlZmF1bHQ6ICAgICAgICAxIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgbGlnaHRmcmVxCitUeXBlOiAgICAgICAgICAgaW50IGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8NTB8NjBbLC4uLl0+CitEZXNjcmlwdGlvbjogICAgTGlnaHQgZnJlcXVlbmN5IGluIEh6OgorICAgICAgICAgICAgICAgIDUwIGZvciBFdXJvcGVhbiBhbmQgQXNpYW4gbGlnaHRpbmcsIDYwIGZvciBBbWVyaWNhbiBsaWdodGluZy4KK0RlZmF1bHQ6ICAgICAgICA1MCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGJhbmRpbmdmaWx0ZXIKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBCYW5kaW5nIGZpbHRlciB0byByZWR1Y2UgZWZmZWN0cyBvZiBmbHVvcmVzY2VudCAKKyAgICAgICAgICAgICAgICBsaWdodGluZzoKKyAgICAgICAgICAgICAgICAwIGRpc2FibGVkLCAxIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgVGhpcyBmaWx0ZXIgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYXR0ZXJuIG9mIGhvcml6b250YWwKKyAgICAgICAgICAgICAgICBsaWdodC9kYXJrIGJhbmRzIGNhdXNlZCBieSBzb21lICh1c3VhbGx5IGZsdW9yZXNjZW50KSBsaWdodGluZy4KK0RlZmF1bHQ6ICAgICAgICAwIGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgY2xvY2tkaXYKK1R5cGU6ICAgICAgICAgICBpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwtMXxuWywuLi5dPgorRGVzY3JpcHRpb246ICAgIEZvcmNlIHBpeGVsIGNsb2NrIGRpdmlzb3IgdG8gYSBzcGVjaWZpYyB2YWx1ZSAoZm9yIGV4cGVydHMpOgorICAgICAgICAgICAgICAgIG4gbWF5IHZhcnkgZnJvbSAwIHRvIDEyNy4KKyAgICAgICAgICAgICAgICAtMSBmb3IgYXV0b21hdGljIHZhbHVlLgorICAgICAgICAgICAgICAgIFNlZSBhbHNvIHRoZSAnZG91YmxlX2J1ZmZlcicgbW9kdWxlIHBhcmFtZXRlci4KK0RlZmF1bHQ6ICAgICAgICAtMSBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGJhY2tsaWdodAorVHlwZTogICAgICAgICAgIGJvb2wgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDwwfDFbLC4uLl0+CitEZXNjcmlwdGlvbjogICAgT2JqZWN0cyBhcmUgbGl0IGZyb20gYmVoaW5kOgorICAgICAgICAgICAgICAgIDAgPSBubywgMSA9IHllcworRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBtaXJyb3IKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIFJldmVyc2UgaW1hZ2UgaG9yaXpvbnRhbGx5OgorICAgICAgICAgICAgICAgIDAgPSBubywgMSA9IHllcworRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBtb25vY2hyb21lCitUeXBlOiAgICAgICAgICAgYm9vbCBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPDB8MVssLi4uXT4gCitEZXNjcmlwdGlvbjogICAgVGhlIGltYWdlIHNlbnNvciBpcyBtb25vY2hyb21lOgorICAgICAgICAgICAgICAgIDAgPSBubywgMSA9IHllcworRGVmYXVsdDogICAgICAgIDAgZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBicmlnaHRuZXNzCitUeXBlOiAgICAgICAgICAgbG9uZyBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CitEZXNjcmlwdGlvbjogICAgU2V0IHBpY3R1cmUgYnJpZ2h0bmVzcyAoMC02NTUzNSkuCisgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdCBpZiAnYXV0b2JyaWdodCcgaXMgZW5hYmxlZC4KK0RlZmF1bHQ6ICAgICAgICAzMTAwMCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGh1ZQorVHlwZTogICAgICAgICAgIGxvbmcgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPgorRGVzY3JpcHRpb246ICAgIFNldCBwaWN0dXJlIGh1ZSAoMC02NTUzNSkuCitEZWZhdWx0OiAgICAgICAgMzI3NjggZm9yIGV2ZXJ5IGRldmljZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBjb2xvdXIKK1R5cGU6ICAgICAgICAgICBsb25nIGFycmF5IChtaW4gPSAwLCBtYXggPSAzMikKK1N5bnRheDogICAgICAgICA8blssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBTZXQgcGljdHVyZSBzYXR1cmF0aW9uICgwLTY1NTM1KS4KK0RlZmF1bHQ6ICAgICAgICAzMjc2OCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGNvbnRyYXN0CitUeXBlOiAgICAgICAgICAgbG9uZyBhcnJheSAobWluID0gMCwgbWF4ID0gMzIpCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+IAorRGVzY3JpcHRpb246ICAgIFNldCBwaWN0dXJlIGNvbnRyYXN0ICgwLTY1NTM1KS4KK0RlZmF1bHQ6ICAgICAgICA1MDAwMCBmb3IgZXZlcnkgZGV2aWNlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIHdoaXRlbmVzcworVHlwZTogICAgICAgICAgIGxvbmcgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDMyKQorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPiAKK0Rlc2NyaXB0aW9uOiAgICBTZXQgcGljdHVyZSB3aGl0ZW5lc3MgKDAtNjU1MzUpLgorRGVmYXVsdDogICAgICAgIDMyNzY4IGZvciBldmVyeSBkZXZpY2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgZGVidWcKK1R5cGU6ICAgICAgICAgICBpbnQKK1N5bnRheDogICAgICAgICA8bj4gCitEZXNjcmlwdGlvbjogICAgRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gNjoKKyAgICAgICAgICAgICAgICAwID0gbm9uZSAodXNlIGNhcmVmdWxseSkKKyAgICAgICAgICAgICAgICAxID0gY3JpdGljYWwgZXJyb3JzCisgICAgICAgICAgICAgICAgMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucworICAgICAgICAgICAgICAgIDMgPSBjb25maWd1cmF0aW9uIG9yIGdlbmVyYWwgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICA0ID0gd2FybmluZ3MKKyAgICAgICAgICAgICAgICA1ID0gY2FsbGVkIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgIDYgPSBmdW5jdGlvbiBpbnRlcm5hbHMKKyAgICAgICAgICAgICAgICBMZXZlbCA1IGFuZCA2IGFyZSB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5IG9uZQorICAgICAgICAgICAgICAgIGRldmljZSBpcyB1c2VkLgorRGVmYXVsdDogICAgICAgIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBzcGVjaWZpY19kZWJ1ZworVHlwZTogICAgICAgICAgIGJvb2wKK1N5bnRheDogICAgICAgICA8MHwxPgorRGVzY3JpcHRpb246ICAgIEVuYWJsZSBvciBkaXNhYmxlIHNwZWNpZmljIGRlYnVnZ2luZyBtZXNzYWdlczoKKyAgICAgICAgICAgICAgICAwID0gcHJpbnQgbWVzc2FnZXMgY29uY2VybmluZyBldmVyeSBsZXZlbCA8PSAnZGVidWcnIGxldmVsLgorICAgICAgICAgICAgICAgIDEgPSBwcmludCBtZXNzYWdlcyBjb25jZXJuaW5nIHRoZSBsZXZlbCBpbmRpY2F0ZWQgYnkgJ2RlYnVnJy4KK0RlZmF1bHQ6ICAgICAgICAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworOS4gQ29udGFjdCBpbmZvcm1hdGlvbgorPT09PT09PT09PT09PT09PT09PT09PQorSSBtYXkgYmUgY29udGFjdGVkIGJ5IGUtbWFpbCBhdCA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4uCisKK0kgY2FuIGFjY2VwdCBHUEcvUEdQIGVuY3J5cHRlZCBlLW1haWwuIE15IEdQRyBrZXkgSUQgaXMgJ0ZDRTYzNUE0Jy4KK015IHB1YmxpYyAxMDI0LWJpdCBrZXkgc2hvdWxkIGJlIGF2YWlsYWJsZSBhdCB5b3VyIGtleXNlcnZlcjsgdGhlIGZpbmdlcnByaW50CitpczogJzg4RTggRjMyRiA3MjQ0IDY4QkEgMzk1OCAgNUQ0MCA5OURBIDVEMkEgRkNFNiAzNUE0Jy4KKworCisxMC4gQ3JlZGl0cworPT09PT09PT09PQorVGhlIGRldmVsb3BtZW50IHdvdWxkIG5vdCBoYXZlIHByb2NlZWQgbXVjaCBmdXJ0aGVyIHdpdGhvdXQgaGF2aW5nIGxvb2tlZCBhdAordGhlIHNvdXJjZSBjb2RlIG9mIG90aGVyIGRyaXZlcnMgYW5kIHdpdGhvdXQgdGhlIGhlbHAgb2Ygc2V2ZXJhbCBwZXJzb25zOyBpbgorcGFydGljdWxhcjoKKworLSB0aGUgSTJDIGludGVyZmFjZSB0byBrZXJuZWwgYW5kIGhpZ2gtbGV2ZWwgaW1hZ2Ugc2Vuc29yIGNvbnRyb2wgcm91dGluZXMgaGF2ZQorICBiZWVuIHRha2VuIGZyb20gdGhlIE9WNTExIGRyaXZlciBieSBNYXJrIE1jQ2xlbGxhbmQ7CisKKy0gbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoYXMgYmVlbiBjb3BpZWQgZnJvbSB0aGUgYnR0diBkcml2ZXIgYnkgUmFscGggTWV0emxlciwKKyAgTWFyY3VzIE1ldHpsZXIgYW5kIEdlcmQgS25vcnI7CisKKy0gdGhlIGxvdy1sZXZlbCBJMkMgcmVhZCBmdW5jdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEZyZWRlcmljIEpvdWF1bHQ7CisKKy0gdGhlIGxvdy1sZXZlbCBJMkMgZmFzdCB3cml0ZSBmdW5jdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IFBpb3RyIEN6ZXJjemFrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzZDhmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKQEAgLTAsMCArMSwzOTkgQEAKKzxIVE1MPjxIRUFEPgorPFRJVExFPlZpZGVvNExpbnV4IEtlcm5lbCBBUEkgUmVmZXJlbmNlIHYwLjE6MTk5OTA0MzA8L1RJVExFPgorPC9IRUFEPgorPCEgUmV2aXNpb24gSGlzdG9yeTogPgorPCEgICA0LzMwLzE5OTkgLSBGcmVkIEdsZWFzb24gKGZyZWRnQHdhdmEuY29tKT4KKzwhIERvY3VtZW50ZWQgZXh0ZW5zaW9ucyBmb3IgdGhlIFJhZGlvIERhdGEgU3lzdGVtIChSRFMpIGV4dGVuc2lvbnMgPgorPEJPRFkgYmdjb2xvcj0iI2ZmZmZmZiI+Cis8SDM+RGV2aWNlczwvSDM+CitWaWRlbzRMaW51eCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIHNldHMgb2YgZGV2aWNlIGZpbGVzLiBUaGVzZSBsaXZlIG9uIHRoZQorY2hhcmFjdGVyIGRldmljZSBmb3JtZXJseSBrbm93biBhcyAiL2Rldi9idHR2Ii4gL2Rldi9idHR2IHNob3VsZCBiZSBhCitzeW1saW5rIHRvIC9kZXYvdmlkZW8wIGZvciBtb3N0IHBlb3BsZS4gCis8UD4KKzxUQUJMRT4KKzxUUj48VEg+RGV2aWNlIE5hbWU8L1RIPjxUSD5NaW5vciBSYW5nZTwvVEg+PFRIPkZ1bmN0aW9uPC9USD4KKzxUUj48VEQ+L2Rldi92aWRlbzwvVEQ+PFREPjAtNjM8L1REPjxURD5WaWRlbyBDYXB0dXJlIEludGVyZmFjZTwvVEQ+Cis8VFI+PFREPi9kZXYvcmFkaW88L1REPjxURD42NC0xMjc8L1REPjxURD5BTS9GTSBSYWRpbyBEZXZpY2VzPC9URD4KKzxUUj48VEQ+L2Rldi92dHg8L1REPjxURD4xOTItMjIzPC9URD48VEQ+VGVsZXRleHQgSW50ZXJmYWNlIENoaXBzPC9URD4KKzxUUj48VEQ+L2Rldi92Ymk8L1REPjxURD4yMjQtMjM5PC9URD48VEQ+UmF3IFZCSSBEYXRhIChJbnRlcmNhc3QvdGVsZXRleHQpPC9URD4KKzwvVEFCTEU+Cis8UD4KK1ZpZGVvNExpbnV4IHByb2dyYW1zIG9wZW4gYW5kIHNjYW4gdGhlIGRldmljZXMgdG8gZmluZCB3aGF0IHRoZXkgYXJlIGxvb2tpbmcKK2Zvci4gQ2FwYWJpbGl0eSBxdWVyaWVzIGRlZmluZSB3aGF0IGVhY2ggaW50ZXJmYWNlIHN1cHBvcnRzLiBUaGUgCitkZXNjcmliZWQgQVBJIGlzIG9ubHkgZGVmaW5lZCBmb3IgdmlkZW8gY2FwdHVyZSBjYXJkcy4gVGhlIHJlbGV2YW50IHN1YnNldAorYXBwbGllcyB0byByYWRpbyBjYXJkcy4gVGVsZXRleHQgaW50ZXJmYWNlcyB0YWxrIHRoZSBleGlzdGluZyBWVFggQVBJLgorPFA+Cis8SDM+Q2FwYWJpbGl0eSBRdWVyeSBJb2N0bDwvSDM+CitUaGUgPEI+VklESU9DR0NBUDwvQj4gaW9jdGwgY2FsbCBpcyB1c2VkIHRvIG9idGFpbiB0aGUgY2FwYWJpbGl0eQoraW5mb3JtYXRpb24gZm9yIGEgdmlkZW8gZGV2aWNlLiBUaGUgPGI+c3RydWN0IHZpZGVvX2NhcGFiaWxpdHk8L2I+IG9iamVjdAorcGFzc2VkIHRvIHRoZSBpb2N0bCBpcyBjb21wbGV0ZWQgYW5kIHJldHVybmVkLiBJdCBjb250YWlucyB0aGUgZm9sbG93aW5nCitpbmZvcm1hdGlvbgorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPm5hbWVbMzJdPC9iPjxURD5DYW5vbmljYWwgbmFtZSBmb3IgdGhpcyBpbnRlcmZhY2U8L1REPgorPFRSPjxURD48Yj50eXBlPC9iPjxURD5UeXBlIG9mIGludGVyZmFjZTwvVEQ+Cis8VFI+PFREPjxiPmNoYW5uZWxzPC9iPjxURD5OdW1iZXIgb2YgcmFkaW8vdHYgY2hhbm5lbHMgaWYgYXBwcm9wcmlhdGU8L1REPgorPFRSPjxURD48Yj5hdWRpb3M8L2I+PFREPk51bWJlciBvZiBhdWRpbyBkZXZpY2VzIGlmIGFwcHJvcHJpYXRlPC9URD4KKzxUUj48VEQ+PGI+bWF4d2lkdGg8L2I+PFREPk1heGltdW0gY2FwdHVyZSB3aWR0aCBpbiBwaXhlbHM8L1REPgorPFRSPjxURD48Yj5tYXhoZWlnaHQ8L2I+PFREPk1heGltdW0gY2FwdHVyZSBoZWlnaHQgaW4gcGl4ZWxzPC9URD4KKzxUUj48VEQ+PGI+bWlud2lkdGg8L2I+PFREPk1pbmltdW0gY2FwdHVyZSB3aWR0aCBpbiBwaXhlbHM8L1REPgorPFRSPjxURD48Yj5taW5oZWlnaHQ8L2I+PFREPk1pbmltdW0gY2FwdHVyZSBoZWlnaHQgaW4gcGl4ZWxzPC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSB0eXBlIGZpZWxkIGxpc3RzIHRoZSBjYXBhYmlsaXR5IGZsYWdzIGZvciB0aGUgZGV2aWNlLiBUaGVzZSBhcmUKK2FzIGZvbGxvd3MKKzxQPgorPFRBQkxFPgorPFRSPjxUSD5OYW1lPC9USD48VEg+RGVzY3JpcHRpb248L1RIPgorPFRSPjxURD48Yj5WSURfVFlQRV9DQVBUVVJFPC9iPjxURD5DYW4gY2FwdHVyZSB0byBtZW1vcnk8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9UVU5FUjwvYj48VEQ+SGFzIGEgdHVuZXIgb2Ygc29tZSBmb3JtPC9URD4KKzxUUj48VEQ+PGI+VklEX1RZUEVfVEVMRVRFWFQ8L2I+PFREPkhhcyB0ZWxldGV4dCBjYXBhYmlsaXR5PC9URD4KKzxUUj48VEQ+PGI+VklEX1RZUEVfT1ZFUkxBWTwvYj48VEQ+Q2FuIG92ZXJsYXkgaXRzIGltYWdlIG9udG8gdGhlIGZyYW1lIGJ1ZmZlcjwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX0NIUk9NQUtFWTwvYj48VEQ+T3ZlcmxheSBpcyBDaHJvbWFrZXllZDwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX0NMSVBQSU5HPC9iPjxURD5PdmVybGF5IGNsaXBwaW5nIGlzIHN1cHBvcnRlZDwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX0ZSQU1FUkFNPC9iPjxURD5PdmVybGF5IG92ZXJ3cml0ZXMgZnJhbWUgYnVmZmVyIG1lbW9yeTwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX1NDQUxFUzwvYj48VEQ+VGhlIGhhcmR3YXJlIHN1cHBvcnRzIGltYWdlIHNjYWxpbmc8L1REPgorPFRSPjxURD48Yj5WSURfVFlQRV9NT05PQ0hST01FPC9iPjxURD5JbWFnZSBjYXB0dXJlIGlzIGdyZXkgc2NhbGUgb25seTwvVEQ+Cis8VFI+PFREPjxiPlZJRF9UWVBFX1NVQkNBUFRVUkU8L2I+PFREPkNhcHR1cmUgY2FuIGJlIG9mIG9ubHkgcGFydCBvZiB0aGUgaW1hZ2U8L1REPgorPC9UQUJMRT4KKzxQPgorVGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZXMgbGlzdGVkIGZvciBhIGNhcHR1cmUgZGV2aWNlIGRvIG5vdCBpbXBseSBhbGwKK3RoYXQgYWxsIGhlaWdodC93aWR0aCByYXRpb3Mgb3Igc2l6ZXMgd2l0aGluIHRoZSByYW5nZSBhcmUgcG9zc2libGUuIEEKK3JlcXVlc3QgdG8gc2V0IGEgc2l6ZSB3aWxsIGJlIGhvbm91cmVkIGJ5IHRoZSBsYXJnZXN0IGF2YWlsYWJsZSBjYXB0dXJlCitzaXplIHdob3NlIGNhcHR1cmUgaXMgbm8gbGFyZ2UgdGhhbiB0aGUgcmVxdWVzdGVkIHJlY3RhbmdsZSBpbiBlaXRoZXIKK2RpcmVjdGlvbi4gRm9yIGV4YW1wbGUgdGhlIHF1aWNrY2FtIGhhcyAzIGZpeGVkIHNldHRpbmdzLiAKKzxQPgorPEgzPkZyYW1lIEJ1ZmZlcjwvSDM+CitDYXB0dXJlIGNhcmRzIHRoYXQgZHJvcCBkYXRhIGRpcmVjdGx5IG9udG8gdGhlIGZyYW1lIGJ1ZmZlciBtdXN0IGJlIHRvbGQgdGhlCitiYXNlIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGJ1ZmZlciwgaXRzIHNpemUgYW5kIG9yZ2FuaXNhdGlvbi4gVGhpcyBpcyBhIAorcHJpdmlsZWdlZCBpb2N0bCBhbmQgb25lIHRoYXQgZXZlbnR1YWxseSBYIGl0c2VsZiBzaG91bGQgc2V0LgorPFA+CitUaGUgPGI+VklESU9DU0ZCVUY8L2I+IGlvY3RsIHNldHMgdGhlIGZyYW1lIGJ1ZmZlciBwYXJhbWV0ZXJzIGZvciBhIGNhcHR1cmUKK2NhcmQuIElmIHRoZSBjYXJkIGRvZXMgbm90IGRvIGRpcmVjdCB3cml0ZXMgdG8gdGhlIGZyYW1lIGJ1ZmZlciB0aGVuIHRoaXMKK2lvY3RsIHdpbGwgYmUgdW5zdXBwb3J0ZWQuIFRoZSA8Yj5WSURJT0NHRkJVRjwvYj4gaW9jdGwgcmV0dXJucyB0aGUKK2N1cnJlbnRseSB1c2VkIHBhcmFtZXRlcnMuIFRoZSBzdHJ1Y3R1cmUgdXNlZCBpbiBib3RoIGNhc2VzIGlzIGEgCis8Yj5zdHJ1Y3QgdmlkZW9fYnVmZmVyPC9iPi4KKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj52b2lkICpiYXNlPC9iPjwvVEQ+PFREPkJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyPC9URD4KKzxUUj48VEQ+PGI+aW50IGhlaWdodDwvYj48L1REPjxURD5IZWlnaHQgb2YgdGhlIGZyYW1lIGJ1ZmZlcjwvVEQ+Cis8VFI+PFREPjxiPmludCB3aWR0aDwvYj48L1REPjxURD5XaWR0aCBvZiB0aGUgZnJhbWUgYnVmZmVyPC9URD4KKzxUUj48VEQ+PGI+aW50IGRlcHRoPC9iPjwvVEQ+PFREPkRlcHRoIG9mIHRoZSBmcmFtZSBidWZmZXI8L1REPgorPFRSPjxURD48Yj5pbnQgYnl0ZXNwZXJsaW5lPC9iPjwvVEQ+PFREPk51bWJlciBvZiBieXRlcyBvZiBtZW1vcnkgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdHdvIGFkamFjZW50IGxpbmVzPC9URD4KKzwvVEFCTEU+Cis8UD4KK05vdGUgdGhhdCB0aGVzZSB2YWx1ZXMgcmVmbGVjdCB0aGUgcGh5c2ljYWwgbGF5b3V0IG9mIHRoZSBmcmFtZSBidWZmZXIuIAorVGhlIHZpc2libGUgYXJlYSBtYXkgYmUgc21hbGxlci4gSW4gZmFjdCB1bmRlciBYRnJlZTg2IHRoaXMgaXMgY29tbW9ubHkgdGhlCitjYXNlLiBYRnJlZTg2IERHQSBjYW4gcHJvdmlkZSB0aGUgcGFyYW1ldGVycyByZXF1aXJlZCB0byBzZXQgdXAgdGhpcyBpb2N0bC4KK1NldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyB0byBOVUxMIGluZGljYXRlcyB0aGVyZSBpcyBubyBwaHlzaWNhbCBmcmFtZSBidWZmZXIKK2FjY2Vzcy4KKzxQPgorPEgzPkNhcHR1cmUgV2luZG93czwvSDM+CitUaGUgY2FwdHVyZSBhcmVhIGlzIGRlc2NyaWJlZCBieSBhIDxiPnN0cnVjdCB2aWRlb193aW5kb3c8L2I+LiBUaGlzIGRlZmluZXMKK2EgY2FwdHVyZSBhcmVhIGFuZCB0aGUgY2xpcHBpbmcgaW5mb3JtYXRpb24gaWYgcmVsZXZhbnQuIFRoZSAKKzxiPlZJRElPQ0dXSU48L2I+IGlvY3RsIHJlY292ZXJzIHRoZSBjdXJyZW50IHNldHRpbmdzIGFuZCB0aGUgCis8Yj5WSURJT0NTV0lOPC9iPiBzZXRzIG5ldyB2YWx1ZXMuIEEgc3VjY2Vzc2Z1bCBjYWxsIHRvIDxiPlZJRElPQ1NXSU48L2I+IAoraW5kaWNhdGVzIHRoYXQgYSBzdWl0YWJsZSBzZXQgb2YgcGFyYW1ldGVycyBoYXZlIGJlZW4gY2hvc2VuLiBUaGV5IGRvIG5vdAoraW5kaWNhdGUgdGhhdCBleGFjdGx5IHdoYXQgd2FzIHJlcXVlc3RlZCB3YXMgZ3JhbnRlZC4gVGhlIHByb2dyYW0gc2hvdWxkCitjYWxsIDxiPlZJRElPQ0dXSU48L2I+IHRvIGNoZWNrIGlmIHRoZSBuZWFyZXN0IG1hdGNoIHdhcyBzdWl0YWJsZS4gVGhlCis8Yj5zdHJ1Y3QgdmlkZW9fd2luZG93PC9iPiBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkcy4KKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj54PC9iPjxURD5UaGUgWCBjby1vcmRpbmF0ZSBzcGVjaWZpZWQgaW4gWCB3aW5kb3dzIGZvcm1hdC48L1REPgorPFRSPjxURD48Yj55PC9iPjxURD5UaGUgWSBjby1vcmRpbmF0ZSBzcGVjaWZpZWQgaW4gWCB3aW5kb3dzIGZvcm1hdC48L1REPgorPFRSPjxURD48Yj53aWR0aDwvYj48VEQ+VGhlIHdpZHRoIG9mIHRoZSBpbWFnZSBjYXB0dXJlLjwvVEQ+Cis8VFI+PFREPjxiPmhlaWdodDwvYj48VEQ+VGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UgY2FwdHVyZS48L1REPgorPFRSPjxURD48Yj5jaHJvbWFrZXk8L2I+PFREPkEgaG9zdCBvcmRlciBSR0IzMiB2YWx1ZSBmb3IgdGhlIGNocm9tYSBrZXkuPC9URD4KKzxUUj48VEQ+PGI+ZmxhZ3M8L2I+PFREPkFkZGl0aW9uYWwgY2FwdHVyZSBmbGFncy48L1REPgorPFRSPjxURD48Yj5jbGlwczwvYj48VEQ+QSBsaXN0IG9mIGNsaXBwaW5nIHJlY3RhbmdsZXMuIDxlbT4oU2V0IG9ubHkpPC9lbT48L1REPgorPFRSPjxURD48Yj5jbGlwY291bnQ8L2I+PFREPlRoZSBudW1iZXIgb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcy4gPGVtPihTZXQgb25seSk8L2VtPjwvVEQ+Cis8L1RBQkxFPgorPFA+CitDbGlwcGluZyByZWN0YW5nbGVzIGFyZSBwYXNzZWQgYXMgYW4gYXJyYXkuIEVhY2ggY2xpcCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nCitmaWVsZHMgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLgorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPng8L2I+PC9URD48VEQ+WCBjby1vcmRpbmF0ZSBvZiByZWN0YW5nbGUgdG8gc2tpcDwvVEQ+Cis8VFI+PFREPjxiPnk8L2I+PC9URD48VEQ+WSBjby1vcmRpbmF0ZSBvZiByZWN0YW5nbGUgdG8gc2tpcDwvVEQ+Cis8VFI+PFREPjxiPndpZHRoPC9iPjwvVEQ+PFREPldpZHRoIG9mIHJlY3RhbmdsZSB0byBza2lwPC9URD4KKzxUUj48VEQ+PGI+aGVpZ2h0PC9iPjwvVEQ+PFREPkhlaWdodCBvZiByZWN0YW5nbGUgdG8gc2tpcDwvVEQ+Cis8L1RBQkxFPgorPFA+CitNZXJlbHkgc2V0dGluZyB0aGUgd2luZG93IGRvZXMgbm90IGVuYWJsZSBjYXB0dXJpbmcuIE92ZXJsYXkgY2FwdHVyaW5nCisoaS5lLiBQQ0ktUENJIHRyYW5zZmVyIHRvIHRoZSBmcmFtZSBidWZmZXIgb2YgdGhlIHZpZGVvIGNhcmQpCitpcyBhY3RpdmF0ZWQgYnkgcGFzc2luZyB0aGUgPGI+VklESU9DQ0FQVFVSRTwvYj4gaW9jdGwgYSB2YWx1ZSBvZiAxLCBhbmQKK2Rpc2FibGVkIGJ5IHBhc3NpbmcgaXQgYSB2YWx1ZSBvZiAwLiAKKzxQPgorU29tZSBjYXB0dXJlIGRldmljZXMgY2FuIGNhcHR1cmUgYSBzdWJmaWVsZCBvZiB0aGUgaW1hZ2UgdGhleSBhY3R1YWxseSBzZWUuCitUaGlzIGlzIGluZGljYXRlZCB3aGVuIFZJREVPX1RZUEVfU1VCQ0FQVFVSRSBpcyBkZWZpbmVkLgorVGhlIHZpZGVvX2NhcHR1cmUgZGVzY3JpYmVzIHRoZSB0aW1lIGFuZCBzcGVjaWFsIHN1YmZpZWxkcyB0byBjYXB0dXJlLgorVGhlIHZpZGVvX2NhcHR1cmUgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzLgorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPng8L2I+PC9URD48VEQ+WCBjby1vcmRpbmF0ZSBvZiBzb3VyY2UgcmVjdGFuZ2xlIHRvIGdyYWI8L1REPgorPFRSPjxURD48Yj55PC9iPjwvVEQ+PFREPlkgY28tb3JkaW5hdGUgb2Ygc291cmNlIHJlY3RhbmdsZSB0byBncmFiPC9URD4KKzxUUj48VEQ+PGI+d2lkdGg8L2I+PC9URD48VEQ+V2lkdGggb2Ygc291cmNlIHJlY3RhbmdsZSB0byBncmFiPC9URD4KKzxUUj48VEQ+PGI+aGVpZ2h0PC9iPjwvVEQ+PFREPkhlaWdodCBvZiBzb3VyY2UgcmVjdGFuZ2xlIHRvIGdyYWI8L1REPgorPFRSPjxURD48Yj5kZWNpbWF0aW9uPC9iPjwvVEQ+PFREPkRlY2ltYXRpb24gdG8gYXBwbHk8L1REPgorPFRSPjxURD48Yj5mbGFnczwvYj48L1REPjxURD5GbGFnIHNldHRpbmdzIGZvciBncmFiYmluZzwvVEQ+Cis8L1RBQkxFPgorVGhlIGF2YWlsYWJsZSBmbGFncyBhcmUKKzxQPgorPFRBQkxFPgorPFRSPjxUSD5OYW1lPC9USD48VEg+RGVzY3JpcHRpb248L1RIPgorPFRSPjxURD48Yj5WSURFT19DQVBUVVJFX09ERDwvYj48VEQ+Q2FwdHVyZSBvbmx5IG9kZCBmcmFtZXM8L1REPgorPFRSPjxURD48Yj5WSURFT19DQVBUVVJFX0VWRU48L2I+PFREPkNhcHR1cmUgb25seSBldmVuIGZyYW1lczwvVEQ+Cis8L1RBQkxFPgorPFA+Cis8SDM+VmlkZW8gU291cmNlczwvSDM+CitFYWNoIHZpZGVvNGxpbnV4IHZpZGVvIG9yIGF1ZGlvIGRldmljZSBjYXB0dXJlcyBmcm9tIG9uZSBvciBtb3JlIAorc291cmNlIDxiPmNoYW5uZWxzPC9iPi4gRWFjaCBjaGFubmVsIGNhbiBiZSBxdWVyaWVzIHdpdGggdGhlIAorPGI+VkRJT0NHQ0hBTjwvYj4gaW9jdGwgY2FsbC4gQmVmb3JlIGludm9raW5nIHRoaXMgZnVuY3Rpb24gdGhlIGNhbGxlcgorbXVzdCBzZXQgdGhlIGNoYW5uZWwgZmllbGQgdG8gdGhlIGNoYW5uZWwgdGhhdCBpcyBiZWluZyBxdWVyaWVkLiBPbiByZXR1cm4KK3RoZSA8Yj5zdHJ1Y3QgdmlkZW9fY2hhbm5lbDwvYj4gaXMgZmlsbGVkIGluIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlCituYXR1cmUgb2YgdGhlIGNoYW5uZWwgaXRzZWxmLgorPFA+CitUaGUgPGI+VklESU9DU0NIQU48L2I+IGlvY3RsIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQgYW5kIHN3aXRjaGVzIHRoZQorY2FwdHVyZSB0byB0aGlzIGlucHV0LiBJdCBpcyBub3QgZGVmaW5lZCB3aGV0aGVyIHBhcmFtZXRlcnMgc3VjaCBhcyBjb2xvdXIKK3NldHRpbmdzIG9yIHR1bmluZyBhcmUgbWFpbnRhaW5lZCBhY3Jvc3MgYSBjaGFubmVsIHN3aXRjaC4gVGhlIGNhbGxlciBzaG91bGQKK21haW50YWluIHNldHRpbmdzIGFzIGRlc2lyZWQgZm9yIGVhY2ggY2hhbm5lbC4gKFRoaXMgaXMgcmVhc29uYWJsZSBhcyAKK2RpZmZlcmVudCB2aWRlbyBpbnB1dHMgbWF5IGhhdmUgZGlmZmVyZW50IHByb3BlcnRpZXMpLgorPFA+CitUaGUgPGI+c3RydWN0IHZpZGVvX2NoYW5uZWw8L2I+IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5jaGFubmVsPC9iPjwvVEQ+PFREPlRoZSBjaGFubmVsIG51bWJlcjwvVEQ+Cis8VFI+PFREPjxiPm5hbWU8L2I+PC9URD48VEQ+VGhlIGlucHV0IG5hbWUgLSBwcmVmZXJhYmx5IHJlZmxlY3RpbmcgdGhlIGxhYmVsCitvbiB0aGUgY2FyZCBpbnB1dCBpdHNlbGY8L1REPgorPFRSPjxURD48Yj50dW5lcnM8L2I+PC9URD48VEQ+TnVtYmVyIG9mIHR1bmVycyBmb3IgdGhpcyBpbnB1dDwvVEQ+Cis8VFI+PFREPjxiPmZsYWdzPC9iPjwvVEQ+PFREPlByb3BlcnRpZXMgdGhlIHR1bmVyIGhhczwvVEQ+Cis8VFI+PFREPjxiPnR5cGU8L2I+PC9URD48VEQ+SW5wdXQgdHlwZSAoaWYga25vd24pPC9URD4KKzxUUj48VEQ+PGI+bm9ybTwvYj48VEQ+VGhlIG5vcm0gZm9yIHRoaXMgY2hhbm5lbDwvVEQ+Cis8L1RBQkxFPgorPFA+CitUaGUgZmxhZ3MgZGVmaW5lZCBhcmUKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5WSURFT19WQ19UVU5FUjwvYj48VEQ+Q2hhbm5lbCBoYXMgdHVuZXJzLjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1ZDX0FVRElPPC9iPjxURD5DaGFubmVsIGhhcyBhdWRpby48L1REPgorPFRSPjxURD48Yj5WSURFT19WQ19OT1JNPC9iPjxURD5DaGFubmVsIGhhcyBub3JtIHNldHRpbmcuPC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSB0eXBlcyBkZWZpbmVkIGFyZQorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPlZJREVPX1RZUEVfVFY8L2I+PFREPlRoZSBpbnB1dCBpcyBhIFRWIGlucHV0LjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1RZUEVfQ0FNRVJBPC9iPjxURD5UaGUgaW5wdXQgaXMgYSBjYW1lcmEuPC9URD4KKzwvVEFCTEU+Cis8UD4KKzxIMz5JbWFnZSBQcm9wZXJ0aWVzPC9IMz4KK1RoZSBpbWFnZSBwcm9wZXJ0aWVzIG9mIHRoZSBwaWN0dXJlIGNhbiBiZSBxdWVyaWVkIHdpdGggdGhlIDxiPlZJRElPQ0dQSUNUPC9iPgoraW9jdGwgd2hpY2ggZmlsbHMgaW4gYSA8Yj5zdHJ1Y3QgdmlkZW9fcGljdHVyZTwvYj4uIFRoZSA8Yj5WSURJT0NTUElDVDwvYj4gCitpb2N0bCBhbGxvd3MgdmFsdWVzIHRvIGJlIGNoYW5nZWQuIEFsbCB2YWx1ZXMgZXhjZXB0IGZvciB0aGUgcGFsZXR0ZSB0eXBlCithcmUgc2NhbGVkIGJldHdlZW4gMC02NTUzNS4gCis8UD4KK1RoZSA8Yj5zdHJ1Y3QgdmlkZW9fcGljdHVyZTwvYj4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHMKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5icmlnaHRuZXNzPC9iPjxURD5QaWN0dXJlIGJyaWdodG5lc3M8L1REPgorPFRSPjxURD48Yj5odWU8L2I+PFREPlBpY3R1cmUgaHVlIChjb2xvdXIgb25seSk8L1REPgorPFRSPjxURD48Yj5jb2xvdXI8L2I+PFREPlBpY3R1cmUgY29sb3VyIChjb2xvdXIgb25seSk8L1REPgorPFRSPjxURD48Yj5jb250cmFzdDwvYj48VEQ+UGljdHVyZSBjb250cmFzdDwvVEQ+Cis8VFI+PFREPjxiPndoaXRlbmVzczwvYj48VEQ+VGhlIHdoaXRlbmVzcyAoZ3JleXNjYWxlIG9ubHkpPC9URD4KKzxUUj48VEQ+PGI+ZGVwdGg8L2I+PFREPlRoZSBjYXB0dXJlIGRlcHRoIChtYXkgbmVlZCB0byBtYXRjaCB0aGUgZnJhbWUgYnVmZmVyIGRlcHRoKTwvVEQ+Cis8VFI+PFREPjxiPnBhbGV0dGU8L2I+PFREPlJlcG9ydHMgdGhlIHBhbGV0dGUgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyBpbWFnZTwvVEQ+Cis8L1RBQkxFPgorPFA+CitUaGUgZm9sbG93aW5nIHBhbGV0dGVzIGFyZSBkZWZpbmVkCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9HUkVZPC9iPjxURD5MaW5lYXIgaW50ZW5zaXR5IGdyZXkgc2NhbGUgKDI1NSBpcyBicmlnaHRlc3QpLjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfSEkyNDA8L2I+PFREPlRoZSBCVDg0OCA4Yml0IGNvbG91ciBjdWJlLjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfUkdCNTY1PC9iPjxURD5SR0I1NjUgcGFja2VkIGludG8gMTYgYml0IHdvcmRzLjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfUkdCNTU1PC9iPjxURD5SR1Y1NTUgcGFja2VkIGludG8gMTYgYml0IHdvcmRzLCB0b3AgYml0IHVuZGVmaW5lZC48L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1JHQjI0PC9iPjxURD5SR0I4ODggcGFja2VkIGludG8gMjRiaXQgd29yZHMuPC9URD4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9SR0IzMjwvYj48VEQ+UkdCODg4IHBhY2tlZCBpbnRvIHRoZSBsb3cgMyBieXRlcyBvZiAzMmJpdCB3b3Jkcy4gVGhlIHRvcCA4Yml0cyBhcmUgdW5kZWZpbmVkLjwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfWVVWNDIyPC9iPjxURD5WaWRlbyBzdHlsZSBZVVY0MjIgLSA4Yml0cyBwYWNrZWQgNGJpdHMgWSAyYml0cyBVIDJiaXRzIFY8L1REPgorPFRSPjxURD48Yj5WSURFT19QQUxFVFRFX1lVWVY8L2I+PFREPkRlc2NyaWJlIG1lPC9URD4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9VWVZZPC9iPjxURD5EZXNjcmliZSBtZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfWVVWNDIwPC9iPjxURD5ZVVY0MjAgY2FwdHVyZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfWVVWNDExPC9iPjxURD5ZVVY0MTEgY2FwdHVyZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1BBTEVUVEVfUkFXPC9iPjxURD5SQVcgY2FwdHVyZSAoQlQ4NDgpPC9URD4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9ZVVY0MjJQPC9iPjxURD5ZVVYgNDoyOjIgUGxhbmFyPC9URD4KKzxUUj48VEQ+PGI+VklERU9fUEFMRVRURV9ZVVY0MTFQPC9iPjxURD5ZVVYgNDoxOjEgUGxhbmFyPC9URD4KKzwvVEFCTEU+Cis8UD4KKzxIMz5UdW5pbmc8L0gzPgorRWFjaCB2aWRlbyBpbnB1dCBjaGFubmVsIGNhbiBoYXZlIG9uZSBvciBtb3JlIHR1bmVycyBhc3NvY2lhdGVkIHdpdGggaXQuIE1hbnkKK2RldmljZXMgd2lsbCBub3QgaGF2ZSB0dW5lcnMuIFRWIGNhcmRzIGFuZCByYWRpbyBjYXJkcyB3aWxsIGhhdmUgb25lIG9yIG1vcmUKK3R1bmVycyBhdHRhY2hlZC4KKzxQPgorVHVuZXJzIGFyZSBkZXNjcmliZWQgYnkgYSA8Yj5zdHJ1Y3QgdmlkZW9fdHVuZXI8L2I+IHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBieQordGhlIDxiPlZJRElPQ0dUVU5FUjwvYj4gaW9jdGwuIEZpbGwgaW4gdGhlIHR1bmVyIG51bWJlciBpbiB0aGUgc3RydWN0dXJlCit0aGVuIHBhc3MgdGhlIHN0cnVjdHVyZSB0byB0aGUgaW9jdGwgdG8gaGF2ZSB0aGUgZGF0YSBmaWxsZWQgaW4uIFRoZSAKK3R1bmVyIGNhbiBiZSBzd2l0Y2hlZCB1c2luZyA8Yj5WSURJT0NTVFVORVI8L2I+IHdoaWNoIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQKK2dpdmluZyB0aGUgdHVuZXIgdG8gdXNlLiBBIHN0cnVjdCB0dW5lciBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHMKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj50dW5lcjwvYj48VEQ+TnVtYmVyIG9mIHRoZSB0dW5lcjwvVEQ+Cis8VFI+PFREPjxiPm5hbWU8L2I+PFREPkNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIHR1bmVyIChlZyBGTS9BTS9UVik8L1REPgorPFRSPjxURD48Yj5yYW5nZWxvdzwvYj48VEQ+TG93ZXN0IHR1bmFibGUgZnJlcXVlbmN5PC9URD4KKzxUUj48VEQ+PGI+cmFuZ2VoaWdoPC9iPjxURD5IaWdoZXN0IHR1bmFibGUgZnJlcXVlbmN5PC9URD4KKzxUUj48VEQ+PGI+ZmxhZ3M8L2I+PFREPkZsYWdzIGRlc2NyaWJpbmcgdGhlIHR1bmVyPC9URD4KKzxUUj48VEQ+PGI+bW9kZTwvYj48VEQ+VGhlIHZpZGVvIHNpZ25hbCBtb2RlIGlmIHJlbGV2YW50PC9URD4KKzxUUj48VEQ+PGI+c2lnbmFsPC9iPjxURD5TaWduYWwgc3RyZW5ndGggaWYga25vd24gLSBiZXR3ZWVuIDAtNjU1MzU8L1REPgorPC9UQUJMRT4KKzxQPgorVGhlIGZvbGxvd2luZyBmbGFncyBleGlzdAorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPlZJREVPX1RVTkVSX1BBTDwvYj48VEQ+UEFMIHR1bmluZyBpcyBzdXBwb3J0ZWQ8L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9OVFNDPC9iPjxURD5OVFNDIHR1bmluZyBpcyBzdXBwb3J0ZWQ8L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9TRUNBTTwvYj48VEQ+U0VDQU0gdHVuaW5nIGlzIHN1cHBvcnRlZDwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1RVTkVSX0xPVzwvYj48VEQ+RnJlcXVlbmN5IGlzIGluIGEgbG93ZXIgcmFuZ2U8L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9OT1JNPC9iPjxURD5UaGUgbm9ybSBmb3IgdGhpcyB0dW5lciBpcyBzZXR0YWJsZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1RVTkVSX1NURVJFT19PTjwvYj48VEQ+VGhlIHR1bmVyIGlzIHNlZWluZyBzdGVyZW8gYXVkaW88L1REPgorPFRSPjxURD48Yj5WSURFT19UVU5FUl9SRFNfT048L2I+PFREPlRoZSB0dW5lciBpcyBzZWVpbmcgYSBSRFMgZGF0YXN0cmVhbTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX1RVTkVSX01CU19PTjwvYj48VEQ+VGhlIHR1bmVyIGlzIHNlZWluZyBhIE1CUyBkYXRhc3RyZWFtPC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIGRlZmluZWQKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5WSURFT19NT0RFX1BBTDwvYj48VEQ+VGhlIHR1bmVyIGlzIGluIFBBTCBtb2RlPC9URD4KKzxUUj48VEQ+PGI+VklERU9fTU9ERV9OVFNDPC9iPjxURD5UaGUgdHVuZXIgaXMgaW4gTlRTQyBtb2RlPC9URD4KKzxUUj48VEQ+PGI+VklERU9fTU9ERV9TRUNBTTwvYj48VEQ+VGhlIHR1bmVyIGlzIGluIFNFQ0FNIG1vZGU8L1REPgorPFRSPjxURD48Yj5WSURFT19NT0RFX0FVVE88L2I+PFREPlRoZSB0dW5lciBhdXRvIHN3aXRjaGVzLCBvciBtb2RlIGRvZXMgbm90IGFwcGx5PC9URD4KKzwvVEFCTEU+Cis8UD4KK1R1bmluZyBmcmVxdWVuY2llcyBhcmUgYW4gdW5zaWduZWQgMzJiaXQgdmFsdWUgaW4gMS8xNnRoIE1IeiBvciBpZiB0aGUKKzxiPlZJREVPX1RVTkVSX0xPVzwvYj4gZmxhZyBpcyBzZXQgdGhleSBhcmUgaW4gMS8xNnRoIEtIei4gVGhlIGN1cnJlbnQKK2ZyZXF1ZW5jeSBpcyBvYnRhaW5lZCBhcyBhbiB1bnNpZ25lZCBsb25nIHZpYSB0aGUgPGI+VklESU9DR0ZSRVE8L2I+IGlvY3RsIGFuZAorc2V0IGJ5IHRoZSA8Yj5WSURJT0NTRlJFUTwvYj4gaW9jdGwuCis8UD4KKzxIMz5BdWRpbzwvSDM+CitUViBhbmQgUmFkaW8gZGV2aWNlcyBoYXZlIG9uZSBvciBtb3JlIGF1ZGlvIGlucHV0cyB0aGF0IG1heSBiZSBzZWxlY3RlZC4gCitUaGUgYXVkaW8gcHJvcGVydGllcyBhcmUgcXVlcmllZCBieSBwYXNzaW5nIGEgPGI+c3RydWN0IHZpZGVvX2F1ZGlvPC9iPiB0byA8Yj5WSURJT0NHQVVESU88L2I+IGlvY3RsLiBUaGUKKzxiPlZJRElPQ1NBVURJTzwvYj4gaW9jdGwgc2V0cyBhdWRpbyBwcm9wZXJ0aWVzLgorPFA+CitUaGUgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+YXVkaW88L2I+PFREPlRoZSBjaGFubmVsIG51bWJlcjwvVEQ+Cis8VFI+PFREPjxiPnZvbHVtZTwvYj48VEQ+VGhlIHZvbHVtZSBsZXZlbDwvVEQ+Cis8VFI+PFREPjxiPmJhc3M8L2I+PFREPlRoZSBiYXNzIGxldmVsPC9URD4KKzxUUj48VEQ+PGI+dHJlYmxlPC9iPjxURD5UaGUgdHJlYmxlIGxldmVsPC9URD4KKzxUUj48VEQ+PGI+ZmxhZ3M8L2I+PFREPkZsYWdzIGRlc2NyaWJpbmcgdGhlIGF1ZGlvIGNoYW5uZWw8L1REPgorPFRSPjxURD48Yj5uYW1lPC9iPjxURD5DYW5vbmljYWwgbmFtZSBmb3IgdGhlIGF1ZGlvIGlucHV0PC9URD4KKzxUUj48VEQ+PGI+bW9kZTwvYj48VEQ+VGhlIG1vZGUgdGhlIGF1ZGlvIGlucHV0IGlzIGluPC9URD4KKzxUUj48VEQ+PGI+YmFsYW5jZTwvYj48VEQ+VGhlIGxlZnQvcmlnaHQgYmFsYW5jZTwvVEQ+Cis8VFI+PFREPjxiPnN0ZXA8L2I+PFREPkFjdHVhbCBzdGVwIHVzZWQgYnkgdGhlIGhhcmR3YXJlPC9URD4KKzwvVEFCTEU+Cis8UD4KK1RoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIGRlZmluZWQKKzxQPgorPFRBQkxFPgorPFRSPjxURD48Yj5WSURFT19BVURJT19NVVRFPC9iPjxURD5UaGUgYXVkaW8gaXMgbXV0ZWQ8L1REPgorPFRSPjxURD48Yj5WSURFT19BVURJT19NVVRBQkxFPC9iPjxURD5BdWRpbyBtdXRpbmcgaXMgc3VwcG9ydGVkPC9URD4KKzxUUj48VEQ+PGI+VklERU9fQVVESU9fVk9MVU1FPC9iPjxURD5UaGUgdm9sdW1lIGlzIGNvbnRyb2xsYWJsZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX0FVRElPX0JBU1M8L2I+PFREPlRoZSBiYXNzIGlzIGNvbnRyb2xsYWJsZTwvVEQ+Cis8VFI+PFREPjxiPlZJREVPX0FVRElPX1RSRUJMRTwvYj48VEQ+VGhlIHRyZWJsZSBpcyBjb250cm9sbGFibGU8L1REPgorPFRSPjxURD48Yj5WSURFT19BVURJT19CQUxBTkNFPC9iPjxURD5UaGUgYmFsYW5jZSBpcyBjb250cm9sbGFibGU8L1REPgorPC9UQUJMRT4KKzxQPgorVGhlIGZvbGxvd2luZyBkZWNvZGluZyBtb2RlcyBhcmUgZGVmaW5lZAorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPlZJREVPX1NPVU5EX01PTk88L2I+PFREPk1vbm8gc2lnbmFsPC9URD4KKzxUUj48VEQ+PGI+VklERU9fU09VTkRfU1RFUkVPPC9iPjxURD5TdGVyZW8gc2lnbmFsIChOSUNBTSBmb3IgVFYpPC9URD4KKzxUUj48VEQ+PGI+VklERU9fU09VTkRfTEFORzE8L2I+PFREPkV1cm9wZWFuIFRWIGFsdGVybmF0ZSBsYW5ndWFnZSAxPC9URD4KKzxUUj48VEQ+PGI+VklERU9fU09VTkRfTEFORzI8L2I+PFREPkV1cm9wZWFuIFRWIGFsdGVybmF0ZSBsYW5ndWFnZSAyPC9URD4KKzwvVEFCTEU+Cis8UD4KKzxIMz5SZWFkaW5nIEltYWdlczwvSDM+CitFYWNoIGNhbGwgdG8gdGhlIDxiPnJlYWQ8L2I+IHN5c2NhbGwgcmV0dXJucyB0aGUgbmV4dCBhdmFpbGFibGUgaW1hZ2UKK2Zyb20gdGhlIGRldmljZS4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBzZXQgZm9ybWF0IGFuZCBzaXplICh1c2luZwordGhlIFZJRElPQ1NQSUNUIGFuZCBWSURJT0NTV0lOIGlvY3RscykgYW5kIHRoZW4gdG8gcGFzcyBhIHN1aXRhYmxlCitzaXplIGJ1ZmZlciBhbmQgbGVuZ3RoIHRvIHRoZSBmdW5jdGlvbi4gTm90IGFsbCBkZXZpY2VzIHdpbGwgc3VwcG9ydAorcmVhZCBvcGVyYXRpb25zLgorPFA+CitBIHNlY29uZCB3YXkgdG8gaGFuZGxlIGltYWdlIGNhcHR1cmUgaXMgdmlhIHRoZSBtbWFwIGludGVyZmFjZSBpZiBzdXBwb3J0ZWQuCitUbyB1c2UgdGhlIG1tYXAgaW50ZXJmYWNlIGEgdXNlciBmaXJzdCBzZXRzIHRoZSBkZXNpcmVkIGltYWdlIHNpemUgYW5kIGRlcHRoCitwcm9wZXJ0aWVzLiBOZXh0IHRoZSBWSURJT0NHTUJVRiBpb2N0bCBpcyBpc3N1ZWQuIFRoaXMgcmVwb3J0cyB0aGUgc2l6ZQorb2YgYnVmZmVyIHRvIG1tYXAgYW5kIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBidWZmZXIgZm9yIGVhY2ggZnJhbWUuIFRoZQorbnVtYmVyIG9mIGZyYW1lcyBzdXBwb3J0ZWQgaXMgZGV2aWNlIGRlcGVuZGVudCBhbmQgbWF5IG9ubHkgYmUgb25lLiAKKzxQPgorVGhlIHZpZGVvX21idWYgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzCis8UD4KKzxUQUJMRT4KKzxUUj48VEQ+PGI+c2l6ZTwvYj48VEQ+VGhlIG51bWJlciBvZiBieXRlcyB0byBtYXA8L1REPgorPFRSPjxURD48Yj5mcmFtZXM8L2I+PFREPlRoZSBudW1iZXIgb2YgZnJhbWVzPC9URD4KKzxUUj48VEQ+PGI+b2Zmc2V0czwvYj48VEQ+VGhlIG9mZnNldCBvZiBlYWNoIGZyYW1lPC9URD4KKzwvVEFCTEU+Cis8UD4KK09uY2UgdGhlIG1tYXAgaGFzIGJlZW4gbWFkZSB0aGUgVklESU9DTUNBUFRVUkUgaW9jdGwgc3RhcnRzIHRoZQorY2FwdHVyZSB0byBhIGZyYW1lIHVzaW5nIHRoZSBmb3JtYXQgYW5kIGltYWdlIHNpemUgc3BlY2lmaWVkIGluIHRoZQordmlkZW9fbW1hcCAod2hpY2ggc2hvdWxkIG1hdGNoIG9yIGJlIGJlbG93IHRoZSBpbml0aWFsIHF1ZXJ5IHNpemUpLgorV2hlbiB0aGUgVklESU9DTUNBUFRVUkUgaW9jdGwgcmV0dXJucyB0aGUgZnJhbWUgaXMgPGVtPm5vdDwvZW0+CitjYXB0dXJlZCB5ZXQsIHRoZSBkcml2ZXIganVzdCBpbnN0cnVjdGVkIHRoZSBoYXJkd2FyZSB0byBzdGFydCB0aGUKK2NhcHR1cmUuICBUaGUgYXBwbGljYXRpb24gaGFzIHRvIHVzZSB0aGUgVklESU9DU1lOQyBpb2N0bCB0byB3YWl0Cit1bnRpbCB0aGUgY2FwdHVyZSBvZiBhIGZyYW1lIGlzIGZpbmlzaGVkLiAgVklESU9DU1lOQyB0YWtlcyB0aGUgZnJhbWUKK251bWJlciB5b3Ugd2FudCB0byB3YWl0IGZvciBhcyBhcmd1bWVudC4KKzxwPgorSXQgaXMgYWxsb3dlZCB0byBjYWxsIFZJRElPQ01DQVBUVVJFIG11bHRpcGxlIHRpbWVzICh3aXRoIGRpZmZlcmVudAorZnJhbWUgbnVtYmVycyBpbiB2aWRlb19tbWFwLT5mcmFtZSBvZiBjb3Vyc2UpIGFuZCB0aHVzIGhhdmUgbXVsdGlwbGUKK291dHN0YW5kaW5nIGNhcHR1cmUgcmVxdWVzdHMuICBBIHNpbXBsZSB3YXkgZG8gdG8gZG91YmxlLWJ1ZmZlcmluZwordXNpbmcgdGhpcyBmZWF0dXJlIGxvb2tzIGxpa2UgdGhpczoKKzxwcmU+CisvKiBzZXR1cCBldmVyeXRoaW5nICovCitWSURJT0NNQ0FQVFVSRSgwKQord2hpbGUgKHdoYXRldmVyKSB7CisgICBWSURJT0NNQ0FQVFVSRSgxKQorICAgVklESU9DU1lOQygwKQorICAgLyogcHJvY2VzcyBmcmFtZSAwIHdoaWxlIHRoZSBoYXJkd2FyZSBjYXB0dXJlcyBmcmFtZSAxICovCisgICBWSURJT0NNQ0FQVFVSRSgwKQorICAgVklESU9DU1lOQygxKQorICAgLyogcHJvY2VzcyBmcmFtZSAxIHdoaWxlIHRoZSBoYXJkd2FyZSBjYXB0dXJlcyBmcmFtZSAwICovCit9Cis8L3ByZT4KK05vdGUgdGhhdCB5b3UgYXJlIDxlbT5ub3Q8L2VtPiBsaW1pdGVkIHRvIG9ubHkgdHdvIGZyYW1lcy4gIFRoZSBBUEkKK2FsbG93cyB1cCB0byAzMiBmcmFtZXMsIHRoZSBWSURJT0NHTUJVRiBpb2N0bCByZXR1cm5zIHRoZSBudW1iZXIgb2YKK2ZyYW1lcyB0aGUgZHJpdmVyIGdyYW50ZWQuICBUaHVzIGl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIGRlZXBlciBxdWV1ZXMKK3RvIGF2b2lkIGxvb3NpbmcgZnJhbWVzIG9uIGxvYWQgcGVha3MuCis8cD4KK1doaWxlIGNhcHR1cmluZyB0byBtZW1vcnkgdGhlIGRyaXZlciB3aWxsIG1ha2UgYSAiYmVzdCBlZmZvcnQiIGF0dGVtcHQKK3RvIGNhcHR1cmUgdG8gc2NyZWVuIGFzIHdlbGwgaWYgcmVxdWVzdGVkLiBUaGlzIG5vcm1hbGx5IG1lYW5zIGFsbAorZnJhbWVzIHRoYXQgIm1pc3MiIG1lbW9yeSBtYXBwZWQgY2FwdHVyZSB3aWxsIGdvIHRvIHRoZSBkaXNwbGF5LgorPFA+CitBIGZpbmFsIGlvY3RsIGV4aXN0cyB0byBhbGxvdyBhIGRldmljZSB0byBvYnRhaW4gcmVsYXRlZCBkZXZpY2VzIGlmIGEKK2RyaXZlciBoYXMgbXVsdGlwbGUgY29tcG9uZW50cyAoZm9yIGV4YW1wbGUgdmlkZW8wIG1heSBub3QgYmUgYXNzb2NpYXRlZAord2l0aCB2YmkwIHdoaWNoIHdvdWxkIGNhdXNlIGFuIGludGVyY2FzdCBkaXNwbGF5IHByb2dyYW0gdG8gbWFrZSBhIGJhZAorbWlzdGFrZSkuIFRoZSBWSURJT0NHVU5JVCBpb2N0bCByZXBvcnRzIHRoZSB1bml0IG51bWJlcnMgb2YgdGhlIGFzc29jaWF0ZWQKK2RldmljZXMgaWYgYW55IGV4aXN0LiBUaGUgdmlkZW9fdW5pdCBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzLgorPFA+Cis8VEFCTEU+Cis8VFI+PFREPjxiPnZpZGVvPC9iPjxURD5WaWRlbyBjYXB0dXJlIGRldmljZTwvVEQ+Cis8VFI+PFREPjxiPnZiaTwvYj48VEQ+VkJJIGNhcHR1cmUgZGV2aWNlPC9URD4KKzxUUj48VEQ+PGI+cmFkaW88L2I+PFREPlJhZGlvIGRldmljZTwvVEQ+Cis8VFI+PFREPjxiPmF1ZGlvPC9iPjxURD5BdWRpbyBtaXhlcjwvVEQ+Cis8VFI+PFREPjxiPnRlbGV0ZXh0PC9iPjxURD5UZWxldGV4dCBkZXZpY2U8L1REPgorPC9UQUJMRT4KKzxQPgorPEgzPlJEUyBEYXRhc3RyZWFtczwvSDM+CitGb3IgcmFkaW8gZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQsIGl0IGlzIHBvc3NpYmxlIHRvIHJlY2VpdmUgUmFkaW8gRGF0YQorU3lzdGVtIChSRFMpIGRhdGEgYnkgbWVhbnMgb2YgYSByZWFkKCkgb24gdGhlIGRldmljZS4gIFRoZSBkYXRhIGlzIHBhY2tlZCBpbgorZ3JvdXBzIG9mIHRocmVlLCBhcyBmb2xsb3dzOgorPFRBQkxFPgorPFRSPjxURD5GaXJzdCBPY3RldDwvVEQ+PFREPkxlYXN0IFNpZ25pZmljYW50IEJ5dGUgb2YgUkRTIEJsb2NrPC9URD48L1RSPgorPFRSPjxURD5TZWNvbmQgT2N0ZXQ8L1REPjxURD5Nb3N0IFNpZ25pZmljYW50IEJ5dGUgb2YgUkRTIEJsb2NrCis8VFI+PFREPlRoaXJkIE9jdGV0PC9URD48VEQ+Qml0IDc6PC9URD48VEQ+RXJyb3IgYml0LiAgSW5kaWNhdGVzIHRoYXQKK2FuIHVuY29ycmVjdGFibGUgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHJlY2VwdGlvbiBvZiB0aGlzIGJsb2NrLjwvVEQ+PC9UUj4KKzxUUj48VEQ+Jm5ic3A7PC9URD48VEQ+Qml0IDY6PC9URD48VEQ+Q29ycmVjdGVkIGJpdC4gIEluZGljYXRlcyB0aGF0ICAKK2FuIGVycm9yIHdhcyBjb3JyZWN0ZWQgZm9yIHRoaXMgZGF0YSBibG9jay48L1REPjwvVFI+Cis8VFI+PFREPiZuYnNwOzwvVEQ+PFREPkJpdHMgNS0zOjwvVEQ+PFREPlJlY2VpdmVkIE9mZnNldC4gIEluZGljYXRlcyB0aGUgIAorb2Zmc2V0IHJlY2VpdmVkIGJ5IHRoZSBzeW5jIHN5c3RlbS48L1REPjwvVFI+Cis8VFI+PFREPiZuYnNwOzwvVEQ+PFREPkJpdHMgMi0wOjwvVEQ+PFREPk9mZnNldCBOYW1lLiAgSW5kaWNhdGVzIHRoZSAgCitvZmZzZXQgYXBwbGllZCB0byB0aGlzIGRhdGEuPC9URD48L1RSPgorPC9UQUJMRT4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0diBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDY3NjFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CkBAIC0wLDAgKzEsMTIxIEBACitjYXJkPTAgLSAgKioqIFVOS05PV04vR0VORVJJQyAqKiogCitjYXJkPTEgLSBNSVJPIFBDVFYKK2NhcmQ9MiAtIEhhdXBwYXVnZSAoYnQ4NDgpCitjYXJkPTMgLSBTVEIsIEdhdGV3YXkgUC9OIDYwMDA2OTkgKGJ0ODQ4KQorY2FyZD00IC0gSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSQorY2FyZD01IC0gRGlhbW9uZCBEVFYyMDAwCitjYXJkPTYgLSBBVmVyTWVkaWEgVFZQaG9uZQorY2FyZD03IC0gTUFUUklYLVZpc2lvbiBNVi1EZWx0YQorY2FyZD04IC0gTGlmZXZpZXcgRmx5VmlkZW8gSUkgKEJ0ODQ4KSBMUjI2IC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSMjYKK2NhcmQ9OSAtIElNUy9JWG1pY3JvIFR1cmJvVFYKK2NhcmQ9MTAgLSBIYXVwcGF1Z2UgKGJ0ODc4KQorY2FyZD0xMSAtIE1JUk8gUENUViBwcm8KK2NhcmQ9MTIgLSBBRFMgVGVjaG5vbG9naWVzIENoYW5uZWwgU3VyZmVyIFRWIChidDg0OCkKK2NhcmQ9MTMgLSBBVmVyTWVkaWEgVFZDYXB0dXJlIDk4CitjYXJkPTE0IC0gQWltc2xhYiBWaWRlbyBIaWdod2F5IFh0cmVtZSAoVkhYKQorY2FyZD0xNSAtIFpvbHRyaXggVFYtTWF4CitjYXJkPTE2IC0gUHJvbGluayBQaXhlbHZpZXcgUGxheVRWIChidDg3OCkKK2NhcmQ9MTcgLSBMZWFkdGVrIFdpblZpZXcgNjAxCitjYXJkPTE4IC0gQVZFQyBJbnRlcmNhcHR1cmUKK2NhcmQ9MTkgLSBMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkKK2NhcmQ9MjAgLSBDRUkgUmFmZmxlcyBDYXJkCitjYXJkPTIxIC0gTGlmZXZpZXcgRmx5VmlkZW8gOTgvIEx1Y2t5IFN0YXIgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZVRWIExSNTAKK2NhcmQ9MjIgLSBBc2tleSBDUEgwNTAvIFBob2ViZSBUdiBNYXN0ZXIgKyBGTQorY2FyZD0yMyAtIE1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWLCBidDg3OAorY2FyZD0yNCAtIEFza2V5IENQSDA1WC8wNlggKGJ0ODc4KSBbbWFueSB2ZW5kb3JzXQorY2FyZD0yNSAtIFRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4wIChCdDg0OCkvIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMC8gVm9iaXMgVFYtQm9vc3RhcgorY2FyZD0yNiAtIEhhdXBwYXVnZSBXaW5DYW0gbmV3ZXIgKGJ0ODc4KQorY2FyZD0yNyAtIExpZmV2aWV3IEZseVZpZGVvIDk4LyBNQVhJIFRWIFZpZGVvIFBDSTIgTFI1MAorY2FyZD0yOCAtIFRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4xIChidDg3OCkKK2NhcmQ9MjkgLSBJbWFnZW5hdGlvbiBQWEMyMDAKK2NhcmQ9MzAgLSBMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwCitjYXJkPTMxIC0gRm9ybWFjIGlQcm9UViwgRm9ybWFjIFByb1RWIEkgKGJ0ODQ4KQorY2FyZD0zMiAtIEludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkKK2NhcmQ9MzMgLSBUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4CitjYXJkPTM0IC0gTGVhZHRlayBXaW5GYXN0IDIwMDAvIFdpbkZhc3QgMjAwMCBYUAorY2FyZD0zNSAtIExpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkKK2NhcmQ9MzYgLSBMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAgLyBUeXBob29uIFRWaWV3IFRWL0ZNIFR1bmVyCitjYXJkPTM3IC0gUHJvbGluayBQaXhlbFZpZXcgUGxheVRWIHBybworY2FyZD0zOCAtIEFza2V5IENQSDA2WCBUVmlldzk5CitjYXJkPTM5IC0gUGlubmFjbGUgUENUViBTdHVkaW8vUmF2ZQorY2FyZD00MCAtIFNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAKK2NhcmQ9NDEgLSBBVmVyTWVkaWEgVFZQaG9uZSA5OAorY2FyZD00MiAtIFByb1ZpZGVvIFBWOTUxCitjYXJkPTQzIC0gTGl0dGxlIE9uQWlyIFRWCitjYXJkPTQ0IC0gU2lnbWEgVFZJSS1GTQorY2FyZD00NSAtIE1BVFJJWC1WaXNpb24gTVYtRGVsdGEgMgorY2FyZD00NiAtIFpvbHRyaXggR2VuaWUgVFYvRk0KK2NhcmQ9NDcgLSBUZXJyYXRlYyBUVi9SYWRpbysKK2NhcmQ9NDggLSBBc2tleSBDUEgwM3gvIER5bmFsaW5rIE1hZ2ljIFRWaWV3CitjYXJkPTQ5IC0gSU9EQVRBIEdWLUJDVFYzL1BDSQorY2FyZD01MCAtIFByb2xpbmsgUFYtQlQ4NzhQKzRFIC8gUGl4ZWxWaWV3IFBsYXlUViBQQUsgLyBMZW5jbyBNWFRWLTk1NzggQ1AKK2NhcmQ9NTEgLSBFYWdsZSBXaXJlbGVzcyBDYXByaWNvcm4yIChidDg3OEEpCitjYXJkPTUyIC0gUGlubmFjbGUgUENUViBTdHVkaW8gUHJvCitjYXJkPTUzIC0gVHlwaG9vbiBUVmlldyBSRFMgKyBGTSBTdGVyZW8gLyBLTkMxIFRWIFN0YXRpb24gUkRTCitjYXJkPTU0IC0gTGlmZXZpZXcgRmx5VmlkZW8gMjAwMCAvRmx5VmlkZW8gQTIvIExpZmV0ZWMgTFQgOTQxNSBUViBbTFI5MF0KK2NhcmQ9NTUgLSBBc2tleSBDUEgwMzEvIEJFU1RCVVkgRWFzeSBUVgorY2FyZD01NiAtIExpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MAorY2FyZD01NyAtIEdyYW5kVGVjICdHcmFuZCBWaWRlbyBDYXB0dXJlJyAoQnQ4NDgpCitjYXJkPTU4IC0gQXNrZXkgQ1BIMDYwLyBQaG9lYmUgVFYgTWFzdGVyIE9ubHkgKE5vIEZNKQorY2FyZD01OSAtIEFza2V5IENQSDAzeCBUViBDYXB0dXJlcgorY2FyZD02MCAtIE1vZHVsYXIgVGVjaG5vbG9neSBNTTEwMFBDVFYKK2NhcmQ9NjEgLSBBRyBFbGVjdHJvbmljcyBHTVYxCitjYXJkPTYyIC0gQXNrZXkgQ1BIMDYxLyBCRVNUQlVZIEVhc3kgVFYgKGJ0ODc4KQorY2FyZD02MyAtIEFUSSBUVi1Xb25kZXIKK2NhcmQ9NjQgLSBBVEkgVFYtV29uZGVyIFZFCitjYXJkPTY1IC0gTGlmZXZpZXcgRmx5VmlkZW8gMjAwMFMgTFI5MAorY2FyZD02NiAtIFRlcnJhdGVjIFRWYWx1ZVJhZGlvCitjYXJkPTY3IC0gSU9EQVRBIEdWLUJDVFY0L1BDSQorY2FyZD02OCAtIDNEZnggVm9vZG9vVFYgRk0gKEV1cm8pLCBWb29kb29UViAyMDAgKFVTQSkKK2NhcmQ9NjkgLSBBY3RpdmUgSW1hZ2luZyBBSU1NUworY2FyZD03MCAtIFByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi40Qyw4RSkKK2NhcmQ9NzEgLSBMaWZldmlldyBGbHlWaWRlbyA5OEVaIChjYXB0dXJlIG9ubHkpIExSNTEKK2NhcmQ9NzIgLSBQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKQorY2FyZD03MyAtIFNlbnNvcmF5IDMxMQorY2FyZD03NCAtIFJlbW90ZVZpc2lvbiBNWCAoUlY2MDUpCitjYXJkPTc1IC0gUG93ZXJjb2xvciBNVFY4NzgvIE1UVjg3OFIvIE1UVjg3OEYKK2NhcmQ9NzYgLSBDYW5vcHVzIFdpbkRWUiBQQ0kgKENPTVBBUSBQcmVzYXJpbyAzNTI0SlAsIDUxMTJKUCkKK2NhcmQ9NzcgLSBHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIENhcmQgKEJ0ODc4KQorY2FyZD03OCAtIEpldHdheSBUVi9DYXB0dXJlIEpXLVRWODc4LUZCSywgS3dvcmxkIEtXLVRWODc4UkYKK2NhcmQ9NzkgLSBEU1AgRGVzaWduIFRDVklERU8KK2NhcmQ9ODAgLSBIYXVwcGF1Z2UgV2luVFYgUFZSCitjYXJkPTgxIC0gSU9EQVRBIEdWLUJDVFY1L1BDSQorY2FyZD04MiAtIE9zcHJleSAxMDAvMTUwICg4NzgpCitjYXJkPTgzIC0gT3NwcmV5IDEwMC8xNTAgKDg0OCkKK2NhcmQ9ODQgLSBPc3ByZXkgMTAxICg4NDgpCitjYXJkPTg1IC0gT3NwcmV5IDEwMS8xNTEKK2NhcmQ9ODYgLSBPc3ByZXkgMTAxLzE1MSB3LyBzdmlkCitjYXJkPTg3IC0gT3NwcmV5IDIwMC8yMDEvMjUwLzI1MQorY2FyZD04OCAtIE9zcHJleSAyMDAvMjUwCitjYXJkPTg5IC0gT3NwcmV5IDIxMC8yMjAKK2NhcmQ9OTAgLSBPc3ByZXkgNTAwCitjYXJkPTkxIC0gT3NwcmV5IDU0MAorY2FyZD05MiAtIE9zcHJleSAyMDAwCitjYXJkPTkzIC0gSURTIEVhZ2xlCitjYXJkPTk0IC0gUGlubmFjbGUgUENUViBTYXQKK2NhcmQ9OTUgLSBGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KQorY2FyZD05NiAtIE1hY2hUVgorY2FyZD05NyAtIEV1cmVzeXMgUGljb2xvCitjYXJkPTk4IC0gUHJvVmlkZW8gUFYxNTAKK2NhcmQ9OTkgLSBBRC1UVks1MDMKK2NhcmQ9MTAwIC0gSGVyY3VsZXMgU21hcnQgVFYgU3RlcmVvCitjYXJkPTEwMSAtIFBhY2UgVFYgJiBSYWRpbyBDYXJkCitjYXJkPTEwMiAtIElWQy0yMDAKK2NhcmQ9MTAzIC0gR3JhbmQgWC1HdWFyZCAvIFRydXN0IDgxNFBDSQorY2FyZD0xMDQgLSBOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWCitjYXJkPTEwNSAtIFByb1ZpZGVvIFBWMTQzCitjYXJkPTEwNiAtIFBIWVRFQyBWRC0wMDktWDEgTWluaURJTiAoYnQ4NzgpCitjYXJkPTEwNyAtIFBIWVRFQyBWRC0wMDktWDEgQ29tYmkgKGJ0ODc4KQorY2FyZD0xMDggLSBQSFlURUMgVkQtMDA5IE1pbmlESU4gKGJ0ODc4KQorY2FyZD0xMDkgLSBQSFlURUMgVkQtMDA5IENvbWJpIChidDg3OCkKK2NhcmQ9MTEwIC0gSVZDLTEwMAorY2FyZD0xMTEgLSBJVkMtMTIwRworY2FyZD0xMTIgLSBwY0hEVFYgSEQtMjAwMCBUVgorY2FyZD0xMTMgLSBUd2luaGFuIERTVCArIGNsb25lcworY2FyZD0xMTQgLSBXaW5mYXN0IFZDMTAwCitjYXJkPTExNSAtIFRlcHBybyBURVYtNTYwL0ludGVyVmlzaW9uIElWLTU2MAorY2FyZD0xMTYgLSBTSU1VUyBHVkMxMTAwCitjYXJkPTExNyAtIE5HUyBOR1NUVisKK2NhcmQ9MTE4IC0gTE1MQlQ0CitjYXJkPTExOSAtIFRla3JhbSBNMjA1IFBSTworY2FyZD0xMjAgLSBDb25jZXB0cm9uaWMgQ09OVFZGTWkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmM4MmZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0wLDAgKzEsMzUgQEAKKyAgMCAtPiBVTktOT1dOL0dFTkVSSUMgICAgICAgICAgICAgICAgICAgICAgICAgCisgIDEgLT4gUHJvdGV1cyBQcm8gW3BoaWxpcHMgcmVmZXJlbmNlIGRlc2lnbl0gICBbMTEzMToyMDAxLDExMzE6MjAwMV0KKyAgMiAtPiBMaWZlVmlldyBGbHlWSURFTzMwMDAgICAgICAgICAgICAgICAgICAgIFs1MTY4OjAxMzgsNGU0MjowMTM4XQorICAzIC0+IExpZmVWaWV3IEZseVZJREVPMjAwMCAgICAgICAgICAgICAgICAgICAgWzUxNjg6MDEzOF0KKyAgNCAtPiBFTVBSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMTMxOjY3NTJdCisgIDUgLT4gU0tOZXQgTW9uc3RlciBUViAgICAgICAgICAgICAgICAgICAgICAgICBbMTEzMTo0ZTg1XQorICA2IC0+IFRldmlvbiBNRCA5NzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgNyAtPiBLTkMgT25lIFRWLVN0YXRpb24gUkRTIC8gVHlwaG9vbiBUViBUdW5lciBSRFMgWzExMzE6ZmUwMSwxODk0OmZlMDFdCisgIDggLT4gVGVycmF0ZWMgQ2luZXJneSA0MDAgVFYgICAgICAgICAgICAgICAgICBbMTUzQjoxMTQyXQorICA5IC0+IE1lZGlvbiA1MDQ0CisgMTAgLT4gS3dvcmxkL0t1cm91dG9TaGlrb3UgU0FBNzEzMC1UVlBDSQorIDExIC0+IFRlcnJhdGVjIENpbmVyZ3kgNjAwIFRWICAgICAgICAgICAgICAgICAgWzE1M0I6MTE0M10KKyAxMiAtPiBNZWRpb24gNzEzNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDNdCisgMTMgLT4gVHlwaG9vbiBUVitSYWRpbyA5MDAzMQorIDE0IC0+IEVMU0EgRVgtVklTSU9OIDMwMFRWICAgICAgICAgICAgICAgICAgICAgWzEwNDg6MjI2Yl0KKyAxNSAtPiBFTFNBIEVYLVZJU0lPTiA1MDBUViAgICAgICAgICAgICAgICAgICAgIFsxMDQ4OjIyNmJdCisgMTYgLT4gQVNVUyBUVi1GTSA3MTM0ICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODQyLDEwNDM6NDgzMCwxMDQzOjQ4NDBdCisgMTcgLT4gQU9QRU4gVkExMDAwIFBPV0VSICAgICAgICAgICAgICAgICAgICAgICBbMTEzMTo3MTMzXQorIDE4IC0+IEJNSyBNUEVYIE5vIFR1bmVyCisgMTkgLT4gQ29tcHJvIFZpZGVvTWF0ZSBUViAgICAgICAgICAgICAgICAgICAgICBbMTg1YjpjMTAwXQorIDIwIC0+IE1hdHJveCBDcm9ub3NQbHVzICAgICAgICAgICAgICAgICAgICAgICAgWzEwMkI6NDhkMF0KKyAyMSAtPiAxME1PT05TIFBDSSBUViBDQVBUVVJFIENBUkQgICAgICAgICAgICAgIFsxMTMxOjIwMDFdCisgMjIgLT4gTWVkaW9uIDI4MTkvIEF2ZXJNZWRpYSBNMTU2ICAgICAgICAgICAgICBbMTQ2MTphNzBiLDE0NjE6MjExNV0KKyAyMyAtPiBCTUsgTVBFWCBUdW5lcgorIDI0IC0+IEtOQyBPbmUgVFYtU3RhdGlvbiBEVlIgICAgICAgICAgICAgICAgICAgWzE4OTQ6YTAwNl0KKyAyNSAtPiBBU1VTIFRWLUZNIDcxMzMgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4NDNdCisgMjYgLT4gUGlubmFjbGUgUENUViBTdGVyZW8gKHNhYTcxMzQpICAgICAgICAgICBbMTFiZDowMDJiXQorIDI3IC0+IE1hbmxpIE11Y2hUViBNLVRWMDAyCisgMjggLT4gTWFubGkgTXVjaFRWIE0tVFYwMDEKKyAyOSAtPiBOYWdhc2UgU2FuZ3lvIFRyYW5zR2VhciAzMDAwVFYgICAgICAgICAgIFsxNDYxOjA1MGNdCisgMzAgLT4gRWxpdGVncm91cCBFQ1MgVFZQM1hQIEZNMTIxNiBUdW5lciBDYXJkKFBBTC1CRyxGTSkgIFsxMDE5OjRjYjRdCisgMzEgLT4gRWxpdGVncm91cCBFQ1MgVFZQM1hQIEZNMTIzNiBUdW5lciBDYXJkIChOVFNDLEZNKSBbMTAxOTo0Y2I1XQorIDMyIC0+IEFWQUNTIFNtYXJ0VFYKKyAzMyAtPiBBVmVyTWVkaWEgRFZEIEVaTWFrZXIgICAgICAgICAgICAgICAgICAgIFsxNDYxOjEwZmZdCisgMzQgLT4gTGlmZVZpZXcgRmx5VFYgUGxhdGludW0zMyBtaW5pICAgICAgICAgICBbNTE2ODowMjEyXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiYWZlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTAsMCArMSw0NiBAQAordHVuZXI9MCAtIFRlbWljIFBBTCAoNDAwMiBGSDUpCit0dW5lcj0xIC0gUGhpbGlwcyBQQUxfSSAoRkkxMjQ2IGFuZCBjb21wYXRpYmxlcykKK3R1bmVyPTIgLSBQaGlsaXBzIE5UU0MgKEZJMTIzNixGTTEyMzYgYW5kIGNvbXBhdGlibGVzKQordHVuZXI9MyAtIFBoaWxpcHMgKFNFQ0FNK1BBTF9CRykgKEZJMTIxNk1GLCBGTTEyMTZNRiwgRlIxMjE2TUYpCit0dW5lcj00IC0gTm9UdW5lcgordHVuZXI9NSAtIFBoaWxpcHMgUEFMX0JHIChGSTEyMTYgYW5kIGNvbXBhdGlibGVzKQordHVuZXI9NiAtIFRlbWljIE5UU0MgKDQwMzIgRlk1KQordHVuZXI9NyAtIFRlbWljIFBBTF9JICg0MDYyIEZZNSkKK3R1bmVyPTggLSBUZW1pYyBOVFNDICg0MDM2IEZZNSkKK3R1bmVyPTkgLSBBbHBzIEhTQkgxCit0dW5lcj0xMCAtIEFscHMgVFNCRTEKK3R1bmVyPTExIC0gQWxwcyBUU0JCNQordHVuZXI9MTIgLSBBbHBzIFRTQkU1Cit0dW5lcj0xMyAtIEFscHMgVFNCQzUKK3R1bmVyPTE0IC0gVGVtaWMgUEFMX0JHICg0MDA2Rkg1KQordHVuZXI9MTUgLSBBbHBzIFRTQ0g2Cit0dW5lcj0xNiAtIFRlbWljIFBBTF9ESyAoNDAxNiBGWTUpCit0dW5lcj0xNyAtIFBoaWxpcHMgTlRTQ19NIChNSzIpCit0dW5lcj0xOCAtIFRlbWljIFBBTF9JICg0MDY2IEZZNSkKK3R1bmVyPTE5IC0gVGVtaWMgUEFMKiBhdXRvICg0MDA2IEZONSkKK3R1bmVyPTIwIC0gVGVtaWMgUEFMX0JHICg0MDA5IEZSNSkgb3IgUEFMX0kgKDQwNjkgRlI1KQordHVuZXI9MjEgLSBUZW1pYyBOVFNDICg0MDM5IEZSNSkKK3R1bmVyPTIyIC0gVGVtaWMgUEFML1NFQ0FNIG11bHRpICg0MDQ2IEZNNSkKK3R1bmVyPTIzIC0gUGhpbGlwcyBQQUxfREsgKEZJMTI1NiBhbmQgY29tcGF0aWJsZXMpCit0dW5lcj0yNCAtIFBoaWxpcHMgUEFML1NFQ0FNIG11bHRpIChGUTEyMTZNRSkKK3R1bmVyPTI1IC0gTEcgUEFMX0krRk0gKFRBUEMtSTAwMUQpCit0dW5lcj0yNiAtIExHIFBBTF9JIChUQVBDLUk3MDFEKQordHVuZXI9MjcgLSBMRyBOVFNDK0ZNIChUUEk4TlNSMDFGKQordHVuZXI9MjggLSBMRyBQQUxfQkcrRk0gKFRQSThQU0IwMUQpCit0dW5lcj0yOSAtIExHIFBBTF9CRyAoVFBJOFBTQjExRCkKK3R1bmVyPTMwIC0gVGVtaWMgUEFMKiBhdXRvICsgRk0gKDQwMDkgRk41KQordHVuZXI9MzEgLSBTSEFSUCBOVFNDX0pQICgyVTVKRjU1NDApCit0dW5lcj0zMiAtIFNhbXN1bmcgUEFMIFRDUE05MDkxUEQyNwordHVuZXI9MzMgLSBNVDIweHggdW5pdmVyc2FsCit0dW5lcj0zNCAtIFRlbWljIFBBTF9CRyAoNDEwNiBGSDUpCit0dW5lcj0zNSAtIFRlbWljIFBBTF9ESy9TRUNBTV9MICg0MDEyIEZZNSkKK3R1bmVyPTM2IC0gVGVtaWMgTlRTQyAoNDEzNiBGWTUpCit0dW5lcj0zNyAtIExHIFBBTCAobmV3ZXIgVEFQQyBzZXJpZXMpCit0dW5lcj0zOCAtIFBoaWxpcHMgUEFML1NFQ0FNIG11bHRpIChGTTEyMTZNRSBNSzMpCit0dW5lcj0zOSAtIExHIE5UU0MgKG5ld2VyIFRBUEMgc2VyaWVzKQordHVuZXI9NDAgLSBISVRBQ0hJIFY3LUoxODBBVAordHVuZXI9NDEgLSBQaGlsaXBzIFBBTF9NSyAoRkkxMjE2IE1LKQordHVuZXI9NDIgLSBQaGlsaXBzIDEyMzZEIEFUU0MvTlRTQyBkYXVsIGluCit0dW5lcj00MyAtIFBoaWxpcHMgTlRTQyBNSzMgKEZNMTIzNk1LMyBvciBGTTEyMzYvRikKK3R1bmVyPTQ0IC0gUGhpbGlwcyA0IGluIDEgKEFUSSBUViBXb25kZXIgUHJvL0NvbmV4YW50KQordHVuZXI9NDUgLSBNaWNyb3R1bmUgNDA0OSBGTTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxNWUzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CkBAIC0wLDAgKzEsNDEyIEBACitjLXFjYW0gLSBDb25uZWN0aXggQ29sb3IgUXVpY2tDYW0gdmlkZW80bGludXgga2VybmVsIGRyaXZlcgorCitDb3B5cmlnaHQgKEMpIDE5OTkgIERhdmUgRm9ycmVzdCAgPGRyZjVuQHZpcmdpbmlhLmVkdT4KKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZWQgdW5kZXIgR05VIEdQTC4KKworMTk5OS0xMi0wOCBEYXZlIEZvcnJlc3QsIHdyaXR0ZW4gd2l0aCBrZXJuZWwgdmVyc2lvbiAyLjIuMTIgaW4gbWluZAorCisKK1RhYmxlIG9mIENvbnRlbnRzCisKKzEuMCBJbnRyb2R1Y3Rpb24KKzIuMCBDb21waWxhdGlvbiwgSW5zdGFsbGF0aW9uLCBhbmQgQ29uZmlndXJhdGlvbgorMy4wIFRyb3VibGVzaG9vdGluZworNC4wIEZ1dHVyZSBXb3JrIC8gY3VycmVudCB3b3JrIGFyb3VuZHMKKzkuMCBTYW1wbGUgUHJvZ3JhbSwgdjRsZ3JhYgorMTAuMCBPdGhlciBJbmZvcm1hdGlvbgorCisKKzEuMCBJbnRyb2R1Y3Rpb24KKworICBUaGUgZmlsZSAuLi9kcml2ZXJzL2NoYXIvYy1xY2FtLmMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUKK0xvZ2l0ZWNoIChuZWUgQ29ubmVjdGl4KSBwYXJhbGxlbCBwb3J0IGludGVyZmFjZSBjb2xvciBDQ0QgY2FtZXJhLgorVGhpcyBpcyBhIGZhaXJseSBpbmV4cGVuc2l2ZSBkZXZpY2UgZm9yIGNhcHR1cmluZyBpbWFnZXMuICBMb2dpdGVjaAorZG9lcyBub3QgY3VycmVudGx5IHByb3ZpZGUgaW5mb3JtYXRpb24gZm9yIGRldmVsb3BlcnMsIGJ1dCBtYW55IHBlb3BsZQoraGF2ZSBlbmdpbmVlcmVkIHNldmVyYWwgc29sdXRpb25zIGZvciBub24tTWljcm9zb2Z0IHVzZSBvZiB0aGUgQ29sb3IKK1F1aWNrY2FtLgorCisxLjEgTW90aXZhdGlvbgorCisgIEkgc3BlbnQgYSBudW1iZXIgb2YgaG91cnMgdHJ5aW5nIHRvIGdldCBteSBjYW1lcmEgdG8gd29yaywgYW5kIEkKK2hvcGUgdGhpcyBkb2N1bWVudCBzYXZlcyB5b3Ugc29tZSB0aW1lLiAgTXkgY2FtZXJhIHdpbGwgbm90IHdvcmsgd2l0aAordGhlIDIuMi4xMyBrZXJuZWwgYXMgZGlzdHJpYnV0ZWQsIGJ1dCB3aXRoIGEgZmV3IHBhdGNoZXMgdG8gdGhlCittb2R1bGUsIEkgd2FzIGFibGUgdG8gZ3JhYiBzb21lIGZyYW1lcy4gU2VlIDQuMCwgRnV0dXJlIFdvcmsuCisKKworCisyLjAgQ29tcGlsYXRpb24sIEluc3RhbGxhdGlvbiwgYW5kIENvbmZpZ3VyYXRpb24KKworICBUaGUgYy1xY2FtIGRlcGVuZHMgb24gcGFyYWxsZWwgcG9ydCBzdXBwb3J0LCB2aWRlbzRsaW51eCwgYW5kIHRoZQorQ29sb3IgUXVpY2tjYW0uICBJdCBpcyBhbHNvIG5pY2UgdG8gaGF2ZSB0aGUgcGFyYWxsZWwgcG9ydCByZWFkYmFjaworc3VwcG9ydCBlbmFibGVkLiBJIGVuYWJsZWQgdGhlc2UgYXMgbW9kdWxlcyBkdXJpbmcgdGhlIGtlcm5lbAorY29uZmlndXJhdGlvbi4gIFRoZSBhcHByb3ByaWF0ZSBmbGFncyBhcmU6CisKKyAgICBDT05GSUdfUFJJTlRFUiAgICAgICBNICAgIGZvciBscC5vLCBwYXJwb3J0Lm8gcGFycG9ydF9wYy5vIG1vZHVsZXMKKyAgICBDT05GSUdfUE5QX1BBUlBPUlQgICBNIGZvciBhdXRvcHJvYmUubyBJRUVFMTI4NCByZWFkYmFjayBtb2R1bGUKKyAgICBDT05GSUdfUFJJTlRFUl9SRUFEQkFDSyBNIGZvciBwYXJwb3J0X3Byb2JlLm8gSUVFRTEyODQgcmVhZGJhY2sgbW9kdWxlCisgICAgQ09ORklHX1ZJREVPX0RFViAgICAgTSAgICBmb3IgdmlkZW9kZXYubyB2aWRlbzRsaW51eCBtb2R1bGUKKyAgICBDT05GSUdfVklERU9fQ1FDQU0gICBNICAgIGZvciBjLXFjYW0ubyAgQ29sb3IgUXVpY2tjYW0gbW9kdWxlIAorCisgIFdpdGggdGhlc2UgZmxhZ3MsIHRoZSBrZXJuZWwgc2hvdWxkIGNvbXBpbGUgYW5kIGluc3RhbGwgdGhlIG1vZHVsZXMuCitUbyByZWNvcmQgYW5kIG1vbml0b3IgdGhlIGNvbXBpbGF0aW9uLCBJIHVzZToKKworIChtYWtlIHpsaWxvIDsgXAorICBtYWtlIG1vZHVsZXM7IFwKKyAgbWFrZSBtb2R1bGVzX2luc3RhbGwgOyAKKyAgZGVwbW9kIC1hICkgJj5sb2cgJgorIGxlc3MgbG9nICAjIHRoZW4gYSBjYXBpdGFsICdGJyB0byB3YXRjaCB0aGUgcHJvZ3Jlc3MKKyAgCitCdXQgdGhhdCBpcyBteSBwZXJzb25hbCBwcmVmZXJlbmNlLgorCisyLjIgQ29uZmlndXJhdGlvbgorIAorICBUaGUgY29uZmlndXJhdGlvbiByZXF1aXJlcyBtb2R1bGUgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlCitjb25maWd1cmF0aW9uLiAgSSBsaWtlIGttb2Qgb3Iga2VybmVsZCBwcm9jZXNzIHdpdGggdGhlCisvZXRjL21vZHByb2JlLmNvbmYgZmlsZSBzbyB0aGUgbW9kdWxlcyBjYW4gYXV0b21hdGljYWxseSBsb2FkL3VubG9hZCBhcwordGhleSBhcmUgdXNlZC4gIFRoZSB2aWRlbyBkZXZpY2VzIGNvdWxkIGFscmVhZHkgZXhpc3QsIGJlIGdlbmVyYXRlZAordXNpbmcgTUFLRURFViwgb3IgbmVlZCB0byBiZSBjcmVhdGVkLiAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXRhaWwKK3RoZXNlIHByb2NlZHVyZXMuCisKKworMi4xIE1vZHVsZSBDb25maWd1cmF0aW9uICAKKworICBVc2luZyBtb2R1bGVzIHJlcXVpcmVzIGEgYml0IG9mIHdvcmsgdG8gaW5zdGFsbCBhbmQgcGFzcyB0aGUKK3BhcmFtZXRlcnMuICBVbmRlcnN0YW5kIHRoYXQgZW50cmllcyBpbiAvZXRjL21vZHByb2JlLmNvbmYgb2Y6CisKKyAgIGFsaWFzIHBhcnBvcnRfbG93bGV2ZWwgcGFycG9ydF9wYworICAgb3B0aW9ucyBwYXJwb3J0X3BjIGlvPTB4Mzc4IGlycT1ub25lCisgICBhbGlhcyBjaGFyLW1ham9yLTgxIHZpZGVvZGV2CisgICBhbGlhcyBjaGFyLW1ham9yLTgxLTAgYy1xY2FtCisKK3dpbGwgY2F1c2UgdGhlIGttb2QvbW9kcHJvYmUgdG8gZG8gY2VydGFpbiB0aGluZ3MuICBJZiB5b3UgYXJlCit1c2luZyBrbW9kLCB0aGVuIGEgcmVxdWVzdCBmb3IgYSAnY2hhci1tYWpvci04MS0wJyB3aWxsIGNhdXNlCit0aGUgJ2MtcWNhbScgbW9kdWxlIHRvIGxvYWQuICBJZiB5b3UgaGF2ZSBvdGhlciB2aWRlbyBzb3VyY2VzIHdpdGgKK21vZHVsZXMsIHlvdSBtaWdodCB3YW50IHRvIGFzc2lnbiB0aGUgZGlmZmVyZW50IG1pbm9yIG51bWJlcnMgdG8KK2RpZmZlcmVudCBtb2R1bGVzLgorCisyLjIgRGV2aWNlIENvbmZpZ3VyYXRpb24KKworICBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgZmlsZXMgZXhpc3QuCitWaWRlbzRsaW51eCB1c2VkIHRoZSAvZGV2L3ZpZGVvKiBmaWxlcywgYW5kIHdlIHdhbnQgdG8gYXR0YWNoIHRoZQorUXVpY2tjYW0gdG8gb25lIG9mIHRoZXNlLgorCisgICBscyAtbGFkIC9kZXYvdmlkZW8qICAjIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiB0aGUgdmlkZW8gZGV2aWNlcworCitJZiB0aGUgdmlkZW8gZGV2aWNlcyBkbyBub3QgZXhpc3QsIHlvdSBjYW4gY3JlYXRlIHRoZW0gd2l0aDoKKworICBzdQorICBjZCAvZGV2CisgIGZvciBpaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDsgZG8KKyAgICBta25vZCB2aWRlbyRpaSBjIDgxICRpaSAgICMgY2hhci1tYWpvci04MS1bMC0xNl0KKyAgICBjaG93biByb290LnJvb3QgdmlkZW8kaWkgICMgb3duZWQgYnkgcm9vdAorICAgIGNobW9kIDYwMCB2aWRlbyRpaSAgICAgICAgIyByZWFkL3dyaXRhYmxlIGJ5IHJvb3Qgb25seQorICBkb25lCisKKyAgTG90cyBvZiBwZW9wbGUgY29ubmVjdCB2aWRlbzAgdG8gdmlkZW8gYW5kIGJ0dHYsIGJ1dCB5b3UgbWlnaHQgd2FudAoreW91ciBjLXFjYW0gdG8gbWVhbiBzb21ldGhpbmcgbW9yZToKKworICAgbG4gLXMgdmlkZW8wIGMtcWNhbSAgIyBtYWtlIC9kZXYvYy1xY2FtIGEgd29ya2luZyBmaWxlCisgICBsbiAtcyBjLXFjYW0gdmlkZW8gICAjIG1ha2UgL2Rldi9jLXFjYW0geW91ciBkZWZhdWx0IHZpZGVvIHNvdXJjZQorCisgIEJ1dCB0aGVzZSBhcmUgY29udmVuaWVuY2VzLiAgVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRvIG1ha2UgdGhlIHByb3Blcgorc3BlY2lhbCBjaGFyYWN0ZXIgZmlsZXMgd2l0aCB0aGUgcmlnaHQgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuICBBbGwKK29mIHRoZSBzcGVjaWFsIGRldmljZSBmaWxlcyBhcmUgbGlzdGVkIGluIC4uL2RldmljZXMudHh0LiAgSWYgeW91Cit3b3VsZCBsaWtlIHRoZSBjLXFjYW0gcmVhZGFibGUgYnkgbm9uLXJvb3QgdXNlcnMsIHlvdSB3aWxsIG5lZWQgdG8KK2NoYW5nZSB0aGUgcGVybWlzc2lvbnMuCisKKzMuMCBUcm91Ymxlc2hvb3RpbmcKKworICBJZiB0aGUgc2FtcGxlIHByb2dyYW0gYmVsb3csIHY0bGdyYWIsIGdpdmVzIHlvdSBvdXRwdXQgdGhlbgorZXZlcnl0aGluZyBpcyB3b3JraW5nLgorCisgICAgdjRsZ3JhYiB8IHdjICMgc2hvdWxkIGdpdmUgeW91IGEgY291bnQgb2YgY2hhcmFjdGVycworCisgIE90aGVyd2lzZSwgeW91IGhhdmUgc29tZSBwcm9ibGVtLgorCisgIFRoZSBjLXFjYW0gaXMgSUVFRTEyODQgY29tcGF0aWJsZSwgc28gaWYgeW91IGFyZSB1c2luZyB0aGUgcHJvYyBmaWxlCitzeXN0ZW0gKENPTkZJR19QUk9DX0ZTKSwgdGhlIHBhcmFsbGVsIHByaW50ZXIgc3VwcG9ydAorKENPTkZJR19QUklOVEVSKSwgdGhlIElFRUUgMTI4NCBzeXN0ZW0sKENPTkZJR19QUklOVEVSX1JFQURCQUNLKSwgeW91CitzaG91bGQgYmUgYWJsZSB0byByZWFkIHNvbWUgaWRlbnRpZmljYXRpb24gZnJvbSB5b3VyIHF1aWNrY2FtIHdpdGgKKworICAgICAgICAgbW9kcHJvYmUgLXYgcGFycG9ydAorICAgICAgICAgbW9kcHJvYmUgLXYgcGFycG9ydF9wcm9iZQorICAgICAgICAgY2F0IC9wcm9jL3BhcnBvcnQvUE9SVE5VTUJFUi9hdXRvcHJvYmUKK1JldHVybnM6CisgIENMQVNTOk1FRElBOworICBNT0RFTDpDb2xvciBRdWlja0NhbSAyLjA7CisgIE1BTlVGQUNUVVJFUjpDb25uZWN0aXg7CisKKyAgQSBnb29kIHJlc3BvbnNlIHRvIHRoaXMgaW5kaWNhdGVzIHRoYXQgeW91ciBjb2xvciBxdWlja2NhbSBpcyBhbGl2ZQorYW5kIHdlbGwuICBBIGNvbW1vbiBwcm9ibGVtIGlzIHRoYXQgdGhlIGN1cnJlbnQgZHJpdmVyIGRvZXMgbm90CityZWxpYWJseSBkZXRlY3QgYSBjLXFjYW0sIGV2ZW4gdGhvdWdoIG9uZSBpcyBhdHRhY2hlZC4gIEluIHRoaXMgY2FzZSwKKworICAgICBtb2Rwcm9iZSAtdiBjLXFjYW0gICAgIAorb3IKKyAgICAgaW5zbW9kIC12IGMtcWNhbQorCisgIFJldHVybnMgYSBtZXNzYWdlIHNheWluZyAiRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kiICBEZXZlbG9wbWVudCBpcworY3VycmVudGx5IHVuZGVyd2F5LCBidXQgYSB3b3JrYXJvdW5kIGlzIHRvIHBhdGNoIHRoZSBtb2R1bGUgdG8gc2tpcAordGhlIGRldGVjdGlvbiBjb2RlIGFuZCBhdHRhY2ggdG8gYSBkZWZpbmVkIHBvcnQuICBDaGVjayB0aGUKK3ZpZGVvNGxpbnV4IG1haWxpbmcgbGlzdCBhbmQgYXJjaGl2ZSBmb3IgbW9yZSBjdXJyZW50IGluZm9ybWF0aW9uLgorCiszLjEgQ2hlY2tsaXN0OgorCisgIENhbiB5b3UgZ2V0IGFuIGltYWdlPworICAgICAgICAgICAgdjRsZ3JhYiA+cWNhbS5wcG0gOyB3YyBxY2FtLnBwbSA7IHh2IHFjYW0ucHBtCisKKyAgSXMgYSB3b3JraW5nIGMtcWNhbSBjb25uZWN0ZWQgdG8gdGhlIHBvcnQ/IAorICAgICAgICAgICAgZ3JlcCBeIC9wcm9jL3BhcnBvcnQvPy9hdXRvcHJvYmUKKworICBEbyB0aGUgL2Rldi92aWRlbyogZmlsZXMgZXhpc3Q/ICAKKyAgICAgICAgICAgIGxzIC1sYWQgL2Rldi92aWRlbworCisgIElzIHRoZSBjLXFjYW0gbW9kdWxlIGxvYWRlZD8gICAgIAorICAgICAgICAgICAgbW9kcHJvYmUgLXYgYy1xY2FtIDsgbHNtb2QKKworICBEb2VzIHRoZSBjYW1lcmEgd29yayB3aXRoIGFsdGVybmF0ZSBwcm9ncmFtcz8gY3FjYW0sIGV0Yz8KKworCisKKworNC4wIEZ1dHVyZSBXb3JrIC8gY3VycmVudCB3b3JrYXJvdW5kcworCisgIEl0IGlzIGhvcGVkIHRoYXQgdGhpcyBzZWN0aW9uIHdpbGwgc29vbiBiZWNvbWUgb2Jzb2xldGUsIGJ1dCBpZiBpdAoraXNuJ3QsIHlvdSBtaWdodCB0cnkgcGF0Y2hpbmcgdGhlIGMtcWNhbSBtb2R1bGUgdG8gYWRkIGEgcGFycG9ydD14eHgKK29wdGlvbiBhcyBpbiB0aGUgYnctcWNhbSBtb2R1bGUgc28geW91IGNhbiBzcGVjaWZ5IHRoZSBwYXJhbGxlbCBwb3J0OgorCisgICAgICAgaW5zbW9kIC12IGMtcWNhbSBwYXJwb3J0PTAgIAorCitBbmQgYnlwYXNzIHRoZSBkZXRlY3Rpb24gY29kZSwgc2VlIC4uLy4uL2RyaXZlcnMvY2hhci9jLXFjYW0uYyBhbmQKK2xvb2sgZm9yIHRoZSAncWNfZGV0ZWN0JyBjb2RlIGFuZCBjYWxsLgorCisgIE5vdGUgdGhhdCB0aGVyZSBpcyB3b3JrIGluIHByb2dyZXNzIHRvIGNoYW5nZSB0aGUgdmlkZW80bGludXggQVBJLAordGhpcyB3b3JrIGlzIGRvY3VtZW50ZWQgYXQgdGhlIHZpZGVvNGxpbnV4MiBzaXRlIGxpc3RlZCBiZWxvdy4KKworCis5LjAgLS0tIEEgc2FtcGxlIHByb2dyYW0gdXNpbmcgdjRsZ3JhYmJlciwgCisKK1RoaXMgcHJvZ3JhbSBpcyBhIHNpbXBsZSBpbWFnZSBncmFiYmVyIHRoYXQgd2lsbCBjb3B5IGEgZnJhbWUgZnJvbSB0aGUKK2ZpcnN0IHZpZGVvIGRldmljZSwgL2Rldi92aWRlbzAgdG8gc3RhbmRhcmQgb3V0cHV0IGluIHBvcnRhYmxlIHBpeG1hcAorZm9ybWF0ICgucHBtKSAgVXNpbmcgdGhpcyBsaWtlOiAndjRsZ3JhYiB8IGNvbnZlcnQgLSBjLXFjYW0uanBnJworcHJvZHVjZWQgdGhpcyBwaWN0dXJlIG9mIG1lIGF0IAorICAgIGh0dHA6Ly9tdWcuc3lzLnZpcmdpbmlhLmVkdS9+ZHJmNW4vZXh0cmFzL2MtcWNhbS5qcGcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLSA4PCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiBTaW1wbGUgVmlkZW80TGludXggaW1hZ2UgZ3JhYmJlci4gKi8KKy8qCisgKglWaWRlbzRMaW51eCBEcml2ZXIgVGVzdC9FeGFtcGxlIEZyYW1lZ3JhYmJpbmcgUHJvZ3JhbQorICoKKyAqCUNvbXBpbGUgd2l0aDoKKyAqCQlnY2MgLXMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyB2NGxncmFiLmMgLW8gdjRsZ3JhYgorICogICAgICBVc2UgYXM6CisgKiAgICAgICAgICAgICAgdjRsZ3JhYiA+aW1hZ2UucHBtCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk4LTA1LTAzLCBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPiAgCisgKiAgICAgIENvcGllZCBmcm9tIGh0dHA6Ly93d3cudGF6ZW5kYS5kZW1vbi5jby51ay9waGlsL3ZncmFiYmVyLmMgCisgKiAgICAgIHdpdGggbWlub3IgbW9kaWZpY2F0aW9ucyAoRGF2ZSBGb3JyZXN0LCBkcmY1bkB2aXJnaW5pYS5lZHUpLgorICoKKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisKKyNkZWZpbmUgRklMRSAiL2Rldi92aWRlbzAiCisKKy8qIFN0b2xlIHRoaXMgZnJvbSB0dnNldC5jICovCisKKyNkZWZpbmUgUkVBRF9WSURFT19QSVhFTChidWYsIGZvcm1hdCwgZGVwdGgsIHIsIGcsIGIpICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfR1JFWTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVwdGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocikgPSAoZykgPSAoYikgPSAoKmJ1ZisrIDw8IDgpO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocikgPSAoZykgPSAoYikgPSAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopIGJ1Zik7ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdG1wID0gKih1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gdG1wJjB4RjgwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGcpID0gKHRtcDw8NSkmMHhGQzAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGIpID0gKHRtcDw8MTEpJjB4RjgwMDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgVklERU9fUEFMRVRURV9SR0I1NTU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gKGJ1ZlswXSYweEY4KTw8ODsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGcpID0gKChidWZbMF0gPDwgNSB8IGJ1ZlsxXSA+PiAzKSYweEY4KTw8ODsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGIpID0gKChidWZbMV0gPDwgMiApICYgMHhGOCk8PDg7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNhc2UgVklERU9fUEFMRVRURV9SR0IyNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gYnVmWzBdIDw8IDg7IChnKSA9IGJ1ZlsxXSA8PCA4OyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGIpID0gYnVmWzJdIDw8IDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICs9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9ybWF0ICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKK2ludCBnZXRfYnJpZ2h0bmVzc19hZGoodW5zaWduZWQgY2hhciAqaW1hZ2UsIGxvbmcgc2l6ZSwgaW50ICpicmlnaHRuZXNzKSB7CisgIGxvbmcgaSwgdG90ID0gMDsKKyAgZm9yIChpPTA7aTxzaXplKjM7aSsrKQorICAgIHRvdCArPSBpbWFnZVtpXTsKKyAgKmJyaWdodG5lc3MgPSAoMTI4IC0gdG90LyhzaXplKjMpKS8zOworICByZXR1cm4gISgodG90LyhzaXplKjMpKSA+PSAxMjYgJiYgKHRvdC8oc2l6ZSozKSkgPD0gMTMwKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikKK3sKKyAgaW50IGZkID0gb3BlbihGSUxFLCBPX1JET05MWSksIGY7CisgIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGNhcDsKKyAgc3RydWN0IHZpZGVvX3dpbmRvdyB3aW47CisgIHN0cnVjdCB2aWRlb19waWN0dXJlIHZwaWM7CisKKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqc3JjOworICBpbnQgYnBwID0gMjQsIHIsIGcsIGI7CisgIHVuc2lnbmVkIGludCBpLCBzcmNfZGVwdGg7CisKKyAgaWYgKGZkIDwgMCkgeworICAgIHBlcnJvcihGSUxFKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYgKGlvY3RsKGZkLCBWSURJT0NHQ0FQLCAmY2FwKSA8IDApIHsKKyAgICBwZXJyb3IoIlZJRElPR0NBUCIpOworICAgIGZwcmludGYoc3RkZXJyLCAiKCIgRklMRSAiIG5vdCBhIHZpZGVvNGxpbnV4IGRldmljZT8pXG4iKTsKKyAgICBjbG9zZShmZCk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChpb2N0bChmZCwgVklESU9DR1dJTiwgJndpbikgPCAwKSB7CisgICAgcGVycm9yKCJWSURJT0NHV0lOIik7CisgICAgY2xvc2UoZmQpOworICAgIGV4aXQoMSk7CisgIH0KKworICBpZiAoaW9jdGwoZmQsIFZJRElPQ0dQSUNULCAmdnBpYykgPCAwKSB7CisgICAgcGVycm9yKCJWSURJT0NHUElDVCIpOworICAgIGNsb3NlKGZkKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYgKGNhcC50eXBlICYgVklEX1RZUEVfTU9OT0NIUk9NRSkgeworICAgIHZwaWMuZGVwdGg9ODsKKyAgICB2cGljLnBhbGV0dGU9VklERU9fUEFMRVRURV9HUkVZOyAgICAvKiA4Yml0IGdyZXkgKi8KKyAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKSA8IDApIHsKKyAgICAgIHZwaWMuZGVwdGg9NjsKKyAgICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpIDwgMCkgeworICAgICAgICB2cGljLmRlcHRoPTQ7CisgICAgICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpIDwgMCkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZpbmQgYSBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXQuXG4iKTsKKyAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICB2cGljLmRlcHRoPTI0OworICAgIHZwaWMucGFsZXR0ZT1WSURFT19QQUxFVFRFX1JHQjI0OworICAgIAorICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpIDwgMCkgeworICAgICAgdnBpYy5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCNTY1OworICAgICAgdnBpYy5kZXB0aD0xNjsKKyAgICAgIAorICAgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYyk9PS0xKSB7CisgICAgICAgIHZwaWMucGFsZXR0ZT1WSURFT19QQUxFVFRFX1JHQjU1NTsKKyAgICAgICAgdnBpYy5kZXB0aD0xNTsKKyAgICAgICAgCisgICAgICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpPT0tMSkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZpbmQgYSBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXQuXG4iKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIGJ1ZmZlciA9IG1hbGxvYyh3aW4ud2lkdGggKiB3aW4uaGVpZ2h0ICogYnBwKTsKKyAgaWYgKCFidWZmZXIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkuXG4iKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBkbyB7CisgICAgaW50IG5ld2JyaWdodDsKKyAgICByZWFkKGZkLCBidWZmZXIsIHdpbi53aWR0aCAqIHdpbi5oZWlnaHQgKiBicHApOworICAgIGYgPSBnZXRfYnJpZ2h0bmVzc19hZGooYnVmZmVyLCB3aW4ud2lkdGggKiB3aW4uaGVpZ2h0LCAmbmV3YnJpZ2h0KTsKKyAgICBpZiAoZikgeworICAgICAgdnBpYy5icmlnaHRuZXNzICs9IChuZXdicmlnaHQgPDwgOCk7CisgICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKT09LTEpIHsKKyAgICAgICAgcGVycm9yKCJWSURJT1NQSUNUIik7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoZik7CisKKyAgZnByaW50ZihzdGRvdXQsICJQNlxuJWQgJWQgMjU1XG4iLCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpOworCisgIHNyYyA9IGJ1ZmZlcjsKKworICBmb3IgKGkgPSAwOyBpIDwgd2luLndpZHRoICogd2luLmhlaWdodDsgaSsrKSB7CisgICAgUkVBRF9WSURFT19QSVhFTChzcmMsIHZwaWMucGFsZXR0ZSwgc3JjX2RlcHRoLCByLCBnLCBiKTsKKyAgICBmcHV0YyhyPj44LCBzdGRvdXQpOworICAgIGZwdXRjKGc+PjgsIHN0ZG91dCk7CisgICAgZnB1dGMoYj4+OCwgc3Rkb3V0KTsKKyAgfQorICAgIAorICBjbG9zZShmZCk7CisgIHJldHVybiAwOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLSA4PCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKzEwLjAgLS0tIE90aGVyIEluZm9ybWF0aW9uCisKK1VzZSB0aGUgLi4vLi4vTWFpbnRhaW5lcnMgZmlsZSwgcGFydGljdWxhcmx5IHRoZSAgVklERU8gRk9SIExJTlVYIGFuZCBQQVJBTExFTAorUE9SVCBTVVBQT1JUIHNlY3Rpb25zCisKK1RoZSB2aWRlbzRsaW51eCBwYWdlOgorICBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGwuc2h0bWwKKworVGhlIHZpZGVvNGxpbnV4MiBwYWdlOgorICBodHRwOi8vbWlsbGVubml1bS5kaWFkcy5jb20vYmRpcmtzL3Y0bDIuaHRtCisKK1NvbWUgd2ViIHBhZ2VzIGFib3V0IHRoZSBxdWlja2NhbXM6CisgICBodHRwOi8vd3d3LmRrZnotaGVpZGVsYmVyZy5kZS9NYWNyb21vbC93ZWRlbWFubi9taW5pLUhPV1RPLWNxY2FtLmh0bWwKKworICAgaHR0cDovL3d3dy5jcnlud3IuY29tL3FjcGMvICAgICAgICAgICAgUXVpY2tDYW0gVGhpcmQtUGFydHkgRHJpdmVycworICAgaHR0cDovL3d3dy5jcnlud3IuY29tL3FjcGMvcmUuaHRtbCAgICAgU29tZSBSZXZlcnNlIEVuZ2luZWVyaW5nCisgICBodHRwOi8vY3NlLnVubC5lZHUvfmNsdWVuaW5nL2dxY2FtLyAgICB2NGwgY2xpZW50CisgICBodHRwOi8vcGhvYm9zLmlsbHRlbC5kZW52ZXIuY28udXMvcHViL3FjcmVhZC8gZG9lc24ndCB1c2UgdjRsCisgICBmdHA6Ly9mdHAuY3MudW5tLmVkdS9wdWIvY2hyaXMvcXVpY2tjYW0vICAgSGFzIGxvdHMgb2YgZHJpdmVycworICAgaHR0cDovL3d3dy5jcy5kdWtlLmVkdS9+cmV5bm9sZHMvcXVpY2tjYW0vIEhhcyBsb3RzIG9mIGluZm9ybWF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3BpYSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1ZTdiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEKQEAgLTAsMCArMSwxOTEgQEAKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBDUGlBIFBQQzIgZHJpdmVuIHBhcmFsbGVsIGNvbm5lY3RlZAorQ2FtZXJhLiBGb3IgZXhhbXBsZSB0aGUgQ3JlYXRpdmUgV2ViY2FtSUkgaXMgQ1BpQSBkcml2ZW4uCisKKyAgICkgWzFdUGV0ZXIgUHJlZ2xlciwgTGlueiAyMDAwLCBwdWJsaXNoZWQgdW5kZXIgdGhlIFsyXUdOVSBHUEwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VTQUdFOgorCitHZW5lcmFsOgorPT09PT09PT0KKworMSkgTWFrZSBzdXJlIHlvdSBoYXZlIGNyZWF0ZWQgdGhlIHZpZGVvIGRldmljZXMgKC9kZXYvdmlkZW8qKToKKworLSBpZiB5b3UgaGF2ZSBhIHJlY2VudCBNQUtFREVWIGRvIGEgJ2NkIC9kZXY7Li9NQUtFREVWIHZpZGVvJworLSBvdGhlcndpc2UgZG8gYToKKworY2QgL2RldgorbWtub2QgdmlkZW8wIGMgODEgMAorbG4gLXMgdmlkZW8wIHZpZGVvCisKKzIpIENvbXBpbGUgdGhlIGtlcm5lbCAoc2VlIGJlbG93IGZvciB0aGUgbGlzdCBvZiBvcHRpb25zIHRvIHVzZSksCisgICBjb25maWd1cmUgeW91ciBwYXJwb3J0IGFuZCByZWJvb3QuCisKKzMpIElmIGFsbCB3b3JrZWQgd2VsbCB5b3Ugc2hvdWxkIGdldCBtZXNzYWdlcyBzaW1pbGFyCisgICB0byB0aGUgZm9sbG93aW5nICh5b3VyIHZlcnNpb25zIG1heSBiZSBkaWZmZXJlbnQpIG9uIHRoZSBjb25zb2xlOgorCitWNEwtRHJpdmVyIGZvciBWaXNpb24gQ1BpQSBiYXNlZCBjYW1lcmFzIHYwLjcuNAorcGFycG9ydDA6IHJlYWQyIHRpbWVvdXQuCitwYXJwb3J0MDogTXVsdGltZWRpYSBkZXZpY2UsIFZMU0kgVmlzaW9uIEx0ZCBQUEMyCitQYXJhbGxlbCBwb3J0IGRyaXZlciBmb3IgVmlzaW9uIENQaUEgYmFzZWQgY2FtZXJhCisgIENQSUEgVmVyc2lvbjogMS4yMCAoMi4wKQorICBDUElBIFBuUC1JRDogMDU1MzowMDAyOjAxMDAKKyAgVlAtVmVyc2lvbjogMS4wIDAxMDAKKyAgMSBjYW1lcmEocykgZm91bmQKKworCitBcyBtb2R1bGVzOgorPT09PT09PT09PT0KKworTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBmb2xsb3dpbmcga2VybmVsIG9wdGlvbnMgKHlvdSBjYW4KK3NlbGVjdCBhbGwgc3R1ZmYgYXMgbW9kdWxlcyk6CisKK1RoZSBjcGlhLXN0dWZmIGlzIGluIHRoZSBzZWN0aW9uICdDaGFyYWN0ZXIgZGV2aWNlcyAtPiBWaWRlbyBGb3IgTGludXgnLgorCitDT05GSUdfUEFSUE9SVD1tCitDT05GSUdfUEFSUE9SVF9QQz1tCitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fQ1BJQT1tCitDT05GSUdfVklERU9fQ1BJQV9QUD1tCisKK0ZvciBhdXRvbG9hZGluZyBvZiBhbGwgdGhvc2UgbW9kdWxlcyB5b3UgbmVlZCB0byB0ZWxsIG1vZHVsZS1pbml0LXRvb2xzCitzb21lIHN0dWZmLiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgbW9kdWxlLWluaXQtdG9vbHMgY29uZmlnLWZpbGUKKyhlLmcuIC9ldGMvbW9kcHJvYmUuY29uZiBvciB3aGVyZXZlciB5b3VyIGRpc3RyaWJ1dGlvbiBkb2VzIHN0b3JlIHRoYXQKK3N0dWZmKToKKworb3B0aW9ucyBwYXJwb3J0X3BjIGlvPTB4Mzc4IGlycT03IGRtYT0zCithbGlhcyBjaGFyLW1ham9yLTgxIGNwaWFfcHAKKworVGhlIGZpcnN0IGxpbmUgdGVsbHMgdGhlIGRtYS9pcnEgY2hhbm5lbHMgdG8gdXNlLiBUaG9zZSBfbXVzdF8gbWF0Y2gKK3RoZSBzZXR0aW5ncyBvZiB5b3VyIEJJT1MuIERvIE5PVCBzaW1wbHkgdXNlIHRoZSB2YWx1ZXMgYWJvdmUuICBTZWUKK0RvY3VtZW50YXRpb24vcGFycG9ydC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4gVGhlIHNlY29uZAorbGluZSBhc3NvY2lhdGVzIHRoZSB2aWRlby1kZXZpY2UgZmlsZSB3aXRoIHRoZSBkcml2ZXIuIE9mIGNhdXNlIHlvdQorY2FuIGFsc28gbG9hZCB0aGUgbW9kdWxlcyBvbmNlIHVwb24gYm9vdCAodXN1YWxseSBkb25lIGluIC9ldGMvbW9kdWxlcykuCisKK0xpbmtlZCBpbnRvIHRoZSBrZXJuZWw6Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitNYWtlIHN1cmUgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGZvbGxvd2luZyBrZXJuZWwgb3B0aW9ucy4gTm90ZSB0aGF0Cit5b3UgY2Fubm90IGNvbXBpbGUgdGhlIHBhcnBvcnQtc3R1ZmYgYXMgbW9kdWxlcyBhbmQgdGhlIGNwaWEtZHJpdmVyCitzdGF0aWNhbGx5ICh0aGUgb3RoZXIgd2F5IHJvdW5kIGlzIG9rYXkgdGhvdWdoKS4KKworVGhlIGNwaWEtc3R1ZmYgaXMgaW4gdGhlIHNlY3Rpb24gJ0NoYXJhY3RlciBkZXZpY2VzIC0+IFZpZGVvIEZvciBMaW51eCcuCisKK0NPTkZJR19QQVJQT1JUPXkKK0NPTkZJR19QQVJQT1JUX1BDPXkKK0NPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQorQ09ORklHX1BBUlBPUlRfMTI4ND15CitDT05GSUdfVklERU9fREVWPXkKK0NPTkZJR19WSURFT19DUElBPXkKK0NPTkZJR19WSURFT19DUElBX1BQPXkKKworVG8gdXNlIERNQS9pcnEgeW91IHdpbGwgbmVlZCB0byB0ZWxsIHRoZSBrZXJuZWwgdXBvbiBib290IHRpbWUgdGhlCitoYXJkd2FyZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwYXJwb3J0LiBZb3UgY2FuIGdpdmUgdGhlIGJvb3QtcGFyYW1ldGVyCithdCB0aGUgTElMTy1wcm9tcHQgb3Igc3BlY2lmeSBpdCBpbiBsaWxvLmNvbmYuIEkgdXNlIHRoZSBmb2xsb3dpbmcKK2FwcGVuZC1saW5lIGluIGxpbG8uY29uZjoKKworICAgICAgICBhcHBlbmQ9InBhcnBvcnQ9MHgzNzgsNywzIgorCitTZWUgRG9jdW1lbnRhdGlvbi9wYXJwb3J0LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2NvbmZpZ3VyYXRpb24gb2YgdGhlIHBhcnBvcnQgYW5kIHRoZSB2YWx1ZXMgZ2l2ZW4gYWJvdmUuIERvIG5vdCBzaW1wbHkKK3VzZSB0aGUgdmFsdWVzIGdpdmVuIGFib3ZlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZFQVRVUkVTOgorCistIG1tYXAvcmVhZCB2NGwtaW50ZXJmYWNlIChidXQgbm8gb3ZlcmxheSkKKy0gaW1hZ2UgZm9ybWF0czogQ0lGL1FDSUYsIFNJRi9RU0lGLCB2YXJpb3VzIG90aGVycyB1c2VkIGJ5IGlzYWJlbDsKKyAgbm90ZTogYWxsIHNpemVzIGV4Y2VwdCBDSUYvUUNJRiBhcmUgaW1wbGVtZW50ZWQgYnkgY2xpcHBpbmcsIGkuZS4KKyAgcGl4ZWxzIGFyZSBub3QgdXBsb2FkZWQgZnJvbSB0aGUgY2FtZXJhCistIHBhbGV0dGVzOiBWSURFT19QQUxFVFRFX0dSQVksIFZJREVPX1BBTEVUVEVfUkdCNTY1LCBWSURFT19QQUxFVFRFX1JHQjU1NSwKKyAgVklERU9fUEFMRVRURV9SR0IyNCwgVklERU9fUEFMRVRURV9SR0IzMiwgVklERU9fUEFMRVRURV9ZVVlWLAorICBWSURFT19QQUxFVFRFX1VZVlksIFZJREVPX1BBTEVUVEVfWVVWNDIyCistIHN0YXRlIGluZm9ybWF0aW9uIChjb2xvciBiYWxhbmNlLCBleHBvc3VyZSwgLi4uKSBpcyBwcmVzZXJ2ZWQgYmV0d2VlbgorICBkZXZpY2Ugb3BlbnMKKy0gY29tcGxldGUgY29udHJvbCBvdmVyIGNhbWVyYSB2aWEgcHJvYy1pbnRlcmZhY2UgKF9hbGxfIGNhbWVyYSBzZXR0aW5ncyBhcmUKKyAgc3VwcG9ydGVkKSwgdGhlcmUgaXMgYWxzbyBhIHB5dGhvbi1ndGsgYXBwbGljYXRpb24gYXZhaWxhYmxlIGZvciB0aGlzIFszXQorLSB3b3JrcyB1bmRlciBTTVAgKGJ1dCB0aGUgZHJpdmVyIGlzIGNvbXBsZXRlbHkgc2VyaWFsaXplZCBhbmQgc3luY2hyb25vdXMpCisgIHNvIHlvdSBnZXQgbm8gYmVuZWZpdCBmcm9tIFNNUCwgYnV0IGF0IGxlYXN0IGl0IGRvZXMgbm90IGNyYXNoIHlvdXIgYm94CistIG1pZ2h0IHdvcmsgZm9yIG5vbi1JbnRlbCBhcmNoaXRlY3R1cmUsIGxldCB1cyBrbm93IGFib3V0IHRoaXMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitURVNURUQgQVBQTElDQVRJT05TOgorCistIGEgc2ltcGxlIHRlc3QgYXBwbGljYXRpb24gYmFzZWQgb24gWHQgaXMgYXZhaWxhYmxlIGF0IFszXQorLSBhbm90aGVyIHRlc3QtYXBwbGljYXRpb24gYmFzZWQgb24gZ3FjYW0tMC40ICh1c2VzIEdUSykKKy0gZ3FjYW0tMC42IHNob3VsZCB3b3JrCistIHhhd3R2LTMueCAoYWxzbyB0aGUgd2ViY2FtIHNvZnR3YXJlKQorLSB4YXd0di0yLjQ2CistIHczY2FtIChjZ2ktaW50ZXJmYWNlIGFuZCB2aWRjYXQsIGUuZy4geW91IG1heSB0cnkgb3V0ICd2aWRjYXQgIHx4dgorICAtbWF4cGVjdCAtcm9vdCAtcXVpdCArbm9yZXNldHJvb3QgLXJtb2RlIDUgLScpCistIHZpYywgdGhlIE1CT05FIHZpZGVvIGNvbmZlcmVuY2luZyB0b29sICh2ZXJzaW9uIDIuOHVjbDQtMSkKKy0gaXNhYmVsIDNSNGJldGEgKGJhcmVseSB3b3JraW5nLCBidXQgQUZBSUNUIGFsbCB0aGUgcHJvYmxlbXMgYXJlIG9uCisgIHRoZWlyIHNpZGUpCistIGNhbXNlcnYtMC40MAorCitTZWUgWzNdIGZvciBwb2ludGVycyB0byB2NGwtYXBwbGljYXRpb25zLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0tOT1dOIFBST0JMRU1TOgorCistIHNvbWUgYXBwbGljYXRpb25zIGRvIG5vdCBoYW5kbGUgdGhlIGltYWdlIGZvcm1hdCBjb3JyZWN0bHksIHlvdSB3aWxsCisgIHNlZSBzdHJhbmdlIGhvcml6b250YWwgc3RyaXBlcyBpbnN0ZWFkIG9mIGEgbmljZSBwaWN0dXJlIC0+IG1ha2Ugc3VyZQorICB5b3VyIGFwcGxpY2F0aW9uIGRvZXMgdXNlIGEgc3VwcG9ydGVkIGltYWdlIHNpemUgb3IgcXVlcmllcyB0aGUgZHJpdmVyCisgIGZvciB0aGUgYWN0dWFsbHkgdXNlZCBzaXplIChyZWFzb24gYmVoaW5kIHRoaXM6IHRoZSBjYW1lcmEgY2Fubm90CisgIHByb3ZpZGUgYW55IGltYWdlIGZvcm1hdCwgc28gaWYgc2l6ZSBOeE0gaXMgcmVxdWVzdGVkIHRoZSBkcml2ZXIgd2lsbAorICB1c2UgYSBmb3JtYXQgdG8gdGhlIGNsb3Nlc3QgZml0dGluZyBOMXhNMSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3cKKyAgcXVlcnkgZm9yIHRoaXMgZ3JhbnRlZCBzaXplLCBtb3N0IGFwcGxpY2F0aW9ucyBkbyBub3QpLgorLSBhbGwgdGhlIHRvZG8gOykKKy0gaWYgdGhlcmUgaXMgbm90IGVub3VnaCBsaWdodCBhbmQgdGhlIHBpY3R1cmUgaXMgdG9vIGRhcmsgdHJ5IHRvCisgIGFkanVzdCB0aGUgU2V0U2Vuc29yRlBTIHNldHRpbmcsIGF1dG9tYXRpYyBmcmFtZSByYXRlIGFkanVzdG1lbnQKKyAgaGFzIGl0cyBwcmljZQorLSBkbyBub3QgdHJ5IG91dCBpc2FiZWwgM1I0YmV0YSAoYnVpbHQgMTM1KSwgeW91IHdpbGwgYmUgZGlzYXBwb2ludGVkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVE9ETzoKKworLSBtdWx0aXBsZSBjYW1lcmEgc3VwcG9ydCAoc3RydWN0IGNhbWVyYSBvciBzb21ldGhpbmcpIC0gVGhpcyBzaG91bGQgd29yaywKKyAgYnV0IGhhc24ndCBiZWVuIHRlc3RlZCB5ZXQuCistIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVuY2U/CistIFNNUC1zYWZlIGFzeW5jaHJvbm91cyBtbWFwIGludGVyZmFjZQorLSBuaWJibGUgbW9kZSBmb3Igb2xkIHBhcnBvcnQgaW50ZXJmYWNlcworLSBzdHJlYW1pbmcgY2FwdHVyZSwgdGhpcyBzaG91bGQgZ2l2ZSBhIHBlcmZvcm1hbmNlIGdhaW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTVBMRU1FTlRBVElPTiBOT1RFUzoKKworVGhlIGNhbWVyYSBjYW4gYWN0IGluIHR3byBtb2Rlcywgc3RyZWFtaW5nIG9yIGdyYWJiaW5nLiBSaWdodCBub3cgYQorcG9sbGluZyBncmFiLXNjaGVtZSBpcyB1c2VkLiBNYXliZSBpbnRlcnJ1cHQgZHJpdmVuIHN0cmVhbWluZyB3aWxsIGJlCit1c2VkIGZvciBhIGFzeW5jaHJvbm91cyBtbWFwIGludGVyZmFjZSBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIHRoZQorZHJpdmVyLiBUaGlzIG1pZ2h0IGdpdmUgYSBiZXR0ZXIgZnJhbWUgcmF0ZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUSEFOS1MgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpOgorCistIFNjb3R0IEouIEJlcnRpbiA8c2JlcnRpbkBtaW5kc3ByaW5nLmNvbT4gZm9yIGNsZWFudXBzLCB0aGUgcHJvYy1maWxlc3lzdGVtCisgIGFuZCBtdWNoIG1vcmUKKy0gSGVucnkgQnJ1Y2UgPHdoYkB2dmwuY28udWs+IGZvciBwcm92aWRpbmcgZGV2ZWxvcGVycyBpbmZvcm1hdGlvbiBhYm91dAorICB0aGUgQ1BpQSBjaGlwLCBJIHdpc2ggYWxsIGNvbXBhbmllcyB3b3VsZCB0cmVhdCBMaW51eCBhcyBzZXJpb3VzbHkKKy0gS2Fyb2x5IEVyZGVpIDxLYXJvbHkuRXJkZWlAcmlzYy51bmktbGluei5hYy5hdD4gYW5kIFJJU0MtTGlueiBmb3IgYmVpbmcKKyAgbXkgYm9zcyA7KSByZXNwLiBteSBlbXBsb3llciBhbmQgZm9yIHByb3ZpZGluZyBtZSB0aGUgaGFyZHdhcmUgYW5kCisgIGFsbG93IG1lIHRvIGRldm90ZSBzb21lIHdvcmtpbmcgdGltZSB0byB0aGlzIHByb2plY3QKKy0gTWFudWVsIEouIFBldGl0IGRlIEdhYnJpZWwgPG1wZXRpdEBkaXQudXBtLmVzPiBmb3IgcHJvdmlkaW5nIGhlbHAKKyAgd2l0aCBJc2FiZWwgKGh0dHA6Ly9pc2FiZWwuZGl0LnVwbS5lcy8pCistIEJhcyBIdWlzbWFuIDxiaHVpc21AY3MudXR3ZW50ZS5ubD4gZm9yIHdyaXRpbmcgdGhlIGluaXRpYWwgcGFycG9ydCBjb2RlCistIEphcmwgVG90bGFuZCA8SmFybC5Ub3RsYW5kQGJkYy5ubz4gZm9yIHNldHRpbmcgdXAgdGhlIG1haWxpbmcgbGlzdCAKKyAgYW5kIG1haW50YWluaW5nIHRoZSB3ZWItc2VydmVyWzNdCistIENocmlzIFdoaXRlZm9yZCA8Q2hyaXNAaW5mb3JtaW50ZXJhY3RpdmUuY29tPiBmb3IgZml4ZXMgcmVsYXRlZCB0byB0aGUKKyAgMS4wMiBmaXJtd2FyZQorLSBzcGVjaWFsIGt1ZG9zIHRvIGFsbCB0aGUgdGVzdGVyIHdob3NlIG1hY2hpbmVzIGNyYXNoZWQgYW5kL29yCisgIHdpbGwgY3Jhc2guIDopCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVGRVJFTkNFUworCisgICAxLiBodHRwOi8vd3d3LnJpc2MudW5pLWxpbnouYWMuYXQvcGVvcGxlL3BwcmVnbGVyCisgICAgICBtYWlsdG86UGV0ZXJfUHJlZ2xlckBlbWFpbC5jb20KKyAgIDIuIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSB0b3AgZGlyZWN0b3J5IG9mIHRoZSBrZXJuZWwgdHJlZQorICAgMy4gaHR0cDovL3dlYmNhbS5zb3VyY2Vmb3JnZS5uZXQvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3g4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTdhYjgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3g4OApAQCAtMCwwICsxLDY5IEBACisKK2N4ODgwMCByZWxlYXNlIG5vdGVzCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgdjRsMiBkZXZpY2UgZHJpdmVyIGZvciB0aGUgY3gyMzg4eCBjaGlwLgorCisKK2N1cnJlbnQgc3RhdHVzCis9PT09PT09PT09PT09PQorCit2aWRlbworCS0gQmFzaWNhbGx5IHdvcmtzLgorCS0gU29tZSBtaW5vciBpbWFnZSBxdWFsaXR5IGdsaXRjaGVzLgorCS0gRm9yIG5vdyBvbmx5IGNhcHR1cmUsIG92ZXJsYXkgc3VwcG9ydCBpc24ndCBjb21wbGV0ZWQgeWV0LgorCithdWRpbworCS0gVGhlIGNoaXAgc3BlY3MgZm9yIHRoZSBvbi1jaGlwIFRWIHNvdW5kIGRlY29kZXIgYXJlIG5leHQKKwkgIHRvIHVzZWxlc3MgOi0vCisJLSBOZXZlcmxlc3MgdGhlIGJ1aWx0aW4gVFYgc291bmQgZGVjb2RlciBzdGFydHMgd29ya2luZyBub3csCisgICAgICAgICAgYXQgbGVhc3QgZm9yIFBBTC1CRy4gIE90aGVyIFRWIG5vcm1zIG5lZWQgb3RoZXIgY29kZSAuLi4KKyAgICAgICAgICBGT1IgQU5ZIFJFUE9SVFMgT04gVEhJUyBQTEVBU0UgTUVOVElPTiBUSEUgVFYgTk9STSBZT1UgQVJFCisgICAgICAgICAgVVNJTkcuCisJLSBNb3N0IHR1bmVyIGNoaXBzIGRvIHByb3ZpZGUgbW9ubyBzb3VuZCwgd2hpY2ggbWF5IG9yIG1heSBub3QKKwkgIGJlIHVzZWFibGUgZGVwZW5kaW5nIG9uIHRoZSBib2FyZCBkZXNpZ24uICBXaXRoIHRoZSBIYXVwcGF1Z2UKKwkgIGNhcmRzIGl0IHdvcmtzLCBzbyB0aGVyZSBpcyBtb25vIHNvdW5kIGF2YWlsYWJsZSBhcyBmYWxsYmFjay4KKwktIGF1ZGlvIGRhdGEgZG1hIChpLmUuIHJlY29yZGluZyB3aXRob3V0IGxvb3BiYWNrIGNhYmxlIHRvIHRoZQorCSAgc291bmQgY2FyZCkgc2hvdWxkIGJlIHBvc3NpYmxlLCBidXQgdGhlcmUgaXMgbm8gY29kZSB5ZXQgLi4uCisKK3ZiaQorCS0gc29tZSBjb2RlIHByZXNlbnQuICBEb2Vzbid0IGNyYXNoIGFueSBtb3JlLCBidXQgYWxzbyBkb2Vzbid0CisJICB3b3JrIHlldCAuLi4KKworCitob3cgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldyBjYXJkcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGRyaXZlciBuZWVkcyBzb21lIGNvbmZpZyBpbmZvIGZvciB0aGUgVFYgY2FyZHMuICBUaGlzIHN0dWZmIGlzIGluCitjeDg4LWNhcmRzLmMuICBJZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgd29yayB3ZWxsIHlvdSBsaWtlbHkgbmVlZCBhIG5ldworZW50cnkgZm9yIHlvdXIgY2FyZCBpbiB0aGF0IGZpbGUuICBDaGVjayB0aGUga2VybmVsIGxvZyAodXNpbmcgZG1lc2cpCit0byBzZWUgd2hlbmV2ZXIgdGhlIGRyaXZlciBrbm93cyB5b3VyIGNhcmQgb3Igbm90LiAgVGhlcmUgaXMgYSBsaW5lCitsaWtlIHRoaXMgb25lOgorCisJY3g4ODAwWzBdOiBzdWJzeXN0ZW06IDAwNzA6MzQwMCwgYm9hcmQ6IEhhdXBwYXVnZSBXaW5UViBcCisJCTM0eHh4IG1vZGVscyBbY2FyZD0xLGF1dG9kZXRlY3RlZF0KKworSWYgeW91ciBjYXJkIGlzIGxpc3RlZCBhcyAiYm9hcmQ6IFVOS05PV04vR0VORVJJQyIgaXQgaXMgdW5rbm93biB0bwordGhlIGRyaXZlci4gIFdoYXQgdG8gZG8gdGhlbj8KKworICgxKSBUcnkgdXBncmFkaW5nIHRvIHRoZSBsYXRlc3Qgc25hcHNob3QsIG1heWJlIGl0IGhhcyBiZWVuIGFkZGVkCisgICAgIG1lYW53aGlsZS4KKyAoMikgWW91IGNhbiB0cnkgdG8gY3JlYXRlIGEgbmV3IGVudHJ5IHlvdXJzZWxmLCBoYXZlIGEgbG9vayBhdAorICAgICBjeDg4LWNhcmRzLmMuICBJZiB0aGF0IHdvcmtlZCwgbWFpbCBtZSB5b3VyIGNoYW5nZXMgYXMgdW5pZmllZAorICAgICBkaWZmICgiZGlmZiAtdSIpLgorICgzKSBPciB5b3UgY2FuIG1haWwgbWUgdGhlIGNvbmZpZyBpbmZvcm1hdGlvbi4gIEkgbmVlZCBhdCBsZWFzdCB0aGUKKyAgICAgZm9sbG93aW5nIGluZm9ybWF0aW9ucyB0byBhZGQgdGhlIGNhcmQ6CisKKyAgICAgKiB0aGUgUENJIFN1YnN5c3RlbSBJRCAoIjAwNzA6MzQwMCIgZnJvbSB0aGUgbGluZSBhYm92ZSwKKyAgICAgICAibHNwY2kgLXYiIG91dHB1dCBpcyBmaW5lIHRvbykuCisgICAgICogdGhlIHR1bmVyIHR5cGUgdXNlZCBieSB0aGUgY2FyZC4gIFlvdSBjYW4gdHJ5IHRvIGZpbmQgb25lIGJ5CisgICAgICAgdHJpYWwtYW5kLWVycm9yIHVzaW5nIHRoZSB0dW5lcj08bj4gaW5zbW9kIG9wdGlvbi4gIElmIHlvdQorICAgICAgIGtub3cgd2hpY2ggb25lIHRoZSBjYXJkIGhhcyB5b3UgY2FuIGFsc28gaGF2ZSBhIGxvb2sgYXQgdGhlCisgICAgICAgbGlzdCBpbiBDQVJETElTVC50dW5lcgorCitIYXZlIGZ1biwKKworICBHZXJkCisKKy0tIAorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuaXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5pcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE0N2E4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuaXIKQEAgLTAsMCArMSw3MiBAQAorCitpbmZyYXJlZCByZW1vdGUgY29udHJvbCBzdXBwb3J0IGluIHZpZGVvNGxpbnV4IGRyaXZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2Jhc2ljcworLS0tLS0tCisKK0N1cnJlbnQgdmVyc2lvbnMgdXNlIHRoZSBsaW51eCBpbnB1dCBsYXllciB0byBzdXBwb3J0IGluZnJhcmVkCityZW1vdGUgY29udHJvbHMuICBJIHN1Z2dlc3QgdG8gZG93bmxvYWQgbXkgaW5wdXQgbGF5ZXIgdG9vbHMKK2Zyb20gaHR0cDovL2J5dGVzZXgub3JnL3NuYXBzaG90L2lucHV0LTxkYXRlPi50YXIuZ3oKKworTW9kdWxlcyB5b3UgaGF2ZSB0byBsb2FkOgorCisgIHNhYTcxMzQJc3RhdGljYWxseSBidWlsdCBpbiwgaS5lLiBqdXN0IHRoZSBkcml2ZXIgOikKKyAgYnR0dgkJaXIta2JkLWdwaW8gb3IgaXIta2JkLWkyYyBkZXBlbmRpbmcgb24geW91cgorCQljYXJkLgorCitpci1rYmQtZ3BpbyBhbmQgaXIta2JkLWkyYyBkb24ndCBzdXBwb3J0IGFsbCBjYXJkcyBsaXJjIHN1cHBvcnRzCisoeWV0KSwgbWFpbmx5IGZvciB0aGUgcmVhc29uIHRoYXQgdGhlIGNvZGUgb2YgbGlyY19pMmMgYW5kIGxpcmNfZ3Bpbword2FzIHZlcnkgY29uZnVzaW5nIGFuZCBJIGRlY2lkZWQgdG8gYmFzaWNhbGx5IHN0YXJ0IG92ZXIgZnJvbSBzY3JhdGNoLgorRmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUgaW4gY2FzZSBvZiB0cm91YmxlLiAgTm90ZSB0aGF0IHRoZSBpci1rYmQtKgorbW9kdWxlcyB3b3JrIG9uIDIuNi54IGtlcm5lbHMgb25seSB0aHJvdWdoIC4uLgorCisKK2hvdyBpdCB3b3JrcworLS0tLS0tLS0tLS0tCisKK1RoZSBtb2R1bGVzIHJlZ2lzdGVyIHRoZSByZW1vdGUgYXMga2V5Ym9hcmQgd2l0aGluIHRoZSBsaW51eCBpbnB1dAorbGF5ZXIsIGkuZS4geW91J2xsIHNlZSB0aGUga2V5cyBvZiB0aGUgcmVtb3RlIGFzIG5vcm1hbCBrZXkgc3Ryb2tlcworKGlmIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBlbmFibGVkKS4KKworVXNpbmcgdGhlIGV2ZW50IGRldmljZXMgKENPTkZJR19JTlBVVF9FVkRFVikgaXQgaXMgcG9zc2libGUgZm9yCithcHBsaWNhdGlvbnMgdG8gYWNjZXNzIHRoZSByZW1vdGUgdmlhIC9kZXYvaW5wdXQvZXZlbnQ8bj4gZGV2aWNlcy4KK1lvdSBtaWdodCBoYXZlIHRvIGNyZWF0ZSB0aGUgc3BlY2lhbCBmaWxlcyB1c2luZyAiL3NiaW4vTUFLRURFVgoraW5wdXQiLiAgVGhlIGlucHV0IGxheWVyIHRvb2xzIG1lbnRpb25lZCBhYm92ZSB1c2UgdGhlIGV2ZW50IGRldmljZS4KKworVGhlIGlucHV0IGxheWVyIHRvb2xzIGFyZSBuaWNlIGZvciB0cm91YmxlIHNob290aW5nLCBpLmUuIHRvIGNoZWNrCit3aGVuZXZlciB0aGUgaW5wdXQgZGV2aWNlIGlzIHJlYWxseSBwcmVzZW50LCB3aGljaCBvZiB0aGUgZGV2aWNlcyBpdAoraXMsIGNoZWNrIHdoZW5ldmVyIHByZXNzaW5nIGtleXMgb24gdGhlIHJlbW90ZSBhY3R1YWxseSBnZW5lcmF0ZXMKK2V2ZW50cyBhbmQgdGhlIGxpa2UuICBZb3UgY2FuIGFsc28gdXNlIHRoZSBrYmQgdXRpbGl0eSB0byBjaGFuZ2UgdGhlCitrZXltYXBzICgyLjYueCBrZXJuZWxzIG9ubHkgdGhyb3VnaCkuCisKKwordXNpbmcgd2l0aCBsaXJjZAorPT09PT09PT09PT09PT09PQorCitUaGUgY3ZzIHZlcnNpb24gb2YgdGhlIGxpcmNkIGRhZW1vbiBzdXBwb3J0cyByZWFkaW5nIGV2ZW50cyBmcm9tIHRoZQorbGludXggaW5wdXQgbGF5ZXIgKHZpYSBldmVudCBkZXZpY2UpLiAgVGhlIGlucHV0IGxheWVyIHRvb2xzIHRhcmJhbGwKK2NvbWVzIHdpdGggYSBsaXJjZCBjb25maWcgZmlsZS4KKworCit1c2luZyB3aXRob3V0IGxpcmNkCis9PT09PT09PT09PT09PT09PT09CisKK1hGcmVlODYgbGlrZWx5IGNhbiBiZSBjb25maWd1cmVkIHRvIHJlY29nbmlzZSB0aGUgcmVtb3RlIGtleXMuICBPbmNlIEkKK3NpbXBseSB0cmllZCB0byBjb25maWd1cmUgb25lIG9mIHRoZSBtdWx0aW1lZGlhIGtleWJvYXJkcyBhcyBpbnB1dAorZGV2aWNlLCB3aGljaCBoYWQgdGhlIGVmZmVjdCB0aGF0IFhGcmVlODYgcmVjb2duaXNlZCBzb21lIG9mIHRoZSBrZXlzCitvZiBteSByZW1vdGUgY29udHJvbCBhbmQgcGFzc2VkIHZvbHVtZSB1cC9kb3duIGtleSBwcmVzc2VzIGFzCitYRjg2QXVkaW9SYWlzZVZvbHVtZSBhbmQgWEY4NkF1ZGlvTG93ZXJWb2x1bWUga2V5IGV2ZW50cyB0byB0aGUgWDExCitjbGllbnRzLgorCitJdCBsaWtlbHkgaXMgcG9zc2libGUgdG8gbWFrZSB0aGF0IGZseSB3aXRoIGEgbmljZSB4a2IgY29uZmlnIGZpbGUsCitJIGtub3cgbmV4dCB0byBub3RoaW5nIGFib3V0IHRoYXQgdGhyb3VnaC4KKworCitIYXZlIGZ1biwKKworICBHZXJkCisKKy0tCitHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuc2FhNzEzNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQ0NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuc2FhNzEzNApAQCAtMCwwICsxLDczIEBACisKKworV2hhdCBpcyBpdD8KKz09PT09PT09PT09CisKK1RoaXMgaXMgYSB2NGwyL29zcyBkZXZpY2UgZHJpdmVyIGZvciBzYWE3MTMwLzMzLzM0LzM1IGJhc2VkIGNhcHR1cmUgLyBUVgorYm9hcmRzLiAgU2VlIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL3NhYTcxMzRobCBmb3IgYQorZGVzY3JpcHRpb24uCisKKworU3RhdHVzCis9PT09PT0KKworQWxtb3N0IGV2ZXJ5dGhpbmcgaXMgd29ya2luZy4gIHZpZGVvLCBzb3VuZCwgdHVuZXIsIHJhZGlvLCBtcGVnIHRzLCAuLi4KKworQXMgd2l0aCBidHR2LCBjYXJkLXNwZWNpZmljIHR3ZWFrcyBhcmUgbmVlZGVkLiAgQ2hlY2sgQ0FSRExJU1QgZm9yIGEKK2xpc3Qgb2Yga25vd24gVFYgY2FyZHMgYW5kIHNhYTcxMzQtY2FyZHMuYyBmb3IgdGhlIGRyaXZlcnMgY2FyZAorY29uZmlndXJhdGlvbiBpbmZvLgorCisKK0J1aWxkCis9PT09PQorCitQaWNrIHVwIHZpZGVvZGV2ICsgdjRsMiBwYXRjaGVzIGZyb20gaHR0cDovL2J5dGVzZXgub3JnL3BhdGNoZXMvLgorQ29uZmlndXJlLCBidWlsZCwgaW5zdGFsbCArIGJvb3QgdGhlIG5ldyBrZXJuZWwuICBZb3UnbGwgbmVlZCBhdCBsZWFzdAordGhlc2UgY29uZmlnIG9wdGlvbnM6CisKKwlDT05GSUdfSTJDPW0KKwlDT05GSUdfVklERU9fREVWPW0KKworVHlwZSAibWFrZSIgdG8gYnVpbGQgdGhlIGRyaXZlciBub3cuICAibWFrZSBpbnN0YWxsIiBpbnN0YWxscyB0aGUKK2RyaXZlci4gICJtb2Rwcm9iZSBzYWE3MTM0IiBzaG91bGQgbG9hZCBpdC4gIERlcGVuZGluZyBvbiB0aGUgY2FyZCB5b3UKK21pZ2h0IGhhdmUgdG8gcGFzcyBjYXJkPTxucj4gYXMgaW5zbW9kIG9wdGlvbiwgY2hlY2sgQ0FSRExJU1QgZm9yCit2YWxpZCBjaG9pY2VzLgorCisKK0NoYW5nZXMgLyBGaXhlcworPT09PT09PT09PT09PT09CisKK1BsZWFzZSBtYWlsIG1lIHVuaWZpZWQgZGlmZnMgKCJkaWZmIC11Iikgd2l0aCB5b3VyIGNoYW5nZXMsIGFuZCBkb24ndAorZm9yZ2V0IHRvIHRlbGwgbWUgd2hhdCBpdCBjaGFuZ2VzIC8gd2hpY2ggcHJvYmxlbSBpdCBmaXhlcyAvIHdoYXRldmVyCitpdCBpcyBnb29kIGZvciAuLi4KKworCitLbm93biBQcm9ibGVtcworPT09PT09PT09PT09PT0KKworKiBUaGUgdHVuZXIgZm9yIHRoZSBmbHl2aWRlb3MgaXNuJ3QgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBhbmQgdGhlCisgIGRlZmF1bHQgbWlnaHQgbm90IHdvcmsgZm9yIHlvdSBkZXBlbmRpbmcgb24gd2hpY2ggdmVyc2lvbiB5b3UgaGF2ZS4KKyAgVGhlcmUgaXMgYSB0dW5lcj0gaW5zbW9kIG9wdGlvbiB0byBvdmVycmlkZSB0aGUgZHJpdmVyJ3MgZGVmYXVsdC4KKworQ2FyZCBWYXJpYXRpb25zOgorPT09PT09PT09PT09PT09PQorCitDYXJkcyBjYW4gdXNlIGVpdGhlciBvZiB0aGVzZSB0d28gY3J5c3RhbHMgKHh0YWwpOgorIC0gMzIuMTEgTUh6IC0+IC5hdWRpb19jbG9jaz0weDE4N2RlNworIC0gMjQuNTc2TUh6IC0+IC5hdWRpb19jbG9jaz0weDIwMDAwMAorKHh0YWwgKiAuYXVkaW9fY2xvY2sgPSA1MTUzOTYwMCkKKworCitDcmVkaXRzCis9PT09PT09CisKK2FuZHJldy5zdGV2ZW5zQHBoaWxpcHMuY29tICsgd2VybmVyLmxlZWJAcGhpbGlwcy5jb20gZm9yIHByb3ZpZGluZworc2FhNzEzNCBoYXJkd2FyZSBzcGVjcyBhbmQgc2FtcGxlIGJvYXJkLgorCisKK0hhdmUgZnVuLAorCisgIEdlcmQKKworLS0gCitHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQyNWMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtMCwwICsxLDU1NyBAQAorRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnM6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N1YmplY3Q6IHVuaWZpZWQgem9yYW4gZHJpdmVyICh6cjM2MHg3LCB6b3JhbiwgYnV6LCBkYzEwKCspLCBkYzMwKCspLCBsbWwzMykKK3dlYnNpdGU6IGh0dHA6Ly9tanBlZy5zb3VyY2Vmb3JnZS5uZXQvZHJpdmVyLXpvcmFuLworCisxLiBXaGF0IGNhcmRzIGFyZSBzdXBwb3J0ZWQKKzEuMSBXaGF0IHRoZSBUViBkZWNvZGVyIGNhbiBkbyBhbiB3aGF0IG5vdAorMS4yIFdoYXQgdGhlIFRWIGVuY29kZXIgY2FuIGRvIGFuIHdoYXQgbm90CisyLiBIb3cgZG8gSSBnZXQgdGhpcyBkYW1uIHRoaW5nIHRvIHdvcmsKKzMuIFdoYXQgbWFpbmJvYXJkIHNob3VsZCBJIHVzZSAob3Igd2h5IGRvZXNuJ3QgbXkgY2FyZCB3b3JrKQorNC4gUHJvZ3JhbW1pbmcgaW50ZXJmYWNlCis1LiBBcHBsaWNhdGlvbnMKKzYuIENvbmNlcm5pbmcgYnVmZmVyIHNpemVzLCBxdWFsaXR5LCBvdXRwdXQgc2l6ZSBldGMuCis3LiBJdCBoYW5ncy9jcmFzaGVzL2ZhaWxzL3doYXRldmVycyEgSGVscCEKKzguIE1haW50YWluZXJzL0NvbnRhY3RpbmcKKzkuIExpY2Vuc2UKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIFdoYXQgY2FyZHMgYXJlIHN1cHBvcnRlZAorCitJb21lZ2EgQnV6LCBMaW51eCBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLCBQaW5uYWNsZS9NaXJvCitEQzEwL0RDMTArL0RDMzAvREMzMCsgYW5kIHJlbGF0ZWQgYm9hcmRzIChhdmFpbGFibGUgdW5kZXIgdmFyaW91cyBuYW1lcykuCisKK0lvbWVnYSBCdXo6CisqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA2MCBNSlBFRyBjb2RlYworKiBQaGlsaXBzIHNhYTcxMTEgVFYgZGVjb2RlcgorKiBQaGlsaXBzIHNhYTcxODUgVFYgZW5jb2RlcgorRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAorICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIHNhYTcxMTEsIHNhYTcxODUsIHpyMzYwNjAsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUgYW5kIFMtdmlkZW8KK05vcm1zOiBQQUwsIFNFQ0FNICg3MjB4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNzIweDQ4MCBAIDI5Ljk3IGZwcykKK0NhcmQgbnVtYmVyOiA3CisKK0xpbnV4IE1lZGlhIExhYnMgTE1MMzM6CisqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA2MCBNSlBFRyBjb2RlYworKiBCcm9va3RyZWUgYnQ4MTkgVFYgZGVjb2RlcgorKiBCcm9va3RyZWUgYnQ4NTYgVFYgZW5jb2RlcgorRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAorICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIGJ0ODE5LCBidDg1NiwgenIzNjA2MCwgenIzNjA2NworSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSBhbmQgUy12aWRlbworTm9ybXM6IFBBTCAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogNQorCitMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwOgorKiBab3JhbiB6cjM2MDY3IFBDSSBjb250cm9sbGVyCisqIFpvcmFuIHpyMzYwNjAgTUpQRUcgY29kZWMKKyogUGhpbGlwcyBzYWE3MTE0IFRWIGRlY29kZXIKKyogQW5hbG9nIERldmljZXMgYWR2NzE3MCBUViBlbmNvZGVyCitEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCisgICAgICAgICAgICAgICAgdmlkZW9jb2RlYywgc2FhNzExNCwgYWR2NzE3MCwgenIzNjA2MCwgenIzNjA2NworSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSBhbmQgUy12aWRlbworTm9ybXM6IFBBTCAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogNgorCitQaW5uYWNsZS9NaXJvIERDMTAobmV3KToKKyogWm9yYW4genIzNjA1NyBQQ0kgY29udHJvbGxlcgorKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCisqIFBoaWxpcHMgc2FhNzExMGEgVFYgZGVjb2RlcgorKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKyAgICAgICAgICAgICAgICB2aWRlb2NvZGVjLCBzYWE3MTEwLCBhZHY3MTc1LCB6cjM2MDYwLCB6cjM2MDY3CitJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlLCBTLXZpZGVvIGFuZCBJbnRlcm5hbAorTm9ybXM6IFBBTCwgU0VDQU0gKDc2OHg1NzYgQCAyNSBmcHMpLCBOVFNDICg2NDB4NDgwIEAgMjkuOTcgZnBzKQorQ2FyZCBudW1iZXI6IDEKKworUGlubmFjbGUvTWlybyBEQzEwKzoKKyogWm9yYW4genIzNjA2NyBQQ0kgY29udHJvbGxlcgorKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCisqIFBoaWxpcHMgc2FhNzExMGEgVFYgZGVjb2RlcgorKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKwkJdmlkZW9jb2RlYywgc2E3MTEwLCBhZHY3MTc1LCB6cjM2MDYwLCB6cjM2MDY3CitJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlLCBTLXZpZGVvIGFuZCBJbnRlcm5hbAorTm9ybXM6IFBBTCwgU0VDQU0gKDc2OHg1NzYgQCAyNSBmcHMpLCBOVFNDICg2NDB4NDgwIEAgMjkuOTcgZnBzKQorQ2FyZCBudW1iZXI6IDIKKworUGlubmFjbGUvTWlybyBEQzEwKG9sZCk6ICoKKyogWm9yYW4genIzNjA1NyBQQ0kgY29udHJvbGxlcgorKiBab3JhbiB6cjM2MDUwIE1KUEVHIGNvZGVjCisqIFpvcmFuIHpyMzYwMTYgVmlkZW8gRnJvbnQgRW5kIG9yIEZ1amkgbWQwMjExIFZpZGVvIEZyb250IEVuZCAoY2xvbmU/KQorKiBNaWNyb25hcyB2cHgzMjIwYSBUViBkZWNvZGVyCisqIG1zZTMwMDAgVFYgZW5jb2RlciBvciBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIgKgorRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAorICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIHZweDMyMjAsIG1zZTMwMDAvYWR2NzE3NSwgenIzNjA1MCwgenIzNjAxNiwgenIzNjA2NworSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSwgUy12aWRlbyBhbmQgSW50ZXJuYWwKK05vcm1zOiBQQUwsIFNFQ0FNICg3Njh4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNjQweDQ4MCBAIDI5Ljk3IGZwcykKK0NhcmQgbnVtYmVyOiAwCisKK1Bpbm5hY2xlL01pcm8gREMzMDogKgorKiBab3JhbiB6cjM2MDU3IFBDSSBjb250cm9sbGVyCisqIFpvcmFuIHpyMzYwNTAgTUpQRUcgY29kZWMKKyogWm9yYW4genIzNjAxNiBWaWRlbyBGcm9udCBFbmQKKyogTWljcm9uYXMgdnB4MzIyNWQvdnB4MzIyMGEvdnB4MzIxNmIgVFYgZGVjb2RlcgorKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIKK0RyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKKyAgICAgICAgICAgICAgICB2aWRlb2NvZGVjLCB2cHgzMjIwL3ZweDMyMjQsIGFkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTYsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCitOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogMworCitQaW5uYWNsZS9NaXJvIERDMzArOiAqCisqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA1MCBNSlBFRyBjb2RlYworKiBab3JhbiB6cjM2MDE2IFZpZGVvIEZyb250IEVuZAorKiBNaWNyb25hcyB2cHgzMjI1ZC92cHgzMjIwYS92cHgzMjE2YiBUViBkZWNvZGVyCisqIEFuYWxvZyBEZXZpY2VzIGFkdjcxNzYgVFYgZW5jb2RlcgorRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAorCQl2aWRlb2NvZGVjLCB2cHgzMjIwL3ZweDMyMjQsIGFkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTUsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCitOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogNAorCitOb3RlOiBObyBtb2R1bGUgZm9yIHRoZSBtc2UzMDAwIGlzIGF2YWlsYWJsZSB5ZXQKK05vdGU6IE5vIG1vZHVsZSBmb3IgdGhlIHZweDMyMjQgaXMgYXZhaWxhYmxlIHlldAorTm90ZTogdXNlIGVuY29kZXI9WCBvciBkZWNvZGVyPVggZm9yIG5vbi1kZWZhdWx0IGkyYyBjaGlwcyAoc2VlIGkyYy1pZC5oKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4xIFdoYXQgdGhlIFRWIGRlY29kZXIgY2FuIGRvIGFuIHdoYXQgbm90CisKK1RoZSBiZXN0IGtub3cgVFYgc3RhbmRhcmRzIGFyZSBOVFNDL1BBTC9TRUNBTS4gYnV0IGZvciBkZWNvZGluZyBhIGZyYW1lIHRoYXQKK2luZm9ybWF0aW9uIGlzIG5vdCBlbm91Z2guIFRoZXJlIGFyZSBzZXZlcmFsIGZvcm1hdHMgb2YgdGhlIFRWIHN0YW5kYXJkcy4KK0FuZCBub3QgZXZlcnkgVFYgZGVjb2RlciBpcyBhYmxlIHRvIGhhbmRsZSBldmVyeSBmb3JtYXQuIEFsc28gdGhlIGV2ZXJ5IAorY29tYmluYXRpb24gaXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuIFRoZXJlIGFyZSBjdXJyZW50bHkgMTEgZGlmZmVyZW50IAordHYgYnJvYWRjYXN0IGZvcm1hdHMgYWxsIGF2ZXIgdGhlIHdvcmxkLiAKKworVGhlIENDSVIgZGVmaW5lcyBwYXJhbWV0ZXJzIG5lZWRlZCBmb3IgYnJvYWRjYXN0aW5nIHRoZSBzaWduYWwuIAorVGhlIENDSVIgaGFzIGRlZmluZWQgZGlmZmVyZW50IHN0YW5kYXJkczogQSxCLEQsRSxGLEcsRCxILEksSyxLMSxMLE0sTiwuLi4KK1RoZSBDQ0lSIHNheXMgbm90IG11Y2ggYWJvdXQgYWJvdXQgdGhlIGNvbG9yc3lzdGVtIHVzZWQgISEhCitBbmQgdGFsa2luZyBhYm91dCBhIGNvbG9yc3lzdGVtIHNheXMgbm90IHRvIG11Y2ggYWJvdXQgaG93IGl0IGlzIGJyb2FkY2FzdC4KKworVGhlIENDSVIgc3RhbmRhcmRzIEEsRSxGIGFyZSBub3QgdXNlZCBhbnkgbW9yZS4KKworV2hlbiB5b3Ugc3BlYWsgYWJvdXQgTlRTQywgeW91IHVzdWFsbHkgbWVhbiB0aGUgc3RhbmRhcmQ6IENDSVIgLSBNIHVzaW5nCit0aGUgTlRTQyBjb2xvcnN5c3RlbSB3aGljaCBpcyB1c2VkIGluIHRoZSBVU0EsIEphcGFuLCBNZXhpY28sIENhbmFkYQorYW5kIGEgZmV3IG90aGVycy4gCisKK1doZW4geW91IHRhbGsgYWJvdXQgUEFMLCB5b3UgdXN1YWxseSBtZWFuOiBDQ0lSIC0gQi9HIHVzaW5nIHRoZSBQQUwKK2NvbG9yc3lzdGVtIHdoaWNoIGlzIHVzZWQgaW4gbWFueSBDb3VudHJpZXMuIAorCitXaGVuIHlvdSB0YWxrIGFib3V0IFNFQ0FNLCB5b3UgbWVhbjogQ0NJUiAtIEwgdXNpbmcgdGhlIFNFQ0FNIENvbG9yc3lzdGVtIAord2hpY2ggaXMgdXNlZCBpbiBGcmFuY2UsIGFuZCBhIGZldyBvdGhlcnMuCisKK1RoZXJlIHRoZSBvdGhlciB2ZXJzaW9uIG9mIFNFQ0FNLCBDQ0lSIC0gRC9LIGlzIHVzZWQgaW4gQnVsZ2FyaWEsIENoaW5hLAorU2xvdmFrYWksIEh1bmdhcnksIEtvcmVhIChSZXAuKSwgUG9sYW5kLCBSdW1hbmlhIGFuZCBhIG90aGVycy4gCisKK1RoZSBDQ0lSIC0gSCB1c2VzIHRoZSBQQUwgY29sb3JzeXN0ZW0gKHNvbWV0aW1lcyBTRUNBTSkgYW5kIGlzIHVzZWQgaW4gCitFZ3lwdCwgTGlieWEsIFNyaSBMYW5rYSwgU3lyYWluIEFyYWIuIFJlcC4KKworVGhlIENDSVIgLSBJIHVzZXMgdGhlIFBBTCBjb2xvcnN5c3RlbSwgYW5kIGlzIHVzZWQgaW4gR3JlYXQgQnJpdGFpbiwgSG9uZyBLb25nLAorSXJlbGFuZCwgTmlnZXJpYSwgU291dGggQWZyaWNhLgorCitUaGUgQ0NJUiAtIE4gdXNlcyB0aGUgUEFMIGNvbG9yc3lzdGVtIGFuZCBQQUwgZnJhbWUgc2l6ZSBidXQgdGhlIE5UU0MgZnJhbWVyYXRlLAorYW5kIGlzIHVzZWQgaW4gQXJnZW50aW5pYSwgVXJ1Z3VheSwgYW4gYSBmZXcgb3RoZXJzCisKK1dlIGRvIG5vdCB0YWxrIGFib3V0IGhvdyB0aGUgYXVkaW8gaXMgYnJvYWRjYXN0ICEKKworQSByYXRoZXIgZ29vZCBzaXRlcyBhYm91dCB0aGUgVFYgc3RhbmRhcmRzIGFyZTogCitodHRwOi8vd3d3LnNvbnkuanAvU2VydmljZUFyZWEvVm9sdGFnZV9tYXAvCitodHRwOi8vaW5mby5lbGVjdHJvbmljd2Vya3N0YXR0LmRlL2JlcmVpY2hlL2Zlcm5zZWh0ZWNobmlrL2ZyZXF1ZW56ZW5fdW5kX25vcm1lbi9GZXJuc2Vobm9ybWVuLworYW5kIGh0dHA6Ly93d3cuY2FibC5jb20vcmVzdGF1cmFudC9jaGFubmVsLmh0bWwKKworT3RoZXIgd2VpcmQgdGhpbmdzIGFyb3VuZDogTlRTQyA0LjQzIGlzIGEgbW9kaWZpY2F0ZWQgTlRTQywgd2hpY2ggaXMgbWFpbmx5Cit1c2VkIGluIFBBTCBWQ1IncyB0aGF0IGFyZSBhYmxlIHRvIHBsYXkgYmFjayBOVFNDLiBQQUwgNjAgc2VlbXMgdG8gYmUgdGhlIHNhbWUKK2FzIE5UU0MgNC40MyAuIFRoZSBEYXRhc2hlZXRzIGFsc28gdGFsayBhYm91dCBOVFNDIDQ0LCBJdCBzZWVtcyBhcyBpZiBpdCB3b3VsZCAKK2JlIHRoZSBzYW1lIGFzIE5UU0MgNC40My4gCitOVFNDIENvbWJzIHNlZW1zIHRvIGJlIGEgZGVjb2RlciBtb2RlIHdoZXJlIHRoZSBkZWNvZGVyIHVzZXMgYSBjb21iIGZpbHRlcgordG8gc3BsaXQgY29tYSBhbmQgbHVtYSBpbnN0ZWFkIG9mIGEgRGVsYXkgbGluZS4KKworQnV0IEkgZGlkIG5vdCBkZWZpYW50bHkgZmluZCBvdXQgd2hhdCBOVFNDIENvbWIgaXMuCisKK1BoaWxpcHMgc2FhNzExMSBUViBkZWNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAxOTk3LCBpcyB1c2VkIGluIHRoZSBCVVogYW5kIAorY2FuIGhhbmRsZTogUEFMIEIvRy9IL0ksIFBBTCBOLCBQQUwgTSwgTlRTQyBNLCBOVFNDIE4sIE5UU0MgNC40MyBhbmQgU0VDQU0gCisKK1BoaWxpcHMgc2FhNzExMGEgVFYgZGVjb2Rlcgord2FzIGludHJvZHVjZWQgaW4gMTk5NSwgaXMgdXNlZCBpbiB0aGUgUGlubmFjbGUvTWlybyBEQzEwKG5ldyksIERDMTArIGFuZAorY2FuIGhhbmRsZTogUEFMIEIvRywgTlRTQyBNIGFuZCBTRUNBTSAKKworUGhpbGlwcyBzYWE3MTE0IFRWIGRlY29kZXIKK3dhcyBpbnRyb2R1Y2VkIGluIDIwMDAsIGlzIHVzZWQgaW4gdGhlIExNTDMzUjEwIGFuZCAgCitjYW4gaGFuZGxlOiBQQUwgQi9HL0QvSC9JL04sIFBBTCBOLCBQQUwgTSwgTlRTQyBNLCBOVFNDIDQuNDMgYW5kIFNFQ0FNCisKK0Jyb29rdHJlZSBidDgxOSBUViBkZWNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAxOTk2LCBhbmQgaXMgdXNlZCBpbiB0aGUgTE1MMzMgYW5kCitjYW4gaGFuZGxlOiBQQUwgQi9EL0cvSC9JLCBOVFNDIE0KKworTWljcm9uYXMgdnB4MzIyMGEgVFYgZGVjb2Rlcgord2FzIGludHJvZHVjZWQgaW4gMTk5NiwgaXMgdXNlZCBpbiB0aGUgREMzMCBhbmQgREMzMCsgYW5kCitjYW4gaGFuZGxlOiBQQUwgQi9HL0gvSSwgUEFMIE4sIFBBTCBNLCBOVFNDIE0sIE5UU0MgNDQsIFBBTCA2MCwgU0VDQU0sTlRTQyBDb21iCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLjIgV2hhdCB0aGUgVFYgZW5jb2RlciBjYW4gZG8gYW4gd2hhdCBub3QKKworVGhlIFRWIGVuY29kZXIgYXJlIGRvaW5nIHRoZSAic2FtZSIgYXMgdGhlIGRlY29kZXIsIGJ1dCBpbiB0aGUgb2RlciBkaXJlY3Rpb24uCitZb3UgZmVlZCB0aGVtIGRpZ2l0YWwgZGF0YSBhbmQgdGhlIGdlbmVyYXRlIGEgQ29tcG9zaXRlIG9yIFNWSFMgc2lnbmFsLgorRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2xvcnN5c3RlbXMgYW5kIFRWIG5vcm0gdGFrZSBhIGxvb2sgaW4gdGhlCitUViBkZWNvZGVyIHNlY3Rpb24uCisKK1BoaWxpcHMgc2FhNzE4NSBUViBFbmNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAxOTk2LCBpcyB1c2VkIGluIHRoZSBCVVoKK2NhbiBnZW5lcmF0ZTogUEFMIEIvRywgTlRTQyBNCisKK0Jyb29rdHJlZSBidDg1NiBUViBFbmNvZGVyCit3YXMgaW50cm9kdWNlZCBpbiAxOTk0LCBpcyB1c2VkIGluIHRoZSBMTUwzMyAKK2NhbiBnZW5lcmF0ZTogUEFMIEIvRC9HL0gvSS9OLCBQQUwgTSwgTlRTQyBNLCBQQUwtTiAoQXJnZW50aW5hKQorCitBbmFsb2cgRGV2aWNlcyBhZHY3MTcwIFRWIEVuY29kZXIKK3dhcyBpbnRyb2R1Y2VkIGluIDIwMDAsIGlzIHVzZWQgaW4gdGhlIExNTDMwMFIxMAorY2FuIGdlbmVyYXRlOiBQQUwgQi9EL0cvSC9JL04sIFBBTCBNLCBOVFNDIE0sIFBBTCA2MAorCitBbmFsb2cgRGV2aWNlcyBhZHY3MTc1IFRWIEVuY29kZXIKK3dhcyBpbnRyb2R1Y2VkIGluIDE5OTYsIGlzIHVzZWQgaW4gdGhlIERDMTAsIERDMTArLCBEQzEwIG9sZCwgREMzMCwgREMzMCsKK2NhbiBnZW5lcmF0ZTogUEFMIEIvRC9HL0gvSS9OLCBQQUwgTSwgTlRTQyBNCisKK0lUVCBtc2UzMDAwIFRWIGVuY29kZXIKK3dhcyBpbnRyb2R1Y2VkIGluIDE5OTEsIGlzIHVzZWQgaW4gdGhlIERDMTAgb2xkCitjYW4gZ2VuZXJhdGU6IFBBTCAsIE5UU0MgLCBTRUNBTQorCitUaGUgYWR2NzE3eCwgc2hvdWxkIGJlIGFibGUgdG8gcHJvZHVjZSBQQUwgTi4gQnV0IHlvdSBmaW5kIG5vdGhpbmcgUEFMIE4gCitzcGVjaWZpYyBpbiB0aGUgdGhlIHJlZ2lzdGVycy4gU2VlbSB0aGF0IHlvdSBoYXZlIHRvIHJldXNlIGEgb3RoZXIgc3RhbmRhcmQKK3RvIGdlbmVyYXRlIFBBTCBOLCBtYXliZSBpdCB3b3VsZCB3b3JrIGlmIHlvdSB1c2UgdGhlIFBBTCBNIHNldHRpbmdzLiAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4gSG93IGRvIEkgZ2V0IHRoaXMgZGFtbiB0aGluZyB0byB3b3JrCisKK0xvYWQgenIzNjA2Ny5vLiBJZiBpdCBjYW4ndCBhdXRvZGV0ZWN0IHlvdXIgY2FyZCwgdXNlIHRoZSBjYXJkPVggaW5zbW9kCitvcHRpb24gd2l0aCBYIGJlaW5nIHRoZSBjYXJkIG51bWJlciBhcyBnaXZlbiBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KK1RvIGhhdmUgbW9yZSB0aGFuIG9uZSBjYXJkLCB1c2UgY2FyZD1YMVssWDJbLFgzLFtYNFsuLl1dXV0KKworVG8gYXV0b21hdGUgdGhpcywgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciAvZXRjL21vZHByb2JlLmNvbmY6CisKK29wdGlvbnMgenIzNjA2NyBjYXJkPVgxWyxYMlssWDNbLFg0Wy4uXV1dXQorYWxpYXMgY2hhci1tYWpvci04MS0wIHpyMzYwNjcKKworT25lIHRoaW5nIHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0IHRoaXMgZG9lc24ndCBsb2FkIHpyMzYwNjcubyBpdHNlbGYgeWV0LiBJdAoranVzdCBhdXRvbWF0ZXMgbG9hZGluZy4gSWYgeW91IHN0YXJ0IHVzaW5nIHhhd3R2LCB0aGUgZGV2aWNlIHdvbid0IGxvYWQgb24KK3NvbWUgc3lzdGVtcywgc2luY2UgeW91J3JlIHRyeWluZyB0byBsb2FkIG1vZHVsZXMgYXMgYSB1c2VyLCB3aGljaCBpcyBub3QKK2FsbG93ZWQgKCJwZXJtaXNzaW9uIGRlbmllZCIpLiBBIHF1aWNrIHdvcmthcm91bmQgaXMgdG8gYWRkICdMb2FkICJ2NGwiJyB0bworWEY4NkNvbmZpZy00IHdoZW4geW91IHVzZSBYIGJ5IGRlZmF1bHQsIG9yIHRvIHJ1biAndjRsLWNvbmYgLWMgPGRldmljZT4nIGluCitvbmUgb2YgeW91ciBzdGFydHVwIHNjcmlwdHMgKG5vcm1hbGx5IHJjLmxvY2FsKSBpZiB5b3UgZG9uJ3QgdXNlIFguIEJvdGgKK21ha2Ugc3VyZSB0aGF0IHRoZSBtb2R1bGVzIGFyZSBsb2FkZWQgb24gc3RhcnR1cCwgdW5kZXIgdGhlIHJvb3QgYWNjb3VudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzMuIFdoYXQgbWFpbmJvYXJkIHNob3VsZCBJIHVzZSAob3Igd2h5IGRvZXNuJ3QgbXkgY2FyZCB3b3JrKQorCis8aW5zZXJ0IGxvdXN5IGRpc2NsYWltZXIgaGVyZT4uIEluIHNob3J0OiBnb29kPVNpUy9JbnRlbCwgYmFkPVZJQS4KKworRXhwZXJpZW5jZSB0ZWxscyB1cyB0aGF0IHBlb3BsZSB3aXRoIGEgQnV6LCBvbiBhdmVyYWdlLCBoYXZlIG1vcmUgcHJvYmxlbXMKK3RoYW4gdXNlcnMgd2l0aCBhIERDMTArL0xNTDMzLiBBbHNvLCBpdCB0ZWxscyB1cyB0aGF0IHBlb3BsZSBvd25pbmcgYSBWSUEtCitiYXNlZCBtYWluYm9hcmQgKGt0WFhYLCBNVlAzKSBoYXZlIG1vcmUgcHJvYmxlbXMgdGhhbiB1c2VycyB3aXRoIGEgbWFpbmJvYXJkCitiYXNlZCBvbiBhIGRpZmZlcmVudCBjaGlwc2V0LiBIZXJlJ3Mgc29tZSBub3RlcyBmcm9tIEFuZHJldyBTdGV2ZW5zOgorLS0KK0hlcmUncyBteSBleHBlcmllbmNlIG9mIHVzaW5nIExNTDMzIGFuZCBCdXogb24gdmFyaW91cyBtb3RoZXJib2FyZHM6CisKK1ZJQSBNVlAzCisJRm9yZ2V0IGl0LiBQb2ludGxlc3MuIERvZXNuJ3Qgd29yay4KK0ludGVsIDQzMEZYIChQZW50aXVtIDIwMCkgCisJTE1MMzMgcGVyZmVjdCwgQnV6IHRvbGVyYWJsZSAoMyBvciA0IGZyYW1lcyBkcm9wcGVkIHBlciBtb3ZpZSkKK0ludGVsIDQ0MEJYIChlYXJseSBzdGVwcGluZykKKwlMTUwzMyB0b2xlcmFibGUuIEJ1eiBzdGFydGluZyB0byBnZXQgYW5ub3lpbmcgKDYtMTAgZnJhbWVzL2hvdXIpCitJbnRlbCA0NDBCWCAobGF0ZSBzdGVwcGluZykKKwlCdXogdG9sZXJhYmxlLCBMTUwzIGFsbW9zdCBwZXJmZWN0IChvY2Nhc2lvbmFsIHNpbmdsZSBmcmFtZSBkcm9wcykKK1NpUzczNQorCUxNTDMzIHBlcmZlY3QsIEJ1eiB0b2xlcmFibGUuCitWSUEgS1QxMzMoKikKKwlMTUwzMyBzdGFydGluZyB0byBnZXQgYW5ub3lpbmcsIEJ1eiBwb29yIGVub3VnaCB0aGF0IEkgaGF2ZSB1cC4KKworQm90aCA0NDBCWCBib2FyZHMgd2VyZSBkdWFsIENQVSB2ZXJzaW9ucy4KKy0tCitCZXJuaGFyZCBQcmFzY2hpbmdlciBsYXRlciBhZGRlZDoKKy0tCitBTUQgNzUxCisJQnV6IHBlcmZlY3QtdG9sZXJhYmxlCitBTUQgNzYwCisJQnV6IHBlcmZlY3QtdG9sZXJhYmxlCistLQorSW4gZ2VuZXJhbCwgcGVvcGxlIG9uIHRoZSB1c2VyIG1haWxpbmdsaXN0IHdvbid0IGdpdmUgeW91IG11Y2ggb2YgYSBjaGFuY2UKK2lmIHlvdSBoYXZlIGEgVklBLWJhc2VkIG1vdGhlcmJvYXJkLiBUaGV5IG1heSBiZSBjaGVhcCwgYnV0IHNvbWV0aW1lcywgeW91J2QKK3JhdGhlciB3YW50IHRvIHNwZW5kIHNvbWUgbW9yZSBtb25leSBvbiBiZXR0ZXIgYm9hcmRzLiBJbiBnZW5lcmFsLCBWSUEKK21haW5ib2FyZCdzIElERS9QQ0kgcGVyZm9ybWFuY2Ugd2lsbCBhbHNvIHN1Y2sgYmFkbHkgY29tcGFyZWQgdG8gb3RoZXJzLgorWW91J2xsIG5vdGljZWQgdGhlIERDMTArL0RDMzArIGFyZW4ndCBtZW50aW9uZWQgYW55d2hlcmUgaW4gdGhlIG92ZXJ2aWV3LgorQmFzaWNhbGx5LCB5b3UgY2FuIGFzc3VtZSB0aGF0IGlmIHRoZSBCdXogd29ya3MsIHRoZSBMTUwzMyB3aWxsIHdvcmsgdG9vLiBJZgordGhlIExNTDMzIHdvcmtzLCB0aGUgREMxMCsvREMzMCsgd2lsbCB3b3JrIHRvby4gVGhleSdyZSBtb3N0IHRvbGVyYW50IHRvCitkaWZmZXJlbnQgbWFpbmJvYXJkIGNoaXBzZXRzIGZyb20gYWxsIG9mIHRoZSBzdXBwb3J0ZWQgY2FyZHMuCisKK0lmIHlvdSBleHBlcmllbmNlIHRpbWVvdXRzIGR1cmluZyBjYXB0dXJlLCBidXkgYSBiZXR0ZXIgbWFpbmJvYXJkIG9yIGxvd2VyCit0aGUgcXVhbGl0eS9idWZmZXJzaXplIGR1cmluZyBjYXB0dXJlIChzZWUgJ0NvbmNlcm5pbmcgYnVmZmVyIHNpemVzLCBxdWFsaXR5LAorb3V0cHV0IHNpemUgZXRjLicpLiBJZiBpdCBoYW5ncywgdGhlcmUncyBsaXR0bGUgd2UgY2FuIGRvIGFzIG9mIG5vdy4gQ2hlY2sKK3lvdXIgSVJRcyBhbmQgbWFrZSBzdXJlIHRoZSBjYXJkIGhhcyBpdHMgb3duIGludGVycnVwdHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis0LiBQcm9ncmFtbWluZyBpbnRlcmZhY2UKKworVGhpcyBkcml2ZXIgY29uZm9ybXMgdG8gdmlkZW80bGludXggYW5kIHZpZGVvNGxpbnV4MiwgYm90aCBjYW4gYmUgdXNlZCB0bwordXNlIHRoZSBkcml2ZXIuIFNpbmNlIHZpZGVvNGxpbnV4IGRpZG4ndCBwcm92aWRlIGFkZXF1YXRlIGNhbGxzIHRvIGZ1bGx5Cit1c2UgdGhlIGNhcmRzJyBmZWF0dXJlcywgd2UndmUgaW50cm9kdWNlZCBzZXZlcmFsIHByb2dyYW1taW5nIGV4dGVuc2lvbnMsCit3aGljaCBhcmUgY3VycmVudGx5IG9mZmljaWFsbHkgYWNjZXB0ZWQgaW4gdGhlIDIuNC54IGJyYW5jaCBvZiB0aGUga2VybmVsLgorVGhlc2UgZXh0ZW5zaW9ucyBhcmUga25vd24gYXMgdGhlIHY0bC9tanBlZyBleHRlbnNpb25zLiBTZWUgem9yYW4uaCBmb3IKK2RldGFpbHMgKHN0cnVjdHMvaW9jdGxzKS4KKworSW5mb3JtYXRpb24gLSB2aWRlbzRsaW51eDoKK2h0dHA6Ly9yb2FkcnVubmVyLnN3YW5zZWEubGludXgub3JnLnVrL3Y0bGFwaS5zaHRtbAorRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAorL3Vzci9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKKworSW5mb3JtYXRpb24gLSB2aWRlbzRsaW51eC9tanBlZyBleHRlbnNpb25zOgorLi96b3Jhbi5oCisoYWxzbyBzZWUgYmVsb3cpCisKK0luZm9ybWF0aW9uIC0gdmlkZW80bGludXgyOgoraHR0cDovL3d3dy50aGVkaXJrcy5vcmcvdjRsMi8KKy91c3IvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAoraHR0cDovL3d3dy5ieXRlc2V4Lm9yZy92NGwvCisKK01vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZpZGVvNGxpbnV4L21qcGVnIGV4dGVuc2lvbnMsIGJ5IFNlcmd1ZWkKK01pcmlkb25vdmkgYW5kIFJhaW5lciBKb2hhbm5pOgorLS0KK1RoZSBpb2N0bHMgZm9yIHRoYXQgaW50ZXJmYWNlIGFyZSBhcyBmb2xsb3dzOgorCitCVVpJT0NfR19QQVJBTVMKK0JVWklPQ19TX1BBUkFNUworCitHZXQgYW5kIHNldCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgYnV6LiBUaGUgdXNlciBzaG91bGQgYWx3YXlzIGRvIGEKK0JVWklPQ19HX1BBUkFNUyAod2l0aCBhIHN0cnVjdCBidXpfcGFyYW1zKSB0byBvYnRhaW4gdGhlIGRlZmF1bHQKK3NldHRpbmdzLCBjaGFuZ2Ugd2hhdCBoZSBsaWtlcyBhbmQgdGhlbiBtYWtlIGEgQlVaSU9DX1NfUEFSQU1TIGNhbGwuCisKK0JVWklPQ19SRVFCVUZTCisKK0JlZm9yZSBiZWluZyBhYmxlIHRvIGNhcHR1cmUvcGxheWJhY2ssIHRoZSB1c2VyIGhhcyB0byByZXF1ZXN0Cit0aGUgYnVmZmVycyBoZSBpcyB3YW50aW5nIHRvIHVzZS4gRmlsbCB0aGUgc3RydWN0dXJlCit6b3Jhbl9yZXF1ZXN0YnVmZmVycyB3aXRoIHRoZSBzaXplIChyZWNvbW1lbmRlZDogMjU2KjEwMjQpIGFuZAordGhlIG51bWJlciAocmVjb21tZW5kZWQgMzIgdXAgdG8gMjU2KS4gVGhlcmUgYXJlIG5vIHN1Y2ggcmVzdHJpY3Rpb25zCithcyBmb3IgdGhlIFZpZGVvIGZvciBMaW51eCBidWZmZXJzLCB5b3Ugc2hvdWxkIExFQVZFIFNVRkZJQ0lFTlQKK01FTU9SWSBmb3IgeW91ciBzeXN0ZW0gaG93ZXZlciwgZWxzZSBzdHJhbmdlIHRoaW5ncyB3aWxsIGhhcHBlbiAuLi4uCitPbiByZXR1cm4sIHRoZSB6b3Jhbl9yZXF1ZXN0YnVmZmVycyBzdHJ1Y3R1cmUgY29udGFpbnMgbnVtYmVyIGFuZAorc2l6ZSBvZiB0aGUgYWN0dWFsbHkgYWxsb2NhdGVkIGJ1ZmZlcnMuCitZb3Ugc2hvdWxkIHVzZSB0aGVzZSBudW1iZXJzIGZvciBkb2luZyBhIG1tYXAgb2YgdGhlIGJ1ZmZlcnMKK2ludG8gdGhlIHVzZXIgc3BhY2UuCitUaGUgQlVaSU9DX1JFUUJVRlMgaW9jdGwgYWxzbyBtYWtlcyBpdCBoYXBwZW4sIHRoYXQgdGhlIG5leHQgbW1hcAorbWFwcyB0aGUgTUpQRUcgYnVmZmVyIGluc3RlYWQgb2YgdGhlIFY0TCBidWZmZXJzLgorCitCVVpJT0NfUUJVRl9DQVBUCitCVVpJT0NfUUJVRl9QTEFZCisKK1F1ZXVlIGEgYnVmZmVyIGZvciBjYXB0dXJlIG9yIHBsYXliYWNrLiBUaGUgZmlyc3QgY2FsbCBhbHNvIHN0YXJ0cworc3RyZWFtaW5nIGNhcHR1cmUuIFdoZW4gc3RyZWFtaW5nIGNhcHR1cmUgaXMgZ29pbmcgb24sIHlvdSBtYXkKK29ubHkgcXVldWUgZnVydGhlciBidWZmZXJzIG9yIGlzc3VlIHN5bmNzIHVudGlsIHN0cmVhbWluZworY2FwdHVyZSBpcyBzd2l0Y2hlZCBvZmYgYWdhaW4gd2l0aCBhIGFyZ3VtZW50IG9mIC0xIHRvCithIEJVWklPQ19RQlVGX0NBUFQvQlVaSU9DX1FCVUZfUExBWSBpb2N0bC4KKworQlVaSU9DX1NZTkMKKworSXNzdWUgdGhpcyBpb2N0bCB3aGVuIGFsbCBidWZmZXJzIGFyZSBxdWV1ZWQuIFRoaXMgaW9jdGwgd2lsbAorYmxvY2sgdW50aWwgdGhlIGZpcnN0IGJ1ZmZlciBiZWNvbWVzIGZyZWUgZm9yIHNhdmluZyBpdHMKK2RhdGEgdG8gZGlzayAoYWZ0ZXIgQlVaSU9DX1FCVUZfQ0FQVCkgb3IgZm9yIHJldXNlIChhZnRlciBCVVpJT0NfUUJVRl9QTEFZKS4KKworQlVaSU9DX0dfU1RBVFVTCisKK0dldCB0aGUgc3RhdHVzIG9mIHRoZSBpbnB1dCBsaW5lcyAodmlkZW8gc291cmNlIGNvbm5lY3RlZC9ub3JtKS4KKworRm9yIHByb2dyYW1taW5nIGV4YW1wbGUsIHBsZWFzZSwgbG9vayBhdCBsYXZyZWMuYyBhbmQgbGF2cGxheS5jIGNvZGUgaW4KK2xhdnRvb2xzLTEuMnAyIHBhY2thZ2UgKFVSTDogaHR0cDovL3d3dy5jaWNlc2UubXgvfm1pcnNldi9EQzEwcGx1cy8pCithbmQgdGhlICdleGFtcGxlcycgZGlyZWN0b3J5IGluIHRoZSBvcmlnaW5hbCBCdXogZHJpdmVyIGRpc3RyaWJ1dGlvbi4KKworQWRkaXRpb25hbCBub3RlcyBmb3Igc29mdHdhcmUgZGV2ZWxvcGVyczoKKworICAgVGhlIGRyaXZlciByZXR1cm5zIG1heHdpZHRoIGFuZCBtYXhoZWlnaHQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8KKyAgIHRoZSBjdXJyZW50IFRWIHN0YW5kYXJkIChub3JtKS4gVGhlcmVmb3JlLCB0aGUgc29mdHdhcmUgd2hpY2gKKyAgIGNvbW11bmljYXRlcyB3aXRoIHRoZSBkcml2ZXIgYW5kICJhc2tzIiBmb3IgdGhlc2UgcGFyYW1ldGVycyBzaG91bGQKKyAgIGZpcnN0IHNldCB0aGUgY29ycmVjdCBub3JtLiBXZWxsLCBpdCBzZWVtcyBsb2dpY2FsbHkgY29ycmVjdDogVFYKKyAgIHN0YW5kYXJkIGlzICJtb3JlIGNvbnN0YW50IiBmb3IgY3VycmVudCBjb3VudHJ5IHRoYW4gZ2VvbWV0cnkKKyAgIHNldHRpbmdzIG9mIGEgdmFyaWV0eSBvZiBUViBjYXB0dXJlIGNhcmRzIHdoaWNoIG1heSB3b3JrIGluIElUVSBvcgorICAgc3F1YXJlIHBpeGVsIGZvcm1hdC4gUmVtZW1iZXIgdGhhdCB1c2VycyBub3cgY2FuIGxvY2sgdGhlIG5vcm0gdG8KKyAgIGF2b2lkIGFueSBhbWJpZ3VpdHkuCistLQorUGxlYXNlIG5vdGUgdGhhdCBsYXZwbGF5L2xhdnJlYyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgTUpQRUctdG9vbHMKKyhodHRwOi8vbWpwZWcuc2YubmV0LykuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis1LiBBcHBsaWNhdGlvbnMKKworQXBwbGljYXRpb25zIGtub3duIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlcjoKKworVFYgdmlld2luZzoKKyogeGF3dHYKKyoga3dpbnR2CisqIHByb2JhYmx5IGFueSBUViBhcHBsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIHZpZGVvNGxpbnV4IG9yIHZpZGVvNGxpbnV4Mi4KKworTUpQRUcgY2FwdHVyZS9wbGF5YmFjazoKKyogbWpwZWd0b29scy9sYXZ0b29scyAob3IgTGludXggVmlkZW8gU3R1ZGlvKQorKiBnc3RyZWFtZXIKKyogbXBsYXllcgorCitHZW5lcmFsIHJhdyBjYXB0dXJlOgorKiB4YXd0dgorKiBnc3RyZWFtZXIKKyogcHJvYmFibHkgYW55IGFwcGxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgdmlkZW80bGludXggb3IgdmlkZW80bGludXgyCisKK1ZpZGVvIGVkaXRpbmc6CisqIENpbmVsZXJyYQorKiBNYWluQWN0b3IKKyogbWpwZWd0b29scyAob3IgTGludXggVmlkZW8gU3R1ZGlvKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworNi4gQ29uY2VybmluZyBidWZmZXIgc2l6ZXMsIHF1YWxpdHksIG91dHB1dCBzaXplIGV0Yy4KKworVGhlIHpyMzYwNjAgY2FuIGRvIDE6MiBKUEVHIGNvbXByZXNzaW9uLiBUaGlzIGlzIHJlYWxseSB0aGUgdGhlb3JldGljYWwKK21heGltdW0gdGhhdCB0aGUgY2hpcHNldCBjYW4gcmVhY2guIFRoZSBkcml2ZXIgY2FuLCBob3dldmVyLCBsaW1pdCBjb21wcmVzc2lvbgordG8gYSBtYXhpbXVtIChzaXplKSBvZiAxOjQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBzb21lIGNhcmRzIChlLmcuIEJ1eikKK2Nhbid0IGhhbmRsZSAxOjIgY29tcHJlc3Npb24gd2l0aG91dCBzdG9wcGluZyBjYXB0dXJlIGFmdGVyIG9ubHkgYSBmZXcgbWludXRlcy4KK1dpdGggMTo0LCBpdCdsbCBtb3N0bHkgd29yay4gSWYgeW91IGhhdmUgYSBCdXosIHVzZSAnbG93X2JpdHJhdGU9MScgdG8gZ28gaW50bworMTo0IG1heC4gY29tcHJlc3Npb24gbW9kZS4KKworMTAwJSBKUEVHIHF1YWxpdHkgaXMgdGh1cyAxOjIgY29tcHJlc3Npb24gaW4gcHJhY3RpY2UuIFNvIGZvciBhIGZ1bGwgUEFMIGZyYW1lCisoc2l6ZSA3MjB4NTc2KS4gVGhlIEpQRUcgZmllbGRzIGFyZSBzdG9yZWQgaW4gWVVZMiBmb3JtYXQsIHNvIHRoZSBzaXplIG9mIHRoZQorZmllbGRzIGFyZSA3MjB4Mjg4eDE2LzIgYml0cy9maWVsZCAoMiBmaWVsZHMvZnJhbWUpID0gMjA3MzYwIGJ5dGVzL2ZpZWxkIHggMiA9Cis0MTQ3MjAgYnl0ZXMvZnJhbWUgKGFkZCBzb21lIG1vcmUgYnl0ZXMgZm9yIGhlYWRlcnMgYW5kIERIVCAoaHVmZm1hbikvRFFUCisocXVhbnRpemF0aW9uKSB0YWJsZXMsIGFuZCB5b3UnbGwgZ2V0IHRvIHNvbWV0aGluZyBsaWtlIDUxMmtCIHBlciBmcmFtZSBmb3IKKzE6MiBjb21wcmVzc2lvbi4gRm9yIDE6NCBjb21wcmVzc2lvbiwgeW91J2QgaGF2ZSBmcmFtZXMgb2YgaGFsZiB0aGlzIHNpemUuCisKK1NvbWUgYWRkaXRpb25hbCBleHBsYW5hdGlvbiBieSBNYXJ0aW4gU2FtdWVsc3Nvbiwgd2hpY2ggYWxzbyBleHBsYWlucyB0aGUKK2ltcG9ydGFuY2Ugb2YgYnVmZmVyIHNpemVzOgorLS0KKz4gSG1tLCBJIGRvIG5vdCB0aGluayBpdCBpcyByZWFsbHkgdGhhdCB3YXkuIFdpdGggdGhlIGN1cnJlbnQgKGRvd25sb2FkZWQKKz4gYXQgMTg6MDAgTW9uZGF5KSBkcml2ZXIgSSBnZXQgdGhhdCBvdXRwdXQgc2l6ZXMgZm9yIDEwIHNlYzoKKz4gLXEgNTAgLWIgMTI4IDogMjQuMjgzLjMzMiBCeXRlcworPiAtcSA1MCAtYiAyNTYgOiA0OC40NDIuMzY4Cis+IC1xIDI1IC1iIDEyOCA6IDI0LjY1NS45OTIKKz4gLXEgMjUgLWIgMjU2IDogMjUuODU5LjgyMAorCitJIHdva2UgdXAsIGFuZCBjYW4ndCBnbyB0byBzbGVlcCBhZ2Fpbi4gSSdsbCBraWxsIHNvbWUgdGltZSBleHBsYWluaW5nIHdoeSAKK3RoaXMgZG9lc24ndCBsb29rIHN0cmFuZ2UgdG8gbWUuCisKK0xldCdzIGRvIHNvbWUgbWF0aCB1c2luZyBhIHdpZHRoIG9mIDcwNCBwaXhlbHMuIEknbSBub3Qgc3VyZSB3aGV0aGVyIHRoZSBCdXogCithY3R1YWxseSB1c2UgdGhhdCBudW1iZXIgb3Igbm90LCBidXQgdGhhdCdzIG5vdCB0b28gaW1wb3J0YW50IHJpZ2h0IG5vdy4KKworNzA0eDI4OCBwaXhlbHMsIG9uZSBmaWVsZCwgaXMgMjAyNzUyIHBpeGVscy4gRGl2aWRlZCBieSA2NCBwaXhlbHMgcGVyIGJsb2NrOyAKKzMxNjggYmxvY2tzIHBlciBmaWVsZC4gRWFjaCBwaXhlbCBjb25zaXN0IG9mIHR3byBieXRlczsgMTI4IGJ5dGVzIHBlciBibG9jazsgCisxMDI0IGJpdHMgcGVyIGJsb2NrLiAxMDAlIGluIHRoZSBuZXcgZHJpdmVyIG1lYW4gMToyIGNvbXByZXNzaW9uOyB0aGUgbWF4aW11bSAKK291dHB1dCBiZWNvbWVzIDUxMiBiaXRzIHBlciBibG9jay4gQWN0dWFsbHkgNTEwLCBidXQgNTEyIGlzIHNpbXBsZXIgdG8gdXNlIAorZm9yIGNhbGN1bGF0aW9ucy4KKworTGV0J3Mgc2F5IHRoYXQgd2Ugc3BlY2lmeSBkMXE1MC4gV2UgdGh1cyB3YW50IDI1NiBiaXRzIHBlciBibG9jazsgdGltZXMgMzE2OCAKK2JlY29tZXMgODExMDA4IGJpdHM7IDEwMTM3NiBieXRlcyBwZXIgZmllbGQuIFdlJ3JlIHRhbGtpbmcgcmF3IGJpdHMgYW5kIGJ5dGVzIAoraGVyZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgZmFuY3kgY29ycmVjdGlvbnMgZm9yIGJpdHMtcGVyLXBpeGVsIG9yIHN1Y2ggCit0aGluZ3MuIDEwMTM3NiBieXRlcyBwZXIgZmllbGQuCisKK2QxIHZpZGVvIGNvbnRhaW5zIHR3byBmaWVsZHMgcGVyIGZyYW1lLiBUaG9zZSBzdW0gdXAgdG8gMjAyNzUyIGJ5dGVzIHBlciAKK2ZyYW1lLCBhbmQgb25lIG9mIHRob3NlIGZyYW1lcyBnb2VzIGludG8gZWFjaCBidWZmZXIuCisKK0J1dCB3YWl0IGEgc2Vjb25kISAtYjEyOCBnaXZlcyAxMjhrQiBidWZmZXJzISBJdCdzIG5vdCBwb3NzaWJsZSB0byBjcmFtIAorMjAyNzUyIGJ5dGVzIG9mIEpQRUcgZGF0YSBpbnRvIDEyOGtCIQorCitUaGlzIGlzIHdoYXQgdGhlIGRyaXZlciBub3RpY2UgYW5kIGF1dG9tYXRpY2FsbHkgY29tcGVuc2F0ZSBmb3IgaW4geW91ciAKK2V4YW1wbGVzLiBMZXQncyBkbyBzb21lIG1hdGggdXNpbmcgdGhpcyBpbmZvcm1hdGlvbjoKKworMTI4a0IgaXMgMTMxMDcyIGJ5dGVzLiBJbiB0aGlzIGJ1ZmZlciwgd2Ugd2FudCB0byBzdG9yZSB0d28gZmllbGRzLCB3aGljaCAKK2xlYXZlcyA2NTUzNiBieXRlcyBmb3IgZWFjaCBmaWVsZC4gVXNpbmcgMzE2OCBibG9ja3MgcGVyIGZpZWxkLCB3ZSBnZXQgCisyMC42ODY4Njg2OC4uLiBhdmFpbGFibGUgYnl0ZXMgcGVyIGJsb2NrOyAxNjUgYml0cy4gV2UgY2FuJ3QgYWxsb3cgdGhlIAorcmVxdWVzdCBmb3IgMjU2IGJpdHMgcGVyIGJsb2NrIHdoZW4gdGhlcmUncyBvbmx5IDE2NSBiaXRzIGF2YWlsYWJsZSEgVGhlIC1xNTAgCitvcHRpb24gaXMgc2lsZW50bHkgb3ZlcnJpZGRlbiwgYW5kIHRoZSAtYjEyOCBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSwgbGVhdmluZyAKK3VzIHdpdGggdGhlIGVxdWl2YWxlbmNlIG9mIC1xMzIuCisKK1RoaXMgZ2l2ZXMgdXMgYSBkYXRhIHJhdGUgb2YgMTY1IGJpdHMgcGVyIGJsb2NrLCB3aGljaCwgdGltZXMgMzE2OCwgc3VtcyB1cCAKK3RvIDY1MzQwIGJ5dGVzIHBlciBmaWVsZCwgb3V0IG9mIHRoZSBhbGxvd2VkIDY1NTM2LiBUaGUgY3VycmVudCBkcml2ZXIgaGFzIAorYW5vdGhlciBsZXZlbCBvZiByYXRlIGxpbWl0aW5nOyBpdCB3b24ndCBhY2NlcHQgLXEgdmFsdWVzIHRoYXQgZmlsbCBtb3JlIHRoYW4gCis2Lzggb2YgdGhlIHNwZWNpZmllZCBidWZmZXJzLiAoSSdtIG5vdCBzdXJlIHdoeS4gIlBsYXlpbmcgaXQgc2FmZSIgc2VlbSB0byBiZSAKK2Egc2FmZSBiZXQuIFBlcnNvbmFsbHksIEkgdGhpbmsgSSB3b3VsZCBoYXZlIGxvd2VyZWQgcmVxdWVzdGVkLWJpdHMtcGVyLWJsb2NrIAorYnkgb25lLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LikgV2UgY2FuJ3QgdXNlIDE2NSBiaXRzIHBlciBibG9jaywgYnV0IGhhdmUgdG8gCitsb3dlciBpdCBhZ2FpbiwgdG8gNi84IG9mIHRoZSBhdmFpbGFibGUgYnVmZmVyIHNwYWNlOiBXZSBlbmQgdXAgd2l0aCAxMjQgYml0cyAKK3BlciBibG9jaywgdGhlIGVxdWl2YWxlbmNlIG9mIC1xMjQuIFdpdGggMTI4a0IgYnVmZmVycywgeW91IGNhbid0IHVzZSBncmVhdGVyIAordGhhbiAtcTI0IGF0IC1kMS4gKEFuZCBQQUwsIGFuZCA3MDQgcGl4ZWxzIHdpZHRoLi4uKQorCitUaGUgdGhpcmQgZXhhbXBsZSBpcyBsaW1pdGVkIHRvIC1xMjQgdGhyb3VnaCB0aGUgc2FtZSBwcm9jZXNzLiBUaGUgc2Vjb25kIAorZXhhbXBsZSwgdXNpbmcgdmVyeSBzaW1pbGFyIGNhbGN1bGF0aW9ucywgaXMgbGltaXRlZCB0byAtcTQ4LiBUaGUgb25seSAKK2V4YW1wbGUgdGhhdCBhY3R1YWxseSBncmFiIGF0IHRoZSBzcGVjaWZpZWQgLXEgdmFsdWUgaXMgdGhlIGxhc3Qgb25lLCB3aGljaCAKK2lzIGNsZWFybHkgdmlzaWJsZSwgbG9va2luZyBhdCB0aGUgZmlsZSBzaXplLgorLS0KKworQ29uY2x1c2lvbjogdGhlIHF1YWxpdHkgb2YgdGhlIHJlc3VsdGluZyBtb3ZpZSBkZXBlbmRzIG9uIGJ1ZmZlciBzaXplLCBxdWFsaXR5LAord2hldGhlciBvciBub3QgeW91IHVzZSAnbG93X2JpdHJhdGU9MScgYXMgaW5zbW9kIG9wdGlvbiBmb3IgdGhlIHpyMzYwNjAuYworbW9kdWxlIHRvIGRvIDE6NCBpbnN0ZWFkIG9mIDE6MiBjb21wcmVzc2lvbiwgZXRjLgorCitJZiB5b3UgZXhwZXJpZW5jZSB0aW1lb3V0cywgbG93ZXJpbmcgdGhlIHF1YWxpdHkvYnVmZmVyc2l6ZSBvciB1c2luZworJ2xvd19iaXRyYXRlPTEgYXMgaW5zbW9kIG9wdGlvbiBmb3IgenIzNjA2MC5vIG1pZ2h0IGFjdHVhbGx5IGhlbHAsIGFzIGlzCitwcm92ZW4gYnkgdGhlIEJ1ei4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzcuIEl0IGhhbmdzL2NyYXNoZXMvZmFpbHMvd2hhdGV2ZXJzISBIZWxwIQorCitNYWtlIHN1cmUgdGhhdCB0aGUgY2FyZCBoYXMgaXRzIG93biBpbnRlcnJ1cHRzIChzZWUgL3Byb2MvaW50ZXJydXB0cyksIGNoZWNrCit0aGUgb3V0cHV0IG9mIGRtZXNnIGF0IGhpZ2ggdmVyYm9zaXR5IChsb2FkIHpyMzYwNjcubyB3aXRoIGRlYnVnPTIsCitsb2FkIGFsbCBvdGhlciBtb2R1bGVzIHdpdGggZGVidWc9MSkuIENoZWNrIHRoYXQgeW91ciBtYWluYm9hcmQgaXMgZmF2b3JhYmxlCisoc2VlIHF1ZXN0aW9uIDIpIGFuZCBpZiBub3QsIHRlc3QgdGhlIGNhcmQgaW4gYW5vdGhlciBjb21wdXRlci4gQWxzbyBzZWUgdGhlCitub3RlcyBnaXZlbiBpbiBxdWVzdGlvbiAzIGFuZCB0cnkgbG93ZXJpbmcgcXVhbGl0eS9idWZmZXJzaXplL2NhcHR1cmVzaXplCitpZiByZWNvcmRpbmcgZmFpbHMgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4KKworSWYgYWxsIHRoaXMgZG9lc24ndCBoZWxwLCBnaXZlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0gaW5jbHVkaW5nCitkZXRhaWxlZCBoYXJkd2FyZSBpbmZvcm1hdGlvbiAobWVtb3J5K2JyYW5kLCBtYWluYm9hcmQrY2hpcHNldCticmFuZCwgd2hpY2gKK01KUEVHIGNhcmQsIHByb2Nlc3Nvciwgb3RoZXIgUENJIGNhcmRzIHRoYXQgbWlnaHQgYmUgb2YgaW50ZXJlc3QpLCBnaXZlIHRoZQorc3lzdGVtIFBuUCBpbmZvcm1hdGlvbiAoL3Byb2MvaW50ZXJydXB0cywgL3Byb2MvZG1hLCAvcHJvYy9kZXZpY2VzKSwgYW5kIGdpdmUKK3RoZSBrZXJuZWwgdmVyc2lvbiwgZHJpdmVyIHZlcnNpb24sIGdsaWJjIHZlcnNpb24sIGdjYyB2ZXJzaW9uIGFuZCBhbnkgb3RoZXIKK2luZm9ybWF0aW9uIHRoYXQgbWlnaHQgcG9zc2libHkgYmUgb2YgaW50ZXJlc3QuIEFsc28gcHJvdmlkZSB0aGUgZG1lc2cgb3V0cHV0CithdCBoaWdoIHZlcmJvc2l0eS4gU2VlICdDb250YWN0aW5nJyBvbiBob3cgdG8gY29udGFjdCB0aGUgZGV2ZWxvcGVycy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzguIE1haW50YWluZXJzL0NvbnRhY3RpbmcKKworVGhlIGRyaXZlciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBMYXVyZW50IFBpbmNoYXJ0IGFuZCBSb25hbGQgQnVsdGplCisoPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPiBhbmQgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4pLiBGb3IgYnVnCityZXBvcnRzIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGNvbnRhY3QgdGhlIG1haWxpbmdsaXN0IGluc3RlYWQgb2YgdGhlIGRldmVsb3BlcnMKK2luZGl2aWR1YWxseS4gRm9yIHVzZXIgcXVlc3Rpb25zIChpLmUuIGJ1ZyByZXBvcnRzIG9yIGhvdy10byBxdWVzdGlvbnMpLCBzZW5kCithbiBlbWFpbCB0byA8bWpwZWctdXNlcnNAbGlzdHMuc2YubmV0PiwgZm9yIGRldmVsb3BlcnMgKGkuZS4gaWYgeW91IHdhbnQgdG8KK2hlbHAgcHJvZ3JhbW1pbmcpLCBzZW5kIGFuIGVtYWlsIHRvIDxtanBlZy1kZXZlbG9wZXJAbGlzdHMuc2YubmV0Pi4gU2VlCitodHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9tanBlZy8gZm9yIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbi4KKworRm9yIGJ1ZyByZXBvcnRzLCBiZSBzdXJlIHRvIGluY2x1ZGUgYWxsIHRoZSBpbmZvcm1hdGlvbiBhcyBkZXNjcmliZWQgaW4KK3RoZSBzZWN0aW9uICdJdCBoYW5ncy9jcmFzaGVzL2ZhaWxzL3doYXRldmVycyEgSGVscCEnLiBQbGVhc2UgbWFrZSBzdXJlCit5b3UncmUgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIChodHRwOi8vbWpwZWcuc2YubmV0L2RyaXZlci16b3Jhbi8pLgorCitQcmV2aW91cyBtYWludGFpbmVycy9kZXZlbG9wZXJzIG9mIHRoaXMgZHJpdmVyIGluY2x1ZGUgU2VyZ3VlaSBNaXJpZG9ub3YKKzxtaXJzZXZAY2ljZXNlLm14PiwgV29sZmdhbmcgU2NoZXJyIDxzY2hlcnJAbmV0NHlvdS5uZXQ+LCBEYXZlIFBlcmtzCis8ZHBlcmtzQGlibS5uZXQ+IGFuZCBSYWluZXIgSm9oYW5uaSA8UmFpbmVyQEpvaGFubmkuZGU+LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOS4gTGljZW5zZQorCitUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ09OVFJJQlVUT1JTIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NPTlRSSUJVVE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY0OWRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NPTlRSSUJVVE9SUwpAQCAtMCwwICsxLDI1IEBACitDb250cmlidXRvcnMgdG8gYnR0djogCisKK01pY2hhZWwgQ2h1IDxtbWNodUBwb2JveC5jb20+CisgIEF2ZXJNZWRpYSBmaXggYW5kIG1vcmUgZmxleGlibGUgY2FyZCByZWNvZ25pdGlvbgorCitBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICBWaWRlbzRMaW51eCBpbnRlcmZhY2UgYW5kIDIuMS54IGtlcm5lbCBhZGFwdGF0aW9uCisKK0NocmlzIEtsZWl0c2NoCisgIEhhcmR3YXJlIEkyQworICAKK0dlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+IAorICBSYWRpbyBjYXJkIChJVFQgc291bmQgcHJvY2Vzc29yKQorCitiaWdmb290IDxiaWdmb290QG5ldC13YXkubmV0PgorUmFnbmFyIEhvamxhbmQgRXNwaW5vc2EgPHJhZ25hckBtYWN1bGEubmV0PgorICBDb25mZXJlbmNlVFYgY2FyZAorCisKKysgbWFueSBtb3JlIChwbGVhc2UgbWFpbCBtZSBpZiB5b3UgYXJlIG1pc3NpbmcgaW4gdGhpcyBsaXN0IGFuZCB3b3VsZAorICAgICAgICAgICAgIGxpa2UgdG8gYmUgbWVudGlvbmVkKQorCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4YzdlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcwpAQCAtMCwwICsxLDk2NCBAQAorCitHdW50aGVyIE1heWVyJ3MgYnR0diBjYXJkIGdhbGxlcnkgKGdyYXBoaWNhbCB2ZXJzaW9uIG9mIHRoaXMgdGV4dCBmaWxlIDotKQoraXMgYXZhaWxhYmxlIGF0OiBodHRwOi8vd3d3LmJ0dHYtZ2FsbGVyeS5kZS8KKworCitTdXBwb3J0ZWQgY2FyZHM6CitCdDg0OC9CdDg0OGEvQnQ4NDkvQnQ4NzgvQnQ4NzkgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgY2FyZHMgd2l0aCBCdDg0OC9CdDg0OGEvQnQ4NDkvQnQ4NzgvQnQ4NzkgYW5kIG5vcm1hbAorQ29tcG9zaXRlL1MtVkhTIGlucHV0cyBhcmUgc3VwcG9ydGVkLiAgVGVsZXRleHQgYW5kIEludGVyY2FzdCBzdXBwb3J0CisoUEFMIG9ubHkpIGZvciBBTEwgY2FyZHMgdmlhIFZCSSBzYW1wbGUgZGVjb2RpbmcgaW4gc29mdHdhcmUuCisKK1NvbWUgY2FyZHMgd2l0aCBhZGRpdGlvbmFsIG11bHRpcGxleGluZyBvZiBpbnB1dHMgb3Igb3RoZXIgYWRkaXRpb25hbAorZmFuY3kgY2hpcHMgYXJlIG9ubHkgcGFydGlhbGx5IHN1cHBvcnRlZCAodW5sZXNzIHNwZWNpZmljYXRpb25zIGJ5IHRoZQorY2FyZCBtYW51ZmFjdHVyZXIgYXJlIGdpdmVuKS4gIFdoZW4gYSBjYXJkIGlzIGxpc3RlZCBoZXJlIGl0IGlzbid0CituZWNlc3NhcmlseSBmdWxseSBzdXBwb3J0ZWQuCisKK0FsbCBvdGhlciBjYXJkcyBvbmx5IGRpZmZlciBieSBhZGRpdGlvbmFsIGNvbXBvbmVudHMgYXMgdHVuZXJzLCBzb3VuZAorZGVjb2RlcnMsIEVFUFJPTXMsIHRlbGV0ZXh0IGRlY29kZXJzIC4uLgorCisKK1Vuc3VwcG9ydGVkIENhcmRzOiAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitDYXJkcyB3aXRoIFpvcmFuIChaUikgb3IgUGhpbGlwcyAoU0FBKSBvciBJU0EgYXJlIG5vdCBzdXBwb3J0ZWQgYnkKK3RoaXMgZHJpdmVyLgorCisKK01BVFJJWCBWaXNpb24KKy0tLS0tLS0tLS0tLS0KKworTVYtRGVsdGEKKy0gQnQ4NDhBCistIDQgQ29tcG9zaXRlIGlucHV0cywgMSBTLVZIUyBpbnB1dCAoc2hhcmVkIHdpdGggNHRoIGNvbXBvc2l0ZSkKKy0gRUVQUk9NCisKK2h0dHA6Ly93d3cubWF0cml4LXZpc2lvbi5kZS8KKworVGhpcyBjYXJkIGhhcyBubyB0dW5lciBidXQgc3VwcG9ydHMgYWxsIDQgY29tcG9zaXRlICgxIHNoYXJlZCB3aXRoIGFuCitTLVZIUyBpbnB1dCkgb2YgdGhlIEJ0ODQ4QS4KK1ZlcnkgbmljZSBjYXJkIGlmIHlvdSBvbmx5IGhhdmUgc2F0ZWxsaXRlIFRWIGJ1dCBzZXZlcmFsIHR1bmVycyBjb25uZWN0ZWQKK3RvIHRoZSBjYXJkIHZpYSBjb21wb3NpdGUuCisKK01hbnkgdGhhbmtzIHRvIE1hdHJpeC1WaXNpb24gZm9yIGdpdmluZyB1cyAyIGNhcmRzIGZvciBmcmVlIHdoaWNoIG1hZGUKK0J0ODQ4YS9CdDg0OSBzaW5nbGUgY3J5dGFsIG9wZXJhdGlvbiBzdXBwb3J0IHBvc3NpYmxlISEhCisKKworCitNaXJvL1Bpbm5hY2xlIFBDVFYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCistIEJ0ODQ4IAorICBzb21lIChhbGw/PykgY29tZSB3aXRoIDIgY3J5c3RhbHMgZm9yIFBBTC9TRUNBTSBhbmQgTlRTQyAKKy0gUEFMLCBTRUNBTSBvciBOVFNDIFRWIHR1bmVyIChQaGlsaXBzIG9yIFRFTUlDKQorLSBNU1AzNHh4IHNvdW5kIGRlY29kZXIgb24gYWRkIG9uIGJvYXJkCisgIGRlY29kZXIgaXMgc3VwcG9ydGVkIGJ1dCBBRkFJSyBkb2VzIG5vdCB5ZXQgd29yayAKKyAgKG90aGVyIHNvdW5kIE1VWCBzZXR0aW5nIGluIEdQSU8gcG9ydCBuZWVkZWQ/Pz8gc29tZWJvZHkgd2hvIGZpeGVkIHRoaXM/Pz8pCistIDEgdHVuZXIsIDEgY29tcG9zaXRlIGFuZCAxIFMtVkhTIGlucHV0CistIHR1bmVyIHR5cGUgaXMgYXV0b2RldGVjdGVkCisKK2h0dHA6Ly93d3cubWlyby5kZS8KK2h0dHA6Ly93d3cubWlyby5jb20vCisKKworTWFueSB0aGFua3MgZm9yIHRoZSBmcmVlIGNhcmQgd2hpY2ggbWFkZSBmaXJzdCBOVFNDIHN1cHBvcnQgcG9zc2libGUgYmFjaworaW4gMTk5NyEKKworCitIYXVwcGF1Z2UgV2luL1RWIHBjaQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIG1hbnkgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBIYXVwcGF1Z2UgY2FyZHMgd2l0aCBkaWZmZXJlbnQgCit0dW5lcnMgKFRWK1JhZGlvIC4uLiksIHRlbGV0ZXh0IGRlY29kZXJzLgorTm90ZSB0aGF0IGV2ZW4gY2FyZHMgd2l0aCBzYW1lIG1vZGVsIG51bWJlcnMgaGF2ZSAoZGVwZW5kaW5nIG9uIHRoZSByZXZpc2lvbikKK2RpZmZlcmVudCBjaGlwcyBvbiBpdC4KKworLSBCdDg0OCAoYW5kIG90aGVycyBidXQgYWx3YXlzIGluIDIgY3J5c3RhbCBvcGVyYXRpb24/Pz8pCisgIG5ld2VyIGNhcmRzIGhhdmUgYSBCdDg3OAorLSBQQUwsIFNFQ0FNLCBOVFNDIG9yIHR1bmVyIHdpdGggb3Igd2l0aG91dCBSYWRpbyBzdXBwb3J0CisKK2UuZy46CisgIFBBTDogCisgIFREQTU3Mzc6IFZIRiwgaHlwZXJiYW5kIGFuZCBVSEYgbWl4ZXIvb3NjaWxsYXRvciBmb3IgVFYgYW5kIFZDUiAzLWJhbmQgdHVuZXJzCisgIFRTQTU1MjI6IDEuNCBHSHogSTJDLWJ1cyBjb250cm9sbGVkIHN5bnRoZXNpemVyLCBJMkMgMHhjMi0weGMzCisgIAorICBOVFNDOgorICBUREE1NzMxOiBWSEYsIGh5cGVyYmFuZCBhbmQgVUhGIG1peGVyL29zY2lsbGF0b3IgZm9yIFRWIGFuZCBWQ1IgMy1iYW5kIHR1bmVycworICBUU0E1NTE4OiBubyBkYXRhc2hlZXQgYXZhaWxhYmxlIG9uIFBoaWxpcHMgc2l0ZQorLSBQaGlsaXBzIFNBQTUyNDYgb3IgU0FBNTI4NCAoIG9yIG5vKSBUZWxldGV4dCBkZWNvZGVyIGNoaXAJCisgIHdpdGggYnVmZmVyIFJBTSAoZS5nLiBXaW5ib25kIFcyNDI1N0FTLTM1OiAzMkt4OCBDTU9TIHN0YXRpYyBSQU0pCisgIFNBQTUyNDYgKEkyQyAweDIyKSBpcyBzdXBwb3J0ZWQKKy0gMjU2IGJ5dGVzIEVFUFJPTTogTWljcm9jaGlwIDI0TEMwMkIgb3IgUGhpbGlwcyA4NTgyRTJZIAorICB3aXRoIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKyAgSTJDIGFkZHJlc3MgMHhhMCAoMjRMQzAyQiBhbHNvIHJlc3BvbmRzIHRvIDB4YTItMHhhZikKKy0gMSB0dW5lciwgMSBjb21wb3NpdGUgYW5kIChkZXBlbmRpbmcgb24gbW9kZWwpIDEgUy1WSFMgaW5wdXQKKy0gMTQwNTJCOiBtdXggZm9yIHNlbGVjdGlvbiBvZiBzb3VuZCBzb3VyY2UKKy0gc291bmQgZGVjb2RlcjogVERBOTgwMCwgTVNQMzR4eCAoc3RlcmVvIGNhcmRzKSAKKworCitBc2tleSBDUEgtU2VyaWVzCistLS0tLS0tLS0tLS0tLS0tCitEZXZlbG9wZWQgYnkgVGVsU2lnbmFsKD8pLCBPRU1lZCBieSBtYW55IHZlbmRvcnMgKFR5cGhvb24sIEFudWJpcywgRHluYWxpbmspCisKKyAgQ2FyZCBzZXJpZXM6CisgICAgQ1BIMDF4OiBCVDg0OCBjYXB0dXJlIG9ubHkKKyAgICBDUEgwM3g6IEJUODQ4CisgICAgQ1BIMDV4OiBCVDg3OCB3aXRoIEZNCisgICAgQ1BIMDZ4OiBCVDg3OCAody9vIEZNKQorICAgIENQSDA3eDogQlQ4NzggY2FwdHVyZSBvbmx5CisgCisgIFRWIHN0YW5kYXJkczoKKyAgICAgQ1BIMHgwOiBOVFNDLU0vTQorICAgICBDUEgweDE6IFBBTC1CL0cKKyAgICAgQ1BIMHgyOiBQQUwtSS9JCisgICAgIENQSDB4MzogUEFMLUQvSworICAgICBDUEgweDQ6IFNFQ0FNLUwvTCAKKyAgICAgQ1BIMHg1OiBTRUNBTS1CL0cgCisgICAgIENQSDB4NjogU0VDQU0tRC9LIAorICAgICBDUEgweDc6IFBBTC1OL04gCisgICAgIENQSDB4ODogUEFMLUIvSCAKKyAgICAgQ1BIMHg5OiBQQUwtTS9NCisKKyAgQ1BIMDN4IHdhcyBvZnRlbiBzb2xkIGFzICJUViBjYXB0dXJlciIuCisKKyAgSWRlbnRpZnlpbmc6CisgIDEpIDg3OCBjYXJkcyBjYW4gYmUgaWRlbnRpZmllZCBieSBQQ0kgU3Vic3lzdGVtLUlEOgorICAgICAgMTQ0ZjozMDAwID0gQ1BIMDZ4CisgICAgICAxNDRGOjMwMDIgPSBDUEgwNXggdy8gRk0KKyAgICAgIDE0NEY6MzAwNSA9IENQSDA2eF9MQyAody9vIHJlbW90ZSBjb250cm9sKQorICAxKSBUaGUgY2FyZHMgaGF2ZSBhIHN0aWNrZXIgd2l0aCAiQ1BIIi1tb2RlbCBvbiB0aGUgYmFjay4KKyAgMikgVGhlc2UgY2FyZHMgaGF2ZSBhIG51bWJlciBwcmludGVkIG9uIHRoZSBQQ0IganVzdCBhYm92ZSB0aGUgdHVuZXIgbWV0YWwgYm94OgorICAgICAgIjgwLUNQMjAwMDMwMC14IiA9IENQSDAzWAorICAgICAgIjgwLUNQMjAwMDUwMC14IiA9IENQSDA1WAorICAgICAgIjgwLUNQMjAwMDYwMC14IiA9IENQSDA2WCAvIENQSDA2eF9MQworCisgIEFza2V5IHNlbGxzIHRoZXNlIGNhcmRzIGFzICJNYWdpYyBUVmlldyBzZXJpZXMiLCBCcmFuZCAiTWFnaWNYcHJlc3MiLgorICBPdGhlciBPRU0gb2Z0ZW4gY2FsbCB0aGVzZSAiVHZpZXciLCAiVFZpZXc5OSIgb3IgZWxzZS4KKworTGlmZXZpZXcgRmx5dmlkZW8gU2VyaWVzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgbmFtaW5nIG9mIHRoZXNlIHNlcmllcyBkaWZmZXJzIGluIHRpbWUgYW5kIHNwYWNlLgorCisgIElkZW50aWZ5aW5nOgorICAxKSBTb21lIG1vZGVscyBjYW4gYmUgaWRlbnRpZmllZCBieSBQQ0kgc3Vic3lzdGVtIElEOgorICAgICAgMTg1MjoxODUyID0gRmx5dmlkZW8gOTggRk0KKyAgICAgIDE4NTE6MTg1MCA9IEZseXZpZGVvIDk4CisgICAgICAxODUxOjE4NTEgPSBGbHl2aWRlbyA5OCBFWiAoY2FwdHVyZSBvbmx5KQorICAyKSBUaGVyZSBpcyBhIHByaW50IG9uIHRoZSBQQ0I6CisgICAgICBMUjI1ICAgICAgID0gRmx5dmlkZW8gKFpvcmFuIFpSMzYxMjAsIFNBQTcxMTBBKQorICAgICAgTFIyNiBSZXYuTiA9IEZseXZpZGVvIElJIChCdDg0OCkKKyAgICAgICAgICAgUmV2Lk8gPSBGbHl2aWRlbyBJSSAoQnQ4NzgpCisgICAgICBMUjM3IFJldi5DID0gRmx5dmlkZW8gRVogKENhcHR1cmUgb25seSwgWlIzNjEyMCArIFNBQTcxMTApCisgICAgICBMUjM4IFJldi5BMT0gRmx5dmlkZW8gSUkgRVogKEJ0ODQ4IGNhcHR1cmUgb25seSkKKyAgICAgIExSNTAgUmV2LlEgPSBGbHl2aWRlbyA5OCAody9lZXByb20gYW5kIFBDSSBzdWJzeXN0ZW0gSUQpCisgICAgICAgICAgIFJldi5XID0gRmx5dmlkZW8gOTggKG5vIGVlcHJvbSkKKyAgICAgIExSNTEgUmV2LkUgPSBGbHl2aWRlbyA5OCBFWiAoY2FwdHVyZSBvbmx5KQorICAgICAgTFI5MCAgICAgICA9IEZseXZpZGVvIDIwMDAgKEJ0ODc4KQorCQkgICBGbHl2aWRlbyAyMDAwUyAoQnQ4NzgpIHcvU3RlcmVvIFRWIChQYWNrYWdlIGluY2wuIExSOTEgZGF1Z2h0ZXJib2FyZCkKKyAgICAgIExSOTEgICAgICAgPSBTdGVyZW8gZGF1Z2h0ZXIgY2FyZCBmb3IgTFI5MAorICAgICAgTFI5NyAgICAgICA9IEZseXZpZGVvIERWQlMKKyAgICAgIExSOTkgUmV2LkUgPSBMb3cgcHJvZmlsZSBjYXJkIGZvciBPRU0gaW50ZWdyYXRpb24gKG9ubHkgaW50ZXJuYWwgYXVkaW8hKSBidDg3OAorICAgICAgTFIxMzYJID0gRmx5dmlkZW8gMjEwMC8zMTAwIChMb3cgcHJvZmlsZSwgU0FBNzEzMC9TQUE3MTM0KQorICAgICAgTFIxMzcgICAgICA9IEZseXZpZGVvIERWMjAwMC9EVjMwMDAgKFNBQTcxMzAvU0FBNzEzNCArIElFRUUxMzk0KQorICAgICAgTFIxMzggUmV2LkM9IEZseXZpZGVvIDIwMDAgKFNBQTcxMzApCisJICAgICAgICBvciBGbHl2aWRlbyAzMDAwIChTQUE3MTM0KSB3L1N0ZXJlbyBUVgorCQkgICBUaGVzZSBleGlzdCBpbiB2YXJpYXRpb25zIHcvRk0gYW5kIHcvUmVtb3RlIHNvbWV0aW1lcyBkZW5vdGVkCisJCSAgIGJ5IHN1ZmZpeGVzICJGTSIgYW5kICJSIi4KKyAgMykgWW91IGhhdmUgYSBsYXB0b3AgKG1pbmlQQ0kgY2FyZCk6CisgICAgICBQcm9kdWN0ICAgID0gRmx5VFYgUGxhdGludW0gTWluaQorICAgICAgTW9kZWwvQ2hpcCA9IExSMjEyL3NhYTcxMzUKKworICAgICAgTGlmZXZpZXcuY29tLnR3IHN0YXRlcyAoRmViLiAyMDAyKToKKyAgICAgICJUaGUgRmx5VmlkZW8yMDAwIGFuZCBGbHlWaWRlbzIwMDBzIHByb2R1Y3QgbmFtZSBoYXZlIHJlbmFtZWQgdG8gRmx5VmlkZW85OC4iCisgICAgICBUaGVpciBCdDh4OCBjYXJkcyBhcmUgbGlzdGVkIGFzIGRpc2NvbnRpbnVlZC4KKyAgICAgIEZseXZpZGVvIDIwMDBTIHdhcyBwcm9iYWJseSBzb2xkIGFzIEZseXZpZGVvIDMwMDAgaW4gc29tZSBjb250cmllcyhFdXJvcGU/KS4KKyAgICAgIFRoZSBuZXcgRmx5dmlkZW8gMjAwMC8zMDAwIGFyZSBTQUE3MTMwL1NBQTcxMzQgYmFzZWQuIAorCisgICJGbHl2aWRlbyBJSSIgaGFkIGJlZW4gdGhlIG5hbWUgZm9yIHRoZSA4NDggY2FyZHMsIG5vd2FkYXlzIChpbiBHZXJtYW55KQorICB0aGlzIG5hbWUgaXMgcmUtdXNlZCBmb3IgTFI1MCBSZXYuVy4KKyAgVGhlIExpZmV2aWV3IHdlYnNpdGUgbWVudGlvbmVkIEZseXZpZGVvIElJSSBhdCBzb21lIHRpbWUsIGJ1dCBzdWNoIGEgY2FyZAorICBoYXMgbm90IHlldCBiZWVuIHNlZW4gKHBlcmhhcHMgaXQgd2FzIHRoZSBnZXJtYW4gbmFtZSBmb3IgTFI5MCBbc3RlcmVvXSkuCisgIFRoZXNlIGNhcmRzIGFyZSBzb2xkIGJ5IG1hbnkgT0VNcyB0b28uCisKKyAgRmx5VmlkZW8gQTIgKEVsdGEgODY4MCk9IExSOTAgUmV2LkYgKHcvUmVtb3RlLCB3L28gRk0sIHN0ZXJlbyBUViBieSB0ZGE5ODIxKSB7R2VybWFueX0KKyAgTGlmZXZpZXcgMzAwMCAoRWx0YSA4NjgxKSBhcyBzb2xkIGJ5IFBsdXMoQXByaWwgMjAwMiksIEdlcm1hbnkgPSBMUjEzOCB3LyBzYWE3MTM0CisKKworVHlwaG9vbiBUViBjYXJkIHNlcmllczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZXNlIGNhbiBiZSBDUEgsIEZseXZpZGVvLCBQaXhlbHZpZXcgb3IgS05DMSBzZXJpZXMuCisgIFR5cGhvb24gaXMgdGhlIGJyYW5kIG9mIEFudWJpcy4KKyAgTW9kZWwgNTA2ODAgZ290IHJlLXVzZWQsIHNvbWUgbW9kZWwgbm8uIGhhZCBkaWZmZXJlbnQgY29udGVudHMgb3ZlciB0aW1lLgorCisgIE1vZGVsczoKKyAgNTA2ODAgIlRWIFR1bmVyIFBDSSBQYWwgQkciKG9sZCxyZWQgcGFja2FnZSk9Y2FuIGJlIENQSDAzeChidDg0OCkgb3IgQ1BIMDZ4KGJ0ODc4KQorICA1MDY4MCAiVFYgVHVuZXIgUGFsIEJHIiAoYmx1ZSBwYWNrYWdlKT0gUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldiA5QikKKyAgNTA2ODEgIlRWIFR1bmVyIFBDSSBQYWwgSSIgKHZhcmlhbnQgb2YgNTA2ODApCisgIDUwNjgyICJUVmlldyBUVi9GTSBUdW5lciBQYWwgQkciICAgICAgID0gRmx5dmlkZW8gOThGTSAoTFI1MCBSZXYuUSkKKyAgICAgICAgIE5vdGU6IFRoZSBwYWNrYWdlIGhhcyBhIHBpY3R1cmUgb2YgQ1BIMDV4ICh3aGljaCB3b3VsZCBiZSBhIHJlYWwgVFZpZXcpCisgIDUwNjgzICJUViBUdW5lciBQQ0kgU0VDQU0iICh2YXJpYW50IG9mIDUwNjgwKQorICA1MDY4NCAiVFYgVHVuZXIgUGFsIEJHIiAgICAgICAgICAgICAgICA9IFBpeGVsdmlldyA4NzhUVihSZXYuM0QpCisgIDUwNjg2ICJUViBUdW5lciIgICAgICAgICAgICAgICAgICAgICAgID0gS05DMSBUViBTdGF0aW9uCisgIDUwNjg3ICJUViBUdW5lciBzdGVyZW8iICAgICAgICAgICAgICAgID0gS05DMSBUViBTdGF0aW9uIHBybworICA1MDY4OCAiVFYgVHVuZXIgUkRTIiAoYmxhY2sgcGFja2FnZSkgICA9IEtOQzEgVFYgU3RhdGlvbiBSRFMKKyAgNTA2ODkgIFRWIFNBVCBEVkItUyBDQVJEIENJIFBDSSAoU0FBNzE0NkFILCBTVTEyNzg/KSA9ICJLTkMxIFRWIFN0YXRpb24gRFZCLVMiCisgIDUwNjkyICJUVi9GTSBUdW5lciIgKHNtYWxsIFBDQikKKyAgNTA2OTQgIFRWIFRVTkVSIENBUkQgUkRTIChQSElMSVBTIENISVBTRVQgU0FBNzEzNEhMKQorICA1MDY5NiAgVFYgVFVORVIgU1RFUkVPIChQSElMSVBTIENISVBTRVQgU0FBNzEzNEhMLCBNSzNNRSBUdW5lcikKKyAgNTA4MDQgIFBDLVNBVCBUVi9BdWRpbyBLYXJ0ZSA9IFRlY2huaS1QQy1TYXQgKFpPUkFOIDM2MTIwUFFDLCBUdW5lcjpBbHBzKQorICA1MDg2NiAgVFZJRVcgU0FUIFJFQ0VJVkVSK0FEUgorICA1MDg2OCAiVFYvRk0gVHVuZXIgUGFsIEkiICh2YXJpYW50IG9mIDUwNjgyKQorICA1MDk5OSAiVFYvRk0gVHVuZXIgU2VjYW0iICh2YXJpYW50IG9mIDUwNjgyKQorCisKK0d1aWxsZW1vdAorLS0tLS0tLS0tCisgIE1heGktVFYgUENJIChaUjM2MTIwKQorICBNYXhpIFRWIFZpZGVvIDIgPSBMUjUwIFJldi5RIChGSTEyMTZNRiwgUEFMIEJHK1NFQ0FNKQorICBNYXhpIFRWIFZpZGVvIDMgPSBDUEgwNjQgKFBBTCBCRyArIFNFQ0FNKQorCitNZW50b3IKKy0tLS0tLQorICBNZW50b3IgVFYgY2FyZCAoIjU1LTg3OFRWLVUxIikgPSBQaXhlbHZpZXcgODc4VFYoUmV2LjNGKSAody9GTSB3L1JlbW90ZSkKKworUHJvbGluaworLS0tLS0tLQorICAgVFYgY2FyZHM6CisgICBQaXhlbFZpZXcgUGxheSBUViBwcm8gLSAoTW9kZWw6IFBWLUJUODc4UCsgUkVWIDhFKQorICAgUGl4ZWxWaWV3IFBsYXkgVFYgcHJvIC0gKE1vZGVsOiBQVi1CVDg3OFArIFJFViA5RCkKKyAgIFBpeGVsVmlldyBQbGF5IFRWIHBybyAtIChNb2RlbDogUFYtQlQ4NzhQKyBSRVYgNEMgLyA4RCAvIDEwQSApCisgICBQaXhlbFZpZXcgUGxheSBUViAtIChNb2RlbDogUFYtQlQ4NDhQKykKKyAgIDg3OFRWIC0gKE1vZGVsOiBQVi1CVDg3OFRWKQorCisgICBNdWx0aW1lZGlhIFRWIHBhY2thZ2VzIChjYXJkICsgc29mdHdhcmUgcGFjayk6CisgICBQaXhlbFZpZXcgUGxheSBUViBUaGVhdGVyIC0gKE1vZGVsOiBQVi1NNDIwMCkgPSAgUGl4ZWxWaWV3IFBsYXkgVFYgcHJvICsgU29mdHdhcmUKKyAgIFBpeGVsVmlldyBQbGF5IFRWIFBBSyAtICAgICAoTW9kZWw6IFBWLUJUODc4UCsgUkVWIDRFKQorICAgUGl4ZWxWaWV3IFBsYXkgVFYvVkNSIC0gICAgIChNb2RlbDogUFYtTTMyMDAgUkVWIDRDIC8gOEQgLyAxMEEgKSAKKyAgIFBpeGVsVmlldyBTdHVkaW8gUEFLIC0gICAgICAoTW9kZWw6ICAgIE0yMjAwIFJFViA0QyAvIDhEIC8gMTBBICkKKyAgIFBpeGVsVmlldyBQb3dlclN0dWRpbyBQQUsgLSAoTW9kZWw6IFBWLU0zNjAwIFJFViA0RSkKKyAgIFBpeGVsVmlldyBEaWdpdGFsVkNSIFBBSyAtICAoTW9kZWw6IFBWLU0yNDAwIFJFViA0QyAvIDhEIC8gMTBBICkKKworICAgUGl4ZWxWaWV3IFBsYXlUViBQQUsgSUkgKFRWL0ZNIGNhcmQgKyB1c2IgY2FtZXJhKSAgUFYtTTM4MDAgCisgICBQaXhlbFZpZXcgUGxheVRWIFhQIFBWLU00NzAwLFBWLU00NzAwKHcvRk0pCisgICBQaXhlbFZpZXcgUGxheVRWIERWUiBQVi1NNDYwMCAgcGFja2FnZSBjb250ZW50czpQaXhlbFZpZXcgUGxheVRWIHBybywgd2luZHZyICYgdmlkZW9NYWlsIHMvdworCisgICBGdXJ0aGVyIENhcmRzOgorICAgUFYtQlQ4NzhQK3Jldi45QiAoUGxheSBUViBQcm8sIG9wdC4gdy9GTSB3L05JQ0FNKQorICAgUFYtQlQ4NzhQK3Jldi4yRgorICAgUFYtQlQ4NzhQIFJldi4xRCAoYnQ4NzgsIGNhcHR1cmUgb25seSkKKworICAgWENhcHR1cmUgUFYtQ1g4ODFQIChjeDIzODgxKQorICAgUGxheVRWIEhEIFBWLUNYODgxUEwrLCBQVi1DWDg4MVBMKyh3L0ZNKSAoY3gyMzg4MSkKKworICAgRFRWMzAwMCBQVi1EVFYzMDAwUCsgRFZCLVMgQ0kgPSBUd2luaGFuIFZQLTEwMzAKKyAgIERUVjIwMDAgRFZCLVMgPSBUd2luaGFuIFZQLTEwMjAKKyAgIAorICAgVmlkZW8gQ29uZmVyZW5jaW5nOgorICAgUGl4ZWxWaWV3IE1lZXRpbmcgUEFLIC0gKE1vZGVsOiBQVi1CVDg3OFApCisgICBQaXhlbFZpZXcgTWVldGluZyBQQUsgTGl0ZSAtIChNb2RlbDogUFYtQlQ4NzhQKQorICAgUGl4ZWxWaWV3IE1lZXRpbmcgUEFLIHBsdXMgLSAoTW9kZWw6IFBWLUJUODc4UCtyZXYgNEMvOEQvMTBBKQorICAgUGl4ZWxWaWV3IENhcHR1cmUgLSAoTW9kZWw6IFBWLUJUODQ4UCkKKworICAgUGl4ZWxWaWV3IFBsYXlUViBVU0IgcHJvCisgICBNb2RlbCBOby4gUFYtTlQxMDA0KywgUFYtTlQxMDA0KyAody9GTSkgPSBOVDEwMDQgVVNCIGRlY29kZXIgY2hpcCArIFNBQTcxMTMgdmlkZW8gZGVjb2RlciBjaGlwCisKK0R5bmFsaW5rCistLS0tLS0tLQorICAgVGhlc2UgYXJlIENQSCBzZXJpZXMuCisKK1Bob2ViZW1pY3JvCistLS0tLS0tLS0tLQorICAgVFYgTWFzdGVyICAgID0gQ1BIMDMwIG9yIENQSDA2MAorICAgVFYgTWFzdGVyIEZNID0gQ1BIMDUwCisKK0dlbml1cy9LeWUKKy0tLS0tLS0tLS0KKyAgIFZpZGVvIFdvbmRlci9HZW5pdXMgSW50ZXJuZXQgVmlkZW8gS2l0ID0gTFIzNyBSZXYuQworICAgVmlkZW8gV29uZGVyIFBybyBJSSAoODQ4IG9yIDg3OCkgPSBMUjI2CisKK1Rla3JhbQorLS0tLS0tCisgICBWaWRlb0NhcCBDMjA1IChCdDg0OCkKKyAgIFZpZGVvQ2FwIEMyMTAgKHpyMzYxMjAgK1BoaWxpcHMpCisgICBDYXB0dXJlVFYgTTIwMCAoSVNBKQorICAgQ2FwdHVyZVRWIE0yMDUgKEJ0ODQ4KQorCitMdWNreSBTdGFyCistLS0tLS0tLS0tCisgICBJbWFnZSBXb3JsZCBDb25mZXJlbmNlIFRWID0gTFI1MCBSZXYuIFEKKworTGVhZHRlaworLS0tLS0tLQorICAgV2luVmlldyA2MDEgKEJ0ODQ4KQorICAgV2luVmlldyA2MTAgKFpvcmFuKQorICAgV2luRmFzdDIwMDAKKyAgIFdpbkZhc3QyMDAwIFhQCisKK0tOQyBPbmUKKy0tLS0tLS0KKyAgIFRWLVN0YXRpb24KKyAgIFRWLVN0YXRpb24gU0UgKCtTb2Z0d2FyZSBCdW5kbGUpCisgICBUVi1TdGF0aW9uIHBybyAoK1RWIHN0ZXJlbykKKyAgIFRWLVN0YXRpb24gRk0gKCtSYWRpbykKKyAgIFRWLVN0YXRpb24gUkRTICgrUkRTKQorICAgVFYgU3RhdGlvbiBTQVQgKGFuYWxvZyBzYXRlbGxpdGUpCisgICBUVi1TdGF0aW9uIERWQi1TCisKKyAgIG5ld2VyIENhcmRzIGhhdmUgc2FhNzEzNCwgYnV0IG1vZGVsIG5hbWUgc3RheWVkIHRoZSBzYW1lPworCitQcm92aWRlbyAKKy0tLS0tLS0tCisgIFBWOTUxIG9yIFBWLTk1MSAoYWxzbyBhcmUgc29sZCBhczoKKyAgIEJvZWRlciBUVi1GTSBWaWRlbyBDYXB0dXJlIENhcmQKKyAgIFRpdGFubWVkaWEgU3VwZXJ2aXNpb24gVFYtMjQwMAorICAgUHJvdmlkZW8gUFY5NTEgVEYKKyAgIDNEZU1vbiBQVjk1MQorICAgTWVkaWFGb3J0ZSBUVi1WaXNpb24gUFY5NTEKKyAgIFlva28gUFY5NTEKKyAgIFZpdmFuY28gVHVuZXIgQ2FyZCBQQ0kgQXJ0Li1Oci46IDY4NDA0CisgICkgbm93IG5hbWVkIFBWLTk1MVQKKworICBTdXJ2ZWlsbGFuY2UgU2VyaWVzCisgIFBWLTE0MQorICBQVi0xNDMKKyAgUFYtMTQ3CisgIFBWLTE0OCAoY2FwdHVyZSBvbmx5KQorICBQVi0xNTAKKyAgUFYtMTUxCisKKyAgVFYtRk0gVHVuZXIgU2VyaWVzCisgIFBWLTk1MVREViAodHYgdHVuZXIgKyAxMzk0KQorICBQVi05NTFUL1RGCisgIFBWLTk1MVBUL1RGCisgIFBWLTk1NlQvVEYgTG93IFByb2ZpbGUKKyAgUFYtOTExCisKK0hpZ2hzY3JlZW4KKy0tLS0tLS0tLS0KKyAgIFRWIEthcnRlID0gTFI1MCBSZXYuUworICAgVFYtQm9vc3RhciA9IFRlcnJhdGVjIFRlcnJhIFRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgsIHRkYTk4MjEpICJjZWIxMDUucGNiIgorCitab2x0cml4CistLS0tLS0tCisgICBGYWNlIHRvIEZhY2UgQ2FwdHVyZSAoQnQ4NDggY2FwdHVyZSBvbmx5KSAoUENCICJWUC0yODQ4IikKKyAgIEZhY2UgVG8gRmFjZSBUViBNQVggKEJ0ODQ4KSAoUENCICJWUC04NDgyIFJldjEuMyIpCisgICBHZW5pZSBUViAoQnQ4NzgpIChQQ0IgIlZQLTg3OTAgUmV2IDIuMSIpCisgICBHZW5pZSBXb25kZXIgUHJvCisKK0FWZXJNZWRpYQorLS0tLS0tLS0tCisgICBBVmVyIEZ1blRWIExpdGUgKElTQSwgQVYzMDAxIGNoaXBzZXQpICAiTTEwMS5DIgorICAgQVZlclRWCisgICBBVmVyVFYgU3RlcmVvCisgICBBVmVyVFYgU3R1ZGlvICh3L0ZNKQorICAgQVZlck1lZGlhIFRWOTggd2l0aCBSZW1vdGUgCisgICBBVmVyTWVkaWEgVFYvRk05OCBTdGVyZW8KKyAgIEFWZXJNZWRpYSBUVkNBTTk4CisgICBUVkNhcHR1cmUgKEJ0ODQ4KQorICAgVFZQaG9uZSAoQnQ4NDgpCisgICBUVkNhcHR1cmU5OCAoPSJBVmVyTWVkaWEgVFY5OCIgaW4gVVNBKSAoQnQ4NzgpCisgICBUVlBob25lOTggKEJ0ODc4LCB3L0ZNKQorCisgICBQQ0IgICAgICBQQ0ktSUQgICAgICBNb2RlbC1OYW1lICAgICAgRWVwcm9tICBUdW5lciAgU291bmQgICAgQ291bnRyeQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE0xMDEuQyAgIElTQSAhCisgICBNMTA4LUIgICAgICBCdDg0OCAgICAgICAgICAgICAgICAgICAgIC0tICAgICBGUjEyMzYJCSBVUyAgICgyKSwoMykKKyAgIE0xQTgtQSAgICAgIEJ0ODQ4ICAgIEFWZXIgVFYtUGhvbmUgICAgICAgICAgIEZNMTIxNiAgLS0KKyAgIE0xNjgtVCAgIDE0NjE6MDAwMyAgIEFWZXJUViBTdHVkaW8gICA0ODoxNyAgIEZNMTIxNiBUREE5ODQwVCAgRCAgICAoMSkgdy9GTSB3L1JlbW90ZQorICAgTTE2OC1VICAgMTQ2MTowMDA0ICAgVFZDYXB0dXJlOTggICAgIDQwOjExICAgRkkxMjE2ICAgLS0gICAgICBEICAgIHcvUmVtb3RlCisgICBNMTY4SUktQiAxNDYxOjAwMDMgICBNZWRpb24gTUQ5NTkyICAgNDg6MTYgICBGTTEyMTYgVERBOTg3M0ggIEQgICAgdy9GTQorCisgICAoMSkgRGF1Z2h0ZXJib2FyZCBNQjY4LUEgd2l0aCBUREE5ODIwVCBhbmQgVERBOTg0MFQKKyAgICgyKSBTb255IE5FNDFTIHNvbGRlcmVkIChzdGVyZW8gc291bmQ/KQorICAgKDMpIERhdWdodGVyYm9hcmQgTTExOC1BIHcvIHBpYyAxNmM1NCBhbmQgNCBNSHogcXVhcnR6CisgCisgICBVUyBzaXRlIGhhcyBkaWZmZXJlbnQgZHJpdmVycyBmb3IgKGFzIG9mIDA5LzIwMDIpOgorICAgRVogQ2FwdHVyZS9JbnRlckNhbSBQQ0kgKEJULTg0OCBjaGlwKQorICAgRVogQ2FwdHVyZS9JbnRlckNhbSBQQ0kgKEJULTg3OCBjaGlwKQorICAgVFYtUGhvbmUgKEJULTg0OCBjaGlwKQorICAgVFY5OCAoQlQtODQ4IGNoaXApCisgICBUVjk4IFdpdGggUmVtb3RlIChCVC04NDggY2hpcCkKKyAgIFRWOTggKEJULTg3OCBjaGlwKQorICAgVFY5OCBXaXRoIFJlbW90ZSAoQlQtODc4KQorICAgVFYvRk05OCAoQlQtODc4IGNoaXApCisgICBBVmVyVFYKKyAgIEF2ZXJUViBTdGVyZW8KKyAgIEFWZXJUViBTdHVkaW8KKworICAgREUgaGF0IGRpdmVyc2UgVHJlaWJlciBmdWVyIGRpZXNlIE1vZGVsbGUgKFN0YW5kIDA5LzIwMDIpOgorICAgVFZQaG9uZSAoODQ4KSBtaXQgUGhpbGlwcyB0dW5lciBGUjEyWDYgKHcvIEZNIHJhZGlvKQorICAgVFZQaG9uZSAoODQ4KSBtaXQgUGhpbGlwcyB0dW5lciBGTTEyWDYgKHcvIEZNIHJhZGlvKQorICAgVFZDYXB0dXJlICg4NDgpIHcvUGhpbGlwcyB0dW5lciBGSTEyWDYKKyAgIFRWQ2FwdHVyZSAoODQ4KSBub24tUGhpbGlwcyB0dW5lcgorICAgVFZDYXB0dXJlOTggKEJ0ODc4KQorICAgVFZQaG9uZTk4IChCdDg3OCkKKyAgIEFWZXJUViB1bmQgVFZDYXB0dXJlOTggdy9WQ1IgKEJ0IDg3OCkKKyAgIEFWZXJUVlN0dWRpbyB1bmQgVFZQaG9uZTk4IHcvVkNSIChCdDg3OCkKKyAgIEFWZXJUViBHTyBTZXJpZSAoS2VpbiBTVmlkZW8gSW5wdXQpCisgICBBVmVyVFY5OCAoQlQtODc4IGNoaXApCisgICBBVmVyVFY5OCBtaXQgRmVybmJlZGllbnVuZyAoQlQtODc4IGNoaXApCisgICBBVmVyVFYvRk05OCAoQlQtODc4IGNoaXApCisKKyAgIFZET21hdGUgKHd3dy5hdmVybS5jb20uY24pID0gTTE2OFUgPworCitBaW1zbGFiCistLS0tLS0tCisgICBWaWRlbyBIaWdod2F5IG9yICJWaWRlbyBIaWdod2F5IFRSMjAwIiAoSVNBKQorICAgVmlkZW8gSGlnaHdheSBYdHJlbWUgKGFrYSAiVkhYIikgKEJ0ODQ4LCBGTSB3LyBURUE1NzU3KQorCitJWE1pY3JvIChmb3JtZXI6IElNUz1JbnRlZ3JhdGVkIE1pY3JvIFNvbHV0aW9ucykKKy0tLS0tLS0KKyAgIElYVFYgQlQ4NDggKD1UdXJib1RWKQorICAgSVhUViBCVDg3OAorICAgSU1TIFR1cmJvVFYgKEJ0ODQ4KQorCitMaWZldGVjL01lZGlvbi9UZXZpb24vQWxkaQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIExUOTMwNi9NRDkzMDYgPSBDUEgwNjEKKyAgIExUOTQxNS9NRDk0MTUgPSBMUjkwIFJldi5GIG9yIFJldi5HCisgICAgICAgICAgTUQ5NTkyID0gQXZlcm1lZGlhIFRWcGhvbmU5OCAoUENJX0lEPTE0NjE6MDAwMyksIFBDQi1SZXY9TTE2OElJLUIgKHcvVERBOTg3M0gpCisgICAgICAgICAgTUQ5NzE3ID0gS05DIE9uZSAoUmV2IEQ0LCBzYWE3MTM0LCBGTTEyMTYgTUsyIHR1bmVyKQorICAgICAgICAgIE1ENTA0NCA9IEtOQyBPbmUgKFJldiBENCwgc2FhNzEzNCwgRk0xMjE2TUUgTUszIHR1bmVyKQorCitNb2R1bGFyIFRlY2hub2xvZ2llcyAod3d3Lm1vZHVsYXJ0ZWNoLmNvbSkgVUsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTU0xMDAgUENUViAoQnQ4NDgpCisgICBNTTIwMSBQQ1RWIChCdDg3OCwgQnQ4MzIpIHcvIFF1YXJ0enNpZ2h0IGNhbWVyYQorICAgTU0yMDIgUENUViAoQnQ4NzgsIEJ0ODMyLCB0ZGE5ODc0KQorICAgTU0yMDUgUENUViAoQnQ4NzgpCisgICBNTTIxMCBQQ1RWIChCdDg3OCkgKEdhbGF4eSBUViwgR2FsYXh5bWVkaWEgPykKKworVGVycmF0ZWMKKy0tLS0tLS0tCisgICBUZXJyYSBUVisgVmVyc2lvbiAxLjAgKEJ0ODQ4KSwgImNlYjEwNS5QQ0IiIHByaW50ZWQgb24gdGhlIFBDQiwgVERBOTgyMQorICAgVGVycmEgVFYrIFZlcnNpb24gMS4xIChCdDg3OCksICJMUjc0IFJldi5FIiBwcmludGVkIG9uIHRoZSBQQ0IsIFREQTk4MjEKKyAgIFRlcnJhIFRWYWx1ZVJhZGlvLCAgICAgICAgICAgICAiTFIxMDIgUmV2LkMiIHByaW50ZWQgb24gdGhlIFBDQgorICAgVGVycmEgVFYvUmFkaW8rIFZlcnNpb24gMS4wLCAgICI4MC1DUDI4MzAxMDAtMCIgVFRUVjMgcHJpbnRlZCBvbiB0aGUgUENCLAorCQkJCSAgICAgIkNQSDAxMC1FODMiIG9uIHRoZSBiYWNrLCBTQUE2NTg4VCwgVERBOTg3M0gKKyAgIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIEJUODc4LCAgICAiODAtQ1AyODMwMTEwLTAgVFRUVjQiIHByaW50ZWQgb24gdGhlIFBDQiwgCisJCQkJICAgICAiQ1BIMDExLUQ4MyIgb24gYmFjaworICAgVGVycmEgVFZhbHVlIFZlcnNpb24gMS4wICAgICAgICJjZWIxMDUuUENCIiAocmVhbGx5IGlkZW50aWNhbCB0byBUZXJyYSBUVisgVmVyc2lvbiAxLjApCisgICBUZXJyYSBUVmFsdWUgTmV3IFJldmlzaW9uCSAgIkxSMTAyIFJlYy5DIgorICAgVGVycmEgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgKHRlYTU3NTdoLCBzYWE2NTg4dCkKKworICAgTFI3NCBpcyBhIG5ld2VyIFBDQiByZXZpc2lvbiBvZiBjZWIxMDUgKGJvdGggaW5jbC4gY29ubmVjdG9yIGZvciBBY3RpdmUgUmFkaW8gVXBncmFkZSkKKworICAgQ2luZXJneSA0MDAgKHNhYTcxMzQpLCAiRTg3NyAxMShTKSIsICJQTTgyMDA5MkQiIHByaW50ZWQgb24gUENCCisgICBDaW5lcmd5IDYwMCAoc2FhNzEzNCkKKworVGVjaG5pc2F0CistLS0tLS0tLS0KKyAgIERpc2NvcyBBRFIgUEMtS2FydGUgSVNBIChubyBUViEpCisgICBEaXNjb3MgQURSIFBDLUthcnRlIFBDSSAocHJvYmFibHkgbm8gVFY/KQorICAgVGVjaG5pLVBDLVNhdCAoU2F0LiBhbmFsb2cpCisgICAgICAgICBSZXYgMS4yICh6cjM2MTIwLCB2cHgzMjIwLCBzdHYwMDMwLCBzYWE1MjQ2LCBCU0pFMy00OTRBKQorICAgTWVkaWFmb2N1cyBJICh6cjM2MTIwL3pyMzYxMjUsIGRycDM1MTAsIFNhdC4gYW5hbG9nICsgQURSIFJhZGlvKQorICAgTWVkaWFmb2N1cyBJSSAoc2FhNzE0NiwgU2F0LiBhbmFsb2cpCisgICAgICAgICBTYXRBRFIgUmV2IDIuMSAoc2FhNzE0NmEsIHNhYTcxMTNoLCBzdHYwMDU2YSwgbXNwMzQwMGMsIGRycDM1MTBhLCBCU0tFMy0zMDdBKQorICAgU2t5U3RhciAxIERWQiAgKEFWNzExMCkgPSBUZWNobm90cmVuZCBQcmVtaXVtCisgICBTa3lTdGFyIDIgRFZCICAoQjJDMikgKD1Ta3kyUEMpCisKK1NpZW1lbnMKKy0tLS0tLS0KKyAgIE11bHRpbWVkaWEgZVh0ZW5zaW9uIEJvYXJkIChNWEIpIChTQUE3MTQ2LCBTQUE3MTExKQorCitTdHJhZGlzCistLS0tLS0tCisgICBTRE0yNzUsU0RNMjUwLFNETTAyNixTRE0wMjUgKFNBQTcxNDYsIElCTU1QRUcyKTogTVBFRzIgZGVjb2RlciBvbmx5CisKK1Bvd2VyY29sb3IKKy0tLS0tLS0tLS0KKyAgIE1UVjg3OAorICAgICAgIFBhY2thZ2UgY29tZXMgd2l0aCBkaWZmZXJlbnQgY29udGVudHM6CisgICAgICAgYSkgcGNiICJNVFY4NzgiIChDQVJEPTc1KQorICAgICAgIGIpIFBpeGVsdmlldyBSZXYuIDRfCisgICBNVFY4NzhSIHcvUmVtb3RlIENvbnRyb2wKKyAgIE1UVjg3OEYgdy9SZW1vdGUgQ29udHJvbCB3L0ZNIHJhZGlvCisKK1Bpbm5hY2xlCistLS0tLS0tLQorICAgTWlyb3ZpZGVvIFBDVFYgKEJ0ODQ4KQorICAgTWlyb3ZpZGVvIFBDVFYgU0UgKEJ0ODQ4KQorICAgTWlyb3ZpZGVvIFBDVFYgUHJvIChCdDg0OCArIERhdWdodGVyYm9hcmQgZm9yIFRWIFN0ZXJlbyBhbmQgRk0pCisgICBTdHVkaW8gUENUViBSYXZlIChCdDg0OCBWZXJzaW9uID0gTWlyb3ZpZGVvIFBDVFYpCisgICBTdHVkaW8gUENUViBSYXZlIChCdDg3OCBwYWNrYWdlIHcvbyBpbmZyYXJlZCkKKyAgIFN0dWRpbyBQQ1RWICAgICAgKEJ0ODc4KQorICAgU3R1ZGlvIFBDVFYgUHJvICAoQnQ4Nzggc3RlcmVvIHcvIEZNKQorICAgUGlubmFjbGUgUENUViAgICAoQnQ4NzgsIE1UMjAzMikKKyAgIFBpbm5hY2xlIFBDVFYgUHJvIChCdDg3OCwgTVQyMDMyKQorICAgUGlubmNhbGUgUENUViBTYXQgKGJ0ODc4YSwgSE0xODIxLzEyMjEpIFsiQ29uZXhhbnQgQ1gyNDExMCB3aXRoIENYMjQxMDggdHVuZXIsIGFrYSBITTEyMjEvSE0xODExIl0KKyAgIFBpbm5hY2xlIFBDVFYgU2F0IFhFCisKKyAgIE0oSilQRUcgY2FwdHVyZSBhbmQgcGxheWJhY2s6CisgICBEQzErIChJU0EpCisgICBEQzEwICAoenIzNjA1NywgICAgIHpyMzYwNjAsICAgICAgc2FhNzExMCwgYWR2NzE3NikKKyAgIERDMTArICh6cjM2MDY3LCAgICAgenIzNjA2MCwgICAgICBzYWE3MTEwLCBhZHY3MTc2KQorICAgREMyMCAgKHFsMTZ4MjRiLHpyMzYwNTAsIHpyMzYwMTYsIHNhYTcxMTAsIHNhYTcxODcgLi4uKQorICAgREMzMCAgKHpyMzYwNTcsIHpyMzYwNTAsIHpyMzYwMTYsIHZweDMyMjAsIGFkdjcxNzYsIGFkMTg0MywgdGVhNjQxNSwgbWlybyBGU1Q5N0ExKQorICAgREMzMCsgKHpyMzYwNjcsIHpyMzYwNTAsIHpyMzYwMTYsIHZweDMyMjAsIGFkdjcxNzYpCisgICBEQzUwICAoenIzNjA2NywgenIzNjA1MCwgenIzNjAxNiwgc2FhNzExMiwgYWR2NzE3NiAoMiBwY3MuPyksIGFkMTg0MywgbWlybyBGU1Q5N0ExLCBMYXR0aWNlID8/PykKKworTGVuY28KKy0tLS0tCisgICBNWFItOTU2NSAoPVRlY2huaXNhdCBNZWRpYWZvY3VzPykKKyAgIE1YUi05NTcxIChCdDg0OCkgKD1DUEgwMzE/KQorICAgTVhSLTk1NzUKKyAgIE1YUi05NTc3IChCdDg3OCkgKD1Qcm9saW5rIDg3OFRWIFJldi4zeCkKKyAgIE1YVFYtOTU3OENQIChCdDg3OCkgKD0gUHJvbGluayBQVi1CVDg3OFArNEUpCisKK0lvbWVnYQorLS0tLS0tCisgICBCdXogKHpyMzYwNjcsIHpyMzYwNjAsIHNhYTcxMTEsIHNhYTcxODUpCisKK0xNTAorLS0tCisgICBMTUwzMyAoenIzNjA2NywgenIzNjA2MCwgYnQ4MTksIGJ0ODU2KQorCitHcmFuZHRlYworLS0tLS0tLS0KKyAgIEdyYW5kIFZpZGVvIENhcHR1cmUgKEJ0ODQ4KQorICAgTXVsdGkgQ2FwdHVyZSBDYXJkICAoQnQ4NzgpCisKK0tvdXRlY2gKKy0tLS0tLS0KKyAgIEtXLTYwNiAoQnQ4NDgpCisgICBLVy02MDcgKEJ0ODQ4IGNhcHR1cmUgb25seSkKKyAgIEtXLTYwNlJTRgorICAgS1ctNjA3QSAoY2FwdHVyZSBvbmx5KQorICAgS1ctNjA4IChab3JhbiBjYXB0dXJlIG9ubHkpCisgCitJT0RBVEEgKGpwKQorLS0tLS0tCisgICBHVi1CQ1RWL1BDSQorICAgR1YtQkNUVjIvUENJCisgICBHVi1CQ1RWMy9QQ0kKKyAgIEdWLUJDVFY0L1BDSQorICAgR1YtVkNQL1BDSSAoY2FwdHVyZSBvbmx5KQorICAgR1YtVkNQMi9QQ0kgKGNhcHR1cmUgb25seSkKKworQ2Fub3B1cyAoanApCistLS0tLS0tCisgICBXaW5EVlIJPSBLd29ybGQgIktXLVRWTDg3OFJGIgorCit3d3cuc2lnbWFjb20uY28ua3IgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFNpZ21hIEN5YmVyIFRWIElJIAorCit3d3cuc2FzZW0uY28ua3IKKy0tLS0tLS0tLS0tLS0tLQorICAgTGl0dGUgT25BaXIgVFYKKworaGFtYSAKKy0tLS0KKyAgIFRWL1JhZGlvLVR1bmVyIENhcmQsIFBDSSAoTW9kZWwgNDQ2NzcpID0gQ1BIMDUxCisKK1NpZ21hIERlc2lnbnMKKy0tLS0tLS0tLS0tLS0KKyAgIEhvbGx5d29vZCBwbHVzIChlbTgzMDAsIGVtOTAxMCwgYWR2NzE3NSksIChQQ0IgIk0zNDAtMTAiKSBNUEVHIERWRCBkZWNvZGVyCisKK0Zvcm1hYworLS0tLS0tCisgICBpUHJvVFYgKENhcmQgZm9yIGlNYWMgTWV6emFuaW5lIHNsb3QsIEJ0ODQ4K1NDU0kpCisgICBQcm9UViAoQnQ4NDgpCisgICBQcm9UViBJSSA9IFByb1RWIFN0ZXJlbyAoQnQ4NzgpIFsic3RlcmVvIiBtZWFucyBGTSBzdGVyZW8sIHR2IGlzIHN0aWxsIG1vbm9dCisKK0FUSQorLS0tCisgICBUVi1Xb25kZXIKKyAgIFRWLVdvbmRlciBWRQorCitEaWFtb25kIE11bHRpbWVkaWEKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAgRFRWMjAwMCAoQnQ4NDgsIHRkYTk4NzUpCisKK0FvcGVuCistLS0tLQorICAgVkExMDAwIFBsdXMgKHcvIFN0ZXJlbykKKyAgIFZBMTAwMCBMaXRlCisgICBWQTEwMDAgKD1MUjkwKQorCitJbnRlbAorLS0tLS0KKyAgIFNtYXJ0IFZpZGVvIFJlY29yZGVyIChJU0EgZnVsbC1sZW5ndGgpCisgICBTbWFydCBWaWRlbyBSZWNvcmRlciBwcm8gKElTQSBoYWxmLWxlbmd0aCkKKyAgIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSAoQnQ4NDgpCisKK1NUQgorLS0tCisgICBTVEIgR2F0ZXdheSA2MDAwNzA0IChidDg3OCkKKyAgIFNUQiBHYXRld2F5IDYwMDA2OTkgKGJ0ODQ4KQorICAgU1RCIEdhdGV3YXkgNjAwMDQwMiAoYnQ4NDgpCisgICBTVEIgVFYxMzAgUENJCisKK1ZpZGVvbG9naWMKKy0tLS0tLS0tLS0KKyAgIENhcHRpdmF0b3IgUHJvL1RWIChJU0E/KQorICAgQ2FwdGl2YXRvciBQQ0kvVkMgKEJ0ODQ4IGJ1bmRsZWQgd2l0aCBjYW1lcmEpIChjYXB0dXJlIG9ubHkpCisKK1RlY2hub3RyZW5kCistLS0tLS0tLS0tLS0KKyAgIFRULVNBVCBQQ0kgKFBDQiAiU2F0LVBDSSBSZXYuOjEuMy4xIjsgenIzNjEyNSwgdnB4MzIyNWQsIHN0YzAwNTZhLCBUdW5lcjpCU0tFNi0xNTVBCisgICBUVC1EVkItU2F0CisgICAgcmV2aXNpb25zIDEuMSwgMS4zLCAxLjUsIDEuNiBhbmQgMi4xCisgICAgVGhpcyBjYXJkIGlzIHNvbGQgYXMgT0VNIGZyb206CisJU2llbWVucyBEVkItcyBDYXJkCisJSGF1cHBhdWdlIFdpblRWIERWQi1TCisJVGVjaG5pc2F0IFNreVN0YXIgMSBEVkIKKwlHYWxheGlzIERWQiBTYXQKKyAgICBOb3cgdGhpcyBjYXJkIGlzIGNhbGxlZCBUVC1QQ2xpbmUgUHJlbWl1bSBGYW1pbHkKKyAgIFRULUJ1ZGdldCAoc2FhNzE0NiwgYnNydTYtNzAxYSkKKyAgICBUaGlzIGNhcmQgaXMgc29sZCBhcyBPRU0gZnJvbToKKwlIYXVwcGF1Z2UgV2luVFYgTm92YQorCVNhdGVsY28gU3RhbmRhcmQgUENJIChEVkItUykKKyAgIFRULURWQi1DIFBDSQorCitUZWxlcworLS0tLS0KKyAgIERWQi1zIChSZXYuIDIuMiwgQlNSVjItMzAxQSwgZGF0YSBvbmx5PykKKworUmVtb3RlIFZpc2lvbgorLS0tLS0tLS0tLS0tLQorICAgTVggUlY2MDUgKEJ0ODQ4IGNhcHR1cmUgb25seSkKKworQm9lZGVyCistLS0tLS0KKyAgIFBDIENoYXRDYW0gKE1vZGVsIDY4MjUyKSAoQnQ4NDggY2FwdHVyZSBvbmx5KQorICAgVHYvRm0gQ2FwdHVyZSBDYXJkICAoTW9kZWwgNjg0MDQpID0gUFY5NTEKKworTWVkaWEtU3VyZmVyICAoZXNjLWthdGhyZWluLmRlKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgU2F0LVN1cmZlciAoSVNBKQorICAgU2F0LVN1cmZlciBQQ0kgPSBUZWNobmktUEMtU2F0CisgICBDYWJsZS1TdXJmZXIgMQorICAgQ2FibGUtU3VyZmVyIDIKKyAgIENhYmxlLVN1cmZlciBQQ0kgKHpyMzYxMjApCisgICBBdWRpby1TdXJmZXIgKElTQSBSYWRpbyBjYXJkKQorCitKZXR3YXkgKHd3dy5qZXR3YXkuY29tLnR3KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEpXLVRWIDg3OE0gCisgICBKVy1UViA4NzggID0gS1dvcmxkIEtXLVRWODc4UkYKKworR2FsYXhpcworLS0tLS0tLQorICAgR2FsYXhpcyBEVkIgQ2FyZCBTIENJCisgICBHYWxheGlzIERWQiBDYXJkIEMgQ0kKKyAgIEdhbGF4aXMgRFZCIENhcmQgUworICAgR2FsYXhpcyBEVkIgQ2FyZCBDCisgICBHYWxheGlzIHBsdWcuaW4gUyBbbmV1ZXIgTmFtZTogR2FsYXhpcyBEVkIgQ2FyZCBTIENJCisKK0hhdXBwYXVnZQorLS0tLS0tLS0tCisgICBtYW55IG1hbnkgV2luVFYgbW9kZWxzIC4uLgorICAgV2luVFYgRFZCcyA9IFRlY2hub3RyZW5kIFByZW1pdW0gMS4zCisgICBXaW5UViBOT1ZBID0gVGVjaG5vdHJlbmQgQnVkZ2V0IDEuMSAiUy1EVkIgREFUQSIKKyAgIFdpblRWIE5PVkEtQ0kgIlNEVkJBQ0kiCisgICBXaW5UViBOb3ZhIFVTQiAoPVRlY2hub3RyZW5kIFVTQiAxLjApCisgICBXaW5UVi1OZXh1cy1zICg9VGVjaG5vdHJlbmQgUHJlbWl1bSAyLjEgb3IgMi4yKQorICAgV2luVFYgUFZSCisgICBXaW5UViBQVlIgMjUwCisgICBXaW5UViBQVlIgNDUwCisKKyAgVVMgbW9kZWxzCisgIDk5MCBXaW5UVi1QVlItMzUwICgyNDlVU0QpIChpVFZDMTUgY2hpcHNldCArIHJhZGlvKQorICA5ODAgV2luVFYtUFZSLTI1MCAoMTQ5VVNEKSAoaVRWQzE1IGNoaXBzZXQpCisgIDg4MCBXaW5UVi1QVlItUENJICgxOTlVU0QpIChLRklSIGNoaXBzZXQgKyBidDg3OCkKKyAgODgxIFdpblRWLVBWUi1VU0IKKyAgMTkwIFdpblRWLUdPCisgIDE5MSBXaW5UVi1HTy1GTQorICA0MDQgV2luVFYKKyAgNDAxIFdpblRWLXJhZGlvCisgIDQ5NSBXaW5UVi1UaGVhdGVyCisgIDYwMiBXaW5UVi1VU0IKKyAgNjIxIFdpblRWLVVTQi1GTQorICA2MDAgVVNCLUxpdmUKKyAgNjk4IFdpblRWLUhECisgIDY5NyBXaW5UVi1ECisgIDU2NCBXaW5UVi1OZXh1cy1TCisKKyAgRGV1dHNjaGUgTW9kZWxsZQorICA2MDMgV2luVFYgR08KKyAgNzE5IFdpblRWIFByaW1pby1GTQorICA3MTggV2luVFYgUENJLUZNCisgIDQ5NyBXaW5UViBUaGVhdGVyCisgIDU2OSBXaW5UViBVU0IKKyAgNTY4IFdpblRWIFVTQi1GTQorICA4ODIgV2luVFYgUFZSCisgIDk4MSBXaW5UViBQVlIgMjUwCisgIDg5MSBXaW5UVi1QVlItVVNCCisgIDU0MSBXaW5UViBOb3ZhCisgIDQ4OCBXaW5UViBOb3ZhLUNpCisgIDU2NCBXaW5UVi1OZXh1cy1zCisgIDcyNyBXaW5UVi1EVkItYworICA1NDUgQ29tbW9uIEludGVyZmFjZQorICA4OTggV2luVFYtTm92YS1VU0IKKworICBVSyBtb2RlbHMKKyAgNjA3IFdpblRWIEdvCisgIDY5Myw3OTMgV2luVFYgUHJpbWlvIEZNCisgIDY0Nyw3NDcgV2luVFYgUENJIEZNCisgIDQ5OCBXaW5UViBUaGVhdGVyCisgIDg4MyBXaW5UViBQVlIKKyAgODkzIFdpblRWIFBWUiBVU0IgIChEdXBsaWNhdGUgZW50cnkpCisgIDU2NiBXaW5UViBVU0IgKFVLKQorICA1NzMgV2luVFYgVVNCIEZNCisgIDQyOSBJbXBhY3QgVkNCIChidDg0OCkKKyAgNjAwIFVTQiBMaXZlIChWaWRlby1JbiAxeCBDb21wLCAxeFNWSFMpCisgIDU0MiBXaW5UViBOb3ZhCisgIDcxNyBXaW5UViBEVkItUworICA5MDkgTm92YS10IFBDSQorICA4OTMgTm92YS10IFVTQiAgIChEdXBsaWNhdGUgZW50cnkpCisgIDgwMiBNeVRWCisgIDgwNCBNeVZpZXcKKyAgODA5IE15VmlkZW8KKyAgODcyIE15VFYyR28gRk0KKworIAorICA1NDYgV2luVFYgTm92YS1TIENJCisgIDU0MyBXaW5UViBOb3ZhCisgIDkwNyBOb3ZhLVMgVVNCCisgIDkwOCBOb3ZhLVQgVVNCCisgIDcxNyBXaW5UViBOZXh1cy1TCisgIDE1NyBERUMzMDAwLXMgU3RhbmRhbG9uZSArIFVTQgorCisgIFNwYWluCisgIDY4NSBXaW5UVi1HbworICA2OTAgV2luVFYtUHJpbWlvRk0KKyAgNDE2IFdpblRWLVBDSSBOaWNhbSBFc3RlcmVvCisgIDY3NyBXaW5UVi1QQ0ktRk0KKyAgNjk5IFdpblRWLVRoZWF0ZXIKKyAgNjgzIFdpblRWLVVTQgorICA2NzggV2luVFYtVVNCLUZNCisgIDk4MyBXaW5UVi1QVlItMjUwCisgIDg4MyBXaW5UVi1QVlItUENJCisgIDk5MyBXaW5UVi1QVlItMzUwCisgIDg5MyBXaW5UVi1QVlItVVNCCisgIDcyOCBXaW5UVi1EVkItQyBQQ0kKKyAgODMyIE15VFYyR28KKyAgODY5IE15VFYyR28tRk0KKyAgODA1IE15VmlkZW8gKFVTQikKKyAgCisKK01hdHJpeC1WaXNpb24KKy0tLS0tLS0tLS0tLS0KKyAgIE1BVFJJWC1WaXNpb24gTVYtRGVsdGEKKyAgIE1BVFJJWC1WaXNpb24gTVYtRGVsdGEgMgorICAgTVZzaWdtYS1TTEMgKEJ0ODQ4KQorCitDb25jZXB0cm9uaWMgKC5uZXQpCistLS0tLS0tLS0tLS0KKyAgIFRWQ09OIEZNLCAgVFYgY2FyZCB3LyBGTSA9IENQSDA1eAorICAgVFZDT04gPSBDUEgwNngKKworQmVzdERhdGEKKy0tLS0tLS0tCisgICBIQ0MxMDAgPSBWQ0MxMDByZXYxICsgY2FtZXJhCisgICBWQ0MxMDAgcmV2MSAoYnQ4NDgpCisgICBWQ0MxMDAgcmV2MiAoYnQ4NzgpCisKK0dhbGxhbnQgICh3d3cuZ2FsbGFudGNvbS5jb20pIHd3dy5taW50b24uY29tLnR3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgSW50ZXJ2aXNpb24gSVYtNTEwIChjYXB0dXJlIG9ubHkgYnQ4eDgpCisgICBJbnRlcnZpc2lvbiBJVi01NTAgKGJ0OHg4KQorICAgSW50ZXJ2aXNpb24gSVYtMTAwICh6b3JhbikKKyAgIEludGVydmlzaW9uIElWLTEwMDAgKGJ0OHg4KQorICAgCitBc29uaWMgKHd3dy5hc29uaWMuY29tLmNuKSAod2Vic2l0ZSBkb3duKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFNreUV5ZSB0diA4NzgKKworSG9vbnRlY2gKKy0tLS0tLS0tCisgICA4NzhUVi9GTQorCitUZXBwcm8gKHd3dy5pdGN0ZXBwcm8uY29tLnR3KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIElUQyBQQ0lUViAoQ2FyZCBWZXIgMS4wKSAiVGVwcHJvIFRWMS9UVkZNMSBDYXJkIgorICAgSVRDIFBDSVRWIChDYXJkIFZlciAyLjApCisgICBJVEMgUENJVFYgKENhcmQgVmVyIDMuMCkgPSAiUFYtQlQ4NzhQKyAoUkVWLjlEKSIKKyAgIElUQyBQQ0lUViAoQ2FyZCBWZXIgNC4wKQorICAgVEVQUFJPIElWLTU1MCAoRm9yIEJUODQ4IE1haW4gQ2hpcCkKKyAgIElUQyBEU1RUViAoYnQ4NzgsIHNhdGVsbGl0ZSkKKyAgIElUQyBWaWRlb01ha2VyIChzYWE3MTQ2LCBTdHJlYW1NYWNoaW5lIHNtMjExMCwgdHZ0dW5lcikgIlBWLVNNMjIxMFArIChSRVY6MUMpIgorCitLd29ybGQgKHd3dy5rd29ybGQuY29tLnR3KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUEMgVFYgU3RhdGlvbgorICAgS1dPUkxEIEtXLVRWODc4UiAgVFYgKG5vIHJhZGlvKQorICAgS1dPUkxEIEtXLVRWODc4UkYgVFYgKHcvIHJhZGlvKQorCisgICBLV09STEQgS1ctVFZMODc4UkYgKGxvdyBwcm9maWxlKQorCisgICBLV09STEQgS1ctVFY3MTNYUkYgKHNhYTcxMzQpCisKKworICBNUEVHIFRWIFN0YXRpb24gKHNhbWUgY2FyZHMgYXMgYWJvdmUgcGx1cyBXaW5EVlIgU29mdHdhcmUgTVBFRyBlbi9kZWNvZGVyKQorICAgS1dPUkxEIEtXLVRWODc4UiAtUHJvICAgVFYgKG5vIFJhZGlvKQorICAgS1dPUkxEIEtXLVRWODc4UkYtUHJvICAgVFYgKHcvIFJhZGlvKQorICAgS1dPUkxEIEtXLVRWODc4UiAtVWx0cmEgVFYgKG5vIFJhZGlvKQorICAgS1dPUkxEIEtXLVRWODc4UkYtVWx0cmEgVFYgKHcvIFJhZGlvKQorCisKKworSlRULyBKdXN0eSBDb3JwLmh0dHA6Ly93d3cuanVzdHkuY28uanAvICh3d3cuanR0LmNvbS5qcCB3ZWJzaXRlIGRvd24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEpUVC0wMiAoSlRUIFRWKSAiVFYgd2F0Y2htYXRlIHBybyIgKGJ0ODQ4KSAKKworQURTIHd3dy5hZHN0ZWNoLmNvbQorLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2hhbm5lbCBTdXJmZXIgVFYgKCBDSFgtOTUwICkgCisgICBDaGFubmVsIFN1cmZlciBUVitGTSAoIENIWC05NjBGTSApCisKK0FWRUMgd3d3LnByb2NoaXBzLmNvbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBBVkVDIEludGVyY2FwdHVyZSAoYnQ4NDgsIHRlYTYzMjApCisKK05vQnJhbmQKKy0tLS0tLS0KKyAgIFRWIEV4Y2VsID0gQXVzdHJhbGlhbiBOYW1lIGZvciAiUFYtQlQ4NzhQKyA4RSIgb3IgIjg3OFRWIFJldi4zXyIKKworTWFjaCB3d3cubWFjaHNwZWVkLmNvbQorLS0tLQorICAgTWFjaCBUViA4NzgKKworRWxpbmUgd3d3LmVsaW5lLW5ldC5jb20vCistLS0tLQorICAgRWxpbmUgVmlzaW9uIFRWTWFzdGVyIC8gVFZNYXN0ZXIgRk0gKEVMVi1UVk0vIEVMVi1UVk0tRk0pID0gTFIyNiAgKGJ0ODc4KQorICAgRWxpbmUgVmlzaW9uIFRWTWFzdGVyLTIwMDAgKEVMVi1UVk0tMjAwMCwgRUxWLVRWTS0yMDAwLUZNKT0gTFIxMzggKHNhYTcxM3gpCisKK1NwaXJpdCBodHRwOi8vd3d3LnNwaXJpdG1vZGVtcy5jb20uYXUvCistLS0tLS0KKyAgIFNwaXJpdCBUViBUdW5lci9WaWRlbyBDYXB0dXJlIENhcmQgKGJ0ODQ4KQorCitCb3NlciB3d3cuYm9zZXIuY29tLnR3CistLS0tLQorICAgSFMtODc4IE1pbmkgUENJIENhcHR1cmUgQWRkLW9uIENhcmQKKyAgIEhTLTg3OSBNaW5pIFBDSSAzRCBBdWRpbyBhbmQgQ2FwdHVyZSBBZGQtb24gQ2FyZCAody8gRVMxOTM4IFNvbG8tMSkKKworU2F0ZWxjbyB3d3cuY2l0eWNvbS1nbWJoLmRlLCB3d3cuc2F0ZWxjby5kZQorLS0tLS0tLQorICAgVFYtRk0gPUtOQzEgc2FhNzEzNAorICAgU3RhbmRhcmQgUENJIChEVkItUykgPSBUZWNobm90cmVuZCBCdWRnZXQKKyAgIFN0YW5kYXJkIFBDSSAoRFZCLVMpIHcvIENJCisgICBTYXRlbGNvIEhpZ2hlbmQgUENJIChEVkItUykgPSBUZWNobm90cmVuZCBQcmVtaXVtCisKKworU2Vuc29yYXkgd3d3LnNlbnNvcmF5LmNvbQorLS0tLS0tLS0KKyAgIFNlbnNvcmF5IDMxMSAoUEMvMTA0IGJ1cykKKyAgIFNlbnNvcmF5IDYxMSAoUENJKQorCitDRUkgKENoYXJ0ZXJlZCBFbGVjdHJvbmljcyBJbmR1c3RyaWVzIFB0ZSBMdGQgW0NFSV0gW0ZDQyBJRCBIQlldKQorLS0tCisgIFRWIFR1bmVyICAtICBIQlktMzNBLVJBRkZMRVMgIEJyb29rdHJlZSBCdDg0OEtQRiArIFBoaWxpcHMKKyAgVFYgVHVuZXIgTUc5OTEwICAtICBIQlkzM0EtVFZPICBDRUkgKyBQaGlsaXBzIFNBQTcxMTAgKyBPS0kgTTU0ODI2MiArIFNUIFNUVjg0MzhDVgorICBQcmltZXRpbWUgVFYgKElTQSkKKyAgIGFjcXVpcmVkIGJ5IFNpbmdhcG9yZSBUZWNobm9sb2dpZXMKKyAgIG5vdyBvcGVyYXRpbmcgYXMgQ2hhcnRlcmVkIFNlbWljb25kdWN0b3IgTWFudWZhY3R1cmluZworICAgTWFudWZhY3R1cmVyIG9mIHZpZGVvIGNhcmRzIGlzIGxpc3RlZCBhczoKKyAgIENvZ2VudCBFbGVjdHJvbmljcyBJbmR1c3RyaWVzIFtDRUldCisKK0FJVGVjaAorLS0tLS0tCisgICBXYXZld2F0Y2hlciBUViAoSVNBKQorICAgQUlUZWNoIFdhdmVXYXRjaGVyIFRWLVBDSSA9IGNhbiBiZSBMUjI2IChCdDg0OCkgb3IgTFI1MCAoQlQ4NzgpCisgICBXYXZlV2F0Y2hlciBUVlItMjAyIFRWL0ZNIFJhZGlvIENhcmQgKElTQSkKKworTUFYUk9OCistLS0tLS0KKyAgIE1heHJvbiBNYXhUVi9GTSBSYWRpbyAoS1ctVFY4NzgtRk5UKSA9IEt3b3JsZCBvciBKVy1UVjg3OC1GQksKKword3d3Lmlkcy1pbWFnaW5nLmRlCistLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEZhbGNvbiBTZXJpZXMgKGNhcHR1cmUgb25seSkKKyBJbiBVU0E6IGh0dHA6Ly93d3cudGhlaW1hZ2luZ3NvdXJjZS5jb20vCisgICBERkcvTEMxCQorCit3d3cuc2tuZXQtd2ViLmNvLmpwCistLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTS25ldCBNb25zdGVyIFRWIChzYWE3MTM0KQorCitBLU1heCB3d3cuYW1heGhrLmNvbSAoQ29sb3JtYXgsIEFtYXgsIE5hcGEpCistLS0tLS0tLS0tLS0tLS0tLS0tCisgICBBUEFDIFZpZXdjb21wIDg3OAorCitDeWJlcnRhaW5tZW50CistLS0tLS0tLS0tLS0tCisgICBDeWJlck1haWwgQVYgVmlkZW8gRW1haWwgS2l0IHcvIFBDSSBDYXB0dXJlIENhcmQgKGNhcHR1cmUgb25seSkKKyAgIEN5YmVyTWFpbCBYdHJlbWUKKyAgVGhlc2UgYXJlIEZseXZpZGVvCisKK1ZDUiAoaHR0cDovL3d3dy52Y3JpbmMuY29tLykgCistLS0KKyAgVmlkZW8gQ2F0Y2hlciAxNgorCitUd2luaGFuCistLS0tLS0tCisgICBEU1QgQ2FyZC9EU1QtSVAgKGJ0ODc4LCB0d2luaGFuIGFzaWMpIFZQLTEwMjAKKyAgICBTb2xkIGFzOgorICAgICBLV29ybGQgRFZCUyBTYXRlbGxpdGUgVFYtQ2FyZAorICAgICBQb3dlcmNvbG9yIERTVFYgU2F0ZWxsaXRlIFR1bmVyIENhcmQKKyAgICAgUHJvbGluayBQaXhlbHZpZXcgRFRWMjAwMAorICAgICBQcm92aWRlbyBQVi05MTEgRGlnaXRhbCBTYXRlbGxpdGUgVFYgVHVuZXIgQ2FyZCBXaXRoIENvbW1vbiBJbnRlcmZhY2UgPworICAgRFNULUNJIENhcmQgKERWQiBTYXRlbGxpdGUpIFZQLTEwMzAKKyAgIERDVCBDYXJkIChEVkIgY2FibGUpCisKK01TSQorLS0tCisgICAgTVNJIFRWQG55d2hlcmUgVHVuZXIgQ2FyZCAoTVMtODg3NikgKENYMjM4ODEvODgzKSBOb3QgQnQ4NzggY29tcGF0aWJsZS4KKyAgICBNUy04NDAxIERWQi1TCisKK0ZvY3VzIHd3dy5mb2N1c2luZm8uY29tCistLS0tLQorICAgIEluVmlkZW8gUENJIChidDg3OCkKKworU2Rpc2lsayB3d3cuc2Rpc2lsay5jb20vCistLS0tLS0tCisgICAgU0RJIFNpbGsgMTAwCisgICAgU0RJIFNpbGsgMjAwIFNESSBJbnB1dCBDYXJkCisKK3d3dy5ldXJlc3lzLmNvbQorICAgIFBJQ09MTyBzZXJpZXMgCisKK1BNQy9QYWNlCit3d3cucGFjZWNvbS5jby51ayB3ZWJzaXRlIGNsb3NlZAorCitNZXJjdXJ5IHd3dy5rb2JpYW4uY29tIChVSyBhbmQgRlIpCisgICAgTFI1MAorICAgIExSMTM4UkJHLVJ4ICA9PSBMUjEzOAorCitURUMgc291bmQgKHBhY2thZ2UgYW5kIG1hbnVhbHMgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgbWFudWZhY3R1cmVyIGluZm8pIFRlY1NvdW5kCisgICAgVGhvdWdoIGVkdWNhdGVkIGdvb2dsaW5nIGZvdW5kOiB3d3cudGVjaG1ha2Vycy5jb20KKyAgICBUVi1NYXRlID0gWm9sdHJpeCBWUC04NDgyCisKK0xvcmVuemVuIHd3dy5sb3Jlbnplbi5kZQorLS0tLS0tLS0KKyAgICAgU0wgRFZCLVMgUENJID0gVGVjaG5vdHJlbmQgQnVkZ2V0IFBDSSAoc3UxMjc4IG9yIGJzcnUgdmVyc2lvbikKKworT3JpZ28gKC51aykgd3d3Lm9yaWdvMjAwMC5jb20KKyAgICAgUEMgVFYgQ2FyZCA9IExSNTAKKworSS9PIE1hZ2ljIHd3dy5pb21hZ2ljLmNvbQorLS0tLS0tLS0tCisgICAgUEMgUFZSIC0gRGVza3RvcCBUViBQZXJzb25hbCBWaWRlbyBSZWNvcmRlciBEUi1QQ1RWMTAwID0gUGlubmFjbGUgUk9CMkQtNTEwMDk0NjQgNC4wICsgQ3liZXJsaW5rIFBvd2VyVkNSIElJCisKK0Fyb3dhbmEKKy0tLS0tLS0KKyAgICBUVi1LYXJ0ZSAvIFBvc28gUG93ZXIgVFYgKD8pID0gWm9sdHJpeCBWUC04NDgyICg/KQorCitpVFZDMTUgYm9hcmRzOgorLS0tLS0tLS0tLS0tLQora3Vyb3V0b3NoaWtvdS5jb20gSVRWQzE1Cit5dWFuLmNvbSBNUEcxNjAgUENJIFRWIChJbnRlcm5hbCBQQ0kgTVBFRzIgZW5jb2RlciBjYXJkIHBsdXMgVFYtdHVuZXIpCisKK0FzdXMgd3d3LmFzdXNjb20uY29tCisgICBBc3VzIFRWIFR1bmVyIENhcmQgODgwIE5UU0MgKGxvdyBwcm9maWxlLCBjeDIzODgwKQorICAgQXN1cyBUViAoc2FhNzEzNCkKKworSG9vbnRlY2gKKy0tLS0tLS0tCitodHRwOi8vd3d3Lmhvb250ZWNoLmNvbS9rb3JlYW4vZG93bmxvYWQvZG93bl9kcml2ZXJfbGlzdDAzLmh0bWwKKyAgIEhBUlQgVmlzaW9uIDg0OCAoSC1BUlQgVmlzaW9uIDg0OCkKKyAgIEhBUlQgVmlzaW9uIDg3OCAoSC1BcnQgVmlzaW9uIDg3OCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JQ3MgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSUNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNzQ5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSUNzCkBAIC0wLDAgKzEsMzcgQEAKK2FsbCBib2FyZHM6CisKK0Jyb29rdHJlZSBCdDg0OC84NDhBLzg0OS84NzgvODc5OiB2aWRlbyBjYXB0dXJlIGNoaXAKKworCisKK01pcm8gUENUVjoKKworUGhpbGlwcyBvciBUZW1pYyBUdW5lcgorCisKKworSGF1cHBhdWdlIFdpbi9UViBwY2kgKHZlcnNpb24gNDA1KToKKworTWljcm9jaGlwIDI0TEMwMkIgb3IKK1BoaWxpcHMgODU4MkUyWTogMjU2IEJ5dGUgRUVQUk9NIHdpdGggY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICBJMkMgMHhhMC0weGExLCAoMjRMQzAyQiBhbHNvIHJlc3BvbmRzIHRvIDB4YTItMHhhZikKK1BoaWxpcHMgU0FBNTI0NkFHUC9FOiBWaWRlb3RleHQgZGVjb2RlciBjaGlwLCBJMkMgMHgyMi0weDIzCitUREE5ODAwOiBzb3VuZCBkZWNvZGVyCitXaW5ib25kIFcyNDI1N0FTLTM1OiAzMkt4OCBDTU9TIHN0YXRpYyBSQU0gKFZpZGVvdGV4dCBidWZmZXIgbWVtKQorMTQwNTJCOiBhbmFsb2cgc3dpdGNoIGZvciBzZWxlY3Rpb24gb2Ygc291bmQgc291cmNlCisKK1BBTDogCitUREE1NzM3OiBWSEYsIGh5cGVyYmFuZCBhbmQgVUhGIG1peGVyL29zY2lsbGF0b3IgZm9yIFRWIGFuZCBWQ1IgMy1iYW5kIHR1bmVycworVFNBNTUyMjogMS40IEdIeiBJMkMtYnVzIGNvbnRyb2xsZWQgc3ludGhlc2l6ZXIsIEkyQyAweGMyLTB4YzMKKworTlRTQzoKK1REQTU3MzE6IFZIRiwgaHlwZXJiYW5kIGFuZCBVSEYgbWl4ZXIvb3NjaWxsYXRvciBmb3IgVFYgYW5kIFZDUiAzLWJhbmQgdHVuZXJzCitUU0E1NTE4OiBubyBkYXRhc2hlZXQgYXZhaWxhYmxlIG9uIFBoaWxpcHMgc2l0ZQorCisKKworU1RCIFRWIHBjaToKKworPz8/CitpZiB5b3Ugd2FudCBiZXR0ZXIgc3VwcG9ydCBmb3IgU1RCIGNhcmRzIHNlbmQgbWUgaW5mbyEKK0xvb2sgYXQgdGhlIGJvYXJkISBXaGF0IGNoaXBzIGFyZSBvbiBpdD8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmI1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCkBAIC0wLDAgKzEsMTczIEBACisKK05vdGU6ICJtb2RpbmZvIDxtb2R1bGU+IiBwcmludHMgdmFyaW91cyBpbmZvcm1hdGlvbnMgYWJvdXQgYSBrZXJuZWwKK21vZHVsZSwgYW1vbmcgdGhlbSBhIGNvbXBsZXRlIGFuZCB1cC10by1kYXRlIGxpc3Qgb2YgaW5zbW9kIG9wdGlvbnMuCitUaGlzIGxpc3QgdGVuZHMgdG8gYmUgb3V0ZGF0ZWQgYmVjYXVzZSBpdCBpcyB1cGRhdGVkIG1hbnVhbGx5IC4uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitidHR2Lm8KKwl0aGUgYnQ4NDgvODc4IChncmFiYmVyIGNoaXApIGRyaXZlcgorCisJaW5zbW9kIGFyZ3M6CisJCWNhcmQ9bgkJY2FyZCB0eXBlLCBzZWUgQ0FSRExJU1QgZm9yIGEgbGlzdC4KKwkJdHVuZXI9bgkJdHVuZXIgdHlwZSwgc2VlIENBUkRMSVNUIGZvciBhIGxpc3QuCisJCXJhZGlvPTAvMQljYXJkIHN1cHBvcnRzIHJhZGlvCisJCXBsbD0wLzEvMglwbGwgc2V0dGluZ3MKKwkJCTA6IGRvbid0IHVzZSBQTEwKKwkJCTE6IDI4IE1IeiBjcnlzdGFsIGluc3RhbGxlZAorCQkJMjogMzUgTUh6IGNyeXN0YWwgaW5zdGFsbGVkCisKKwkJdHJpdG9uMT0wLzEgICAgIGZvciBUcml0b24xICgrb3RoZXJzKSBjb21wYXRpYmlsaXR5CisJCXZzZng9MC8xCXlldCBhbm90aGVyIGNoaXBzZXQgYnVnIGNvbXBhdGliaWxpdHkgYml0CisJCQkJc2VlIFJFQURNRS5xdWlya3MgZm9yIGRldGFpbHMgb24gdGhlc2UgdHdvLgorCisJCWJpZ2VuZGlhbj1uCVNldCB0aGUgZW5kaWFubmVzcyBvZiB0aGUgZ2Z4IGZyYW1lYnVmZmVyLgorCQkJCURlZmF1bHQgaXMgbmF0aXZlIGVuZGlhbi4KKwkJZmllbGRucj0wLzEJQ291bnQgZmllbGRzLiAgU29tZSBUViBkZXNjcmFtYmxpbmcgc29mdHdhcmUKKwkJCQluZWVkcyB0aGlzLCBmb3Igb3RoZXJzIGl0IG9ubHkgZ2VuZXJhdGVzCisJCQkJNTAgdXNlbGVzcyBJUlFzL3NlYy4gIGRlZmF1bHQgaXMgMCAob2ZmKS4KKwkJYXV0b2xvYWQ9MC8xCWF1dG9sb2FkIGhlbHBlciBtb2R1bGVzICh0dW5lciwgYXVkaW8pLgorCQkJCWRlZmF1bHQgaXMgMSAob24pLgorCQlidHR2X3ZlcmJvc2U9MC8xLzIgIHZlcmJvc2UgbGV2ZWwgKGF0IGluc21vZCB0aW1lLCB3aGlsZQorCQkJCWxvb2tpbmcgYXQgdGhlIGhhcmR3YXJlKS4gIGRlZmF1bHQgaXMgMS4KKwkJYnR0dl9kZWJ1Zz0wLzEJZGVidWcgbWVzc2FnZXMgKGZvciBjYXB0dXJlKS4KKwkJCQlkZWZhdWx0IGlzIDAgKG9mZikuCisJCWlycV9kZWJ1Zz0wLzEJaXJxIGhhbmRsZXIgZGVidWcgbWVzc2FnZXMuCisJCQkJZGVmYXVsdCBpcyAwIChvZmYpLgorCQlnYnVmZmVycz0yLTMyCW51bWJlciBvZiBjYXB0dXJlIGJ1ZmZlcnMgZm9yIG1tYXAnZWQgY2FwdHVyZS4KKwkJCQlkZWZhdWx0IGlzIDQuCisJCWdidWZzaXplPQlzaXplIG9mIGNhcHR1cmUgYnVmZmVycy4gZGVmYXVsdCBhbmQKKwkJCQltYXhpbXVtIHZhbHVlIGlzIDB4MjA4MDAwICh+Mk1CKQorCQlub19vdmVybGF5PTAJRW5hYmxlIG92ZXJsYXkgb24gYnJva2VuIGhhcmR3YXJlLiAgVGhlcmUKKwkJCQlhcmUgc29tZSBjaGlwc2V0cyAoU0lTIGZvciBleGFtcGxlKSB3aGljaAorCQkJCWFyZSBrbm93biB0byBoYXZlIHByb2JsZW1zIHdpdGggdGhlIFBDSSBETUEKKwkJCQlwdXNoIHVzZWQgYnkgYnR0di4gIGJ0dHYgd2lsbCBkaXNhYmxlIG92ZXJsYXkKKwkJCQlieSBkZWZhdWx0IG9uIHRoaXMgaGFyZHdhcmUgdG8gYXZvaWQgY3Jhc2hlcy4KKwkJCQlXaXRoIHRoaXMgaW5zbW9kIG9wdGlvbiB5b3UgY2FuIG92ZXJyaWRlIHRoaXMuCisJCWF1dG9tdXRlPTAvMQlBdXRvbWF0aWNhbGx5IG11dGVzIHRoZSBzb3VuZCBpZiB0aGVyZSBpcworCQkJCW5vIFRWIHNpZ25hbCwgb24gYnkgZGVmYXVsdC4gIFlvdSBtaWdodCB0cnkKKwkJCQl0byBkaXNhYmxlIHRoaXMgaWYgeW91IGhhdmUgYmFkIGlucHV0IHNpZ25hbAorCQkJCXF1YWxpdHkgd2hpY2ggbGVhZGluZyB0byB1bndhbnRlZCBzb3VuZAorCQkJCWRyb3BvdXRzLgorCQljaHJvbWFfYWdjPTAvMQlBR0Mgb2YgY2hyb21hIHNpZ25hbCwgb2ZmIGJ5IGRlZmF1bHQuCisJCWFkY19jcnVzaD0wLzEJTHVtaW5hbmNlIEFEQyBjcnVzaCwgb24gYnkgZGVmYXVsdC4KKworCQlidHR2X2dwaW89MC8xCisJCWdwaW9tYXNrPQorCQlhdWRpb2FsbD0KKwkJYXVkaW9tdXg9CisJCQkJU2VlIFNvdW5kLUZBUSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKworCXJlbWFwLCBjYXJkLCByYWRpbyBhbmQgcGxsIGFjY2VwdCB1cCB0byBmb3VyIGNvbW1hLXNlcGFyYXRlZCBhcmd1bWVudHMKKwkoZm9yIG11bHRpcGxlIGJvYXJkcykuCisKK3R1bmVyLm8KKwlUaGUgdHVuZXIgZHJpdmVyLiAgWW91IG5lZWQgdGhpcyB1bmxlc3MgeW91IHdhbnQgdG8gdXNlIG9ubHkKKwl3aXRoIGEgY2FtZXJhIG9yIGV4dGVybmFsIHR1bmVyIC4uLgorCisJaW5zbW9kIGFyZ3M6CisJCWRlYnVnPTEJCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nCisJCXR5cGU9bgkJdHlwZSBvZiB0aGUgdHVuZXIgY2hpcC4gbiBhcyBmb2xsb3dzOgorCQkJCXNlZSBDQVJETElTVCBmb3IgYSBjb21wbGV0ZSBsaXN0LgorCQlwYWw9W2JkZ2lsXQlzZWxlY3QgUEFMIHZhcmlhbnQgKHVzZWQgZm9yIHNvbWUgdHVuZXJzCisJCQkJb25seSwgaW1wb3J0YW50IGZvciB0aGUgYXVkaW8gY2FycmllcikuCisKK3R2bWl4ZXIubworCXJlZ2lzdGVycyBhIG1peGVyIGRldmljZSBmb3IgdGhlIFRWIGNhcmQncyB2b2x1bWUvYmFzcy90cmVibGUKKwljb250cm9scyAocmVxdWlyZXMgYSBpMmMgYXVkaW8gY29udHJvbCBjaGlwIGxpa2UgdGhlIG1zcDM0MDApLgorCisJaW5zbW9kIGFyZ3M6CisJCWRlYnVnPTEJCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nLgorCQlkZXZucj1uCQlhbGxvY2F0ZSBkZXZpY2UgI24gKDAgPT0gL2Rldi9taXhlciwKKwkJCQkxID0gL2Rldi9taXhlcjEsIC4uLiksIGRlZmF1bHQgaXMgdG8KKwkJCQl1c2UgdGhlIGZpcnN0IGZyZWUgb25lLgorCit0dmF1ZGlvLm8KKwluZXcsIGV4cGVyaW1lbnRhbCBtb2R1bGUgd2hpY2ggaXMgc3VwcG9ydGVkIHRvIHByb3ZpZGUgYSBzaW5nbGUKKwlkcml2ZXIgZm9yIGFsbCBzaW1wbGUgaTJjIGF1ZGlvIGNvbnRyb2wgY2hpcHMgKHRkYS90ZWEqKS4KKworCWluc21vZCBhcmdzOgorCQl0ZGE4NDI1ICA9IDEJZW5hYmxlL2Rpc2FibGUgdGhlIHN1cHBvcnQgZm9yIHRoZQorCQl0ZGE5ODQwICA9IDEJdmFyaW91cyBjaGlwcy4KKwkJdGRhOTg1MCAgPSAxCVRoZSB0ZWE2MzAwIGNhbid0IGJlIGF1dG9kZXRlY3RlZCBhbmQgaXMKKwkJdGRhOTg1NSAgPSAxCXRoZXJlZm9yZSBvZmYgYnkgZGVmYXVsdCwgaWYgeW91IGhhdmUKKwkJdGRhOTg3MyAgPSAxCXRoaXMgb25lIG9uIHlvdXIgY2FyZCAoU1RCIHVzZXMgdGhlc2UpCisJCXRkYTk4NzRhID0gMQl5b3UgaGF2ZSB0byBlbmFibGUgaXQgZXhwbGljaXRseS4KKwkJdGVhNjMwMCAgPSAwCVRoZSB0d28gdGRhOTg1eCBjaGlwcyB1c2UgdGhlIHNhbWUgaTJjCisJCXRlYTY0MjAgID0gMQlhZGRyZXNzIGFuZCBjYW4ndCBiZSBkaXN0dXJnaXNoZWQgZnJvbQorCQlwaWMxNmM1NCA9IDEJZWFjaCBvdGhlciwgeW91IG1pZ2h0IGhhdmUgdG8gZGlzYWJsZQorCQkJCXRoZSB3cm9uZyBvbmUuCisJCWRlYnVnID0gMQlwcmludCBkZWJ1ZyBtZXNzYWdlcworCisJaW5zbW9kIGFyZ3MgZm9yIHRkYTk4NzRhOgorCQl0ZGE5ODc0YV9TSUY9MS8yCXNlbGVjdCBzb3VuZCBJRiBpbnB1dCBwaW4gKDEgb3IgMikKKwkJCQkJKGRlZmF1bHQgaXMgcGluIDEpCisJCXRkYTk4NzRhX0FNU0VMPTAvMQlhdXRvLW11dGUgc2VsZWN0IGZvciBOSUNBTSAoZGVmYXVsdD0wKQorCQkJCQlQbGVhc2UgcmVhZCBub3RlIDMgYmVsb3chCisJCXRkYTk4NzRhX1NURD1uCQlzZWxlY3QgVFYgc291bmQgc3RhbmRhcmQgKDAuLjgpOgorCQkJCQkwIC0gQTIsIEIvRworCQkJCQkxIC0gQTIsIE0gKEtvcmVhKQorCQkJCQkyIC0gQTIsIEQvSyAoMSkKKwkJCQkJMyAtIEEyLCBEL0sgKDIpCisJCQkJCTQgLSBBMiwgRC9LICgzKQorCQkJCQk1IC0gTklDQU0sIEkKKwkJCQkJNiAtIE5JQ0FNLCBCL0cKKwkJCQkJNyAtIE5JQ0FNLCBEL0sgKGRlZmF1bHQpCisJCQkJCTggLSBOSUNBTSwgTAorCisJTm90ZSAxOiB0ZGE5ODc0YSBzdXBwb3J0cyBib3RoIHRkYTk4NzRoIChvbGQpIGFuZCB0ZGE5ODc0YSAobmV3KSBjaGlwcy4KKwlOb3RlIDI6IHRkYTk4NzRoL2EgYW5kIHRkYTk4NzUgKHdoaWNoIGlzIHN1cHBvcnRlZCBzZXBhcmF0ZWx5IGJ5CisJdGRhOTg3NS5vKSB1c2UgdGhlIHNhbWUgaTJjIGFkZHJlc3Mgc28gYm90aCBtb2R1bGVzIHNob3VsZCBub3QgYmUKKwl1c2VkIGF0IHRoZSBzYW1lIHRpbWUuCisJTm90ZSAzOiBVc2luZyB0ZGE5ODc0YV9BTVNFTCBvcHRpb24gZGVwZW5kcyBvbiB5b3VyIFRWIGNhcmQgZGVzaWduIQorCQlBTVNFTD0wOiBhdXRvLW11dGUgd2lsbCBzd2l0Y2ggYmV0d2VlbiBOSUNBTSBzb3VuZAorCQkJIGFuZCB0aGUgc291bmQgb24gMXN0IGNhcnJpZXIgKGkuZS4gRk0gbW9ubyBvciBBTSkuCisJCUFNU0VMPTE6IGF1dG8tbXV0ZSB3aWxsIHN3aXRjaCBiZXR3ZWVuIE5JQ0FNIHNvdW5kCisJCQkgYW5kIHRoZSBhbmFsb2cgbW9ubyBpbnB1dCAoTU9OT0lOIHBpbikuCisJSWYgdGRhOTg3NGEgZGVjb2RlciBvbiB5b3VyIGNhcmQgaGFzIE1PTk9JTiBwaW4gbm90IGNvbm5lY3RlZCwgdGhlbgorCXVzZSBvbmx5IHRkYTk4NzRfQU1TRUw9MCBvciBkb24ndCBzcGVjaWZ5IHRoaXMgb3B0aW9uIGF0IGFsbC4KKwlGb3IgZXhhbXBsZToKKwkgIGNhcmQ9NjUgKEZseVZpZGVvIDIwMDBTKSAtIHNldCBBTVNFTD0xIG9yIEFNU0VMPTAKKwkgIGNhcmQ9NzIgKFByb2xpbmsgUFYtQlQ4NzhQIHJldi45QikgLSBzZXQgQU1TRUw9MCBvbmx5CisKK21zcDM0MDAubworCVRoZSBkcml2ZXIgZm9yIHRoZSBtc3AzNHh4IHNvdW5kIHByb2Nlc3NvciBjaGlwcy4gSWYgeW91IGhhdmUgYQorCXN0ZXJlbyBjYXJkLCB5b3UgcHJvYmFibHkgd2FudCB0byBpbnNtb2QgdGhpcyBvbmUuCisKKwlpbnNtb2QgYXJnczoKKwkJZGVidWc9MS8yCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nLAorCQkJCTIgaXMgbW9yZSB2ZXJib3NlLgorCQlzaW1wbGU9MQlVc2UgdGhlICJzaG9ydCBwcm9ncmFtbWluZyIgbWV0aG9kLiAgTmV3ZXIKKwkJCQltc3AzNHh4IHZlcnNpb25zIHN1cHBvcnQgdGhpcy4gIFlvdSBuZWVkIHRoaXMKKwkJCQlmb3IgZGJ4IHN0ZXJlby4gIERlZmF1bHQgaXMgb24gaWYgc3VwcG9ydGVkIGJ5CisJCQkJdGhlIGNoaXAuCisJCW9uY2U9MQkJRG9uJ3QgY2hlY2sgdGhlIFRWLXN0YXRpb25zIEF1ZGlvIG1vZGUKKwkJCQlldmVyeSBmZXcgc2Vjb25kcywgYnV0IG9ubHkgb25jZSBhZnRlcgorCQkJCWNoYW5uZWwgc3dpdGNoZXMuCisJCWFtc291bmQ9MQlBdWRpbyBjYXJyaWVyIGlzIEFNL05JQ0FNIGF0IDYuNSBNaHouICBUaGlzCisJCQkJc2hvdWxkIGltcHJvdmUgdGhpbmdzIGZvciBmcmVuY2ggcGVvcGxlLCB0aGUKKwkJCQljYXJyaWVyIGF1dG9zY2FuIHNlZW1zIHRvIHdvcmsgd2l0aCBGTSBvbmx5Li4uCisKK3RlYTYzMDAubyAtIE9CU09MRVRFICh1c2UgdHZhdWRpbyBpbnN0ZWFkKQorCVRoZSBkcml2ZXIgZm9yIHRoZSB0ZWE2MzAwIGZhZGVyIGNoaXAuICBJZiB5b3UgaGF2ZSBhIHN0ZXJlbworCWNhcmQgYW5kIHRoZSBtc3AzNDAwLm8gZG9lc24ndCB3b3JrLCB5b3UgbWlnaHQgd2FudCB0byB0cnkgdGhpcworCW9uZS4gIFRoaXMgY2hpcCBpcyBzZWVuIG9uIG1vc3QgU1RCIFRWL0ZNIGNhcmRzICh1c3VhbGx5IGZyb20KKwlHYXRld2F5IE9FTSBzb2xkIHN1cnBsdXMgb24gYXVjdGlvbiBzaXRlcykuCisKKwlpbnNtb2QgYXJnczoKKwkJZGVidWc9MQkJcHJpbnQgc29tZSBkZWJ1ZyBpbmZvIHRvIHRoZSBzeXNsb2cuCisKK3RkYTg0MjUubyAtIE9CU09MRVRFICh1c2UgdHZhdWRpbyBpbnN0ZWFkKQorCVRoZSBkcml2ZXIgZm9yIHRoZSB0ZGE4NDI1IGZhZGVyIGNoaXAuICBUaGlzIGRyaXZlciB1c2VkIHRvIGJlCisJcGFydCBvZiBidHR2LmMsIHNvIGlmIHlvdXIgc291bmQgdXNlZCB0byB3b3JrIGJ1dCBkb2VzIG5vdAorCWFueW1vcmUsIHRyeSBsb2FkaW5nIHRoaXMgbW9kdWxlLgorCisJaW5zbW9kIGFyZ3M6CisJCWRlYnVnPTEJCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nLgorCit0ZGE5ODV4Lm8gLSBPQlNPTEVURSAodXNlIHR2YXVkaW8gaW5zdGVhZCkKKwlUaGUgZHJpdmVyIGZvciB0aGUgdGRhOTg1MC81NSBhdWRpbyBjaGlwcy4KKworCWluc21vZCBhcmdzOgorCQlkZWJ1Zz0xCQlwcmludCBzb21lIGRlYnVnIGluZm8gdG8gdGhlIHN5c2xvZy4KKwkJY2hpcD05ODUwLzk4NTUJc2V0IHRoZSBjaGlwIHR5cGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTUFLRURFViBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9NQUtFREVWCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjliYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTUFLRURFVgpAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vYmFzaAorCitmdW5jdGlvbiBtYWtlZGV2ICgpIHsKKworCWZvciBkZXYgaW4gMCAxIDIgMzsgZG8KKwkJZWNobyAiL2Rldi8kMSRkZXY6IGNoYXIgODEgJFsgJDIgKyAkZGV2IF0iCisJCXJtIC1mIC9kZXYvJDEkZGV2CisJCW1rbm9kIC9kZXYvJDEkZGV2IGMgODEgJFsgJDIgKyAkZGV2IF0KKwkJY2htb2QgNjY2IC9kZXYvJDEkZGV2CisJZG9uZQorCisJIyBzeW1saW5rIGZvciBkZWZhdWx0IGRldmljZQorCXJtIC1mIC9kZXYvJDEKKwlsbiAtcyAvZGV2LyR7MX0wIC9kZXYvJDEKK30KKworIyBzZWUgaHR0cDovL3JvYWRydW5uZXIuc3dhbnNlYS51ay5saW51eC5vcmcvdjRsYXBpLnNodG1sCisKK2VjaG8gIioqKiBuZXcgZGV2aWNlIG5hbWVzICoqKiIKK21ha2VkZXYgdmlkZW8gMAorbWFrZWRldiByYWRpbyA2NAorbWFrZWRldiB2dHggMTkyCittYWtlZGV2IHZiaSAyMjQKKworI2VjaG8gIioqKiBvbGQgZGV2aWNlIG5hbWVzIChmb3IgY29tcGF0aWJpbGl0eSBvbmx5KSAqKioiCisjbWFrZWRldiBidHR2IDAKKyNtYWtlZGV2IGJ0dHYtZm0gNjQKKyNtYWtlZGV2IGJ0dHYtdmJpIDIyNApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01vZHByb2JlLmNvbmYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTW9kcHJvYmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWYxNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L01vZHByb2JlLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorIyBpMmMKK2FsaWFzIGNoYXItbWFqb3ItODkJaTJjLWRldgorb3B0aW9ucyBpMmMtY29yZQlpMmNfZGVidWc9MQorb3B0aW9ucyBpMmMtYWxnby1iaXQJYml0X3Rlc3Q9MQorCisjIGJ0dHYKK2FsaWFzIGNoYXItbWFqb3ItODEJdmlkZW9kZXYKK2FsaWFzIGNoYXItbWFqb3ItODEtMAlidHR2CitvcHRpb25zCWJ0dHYJCWNhcmQ9MiByYWRpbz0xCitvcHRpb25zCXR1bmVyCQlkZWJ1Zz0xCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Nb2R1bGVzLmNvbmYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTW9kdWxlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1M2YxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvTW9kdWxlcy5jb25mCkBAIC0wLDAgKzEsMTQgQEAKKyMgRm9yIG1vZGVybiBrZXJuZWxzICgyLjYgb3IgYWJvdmUpLCB0aGlzIGJlbG9uZ3MgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mCisjIEZvciBmb3IgMi40IGtlcm5lbHMgb3IgZWFybGllciwgdGhpcyBiZWxvbmdzIGluIC9ldGMvbW9kdWxlcy5jb25mLgorCisjIGkyYworYWxpYXMgY2hhci1tYWpvci04OQlpMmMtZGV2CitvcHRpb25zIGkyYy1jb3JlCWkyY19kZWJ1Zz0xCitvcHRpb25zIGkyYy1hbGdvLWJpdAliaXRfdGVzdD0xCisKKyMgYnR0dgorYWxpYXMgY2hhci1tYWpvci04MQl2aWRlb2RldgorYWxpYXMgY2hhci1tYWpvci04MS0wCWJ0dHYKK29wdGlvbnMJYnR0dgkJY2FyZD0yIHJhZGlvPTEKK29wdGlvbnMJdHVuZXIJCWRlYnVnPTEKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1BST0JMRU1TIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1BST0JMRU1TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzFlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUFJPQkxFTVMKQEAgLTAsMCArMSw2MiBAQAorLSBTdGFydCBjYXB0dXJpbmcgYnkgcHJlc3NpbmcgImMiIG9yIGJ5IHNlbGVjdGluZyBpdCB2aWEgYSBtZW51IQorCistIFN0YXJ0IGNhcHR1cmluZyBieSBwcmVzc2luZyAiYyIgb3IgYnkgc2VsZWN0aW5nIGl0IHZpYSBhIG1lbnUhISEKKworLSBUaGUgbWVtb3J5IG9mIHNvbWUgUzMgY2FyZHMgaXMgbm90IHJlY29nbml6ZWQgcmlnaHQ6CisgIAorICBGaXJzdCBvZiBhbGwsIGlmIHlvdSBhcmUgbm90IHVzaW5nIFhGcmVlLTMuMiBvciBuZXdlciwgdXBncmFkZSBBVCBMRUFTVCB0bworICBYRnJlZS0zLjJBISBUaGlzIHNvbHZlZCB0aGUgcHJvYmxlbSBmb3IgbW9zdCBwZW9wbGUuCisKKyAgU3RhcnQgdXAgWDExIGxpa2UgdGhpczogIlhGODZfUzMgLXByb2Jlb25seSIgYW5kIHdyaXRlIGRvd24gd2hlcmUgdGhlCisgIGxpbmVhciBmcmFtZSBidWZmZXIgaXMuCisgIElmIGl0IGlzIGRpZmZlcmVudCB0byB0aGUgYWRkcmVzcyBmb3VuZCBieSBidHR2IGluc3RhbGwgYnR0diBsaWtlIHRoaXM6CisgICJpbnNtb2QgYnR0diB2aWRtZW09MHhmYjAiCisgIGlmIHRoZSBsaW5lYXIgZnJhbWUgYnVmZmVyIGlzIGF0IDB4ZmIwMDAwMDAgKGkuZS4gb21pdCB0aGUgbGFzdCA1IHplcm9zISkKKworICBTb21lIFMzIGNhcmRzIGV2ZW4gdGFrZSB1cCA2NE1CIG9mIG1lbW9yeSBidXQgb25seSByZXBvcnQgMzJNQiB0byB0aGUgQklPUy4KKyAgSWYgdGhpcyA2NE1CIGFyZWEgb3ZlcmxhcHMgdGhlIElPIG1lbW9yeSBvZiB0aGUgQnQ4NDggeW91IGFsc28gaGF2ZSB0bworICByZW1hcCB0aGlzLiBFLmcuOiBpbnNtb2QgYnR0diB2aWRtZW09MHhmYjAgcmVtYXA9MHhmYTAKKworICBJZiB0aGUgdmlkZW8gbWVtb3J5IGlzIGZvdW5kIGF0IHRoZSByaWdodCBwbGFjZSBhbmQgdGhlcmUgYXJlIG5vIGFkZHJlc3MKKyAgY29uZmxpY3RzIGJ1dCBzdGlsbCBubyBwaWN0dXJlIChvciB0aGUgY29tcHV0ZXIgZXZlbiBjcmFzaGVzKSwKKyAgdHJ5IGRpc2FibGluZyBmZWF0dXJlcyBvZiB5b3VyIFBDSSBjaGlwc2V0IGluIHRoZSBCSU9TIHNldHVwLgorCisgIEZyYW5rIEthcGFobmtlIDxmcmFua0BrYXBhaG5rZS5wcmltYS5ydWhyLmRlPiBhbHNvIHJlcG9ydGVkIHRoYXQgcHJvYmxlbXMKKyAgd2l0aCBoaXMgUzMgODY4IHdlbnQgYXdheSB3aGVuIGhlIHVwZ3JhZGVkIHRvIFhGcmVlIDMuMi4KKworCistIEkgc3RpbGwgb25seSBnZXQgYSBibGFjayBwaWN0dXJlIHdpdGggbXkgUzMgY2FyZCEKKworICBFdmVuIHdpdGggWEZyZWUtMy4yQSBzb21lIHBlb3BsZSBoYXZlIHByb2JsZW1zIHdpdGggdGhlaXIgUzMgY2FyZHMKKyAgKG1vc3RseSB3aXRoIFRyaW8gNjQgYnV0IGFsc28gd2l0aCBzb21lIG90aGVycykKKyAgR2V0IHRoZSBmcmVlIGRlbW8gdmVyc2lvbiBvZiBBY2NlbGVyYXRlZCBYIGZyb20gd3d3LnhpbnNpZGUuY29tIGFuZCB0cnkKKyAgYnR0diB3aXRoIGl0LiBidHR2IHNlZW1zIHRvIHdvcmsgd2l0aCBtb3N0IFMzIGNhcmRzIHdpdGggQWNjZWxlcmF0ZWQgWC4KKyAgCisgIFNpbmNlIEkgZG8gbm90IGtub3cgbXVjaCAoYmV0dGVyIG1ha2UgdGhhdCBhbG1vc3Qgbm90aGluZykgYWJvdXQgVkdBIGNhcmQKKyAgcHJvZ3JhbW1pbmcgSSBkbyBub3Qga25vdyB0aGUgcmVhc29uIGZvciB0aGlzLgorICBMb29rcyBsaWtlIFhGcmVlIGRvZXMgc29tZXRoaW5nIGRpZmZlcmVudCB3aGVuIHNldHRpbmcgdXAgdGhlIHZpZGVvIG1lbW9yeT8KKyAgTWF5YmUgc29tZWJvZHkgY2FuIGVubGlnaHRlbiBtZT8gIAorICBXb3VsZCBiZSBuaWNlIGlmIHNvbWVib2R5IGNvdWxkIGdldCB0aGlzIHRvIHdvcmsgd2l0aCBYRnJlZSBzaW5jZSAKKyAgQWNjZWxlcmF0ZWQgWCBjb3N0cyBtb3JlIHRoYW4gc29tZSBvZiB0aGUgZ3JhYmJlciBjYXJkcyAuLi4gCisgCisgIEJldHRlciBsaW5lYXIgZnJhbWUgYnVmZmVyIHN1cHBvcnQgZm9yIFMzIGNhcmRzIHdpbGwgcHJvYmFibHkgYmUgaW4KKyAgWEZyZWUgNC4wLgorICAKKy0gR3JhYmJpbmcgaXMgbm90IHN3aXRjaGVkIG9mZiB3aGVuIGNoYW5naW5nIGNvbnNvbGVzIHdpdGggWEZyZWUuCisgIFRoYXQncyBiZWNhdXNlIFhGcmVlIGFuZCBzb21lIEFjY2VsZXJhdGVkWCB2ZXJzaW9ucyBkbyBub3Qgc2VuZCB1bm1hcAorICBldmVudHMuCisKKy0gU29tZSBwb3B1cCB3aW5kb3dzIChlLmcuIG9mIHRoZSB3aW5kb3cgbWFuYWdlcikgYXJlIG5vdCByZWZyZXNoZWQuCisgIAorICBEaXNhYmxlIGJhY2tpbmcgc3RvcmUgYnkgc3RhcnRpbmcgWCB3aXRoIHRoZSBvcHRpb24gIi1icyIKKworLSBXaGVuIHVzaW5nIDMyIGJwcCBpbiBYRnJlZSBvciAyNCs4YnBwIG1vZGUgaW4gQWNjZWxYIDMuMSB0aGUgc3lzdGVtCisgIGNhbiBzb21ldGltZXMgbG9jayB1cCBpZiB5b3UgdXNlIG1vcmUgdGhhbiAxIGJ0ODQ4IGNhcmQgYXQgdGhlIHNhbWUgdGltZS4KKyAgWW91IHdpbGwgYWx3YXlzIGdldCBwaXhlbCBlcnJvcnMgd2hlbiBlLmcuIHVzaW5nIG1vcmUgdGhhbiAxIGNhcmQgaW4gZnVsbAorICBzY3JlZW4gbW9kZS4gTWF5YmUgd2UgbmVlZCBzb21ldGhpbmcgZmFzdGVyIHRoYW4gdGhlIFBDSSBidXMgLi4uCisKKworLSBTb21lIFMzIGNhcmRzIGFuZCB0aGUgTWF0cm94IE15c3RpcXVlIHdpbGwgcHJvZHVjZSBwaXhlbCBlcnJvcnMgd2l0aAorICBmdWxsIHJlc29sdXRpb24gaW4gMzItYml0IG1vZGUuCisKKy0gU29tZSB2aWRlbyBjYXJkcyBoYXZlIHByb2JsZW1zIHdpdGggQWNjZWxlcmF0ZWQgWCA0LjEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmY0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCkBAIC0wLDAgKzEsOTAgQEAKKworUmVsZWFzZSBub3RlcyBmb3IgYnR0dgorPT09PT09PT09PT09PT09PT09PT09PQorCitZb3UnbGwgbmVlZCBhdCBsZWFzdCB0aGVzZSBjb25maWcgb3B0aW9ucyBmb3IgYnR0djoKKwlDT05GSUdfSTJDPW0KKwlDT05GSUdfSTJDX0FMR09CSVQ9bQorCUNPTkZJR19WSURFT19ERVY9bQorCitUaGUgbGF0ZXN0IGJ0dHYgdmVyc2lvbiBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vYnl0ZXNleC5vcmcvYnR0di8KKworCitNYWtlIGJ0dHYgd29yayB3aXRoIHlvdXIgY2FyZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSnVzdCB0cnkgIm1vZHByb2JlIGJ0dHYiIGFuZCBzZWUgaWYgdGhhdCB3b3Jrcy4KKworSWYgaXQgZG9lc24ndCBidHR2IGxpa2VseSBjb3VsZCBub3QgYXV0b2RldGVjdCB5b3VyIGNhcmQgYW5kIG5lZWRzIHNvbWUKK2luc21vZCBvcHRpb25zLiAgVGhlIG1vc3QgaW1wb3J0YW50IGluc21vZCBvcHRpb24gZm9yIGJ0dHYgaXMgImNhcmQ9biIKK3RvIHNlbGVjdCB0aGUgY29ycmVjdCBjYXJkIHR5cGUuICBJZiB5b3UgZ2V0IHZpZGVvIGJ1dCBubyBzb3VuZCB5b3UndmUKK3ZlcnkgbGlrZWx5IHNwZWNpZmllZCB0aGUgd3JvbmcgKG9yIG5vKSBjYXJkIHR5cGUuICBBIGxpc3Qgb2Ygc3VwcG9ydGVkCitjYXJkcyBpcyBpbiBDQVJETElTVC5idHR2CisKK0lmIGJ0dHYgdGFrZXMgdmVyeSBsb25nIHRvIGxvYWQgKGhhcHBlbnMgc29tZXRpbWVzIHdpdGggdGhlIGNoZWFwCitjYXJkcyB3aGljaCBoYXZlIG5vIHR1bmVyKSwgdHJ5IGFkZGluZyB0aGlzIHRvIHlvdXIgbW9kdWxlcy5jb25mOgorCW9wdGlvbnMgaTJjLWFsZ28tYml0IGJpdF90ZXN0PTEKKworRm9yIHRoZSBXaW5UVi9QVlIgeW91IG5lZWQgb25lIGZpcm13YXJlIGZpbGUgZnJvbSB0aGUgZHJpdmVyIENEOgoraGN3YW1jLnJiZi4gIFRoZSBmaWxlIGlzIGluIHRoZSBwdnI0NXh4eC5leGUgYXJjaGl2ZSAoc2VsZi1leHRyYWN0aW5nCit6aXAgZmlsZSwgdW56aXAgY2FuIHVucGFjayBpdCkuICBQdXQgaXQgaW50byB0aGUgL2V0Yy9wdnIgZGlyZWN0b3J5IG9yCit1c2UgdGhlIGZpcm1fYWx0ZXJhPTxwYXRoPiBpbnNtb2Qgb3B0aW9uIHRvIHBvaW50IHRoZSBkcml2ZXIgdG8gdGhlCitsb2NhdGlvbiBvZiB0aGUgZmlsZS4KKworSWYgeW91ciBjYXJkIGlzbid0IGxpc3RlZCBpbiBDQVJETElTVC5idHR2IG9yIGlmIHlvdSBoYXZlIHRyb3VibGUgbWFraW5nCithdWRpbyB3b3JrLCB5b3Ugc2hvdWxkIHJlYWQgdGhlIFNvdW5kLUZBUS4KKworCitBdXRvZGV0ZWN0aW5nIGNhcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK2J0dHYgdXNlcyB0aGUgUENJIFN1YnN5c3RlbSBJRCB0byBhdXRvZGV0ZWN0IHRoZSBjYXJkIHR5cGUuICBsc3BjaSBsaXN0cwordGhlIFN1YnN5c3RlbSBJRCBpbiB0aGUgc2Vjb25kIGxpbmUsIGxvb2tzIGxpa2UgdGhpczoKKworMDA6MGEuMCBNdWx0aW1lZGlhIHZpZGVvIGNvbnRyb2xsZXI6IEJyb29rdHJlZSBDb3Jwb3JhdGlvbiBCdDg3OCAocmV2IDAyKQorICAgICAgICBTdWJzeXN0ZW06IEhhdXBwYXVnZSBjb21wdXRlciB3b3JrcyBJbmMuIFdpblRWL0dPCisgICAgICAgIEZsYWdzOiBidXMgbWFzdGVyLCBtZWRpdW0gZGV2c2VsLCBsYXRlbmN5IDMyLCBJUlEgNQorICAgICAgICBNZW1vcnkgYXQgZTIwMDAwMDAgKDMyLWJpdCwgcHJlZmV0Y2hhYmxlKSBbc2l6ZT00S10KKworb25seSBidDg3OC1iYXNlZCBjYXJkcyBjYW4gaGF2ZSBhIHN1YnN5c3RlbSBJRCAod2hpY2ggZG9lcyBub3QgbWVhbgordGhhdCBldmVyeSBjYXJkIHJlYWxseSBoYXMgb25lKS4gIGJ0ODQ4IGNhcmRzIGNhbid0IGhhdmUgYSBTdWJzeXN0ZW0KK0lEIGFuZCB0aGVyZWZvcmUgY2FuJ3QgYmUgYXV0b2RldGVjdGVkLiAgVGhlcmUgaXMgYSBsaXN0IHdpdGggdGhlIElEJ3MKK2luIGJ0dHYtY2FyZHMuYyAoaW4gY2FzZSB5b3UgYXJlIGludHJlc3RlZCBvciB3YW50IHRvIG1haWwgcGF0Y2hlcword2l0aCB1cGRhdGVzKS4KKworCitTdGlsbCBkb2Vzbid0IHdvcms/CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgZG8gTk9UIGhhdmUgYSBsYWIgd2l0aCAzMCsgZGlmZmVyZW50IGdyYWJiZXIgYm9hcmRzIGFuZCBhCitQQUwvTlRTQy9TRUNBTSB0ZXN0IHNpZ25hbCBnZW5lcmF0b3IgYXQgaG9tZSwgc28gSSBvZnRlbiBjYW4ndAorcmVwcm9kdWNlIHlvdXIgcHJvYmxlbXMuICBUaGlzIG1ha2VzIGRlYnVnZ2luZyB2ZXJ5IGRpZmZpY3VsdCBmb3IgbWUuCitJZiB5b3UgaGF2ZSBzb21lIGtub3dsZWRnZSBhbmQgc3BhcmUgdGltZSwgcGxlYXNlIHRyeSB0byBmaXggdGhpcworeW91cnNlbGYgKHBhdGNoZXMgdmVyeSB3ZWxjb21lIG9mIGNvdXJzZS4uLikgIFlvdSBrbm93OiBUaGUgbGludXgKK3Nsb2dhbiBpcyAiRG8gaXQgeW91cnNlbGYiLgorCitUaGVyZSBpcyBhIG1haWxpbmcgbGlzdDogdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tLgoraHR0cHM6Ly9saXN0bWFuLnJlZGhhdC5jb20vbWFpbG1hbi9saXN0aW5mby92aWRlbzRsaW51eC1saXN0CisKK0lmIHlvdSBoYXZlIHRyb3VibGUgd2l0aCBzb21lIHNwZWNpZmljIFRWIGNhcmQsIHRyeSB0byBhc2sgdGhlcmUKK2luc3RlYWQgb2YgbWFpbGluZyBtZSBkaXJlY3RseS4gIFRoZSBjaGFuY2UgdGhhdCBzb21lb25lIHdpdGggdGhlCitzYW1lIGNhcmQgbGlzdGVucyB0aGVyZSBpcyBtdWNoIGhpZ2hlci4uLgorCitGb3IgcHJvYmxlbXMgd2l0aCBzb3VuZDogIFRoZXJlIGFyZSBhbG90IG9mIGRpZmZlcmVudCBzeXN0ZW1zIHVzZWQKK2ZvciBUViBzb3VuZCBhbGwgb3ZlciB0aGUgd29ybGQuICBBbmQgdGhlcmUgYXJlIGFsc28gZGlmZmVyZW50IGNoaXBzCit3aGljaCBkZWNvZGUgdGhlIGF1ZGlvIHNpZ25hbC4gIFJlcG9ydHMgYWJvdXQgc291bmQgcHJvYmxlbXMgKCJzdGVyZW8KK2RvZXMnbnQgd29yayIpIGFyZSBwcmV0dHkgdXNlbGVzcyB1bmxlc3MgeW91IGluY2x1ZGUgc29tZSBkZXRhaWxzCithYm91dCB5b3VyIGhhcmR3YXJlIGFuZCB0aGUgVFYgc291bmQgc2NoZW1lIHVzZWQgaW4geW91ciBjb3VudHJ5IChvcgorYXQgbGVhc3QgdGhlIGNvdW50cnkgeW91IGFyZSBsaXZpbmcgaW4pLgorCisKK0ZpbmFsbHk6IElmIHlvdSBtYWlsIHNvbWUgcGF0Y2hlcyBmb3IgYnR0diBhcm91bmQgdGhlIHdvcmxkICh0bworbGludXgta2VybmVsL0FsYW4vTGludXMvLi4uKSwgcGxlYXNlIENjOiBtZS4KKworCitIYXZlIGZ1biB3aXRoIGJ0dHYsCisKKyAgR2VyZAorCistLQorR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5XSU5WSUVXIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5XSU5WSUVXCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MWNmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLldJTlZJRVcKQEAgLTAsMCArMSwzMyBAQAorCitTdXBwb3J0IGZvciB0aGUgTGVhZHRlayBXaW5WaWV3IDYwMSBUVi9GTSBieSBKb24gVG9tYnMgPGpvbkBndGUuZXNpLnVzLmVzPgorCitUaGlzIGNhcmQgaXMgYmFzaWNhbGx5IHRoZSBzYW1lIGFzIGFsbCB0aGUgcmVzdCAoQnQ0ODRBLCBQaGlsaXBzIHR1bmVyKSwKK3RoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGV5IGhhdmUgYXR0YWNoZWQgYSBwcm9ncmFtbWFibGUgYXR0ZW51YXRvciB0byAzCitHUElPIGxpbmVzIGluIG9yZGVyIHRvIGdpdmUgc29tZSB2b2x1bWUgY29udHJvbC4gVGhleSBoYXZlIGFsc28gc3R1Y2sgYW4KK2luZnJhLXJlZCByZW1vdGUgY29udHJvbCBkZWNvZGVkIG9uIHRoZSBib2FyZCwgSSB3aWxsIGFkZCBzdXBwb3J0IGZvciB0aGlzCit3aGVuIEkgZ2V0IHRpbWUgKGl0IHNpbXBsZSBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IGZvciBlYWNoIGtleSBwcmVzcywgd2l0aAordGhlIGtleSBjb2RlIGlzIHBsYWNlZCBpbiB0aGUgR1BJTyBwb3J0KS4KKworSSBkb24ndCB5ZXQgaGF2ZSBhbnkgYXBwbGljYXRpb24gdG8gdGVzdCB0aGUgcmFkaW8gc3VwcG9ydC4gVGhlIHR1bmVyCitmcmVxdWVuY3kgc2V0dGluZyBzaG91bGQgd29yayBidXQgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgYXVkaW8gbXVsdGlwbGV4ZXIKK2lzIHdyb25nLiBJZiBpdCBkb2Vzbid0IHdvcmssIHNlbmQgbWUgZW1haWwuCisKKworLSBObyBUaGFua3MgdG8gTGVhZHRlayB0aGV5IHJlZnVzZWQgdG8gYW5zd2VyIGFueSBxdWVzdGlvbnMgYWJvdXQgdGhlaXIKK2hhcmR3YXJlLiBUaGUgZHJpdmVyIHdhcyB3cml0dGVuIGJ5IHZpc3VhbCBpbnNwZWN0aW9uIG9mIHRoZSBjYXJkLiBJZiB5b3UKK3VzZSB0aGlzIGRyaXZlciwgc2VuZCBhbiBlbWFpbCBpbnN1bHQgdG8gdGhlbSwgYW5kIHRlbGwgdGhlbSB5b3Ugd29uJ3QKK2NvbnRpbnVlIGJ1eWluZyB0aGVpciBoYXJkd2FyZSB1bmxlc3MgdGhleSBzdXBwb3J0IExpbnV4LgorCistIExpdHRsZSB0aGFua3MgdG8gUHJpbmNldG9uIFRlY2hub2xvZ3kgQ29ycCAoaHR0cDovL3d3dy5wcmluY2V0b24uY29tLnR3KQord2hvIG1ha2UgdGhlIGF1ZGlvIGF0dGVudWF0b3IuIFRoZWlyIHB1YmxpY2x5IGF2YWlsYWJsZSBkYXRhLXNoZWV0IGF2YWlsYWJsZQorb24gdGhlaXIgd2ViIHNpdGUgZG9lc24ndCBpbmNsdWRlIHRoZSBjaGlwIHByb2dyYW1taW5nIGluZm9ybWF0aW9uISBIaWRkZW4KK29uIHRoZWlyIHNlcnZlciBhcmUgdGhlIGZ1bGwgZGF0YS1zaGVldHMsIGJ1dCBkb24ndCBhc2sgaG93IEkgZm91bmQgaXQuCisKK1RvIHVzZSB0aGUgZHJpdmVyIEkgdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucywgdGhlIHR1bmVyIGFuZCBwbGwgc2V0dGluZ3MgbWlnaHQKK2JlIGRpZmZlcmVudCBpbiB5b3VyIGNvdW50cnkKKworaW5zbW9kIHZpZGVvZGV2CitpbnNtb2QgaTJjIHNjYW49MSBpMmNfZGVidWc9MCB2ZXJib3NlPTAKK2luc21vZCB0dW5lciB0eXBlPTEgZGVidWc9MAoraW5zbW9kIGJ0dHYgIHBsbD0xIHJhZGlvPTEgY2FyZD0xNworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLmZyZWV6ZSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuZnJlZXplCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjhkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLmZyZWV6ZQpAQCAtMCwwICsxLDc0IEBACisKK0lmIHRoZSBib3ggZnJlZXplcyBoYXJkIHdpdGggYnR0diAuLi4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSXQgbWlnaHQgYmUgYSBidHR2IGRyaXZlciBidWcuICBJdCBhbHNvIG1pZ2h0IGJlIGJhZCBoYXJkd2FyZS4gIEl0IGFsc28KK21pZ2h0IGJlIHNvbWV0aGluZyBlbHNlIC4uLgorCitKdXN0IG1haWxpbmcgbWUgImJ0dHYgZnJlZXplcyIgaXNuJ3QgZ29pbmcgdG8gaGVscCBtdWNoLiAgVGhpcyBSRUFETUUKK2hhcyBhIGZldyBoaW50cyBob3cgeW91IGNhbiBoZWxwIHRvIHBpbiBkb3duIHRoZSBwcm9ibGVtLgorCisKK2J0dHYgYnVncworLS0tLS0tLS0tCisKK0lmIHNvbWUgdmVyc2lvbiB3b3JrcyBhbmQgYW5vdGhlciBkb2Vzbid0IGl0IGlzIGxpa2VseSB0byBiZSBhIGRyaXZlcgorYnVnLiAgSXQgaXMgdmVyeSBoZWxwZnVsIGlmIHlvdSBjYW4gdGVsbCB3aGVyZSBleGFjdGx5IGl0IGJyb2tlCisoaS5lLiB0aGUgbGFzdCB3b3JraW5nIGFuZCB0aGUgZmlyc3QgYnJva2VuIHZlcnNpb24pLgorCitXaXRoIGEgaGFyZCBmcmVlemUgeW91IHByb2JhYmx5IGRvZXNuJ3QgZmluZCBhbnl0aGluZyBpbiB0aGUgbG9nZmlsZXMuCitUaGUgb25seSB3YXkgdG8gY2FwdHVyZSBhbnkga2VybmVsIG1lc3NhZ2VzIGlzIHRvIGhvb2sgdXAgYSBzZXJpYWwKK2NvbnNvbGUgYW5kIGxldCBzb21lIHRlcm1pbmFsIGFwcGxpY2F0aW9uIGxvZyB0aGUgbWVzc2FnZXMuICAvbWUgdXNlcworc2NyZWVuLiAgU2VlIERvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0IGZvciBkZXRhaWxzIG9uIHNldHRpbmcKK3VwIGEgc2VyaWFsIGNvbnNvbGUuCisKK1JlYWQgRG9jdW1lbnRhdGlvbi9vb3BzLXRyYWNpbmcudHh0IHRvIGxlYXJuIGhvdyB0byBnZXQgYW55IHVzZWZ1bAoraW5mb3JtYXRpb24gb3V0IG9mIGEgcmVnaXN0ZXIrc3RhY2sgZHVtcCBwcmludGVkIGJ5IHRoZSBrZXJuZWwgb24KK3Byb3RlY3Rpb24gZmF1bHRzIChzby1jYWxsZWQgImtlcm5lbCBvb3BzIikuCisKK0lmIHlvdSBydW4gaW50byBzb21lIGtpbmQgb2YgZGVhZGxvY2ssIHlvdSBjYW4gdHJ5IHRvIGR1bXAgYSBjYWxsIHRyYWNlCitmb3IgZWFjaCBwcm9jZXNzIHVzaW5nIHN5c3JxLXQgKHNlZSBEb2N1bWVudGF0aW9uL3N5c3JxLnR4dCkuICBrc3ltb29wcword2lsbCB0cmFuc2xhdGUgdGhlc2UgZHVtcHMgaW50byBrZXJuZWwgc3ltYm9scyB0b28uICBUaGlzIHdheSBpdCBpcworcG9zc2libGUgdG8gZmlndXJlIHdoZXJlICpleGFjdGx5KiBzb21lIHByb2Nlc3MgaW4gIkQiIHN0YXRlIGlzIHN0dWNrLgorCitJJ3ZlIHNlZW4gcmVwb3J0cyB0aGF0IGJ0dHYgMC43LnggY3Jhc2hlcyB3aGVyZWFzIDAuOC54IHdvcmtzIHJvY2sgc29saWQKK2ZvciBzb21lIHBlb3BsZS4gIFRodXMgcHJvYmFibHkgYSBzbWFsbCBidWdsZXQgbGVmdCBzb21ld2hlcmUgaW4gYnR0dgorMC43LnguICBJIGhhdmUgbm8gaWRlYSB3aGVyZSBleGFjdGx5LCBpdCB3b3JrcyBzdGFibGUgZm9yIG1lIGFuZCBhbG90IG9mCitvdGhlciBwZW9wbGUuICBCdXQgaW4gY2FzZSB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSAwLjcueCB2ZXJzaW9ucyB5b3UKK2NhbiBnaXZlIDAuOC54IGEgdHJ5IC4uLgorCisKK2hhcmR3YXJlIGJ1Z3MKKy0tLS0tLS0tLS0tLS0KKworU29tZSBoYXJkd2FyZSBjYW4ndCBkZWFsIHdpdGggUENJLVBDSSB0cmFuc2ZlcnMgKGkuZS4gZ3JhYmJlciA9PiB2Z2EpLgorU29tZXRpbWVzIHByb2JsZW1zIHNob3cgdXAgd2l0aCBidHR2IGp1c3QgYmVjYXVzZSBvZiB0aGUgaGlnaCBsb2FkIG9uCit0aGUgUENJIGJ1cy4gVGhlIGJ0ODQ4Lzg3OCBjaGlwcyBoYXZlIGEgZmV3IHdvcmthcm91bmRzIGZvciBrbm93bgoraW5jb21wYXRpYmlsaXRpZXMsIHNlZSBSRUFETUUucXVpcmtzLgorCitTb21lIGZvbGtzIHJlcG9ydCB0aGF0IGluY3JlYXNpbmcgdGhlIHBjaSBsYXRlbmN5IGhlbHBzIHRvbywKK2FsdGhyb3VnaHQgSSdtIG5vdCBzdXJlIHdoZW5ldmVyIHRoaXMgcmVhbGx5IGZpeGVzIHRoZSBwcm9ibGVtcyBvcgorb25seSBtYWtlcyBpdCBsZXNzIGxpa2VseSB0byBoYXBwZW4uICBCb3RoIGJ0dHYgYW5kIGJ0YXVkaW8gaGF2ZSBhCitpbnNtb2Qgb3B0aW9uIHRvIHNldCB0aGUgUENJIGxhdGVuY3kgb2YgdGhlIGRldmljZS4KKworU29tZSBtYWluYm9hcmQgaGF2ZSBwcm9ibGVtcyB0byBkZWFsIGNvcnJlY3RseSB3aXRoIG11bHRpcGxlIGRldmljZXMKK2RvaW5nIERNQSBhdCB0aGUgc2FtZSB0aW1lLiAgYnR0diArIGlkZSBzZWVtcyB0byBjYXVzZSB0aGlzIHNvbWV0aW1lcywKK2lmIHRoaXMgaXMgdGhlIGNhc2UgeW91IGxpa2VseSBzZWUgZnJlZXplcyBvbmx5IHdpdGggdmlkZW8gYW5kIGhhcmQgZGlzaworYWNjZXNzIGF0IHRoZSBzYW1lIHRpbWUuICBVcGRhdGluZyB0aGUgSURFIGRyaXZlciB0byBnZXQgdGhlIGxhdGVzdCBhbmQKK2dyZWF0ZXN0IHdvcmthcm91bmRzIGZvciBoYXJkd2FyZSBidWdzIG1pZ2h0IGZpeCB0aGVzZSBwcm9ibGVtcy4KKworCitvdGhlcgorLS0tLS0KKworSWYgeW91IHVzZSBzb21lIGJpbmFyeS1vbmx5IHl1bmsgKGxpa2UgbnZpZGlhIG1vZHVsZSkgdHJ5IHRvIHJlcHJvZHVjZQordGhlIHByb2JsZW0gd2l0aG91dC4KKworSVJRIHNoYXJpbmcgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgaW4gc29tZSBjYXNlcy4gIEl0IHdvcmtzIGp1c3QKK2ZpbmUgaW4gdGhlb3J5IGFuZCBtYW55IGNvbmZpZ3VyYXRpb25zLiAgTmV2ZXJsZXNzIGl0IG1pZ2h0IGJlIHdvcnRoIGEKK3RyeSB0byBzaHVmZmxlIGFyb3VuZCB0aGUgUENJIGNhcmRzIHRvIGdpdmUgYnR0diBhbm90aGVyIElSUSBvciBtYWtlCitpdCBzaGFyZSB0aGUgSVJRIHdpdGggc29tZSBvdGhlciBwaWVjZSBvZiBoYXJkd2FyZS4gIElSUSBzaGFyaW5nIHdpdGgKK1ZHQSBjYXJkcyBzZWVtcyB0byBjYXVzZSB0cm91YmxlIHNvbWV0aW1lcy4gIEkndmUgYWxzbyBzZWVuIGZ1bm55CitlZmZlY3RzIHdpdGggYnR0diBzaGFyaW5nIHRoZSBJUlEgd2l0aCB0aGUgQUNQSSBicmlkZ2UgKGFuZAorYXBjaS1lbmFibGVkIGtlcm5lbCkuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUucXVpcmtzIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5xdWlya3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZGI4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUucXVpcmtzCkBAIC0wLDAgKzEsODMgQEAKKworQmVsb3cgaXMgd2hhdCB0aGUgYnQ4NzggZGF0YSBib29rIHNheXMgYWJvdXQgdGhlIFBDSSBidWcgY29tcGF0aWJpbGl0eQorbW9kZXMgb2YgdGhlIGJ0ODc4IGNoaXAuCisKK1RoZSB0cml0b24xIGluc21vZCBvcHRpb24gc2V0cyB0aGUgRU5fVEJGWCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIuCitUaGUgdnNmeCBpbnNtb2Qgb3B0aW9uIGRvZXMgdGhlIHNhbWUgZm9yIEVOX1ZTRlggYml0LiAgSWYgeW91IGhhdmUKK3N0YWJpbGl0eSBwcm9ibGVtcyB5b3UgY2FuIHRyeSBpZiBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBtYWtlcyB5b3VyIGJveAord29yayBzb2xpZC4KKworZHJpdmVycy9wY2kvcXVpcmtzLmMga25vd3MgYWJvdXQgdGhlc2UgaXNzdWVzLCB0aGlzIHdheSB0aGVzZSBiaXRzIGFyZQorZW5hYmxlZCBhdXRvbWFnaWNhbGx5IGZvciBrbm93bi1idWdneSBjaGlwc2V0cyAobG9vayBhdCB0aGUga2VybmVsCittZXNzYWdlcywgYnR0diB0ZWxscyB5b3UpLgorCitIVEgsCisKKyAgR2VyZAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGN1dCBoZXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vcm1hbCBQQ0kgTW9kZQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBQQ0kgUkVRIHNpZ25hbCBpcyB0aGUgbG9naWNhbC1vciBvZiB0aGUgaW5jb21pbmcgZnVuY3Rpb24gcmVxdWVzdHMuCitUaGUgaW50ZXItbmFsIEdOVFswOjFdIHNpZ25hbHMgYXJlIGdhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggR05UIGFuZAorZGVtdWx0aXBsZXhlZCBieSB0aGUgYXVkaW8gcmVxdWVzdCBzaWduYWwuIFRodXMgdGhlIGFyYml0ZXIgZGVmYXVsdHMgdG8KK3RoZSB2aWRlbyBmdW5jdGlvbiBhdCBwb3dlci11cCBhbmQgcGFya3MgdGhlcmUgZHVyaW5nIG5vIHJlcXVlc3RzIGZvcgorYnVzIGFjY2Vzcy4gVGhpcyBpcyBkZXNpcmFibGUgc2luY2UgdGhlIHZpZGVvIHdpbGwgcmVxdWVzdCB0aGUgYnVzIG1vcmUKK29mdGVuLiBIb3dldmVyLCB0aGUgYXVkaW8gd2lsbCBoYXZlIGhpZ2hlc3QgYnVzIGFjY2VzcyBwcmlvcml0eS4gVGh1cwordGhlIGF1ZGlvIHdpbGwgaGF2ZSBmaXJzdCBhY2Nlc3MgdG8gdGhlIGJ1cyBldmVuIHdoZW4gaXNzdWluZyBhIHJlcXVlc3QKK2FmdGVyIHRoZSB2aWRlbyByZXF1ZXN0IGJ1dCBiZWZvcmUgdGhlIFBDSSBleHRlcm5hbCBhcmJpdGVyIGhhcyBncmFudGVkCithY2Nlc3MgdG8gdGhlIEJ0ODc5LiBOZWl0aGVyIGZ1bmN0aW9uIGNhbiBwcmVlbXB0IHRoZSBvdGhlciBvbmNlIG9uIHRoZQorYnVzLiBUaGUgZHVyYXRpb24gdG8gZW1wdHkgdGhlIGVudGlyZSB2aWRlbyBQQ0kgRklGTyBvbnRvIHRoZSBQQ0kgYnVzIGlzCit2ZXJ5IHNob3J0IGNvbXBhcmVkIHRvIHRoZSBidXMgYWNjZXNzIGxhdGVuY3kgdGhlIGF1ZGlvIFBDSSBGSUZPIGNhbgordG9sZXJhdGUuCisKKworNDMwRlggQ29tcGF0aWJpbGl0eSBNb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB1c2luZyB0aGUgNDMwRlggUENJLCB0aGUgZm9sbG93aW5nIHJ1bGVzIHdpbGwgZW5zdXJlCitjb21wYXRpYmlsaXR5OiAKKworICgxKSBEZWFzc2VydCBSRVEgYXQgdGhlIHNhbWUgdGltZSBhcyBhc3NlcnRpbmcgRlJBTUUuIAorICgyKSBEbyBub3QgcmVhc3NlcnQgUkVRIHRvIHJlcXVlc3QgYW5vdGhlciBidXMgdHJhbnNhY3Rpb24gdW50aWwgYWZ0ZXIKKyAgICAgZmluaXNoLWluZyB0aGUgcHJldmlvdXMgdHJhbnNhY3Rpb24uCisKK1NpbmNlIHRoZSBpbmRpdmlkdWFsIGJ1cyBtYXN0ZXJzIGRvIG5vdCBoYXZlIGRpcmVjdCBjb250cm9sIG9mIFJFUSwgYQorc2ltcGxlIGxvZ2ljYWwtb3Igb2YgdmlkZW8gYW5kIGF1ZGlvIHJlcXVlc3RzIHdvdWxkIHZpb2xhdGUgdGhlIHJ1bGVzLgorVGh1cywgYm90aCB0aGUgYXJiaXRlciBhbmQgdGhlIGluaXRpYXRvciBjb250YWluIDQzMEZYIGNvbXBhdGliaWxpdHkKK21vZGUgbG9naWMuIFRvIGVuYWJsZSA0MzBGWCBtb2RlLCBzZXQgdGhlIEVOX1RCRlggYml0IGFzIGluZGljYXRlZCBpbgorRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgb24gcGFnZSAxMDQuCisKK1doZW4gRU5fVEJGWCBpcyBlbmFibGVkLCB0aGUgYXJiaXRlciBlbnN1cmVzIHRoYXQgdGhlIHR3byBjb21wYXRpYmlsaXR5CitydWxlcyBhcmUgc2F0aXNmaWVkLiBCZWZvcmUgR05UIGlzIGFzc2VydGVkIGJ5IHRoZSBQQ0kgYXJiaXRlciwgdGhpcworaW50ZXJuYWwgYXJiaXRlciBtYXkgc3RpbGwgbG9naWNhbC1vciB0aGUgdHdvIHJlcXVlc3RzLiBIb3dldmVyLCBvbmNlCit0aGUgR05UIGlzIGlzc3VlZCwgdGhpcyBhcmJpdGVyIG11c3QgbG9jayBpbiBpdHMgZGVjaXNpb24gYW5kIG5vdyByb3V0ZQorb25seSB0aGUgZ3JhbnRlZCByZXF1ZXN0IHRvIHRoZSBSRVEgcGluLiBUaGUgYXJiaXRlciBkZWNpc2lvbiBsb2NrCitoYXBwZW5zIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXRlIG9mIEZSQU1FIGJlY2F1c2UgaXQgZG9lcyBub3Qga25vdyB3aGVuCitGUkFNRSB3aWxsIGJlIGFzc2VydGVkICh0eXBpY2FsbHkgLSBlYWNoIGluaXRpYXRvciB3aWxsIGFzc2VydCBGUkFNRSBvbgordGhlIGN5Y2xlIGZvbGxvd2luZyBHTlQpLiBXaGVuIEZSQU1FIGlzIGFzc2VydGVkLCBpdCBpcyB0aGUgaW5pdGlhdG9yIHMKK3Jlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSBpdHMgcmVxdWVzdCBhdCB0aGUgc2FtZSB0aW1lLiBJdCBpcyB0aGUKK2FyYml0ZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGFsbG93IHRoaXMgcmVxdWVzdCB0byBmbG93IHRocm91Z2ggdG8gUkVRIGFuZAorbm90IGFsbG93IHRoZSBvdGhlciByZXF1ZXN0IHRvIGhvbGQgUkVRIGFzc2VydGVkLiBUaGUgZGVjaXNpb24gbG9jayBtYXkKK2JlIHJlbW92ZWQgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb246IGZvciBleGFtcGxlLCB3aGVuIHRoZSBidXMgaXMKK2lkbGUgKEZSQU1FIGFuZCBJUkRZKS4gVGhlIGFyYml0ZXIgZGVjaXNpb24gbWF5IHRoZW4gY29udGludWUKK2FzeW5jaHJvbm91c2x5IHVudGlsIEdOVCBpcyBhZ2FpbiBhc3NlcnRlZC4KKworCitJbnRlcmZhY2luZyB3aXRoIE5vbi1QQ0kgMi4xIENvbXBsaWFudCBDb3JlIExvZ2ljCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc21hbGwgcGVyY2VudGFnZSBvZiBjb3JlIGxvZ2ljIGRldmljZXMgbWF5IHN0YXJ0IGEgYnVzIHRyYW5zYWN0aW9uCitkdXJpbmcgdGhlIHNhbWUgY3ljbGUgdGhhdCBHTlQgaXMgZGUtYXNzZXJ0ZWQuIFRoaXMgaXMgbm9uIFBDSSAyLjEKK2NvbXBsaWFudC4gVG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2hlbiB1c2luZyBQQ3Mgd2l0aCB0aGVzZSBQQ0kKK2NvbnRyb2xsZXJzLCB0aGUgRU5fVlNGWCBiaXQgbXVzdCBiZSBlbmFibGVkIChyZWZlciB0byBEZXZpY2UgQ29udHJvbAorUmVnaXN0ZXIgb24gcGFnZSAxMDQpLiBXaGVuIGluIHRoaXMgbW9kZSwgdGhlIGFyYml0ZXIgZG9lcyBub3QgcGFzcyBHTlQKK3RvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbnMgdW5sZXNzIFJFUSBpcyBhc3NlcnRlZC4gVGhpcyBwcmV2ZW50cyBhIGJ1cwordHJhbnNhY3Rpb24gZnJvbSBzdGFydGluZyB0aGUgc2FtZSBjeWNsZSBhcyBHTlQgaXMgZGUtYXNzZXJ0ZWQuIFRoaXMKK2Fsc28gaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBub3QgYmVpbmcgYWJsZSB0byB0YWtlIGFkdmFudGFnZSBvZiBidXMKK3BhcmtpbmcsIHRodXMgbG93ZXJpbmcgYXJiaXRyYXRpb24gcGVyZm9ybWFuY2UuIFRoZSBCdDg3OSBkcml2ZXJzIG11c3QKK3F1ZXJ5IGZvciB0aGVzZSBub24tY29tcGxpYW50IGRldmljZXMsIGFuZCBzZXQgdGhlIEVOX1ZTRlggYml0IG9ubHkgaWYKK3JlcXVpcmVkLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGM5YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUQpAQCAtMCwwICsxLDE0OCBAQAorCitidHR2IGFuZCBzb3VuZCBtaW5pIGhvd3RvCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSBhbG90IG9mIGRpZmZlcmVudCBidDg0OC84NDkvODc4Lzg3OSBiYXNlZCBib2FyZHMgYXZhaWxhYmxlLgorTWFraW5nIHZpZGVvIHdvcmsgb2Z0ZW4gaXMgbm90IGEgYmlnIGRlYWwsIGJlY2F1c2UgdGhpcyBpcyBoYW5kbGVkCitjb21wbGV0ZWx5IGJ5IHRoZSBidDh4eCBjaGlwLCB3aGljaCBpcyBjb21tb24gb24gYWxsIGJvYXJkcy4gIEJ1dAorc291bmQgaXMgaGFuZGxlZCBpbiBzbGlnaHRseSBkaWZmZXJlbnQgd2F5cyBvbiBlYWNoIGJvYXJkLgorCitUbyBoYW5kbGUgdGhlIGdyYWJiZXIgYm9hcmRzIGNvcnJlY3RseSwgdGhlcmUgaXMgYSBhcnJheSB0dmNhcmRzW10gaW4KK2J0dHYtY2FyZHMuYywgd2hpY2ggaG9sZHMgdGhlIGluZm9ybWF0aW9ucyByZXF1aXJlZCBmb3IgZWFjaCBib2FyZC4KK1NvdW5kIHdpbGwgd29yayBvbmx5LCBpZiB0aGUgY29ycmVjdCBlbnRyeSBpcyB1c2VkIChmb3IgdmlkZW8gaXQgb2Z0ZW4KK21ha2VzIG5vIGRpZmZlcmVuY2UpLiAgVGhlIGJ0dHYgZHJpdmVyIHByaW50cyBhIGxpbmUgdG8gdGhlIGtlcm5lbAorbG9nLCB0ZWxsaW5nIHdoaWNoIGNhcmQgdHlwZSBpcyB1c2VkLiAgTGlrZSB0aGlzIG9uZToKKworCWJ0dHYwOiBtb2RlbDogQlQ4NDgoSGF1cHBhdWdlIG9sZCkgW2F1dG9kZXRlY3RlZF0KKworWW91IHNob3VsZCB2ZXJpZnkgdGhpcyBpcyBjb3JyZWN0LiAgSWYgaXQgaXNuJ3QsIHlvdSBoYXZlIHRvIHBhc3MgdGhlCitjb3JyZWN0IGJvYXJkIHR5cGUgYXMgaW5zbW9kIGFyZ3VtZW50LCAiaW5zbW9kIGJ0dHYgY2FyZD0yIiBmb3IKK2V4YW1wbGUuICBUaGUgZmlsZSBDQVJETElTVCBoYXMgYSBsaXN0IG9mIHZhbGlkIGFyZ3VtZW50cyBmb3IgY2FyZC4KK0lmIHlvdXIgY2FyZCBpc24ndCBsaXN0ZWQgdGhlcmUsIHlvdSBtaWdodCBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yCituZXcgZW50cmllcyB3aGljaCBhcmUgbm90IGxpc3RlZCB5ZXQuICBJZiB0aGVyZSBpc24ndCBvbmUgZm9yIHlvdXIKK2NhcmQsIHlvdSBjYW4gY2hlY2sgaWYgb25lIG9mIHRoZSBleGlzdGluZyBlbnRyaWVzIGRvZXMgd29yayBmb3IgeW91CisoanVzdCB0cmlhbCBhbmQgZXJyb3IuLi4pLgorCitTb21lIGJvYXJkcyBoYXZlIGFuIGV4dHJhIHByb2Nlc3NvciBmb3Igc291bmQgdG8gZG8gc3RlcmVvIGRlY29kaW5nCithbmQgb3RoZXIgbmljZSBmZWF0dXJlcy4gIFRoZSBtc3AzNHh4IGNoaXBzIGFyZSB1c2VkIGJ5IEhhdXBwYXVnZSBmb3IKK2V4YW1wbGUuICBJZiB5b3VyIGJvYXJkIGhhcyBvbmUsIHlvdSBtaWdodCBoYXZlIHRvIGxvYWQgYSBoZWxwZXIKK21vZHVsZSBsaWtlIG1zcDM0MDAubyB0byBtYWtlIHNvdW5kIHdvcmsuICBJZiB0aGVyZSBpc24ndCBvbmUgZm9yIHRoZQorY2hpcCB1c2VkIG9uIHlvdXIgYm9hcmQ6ICBCYWQgbHVjay4gIFN0YXJ0IHdyaXRpbmcgYSBuZXcgb25lLiAgV2VsbCwKK3lvdSBtaWdodCB3YW50IHRvIGNoZWNrIHRoZSB2aWRlbzRsaW51eCBtYWlsaW5nIGxpc3QgYXJjaGl2ZSBmaXJzdC4uLgorCitPZiBjb3Vyc2UgeW91IG5lZWQgYSBjb3JyZWN0bHkgaW5zdGFsbGVkIHNvdW5kY2FyZCB1bmxlc3MgeW91IGhhdmUgdGhlCitzcGVha2VycyBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIGdyYWJiZXIgYm9hcmQuICBIaW50OiBjaGVjayB0aGUKK21peGVyIHNldHRpbmdzIHRvby4gIEFMU0EgZm9yIGV4YW1wbGUgaGFzIGV2ZXJ5dGhpbmcgbXV0ZWQgYnkgZGVmYXVsdC4KKworCitIb3cgc291bmQgd29ya3MgaW4gZGV0YWlsCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N0aWxsIGRvZXNuJ3Qgd29yaz8gIExvb2tzIGxpa2Ugc29tZSBkcml2ZXIgaGFja2luZyBpcyByZXF1aXJlZC4KK0JlbG93IGlzIGEgZG8taXQteW91cnNlbGYgZGVzY3JpcHRpb24gZm9yIHlvdS4KKworVGhlIGJ0OHh4IGNoaXBzIGhhdmUgMzIgZ2VuZXJhbCBwdXJwb3NlIHBpbnMsIGFuZCByZWdpc3RlcnMgdG8gY29udHJvbAordGhlc2UgcGlucy4gIE9uZSByZWdpc3RlciBpcyB0aGUgb3V0cHV0IGVuYWJsZSByZWdpc3RlcgorKEJUODQ4X0dQSU9fT1VUX0VOKSwgaXQgc2F5cyB3aGljaCBwaW5zIGFyZSBhY3RpdmVseSBkcml2ZW4gYnkgdGhlCitidDg0OCBjaGlwLiAgQW5vdGhlciBvbmUgaXMgdGhlIGRhdGEgcmVnaXN0ZXIgKEJUODQ4X0dQSU9fREFUQSksIHdoZXJlCit5b3UgY2FuIGdldC9zZXQgdGhlIHN0YXR1cyBpZiB0aGVzZSBwaW5zLiAgVGhleSBjYW4gYmUgdXNlZCBmb3IgaW5wdXQKK2FuZCBvdXRwdXQuCisKK01vc3QgZ3JhYmJlciBib2FyZCB2ZW5kb3JzIHVzZSB0aGVzZSBwaW5zIHRvIGNvbnRyb2wgYW4gZXh0ZXJuYWwgY2hpcAord2hpY2ggZG9lcyB0aGUgc291bmQgcm91dGluZy4gIEJ1dCBldmVyeSBib2FyZCBpcyBhIGxpdHRsZSBkaWZmZXJlbnQuCitUaGVzZSBwaW5zIGFyZSBhbHNvIHVzZWQgYnkgc29tZSBjb21wYW5pZXMgdG8gZHJpdmUgcmVtb3RlIGNvbnRyb2wKK3JlY2VpdmVyIGNoaXBzLiAgU29tZSBib2FyZHMgdXNlIHRoZSBpMmMgYnVzIGluc3RlYWQgb2YgdGhlIGdwaW8gcGlucwordG8gY29ubmVjdCB0aGUgbXV4IGNoaXAuCisKK0FzIG1lbnRpb25lZCBhYm92ZSwgdGhlcmUgaXMgYSBhcnJheSB3aGljaCBob2xkcyB0aGUgcmVxdWlyZWQKK2luZm9ybWF0aW9ucyBmb3IgZWFjaCBrbm93biBib2FyZC4gIFlvdSBiYXNpY2FsbHkgaGF2ZSB0byBjcmVhdGUgYSBuZXcKK2xpbmUgZm9yIHlvdXIgYm9hcmQuICBUaGUgaW1wb3J0YW50IGZpZWxkcyBhcmUgdGhlc2UgdHdvOgorCitzdHJ1Y3QgdHZjYXJkCit7CisJWyAuLi4gXQorICAgICAgICB1MzIgZ3Bpb21hc2s7CisgICAgICAgIHUzMiBhdWRpb211eFs2XTsgLyogVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwsIG11dGUsIHN0ZXJlbyAqLworfTsKKworZ3Bpb21hc2sgc3BlY2lmaWVzIHdoaWNoIHBpbnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgYXVkaW8gbXV4IGNoaXAuCitUaGUgY29ycmVzcG9uZGluZyBiaXRzIGluIHRoZSBvdXRwdXQgZW5hYmxlIHJlZ2lzdGVyCisoQlQ4NDhfR1BJT19PVVRfRU4pIHdpbGwgYmUgc2V0IGFzIHRoZXNlIHBpbnMgbXVzdCBiZSBkcml2ZW4gYnkgdGhlCitidDg0OCBjaGlwLgorCitUaGUgYXVkaW9tdXhbXSBhcnJheSBob2xkcyB0aGUgZGF0YSB2YWx1ZXMgZm9yIHRoZSBkaWZmZXJlbnQgaW5wdXRzCisoaS5lLiB3aGljaCBwaW5zIG11c3QgYmUgaGlnaC9sb3cgZm9yIHR1bmVyL211dGUvLi4uKS4gIFRoaXMgd2lsbCBiZQord3JpdHRlbiB0byB0aGUgZGF0YSByZWdpc3RlciAoQlQ4NDhfR1BJT19EQVRBKSB0byBzd2l0Y2ggdGhlIGF1ZGlvCittdXguCisKKworV2hhdCB5b3UgaGF2ZSB0byBkbyBpcyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHZhbHVlcyBmb3IgZ3Bpb21hc2sgYW5kCit0aGUgYXVkaW9tdXggYXJyYXkuICBJZiB5b3UgaGF2ZSBXaW5kb3dzIGFuZCB0aGUgZHJpdmVycyBmb3VyIHlvdXIKK2NhcmQgaW5zdGFsbGVkLCB5b3UgbWlnaHQgdG8gY2hlY2sgb3V0IGlmIHlvdSBjYW4gcmVhZCB0aGVzZSByZWdpc3RlcnMKK3ZhbHVlcyB1c2VkIGJ5IHRoZSB3aW5kb3dzIGRyaXZlci4gIEEgdG9vbCB0byBkbyB0aGlzIGlzIGF2YWlsYWJsZQorZnJvbSBmdHA6Ly90ZWxlcHJlc2VuY2UuZG1lbS5zdHJhdGguYWMudWsvcHViL2J0ODQ4L3dpbnV0aWwsIGJ1dCBpdAorZG9lcydudCB3b3JrIHdpdGggYnQ4NzggYm9hcmRzIGFjY29yZGluZyB0byBzb21lIHJlcG9ydHMgSSByZWNlaXZlZC4KK0Fub3RoZXIgb25lIHdpdGggYnQ4Nzggc3Vwb3J0IGlzIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vYnR3aW5jYXAuc291cmNlZm9yZ2UubmV0L0ZpbGVzL2J0c3B5Mi4wMC56aXAKKworWW91IG1pZ2h0IGFsc28gZGlnIGFyb3VuZCBpbiB0aGUgKi5pbmkgZmlsZXMgb2YgdGhlIFdpbmRvd3MgYXBwbGljYXRpb25zLgorWW91IGNhbiBoYXZlIGEgbG9vayBhdCB0aGUgYm9hcmQgdG8gc2VlIHdoaWNoIG9mIHRoZSBncGlvIHBpbnMgYXJlCitjb25uZWN0ZWQgYXQgYWxsIGFuZCB0aGVuIHN0YXJ0IHRyaWFsLWFuZC1lcnJvciAuLi4KKworCitTdGFydGluZyB3aXRoIHJlbGVhc2UgMC43LjQxIGJ0dHYgaGFzIGEgbnVtYmVyIG9mIGluc21vZCBvcHRpb25zIHRvCittYWtlIHRoZSBncGlvIGRlYnVnZ2luZyBlYXNpZXI6CisKK2J0dHZfZ3Bpbz0wLzEJCWVuYWJsZS9kaXNhYmxlIGdwaW8gZGVidWcgbWVzc2FnZXMKK2dwaW9tYXNrPW4JCXNldCB0aGUgZ3Bpb21hc2sgdmFsdWUKK2F1ZGlvbXV4PWksaiwuLi4Jc2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGF1ZGlvbXV4IGFycmF5CithdWRpb2FsbD1hCQlzZXQgdGhlIHZhbHVlcyBvZiB0aGUgYXVkaW9tdXggYXJyYXkgKG9uZQorCQkJdmFsdWUgZm9yIGFsbCBhcnJheSBlbGVtZW50cywgdXNlZnVsIHRvIGNoZWNrCisJCQlvdXQgd2hpY2ggZWZmZWN0IHRoZSBwYXJ0aWN1bGFyIHZhbHVlIGhhcykuCisKK1RoZSBtZXNzYWdlcyBwcmludGVkIHdpdGggYnR0dl9ncGlvPTEgbG9vayBsaWtlIHRoaXM6CisKKwlidHR2MDogZ3BpbzogZW49MDAwMDAwMjcsIG91dD0wMDAwMDAyNCBpbj0wMGZmZmZkOCBbYXVkaW86IG9mZl0KKworZW4gID0Jb3V0cHV0IF9lbl9hYmxlIHJlZ2lzdGVyIChCVDg0OF9HUElPX09VVF9FTikKK291dCA9CV9vdXRfcHV0IGJpdHMgb2YgdGhlIGRhdGEgcmVnaXN0ZXIgKEJUODQ4X0dQSU9fREFUQSksCisJaS5lLiBCVDg0OF9HUElPX0RBVEEgJiBCVDg0OF9HUElPX09VVF9FTgoraW4gID0gCV9pbl9wdXQgYml0cyBvZiB0aGUgZGF0YSByZWdpc3RlciwKKwlpLmUuIEJUODQ4X0dQSU9fREFUQSAmIH5CVDg0OF9HUElPX09VVF9FTgorCisKKworT3RoZXIgZWxlbWVudHMgb2YgdGhlIHR2Y2FyZHMgYXJyYXkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBhcmUgdHJ5aW5nIHRvIG1ha2UgYSBuZXcgY2FyZCB3b3JrIHlvdSBtaWdodCBmaW5kIGl0IHVzZWZ1bCB0bwora25vdyB3aGF0IHRoZSBvdGhlciBlbGVtZW50cyBpbiB0aGUgdHZjYXJkcyBhcnJheSBhcmUgZ29vZCBmb3I6CisKK3ZpZGVvX2lucHV0cyAgICAtICMgb2YgdmlkZW8gaW5wdXRzIHRoZSBjYXJkIGhhcworYXVkaW9faW5wdXRzICAgIC0gaGlzdG9yaWNhbCBjcnVmdCwgbm90IHVzZWQgYW55IG1vcmUuCit0dW5lciAgICAgICAgICAgLSB3aGljaCBpbnB1dCBpcyB0aGUgdHVuZXIKK3N2aHMgICAgICAgICAgICAtIHdoaWNoIGlucHV0IGlzIHN2aHMgKGFsbCBvdGhlcnMgYXJlIGxhYmVsZWQgY29tcG9zaXRlKQorbXV4c2VsICAgICAgICAgIC0gdmlkZW8gbXV4LCBpbnB1dC0+cmVnaXN0ZXJ2YWx1ZSBtYXBwaW5nCitwbGwgICAgICAgICAgICAgLSBzYW1lIGFzIHBsbD0gaW5zbW9kIG9wdGlvbgordHVuZXJfdHlwZSAgICAgIC0gc2FtZSBhcyB0dW5lcj0gaW5zbW9kIG9wdGlvbgorKl9tb2R1bGVuYW1lICAgIC0gaGludCB3aGVuZXZlciBzb21lIGNhcmQgbmVlZHMgdGhpcyBvciB0aGF0IGF1ZGlvCisgICAgICAgICAgICAgICAgICBtb2R1bGUgbG9hZGVkIHRvIHdvcmsgcHJvcGVybHkuCitoYXNfcmFkaW8JLSB3aGVuZXZlciB0aGlzIFRWIGNhcmQgaGFzIGEgcmFkaW8gdHVuZXIuCitub19tc3AzNHh4CS0gIjEiIGRpc2FibGVzIGxvYWRpbmcgb2YgbXNwMzQwMC5vIG1vZHVsZQorbm9fdGRhOTg3NQktICIxIiBkaXNhYmxlcyBsb2FkaW5nIG9mIHRkYTk4NzUubyBtb2R1bGUgCituZWVkc190dmF1ZGlvCS0gc2V0IHRvICIxIiB0byBsb2FkIHR2YXVkaW8ubyBtb2R1bGUgCisKK0lmIHNvbWUgY29uZmlnIGl0ZW0gaXMgc3BlY2lmaWVkIGJvdGggZnJvbSB0aGUgdHZjYXJkcyBhcnJheSBhbmQgYXMKK2luc21vZCBvcHRpb24sIHRoZSBpbnNtb2Qgb3B0aW9uIHRha2VzIHByZWNlZGVuY2UuCisKKworCitHb29kIGx1Y2ssCisKKyAgR2VyZAorCisKK1BTOiBJZiB5b3UgaGF2ZSBhIG5ldyB3b3JraW5nIGVudHJ5LCBtYWlsIGl0IHRvIG1lLgorCistLSAKK0dlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9TcGVjcyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9TcGVjcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI5ZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NwZWNzCkBAIC0wLDAgKzEsMyBAQAorUGhpbGlwcwkJaHR0cDovL3d3dy5TZW1pY29uZHVjdG9ycy5DT00vcGlwLworQ29uZXhhbnQJaHR0cDovL3d3dy5jb25leGFudC5jb20vdGVjaGluZm8vZGVmYXVsdC5hc3AKK01pY3JvbmFzCWh0dHA6Ly93d3cubWljcm9uYXMuZGUvcGFnZXMvcHJvZHVjdF9kb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9USEFOS1MgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVEhBTktTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODUzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVEhBTktTCkBAIC0wLDAgKzEsMjQgQEAKK01hbnkgdGhhbmtzIHRvOgorCistIE1hcmt1cyBTY2hyb2VkZXIgPHNjaHJvZWRtQHVuaS1kdWVzc2VsZG9yZi5kZT4gZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBCdDg0OCAKKyAgYW5kIHR1bmVyIHByb2dyYW1taW5nIGFuZCBoaXMgY29udHJvbCBwcm9ncmFtIHh0dmMuCisKKy0gTWFydGluIEJ1Y2sgPG1hcnRpbi0yLmJ1Y2tAc3R1ZGVudC51bmktdWxtLmRlPiBmb3IgaGlzIGdyZWF0IFZpZGVvdGV4dAorICBwYWNrYWdlLgorCistIEdlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+IGZvciB0aGUgTVNQMzQwMCBzdXBwb3J0IGFuZCB0aGUgbW9kdWxhcgorICBJMkMsIHR1bmVyLCAuLi4gc3VwcG9ydC4KKworCistIE1BVFJJWCBWaXNpb24gZm9yIGdpdmluZyB1cyAyIGNhcmRzIGZvciBmcmVlLCB3aGljaCBtYWRlIHN1cHBvcnQgb2YKKyAgc2luZ2xlIGNyeXN0YWwgb3BlcmF0aW9uIHBvc3NpYmxlLgorCistIE1JUk8gZm9yIHByb3ZpZGluZyBhIGZyZWUgUENUViBjYXJkIGFuZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgY29tcG9uZW50cyBvbiB0aGVpciBjYXJkcy4gKEUuZy4gaG93IHRoZSB0dW5lciB0eXBlIGlzIGRldGVjdGVkKQorICBXaXRob3V0IHRoZWlyIGNhcmQgSSBjb3VsZCBub3QgaGF2ZSBkZWJ1Z2dlZCB0aGUgTlRTQyBtb2RlLgorCQorLSBIYXVwcGF1Z2UgZm9yIHRlbGxpbmcgaG93IHRoZSBzb3VuZCBpbnB1dCBpcyBzZWxlY3RlZCBhbmQgd2hhdCBjb21wb25lbnRzCisgIHRoZXkgZG8gYW5kIHdpbGwgdXNlIG9uIHRoZWlyIHJhZGlvIGNhcmRzLgorICBBbHNvIG1hbnkgdGhhbmtzIGZvciBmYXhpbmcgbWUgdGhlIEZNMTIxNiBkYXRhIHNoZWV0LgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9UdW5lcnMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVHVuZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOGZiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVHVuZXJzCkBAIC0wLDAgKzEsMTE1IEBACisxKSBUdW5lciBQcm9ncmFtbWluZworPT09PT09PT09PT09PT09PT09PT0KK1RoZXJlIGFyZSBzb21lIGZsYXZvcnMgb2YgVHVuZXIgcHJvZ3JhbW1pbmcgQVBJcy4KK1RoZXNlIGRpZmZlciBtYWlubHkgYnkgdGhlIGJhbmRzd2l0Y2ggYnl0ZS4KKworICAgIEw9IExHX0FQSSAgICAgICAoVkhGX0xPPTB4MDEsIFZIRl9IST0weDAyLCBVSEY9MHgwOCwgcmFkaW89MHgwNCkKKyAgICBQPSBQSElMSVBTX0FQSSAgKFZIRl9MTz0weEEwLCBWSEZfSEk9MHg5MCwgVUhGPTB4MzAsIHJhZGlvPTB4MDQpCisgICAgVD0gVEVNSUNfQVBJICAgIChWSEZfTE89MHgwMiwgVkhGX0hJPTB4MDQsIFVIRj0weDAxKQorICAgIEE9IEFMUFNfQVBJICAgICAoVkhGX0xPPTB4MTQsIFZIRl9IST0weDEyLCBVSEY9MHgxMSkKKyAgICBNPSBQSElMSVBTX01LMyAgKFZIRl9MTz0weDAxLCBWSEZfSEk9MHgwMiwgVUhGPTB4MDQsIHJhZGlvPTB4MTkpCisKKzIpIFR1bmVyIE1hbnVmYWN0dXJlcnMKKz09PT09PT09PT09PT09PT09PT09PT0KKworU0FNU1VORyBUdW5lciBpZGVudGlmaWNhdGlvbjogKGUuZy4gVENQTTkwOTFQRDI3KQorICBUQ1AgW0FCQ0pMTU5RXSA5MFs4OV1bMTI1XSBbRFBdIFtBQ0RdIDI3IFtBQkNEXQorIFtBQkNKTE1OUV06CisgICBBPSBCRytESworICAgQj0gQkcKKyAgIEM9IEkrREsKKyAgIEo9IE5UU0MtSmFwYW4KKyAgIEw9IFNlY2FtIExMCisgICBNPSBCRytJK0RLCisgICBOPSBOVFNDIAorICAgUT0gQkcrSStESytMTAorIFs4OV06ID8KKyBbMTI1XToKKyAgIDI6IE5vIEZNCisgICA1OiBXaXRoIEZNCisgW0RQXToKKyAgIEQ9IE5UU0MKKyAgIFA9IFBBTAorIFtBQ0RdOgorICAgQT0gRi1jb25uZWN0b3IKKyAgIEM9IFBob25vIGNvbm5lY3RvcgorICAgRD0gRGluIEphY2sKKyBbQUJDRF06CisgICAzLXdpcmUvSTJDIHR1bmluZywgMi1iYW5kLzMtYmFuZAorCisgVGhlc2UgVHVuZXJzIGFyZSBQSElMSVBTX0FQSSBjb21wYXRpYmxlLgorCitQaGlsaXBzIFR1bmVyIGlkZW50aWZpY2F0aW9uOiAoZS5nLiBGTTEyMTZNRikKKyAgRltJUk1RXTEyWzEzNDVdNntNRnxNRXxNUH0KKyAgRltJUk1RXToKKyAgIEZJMTJ4NjogVHVuZXIgU2VyaWVzCisgICBGUjEyeDY6IFR1bmVyICsgUmFkaW8gSUYKKyAgIEZNMTJ4NjogVHVuZXIgKyBGTQorICAgRlExMng2OiBzcGVjaWFsCisgICBGTVIxMng2OiBzcGVjaWFsCisgICBURDE1eHg6IERpZ2l0YWwgVHVuZXIgQVRTQworICAxMlsxMzQ1XTY6CisgICAxMjE2OiBQQUwgQkcKKyAgIDEyMzY6IE5UU0MKKyAgIDEyNDY6IFBBTCBJCisgICAxMjU2OiBQYWwgREsKKyAge01GfE1FfE1QfQorICAgTUY6IEJHIExMIHcvIFNlY2FtIChNdWx0aSBGcmFuY2UpCisgICBNRTogQkcgREsgSSBMTCAgIChNdWx0aSBFdXJvcGUpCisgICBNUDogQkcgREsgSSAgICAgIChNdWx0aSBQQUwpCisgICBNUjogQkcgREsgTSAoPykKKyAgIE1HOiBCRyBES0kgTSAoPykKKyAgTUsyIHNlcmllcyBQSElMSVBTX0FQSSwgbW9zdCB0dW5lcnMgYXJlIGNvbXBhdGlibGUgdG8gdGhpcyBvbmUgIQorICBNSzMgc2VyaWVzIGludHJvZHVjZWQgaW4gMjAwMiB3LyBQSElMSVBTX01LM19BUEkKKworVGVtaWMgVHVuZXIgaWRlbnRpZmljYXRpb246ICguZS5nIDQwMDZGSDUpCisgICA0WzAxXVswMTM2XVsyNjldRltIWU5SXTUKKyAgICA0MHgyOiBUdW5lciAoNVYvMzNWKSwgVEVNSUNfQVBJLgorICAgIDQweDY6IFR1bmVyIDVWCisgICAgNDF4eDogVHVuZXIgY29tcGFjdAorICAgIDQweDk6IFR1bmVyK0ZNIGNvbXBhY3QKKyAgIFswMTM2XQorICAgIHh4MHg6IFBBTCBCRworICAgIHh4MXg6IFBhbCBESywgU2VjYW0gTEwKKyAgICB4eDN4OiBOVFNDCisgICAgeHg2eDogUEFMIEkKKyAgIEZbSFlOUl01CisgICAgRkg1OiBQYWwgQkcKKyAgICBGWTU6IG90aGVycworICAgIEZONTogbXVsdGlzdGFuZGFyZAorICAgIEZSNTogdy8gRk0gcmFkaW8KKyAgIDNYIHh4eHg6IG9yZGVyIG51bWJlciB3aXRoIHNwZWNpZmljIGNvbm5lY3RvcgorICBOb3RlOiBPbmx5IDQweDIgc2VyaWVzIGhhcyBURU1JQ19BUEksIGFsbCBuZXdlciB0dW5lcnMgaGF2ZSBQSElMSVBTX0FQSS4KKworTEcgSW5ub3RlayBUdW5lcjoKKyAgVFBJOE5TUjExIDogTlRTQyBKL00gICAgKFRQSThOU1IwMSB3L0ZNKSAgKFAsMjEwLzQ5NykKKyAgVFBJOFBTQjExIDogUEFMIEIvRyAgICAgKFRQSThQU0IwMSB3L0ZNKSAgKFAsMTcwLzQ1MCkKKyAgVEFQQy1JNzAxIDogUEFMIEkgICAgICAgKFRBUEMtSTAwMSB3L0ZNKSAgKFAsMTcwLzQ1MCkKKyAgVFBJOFBTQjEyIDogUEFMIEQvSytCL0cgKFRQSThQU0IwMiB3L0ZNKSAgKFAsMTcwLzQ1MCkKKyAgVEFQQy1INzAxUDogTlRTQ19KUCAgICAgKFRBUEMtSDAwMVAgdy9GTSkgKEwsMTcwLzQ1MCkKKyAgVEFQQy1HNzAxUDogUEFMIEIvRyAgICAgKFRBUEMtRzAwMVAgdy9GTSkgKEwsMTcwLzQ1MCkKKyAgVEFQQy1XNzAxUDogUEFMIEkgICAgICAgKFRBUEMtVzAwMVAgdy9GTSkgKEwsMTcwLzQ1MCkKKyAgVEFQQy1RNzAzUDogUEFMIEQvSyAgICAgKFRBUEMtUTAwMVAgdy9GTSkgKEwsMTcwLzQ1MCkKKyAgVEFQQy1RNzA0UDogUEFMIEQvSytJICAgKEwsMTcwLzQ1MCkKKyAgVEFQQy1HNzAyUDogUEFMIEQvSytCL0cgKEwsMTcwLzQ1MCkKKworICBUQURDLUgwMDJGOiBOVFNDIChMLDE3NS80MTA/OyAyLUIsIEMtVysxMSwgVysxMi02OSkKKyAgVEFEQy1NMjAxRDogUEFMIEQvSytCL0crSSAoTCwxNDMvNDI1KSAgKHNvdW5kIGNvbnRyb2wgYXQgSTJDIGFkZHJlc3MgMHhjOCkKKyAgVEFEQy1UMDAzRjogTlRTQyBUYWl3YW4gIChMLDE3NS80MTA/OyAyLUIsIEMtVysxMSwgVysxMi02OSkKKyAgU3VmZml4OiAKKyAgICBQPSBTdGFuZGFyZCBwaG9ubyBmZW1hbGUgc29ja2V0CisgICAgRD0gSUVDIGZlbWFsZSBzb2NrZXQKKyAgICBGPSBGLWNvbm5lY3RvcgorCitPdGhlciBUdW5lcnM6CitUQ0wyMDAyTUItMSA6IFBBTCBCRyArIERLICAgICAgID1UVU5FUl9MR19QQUxfTkVXX1RBUEMKK1RDTDIwMDJNQi0xRjogUEFMIEJHICsgREsgdy9GTSAgPVBISUxJUFNfUEFMCitUQ0wyMDAyTUktMiA6IFBBTCBJCQk9ID8/CisKK0FMUFMgVHVuZXJzOgorICAgTW9zdCBhcmUgTEdfQVBJIGNvbXBhdGlibGUKKyAgIFRTQ0g2IGhhcyBBTFBTX0FQSSAoVFNDSDUgPykKKyAgIFRTQkUxIGhhcyBleHRyYSBBUEkgMDUsMDIsMDggQ29udHJvbF9ieXRlPTB4Q0IgU291cmNlOigxKQorCitMaXQuCisoMSkgY29uZXhhbnQxMDAwMjliLVBDSS1EZWNvZGVyLUFwcGxpY2F0aW9uTm90ZS5wZGYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzdkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0CkBAIC0wLDAgKzEsMTMwIEBACitWYWlvIFBpY3R1cmVib29rIE1vdGlvbiBFeWUgQ2FtZXJhIERyaXZlciBSZWFkbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUNvcHlyaWdodCAoQykgMjAwMS0yMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CisJQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgQWxj9HZlIDx3d3cuYWxjb3ZlLmNvbT4KKwlDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmV3IFRyaWRnZWxsIDx0cmlkZ2VAc2FtYmEub3JnPgorCitUaGlzIGRyaXZlciBlbmFibGUgdGhlIHVzZSBvZiB2aWRlbzRsaW51eCBjb21wYXRpYmxlIGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorTW90aW9uIEV5ZSBjYW1lcmEuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoZSAiU29ueSBWYWlvIFByb2dyYW1tYWJsZSBJL08KK0NvbnRyb2wgRGV2aWNlIiBkcml2ZXIgKHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgIkNoYXJhY3RlciBkcml2ZXJzIgorc2VjdGlvbiBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSkgdG8gYmUgY29tcGlsZWQgYW5kIGluc3RhbGxlZAorKHVzaW5nIGl0cyAiY2FtZXJhPTEiIHBhcmFtZXRlcikuCisKK0l0IGNhbiBkbyBhdCBtYXhpbXVtIDMwIGZwcyBAIDMyMHgyNDAgb3IgMTUgZnBzIEAgNjQweDQ4MC4KKworR3JhYmJpbmcgaXMgc3VwcG9ydGVkIGluIHBhY2tlZCBZVVYgY29sb3JzcGFjZSBvbmx5LgorCitNSlBFRyBoYXJkd2FyZSBncmFiYmluZyBpcyBzdXBwb3J0ZWQgdmlhIGEgcHJpdmF0ZSBBUEkgKHNlZSBiZWxvdykuCisKK0hhcmR3YXJlIHN1cHBvcnRlZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlICdzZWNvbmQnIHZlcnNpb24gb2YgdGhlIE1vdGlvbkV5ZSBjYW1lcmEgOikKKworVGhlIGZpcnN0IHZlcnNpb24gd2FzIGNvbm5lY3RlZCBkaXJlY3RseSBvbiB0aGUgdmlkZW8gYnVzIG9mIHRoZSBOZW9tYWdpYwordmlkZW8gY2FyZCBhbmQgaXMgdW5zdXBwb3J0ZWQuCisKK1RoZSBzZWNvbmQgb25lLCBtYWRlIGJ5IEthd2FzYWtpIFN0ZWVsIGlzIGZ1bGx5IHN1cHBvcnRlZCBieSB0aGlzCitkcml2ZXIgKFBDSSB2ZW5kb3IvZGV2aWNlIGlzIDB4MTM2Yi8weGZmMDEpCisKK1RoZSB0aGlyZCBvbmUsIHByZXNlbnQgaW4gcmVjZW50IChtb3JlIG9yIGxlc3MgbGFzdCB5ZWFyKSBQaWN0dXJlYm9va3MKKyhDMU0qIG1vZGVscyksIGlzIG5vdCBzdXBwb3J0ZWQuIFRoZSBtYW51ZmFjdHVyZXIgaGFzIGdpdmVuIHRoZSBzcGVjcwordG8gdGhlIGRldmVsb3BlcnMgdW5kZXIgYSBOREEgKHdoaWNoIGFsbG93cyB0aGUgZGV2ZWxvbWVudCBvZiBhIEdQTAorZHJpdmVyIGhvd2V2ZXIpLCBidXQgdGhpbmdzIGFyZSBub3QgbW92aW5nIHZlcnkgZmFzdCAoc2VlCitodHRwOi8vci1lbmdpbmUuc291cmNlZm9yZ2UubmV0LykgKFBDSSB2ZW5kb3IvZGV2aWNlIGlzIDB4MTBjZi8weDIwMTEpLgorCitUaGVyZSBpcyBhIGZvcnRoIG1vZGVsIGNvbm5lY3RlZCBvbiB0aGUgVVNCIGJ1cyBpbiBUUjEqIFZhaW8gbGFwdG9wcy4KK1RoaXMgY2FtZXJhIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIGJ5IHRoZSBjdXJyZW50IGRyaXZlciwgaW4gZmFjdAorbGl0dGxlIGluZm9ybWF0aW9uIGlmIGFueSBpcyBhdmFpbGFibGUgZm9yIHRoaXMgY2FtZXJhCisoVVNCIHZlbmRvci9kZXZpY2UgaXMgMHgwNTRjLzB4MDEwNykuCisKK0RyaXZlciBvcHRpb25zOgorLS0tLS0tLS0tLS0tLS0tCisKK1NldmVyYWwgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBtZXllIGRyaXZlciB1c2luZyB0aGUgc3RhbmRhcmQKK21vZHVsZSBhcmd1bWVudCBzeW50YXggKDxwYXJhbT49PHZhbHVlPiB3aGVuIHBhc3NpbmcgdGhlIG9wdGlvbiB0byB0aGUKK21vZHVsZSBvciBtZXllLjxwYXJhbT49PHZhbHVlPiBvbiB0aGUga2VybmVsIGJvb3QgbGluZSB3aGVuIG1leWUgaXMKK3N0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGtlcm5lbCkuIFRob3NlIG9wdGlvbnMgYXJlOgorCisJZm9yY2V2NGwxOglmb3JjZSB1c2Ugb2YgVjRMMSBBUEkgaW5zdGVhZCBvZiBWNEwyCisKKwlnYnVmZmVyczoJbnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycywgZGVmYXVsdCBpcyAyICgzMiBtYXgpCisKKwlnYnVmc2l6ZToJc2l6ZSBvZiBlYWNoIGNhcHR1cmUgYnVmZmVyLCBkZWZhdWx0IGlzIDYxNDQwMAorCisJdmlkZW9fbnI6CXZpZGVvIGRldmljZSB0byByZWdpc3RlciAoMCA9IC9kZXYvdmlkZW8wLCBldGMpCisKK01vZHVsZSB1c2U6CistLS0tLS0tLS0tLQorCitJbiBvcmRlciB0byBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIG1leWUgbW9kdWxlIG9uIHVzZSwgeW91IGNhbiBwdXQgdGhvc2UgbGluZXMKK2luIHlvdXIgL2V0Yy9tb2Rwcm9iZS5jb25mIGZpbGU6CisKKwlhbGlhcyBjaGFyLW1ham9yLTgxIHZpZGVvZGV2CisJYWxpYXMgY2hhci1tYWpvci04MS0wIG1leWUKKwlvcHRpb25zIG1leWUgZ2J1ZmZlcnM9MzIKKworVXNhZ2U6CistLS0tLS0KKworCXhhd3R2ID49IDMuNDkgKDxodHRwOi8vYnl0ZXNleC5vcmcveGF3dHYvPikKKwkJZm9yIGRpc3BsYXkgYW5kIHVuY29tcHJlc3NlZCB2aWRlbyBjYXB0dXJlOgorCisJCQl4YXd0diAtYyAvZGV2L3ZpZGVvMCAtZ2VvbWV0cnkgNjQweDQ4MAorCQkJCW9yCisJCQl4YXd0diAtYyAvZGV2L3ZpZGVvMCAtZ2VvbWV0cnkgMzIweDI0MAorCisJbW90aW9uZXllICg8aHR0cDovL3BvcGllcy5uZXQvbWV5ZS8+KQorCQlmb3IgZ2V0dGluZyBwcG0gb3IganBnIHNuYXBzaG90cywgbWpwZWcgdmlkZW8KKworUHJpdmF0ZSBBUEk6CistLS0tLS0tLS0tLS0KKworCVRoZSBkcml2ZXIgc3VwcG9ydHMgZnJhbWUgZ3JhYmJpbmcgd2l0aCB0aGUgdmlkZW80bGludXggQVBJCisJKGVpdGhlciB2NGwxIG9yIHY0bDIpLCBzbyBhbGwgdmlkZW80bGludXggdG9vbHMgKGxpa2UgeGF3dHYpCisJc2hvdWxkIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KKworCUJlc2lkZXMgdGhlIHZpZGVvNGxpbnV4IGludGVyZmFjZSwgdGhlIGRyaXZlciBoYXMgYSBwcml2YXRlIGludGVyZmFjZQorCWZvciBhY2Nlc3NpbmcgdGhlIE1vdGlvbiBFeWUgZXh0ZW5kZWQgcGFyYW1ldGVycyAoY2FtZXJhIHNoYXJwbmVzcywKKwlhZ2MsIHZpZGVvIGZyYW1lcmF0ZSksIHRoZSBzaGFwc2hvdCBhbmQgdGhlIE1KUEVHIGNhcHR1cmUgZmFjaWxpdGllcy4KKworCVRoaXMgaW50ZXJmYWNlIGNvbnNpc3RzIG9mIHNldmVyYWwgaW9jdGxzIChwcm90b3R5cGVzIGFuZCBzdHJ1Y3R1cmVzCisJY2FuIGJlIGZvdW5kIGluIGluY2x1ZGUvbGludXgvbWV5ZS5oKToKKworCU1FWUVJT0NfR19QQVJBTVMKKwlNRVlFSU9DX1NfUEFSQU1TCisJCUdldCBhbmQgc2V0IHRoZSBleHRlbmRlZCBwYXJhbWV0ZXJzIG9mIHRoZSBtb3Rpb24gZXllIGNhbWVyYS4KKwkJVGhlIHVzZXIgc2hvdWxkIGFsd2F5cyBxdWVyeSB0aGUgY3VycmVudCBwYXJhbWV0ZXJzIHdpdGgKKwkJTUVZRUlPQ19HX1BBUkFNUywgY2hhbmdlIHdoYXQgaGUgbGlrZXMgYW5kIHRoZW4gaXNzdWUgdGhlCisJCU1FWUVJT0NfU19QQVJBTVMgY2FsbCAoY2hlY2tpbmcgZm9yIC1FSU5WQUwpLiBUaGUgZXh0ZW5kZWQKKwkJcGFyYW1ldGVycyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBtZXllX3BhcmFtcyBzdHJ1Y3R1cmUuCisKKworCU1FWUVJT0NfUUJVRl9DQVBUCisJCVF1ZXVlIGEgYnVmZmVyIGZvciBjYXB0dXJlICh0aGUgYnVmZmVycyBtdXN0IGhhdmUgYmVlbgorCQlvYnRhaW5lZCB3aXRoIGEgVklESU9DR01CVUYgY2FsbCBhbmQgbW1hcCdlZCBieSB0aGUKKwkJYXBwbGljYXRpb24pLiBUaGUgYXJndW1lbnQgdG8gTUVZRUlPQ19RQlVGX0NBUFQgaXMgdGhlCisJCWJ1ZmZlciBudW1iZXIgdG8gcXVldWUgKG9yIC0xIHRvIGVuZCBjYXB0dXJlKS4gVGhlIGZpcnN0CisJCWNhbGwgdG8gTUVZRUlPQ19RQlVGX0NBUFQgc3RhcnRzIHRoZSBzdHJlYW1pbmcgY2FwdHVyZS4KKworCU1FWUVJT0NfU1lOQworCQlUYWtlcyBhcyBhbiBhcmd1bWVudCB0aGUgYnVmZmVyIG51bWJlciB5b3Ugd2FudCB0byBzeW5jLgorCQlUaGlzIGlvY3RsIGJsb2NrcyB1bnRpbCB0aGUgYnVmZmVyIGlzIGZpbGxlZCBhbmQgcmVhZHkKKwkJZm9yIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UuIEl0IHJldHVybnMgdGhlIGJ1ZmZlciBzaXplLgorCisJTUVZRUlPQ19TVElMTENBUFQKKwlNRVlFSU9DX1NUSUxMSkNBUFQKKwkJVGFrZXMgYSBzbmFwc2hvdCBpbiBhbiB1bmNvbXByZXNzZWQgb3IgY29tcHJlc3NlZCBqcGVnIGZvcm1hdC4KKwkJVGhpcyBpb2N0bCBibG9ja3MgdW50aWwgdGhlIHNuYXBzaG90IGlzIGRvbmUgYW5kIHJldHVybnMgKGZvcgorCQlqcGVnIHNuYXBzaG90KSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuIFRoZSBpbWFnZSBkYXRhIGlzCisJCWF2YWlsYWJsZSBmcm9tIHRoZSBmaXJzdCBtbWFwJ2VkIGJ1ZmZlci4KKworCUxvb2sgYXQgdGhlICdtb3Rpb25leWUnIGFwcGxpY2F0aW9uIGNvZGUgZm9yIGFuIGFjdHVhbCBleGFtcGxlLgorCitCdWdzIC8gVG9kbzoKKy0tLS0tLS0tLS0tLQorCisJLSB0aGUgZHJpdmVyIGNvdWxkIGJlIG11Y2ggY2xlYW5lZCB1cCBieSByZW1vdmluZyB0aGUgdjRsMSBzdXBwb3J0LgorCSAgSG93ZXZlciwgdGhpcyBtZWFucyBhbGwgdjRsMS1vbmx5IGFwcGxpY2F0aW9ucyB3aWxsIHN0b3Agd29ya2luZy4KKworCS0gJ21vdGlvbmV5ZScgc3RpbGwgdXNlcyB0aGUgbWV5ZSBwcml2YXRlIHY0bDEgQVBJIGV4dGVuc2lvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3JhZGlvdHJhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9yYWRpb3RyYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjc1MzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9yYWRpb3RyYWNrLnR4dApAQCAtMCwwICsxLDE0NyBAQAorTk9URVMgT04gUkFESU9UUkFDSyBDQVJEIENPTlRST0wKK2J5IFN0ZXBoZW4gTS4gQmVub2l0IChiZW5vaXRzQHNlcnZpY2Vwcm8uY29tKSAgRGVjIDE0LCAxOTk2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RvY3VtZW50IHZlcnNpb24gMS4wCisKK0FDS05PV0xFREdNRU5UUworLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBkb2N1bWVudCB3YXMgbWFkZSBiYXNlZCBvbiAnQycgY29kZSBmb3IgTGludXggZnJvbSBHaWRlb24gbGUgR3JhbmdlCisobGVncmFuZ0BhY3RpdmUuY28uemEgb3IgbGVncmFuZ0Bjcy5zdW4uYWMuemEpIGluIDE5OTQsIGFuZCBlbGFib3JhdGlvbnMgZnJvbQorRnJhbnMgQnJpbmttYW4gKGJyaW5rbWFuQGVzZC5ubCkgaW4gMTk5Ni4gIFRoZSByZXN1bHRzIHJlcG9ydGVkIGhlcmUgYXJlIGZyb20KK2V4cGVyaW1lbnRzIHRoYXQgdGhlIGF1dGhvciBwZXJmb3JtZWQgb24gaGlzIG93biBzZXR1cCwgc28geW91ciBtaWxlYWdlIG1heQordmFyeS4uLiBJIG1ha2Ugbm8gZ3VhcmFudGVlcywgY2xhaW1zIG9yIHdhcnJhbnRpZXMgdG8gdGhlIHN1aXRhYmlsaXR5IG9yCit2YWxpZGl0eSBvZiB0aGlzIGluZm9ybWF0aW9uLiAgTm8gb3RoZXIgZG9jdW1lbnRhdGlvbiBvbiB0aGUgQUlNUworTGFiIChodHRwOi8vd3d3LmFpbXNsYWIuY29tLykgUmFkaW9UcmFjayBjYXJkIHdhcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUKK2F1dGhvci4gIFRoaXMgZG9jdW1lbnQgaXMgb2ZmZXJlZCBpbiB0aGUgaG9wZXMgdGhhdCBpdCBtaWdodCBoZWxwIHVzZXJzIHdobword2FudCB0byB1c2UgdGhlIFJhZGlvVHJhY2sgY2FyZCBpbiBhbiBlbnZpcm9ubWVudCBvdGhlciB0aGFuIE1TIFdpbmRvd3MuCisKK1dIWSBUSElTIERPQ1VNRU5UPworLS0tLS0tLS0tLS0tLS0tLS0tCitJIGhhdmUgYSBSYWRpb1RyYWNrIGNhcmQgZnJvbSBiYWNrIHdoZW4gSSByYW4gYW4gTVMtV2luZG93cyBwbGF0Zm9ybS4gIEFmdGVyCitjb252ZXJ0aW5nIHRvIExpbnV4LCBJIGZvdW5kIEdpZGVvbiBsZSBHcmFuZ2UncyBjb21tYW5kLWxpbmUgc29mdHdhcmUgZm9yCitydW5uaW5nIHRoZSBjYXJkLCBhbmQgZm91bmQgdGhhdCBpdCB3YXMgZ29vZCEgIEZyYW5zIEJyaW5rbWFuIG1hZGUgYQorY29tZm9ydGFibGUgWC13aW5kb3dzIGludGVyZmFjZSwgYW5kIGFkZGVkIGEgc2Nhbm5pbmcgZmVhdHVyZS4gIEZvciBoYWNrCit2YWx1ZSwgSSB3YW50ZWQgdG8gc2VlIGlmIHRoZSB0dW5lciBjb3VsZCBiZSB0dW5lZCBiZXlvbmQgdGhlIHVzdWFsIEZNIHJhZGlvCiticm9hZGNhc3QgYmFuZCwgc28gSSBjb3VsZCBwaWNrIHVwIHRoZSBhdWRpbyBjYXJyaWVycyBmcm9tIE5vcnRoIEFtZXJpY2FuCiticm9hZGNhc3QgVFYgY2hhbm5lbHMsIHNpdHVhdGVkIGp1c3QgYmVsb3cgYW5kIGFib3ZlIHRoZSA4Ny4wLTEwOS4wIE1IeiByYW5nZS4KK0kgZGlkIG5vdCBnZXQgbXVjaCBzdWNjZXNzLCBidXQgSSBsZWFybmVkIGFib3V0IHByb2dyYW1taW5nIGlvcG9ydHMgdW5kZXIKK0xpbnV4IGFuZCBnYWluZWQgc29tZSBpbnNpZ2h0cyBhYm91dCB0aGUgaGFyZHdhcmUgZGVzaWduIHVzZWQgZm9yIHRoZSBjYXJkLgorCitTbywgd2l0aG91dCBmdXJ0aGVyIGRlbGF5LCBoZXJlIGFyZSB0aGUgZGV0YWlscy4KKworCitQSFlTSUNBTCBERVNDUklQVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBSYWRpb1RyYWNrIGNhcmQgaXMgYW4gSVNBIDgtYml0IEZNIHJhZGlvIGNhcmQuICBUaGUgcmFkaW8gZnJlcXVlbmN5IChSRikKK2lucHV0IGlzIHNpbXBseSBhbiBhbnRlbm5hIGxlYWQsIGFuZCB0aGUgb3V0cHV0IGlzIGEgcG93ZXIgYXVkaW8gc2lnbmFsCithdmFpbGFibGUgdGhyb3VnaCBhIG1pbmlhdHVyZSBwaG9uZSBwbHVnLiAgSXRzIFJGIGZyZXF1ZW5jaWVzIG9mIG9wZXJhdGlvbiBhcmUKK21vcmUgb3IgbGVzcyBsaW1pdGVkIGZyb20gODcuMCB0byAxMDkuMCBNSHogKHRoZSBjb21tZXJjaWFsIEZNIGJyb2FkY2FzdAorYmFuZCkuICBBbHRob3VnaCB0aGUgcmVnaXN0ZXJzIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHJlcXVlc3QgZnJlcXVlbmNpZXMgYmV5b25kCit0aGVzZSBsaW1pdHMsIGV4cGVyaW1lbnRzIGRpZCBub3QgZ2l2ZSBwcm9taXNpbmcgcmVzdWx0cy4gIFRoZSB2YXJpYWJsZQorZnJlcXVlbmN5IG9zY2lsbGF0b3IgKFZGTykgdGhhdCBkZW1vZHVsYXRlcyB0aGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSAoSUYpCitzaWduYWwgcHJvYmFibHkgaGFzIGEgc21hbGwgcmFuZ2Ugb2YgdXNlZnVsIGZyZXF1ZW5jaWVzLCBhbmQgd3JhcHMgYXJvdW5kIG9yCitnZXRzIGNsaXBwZWQgYmV5b25kIHRoZSBsaW1pdHMgbWVudGlvbmVkIGFib3ZlLgorCisKK0NPTlRST0xMSU5HIFRIRSBDQVJEIFdJVEggSU9QT1JUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIFJhZGlvVHJhY2sgKGJhc2UpIGlvcG9ydCBpcyBjb25maWd1cmFibGUgZm9yIDB4MzBjIG9yIDB4MjBjLiAgT25seSBvbmUKK2lvcG9ydCBzZWVtcyB0byBiZSBpbnZvbHZlZC4gIFRoZSBpb3BvcnQgZGVjb2RpbmcgY2lyY3VpdHJ5IG11c3QgYmUgcHJldHR5CitzaW1wbGUsIGFzIGluZGl2aWR1YWwgaW9wb3J0IGJpdHMgYXJlIGRpcmVjdGx5IG1hdGNoZWQgdG8gc3BlY2lmaWMgZnVuY3Rpb25zCisob3IgYmxvY2tzKSBvZiB0aGUgcmFkaW8gY2FyZC4gIFRoaXMgd2F5LCBtYW55IGZ1bmN0aW9ucyBjYW4gYmUgY2hhbmdlZCBpbgorcGFyYWxsZWwgd2l0aCBvbmUgd3JpdGUgdG8gdGhlIGlvcG9ydC4gIFRoZSBvbmx5IGZlZWRiYWNrIGF2YWlsYWJsZSB0aHJvdWdoCit0aGUgaW9wb3J0cyBhcHBlYXJzIHRvIGJlIHRoZSAiU3RlcmVvIERldGVjdCIgYml0LgorCitUaGUgYml0cyBvZiB0aGUgaW9wb3J0IGFyZSBhcnJhbmdlZCBhcyBmb2xsb3dzOgorCisgIE1TYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExTYgorKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tKworfCBWb2xBIHwgVm9sQiB8ID8/Pz8gfCBTdGVyZW8gfCBSYWRpbyAgfCBUdW5lQSB8IFR1bmVCICAgfCBUdW5lICAgfAorfCAgKCspIHwgICgtKSB8ICAgICAgfCBEZXRlY3QgfCBBdWRpbyAgfCAoYml0KSB8IChsYXRjaCkgfCBVcGRhdGUgfAorfCAgICAgIHwgICAgICB8ICAgICAgfCBFbmFibGUgfCBFbmFibGUgfCAgICAgICB8ICAgICAgICAgfCBFbmFibGUgfAorKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tKworCisKK1ZvbEEgLiBWb2xCICBbQUIuLi4uLi5dCistLS0tLS0tLS0tLQorMCAwIDogYXVkaW8gbXV0ZQorMCAxIDogdm9sdW1lICsgICAgKHNvbWUgZGVsYXkgcmVxdWlyZWQpCisxIDAgOiB2b2x1bWUgLSAgICAoc29tZSBkZWxheSByZXF1aXJlZCkKKzEgMSA6IHN0YXkgYXQgcHJlc2VudCB2b2x1bWUKKworU3RlcmVvIERldGVjdCBFbmFibGUgWy4uLlMuLi4uXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAgOiBObyBEZXRlY3QKKzEgOiBEZXRlY3QKKworICBSZXN1bHRzIGF2YWlsYWJsZSBieSByZWFkaW5nIGlvcG9ydCA+NjAgbXNlYyBhZnRlciBsYXN0IHBvcnQgd3JpdGUuCisgIDB4ZmYgPT0+IG5vIHN0ZXJlbyBkZXRlY3RlZCwgIDB4ZmQgPT0+IHN0ZXJlbyBkZXRlY3RlZC4KKworUmFkaW8gdG8gQXVkaW8gKHBhdGgpIEVuYWJsZSBbLi4uLlIuLi5dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswIDogRGlzYWJsZSBwYXRoIChzaWxlbmNlKQorMSA6IEVuYWJsZSBwYXRoICAoYXVkaW8gcHJvZHVjZWQpCisKK1R1bmVBIC4gVHVuZUIgWy4uLi4uQUIuXQorLS0tLS0tLS0tLS0tLQorMCAwIDogInplcm8iIGJpdCBwaGFzZSAxCiswIDEgOiAiemVybyIgYml0IHBoYXNlIDIKKworMSAwIDogIm9uZSIgYml0IHBoYXNlIDEKKzEgMSA6ICJvbmUiIGJpdCBwaGFzZSAyCisKKyAgMjQtYml0IGNvZGUsIHdoZXJlIGJpdHMgPSAoZnJlcSo0MCkgKyAxMDQ4NjE4OC4KKyAgVGhlIE1vc3QgU2lnbmlmaWNhbnQgMTEgYml0cyBtdXN0IGJlIDEwMTAgeHh4eCAweDAgdG8gYmUgdmFsaWQuCisgIFRoZSBiaXRzIGFyZSBzaGlmdGVkIGluIExTYiBmaXJzdC4KKworVHVuZSBVcGRhdGUgRW5hYmxlIFsuLi4uLi4uVF0KKy0tLS0tLS0tLS0tLS0tLS0tLQorMCA6IFR1bmVyIGhlbGQgY29uc3RhbnQKKzEgOiBUdW5lciB1cGRhdGluZyBpbiBwcm9ncmVzcworCisKK1BST0dSQU1NSU5HIEVYQU1QTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLQorRGVmYXVsdDogICAgICAgIEJBU0UgPC0tIDB4YzggIChjdXJyZW50IHZvbHVtZSwgbm8gc3RlcmVvIGRldGVjdCwKKwkJCQlyYWRpbyBlbmFibGUsIHR1bmVyIGFkanVzdCBkaXNhYmxlKQorCitDYXJkIE9mZjoJQkFTRSA8LS0gMHgwMCAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsCisJCQkJcmFkaW8gZGlzYWJsZSwgdHVuZXIgYWRqdXN0IGRpc2FibGUpCisKK0NhcmQgT246CUJBU0UgPC0tIDB4MDAgIChzZWUgIkNhcmQgT2ZmIiwgY2xlYXJzIGFueSB1bmZpbmlzaGVkIGJ1c2luZXNzKQorCQlCQVNFIDwtLSAweGM4ICAoc2VlICJEZWZhdWx0IikKKworVm9sdW1lIERvd246ICAgIEJBU0UgPC0tIDB4NDggICh2b2x1bWUgZG93biwgbm8gc3RlcmVvIGRldGVjdCwKKwkJCQlyYWRpbyBlbmFibGUsIHR1bmVyIGFkanVzdCBkaXNhYmxlKQorCQkqIHdhaXQgMTAgbXNlYyAqCisJCUJBU0UgPC0tIDB4YzggIChzZWUgIkRlZmF1bHQiKQorCitWb2x1bWUgVXA6ICAgICAgQkFTRSA8LS0gMHg4OCAgKHZvbHVtZSB1cCwgbm8gc3RlcmVvIGRldGVjdCwKKwkJCQlyYWRpbyBlbmFibGUsIHR1bmVyIGFkanVzdCBkaXNhYmxlKQorCQkqIHdhaXQgMTAgbXNlYyAqCisJCUJBU0UgPC0tIDB4YzggIChzZWUgIkRlZmF1bHQiKQorCitDaGVjayBTdGVyZW86ICAgQkFTRSA8LS0gMHhkOCAgKGN1cnJlbnQgdm9sdW1lLCBzdGVyZW8gZGV0ZWN0LAorCQkJCXJhZGlvIGVuYWJsZSwgdHVuZXIgYWRqdXN0IGRpc2FibGUpCisJCSogd2FpdCAxMDAgbXNlYyAqCisJCXggPC0tIEJBU0UgICAgIChyZWFkIGlvcG9ydCkKKwkJQkFTRSA8LS0gMHhjOCAgKHNlZSAiRGVmYXVsdCIpCisKKwkJeD0weGZmID09PiAibm90IHN0ZXJlbyIsIHg9MHhmZCA9PT4gInN0ZXJlbyBkZXRlY3RlZCIKKworU2V0IEZyZXF1ZW5jeTogIGNvZGUgPSAoZnJlcSo0MCkgKyAxMDQ4NjE4OAorICAgICAgICAgICAgICAgIGZvcmVhY2ggb2YgdGhlIDI0IGJpdHMgaW4gY29kZSwKKyAgICAgICAgICAgICAgICAoZnJvbSBMZWFzdCB0byBNb3N0IFNpZ25pZmljYW50KToKKyAgICAgICAgICAgICAgICAgIHRvIHdyaXRlIGEgInplcm8iIGJpdCwKKyAgICAgICAgICAgICAgICAgICAgQkFTRSA8LS0gMHgwMSAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsIHJhZGlvCisJCQkJICAgIGRpc2FibGUsICJ6ZXJvIiBiaXQgcGhhc2UgMSwgdHVuZXIgYWRqdXN0KQorICAgICAgICAgICAgICAgICAgICBCQVNFIDwtLSAweDAzICAoYXVkaW8gbXV0ZSwgbm8gc3RlcmVvIGRldGVjdCwgcmFkaW8KKwkJCQkgICAgZGlzYWJsZSwgInplcm8iIGJpdCBwaGFzZSAyLCB0dW5lciBhZGp1c3QpCisgICAgICAgICAgICAgICAgICB0byB3cml0ZSBhICJvbmUiIGJpdCwKKyAgICAgICAgICAgICAgICAgICAgQkFTRSA8LS0gMHgwNSAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsIHJhZGlvCisJCQkJICAgIGRpc2FibGUsICJvbmUiIGJpdCBwaGFzZSAxLCB0dW5lciBhZGp1c3QpCisgICAgICAgICAgICAgICAgICAgIEJBU0UgPC0tIDB4MDcgIChhdWRpbyBtdXRlLCBubyBzdGVyZW8gZGV0ZWN0LCByYWRpbworCQkJCSAgICBkaXNhYmxlLCAib25lIiBiaXQgcGhhc2UgMiwgdHVuZXIgYWRqdXN0KQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY2LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YWMzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY2LnR4dApAQCAtMCwwICsxLDMzIEBACitXOTk2NiBDYW1lcmEgZHJpdmVyLCB3cml0dGVuIGJ5IEpha29iIEtlbWkgKGpha29iLmtlbWlAdGVsaWEuY29tKQorCitBZnRlciBhIGxvdCBvZiB3b3JrIGluIHNvZnRpY2UgJiB3ZGFzbSwgcmVhZGluZyAucGRmLWZpbGVzIGFuZCB0aXJlc29tZQordHJpYWwtYW5kLWVycm9yIHdvcmsgSSd2ZSBmaW5hbGx5IGdvdCBldmVyeXRoaW5nIHRvIHdvcmsuIEkgbmVlZGVkIHZpc2lvbiBmb3IgYQorcm9ib3RpY3MgcHJvamVjdCBzbyBJIGJvcnJvd2VkIHRoaXMgY2FtZXJhIGZyb20gYSBmcmllbmQgYW5kIHN0YXJ0ZWQgaGFja2luZy4KK0FueXdheSBJJ3ZlIGNvbnZlcnRlZCBteSBvcmlnaW5hbCBjb2RlIGZyb20gdGhlIEFWUiA4Yml0IFJJU0MgQy9BU00gY29kZSBpbnRvCithIHdvcmtpbmcgTGludXggZHJpdmVyLgorCitUbyBnZXQgaXQgd29ya2luZyBzaW1wbHkgY29uZmlndXJlIHlvdXIga2VybmVsIHRvIHN1cHBvcnQKK3BhcnBvcnQsIGllZWUxMjg0LCB2aWRlbzRsaW51eCBhbmQgdzk5NjYKKworSWYgdzk5NjYgaXMgc3RhdGljYWxseSBsaW5rZWQgaXQgd2lsbCBhbHdheXMgcGVyZm9ybSBhZ2dyZXNzaXZlIHByb2JpbmcgZm9yCit0aGUgY2FtZXJhLiBJZiBidWlsdCBhcyBhIG1vZHVsZSB5b3UnbGwgaGF2ZSBtb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKworT3B0aW9uczoKKyBtb2Rwcm9iZSB3OTk2Ni5vIHBhcmRldj1wYXJwb3J0MChvciB3aGF0ZXZlcikgcGFybW9kZT0wICgwPWF1dG8sIDE9ZWNwLCAyPWVwcCkKK3ZvaWxhIQorCit5b3UgY2FuIGFsc28gdHlwZSAnbW9kaW5mbyAtcCB3OTk2Ni5vJyBmb3Igb3B0aW9uIHVzYWdlCisob3IgY2hlY2tvdXQgdzk5NjYuYykKKworVGhlIG9ubHkgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIGlzIHRoYXQgdGhlIGltYWdlIGZvcm1hdCBpcyBpbiBZLVUtWS1WIGZvcm1hdAord2hlcmUgZXZlcnkgdHdvIHBpeGVscyB0YWtlIDQgYnl0ZXMuIEluIFNETCAod3d3LmxpYnNkbC5vcmcpIHRoaXMgZm9ybWF0CitpcyBjYWxsZWQgVklERU9fUEFMRVRURV9ZVVY0MjIgKDE2IGJwcCkuCisKK0EgbWluaW1hbCB0ZXN0IGFwcGxpY2F0aW9uICh3aXRoIHNvdXJjZSkgaXMgYXZhaWxhYmxlIGZyb206CisgIGh0dHA6Ly9oZW0uZnlyaXN0b3JnLmNvbS9tb2d1bC93OTk2Ni5odG1sCisKK1RoZSBzbG93IGZyYW1lcmF0ZSBpcyBkdWUgdG8gbWlzc2luZyBETUEgRUNQIHJlYWQgc3VwcG9ydCBpbiB0aGUgCitwYXJwb3J0IGRyaXZlcnMuIEkgbWlnaHQgYWRkIHdvcmtpbmcgRVBQIHN1cHBvcnQgbGF0ZXIuCisKK0dvb2QgbHVjayEKKyAgICAvSmFrb2IgS2VtaQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjEyMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmNmM1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjEyMC50eHQKQEAgLTAsMCArMSwxNTkgQEAKK0RyaXZlciBmb3IgVHJ1c3QgQ29tcHV0ZXIgUHJvZHVjdHMgRnJhbWVncmFiYmVyLCB2ZXJzaW9uIDAuNi4xCistLS0tLS0gLS0tIC0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tLS0tLSAgLS0tLS0tLSAtIC0gLQorCistIFpPUkFOIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEF1dGhvcjogUGF1bGluZSBNaWRkZWxpbmsgPG1pZGRlbGluQHBvbHl3YXJlLm5sPiAKKyAgIERhdGU6IDE4IFNlcHRlbWJlciAxOTk5CitWZXJzaW9uOiAwLjYuMQorCistIERlc2NyaXB0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWaWRlbzRMaW51eCBjb21wYXRpYmxlIGRyaXZlciBmb3IgYW4gdW5rbm93biBicmFuZCBmcmFtZWdyYWJiZXIKKyhTb2xkIGluIHRoZSBOZXRoZXJsYW5kcyBieSBUUlVTVCBDb21wdXRlciBQcm9kdWN0cykgYW5kIHZhcmlvdXMKK290aGVyIHpvcmFuIHpyMzYxMjAgYmFzZWQgZnJhbWVncmFiYmVycy4KKworVGhlIGNhcmQgY29udGFpbnMgYSBaUjM2MTIwIE11bHRpbWVkaWEgUENJIEludGVyZmFjZSBhbmQgYSBQaGlsaXBzCitTQUE3MTEwIE9uZWNoaXAgRnJvbnRlbmQgdmlkZW9kZWNvZGVyLiBUaGVyZSBpcyBhbHNvIGFuIERTUCBvZgord2hpY2ggSSBoYXZlIGZvcmdvdHRlbiB0aGUgbnVtYmVyLCBzaW5jZSBpIHdpbGwgbmV2ZXIgZ2V0IHRoYXQgdGhpbmcKK3RvIHdvcmsgd2l0aG91dCBzcGVjcyBmcm9tIHRoZSB2ZW5kb3IgaXRzZWxmLgorCitUaGUgU0FBNzExeCBhcmUgY2FwYWJsZSBvZiBwcm9jZXNzaW5nIDYgZGlmZmVyZW50IHZpZGVvIGlucHV0cywKK0NWQlMxLi42IGFuZCBZMStDMSwgWTIrQzIsIFkzK0MzLiBBbGwgaW4gNTAvNjBIeiwgTlRTQywgUEFMIG9yCitTRUNBTSBhbmQgZGVsaXZlcmluZyBhIFlVViBkYXRhc3RyZWFtLiAgT24gbXkgY2FyZCB0aGUgaW5wdXQKKydDVkJTLTAnIGNvcnJlc3BvbmRzIHRvIGNoYW5uZWwgQ1ZCUzIgYW5kICdTLVZpZGVvJyB0byBZMitDMi4KKworSSBoYXZlIHNvbWUgcmVwb3J0cyBvZiBvdGhlciBjYXJkcyB3b3JraW5nIHdpdGggdGhlIG1lbnRpb25lZAorY2hpcCBzZXRzLiBGb3IgYSBsaXN0IG9mIG90aGVyIHdvcmtpbmcgY2FyZHMgcGxlYXNlIGhhdmUgYSBsb29rCithdCB0aGUgY2FyZHMgbmFtZWQgaW4gdGhlIHR2Y2FyZHMgc3RydWN0IGluIHRoZSBiZWdpbm5pbmcgb2YKK3pyMzYxMjAuYworCitBZnRlciBzb21lIHRlc3RpbmcsIEkgZGlzY292ZXJlZCB0aGF0IHRoZSBjYXJkZGVzaWduZXIgbWVzc2VkIHVwCitvbiB0aGUgSTJDIGludGVyZmFjZS4gVGhlIFpvcmFuIGNoaXAgaW5jbHVkZXMgMiBsaW5lcyBTREEgYW5kIFNDTAord2hpY2ggKHMpaGUgY29ubmVjdGVkIHJldmVyc2VseS4gU28gd2UgaGF2ZSB0byBjbG9jayBvbiB0aGUgU0RBCithbmQgci93IGRhdGEgb24gdGhlIFNDTCBwaW4uIExpZmUgaXMgZnVuLi4uIEVhY2ggY2FyZHR5cGUgbm93IGhhcworYSBiaXQgd2hpY2ggc2lnbmlmaWVzIGlmIHlvdSBoYXZlIGEgY2FyZCB3aXRoIHRoZSBzYW1lIGRlZmljaWVuY3kuCisKK09oLCBmb3IgdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGlzIHN0b3J5IEkgbXVzdCBtZW50aW9uIHRoYXQgbXkKK2NhcmQgZGVsaXZlcnMgdGhlIFZTWU5DIHB1bHNlIG9mIHRoZSBTQUEgY2hpcCB0byBHSVJRMSwgbm90CitHSVJRMCBhcyBzb21lIG90aGVyIGNhcmRzIGhhdmUuIFRoaXMgaXMgYWxzbyBpbmNvcnBvcmF0ZWQgaW4KK3RoZSBkcml2ZXIgYmUgY2xlYXJpbmcvc2V0dGluZyB0aGUgJ3VzZWlycTEnIGJpdCBpbiB0aGUgdHZjYXJkCitkZXNjcmlwdGlvbi4KKworQW5vdGhlciBwcm9ibGVtcyBvZiBjb250aW51b3VzIGNhcHR1cmluZyBkYXRhIHdpdGggYSBab3JhbiBjaGlwCitpcyBzb21ldGhpbmcgbmFzdHkgaW5zaWRlIHRoZSBjaGlwLiBJdCBlZmZlY3RpdmVseSBoYWx2ZXMgdGhlCitmcHMgd2Ugb3VnaHQgdG8gZ2V0Li4uIEhlcmUgaXMgdGhlIHNjZW5hcmlvOiBjYXB0dXJpbmcgZnJhbWVzCit0byBtZW1vcnkgaXMgZG9uZSBpbiB0aGUgc28tY2FsbGVkIHNuYXBzaG90IG1vZGUuIEluIHRoaXMgbW9kZQordGhlIFpvcmFuIHN0b3BzIGFmdGVyIGNhcHR1cmluZyBhIGZyYW1lIHdvcnRoIG9mIGRhdGEgYW5kIHdhaXQKK3RpbGwgdGhlIGFwcGxpY2F0aW9uIHNldCBHUkFCIGJpdCB0byBpbmRpY2F0ZSByZWFkaW5lc3MgZm9yIHRoZQorbmV4dCBmcmFtZS4gQWZ0ZXIgZGV0ZWN0aW5nIGEgc2V0IGJpdCwgdGhlIGNoaXAgbmVhdGx5IHdhaXRzCit0aWxsIHRoZSBzdGFydCBvZiBhIGZyYW1lLCBjYXB0dXJlcyBpdCBhbmQgaXQgZ29lcyBiYWNrIHRvIG9mZi4KK1NtYXJ0IHBwbCB3aWxsIG5vdGljZSB0aGUgcHJvYmxlbSBoZXJlLiBJdHMgdGhlIHdhaXRpbmcgb24gdGhlCitfbmV4dF8gZnJhbWUgZWFjaCB0aW1lIHdlIHNldCB0aGUgR1JBQiBiaXQuLi4gT2ggd2VsbCwgMTIsNSBmcHMKK2lzIHN0aWxsIHBsZW50eSBmYXN0IGZvciBtZS4KKy0tIHVwZGF0ZSAyOC83LzE5OTkgLS0KK0Rvbid0IGJlbGlldmUgYSB3b3JkIEkganVzdCBzYWlkLi4uIFByb29mIGlzIHRoZSBvdXRwdXQKK29mIGBzdHJlYW1lciAtdCAzMDAgLXIgMjUgLWYgYXZpMTUgLW8gL2Rldi9udWxsYAorCSsrLS0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1CisJKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQorCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKKwkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstCisJc3luY2VyOiBkb25lCisJd3JpdGVyOiBkb25lCisobm90ZSB0aGUgL2Rldi9udWxsIGlzIHBydWRlbnQgaGVyZSwgbXkgc3lzdGVtIGlzIG5vdCBhYmxlIHRvCisgZ3JhYiAvYW5kLyB3cml0ZSAyNSBmcHMgdG8gYSBmaWxlLi4uIGdpZnRzIHdlbGNvbWUgOikgKQorVGhlIHRlY2huaWNhbCByZWFzb25pbmcgZm9sbG93czogVGhlIHpvcmFuIGNvbXBsZXRlZCB0aGUgbGFzdAorZnJhbWUsIHRoZSBWU1lOQyBnb2VzIGxvdywgYW5kIEdSQUIgaXMgY2xlYXJlZC4gVGhlIGludGVycnVwdAorcm91dGluZSBzdGFydHMgdG8gd29yayBzaW5jZSBpdHMgVlNZTkMgZHJpdmVuLCBhbmQgYWdhaW4KK2FjdGl2YXRlcyB0aGUgR1JBQiBiaXQuIEEgZmV3IG1zIGxhdGVyIHRoZSBWU1lOQyAocmUtKXJpc2VzIGFuZAordGhlIHpvcmFuIHN0YXJ0cyB0byB3b3JrIG9uIGEgbmV3IGFuZCBmcmVzaGx5IGJyb2FkY2FzdGVkIGZyYW1lLi4uLgorCitGb3IgcG9pbnRlcnMgSSB1c2VkIHRoZSBzcGVjcyBvZiBib3RoIGNoaXBzLiBCZWxvdyBhcmUgdGhlIFVSTHM6CisJaHR0cDovL3d3dy56b3Jhbi5jb20vZnRwL2Rvd25sb2FkL2RldmljZXMvcGNpL1pSMzYxMjAvMzYxMjBkYXRhLnBkZgorCWh0dHA6Ly93d3ctdXMuc2VtaWNvbmR1Y3Rvci5waGlsaXBzLmNvbS9hY3JvYmF0L2RhdGFzaGVldHMvU0FBXzcxMTBfQV8xLnBkZgorCitUaGUgZG9jdW1lbnRhdGlvbiBoYXMgdmVyeSBsaXR0bGUgb24gYWJzb2x1dGUgbnVtYmVycyBvciB0aW1pbmdzCituZWVkZWQgZm9yIHRoZSB2YXJpb3VzIG1vZGVzL3Jlc29sdXRpb25zLCBidXQgdGhlcmUgYXJlIG90aGVyCitwcm9ncmFtcyB5b3UgY2FuIGJvcnJvdyB0aG9zZSBmcm9tLgorCistLS0tLS0gSW5zdGFsbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVhZCB0aGUgZmlsZSBjYWxsZWQgVE9ETy4gIE5vdGUgaXRzIGxvbmcgbGlzdCBvZiBsaW1pdGF0aW9ucy4KKworQnVpbGQgYSBrZXJuZWwgd2l0aCBWSURFTzRMSU5VWCBlbmFibGVkLiBBY3RpdmF0ZSB0aGUKK0JUODQ4IGRyaXZlcjsgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2UgaGF2ZSBuZWVkIGZvciB0aGUKK290aGVyIG1vZHVsZXMgKGkyYyBhbmQgdmlkZW9kZXYpIGl0IGVuYWJsZXMuCisKK1RvIGluc3RhbGwgdGhpcyBzb2Z0d2FyZSwgZXh0cmFjdCBpdCBpbnRvIGEgc3VpdGFibGUgZGlyZWN0b3J5LgorRXhhbWluZSB0aGUgbWFrZWZpbGUgYW5kIGNoYW5nZSBhbnl0aGluZyB5b3UgZG9uJ3QgbGlrZS4gIFR5cGUgIm1ha2UiLgorCitBZnRlciBtYWtpbmcgdGhlIG1vZHVsZXMgY2hlY2sgaWYgeW91IGhhdmUgdGhlIG11Y2ggbmVlZGVkCisvZGV2L3ZpZGVvIGRldmljZXMuIElmIG5vdCwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIDQgbGluZXM6CisJbWtub2QgL2Rldi92aWRlbyBjIDgxIDAKKwlta25vZCAvZGV2L3ZpZGVvMSBjIDgxIDEKKwlta25vZCAvZGV2L3ZpZGVvMiBjIDgxIDIKKwlta25vZCAvZGV2L3ZpZGVvMyBjIDgxIDMKKwlta25vZCAvZGV2L3ZpZGVvNCBjIDgxIDQKKworQWZ0ZXIgbWFraW5nL2NoZWNraW5nIHRoZSBkZXZpY2VzIGRvOgorCW1vZHByb2JlIGkyYworCW1vZHByb2JlIHZpZGVvZGV2CisJbW9kcHJvYmUgc2FhNzExMAkob3B0aW9uYWwpCisJbW9kcHJvYmUgc2FhNzExMQkob3B0aW9uYWwpCisJbW9kcHJvYmUgdHVuZXIJCShvcHRpb25hbCkKKwlpbnNtb2Qgem9yYW4gY2FyZHR5cGU9PG4+CisKKzxuPiBpcyB0aGUgY2FyZHR5cGUgb2YgdGhlIGNhcmQgeW91IGhhdmUuIFRoZSBjYXJkbnVtYmVyIGNhbgorYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBvZiB6cjM2MTIwLiBMb29rIGZvciB0dmNhcmRzLiBJZiB5b3VyCitjYXJkIGlzIG5vdCB0aGVyZSwgcGxlYXNlIHRyeSBpZiBhbnkgb3RoZXIgY2FyZCBnaXZlcyBzb21lCityZXNwb25zZSwgYW5kIG1haWwgbWUgaWYgeW91IGdvdCBhIHdvcmtpbmcgdHZjYXJkIGFkZGl0aW9uLiAKKworUFMuIDxUVkNhcmQgZWRpdG9ycyBiZWhvbGQhKQorICAgIERvbnQgZm9yZ2V0IHRvIHNldCB2aWRlb19pbnB1dCB0byB0aGUgbnVtYmVyIG9mIGlucHV0cworICAgIHlvdSBkZWZpbmVkIGluIHRoZSB2aWRlb19tdXggcGFydCBvZiB0aGUgdHZjYXJkIGRlZmluaXRpb24uCisgICAgSXRzIGEgY29tbW9uIGVycm9yIHRvIGFkZCBhIGNoYW5uZWwgYnV0IG5vdCBpbmNyZW1lbnRpbmcKKyAgICB2aWRlb19pbnB1dCBhbmQgZ2V0dGluZyBhbmdyeSB3aXRoIG1lL3Y0bC9saW51eC9saW51cyA6KAorCitZb3UgYXJlIG5vdyByZWFkeSB0byB0ZXN0IHRoZSBmcmFtZWdyYWJiZXIgd2l0aCB5b3VyIGZhdm9yaXRlCit2aWRlbzRsaW51eCBjb21wYXRpYmxlIHRvb2wKKworLS0tLS0tIEFwcGxpY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkZXZpY2Ugd29ya3Mgd2l0aCBhbGwgVmlkZW80TGludXggY29tcGF0aWJsZSBhcHBsaWNhdGlvbnMsCitnaXZlbiB0aGUgbGltaXRhdGlvbnMgaW4gdGhlIFRPRE8gZmlsZS4KKworLS0tLS0tIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB1c2VzIHRoZSBWNEwgaW50ZXJmYWNlIGFzIG9mIGtlcm5lbCByZWxlYXNlIDIuMS4xMTYsIGFuZCBpbgorZmFjdCBoYXMgbm90IGJlZW4gdGVzdGVkIG9uIGFueSBsb3dlciB2ZXJzaW9uLiAgVGhlcmUgYXJlIGEgY291cGxlCitvZiBtaW5vciBkaWZmZXJlbmNlcyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUgYW1vdW50IG9mIGRhdGEgcmV0dXJuZWQKK3dpdGggZWFjaCBmcmFtZSB2YXJpZXMsIGFuZCBubyBkb3VidCB0aGVyZSBhcmUgZGlzY3JlcGFuY2llcyBkdWUgdG8gbXkKK21pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIEFQSS4gIEkgaW50ZW5kIHRvIGNvbnZlcnQgdGhpcyBkcml2ZXIgdG8gdGhlCituZXcgVjRMMiBBUEkgd2hlbiBpdCBoYXMgc3RhYmlsaXplZCBtb3JlLgorCistLS0tLS0gQ3VycmVudCBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIGlzIGNhcGFibGUgb2Ygb3ZlcmxheWluZyBhIHZpZGVvIGltYWdlIGluIHNjcmVlbiwgYW5kCitldmVuIGNhcGFibGUgb2YgZ3JhYmJpbmcgZnJhbWVzLiBJdCB1c2VzIHRoZSBCSUdQSFlTQVJFQSBwYXRjaAordG8gYWxsb2NhdGUgbG90cyBvZiBsYXJnZSBtZW1vcnkgYmxvY2tzIHdoZW4gdGlzIHBhdGNoIGlzCitmb3VuZCBpbiB0aGUga2VybmVsLCBidXQgaXQgZG9lc24ndCBuZWVkIGl0LgorVGhlIGNvbnNlcXVlbmNlIGlzIHRoYXQsIHdoZW4gbG9hZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLAordGhlIG1vZHVsZSBtYXkgdGVsbCB5b3UgaXQncyBvdXQgb2YgbWVtb3J5LCBidXQgJ2ZyZWUnIHNheXMKK290aGVyd2lzZS4gVGhlIHJlYXNvbiBpcyBzaW1wbGU7IHRoZSBtb2R1bGVzIHdhbnRzIGl0cyBtZW1vcnkKK2NvbnRpZ3VvdXMsIG5vdCBmcmFnbWVudGVkLCBhbmQgYWZ0ZXIgYSBsb25nIHVwdGltZSB0aGVyZQorcHJvYmFibHkgaXNuJ3QgYSBmcmFnbWVudCBvZiBtZW1vcnkgbGFyZ2UgZW5vdWdoLi4uCisKK1RoZSBkcml2ZXIgdXNlcyBhIGRvdWJsZSBidWZmZXJpbmcgc2NoZW1lLCB3aGljaCBzaG91bGQgcmVhbGx5CitiZSBhbiBuLXdheSBidWZmZXIsIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGxvY2F0ZWQgZnJhbWVidWZmZXIKK2FuZCB0aGUgcmVxdWVzdGVkIGdyYWItc2l6ZS9mb3JtYXQuCitUaGlzIGN1cnJlbnQgdmVyc2lvbiBhbHNvIGZpeGVzIGEgZGVhZC1sb2NrIHNpdHVhdGlvbiBkdXJpbmcgaXJxCit0aW1lLCB3aGljaCByZWFsbHksIHJlYWxseSBmcm96ZSBteSBzeXN0ZW0uLi4gOikKKworR29vZCBsdWNrLgorICBQYXVsaW5lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2JhbGFuY2UgYi9Eb2N1bWVudGF0aW9uL3ZtL2JhbGFuY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzZDMxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vYmFsYW5jZQpAQCAtMCwwICsxLDkzIEBACitTdGFydGVkIEphbiAyMDAwIGJ5IEthbm9qIFNhcmNhciA8a2Fub2pAc2dpLmNvbT4KKworTWVtb3J5IGJhbGFuY2luZyBpcyBuZWVkZWQgZm9yIG5vbiBfX0dGUF9XQUlUIGFzIHdlbGwgYXMgZm9yIG5vbgorX19HRlBfSU8gYWxsb2NhdGlvbnMuCisKK1RoZXJlIGFyZSB0d28gcmVhc29ucyB0byBiZSByZXF1ZXN0aW5nIG5vbiBfX0dGUF9XQUlUIGFsbG9jYXRpb25zOgordGhlIGNhbGxlciBjYW4gbm90IHNsZWVwICh0eXBpY2FsbHkgaW50ciBjb250ZXh0KSwgb3IgZG9lcyBub3Qgd2FudAordG8gaW5jdXIgY29zdCBvdmVyaGVhZHMgb2YgcGFnZSBzdGVhbGluZyBhbmQgcG9zc2libGUgc3dhcCBpbyBmb3IKK3doYXRldmVyIHJlYXNvbnMuCisKK19fR0ZQX0lPIGFsbG9jYXRpb24gcmVxdWVzdHMgYXJlIG1hZGUgdG8gcHJldmVudCBmaWxlIHN5c3RlbSBkZWFkbG9ja3MuCisKK0luIHRoZSBhYnNlbmNlIG9mIG5vbiBzbGVlcGFibGUgYWxsb2NhdGlvbiByZXF1ZXN0cywgaXQgc2VlbXMgZGV0cmltZW50YWwKK3RvIGJlIGRvaW5nIGJhbGFuY2luZy4gUGFnZSByZWNsYW1hdGlvbiBjYW4gYmUga2lja2VkIG9mZiBsYXppbHksIHRoYXQKK2lzLCBvbmx5IHdoZW4gbmVlZGVkIChha2Egem9uZSBmcmVlIG1lbW9yeSBpcyAwKSwgaW5zdGVhZCBvZiBtYWtpbmcgaXQKK2EgcHJvYWN0aXZlIHByb2Nlc3MuCisKK1RoYXQgYmVpbmcgc2FpZCwgdGhlIGtlcm5lbCBzaG91bGQgdHJ5IHRvIGZ1bGZpbGwgcmVxdWVzdHMgZm9yIGRpcmVjdAorbWFwcGVkIHBhZ2VzIGZyb20gdGhlIGRpcmVjdCBtYXBwZWQgcG9vbCwgaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgb24KK3RoZSBkbWEgcG9vbCwgc28gYXMgdG8ga2VlcCB0aGUgZG1hIHBvb2wgZmlsbGVkIGZvciBkbWEgcmVxdWVzdHMgKGF0b21pYworb3Igbm90KS4gQSBzaW1pbGFyIGFyZ3VtZW50IGFwcGxpZXMgdG8gaGlnaG1lbSBhbmQgZGlyZWN0IG1hcHBlZCBwYWdlcy4KK09UT0gsIGlmIHRoZXJlIGlzIGEgbG90IG9mIGZyZWUgZG1hIHBhZ2VzLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHNhdGlzZnkKK3JlZ3VsYXIgbWVtb3J5IHJlcXVlc3RzIGJ5IGFsbG9jYXRpbmcgb25lIGZyb20gdGhlIGRtYSBwb29sLCBpbnN0ZWFkCitvZiBpbmN1cnJpbmcgdGhlIG92ZXJoZWFkIG9mIHJlZ3VsYXIgem9uZSBiYWxhbmNpbmcuCisKK0luIDIuMiwgbWVtb3J5IGJhbGFuY2luZy9wYWdlIHJlY2xhbWF0aW9uIHdvdWxkIGtpY2sgb2ZmIG9ubHkgd2hlbiB0aGUKK190b3RhbF8gbnVtYmVyIG9mIGZyZWUgcGFnZXMgZmVsbCBiZWxvdyAxLzY0IHRoIG9mIHRvdGFsIG1lbW9yeS4gV2l0aCB0aGUKK3JpZ2h0IHJhdGlvIG9mIGRtYSBhbmQgcmVndWxhciBtZW1vcnksIGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgYmFsYW5jaW5nCit3b3VsZCBub3QgYmUgZG9uZSBldmVuIHdoZW4gdGhlIGRtYSB6b25lIHdhcyBjb21wbGV0ZWx5IGVtcHR5LiAyLjIgaGFzCitiZWVuIHJ1bm5pbmcgcHJvZHVjdGlvbiBtYWNoaW5lcyBvZiB2YXJ5aW5nIG1lbW9yeSBzaXplcywgYW5kIHNlZW1zIHRvIGJlCitkb2luZyBmaW5lIGV2ZW4gd2l0aCB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBwcm9ibGVtLiBJbiAyLjMsIGR1ZSB0bworSElHSE1FTSwgdGhpcyBwcm9ibGVtIGlzIGFnZ3JhdmF0ZWQuCisKK0luIDIuMywgem9uZSBiYWxhbmNpbmcgY2FuIGJlIGRvbmUgaW4gb25lIG9mIHR3byB3YXlzOiBkZXBlbmRpbmcgb24gdGhlCit6b25lIHNpemUgKGFuZCBwb3NzaWJseSBvZiB0aGUgc2l6ZSBvZiBsb3dlciBjbGFzcyB6b25lcyksIHdlIGNhbiBkZWNpZGUKK2F0IGluaXQgdGltZSBob3cgbWFueSBmcmVlIHBhZ2VzIHdlIHNob3VsZCBhaW0gZm9yIHdoaWxlIGJhbGFuY2luZyBhbnkKK3pvbmUuIFRoZSBnb29kIHBhcnQgaXMsIHdoaWxlIGJhbGFuY2luZywgd2UgZG8gbm90IG5lZWQgdG8gbG9vayBhdCBzaXplcworb2YgbG93ZXIgY2xhc3Mgem9uZXMsIHRoZSBiYWQgcGFydCBpcywgd2UgbWlnaHQgZG8gdG9vIGZyZXF1ZW50IGJhbGFuY2luZworZHVlIHRvIGlnbm9yaW5nIHBvc3NpYmx5IGxvd2VyIHVzYWdlIGluIHRoZSBsb3dlciBjbGFzcyB6b25lcy4gQWxzbywKK3dpdGggYSBzbGlnaHQgY2hhbmdlIGluIHRoZSBhbGxvY2F0aW9uIHJvdXRpbmUsIGl0IGlzIHBvc3NpYmxlIHRvIHJlZHVjZQordGhlIG1lbWNsYXNzKCkgbWFjcm8gdG8gYmUgYSBzaW1wbGUgZXF1YWxpdHkuCisKK0Fub3RoZXIgcG9zc2libGUgc29sdXRpb24gaXMgdGhhdCB3ZSBiYWxhbmNlIG9ubHkgd2hlbiB0aGUgZnJlZSBtZW1vcnkKK29mIGEgem9uZSBfYW5kXyBhbGwgaXRzIGxvd2VyIGNsYXNzIHpvbmVzIGZhbGxzIGJlbG93IDEvNjR0aCBvZiB0aGUKK3RvdGFsIG1lbW9yeSBpbiB0aGUgem9uZSBhbmQgaXRzIGxvd2VyIGNsYXNzIHpvbmVzLiBUaGlzIGZpeGVzIHRoZSAyLjIKK2JhbGFuY2luZyBwcm9ibGVtLCBhbmQgc3RheXMgYXMgY2xvc2UgdG8gMi4yIGJlaGF2aW9yIGFzIHBvc3NpYmxlLiBBbHNvLAordGhlIGJhbGFuY2luZyBhbGdvcml0aG0gd29ya3MgdGhlIHNhbWUgd2F5IG9uIHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyZXMsCit3aGljaCBoYXZlIGRpZmZlcmVudCBudW1iZXJzIGFuZCB0eXBlcyBvZiB6b25lcy4gSWYgd2Ugd2FudGVkIHRvIGdldAorZmFuY3ksIHdlIGNvdWxkIGFzc2lnbiBkaWZmZXJlbnQgd2VpZ2h0cyB0byBmcmVlIHBhZ2VzIGluIGRpZmZlcmVudAorem9uZXMgaW4gdGhlIGZ1dHVyZS4KKworTm90ZSB0aGF0IGlmIHRoZSBzaXplIG9mIHRoZSByZWd1bGFyIHpvbmUgaXMgaHVnZSBjb21wYXJlZCB0byBkbWEgem9uZSwKK2l0IGJlY29tZXMgbGVzcyBzaWduaWZpY2FudCB0byBjb25zaWRlciB0aGUgZnJlZSBkbWEgcGFnZXMgd2hpbGUKK2RlY2lkaW5nIHdoZXRoZXIgdG8gYmFsYW5jZSB0aGUgcmVndWxhciB6b25lLiBUaGUgZmlyc3Qgc29sdXRpb24KK2JlY29tZXMgbW9yZSBhdHRyYWN0aXZlIHRoZW4uCisKK1RoZSBhcHBlbmRlZCBwYXRjaCBpbXBsZW1lbnRzIHRoZSBzZWNvbmQgc29sdXRpb24uIEl0IGFsc28gImZpeGVzIiB0d28KK3Byb2JsZW1zOiBmaXJzdCwga3N3YXBkIGlzIHdva2VuIHVwIGFzIGluIDIuMiBvbiBsb3cgbWVtb3J5IGNvbmRpdGlvbnMKK2ZvciBub24tc2xlZXBhYmxlIGFsbG9jYXRpb25zLiBTZWNvbmQsIHRoZSBISUdITUVNIHpvbmUgaXMgYWxzbyBiYWxhbmNlZCwKK3NvIGFzIHRvIGdpdmUgYSBmaWdodGluZyBjaGFuY2UgZm9yIHJlcGxhY2Vfd2l0aF9oaWdobWVtKCkgdG8gZ2V0IGEKK0hJR0hNRU0gcGFnZSwgYXMgd2VsbCBhcyB0byBlbnN1cmUgdGhhdCBISUdITUVNIGFsbG9jYXRpb25zIGRvIG5vdAorZmFsbCBiYWNrIGludG8gcmVndWxhciB6b25lLiBUaGlzIGFsc28gbWFrZXMgc3VyZSB0aGF0IEhJR0hNRU0gcGFnZXMKK2FyZSBub3QgbGVha2VkIChmb3IgZXhhbXBsZSwgaW4gc2l0dWF0aW9ucyB3aGVyZSBhIEhJR0hNRU0gcGFnZSBpcyBpbiAKK3RoZSBzd2FwY2FjaGUgYnV0IGlzIG5vdCBiZWluZyB1c2VkIGJ5IGFueW9uZSkKKwora3N3YXBkIGFsc28gbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgem9uZXMgaXQgc2hvdWxkIGJhbGFuY2UuIGtzd2FwZCBpcworcHJpbWFyaWx5IG5lZWRlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSBiYWxhbmNpbmcgY2FuIG5vdCBiZSBkb25lLCAKK3Byb2JhYmx5IGJlY2F1c2UgYWxsIGFsbG9jYXRpb24gcmVxdWVzdHMgYXJlIGNvbWluZyBmcm9tIGludHIgY29udGV4dAorYW5kIGFsbCBwcm9jZXNzIGNvbnRleHRzIGFyZSBzbGVlcGluZy4gRm9yIDIuMywga3N3YXBkIGRvZXMgbm90IHJlYWxseQorbmVlZCB0byBiYWxhbmNlIHRoZSBoaWdobWVtIHpvbmUsIHNpbmNlIGludHIgY29udGV4dCBkb2VzIG5vdCByZXF1ZXN0CitoaWdobWVtIHBhZ2VzLiBrc3dhcGQgbG9va3MgYXQgdGhlIHpvbmVfd2FrZV9rc3dhcGQgZmllbGQgaW4gdGhlIHpvbmUKK3N0cnVjdHVyZSB0byBkZWNpZGUgd2hldGhlciBhIHpvbmUgbmVlZHMgYmFsYW5jaW5nLgorCitQYWdlIHN0ZWFsaW5nIGZyb20gcHJvY2VzcyBtZW1vcnkgYW5kIHNobSBpcyBkb25lIGlmIHN0ZWFsaW5nIHRoZSBwYWdlIHdvdWxkCithbGxldmlhdGUgbWVtb3J5IHByZXNzdXJlIG9uIGFueSB6b25lIGluIHRoZSBwYWdlJ3Mgbm9kZSB0aGF0IGhhcyBmYWxsZW4gYmVsb3cKK2l0cyB3YXRlcm1hcmsuCisKK3BhZ2VzX21pbi9wYWdlc19sb3cvcGFnZXNfaGlnaC9sb3dfb25fbWVtb3J5L3pvbmVfd2FrZV9rc3dhcGQ6IFRoZXNlIGFyZSAKK3Blci16b25lIGZpZWxkcywgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhIHpvbmUgbmVlZHMgdG8gYmUgYmFsYW5jZWQuIFdoZW4KK3RoZSBudW1iZXIgb2YgcGFnZXMgZmFsbHMgYmVsb3cgcGFnZXNfbWluLCB0aGUgaHlzdGVyaWMgZmllbGQgbG93X29uX21lbW9yeQorZ2V0cyBzZXQuIFRoaXMgc3RheXMgc2V0IHRpbGwgdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGJlY29tZXMgcGFnZXNfaGlnaC4KK1doZW4gbG93X29uX21lbW9yeSBpcyBzZXQsIHBhZ2UgYWxsb2NhdGlvbiByZXF1ZXN0cyB3aWxsIHRyeSB0byBmcmVlIHNvbWUKK3BhZ2VzIGluIHRoZSB6b25lIChwcm92aWRpbmcgR0ZQX1dBSVQgaXMgc2V0IGluIHRoZSByZXF1ZXN0KS4gT3J0aG9nb25hbAordG8gdGhpcywgaXMgdGhlIGRlY2lzaW9uIHRvIHBva2Uga3N3YXBkIHRvIGZyZWUgc29tZSB6b25lIHBhZ2VzLiBUaGF0CitkZWNpc2lvbiBpcyBub3QgaHlzdGVyZXNpcyBiYXNlZCwgYW5kIGlzIGRvbmUgd2hlbiB0aGUgbnVtYmVyIG9mIGZyZWUKK3BhZ2VzIGlzIGJlbG93IHBhZ2VzX2xvdzsgaW4gd2hpY2ggY2FzZSB6b25lX3dha2Vfa3N3YXBkIGlzIGFsc28gc2V0LgorCisKKyhHb29kKSBJZGVhcyB0aGF0IEkgaGF2ZSBoZWFyZDoKKzEuIER5bmFtaWMgZXhwZXJpZW5jZSBzaG91bGQgaW5mbHVlbmNlIGJhbGFuY2luZzogbnVtYmVyIG9mIGZhaWxlZCByZXF1ZXN0cworZm9yIGEgem9uZSBjYW4gYmUgdHJhY2tlZCBhbmQgZmVkIGludG8gdGhlIGJhbGFuY2luZyBzY2hlbWUgKGphbHZvQG1iYXkubmV0KQorMi4gSW1wbGVtZW50IGEgcmVwbGFjZV93aXRoX2hpZ2htZW0oKS1saWtlIHJlcGxhY2Vfd2l0aF9yZWd1bGFyKCkgdG8gcHJlc2VydmUKK2RtYSBwYWdlcy4gKGxrZEB0YW50YWxvcGhpbGUuZGVtb24uY28udWspCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOWJjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dApAQCAtMCwwICsxLDI4NCBAQAorCitUaGUgaW50ZW50IG9mIHRoaXMgZmlsZSBpcyB0byBnaXZlIGEgYnJpZWYgc3VtbWFyeSBvZiBodWdldGxicGFnZSBzdXBwb3J0IGluCit0aGUgTGludXgga2VybmVsLiAgVGhpcyBzdXBwb3J0IGlzIGJ1aWx0IG9uIHRvcCBvZiBtdWx0aXBsZSBwYWdlIHNpemUgc3VwcG9ydAordGhhdCBpcyBwcm92aWRlZCBieSBtb3N0IG1vZGVybiBhcmNoaXRlY3R1cmVzLiAgRm9yIGV4YW1wbGUsIGkzODYKK2FyY2hpdGVjdHVyZSBzdXBwb3J0cyA0SyBhbmQgNE0gKDJNIGluIFBBRSBtb2RlKSBwYWdlIHNpemVzLCBpYTY0CithcmNoaXRlY3R1cmUgc3VwcG9ydHMgbXVsdGlwbGUgcGFnZSBzaXplcyA0SywgOEssIDY0SywgMjU2SywgMU0sIDRNLCAxNk0sCisyNTZNIGFuZCBwcGM2NCBzdXBwb3J0cyA0SyBhbmQgMTZNLiAgQSBUTEIgaXMgYSBjYWNoZSBvZiB2aXJ0dWFsLXRvLXBoeXNpY2FsCit0cmFuc2xhdGlvbnMuICBUeXBpY2FsbHkgdGhpcyBpcyBhIHZlcnkgc2NhcmNlIHJlc291cmNlIG9uIHByb2Nlc3Nvci4KK09wZXJhdGluZyBzeXN0ZW1zIHRyeSB0byBtYWtlIGJlc3QgdXNlIG9mIGxpbWl0ZWQgbnVtYmVyIG9mIFRMQiByZXNvdXJjZXMuCitUaGlzIG9wdGltaXphdGlvbiBpcyBtb3JlIGNyaXRpY2FsIG5vdyBhcyBiaWdnZXIgYW5kIGJpZ2dlciBwaHlzaWNhbCBtZW1vcmllcworKHNldmVyYWwgR0JzKSBhcmUgbW9yZSByZWFkaWx5IGF2YWlsYWJsZS4KKworVXNlcnMgY2FuIHVzZSB0aGUgaHVnZSBwYWdlIHN1cHBvcnQgaW4gTGludXgga2VybmVsIGJ5IGVpdGhlciB1c2luZyB0aGUgbW1hcAorc3lzdGVtIGNhbGwgb3Igc3RhbmRhcmQgU1lTdiBzaGFyZWQgbWVtb3J5IHN5c3RlbSBjYWxscyAoc2htZ2V0LCBzaG1hdCkuCisKK0ZpcnN0IHRoZSBMaW51eCBrZXJuZWwgbmVlZHMgdG8gYmUgYnVpbHQgd2l0aCBDT05GSUdfSFVHRVRMQl9QQUdFIChwcmVzZW50Cit1bmRlciBQcm9jZXNzb3IgdHlwZXMgYW5kIGZlYXR1cmUpICBhbmQgQ09ORklHX0hVR0VUTEJGUyAocHJlc2VudCB1bmRlciBmaWxlCitzeXN0ZW0gb3B0aW9uIG9uIGNvbmZpZyBtZW51KSBjb25maWcgb3B0aW9ucy4KKworVGhlIGtlcm5lbCBidWlsdCB3aXRoIGh1Z2VwYWdlIHN1cHBvcnQgc2hvdWxkIHNob3cgdGhlIG51bWJlciBvZiBjb25maWd1cmVkCitodWdlcGFnZXMgaW4gdGhlIHN5c3RlbSBieSBydW5uaW5nIHRoZSAiY2F0IC9wcm9jL21lbWluZm8iIGNvbW1hbmQuICAKKworL3Byb2MvbWVtaW5mbyBhbHNvIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaHVnZXRsYgorcGFnZXMgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiAgSXQgYWxzbyBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK251bWJlciBvZiBmcmVlIGh1Z2V0bGIgcGFnZXMgYXQgYW55IHRpbWUuICBJdCBhbHNvIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0Cit0aGUgY29uZmlndXJlZCBodWdlcGFnZSBzaXplIC0gdGhpcyBpcyBuZWVkZWQgZm9yIGdlbmVyYXRpbmcgdGhlIHByb3BlcgorYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBhcmd1bWVudHMgdG8gdGhlIGFib3ZlIHN5c3RlbSBjYWxscy4KKworVGhlIG91dHB1dCBvZiAiY2F0IC9wcm9jL21lbWluZm8iIHdpbGwgaGF2ZSBvdXRwdXQgbGlrZToKKworLi4uLi4KK0h1Z2VQYWdlc19Ub3RhbDogeHh4CitIdWdlUGFnZXNfRnJlZTogIHl5eQorSHVnZXBhZ2VzaXplOiAgICB6enogS0IKKworL3Byb2MvZmlsZXN5c3RlbXMgc2hvdWxkIGFsc28gc2hvdyBhIGZpbGVzeXN0ZW0gb2YgdHlwZSAiaHVnZXRsYmZzIiBjb25maWd1cmVkCitpbiB0aGUga2VybmVsLgorCisvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzIGluZGljYXRlcyB0aGUgY3VycmVudCBudW1iZXIgb2YgY29uZmlndXJlZCBodWdldGxiCitwYWdlcyBpbiB0aGUga2VybmVsLiAgU3VwZXIgdXNlciBjYW4gZHluYW1pY2FsbHkgcmVxdWVzdCBtb3JlIChvciBmcmVlIHNvbWUKK3ByZS1jb25maWd1cmVkKSBodWdlcGFnZXMuIAorVGhlIGFsbG9jYXRpb24oIG9yIGRlYWxsb2NhdGlvbikgb2YgaHVnZXRsYiBwYWdlcyBpcyBwb3NpYmxlIG9ubHkgaWYgdGhlcmUgYXJlCitlbm91Z2ggcGh5c2ljYWxseSBjb250aWd1b3VzIGZyZWUgcGFnZXMgaW4gc3lzdGVtIChmcmVlaW5nIG9mIGh1Z2VwYWdlcyBpcworcG9zc2libGUgb25seSBpZiB0aGVyZSBhcmUgZW5vdWdoIGh1Z2V0bGIgcGFnZXMgZnJlZSB0aGF0IGNhbiBiZSB0cmFuc2ZlcmVkIAorYmFjayB0byByZWd1bGFyIG1lbW9yeSBwb29sKS4KKworUGFnZXMgdGhhdCBhcmUgdXNlZCBhcyBodWdldGxiIHBhZ2VzIGFyZSByZXNlcnZlZCBpbnNpZGUgdGhlIGtlcm5lbCBhbmQgY2FuCitub3QgYmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuIAorCitPbmNlIHRoZSBrZXJuZWwgd2l0aCBIdWdldGxiIHBhZ2Ugc3VwcG9ydCBpcyBidWlsdCBhbmQgcnVubmluZywgYSB1c2VyIGNhbgordXNlIGVpdGhlciB0aGUgbW1hcCBzeXN0ZW0gY2FsbCBvciBzaGFyZWQgbWVtb3J5IHN5c3RlbSBjYWxscyB0byBzdGFydCB1c2luZwordGhlIGh1Z2UgcGFnZXMuICBJdCBpcyByZXF1aXJlZCB0aGF0IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciBwcmVhbGxvY2F0ZQorZW5vdWdoIG1lbW9yeSBmb3IgaHVnZSBwYWdlIHB1cnBvc2VzLiAgCisKK1VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUvZGVhbGxvY2F0ZSBodWdlcGFnZXM6CisKKwllY2hvIDIwID4gL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcworCitUaGlzIGNvbW1hbmQgd2lsbCB0cnkgdG8gY29uZmlndXJlIDIwIGh1Z2VwYWdlcyBpbiB0aGUgc3lzdGVtLiAgVGhlIHN1Y2Nlc3MKK29yIGZhaWx1cmUgb2YgYWxsb2NhdGlvbiBkZXBlbmRzIG9uIHRoZSBhbW91bnQgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzCittZW1vcnkgdGhhdCBpcyBwcmVzZXQgaW4gc3lzdGVtIGF0IHRoaXMgdGltZS4gIFN5c3RlbSBhZG1pbmlzdHJhdG9ycyBtYXkgd2FudAordG8gcHV0IHRoaXMgY29tbWFuZCBpbiBvbmUgb2YgdGhlIGxvY2FsIHJjIGluaXQgZmlsZS4gIFRoaXMgd2lsbCBlbmFibGUgdGhlCitrZXJuZWwgdG8gcmVxdWVzdCBodWdlIHBhZ2VzIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MgKHdoZW4gdGhlIHBvc3NpYmlsaXR5CitvZiBnZXR0aW5nIHBoeXNpY2FsIGNvbnRpZ3VvdXMgcGFnZXMgaXMgc3RpbGwgdmVyeSBoaWdoKS4KKworSWYgdGhlIHVzZXIgYXBwbGljYXRpb25zIGFyZSBnb2luZyB0byByZXF1ZXN0IGh1Z2VwYWdlcyB1c2luZyBtbWFwIHN5c3RlbQorY2FsbCwgdGhlbiBpdCBpcyByZXF1aXJlZCB0aGF0IHN5c3RlbSBhZG1pbmlzdHJhdG9yIG1vdW50IGEgZmlsZSBzeXN0ZW0gb2YKK3R5cGUgaHVnZXRsYmZzOgorCisJbW91bnQgbm9uZSAvbW50L2h1Z2UgLXQgaHVnZXRsYmZzIDx1aWQ9dmFsdWU+IDxnaWQ9dmFsdWU+IDxtb2RlPXZhbHVlPgorCQkgPHNpemU9dmFsdWU+IDxucl9pbm9kZXM9dmFsdWU+CisKK1RoaXMgY29tbWFuZCBtb3VudHMgYSAocHNldWRvKSBmaWxlc3lzdGVtIG9mIHR5cGUgaHVnZXRsYmZzIG9uIHRoZSBkaXJlY3RvcnkKKy9tbnQvaHVnZS4gIEFueSBmaWxlcyBjcmVhdGVkIG9uIC9tbnQvaHVnZSB1c2VzIGh1Z2VwYWdlcy4gIFRoZSB1aWQgYW5kIGdpZAorb3B0aW9ucyBzZXRzIHRoZSBvd25lciBhbmQgZ3JvdXAgb2YgdGhlIHJvb3Qgb2YgdGhlIGZpbGUgc3lzdGVtLiAgQnkgZGVmYXVsdAordGhlIHVpZCBhbmQgZ2lkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgYXJlIHRha2VuLiAgVGhlIG1vZGUgb3B0aW9uIHNldHMgdGhlCittb2RlIG9mIHJvb3Qgb2YgZmlsZSBzeXN0ZW0gdG8gdmFsdWUgJiAwNzc3LiAgVGhpcyB2YWx1ZSBpcyBnaXZlbiBpbiBvY3RhbC4KK0J5IGRlZmF1bHQgdGhlIHZhbHVlIDA3NTUgaXMgcGlja2VkLiBUaGUgc2l6ZSBvcHRpb24gc2V0cyB0aGUgbWF4aW11bSB2YWx1ZSBvZgorbWVtb3J5IChodWdlIHBhZ2VzKSBhbGxvd2VkIGZvciB0aGF0IGZpbGVzeXN0ZW0gKC9tbnQvaHVnZSkuIFRoZSBzaXplIGlzCityb3VuZGVkIGRvd24gdG8gSFBBR0VfU0laRS4gIFRoZSBvcHRpb24gbnJfaW5vZGUgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YKK2lub2RlcyB0aGF0IC9tbnQvaHVnZSBjYW4gdXNlLiAgSWYgdGhlIHNpemUgb3IgbnJfaW5vZGUgb3B0aW9ucyBhcmUgbm90Citwcm92aWRlZCBvbiBjb21tYW5kIGxpbmUgdGhlbiBubyBsaW1pdHMgYXJlIHNldC4gIEZvciBzaXplIGFuZCBucl9pbm9kZXMKK29wdGlvbnMsIHlvdSBjYW4gdXNlIFtHfGddL1tNfG1dL1tLfGtdIHRvIHJlcHJlc2VudCBnaWdhL21lZ2Eva2lsby4gRm9yIAorZXhhbXBsZSwgc2l6ZT0ySyBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBzaXplPTIwNDguIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYXQgCit0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuIAorCityZWFkIGFuZCB3cml0ZSBzeXN0ZW0gY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZmlsZXMgdGhhdCByZXNpZGUgb24gaHVnZXRsYgorZmlsZSBzeXN0ZW1zLgorCitBIHJlZ3VsYXIgY2hvd24sIGNoZ3JwIGFuZCBjaG1vZCBjb21tYW5kcyAod2l0aCByaWdodCBwZXJtaXNzaW9ucykgY291bGQgYmUKK3VzZWQgdG8gY2hhbmdlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb24gaHVnZXRsYmZzLgorCitBbHNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IG5vIHN1Y2ggbW91bnQgY29tbWFuZCBpcyByZXF1aXJlZCBpZiB0aGUKK2FwcGxpY2F0aW9ucyBhcmUgZ29pbmcgdG8gdXNlIG9ubHkgc2htYXQvc2htZ2V0IHN5c3RlbSBjYWxscy4gIFVzZXJzIHdobword2lzaCB0byB1c2UgaHVnZXRsYiBwYWdlIHZpYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgc2hvdWxkIGJlIGEgbWVtYmVyIG9mCithIHN1cHBsZW1lbnRhcnkgZ3JvdXAgYW5kIHN5c3RlbSBhZG1pbiBuZWVkcyB0byBjb25maWd1cmUgdGhhdCBnaWQgaW50bworL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwLiAgSXQgaXMgcG9zc2libGUgZm9yIHNhbWUgb3IgZGlmZmVyZW50CithcHBsaWNhdGlvbnMgdG8gdXNlIGFueSBjb21iaW5hdGlvbiBvZiBtbWFwcyBhbmQgc2htKiBjYWxscy4gIFRob3VnaCB0aGUKK21vdW50IG9mIGZpbGVzeXN0ZW0gd2lsbCBiZSByZXF1aXJlZCBmb3IgdXNpbmcgbW1hcHMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLyoKKyAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZXBhZ2UgbWVtb3J5IGluIGEgdXNlciBhcHBsaWNhdGlvbiB1c2luZyBTeXMgViBzaGFyZWQKKyAqIG1lbW9yeSBzeXN0ZW0gY2FsbHMuICBJbiB0aGlzIGV4YW1wbGUgdGhlIGFwcCBpcyByZXF1ZXN0aW5nIDI1Nk1CIG9mCisgKiBtZW1vcnkgdGhhdCBpcyBiYWNrZWQgYnkgaHVnZSBwYWdlcy4gIFRoZSBhcHBsaWNhdGlvbiB1c2VzIHRoZSBmbGFnCisgKiBTSE1fSFVHRVRMQiBpbiB0aGUgc2htZ2V0IHN5c3RlbSBjYWxsIHRvIGluZm9ybSB0aGUga2VybmVsIHRoYXQgaXQgaXMKKyAqIHJlcXVlc3RpbmcgaHVnZXBhZ2VzLgorICoKKyAqIEZvciB0aGUgaWE2NCBhcmNoaXRlY3R1cmUsIHRoZSBMaW51eCBrZXJuZWwgcmVzZXJ2ZXMgUmVnaW9uIG51bWJlciA0IGZvcgorICogaHVnZXBhZ2VzLiAgVGhhdCBtZWFucyB0aGUgYWRkcmVzc2VzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBuZWVkCisgKiB0byBiZSBzcGVjaWZpZWQuICBTcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQgb24gcHBjNjQsCisgKiBpMzg2IG9yIHg4Nl82NC4KKyAqCisgKiBOb3RlOiBUaGUgZGVmYXVsdCBzaGFyZWQgbWVtb3J5IGxpbWl0IGlzIHF1aXRlIGxvdyBvbiBtYW55IGtlcm5lbHMsCisgKiB5b3UgbWF5IG5lZWQgdG8gaW5jcmVhc2UgaXQgdmlhOgorICoKKyAqIGVjaG8gMjY4NDM1NDU2ID4gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgKKyAqCisgKiBUaGlzIHdpbGwgaW5jcmVhc2UgdGhlIG1heGltdW0gc2l6ZSBwZXIgc2hhcmVkIG1lbW9yeSBzZWdtZW50IHRvIDI1Nk1CLgorICogVGhlIG90aGVyIGxpbWl0IHRoYXQgeW91IHdpbGwgaGl0IGV2ZW50dWFsbHkgaXMgc2htYWxsIHdoaWNoIGlzIHRoZQorICogdG90YWwgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgaW4gcGFnZXMuIFRvIHNldCBpdCB0byAxNkdCIG9uIGEgc3lzdGVtCisgKiB3aXRoIGEgNGtCIHBhZ2VzaXplIGRvOgorICoKKyAqIGVjaG8gNDE5NDMwNCA+IC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc2htLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2lmbmRlZiBTSE1fSFVHRVRMQgorI2RlZmluZSBTSE1fSFVHRVRMQiAwNDAwMAorI2VuZGlmCisKKyNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCisKKyNkZWZpbmUgZHByaW50Zih4KSAgcHJpbnRmKHgpCisKKy8qIE9ubHkgaWE2NCByZXF1aXJlcyB0aGlzICovCisjaWZkZWYgX19pYTY0X18KKyNkZWZpbmUgQUREUiAodm9pZCAqKSgweDgwMDAwMDAwMDAwMDAwMDBVTCkKKyNkZWZpbmUgU0hNQVRfRkxBR1MgKFNITV9STkQpCisjZWxzZQorI2RlZmluZSBBRERSICh2b2lkICopKDB4MFVMKQorI2RlZmluZSBTSE1BVF9GTEFHUyAoMCkKKyNlbmRpZgorCitpbnQgbWFpbih2b2lkKQoreworCWludCBzaG1pZDsKKwl1bnNpZ25lZCBsb25nIGk7CisJY2hhciAqc2htYWRkcjsKKworCWlmICgoc2htaWQgPSBzaG1nZXQoMiwgTEVOR1RILAorCQkJICAgIFNITV9IVUdFVExCIHwgSVBDX0NSRUFUIHwgU0hNX1IgfCBTSE1fVykpIDwgMCkgeworCQlwZXJyb3IoInNobWdldCIpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoInNobWlkOiAweCV4XG4iLCBzaG1pZCk7CisKKwlzaG1hZGRyID0gc2htYXQoc2htaWQsIEFERFIsIFNITUFUX0ZMQUdTKTsKKwlpZiAoc2htYWRkciA9PSAoY2hhciAqKS0xKSB7CisJCXBlcnJvcigiU2hhcmVkIG1lbW9yeSBhdHRhY2ggZmFpbHVyZSIpOworCQlzaG1jdGwoc2htaWQsIElQQ19STUlELCBOVUxMKTsKKwkJZXhpdCgyKTsKKwl9CisJcHJpbnRmKCJzaG1hZGRyOiAlcFxuIiwgc2htYWRkcik7CisKKwlkcHJpbnRmKCJTdGFydGluZyB0aGUgd3JpdGVzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IExFTkdUSDsgaSsrKSB7CisJCXNobWFkZHJbaV0gPSAoY2hhcikoaSk7CisJCWlmICghKGkgJSAoMTAyNCAqIDEwMjQpKSkKKwkJCWRwcmludGYoIi4iKTsKKwl9CisJZHByaW50ZigiXG4iKTsKKworCWRwcmludGYoIlN0YXJ0aW5nIHRoZSBDaGVjay4uLiIpOworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKKwkJaWYgKHNobWFkZHJbaV0gIT0gKGNoYXIpaSkKKwkJCXByaW50ZigiXG5JbmRleCAlbHUgbWlzbWF0Y2hlZFxuIiwgaSk7CisJZHByaW50ZigiRG9uZS5cbiIpOworCisJaWYgKHNobWR0KChjb25zdCB2b2lkICopc2htYWRkcikgIT0gMCkgeworCQlwZXJyb3IoIkRldGFjaCBmYWlsdXJlIik7CisJCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOworCQlleGl0KDMpOworCX0KKworCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLyoKKyAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZXBhZ2UgbWVtb3J5IGluIGEgdXNlciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgbW1hcAorICogc3lzdGVtIGNhbGwuICBCZWZvcmUgcnVubmluZyB0aGlzIGFwcGxpY2F0aW9uLCBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGFkbWluaXN0cmF0b3IgaGFzIG1vdW50ZWQgdGhlIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIChvbiBzb21lIGRpcmVjdG9yeQorICogbGlrZSAvbW50KSB1c2luZyB0aGUgY29tbWFuZCBtb3VudCAtdCBodWdldGxiZnMgbm9kZXYgL21udC4gSW4gdGhpcworICogZXhhbXBsZSwgdGhlIGFwcCBpcyByZXF1ZXN0aW5nIG1lbW9yeSBvZiBzaXplIDI1Nk1CIHRoYXQgaXMgYmFja2VkIGJ5CisgKiBodWdlIHBhZ2VzLgorICoKKyAqIEZvciBpYTY0IGFyY2hpdGVjdHVyZSwgTGludXgga2VybmVsIHJlc2VydmVzIFJlZ2lvbiBudW1iZXIgNCBmb3IgaHVnZXBhZ2VzLgorICogVGhhdCBtZWFucyB0aGUgYWRkcmVzc2VzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBuZWVkIHRvIGJlCisgKiBzcGVjaWZpZWQuICBTcGVjaWZ5aW5nIGEgZml4ZWQgYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQgb24gcHBjNjQsIGkzODYKKyAqIG9yIHg4Nl82NC4KKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjZGVmaW5lIEZJTEVfTkFNRSAiL21udC9odWdlcGFnZWZpbGUiCisjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQorI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKQorCisvKiBPbmx5IGlhNjQgcmVxdWlyZXMgdGhpcyAqLworI2lmZGVmIF9faWE2NF9fCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHg4MDAwMDAwMDAwMDAwMDAwVUwpCisjZGVmaW5lIEZMQUdTIChNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEKQorI2Vsc2UKKyNkZWZpbmUgQUREUiAodm9pZCAqKSgweDBVTCkKKyNkZWZpbmUgRkxBR1MgKE1BUF9TSEFSRUQpCisjZW5kaWYKKwordm9pZCBjaGVja19ieXRlcyhjaGFyICphZGRyKQoreworCXByaW50ZigiRmlyc3QgaGV4IGlzICV4XG4iLCAqKCh1bnNpZ25lZCBpbnQgKilhZGRyKSk7Cit9CisKK3ZvaWQgd3JpdGVfYnl0ZXMoY2hhciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspCisJCSooYWRkciArIGkpID0gKGNoYXIpaTsKK30KKwordm9pZCByZWFkX2J5dGVzKGNoYXIgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJY2hlY2tfYnl0ZXMoYWRkcik7CisJZm9yIChpID0gMDsgaSA8IExFTkdUSDsgaSsrKQorCQlpZiAoKihhZGRyICsgaSkgIT0gKGNoYXIpaSkgeworCQkJcHJpbnRmKCJNaXNtYXRjaCBhdCAlbHVcbiIsIGkpOworCQkJYnJlYWs7CisJCX0KK30KKworaW50IG1haW4odm9pZCkKK3sKKwl2b2lkICphZGRyOworCWludCBmZDsKKworCWZkID0gb3BlbihGSUxFX05BTUUsIE9fQ1JFQVQgfCBPX1JEV1IsIDA3NTUpOworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKCJPcGVuIGZhaWxlZCIpOworCQlleGl0KDEpOworCX0KKworCWFkZHIgPSBtbWFwKEFERFIsIExFTkdUSCwgUFJPVEVDVElPTiwgRkxBR1MsIGZkLCAwKTsKKwlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CisJCXBlcnJvcigibW1hcCIpOworCQl1bmxpbmsoRklMRV9OQU1FKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlwcmludGYoIlJldHVybmVkIGFkZHJlc3MgaXMgJXBcbiIsIGFkZHIpOworCWNoZWNrX2J5dGVzKGFkZHIpOworCXdyaXRlX2J5dGVzKGFkZHIpOworCXJlYWRfYnl0ZXMoYWRkcik7CisKKwltdW5tYXAoYWRkciwgTEVOR1RIKTsKKwljbG9zZShmZCk7CisJdW5saW5rKEZJTEVfTkFNRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vbG9ja2luZyBiL0RvY3VtZW50YXRpb24vdm0vbG9ja2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2VmMDlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9sb2NraW5nCkBAIC0wLDAgKzEsMTMxIEBACitTdGFydGVkIE9jdCAxOTk5IGJ5IEthbm9qIFNhcmNhciA8a2Fub2pzYXJjYXJAeWFob28uY29tPgorCitUaGUgaW50ZW50IG9mIHRoaXMgZmlsZSBpcyB0byBoYXZlIGFuIHVwdG9kYXRlLCBydW5uaW5nIGNvbW1lbnRhcnkgCitmcm9tIGRpZmZlcmVudCBwZW9wbGUgYWJvdXQgaG93IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpcyBkb25lIAoraW4gdGhlIExpbnV4IHZtIGNvZGUuCisKK3BhZ2VfdGFibGVfbG9jayAmIG1tYXBfc2VtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYWdlIHN0ZWFsZXJzIHBpY2sgcHJvY2Vzc2VzIG91dCBvZiB0aGUgcHJvY2VzcyBwb29sIGFuZCBzY2FuIGZvciAKK3RoZSBiZXN0IHByb2Nlc3MgdG8gc3RlYWwgcGFnZXMgZnJvbS4gVG8gZ3VhcmFudGVlIHRoZSBleGlzdGVuY2UgCitvZiB0aGUgdmljdGltIG1tLCBhIG1tX2NvdW50IGluYyBhbmQgYSBtbWRyb3AgYXJlIGRvbmUgaW4gc3dhcF9vdXQoKS4KK1BhZ2Ugc3RlYWxlcnMgaG9sZCBrZXJuZWxfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgYSBidW5jaCBvZiByYWNlcy4KK1RoZSB2bWEgbGlzdCBvZiB0aGUgdmljdGltIG1tIGlzIGFsc28gc2Nhbm5lZCBieSB0aGUgc3RlYWxlciwgCithbmQgdGhlIHBhZ2VfdGFibGVfbG9jayBpcyB1c2VkIHRvIHByZXNlcnZlIGxpc3Qgc2FuaXR5IGFnYWluc3QgdGhlCitwcm9jZXNzIGFkZGluZy9kZWxldGluZyB0byB0aGUgbGlzdC4gVGhpcyBhbHNvIGd1YXJhbnRlZXMgZXhpc3RlbmNlCitvZiB0aGUgdm1hLiBWbWEgZXhpc3RlbmNlIGlzIG5vdCBndWFyYW50ZWVkIG9uY2UgdHJ5X3RvX3N3YXBfb3V0KCkgCitkcm9wcyB0aGUgcGFnZV90YWJsZV9sb2NrLiBUbyBndWFyYW50ZWUgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdW5kZXJseWluZyAKK2ZpbGUgc3RydWN0dXJlLCBhIGdldF9maWxlIGlzIGRvbmUgYmVmb3JlIHRoZSBzd2Fwb3V0KCkgbWV0aG9kIGlzIAoraW52b2tlZC4gVGhlIHBhZ2UgcGFzc2VkIGludG8gc3dhcG91dCgpIGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlIHJldXNlZAorZm9yIGEgZGlmZmVyZW50IHB1cnBvc2UgYmVjYXVzZSB0aGUgcGFnZSByZWZlcmVuY2UgY291bnQgZHVlIHRvIGJlaW5nCitwcmVzZW50IGluIHRoZSB1c2VyJ3MgcHRlIGlzIG5vdCByZWxlYXNlZCB0aWxsIGFmdGVyIHN3YXBvdXQoKSByZXR1cm5zLgorCitBbnkgY29kZSB0aGF0IG1vZGlmaWVzIHRoZSB2bWxpc3QsIG9yIHRoZSB2bV9zdGFydC92bV9lbmQvCit2bV9mbGFnczpWTV9MT0NLRUQvdm1fbmV4dCBvZiBhbnkgdm1hICppbiB0aGUgbGlzdCogbXVzdCBwcmV2ZW50IAora3N3YXBkIGZyb20gbG9va2luZyBhdCB0aGUgY2hhaW4uCisKK1RoZSBydWxlcyBhcmU6CisxLiBUbyBzY2FuIHRoZSB2bWxpc3QgKGxvb2sgYnV0IGRvbid0IHRvdWNoKSB5b3UgbXVzdCBob2xkIHRoZQorICAgbW1hcF9zZW0gd2l0aCByZWFkIGJpYXMsIGkuZS4gZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pCisyLiBUbyBtb2RpZnkgdGhlIHZtbGlzdCB5b3UgbmVlZCB0byBob2xkIHRoZSBtbWFwX3NlbSB3aXRoCisgICByZWFkJndyaXRlIGJpYXMsIGkuZS4gZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKSAgKkFORCoKKyAgIHlvdSBuZWVkIHRvIHRha2UgdGhlIHBhZ2VfdGFibGVfbG9jay4KKzMuIFRoZSBzd2FwcGVyIHRha2VzIF9qdXN0XyB0aGUgcGFnZV90YWJsZV9sb2NrLCB0aGlzIGlzIGRvbmUKKyAgIGJlY2F1c2UgdGhlIG1tYXBfc2VtIGNhbiBiZSBhbiBleHRyZW1lbHkgbG9uZyBsaXZlZCBsb2NrCisgICBhbmQgdGhlIHN3YXBwZXIganVzdCBjYW5ub3Qgc2xlZXAgb24gdGhhdC4KKzQuIFRoZSBleGNlcHRpb24gdG8gdGhpcyBydWxlIGlzIGV4cGFuZF9zdGFjaywgd2hpY2gganVzdAorICAgdGFrZXMgdGhlIHJlYWQgbG9jayBhbmQgdGhlIHBhZ2VfdGFibGVfbG9jaywgdGhpcyBpcyBvaworICAgYmVjYXVzZSBpdCBkb2Vzbid0IHJlYWxseSBtb2RpZnkgZmllbGRzIGFueWJvZHkgcmVsaWVzIG9uLgorNS4gWW91IG11c3QgYmUgYWJsZSB0byBndWFyYW50ZWUgdGhhdCB3aGlsZSBob2xkaW5nIHBhZ2VfdGFibGVfbG9jaworICAgb3IgcGFnZV90YWJsZV9sb2NrIG9mIG1tIEEsIHlvdSB3aWxsIG5vdCB0cnkgdG8gZ2V0IGVpdGhlciBsb2NrCisgICBmb3IgbW0gQi4KKworVGhlIGNhdmVhdHMgYXJlOgorMS4gZmluZF92bWEoKSBtYWtlcyB1c2Ugb2YsIGFuZCB1cGRhdGVzLCB0aGUgbW1hcF9jYWNoZSBwb2ludGVyIGhpbnQuCitUaGUgdXBkYXRlIG9mIG1tYXBfY2FjaGUgaXMgcmFjeSAocGFnZSBzdGVhbGVyIGNhbiByYWNlIHdpdGggb3RoZXIgY29kZQordGhhdCBpbnZva2VzIGZpbmRfdm1hIHdpdGggbW1hcF9zZW0gaGVsZCksIGJ1dCB0aGF0IGlzIG9rYXksIHNpbmNlIGl0IAoraXMgYSBoaW50LiBUaGlzIGNhbiBiZSBmaXhlZCwgaWYgZGVzaXJlZCwgYnkgaGF2aW5nIGZpbmRfdm1hIGdyYWIgdGhlCitwYWdlX3RhYmxlX2xvY2suCisKKworQ29kZSB0aGF0IGFkZC9kZWxldGUgZWxlbWVudHMgZnJvbSB0aGUgdm1saXN0IGNoYWluIGFyZQorMS4gY2FsbGVycyBvZiBpbnNlcnRfdm1fc3RydWN0CisyLiBjYWxsZXJzIG9mIG1lcmdlX3NlZ21lbnRzCiszLiBjYWxsZXJzIG9mIGF2bF9yZW1vdmUKKworQ29kZSB0aGF0IGNoYW5nZXMgdm1fc3RhcnQvdm1fZW5kL3ZtX2ZsYWdzOlZNX0xPQ0tFRCBvZiB2bWEncyBvbgordGhlIGxpc3Q6CisxLiBleHBhbmRfc3RhY2sKKzIuIG1wcm90ZWN0CiszLiBtbG9jaworNC4gbXJlbWFwCisKK0l0IGlzIGFkdmlzYWJsZSB0aGF0IGNoYW5nZXMgdG8gdm1fc3RhcnQvdm1fZW5kIGJlIHByb3RlY3RlZCwgYWx0aG91Z2ggCitpbiBzb21lIGNhc2VzIGl0IGlzIG5vdCByZWFsbHkgbmVlZGVkLiBFZywgdm1fc3RhcnQgaXMgbW9kaWZpZWQgYnkgCitleHBhbmRfc3RhY2soKSwgaXQgaXMgaGFyZCB0byBjb21lIHVwIHdpdGggYSBkZXN0cnVjdGl2ZSBzY2VuYXJpbyB3aXRob3V0IAoraGF2aW5nIHRoZSB2bWxpc3QgcHJvdGVjdGlvbiBpbiB0aGlzIGNhc2UuCisKK1RoZSBwYWdlX3RhYmxlX2xvY2sgbmVzdHMgd2l0aCB0aGUgaW5vZGUgaV9tbWFwX2xvY2sgYW5kIHRoZSBrbWVtIGNhY2hlCitjX3NwaW5sb2NrIHNwaW5sb2Nrcy4gIFRoaXMgaXMgb2theSwgc2luY2UgdGhlIGttZW0gY29kZSBhc2tzIGZvciBwYWdlcyBhZnRlcgorZHJvcHBpbmcgY19zcGlubG9jay4gIFRoZSBwYWdlX3RhYmxlX2xvY2sgYWxzbyBuZXN0cyB3aXRoIHBhZ2VjYWNoZV9sb2NrIGFuZAorcGFnZW1hcF9scnVfbG9jayBzcGlubG9ja3MsIGFuZCBubyBjb2RlIGFza3MgZm9yIG1lbW9yeSB3aXRoIHRoZXNlIGxvY2tzCitoZWxkLgorCitUaGUgcGFnZV90YWJsZV9sb2NrIGlzIGdyYWJiZWQgd2hpbGUgaG9sZGluZyB0aGUga2VybmVsX2xvY2sgc3Bpbm5pbmcgbW9uaXRvci4KKworVGhlIHBhZ2VfdGFibGVfbG9jayBpcyBhIHNwaW4gbG9jay4KKworTm90ZTogUFRMIGNhbiBhbHNvIGJlIHVzZWQgdG8gZ3VhcmFudGVlIHRoYXQgbm8gbmV3IGNsb25lcyB1c2luZyB0aGUKK21tIHN0YXJ0IHVwIC4uLiB0aGlzIGlzIGEgbG9vc2UgZm9ybSBvZiBzdGFiaWxpdHkgb24gbW1fdXNlcnMuIEZvcgorZXhhbXBsZSwgaXQgaXMgdXNlZCBpbiBjb3B5X21tIHRvIHByb3RlY3QgYWdhaW5zdCBhIHJhY2luZyB0bGJfZ2F0aGVyX21tdQorc2luZ2xlIGFkZHJlc3Mgc3BhY2Ugb3B0aW1pemF0aW9uLCBzbyB0aGF0IHRoZSB6YXBfcGFnZV9yYW5nZSAoZnJvbQordm10cnVuY2F0ZSkgZG9lcyBub3QgbG9zZSBzZW5kaW5nIGlwaSdzIHRvIGNsb25lZCB0aHJlYWRzIHRoYXQgbWlnaHQgCitiZSBzcGF3bmVkIHVuZGVybmVhdGggaXQgYW5kIGdvIHRvIHVzZXIgbW9kZSB0byBkcmFnIGluIHB0ZSdzIGludG8gdGxicy4KKworc3dhcF9saXN0X2xvY2svc3dhcF9kZXZpY2VfbG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHN3YXAgZGV2aWNlcyBhcmUgY2hhaW5lZCBpbiBwcmlvcml0eSBvcmRlciBmcm9tIHRoZSAic3dhcF9saXN0IiBoZWFkZXIuIAorVGhlICJzd2FwX2xpc3QiIGlzIHVzZWQgZm9yIHRoZSByb3VuZC1yb2JpbiBzd2FwaGFuZGxlIGFsbG9jYXRpb24gc3RyYXRlZ3kuCitUaGUgI2ZyZWUgc3dhcGhhbmRsZXMgaXMgbWFpbnRhaW5lZCBpbiAibnJfc3dhcF9wYWdlcyIuIFRoZXNlIHR3byB0b2dldGhlcgorYXJlIHByb3RlY3RlZCBieSB0aGUgc3dhcF9saXN0X2xvY2suIAorCitUaGUgc3dhcF9kZXZpY2VfbG9jaywgd2hpY2ggaXMgcGVyIHN3YXAgZGV2aWNlLCBwcm90ZWN0cyB0aGUgcmVmZXJlbmNlIAorY291bnRzIG9uIHRoZSBjb3JyZXNwb25kaW5nIHN3YXBoYW5kbGVzLCBtYWludGFpbmVkIGluIHRoZSAic3dhcF9tYXAiCithcnJheSwgYW5kIHRoZSAiaGlnaGVzdF9iaXQiIGFuZCAibG93ZXN0X2JpdCIgZmllbGRzLgorCitCb3RoIG9mIHRoZXNlIGFyZSBzcGlubG9ja3MsIGFuZCBhcmUgbmV2ZXIgYWNxdWlyZWQgZnJvbSBpbnRyIGxldmVsLiBUaGUKK2xvY2tpbmcgaGllcmFyY2h5IGlzIHN3YXBfbGlzdF9sb2NrIC0+IHN3YXBfZGV2aWNlX2xvY2suCisKK1RvIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBzd2FwIHNwYWNlIGRlbGV0aW9uIG9yIGFzeW5jIHJlYWRhaGVhZCBzd2FwaW5zCitkZWNpZGluZyB3aGV0aGVyIGEgc3dhcCBoYW5kbGUgaXMgYmVpbmcgdXNlZCwgaWUgd29ydGh5IG9mIGJlaW5nIHJlYWQgaW4KK2Zyb20gZGlzaywgYW5kIGFuIHVubWFwIC0+IHN3YXBfZnJlZSBtYWtpbmcgdGhlIGhhbmRsZSB1bnVzZWQsIHRoZSBzd2FwCitkZWxldGUgYW5kIHJlYWRhaGVhZCBjb2RlIGdyYWJzIGEgdGVtcCByZWZlcmVuY2Ugb24gdGhlIHN3YXBoYW5kbGUgdG8KK3ByZXZlbnQgd2FybmluZyBtZXNzYWdlcyBmcm9tIHN3YXBfZHVwbGljYXRlIDwtIHJlYWRfc3dhcF9jYWNoZV9hc3luYy4KKworU3dhcCBjYWNoZSBsb2NraW5nCistLS0tLS0tLS0tLS0tLS0tLS0KK1BhZ2VzIGFyZSBhZGRlZCBpbnRvIHRoZSBzd2FwIGNhY2hlIHdpdGgga2VybmVsX2xvY2sgaGVsZCwgdG8gbWFrZSBzdXJlCit0aGF0IG11bHRpcGxlIHBhZ2VzIGFyZSBub3QgYmVpbmcgYWRkZWQgKGFuZCBoZW5jZSBsb3N0KSBieSBhc3NvY2lhdGluZworYWxsIG9mIHRoZW0gd2l0aCB0aGUgc2FtZSBzd2FwaGFuZGxlLgorCitQYWdlcyBhcmUgZ3VhcmFudGVlZCBub3QgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY2FjaGUgaWYgdGhlIHBhZ2UgaXMgCisic2hhcmVkIjogaWUsIG90aGVyIHByb2Nlc3NlcyBob2xkIHJlZmVyZW5jZSBvbiB0aGUgcGFnZSBvciB0aGUgYXNzb2NpYXRlZCAKK3N3YXAgaGFuZGxlLiBUaGUgb25seSBjb2RlIHRoYXQgZG9lcyBub3QgZm9sbG93IHRoaXMgcnVsZSBpcyBzaHJpbmtfbW1hcCwKK3doaWNoIGRlbGV0ZXMgcGFnZXMgZnJvbSB0aGUgc3dhcCBjYWNoZSBpZiBubyBwcm9jZXNzIGhhcyBhIHJlZmVyZW5jZSBvbiAKK3RoZSBwYWdlIChtdWx0aXBsZSBwcm9jZXNzZXMgbWlnaHQgaGF2ZSByZWZlcmVuY2VzIG9uIHRoZSBjb3JyZXNwb25kaW5nCitzd2FwIGhhbmRsZSB0aG91Z2gpLiBsb29rdXBfc3dhcF9jYWNoZSgpIHJhY2VzIHdpdGggc2hyaW5rX21tYXAsIHdoZW4KK2VzdGFibGlzaGluZyBhIHJlZmVyZW5jZSBvbiBhIHNjYWNoZSBwYWdlLCBzbywgaXQgbXVzdCBjaGVjayB3aGV0aGVyIHRoZQorcGFnZSBpdCBsb2NhdGVkIGlzIHN0aWxsIGluIHRoZSBzd2FwY2FjaGUsIG9yIHNocmlua19tbWFwIGRlbGV0ZWQgaXQuCisoVGhpcyByYWNlIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNocmlua19tbWFwIGxvb2tzIGF0IHRoZSBwYWdlIHJlZgorY291bnQgd2l0aCBwYWdlY2FjaGVfbG9jaywgYnV0IHRoZW4gZHJvcHMgcGFnZWNhY2hlX2xvY2sgYmVmb3JlIGRlbGV0aW5nCit0aGUgcGFnZSBmcm9tIHRoZSBzY2FjaGUpLgorCitkb193cF9wYWdlIGFuZCBkb19zd2FwX3BhZ2UgaGF2ZSBNUCByYWNlcyBpbiB0aGVtIHdoaWxlIHRyeWluZyB0byBmaWd1cmUKK291dCB3aGV0aGVyIGEgcGFnZSBpcyAic2hhcmVkIiwgYnkgbG9va2luZyBhdCB0aGUgcGFnZV9jb3VudCArIHN3YXBfY291bnQuCitUbyBwcmVzZXJ2ZSB0aGUgc3VtIG9mIHRoZSBjb3VudHMsIHRoZSBwYWdlIGxvY2sgX211c3RfIGJlIGFjcXVpcmVkIGJlZm9yZQorY2FsbGluZyBpc19wYWdlX3NoYXJlZCAoZWxzZSBwcm9jZXNzZXMgbWlnaHQgc3dpdGNoIHRoZWlyIHN3YXBfY291bnQgcmVmcwordG8gdGhlIHBhZ2UgY291bnQgcmVmcywgYWZ0ZXIgdGhlIHBhZ2UgY291bnQgcmVmIGhhcyBiZWVuIHNuYXBzaG90dGVkKS4KKworU3dhcCBkZXZpY2UgZGVsZXRpb24gY29kZSBjdXJyZW50bHkgYnJlYWtzIGFsbCB0aGUgc2NhY2hlIGFzc3VtcHRpb25zLAorc2luY2UgaXQgZ3JhYnMgbmVpdGhlciBtbWFwX3NlbSBub3IgcGFnZV90YWJsZV9sb2NrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9udW1hIGIvRG9jdW1lbnRhdGlvbi92bS9udW1hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGRiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL251bWEKQEAgLTAsMCArMSw0MSBAQAorU3RhcnRlZCBOb3YgMTk5OSBieSBLYW5vaiBTYXJjYXIgPGthbm9qQHNnaS5jb20+CisKK1RoZSBpbnRlbnQgb2YgdGhpcyBmaWxlIGlzIHRvIGhhdmUgYW4gdXB0b2RhdGUsIHJ1bm5pbmcgY29tbWVudGFyeSAKK2Zyb20gZGlmZmVyZW50IHBlb3BsZSBhYm91dCBOVU1BIHNwZWNpZmljIGNvZGUgaW4gdGhlIExpbnV4IHZtLgorCitXaGF0IGlzIE5VTUE/IEl0IGlzIGFuIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGUgbWVtb3J5IGFjY2VzcyB0aW1lcworZm9yIGRpZmZlcmVudCByZWdpb25zIG9mIG1lbW9yeSBmcm9tIGEgZ2l2ZW4gcHJvY2Vzc29yIHZhcmllcworYWNjb3JkaW5nIHRvIHRoZSAiZGlzdGFuY2UiIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGZyb20gdGhlIHByb2Nlc3Nvci4KK0VhY2ggcmVnaW9uIG9mIG1lbW9yeSB0byB3aGljaCBhY2Nlc3MgdGltZXMgYXJlIHRoZSBzYW1lIGZyb20gYW55IAorY3B1LCBpcyBjYWxsZWQgYSBub2RlLiBPbiBzdWNoIGFyY2hpdGVjdHVyZXMsIGl0IGlzIGJlbmVmaWNpYWwgaWYKK3RoZSBrZXJuZWwgdHJpZXMgdG8gbWluaW1pemUgaW50ZXIgbm9kZSBjb21tdW5pY2F0aW9ucy4gU2NoZW1lcworZm9yIHRoaXMgcmFuZ2UgZnJvbSBrZXJuZWwgdGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgcmVwbGljYXRpb24KK2Fjcm9zcyBub2RlcywgYW5kIHRyeWluZyB0byBob3VzZSBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0CitrZXkgY29tcG9uZW50cyBvZiB0aGUga2VybmVsIG5lZWQgb24gbWVtb3J5IG9uIHRoYXQgbm9kZS4KKworQ3VycmVudGx5LCBhbGwgdGhlIG51bWEgc3VwcG9ydCBpcyB0byBwcm92aWRlIGVmZmljaWVudCBoYW5kbGluZworb2Ygd2lkZWx5IGRpc2NvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LCBzbyBhcmNoaXRlY3R1cmVzIHdoaWNoIAorYXJlIG5vdCBOVU1BIGJ1dCBjYW4gaGF2ZSBodWdlIGhvbGVzIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCitjYW4gdXNlIHRoZSBzYW1lIGNvZGUuIEFsbCB0aGlzIGNvZGUgaXMgYnJhY2tldGVkIGJ5IENPTkZJR19ESVNDT05USUdNRU0uCisKK1RoZSBpbml0aWFsIHBvcnQgaW5jbHVkZXMgTlVNQWl6aW5nIHRoZSBib290bWVtIGFsbG9jYXRvciBjb2RlIGJ5CitlbmNhcHN1bGF0aW5nIGFsbCB0aGUgcGllY2VzIG9mIGluZm9ybWF0aW9uIGludG8gYSBib290bWVtX2RhdGFfdAorc3RydWN0dXJlLiBOb2RlIHNwZWNpZmljIGNhbGxzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgYWxsb2NhdG9yLiAKK0luIHRoZW9yeSwgYW55IHBsYXRmb3JtIHdoaWNoIHVzZXMgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIHNob3VsZCAKK2JlIGFibGUgdG8gdG8gcHV0IHRoZSBib290bWVtIGFuZCBtZW1fbWFwIGRhdGEgc3RydWN0dXJlcyBhbnl3aGVyZQoraXQgZGVlbXMgYmVzdC4KKworRWFjaCBub2RlJ3MgcGFnZSBhbGxvY2F0aW9uIGRhdGEgc3RydWN0dXJlcyBoYXZlIGFsc28gYmVlbiBlbmNhcHN1bGF0ZWQKK2ludG8gYSBwZ19kYXRhX3QuIFRoZSBib290bWVtX2RhdGFfdCBpcyBqdXN0IG9uZSBwYXJ0IG9mIHRoaXMuIFRvIAorbWFrZSB0aGUgY29kZSBsb29rIHVuaWZvcm0gYmV0d2VlbiBOVU1BIGFuZCByZWd1bGFyIFVNQSBwbGF0Zm9ybXMsIAorVU1BIHBsYXRmb3JtcyBoYXZlIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGdfZGF0YV90IHRvbyAoY29udGlnX3BhZ2VfZGF0YSkuCitGb3IgdGhlIHNha2Ugb2YgdW5pZm9ybWl0eSwgdGhlIGZ1bmN0aW9uIG51bV9vbmxpbmVfbm9kZXMoKSBpcyBhbHNvIGRlZmluZWQKK2ZvciBhbGwgcGxhdGZvcm1zLiBBcyB3ZSBydW4gYmVuY2htYXJrcywgd2UgbWlnaHQgZGVjaWRlIHRvIE5VTUFpemUgCittb3JlIHZhcmlhYmxlcyBsaWtlIGxvd19vbl9tZW1vcnksIG5yX2ZyZWVfcGFnZXMgZXRjIGludG8gdGhlIHBnX2RhdGFfdC4KKworVGhlIE5VTUEgYXdhcmUgcGFnZSBhbGxvY2F0aW9uIGNvZGUgY3VycmVudGx5IHRyaWVzIHRvIGFsbG9jYXRlIHBhZ2VzIAorZnJvbSBkaWZmZXJlbnQgbm9kZXMgaW4gYSByb3VuZCByb2JpbiBtYW5uZXIuICBUaGlzIHdpbGwgYmUgY2hhbmdlZCB0byAKK2RvIGNvbmNlbnRyYXRpYyBjaXJjbGUgc2VhcmNoLCBzdGFydGluZyBmcm9tIGN1cnJlbnQgbm9kZSwgb25jZSB0aGUgCitOVU1BIHBvcnQgYWNoaWV2ZXMgbW9yZSBtYXR1cml0eS4gVGhlIGNhbGwgYWxsb2NfcGFnZXNfbm9kZSBoYXMgYmVlbiAKK2FkZGVkLCBzbyB0aGF0IGRyaXZlcnMgY2FuIG1ha2UgdGhlIGNhbGwgYW5kIG5vdCB3b3JyeSBhYm91dCB3aGV0aGVyIAoraXQgaXMgcnVubmluZyBvbiBhIE5VTUEgb3IgVU1BIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9vdmVyY29tbWl0LWFjY291bnRpbmcgYi9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWM3YjFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9vdmVyY29tbWl0LWFjY291bnRpbmcKQEAgLTAsMCArMSw3MyBAQAorVGhlIExpbnV4IGtlcm5lbCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG92ZXJjb21taXQgaGFuZGxpbmcgbW9kZXMKKworMAktCUhldXJpc3RpYyBvdmVyY29tbWl0IGhhbmRsaW5nLiBPYnZpb3VzIG92ZXJjb21taXRzIG9mCisJCWFkZHJlc3Mgc3BhY2UgYXJlIHJlZnVzZWQuIFVzZWQgZm9yIGEgdHlwaWNhbCBzeXN0ZW0uIEl0CisJCWVuc3VyZXMgYSBzZXJpb3VzbHkgd2lsZCBhbGxvY2F0aW9uIGZhaWxzIHdoaWxlIGFsbG93aW5nCisJCW92ZXJjb21taXQgdG8gcmVkdWNlIHN3YXAgdXNhZ2UuICByb290IGlzIGFsbG93ZWQgdG8gCisJCWFsbG9jYXRlIHNsaWdobHkgbW9yZSBtZW1vcnkgaW4gdGhpcyBtb2RlLiBUaGlzIGlzIHRoZSAKKwkJZGVmYXVsdC4KKworMQktCUFsd2F5cyBvdmVyY29tbWl0LiBBcHByb3ByaWF0ZSBmb3Igc29tZSBzY2llbnRpZmljCisJCWFwcGxpY2F0aW9ucy4KKworMgktCURvbid0IG92ZXJjb21taXQuIFRoZSB0b3RhbCBhZGRyZXNzIHNwYWNlIGNvbW1pdAorCQlmb3IgdGhlIHN5c3RlbSBpcyBub3QgcGVybWl0dGVkIHRvIGV4Y2VlZCBzd2FwICsgYQorCQljb25maWd1cmFibGUgcGVyY2VudGFnZSAoZGVmYXVsdCBpcyA1MCkgb2YgcGh5c2ljYWwgUkFNLgorCQlEZXBlbmRpbmcgb24gdGhlIHBlcmNlbnRhZ2UgeW91IHVzZSwgaW4gbW9zdCBzaXR1YXRpb25zCisJCXRoaXMgbWVhbnMgYSBwcm9jZXNzIHdpbGwgbm90IGJlIGtpbGxlZCB3aGlsZSBhY2Nlc3NpbmcKKwkJcGFnZXMgYnV0IHdpbGwgcmVjZWl2ZSBlcnJvcnMgb24gbWVtb3J5IGFsbG9jYXRpb24gYXMKKwkJYXBwcm9wcmlhdGUuCisKK1RoZSBvdmVyY29tbWl0IHBvbGljeSBpcyBzZXQgdmlhIHRoZSBzeXNjdGwgYHZtLm92ZXJjb21taXRfbWVtb3J5Jy4KKworVGhlIG92ZXJjb21taXQgcGVyY2VudGFnZSBpcyBzZXQgdmlhIGB2bS5vdmVyY29tbWl0X3JhdGlvJy4KKworVGhlIGN1cnJlbnQgb3ZlcmNvbW1pdCBsaW1pdCBhbmQgYW1vdW50IGNvbW1pdHRlZCBhcmUgdmlld2FibGUgaW4KKy9wcm9jL21lbWluZm8gYXMgQ29tbWl0TGltaXQgYW5kIENvbW1pdHRlZF9BUyByZXNwZWN0aXZlbHkuCisKK0dvdGNoYXMKKy0tLS0tLS0KKworVGhlIEMgbGFuZ3VhZ2Ugc3RhY2sgZ3Jvd3RoIGRvZXMgYW4gaW1wbGljaXQgbXJlbWFwLiBJZiB5b3Ugd2FudCBhYnNvbHV0ZQorZ3VhcmFudGVlcyBhbmQgcnVuIGNsb3NlIHRvIHRoZSBlZGdlIHlvdSBNVVNUIG1tYXAgeW91ciBzdGFjayBmb3IgdGhlIAorbGFyZ2VzdCBzaXplIHlvdSB0aGluayB5b3Ugd2lsbCBuZWVkLiBGb3IgdHlwaWNhbCBzdGFjayB1c2FnZSB0aGlzIGRvZXMKK25vdCBtYXR0ZXIgbXVjaCBidXQgaXQncyBhIGNvcm5lciBjYXNlIGlmIHlvdSByZWFsbHkgcmVhbGx5IGNhcmUKKworSW4gbW9kZSAyIHRoZSBNQVBfTk9SRVNFUlZFIGZsYWcgaXMgaWdub3JlZC4gCisKKworSG93IEl0IFdvcmtzCistLS0tLS0tLS0tLS0KKworVGhlIG92ZXJjb21taXQgaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBydWxlcworCitGb3IgYSBmaWxlIGJhY2tlZCBtYXAKKwlTSEFSRUQgb3IgUkVBRC1vbmx5CS0JMCBjb3N0ICh0aGUgZmlsZSBpcyB0aGUgbWFwIG5vdCBzd2FwKQorCVBSSVZBVEUgV1JJVEFCTEUJLQlzaXplIG9mIG1hcHBpbmcgcGVyIGluc3RhbmNlCisKK0ZvciBhbiBhbm9ueW1vdXMgb3IgL2Rldi96ZXJvIG1hcAorCVNIQVJFRAkJCS0Jc2l6ZSBvZiBtYXBwaW5nCisJUFJJVkFURSBSRUFELW9ubHkJLQkwIGNvc3QgKGJ1dCBvZiBsaXR0bGUgdXNlKQorCVBSSVZBVEUgV1JJVEFCTEUJLQlzaXplIG9mIG1hcHBpbmcgcGVyIGluc3RhbmNlCisKK0FkZGl0aW9uYWwgYWNjb3VudGluZworCVBhZ2VzIG1hZGUgd3JpdGFibGUgY29waWVzIGJ5IG1tYXAKKwlzaG1mcyBtZW1vcnkgZHJhd24gZnJvbSB0aGUgc2FtZSBwb29sCisKK1N0YXR1cworLS0tLS0tCisKK28JV2UgYWNjb3VudCBtbWFwIG1lbW9yeSBtYXBwaW5ncworbwlXZSBhY2NvdW50IG1wcm90ZWN0IGNoYW5nZXMgaW4gY29tbWl0CitvCVdlIGFjY291bnQgbXJlbWFwIGNoYW5nZXMgaW4gc2l6ZQorbwlXZSBhY2NvdW50IGJyaworbwlXZSBhY2NvdW50IG11bm1hcAorbwlXZSByZXBvcnQgdGhlIGNvbW1pdCBzdGF0dXMgaW4gL3Byb2MKK28JQWNjb3VudCBhbmQgY2hlY2sgb24gZm9yaworbwlSZXZpZXcgc3RhY2sgaGFuZGxpbmcvYnVpbGRpbmcgb24gZXhlYworbwlTSE1mcyBhY2NvdW50aW5nCitvCUltcGxlbWVudCBhY3R1YWwgbGltaXQgZW5mb3JjZW1lbnQKKworVG8gRG8KKy0tLS0tCitvCUFjY291bnQgcHRyYWNlIHBhZ2VzICh0aGlzIGlzIGhhcmQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZveWFnZXIudHh0IGIvRG9jdW1lbnRhdGlvbi92b3lhZ2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ5YWY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92b3lhZ2VyLnR4dApAQCAtMCwwICsxLDk1IEBACitSdW5uaW5nIExpbnV4IG9uIHRoZSBWb3lhZ2VyIEFyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIGZ1bGwgZGV0YWlscyBhbmQgY3VycmVudCBwcm9qZWN0IHN0YXR1cywgc2VlCisKK2h0dHA6Ly93d3cuaGFuc2VucGFydG5lcnNoaXAuY29tL3ZveWFnZXIKKworVGhlIHZveWFnZXIgYXJjaGl0ZWN0dXJlIHdhcyBkZXNpZ25lZCBieSBOQ1IgaW4gdGhlIG1pZCA4MHMgdG8gYmUgYQorZnVsbHkgU01QIGNhcGFibGUgUkFTIGNvbXB1dGluZyBhcmNoaXRlY3R1cmUgYnVpbHQgYXJvdW5kIGludGVsJ3MgNDg2CitjaGlwIHNldC4gIFRoZSB2b3lhZ2VyIGNhbWUgaW4gdGhyZWUgbGV2ZWxzIG9mIGFyY2hpdGVjdHVyYWwKK3NvcGhpc3RpY2F0aW9uOiAzLDQgYW5kIDUgLS0tIDEgYW5kIDIgbmV2ZXIgbWFkZSBpdCBvdXQgb2YgcHJvdG90eXBlLgorVGhlIGxpbnV4IHBhdGNoZXMgc3VwcG9ydCBvbmx5IHRoZSBMZXZlbCA1IHZveWFnZXIgYXJjaGl0ZWN0dXJlIChhbnkKK21hY2hpbmUgY2xhc3MgMzQzNSBhbmQgYWJvdmUpLgorCitUaGUgVm95YWdlciBBcmNoaXRlY3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWb3lhZ2VyIG1hY2hpbmVzIGNvbnNpc3Qgb2YgYSBCYXNlYm9hcmQgd2l0aCBhIDM4NiBkaWFnbm9zdGljCitwcm9jZXNzb3IsIGEgUG93ZXIgU3VwcGx5IEludGVyZmFjZSAoUFNJKSBhIFByaW1hcnkgYW5kIHBvc3NpYmx5CitTZWNvbmRhcnkgTWljcm9jaGFubmVsIGJ1cyBhbmQgYmV0d2VlbiAyIGFuZCAyMCB2b3lhZ2VyIHNsb3RzLiAgVGhlCit2b3lhZ2VyIHNsb3RzIGNhbiBiZSBwb3B1bGF0ZWQgd2l0aCBtZW1vcnkgYW5kIGNwdSBjYXJkcyAodXAgdG8gNEdCCittZW1vcnkgYW5kIGZyb20gMSA0ODYgdG8gMzIgUGVudGl1bSBQcm8gcHJvY2Vzc29ycykuICBJbnRlcm5hbGx5LCB0aGUKK3ZveWFnZXIgaGFzIGEgZHVhbCBhcmJpdHJhdGVkIHN5c3RlbSBidXMgYW5kIGEgY29uZmlndXJhdGlvbiBhbmQgdGVzdAorYnVzIChDQVQpLiAgVGhlIHZveWFnZXIgYnVzIHNwZWVkIGlzIDQwTUh6LiAgVGhlcmVmb3JlIChzaW5jZSBhbGwKK3ZveWFnZXIgY2FyZHMgYXJlIGR1YWwgcG9ydGVkIGZvciBlYWNoIHN5c3RlbSBidXMpIHRoZSBtYXhpbXVtCit0cmFuc2ZlciByYXRlIGlzIDMyME1iL3MgYnV0IG9ubHkgaWYgeW91IGhhdmUgeW91ciBzbG90IGNvbmZpZ3VyYXRpb24KK3R1bmVkIChvbmx5IG1lbW9yeSBjYXJkcyBjYW4gY29tbXVuaWNhdGUgd2l0aCBib3RoIGJ1c3NlcyBhdCBvbmNlLCBDUFUKK2NhcmRzIHV0aWxpc2UgdGhlbSBvbmUgYXQgYSB0aW1lKS4KKworVm95YWdlciBTTVAKKy0tLS0tLS0tLS0tCisKK1NpbmNlIHZveWFnZXIgd2FzIHRoZSBmaXJzdCBpbnRlbCBiYXNlZCBTTVAgc3lzdGVtLCBpdCBpcyBzbGlnaHRseQorbW9yZSBwcmltaXRpdmUgdGhhbiB0aGUgSW50ZWwgSU8tQVBJQyBhcHByb2FjaCB0byBTTVAuICBWb3lhZ2VyIGFsbG93cworYXJiaXRyYXJ5IGludGVycnVwdCByb3V0aW5nIChpbmNsdWRpbmcgcHJvY2Vzc29yIGFmZmluaXR5IHJvdXRpbmcpIG9mCithbGwgMTYgUEMgdHlwZSBpbnRlcnJ1cHRzLiAgSG93ZXZlciBpdCBkb2VzIHRoaXMgYnkgdXNpbmcgYSBtb2RpZmllZAorNTI1OSBtYXN0ZXIvc2xhdmUgY2hpcCBzZXQgaW5zdGVhZCBvZiBhbiBBUElDIGJ1cy4gIEFkZGl0aW9uYWxseSwKK3ZveWFnZXIgc3VwcG9ydHMgQ3Jvc3MgUHJvY2Vzc29yIEludGVycnVwdHMgKENQSSkgZXF1aXZhbGVudCB0byB0aGUKK0FQSUMgSVBJcy4gIFRoZXJlIGFyZSB0d28gcm91dGVkIHZveWFnZXIgaW50ZXJydXB0IGxpbmVzIHByb3ZpZGVkIHRvCitlYWNoIHNsb3QuCisKK1Byb2Nlc3NvciBDYXJkcworLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNvbWUgaW4gc2luZ2xlLCBkeWFkaWMgYW5kIHF1YWQgY29uZmlndXJhdGlvbnMgKHRoZSBxdWFkcyBhcmUKK3Byb2JsZW1hdGljLS1zZWUgbGF0ZXIpLiAgVGhlIG1heGltdW0gY29uZmlndXJhdGlvbiBpcyA4IHF1YWQgY2FyZHMKK2ZvciAzMiB3YXkgU01QLgorCitRdWFkIFByb2Nlc3NvcnMKKy0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHZveWFnZXIgb25seSBzdXBwbGllcyB0d28gaW50ZXJydXB0IGxpbmVzIHRvIGVhY2ggUHJvY2Vzc29yCitjYXJkLCB0aGUgUXVhZCBwcm9jZXNzb3JzIGhhdmUgdG8gYmUgY29uZmlndXJlZCAoYW5kIEJvb3RzdHJhcHBlZCkgaW4KK2FzIGEgcGFpciBvZiBNYXN0ZXIvU2xhdmUgcHJvY2Vzc29ycy4KKworSW4gZmFjdCwgbW9zdCBRdWFkIGNhcmRzIG9ubHkgYWNjZXB0IG9uZSBWSUMgaW50ZXJydXB0IGxpbmUsIHNvIHRoZXkKK2hhdmUgb25lIGludGVycnVwdCBoYW5kbGluZyBwcm9jZXNzb3IgKGNhbGxlZCB0aGUgVklDIGV4dGVuZGVkCitwcm9jZXNzb3IpIGFuZCB0aHJlZSBub24taW50ZXJydXB0IGhhbmRsaW5nIHByb2Nlc3NvcnMuCisKK0N1cnJlbnQgU3RhdHVzCistLS0tLS0tLS0tLS0tLQorCitUaGUgU3lzdGVtIHdpbGwgYm9vdCBvbiBNb25vLCBEeWFkIGFuZCBRdWFkIGNhcmRzLiAgVGhlcmUgd2FzCitvcmlnaW5hbGx5IGEgUXVhZCBib290IHByb2JsZW0gd2hpY2ggaGFzIGJlZW4gZml4ZWQgYnkgcHJvcGVyIGdkdAorYWxpZ25tZW50IGluIHRoZSBpbml0aWFsIGJvb3QgbG9hZGVyLiAgSWYgeW91IHN0aWxsIGNhbm5vdCBnZXQgeW91cgordm95YWdlciBzeXN0ZW0gdG8gYm9vdCwgZW1haWwgbWUgYXQ6CisKKzxKLkUuSi5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tPgorCisKK1RoZSBRdWFkIGNhcmRzIG5vdyBzdXBwb3J0IHVzaW5nIHRoZSBzZXBhcmF0ZSBRdWFkIENQSSB2ZWN0b3JzIGluc3RlYWQKK29mIGdvaW5nIHRocm91Z2ggdGhlIFZJQyBtYWlsYm94IHN5c3RlbS4KKworVGhlIExldmVsIDQgYXJjaGl0ZWN0dXJlICgzNDMwIGFuZCAzMzYwIE1hY2hpbmVzKSBzaG91bGQgYWxzbyB3b3JrCitmaW5lLgorCitEdW1wIFN3aXRjaAorLS0tLS0tLS0tLS0KKworVGhlIHZveWFnZXIgZHVtcCBzd2l0Y2ggc2VuZHMgb3V0IGEgYnJvYWRjYXN0IE5NSSB3aGljaCB0aGUgdm95YWdlcgorY29kZSBpbnRlcmNlcHRzIGFuZCBkb2VzIGEgdGFzayBkdW1wLgorCitQb3dlciBTd2l0Y2gKKy0tLS0tLS0tLS0tLQorCitUaGUgZnJvbnQgcGFuZWwgcG93ZXIgc3dpdGNoIGlzIGludGVyY2VwdGVkIGJ5IHRoZSBrZXJuZWwgYW5kIHNob3VsZAorY2F1c2UgYSBzeXN0ZW0gc2h1dGRvd24gYW5kIHBvd2VyIG9mZi4KKworQSBOb3RlIEFib3V0IE1peGVkIENQVSBTeXN0ZW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGludXggaXNuJ3QgZGVzaWduZWQgdG8gaGFuZGxlIG1peGVkIENQVSBzeXN0ZW1zIHZlcnkgd2VsbC4gIEluIG9yZGVyCit0byBnZXQgZXZlcnl0aGluZyBnb2luZyB5b3UgKm11c3QqIG1ha2Ugc3VyZSB0aGF0IHlvdXIgbG93ZXN0CitjYXBhYmlsaXR5IENQVSBpcyB1c2VkIGZvciBib290aW5nLiAgQWxzbywgbWl4aW5nIENQVSBjbGFzc2VzCisoZS5nLiA0ODYgYW5kIDU4NikgaXMgcmVhbGx5IG5vdCBnb2luZyB0byB3b3JrIHZlcnkgd2VsbCBhdCBhbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjZTMwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYwpAQCAtMCwwICsxLDE5IEBACitBbnkgdzEgZGV2aWNlIG11c3QgYmUgY29ubmVjdGVkIHRvIHcxIGJ1cyBtYXN0ZXIgZGV2aWNlIC0gZm9yIGV4YW1wbGUKK2RzOTQ5MCB1c2IgZGV2aWNlIG9yIHcxLW92ZXItR1BJTyBvciBSUzIzMiBjb252ZXJ0ZXIuCitEcml2ZXIgZm9yIHcxIGJ1cyBtYXN0ZXIgbXVzdCBwcm92aWRlIHNldmVyYWwgZnVuY3Rpb25zKHlvdSBjYW4gZmluZAordGhlbSBpbiBzdHJ1Y3QgdzFfYnVzX21hc3RlciBkZWZpbml0aW9uIGluIHcxLmgpIHdoaWNoIHRoZW4gd2lsbCBiZQorY2FsbGVkIGJ5IHcxIGNvcmUgdG8gc2VuZCB2YXJpb3VzIGNvbW1hbmRzIG92ZXIgdzEgYnVzKGJ5IGRlZmF1bHQgaXQgaXMKK3Jlc2V0IGFuZCBzZWFyY2ggY29tbWFuZHMpLiBXaGVuIHNvbWUgZGV2aWNlIGlzIGZvdW5kIG9uIHRoZSBidXMsIHcxIGNvcmUKK2NoZWNrcyBpZiBkcml2ZXIgZm9yIGl0J3MgZmFtaWx5IGlzIGxvYWRlZC4KK0lmIGRyaXZlciBpcyBsb2FkZWQgdzEgY29yZSBjcmVhdGVzIG5ldyB3MV9zbGF2ZSBvYmplY3QgYW5kIHJlZ2lzdGVycyBpdAoraW4gdGhlIHN5c3RlbShjcmVhdGVzIHNvbWUgZ2VuZXJpYyBzeXNmcyBmaWxlcyhzdHJ1Y3QgdzFfZmFtaWx5X29wcyBpbgordzFfZmFtaWx5LmgpLCBub3RpZmllcyBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lciBhbmQgc28gb24uLi4pLgorSXQgaXMgZGV2aWNlIGRyaXZlcidzIGJ1c2luZXNzIHRvIHByb3ZpZGUgYW55IGNvbW11bmljYXRpb24gbWV0aG9kCit1cHN0cmVhbS4KK0ZvciBleGFtcGxlIHcxX3RoZXJtIGRyaXZlcihkczE4PzIwIHRoZXJtYWwgc2Vuc29yIGZhbWlseSBkcml2ZXIpCitwcm92aWRlcyB0ZW1wZXJhdHVyZSByZWFkaW5nIGZ1bmN0aW9uIHdoaWNoIGlzIGJvdW5kIHRvIC0+cmJpbigpIG1ldGhvZAorb2YgdGhlIGFib3ZlIHcxX2ZhbWlseV9vcHMgc3RydWN0dXJlLgordzFfc21lbSAtIGRyaXZlciBmb3Igc2ltcGxlIDY0Yml0IG1lbW9yeSBjZWxsIHByb3ZpZGVzIElEIHJlYWRpbmcKK21ldGhvZC4KKworWW91IGNhbiBjYWxsIGFib3ZlIG1ldGhvZHMgYnkgcmVhZGluZyBhcHByb3ByaWF0ZSBzeXNmcyBmaWxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvcGN3ZC13YXRjaGRvZy50eHQgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3Bjd2Qtd2F0Y2hkb2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTg3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3Bjd2Qtd2F0Y2hkb2cudHh0CkBAIC0wLDAgKzEsMTM1IEBACisgICAgICAgICAgICAgICAgICAgICBCZXJrc2hpcmUgUHJvZHVjdHMgUEMgV2F0Y2hkb2cgQ2FyZAorICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIElTQSBDYXJkcyAgUmV2aXNpb24gQSBhbmQgQworICAgICAgICAgICBEb2N1bWVudGF0aW9uIGFuZCBEcml2ZXIgYnkgS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+CisKKyBUaGUgUEMgV2F0Y2hkb2cgaXMgYSBjYXJkIHRoYXQgb2ZmZXJzIHRoZSBzYW1lIHR5cGUgb2YgZnVuY3Rpb25hbGl0eSB0aGF0CisgdGhlIFdEVCBjYXJkIGRvZXMsIG9ubHkgaXQgZG9lc24ndCByZXF1aXJlIGFuIElSUSB0byBydW4uICBGdXJ0aGVybW9yZSwKKyB0aGUgUmV2aXNpb24gQyBjYXJkIGFsbG93cyB5b3UgdG8gbW9uaXRvciBhbnkgSU8gUG9ydCB0byBhdXRvbWF0aWNhbGx5CisgdHJpZ2dlciB0aGUgY2FyZCBpbnRvIGJlaW5nIHJlc2V0LiAgVGhpcyB3YXkgeW91IGNhbiBtYWtlIHRoZSBjYXJkCisgbW9uaXRvciBoYXJkIGRyaXZlIHN0YXR1cywgb3IgYW55dGhpbmcgZWxzZSB5b3UgbmVlZC4KKworIFRoZSBXYXRjaGRvZyBEcml2ZXIgaGFzIG9uZSBiYXNpYyByb2xlOiB0byB0YWxrIHRvIHRoZSBjYXJkIGFuZCBzZW5kCisgc2lnbmFscyB0byBpdCBzbyBpdCBkb2Vzbid0IHJlc2V0IHlvdXIgY29tcHV0ZXIgLi4uIGF0IGxlYXN0IGR1cmluZworIG5vcm1hbCBvcGVyYXRpb24uCisKKyBUaGUgV2F0Y2hkb2cgRHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBmaW5kIHlvdXIgd2F0Y2hkb2cgY2FyZCwgYW5kIHdpbGwKKyBhdHRhY2ggYSBydW5uaW5nIGRyaXZlciBmb3IgdXNlIHdpdGggdGhhdCBjYXJkLiAgQWZ0ZXIgdGhlIHdhdGNoZG9nCisgZHJpdmVycyBoYXZlIGluaXRpYWxpemVkLCB5b3UgY2FuIHRoZW4gdGFsayB0byB0aGUgY2FyZCB1c2luZyB0aGUgUEMKKyBXYXRjaGRvZyBwcm9ncmFtLCBhdmFpbGFibGUgZnJvbSBodHRwOi8vZnRwLmJpdGdhdGUuY29tL3Bjd2QvLgorCisgSSBzdWdnZXN0IHB1dHRpbmcgYSAid2F0Y2hkb2cgLWQiIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIGFuIGZzY2ssIGFuZAorIGEgIndhdGNoZG9nIC1lIC10IDEiIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbmQgb2YgYW4gZnNjay4gIChSZW1lbWJlcgorIHRvIHJ1biB0aGUgcHJvZ3JhbSB3aXRoIGFuICImIiB0byBydW4gaXQgaW4gdGhlIGJhY2tncm91bmQhKQorCisgSWYgeW91IHdhbnQgdG8gd3JpdGUgYSBwcm9ncmFtIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgUEMgV2F0Y2hkb2cKKyBkcml2ZXIsIHNpbXBseSBkbyB0aGUgZm9sbG93aW5nOgorCistLSBTbmlwcGV0IG9mIGNvZGUgLS0KKy8qCisgKiBXYXRjaGRvZyBEcml2ZXIgVGVzdCBQcm9ncmFtCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisKK2ludCBmZDsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IHNlbmRzIGFuIElPQ1RMIHRvIHRoZSBkcml2ZXIsIHdoaWNoIGluIHR1cm4gdGlja3MKKyAqIHRoZSBQQyBXYXRjaGRvZyBjYXJkIHRvIHJlc2V0IGl0cyBpbnRlcm5hbCB0aW1lciBzbyBpdCBkb2Vzbid0IHRyaWdnZXIKKyAqIGEgY29tcHV0ZXIgcmVzZXQuCisgKi8KK3ZvaWQga2VlcF9hbGl2ZSh2b2lkKQoreworICAgIGludCBkdW1teTsKKworICAgIGlvY3RsKGZkLCBXRElPQ19LRUVQQUxJVkUsICZkdW1teSk7Cit9CisKKy8qCisgKiBUaGUgbWFpbiBwcm9ncmFtLiAgUnVuIHRoZSBwcm9ncmFtIHdpdGggIi1kIiB0byBkaXNhYmxlIHRoZSBjYXJkLAorICogb3IgIi1lIiB0byBlbmFibGUgdGhlIGNhcmQuCisgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgZmQgPSBvcGVuKCIvZGV2L3dhdGNoZG9nIiwgT19XUk9OTFkpOworCisgICAgaWYgKGZkID09IC0xKSB7CisJZnByaW50ZihzdGRlcnIsICJXYXRjaGRvZyBkZXZpY2Ugbm90IGVuYWJsZWQuXG4iKTsKKwlmZmx1c2goc3RkZXJyKTsKKwlleGl0KC0xKTsKKyAgICB9CisKKyAgICBpZiAoYXJnYyA+IDEpIHsKKwlpZiAoIXN0cm5jYXNlY21wKGFyZ3ZbMV0sICItZCIsIDIpKSB7CisJICAgIGlvY3RsKGZkLCBXRElPQ19TRVRPUFRJT05TLCBXRElPU19ESVNBQkxFQ0FSRCk7CisJICAgIGZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgY2FyZCBkaXNhYmxlZC5cbiIpOworCSAgICBmZmx1c2goc3RkZXJyKTsKKwkgICAgZXhpdCgwKTsKKwl9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChhcmd2WzFdLCAiLWUiLCAyKSkgeworCSAgICBpb2N0bChmZCwgV0RJT0NfU0VUT1BUSU9OUywgV0RJT1NfRU5BQkxFQ0FSRCk7CisJICAgIGZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgY2FyZCBlbmFibGVkLlxuIik7CisJICAgIGZmbHVzaChzdGRlcnIpOworCSAgICBleGl0KDApOworCX0gZWxzZSB7CisJICAgIGZwcmludGYoc3RkZXJyLCAiLWQgdG8gZGlzYWJsZSwgLWUgdG8gZW5hYmxlLlxuIik7CisJICAgIGZwcmludGYoc3RkZXJyLCAicnVuIGJ5IGl0c2VsZiB0byB0aWNrIHRoZSBjYXJkLlxuIik7CisJICAgIGZmbHVzaChzdGRlcnIpOworCSAgICBleGl0KDApOworCX0KKyAgICB9IGVsc2UgeworCWZwcmludGYoc3RkZXJyLCAiV2F0Y2hkb2cgVGlja2luZyBBd2F5IVxuIik7CisJZmZsdXNoKHN0ZGVycik7CisgICAgfQorCisgICAgd2hpbGUoMSkgeworCWtlZXBfYWxpdmUoKTsKKwlzbGVlcCgxKTsKKyAgICB9Cit9CistLSBFbmQgc25pcHBldCAtLQorCisgT3RoZXIgSU9DVEwgZnVuY3Rpb25zIGluY2x1ZGU6CisKKwlXRElPQ19HRVRTVVBQT1JUCisJCVRoaXMgcmV0dXJucyB0aGUgc3VwcG9ydCBvZiB0aGUgY2FyZCBpdHNlbGYuICBUaGlzCisJCXJldHVybnMgaW4gc3RydWN0dXJlICJQQ1dEUyIgd2hpY2ggcmV0dXJuczoKKwkJCW9wdGlvbnMgPSBXRElPU19URU1QUEFOSUMKKwkJCQkgIChUaGlzIGNhcmQgc3VwcG9ydHMgdGVtcGVyYXR1cmUpCisJCQlmaXJtd2FyZV92ZXJzaW9uID0geHh4eAorCQkJCSAgKEZpcm13YXJlIHZlcnNpb24gb2YgdGhlIGNhcmQpCisKKwlXRElPQ19HRVRTVEFUVVMKKwkJVGhpcyByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGNhcmQsIHdpdGggdGhlIGJpdHMgb2YKKwkJV0RJT0ZfKiBiaXR3aXNlLWFuZGVkIGludG8gdGhlIHZhbHVlLiAgKFRoZSBjb21tZW50cworCQlhcmUgaW4gbGludXgvcGN3ZC5oKQorCisJV0RJT0NfR0VUQk9PVFNUQVRVUworCQlUaGlzIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgY2FyZCB0aGF0IHdhcyByZXBvcnRlZAorCQlhdCBib290dXAuCisKKwlXRElPQ19HRVRURU1QCisJCVRoaXMgcmV0dXJucyB0aGUgdGVtcGVyYXR1cmUgb2YgdGhlIGNhcmQuICAoWW91IGNhbiBhbHNvCisJCXJlYWQgL2Rldi93YXRjaGRvZywgd2hpY2ggZ2l2ZXMgYSB0ZW1wZXJhdHVyZSB1cGRhdGUKKwkJZXZlcnkgc2Vjb25kLikKKworCVdESU9DX1NFVE9QVElPTlMKKwkJVGhpcyBsZXRzIHlvdSBzZXQgdGhlIG9wdGlvbnMgb2YgdGhlIGNhcmQuICBZb3UgY2FuIGVpdGhlcgorCQllbmFibGUgb3IgZGlzYWJsZSB0aGUgY2FyZCB0aGlzIHdheS4KKworCVdESU9DX0tFRVBBTElWRQorCQlUaGlzIHBpbmdzIHRoZSBjYXJkIHRvIHRlbGwgaXQgbm90IHRvIHJlc2V0IHlvdXIgY29tcHV0ZXIuCisKKyBBbmQgdGhhdCdzIGFsbCBzaGUgd3JvdGUhCisKKyAtLSBLZW4gSG9sbGlzCisgICAgKGtlbmppQGJpdGdhdGUuY29tKQorCisoVGhpcyBkb2N1bWVudGF0aW9uIG1heSBiZSBvdXQgb2YgZGF0ZS4gIENoZWNrCisgaHR0cDovL2Z0cC5iaXRnYXRlLmNvbS9wY3dkLyBmb3IgdGhlIGFic29sdXRlIGxhdGVzdCBhZGRpdGlvbnMuKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy1hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Mzg4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL3dhdGNoZG9nLWFwaS50eHQKQEAgLTAsMCArMSwzOTkgQEAKK1RoZSBMaW51eCBXYXRjaGRvZyBkcml2ZXIgQVBJLgorCitDb3B5cmlnaHQgMjAwMiBDaHJpc3RlciBXZWluZ2VsIDx3aW5nZWxAbmFuby1zeXN0ZW0uY29tPgorCitTb21lIHBhcnRzIG9mIHRoaXMgZG9jdW1lbnQgYXJlIGNvcGllZCB2ZXJiYXRpbSBmcm9tIHRoZSBzYmM2MHh4d2R0Citkcml2ZXIgd2hpY2ggaXMgKGMpIENvcHlyaWdodCAyMDAwIEpha29iIE9lc3RlcmdhYXJkIDxqYWtvYkBvc3RlbmZlbGQuZGs+CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgTGludXggMi40LjE4IGtlcm5lbC4KKworSW50cm9kdWN0aW9uOgorCitBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbiByZXNldCB0aGUKK2NvbXB1dGVyIHN5c3RlbSBpbiBjYXNlIG9mIGEgc29mdHdhcmUgZmF1bHQuICBZb3UgcHJvYmFibHkga25ldyB0aGF0CithbHJlYWR5LgorCitVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIHdhdGNoZG9nIGRyaXZlciB2aWEgdGhlCisvZGV2L3dhdGNoZG9nIHNwZWNpYWwgZGV2aWNlIGZpbGUgdGhhdCB1c2Vyc3BhY2UgaXMgc3RpbGwgYWxpdmUsIGF0CityZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbiBvY2N1cnMsIHRoZSBkcml2ZXIgd2lsbAordXN1YWxseSB0ZWxsIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIsIGFuZAordGhhdCB0aGUgd2F0Y2hkb2cgc2hvdWxkIHdhaXQgZm9yIHlldCBhbm90aGVyIGxpdHRsZSB3aGlsZSB0byByZXNldAordGhlIHN5c3RlbS4gIElmIHVzZXJzcGFjZSBmYWlscyAoUkFNIGVycm9yLCBrZXJuZWwgYnVnLCB3aGF0ZXZlciksIHRoZQorbm90aWZpY2F0aW9ucyBjZWFzZSB0byBvY2N1ciwgYW5kIHRoZSBoYXJkd2FyZSB3YXRjaGRvZyB3aWxsIHJlc2V0IHRoZQorc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCisKK1RoZSBMaW51eCB3YXRjaGRvZyBBUEkgaXMgYSByYXRoZXIgQUQgaG9jIGNvbnN0cnVjdGlvbiBhbmQgZGlmZmVyZW50Citkcml2ZXJzIGltcGxlbWVudCBkaWZmZXJlbnQsIGFuZCBzb21ldGltZXMgaW5jb21wYXRpYmxlLCBwYXJ0cyBvZiBpdC4KK1RoaXMgZmlsZSBpcyBhbiBhdHRlbXB0IHRvIGRvY3VtZW50IHRoZSBleGlzdGluZyB1c2FnZSBhbmQgYWxsb3cKK2Z1dHVyZSBkcml2ZXIgd3JpdGVycyB0byB1c2UgaXQgYXMgYSByZWZlcmVuY2UuCisKK1RoZSBzaW1wbGVzdCBBUEk6CisKK0FsbCBkcml2ZXJzIHN1cHBvcnQgdGhlIGJhc2ljIG1vZGUgb2Ygb3BlcmF0aW9uLCB3aGVyZSB0aGUgd2F0Y2hkb2cKK2FjdGl2YXRlcyBhcyBzb29uIGFzIC9kZXYvd2F0Y2hkb2cgaXMgb3BlbmVkIGFuZCB3aWxsIHJlYm9vdCB1bmxlc3MKK3RoZSB3YXRjaGRvZyBpcyBwaW5nZWQgd2l0aGluIGEgY2VydGFpbiB0aW1lLCB0aGlzIHRpbWUgaXMgY2FsbGVkIHRoZQordGltZW91dCBvciBtYXJnaW4uICBUaGUgc2ltcGxlc3Qgd2F5IHRvIHBpbmcgdGhlIHdhdGNoZG9nIGlzIHRvIHdyaXRlCitzb21lIGRhdGEgdG8gdGhlIGRldmljZS4gIFNvIGEgdmVyeSBzaW1wbGUgd2F0Y2hkb2cgZGFlbW9uIHdvdWxkIGxvb2sKK2xpa2UgdGhpczoKKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgeworCWludCBmZD1vcGVuKCIvZGV2L3dhdGNoZG9nIixPX1dST05MWSk7CisJaWYgKGZkPT0tMSkgeworCQlwZXJyb3IoIndhdGNoZG9nIik7CisJCWV4aXQoMSk7CisJfQorCXdoaWxlKDEpIHsKKwkJd3JpdGUoZmQsICJcMCIsIDEpOworCQlzbGVlcCgxMCk7CisJfQorfQorCitBIG1vcmUgYWR2YW5jZWQgZHJpdmVyIGNvdWxkIGZvciBleGFtcGxlIGNoZWNrIHRoYXQgYSBIVFRQIHNlcnZlciBpcworc3RpbGwgcmVzcG9uZGluZyBiZWZvcmUgZG9pbmcgdGhlIHdyaXRlIGNhbGwgdG8gcGluZyB0aGUgd2F0Y2hkb2cuCisKK1doZW4gdGhlIGRldmljZSBpcyBjbG9zZWQsIHRoZSB3YXRjaGRvZyBpcyBkaXNhYmxlZC4gIFRoaXMgaXMgbm90CithbHdheXMgc3VjaCBhIGdvb2QgaWRlYSwgc2luY2UgaWYgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHdhdGNoZG9nCitkYWVtb24gYW5kIGl0IGNyYXNoZXMgdGhlIHN5c3RlbSB3aWxsIG5vdCByZWJvb3QuICBCZWNhdXNlIG9mIHRoaXMsCitzb21lIG9mIHRoZSBkcml2ZXJzIHN1cHBvcnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uICJEaXNhYmxlIHdhdGNoZG9nCitzaHV0ZG93biBvbiBjbG9zZSIsIENPTkZJR19XQVRDSERPR19OT1dBWU9VVC4gIElmIGl0IGlzIHNldCB0byBZIHdoZW4KK2NvbXBpbGluZyB0aGUga2VybmVsLCB0aGVyZSBpcyBubyB3YXkgb2YgZGlzYWJsaW5nIHRoZSB3YXRjaGRvZyBvbmNlCitpdCBoYXMgYmVlbiBzdGFydGVkLiAgU28sIGlmIHRoZSB3YXRjaGRvZyBkYW1lb24gY3Jhc2hlcywgdGhlIHN5c3RlbQord2lsbCByZWJvb3QgYWZ0ZXIgdGhlIHRpbWVvdXQgaGFzIHBhc3NlZC4KKworU29tZSBvdGhlciBkcml2ZXJzIHdpbGwgbm90IGRpc2FibGUgdGhlIHdhdGNoZG9nLCB1bmxlc3MgYSBzcGVjaWZpYworbWFnaWMgY2hhcmFjdGVyICdWJyBoYXMgYmVlbiBzZW50IC9kZXYvd2F0Y2hkb2cganVzdCBiZWZvcmUgY2xvc2luZwordGhlIGZpbGUuICBJZiB0aGUgdXNlcnNwYWNlIGRhZW1vbiBjbG9zZXMgdGhlIGZpbGUgd2l0aG91dCBzZW5kaW5nCit0aGlzIHNwZWNpYWwgY2hhcmFjdGVyLCB0aGUgZHJpdmVyIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRhZW1vbiAoYW5kCit1c2Vyc3BhY2UgaW4gZ2VuZXJhbCkgZGllZCwgYW5kIHdpbGwgc3RvcCBwaW5naW5nIHRoZSB3YXRjaGRvZyB3aXRob3V0CitkaXNhYmxpbmcgaXQgZmlyc3QuICBUaGlzIHdpbGwgdGhlbiBjYXVzZSBhIHJlYm9vdC4KKworVGhlIGlvY3RsIEFQSToKKworQWxsIGNvbmZvcm1pbmcgZHJpdmVycyBhbHNvIHN1cHBvcnQgYW4gaW9jdGwgQVBJLgorCitQaW5naW5nIHRoZSB3YXRjaGRvZyB1c2luZyBhbiBpb2N0bDoKKworQWxsIGRyaXZlcnMgdGhhdCBoYXZlIGFuIGlvY3RsIGludGVyZmFjZSBzdXBwb3J0IGF0IGxlYXN0IG9uZSBpb2N0bCwKK0tFRVBBTElWRS4gIFRoaXMgaW9jdGwgZG9lcyBleGFjdGx5IHRoZSBzYW1lIHRoaW5nIGFzIGEgd3JpdGUgdG8gdGhlCit3YXRjaGRvZyBkZXZpY2UsIHNvIHRoZSBtYWluIGxvb3AgaW4gdGhlIGFib3ZlIHByb2dyYW0gY291bGQgYmUKK3JlcGxhY2VkIHdpdGg6CisKKwl3aGlsZSAoMSkgeworCQlpb2N0bChmZCwgV0RJT0NfS0VFUEFMSVZFLCAwKTsKKwkJc2xlZXAoMTApOworCX0KKwordGhlIGFyZ3VtZW50IHRvIHRoZSBpb2N0bCBpcyBpZ25vcmVkLgorCitTZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSB0aW1lb3V0OgorCitGb3Igc29tZSBkcml2ZXJzIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgd2F0Y2hkb2cgdGltZW91dCBvbiB0aGUKK2ZseSB3aXRoIHRoZSBTRVRUSU1FT1VUIGlvY3RsLCB0aG9zZSBkcml2ZXJzIGhhdmUgdGhlIFdESU9GX1NFVFRJTUVPVVQKK2ZsYWcgc2V0IGluIHRoZWlyIG9wdGlvbiBmaWVsZC4gIFRoZSBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyCityZXByZXNlbnRpbmcgdGhlIHRpbWVvdXQgaW4gc2Vjb25kcy4gIFRoZSBkcml2ZXIgcmV0dXJucyB0aGUgcmVhbAordGltZW91dCB1c2VkIGluIHRoZSBzYW1lIHZhcmlhYmxlLCBhbmQgdGhpcyB0aW1lb3V0IG1pZ2h0IGRpZmZlciBmcm9tCit0aGUgcmVxdWVzdGVkIG9uZSBkdWUgdG8gbGltaXRhdGlvbiBvZiB0aGUgaGFyZHdhcmUuCisKKyAgICBpbnQgdGltZW91dCA9IDQ1OworICAgIGlvY3RsKGZkLCBXRElPQ19TRVRUSU1FT1VULCAmdGltZW91dCk7CisgICAgcHJpbnRmKCJUaGUgdGltZW91dCB3YXMgc2V0IHRvICVkIHNlY29uZHNcbiIsIHRpbWVvdXQpOworCitUaGlzIGV4YW1wbGUgbWlnaHQgYWN0dWFsbHkgcHJpbnQgIlRoZSB0aW1lb3V0IHdhcyBzZXQgdG8gNjAgc2Vjb25kcyIKK2lmIHRoZSBkZXZpY2UgaGFzIGEgZ3JhbnVsYXJpdHkgb2YgbWludXRlcyBmb3IgaXRzIHRpbWVvdXQuCisKK1N0YXJ0aW5nIHdpdGggdGhlIExpbnV4IDIuNC4xOCBrZXJuZWwsIGl0IGlzIHBvc3NpYmxlIHRvIHF1ZXJ5IHRoZQorY3VycmVudCB0aW1lb3V0IHVzaW5nIHRoZSBHRVRUSU1FT1VUIGlvY3RsLgorCisgICAgaW9jdGwoZmQsIFdESU9DX0dFVFRJTUVPVVQsICZ0aW1lb3V0KTsKKyAgICBwcmludGYoIlRoZSB0aW1lb3V0IHdhcyBpcyAlZCBzZWNvbmRzXG4iLCB0aW1lb3V0KTsKKworRW52aW5yb25tZW50YWwgbW9uaXRvcmluZzoKKworQWxsIHdhdGNoZG9nIGRyaXZlcnMgYXJlIHJlcXVpcmVkIHJldHVybiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0sCitzb21lIGRvIHRlbXBlcmF0dXJlLCBmYW4gYW5kIHBvd2VyIGxldmVsIG1vbml0b3JpbmcsIHNvbWUgY2FuIHRlbGwgeW91Cit0aGUgcmVhc29uIGZvciB0aGUgbGFzdCByZWJvb3Qgb2YgdGhlIHN5c3RlbS4gIFRoZSBHRVRTVVBQT1JUIGlvY3RsIGlzCithdmFpbGFibGUgdG8gYXNrIHdoYXQgdGhlIGRldmljZSBjYW4gZG86CisKKwlzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudDsKKwlpb2N0bChmZCwgV0RJT0NfR0VUU1VQUE9SVCwgJmlkZW50KTsKKwordGhlIGZpZWxkcyByZXR1cm5lZCBpbiB0aGUgaWRlbnQgc3RydWN0IGFyZToKKworICAgICAgICBpZGVudGl0eQkJYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHdhdGNoZG9nIGRyaXZlcgorCWZpcm13YXJlX3ZlcnNpb24JdGhlIGZpcm13YXJlIHZlcnNpb24gb2YgdGhlIGNhcmQgaWYgYXZhaWxhYmxlCisJb3B0aW9ucwkJCWEgZmxhZ3MgZGVzY3JpYmluZyB3aGF0IHRoZSBkZXZpY2Ugc3VwcG9ydHMKKwordGhlIG9wdGlvbnMgZmllbGQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBiaXRzIHNldCwgYW5kIGRlc2NyaWJlcyB3aGF0CitraW5kIG9mIGluZm9ybWF0aW9uIHRoYXQgdGhlIEdFVF9TVEFUVVMgYW5kIEdFVF9CT09UX1NUQVRVUyBpb2N0bHMgY2FuCityZXR1cm4uICAgW0ZJWE1FIC0tIElzIHRoaXMgY29ycmVjdD9dCisKKwlXRElPRl9PVkVSSEVBVAkJUmVzZXQgZHVlIHRvIENQVSBvdmVyaGVhdAorCitUaGUgbWFjaGluZSB3YXMgbGFzdCByZWJvb3RlZCBieSB0aGUgd2F0Y2hkb2cgYmVjYXVzZSB0aGUgdGhlcm1hbCBsaW1pdCB3YXMKK2V4Y2VlZGVkCisKKwlXRElPRl9GQU5GQVVMVAkJRmFuIGZhaWxlZAorCitBIHN5c3RlbSBmYW4gbW9uaXRvcmVkIGJ5IHRoZSB3YXRjaGRvZyBjYXJkIGhhcyBmYWlsZWQKKworCVdESU9GX0VYVEVSTjEJCUV4dGVybmFsIHJlbGF5IDEKKworRXh0ZXJuYWwgbW9uaXRvcmluZyByZWxheS9zb3VyY2UgMSB3YXMgdHJpZ2dlcmVkLiBDb250cm9sbGVycyBpbnRlbmRlZCBmb3IKK3JlYWwgd29ybGQgYXBwbGljYXRpb25zIGluY2x1ZGUgZXh0ZXJuYWwgbW9uaXRvcmluZyBwaW5zIHRoYXQgd2lsbCB0cmlnZ2VyCithIHJlc2V0LgorCisJV0RJT0ZfRVhURVJOMgkJRXh0ZXJuYWwgcmVsYXkgMgorCitFeHRlcm5hbCBtb25pdG9yaW5nIHJlbGF5L3NvdXJjZSAyIHdhcyB0cmlnZ2VyZWQKKworCVdESU9GX1BPV0VSVU5ERVIJUG93ZXIgYmFkL3Bvd2VyIGZhdWx0CisKK1RoZSBtYWNoaW5lIGlzIHNob3dpbmcgYW4gdW5kZXJ2b2x0YWdlIHN0YXR1cworCisJV0RJT0ZfQ0FSRFJFU0VUCQlDYXJkIHByZXZpb3VzbHkgcmVzZXQgdGhlIENQVQorCitUaGUgbGFzdCByZWJvb3Qgd2FzIGNhdXNlZCBieSB0aGUgd2F0Y2hkb2cgY2FyZAorCisJV0RJT0ZfUE9XRVJPVkVSCQlQb3dlciBvdmVyIHZvbHRhZ2UKKworVGhlIG1hY2hpbmUgaXMgc2hvd2luZyBhbiBvdmVydm9sdGFnZSBzdGF0dXMuIE5vdGUgdGhhdCBpZiBvbmUgbGV2ZWwgaXMKK3VuZGVyIGFuZCBvbmUgb3ZlciBib3RoIGJpdHMgd2lsbCBiZSBzZXQgLSB0aGlzIG1heSBzZWVtIG9kZCBidXQgbWFrZXMKK3NlbnNlLgorCisJV0RJT0ZfS0VFUEFMSVZFUElORwlLZWVwIGFsaXZlIHBpbmcgcmVwbHkKKworVGhlIHdhdGNoZG9nIHNhdyBhIGtlZXBhbGl2ZSBwaW5nIHNpbmNlIGl0IHdhcyBsYXN0IHF1ZXJpZWQuCisKKwlXRElPRl9TRVRUSU1FT1VUCUNhbiBzZXQvZ2V0IHRoZSB0aW1lb3V0CisKKworRm9yIHRob3NlIGRyaXZlcnMgdGhhdCByZXR1cm4gYW55IGJpdHMgc2V0IGluIHRoZSBvcHRpb24gZmllbGQsIHRoZQorR0VUU1RBVFVTIGFuZCBHRVRCT09UU1RBVFVTIGlvY3RscyBjYW4gYmUgdXNlZCB0byBhc2sgZm9yIHRoZSBjdXJyZW50CitzdGF0dXMsIGFuZCB0aGUgc3RhdHVzIGF0IHRoZSBsYXN0IHJlYm9vdCwgcmVzcGVjdGl2ZWx5LiAgCisKKyAgICBpbnQgZmxhZ3M7CisgICAgaW9jdGwoZmQsIFdESU9DX0dFVFNUQVRVUywgJmZsYWdzKTsKKworICAgIG9yCisKKyAgICBpb2N0bChmZCwgV0RJT0NfR0VUQk9PVFNUQVRVUywgJmZsYWdzKTsKKworTm90ZSB0aGF0IG5vdCBhbGwgZGV2aWNlcyBzdXBwb3J0IHRoZXNlIHR3byBjYWxscywgYW5kIHNvbWUgb25seQorc3VwcG9ydCB0aGUgR0VUQk9PVFNUQVRVUyBjYWxsLgorCitTb21lIGRyaXZlcnMgY2FuIG1lYXN1cmUgdGhlIHRlbXBlcmF0dXJlIHVzaW5nIHRoZSBHRVRURU1QIGlvY3RsLiAgVGhlCityZXR1cm5lZCB2YWx1ZSBpcyB0aGUgdGVtcGVyYXR1cmUgaW4gZGVncmVlcyBmYXJlbmhlaXQuCisKKyAgICBpbnQgdGVtcGVyYXR1cmU7CisgICAgaW9jdGwoZmQsIFdESU9DX0dFVFRFTVAsICZ0ZW1wZXJhdHVyZSk7CisKK0ZpbmFsbHkgdGhlIFNFVE9QVElPTlMgaW9jdGwgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBzb21lIGFzcGVjdHMgb2YKK3RoZSBjYXJkcyBvcGVyYXRpb247IHJpZ2h0IG5vdyB0aGUgcGN3ZCBkcml2ZXIgaXMgdGhlIG9ubHkgb25lCitzdXBwb3J0aW5nIHRoaXNzIGlvY3RsLgorCisgICAgaW50IG9wdGlvbnMgPSAwOworICAgIGlvY3RsKGZkLCBXRElPQ19TRVRPUFRJT05TLCBvcHRpb25zKTsKKworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6CisKKwlXRElPU19ESVNBQkxFQ0FSRAlUdXJuIG9mZiB0aGUgd2F0Y2hkb2cgdGltZXIKKwlXRElPU19FTkFCTEVDQVJECVR1cm4gb24gdGhlIHdhdGNoZG9nIHRpbWVyCisJV0RJT1NfVEVNUFBBTklDCQlLZXJuZWwgcGFuaWMgb24gdGVtcGVyYXR1cmUgdHJpcAorCitbRklYTUUgLS0gYmV0dGVyIGV4cGxhbmF0aW9uc10KKworSW1wbGVtZW50YXRpb25zIGluIHRoZSBjdXJyZW50IGRyaXZlcnMgaW4gdGhlIGtlcm5lbCB0cmVlOgorCitIZXJlIEkgaGF2ZSB0cmllZCB0byBzdW1tYXJpemUgd2hhdCB0aGUgZGlmZmVyZW50IGRyaXZlcnMgc3VwcG9ydCBhbmQKK3doZXJlIHRoZXkgZG8gc3RyYW5nZSB0aGluZ3MgY29tcGFyZWQgdG8gdGhlIG90aGVyIGRyaXZlcnMuCisKK2FjcXVpcmV3ZHQuYyAtLSBBY3F1aXJlIFNpbmdsZSBCb2FyZCBDb21wdXRlcgorCisJVGhpcyBkcml2ZXIgaGFzIGEgaGFyZGNvZGVkIHRpbWVvdXQgb2YgMSBtaW51dGUKKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIEtFRVBBTElWRVBJTkcuICBHRVRTVEFUVVMgd2lsbCByZXR1cm4gMSBpZgorCXRoZSBkZXZpY2UgaXMgb3BlbiwgMCBpZiBub3QuICBbRklYTUUgLS0gaXNuJ3QgdGhpcyByYXRoZXIKKwlzaWxseT8gIFRvIGJlIGFibGUgdG8gdXNlIHRoZSBpb2N0bCwgdGhlIGRldmljZSBtdXN0IGJlIG9wZW4KKwlhbmQgc28gR0VUU1RBVFVTIHdpbGwgYWx3YXlzIHJldHVybiAxXS4KKworYWR2YW50ZWNod2R0LmMgLS0gQWR2YW50ZWNoIFNpbmdsZSBCb2FyZCBDb21wdXRlcgorCisJVGltZW91dCB0aGF0IGRlZmF1bHRzIHRvIDYwIHNlY29uZHMsIHN1cHBvcnRzIFNFVFRJTUVPVVQuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HIGFuZCBXRElPRl9TRVRUSU1FT1VULgorCVRoZSBHRVRTVEFUVVMgY2FsbCByZXR1cm5zIGlmIHRoZSBkZXZpY2UgaXMgb3BlbiBvciBub3QuCisJW0ZJWE1FIC0tIHNpbGxpbmVzcyBhZ2Fpbj9dCisJCitldXJvdGVjaHdkdC5jIC0tIEV1cm90ZWNoIENQVS0xMjIwLzE0MTAKKworCVRoZSB0aW1lb3V0IGNhbiBiZSBzZXQgdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwgYW5kIGRlZmF1bHRzCisJdG8gNjAgc2Vjb25kcy4KKworCUFsc28gaGFzIGEgbW9kdWxlIHBhcmFtZXRlciAiZXYiLCBldmVudCB0eXBlIHdoaWNoIGNvbnRyb2xzCisJd2hhdCBzaG91bGQgaGFwcGVuIG9uIGEgdGltZW91dCwgdGhlIHN0cmluZyAiaW50IiBvciBhbnl0aGluZworCWVsc2UgdGhhdCBjYXVzZXMgYSByZWJvb3QuICBbRklYTUUgLS0gYmV0dGVyIGRlc2NyaXB0aW9uXQorCisJU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisKKwlHRVRTVVBQT1JUIHJldHVybnMgQ0FSRFJFU0VUIGFuZCBXRElPRl9TRVRUSU1FT1VUIGJ1dAorCUdFVFNUQVRVUyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBHRVRCT09UU1RBVFVTIGp1c3QgcmV0dXJucyAwLgorCitpODEwLXRjby5jIC0tIEludGVsIDgxMCBjaGlwc2V0CisKKwlBbHNvIGhhcyBzdXBwb3J0IGZvciBhIGxvdCBvZiBvdGhlciBpOHgwIHN0dWZmLCBidXQgdGhlCisJd2F0Y2hkb2cgaXMgb25lIG9mIHRoZSB0aGluZ3MuCisKKwlUaGUgdGltZW91dCBpcyBzZXQgdXNpbmcgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgImk4MTBfbWFyZ2luIiwKKwl3aGljaCBpcyBpbiBzdGVwcyBvZiAwLjYgc2Vjb25kcyB3aGVyZSAyPGk4MTBfbWFyZ2luPDY0LiAgVGhlCisJZHJpdmVyIHN1cHBvcnRzIHRoZSBTRVRUSU1FT1VUIGlvY3RsLgorCisJU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VULgorCisJR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX1NFVFRJTUVPVVQuICBUaGUgR0VUU1RBVFVTIGNhbGwKKwlyZXR1cm5zIHNvbWUga2luZCBvZiB0aW1lciB2YWx1ZSB3aGljaCBpc3Qgbm90IGNvbXBhdGlibGUgd2l0aAorCXRoZSBvdGhlciBkcml2ZXJzLiAgR0VUQk9PVCBzdGF0dXMgcmV0dXJucyBzb21lIGtpbmQgb2YKKwloYXJkd2FyZSBzcGVjaWZpYyBib290IHN0YXR1cy4gIFtGSVhNRSAtLSBkZXNjcmliZSB0aGlzXQorCitpYjcwMHdkdC5jIC0tIElCNzAwIFNpbmdsZSBCb2FyZCBDb21wdXRlcgorCisJRGVmYXVsdCB0aW1lb3V0IG9mIDMwIHNlY29uZHMgYW5kIHRoZSB0aW1lb3V0IGlzIHNldHRhYmxlCisJdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwuICBOb3RlIHRoYXQgb25seSBhIGZldyB0aW1lb3V0CisJdmFsdWVzIGFyZSBzdXBwb3J0ZWQuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HIGFuZCBXRElPRl9TRVRUSU1FT1VULgorCVRoZSBHRVRTVEFUVVMgY2FsbCByZXR1cm5zIGlmIHRoZSBkZXZpY2UgaXMgb3BlbiBvciBub3QuCisJW0ZJWE1FIC0tIHNpbGxpbmVzcyBhZ2Fpbj9dCisKK21hY2h6d2QuYyAtLSBNYWNoWiBaRi1Mb2dpYworCisJSGFyZGNvZGVkIHRpbWVvdXQgb2YgMTAgc2Vjb25kcworCisJSGFzIGEgbW9kdWxlIHBhcmFtZXRlciAiYWN0aW9uIiB0aGF0IGNvbnRyb2xzIHdoYXQgaGFwcGVucworCXdoZW4gdGhlIHRpbWVvdXQgcnVucyBvdXQgd2hpY2ggY2FuIGJlIDAgPSBSRVNFVCAoZGVmYXVsdCksIAorCTEgPSBTTUksIDIgPSBOTUksIDMgPSBTQ0kuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgYW5kIHRoZSBtYWdpYyBjaGFyYWN0ZXIKKwknVicgY2xvc2UgaGFuZGxpbmcuCisKKwlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfS0VFUEFMSVZFUElORywgYW5kIHRoZSBHRVRTVEFUVVMgY2FsbAorCXJldHVybnMgaWYgdGhlIGRldmljZSBpcyBvcGVuIG9yIG5vdC4gIFtGSVhNRSAtLSBzaWxsaW5lc3MKKwlhZ2Fpbj9dCisKK21peGNvbXdkLmMgLS0gTWl4Q29tIFdhdGNoZG9nCisKKwlbRklYTUUgLS0gSSdtIHVuYWJsZSB0byB0ZWxsIHdoYXQgdGhlIHRpbWVvdXQgaXNdCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCUdFVFNVUFBPUlQgcmV0dXJucyBXRElPRl9LRUVQQUxJVkVQSU5HLCBHRVRTVEFUVVMgcmV0dXJucyBpZgorCXRoZSBkZXZpY2UgaXMgb3BlbmVkIG9yIG5vdCBbRklYTUUgLS0gSSdtIG5vdCByZWFsbHkgc3VyZSBob3cKKwl0aGlzIHdvcmtzLCB0aGVyZSBzZWVtcyB0byBiZSBzb21lIG1hZ2ljIGNvbm5lY3RlZCB0bworCUNPTkZJR19XQVRDSERPR19OT1dBWU9VVF0KKworcGN3ZC5jIC0tIEJlcmtzaGlyZSBQQyBXYXRjaGRvZworCisJSGFyZGNvZGVkIHRpbWVvdXQgb2YgMS41IHNlY29uZHMKKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX09WRVJIRUFUfFdESU9GX0NBUkRSRVNFVCBhbmQgYm90aAorCUdFVFNUQVRVUyBhbmQgR0VUQk9PVFNUQVRVUyByZXR1cm4gc29tZXRoaW5nIHVzZWZ1bC4KKworCVRoZSBTRVRPUFRJT05TIGNhbGwgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjYXJkCisJYW5kIHRvIGFzayB0aGUgZHJpdmVyIHRvIGNhbGwgcGFuaWMgaWYgdGhlIHN5c3RlbSBvdmVyaGVhdHMuCisKK3NiYzYweHh3ZHQuYyAtLSA2MHh4IFNpbmdsZSBCb2FyZCBDb21wdXRlcgorCisJSGFyZGNvZGVkIHRpbWVvdXQgb2YgMTAgc2Vjb25kcworCisJRG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQsIGJ1dCBoYXMgdGhlIG1hZ2ljCisJY2hhcmFjdGVyICdWJyBjbG9zZSBoYW5kbGluZy4KKworCU5vIGJpdHMgc2V0IGluIEdFVFNVUFBPUlQKKworc2N4MjAwLmMgLS0gTmF0aW9uYWwgU0N4MjAwIENQVXMKKworCU5vdCBpbiB0aGUga2VybmVsIHlldC4KKworCVRoZSB0aW1lb3V0IGlzIHNldCB1c2luZyBhIG1vZHVsZSBwYXJhbWV0ZXIgIm1hcmdpbiIgd2hpY2gKKwlkZWZhdWx0cyB0byA2MCBzZWNvbmRzLiAgVGhlIHRpbWVvdXQgY2FuIGFsc28gYmUgc2V0IHVzaW5nCisJU0VUVElNRU9VVCBhbmQgcmVhZCB1c2luZyBHRVRUSU1FT1VULgorCisJU3VwcG9ydHMgYSBtb2R1bGUgcGFyYW1ldGVyICJub3dheW91dCIgdGhhdCBpcyBpbml0aWFsaXplZAorCXdpdGggdGhlIHZhbHVlIG9mIENPTkZJR19XQVRDSERPR19OT1dBWU9VVC4gIEFsc28gc3VwcG9ydHMgdGhlCisJbWFnaWMgY2hhcmFjdGVyICdWJyBoYW5kbGluZy4KKworc2h3ZHQuYyAtLSBTdXBlckggMy80IHByb2Nlc3NvcnMKKworCVtGSVhNRSAtLSBJJ20gdW5hYmxlIHRvIHRlbGwgd2hhdCB0aGUgdGltZW91dCBpc10KKworCVN1cHBvcnRzIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCisJR0VUU1VQUE9SVCByZXR1cm5zIFdESU9GX0tFRVBBTElWRVBJTkcsIGFuZCB0aGUgR0VUU1RBVFVTIGNhbGwKKwlyZXR1cm5zIGlmIHRoZSBkZXZpY2UgaXMgb3BlbiBvciBub3QuICBbRklYTUUgLS0gc2lsbGluZXNzCisJYWdhaW4/XQorCitzb2Z0ZG9nLmMgLS0gU29mdHdhcmUgd2F0Y2hkb2cKKworCVRoZSB0aW1lb3V0IGlzIHNldCB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyICJzb2Z0X21hcmdpbiIKKwl3aGljaCBkZWZhdWx0cyB0byA2MCBzZWNvbmRzLCB0aGUgdGltZW91dCBpcyBhbHNvIHNldHRhYmxlCisJdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCVdESU9GX1NFVFRJTUVPVVQgYml0IHNldCBpbiBHRVRTVVBQT1JUCisKK3c4Mzg3N2Zfd2R0LmMgLS0gVzgzODc3RiBDb21wdXRlcgorCisJSGFyZGNvZGVkIHRpbWVvdXQgb2YgMzAgc2Vjb25kcworCisJRG9lcyBub3Qgc3VwcG9ydCBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQsIGJ1dCBoYXMgdGhlIG1hZ2ljCisJY2hhcmFjdGVyICdWJyBjbG9zZSBoYW5kbGluZy4KKworCU5vIGJpdHMgc2V0IGluIEdFVFNVUFBPUlQKKwordzgzNjI3aGZfd2R0LmMgLS0gdzgzNjI3aGYgd2F0Y2hkb2cKKworCVRpbWVvdXQgdGhhdCBkZWZhdWx0cyB0byA2MCBzZWNvbmRzLCBzdXBwb3J0cyBTRVRUSU1FT1VULgorCisJU3VwcG9ydHMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisKKwlHRVRTVVBQT1JUIHJldHVybnMgV0RJT0ZfS0VFUEFMSVZFUElORyBhbmQgV0RJT0ZfU0VUVElNRU9VVC4KKwlUaGUgR0VUU1RBVFVTIGNhbGwgcmV0dXJucyBpZiB0aGUgZGV2aWNlIGlzIG9wZW4gb3Igbm90LgorCit3ZHQuYyAtLSBJQ1MgV0RUNTAwLzUwMSBJU0EgYW5kCit3ZHRfcGNpLmMgLS0gSUNTIFdEVDUwMC81MDEgUENJCisKKwlEZWZhdWx0IHRpbWVvdXQgb2YgNjAgc2Vjb25kcy4gIFRoZSB0aW1lb3V0IGlzIGFsc28gc2V0dGFibGUKKyAgICAgICAgdXNpbmcgdGhlIFNFVFRJTUVPVVQgaW9jdGwuCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCUdFVFNVUFBPUlQgcmV0dXJucyB3aXRoIGJpdHMgc2V0IGRlcGVuZGluZyBvbiB0aGUgYWN0dWFsCisJY2FyZC4gVGhlIFdEVDUwMSBzdXBwb3J0cyBhIGxvdCBvZiBleHRlcm5hbCBtb25pdG9yaW5nLCB0aGUKKwlXRFQ1MDAgbXVjaCBsZXNzLgorCit3ZHQyODUuYyAtLSBGb290YnJpZGdlIHdhdGNoZG9nCisKKwlUaGUgdGltZW91dCBpcyBzZXQgd2l0aCB0aGUgbW9kdWxlIHBhcmFtZXRlciAic29mdF9tYXJnaW4iCisJd2hpY2ggZGVmYXVsdHMgdG8gNjAgc2Vjb25kcy4gIFRoZSB0aW1lb3V0IGlzIGFsc28gc2V0dGFibGUKKwl1c2luZyB0aGUgU0VUVElNRU9VVCBpb2N0bC4KKworCURvZXMgbm90IHN1cHBvcnQgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCisKKwlXRElPRl9TRVRUSU1FT1VUIGJpdCBzZXQgaW4gR0VUU1VQUE9SVAorCit3ZHQ5NzcuYyAtLSBOZXR3aW5kZXIgVzgzOTc3QUYgY2hpcAorCisJSGFyZGNvZGVkIHRpbWVvdXQgb2YgMyBtaW51dGVzCisKKwlTdXBwb3J0cyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKworCURvZXMgbm90IHN1cHBvcnQgYW55IGlvY3RscyBhdCBhbGwuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0IGIvRG9jdW1lbnRhdGlvbi93YXRjaGRvZy93YXRjaGRvZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZmZGEyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvd2F0Y2hkb2cudHh0CkBAIC0wLDAgKzEsMTE1IEBACisJV2F0Y2hkb2cgVGltZXIgSW50ZXJmYWNlcyBGb3IgVGhlIExpbnV4IE9wZXJhdGluZyBTeXN0ZW0KKworCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgorCisJICAgICBDdXN0b20gTGludXggRHJpdmVyIEFuZCBQcm9ncmFtIERldmVsb3BtZW50CisKKworVGhlIGZvbGxvd2luZyB3YXRjaGRvZyBkcml2ZXJzIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQ6CisKKwlJQ1MJV0RUNTAxLVAKKwlJQ1MJV0RUNTAxLVAgKG5vIGZhbiB0YWNob21ldGVyKQorCUlDUwlXRFQ1MDAtUAorCVNvZnR3YXJlIE9ubHkKKwlTQTExMDAgSW50ZXJuYWwgV2F0Y2hkb2cKKwlCZXJrc2hpcmUgUHJvZHVjdHMgUEMgV2F0Y2hkb2cgUmV2aXNpb24gQSAmIEMgKGJ5IEtlbiBIb2xsaXMpCisKKworQWxsIHNpeCBpbnRlcmZhY2VzIHByb3ZpZGUgL2Rldi93YXRjaGRvZywgd2hpY2ggd2hlbiBvcGVuIG11c3QgYmUgd3JpdHRlbgordG8gd2l0aGluIGEgdGltZW91dCBvciB0aGUgbWFjaGluZSB3aWxsIHJlYm9vdC4gRWFjaCB3cml0ZSBkZWxheXMgdGhlIHJlYm9vdAordGltZSBhbm90aGVyIHRpbWVvdXQuIEluIHRoZSBjYXNlIG9mIHRoZSBzb2Z0d2FyZSB3YXRjaGRvZyB0aGUgYWJpbGl0eSB0byAKK3JlYm9vdCB3aWxsIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmVzIGFuZCBpbnRlcnJ1cHRzLiBUaGUgaGFyZHdhcmUKK2JvYXJkcyBwaHlzaWNhbGx5IHB1bGwgdGhlIG1hY2hpbmUgZG93biBvZmYgdGhlaXIgb3duIG9uYm9hcmQgdGltZXJzIGFuZAord2lsbCByZWJvb3QgZnJvbSBhbG1vc3QgYW55dGhpbmcuCisKK0Egc2Vjb25kIHRlbXBlcmF0dXJlIG1vbml0b3JpbmcgaW50ZXJmYWNlIGlzIGF2YWlsYWJsZSBvbiB0aGUgV0RUNTAxUCBjYXJkcworYW5kIHNvbWUgQmVya3NoaXJlIGNhcmRzLiBUaGlzIHByb3ZpZGVzIC9kZXYvdGVtcGVyYXR1cmUuIFRoaXMgaXMgdGhlIG1hY2hpbmUgCitpbnRlcm5hbCB0ZW1wZXJhdHVyZSBpbiBkZWdyZWVzIEZhaHJlbmhlaXQuIEVhY2ggcmVhZCByZXR1cm5zIGEgc2luZ2xlIGJ5dGUgCitnaXZpbmcgdGhlIHRlbXBlcmF0dXJlLgorCitUaGUgdGhpcmQgaW50ZXJmYWNlIGxvZ3Mga2VybmVsIG1lc3NhZ2VzIG9uIGFkZGl0aW9uYWwgYWxlcnQgZXZlbnRzLgorCitCb3RoIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSB3YXRjaGRvZyBkcml2ZXJzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYXJkCitrZXJuZWwuIElmIHlvdSBhcmUgdXNpbmcgdGhlIHNvZnR3YXJlIHdhdGNoZG9nLCB5b3UgcHJvYmFibHkgYWxzbyB3YW50Cit0byB1c2UgInBhbmljPTYwIiBhcyBhIGJvb3QgYXJndW1lbnQgYXMgd2VsbC4KKworVGhlIHdkdCBjYXJkIGNhbm5vdCBiZSBzYWZlbHkgcHJvYmVkIGZvci4gSW5zdGVhZCB5b3UgbmVlZCB0byBwYXNzCit3ZHQ9aW9hZGRyLGlycSBhcyBhIGJvb3QgcGFyYW1ldGVyIC0gZWcgIndkdD0weDI0MCwxMSIuCisKK1RoZSBTQTExMDAgd2F0Y2hkb2cgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhlICJzYTExMDBfbWFyZ2luIgorY29tbWFuZGxpbmUgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKworVGhlIGk4MTAgVENPIHdhdGNoZG9nIG1vZHVsZXMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgImk4MTBfbWFyZ2luIgorY29tbWFuZGxpbmUgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb3VudGVyIGluaXRpYWwgdmFsdWUuIFRoZSBjb3VudGVyCitpcyBkZWNyZW1lbnRlZCBldmVyeSAwLjYgc2Vjb25kcyBhbmQgZGVmYXVsdCB0byA1MCAoMzAgc2Vjb25kcykuIFZhbHVlcyBjYW4KK3JhbmdlIGJldHdlZW4gMyBhbmQgNjMuCisKK1RoZSBpODEwIFRDTyB3YXRjaGRvZyBkcml2ZXIgYWxzbyBpbXBsZW1lbnRzIHRoZSBXRElPQ19HRVRTVEFUVVMgYW5kCitXRElPQ19HRVRCT09UU1RBVFVTIGlvY3RsKClzLiBXRElPQ19HRVRTVEFUVVMgcmV0dXJucyB0aGUgYWN0dWFsIGNvdW50ZXIgdmFsdWUKK2FuZCBXRElPQ19HRVRCT09UU1RBVFVTIHJldHVybnMgdGhlIHZhbHVlIG9mIFRDTzIgU3RhdHVzIFJlZ2lzdGVyIChzZWUgSW50ZWwncworZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDgyODAxQUEgYW5kIDgyODAxQUIgZGF0YXNoZWV0KS4gCisKK0ZlYXR1cmVzCistLS0tLS0tLQorCQlXRFQ1MDFQCQlXRFQ1MDBQCQlTb2Z0d2FyZQlCZXJrc2hpcmUJaTgxMCBUQ08JU0ExMTAwV0QKK1JlYm9vdCBUaW1lcgkgICBYICAgICAgICAgICAgICAgWCAgICAgICAgICAgICAgICBYCQkgICAgWCAgICAgICAgICAgICAgIFggICAgICAgICAgICAgICBYCitFeHRlcm5hbCBSZWJvb3QJICAgWAkgICAgICAgICAgIFggICAgICAgICAgICAgICAgbwkJICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgWAorSS9PIFBvcnQgTW9uaXRvciAgIG8JCSAgIG8JCSAgICBvCQkgICAgWCAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCitUZW1wZXJhdHVyZQkgICBYCQkgICBvCQkgICAgbyAgICAgICAgICAgICAgIFggICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbworRmFuIFNwZWVkICAgICAgICAgIFgJCSAgIG8JCSAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCitQb3dlciBVbmRlcgkgICBYICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvCitQb3dlciBPdmVyICAgICAgICAgWCAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbworT3ZlcmhlYXQgICAgICAgICAgIFggICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgIG8gICAgICAgICAgICAgICBvICAgICAgICAgICAgICAgbyAgICAgICAgICAgICAgIG8KKworVGhlIGV4dGVybmFsIGV2ZW50IGludGVyZmFjZXMgb24gdGhlIFdEVCBib2FyZHMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorTWlub3IgbnVtYmVycyBhcmUgaG93ZXZlciBhbGxvY2F0ZWQgZm9yIGl0LgorCisKK0V4YW1wbGUgV2F0Y2hkb2cgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQoreworCWludCBmZD1vcGVuKCIvZGV2L3dhdGNoZG9nIixPX1dST05MWSk7CisJaWYoZmQ9PS0xKQorCXsKKwkJcGVycm9yKCJ3YXRjaGRvZyIpOworCQlleGl0KDEpOworCX0KKwl3aGlsZSgxKQorCXsKKwkJd3JpdGUoZmQsIlwwIiwxKTsKKwkJZnN5bmMoZmQpOworCQlzbGVlcCgxMCk7CisJfQorfQorCisKK0NvbnRhY3QgSW5mb3JtYXRpb24KKworUGVvcGxlIGtlZXAgYXNraW5nIGFib3V0IHRoZSBXRFQgd2F0Y2hkb2cgdGltZXIgaGFyZHdhcmU6IFRoZSBwaG9uZSBjb250YWN0cworZm9yIEluZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlIGFyZToKKyAKK0luZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlCitodHRwOi8vd3d3LmluZGNvbXBzcmMuY29tCitJQ1MgQWR2ZW50LCBTYW4gRGllZ28KKzYyNjAgU2VxdWVuY2UgRHIuCitTYW4gRGllZ28sIENBIDkyMTIxLTQzNzEKK1Bob25lICg4NTgpIDY3Ny0wODc3CitGQVg6ICg4NTgpIDY3Ny0wODk1Cis+CitJQ1MgQWR2ZW50IEV1cm9wZSwgVUsKK092aW5nIFJvYWQKK0NoaWNoZXN0ZXIsCitXZXN0IFN1c3NleCwKK1BPMTkgNEVULCBVSworUGhvbmU6IDAwLjQ0LjEyNDMuNTMzOTAwCisKKworYW5kIHBsZWFzZSBtZW50aW9uIExpbnV4IHdoZW4gZW5xdWlyaW5nLgorCitGb3IgZnVsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUENXRCBjYXJkcyBzZWUgdGhlIHBjd2Qtd2F0Y2hkb2cudHh0IGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiNmVlYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKQEAgLTAsMCArMSwxODAgQEAKK0FNRDY0IHNwZWNpZmljIGJvb3Qgb3B0aW9ucworCitUaGVyZSBhcmUgbWFueSBvdGhlcnMgKHVzdWFsbHkgZG9jdW1lbnRlZCBpbiBkcml2ZXIgZG9jdW1lbnRhdGlvbiksIGJ1dAorb25seSB0aGUgQU1ENjQgc3BlY2lmaWMgb25lcyBhcmUgbGlzdGVkIGhlcmUuCisKK01hY2hpbmUgY2hlY2sKKworICAgbWNlPW9mZiBkaXNhYmxlIG1hY2hpbmUgY2hlY2sKKworICAgbm9tY2UgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggaTM4Nik6IHNhbWUgYXMgbWNlPW9mZgorCisgICBFdmVyeXRoaW5nIGVsc2UgaXMgaW4gc3lzZnMgbm93LgorCitBUElDcworCisgICBhcGljCQkgVXNlIElPLUFQSUMuIERlZmF1bHQKKworICAgbm9hcGljCSBEb24ndCB1c2UgdGhlIElPLUFQSUMuCisKKyAgIGRpc2FibGVhcGljCSBEb24ndCB1c2UgdGhlIGxvY2FsIEFQSUMKKworICAgbm9sYXBpYwkgRG9uJ3QgdXNlIHRoZSBsb2NhbCBBUElDIChhbGlhcyBmb3IgaTM4NiBjb21wYXRpYmlsaXR5KQorCisgICBwaXJxPS4uLgkgU2VlIERvY3VtZW50YXRpb24vaTM4Ni9JTy1BUElDLnR4dAorCisgICBub2FwaWN0aW1lcgkgRG9uJ3Qgc2V0IHVwIHRoZSBBUElDIHRpbWVyCisKK0Vhcmx5IENvbnNvbGUKKworICAgc3ludGF4OiBlYXJseXByaW50az12Z2EKKyAgICAgICAgICAgZWFybHlwcmludGs9c2VyaWFsWyx0dHlTblssYmF1ZHJhdGVdXQorCisgICBUaGUgZWFybHkgY29uc29sZSBpcyB1c2VmdWwgd2hlbiB0aGUga2VybmVsIGNyYXNoZXMgYmVmb3JlIHRoZQorICAgbm9ybWFsIGNvbnNvbGUgaXMgaW5pdGlhbGl6ZWQuIEl0IGlzIG5vdCBlbmFibGVkIGJ5CisgICBkZWZhdWx0IGJlY2F1c2UgaXQgaGFzIHNvbWUgY29zbWV0aWMgcHJvYmxlbXMuCisgICBBcHBlbmQgLGtlZXAgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlIHRha2VzIG92ZXIuCisgICBPbmx5IHZnYSBvciBzZXJpYWwgYXQgYSB0aW1lLCBub3QgYm90aC4KKyAgIEN1cnJlbnRseSBvbmx5IHR0eVMwIGFuZCB0dHlTMSBhcmUgc3VwcG9ydGVkLgorICAgSW50ZXJhY3Rpb24gd2l0aCB0aGUgc3RhbmRhcmQgc2VyaWFsIGRyaXZlciBpcyBub3QgdmVyeSBnb29kLgorICAgVGhlIFZHQSBvdXRwdXQgaXMgZXZlbnR1YWxseSBvdmVyd3JpdHRlbiBieSB0aGUgcmVhbCBjb25zb2xlLgorCitUaW1pbmcKKworICBub3RzYworICBEb24ndCB1c2UgdGhlIENQVSB0aW1lIHN0YW1wIGNvdW50ZXIgdG8gcmVhZCB0aGUgd2FsbCB0aW1lLgorICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdvcmsgYXJvdW5kIHRpbWluZyBwcm9ibGVtcyBvbiBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zCisgIHdpdGggbm90IHByb3Blcmx5IHN5bmNocm9uaXplZCBDUFVzLiBPbmx5IHVzZWZ1bCB3aXRoIGEgU01QIGtlcm5lbAorCisgIHJlcG9ydF9sb3N0X3RpY2tzCisgIFJlcG9ydCB3aGVuIHRpbWVyIGludGVycnVwdHMgYXJlIGxvc3QgYmVjYXVzZSBzb21lIGNvZGUgdHVybmVkIG9mZgorICBpbnRlcnJ1cHRzIGZvciB0b28gbG9uZy4KKworICBubWlfd2F0Y2hkb2c9TlVNQkVSWyxwYW5pY10KKyAgTlVNQkVSIGNhbiBiZToKKyAgMCBkb24ndCB1c2UgYW4gTk1JIHdhdGNoZG9nCisgIDEgdXNlIHRoZSBJTy1BUElDIHRpbWVyIGZvciB0aGUgTk1JIHdhdGNoZG9nCisgIDIgdXNlIHRoZSBsb2NhbCBBUElDIGZvciB0aGUgTk1JIHdhdGNoZG9nIHVzaW5nIGEgcGVyZm9ybWFuY2UgY291bnRlci4gTm90ZQorICBUaGlzIHdpbGwgdXNlIG9uZSBwZXJmb3JtYW5jZSBjb3VudGVyIGFuZCB0aGUgbG9jYWwgQVBJQydzIHBlcmZvcm1hbmNlCisgIHZlY3Rvci4KKyAgV2hlbiBwYW5pYyBpcyBzcGVjaWZpZWQgcGFuaWMgd2hlbiBhbiBOTUkgd2F0Y2hkb2cgdGltZW91dCBvY2N1cnMuCisgIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHVzZSBhIHBhbmljPS4uLiB0aW1lb3V0IGFuZCBuZWVkIHRoZSBib3gKKyAgcXVpY2tseSB1cCBhZ2Fpbi4KKworICBub2hwZXQKKyAgRG9uJ3QgdXNlIHRoZSBIUEVUIHRpbWVyLgorCitJZGxlIGxvb3AKKworICBpZGxlPXBvbGwKKyAgRG9uJ3QgZG8gcG93ZXIgc2F2aW5nIGluIHRoZSBpZGxlIGxvb3AgdXNpbmcgSExULCBidXQgcG9sbCBmb3IgcmVzY2hlZHVsaW5nCisgIGV2ZW50LiBUaGlzIHdpbGwgbWFrZSB0aGUgQ1BVcyBlYXQgYSBsb3QgbW9yZSBwb3dlciwgYnV0IG1heSBiZSB1c2VmdWwKKyAgdG8gZ2V0IHNsaWdodGx5IGJldHRlciBwZXJmb3JtYW5jZSBpbiBtdWx0aXByb2Nlc3NvciBiZW5jaG1hcmtzLiBJdCBhbHNvCisgIG1ha2VzIHNvbWUgcHJvZmlsaW5nIHVzaW5nIHBlcmZvcm1hbmNlIGNvdW50ZXJzIG1vcmUgYWNjdXJhdGUuCisKK1JlYm9vdGluZworCisgICByZWJvb3Q9Yltpb3NdIHwgdFtyaXBsZV0gfCBrW2JkXSBbLCBbd11hcm0gfCBbY11vbGRdCisgICBiaW9zCSAgVXNlIHRoZSBDUFUgcmVib3RvIHZlY3RvciBmb3Igd2FybSByZXNldAorICAgd2FybSAgIERvbid0IHNldCB0aGUgY29sZCByZWJvb3QgZmxhZworICAgY29sZCAgIFNldCB0aGUgY29sZCByZWJvb3QgZmxhZworICAgdHJpcGxlIEZvcmNlIGEgdHJpcGxlIGZhdWx0IChpbml0KQorICAga2JkICAgIFVzZSB0aGUga2V5Ym9hcmQgY29udHJvbGxlci4gY29sZCByZXNldCAoZGVmYXVsdCkKKworICAgVXNpbmcgd2FybSByZXNldCB3aWxsIGJlIG11Y2ggZmFzdGVyIGVzcGVjaWFsbHkgb24gYmlnIG1lbW9yeQorICAgc3lzdGVtcyBiZWNhdXNlIHRoZSBCSU9TIHdpbGwgbm90IGdvIHRocm91Z2ggdGhlIG1lbW9yeSBjaGVjay4KKyAgIERpc2FkdmFudGFnZSBpcyB0aGF0IG5vdCBhbGwgaGFyZHdhcmUgd2lsbCBiZSBjb21wbGV0ZWx5IHJlaW5pdGlhbGl6ZWQKKyAgIG9uIHJlYm9vdCBzbyB0aGVyZSBtYXkgYmUgYm9vdCBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMuCisKKyAgIHJlYm9vdD1mb3JjZQorCisgICBEb24ndCBzdG9wIG90aGVyIENQVXMgb24gcmVib290LiBUaGlzIGNhbiBtYWtlIHJlYm9vdCBtb3JlIHJlbGlhYmxlCisgICBpbiBzb21lIGNhc2VzLgorCitOb24gRXhlY3V0YWJsZSBNYXBwaW5ncworCisgIG5vZXhlYz1vbnxvZmYKKworICBvbiAgICAgIEVuYWJsZShkZWZhdWx0KQorICBvZmYgICAgIERpc2FibGUKKworU01QCisKKyAgbm9zbXAJT25seSB1c2UgYSBzaW5nbGUgQ1BVCisKKyAgbWF4Y3B1cz1OVU1CRVIgb25seSB1c2UgdXB0byBOVU1CRVIgQ1BVcworCisgIGNwdW1hc2s9TUFTSyAgIG9ubHkgdXNlIGNwdXMgd2l0aCBiaXRzIHNldCBpbiBtYXNrCisKK05VTUEKKworICBudW1hPW9mZglPbmx5IHNldCB1cCBhIHNpbmdsZSBOVU1BIG5vZGUgc3Bhbm5pbmcgYWxsIG1lbW9yeS4KKworICBudW1hPW5vYWNwaSAgIERvbid0IHBhcnNlIHRoZSBTUkFUIHRhYmxlIGZvciBOVU1BIHNldHVwCisKKyAgbnVtYT1mYWtlPVggICBGYWtlIFggbm9kZXMgYW5kIGlnbm9yZSBOVU1BIHNldHVwIG9mIHRoZSBhY3R1YWwgbWFjaGluZS4KKworQUNQSQorCisgIGFjcGk9b2ZmCURvbid0IGVuYWJsZSBBQ1BJCisgIGFjcGk9aHQJVXNlIEFDUEkgYm9vdCB0YWJsZSBwYXJzaW5nLCBidXQgZG9uJ3QgZW5hYmxlIEFDUEkKKwkJaW50ZXJwcmV0ZXIKKyAgYWNwaT1mb3JjZQlGb3JjZSBBQ1BJIG9uIChjdXJyZW50bHkgbm90IG5lZWRlZCkKKworICBhY3BpPXN0cmljdCAgIERpc2FibGUgb3V0IG9mIHNwZWMgQUNQSSB3b3JrYXJvdW5kcy4KKworICBhY3BpX3NjaT17ZWRnZSxsZXZlbCxoaWdoLGxvd30gIFNldCB1cCBBQ1BJIFNDSSBpbnRlcnJ1cHQuCisKKyAgYWNwaT1ub2lycQlEb24ndCByb3V0ZSBpbnRlcnJ1cHRzCisKK1BDSQorCisgIHBjaT1vZmYJRG9uJ3QgdXNlIFBDSQorICBwY2k9Y29uZjEJVXNlIGNvbmYxIGFjY2Vzcy4KKyAgcGNpPWNvbmYyCVVzZSBjb25mMiBhY2Nlc3MuCisgIHBjaT1yb20JQXNzaWduIFJPTXMuCisgIHBjaT1hc3NpZ24tYnVzc2VzICAgIEFzc2lnbiBidXNzZXMKKyAgcGNpPWlycW1hc2s9TUFTSwkgICAgICAgU2V0IFBDSSBpbnRlcnJ1cHQgbWFzayB0byBNQVNLCisgIHBjaT1sYXN0YnVzPU5VTUJFUgkgICAgICAgU2NhbiB1cHRvIE5VTUJFUiBidXNzZXMsIG5vIG1hdHRlciB3aGF0IHRoZSBtcHRhYmxlIHNheXMuCisgIHBjaT1ub2FjcGkJCURvbid0IHVzZSBBQ1BJIHRvIHNldCB1cCBQQ0kgaW50ZXJydXB0IHJvdXRpbmcuCisKK0lPTU1VCisKKyBpb21tdT1bc2l6ZV1bLG5vYWdwXVssb2ZmXVssZm9yY2VdWyxub2ZvcmNlXVssbGVha11bLG1lbWFwZXJbPW9yZGVyXV1bLG1lcmdlXQorICAgICAgICAgWyxmb3JjZXNhY11bLGZ1bGxmbHVzaF1bLG5vbWVyZ2VdWyxub2FwZXJ0dXJlXQorICAgc2l6ZSAgc2V0IHNpemUgb2YgaW9tbXUgKGluIGJ5dGVzKQorICAgbm9hZ3AgZG9uJ3QgaW5pdGlhbGl6ZSB0aGUgQUdQIGRyaXZlciBhbmQgdXNlIGZ1bGwgYXBlcnR1cmUuCisgICBvZmYgICBkb24ndCB1c2UgdGhlIElPTU1VCisgICBsZWFrICB0dXJuIG9uIHNpbXBsZSBpb21tdSBsZWFrIHRyYWNpbmcgKG9ubHkgd2hlbiBDT05GSUdfSU9NTVVfTEVBSyBpcyBvbikKKyAgIG1lbWFwZXJbPW9yZGVyXSBhbGxvY2F0ZSBhbiBvd24gYXBlcnR1cmUgb3ZlciBSQU0gd2l0aCBzaXplIDMyTUJeb3JkZXIuCisgICBub2ZvcmNlIGRvbid0IGZvcmNlIElPTU1VIHVzYWdlLiBEZWZhdWx0LgorICAgZm9yY2UgIEZvcmNlIElPTU1VLgorICAgbWVyZ2UgIERvIFNHIG1lcmdpbmcuIEltcGxpZXMgZm9yY2UgKGV4cGVyaW1lbnRhbCkKKyAgIG5vbWVyZ2UgRG9uJ3QgZG8gU0cgbWVyZ2luZy4KKyAgIGZvcmNlc2FjIEZvciBTQUMgbW9kZSBmb3IgbWFza3MgPDQwYml0cyAgKGV4cGVyaW1lbnRhbCkKKyAgIGZ1bGxmbHVzaCBGbHVzaCBJT01NVSBvbiBlYWNoIGFsbG9jYXRpb24gKGRlZmF1bHQpCisgICBub2Z1bGxmbHVzaCBEb24ndCB1c2UgSU9NTVUgZnVsbGZsdXNoCisgICBhbGxvd2VkICBvdmVyd3JpdGUgaW9tbXUgb2ZmIHdvcmthcm91bmRzIGZvciBzcGVjaWZpYyBjaGlwc2V0cy4KKyAgIHNvZnQJIFVzZSBzb2Z0d2FyZSBib3VuY2UgYnVmZmVyaW5nIChkZWZhdWx0IGZvciBJbnRlbCBtYWNoaW5lcykKKyAgIG5vYXBlcnR1cmUgRG9uJ3QgdG91Y2ggdGhlIGFwZXJ0dXJlIGZvciBBR1AuCisKKyAgc3dpb3RsYj1wYWdlc1ssZm9yY2VdCisKKyAgcGFnZXMgIFByZXJlc2VydmUgdGhhdCBtYW55IDEyOEsgcGFnZXMgZm9yIHRoZSBzb2Z0d2FyZSBJTyBib3VuY2UgYnVmZmVyaW5nLgorICBmb3JjZSAgRm9yY2UgYWxsIElPIHRocm91Z2ggdGhlIHNvZnR3YXJlIFRMQi4KKworRGVidWdnaW5nCisKKyAgb29wcz1wYW5pYyBBbHdheXMgcGFuaWMgb24gb29wc2VzLiBEZWZhdWx0IGlzIHRvIGp1c3Qga2lsbCB0aGUgcHJvY2VzcywKKwkgICAgIGJ1dCB0aGVyZSBpcyBhIHNtYWxsIHByb2JhYmlsaXR5IG9mIGRlYWRsb2NraW5nIHRoZSBtYWNoaW5lLgorCSAgICAgVGhpcyB3aWxsIGFsc28gY2F1c2UgcGFuaWNzIG9uIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9ucy4KKwkgICAgIFVzZWZ1bCB0b2dldGhlciB3aXRoIHBhbmljPTMwIHRvIHRyaWdnZXIgYSByZWJvb3QuCisKKyAga3N0YWNrPU4gICBQcmludCB0aGF0IG1hbnkgd29yZHMgZnJvbSB0aGUga2VybmVsIHN0YWNrIGluIG9vcHMgZHVtcHMuCisKK01pc2MKKworICBub3JlcGxhY2VtZW50ICBEb24ndCByZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIG1vcmUgYXBwcm9waWF0ZSBvbmVzCisgIAkJCQkgZm9yIHRoZSBDUFUuIFRoaXMgbWF5IGJlIHVzZWZ1bCBvbiBhc3ltbWV0cmljIE1QIHN5c3RlbXMKKwkJCQkgd2hlcmUgc29tZSBDUFUgaGF2ZSBsZXNzIGNhcGFiaWxpdGllcyB0aGFuIHRoZSBvdGhlcnMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L21tLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjJiNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvbW0udHh0CkBAIC0wLDAgKzEsMjQgQEAKKworPHByZXZpb3VzIGRlc2NyaXB0aW9uIG9ic29sZXRlLCBkZWxldGVkPgorCitWaXJ0dWFsIG1lbW9yeSBtYXAgd2l0aCA0IGxldmVsIHBhZ2UgdGFibGVzOgorCiswMDAwMDAwMDAwMDAwMDAwIC0gMDAwMDdmZmZmZmZmZmZmZiAoPTQ3Yml0cykgdXNlciBzcGFjZSwgZGlmZmVyZW50IHBlciBtbQoraG9sZSBjYXVzZWQgYnkgWzQ4OjYzXSBzaWduIGV4dGVuc2lvbgorZmZmZjgwMDAwMDAwMDAwMCAtIGZmZmY4MGZmZmZmZmZmZmYgKD00MGJpdHMpIGd1YXJkIGhvbGUKK2ZmZmY4MTAwMDAwMDAwMDAgLSBmZmZmYzBmZmZmZmZmZmZmICg9NDZiaXRzKSBkaXJlY3QgbWFwcGluZyBvZiBwaHlzLiBtZW1vcnkKK2ZmZmZjMTAwMDAwMDAwMDAgLSBmZmZmYzFmZmZmZmZmZmZmICg9NDBiaXRzKSBob2xlCitmZmZmYzIwMDAwMDAwMDAwIC0gZmZmZmUxZmZmZmZmZmZmZiAoPTQ1Yml0cykgdm1hbGxvYy9pb3JlbWFwIHNwYWNlCisuLi4gdW51c2VkIGhvbGUgLi4uCitmZmZmZmZmZjgwMDAwMDAwIC0gZmZmZmZmZmY4MjgwMDAwMCAoPTQwTUIpICAga2VybmVsIHRleHQgbWFwcGluZywgZnJvbSBwaHlzIDAKKy4uLiB1bnVzZWQgaG9sZSAuLi4KK2ZmZmZmZmZmODgwMDAwMDAgLSBmZmZmZmZmZmZmZjAwMDAwICg9MTkxOU1CKSBtb2R1bGUgbWFwcGluZyBzcGFjZQorCit2bWFsbG9jIHNwYWNlIGlzIGxhemlseSBzeW5jaHJvbml6ZWQgaW50byB0aGUgZGlmZmVyZW50IFBNTDQgcGFnZXMgb2YKK3RoZSBwcm9jZXNzZXMgdXNpbmcgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciwgd2l0aCBpbml0X2xldmVsNF9wZ3QgYXMKK3JlZmVyZW5jZS4KKworQ3VycmVudCBYODYtNjQgaW1wbGVtZW50YXRpb25zIG9ubHkgc3VwcG9ydCA0MCBiaXQgb2YgYWRkcmVzcyBzcGFjZSwKK2J1dCB3ZSBzdXBwb3J0IHVwdG8gNDZiaXRzLiBUaGlzIGV4cGFuZHMgaW50byBNQlogc3BhY2UgaW4gdGhlIHBhZ2UgdGFibGVzLgorCistQW5kaSBLbGVlbiwgSnVsIDIwMDQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veHRlcm0tbGludXgueHBtIGIvRG9jdW1lbnRhdGlvbi94dGVybS1saW51eC54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2OWMxYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24veHRlcm0tbGludXgueHBtCkBAIC0wLDAgKzEsNjEgQEAKKy8qIFhQTSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICAgICAgIFRoaXMgcGl4bWFwIHdhcyBtYWRlIGJ5IFRvcnN0ZW4gUG91bGluIC0gMTk5NiAtIHRvcnN0ZW5AZGlrdS5kayAgICoqLworLyoqICAgICAgIEl0IHdhcyBtYWRlIGJ5IGNvbWJpbmluZyB4dGVybS1ibGFuay54cG0gd2l0aCAgICAgICAgICAgICAgICAgICAgICoqLworLyoqICAgICAgIHRoZSB3b25kZXJmdWxseSBjdXRlIExpbnV4IHBlbmd1aW4gbWFzY290IGJ5IExhcnJ5IEV3aW5nLiAgICAgICAgICoqLworLyoqICAgICAgIEkgaGFkIHRvIGNoYW5nZSBMYXJyeSdzIHBlbmd1aW4gYSBsaXR0bGUgdG8gbWFrZSBpdCBmaXQuICAgICAgICAgICoqLworLyoqICAgICAgIHh0ZXJtLWJsYW5rLnhwbSBjb250YWluZWQgdGhlIGZvbGxvd2luZyBjb21tZW50OiAgICAgICAgICAgICAgICAgICoqLworLyoqICAgICAgIFRoaXMgcGl4bWFwIGlzIGtpbmRseSBvZmZlcmVkIGJ5IElvbiBDaW9uY2EgLSAxOTkyIC0gICAgICAgICAgICAgICoqLworLyoqICAgICAgIFN3aXNzIEZlZGVyYWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworLyoqICAgICAgIENlbnRyYWwgQ29tcHV0aW5nIFNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNoYXIgKiBpbWFnZV9uYW1lIFtdID0geworLyoqLworIjY0IDM4IDggMSIsCisvKiovCisiIAlzIG1hc2sJYyBub25lIiwKKyIuCWMgZ3JheTcwIiwKKyJYCWMgZ3JheTg1IiwKKyJvCWMgZ3JheTUwIiwKKyJPCWMgeWVsbG93IiwKKyIrCWMgZGFya29saXZlZ3JlZW4iLAorIkAJYyB3aGl0ZSIsCisiIwljIGJsYWNrIiwKKyIgICAgICAgICAgICAgICMjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgIyMjIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAjIyMjIyMjIyMjICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAjIyMjIyMjIyMjIyAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWC4gICAgICAgICAgIiwKKyIgICAgICAgICAgICAjIyMjIyMjIyMjIyAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvbyAgICAgICAgIiwKKyIgICAgICAgICAgICAjQEBAI0BAQCMjIyAuWFgrKysrKysrKysrKysrKysrKysrKysrK1hYWFhvbyAgICAgICAgIiwKKyIgICAgICAgICAgICAjQCNAI0AjQCMjIyAuWFgrKysrKysrKysrKysrKysrKysrKysrKytYWFhvb28gICAgICAgIiwKKyIgICAgICAgICAgICAjQCMjIyMjQCMjIyAuWFgrK0BAK0ArK0ArQEBAQCsrQCsrKysrKytYWFhvb28gICAgICAgIiwKKyIgICAgICAgICAgICAjIyNPT08jIyMjIyMuWFgrKysrKysrKysrKysrKysrKysrKysrKytYWFhvb29vICAgICAgIiwKKyIgICAgICAgICAgICAjI09PT09PTyMjIyMuWFgrK0BAQEArQEArQEBAKysrKysrKysrKytYWFhvb29vICAgICAgIiwKKyIgICAgICAgICAgICAjTyNPT08jTyMjIyMuWFgrKysrKysrKysrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICAgICAjI08jIyNPTyMjIyMuWFgrK0BAQEBAQEBAQEArQEBAQEArKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICAgICAjIyNPT09PQCMjIyMjWFgrKysrKysrKysrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICAgICMjQCMjI0BAQEAjIyMjWFgrK0BAQCtAQEBAK0BAKytAQEArKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICAgICNAQEBAQEBAQEBAIyMjI1grKysrKysrKysrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICAgIyNAQEBAQEBAQEBAIyMjIyMrK0ArKysrKysrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICAjIyNAQEBAQEBAQEBAIyMjIyMjKysrKysrKysrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICMjIyNAQEBAQEBAQEBAQCMjIyMjK0BAQEArQCtAQEArQCsrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICMjI0BAQEBAQEBAQEBAQCMjIyMjIysrKysrKysrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgICMjQEBAQEBAQEBAQEBAQEAjIyMjI0ArQEBAQCsrKysrKysrKysrKysrKytYWFhvb29vbyAgICAgIiwKKyIgICAgICAgIyMjQEBAQEBAQEBAQEBAQEAjIyMjIyMrKysrKysrKysrKysrKysrKysrK1hYWFhvb29vICAgICAgIiwKKyIgICAgICAgIyMjQEBAQEBAQEBAQEBAQEAjIyMjIyNYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvb28gICAgICAgIiwKKyIgICAgICAjIyNAQEBAQEBAQEBAQEBAQEAjIyMjIyNYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG9vbyAgICAgICAgIiwKKyIgICAgICAjIyNAQEBAQEBAQEBAQEBAQEBAIyMjIyNvb29vb29vb29vb29vb29vb29vb29vby4uLm9vICAgICAgIiwKKyIgICAgICAjIyNAQEBAQEBAQEBAQEBAQEAjIyMjIyMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ub29vICAgICAgIiwKKyIgICAgICNPTyMjQEBAQEBAQEBAQEBAQCMjIyMjIyNvb29vb29vb29vb29vb29vb29vb29vb29vb29vICAgICAgIiwKKyIgICAgICNPT08jI0BAQEBAQEBAQEBAI09PIyMjI08jWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvb29vLi4gLi4gIiwKKyIgICMjI09PT09PIyNAQEBAQEBAQEBAI09PTyNPT08jWFhYWFhYWFhYWFhYWFgjIyMjIyMjWFhvb29vICAuICAuIiwKKyIgI09PT09PT09PIyMjQEBAQEBAQEBAI09PT09PT08jb29vb29vb29vb29vb29vb29vb29YWFhvb28gICAgIC4gIiwKKyIgI09PT09PT09PTyMjI0BAQEBAQEBAQCNPT09PT09PIyNYWFhYWFhYWFhYWFhYWFhYWG9vb29vICAgICAgLiAgIiwKKyIgICNPT09PT09PT08jQEBAQEBAQEAjIyNPT09PT09PT08jWFhYWFhYWFhYWFhYWFhYb28gICAgICBvb29vb28gIiwKKyIgICNPT09PT09PT08jQEBAQEBAQCMjIyNPT09PT09PTyNAQEBAQEBAQEBAQFhYWFhYb28gICBvb29vby4uLm8gIiwKKyIgI09PT09PT09PT09PIyMjIyMjIyMjIyNPT09PT08jI1hYWFhYWFhYWFhYWFhYWFhvbyAgIG9vWFhYb28uLm8gIiwKKyIgICMjT09PT09PT09PIyMjIyMjIyMjIyNPT09PIyNAQEBAQEBAQEBAQEBAWFhYWG9vICAgIG9YWFhYWC4ubyAgIiwKKyIgICAgICMjI09PT08jIyMgICAgb1hYIyNPT08jWFhYWFhYWFhYWFhYWFhYWFhYb28gICAgIG8uLi4uLm9vICAgIiwKKyIgICAgICAgICAjIyMjICAgICAgb29vbyMjIyNvb29vb29vb29vb29vb29vb29vbyAgICAgIG9vb29vb28gICAgIiwKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3pvcnJvLnR4dCBiL0RvY3VtZW50YXRpb24vem9ycm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODI5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3pvcnJvLnR4dApAQCAtMCwwICsxLDEwMiBAQAorCQlXcml0aW5nIERldmljZSBEcml2ZXJzIGZvciBab3JybyBEZXZpY2VzCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV3JpdHRlbiBieSBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgorTGFzdCByZXZpc2VkOiBTZXB0ZW1iZXIgNSwgMjAwMworCisKKzEuIEludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBab3JybyBidXMgaXMgdGhlIGJ1cyB1c2VkIGluIHRoZSBBbWlnYSBmYW1pbHkgb2YgY29tcHV0ZXJzLiBUaGFua3MgdG8KK0F1dG9Db25maWcodG0pLCBpdCdzIDEwMCUgUGx1Zy1hbmQtUGxheS4KKworVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBab3JybyBidXNzZXMsIFpvcnJvIElJIGFuZCBab3JybyBJSUk6CisKKyAgLSBUaGUgWm9ycm8gSUkgYWRkcmVzcyBzcGFjZSBpcyAyNC1iaXQgYW5kIGxpZXMgd2l0aGluIHRoZSBmaXJzdCAxNiBNQiBvZiB0aGUKKyAgICBBbWlnYSdzIGFkZHJlc3MgbWFwLgorCisgIC0gWm9ycm8gSUlJIGlzIGEgMzItYml0IGV4dGVuc2lvbiBvZiBab3JybyBJSSwgd2hpY2ggaXMgYmFja3dhcmRzIGNvbXBhdGlibGUKKyAgICB3aXRoIFpvcnJvIElJLiBUaGUgWm9ycm8gSUlJIGFkZHJlc3Mgc3BhY2UgbGllcyBvdXRzaWRlIHRoZSBmaXJzdCAxNiBNQi4KKworCisyLiBQcm9iaW5nIGZvciBab3JybyBEZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1pvcnJvIGRldmljZXMgYXJlIGZvdW5kIGJ5IGNhbGxpbmcgYHpvcnJvX2ZpbmRfZGV2aWNlKCknLCB3aGljaCByZXR1cm5zIGEKK3BvaW50ZXIgdG8gdGhlIGBuZXh0JyBab3JybyBkZXZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIFpvcnJvIElELiBBIHByb2JlIGxvb3AKK2ZvciB0aGUgYm9hcmQgd2l0aCBab3JybyBJRCBgWk9SUk9fUFJPRF94eHgnIGxvb2tzIGxpa2U6CisKKyAgICBzdHJ1Y3Qgem9ycm9fZGV2ICp6ID0gTlVMTDsKKworICAgIHdoaWxlICgoeiA9IHpvcnJvX2ZpbmRfZGV2aWNlKFpPUlJPX1BST0RfeHh4LCB6KSkpIHsKKwlpZiAoIXpvcnJvX3JlcXVlc3RfcmVnaW9uKHotPnJlc291cmNlLnN0YXJ0K01ZX1NUQVJULCBNWV9TSVpFLAorCQkJCSAgIk15IGV4cGxhbmF0aW9uIikpCisJLi4uCisgICAgfQorCitgWk9SUk9fV0lMRENBUkQnIGFjdHMgYXMgYSB3aWxkY2FyZCBhbmQgZmluZHMgYW55IFpvcnJvIGRldmljZS4gSWYgeW91ciBkcml2ZXIKK3N1cHBvcnRzIGRpZmZlcmVudCB0eXBlcyBvZiBib2FyZHMsIHlvdSBjYW4gdXNlIGEgY29uc3RydWN0IGxpa2U6CisKKyAgICBzdHJ1Y3Qgem9ycm9fZGV2ICp6ID0gTlVMTDsKKworICAgIHdoaWxlICgoeiA9IHpvcnJvX2ZpbmRfZGV2aWNlKFpPUlJPX1dJTERDQVJELCB6KSkpIHsKKwlpZiAoei0+aWQgIT0gWk9SUk9fUFJPRF94eHgxICYmIHotPmlkICE9IFpPUlJPX1BST0RfeHh4MiAmJiAuLi4pCisJICAgIGNvbnRpbnVlOworCWlmICghem9ycm9fcmVxdWVzdF9yZWdpb24oei0+cmVzb3VyY2Uuc3RhcnQrTVlfU1RBUlQsIE1ZX1NJWkUsCisJCQkJICAiTXkgZXhwbGFuYXRpb24iKSkKKwkuLi4KKyAgICB9CisKKworMy4gWm9ycm8gUmVzb3VyY2VzCistLS0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIHlvdSBjYW4gYWNjZXNzIGEgWm9ycm8gZGV2aWNlJ3MgcmVnaXN0ZXJzLCB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgaXQncworbm90IHlldCBpbiB1c2UuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgSS9PIG1lbW9yeSBzcGFjZSByZXNvdXJjZSBtYW5hZ2VtZW50CitmdW5jdGlvbnM6CisKKyAgICByZXF1ZXN0X21lbV9yZWdpb24oKQorICAgIHJlbGVhc2VfbWVtX3JlZ2lvbigpCisKK1Nob3J0Y3V0cyB0byBjbGFpbSB0aGUgd2hvbGUgZGV2aWNlJ3MgYWRkcmVzcyBzcGFjZSBhcmUgcHJvdmlkZWQgYXMgd2VsbDoKKworICAgIHpvcnJvX3JlcXVlc3RfZGV2aWNlCisgICAgem9ycm9fcmVsZWFzZV9kZXZpY2UKKworCis0LiBBY2Nlc3NpbmcgdGhlIFpvcnJvIEFkZHJlc3MgU3BhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYWRkcmVzcyByZWdpb25zIGluIHRoZSBab3JybyBkZXZpY2UgcmVzb3VyY2VzIGFyZSBab3JybyBidXMgYWRkcmVzcworcmVnaW9ucy4gRHVlIHRvIHRoZSBpZGVudGl0eSBidXMtcGh5c2ljYWwgYWRkcmVzcyBtYXBwaW5nIG9uIHRoZSBab3JybyBidXMsCit0aGV5IGFyZSBDUFUgcGh5c2ljYWwgYWRkcmVzc2VzIGFzIHdlbGwuCisKK1RoZSB0cmVhdG1lbnQgb2YgdGhlc2UgcmVnaW9ucyBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIFpvcnJvIHNwYWNlOgorCisgIC0gWm9ycm8gSUkgYWRkcmVzcyBzcGFjZSBpcyBhbHdheXMgbWFwcGVkIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGJlIG1hcHBlZAorICAgIGV4cGxpY2l0bHkgdXNpbmcgel9pb3JlbWFwKCkuCisgICAgCisgICAgQ29udmVyc2lvbiBmcm9tIGJ1cy9waHlzaWNhbCBab3JybyBJSSBhZGRyZXNzZXMgdG8ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzCisgICAgYW5kIHZpY2UgdmVyc2EgaXMgZG9uZSB1c2luZzoKKworCXZpcnRfYWRkciA9IFpUV09fVkFERFIoYnVzX2FkZHIpOworCWJ1c19hZGRyID0gWlRXT19QQUREUih2aXJ0X2FkZHIpOworCisgIC0gWm9ycm8gSUlJIGFkZHJlc3Mgc3BhY2UgbXVzdCBiZSBtYXBwZWQgZXhwbGljaXRseSB1c2luZyB6X2lvcmVtYXAoKSBmaXJzdAorICAgIGJlZm9yZSBpdCBjYW4gYmUgYWNjZXNzZWQ6CisgCisJdmlydF9hZGRyID0gel9pb3JlbWFwKGJ1c19hZGRyLCBzaXplKTsKKwkuLi4KKwl6X2lvdW5tYXAodmlydF9hZGRyKTsKKworCis1LiBSZWZlcmVuY2VzCistLS0tLS0tLS0tLS0tCisKK2xpbnV4L2luY2x1ZGUvbGludXgvem9ycm8uaAorbGludXgvaW5jbHVkZS9hc20te202OGsscHBjfS96b3Jyby5oCitsaW51eC9pbmNsdWRlL2xpbnV4L3pvcnJvX2lkcy5oCitsaW51eC9kcml2ZXJzL3pvcnJvCisvcHJvYy9idXMvem9ycm8KKwo=